ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM0ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0wLDAgKzEsNjEgQEAKK1doYXQ6CQlzZWN1cml0eS9pbWEvcG9saWN5CitEYXRlOgkJTWF5IDIwMDgKK0NvbnRhY3Q6CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkJTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJCXZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcworCQlsb2FkZWQgaW50byB0aGUgcnVuLXRpbWUgb2YgdGhpcyBzeXN0ZW0uICBBdCBydW50aW1lLAorCQl0aGUgcG9saWN5IGNhbiBiZSBjb25zdHJhaW5lZCBiYXNlZCBvbiBMU00gc3BlY2lmaWMgZGF0YS4KKwkJUG9saWNpZXMgYXJlIGxvYWRlZCBpbnRvIHRoZSBzZWN1cml0eWZzIGZpbGUgaW1hL3BvbGljeQorCQlieSBvcGVuaW5nIHRoZSBmaWxlLCB3cml0aW5nIHRoZSBydWxlcyBvbmUgYXQgYSB0aW1lIGFuZAorCQl0aGVuIGNsb3NpbmcgdGhlIGZpbGUuICBUaGUgbmV3IHBvbGljeSB0YWtlcyBlZmZlY3QgYWZ0ZXIKKwkJdGhlIGZpbGUgaW1hL3BvbGljeSBpcyBjbG9zZWQuCisKKwkJcnVsZSBmb3JtYXQ6IGFjdGlvbiBbY29uZGl0aW9uIC4uLl0KKworCQlhY3Rpb246IG1lYXN1cmUgfCBkb250X21lYXN1cmUKKwkJY29uZGl0aW9uOj0gYmFzZSB8IGxzbQorCQkJYmFzZToJW1tmdW5jPV0gW21hc2s9XSBbZnNtYWdpYz1dIFt1aWQ9XV0KKwkJCWxzbToJW1tzdWJqX3VzZXI9XSBbc3Vial9yb2xlPV0gW3N1YmpfdHlwZT1dCisJCQkJIFtvYmpfdXNlcj1dIFtvYmpfcm9sZT1dIFtvYmpfdHlwZT1dXQorCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bSU5PREVfUEVSTUlTU0lPTl0KKwkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCisJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCisJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCisJCWxzbTogIAlhcmUgTFNNIHNwZWNpZmljCisKKwkJZGVmYXVsdCBwb2xpY3k6CisJCQkjIFBST0NfU1VQRVJfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4OWZhMAorCQkJIyBTWVNGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHg2MjY1NjU3MgorCQkJIyBERUJVR0ZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDY0NjI2NzIwCisJCQkjIFRNUEZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDAxMDIxOTk0CisJCQkjIFNFQ1VSSVRZRlNfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4NzM2MzY2NzMKKworCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKKwkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQworCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCisJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKKwkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKKwkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisKKwkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgorCisJCVNFTGludXg6CisJCQkjIFNFTElOVVhfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4Rjk3Q0ZGOEMKKworCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPXZhcl9sb2dfdAorCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPWF1ZGl0ZF9sb2dfdAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1JTk9ERV9QRVJNIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisKKwkJU21hY2s6CisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMTQ2MmVkOC4uYTNhODNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKIAkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbCByYXBpZGlvLnhtbCBcCiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCi0JICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sCisJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKKwkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCmluZGV4IDlkNjQ0ZjcuLjAyMzBhOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IkFMU0EtRHJpdmVyLUFQSSI+CiAgIDxib29raW5mbz4KICAgICA8dGl0bGU+VGhlIEFMU0EgRHJpdmVyIEFQSTwvdGl0bGU+CiAKQEAgLTM1LDYgKzM1LDggQEAKIAogICA8L2Jvb2tpbmZvPgogCis8dG9jPjwvdG9jPgorCiAgIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnZW1lbnQ8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2luaXQuYwpAQCAtNzEsNiArNzMsMTAgQEAKICFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCiAhRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKICAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5WaXJ0dWFsIE1hc3RlciBDb250cm9sIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvdm1hc3Rlci5jCishSWluY2x1ZGUvc291bmQvY29udHJvbC5oCisgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KICAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgpAQCAtODksNiArOTUsOSBAQAogICAgICA8c2VjdDE+PHRpdGxlPkhhcmR3YXJlLURlcGVuZGVudCBEZXZpY2VzIEFQSTwvdGl0bGU+CiAhRXNvdW5kL2NvcmUvaHdkZXAuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkphY2sgQWJzdHJhY3Rpb24gTGF5ZXIgQVBJPC90aXRsZT4KKyFFc291bmQvY29yZS9qYWNrLmMKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5JU0EgRE1BIEhlbHBlcnM8L3RpdGxlPgogIUVzb3VuZC9jb3JlL2lzYWRtYS5jCiAgICAgIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbAppbmRleCAzYTg4MmQ5Li5jNjcxYTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKQEAgLTQ0MCw2ICs0NDAsNyBAQAogICAgICB1c2VkIGluIHRoZSBnZW5lcmljIElSUSBsYXllci4KICAgICAgPC9wYXJhPgogIUlpbmNsdWRlL2xpbnV4L2lycS5oCishSWluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hYzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAppbmRleCA3N2MzYzIwLi44YWY2ZDk2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbApAQCAtMTcsOCArMTcsNyBAQAogICAgIDwvYXV0aG9yZ3JvdXA+CiAKICAgICA8Y29weXJpZ2h0PgotICAgICAgPHllYXI+MjAwNzwveWVhcj4KLSAgICAgIDx5ZWFyPjIwMDg8L3llYXI+CisgICAgICA8eWVhcj4yMDA3LTIwMDk8L3llYXI+CiAgICAgICA8aG9sZGVyPkpvaGFubmVzIEJlcmc8L2hvbGRlcj4KICAgICA8L2NvcHlyaWdodD4KIApAQCAtMTY1LDggKzE2NCw4IEBACiAhUGluY2x1ZGUvbmV0L21hYzgwMjExLmggRnJhbWUgZm9ybWF0CiAgICAgICA8L3NlY3QxPgogICAgICAgPHNlY3QxPgotICAgICAgICA8dGl0bGU+QWxpZ25tZW50IGlzc3VlczwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPlRCRDwvcGFyYT4KKyAgICAgICAgPHRpdGxlPlBhY2tldCBhbGlnbm1lbnQ8L3RpdGxlPgorIVBuZXQvbWFjODAyMTEvcnguYyBQYWNrZXQgYWxpZ25tZW50CiAgICAgICA8L3NlY3QxPgogICAgICAgPHNlY3QxPgogICAgICAgICA8dGl0bGU+Q2FsbGluZyBpbnRvIG1hYzgwMjExIGZyb20gaW50ZXJydXB0czwvdGl0bGU+CkBAIC0yMjMsNiArMjIyLDExIEBACiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2tleV9mbGFncwogICAgIDwvY2hhcHRlcj4KIAorICAgIDxjaGFwdGVyIGlkPSJwb3dlcnNhdmUiPgorICAgICAgPHRpdGxlPlBvd2Vyc2F2ZSBzdXBwb3J0PC90aXRsZT4KKyFQaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBQb3dlcnNhdmUgc3VwcG9ydAorICAgIDwvY2hhcHRlcj4KKwogICAgIDxjaGFwdGVyIGlkPSJxb3MiPgogICAgICAgPHRpdGxlPk11bHRpcGxlIHF1ZXVlcyBhbmQgUW9TIHN1cHBvcnQ8L3RpdGxlPgogICAgICAgPHBhcmE+VEJEPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCmluZGV4IDUyZTFiNzkuLjhmNmUzYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKQEAgLTQyLDYgKzQyLDEzIEBACiAKIDxyZXZoaXN0b3J5PgogCTxyZXZpc2lvbj4KKwk8cmV2bnVtYmVyPjAuODwvcmV2bnVtYmVyPgorCTxkYXRlPjIwMDgtMTItMjQ8L2RhdGU+CisJPGF1dGhvcmluaXRpYWxzPmhqazwvYXV0aG9yaW5pdGlhbHM+CisJPHJldnJlbWFyaz5BZGRlZCBuYW1lIGF0dHJpYnV0ZXMgaW4gbWVtIGFuZCBwb3J0aW8gc3lzZnMgZGlyZWN0b3JpZXMuCisJCTwvcmV2cmVtYXJrPgorCTwvcmV2aXNpb24+CisJPHJldmlzaW9uPgogCTxyZXZudW1iZXI+MC43PC9yZXZudW1iZXI+CiAJPGRhdGU+MjAwOC0xMi0yMzwvZGF0ZT4KIAk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KQEAgLTMwMywxMiArMzEwLDE5IEBACiAJYXBwZWFyIGlmIHRoZSBzaXplIG9mIHRoZSBtYXBwaW5nIGlzIG5vdCAwLgogPC9wYXJhPgogPHBhcmE+Ci0JRWFjaCA8ZmlsZW5hbWU+bWFwWC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgdHdvIHJlYWQtb25seSBmaWxlcwotCXRoYXQgc2hvdyBzdGFydCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBtZW1vcnk6CisJRWFjaCA8ZmlsZW5hbWU+bWFwWC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgZm91ciByZWFkLW9ubHkgZmlsZXMKKwl0aGF0IHNob3cgYXR0cmlidXRlcyBvZiB0aGUgbWVtb3J5OgogPC9wYXJhPgogPGl0ZW1pemVkbGlzdD4KIDxsaXN0aXRlbT4KIAk8cGFyYT4KKwk8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+OiBBIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIG1hcHBpbmcuIFRoaXMKKwlpcyBvcHRpb25hbCwgdGhlIHN0cmluZyBjYW4gYmUgZW1wdHkuIERyaXZlcnMgY2FuIHNldCB0aGlzIHRvIG1ha2UgaXQKKwllYXNpZXIgZm9yIHVzZXJzcGFjZSB0byBmaW5kIHRoZSBjb3JyZWN0IG1hcHBpbmcuCisJPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKwk8cGFyYT4KIAk8ZmlsZW5hbWU+YWRkcjwvZmlsZW5hbWU+OiBUaGUgYWRkcmVzcyBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgbWFwcGVkLgogCTwvcGFyYT4KIDwvbGlzdGl0ZW0+CkBAIC0zNjYsMTIgKzM4MCwxOSBAQAogCTxmaWxlbmFtZT4vc3lzL2NsYXNzL3Vpby91aW9YL3BvcnRpby88L2ZpbGVuYW1lPi4KIDwvcGFyYT4KIDxwYXJhPgotCUVhY2ggPGZpbGVuYW1lPnBvcnRYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aHJlZSByZWFkLW9ubHkKLQlmaWxlcyB0aGF0IHNob3cgc3RhcnQsIHNpemUsIGFuZCB0eXBlIG9mIHRoZSBwb3J0IHJlZ2lvbjoKKwlFYWNoIDxmaWxlbmFtZT5wb3J0WC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgZm91ciByZWFkLW9ubHkKKwlmaWxlcyB0aGF0IHNob3cgbmFtZSwgc3RhcnQsIHNpemUsIGFuZCB0eXBlIG9mIHRoZSBwb3J0IHJlZ2lvbjoKIDwvcGFyYT4KIDxpdGVtaXplZGxpc3Q+CiA8bGlzdGl0ZW0+CiAJPHBhcmE+CisJPGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPjogQSBzdHJpbmcgaWRlbnRpZmllciBmb3IgdGhpcyBwb3J0IHJlZ2lvbi4KKwlUaGUgc3RyaW5nIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgZW1wdHkuIERyaXZlcnMgY2FuIHNldCBpdCB0byBtYWtlIGl0CisJZWFzaWVyIGZvciB1c2Vyc3BhY2UgdG8gZmluZCBhIGNlcnRhaW4gcG9ydCByZWdpb24uCisJPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKwk8cGFyYT4KIAk8ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPjogVGhlIGZpcnN0IHBvcnQgb2YgdGhpcyByZWdpb24uCiAJPC9wYXJhPgogPC9saXN0aXRlbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCmluZGV4IDg3YTdjMDdhLi40NmIwOGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtMSwxMSArMSwxMSBAQAotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjQuMS8vRU4iPgotCi08Ym9vaz4KLTw/ZGJodG1sIGZpbGVuYW1lPSJpbmRleC5odG1sIj4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgogCiA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KIDwhLS0gSGVhZGVyICAtLT4KIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPGJvb2sgaWQ9IldyaXRpbmctYW4tQUxTQS1Ecml2ZXIiPgogICA8Ym9va2luZm8+CiAgICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgogICAgIDxhdXRob3I+CkBAIC00OTIsOSArNDkyLDkgQEAKICAgICAgICAgICB9CiAKICAgICAgICAgICAvKiAoMikgKi8KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLSAgICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgICAgLyogKDMpICovCiAgICAgICAgICAgZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CkBAIC01OTAsOCArNTkwLDkgQEAKICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgIGludCBlcnI7CiAgIC4uLi4KLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogXV0+CiAgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgpAQCAtODA5LDI2ICs4MTAsMjggQEAKIAogICAgICAgPHBhcmE+CiAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdG8gY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSwgY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi4KIAogICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgogICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpOworICBpbnQgZXJyOworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUsICZjYXJkKTsKIF1dPgogICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgogICAgICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgYXJndW1lbnRzLCB0aGUgY2FyZC1pbmRleCBudW1iZXIsIHRoZQorICAgICAgICBUaGUgZnVuY3Rpb24gdGFrZXMgZml2ZSBhcmd1bWVudHMsIHRoZSBjYXJkLWluZGV4IG51bWJlciwgdGhlCiAgICAgICAgIGlkIHN0cmluZywgdGhlIG1vZHVsZSBwb2ludGVyICh1c3VhbGx5CiAgICAgICAgIDxjb25zdGFudD5USElTX01PRFVMRTwvY29uc3RhbnQ+KSwKLSAgICAgICAgYW5kIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UuICBUaGUgbGFzdCBhcmd1bWVudCBpcyB1c2VkIHRvCisgICAgICAgIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UsIGFuZCB0aGUgcG9pbnRlciB0byByZXR1cm4gdGhlCisgICAgICAgIGNhcmQgaW5zdGFuY2UuICBUaGUgZXh0cmFfc2l6ZSBhcmd1bWVudCBpcyB1c2VkIHRvCiAgICAgICAgIGFsbG9jYXRlIGNhcmQtJmd0O3ByaXZhdGVfZGF0YSBmb3IgdGhlCiAgICAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gIE5vdGUgdGhhdCB0aGVzZSBkYXRhCi0gICAgICAgIGFyZSBhbGxvY2F0ZWQgYnkgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCisgICAgICAgIGFyZSBhbGxvY2F0ZWQgYnkgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4uCiAgICAgICA8L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCkBAIC05MTUsMTUgKzkxOCwxNiBAQAogICAgICAgPC9wYXJhPgogCiAgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KLSAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDx0aXRsZT4xLiBBbGxvY2F0aW5nIHZpYSA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPi48L3RpdGxlPgogICAgICAgICA8cGFyYT4KICAgICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHlvdSBjYW4gcGFzcyB0aGUgZXh0cmEtZGF0YS1sZW5ndGgKLQkgIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4sIGkuZS4KKwkgIHRvIHRoZSA0dGggYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4sIGkuZS4KIAogICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CiAgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiA8IVtDREFUQVsKLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBteWNoaXApKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApLCAmY2FyZCk7CiBdXT4KICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CkBAIC05NTIsOCArOTU2LDggQEAKIAogICAgICAgICA8cGFyYT4KICAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAotICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAogICAgICAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPi4gCiAKICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgpAQCAtOTYxLDcgKzk2NSw3IEBACiA8IVtDREFUQVsKICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwogICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAgIC4uLi4uCiAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogXV0+CkBAIC01NzUwLDggKzU3NTQsOSBAQAogICAgICAgICAgIC4uLi4KICAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKICAgICAgICAgICAuLi4uCiAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgLi4uLgpAQCAtNTc2Myw3ICs1NzY4LDcgQEAKICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgogCiAJV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKLQk8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQorCTxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LCBpdCdzIGFueXdheSBhY2Nlc3NpYmxlCiAJdmlhIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2RhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZC4KIAogICAgICAgPGluZm9ybWFsZXhhbXBsZT4KQEAgLTU3NzUsOSArNTc4MCwxMCBAQAogICAgICAgICAgIC4uLi4KICAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteWNoaXApKTsKKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSwgJmNhcmQpOwogICAgICAgICAgIC4uLi4KICAgICAgICAgICBjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogICAgICAgICAgIC4uLi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dAppbmRleCA2MzRjOTUyLi5kNWFmM2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CkBAIC0zNSw5ICszNSwzIEBACiAjIGVjaG8gYW50aWNpcGF0b3J5ID4gL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCiAjIGNhdCAvc3lzL2Jsb2NrL2hkYS9xdWV1ZS9zY2hlZHVsZXIKIG5vb3AgW2FudGljaXBhdG9yeV0gZGVhZGxpbmUgY2ZxCi0KLUVhY2ggaW8gcXVldWUgaGFzIGEgc2V0IG9mIGlvIHNjaGVkdWxlciB0dW5hYmxlcyBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZXNlCi10dW5hYmxlcyBjb250cm9sIGhvdyB0aGUgaW8gc2NoZWR1bGVyIHdvcmtzLiBZb3UgY2FuIGZpbmQgdGhlc2UgZW50cmllcwotaW46Ci0KLS9zeXMvYmxvY2svPGRldmljZT4vcXVldWUvaW9zY2hlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CmluZGV4IDViMGNmYTYuLmNlNzNmM2ViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CkBAIC0xMTcsMTAgKzExNywyOCBAQAogc2FtcGxpbmdfcmF0ZTogbWVhc3VyZWQgaW4gdVMgKDEwXi02IHNlY29uZHMpLCB0aGlzIGlzIGhvdyBvZnRlbiB5b3UKIHdhbnQgdGhlIGtlcm5lbCB0byBsb29rIGF0IHRoZSBDUFUgdXNhZ2UgYW5kIHRvIG1ha2UgZGVjaXNpb25zIG9uCiB3aGF0IHRvIGRvIGFib3V0IHRoZSBmcmVxdWVuY3kuICBUeXBpY2FsbHkgdGhpcyBpcyBzZXQgdG8gdmFsdWVzIG9mCi1hcm91bmQgJzEwMDAwJyBvciBtb3JlLgorYXJvdW5kICcxMDAwMCcgb3IgbW9yZS4gSXQncyBkZWZhdWx0IHZhbHVlIGlzIChjbXAuIHdpdGggdXNlcnMtZ3VpZGUudHh0KToKK3RyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDAKK1RoZSBsb3dlc3QgdmFsdWUgeW91IGNhbiBzZXQgaXM6Cit0cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAgb3IgaXQgbWF5IGdldCByZXN0cmljdGVkIHRvIGEgdmFsdWUgd2hlcmUgaXQKK21ha2VzIG5vdCBzZW5zZSBmb3IgdGhlIGtlcm5lbCBhbnltb3JlIHRvIHBvbGwgdGhhdCBvZnRlbiB3aGljaCBkZXBlbmRzCitvbiB5b3VyIEhaIGNvbmZpZyB2YXJpYWJsZSAoSFo9MTAwMDogbWF4PTIwMDAwdXMsIEhaPTI1MDogbWF4PTUwMDApLgorQmUgYXdhcmUgdGhhdCB0cmFuc2l0aW9uIGxhdGVuY3kgaXMgaW4gbnMgYW5kIHNhbXBsaW5nX3JhdGUgaXMgaW4gdXMsIHNvIHlvdQorZ2V0IHRoZSBzYW1lIHN5c2ZzIHZhbHVlIGJ5IGRlZmF1bHQuCitTYW1wbGluZyByYXRlIHNob3VsZCBhbHdheXMgZ2V0IGFkanVzdGVkIGNvbnNpZGVyaW5nIHRoZSB0cmFuc2l0aW9uIGxhdGVuY3kKK1RvIHNldCB0aGUgc2FtcGxpbmcgcmF0ZSA3NTAgdGltZXMgYXMgaGlnaCBhcyB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5CitpbiB0aGUgYmFzaCAoYXMgc2FpZCwgMTAwMCBpcyBkZWZhdWx0KSwgZG86CitlY2hvIGAkKCgkKGNhdCBjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSkgKiA3NTAgLyAxMDAwKSkgXAorICAgID5vbmRlbWFuZC9zYW1wbGluZ19yYXRlCiAKLXNob3dfc2FtcGxpbmdfcmF0ZV8obWlufG1heCk6IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNhbXBsaW5nIHJhdGVzCi1hdmFpbGFibGUgdGhhdCB5b3UgbWF5IHNldCAnc2FtcGxpbmdfcmF0ZScgdG8uCitzaG93X3NhbXBsaW5nX3JhdGVfKG1pbnxtYXgpOiBUSElTIElOVEVSRkFDRSBJUyBERVBSRUNBVEVELCBET04nVCBVU0UgSVQuCitZb3UgY2FuIHVzZSB3aWRlciByYW5nZXMgbm93IGFuZCB0aGUgZ2VuZXJhbAorY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kgdmFyaWFibGUgKGNtcC4gd2l0aCB1c2VyLWd1aWRlLnR4dCkgY2FuIGJlCit1c2VkIHRvIG9idGFpbiBleGFjdGx5IHRoZSBzYW1lIGluZm86CitzaG93X3NhbXBsaW5nX3JhdGVfbWluID0gdHJhbnN0aXRpb25fbGF0ZW5jeSAqIDUwMCAgICAvIDEwMDAKK3Nob3dfc2FtcGxpbmdfcmF0ZV9tYXggPSB0cmFuc3RpdGlvbl9sYXRlbmN5ICogNTAwMDAwIC8gMTAwMAorKGRpdmlkZWQgYnkgMTAwMCBpcyB0byBpbGx1c3RyYXRlIHRoYXQgc2FtcGxpbmcgcmF0ZSBpcyBpbiB1cyBhbmQKK3RyYW5zaXRpb24gbGF0ZW5jeSBpcyBleHBvcnRlZCBucykuCiAKIHVwX3RocmVzaG9sZDogZGVmaW5lcyB3aGF0IHRoZSBhdmVyYWdlIENQVSB1c2FnZSBiZXR3ZWVuIHRoZSBzYW1wbGluZ3MKIG9mICdzYW1wbGluZ19yYXRlJyBuZWVkcyB0byBiZSBmb3IgdGhlIGtlcm5lbCB0byBtYWtlIGEgZGVjaXNpb24gb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CmluZGV4IDkxNzkxOGYuLjc1ZjQxMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dApAQCAtMTUyLDYgKzE1MiwxOCBAQAogCQkJCWZyZXF1ZW5jeSB0aGUgcHJvY2Vzc29yIGNhbiBydW4gYXQoaW4ga0h6KSAKIGNwdWluZm9fbWF4X2ZyZXEgOgkJdGhpcyBmaWxlIHNob3dzIHRoZSBtYXhpbXVtIG9wZXJhdGluZwogCQkJCWZyZXF1ZW5jeSB0aGUgcHJvY2Vzc29yIGNhbiBydW4gYXQoaW4ga0h6KSAKK2NwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5CVRoZSB0aW1lIGl0IHRha2VzIG9uIHRoaXMgQ1BVIHRvCisJCQkJc3dpdGNoIGJldHdlZW4gdHdvIGZyZXF1ZW5jaWVzIGluIG5hbm8KKwkJCQlzZWNvbmRzLiBJZiB1bmtub3duIG9yIGtub3duIHRvIGJlCisJCQkJdGhhdCBoaWdoIHRoYXQgdGhlIGRyaXZlciBkb2VzIG5vdAorCQkJCXdvcmsgd2l0aCB0aGUgb25kZW1hbmQgZ292ZXJub3IsIC0xCisJCQkJKENQVUZSRVFfRVRFUk5BTCkgd2lsbCBiZSByZXR1cm5lZC4KKwkJCQlVc2luZyB0aGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWwKKwkJCQl0byBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgcG9sbGluZworCQkJCWZyZXF1ZW5jeSBmb3IgYSBrZXJuZWwgZ292ZXJub3Igb3IKKwkJCQl1c2Vyc3BhY2UgZGFlbW9uLiBNYWtlIHN1cmUgdG8gbm90CisJCQkJc3dpdGNoIHRoZSBmcmVxdWVuY3kgdG9vIG9mdGVuCisJCQkJcmVzdWx0aW5nIGluIHBlcmZvcm1hbmNlIGxvc3MuCiBzY2FsaW5nX2RyaXZlciA6CQl0aGlzIGZpbGUgc2hvd3Mgd2hhdCBjcHVmcmVxIGRyaXZlciBpcwogCQkJCXVzZWQgdG8gc2V0IHRoZSBmcmVxdWVuY3kgb24gdGhpcyBDUFUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggMWU4OWE1MS4uODg1MTlkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC02Miw3ICs2Miw2IEBACiBhaWM3KnNlcS5oKgogYWljYXNtCiBhaWNkYi5oKgotYXNtCiBhc20tb2Zmc2V0cy5oCiBhc21fb2Zmc2V0cy5oCiBhdXRvY29uZi5oKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9keW5hbWljLWRlYnVnLWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YzU2NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQKQEAgLTAsMCArMSwyNDAgQEAKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHVzZSB0aGUgZHluYW1pYyBkZWJ1ZyAoZGRlYnVnKSBmZWF0dXJlLgorCitEeW5hbWljIGRlYnVnIGlzIGRlc2lnbmVkIHRvIGFsbG93IHlvdSB0byBkeW5hbWljYWxseSBlbmFibGUvZGlzYWJsZSBrZXJuZWwKK2NvZGUgdG8gb2J0YWluIGFkZGl0aW9uYWwga2VybmVsIGluZm9ybWF0aW9uLiBDdXJyZW50bHksIGlmCitDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBzZXQsIHRoZW4gYWxsIHByX2RlYnVnKCkvZGV2X2RlYnVnKCkgY2FsbHMgY2FuIGJlCitkeW5hbWljYWxseSBlbmFibGVkIHBlci1jYWxsc2l0ZS4KKworRHluYW1pYyBkZWJ1ZyBoYXMgZXZlbiBtb3JlIHVzZWZ1bCBmZWF0dXJlczoKKworICogU2ltcGxlIHF1ZXJ5IGxhbmd1YWdlIGFsbG93cyB0dXJuaW5nIG9uIGFuZCBvZmYgZGVidWdnaW5nIHN0YXRlbWVudHMgYnkKKyAgIG1hdGNoaW5nIGFueSBjb21iaW5hdGlvbiBvZjoKKworICAgLSBzb3VyY2UgZmlsZW5hbWUKKyAgIC0gZnVuY3Rpb24gbmFtZQorICAgLSBsaW5lIG51bWJlciAoaW5jbHVkaW5nIHJhbmdlcyBvZiBsaW5lIG51bWJlcnMpCisgICAtIG1vZHVsZSBuYW1lCisgICAtIGZvcm1hdCBzdHJpbmcKKworICogUHJvdmlkZXMgYSBkZWJ1Z2ZzIGNvbnRyb2wgZmlsZTogPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCB3aGljaCBjYW4gYmUKKyAgIHJlYWQgdG8gZGlzcGxheSB0aGUgY29tcGxldGUgbGlzdCBvZiBrbm93biBkZWJ1ZyBzdGF0ZW1lbnRzLCB0byBoZWxwIGd1aWRlIHlvdQorCitDb250cm9sbGluZyBkeW5hbWljIGRlYnVnIEJlaGF2aW91cgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYmVoYXZpb3VyIG9mIHByX2RlYnVnKCkvZGV2X2RlYnVnKClzIGFyZSBjb250cm9sbGVkIHZpYSB3cml0aW5nIHRvIGEKK2NvbnRyb2wgZmlsZSBpbiB0aGUgJ2RlYnVnZnMnIGZpbGVzeXN0ZW0uIFRodXMsIHlvdSBtdXN0IGZpcnN0IG1vdW50IHRoZSBkZWJ1Z2ZzCitmaWxlc3lzdGVtLCBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGlzIGZlYXR1cmUuIFN1YnNlcXVlbnRseSwgd2UgcmVmZXIgdG8gdGhlCitjb250cm9sIGZpbGUgYXM6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0bworZW5hYmxlIHByaW50aW5nIGZyb20gc291cmNlIGZpbGUgJ3N2Y3NvY2suYycsIGxpbmUgMTYwMyB5b3Ugc2ltcGx5IGRvOgorCitudWxsYXJib3I6fiAjIGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworSWYgeW91IG1ha2UgYSBtaXN0YWtlIHdpdGggdGhlIHN5bnRheCwgdGhlIHdyaXRlIHdpbGwgZmFpbCB0aHVzOgorCitudWxsYXJib3I6fiAjIGVjaG8gJ2ZpbGUgc3Zjc29jay5jIHd0ZiAxICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorLWJhc2g6IGVjaG86IHdyaXRlIGVycm9yOiBJbnZhbGlkIGFyZ3VtZW50CisKK1ZpZXdpbmcgRHluYW1pYyBEZWJ1ZyBCZWhhdmlvdXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHZpZXcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGJlaGF2aW91ciBvZiBhbGwgdGhlIGRlYnVnIHN0YXRlbWVudHMKK3ZpYToKKworbnVsbGFyYm9yOn4gIyBjYXQgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y19yZG1hLmM6MzIzIFtzdmN4cHJ0X3JkbWFdc3ZjX3JkbWFfY2xlYW51cCAtICJTVkNSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFwwMTIiCisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjM0MSBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2luaXQgLSAiXDAxMW1heF9pbmxpbmUgICAgICAgOiAlZFwwMTIiCisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjM0MCBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2luaXQgLSAiXDAxMXNxX2RlcHRoICAgICAgICAgOiAlZFwwMTIiCisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjMzOCBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2luaXQgLSAiXDAxMW1heF9yZXF1ZXN0cyAgICAgOiAlZFwwMTIiCisuLi4KKworCitZb3UgY2FuIGFsc28gYXBwbHkgc3RhbmRhcmQgVW5peCB0ZXh0IG1hbmlwdWxhdGlvbiBmaWx0ZXJzIHRvIHRoaXMKK2RhdGEsIGUuZy4KKworbnVsbGFyYm9yOn4gIyBncmVwIC1pIHJkbWEgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCAgfCB3YyAtbAorNjIKKworbnVsbGFyYm9yOn4gIyBncmVwIC1pIHRjcCA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sIHwgd2MgLWwKKzQyCisKK05vdGUgaW4gcGFydGljdWxhciB0aGF0IHRoZSB0aGlyZCBjb2x1bW4gc2hvd3MgdGhlIGVuYWJsZWQgYmVoYXZpb3VyCitmbGFncyBmb3IgZWFjaCBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGUgKHNlZSBiZWxvdyBmb3IgZGVmaW5pdGlvbnMgb2YgdGhlCitmbGFncykuICBUaGUgZGVmYXVsdCB2YWx1ZSwgbm8gZXh0cmEgYmVoYXZpb3VyIGVuYWJsZWQsIGlzICItIi4gIFNvCit5b3UgY2FuIHZpZXcgYWxsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGVzIHdpdGggYW55IG5vbi1kZWZhdWx0IGZsYWdzOgorCitudWxsYXJib3I6fiAjIGF3ayAnJDMgIT0gIi0iJyA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisjIGZpbGVuYW1lOmxpbmVubyBbbW9kdWxlXWZ1bmN0aW9uIGZsYWdzIGZvcm1hdAorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3Zjc29jay5jOjE2MDMgW3N1bnJwY11zdmNfc2VuZCBwICJzdmNfcHJvY2Vzczogc3Rfc2VuZHRvIHJldHVybmVkICVkXDAxMiIKKworCitDb21tYW5kIExhbmd1YWdlIFJlZmVyZW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXQgdGhlIGxleGljYWwgbGV2ZWwsIGEgY29tbWFuZCBjb21wcmlzZXMgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzZXBhcmF0ZWQKK2J5IHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIE5vdGUgdGhhdCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBhcyB3b3JkCitzZXBhcmF0b3JzIGFuZCBkbyAqbm90KiBlbmQgYSBjb21tYW5kIG9yIGFsbG93IG11bHRpcGxlIGNvbW1hbmRzIHRvCitiZSBkb25lIHRvZ2V0aGVyLiAgU28gdGhlc2UgYXJlIGFsbCBlcXVpdmFsZW50OgorCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKK251bGxhcmJvcjp+ICMgZWNobyAtYyAnICBmaWxlICAgc3Zjc29jay5jICAgICBsaW5lICAxNjAzICtwICAnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJ2ZpbGUgc3Zjc29jay5jXG5saW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworQ29tbWFuZHMgYXJlIGJvdW5kZWQgYnkgYSB3cml0ZSgpIHN5c3RlbSBjYWxsLiAgSWYgeW91IHdhbnQgdG8gZG8KK211bHRpcGxlIGNvbW1hbmRzIHlvdSBuZWVkIHRvIGRvIGEgc2VwYXJhdGUgImVjaG8iIGZvciBlYWNoLCBsaWtlOgorCitudWxsYXJib3I6fiAjIGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPiAvcHJvYy9kcHJpbnRrIDtcCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTU2MyArcCcgPiAvcHJvYy9kcHJpbnRrCisKK29yIGV2ZW4gbGlrZToKKworbnVsbGFyYm9yOn4gIyAoCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgO1wKKz4gZWNobyAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNTYzICtwJyA7XAorPiApID4gL3Byb2MvZHByaW50aworCitBdCB0aGUgc3ludGFjdGljYWwgbGV2ZWwsIGEgY29tbWFuZCBjb21wcmlzZXMgYSBzZXF1ZW5jZSBvZiBtYXRjaAorc3BlY2lmaWNhdGlvbnMsIGZvbGxvd2VkIGJ5IGEgZmxhZ3MgY2hhbmdlIHNwZWNpZmljYXRpb24uCisKK2NvbW1hbmQgOjo9IG1hdGNoLXNwZWMqIGZsYWdzLXNwZWMKKworVGhlIG1hdGNoLXNwZWMncyBhcmUgdXNlZCB0byBjaG9vc2UgYSBzdWJzZXQgb2YgdGhlIGtub3duIGRwcmludGsoKQorY2FsbHNpdGVzIHRvIHdoaWNoIHRvIGFwcGx5IHRoZSBmbGFncy1zcGVjLiAgVGhpbmsgb2YgdGhlbSBhcyBhIHF1ZXJ5Cit3aXRoIGltcGxpY2l0IEFORHMgYmV0d2VlbiBlYWNoIHBhaXIuICBOb3RlIHRoYXQgYW4gZW1wdHkgbGlzdCBvZgorbWF0Y2gtc3BlY3MgaXMgcG9zc2libGUsIGJ1dCBpcyBub3QgdmVyeSB1c2VmdWwgYmVjYXVzZSBpdCB3aWxsIG5vdAorbWF0Y2ggYW55IGRlYnVnIHN0YXRlbWVudCBjYWxsc2l0ZXMuCisKK0EgbWF0Y2ggc3BlY2lmaWNhdGlvbiBjb21wcmlzZXMgYSBrZXl3b3JkLCB3aGljaCBjb250cm9scyB0aGUgYXR0cmlidXRlCitvZiB0aGUgY2FsbHNpdGUgdG8gYmUgY29tcGFyZWQsIGFuZCBhIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdC4gIFBvc3NpYmxlCitrZXl3b3JkcyBhcmU6CisKK21hdGNoLXNwZWMgOjo9ICdmdW5jJyBzdHJpbmcgfAorCSAgICAgICAnZmlsZScgc3RyaW5nIHwKKwkgICAgICAgJ21vZHVsZScgc3RyaW5nIHwKKwkgICAgICAgJ2Zvcm1hdCcgc3RyaW5nIHwKKwkgICAgICAgJ2xpbmUnIGxpbmUtcmFuZ2UKKworbGluZS1yYW5nZSA6Oj0gbGluZW5vIHwKKwkgICAgICAgJy0nbGluZW5vIHwKKwkgICAgICAgbGluZW5vJy0nIHwKKwkgICAgICAgbGluZW5vJy0nbGluZW5vCisvLyBOb3RlOiBsaW5lLXJhbmdlIGNhbm5vdCBjb250YWluIHNwYWNlLCBlLmcuCisvLyAiMS0zMCIgaXMgdmFsaWQgcmFuZ2UgYnV0ICIxIC0gMzAiIGlzIG5vdC4KKworbGluZW5vIDo6PSB1bnNpZ25lZC1pbnQKKworVGhlIG1lYW5pbmdzIG9mIGVhY2gga2V5d29yZCBhcmU6CisKK2Z1bmMKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGZ1bmN0aW9uIG5hbWUKKyAgICBvZiBlYWNoIGNhbGxzaXRlLiAgRXhhbXBsZToKKworICAgIGZ1bmMgc3ZjX3RjcF9hY2NlcHQKKworZmlsZQorICAgIFRoZSBnaXZlbiBzdHJpbmcgaXMgY29tcGFyZWQgYWdhaW5zdCBlaXRoZXIgdGhlIGZ1bGwKKyAgICBwYXRobmFtZSBvciB0aGUgYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIG9mIGVhY2gKKyAgICBjYWxsc2l0ZS4gIEV4YW1wbGVzOgorCisgICAgZmlsZSBzdmNzb2NrLmMKKyAgICBmaWxlIC91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y3NvY2suYworCittb2R1bGUKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIG1vZHVsZSBuYW1lCisgICAgb2YgZWFjaCBjYWxsc2l0ZS4gIFRoZSBtb2R1bGUgbmFtZSBpcyB0aGUgc3RyaW5nIGFzCisgICAgc2VlbiBpbiAibHNtb2QiLCBpLmUuIHdpdGhvdXQgdGhlIGRpcmVjdG9yeSBvciB0aGUgLmtvCisgICAgc3VmZml4IGFuZCB3aXRoICctJyBjaGFuZ2VkIHRvICdfJy4gIEV4YW1wbGVzOgorCisgICAgbW9kdWxlIHN1bnJwYworICAgIG1vZHVsZSBuZnNkCisKK2Zvcm1hdAorICAgIFRoZSBnaXZlbiBzdHJpbmcgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBkeW5hbWljIGRlYnVnIGZvcm1hdAorICAgIHN0cmluZy4gIE5vdGUgdGhhdCB0aGUgc3RyaW5nIGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlCisgICAgZW50aXJlIGZvcm1hdCwgb25seSBzb21lIHBhcnQuICBXaGl0ZXNwYWNlIGFuZCBvdGhlcgorICAgIHNwZWNpYWwgY2hhcmFjdGVycyBjYW4gYmUgZXNjYXBlZCB1c2luZyBDIG9jdGFsIGNoYXJhY3RlcgorICAgIGVzY2FwZSBcb29vIG5vdGF0aW9uLCBlLmcuIHRoZSBzcGFjZSBjaGFyYWN0ZXIgaXMgXDA0MC4KKyAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgc3RyaW5nIGNhbiBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGUKKyAgICBjaGFyYWN0ZXJzICgiKSBvciBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoJykuCisgICAgRXhhbXBsZXM6CisKKyAgICBmb3JtYXQgc3ZjcmRtYToJICAgIC8vIG1hbnkgb2YgdGhlIE5GUy9SRE1BIHNlcnZlciBkcHJpbnRrcworICAgIGZvcm1hdCByZWFkYWhlYWQJICAgIC8vIHNvbWUgZHByaW50a3MgaW4gdGhlIHJlYWRhaGVhZCBjYWNoZQorICAgIGZvcm1hdCBuZnNkOlwwNDBTRVRBVFRSIC8vIG9uZSB3YXkgdG8gbWF0Y2ggYSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlCisgICAgZm9ybWF0ICJuZnNkOiBTRVRBVFRSIiAgLy8gYSBuZWF0ZXIgd2F5IHRvIG1hdGNoIGEgZm9ybWF0IHdpdGggd2hpdGVzcGFjZQorICAgIGZvcm1hdCAnbmZzZDogU0VUQVRUUicgIC8vIHlldCBhbm90aGVyIHdheSB0byBtYXRjaCBhIGZvcm1hdCB3aXRoIHdoaXRlc3BhY2UKKworbGluZQorICAgIFRoZSBnaXZlbiBsaW5lIG51bWJlciBvciByYW5nZSBvZiBsaW5lIG51bWJlcnMgaXMgY29tcGFyZWQKKyAgICBhZ2FpbnN0IHRoZSBsaW5lIG51bWJlciBvZiBlYWNoIGRwcmludGsoKSBjYWxsc2l0ZS4gIEEgc2luZ2xlCisgICAgbGluZSBudW1iZXIgbWF0Y2hlcyB0aGUgY2FsbHNpdGUgbGluZSBudW1iZXIgZXhhY3RseS4gIEEKKyAgICByYW5nZSBvZiBsaW5lIG51bWJlcnMgbWF0Y2hlcyBhbnkgY2FsbHNpdGUgYmV0d2VlbiB0aGUgZmlyc3QKKyAgICBhbmQgbGFzdCBsaW5lIG51bWJlciBpbmNsdXNpdmUuICBBbiBlbXB0eSBmaXJzdCBudW1iZXIgbWVhbnMKKyAgICB0aGUgZmlyc3QgbGluZSBpbiB0aGUgZmlsZSwgYW4gZW1wdHkgbGluZSBudW1iZXIgbWVhbnMgdGhlCisgICAgbGFzdCBudW1iZXIgaW4gdGhlIGZpbGUuICBFeGFtcGxlczoKKworICAgIGxpbmUgMTYwMwkgICAgLy8gZXhhY3RseSBsaW5lIDE2MDMKKyAgICBsaW5lIDE2MDAtMTYwNSAgLy8gdGhlIHNpeCBsaW5lcyBmcm9tIGxpbmUgMTYwMCB0byBsaW5lIDE2MDUKKyAgICBsaW5lIC0xNjA1CSAgICAvLyB0aGUgMTYwNSBsaW5lcyBmcm9tIGxpbmUgMSB0byBsaW5lIDE2MDUKKyAgICBsaW5lIDE2MDAtCSAgICAvLyBhbGwgbGluZXMgZnJvbSBsaW5lIDE2MDAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQorCitUaGUgZmxhZ3Mgc3BlY2lmaWNhdGlvbiBjb21wcmlzZXMgYSBjaGFuZ2Ugb3BlcmF0aW9uIGZvbGxvd2VkCitieSBvbmUgb3IgbW9yZSBmbGFnIGNoYXJhY3RlcnMuICBUaGUgY2hhbmdlIG9wZXJhdGlvbiBpcyBvbmUKK29mIHRoZSBjaGFyYWN0ZXJzOgorCistCisgICAgcmVtb3ZlIHRoZSBnaXZlbiBmbGFncworCisrCisgICAgYWRkIHRoZSBnaXZlbiBmbGFncworCis9CisgICAgc2V0IHRoZSBmbGFncyB0byB0aGUgZ2l2ZW4gZmxhZ3MKKworVGhlIGZsYWdzIGFyZToKKworcAorICAgIENhdXNlcyBhIHByaW50aygpIG1lc3NhZ2UgdG8gYmUgZW1pdHRlZCB0byBkbWVzZworCitOb3RlIHRoZSByZWdleHAgXlstKz1dW3NjcF0rJCBtYXRjaGVzIGEgZmxhZ3Mgc3BlY2lmaWNhdGlvbi4KK05vdGUgYWxzbyB0aGF0IHRoZXJlIGlzIG5vIGNvbnZlbmllbnQgc3ludGF4IHRvIHJlbW92ZSBhbGwKK3RoZSBmbGFncyBhdCBvbmNlLCB5b3UgbmVlZCB0byB1c2UgIi1wc2MiLgorCitFeGFtcGxlcworPT09PT09PT0KKworLy8gZW5hYmxlIHRoZSBtZXNzYWdlIGF0IGxpbmUgMTYwMyBvZiBmaWxlIHN2Y3NvY2suYworbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIGZpbGUgc3Zjc29jay5jCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiB0aGUgTkZTIHNlcnZlciBtb2R1bGUKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnbW9kdWxlIG5mc2QgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZGlzYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyAtcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIG1lc3NhZ2VzIGZvciBORlMgY2FsbHMgUkVBRCwgUkVBRExJTkssIFJFQURESVIgYW5kIFJFQURESVIrLgorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmb3JtYXQgIm5mc2Q6IFJFQUQiICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDIwZDNiOTQuLmU0N2MwZmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTIyOSw3ICsyMjksOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWI0MyBzdXBwb3J0IGZvciBmaXJtd2FyZSByZXZpc2lvbiA8IDQxMAotV2hlbjoJSnVseSAyMDA4CitXaGVuOglUaGUgc2NoZWR1bGUgd2FzIEp1bHkgMjAwOCwgYnV0IGl0IHdhcyBkZWNpZGVkIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGtlZXAgdGhlCisgICAgICAgIGNvZGUgYXMgbG9uZyBhcyB0aGVyZSBhcmUgbm8gbWFqb3IgbWFpbnRhbmFuY2UgaGVhZGFjaGVzLgorCVNvIGl0IF9jb3VsZF8gYmUgcmVtb3ZlZCBfYW55XyB0aW1lIG5vdywgaWYgaXQgY29uZmxpY3RzIHdpdGggc29tZXRoaW5nIG5ldy4KIFdoeToJVGhlIHN1cHBvcnQgY29kZSBmb3IgdGhlIG9sZCBmaXJtd2FyZSBodXJ0cyBjb2RlIHJlYWRhYmlsaXR5L21haW50YWluYWJpbGl0eQogCWFuZCBzbGlnaHRseSBodXJ0cyBydW50aW1lIHBlcmZvcm1hbmNlLiBCdWdmaXhlcyBmb3IgdGhlIG9sZCBmaXJtd2FyZQogCWFyZSBub3QgcHJvdmlkZWQgYnkgQnJvYWRjb20gYW55bW9yZS4KQEAgLTM0NCwzICszNDYsMjAgQEAKIAlSZW1vdmFsIGlzIHN1YmplY3QgdG8gZml4aW5nIGFueSByZW1haW5pbmcgYnVncyBpbiBBQ1BJIHdoaWNoIG1heQogCWNhdXNlIHRoZSB0aGVybWFsIHRocm90dGxpbmcgbm90IHRvIGhhcHBlbiBhdCB0aGUgcmlnaHQgdGltZS4KIFdobzoJRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIE1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CV9fZG9fSVJRIGFsbCBpbiBvbmUgZml0cyBub3RoaW5nIGludGVycnVwdCBoYW5kbGVyCitXaGVuOgkyLjYuMzIKK1doeToJX19kb19JUlEgd2FzIGtlcHQgZm9yIGVhc3kgbWlncmF0aW9uIHRvIHRoZSB0eXBlIGZsb3cgaGFuZGxlcnMuCisJTW9yZSB0aGFuIHR3byB5ZWFycyBvZiBtaWdyYXRpb24gdGltZSBpcyBlbm91Z2guCitXaG86CVRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglvYnNvbGV0ZSBnZW5lcmljIGlycSBkZWZpbmVzIGFuZCB0eXBlZGVmcworV2hlbjoJMi42LjMwCitXaHk6CVRoZSBkZWZpbmVzIGFuZCB0eXBlZGVmcyAoaHdfaW50ZXJydXB0X3R5cGUsIG5vX2lycV90eXBlLCBpcnFfZGVzY190KQorCWhhdmUgYmVlbiBrZXB0IGFyb3VuZCBmb3IgbWlncmF0aW9uIHJlYXNvbnMuIEFmdGVyIG1vcmUgdGhhbiB0d28geWVhcnMKKwlpdCdzIHRpbWUgdG8gcmVtb3ZlIHRoZW0gZmluYWxseQorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCBlYzZhOTM5Li40ZTc4Y2U2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC00MzcsOCArNDM3LDExIEBACiBjYW4gYW5kIHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBpbnRlcm5hbCBsb2NraW5nIHdpdGggc21hbGxlciBjcml0aWNhbCBhcmVhcykuCiBDdXJyZW50IHdvcnN0IG9mZmVuZGVyIGlzIGV4dDJfZ2V0X2Jsb2NrKCkuLi4KIAotLT5mYXN5bmMoKSBpcyBhIG1lc3MuIFRoaXMgYXJlYSBuZWVkcyBhIGJpZyBjbGVhbnVwIGFuZCB0aGF0IHdpbGwgcHJvYmFibHkKLWFmZmVjdCBsb2NraW5nLgorLT5mYXN5bmMoKSBpcyBjYWxsZWQgd2l0aG91dCBCS0wgcHJvdGVjdGlvbiwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvcgorbWFpbnRhaW5pbmcgdGhlIEZBU1lOQyBiaXQgaW4gZmlscC0+Zl9mbGFncy4gIE1vc3QgaW5zdGFuY2VzIGNhbGwKK2Zhc3luY19oZWxwZXIoKSwgd2hpY2ggZG9lcyB0aGF0IG1haW50ZW5hbmNlLCBzbyBpdCdzIG5vdCBub3JtYWxseQorc29tZXRoaW5nIG9uZSBuZWVkcyB0byB3b3JyeSBhYm91dC4gIFJldHVybiB2YWx1ZXMgPiAwIHdpbGwgYmUgbWFwcGVkIHRvCit6ZXJvIGluIHRoZSBWRlMgbGF5ZXIuCiAKIC0+cmVhZGRpcigpIGFuZCAtPmlvY3RsKCkgb24gZGlyZWN0b3JpZXMgbXVzdCBiZSBjaGFuZ2VkLiBJZGVhbGx5IHdlIHdvdWxkCiBtb3ZlIC0+cmVhZGRpcigpIHRvIGlub2RlX29wZXJhdGlvbnMgYW5kIHVzZSBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDU0ZjIxYTUuLmZhNGUxMjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00NCw2ICs0NCw3IEBACiAJRkIJVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgogCUlBLTY0CUlBLTY0IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCUlNQSAgICAgSW50ZWdyaXR5IG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgogCUlPU0NIRUQJTW9yZSB0aGFuIG9uZSBJL08gc2NoZWR1bGVyIGlzIGVuYWJsZWQuCiAJSVBfUE5QCUlQIERIQ1AsIEJPT1RQLCBvciBSQVJQIGlzIGVuYWJsZWQuCiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgpAQCAtNDkyLDEwICs0OTMsMTIgQEAKIAkJCURlZmF1bHQ6IDY0CiAKIAlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gY29udHJvbCBIUEVUIHVzYWdlCi0JCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB9CisJCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB8CisJCQkJdmVyYm9zZSB9CiAJCQlkaXNhYmxlOiBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQgaW5zdGVhZAogCQkJZm9yY2U6IGFsbG93IGZvcmNlIGVuYWJsZWQgb2YgdW5kb2N1bWVudGVkIGNoaXBzIChJQ0g0LAogCQkJVklBLCBuVmlkaWEpCisJCQl2ZXJib3NlOiBzaG93IGNvbnRlbnRzIG9mIEhQRVQgcmVnaXN0ZXJzIGR1cmluZyBzZXR1cAogCiAJY29tMjAwMjA9CVtIVyxORVRdIEFSQ25ldCAtIENPTTIwMDIwIGNoaXBzZXQKIAkJCUZvcm1hdDoKQEAgLTgyOSw2ICs4MzIsOSBAQAogCiAJaHZjX2l1Y3Y9CVtTMzkwXSBOdW1iZXIgb2Ygei9WTSBJVUNWIGh5cGVydmlzb3IgY29uc29sZSAoSFZDKQogCQkJICAgICAgIHRlcm1pbmFsIGRldmljZXMuIFZhbGlkIHZhbHVlczogMC4uOAorCWh2Y19pdWN2X2FsbG93PQlbUzM5MF0gQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcy4KKwkJCSAgICAgICBJZiBzcGVjaWZpZWQsIHovVk0gSVVDViBIVkMgYWNjZXB0cyBjb25uZWN0aW9ucworCQkJICAgICAgIGZyb20gbGlzdGVkIHovVk0gdXNlciBJRHMgb25seS4KIAogCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKQEAgLTkwMiw2ICs5MDgsMTUgQEAKIAlpaGFzaF9lbnRyaWVzPQlbS05MXQogCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIGlub2RlIGNhY2hlLgogCisJaW1hX2F1ZGl0PQlbSU1BXQorCQkJRm9ybWF0OiB7ICIwIiB8ICIxIiB9CisJCQkwIC0tIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4gKERlZmF1bHQpCisJCQkxIC0tIGVuYWJsZSBpbmZvcm1hdGlvbmFsIGludGVncml0eSBhdWRpdGluZyBtZXNzYWdlcy4KKworCWltYV9oYXNoPQlbSU1BXQorCQkJRm9ybXQ6IHsgInNoYTEiIHwgIm1kNSIgfQorCQkJZGVmYXVsdDogInNoYTEiCisKIAlpbjIwMDA9CQlbSFcsU0NTSV0KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2luMjAwMC5jLgogCkBAIC0xODE2LDExICsxODMxLDYgQEAKIAkJCWF1dG9jb25maWd1cmF0aW9uLgogCQkJUmFuZ2VzIGFyZSBpbiBwYWlycyAobWVtb3J5IGJhc2UgYW5kIHNpemUpLgogCi0JZHluYW1pY19wcmludGsJRW5hYmxlcyBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBpZgotCQkJQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGhhcyBiZWVuIGVuYWJsZWQuCi0JCQlUaGVzZSBjYW4gYWxzbyBiZSBzd2l0Y2hlZCBvbi9vZmYgdmlhCi0JCQk8ZGVidWdmcz4vZHluYW1pY19wcmludGsvbW9kdWxlcwotCiAJcHJpbnQtZmF0YWwtc2lnbmFscz0KIAkJCVtLTkxdIGRlYnVnOiBwcmludCBmYXRhbCBzaWduYWxzCiAJCQlwcmludC1mYXRhbC1zaWduYWxzPTE6IHByaW50IHNlZ2ZhdWx0IGluZm8gdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAppbmRleCA3YTNiYjFhLi5iMTMyZTRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CkBAIC0xNDEsNyArMTQxLDggQEAKIAlEZWZhdWx0IENDSUQgZm9yIHRoZSByZWNlaXZlci1zZW5kZXIgaGFsZi1jb25uZWN0aW9uOyBzZWUgdHhfY2NpZC4KIAogc2VxX3dpbmRvdyA9IDEwMAotCVRoZSBpbml0aWFsIHNlcXVlbmNlIHdpbmRvdyAoc2VjLiA3LjUuMikuCisJVGhlIGluaXRpYWwgc2VxdWVuY2Ugd2luZG93IChzZWMuIDcuNS4yKSBvZiB0aGUgc2VuZGVyLiBUaGlzIGluZmx1ZW5jZXMKKwl0aGUgbG9jYWwgYWNrbm8gdmFsaWRpdHkgYW5kIHRoZSByZW1vdGUgc2Vxbm8gdmFsaWRpdHkgd2luZG93cyAoNy41LjEpLgogCiB0eF9xbGVuID0gNQogCVRoZSBzaXplIG9mIHRoZSB0cmFuc21pdCBidWZmZXIgaW4gcGFja2V0cy4gQSB2YWx1ZSBvZiAwIGNvcnJlc3BvbmRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGM3NzEyNzguLmVjNWRlMDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0yLDcgKzIsNyBAQAogCiBpcF9mb3J3YXJkIC0gQk9PTEVBTgogCTAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKLQlub3QgMCAtIGVuYWJsZWQgCisJbm90IDAgLSBlbmFibGVkCiAKIAlGb3J3YXJkIFBhY2tldHMgYmV0d2VlbiBpbnRlcmZhY2VzLgogCkBAIC0zNiw0OSArMzYsNDkgQEAKIElQIEZyYWdtZW50YXRpb246CiAKIGlwZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKLQlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIAorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4KIAlpcGZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAogCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwZnJhZ19sb3dfdGhyZXNoCiAJaXMgcmVhY2hlZC4KLQkKKwogaXBmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCi0JU2VlIGlwZnJhZ19oaWdoX3RocmVzaAkKKwlTZWUgaXBmcmFnX2hpZ2hfdGhyZXNoCiAKIGlwZnJhZ190aW1lIC0gSU5URUdFUgotCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4JCisJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgogCiBpcGZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgotCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUKIAlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVAgZnJhZ21lbnRzLgogCURlZmF1bHQ6IDYwMAogCiBpcGZyYWdfbWF4X2Rpc3QgLSBJTlRFR0VSCi0JaXBmcmFnX21heF9kaXN0IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2hpY2ggZGVmaW5lcyB0aGUgCi0JbWF4aW11bSAiZGlzb3JkZXIiIHdoaWNoIGlzIGFsbG93ZWQgYW1vbmcgZnJhZ21lbnRzIHdoaWNoIHNoYXJlIGEgCi0JY29tbW9uIElQIHNvdXJjZSBhZGRyZXNzLiBOb3RlIHRoYXQgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGlzIAotCW5vdCB1bnVzdWFsLCBidXQgaWYgYSBsYXJnZSBudW1iZXIgb2YgZnJhZ21lbnRzIGFycml2ZSBmcm9tIGEgc291cmNlIAotCUlQIGFkZHJlc3Mgd2hpbGUgYSBwYXJ0aWN1bGFyIGZyYWdtZW50IHF1ZXVlIHJlbWFpbnMgaW5jb21wbGV0ZSwgaXQgCi0JcHJvYmFibHkgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGJlbG9uZ2luZyB0byB0aGF0IHF1ZXVlIAotCWhhdmUgYmVlbiBsb3N0LiBXaGVuIGlwZnJhZ19tYXhfZGlzdCBpcyBwb3NpdGl2ZSwgYW4gYWRkaXRpb25hbCBjaGVjayAKLQlpcyBkb25lIG9uIGZyYWdtZW50cyBiZWZvcmUgdGhleSBhcmUgYWRkZWQgdG8gYSByZWFzc2VtYmx5IHF1ZXVlIC0gaWYgCi0JaXBmcmFnX21heF9kaXN0IChvciBtb3JlKSBmcmFnbWVudHMgaGF2ZSBhcnJpdmVkIGZyb20gYSBwYXJ0aWN1bGFyIElQIAotCWFkZHJlc3MgYmV0d2VlbiBhZGRpdGlvbnMgdG8gYW55IElQIGZyYWdtZW50IHF1ZXVlIHVzaW5nIHRoYXQgc291cmNlIAotCWFkZHJlc3MsIGl0J3MgcHJlc3VtZWQgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgaW4gdGhlIHF1ZXVlIGFyZSAKLQlsb3N0LiBUaGUgZXhpc3RpbmcgZnJhZ21lbnQgcXVldWUgd2lsbCBiZSBkcm9wcGVkLCBhbmQgYSBuZXcgb25lIAorCWlwZnJhZ19tYXhfZGlzdCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGRlZmluZXMgdGhlCisJbWF4aW11bSAiZGlzb3JkZXIiIHdoaWNoIGlzIGFsbG93ZWQgYW1vbmcgZnJhZ21lbnRzIHdoaWNoIHNoYXJlIGEKKwljb21tb24gSVAgc291cmNlIGFkZHJlc3MuIE5vdGUgdGhhdCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaXMKKwlub3QgdW51c3VhbCwgYnV0IGlmIGEgbGFyZ2UgbnVtYmVyIG9mIGZyYWdtZW50cyBhcnJpdmUgZnJvbSBhIHNvdXJjZQorCUlQIGFkZHJlc3Mgd2hpbGUgYSBwYXJ0aWN1bGFyIGZyYWdtZW50IHF1ZXVlIHJlbWFpbnMgaW5jb21wbGV0ZSwgaXQKKwlwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgYmVsb25naW5nIHRvIHRoYXQgcXVldWUKKwloYXZlIGJlZW4gbG9zdC4gV2hlbiBpcGZyYWdfbWF4X2Rpc3QgaXMgcG9zaXRpdmUsIGFuIGFkZGl0aW9uYWwgY2hlY2sKKwlpcyBkb25lIG9uIGZyYWdtZW50cyBiZWZvcmUgdGhleSBhcmUgYWRkZWQgdG8gYSByZWFzc2VtYmx5IHF1ZXVlIC0gaWYKKwlpcGZyYWdfbWF4X2Rpc3QgKG9yIG1vcmUpIGZyYWdtZW50cyBoYXZlIGFycml2ZWQgZnJvbSBhIHBhcnRpY3VsYXIgSVAKKwlhZGRyZXNzIGJldHdlZW4gYWRkaXRpb25zIHRvIGFueSBJUCBmcmFnbWVudCBxdWV1ZSB1c2luZyB0aGF0IHNvdXJjZQorCWFkZHJlc3MsIGl0J3MgcHJlc3VtZWQgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgaW4gdGhlIHF1ZXVlIGFyZQorCWxvc3QuIFRoZSBleGlzdGluZyBmcmFnbWVudCBxdWV1ZSB3aWxsIGJlIGRyb3BwZWQsIGFuZCBhIG5ldyBvbmUKIAlzdGFydGVkLiBBbiBpcGZyYWdfbWF4X2Rpc3QgdmFsdWUgb2YgemVybyBkaXNhYmxlcyB0aGlzIGNoZWNrLgogCiAJVXNpbmcgYSB2ZXJ5IHNtYWxsIHZhbHVlLCBlLmcuIDEgb3IgMiwgZm9yIGlwZnJhZ19tYXhfZGlzdCBjYW4KIAlyZXN1bHQgaW4gdW5uZWNlc3NhcmlseSBkcm9wcGluZyBmcmFnbWVudCBxdWV1ZXMgd2hlbiBub3JtYWwKLQlyZW9yZGVyaW5nIG9mIHBhY2tldHMgb2NjdXJzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvb3IgYXBwbGljYXRpb24gCi0JcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZSAKLQlsaWtlbGlob29kIG9mIGluY29ycmVjdGx5IHJlYXNzZW1ibGluZyBJUCBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGUgCisJcmVvcmRlcmluZyBvZiBwYWNrZXRzIG9jY3Vycywgd2hpY2ggY291bGQgbGVhZCB0byBwb29yIGFwcGxpY2F0aW9uCisJcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZQorCWxpa2VsaWhvb2Qgb2YgaW5jb3JyZWN0bHkgcmVhc3NlbWJsaW5nIElQIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZQogCWZyb20gZGlmZmVyZW50IElQIGRhdGFncmFtcywgd2hpY2ggY291bGQgcmVzdWx0IGluIGRhdGEgY29ycnVwdGlvbi4KIAlEZWZhdWx0OiA2NAogCiBJTkVUIHBlZXIgc3RvcmFnZToKIAogaW5ldF9wZWVyX3RocmVzaG9sZCAtIElOVEVHRVIKLQlUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gIFN0YXJ0aW5nIGZyb20gdGhpcyB0aHJlc2hvbGQJCisJVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCiAJZW50cmllcyB3aWxsIGJlIHRocm93biBhZ2dyZXNzaXZlbHkuICBUaGlzIHRocmVzaG9sZCBhbHNvIGRldGVybWluZXMKIAllbnRyaWVzJyB0aW1lLXRvLWxpdmUgYW5kIHRpbWUgaW50ZXJ2YWxzIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uCiAJcGFzc2VzLiAgTW9yZSBlbnRyaWVzLCBsZXNzIHRpbWUtdG8tbGl2ZSwgbGVzcyBHQyBpbnRlcnZhbC4KQEAgLTEwNSw3ICsxMDUsNyBAQAogCWluIGVmZmVjdCB1bmRlciBsb3cgKG9yIGFic2VudCkgbWVtb3J5IHByZXNzdXJlIG9uIHRoZSBwb29sLgogCU1lYXN1cmVkIGluIHNlY29uZHMuCiAKLVRDUCB2YXJpYWJsZXM6IAorVENQIHZhcmlhYmxlczoKIAogc29tYXhjb25uIC0gSU5URUdFUgogCUxpbWl0IG9mIHNvY2tldCBsaXN0ZW4oKSBiYWNrbG9nLCBrbm93biBpbiB1c2Vyc3BhY2UgYXMgU09NQVhDT05OLgpAQCAtMzEwLDcgKzMxMCw3IEBACiAKIHRjcF9yZW9yZGVyaW5nIC0gSU5URUdFUgogCU1heGltYWwgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGluIGEgVENQIHN0cmVhbS4KLQlEZWZhdWx0OiAzCQorCURlZmF1bHQ6IDMKIAogdGNwX3JldHJhbnNfY29sbGFwc2UgLSBCT09MRUFOCiAJQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuCkBAIC01MjEsNyArNTIxLDcgQEAKIAogaXBfbG9jYWxfcG9ydF9yYW5nZSAtIDIgSU5URUdFUlMKIAlEZWZpbmVzIHRoZSBsb2NhbCBwb3J0IHJhbmdlIHRoYXQgaXMgdXNlZCBieSBUQ1AgYW5kIFVEUCB0bwotCWNob29zZSB0aGUgbG9jYWwgcG9ydC4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgZmlyc3QsIHRoZSAKKwljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUKIAlzZWNvbmQgdGhlIGxhc3QgbG9jYWwgcG9ydCBudW1iZXIuIERlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbgogCWFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW06CiAJPiAxMjhNYiAzMjc2OC02MTAwMApAQCAtNTk0LDEyICs1OTQsMTIgQEAKIAogCUlmIHplcm8sIGljbXAgZXJyb3IgbWVzc2FnZXMgYXJlIHNlbnQgd2l0aCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mCiAJdGhlIGV4aXRpbmcgaW50ZXJmYWNlLgotIAorCiAJSWYgbm9uLXplcm8sIHRoZSBtZXNzYWdlIHdpbGwgYmUgc2VudCB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YKIAl0aGUgaW50ZXJmYWNlIHRoYXQgcmVjZWl2ZWQgdGhlIHBhY2tldCB0aGF0IGNhdXNlZCB0aGUgaWNtcCBlcnJvci4KIAlUaGlzIGlzIHRoZSBiZWhhdmlvdXIgbmV0d29yayBtYW55IGFkbWluaXN0cmF0b3JzIHdpbGwgZXhwZWN0IGZyb20KIAlhIHJvdXRlci4gQW5kIGl0IGNhbiBtYWtlIGRlYnVnZ2luZyBjb21wbGljYXRlZCBuZXR3b3JrIGxheW91dHMKLQltdWNoIGVhc2llci4gCisJbXVjaCBlYXNpZXIuCiAKIAlOb3RlIHRoYXQgaWYgbm8gcHJpbWFyeSBhZGRyZXNzIGV4aXN0cyBmb3IgdGhlIGludGVyZmFjZSBzZWxlY3RlZCwKIAl0aGVuIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG5vbi1sb29wYmFjayBpbnRlcmZhY2UgdGhhdApAQCAtNjExLDcgKzYxMSw3IEBACiAJQ2hhbmdlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHdlIGNhbiBzdWJzY3JpYmUgdG8uCiAJRGVmYXVsdDogMjAKIAotY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzIAorY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzCiAJCSAgdGhlIG5hbWUgb2YgeW91ciBuZXR3b3JrIGludGVyZmFjZSkKIGNvbmYvYWxsLyoJICBpcyBzcGVjaWFsLCBjaGFuZ2VzIHRoZSBzZXR0aW5ncyBmb3IgYWxsIGludGVyZmFjZXMKIApAQCAtNjI1LDExICs2MjUsMTEgQEAKIGFjY2VwdF9yZWRpcmVjdHMgLSBCT09MRUFOCiAJQWNjZXB0IElDTVAgcmVkaXJlY3QgbWVzc2FnZXMuCiAJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWY6Ci0JLSBib3RoIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgYXJlIFRSVUUgaW4gdGhlIGNhc2UgZm9yd2FyZGluZwotCSAgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAorCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlCisJICBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKIAlvcgotCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUgY2FzZQotCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAorCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUKKwkgIGNhc2UgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAogCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKIAlkZWZhdWx0IFRSVUUgKGhvc3QpCiAJCUZBTFNFIChyb3V0ZXIpCkBAIC02NDAsOCArNjQwLDggQEAKIG1jX2ZvcndhcmRpbmcgLSBCT09MRUFOCiAJRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFCiAJYW5kIGEgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uIGlzIHJlcXVpcmVkLgotCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3Qgcm91dGluZwotCWZvciB0aGUgaW50ZXJmYWNlCisJY29uZi9hbGwvbWNfZm9yd2FyZGluZyBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIG11bHRpY2FzdAorCXJvdXRpbmcJZm9yIHRoZSBpbnRlcmZhY2UKIAogbWVkaXVtX2lkIC0gSU5URUdFUgogCUludGVnZXIgdmFsdWUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBkZXZpY2VzIGJ5IHRoZSBtZWRpdW0gdGhleQpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJdGhlIGJyb2FkY2FzdCBwYWNrZXRzIGFyZSByZWNlaXZlZCBvbmx5IG9uIG9uZSBvZiB0aGVtLgogCVRoZSBkZWZhdWx0IHZhbHVlIDAgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIHRoZSBvbmx5IGludGVyZmFjZQogCXRvIGl0cyBtZWRpdW0sIHZhbHVlIG9mIC0xIG1lYW5zIHRoYXQgbWVkaXVtIGlzIG5vdCBrbm93bi4KLQkKKwogCUN1cnJlbnRseSwgaXQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIHByb3h5X2FycCBiZWhhdmlvcjoKIAl0aGUgcHJveHlfYXJwIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgcGFja2V0cyBmb3J3YXJkZWQgYmV0d2VlbgogCXR3byBkZXZpY2VzIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBtZWRpYS4KQEAgLTY5OSwxNiArNjk5LDIyIEBACiAJZGVmYXVsdCBUUlVFIChyb3V0ZXIpCiAJCUZBTFNFIChob3N0KQogCi1ycF9maWx0ZXIgLSBCT09MRUFOCi0JMSAtIGRvIHNvdXJjZSB2YWxpZGF0aW9uIGJ5IHJldmVyc2VkIHBhdGgsIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyCi0JICAgIFJlY29tbWVuZGVkIG9wdGlvbiBmb3Igc2luZ2xlIGhvbWVkIGhvc3RzIGFuZCBzdHViIG5ldHdvcmsKLQkgICAgcm91dGVycy4gQ291bGQgY2F1c2UgdHJvdWJsZXMgZm9yIGNvbXBsaWNhdGVkIChub3QgbG9vcCBmcmVlKQotCSAgICBuZXR3b3JrcyBydW5uaW5nIGEgc2xvdyB1bnJlbGlhYmxlIHByb3RvY29sIChzb3J0IG9mIFJJUCksCi0JICAgIG9yIHVzaW5nIHN0YXRpYyByb3V0ZXMuCi0KK3JwX2ZpbHRlciAtIElOVEVHRVIKIAkwIC0gTm8gc291cmNlIHZhbGlkYXRpb24uCisJMSAtIFN0cmljdCBtb2RlIGFzIGRlZmluZWQgaW4gUkZDMzcwNCBTdHJpY3QgUmV2ZXJzZSBQYXRoCisJICAgIEVhY2ggaW5jb21pbmcgcGFja2V0IGlzIHRlc3RlZCBhZ2FpbnN0IHRoZSBGSUIgYW5kIGlmIHRoZSBpbnRlcmZhY2UKKwkgICAgaXMgbm90IHRoZSBiZXN0IHJldmVyc2UgcGF0aCB0aGUgcGFja2V0IGNoZWNrIHdpbGwgZmFpbC4KKwkgICAgQnkgZGVmYXVsdCBmYWlsZWQgcGFja2V0cyBhcmUgZGlzY2FyZGVkLgorCTIgLSBMb29zZSBtb2RlIGFzIGRlZmluZWQgaW4gUkZDMzcwNCBMb29zZSBSZXZlcnNlIFBhdGgKKwkgICAgRWFjaCBpbmNvbWluZyBwYWNrZXQncyBzb3VyY2UgYWRkcmVzcyBpcyBhbHNvIHRlc3RlZCBhZ2FpbnN0IHRoZSBGSUIKKwkgICAgYW5kIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBub3QgcmVhY2hhYmxlIHZpYSBhbnkgaW50ZXJmYWNlCisJICAgIHRoZSBwYWNrZXQgY2hlY2sgd2lsbCBmYWlsLgogCi0JY29uZi9hbGwvcnBfZmlsdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgorCUN1cnJlbnQgcmVjb21tZW5kZWQgcHJhY3RpY2UgaW4gUkZDMzcwNCBpcyB0byBlbmFibGUgc3RyaWN0IG1vZGUKKwl0byBwcmV2ZW50IElQIHNwb29maW5nIGZyb20gRERvcyBhdHRhY2tzLiBJZiB1c2luZyBhc3ltbWV0cmljIHJvdXRpbmcKKwlvciBvdGhlciBjb21wbGljYXRlZCByb3V0aW5nLCB0aGVuIGxvb3NlIG1vZGUgaXMgcmVjb21tZW5kZWQuCisKKwljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBub24temVybyB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgogCW9uIHRoZSBpbnRlcmZhY2UKIAogCURlZmF1bHQgdmFsdWUgaXMgMC4gTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQKQEAgLTc4Miw2ICs3ODgsMTIgQEAKIAlUaGUgbWF4IHZhbHVlIGZyb20gY29uZi97YWxsLGludGVyZmFjZX0vYXJwX2lnbm9yZSBpcyB1c2VkCiAJd2hlbiBBUlAgcmVxdWVzdCBpcyByZWNlaXZlZCBvbiB0aGUge2ludGVyZmFjZX0KIAorYXJwX25vdGlmeSAtIEJPT0xFQU4KKwlEZWZpbmUgbW9kZSBmb3Igbm90aWZpY2F0aW9uIG9mIGFkZHJlc3MgYW5kIGRldmljZSBjaGFuZ2VzLgorCTAgLSAoZGVmYXVsdCk6IGRvIG5vdGhpbmcKKwkxIC0gR2VuZXJhdGUgZ3JhdHVpdG91cyBhcnAgcmVwbGllcyB3aGVuIGRldmljZSBpcyBicm91Z2h0IHVwCisJICAgIG9yIGhhcmR3YXJlIGFkZHJlc3MgY2hhbmdlcy4KKwogYXJwX2FjY2VwdCAtIEJPT0xFQU4KIAlEZWZpbmUgYmVoYXZpb3Igd2hlbiBncmF0dWl0b3VzIGFycCByZXBsaWVzIGFyZSByZWNlaXZlZDoKIAkwIC0gZHJvcCBncmF0dWl0b3VzIGFycCBmcmFtZXMKQEAgLTgyMyw3ICs4MzUsNyBAQAogCiBiaW5kdjZvbmx5IC0gQk9PTEVBTgogCURlZmF1bHQgdmFsdWUgZm9yIElQVjZfVjZPTkxZIHNvY2tldCBvcHRpb24sCi0Jd2hpY2ggcmVzdHJpY3RzIHVzZSBvZiB0aGUgSVB2NiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9uIAorCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbgogCW9ubHkuCiAJCVRSVUU6IGRpc2FibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCiAJCUZBTFNFOiBlbmFibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCkBAIC04MzMsMTkgKzg0NSwxOSBAQAogSVB2NiBGcmFnbWVudGF0aW9uOgogCiBpcDZmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgotCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUHY2IGZyYWdtZW50cy4gV2hlbiAKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVB2NiBmcmFnbWVudHMuIFdoZW4KIAlpcDZmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKIAl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcDZmcmFnX2xvd190aHJlc2gKIAlpcyByZWFjaGVkLgotCQorCiBpcDZmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCi0JU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gJCisJU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gKIAogaXA2ZnJhZ190aW1lIC0gSU5URUdFUgogCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQdjYgZnJhZ21lbnQgaW4gbWVtb3J5LgogCiBpcDZmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKLQlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lCiAJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQdjYgZnJhZ21lbnRzLgogCURlZmF1bHQ6IDYwMAogCkBAIC04NTQsMTcgKzg2NiwxNyBAQAogCiAKIGNvbmYvYWxsLyo6Ci0JQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLiAgCisJQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLgogCiAJW1hYWDogIE90aGVyIHNwZWNpYWwgZmVhdHVyZXMgdGhhbiBmb3J3YXJkaW5nP10KIAogY29uZi9hbGwvZm9yd2FyZGluZyAtIEJPT0xFQU4KLQlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLiAgCisJRW5hYmxlIGdsb2JhbCBJUHY2IGZvcndhcmRpbmcgYmV0d2VlbiBhbGwgaW50ZXJmYWNlcy4KIAotCUlQdjQgYW5kIElQdjYgd29yayBkaWZmZXJlbnRseSBoZXJlOyBlLmcuIG5ldGZpbHRlciBtdXN0IGJlIHVzZWQgCisJSVB2NCBhbmQgSVB2NiB3b3JrIGRpZmZlcmVudGx5IGhlcmU7IGUuZy4gbmV0ZmlsdGVyIG11c3QgYmUgdXNlZAogCXRvIGNvbnRyb2wgd2hpY2ggaW50ZXJmYWNlcyBtYXkgZm9yd2FyZCBwYWNrZXRzIGFuZCB3aGljaCBub3QuCiAKLQlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZyAKKwlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZwogCSdmb3J3YXJkaW5nJyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgogCiAJVGhpcyByZWZlcnJlZCB0byBhcyBnbG9iYWwgZm9yd2FyZGluZy4KQEAgLTg3NSwxMiArODg3LDEyIEBACiBjb25mL2ludGVyZmFjZS8qOgogCUNoYW5nZSBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UuCiAKLQlUaGUgZnVuY3Rpb25hbCBiZWhhdmlvdXIgZm9yIGNlcnRhaW4gc2V0dGluZ3MgaXMgZGlmZmVyZW50IAorCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQKIAlkZXBlbmRpbmcgb24gd2hldGhlciBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb3Igbm90LgogCiBhY2NlcHRfcmEgLSBCT09MRUFOCiAJQWNjZXB0IFJvdXRlciBBZHZlcnRpc2VtZW50czsgYXV0b2NvbmZpZ3VyZSB1c2luZyB0aGVtLgotCQorCiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQuCiAJCQkgICAgZGlzYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLgogCkBAIC05MjYsNyArOTM4LDcgQEAKIAlEZWZhdWx0OiAwCiAKIGF1dG9jb25mIC0gQk9PTEVBTgotCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIgCisJQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlcgogCUFkdmVydGlzZW1lbnRzLgogCiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGFjY2VwdF9yYV9waW5mbyBpcyBlbmFibGVkLgpAQCAtOTM1LDExICs5NDcsMTEgQEAKIGRhZF90cmFuc21pdHMgLSBJTlRFR0VSCiAJVGhlIGFtb3VudCBvZiBEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24gcHJvYmVzIHRvIHNlbmQuCiAJRGVmYXVsdDogMQotCQotZm9yd2FyZGluZyAtIEJPT0xFQU4KLQlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4gIAogCi0JTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbCAKK2ZvcndhcmRpbmcgLSBCT09MRUFOCisJQ29uZmlndXJlIGludGVyZmFjZS1zcGVjaWZpYyBIb3N0L1JvdXRlciBiZWhhdmlvdXIuCisKKwlOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNldHRpbmcgb24gYWxsCiAJaW50ZXJmYWNlczsgbWl4ZWQgcm91dGVyL2hvc3Qgc2NlbmFyaW9zIGFyZSByYXRoZXIgdW5jb21tb24uCiAKIAlGQUxTRToKQEAgLTk0OCwxMyArOTYwLDEzIEBACiAKIAkxLiBJc1JvdXRlciBmbGFnIGlzIG5vdCBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgogCTIuIFJvdXRlciBTb2xpY2l0YXRpb25zIGFyZSBiZWluZyBzZW50IHdoZW4gbmVjZXNzYXJ5LgotCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlciAKKwkzLiBJZiBhY2NlcHRfcmEgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSb3V0ZXIKIAkgICBBZHZlcnRpc2VtZW50cyAoYW5kIGRvIGF1dG9jb25maWd1cmF0aW9uKS4KIAk0LiBJZiBhY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUmVkaXJlY3RzLgogCiAJVFJVRToKIAotCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLiAKKwlJZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIFJvdXRlciBiZWhhdmlvdXIgaXMgYXNzdW1lZC4KIAlUaGlzIG1lYW5zIGV4YWN0bHkgdGhlIHJldmVyc2UgZnJvbSB0aGUgYWJvdmU6CiAKIAkxLiBJc1JvdXRlciBmbGFnIGlzIHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCkBAIC05ODksNyArMTAwMSw3IEBACiAJRGVmYXVsdDogNAogCiByb3V0ZXJfc29saWNpdGF0aW9ucyAtIElOVEVHRVIKLQlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubyAKKwlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubwogCXJvdXRlcnMgYXJlIHByZXNlbnQuCiAJRGVmYXVsdDogMwogCkBAIC0xMDEzLDExICsxMDI1LDExIEBACiAKIG1heF9kZXN5bmNfZmFjdG9yIC0gSU5URUdFUgogCU1heGltdW0gdmFsdWUgZm9yIERFU1lOQ19GQUNUT1IsIHdoaWNoIGlzIGEgcmFuZG9tIHZhbHVlCi0JdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2ggCisJdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2gKIAlvdGhlciBhbmQgZ2VuZXJhdGUgbmV3IGFkZHJlc3NlcyBhdCBleGFjdGx5IHRoZSBzYW1lIHRpbWUuCiAJdmFsdWUgaXMgaW4gc2Vjb25kcy4KIAlEZWZhdWx0OiA2MDAKLQkKKwogcmVnZW5fbWF4X3JldHJ5IC0gSU5URUdFUgogCU51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgZ2l2ZSB1cCBhdHRlbXB0aW5nIHRvIGdlbmVyYXRlCiAJdmFsaWQgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KQEAgLTEwMjUsMTMgKzEwMzcsMTUgQEAKIAogbWF4X2FkZHJlc3NlcyAtIElOVEVHRVIKIAlOdW1iZXIgb2YgbWF4aW11bSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZS4gIDAgZGlzYWJsZXMgbGltaXRhdGlvbi4KLQlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZCAKLQliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZiAKKwlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZAorCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mCiAJYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzLgogCURlZmF1bHQ6IDE2CiAKIGRpc2FibGVfaXB2NiAtIEJPT0xFQU4KLQlEaXNhYmxlIElQdjYgb3BlcmF0aW9uLgorCURpc2FibGUgSVB2NiBvcGVyYXRpb24uICBJZiBhY2NlcHRfZGFkIGlzIHNldCB0byAyLCB0aGlzIHZhbHVlCisJd2lsbCBiZSBkeW5hbWljYWxseSBzZXQgdG8gVFJVRSBpZiBEQUQgZmFpbHMgZm9yIHRoZSBsaW5rLWxvY2FsCisJYWRkcmVzcy4KIAlEZWZhdWx0OiBGQUxTRSAoZW5hYmxlIElQdjYgb3BlcmF0aW9uKQogCiBhY2NlcHRfZGFkIC0gSU5URUdFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViNjg2OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQKQEAgLTAsMCArMSwxOTkgQEAKK0xpbnV4IEJhc2UgRHJpdmVyIGZvciAxMCBHaWdhYml0IFBDSSBFeHByZXNzIEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01hcmNoIDEwLCAyMDA5CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gU3VwcG9ydAorCisKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaXhnYmUgTGludXggQmFzZSBEcml2ZXIgZm9yIHRoZSAxMCBHaWdhYml0IFBDSQorRXhwcmVzcyBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24uICBUaGlzIGRyaXZlciBpbmNsdWRlcyBzdXBwb3J0IGZvcgorSXRhbml1bShSKTItYmFzZWQgc3lzdGVtcy4KKworRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24KK3N1cHBsaWVkIHdpdGggeW91ciAxMCBHaWdhYml0IGFkYXB0ZXIuICBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCBhcHBseQordG8gdXNlIHdpdGggTGludXguCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbDoKKyAtIE5hdGl2ZSBWTEFOcworIC0gQ2hhbm5lbCBCb25kaW5nICh0ZWFtaW5nKQorIC0gU05NUAorIC0gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQKKyAtIERhdGEgQ2VudGVyIEJyaWRnaW5nCisKK0NoYW5uZWwgQm9uZGluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZToKKy9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKKworRXRodG9vbCwgbHNwY2ksIGFuZCBpZmNvbmZpZyBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGRldmljZSBhbmQgZHJpdmVyCitzcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBkZXZpY2VzIGJhc2VkIG9uIHRoZSA4MjU5OCBjb250cm9sbGVyIGFuZCB0aGUgODI1OTkKK2NvbnRyb2xsZXIuCisKK0ZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBpZGVudGlmeWluZyB3aGljaCBhZGFwdGVyIHlvdSBoYXZlLCBwbGVhc2UgdmlzaXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL3NiL0NTLTAwODQ0MS5odG0KKworCitCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK3NlbGVjdCBtIGZvciAiSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydCIgbG9jYXRlZCBhdDoKKyAgICAgIExvY2F0aW9uOgorICAgICAgICAtPiBEZXZpY2UgRHJpdmVycworICAgICAgICAgIC0+IE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKE5FVERFVklDRVMgWz15XSkKKyAgICAgICAgICAgIC0+IEV0aGVybmV0ICgxMDAwMCBNYml0KSAoTkVUREVWXzEwMDAwIFs9eV0pCisKKzEuIG1ha2UgbW9kdWxlcyAmIG1ha2UgbW9kdWxlc19pbnN0YWxsCisKKzIuIExvYWQgdGhlIG1vZHVsZToKKworIyBtb2Rwcm9iZSBpeGdiZQorCisgICBUaGUgaW5zbW9kIGNvbW1hbmQgY2FuIGJlIHVzZWQgaWYgdGhlIGZ1bGwKKyAgIHBhdGggdG8gdGhlIGRyaXZlciBtb2R1bGUgaXMgc3BlY2lmaWVkLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2tlcm5lbC9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5rbworCisgICBXaXRoIDIuNiBiYXNlZCBrZXJuZWxzIGFsc28gbWFrZSBzdXJlIHRoYXQgb2xkZXIgaXhnYmUgZHJpdmVycyBhcmUKKyAgIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBiZWZvcmUgbG9hZGluZyB0aGUgbmV3IG1vZHVsZToKKworICAgICBybW1vZCBpeGdiZTsgbW9kcHJvYmUgaXhnYmUKKworMy4gQXNzaWduIGFuIElQIGFkZHJlc3MgdG8gdGhlIGludGVyZmFjZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nLCB3aGVyZQorICAgeCBpcyB0aGUgaW50ZXJmYWNlIG51bWJlcjoKKworICAgICBpZmNvbmZpZyBldGh4IDxJUF9hZGRyZXNzPgorCis0LiBWZXJpZnkgdGhhdCB0aGUgaW50ZXJmYWNlIHdvcmtzLiBFbnRlciB0aGUgZm9sbG93aW5nLCB3aGVyZSA8SVBfYWRkcmVzcz4KKyAgIGlzIHRoZSBJUCBhZGRyZXNzIGZvciBhbm90aGVyIG1hY2hpbmUgb24gdGhlIHNhbWUgc3VibmV0IGFzIHRoZSBpbnRlcmZhY2UKKyAgIHRoYXQgaXMgYmVpbmcgdGVzdGVkOgorCisgICAgIHBpbmcgIDxJUF9hZGRyZXNzPgorCisKK0FkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIExpbmsgbWVzc2FnZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBkaXN0cmlidXRpb24gaXMKKyAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiBJbiBvcmRlciB0byBzZWUgbmV0d29yayBkcml2ZXIgbGluayBtZXNzYWdlcyBvbgorICB5b3VyIGNvbnNvbGUsIHNldCBkbWVzZyB0byBlaWdodCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgZG1lc2cgLW4gOAorCisgIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKworICBKdW1ibyBGcmFtZXMKKyAgLS0tLS0tLS0tLS0tCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgSnVtYm8gRnJhbWVzIGZvciBhbGwgYWRhcHRlcnMuIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzCisgIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBkZWZhdWx0IG9mIDE1MDAuCisgIFRoZSBtYXhpbXVtIHZhbHVlIGZvciB0aGUgTVRVIGlzIDE2MTEwLiAgVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kIHRvCisgIGluY3JlYXNlIHRoZSBNVFUgc2l6ZS4gIEZvciBleGFtcGxlOgorCisgICAgICAgIGlmY29uZmlnIGV0aHggbXR1IDkwMDAgdXAKKworICBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDE2MTEwLiAgVGhpcyB2YWx1ZSBjb2luY2lkZXMKKyAgd2l0aCB0aGUgbWF4aW11bSBKdW1ibyBGcmFtZXMgc2l6ZSBvZiAxNjEyOC4KKworICBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCwgYWthIEdSTworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBpbi1rZXJuZWwgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgR1JPLiAgR1JPIGhhcworICBzaG93biB0aGF0IGJ5IGNvYWxlc2NpbmcgUnggdHJhZmZpYyBpbnRvIGxhcmdlciBjaHVua3Mgb2YgZGF0YSwgQ1BVCisgIHV0aWxpemF0aW9uIGNhbiBiZSBzaWduaWZpY2FudGx5IHJlZHVjZWQgd2hlbiB1bmRlciBsYXJnZSBSeCBsb2FkLiAgR1JPIGlzIGFuCisgIGV2b2x1dGlvbiBvZiB0aGUgcHJldmlvdXNseS11c2VkIExSTyBpbnRlcmZhY2UuICBHUk8gaXMgYWJsZSB0byBjb2FsZXNjZQorICBvdGhlciBwcm90b2NvbHMgYmVzaWRlcyBUQ1AuICBJdCdzIGFsc28gc2FmZSB0byB1c2Ugd2l0aCBjb25maWd1cmF0aW9ucyB0aGF0CisgIGFyZSBwcm9ibGVtYXRpYyBmb3IgTFJPLCBuYW1lbHkgYnJpZGdpbmcgYW5kIGlTQ1NJLgorCisgIEdSTyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGRyaXZlci4gIEZ1dHVyZSB2ZXJzaW9ucyBvZiBldGh0b29sIHdpbGwKKyAgc3VwcG9ydCBkaXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIEdSTyBvbiB0aGUgZmx5LgorCisKKyAgRGF0YSBDZW50ZXIgQnJpZGdpbmcsIGFrYSBEQ0IKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBEQ0IgaXMgYSBjb25maWd1cmF0aW9uIFF1YWxpdHkgb2YgU2VydmljZSBpbXBsZW1lbnRhdGlvbiBpbiBoYXJkd2FyZS4KKyAgSXQgdXNlcyB0aGUgVkxBTiBwcmlvcml0eSB0YWcgKDgwMi4xcCkgdG8gZmlsdGVyIHRyYWZmaWMuICBUaGF0IG1lYW5zCisgIHRoYXQgdGhlcmUgYXJlIDggZGlmZmVyZW50IHByaW9yaXRpZXMgdGhhdCB0cmFmZmljIGNhbiBiZSBmaWx0ZXJlZCBpbnRvLgorICBJdCBhbHNvIGVuYWJsZXMgcHJpb3JpdHkgZmxvdyBjb250cm9sIHdoaWNoIGNhbiBsaW1pdCBvciBlbGltaW5hdGUgdGhlCisgIG51bWJlciBvZiBkcm9wcGVkIHBhY2tldHMgZHVyaW5nIG5ldHdvcmsgc3RyZXNzLiAgQmFuZHdpZHRoIGNhbiBiZQorICBhbGxvY2F0ZWQgdG8gZWFjaCBvZiB0aGVzZSBwcmlvcml0aWVzLCB3aGljaCBpcyBlbmZvcmNlZCBhdCB0aGUgaGFyZHdhcmUKKyAgbGV2ZWwuCisKKyAgVG8gZW5hYmxlIERDQiBzdXBwb3J0IGluIGl4Z2JlLCB5b3UgbXVzdCBlbmFibGUgdGhlIERDQiBuZXRsaW5rIGxheWVyIHRvCisgIGFsbG93IHRoZSB1c2Vyc3BhY2UgdG9vbHMgKHNlZSBiZWxvdykgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZHJpdmVyLgorICBUaGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaGVyZToKKworICAgICAgICAtPiBOZXR3b3JraW5nIHN1cHBvcnQKKyAgICAgICAgICAtPiBOZXR3b3JraW5nIG9wdGlvbnMKKyAgICAgICAgICAgIC0+IERhdGEgQ2VudGVyIEJyaWRnaW5nIHN1cHBvcnQKKworICBPbmNlIHRoaXMgaXMgc2VsZWN0ZWQsIERDQiBzdXBwb3J0IG11c3QgYmUgc2VsZWN0ZWQgZm9yIGl4Z2JlLiAgVGhpcyBjYW4KKyAgYmUgZm91bmQgaGVyZToKKworICAgICAgICAtPiBEZXZpY2UgRHJpdmVycworICAgICAgICAgIC0+IE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKE5FVERFVklDRVMgWz15XSkKKyAgICAgICAgICAgIC0+IEV0aGVybmV0ICgxMDAwMCBNYml0KSAoTkVUREVWXzEwMDAwIFs9eV0pCisgICAgICAgICAgICAgIC0+IEludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAtPiBEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKSBTdXBwb3J0CisKKyAgQWZ0ZXIgdGhlc2Ugb3B0aW9ucyBhcmUgc2VsZWN0ZWQsIHlvdSBtdXN0IHJlYnVpbGQgeW91ciBrZXJuZWwgYW5kIHlvdXIKKyAgbW9kdWxlcy4KKworICBJbiBvcmRlciB0byB1c2UgRENCLCB1c2Vyc3BhY2UgdG9vbHMgbXVzdCBiZSBkb3dubG9hZGVkIGFuZCBpbnN0YWxsZWQuCisgIFRoZSBkY2JkIHRvb2xzIGNhbiBiZSBmb3VuZCBhdDoKKworICAgICAgICBodHRwOi8vZTEwMDAuc2YubmV0CisKKworICBFdGh0b29sCisgIC0tLS0tLS0KKyAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAorICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAorICB2ZXJzaW9uIDMuMCBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KKworCisgIE5BUEkKKyAgLS0tLQorCisgIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgc3VwcG9ydGVkIGluIHRoZSBpeGdiZSBkcml2ZXIuICBOQVBJIGlzIGVuYWJsZWQKKyAgYnkgZGVmYXVsdCBpbiB0aGUgZHJpdmVyLgorCisgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCisKKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKKworICAgIGh0dHA6Ly9lMTAwMC5zb3VyY2Vmb3JnZS5uZXQKKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZAordG8gdGhlIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNmLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjcwNzdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQKQEAgLTAsMCArMSwzNTYgQEAKKworT3ZlcnZpZXcKKz09PT09PT09CisKK1RoaXMgcmVhZG1lIHRyaWVzIHRvIHByb3ZpZGUgc29tZSBiYWNrZ3JvdW5kIG9uIHRoZSBob3dzIGFuZCB3aHlzIG9mIFJEUywKK2FuZCB3aWxsIGhvcGVmdWxseSBoZWxwIHlvdSBmaW5kIHlvdXIgd2F5IGFyb3VuZCB0aGUgY29kZS4KKworSW4gYWRkaXRpb24sIHBsZWFzZSBzZWUgdGhpcyBlbWFpbCBhYm91dCBSRFMgb3JpZ2luczoKK2h0dHA6Ly9vc3Mub3JhY2xlLmNvbS9waXBlcm1haWwvcmRzLWRldmVsLzIwMDctTm92ZW1iZXIvMDAwMjI4Lmh0bWwKKworUkRTIEFyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PQorCitSRFMgcHJvdmlkZXMgcmVsaWFibGUsIG9yZGVyZWQgZGF0YWdyYW0gZGVsaXZlcnkgYnkgdXNpbmcgYSBzaW5nbGUKK3JlbGlhYmxlIGNvbm5lY3Rpb24gYmV0d2VlbiBhbnkgdHdvIG5vZGVzIGluIHRoZSBjbHVzdGVyLiBUaGlzIGFsbG93cworYXBwbGljYXRpb25zIHRvIHVzZSBhIHNpbmdsZSBzb2NrZXQgdG8gdGFsayB0byBhbnkgb3RoZXIgcHJvY2VzcyBpbiB0aGUKK2NsdXN0ZXIgLSBzbyBpbiBhIGNsdXN0ZXIgd2l0aCBOIHByb2Nlc3NlcyB5b3UgbmVlZCBOIHNvY2tldHMsIGluIGNvbnRyYXN0Cit0byBOKk4gaWYgeW91IHVzZSBhIGNvbm5lY3Rpb24tb3JpZW50ZWQgc29ja2V0IHRyYW5zcG9ydCBsaWtlIFRDUC4KKworUkRTIGlzIG5vdCBJbmZpbmliYW5kLXNwZWNpZmljOyBpdCB3YXMgZGVzaWduZWQgdG8gc3VwcG9ydCBkaWZmZXJlbnQKK3RyYW5zcG9ydHMuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHN1cHBvcnQgUkRTIG92ZXIgVENQIGFzIHdlbGwKK2FzIElCLiBXb3JrIGlzIGluIHByb2dyZXNzIHRvIHN1cHBvcnQgUkRTIG92ZXIgaVdBUlAsIGFuZCB1c2luZyBEQ0UgdG8KK2d1YXJhbnRlZSBubyBkcm9wcGVkIHBhY2tldHMgb24gRXRoZXJuZXQsIGl0IG1heSBiZSBwb3NzaWJsZSB0byB1c2UgUkRTIG92ZXIKK1VEUCBpbiB0aGUgZnV0dXJlLgorCitUaGUgaGlnaC1sZXZlbCBzZW1hbnRpY3Mgb2YgUkRTIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgcG9pbnQgb2YgdmlldyBhcmUKKworICoJQWRkcmVzc2luZworICAgICAgICBSRFMgdXNlcyBJUHY0IGFkZHJlc3NlcyBhbmQgMTZiaXQgcG9ydCBudW1iZXJzIHRvIGlkZW50aWZ5CisgICAgICAgIHRoZSBlbmQgcG9pbnQgb2YgYSBjb25uZWN0aW9uLiBBbGwgc29ja2V0IG9wZXJhdGlvbnMgdGhhdCBpbnZvbHZlCisgICAgICAgIHBhc3NpbmcgYWRkcmVzc2VzIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlIGdlbmVyYWxseQorICAgICAgICB1c2UgYSBzdHJ1Y3Qgc29ja2FkZHJfaW4uCisKKyAgICAgICAgVGhlIGZhY3QgdGhhdCBJUHY0IGFkZHJlc3NlcyBhcmUgdXNlZCBkb2VzIG5vdCBtZWFuIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIHRyYW5zcG9ydCBoYXMgdG8gYmUgSVAtYmFzZWQuIEluIGZhY3QsIFJEUyBvdmVyIElCIHVzZXMgYQorICAgICAgICByZWxpYWJsZSBJQiBjb25uZWN0aW9uOyB0aGUgSVAgYWRkcmVzcyBpcyB1c2VkIGV4Y2x1c2l2ZWx5IHRvCisgICAgICAgIGxvY2F0ZSB0aGUgcmVtb3RlIG5vZGUncyBHSUQgKGJ5IEFSUGluZyBmb3IgdGhlIGdpdmVuIElQKS4KKworICAgICAgICBUaGUgcG9ydCBzcGFjZSBpcyBlbnRpcmVseSBpbmRlcGVuZGVudCBvZiBVRFAsIFRDUCBvciBhbnkgb3RoZXIKKyAgICAgICAgcHJvdG9jb2wuCisKKyAqCVNvY2tldCBpbnRlcmZhY2UKKyAgICAgICAgUkRTIHNvY2tldHMgd29yayAqbW9zdGx5KiBhcyB5b3Ugd291bGQgZXhwZWN0IGZyb20gYSBCU0QKKyAgICAgICAgc29ja2V0LiBUaGUgbmV4dCBzZWN0aW9uIHdpbGwgY292ZXIgdGhlIGRldGFpbHMuIEF0IGFueSByYXRlLAorICAgICAgICBhbGwgSS9PIGlzIHBlcmZvcm1lZCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBCU0Qgc29ja2V0IEFQSS4KKyAgICAgICAgU29tZSBhZGRpdGlvbnMgbGlrZSB6ZXJvY29weSBzdXBwb3J0IGFyZSBpbXBsZW1lbnRlZCB0aHJvdWdoCisgICAgICAgIGNvbnRyb2wgbWVzc2FnZXMsIHdoaWxlIG90aGVyIGV4dGVuc2lvbnMgdXNlIHRoZSBnZXRzb2Nrb3B0LworICAgICAgICBzZXRzb2Nrb3B0IGNhbGxzLgorCisgICAgICAgIFNvY2tldHMgbXVzdCBiZSBib3VuZCBiZWZvcmUgeW91IGNhbiBzZW5kIG9yIHJlY2VpdmUgZGF0YS4KKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBiaW5kaW5nIGFsc28gc2VsZWN0cyBhIHRyYW5zcG9ydCBhbmQKKyAgICAgICAgYXR0YWNoZXMgaXQgdG8gdGhlIHNvY2tldC4gT25jZSBib3VuZCwgdGhlIHRyYW5zcG9ydCBhc3NpZ25tZW50CisgICAgICAgIGRvZXMgbm90IGNoYW5nZS4gUkRTIHdpbGwgdG9sZXJhdGUgSVBzIG1vdmluZyBhcm91bmQgKGVnIGluCisgICAgICAgIGEgYWN0aXZlLWFjdGl2ZSBIQSBzY2VuYXJpbyksIGJ1dCBvbmx5IGFzIGxvbmcgYXMgdGhlIGFkZHJlc3MKKyAgICAgICAgZG9lc24ndCBtb3ZlIHRvIGEgZGlmZmVyZW50IHRyYW5zcG9ydC4KKworICoJc3lzY3RscworICAgICAgICBSRFMgc3VwcG9ydHMgYSBudW1iZXIgb2Ygc3lzY3RscyBpbiAvcHJvYy9zeXMvbmV0L3JkcworCisKK1NvY2tldCBJbnRlcmZhY2UKKz09PT09PT09PT09PT09PT0KKworICBBRl9SRFMsIFBGX1JEUywgU09MX1JEUworICAgICAgICBUaGVzZSBjb25zdGFudHMgaGF2ZW4ndCBiZWVuIGFzc2lnbmVkIHlldCwgYmVjYXVzZSBSRFMgaXNuJ3QgaW4KKyAgICAgICAgbWFpbmxpbmUgeWV0LiBDdXJyZW50bHksIHRoZSBrZXJuZWwgbW9kdWxlIGFzc2lnbnMgc29tZSBjb25zdGFudAorICAgICAgICBhbmQgcHVibGlzaGVzIGl0IHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0d28gc3lzY3RsIGZpbGVzCisgICAgICAgICAgICAgICAgL3Byb2Mvc3lzL25ldC9yZHMvcGZfcmRzCisgICAgICAgICAgICAgICAgL3Byb2Mvc3lzL25ldC9yZHMvc29sX3JkcworCisgIGZkID0gc29ja2V0KFBGX1JEUywgU09DS19TRVFQQUNLRVQsIDApOworICAgICAgICBUaGlzIGNyZWF0ZXMgYSBuZXcsIHVuYm91bmQgUkRTIHNvY2tldC4KKworICBzZXRzb2Nrb3B0KFNPTF9TT0NLRVQpOiBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplCisgICAgICAgIFJEUyBob25vcnMgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHNpemUgc29ja2V0IG9wdGlvbnMuCisgICAgICAgIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gcXVldWUgbW9yZSB0aGFuIFNPX1NORFNJWkUgYnl0ZXMgdG8KKyAgICAgICAgYSBzb2NrZXQuIEEgbWVzc2FnZSBpcyBxdWV1ZWQgd2hlbiBzZW5kbXNnIGlzIGNhbGxlZCwgYW5kCisgICAgICAgIGl0IGxlYXZlcyB0aGUgcXVldWUgd2hlbiB0aGUgcmVtb3RlIHN5c3RlbSBhY2tub3dsZWRnZXMKKyAgICAgICAgaXRzIGFycml2YWwuCisKKyAgICAgICAgVGhlIFNPX1JDVlNJWkUgb3B0aW9uIGNvbnRyb2xzIHRoZSBtYXhpbXVtIHJlY2VpdmUgcXVldWUgbGVuZ3RoLgorICAgICAgICBUaGlzIGlzIGEgc29mdCBsaW1pdCByYXRoZXIgdGhhbiBhIGhhcmQgbGltaXQgLSBSRFMgd2lsbAorICAgICAgICBjb250aW51ZSB0byBhY2NlcHQgYW5kIHF1ZXVlIGluY29taW5nIG1lc3NhZ2VzLCBldmVuIGlmIHRoYXQKKyAgICAgICAgdGFrZXMgdGhlIHF1ZXVlIGxlbmd0aCBvdmVyIHRoZSBsaW1pdC4gSG93ZXZlciwgaXQgd2lsbCBhbHNvCisgICAgICAgIG1hcmsgdGhlIHBvcnQgYXMgImNvbmdlc3RlZCIgYW5kIHNlbmQgYSBjb25nZXN0aW9uIHVwZGF0ZSB0bworICAgICAgICB0aGUgc291cmNlIG5vZGUuIFRoZSBzb3VyY2Ugbm9kZSBpcyBzdXBwb3NlZCB0byB0aHJvdHRsZSBhbnkKKyAgICAgICAgcHJvY2Vzc2VzIHNlbmRpbmcgdG8gdGhpcyBjb25nZXN0ZWQgcG9ydC4KKworICBiaW5kKGZkLCAmc29ja2FkZHJfaW4sIC4uLikKKyAgICAgICAgVGhpcyBiaW5kcyB0aGUgc29ja2V0IHRvIGEgbG9jYWwgSVAgYWRkcmVzcyBhbmQgcG9ydCwgYW5kIGEKKyAgICAgICAgdHJhbnNwb3J0LgorCisgIHNlbmRtc2coZmQsIC4uLikKKyAgICAgICAgU2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBpbmRpY2F0ZWQgcmVjaXBpZW50LiBUaGUga2VybmVsIHdpbGwKKyAgICAgICAgdHJhbnNwYXJlbnRseSBlc3RhYmxpc2ggdGhlIHVuZGVybHlpbmcgcmVsaWFibGUgY29ubmVjdGlvbgorICAgICAgICBpZiBpdCBpc24ndCB1cCB5ZXQuCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0aGF0IGV4Y2VlZHMgU09fU05EU0laRSB3aWxsCisgICAgICAgIHJldHVybiB3aXRoIC1FTVNHU0laRQorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdGhhdCB3b3VsZCB0YWtlIHRoZSB0b3RhbCBudW1iZXIKKyAgICAgICAgb2YgcXVldWVkIGJ5dGVzIG92ZXIgdGhlIFNPX1NORFNJWkUgdGhyZXNob2xkIHdpbGwgcmV0dXJuCisgICAgICAgIEVBR0FJTi4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRvIGEgZGVzdGluYXRpb24gdGhhdCBpcyBtYXJrZWQKKyAgICAgICAgYXMgImNvbmdlc3RlZCIgd2lsbCByZXR1cm4gRU5PQlVGUy4KKworICByZWN2bXNnKGZkLCAuLi4pCisgICAgICAgIFJlY2VpdmVzIGEgbWVzc2FnZSB0aGF0IHdhcyBxdWV1ZWQgdG8gdGhpcyBzb2NrZXQuIFRoZSBzb2NrZXRzCisgICAgICAgIHJlY3YgcXVldWUgYWNjb3VudGluZyBpcyBhZGp1c3RlZCwgYW5kIGlmIHRoZSBxdWV1ZSBsZW5ndGgKKyAgICAgICAgZHJvcHMgYmVsb3cgU09fU05EU0laRSwgdGhlIHBvcnQgaXMgbWFya2VkIHVuY29uZ2VzdGVkLCBhbmQKKyAgICAgICAgYSBjb25nZXN0aW9uIHVwZGF0ZSBpcyBzZW50IHRvIGFsbCBwZWVycy4KKworICAgICAgICBBcHBsaWNhdGlvbnMgY2FuIGFzayB0aGUgUkRTIGtlcm5lbCBtb2R1bGUgdG8gcmVjZWl2ZQorICAgICAgICBub3RpZmljYXRpb25zIHZpYSBjb250cm9sIG1lc3NhZ2VzIChmb3IgaW5zdGFuY2UsIHRoZXJlIGlzIGEKKyAgICAgICAgbm90aWZpY2F0aW9uIHdoZW4gYSBjb25nZXN0aW9uIHVwZGF0ZSBhcnJpdmVkLCBvciB3aGVuIGEgUkRNQQorICAgICAgICBvcGVyYXRpb24gY29tcGxldGVzKS4gVGhlc2Ugbm90aWZpY2F0aW9ucyBhcmUgcmVjZWl2ZWQgdGhyb3VnaAorICAgICAgICB0aGUgbXNnLm1zZ19jb250cm9sIGJ1ZmZlciBvZiBzdHJ1Y3QgbXNnaGRyLiBUaGUgZm9ybWF0IG9mIHRoZQorICAgICAgICBtZXNzYWdlcyBpcyBkZXNjcmliZWQgaW4gbWFucGFnZXMuCisKKyAgcG9sbChmZCkKKyAgICAgICAgUkRTIHN1cHBvcnRzIHRoZSBwb2xsIGludGVyZmFjZSB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgdG8gaW1wbGVtZW50IGFzeW5jIEkvTy4KKworICAgICAgICBQT0xMSU4gaGFuZGxpbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gV2hlbiB0aGVyZSdzIGFuCisgICAgICAgIGluY29taW5nIG1lc3NhZ2UgcXVldWVkIHRvIHRoZSBzb2NrZXQsIG9yIGEgcGVuZGluZyBub3RpZmljYXRpb24sCisgICAgICAgIHdlIHNpZ25hbCBQT0xMSU4uCisKKyAgICAgICAgUE9MTE9VVCBpcyBhIGxpdHRsZSBoYXJkZXIuIFNpbmNlIHlvdSBjYW4gZXNzZW50aWFsbHkgc2VuZAorICAgICAgICB0byBhbnkgZGVzdGluYXRpb24sIFJEUyB3aWxsIGFsd2F5cyBzaWduYWwgUE9MTE9VVCBhcyBsb25nIGFzCisgICAgICAgIHRoZXJlJ3Mgcm9vbSBvbiB0aGUgc2VuZCBxdWV1ZSAoaWUgdGhlIG51bWJlciBvZiBieXRlcyBxdWV1ZWQKKyAgICAgICAgaXMgbGVzcyB0aGFuIHRoZSBzZW5kYnVmIHNpemUpLgorCisgICAgICAgIEhvd2V2ZXIsIHRoZSBrZXJuZWwgd2lsbCByZWZ1c2UgdG8gYWNjZXB0IG1lc3NhZ2VzIHRvCisgICAgICAgIGEgZGVzdGluYXRpb24gbWFya2VkIGNvbmdlc3RlZCAtIGluIHRoaXMgY2FzZSB5b3Ugd2lsbCBsb29wCisgICAgICAgIGZvcmV2ZXIgaWYgeW91IHJlbHkgb24gcG9sbCB0byB0ZWxsIHlvdSB3aGF0IHRvIGRvLgorICAgICAgICBUaGlzIGlzbid0IGEgdHJpdmlhbCBwcm9ibGVtLCBidXQgYXBwbGljYXRpb25zIGNhbiBkZWFsIHdpdGgKKyAgICAgICAgdGhpcyAtIGJ5IHVzaW5nIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9ucywgYW5kIGJ5IGNoZWNraW5nIGZvcgorICAgICAgICBFTk9CVUZTIGVycm9ycyByZXR1cm5lZCBieSBzZW5kbXNnLgorCisgIHNldHNvY2tvcHQoU09MX1JEUywgUkRTX0NBTkNFTF9TRU5UX1RPLCAmc29ja2FkZHJfaW4pCisgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBkaXNjYXJkIGFsbCBtZXNzYWdlcyBxdWV1ZWQgdG8gYQorICAgICAgICBzcGVjaWZpYyBkZXN0aW5hdGlvbiBvbiB0aGlzIHBhcnRpY3VsYXIgc29ja2V0LgorCisgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBjYW5jZWwgb3V0c3RhbmRpbmcgbWVzc2FnZXMgaWYKKyAgICAgICAgaXQgZGV0ZWN0cyBhIHRpbWVvdXQuIEZvciBpbnN0YW5jZSwgaWYgaXQgdHJpZWQgdG8gc2VuZCBhIG1lc3NhZ2UsCisgICAgICAgIGFuZCB0aGUgcmVtb3RlIGhvc3QgaXMgdW5yZWFjaGFibGUsIFJEUyB3aWxsIGtlZXAgdHJ5aW5nIGZvcmV2ZXIuCisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBtYXkgZGVjaWRlIGl0J3Mgbm90IHdvcnRoIGl0LCBhbmQgY2FuY2VsIHRoZQorICAgICAgICBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgaXQgd291bGQgdXNlIFJEU19DQU5DRUxfU0VOVF9UTyB0bworICAgICAgICBudWtlIGFueSBwZW5kaW5nIG1lc3NhZ2VzLgorCisKK1JETUEgZm9yIFJEUworPT09PT09PT09PT09CisKKyAgc2VlIHJkcy1yZG1hKDcpIG1hbnBhZ2UgKGF2YWlsYWJsZSBpbiByZHMtdG9vbHMpCisKKworQ29uZ2VzdGlvbiBOb3RpZmljYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICBzZWUgcmRzKDcpIG1hbnBhZ2UKKworCitSRFMgUHJvdG9jb2wKKz09PT09PT09PT09PQorCisgIE1lc3NhZ2UgaGVhZGVyCisKKyAgICBUaGUgbWVzc2FnZSBoZWFkZXIgaXMgYSAnc3RydWN0IHJkc19oZWFkZXInIChzZWUgcmRzLmgpOgorICAgIEZpZWxkczoKKyAgICAgIGhfc2VxdWVuY2U6CisgICAgICAgICAgcGVyLXBhY2tldCBzZXF1ZW5jZSBudW1iZXIKKyAgICAgIGhfYWNrOgorICAgICAgICAgIHBpZ2d5YmFja2VkIGFja25vd2xlZGdtZW50IG9mIGxhc3QgcGFja2V0IHJlY2VpdmVkCisgICAgICBoX2xlbjoKKyAgICAgICAgICBsZW5ndGggb2YgZGF0YSwgbm90IGluY2x1ZGluZyBoZWFkZXIKKyAgICAgIGhfc3BvcnQ6CisgICAgICAgICAgc291cmNlIHBvcnQKKyAgICAgIGhfZHBvcnQ6CisgICAgICAgICAgZGVzdGluYXRpb24gcG9ydAorICAgICAgaF9mbGFnczoKKyAgICAgICAgICBDT05HX0JJVE1BUCAtIHRoaXMgaXMgYSBjb25nZXN0aW9uIHVwZGF0ZSBiaXRtYXAKKyAgICAgICAgICBBQ0tfUkVRVUlSRUQgLSByZWNlaXZlciBtdXN0IGFjayB0aGlzIHBhY2tldAorICAgICAgICAgIFJFVFJBTlNNSVRURUQgLSBwYWNrZXQgaGFzIHByZXZpb3VzbHkgYmVlbiBzZW50CisgICAgICBoX2NyZWRpdDoKKyAgICAgICAgICBpbmRpY2F0ZSB0byBvdGhlciBlbmQgb2YgY29ubmVjdGlvbiB0aGF0CisgICAgICAgICAgaXQgaGFzIG1vcmUgY3JlZGl0cyBhdmFpbGFibGUgKGkuZS4gdGhlcmUgaXMKKyAgICAgICAgICBtb3JlIHNlbmQgcm9vbSkKKyAgICAgIGhfcGFkZGluZ1s0XToKKyAgICAgICAgICB1bnVzZWQsIGZvciBmdXR1cmUgdXNlCisgICAgICBoX2NzdW06CisgICAgICAgICAgaGVhZGVyIGNoZWNrc3VtCisgICAgICBoX2V4dGhkcjoKKyAgICAgICAgICBvcHRpb25hbCBkYXRhIGNhbiBiZSBwYXNzZWQgaGVyZS4gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBmb3IKKyAgICAgICAgICBwYXNzaW5nIFJETUEtcmVsYXRlZCBpbmZvcm1hdGlvbi4KKworICBBQ0sgYW5kIHJldHJhbnNtaXQgaGFuZGxpbmcKKworICAgICAgT25lIG1pZ2h0IHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZAorICAgICAgdG8gYWNrIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQgorICAgICAgaGFyZHdhcmUgZ2VuZXJhdGVzIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UKKyAgICAgIGludG8gbWVtb3J5LiAgVGhpcyBjcmVhdGVzIGEgcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzCisgICAgICBkaXNhYmxlZCBmb3IgYW55IHJlYXNvbiBiZXR3ZWVuIHdoZW4gaXQgc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlCisgICAgICB0aGUgbWVzc2FnZSBpcyBETUFlZCBhbmQgcHJvY2Vzc2VkLiAgVGhpcyBpcyBvbmx5IGEgcG90ZW50aWFsIGlzc3VlCisgICAgICBpZiBhbm90aGVyIEhDQSBpcyBhdmFpbGFibGUgZm9yIGZhaWwtb3Zlci4KKworICAgICAgU2VuZGluZyBhbiBhY2sgaW1tZWRpYXRlbHkgd291bGQgYWxsb3cgdGhlIHNlbmRlciB0byBmcmVlIHRoZSBzZW50CisgICAgICBtZXNzYWdlIGZyb20gdGhlaXIgc2VuZCBxdWV1ZSBxdWlja2x5LCBidXQgY291bGQgY2F1c2UgZXhjZXNzaXZlCisgICAgICB0cmFmZmljIHRvIGJlIHVzZWQgZm9yIGFja3MuIFJEUyBwaWdneWJhY2tzIGFja3Mgb24gc2VudCBkYXRhCisgICAgICBwYWNrZXRzLiAgQWNrLW9ubHkgcGFja2V0cyBhcmUgcmVkdWNlZCBieSBvbmx5IGFsbG93aW5nIG9uZSB0byBiZQorICAgICAgaW4gZmxpZ2h0IGF0IGEgdGltZSwgYW5kIGJ5IHRoZSBzZW5kZXIgb25seSBhc2tpbmcgZm9yIGFja3Mgd2hlbgorICAgICAgaXRzIHNlbmQgYnVmZmVycyBzdGFydCB0byBmaWxsIHVwLiBBbGwgcmV0cmFuc21pc3Npb25zIGFyZSBhbHNvCisgICAgICBhY2tlZC4KKworICBGbG93IENvbnRyb2wKKworICAgICAgUkRTJ3MgSUIgdHJhbnNwb3J0IHVzZXMgYSBjcmVkaXQtYmFzZWQgbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGF0CisgICAgICB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcGVlcidzIHJlY2VpdmUgYnVmZmVycyBmb3IgbW9yZSBkYXRhLiBUaGlzCisgICAgICBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBoYXJkd2FyZSByZXRyaWVzIG9uIHRoZSBjb25uZWN0aW9uLgorCisgIENvbmdlc3Rpb24KKworICAgICAgTWVzc2FnZXMgd2FpdGluZyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBvbiB0aGUgcmVjZWl2aW5nIHNvY2tldAorICAgICAgYXJlIGFjY291bnRlZCBhZ2FpbnN0IHRoZSBzb2NrZXRzIFNPX1JDVkJVRiBvcHRpb24gdmFsdWUuICBPbmx5CisgICAgICB0aGUgcGF5bG9hZCBieXRlcyBpbiB0aGUgbWVzc2FnZSBhcmUgYWNjb3VudGVkIGZvci4gIElmIHRoZQorICAgICAgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBlcXVhbHMgb3IgZXhjZWVkcyByY3ZidWYgdGhlbiB0aGUgc29ja2V0CisgICAgICBpcyBjb25nZXN0ZWQuICBBbGwgc2VuZHMgYXR0ZW1wdGVkIHRvIHRoaXMgc29ja2V0J3MgYWRkcmVzcworICAgICAgc2hvdWxkIHJldHVybiBibG9jayBvciByZXR1cm4gLUVXT1VMREJMT0NLLgorCisgICAgICBBcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlYXNvbmFibHkgdHVuZWQgc3VjaCB0aGF0IHRoaXMKKyAgICAgIHNpdHVhdGlvbiB2ZXJ5IHJhcmVseSBvY2N1cnMuICBBbiBhcHBsaWNhdGlvbiBlbmNvdW50ZXJpbmcgdGhpcworICAgICAgImJhY2stcHJlc3N1cmUiIGlzIGNvbnNpZGVyZWQgYSBidWcuCisKKyAgICAgIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2aW5nIGVhY2ggbm9kZSBtYWludGFpbiBiaXRtYXBzIHdoaWNoCisgICAgICBpbmRpY2F0ZSB3aGljaCBwb3J0cyBvbiBib3VuZCBhZGRyZXNzZXMgYXJlIGNvbmdlc3RlZC4gIEFzIHRoZQorICAgICAgYml0bWFwIGNoYW5nZXMgaXQgaXMgc2VudCB0aHJvdWdoIGFsbCB0aGUgY29ubmVjdGlvbnMgd2hpY2gKKyAgICAgIHRlcm1pbmF0ZSBpbiB0aGUgbG9jYWwgYWRkcmVzcyBvZiB0aGUgYml0bWFwIHdoaWNoIGNoYW5nZWQuCisKKyAgICAgIFRoZSBiaXRtYXBzIGFyZSBhbGxvY2F0ZWQgYXMgY29ubmVjdGlvbnMgYXJlIGJyb3VnaHQgdXAuICBUaGlzCisgICAgICBhdm9pZHMgYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGggd2hpY2ggcXVldWVzCisgICAgICBzYWdlcyBvbiBzb2NrZXRzLiAgVGhlIGRlbnNlIGJpdG1hcHMgbGV0IHRyYW5zcG9ydHMgc2VuZCB0aGUKKyAgICAgIGVudGlyZSBiaXRtYXAgb24gYW55IGJpdG1hcCBjaGFuZ2UgcmVhc29uYWJseSBlZmZpY2llbnRseS4gIFRoaXMKKyAgICAgIGlzIG11Y2ggZWFzaWVyIHRvIGltcGxlbWVudCB0aGFuIHNvbWUgZmluZXItZ3JhaW5lZAorICAgICAgY29tbXVuaWNhdGlvbiBvZiBwZXItcG9ydCBjb25nZXN0aW9uLiAgVGhlIHNlbmRlciBkb2VzIGEgdmVyeQorICAgICAgaW5leHBlbnNpdmUgYml0IHRlc3QgdG8gdGVzdCBpZiB0aGUgcG9ydCBpdCdzIGFib3V0IHRvIHNlbmQgdG8KKyAgICAgIGlzIGNvbmdlc3RlZCBvciBub3QuCisKKworUkRTIFRyYW5zcG9ydCBMYXllcgorPT09PT09PT09PT09PT09PT09CisKKyAgQXMgbWVudGlvbmVkIGFib3ZlLCBSRFMgaXMgbm90IElCLXNwZWNpZmljLiBJdHMgY29kZSBpcyBkaXZpZGVkCisgIGludG8gYSBnZW5lcmFsIFJEUyBsYXllciBhbmQgYSB0cmFuc3BvcnQgbGF5ZXIuCisKKyAgVGhlIGdlbmVyYWwgbGF5ZXIgaGFuZGxlcyB0aGUgc29ja2V0IEFQSSwgY29uZ2VzdGlvbiBoYW5kbGluZywKKyAgbG9vcGJhY2ssIHN0YXRzLCB1c2VybWVtIHBpbm5pbmcsIGFuZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lLgorCisgIFRoZSB0cmFuc3BvcnQgbGF5ZXIgaGFuZGxlcyB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNwb3J0LiBUaGUgSUIKKyAgdHJhbnNwb3J0LCBmb3IgZXhhbXBsZSwgaGFuZGxlcyBhbGwgdGhlIHF1ZXVlIHBhaXJzLCB3b3JrIHJlcXVlc3RzLAorICBDTSBldmVudCBoYW5kbGVycywgYW5kIG90aGVyIEluZmluaWJhbmQgZGV0YWlscy4KKworCitSRFMgS2VybmVsIFN0cnVjdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PQorCisgIHN0cnVjdCByZHNfbWVzc2FnZQorICAgIGFrYSBwb3NzaWJseSAicmRzX291dGdvaW5nIiwgdGhlIGdlbmVyaWMgUkRTIGxheWVyIGNvcGllcyBkYXRhIHRvCisgICAgYmUgc2VudCBhbmQgc2V0cyBoZWFkZXIgZmllbGRzIGFzIG5lZWRlZCwgYmFzZWQgb24gdGhlIHNvY2tldCBBUEkuCisgICAgVGhpcyBpcyB0aGVuIHF1ZXVlZCBmb3IgdGhlIGluZGl2aWR1YWwgY29ubmVjdGlvbiBhbmQgc2VudCBieSB0aGUKKyAgICBjb25uZWN0aW9uJ3MgdHJhbnNwb3J0LgorICBzdHJ1Y3QgcmRzX2luY29taW5nCisgICAgYSBnZW5lcmljIHN0cnVjdCByZWZlcnJpbmcgdG8gaW5jb21pbmcgZGF0YSB0aGF0IGNhbiBiZSBoYW5kZWQgZnJvbQorICAgIHRoZSB0cmFuc3BvcnQgdG8gdGhlIGdlbmVyYWwgY29kZSBhbmQgcXVldWVkIGJ5IHRoZSBnZW5lcmFsIGNvZGUKKyAgICB3aGlsZSB0aGUgc29ja2V0IGlzIGF3b2tlbi4gSXQgaXMgdGhlbiBwYXNzZWQgYmFjayB0byB0aGUgdHJhbnNwb3J0CisgICAgY29kZSB0byBoYW5kbGUgdGhlIGFjdHVhbCBjb3B5LXRvLXVzZXIuCisgIHN0cnVjdCByZHNfc29ja2V0CisgICAgcGVyLXNvY2tldCBpbmZvcm1hdGlvbgorICBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24KKyAgICBwZXItY29ubmVjdGlvbiBpbmZvcm1hdGlvbgorICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydAorICAgIHBvaW50ZXJzIHRvIHRyYW5zcG9ydC1zcGVjaWZpYyBmdW5jdGlvbnMKKyAgc3RydWN0IHJkc19zdGF0aXN0aWNzCisgICAgbm9uLXRyYW5zcG9ydC1zcGVjaWZpYyBzdGF0aXN0aWNzCisgIHN0cnVjdCByZHNfY29uZ19tYXAKKyAgICB3cmFwcyB0aGUgcmF3IGNvbmdlc3Rpb24gYml0bWFwLCBjb250YWlucyByYm5vZGUsIHdhaXRxLCBldGMuCisKK0Nvbm5lY3Rpb24gbWFuYWdlbWVudAorPT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29ubmVjdGlvbnMgbWF5IGJlIGluIFVQLCBET1dOLCBDT05ORUNUSU5HLCBESVNDT05ORUNUSU5HLCBhbmQKKyAgRVJST1Igc3RhdGVzLgorCisgIFRoZSBmaXJzdCB0aW1lIGFuIGF0dGVtcHQgaXMgbWFkZSBieSBhbiBSRFMgc29ja2V0IHRvIHNlbmQgZGF0YSB0bworICBhIG5vZGUsIGEgY29ubmVjdGlvbiBpcyBhbGxvY2F0ZWQgYW5kIGNvbm5lY3RlZC4gVGhhdCBjb25uZWN0aW9uIGlzCisgIHRoZW4gbWFpbnRhaW5lZCBmb3JldmVyIC0tIGlmIHRoZXJlIGFyZSB0cmFuc3BvcnQgZXJyb3JzLCB0aGUKKyAgY29ubmVjdGlvbiB3aWxsIGJlIGRyb3BwZWQgYW5kIHJlLWVzdGFibGlzaGVkLgorCisgIERyb3BwaW5nIGEgY29ubmVjdGlvbiB3aGlsZSBwYWNrZXRzIGFyZSBxdWV1ZWQgd2lsbCBjYXVzZSBxdWV1ZWQgb3IKKyAgcGFydGlhbGx5LXNlbnQgZGF0YWdyYW1zIHRvIGJlIHJldHJhbnNtaXR0ZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcworICByZS1lc3RhYmxpc2hlZC4KKworCitUaGUgc2VuZCBwYXRoCis9PT09PT09PT09PT09CisKKyAgcmRzX3NlbmRtc2coKQorICAgIHN0cnVjdCByZHNfbWVzc2FnZSBidWlsdCBmcm9tIGluY29taW5nIGRhdGEKKyAgICBDTVNHcyBwYXJzZWQgKGUuZy4gUkRNQSBvcHMpCisgICAgdHJhbnNwb3J0IGNvbm5lY3Rpb24gYWxsb2NlZCBhbmQgY29ubmVjdGVkIGlmIG5vdCBhbHJlYWR5CisgICAgcmRzX21lc3NhZ2UgcGxhY2VkIG9uIHNlbmQgcXVldWUKKyAgICBzZW5kIHdvcmtlciBhd29rZW4KKyAgcmRzX3NlbmRfd29ya2VyKCkKKyAgICBjYWxscyByZHNfc2VuZF94bWl0KCkgdW50aWwgcXVldWUgaXMgZW1wdHkKKyAgcmRzX3NlbmRfeG1pdCgpCisgICAgdHJhbnNtaXRzIGNvbmdlc3Rpb24gbWFwIGlmIG9uZSBpcyBwZW5kaW5nCisgICAgbWF5IHNldCBBQ0tfUkVRVUlSRUQKKyAgICBjYWxscyB0cmFuc3BvcnQgdG8gc2VuZCBlaXRoZXIgbm9uLVJETUEgb3IgUkRNQSBtZXNzYWdlCisgICAgKFJETUEgb3BzIG5ldmVyIHJldHJhbnNtaXR0ZWQpCisgIHJkc19pYl94bWl0KCkKKyAgICBhbGxvY3Mgd29yayByZXF1ZXN0cyBmcm9tIHNlbmQgcmluZworICAgIGFkZHMgYW55IG5ldyBzZW5kIGNyZWRpdHMgYXZhaWxhYmxlIHRvIHBlZXIgKGhfY3JlZGl0cykKKyAgICBtYXBzIHRoZSByZHNfbWVzc2FnZSdzIHNnIGxpc3QKKyAgICBwaWdneWJhY2tzIGFjaworICAgIHBvcHVsYXRlcyB3b3JrIHJlcXVlc3RzCisgICAgcG9zdCBzZW5kIHRvIGNvbm5lY3Rpb24ncyBxdWV1ZSBwYWlyCisKK1RoZSByZWN2IHBhdGgKKz09PT09PT09PT09PT0KKworICByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIoKQorICAgIGxvb2tzIGF0IHdyaXRlIGNvbXBsZXRpb25zCisgICAgdW5tYXBzIHJlY3YgYnVmZmVyIGZyb20gZGV2aWNlCisgICAgbm8gZXJyb3JzLCBjYWxsIHJkc19pYl9wcm9jZXNzX3JlY3YoKQorICAgIHJlZmlsbCByZWN2IHJpbmcKKyAgcmRzX2liX3Byb2Nlc3NfcmVjdigpCisgICAgdmFsaWRhdGUgaGVhZGVyIGNoZWNrc3VtCisgICAgY29weSBoZWFkZXIgdG8gcmRzX2liX2luY29taW5nIHN0cnVjdCBpZiBzdGFydCBvZiBhIG5ldyBkYXRhZ3JhbQorICAgIGFkZCB0byBpYmluYydzIGZyYWdsaXN0CisgICAgaWYgY29tcGV0ZWQgZGF0YWdyYW06CisgICAgICB1cGRhdGUgY29uZyBtYXAgaWYgZGF0YWdyYW0gd2FzIGNvbmcgdXBkYXRlCisgICAgICBjYWxsIHJkc19yZWN2X2luY29taW5nKCkgb3RoZXJ3aXNlCisgICAgICBub3RlIGlmIGFjayBpcyByZXF1aXJlZAorICByZHNfcmVjdl9pbmNvbWluZygpCisgICAgZHJvcCBkdXBsaWNhdGUgcGFja2V0cworICAgIHJlc3BvbmQgdG8gcGluZ3MKKyAgICBmaW5kIHRoZSBzb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGFncmFtCisgICAgYWRkIHRvIHNvY2sgcXVldWUKKyAgICB3YWtlIHVwIHNvY2sKKyAgICBkbyBzb21lIGNvbmdlc3Rpb24gY2FsY3VsYXRpb25zCisgIHJkc19yZWN2bXNnCisgICAgY29weSBkYXRhIGludG8gdXNlciBpb3ZlYworICAgIGhhbmRsZSBDTVNHcworICAgIHJldHVybiB0byBhcHBsaWNhdGlvbgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1OGI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0CkBAIC0wLDAgKzEsMTgwIEBACitUaGUgZXhpc3RpbmcgaW50ZXJmYWNlcyBmb3IgZ2V0dGluZyBuZXR3b3JrIHBhY2thZ2VzIHRpbWUgc3RhbXBlZCBhcmU6CisKKyogU09fVElNRVNUQU1QCisgIEdlbmVyYXRlIHRpbWUgc3RhbXAgZm9yIGVhY2ggaW5jb21pbmcgcGFja2V0IHVzaW5nIHRoZSAobm90IG5lY2Vzc2FyaWx5CisgIG1vbm90b25vdXMhKSBzeXN0ZW0gdGltZS4gUmVzdWx0IGlzIHJldHVybmVkIHZpYSByZWN2X21zZygpIGluIGEKKyAgY29udHJvbCBtZXNzYWdlIGFzIHRpbWV2YWwgKHVzZWMgcmVzb2x1dGlvbikuCisKKyogU09fVElNRVNUQU1QTlMKKyAgU2FtZSB0aW1lIHN0YW1waW5nIG1lY2hhbmlzbSBhcyBTT19USU1FU1RBTVAsIGJ1dCByZXR1cm5zIHJlc3VsdCBhcworICB0aW1lc3BlYyAobnNlYyByZXNvbHV0aW9uKS4KKworKiBJUF9NVUxUSUNBU1RfTE9PUCArIFNPX1RJTUVTVEFNUFtOU10KKyAgT25seSBmb3IgbXVsdGljYXN0czogYXBwcm94aW1hdGUgc2VuZCB0aW1lIHN0YW1wIGJ5IHJlY2VpdmluZyB0aGUgbG9vcGVkCisgIHBhY2tldCBhbmQgdXNpbmcgaXRzIHJlY2VpdmUgdGltZSBzdGFtcC4KKworVGhlIGZvbGxvd2luZyBpbnRlcmZhY2UgY29tcGxlbWVudHMgdGhlIGV4aXN0aW5nIG9uZXM6IHJlY2VpdmUgdGltZQorc3RhbXBzIGNhbiBiZSBnZW5lcmF0ZWQgYW5kIHJldHVybmVkIGZvciBhcmJpdHJhcnkgcGFja2V0cyBhbmQgbXVjaAorY2xvc2VyIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgcGFja2V0IGlzIHJlYWxseSBzZW50LiBUaW1lIHN0YW1wcyBjYW4KK2JlIGdlbmVyYXRlZCBpbiBzb2Z0d2FyZSAoYXMgYmVmb3JlKSBvciBpbiBoYXJkd2FyZSAoaWYgdGhlIGhhcmR3YXJlCitoYXMgc3VjaCBhIGZlYXR1cmUpLgorCitTT19USU1FU1RBTVBJTkc6CisKK0luc3RydWN0cyB0aGUgc29ja2V0IGxheWVyIHdoaWNoIGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgd2FudGVkLiBUaGUKK3BhcmFtZXRlciBpcyBhbiBpbnRlZ2VyIHdpdGggc29tZSBvZiB0aGUgZm9sbG93aW5nIGJpdHMgc2V0LiBTZXR0aW5nCitvdGhlciBiaXRzIGlzIGFuIGVycm9yIGFuZCBkb2Vzbid0IGNoYW5nZSB0aGUgY3VycmVudCBzdGF0ZS4KKworU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRTogIHRyeSB0byBvYnRhaW4gc2VuZCB0aW1lIHN0YW1wIGluIGhhcmR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFOiAgaWYgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSBpcyBvZmYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlscywgdGhlbiBkbyBpdCBpbiBzb2Z0d2FyZQorU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTogIHJldHVybiB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgdGltZSBzdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGdlbmVyYXRlZCBieSB0aGUgaGFyZHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU6ICBpZiBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIGlzIG9mZiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxzLCB0aGVuIGRvIGl0IGluIHNvZnR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTogcmV0dXJuIG9yaWdpbmFsIHJhdyBoYXJkd2FyZSB0aW1lIHN0YW1wCitTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTogcmV0dXJuIGhhcmR3YXJlIHRpbWUgc3RhbXAgdHJhbnNmb3JtZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIHRpbWUgYmFzZQorU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTogICAgIHJldHVybiBzeXN0ZW0gdGltZSBzdGFtcCBnZW5lcmF0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZQorCitTT0ZfVElNRVNUQU1QSU5HX1RYL1JYIGRldGVybWluZSBob3cgdGltZSBzdGFtcHMgYXJlIGdlbmVyYXRlZC4KK1NPRl9USU1FU1RBTVBJTkdfUkFXL1NZUyBkZXRlcm1pbmUgaG93IHRoZXkgYXJlIHJlcG9ydGVkIGluIHRoZQorZm9sbG93aW5nIGNvbnRyb2wgbWVzc2FnZToKKyAgICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyB7CisgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBzeXN0aW1lOworICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaHd0aW1ldHJhbnM7CisgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBod3RpbWVyYXc7CisgICAgfTsKKworcmVjdm1zZygpIGNhbiBiZSB1c2VkIHRvIGdldCB0aGlzIGNvbnRyb2wgbWVzc2FnZSBmb3IgcmVndWxhciBpbmNvbWluZworcGFja2V0cy4gRm9yIHNlbmQgdGltZSBzdGFtcHMgdGhlIG91dGdvaW5nIHBhY2tldCBpcyBsb29wZWQgYmFjayB0bwordGhlIHNvY2tldCdzIGVycm9yIHF1ZXVlIHdpdGggdGhlIHNlbmQgdGltZSBzdGFtcChzKSBhdHRhY2hlZC4gSXQgY2FuCitiZSByZWNlaXZlZCB3aXRoIHJlY3Ztc2coZmxhZ3M9TVNHX0VSUlFVRVVFKS4gVGhlIGNhbGwgcmV0dXJucyB0aGUKK29yaWdpbmFsIG91dGdvaW5nIHBhY2tldCBkYXRhIGluY2x1ZGluZyBhbGwgaGVhZGVycyBwcmVwcmVuZGVkIGRvd24gdG8KK2FuZCBpbmNsdWRpbmcgdGhlIGxpbmsgbGF5ZXIsIHRoZSBzY21fdGltZXN0YW1waW5nIGNvbnRyb2wgbWVzc2FnZSBhbmQKK2Egc29ja19leHRlbmRlZF9lcnIgY29udHJvbCBtZXNzYWdlIHdpdGggZWVfZXJybm89PUVOT01TRyBhbmQKK2VlX29yaWdpbj09U09fRUVfT1JJR0lOX1RJTUVTVEFNUElORy4gQSBzb2NrZXQgd2l0aCBzdWNoIGEgcGVuZGluZworYm91bmNlZCBwYWNrZXQgaXMgcmVhZHkgZm9yIHJlYWRpbmcgYXMgZmFyIGFzIHNlbGVjdCgpIGlzIGNvbmNlcm5lZC4KK0lmIHRoZSBvdXRnb2luZyBwYWNrZXQgaGFzIHRvIGJlIGZyYWdtZW50ZWQsIHRoZW4gb25seSB0aGUgZmlyc3QKK2ZyYWdtZW50IGlzIHRpbWUgc3RhbXBlZCBhbmQgcmV0dXJuZWQgdG8gdGhlIHNlbmRpbmcgc29ja2V0LgorCitBbGwgdGhyZWUgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZXZlbnQgaW4gdGltZSwgYnV0IHdlcmUKK2dlbmVyYXRlZCBpbiBkaWZmZXJlbnQgd2F5cy4gRWFjaCBvZiB0aGVzZSB2YWx1ZXMgbWF5IGJlIGVtcHR5ICg9IGFsbAoremVybyksIGluIHdoaWNoIGNhc2Ugbm8gc3VjaCB2YWx1ZSB3YXMgYXZhaWxhYmxlLiBJZiB0aGUgYXBwbGljYXRpb24KK2lzIG5vdCBpbnRlcmVzdGVkIGluIHNvbWUgb2YgdGhlc2UgdmFsdWVzLCB0aGV5IGNhbiBiZSBsZWZ0IGJsYW5rIHRvCithdm9pZCB0aGUgcG90ZW50aWFsIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHRoZW0uCisKK3N5c3RpbWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0gdGltZSBhdCB0aGF0IG1vbWVudC4gVGhpcworY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIGFsc28gcmV0dXJuZWQgdmlhIFNPX1RJTUVTVEFNUFtOU10uIElmIHRoZQordGltZSBzdGFtcCB3YXMgZ2VuZXJhdGVkIGJ5IGhhcmR3YXJlLCB0aGVuIHRoaXMgZmllbGQgaXMKK2VtcHR5LiBPdGhlcndpc2UgaXQgaXMgZmlsbGVkIGluIGlmIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgaXMKK3NldC4KKworaHd0aW1lcmF3IGlzIHRoZSBvcmlnaW5hbCBoYXJkd2FyZSB0aW1lIHN0YW1wLiBGaWxsZWQgaW4gaWYKK1NPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIGlzIHNldC4gTm8gYXNzdW1wdGlvbnMgYWJvdXQgaXRzCityZWxhdGlvbiB0byBzeXN0ZW0gdGltZSBzaG91bGQgYmUgbWFkZS4KKworaHd0aW1ldHJhbnMgaXMgdGhlIGhhcmR3YXJlIHRpbWUgc3RhbXAgdHJhbnNmb3JtZWQgc28gdGhhdCBpdAorY29ycmVzcG9uZHMgYXMgZ29vZCBhcyBwb3NzaWJsZSB0byBzeXN0ZW0gdGltZS4gVGhpcyBjb3JyZWxhdGlvbiBpcworbm90IHBlcmZlY3Q7IGFzIGEgY29uc2VxdWVuY2UsIHNvcnRpbmcgcGFja2V0cyByZWNlaXZlZCB2aWEgZGlmZmVyZW50CitOSUNzIGJ5IHRoZWlyIGh3dGltZXRyYW5zIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCityZWNlaXZlZC4gaHd0aW1ldHJhbnMgbWF5IGJlIG5vbi1tb25vdG9uaWMgZXZlbiBmb3IgdGhlIHNhbWUgTklDLgorRmlsbGVkIGluIGlmIFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIGlzIHNldC4gUmVxdWlyZXMgc3VwcG9ydAorYnkgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCB3aWxsIGJlIGVtcHR5IHdpdGhvdXQgdGhhdCBzdXBwb3J0LgorCisKK1NJT0NTSFdUU1RBTVA6CisKK0hhcmR3YXJlIHRpbWUgc3RhbXBpbmcgbXVzdCBhbHNvIGJlIGluaXRpYWxpemVkIGZvciBlYWNoIGRldmljZSBkcml2ZXIKK3RoYXQgaXMgZXhwZWN0ZWQgdG8gZG8gaGFyZHdhcmUgdGltZSBzdGFtcGluZy4gVGhlIHBhcmFtZXRlciBpczoKKworc3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7CisgICAgaW50IGZsYWdzOyAgICAgICAgICAgLyogbm8gZmxhZ3MgZGVmaW5lZCByaWdodCBub3csIG11c3QgYmUgemVybyAqLworICAgIGludCB0eF90eXBlOyAgICAgICAgIC8qIEhXVFNUQU1QX1RYXyogKi8KKyAgICBpbnQgcnhfZmlsdGVyOyAgICAgICAvKiBIV1RTVEFNUF9GSUxURVJfKiAqLworfTsKKworRGVzaXJlZCBiZWhhdmlvciBpcyBwYXNzZWQgaW50byB0aGUga2VybmVsIGFuZCB0byBhIHNwZWNpZmljIGRldmljZSBieQorY2FsbGluZyBpb2N0bChTSU9DU0hXVFNUQU1QKSB3aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdCBpZnJlcSB3aG9zZQoraWZyX2RhdGEgcG9pbnRzIHRvIGEgc3RydWN0IGh3dHN0YW1wX2NvbmZpZy4gVGhlIHR4X3R5cGUgYW5kCityeF9maWx0ZXIgYXJlIGhpbnRzIHRvIHRoZSBkcml2ZXIgd2hhdCBpdCBpcyBleHBlY3RlZCB0byBkby4gSWYKK3RoZSByZXF1ZXN0ZWQgZmluZS1ncmFpbmVkIGZpbHRlcmluZyBmb3IgaW5jb21pbmcgcGFja2V0cyBpcyBub3QKK3N1cHBvcnRlZCwgdGhlIGRyaXZlciBtYXkgdGltZSBzdGFtcCBtb3JlIHRoYW4ganVzdCB0aGUgcmVxdWVzdGVkIHR5cGVzCitvZiBwYWNrZXRzLgorCitBIGRyaXZlciB3aGljaCBzdXBwb3J0cyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIHNoYWxsIHVwZGF0ZSB0aGUgc3RydWN0Cit3aXRoIHRoZSBhY3R1YWwsIHBvc3NpYmx5IG1vcmUgcGVybWlzc2l2ZSBjb25maWd1cmF0aW9uLiBJZiB0aGUKK3JlcXVlc3RlZCBwYWNrZXRzIGNhbm5vdCBiZSB0aW1lIHN0YW1wZWQsIHRoZW4gbm90aGluZyBzaG91bGQgYmUKK2NoYW5nZWQgYW5kIEVSQU5HRSBzaGFsbCBiZSByZXR1cm5lZCAoaW4gY29udHJhc3QgdG8gRUlOVkFMLCB3aGljaAoraW5kaWNhdGVzIHRoYXQgU0lPQ1NIV1RTVEFNUCBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCkuCisKK09ubHkgYSBwcm9jZXNzZXMgd2l0aCBhZG1pbiByaWdodHMgbWF5IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbi4gVXNlcgorc3BhY2UgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIGRvbid0IGludGVyZmVyZQord2l0aCBlYWNoIG90aGVyIGFuZCB0aGF0IHRoZSBzZXR0aW5ncyBhcmUgcmVzZXQuCisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT50eF90eXBlICovCitlbnVtIHsKKwkvKgorCSAqIG5vIG91dGdvaW5nIHBhY2tldCB3aWxsIG5lZWQgaGFyZHdhcmUgdGltZSBzdGFtcGluZzsKKwkgKiBzaG91bGQgYSBwYWNrZXQgYXJyaXZlIHdoaWNoIGFza3MgZm9yIGl0LCBubyBoYXJkd2FyZQorCSAqIHRpbWUgc3RhbXBpbmcgd2lsbCBiZSBkb25lCisJICovCisJSFdUU1RBTVBfVFhfT0ZGLAorCisJLyoKKwkgKiBlbmFibGVzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgZm9yIG91dGdvaW5nIHBhY2tldHM7CisJICogdGhlIHNlbmRlciBvZiB0aGUgcGFja2V0IGRlY2lkZXMgd2hpY2ggYXJlIHRvIGJlCisJICogdGltZSBzdGFtcGVkIGJ5IHNldHRpbmcgU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRQorCSAqIGJlZm9yZSBzZW5kaW5nIHRoZSBwYWNrZXQKKwkgKi8KKwlIV1RTVEFNUF9UWF9PTiwKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT5yeF9maWx0ZXIgKi8KK2VudW0geworCS8qIHRpbWUgc3RhbXAgbm8gaW5jb21pbmcgcGFja2V0IGF0IGFsbCAqLworCUhXVFNUQU1QX0ZJTFRFUl9OT05FLAorCisJLyogdGltZSBzdGFtcCBhbnkgaW5jb21pbmcgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX0FMTCwKKworICAgICAgICAvKiByZXR1cm4gdmFsdWU6IHRpbWUgc3RhbXAgYWxsIHBhY2tldHMgcmVxdWVzdGVkIHBsdXMgc29tZSBvdGhlcnMgKi8KKyAgICAgICAgSFdUU1RBTVBfRklMVEVSX1NPTUUsCisKKwkvKiBQVFAgdjEsIFVEUCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVOVCwKKworICAgICAgICAuLi4KK307CisKKworREVWSUNFIElNUExFTUVOVEFUSU9OCisKK0EgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgbXVzdCBzdXBwb3J0IHRoZQorU0lPQ1NIV1RTVEFNUCBpb2N0bC4gVGltZSBzdGFtcHMgZm9yIHJlY2VpdmVkIHBhY2tldHMgbXVzdCBiZSBzdG9yZWQKK2luIHRoZSBza2Igd2l0aCBza2JfaHd0c3RhbXBfc2V0KCkuCisKK1RpbWUgc3RhbXBzIGZvciBvdXRnb2luZyBwYWNrZXRzIGFyZSB0byBiZSBnZW5lcmF0ZWQgYXMgZm9sbG93czoKKy0gSW4gaGFyZF9zdGFydF94bWl0KCksIGNoZWNrIGlmIHNrYl9od3RzdGFtcF9jaGVja190eF9oYXJkd2FyZSgpCisgIHJldHVybnMgbm9uLXplcm8uIElmIHllcywgdGhlbiB0aGUgZHJpdmVyIGlzIGV4cGVjdGVkCisgIHRvIGRvIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcuCistIElmIHRoaXMgaXMgcG9zc2libGUgZm9yIHRoZSBza2IgYW5kIHJlcXVlc3RlZCwgdGhlbiBkZWNsYXJlCisgIHRoYXQgdGhlIGRyaXZlciBpcyBkb2luZyB0aGUgdGltZSBzdGFtcGluZyBieSBjYWxsaW5nCisgIHNrYl9od3RzdGFtcF90eF9pbl9wcm9ncmVzcygpLiBBIGRyaXZlciBub3Qgc3VwcG9ydGluZworICBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGRvZXNuJ3QgZG8gdGhhdC4gQSBkcml2ZXIgbXVzdCBuZXZlcgorICB0b3VjaCBza19idWZmOjp0c3RhbXAhIEl0IGlzIHVzZWQgdG8gc3RvcmUgaG93IHRpbWUgc3RhbXBpbmcKKyAgZm9yIGFuIG91dGdvaW5nIHBhY2tldHMgaXMgdG8gYmUgZG9uZS4KKy0gQXMgc29vbiBhcyB0aGUgZHJpdmVyIGhhcyBzZW50IHRoZSBwYWNrZXQgYW5kL29yIG9idGFpbmVkIGEKKyAgaGFyZHdhcmUgdGltZSBzdGFtcCBmb3IgaXQsIGl0IHBhc3NlcyB0aGUgdGltZSBzdGFtcCBiYWNrIGJ5CisgIGNhbGxpbmcgc2tiX2h3dHN0YW1wX3R4KCkgd2l0aCB0aGUgb3JpZ2luYWwgc2tiLCB0aGUgcmF3CisgIGhhcmR3YXJlIHRpbWUgc3RhbXAgYW5kIGEgaGFuZGxlIHRvIHRoZSBkZXZpY2UgKG5lY2Vzc2FyeQorICB0byBjb252ZXJ0IHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIHRvIHN5c3RlbSB0aW1lKS4gSWYgb2J0YWluaW5nCisgIHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIHNvbWVob3cgZmFpbHMsIHRoZW4gdGhlIGRyaXZlciBzaG91bGQKKyAgbm90IGZhbGwgYmFjayB0byBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQKKyAgdGhpcyB3b3VsZCBvY2N1ciBhdCBhIGxhdGVyIHRpbWUgaW4gdGhlIHByb2Nlc3NpbmcgcGlwZWxpbmUKKyAgdGhhbiBvdGhlciBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nIGFuZCB0aGVyZWZvcmUgY291bGQgbGVhZAorICB0byB1bmV4cGVjdGVkIGRlbHRhcyBiZXR3ZWVuIHRpbWUgc3RhbXBzLgorLSBJZiB0aGUgZHJpdmVyIGRpZCBub3QgY2FsbCBza2JfaHd0c3RhbXBfdHhfaW5fcHJvZ3Jlc3MoKSwgdGhlbgorICBkZXZfaGFyZF9zdGFydF94bWl0KCkgY2hlY2tzIHdoZXRoZXIgc29mdHdhcmUgdGltZSBzdGFtcGluZworICBpcyB3YW50ZWQgYXMgZmFsbGJhY2sgYW5kIHBvdGVudGlhbGx5IGdlbmVyYXRlcyB0aGUgdGltZSBzdGFtcC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU4MWViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3RpbWVzdGFtcGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExNDg5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitDUFBGTEFHUyA9IC1JLi4vLi4vLi4vaW5jbHVkZQorCit0aW1lc3RhbXBpbmc6IHRpbWVzdGFtcGluZy5jCisKK2NsZWFuOgorCXJtIC1mIHRpbWVzdGFtcGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkMTQzMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMKQEAgLTAsMCArMSw1MzMgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIGhvdyB0aGUgdmFyaW91cyB0aW1lIHN0YW1waW5nIGZlYXR1cmVzIGluCisgKiB0aGUgTGludXgga2VybmVsIHdvcmsuIEl0IGVtdWxhdGVzIHRoZSBiZWhhdmlvciBvZiBhIFBUUAorICogaW1wbGVtZW50YXRpb24gaW4gc3RhbmQtYWxvbmUgbWFzdGVyIG1vZGUgYnkgc2VuZGluZyBQVFB2MSBTeW5jCisgKiBtdWx0aWNhc3RzIG9uY2UgZXZlcnkgc2Vjb25kLiBJdCBsb29rcyBmb3Igc2ltaWxhciBwYWNrZXRzLCBidXQKKyAqIGJleW9uZCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgaW1wbGVtZW50IFBUUC4KKyAqCisgKiBPdXRnb2luZyBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgd2l0aCBTT19USU1FU1RBTVBJTkcgd2l0aCBvcgorICogd2l0aG91dCBoYXJkd2FyZSBzdXBwb3J0LgorICoKKyAqIEluY29taW5nIHBhY2tldHMgYXJlIHRpbWUgc3RhbXBlZCB3aXRoIFNPX1RJTUVTVEFNUElORyB3aXRoIG9yCisgKiB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQsIFNJT0NHU1RBTVBbTlNdIChwZXItc29ja2V0IHRpbWUgc3RhbXApIGFuZAorICogU09fVElNRVNUQU1QW05TXS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorCisjaW5jbHVkZSAiYXNtL3R5cGVzLmgiCisjaW5jbHVkZSAibGludXgvbmV0X3RzdGFtcC5oIgorI2luY2x1ZGUgImxpbnV4L2VycnF1ZXVlLmgiCisKKyNpZm5kZWYgU09fVElNRVNUQU1QSU5HCisjIGRlZmluZSBTT19USU1FU1RBTVBJTkcgICAgICAgICAzNworIyBkZWZpbmUgU0NNX1RJTUVTVEFNUElORyAgICAgICAgU09fVElNRVNUQU1QSU5HCisjZW5kaWYKKworI2lmbmRlZiBTT19USU1FU1RBTVBOUworIyBkZWZpbmUgU09fVElNRVNUQU1QTlMgMzUKKyNlbmRpZgorCisjaWZuZGVmIFNJT0NHU1RBTVBOUworIyBkZWZpbmUgU0lPQ0dTVEFNUE5TIDB4ODkwNworI2VuZGlmCisKKyNpZm5kZWYgU0lPQ1NIV1RTVEFNUAorIyBkZWZpbmUgU0lPQ1NIV1RTVEFNUCAweDg5YjAKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICplcnJvcikKK3sKKwlpZiAoZXJyb3IpCisJCXByaW50ZigiaW52YWxpZCBvcHRpb246ICVzXG4iLCBlcnJvcik7CisJcHJpbnRmKCJ0aW1lc3RhbXBpbmcgaW50ZXJmYWNlIG9wdGlvbipcblxuIgorCSAgICAgICAiT3B0aW9uczpcbiIKKwkgICAgICAgIiAgSVBfTVVMVElDQVNUX0xPT1AgLSBsb29waW5nIG91dGdvaW5nIG11bHRpY2FzdHNcbiIKKwkgICAgICAgIiAgU09fVElNRVNUQU1QIC0gbm9ybWFsIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcsIG1zIHJlc29sdXRpb25cbiIKKwkgICAgICAgIiAgU09fVElNRVNUQU1QTlMgLSBtb3JlIGFjY3VyYXRlIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmdcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSAtIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgb2Ygb3V0Z29pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIC0gc29mdHdhcmUgZmFsbGJhY2sgZm9yIG91dGdvaW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSAtIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgb2YgaW5jb21pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFIC0gc29mdHdhcmUgZmFsbGJhY2sgZm9yIGluY29taW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSAtIHJlcXVlc3QgcmVwb3J0aW5nIG9mIHNvZnR3YXJlIHRpbWUgc3RhbXBzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIC0gcmVxdWVzdCByZXBvcnRpbmcgb2YgdHJhbnNmb3JtZWQgSFcgdGltZSBzdGFtcHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgLSByZXF1ZXN0IHJlcG9ydGluZyBvZiByYXcgSFcgdGltZSBzdGFtcHNcbiIKKwkgICAgICAgIiAgU0lPQ0dTVEFNUCAtIGNoZWNrIGxhc3Qgc29ja2V0IHRpbWUgc3RhbXBcbiIKKwkgICAgICAgIiAgU0lPQ0dTVEFNUE5TIC0gbW9yZSBhY2N1cmF0ZSBzb2NrZXQgdGltZSBzdGFtcFxuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgYmFpbChjb25zdCBjaGFyICplcnJvcikKK3sKKwlwcmludGYoIiVzOiAlc1xuIiwgZXJyb3IsIHN0cmVycm9yKGVycm5vKSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3luY1tdID0geworCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsCisJMHg1ZiwgMHg0NCwgMHg0NiwgMHg0YywKKwkweDU0LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAxLAorCisJLyogZmFrZSB1dWlkICovCisJMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDA0LCAweDA1LAorCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0OSwgMHgwNSwgMHhjZCwgMHgwMSwKKwkweDI5LCAweGIxLCAweDhkLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwKKworCS8qIGZha2UgdXVpZCAqLworCTB4MDAsIDB4MDEsCisJMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ0LCAweDQ2LCAweDRjLCAweDU0LAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4NjAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4NjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LAorCTB4NDQsIDB4NDYsIDB4NGMsIDB4NTQsCisJMHgwMCwgMHgwMSwKKworCS8qIGZha2UgdXVpZCAqLworCTB4MDAsIDB4MDEsCisJMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyB2b2lkIHNlbmRwYWNrZXQoaW50IHNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJfbGVuKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgcmVzOworCisJcmVzID0gc2VuZHRvKHNvY2ssIHN5bmMsIHNpemVvZihzeW5jKSwgMCwKKwkJYWRkciwgYWRkcl9sZW4pOworCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKwlpZiAocmVzIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJzZW5kIiwgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCXByaW50ZigiJWxkLiUwNmxkOiBzZW50ICVkIGJ5dGVzXG4iLAorCQkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJCSAgICAgICByZXMpOworfQorCitzdGF0aWMgdm9pZCBwcmludHBhY2tldChzdHJ1Y3QgbXNnaGRyICptc2csIGludCByZXMsCisJCQljaGFyICpkYXRhLAorCQkJaW50IHNvY2ssIGludCByZWN2bXNnX2ZsYWdzLAorCQkJaW50IHNpb2Nnc3RhbXAsIGludCBzaW9jZ3N0YW1wbnMpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpmcm9tX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJZ2V0dGltZW9mZGF5KCZub3csIDApOworCisJcHJpbnRmKCIlbGQuJTA2bGQ6IHJlY2VpdmVkICVzIGRhdGEsICVkIGJ5dGVzIGZyb20gJXMsICVkIGJ5dGVzIGNvbnRyb2wgbWVzc2FnZXNcbiIsCisJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCSAgICAgICAocmVjdm1zZ19mbGFncyAmIE1TR19FUlJRVUVVRSkgPyAiZXJyb3IiIDogInJlZ3VsYXIiLAorCSAgICAgICByZXMsCisJICAgICAgIGluZXRfbnRvYShmcm9tX2FkZHItPnNpbl9hZGRyKSwKKwkgICAgICAgbXNnLT5tc2dfY29udHJvbGxlbik7CisJZm9yIChjbXNnID0gQ01TR19GSVJTVEhEUihtc2cpOworCSAgICAgY21zZzsKKwkgICAgIGNtc2cgPSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7CisJCXByaW50ZigiICAgY21zZyBsZW4gJWQ6ICIsIGNtc2ctPmNtc2dfbGVuKTsKKwkJc3dpdGNoIChjbXNnLT5jbXNnX2xldmVsKSB7CisJCWNhc2UgU09MX1NPQ0tFVDoKKwkJCXByaW50ZigiU09MX1NPQ0tFVCAiKTsKKwkJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCQljYXNlIFNPX1RJTUVTVEFNUDogeworCQkJCXN0cnVjdCB0aW1ldmFsICpzdGFtcCA9CisJCQkJCShzdHJ1Y3QgdGltZXZhbCAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIlNPX1RJTUVTVEFNUCAlbGQuJTA2bGQiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfdXNlYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIFNPX1RJTUVTVEFNUE5TOiB7CisJCQkJc3RydWN0IHRpbWVzcGVjICpzdGFtcCA9CisJCQkJCShzdHJ1Y3QgdGltZXNwZWMgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJTT19USU1FU1RBTVBOUyAlbGQuJTA5bGQiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIFNPX1RJTUVTVEFNUElORzogeworCQkJCXN0cnVjdCB0aW1lc3BlYyAqc3RhbXAgPQorCQkJCQkoc3RydWN0IHRpbWVzcGVjICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiU09fVElNRVNUQU1QSU5HICIpOworCQkJCXByaW50ZigiU1cgJWxkLiUwOWxkICIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlzdGFtcCsrOworCQkJCXByaW50ZigiSFcgdHJhbnNmb3JtZWQgJWxkLiUwOWxkICIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlzdGFtcCsrOworCQkJCXByaW50ZigiSFcgcmF3ICVsZC4lMDlsZCIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCJ0eXBlICVkIiwgY21zZy0+Y21zZ190eXBlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIElQUFJPVE9fSVA6CisJCQlwcmludGYoIklQUFJPVE9fSVAgIik7CisJCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCQkJY2FzZSBJUF9SRUNWRVJSOiB7CisJCQkJc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIgPQorCQkJCQkoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiSVBfUkVDVkVSUiBlZV9lcnJubyAnJXMnIGVlX29yaWdpbiAlZCA9PiAlcyIsCisJCQkJCXN0cmVycm9yKGVyci0+ZWVfZXJybm8pLAorCQkJCQllcnItPmVlX29yaWdpbiwKKyNpZmRlZiBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HCisJCQkJCWVyci0+ZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgPworCQkJCQkiYm91bmNlZCBwYWNrZXQiIDogInVuZXhwZWN0ZWQgb3JpZ2luIgorI2Vsc2UKKwkJCQkJInByb2JhYmx5IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkciCisjZW5kaWYKKwkJCQkJKTsKKwkJCQlpZiAocmVzIDwgc2l6ZW9mKHN5bmMpKQorCQkJCQlwcmludGYoIiA9PiB0cnVuY2F0ZWQgZGF0YT8hIik7CisJCQkJZWxzZSBpZiAoIW1lbWNtcChzeW5jLCBkYXRhICsgcmVzIC0gc2l6ZW9mKHN5bmMpLAorCQkJCQkJCXNpemVvZihzeW5jKSkpCisJCQkJCXByaW50ZigiID0+IEdPVCBPVVIgREFUQSBCQUNLIChIVVJSQVkhKSIpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBJUF9QS1RJTkZPOiB7CisJCQkJc3RydWN0IGluX3BrdGluZm8gKnBrdGluZm8gPQorCQkJCQkoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJJUF9QS1RJTkZPIGludGVyZmFjZSBpbmRleCAldSIsCisJCQkJCXBrdGluZm8tPmlwaV9pZmluZGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCJ0eXBlICVkIiwgY21zZy0+Y21zZ190eXBlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJsZXZlbCAlZCB0eXBlICVkIiwKKwkJCQljbXNnLT5jbXNnX2xldmVsLAorCQkJCWNtc2ctPmNtc2dfdHlwZSk7CisJCQlicmVhazsKKwkJfQorCQlwcmludGYoIlxuIik7CisJfQorCisJaWYgKHNpb2Nnc3RhbXApIHsKKwkJaWYgKGlvY3RsKHNvY2ssIFNJT0NHU1RBTVAsICZ0dikpCisJCQlwcmludGYoIiAgICVzOiAlc1xuIiwgIlNJT0NHU1RBTVAiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwcmludGYoIlNJT0NHU1RBTVAgJWxkLiUwNmxkXG4iLAorCQkJICAgICAgIChsb25nKXR2LnR2X3NlYywKKwkJCSAgICAgICAobG9uZyl0di50dl91c2VjKTsKKwl9CisJaWYgKHNpb2Nnc3RhbXBucykgeworCQlpZiAoaW9jdGwoc29jaywgU0lPQ0dTVEFNUE5TLCAmdHMpKQorCQkJcHJpbnRmKCIgICAlczogJXNcbiIsICJTSU9DR1NUQU1QTlMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwcmludGYoIlNJT0NHU1RBTVBOUyAlbGQuJTA5bGRcbiIsCisJCQkgICAgICAgKGxvbmcpdHMudHZfc2VjLAorCQkJICAgICAgIChsb25nKXRzLnR2X25zZWMpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVjdnBhY2tldChpbnQgc29jaywgaW50IHJlY3Ztc2dfZmxhZ3MsCisJCSAgICAgICBpbnQgc2lvY2dzdGFtcCwgaW50IHNpb2Nnc3RhbXBucykKK3sKKwljaGFyIGRhdGFbMjU2XTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3QgaW92ZWMgZW50cnk7CisJc3RydWN0IHNvY2thZGRyX2luIGZyb21fYWRkcjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgY21zZ2hkciBjbTsKKwkJY2hhciBjb250cm9sWzUxMl07CisJfSBjb250cm9sOworCWludCByZXM7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5tc2dfaW92ID0gJmVudHJ5OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwllbnRyeS5pb3ZfYmFzZSA9IGRhdGE7CisJZW50cnkuaW92X2xlbiA9IHNpemVvZihkYXRhKTsKKwltc2cubXNnX25hbWUgPSAoY2FkZHJfdCkmZnJvbV9hZGRyOworCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihmcm9tX2FkZHIpOworCW1zZy5tc2dfY29udHJvbCA9ICZjb250cm9sOworCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKKworCXJlcyA9IHJlY3Ztc2coc29jaywgJm1zZywgcmVjdm1zZ19mbGFnc3xNU0dfRE9OVFdBSVQpOworCWlmIChyZXMgPCAwKSB7CisJCXByaW50ZigiJXMgJXM6ICVzXG4iLAorCQkgICAgICAgInJlY3Ztc2ciLAorCQkgICAgICAgKHJlY3Ztc2dfZmxhZ3MgJiBNU0dfRVJSUVVFVUUpID8gImVycm9yIiA6ICJyZWd1bGFyIiwKKwkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRwYWNrZXQoJm1zZywgcmVzLCBkYXRhLAorCQkJICAgIHNvY2ssIHJlY3Ztc2dfZmxhZ3MsCisJCQkgICAgc2lvY2dzdGFtcCwgc2lvY2dzdGFtcG5zKTsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgc29fdGltZXN0YW1waW5nX2ZsYWdzID0gMDsKKwlpbnQgc29fdGltZXN0YW1wID0gMDsKKwlpbnQgc29fdGltZXN0YW1wbnMgPSAwOworCWludCBzaW9jZ3N0YW1wID0gMDsKKwlpbnQgc2lvY2dzdGFtcG5zID0gMDsKKwlpbnQgaXBfbXVsdGljYXN0X2xvb3AgPSAwOworCWNoYXIgKmludGVyZmFjZTsKKwlpbnQgaTsKKwlpbnQgZW5hYmxlZCA9IDE7CisJaW50IHNvY2s7CisJc3RydWN0IGlmcmVxIGRldmljZTsKKwlzdHJ1Y3QgaWZyZXEgaHd0c3RhbXA7CisJc3RydWN0IGh3dHN0YW1wX2NvbmZpZyBod2NvbmZpZywgaHdjb25maWdfcmVxdWVzdGVkOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXN0cnVjdCBpcF9tcmVxIGltcjsKKwlzdHJ1Y3QgaW5fYWRkciBpYWRkcjsKKwlpbnQgdmFsOworCXNvY2tsZW5fdCBsZW47CisJc3RydWN0IHRpbWV2YWwgbmV4dDsKKworCWlmIChhcmdjIDwgMikKKwkJdXNhZ2UoMCk7CisJaW50ZXJmYWNlID0gYXJndlsxXTsKKworCWZvciAoaSA9IDI7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT19USU1FU1RBTVAiKSkKKwkJCXNvX3RpbWVzdGFtcCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT19USU1FU1RBTVBOUyIpKQorCQkJc29fdGltZXN0YW1wbnMgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU0lPQ0dTVEFNUCIpKQorCQkJc2lvY2dzdGFtcCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTSU9DR1NUQU1QTlMiKSkKKwkJCXNpb2Nnc3RhbXBucyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJJUF9NVUxUSUNBU1RfTE9PUCIpKQorCQkJaXBfbXVsdGljYXN0X2xvb3AgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOworCQllbHNlCisJCQl1c2FnZShhcmd2W2ldKTsKKwl9CisKKwlzb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKKwlpZiAoc29ja2V0IDwgMCkKKwkJYmFpbCgic29ja2V0Iik7CisKKwltZW1zZXQoJmRldmljZSwgMCwgc2l6ZW9mKGRldmljZSkpOworCXN0cm5jcHkoZGV2aWNlLmlmcl9uYW1lLCBpbnRlcmZhY2UsIHNpemVvZihkZXZpY2UuaWZyX25hbWUpKTsKKwlpZiAoaW9jdGwoc29jaywgU0lPQ0dJRkFERFIsICZkZXZpY2UpIDwgMCkKKwkJYmFpbCgiZ2V0dGluZyBpbnRlcmZhY2UgSVAgYWRkcmVzcyIpOworCisJbWVtc2V0KCZod3RzdGFtcCwgMCwgc2l6ZW9mKGh3dHN0YW1wKSk7CisJc3RybmNweShod3RzdGFtcC5pZnJfbmFtZSwgaW50ZXJmYWNlLCBzaXplb2YoaHd0c3RhbXAuaWZyX25hbWUpKTsKKwlod3RzdGFtcC5pZnJfZGF0YSA9ICh2b2lkICopJmh3Y29uZmlnOworCW1lbXNldCgmaHdjb25maWcsIDAsIHNpemVvZigmaHdjb25maWcpKTsKKwlod2NvbmZpZy50eF90eXBlID0KKwkJKHNvX3RpbWVzdGFtcGluZ19mbGFncyAmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpID8KKwkJSFdUU1RBTVBfVFhfT04gOiBIV1RTVEFNUF9UWF9PRkY7CisJaHdjb25maWcucnhfZmlsdGVyID0KKwkJKHNvX3RpbWVzdGFtcGluZ19mbGFncyAmIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUpID8KKwkJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DIDogSFdUU1RBTVBfRklMVEVSX05PTkU7CisJaHdjb25maWdfcmVxdWVzdGVkID0gaHdjb25maWc7CisJaWYgKGlvY3RsKHNvY2ssIFNJT0NTSFdUU1RBTVAsICZod3RzdGFtcCkgPCAwKSB7CisJCWlmICgoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1RTVVApICYmCisJCSAgICBod2NvbmZpZ19yZXF1ZXN0ZWQudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PRkYgJiYKKwkJICAgIGh3Y29uZmlnX3JlcXVlc3RlZC5yeF9maWx0ZXIgPT0gSFdUU1RBTVBfRklMVEVSX05PTkUpCisJCQlwcmludGYoIlNJT0NTSFdUU1RBTVA6IGRpc2FibGluZyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG5vdCBwb3NzaWJsZVxuIik7CisJCWVsc2UKKwkJCWJhaWwoIlNJT0NTSFdUU1RBTVAiKTsKKwl9CisJcHJpbnRmKCJTSU9DU0hXVFNUQU1QOiB0eF90eXBlICVkIHJlcXVlc3RlZCwgZ290ICVkOyByeF9maWx0ZXIgJWQgcmVxdWVzdGVkLCBnb3QgJWRcbiIsCisJICAgICAgIGh3Y29uZmlnX3JlcXVlc3RlZC50eF90eXBlLCBod2NvbmZpZy50eF90eXBlLAorCSAgICAgICBod2NvbmZpZ19yZXF1ZXN0ZWQucnhfZmlsdGVyLCBod2NvbmZpZy5yeF9maWx0ZXIpOworCisJLyogYmluZCB0byBQVFAgcG9ydCAqLworCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoMzE5IC8qIFBUUCBldmVudCBwb3J0ICovKTsKKwlpZiAoYmluZChzb2NrLAorCQkgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkKKwkJYmFpbCgiYmluZCIpOworCisJLyogc2V0IG11bHRpY2FzdCBncm91cCBmb3Igb3V0Z29pbmcgcGFja2V0cyAqLworCWluZXRfYXRvbigiMjI0LjAuMS4xMzAiLCAmaWFkZHIpOyAvKiBhbHRlcm5hdGUgUFRQIGRvbWFpbiAxICovCisJYWRkci5zaW5fYWRkciA9IGlhZGRyOworCWltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IGlhZGRyLnNfYWRkcjsKKwlpbXIuaW1yX2ludGVyZmFjZS5zX2FkZHIgPQorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZkZXZpY2UuaWZyX2FkZHIpLT5zaW5fYWRkci5zX2FkZHI7CisJaWYgKHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX0lGLAorCQkgICAgICAgJmltci5pbXJfaW50ZXJmYWNlLnNfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPCAwKQorCQliYWlsKCJzZXQgbXVsdGljYXN0Iik7CisKKwkvKiBqb2luIG11bHRpY2FzdCBncm91cCwgbG9vcCBvdXIgb3duIHBhY2tldCAqLworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX0FERF9NRU1CRVJTSElQLAorCQkgICAgICAgJmltciwgc2l6ZW9mKHN0cnVjdCBpcF9tcmVxKSkgPCAwKQorCQliYWlsKCJqb2luIG11bHRpY2FzdCBncm91cCIpOworCisJaWYgKHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX0xPT1AsCisJCSAgICAgICAmaXBfbXVsdGljYXN0X2xvb3AsIHNpemVvZihlbmFibGVkKSkgPCAwKSB7CisJCWJhaWwoImxvb3AgbXVsdGljYXN0Iik7CisJfQorCisJLyogc2V0IHNvY2tldCBvcHRpb25zIGZvciB0aW1lIHN0YW1waW5nICovCisJaWYgKHNvX3RpbWVzdGFtcCAmJgorCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUCwKKwkJCSAgICZlbmFibGVkLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkKKwkJYmFpbCgic2V0c29ja29wdCBTT19USU1FU1RBTVAiKTsKKworCWlmIChzb190aW1lc3RhbXBucyAmJgorCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUE5TLAorCQkJICAgJmVuYWJsZWQsIHNpemVvZihlbmFibGVkKSkgPCAwKQorCQliYWlsKCJzZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUE5TIik7CisKKwlpZiAoc29fdGltZXN0YW1waW5nX2ZsYWdzICYmCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLAorCQkJICAgJnNvX3RpbWVzdGFtcGluZ19mbGFncywKKwkJCSAgIHNpemVvZihzb190aW1lc3RhbXBpbmdfZmxhZ3MpKSA8IDApCisJCWJhaWwoInNldHNvY2tvcHQgU09fVElNRVNUQU1QSU5HIik7CisKKwkvKiByZXF1ZXN0IElQX1BLVElORk8gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIFNPTF9JUCwgSVBfUEtUSU5GTywKKwkJICAgICAgICZlbmFibGVkLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJzZXRzb2Nrb3B0IElQX1BLVElORk8iLCBzdHJlcnJvcihlcnJubykpOworCisJLyogdmVyaWZ5IHNvY2tldCBvcHRpb25zICovCisJbGVuID0gc2l6ZW9mKHZhbCk7CisJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QLCAmdmFsLCAmbGVuKSA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAiZ2V0c29ja29wdCBTT19USU1FU1RBTVAiLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpbnRmKCJTT19USU1FU1RBTVAgJWRcbiIsIHZhbCk7CisKKwlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBOUywgJnZhbCwgJmxlbikgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgImdldHNvY2tvcHQgU09fVElNRVNUQU1QTlMiLAorCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCXByaW50ZigiU09fVElNRVNUQU1QTlMgJWRcbiIsIHZhbCk7CisKKwlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsICZ2YWwsICZsZW4pIDwgMCkgeworCQlwcmludGYoIiVzOiAlc1xuIiwgImdldHNvY2tvcHQgU09fVElNRVNUQU1QSU5HIiwKKwkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJTT19USU1FU1RBTVBJTkcgJWRcbiIsIHZhbCk7CisJCWlmICh2YWwgIT0gc29fdGltZXN0YW1waW5nX2ZsYWdzKQorCQkJcHJpbnRmKCIgICBub3QgdGhlIGV4cGVjdGVkIHZhbHVlICVkXG4iLAorCQkJICAgICAgIHNvX3RpbWVzdGFtcGluZ19mbGFncyk7CisJfQorCisJLyogc2VuZCBwYWNrZXRzIGZvcmV2ZXIgZXZlcnkgZml2ZSBzZWNvbmRzICovCisJZ2V0dGltZW9mZGF5KCZuZXh0LCAwKTsKKwluZXh0LnR2X3NlYyA9IChuZXh0LnR2X3NlYyArIDEpIC8gNSAqIDU7CisJbmV4dC50dl91c2VjID0gMDsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisJCXN0cnVjdCB0aW1ldmFsIGRlbHRhOworCQlsb25nIGRlbHRhX3VzOworCQlpbnQgcmVzOworCQlmZF9zZXQgcmVhZGZzLCBlcnJvcmZzOworCisJCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKwkJZGVsdGFfdXMgPSAobG9uZykobmV4dC50dl9zZWMgLSBub3cudHZfc2VjKSAqIDEwMDAwMDAgKworCQkJKGxvbmcpKG5leHQudHZfdXNlYyAtIG5vdy50dl91c2VjKTsKKwkJaWYgKGRlbHRhX3VzID4gMCkgeworCQkJLyogY29udGludWUgd2FpdGluZyBmb3IgdGltZW91dCBvciBkYXRhICovCisJCQlkZWx0YS50dl9zZWMgPSBkZWx0YV91cyAvIDEwMDAwMDA7CisJCQlkZWx0YS50dl91c2VjID0gZGVsdGFfdXMgJSAxMDAwMDAwOworCisJCQlGRF9aRVJPKCZyZWFkZnMpOworCQkJRkRfWkVSTygmZXJyb3Jmcyk7CisJCQlGRF9TRVQoc29jaywgJnJlYWRmcyk7CisJCQlGRF9TRVQoc29jaywgJmVycm9yZnMpOworCQkJcHJpbnRmKCIlbGQuJTA2bGQ6IHNlbGVjdCAlbGR1c1xuIiwKKwkJCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkJCSAgICAgICBkZWx0YV91cyk7CisJCQlyZXMgPSBzZWxlY3Qoc29jayArIDEsICZyZWFkZnMsIDAsICZlcnJvcmZzLCAmZGVsdGEpOworCQkJZ2V0dGltZW9mZGF5KCZub3csIDApOworCQkJcHJpbnRmKCIlbGQuJTA2bGQ6IHNlbGVjdCByZXR1cm5lZDogJWQsICVzXG4iLAorCQkJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCQkJICAgICAgIHJlcywKKwkJCSAgICAgICByZXMgPCAwID8gc3RyZXJyb3IoZXJybm8pIDogInN1Y2Nlc3MiKTsKKwkJCWlmIChyZXMgPiAwKSB7CisJCQkJaWYgKEZEX0lTU0VUKHNvY2ssICZyZWFkZnMpKQorCQkJCQlwcmludGYoInJlYWR5IGZvciByZWFkaW5nXG4iKTsKKwkJCQlpZiAoRkRfSVNTRVQoc29jaywgJmVycm9yZnMpKQorCQkJCQlwcmludGYoImhhcyBlcnJvclxuIik7CisJCQkJcmVjdnBhY2tldChzb2NrLCAwLAorCQkJCQkgICBzaW9jZ3N0YW1wLAorCQkJCQkgICBzaW9jZ3N0YW1wbnMpOworCQkJCXJlY3ZwYWNrZXQoc29jaywgTVNHX0VSUlFVRVVFLAorCQkJCQkgICBzaW9jZ3N0YW1wLAorCQkJCQkgICBzaW9jZ3N0YW1wbnMpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogd3JpdGUgb25lIHBhY2tldCAqLworCQkJc2VuZHBhY2tldChzb2NrLAorCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKKwkJCQkgICBzaXplb2YoYWRkcikpOworCQkJbmV4dC50dl9zZWMgKz0gNTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CmluZGV4IDdmYTRiMjcuLmVkYjdhZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CkBAIC01Niw2ICs1NiwxMiBAQAogICAgIGhhcmR3YXJlLgogICAtIGZzbCxtYWdpYy1wYWNrZXQgOiBJZiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMKICAgICB3YWtpbmcgdXAgdmlhIG1hZ2ljIHBhY2tldC4KKyAgLSBiZC1zdGFzaCA6IElmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBzdGFzaGluZworICAgIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiB0aGUgTDIuCisgIC0gcngtc3Rhc2gtbGVuIDogRGVub3RlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGEgcmVjZWl2ZWQgYnVmZmVyIHRvIHN0YXNoCisgICAgaW4gdGhlIEwyLgorICAtIHJ4LXN0YXNoLWlkeCA6IERlbm90ZXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIGZyb20gdGhlIHJlY2VpdmVkCisgICAgYnVmZmVyIHRvIHN0YXNoIGluIHRoZSBMMi4KIAogRXhhbXBsZToKIAlldGhlcm5ldEAyNDAwMCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCmluZGV4IGFhYmNjM2EuLjNjMDBjOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCkBAIC0yLDggKzIsNiBAQAogCS0gdGhpcyBmaWxlLgogc2NoZWQtYXJjaC50eHQKIAktIENQVSBTY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gaGludHMgZm9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlLgotc2NoZWQtY29kaW5nLnR4dAotCS0gcmVmZXJlbmNlIGZvciB2YXJpb3VzIHNjaGVkdWxlci1yZWxhdGVkIG1ldGhvZHMgaW4gdGhlIE8oMSkgc2NoZWR1bGVyLgogc2NoZWQtZGVzaWduLUNGUy50eHQKIAktIGdvYWxzLCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDb21wbGV0ZSBGYWlyIFNjaGVkdWxlci4KIHNjaGVkLWRvbWFpbnMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkOGRiNy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSAgICAgUmVmZXJlbmNlIGZvciB2YXJpb3VzIHNjaGVkdWxlci1yZWxhdGVkIG1ldGhvZHMgaW4gdGhlIE8oMSkgc2NoZWR1bGVyCi0JCVJvYmVydCBMb3ZlIDxybWxAdGVjaDkubmV0PiwgTW9udGFWaXN0YSBTb2Z0d2FyZQotCi0KLU5vdGUgbW9zdCBvZiB0aGVzZSBtZXRob2RzIGFyZSBsb2NhbCB0byBrZXJuZWwvc2NoZWQuYyAtIHRoaXMgaXMgYnkgZGVzaWduLgotVGhlIHNjaGVkdWxlciBpcyBtZWFudCB0byBiZSBzZWxmLWNvbnRhaW5lZCBhbmQgYWJzdHJhY3RlZCBhd2F5LiAgVGhpcyBkb2N1bWVudAotaXMgcHJpbWFyaWx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY2hlZHVsZXIsIG5vdCBpbnRlcmZhY2luZyB0byBpdC4gIFNvbWUgb2YKLXRoZSBkaXNjdXNzZWQgaW50ZXJmYWNlcywgaG93ZXZlciwgYXJlIGdlbmVyYWwgcHJvY2Vzcy9zY2hlZHVsaW5nIG1ldGhvZHMuCi1UaGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmguCi0KLQotTWFpbiBTY2hlZHVsaW5nIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgbG9hZF9iYWxhbmNlKHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIGludCBpZGxlKQotCUF0dGVtcHRzIHRvIHB1bGwgdGFza3MgZnJvbSBvbmUgY3B1IHRvIGFub3RoZXIgdG8gYmFsYW5jZSBjcHUgdXNhZ2UsCi0JaWYgbmVlZGVkLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV4cGxpY2l0bHkgaWYgdGhlIHJ1bnF1ZXVlcyBhcmUKLQlpbWJhbGFuY2VkIG9yIHBlcmlvZGljYWxseSBieSB0aGUgdGltZXIgdGljay4gIFByaW9yIHRvIGNhbGxpbmcsCi0JdGhlIGN1cnJlbnQgcnVucXVldWUgbXVzdCBiZSBsb2NrZWQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCi0KLXZvaWQgc2NoZWR1bGUoKQotCVRoZSBtYWluIHNjaGVkdWxpbmcgZnVuY3Rpb24uICBVcG9uIHJldHVybiwgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKLQlwcm9jZXNzIHdpbGwgYmUgYWN0aXZlLgotCi0KLUxvY2tpbmcKLS0tLS0tLS0KLQotRWFjaCBydW5xdWV1ZSBoYXMgaXRzIG93biBsb2NrLCBycS0+bG9jay4gIFdoZW4gbXVsdGlwbGUgcnVucXVldWVzIG5lZWQKLXRvIGJlIGxvY2tlZCwgbG9jayBhY3F1aXJlcyBtdXN0IGJlIG9yZGVyZWQgYnkgYXNjZW5kaW5nICZydW5xdWV1ZSB2YWx1ZS4KLQotQSBzcGVjaWZpYyBydW5xdWV1ZSBpcyBsb2NrZWQgdmlhCi0KLQl0YXNrX3JxX2xvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi0KLXdoaWNoIGRpc2FibGVzIHByZWVtcHRpb24sIGRpc2FibGVzIGludGVycnVwdHMsIGFuZCBsb2NrcyB0aGUgcnVucXVldWUgcGlkIGlzCi1ydW5uaW5nIG9uLiAgTGlrZXdpc2UsCi0KLQl0YXNrX3JxX3VubG9jayh0YXNrX3QgcGlkLCB1bnNpZ25lZCBsb25nICpmbGFncykKLQotdW5sb2NrcyB0aGUgcnVucXVldWUgcGlkIGlzIHJ1bm5pbmcgb24sIHJlc3RvcmVzIGludGVycnVwdHMgdG8gdGhlaXIgcHJldmlvdXMKLXN0YXRlLCBhbmQgcmVlbmFibGVzIHByZWVtcHRpb24uCi0KLVRoZSByb3V0aW5lcwotCi0JZG91YmxlX3JxX2xvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCi0KLWFuZAotCi0JZG91YmxlX3JxX3VubG9jayhydW5xdWV1ZV90ICpycTEsIHJ1bnF1ZXVlX3QgKnJxMikKLQotc2FmZWx5IGxvY2sgYW5kIHVubG9jaywgcmVzcGVjdGl2ZWx5LCB0aGUgdHdvIHNwZWNpZmllZCBydW5xdWV1ZXMuICBUaGV5IGRvCi1ub3QsIGhvd2V2ZXIsIGRpc2FibGUgYW5kIHJlc3RvcmUgaW50ZXJydXB0cy4gIFVzZXJzIGFyZSByZXF1aXJlZCB0byBkbyBzbwotbWFudWFsbHkgYmVmb3JlIGFuZCBhZnRlciBjYWxscy4KLQotCi1WYWx1ZXMKLS0tLS0tLQotCi1NQVhfUFJJTwotCVRoZSBtYXhpbXVtIHByaW9yaXR5IG9mIHRoZSBzeXN0ZW0sIHN0b3JlZCBpbiB0aGUgdGFzayBhcyB0YXNrLT5wcmlvLgotCUxvd2VyIHByaW9yaXRpZXMgYXJlIGhpZ2hlci4gIE5vcm1hbCAobm9uLVJUKSBwcmlvcml0aWVzIHJhbmdlIGZyb20KLQlNQVhfUlRfUFJJTyB0byAoTUFYX1BSSU8gLSAxKS4KLU1BWF9SVF9QUklPCi0JVGhlIG1heGltdW0gcmVhbC10aW1lIHByaW9yaXR5IG9mIHRoZSBzeXN0ZW0uICBWYWxpZCBSVCBwcmlvcml0aWVzCi0JcmFuZ2UgZnJvbSAwIHRvIChNQVhfUlRfUFJJTyAtIDEpLgotTUFYX1VTRVJfUlRfUFJJTwotCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSB0aGF0IGlzIGV4cG9ydGVkIHRvIHVzZXItc3BhY2UuICBTaG91bGQKLQlhbHdheXMgYmUgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIE1BWF9SVF9QUklPLiAgU2V0dGluZyBpdCBsZXNzIGFsbG93cwotCWtlcm5lbCB0aHJlYWRzIHRvIGhhdmUgaGlnaGVyIHByaW9yaXRpZXMgdGhhbiBhbnkgdXNlci1zcGFjZSB0YXNrLgotTUlOX1RJTUVTTElDRQotTUFYX1RJTUVTTElDRQotCVJlc3BlY3RpdmVseSwgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdGltZXNsaWNlcyAocXVhbnRhKSBvZiBhIHByb2Nlc3MuCi0KLURhdGEKLS0tLS0KLQotc3RydWN0IHJ1bnF1ZXVlCi0JVGhlIG1haW4gcGVyLUNQVSBydW5xdWV1ZSBkYXRhIHN0cnVjdHVyZS4KLXN0cnVjdCB0YXNrX3N0cnVjdAotCVRoZSBtYWluIHBlci1wcm9jZXNzIGRhdGEgc3RydWN0dXJlLgotCi0KLUdlbmVyYWwgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tCi0KLWNwdV9ycShjcHUpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIHNwZWNpZmllZCBjcHUuCi10aGlzX3JxKCkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSBvZiB0aGUgY3VycmVudCBjcHUuCi10YXNrX3JxKHBpZCkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSB3aGljaCBob2xkcyB0aGUgc3BlY2lmaWVkIHBpZC4KLWNwdV9jdXJyKGNwdSkKLQlSZXR1cm5zIHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBnaXZlbiBjcHUuCi1ydF90YXNrKHBpZCkKLQlSZXR1cm5zIHRydWUgaWYgcGlkIGlzIHJlYWwtdGltZSwgZmFsc2UgaWYgbm90LgotCi0KLVByb2Nlc3MgQ29udHJvbCBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIHNldF91c2VyX25pY2UodGFza190ICpwLCBsb25nIG5pY2UpCi0JU2V0cyB0aGUgIm5pY2UiIHZhbHVlIG9mIHRhc2sgcCB0byB0aGUgZ2l2ZW4gdmFsdWUuCi1pbnQgc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKLQlTZXRzIHRoZSBzY2hlZHVsaW5nIHBvbGljeSBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGdpdmVuIHBpZC4KLWludCBzZXRfY3B1c19hbGxvd2VkKHRhc2tfdCAqcCwgdW5zaWduZWQgbG9uZyBuZXdfbWFzaykKLQlTZXRzIGEgZ2l2ZW4gdGFzaydzIENQVSBhZmZpbml0eSBhbmQgbWlncmF0ZXMgaXQgdG8gYSBwcm9wZXIgY3B1LgotCUNhbGxlcnMgbXVzdCBoYXZlIGEgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIGFuZCBhc3N1cmUgdGhlCi0JdGFzayBub3QgZXhpdCBwcmVtYXR1cmVseS4gIE5vIGxvY2tzIGNhbiBiZSBoZWxkIGR1cmluZyB0aGUgY2FsbC4KLXNldF90YXNrX3N0YXRlKHRzaywgc3RhdGVfdmFsdWUpCi0JU2V0cyB0aGUgZ2l2ZW4gdGFzaydzIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLXNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQotCVNldHMgdGhlIGN1cnJlbnQgdGFzaydzIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLXZvaWQgc2V0X3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi0JU2V0cyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCi12b2lkIGNsZWFyX3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi0JQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgZ2l2ZW4gdGFzay4KLXZvaWQgc2V0X25lZWRfcmVzY2hlZCgpCi0JU2V0cyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGN1cnJlbnQgdGFzay4KLXZvaWQgY2xlYXJfbmVlZF9yZXNjaGVkKCkKLQlDbGVhcnMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCi1pbnQgbmVlZF9yZXNjaGVkKCkKLQlSZXR1cm5zIHRydWUgaWYgbmVlZF9yZXNjaGVkIGlzIHNldCBpbiB0aGUgY3VycmVudCB0YXNrLCBmYWxzZQotCW90aGVyd2lzZS4KLXlpZWxkKCkKLQlQbGFjZSB0aGUgY3VycmVudCBwcm9jZXNzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnF1ZXVlIGFuZCBjYWxsIHNjaGVkdWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCA4NDFhOTM2Li4wMTI4NThkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMzQ2LDYgKzM0Niw5IEBACiAgICAgc2JpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQogICAgIHNiZG1hOAktIDhiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTE2CS0gMTZiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBmbXBvcnQJLSAob3B0aW9uYWwpIE9QTDMgSS9PIHBvcnQKKyAgICBtcHVwb3J0CS0gKG9wdGlvbmFsKSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVpcnEJLSAob3B0aW9uYWwpIE1QVTQwMSBpcnEgIwogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgYW5kIGF1dG9wcm9iZS4KIApAQCAtMzg4LDM0ICszOTEsMTEgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KICAgICAKLSAgTW9kdWxlIHNuZC1jczQyMzIKLSAgLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEgSVNBIGNoaXBzLgotCi0gICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKLQotICAgIHdpdGggaXNhcG5wPTAsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgotCi0gICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQotICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKLSAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQotICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQotICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMyIGNoaXAgKDUsNyw5LDExLDEyLDE1KQotICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQotICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMyIGNoaXAgKDAsMSwzKQotICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBDUzQyMzIgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKLSAgICAKLSAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4gVGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJvYmUKLSAgICAoaWYgSVNBIFBuUCBpcyBub3QgdXNlZCkgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlCi0gICAgb3B0aW9uYWwuCi0KLSAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCi0gICAgCiAgIE1vZHVsZSBzbmQtY3M0MjM2CiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEsCisgICAgCSAgICAgICAJICAgICAJICAgCSAgIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUzQyMzhCL0NTNDIzOSBJU0EgY2hpcHMuCiAKICAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQpAQCAtNDM3LDYgKzQxNyw5IEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgICBUaGlzIG1vZHVsZSBpcyBhbGlhc2VkIGFzIHNuZC1jczQyMzIgc2luY2UgaXQgcHJvdmlkZXMgdGhlIG9sZAorICAgIHNuZC1jczQyMzIgZnVuY3Rpb25hbGl0eSwgdG9vLgorCiAgIE1vZHVsZSBzbmQtY3M0MjgxCiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTYwNiw2ICs1ODksNyBAQAogICAgIE1vZHVsZSBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMtMTY4OCBhbmQgRVMtNjg4IHNvdW5kIGNhcmRzLgogCiAgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBPUEwzIChvcHRpb247IHNoYXJlIHRoZSBzYW1lIHBvcnQgYXMgZGVmYXVsdCkKICAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKICAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCiAgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQpAQCAtNzU3LDYgKzc0MSw5IEBACiAgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQogICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSB1c2UgTFBJQiwgMiA9IFBPU0JVRikKICAgICBwcm9iZV9tYXNrICAtIEJpdG1hc2sgdG8gcHJvYmUgY29kZWNzIChkZWZhdWx0ID0gLTEsIG1lYW5pbmcgYWxsIHNsb3RzKQorICAgIAkJICBXaGVuIHRoZSBiaXQgOCAoMHgxMDApIGlzIHNldCwgdGhlIGxvd2VyIDggYml0cyBhcmUgdXNlZAorCQkgIGFzIHRoZSAiZml4ZWQiIGNvZGVjIHNsb3RzOyBpLmUuIHRoZSBkcml2ZXIgcHJvYmVzIHRoZQorCQkgIHNsb3RzIHJlZ2FyZGxlc3Mgd2hhdCBoYXJkd2FyZSByZXBvcnRzIGJhY2sKICAgICBwcm9iZV9vbmx5CS0gT25seSBwcm9iaW5nIGFuZCBubyBjb2RlYyBpbml0aWFsaXphdGlvbiAoZGVmYXVsdD1vZmYpOwogCQkgIFVzZWZ1bCB0byBjaGVjayB0aGUgaW5pdGlhbCBjb2RlYyBzdGF0dXMgZm9yIGRlYnVnZ2luZwogICAgIGJkbF9wb3NfYWRqCS0gU3BlY2lmaWVzIHRoZSBETUEgSVJRIHRpbWluZyBkZWxheSBpbiBzYW1wbGVzLgpAQCAtMTE4NSw2ICsxMTcyLDU0IEBACiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzIGFuZCBQblAuCiAgICAgCisgIE1vZHVsZSBzbmQtbXNuZC1jbGFzc2ljCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSBvciBNb250ZXJleQorICAgIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIG1zbmQtY2xhc3NpYyBjYXJkCisgICAgaXJxCQktIElSUSAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgZGlnaXRhbAktIERpZ2l0YWwgZGF1Z2h0ZXJib2FyZCBwcmVzZW50IChkZWZhdWx0ID0gMCkKKyAgICBjZmcJCS0gQ29uZmlnIHBvcnQgKDB4MjUwLCAweDI2MCBvciAweDI3MCkgZGVmYXVsdCA9IFBuUAorICAgIHJlc2V0CS0gUmVzZXQgYWxsIGRldmljZXMKKyAgICBtcHVfaW8JLSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVfaXJxCS0gTVBVNDAxIGlycSMKKyAgICBpZGVfaW8wCS0gSURFIHBvcnQgIzAKKyAgICBpZGVfaW8xCS0gSURFIHBvcnQgIzEKKyAgICBpZGVfaXJxCS0gSURFIGlycSMKKyAgICBqb3lzdGlja19pbwktIEpveXN0aWNrIEkvTyBwb3J0CisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9tc25kaW5pdC5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCisgICAgU2VlIERvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbgorICAgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZSAKKyAgICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCisgICAgYXQKKwlodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwCisKKyAgTW9kdWxlIHNuZC1tc25kLXBpbm5hY2xlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS9GaWppIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIHBpbm5hY2xlL2ZpamkgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgcGlubmFsY2UvZmlqaSBjYXJkCisgICAgbWVtCQktIE1lbW9yeSBhZGRyZXNzICgweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLAorCQkgIDB4ZTAwMDAgb3IgMHhlODAwMCkKKyAgICB3cml0ZV9uZGVsYXkgLSBlbmFibGUgd3JpdGUgbmRlbGF5IChkZWZhdWx0ID0gMSkKKyAgICBjYWxpYnJhdGVfc2lnbmFsIC0gY2FsaWJyYXRlIHNpZ25hbCAoZGVmYXVsdCA9IDApCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgZmlsZXMgInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIgYW5kCisgICAgInR1cnRsZWJlYWNoL3BuZHNwZXJtLmJpbiIgaW4gdGhlIHByb3BlciBmaXJtd2FyZSBkaXJlY3RvcnkuCisKICAgTW9kdWxlIHNuZC1tdHBhdgogICAtLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4MjQsNyArMTg1OSw3IEBACiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsCi0gICAgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYIGFuZCBIREFWMS4zIChEZWx1eGUpLgorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgYW5kIEVzc2VuY2UgU1RYLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjYXJkcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCAwZjVkMjZiLi44ZWVjMDViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtNTYsNiArNTYsNyBAQAogICBzb255LWFzc2FtZAlTb255IEFTU0FNRAogICB0b3NoaWJhLXMwNglUb3NoaWJhIFMwNgogICB0b3NoaWJhLXJ4MQlUb3NoaWJhIFJYMQorICB0eWFuCQlUeWFuIFRodW5kZXIgbjY2NTBXIChTMjkxNS1FKQogICB1bHRyYQkJU2Ftc3VuZyBRMSBVbHRyYSBWaXN0YSBtb2RlbAogICBsZW5vdm8tMzAwMAlMZW5vdm8gMzAwMCB5NDEwCiAgIG5lYwkJTkVDIFZlcnNhIFM5MTAwCkBAIC0yNjEsNiArMjYyLDggQEAKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGhwCQlIUCBTcGFydGFuIGxhcHRvcAorICBocC1kdjY3MzYJSFAgZHY2NzM2CisgIGxlbm92by14MjAwCUxlbm92byBYMjAwIGxhcHRvcAogCiBTVEFDOTIwMAogPT09PT09PT0KQEAgLTI3OCw2ICsyODEsNyBAQAogICBnYXRld2F5LW00CUdhdGV3YXkgbGFwdG9wcyB3aXRoIEVBUEQgY29udHJvbAogICBnYXRld2F5LW00LTIJR2F0ZXdheSBsYXB0b3BzIHdpdGggRUFQRCBjb250cm9sCiAgIHBhbmFzb25pYwlQYW5hc29uaWMgQ0YtNzQKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMDUvOTI1NAogPT09PT09PT09PT09PQpAQCAtMjg1LDYgKzI4OSw4IEBACiAgIGRlbGwtbTQyCURlbGwgKHVua25vd24pCiAgIGRlbGwtbTQzCURlbGwgUHJlY2lzaW9uCiAgIGRlbGwtbTQ0CURlbGwgSW5zcGlyb24KKyAgZWFwZAkJS2VlcCBFQVBEIG9uIChlLmcuIEdhdGV3YXkgVDE2MTYpCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjIwLzkyMjEKID09PT09PT09PT09PT0KQEAgLTMwOCw2ICszMTQsNyBAQAogICBkZWxsLWQ4MglEZWxsICh1bmtub3duKQogICBkZWxsLW04MQlEZWxsICh1bmtub3duKQogICBkZWxsLW04MglEZWxsIFhQUyBNMTIxMAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIwMi85MjUwLzkyNTEKID09PT09PT09PT09PT09PT09PQpAQCAtMzE5LDYgKzMyNiw3IEBACiAgIG0zCQlTb21lIEdhdGV3YXkgTVggc2VyaWVzIGxhcHRvcHMKICAgbTUJCVNvbWUgR2F0ZXdheSBNWCBzZXJpZXMgbGFwdG9wcyAoTVA2OTU0KQogICBtNgkJU29tZSBHYXRld2F5IE5YIHNlcmllcyBsYXB0b3BzCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjI3LzkyMjgvOTIyOS85Mjd4CiA9PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzI4LDYgKzMzNiw3IEBACiAgIDVzdGFjawlEOTY1IDVzdGFjayArIFNQRElGCiAgIGRlbGwtM3N0YWNrCURlbGwgRGltZW5zaW9uIEU1MjAKICAgZGVsbC1iaW9zCUZpeGVzIHdpdGggRGVsbCBCSU9TIHNldHVwCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgogPT09PT09PT09PT09CkBAIC0zMzUsNyArMzQ0LDEwIEBACiAgIGRlbGwtbTQtMQlEZWxsIGRlc2t0b3BzCiAgIGRlbGwtbTQtMglEZWxsIGRlc2t0b3BzCiAgIGRlbGwtbTQtMwlEZWxsIGRlc2t0b3BzCi0gIGhwLW00CQlIUCBkdiBsYXB0b3BzCisgIGhwLW00CQlIUCBtaW5pIDEwMDAKKyAgaHAtZHY1CUhQIGR2IHNlcmllcworICBocC1oZHgJSFAgSERYIHNlcmllcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDczKgogPT09PT09PT09PT0KQEAgLTM0NSwxMyArMzU3LDE2IEBACiAgIGRlbGwtbTYtZG1pYwlEZWxsIGRlc2t0b3BzL2xhcHRvcHMgd2l0aCBkaWdpdGFsIG1pY3MKICAgZGVsbC1tNglEZWxsIGRlc2t0b3BzL2xhcHRvcHMgd2l0aCBib3RoIHR5cGUgb2YgbWljcwogICBkZWxsLWVxCURlbGwgZGVza3RvcHMvbGFwdG9wcworICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDgzKgogPT09PT09PT09PT0KICAgcmVmCQlSZWZlcmVuY2UgYm9hcmQKICAgbWljLXJlZglSZWZlcmVuY2UgYm9hcmQgd2l0aCBwb3dlciBtYW5hZ21lbnQgZm9yIHBvcnRzCisgIGRlbGwtczE0CURlbGwgbGFwdG9wCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5ODcyCiA9PT09PT09PQotICB2YWlvCQlTZXR1cCBmb3IgVkFJTyBGRTU1MEcvU1oxMTAKLSAgdmFpby1hciBTZXR1cCBmb3IgVkFJTyBBUgorICB2YWlvCQlWQUlPIGxhcHRvcCB3aXRob3V0IFNQRElGCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAppbmRleCA4ZDY4ZmZmLi5jNTk0OGYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKQEAgLTEwOSw2ICsxMDksMTMgQEAKIFNpbmNlIDIuNi4yOSBrZXJuZWwsIHRoZSBkcml2ZXIgaGFzIGEgbW9yZSByb2J1c3QgcHJvYmluZyBtZXRob2QsIHNvCiB0aGlzIGVycm9yIG1pZ2h0IGhhcHBlbiByYXJlbHksIHRob3VnaC4KIAorT24gYSBtYWNoaW5lIHdpdGggYSBicm9rZW4gQklPUywgc29tZXRpbWVzIHlvdSBuZWVkIHRvIGZvcmNlIHRoZQorZHJpdmVyIHRvIHByb2JlIHRoZSBjb2RlYyBzbG90cyB0aGUgaGFyZHdhcmUgZG9lc24ndCByZXBvcnQgZm9yIHVzZS4KK0luIHN1Y2ggYSBjYXNlLCB0dXJuIHRoZSBiaXQgOCAoMHgxMDApIG9mIGBwcm9iZV9tYXNrYCBvcHRpb24gb24uCitUaGVuIHRoZSByZXN0IDggYml0cyBhcmUgcGFzc2VkIGFzIHRoZSBjb2RlYyBzbG90cyB0byBwcm9iZQordW5jb25kaXRpb25hbGx5LiAgRm9yIGV4YW1wbGUsIGBwcm9iZV9tYXNrPTB4MTAzYCB3aWxsIGZvcmNlIHRvIHByb2JlCit0aGUgY29kZWMgc2xvdHMgMCBhbmQgMSBubyBtYXR0ZXIgd2hhdCB0aGUgaGFyZHdhcmUgcmVwb3J0cy4KKwogCiBJbnRlcnJ1cHQgSGFuZGxpbmcKIH5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMzU4LDEwICszNjUsMjYgQEAKICAgdG8gdGhpcyBmaWxlLgogaW5pdF92ZXJiczo6CiAgIFRoZSBleHRyYSB2ZXJicyB0byBleGVjdXRlIGF0IGluaXRpYWxpemF0aW9uLiAgWW91IGNhbiBhZGQgYSB2ZXJiIGJ5Ci0gIHdyaXRpbmcgdG8gdGhpcyBmaWxlLiAgUGFzcyB0cmVlIG51bWJlcnMsIG5pZCwgdmVyYiBhbmQgcGFyYW1ldGVyLgorICB3cml0aW5nIHRvIHRoaXMgZmlsZS4gIFBhc3MgdGhyZWUgbnVtYmVyczogbmlkLCB2ZXJiIGFuZCBwYXJhbWV0ZXIKKyAgKHNlcGFyYXRlZCB3aXRoIGEgc3BhY2UpLgogaGludHM6OgotICBTaG93cyBoaW50IHN0cmluZ3MgZm9yIGNvZGVjIHBhcnNlcnMgZm9yIGFueSB1c2UuICBSaWdodCBub3cgaXQncwotICBub3QgdXNlZC4KKyAgU2hvd3MgLyBzdG9yZXMgaGludCBzdHJpbmdzIGZvciBjb2RlYyBwYXJzZXJzIGZvciBhbnkgdXNlLgorICBJdHMgZm9ybWF0IGlzIGBrZXkgPSB2YWx1ZWAuICBGb3IgZXhhbXBsZSwgcGFzc2luZyBgaHBfZGV0ZWN0ID0geWVzYAorICB0byBJRFQvU1RBQyBjb2RlYyBwYXJzZXIgd2lsbCByZXN1bHQgaW4gdGhlIGRpc2FibGVtZW50IG9mIHRoZQorICBoZWFkcGhvbmUgZGV0ZWN0aW9uLgoraW5pdF9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBpbml0aWFsIHBpbiBkZWZhdWx0IGNvbmZpZyB2YWx1ZXMgc2V0IGJ5IEJJT1MuCitkcml2ZXJfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgcGluIGRlZmF1bHQgdmFsdWVzIHNldCBieSB0aGUgY29kZWMgcGFyc2VyIGV4cGxpY2l0bHkuCisgIFRoaXMgZG9lc24ndCBzaG93IGFsbCBwaW4gdmFsdWVzIGJ1dCBvbmx5IHRoZSBjaGFuZ2VkIHZhbHVlcyBieQorICB0aGUgcGFyc2VyLiAgVGhhdCBpcywgaWYgdGhlIHBhcnNlciBkb2Vzbid0IGNoYW5nZSB0aGUgcGluIGRlZmF1bHQKKyAgY29uZmlnIHZhbHVlcyBieSBpdHNlbGYsIHRoaXMgd2lsbCBjb250YWluIG5vdGhpbmcuCit1c2VyX3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIHBpbiBkZWZhdWx0IGNvbmZpZyB2YWx1ZXMgdG8gb3ZlcnJpZGUgdGhlIEJJT1Mgc2V0dXAuCisgIFdyaXRpbmcgdGhpcyAod2l0aCB0d28gbnVtYmVycywgTklEIGFuZCB2YWx1ZSkgYXBwZW5kcyB0aGUgbmV3CisgIHZhbHVlLiAgVGhlIGdpdmVuIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbml0aWFsIEJJT1MgdmFsdWUgYXQKKyAgdGhlIG5leHQgcmVjb25maWd1cmF0aW9uIHRpbWUuICBOb3RlIHRoYXQgdGhpcyBjb25maWcgd2lsbCBvdmVycmlkZQorICBldmVuIHRoZSBkcml2ZXIgcGluIGNvbmZpZ3MsIHRvby4KIHJlY29uZmlnOjoKICAgVHJpZ2dlcnMgdGhlIGNvZGVjIHJlLWNvbmZpZ3VyYXRpb24uICBXaGVuIGFueSB2YWx1ZSBpcyB3cml0dGVuIHRvCiAgIHRoaXMgZmlsZSwgdGhlIGRyaXZlciByZS1pbml0aWFsaXplIGFuZCBwYXJzZXMgdGhlIGNvZGVjIHRyZWUKQEAgLTM3MSw2ICszOTQsMTQgQEAKICAgUmVzZXRzIHRoZSBjb2RlYywgcmVtb3ZlcyB0aGUgbWl4ZXIgZWxlbWVudHMgYW5kIFBDTSBzdHVmZiBvZiB0aGUKICAgc3BlY2lmaWVkIGNvZGVjLCBhbmQgY2xlYXIgYWxsIGluaXQgdmVyYnMgYW5kIGhpbnRzLgogCitGb3IgZXhhbXBsZSwgd2hlbiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KK3ZhbHVlIG9mIHRoZSBwaW4gd2lkZ2V0IDB4MTQgdG8gMHg5OTkzMDEzZiwgYW5kIGxldCB0aGUgZHJpdmVyCityZS1jb25maWd1cmUgYmFzZWQgb24gdGhhdCBzdGF0ZSwgcnVuIGxpa2UgYmVsb3c6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBlY2hvIDB4MTQgMHg5OTkzMDEzZiA+IC9zeXMvY2xhc3Mvc291bmQvaHdDMEQwL3VzZXJfcGluX2NvbmZpZ3MKKyAgIyBlY2hvIDEgPiAvc3lzL2NsYXNzL3NvdW5kL2h3QzBEMC9yZWNvbmZpZyAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogCiBQb3dlci1TYXZpbmcKIH5+fn5+fn5+fn5+fgpAQCAtNDYxLDYgKzQ5MiwxNiBAQAogVGhlcmUgYXJlIHNvbWUgb3RoZXIgdXNlZnVsIG9wdGlvbnMuICBTZWUgYC0taGVscGAgb3B0aW9uIG91dHB1dCBmb3IKIGRldGFpbHMuCiAKK1doZW4gYSBwcm9iZSBlcnJvciBvY2N1cnMgb3Igd2hlbiB0aGUgZHJpdmVyIG9idmlvdXNseSBhc3NpZ25zIGEKK21pc21hdGNoZWQgbW9kZWwsIGl0J2QgYmUgaGVscGZ1bCB0byBsb2FkIHRoZSBkcml2ZXIgd2l0aAorYHByb2JlX29ubHk9MWAgb3B0aW9uIChhdCBiZXN0IGFmdGVyIHRoZSBjb2xkIHJlYm9vdCkgYW5kIHJ1bgorYWxzYS1pbmZvIGF0IHRoaXMgc3RhdGUuICBXaXRoIHRoaXMgb3B0aW9uLCB0aGUgZHJpdmVyIHdvbid0IGNvbmZpZ3VyZQordGhlIG1peGVyIGFuZCBQQ00gYnV0IGp1c3QgdHJpZXMgdG8gcHJvYmUgdGhlIGNvZGVjIHNsb3QuICBBZnRlcgorcHJvYmluZywgdGhlIHByb2MgZmlsZSBpcyBhdmFpbGFibGUsIHNvIHlvdSBjYW4gZ2V0IHRoZSByYXcgY29kZWMKK2luZm9ybWF0aW9uIGJlZm9yZSBtb2RpZmllZCBieSB0aGUgZHJpdmVyLiAgT2YgY291cnNlLCB0aGUgZHJpdmVyCitpc24ndCB1c2FibGUgd2l0aCBgcHJvYmVfb25seT0xYC4gIEJ1dCB5b3UgY2FuIGNvbnRpbnVlIHRoZQorY29uZmlndXJhdGlvbiB2aWEgaHdkZXAgc3lzZnMgZmlsZSBpZiBoZGEtcmVjb25maWcgb3B0aW9uIGlzIGVuYWJsZWQuCisKIAogaGRhLXZlcmIKIH5+fn5+fn5+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dAppbmRleCA0NmY5Njg0Li45ZTY3NjMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKQEAgLTExNiw2ICsxMTYsOSBAQAogU05EX1NPQ19EQVBNX01JWEVSKCJPdXRwdXQgTWl4ZXIiLCBXTTg3MzFfUFdSLCA0LCAxLCB3bTg3MzFfb3V0cHV0X21peGVyX2NvbnRyb2xzLAogCUFSUkFZX1NJWkUod204NzMxX291dHB1dF9taXhlcl9jb250cm9scykpLAogCitJZiB5b3UgZG9udCB3YW50IHRoZSBtaXhlciBlbGVtZW50cyBwcmVmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtaXhlciB3aWRnZXQsCit5b3UgY2FuIHVzZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMIGluc3RlYWQuIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZQorYXMgZm9yIFNORF9TT0NfREFQTV9NSVhFUi4KIAogMi4zIFBsYXRmb3JtL01hY2hpbmUgZG9tYWluIFdpZGdldHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNmFmN2EuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ1M0MjMyCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotVG8gY29uZmlndXJlIHRoZSBDcnlzdGFsIENTNDIzeCBzb3VuZCBjaGlwIGFuZCBhY3RpdmF0ZSBpdHMgRFNQIGZ1bmN0aW9ucywKLW1vZHVsZXMgbWF5IGJlIGxvYWRlZCBpbiB0aGlzIG9yZGVyOgotICAKLQltb2Rwcm9iZSBzb3VuZAotCWluc21vZCBhZDE4NDgKLQlpbnNtb2QgdWFydDQwMQotCWluc21vZCBjczQyMzIgaW89KiBpcnE9KiBkbWE9KiBkbWEyPSoKLSAgCi1UaGlzIGlzIHRoZSBtZWFuaW5nIG9mIHRoZSBwYXJhbWV0ZXJzOgotICAKLQlpby0tSS9PIGFkZHJlc3Mgb2YgdGhlIFdpbmRvd3MgU291bmQgU3lzdGVtIChub3JtYWxseSAweDUzNCkKLQlpcnEtLUlSUSBvZiB0aGlzIGRldmljZQotCWRtYSBhbmQgZG1hMi0tRE1BIGNoYW5uZWxzIChETUEyIG1heSBiZSAwKQotICAKLU9uIHNvbWUgY2FyZHMsIHRoZSBib2FyZCBhdHRlbXB0cyB0byBkbyBub24tUG5QIHNldHVwLCBhbmQgZmFpbHMuICBJZiB5b3UKLWhhdmUgcHJvYmxlbXMsIHVzZSBMaW51eCcgUG5QIGZhY2lsaXRpZXMuIAotICAKLVRvIGdldCBNSURJIGZhY2lsaXRpZXMgYWRkCi0gIAotCWluc21vZCBvcGwzIGlvPSoKLSAgCi13aGVyZSAiaW8iIGlzIHRoZSBJL08gYWRkcmVzcyBvZiB0aGUgT1BMMyBzeW50aGVzaXplci4gVGhpcyB3aWxsIGJlIHNob3duCi1pbiAvcHJvYy9zeXMvcG5wIGFuZCBpcyBub3JtYWxseSAweDM4OC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgppbmRleCBmMDRiYTZiLi43NWQ5NjdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCkBAIC04MCw3ICs4MCw3IEBACiAgICAgYWRkaXRpb25hbCBmZWF0dXJlcy4KIAogMi4gIFRoZSBjb21tZXJjaWFsIE9TUyBkcml2ZXIgbWF5IGJlIG9idGFpbmVkIGZyb20gdGhlIHNpdGU6Ci0gICAgaHR0cDovL3d3dy9vcGVuc291bmQuY29tLiAgVGhpcyBtYXkgYmUgdXNlZCBmb3IgY2FyZHMgdGhhdAorICAgIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS4gIFRoaXMgbWF5IGJlIHVzZWQgZm9yIGNhcmRzIHRoYXQKICAgICBhcmUgdW5zdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIsIG9yIG1heSBiZSB1c2VkCiAgICAgYnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuICAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKaW5kZXggMjcwNDgxOS4uNmMzYzYyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CkBAIC0yMjksMTYgKzIyOSwyNiBAQAogCWludCBzdGF0dXM7CQkvKiAyODogKi8KIAl1bnNpZ25lZCBpbnQgbGVuZ3RoOwkvKiAzMjogTGVuZ3RoIG9mIGRhdGEgKHN1Ym1pdHRlZCBvciBhY3R1YWwpICovCiAJdW5zaWduZWQgaW50IGxlbl9jYXA7CS8qIDM2OiBEZWxpdmVyZWQgbGVuZ3RoICovCi0JdW5zaWduZWQgY2hhciBzZXR1cFs4XTsJLyogNDA6IE9ubHkgZm9yIENvbnRyb2wgJ1MnICovCi19OwkJCQkvKiA0OCBieXRlcyB0b3RhbCAqLworCXVuaW9uIHsJCQkvKiA0MDogKi8KKwkJdW5zaWduZWQgY2hhciBzZXR1cFtTRVRVUF9MRU5dOwkvKiBPbmx5IGZvciBDb250cm9sIFMtdHlwZSAqLworCQlzdHJ1Y3QgaXNvX3JlYyB7CQkvKiBPbmx5IGZvciBJU08gKi8KKwkJCWludCBlcnJvcl9jb3VudDsKKwkJCWludCBudW1kZXNjOworCQl9IGlzbzsKKwl9IHM7CisJaW50IGludGVydmFsOwkJLyogNDg6IE9ubHkgZm9yIEludGVycnVwdCBhbmQgSVNPICovCisJaW50IHN0YXJ0X2ZyYW1lOwkvKiA1MjogRm9yIElTTyAqLworCXVuc2lnbmVkIGludCB4ZmVyX2ZsYWdzOyAvKiA1NjogY29weSBvZiBVUkIncyB0cmFuc2Zlcl9mbGFncyAqLworCXVuc2lnbmVkIGludCBuZGVzYzsJLyogNjA6IEFjdHVhbCBudW1iZXIgb2YgSVNPIGRlc2NyaXB0b3JzICovCit9OwkJCQkvKiA2NCB0b3RhbCBsZW5ndGggKi8KIAogVGhlc2UgZXZlbnRzIGNhbiBiZSByZWNlaXZlZCBmcm9tIGEgY2hhcmFjdGVyIGRldmljZSBieSByZWFkaW5nIHdpdGggcmVhZCgyKSwKLXdpdGggYW4gaW9jdGwoMiksIG9yIGJ5IGFjY2Vzc2luZyB0aGUgYnVmZmVyIHdpdGggbW1hcC4KK3dpdGggYW4gaW9jdGwoMiksIG9yIGJ5IGFjY2Vzc2luZyB0aGUgYnVmZmVyIHdpdGggbW1hcC4gSG93ZXZlciwgcmVhZCgyKQorb25seSByZXR1cm5zIGZpcnN0IDQ4IGJ5dGVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAKIFRoZSBjaGFyYWN0ZXIgZGV2aWNlIGlzIHVzdWFsbHkgY2FsbGVkIC9kZXYvdXNibW9uTiwgd2hlcmUgTiBpcyB0aGUgVVNCIGJ1cwogbnVtYmVyLiBOdW1iZXIgemVybyAoL2Rldi91c2Jtb24wKSBpcyBzcGVjaWFsIGFuZCBtZWFucyAiYWxsIGJ1c2VzIi4KLUhvd2V2ZXIsIHRoaXMgZmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiBOb3RlIHRoYXQgc3BlY2lmaWMgbmFtaW5nCi1wb2xpY3kgaXMgc2V0IGJ5IHlvdXIgTGludXggZGlzdHJpYnV0aW9uLgorTm90ZSB0aGF0IHNwZWNpZmljIG5hbWluZyBwb2xpY3kgaXMgc2V0IGJ5IHlvdXIgTGludXggZGlzdHJpYnV0aW9uLgogCiBJZiB5b3UgY3JlYXRlIC9kZXYvdXNibW9uMCBieSBoYW5kLCBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvd25lZCBieSByb290CiBhbmQgaGFzIG1vZGUgMDYwMC4gT3RoZXJ3aXNlLCB1bnByaXZpbGVkZ2VkIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBzbm9vcApAQCAtMjc5LDkgKzI4OSwxMCBAQAogVGhpcyBjYWxsIHJldHVybnMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgogCiAgTU9OX0lPQ1hfR0VULCBkZWZpbmVkIGFzIF9JT1coTU9OX0lPQ19NQUdJQywgNiwgc3RydWN0IG1vbl9nZXRfYXJnKQorIE1PTl9JT0NYX0dFVFgsIGRlZmluZWQgYXMgX0lPVyhNT05fSU9DX01BR0lDLCAxMCwgc3RydWN0IG1vbl9nZXRfYXJnKQogCi1UaGlzIGNhbGwgd2FpdHMgZm9yIGV2ZW50cyB0byBhcnJpdmUgaWYgbm9uZSB3ZXJlIGluIHRoZSBrZXJuZWwgYnVmZmVyLAotdGhlbiByZXR1cm5zIHRoZSBmaXJzdCBldmVudC4gSXRzIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgZm9sbG93aW5nCitUaGVzZSBjYWxscyB3YWl0IGZvciBldmVudHMgdG8gYXJyaXZlIGlmIG5vbmUgd2VyZSBpbiB0aGUga2VybmVsIGJ1ZmZlciwKK3RoZW4gcmV0dXJuIHRoZSBmaXJzdCBldmVudC4gVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgZm9sbG93aW5nCiBzdHJ1Y3R1cmU6CiAKIHN0cnVjdCBtb25fZ2V0X2FyZyB7CkBAIC0yOTQsNiArMzA1LDggQEAKIHBvaW50ZWQgYnkgaGRyIGNvbnRhaW5zIHRoZSBuZXh0IGV2ZW50IHN0cnVjdHVyZSwgYW5kIHRoZSBkYXRhIGJ1ZmZlciBjb250YWlucwogdGhlIGRhdGEsIGlmIGFueS4gVGhlIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIGJ1ZmZlci4KIAorVGhlIE1PTl9JT0NYX0dFVCBjb3BpZXMgNDggYnl0ZXMsIE1PTl9JT0NYX0dFVFggY29waWVzIDY0IGJ5dGVzLgorCiAgTU9OX0lPQ1hfTUZFVENILCBkZWZpbmVkIGFzIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fbWZldGNoX2FyZykKIAogVGhpcyBpb2N0bCBpcyBwcmltYXJpbHkgdXNlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBhY2Nlc3NlcyB0aGUgYnVmZmVyCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDVkNDYwYzkuLmZhN2JlMDQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xMDExLDYgKzEwMTEsOCBAQAogUzoJU3VwcG9ydGVkCiAKIEJST0FEQ09NIFRHMyBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgorUDoJTWF0dCBDYXJsc29uCitNOgltY2FybHNvbkBicm9hZGNvbS5jb20KIFA6CU1pY2hhZWwgQ2hhbgogTToJbWNoYW5AYnJvYWRjb20uY29tCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCkBAIC0xMjY5LDYgKzEyNzEsMTIgQEAKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaGVyYmVydC9jcnlwdG8tMi42LmdpdAogUzoJTWFpbnRhaW5lZAogCitDUllQVE9HUkFQSElDIFJBTkRPTSBOVU1CRVIgR0VORVJBVE9SCitQOglOZWlsIEhvcm1hbgorTToJbmhvcm1hbkB0dXhkcml2ZXIuY29tCitMOglsaW51eC1jcnlwdG9Admdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCisKIENTNTUzNSBBdWRpbyBBTFNBIGRyaXZlcgogUDoJSmF5YSBLdW1hcgogTToJamF5YWt1bWFyLmFsc2FAZ21haWwuY29tCkBAIC0yMjE2LDYgKzIyMjQsMTEgQEAKIEw6CWxpbnV4MTM5NC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIAorSU5URUdSSVRZIE1FQVNVUkVNRU5UIEFSQ0hJVEVDVFVSRSAoSU1BKQorUDoJTWltaSBab2hhcgorTToJem9oYXJAdXMuaWJtLmNvbQorUzoJU3VwcG9ydGVkCisKIElNUyBUV0lOVFVSQk8gRlJBTUVCVUZGRVIgRFJJVkVSCiBMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJT3JwaGFuCkBAIC0yODMyLDcgKzI4NDUsNyBAQAogTToJemlwcGVsQGxpbnV4LW02OGsub3JnCiBMOglsaW51eC1tNjhrQGxpc3RzLmxpbnV4LW02OGsub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW02OGsub3JnLwotVzoJaHR0cDovL2xpbnV4LW02OGstY3ZzLnViYi5jYS8KK1Q6CWdpdCBnaXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ2VlcnQvbGludXgtbTY4ay5naXQKIFM6CU1haW50YWluZWQKIAogTTY4SyBPTiBBUFBMRSBNQUNJTlRPU0gKQEAgLTM2MzUsNiArMzY0OCwxMiBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCitSRFMgLSBSRUxJQUJMRSBEQVRBR1JBTSBTT0NLRVRTCitQOglBbmR5IEdyb3ZlcgorTToJYW5keS5ncm92ZXJAb3JhY2xlLmNvbQorTDoJcmRzLWRldmVsQG9zcy5vcmFjbGUuY29tCitTOglTdXBwb3J0ZWQKKwogUkVBRC1DT1BZIFVQREFURSAoUkNVKQogUDoJRGlwYW5rYXIgU2FybWEKIE06CWRpcGFua2FyQGluLmlibS5jb20KQEAgLTM3MjYsNiArMzc0NSwxNSBAQAogVzoJaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpbnV4MzkwLwogUzoJU3VwcG9ydGVkCiAKK1MzOTAgWkNSWVBUIERSSVZFUgorUDoJRmVsaXggQmVjaworTToJZmVsaXguYmVja0BkZS5pYm0uY29tCitQOglSYWxwaCBXdWVydGhuZXIKK006CXJhbHBoLnd1ZXJ0aG5lckBkZS5pYm0uY29tCitNOglsaW51eDM5MEBkZS5pYm0uY29tCitMOglsaW51eC1zMzkwQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCisKIFMzOTAgWkZDUCBEUklWRVIKIFA6CUNocmlzdG9mIFNjaG1pdHQKIE06CWNocmlzdG9mLnNjaG1pdHRAZGUuaWJtLmNvbQpAQCAtMzg0NCw2ICszODcyLDcgQEAKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcgKHN1Z2dlc3RlZCBDYzopCiBUOglnaXQga2VybmVsLm9yZzpwdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvam1vcnJpcy9zZWN1cml0eS10ZXN0aW5nLTIuNi5naXQKK1c6CWh0dHA6Ly9zZWN1cml0eS53aWtpLmtlcm5lbC5vcmcvCiBTOglTdXBwb3J0ZWQKIAogU0VDVVJJVFkgQ09OVEFDVApAQCAtNDI4NSw2ICs0MzE0LDE5IEBACiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3RsYW4vCiBTOglNYWludGFpbmVkCiAKK1RPTU9ZTyBTRUNVUklUWSBNT0RVTEUKK1A6CUtlbnRhcm8gVGFrZWRhCitNOgl0YWtlZGFrbkBudHRkYXRhLmNvLmpwCitQOglUZXRzdW8gSGFuZGEKK006CXBlbmd1aW4ta2VybmVsQEktbG92ZS5TQUtVUkEubmUuanAKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcgKGtlcm5lbCBpc3N1ZXMpCitMOgl0b21veW8tdXNlcnMtZW5AbGlzdHMuc291cmNlZm9yZ2UuanAgKHN1YnNjcmliZXJzLW9ubHksIGZvciBkZXZlbG9wZXJzIGFuZCB1c2VycyBpbiBFbmdsaXNoKQorTDoJdG9tb3lvLWRldkBsaXN0cy5zb3VyY2Vmb3JnZS5qcCAoc3Vic2NyaWJlcnMtb25seSwgZm9yIGRldmVsb3BlcnMgaW4gSmFwYW5lc2UpCitMOgl0b21veW8tdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UuanAgKHN1YnNjcmliZXJzLW9ubHksIGZvciB1c2VycyBpbiBKYXBhbmVzZSkKK1c6CWh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvCitUOglxdWlsdCBodHRwOi8vc3ZuLnNvdXJjZWZvcmdlLmpwL3N2bnJvb3QvdG9tb3lvL3RydW5rLzIuMi54L3RvbW95by1sc20vcGF0Y2hlcy8KK1M6CU1haW50YWluZWQKKwogVE9TSElCQSBBQ1BJIEVYVFJBUyBEUklWRVIKIFA6CUpvaG4gQmVsbW9udGUKIE06CXRvc2hpYmFfYWNwaUBtZW1lYmVhbS5vcmcKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGExMDU3YzIuLjM2NDFlYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNiArNjIsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogT19OT05CTE9DSyBjbGFzaGVzIHdpdGggdGhlIGJpdHMgdXNlZCBmb3Igc29ja2V0IHR5cGVzLiAgVGhlcmVmb3JlIHdlCiAgKiBoYXZlIHRvIGRlZmluZSBTT0NLX05PTkJMT0NLIHRvIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCmluZGV4IGRlMzVjZDQuLmNjZDJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FMUEhBX1NUQVRGU19ICiAjZGVmaW5lIF9BTFBIQV9TVEFURlNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQWxwaGEgaXMgdGhlIG9ubHkgNjQtYml0IHBsYXRmb3JtIHdpdGggMzItYml0IHN0YXRmcy4gQW5kIGRvZXNuJ3QKICAgIGV2ZW4gc2VlbSB0byBpbXBsZW1lbnQgc3RhdGZzNjQgKi8KICNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2OGU3MDg5Li40ZDY4MmIxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FMUEhBX1NXQUJfSAogI2RlZmluZSBfQUxQSEFfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKaW5kZXggNzAzNzMxYS4uZDM4MTJlYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGlycSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpcnFdKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaXJxLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpcnFdLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlYyVzIiwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMKaW5kZXggZTE2YWViNi4uNjdjMTlmOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJc21wX3BlcmNwdV90aW1lcl9pbnRlcnJ1cHQocmVncyk7CiAJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJaWYgKGNwdSAhPSBib290X2NwdWlkKSB7Ci0JCSAgICAgICAga3N0YXRfY3B1KGNwdSkuaXJxc1tSVENfSVJRXSsrOworCQkgICAgICAgIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShSVENfSVJRLCBpcnFfdG9fZGVzYyhSVENfSVJRKSk7CiAJCX0gZWxzZSB7CiAJCQloYW5kbGVfaXJxKFJUQ19JUlEpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaAppbmRleCA3OTQ4OWZkLi4wODM4OTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9fQVJNX0FfT1VUX0hfXwogCiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgZXhlYwogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggZjJjZDE4YS4uZWUxMzA0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaWZuZGVmIF9fQVNNQVJNX1NFVFVQX0gKICNkZWZpbmUgX19BU01BUk1fU0VUVVBfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAxMDI0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNjgxN2JlOS4uNTM3ZGU0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggMjdhNjg5Yi4uY2EyYmYyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBfX0FTTV9BUk1fU1dBQl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKICMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggMzYzZGIxOC4uNzI5NmYwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQlzZXFfcHJpbnRmKHAsICIgJTEwcyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUgPyA6ICItIik7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwppbmRleCBiMzQwNGI3Li4wZDIwNzRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKQEAgLTIzMSwxNCArMjMxLDE3IEBACiAKIHZvaWQgX19pbml0IGtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQogeworCWludCBpOworCiAJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJa2lya3dvb2Rfc3dpdGNoX3Jlc291cmNlc1swXS5zdGFydCA9IGlycTsKIAkJa2lya3dvb2Rfc3dpdGNoX3Jlc291cmNlc1swXS5lbmQgPSBpcnE7CiAJCWtpcmt3b29kX3N3aXRjaF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7CiAJfQogCi0JZC0+bWlpX2J1cyA9ICZraXJrd29vZF9nZTAwX3NoYXJlZC5kZXY7CiAJZC0+bmV0ZGV2ID0gJmtpcmt3b29kX2dlMDAuZGV2OworCWZvciAoaSA9IDA7IGkgPCBkLT5ucl9jaGlwczsgaSsrKQorCQlkLT5jaGlwW2ldLm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OwogCWtpcmt3b29kX3N3aXRjaF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBkOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9zd2l0Y2hfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCmluZGV4IDlhMGU5MDUuLmUxYzA1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYwpAQCAtNzUsNyArNzUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSByZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1syXQk9ICJsYW4zIiwKQEAgLTgzLDYgKzgzLDExIEBACiAJLnBvcnRfbmFtZXNbNV0JPSAiY3B1IiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ4OGY2MjgxX2dlMDFfZGF0YSA9IHsKIAkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigxMSksCiB9OwpAQCAtMTA1LDEyICsxMTAsMTIgQEAKIAlraXJrd29vZF9nZTAwX2luaXQoJnJkODhmNjI4MV9nZTAwX2RhdGEpOwogCWtpcmt3b29kX3BjaWVfaWQoJmRldiwgJnJldik7CiAJaWYgKHJldiA9PSBNVjg4RjYyODFfUkVWX0EwKSB7Ci0JCXJkODhmNjI4MV9zd2l0Y2hfZGF0YS5zd19hZGRyID0gMTA7CisJCXJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLnN3X2FkZHIgPSAxMDsKIAkJa2lya3dvb2RfZ2UwMV9pbml0KCZyZDg4ZjYyODFfZ2UwMV9kYXRhKTsKIAl9IGVsc2UgewotCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOworCQlyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YS5wb3J0X25hbWVzWzRdID0gIndhbiI7CiAJfQotCWtpcmt3b29kX2dlMDBfc3dpdGNoX2luaXQoJnJkODhmNjI4MV9zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAogCWtpcmt3b29kX3J0Y19pbml0KCk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZyZDg4ZjYyODFfc2F0YV9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKaW5kZXggMjJlMGViNi4uZmViMGU1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKQEAgLTYzLDcgKzYzLDYgQEAKICNlbHNlCiBzdGF0aWMgdm9pZCBoYW5kbGVfcHJpb19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CiAKQEAgLTcyLDcgKzcxLDcgQEAKIAlCVUdfT04oZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAlpZiAodW5saWtlbHkoIWFjdGlvbiB8fCAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKaW5kZXggOGEwZTQ5ZC4uNjhjYzNlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHBsYXQvZWhjaS1vcmlvbi5oPgogI2luY2x1ZGUgPHBsYXQvbXZfeG9yLmg+CiAjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbjV4X3dkdC5oPgogI2luY2x1ZGUgPHBsYXQvdGltZS5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogCkBAIC0yMTksMTQgKzIyMCwxNyBAQAogCiB2b2lkIF9faW5pdCBvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdChzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKmQsIGludCBpcnEpCiB7CisJaW50IGk7CisKIAlpZiAoaXJxICE9IE5PX0lSUSkgewogCQlvcmlvbjV4X3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CiAJCW9yaW9uNXhfc3dpdGNoX3Jlc291cmNlc1swXS5lbmQgPSBpcnE7CiAJCW9yaW9uNXhfc3dpdGNoX2RldmljZS5udW1fcmVzb3VyY2VzID0gMTsKIAl9CiAKLQlkLT5taWlfYnVzID0gJm9yaW9uNXhfZXRoX3NoYXJlZC5kZXY7CiAJZC0+bmV0ZGV2ID0gJm9yaW9uNXhfZXRoLmRldjsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnJfY2hpcHM7IGkrKykKKwkJZC0+Y2hpcFtpXS5taWlfYnVzID0gJm9yaW9uNXhfZXRoX3NoYXJlZC5kZXY7CiAJb3Jpb241eF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb3Jpb241eF9zd2l0Y2hfZGV2aWNlKTsKQEAgLTUzMyw2ICs1MzcsMjkgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdhdGNoZG9nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3Qgb3Jpb241eF93ZHRfcGxhdGZvcm1fZGF0YSBvcmlvbjV4X3dkdF9kYXRhID0geworCS50Y2xrCQkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Jpb241eF93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvcmlvbjV4X3dkdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZvcmlvbjV4X3dkdF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgb3Jpb241eF93ZHRfaW5pdCh2b2lkKQoreworCW9yaW9uNXhfd2R0X2RhdGEudGNsayA9IG9yaW9uNXhfdGNsazsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X2RldmljZSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaW1lIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBvcmlvbjV4X3RjbGs7CkBAIC02MzEsNiArNjU4LDExIEBACiAJCXByaW50ayhLRVJOX0lORk8gIk9yaW9uOiBBcHBseWluZyA1MjgxIEQwIFdGSSB3b3JrYXJvdW5kLlxuIik7CiAJCWRpc2FibGVfaGx0KCk7CiAJfQorCisJLyoKKwkgKiBSZWdpc3RlciB3YXRjaGRvZyBkcml2ZXIKKwkgKi8KKwlvcmlvbjV4X3dkdF9pbml0KCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCmluZGV4IDE1ZjUzMjMuLjljMWNhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCkBAIC05NCw3ICs5NCw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTAzLDYgKzEwMywxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2Z4b19zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcmQ4OGY1MTgxbF9meG9faW5pdCh2b2lkKQogewogCS8qCkBAIC0xMTcsNyArMTIyLDcgQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjUxODFsX2Z4b19ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfcGxhdF9kYXRhLCBOT19JUlEpOwogCW9yaW9uNXhfdWFydDBfaW5pdCgpOwogCiAJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oUkQ4OEY1MTgxTF9GWE9fTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCmluZGV4IDhhZDM5MzQuLmVlMTM5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwpAQCAtOTUsNyArOTUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzJdCT0gIndhbiIsCkBAIC0xMDQsNiArMTA0LDExIEBACiAJLnBvcnRfbmFtZXNbN10JPSAibGFuMyIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcmQ4OGY1MTgxbF9nZV9pMmNfcnRjID0gewogCUkyQ19CT0FSRF9JTkZPKCJkczEzMzgiLCAweDY4KSwKIH07CkBAIC0xMjIsNyArMTI3LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjUxODFsX2dlX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfZGF0YSwgZ3Bpb190b19pcnEoOCkpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoOCkpOwogCW9yaW9uNXhfaTJjX2luaXQoKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYwppbmRleCAyNjJlMjVlLi43NzM3Y2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYwpAQCAtMzUsNyArMzUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC00NCw2ICs0NCwxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByZDg4ZjYxODNhcF9nZV9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQk9ICJrZXJuZWwiLApAQCAtODksNyArOTQsOCBAQAogCSAqLwogCW9yaW9uNXhfZWhjaTBfaW5pdCgpOwogCW9yaW9uNXhfZXRoX2luaXQoJnJkODhmNjE4M2FwX2dlX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDMpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX3BsYXRfZGF0YSwKKwkJCQlncGlvX3RvX2lycSgzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8sCiAJCQkJQVJSQVlfU0laRShyZDg4ZjYxODNhcF9nZV9zcGlfc2xhdmVfaW5mbykpOwogCW9yaW9uNXhfc3BpX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCmluZGV4IGNjOGY4OTIuLjFiNGFkOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHNhX2NoaXBfZGF0YSB3cnQzNTBuX3YyX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMl0JPSAid2FuIiwKQEAgLTExNSw2ICsxMTUsMTEgQEAKIAkucG9ydF9uYW1lc1s3XQk9ICJsYW40IiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgd3J0MzUwbl92Ml9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJndydDM1MG5fdjJfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCB3cnQzNTBuX3YyX2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMTI5LDcgKzEzNCw3IEBACiAJICovCiAJb3Jpb241eF9laGNpMF9pbml0KCk7CiAJb3Jpb241eF9ldGhfaW5pdCgmd3J0MzUwbl92Ml9ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJndydDM1MG5fdjJfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJndydDM1MG5fdjJfc3dpdGNoX3BsYXRfZGF0YSwgTk9fSVJRKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIAogCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFdSVDM1ME5fVjJfTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwppbmRleCA2ZDQ4ZTAwLi5hNmZmZjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCkBAIC0xMzUsNiArMTM1LDExIEBACiAJLyogSXJEQSAqLwogCUdQSU8zOF9HUElPIHwgTUZQX0xQTV9EUklWRV9ISUdILAogCisJLyogQXVkaW8gcG93ZXIgY29udHJvbCAqLworCUdQSU8xNl9HUElPLCAgLyogQUM5NyBjb2RlYyBBVkREMiBzdXBwbHkgKGFuYWxvZ3VlIHBvd2VyKSAqLworCUdQSU80MF9HUElPLCAgLyogTWljIGFtcCBwb3dlciAqLworCUdQSU80MV9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCiAJLyogUEMgQ2FyZCAqLwogCUdQSU84X0dQSU8sICAgLyogQ0QwICovCiAJR1BJTzQ0X0dQSU8sICAvKiBDRDEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwppbmRleCBiZTFhYjhlLi42NjUwNjZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCkBAIC0xMzMsNiArMTMzLDExIEBACiAJLyogSXJEQSAqLwogCUdQSU8zOF9HUElPIHwgTUZQX0xQTV9EUklWRV9ISUdILAogCisJLyogQXVkaW8gcG93ZXIgY29udHJvbCAqLworCUdQSU80X0dQSU8sICAvKiBIZWFkcGhvbmUgYW1wIHBvd2VyICovCisJR1BJTzdfR1BJTywgIC8qIFNwZWFrZXIgYW1wIHBvd2VyICovCisJR1BJTzM3X0dQSU8sIC8qIEhlYWRwaG9uZSBkZXRlY3QgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYwppbmRleCBkYTZlNDQyLi4yOTVlYzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKQEAgLTE1Myw2ICsxNTMsMTMgQEAKIAlHUElPMjNfU1NQMV9TQ0xLLAogCUdQSU8yNV9TU1AxX1RYRCwKIAlHUElPMjZfU1NQMV9SWEQsCisKKwkvKiBJMlMgKi8KKwlHUElPMjhfSTJTX0JJVENMS19PVVQsCisJR1BJTzI5X0kyU19TREFUQV9JTiwKKwlHUElPMzBfSTJTX1NEQVRBX09VVCwKKwlHUElPMzFfSTJTX1NZTkMsCisJR1BJTzMyX0kyU19TWVNDTEssCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCmluZGV4IGVmYmQyYWEuLmYzZTU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKQEAgLTQ1LDYgKzQ1LDIxIEBACiAvKiBlN3h4IElyREEgcG93ZXIgY29udHJvbCAqLwogI2RlZmluZSBHUElPX0U3WFhfSVJfT0ZGICAgICAgICAgMzgKIAorLyogZTc0MCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTc0MF9XTTk3MDVfbkFWREQyICAxNgorI2RlZmluZSBHUElPX0U3NDBfTUlDX09OICAgICAgICAgNDAKKyNkZWZpbmUgR1BJT19FNzQwX0FNUF9PTiAgICAgICAgIDQxCisKKy8qIGU3NTAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U3NTBfSFBfQU1QX09GRiAgICAgIDQKKyNkZWZpbmUgR1BJT19FNzUwX1NQS19BTVBfT0ZGICAgICA3CisjZGVmaW5lIEdQSU9fRTc1MF9IUF9ERVRFQ1QgICAgICAzNworCisvKiBlODAwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FODAwX0hQX0RFVEVDVCAgICAgIDgxCisjZGVmaW5lIEdQSU9fRTgwMF9IUF9BTVBfT0ZGICAgICA4MgorI2RlZmluZSBHUElPX0U4MDBfU1BLX0FNUF9PTiAgICAgODMKKwogLyogQVNJQyByZWxhdGVkIEdQSU9zICovCiAjZGVmaW5lIEdQSU9fRVNFUklFU19UTUlPX0lSUSAgICAgICAgNQogI2RlZmluZSBHUElPX0VTRVJJRVNfVE1JT19QQ0xSICAgICAgMTkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXNzcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKaW5kZXggY2YzMTk4Ni4uMDE4ZjZkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgU1NDUjBfVFVNCSgxIDw8IDIzKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIGludGVycnVwdCBtYXNrICovCiAjZGVmaW5lIFNTQ1IwX0ZSREMJKDB4MDcwMDAwMDApCS8qIEZyYW1lIHJhdGUgZGl2aWRlciBjb250cm9sIChtYXNrKSAqLwogI2RlZmluZSBTU0NSMF9TbG90c1BlckZybSh4KSAoKCh4KSAtIDEpIDw8IDI0KQkvKiBUaW1lIHNsb3RzIHBlciBmcmFtZSBbMS4uOF0gKi8KLSNkZWZpbmUgU1NDUjBfQURDCSgxIDw8IDMwKQkvKiBBdWRpbyBjbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgU1NDUjBfQUNTCSgxIDw8IDMwKQkvKiBBdWRpbyBjbG9jayBzZWxlY3QgKi8KICNkZWZpbmUgU1NDUjBfTU9ECSgxIDw8IDMxKQkvKiBNb2RlIChub3JtYWwgb3IgbmV0d29yaykgKi8KICNlbmRpZgogCkBAIC0xMDksNiArMTA5LDExIEBACiAjZGVmaW5lIFNTU1JfVElOVAkJKDEgPDwgMTkpCS8qIFJlY2VpdmVyIFRpbWUtb3V0IEludGVycnVwdCAqLwogI2RlZmluZSBTU1NSX1BJTlQJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0ICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpCisjZGVmaW5lIFNTUFNQX0VETVlTVE9QKHgpCSgoeCkgPDwgMjgpICAgICAvKiBFeHRlbmRlZCBEdW1teSBTdG9wICovCisjZGVmaW5lIFNTUFNQX0VETVlTVFJUKHgpCSgoeCkgPDwgMjYpICAgICAvKiBFeHRlbmRlZCBEdW1teSBTdGFydCAqLworI2VuZGlmCisKICNkZWZpbmUgU1NQU1BfRlNSVAkJKDEgPDwgMjUpCS8qIEZyYW1lIFN5bmMgUmVsYXRpdmUgVGltaW5nICovCiAjZGVmaW5lIFNTUFNQX0RNWVNUT1AoeCkJKCh4KSA8PCAyMykJLyogRHVtbXkgU3RvcCAqLwogI2RlZmluZSBTU1BTUF9TRlJNV0RUSCh4KQkoKHgpIDw8IDE2KQkvKiBTZXJpYWwgRnJhbWUgV2lkdGggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDZkNDQ3YzkuLjBkNjJkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTA1LDYgKzEwNSwxMiBAQAogCUdQSU81N19uSU9JUzE2LAogCUdQSU8xMDRfUFNLVFNFTCwKIAorCS8qIEkyUyAqLworCUdQSU8yOF9JMlNfQklUQ0xLX09VVCwKKwlHUElPMjlfSTJTX1NEQVRBX0lOLAorCUdQSU8zMF9JMlNfU0RBVEFfT1VULAorCUdQSU8zMV9JMlNfU1lOQywKKwogCS8qIE1NQyAqLwogCUdQSU8zMl9NTUNfQ0xLLAogCUdQSU8xMTJfTU1DX0NNRCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCA1NTJiNGM3Li40NDBjMDE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIF9faW5pdGRhdGEgczNjMjQxMF9kbWFfbWFwcGluZ3NbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCmluZGV4IDYwNzhmMDkuLjgzMzFlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwpAQCAtMjksMTMgKzI5LDE0IEBACiAKICNpbmNsdWRlIDxtYWNoL2Jhc3QtbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9iYXN0LWlycS5oPgotI2luY2x1ZGUgPG1hY2gvdXNiLWNvbnRyb2wuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAorI2luY2x1ZGUgPHBsYXQvdXNiLWNvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKwogI2luY2x1ZGUgInVzYi1zaW10ZWMuaCIKIAogLyogY29udHJvbCBwb3dlciBhbmQgbW9uaXRvciBvdmVyLWN1cnJlbnQgZXZlbnRzIG9uIHZhcmlvdXMgU2ltdGVjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKaW5kZXggOTE5ODU2Yy4uOWUzNDc4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtczNjMjQxMi1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAjZGVmaW5lIE1BUCh4KSB7ICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElEIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwppbmRleCA1YjVlZTBiLi42OWI2Y2YzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIF9faW5pdGRhdGEgczNjMjQ0MF9kbWFfbWFwcGluZ3NbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwppbmRleCAyYTU4YTRkLi44NDMwZTU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2RpLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CiAKICNkZWZpbmUgTUFQKHgpIHsgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5Y2Y2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fUExBVF9PUklPTjVYX1dEVF9ICisjZGVmaW5lIF9fUExBVF9PUklPTjVYX1dEVF9ICisKK3N0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhIHsKKwl1MzIJdGNsazsJCS8qIG5vIDxsaW51eC9jbGsuaD4gc3VwcG9ydCB5ZXQgKi8KK307CisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvYXVkaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2F1ZGlvLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKaW5kZXggMjVkNDA1OC4uMGZhZDc1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaApAQCAtMzMsNiArMzMsOSBAQAogI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWERNQV9BQ1RJVkUJKDEgPDwgMSkKICNkZWZpbmUgUzNDMjQxMl9JSVNDT05fSUlTX0FDVElWRQkoMSA8PCAwKQogCisjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0lNU19QQ0xLCQkoMCA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWAkoMSA8PCAxMCkKKwogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfSU5URVJOQUwJKDAgPDwgMTApCiAjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01BU1RFUl9FWFRFUk5BTAkoMSA8PCAxMCkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0xBVkUJCSgyIDw8IDEwKQpAQCAtNDQsOCArNDcsOCBAQAogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9MUl9MTE9XCQkoMCA8PCA3KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9MUl9STE9XCQkoMSA8PCA3KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfSUlTCQkoMCA8PCA1KQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTVNCCQkoMCA8PCA1KQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTFNCCQkoMCA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTVNCCQkoMSA8PCA1KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTFNCCQkoMiA8PCA1KQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9TREZfTUFTSwkJKDMgPDwgNSkKICNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS18yNTZGUwkoMCA8PCAzKQogI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzUxMkZTCSgxIDw8IDMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCmluZGV4IGNkOTFkMTUuLjgyMmM4N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaApAQCAtMSw5ICsxLDkgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdXNiLWNvbnRyb2wuaAorLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogUzNDMjQxMCAtIHVzYiBwb3J0IGluZm9ybWF0aW9uCisgKiBTM0MgLSBVU0IgaG9zdCBwb3J0IGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMSw3ICsxMSw3IEBACiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgiCisjZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICiAKICNkZWZpbmUgUzNDX0hDREZMR19VU0VECSgxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtaWlzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLWlpcy5oCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMKaW5kZXggYTk4YzZkZC4uNTU5YmJjYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvZmxhc2guYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMTZ4Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAzNTg2M2YyLi4wNGM4NjA2IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBhMTRhYTViLi4xNGNjNzM3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtNCw3ICs0LDcgQEAKICNpZm5kZWYgX19BU01fQVZSMzJfU1dBQl9ICiAjZGVmaW5lIF9fQVNNX0FWUjMyX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggZWQwOTIzOS4uMjQ1YjJlZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTIzMCwxMCArMjMwLDEwIEBACiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCiAJCSIxOglsZC4iIHN1ZmZpeCAiCSUxLCAlMwkJCVxuIglcCiAJCSIyOgkJCQkJCVxuIglcCi0JCSIJLnNlY3Rpb24gLmZpeHVwLCBcImF4XCIJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDEJCQkJXG4iCVwKIAkJIjM6CW1vdgklMCwgJTQJCQkJXG4iCVwKIAkJIglyam1wCTJiCQkJCVxuIglcCi0JCSIJLnByZXZpb3VzCQkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMAkJCQlcbiIJXAogCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsIFwiYVwiCQlcbiIJXAogCQkiCS5sb25nCTFiLCAzYgkJCQlcbiIJXAogCQkiCS5wcmV2aW91cwkJCQlcbiIJXApAQCAtMjk1LDEwICsyOTUsMTAgQEAKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKIAkJIjE6CXN0LiIgc3VmZml4ICIJJTEsICUzCQkJXG4iCVwKIAkJIjI6CQkJCQkJXG4iCVwKLQkJIgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMQkJCQlcbiIJXAogCQkiMzoJbW92CSUwLCAlNAkJCQlcbiIJXAogCQkiCXJqbXAJMmIJCQkJXG4iCVwKLQkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAwCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIJCVxuIglcCiAJCSIJLmxvbmcJMWIsIDNiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCmluZGV4IDMzZDQ5MzcuLjAwOWE4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCkBAIC0xNTAsMTAgKzE1MCwxMCBAQAogCXRsYm1pc3NfcmVzdG9yZQogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX3BhZ2VfZmF1bHQKKwljYWxsCWRvX3BhZ2VfZmF1bHQKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTIKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAJLmdsb2JhbCByZXRfZnJvbV9mb3JrCiByZXRfZnJvbV9mb3JrOgotCXJjYWxsICAgc2NoZWR1bGVfdGFpbAorCWNhbGwgICBzY2hlZHVsZV90YWlsCiAKIAkvKiBjaGVjayBmb3Igc3lzY2FsbCB0cmFjaW5nICovCiAJZ2V0X3RocmVhZF9pbmZvIHIwCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogc3lzY2FsbF90cmFjZV9lbnRlcjoKIAlwdXNobQlyOC1yMTIKLQlyY2FsbAlzeXNjYWxsX3RyYWNlCisJY2FsbAlzeXNjYWxsX3RyYWNlCiAJcG9wbQlyOC1yMTIKIAlyam1wCXN5c2NhbGxfdHJhY2VfY29udAogCkBAIC0yNjksMTQgKzI2OSwxNCBAQAogCWJsZAlyMSwgVElGX1NZU0NBTExfVFJBQ0UKIAlicmNjCTFmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzeXNjYWxsX3RyYWNlCisJY2FsbAlzeXNjYWxsX3RyYWNlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAKIDE6CWJsZAlyMSwgVElGX05FRURfUkVTQ0hFRAogCWJyY2MJMmYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXNjaGVkdWxlCisJY2FsbAlzY2hlZHVsZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJMWIKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgc3AKIAltb3YJcjExLCByMAotCXJjYWxsCWRvX25vdGlmeV9yZXN1bWUKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCTFiCkBAIC0zOTQsNyArMzk0LDcgQEAKIAogCW1mc3IJcjEyLCBTWVNSRUdfRUNSCiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19jcml0aWNhbF9leGNlcHRpb24KKwljYWxsCWRvX2NyaXRpY2FsX2V4Y2VwdGlvbgogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCiBiYWRfcmV0dXJuOgpAQCAtNDA3LDE4ICs0MDcsMTggQEAKIGRvX2J1c19lcnJvcl93cml0ZToKIAlzdWIJc3AsIDQKIAlzdG10cwktLXNwLCByMC1scgotCXJjYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CisJY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAogCW1vdglyMTEsIDEKIAlyam1wCTFmCiAKIGRvX2J1c19lcnJvcl9yZWFkOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbW92CXIxMSwgMAogMToJbWZzcglyMTIsIFNZU1JFR19CRUFSCiAJbW92CXIxMCwgc3AKLQlyY2FsbAlkb19idXNfZXJyb3IKKwljYWxsCWRvX2J1c19lcnJvcgogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMQpAQCAtNDMzLDcgKzQzMyw3IEBACiAxOglwdXNobQlyOCwgcjkJLyogUEMgYW5kIFNSICovCiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX25taQorCWNhbGwJZG9fbm1pCiAJcG9wbQlyOC1yOQogCW10c3IJU1lTUkVHX1JBUl9OTUksIHI4CiAJdHN0CXIwLCByMApAQCAtNDU3LDI5ICs0NTcsMjkgQEAKIGhhbmRsZV9hZGRyZXNzX2ZhdWx0OgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2FkZHJlc3NfZXhjZXB0aW9uCisJY2FsbAlkb19hZGRyZXNzX2V4Y2VwdGlvbgogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGhhbmRsZV9wcm90ZWN0aW9uX2ZhdWx0OgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX3BhZ2VfZmF1bHQKKwljYWxsCWRvX3BhZ2VfZmF1bHQKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiAJLmFsaWduCTEKIGRvX2lsbGVnYWxfb3Bjb2RlX2xsOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2lsbGVnYWxfb3Bjb2RlCisJY2FsbAlkb19pbGxlZ2FsX29wY29kZQogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIGRvX2R0bGJfbW9kaWZpZWQ6CkBAIC01MTMsMTEgKzUxMywxMSBAQAogZG9fZnBlX2xsOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCAyNgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fZnBlCisJY2FsbAlkb19mcGUKIAlyam1wCXJldF9mcm9tX2V4Y2VwdGlvbgogCiByZXRfZnJvbV9leGNlcHRpb246CkBAIC01NTMsNyArNTUzLDcgQEAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJsZAlyNCwgU1lTUkVHX0dNX09GRlNFVAogCWJyY3MJMWYKLQlyY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQorCWNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKIDE6CiAjZW5kaWYKIApAQCAtNTgyLDcgKzU4Miw3IEBACiAJYmxkCXIxLCBUSUZfTkVFRF9SRVNDSEVECiAJYnJjYwkxZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc2NoZWR1bGUKKwljYWxsCXNjaGVkdWxlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAlmYXVsdF9leGl0X3dvcmsKQEAgLTU5Myw3ICs1OTMsNyBAQAogCXVubWFza19pbnRlcnJ1cHRzCiAJbW92CXIxMiwgc3AKIAltb3YJcjExLCByMAotCXJjYWxsCWRvX25vdGlmeV9yZXN1bWUKKwljYWxsCWRvX25vdGlmeV9yZXN1bWUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCWZhdWx0X2V4aXRfd29yawpAQCAtNjE2LDEwICs2MTYsMTAgQEAKIAogLkxkZWJ1Z19maXh1cF9jb250OgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCXJjYWxsCXRyYWNlX2hhcmRpcnFzX29mZgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCiAjZW5kaWYKIAltb3YJcjEyLCBzcAotCXJjYWxsCWRvX2RlYnVnCisJY2FsbAlkb19kZWJ1ZwogCW1vdglzcCwgcjEyCiAKIAlsZGRzcAlyMiwgc3BbUkVHX1NSXQpAQCAtNjQzLDcgKzY0Myw3IEBACiAJbXRzcglTWVNSRUdfUlNSX0RCRywgcjExCiAJbXRzcglTWVNSRUdfUkFSX0RCRywgcjEwCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAxOgogI2VuZGlmCiAJbGRtdHMJc3ArKywgcjAtbHIKQEAgLTY3Niw3ICs2NzYsNyBAQAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCWJsZAlyMTEsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNjCTFmCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAxOgogI2VuZGlmCiAJbWZzcglyMiwgU1lTUkVHX1NSCkBAIC03NDcsNyArNzQ3LDcgQEAKIAltb3YJcjExLCBzcAogCW1vdglyMTIsIFxsZXZlbAogCi0JcmNhbGwJZG9fSVJRCisJY2FsbAlkb19JUlEKIAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmZleHR1CXI0LCByNCwgU1lTUkVHX00wX09GRlNFVCwgMwpAQCAtNzY3LDcgKzc2Nyw3IEBACiAKIDE6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb24KKwljYWxsCXRyYWNlX2hhcmRpcnFzX29uCiAjZW5kaWYKIAlwb3BtCXI4LXI5CiAJbXRzcglyYXJfaW50XGxldmVsLCByOApAQCAtODA3LDcgKzgwNyw3IEBACiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAlibGQJcjQsIFNZU1JFR19HTV9PRkZTRVQKIAlicmNzCTFiCi0JcmNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKKwljYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCiAjZW5kaWYKIAlyam1wCTFiCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2lycS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKaW5kZXggYThlNzY3ZC4uOWY1NzIyMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSA/IDogIi0iKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUwppbmRleCA2NzMxNzhlLi5mNzI0NGNkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCkBAIC02MSw3ICs2MSw3IEBACiBfX3N5c19tbWFwMjoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19tbWFwMgorCWNhbGwJc3lzX21tYXAyCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtNzAsNyArNzAsNyBAQAogX19zeXNfc2VuZHRvOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3NlbmR0bworCWNhbGwJc3lzX3NlbmR0bwogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTc5LDcgKzc5LDcgQEAKIF9fc3lzX3JlY3Zmcm9tOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3JlY3Zmcm9tCisJY2FsbAlzeXNfcmVjdmZyb20KIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC04OCw3ICs4OCw3IEBACiBfX3N5c19wc2VsZWN0NjoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19wc2VsZWN0NgorCWNhbGwJc3lzX3BzZWxlY3Q2CiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtOTcsNyArOTcsNyBAQAogX19zeXNfc3BsaWNlOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3NwbGljZQorCWNhbGwJc3lzX3NwbGljZQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogX19zeXNfZXBvbGxfcHdhaXQ6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfZXBvbGxfcHdhaXQKKwljYWxsCXN5c19lcG9sbF9wd2FpdAogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTExNSw2ICsxMTUsNiBAQAogX19zeXNfc3luY19maWxlX3JhbmdlOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3N5bmNfZmlsZV9yYW5nZQorCWNhbGwJc3lzX3N5bmNfZmlsZV9yYW5nZQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUyBiL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCmluZGV4IDY1Y2UxMWEuLmU0NmY0NzI0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUworKysgYi9hcmNoL2F2cjMyL2xpYi9zdHJubGVuX3VzZXIuUwpAQCAtNDgsNyArNDgsNyBAQAogCWxkZHBjCWxyLCBfdGFza19zaXplCiAJc3ViCXIxMSwgbHIsIHIxMgogCW1vdglyOSwgcjExCi0JcmNhbGwJX19zdHJubGVuX3VzZXIKKwljYWxsCV9fc3Rybmxlbl91c2VyCiAJY3AudwlyMTIsIHI5CiAJYnJndAkxZgogCXBvcG0JcGMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDJjYTcwMmUuLmZhYzdmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTMsNCArNTMsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmCQkJCS8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNjlhMDUxYi4uNjQwM2FkMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9CTEFDS0ZJTl9TV0FCX0gKICNkZWZpbmUgX0JMQUNLRklOX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKaW5kZXggN2ZkMTI2NS4uYmQwNTJhNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwpAQCAtODMsNyArODMsNyBAQAogCQkJZ290byBza2lwOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggOWRmMGNhOC4uZDVjZjc0MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTYsNiArNTYsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIAogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwppbmRleCAyZGZhYzhjLi43ZjY0MmZjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCmluZGV4IDczYWJhZTcuLmFmM2U4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJaWYgKGFjdGlvbikgewogCQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCQlzZXFfcHJpbnRmKHAsICIgJTEwcyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUgPyA6ICItIik7CiAJCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZGEyNTIwZC4uNjAyNTE4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggYzEwOGYzOS4uMzlhYmJmNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9IODMwMF9TV0FCX0gKICNkZWZpbmUgX0g4MzAwX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKaW5kZXggZWY0ZjAwNC4uNzRmOGRkNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2OwogCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJCWlmICghYWN0aW9uKQogCQkJZ290byB1bmxvY2s7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IDM4NTk1NTguLjBjMjYxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTYsOCArNiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCiAvKiBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXI6ICovCiAjZGVmaW5lIEZQU1JfVFJBUF9WRAkoMSA8PCAwKQkvKiBpbnZhbGlkIG9wIHRyYXAgZGlzYWJsZWQgKi8KICNkZWZpbmUgRlBTUl9UUkFQX0RECSgxIDw8IDEpCS8qIGRlbm9ybWFsIHRyYXAgZGlzYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oCmluZGV4IDBmNWI1NTkuLmMyYzVmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaApAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMiwyMDAzIFN1cmVzaCBTaWRkaGEgPHN1cmVzaC5iLnNpZGRoYUBpbnRlbC5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyogZGVmaW5lIHRoaXMgbWFjcm8gdG8gZ2V0IHNvbWUgYXNtIHN0bXRzIGluY2x1ZGVkIGluICdjJyBmaWxlcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKaW5kZXggYTNlNDRhNS4uYzQ3ODMwZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogLyogaW5jbHVkZSBjb21waWxlciBzcGVjaWZpYyBpbnRyaW5zaWNzICovCiAjaW5jbHVkZSA8YXNtL2lhNjRyZWdzLmg+CiAjaWZkZWYgX19JTlRFTF9DT01QSUxFUgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGJmYTg2YjYuLjE4YTdlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIxLDggKzIxLDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKiBTZWxlY3QgeDg2IHNwZWNpZmljIGZlYXR1cmVzIGluIDxsaW51eC9rdm0uaD4gKi8KQEAgLTE2Niw3ICsxNjUsNDAgQEAKIAl1bnNpZ25lZCBsb25nICB2Y3B1aWRbNV07CiAJdW5zaWduZWQgbG9uZyAgdnBzcjsKIAl1bnNpZ25lZCBsb25nICB2cHI7Ci0JdW5zaWduZWQgbG9uZyAgdmNyWzEyOF07CisJdW5pb24geworCQl1bnNpZ25lZCBsb25nICB2Y3JbMTI4XTsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGxvbmcgZGNyOworCQkJdW5zaWduZWQgbG9uZyBpdG07CisJCQl1bnNpZ25lZCBsb25nIGl2YTsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MVs1XTsKKwkJCXVuc2lnbmVkIGxvbmcgcHRhOworCQkJdW5zaWduZWQgbG9uZyByc3YyWzddOworCQkJdW5zaWduZWQgbG9uZyBpcHNyOworCQkJdW5zaWduZWQgbG9uZyBpc3I7CisJCQl1bnNpZ25lZCBsb25nIHJzdjM7CisJCQl1bnNpZ25lZCBsb25nIGlpcDsKKwkJCXVuc2lnbmVkIGxvbmcgaWZhOworCQkJdW5zaWduZWQgbG9uZyBpdGlyOworCQkJdW5zaWduZWQgbG9uZyBpaXBhOworCQkJdW5zaWduZWQgbG9uZyBpZnM7CisJCQl1bnNpZ25lZCBsb25nIGlpbTsKKwkJCXVuc2lnbmVkIGxvbmcgaWhhOworCQkJdW5zaWduZWQgbG9uZyByc3Y0WzM4XTsKKwkJCXVuc2lnbmVkIGxvbmcgbGlkOworCQkJdW5zaWduZWQgbG9uZyBpdnI7CisJCQl1bnNpZ25lZCBsb25nIHRwcjsKKwkJCXVuc2lnbmVkIGxvbmcgZW9pOworCQkJdW5zaWduZWQgbG9uZyBpcnJbNF07CisJCQl1bnNpZ25lZCBsb25nIGl0djsKKwkJCXVuc2lnbmVkIGxvbmcgcG12OworCQkJdW5zaWduZWQgbG9uZyBjbWN2OworCQkJdW5zaWduZWQgbG9uZyByc3Y1WzVdOworCQkJdW5zaWduZWQgbG9uZyBscnIwOworCQkJdW5zaWduZWQgbG9uZyBscnIxOworCQkJdW5zaWduZWQgbG9uZyByc3Y2WzQ2XTsKKwkJfTsKKwl9OwogfTsKIAogc3RydWN0IGt2bV9yZWdzIHsKQEAgLTIxNCw0ICsyNDYsMTggQEAKIHN0cnVjdCBrdm1fZnB1IHsKIH07CiAKKyNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TVEFDS19TSElGVAkxNgorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NJWkUJKDFVTCA8PCBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NISUZUKQorCitzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayB7CisJdW5zaWduZWQgY2hhciBzdGFja1tLVk1fSUE2NF9WQ1BVX1NUQUNLX1NJWkVdOworfTsKKworc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMzQ4NjYzNi4uNDU0MjY1MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTExMiw3ICsxMTIsMTEgQEAKICNkZWZpbmUgVkNQVV9TVFJVQ1RfU0hJRlQJMTYKICNkZWZpbmUgVkNQVV9TVFJVQ1RfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IFZDUFVfU1RSVUNUX1NISUZUKQogCi0jZGVmaW5lIEtWTV9TVEtfT0ZGU0VUCQlWQ1BVX1NUUlVDVF9TSVpFCisvKgorICogVGhpcyBtdXN0IG1hdGNoIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfe1NISUZULFNJWkV9IGFyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaAorICovCisjZGVmaW5lIEtWTV9TVEtfU0hJRlQJCTE2CisjZGVmaW5lIEtWTV9TVEtfT0ZGU0VUCQkoX19JQTY0X1VMX0NPTlNUKDEpPDwgS1ZNX1NUS19TSElGVCkKIAogI2RlZmluZSBLVk1fVk1fU1RSVUNUX1NISUZUCTE5CiAjZGVmaW5lIEtWTV9WTV9TVFJVQ1RfU0laRQkoX19JQTY0X1VMX0NPTlNUKDEpIDw8IEtWTV9WTV9TVFJVQ1RfU0hJRlQpCkBAIC0xNTMsMTAgKzE1NywxMCBAQAogCXN0cnVjdCBrdm1fdmNwdV9kYXRhIHZjcHVfZGF0YVtLVk1fTUFYX1ZDUFVTXTsKIH07CiAKLSNkZWZpbmUgVkNQVV9CQVNFKG4pCUtWTV9WTV9EQVRBX0JBU0UgKyBcCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCB2Y3B1X2RhdGFbbl0pCi0jZGVmaW5lIFZNX0JBU0UJCUtWTV9WTV9EQVRBX0JBU0UgKyBcCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fdm1fc3RydWN0KQorI2RlZmluZSBWQ1BVX0JBU0UobikJKEtWTV9WTV9EQVRBX0JBU0UgKyBcCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCB2Y3B1X2RhdGFbbl0pKQorI2RlZmluZSBLVk1fVk1fQkFTRQkoS1ZNX1ZNX0RBVEFfQkFTRSArIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV92bV9zdHJ1Y3QpKQogI2RlZmluZSBLVk1fTUVNX0RJUlRZX0xPR19CQVNFCUtWTV9WTV9EQVRBX0JBU0UgKyBcCiAJCQkJb2Zmc2V0b2Yoc3RydWN0IGt2bV92bV9kYXRhLCBrdm1fbWVtX2RpcnR5X2xvZykKIApAQCAtMjM1LDggKzIzOSw2IEBACiAKIHN0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7Ci1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnewotfTsKIAogc3RydWN0IGt2bV9tbWlvX3JlcSB7CiAJdWludDY0X3QgYWRkcjsgICAgICAgICAgLyogIHBoeXNpY2FsIGFkZHJlc3MJCSovCkBAIC00NjIsNiArNDY0LDggQEAKIAl1bnNpZ25lZCBsb25nCW1ldGFwaHlzaWNhbF9ycjQ7CiAJdW5zaWduZWQgbG9uZwl2bW1faW5pdF9ycjsKIAorCWludAkJb25saW5lX3ZjcHVzOworCiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV92bV9zdGF0IHN0YXQ7CiAJc3RydWN0IGt2bV9zYWxfZGF0YSByZHZfc2FsX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbXNpZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYzEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaApAQCAtMCwwICsxLDQyIEBACisjaWZuZGVmIF9JQTY0X01TSV9ERUZfSAorI2RlZmluZSBfSUE2NF9NU0lfREVGX0gKKworLyoKKyAqIFNoaWZ0cyBmb3IgQVBJQy1iYXNlZCBkYXRhCisgKi8KKworI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX1NISUZUCTAKKyNkZWZpbmUJICAgIE1TSV9EQVRBX1ZFQ1RPUih2KQkJKCgodTgpdikgPDwgTVNJX0RBVEFfVkVDVE9SX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfVkVDVE9SX01BU0sJMHhmZmZmZmYwMAorCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUCTgKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkJKDEgPDwgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCkKKworI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfU0hJRlQJMTQKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0xFVkVMX0RFQVNTRVJUCSgwIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfQVNTRVJUCSgxIDw8IE1TSV9EQVRBX0xFVkVMX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX1NISUZUCTE1CisjZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX0VER0UJKDAgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfTEVWRUwJKDEgPDwgTVNJX0RBVEFfVFJJR0dFUl9TSElGVCkKKworLyoKKyAqIFNoaWZ0L21hc2sgZmllbGRzIGZvciBBUElDLWJhc2VkIGJ1cyBhZGRyZXNzCisgKi8KKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9TSElGVAk0CisjZGVmaW5lICAgICBNU0lfQUREUl9IRUFERVIJCTB4ZmVlMDAwMDAKKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9NQVNLCTB4ZmZmMDAwMGYKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdSkJKChjcHUpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVAkyCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX01PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCisjZGVmaW5lCSAgICBNU0lfQUREUl9ERVNUX01PREVfTE9HSUMJKDEgPDwgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVAkzCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9DUFUJKDAgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisjZGVmaW5lICAgICBNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkJKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQpCisKKyNlbmRpZi8qIF9JQTY0X01TSV9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGQ1ZWYwYWEuLjc0NTQyMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYzLDQgKzYzLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX0lBNjRfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDZhYTU4YjYuLmM4OWE4Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtNiw3ICs2LDcgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDby4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCmluZGV4IGE1OGY2NGMuLjRmNTk2NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwpAQCAtODAsNyArODAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7Ci0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogCQl9CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYwppbmRleCA4OTAzMzkzLi4zNjhlZTRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCkBAIC03LDQ0ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgotCi0vKgotICogU2hpZnRzIGZvciBBUElDLWJhc2VkIGRhdGEKLSAqLwotCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9TSElGVAkJMAotI2RlZmluZQkgICAgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh1OCl2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpCi0jZGVmaW5lIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLCQkweGZmZmZmZjAwCi0KLSNkZWZpbmUgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQJCTgKLSNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0ZJWEVECSgwIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJCSgxIDw8IE1TSV9EQVRBX0RFTElWRVJZX1NISUZUKQotCi0jZGVmaW5lIE1TSV9EQVRBX0xFVkVMX1NISUZUCQkxNAotI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfREVBU1NFUlQJKDAgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9BU1NFUlQJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfVFJJR0dFUl9TSElGVAkJMTUKLSNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkoMCA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9MRVZFTAkoMSA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQotCi0vKgotICogU2hpZnQvbWFzayBmaWVsZHMgZm9yIEFQSUMtYmFzZWQgYnVzIGFkZHJlc3MKLSAqLwotCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQk0Ci0jZGVmaW5lIE1TSV9BRERSX0hFQURFUgkJCTB4ZmVlMDAwMDAKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUSURfTUFTSwkJMHhmZmYwMDAwZgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVElEX0NQVShjcHUpCSgoY3B1KSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCkKLQotI2RlZmluZSBNU0lfQUREUl9ERVNUTU9ERV9TSElGVAkJMgotI2RlZmluZSAgICAgTVNJX0FERFJfREVTVE1PREVfUEhZUwkoMCA8PCBNU0lfQUREUl9ERVNUTU9ERV9TSElGVCkKLSNkZWZpbmUJICAgIE1TSV9BRERSX0RFU1RNT0RFX0xPR0lDCSgxIDw8IE1TSV9BRERSX0RFU1RNT0RFX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKLSNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSQkoMSA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAJaWE2NF9tc2lfY2hpcDsKIApAQCAtNjUsOCArMjgsOCBAQAogCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJYWRkciA9IG1zZy5hZGRyZXNzX2xvOwotCWFkZHIgJj0gTVNJX0FERFJfREVTVElEX01BU0s7Ci0JYWRkciB8PSBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKKwlhZGRyICY9IE1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwlhZGRyIHw9IE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKIAltc2cuYWRkcmVzc19sbyA9IGFkZHI7CiAKIAlkYXRhID0gbXNnLmRhdGE7CkBAIC05OCw5ICs2MSw5IEBACiAJbXNnLmFkZHJlc3NfaGkgPSAwOwogCW1zZy5hZGRyZXNzX2xvID0KIAkJTVNJX0FERFJfSEVBREVSIHwKLQkJTVNJX0FERFJfREVTVE1PREVfUEhZUyB8CisJCU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTIHwKIAkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVIHwKLQkJTVNJX0FERFJfREVTVElEX0NQVShkZXN0X3BoeXNfaWQpOworCQlNU0lfQUREUl9ERVNUX0lEX0NQVShkZXN0X3BoeXNfaWQpOwogCiAJbXNnLmRhdGEgPQogCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfApAQCAtMTgzLDggKzE0Niw4IEBACiAKIAltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7CiAJbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVElEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVElEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEX0NQVShjcHVfcGh5c2ljYWxfaWQoY3B1KSk7CiAKIAlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwogCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSAqbWFzazsKQEAgLTIxNSw5ICsxNzgsOSBAQAogCW1zZy0+YWRkcmVzc19oaSA9IDA7CiAJbXNnLT5hZGRyZXNzX2xvID0KIAkJTVNJX0FERFJfSEVBREVSIHwKLQkJTVNJX0FERFJfREVTVE1PREVfUEhZUyB8CisJCU1TSV9BRERSX0RFU1RfTU9ERV9QSFlTIHwKIAkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVIHwKLQkJTVNJX0FERFJfREVTVElEX0NQVShkZXN0KTsKKwkJTVNJX0FERFJfREVTVF9JRF9DUFUoZGVzdCk7CiAKIAltc2ctPmRhdGEgPQogCQlNU0lfREFUQV9UUklHR0VSX0VER0UgfApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCmluZGV4IGY4MzNhMGIuLjBhMmQ2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZworKysgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKQEAgLTQsNiArNCwxMCBAQAogY29uZmlnIEhBVkVfS1ZNCiAJYm9vbAogCitjb25maWcgSEFWRV9LVk1fSVJRQ0hJUAorICAgICAgIGJvb2wKKyAgICAgICBkZWZhdWx0IHkKKwogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgogCWRlcGVuZHMgb24gSEFWRV9LVk0gfHwgSUE2NApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9pcnEuaCBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKaW5kZXggYzY3ODZlOC4uYzA3ODVhNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9pcnEuaAorKysgYi9hcmNoL2lhNjQva3ZtL2lycS5oCkBAIC0yMyw2ICsyMyw4IEBACiAjaWZuZGVmIF9fSVJRX0gKICNkZWZpbmUgX19JUlFfSAogCisjaW5jbHVkZSAibGFwaWMuaCIKKwogc3RhdGljIGlubGluZSBpbnQgaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IDI4Zjk4MjAuLjA3NmIwMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCXN3aXRjaCAoZXh0KSB7CiAJY2FzZSBLVk1fQ0FQX0lSUUNISVA6CiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgotCisJY2FzZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgpAQCAtMzE0LDcgKzMxNCw3IEBACiAJdW5pb24gaWE2NF9saWQgbGlkOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJaWYgKGt2bS0+dmNwdXNbaV0pIHsKIAkJCWxpZC52YWwgPSBWQ1BVX0xJRChrdm0tPnZjcHVzW2ldKTsKIAkJCWlmIChsaWQuaWQgPT0gaWQgJiYgbGlkLmVpZCA9PSBlaWQpCkBAIC0zODgsNyArMzg4LDcgQEAKIAogCWNhbGxfZGF0YS5wdGNfZ19kYXRhID0gcC0+dS5wdGNfZ19kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJaWYgKCFrdm0tPnZjcHVzW2ldIHx8IGt2bS0+dmNwdXNbaV0tPmFyY2gubXBfc3RhdGUgPT0KIAkJCQkJCUtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEIHx8CiAJCQkJCXZjcHUgPT0ga3ZtLT52Y3B1c1tpXSkKQEAgLTc4OCw2ICs3ODgsOCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlrdm1faW5pdF92bShrdm0pOwogCisJa3ZtLT5hcmNoLm9ubGluZV92Y3B1cyA9IDA7CisKIAlyZXR1cm4ga3ZtOwogCiB9CkBAIC05MTksNyArOTIxLDEzIEBACiAJCXIgPSBrdm1faW9hcGljX2luaXQoa3ZtKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKGt2bSk7CisJCWlmIChyKSB7CisJCQlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CisJCQlnb3RvIG91dDsKKwkJfQogCQlicmVhazsKKwljYXNlIEtWTV9JUlFfTElORV9TVEFUVVM6CiAJY2FzZSBLVk1fSVJRX0xJTkU6IHsKIAkJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxX2V2ZW50OwogCkBAIC05MjcsMTAgKzkzNSwxNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlycV9ldmVudCwgYXJncCwgc2l6ZW9mIGlycV9ldmVudCkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKGlycWNoaXBfaW5fa2VybmVsKGt2bSkpIHsKKwkJCV9fczMyIHN0YXR1czsKIAkJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7Ci0JCQlrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKKwkJCXN0YXR1cyA9IGt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAogCQkJCSAgICBpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOwogCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQkJaWYgKGlvY3RsID09IEtWTV9JUlFfTElORV9TVEFUVVMpIHsKKwkJCQlpcnFfZXZlbnQuc3RhdHVzID0gc3RhdHVzOworCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlycV9ldmVudCwKKwkJCQkJCQlzaXplb2YgaXJxX2V2ZW50KSkKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlyID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTExNDksNyArMTE2NCw3IEBACiAKIAkJLypJbml0aWFsaXplIGl0YyBvZmZzZXQgZm9yIHZjcHVzKi8KIAkJaXRjX29mZnNldCA9IDBVTCAtIGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9JVEMpOwotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJCXYgPSAoc3RydWN0IGt2bV92Y3B1ICopKChjaGFyICopdmNwdSArCiAJCQkJCXNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHVfZGF0YSkgKiBpKTsKIAkJCXYtPmFyY2guaXRjX29mZnNldCA9IGl0Y19vZmZzZXQ7CkBAIC0xMjgzLDYgKzEyOTgsOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJa3ZtLT5hcmNoLm9ubGluZV92Y3B1cysrOworCiAJcmV0dXJuIHZjcHU7CiBmYWlsOgogCXJldHVybiBFUlJfUFRSKHIpOwpAQCAtMTMwMyw4ICsxMzIwLDggQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQlzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xNDIxLDYgKzE0MzgsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3N0YWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgIHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrICpzdGFjaykKK3sKKwltZW1jcHkoc3RhY2ssIHZjcHUsIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpOworCXJldHVybiAwOworfQorCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3RhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrKQoreworCW1lbWNweSh2Y3B1ICsgMSwgJnN0YWNrLT5zdGFja1swXSArIHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spIC0gc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpOworCisJdmNwdS0+YXJjaC5leGl0X2RhdGEgPSAoKHN0cnVjdCBrdm1fdmNwdSAqKXN0YWNrKS0+YXJjaC5leGl0X2RhdGE7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQga3ZtX2FyY2hfdmNwdV91bmluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCkBAIC0xNDMwLDkgKzE0NjQsNzggQEAKIAogCiBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCi0JCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCQkgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrID0gTlVMTDsKKwlsb25nIHI7CisKKwlzd2l0Y2ggKGlvY3RsKSB7CisJY2FzZSBLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSzogeworCQlzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayBfX3VzZXIgKnVzZXJfc3RhY2s7CisJICAgICAgICB2b2lkIF9fdXNlciAqZmlyc3RfcCA9IGFyZ3A7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl9zdGFjaywgZmlyc3RfcCwgc2l6ZW9mKHZvaWQgKikpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VyX3N0YWNrLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSzogIgorCQkJICAgICAgICJJbGxlZ2FsIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcyBmb3Igc3RhY2tcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YWNrKSB7CisJCQlyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3N0YWNrKHZjcHUsIHN0YWNrKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfc3RhY2ssIHN0YWNrLAorCQkJCSBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkKKwkJCWdvdG8gb3V0OworCisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9JQTY0X1ZDUFVfU0VUX1NUQUNLOiB7CisJCXN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIF9fdXNlciAqdXNlcl9zdGFjazsKKwkgICAgICAgIHZvaWQgX191c2VyICpmaXJzdF9wID0gYXJncDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3N0YWNrLCBmaXJzdF9wLCBzaXplb2Yodm9pZCAqKSkpCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9zdGFjaywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0s6ICIKKwkJCSAgICAgICAiSWxsZWdhbCB1c2VyIGFkZHJlc3MgZm9yIHN0YWNrXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXN0YWNrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGFjaykgeworCQkJciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoc3RhY2ssIHVzZXJfc3RhY2ssCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSkpCisJCQlnb3RvIG91dDsKKworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3RhY2sodmNwdSwgc3RhY2spOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlyID0gLUVJTlZBTDsKKwl9CisKK291dDoKKwlrZnJlZShzdGFjayk7CisJcmV0dXJuIHI7CiB9CiAKIGludCBrdm1fYXJjaF9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCkBAIC0xNDcyLDcgKzE1NzUsNyBAQAogfQogCiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xNzM3LDcgKzE4NDAsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqbHZjcHUgPSBrdm0tPnZjcHVzWzBdOwogCWludCBpOwogCi0JZm9yIChpID0gMTsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJaWYgKCFrdm0tPnZjcHVzW2ldKQogCQkJY29udGludWU7CiAJCWlmIChsdmNwdS0+YXJjaC54dHAgPiBrdm0tPnZjcHVzW2ldLT5hcmNoLnh0cCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMgYi9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCmluZGV4IGNiNzYwMGIuLmE4YWU1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm1fZncuYwpAQCAtMjI3LDYgKzIyNywxOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9yZWdpc3Rlcl9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcmVzdWx0ID0gezAsIDAsIDAsIDB9OworCWxvbmcgaW4wLCBpbjEsIGluMiwgaW4zOworCisJa3ZtX2dldF9wYWxfY2FsbF9kYXRhKHZjcHUsICZpbjAsICZpbjEsICZpbjIsICZpbjMpOworCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9yZWdpc3Rlcl9pbmZvKGluMSwgJnJlc3VsdC52MSwgJnJlc3VsdC52Mik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfY2FjaGVfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAKQEAgLTI2OCw4ICsyODAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF92bV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKIAotCUlOSVRfUEFMX1NUQVRVU19VTklNUExFTUVOVEVEKHJlc3VsdCk7CisJa3ZtX2dldF9wYWxfY2FsbF9kYXRhKHZjcHUsICZpbjAsICZpbjEsICZpbjIsICZpbjMpOworCisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZtX2luZm8oaW4xLCBpbjIsCisJCQkocGFsX3RjX2luZm9fdV90ICopJnJlc3VsdC52MSwgJnJlc3VsdC52Mik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjkyLDYgKzMwOCwxMDggQEAKIAl2Y3B1LT5hcmNoLnRpbWVyX2ZpcmVkID0gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3BlcmZfbW9uX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWxvbmcgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgaW4wLCBpbjEsIGluMiwgaW4zLCByOTsKKwl1bnNpZ25lZCBsb25nIHBtX2J1ZmZlclsxNl07CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJc3RhdHVzID0gaWE2NF9wYWxfcGVyZl9tb25faW5mbyhwbV9idWZmZXIsCisJCQkJKHBhbF9wZXJmX21vbl9pbmZvX3VfdCAqKSAmcjkpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyJQQUxfUEVSRl9NT05fSU5GTyBmYWlscyByZXQ9JWxkXG4iLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCWlmIChpbjEpCisJCQltZW1jcHkoKHZvaWQgKilpbjEsIHBtX2J1ZmZlciwgc2l6ZW9mKHBtX2J1ZmZlcikpOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IFBBTF9TVEFUVVNfRUlOVkFMOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyJJbnZhbGlkIHBhcmFtZXRlcnMgIgorCQkJCQkJImZvciBQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJCX0KKwl9CisJcmV0dXJuIChzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsKXtzdGF0dXMsIHI5LCAwLCAwfTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX2hhbHRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisJbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyByZXMgPSAxMDAwVUwgfCAoMTAwMFVMIDw8IDE2KSB8ICgxMFVMIDw8IDMyKQorCQkJCQl8ICgxVUwgPDwgNjEpIHwgKDFVTCA8PCA2MCk7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJaWYgKGluMSkgeworCQltZW1jcHkoKHZvaWQgKilpbjEsICZyZXMsIHNpemVvZihyZXMpKTsKKwkJc3RhdHVzID0gMDsKKwl9IGVsc2V7CisJCXN0YXR1cyA9IFBBTF9TVEFUVVNfRUlOVkFMOworCQlwcmludGsoS0VSTl9XQVJOSU5HIkludmFsaWQgcGFyYW1ldGVycyAiCisJCQkJCSJmb3IgUEFMIGNhbGw6MHglbHghXG4iLCBpbjApOworCX0KKworCXJldHVybiAoc3RydWN0IGlhNjRfcGFsX3JldHZhbCl7c3RhdHVzLCAwLCAwLCAwfTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX21lbV9hdHRyaWIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGxvbmcgcjk7CisJbG9uZyBzdGF0dXM7CisKKwlzdGF0dXMgPSBpYTY0X3BhbF9tZW1fYXR0cmliKCZyOSk7CisKKwlyZXR1cm4gKHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwpe3N0YXR1cywgcjksIDAsIDB9OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodm9pZCAqdikKK3sKKwlzNjQgdHJhbnNfdHlwZSA9IChzNjQpdjsKKwlpYTY0X3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5KHRyYW5zX3R5cGUpOworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisJa3ZtX2dldF9wYWxfY2FsbF9kYXRhKHZjcHUsICZpbjAsICZpbjEsICZpbjIsICZpbjMpOworCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5KGluMSk7CisJaWYgKHJlc3VsdC5zdGF0dXMgPT0gMCkgeworCQkvKiBNdXN0IGJlIHBlcmZvcm1lZCBvbiBhbGwgcmVtb3RlIHByb2Nlc3NvcnMKKwkJaW4gdGhlIGNvaGVyZW5jZSBkb21haW4uICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlbW90ZV9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSwKKwkJCQkJKHZvaWQgKilpbjEsIDEpOworCQkvKiBVbm5lY2Vzc2FyeSBvbiByZW1vdGUgcHJvY2Vzc29yIGZvciBvdGhlciB2Y3B1cyEqLworCQlyZXN1bHQuc3RhdHVzID0gMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgcmVtb3RlX3BhbF9tY19kcmFpbih2b2lkICp2KQoreworCWlhNjRfcGFsX21jX2RyYWluKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9nZXRfYnJhbmRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisKKwlpZiAoaW4xID09IDAgJiYgaW4yKSB7CisJCWNoYXIgYnJhbmRfaW5mb1sxMjhdOworCQlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfZ2V0X2JyYW5kX2luZm8oYnJhbmRfaW5mbyk7CisJCWlmIChyZXN1bHQuc3RhdHVzID09IFBBTF9TVEFUVVNfU1VDQ0VTUykKKwkJCW1lbWNweSgodm9pZCAqKWluMiwgYnJhbmRfaW5mbywgMTI4KTsKKwl9IGVsc2UgeworCQlyZXN1bHQuc3RhdHVzID0gUEFMX1NUQVRVU19SRVFVSVJFU19NRU1PUlk7CisJCXByaW50ayhLRVJOX1dBUk5JTkciSW52YWxpZCBwYXJhbWV0ZXJzIGZvciAiCisJCQkJCSJQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwogaW50IGt2bV9wYWxfZW11bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pCiB7CiAKQEAgLTMwMCwxNCArNDE4LDIyIEBACiAJaW50IHJldCA9IDE7CiAKIAlncjI4ID0ga3ZtX2dldF9wYWxfY2FsbF9pbmRleCh2Y3B1KTsKLQkvKnByaW50aygicGFsX2NhbGwgaW5kZXg6JWx4XG4iLGdyMjgpOyovCiAJc3dpdGNoIChncjI4KSB7CiAJY2FzZSBQQUxfQ0FDSEVfRkxVU0g6CiAJCXJlc3VsdCA9IHBhbF9jYWNoZV9mbHVzaCh2Y3B1KTsKIAkJYnJlYWs7CisJY2FzZSBQQUxfTUVNX0FUVFJJQjoKKwkJcmVzdWx0ID0gcGFsX21lbV9hdHRyaWIodmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX0NBQ0hFX1NVTU1BUlk6CiAJCXJlc3VsdCA9IHBhbF9jYWNoZV9zdW1tYXJ5KHZjcHUpOwogCQlicmVhazsKKwljYXNlIFBBTF9QRVJGX01PTl9JTkZPOgorCQlyZXN1bHQgPSBwYWxfcGVyZl9tb25faW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfSEFMVF9JTkZPOgorCQlyZXN1bHQgPSBwYWxfaGFsdF9pbmZvKHZjcHUpOworCQlicmVhazsKIAljYXNlIFBBTF9IQUxUX0xJR0hUOgogCXsKIAkJSU5JVF9QQUxfU1RBVFVTX1NVQ0NFU1MocmVzdWx0KTsKQEAgLTMxNyw2ICs0NDMsMTYgQEAKIAl9CiAJCWJyZWFrOwogCisJY2FzZSBQQUxfUFJFRkVUQ0hfVklTSUJJTElUWToKKwkJcmVzdWx0ID0gcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodmNwdSk7CisJCWJyZWFrOworCWNhc2UgUEFMX01DX0RSQUlOOgorCQlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfbWNfZHJhaW4oKTsKKwkJLyogRklYTUU6IEFsbCB2Y3B1cyBsaWtlbHkgY2FsbCBQQUxfTUNfRFJBSU4uCisJCSAgIFRoYXQgY2F1c2VzIHRoZSBjb25nZXN0aW9uLiAqLworCQlzbXBfY2FsbF9mdW5jdGlvbihyZW1vdGVfcGFsX21jX2RyYWluLCBOVUxMLCAxKTsKKwkJYnJlYWs7CisKIAljYXNlIFBBTF9GUkVRX1JBVElPUzoKIAkJcmVzdWx0ID0gcGFsX2ZyZXFfcmF0aW9zKHZjcHUpOwogCQlicmVhazsKQEAgLTM0Niw2ICs0ODIsOSBAQAogCQlJTklUX1BBTF9TVEFUVVNfU1VDQ0VTUyhyZXN1bHQpOwogCQlyZXN1bHQudjEgPSAoMUwgPDwgMzIpIHwgMUw7CiAJCWJyZWFrOworCWNhc2UgUEFMX1JFR0lTVEVSX0lORk86CisJCXJlc3VsdCA9IHBhbF9yZWdpc3Rlcl9pbmZvKHZjcHUpOworCQlicmVhazsKIAljYXNlIFBBTF9WTV9QQUdFX1NJWkU6CiAJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF92bV9wYWdlX3NpemUoJnJlc3VsdC52MCwKIAkJCQkJCQkmcmVzdWx0LnYxKTsKQEAgLTM2NSwxMiArNTA0LDE4IEBACiAJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF92ZXJzaW9uKAogCQkJCShwYWxfdmVyc2lvbl91X3QgKikmcmVzdWx0LnYwLAogCQkJCShwYWxfdmVyc2lvbl91X3QgKikmcmVzdWx0LnYxKTsKLQogCQlicmVhazsKIAljYXNlIFBBTF9GSVhFRF9BRERSOgogCQlyZXN1bHQuc3RhdHVzID0gUEFMX1NUQVRVU19TVUNDRVNTOwogCQlyZXN1bHQudjAgPSB2Y3B1LT52Y3B1X2lkOwogCQlicmVhazsKKwljYXNlIFBBTF9CUkFORF9JTkZPOgorCQlyZXN1bHQgPSBwYWxfZ2V0X2JyYW5kX2luZm8odmNwdSk7CisJCWJyZWFrOworCWNhc2UgUEFMX0dFVF9QU1RBVEU6CisJY2FzZSBQQUxfQ0FDSEVfU0hBUkVEX0lORk86CisJCUlOSVRfUEFMX1NUQVRVU19VTklNUExFTUVOVEVEKHJlc3VsdCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUlOSVRfUEFMX1NUQVRVU19VTklNUExFTUVOVEVEKHJlc3VsdCk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcia3ZtOiBVbnN1cHBvcnRlZCBwYWwgY2FsbCwiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCmluZGV4IDIzMGVhZTQuLmIxZGM4MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCkBAIC0xNjcsNyArMTY3LDYgQEAKIAlyZXR1cm4gKHJyMS52YWwpOwogfQogCi0KIC8qCiAgKiBTZXQgdklGQSAmIHZJVElSICYgdklIQSwgd2hlbiB2UFNSLmljID0xCiAgKiBQYXJhbWV0ZXI6CkBAIC0yMjIsOCArMjIxLDYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfSU5TVF9UTEJfVkVDVE9SKTsKIH0KIAotCi0KIC8qCiAgKiBEYXRhIE5lc3RlZCBUTEIgRmF1bHQKICAqICBAIERhdGEgTmVzdGVkIFRMQiBWZWN0b3IKQEAgLTI0NSw3ICsyNDIsNiBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgSUE2NF9BTFRfREFUQV9UTEJfVkVDVE9SKTsKIH0KIAotCiAvKgogICogRGF0YSBUTEIgRmF1bHQKICAqICBAIERhdGEgVExCIHZlY3RvcgpAQCAtMjY1LDggKzI2MSw2IEBACiAJLyogSWYgdlBTUi5pYywgSUZBLCBJVElSLCBJSEEqLwogCXNldF9pZmFfaXRpcl9paGEodmNwdSwgdmFkciwgMSwgMSwgMSk7CiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X1ZIUFRfVFJBTlNfVkVDVE9SKTsKLQotCiB9CiAKIC8qCkBAIC0yNzksNyArMjczLDYgQEAKIAlfdmhwdF9mYXVsdCh2Y3B1LCB2YWRyKTsKIH0KIAotCiAvKgogICogVkhQVCBEYXRhIEZhdWx0CiAgKiAgQCBWSFBUIFRyYW5zbGF0aW9uIHZlY3RvcgpAQCAtMjkwLDggKzI4Myw2IEBACiAJX3ZocHRfZmF1bHQodmNwdSwgdmFkcik7CiB9CiAKLQotCiAvKgogICogRGVhbCB3aXRoOgogICogIEdlbmVyYWwgRXhjZXB0aW9uIHZlY3RvcgpAQCAtMzAxLDcgKzI5Miw2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X0dFTkVYX1ZFQ1RPUik7CiB9CiAKLQogLyoKICAqIElsbGVnYWwgT3BlcmF0aW9uIEZhdWx0CiAgKiAgQCBHZW5lcmFsIEV4Y2VwdGlvbiBWZWN0b3IKQEAgLTQxOSwxOSArNDA5LDE2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X1BBR0VfTk9UX1BSRVNFTlRfVkVDVE9SKTsKIH0KIAotCiB2b2lkIGRhdGFfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWRyKQogewogCV9fcGFnZV9ub3RfcHJlc2VudCh2Y3B1LCB2YWRyKTsKIH0KIAotCiB2b2lkIGluc3RfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWRyKQogewogCV9fcGFnZV9ub3RfcHJlc2VudCh2Y3B1LCB2YWRyKTsKIH0KIAotCiAvKiBEZWFsIHdpdGgKICAqICBEYXRhIGFjY2VzcyByaWdodHMgdmVjdG9yCiAgKi8KQEAgLTU2MywyMiArNTUwLDY0IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCB2ZWN0b3IpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fdHJhbnNfcGFsX2NhbGxfYXJncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdGhhc2hfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGdwYSwgcG9mZjsKKworCWlmICghaXNfcGh5c2ljYWxfbW9kZSh2Y3B1KSkgeworCQkvKiBEZXBlbmRzIG9uIGNhbGxlciB0byBwcm92aWRlIHRoZSBEVFIgb3IgRFRDIG1hcHBpbmcuKi8KKwkJZGF0YSA9IHZ0bGJfbG9va3VwKHZjcHUsIGFyZywgRF9UTEIpOworCQlpZiAoZGF0YSkKKwkJCWdwYSA9IGRhdGEtPnBhZ2VfZmxhZ3MgJiBfUEFHRV9QUE5fTUFTSzsKKwkJZWxzZSB7CisJCQlkYXRhID0gdmhwdF9sb29rdXAoYXJnKTsKKwkJCWlmICghZGF0YSkKKwkJCQlyZXR1cm4gMDsKKwkJCWdwYSA9IGRhdGEtPmdwYWRkciAmIF9QQUdFX1BQTl9NQVNLOworCQl9CisKKwkJcG9mZiA9IGFyZyAmIChQU0laRShkYXRhLT5wcykgLSAxKTsKKwkJYXJnID0gUEFHRUFMSUdOKGdwYSwgZGF0YS0+cHMpIHwgcG9mZjsKKwl9CisJYXJnID0ga3ZtX2dwYV90b19tcGEoYXJnIDw8IDEgPj4gMSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX192YShhcmcpOworfQorCiBzdGF0aWMgdm9pZCBzZXRfcGFsX2NhbGxfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnAgPSAmdmNwdS0+YXJjaC5leGl0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBncjI4ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjgpOworCXVuc2lnbmVkIGxvbmcgZ3IyOSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI5KTsKKwl1bnNpZ25lZCBsb25nIGdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CiAKIAkvKkZJWE1FOkZvciBzdGF0aWMgYW5kIHN0YWNrZWQgY29udmVudGlvbiwgZmlybXdhcmUKIAkgKiBoYXMgcHV0IHRoZSBwYXJhbWV0ZXJzIGluIGdyMjgtZ3IzMSBiZWZvcmUKIAkgKiBicmVhayB0byB2bW0gICEhKi8KIAotCXAtPnUucGFsX2RhdGEuZ3IyOCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI4KTsKLQlwLT51LnBhbF9kYXRhLmdyMjkgPSB2Y3B1X2dldF9ncih2Y3B1LCAyOSk7Ci0JcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCXN3aXRjaCAoZ3IyOCkgeworCWNhc2UgUEFMX1BFUkZfTU9OX0lORk86CisJY2FzZSBQQUxfSEFMVF9JTkZPOgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSAga3ZtX3RyYW5zX3BhbF9jYWxsX2FyZ3ModmNwdSwgZ3IyOSk7CisJCXAtPnUucGFsX2RhdGEuZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfQlJBTkRfSU5GTzoKKwkJcC0+dS5wYWxfZGF0YS5ncjI5ID0gZ3IyOTs7CisJCXAtPnUucGFsX2RhdGEuZ3IzMCA9IGt2bV90cmFuc19wYWxfY2FsbF9hcmdzKHZjcHUsIGdyMzApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSBncjI5OzsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCX0KKwlwLT51LnBhbF9kYXRhLmdyMjggPSBncjI4OwogCXAtPnUucGFsX2RhdGEuZ3IzMSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMxKTsKKwogCXAtPmV4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fUEFMX0NBTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wYWxfY2FsbF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZ2V0X3BhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnAgPSAmdmNwdS0+YXJjaC5leGl0X2RhdGE7CiAKQEAgLTYwNiw3ICs2MzUsNyBAQAogCXAtPmV4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fU0FMX0NBTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zYWxfY2FsbF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZ2V0X3NhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnAgPSAmdmNwdS0+YXJjaC5leGl0X2RhdGE7CiAKQEAgLTYyOSwxMyArNjU4LDEzIEBACiAJCWlmIChpaW0gPT0gRE9NTl9QQUxfUkVRVUVTVCkgewogCQkJc2V0X3BhbF9jYWxsX2RhdGEodik7CiAJCQl2bW1fdHJhbnNpdGlvbih2KTsKLQkJCXNldF9wYWxfY2FsbF9yZXN1bHQodik7CisJCQlnZXRfcGFsX2NhbGxfcmVzdWx0KHYpOwogCQkJdmNwdV9pbmNyZW1lbnRfaWlwKHYpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYgKGlpbSA9PSBET01OX1NBTF9SRVFVRVNUKSB7CiAJCQlzZXRfc2FsX2NhbGxfZGF0YSh2KTsKIAkJCXZtbV90cmFuc2l0aW9uKHYpOwotCQkJc2V0X3NhbF9jYWxsX3Jlc3VsdCh2KTsKKwkJCWdldF9zYWxfY2FsbF9yZXN1bHQodik7CiAJCQl2Y3B1X2luY3JlbWVudF9paXAodik7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTcwMyw3ICs3MzIsNiBAQAogCX0KIH0KIAotCiB2b2lkIGxlYXZlX2h5cGVydmlzb3JfdGFpbCh2b2lkKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdiA9IGN1cnJlbnRfdmNwdTsKQEAgLTczNyw3ICs3NjUsNiBAQAogCX0KIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2xkcyhzdHJ1Y3Qga3ZtX3B0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVncy0+Y3JfaXBzciB8PSBJQTY0X1BTUl9FRDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKaW5kZXggZWNkNTI2Yi4uZDRkMjgwNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKQEAgLTExMiw3ICsxMTIsNiBAQAogCXJldHVybjsKIH0KIAotCiB2b2lkIHN3aXRjaF90b192aXJ0dWFsX3JpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBwc3I7CkBAIC0xNjYsOCArMTY1LDYgQEAKIAlyZXR1cm47CiB9CiAKLQotCiAvKgogICogSW4gcGh5c2ljYWwgbW9kZSwgaW5zZXJ0IHRjL3RyIGZvciByZWdpb24gMCBhbmQgNCB1c2VzCiAgKiBSSURbMF0gYW5kIFJJRFs0XSB3aGljaCBpcyBmb3IgcGh5c2ljYWwgbW9kZSBlbXVsYXRpb24uCkBAIC0yNjksNyArMjY2LDYgQEAKIAlyZXR1cm4gcm90YXRlX3JlZyg5NiwgcnJiX2ZyLCAocmVnbnVtIC0gSUE2NF9GSVJTVF9ST1RBVElOR19GUikpOwogfQogCi0KIC8qCiAgKiBUaGUgaW52ZXJzZSBvZiB0aGUgYWJvdmU6IGdpdmVuIGJzcHN0b3JlIGFuZCB0aGUgbnVtYmVyIG9mCiAgKiByZWdpc3RlcnMsIGNhbGN1bGF0ZSBhci5ic3AuCkBAIC04MTEsMTIgKzgwNywxNSBAQAogc3RhdGljIHZvaWQgdmNwdV9zZXRfaXRjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnY7CisJc3RydWN0IGt2bSAqa3ZtOwogCWludCBpOwogCWxvbmcgaXRjX29mZnNldCA9IHZhbCAtIGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9JVEMpOwogCXVuc2lnbmVkIGxvbmcgdml0diA9IFZDUFUodmNwdSwgaXR2KTsKIAorCWt2bSA9IChzdHJ1Y3Qga3ZtICopS1ZNX1ZNX0JBU0U7CisKIAlpZiAodmNwdS0+dmNwdV9pZCA9PSAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJVk1YKHYsIGl0Y19vZmZzZXQpID0gaXRjX29mZnNldDsKQEAgLTEwMzksOCArMTAzOCw2IEBACiAJcmV0dXJuIGtleTsKIH0KIAotCi0KIHZvaWQga3ZtX3RoYXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyB0aGFzaCwgdmFkcjsKQEAgLTEwNTAsNyArMTA0Nyw2IEBACiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NNDYucjEsIHRoYXNoLCAwKTsKIH0KIAotCiB2b2lkIGt2bV90dGFnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyB0YWcsIHZhZHI7CkBAIC0xMTMxLDcgKzExMjcsNiBAQAogCXJldHVybiBJQTY0X05PX0ZBVUxUOwogfQogCi0KIGludCBrdm1fdHBhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMSwgcjM7CkBAIC0xMTU0LDcgKzExNDksNiBAQAogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTQ2LnIxLCByMSwgMCk7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5zZXJ0L1B1cmdlIHRyYW5zbGF0aW9uIHJlZ2lzdGVyL2NhY2hlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTM4NSw3ICsxMzc5LDYgQEAKIAl2Y3B1X3NldF9pdGModmNwdSwgcjIpOwogfQogCi0KIHZvaWQga3ZtX21vdl9mcm9tX2FyX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjE7CkBAIC0xMzkzLDggKzEzODYsOSBAQAogCXIxID0gdmNwdV9nZXRfaXRjKHZjcHUpOwogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTMxLnIxLCByMSwgMCk7CiB9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBzdHJ1Y3Qga3ZtX3ZjcHUqcHJvdGVjdGlvbiBrZXkgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzCisgIHN0cnVjdCBrdm1fdmNwdSBwcm90ZWN0aW9uIGtleSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9wa3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJlZykKQEAgLTE0MDcsMjAgKzE0MDEsNiBAQAogCWlhNjRfc2V0X3BrcihyZWcsIHZhbCk7CiB9CiAKLQotdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9pdGlyX29uX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBpZmEpCi17Ci0JdW5pb24gaWE2NF9yciByciwgcnIxOwotCi0JcnIudmFsID0gdmNwdV9nZXRfcnIodmNwdSwgaWZhKTsKLQlycjEudmFsID0gMDsKLQlycjEucHMgPSByci5wczsKLQlycjEucmlkID0gcnIucmlkOwotCXJldHVybiAocnIxLnZhbCk7Ci19Ci0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1vdmVzIHRvIHByaXZpbGVnZWQgcmVnaXN0ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDY0LDggKzE0NDQsNiBAQAogCXJldHVybiAoSUE2NF9OT19GQVVMVCk7CiB9CiAKLQotCiB2b2lkIGt2bV9tb3ZfdG9fcnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIzLCByMjsKQEAgLTE1MTAsOCArMTQ4OCw2IEBACiAJdmNwdV9zZXRfcGtyKHZjcHUsIHIzLCByMik7CiB9CiAKLQotCiB2b2lkIGt2bV9tb3ZfZnJvbV9ycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjMsIHIxOwpAQCAtMTU1Nyw3ICsxNTMzLDYgQEAKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk00My5yMSwgcjEsIDApOwogfQogCi0KIHVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJlZykKIHsKIAkvKiBGSVhNRTogVGhpcyBjb3VsZCBnZXQgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIGEgcnN2ZC1yZWcgZmF1bHQgKi8KQEAgLTE2MDksNyArMTU4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogdW5zaWduZWQgbG9uZyBrdm1fbW92X2Zyb21fY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRndCA9IGluc3QuTTMzLnIxOwpAQCAtMTYzMyw4ICsxNjA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0KIHZvaWQgdmNwdV9zZXRfcHNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAKQEAgLTE3NzYsOSArMTc0OCw2IEBACiAJfQogfQogCi0KLQotCiB2b2lkIHZjcHVfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmcywgcHNyOwpAQCAtMTc5Niw3ICsxNzY1LDYgQEAKIAlyZWdzLT5jcl9paXAgPSBWQ1BVKHZjcHUsIGlpcCk7CiB9CiAKLQogLyoKICAgIFZQU1IgY2FuJ3Qga2VlcCB0cmFjayBvZiBiZWxvdyBiaXRzIG9mIGd1ZXN0IFBTUgogICAgVGhpcyBmdW5jdGlvbiBnZXRzIGd1ZXN0IFBTUgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmggYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaAppbmRleCBiMmYxMmE1Li4wNDJhZjkyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaAorKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaApAQCAtNzAzLDcgKzcwMyw3IEBACiBleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9lbnRyaWVzKHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHZhLCB1NjQgcHMpOwogZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfZW50cmllc19yZW1vdGUoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIHU2NCBwcyk7CiBleHRlcm4gdTY0IHRyYW5zbGF0ZV9waHlfcHRlKHU2NCAqcHRlLCB1NjQgaXRpciwgdTY0IHZhKTsKLWV4dGVybiBpbnQgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsCitleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwKIAkJdTY0IGl0aXIsIHU2NCBpZmEsIGludCB0eXBlKTsKIGV4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpOwogZXh0ZXJuIHN0cnVjdCB0aGFzaF9kYXRhICp2dGxiX2xvb2t1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsCkBAIC03MzgsNyArNzM4LDcgQEAKIHZvaWQgdGhhc2hfaW5pdChzdHJ1Y3QgdGhhc2hfY2IgKmhjYiwgdTY0IHN6KTsKIAogdm9pZCBwYW5pY192bShzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLQordTY0IGt2bV9ncGFfdG9fbXBhKHU2NCBncGEpOwogZXh0ZXJuIHU2NCBpYTY0X2NhbGxfdnNhKHU2NCBwcm9jLCB1NjQgYXJnMSwgdTY0IGFyZzIsIHU2NCBhcmczLAogCQl1NjQgYXJnNCwgdTY0IGFyZzUsIHU2NCBhcmc2LCB1NjQgYXJnNyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKaW5kZXggNmI2MzA3YS4uMzgyMzJiMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92dGxiLmMKKysrIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKQEAgLTE2NCwxMSArMTY0LDExIEBACiAJdW5zaWduZWQgbG9uZyBwcywgZ3BhZGRyOwogCiAJcHMgPSBpdGlyX3BzKGl0aXIpOwotCi0JZ3BhZGRyID0gKChncHRlICYgX1BBR0VfUFBOX01BU0spID4+IHBzIDw8IHBzKSB8Ci0JCShpZmEgJiAoKDFVTCA8PCBwcykgLSAxKSk7Ci0KIAlyci52YWwgPSBpYTY0X2dldF9ycihpZmEpOworCisJIGdwYWRkciA9ICgoZ3B0ZSAmIF9QQUdFX1BQTl9NQVNLKSA+PiBwcyA8PCBwcykgfAorCQkJCQkoaWZhICYgKCgxVUwgPDwgcHMpIC0gMSkpOworCiAJaGVhZCA9IChzdHJ1Y3QgdGhhc2hfZGF0YSAqKWlhNjRfdGhhc2goaWZhKTsKIAloZWFkLT5ldGFnID0gSU5WQUxJRF9USV9UQUc7CiAJaWE2NF9tZigpOwpAQCAtNDEyLDE2ICs0MTIsMTQgQEAKIAogLyoKICAqIFB1cmdlIG92ZXJsYXAgVENzIGFuZCB0aGVuIGluc2VydCB0aGUgbmV3IGVudHJ5IHRvIGVtdWxhdGUgaXRjIG9wcy4KLSAqICAgIE5vdGVzOiBPbmx5IFRDIGVudHJ5IGNhbiBwdXJnZSBhbmQgaW5zZXJ0LgotICogICAgMSBpbmRpY2F0ZXMgdGhpcyBpcyBNTUlPCisgKiBOb3RlczogT25seSBUQyBlbnRyeSBjYW4gcHVyZ2UgYW5kIGluc2VydC4KICAqLwotaW50IHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLCB1NjQgaXRpciwKK3ZvaWQgIHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLCB1NjQgaXRpciwKIAkJCQkJCXU2NCBpZmEsIGludCB0eXBlKQogewogCXU2NCBwczsKIAl1NjQgcGh5X3B0ZSwgaW9fbWFzaywgaW5kZXg7CiAJdW5pb24gaWE2NF9yciB2cnIsIG1ycjsKLQlpbnQgcmV0ID0gMDsKIAogCXBzID0gaXRpcl9wcyhpdGlyKTsKIAl2cnIudmFsID0gdmNwdV9nZXRfcnIodiwgaWZhKTsKQEAgLTQ0MSwyNSArNDM5LDE5IEBACiAJCXBoeV9wdGUgJj0gfl9QQUdFX01BX01BU0s7CiAJfQogCi0JaWYgKHB0ZSAmIFZUTEJfUFRFX0lPKQotCQlyZXQgPSAxOwotCiAJdnRsYl9wdXJnZSh2LCBpZmEsIHBzKTsKIAl2aHB0X3B1cmdlKHYsIGlmYSwgcHMpOwogCi0JaWYgKHBzID09IG1yci5wcykgewotCQlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKSB7Ci0JCQl2aHB0X2luc2VydChwaHlfcHRlLCBpdGlyLCBpZmEsIHB0ZSk7Ci0JCX0gZWxzZSB7Ci0JCQl2dGxiX2luc2VydCh2LCBwdGUsIGl0aXIsIGlmYSk7Ci0JCQl2Y3B1X3F1aWNrX3JlZ2lvbl9zZXQoVk1YKHYsIHRjX3JlZ2lvbnMpLCBpZmEpOwotCQl9Ci0JfSBlbHNlIGlmIChwcyA+IG1yci5wcykgeworCWlmICgocHMgIT0gbXJyLnBzKSB8fCAocHRlICYgVlRMQl9QVEVfSU8pKSB7CiAJCXZ0bGJfaW5zZXJ0KHYsIHB0ZSwgaXRpciwgaWZhKTsKIAkJdmNwdV9xdWlja19yZWdpb25fc2V0KFZNWCh2LCB0Y19yZWdpb25zKSwgaWZhKTsKLQkJaWYgKCEocHRlJlZUTEJfUFRFX0lPKSkKLQkJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKLQl9IGVsc2UgeworCX0KKwlpZiAocHRlICYgVlRMQl9QVEVfSU8pCisJCXJldHVybjsKKworCWlmIChwcyA+PSBtcnIucHMpCisJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKKwllbHNlIHsKIAkJdTY0IHBzcjsKIAkJcGh5X3B0ZSAgJj0gflBBR0VfRkxBR1NfUlZfTUFTSzsKIAkJcHNyID0gaWE2NF9jbGVhcl9pYygpOwpAQCAtNDY5LDcgKzQ2MSw2IEBACiAJaWYgKCEocHRlJlZUTEJfUFRFX0lPKSkKIAkJbWFya19wYWdlc19kaXJ0eSh2LCBwdGUsIHBzKTsKIAotCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC01MDksNyArNTAwLDYgQEAKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiB9CiAKLQogLyoKICAqIExvb2t1cCB0aGUgaGFzaCB0YWJsZSBhbmQgaXRzIGNvbGxpc2lvbiBjaGFpbiB0byBmaW5kIGFuIGVudHJ5CiAgKiBjb3ZlcmluZyB0aGlzIGFkZHJlc3MgcmlkOnZhIG9yIHRoZSBlbnRyeS4KQEAgLTUxNyw3ICs1MDcsNiBAQAogICogSU5QVVQ6CiAgKiAgaW46IFRMQiBmb3JtYXQgZm9yIGJvdGggVkhQVCAmIFRMQi4KICAqLwotCiBzdHJ1Y3QgdGhhc2hfZGF0YSAqdnRsYl9sb29rdXAoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIGludCBpc19kYXRhKQogewogCXN0cnVjdCB0aGFzaF9kYXRhICAqY2NoOwpAQCAtNTQ3LDcgKzUzNiw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLQogLyoKICAqIEluaXRpYWxpemUgaW50ZXJuYWwgY29udHJvbCBkYXRhIGJlZm9yZSBzZXJ2aWNlLgogICovCkBAIC01NzMsNiArNTYxLDEwIEBACiB1NjQga3ZtX2dldF9tcHRfZW50cnkodTY0IGdwZm4pCiB7CiAJdTY0ICpiYXNlID0gKHU2NCAqKSBLVk1fUDJNX0JBU0U7CisKKwlpZiAoZ3BmbiA+PSAoS1ZNX1AyTV9TSVpFID4+IDMpKQorCQlwYW5pY192bShjdXJyZW50X3ZjcHUsICJJbnZhbGlkIGdwZm4gPSVseFxuIiwgZ3Bmbik7CisKIAlyZXR1cm4gKihiYXNlICsgZ3Bmbik7CiB9CiAKQEAgLTU4OSw3ICs1ODEsNiBAQAogCXJldHVybiAocHRlID4+IFBBR0VfU0hJRlQgPDwgUEFHRV9TSElGVCkgfCAoZ3BhICYgflBBR0VfTUFTSyk7CiB9CiAKLQogLyoKICAqIEZldGNoIGd1ZXN0IGJ1bmRsZSBjb2RlLgogICogSU5QVVQ6CkBAIC02MzEsNyArNjIyLDYgQEAKIAlyZXR1cm4gSUE2NF9OT19GQVVMVDsKIH0KIAotCiB2b2lkIGt2bV9pbml0X3ZocHQoc3RydWN0IGt2bV92Y3B1ICp2KQogewogCXYtPmFyY2gudmhwdC5udW0gPSBWSFBUX05VTV9FTlRSSUVTOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggMmFlYWU0Ni4uOGRmZDMxZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC00OSw3ICs0OSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9NYWtlZmlsZSBiL2FyY2gvbTY4ay9NYWtlZmlsZQppbmRleCA4MTMzZGJjLi41NzBkODVjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL01ha2VmaWxlCkBAIC0xMTcsMyArMTE3LDYgQEAKIAogYXJjaGNsZWFuOgogCXJtIC1mIHZtbGludXguZ3ogdm1saW51eC5iejIKKworaW5zdGFsbDoKKwlzaCAkKHNyY3RyZWUpL2FyY2gvbTY4ay9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgdm1saW51eC5neiBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmgKaW5kZXggMjI2YmZjMC4uMGNhYjQyYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIAogLyoKQEAgLTgwLDcgKzgxLDcgQEAKICAqIGludGVycnVwdCBzb3VyY2UgKGlmIGl0IHN1cHBvcnRzIGNoYWluaW5nKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgaXJxX25vZGUgewotCWludAkJKCpoYW5kbGVyKShpbnQsIHZvaWQgKik7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKik7CiAJdm9pZAkJKmRldl9pZDsKIAlzdHJ1Y3QgaXJxX25vZGUgKm5leHQ7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAppbmRleCAwNTMwOWY3Li41MGRiMzU5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCkBAIC0zNCw2ICszNCw3IEBACiAJY2hhciBzY2NfdHlwZTsKIAljaGFyIGV0aGVyX3R5cGU7CiAJY2hhciBudWJ1c190eXBlOworCWNoYXIgZmxvcHB5X3R5cGU7CiB9OwogCiAjZGVmaW5lIE1BQ19BREJfTk9ORQkJMApAQCAtNzEsNiArNzIsMTIgQEAKICNkZWZpbmUgTUFDX05PX05VQlVTCQkwCiAjZGVmaW5lIE1BQ19OVUJVUwkJMQogCisjZGVmaW5lIE1BQ19GTE9QUFlfSVdNCQkwCisjZGVmaW5lIE1BQ19GTE9QUFlfU1dJTV9BRERSMQkxCisjZGVmaW5lIE1BQ19GTE9QUFlfU1dJTV9BRERSMgkyCisjZGVmaW5lIE1BQ19GTE9QUFlfU1dJTV9JT1AJMworI2RlZmluZSBNQUNfRkxPUFBZX0FWCQk0CisKIC8qCiAgKglHZXN0YWx0IG51bWJlcnMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGRiYzY0ZTkuLmNhODdmOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5zdGFsbC5zaCBiL2FyY2gvbTY4ay9pbnN0YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNmJhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaW5zdGFsbC5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTUgYnkgTGludXMgVG9ydmFsZHMKKyMKKyMgQWRhcHRlZCBmcm9tIGNvZGUgaW4gYXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUgYnkgSC4gUGV0ZXIgQW52aW4KKyMKKyMgIm1ha2UgaW5zdGFsbCIgc2NyaXB0IGZvciBtNjhrIGFyY2hpdGVjdHVyZQorIworIyBBcmd1bWVudHM6CisjICAgJDEgLSBrZXJuZWwgdmVyc2lvbgorIyAgICQyIC0ga2VybmVsIGltYWdlIGZpbGUKKyMgICAkMyAtIGtlcm5lbCBtYXAgZmlsZQorIyAgICQ0IC0gZGVmYXVsdCBpbnN0YWxsIHBhdGggKGJsYW5rIGlmIHJvb3QgZGlyZWN0b3J5KQorIworCit2ZXJpZnkgKCkgeworCWlmIFsgISAtZiAiJDEiIF07IHRoZW4KKwkJZWNobyAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZWNobyAiICoqKiBNaXNzaW5nIGZpbGU6ICQxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZWNobyAnICoqKiBZb3UgbmVlZCB0byBydW4gIm1ha2UiIGJlZm9yZSAibWFrZSBpbnN0YWxsIi4nIDE+JjIKKwkJZWNobyAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE+JjIKKwkJZXhpdCAxCisJZmkKK30KKworIyBNYWtlIHN1cmUgdGhlIGZpbGVzIGFjdHVhbGx5IGV4aXN0Cit2ZXJpZnkgIiQyIgordmVyaWZ5ICIkMyIKKworIyBVc2VyIG1heSBoYXZlIGEgY3VzdG9tIGluc3RhbGwgc2NyaXB0CisKK2lmIFsgLXggfi9iaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgXTsgdGhlbiBleGVjIH4vYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsICIkQCI7IGZpCitpZiBbIC14IC9zYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsIF07IHRoZW4gZXhlYyAvc2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCAiJEAiOyBmaQorCisjIERlZmF1bHQgaW5zdGFsbCAtIHNhbWUgYXMgbWFrZSB6bGlsbworCitpZiBbIC1mICQ0L3ZtbGludXogXTsgdGhlbgorCW12ICQ0L3ZtbGludXogJDQvdm1saW51ei5vbGQKK2ZpCisKK2lmIFsgLWYgJDQvU3lzdGVtLm1hcCBdOyB0aGVuCisJbXYgJDQvU3lzdGVtLm1hcCAkNC9TeXN0ZW0ub2xkCitmaQorCitjYXQgJDIgPiAkNC92bWxpbnV6CitjcCAkMyAkNC9TeXN0ZW0ubWFwCisKK3N5bmMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCmluZGV4IDk4YjZiY2YuLmJlMDE3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMjIsNiArMjIsNyBAQAogLyoga2V5YiAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDMsNiArNDQsMTAgQEAKICNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNfcHNjLmg+CiAKKy8qIHBsYXRmb3JtIGRldmljZSBpbmZvICovCisKKyNkZWZpbmUgU1dJTV9JT19TSVpFIDB4MjAwMAkvKiBTV0lNIElPIHJlc291cmNlIHNpemUgKi8KKwogLyogTWFjIGJvb3RpbmZvIHN0cnVjdCAqLwogCiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhIG1hY19iaV9kYXRhOwpAQCAtMjI0LDcgKzIyOSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTQogCX0sCiAKIAkvKgpAQCAtMjM5LDcgKzI0NSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVgsCiAJCS5uYW1lCQk9ICJJSXgiLApAQCAtMjQ3LDcgKzI1NCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlDWCwKIAkJLm5hbWUJCT0gIklJY3giLApAQCAtMjU1LDcgKzI2Myw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfU0UzMCwKIAkJLm5hbWUJCT0gIlNFLzMwIiwKQEAgLTI2Myw3ICsyNzIsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC0yODAsNyArMjkwLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJRlgsCiAJCS5uYW1lCQk9ICJJSWZ4IiwKQEAgLTI4OCw3ICsyOTksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVNJLAogCQkubmFtZQkJPSAiSUlzaSIsCkBAIC0yOTYsNyArMzA4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVkksCiAJCS5uYW1lCQk9ICJJSXZpIiwKQEAgLTMwNCw3ICszMTcsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWWCwKIAkJLm5hbWUJCT0gIklJdngiLApAQCAtMzEyLDcgKzMyNiw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtMzI2LDcgKzM0MSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DQ0wsCiAJCS5uYW1lCQk9ICJDb2xvciBDbGFzc2ljIiwKQEAgLTMzNCw3ICszNTAsOSBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTfSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCX0sCiAKIAkvKgogCSAqCVNvbWUgTWFjIExDIG1hY2hpbmVzLiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIElJY2ksIEFEQiBsaWtlIElJc2kKQEAgLTM0Nyw3ICszNjUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSSwKIAkJLm5hbWUJCT0gIkxDIElJIiwKQEAgLTM1NSw3ICszNzQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfTENJSUksCiAJCS5uYW1lCQk9ICJMQyBJSUkiLApAQCAtMzYzLDcgKzM4Myw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtMzgzLDcgKzQwNCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjA1X0FDQywKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MDUiLApAQCAtMzkxLDcgKzQxMyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjEwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYxMCIsCkBAIC00MDAsNyArNDIzLDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MzAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjMwIiwKQEAgLTQxMCw3ICs0MzQsOCBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjUwIiwKQEAgLTQxOSw3ICs0NDQsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LAogCS8qCVRoZSBRNzAwIGRvZXMgaGF2ZSBhIE5TIFNvbmljICovCiAJewpAQCAtNDMwLDcgKzQ1Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTgwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4MDAiLApAQCAtNDM5LDcgKzQ2Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODQwLAogCQkubmFtZQkJPSAiUXVhZHJhIDg0MEFWIiwKQEAgLTQ0OCw3ICs0NzYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTAwIiwKQEAgLTQ1Nyw3ICs0ODYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9ROTUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDk1MCIsCkBAIC00NjYsNyArNDk2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKIAl9LAogCiAJLyoKQEAgLTQ4MCw3ICs1MTEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NSwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLApAQCAtNDg4LDcgKzUyMCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzVGLAogCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCkBAIC00OTYsNyArNTI5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDUyMCwKIAkJLm5hbWUJCT0gICJQZXJmb3JtYSA1MjAiLApAQCAtNTA0LDcgKzUzOCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTUwLAogCQkubmFtZQkJPSAgIlBlcmZvcm1hIDU1MCIsCkBAIC01MTIsNyArNTQ3LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAkvKiBUaGVzZSBoYXZlIHRoZSBjb21tIHNsb3QsIGFuZCB0aGVyZWZvcmUgdGhlIHBvc3NpYmlsaXR5IG9mIFNPTklDIGV0aGVybmV0ICovCiAJewpAQCAtNTIzLDcgKzU1OSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1ODgsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1ODgiLApAQCAtNTMzLDcgKzU3MCw4IEBACiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9UViwKIAkJLm5hbWUJCT0gIlRWIiwKQEAgLTU0MSw3ICs1NzksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNjAwLAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNjAwIiwKQEAgLTU0OSw3ICs1ODgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTU2NSw3ICs2MDUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY1MCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjUwIiwKQEAgLTU3NCw3ICs2MTUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY2MCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjYwQVYiLApAQCAtNTgzLDcgKzYyNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEzLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1BTQywKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfTUFDRSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfQVYKIAl9LAogCiAJLyoKQEAgLTU5OSw3ICs2NDIsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNDUsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTQ1IiwKQEAgLTYwNyw3ICs2NTEsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTUwIiwKQEAgLTYxNiw3ICs2NjEsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1BCLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjAiLApAQCAtNjI0LDcgKzY3MCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjUiLApAQCAtNjMyLDcgKzY3OSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NUMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1YyIsCkBAIC02NDAsNyArNjg4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTcwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE3MCIsCkBAIC02NDgsNyArNjk3LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MCIsCkBAIC02NTYsNyArNzA2LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODBjIiwKQEAgLTY2NCw3ICs3MTUsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxOTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTkwIiwKQEAgLTY3Myw3ICs3MjUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX0JBQk9PTiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEI1MjAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgNTIwIiwKQEAgLTY4Miw3ICs3MzUsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTcwMiw3ICs3NTYsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjMwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMzAiLApAQCAtNzEwLDcgKzc2NSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI1MCIsCkBAIC03MTgsNyArNzc0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI3MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI3MGMiLApAQCAtNzI2LDcgKzc4Myw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MCIsCkBAIC03MzQsNyArNzkyLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MGMiLApAQCAtNzQyLDcgKzgwMSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTgxNSwzICs4NzUsNDIgQEAKIAlzdHJjcHkoc3RyLCAiTWFjaW50b3NoICIpOwogCXN0cmNhdChzdHIsIG1hY2ludG9zaF9jb25maWctPm5hbWUpOwogfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHN3aW1fcmVzb3VyY2VzWzFdOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzd2ltX2RldmljZSA9IHsKKwkubmFtZQkJPSAic3dpbSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzd2ltX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc3dpbV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzd2ltX2RldmljZQorfTsKKworaW50IF9faW5pdCBtYWNfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXU4ICpzd2ltX2Jhc2U7CisKKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPmZsb3BweV90eXBlKSB7CisJY2FzZSBNQUNfRkxPUFBZX1NXSU1fQUREUjE6CisJCXN3aW1fYmFzZSA9ICh1OCAqKShWSUExX0JBU0UgKyAweDFFMDAwKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfRkxPUFBZX1NXSU1fQUREUjI6CisJCXN3aW1fYmFzZSA9ICh1OCAqKShWSUExX0JBU0UgKyAweDE2MDAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpbV9yZXNvdXJjZXNbMF0ubmFtZSA9ICJzd2ltLXJlZ3MiOworCXN3aW1fcmVzb3VyY2VzWzBdLnN0YXJ0ID0gKHJlc291cmNlX3NpemVfdClzd2ltX2Jhc2U7CisJc3dpbV9yZXNvdXJjZXNbMF0uZW5kID0gKHJlc291cmNlX3NpemVfdCkoc3dpbV9iYXNlICsgU1dJTV9JT19TSVpFKTsKKwlzd2ltX3Jlc291cmNlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKG1hY19wbGF0Zm9ybV9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKG1hY19wbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK2FyY2hfaW5pdGNhbGwobWFjX3BsYXRmb3JtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy92aWEuYyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKaW5kZXggN2Q5N2JhNS4uMTFiY2UzYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy92aWEuYworKysgYi9hcmNoL202OGsvbWFjL3ZpYS5jCkBAIC02NDUsMyArNjQ1LDEyIEBACiAJfQogCXJldHVybiAwOwogfQorCit2b2lkIHZpYTFfc2V0X2hlYWQoaW50IGhlYWQpCit7CisJaWYgKGhlYWQgPT0gMCkKKwkJdmlhMVt2QnVmQV0gJj0gflZJQTFBX3ZIZWFkU2VsOworCWVsc2UKKwkJdmlhMVt2QnVmQV0gfD0gVklBMUFfdkhlYWRTZWw7Cit9CitFWFBPUlRfU1lNQk9MKHZpYTFfc2V0X2hlYWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKaW5kZXggMDZkODg3Yy4uODU1ZmM2YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCkBAIC00OSw4ICs0OSwzOSBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MjB4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MjB4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MzAwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDMwMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMzYsCisJCS5lbmQJCT0gNjQgKyAzNiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MCwKKwkJLmVuZAkJPSA2NCArIDQwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQyLAorCQkuZW5kCQk9IDY0ICsgNDIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyMHhfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTIweF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyMHhfZmVjX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTIweF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyMHhfdWFydCwKKwkmbTUyMHhfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwMyw2ICsxMzQsMzAgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01MjB4X2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKwl1OCB2OworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJd3JpdGViKDB4NCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDM2KTsKKwl3cml0ZWIoMHg0LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgNDApOworCXdyaXRlYigweDQsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyA0Mik7CisKKwlpbXIgPSByZWFkbChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4MDAwMUZGRjA7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlICovCisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDKTsKKwl3cml0ZWIodiB8IDB4ZjAsIE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDKTsKKworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQ0kyQyk7CisJd3JpdGViKHYgfCAweDBmLCBNQ0ZfSVBTQkFSICsgTUNGX0dQSU9fUEFSX0ZFQ0kyQyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIC8qCiAgKiAgUHJvZ3JhbSB0aGUgdmVjdG9yIHRvIGJlIGFuIGF1dG8tdmVjdG9yZWQuCiAgKi8KQEAgLTExOCw2ICsxNzMsNyBAQAogewogCW1hY2hfcmVzZXQgPSBjb2xkZmlyZV9yZXNldDsKIAltNTIweF91YXJ0c19pbml0KCk7CisJbTUyMHhfZmVjX2luaXQoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCmluZGV4IDEzZjAyNjEuLjc0MTMzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYwpAQCAtNTAsOCArNTAsMzkgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTIzeF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTIzeF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDEwMDAsCisJCS5lbmQJCT0gTUNGX01CQVIgKyAweDEwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyMywKKwkJLmVuZAkJPSA2NCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI3LAorCQkuZW5kCQk9IDY0ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjksCisJCS5lbmQJCT0gNjQgKyAyOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTIzeF9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01MjN4X2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTIzeF9mZWNfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MjN4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTIzeF91YXJ0LAorCSZtNTIzeF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODMsNiArMTE0LDI1IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTIzeF9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMHgyOCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDIzKTsKKwl3cml0ZWIoMHgyNywgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDI3KTsKKwl3cml0ZWIoMHgyNiwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDI5KTsKKworCWltciA9IHJlYWRsKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCWltciAmPSB+MHhmOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCWltciA9IHJlYWRsKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkwpOworCWltciAmPSB+MHhmZjgwMDAwMTsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogdm9pZCBtY2ZfZGlzYWJsZWFsbCh2b2lkKQogewogCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpKSA9IDB4ZmZmZmZmZmY7CkBAIC0xMDMsNiArMTUzLDcgQEAKIAltY2ZfZGlzYWJsZWFsbCgpOwogCW1hY2hfcmVzZXQgPSBjb2xkZmlyZV9yZXNldDsKIAltNTIzeF91YXJ0c19pbml0KCk7CisJbTUyM3hfZmVjX2luaXQoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCmluZGV4IDIzMGJhZTYuLmUwNDkyNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYwpAQCAtNTUsOCArNTUsMzkgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTI3Ml91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI3Ml9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTUNGX01CQVIgKyAweDg0MCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4ODQwICsgMHgxY2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDg2LAorCQkuZW5kCQk9IDg2LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA4NywKKwkJLmVuZAkJPSA4NywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gODgsCisJCS5lbmQJCT0gODgsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyNzJfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTI3Ml9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyNzJfZmVjX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTI3Ml9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyNzJfdWFydCwKKwkmbTUyNzJfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTkxLDYgKzEyMiwyMiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyNzJfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJaW1yID0gcmVhZGwoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMyk7CisJaW1yID0gKGltciAmIH4weDAwMDAwZmZmKSB8IDB4MDAwMDBkZGQ7CisJd3JpdGVsKGltciwgTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMyk7CisKKwlpbXIgPSByZWFkbChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKKwlpbXIgPSAoaW1yICYgfjB4MGYwMDAwMDApIHwgMHgwZDAwMDAwMDsKKwl3cml0ZWwoaW1yLCBNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogdm9pZCBtY2ZfZGlzYWJsZWFsbCh2b2lkKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJKmljcnA7CkBAIC0xNTUsNiArMjAyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfQlNQKHZvaWQpCiB7CiAJbTUyNzJfdWFydHNfaW5pdCgpOworCW01MjcyX2ZlY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUyNzJfZGV2aWNlcywgQVJSQVlfU0laRShtNTI3Ml9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYwppbmRleCA3M2NkMWFlLi40OTM0M2ZiIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKQEAgLTUwLDggKzUwLDczIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyN3hfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyN3hfZmVjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDIzLAorCQkuZW5kCQk9IDY0ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjcsCisJCS5lbmQJCT0gNjQgKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyOSwKKwkJLmVuZAkJPSA2NCArIDI5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyN3hfZmVjMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MTgwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MTgwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSAxMjggKyAyMywKKwkJLmVuZAkJPSAxMjggKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gMTI4ICsgMjcsCisJCS5lbmQJCT0gMTI4ICsgMjcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDEyOCArIDI5LAorCQkuZW5kCQk9IDEyOCArIDI5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01Mjd4X2ZlY1tdID0geworCXsKKwkJLm5hbWUJCT0gImZlYyIsCisJCS5pZAkJPSAwLAorCQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobTUyN3hfZmVjMF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2UJPSBtNTI3eF9mZWMwX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUJCT0gImZlYyIsCisJCS5pZAkJPSAxLAorCQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobTUyN3hfZmVjMV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2UJPSBtNTI3eF9mZWMxX3Jlc291cmNlcywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01Mjd4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTI3eF91YXJ0LAorCSZtNTI3eF9mZWNbMF0sCisjaWZkZWYgQ09ORklHX0ZFQzIKKwkmbTUyN3hfZmVjWzFdLAorI2VuZGlmCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTcsNiArMTYyLDUxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTI3eF9mZWNfaXJxX2luaXQoaW50IG5yKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwl1MzIgaW1yOworCisJYmFzZSA9IE1DRl9JUFNCQVIgKyAobnIgPyBNQ0ZJQ01fSU5UQzEgOiBNQ0ZJQ01fSU5UQzApOworCisJd3JpdGViKDB4MjgsIGJhc2UgKyBNQ0ZJTlRDX0lDUjAgKyAyMyk7CisJd3JpdGViKDB4MjcsIGJhc2UgKyBNQ0ZJTlRDX0lDUjAgKyAyNyk7CisJd3JpdGViKDB4MjYsIGJhc2UgKyBNQ0ZJTlRDX0lDUjAgKyAyOSk7CisKKwlpbXIgPSByZWFkbChiYXNlICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgJj0gfjB4ZjsKKwl3cml0ZWwoaW1yLCBiYXNlICsgTUNGSU5UQ19JTVJIKTsKKwlpbXIgPSByZWFkbChiYXNlICsgTUNGSU5UQ19JTVJMKTsKKwlpbXIgJj0gfjB4ZmY4MDAwMDE7CisJd3JpdGVsKGltciwgYmFzZSArIE1DRklOVENfSU1STCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTI3eF9mZWNfaW5pdCh2b2lkKQoreworCXUxNiBwYXI7CisJdTggdjsKKworCW01Mjd4X2ZlY19pcnFfaW5pdCgwKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgZm9yIGZlYzAgKi8KKwlwYXIgPSByZWFkdyhNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOworCXdyaXRldyhwYXIgfCAweGYwMCwgTUNGX0lQU0JBUiArIDB4MTAwMDgyKTsKKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIDB4MTAwMDc4KTsKKwl3cml0ZWIodiB8IDB4YzAsIE1DRl9JUFNCQVIgKyAweDEwMDA3OCk7CisKKyNpZmRlZiBDT05GSUdfRkVDMgorCW01Mjd4X2ZlY19pcnFfaW5pdCgxKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgZm9yIGZlYzEgKi8KKwlwYXIgPSByZWFkdyhNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOworCXdyaXRldyhwYXIgfCAweGEwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgMHgxMDAwNzkpOworCXdyaXRlYih2IHwgMHhjMCwgTUNGX0lQU0JBUiArIDB4MTAwMDc5KTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCkpID0gMHhmZmZmZmZmZjsKQEAgLTExNiwxMyArMjI2LDE0IEBACiB7CiAJbWNmX2Rpc2FibGVhbGwoKTsKIAltYWNoX3Jlc2V0ID0gY29sZGZpcmVfcmVzZXQ7CisJbTUyN3hfdWFydHNfaW5pdCgpOworCW01Mjd4X2ZlY19pbml0KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfQlNQKHZvaWQpCiB7Ci0JbTUyN3hfdWFydHNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01Mjd4X2RldmljZXMsIEFSUkFZX1NJWkUobTUyN3hfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKaW5kZXggNDRiYWViMi4uYmVlNTI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCkBAIC01Nyw4ICs1Nyw0MCBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01Mjh4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01Mjh4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDIzLAorCQkuZW5kCQk9IDY0ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjcsCisJCS5lbmQJCT0gNjQgKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyOSwKKwkJLmVuZAkJPSA2NCArIDI5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01Mjh4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyOHhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01Mjh4X2ZlY19yZXNvdXJjZXMsCit9OworCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTI4eF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUyOHhfdWFydCwKKwkmbTUyOHhfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk5LDYgKzEzMSwzMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyOHhfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCXUxNiB2MTY7CisKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMHgyOCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDIzKTsKKwl3cml0ZWIoMHgyNywgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDI3KTsKKwl3cml0ZWIoMHgyNiwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDI5KTsKKworCWltciA9IHJlYWRsKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCWltciAmPSB+MHhmOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCWltciA9IHJlYWRsKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkwpOworCWltciAmPSB+MHhmZjgwMDAwMTsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJMKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgZm9yIGZlYzAgKi8KKwl2MTYgPSByZWFkdyhNQ0ZfSVBTQkFSICsgMHgxMDAwNTYpOworCXdyaXRldyh2MTYgfCAweGYwMCwgTUNGX0lQU0JBUiArIDB4MTAwMDU2KTsKKwl3cml0ZWIoMHhjMCwgTUNGX0lQU0JBUiArIDB4MTAwMDU4KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogdm9pZCBtY2ZfZGlzYWJsZWFsbCh2b2lkKQogewogCSooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpKSA9IDB4ZmZmZmZmZmY7CkBAIC0xNTgsNiArMjE1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfQlNQKHZvaWQpCiB7CiAJbTUyOHhfdWFydHNfaW5pdCgpOworCW01Mjh4X2ZlY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUyOHhfZGV2aWNlcywgQVJSQVlfU0laRShtNTI4eF9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYwppbmRleCBhMzQ3NjIzLi41OTFmMmY4IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMKQEAgLTYxLDggKzYxLDM4IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUzMnhfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUzMnhfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IDB4ZmMwMzAwMDAsCisJCS5lbmQJCT0gMHhmYzAzMDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAzNiwKKwkJLmVuZAkJPSA2NCArIDM2LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQwLAorCQkuZW5kCQk9IDY0ICsgNDAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDIsCisJCS5lbmQJCT0gNjQgKyA0MiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTMyeF9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01MzJ4X2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTMyeF9mZWNfcmVzb3VyY2VzLAorfTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptNTMyeF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbTUzMnhfdWFydCwKKwkmbTUzMnhfZmVjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTkzLDYgKzEyMywyNCBAQAogCWZvciAobGluZSA9IDA7IChsaW5lIDwgbnJsaW5lcyk7IGxpbmUrKykKIAkJbTUzMnhfdWFydF9pbml0X2xpbmUobGluZSwgbTUzMnhfdWFydF9wbGF0Zm9ybVtsaW5lXS5pcnEpOwogfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19pbml0IG01MzJ4X2ZlY19pbml0KHZvaWQpCit7CisJLyogVW5tYXNrIEZFQyBpbnRlcnJ1cHRzIGF0IENvbGRGaXJlIGludGVycnVwdCBjb250cm9sbGVyICovCisJTUNGX0lOVEMwX0lDUjM2ID0gMHgyOworCU1DRl9JTlRDMF9JQ1I0MCA9IDB4MjsKKwlNQ0ZfSU5UQzBfSUNSNDIgPSAweDI7CisKKwlNQ0ZfSU5UQzBfSU1SSCAmPSB+KE1DRl9JTlRDX0lNUkhfSU5UX01BU0szNiB8CisJCU1DRl9JTlRDX0lNUkhfSU5UX01BU0s0MCB8IE1DRl9JTlRDX0lNUkhfSU5UX01BU0s0Mik7CisKKwkvKiBTZXQgbXVsdGktZnVuY3Rpb24gcGlucyB0byBldGhlcm5ldCBtb2RlIGZvciBmZWMwICovCisJTUNGX0dQSU9fUEFSX0ZFQ0kyQyB8PSAoTUNGX0dQSU9fUEFSX0ZFQ0kyQ19QQVJfTURDX0VNREMgfAorCQlNQ0ZfR1BJT19QQVJfRkVDSTJDX1BBUl9NRElPX0VNRElPKTsKKwlNQ0ZfR1BJT19QQVJfRkVDID0gKE1DRl9HUElPX1BBUl9GRUNfUEFSX0ZFQ183V19GRUMgfAorCQlNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfTUlJX0ZFQyk7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE1MCw2ICsxOTgsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKIAltNTMyeF91YXJ0c19pbml0KCk7CisJbTUzMnhfZmVjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTMyeF9kZXZpY2VzLCBBUlJBWV9TSVpFKG01MzJ4X2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKaW5kZXggYTFlMzUyNi4uZGZiZmQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKQEAgLTMzLDggKzMzLDggQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlICppb2Rldl9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CitzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGlvZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGludCBpb2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBzc2l6ZV90IGlvZGV2X3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90IHMsIGxvZmZfdCAqKTsKQEAgLTY1LDEzICs2NSwxMyBAQAogCS5mb3BzCQk9ICZmb3BzCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW9kZXZfZHJpdmVyID0KLXsKLQkubmFtZQkJPSAoY2hhciAqKSBpb2Rldl9uYW1lLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlvZGV2X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSBpb2Rldl9uYW1lLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gaW9kZXZfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2V4aXRfcChpb2Rldl9yZW1vdmUpCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChpb2Rldl9yZW1vdmUpLAogfTsKIAogCkBAIC04OSwxMSArODksMTAgQEAKIAogCiAvKiBObyBob3RwbHVnZ2luZyBvbiB0aGUgcGxhdGZvcm0gYnVzIC0gdXNlIF9faW5pdCAqLwotc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBjb25zdCBwZHYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiBjb25zdCByaSA9Ci0JCWlvZGV2X2dldF9yZXNvdXJjZShwZHYsIElPREVWX1JFU09VUkNFX0lSUSwgSU9SRVNPVVJDRV9JUlEpOworCQlpb2Rldl9nZXRfcmVzb3VyY2UoZGV2LCBJT0RFVl9SRVNPVVJDRV9JUlEsIElPUkVTT1VSQ0VfSVJRKTsKIAogCWlmICh1bmxpa2VseSghcmkpKQogCQlyZXR1cm4gLUVOWElPOwpAQCAtMTA0LDcgKzEwMyw3IEBACiAKIAogCi1zdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gbWlzY19kZXJlZ2lzdGVyKCZtaXNjZGV2KTsKIH0KQEAgLTE2MCwxNCArMTU5LDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlvZGV2X2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOwogfQogCiAKIAogc3RhdGljIHZvaWQgX19leGl0IGlvZGV2X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGlvZGV2X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggMDQxNzUxNi4uNTI2ZjMyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTEzOTEsMTEgKzEzOTEsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCiBzZXRfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBzZXQpCQkJCQlcCiB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzLCBuZXc7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAotCXJlcyB8PSBzZXQ7CQkJCQkJXAotCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCW5ldyA9IHJlcyB8IHNldDsJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUobmV3KTsJCQkJCVwKIAkJCQkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJXAogfQkJCQkJCQkJXApAQCAtMTQwMywyNCArMTQwMywyNCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKIGNsZWFyX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2xlYXIpCQkJCVwKIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCByZXMsIG5ldzsJCQkJCVwKIAkJCQkJCQkJXAogCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCi0JcmVzICY9IH5jbGVhcjsJCQkJCQlcCi0Jd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJbmV3ID0gcmVzICYgfmNsZWFyOwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShuZXcpOwkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CQkJCQkJCQlcCiAJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCi1jaGFuZ2VfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjaGFuZ2UsIHVuc2lnbmVkIGludCBuZXcpCQlcCitjaGFuZ2VfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjaGFuZ2UsIHVuc2lnbmVkIGludCB2YWwpCQlcCiB7CQkJCQkJCQlcCi0JdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzLCBuZXc7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAotCXJlcyAmPSB+Y2hhbmdlOwkJCQkJCVwKLQlyZXMgfD0gKG5ldyAmIGNoYW5nZSk7CQkJCQlcCi0Jd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJbmV3ID0gcmVzICYgfmNoYW5nZTsJCQkJCVwKKwluZXcgfD0gKHZhbCAmIGNoYW5nZSk7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKG5ldyk7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gcmVzOwkJCQkJCVwKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDljZTA2MDcuLjllODljZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtOSw2ICs5LDcgQEAKICNpZm5kZWYgX0FTTV9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9TSUdDT05URVhUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmYWNjMmQ3Li4yYWJjYTE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC03NSw2ICs3NSw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjaWZkZWYgX19LRVJORUxfXwogCiAvKiogc29ja190eXBlIC0gU29ja2V0IHR5cGVzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA4OGYxZjdkLi45OTk5M2MwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIF9BU01fU1dBQl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwppbmRleCA0YjQwMDdiLi43Yjg0NWJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggMWE4NmY4NC4uNDlhYWM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IGIyZDcwNDEuLjI5ZmFkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTE1MjAsNyArMTUyMCw5IEBACiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCiAJaWYgKGNwdV9oYXNfdmVpYyB8fCBjcHVfaGFzX3ZpbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBzciA9IHNldF9jMF9zdGF0dXMoU1QwX0JFVik7CiAJCXdyaXRlX2MwX2ViYXNlKGViYXNlKTsKKwkJd3JpdGVfYzBfc3RhdHVzKHNyKTsKIAkJLyogU2V0dGluZyB2ZWN0b3Igc3BhY2luZyBlbmFibGVzIEVJL1ZJIG1vZGUgICovCiAJCWNoYW5nZV9jMF9pbnRjdGwoMHgzZTAsIFZFQ1RPUlNQQUNJTkcpOwogCX0KQEAgLTE2MDIsOCArMTYwNCw2IEBACiAjaWZkZWYgQ09ORklHXzY0QklUCiAJdW5zaWduZWQgbG9uZyB1bmNhY2hlZF9lYmFzZSA9IFRPX1VOQ0FDKGViYXNlKTsKICNlbmRpZgotCWlmIChjcHVfaGFzX21pcHNfcjIpCi0JCXVuY2FjaGVkX2ViYXNlICs9IChyZWFkX2MwX2ViYXNlKCkgJiAweDNmZmZmMDAwKTsKIAogCWlmICghYWRkcikKIAkJcGFuaWMocGFuaWNfbnVsbF9jZXJyKTsKQEAgLTE2MzUsOSArMTYzNSwxMSBAQAogCQlyZXR1cm47CS8qIEFscmVhZHkgZG9uZSAqLwogI2VuZGlmCiAKLQlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkKLQkJZWJhc2UgPSAodW5zaWduZWQgbG9uZykgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoMHgyMDAgKyBWRUNUT1JTUEFDSU5HKjY0KTsKLQllbHNlIHsKKwlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgeworCQl1bnNpZ25lZCBsb25nIHNpemUgPSAweDIwMCArIFZFQ1RPUlNQQUNJTkcqNjQ7CisJCWViYXNlID0gKHVuc2lnbmVkIGxvbmcpCisJCQlfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgMSA8PCBmbHMoc2l6ZSksIDApOworCX0gZWxzZSB7CiAJCWViYXNlID0gQ0FDX0JBU0U7CiAJCWlmIChjcHVfaGFzX21pcHNfcjIpCiAJCQllYmFzZSArPSAocmVhZF9jMF9lYmFzZSgpICYgMHgzZmZmZjAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IGM0M2Y0YjIuLjg3MWU4MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC03ODAsNyArNzgwLDcgQEAKIAkJYy0+ZGNhY2hlLndheXMgPSAyOwogCQljLT5kY2FjaGUud2F5Yml0ID0gMDsKIAotCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX0NBQ0hFX0NERVhfUDsKKwkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1AgfCBNSVBTX0NQVV9QUkVGRVRDSDsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9UWDQ5WFg6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCmluZGV4IDU0NmU2OTcuLmJlZDU2ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAlpZiAoIXBsYXRfZGV2aWNlX2lzX2NvaGVyZW50KGRldikgJiYgZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwogCi0JCWFkZHIgPSBwbGF0X2RtYV9hZGRyX3RvX3BoeXMoZG1hX2FkZHJlc3MpOworCQlhZGRyID0gZG1hX2FkZHJfdG9fdmlydChkbWFfYWRkcmVzcyk7CiAJCWRtYV9jYWNoZV93YmFja19pbnYoYWRkciwgc2l6ZSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYwppbmRleCA1NmM2NGNjLi41MGZkYjVjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQlpZiAoYWN0aW9uKSB7CiAJCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJCXNlcV9wcmludGYocCwgIiAlMTRzLiV1IiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSwKIAkJCQkgICAoR3hJQ1IoaSkgJiBHeElDUl9MRVZFTCkgPj4KIAkJCQkgICBHeElDUl9MRVZFTF9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCmluZGV4IGM1ODRiMDAuLjQzMGYxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oCkBAIC0zMzYsMTAgKzMzNiwxMSBAQAogI2RlZmluZSBOVU1fUERDX1JFU1VMVAkzMgogCiAjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQotI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIGV4dGVybiBpbnQgcGRjX3R5cGU7CiAKIC8qIFZhbHVlcyBmb3IgcGRjX3R5cGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZmJhNDAyYy4uODg1NDcyYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDYgKzU0LDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMHg0MDFmCiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkweDQwMjAKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogT19OT05CTE9DSyBjbGFzaGVzIHdpdGggdGhlIGJpdHMgdXNlZCBmb3Igc29ja2V0IHR5cGVzLiAgVGhlcmVmb3JlIHdlCiAgKiBoYXZlIHRvIGRlZmluZSBTT0NLX05PTkJMT0NLIHRvIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCAzZmYxNmM1Li5lNzg0MDNiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfUEFSSVNDX1NXQUJfSAogI2RlZmluZSBfUEFSSVNDX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwppbmRleCAyOWU3MGUxLi5hZGZkNjE3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZWxzZQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwppbmRleCA4YjViYTgyLi40NDQ3ZGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKQEAgLTEyNyw2ICsxMjcsMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZXgtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBleCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCmluZGV4IDI4MDQ0NDQuLjVlNmIwOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKQEAgLTk3LDYgKzk3LDEzIEBACiAJCQkJICAgICAgMHg2IDB4ND47CS8qIEVDQyBTRUMgRXJyb3IgKi8gCiAJCX07CiAKKwkJQ1JZUFRPOiBjcnlwdG9AZWY3MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQwNWV4LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDB4ZWY3MDAwMDAgMHg4MDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxNyAweDI+OworCQl9OworCiAJCU1BTDA6IG1jbWFsIHsKIAkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQwNWV4IiwgImlibSxtY21hbDIiOwogCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vdHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oCmluZGV4IDU3YjgyZTMuLjYwYTNjOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oCkBAIC05LDcgKzksNyBAQAogI2lmbmRlZiBfX0FTTV9CT09UWF9IX18KICNkZWZpbmUgX19BU01fQk9PVFhfSF9fCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWZkZWYgbWFjaW50b3NoCiAjaW5jbHVkZSA8VHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjZDQ2ZjAyLi5iNTYwMGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGY5OTNlNDEuLmJiMmRlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgX19MSU5VWF9LVk1fUE9XRVJQQ19ICiAjZGVmaW5lIF9fTElOVVhfS1ZNX1BPV0VSUENfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGt2bV9yZWdzIHsKIAlfX3U2NCBwYzsKQEAgLTUyLDQgKzUyLDExIEBACiAJX191NjQgZnByWzMyXTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX1BPV0VSUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKaW5kZXggZjQ5MDMxYi4uZDIyZDM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCkBAIC0yOCw2ICsyOCwxMyBAQAogICogbmVlZCB0byBmaW5kIHNvbWUgd2F5IG9mIGFkdmVydGlzaW5nIGl0LiAqLwogI2RlZmluZSBLVk00NHhfR1VFU1RfVExCX1NJWkUgNjQKIAorc3RydWN0IGt2bXBwY180NHhfdGxiZSB7CisJdTMyIHRpZDsgLyogT25seSB0aGUgbG93IDggYml0cyBhcmUgdXNlZC4gKi8KKwl1MzIgd29yZDA7CisJdTMyIHdvcmQxOworCXUzMiB3b3JkMjsKK307CisKIHN0cnVjdCBrdm1wcGNfNDR4X3NoYWRvd19yZWYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBndGxiX2luZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKaW5kZXggMjE5Nzc2NC4uNTZiZmFlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCkBAIC00Miw3ICs0MiwxMiBAQAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTIDEzCiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MgMTQKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0RFQlVHIDE1Ci0jZGVmaW5lIEJPT0tFX01BWF9JTlRFUlJVUFQgMTUKKworLyogRTUwMCAqLworI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUwgMzIKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBIDMzCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQgMzQKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1BFUkZPUk1BTkNFX01PTklUT1IgMzUKIAogI2RlZmluZSBSRVNVTUVfRkxBR19OViAgICAgICAgICAoMTw8MCkgIC8qIFJlbG9hZCBndWVzdCBub252b2xhdGlsZSBzdGF0ZT8gKi8KICNkZWZpbmUgUkVTVU1FX0ZMQUdfSE9TVCAgICAgICAgKDE8PDEpICAvKiBSZXN1bWUgaG9zdD8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0OTdjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9LVk1fRTUwMF9IX18KKyNkZWZpbmUgX19BU01fS1ZNX0U1MDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TSVpFIDM2CisKKyNkZWZpbmUgRTUwMF9QSURfTlVNICAgMworI2RlZmluZSBFNTAwX1RMQl9OVU0gICAyCisKK3N0cnVjdCB0bGJleworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM3OworfTsKKworc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgeworCS8qIFVubW9kaWZpZWQgY29weSBvZiB0aGUgZ3Vlc3QncyBUTEIuICovCisJc3RydWN0IHRsYmUgKmd1ZXN0X3RsYltFNTAwX1RMQl9OVU1dOworCS8qIFRMQiB0aGF0J3MgYWN0dWFsbHkgdXNlZCB3aGVuIHRoZSBndWVzdCBpcyBydW5uaW5nLiAqLworCXN0cnVjdCB0bGJlICpzaGFkb3dfdGxiW0U1MDBfVExCX05VTV07CisJLyogUGFnZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgaW4gdGhlIHNoYWRvdyBUTEIuICovCisJc3RydWN0IHBhZ2UgKipzaGFkb3dfcGFnZXNbRTUwMF9UTEJfTlVNXTsKKworCXVuc2lnbmVkIGludCBndWVzdF90bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBzaGFkb3dfdGxiX3NpemVbRTUwMF9UTEJfTlVNXTsKKwl1bnNpZ25lZCBpbnQgZ3Vlc3RfdGxiX252W0U1MDBfVExCX05VTV07CisKKwl1MzIgaG9zdF9waWRbRTUwMF9QSURfTlVNXTsKKwl1MzIgcGlkW0U1MDBfUElEX05VTV07CisKKwl1MzIgbWFzMDsKKwl1MzIgbWFzMTsKKwl1MzIgbWFzMjsKKwl1MzIgbWFzMzsKKwl1MzIgbWFzNDsKKwl1MzIgbWFzNTsKKwl1MzIgbWFzNjsKKwl1MzIgbWFzNzsKKwl1MzIgbDFjc3IxOworCXUzMiBoaWQwOworCXUzMiBoaWQxOworCisJc3RydWN0IGt2bV92Y3B1IHZjcHU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp0b19lNTAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwLCB2Y3B1KTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0tWTV9FNTAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBjMWU0MzZmLi5kZmRmMTNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNjQsMTMgKzY0LDYgQEAKIAl1MzIgaGFsdF93YWtldXA7CiB9OwogCi1zdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKLQl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLwotCXUzMiB3b3JkMDsKLQl1MzIgd29yZDE7Ci0JdTMyIHdvcmQyOwotfTsKLQogZW51bSBrdm1fZXhpdF90eXBlcyB7CiAJTU1JT19FWElUUywKIAlEQ1JfRVhJVFMsCkBAIC0xMTgsMTEgKzExMSw2IEBACiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJdTMyIGhvc3Rfc3RhY2s7CiAJdTMyIGhvc3RfcGlkOwotCXUzMiBob3N0X2RiY3IwOwotCXUzMiBob3N0X2RiY3IxOwotCXUzMiBob3N0X2RiY3IyOwotCXUzMiBob3N0X2lhY1s0XTsKLQl1MzIgaG9zdF9tc3I7CiAKIAl1NjQgZnByWzMyXTsKIAl1bG9uZyBncHJbMzJdOwpAQCAtMTU3LDcgKzE0NSw3IEBACiAJdTMyIHRidTsKIAl1MzIgdGNyOwogCXUzMiB0c3I7Ci0JdTMyIGl2b3JbMTZdOworCXUzMiBpdm9yWzY0XTsKIAl1bG9uZyBpdnByOwogCXUzMiBwaXI7CiAKQEAgLTE3MCw2ICsxNTgsNyBAQAogCXUzMiBjY3IxOwogCXUzMiBkYmNyMDsKIAl1MzIgZGJjcjE7CisJdTMyIGRic3I7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HCiAJc3RydWN0IGt2bXBwY19leGl0X3RpbWluZyB0aW1pbmdfZXhpdDsKQEAgLTIwMCwxMCArMTg5LDQgQEAKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmdfZXhjZXB0aW9uczsKIH07CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgYnBbNF07Ci0JaW50IHNpbmdsZXN0ZXA7Ci19OwotCiAjZW5kaWYgLyogX19QT1dFUlBDX0tWTV9IT1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggMzZkMmE1MC4uMmM2ZWUzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCkBAIC01MiwxMyArNTIsMTkgQEAKIGV4dGVybiBpbnQga3ZtcHBjX2VtdWxhdGVfbW1pbyhzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKKy8qIENvcmUtc3BlY2lmaWMgaG9va3MgKi8KKwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3ZhZGRyLCBncGFfdCBncGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgYXNpZCwgdTMyIGZsYWdzLCB1MzIgbWF4X2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGd0bGJfaWR4KTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfcHJpdl9zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdXNlcm1vZGUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9zd2l0Y2hfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHBpZCk7Ci0KLS8qIENvcmUtc3BlY2lmaWMgaG9va3MgKi8KK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2R0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gaW50IGt2bXBwY19tbXVfaXRsYl9pbmRleChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyKTsKK2V4dGVybiBncGFfdCBrdm1wcGNfbW11X3hsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGd0bGJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndmFfdCBlYWRkcik7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2R0bGJfbWlzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9pdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkKTsKQEAgLTcxLDkgKzc3LDYgQEAKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ndWVzdF9kZWJ1Z3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1leHRlcm4gdm9pZCBrdm1wcGNfY29yZV9sb2FkX2hvc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9kZWxpdmVyX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiBpbnQga3ZtcHBjX2NvcmVfcGVuZGluZ19kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCmluZGV4IDNmOTQxYzAuLjQyODViNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaApAQCAtNzUsNiArNzUsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitleHRlcm4gdW5zaWduZWQgaW50IHRsYmNhbV9pbmRleDsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludAlpZDsKIAl1bnNpZ25lZCBpbnQJYWN0aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAppbmRleCAzZjEyMWZlLi5lNzIzM2E4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaApAQCAtMTksNiArMTksNyBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfUFMzRkJfSF8KICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BTM0ZCX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qIGlvY3RsICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZjVhNGUxNjguLjFlNWNmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTYxLDQgKzYxLDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZgkvKiBfQVNNX1BPV0VSUENfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKaW5kZXggMzU0NWVmYi4uMTI4NmM4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9pbmZvLmgKQEAgLTIzLDkgKzIzLDEwIEBACiAjaWZuZGVmIF9TUFVfSU5GT19ICiAjZGVmaW5lIF9TUFVfSU5GT19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9zcHUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2Vsc2UKIHN0cnVjdCBtZmNfY3Ffc3IgewogCV9fdTY0IG1mY19jcV9kYXRhMF9SVzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGVmODI0YWUuLmM1ODFlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtOCw3ICs4LDcgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2lmZGVmIF9fR05VQ19fCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMTllZTQ5MS4uNDJmZTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2FscGFjYS5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0tWTQotI2luY2x1ZGUgPGFzbS9rdm1fNDR4Lmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHXzQweCkKQEAgLTM2MSw4ICszNjEsNiBAQAogCURFRklORShQVEVfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNCi0JREVGSU5FKFRMQkVfQllURVMsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlKSk7Ci0KIAlERUZJTkUoVkNQVV9IT1NUX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9zdGFjaykpOwogCURFRklORShWQ1BVX0hPU1RfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9waWQpKTsKIAlERUZJTkUoVkNQVV9HUFJTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZ3ByKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAyM2I4YjVlLi4xN2VmYjcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbHNlCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKaW5kZXggYTY2YmVjNS4uMGNlZjgwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCkBAIC0yOCw3MiArMjgsNiBAQAogCiAjaW5jbHVkZSAiNDR4X3RsYi5oIgogCi0vKiBOb3RlOiBjbGVhcmluZyBNU1JbREVdIGp1c3QgbWVhbnMgdGhhdCB0aGUgZGVidWcgaW50ZXJydXB0IHdpbGwgbm90IGJlCi0gKiBkZWxpdmVyZWQgKmltbWVkaWF0ZWx5Ki4gSW5zdGVhZCwgaXQgc2ltcGx5IHNldHMgdGhlIGFwcHJvcHJpYXRlIERCU1IgYml0cy4KLSAqIElmIHRob3NlIERCU1IgYml0cyBhcmUgc3RpbGwgc2V0IHdoZW4gTVNSW0RFXSBpcyByZS1lbmFibGVkLCB0aGUgaW50ZXJydXB0Ci0gKiB3aWxsIGJlIGRlbGl2ZXJlZCBhcyBhbiAiaW1wcmVjaXNlIGRlYnVnIGV2ZW50IiAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5Ci0gKiBEQlNSW0lERV0uCi0gKi8KLXN0YXRpYyB2b2lkIGt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHModm9pZCkKLXsKLQltdG1zcihtZm1zcigpICYgfk1TUl9ERSk7Ci19Ci0KLXZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWt2bTQ0eF9kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKLQotCW10c3ByKFNQUk5fSUFDMSwgdmNwdS0+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+YnVzX2lkKTsKKwlkZXZfZGJnKF9kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWRydiA9IHBzM19zeXN0ZW1fYnVzX2Rldl90b19zeXN0ZW1fYnVzX2RydihkZXYpOwogCUJVR19PTighZHJ2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNmIwYTM1My4uMmE4YWY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTM0MywxMyArMzQzLDYgQEAKIAogY29tbWVudCAiSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIgogCi1jb25maWcgTUFDSENIS19XQVJOSU5HCi0JYm9vbCAiUHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUgbWFjaGluZSBjaGVjayBoYW5kbGVyIG9uIElCTSBTLzM5MCBvcgotCSAgelNlcmllcyB0byBwcm9jZXNzIHdhcm5pbmcgbWFjaGluZSBjaGVja3MgKGUuZy4gb24gcG93ZXIgZmFpbHVyZXMpLgotCSAgSWYgdW5zdXJlLCBzYXkgIlkiLgotCiBjb25maWcgUURJTwogCXRyaXN0YXRlICJRRElPIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtNTIxLDcgKzUxNCw3IEBACiAKIGNvbmZpZyBBUFBMREFUQV9ORVRfU1VNCiAJdHJpc3RhdGUgIk1vbml0b3Igb3ZlcmFsbCBuZXR3b3JrIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFCisJZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFICYmIE5FVAogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgbmV0d29yayByZWxhdGVkIGRhdGEgdG8gdGhlIExpbnV4IC0gVk0gTW9uaXRvciBTdHJlYW0sCiAJICBjdXJyZW50bHkgdGhlcmUgaXMgb25seSBhIHRvdGFsIHN1bSBvZiBuZXR3b3JrIEkvTyBzdGF0aXN0aWNzLCBubwpAQCAtNTUyLDcgKzU0NSw3IEBACiAJICBidXQgaXMgaW5kZXBlbmRlbnQgb2YgaGFyZHdhcmUvbWljcm9jb2RlIHN1cHBvcnQuCiAKIGNvbmZpZyBaRkNQRFVNUAotCXRyaXN0YXRlICJ6ZmNwZHVtcCBzdXBwb3J0IgorCWJvb2wgInpmY3BkdW1wIHN1cHBvcnQiCiAJc2VsZWN0IFNNUAogCWRlZmF1bHQgbgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jIGIvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKaW5kZXggZWNhNzI0ZC4uYjQ5YzAwYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKQEAgLTIwMSw4ICsyMDEsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHBybmdfZXhpdCh2b2lkKQogewogCS8qIHdpcGUgbWUgKi8KLQltZW1zZXQocC0+YnVmLCAwLCBwcm5nX2NodW5rX3NpemUpOwotCWtmcmVlKHAtPmJ1Zik7CisJa3pmcmVlKHAtPmJ1Zik7CiAJa2ZyZWUocCk7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJnBybmdfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhLmggYi9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCmluZGV4IDFjZWFmYTUuLmY0ZTlkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaApAQCAtMjksNyArMjksOSBAQAogCWludCBmdW5jOwkJLyogS0lNRCBmdW5jdGlvbiB0byB1c2UgKi8KIH07CiAKLXZvaWQgczM5MF9zaGFfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKLXZvaWQgczM5MF9zaGFfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCk7CitzdHJ1Y3Qgc2hhc2hfZGVzYzsKKworaW50IHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwppbmRleCBiM2NiNWE4Li5lODViYTM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKQEAgLTIzLDE3ICsyMywxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGExX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbnQgc2hhMV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMV9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTFfSDE7CkBAIC00MiwzNCArNDIsMzYgQEAKIAlzY3R4LT5zdGF0ZVs0XSA9IFNIQTFfSDQ7CiAJc2N0eC0+Y291bnQgPSAwOwogCXNjdHgtPmZ1bmMgPSBLSU1EX1NIQV8xOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTEiLAotCS5jcmFfZHJpdmVyX25hbWU9CSJzaGExLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTFfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBhbGcgPSB7CisJLmRpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTFfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoYTFfczM5MF9pbml0KHZvaWQpCiB7CiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzEpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNoYTFfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGExX3MzOTBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKaW5kZXggMTljMDNmYi4uZjlmZWZjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYwpAQCAtMTYsMTcgKzE2LDE3IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAjaW5jbHVkZSAic2hhLmgiCiAKLXN0YXRpYyB2b2lkIHNoYTI1Nl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTI1Nl9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMjU2X0gwOwogCXNjdHgtPnN0YXRlWzFdID0gU0hBMjU2X0gxOwpAQCAtMzgsMjIgKzM4LDI0IEBACiAJc2N0eC0+c3RhdGVbN10gPSBTSEEyNTZfSDc7CiAJc2N0eC0+Y291bnQgPSAwOwogCXNjdHgtPmZ1bmMgPSBLSU1EX1NIQV8yNTY7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKLQkuY3JhX25hbWUJPQkic2hhMjU2IiwKLQkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTI1Ni1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEEyNTZfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhMjU2X2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTI1Nl9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMjU2IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTI1Ni1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMjU2X0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCisJfQogfTsKIAogc3RhdGljIGludCBzaGEyNTZfczM5MF9pbml0KHZvaWQpCkBAIC02MSwxMiArNjMsMTIgQEAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMjU2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNoYTI1Nl9zMzkwX2Zpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIG1vZHVsZV9pbml0KHNoYTI1Nl9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCmluZGV4IDIzYzc4NjEuLjgzMTkyYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKQEAgLTEyLDE2ICsxMiwxNiBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKICNpbmNsdWRlICJzaGEuaCIKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLXN0YXRpYyB2b2lkIHNoYTUxMl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTUxMl9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweDZhMDllNjY3ZjNiY2M5MDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHhiYjY3YWU4NTg0Y2FhNzNiVUxMOwpAQCAtMzMsMjkgKzMzLDMxIEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NWJlMGNkMTkxMzdlMjE3OVVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTUxMl9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTUxMiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGE1MTItczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEE1MTJfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGE1MTJfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGE1MTJfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGE1MTJfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBNTEyX0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTUxMl9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhNTEyIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTUxMi1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCisJfQogfTsKIAogTU9EVUxFX0FMSUFTKCJzaGE1MTIiKTsKIAotc3RhdGljIHZvaWQgc2hhMzg0X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbnQgc2hhMzg0X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCSooX191NjQgKikmY3R4LT5zdGF0ZVswXSA9IDB4Y2JiYjlkNWRjMTA1OWVkOFVMTDsKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMl0gPSAweDYyOWEyOTJhMzY3Y2Q1MDdVTEw7CkBAIC02NywyMiArNjksMjUgQEAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMTRdID0gMHg0N2I1NDgxZGJlZmE0ZmE0VUxMOwogCWN0eC0+Y291bnQgPSAwOwogCWN0eC0+ZnVuYyA9IEtJTURfU0hBXzUxMjsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMzg0X2FsZyA9IHsKLQkuY3JhX25hbWUJPQkic2hhMzg0IiwKLQkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTM4NC1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTM4NF9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKHNoYTM4NF9hbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTM4NF9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIHNoYTM4NF9hbGcgPSB7CisJLmRpZ2VzdHNpemUJPQlTSEEzODRfRElHRVNUX1NJWkUsCisJLmluaXQJCT0Jc2hhMzg0X2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGEzODQiLAorCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMzg0LXMzOTAiLAorCQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKKwkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKKwkJLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhMzg0Iik7CkBAIC05MywxOCArOTgsMTggQEAKIAogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV81MTIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGE1MTJfYWxnKSkgPCAwKQorCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKSkgPCAwKQogCQlnb3RvIG91dDsKLQlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnNoYTM4NF9hbGcpKSA8IDApCi0JCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7CisJaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJnNoYTM4NF9hbGcpKSA8IDApCisJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTM4NF9hbGcpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKaW5kZXggOWQ2ZWI4Yy4uNzkwM2VjNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKQEAgLTEzLDE0ICsxMywxNCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlICJzaGEuaCIKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLXZvaWQgczM5MF9zaGFfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoraW50IHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKGRlc2MtPnRmbSk7CiAJdW5zaWduZWQgaW50IGluZGV4OwogCWludCByZXQ7CiAKQEAgLTUxLDEzICs1MSwxNSBAQAogc3RvcmU6CiAJaWYgKGxlbikKIAkJbWVtY3B5KGN0eC0+YnVmICsgaW5kZXggLCBkYXRhLCBsZW4pOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV91cGRhdGUpOwogCi12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCitpbnQgczM5MF9zaGFfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKGRlc2MtPnRmbSk7CiAJdTY0IGJpdHM7CiAJdW5zaWduZWQgaW50IGluZGV4LCBlbmQsIHBsZW47CiAJaW50IHJldDsKQEAgLTg3LDkgKzg5LDExIEBACiAJQlVHX09OKHJldCAhPSBlbmQpOwogCiAJLyogY29weSBkaWdlc3QgdG8gb3V0ICovCi0JbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShjcnlwdG9faGFzaF9jYXN0KHRmbSkpKTsKKwltZW1jcHkob3V0LCBjdHgtPnN0YXRlLCBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShkZXNjLT50Zm0pKTsKIAkvKiB3aXBlIGNvbnRleHQgKi8KIAltZW1zZXQoY3R4LCAwLCBzaXplb2YgKmN0eCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHMzOTBfc2hhX2ZpbmFsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDhlOTI0M2EuLmIzMDYwNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAqIHdpdGggb3BlcmF0aW9uIG9mIHRoZSBmb3JtICJzZXRfYml0KGJpdG5yLCBmbGFncykiLgogICovCiAKLS8qIGJpdG1hcCB0YWJsZXMgZnJvbSBhcmNoL1MzOTAva2VybmVsL2JpdG1hcC5TICovCisvKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgX29pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX25pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX3piX2ZpbmRtYXBbXTsKQEAgLTUyNSwxNiArNTI1LDE2IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnpfd29yZCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAjaWZkZWYgX19zMzkweF9fCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZikgewogCQl3b3JkID4+PSAzMjsKIAkJbnIgKz0gMzI7CiAJfQogI2VuZGlmCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMHhmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZikgPT0gMHhmZmZmKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDB4ZmYpKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMHhmZikgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KQEAgLTU0OSwxNiArNTQ5LDE2IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnNfd29yZCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAjaWZkZWYgX19zMzkweF9fCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmZmZmZikgPT0gMCkgewogCQl3b3JkID4+PSAzMjsKIAkJbnIgKz0gMzI7CiAJfQogI2VuZGlmCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMCkpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMTY7CiAJCW5yICs9IDE2OwogCX0KLQlpZiAobGlrZWx5KCh3b3JkICYgMHhmZikgPT0gMCkpIHsKKwlpZiAoKHdvcmQgJiAweGZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDg7CiAJCW5yICs9IDg7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODVhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICAgRGF0YSBkZWZpbml0aW9ucyBmb3IgY2hhbm5lbCByZXBvcnQgcHJvY2Vzc2luZworICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX0NSV19ICisjZGVmaW5lIF9BU01fUzM5MF9DUldfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIENoYW5uZWwgUmVwb3J0IFdvcmQKKyAqLworc3RydWN0IGNydyB7CisJX191MzIgcmVzMSA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBzbGN0IDogIDE7ICAgLyogc29saWNpdGVkICovCisJX191MzIgb2ZsdyA6ICAxOyAgIC8qIG92ZXJmbG93ICovCisJX191MzIgY2huICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KKwlfX3UzMiByc2MgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCisJX191MzIgYW5jICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KKwlfX3UzMiByZXMyIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLworCV9fdTMyIGVyYyAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCisJX191MzIgcnNpZCA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit0eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKKworZXh0ZXJuIGludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpOworZXh0ZXJuIHZvaWQgY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjKTsKK2V4dGVybiB2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCk7CisKKyNkZWZpbmUgTlJfUlNDUyAxNgorCisjZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCisjZGVmaW5lIENSV19SU0NfU0NICSAweDMgIC8qIHN1YmNoYW5uZWwgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DUEFUSAkgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KKyNkZWZpbmUgQ1JXX1JTQ19DT05GSUcJIDB4OSAgLyogY29uZmlndXJhdGlvbi1hbGVydCBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX0NTUwkgMHhCICAvKiBjaGFubmVsIHN1YnN5c3RlbSAqLworCisjZGVmaW5lIENSV19FUkNfRVZFTlQJIDB4MDAgLyogZXZlbnQgaW5mb3JtYXRpb24gcGVuZGluZyAqLworI2RlZmluZSBDUldfRVJDX0FWQUlMCSAweDAxIC8qIGF2YWlsYWJsZSAqLworI2RlZmluZSBDUldfRVJDX0lOSVQJIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19URVJST1IJIDB4MDMgLyogdGVtcG9yYXJ5IGVycm9yICovCisjZGVmaW5lIENSV19FUkNfSVBBUk0JIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19URVJNCSAweDA1IC8qIHRlcm1pbmFsICovCisjZGVmaW5lIENSV19FUkNfUEVSUk4JIDB4MDYgLyogcGVybS4gZXJyb3IsIGZhYy4gbm90IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QRVJSSQkgMHgwNyAvKiBwZXJtLiBlcnJvciwgZmFjaWxpdHkgaW5pdCAqLworI2RlZmluZSBDUldfRVJDX1BNT0QJIDB4MDggLyogaW5zdGFsbGVkIHBhcmFtZXRlcnMgbW9kaWZpZWQgKi8KKworc3RhdGljIGlubGluZSBpbnQgc3Rjcncoc3RydWN0IGNydyAqcGNydykKK3sKKwlpbnQgY2NvZGU7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjcncJMCglMilcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjhcbiIKKwkJOiAiPWQiIChjY29kZSksICI9bSIgKCpwY3J3KQorCQk6ICJhIiAocGNydykKKwkJOiAiY2MiICk7CisJcmV0dXJuIGNjb2RlOworfQorCisjZW5kaWYgLyogX0FTTV9TMzkwX0NSV19IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAppbmRleCBlMmRiNmYxLi4yMThiY2U4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKQEAgLTE2MiwxNSArMTYyLDE1IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBkYXNkX2lvX25yX3JlcVszMl07IC8qIGhpc3RvZ3JhbSBvZiAjIG9mIHJlcXVlc3RzIGluIGNoYW5xICovCiB9IGRhc2RfcHJvZmlsZV9pbmZvX3Q7CiAKLS8qIAorLyoKICAqIHN0cnVjdCBmb3JtYXRfZGF0YV90CiAgKiByZXByZXNlbnRzIGFsbCBkYXRhIG5lY2Vzc2FyeSB0byBmb3JtYXQgYSBkYXNkCiAgKi8KIHR5cGVkZWYgc3RydWN0IGZvcm1hdF9kYXRhX3QgewotCWludCBzdGFydF91bml0OyAvKiBmcm9tIHRyYWNrICovCi0JaW50IHN0b3BfdW5pdDsgIC8qIHRvIHRyYWNrICovCi0JaW50IGJsa3NpemU7ICAgIC8qIHNlY3RvcnNpemUgKi8KLSAgICAgICAgaW50IGludGVuc2l0eTsgIAorCXVuc2lnbmVkIGludCBzdGFydF91bml0OyAvKiBmcm9tIHRyYWNrICovCisJdW5zaWduZWQgaW50IHN0b3BfdW5pdDsgIC8qIHRvIHRyYWNrICovCisJdW5zaWduZWQgaW50IGJsa3NpemU7CSAvKiBzZWN0b3JzaXplICovCisJdW5zaWduZWQgaW50IGludGVuc2l0eTsKIH0gZm9ybWF0X2RhdGFfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKaW5kZXggZTgyYzEwZS4uYWFlMjc2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKQEAgLTQ0LDI0ICs0NCwxOCBAQAogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGlkYWwgd29yZHMgbmVlZGVkIGZvciBhbiBhZGRyZXNzL2xlbmd0aCBwYWlyLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotaWRhbF9ucl93b3Jkcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCi0JaWYgKGlkYWxfaXNfbmVlZGVkKHZhZGRyLCBsZW5ndGgpKQotCQlyZXR1cm4gKChfX3BhKHZhZGRyKSAmIChJREFfQkxPQ0tfU0laRS0xKSkgKyBsZW5ndGggKyAKLQkJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwotI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsKKwkJKElEQV9CTE9DS19TSVpFLTEpKSA+PiBJREFfU0laRV9MT0c7CiB9CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGxpc3Qgb2YgaWRhbCB3b3JkcyBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICoKLWlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqaWRhbF9jcmVhdGVfd29yZHModW5zaWduZWQgbG9uZyAqaWRhd3MsCisJCQkJCSAgICAgICB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKLSNpZmRlZiBfX3MzOTB4X18KIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCXVuc2lnbmVkIGludCBjaWRhdzsKIApAQCAtNzQsNyArNjgsNiBAQAogCQlwYWRkciArPSBJREFfQkxPQ0tfU0laRTsKIAkJKmlkYXdzKysgPSBwYWRkcjsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gaWRhd3M7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaAppbmRleCBlMWY1NDY1Li4wYjJmODI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCkBAIC00Miw0ICs0MiwxMSBAQAogCV9fdTY0IGZwcnNbMTZdOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2M1NWU0MS4uYzZlNjc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIxLDkgKzIxLDYgQEAKIC8qIG1lbW9yeSBzbG90cyB0aGF0IGRvZXMgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlICovCiAjZGVmaW5lIEtWTV9QUklWQVRFX01FTV9TTE9UUyA0CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotfTsKLQogc3RydWN0IHNjYV9lbnRyeSB7CiAJYXRvbWljX3Qgc2NuOwogCV9fdTY0CXJlc2VydmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggZjM3MjBkZS4uYjM0OWYxYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xMSwxMjkgKzExLDExOCBAQAogI2lmbmRlZiBfQVNNX1MzOTBfTE9XQ09SRV9ICiAjZGVmaW5lIF9BU01fUzM5MF9MT1dDT1JFX0gKIAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxOAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDIwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMjgKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAzMAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cgICAgICAgICAgICAgICAgIDB4MDM4Ci0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNTgKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2MAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDY4Ci0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNzAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDA3OAotI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDEzMAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE0MAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE1MAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE2MAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cgICAgICAgICAgICAgICAgIDB4MDE3MAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFiMAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFjMAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFkMAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFlMAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cgICAgICAgICAgICAgICAgIDB4MDFmMAotI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KKyNkZWZpbmUgX19MQ19JUExfUEFSTUJMT0NLX1BUUgkJMHgwMDE0CisjZGVmaW5lIF9fTENfRVhUX1BBUkFNUwkJCTB4MDA4MAorI2RlZmluZSBfX0xDX0NQVV9BRERSRVNTCQkweDAwODQKKyNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUJCTB4MDA4NgogCi0jZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDE0Ci0jZGVmaW5lIF9fTENfRVhUX1BBUkFNUyAgICAgICAgICAgICAgICAgMHgwODAKLSNkZWZpbmUgX19MQ19DUFVfQUREUkVTUyAgICAgICAgICAgICAgICAweDA4NAotI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDg2CisjZGVmaW5lIF9fTENfU1ZDX0lMQwkJCTB4MDA4OAorI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERQkJMHgwMDhhCisjZGVmaW5lIF9fTENfUEdNX0lMQwkJCTB4MDA4YworI2RlZmluZSBfX0xDX1BHTV9JTlRfQ09ERQkJMHgwMDhlCiAKLSNkZWZpbmUgX19MQ19TVkNfSUxDICAgICAgICAgICAgICAgICAgICAweDA4OAotI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDhBCi0jZGVmaW5lIF9fTENfUEdNX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwOEMKLSNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUgICAgICAgICAgICAgICAweDA4RQorI2RlZmluZSBfX0xDX1BFUl9BVE1JRAkJCTB4MDA5NgorI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDAwOTgKKyNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDAwYTEKKyNkZWZpbmUgX19MQ19BUl9NT0RFX0lECQkJMHgwMGEzCiAKLSNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDA5NgotI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDA5OAotI2RlZmluZSBfX0xDX1BFUl9BQ0NFU1NfSUQJCTB4MEExCi0jZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MEEzCisjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9JRAkJMHgwMGI4CisjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUgkJMHgwMGJhCisjZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0JCTB4MDBiYworI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JECQkweDAwYzAKKyNkZWZpbmUgX19MQ19NQ0NLX0NPREUJCQkweDAwZTgKIAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQgICAgICAgICAgICAgIDB4MEI4Ci0jZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUiAgICAgICAgICAgICAgMHgwQkEKLSNkZWZpbmUgX19MQ19JT19JTlRfUEFSTSAgICAgICAgICAgICAgICAweDBCQwotI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JEICAgICAgICAgICAgICAgIDB4MEMwCi0jZGVmaW5lIF9fTENfTUNDS19DT0RFICAgICAgICAgICAgICAgICAgMHgwRTgKLQotI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsgCQkweDExMAotCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVyAgICAgICAgICAgICAgICAgMHgyMDAKLQotI2RlZmluZSBfX0xDX1NBVkVfQVJFQSAgICAgICAgICAgICAgICAgIDB4QzAwCisjZGVmaW5lIF9fTENfRFVNUF9SRUlQTAkJCTB4MGUwMAogCiAjaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MjA4Ci0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNDgKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNTgKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNjAKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MjcwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4Mjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MjgwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXICAgICAgICAgICAgMHgyODgKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEM0MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEM0NAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4QzQ4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4QzRDCi0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhDNTAKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEM1NAotI2RlZmluZSBfX0xDX0NQVUlEICAgICAgICAgICAgICAgICAgICAgIDB4QzYwCi0jZGVmaW5lIF9fTENfQ1BVQUREUiAgICAgICAgICAgICAgICAgICAgMHhDNjgKLSNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweEM3QwotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEM5MAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4Qzk4CisjZGVmaW5lIF9fTENfRVhUX09MRF9QU1cJCTB4MDAxOAorI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXCQkweDAwMjAKKyNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMDI4CisjZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDAzMAorI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAwMzgKKyNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVwkJMHgwMDU4CisjZGVmaW5lIF9fTENfU1ZDX05FV19QU1cJCTB4MDA2MAorI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXCQkweDAwNjgKKyNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVwkJMHgwMDcwCisjZGVmaW5lIF9fTENfSU9fTkVXX1BTVwkJCTB4MDA3OAorI2RlZmluZSBfX0xDX1NBVkVfQVJFQQkJCTB4MDIwMAorI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cJCQkweDAyNDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fTUNDS19QU1cJCTB4MDI0OAorI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MDI1MAorI2RlZmluZSBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCQkweDAyNTgKKyNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgwMjYwCisjZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MDI2OAorI2RlZmluZSBfX0xDX1NZU1RFTV9USU1FUgkJMHgwMjcwCisjZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MDI3OAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDAyODAKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9DTE9DSwkJMHgwMjg4CisjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4MDI5MAorI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweDAyOTQKKyNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sJCTB4MDI5OAorI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLCQkweDAyOWMKKyNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSwkJMHgwMmEwCisjZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4MDJhNAorI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4MDJhOAorI2RlZmluZSBfX0xDX1VTRVJfRVhFQ19BU0NFCQkweDAyYWMKKyNkZWZpbmUgX19MQ19DUFVJRAkJCTB4MDJiMAorI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4MDJjOAorI2RlZmluZSBfX0xDX0lSQgkJCTB4MDMwMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCTB4MDBkOAorI2RlZmluZSBfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBCTB4MDBlMAorI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MDEwMAorI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MDEwOAorI2RlZmluZSBfX0xDX0FSRUdTX1NBVkVfQVJFQQkJMHgwMTIwCisjZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgwMTYwCisjZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgwMTgwCisjZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBCQkweDAxYzAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MjEwCi0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTgKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MjcwCi0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4Mjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MjgwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4Mjg4Ci0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXICAgICAgICAgICAgMHgyOTAKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEQ0MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEQ0OAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4RDUwCi0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4RDU4Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhENjAKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ2OAotI2RlZmluZSBfX0xDX0NQVUlECQkJMHhEODAKLSNkZWZpbmUgX19MQ19DUFVBRERSCQkJMHhEODgKLSNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweERCOAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEREOAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4REU4Ci0jZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweEUzOAotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCi0jZGVmaW5lIF9fTENfUEFTVEUJCQkweEU0MAotCi0jZGVmaW5lIF9fTENfUEFOSUNfTUFHSUMJCTB4RTAwCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQSAgICAgICAgMHgwRDgKLSNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDBFMAotI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgxMDgKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEyMAotI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTYwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQSAgICAgICAgICAgMHgxODAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDFDMAotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0gICAgICAgICAgICAgMHgxMUI4CisjZGVmaW5lIF9fTENfTEFTVF9CUkVBSwkJCTB4MDExMAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAxMzAKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMTQwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDE1MAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAxNjAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMTcwCisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDFiMAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAxYzAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMWQwCisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDFlMAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAxZjAKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjgwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyOTAKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyYTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMmE4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDJiMAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyYjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDJjMAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyYzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMmQwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDJkOAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyZTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMmU4CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyZjAKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMmY4CisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDMwMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAzMDgKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAzMTAKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMzE4CisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAzMjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAzNDAKKyNkZWZpbmUgX19MQ19WRFNPX1BFUl9DUFUJCTB4MDM1MAorI2RlZmluZSBfX0xDX0lSQgkJCTB4MDM4MAorI2RlZmluZSBfX0xDX1BBU1RFCQkJMHgwM2MwCisjZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MTFiOAogI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTIwMAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTI4MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MTI4MAogI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTMwMAogI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTMxOAotI2RlZmluZSBfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBCQkweDEzMUMKKyNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFjCiAjZGVmaW5lIF9fTENfVE9EUkVHX1NBVkVfQVJFQQkJMHgxMzI0Ci0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQSAgICAgICAgMHgxMzI4CisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDEzMjgKICNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDEzMzEKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzNDAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzODAKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MTM0MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgxMzgwCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0xOTgsMjIyICsxODcsMjQwIEBACiBzdHJ1Y3QgX2xvd2NvcmUKIHsKICNpZm5kZWYgX19zMzkweF9fCi0gICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X3BzdzsgICAgICAgICAgICAgIC8qIDB4MDAwICovCi0JX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDAxOCAqLwotCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MDIwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgwMjggKi8KLQlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDAzMCAqLwotCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MDM4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg1OC0weDQwXTsgICAgICAgICAgLyogMHgwNDAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDA1OCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MDYwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgwNjggKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDA3MCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MDc4ICovCi0JX191MzIgICAgICAgIGV4dF9wYXJhbXM7ICAgICAgICAgICAgICAgLyogMHgwODAgKi8KLQlfX3UxNiAgICAgICAgY3B1X2FkZHI7ICAgICAgICAgICAgICAgICAvKiAweDA4NCAqLwotCV9fdTE2ICAgICAgICBleHRfaW50X2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDg2ICovCi0gICAgICAgIF9fdTE2ICAgICAgICBzdmNfaWxjOyAgICAgICAgICAgICAgICAgIC8qIDB4MDg4ICovCi0gICAgICAgIF9fdTE2ICAgICAgICBzdmNfY29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDhhICovCi0gICAgICAgIF9fdTE2ICAgICAgICBwZ21faWxjOyAgICAgICAgICAgICAgICAgIC8qIDB4MDhjICovCi0gICAgICAgIF9fdTE2ICAgICAgICBwZ21fY29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDhlICovCi0JX191MzIgICAgICAgIHRyYW5zX2V4Y19jb2RlOyAgICAgICAgICAgLyogMHgwOTAgKi8KLQlfX3UxNiAgICAgICAgbW9uX2NsYXNzX251bTsgICAgICAgICAgICAvKiAweDA5NCAqLwotCV9fdTE2ICAgICAgICBwZXJfcGVyY19hdG1pZDsgICAgICAgICAgIC8qIDB4MDk2ICovCi0JX191MzIgICAgICAgIHBlcl9hZGRyZXNzOyAgICAgICAgICAgICAgLyogMHgwOTggKi8KLQlfX3UzMiAgICAgICAgbW9uaXRvcl9jb2RlOyAgICAgICAgICAgICAvKiAweDA5YyAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgcGFkMlsweEI4LTB4QTJdOyAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX2lkOyAgICAgICAgICAgIC8qIDB4MGI4ICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfbnI7ICAgICAgICAgICAgLyogMHgwYmEgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3Bhcm07ICAgICAgICAgICAgICAvKiAweDBiYyAqLwotCV9fdTMyICAgICAgICBpb19pbnRfd29yZDsgICAgICAgICAgICAgIC8qIDB4MGMwICovCi0JX191OAkgICAgIHBhZDNbMHhjOC0weGM0XTsJICAgICAgIC8qIDB4MGM0ICovCi0JX191MzIJICAgICBzdGZsX2ZhY19saXN0OwkgICAgICAgLyogMHgwYzggKi8KLQlfX3U4CSAgICAgcGFkNFsweGQ0LTB4Y2NdOwkgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7ICAvKiAweDBkNCAqLwotCV9fdTMyICAgICAgICBjcHVfdGltZXJfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MGQ4ICovCi0JX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgLyogMHgwZTAgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4CSAgICAgcGFkNVsweGY0LTB4ZjBdOwkgICAgICAgLyogMHgwZjAgKi8KLQlfX3UzMiAgICAgICAgZXh0ZXJuYWxfZGFtYWdlX2NvZGU7ICAgICAvKiAweDBmNCAqLwotCV9fdTMyICAgICAgICBmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsgIC8qIDB4MGY4ICovCi0JX191OAkgICAgIHBhZDZbMHgxMDAtMHhmY107CSAgICAgICAvKiAweDBmYyAqLwotCV9fdTMyICAgICAgICBzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOy8qIDB4MTAwICovCi0JX191OAkgICAgIHBhZDdbMHgxMjAtMHgxMTBdOyAgICAgICAgLyogMHgxMTAgKi8KLQlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsvKiAweDEyMCAqLwotCV9fdTMyICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07IC8qIDB4MTYwICovCi0JX191MzIgICAgICAgIGdwcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgLyogMHgxODAgKi8KLQlfX3UzMiAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDFjMCAqLwkKKwkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJcHN3X3QJcmVzdGFydF9wc3c7CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMDE4ICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMDIwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMDI4ICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDAzMCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMDM4ICovCisJX191OAlwYWRfMHgwMDQwWzB4MDA1OC0weDAwNDBdOwkvKiAweDAwNDAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMDU4ICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMDYwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMDY4ICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDA3MCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMDc4ICovCisJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KKwlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KKwlfX3UxNglleHRfaW50X2NvZGU7CQkJLyogMHgwMDg2ICovCisJX191MTYJc3ZjX2lsYzsJCQkvKiAweDAwODggKi8KKwlfX3UxNglzdmNfY29kZTsJCQkvKiAweDAwOGEgKi8KKwlfX3UxNglwZ21faWxjOwkJCS8qIDB4MDA4YyAqLworCV9fdTE2CXBnbV9jb2RlOwkJCS8qIDB4MDA4ZSAqLworCV9fdTMyCXRyYW5zX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJX191MzIJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCisJX191MzIJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDA5YyAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlwYWRfMHgwMGEyWzB4MDBiOC0weDAwYTJdOwkvKiAweDAwYTIgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZDQtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7CS8qIDB4MDBkNCAqLworCV9fdTMyCWNwdV90aW1lcl9zYXZlX2FyZWFbMl07CQkvKiAweDAwZDggKi8KKwlfX3UzMgljbG9ja19jb21wX3NhdmVfYXJlYVsyXTsJLyogMHgwMGUwICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCV9fdTMyCWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KKwlfX3U4CXBhZF8weDAwZmNbMHgwMTAwLTB4MDBmY107CS8qIDB4MDBmYyAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MDEwMCAqLworCV9fdTgJcGFkXzB4MDExMFsweDAxMjAtMHgwMTEwXTsJLyogMHgwMTEwICovCiAKLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KLQlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIwOCAqLwotCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjQ4ICovCi0JX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTAgKi8KLQlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI1OCAqLwotCV9fdTY0CSAgICAgdXNlcl90aW1lcjsJICAgICAgIC8qIDB4MjYwICovCi0JX191NjQJICAgICBzeXN0ZW1fdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3RlYWxfdGltZXI7CSAgICAgICAvKiAweDI3MCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfdGltZXI7ICAgICAgICAvKiAweDI3OCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfY2xvY2s7ICAgICAgICAvKiAweDI4MCAqLwotICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX21jY2tfcHN3OyAgICAgICAgICAvKiAweDI4OCAqLwotCV9fdTggICAgICAgICBwYWQ4WzB4YzAwLTB4MjkwXTsgICAgICAgIC8qIDB4MjkwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3UzMglhY2Nlc3NfcmVnc19zYXZlX2FyZWFbMTZdOwkvKiAweDAxMjAgKi8KKwlfX3UzMglmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07CS8qIDB4MDE2MCAqLworCV9fdTMyCWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgwMTgwICovCisJX191MzIJY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDFjMCAqLwogCi0gICAgICAgIC8qIFN5c3RlbSBpbmZvIGFyZWEgKi8KLQlfX3UzMiAgICAgICAgc2F2ZV9hcmVhWzE2XTsgICAgICAgICAgICAvKiAweGMwMCAqLwotCV9fdTMyICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4YzQwICovCi0JX191MzIgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhjNDQgKi8KLQlfX3UzMiAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGM0OCAqLwotCV9fdTMyICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4YzRjICovCi0JX191MzIgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhjNTAgKi8KLQlfX3UzMiAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGM1NCAqLwotCV9fdTMyCSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGM1OCAqLwotCV9fdTgJICAgICBwYWQxMFsweGM2MC0weGM1Y107ICAgICAgIC8qIDB4YzVjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4YzYwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhjN2MgKi8KLQkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIGVuZCAqLworCS8qIFJldHVybiBwc3dzLiAqLworCV9fdTMyCXNhdmVfYXJlYVsxNl07CQkJLyogMHgwMjAwICovCisJcHN3X3QJcmV0dXJuX3BzdzsJCQkvKiAweDAyNDAgKi8KKwlwc3dfdAlyZXR1cm5fbWNja19wc3c7CQkvKiAweDAyNDggKi8KIAotICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4YzgwICovCi0JX191MzIgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhjODggKi8KLQlfX3UzMiAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGM4YyAqLwotCV9fdTMyICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGM5MCAqLwotCV9fdTMyICAgICAgICBzb2Z0aXJxX3BlbmRpbmc7CSAgICAgICAvKiAweGM5NCAqLwotCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4Yzk4ICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQxMVsweGUwMC0weGNhMF07ICAgICAgIC8qIDB4Y2EwICovCisJLyogQ1BVIHRpbWUgYWNjb3VudGluZyB2YWx1ZXMgKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjUwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyNTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDI2MCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMjY4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDI3MCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDI3OCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMjgwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyODggKi8KIAotICAgICAgICAvKiAweGUwMCBpcyB1c2VkIGFzIGluZGljYXRvciBmb3IgZHVtcCB0b29scyAqLwotICAgICAgICAvKiB3aGV0aGVyIHRoZSBrZXJuZWwgZGllZCB3aXRoIHBhbmljKCkgb3Igbm90ICovCi0gICAgICAgIF9fdTMyICAgICAgICBwYW5pY19tYWdpYzsgICAgICAgICAgICAgIC8qIDB4ZTAwICovCisJLyogQ3VycmVudCBwcm9jZXNzLiAqLworCV9fdTMyCWN1cnJlbnRfdGFzazsJCQkvKiAweDAyOTAgKi8KKwlfX3UzMgl0aHJlYWRfaW5mbzsJCQkvKiAweDAyOTQgKi8KKwlfX3UzMglrZXJuZWxfc3RhY2s7CQkJLyogMHgwMjk4ICovCiAKLSAgICAgICAgLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLwotCV9fdTggICAgICAgICBwYWQxMlsweDEwMDAtMHhlMDRdOyAgICAgIC8qIDB4ZTA0ICovCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3UzMglhc3luY19zdGFjazsJCQkvKiAweDAyOWMgKi8KKwlfX3UzMglwYW5pY19zdGFjazsJCQkvKiAweDAyYTAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3UzMglrZXJuZWxfYXNjZTsJCQkvKiAweDAyYTQgKi8KKwlfX3UzMgl1c2VyX2FzY2U7CQkJLyogMHgwMmE4ICovCisJX191MzIJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMmFjICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDJiMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMmI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMmJjICovCisJX191MzIJcGVyY3B1X29mZnNldDsJCQkvKiAweDAyYzAgKi8KKwlfX3UzMglleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDJjNCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAyYzggKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMmQwICovCisJX191OAlwYWRfMHgwMmQ4WzB4MDMwMC0weDAyZDhdOwkvKiAweDAyZDggKi8KKworCS8qIEludGVycnVwdCByZXNwb25zZSBibG9jayAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzMDAgKi8KKworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCisKKwkvKgorCSAqIDB4ZTAwIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBJUEwgUGFyYW1ldGVyIEluZm9ybWF0aW9uCisJICogYmxvY2suIER1bXAgdG9vbHMgbmVlZCBJUElCIGZvciBJUEwgYWZ0ZXIgZHVtcC4KKwkgKiBOb3RlOiBkbyBub3QgY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiBhbnkgZmllbGRzIGluIDB4MGUwMC0weDBmMDAKKwkgKi8KKwlfX3UzMglpcGliOwkJCQkvKiAweDBlMDAgKi8KKwlfX3UzMglpcGliX2NoZWNrc3VtOwkJCS8qIDB4MGUwNCAqLworCisJLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLworCV9fdTgJcGFkXzB4MGUwOFsweDEwMDAtMHgwZTA4XTsJLyogMHgwZTA4ICovCiAjZWxzZSAvKiAhX19zMzkweF9fICovCi0gICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCV9fdTMyICAgICAgICBjY3cxWzJdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAwICovCi0JX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KLQlfX3U4ICAgICAgICAgcGFkMVsweDgwLTB4MThdOyAgICAgICAgICAvKiAweDAxOCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICBkYXRhX2V4Y19jb2RlOyAgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCWFkZHJfdCAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191OCAgICAgICAgIGV4Y19hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTAgKi8KLQlfX3U4ICAgICAgICAgcGVyX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMSAqLwotCV9fdTggICAgICAgICBvcF9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEyICovCi0JX191OCAgICAgICAgIGFyX2FjY2Vzc19pZDsgICAgICAgICAgICAgLyogMHgwYTMgKi8KLQlfX3U4ICAgICAgICAgcGFkMlsweEE4LTB4QTRdOyAgICAgICAgICAvKiAweDBhNCAqLwotCWFkZHJfdCAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MEEwICovCi0JYWRkcl90ICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTggICAgICAgICBwYWQzWzB4YzgtMHhjNF07ICAgICAgICAgIC8qIDB4MGM0ICovCi0JX191MzIgICAgICAgIHN0ZmxfZmFjX2xpc3Q7ICAgICAgICAgICAgLyogMHgwYzggKi8KLQlfX3U4ICAgICAgICAgcGFkNFsweGU4LTB4Y2NdOyAgICAgICAgICAvKiAweDBjYyAqLwotCV9fdTMyICAgICAgICBtY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOyAvKiAweDBlOCAqLwotCV9fdTggICAgICAgICBwYWQ1WzB4ZjQtMHhmMF07ICAgICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlhZGRyX3QgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTggICAgICAgICBwYWQ2WzB4MTIwLTB4MTAwXTsgICAgICAgIC8qIDB4MTAwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfb2xkX3BzdzsgICAgICAgICAgLyogMHgxMjAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDEzMCAqLwotCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MTQwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgxNTAgKi8KLQlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDE2MCAqLwotCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MTcwICovCi0JX191OCAgICAgICAgIHBhZDdbMHgxYTAtMHgxODBdOyAgICAgICAgLyogMHgxODAgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDFhMCAqLwotCXBzd190ICAgICAgICBleHRlcm5hbF9uZXdfcHN3OyAgICAgICAgIC8qIDB4MWIwICovCi0JcHN3X3QgICAgICAgIHN2Y19uZXdfcHN3OyAgICAgICAgICAgICAgLyogMHgxYzAgKi8KLQlwc3dfdCAgICAgICAgcHJvZ3JhbV9uZXdfcHN3OyAgICAgICAgICAvKiAweDFkMCAqLwotCXBzd190ICAgICAgICBtY2NrX25ld19wc3c7ICAgICAgICAgICAgIC8qIDB4MWUwICovCi0JcHN3X3QgICAgICAgIGlvX25ld19wc3c7ICAgICAgICAgICAgICAgLyogMHgxZjAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KLQlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIxMCAqLwotCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgdXNlcl90aW1lcjsJICAgICAgIC8qIDB4MjY4ICovCi0JX191NjQJICAgICBzeXN0ZW1fdGltZXI7CSAgICAgICAvKiAweDI3MCAqLwotCV9fdTY0CSAgICAgc3RlYWxfdGltZXI7CSAgICAgICAvKiAweDI3OCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfdGltZXI7ICAgICAgICAvKiAweDI4MCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfY2xvY2s7ICAgICAgICAvKiAweDI4OCAqLwotICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX21jY2tfcHN3OyAgICAgICAgICAvKiAweDI5MCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDJhMF07ICAgICAgICAvKiAweDJhMCAqLwotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191NjQgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDlbMHhkNDAtMHhjODBdOyAgICAgICAgLyogMHhjODAgKi8KLSAJX191NjQgICAgICAgIGtlcm5lbF9zdGFjazsgICAgICAgICAgICAgLyogMHhkNDAgKi8KLQlfX3U2NCAgICAgICAgdGhyZWFkX2luZm87ICAgICAgICAgICAgICAvKiAweGQ0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDUwICovCi0JX191NjQgICAgICAgIGtlcm5lbF9hc2NlOyAgICAgICAgICAgICAgLyogMHhkNTggKi8KLQlfX3U2NCAgICAgICAgdXNlcl9hc2NlOyAgICAgICAgICAgICAgICAvKiAweGQ2MCAqLwotCV9fdTY0ICAgICAgICBwYW5pY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDY4ICovCi0JX191NjQJICAgICB1c2VyX2V4ZWNfYXNjZTsJICAgICAgIC8qIDB4ZDcwICovCi0JX191OAkgICAgIHBhZDEwWzB4ZDgwLTB4ZDc4XTsgICAgICAgLyogMHhkNzggKi8KLQkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIHN0YXJ0ICovCi0Jc3RydWN0ICAgICAgIGNwdWluZm9fUzM5MCBjcHVfZGF0YTsgICAgLyogMHhkODAgKi8KLQlfX3UzMiAgICAgICAgaXBsX2RldmljZTsgICAgICAgICAgICAgICAvKiAweGRiOCAqLwotCV9fdTMyICAgICAgICBwYWQxMTsgICAgICAgICAgICAgICAgICAgIC8qIDB4ZGJjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJY2N3MVsyXTsJCQkvKiAweDAwMDAgKi8KKwlfX3UzMgljY3cyWzRdOwkJCS8qIDB4MDAwOCAqLworCV9fdTgJcGFkXzB4MDAxOFsweDAwODAtMHgwMDE4XTsJLyogMHgwMDE4ICovCisJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KKwlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KKwlfX3UxNglleHRfaW50X2NvZGU7CQkJLyogMHgwMDg2ICovCisJX191MTYJc3ZjX2lsYzsJCQkvKiAweDAwODggKi8KKwlfX3UxNglzdmNfY29kZTsJCQkvKiAweDAwOGEgKi8KKwlfX3UxNglwZ21faWxjOwkJCS8qIDB4MDA4YyAqLworCV9fdTE2CXBnbV9jb2RlOwkJCS8qIDB4MDA4ZSAqLworCV9fdTMyCWRhdGFfZXhjX2NvZGU7CQkJLyogMHgwMDkwICovCisJX191MTYJbW9uX2NsYXNzX251bTsJCQkvKiAweDAwOTQgKi8KKwlfX3UxNglwZXJfcGVyY19hdG1pZDsJCQkvKiAweDAwOTYgKi8KKwlhZGRyX3QJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCisJX191OAlleGNfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMCAqLworCV9fdTgJcGVyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTEgKi8KKwlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KKwlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CXBhZF8weDAwYTRbMHgwMGE4LTB4MDBhNF07CS8qIDB4MDBhNCAqLworCWFkZHJfdAl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwYTggKi8KKwlhZGRyX3QJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDBiMCAqLworCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCisJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KKwlfX3UzMglpb19pbnRfcGFybTsJCQkvKiAweDAwYmMgKi8KKwlfX3UzMglpb19pbnRfd29yZDsJCQkvKiAweDAwYzAgKi8KKwlfX3U4CXBhZF8weDAwYzRbMHgwMGM4LTB4MDBjNF07CS8qIDB4MDBjNCAqLworCV9fdTMyCXN0ZmxfZmFjX2xpc3Q7CQkJLyogMHgwMGM4ICovCisJX191OAlwYWRfMHgwMGNjWzB4MDBlOC0weDAwY2NdOwkvKiAweDAwY2MgKi8KKwlfX3UzMgltY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOwkvKiAweDAwZTggKi8KKwlfX3U4CXBhZF8weDAwZjBbMHgwMGY0LTB4MDBmMF07CS8qIDB4MDBmMCAqLworCV9fdTMyCWV4dGVybmFsX2RhbWFnZV9jb2RlOwkJLyogMHgwMGY0ICovCisJYWRkcl90CWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KKwlfX3U4CXBhZF8weDAxMDBbMHgwMTIwLTB4MDEwMF07CS8qIDB4MDEwMCAqLworCXBzd190CXJlc3RhcnRfb2xkX3BzdzsJCS8qIDB4MDEyMCAqLworCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAxMzAgKi8KKwlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAxNDAgKi8KKwlwc3dfdAlwcm9ncmFtX29sZF9wc3c7CQkvKiAweDAxNTAgKi8KKwlwc3dfdAltY2NrX29sZF9wc3c7CQkJLyogMHgwMTYwICovCisJcHN3X3QJaW9fb2xkX3BzdzsJCQkvKiAweDAxNzAgKi8KKwlfX3U4CXBhZF8weDAxODBbMHgwMWEwLTB4MDE4MF07CS8qIDB4MDE4MCAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDFhMCAqLworCXBzd190CWV4dGVybmFsX25ld19wc3c7CQkvKiAweDAxYjAgKi8KKwlwc3dfdAlzdmNfbmV3X3BzdzsJCQkvKiAweDAxYzAgKi8KKwlwc3dfdAlwcm9ncmFtX25ld19wc3c7CQkvKiAweDAxZDAgKi8KKwlwc3dfdAltY2NrX25ld19wc3c7CQkJLyogMHgwMWUwICovCisJcHN3X3QJaW9fbmV3X3BzdzsJCQkvKiAweDAxZjAgKi8KIAotICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4ZGMwICovCi0JX191NjQgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhkYzggKi8KLQlfX3U2NCAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGRkMCAqLwotCV9fdTY0ICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGRkOCAqLwotCV9fdTMyCSAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhkZTAgKi8KLQlfX3UzMgkgICAgIHBhZF8weDBkZTQ7CSAgICAgICAvKiAweGRlNCAqLwotCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4ZGU4ICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQxMlsweGUwMC0weGRmMF07ICAgICAgIC8qIDB4ZGYwICovCisJLyogRW50cnkvZXhpdCBzYXZlIGFyZWEgJiByZXR1cm4gcHN3cy4gKi8KKwlfX3U2NAlzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjgwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjkwICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIENQVSBhY2NvdW50aW5nIGFuZCB0aW1pbmcgdmFsdWVzLiAqLworCV9fdTY0CXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTAgKi8KKwlfX3U2NAlhc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDJhOCAqLworCV9fdTY0CWV4aXRfdGltZXI7CQkJLyogMHgwMmIwICovCisJX191NjQJdXNlcl90aW1lcjsJCQkvKiAweDAyYjggKi8KKwlfX3U2NAlzeXN0ZW1fdGltZXI7CQkJLyogMHgwMmMwICovCisJX191NjQJc3RlYWxfdGltZXI7CQkJLyogMHgwMmM4ICovCisJX191NjQJbGFzdF91cGRhdGVfdGltZXI7CQkvKiAweDAyZDAgKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV9jbG9jazsJCS8qIDB4MDJkOCAqLworCisJLyogQ3VycmVudCBwcm9jZXNzLiAqLworCV9fdTY0CWN1cnJlbnRfdGFzazsJCQkvKiAweDAyZTAgKi8KKwlfX3U2NAl0aHJlYWRfaW5mbzsJCQkvKiAweDAyZTggKi8KKwlfX3U2NAlrZXJuZWxfc3RhY2s7CQkJLyogMHgwMmYwICovCisKKwkvKiBJbnRlcnJ1cHQgYW5kIHBhbmljIHN0YWNrLiAqLworCV9fdTY0CWFzeW5jX3N0YWNrOwkJCS8qIDB4MDJmOCAqLworCV9fdTY0CXBhbmljX3N0YWNrOwkJCS8qIDB4MDMwMCAqLworCisJLyogQWRkcmVzcyBzcGFjZSBwb2ludGVyLiAqLworCV9fdTY0CWtlcm5lbF9hc2NlOwkJCS8qIDB4MDMwOCAqLworCV9fdTY0CXVzZXJfYXNjZTsJCQkvKiAweDAzMTAgKi8KKwlfX3U2NAl1c2VyX2V4ZWNfYXNjZTsJCQkvKiAweDAzMTggKi8KKworCS8qIFNNUCBpbmZvIGFyZWEgKi8KKwljcHVpZF90CWNwdV9pZDsJCQkJLyogMHgwMzIwICovCisJX191MzIJY3B1X25yOwkJCQkvKiAweDAzMjggKi8KKwlfX3UzMglzb2Z0aXJxX3BlbmRpbmc7CQkvKiAweDAzMmMgKi8KKwlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDMzMCAqLworCV9fdTY0CWV4dF9jYWxsX2Zhc3Q7CQkJLyogMHgwMzM4ICovCisJX191NjQJaW50X2Nsb2NrOwkJCS8qIDB4MDM0MCAqLworCV9fdTY0CWNsb2NrX2NvbXBhcmF0b3I7CQkvKiAweDAzNDggKi8KKwlfX3U2NAl2ZHNvX3Blcl9jcHVfZGF0YTsJCS8qIDB4MDM1MCAqLworCV9fdTgJcGFkXzB4MDM1OFsweDAzODAtMHgwMzU4XTsJLyogMHgwMzU4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2suICovCisJX191OAlpcmJbNjRdOwkJCS8qIDB4MDM4MCAqLwogCiAJLyogUGVyIGNwdSBwcmltYXJ5IHNwYWNlIGFjY2VzcyBsaXN0ICovCi0JX191OAkgICAgIHBhZF8weGUwNFsweGUzOC0weGUwNF07ICAgLyogMHhlMDQgKi8KLQlfX3U2NAkgICAgIHZkc29fcGVyX2NwdV9kYXRhOwkgICAgICAgLyogMHhlMzggKi8KLQlfX3UzMgkgICAgIHBhc3RlWzE2XTsJCSAgICAgICAvKiAweGU0MCAqLworCV9fdTMyCXBhc3RlWzE2XTsJCQkvKiAweDAzYzAgKi8KIAotCV9fdTgJICAgICBwYWQxM1sweDExYjgtMHhlODBdOyAgICAgIC8qIDB4ZTgwICovCisJX191OAlwYWRfMHgwNDAwWzB4MGUwMC0weDA0MDBdOwkvKiAweDA0MDAgKi8KIAotCS8qIDY0IGJpdCBleHRwYXJhbSB1c2VkIGZvciBwZmF1bHQsIGRpYWcgMjUwIGV0YyAgKi8KLQlfX3U2NCAgICAgICAgZXh0X3BhcmFtczI7ICAgICAgICAgICAgICAgLyogMHgxMUI4ICovCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191NjQJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDggKi8KKwlfX3U4CXBhZF8weDBlMGNbMHgxMWI4LTB4MGUwY107CS8qIDB4MGUwYyAqLwogCi0JX191OCAgICAgICAgIHBhZDE0WzB4MTIwMC0weDExQzBdOyAgICAgIC8qIDB4MTFDMCAqLworCS8qIDY0IGJpdCBleHRwYXJhbSB1c2VkIGZvciBwZmF1bHQvZGlhZyAyNTA6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191NjQJZXh0X3BhcmFtczI7CQkJLyogMHgxMUI4ICovCisJX191OAlwYWRfMHgxMWMwWzB4MTIwMC0weDExQzBdOwkvKiAweDExQzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovIAotCi0JX191NjQgICAgICAgIGZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07IC8qIDB4MTIwMCAqLwotCV9fdTY0ICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDEyODAgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsgLyogMHgxMzAwICovCi0JX191OCAgICAgICAgIHBhZDE1WzB4MTMxOC0weDEzMTBdOyAgICAgIC8qIDB4MTMxMCAqLwotCV9fdTMyICAgICAgICBwcmVmaXhyZWdfc2F2ZV9hcmVhOyAgICAgICAvKiAweDEzMTggKi8KLQlfX3UzMiAgICAgICAgZnB0X2NyZWdfc2F2ZV9hcmVhOyAgICAgICAgLyogMHgxMzFjICovCi0JX191OCAgICAgICAgIHBhZDE2WzB4MTMyNC0weDEzMjBdOyAgICAgIC8qIDB4MTMyMCAqLwotCV9fdTMyICAgICAgICB0b2RfcHJvZ3JlZ19zYXZlX2FyZWE7ICAgICAvKiAweDEzMjQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAgLyogMHgxMzI4ICovCi0JX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MTMzMCAqLwotCV9fdTggICAgICAgICBwYWQxN1sweDEzNDAtMHgxMzM4XTsgICAgICAvKiAweDEzMzggKi8KLQlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgLyogMHgxMzQwICovIAotCV9fdTY0ICAgICAgICBjcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgICAvKiAweDEzODAgKi8KKwkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07CS8qIDB4MTIwMCAqLworCV9fdTY0CWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgxMjgwICovCisJX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgxMzAwICovCisJX191OAlwYWRfMHgxMzEwWzB4MTMxOC0weDEzMTBdOwkvKiAweDEzMTAgKi8KKwlfX3UzMglwcmVmaXhyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzE4ICovCisJX191MzIJZnB0X2NyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzFjICovCisJX191OAlwYWRfMHgxMzIwWzB4MTMyNC0weDEzMjBdOwkvKiAweDEzMjAgKi8KKwlfX3UzMgl0b2RfcHJvZ3JlZ19zYXZlX2FyZWE7CQkvKiAweDEzMjQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgxMzI4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MTMzMCAqLworCV9fdTgJcGFkXzB4MTMzOFsweDEzNDAtMHgxMzM4XTsJLyogMHgxMzM4ICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgxMzQwICovCisJX191NjQJY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTM4MCAqLwogCiAJLyogYWxpZ24gdG8gdGhlIHRvcCBvZiB0aGUgcHJlZml4IGFyZWEgKi8KLQotCV9fdTggICAgICAgICBwYWQxOFsweDIwMDAtMHgxNDAwXTsgICAgICAvKiAweDE0MDAgKi8KKwlfX3U4CXBhZF8weDE0MDBbMHgyMDAwLTB4MTQwMF07CS8qIDB4MTQwMCAqLwogI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IC8qIEVuZCBzdHJ1Y3R1cmUqLwogCkBAIC00MzMsOCArNDQwLDYgQEAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotI2RlZmluZSBfX1BBTklDX01BR0lDICAgICAgICAgICAweERFQURDMERFCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMjhlYzg3MC4uZmM3ZWRkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPmNwdV92bV9tYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG5leHQpKTsKIAl1cGRhdGVfbW0obmV4dCwgdHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICAgTWFjaGluZSBjaGVjayBoYW5kbGVyIGRlZmluaXRpb25zCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX05NSV9ICisjZGVmaW5lIF9BU01fUzM5MF9OTUlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IG1jaSB7CisJX191MzIgc2QgOiAgMTsgLyogMDAgc3lzdGVtIGRhbWFnZSAqLworCV9fdTMyIHBkIDogIDE7IC8qIDAxIGluc3RydWN0aW9uLXByb2Nlc3NpbmcgZGFtYWdlICovCisJX191MzIgc3IgOiAgMTsgLyogMDIgc3lzdGVtIHJlY292ZXJ5ICovCisJX191MzIJIDogIDE7IC8qIDAzICovCisJX191MzIgY2QgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLworCV9fdTMyIGVkIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLworCV9fdTMyCSA6ICAxOyAvKiAwNiAqLworCV9fdTMyIGRnIDogIDE7IC8qIDA3IGRlZ3JhZGF0aW9uICovCisJX191MzIgdyAgOiAgMTsgLyogMDggd2FybmluZyBwZW5kaW5nICovCisJX191MzIgY3AgOiAgMTsgLyogMDkgY2hhbm5lbC1yZXBvcnQgcGVuZGluZyAqLworCV9fdTMyIHNwIDogIDE7IC8qIDEwIHNlcnZpY2UtcHJvY2Vzc29yIGRhbWFnZSAqLworCV9fdTMyIGNrIDogIDE7IC8qIDExIGNoYW5uZWwtc3Vic3lzdGVtIGRhbWFnZSAqLworCV9fdTMyCSA6ICAyOyAvKiAxMi0xMyAqLworCV9fdTMyIGIgIDogIDE7IC8qIDE0IGJhY2tlZCB1cCAqLworCV9fdTMyCSA6ICAxOyAvKiAxNSAqLworCV9fdTMyIHNlIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwlfX3UzMiBzYyA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLworCV9fdTMyIGtlIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCisJX191MzIgZHMgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLworCV9fdTMyIHdwIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KKwlfX3UzMiBtcyA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCisJX191MzIgcG0gOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KKwlfX3UzMiBpYSA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLworCV9fdTMyIGZhIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCisJX191MzIJIDogIDE7IC8qIDI1ICovCisJX191MzIgZWMgOiAgMTsgLyogMjYgZXh0ZXJuYWwgZGFtYWdlIGNvZGUgdmFsaWRpdHkgKi8KKwlfX3UzMiBmcCA6ICAxOyAvKiAyNyBmbG9hdGluZyBwb2ludCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGdyIDogIDE7IC8qIDI4IGdlbmVyYWwgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBjciA6ICAxOyAvKiAyOSBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIJIDogIDE7IC8qIDMwICovCisJX191MzIgc3QgOiAgMTsgLyogMzEgc3RvcmFnZSBsb2dpY2FsIHZhbGlkaXR5ICovCisJX191MzIgaWUgOiAgMTsgLyogMzIgaW5kaXJlY3Qgc3RvcmFnZSBlcnJvciAqLworCV9fdTMyIGFyIDogIDE7IC8qIDMzIGFjY2VzcyByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGRhIDogIDE7IC8qIDM0IGRlbGF5ZWQgYWNjZXNzIGV4Y2VwdGlvbiAqLworCV9fdTMyCSA6ICA3OyAvKiAzNS00MSAqLworCV9fdTMyIHByIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBmYyA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgYXAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLworCV9fdTMyCSA6ICAxOyAvKiA0NSAqLworCV9fdTMyIGN0IDogIDE7IC8qIDQ2IGNwdSB0aW1lciB2YWxpZGl0eSAqLworCV9fdTMyIGNjIDogIDE7IC8qIDQ3IGNsb2NrIGNvbXBhcmF0b3IgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAxNjsgLyogNDctNjMgKi8KK307CisKK3N0cnVjdCBwdF9yZWdzOworCitleHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9BU01fUzM5MF9OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGRiNDUyM2YuLjYxODYyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTQyLDIyICs0Miw4IEBACiAJYXNtIHZvbGF0aWxlKCJzdGlkcCAwKCUxKSIgOiAiPW0iICgqcHRyKSA6ICJhIiAocHRyKSk7CiB9CiAKLXN0cnVjdCBjcHVpbmZvX1MzOTAKLXsKLSAgICAgICAgY3B1aWRfdCAgY3B1X2lkOwotICAgICAgICBfX3UxNiAgICBjcHVfYWRkcjsKLSAgICAgICAgX191MTYgICAgY3B1X25yOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwotI2lmZGVmIF9fczM5MHhfXwotICAgICAgICB1bnNpZ25lZCBsb25nICpwbWRfcXVpY2s7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnB0ZV9xdWljazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OwotfTsKLQogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA4OTIwMDI1Li5mMWIwNTE2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xNzIsNiArMTcyLDggQEAKICNkZWZpbmUgTlVNX0NSUwkJMTYKICNkZWZpbmUgTlVNX0FDUlMJMTYKIAorI2RlZmluZSBOVU1fQ1JfV09SRFMJMworCiAjZGVmaW5lIEZQUl9TSVpFCTgKICNkZWZpbmUgRlBDX1NJWkUJNAogI2RlZmluZSBGUENfUEFEX1NJWkUJNCAvKiBnY2MgaW5zaXN0cyBvbiBhbGlnbmluZyB0aGUgZnByZWdzICovCkBAIC0zMzQsNyArMzM2LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1bnNpZ25lZCBsb25nIGNyWzNdOworCXVuc2lnbmVkIGxvbmcgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzOwogCiAjZGVmaW5lIFBFUl9FTV9NQVNLIDB4RTgwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggMjdmYzE3NC4uNDAyZDZkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0zMTQsNiArMzE0LDcgQEAKIAkJCSAgICBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIHFkaW8gZXJyb3JzIHJlcG9ydGVkIHRvIHRoZSB1cHBlci1sYXllciBwcm9ncmFtICovCisjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9UQVJHRVQJCQkweDAyCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9BQ0NFU1NfRVhDRVBUSU9OCTB4MTAKICNkZWZpbmUgUURJT19FUlJPUl9TSUdBX0JVU1kJCQkweDIwCiAjZGVmaW5lIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OCTB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAwMjRiOTFlLi4yMDA5MTU4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC01MCwxMiArNTAsNyBAQAogIAogI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCQkvKiBTY2hlZHVsZSBwZW5hbHR5ICovCiAKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9ucikKLQotc3RhdGljIGlubGluZSBfX3UxNiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gc3RhcCgpOwotfQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShTMzkwX2xvd2NvcmUuY3B1X25yKQogCiAvKgogICogcmV0dXJucyAxIGlmIGNwdSBpcyBpbiBzdG9wcGVkL2NoZWNrIHN0b3BwZWQgc3RhdGUgb3Igbm90IG9wZXJhdGlvbmFsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggYzc4NmFiNi4uMDIzMzBjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNCArNjIsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCBkMDc0NjczLi5jZDAyNDFkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC0xMDAsNiArMTAwLDcgQEAKIAogc3RhdGljIGlubGluZSBjaGFyICpzdHJjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCiB7CisjaWYgX19HTlVDX18gPCA0CiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKIAljaGFyICpyZXQgPSBkc3Q7CiAKQEAgLTEwOSwxMCArMTEwLDE0IEBACiAJCTogIismYSIgKGRzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJjcHkoZHN0LCBzcmMpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcjAgYXNtKCIwIikgPSAwOwogCWNvbnN0IGNoYXIgKnRtcCA9IHM7CiAKQEAgLTEyMSw2ICsxMjYsOSBAQAogCQkiCWpvCTBiIgogCQk6ICIrZCIgKHIwKSwgIithIiAodG1wKSA6ICA6ICJjYyIpOwogCXJldHVybiByMCAtICh1bnNpZ25lZCBsb25nKSBzOworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBzaXplX3QgbikKQEAgLTEzNSw3ICsxNDMsMTMgQEAKIAkJOiAiK2EiIChlbmQpLCAiK2EiICh0bXApIDogImQiIChyMCkgIDogImNjIik7CiAJcmV0dXJuIGVuZCAtIHM7CiB9Ci0KKyNlbHNlIC8qIElOX0FSQ0hfU1RSSU5HX0MgKi8KK3ZvaWQgKm1lbWNocihjb25zdCB2b2lkICogcywgaW50IGMsIHNpemVfdCBuKTsKK3ZvaWQgKm1lbXNjYW4odm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKK2NoYXIgKnN0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CitjaGFyICpzdHJjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKTsKK3NpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBzaXplX3Qgbik7CiAjZW5kaWYgLyogIUlOX0FSQ0hfU1RSSU5HX0MgKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCmluZGV4IGFkOTMyMTIuLjlkNzAwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaApAQCAtMTAwLDYgKzEwMCw3IEBACiAJCWNoYXIgcmVzZXJ2ZWRfMVsyNF07CiAKIAl9IHZtWzhdOworCWNoYXIgcmVzZXJ2ZWRfNTQ0WzM1NTJdOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaSh2b2lkICpzeXNpbmZvLCBpbnQgZmMsIGludCBzZWwxLCBpbnQgc2VsMikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggZDYwMzk0Yi4uMzA0Y2ZmYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAkgKiBJZiB0aGUgcHJvY2VzcyBvbmx5IHJhbiBvbiB0aGUgbG9jYWwgY3B1LCBkbyBhIGxvY2FsIGZsdXNoLgogCSAqLwogCWxvY2FsX2NwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgbG9jYWxfY3B1bWFzaykpCisJaWYgKGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksICZsb2NhbF9jcHVtYXNrKSkKIAkJX190bGJfZmx1c2hfbG9jYWwoKTsKIAllbHNlCiAJCV9fdGxiX2ZsdXNoX2dsb2JhbCgpOwpAQCAtNzMsNyArNzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfZmx1c2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqIG1tKQogewotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KG1tLT5jcHVfdm1fbWFzaykpKQorCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KG1tX2NwdW1hc2sobW0pKSkpCiAJCXJldHVybjsKIAkvKgogCSAqIElmIHRoZSBtYWNoaW5lIGhhcyBJRFRFIHdlIHByZWZlciB0byBkbyBhIHBlciBtbSBmbHVzaApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCBjOTc5YzNiLi41ZTBhZDYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNSw3ICs1LDYgQEAKIAogI2RlZmluZSBtY19jYXBhYmxlKCkJKDEpCiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KTsKIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZWdyb3VwX21hc2sodW5zaWduZWQgaW50IGNwdSk7CiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKaW5kZXggM2E1MjY3ZC4uODQwNmEyYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCkBAIC0zOSw3ICszOSw3IEBACiAJX191MTYgZGF5OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbAorc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2NkbAogewogCWNoYXIgdm9sa2V5WzRdOwkJLyogdm9sdW1lIGtleSA9IHZvbHVtZSBsYWJlbCAqLwogCWNoYXIgdm9sbGJsWzRdOwkJLyogdm9sdW1lIGxhYmVsICovCkBAIC01Niw2ICs1NiwxNCBAQAogCWNoYXIgcmVzM1syOV07CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9sZGwgeworCWNoYXIgdm9sbGJsWzRdOwkJLyogdm9sdW1lIGxhYmVsICovCisJY2hhciB2b2xpZFs2XTsJCS8qIHZvbHVtZSBpZGVudGlmaWVyICovCisJY2hhciByZXMzWzY5XTsJCS8qIHJlc2VydmVkICovCisJY2hhciBsZGxfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIsIHZhbGlkIGZvciBsZGwgZm9ybWF0ICovCisJX191NjQgZm9ybWF0dGVkX2Jsb2NrczsgLyogdmFsaWQgd2hlbiBsZGxfdmVyc2lvbiA+PSBmMiAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgdnRvY19leHRlbnQKIHsKIAlfX3U4IHR5cGVpbmQ7CQkJLyogZXh0ZW50IHR5cGUgaW5kaWNhdG9yICovCkBAIC0xNDAsNyArMTQ4LDExIEBACiAJY2hhciByZXMyWzEwXTsJCS8qIHJlc2VydmVkICovCiAJX191OCBEUzRFRkxWTDsJCS8qIGV4dGVuZGVkIGZyZWUtc3BhY2UgbWFuYWdlbWVudCBsZXZlbCAqLwogCXN0cnVjdCB2dG9jX2NjaGhiIERTNEVGUFRSOyAvKiBwb2ludGVyIHRvIGV4dGVuZGVkIGZyZWUtc3BhY2UgaW5mbyAqLwotCWNoYXIgcmVzM1s5XTsJCS8qIHJlc2VydmVkICovCisJY2hhciByZXMzOwkJLyogcmVzZXJ2ZWQgKi8KKwlfX3UzMiBEUzREQ1lMOwkJLyogbnVtYmVyIG9mIGxvZ2ljYWwgY3lscyAqLworCWNoYXIgcmVzNFsyXTsJCS8qIHJlc2VydmVkICovCisJX191OCBEUzRERVZGMjsJCS8qIGRldmljZSBmbGFncyAqLworCWNoYXIgcmVzNTsJCS8qIHJlc2VydmVkICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHZ0b2NfZHM1ZXh0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCAzZWRjNmM2Li4yMjhlMzEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTE3LDEwICsxNywxMiBAQAogIwogQ0ZMQUdTX3B0cmFjZS5vCQkrPSAtRFVUU19NQUNISU5FPSciJChVVFNfTUFDSElORSkiJwogCitDRkxBR1Nfc3lzaW5mby5vICs9IC1JaW5jbHVkZS9tYXRoLWVtdSAtSWFyY2gvczM5MC9tYXRoLWVtdSAtdworCiBvYmoteQk6PSAgYml0bWFwLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIGJhc2UubyBlYXJseS5vIHNldHVwLm8gXAogCSAgICBwcm9jZXNzb3IubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAogCSAgICBzMzkwX2V4dC5vIGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gZGlhZy5vIG1lbV9kZXRlY3QubyBcCi0JICAgIHZkc28ubyB2dGltZS5vCisJICAgIHZkc28ubyB2dGltZS5vIHN5c2luZm8ubyBubWkubwogCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxlbnRyeTY0Lm8sZW50cnkubykKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYjQxZjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUwotICogICAgQml0bWFwcyBmb3Igc2V0X2JpdCwgY2xlYXJfYml0LCB0ZXN0X2FuZF9zZXRfYml0LCAuLi4KLSAqICAgIFNlZSBpbmNsdWRlL2FzbS1zMzkwL3tiaXRvcHMuaHxwb3NpeF90eXBlcy5ofSBmb3IgZGV0YWlscwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKi8KLQotICAgICAgICAgLmdsb2JsIF9vaV9iaXRtYXAKLV9vaV9iaXRtYXA6Ci0gICAgICAgICAuYnl0ZSAgMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwCi0KLSAgICAgICAgIC5nbG9ibCBfbmlfYml0bWFwCi1fbmlfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4RkUsMHhGRCwweEZCLDB4RjcsMHhFRiwweERGLDB4QkYsMHg3RgotCi0gICAgICAgICAuZ2xvYmwgX3piX2ZpbmRtYXAKLV96Yl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCAKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNwotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw4Ci0KLSAgICAgICAgIC5nbG9ibCBfc2JfZmluZG1hcAotX3NiX2ZpbmRtYXA6Ci0gICAgICAgICAuYnl0ZSAgOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA3LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU0NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogICAgQml0bWFwcyBmb3Igc2V0X2JpdCwgY2xlYXJfYml0LCB0ZXN0X2FuZF9zZXRfYml0LCAuLi4KKyAqICAgIFNlZSBpbmNsdWRlL2FzbS97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworY29uc3QgY2hhciBfb2lfYml0bWFwW10gPSB7IDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAgfTsKK0VYUE9SVF9TWU1CT0woX29pX2JpdG1hcCk7CisKK2NvbnN0IGNoYXIgX25pX2JpdG1hcFtdID0geyAweGZlLCAweGZkLCAweGZiLCAweGY3LCAweGVmLCAweGRmLCAweGJmLCAweDdmIH07CitFWFBPUlRfU1lNQk9MKF9uaV9iaXRtYXApOworCitjb25zdCBjaGFyIF96Yl9maW5kbWFwW10gPSB7CisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNiwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw3LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOCB9OworRVhQT1JUX1NZTUJPTChfemJfZmluZG1hcCk7CisKK2NvbnN0IGNoYXIgX3NiX2ZpbmRtYXBbXSA9IHsKKwk4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwIH07CitFWFBPUlRfU1lNQk9MKF9zYl9maW5kbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKaW5kZXggYTJiZTNhOS4uMTIzZGQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKQEAgLTEsMTAgKzEsMTEgQEAKICNpZm5kZWYgX1BUUkFDRTMyX0gKICNkZWZpbmUgX1BUUkFDRTMyX0gKIAorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4gICAgLyogbmVlZGVkIGZvciBOVU1fQ1JfV09SRFMgKi8KICNpbmNsdWRlICJjb21wYXRfbGludXguaCIgIC8qIG5lZWRlZCBmb3IgcHN3X2NvbXBhdF90ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlfX3UzMiBjclszXTsKKwlfX3UzMiBjcltOVU1fQ1JfV09SRFNdOwogfSBwZXJfY3Jfd29yZHMzMjsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IGJhMDNmYzAuLmJlOGJjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogc3RhdGljIGludAogZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgaSA9IDAsIHJjID0gMDsKKwlpbnQgaSwgcmMgPSAwOwogCWZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbzsKIAlkZWJ1Z19pbmZvX3QgKmRlYnVnX2luZm8sICpkZWJ1Z19pbmZvX3NuYXBzaG90OwogCkBAIC02NDIsOCArNjQyLDcgQEAKIAlwX2luZm8gPSBrbWFsbG9jKHNpemVvZihmaWxlX3ByaXZhdGVfaW5mb190KSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCWlmKCFwX2luZm8pewotCQlpZihkZWJ1Z19pbmZvX3NuYXBzaG90KQotCQkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOworCQlkZWJ1Z19pbmZvX2ZyZWUoZGVidWdfaW5mb19zbmFwc2hvdCk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjk4LDggKzY5Nyw3IEBACiAJaWYgKCh1aWQgIT0gMCkgfHwgKGdpZCAhPSAwKSkKIAkJcHJfd2FybmluZygiUm9vdCBiZWNvbWVzIHRoZSBvd25lciBvZiBhbGwgczM5MGRiZiBmaWxlcyAiCiAJCQkgICAiaW4gc3lzZnNcbiIpOwotCWlmICghaW5pdGlhbGl6ZWQpCi0JCUJVRygpOworCUJVR19PTighaW5pdGlhbGl6ZWQpOwogCW11dGV4X2xvY2soJmRlYnVnX211dGV4KTsKIAogICAgICAgICAvKiBjcmVhdGUgbmV3IGRlYnVnX2luZm8gKi8KQEAgLTExNTYsNyArMTE1NCw2IEBACiAJZWxzZSB7CiAJCWRlYnVnZnNfcmVtb3ZlKGlkLT5kZWJ1Z2ZzX2VudHJpZXNbaV0pOwogCQlpZC0+dmlld3NbaV0gPSBOVUxMOwotCQlyYyA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkLT5sb2NrLCBmbGFncyk7CiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggMmEyY2EyNi4uNGQyMjFjOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwpAQCAtNiw2ICs2LDcgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KICNpbmNsdWRlICJlbnRyeS5oIgpAQCAtMTczLDE5ICsxNzUsMjEgQEAKIAkJcGFnZV9zZXRfc3RvcmFnZV9rZXkoaW5pdF9wZm4gPDwgUEFHRV9TSElGVCwgUEFHRV9ERUZBVUxUX0tFWSk7CiB9CiAKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBzeXNpbmZvXzNfMl8yIHZtbXMgX19hbGlnbmVkKFBBR0VfU0laRSk7CisKIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CisJLyogTm8gVk0gaW5mb3JtYXRpb24/IExvb2tzIGxpa2UgTFBBUiAqLworCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCQlyZXR1cm47CisJaWYgKCF2bW1zLmNvdW50KQorCQlyZXR1cm47CiAKLQlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgei9WTSA/ICovCi0JaWYgKGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uID09IDB4ZmYpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX1ZNOwotCi0JLyogUnVubmluZyB1bmRlciBLVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZlKQorCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNPyBJZiBub3Qgd2UgYXNzdW1lIHovVk0gKi8KKwlpZiAoIW1lbWNtcCh2bW1zLnZtWzBdLmNwaSwgIlx4ZDJceGU1XHhkNCIsIDMpKQogCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19LVk07CisJZWxzZQorCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3BnbV9jaGVja19oYW5kbGVyKHZvaWQpCkBAIC0zNDgsNyArMzUyLDYgQEAKIAogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwotCWJvb3RfY29tbWFuZF9saW5lW0FSQ0hfQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9IDA7CiAKIAkvKiBhcHBlbmQgSVBMIFBBUk0gZGF0YSB0byB0aGUgYm9vdCBjb21tYW5kIGxpbmUgKi8KIAlpZiAoTUFDSElORV9JU19WTSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCBlYzdlMzVmLi4xMDQ2YzJjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtNDY5LDYgKzQ2OSw4IEBACiAJLm9yZwkweDEwMDAwCiBzdGFydHVwOmJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQogLkxQRzA6CisJeGMJMHgyMDAoMjU2KSwweDIwMAkjIHBhcnRpYWxseSBjbGVhciBsb3djb3JlCisJeGMJMHgzMDAoMjU2KSwweDMwMAogCiAjaWZuZGVmIENPTkZJR19NQVJDSF9HNQogCSMgY2hlY2sgcHJvY2Vzc29yIHZlcnNpb24gYWdhaW5zdCBNQVJDSF97RzUsWjkwMCxaOTkwLFo5XzEwOSxaMTB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwppbmRleCBkYjQ3NmQxLi4yY2VkODQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKQEAgLTIwLDcgKzIwLDYgQEAKIAlsY3RsCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpICMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWwJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCi0JbXZjCV9fTENfSVBMREVWKDQpLElQTF9ERVZJQ0UtUEFSTUFSRUEoJXIxMikKICMKICMgU2V0dXAgc3RhY2sKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCmluZGV4IGY5ZjcwYWEuLjY1NjY3YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwpAQCAtODYsNyArODYsNiBAQAogCWxjdGxnCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpCSMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWxnCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKQkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFKzQtUEFSTUFSRUEoJXIxMikKIAlsZ2hpCSVyMCxfX0xDX1BBU1RFCiAJc3RnCSVyMCxfX0xDX1ZEU09fUEVSX0NQVQogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggMmRjZjU5MGYuLjZmMzcxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vcmVzZXQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogCiAjZGVmaW5lIElQTF9QQVJNX0JMT0NLX1ZFUlNJT04gMAogCkBAIC01NiwxMyArNTYsMTQgQEAKIH07CiAKIC8qCi0gKiBGaXZlIHNodXRkb3duIGFjdGlvbiB0eXBlcyBhcmUgc3VwcG9ydGVkOgorICogVGhlIGZvbGxvd2luZyBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKICAqLwogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fSVBMX1NUUgkJImlwbCIKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX1JFSVBMX1NUUgkicmVpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1NUUgkiZHVtcCIKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX1ZNQ01EX1NUUgkidm1jbWQiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9TVE9QX1NUUgkic3RvcCIKKyNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0RVTVBfUkVJUExfU1RSCSJkdW1wX3JlaXBsIgogCiBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHsKIAljaGFyICpuYW1lOwpAQCAtMTQ2LDYgKzE0Nyw3IEBACiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2ZjcDsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfY2N3Owogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19uc3M7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2FjdHVhbDsKIAogc3RhdGljIGludCBkdW1wX2NhcGFiaWxpdGllcyA9IERVTVBfVFlQRV9OT05FOwogc3RhdGljIGVudW0gZHVtcF90eXBlIGR1bXBfdHlwZSA9IERVTVBfVFlQRV9OT05FOwpAQCAtODM1LDYgKzgzNyw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfQ0NXX1ZNOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfQ0NXX0NJTzsKKwkJcmVpcGxfYmxvY2tfYWN0dWFsID0gcmVpcGxfYmxvY2tfY2N3OwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX0ZDUDoKIAkJaWYgKGRpYWczMDhfc2V0X3dvcmtzKQpAQCAtODQzLDYgKzg0Niw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfRkNQX1JPX1ZNOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfRkNQX1JPX0RJQUc7CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2ZjcDsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1BfRFVNUDoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9EVU1QOwpAQCAtODUyLDYgKzg1Niw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTX0RJQUc7CiAJCWVsc2UKIAkJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9OU1M7CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX25zczsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgogCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfREVGQVVMVDsKQEAgLTk2MCw3ICs5NjUsNiBAQAogCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUlQTF9NRVRIT0RfRkNQX0RVTVA6Ci0JZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CkBAIC0xMDY5LDEwICsxMDczLDEyIEBACiB7CiAJaW50IHJjOwogCi0JaWYgKCghZGlhZzMwOF9zZXRfd29ya3MpICYmIChpcGxfaW5mby50eXBlICE9IElQTF9UWVBFX0ZDUCkpCi0JCXJldHVybiAwOwotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1ApKQotCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7CisJaWYgKCFkaWFnMzA4X3NldF93b3JrcykgeworCQlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1ApCisJCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KIAogCXJlaXBsX2Jsb2NrX2ZjcCA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXJlaXBsX2Jsb2NrX2ZjcCkKQEAgLTEyNTMsNyArMTI1OSw2IEBACiAJCWRpYWczMDgoRElBRzMwOF9EVU1QLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBEVU1QX01FVEhPRF9OT05FOgotCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9CiAJcHJpbnRrKEtFUk5fRU1FUkcgIkR1bXAgZmFpbGVkIVxuIik7CkBAIC0xMzMyLDYgKzEzMzcsNDkgQEAKIAkuaW5pdAk9IGR1bXBfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIGR1bXBfcmVpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCS8qCisJICogQnlwYXNzIGR5bmFtaWMgYWRkcmVzcyB0cmFuc2xhdGlvbiAoREFUKSB3aGVuIHN0b3JpbmcgSVBMIHBhcmFtZXRlcgorCSAqIGluZm9ybWF0aW9uIGJsb2NrIGFkZHJlc3MgYW5kIGNoZWNrc3VtIGludG8gdGhlIHByZWZpeCBhcmVhCisJICogKGNvcnJlc3BvbmRpbmcgdG8gYWJzb2x1dGUgYWRkcmVzc2VzIDAtODE5MSkuCisJICogV2hlbiBlbmhhbmNlZCBEQVQgYXBwbGllcyBhbmQgdGhlIFNURSBmb3JtYXQgY29udHJvbCBpbiBvbmUsCisJICogdGhlIGFic29sdXRlIGFkZHJlc3MgaXMgZm9ybWVkIHdpdGhvdXQgcHJlZml4aW5nLiBJbiB0aGlzIGNhc2UgYQorCSAqIG5vcm1hbCBzdG9yZSAoc3RnL3N0KSBpbnRvIHRoZSBwcmVmaXggYXJlYSB3b3VsZCBubyBtb3JlIG1hdGNoIHRvCisJICogYWJzb2x1dGUgYWRkcmVzc2VzIDAtODE5MS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlhc20gdm9sYXRpbGUoInN0dXJnICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZWxzZQorCWFzbSB2b2xhdGlsZSgic3R1cmEgJTAsJTEiCisJCTo6ICJhIiAoKHVuc2lnbmVkIGxvbmcpIHJlaXBsX2Jsb2NrX2FjdHVhbCksCisJCSJhIiAoJmxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPmlwaWIpKTsKKyNlbmRpZgorCWFzbSB2b2xhdGlsZSgic3R1cmEgJTAsJTEiCisJCTo6ICJhIiAoY3N1bV9wYXJ0aWFsKHJlaXBsX2Jsb2NrX2FjdHVhbCwKKwkJCQkgICAgIHJlaXBsX2Jsb2NrX2FjdHVhbC0+aGRyLmxlbiwgMCkpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliX2NoZWNrc3VtKSk7CisJcHJlZW1wdF9lbmFibGUoKTsKKwlkdW1wX3J1bih0cmlnZ2VyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHVtcF9yZWlwbF9pbml0KHZvaWQpCit7CisJaWYgKCFkaWFnMzA4X3NldF93b3JrcykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIF9fcmVmZGF0YSBkdW1wX3JlaXBsX2FjdGlvbiA9IHsKKwkubmFtZQk9IFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUiwKKwkuZm4JPSBkdW1wX3JlaXBsX3J1biwKKwkuaW5pdAk9IGR1bXBfcmVpcGxfaW5pdCwKK307CisKIC8qCiAgKiB2bWNtZCBzaHV0ZG93biBhY3Rpb246IFRyaWdnZXIgdm0gY29tbWFuZCBvbiBzaHV0ZG93bi4KICAqLwpAQCAtMTQyMSw3ICsxNDY5LDggQEAKIC8qIGFjdGlvbiBsaXN0ICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uICpzaHV0ZG93bl9hY3Rpb25zX2xpc3RbXSA9IHsKLQkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfYWN0aW9uLCAmdm1jbWRfYWN0aW9uLCAmc3RvcF9hY3Rpb259OworCSZpcGxfYWN0aW9uLCAmcmVpcGxfYWN0aW9uLCAmZHVtcF9yZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwKKwkmdm1jbWRfYWN0aW9uLCAmc3RvcF9hY3Rpb259OwogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05TX0NPVU5UIChzaXplb2Yoc2h1dGRvd25fYWN0aW9uc19saXN0KSAvIHNpemVvZih2b2lkICopKQogCiAvKgpAQCAtMTQzNCwxMSArMTQ4MywxMSBAQAogCQkgICAgICAgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBTSFVURE9XTl9BQ1RJT05TX0NPVU5UOyBpKyspIHsKIAkJaWYgKCFzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0pCiAJCQljb250aW51ZTsKLQkJaWYgKHN0cm5jbXAoYnVmLCBzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUsCi0JCQkgICAgc3RybGVuKHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpID09IDApIHsKKwkJaWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lKSkgewogCQkJdHJpZ2dlci0+YWN0aW9uID0gc2h1dGRvd25fYWN0aW9uc19saXN0W2ldOwogCQkJcmV0dXJuIGxlbjsKIAkJfQpAQCAtMTY3Miw3ICsxNzIxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvbl9wYW5pY19uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IG9uX3BhbmljX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAorCS5wcmlvcml0eSA9IElOVF9NSU4sCiB9OwogCiB2b2lkIF9faW5pdCBzZXR1cF9pcGwodm9pZCkKQEAgLTE2OTYsNyArMTc0NSw2IEBACiAJCQlzaXplb2YoaXBsX2luZm8uZGF0YS5uc3MubmFtZSkpOwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX1VOS05PV046Ci0JZGVmYXVsdDoKIAkJLyogV2UgaGF2ZSBubyBpbmZvIHRvIGNvcHkgKi8KIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNTliNGU3OS4uZWVkNGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC0zMTAsMTUgKzMxMCwyMCBAQAogCQkJaW5mby0+cGx0X2luaXRpYWxpemVkID0gMTsKIAkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2IHx8Ci0JCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGMzIKLQkJICAgIHx8IHJfdHlwZSA9PSBSXzM5MF9QTFRPRkY2NAotCQkJKQorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyIHx8CisJCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQpCiAJCQl2YWwgPSBtZS0+YXJjaC5wbHRfb2Zmc2V0IC0gbWUtPmFyY2guZ290X29mZnNldCArCiAJCQkJaW5mby0+cGx0X29mZnNldCArIHJlbGEtPnJfYWRkZW5kOwotCQllbHNlCi0JCQl2YWwgPSAgKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKwotCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKyBpbmZvLT5wbHRfb2Zmc2V0ICsgCi0JCQkJcmVsYS0+cl9hZGRlbmQgLSBsb2M7CisJCWVsc2UgeworCQkJaWYgKCEoKHJfdHlwZSA9PSBSXzM5MF9QTFQxNkRCTCAmJgorCQkJICAgICAgIHZhbCAtIGxvYyArIDB4ZmZmZlVMIDwgMHgxZmZmZmVVTCkgfHwKKwkJCSAgICAgIChyX3R5cGUgPT0gUl8zOTBfUExUMzJEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZmZmZmVUxMIDwgMHgxZmZmZmZmZmVVTEwpKSkKKwkJCQl2YWwgPSAoRWxmX0FkZHIpIG1lLT5tb2R1bGVfY29yZSArCisJCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKworCQkJCQlpbmZvLT5wbHRfb2Zmc2V0OworCQkJdmFsICs9IHJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQl9CiAJCWlmIChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwpCiAJCQkqKHVuc2lnbmVkIHNob3J0ICopIGxvYyA9IHZhbCA+PiAxOwogCQllbHNlIGlmIChyX3R5cGUgPT0gUl8zOTBfUExUT0ZGMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKcmVuYW1lIHRvIGFyY2gvczM5MC9rZXJuZWwvbm1pLmMKaW5kZXggOTJiMDQxNy4uNGJmZGM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwpAQCAtMSwxMzcgKzEsMjMgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKLSAqICAgUy8zOTAgbWFjaGluZSBjaGVjayBoYW5kbGVyCisgKiAgIE1hY2hpbmUgY2hlY2sgaGFuZGxlcgogICoKLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMCwyMDA4Ci0gKiAgICBBdXRob3Iocyk6IEluZ28gQWRsdW5nIChhZGx1bmdAZGUuaWJtLmNvbSkKLSAqCQkgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQotICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxhc20vZXRyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vY2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9ldHIuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSAiczM5MG1hY2guaCIKLQotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbV9zZW07Ci0KLXN0YXRpYyBOT1JFVF9UWVBFIHZvaWQKLXMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNtcF9zZW5kX3N0b3AoKTsKLSNlbmRpZgotCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZm9yKDs7KTsKLX0KLQotc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOwotCi0vKioKLSAqIHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCi0gKgotICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotaW50IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjbXB4Y2hnKCZjcndfaGFuZGxlcnNbcnNjXSwgTlVMTCwgaGFuZGxlcikpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLS8qKgotICogczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSB1bnJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKi8KLXZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpCi17Ci0JaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQotCQlyZXR1cm47Ci0JeGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwpOwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci19Ci0KLS8qCi0gKiBSZXRyaWV2ZSBDUldzIGFuZCBjYWxsIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudC4KLSAqLwotc3RhdGljIGludCBzMzkwX2NvbGxlY3RfY3J3X2luZm8odm9pZCAqcGFyYW0pCi17Ci0Jc3RydWN0IGNydyBjcndbMl07Ci0JaW50IGNjb2RlOwotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKLQl1bnNpZ25lZCBpbnQgY2hhaW47Ci0JaW50IGlnbm9yZTsKLQotCXNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopcGFyYW07Ci1yZXBlYXQ6Ci0JaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JY2hhaW4gPSAwOwotCXdoaWxlICgxKSB7Ci0JCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7Ci0JCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKLQkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKLQkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKLQkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAotCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCi0JCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCi0JCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOwotCQkJaWYgKGNjb2RlICE9IDApCi0JCQkJYnJlYWs7Ci0JCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOwotCQlpZiAoY2NvZGUgIT0gMCkKLQkJCWJyZWFrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCi0JCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAotCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7Ci0JCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCi0JCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKLQkJCWludCBpOwotCi0JCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKLQkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQotCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7Ci0JCQl9Ci0JCQljaGFpbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKLQkJCWNoYWluKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3X2hhbmRsZXJzW2Nyd1tjaGFpbl0ucnNjXSkKLQkJCWNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10oJmNyd1swXSwKLQkJCQkJCSAgICAgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwKLQkJCQkJCSAgICAgMCk7Ci0JCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KLQkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7Ci0JfQotCWdvdG8gcmVwZWF0OwotCXJldHVybiAwOwotfQorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKIHN0cnVjdCBtY2NrX3N0cnVjdCB7CiAJaW50IGtpbGxfdGFzazsKQEAgLTE0MiwxMiArMjgsMTggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2NrX3N0cnVjdCwgY3B1X21jY2spOwogCitzdGF0aWMgTk9SRVRfVFlQRSB2b2lkIHMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCit7CisJc21wX3NlbmRfc3RvcCgpOworCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJd2hpbGUgKDEpOworfQorCiAvKgogICogTWFpbiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgZnVuY3Rpb24uIFdpbGwgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkCiAgKiBvciBkaXNhYmxlZCBhbmQgbWFjaGluZSBjaGVja3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAqLwotdm9pZAotczM5MF9oYW5kbGVfbWNjayh2b2lkKQordm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWNja19zdHJ1Y3QgbWNjazsKQEAgLTE2NiwyOSArNTgsMjQgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAobWNjay5jaGFubmVsX3JlcG9ydCkKLQkJdXAoJm1fc2VtKTsKLQotI2lmZGVmIENPTkZJR19NQUNIQ0hLX1dBUk5JTkcKLS8qCi0gKiBUaGUgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KLSAqIChhY3R1YWxseSB0aWxsIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQgb2ZmLCBvciB1bnRpbCB0aGUgcHJvYmxlbSBpcyBnb25lKQotICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBwcmV2ZW50IGNvbnRpbnVvdXNseQotICogYmVpbmcgaW50ZXJydXB0ZWQuICBPbmUgY2F2ZWF0IGlzIGhvd2V2ZXIsIHRoYXQgd2UgbXVzdCBkbyB0aGlzIHBlcgotICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCi0gKiBPbiBWTSB3ZSBvbmx5IGdldCBvbmUgaW50ZXJydXB0IHBlciB2aXJ0YWxseSBwcmVzZW50ZWQgbWFjaGluZWNoZWNrLgotICogVGhvdWdoIG9uZSBzdWZmaWNlcywgd2UgbWF5IGdldCBvbmUgaW50ZXJydXB0IHBlciAodmlydHVhbCkgcHJvY2Vzc29yLgotICovCisJCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwkvKgorCSAqIEEgd2FybmluZyBtYXkgcmVtYWluIGZvciBhIHByb2xvbmdlZCBwZXJpb2Qgb24gdGhlIGJhcmUgaXJvbi4KKwkgKiAoYWN0dWFsbHkgdW50aWwgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBvZmYsIG9yIHRoZSBwcm9ibGVtIGlzIGdvbmUpCisJICogU28gd2UganVzdCBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIFdBUk5JTkcgTUNIIGFuZCBhdm9pZCBjb250aW51b3VzbHkKKwkgKiBiZWluZyBpbnRlcnJ1cHRlZC4gIE9uZSBjYXZlYXQgaXMgaG93ZXZlciwgdGhhdCB3ZSBtdXN0IGRvIHRoaXMgcGVyCisJICogcHJvY2Vzc29yIGFuZCBjYW5ub3QgdXNlIHRoZSBzbXAgdmVyc2lvbiBvZiBjdGxfY2xlYXJfYml0KCkuCisJICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KKwkgKiBUaG91Z2ggb25lIHN1ZmZpY2VzLCB3ZSBtYXkgZ2V0IG9uZSBpbnRlcnJ1cHQgcGVyICh2aXJ0dWFsKSBjcHUuCisJICovCiAJaWYgKG1jY2sud2FybmluZykgewkvKiBXQVJOSU5HIHBlbmRpbmcgPyAqLwogCQlzdGF0aWMgaW50IG1jaGNoa193bmdfcG9zdGVkID0gMDsKLQkJLyoKLQkJICogVXNlIHNpbmdsZSBtYWNoaW5lIGNsZWFyLCBhcyB3ZSBjYW5ub3QgaGFuZGxlIHNtcCByaWdodCBub3cKLQkJICovCisKKwkJLyogVXNlIHNpbmdsZSBjcHUgY2xlYXIsIGFzIHdlIGNhbm5vdCBoYW5kbGUgc21wIGhlcmUuICovCiAJCV9fY3RsX2NsZWFyX2JpdCgxNCwgMjQpOwkvKiBEaXNhYmxlIFdBUk5JTkcgTUNIICovCiAJCWlmICh4Y2hnKCZtY2hjaGtfd25nX3Bvc3RlZCwgMSkgPT0gMCkKIAkJCWtpbGxfY2FkX3BpZChTSUdQV1IsIDEpOwogCX0KLSNlbmRpZgotCiAJaWYgKG1jY2sua2lsbF90YXNrKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IFRlcm1pbmF0aW5nIHRhc2sgYmVjYXVzZSBvZiBtYWNoaW5lICIKQEAgLTIwNCw4ICs5MSw3IEBACiAgKiByZXR1cm5zIDAgaWYgYWxsIHJlZ2lzdGVycyBjb3VsZCBiZSB2YWxpZGF0ZWQKICAqIHJldHVybnMgMSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludAotczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCitzdGF0aWMgaW50IG5vdHJhY2UgczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCiB7CiAJaW50IGtpbGxfdGFzazsKIAl1NjQgdG1wY2xvY2s7CkBAIC0yMTQsMjIgKzEwMCwyMSBAQAogCiAJa2lsbF90YXNrID0gMDsKIAl6ZXJvID0gMDsKLQkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmdyKQorCisJaWYgKCFtY2ktPmdyKSB7CiAJCS8qCiAJCSAqIEdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgY291bGRuJ3QgYmUgcmVzdG9yZWQgYW5kIGhhdmUKIAkJICogdW5rbm93biBjb250ZW50cy4gUHJvY2VzcyBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgogCQkgKi8KIAkJa2lsbF90YXNrID0gMTsKLQotCS8qIFJldmFsaWRhdGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmZwKQorCX0KKwlpZiAoIW1jaS0+ZnApIHsKIAkJLyoKIAkJICogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGNhbid0IGJlIHJlc3RvcmVkIGFuZAogCQkgKiB0aGVyZWZvcmUgdGhlIHByb2Nlc3MgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KIAkJICovCiAJCWtpbGxfdGFzayA9IDE7Ci0KKwl9CiAjaWZuZGVmIENPTkZJR182NEJJVAogCWFzbSB2b2xhdGlsZSgKIAkJIglsZAkwLDAoJTApXG4iCkBAIC0yNDUsOSArMTMwLDggQEAKIAkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mcHRfY3JlZ19zYXZlX2FyZWE7CiAjZWxzZQogCQlmcHRfc2F2ZV9hcmVhID0gKHZvaWQgKikgUzM5MF9sb3djb3JlLmV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwotCQlmcHRfY3JlZ19zYXZlX2FyZWEgPSBmcHRfc2F2ZV9hcmVhKzEyODsKKwkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSArIDEyODsKICNlbmRpZgotCQkvKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyICovCiAJCWlmICghbWNpLT5mYykgewogCQkJLyoKIAkJCSAqIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgY2FuJ3QgYmUgcmVzdG9yZWQuCkBAIC0yNzgsMjYgKzE2MiwyNSBAQAogCQkJIglsZAkxNSwxMjAoJTApXG4iCiAJCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CiAJfQotCiAJLyogUmV2YWxpZGF0ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJYXNtIHZvbGF0aWxlKAogCQkiCWxhbQkwLDE1LDAoJTApIgogCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOwotCWlmICghbWNpLT5hcikKKwlpZiAoIW1jaS0+YXIpIHsKIAkJLyoKIAkJICogQWNjZXNzIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCiAJCSAqIFRlcm1pbmF0aW5nIHRhc2suCiAJCSAqLwogCQlraWxsX3Rhc2sgPSAxOwotCisJfQogCS8qIFJldmFsaWRhdGUgY29udHJvbCByZWdpc3RlcnMgKi8KLQlpZiAoIW1jaS0+Y3IpCisJaWYgKCFtY2ktPmNyKSB7CiAJCS8qCiAJCSAqIENvbnRyb2wgcmVnaXN0ZXJzIGhhdmUgdW5rbm93biBjb250ZW50cy4KIAkJICogQ2FuJ3QgcmVjb3ZlciBhbmQgdGhlcmVmb3JlIHN0b3BwaW5nIG1hY2hpbmUuCiAJCSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoImludmFsaWQgY29udHJvbCByZWdpc3RlcnMuIik7Ci0JZWxzZQorCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHXzY0QklUCiAJCWFzbSB2b2xhdGlsZSgKIAkJCSIJbGN0bGcJMCwxNSwwKCUwKSIKQEAgLTMwNywxMiArMTkwLDExIEBACiAJCQkiCWxjdGwJMCwxNSwwKCUwKSIKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CiAjZW5kaWYKLQorCX0KIAkvKgogCSAqIFdlIGRvbid0IGV2ZW4gdHJ5IHRvIHJldmFsaWRhdGUgdGhlIFRPRCByZWdpc3Rlciwgc2luY2Ugd2Ugc2ltcGx5CiAJICogY2FuJ3Qgd3JpdGUgc29tZXRoaW5nIHNlbnNpYmxlIGludG8gdGhhdCByZWdpc3Rlci4KIAkgKi8KLQogI2lmZGVmIENPTkZJR182NEJJVAogCS8qCiAJICogU2VlIGlmIHdlIGNhbiByZXZhbGlkYXRlIHRoZSBUT0QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyIHdpdGggaXRzCkBAIC0zMzAsNyArMjEyLDYgQEAKIAkJCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUudG9kX3Byb2dyZWdfc2F2ZV9hcmVhKQogCQkJOiAiMCIsICJjYyIpOwogI2VuZGlmCi0KIAkvKiBSZXZhbGlkYXRlIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJc3RjawkwKCUxKVxuIgpAQCAtMzU0LDMyICsyMzUsMzUgQEAKICNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQogI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCiAKKyNkZWZpbmUgRURfU1RQX0lTTEFORAk2CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgaXNsYW5kIGNoZWNrICovCisjZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCisjZGVmaW5lIEVEX0VUUl9TWU5DCTEyCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1dJVENICTEzCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3dpdGNoIHRvIGxvY2FsICovCisKIC8qCiAgKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCiAgKi8KLXZvaWQKLXMzOTBfZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90cmFjZSBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RhdGljIGludCBpcGRfY291bnQ7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhpcGRfbG9jayk7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2lwZDsKLQlzdGF0aWMgaW50IGlwZF9jb3VudDsKKwlzdHJ1Y3QgbWNja19zdHJ1Y3QgKm1jY2s7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAlzdHJ1Y3QgbWNpICptY2k7Ci0Jc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOwogCWludCB1bW9kZTsKIAogCWxvY2tkZXBfb2ZmKCk7Ci0KIAlzMzkwX2lkbGVfY2hlY2soKTsKIAogCW1jaSA9IChzdHJ1Y3QgbWNpICopICZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKIAltY2NrID0gJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spOwogCXVtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKG1jaS0+c2QpCisJaWYgKG1jaS0+c2QpIHsKIAkJLyogU3lzdGVtIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3lzdGVtIGRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOwotCisJfQogCWlmIChtY2ktPnBkKSB7CiAJCWlmIChtY2ktPmIpIHsKIAkJCS8qIFByb2Nlc3NpbmcgYmFja3VwIC0+IHZlcmlmeSBpZiB3ZSBjYW4gc3Vydml2ZSB0aGlzICovCkBAIC00MDksMjQgKzI5MywxNyBAQAogCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0CiAJCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgogCQkJICovCi0KIAkJCXNwaW5fbG9jaygmaXBkX2xvY2spOwotCiAJCQl0bXAgPSBnZXRfY2xvY2soKTsKLQogCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKIAkJCQlpcGRfY291bnQrKzsKIAkJCWVsc2UKIAkJCQlpcGRfY291bnQgPSAxOwotCiAJCQlsYXN0X2lwZCA9IHRtcDsKLQogCQkJaWYgKGlwZF9jb3VudCA9PSBNQVhfSVBEX0NPVU5UKQogCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidG9vIG1hbnkgaXBkIHJldHJpZXMuIik7Ci0KIAkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCiAJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIGluc3RydWN0aW9uIHByb2Nlc3NpbmcgIgogCQkJCQkgICAiZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7CkBAIC00NDEsMjAgKzMxOCwxOCBAQAogCQkJbWNjay0+a2lsbF90YXNrID0gMTsKIAkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKIAkJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KIAkJCSAqIGtlcm5lbCBtb2RlIC0+IHN0b3BwaW5nIG1hY2hpbmUuCiAJCQkgKi8KIAkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidW5hYmxlIHRvIHJldmFsaWRhdGUgcmVnaXN0ZXJzLiIpOworCQl9CiAJfQotCiAJaWYgKG1jaS0+Y2QpIHsKIAkJLyogVGltaW5nIGZhY2lsaXR5IGRhbWFnZSAqLwogCQlzMzkwX2hhbmRsZV9kYW1hZ2UoIlRPRCBjbG9jayBkYW1hZ2VkIik7CiAJfQotCiAJaWYgKG1jaS0+ZWQgJiYgbWNpLT5lYykgewogCQkvKiBFeHRlcm5hbCBkYW1hZ2UgKi8KIAkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9FVFJfU1lOQykpCkBAIC00NjYsMjggKzM0MSwyMyBAQAogCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX1NUUF9JU0xBTkQpKQogCQkJc3RwX2lzbGFuZF9jaGVjaygpOwogCX0KLQogCWlmIChtY2ktPnNlKQogCQkvKiBTdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5rZSkKIAkJLyogU3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgKi8KIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGtleS1lcnJvciB1bmNvcnJlY3RlZCAiCiAJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KIAlpZiAobWNpLT5kcyAmJiBtY2ktPmZhKQogCQkvKiBTdG9yYWdlIGRlZ3JhZGF0aW9uICovCiAJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBkZWdyYWRhdGlvbiBtYWNoaW5lICIKIAkJCQkgICAiY2hlY2suIik7Ci0KIAlpZiAobWNpLT5jcCkgewogCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KIAkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOwogCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CiAJfQotCiAJaWYgKG1jaS0+dykgewogCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KIAkJbWNjay0+d2FybmluZyA9IDE7CkBAIC00OTYsNDMgKzM2NiwxMSBAQAogCWxvY2tkZXBfb24oKTsKIH0KIAotLyoKLSAqIHMzOTBfaW5pdF9tYWNoaW5lX2NoZWNrCi0gKgotICogaW5pdGlhbGl6ZSBtYWNoaW5lIGNoZWNrIGhhbmRsaW5nCi0gKi8KLXN0YXRpYyBpbnQKLW1hY2hpbmVfY2hlY2tfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWFjaGluZV9jaGVja19pbml0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJm1fc2VtKTsKIAljdGxfc2V0X2JpdCgxNCwgMjUpOwkvKiBlbmFibGUgZXh0ZXJuYWwgZGFtYWdlIE1DSCAqLwotCWN0bF9zZXRfYml0KDE0LCAyNyk7ICAgIC8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCi0jaWZkZWYgQ09ORklHX01BQ0hDSEtfV0FSTklORworCWN0bF9zZXRfYml0KDE0LCAyNyk7CS8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCiAJY3RsX3NldF9iaXQoMTQsIDI0KTsJLyogZW5hYmxlIHdhcm5pbmcgTUNIICovCi0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIG1hY2hpbmUgY2hlY2sgaGFuZGxlciByZWFsbHkgZWFybHkgdG8gYmUgYWJsZSB0bwotICogY2F0Y2ggYWxsIG1hY2hpbmUgY2hlY2tzIHRoYXQgaGFwcGVuIGR1cmluZyBib290Ci0gKi8KIGFyY2hfaW5pdGNhbGwobWFjaGluZV9jaGVja19pbml0KTsKLQotLyoKLSAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCi0gKiBhZnRlciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQKLSAqLwotc3RhdGljIGludCBfX2luaXQKLW1hY2hpbmVfY2hlY2tfY3J3X2luaXQgKHZvaWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCi0JdGFzayA9IGt0aHJlYWRfcnVuKHMzOTBfY29sbGVjdF9jcndfaW5mbywgJm1fc2VtLCAia21jaGVjayIpOwotCWlmIChJU19FUlIodGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHRhc2spOwotCWN0bF9zZXRfYml0KDE0LCAyOCk7CS8qIGVuYWJsZSBjaGFubmVsIHJlcG9ydCBNQ0ggKi8KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsIChtYWNoaW5lX2NoZWNrX2Nyd19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWNkMzhhOS4uYjQ4ZTk2MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsMTggKzEsMTAgQEAKIC8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKyAqIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhcnRzIG9mIHByb2Nlc3MgaGFuZGxpbmcuCiAgKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAotICoKLSAqICBEZXJpdmVkIGZyb20gImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgotICogICAgQ29weXJpZ2h0IChDKSAxOTk1LCBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDA5CisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KQEAgLTQ3LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBhc20gKCJyZXRfZnJvbV9mb3JrIik7CkBAIC03Niw3ICs2OSw2IEBACiAJcmV0dXJuIHNmLT5ncHJzWzhdOwogfQogCi1leHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwogLyoKICAqIFRoZSBpZGxlIGxvb3Agb24gYSBTMzkwLi4uCiAgKi8KQEAgLTE0OSw2ICsxNDEsNyBAQAogCXJldHVybiBkb19mb3JrKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCwKIAkJICAgICAgIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KK0VYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKIC8qCiAgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgpAQCAtMTY4LDM0ICsxNjEsMzUgQEAKIH0KIAogaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAotCXVuc2lnbmVkIGxvbmcgdW51c2VkLAotICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCisJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAorCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAgICAgICBzdHJ1Y3QgZmFrZV9mcmFtZQotICAgICAgICAgIHsKLQkgICAgc3RydWN0IHN0YWNrX2ZyYW1lIHNmOwotICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOwotICAgICAgICAgIH0gKmZyYW1lOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJc3RydWN0IGZha2VfZnJhbWUKKwl7CisJCXN0cnVjdCBzdGFja19mcmFtZSBzZjsKKwkJc3RydWN0IHB0X3JlZ3MgY2hpbGRyZWdzOworCX0gKmZyYW1lOwogCi0gICAgICAgIGZyYW1lID0gY29udGFpbmVyX29mKHRhc2tfcHRfcmVncyhwKSwgc3RydWN0IGZha2VfZnJhbWUsIGNoaWxkcmVncyk7Ci0gICAgICAgIHAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJZnJhbWUgPSBjb250YWluZXJfb2YodGFza19wdF9yZWdzKHApLCBzdHJ1Y3QgZmFrZV9mcmFtZSwgY2hpbGRyZWdzKTsKKwlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOwogCS8qIFN0b3JlIGFjY2VzcyByZWdpc3RlcnMgdG8ga2VybmVsIHN0YWNrIG9mIG5ldyBwcm9jZXNzLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzID0gKnJlZ3M7CisJZnJhbWUtPmNoaWxkcmVncyA9ICpyZWdzOwogCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1syXSA9IDA7CS8qIGNoaWxkIHJldHVybnMgMCBvbiBmb3JrLiAqLwotICAgICAgICBmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMTVdID0gbmV3X3N0YWNrcDsKLSAgICAgICAgZnJhbWUtPnNmLmJhY2tfY2hhaW4gPSAwOworCWZyYW1lLT5jaGlsZHJlZ3MuZ3Byc1sxNV0gPSBuZXdfc3RhY2twOworCWZyYW1lLT5zZi5iYWNrX2NoYWluID0gMDsKIAotICAgICAgICAvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KLSAgICAgICAgZnJhbWUtPnNmLmdwcnNbOF0gPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKKwkvKiBuZXcgcmV0dXJuIHBvaW50IGlzIHJldF9mcm9tX2ZvcmsgKi8KKwlmcmFtZS0+c2YuZ3Byc1s4XSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0gICAgICAgIC8qIGZha2UgcmV0dXJuIHN0YWNrIGZvciByZXN1bWUoKSwgZG9uJ3QgZ28gYmFjayB0byBzY2hlZHVsZSAqLwotICAgICAgICBmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKKwkvKiBmYWtlIHJldHVybiBzdGFjayBmb3IgcmVzdW1lKCksIGRvbid0IGdvIGJhY2sgdG8gc2NoZWR1bGUgKi8KKwlmcmFtZS0+c2YuZ3Byc1s5XSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAogCS8qIFNhdmUgYWNjZXNzIHJlZ2lzdGVycyB0byBuZXcgdGhyZWFkIHN0cnVjdHVyZS4gKi8KIAlzYXZlX2FjY2Vzc19yZWdzKCZwLT50aHJlYWQuYWNyc1swXSk7CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGNoaWxkLgogCSAqLwpAQCAtMjIwLDEwICsyMTQsMTMgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAkvKiBzdGFydCBuZXcgcHJvY2VzcyB3aXRoIGFyNCBwb2ludGluZyB0byB0aGUgY29ycmVjdCBhZGRyZXNzIHNwYWNlICovCiAJcC0+dGhyZWFkLm1tX3NlZ21lbnQgPSBnZXRfZnMoKTsKLSAgICAgICAgLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KLSAgICAgICAgbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sMCxzaXplb2YocC0+dGhyZWFkLnBlcl9pbmZvKSk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisJLyogRG9uJ3QgY29weSBkZWJ1ZyByZWdpc3RlcnMgKi8KKwltZW1zZXQoJnAtPnRocmVhZC5wZXJfaW5mbywgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfaW5mbykpOworCS8qIEluaXRpYWxpemUgcGVyIHRocmVhZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXIgdmFsdWVzICovCisJdGkgPSB0YXNrX3RocmVhZF9pbmZvKHApOworCXRpLT51c2VyX3RpbWVyID0gMDsKKwl0aS0+c3lzdGVtX3RpbWVyID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogU1lTQ0FMTF9ERUZJTkUwKGZvcmspCkBAIC0zMTEsNyArMzA4LDcgQEAKIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKICNpZm5kZWYgQ09ORklHXzY0QklUCi0gICAgICAgIC8qCisJLyoKIAkgKiBzYXZlIGZwcnMgdG8gY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MgdG8gbWVyZ2UgdGhlbSB3aXRoCiAJICogdGhlIGVtdWxhdGVkIHJlZ2lzdGVycyBhbmQgdGhlbiBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIGR1bXAuCiAJICovCkBAIC0zMjIsNiArMzE5LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC0zNDYsNCArMzQ0LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgyYzE4NzIuLjgwMmM4YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMTgsMTAgKzE4LDExIEBACiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIAotdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbykKK3ZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHZvaWQpCiB7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0YXJ0ZWQsIGFkZHJlc3MgJWQsIGlkZW50aWZpY2F0aW9uICUwNlhcbiIsCi0JCWNwdWluZm8tPmNwdV9uciwgY3B1aW5mby0+Y3B1X2FkZHIsIGNwdWluZm8tPmNwdV9pZC5pZGVudCk7CisJCVMzOTBfbG93Y29yZS5jcHVfbnIsIFMzOTBfbG93Y29yZS5jcHVfYWRkciwKKwkJUzM5MF9sb3djb3JlLmNwdV9pZC5pZGVudCk7CiB9CiAKIC8qCkBAIC0zMCw0OCArMzEsNDYgQEAKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOF0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IgorCQkiZWRhdCIsICJldGYzZWgiCiAJfTsKLSAgICAgICBzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKLSAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjOworCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKKwlpbnQgaTsKIAotICAgICAgIHMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKLSAgICAgICBwcmVlbXB0X2Rpc2FibGUoKTsKLSAgICAgICBpZiAoIW4pIHsKLQkgICAgICAgc2VxX3ByaW50ZihtLCAidmVuZG9yX2lkICAgICAgIDogSUJNL1MzOTBcbiIKLQkJCSAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCi0JCQkgICJib2dvbWlwcyBwZXIgY3B1OiAlbHUuJTAybHVcbiIsCi0JCQkgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCi0JCQkgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOwotCSAgICAgICBzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7Ci0JICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCSAgICAgICBpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKLQkJCSAgICAgICBzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwotCSAgICAgICBzZXFfcHV0cyhtLCAiXG4iKTsKLSAgICAgICB9CisJczM5MF9hZGp1c3RfamlmZmllcygpOworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmICghbikgeworCQlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JfaWQgICAgICAgOiBJQk0vUzM5MFxuIgorCQkJICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCisJCQkgICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLAorCQkJICAgbnVtX29ubGluZV9jcHVzKCksIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJCSAgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOworCQlzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKKwkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOworCQlzZXFfcHV0cyhtLCAiXG4iKTsKKwl9CiAKLSAgICAgICBpZiAoY3B1X29ubGluZShuKSkgeworCWlmIChjcHVfb25saW5lKG4pKSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCSAgICAgICBpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IG4pCi0JCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKLQkgICAgICAgZWxzZQotCQkgICAgICAgY3B1aW5mbyA9ICZsb3djb3JlX3B0cltuXS0+Y3B1X2RhdGE7CisJCWxjID0gKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBuKSA/CisJCQkmUzM5MF9sb3djb3JlIDogbG93Y29yZV9wdHJbbl07CiAjZWxzZQotCSAgICAgICBjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKKwkJbGMgPSAmUzM5MF9sb3djb3JlOwogI2VuZGlmCi0JICAgICAgIHNlcV9wcmludGYobSwgInByb2Nlc3NvciAlbGk6ICIKLQkJCSAgInZlcnNpb24gPSAlMDJYLCAgIgotCQkJICAiaWRlbnRpZmljYXRpb24gPSAlMDZYLCAgIgotCQkJICAibWFjaGluZSA9ICUwNFhcbiIsCi0JCQkgIG4sIGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uLAotCQkJICBjcHVpbmZvLT5jcHVfaWQuaWRlbnQsCi0JCQkgIGNwdWluZm8tPmNwdV9pZC5tYWNoaW5lKTsKLSAgICAgICB9Ci0gICAgICAgcHJlZW1wdF9lbmFibGUoKTsKLSAgICAgICByZXR1cm4gMDsKKwkJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yICVsaTogIgorCQkJICAgInZlcnNpb24gPSAlMDJYLCAgIgorCQkJICAgImlkZW50aWZpY2F0aW9uID0gJTA2WCwgICIKKwkJCSAgICJtYWNoaW5lID0gJTA0WFxuIiwKKwkJCSAgIG4sIGxjLT5jcHVfaWQudmVyc2lvbiwKKwkJCSAgIGxjLT5jcHVfaWQuaWRlbnQsCisJCQkgICBsYy0+Y3B1X2lkLm1hY2hpbmUpOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwppbmRleCBjNDE5MzA0Li43NzQxNDc4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwpAQCAtMSwxMCArMSw3IEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSkKLQkJIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycCAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KQEAgLTMwLDcgKzI3LDcgQEAKIAkJbXZjCV9fTENfUFJFRklYX1NBVkVfQVJFQS0weDEwMDAoNCwlcjEpLDAoJXIxMCkKIAkJc3RmcGMJX19MQ19GUF9DUkVHX1NBVkVfQVJFQS0weDEwMDAoJXIxKQogCQlzdGNrYwkuTGNsa2NtcC0uTHBnMCglcjEzKQotCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoOCwlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCisJCW12YwlfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLTB4MTAwMCg3LCVyMSksLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJc3RwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3RnCSVyMTMsIF9fTENfUFNXX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKaW5kZXggNDZiOTBjYi4uNjU2ZmNiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKQEAgLTEsNDkgKzEsNSBAQAotLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8YXNtL2NwY21kLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vZnRyYWNlLmg+Ci0jaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAotI2luY2x1ZGUgPG5ldC9hcnAuaD4KLSNlbmRpZgotCi0vKgotICogbWVtb3J5IG1hbmFnZW1lbnQKLSAqLwotRVhQT1JUX1NZTUJPTChfb2lfYml0bWFwKTsKLUVYUE9SVF9TWU1CT0woX25pX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF96Yl9maW5kbWFwKTsKLUVYUE9SVF9TWU1CT0woX3NiX2ZpbmRtYXApOwotCi0vKgotICogYmluZm10X2VsZiBsb2FkZXIgCi0gKi8KLWV4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgczM5MF9mcF9yZWdzICpmcHJlZ3MpOwotRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7Ci1FWFBPUlRfU1lNQk9MKGVtcHR5X3plcm9fcGFnZSk7Ci0KLS8qCi0gKiBtaXNjLgotICovCi1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfZmxhZ3MpOwotRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwotRVhQT1JUX1NZTUJPTChjc3VtX2ZvbGQpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOwotRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9pcnEpOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCBjNWNmYjYxLi4wNjIwMWI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03NCw5ICs3NCwxNyBAQAogICogTWFjaGluZSBzZXR1cC4uCiAgKi8KIHVuc2lnbmVkIGludCBjb25zb2xlX21vZGUgPSAwOworRVhQT1JUX1NZTUJPTChjb25zb2xlX21vZGUpOworCiB1bnNpZ25lZCBpbnQgY29uc29sZV9kZXZubyA9IC0xOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2Rldm5vKTsKKwogdW5zaWduZWQgaW50IGNvbnNvbGVfaXJxID0gLTE7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfaXJxKTsKKwogdW5zaWduZWQgbG9uZyBtYWNoaW5lX2ZsYWdzOworRVhQT1JUX1NZTUJPTChtYWNoaW5lX2ZsYWdzKTsKKwogdW5zaWduZWQgbG9uZyBlbGZfaHdjYXAgPSAwOwogY2hhciBlbGZfcGxhdGZvcm1bRUxGX1BMQVRGT1JNX1NJWkVdOwogCkBAIC04Niw2ICs5NCwxMCBAQAogaW50IF9faW5pdGRhdGEgbWVtb3J5X2VuZF9zZXQ7CiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKIAorLyogQW4gYXJyYXkgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGxvd2NvcmUgb2YgZXZlcnkgQ1BVLiAqLworc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOworCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKiBmb3IgUzM5MCBuZWVkIHRvIGZpbmQgb3V0LCB3aGF0IHdlIGhhdmUgdG8gc2V0dXAKQEAgLTEwOSwxMyArMTIxLDEwIEBACiAgKi8KIHZvaWQgX19jcHVpbml0IGNwdV9pbml0KHZvaWQpCiB7Ci0gICAgICAgIGludCBhZGRyID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KICAgICAgICAgLyoKICAgICAgICAgICogU3RvcmUgcHJvY2Vzc29yIGlkIGluIGxvd2NvcmUgKHVzZWQgZS5nLiBpbiB0aW1lcl9pbnRlcnJ1cHQpCiAgICAgICAgICAqLwotCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfaWQpOwotICAgICAgICBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHIgPSBhZGRyOworCWdldF9jcHVfaWQoJlMzOTBfbG93Y29yZS5jcHVfaWQpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZvcmNlIEZQVSBpbml0aWFsaXphdGlvbjoKQEAgLTEyNSw4ICsxMzQsNyBAQAogCiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0gICAgICAgIGlmIChjdXJyZW50LT5tbSkKLSAgICAgICAgICAgICAgICBCVUcoKTsKKwlCVUdfT04oY3VycmVudC0+bW0pOwogICAgICAgICBlbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3VycmVudCk7CiB9CiAKQEAgLTIxNyw3ICsyMjUsNyBAQAogCX0KIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfemZjcGR1bXAodW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8pCiB7CiAJc3RhdGljIGNoYXIgc3RyWzQxXTsKQEAgLTI4OSwxMSArMjk3LDcgQEAKIGVhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9wYXJzZV9tZW0pOwogCiAjaWZkZWYgQ09ORklHX1MzOTBfU1dJVENIX0FNT0RFCi0jaWZkZWYgQ09ORklHX1BHU1RFCi11bnNpZ25lZCBpbnQgc3dpdGNoX2Ftb2RlID0gMTsKLSNlbHNlCiB1bnNpZ25lZCBpbnQgc3dpdGNoX2Ftb2RlID0gMDsKLSNlbmRpZgogRVhQT1JUX1NZTUJPTF9HUEwoc3dpdGNoX2Ftb2RlKTsKIAogc3RhdGljIGludCBzZXRfYW1vZGVfYW5kX3VhY2Nlc3ModW5zaWduZWQgbG9uZyB1c2VyX2Ftb2RlLApAQCAtNDE0LDcgKzQxOCw2IEBACiAJCVBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIG1jY2tfaW50X2hhbmRsZXI7CiAJbGMtPmlvX25ld19wc3cubWFzayA9IHBzd19rZXJuZWxfYml0czsKIAlsYy0+aW9fbmV3X3Bzdy5hZGRyID0gUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgaW9faW50X2hhbmRsZXI7Ci0JbGMtPmlwbF9kZXZpY2UgPSBTMzkwX2xvd2NvcmUuaXBsX2RldmljZTsKIAlsYy0+Y2xvY2tfY29tcGFyYXRvciA9IC0xVUxMOwogCWxjLT5rZXJuZWxfc3RhY2sgPSAoKHVuc2lnbmVkIGxvbmcpICZpbml0X3RocmVhZF91bmlvbikgKyBUSFJFQURfU0laRTsKIAlsYy0+YXN5bmNfc3RhY2sgPSAodW5zaWduZWQgbG9uZykKQEAgLTQzNCw2ICs0MzcsNyBAQAogCWxjLT52ZHNvX3Blcl9jcHVfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmbGMtPnBhc3RlWzBdOwogI2VuZGlmCiAJc2V0X3ByZWZpeCgodTMyKSh1bnNpZ25lZCBsb25nKSBsYyk7CisJbG93Y29yZV9wdHJbMF0gPSBsYzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CkBAIC01MTAsNyArNTE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9tZW07CiAJaW50IGk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUF9EVU1QKSB7CiAJCW1lbW9yeV9lbmQgPSBaRkNQRFVNUF9IU0FfU0laRTsKIAkJbWVtb3J5X2VuZF9zZXQgPSAxOwpAQCAtNjc3LDcgKzY4MSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaHdjYXBzKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IGludCBzdGZsX2JpdHNbNl0gPSB7IDAsIDIsIDcsIDE3LCAxOSwgMjEgfTsKLQlzdHJ1Y3QgY3B1aW5mb19TMzkwICpjcHVpbmZvID0gJlMzOTBfbG93Y29yZS5jcHVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfbGlzdF9leHRlbmRlZDsKIAl1bnNpZ25lZCBpbnQgZmFjaWxpdHlfbGlzdDsKIAlpbnQgaTsKQEAgLTY5MywxNSArNjk2LDIyIEBACiAJICogICBCaXQgMTc6IHRoZSBtZXNzYWdlLXNlY3VyaXR5IGFzc2lzdCBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCAxOTogdGhlIGxvbmctZGlzcGxhY2VtZW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqICAgQml0IDIxOiB0aGUgZXh0ZW5kZWQtaW1tZWRpYXRlIGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDIyOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGlzIGluc3RhbGxlZAorCSAqICAgQml0IDMwOiBleHRlbmRlZC10cmFuc2xhdGlvbiBmYWNpbGl0eSAzIGVuaGFuY2VtZW50IGZhY2lsaXR5CiAJICogVGhlc2UgZ2V0IHRyYW5zbGF0ZWQgdG86CiAJICogICBIV0NBUF9TMzkwX0VTQU4zIGJpdCAwLCBIV0NBUF9TMzkwX1pBUkNIIGJpdCAxLAogCSAqICAgSFdDQVBfUzM5MF9TVEZMRSBiaXQgMiwgSFdDQVBfUzM5MF9NU0EgYml0IDMsCi0JICogICBIV0NBUF9TMzkwX0xESVNQIGJpdCA0LCBhbmQgSFdDQVBfUzM5MF9FSU1NIGJpdCA1LgorCSAqICAgSFdDQVBfUzM5MF9MRElTUCBiaXQgNCwgSFdDQVBfUzM5MF9FSU1NIGJpdCA1IGFuZAorCSAqICAgSFdDQVBfUzM5MF9FVEYzRUggYml0IDggKDIyICYmIDMwKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlpZiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gc3RmbF9iaXRzW2ldKSkpCiAJCQllbGZfaHdjYXAgfD0gMVVMIDw8IGk7CiAKKwlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCisJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKKwkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCiAJLyoKIAkgKiBDaGVjayBmb3IgYWRkaXRpb25hbCBmYWNpbGl0aWVzIHdpdGggc3RvcmUtZmFjaWxpdHktbGlzdC1leHRlbmRlZC4KIAkgKiBzdGZsZSBzdG9yZXMgZG91Ymxld29yZHMgKDggYnl0ZSkgd2l0aCBiaXQgMVVMTDw8NjMgYXMgYml0IDAKQEAgLTcxMCwyMCArNzIwLDIyIEBACiAJICogSG93IG1hbnkgZmFjaWxpdHkgd29yZHMgYXJlIHN0b3JlZCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKIAkgKiBkb3VibGV3b3JkcyBwYXNzZWQgdG8gdGhlIGluc3RydWN0aW9uLiBUaGUgYWRkaXRpb25hbCBmYWNpbGl0ZXMKIAkgKiBhcmU6Ci0JICogICBCaXQgNDM6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDI6IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgZmFjaWxpdHkgaXMgaW5zdGFsbGVkCisJICogICBCaXQgNDQ6IHBlcmZvcm0gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqIHRyYW5zbGF0ZWQgdG86Ci0JICogICBIV0NBUF9TMzkwX0RGUCBiaXQgNi4KKwkgKiAgIEhXQ0FQX1MzOTBfREZQIGJpdCA2ICg0MiAmJiA0NCkuCiAJICovCiAJaWYgKChlbGZfaHdjYXAgJiAoMVVMIDw8IDIpKSAmJgogCSAgICBfX3N0ZmxlKCZmYWNpbGl0eV9saXN0X2V4dGVuZGVkLCAxKSA+IDApIHsKLQkJaWYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjQgLSA0MykpKQorCQlpZiAoKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0MikpKQorCQkgICAgJiYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0NCkpKSkKIAkJCWVsZl9od2NhcCB8PSAxVUwgPDwgNjsKIAl9CiAKIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCiAJCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKIAotCXN3aXRjaCAoY3B1aW5mby0+Y3B1X2lkLm1hY2hpbmUpIHsKKwlzd2l0Y2ggKFMzOTBfbG93Y29yZS5jcHVfaWQubWFjaGluZSkgewogCWNhc2UgMHg5NjcyOgogI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkKIAlkZWZhdWx0OgkvKiBVc2UgImc1IiBhcyBkZWZhdWx0IGZvciAzMSBiaXQga2VybmVscy4gKi8KQEAgLTgxNiw3ICs4MjgsNyBAQAogCXNldHVwX2xvd2NvcmUoKTsKIAogICAgICAgICBjcHVfaW5pdCgpOwotICAgICAgICBfX2NwdV9sb2dpY2FsX21hcFswXSA9IFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfYWRkcjsKKwlfX2NwdV9sb2dpY2FsX21hcFswXSA9IHN0YXAoKTsKIAlzMzkwX2luaXRfY3B1X3RvcG9sb2d5KCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMmQzMzdjYi4uMDA2ZWQ1MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC01MCwxMiArNTEsNiBAQAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKIAotLyoKLSAqIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4KLSAqLwotc3RydWN0IF9sb3djb3JlICpsb3djb3JlX3B0cltOUl9DUFVTXTsKLUVYUE9SVF9TWU1CT0wobG93Y29yZV9wdHIpOwotCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAogc3RhdGljIHU4IHNtcF9jcHVfdHlwZTsKQEAgLTgxLDkgKzc2LDcgQEAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KIAlfX2xvYWRfcHN3X21hc2socHN3X2tlcm5lbF9iaXRzICYgflBTV19NQVNLX01DSEVDSyk7Ci0KLQkvKiB3cml0ZSBtYWdpYyBudW1iZXIgdG8gemVybyBwYWdlIChhYnNvbHV0ZSAwKSAqLwotCWxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPnBhbmljX21hZ2ljID0gX19QQU5JQ19NQUdJQzsKKwl0cmFjZV9oYXJkaXJxc19vZmYoKTsKIAogCS8qIHN0b3AgYWxsIHByb2Nlc3NvcnMgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewpAQCAtMjMzLDcgKzIyNiw3IEBACiAgKi8KICNkZWZpbmUgQ1BVX0lOSVRfTk8JMQogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAogLyoKICAqIHpmY3BkdW1wX3ByZWZpeF9hcnJheSBob2xkcyBwcmVmaXggcmVnaXN0ZXJzIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgpAQCAtMjc0LDcgKzI2Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfZ2V0X3NhdmVfYXJlYSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcGh5X2NwdSkgeyB9CiAKLSNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgfHwgQ09ORklHX1pGQ1BEVU1QX01PRFVMRSAqLworI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwogCiBzdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCiB7CkBAIC0zMDQsOCArMjk3LDggQEAKIHsKIAlpbnQgY3B1X2lkLCBsb2dpY2FsX2NwdTsKIAotCWxvZ2ljYWxfY3B1ID0gZmlyc3RfY3B1KGF2YWlsKTsKLQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfZmlyc3QoJmF2YWlsKTsKKwlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIDA7CiAJZm9yIChjcHVfaWQgPSAwOyBjcHVfaWQgPD0gNjU1MzU7IGNwdV9pZCsrKSB7CiAJCWlmIChjcHVfa25vd24oY3B1X2lkKSkKQEAgLTMxNiw4ICszMDksOCBAQAogCQkJY29udGludWU7CiAJCWNwdV9zZXQobG9naWNhbF9jcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMyOSw4ICszMjIsOCBAQAogCWludCBjcHVfaWQsIGxvZ2ljYWxfY3B1LCBjcHU7CiAJaW50IHJjOwogCi0JbG9naWNhbF9jcHUgPSBmaXJzdF9jcHUoYXZhaWwpOwotCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19maXJzdCgmYXZhaWwpOworCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm4gMDsKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCkBAIC0zNTEsOCArMzQ0LDggQEAKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX1NUQU5EQlk7CiAJCWVsc2UKIAkJCXNtcF9jcHVfc3RhdGVbbG9naWNhbF9jcHVdID0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCWxvZ2ljYWxfY3B1ID0gbmV4dF9jcHUobG9naWNhbF9jcHUsIGF2YWlsKTsKLQkJaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19uZXh0KGxvZ2ljYWxfY3B1LCAmYXZhaWwpOworCQlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJCWJyZWFrOwogCX0KIG91dDoKQEAgLTM3OSw3ICszNzIsNyBAQAogCiAJY19jcHVzID0gMTsKIAlzX2NwdXMgPSAwOwotCWJvb3RfY3B1X2FkZHIgPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CisJYm9vdF9jcHVfYWRkciA9IF9fY3B1X2xvZ2ljYWxfbWFwWzBdOwogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcGFuaWMoInNtcF9kZXRlY3RfY3B1cyBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTQ1Myw3ICs0NDYsNyBAQAogCS8qIFN3aXRjaCBvbiBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCS8qIFByaW50IGluZm8gYWJvdXQgdGhpcyBwcm9jZXNzb3IgKi8KLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCS8qIGNwdV9pZGxlIHdpbGwgY2FsbCBzY2hlZHVsZSBmb3IgdXMgKi8KIAljcHVfaWRsZSgpOwogCXJldHVybiAwOwpAQCAtNTE1LDcgKzUwOCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyB2b2lkIHNtcF9mcmVlX2xvd2NvcmUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmU7CkBAIC01MzQsNyArNTI2LDYgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBsb3djb3JlLCBsY19vcmRlcik7CiAJbG93Y29yZV9wdHJbY3B1XSA9IE5VTEw7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIC8qIFVwcGluZyBhbmQgZG93bmluZyBvZiBDUFVzICovCiBpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCkBAIC01NDMsMTYgKzUzNCwyMyBAQAogCXN0cnVjdCBfbG93Y29yZSAqY3B1X2xvd2NvcmU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKIAlzaWdwX2Njb2RlIGNjb2RlOworCXUzMiBsb3djb3JlOwogCiAJaWYgKHNtcF9jcHVfc3RhdGVbY3B1XSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHNtcF9hbGxvY19sb3djb3JlKGNwdSkpCiAJCXJldHVybiAtRU5PTUVNOworCWRvIHsKKwkJY2NvZGUgPSBzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9pbml0aWFsX2NwdV9yZXNldCk7CisJCWlmIChjY29kZSA9PSBzaWdwX2J1c3kpCisJCQl1ZGVsYXkoMTApOworCQlpZiAoY2NvZGUgPT0gc2lncF9ub3Rfb3BlcmF0aW9uYWwpCisJCQlnb3RvIGVycl9vdXQ7CisJfSB3aGlsZSAoY2NvZGUgPT0gc2lncF9idXN5KTsKIAotCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3Nvcl9wKChfX3UzMikodW5zaWduZWQgbG9uZykobG93Y29yZV9wdHJbY3B1XSksCi0JCQkJICAgY3B1LCBzaWdwX3NldF9wcmVmaXgpOwotCWlmIChjY29kZSkKLQkJcmV0dXJuIC1FSU87CisJbG93Y29yZSA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpbG93Y29yZV9wdHJbY3B1XTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJCXVkZWxheSgxMCk7CiAKIAlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKIAljcHVfbG93Y29yZSA9IGxvd2NvcmVfcHRyW2NwdV07CkBAIC01NzEsOSArNTY5LDggQEAKIAkJOiA6ICJhIiAoJmNwdV9sb3djb3JlLT5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpIDogIm1lbW9yeSIpOwogCWNwdV9sb3djb3JlLT5wZXJjcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogCWNwdV9sb3djb3JlLT5jdXJyZW50X3Rhc2sgPSAodW5zaWduZWQgbG9uZykgaWRsZTsKLQljcHVfbG93Y29yZS0+Y3B1X2RhdGEuY3B1X25yID0gY3B1OworCWNwdV9sb3djb3JlLT5jcHVfbnIgPSBjcHU7CiAJY3B1X2xvd2NvcmUtPmtlcm5lbF9hc2NlID0gUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOwotCWNwdV9sb3djb3JlLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJZWllaW8oKTsKIAogCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKGNwdSwgc2lncF9yZXN0YXJ0KSA9PSBzaWdwX2J1c3kpCkBAIC01ODIsNiArNTc5LDEwIEBACiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCWNwdV9yZWxheCgpOwogCXJldHVybiAwOworCitlcnJfb3V0OgorCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcG9zc2libGVfY3B1cyhjaGFyICpzKQpAQCAtNTg5LDkgKzU5MCw4IEBACiAJaW50IHBjcHVzLCBjcHU7CiAKIAlwY3B1cyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCWNwdV9wb3NzaWJsZV9tYXAgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQlmb3IgKGNwdSA9IDE7IGNwdSA8IHBjcHVzICYmIGNwdSA8IE5SX0NQVVM7IGNwdSsrKQotCQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBwY3B1cyAmJiBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKKwkJc2V0X2NwdV9wb3NzaWJsZShjcHUsIHRydWUpOwogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oInBvc3NpYmxlX2NwdXMiLCBzZXR1cF9wb3NzaWJsZV9jcHVzKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCS8qIHJlcXVlc3QgdGhlIDB4MTIwMSBlbWVyZ2VuY3kgc2lnbmFsIGV4dGVybmFsIGludGVycnVwdCAqLwogCWlmIChyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxMjAxLCBkb19leHRfY2FsbF9pbnRlcnJ1cHQpICE9IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZXF1ZXN0IGV4dGVybmFsIGludGVycnVwdCAweDEyMDEiKTsKLQlwcmludF9jcHVfaW5mbygmUzM5MF9sb3djb3JlLmNwdV9kYXRhKTsKKwlwcmludF9jcHVfaW5mbygpOwogCiAJLyogUmVhbGxvY2F0ZSBjdXJyZW50IGxvd2NvcmUsIGJ1dCBrZWVwIGl0cyBjb250ZW50cy4gKi8KIAlsY19vcmRlciA9IHNpemVvZihsb25nKSA9PSA4ID8gMSA6IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc3lzaW5mby5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gZHJpdmVycy9zMzkwL3N5c2luZm8uYwpyZW5hbWUgdG8gYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKaW5kZXggMGVlYTkwNy4uYjVlNzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3N5c2luZm8uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAgZHJpdmVycy9zMzkwL3N5c2luZm8uYwotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDgKLSAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIChVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tKQotICoJICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDEsIDIwMDkKKyAqICBBdXRob3Iocyk6IFVscmljaCBXZWlnYW5kIDxVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tPiwKKyAqCSAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0LDcgKzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaV8wKHZvaWQpCiB7Ci0JaW50IHJjID0gc3RzaSAoTlVMTCwgMCwgMCwgMCk7CisJaW50IHJjID0gc3RzaShOVUxMLCAwLCAwLCAwKTsKIAlyZXR1cm4gcmMgPT0gLUVOT1NZUyA/IHJjIDogKCgodW5zaWduZWQgaW50KSByYykgPj4gMjgpOwogfQogCkBAIC03OCwyMyArNzYsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8xXzJfMShzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAxLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIENQVTogICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKQEAgLTE0NSwzMyArMTI2LDE1IEBACiAJaWYgKGluZm8tPnNlY29uZGFyeV9jYXBhYmlsaXR5ICE9IDApCiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZWNvbmRhcnkgQ2FwYWJpbGl0eTogJWRcbiIsCiAJCQkgICAgICAgaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkpOwotCiAJcmV0dXJuIGxlbjsKIH0KIAotI2lmIDAgLyogQ3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIGludCBzdHNpXzJfMl8xKHN0cnVjdCBzeXNpbmZvXzJfMl8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDIsIDIsIDEpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKLQlFQkNBU0MgKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MgKGluZm8tPnBsYW50LCBzaXplb2YoaW5mby0+cGxhbnQpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VxdWVuY2UgQ29kZSBvZiBsb2dpY2FsIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIGxvZ2ljYWwgQ1BVOiAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3RzaV8yXzJfMihzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKIAlpZiAoc3RzaShpbmZvLCAyLCAyLCAyKSA9PSAtRU5PU1lTKQogCQlyZXR1cm4gbGVuOwogCi0JRUJDQVNDIChpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOworCUVCQ0FTQyhpbmZvLT5uYW1lLCBzaXplb2YoaW5mby0+bmFtZSkpOwogCiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CiAJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTnVtYmVyOiAgICAgICAgICAlZFxuIiwKQEAgLTIxNCw4ICsxNzcsOCBAQAogCWlmIChzdHNpKGluZm8sIDMsIDIsIDIpID09IC1FTk9TWVMpCiAJCXJldHVybiBsZW47CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPmNvdW50OyBpKyspIHsKLQkJRUJDQVNDIChpbmZvLT52bVtpXS5uYW1lLCBzaXplb2YoaW5mby0+dm1baV0ubmFtZSkpOwotCQlFQkNBU0MgKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOworCQlFQkNBU0MoaW5mby0+dm1baV0ubmFtZSwgc2l6ZW9mKGluZm8tPnZtW2ldLm5hbWUpKTsKKwkJRUJDQVNDKGluZm8tPnZtW2ldLmNwaSwgc2l6ZW9mKGluZm8tPnZtW2ldLmNwaSkpOwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKIAkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5uYW1lKTsKQEAgLTIzNywxNCArMjAwLDEzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotCiBzdGF0aWMgaW50IHByb2NfcmVhZF9zeXNpbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlIChHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBsb25nIGluZm8gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaW50IGxldmVsLCBsZW47Ci0JCisKIAlpZiAoIWluZm8pCiAJCXJldHVybiAwOwogCkBAIC0yNjIsOCArMjI0LDggQEAKIAlpZiAobGV2ZWwgPj0gMykKIAkJbGVuID0gc3RzaV8zXzJfMigoc3RydWN0IHN5c2luZm9fM18yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKIAotCWZyZWVfcGFnZSAoaW5mbyk7Ci0gICAgICAgIHJldHVybiBsZW47CisJZnJlZV9wYWdlKGluZm8pOworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3N5c2luZm8odm9pZCkKQEAgLTI3Miw4ICsyMzQsNyBAQAogCQkJICAgICAgIHByb2NfcmVhZF9zeXNpbmZvLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KLQotX19pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKK2RldmljZV9pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKIAogLyoKICAqIFNlcnZpY2UgbGV2ZWxzIGludGVyZmFjZS4KQEAgLTM4NywxMyArMzQ4LDExIEBACiAJCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJnNlcnZpY2VfbGV2ZWxfdm0pOwogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCk7CiAKIC8qCiAgKiBCb2dvbWlwcyBjYWxjdWxhdGlvbiBiYXNlZCBvbiBjcHUgY2FwYWJpbGl0eS4KICAqLwotCiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqY2FwYWJpbGl0eSkKIHsKIAlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZmM0NjhjYS4uZjcyZDQxMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogfQogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYXRvbWljX3QsIGNsb2NrX3N5bmNfd29yZCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2NrX3N5bmNfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xvY2tfc3luY19mbGFnczsKIAogI2RlZmluZSBDTE9DS19TWU5DX0hBU19FVFIJMApAQCAtMzk0LDYgKzM5NSwyMCBAQAogCWF0b21pY19zZXRfbWFzaygweDgwMDAwMDAwLCBzd19wdHIpOwogfQogCisvKgorICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGNsb2NrIGlzIGluIHN5bmMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N5bmNfY2xvY2sodm9pZCkKK3sKKwlhdG9taWNfdCAqc3dfcHRyOworCWludCByYzsKKworCXN3X3B0ciA9ICZnZXRfY3B1X3ZhcihjbG9ja19zeW5jX3dvcmQpOworCXJjID0gKGF0b21pY19yZWFkKHN3X3B0cikgJiAweDgwMDAwMDAwVSkgIT0gMDsKKwlwdXRfY3B1X3ZhcihjbG9ja19zeW5jX3N5bmMpOworCXJldHVybiByYzsKK30KKwogLyogU2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSB1c2VkIGZvciBldHIgYW5kIHN0cCBzeW5jIGV2ZW50cyAqLwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0aW1lX3N5bmNfd3E7CiAKQEAgLTQ4NSw2ICs1MDAsOCBAQAogCWlmIChldHJfc2V0cigmZXRyX2VhY3IpID09IDApIHsKIAkJZXRyX3RvbGVjID0gZ2V0X2Nsb2NrKCk7CiAJCXNldF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfSBlbHNlIGlmIChldHJfcG9ydDBfb25saW5lIHx8IGV0cl9wb3J0MV9vbmxpbmUpIHsKIAkJcHJfd2FybmluZygiVGhlIHJlYWwgb3IgdmlydHVhbCBoYXJkd2FyZSBzeXN0ZW0gZG9lcyAiCiAJCQkgICAibm90IHByb3ZpZGUgYW4gRVRSIGludGVyZmFjZVxuIik7CkBAIC01MzMsOCArNTUwLDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLnNsKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1dJVENIX0xPQ0FMLCAmZXRyX2V2ZW50cyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiB9CkBAIC01NDksOCArNTY1LDcgQEAKIHsKIAlpZiAoIWV0cl9lYWNyLmVzKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKKwlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJc2V0X2JpdChFVFJfRVZFTlRfU1lOQ19DSEVDSywgJmV0cl9ldmVudHMpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogfQpAQCAtOTE0LDcgKzkyOSw3IEBACiAJICogRG8gbm90IHRyeSB0byBnZXQgdGhlIGFsdGVybmF0ZSBwb3J0IGFpYiBpZiB0aGUgY2xvY2sKIAkgKiBpcyBub3QgaW4gc3luYyB5ZXQuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpICYmICFlYWNyLmVzKQorCWlmICghY2hlY2tfc3luY19jbG9jaygpKQogCQlyZXR1cm4gZWFjcjsKIAogCS8qCkBAIC05OTcsNyArMTAxMiw2IEBACiAJCW9uX2VhY2hfY3B1KGRpc2FibGVfc3luY19jbG9jaywgTlVMTCwgMSk7CiAJCWRlbF90aW1lcl9zeW5jKCZldHJfdGltZXIpOwogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC0xMDcxLDE4ICsxMDg1LDEzIEBACiAJCS8qIEJvdGggcG9ydHMgbm90IHVzYWJsZS4gKi8KIAkJZWFjci5lcyA9IGVhY3Iuc2wgPSAwOwogCQlzeW5jX3BvcnQgPSAtMTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQllYWNyLmVzID0gMDsKLQogCS8qCiAJICogSWYgdGhlIGNsb2NrIGlzIGluIHN5bmMganVzdCB1cGRhdGUgdGhlIGVhY3IgYW5kIHJldHVybi4KIAkgKiBJZiB0aGVyZSBpcyBubyB2YWxpZCBzeW5jIHBvcnQgd2FpdCBmb3IgYSBwb3J0IHVwZGF0ZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSB8fAotCSAgICBlYWNyLmVzIHx8IHN5bmNfcG9ydCA8IDApIHsKKwlpZiAoY2hlY2tfc3luY19jbG9jaygpIHx8IHN5bmNfcG9ydCA8IDApIHsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwogCQlldHJfc2V0X3RvbGVjX3RpbWVvdXQobm93KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTEwMywxMyArMTExMiwxMSBAQAogCSAqIGFuZCBzZXQgdXAgYSB0aW1lciB0byB0cnkgYWdhaW4gYWZ0ZXIgMC41IHNlY29uZHMKIAkgKi8KIAlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0Jc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCWlmIChub3cgPCBldHJfdG9sZWMgKyAoMTYwMDAwMCA8PCAxMikgfHwKIAkgICAgZXRyX3N5bmNfY2xvY2tfc3RvcCgmYWliLCBzeW5jX3BvcnQpICE9IDApIHsKIAkJLyogU3luYyBmYWlsZWQuIFRyeSBhZ2FpbiBpbiAxLzIgc2Vjb25kLiAqLwogCQllYWNyLmVzID0gMDsKIAkJZXRyX3VwZGF0ZV9lYWNyKGVhY3IpOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJZXRyX3NldF9zeW5jX3RpbWVvdXQoKTsKIAl9IGVsc2UKIAkJZXRyX3NldF90b2xlY190aW1lb3V0KG5vdyk7CkBAIC0xMTkxLDE5ICsxMTk4LDMwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghdGVzdF9iaXQoQ0xPQ0tfU1lOQ19IQVNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwltdXRleF9sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlpZiAoZGV2ID09ICZldHJfcG9ydDBfZGV2KSB7CiAJCWlmIChldHJfcG9ydDBfb25saW5lID09IHZhbHVlKQotCQkJcmV0dXJuIGNvdW50OwkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZ290byBvdXQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCiAJCWV0cl9wb3J0MF9vbmxpbmUgPSB2YWx1ZTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCXNldF9iaXQoRVRSX0VWRU5UX1BPUlQwX0NIQU5HRSwgJmV0cl9ldmVudHMpOwogCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9IGVsc2UgewogCQlpZiAoZXRyX3BvcnQxX29ubGluZSA9PSB2YWx1ZSkKLQkJCXJldHVybiBjb3VudDsJLyogTm90aGluZyB0byBkby4gKi8KKwkJCWdvdG8gb3V0OwkvKiBOb3RoaW5nIHRvIGRvLiAqLwogCQlldHJfcG9ydDFfb25saW5lID0gdmFsdWU7CisJCWlmIChldHJfcG9ydDBfb25saW5lICYmIGV0cl9wb3J0MV9vbmxpbmUpCisJCQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlzZXRfYml0KEVUUl9FVkVOVF9QT1JUMV9DSEFOR0UsICZldHJfZXZlbnRzKTsKIAkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDcxLDggKzE0ODksNiBAQAogICovCiB2b2lkIHN0cF9zeW5jX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTQ4NSw4ICsxNTAxLDYgQEAKICAqLwogdm9pZCBzdHBfaXNsYW5kX2NoZWNrKHZvaWQpCiB7Ci0JaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlyZXR1cm47CiAJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmc3RwX3dvcmspOwogfQpAQCAtMTUxMywxMCArMTUyNyw2IEBACiAKIAllbmFibGVfc3luY19jbG9jaygpOwogCi0Jc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7Ci0KIAlyYyA9IDA7CiAJaWYgKHN0cF9pbmZvLnRvZG9mZlswXSB8fCBzdHBfaW5mby50b2RvZmZbMV0gfHwKIAkgICAgc3RwX2luZm8udG9kb2ZmWzJdIHx8IHN0cF9pbmZvLnRvZG9mZlszXSB8fApAQCAtMTUzNSw5ICsxNTQ1LDYgQEAKIAlpZiAocmMpIHsKIAkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOwogCQlzdHBfc3luYy0+aW5fc3luYyA9IC1FQUdBSU47Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOwotCQlpZiAoZXRyX3BvcnQwX29ubGluZSB8fCBldHJfcG9ydDFfb25saW5lKQotCQkJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiAJfSBlbHNlCiAJCXN0cF9zeW5jLT5pbl9zeW5jID0gMTsKIAl4Y2hnKCZmaXJzdCwgMCk7CkBAIC0xNTY5LDYgKzE1NzYsMTAgQEAKIAlpZiAocmMgfHwgc3RwX2luZm8uYyA9PSAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwkvKiBTa2lwIHN5bmNocm9uaXphdGlvbiBpZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBpbiBzeW5jLiAqLworCWlmIChjaGVja19zeW5jX2Nsb2NrKCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCW1lbXNldCgmc3RwX3N5bmMsIDAsIHNpemVvZihzdHBfc3luYykpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCWF0b21pY19zZXQoJnN0cF9zeW5jLmNwdXMsIG51bV9vbmxpbmVfY3B1cygpIC0gMSk7CkBAIC0xNjg0LDggKzE2OTUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0hBU19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW11dGV4X2xvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXN0cF9vbmxpbmUgPSB2YWx1ZTsKKwlpZiAoc3RwX29ubGluZSkKKwkJc2V0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCBjYzM2MmM5Li4zYzcyYzljIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC03NCw3ICs3NCw3IEBACiAKIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjb3JlX2luZm8gKmNvcmUgPSAmY29yZV9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNDU4NGQ4MS4uYzJlNDJjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtNjEsOSArNjEsMTEgQEAKICNkZWZpbmUgc3RhY2tfcG9pbnRlciAoeyB2b2lkICoqc3A7IGFzbSgibGEgJTAsMCgxNSkiIDogIj0mZCIgKHNwKSk7IHNwOyB9KQogCiAjaWZuZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBMT05HICIlMDhseCAiCiAjZGVmaW5lIEZPVVJMT05HICIlMDhseCAlMDhseCAlMDhseCAlMDhseFxuIgogc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSAxMjsKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLworI2RlZmluZSBMT05HICIlMDE2bHggIgogI2RlZmluZSBGT1VSTE9ORyAiJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XG4iCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDIwOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAJCQlicmVhazsKIAkJaWYgKGkgJiYgKChpICogc2l6ZW9mIChsb25nKSAlIDMyKSA9PSAwKSkKIAkJCXByaW50aygiXG4gICAgICAgIik7Ci0JCXByaW50aygiJXAgIiwgKHZvaWQgKikqc3RhY2srKyk7CisJCXByaW50ayhMT05HLCAqc3RhY2srKyk7CiAJfQogCXByaW50aygiXG4iKTsKIAlzaG93X3RyYWNlKHRhc2ssIHNwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNjkwZTE3OC4uODliMmU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIHZkc29fZnJlZV9wZXJfY3B1KGludCBjcHUsIHN0cnVjdCBfbG93Y29yZSAqbG93Y29yZSkKIHsKIAl1bnNpZ25lZCBsb25nIHNlZ21lbnRfdGFibGUsIHBhZ2VfdGFibGUsIHBhZ2VfZnJhbWU7CkBAIC0xNjMsNyArMTYyLDYgQEAKIAlmcmVlX3BhZ2UocGFnZV90YWJsZSk7CiAJZnJlZV9wYWdlcyhzZWdtZW50X3RhYmxlLCBTRUdNRU5UX09SREVSKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIHZvaWQgX192ZHNvX2luaXRfY3I1KHZvaWQgKmR1bW15KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQ3OTZkMDUuLjdhMjA2M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwOCw2ICsxMDgsOCBAQAogCQlFWElUX1RFWFQKIAl9CiAKKwkvKiBlYXJseS5jIHVzZXMgc3RzaSwgd2hpY2ggcmVxdWlyZXMgcGFnZSBhbGlnbmVkIGRhdGEuICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQuZGF0YSA6IHsKIAkJSU5JVF9EQVRBCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCmluZGV4IGUwNTFjYWQuLjNlMjYwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZworKysgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKQEAgLTQsNiArNCw5IEBACiBjb25maWcgSEFWRV9LVk0KICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwppbmRleCA2MTIzNjEwLi45ZDE5ODAzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogc3RhdGljIGludGVyY2VwdF9oYW5kbGVyX3QgaW5zdHJ1Y3Rpb25faGFuZGxlcnNbMjU2XSA9IHsKIAlbMHg4M10gPSBrdm1fczM5MF9oYW5kbGVfZGlhZywKIAlbMHhhZV0gPSBrdm1fczM5MF9oYW5kbGVfc2lncCwKLQlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfcHJpdiwKKwlbMHhiMl0gPSBrdm1fczM5MF9oYW5kbGVfYjIsCiAJWzB4YjddID0gaGFuZGxlX2xjdGwsCiAJWzB4ZWJdID0gaGFuZGxlX2xjdGxnLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IGY0ZmUyOGEuLjAxODkzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtNTU1LDkgKzU1NSwxNCBAQAogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHByb2dyYW0gY2hlY2sgJWQgKGZyb20gdXNlcikiLAogCQkJICAgczM5MGludC0+cGFybSk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYOgorCQlpbnRpLT5wcmVmaXguYWRkcmVzcyA9IHMzOTBpbnQtPnBhcm07CisJCWludGktPnR5cGUgPSBzMzkwaW50LT50eXBlOworCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICJpbmplY3Q6IHNldCBwcmVmaXggdG8gJXggKGZyb20gdXNlcikiLAorCQkJICAgczM5MGludC0+cGFybSk7CisJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfU0lHUF9TVE9QOgogCWNhc2UgS1ZNX1MzOTBfUkVTVEFSVDoKLQljYXNlIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWDoKIAljYXNlIEtWTV9TMzkwX0lOVF9FTUVSR0VOQ1k6CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgImluamVjdDogdHlwZSAleCIsIHMzOTBpbnQtPnR5cGUpOwogCQlpbnRpLT50eXBlID0gczM5MGludC0+dHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAwZDMzODkzLi5mNGQ1NmU5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSAia3ZtLXMzOTAuaCIKICNpbmNsdWRlICJnYWNjZXNzLmgiCiAKQEAgLTI4Niw3ICsyODYsNyBAQAogCXNldHVwX3RpbWVyKCZ2Y3B1LT5hcmNoLmNrY190aW1lciwga3ZtX3MzOTBfaWRsZV93YWtldXAsCiAJCSAodW5zaWduZWQgbG9uZykgdmNwdSk7CiAJZ2V0X2NwdV9pZCgmdmNwdS0+YXJjaC5jcHVfaWQpOwotCXZjcHUtPmFyY2guY3B1X2lkLnZlcnNpb24gPSAweGZlOworCXZjcHUtPmFyY2guY3B1X2lkLnZlcnNpb24gPSAweGZmOwogCXJldHVybiAwOwogfQogCkBAIC00MjIsOCArNDIyLDggQEAKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQogCi1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQpAQCAtNDQwLDggKzQ0MCw2IEBACiAJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIH0KIAotZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKLQogc3RhdGljIHZvaWQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJbWVtY3B5KCZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2cxNCwgJnZjcHUtPmFyY2guZ3Vlc3RfZ3Byc1sxNF0sIDE2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCAzODkzY2YxLi4wMGJiZTY5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC01MCw3ICs1MCw3IEBACiBpbnQga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNvZGUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBwcml2LmMgKi8KLWludCBrdm1fczM5MF9oYW5kbGVfcHJpdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAvKiBpbXBsZW1lbnRlZCBpbiBzaWdwLmMgKi8KIGludCBrdm1fczM5MF9oYW5kbGVfc2lncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCAzNjA1ZGY0Li40Yjg4ODM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMzA0LDEyICszMDQsMjQgQEAKIAlbMHhiMV0gPSBoYW5kbGVfc3RmbCwKIH07CiAKLWludCBrdm1fczM5MF9oYW5kbGVfcHJpdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitpbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnRlcmNlcHRfaGFuZGxlcl90IGhhbmRsZXI7CiAKKwkvKgorCSAqIGEgbG90IG9mIEIyIGluc3RydWN0aW9ucyBhcmUgcHJpdmlsZWRnZWQuIFdlIGZpcnN0IGNoZWNrIGZvcgorCSAqIHRoZSBwcml2aWxlZGdlcyBvbmVzLCB0aGF0IHdlIGNhbiBoYW5kbGUgaW4gdGhlIGtlcm5lbC4gSWYgdGhlCisJICoga2VybmVsIGNhbiBoYW5kbGUgdGhpcyBpbnN0cnVjdGlvbiwgd2UgY2hlY2sgZm9yIHRoZSBwcm9ibGVtCisJICogc3RhdGUgYml0IGFuZCAoYSkgaGFuZGxlIHRoZSBpbnN0cnVjdGlvbiBvciAoYikgc2VuZCBhIGNvZGUgMgorCSAqIHByb2dyYW0gY2hlY2suCisJICogQW55dGhpbmcgZWxzZSBnb2VzIHRvIHVzZXJzcGFjZS4qLwogCWhhbmRsZXIgPSBwcml2X2hhbmRsZXJzW3ZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgJiAweDAwZmZdOwotCWlmIChoYW5kbGVyKQotCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKKwlpZiAoaGFuZGxlcikgeworCQlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkKKwkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwKKwkJCQkJCSAgIFBHTV9QUklWSUxFR0VEX09QRVJBVElPTik7CisJCWVsc2UKKwkJCXJldHVybiBoYW5kbGVyKHZjcHUpOworCX0KIAlyZXR1cm4gLUVOT1RTVVBQOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwppbmRleCAyYTAxYjllLi5mMjdkYmVkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYworKysgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwpAQCAtMTUzLDggKzE1Myw2IEBACiAKIAlzd2l0Y2ggKHBhcmFtZXRlciAmIDB4ZmYpIHsKIAljYXNlIDA6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImt2bTogcmVxdWVzdCB0byBzd2l0Y2ggdG8gRVNBLzM5MCBtb2RlIgotCQkJCQkJCSIgbm90IHN1cHBvcnRlZCIpOwogCQlyYyA9IDM7IC8qIG5vdCBvcGVyYXRpb25hbCAqLwogCQlicmVhazsKIAljYXNlIDE6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKaW5kZXggNmNjYjlmYS4uM2Y1ZjY4MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC05Miw2ICs5Myw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CitFWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKIAogLyoKICAqIFNpbXBsZSB1ZGVsYXkgdmFyaWFudC4gVG8gYmUgdXNlZCBvbiBzdGFydHVwIGFuZCByZWJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMgYi9hcmNoL3MzOTAvbGliL3N0cmluZy5jCmluZGV4IGFlNWNmNWQuLjQxNDNiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKKysrIGIvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYwpAQCAtNDQsNyArNDQsMTEgQEAKICAqLwogc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJldHVybiBfX3N0cmVuZChzKSAtIHM7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RybGVuKHMpOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiAKQEAgLTcwLDYgKzc0LDcgQEAKICAqLwogY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciBpbnQgcjAgYXNtKCIwIikgPSAwOwogCWNoYXIgKnJldCA9IGRlc3Q7CiAKQEAgLTc4LDYgKzgzLDkgQEAKIAkJICAgICAgOiAiKyZhIiAoZGVzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJICAgICAgOiAiY2MiLCAibWVtb3J5IiApOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRlc3QsIHNyYyk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc3RyY3B5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0ZDUzNzIwLi44MzNlODM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMjAwLDI5ICsyMDAsNiBAQAogCWRvX25vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgMCk7CiB9CiAKLS8qCi0gKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgb3Igc29tZSBvdGhlciB0aGluZyBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUKLSAqIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4KLSAqLwotc3RhdGljIGludCBkb19vdXRfb2ZfbWVtb3J5KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07Ci0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19nbG9iYWxfaW5pdCh0c2spKSB7Ci0JCXlpZWxkKCk7Ci0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXByaW50aygiVk06IGtpbGxpbmcgcHJvY2VzcyAlc1xuIiwgdHNrLT5jb21tKTsKLQlpZiAocmVncy0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCi0JCWRvX2dyb3VwX2V4aXQoU0lHS0lMTCk7Ci0JZG9fbm9fY29udGV4dChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZG9fc2lnYnVzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTM2Nyw3ICszNDQsNiBAQAogCQkJZ290byBiYWRfYXJlYTsKIAl9CiAKLXN1cnZpdmU6CiAJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQogCQlhZGRyZXNzICY9IEhQQUdFX01BU0s7CiAJLyoKQEAgLTM3OCw4ICszNTQsOCBAQAogCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHdyaXRlKTsKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7Ci0JCQlpZiAoZG9fb3V0X29mX21lbW9yeShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKSkKLQkJCQlnb3RvIHN1cnZpdmU7CisJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykgewogCQkJZG9fc2lnYnVzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggZjAyNThjYS4uYzYzNGRmYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC00MCw3ICs0MCw5IEBACiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKKwogY2hhciAgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRV0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oUEFHRV9TSVpFKSkpOworRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogCiAvKgogICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggNmI2ZGRjNC4uYmU2YzFjZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0yNTgsNiArMjU4LDEwIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqb2xkX21tOwogCisJLyogRG8gd2UgaGF2ZSBzd2l0Y2hlZCBhbW9kZT8gSWYgbm8sIHdlIGNhbm5vdCBkbyBzaWUgKi8KKwlpZiAoIXN3aXRjaF9hbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBEbyB3ZSBoYXZlIHBnc3Rlcz8gaWYgeWVzLCB3ZSBhcmUgZG9uZSAqLwogCWlmICh0c2stPm1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKIAkJcmV0dXJuIDA7CkBAIC0yOTIsNyArMjk2LDcgQEAKIAl0c2stPm1tID0gdHNrLT5hY3RpdmVfbW0gPSBtbTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAl1cGRhdGVfbW0obW0sIHRzayk7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJdGFza191bmxvY2sodHNrKTsKIAltbXB1dChvbGRfbW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGViYWJlNTEuLjhkNTBkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTEwNyw2ICsxMDcsOSBAQAogY29uZmlnIFNZU19TVVBQT1JUU19QQ0kKIAlib29sCiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfQ01UCisJYm9vbAorCiBjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJZGVmX2Jvb2wgeQogCkBAIC0xNzYsNiArMTc5LDEwIEBACiBjb25maWcgQ1BVX1NIWDMKIAlib29sCiAKK2NvbmZpZyBBUkNIX1NITU9CSUxFCisJYm9vbAorCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKKwogY2hvaWNlCiAJcHJvbXB0ICJQcm9jZXNzb3Igc3ViLXR5cGUgc2VsZWN0aW9uIgogCkBAIC0xODgsNiArMTk1LDcgQEAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDc2MTkKIAlib29sICJTdXBwb3J0IFNINzYxOSBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiAjIFNILTJBIFByb2Nlc3NvciBTdXBwb3J0CiAKQEAgLTIwMCwxNSArMjA4LDE4IEBACiAJYm9vbCAiU3VwcG9ydCBTSDcyMDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQogCXNlbGVjdCBDUFVfSEFTX0ZQVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDcyMDYKIAlib29sICJTdXBwb3J0IFNINzIwNiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzI2MwogCWJvb2wgIlN1cHBvcnQgU0g3MjYzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKIAlzZWxlY3QgQ1BVX0hBU19GUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfTVhHCiAJYm9vbCAiU3VwcG9ydCBNWC1HIHByb2Nlc3NvciIKQEAgLTMyMyw3ICszMzQsOSBAQAogCWJvb2wgIlN1cHBvcnQgU0g3NzIzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCWhlbHAKIAkgIFNlbGVjdCBTSDc3MjMgaWYgeW91IGhhdmUgYW4gU0gtTW9iaWxlUjIgQ1BVLgogCkBAIC0zNDgsNiArMzYxLDE0IEBACiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQogCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3Nzg2CisJYm9vbCAiU3VwcG9ydCBTSDc3ODYgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0QQorCXNlbGVjdCBDUFVfU0hYMworCXNlbGVjdCBDUFVfSEFTX1BURUFFWAorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwogY29uZmlnIENQVV9TVUJUWVBFX1NIWDMKIAlib29sICJTdXBwb3J0IFNILVgzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKQEAgLTM2MiwyMCArMzgzLDI2IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MzQzCiAJYm9vbCAiU3VwcG9ydCBTSDczNDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzIyCiAJYm9vbCAiU3VwcG9ydCBTSDc3MjIgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzM2NgogCWJvb2wgIlN1cHBvcnQgU0g3MzY2IHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKICMgU0gtNSBQcm9jZXNzb3IgU3VwcG9ydAogCkBAIC0zOTgsMjUgKzQyNSwzNCBAQAogbWVudSAiVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24iCiAKIGNvbmZpZyBTSF9UTVUKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJUTVUgdGltZXIgc3VwcG9ydCIKKwlib29sICJUTVUgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDMgfHwgQ1BVX1NINAorCWRlZmF1bHQgeQogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBUTVUgYXMgdGhlIHN5c3RlbSB0aW1lci4KIAogY29uZmlnIFNIX0NNVAotCWRlZl9ib29sIHkKLQlwcm9tcHQgIkNNVCB0aW1lciBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1NIMiAmJiAhQ1BVX1NVQlRZUEVfTVhHCisJYm9vbCAiQ01UIHRpbWVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfQ01UICYmIENQVV9TSDIKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgQ01UIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKKyMKKyMgU3VwcG9ydCBmb3IgdGhlIG5ldy1zdHlsZSBDTVQgZHJpdmVyLiBUaGlzIHdpbGwgcmVwbGFjZSBTSF9DTVQKKyMgb25jZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtZXJnZWQuCisjCitjb25maWcgU0hfVElNRVJfQ01UCisJYm9vbCAiQ01UIGNsb2NrZXZlbnRzIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19DTVQgJiYgIVNIX0NNVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBTSF9NVFUyCi0JZGVmX2Jvb2wgbgotCXByb21wdCAiTVRVMiB0aW1lciBzdXBwb3J0IgorCWJvb2wgIk1UVTIgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDJBCisJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIE1UVTIgYXMgdGhlIHN5c3RlbSB0aW1lci4KIApAQCAtNDI2LDcgKzQ2Miw4IEBACiAJCQlDUFVfU1VCVFlQRV9TSDc3NjMKIAlkZWZhdWx0ICI4NiIgaWYgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJZGVmYXVsdCAiMTQwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDYKLQlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMworCWRlZmF1bHQgIjE0MiIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzICYmIFNIX0NNVAorCWRlZmF1bHQgIjE1MyIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzICYmIFNIX01UVTIKIAlkZWZhdWx0ICIyMzgiIGlmIENQVV9TVUJUWVBFX01YRwogCWRlZmF1bHQgIjE2IgogCkBAIC00MzgsNyArNDc1LDggQEAKIAlkZWZhdWx0ICIzMzMzMzMzMyIgaWYgQ1BVX1NVQlRZUEVfU0g3NzcwIHx8IENQVV9TVUJUWVBFX1NINzcyMyB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3NjAgfHwgQ1BVX1NVQlRZUEVfU0g3NzA1IHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwMyB8fCBDUFVfU1VCVFlQRV9TSDcyMDYgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRworCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRyAgICB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3ODYKIAlkZWZhdWx0ICI2MDAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IENQVV9TVUJUWVBFX1NINzc1MVIKIAlkZWZhdWx0ICI2NjAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g0XzIwMgogCWRlZmF1bHQgIjUwMDAwMDAwIgpAQCAtNTIxLDYgKzU1OSwxMyBAQAogCiAJICBGb3IgbW9yZSBkZXRhaWxzIHNlZSBEb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dAogCitjb25maWcgS0VYRUNfSlVNUAorCWJvb2wgImtleGVjIGp1bXAgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTVVBFUkgzMiAmJiBLRVhFQyAmJiBISUJFUk5BVElPTiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlCisJICBjb2RlIHZpYSBLRVhFQworCiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5jcHUgYi9hcmNoL3NoL0tjb25maWcuY3B1CmluZGV4IDBlMjdmZTMuLmM3ZDcwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9zaC9LY29uZmlnLmNwdQpAQCAtMTA0LDYgKzEwNCw5IEBACiBjb25maWcgQ1BVX0hBU19QVEVBCiAJYm9vbAogCitjb25maWcgQ1BVX0hBU19QVEVBRVgKKwlib29sCisKIGNvbmZpZyBDUFVfSEFTX0RTUAogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggNDA2N2IwZC4uYmVjZTFmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC04MCw2ICs4MCw3IEBACiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU1VQRVJIMzIpCQkJOj0gekltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfU0g3Nzg1TENSKQkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfUlNLKQkJCTo9IHVJbWFnZQorZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1VSUVVFTEwpCQk6PSB1SW1hZ2UKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83MjA2X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIXzc2MTlfU09MVVRJT05fRU5HSU5FKQk6PSB2bWxpbnV4CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IDg2MTkxNDcuLmRjYzFhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTU1LDE3ICsxNTUsMjIgQEAKIAogY29uZmlnIFNIX1NINzc4NUxDUl8yOUJJVF9QSFlTTUFQUwogCWJvb2wgIlNINzc4NUxDUiAyOWJpdCBwaHlzbWFwcyIKLQlkZXBlbmRzIG9uIFNIX1NINzc4NUxDUgorCWRlcGVuZHMgb24gU0hfU0g3Nzg1TENSICYmIDI5QklUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBib2FyZCBoYXMgMiBwaHlzaWNhbCBtZW1vcnkgbWFwcy4gSXQgY2FuIGJlIGNoYW5nZWQgd2l0aAogCSAgRElQIHN3aXRjaChTMi01KS4gSWYgeW91IHNldCB0aGUgRElQIHN3aXRjaCBmb3IgUzItNSA9IE9OLAogCSAgeW91IGNhbiBhY2Nlc3MgYWxsIG9uLWJvYXJkIGRldmljZSBpbiAyOWJpdCBhZGRyZXNzIG1vZGUuCiAKK2NvbmZpZyBTSF9VUlFVRUxMCisJYm9vbCAiVXJxdWVsbCIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCiBjb25maWcgU0hfTUlHT1IKIAlib29sICJNaWdvLVIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjIKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IE1pZ28tUiBpZiBjb25maWd1cmluZyBmb3IgdGhlIFNINzcyMiBNaWdvLVIgcGxhdGZvcm0KICAgICAgICAgICBieSBSZW5lc2FzIFN5c3RlbSBTb2x1dGlvbnMgQXNpYSBQdGUuIEx0ZC4KQEAgLTE3Myw3ICsxNzgsNyBAQAogY29uZmlnIFNIX0FQMzI1UlhBCiAJYm9vbCAiQVAtMzI1UlhBIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIzCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFJlbmVzYXMgIkFQLTMyNVJYQSIgc3VwcG9ydC4KIAkgIENvbXBhdGlibGUgd2l0aCBBTEdPIFNZU1RFTSBDTy4sTFRELiAiQVAtMzIwQSIKQEAgLTE4NSw2ICsxOTAsMTMgQEAKIAkgIFNlbGVjdCBTSDc3NjNSRFAgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBTSDc3NjMKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBTSF9FU1BUCisJYm9vbCAiRVNQVCIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc2MworCWhlbHAKKwkgIFNlbGVjdCBFU1BUIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU0g3NzYzCisJICB3aXRoIGdpZ2FiaXQgZXRoZXIgZXZhbHVhdGlvbiBib2FyZC4KKwogY29uZmlnIFNIX0VET1NLNzcwNQogCWJvb2wgIkVET1NLNzcwNSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcwNQpAQCAtMjQwLDcgKzI1Miw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCkBAIC0yNDksNiArMjYxLDEzIEBACiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDVfMTAxIHx8IENQVV9TVUJUWVBFX1NINV8xMDMKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1BDSQogCitjb25maWcgU0hfUE9MQVJJUworCWJvb2wgIlNNU0MgUG9sYXJpcyIKKwlzZWxlY3QgQ1BVX0hBU19JUFJfSVJRCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDkKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGFuIFNNU0MgUG9sYXJpcyBkZXZlbG9wbWVudCBib2FyZAorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKaW5kZXggMjY5YWUyYi4uN2JhYTIxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKQEAgLTQsNSArNCw4IEBACiBvYmotJChDT05GSUdfU0hfQVAzMjVSWEEpCSs9IGJvYXJkLWFwMzI1cnhhLm8KIG9iai0kKENPTkZJR19TSF9NQUdJQ19QQU5FTF9SMikJKz0gYm9hcmQtbWFnaWNwYW5lbHIyLm8KIG9iai0kKENPTkZJR19TSF9TSDc3ODVMQ1IpCSs9IGJvYXJkLXNoNzc4NWxjci5vCitvYmotJChDT05GSUdfU0hfVVJRVUVMTCkJKz0gYm9hcmQtdXJxdWVsbC5vCiBvYmotJChDT05GSUdfU0hfU0hNSU4pCQkrPSBib2FyZC1zaG1pbi5vCiBvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubworb2JqLSQoQ09ORklHX1NIX0VTUFQpCQkrPSBib2FyZC1lc3B0Lm8KK29iai0kKENPTkZJR19TSF9QT0xBUklTKQkrPSBib2FyZC1wb2xhcmlzLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCmluZGV4IDE1YjZkNDUuLmE2NGUzODggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwpAQCAtMTY2LDYgKzE2NiwxNiBAQAogCWN0cmxfb3V0dygweDEwMCwgRlBHQV9CS0xSRUcpOwogfQogCitzdGF0aWMgdm9pZCBhcDMyMF93dmdhX3Bvd2VyX29mZih2b2lkICpib2FyZF9kYXRhKQoreworCS8qIGJhY2tsaWdodCAqLworCWN0cmxfb3V0dygwLCBGUEdBX0JLTFJFRyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAxKTsKKworCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPRkYgKi8KKwljdHJsX291dHcoMCwgRlBHQV9MQ0RSRUcpOworfQorCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0gewogCS5jbG9ja19zb3VyY2UgPSBMQ0RDX0NMS19FWFRFUk5BTCwKIAkuY2hbMF0gPSB7CkBAIC0xOTEsNiArMjAxLDcgQEAKIAkJfSwKIAkJLmJvYXJkX2NmZyA9IHsKIAkJCS5kaXNwbGF5X29uID0gYXAzMjBfd3ZnYV9wb3dlcl9vbiwKKwkJCS5kaXNwbGF5X29mZiA9IGFwMzIwX3d2Z2FfcG93ZXJfb2ZmLAogCQl9LAogCX0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZTVlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVzcHQuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIERhdGEgVGVjaG5vbG9neSBJbmMuIEVTUFQtR0lHQSBib2FyZCBzdXBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3Uubm9idWhpcm9AcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3NoX2V0aC5oPgorCisvKiBOT1IgRmxhc2ggKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJVLUJvb3QiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSAoMiAqIFNaXzEyOEspLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCX0sIHsKKwkJLm5hbWUgPSAiTGludXgtS2VybmVsIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSAoMjAgKiBTWl8xMjhLKSwKKwl9LCB7CisJCS5uYW1lID0gIlJvb3QgRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXNwdF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorCS5wYXJ0cyA9IGVzcHRfbm9yX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRShlc3B0X25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXNwdF9ub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZSA9ICJOT1IgRmxhc2giLAorCQkuc3RhcnQgPSAwLAorCQkuZW5kID0gU1pfOE0gLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwdF9ub3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5yZXNvdXJjZSA9IGVzcHRfbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZXNwdF9ub3JfZmxhc2hfcmVzb3VyY2VzKSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlc3B0X25vcl9mbGFzaF9kYXRhLAorCX0sCit9OworCisvKiBTSC1FdGhlciAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9ldGhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgID0gMHhGRUUwMDgwMCwgICAvKiB1c2UgZXRoMSAqLworCQkuZW5kICAgID0gMHhGRUUwMEY3QyAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgPSA1NywgICAvKiBpcnEgbnVtYmVyICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhIHNoNzc2M19ldGhfcGRhdGEgPSB7CisJLnBoeSA9IDAsCisJLmVkbWFjX2VuZGlhbiA9IEVETUFDX0xJVFRMRV9FTkRJQU4sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3B0X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgPSAic2gtZXRoIiwKKwkucmVzb3VyY2UgICA9IHNoX2V0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzaF9ldGhfcmVzb3VyY2VzKSwKKwkuZGV2ICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2g3NzYzX2V0aF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVzcHRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmVzcHRfbm9yX2ZsYXNoX2RldmljZSwKKwkmZXNwdF9ldGhfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZXNwdF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGVzcHRfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShlc3B0X2RldmljZXMpKTsKK30KK2RldmljZV9pbml0Y2FsbChlc3B0X2RldmljZXNfc2V0dXApOworCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2VzcHQgX19pbml0bXYgPSB7CisJLm12X25hbWUgPSAiRVNQVC1HSUdBIiwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2MDdlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIEp1bmUgMjAwNiBzdGV2ZS5nbGVuZGlubmluZ0BzbXNjLmNvbQorICoKKyAqIFBvbGFyaXMtc3BlY2lmaWMgcmVzb3VyY2UgZGVjbGFyYXRpb24KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGNwdS9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC1zZS9tYWNoL3NlLmg+CisKKyNkZWZpbmUgQkNSMgkJKDB4RkZGRkZGNjIpCisjZGVmaW5lIFdDUjIJCSgweEZGRkZGRjY2KQorI2RlZmluZSBBUkVBNV9XQUlUX0NUUkwJKDB4MUMwMCkKKyNkZWZpbmUgV0FJVF9TVEFURVNfMTAJKDB4NykKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJzbXNjOTExeC1tZW1vcnkiLAorCQkuc3RhcnQJCT0gUEFfRVhUNSwKKwkJLmVuZAkJPSBQQV9FWFQ1ICsgMHgxZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJzbXNjOTExeC1pcnEiLAorCQkuc3RhcnQJCT0gSVJRMF9JUlEsCisJCS5lbmQJCT0gSVJRMF9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfY29uZmlnID0geworCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbXNjOTExeCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhcnRiZWF0X2JpdF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9OworCitzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0geworCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCisJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKKwkucmVnc2l6ZQk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBPUlRfUENEUiwKKwkJLmVuZAk9IFBPUlRfUENEUiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG9sYXJpc19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21zYzkxMXhfZGV2aWNlLAorCSZoZWFydGJlYXRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG9sYXJpc19pbml0aWFsaXNlKHZvaWQpCit7CisJdTE2IHdjciwgYmNyX21hc2s7CisKKwlwcmludGsoS0VSTl9JTkZPICJDb25maWd1cmluZyBQb2xhcmlzIGV4dGVybmFsIGJ1c1xuIik7CisKKwkvKiBDb25maWd1cmUgYXJlYSA1IHdpdGggMiB3YWl0IHN0YXRlcyAqLworCXdjciA9IGN0cmxfaW53KFdDUjIpOworCXdjciAmPSAofkFSRUE1X1dBSVRfQ1RSTCk7CisJd2NyIHw9IChXQUlUX1NUQVRFU18xMCA8PCAxMCk7CisJY3RybF9vdXR3KHdjciwgV0NSMik7CisKKwkvKiBDb25maWd1cmUgYXJlYSA1IGZvciAzMi1iaXQgYWNjZXNzICovCisJYmNyX21hc2sgPSBjdHJsX2ludyhCQ1IyKTsKKwliY3JfbWFzayB8PSAxIDw8IDEwOworCWN0cmxfb3V0dyhiY3JfbWFzaywgQkNSMik7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocG9sYXJpc19kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHBvbGFyaXNfZGV2aWNlcykpOworfQorYXJjaF9pbml0Y2FsbChwb2xhcmlzX2luaXRpYWxpc2UpOworCitzdGF0aWMgc3RydWN0IGlwcl9kYXRhIGlwcl9pcnFfdGFibGVbXSA9IHsKKwkvKiBFeHRlcm5hbCBJUlFzICovCisJeyBJUlEwX0lSUSwgMCwgIDAsICAxLCB9LAkvKiBJUlEwICovCisJeyBJUlExX0lSUSwgMCwgIDQsICAxLCB9LAkvKiBJUlExICovCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcHJfb2Zmc2V0c1tdID0geworCUlOVENfSVBSQworfTsKKworc3RhdGljIHN0cnVjdCBpcHJfZGVzYyBpcHJfaXJxX2Rlc2MgPSB7CisJLmlwcl9vZmZzZXRzCT0gaXByX29mZnNldHMsCisJLm5yX29mZnNldHMJPSBBUlJBWV9TSVpFKGlwcl9vZmZzZXRzKSwKKworCS5pcHJfZGF0YQk9IGlwcl9pcnFfdGFibGUsCisJLm5yX2lycXMJPSBBUlJBWV9TSVpFKGlwcl9pcnFfdGFibGUpLAorCS5jaGlwID0geworCQkubmFtZQk9ICJzaDc3MDktZXh0IiwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfcG9sYXJpc19pcnEodm9pZCkKK3sKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJY3RybF9vdXR3KDAsIEJDUl9JTENSQSk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSQik7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSQyk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRCk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRSk7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRik7CisJY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7CisKKwlyZWdpc3Rlcl9pcHJfY29udHJvbGxlcigmaXByX2lycV9kZXNjKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9wb2xhcmlzIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJQb2xhcmlzIiwKKwkubXZfbnJfaXJxcwkJPSA2MSwKKwkubXZfaW5pdF9pcnEJCT0gaW5pdF9wb2xhcmlzX2lycSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jCmluZGV4IDM4YTY0OTYuLjk0YzAyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jCkBAIC0yNzUsNyArMjc1LDE4IEBACiAKIHN0YXRpYyB2b2lkIHNoNzc4NWxjcl9wb3dlcl9vZmYodm9pZCkKIHsKLQljdHJsX291dGIoMHgwMSwgUDJTRUdBRERSKFBMRF9QT0ZDUikpOworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlwID0gaW9yZW1hcChQTERfUE9GQ1IsIFBMRF9QT0ZDUiArIDEpOworCWlmICghcCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGVycm9yLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCSpwID0gMHgwMTsKKwlpb3VubWFwKHApOworCXNldF9ibF9iaXQoKTsKKwl3aGlsZSAoMSkKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwMzZjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIFJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBTSDc3ODYgVXJxdWVsbCBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBZb3NoaWhpcm8gU2hpbW9kYQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL3VycXVlbGwuaD4KKyNpbmNsdWRlIDxjcHUvc2g3Nzg2Lmg+CisjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKKwkJLmVuZAk9IEJPQVJEUkVHKFNMRURSKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CisJLnJlZ3NpemUgPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X2V0aF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lICAgPSAiU01DOTFDMTExIiAsCisJCS5zdGFydCAgPSAweDA1ODAwMzAwLAorCQkuZW5kICAgID0gMHgwNTgwMDMwZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMTEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNtYzkxeCIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzbWM5MXhfZXRoX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gc21jOTF4X2V0aF9yZXNvdXJjZXMsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jOTF4X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gImxvYWRlciIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImJvb3RlbnYiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImtlcm5lbCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl80TSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImRhdGEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IG5vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBOT1JfRkxBU0hfQUREUiwKKwkJLmVuZAk9IE5PUl9GTEFTSF9BRERSICsgTk9SX0ZMQVNIX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3JfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbm9yX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1cnF1ZWxsX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoZWFydGJlYXRfZGV2aWNlLAorCSZzbWM5MXhfZXRoX2RldmljZSwKKwkmbm9yX2ZsYXNoX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVycXVlbGxfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCS8qIFVTQiAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1VTQl9PVkMwLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVVNCX1BFTkMwLCBOVUxMKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh1cnF1ZWxsX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUodXJxdWVsbF9kZXZpY2VzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwodXJxdWVsbF9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHZvaWQgdXJxdWVsbF9wb3dlcl9vZmYodm9pZCkKK3sKKwlfX3Jhd193cml0ZXcoMHhhNWE1LCBVQk9BUkRSRUcoU1JTVFIpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHVycXVlbGxfaW5pdF9pcnEodm9pZCkKK3sKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTBfTUFTSyk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCitzdGF0aWMgdm9pZCBfX2luaXQgdXJxdWVsbF9zZXR1cChjaGFyICoqY21kbGluZV9wKQoreworCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBVcnF1ZWxsIHN1cHBvcnQuXG4iKTsKKworCXBtX3Bvd2VyX29mZiA9IHVycXVlbGxfcG93ZXJfb2ZmOworfQorCisvKgorICogVGhlIE1hY2hpbmUgVmVjdG9yCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdXJxdWVsbCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJVcnF1ZWxsIiwKKwkubXZfc2V0dXAJPSB1cnF1ZWxsX3NldHVwLAorCS5tdl9pbml0X2lycQk9IHVycXVlbGxfaW5pdF9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZwppbmRleCAwODA1N2Y2Li5kZWY0OWNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvS2NvbmZpZwpAQCAtMTgsNyArMTgsNyBAQAogY29uZmlnIFNIX1I3Nzg1UlAKIAlib29sICJSNzc4NVJQIGJvYXJkIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODUKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAKIGVuZGNob2ljZQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbV93YWtldXAuUwppbmRleCA0NGI2NDhjLi40ZjE4ZDQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtX3dha2V1cC5TCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG1fd2FrZXVwLlMKQEAgLTEwLDQ3ICsxMCwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxjcHUvbW11X2NvbnRleHQuaD4KIAotI2RlZmluZSBrMAlyMAotI2RlZmluZSBrMQlyMQotI2RlZmluZSBrMglyMgotI2RlZmluZSBrMwlyMwotI2RlZmluZSBrNAlyNAotCiAvKgogICogS2VybmVsIG1vZGUgcmVnaXN0ZXIgdXNhZ2U6CiAgKglrMAlzY3JhdGNoCiAgKglrMQlzY3JhdGNoCi0gKglrMglzY3JhdGNoIChFeGNlcHRpb24gY29kZSkKLSAqCWszCXNjcmF0Y2ggKFJldHVybiBhZGRyZXNzKQotICoJazQJc2NyYXRjaAotICoJazUJcmVzZXJ2ZWQKLSAqCWs2CUdsb2JhbCBJbnRlcnJ1cHQgTWFzayAoMC0tMTUgPDwgNCkKLSAqCWs3CUNVUlJFTlRfVEhSRUFEX0lORk8gKHBvaW50ZXIgdG8gY3VycmVudCB0aHJlYWQgaW5mbykKKyAqIEZvciBtb3JlIGRldGFpbHMsIHBsZWFzZSBoYXZlIGEgbG9vayBhdCBlbnRyeS5TCiAgKi8KIAorI2RlZmluZSBrMAlyMAorI2RlZmluZSBrMQlyMQorCiBFTlRSWSh3YWtldXBfc3RhcnQpCiAhIGNsZWFyIFNUQlkgYml0Ci0JbW92CSMtMTI2LCBrMgorCW1vdgkjLTEyNiwgazEKICAgIAlhbmQJIzEyNywgazAKLQltb3YuYglrMCwgQGsyCisJbW92LmIJazAsIEBrMQogISBlbmFibGUgcmVmcmVzaAogCW1vdi5sCTVmLCBrMQogCW1vdi53CTZmLCBrMAogICAJbW92LncJazAsIEBrMQogISBqdW1wIHRvIGhhbmRsZXIKLQltb3YubAkyZiwgazIKLQltb3YubAkzZiwgazMKLQltb3YubAlAazIsIGsyCi0KIAltb3YubAk0ZiwgazEKIAlqbXAJQGsxCi0Jbm9wCisJIG5vcAogCiAJLmFsaWduCTIKLTE6CS5sb25nCUVYUEVWVAotMjoJLmxvbmcJSU5URVZUCi0zOgkubG9uZwlyZXRfZnJvbV9pcnEKLTQ6CS5sb25nCWhhbmRsZV9leGNlcHRpb24KKzQ6CS5sb25nCWhhbmRsZV9pbnRlcnJ1cHQKIDU6CS5sb25nCTB4ZmZmZmZmNjgKIDY6CS53b3JkCTB4MDUyNAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKaW5kZXggNzQ2NzQyYmQuLjhmMzA1YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCS5tdl9zZXR1cCA9IGhwNnh4X3NldHVwLAogCS8qIElSUSdzIDogQ1BVKDY0KSArIENDSElQKDE2KSArIEZSRUVfVE9fVVNFKDYpICovCiAJLm12X25yX2lycXMgPSBIRDY0NDYxX0lSUUJBU0UgKyBIRDY0NDYxX0lSUV9OVU0gKyA2LAotCS5tdl9pcnFfZGVtdXggPSBoZDY0NDYxX2lycV9kZW11eCwKIAkvKiBFbmFibGUgSVJRMCAtPiBJUlEzIGluIElSUV9NT0RFICovCiAJLm12X2luaXRfaXJxID0gaHA2eHhfaW5pdF9pcnEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IDI4ZTU2YzUuLmJjMzViNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTQ1MCw2ICs0NTAsMTQgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWlnb3JfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCisjaWZkZWYgQ09ORklHX1BNCisJLyogTGV0IEQxMSBMRUQgc2hvdyBTVEFUVVMwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CisKKwkvKiBMaXQgRDEyIExFRCBzaG93IFBEU1RBVFVTICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOworI2Vsc2UKIAkvKiBMaXQgRDExIExFRCAqLwogCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwpAQCAtNDU5LDYgKzQ2Nyw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7CiAJZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKKyNlbmRpZgogCiAJLyogU01DOTFDMTExIC0gRW5hYmxlIElSUTAsIFNldHVwIENTNCBmb3IgMTYtYml0IGZhc3QgYWNjZXNzICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svS2NvbmZpZwppbmRleCBiZmYwOTVkLi5hZWZmM2IwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9LY29uZmlnCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAogY29uZmlnIFNIX1JTSzcyMDMKIAlib29sICJSU0s3MjAzIgotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzIwMwogCiBlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDZmOTI2ZmQuLjM5MDUzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtNjMsMTUgKzYzLDE5IEBACiAJfSwKIH07CiAKLS8qIFNILUV0aGVyICovCisvKgorICogU0gtRXRoZXIKKyAqCisgKiBTSCBFdGhlciBvZiBTSDc3NjMgaGFzIG11bHRpIElSUSBoYW5kbGluZy4KKyAqICg1Nyw1OCw1OSAtPiA1NykKKyAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9ldGhfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgID0gMHhGRUUwMDgwMCwgICAvKiB1c2UgZXRoMSAqLwogCQkuZW5kICAgID0gMHhGRUUwMEY3QyAtIDEsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCAgPSA1OCwgICAvKiBpcnEgbnVtYmVyICovCi0JCS5lbmQgICAgPSA1OCwKKwkJLnN0YXJ0ICA9IDU3LCAgIC8qIGlycSBudW1iZXIgKi8KIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IGMxNmNjZDQuLjk1NDgzZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTMzLDIwICszMywyNCBAQAogJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAogCi1pZmVxICgkKENPTkZJR18zMkJJVCkseSkKLUtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQotZWxzZQotS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCi0JCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKLQkJCSQoQ09ORklHX01FTU9SWV9TVEFSVCkgKyBcCi0JCQkkKENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUKV0nKQorS0VSTkVMX01FTU9SWSA6PSAweDAwMDAwMDAwCitpZmVxICgkKENPTkZJR19QTUJfRklYRUQpLHkpCitLRVJORUxfTUVNT1JZIDo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAorCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCkgJiAweDFmZmZmZmZmXScpCiBlbmRpZgoraWZlcSAoJChDT05GSUdfMjlCSVQpLHkpCitLRVJORUxfTUVNT1JZIDo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAorCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCldJykKK2VuZGlmCisKK0tFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAorCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCisJCQkkKEtFUk5FTF9NRU1PUlkpICsgXAorCQkJJChDT05GSUdfWkVST19QQUdFX09GRlNFVCldJykKIAogS0VSTkVMX0VOVFJZCTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAogCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCi0JCQkkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAorCQkJJChLRVJORUxfTUVNT1JZKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpICsgJChDT05GSUdfRU5UUllfT0ZGU0VUKV0nKQogCiBxdWlldF9jbWRfdWltYWdlID0gVUlNQUdFICAkQApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwppbmRleCAyN2NlZWI5Li4yNWVmOTEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYworKysgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwpAQCAtNTMsMjEgKzUzLDIyIEBACiAJLnVubWFzawkJPSBoZDY0NDYxX3VubWFza19pcnEsCiB9OwogCi1pbnQgaGQ2NDQ2MV9pcnFfZGVtdXgoaW50IGlycSkKK3N0YXRpYyB2b2lkIGhkNjQ0NjFfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlpZiAoaXJxID09IENPTkZJR19IRDY0NDYxX0lSUSkgewotCQl1bnNpZ25lZCBzaG9ydCBiaXQ7Ci0JCXVuc2lnbmVkIHNob3J0IG5pcnIgPSBpbncoSEQ2NDQ2MV9OSVJSKTsKLQkJdW5zaWduZWQgc2hvcnQgbmltciA9IGludyhIRDY0NDYxX05JTVIpOwotCQlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoSEQ2NDQ2MV9OSVJSKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmV4dF9kZXNjOworCXVuc2lnbmVkIGludCBleHRfaXJxID0gSEQ2NDQ2MV9JUlFCQVNFOwogCi0JCW5pcnIgJj0gfm5pbXI7Ci0JCWZvciAoYml0ID0gMSwgaSA9IDA7IGkgPCAxNjsgYml0IDw8PSAxLCBpKyspCi0JCQlpZiAobmlyciAmIGJpdCkKLQkJCQlicmVhazsKLQkJaXJxID0gSEQ2NDQ2MV9JUlFCQVNFICsgaTsKKwlpbnR2ICY9ICgxIDw8IEhENjQ0NjFfSVJRX05VTSkgLSAxOworCisJd2hpbGUgKGludHYpIHsKKwkJaWYgKGludHYgJiAxKSB7CisJCQlleHRfZGVzYyA9IGlycV9kZXNjICsgZXh0X2lycTsKKwkJCWhhbmRsZV9sZXZlbF9pcnEoZXh0X2lycSwgZXh0X2Rlc2MpOworCQl9CisJCWludHYgPj49IDE7CisJCWV4dF9pcnErKzsKIAl9Ci0JcmV0dXJuIGlycTsKIH0KIAogaW50IF9faW5pdCBzZXR1cF9oZDY0NDYxKHZvaWQpCkBAIC05Myw2ICs5NCw5IEBACiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmaGQ2NDQ2MV9pcnFfY2hpcCwKIAkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQ09ORklHX0hENjQ0NjFfSVJRLCBoZDY0NDYxX2lycV9kZW11eCk7CisJc2V0X2lycV90eXBlKENPTkZJR19IRDY0NDYxX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwogI2lmZGVmIENPTkZJR19IRDY0NDYxX0VOQUJMRVIKIAlwcmludGsoS0VSTl9JTkZPICJIRDY0NDYxOiBlbmFibGluZyBQQ01DSUEgZGV2aWNlc1xuIik7CiAJX19yYXdfd3JpdGViKDB4NGMsIEhENjQ0NjFfUENDMUNTQ0lFUik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczZWM0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpAQCAtMCwwICsxLDExOTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzcKKyMgVHVlIE1hciAxNyAxMzoyNTo1OCAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKK0NPTkZJR19VVFNfTlM9eQorQ09ORklHX0lQQ19OUz15CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworIyBDT05GSUdfU0hfU0g3NzYzUkRQIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9FU1BUPXkKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfVElNRVJfSVJRPTI4CitDT05GSUdfU0hfUENMS19GUkVRPTY2NjY2NjY2CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CitDT05GSUdfU0hfRVRIPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOPXkKK0NPTkZJR19GQl9CT1RIX0VORElBTj15CisjIENPTkZJR19GQl9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TSDc3NjA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19MT0dPX1NVUEVSSF9NT05PPXkKK0NPTkZJR19MT0dPX1NVUEVSSF9WR0ExNj15CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PXkKK0NPTkZJR19OTFNfSVNPODg1OV84PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9eQorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj15CitDT05GSUdfTkxTX0lTTzg4NTlfMz15CitDT05GSUdfTkxTX0lTTzg4NTlfND15CitDT05GSUdfTkxTX0lTTzg4NTlfNT15CitDT05GSUdfTkxTX0lTTzg4NTlfNj15CitDT05GSUdfTkxTX0lTTzg4NTlfNz15CitDT05GSUdfTkxTX0lTTzg4NTlfOT15CitDT05GSUdfTkxTX0lTTzg4NTlfMTM9eQorQ09ORklHX05MU19JU084ODU5XzE0PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CitDT05GSUdfTkxTX0tPSThfUj15CitDT05GSUdfTkxTX0tPSThfVT15CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTU9SRV9DT01QSUxFX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGRlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKQEAgLTAsMCArMSw5NjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzQKKyMgV2VkIEZlYiAxMSAxODo0MTo1OSAyMDA5CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0gzPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwQzAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKK0NPTkZJR18yOUJJVD15CitDT05GSUdfVlNZU0NBTEw9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFVfRU1VPXkKK0NPTkZJR19TSF9BREM9eQorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX0lQUl9JUlE9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0CitDT05GSUdfU0hfUE9MQVJJUz15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzAwMDAwMAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9ETUFfQVBJPXkKK0NPTkZJR19TSF9ETUE9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9amZmczIgbWVtPTYzTSBtdGRwYXJ0cz1waHlzbWFwLWZsYXNoLjA6MHgwMDEwMDAwMChib290bG9hZGVyKXJvLDB4MDA1MDAwMDAoS2VybmVsKXJvLDB4MDBBMDAwMDAoRmlsZXN5c3RlbSkiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAxMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAorIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TSD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCisjIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0RFUD15CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TRz15CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4MDAwMDAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CitDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0dFTkVSSUM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlMWRlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTU1MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNAorIyBGcmkgRmViIDIwIDE4OjI1OjI5IDIwMDkKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIgorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CisjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19JT19UUkFQUEVEPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorQ09ORklHX0NQVV9TSFgyPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfTVhHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHg0MDAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MjAwMDAwMDAKKyMgQ09ORklHXzI5QklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CitDT05GSUdfUE1CX0VOQUJMRT15CisjIENPTkZJR19QTUIgaXMgbm90IHNldAorQ09ORklHX1BNQl9GSVhFRD15CisjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CitDT05GSUdfVlNZU0NBTEw9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MgorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQT15CitDT05GSUdfQ1BVX0hBU19GUFU9eQorCisjCisjIEJvYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0hJR0hMQU5ERVIgaXMgbm90IHNldAorQ09ORklHX1NIX1NINzc4NUxDUj15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0yOAorQ09ORklHX1NIX1BDTEtfRlJFUT01MDAwMDAwMAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CitDT05GSUdfUENJX0FVVE89eQorQ09ORklHX1BDSV9BVVRPX1VQREFURV9SRVNPVVJDRVM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX01JST15CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CitDT05GSUdfUjgxNjk9eQorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09QQ0E9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCitDT05GSUdfSTJDX1BDQV9QTEFURk9STT15CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KK0NPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQorQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GT1BTPW0KK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CitDT05GSUdfRkJfU0hfTU9CSUxFX0xDREM9bQorQ09ORklHX0ZCX1NNNTAxPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19USFJVU1RNQVNURVJfRkY9bQorQ09ORklHX1pFUk9QTFVTX0ZGPW0KK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9SUzVDMzcyPXkKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05URlNfUlc9eQorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzI2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0CisjIFRodSBNYXIgIDUgMTc6Mjg6MTMgMjAwOQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CitDT05GSUdfQ1BVX1NIWDM9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNjYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKK0NPTkZJR18yOUJJVD15CisjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CitDT05GSUdfVlNZU0NBTEw9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU0hfVVJRVUVMTD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLCAzODQwMCBlYXJseXByaW50az1zZXJpYWwgaXA9b24gaWdub3JlX2xvZ2xldmVsIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBtZW1jaHVuay52cHU9NG0iCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPUENBPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKK0NPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX01GRF9TTTUwMV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CitDT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KK0NPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQorQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GT1BTPW0KK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05URlNfUlc9eQorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1JFX0NPTVBJTEVfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IDAxOTM2MzYuLmYxM2EwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTksMTMgKzksMjEgQEAKIAlzZWxlY3QgU0hfRE1BX0FQSQogCWRlZmF1bHQgbgogCitjb25maWcgU0hfRE1BX0lSUV9NVUxUSQorCWJvb2wKKwlkZXBlbmRzIG9uIFNIX0RNQQorCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IFwKKwkJQ1BVX1NVQlRZUEVfU0g3NzUwUyB8fCBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIgfHwgXAorCQlDUFVfU1VCVFlQRV9TSDcwOTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzYzIHx8IENQVV9TVUJUWVBFX1NINzc2NCB8fCBcCisJCUNQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKKwogY29uZmlnIE5SX09OQ0hJUF9ETUFfQ0hBTk5FTFMKIAlpbnQKIAlkZXBlbmRzIG9uIFNIX0RNQQotCWRlZmF1bHQgIjYiIGlmIENQVV9TVUJUWVBFX1NINzcyMCB8fCBDUFVfU1VCVFlQRV9TSDc3MjEKLQlkZWZhdWx0ICI4IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIKLQlkZWZhdWx0ICIxMiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzgwCi0JZGVmYXVsdCAiNCIKKwlkZWZhdWx0ICI0IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IENQVV9TVUJUWVBFX1NINzc1MFMKKwlkZWZhdWx0ICI4IiBpZiBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIgfHwgQ1BVX1NVQlRZUEVfU0g3NzYwCisJZGVmYXVsdCAiMTIiIGlmIENQVV9TVUJUWVBFX1NINzcyMyB8fCBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CisJZGVmYXVsdCAiNiIKIAloZWxwCiAJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgdGhlIG9uLWNoaXAKIAkgIERNQUMgc3VwcG9ydHMuIFRoaXMgd2lsbCBiZSA0IGZvciBTSDc3NTAvU0g3NzUxIGFuZCA4IGZvciB0aGUKQEAgLTQ2LDQgKzU0LDI4IEBACiAJICBvZiB0aGUgU0g3NzYwLgogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIEF1ZGlvL1VTQiBETUEgb24geW91ciBTSDc3NjAgYm9hcmQuCiAKK2NvbmZpZyBQVlIyX0RNQQorCXRyaXN0YXRlICJQb3dlclZSIDIgRE1BQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUICYmIFNIX0RNQQorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBQVlIyIERNQSBjb250cm9sbGVyLgorCSAgQXMgdGhpcyBjaGFpbnMgb2ZmIG9mIHRoZSBvbi1jaGlwIERNQUMsIHRoYXQgbXVzdCBhbHNvIGJlCisJICBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKwkgIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgYnkgdGhlIHB2cjJmYiBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yCisJICBjZXJ0YWluIG9wdGltaXphdGlvbnMsIGJ1dCBpcyBub3QgbmVjZXNzYXJ5IGZvciBmdW5jdGlvbmFsaXR5LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKK2NvbmZpZyBHMl9ETUEKKwl0cmlzdGF0ZSAiRzIgQnVzIERNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUCisJc2VsZWN0IFNIX0RNQV9BUEkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIERNQSBjb250cm9sbGVyIGZvciB0aGUgRHJlYW1jYXN0J3MKKwkgIEcyIGJ1cy4gRHJpdmVycyB0aGF0IHdhbnQgdGhpcyB3aWxsIGdlbmVyYWxseSBlbmFibGUgdGhpcyBvbgorCSAgdGhlaXIgb3duLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IGFiOTU2YWQuLmM2MDY4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtNCw1ICs0LDYgQEAKIAogb2JqLSQoQ09ORklHX1NIX0RNQV9BUEkpCSs9IGRtYS1hcGkubyBkbWEtc3lzZnMubwogb2JqLSQoQ09ORklHX1NIX0RNQSkJCSs9IGRtYS1zaC5vCi1vYmotJChDT05GSUdfU0hfRFJFQU1DQVNUKQkrPSBkbWEtcHZyMi5vIGRtYS1nMi5vCitvYmotJChDT05GSUdfUFZSMl9ETUEpCQkrPSBkbWEtcHZyMi5vCitvYmotJChDT05GSUdfRzJfRE1BKQkJKz0gZG1hLWcyLm8KIG9iai0kKENPTkZJR19TSF9ETUFCUkcpCQkrPSBkbWFicmcubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKaW5kZXggNTA4ODdhNS4uMzdmYjViOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCkBAIC0xNywyOCArMTcsMTYgQEAKICNpbmNsdWRlIDxtYWNoLWRyZWFtY2FzdC9tYWNoL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJkbWEtc2guaCIKKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CiAKLXN0YXRpYyBpbnQgZG10ZV9pcnFfbWFwW10gPSB7Ci0JRE1URTBfSVJRLAotCURNVEUxX0lSUSwKLQlETVRFMl9JUlEsCi0JRE1URTNfSVJRLAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUikgfHwJXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotCURNVEU0X0lSUSwKLQlETVRFNV9JUlEsCisjaWYgZGVmaW5lZChETUFFMV9JUlEpCisjZGVmaW5lIE5SX0RNQUUJCTIKKyNlbHNlCisjZGVmaW5lIE5SX0RNQUUJCTEKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpIHx8CVwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICB8fAlcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotCURNVEU2X0lSUSwKLQlETVRFN19JUlEsCi0jZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKmRtYWVfbmFtZVtdID0geworCSJETUFDIEFkZHJlc3MgRXJyb3IwIiwgIkRNQUMgQWRkcmVzcyBFcnJvcjEiCiB9OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfZG10ZV9pcnEodW5zaWduZWQgaW50IGNoYW4pCkBAIC00Niw3ICszNCwxNCBAQAogCXVuc2lnbmVkIGludCBpcnEgPSAwOwogCWlmIChjaGFuIDwgQVJSQVlfU0laRShkbXRlX2lycV9tYXApKQogCQlpcnEgPSBkbXRlX2lycV9tYXBbY2hhbl07CisKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCWlmIChpcnEgPiBETVRFNl9JUlEpCisJCXJldHVybiBETVRFNl9JUlE7CisJcmV0dXJuIERNVEUwX0lSUTsKKyNlbHNlCiAJcmV0dXJuIGlycTsKKyNlbmRpZgogfQogCiAvKgpAQCAtNTksNyArNTQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCXUzMiBjaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJdTMyIGNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAKIAlyZXR1cm4gdHNfc2hpZnRbKGNoY3IgJiBDSENSX1RTX01BU0spPj5DSENSX1RTX1NISUZUXTsKIH0KQEAgLTc1LDEzICs3MCwxMyBAQAogCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbiA9IGRldl9pZDsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChDSENSW2NoYW4tPmNoYW5dKTsKKwljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCiAJaWYgKCEoY2hjciAmIENIQ1JfVEUpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAljaGNyICY9IH4oQ0hDUl9JRSB8IENIQ1JfREUpOwotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAl3YWtlX3VwKCZjaGFuLT53YWl0X3F1ZXVlKTsKIApAQCAtOTQsNyArODksMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gcmVxdWVzdF9pcnEoZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pLCBkbWFfdGVpLAotCQkJICAgSVJRRl9ESVNBQkxFRCwgY2hhbi0+ZGV2X2lkLCBjaGFuKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCQkJCUlSUUZfU0hBUkVELAorI2Vsc2UKKwkJCQlJUlFGX0RJU0FCTEVELAorI2VuZGlmCisJCQkJY2hhbi0+ZGV2X2lkLCBjaGFuKTsKIH0KIAogc3RhdGljIHZvaWQgc2hfZG1hY19mcmVlX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJY2hhbi0+ZmxhZ3MgJj0gfkRNQV9URUlfQ0FQQUJMRTsKIAl9CiAKLQljdHJsX291dGwoY2hjciwgQ0hDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJY2hhbi0+ZmxhZ3MgfD0gRE1BX0NPTkZJR1VSRUQ7CiAJcmV0dXJuIDA7CkBAIC0xMjYsMTMgKzEyNiwxMyBAQAogCWludCBpcnE7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSk7CisJY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyIHw9IENIQ1JfREU7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpCiAJCWNoY3IgfD0gQ0hDUl9JRTsKIAotCWN0cmxfb3V0bChjaGNyLCBDSENSW2NoYW4tPmNoYW5dKTsKKwljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpIHsKIAkJaXJxID0gZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pOwpAQCAtMTUwLDkgKzE1MCw5IEBACiAJCWRpc2FibGVfaXJxKGlycSk7CiAJfQogCi0JY2hjciA9IGN0cmxfaW5sKENIQ1JbY2hhbi0+Y2hhbl0pOworCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciAmPSB+KENIQ1JfREUgfCBDSENSX1RFIHwgQ0hDUl9JRSk7Ci0JY3RybF9vdXRsKGNoY3IsIENIQ1JbY2hhbi0+Y2hhbl0pOworCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIH0KIAogc3RhdGljIGludCBzaF9kbWFjX3hmZXJfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKQEAgLTE4MywxMiArMTgzLDEzIEBACiAJICovCiAJaWYgKGNoYW4tPnNhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPnNhciwgU0FSW2NoYW4tPmNoYW5dKTsKKwkJY3RybF9vdXRsKGNoYW4tPnNhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0rU0FSKSk7CiAJaWYgKGNoYW4tPmRhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPmRhciwgREFSW2NoYW4tPmNoYW5dKTsKKwkJY3RybF9vdXRsKGNoYW4tPmRhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBEQVIpKTsKIAotCWN0cmxfb3V0bChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksIERNQVRDUltjaGFuLT5jaGFuXSk7CisJY3RybF9vdXRsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwKKwkJKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpKTsKIAogCXNoX2RtYWNfZW5hYmxlX2RtYShjaGFuKTsKIApAQCAtMTk3LDM2ICsxOTgsMjYgQEAKIAogc3RhdGljIGludCBzaF9kbWFjX2dldF9kbWFfcmVzaWR1ZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JaWYgKCEoY3RybF9pbmwoQ0hDUltjaGFuLT5jaGFuXSkgJiBDSENSX0RFKSkKKwlpZiAoIShjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikgJiBDSENSX0RFKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gY3RybF9pbmwoRE1BVENSW2NoYW4tPmNoYW5dKSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CisJcmV0dXJuIGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpCisJCSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCi0jZGVmaW5lIGRtYW9yX3JlYWRfcmVnKCkJY3RybF9pbncoRE1BT1IpCi0jZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhkYXRhKQljdHJsX291dHcoZGF0YSwgRE1BT1IpCi0jZWxzZQotI2RlZmluZSBkbWFvcl9yZWFkX3JlZygpCWN0cmxfaW5sKERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcoZGF0YSkJY3RybF9vdXRsKGRhdGEsIERNQU9SKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYW9yX3Jlc2V0KHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBkbWFvcl9yZXNldChpbnQgbm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBkbWFvciA9IGRtYW9yX3JlYWRfcmVnKCk7CisJdW5zaWduZWQgbG9uZyBkbWFvciA9IGRtYW9yX3JlYWRfcmVnKG5vKTsKIAogCS8qIFRyeSB0byBjbGVhciB0aGUgZXJyb3IgZmxhZ3MgZmlyc3QsIGluY2FzZSB0aGV5IGFyZSBzZXQgKi8KIAlkbWFvciAmPSB+KERNQU9SX05NSUYgfCBETUFPUl9BRSk7Ci0JZG1hb3Jfd3JpdGVfcmVnKGRtYW9yKTsKKwlkbWFvcl93cml0ZV9yZWcobm8sIGRtYW9yKTsKIAogCWRtYW9yIHw9IERNQU9SX0lOSVQ7Ci0JZG1hb3Jfd3JpdGVfcmVnKGRtYW9yKTsKKwlkbWFvcl93cml0ZV9yZWcobm8sIGRtYW9yKTsKIAogCS8qIFNlZSBpZiB3ZSBnb3QgYW4gZXJyb3IgYWdhaW4gKi8KLQlpZiAoKGRtYW9yX3JlYWRfcmVnKCkgJiAoRE1BT1JfQUUgfCBETUFPUl9OTUlGKSkpIHsKKwlpZiAoKGRtYW9yX3JlYWRfcmVnKG5vKSAmIChETUFPUl9BRSB8IERNQU9SX05NSUYpKSkgewogCQlwcmludGsoS0VSTl9FUlIgImRtYS1zaDogQ2FuJ3QgaW5pdGlhbGl6ZSBETUFPUi5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMzcsMTAgKzIyOCwzMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2VycihpbnQgaXJxLCB2b2lkICpkdW1teSkKIHsKLQlkbWFvcl9yZXNldCgpOworI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJaW50IGNudCA9IDA7CisJc3dpdGNoIChpcnEpIHsKKyNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCisJY2FzZSBETVRFNl9JUlE6CisJCWNudCsrOworI2VuZGlmCisJY2FzZSBETVRFMF9JUlE6CisJCWlmIChkbWFvcl9yZWFkX3JlZyhjbnQpICYgKERNQU9SX05NSUYgfCBETUFPUl9BRSkpIHsKKwkJCWRpc2FibGVfaXJxKGlycSk7CisJCQkvKiBETUEgbXVsdGkgYW5kIGVycm9yIElSUSAqLworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKyNlbHNlCisJZG1hb3JfcmVzZXQoMCk7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAorCQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisJZG1hb3JfcmVzZXQoMSk7CisjZW5kaWYKIAlkaXNhYmxlX2lycShpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOworI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMjU5LDI0ICsyNzMsNTkgQEAKIAkuZmxhZ3MJCT0gRE1BQ19DSEFOTkVMU19URUlfQ0FQQUJMRSwKIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVX1NINAorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfZG1hX2Vycm9yX2lycShpbnQgbikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9ETUFfSVJRX01VTFRJKQorCXJldHVybiAobiA9PSAwKSA/IGdldF9kbXRlX2lycSgwKSA6IGdldF9kbXRlX2lycSg2KTsKKyNlbHNlCisJcmV0dXJuIChuID09IDApID8gRE1BRTBfSVJRIDoKKyNpZiBkZWZpbmVkKERNQUUxX0lSUSkKKwkJCQlETUFFMV9JUlE7CisjZWxzZQorCQkJCS0xOworI2VuZGlmCisjZW5kaWYKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBzaF9kbWFjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZG1hX2luZm8gKmluZm8gPSAmc2hfZG1hY19pbmZvOwogCWludCBpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDQKLQlpID0gcmVxdWVzdF9pcnEoRE1BRV9JUlEsIGRtYV9lcnIsIElSUUZfRElTQUJMRUQsICJETUFDIEFkZHJlc3MgRXJyb3IiLCAwKTsKLQlpZiAodW5saWtlbHkoaSA8IDApKQotCQlyZXR1cm4gaTsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBOUl9ETUFFOyBuKyspIHsKKwkJaSA9IHJlcXVlc3RfaXJxKGdldF9kbWFfZXJyb3JfaXJxKG4pLCBkbWFfZXJyLAorI2lmIGRlZmluZWQoQ09ORklHX1NIX0RNQV9JUlFfTVVMVEkpCisJCQkJSVJRRl9TSEFSRUQsCisjZWxzZQorCQkJCUlSUUZfRElTQUJMRUQsCiAjZW5kaWYKKwkJCQlkbWFlX25hbWVbbl0sICh2b2lkICopZG1hZV9uYW1lW25dKTsKKwkJaWYgKHVubGlrZWx5KGkgPCAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyByZXF1ZXN0X2lycSBmYWlsXG4iLCBkbWFlX25hbWVbbl0pOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisjZW5kaWYgLyogQ09ORklHX0NQVV9TSDQgKi8KIAogCS8qCiAJICogSW5pdGlhbGl6ZSBETUFPUiwgYW5kIGNsZWFuIHVwIGFueSBlcnJvciBmbGFncyB0aGF0IG1heSBoYXZlCiAJICogYmVlbiBzZXQuCiAJICovCi0JaSA9IGRtYW9yX3Jlc2V0KCk7CisJaSA9IGRtYW9yX3Jlc2V0KDApOwogCWlmICh1bmxpa2VseShpICE9IDApKQogCQlyZXR1cm4gaTsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCXx8IFwKKwkJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQl8fCBcCisJCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKwlpID0gZG1hb3JfcmVzZXQoMSk7CisJaWYgKHVubGlrZWx5KGkgIT0gMCkpCisJCXJldHVybiBpOworI2VuZGlmCiAKIAlyZXR1cm4gcmVnaXN0ZXJfZG1hYyhpbmZvKTsKIH0KQEAgLTI4NCw4ICszMzMsMTIgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaF9kbWFjX2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQ1BVX1NINAotCWZyZWVfaXJxKERNQUVfSVJRLCAwKTsKLSNlbmRpZgorCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IE5SX0RNQUU7IG4rKykgeworCQlmcmVlX2lycShnZXRfZG1hX2Vycm9yX2lycShuKSwgKHZvaWQgKilkbWFlX25hbWVbbl0pOworCX0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINCAqLwogCXVucmVnaXN0ZXJfZG1hYygmc2hfZG1hY19pbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaCBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZmVjZDUuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwICBUYWthc2hpIFlPU0hJSQotICogQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19ETUFfU0hfSAotI2RlZmluZSBfX0RNQV9TSF9ICi0KLSNpbmNsdWRlIDxjcHUvZG1hLmg+Ci0KLS8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KLSNkZWZpbmUgUkVRX0wJMHgwMDAwMDAwMAotI2RlZmluZSBSRVFfRQkweDAwMDgwMDAwCi0jZGVmaW5lIFJBQ0tfSAkweDAwMDAwMDAwCi0jZGVmaW5lIFJBQ0tfTAkweDAwMDQwMDAwCi0jZGVmaW5lIEFDS19SCTB4MDAwMDAwMDAKLSNkZWZpbmUgQUNLX1cJMHgwMDAyMDAwMAotI2RlZmluZSBBQ0tfSAkweDAwMDAwMDAwCi0jZGVmaW5lIEFDS19MCTB4MDAwMTAwMDAKLSNkZWZpbmUgRE1fSU5DCTB4MDAwMDQwMDAKLSNkZWZpbmUgRE1fREVDCTB4MDAwMDgwMDAKLSNkZWZpbmUgU01fSU5DCTB4MDAwMDEwMDAKLSNkZWZpbmUgU01fREVDCTB4MDAwMDIwMDAKLSNkZWZpbmUgUlNfSU4JMHgwMDAwMDIwMAotI2RlZmluZSBSU19PVVQJMHgwMDAwMDMwMAotI2RlZmluZSBUU19CTEsJMHgwMDAwMDA0MAotI2RlZmluZSBUTV9CVVIJMHgwMDAwMDAyMAotI2RlZmluZSBDSENSX0RFIDB4MDAwMDAwMDEKLSNkZWZpbmUgQ0hDUl9URSAweDAwMDAwMDAyCi0jZGVmaW5lIENIQ1JfSUUgMHgwMDAwMDAwNAotCi0vKiBETUFPUiBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBETUFPUl9BRQkweDAwMDAwMDA0Ci0jZGVmaW5lIERNQU9SX05NSUYJMHgwMDAwMDAwMgotI2RlZmluZSBETUFPUl9ETUUJMHgwMDAwMDAwMQotCi0vKgotICogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgotICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCi0gKi8KLSNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU18zMikKLQotI2RlZmluZSBNQVhfRE1BQ19DSEFOTkVMUwkoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCi0KLS8qCi0gKiBTdWJ0eXBlcyB0aGF0IGhhdmUgZmV3ZXIgY2hhbm5lbHMgdGhhbiB0aGlzIHNpbXBseSBuZWVkIHRvIGNoYW5nZQotICogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMuIExpa2V3aXNlLCBzdWJ0eXBlcyB3aXRoIGEgbGFyZ2VyIG51bWJlcgotICogb2YgY2hhbm5lbHMgc2hvdWxkIGV4cGFuZCBvbiB0aGlzLgotICoKLSAqIEZvciBtb3N0IHN1YnR5cGVzIHdlIGNhbiBlYXNpbHkgZmlndXJlIHRoZXNlIHZhbHVlcyBvdXQgd2l0aCBzb21lCi0gKiBiYXNpYyBjYWxjdWxhdGlvbiwgdW5mb3J0dW5hdGVseSBvbiBvdGhlciBzdWJ0eXBlcyB0aGVzZSBhcmUgbW9yZQotICogc2NhdHRlcmVkLCBzbyB3ZSBqdXN0IGxlYXZlIGl0IHVucm9sbGVkIGZvciBzaW1wbGljaXR5LgotICovCi0jZGVmaW5lIFNBUgkoKHVuc2lnbmVkIGxvbmdbXSl7U0hfRE1BQ19CQVNFICsgMHgwMCwgU0hfRE1BQ19CQVNFICsgMHgxMCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4MjAsIFNIX0RNQUNfQkFTRSArIDB4MzAsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDUwLCBTSF9ETUFDX0JBU0UgKyAweDYwfSkKLSNkZWZpbmUgREFSCSgodW5zaWduZWQgbG9uZ1tdKXtTSF9ETUFDX0JBU0UgKyAweDA0LCBTSF9ETUFDX0JBU0UgKyAweDE0LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHgyNCwgU0hfRE1BQ19CQVNFICsgMHgzNCwgXAotCQkJCSAgIFNIX0RNQUNfQkFTRSArIDB4NTQsIFNIX0RNQUNfQkFTRSArIDB4NjR9KQotI2RlZmluZSBETUFUQ1IJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MDgsIFNIX0RNQUNfQkFTRSArIDB4MTgsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDI4LCBTSF9ETUFDX0JBU0UgKyAweDM4LCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1OCwgU0hfRE1BQ19CQVNFICsgMHg2OH0pCi0jZGVmaW5lIENIQ1IJKCh1bnNpZ25lZCBsb25nW10pe1NIX0RNQUNfQkFTRSArIDB4MGMsIFNIX0RNQUNfQkFTRSArIDB4MWMsIFwKLQkJCQkgICBTSF9ETUFDX0JBU0UgKyAweDJjLCBTSF9ETUFDX0JBU0UgKyAweDNjLCBcCi0JCQkJICAgU0hfRE1BQ19CQVNFICsgMHg1YywgU0hfRE1BQ19CQVNFICsgMHg2Y30pCi0KLSNkZWZpbmUgRE1BT1IJKFNIX0RNQUNfQkFTRSArIDB4NDApCi0KLSNlbmRpZiAvKiBfX0RNQV9TSF9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKaW5kZXggMDc4ZGM0NC4uNzczZDU3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKQEAgLTEyNyw4ICsxMjcsOCBAQAogCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSUxTUjApOwogCXBjaV93cml0ZV9yZWcoMHgwMDAwMDAwMSwgU0g0X1BDSUxTUjEpOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAwIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0Jd29yZCA9IChDT05GSUdfTUVNT1JZX1NJWkUgPiAweDA4MDAwMDAwKSA/IDB4MTAwMDAwMDAgOiAweDA4MDAwMDAwOwotCXBjaV93cml0ZV9yZWcod29yZCB8IDB4YTAwMDAwMDAsIFNINF9QQ0lMQVIwKTsKKwl3b3JkID0gQ09ORklHX01FTU9SWV9TVEFSVCB8IChDT05GSUdfTUVNT1JZX1NJWkUgLSAweDAxMDAwMDAwKTsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lMQVIwKTsKIAlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINzc4MF9QQ0lNQkFSMCk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDEgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KIAlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDAsIFNINF9QQ0lMQVIxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCmluZGV4IDM2NzM2YzcuLjgwZDQwODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaApAQCAtMzEsNyArMzEsNyBAQAogLyogUmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIFBuU0VHIChuPTEsMikgYWRkcmVzcyAgICovCiAjZGVmaW5lIFBIWVNBRERSKGEpCSgoKHVuc2lnbmVkIGxvbmcpKGEpKSAmIDB4MWZmZmZmZmYpCiAKLSNpZmRlZiBDT05GSUdfMjlCSVQKKyNpZiBkZWZpbmVkKENPTkZJR18yOUJJVCkgfHwgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogLyoKICAqIE1hcCBhbiBhZGRyZXNzIHRvIGEgY2VydGFpbiBwcml2aWxlZ2VkIHNlZ21lbnQKICAqLwpAQCAtNDMsNyArNDMsNyBAQAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDNTRUcpKQogI2RlZmluZSBQNFNFR0FERFIoYSkJXAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDRTRUcpKQotI2VuZGlmIC8qIDI5QklUICovCisjZW5kaWYgLyogMjlCSVQgfHwgUE1CX0ZJWEVEICovCiAjZW5kaWYgLyogUDFTRUcgKi8KIAogLyogQ2hlY2sgaWYgYW4gYWRkcmVzcyBjYW4gYmUgcmVhY2hlZCBpbiAyOSBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oCmluZGV4IDc0Zjc5NDMuLmEwYjM0ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWlycS5oCkBAIC0xMSw3ICsxMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2ICs9IGk7CisJdi0+Y291bnRlciArPSBpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjAsNyArMjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiAtPSBpOworCXYtPmNvdW50ZXIgLT0gaTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTI5LDkgKzI5LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRlbXAgPSAqKGxvbmcgKil2OworCXRlbXAgPSB2LT5jb3VudGVyOwogCXRlbXAgKz0gaTsKLQkqKGxvbmcgKil2ID0gdGVtcDsKKwl2LT5jb3VudGVyID0gdGVtcDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gdGVtcDsKQEAgLTQyLDkgKzQyLDkgQEAKIAl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRlbXAgPSAqKGxvbmcgKil2OworCXRlbXAgPSB2LT5jb3VudGVyOwogCXRlbXAgLT0gaTsKLQkqKGxvbmcgKil2ID0gdGVtcDsKKwl2LT5jb3VudGVyID0gdGVtcDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gdGVtcDsKQEAgLTU1LDcgKzU1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgJj0gfm1hc2s7CisJdi0+Y291bnRlciAmPSB+bWFzazsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY0LDcgKzY0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgfD0gbWFzazsKKwl2LT5jb3VudGVyIHw9IG1hc2s7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKaW5kZXggMWQyZmMwYi4uZDgzMjhiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLWxsc2MuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19BU01fU0hfQklUT1BTX0xMU0NfSAogI2RlZmluZSBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTEzLDE2ICsxMywxNiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKIAkJIm1vdmxpLmwJQCUxLCAlMAkhIHNldF9iaXQJCVxuXHQiCi0JCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJvcgkJJTIsICUwCQkJCVxuXHQiCiAJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKIAkJImJmCQkxYgkJCQlcblx0IgotCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAiPSZ6IiAodG1wKQorCQk6ICJyIiAoYSksICJyIiAobWFzaykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTM0LDE2ICszNCwxNiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIjE6CQkJCQkJXG5cdCIKIAkJIm1vdmxpLmwJQCUxLCAlMAkhIGNsZWFyX2JpdAkJXG5cdCIKLQkJImFuZAkJJTMsICUwCQkJCVxuXHQiCisJCSJhbmQJCSUyLCAlMAkJCQlcblx0IgogCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKLQkJOiAiMSIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICI9JnoiICh0bXApCisJCTogInIiIChhKSwgInIiICh+bWFzaykKIAkJOiAidCIsICJtZW1vcnkiCiAJKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKIHsKIAlpbnQJbWFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtNTUsODYgKzU1LDg2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgogCQkibW92bGkubAlAJTEsICUwCSEgY2hhbmdlX2JpdAkJXG5cdCIKKwkJInhvcgkJJTIsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApCisJCTogInIiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB0ZXN0X2FuZF9zZXRfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgorCQkib3IJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTMsICUxCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgorCQkibW92CQklMCwgJTEJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklMywgJTEJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spLCAiciIgKH5tYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQJbWFzaywgcmV0dmFsOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMiwgJTAJISB0ZXN0X2FuZF9jaGFuZ2VfYml0CVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCQlcblx0IgogCQkieG9yCQklMywgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKLQkJOiAiMSIgKGEpLCAiciIgKG1hc2spCi0JCTogInQiLCAibWVtb3J5IgotCSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLQlpbnQJbWFzaywgcmV0dmFsOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlhICs9IG5yID4+IDU7Ci0JbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIxOgkJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB0ZXN0X2FuZF9zZXRfYml0CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkib3IJCSU0LCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCi0JCSJiZgkJMWIJCQkJXG5cdCIKLQkJImFuZAkJJTQsICUyCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKLQkJOiAidCIsICJtZW1vcnkiCi0JKTsKLQotCXJldHVybiByZXR2YWwgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0JaW50CW1hc2ssIHJldHZhbDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYSArPSBuciA+PiA1OwotCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfY2xlYXJfYml0CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCQlcblx0IgotCQkiYW5kCQklNSwgJTAJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgotCQkiYmYJCTFiCQkJCVxuXHQiCi0JCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQkiYW5kCQklMywgJTEJCQkJXG5cdCIKIAkJInN5bmNvCQkJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKLQkJOiAidCIsICJtZW1vcnkiCi0JKTsKLQotCXJldHVybiByZXR2YWwgIT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQotewotCWludAltYXNrLCByZXR2YWw7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWEgKz0gbnIgPj4gNTsKLQltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjE6CQkJCQkJXG5cdCIKLQkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJ4b3IJCSU0LCAlMAkJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCi0JCSJiZgkJMWIJCQkJXG5cdCIKLQkJImFuZAkJJTQsICUyCQkJCVxuXHQiCi0JCSJzeW5jbwkJCQkJCVxuXHQiCi0JCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKGEpLCAiciIgKG1hc2spCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCBmOWM4ODU4Li4yZjZjOTYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0xNSw2ICsxNSw3IEBACiAJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBjbGsgKmNsayk7CiAJdm9pZCAoKnJlY2FsYykoc3RydWN0IGNsayAqY2xrKTsKIAlpbnQgKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKTsKKwlpbnQgKCpzZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCk7CiAJbG9uZyAoKnJvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oCmluZGV4IGFlZTNiZjIuLjBmYWMzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApAQCAtOCwxNCArOCwxNCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3UzMglcblx0IgotCQkibW92CQklMCwgJTIJCQlcblx0IgotCQkibW92CQklNCwgJTAJCQlcblx0IgotCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUyLCAlMAkhIHhjaGdfdTMyCVxuXHQiCisJCSJtb3YJCSUwLCAlMQkJCVxuXHQiCisJCSJtb3YJCSUzLCAlMAkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTIJCQlcblx0IgogCQkiYmYJCTFiCQkJXG5cdCIKIAkJInN5bmNvCQkJCQlcblx0IgotCQk6ICI9JnoiKHRtcCksICI9ciIgKG0pLCAiPSZyIiAocmV0dmFsKQotCQk6ICIxIiAobSksICJyIiAodmFsKQorCQk6ICI9JnoiKHRtcCksICI9JnIiIChyZXR2YWwpCisJCTogInIiIChtKSwgInIiICh2YWwpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKQEAgLTI5LDE0ICsyOSwxNCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCVxuXHQiCi0JCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3U4CVxuXHQiCi0JCSJtb3YJCSUwLCAlMgkJCVxuXHQiCi0JCSJtb3YJCSU0LCAlMAkJCVxuXHQiCi0JCSJtb3Zjby5sCSUwLCBAJTEJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgeGNoZ191OAlcblx0IgorCQkibW92CQklMCwgJTEJCQlcblx0IgorCQkibW92CQklMywgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJXG5cdCIKIAkJImJmCQkxYgkJCVxuXHQiCiAJCSJzeW5jbwkJCQkJXG5cdCIKLQkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKLQkJOiAiMSIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCisJCTogIj0meiIodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCiAJCTogInQiLCAibWVtb3J5IgogCSk7CiAKQEAgLTUxLDE3ICs1MSwxNyBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiMToJCQkJCQlcblx0IgotCQkibW92bGkubAlAJTEsICUwCSEgX19jbXB4Y2hnX3UzMgkJXG5cdCIKLQkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCi0JCSJjbXAvZXEJCSUyLCAlNAkJCQlcblx0IgorCQkibW92bGkubAlAJTIsICUwCSEgX19jbXB4Y2hnX3UzMgkJXG5cdCIKKwkJIm1vdgkJJTAsICUxCQkJCVxuXHQiCisJCSJjbXAvZXEJCSUxLCAlMwkJCQlcblx0IgogCQkiYmYJCTJmCQkJCVxuXHQiCi0JCSJtb3YJCSU1LCAlMAkJCQlcblx0IgorCQkibW92CQklMywgJTAJCQkJXG5cdCIKIAkJIjI6CQkJCQkJXG5cdCIKLQkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUyCQkJCVxuXHQiCiAJCSJiZgkJMWIJCQkJXG5cdCIKIAkJInN5bmNvCQkJCQkJXG5cdCIKLQkJOiAiPSZ6IiAodG1wKSwgIj1yIiAobSksICI9JnIiIChyZXR2YWwpCi0JCTogIjEiIChtKSwgInIiIChvbGQpLCAiciIgKG5ldykKKwkJOiAiPSZ6IiAodG1wKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiciIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQogCQk6ICJ0IiwgIm1lbW9yeSIKIAkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAppbmRleCA4NjMwOGFhLi42OTRhYmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKQEAgLTIxLDUgKzIxLDYgQEAKICNkZWZpbmUgQ1BVX0hBU19MTFNDCQkweDAwNDAJLyogbW92bGkubC9tb3Zjby5sICovCiAjZGVmaW5lIENQVV9IQVNfTDJfQ0FDSEUJMHgwMDgwCS8qIFNlY29uZGFyeSBjYWNoZSAvIFVSQU0gKi8KICNkZWZpbmUgQ1BVX0hBU19PUDMyCQkweDAxMDAJLyogMzItYml0IGluc3RydWN0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ1BVX0hBU19QVEVBRVgJCTB4MDIwMAkvKiBQVEUgQVNJRCBFeHRlbnNpb24gc3VwcG9ydCAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfQ1BVX0ZFQVRVUkVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOGY4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgVGFrYXNoaSBZT1NISUkKKyAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fRE1BX1NIX0gKKyNkZWZpbmUgX19ETUFfU0hfSAorCisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGNwdS9kbWEuaD4KKworLyogRE1BT1IgY29udG9ybDogVGhlIERNQU9SIGFjY2VzcyBzaXplIGlzIGRpZmZlcmVudCBieSBDUFUuKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCXx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIFwKKyAgICAobiA/IGN0cmxfaW53KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorCTogY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIFwKKyAgICAobiA/IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKKyAgICA6IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorI2Vsc2UgLyogT3RoZXIgQ1BVICovCisjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIGN0cmxfaW53KFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpCisjZW5kaWYKKworc3RhdGljIGludCBkbXRlX2lycV9tYXBbXSBfX21heWJlX3VudXNlZCA9IHsKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA0KQorICAgIERNVEUwX0lSUSwKKyAgICBETVRFMF9JUlEgKyAxLAorICAgIERNVEUwX0lSUSArIDIsCisgICAgRE1URTBfSVJRICsgMywKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDYpCisgICAgRE1URTRfSVJRLAorICAgIERNVEU0X0lSUSArIDEsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA4KQorICAgIERNVEU2X0lSUSwKKyAgICBETVRFNl9JUlEgKyAxLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gMTIpCisgICAgRE1URThfSVJRLAorICAgIERNVEU5X0lSUSwKKyAgICBETVRFMTBfSVJRLAorICAgIERNVEUxMV9JUlEsCisjZW5kaWYKK307CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KKyNkZWZpbmUgUkVRX0wJMHgwMDAwMDAwMAorI2RlZmluZSBSRVFfRQkweDAwMDgwMDAwCisjZGVmaW5lIFJBQ0tfSAkweDAwMDAwMDAwCisjZGVmaW5lIFJBQ0tfTAkweDAwMDQwMDAwCisjZGVmaW5lIEFDS19SCTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNLX1cJMHgwMDAyMDAwMAorI2RlZmluZSBBQ0tfSAkweDAwMDAwMDAwCisjZGVmaW5lIEFDS19MCTB4MDAwMTAwMDAKKyNkZWZpbmUgRE1fSU5DCTB4MDAwMDQwMDAKKyNkZWZpbmUgRE1fREVDCTB4MDAwMDgwMDAKKyNkZWZpbmUgU01fSU5DCTB4MDAwMDEwMDAKKyNkZWZpbmUgU01fREVDCTB4MDAwMDIwMDAKKyNkZWZpbmUgUlNfSU4JMHgwMDAwMDIwMAorI2RlZmluZSBSU19PVVQJMHgwMDAwMDMwMAorI2RlZmluZSBUU19CTEsJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVIJMHgwMDAwMDAyMAorI2RlZmluZSBDSENSX0RFIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0hDUl9URSAweDAwMDAwMDAyCisjZGVmaW5lIENIQ1JfSUUgMHgwMDAwMDAwNAorCisvKiBETUFPUiBkZWZpbml0aW9ucyAqLworI2RlZmluZSBETUFPUl9BRQkweDAwMDAwMDA0CisjZGVmaW5lIERNQU9SX05NSUYJMHgwMDAwMDAwMgorI2RlZmluZSBETUFPUl9ETUUJMHgwMDAwMDAwMQorCisvKgorICogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgorICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCisgKi8KKyNkZWZpbmUgUlNfRFVBTAkoRE1fSU5DIHwgU01fSU5DIHwgMHg0MDAgfCBUU18zMikKKworLyogRE1BIGJhc2UgYWRkcmVzcyAqLworc3RhdGljIHUzMiBkbWFfYmFzZV9hZGRyW10gX19tYXliZV91bnVzZWQgPSB7CisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gNCkKKwlTSF9ETUFDX0JBU0UwICsgMHgwMCwJLyogY2hhbm5lbCAwICovCisJU0hfRE1BQ19CQVNFMCArIDB4MTAsCisJU0hfRE1BQ19CQVNFMCArIDB4MjAsCisJU0hfRE1BQ19CQVNFMCArIDB4MzAsCisjZW5kaWYKKyNpZiAoTUFYX0RNQV9DSEFOTkVMUyA+PSA2KQorCVNIX0RNQUNfQkFTRTAgKyAweDUwLAorCVNIX0RNQUNfQkFTRTAgKyAweDYwLAorI2VuZGlmCisjaWYgKE1BWF9ETUFfQ0hBTk5FTFMgPj0gOCkKKwlTSF9ETUFDX0JBU0UxICsgMHgwMCwKKwlTSF9ETUFDX0JBU0UxICsgMHgxMCwKKyNlbmRpZgorI2lmIChNQVhfRE1BX0NIQU5ORUxTID49IDEyKQorCVNIX0RNQUNfQkFTRTEgKyAweDIwLAorCVNIX0RNQUNfQkFTRTEgKyAweDMwLAorCVNIX0RNQUNfQkFTRTEgKyAweDUwLAorCVNIX0RNQUNfQkFTRTEgKyAweDYwLCAvKiBjaGFubmVsIDExICovCisjZW5kaWYKK307CisKKy8qIERNQSByZWdpc3RlciAqLworI2RlZmluZSBTQVIgICAgIDB4MDAKKyNkZWZpbmUgREFSICAgICAweDA0CisjZGVmaW5lIFRDUiAgICAgMHgwOAorI2RlZmluZSBDSENSICAgIDB4MEMKKyNkZWZpbmUgRE1BT1IJMHg0MAorCisjZW5kaWYgLyogX19ETUFfU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggYmVjYTcxMi4uNmJkMTc4NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0yNSw5ICsyNSw5IEBACiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUKzB4MTAwMDAwMDApCiAKICNpZmRlZiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTCi0jICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkoQ09ORklHX05SX0RNQV9DSEFOTkVMUykKKyMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCiAjZWxzZQotIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgICAoQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFMpCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3Jvcy5TCmluZGV4IDJkYWIwYjguLjNhNDc1MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZW50cnktbWFjcm9zLlMKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyb3MuUwpAQCAtMzEsMyArMzEsOCBAQAogI2VuZGlmCQogCS5lbmRtCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyMgZGVmaW5lIFBSRUYoeCkJcHJlZglAeAorI2Vsc2UKKyMgZGVmaW5lIFBSRUYoeCkJbm9wCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmgKaW5kZXggOTA2NzM2NS4uNjFmOTNkYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTE5LDggKzE5LDQyIEBACiAjaW5jbHVkZSA8Y3B1L2dwaW8uaD4KICNlbmRpZgogCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MgNTEyCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2dldF92YWx1ZShncGlvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJV0FSTl9PTigxKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlXQVJOX09OKDEpOworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogQ09ORklHX0dQSU9MSUIgKi8KKwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZW51bV90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHBpbm11eF9mbGFnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpbm11eF9mbGFnX3Q7CiAKICNkZWZpbmUgUElOTVVYX1RZUEVfTk9ORSAgICAgICAgICAgIDAKICNkZWZpbmUgUElOTVVYX1RZUEVfRlVOQ1RJT04gICAgICAgIDEKQEAgLTM0LDYgKzY4LDExIEBACiAjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTFVQICAgICAoMSA8PCAzKQogI2RlZmluZSBQSU5NVVhfRkxBR19XQU5UX1BVTExET1dOICAgKDEgPDwgNCkKIAorI2RlZmluZSBQSU5NVVhfRkxBR19EQklUX1NISUZUICAgICAgNQorI2RlZmluZSBQSU5NVVhfRkxBR19EQklUICAgICAgICAgICAgKDB4MWYgPDwgUElOTVVYX0ZMQUdfREJJVF9TSElGVCkKKyNkZWZpbmUgUElOTVVYX0ZMQUdfRFJFR19TSElGVCAgICAgIDEwCisjZGVmaW5lIFBJTk1VWF9GTEFHX0RSRUcgICAgICAgICAgICAoMHgzZiA8PCBQSU5NVVhfRkxBR19EUkVHX1NISUZUKQorCiBzdHJ1Y3QgcGlubXV4X2dwaW8gewogCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKIAlwaW5tdXhfZmxhZ190IGZsYWdzOwpAQCAtNTQsNyArOTMsNyBAQAogCS5lbnVtX2lkcyA9IChwaW5tdXhfZW51bV90IFsocl93aWR0aCAvIGZfd2lkdGgpICogKDEgPDwgZl93aWR0aCldKSBcCiAKIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgewotCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGg7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgcmVnX3NoYWRvdzsKIAlwaW5tdXhfZW51bV90ICplbnVtX2lkczsKIH07CiAKQEAgLTg5LDM0ICsxMjgsOSBAQAogCXVuc2lnbmVkIGludCBncGlvX2RhdGFfc2l6ZTsKIAogCXVuc2lnbmVkIGxvbmcgKmdwaW9faW5fdXNlOworCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKIH07CiAKIGludCByZWdpc3Rlcl9waW5tdXgoc3RydWN0IHBpbm11eF9pbmZvICpwaXApOwogCi1pbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3Bpbyk7Ci1zdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JcmV0dXJuIF9fZ3Bpb19yZXF1ZXN0KGdwaW8pOwotfQotdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLS8qIElSUSBtb2RlcyBhcmUgdW5zcHBvcnRlZCAqLwotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlXQVJOX09OKDEpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JV0FSTl9PTigxKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KLQogI2VuZGlmIC8qIF9fQVNNX1NIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9oZDY0NDYxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaAppbmRleCA4YzEzNTNiLi41MmI0YjYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2hkNjQ0NjEuaApAQCAtMjQyLDcgKzI0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KIAogLyogYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMgKi8KLWludCBoZDY0NDYxX2lycV9kZW11eChpbnQgaXJxKTsKIHZvaWQgaGQ2NDQ2MV9yZWdpc3Rlcl9pcnFfZGVtdXgoaW50IGlycSwKIAkJCQlpbnQgKCpkZW11eCkgKGludCBpcnEsIHZvaWQgKmRldiksIHZvaWQgKmRldik7CiB2b2lkIGhkNjQ0NjFfdW5yZWdpc3Rlcl9pcnFfZGVtdXgoaW50IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNjFmNmRhZS4uMDQ1NGY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaApAQCAtMjM4LDcgKzIzOCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCiBfX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotI2lmZGVmIENPTkZJR19TVVBFUkgzMgorI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDMyKSAmJiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7CiAjZW5kaWYKIAl2b2lkIF9faW9tZW0gKnJldDsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIAkvKgogCSAqIEZvciBQMSBhbmQgUDIgc3BhY2UgdGhpcyBpcyB0cml2aWFsLCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkKIAkgKiBtYXBwZWQuIFVuY2FjaGVkIGFjY2VzcyBmb3IgUDEgYWRkcmVzc2VzIGFyZSBkb25lIHRocm91Z2ggUDIuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCmluZGV4IDYwNzhkOGUuLjYxMzY0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0xNiw3ICsxNiw3IEBACiAJPyAoTUFYX1NUQUNLX1NJWkUpIFwKIAk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKIAotI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKQkJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUoX3JlZ3MpCQkoKF9yZWdzKS0+cmVnc1swXSkKICNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZQkwCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA1ZDkxNTdiLi4yYTljNTVmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xOSwxMyArMTksMTggQEAKICAqICAgIChhKSBUTEIgY2FjaGUgdmVyc2lvbiAob3Igcm91bmQsIGN5Y2xlIHdoYXRldmVyIGV4cHJlc3Npb24geW91IGxpa2UpCiAgKiAgICAoYikgQVNJRCAoQWRkcmVzcyBTcGFjZSBJRGVudGlmaWVyKQogICovCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQUVYCisjZGVmaW5lIE1NVV9DT05URVhUX0FTSURfTUFTSwkJMHgwMDAwZmZmZgorI2Vsc2UKICNkZWZpbmUgTU1VX0NPTlRFWFRfQVNJRF9NQVNLCQkweDAwMDAwMGZmCi0jZGVmaW5lIE1NVV9DT05URVhUX1ZFUlNJT05fTUFTSwkweGZmZmZmZjAwCi0jZGVmaW5lIE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04JMHgwMDAwMDEwMAotI2RlZmluZSBOT19DT05URVhUCQkJMFVMCisjZW5kaWYKIAotLyogQVNJRCBpcyA4LWJpdCB2YWx1ZSwgc28gaXQgY2FuJ3QgYmUgMHgxMDAgKi8KLSNkZWZpbmUgTU1VX05PX0FTSUQJCQkweDEwMAorI2RlZmluZSBNTVVfQ09OVEVYVF9WRVJTSU9OX01BU0sJKH4wVUwgJiB+TU1VX0NPTlRFWFRfQVNJRF9NQVNLKQorI2RlZmluZSBNTVVfQ09OVEVYVF9GSVJTVF9WRVJTSU9OCShNTVVfQ09OVEVYVF9BU0lEX01BU0sgKyAxKQorCisvKiBJbXBvc3NpYmxlIEFTSUQgdmFsdWUsIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBOT19DT05URVhULiAqLworI2RlZmluZSBNTVVfTk9fQVNJRAkJCU1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT04KKyNkZWZpbmUgTk9fQ09OVEVYVAkJCTBVTAogCiAjZGVmaW5lIGFzaWRfY2FjaGUoY3B1KQkJKGNwdV9kYXRhW2NwdV0uYXNpZF9jYWNoZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCmluZGV4IGY0ZjlhZWIuLjhlZjgwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKQEAgLTEwLDYgKzEwLDE3IEBACiAJLyogRG8gbm90aGluZyAqLwogfQogCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQUVYCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FzaWQodW5zaWduZWQgbG9uZyBhc2lkKQoreworCV9fcmF3X3dyaXRlbChhc2lkLCBNTVVfUFRFQUVYKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9hc2lkKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE1NVV9QVEVBRVgpICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLOworfQorI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXNpZCh1bnNpZ25lZCBsb25nIGFzaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBfX2R1bW15OwpAQCAtMzMsNiArNDQsNyBAQAogCWFzaWQgJj0gTU1VX0NPTlRFWFRfQVNJRF9NQVNLOwogCXJldHVybiBhc2lkOwogfQorI2VuZGlmIC8qIENPTkZJR19DUFVfSEFTX1BURUFFWCAqLwogCiAvKiBNTVVfVFRCIGlzIHVzZWQgZm9yIG9wdGltaXppbmcgdGhlIGZhdWx0IGhhbmRsaW5nLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHNldF9UVEIocGdkX3QgKnBnZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNTg3MWQ3OC4uOWM2ZDIxZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEyOSw3ICsxMjksMTIgQEAKICAqIGlzIG5vdCB2aXNpYmxlIChpdCBpcyBwYXJ0IG9mIHRoZSBQTUIgbWFwcGluZykgYW5kIHNvIG5lZWRzIHRvIGJlCiAgKiBhZGRlZCBvciBzdWJ0cmFjdGVkIGFzIHJlcXVpcmVkLgogICovCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWYgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQorLyogcGh5cyA9IHZpcnQgLSBQQUdFX09GRlNFVCAtIChfX01FTU9SWV9TVEFSVCAmIDB4ZTAwMDAwMDApICovCisjZGVmaW5lIFBNQl9PRkZTRVQJKFBBR0VfT0ZGU0VUIC0gUFhTRUcoX19NRU1PUllfU1RBUlQpKQorI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCkgLSBQTUJfT0ZGU0VUKQorI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBQTUJfT0ZGU0VUKSkKKyNlbGlmIGRlZmluZWQoQ09ORklHXzMyQklUKQogI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCktUEFHRV9PRkZTRVQrX19NRU1PUllfU1RBUlQpCiAjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVC1fX01FTU9SWV9TVEFSVCkpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMWVmNGIyNC4uMWZkNThiNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMSw3ICszMSw3IEBACiAJQ1BVX1NINzc2MCwgQ1BVX1NINF8yMDIsIENQVV9TSDRfNTAxLAogCiAJLyogU0gtNEEgdHlwZXMgKi8KLQlDUFVfU0g3NzYzLCBDUFVfU0g3NzcwLCBDUFVfU0g3NzgwLCBDUFVfU0g3NzgxLCBDUFVfU0g3Nzg1LAorCUNQVV9TSDc3NjMsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsIENQVV9TSDc3ODUsIENQVV9TSDc3ODYsCiAJQ1BVX1NINzcyMywgQ1BVX1NIWDMsCiAKIAkvKiBTSDRBTC1EU1AgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCmluZGV4IGQ3OTA2M2MuLmVmZGQ3OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaApAQCAtMTA4LDEyICsxMDgsMTIgQEAKIC8qCiAgKiBEbyBuZWNlc3Nhcnkgc2V0dXAgdG8gc3RhcnQgdXAgYSBuZXdseSBleGVjdXRlZCB0aHJlYWQuCiAgKi8KLSNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAorI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAogCXNldF9mcyhVU0VSX0RTKTsJCQkgXAotCXJlZ3MtPnByID0gMDsJCQkJIFwKLQlyZWdzLT5zciA9IFNSX0ZEOwkvKiBVc2VyIG1vZGUuICovIFwKLQlyZWdzLT5wYyA9IG5ld19wYzsJCQkgXAotCXJlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCisJX3JlZ3MtPnByID0gMDsJCQkJIFwKKwlfcmVncy0+c3IgPSBTUl9GRDsJLyogVXNlciBtb2RlLiAqLyBcCisJX3JlZ3MtPnBjID0gbmV3X3BjOwkJCSBcCisJX3JlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CkBAIC0xODksMTAgKzE4OSw5IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+cGMpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICh0YXNrX3B0X3JlZ3ModHNrKS0+cmVnc1sxNV0pCiAKLSNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgocmVncyktPnJlZ3NbMTVdKQorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIoX3JlZ3MpCSgoX3JlZ3MpLT5yZWdzWzE1XSkKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDJBKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKICNkZWZpbmUgUFJFRkVUQ0hfU1RSSURFCQlMMV9DQUNIRV9CWVRFUwogI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSAogI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDgwMzE3N2YuLjU3MjdkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtMTQ1LDEzICsxNDUsMTMgQEAKICAqLwogI2RlZmluZSBTUl9VU0VSIChTUl9NTVUgfCBTUl9GRCkKIAotI2RlZmluZSBzdGFydF90aHJlYWQocmVncywgbmV3X3BjLCBuZXdfc3ApCQkJXAorI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkJCVwKIAlzZXRfZnMoVVNFUl9EUyk7CQkJCQlcCi0JcmVncy0+c3IgPSBTUl9VU0VSOwkvKiBVc2VyIG1vZGUuICovCQlcCi0JcmVncy0+cGMgPSBuZXdfcGMgLSA0OwkvKiBDb21wZW5zYXRlIHN5c2NhbGwgZXhpdCAqLwlcCi0JcmVncy0+cGMgfD0gMTsJCS8qIFNldCBTSG1lZGlhICEgKi8JCVwKLQlyZWdzLT5yZWdzWzE4XSA9IDA7CQkJCQlcCi0JcmVncy0+cmVnc1sxNV0gPSBuZXdfc3AKKwlfcmVncy0+c3IgPSBTUl9VU0VSOwkvKiBVc2VyIG1vZGUuICovCQlcCisJX3JlZ3MtPnBjID0gbmV3X3BjIC0gNDsJLyogQ29tcGVuc2F0ZSBzeXNjYWxsIGV4aXQgKi8JXAorCV9yZWdzLT5wYyB8PSAxOwkJLyogU2V0IFNIbWVkaWEgISAqLwkJXAorCV9yZWdzLT5yZWdzWzE4XSA9IDA7CQkJCQlcCisJX3JlZ3MtPnJlZ3NbMTVdID0gbmV3X3NwCiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24sIGEgc3RyYW5nZSBDIHRoaW5nICovCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CkBAIC0yMjYsNyArMjI2LDcgQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKCh0c2spLT50aHJlYWQucGMpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLnNwKQogCi0jZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5yZWdzWzE1XSkKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKF9yZWdzKQkoKF9yZWdzKS0+cmVnc1sxNV0pCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9QUk9DRVNTT1JfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMTI5MTJhYi4uODFjNjU2OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMjIsMTQgKzEyMiwxMiBAQAogI2lmZGVmIENPTkZJR19TSF9EU1AKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSkgLSAxKQogI2RlZmluZSB0YXNrX3B0X2RzcHJlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X2RzcHJlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKICNlbHNlCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSkgLSAxKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDhmOGY0YWQuLjAxYTQwNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogCitleHRlcm4gdm9pZCBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwogZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogZXh0ZXJuIGNoYXIgX191bmNhY2hlZF9zdGFydCwgX191bmNhY2hlZF9lbmQ7CiBleHRlcm4gY2hhciBfZWJzc1tdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNmQ0YmY2NS4uMzQ1NjUzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX19BU01fU0hfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiOTk1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9TSF9TVVNQRU5EX0gKKyNkZWZpbmUgX0FTTV9TSF9TVVNQRU5EX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcHJlcGFyZV9zdXNwZW5kKHZvaWQpIHsgcmV0dXJuIDA7IH0KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3MgeworCXN0cnVjdCBwdF9yZWdzIHVzZXJfcmVnczsKKwl1bnNpZ25lZCBsb25nIGJhbmsxX3JlZ3NbOF07Cit9OworI2VuZGlmCisKKy8qIGZsYWdzIHBhc3NlZCB0byBhc3NlbWJseSBzdXNwZW5kIGNvZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TTEVFUAkJKDEgPDwgMCkgLyogUmVndWxhciBzbGVlcCBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU1RBTkRCWQkJKDEgPDwgMSkgLyogU0gtTW9iaWxlIFNvZnR3YXJlIHN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1JTVEFOREJZCSgxIDw8IDIpIC8qIFNILU1vYmlsZSBSLXN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1VTVEFOREJZCSgxIDw8IDMpIC8qIFNILU1vYmlsZSBVLXN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1NGCQkoMSA8PCA0KSAvKiBFbmFibGUgc2VsZi1yZWZyZXNoICovCisKKyNlbmRpZiAvKiBfQVNNX1NIX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oCmluZGV4IGE3Y2EzYTEuLjRjM2I2NmUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oCkBAIC05LDcgKzksNiBAQAogCWludCAoKmluaXQpKHZvaWQpOwogCWludCAoKnN0YXJ0KSh2b2lkKTsKIAlpbnQgKCpzdG9wKSh2b2lkKTsKLQljeWNsZV90ICgqcmVhZCkodm9pZCk7CiAjaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIAl1bnNpZ25lZCBsb25nICgqZ2V0X29mZnNldCkodm9pZCk7CiAjZW5kaWYKQEAgLTM5LDYgKzM4LDcgQEAKIAogLyogYXJjaC9zaC9rZXJuZWwvdGltZS5jICovCiB2b2lkIGhhbmRsZV90aW1lcl90aWNrKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hfaHB0X2ZyZXF1ZW5jeTsKKworZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaDsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg4ZmYxYWUuLjljMTZmNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaApAQCAtNiwyMiArNiwxMDYgQEAKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAotI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBcCi0JZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCkKLQotI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJXAotCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKQotCi0jZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKyNpZmRlZiBDT05GSUdfTU1VCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogLyoKLSAqIEZsdXNoIHdob2xlIFRMQnMgZm9yIE1NCisgKiBUTEIgaGFuZGxpbmcuICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgcGFnZXMgZnJvbSB0aGUgcGFnZQorICogdGFibGVzLCBhbmQgZWZmaWNpZW50bHkgaGFuZGxlIHRoZSBUTEIgaXNzdWVzLgogICovCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQkJCWZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCitzdHJ1Y3QgbW11X2dhdGhlciB7CisJc3RydWN0IG1tX3N0cnVjdAkqbW07CisJdW5zaWduZWQgaW50CQlmdWxsbW07CisJdW5zaWduZWQgbG9uZwkJc3RhcnQsIGVuZDsKK307CiAKLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGxiX2dhdGhlcihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCXRsYi0+c3RhcnQgPSBUQVNLX1NJWkU7CisJdGxiLT5lbmQgPSAwOworCisJaWYgKHRsYi0+ZnVsbG1tKSB7CisJCXRsYi0+c3RhcnQgPSAwOworCQl0bGItPmVuZCA9IFRBU0tfU0laRTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgordGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQoreworCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSAmZ2V0X2NwdV92YXIobW11X2dhdGhlcnMpOworCisJdGxiLT5tbSA9IG1tOworCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKworCWluaXRfdGxiX2dhdGhlcih0bGIpOworCisJcmV0dXJuIHRsYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfZmluaXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodGxiLT5mdWxsbW0pCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKworCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLworCWNoZWNrX3BndF9jYWNoZSgpOworCisJcHV0X2NwdV92YXIobW11X2dhdGhlcnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaWYgKHRsYi0+c3RhcnQgPiBhZGRyZXNzKQorCQl0bGItPnN0YXJ0ID0gYWRkcmVzczsKKwlpZiAodGxiLT5lbmQgPCBhZGRyZXNzICsgUEFHRV9TSVpFKQorCQl0bGItPmVuZCA9IGFkZHJlc3MgKyBQQUdFX1NJWkU7Cit9CisKKy8qCisgKiBJbiB0aGUgY2FzZSBvZiB0bGIgdm1hIGhhbmRsaW5nLCB3ZSBjYW4gb3B0aW1pc2UgdGhlc2UgYXdheSBpbiB0aGUKKyAqIGNhc2Ugd2hlcmUgd2UncmUgZG9pbmcgYSBmdWxsIE1NIGZsdXNoLiAgV2hlbiB3ZSdyZSBkb2luZyBhIG11bm1hcCwKKyAqIHRoZSB2bWFzIGFyZSBhZGp1c3RlZCB0byBvbmx5IGNvdmVyIHRoZSByZWdpb24gdG8gYmUgdG9ybiBkb3duLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9zdGFydF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKCF0bGItPmZ1bGxtbSkKKwkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPmVuZCkgeworCQlmbHVzaF90bGJfcmFuZ2Uodm1hLCB0bGItPnN0YXJ0LCB0bGItPmVuZCk7CisJCWluaXRfdGxiX2dhdGhlcih0bGIpOworCX0KK30KKworI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQorI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwKQkJcHRlX2ZyZWUoKHRsYiktPm1tLCBwdGVwKQorI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwKQkJcG1kX2ZyZWUoKHRsYiktPm1tLCBwbWRwKQorI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLCBwdWRwKQkJcHVkX2ZyZWUoKHRsYiktPm1tLCBwdWRwKQorCisjZGVmaW5lIHRsYl9taWdyYXRlX2ZpbmlzaChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogQ09ORklHX01NVSAqLworCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZmx1c2godGxiKQkJCQkJZG8geyB9IHdoaWxlICgwKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fU0hfVExCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAppbmRleCA2ODEzYzMyLi4wZWExNWYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCkBAIC0xLDIyICsxLDE3IEBACiAjaWZuZGVmIF9fQVNNX0NQVV9TSDNfRE1BX0gKICNkZWZpbmUgX19BU01fQ1BVX1NIM19ETUFfSAogCi0KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGE0MDEwMDIwCi0jZWxzZQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhhNDAwMDAyMAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGE0MDEwMDIwCisjZWxzZSAvKiBTSDc3MDUvMDYvMDcvMDkgKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGE0MDAwMDIwCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQogI2RlZmluZSBETVRFMF9JUlEJNDgKLSNkZWZpbmUgRE1URTFfSVJRCTQ5Ci0jZGVmaW5lIERNVEUyX0lSUQk1MAotI2RlZmluZSBETVRFM19JUlEJNTEKICNkZWZpbmUgRE1URTRfSVJRCTc2Ci0jZGVmaW5lIERNVEU1X0lSUQk3NwotI2VuZGlmCiAKIC8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KICNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDAyMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQ1MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAorI2RlZmluZSBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzMwKQorI2RlZmluZSBETVRFMF9JUlEJNDgKKyNkZWZpbmUgRE1URTRfSVJRCTc2CisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRTAwOTAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzY0KQorI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNQUUwX0lSUQkzOAorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkY2MDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZGNjA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCisjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLworI2RlZmluZSBETVRFNF9JUlEJNDAJLyogRE1BQzBCICovCisjZGVmaW5lIERNVEU2X0lSUQk0MgorI2RlZmluZSBETVRFOF9JUlEJNzYJLyogRE1BQzFBICovCisjZGVmaW5lIERNVEU5X0lSUQk3NworI2RlZmluZSBETVRFMTBfSVJRCTcyCS8qIERNQUMxQiAqLworI2RlZmluZSBETVRFMTFfSVJRCTczCisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgRE1BRTFfSVJRCTc0CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZEQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGREMwOTAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQorI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNVEU2X0lSUQk0NgorI2RlZmluZSBETVRFOF9JUlEJOTIKKyNkZWZpbmUgRE1URTlfSVJRCTkzCisjZGVmaW5lIERNVEUxMF9JUlEJOTQKKyNkZWZpbmUgRE1URTExX0lSUQk5NQorI2RlZmluZSBETUFFMF9JUlEJMzgJLyogRE1BIEVycm9yIElSUSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDODE4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2Vsc2UgLyogU0g3Nzg1ICovCisjZGVmaW5lIERNVEUwX0lSUQkzMworI2RlZmluZSBETVRFNF9JUlEJMzcKKyNkZWZpbmUgRE1URTZfSVJRCTUyCisjZGVmaW5lIERNVEU4X0lSUQk1NAorI2RlZmluZSBETVRFOV9JUlEJNTUKKyNkZWZpbmUgRE1URTEwX0lSUQk1NgorI2RlZmluZSBETVRFMTFfSVJRCTU3CisjZGVmaW5lIERNQUUwX0lSUQkzOQkvKiBETUEgRXJyb3IgSVJRMCAqLworI2RlZmluZSBETUFFMV9JUlEJNTgJLyogRE1BIEVycm9yIElSUTEgKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQ0MwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNlbmRpZgorCisjZGVmaW5lIFJFUV9IRQkweDAwMDAwMEMwCisjZGVmaW5lIFJFUV9ICTB4MDAwMDAwODAKKyNkZWZpbmUgUkVRX0xFCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1fQlVSU1QgMHgwMDAwMDIwCisjZGVmaW5lIFRTXzgJMHgwMDAwMDAwMAorI2RlZmluZSBUU18xNgkweDAwMDAwMDA4CisjZGVmaW5lIFRTXzMyCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFNfMTZCTEsJMHgwMDAwMDAxOAorI2RlZmluZSBUU18zMkJMSwkweDAwMTAwMDAwCisKKy8qCisgKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAorICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCisgKgorICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KKyAqLworZW51bSB7CisJWE1JVF9TWl84QklULAorCVhNSVRfU1pfMTZCSVQsCisJWE1JVF9TWl8zMkJJVCwKKwlYTUlUX1NaXzEyOEJJVCwKKwlYTUlUX1NaXzI1NkJJVCwKK307CisKKy8qCisgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0geworCVtYTUlUX1NaXzhCSVRdCQk9IDAsCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCit9OworCisjZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNzc4MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI0MjZhLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICi0jZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICi0KLSNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKLSNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAotI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAotI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKLSNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCi0jZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKLSNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAotI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4Ci0jZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKLQotLyoKLSAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCi0gKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KLSAqCi0gKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgotICovCi1lbnVtIHsKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMTI4QklULAotCVhNSVRfU1pfMjU2QklULAotfTsKLQotLyoKLSAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7Ci0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCmluZGV4IDIzNWI3Y2QuLmJjYjMwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKQEAgLTEsMzEgKzEsMjkgQEAKICNpZm5kZWYgX19BU01fQ1BVX1NINF9ETUFfSAogI2RlZmluZSBfX0FTTV9DUFVfU0g0X0RNQV9ICiAKLSNkZWZpbmUgRE1BT1JfSU5JVAkoIDB4ODAwMCB8IERNQU9SX0RNRSApCi0KIC8qIFNINzc1MS83NzYwLzc3ODAgRE1BIElSUSBzb3VyY2VzICovCi0jZGVmaW5lIERNVEUwX0lSUQkzNAotI2RlZmluZSBETVRFMV9JUlEJMzUKLSNkZWZpbmUgRE1URTJfSVJRCTM2Ci0jZGVmaW5lIERNVEUzX0lSUQkzNwotI2RlZmluZSBETVRFNF9JUlEJNDQKLSNkZWZpbmUgRE1URTVfSVJRCTQ1Ci0jZGVmaW5lIERNVEU2X0lSUQk0NgotI2RlZmluZSBETVRFN19JUlEJNDcKLSNkZWZpbmUgRE1BRV9JUlEJMzgKIAogI2lmZGVmIENPTkZJR19DUFVfU0g0QQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmYzgwODAyMAogCisjZGVmaW5lIERNQU9SX0lOSVQJKERNQU9SX0RNRSkKICNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MTgKICNkZWZpbmUgQ0hDUl9UU19TSElGVAkzCiAKLSNpbmNsdWRlIDxjcHUvZG1hLXNoNzc4MC5oPgotI2Vsc2UKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4ZmZhMDAwMDAKKyNpbmNsdWRlIDxjcHUvZG1hLXNoNGEuaD4KKyNlbHNlIC8qIENPTkZJR19DUFVfU0g0QSAqLworLyoKKyAqIFNINzc1MC9TSDc3NTEvU0g3NzYwCisgKi8KKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEU0X0lSUQk0NAorI2RlZmluZSBETVRFNl9JUlEJNDYKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CiAKKyNkZWZpbmUgRE1BT1JfSU5JVAkoMHg4MDAwfERNQU9SX0RNRSkKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGZmYTAwMDAwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhmZmEwMDA3MAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwotI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwODAKKyNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDA4MAogI2RlZmluZSBUU184CQkweDAwMDAwMDEwCiAjZGVmaW5lIFRTXzE2CQkweDAwMDAwMDIwCiAjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDMwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaAppbmRleCBjMjNhZjgxLi43NDlkMWM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKQEAgLTI5LDYgKzI5LDEwIEBACiAjZGVmaW5lIEZSUUNSMAkJCTB4ZmZjODAwMDAKICNkZWZpbmUgRlJRQ1IxCQkJMHhmZmM4MDAwNAogI2RlZmluZSBGUlFNUjEJCQkweGZmYzgwMDE0CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCisjZGVmaW5lIEZSUUNSMAkJCTB4ZmZjNDAwMDAKKyNkZWZpbmUgRlJRQ1IxCQkJMHhmZmM0MDAwNAorI2RlZmluZSBGUlFNUjEJCQkweGZmYzQwMDE0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogI2RlZmluZSBGUlFDUgkJCTB4ZmZjMDAwMTQKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCmluZGV4IDllYThlYjIuLjNjZTdlZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCkBAIC0xNCwyOCArMTQsMzUgQEAKICNkZWZpbmUgTU1VX1BURUwJMHhGRjAwMDAwNAkvKiBQYWdlIHRhYmxlIGVudHJ5IHJlZ2lzdGVyIExPVyAqLwogI2RlZmluZSBNTVVfVFRCCQkweEZGMDAwMDA4CS8qIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTU1VX1RFQQkJMHhGRjAwMDAwQwkvKiBUTEIgRXhjZXB0aW9uIEFkZHJlc3MgKi8KLSNkZWZpbmUgTU1VX1BURUEJMHhGRjAwMDAzNAkvKiBQYWdlIHRhYmxlIGVudHJ5IGFzc2lzdGFuY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1VX1BURUEJMHhGRjAwMDAzNAkvKiBQVEUgYXNzaXN0YW5jZSByZWdpc3RlciAqLworI2RlZmluZSBNTVVfUFRFQUVYCTB4RkYwMDAwN0MJLyogUFRFIEFTSUQgZXh0ZW5zaW9uIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgTU1VQ1IJCTB4RkYwMDAwMTAJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgKi8KIAotI2RlZmluZSBNTVVfSVRMQl9BRERSRVNTX0FSUkFZCTB4RjIwMDAwMDAKICNkZWZpbmUgTU1VX1VUTEJfQUREUkVTU19BUlJBWQkweEY2MDAwMDAwCisjZGVmaW5lIE1NVV9VVExCX0FERFJFU1NfQVJSQVkyCTB4RjY4MDAwMDAKICNkZWZpbmUgTU1VX1BBR0VfQVNTT0NfQklUCTB4ODAKIAogI2RlZmluZSBNTVVDUl9USQkJKDE8PDIpCiAKLSNpZmRlZiBDT05GSUdfWDJUTEIKLSNkZWZpbmUgTU1VQ1JfTUUJCSgxIDw8IDcpCi0jZWxzZQotI2RlZmluZSBNTVVDUl9NRQkJKDApCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwKQogI2RlZmluZSBNTVVDUl9TRQkJKDEgPDwgNCkKICNlbHNlCiAjZGVmaW5lIE1NVUNSX1NFCQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQUVYCisjZGVmaW5lIE1NVUNSX0FFWAkJKDEgPDwgNikKKyNlbHNlCisjZGVmaW5lIE1NVUNSX0FFWAkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YMlRMQgorI2RlZmluZSBNTVVDUl9NRQkJKDEgPDwgNykKKyNlbHNlCisjZGVmaW5lIE1NVUNSX01FCQkoMCkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NIX1NUT1JFX1FVRVVFUwogI2RlZmluZSBNTVVDUl9TUU1ECQkoMSA8PCA5KQogI2Vsc2UKQEAgLTQzLDE3ICs1MCw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBNTVVfTlRMQl9FTlRSSUVTCTY0Ci0jZGVmaW5lIE1NVV9DT05UUk9MX0lOSVQJKDB4MDV8TU1VQ1JfU1FNRHxNTVVDUl9NRXxNTVVDUl9TRSkKLQotI2RlZmluZSBNTVVfSVRMQl9EQVRBX0FSUkFZCTB4RjMwMDAwMDAKLSNkZWZpbmUgTU1VX1VUTEJfREFUQV9BUlJBWQkweEY3MDAwMDAwCi0KLSNkZWZpbmUgTU1VX1VUTEJfRU5UUklFUwkgICA2NAotI2RlZmluZSBNTVVfVV9FTlRSWV9TSElGVAkgICAgOAotI2RlZmluZSBNTVVfVVRMQl9WQUxJRAkJMHgxMDAKLSNkZWZpbmUgTU1VX0lUTEJfRU5UUklFUwkgICAgNAotI2RlZmluZSBNTVVfSV9FTlRSWV9TSElGVAkgICAgOAotI2RlZmluZSBNTVVfSVRMQl9WQUxJRAkJMHgxMDAKKyNkZWZpbmUgTU1VX0NPTlRST0xfSU5JVAkoMHgwNXxNTVVDUl9TUU1EfE1NVUNSX01FfE1NVUNSX1NFfE1NVUNSX0FFWCkKIAogI2RlZmluZSBUUkEJMHhmZjAwMDAyMAogI2RlZmluZSBFWFBFVlQJMHhmZjAwMDAyNApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Njg4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBTSDc3ODYgUGlubXV4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqICBCYXNlZCBvbiBzaDc3ODUuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DUFVfU0g3Nzg2X0hfXworI2RlZmluZSBfX0NQVV9TSDc3ODZfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDNywgR1BJT19QQzYsIEdQSU9fUEM1LCBHUElPX1BDNCwKKwlHUElPX1BDMywgR1BJT19QQzIsIEdQSU9fUEMxLCBHUElPX1BDMCwKKworCS8qIFBEICovCisJR1BJT19QRDcsIEdQSU9fUEQ2LCBHUElPX1BENSwgR1BJT19QRDQsCisJR1BJT19QRDMsIEdQSU9fUEQyLCBHUElPX1BEMSwgR1BJT19QRDAsCisKKwkvKiBQRSAqLworCUdQSU9fUEU1LCBHUElPX1BFNCwgR1BJT19QRTMsIEdQSU9fUEUyLAorCUdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjcsIEdQSU9fUEY2LCBHUElPX1BGNSwgR1BJT19QRjQsCisJR1BJT19QRjMsIEdQSU9fUEYyLCBHUElPX1BGMSwgR1BJT19QRjAsCisKKwkvKiBQRyAqLworCUdQSU9fUEc3LCBHUElPX1BHNiwgR1BJT19QRzUsIEdQSU9fUEc0LAorCUdQSU9fUEczLCBHUElPX1BHMiwgR1BJT19QRzEsIEdQSU9fUEcwLAorCisJLyogUEggKi8KKwlHUElPX1BINywgR1BJT19QSDYsIEdQSU9fUEg1LCBHUElPX1BINCwKKwlHUElPX1BIMywgR1BJT19QSDIsIEdQSU9fUEgxLCBHUElPX1BIMCwKKworCS8qIFBKICovCisJR1BJT19QSjcsIEdQSU9fUEo2LCBHUElPX1BKNSwgR1BJT19QSjQsCisJR1BJT19QSjMsIEdQSU9fUEoyLCBHUElPX1BKMSwgR1BJT19QSjAsCisKKwlHUElPX0ZOX0NERSwKKwlHUElPX0ZOX0VUSF9NQUdJQywKKwlHUElPX0ZOX0RJU1AsCisJR1BJT19GTl9FVEhfTElOSywKKwlHUElPX0ZOX0RSNSwKKwlHUElPX0ZOX0VUSF9UWF9FUiwKKwlHUElPX0ZOX0RSNCwKKwlHUElPX0ZOX0VUSF9UWF9FTiwKKwlHUElPX0ZOX0RSMywKKwlHUElPX0ZOX0VUSF9UWEQzLAorCUdQSU9fRk5fRFIyLAorCUdQSU9fRk5fRVRIX1RYRDIsCisJR1BJT19GTl9EUjEsCisJR1BJT19GTl9FVEhfVFhEMSwKKwlHUElPX0ZOX0RSMCwKKwlHUElPX0ZOX0VUSF9UWEQwLAorCUdQSU9fRk5fVlNZTkMsCisJR1BJT19GTl9IU1BJX0NMSywKKwlHUElPX0ZOX09EREYsCisJR1BJT19GTl9IU1BJX0NTLAorCUdQSU9fRk5fREc1LAorCUdQSU9fRk5fRVRIX01ESU8sCisJR1BJT19GTl9ERzQsCisJR1BJT19GTl9FVEhfUlhfQ0xLLAorCUdQSU9fRk5fREczLAorCUdQSU9fRk5fRVRIX01EQywKKwlHUElPX0ZOX0RHMiwKKwlHUElPX0ZOX0VUSF9DT0wsCisJR1BJT19GTl9ERzEsCisJR1BJT19GTl9FVEhfVFhfQ0xLLAorCUdQSU9fRk5fREcwLAorCUdQSU9fRk5fRVRIX0NSUywKKwlHUElPX0ZOX0RDTEtJTiwKKwlHUElPX0ZOX0hTUElfUlgsCisJR1BJT19GTl9IU1lOQywKKwlHUElPX0ZOX0hTUElfVFgsCisJR1BJT19GTl9EQjUsCisJR1BJT19GTl9FVEhfUlhEMywKKwlHUElPX0ZOX0RCNCwKKwlHUElPX0ZOX0VUSF9SWEQyLAorCUdQSU9fRk5fREIzLAorCUdQSU9fRk5fRVRIX1JYRDEsCisJR1BJT19GTl9EQjIsCisJR1BJT19GTl9FVEhfUlhEMCwKKwlHUElPX0ZOX0RCMSwKKwlHUElPX0ZOX0VUSF9SWF9EViwKKwlHUElPX0ZOX0RCMCwKKwlHUElPX0ZOX0VUSF9SWF9FUiwKKwlHUElPX0ZOX0RDTEtPVVQsCisJR1BJT19GTl9TQ0lGMV9TTEssCisJR1BJT19GTl9TQ0lGMV9SWEQsCisJR1BJT19GTl9TQ0lGMV9UWEQsCisJR1BJT19GTl9EQUNLMSwKKwlHUElPX0ZOX0JBQ0ssCisJR1BJT19GTl9GQUxFLAorCUdQSU9fRk5fREFDSzAsCisJR1BJT19GTl9GQ0xFLAorCUdQSU9fRk5fRFJFUTEsCisJR1BJT19GTl9CUkVRLAorCUdQSU9fRk5fVVNCX09WQzEsCisJR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1VTQl9PVkMwLAorCUdQSU9fRk5fVVNCX1BFTkMxLAorCUdQSU9fRk5fVVNCX1BFTkMwLAorCUdQSU9fRk5fSEFDMV9TRE9VVCwKKwlHUElPX0ZOX1NTSTFfU0RBVEEsCisJR1BJT19GTl9TRElGMUNNRCwKKwlHUElPX0ZOX0hBQzFfU0RJTiwKKwlHUElPX0ZOX1NTSTFfU0NLLAorCUdQSU9fRk5fU0RJRjFDRCwKKwlHUElPX0ZOX0hBQzFfU1lOQywKKwlHUElPX0ZOX1NTSTFfV1MsCisJR1BJT19GTl9TRElGMVdQLAorCUdQSU9fRk5fSEFDMV9CSVRDTEssCisJR1BJT19GTl9TU0kxX0NMSywKKwlHUElPX0ZOX1NESUYxQ0xLLAorCUdQSU9fRk5fSEFDMF9TRE9VVCwKKwlHUElPX0ZOX1NTSTBfU0RBVEEsCisJR1BJT19GTl9TRElGMUQzLAorCUdQSU9fRk5fSEFDMF9TRElOLAorCUdQSU9fRk5fU1NJMF9TQ0ssCisJR1BJT19GTl9TRElGMUQyLAorCUdQSU9fRk5fSEFDMF9TWU5DLAorCUdQSU9fRk5fU1NJMF9XUywKKwlHUElPX0ZOX1NESUYxRDEsCisJR1BJT19GTl9IQUMwX0JJVENMSywKKwlHUElPX0ZOX1NTSTBfQ0xLLAorCUdQSU9fRk5fU0RJRjFEMCwKKwlHUElPX0ZOX1NDSUYzX1NDSywKKwlHUElPX0ZOX1NTSTJfU0RBVEEsCisJR1BJT19GTl9TQ0lGM19SWEQsCisJR1BJT19GTl9UQ0xLLAorCUdQSU9fRk5fU1NJMl9TQ0ssCisJR1BJT19GTl9TQ0lGM19UWEQsCisJR1BJT19GTl9IQUNfUkVTLAorCUdQSU9fRk5fU1NJMl9XUywKKwlHUElPX0ZOX0RBQ0szLAorCUdQSU9fRk5fU0RJRjBDTUQsCisJR1BJT19GTl9EQUNLMiwKKwlHUElPX0ZOX1NESUYwQ0QsCisJR1BJT19GTl9EUkVRMywKKwlHUElPX0ZOX1NESUYwV1AsCisJR1BJT19GTl9TQ0lGMF9DVFMsCisJR1BJT19GTl9EUkVRMiwKKwlHUElPX0ZOX1NESUYwQ0xLLAorCUdQSU9fRk5fU0NJRjBfUlRTLAorCUdQSU9fRk5fSVJMNywKKwlHUElPX0ZOX1NESUYwRDMsCisJR1BJT19GTl9TQ0lGMF9TQ0ssCisJR1BJT19GTl9JUkw2LAorCUdQSU9fRk5fU0RJRjBEMiwKKwlHUElPX0ZOX1NDSUYwX1JYRCwKKwlHUElPX0ZOX0lSTDUsCisJR1BJT19GTl9TRElGMEQxLAorCUdQSU9fRk5fU0NJRjBfVFhELAorCUdQSU9fRk5fSVJMNCwKKwlHUElPX0ZOX1NESUYwRDAsCisJR1BJT19GTl9TQ0lGNV9TQ0ssCisJR1BJT19GTl9GUkIsCisJR1BJT19GTl9TQ0lGNV9SWEQsCisJR1BJT19GTl9JT0lTMTYsCisJR1BJT19GTl9TQ0lGNV9UWEQsCisJR1BJT19GTl9DRTJCLAorCUdQSU9fRk5fRFJBSzMsCisJR1BJT19GTl9DRTJBLAorCUdQSU9fRk5fU0NJRjRfU0NLLAorCUdQSU9fRk5fRFJBSzIsCisJR1BJT19GTl9TU0kzX1dTLAorCUdQSU9fRk5fU0NJRjRfUlhELAorCUdQSU9fRk5fRFJBSzEsCisJR1BJT19GTl9TU0kzX1NEQVRBLAorCUdQSU9fRk5fRlNUQVRVUywKKwlHUElPX0ZOX1NDSUY0X1RYRCwKKwlHUElPX0ZOX0RSQUswLAorCUdQSU9fRk5fU1NJM19TQ0ssCisJR1BJT19GTl9GU0UsCit9OworCisjZW5kaWYgLyogX19DUFVfU0g3Nzg2X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdXJxdWVsbC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdXJxdWVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjNlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmgKQEAgLTAsMCArMSw2OCBAQAorI2lmbmRlZiBfX01BQ0hfVVJRVUVMTF9ICisjZGVmaW5lIF9fTUFDSF9VUlFVRUxMX0gKKworLyoKKyAqIC0tLS0tLSAweDAwMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTMCB8IChTVzEsU1c0NykgICAgRUVQUk9NLCBTUkFNLCBOT1IgRkxBU0gKKyAqIC0tLS0tKyAweDA0MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTMSB8IChTVzQ3KSAgICAgICAgU1JBTSwgU1JBTS1MQU4tUENNQ0lBLCBOT1IgRkxBU0gKKyAqIC0tLS0tKyAweDA4MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTMiB8ICAgICAgICAgICAgICAgRERSMworICogIENTMyB8CisgKiAtLS0tLSsgMHgxMDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzQgfCAgICAgICAgICAgICAgIFBDSWUKKyAqIC0tLS0tKyAweDE0MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNSB8IChTVzQ3KSAgICAgICAgTFJBTS9VUkFNLCBTUkFNLUxBTi1QQ01DSUEKKyAqIC0tLS0tKyAweDE4MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNiB8ICAgICAgICAgICAgICAgQVRBLCBOQU5EIEZMQVNICisgKiAtLS0tLSsgMHgxYzAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzcgfCAgICAgICAgICAgICAgIFNINzc4NiByZWdpc3RlcgorICogLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2RlZmluZSBOT1JfRkxBU0hfQUREUgkweDAwMDAwMDAwCisjZGVmaW5lIE5PUl9GTEFTSF9TSVpFCTB4MDQwMDAwMDAKKworI2RlZmluZSBDUzFfQkFTRQkweDA1MDAwMDAwCisjZGVmaW5lIENTNV9CQVNFCTB4MTUwMDAwMDAKKyNkZWZpbmUgRlBHQV9CQVNFCUNTMV9CQVNFCisKKyNkZWZpbmUgQk9BUkRSRUcob2ZzKQkoRlBHQV9CQVNFICsgb2ZzIyNfT0ZTKQorI2RlZmluZSBVQk9BUkRSRUcob2ZzKQkoMHhhMDAwMDAwMCArIEZQR0FfQkFTRSArIG9mcyMjX09GUykKKworI2RlZmluZSBTUlNUUl9PRlMJMHgwMDAwIC8qIFN5c3RlbSByZXNldCByZWdpc3RlciAqLworI2RlZmluZSBCRE1SX09GUwkweDAwMTAgLyogQm9hcmQgb3BlcmF0aW5nIG1vZGUgcmVzaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMFNSX09GUwkweDAwMjAgLyogSVJMMCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMME1TS1JfT0ZTCTB4MDAzMCAvKiBJUkwwIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMVNSX09GUwkweDAwNDAgLyogSVJMMSBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMU1TS1JfT0ZTCTB4MDA1MCAvKiBJUkwxIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMlNSX09GUwkweDAwNjAgLyogSVJMMiBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMk1TS1JfT0ZTCTB4MDA3MCAvKiBJUkwyIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMM1NSX09GUwkweDAwODAgLyogSVJMMyBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMM01TS1JfT0ZTCTB4MDA5MCAvKiBJUkwzIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU09GVElOVFJfT0ZTCTB4MDEyMCAvKiBTb2Z0d2VhciBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0xFRFJfT0ZTCTB4MDEzMCAvKiBMRUQgY29udHJvbCByZXNpc3RlciAqLworI2RlZmluZSBNQVBTQ0lGU1dSX09GUwkweDAxNDAgLyogTWFwL1NDSUYgU3dpdGNoIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQVkVSUl9PRlMJMHgwMTUwIC8qIEZQR0EgVmVyc2lvbiByZWdpc3RlciAqLworI2RlZmluZSBGUERBVEVSX09GUwkweDAxNjAgLyogRlBHQSBEYXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQWUVBUlJfT0ZTCTB4MDE3MCAvKiBGUEdBIFllYXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVENMS0NSX09GUwkweDAxODAgLyogVENMSyBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIERJUFNXTVJfT0ZTCTB4MTAwMCAvKiBESVBTVyBtb25pdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQT0RSX09GUwkweDEwMTAgLyogT3V0cHV0IHBvcnQgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBBVEFDTlJfT0ZTCTB4MTAyMCAvKiBBVEEtQ04gQ29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBJTkRSX09GUwkweDEwMzAgLyogSW5wdXQgcG9ydCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIE1EU1dNUl9PRlMJMHgxMDQwIC8qIE1PREUgU1cgbW9uaXRvciByZWdpc3RlciAqLworI2RlZmluZSBERFIzQlVQQ1JfT0ZTCTB4MTA1MCAvKiBERFIzIEJhY2t1cCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFNTSUNPREVDQ1JfT0ZTCTB4MTA2MCAvKiBTU0ktQ09ERUMgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQQ0lFU0xPVFNSX09GUwkweDEwNzAgLyogUENJZXhwcmVzcyBTbG90IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBFVEhFUlBPUlRTUl9PRlMJMHgxMDgwIC8qIEV0aGVyUGh5IFBvcnQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENIQ1JfT0ZTCTB4MzAwMCAvKiBMYXRjaCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENVQVJfT0ZTCTB4MzAxMCAvKiBMYXRjaCB1cHBlciBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENMQVJfT0ZTCTB4MzAxMiAvKiBMYXRjaCBsb3dlciBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENMVURSX09GUwkweDMwMjQgLyogTGF0Y2ggRDMxLTE2IHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENMTERSX09GUwkweDMwMjYgLyogTGF0Y2ggRDE1LTAgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBDSEFSTEVEX09GUwkweDIwMDAgLyogQ2hhcmFjdGVyIExFRCAqLworCisjZW5kaWYgIC8qIF9fTUFDSF9VUlFVRUxMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgppbmRleCAyZTFiODZlLi44MmEzYTE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgpAQCAtMzAsNSArMzAsNiBAQAogb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfRFVNUF9DT0RFKQkJKz0gZGlzYXNzZW1ibGUubworb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkrPSBzd3N1c3AubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNTdjZjBlMC4uOTlhY2ViMjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTIsOCArMTIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva2J1aWxkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogaW50IG1haW4odm9pZCkKIHsKQEAgLTI1LDUgKzI3LDExIEBACiAJREVGSU5FKFRJX1BSRV9DT1VOVCwJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSk7CiAJREVGSU5FKFRJX1JFU1RBUlRfQkxPQ0ssb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCByZXN0YXJ0X2Jsb2NrKSk7CiAKKyNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKwlERUZJTkUoUEJFX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBwYmUsIGFkZHJlc3MpKTsKKwlERUZJTkUoUEJFX09SSUdfQUREUkVTUywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgb3JpZ19hZGRyZXNzKSk7CisJREVGSU5FKFBCRV9ORVhULCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBuZXh0KSk7CisJREVGSU5FKFNXU1VTUF9BUkNIX1JFR1NfU0laRSwgc2l6ZW9mKHN0cnVjdCBzd3N1c3BfYXJjaF9yZWdzKSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCBmNDcxZDI0Li4yNjAwNjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBACiAjIFNwZWNpYWwgY2FzZXMgZm9yIGZhbWlseSBhbmNlc3RyeS4KIAogb2JqLSQoQ09ORklHX0NQVV9TSDRBKQkJKz0gc2g0YS8KK29iai0kKENPTkZJR19BUkNIX1NITU9CSUxFKQkrPSBzaG1vYmlsZS8KIAogIyBDb21tb24gaW50ZXJmYWNlcy4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwppbmRleCA3YjE3MTM3Li4xZGM4OTY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTIzOSw2ICsyNDEsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19yZWNhbGNfcmF0ZSk7CiAKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgY2xrICpvbGQ7CisKKwlpZiAoIXBhcmVudCB8fCAhY2xrKQorCQlyZXR1cm4gcmV0OworCisJb2xkID0gY2xrLT5wYXJlbnQ7CisJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+c2V0X3BhcmVudCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gY2xrLT5vcHMtPnNldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJCWNsay0+cGFyZW50ID0gKHJldCA/IG9sZCA6IHBhcmVudCk7CisJfQorCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBDTEtfUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xrX3NldF9wYXJlbnQpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2dldF9wYXJlbnQpOworCiBsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWlmIChsaWtlbHkoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPnJvdW5kX3JhdGUpKSB7CkBAIC0zMjksNiArMzYwLDcwIEBACiAJcmV0dXJuIHAgLSBidWY7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgY2xrc19zeXNkZXZfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RhdGljIHBtX21lc3NhZ2VfdCBwcmV2X3N0YXRlOworCXN0cnVjdCBjbGsgKmNsa3A7CisKKwlzd2l0Y2ggKHN0YXRlLmV2ZW50KSB7CisJY2FzZSBQTV9FVkVOVF9PTjoKKwkJLyogUmVzdW1laW5nIGZyb20gaGliZXJuYXRpb24gKi8KKwkJaWYgKHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja19saXN0LCBub2RlKQorCQkJCWlmIChsaWtlbHkoY2xrcC0+b3BzKSkgeworCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtwLT5yYXRlOworCisJCQkJCWlmIChsaWtlbHkoY2xrcC0+b3BzLT5zZXRfcGFyZW50KSkKKwkJCQkJCWNsa3AtPm9wcy0+c2V0X3BhcmVudChjbGtwLAorCQkJCQkJCWNsa3AtPnBhcmVudCk7CisJCQkJCWlmIChsaWtlbHkoY2xrcC0+b3BzLT5zZXRfcmF0ZSkpCisJCQkJCQljbGtwLT5vcHMtPnNldF9yYXRlKGNsa3AsCisJCQkJCQkJcmF0ZSwgTk9fQ0hBTkdFKTsKKwkJCQkJZWxzZSBpZiAobGlrZWx5KGNsa3AtPm9wcy0+cmVjYWxjKSkKKwkJCQkJCWNsa3AtPm9wcy0+cmVjYWxjKGNsa3ApOworCQkJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CisJCWJyZWFrOworCWNhc2UgUE1fRVZFTlRfU1VTUEVORDoKKwkJYnJlYWs7CisJfQorCisJcHJldl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsa3Nfc3lzZGV2X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXJldHVybiBjbGtzX3N5c2Rldl9zdXNwZW5kKGRldiwgUE1TR19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGNsa3Nfc3lzZGV2X2NsYXNzID0geworCS5uYW1lID0gImNsa3MiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGNsa3Nfc3lzZGV2X2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IGNsa3Nfc3lzZGV2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGNsa3Nfc3lzZGV2X3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBjbGtzX3N5c2Rldl9kZXYgPSB7CisJLmNscyA9ICZjbGtzX3N5c2Rldl9jbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19zeXNkZXZfaW5pdCh2b2lkKQoreworCXN5c2Rldl9jbGFzc19yZWdpc3RlcigmY2xrc19zeXNkZXZfY2xhc3MpOworCXN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNsa3Nfc3lzZGV2X2NsYXNzLCAmY2xrc19zeXNkZXZfZHJpdmVyKTsKKwlzeXNkZXZfcmVnaXN0ZXIoJmNsa3Nfc3lzZGV2X2Rldik7CisKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChjbGtfc3lzZGV2X2luaXQpOworI2VuZGlmCisKIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCmluZGV4IDU2ZTU4NzguLjBlMzJkOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNINzYxOSBTZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvc2hpbm9yaSBTYXRvCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDE1ICsxOSwxMCBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlXRFQsIEVETUFDLCBDTVQwLCBDTVQxLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJLAorCVNDSUYwLCBTQ0lGMSwgU0NJRjIsCiAJSElGX0hJRkksIEhJRl9ISUZCSSwKIAlETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywKIAlTSU9GLAotCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVNDSUYwLCBTQ0lGMSwgU0NJRjIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTM2LDI0ICszMiwxOCBAQAogCUlOVENfSVJRKElSUTYsIDgyKSwgSU5UQ19JUlEoSVJRNywgODMpLAogCUlOVENfSVJRKFdEVCwgODQpLCBJTlRDX0lSUShFRE1BQywgODUpLAogCUlOVENfSVJRKENNVDAsIDg2KSwgSU5UQ19JUlEoQ01UMSwgODcpLAotCUlOVENfSVJRKFNDSUYwX0VSSSwgODgpLCBJTlRDX0lSUShTQ0lGMF9SWEksIDg5KSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDkwKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCA5MSksCi0JSU5UQ19JUlEoU0NJRjFfRVJJLCA5MiksIElOVENfSVJRKFNDSUYxX1JYSSwgOTMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgOTQpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDk1KSwKLQlJTlRDX0lSUShTQ0lGMl9FUkksIDk2KSwgSU5UQ19JUlEoU0NJRjJfUlhJLCA5NyksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCA5OCksIElOVENfSVJRKFNDSUYyX1RYSSwgOTkpLAorCUlOVENfSVJRKFNDSUYwLCA4OCksIElOVENfSVJRKFNDSUYwLCA4OSksCisJSU5UQ19JUlEoU0NJRjAsIDkwKSwgSU5UQ19JUlEoU0NJRjAsIDkxKSwKKwlJTlRDX0lSUShTQ0lGMSwgOTIpLCBJTlRDX0lSUShTQ0lGMSwgOTMpLAorCUlOVENfSVJRKFNDSUYxLCA5NCksIElOVENfSVJRKFNDSUYxLCA5NSksCisJSU5UQ19JUlEoU0NJRjIsIDk2KSwgSU5UQ19JUlEoU0NJRjIsIDk3KSwKKwlJTlRDX0lSUShTQ0lGMiwgOTgpLCBJTlRDX0lSUShTQ0lGMiwgOTkpLAogCUlOVENfSVJRKEhJRl9ISUZJLCAxMDApLCBJTlRDX0lSUShISUZfSElGQkksIDEwMSksCiAJSU5UQ19JUlEoRE1BQzAsIDEwNCksIElOVENfSVJRKERNQUMxLCAxMDUpLAogCUlOVENfSVJRKERNQUMyLCAxMDYpLCBJTlRDX0lSUShETUFDMywgMTA3KSwKIAlJTlRDX0lSUShTSU9GLCAxMDgpLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmODE0MDAwNiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzIH0gfSwKIAl7IDB4ZjgxNDAwMDgsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCkBAIC02NCw3ICs1NCw3IEBACiAJeyAweGY4MDgwMDA4LCAwLCAxNiwgNCwgLyogSVBSRyAqLyB7IFNJT0YgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzYxOSIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc2MTkiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CkBAIC03MiwxNyArNjIsMTcgQEAKIAkJLm1hcGJhc2UJPSAweGY4NDAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgODgsIDg5LCA5MSwgOTB9LAorCQkuaXJxcwkJPSB7IDg4LCA4OCwgODgsIDg4IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4Zjg0MTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA5MiwgOTMsIDk1LCA5NH0sCisJCS5pcnFzCQk9IHsgOTIsIDkyLCA5MiwgOTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmODQyMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDk2LCA5NywgOTksIDk4fSwKKwkJLmlycXMJCT0geyA5NiwgOTYsIDk2LCA5NiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCmluZGV4IGU2MTFkNzkuLjg0NDI5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJlbmVzYXMgTVgtRyAoUjhBMDMwMjJCRykgU2V0dXAKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTIwLDIzICsyMCwxNSBAQAogCUlSUTgsIElSUTksIElSUTEwLCBJUlExMSwgSVJRMTIsIElSUTEzLCBJUlExNCwgSVJRMTUsCiAKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCi0KIAlTSU5UOCwgU0lOVDcsIFNJTlQ2LCBTSU5UNSwgU0lOVDQsIFNJTlQzLCBTSU5UMiwgU0lOVDEsCiAKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAorCVNDSUYwLCBTQ0lGMSwKIAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCisJTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1CisJTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBTQ0lGMCwgU0NJRjEsCi0JTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1CisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTksNDcgKzUxLDM2IEBACiAJSU5UQ19JUlEoU0lOVDQsIDk4KSwgSU5UQ19JUlEoU0lOVDMsIDk5KSwKIAlJTlRDX0lSUShTSU5UMiwgMTAwKSwgSU5UQ19JUlEoU0lOVDEsIDEwMSksCiAKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDIyMCksIElOVENfSVJRKFNDSUYwX1RYSSwgMjIxKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDIyMiksIElOVENfSVJRKFNDSUYwX0VSSSwgMjIzKSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDIyNCksIElOVENfSVJRKFNDSUYxX1RYSSwgMjI1KSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDIyNiksIElOVENfSVJRKFNDSUYxX0VSSSwgMjI3KSwKKwlJTlRDX0lSUShTQ0lGMCwgMjIwKSwgSU5UQ19JUlEoU0NJRjAsIDIyMSksCisJSU5UQ19JUlEoU0NJRjAsIDIyMiksIElOVENfSVJRKFNDSUYwLCAyMjMpLAorCUlOVENfSVJRKFNDSUYxLCAyMjQpLCBJTlRDX0lSUShTQ0lGMSwgMjI1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMjI2KSwgSU5UQ19JUlEoU0NJRjEsIDIyNyksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAyMjgpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAyMjkpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDIzMCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDIzMSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMjMyKSwgSU5UQ19JUlEoTVRVMl9UR0kwRSwgMjMzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjI4KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIyOSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMCksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzEpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzIpLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMzKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEYsIDIzNCksIElOVENfSVJRKE1UVTJfVEdJMUEsIDIzNSksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQiwgMjM2KSwgSU5UQ19JUlEoTVRVMl9UQ0kxViwgMjM3KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFVLCAyMzgpLCBJTlRDX0lSUShNVFUyX1RHSTJBLCAyMzkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzQpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM1KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM2KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzOCksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzkpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kyQiwgMjQwKSwgSU5UQ19JUlEoTVRVMl9UQ0kyViwgMjQxKSwKLQlJTlRDX0lSUShNVFUyX1RDSTJVLCAyNDIpLCBJTlRDX0lSUShNVFUyX1RHSTNBLCAyNDMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDApLCBJTlRDX0lSUShNVFUyX0dST1VQMywgMjQxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMywgMjQyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MyksCiAKIAlJTlRDX0lSUShNVFUyX1RHSTNCLCAyNDQpLAogCUlOVENfSVJRKE1UVTJfVEdJM0MsIDI0NSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTNELCAyNDYpLCBJTlRDX0lSUShNVFUyX1RDSTNWLCAyNDcpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDI0OCksIElOVENfSVJRKE1UVTJfVEdJNEIsIDI0OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMjUwKSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMjUxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ2KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0NyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0OCksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNTApLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjUxKSwKIAotCUlOVENfSVJRKE1UVTJfVENJNFYsIDI1MiksIElOVENfSVJRKE1UVTJfVEdJNVUsIDI1MyksCi0JSU5UQ19JUlEoTVRVMl9UR0k1ViwgMjU0KSwgSU5UQ19JUlEoTVRVMl9UR0k1VywgMjU1KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNSwgMjUyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1MyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1NCksIElOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDEsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JCSAgIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDIsIE1UVTJfVEdJMEYsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsCi0JCSAgIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsIE1UVTJfVEdJMkEpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDMsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JCSAgIE1UVTJfVEdJM0EpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDQsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsIE1UVTJfVEdJNEEsCi0JCSAgIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDUsIE1UVTJfVENJNFYsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzcsNyArMTE4LDcgQEAKIAkJLm1hcGJhc2UJPSAweGZmODA0MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMjMsIDIyMCwgMjIxLCAyMjIgfSwKKwkJLmlycXMJCT0geyAyMjAsIDIyMCwgMjIwLCAyMjAgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwppbmRleCAwNjMxZTQyLi4wMGY0MmY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwpAQCAtMiw2ICsyLDcgQEAKICAqICBTSDcyMDEgc2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQZXRlciBHcmlmZmluIHBncmlmZmluQG1wYy1kYXRhLmNvLnVrCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDU3ICsxOSwzMiBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCisKIAlBRENfQURJLAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCi0JUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCwKLQlXRFQsCi0JSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksIElJQzMwX1RFSSwKLQlJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwgSUlDMzFfVEVJLAotCUlJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLCBJSUMzMl9URUksCisKKwlNVFUyMF9BQkNELCBNVFUyMF9WRUYsIE1UVTIxX0FCLCBNVFUyMV9WVSwgTVRVMjJfQUIsIE1UVTIyX1ZVLAorCU1UVTIzX0FCQ0QsIE1UVTI0X0FCQ0QsIE1UVTI1X1VWVywgTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwKKworCVJUQywgV0RULAorCisJSUlDMzAsIElJQzMxLCBJSUMzMiwKIAogCURNQUMwX0RNSU5UMCwgRE1BQzFfRE1JTlQxLAogCURNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLAogCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKLQlTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJLAotCVNDSUY0X0JSSSwgU0NJRjRfRVJJLCBTQ0lGNF9SWEksIFNDSUY0X1RYSSwKLQlTQ0lGNV9CUkksIFNDSUY1X0VSSSwgU0NJRjVfUlhJLCBTQ0lGNV9UWEksCi0JU0NJRjZfQlJJLCBTQ0lGNl9FUkksIFNDSUY2X1JYSSwgU0NJRjZfVFhJLAotCVNDSUY3X0JSSSwgU0NJRjdfRVJJLCBTQ0lGN19SWEksIFNDSUY3X1RYSSwKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LCBTQ0lGNiwgU0NJRjcsCiAKIAlETUFDMF9ETUlOVEEsIERNQUM0X0RNSU5UNCwgRE1BQzVfRE1JTlQ1LCBETUFDNl9ETUlOVDYsCiAJRE1BQzdfRE1JTlQ3LAogCi0JUkNBTjBfRVJTLCBSQ0FOMF9PVlIsCi0JUkNBTjBfU0xFLAotCVJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCi0JUkNBTjFfRVJTLCBSQ0FOMV9PVlIsCi0JUkNBTjFfU0xFLAotCVJDQU4xX1JNMCwgUkNBTjFfUk0xLAorCVJDQU4wLCBSQ0FOMSwKIAogCVNTSTBfU1NJSSwgU1NJMV9TU0lJLAogCi0JVE1SMF9DTUlBMCwgVE1SMF9DTUlCMCwgVE1SMF9PVkkwLAotCVRNUjFfQ01JQTEsIFRNUjFfQ01JQjEsIFRNUjFfT1ZJMSwKKwlUTVIwLCBUTVIxLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCi0JSVJRLCBQSU5ULCBBREMsCi0JTVRVMjBfQUJDRCwgTVRVMjBfVkVGLCBNVFUyMV9BQiwgTVRVMjFfVlUsIE1UVTIyX0FCLCBNVFUyMl9WVSwKLQlNVFUyM19BQkNELCBNVFUyNF9BQkNELCBNVFUyNV9VVlcsCi0JUlRDLCBJSUMzMCwgSUlDMzEsIElJQzMyLAotCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsIFNDSUY2LCBTQ0lGNywKLQlSQ0FOMCwgUkNBTjEsIFRNUjAsIFRNUjEKLQorCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTc2LDYgKzUyLDcgQEAKIAlJTlRDX0lSUShJUlEyLCA2NiksIElOVENfSVJRKElSUTMsIDY3KSwKIAlJTlRDX0lSUShJUlE0LCA2OCksIElOVENfSVJRKElSUTUsIDY5KSwKIAlJTlRDX0lSUShJUlE2LCA3MCksIElOVENfSVJRKElSUTcsIDcxKSwKKwogCUlOVENfSVJRKFBJTlQwLCA4MCksIElOVENfSVJRKFBJTlQxLCA4MSksCiAJSU5UQ19JUlEoUElOVDIsIDgyKSwgSU5UQ19JUlEoUElOVDMsIDgzKSwKIAlJTlRDX0lSUShQSU5UNCwgODQpLCBJTlRDX0lSUShQSU5UNSwgODUpLApAQCAtODMsMTIzICs2MCw5MiBAQAogCiAJSU5UQ19JUlEoQURDX0FESSwgOTIpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTA4KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTA5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxMTApLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxMTEpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDExMiksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTEzKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTE0KSwKKwlJTlRDX0lSUShNVFUyMF9BQkNELCAxMDgpLCBJTlRDX0lSUShNVFUyMF9BQkNELCAxMDkpLAorCUlOVENfSVJRKE1UVTIwX0FCQ0QsIDExMCksIElOVENfSVJRKE1UVTIwX0FCQ0QsIDExMSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxMTYpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxMTcpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDEyMCksIElOVENfSVJRKE1UVTJfVENJMVUsIDEyMSksCisJSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTIpLCBJTlRDX0lSUShNVFUyMF9WRUYsIDExMyksCisJSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTQpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTI0KSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTI1KSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxMjgpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxMjkpLAorCUlOVENfSVJRKE1UVTIxX0FCLCAxMTYpLCBJTlRDX0lSUShNVFUyMV9BQiwgMTE3KSwKKwlJTlRDX0lSUShNVFUyMV9WVSwgMTIwKSwgSU5UQ19JUlEoTVRVMjFfVlUsIDEyMSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxMzIpLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxMzMpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDEzNCksIElOVENfSVJRKE1UVTJfVEdJM0QsIDEzNSksCisJSU5UQ19JUlEoTVRVMjJfQUIsIDEyNCksIElOVENfSVJRKE1UVTIyX0FCLCAxMjUpLAorCUlOVENfSVJRKE1UVTIyX1ZVLCAxMjgpLCBJTlRDX0lSUShNVFUyMl9WVSwgMTI5KSwKKworCUlOVENfSVJRKE1UVTIzX0FCQ0QsIDEzMiksIElOVENfSVJRKE1UVTIzX0FCQ0QsIDEzMyksCisJSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTM0KSwgSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTM1KSwKKwogCUlOVENfSVJRKE1UVTJfVENJM1YsIDEzNiksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxNDApLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxNDEpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE0MiksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE0MyksCisJSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQwKSwgSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQxKSwKKwlJTlRDX0lSUShNVFUyNF9BQkNELCAxNDIpLCBJTlRDX0lSUShNVFUyNF9BQkNELCAxNDMpLAorCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTQ0KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJNVUsIDE0OCksIElOVENfSVJRKE1UVTJfVEdJNVYsIDE0OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VywgMTUwKSwKKwlJTlRDX0lSUShNVFUyNV9VVlcsIDE0OCksIElOVENfSVJRKE1UVTI1X1VWVywgMTQ5KSwKKwlJTlRDX0lSUShNVFUyNV9VVlcsIDE1MCksCiAKLQlJTlRDX0lSUShSVENfQVJNLCAxNTIpLCBJTlRDX0lSUShSVENfUFJELCAxNTMpLAotCUlOVENfSVJRKFJUQ19DVVAsIDE1NCksIElOVENfSVJRKFdEVCwgMTU2KSwKKwlJTlRDX0lSUShSVEMsIDE1MiksIElOVENfSVJRKFJUQywgMTUzKSwKKwlJTlRDX0lSUShSVEMsIDE1NCksCiAKLQlJTlRDX0lSUShJSUMzMF9TVFBJLCAxNTcpLCBJTlRDX0lSUShJSUMzMF9OQUtJLCAxNTgpLAotCUlOVENfSVJRKElJQzMwX1JYSSwgMTU5KSwgSU5UQ19JUlEoSUlDMzBfVFhJLCAxNjApLAotCUlOVENfSVJRKElJQzMwX1RFSSwgMTYxKSwKKwlJTlRDX0lSUShXRFQsIDE1NiksCiAKLQlJTlRDX0lSUShJSUMzMV9TVFBJLCAxNjQpLCBJTlRDX0lSUShJSUMzMV9OQUtJLCAxNjUpLAotCUlOVENfSVJRKElJQzMxX1JYSSwgMTY2KSwgSU5UQ19JUlEoSUlDMzFfVFhJLCAxNjcpLAotCUlOVENfSVJRKElJQzMxX1RFSSwgMTY4KSwKKwlJTlRDX0lSUShJSUMzMCwgMTU3KSwgSU5UQ19JUlEoSUlDMzAsIDE1OCksCisJSU5UQ19JUlEoSUlDMzAsIDE1OSksIElOVENfSVJRKElJQzMwLCAxNjApLAorCUlOVENfSVJRKElJQzMwLCAxNjEpLAogCi0JSU5UQ19JUlEoSUlDMzJfU1RQSSwgMTcwKSwgSU5UQ19JUlEoSUlDMzJfTkFLSSwgMTcxKSwKLQlJTlRDX0lSUShJSUMzMl9SWEksIDE3MiksIElOVENfSVJRKElJQzMyX1RYSSwgMTczKSwKLQlJTlRDX0lSUShJSUMzMl9URUksIDE3NCksCisJSU5UQ19JUlEoSUlDMzEsIDE2NCksIElOVENfSVJRKElJQzMxLCAxNjUpLAorCUlOVENfSVJRKElJQzMxLCAxNjYpLCBJTlRDX0lSUShJSUMzMSwgMTY3KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY4KSwKKworCUlOVENfSVJRKElJQzMyLCAxNzApLCBJTlRDX0lSUShJSUMzMiwgMTcxKSwKKwlJTlRDX0lSUShJSUMzMiwgMTcyKSwgSU5UQ19JUlEoSUlDMzIsIDE3MyksCisJSU5UQ19JUlEoSUlDMzIsIDE3NCksCiAKIAlJTlRDX0lSUShETUFDMF9ETUlOVDAsIDE3NiksIElOVENfSVJRKERNQUMxX0RNSU5UMSwgMTc3KSwKIAlJTlRDX0lSUShETUFDMl9ETUlOVDIsIDE3OCksIElOVENfSVJRKERNQUMzX0RNSU5UMywgMTc5KSwKIAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMTgwKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAxODEpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMTgyKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAxODMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMTg0KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAxODUpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMTg2KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAxODcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMTg4KSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAxODkpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMTkwKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAxOTEpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMTkyKSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAxOTMpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMTk0KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAxOTUpLAotCUlOVENfSVJRKFNDSUY0X0JSSSwgMTk2KSwgSU5UQ19JUlEoU0NJRjRfRVJJLCAxOTcpLAotCUlOVENfSVJRKFNDSUY0X1JYSSwgMTk4KSwgSU5UQ19JUlEoU0NJRjRfVFhJLCAxOTkpLAotCUlOVENfSVJRKFNDSUY1X0JSSSwgMjAwKSwgSU5UQ19JUlEoU0NJRjVfRVJJLCAyMDEpLAotCUlOVENfSVJRKFNDSUY1X1JYSSwgMjAyKSwgSU5UQ19JUlEoU0NJRjVfVFhJLCAyMDMpLAotCUlOVENfSVJRKFNDSUY2X0JSSSwgMjA0KSwgSU5UQ19JUlEoU0NJRjZfRVJJLCAyMDUpLAotCUlOVENfSVJRKFNDSUY2X1JYSSwgMjA2KSwgSU5UQ19JUlEoU0NJRjZfVFhJLCAyMDcpLAotCUlOVENfSVJRKFNDSUY3X0JSSSwgMjA4KSwgSU5UQ19JUlEoU0NJRjdfRVJJLCAyMDkpLAotCUlOVENfSVJRKFNDSUY3X1JYSSwgMjEwKSwgSU5UQ19JUlEoU0NJRjdfVFhJLCAyMTEpLAorCUlOVENfSVJRKFNDSUYwLCAxODApLCBJTlRDX0lSUShTQ0lGMCwgMTgxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTgyKSwgSU5UQ19JUlEoU0NJRjAsIDE4MyksCisJSU5UQ19JUlEoU0NJRjEsIDE4NCksIElOVENfSVJRKFNDSUYxLCAxODUpLAorCUlOVENfSVJRKFNDSUYxLCAxODYpLCBJTlRDX0lSUShTQ0lGMSwgMTg3KSwKKwlJTlRDX0lSUShTQ0lGMiwgMTg4KSwgSU5UQ19JUlEoU0NJRjIsIDE4OSksCisJSU5UQ19JUlEoU0NJRjIsIDE5MCksIElOVENfSVJRKFNDSUYyLCAxOTEpLAorCUlOVENfSVJRKFNDSUYzLCAxOTIpLCBJTlRDX0lSUShTQ0lGMywgMTkzKSwKKwlJTlRDX0lSUShTQ0lGMywgMTk0KSwgSU5UQ19JUlEoU0NJRjMsIDE5NSksCisJSU5UQ19JUlEoU0NJRjQsIDE5NiksIElOVENfSVJRKFNDSUY0LCAxOTcpLAorCUlOVENfSVJRKFNDSUY0LCAxOTgpLCBJTlRDX0lSUShTQ0lGNCwgMTk5KSwKKwlJTlRDX0lSUShTQ0lGNSwgMjAwKSwgSU5UQ19JUlEoU0NJRjUsIDIwMSksCisJSU5UQ19JUlEoU0NJRjUsIDIwMiksIElOVENfSVJRKFNDSUY1LCAyMDMpLAorCUlOVENfSVJRKFNDSUY2LCAyMDQpLCBJTlRDX0lSUShTQ0lGNiwgMjA1KSwKKwlJTlRDX0lSUShTQ0lGNiwgMjA2KSwgSU5UQ19JUlEoU0NJRjYsIDIwNyksCisJSU5UQ19JUlEoU0NJRjcsIDIwOCksIElOVENfSVJRKFNDSUY3LCAyMDkpLAorCUlOVENfSVJRKFNDSUY3LCAyMTApLCBJTlRDX0lSUShTQ0lGNywgMjExKSwKIAogCUlOVENfSVJRKERNQUMwX0RNSU5UQSwgMjEyKSwgSU5UQ19JUlEoRE1BQzRfRE1JTlQ0LCAyMTYpLAogCUlOVENfSVJRKERNQUM1X0RNSU5UNSwgMjE3KSwgSU5UQ19JUlEoRE1BQzZfRE1JTlQ2LCAyMTgpLAogCUlOVENfSVJRKERNQUM3X0RNSU5UNywgMjE5KSwKIAotCUlOVENfSVJRKFJDQU4wX0VSUywgMjI4KSwgSU5UQ19JUlEoUkNBTjBfT1ZSLCAyMjkpLAotCUlOVENfSVJRKFJDQU4wX1NMRSwgMjMwKSwKLQlJTlRDX0lSUShSQ0FOMF9STTAsIDIzMSksIElOVENfSVJRKFJDQU4wX1JNMSwgMjMyKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjI4KSwgSU5UQ19JUlEoUkNBTjAsIDIyOSksCisJSU5UQ19JUlEoUkNBTjAsIDIzMCksCisJSU5UQ19JUlEoUkNBTjAsIDIzMSksIElOVENfSVJRKFJDQU4wLCAyMzIpLAogCi0JSU5UQ19JUlEoUkNBTjFfRVJTLCAyMzQpLCBJTlRDX0lSUShSQ0FOMV9PVlIsIDIzNSksCi0JSU5UQ19JUlEoUkNBTjFfU0xFLCAyMzYpLAotCUlOVENfSVJRKFJDQU4xX1JNMCwgMjM3KSwgSU5UQ19JUlEoUkNBTjFfUk0xLCAyMzgpLAorCUlOVENfSVJRKFJDQU4xLCAyMzQpLCBJTlRDX0lSUShSQ0FOMSwgMjM1KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM2KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM3KSwgSU5UQ19JUlEoUkNBTjEsIDIzOCksCiAKIAlJTlRDX0lSUShTU0kwX1NTSUksIDI0NCksIElOVENfSVJRKFNTSTFfU1NJSSwgMjQ1KSwKIAotCUlOVENfSVJRKFRNUjBfQ01JQTAsIDI0NiksIElOVENfSVJRKFRNUjBfQ01JQjAsIDI0NyksCi0JSU5UQ19JUlEoVE1SMF9PVkkwLCAyNDgpLAorCUlOVENfSVJRKFRNUjAsIDI0NiksIElOVENfSVJRKFRNUjAsIDI0NyksCisJSU5UQ19JUlEoVE1SMCwgMjQ4KSwKIAotCUlOVENfSVJRKFRNUjFfQ01JQTEsIDI1MiksIElOVENfSVJRKFRNUjFfQ01JQjEsIDI1MyksCi0JSU5UQ19JUlEoVE1SMV9PVkkxLCAyNTQpLAotCisJSU5UQ19JUlEoVE1SMSwgMjUyKSwgSU5UQ19JUlEoVE1SMSwgMjUzKSwKKwlJTlRDX0lSUShUTVIxLCAyNTQpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoTVRVMjBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUyMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCi0JSU5UQ19HUk9VUChNVFUyMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUyMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUyM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTI0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVMjVfVVZXLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCApLAotCi0JSU5UQ19HUk9VUChJSUMzMCwgSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksCi0JCSAgIElJQzMwX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMSwgSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksCi0JCSAgIElJQzMxX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMiwgSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksCi0JCSAgIElJQzMyX1RFSSksCi0KLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYzLCBTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEkpLAotCUlOVENfR1JPVVAoU0NJRjQsIFNDSUY0X0JSSSwgU0NJRjRfRVJJLCBTQ0lGNF9SWEksIFNDSUY0X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNSwgU0NJRjVfQlJJLCBTQ0lGNV9FUkksIFNDSUY1X1JYSSwgU0NJRjVfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY2LCBTQ0lGNl9CUkksIFNDSUY2X0VSSSwgU0NJRjZfUlhJLCBTQ0lGNl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjcsIFNDSUY3X0JSSSwgU0NJRjdfRVJJLCBTQ0lGN19SWEksIFNDSUY3X1RYSSksCi0KLQlJTlRDX0dST1VQKFJDQU4wLCBSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0JCSAgIFJDQU4wX1NMRSksCi0JSU5UQ19HUk9VUChSQ0FOMSwgUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLAotCQkgICBSQ0FOMV9TTEUpLAotCi0JSU5UQ19HUk9VUChUTVIwLCBUTVIwX0NNSUEwLCBUTVIwX0NNSUIwLCBUTVIwX09WSTApLAotCUlOVENfR1JPVVAoVE1SMSwgVE1SMV9DTUlBMSwgVE1SMV9DTUlCMSwgVE1SMV9PVkkxKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yMTIsNyArMTU4LDcgQEAKIAogCXsgMHhmZmZlOTgwNiwgMCwgMTYsIDQsIC8qIElQUjA5ICovIHsgUlRDLCBXRFQsIElJQzMwLCAwIH0gfSwKIAl7IDB4ZmZmZTk4MDgsIDAsIDE2LCA0LCAvKiBJUFIxMCAqLyB7IElJQzMxLCBJSUMzMiwgRE1BQzBfRE1JTlQwLCBETUFDMV9ETUlOVDEgfSB9LAotCXsgMHhmZmZlOTgwYSwgMCwgMTYsIDQsIC8qIElQUjExICovIHsgRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsIFNDSUYwICwgU0NJRjEgfSB9LAorCXsgMHhmZmZlOTgwYSwgMCwgMTYsIDQsIC8qIElQUjExICovIHsgRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsIFNDSUYwLCBTQ0lGMSB9IH0sCiAJeyAweGZmZmU5ODBjLCAwLCAxNiwgNCwgLyogSVBSMTIgKi8geyBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSB9IH0sCiAJeyAweGZmZmU5ODBlLCAwLCAxNiwgNCwgLyogSVBSMTMgKi8geyBTQ0lGNiwgU0NJRjcsIERNQUMwX0RNSU5UQSwgRE1BQzRfRE1JTlQ0ICB9IH0sCiAJeyAweGZmZmU5ODEwLCAwLCAxNiwgNCwgLyogSVBSMTQgKi8geyBETUFDNV9ETUlOVDUsIERNQUM2X0RNSU5UNiwgRE1BQzdfRE1JTlQ3LCAwIH0gfSwKQEAgLTIzNCw0MiArMTgwLDQyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTgxLCAxODIsIDE4MywgMTgwfQorCQkuaXJxcwkJPSB7IDE4MCwgMTgwLCAxODAsIDE4MCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4NSwgMTg2LCAxODcsIDE4NH0KKwkJLmlycXMJCT0geyAxODQsIDE4NCwgMTg0LCAxODQgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODksIDE4NiwgMTg3LCAxODh9CisJCS5pcnFzCQk9IHsgMTg4LCAxODgsIDE4OCwgMTg4IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTkzLCAxOTQsIDE5NSwgMTkyfQorCQkuaXJxcwkJPSB7IDE5MiwgMTkyLCAxOTIsIDE5MiB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWEwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE5NiwgMTk4LCAxOTksIDE5Nn0KKwkJLmlycXMJCT0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmVhODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDEsIDIwMiwgMjAzLCAyMDB9CisJCS5pcnFzCQk9IHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYjAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjA1LCAyMDYsIDIwNywgMjA0fQorCQkuaXJxcwkJPSB7IDIwNCwgMjA0LCAyMDQsIDIwNCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWI4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwOSwgMjEwLCAyMTEsIDIwOH0KKwkJLmlycXMJCT0geyAyMDgsIDIwOCwgMjA4LCAyMDggfQogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0yOTAsMTcgKzIzNiw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMTUzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDE1NCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAxNTIsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCmluZGV4IGU5OGRjNDQuLjgyMGRmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNINzIwMyBhbmQgU0g3MjYzIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsNTAgKzE4LDI3IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKLQlETUFDMF9ERUksIERNQUMwX0hFSSwgRE1BQzFfREVJLCBETUFDMV9IRUksCi0JRE1BQzJfREVJLCBETUFDMl9IRUksIERNQUMzX0RFSSwgRE1BQzNfSEVJLAotCURNQUM0X0RFSSwgRE1BQzRfSEVJLCBETUFDNV9ERUksIERNQUM1X0hFSSwKLQlETUFDNl9ERUksIERNQUM2X0hFSSwgRE1BQzdfREVJLCBETUFDN19IRUksCisJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAogCVVTQiwgTENEQywgQ01UMCwgQ01UMSwgQlNDLCBXRFQsCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCisKKwlNVFUwX0FCQ0QsIE1UVTBfVkVGLCBNVFUxX0FCLCBNVFUxX1ZVLCBNVFUyX0FCLCBNVFUyX1ZVLAorCU1UVTNfQUJDRCwgTVRVNF9BQkNELCBNVFUyX1RDSTNWLCBNVFUyX1RDSTRWLAorCiAJQURDX0FESSwKLQlJSUMzMF9TVFBJLCBJSUMzMF9OQUtJLCBJSUMzMF9SWEksIElJQzMwX1RYSSwgSUlDMzBfVEVJLAotCUlJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLCBJSUMzMV9URUksCi0JSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksIElJQzMyX1RFSSwKLQlJSUMzM19TVFBJLCBJSUMzM19OQUtJLCBJSUMzM19SWEksIElJQzMzX1RYSSwgSUlDMzNfVEVJLAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKLQlTU1UwX1NTRVJJLCBTU1UwX1NTUlhJLCBTU1UwX1NTVFhJLAotCVNTVTFfU1NFUkksIFNTVTFfU1NSWEksIFNTVTFfU1NUWEksCisKKwlJSUMzMCwgSUlDMzEsIElJQzMyLCBJSUMzMywKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywKKworCVNTVTAsIFNTVTEsCisKIAlTU0kwX1NTSUksIFNTSTFfU1NJSSwgU1NJMl9TU0lJLCBTU0kzX1NTSUksCiAKIAkvKiBST00tREVDLCBTREhJLCBTUkMsIGFuZCBJRUIgYXJlIFNINzI2MyBzcGVjaWZpYyAqLwotCVJPTURFQ19JU1ksIFJPTURFQ19JRVJSLCBST01ERUNfSUFSRywgUk9NREVDX0lTRUMsIFJPTURFQ19JQlVGLAotCVJPTURFQ19JUkVBRFksCi0KLQlGTENUTF9GTFNURUksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKLQotCVNESEkzLCBTREhJMCwgU0RISTEsCi0KLQlSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQLAotCVJDQU4wX0VSUywgUkNBTjBfT1ZSLCBSQ0FOMF9STTAsIFJDQU4wX1JNMSwgUkNBTjBfU0xFLAotCVJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwgUkNBTjFfU0xFLAotCi0JU1JDX09WRiwgU1JDX09ERkksIFNSQ19JREVJLCBJRUJJLAorCVJPTURFQywgRkxDVEwsIFNESEksIFJUQywgUkNBTjAsIFJDQU4xLAorCVNSQywgSUVCSSwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCi0JTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKLQlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwKLQlJSUMzMCwgSUlDMzEsIElJQzMyLCBJSUMzMywgU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCi0JU1NVMCwgU1NVMSwgUk9NREVDLCBTREhJLCBGTENUTCwgUlRDLCBSQ0FOMCwgUkNBTjEsIFNSQworCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTczLDc5ICs1MCw4MCBAQAogCUlOVENfSVJRKFBJTlQyLCA4MiksIElOVENfSVJRKFBJTlQzLCA4MyksCiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKIAlJTlRDX0lSUShQSU5UNiwgODYpLCBJTlRDX0lSUShQSU5UNywgODcpLAotCUlOVENfSVJRKERNQUMwX0RFSSwgMTA4KSwgSU5UQ19JUlEoRE1BQzBfSEVJLCAxMDkpLAotCUlOVENfSVJRKERNQUMxX0RFSSwgMTEyKSwgSU5UQ19JUlEoRE1BQzFfSEVJLCAxMTMpLAotCUlOVENfSVJRKERNQUMyX0RFSSwgMTE2KSwgSU5UQ19JUlEoRE1BQzJfSEVJLCAxMTcpLAotCUlOVENfSVJRKERNQUMzX0RFSSwgMTIwKSwgSU5UQ19JUlEoRE1BQzNfSEVJLCAxMjEpLAotCUlOVENfSVJRKERNQUM0X0RFSSwgMTI0KSwgSU5UQ19JUlEoRE1BQzRfSEVJLCAxMjUpLAotCUlOVENfSVJRKERNQUM1X0RFSSwgMTI4KSwgSU5UQ19JUlEoRE1BQzVfSEVJLCAxMjkpLAotCUlOVENfSVJRKERNQUM2X0RFSSwgMTMyKSwgSU5UQ19JUlEoRE1BQzZfSEVJLCAxMzMpLAotCUlOVENfSVJRKERNQUM3X0RFSSwgMTM2KSwgSU5UQ19JUlEoRE1BQzdfSEVJLCAxMzcpLAorCUlOVENfSVJRKERNQUMwLCAxMDgpLCBJTlRDX0lSUShETUFDMCwgMTA5KSwKKwlJTlRDX0lSUShETUFDMSwgMTEyKSwgSU5UQ19JUlEoRE1BQzEsIDExMyksCisJSU5UQ19JUlEoRE1BQzIsIDExNiksIElOVENfSVJRKERNQUMyLCAxMTcpLAorCUlOVENfSVJRKERNQUMzLCAxMjApLCBJTlRDX0lSUShETUFDMywgMTIxKSwKKwlJTlRDX0lSUShETUFDNCwgMTI0KSwgSU5UQ19JUlEoRE1BQzQsIDEyNSksCisJSU5UQ19JUlEoRE1BQzUsIDEyOCksIElOVENfSVJRKERNQUM1LCAxMjkpLAorCUlOVENfSVJRKERNQUM2LCAxMzIpLCBJTlRDX0lSUShETUFDNiwgMTMzKSwKKwlJTlRDX0lSUShETUFDNywgMTM2KSwgSU5UQ19JUlEoRE1BQzcsIDEzNyksCiAJSU5UQ19JUlEoVVNCLCAxNDApLCBJTlRDX0lSUShMQ0RDLCAxNDEpLAogCUlOVENfSVJRKENNVDAsIDE0MiksIElOVENfSVJRKENNVDEsIDE0MyksCiAJSU5UQ19JUlEoQlNDLCAxNDQpLCBJTlRDX0lSUShXRFQsIDE0NSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTQ2KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTQ3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxNDgpLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxNDkpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDE1MCksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTUxKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTUyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxNTMpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxNTQpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDE1NSksIElOVENfSVJRKE1UVTJfVENJMVUsIDE1NiksCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTU3KSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTU4KSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxNTkpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxNjApLAotCUlOVENfSVJRKE1UVTJfVEdJM0EsIDE2MSksIElOVENfSVJRKE1UVTJfVEdJM0IsIDE2MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQywgMTYzKSwgSU5UQ19JUlEoTVRVMl9UR0kzRCwgMTY0KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE0NiksIElOVENfSVJRKE1UVTBfQUJDRCwgMTQ3KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE0OCksIElOVENfSVJRKE1UVTBfQUJDRCwgMTQ5KSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTUwKSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTUxKSwgSU5UQ19JUlEoTVRVMF9WRUYsIDE1MiksCisJSU5UQ19JUlEoTVRVMV9BQiwgMTUzKSwgSU5UQ19JUlEoTVRVMV9BQiwgMTU0KSwKKwlJTlRDX0lSUShNVFUxX1ZVLCAxNTUpLCBJTlRDX0lSUShNVFUxX1ZVLCAxNTYpLAorCUlOVENfSVJRKE1UVTJfQUIsIDE1NyksIElOVENfSVJRKE1UVTJfQUIsIDE1OCksCisJSU5UQ19JUlEoTVRVMl9WVSwgMTU5KSwgSU5UQ19JUlEoTVRVMl9WVSwgMTYwKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MSksIElOVENfSVJRKE1UVTNfQUJDRCwgMTYyKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MyksIElOVENfSVJRKE1UVTNfQUJDRCwgMTY0KSwKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxNjUpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDE2NiksIElOVENfSVJRKE1UVTJfVEdJNEIsIDE2NyksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMTY4KSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMTY5KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE2NiksIElOVENfSVJRKE1UVTRfQUJDRCwgMTY3KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE2OCksIElOVENfSVJRKE1UVTRfQUJDRCwgMTY5KSwKIAlJTlRDX0lSUShNVFUyX1RDSTRWLCAxNzApLAogCUlOVENfSVJRKEFEQ19BREksIDE3MSksCi0JSU5UQ19JUlEoSUlDMzBfU1RQSSwgMTcyKSwgSU5UQ19JUlEoSUlDMzBfTkFLSSwgMTczKSwKLQlJTlRDX0lSUShJSUMzMF9SWEksIDE3NCksIElOVENfSVJRKElJQzMwX1RYSSwgMTc1KSwKLQlJTlRDX0lSUShJSUMzMF9URUksIDE3NiksCi0JSU5UQ19JUlEoSUlDMzFfU1RQSSwgMTc3KSwgSU5UQ19JUlEoSUlDMzFfTkFLSSwgMTc4KSwKLQlJTlRDX0lSUShJSUMzMV9SWEksIDE3OSksIElOVENfSVJRKElJQzMxX1RYSSwgMTgwKSwKLQlJTlRDX0lSUShJSUMzMV9URUksIDE4MSksCi0JSU5UQ19JUlEoSUlDMzJfU1RQSSwgMTgyKSwgSU5UQ19JUlEoSUlDMzJfTkFLSSwgMTgzKSwKLQlJTlRDX0lSUShJSUMzMl9SWEksIDE4NCksIElOVENfSVJRKElJQzMyX1RYSSwgMTg1KSwKLQlJTlRDX0lSUShJSUMzMl9URUksIDE4NiksCi0JSU5UQ19JUlEoSUlDMzNfU1RQSSwgMTg3KSwgSU5UQ19JUlEoSUlDMzNfTkFLSSwgMTg4KSwKLQlJTlRDX0lSUShJSUMzM19SWEksIDE4OSksIElOVENfSVJRKElJQzMzX1RYSSwgMTkwKSwKLQlJTlRDX0lSUShJSUMzM19URUksIDE5MSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAxOTIpLCBJTlRDX0lSUShTQ0lGMF9FUkksIDE5MyksCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAxOTQpLCBJTlRDX0lSUShTQ0lGMF9UWEksIDE5NSksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAxOTYpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDE5NyksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAxOTgpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDE5OSksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCAyMDApLCBJTlRDX0lSUShTQ0lGMl9FUkksIDIwMSksCi0JSU5UQ19JUlEoU0NJRjJfUlhJLCAyMDIpLCBJTlRDX0lSUShTQ0lGMl9UWEksIDIwMyksCi0JSU5UQ19JUlEoU0NJRjNfQlJJLCAyMDQpLCBJTlRDX0lSUShTQ0lGM19FUkksIDIwNSksCi0JSU5UQ19JUlEoU0NJRjNfUlhJLCAyMDYpLCBJTlRDX0lSUShTQ0lGM19UWEksIDIwNyksCi0JSU5UQ19JUlEoU1NVMF9TU0VSSSwgMjA4KSwgSU5UQ19JUlEoU1NVMF9TU1JYSSwgMjA5KSwKLQlJTlRDX0lSUShTU1UwX1NTVFhJLCAyMTApLAotCUlOVENfSVJRKFNTVTFfU1NFUkksIDIxMSksIElOVENfSVJRKFNTVTFfU1NSWEksIDIxMiksCi0JSU5UQ19JUlEoU1NVMV9TU1RYSSwgMjEzKSwKKwlJTlRDX0lSUShJSUMzMCwgMTcyKSwgSU5UQ19JUlEoSUlDMzAsIDE3MyksCisJSU5UQ19JUlEoSUlDMzAsIDE3NCksIElOVENfSVJRKElJQzMwLCAxNzUpLAorCUlOVENfSVJRKElJQzMwLCAxNzYpLAorCUlOVENfSVJRKElJQzMxLCAxNzcpLCBJTlRDX0lSUShJSUMzMSwgMTc4KSwKKwlJTlRDX0lSUShJSUMzMSwgMTc5KSwgSU5UQ19JUlEoSUlDMzEsIDE4MCksCisJSU5UQ19JUlEoSUlDMzEsIDE4MSksCisJSU5UQ19JUlEoSUlDMzIsIDE4MiksIElOVENfSVJRKElJQzMyLCAxODMpLAorCUlOVENfSVJRKElJQzMyLCAxODQpLCBJTlRDX0lSUShJSUMzMiwgMTg1KSwKKwlJTlRDX0lSUShJSUMzMiwgMTg2KSwKKwlJTlRDX0lSUShJSUMzMywgMTg3KSwgSU5UQ19JUlEoSUlDMzMsIDE4OCksCisJSU5UQ19JUlEoSUlDMzMsIDE4OSksIElOVENfSVJRKElJQzMzLCAxOTApLAorCUlOVENfSVJRKElJQzMzLCAxOTEpLAorCUlOVENfSVJRKFNDSUYwLCAxOTIpLCBJTlRDX0lSUShTQ0lGMCwgMTkzKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTk0KSwgSU5UQ19JUlEoU0NJRjAsIDE5NSksCisJSU5UQ19JUlEoU0NJRjEsIDE5NiksIElOVENfSVJRKFNDSUYxLCAxOTcpLAorCUlOVENfSVJRKFNDSUYxLCAxOTgpLCBJTlRDX0lSUShTQ0lGMSwgMTk5KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjAwKSwgSU5UQ19JUlEoU0NJRjIsIDIwMSksCisJSU5UQ19JUlEoU0NJRjIsIDIwMiksIElOVENfSVJRKFNDSUYyLCAyMDMpLAorCUlOVENfSVJRKFNDSUYzLCAyMDQpLCBJTlRDX0lSUShTQ0lGMywgMjA1KSwKKwlJTlRDX0lSUShTQ0lGMywgMjA2KSwgSU5UQ19JUlEoU0NJRjMsIDIwNyksCisJSU5UQ19JUlEoU1NVMCwgMjA4KSwgSU5UQ19JUlEoU1NVMCwgMjA5KSwKKwlJTlRDX0lSUShTU1UwLCAyMTApLAorCUlOVENfSVJRKFNTVTEsIDIxMSksIElOVENfSVJRKFNTVTEsIDIxMiksCisJSU5UQ19JUlEoU1NVMSwgMjEzKSwKIAlJTlRDX0lSUShTU0kwX1NTSUksIDIxNCksIElOVENfSVJRKFNTSTFfU1NJSSwgMjE1KSwKIAlJTlRDX0lSUShTU0kyX1NTSUksIDIxNiksIElOVENfSVJRKFNTSTNfU1NJSSwgMjE3KSwKLQlJTlRDX0lSUShGTENUTF9GTFNURUksIDIyNCksIElOVENfSVJRKEZMQ1RMX0ZMVEVOREksIDIyNSksCi0JSU5UQ19JUlEoRkxDVExfRkxUUkVRMEksIDIyNiksIElOVENfSVJRKEZMQ1RMX0ZMVFJFUTFJLCAyMjcpLAotCUlOVENfSVJRKFJUQ19BUk0sIDIzMSksIElOVENfSVJRKFJUQ19QUkQsIDIzMiksCi0JSU5UQ19JUlEoUlRDX0NVUCwgMjMzKSwKLQlJTlRDX0lSUShSQ0FOMF9FUlMsIDIzNCksIElOVENfSVJRKFJDQU4wX09WUiwgMjM1KSwKLQlJTlRDX0lSUShSQ0FOMF9STTAsIDIzNiksIElOVENfSVJRKFJDQU4wX1JNMSwgMjM3KSwKLQlJTlRDX0lSUShSQ0FOMF9TTEUsIDIzOCksCi0JSU5UQ19JUlEoUkNBTjFfRVJTLCAyMzkpLCBJTlRDX0lSUShSQ0FOMV9PVlIsIDI0MCksCi0JSU5UQ19JUlEoUkNBTjFfUk0wLCAyNDEpLCBJTlRDX0lSUShSQ0FOMV9STTEsIDI0MiksCi0JSU5UQ19JUlEoUkNBTjFfU0xFLCAyNDMpLAorCUlOVENfSVJRKEZMQ1RMLCAyMjQpLCBJTlRDX0lSUShGTENUTCwgMjI1KSwKKwlJTlRDX0lSUShGTENUTCwgMjI2KSwgSU5UQ19JUlEoRkxDVEwsIDIyNyksCisJSU5UQ19JUlEoUlRDLCAyMzEpLCBJTlRDX0lSUShSVEMsIDIzMiksCisJSU5UQ19JUlEoUlRDLCAyMzMpLAorCUlOVENfSVJRKFJDQU4wLCAyMzQpLCBJTlRDX0lSUShSQ0FOMCwgMjM1KSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM2KSwgSU5UQ19JUlEoUkNBTjAsIDIzNyksCisJSU5UQ19JUlEoUkNBTjAsIDIzOCksCisJSU5UQ19JUlEoUkNBTjEsIDIzOSksIElOVENfSVJRKFJDQU4xLCAyNDApLAorCUlOVENfSVJRKFJDQU4xLCAyNDEpLCBJTlRDX0lSUShSQ0FOMSwgMjQyKSwKKwlJTlRDX0lSUShSQ0FOMSwgMjQzKSwKIAogCS8qIFNINzI2My1zcGVjaWZpYyB0cmFzaCAqLwogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMKLQlJTlRDX0lSUShST01ERUNfSVNZLCAyMTgpLCBJTlRDX0lSUShST01ERUNfSUVSUiwgMjE5KSwKLQlJTlRDX0lSUShST01ERUNfSUFSRywgMjIwKSwgSU5UQ19JUlEoUk9NREVDX0lTRUMsIDIyMSksCi0JSU5UQ19JUlEoUk9NREVDX0lCVUYsIDIyMiksIElOVENfSVJRKFJPTURFQ19JUkVBRFksIDIyMyksCisJSU5UQ19JUlEoUk9NREVDLCAyMTgpLCBJTlRDX0lSUShST01ERUMsIDIxOSksCisJSU5UQ19JUlEoUk9NREVDLCAyMjApLCBJTlRDX0lSUShST01ERUMsIDIyMSksCisJSU5UQ19JUlEoUk9NREVDLCAyMjIpLCBJTlRDX0lSUShST01ERUMsIDIyMyksCiAKLQlJTlRDX0lSUShTREhJMywgMjI4KSwgSU5UQ19JUlEoU0RISTAsIDIyOSksIElOVENfSVJRKFNESEkxLCAyMzApLAorCUlOVENfSVJRKFNESEksIDIyOCksIElOVENfSVJRKFNESEksIDIyOSksCisJSU5UQ19JUlEoU0RISSwgMjMwKSwKIAotCUlOVENfSVJRKFNSQ19PVkYsIDI0NCksIElOVENfSVJRKFNSQ19PREZJLCAyNDUpLAotCUlOVENfSVJRKFNSQ19JREVJLCAyNDYpLAorCUlOVENfSVJRKFNSQywgMjQ0KSwgSU5UQ19JUlEoU1JDLCAyNDUpLAorCUlOVENfSVJRKFNSQywgMjQ2KSwKIAogCUlOVENfSVJRKElFQkksIDI0NyksCiAjZW5kaWYKQEAgLTE1NCw1MCArMTMyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ERUksIERNQUMwX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJLCBETUFDMV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSSwgRE1BQzJfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMzLCBETUFDM19ERUksIERNQUMzX0hFSSksCi0JSU5UQ19HUk9VUChETUFDNCwgRE1BQzRfREVJLCBETUFDNF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzUsIERNQUM1X0RFSSwgRE1BQzVfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM2LCBETUFDNl9ERUksIERNQUM2X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNywgRE1BQzdfREVJLCBETUFDN19IRUkpLAotCUlOVENfR1JPVVAoTVRVMF9BQkNELCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBEKSwKLQlJTlRDX0dST1VQKE1UVTBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQlJTlRDX0dST1VQKE1UVTFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyX0FCLCBNVFUyX1RHSTJBLCBNVFUyX1RHSTJCKSwKLQlJTlRDX0dST1VQKE1UVTJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTRfQUJDRCwgTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCksCi0JSU5UQ19HUk9VUChJSUMzMCwgSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksCi0JCSAgIElJQzMwX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMSwgSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksCi0JCSAgIElJQzMxX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMiwgSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksCi0JCSAgIElJQzMyX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMywgSUlDMzNfU1RQSSwgSUlDMzNfTkFLSSwgSUlDMzNfUlhJLCBJSUMzM19UWEksCi0JCSAgIElJQzMzX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKLQlJTlRDX0dST1VQKFNTVTAsIFNTVTBfU1NFUkksIFNTVTBfU1NSWEksIFNTVTBfU1NUWEkpLAotCUlOVENfR1JPVVAoU1NVMSwgU1NVMV9TU0VSSSwgU1NVMV9TU1JYSSwgU1NVMV9TU1RYSSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwKLQkJICAgRkxDVExfRkxUUkVRMUkpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQKSwKLQlJTlRDX0dST1VQKFJDQU4wLCBSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0JCSAgIFJDQU4wX1NMRSksCi0JSU5UQ19HUk9VUChSQ0FOMSwgUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLAotCQkgICBSQ0FOMV9TTEUpLAotCi0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MwotCUlOVENfR1JPVVAoUk9NREVDLCBST01ERUNfSVNZLCBST01ERUNfSUVSUiwgUk9NREVDX0lBUkcsCi0JCSAgIFJPTURFQ19JU0VDLCBST01ERUNfSUJVRiwgUk9NREVDX0lSRUFEWSksCi0JSU5UQ19HUk9VUChTREhJLCBTREhJMywgU0RISTAsIFNESEkxKSwKLQlJTlRDX0dST1VQKFNSQywgU1JDX09WRiwgU1JDX09ERkksIFNSQ19JREVJKSwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTI0MiwyMiArMTc2LDIyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5MywgMTk0LCAxOTUsIDE5MiB9LAorCQkuaXJxcwkJPSAgeyAxOTIsIDE5MiwgMTkyLCAxOTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5NywgMTk4LCAxOTksIDE5NiB9LAorCQkuaXJxcwkJPSAgeyAxOTYsIDE5NiwgMTk2LCAxOTYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwMSwgMjAyLCAyMDMsIDIwMCB9LAorCQkuaXJxcwkJPSAgeyAyMDAsIDIwMCwgMjAwLCAyMDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwNSwgMjA2LCAyMDcsIDIwNCB9LAorCQkuaXJxcwkJPSAgeyAyMDQsIDIwNCwgMjA0LCAyMDQgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMjc4LDE3ICsyMTIsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIzMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMzMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjMxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwppbmRleCBlNmQ0ZWM0Li5jNDZhODM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNINzIwNiBTZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvc2hpbm9yaSBTYXRvCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE5LDM0ICsyMCwyMyBAQAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAogCUFEQ19BREkwLCBBRENfQURJMSwKLQlETUFDMF9ERUksIERNQUMwX0hFSSwgRE1BQzFfREVJLCBETUFDMV9IRUksCi0JRE1BQzJfREVJLCBETUFDMl9IRUksIERNQUMzX0RFSSwgRE1BQzNfSEVJLAotCURNQUM0X0RFSSwgRE1BQzRfSEVJLCBETUFDNV9ERUksIERNQUM1X0hFSSwKLQlETUFDNl9ERUksIERNQUM2X0hFSSwgRE1BQzdfREVJLCBETUFDN19IRUksCi0JQ01UMCwgQ01UMSwgQlNDLCBXRFQsCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCi0JTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VywKLQlQT0UyX09FSTEsIFBPRTJfT0VJMiwKLQlNVFUyU19UR0kzQSwgTVRVMlNfVEdJM0IsIE1UVTJTX1RHSTNDLCBNVFUyU19UR0kzRCwgTVRVMlNfVENJM1YsCi0JTVRVMlNfVEdJNEEsIE1UVTJTX1RHSTRCLCBNVFUyU19UR0k0QywgTVRVMlNfVEdJNEQsIE1UVTJTX1RDSTRWLAotCU1UVTJTX1RHSTVVLCBNVFUyU19UR0k1ViwgTVRVMlNfVEdJNVcsCi0JUE9FMl9PRUkzLAotCUlJQzNfU1RQSSwgSUlDM19OQUtJLCBJSUMzX1JYSSwgSUlDM19UWEksIElJQzNfVEVJLAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCisJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAorCiAJTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKIAlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwgTVRVNSwgUE9FMl8xMiwgTVRVM1NfQUJDRCwgTVRVNFNfQUJDRCwgTVRVNVMsCi0JSUlDMywgU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisJSUlDMywKKworCUNNVDAsIENNVDEsIEJTQywgV0RULAorCisJTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwgTVRVMlNfVENJM1YsIE1UVTJTX1RDSTRWLAorCisJUE9FMl9PRUkzLAorCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisKKwkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTksODYgKzQ5LDU4IEBACiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKIAlJTlRDX0lSUShQSU5UNiwgODYpLCBJTlRDX0lSUShQSU5UNywgODcpLAogCUlOVENfSVJRKEFEQ19BREkwLCA5MiksIElOVENfSVJRKEFEQ19BREkxLCA5NiksCi0JSU5UQ19JUlEoRE1BQzBfREVJLCAxMDgpLCBJTlRDX0lSUShETUFDMF9IRUksIDEwOSksCi0JSU5UQ19JUlEoRE1BQzFfREVJLCAxMTIpLCBJTlRDX0lSUShETUFDMV9IRUksIDExMyksCi0JSU5UQ19JUlEoRE1BQzJfREVJLCAxMTYpLCBJTlRDX0lSUShETUFDMl9IRUksIDExNyksCi0JSU5UQ19JUlEoRE1BQzNfREVJLCAxMjApLCBJTlRDX0lSUShETUFDM19IRUksIDEyMSksCi0JSU5UQ19JUlEoRE1BQzRfREVJLCAxMjQpLCBJTlRDX0lSUShETUFDNF9IRUksIDEyNSksCi0JSU5UQ19JUlEoRE1BQzVfREVJLCAxMjgpLCBJTlRDX0lSUShETUFDNV9IRUksIDEyOSksCi0JSU5UQ19JUlEoRE1BQzZfREVJLCAxMzIpLCBJTlRDX0lSUShETUFDNl9IRUksIDEzMyksCi0JSU5UQ19JUlEoRE1BQzdfREVJLCAxMzYpLCBJTlRDX0lSUShETUFDN19IRUksIDEzNyksCisJSU5UQ19JUlEoRE1BQzAsIDEwOCksIElOVENfSVJRKERNQUMwLCAxMDkpLAorCUlOVENfSVJRKERNQUMxLCAxMTIpLCBJTlRDX0lSUShETUFDMSwgMTEzKSwKKwlJTlRDX0lSUShETUFDMiwgMTE2KSwgSU5UQ19JUlEoRE1BQzIsIDExNyksCisJSU5UQ19JUlEoRE1BQzMsIDEyMCksIElOVENfSVJRKERNQUMzLCAxMjEpLAorCUlOVENfSVJRKERNQUM0LCAxMjQpLCBJTlRDX0lSUShETUFDNCwgMTI1KSwKKwlJTlRDX0lSUShETUFDNSwgMTI4KSwgSU5UQ19JUlEoRE1BQzUsIDEyOSksCisJSU5UQ19JUlEoRE1BQzYsIDEzMiksIElOVENfSVJRKERNQUM2LCAxMzMpLAorCUlOVENfSVJRKERNQUM3LCAxMzYpLCBJTlRDX0lSUShETUFDNywgMTM3KSwKIAlJTlRDX0lSUShDTVQwLCAxNDApLCBJTlRDX0lSUShDTVQxLCAxNDQpLAogCUlOVENfSVJRKEJTQywgMTQ4KSwgSU5UQ19JUlEoV0RULCAxNTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDE1NiksIElOVENfSVJRKE1UVTJfVEdJMEIsIDE1NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTU4KSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTU5KSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxNjApLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDE2MSksIElOVENfSVJRKE1UVTJfVEdJMEYsIDE2MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTY0KSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTY1KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxNjgpLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxNjkpLAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDE3MiksIElOVENfSVJRKE1UVTJfVEdJMkIsIDE3MyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTc2KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTc3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxODApLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxODEpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDE4MiksIElOVENfSVJRKE1UVTJfVEdJM0QsIDE4MyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNTYpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE1NyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNTgpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE1OSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE2MCksIElOVENfSVJRKE1UVTBfVkVGLCAxNjEpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNjIpLAorCUlOVENfSVJRKE1UVTFfQUIsIDE2NCksIElOVENfSVJRKE1UVTFfQUIsIDE2NSksCisJSU5UQ19JUlEoTVRVMV9WVSwgMTY4KSwgSU5UQ19JUlEoTVRVMV9WVSwgMTY5KSwKKwlJTlRDX0lSUShNVFUyX0FCLCAxNzIpLCBJTlRDX0lSUShNVFUyX0FCLCAxNzMpLAorCUlOVENfSVJRKE1UVTJfVlUsIDE3NiksIElOVENfSVJRKE1UVTJfVlUsIDE3NyksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxODApLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MSksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxODIpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MyksCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTg0KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxODgpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxODkpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE5MCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE5MSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxODgpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE4OSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxOTApLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE5MSksCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTkyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTVVLCAxOTYpLCBJTlRDX0lSUShNVFUyX1RHSTVWLCAxOTcpLAotCUlOVENfSVJRKE1UVTJfVEdJNVcsIDE5OCksCi0JSU5UQ19JUlEoUE9FMl9PRUkxLCAyMDApLCBJTlRDX0lSUShQT0UyX09FSTIsIDIwMSksCi0JSU5UQ19JUlEoTVRVMlNfVEdJM0EsIDIwNCksIElOVENfSVJRKE1UVTJTX1RHSTNCLCAyMDUpLAotCUlOVENfSVJRKE1UVTJTX1RHSTNDLCAyMDYpLCBJTlRDX0lSUShNVFUyU19UR0kzRCwgMjA3KSwKKwlJTlRDX0lSUShNVFU1LCAxOTYpLCBJTlRDX0lSUShNVFU1LCAxOTcpLAorCUlOVENfSVJRKE1UVTUsIDE5OCksCisJSU5UQ19JUlEoUE9FMl8xMiwgMjAwKSwgSU5UQ19JUlEoUE9FMl8xMiwgMjAxKSwKKwlJTlRDX0lSUShNVFUzU19BQkNELCAyMDQpLCBJTlRDX0lSUShNVFUzU19BQkNELCAyMDUpLAorCUlOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNiksIElOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNyksCiAJSU5UQ19JUlEoTVRVMlNfVENJM1YsIDIwOCksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNEEsIDIxMiksIElOVENfSVJRKE1UVTJTX1RHSTRCLCAyMTMpLAotCUlOVENfSVJRKE1UVTJTX1RHSTRDLCAyMTQpLCBJTlRDX0lSUShNVFUyU19UR0k0RCwgMjE1KSwKKwlJTlRDX0lSUShNVFU0U19BQkNELCAyMTIpLCBJTlRDX0lSUShNVFU0U19BQkNELCAyMTMpLAorCUlOVENfSVJRKE1UVTRTX0FCQ0QsIDIxNCksIElOVENfSVJRKE1UVTRTX0FCQ0QsIDIxNSksCiAJSU5UQ19JUlEoTVRVMlNfVENJNFYsIDIxNiksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNVUsIDIyMCksIElOVENfSVJRKE1UVTJTX1RHSTVWLCAyMjEpLAotCUlOVENfSVJRKE1UVTJTX1RHSTVXLCAyMjIpLAorCUlOVENfSVJRKE1UVTVTLCAyMjApLCBJTlRDX0lSUShNVFU1UywgMjIxKSwKKwlJTlRDX0lSUShNVFU1UywgMjIyKSwKIAlJTlRDX0lSUShQT0UyX09FSTMsIDIyNCksCi0JSU5UQ19JUlEoSUlDM19TVFBJLCAyMjgpLCBJTlRDX0lSUShJSUMzX05BS0ksIDIyOSksCi0JSU5UQ19JUlEoSUlDM19SWEksIDIzMCksIElOVENfSVJRKElJQzNfVFhJLCAyMzEpLAotCUlOVENfSVJRKElJQzNfVEVJLCAyMzIpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMjQwKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAyNDEpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMjQyKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAyNDMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMjQ0KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAyNDUpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMjQ2KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAyNDcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMjQ4KSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAyNDkpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMjUwKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAyNTEpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMjUyKSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAyNTMpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMjU0KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAyNTUpLAorCUlOVENfSVJRKElJQzMsIDIyOCksIElOVENfSVJRKElJQzMsIDIyOSksCisJSU5UQ19JUlEoSUlDMywgMjMwKSwgSU5UQ19JUlEoSUlDMywgMjMxKSwKKwlJTlRDX0lSUShJSUMzLCAyMzIpLAorCUlOVENfSVJRKFNDSUYwLCAyNDApLCBJTlRDX0lSUShTQ0lGMCwgMjQxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjQyKSwgSU5UQ19JUlEoU0NJRjAsIDI0MyksCisJSU5UQ19JUlEoU0NJRjEsIDI0NCksIElOVENfSVJRKFNDSUYxLCAyNDUpLAorCUlOVENfSVJRKFNDSUYxLCAyNDYpLCBJTlRDX0lSUShTQ0lGMSwgMjQ3KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjQ4KSwgSU5UQ19JUlEoU0NJRjIsIDI0OSksCisJSU5UQ19JUlEoU0NJRjIsIDI1MCksIElOVENfSVJRKFNDSUYyLCAyNTEpLAorCUlOVENfSVJRKFNDSUYzLCAyNTIpLCBJTlRDX0lSUShTQ0lGMywgMjUzKSwKKwlJTlRDX0lSUShTQ0lGMywgMjU0KSwgSU5UQ19JUlEoU0NJRjMsIDI1NSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfREVJLCBETUFDMF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSSwgRE1BQzFfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUksIERNQUMyX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMywgRE1BQzNfREVJLCBETUFDM19IRUkpLAotCUlOVENfR1JPVVAoRE1BQzQsIERNQUM0X0RFSSwgRE1BQzRfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM1LCBETUFDNV9ERUksIERNQUM1X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNiwgRE1BQzZfREVJLCBETUFDNl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzcsIERNQUM3X0RFSSwgRE1BQzdfSEVJKSwKLQlJTlRDX0dST1VQKE1UVTBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0JSU5UQ19HUk9VUChNVFUxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVNSwgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChQT0UyXzEyLCBQT0UyX09FSTEsIFBPRTJfT0VJMiksCi0JSU5UQ19HUk9VUChNVFUzU19BQkNELCBNVFUyU19UR0kzQSwgTVRVMlNfVEdJM0IsCi0JCSAgIE1UVTJTX1RHSTNDLCBNVFUyU19UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0U19BQkNELCBNVFUyU19UR0k0QSwgTVRVMlNfVEdJNEIsCi0JCSAgIE1UVTJTX1RHSTRDLCBNVFUyU19UR0k0RCksCi0JSU5UQ19HUk9VUChNVFU1UywgTVRVMlNfVEdJNVUsIE1UVTJTX1RHSTVWLCBNVFUyU19UR0k1VyksCi0JSU5UQ19HUk9VUChJSUMzLCBJSUMzX1NUUEksIElJQzNfTkFLSSwgSUlDM19SWEksIElJQzNfVFhJLCBJSUMzX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xNzQsMjIgKzEzNiwyMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDEsIDI0MiwgMjQzLCAyNDAgfSwKKwkJLmlycXMJCT0geyAyNDAsIDI0MCwgMjQwLCAyNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0NSwgMjQ2LCAyNDcsIDI0NCB9LAorCQkuaXJxcwkJPSB7IDI0NCwgMjQ0LCAyNDQsIDI0NCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQ5LCAyNTAsIDI1MSwgMjQ4IH0sCisJCS5pcnFzCQk9IHsgMjQ4LCAyNDgsIDI0OCwgMjQ4IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNTMsIDI1NCwgMjU1LCAyNTIgfSwKKwkJLmlycXMJCT0geyAyNTIsIDI1MiwgMjUyLCAyNTIgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKaW5kZXggZTA3YzY5ZS4uZWNhYjI3NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCkBAIC00LDYgKzQsOCBAQAogCiBvYmoteQk6PSBleC5vIHByb2JlLm8gZW50cnkubyBzZXR1cC1zaDMubwogCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSBzd3N1c3AubworCiAjIENQVSBzdWJ0eXBlIHNldHVwCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQkrPSBzZXR1cC1zaDc3MDUubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikJKz0gc2V0dXAtc2g3NzB4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwppbmRleCBiNDEwNmQwLi41NWRhMGZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGNwdS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKICEgTk9URToKICEgR05VIGFzIChhcyBvZiAyLjkuMSkgY2hhbmdlcyBiZi9zIGludG8gYnQvcyBhbmQgYnJhLCB3aGVuIHRoZSBhZGRyZXNzCkBAIC0xODcsNDQgKzE4OCwzNSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCiAJLyogVW53aW5kIHRoZSBzdGFjayBhbmQgam1wIHRvIHRoZSBkZWJ1ZyBlbnRyeSAqLwogRU5UUlkoc2hfYmlvc19oYW5kbGVyKQotCW1vdi5sCUByMTUrLCByMAotCW1vdi5sCUByMTUrLCByMQotCW1vdi5sCUByMTUrLCByMgotCW1vdi5sCUByMTUrLCByMwotCW1vdi5sCUByMTUrLCByNAotCW1vdi5sCUByMTUrLCByNQotCW1vdi5sCUByMTUrLCByNgotCW1vdi5sCUByMTUrLCByNwotCXN0YwlzciwgcjgKLQltb3YubAkxZiwgcjkJCQkhIEJMID0xLCBSQj0xLCBJTUFTSz0weDBGCi0Jb3IJcjksIHI4Ci0JbGRjCXI4LCBzcgkJCSEgaGVyZSwgY2hhbmdlIHRoZSByZWdpc3RlciBiYW5rCi0JbW92LmwJQHIxNSssIHI4Ci0JbW92LmwJQHIxNSssIHI5Ci0JbW92LmwJQHIxNSssIHIxMAotCW1vdi5sCUByMTUrLCByMTEKLQltb3YubAlAcjE1KywgcjEyCi0JbW92LmwJQHIxNSssIHIxMwotCW1vdi5sCUByMTUrLCByMTQKLQltb3YubAlAcjE1KywgazAKLQlsZGMubAlAcjE1Kywgc3BjCi0JbGRzLmwJQHIxNSssIHByCi0JbW92LmwJQHIxNSssIGsxCi0JbGRjLmwJQHIxNSssIGdicgotCWxkcy5sCUByMTUrLCBtYWNoCi0JbGRzLmwJQHIxNSssIG1hY2wKLQltb3YJazAsIHIxNQorCW1vdi5sCTFmLCByOAorCWJzcglyZXN0b3JlX3JlZ3MKKwkgbm9wCisKKwlsZHMJazIsIHByCQkJISByZXN0b3JlIHByCisJbW92CWs0LCByMTUKIAkhCiAJbW92LmwJMmYsIGswCiAJbW92LmwJQGswLCBrMAogCWptcAlAazAKLQkgbGRjCWsxLCBzc3IKKwkgbGRjCWszLCBzc3IKIAkuYWxpZ24JMgogMToJLmxvbmcJMHgzMDAwMDBmMAogMjoJLmxvbmcJZ2RiX3Zicl92ZWN0b3IKICNlbmRpZiAvKiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyAqLwogCi1yZXN0b3JlX2FsbDoKKyEgcmVzdG9yZV9yZWdzKCkKKyEgLSByZXN0b3JlIHIwLCByMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByNyBmcm9tIHRoZSBzdGFjaworISAtIHN3aXRjaCBiYW5rCishIC0gcmVzdG9yZSByOCwgcjksIHIxMCwgcjExLCByMTIsIHIxMywgcjE0LCByMTUgZnJvbSB0aGUgc3RhY2sKKyEgLSByZXN0b3JlIHNwYywgcHIqLCBzc3IsIGdiciwgbWFjaCwgbWFjbCwgc2tpcCBkZWZhdWx0IHRyYQorISBrMiByZXR1cm5zIG9yaWdpbmFsIHByCishIGszIHJldHVybnMgb3JpZ2luYWwgc3IKKyEgazQgcmV0dXJucyBvcmlnaW5hbCBzdGFjayBwb2ludGVyCishIHI4IHBhc3NlcyBTUiBiaXRtYXNrLCBvdmVyd3JpdHRlbiB3aXRoIHJlc3RvcmVkIGRhdGEgb24gcmV0dXJuCishIHI5IHRyYXNoZWQKKyEgQkw9MCBvbiBlbnRyeSwgb24gZXhpdCBCTD0xIChkZXBlbmRpbmcgb24gcjgpLgorCitFTlRSWShyZXN0b3JlX3JlZ3MpCiAJbW92LmwJQHIxNSssIHIwCiAJbW92LmwJQHIxNSssIHIxCiAJbW92LmwJQHIxNSssIHIyCkBAIC0yMzQsMTAgKzIyNiw5IEBACiAJbW92LmwJQHIxNSssIHI2CiAJbW92LmwJQHIxNSssIHI3CiAJIQotCXN0YwlzciwgcjgKLQltb3YubAk3ZiwgcjkKLQlvcglyOSwgcjgJCQkhIEJMID0xLCBSQj0xCi0JbGRjCXI4LCBzcgkJCSEgaGVyZSwgY2hhbmdlIHRoZSByZWdpc3RlciBiYW5rCisJc3RjCXNyLCByOQorCW9yCXI4LCByOQorCWxkYwlyOSwgc3IKIAkhCiAJbW92LmwJQHIxNSssIHI4CiAJbW92LmwJQHIxNSssIHI5CkBAIC0yNDgsMTIgKzIzOSwyMCBAQAogCW1vdi5sCUByMTUrLCByMTQKIAltb3YubAlAcjE1KywgazQJCSEgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgogCWxkYy5sCUByMTUrLCBzcGMKLQlsZHMubAlAcjE1KywgcHIKKwltb3YubAlAcjE1KywgazIJCSEgb3JpZ2luYWwgUFIKIAltb3YubAlAcjE1KywgazMJCSEgb3JpZ2luYWwgU1IKIAlsZGMubAlAcjE1KywgZ2JyCiAJbGRzLmwJQHIxNSssIG1hY2gKIAlsZHMubAlAcjE1KywgbWFjbAotCWFkZAkjNCwgcjE1CQkJISBTa2lwIHN5c2NhbGwgbnVtYmVyCisJcnRzCisJIGFkZAkjNCwgcjE1CQkJISBTa2lwIHN5c2NhbGwgbnVtYmVyCisKK3Jlc3RvcmVfYWxsOgorCW1vdi5sCTdmLCByOAorCWJzcglyZXN0b3JlX3JlZ3MKKwkgbm9wCisKKwlsZHMJazIsIHByCQkJISByZXN0b3JlIHByCiAJIQogI2lmZGVmIENPTkZJR19TSF9EU1AKIAltb3YubAlAcjE1KywgazAJCSEgRFNQIG1vZGUgbWFya2VyCkBAIC0yOTQsNyArMjkzLDcgQEAKIAltb3YJIzB4ZjAsIGsxCiAJZXh0dS5iCWsxLCBrMQogCW5vdAlrMSwgazEKLQlhbmQJazEsIGsyCQkJISBNYXNrIG9yaWduYWwgU1IgdmFsdWUKKwlhbmQJazEsIGsyCQkJISBNYXNrIG9yaWdpbmFsIFNSIHZhbHVlCiAJIQogCW1vdglrMywgazAJCQkhIENhbGN1bGF0ZSBJTUFTSy1iaXRzCiAJc2hscjIJazAKQEAgLTMxMyw3ICszMTIsNiBAQAogCW1vdgkjMCwgazEKIAltb3YuYglrMSwgQGswCiAjZW5kaWYKLQltb3YubAlAcjE1KywgazIJCSEgcmVzdG9yZSBFWFBFVlQKIAltb3YJazQsIHIxNQogCXJ0ZQogCSBub3AKQEAgLTMzNiw4MSArMzM0LDU1IEBACiBFTlRSWSh2YnJfYmFzZSkKIAkubG9uZwkwCiAhCishIDB4MTAwOiBHZW5lcmFsIGV4Y2VwdGlvbiB2ZWN0b3IKKyEKIAkuYmFsaWduIAkyNTYsMCwyNTYKIGdlbmVyYWxfZXhjZXB0aW9uOgotCW1vdi5sCTFmLCBrMgotCW1vdi5sCTJmLCBrMwotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzCi0JbW92LmwJQGsyLCBrMgorI2lmbmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMworCWJyYQloYW5kbGVfZXhjZXB0aW9uCisJIHN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworI2Vsc2UKKwltb3YubAkxZiwgazQKKwltb3YubAlAazQsIGs0CiAKIAkhIElzIEVYUEVWVCBsYXJnZXIgdGhhbiAweDgwMD8KIAltb3YJIzB4OCwgazAKIAlzaGxsOAlrMAotCWNtcC9ocwlrMCwgazIKKwljbXAvaHMJazAsIGs0CiAJYmYJMGYKIAogCSEgdGhlbiBhZGQgMHg1ODAgKGsyIGlzIDB4ZDgwIG9yIDB4ZGEwKQogCW1vdgkjMHg1OCwgazAKIAlzaGxsMglrMAogCXNobGwyCWswCi0JYWRkCWswLCBrMgorCWFkZAlrMCwgazQKIDA6Ci0JYnJhCWhhbmRsZV9leGNlcHRpb24KKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCiAJIG5vcAotI2Vsc2UKLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YubAlAazIsIGsyCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdgkJazQsIGsyCQkhIGtlZXAgdmVjdG9yIGluIGsyCisJbW92LmwJMWYsIGs0CQkhIFNSIGJpdHMgdG8gY2xlYXIgaW4gazQKKwlic3IJc2F2ZV9yZWdzCSEgbmVlZHMgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKwkgbm9wCisKKwlicmEJaGFuZGxlX2V4Y2VwdGlvbl9zcGVjaWFsCisJIG5vcAorCisJLmFsaWduCTIKKzE6CS5sb25nCUVYUEVWVAogI2VuZGlmCi0JLmFsaWduCTIKLTE6CS5sb25nCUVYUEVWVAotMjoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCi0hCi0hCiAKLQkuYmFsaWduIAkxMDI0LDAsMTAyNAotdGxiX21pc3M6Ci0JbW92LmwJMWYsIGsyCi0JbW92LmwJNGYsIGszCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92LmwJQGsyLCBrMgotIQotCS5iYWxpZ24gCTUxMiwwLDUxMgotaW50ZXJydXB0OgotCW1vdi5sCTNmLCBrMwotI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCi0JbW92LmwJMmYsIGsyCi0JISBEZWJvdW5jZSAoZmlsdGVyIG5lc3RlZCBOTUkpCi0JbW92LmwJQGsyLCBrMAotCW1vdi5sCTVmLCBrMQotCWNtcC9lcQlrMSwgazAKLQliZgkwZgotCW1vdi5sCTZmLCBrMQotCXRhcy5iCUBrMQotCWJ0CTBmCi0JcnRlCi0JIG5vcAotCS5hbGlnbgkyCi0yOgkubG9uZwlJTlRFVlQKLTU6CS5sb25nCU5NSV9WRUMKLTY6CS5sb25nCWluX25taQotMDoKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19LR0RCKSAqLwotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdgkjLTEsIGsyCQkhIGludGVycnVwdCBleGNlcHRpb24gbWFya2VyCishIHByZXBhcmVfc3RhY2tfc2F2ZV9kc3AoKQorISAtIHJvbGwgYmFjayBnUkIKKyEgLSBzd2l0Y2ggdG8ga2VybmVsIHN0YWNrCishIC0gc2F2ZSBEU1AKKyEgazAgcmV0dXJucyBvcmlnaW5hbCBzcCAoYWZ0ZXIgcm9sbCBiYWNrKQorISBrMSB0cmFzaGVkCishIGsyIHRyYXNoZWQKIAotCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTM6CS5sb25nCXJldF9mcm9tX2lycQotNDoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCi0KLSEKLSEKLQkuYWxpZ24JMgotRU5UUlkoaGFuZGxlX2V4Y2VwdGlvbikKLQkhIFVzaW5nIGswLCBrMSBmb3Igc2NyYXRjaCByZWdpc3RlcnMgKHIwX2JhbmsxLCByMV9iYW5rKSwKLQkhIHNhdmUgYWxsIHJlZ2lzdGVycyBvbnRvIHN0YWNrLgotCSEKLQorcHJlcGFyZV9zdGFja19zYXZlX2RzcDoKICNpZmRlZiBDT05GSUdfR1VTQQogCSEgQ2hlY2sgZm9yIHJvbGwgYmFjayBnUkIgKFVzZXIgYW5kIEtlcm5lbCkKIAltb3YJcjE1LCBrMApAQCAtNDMwLDcgKzQwMiw3IEBACiAyOgltb3YJazEsIHIxNQkJISBTUCA9IHIxCiAxOgogI2VuZGlmCi0KKwkhIFN3aXRjaCB0byBrZXJuZWwgc3RhY2sgaWYgbmVlZGVkCiAJc3RjCXNzciwgazAJCSEgSXMgaXQgZnJvbSBrZXJuZWwgc3BhY2U/CiAJc2hsbAlrMAkJISBDaGVjayBNRCBiaXQgKGJpdDMwKSBieSBzaGlmdGluZyBpdCBpbnRvLi4uCiAJc2hsbAlrMAkJISAgICAgICAuLi50aGUgVCBiaXQKQEAgLTQ0MywxOCArNDE1LDE3IEBACiAJYWRkCWN1cnJlbnQsIGsxCiAJbW92CWsxLCByMTUJCSEgY2hhbmdlIHRvIGtlcm5lbCBzdGFjawogCSEKLTE6CW1vdi5sCTJmLCBrMQotCSEKKzE6CiAjaWZkZWYgQ09ORklHX1NIX0RTUAotCW1vdi5sCXIyLCBALXIxNQkJISBTYXZlIHIyLCB3ZSBuZWVkIGFub3RoZXIgcmVnCi0Jc3RjCXNyLCBrNAotCW1vdi5sCTFmLCByMgotCXRzdAlyMiwgazQJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlCi0JbW92LmwJQHIxNSssIHIyCQkhIFJlc3RvcmUgcjIgbm93CisJISBTYXZlIERTUCBjb250ZXh0IGlmIG5lZWRlZAorCXN0YwlzciwgazEKKwltb3YJIzB4MTAsIGsyCisJc2hsbDggICBrMgkJCSEgRFNQPTEgKDB4MDAwMDEwMDApCisJdHN0CWsyLCBrMQkJCSEgQ2hlY2sgaWYgaW4gRFNQIG1vZGUgKHBhc3NlZCBpbiBrMikKIAlidC9zCXNraXBfc2F2ZQotCSBtb3YJIzAsIGs0CQkJISBTZXQgbWFya2VyIGZvciBubyBzdGFjayBmcmFtZQorCSBtb3YJIzAsIGsxCQkJISBTZXQgbWFya2VyIGZvciBubyBzdGFjayBmcmFtZQogCi0JbW92CXIyLCBrNAkJCSEgQmFja3VwIHIyIChpbiBrNCkgZm9yIGxhdGVyCisJbW92CWsyLCBrMQkJCSEgU2F2ZSBoYXMtZnJhbWUgbWFya2VyCiAKIAkhIFNhdmUgRFNQIHJlZ2lzdGVycyBvbiBzdGFjawogCXN0Yy5sCW1vZCwgQC1yMTUKQEAgLTQ3MywzNSArNDQ0LDc0IEBACiAJISBhcyB3ZSdyZSBub3QgYXQgYWxsIGludGVyZXN0ZWQgaW4gc3VwcG9ydGluZyBhbmNpZW50IHRvb2xjaGFpbnMgYXQKIAkhIHRoaXMgcG9pbnQuIC0tIFBGTS4KIAotCW1vdglyMTUsIHIyCisJbW92CXIxNSwgazIKIAkud29yZAkweGY2NTMJCQkhIG1vdnMubAlhMSwgQC1yMgogCS53b3JkCTB4ZjZmMwkJCSEgbW92cy5sCWEwZywgQC1yMgogCS53b3JkCTB4ZjZkMwkJCSEgbW92cy5sCWExZywgQC1yMgogCS53b3JkCTB4ZjZjMwkJCSEgbW92cy5sCW0wLCBALXIyCiAJLndvcmQJMHhmNmUzCQkJISBtb3ZzLmwJbTEsIEAtcjIKLQltb3YJcjIsIHIxNQorCW1vdglrMiwgcjE1CiAKLQltb3YJazQsIHIyCQkJISBSZXN0b3JlIHIyCi0JbW92LmwJMWYsIGs0CQkJISBGb3JjZSBEU1Agc3RhY2sgZnJhbWUKIHNraXBfc2F2ZToKLQltb3YubAlrNCwgQC1yMTUJCSEgUHVzaCBEU1AgbW9kZSBtYXJrZXIgb250byBzdGFjaworCW1vdi5sCWsxLCBALXIxNQkJISBQdXNoIERTUCBtb2RlIG1hcmtlciBvbnRvIHN0YWNrCiAjZW5kaWYKLQkhIFNhdmUgdGhlIHVzZXIgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4KLQltb3YubAlrMiwgQC1yMTUJISBFWFBFVlQKKwlydHMKKwkgbm9wCishCishIDB4NDAwOiBJbnN0cnVjdGlvbiBhbmQgRGF0YSBUTEIgbWlzcyBleGNlcHRpb24gdmVjdG9yCishCisJLmJhbGlnbiAJMTAyNCwwLDEwMjQKK3RsYl9taXNzOgorCXN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMwogCi0JbW92CSMtMSwgazQKLQltb3YubAlrNCwgQC1yMTUJISBzZXQgVFJBIChkZWZhdWx0OiAtMSkKLQkhCitoYW5kbGVfZXhjZXB0aW9uOgorCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCisKKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJIFBSRUYoazApCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdi5sCTVmLCBrMgkJISB2ZWN0b3IgcmVnaXN0ZXIgYWRkcmVzcworCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG1vdi5sCUBrMiwgazIJCSEgcmVhZCBvdXQgdmVjdG9yIGFuZCBrZWVwIGluIGsyCisKK2hhbmRsZV9leGNlcHRpb25fc3BlY2lhbDoKKwkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGV4Y2VwdGlvbiBoYW5kbGVyCisJbW92LmwJN2YsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCisJc3RjCXIyX2JhbmssIHIwCSEgazIgKHZlY3RvcikKKwltb3YubAk2ZiwgcjEwCisJc2hscjIJcjAKKwlzaGxyCXIwCisJbW92LmwJQChyMCwgcjEwKSwgcjEwCisJam1wCUByMTAKKwkgbGRzCXI5LCBwcgkJISBwdXQgcmV0dXJuIGFkZHJlc3MgaW4gcHIKKworCS5hbGlnbglMMV9DQUNIRV9TSElGVAorCishIHNhdmVfcmVncygpCishIC0gc2F2ZSBkZWZhdWx0IHRyYSwgbWFjbCwgbWFjaCwgZ2JyLCBzc3IsIHByKiBhbmQgc3BjIG9uIHRoZSBzdGFjaworISAtIHNhdmUgcjE1KiwgcjE0LCByMTMsIHIxMiwgcjExLCByMTAsIHI5LCByOCBvbiB0aGUgc3RhY2sKKyEgLSBzd2l0Y2ggYmFuaworISAtIHNhdmUgcjcsIHI2LCByNSwgcjQsIHIzLCByMiwgcjEsIHIwIG9uIHRoZSBzdGFjaworISBrMCBjb250YWlucyBvcmlnaW5hbCBzdGFjayBwb2ludGVyKgorISBrMSB0cmFzaGVkCishIGszIHBhc3NlcyBvcmlnaW5hbCBwcioKKyEgazQgcGFzc2VzIFNSIGJpdG1hc2sKKyEgQkw9MSBvbiBlbnRyeSwgb24gZXhpdCBCTD0wLgorCitFTlRSWShzYXZlX3JlZ3MpCisJbW92CSMtMSwgcjEKKwltb3YubAlrMSwgQC1yMTUJISBzZXQgVFJBIChkZWZhdWx0OiAtMSkKIAlzdHMubAltYWNsLCBALXIxNQogCXN0cy5sCW1hY2gsIEAtcjE1CiAJc3RjLmwJZ2JyLCBALXIxNQogCXN0Yy5sCXNzciwgQC1yMTUKLQlzdHMubAlwciwgQC1yMTUKKwltb3YubAlrMywgQC1yMTUJISBvcmlnaW5hbCBwciBpbiBrMwogCXN0Yy5sCXNwYywgQC1yMTUKLQkhCi0JbGRzCWszLCBwcgkJISBTZXQgdGhlIHJldHVybiBhZGRyZXNzIHRvIHByCi0JIQotCW1vdi5sCWswLCBALXIxNQkhIHNhdmUgb3JpZ25hbCBzdGFjaworCisJbW92LmwJazAsIEAtcjE1CSEgb3JpZ2luYWwgc3RhY2sgcG9pbnRlciBpbiBrMAogCW1vdi5sCXIxNCwgQC1yMTUKIAltb3YubAlyMTMsIEAtcjE1CiAJbW92LmwJcjEyLCBALXIxNQpAQCAtNTA5LDEzICs1MTksMjMgQEAKIAltb3YubAlyMTAsIEAtcjE1CiAJbW92LmwJcjksIEAtcjE1CiAJbW92LmwJcjgsIEAtcjE1Ci0JIQotCXN0YwlzciwgcjgJCSEgQmFjayB0byBub3JtYWwgcmVnaXN0ZXIgYmFuaywgYW5kCi0Jb3IJazEsIHI4CQkhIEJsb2NrIGFsbCBpbnRlcnJ1cHRzCi0JbW92LmwJM2YsIGsxCi0JYW5kCWsxLCByOAkJISAuLi4KLQlsZGMJcjgsIHNyCQkhIC4uLmNoYW5nZWQgaGVyZS4KLQkhCisKKwltb3YubAkwZiwgazMJCSEgU1IgYml0cyB0byBzZXQgaW4gazMKKworCSEgZmFsbC10aHJvdWdoCisKKyEgc2F2ZV9sb3dfcmVncygpCishIC0gbW9kaWZ5IFNSIGZvciBiYW5rIHN3aXRjaAorISAtIHNhdmUgcjcsIHI2LCByNSwgcjQsIHIzLCByMiwgcjEsIHIwIG9uIHRoZSBzdGFjaworISBrMyBwYXNzZXMgYml0cyB0byBzZXQgaW4gU1IKKyEgazQgcGFzc2VzIGJpdHMgdG8gY2xlYXIgaW4gU1IKKworRU5UUlkoc2F2ZV9sb3dfcmVncykKKwlzdGMJc3IsIHI4CisJb3IJazMsIHI4CisJYW5kCWs0LCByOAorCWxkYwlyOCwgc3IKKwogCW1vdi5sCXI3LCBALXIxNQogCW1vdi5sCXI2LCBALXIxNQogCW1vdi5sCXI1LCBALXIxNQpAQCAtNTIzLDUyICs1NDMsNjMgQEAKIAltb3YubAlyMywgQC1yMTUKIAltb3YubAlyMiwgQC1yMTUKIAltb3YubAlyMSwgQC1yMTUKLQltb3YubAlyMCwgQC1yMTUKLQotCS8qCi0JICogVGhpcyBnZXRzIGEgYml0IHRyaWNreS4uIGluIHRoZSBJTlRFVlQgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHVzZQotCSAqIHRoZSBWQlIgb2Zmc2V0IGFzIGEgZGVzdGluYXRpb24gaW4gdGhlIGp1bXAgY2FsbCB0YWJsZSwgc2luY2UgYWxsCi0JICogb2YgdGhlIGRlc3RpbmF0aW9ucyBhcmUgdGhlIHNhbWUuIEluIHRoaXMgY2FzZSwgKGludGVycnVwdCkgc2V0cwotCSAqIGEgbWFya2VyIGluIHIyIChub3cgcjJfYmFuayBzaW5jZSBTUi5SQiBjaGFuZ2VkKSwgd2hpY2ggd2UgY2hlY2sKLQkgKiB0byBkZXRlcm1pbmUgdGhlIGV4Y2VwdGlvbiB0eXBlLiBGb3IgYWxsIG90aGVyIGV4Y2VwdGlvbnMsIHdlCi0JICogZm9yY2libHkgcmVhZCBFWFBFVlQgZnJvbSBtZW1vcnkgYW5kIGZpeCB1cCB0aGUganVtcCBhZGRyZXNzLCBpbgotCSAqIHRoZSBpbnRlcnJ1cHQgZXhjZXB0aW9uIGNhc2Ugd2UganVtcCB0byBkb19JUlEoKSBhbmQgZGVmZXIgdGhlCi0JICogSU5URVZUIHJlYWQgdW50aWwgdGhlcmUuIEFzIGEgYm9udXMsIHdlIGNhbiBhbHNvIGNsZWFuIHVwIHRoZSBTUi5SQgotCSAqIGNoZWNrcyB0aGF0IGRvX0lSUSgpIHdhcyBkb2luZy4uCi0JICovCi0Jc3RjCXIyX2JhbmssIHI4Ci0JY21wL3B6CXI4Ci0JYmYJaW50ZXJydXB0X2V4Y2VwdGlvbgotCXNobHIyCXI4Ci0Jc2hscglyOAotCW1vdi5sCTRmLCByOQotCWFkZAlyOCwgcjkKLQltb3YubAlAcjksIHI5Ci0Jam1wCUByOQotCSBub3AKIAlydHMKKwkgbW92LmwJcjAsIEAtcjE1CisKKyEKKyEgMHg2MDA6IEludGVycnVwdCAvIE5NSSB2ZWN0b3IKKyEKKwkuYmFsaWduIAk1MTIsMCw1MTIKK0VOVFJZKGhhbmRsZV9pbnRlcnJ1cHQpCisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikKKwltb3YubAkyZiwgazIKKwkhIERlYm91bmNlIChmaWx0ZXIgbmVzdGVkIE5NSSkKKwltb3YubAlAazIsIGswCisJbW92LmwJOWYsIGsxCisJY21wL2VxCWsxLCBrMAorCWJmCTExZgorCW1vdi5sCTEwZiwgazEKKwl0YXMuYglAazEKKwlidAkxMWYKKwlydGUKIAkgbm9wCi0KIAkuYWxpZ24JMgotMToJLmxvbmcJMHgwMDAwMTAwMAkhIERTUD0xCi0yOgkubG9uZwkweDAwMDA4MGYwCSEgRkQ9MSwgSU1BU0s9MTUKLTM6CS5sb25nCTB4Y2ZmZmZmZmYJISBSQj0wLCBCTD0wCi00OgkubG9uZwlleGNlcHRpb25faGFuZGxpbmdfdGFibGUKKzk6CS5sb25nCU5NSV9WRUMKKzEwOgkubG9uZwlpbl9ubWkKKzExOgorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0tHREIpICovCisJc3RzCXByLCBrMwkJISBzYXZlIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJbW92YQlleGNlcHRpb25fZGF0YSwgazAKIAotaW50ZXJydXB0X2V4Y2VwdGlvbjoKLQltb3YubAkxZiwgcjkKKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJIFBSRUYoazApCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG1vdgkjLTEsIGsyCQkhIGRlZmF1bHQgdmVjdG9yIGtlcHQgaW4gazIKKworCSEgU2V0dXAgcmV0dXJuIGFkZHJlc3MgYW5kIGp1bXAgdG8gZG9fSVJRCisJbW92LmwJNGYsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCisJbGRzCXI5LCBwcgkJISBwdXQgcmV0dXJuIGFkZHJlc3MgaW4gcHIKIAltb3YubAkyZiwgcjQKLQltb3YubAlAcjQsIHI0CisJbW92LmwJM2YsIHI5CisJbW92LmwJQHI0LCByNAkJISBwYXNzIElOVEVWVCB2ZWN0b3IgYXMgYXJnMAogCWptcAlAcjkKLQkgbW92CXIxNSwgcjUKLQlydHMKLQkgbm9wCisJIG1vdglyMTUsIHI1CQkhIHBhc3Mgc2F2ZWQgcmVnaXN0ZXJzIGFzIGFyZzEKIAotCS5hbGlnbiAyCi0xOgkubG9uZwlkb19JUlEKLTI6CS5sb25nCUlOVEVWVAotCi0JLmFsaWduCTIKIEVOVFJZKGV4Y2VwdGlvbl9ub25lKQogCXJ0cwogCSBub3AKKworCS5hbGlnbglMMV9DQUNIRV9TSElGVAorZXhjZXB0aW9uX2RhdGE6CiswOgkubG9uZwkweDAwMDA4MGYwCSEgRkQ9MSwgSU1BU0s9MTUKKzE6CS5sb25nCTB4Y2ZmZmZmZmYJISBSQj0wLCBCTD0wCisyOgkubG9uZwlJTlRFVlQKKzM6CS5sb25nCWRvX0lSUQorNDoJLmxvbmcJcmV0X2Zyb21faXJxCis1OgkubG9uZwlFWFBFVlQKKzY6CS5sb25nCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZQorNzoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYwppbmRleCA2NDY4YWU4Li42M2I2N2JhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0g3NzA1IFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDUxICsyMSwzNiBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKIAlQSU5UMDcsIFBJTlQ4MTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlBRENfQURJLAotCVVTQl9VU0kwLCBVU0JfVVNJMSwKLQlUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLAotCVRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUZfUkNNSSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIFRNVTIsIERNQUMsIFVTQiwgU0NJRjIsIFNDSUYwLAorCURNQUMsIFNDSUYwLCBTQ0lGMiwgQURDX0FESSwgVVNCLAorCisJVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywKKwlUTVUwLCBUTVUxLCBUTVUyLAorCisJUlRDLCBXRFQsIFJFRl9SQ01JLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwogCUlOVENfVkVDVChQSU5UMDcsIDB4NzAwKSwgSU5UQ19WRUNUKFBJTlQ4MTUsIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkwLCAweDgwMCksIElOVENfVkVDVChETUFDX0RFSTEsIDB4ODIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkyLCAweDg0MCksIElOVENfVkVDVChETUFDX0RFSTMsIDB4ODYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDg4MCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4OGEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHg5NjApLAorCUlOVENfVkVDVChETUFDLCAweDgwMCksIElOVENfVkVDVChETUFDLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDkwMCksIElOVENfVkVDVChTQ0lGMiwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5NjApLAogCUlOVENfVkVDVChBRENfQURJLCAweDk4MCksCi0JSU5UQ19WRUNUKFVTQl9VU0kwLCAweGEyMCksIElOVENfVkVDVChVU0JfVVNJMSwgMHhhNDApLAorCUlOVENfVkVDVChVU0IsIDB4YTIwKSwgSU5UQ19WRUNUKFVTQiwgMHhhNDApLAogCUlOVENfVkVDVChUUFUwLCAweGMwMCksIElOVENfVkVDVChUUFUxLCAweGMyMCksCiAJSU5UQ19WRUNUKFRQVTIsIDB4YzgwKSwgSU5UQ19WRUNUKFRQVTMsIDB4Y2EwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChVU0IsIFVTQl9VU0kwLCBVU0JfVVNJMSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRl9SQ01JLCAwLCAwIH0gfSwKQEAgLTc4LDcgKzYzLDcgQEAKIAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcwNSIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CkBAIC04NiwxMiArNzEsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTcsIDU5IH0sCisJCS5pcnFzCQk9IHsgNTYsIDU2LCA1NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1MiwgNTMsIDU1IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0xMTUsMTQgKzEwMCw2IEBACiAJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9ydGNfcGxhdGZvcm1faW5mbyBydGNfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCmluZGV4IDkzYzU1ZTIuLmE3NGY5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNIMyBTZXR1cCBjb2RlIGZvciBTSDc3MDYsIFNINzcwNywgU0g3NzA4LCBTSDc3MDkKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBNYWdudXMgRGFtbQorICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIEJhc2VkIG9uIHNldHVwLXNoNzcwOS5jCiAgKgpAQCAtMjQsNDYgKzI1LDM3IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAogCVBJTlQwNywgUElOVDgxNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSwKLQlTQ0lfRVJJLCBTQ0lfUlhJLCBTQ0lfVFhJLCBTQ0lfVEVJLAotCUFEQ19BREksCisJRE1BQywgU0NJRjAsIFNDSUYyLCBTQ0ksIEFEQ19BREksCiAJTENEQywgUENDMCwgUENDMSwKLQlUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGX1JDTUksIFJFRl9ST1ZJLAotCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgUkVGLCBUTVUyLCBETUFDLCBTQ0ksIFNDSUYyLCBTQ0lGMCwKKwlUTVUwLCBUTVUxLCBUTVUyLAorCVJUQywgV0RULCBSRUYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNDSV9FUkksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0NJX1RYSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJX1RFSSwgMHg1NDApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTQ0ksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSSwgMHg1MDApLAorCUlOVENfVkVDVChTQ0ksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSSwgMHg1NDApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JPVkksIDB4NWEwKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksCisJSU5UQ19WRUNUKFJFRiwgMHg1YTApLAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4NjApLAogCUlOVENfVkVDVChBRENfQURJLCAweDk4MCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYyX0JSSSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweDk2MCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDkwMCksIElOVENfVkVDVChTQ0lGMiwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTYwKSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIAlJTlRDX1ZFQ1QoUElOVDA3LCAweDcwMCksIElOVENfVkVDVChQSU5UODE1LCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykKIAlJTlRDX1ZFQ1QoTENEQywgMHg5YTApLApAQCAtNzEsMTYgKzYzLDYgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKFJFRiwgUkVGX1JDTUksIFJFRl9ST1ZJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChTQ0ksIFNDSV9FUkksIFNDSV9SWEksIFNDSV9UWEksIFNDSV9URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGLCBTQ0ksIDAgfSB9LApAQCAtMTAxLDcgKzgzLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcweCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MHgiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC0xMTEsMTQgKzkzLDYgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPQl7Ci0JCS5zdGFydCAgPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtMTM2LDcgKzExMCw3IEBACiAJCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJCS5pcnFzCQk9IHsgMjMsIDIzLCAyMywgMCB9LAogCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCkBAIC0xNDUsNyArMTE5LDcgQEAKIAkJLm1hcGJhc2UJPSAweGE0MDAwMTUwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTcsIDU5LCA1OCB9LAorCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYsIDU2IH0sCiAJfSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXApAQCAtMTU0LDcgKzEyOCw3IEBACiAJCS5tYXBiYXNlCT0gMHhhNDAwMDE0MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX0lSREEsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogCX0sCiAjZW5kaWYKIAl7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYwppbmRleCA3N2VlZTQ4Li4zMzUwOThiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gzIFNldHVwIGNvZGUgZm9yIFNINzcxMCwgU0g3NzEyCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMCw0MCBAQAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCURNQUNfREVJNCwgRE1BQ19ERUk1LAotCUlQU0VDLAorCURNQUMxLCBTQ0lGMCwgU0NJRjEsIERNQUMyLCBJUFNFQywKIAlFRE1BQzAsIEVETUFDMSwgRURNQUMyLAotCVNJT0YwX0VSSSwgU0lPRjBfVFhJLCBTSU9GMF9SWEksIFNJT0YwX0NDSSwKLQlTSU9GMV9FUkksIFNJT0YxX1RYSSwgU0lPRjFfUlhJLCBTSU9GMV9DQ0ksCi0JVE1VMCwgVE1VMSwgVE1VMiwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUYsCisJU0lPRjAsIFNJT0YxLAogCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgRE1BQzEsIFNDSUYwLCBTQ0lGMSwgRE1BQzIsIFNJT0YwLCBTSU9GMSwKKwlUTVUwLCBUTVUxLCBUTVUyLAorCVJUQywgV0RULCBSRUYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweDk2MCksCi0JSU5UQ19WRUNUKERNQUNfREVJNCwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQ19ERUk1LCAweGJhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDgwMCksIElOVENfVkVDVChETUFDMSwgMHg4MjApLAorCUlOVENfVkVDVChETUFDMSwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhjMCksIElOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDk2MCksCisJSU5UQ19WRUNUKERNQUMyLCAweGI4MCksIElOVENfVkVDVChETUFDMiwgMHhiYTApLAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAKIAlJTlRDX1ZFQ1QoSVBTRUMsIDB4YmUwKSwKICNlbmRpZgogCUlOVENfVkVDVChFRE1BQzAsIDB4YzAwKSwgSU5UQ19WRUNUKEVETUFDMSwgMHhjMjApLAogCUlOVENfVkVDVChFRE1BQzIsIDB4YzQwKSwKLQlJTlRDX1ZFQ1QoU0lPRjBfRVJJLCAweGUwMCksIElOVENfVkVDVChTSU9GMF9UWEksIDB4ZTIwKSwKLQlJTlRDX1ZFQ1QoU0lPRjBfUlhJLCAweGU0MCksIElOVENfVkVDVChTSU9GMF9DQ0ksIDB4ZTYwKSwKLQlJTlRDX1ZFQ1QoU0lPRjFfRVJJLCAweGU4MCksIElOVENfVkVDVChTSU9GMV9UWEksIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoU0lPRjFfUlhJLCAweGVjMCksIElOVENfVkVDVChTSU9GMV9DQ0ksIDB4ZWUwKSwKKwlJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTAwKSwgSU5UQ19WRUNUKFNJT0YwLCAweGUyMCksCisJSU5UQ19WRUNUKFNJT0YwLCAweGU0MCksIElOVENfVkVDVChTSU9GMCwgMHhlNjApLAorCUlOVENfVkVDVChTSU9GMSwgMHhlODApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWMwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGVlMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChSRUYsIDB4NTgwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDX0RFSTQsIERNQUNfREVJNSksCi0JSU5UQ19HUk9VUChTSU9GMCwgU0lPRjBfRVJJLCBTSU9GMF9UWEksIFNJT0YwX1JYSSwgU0lPRjBfQ0NJKSwKLQlJTlRDX0dST1VQKFNJT0YxLCBTSU9GMV9FUkksIFNJT0YxX1RYSSwgU0lPRjFfUlhJLCBTSU9GMV9DQ0kpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUYsIDAsIDAgfSB9LApAQCAtODUsNyArNjYsNyBAQAogCXsgMHhhNDA4MDAwNiwgMCwgMTYsIDQsIC8qIElQUkkgKi8geyAwLCAwLCBTSU9GMSB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzEwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcxMCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTk4LDE0ICs3OSw2IEBACiAJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9ydGNfcGxhdGZvcm1faW5mbyBydGNfaW5mbyA9IHsKQEAgLTEyNywxMiArMTAwLDEyIEBACiAJCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTcsIDU5LCA1OCB9LAorCQkuaXJxcyAgICAgICAgICAgPSB7IDU2LCA1NiwgNTYsIDU2IH0sCiAJfSwgewogCiAJCS5mbGFncyA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwppbmRleCBmODA3YTIxLi4wMDM4NzRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDc3MjAgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqICBCYXNlZCBvbiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jOgogICoKQEAgLTI2LDE3ICsyNyw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC0xNTAsNjIgKzE0MSw0OSBAQAogCVVOVVNFRCA9IDAsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwotCVRNVTAsIFRNVTEsIFRNVTIsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULCBSRUZfUkNNSSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQsCisJVE1VMCwgVE1VMSwgVE1VMiwgUlRDLAorCVdEVCwgUkVGX1JDTUksIFNJTSwKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAogCVVTQkZfU1BELCBUTVVfU1VOSSwgSVJRNSwgSVJRNCwKLQlETUFDMV9ERUkwLCBETUFDMV9ERUkxLCBETUFDMV9ERUkyLCBETUFDMV9ERUkzLCBMQ0RDLCBTU0wsCi0JQURDLCBETUFDMl9ERUk0LCBETUFDMl9ERUk1LCBVU0JGSTAsIFVTQkZJMSwgQ01ULAorCURNQUMxLCBMQ0RDLCBTU0wsCisJQURDLCBETUFDMiwgVVNCRkksIENNVCwKIAlTQ0lGMCwgU0NJRjEsCi0JUElOVDA3LCBQSU5UODE1LCBUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLCBJSUMsCi0JU0lPRjAsIFNJT0YxLCBNTUNJMCwgTU1DSTEsIE1NQ0kyLCBNTUNJMywgUENDLAorCVBJTlQwNywgUElOVDgxNSwgVFBVLCBJSUMsCisJU0lPRjAsIFNJT0YxLCBNTUMsIFBDQywKIAlVU0JISSwgQUZFSUYsCiAJSF9VREksCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVRNVSwgUlRDLCBTSU0sIERNQUMxLCBVU0JGSSwgRE1BQzIsIFVTQiwgVFBVLCBNTUMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgICAgICAgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCAgICAgICBJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLAotCUlOVENfVkVDVChSVENfUFJJLCAweDRhMCksICAgIElOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNJTV9FUkksIDB4NGUwKSwgICAgSU5UQ19WRUNUKFNJTV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0lNX1RYSSwgMHg1MjApLCAgICBJTlRDX1ZFQ1QoU0lNX1RFTkQsIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCAgICAgICBJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksCisJSU5UQ19WRUNUKFJUQywgMHg0YTApLAkgICAgICBJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNJTSwgMHg0ZTApLAkgICAgICBJTlRDX1ZFQ1QoU0lNLCAweDUwMCksCisJSU5UQ19WRUNUKFNJTSwgMHg1MjApLAkgICAgICBJTlRDX1ZFQ1QoU0lNLCAweDU0MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLCAgICAgICAgSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCiAJLyogSF9VREkgY2Fubm90IGJlIG1hc2tlZCAqLyAgSU5UQ19WRUNUKFRNVV9TVU5JLCAweDZjMCksCi0JSU5UQ19WRUNUKFVTQkZfU1BELCAweDZlMCksICAgSU5UQ19WRUNUKERNQUMxX0RFSTAsIDB4ODAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfREVJMSwgMHg4MjApLCBJTlRDX1ZFQ1QoRE1BQzFfREVJMiwgMHg4NDApLAotCUlOVENfVkVDVChETUFDMV9ERUkzLCAweDg2MCksIElOVENfVkVDVChMQ0RDLCAweDkwMCksCisJSU5UQ19WRUNUKFVTQkZfU1BELCAweDZlMCksICAgSU5UQ19WRUNUKERNQUMxLCAweDgwMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDgyMCksICAgICAgSU5UQ19WRUNUKERNQUMxLCAweDg0MCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg2MCksICAgICAgSU5UQ19WRUNUKExDREMsIDB4OTAwKSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApCiAJSU5UQ19WRUNUKFNTTCwgMHg5ODApLAogI2VuZGlmCi0JSU5UQ19WRUNUKFVTQkZJMCwgMHhhMjApLCAgICAgSU5UQ19WRUNUKFVTQkZJMSwgMHhhNDApLAorCUlOVENfVkVDVChVU0JGSSwgMHhhMjApLCAgICAgIElOVENfVkVDVChVU0JGSSwgMHhhNDApLAogCUlOVENfVkVDVChVU0JISSwgMHhhNjApLAotCUlOVENfVkVDVChETUFDMl9ERUk0LCAweGI4MCksIElOVENfVkVDVChETUFDMl9ERUk1LCAweGJhMCksCisJSU5UQ19WRUNUKERNQUMyLCAweGI4MCksICAgICAgSU5UQ19WRUNUKERNQUMyLCAweGJhMCksCiAJSU5UQ19WRUNUKEFEQywgMHhiZTApLCAgICAgICAgSU5UQ19WRUNUKFNDSUYwLCAweGMwMCksCiAJSU5UQ19WRUNUKFNDSUYxLCAweGMyMCksICAgICAgSU5UQ19WRUNUKFBJTlQwNywgMHhjODApLAogCUlOVENfVkVDVChQSU5UODE1LCAweGNhMCksICAgIElOVENfVkVDVChTSU9GMCwgMHhkMDApLAotCUlOVENfVkVDVChTSU9GMSwgMHhkMjApLCAgICAgIElOVENfVkVDVChUUFUwLCAweGQ4MCksCi0JSU5UQ19WRUNUKFRQVTEsIDB4ZGEwKSwgICAgICAgSU5UQ19WRUNUKFRQVTIsIDB4ZGMwKSwKLQlJTlRDX1ZFQ1QoVFBVMywgMHhkZTApLCAgICAgICBJTlRDX1ZFQ1QoSUlDLCAweGUwMCksCi0JSU5UQ19WRUNUKE1NQ0kwLCAweGU4MCksICAgICAgSU5UQ19WRUNUKE1NQ0kxLCAweGVhMCksCi0JSU5UQ19WRUNUKE1NQ0kyLCAweGVjMCksICAgICAgSU5UQ19WRUNUKE1NQ0kzLCAweGVlMCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGQyMCksICAgICAgSU5UQ19WRUNUKFRQVSwgMHhkODApLAorCUlOVENfVkVDVChUUFUsIDB4ZGEwKSwgICAgICAgIElOVENfVkVDVChUUFUsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoVFBVLCAweGRlMCksICAgICAgICBJTlRDX1ZFQ1QoSUlDLCAweGUwMCksCisJSU5UQ19WRUNUKE1NQywgMHhlODApLCAgICAgICAgSU5UQ19WRUNUKE1NQywgMHhlYTApLAorCUlOVENfVkVDVChNTUMsIDB4ZWMwKSwgICAgICAgIElOVENfVkVDVChNTUMsIDB4ZWUwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweGYwMCksICAgICAgICBJTlRDX1ZFQ1QoUENDLCAweGY2MCksCiAJSU5UQ19WRUNUKEFGRUlGLCAweGZlMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFRNVSwgVE1VMCwgVE1VMSwgVE1VMiksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoU0lNLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJMCwgRE1BQzFfREVJMSwgRE1BQzFfREVJMiwgRE1BQzFfREVJMyksCi0JSU5UQ19HUk9VUChVU0JGSSwgVVNCRkkwLCBVU0JGSTEpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSTQsIERNQUMyX0RFSTUpLAotCUlOVENfR1JPVVAoVFBVLCBUUFUwLCBUUFUxLCBUUFUyLCBUUFUzKSwKLQlJTlRDX0dST1VQKE1NQywgTU1DSTAsIE1NQ0kxLCBNTUNJMiwgTU1DSTMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4QTQxNEZFRTJVTCwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhBNDE0RkVFNFVMLCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGX1JDTUksIFNJTSwgMCB9IH0sCkBAIC0yMTksNyArMTk3LDcgQEAKIAl7IDB4QTQwODAwMDhVTCwgMCwgMTYsIDQsIC8qIElQUkogKi8geyAwLCBVU0JISSwgMCwgQUZFSUYgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcyMCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MjAiLCB2ZWN0b3JzLCBOVUxMLAogCQlOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0NTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgazAJcjAKKyNkZWZpbmUgazEJcjEKKyNkZWZpbmUgazIJcjIKKyNkZWZpbmUgazMJcjMKKyNkZWZpbmUgazQJcjQKKworISBzd3N1c3BfYXJjaF9yZXN1bWUoKQorISAtIGNvcHkgcmVzdG9yZV9wYmxpc3QgcGFnZXMKKyEgLSByZXN0b3JlIHJlZ2lzdGVycyBmcm9tIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorCitFTlRSWShzd3N1c3BfYXJjaF9yZXN1bWUpCisJbW92LmwJMWYsIHIxNQorCW1vdi5sCTJmLCByNAorCW1vdi5sCUByNCwgcjQKKworc3dzdXNwX2NvcHlfbG9vcDoKKwltb3YJcjQsIHIwCisJY21wL2VxCSMwLCByMAorCWJ0CXN3c3VzcF9yZXN0b3JlX3JlZ3MKKworCW1vdi5sCUAoUEJFX0FERFJFU1MsIHI0KSwgcjIKKwltb3YubAlAKFBCRV9PUklHX0FERFJFU1MsIHI0KSwgcjUKKworCW1vdgkjKFBBR0VfU0laRSA+PiAxMCksIHIzCisJc2hsbDgJcjMKKwlzaGxyMglyMyAvKiBQQUdFX1NJWkUgLyAxNiAqLworc3dzdXNwX2NvcHlfcGFnZToKKwlkdAlyMworCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzAgKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxCSAgLyogIDE2bis0ICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rOCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzEyICovCisJbW92LmwJcjEsQHI1CisJYmYvcwlzd3N1c3BfY29weV9wYWdlCisJIGFkZAkjNCxyNQorCisJYnJhCXN3c3VzcF9jb3B5X2xvb3AKKwkgbW92LmwJQChQQkVfTkVYVCwgcjQpLCByNAorCitzd3N1c3BfcmVzdG9yZV9yZWdzOgorCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92LmwJM2YsIHI4CisJbW92LmwJNGYsIHI1CisJanNyCUByNQorCSBub3AKKworCSEgQkw9MTogUjctPlIwIGlzIGJhbmsxCisJbGRzCWsyLCBwcgorCWxkYwlrMywgc3NyCisKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCXJ0ZQorCSBub3AKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCisJLmFsaWduCTIKKzE6CS5sb25nCXN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorMjoJLmxvbmcJcmVzdG9yZV9wYmxpc3QKKzM6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCis0OgkubG9uZwlyZXN0b3JlX3JlZ3MKKworISBzd3N1c3BfYXJjaF9zdXNwZW5kKCkKKyEgLSBwcmVwYXJlIHBjIGZvciByZXN1bWUsIHJldHVybiBmcm9tIGZ1bmN0aW9uIHdpdGhvdXQgc3dzdXNwX3NhdmUgb24gcmVzdW1lCishIC0gc2F2ZSByZWdpc3RlcnMgaW4gc3dzdXNwX2FyY2hfcmVnc19jcHUwCishIC0gY2FsbCBzd3N1c3Bfc2F2ZSB3cml0ZSBzdXNwZW5kIGltYWdlCisKK0VOVFJZKHN3c3VzcF9hcmNoX3N1c3BlbmQpCisJc3RzCXByLCByMAkJISBzYXZlIHByIGluIHIwCisJbW92CXIxNSwgcjIJCSEgc2F2ZSBzcCBpbiByMgorCW1vdglyOCwgcjUJCSEgc2F2ZSByOCBpbiByNQorCXN0YwlzciwgcjEKKwlsZGMJcjEsIHNzcgkJISBzYXZlIHNyIGluIHNzcgorCW1vdi5sCTFmLCByMQorCWxkYwlyMSwgc3BjCQkhIHNldHVwIHBjIHZhbHVlIGZvciByZXN1bWluZworCW1vdi5sCTVmLCByMTUJCSEgdXNlIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MCBhcyBzdGFjaworCW1vdi5sCTZmLCByMworCWFkZAlyMywgcjE1CQkhIHNhdmUgZnJvbSB0b3Agb2Ygc3RydWN0dXJlCisKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdi5sCTJmLCByMwkJISBnZXQgbmV3IFNSIHZhbHVlIGZvciBiYW5rMQorCW1vdgkjMCwgcjQKKwltb3YubAk3ZiwgcjEKKwlqc3IJQHIxCQkhIHN3aXRjaCB0byBiYW5rMSBhbmQgc2F2ZSBiYW5rMSByNy0+cjAKKwkgbm90CXI0LCByNAorCisJISBCTD0xOiBSNy0+UjAgaXMgYmFuazEKKwlzdGMJcjJfYmFuaywgazAJISBmZXRjaCBvbGQgc3AgZnJvbSByMl9iYW5rMAorCW1vdi5sCTNmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJbW92LmwJOGYsIGsxCisJanNyCUBrMQkJISBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgYWxsIHJlZ3MKKwkgc3RjCXIwX2JhbmssIGszCSEgZmV0Y2ggb2xkIHByIGZyb20gcjBfYmFuazAKKworCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92CXIyLCByMTUJCSEgcmVzdG9yZSBvbGQgc3AKKwltb3YJcjUsIHI4CQkhIHJlc3RvcmUgb2xkIHI4CisJc3RjCXNzciwgcjEKKwlsZGMJcjEsIHNyCQkhIHJlc3RvcmUgb2xkIHNyCisJbGRzCXIwLCBwcgkJISByZXN0b3JlIG9sZCBwcgorCW1vdi5sCTRmLCByMAorCWptcAlAcjAKKwkgbm9wCisKK3N3c3VzcF9jYWxsX3NhdmU6CisJbW92CXIyLCByMTUJCSEgcmVzdG9yZSBvbGQgc3AKKwltb3YJcjUsIHI4CQkhIHJlc3RvcmUgb2xkIHI4CisJbGRzCXIwLCBwcgkJISByZXN0b3JlIG9sZCBwcgorCXJ0cworCSBtb3YJIzAsIHIwCisKKwkuYWxpZ24JMgorMToJLmxvbmcJc3dzdXNwX2NhbGxfc2F2ZQorMjoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKzM6CS5sb25nCTB4ZGZmZmZmZmYgISBSQj0wCis0OgkubG9uZwlzd3N1c3Bfc2F2ZQorNToJLmxvbmcJc3dzdXNwX2FyY2hfcmVnc19jcHUwCis2OgkubG9uZwlTV1NVU1BfQVJDSF9SRUdTX1NJWkUKKzc6CS5sb25nCXNhdmVfbG93X3JlZ3MKKzg6CS5sb25nCXNhdmVfcmVncwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKaW5kZXggZDYwODU1Ny4uMjAzYjE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLXkJOj0gcHJvYmUubyBjb21tb24ubwogY29tbW9uLXkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgZW50cnkubyBleC5vKQogCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSAkKGFkZHByZWZpeCAuLi9zaDMvLCBzd3N1c3AubykKIG9iai0kKENPTkZJR19TSF9GUFUpCQkJKz0gZnB1Lm8gc29mdGZsb2F0Lm8KIG9iai0kKENPTkZJR19TSF9TVE9SRV9RVUVVRVMpCQkrPSBzcS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCAyZTQyNTcyLi4zZDNhM2M0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0xMjksNiArMTI5LDEzIEBACiAJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CiAJCQkJCSAgQ1BVX0hBU19MTFNDOwogCQlicmVhazsKKwljYXNlIDB4NDAwNDoKKwkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc4NjsKKwkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CisJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OworCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QRVJGX0NPVU5URVIgfAorCQkJQ1BVX0hBU19MTFNDIHwgQ1BVX0hBU19QVEVBRVg7CisJCWJyZWFrOwogCWNhc2UgMHgzMDA4OgogCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gNDsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBlYzg4NDAzLi5hMWM4MGQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTIxLDE3ICsyMSw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC01MCwxMyArNDAsMTMgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSB7IDIzLCAyNCwgMjUsIDAgfSwKKwkJLmlycXMJCT0geyAyMywgMjMsIDIzLCAwIH0sCiAJfSwgewogI2VuZGlmCiAJCS5tYXBiYXNlCT0gMHhmZmU4MDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC04Nyw0MyArNzcsMjcgQEAKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJMMCwgSVJMMSwgSVJMMiwgSVJMMywgLyogb25seSBJUkxNIG1vZGUgc3VwcG9ydGVkICovCi0JSFVESSwgR1BJT0ksCi0JRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwgRE1BQ19ETVRFMywKLQlETUFDX0RNVEU0LCBETUFDX0RNVEU1LCBETUFDX0RNVEU2LCBETUFDX0RNVEU3LAotCURNQUNfRE1BRSwKKwlIVURJLCBHUElPSSwgRE1BQywKIAlQQ0lDMF9QQ0lTRVJSLCBQQ0lDMV9QQ0lFUlIsIFBDSUMxX1BDSVBXRFdOLCBQQ0lDMV9QQ0lQV09OLAogCVBDSUMxX1BDSURNQTAsIFBDSUMxX1BDSURNQTEsIFBDSUMxX1BDSURNQTIsIFBDSUMxX1BDSURNQTMsCi0JVE1VMywgVE1VNCwgVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JU0NJMV9FUkksIFNDSTFfUlhJLCBTQ0kxX1RYSSwgU0NJMV9URUksCi0JU0NJRl9FUkksIFNDSUZfUlhJLCBTQ0lGX0JSSSwgU0NJRl9UWEksCi0JV0RULAotCVJFRl9SQ01JLCBSRUZfUk9WSSwKKwlUTVUzLCBUTVU0LCBUTVUwLCBUTVUxLCBUTVUyLCBSVEMsIFNDSTEsIFNDSUYsIFdEVCwgUkVGLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCURNQUMsIFBDSUMxLCBUTVUyLCBSVEMsIFNDSTEsIFNDSUYsIFJFRiwKKwlQQ0lDMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCUlOVENfVkVDVChIVURJLCAweDYwMCksIElOVENfVkVDVChHUElPSSwgMHg2MjApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTJfVFVOSSwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg0NjApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKLQlJTlRDX1ZFQ1QoU0NJMV9FUkksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSTFfUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNDSTFfVFhJLCAweDUyMCksIElOVENfVkVDVChTQ0kxX1RFSSwgMHg1NDApLAotCUlOVENfVkVDVChTQ0lGX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRl9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRl9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUZfVFhJLCAweDc2MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNDSTEsIDB4NGUwKSwgSU5UQ19WRUNUKFNDSTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0NJMSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJMSwgMHg1NDApLAorCUlOVENfVkVDVChTQ0lGLCAweDcwMCksIElOVENfVkVDVChTQ0lGLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYsIDB4NzYwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCi0JSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksIElOVENfVkVDVChSRUZfUk9WSSwgMHg1YTApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChUTVUyLCBUTVUyX1RVTkksIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFNDSTEsIFNDSTFfRVJJLCBTQ0kxX1JYSSwgU0NJMV9UWEksIFNDSTFfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYsIFNDSUZfRVJJLCBTQ0lGX1JYSSwgU0NJRl9CUkksIFNDSUZfVFhJKSwKLQlJTlRDX0dST1VQKFJFRiwgUkVGX1JDTUksIFJFRl9ST1ZJKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksIElOVENfVkVDVChSRUYsIDB4NWEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNyArMTEwLDcgQEAKIAkJCQkJCSBQQ0lDMSwgUENJQzBfUENJU0VSUiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzUwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc1MCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiAvKiBTSDc3NTAsIFNINzc1MFMsIFNINzc1MSBhbmQgU0g3MDkxIGFsbCBoYXZlIDQtY2hhbm5lbCBETUEgY29udHJvbGxlcnMgKi8KQEAgLTE0NSwzOSArMTE5LDI4IEBACiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxKQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19kbWE0W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDX0RNVEUyLCAweDY4MCksIElOVENfVkVDVChETUFDX0RNVEUzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1BRSwgMHg2YzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc19kbWE0W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsCi0JCSAgIERNQUNfRE1URTMsIERNQUNfRE1BRSksCisJSU5UQ19WRUNUKERNQUMsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMsIDB4NjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2YTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCiB9OwogCiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2RtYTQsICJzaDc3NTBfZG1hNCIsCi0JCQkgdmVjdG9yc19kbWE0LCBncm91cHNfZG1hNCwKKwkJCSB2ZWN0b3JzX2RtYTQsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogI2VuZGlmCiAKIC8qIFNINzc1MFIgYW5kIFNINzc1MVIgYm90aCBoYXZlIDgtY2hhbm5lbCBETUEgY29udHJvbGxlcnMgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19kbWE4W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDX0RNVEUyLCAweDY4MCksIElOVENfVkVDVChETUFDX0RNVEUzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUNfRE1URTUsIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFNiwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFNywgMHg3ZTApLAotCUlOVENfVkVDVChETUFDX0RNQUUsIDB4NmMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNfZG1hOFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLAotCQkgICBETUFDX0RNVEUzLCBETUFDX0RNVEU0LCBETUFDX0RNVEU1LAotCQkgICBETUFDX0RNVEU2LCBETUFDX0RNVEU3LCBETUFDX0RNQUUpLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3YTApLAorCUlOVENfVkVDVChETUFDLCAweDdjMCksIElOVENfVkVDVChETUFDLCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKIH07CiAKIHN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfZG1hOCwgInNoNzc1MF9kbWE4IiwKLQkJCSB2ZWN0b3JzX2RtYTgsIGdyb3Vwc19kbWE4LAorCQkJIHZlY3RvcnNfZG1hOCwgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQppbmRleCA4ZTM0NGVjLi4xYTkyMzYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCSs9IHNldHVwLXNoNzc3MC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBzZXR1cC1zaDc3ODAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJKz0gc2V0dXAtc2g3Nzg1Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IHNldHVwLXNoNzc4Ni5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQkrPSBzZXR1cC1zaDczNDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJKz0gc2V0dXAtc2g3NzIyLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCSs9IHNldHVwLXNoNzcyMy5vCkBAIC0yMSw2ICsyMiw3IEBACiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCTo9IGNsb2NrLXNoNzc3MC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCTo9IGNsb2NrLXNoNzc4MC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCTo9IGNsb2NrLXNoNzc4NS5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCTo9IGNsb2NrLXNoNzc4Ni5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCTo9IGNsb2NrLXNoNzcyMi5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCTo9IGNsb2NrLXNoNzcyMi5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IGNsb2NrLXNoNzcyMi5vCkBAIC0zMSw2ICszMyw3IEBACiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubwogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBwaW5tdXgtc2g3Nzg2Lm8KIAogb2JqLXkJCQkrPSAkKGNsb2NrLXkpCiBvYmotJChDT05GSUdfU01QKQkrPSAkKHNtcC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRhOWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYworICoKKyAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIFNINzc4NQorICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaWZjX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDEgfTsKK3N0YXRpYyBpbnQgc2ZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKK3N0YXRpYyBpbnQgYmZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEyLCAxNiwgMSwKKwkJCSAgICAgMjQsIDMyLCAxLCAxLCAxLCAxLCAxLCAxIH07CitzdGF0aWMgaW50IG1mY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07CitzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxLCAxNiwgMSwKKwkJCSAgICAgIDI0LCAzMiwgMSwgNDgsIDEsIDEsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUU1SMSkgJiAweDAwMGZdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUU1SMSkgJiAweDAwMGYpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjgpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2NwdV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzc4Nl9jbGtfb3BzW10gPSB7CisJJnNoNzc4Nl9tYXN0ZXJfY2xrX29wcywKKwkmc2g3Nzg2X21vZHVsZV9jbGtfb3BzLAorCSZzaDc3ODZfYnVzX2Nsa19vcHMsCisJJnNoNzc4Nl9jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzc4Nl9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzc4Nl9jbGtfb3BzW2lkeF07Cit9CisKK3N0YXRpYyB2b2lkIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDIwKSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7CisJLm5hbWUJCT0gInNoeXdheV9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAorfTsKKworc3RhdGljIHZvaWQgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG1mY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2Rkcl9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gZGRyX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaDc3ODZfZGRyX2NsayA9IHsKKwkubmFtZQkJPSAiZGRyX2NsayIsCisJLmZsYWdzCQk9IENMS19BTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZzaDc3ODZfZGRyX2Nsa19vcHMsCit9OworCisvKgorICogQWRkaXRpb25hbCBTSDc3ODYtc3BlY2lmaWMgb24tY2hpcCBjbG9ja3MgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICogY2xvY2sgZnJhbWV3b3JrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICpzaDc3ODZfb25jaGlwX2Nsb2Nrc1tdID0geworCSZzaDc3ODZfc2h5d2F5X2NsaywKKwkmc2g3Nzg2X2Rkcl9jbGssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODZfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5VTEwsICJtYXN0ZXJfY2xrIik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaDc3ODZfb25jaGlwX2Nsb2Nrcyk7IGkrKykgeworCQlzdHJ1Y3QgY2xrICpjbGtwID0gc2g3Nzg2X29uY2hpcF9jbG9ja3NbaV07CisKKwkJY2xrcC0+cGFyZW50ID0gY2xrOworCQljbGtfcmVnaXN0ZXIoY2xrcCk7CisJCWNsa19lbmFibGUoY2xrcCk7CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZXN0IG9mIHRoZSBjbG9ja3MgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0bworCSAqIGZvcmNlIHRoZSBwYXJlbnQgY2xvY2sgdG8gcHJvcGFnYXRlIHNvIHRoYXQgdGhlc2UgY2xvY2tzIHdpbGwKKwkgKiBhdXRvbWF0aWNhbGx5IGZpZ3VyZSBvdXQgdGhlaXIgcmF0ZS4gV2UgY2hlYXQgYnkgaGFuZGluZyB0aGUKKwkgKiBwYXJlbnQgY2xvY2sgaXRzIGN1cnJlbnQgcmF0ZSBhbmQgZm9yY2luZyBjaGlsZCBwcm9wYWdhdGlvbi4KKwkgKi8KKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfZ2V0X3JhdGUoY2xrKSk7CisKKwljbGtfcHV0KGNsayk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoc2g3Nzg2X2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzNiMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jCkBAIC0wLDAgKzEsOTUwIEBACisvKgorICogU0g3Nzg2IFBpbm11eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gU0g3Nzg1IHBpbm11eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4Ni5oPgorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEsCisJUEI3X0RBVEEsIFBCNl9EQVRBLCBQQjVfREFUQSwgUEI0X0RBVEEsCisJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEsCisJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEsCisJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEsCisJUEU3X0RBVEEsIFBFNl9EQVRBLAorCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBLAorCVBHN19EQVRBLCBQRzZfREFUQSwgUEc1X0RBVEEsCisJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJUEgzX0RBVEEsIFBIMl9EQVRBLCBQSDFfREFUQSwgUEgwX0RBVEEsCisJUEo3X0RBVEEsIFBKNl9EQVRBLCBQSjVfREFUQSwgUEo0X0RBVEEsCisJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUEE3X0lOLCBQQTZfSU4sIFBBNV9JTiwgUEE0X0lOLAorCVBBM19JTiwgUEEyX0lOLCBQQTFfSU4sIFBBMF9JTiwKKwlQQjdfSU4sIFBCNl9JTiwgUEI1X0lOLCBQQjRfSU4sCisJUEIzX0lOLCBQQjJfSU4sIFBCMV9JTiwgUEIwX0lOLAorCVBDN19JTiwgUEM2X0lOLCBQQzVfSU4sIFBDNF9JTiwKKwlQQzNfSU4sIFBDMl9JTiwgUEMxX0lOLCBQQzBfSU4sCisJUEQ3X0lOLCBQRDZfSU4sIFBENV9JTiwgUEQ0X0lOLAorCVBEM19JTiwgUEQyX0lOLCBQRDFfSU4sIFBEMF9JTiwKKwlQRTdfSU4sIFBFNl9JTiwKKwlQRjdfSU4sIFBGNl9JTiwgUEY1X0lOLCBQRjRfSU4sCisJUEYzX0lOLCBQRjJfSU4sIFBGMV9JTiwgUEYwX0lOLAorCVBHN19JTiwgUEc2X0lOLCBQRzVfSU4sCisJUEg3X0lOLCBQSDZfSU4sIFBINV9JTiwgUEg0X0lOLAorCVBIM19JTiwgUEgyX0lOLCBQSDFfSU4sIFBIMF9JTiwKKwlQSjdfSU4sIFBKNl9JTiwgUEo1X0lOLCBQSjRfSU4sCisJUEozX0lOLCBQSjJfSU4sIFBKMV9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQQTdfSU5fUFUsIFBBNl9JTl9QVSwgUEE1X0lOX1BVLCBQQTRfSU5fUFUsCisJUEEzX0lOX1BVLCBQQTJfSU5fUFUsIFBBMV9JTl9QVSwgUEEwX0lOX1BVLAorCVBCN19JTl9QVSwgUEI2X0lOX1BVLCBQQjVfSU5fUFUsIFBCNF9JTl9QVSwKKwlQQjNfSU5fUFUsIFBCMl9JTl9QVSwgUEIxX0lOX1BVLCBQQjBfSU5fUFUsCisJUEM3X0lOX1BVLCBQQzZfSU5fUFUsIFBDNV9JTl9QVSwgUEM0X0lOX1BVLAorCVBDM19JTl9QVSwgUEMyX0lOX1BVLCBQQzFfSU5fUFUsIFBDMF9JTl9QVSwKKwlQRDdfSU5fUFUsIFBENl9JTl9QVSwgUEQ1X0lOX1BVLCBQRDRfSU5fUFUsCisJUEQzX0lOX1BVLCBQRDJfSU5fUFUsIFBEMV9JTl9QVSwgUEQwX0lOX1BVLAorCVBFN19JTl9QVSwgUEU2X0lOX1BVLAorCVBGN19JTl9QVSwgUEY2X0lOX1BVLCBQRjVfSU5fUFUsIFBGNF9JTl9QVSwKKwlQRjNfSU5fUFUsIFBGMl9JTl9QVSwgUEYxX0lOX1BVLCBQRjBfSU5fUFUsCisJUEc3X0lOX1BVLCBQRzZfSU5fUFUsIFBHNV9JTl9QVSwKKwlQSDdfSU5fUFUsIFBINl9JTl9QVSwgUEg1X0lOX1BVLCBQSDRfSU5fUFUsCisJUEgzX0lOX1BVLCBQSDJfSU5fUFUsIFBIMV9JTl9QVSwgUEgwX0lOX1BVLAorCVBKN19JTl9QVSwgUEo2X0lOX1BVLCBQSjVfSU5fUFUsIFBKNF9JTl9QVSwKKwlQSjNfSU5fUFUsIFBKMl9JTl9QVSwgUEoxX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQQTdfT1VULCBQQTZfT1VULCBQQTVfT1VULCBQQTRfT1VULAorCVBBM19PVVQsIFBBMl9PVVQsIFBBMV9PVVQsIFBBMF9PVVQsCisJUEI3X09VVCwgUEI2X09VVCwgUEI1X09VVCwgUEI0X09VVCwKKwlQQjNfT1VULCBQQjJfT1VULCBQQjFfT1VULCBQQjBfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDdfT1VULCBQRDZfT1VULCBQRDVfT1VULCBQRDRfT1VULAorCVBEM19PVVQsIFBEMl9PVVQsIFBEMV9PVVQsIFBEMF9PVVQsCisJUEU3X09VVCwgUEU2X09VVCwKKwlQRjdfT1VULCBQRjZfT1VULCBQRjVfT1VULCBQRjRfT1VULAorCVBGM19PVVQsIFBGMl9PVVQsIFBGMV9PVVQsIFBGMF9PVVQsCisJUEc3X09VVCwgUEc2X09VVCwgUEc1X09VVCwKKwlQSDdfT1VULCBQSDZfT1VULCBQSDVfT1VULCBQSDRfT1VULAorCVBIM19PVVQsIFBIMl9PVVQsIFBIMV9PVVQsIFBIMF9PVVQsCisJUEo3X09VVCwgUEo2X09VVCwgUEo1X09VVCwgUEo0X09VVCwKKwlQSjNfT1VULCBQSjJfT1VULCBQSjFfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBBN19GTiwgUEE2X0ZOLCBQQTVfRk4sIFBBNF9GTiwKKwlQQTNfRk4sIFBBMl9GTiwgUEExX0ZOLCBQQTBfRk4sCisJUEI3X0ZOLCBQQjZfRk4sIFBCNV9GTiwgUEI0X0ZOLAorCVBCM19GTiwgUEIyX0ZOLCBQQjFfRk4sIFBCMF9GTiwKKwlQQzdfRk4sIFBDNl9GTiwgUEM1X0ZOLCBQQzRfRk4sCisJUEMzX0ZOLCBQQzJfRk4sIFBDMV9GTiwgUEMwX0ZOLAorCVBEN19GTiwgUEQ2X0ZOLCBQRDVfRk4sIFBENF9GTiwKKwlQRDNfRk4sIFBEMl9GTiwgUEQxX0ZOLCBQRDBfRk4sCisJUEU3X0ZOLCBQRTZfRk4sCisJUEY3X0ZOLCBQRjZfRk4sIFBGNV9GTiwgUEY0X0ZOLAorCVBGM19GTiwgUEYyX0ZOLCBQRjFfRk4sIFBGMF9GTiwKKwlQRzdfRk4sIFBHNl9GTiwgUEc1X0ZOLAorCVBIN19GTiwgUEg2X0ZOLCBQSDVfRk4sIFBINF9GTiwKKwlQSDNfRk4sIFBIMl9GTiwgUEgxX0ZOLCBQSDBfRk4sCisJUEo3X0ZOLCBQSjZfRk4sIFBKNV9GTiwgUEo0X0ZOLAorCVBKM19GTiwgUEoyX0ZOLCBQSjFfRk4sCisJUDFNU0VMMTRfMCwgUDFNU0VMMTRfMSwKKwlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCVAxTVNFTDEyXzAsIFAxTVNFTDEyXzEsCisJUDFNU0VMMTFfMCwgUDFNU0VMMTFfMSwKKwlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCVAxTVNFTDlfMCwgUDFNU0VMOV8xLAorCVAxTVNFTDhfMCwgUDFNU0VMOF8xLAorCVAxTVNFTDdfMCwgUDFNU0VMN18xLAorCVAxTVNFTDZfMCwgUDFNU0VMNl8xLAorCVAxTVNFTDVfMCwgUDFNU0VMNV8xLAorCVAxTVNFTDRfMCwgUDFNU0VMNF8xLAorCVAxTVNFTDNfMCwgUDFNU0VMM18xLAorCVAxTVNFTDJfMCwgUDFNU0VMMl8xLAorCVAxTVNFTDFfMCwgUDFNU0VMMV8xLAorCVAxTVNFTDBfMCwgUDFNU0VMMF8xLAorCisJUDJNU0VMMTVfMCwgUDJNU0VMMTVfMSwKKwlQMk1TRUwxNF8wLCBQMk1TRUwxNF8xLAorCVAyTVNFTDEzXzAsIFAyTVNFTDEzXzEsCisJUDJNU0VMMTJfMCwgUDJNU0VMMTJfMSwKKwlQMk1TRUwxMV8wLCBQMk1TRUwxMV8xLAorCVAyTVNFTDEwXzAsIFAyTVNFTDEwXzEsCisJUDJNU0VMOV8wLCBQMk1TRUw5XzEsCisJUDJNU0VMOF8wLCBQMk1TRUw4XzEsCisJUDJNU0VMN18wLCBQMk1TRUw3XzEsCisJUDJNU0VMNl8wLCBQMk1TRUw2XzEsCisJUDJNU0VMNV8wLCBQMk1TRUw1XzEsCisJUDJNU0VMNF8wLCBQMk1TRUw0XzEsCisJUDJNU0VMM18wLCBQMk1TRUwzXzEsCisJUDJNU0VMMl8wLCBQMk1TRUwyXzEsCisJUDJNU0VMMV8wLCBQMk1TRUwxXzEsCisJUDJNU0VMMF8wLCBQMk1TRUwwXzEsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCUNERV9NQVJLLAorCUVUSF9NQUdJQ19NQVJLLAorCURJU1BfTUFSSywKKwlFVEhfTElOS19NQVJLLAorCURSNV9NQVJLLAorCUVUSF9UWF9FUl9NQVJLLAorCURSNF9NQVJLLAorCUVUSF9UWF9FTl9NQVJLLAorCURSM19NQVJLLAorCUVUSF9UWEQzX01BUkssCisJRFIyX01BUkssCisJRVRIX1RYRDJfTUFSSywKKwlEUjFfTUFSSywKKwlFVEhfVFhEMV9NQVJLLAorCURSMF9NQVJLLAorCUVUSF9UWEQwX01BUkssCisKKwlWU1lOQ19NQVJLLAorCUhTUElfQ0xLX01BUkssCisJT0RERl9NQVJLLAorCUhTUElfQ1NfTUFSSywKKwlERzVfTUFSSywKKwlFVEhfTURJT19NQVJLLAorCURHNF9NQVJLLAorCUVUSF9SWF9DTEtfTUFSSywKKwlERzNfTUFSSywKKwlFVEhfTURDX01BUkssCisJREcyX01BUkssCisJRVRIX0NPTF9NQVJLLAorCURHMV9NQVJLLAorCUVUSF9UWF9DTEtfTUFSSywKKwlERzBfTUFSSywKKwlFVEhfQ1JTX01BUkssCisKKwlEQ0xLSU5fTUFSSywKKwlIU1BJX1JYX01BUkssCisJSFNZTkNfTUFSSywKKwlIU1BJX1RYX01BUkssCisJREI1X01BUkssCisJRVRIX1JYRDNfTUFSSywKKwlEQjRfTUFSSywKKwlFVEhfUlhEMl9NQVJLLAorCURCM19NQVJLLAorCUVUSF9SWEQxX01BUkssCisJREIyX01BUkssCisJRVRIX1JYRDBfTUFSSywKKwlEQjFfTUFSSywKKwlFVEhfUlhfRFZfTUFSSywKKwlEQjBfTUFSSywKKwlFVEhfUlhfRVJfTUFSSywKKworCURDTEtPVVRfTUFSSywKKwlTQ0lGMV9TTEtfTUFSSywKKwlTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9UWERfTUFSSywKKwlEQUNLMV9NQVJLLAorCUJBQ0tfTUFSSywKKwlGQUxFX01BUkssCisJREFDSzBfTUFSSywKKwlGQ0xFX01BUkssCisJRFJFUTFfTUFSSywKKwlCUkVRX01BUkssCisJVVNCX09WQzFfTUFSSywKKwlEUkVRMF9NQVJLLAorCVVTQl9PVkMwX01BUkssCisKKwlVU0JfUEVOQzFfTUFSSywKKwlVU0JfUEVOQzBfTUFSSywKKworCUhBQzFfU0RPVVRfTUFSSywKKwlTU0kxX1NEQVRBX01BUkssCisJU0RJRjFDTURfTUFSSywKKwlIQUMxX1NESU5fTUFSSywKKwlTU0kxX1NDS19NQVJLLAorCVNESUYxQ0RfTUFSSywKKwlIQUMxX1NZTkNfTUFSSywKKwlTU0kxX1dTX01BUkssCisJU0RJRjFXUF9NQVJLLAorCUhBQzFfQklUQ0xLX01BUkssCisJU1NJMV9DTEtfTUFSSywKKwlTRElGMUNMS19NQVJLLAorCUhBQzBfU0RPVVRfTUFSSywKKwlTU0kwX1NEQVRBX01BUkssCisJU0RJRjFEM19NQVJLLAorCUhBQzBfU0RJTl9NQVJLLAorCVNTSTBfU0NLX01BUkssCisJU0RJRjFEMl9NQVJLLAorCUhBQzBfU1lOQ19NQVJLLAorCVNTSTBfV1NfTUFSSywKKwlTRElGMUQxX01BUkssCisJSEFDMF9CSVRDTEtfTUFSSywKKwlTU0kwX0NMS19NQVJLLAorCVNESUYxRDBfTUFSSywKKworCVNDSUYzX1NDS19NQVJLLAorCVNTSTJfU0RBVEFfTUFSSywKKwlTQ0lGM19SWERfTUFSSywKKwlUQ0xLX01BUkssCisJU1NJMl9TQ0tfTUFSSywKKwlTQ0lGM19UWERfTUFSSywKKwlIQUNfUkVTX01BUkssCisJU1NJMl9XU19NQVJLLAorCisJREFDSzNfTUFSSywKKwlTRElGMENNRF9NQVJLLAorCURBQ0syX01BUkssCisJU0RJRjBDRF9NQVJLLAorCURSRVEzX01BUkssCisJU0RJRjBXUF9NQVJLLAorCVNDSUYwX0NUU19NQVJLLAorCURSRVEyX01BUkssCisJU0RJRjBDTEtfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywKKwlJUkw3X01BUkssCisJU0RJRjBEM19NQVJLLAorCVNDSUYwX1NDS19NQVJLLAorCUlSTDZfTUFSSywKKwlTRElGMEQyX01BUkssCisJU0NJRjBfUlhEX01BUkssCisJSVJMNV9NQVJLLAorCVNESUYwRDFfTUFSSywKKwlTQ0lGMF9UWERfTUFSSywKKwlJUkw0X01BUkssCisJU0RJRjBEMF9NQVJLLAorCisJU0NJRjVfU0NLX01BUkssCisJRlJCX01BUkssCisJU0NJRjVfUlhEX01BUkssCisJSU9JUzE2X01BUkssCisJU0NJRjVfVFhEX01BUkssCisJQ0UyQl9NQVJLLAorCURSQUszX01BUkssCisJQ0UyQV9NQVJLLAorCVNDSUY0X1NDS19NQVJLLAorCURSQUsyX01BUkssCisJU1NJM19XU19NQVJLLAorCVNDSUY0X1JYRF9NQVJLLAorCURSQUsxX01BUkssCisJU1NJM19TREFUQV9NQVJLLAorCUZTVEFUVVNfTUFSSywKKwlTQ0lGNF9UWERfTUFSSywKKwlEUkFLMF9NQVJLLAorCVNTSTNfU0NLX01BUkssCisJRlNFX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKworCS8qIFBBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQTdfREFUQSwgUEE3X0lOLCBQQTdfT1VULCBQQTdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4sIFBBNl9PVVQsIFBBNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE1X0RBVEEsIFBBNV9JTiwgUEE1X09VVCwgUEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTRfREFUQSwgUEE0X0lOLCBQQTRfT1VULCBQQTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4sIFBBM19PVVQsIFBBM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEEyX0RBVEEsIFBBMl9JTiwgUEEyX09VVCwgUEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTFfREFUQSwgUEExX0lOLCBQQTFfT1VULCBQQTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4sIFBBMF9PVVQsIFBBMF9JTl9QVSksCisKKwkvKiBQQiBHUElPICovCisJUElOTVVYX0RBVEEoUEI3X0RBVEEsIFBCN19JTiwgUEI3X09VVCwgUEI3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjZfREFUQSwgUEI2X0lOLCBQQjZfT1VULCBQQjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNV9EQVRBLCBQQjVfSU4sIFBCNV9PVVQsIFBCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEI0X0RBVEEsIFBCNF9JTiwgUEI0X09VVCwgUEI0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjNfREFUQSwgUEIzX0lOLCBQQjNfT1VULCBQQjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMl9EQVRBLCBQQjJfSU4sIFBCMl9PVVQsIFBCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIxX0RBVEEsIFBCMV9JTiwgUEIxX09VVCwgUEIxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjBfREFUQSwgUEIwX0lOLCBQQjBfT1VULCBQQjBfSU5fUFUpLAorCisJLyogUEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBDN19EQVRBLCBQQzdfSU4sIFBDN19PVVQsIFBDN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEM2X0RBVEEsIFBDNl9JTiwgUEM2X09VVCwgUEM2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzVfREFUQSwgUEM1X0lOLCBQQzVfT1VULCBQQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNF9EQVRBLCBQQzRfSU4sIFBDNF9PVVQsIFBDNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMzX0RBVEEsIFBDM19JTiwgUEMzX09VVCwgUEMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzJfREFUQSwgUEMyX0lOLCBQQzJfT1VULCBQQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMV9EQVRBLCBQQzFfSU4sIFBDMV9PVVQsIFBDMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMwX0RBVEEsIFBDMF9JTiwgUEMwX09VVCwgUEMwX0lOX1BVKSwKKworCS8qIFBEIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRDdfREFUQSwgUEQ3X0lOLCBQRDdfT1VULCBQRDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENl9EQVRBLCBQRDZfSU4sIFBENl9PVVQsIFBENl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ1X0RBVEEsIFBENV9JTiwgUEQ1X09VVCwgUEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDRfREFUQSwgUEQ0X0lOLCBQRDRfT1VULCBQRDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEM19EQVRBLCBQRDNfSU4sIFBEM19PVVQsIFBEM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEQyX0RBVEEsIFBEMl9JTiwgUEQyX09VVCwgUEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDFfREFUQSwgUEQxX0lOLCBQRDFfT1VULCBQRDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMF9EQVRBLCBQRDBfSU4sIFBEMF9PVVQsIFBEMF9JTl9QVSksCisKKwkvKiBQRSBHUElPICovCisJUElOTVVYX0RBVEEoUEU3X0RBVEEsIFBFN19JTiwgUEU3X09VVCwgUEU3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRTZfREFUQSwgUEU2X0lOLCBQRTZfT1VULCBQRTZfSU5fUFUpLAorCisJLyogUEYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBGN19EQVRBLCBQRjdfSU4sIFBGN19PVVQsIFBGN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNl9JTiwgUEY2X09VVCwgUEY2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjVfREFUQSwgUEY1X0lOLCBQRjVfT1VULCBQRjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNF9EQVRBLCBQRjRfSU4sIFBGNF9PVVQsIFBGNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYzX0RBVEEsIFBGM19JTiwgUEYzX09VVCwgUEYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyX0lOLCBQRjJfT1VULCBQRjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMV9EQVRBLCBQRjFfSU4sIFBGMV9PVVQsIFBGMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYwX0RBVEEsIFBGMF9JTiwgUEYwX09VVCwgUEYwX0lOX1BVKSwKKworCS8qIFBHIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRzdfREFUQSwgUEc3X0lOLCBQRzdfT1VULCBQRzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNl9EQVRBLCBQRzZfSU4sIFBHNl9PVVQsIFBHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEc1X0RBVEEsIFBHNV9JTiwgUEc1X09VVCwgUEc1X0lOX1BVKSwKKworCS8qIFBIIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQSDdfREFUQSwgUEg3X0lOLCBQSDdfT1VULCBQSDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINl9EQVRBLCBQSDZfSU4sIFBINl9PVVQsIFBINl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg1X0RBVEEsIFBINV9JTiwgUEg1X09VVCwgUEg1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDRfREFUQSwgUEg0X0lOLCBQSDRfT1VULCBQSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIM19EQVRBLCBQSDNfSU4sIFBIM19PVVQsIFBIM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEgyX0RBVEEsIFBIMl9JTiwgUEgyX09VVCwgUEgyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDFfREFUQSwgUEgxX0lOLCBQSDFfT1VULCBQSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMF9EQVRBLCBQSDBfSU4sIFBIMF9PVVQsIFBIMF9JTl9QVSksCisKKwkvKiBQSiBHUElPICovCisJUElOTVVYX0RBVEEoUEo3X0RBVEEsIFBKN19JTiwgUEo3X09VVCwgUEo3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjZfREFUQSwgUEo2X0lOLCBQSjZfT1VULCBQSjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNV9EQVRBLCBQSjVfSU4sIFBKNV9PVVQsIFBKNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEo0X0RBVEEsIFBKNF9JTiwgUEo0X09VVCwgUEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjNfREFUQSwgUEozX0lOLCBQSjNfT1VULCBQSjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMl9EQVRBLCBQSjJfSU4sIFBKMl9PVVQsIFBKMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEoxX0RBVEEsIFBKMV9JTiwgUEoxX09VVCwgUEoxX0lOX1BVKSwKKworCS8qIFBBIEZOICovCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOTVVYX0RBVEEoQ0RFX01BUkssCQlQMU1TRUwyXzAsIFBBN19GTiksCisJUElOTVVYX0RBVEEoRElTUF9NQVJLLAkJUDFNU0VMMl8wLCBQQTZfRk4pLAorCVBJTk1VWF9EQVRBKERSNV9NQVJLLAkJUDFNU0VMMl8wLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKERSNF9NQVJLLAkJUDFNU0VMMl8wLCBQQTRfRk4pLAorCVBJTk1VWF9EQVRBKERSM19NQVJLLAkJUDFNU0VMMl8wLCBQQTNfRk4pLAorCVBJTk1VWF9EQVRBKERSMl9NQVJLLAkJUDFNU0VMMl8wLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKERSMV9NQVJLLAkJUDFNU0VMMl8wLCBQQTFfRk4pLAorCVBJTk1VWF9EQVRBKERSMF9NQVJLLAkJUDFNU0VMMl8wLCBQQTBfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NQUdJQ19NQVJLLAlQMU1TRUwyXzEsIFBBN19GTiksCisJUElOTVVYX0RBVEEoRVRIX0xJTktfTUFSSywJUDFNU0VMMl8xLCBQQTZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9FUl9NQVJLLAlQMU1TRUwyXzEsIFBBNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0VOX01BUkssCVAxTVNFTDJfMSwgUEE0X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEM19NQVJLLAlQMU1TRUwyXzEsIFBBM19GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDJfTUFSSywJUDFNU0VMMl8xLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQxX01BUkssCVAxTVNFTDJfMSwgUEExX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMF9NQVJLLAlQMU1TRUwyXzEsIFBBMF9GTiksCisKKwkvKiBQQiBGTiAqLworCVBJTk1VWF9EQVRBKFZTWU5DX01BUkssCQlQMU1TRUwzXzAsIFBCN19GTiksCisJUElOTVVYX0RBVEEoT0RERl9NQVJLLAkJUDFNU0VMM18wLCBQQjZfRk4pLAorCVBJTk1VWF9EQVRBKERHNV9NQVJLLAkJUDFNU0VMMl8wLCBQQjVfRk4pLAorCVBJTk1VWF9EQVRBKERHNF9NQVJLLAkJUDFNU0VMMl8wLCBQQjRfRk4pLAorCVBJTk1VWF9EQVRBKERHM19NQVJLLAkJUDFNU0VMMl8wLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKERHMl9NQVJLLAkJUDFNU0VMMl8wLCBQQjJfRk4pLAorCVBJTk1VWF9EQVRBKERHMV9NQVJLLAkJUDFNU0VMMl8wLCBQQjFfRk4pLAorCVBJTk1VWF9EQVRBKERHMF9NQVJLLAkJUDFNU0VMMl8wLCBQQjBfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfQ0xLX01BUkssCVAxTVNFTDNfMSwgUEI3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NTX01BUkssCVAxTVNFTDNfMSwgUEI2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTURJT19NQVJLLAlQMU1TRUwyXzEsIFBCNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0NMS19NQVJLLAlQMU1TRUwyXzEsIFBCNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX01EQ19NQVJLLAlQMU1TRUwyXzEsIFBCM19GTiksCisJUElOTVVYX0RBVEEoRVRIX0NPTF9NQVJLLAlQMU1TRUwyXzEsIFBCMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0NMS19NQVJLLAlQMU1TRUwyXzEsIFBCMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX0NSU19NQVJLLAlQMU1TRUwyXzEsIFBCMF9GTiksCisKKwkvKiBQQyBGTiAqLworCVBJTk1VWF9EQVRBKERDTEtJTl9NQVJLLAlQMU1TRUwzXzAsIFBDN19GTiksCisJUElOTVVYX0RBVEEoSFNZTkNfTUFSSywJCVAxTVNFTDNfMCwgUEM2X0ZOKSwKKwlQSU5NVVhfREFUQShEQjVfTUFSSywJCVAxTVNFTDJfMCwgUEM1X0ZOKSwKKwlQSU5NVVhfREFUQShEQjRfTUFSSywJCVAxTVNFTDJfMCwgUEM0X0ZOKSwKKwlQSU5NVVhfREFUQShEQjNfTUFSSywJCVAxTVNFTDJfMCwgUEMzX0ZOKSwKKwlQSU5NVVhfREFUQShEQjJfTUFSSywJCVAxTVNFTDJfMCwgUEMyX0ZOKSwKKwlQSU5NVVhfREFUQShEQjFfTUFSSywJCVAxTVNFTDJfMCwgUEMxX0ZOKSwKKwlQSU5NVVhfREFUQShEQjBfTUFSSywJCVAxTVNFTDJfMCwgUEMwX0ZOKSwKKworCVBJTk1VWF9EQVRBKEhTUElfUlhfTUFSSywJUDFNU0VMM18xLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfVFhfTUFSSywJUDFNU0VMM18xLCBQQzZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQzX01BUkssCVAxTVNFTDJfMSwgUEM1X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMl9NQVJLLAlQMU1TRUwyXzEsIFBDNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDFfTUFSSywJUDFNU0VMMl8xLCBQQzNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQwX01BUkssCVAxTVNFTDJfMSwgUEMyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfRFZfTUFSSywJUDFNU0VMMl8xLCBQQzFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9FUl9NQVJLLAlQMU1TRUwyXzEsIFBDMF9GTiksCisKKwkvKiBQRCBGTiAqLworCVBJTk1VWF9EQVRBKERDTEtPVVRfTUFSSywJUEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9TTEtfTUFSSywJUEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SWERfTUFSSywJUEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywJUEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMV9NQVJLLAkJUDFNU0VMMTNfMSwgUDFNU0VMMTJfMCwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShCQUNLX01BUkssCQlQMU1TRUwxM18wLCBQMU1TRUwxMl8xLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKEZBTEVfTUFSSywJCVAxTVNFTDEzXzAsIFAxTVNFTDEyXzAsIFBEM19GTiksCisJUElOTVVYX0RBVEEoREFDSzBfTUFSSywJCVAxTVNFTDE0XzEsIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRkNMRV9NQVJLLAkJUDFNU0VMMTRfMCwgUEQyX0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMV9NQVJLLAkJUDFNU0VMMTBfMCwgUDFNU0VMOV8xLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKEJSRVFfTUFSSywJCVAxTVNFTDEwXzEsIFAxTVNFTDlfMCwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShVU0JfT1ZDMV9NQVJLLAlQMU1TRUwxMF8wLCBQMU1TRUw5XzAsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoRFJFUTBfTUFSSywJCVAxTVNFTDExXzEsIFBEMF9GTiksCisJUElOTVVYX0RBVEEoVVNCX09WQzBfTUFSSywJUDFNU0VMMTFfMCwgUEQwX0ZOKSwKKworCS8qIFBFIEZOICovCisJUElOTVVYX0RBVEEoVVNCX1BFTkMxX01BUkssCVBFN19GTiksCisJUElOTVVYX0RBVEEoVVNCX1BFTkMwX01BUkssCVBFNl9GTiksCisKKwkvKiBQRiBGTiAqLworCVBJTk1VWF9EQVRBKEhBQzFfU0RPVVRfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NESU5fTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NZTkNfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX0JJVENMS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8wLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfU0RPVVRfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NESU5fTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NZTkNfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX0JJVENMS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8wLCBQRjBfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfU0RBVEFfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1NDS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfV1NfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX0NMS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfU0RBVEFfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NDS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfV1NfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX0NMS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjBfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ01EX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGN19GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDRF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxV1BfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNMS19NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDNfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQyX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMV9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjFfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDBfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYwX0ZOKSwKKworCS8qIFBHIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjNfU0NLX01BUkssCVAxTVNFTDhfMCwgUEc3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1NEQVRBX01BUkssCVAxTVNFTDhfMSwgUEc3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19SWERfTUFSSywJUDFNU0VMN18wLCBQMU1TRUw2XzAsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoU1NJMl9TQ0tfTUFSSywJUDFNU0VMN18xLCBQMU1TRUw2XzAsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoVENMS19NQVJLLAkJUDFNU0VMN18wLCBQMU1TRUw2XzEsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfVFhEX01BUkssCVAxTVNFTDVfMCwgUDFNU0VMNF8wLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfV1NfTUFSSywJUDFNU0VMNV8xLCBQMU1TRUw0XzAsIFBHNV9GTiksCisJUElOTVVYX0RBVEEoSEFDX1JFU19NQVJLLAlQMU1TRUw1XzAsIFAxTVNFTDRfMSwgUEc1X0ZOKSwKKworCS8qIFBIIEZOICovCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywJCVAyTVNFTDRfMCwgUEg3X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENNRF9NQVJLLAlQMk1TRUw0XzEsIFBIN19GTiksCisJUElOTVVYX0RBVEEoREFDSzJfTUFSSywJCVAyTVNFTDRfMCwgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENEX01BUkssCVAyTVNFTDRfMSwgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRM19NQVJLLAkJUDJNU0VMNF8wLCBQSDVfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwV1BfTUFSSywJUDJNU0VMNF8xLCBQSDVfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEyX01BUkssCQlQMk1TRUwzXzAsIFAyTVNFTDJfMSwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENMS19NQVJLLAlQMk1TRUwzXzEsIFAyTVNFTDJfMCwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9DVFNfTUFSSywJUDJNU0VMM18wLCBQMk1TRUwyXzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEM19NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIM19GTiksCisJUElOTVVYX0RBVEEoSVJMN19NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIM19GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMl9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9TQ0tfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoSVJMNl9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMV9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoSVJMNV9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMF9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9UWERfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMF9GTiksCisJUElOTVVYX0RBVEEoSVJMNF9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMF9GTiksCisKKwkvKiBQSiBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUY1X1NDS19NQVJLLAlQMk1TRUwxMV8xLCBQSjdfRk4pLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLAkJUDJNU0VMMTFfMCwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9SWERfTUFSSywJUDJNU0VMMTBfMCwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShJT0lTMTZfTUFSSywJUDJNU0VMMTBfMSwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9UWERfTUFSSywJUDJNU0VMMTBfMCwgUEo1X0ZOKSwKKwlQSU5NVVhfREFUQShDRTJCX01BUkssCQlQMk1TRUwxMF8xLCBQSjVfRk4pLAorCVBJTk1VWF9EQVRBKERSQUszX01BUkssCQlQMk1TRUw3XzAsIFBKNF9GTiksCisJUElOTVVYX0RBVEEoQ0UyQV9NQVJLLAkJUDJNU0VMN18xLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1NDS19NQVJLLAlQMk1TRUw5XzAsIFAyTVNFTDhfMCwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMl9NQVJLLAkJUDJNU0VMOV8wLCBQMk1TRUw4XzEsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU1NJM19XU19NQVJLLAlQMk1TRUw5XzEsIFAyTVNFTDhfMCwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9SWERfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzAsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoRFJBSzFfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8xLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKEZTVEFUVVNfTUFSSywJUDJNU0VMNl8wLCBQMk1TRUw1XzAsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoU1NJM19TREFUQV9NQVJLLAlQMk1TRUw2XzEsIFAyTVNFTDVfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9UWERfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoRFJBSzBfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8xLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKEZTRV9NQVJLLAkJUDJNU0VMNl8wLCBQMk1TRUw1XzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoU1NJM19TQ0tfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzEsIFBKMV9GTiksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCS8qIFBBICovCisJUElOTVVYX0dQSU8oR1BJT19QQTcsIFBBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNiwgUEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE1LCBQQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTQsIFBBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMywgUEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEyLCBQQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTEsIFBBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMCwgUEEwX0RBVEEpLAorCisJLyogUEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BCNywgUEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI2LCBQQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjUsIFBCNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNCwgUEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIzLCBQQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjIsIFBCMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMSwgUEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIwLCBQQjBfREFUQSksCisKKwkvKiBQQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEM3LCBQQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzYsIFBDNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNSwgUEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM0LCBQQzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzMsIFBDM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMiwgUEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxLCBQQzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzAsIFBDMF9EQVRBKSwKKworCS8qIFBEICovCisJUElOTVVYX0dQSU8oR1BJT19QRDcsIFBEN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENiwgUEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ1LCBQRDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDQsIFBENF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMywgUEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQyLCBQRDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEsIFBEMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMCwgUEQwX0RBVEEpLAorCisJLyogUEUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BFNSwgUEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU0LCBQRTZfREFUQSksCisKKwkvKiBQRiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEY3LCBQRjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjYsIFBGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNSwgUEY1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY0LCBQRjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjMsIFBGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMiwgUEYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxLCBQRjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjAsIFBGMF9EQVRBKSwKKworCS8qIFBHICovCisJUElOTVVYX0dQSU8oR1BJT19QRzcsIFBHN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNiwgUEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEc1LCBQRzVfREFUQSksCisKKwkvKiBQSCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEg3LCBQSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDYsIFBINl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINSwgUEg1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg0LCBQSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDMsIFBIM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMiwgUEgyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgxLCBQSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDAsIFBIMF9EQVRBKSwKKworCS8qIFBKICovCisJUElOTVVYX0dQSU8oR1BJT19QSjcsIFBKN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNiwgUEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo1LCBQSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjQsIFBKNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMywgUEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEoyLCBQSjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjEsIFBKMV9EQVRBKSwKKworCS8qIEZOICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9DREUsCQlDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTUFHSUMsCQlFVEhfTUFHSUNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ESVNQLAkJRElTUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9MSU5LLAkJRVRIX0xJTktfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjUsCQlEUjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfRVIsCQlFVEhfVFhfRVJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjQsCQlEUjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfRU4sCQlFVEhfVFhfRU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjMsCQlEUjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMywJCUVUSF9UWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIyLAkJRFIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDIsCQlFVEhfVFhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMSwJCURSMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQxLAkJRVRIX1RYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjAsCQlEUjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMCwJCUVUSF9UWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVlNZTkMsCQlWU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ0xLLAkJSFNQSV9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9PRERGLAkJT0RERl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ1MsCQlIU1BJX0NTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREc1LAkJREc1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01ESU8sCQlFVEhfTURJT19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHNCwJCURHNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9DTEssCQlFVEhfUlhfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREczLAkJREczX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01EQywJCUVUSF9NRENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzIsCQlERzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfQ09MLAkJRVRIX0NPTF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMSwJCURHMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWF9DTEssCQlFVEhfVFhfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcwLAkJREcwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0NSUywJCUVUSF9DUlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQ0xLSU4sCQlEQ0xLSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1JYLAkJSFNQSV9SWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTWU5DLAkJSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1RYLAkJSFNQSV9UWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCNSwJCURCNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQzLAkJRVRIX1JYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjQsCQlEQjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMiwJCUVUSF9SWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIzLAkJREIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDEsCQlFVEhfUlhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMiwJCURCMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQwLAkJRVRIX1JYRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjEsCQlEQjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfRFYsCQlFVEhfUlhfRFZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjAsCQlEQjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfRVIsCQlFVEhfUlhfRVJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQ0xLT1VULAkJRENMS09VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NMSywJCVNDSUYxX1NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwJCVNDSUYxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1RYRCwJCVNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxLAkJREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CQUNLLAkJQkFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZBTEUsCQlGQUxFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzAsCQlEQUNLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDTEUsCQlGQ0xFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTEsCQlEUkVRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVEsCQlCUkVRX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX09WQzEsCQlVU0JfT1ZDMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwLAkJRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0JfT1ZDMCwJCVVTQl9PVkMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX1BFTkMxLAkJVVNCX1BFTkMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX1BFTkMwLAkJVVNCX1BFTkMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRE9VVCwJCUhBQzFfU0RPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1NEQVRBLAkJU1NJMV9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ01ELAkJU0RJRjFDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NESU4sCQlIQUMxX1NESU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1NDSywJCVNTSTFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFDRCwJCVNESUYxQ0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NZTkMsCQlIQUMxX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1dTLAkJU1NJMV9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxV1AsCQlTRElGMVdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9CSVRDTEssCUhBQzFfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9DTEssCQlTU0kxX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ0xLLAkJU0RJRjFDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NET1VULAkJSEFDMF9TRE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfU0RBVEEsCQlTU0kwX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMywJCVNESUYxRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NESU4sCQlIQUMwX1NESU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1NDSywJCVNTSTBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMiwJCVNESUYxRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NZTkMsCQlIQUMwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1dTLAkJU1NJMF9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDEsCQlTRElGMUQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9CSVRDTEssCUhBQzBfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9DTEssCQlTU0kwX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDAsCQlTRElGMUQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfU0NLLAkJU0NJRjNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMl9TREFUQSwJCVNTSTJfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19SWEQsCQlTQ0lGM19SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLLAkJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfU0NLLAkJU1NJMl9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19UWEQsCQlTQ0lGM19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUNfUkVTLAkJSEFDX1JFU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfV1MsCQlTU0kyX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzMsCQlEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ01ELAkJU0RJRjBDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMiwJCURBQ0syX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDRCwJCVNESUYwQ0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMywJCURSRVEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBXUCwJCVNESUYwV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9DVFMsCQlTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMiwJCURSRVEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDTEssCQlTRElGMENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywJCVNDSUYwX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDcsCQlJUkw3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMywJCVNESUYwRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssCQlTQ0lGMF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw2LAkJSVJMNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDIsCQlTRElGMEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELAkJU0NJRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNSwJCUlSTDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQxLAkJU0RJRjBEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1RYRCwJCVNDSUYwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDQsCQlJUkw0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMCwJCVNESUYwRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9TQ0ssCQlTQ0lGNV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsCQlGUkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9SWEQsCQlTQ0lGNV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsCQlJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9UWEQsCQlTQ0lGNV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJCLAkJQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUszLAkJRFJBSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJBLAkJQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1NDSywJCVNDSUY0X1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsyLAkJRFJBSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1dTLAkJU1NJM19XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1JYRCwJCVNDSUY0X1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsxLAkJRFJBSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1NEQVRBLAkJU1NJM19TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZTVEFUVVMsCQlGU1RBVFVTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfVFhELAkJU0NJRjRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzAsCQlEUkFLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTNfU0NLLAkJU1NJM19TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU0UsCQlGU0VfTUFSSyksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGZmY2MwMDAwLCAxNiwgMikgeworCQlQQTdfRk4sIFBBN19PVVQsIFBBN19JTiwgUEE3X0lOX1BVLAorCQlQQTZfRk4sIFBBNl9PVVQsIFBBNl9JTiwgUEE2X0lOX1BVLAorCQlQQTVfRk4sIFBBNV9PVVQsIFBBNV9JTiwgUEE1X0lOX1BVLAorCQlQQTRfRk4sIFBBNF9PVVQsIFBBNF9JTiwgUEE0X0lOX1BVLAorCQlQQTNfRk4sIFBBM19PVVQsIFBBM19JTiwgUEEzX0lOX1BVLAorCQlQQTJfRk4sIFBBMl9PVVQsIFBBMl9JTiwgUEEyX0lOX1BVLAorCQlQQTFfRk4sIFBBMV9PVVQsIFBBMV9JTiwgUEExX0lOX1BVLAorCQlQQTBfRk4sIFBBMF9PVVQsIFBBMF9JTiwgUEEwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGZmY2MwMDAyLCAxNiwgMikgeworCQlQQjdfRk4sIFBCN19PVVQsIFBCN19JTiwgUEI3X0lOX1BVLAorCQlQQjZfRk4sIFBCNl9PVVQsIFBCNl9JTiwgUEI2X0lOX1BVLAorCQlQQjVfRk4sIFBCNV9PVVQsIFBCNV9JTiwgUEI1X0lOX1BVLAorCQlQQjRfRk4sIFBCNF9PVVQsIFBCNF9JTiwgUEI0X0lOX1BVLAorCQlQQjNfRk4sIFBCM19PVVQsIFBCM19JTiwgUEIzX0lOX1BVLAorCQlQQjJfRk4sIFBCMl9PVVQsIFBCMl9JTiwgUEIyX0lOX1BVLAorCQlQQjFfRk4sIFBCMV9PVVQsIFBCMV9JTiwgUEIxX0lOX1BVLAorCQlQQjBfRk4sIFBCMF9PVVQsIFBCMF9JTiwgUEIwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1IiLCAweGZmY2MwMDA0LCAxNiwgMikgeworCQlQQzdfRk4sIFBDN19PVVQsIFBDN19JTiwgUEM3X0lOX1BVLAorCQlQQzZfRk4sIFBDNl9PVVQsIFBDNl9JTiwgUEM2X0lOX1BVLAorCQlQQzVfRk4sIFBDNV9PVVQsIFBDNV9JTiwgUEM1X0lOX1BVLAorCQlQQzRfRk4sIFBDNF9PVVQsIFBDNF9JTiwgUEM0X0lOX1BVLAorCQlQQzNfRk4sIFBDM19PVVQsIFBDM19JTiwgUEMzX0lOX1BVLAorCQlQQzJfRk4sIFBDMl9PVVQsIFBDMl9JTiwgUEMyX0lOX1BVLAorCQlQQzFfRk4sIFBDMV9PVVQsIFBDMV9JTiwgUEMxX0lOX1BVLAorCQlQQzBfRk4sIFBDMF9PVVQsIFBDMF9JTiwgUEMwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGZmY2MwMDA2LCAxNiwgMikgeworCQlQRDdfRk4sIFBEN19PVVQsIFBEN19JTiwgUEQ3X0lOX1BVLAorCQlQRDZfRk4sIFBENl9PVVQsIFBENl9JTiwgUEQ2X0lOX1BVLAorCQlQRDVfRk4sIFBENV9PVVQsIFBENV9JTiwgUEQ1X0lOX1BVLAorCQlQRDRfRk4sIFBENF9PVVQsIFBENF9JTiwgUEQ0X0lOX1BVLAorCQlQRDNfRk4sIFBEM19PVVQsIFBEM19JTiwgUEQzX0lOX1BVLAorCQlQRDJfRk4sIFBEMl9PVVQsIFBEMl9JTiwgUEQyX0lOX1BVLAorCQlQRDFfRk4sIFBEMV9PVVQsIFBEMV9JTiwgUEQxX0lOX1BVLAorCQlQRDBfRk4sIFBEMF9PVVQsIFBEMF9JTiwgUEQwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGZmY2MwMDA4LCAxNiwgMikgeworCQlQRTdfRk4sIFBFN19PVVQsIFBFN19JTiwgUEU3X0lOX1BVLAorCQlQRTZfRk4sIFBFNl9PVVQsIFBFNl9JTiwgUEU2X0lOX1BVLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSIiwgMHhmZmNjMDAwYSwgMTYsIDIpIHsKKwkJUEY3X0ZOLCBQRjdfT1VULCBQRjdfSU4sIFBGN19JTl9QVSwKKwkJUEY2X0ZOLCBQRjZfT1VULCBQRjZfSU4sIFBGNl9JTl9QVSwKKwkJUEY1X0ZOLCBQRjVfT1VULCBQRjVfSU4sIFBGNV9JTl9QVSwKKwkJUEY0X0ZOLCBQRjRfT1VULCBQRjRfSU4sIFBGNF9JTl9QVSwKKwkJUEYzX0ZOLCBQRjNfT1VULCBQRjNfSU4sIFBGM19JTl9QVSwKKwkJUEYyX0ZOLCBQRjJfT1VULCBQRjJfSU4sIFBGMl9JTl9QVSwKKwkJUEYxX0ZOLCBQRjFfT1VULCBQRjFfSU4sIFBGMV9JTl9QVSwKKwkJUEYwX0ZOLCBQRjBfT1VULCBQRjBfSU4sIFBGMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhmZmNjMDAwYywgMTYsIDIpIHsKKwkJUEc3X0ZOLCBQRzdfT1VULCBQRzdfSU4sIFBHN19JTl9QVSwKKwkJUEc2X0ZOLCBQRzZfT1VULCBQRzZfSU4sIFBHNl9JTl9QVSwKKwkJUEc1X0ZOLCBQRzVfT1VULCBQRzVfSU4sIFBHNV9JTl9QVSwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4ZmZjYzAwMGUsIDE2LCAyKSB7CisJCVBIN19GTiwgUEg3X09VVCwgUEg3X0lOLCBQSDdfSU5fUFUsCisJCVBINl9GTiwgUEg2X09VVCwgUEg2X0lOLCBQSDZfSU5fUFUsCisJCVBINV9GTiwgUEg1X09VVCwgUEg1X0lOLCBQSDVfSU5fUFUsCisJCVBINF9GTiwgUEg0X09VVCwgUEg0X0lOLCBQSDRfSU5fUFUsCisJCVBIM19GTiwgUEgzX09VVCwgUEgzX0lOLCBQSDNfSU5fUFUsCisJCVBIMl9GTiwgUEgyX09VVCwgUEgyX0lOLCBQSDJfSU5fUFUsCisJCVBIMV9GTiwgUEgxX09VVCwgUEgxX0lOLCBQSDFfSU5fUFUsCisJCVBIMF9GTiwgUEgwX09VVCwgUEgwX0lOLCBQSDBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEpDUiIsIDB4ZmZjYzAwMTAsIDE2LCAyKSB7CisJCVBKN19GTiwgUEo3X09VVCwgUEo3X0lOLCBQSjdfSU5fUFUsCisJCVBKNl9GTiwgUEo2X09VVCwgUEo2X0lOLCBQSjZfSU5fUFUsCisJCVBKNV9GTiwgUEo1X09VVCwgUEo1X0lOLCBQSjVfSU5fUFUsCisJCVBKNF9GTiwgUEo0X09VVCwgUEo0X0lOLCBQSjRfSU5fUFUsCisJCVBKM19GTiwgUEozX09VVCwgUEozX0lOLCBQSjNfSU5fUFUsCisJCVBKMl9GTiwgUEoyX09VVCwgUEoyX0lOLCBQSjJfSU5fUFUsCisJCVBKMV9GTiwgUEoxX09VVCwgUEoxX0lOLCBQSjFfSU5fUFUsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAxTVNFTFIiLCAweGZmY2MwMDgwLCAxNiwgMSkgeworCQkwLCAwLAorCQlQMU1TRUwxNF8wLCBQMU1TRUwxNF8xLAorCQlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCQlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCQlQMU1TRUwxMV8wLCBQMU1TRUwxMV8xLAorCQlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCQlQMU1TRUw5XzAsICBQMU1TRUw5XzEsCisJCVAxTVNFTDhfMCwgIFAxTVNFTDhfMSwKKwkJUDFNU0VMN18wLCAgUDFNU0VMN18xLAorCQlQMU1TRUw2XzAsICBQMU1TRUw2XzEsCisJCVAxTVNFTDVfMCwgIFAxTVNFTDVfMSwKKwkJUDFNU0VMNF8wLCAgUDFNU0VMNF8xLAorCQlQMU1TRUwzXzAsICBQMU1TRUwzXzEsCisJCVAxTVNFTDJfMCwgIFAxTVNFTDJfMSwKKwkJUDFNU0VMMV8wLCAgUDFNU0VMMV8xLAorCQlQMU1TRUwwXzAsICBQMU1TRUwwXzEgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUDJNU0VMUiIsIDB4ZmZjYzAwODIsIDE2LCAxKSB7CisJCVAyTVNFTDE1XzAsIFAyTVNFTDE1XzEsCisJCVAyTVNFTDE0XzAsIFAyTVNFTDE0XzEsCisJCVAyTVNFTDEzXzAsIFAyTVNFTDEzXzEsCisJCVAyTVNFTDEyXzAsIFAyTVNFTDEyXzEsCisJCVAyTVNFTDExXzAsIFAyTVNFTDExXzEsCisJCVAyTVNFTDEwXzAsIFAyTVNFTDEwXzEsCisJCVAyTVNFTDlfMCwgIFAyTVNFTDlfMSwKKwkJUDJNU0VMOF8wLCAgUDJNU0VMOF8xLAorCQlQMk1TRUw3XzAsICBQMk1TRUw3XzEsCisJCVAyTVNFTDZfMCwgIFAyTVNFTDZfMSwKKwkJUDJNU0VMNV8wLCAgUDJNU0VMNV8xLAorCQlQMk1TRUw0XzAsICBQMk1TRUw0XzEsCisJCVAyTVNFTDNfMCwgIFAyTVNFTDNfMSwKKwkJUDJNU0VMMl8wLCAgUDJNU0VMMl8xLAorCQlQMk1TRUwxXzAsICBQMk1TRUwxXzEsCisJCVAyTVNFTDBfMCwgIFAyTVNFTDBfMSB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhmZmNjMDAyMCwgOCkgeworCQlQQTdfREFUQSwgUEE2X0RBVEEsIFBBNV9EQVRBLCBQQTRfREFUQSwKKwkJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBCRFIiLCAweGZmY2MwMDIyLCA4KSB7CisJCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCQlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUiIsIDB4ZmZjYzAwMjQsIDgpIHsKKwkJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJCVBDM19EQVRBLCBQQzJfREFUQSwgUEMxX0RBVEEsIFBDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhmZmNjMDAyNiwgOCkgeworCQlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwkJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGZmY2MwMDI4LCA4KSB7CisJCVBFN19EQVRBLCBQRTZfREFUQSwKKwkJMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUiIsIDB4ZmZjYzAwMmEsIDgpIHsKKwkJUEY3X0RBVEEsIFBGNl9EQVRBLCBQRjVfREFUQSwgUEY0X0RBVEEsCisJCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQR0RSIiwgMHhmZmNjMDAyYywgOCkgeworCQlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLCAwLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSERSIiwgMHhmZmNjMDAyZSwgOCkgeworCQlQSDdfREFUQSwgUEg2X0RBVEEsIFBINV9EQVRBLCBQSDRfREFUQSwKKwkJUEgzX0RBVEEsIFBIMl9EQVRBLCBQSDFfREFUQSwgUEgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBKRFIiLCAweGZmY2MwMDMwLCA4KSB7CisJCVBKN19EQVRBLCBQSjZfREFUQSwgUEo1X0RBVEEsIFBKNF9EQVRBLAorCQlQSjNfREFUQSwgUEoyX0RBVEEsIFBKMV9EQVRBLCAwIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3Nzg2X3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzc4Nl9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9GU0UsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDc3ODZfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKaW5kZXggNGZmNGRjNi4uYzE1NDkzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpYzBfcmVzb3VyY2VzW10gPSB7CkBAIC0xNDAsNiArMTQxLDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGpwdV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMTc1LDYgKzIwOCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzQzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZpaWMwX2RldmljZSwKIAkmaWljMV9kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCmluZGV4IDgzOWFlOTcuLjkzZWNmOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpaWNfcmVzb3VyY2VzW10gPSB7CkBAIC0xNDcsNiArMTQ4LDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZldTFfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTE2Nyw2ICsyMDAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM2Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmaWljX2RldmljZSwKIAkmc2NpX2RldmljZSwKIAkmdXNiX2hvc3RfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCA1MTQ2YWZjLi4wZTVkMjA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKQEAgLTE3Niw2ICsxNzcsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoanB1X3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0yMDksNiArMjQyLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnVzYmZfZGV2aWNlLAogCSZpaWNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCA4NDk3NzBkLi41MzM4ZGFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKQEAgLTEwMCw2ICsxMDEsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmV1MV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKQEAgLTIyMSw2ICsyNTQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyM19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKaW5kZXggM2M1YjYyOS4uYmRmMGY2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAogICogIENvcHlyaWdodCAoQykgMjAwNyAgWW9zaGloaXJvIFNoaW1vZGEKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE5vYnVoaXJvIEl3YW1hdHN1CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yMiwxOCArMjIsOCBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCi0JCS5zdGFydAk9IDIwLAorCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLworCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNTAsMTcgKzQwLDE3IEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTA4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDEwNCwgMTA1LCAxMDcsIDEwNiB9LAorCQkuaXJxcwkJPSB7IDEwNCwgMTA0LCAxMDQsIDEwNCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0xNDgsOTMgKzEzOCw2NSBAQAogCUlSTF9ISExMLCBJUkxfSEhMSCwgSVJMX0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksIExDREMsCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwKLQlJSUMwLCBJSUMxLAotCUNNVCwKLQlHRUlOVDAsIEdFSU5UMSwgR0VJTlQyLAotCUhBQywKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTVElGMCwgU1RJRjEsCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCVNJT0YwLCBTSU9GMSwgU0lPRjIsCi0JVVNCSCwgVVNCRkkwLCBVU0JGSTEsCi0JVFBVLCBQQ0MsCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCwKKwlSVEMsIFdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKKwlIVURJLCBMQ0RDLCBETUFDLCBTQ0lGMCwgSUlDMCwgSUlDMSwgQ01ULCBHRVRIRVIsIEhBQywKKwlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELCBQQ0lDNSwKKwlTVElGMCwgU1RJRjEsIFNDSUYxLCBTSU9GMCwgU0lPRjEsIFNJT0YyLAorCVVTQkgsIFVTQkYsIFRQVSwgUENDLCBNTUNJRiwgU0lNLAogCVRNVTMsIFRNVTQsIFRNVTUsIEFEQywgU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCi0JR1BJT19DSDAsIEdQSU9fQ0gxLCBHUElPX0NIMiwgR1BJT19DSDMsCisJU0NJRjIsIEdQSU8sCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCiAKLQlUTVUwMTIsIFRNVTM0NSwgUlRDLCBETUFDLCBTQ0lGMCwgR0VUSEVSLCBQQ0lDNSwKLQlTQ0lGMSwgVVNCRiwgTU1DSUYsIFNJTSwgU0NJRjIsIEdQSU8sCisJVE1VMDEyLCBUTVUzNDUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwgSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwKIAlJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLAogCUlOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksIElOVENfVkVDVChIVURJLCAweDYwMCksCiAJSU5UQ19WRUNUKExDREMsIDB4NjIwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDY0MCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NmEwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2YzApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg3YTApLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2EwKSwKIAlJTlRDX1ZFQ1QoSUlDMCwgMHg4QTApLCBJTlRDX1ZFQ1QoSUlDMSwgMHg4QzApLAotCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEdFSU5UMCwgMHg5MjApLAotCUlOVENfVkVDVChHRUlOVDEsIDB4OTQwKSwgSU5UQ19WRUNUKEdFSU5UMiwgMHg5NjApLAorCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEdFVEhFUiwgMHg5MjApLAorCUlOVENfVkVDVChHRVRIRVIsIDB4OTQwKSwgSU5UQ19WRUNUKEdFVEhFUiwgMHg5NjApLAogCUlOVENfVkVDVChIQUMsIDB4OTgwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAogCUlOVENfVkVDVChTVElGMCwgMHhiNDApLCBJTlRDX1ZFQ1QoU1RJRjEsIDB4YjYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweGI4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4YmEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweGJjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4YmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGJjMCksIElOVENfVkVDVChTQ0lGMSwgMHhiZTApLAogCUlOVENfVkVDVChTSU9GMCwgMHhjMDApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4YzIwKSwKLQlJTlRDX1ZFQ1QoVVNCSCwgMHhjNjApLCBJTlRDX1ZFQ1QoVVNCRkkwLCAweGM4MCksCi0JSU5UQ19WRUNUKFVTQkZJMSwgMHhjYTApLAorCUlOVENfVkVDVChVU0JILCAweGM2MCksIElOVENfVkVDVChVU0JGLCAweGM4MCksCisJSU5UQ19WRUNUKFVTQkYsIDB4Y2EwKSwKIAlJTlRDX1ZFQ1QoVFBVLCAweGNjMCksIElOVENfVkVDVChQQ0MsIDB4Y2UwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCi0JSU5UQ19WRUNUKFNJTV9FUkksIDB4ZDgwKSwgSU5UQ19WRUNUKFNJTV9SWEksIDB4ZGEwKSwKLQlJTlRDX1ZFQ1QoU0lNX1RYSSwgMHhkYzApLCBJTlRDX1ZFQ1QoU0lNX1RFTkQsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAorCUlOVENfVkVDVChTSU0sIDB4ZDgwKSwgSU5UQ19WRUNUKFNJTSwgMHhkYTApLAorCUlOVENfVkVDVChTSU0sIDB4ZGMwKSwgSU5UQ19WRUNUKFNJTSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwgSU5UQ19WRUNUKEFEQywgMHhlNjApLAogCUlOVENfVkVDVChTU0kwLCAweGU4MCksIElOVENfVkVDVChTU0kxLCAweGVhMCksCiAJSU5UQ19WRUNUKFNTSTIsIDB4ZWMwKSwgSU5UQ19WRUNUKFNTSTMsIDB4ZWUwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfRVJJLCAweGYwMCksIElOVENfVkVDVChTQ0lGMl9SWEksIDB4ZjIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfQlJJLCAweGY0MCksIElOVENfVkVDVChTQ0lGMl9UWEksIDB4ZjYwKSwKLQlJTlRDX1ZFQ1QoR1BJT19DSDAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9fQ0gxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9fQ0gyLCAweGZjMCksIElOVENfVkVDVChHUElPX0NIMywgMHhmZTApLAorCUlOVENfVkVDVChTQ0lGMiwgMHhmMDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjQwKSwgSU5UQ19WRUNUKFNDSUYyLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoR0VUSEVSLCBHRUlOVDAsIEdFSU5UMSwgR0VJTlQyKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChVU0JGLCBVU0JGSTAsIFVTQkZJMSksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCi0JSU5UQ19HUk9VUChTSU0sIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5EKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT19DSDAsIEdQSU9fQ0gxLCBHUElPX0NIMiwgR1BJT19DSDMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggZmI4MjAwYy4uNmY3MjI3YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTIwLDE3ICsyMCw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC00OCwxMiArMzgsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDc2LCA3NywgNzksIDc4IH0sCisJCS5pcnFzCQk9IHsgNzYsIDc2LCA3NiwgNzYgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtOTAsODIgKzgwLDU1IEBACiAJSVJMX0hITEwsIElSTF9ISExILCBJUkxfSEhITCwKIAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LAotCUNNVCwgSEFDLAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTSU9GLCBIU1BJLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JRE1BQzFfRE1JTlQ4LCBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsCi0JVE1VMywgVE1VNCwgVE1VNSwKLQlTU0ksCi0JRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELCBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSwKLQlHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMsCisJUlRDLCBXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgRE1BQzAsIFNDSUYwLCBETUFDMSwgQ01ULCBIQUMsCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU0NJRjEsIFNJT0YsIEhTUEksIE1NQ0lGLCBUTVUzLCBUTVU0LCBUTVU1LCBTU0ksIEZMQ1RMLAlHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JUlRDLCBUTVUwMTIsIERNQUMwLCBTQ0lGMCwgRE1BQzQ1LCBETUFDMSwKLQlQQ0lDNSwgU0NJRjEsIE1NQ0lGLCBUTVUzNDUsIEZMQ1RMLCBHUElPLAorCVRNVTAxMiwJVE1VMzQ1LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLAogCUlOVENfVkVDVChIVURJLCAweDYwMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDc4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ2LCAweDdjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDcsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY4MCksIElOVENfVkVDVChETUFDMCwgMHg2YTApLAorCUlOVENfVkVDVChETUFDMCwgMHg2YzApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDc4MCksIElOVENfVkVDVChETUFDMCwgMHg3YTApLAorCUlOVENfVkVDVChETUFDMSwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4N2UwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChIQUMsIDB4OTgwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweGI4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4YmEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweGJjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4YmUwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YmMwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJlMCksCiAJSU5UQ19WRUNUKFNJT0YsIDB4YzAwKSwgSU5UQ19WRUNUKEhTUEksIDB4YzgwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UOCwgMHhkODApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ5LCAweGRhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UMTAsIDB4ZGMwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UMTEsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAorCUlOVENfVkVDVChETUFDMSwgMHhkODApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGMwKSwgSU5UQ19WRUNUKERNQUMxLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLAogCUlOVENfVkVDVChTU0ksIDB4ZTgwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxTVEUsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMRU5ELCAweGYyMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUlExLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9JMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT0kxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9JMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT0kzLCAweGZlMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGYwMCksIElOVENfVkVDVChGTENUTCwgMHhmMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwKLQkJICAgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCiAJSU5UQ19HUk9VUChUTVUzNDUsIFRNVTMsIFRNVTQsIFRNVTUpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwKLQkJICAgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDMwYmFhNjMuLmQ4MDgwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0yMCwxOCArMjAsMTMgQEAKIAkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQ0LCA0NSwgNDcsIDQ2IH0sCi0JfSwKLQotCS8qCi0JICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcwotCSAqLwotCXsKKwkJLmlycXMJCT0geyA0NCwgNDQsIDQ0LCA0NCB9LAorCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKQEAgLTkxLDMzICs4NiwxOSBAQAogCUlSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVdEVCwKLQlUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwgRE1BQzFfRE1JTlQ5LAotCURNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsIERNQUMxX0RNQUUsCi0JSFNQSSwKKwlXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgRE1BQzAsIFNDSUYwLCBTQ0lGMSwgRE1BQzEsIEhTUEksCiAJU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU0lPRiwKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCURVLAotCUdEVEFfR0FDTEksIEdEVEFfR0FNQ0ksIEdEVEFfR0FFUkksCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU0lPRiwgTU1DSUYsIERVLCBHRFRBLAogCVRNVTMsIFRNVTQsIFRNVTUsCiAJU1NJMCwgU1NJMSwKIAlIQUMwLCBIQUMxLAotCUZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEsCi0JR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzLAorCUZMQ1RMLCBHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JVE1VMDEyLCBETUFDMCwgU0NJRjAsIFNDSUYxLCBETUFDMSwKLQlQQ0lDNSwgTU1DSUYsIEdEVEEsIFRNVTM0NSwgRkxDVEwsIEdQSU8KKwlUTVUwMTIsCVRNVTM0NQogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMjUsNTcgKzEwNiw0NSBAQAogCUlOVENfVkVDVChUTVUwLCAweDU4MCksIElOVENfVkVDVChUTVUxLCAweDVhMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2ODApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NmEwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg2YzApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZlMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHg3ODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweDdhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHg3YzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweDdlMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UNiwgMHg4ODApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ3LCAweDhhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UOCwgMHg4YzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ5LCAweDhlMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UMTAsIDB4OTAwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UMTEsIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1BRSwgMHg5NDApLAorCUlOVENfVkVDVChETUFDMCwgMHg2MjApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NjQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY4MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDZhMCksIElOVENfVkVDVChETUFDMCwgMHg2YzApLAorCUlOVENfVkVDVChETUFDMCwgMHg2ZTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDc4MCksIElOVENfVkVDVChTQ0lGMSwgMHg3YTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3YzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODgwKSwgSU5UQ19WRUNUKERNQUMxLCAweDhhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDhjMCksIElOVENfVkVDVChETUFDMSwgMHg4ZTApLAorCUlOVENfVkVDVChETUFDMSwgMHg5MDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OTQwKSwKIAlJTlRDX1ZFQ1QoSFNQSSwgMHg5NjApLAogCUlOVENfVkVDVChTQ0lGMiwgMHg5ODApLCBJTlRDX1ZFQ1QoU0NJRjMsIDB4OWEwKSwKIAlJTlRDX1ZFQ1QoU0NJRjQsIDB4OWMwKSwgSU5UQ19WRUNUKFNDSUY1LCAweDllMCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKIAlJTlRDX1ZFQ1QoU0lPRiwgMHhjMDApLAotCUlOVENfVkVDVChNTUNJRl9GU1RBVCwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUZfVFJBTiwgMHhkMjApLAotCUlOVENfVkVDVChNTUNJRl9FUlIsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGX0ZSRFksIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAogCUlOVENfVkVDVChEVSwgMHhkODApLAotCUlOVENfVkVDVChHRFRBX0dBQ0xJLCAweGRhMCksIElOVENfVkVDVChHRFRBX0dBTUNJLCAweGRjMCksCi0JSU5UQ19WRUNUKEdEVEFfR0FFUkksIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoR0RUQSwgMHhkYTApLCBJTlRDX1ZFQ1QoR0RUQSwgMHhkYzApLAorCUlOVENfVkVDVChHRFRBLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLAogCUlOVENfVkVDVChTU0kwLCAweGU4MCksIElOVENfVkVDVChTU0kxLCAweGVhMCksCiAJSU5UQ19WRUNUKEhBQzAsIDB4ZWMwKSwgSU5UQ19WRUNUKEhBQzEsIDB4ZWUwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxTVEUsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMRU5ELCAweGYyMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUlExLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9JMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT0kxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9JMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT0kzLCAweGZlMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGYwMCksIElOVENfVkVDVChGTENUTCwgMHhmMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFRNVTAxMiwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsCi0JCSAgIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSwgRE1BQzFfRE1BRSksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKE1NQ0lGLCBNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZKSwKLQlJTlRDX0dST1VQKEdEVEEsIEdEVEFfR0FDTEksIEdEVEFfR0FNQ0ksIEdEVEFfR0FFUkkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsCi0JCSAgIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQ3ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKQEAgLTAsMCArMSw0OTAgQEAKKy8qCisgKiBTSDc3ODYgU2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogQmFzZWQgb24gU0g3Nzg1IFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCX0sCisJLyoKKwkgKiBUaGUgcmVzdCBvZiB0aGVzZSBhbGwgaGF2ZSBtdWx0aXBsZXhlZCBJUlFzCisJICovCisJeworCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlYzAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUwLCA1MCwgNTAsIDUwIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZDAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUxLCA1MSwgNTEsIDUxIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZTAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZjAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUzLCA1MywgNTMsIDUzIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9vaGNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmU3MDQwMCwKKwkJLmVuZAk9IDB4ZmZlNzA0ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSA3NywKKwkJLmVuZAk9IDc3LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCB1c2Jfb2hjaV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2Jfb2hjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX29oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJnVzYl9vaGNpX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9vaGNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdXNiX29oY2lfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKKwkmdXNiX29oY2lfZGV2aWNlLAorfTsKKworCisvKgorICogUGxlYXNlIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3VyIHBsYXRmb3JtIGJvYXJkCisgKiB1c2UgZXh0ZXJuYWwgY2xvY2sgZm9yIFVTQgorICogKi8KKyNkZWZpbmUgVVNCQ1RMMAkJMHhmZmU3MDg1OAorI2RlZmluZSBDTE9DS19NT0RFX01BU0sgMHhmZmZmZmY3ZgorI2RlZmluZSBFWFRfQ0xPQ0tfTU9ERSAgMHgwMDAwMDA4MAordm9pZCBfX2luaXQgc2g3Nzg2X3VzYl91c2VfZXhjbG9jayh2b2lkKQoreworCXUzMiB2YWwgPSBfX3Jhd19yZWFkbChVU0JDVEwwKSAmIENMT0NLX01PREVfTUFTSzsKKwlfX3Jhd193cml0ZWwodmFsIHwgRVhUX0NMT0NLX01PREUsIFVTQkNUTDApOworfQorCisjZGVmaW5lIFVTQklOSVRSRUcxCTB4ZmZlNzAwOTQKKyNkZWZpbmUgVVNCSU5JVFJFRzIJMHhmZmU3MDA5YworI2RlZmluZSBVU0JJTklUVkFMMQkweDAwZmYwMDQwCisjZGVmaW5lIFVTQklOSVRWQUwyCTB4MDAwMDAwMDEKKworI2RlZmluZSBVU0JQQ1RMMQkweGZmZTcwODA0CisjZGVmaW5lIFVTQlNUCQkweGZmZTcwODA4CisjZGVmaW5lIFBIWV9FTkIJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUExMX0VOQgkJMHgwMDAwMDAwMgorI2RlZmluZSBQSFlfUlNUCQkweDAwMDAwMDA0CisjZGVmaW5lIEFDVF9QTExfU1RBVFVTCTB4YzAwMDAwMDAKK3N0YXRpYyB2b2lkIF9faW5pdCBzaDc3ODZfdXNiX3NldHVwKHZvaWQpCit7CisJaW50IGkgPSAxMDAwMDAwOworCisJLyoKKwkgKiBVU0IgaW5pdGlhbCBzZXR0aW5ncworCSAqCisJICogVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5CisJICogZm9yIHVzaW5nIHRoZSBVU0IgbW9kdWxlcy4KKwkgKgorCSAqIHNlZSAiVVNCIEluaXRhbCBTZXR0aW5ncyIgZm9yIGRldGFpbAorCSAqLworCV9fcmF3X3dyaXRlbChVU0JJTklUVkFMMSwgVVNCSU5JVFJFRzEpOworCV9fcmF3X3dyaXRlbChVU0JJTklUVkFMMiwgVVNCSU5JVFJFRzIpOworCisJLyoKKwkgKiBTZXQgdGhlIFBIWSBhbmQgUExMIGVuYWJsZSBiaXQKKwkgKi8KKwlfX3Jhd193cml0ZWwoUEhZX0VOQiB8IFBMTF9FTkIsIFVTQlBDVEwxKTsKKwl3aGlsZSAoaS0tICYmCisJICAgICAgICgoX19yYXdfcmVhZGwoVVNCU1QpICYgQUNUX1BMTF9TVEFUVVMpICE9IEFDVF9QTExfU1RBVFVTKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoaSkgeworCQkvKiBTZXQgdGhlIFBIWSBSU1QgYml0ICovCisJCV9fcmF3X3dyaXRlbChQSFlfRU5CIHwgUExMX0VOQiB8IFBIWV9SU1QsIFVTQlBDVEwxKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2g3Nzg2IHVzYiBzZXR1cCBkb25lXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4Nl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJc2g3Nzg2X3VzYl9zZXR1cCgpOworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3ODZfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDc3ODZfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKHNoNzc4Nl9kZXZpY2VzX3NldHVwKTsKKworZW51bSB7CisJVU5VU0VEID0gMCwKKworCS8qIGludGVycnVwdCBzb3VyY2VzICovCisKKwlJUkwwX0xMTEwsIElSTDBfTExMSCwgSVJMMF9MTEhMLCBJUkwwX0xMSEgsCisJSVJMMF9MSExMLCBJUkwwX0xITEgsIElSTDBfTEhITCwgSVJMMF9MSEhILAorCUlSTDBfSExMTCwgSVJMMF9ITExILCBJUkwwX0hMSEwsIElSTDBfSExISCwKKwlJUkwwX0hITEwsIElSTDBfSEhMSCwgSVJMMF9ISEhMLAorCisJSVJMNF9MTExMLCBJUkw0X0xMTEgsIElSTDRfTExITCwgSVJMNF9MTEhILAorCUlSTDRfTEhMTCwgSVJMNF9MSExILCBJUkw0X0xISEwsIElSTDRfTEhISCwKKwlJUkw0X0hMTEwsIElSTDRfSExMSCwgSVJMNF9ITEhMLCBJUkw0X0hMSEgsCisJSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwKKworCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCisJV0RULAorCVRNVTBfMCwgVE1VMF8xLCBUTVUwXzIsIFRNVTBfMywKKwlUTVUxXzAsIFRNVTFfMSwgVE1VMV8yLAorCURNQUMwXzAsIERNQUMwXzEsIERNQUMwXzIsIERNQUMwXzMsIERNQUMwXzQsIERNQUMwXzUsIERNQUMwXzYsCisJSFVESTEsIEhVREkwLAorCURNQUMxXzAsIERNQUMxXzEsIERNQUMxXzIsIERNQUMxXzMsCisJSFBCXzAsIEhQQl8xLCBIUEJfMiwKKwlTQ0lGMF8wLCBTQ0lGMF8xLCBTQ0lGMF8yLCBTQ0lGMF8zLAorCVNDSUYxLAorCVRNVTIsIFRNVTMsCisJU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCisJRXRoXzAsIEV0aF8xLAorCVBDSWVDMF8wLCBQQ0llQzBfMSwgUENJZUMwXzIsCisJUENJZUMxXzAsIFBDSWVDMV8xLCBQQ0llQzFfMiwKKwlVU0IsCisJSTJDMCwgSTJDMSwKKwlEVSwKKwlTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAorCVBDSWVDMl8wLCBQQ0llQzJfMSwgUENJZUMyXzIsCisJSEFDMCwgSEFDMSwKKwlGTENUTCwKKwlIU1BJLAorCUdQSU8wLCBHUElPMSwKKwlUaGVybWFsLAorCUlOVEMwLCBJTlRDMSwgSU5UQzIsIElOVEMzLCBJTlRDNCwgSU5UQzUsIElOVEM2LCBJTlRDNywKKworCS8qIGludGVycnVwdCBncm91cHMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChXRFQsIDB4M2UwKSwKKwlJTlRDX1ZFQ1QoVE1VMF8wLCAweDQwMCksIElOVENfVkVDVChUTVUwXzEsIDB4NDIwKSwKKwlJTlRDX1ZFQ1QoVE1VMF8yLCAweDQ0MCksIElOVENfVkVDVChUTVUwXzMsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoVE1VMV8wLCAweDQ4MCksIElOVENfVkVDVChUTVUxXzEsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoVE1VMV8yLCAweDRjMCksCisJSU5UQ19WRUNUKERNQUMwXzAsIDB4NTAwKSwgSU5UQ19WRUNUKERNQUMwXzEsIDB4NTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfMiwgMHg1NDApLCBJTlRDX1ZFQ1QoRE1BQzBfMywgMHg1NjApLAorCUlOVENfVkVDVChETUFDMF80LCAweDU4MCksIElOVENfVkVDVChETUFDMF81LCAweDVhMCksCisJSU5UQ19WRUNUKERNQUMwXzYsIDB4NWMwKSwKKwlJTlRDX1ZFQ1QoSFVESTEsIDB4NWUwKSwgSU5UQ19WRUNUKEhVREkwLCAweDYwMCksCisJSU5UQ19WRUNUKERNQUMxXzAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMxXzEsIDB4NjQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFfMiwgMHg2NjApLCBJTlRDX1ZFQ1QoRE1BQzFfMywgMHg2ODApLAorCUlOVENfVkVDVChIUEJfMCwgMHg2YTApLCBJTlRDX1ZFQ1QoSFBCXzEsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoSFBCXzIsIDB4NmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjBfMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfMSwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGMF8yLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF8zLCAweDc2MCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDc4MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4N2EwKSwgSU5UQ19WRUNUKFRNVTMsIDB4N2MwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ODQwKSwgSU5UQ19WRUNUKFNDSUYzLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUY0LCAweDg4MCksIElOVENfVkVDVChTQ0lGNSwgMHg4YTApLAorCUlOVENfVkVDVChFdGhfMCwgMHg4YzApLCBJTlRDX1ZFQ1QoRXRoXzEsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoUENJZUMwXzAsIDB4YWUwKSwgSU5UQ19WRUNUKFBDSWVDMF8xLCAweGIwMCksCisJSU5UQ19WRUNUKFBDSWVDMF8yLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSWVDMV8wLCAweGI0MCksIElOVENfVkVDVChQQ0llQzFfMSwgMHhiNjApLAorCUlOVENfVkVDVChQQ0llQzFfMiwgMHhiODApLAorCUlOVENfVkVDVChVU0IsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoSTJDMCwgMHhjYzApLCBJTlRDX1ZFQ1QoSTJDMSwgMHhjZTApLAorCUlOVENfVkVDVChEVSwgMHhkMDApLAorCUlOVENfVkVDVChTU0kwLCAweGQyMCksIElOVENfVkVDVChTU0kxLCAweGQ0MCksCisJSU5UQ19WRUNUKFNTSTIsIDB4ZDYwKSwgSU5UQ19WRUNUKFNTSTMsIDB4ZDgwKSwKKwlJTlRDX1ZFQ1QoUENJZUMyXzAsIDB4ZGEwKSwgSU5UQ19WRUNUKFBDSWVDMl8xLCAweGRjMCksCisJSU5UQ19WRUNUKFBDSWVDMl8yLCAweGRlMCksCisJSU5UQ19WRUNUKEhBQzAsIDB4ZTAwKSwgSU5UQ19WRUNUKEhBQzEsIDB4ZTIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZTQwKSwKKwlJTlRDX1ZFQ1QoSFNQSSwgMHhlODApLAorCUlOVENfVkVDVChHUElPMCwgMHhlYTApLCBJTlRDX1ZFQ1QoR1BJTzEsIDB4ZWMwKSwKKwlJTlRDX1ZFQ1QoVGhlcm1hbCwgMHhlZTApLAorfTsKKworLyogRklYTUU6IE1haW4gQ1BVIHN1cHBvcnQgb25seSBub3cgKi8KKyNpZiAxIC8qIE1haW4gQ1BVICovCisjZGVmaW5lIENuSU5UTVNLMAkweGZlNDEwMDMwCisjZGVmaW5lIENuSU5UTVNLMQkweGZlNDEwMDQwCisjZGVmaW5lIENuSU5UTVNLQ0xSMAkweGZlNDEwMDUwCisjZGVmaW5lIENuSU5UTVNLQ0xSMQkweGZlNDEwMDYwCisjZGVmaW5lIENuSU5UMk1TS1IwCTB4ZmU0MTBhMjAKKyNkZWZpbmUgQ25JTlQyTVNLUjEJMHhmZTQxMGEyNAorI2RlZmluZSBDbklOVDJNU0tSMgkweGZlNDEwYTI4CisjZGVmaW5lIENuSU5UMk1TS1IzCTB4ZmU0MTBhMmMKKyNkZWZpbmUgQ25JTlQyTVNLQ1IwCTB4ZmU0MTBhMzAKKyNkZWZpbmUgQ25JTlQyTVNLQ1IxCTB4ZmU0MTBhMzQKKyNkZWZpbmUgQ25JTlQyTVNLQ1IyCTB4ZmU0MTBhMzgKKyNkZWZpbmUgQ25JTlQyTVNLQ1IzCTB4ZmU0MTBhM2MKKyNlbHNlIC8qIFN1YiBDUFUgKi8KKyNkZWZpbmUgQ25JTlRNU0swCTB4ZmU0MTAwMzQKKyNkZWZpbmUgQ25JTlRNU0sxCTB4ZmU0MTAwNDQKKyNkZWZpbmUgQ25JTlRNU0tDTFIwCTB4ZmU0MTAwNTQKKyNkZWZpbmUgQ25JTlRNU0tDTFIxCTB4ZmU0MTAwNjQKKyNkZWZpbmUgQ25JTlQyTVNLUjAJMHhmZTQxMGIyMAorI2RlZmluZSBDbklOVDJNU0tSMQkweGZlNDEwYjI0CisjZGVmaW5lIENuSU5UMk1TS1IyCTB4ZmU0MTBiMjgKKyNkZWZpbmUgQ25JTlQyTVNLUjMJMHhmZTQxMGIyYworI2RlZmluZSBDbklOVDJNU0tDUjAJMHhmZTQxMGIzMAorI2RlZmluZSBDbklOVDJNU0tDUjEJMHhmZTQxMGIzNAorI2RlZmluZSBDbklOVDJNU0tDUjIJMHhmZTQxMGIzOAorI2RlZmluZSBDbklOVDJNU0tDUjMJMHhmZTQxMGIzYworI2VuZGlmCisKKyNkZWZpbmUgSU5UTVNLMgkJMHhmZTQxMDA2OAorI2RlZmluZSBJTlRNU0tDTFIyCTB4ZmU0MTAwNmMKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IENuSU5UTVNLMCwgQ25JTlRNU0tDTFIwLCAzMiwKKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCisJeyBJTlRNU0syLCBJTlRNU0tDTFIyLCAzMiwKKwkgIHsgSVJMMF9MTExMLCBJUkwwX0xMTEgsIElSTDBfTExITCwgSVJMMF9MTEhILAorCSAgICBJUkwwX0xITEwsIElSTDBfTEhMSCwgSVJMMF9MSEhMLCBJUkwwX0xISEgsCisJICAgIElSTDBfSExMTCwgSVJMMF9ITExILCBJUkwwX0hMSEwsIElSTDBfSExISCwKKwkgICAgSVJMMF9ISExMLCBJUkwwX0hITEgsIElSTDBfSEhITCwgMCwKKwkgICAgSVJMNF9MTExMLCBJUkw0X0xMTEgsIElSTDRfTExITCwgSVJMNF9MTEhILAorCSAgICBJUkw0X0xITEwsIElSTDRfTEhMSCwgSVJMNF9MSEhMLCBJUkw0X0xISEgsCisJICAgIElSTDRfSExMTCwgSVJMNF9ITExILCBJUkw0X0hMSEwsIElSTDRfSExISCwKKwkgICAgSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwgMCwgfSB9LAorCXsgQ25JTlQyTVNLUjAsIENuSU5UMk1TS0NSMCAsIDMyLAorCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBXRFQgfSB9LAorCXsgQ25JTlQyTVNLUjEsIENuSU5UMk1TS0NSMSwgMzIsCisJICB7IFRNVTBfMCwgVE1VMF8xLCBUTVUwXzIsIFRNVTBfMywgVE1VMV8wLCBUTVUxXzEsIFRNVTFfMiwgMCwKKwkgICAgRE1BQzBfMCwgRE1BQzBfMSwgRE1BQzBfMiwgRE1BQzBfMywgRE1BQzBfNCwgRE1BQzBfNSwgRE1BQzBfNiwKKwkgICAgSFVESTEsIEhVREkwLAorCSAgICBETUFDMV8wLCBETUFDMV8xLCBETUFDMV8yLCBETUFDMV8zLAorCSAgICBIUEJfMCwgSFBCXzEsIEhQQl8yLAorCSAgICBTQ0lGMF8wLCBTQ0lGMF8xLCBTQ0lGMF8yLCBTQ0lGMF8zLAorCSAgICBTQ0lGMSwKKwkgICAgVE1VMiwgVE1VMywgMCwgfSB9LAorCXsgQ25JTlQyTVNLUjIsIENuSU5UMk1TS0NSMiwgMzIsCisJICB7IDAsIDAsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAorCSAgICBFdGhfMCwgRXRoXzEsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIFBDSWVDMF8wLCBQQ0llQzBfMSwgUENJZUMwXzIsCisJICAgIFBDSWVDMV8wLCBQQ0llQzFfMSwgUENJZUMxXzIsCisJICAgIFVTQiwgMCwgMCB9IH0sCisJeyBDbklOVDJNU0tSMywgQ25JTlQyTVNLQ1IzLCAzMiwKKwkgIHsgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgSTJDMCwgSTJDMSwKKwkgICAgRFUsIFNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCisJICAgIFBDSWVDMl8wLCBQQ0llQzJfMSwgUENJZUMyXzIsCisJICAgIEhBQzAsIEhBQzEsCisJICAgIEZMQ1RMLCAwLAorCSAgICBIU1BJLCBHUElPMCwgR1BJTzEsIFRoZXJtYWwsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMTAsIDAsIDMyLCA0LCAvKiBJTlRQUkkgKi8gICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsCisJCQkJCQkgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCisJeyAweGZlNDEwODAwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTAgKi8geyAwLCAwLCAwLCBXRFQgfSB9LAorCXsgMHhmZTQxMDgwNCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxICovIHsgVE1VMF8wLCBUTVUwXzEsCisJCQkJCQkgVE1VMF8yLCBUTVUwXzMgfSB9LAorCXsgMHhmZTQxMDgwOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyICovIHsgVE1VMV8wLCBUTVUxXzEsCisJCQkJCQkgVE1VMV8yLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MGMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMyAqLyB7IERNQUMwXzAsIERNQUMwXzEsCisJCQkJCQkgRE1BQzBfMiwgRE1BQzBfMyB9IH0sCisJeyAweGZlNDEwODEwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTQgKi8geyBETUFDMF80LCBETUFDMF81LAorCQkJCQkJIERNQUMwXzYsIEhVREkxIH0gfSwKKwl7IDB4ZmU0MTA4MTQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNSAqLyB7IEhVREkwLCBETUFDMV8wLAorCQkJCQkJIERNQUMxXzEsIERNQUMxXzIgfSB9LAorCXsgMHhmZTQxMDgxOCwgMCwgMzIsIDgsIC8qIElOVDJQUkk2ICovIHsgRE1BQzFfMywgSFBCXzAsCisJCQkJCQkgSFBCXzEsIEhQQl8yIH0gfSwKKwl7IDB4ZmU0MTA4MWMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNyAqLyB7IFNDSUYwXzAsIFNDSUYwXzEsCisJCQkJCQkgU0NJRjBfMiwgU0NJRjBfMyB9IH0sCisJeyAweGZlNDEwODIwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTggKi8geyBTQ0lGMSwgVE1VMiwgVE1VMywgMCB9IH0sCisJeyAweGZlNDEwODI0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTkgKi8geyAwLCAwLCBTQ0lGMiwgU0NJRjMgfSB9LAorCXsgMHhmZTQxMDgyOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxMCAqLyB7IFNDSUY0LCBTQ0lGNSwKKwkJCQkJCSAgRXRoXzAsIEV0aF8xIH0gfSwKKwl7IDB4ZmU0MTA4MmMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTEgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTIgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTMgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTQgKi8geyAwLCAwLCAwLCBQQ0llQzBfMCB9IH0sCisJeyAweGZlNDEwODNjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTE1ICovIHsgUENJZUMwXzEsIFBDSWVDMF8yLAorCQkJCQkJICBQQ0llQzFfMCwgUENJZUMxXzEgfSB9LAorCXsgMHhmZTQxMDg0MCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNiAqLyB7IFBDSWVDMV8yLCBVU0IsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg0NCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNyAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg0OCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxOCAqLyB7IDAsIDAsIEkyQzAsIEkyQzEgfSB9LAorCXsgMHhmZTQxMDg0YywgMCwgMzIsIDgsIC8qIElOVDJQUkkxOSAqLyB7IERVLCBTU0kwLCBTU0kxLCBTU0kyIH0gfSwKKwl7IDB4ZmU0MTA4NTAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjAgKi8geyBTU0kzLCBQQ0llQzJfMCwKKwkJCQkJCSAgUENJZUMyXzEsIFBDSWVDMl8yIH0gfSwKKwl7IDB4ZmU0MTA4NTQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjEgKi8geyBIQUMwLCBIQUMxLCBGTENUTCwgMCB9IH0sCisJeyAweGZlNDEwODU4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIyICovIHsgSFNQSSwgR1BJTzAsCisJCQkJCQkgIEdQSU8xLCBUaGVybWFsIH0gfSwKKwl7IDB4ZmU0MTA4NWMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjMgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NjAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjQgKi8geyAwLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3ODYiLCB2ZWN0b3JzLCBOVUxMLAorCQkJIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CisKKy8qIFN1cHBvcnQgZm9yIGV4dGVybmFsIGludGVycnVwdCBwaW5zIGluIElSUSBtb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJxMDEyM1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTAsIDB4MjAwKSwgSU5UQ19WRUNUKElSUTEsIDB4MjQwKSwKKwlJTlRDX1ZFQ1QoSVJRMiwgMHgyODApLCBJTlRDX1ZFQ1QoSVJRMywgMHgyYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcnE0NTY3W10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJRNCwgMHgzMDApLCBJTlRDX1ZFQ1QoSVJRNSwgMHgzNDApLAorCUlOVENfVkVDVChJUlE2LCAweDM4MCksIElOVENfVkVDVChJUlE3LCAweDNjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfc2Vuc2VfcmVnIHNlbnNlX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDFjLCAzMiwgMiwgLyogSUNSMSAqLyAgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKKwkJCQkJICAgIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGFja19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAyNCwgMCwgMzIsIC8qIElOVFJFUSAqLworCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjX2lycTAxMjMsICJzaDc3ODYtaXJxMDEyMyIsCisJCQkgICAgIHZlY3RvcnNfaXJxMDEyMywgTlVMTCwgbWFza19yZWdpc3RlcnMsCisJCQkgICAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpOworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzY19pcnE0NTY3LCAic2g3Nzg2LWlycTQ1NjciLAorCQkJICAgICB2ZWN0b3JzX2lycTQ1NjcsIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKTsKKworLyogRXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMgaW4gSVJMIG1vZGUgKi8KKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcmwwMTIzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJMMF9MTExMLCAweDIwMCksIElOVENfVkVDVChJUkwwX0xMTEgsIDB4MjIwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MTEhMLCAweDI0MCksIElOVENfVkVDVChJUkwwX0xMSEgsIDB4MjYwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MSExMLCAweDI4MCksIElOVENfVkVDVChJUkwwX0xITEgsIDB4MmEwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MSEhMLCAweDJjMCksIElOVENfVkVDVChJUkwwX0xISEgsIDB4MmUwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ITExMLCAweDMwMCksIElOVENfVkVDVChJUkwwX0hMTEgsIDB4MzIwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ITEhMLCAweDM0MCksIElOVENfVkVDVChJUkwwX0hMSEgsIDB4MzYwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ISExMLCAweDM4MCksIElOVENfVkVDVChJUkwwX0hITEgsIDB4M2EwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ISEhMLCAweDNjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lybDQ1NjdbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUkw0X0xMTEwsIDB4OTAwKSwgSU5UQ19WRUNUKElSTDRfTExMSCwgMHg5MjApLAorCUlOVENfVkVDVChJUkw0X0xMSEwsIDB4OTQwKSwgSU5UQ19WRUNUKElSTDRfTExISCwgMHg5NjApLAorCUlOVENfVkVDVChJUkw0X0xITEwsIDB4OTgwKSwgSU5UQ19WRUNUKElSTDRfTEhMSCwgMHg5YTApLAorCUlOVENfVkVDVChJUkw0X0xISEwsIDB4OWMwKSwgSU5UQ19WRUNUKElSTDRfTEhISCwgMHg5ZTApLAorCUlOVENfVkVDVChJUkw0X0hMTEwsIDB4YTAwKSwgSU5UQ19WRUNUKElSTDRfSExMSCwgMHhhMjApLAorCUlOVENfVkVDVChJUkw0X0hMSEwsIDB4YTQwKSwgSU5UQ19WRUNUKElSTDRfSExISCwgMHhhNjApLAorCUlOVENfVkVDVChJUkw0X0hITEwsIDB4YTgwKSwgSU5UQ19WRUNUKElSTDRfSEhMSCwgMHhhYTApLAorCUlOVENfVkVDVChJUkw0X0hISEwsIDB4YWMwKSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfaXJsMDEyMywgInNoNzc4Ni1pcmwwMTIzIiwgdmVjdG9yc19pcmwwMTIzLAorCQkJIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLCBOVUxMLCBOVUxMKTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19pcmw0NTY3LCAic2g3Nzg2LWlybDQ1NjciLCB2ZWN0b3JzX2lybDQ1NjcsCisJCQkgTlVMTCwgbWFza19yZWdpc3RlcnMsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIElOVENfSUNSMAkweGZlNDEwMDAwCisjZGVmaW5lIElOVENfSU5UTVNLMAlDbklOVE1TSzAKKyNkZWZpbmUgSU5UQ19JTlRNU0sxCUNuSU5UTVNLMQorI2RlZmluZSBJTlRDX0lOVE1TSzIJSU5UTVNLMgorI2RlZmluZSBJTlRDX0lOVE1TS0NMUjEJQ25JTlRNU0tDTFIxCisjZGVmaW5lIElOVENfSU5UTVNLQ0xSMglJTlRNU0tDTFIyCisKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCit7CisJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KKwljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKworCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCisJY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisKKwkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLworCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisKKwlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgorCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLworCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTQ1NjcpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSUTMyMTA6CisJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICovCisJCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKKwkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLworCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKKwkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLworCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgorCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KKwkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKKwkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCisJCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmZhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIFNILU1vYmlsZSBiYWNrZW5kcy4KKyMKKworIyBQb3dlciBNYW5hZ2VtZW50ICYgU2xlZXAgbW9kZQorb2JqLSQoQ09ORklHX1BNKQkrPSBwbS5vIHNsZWVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNjdhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9wbS1zaF9tb2JpbGUuYworICoKKyAqIFBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCBjb2RlIGZvciBTdXBlckggTW9iaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIFNsZWVwIG1vZGVzIGF2YWlsYWJsZSBvbiBTdXBlckggTW9iaWxlOgorICoKKyAqIFNsZWVwIG1vZGUgaXMganVzdCBwbGFpbiAic2xlZXAiIGluc3RydWN0aW9uCisgKiBTbGVlcCBTZWxmLVJlZnJlc2ggbW9kZSBpcyBhYm92ZSBwbHVzIFJBTSBwdXQgaW4gU2VsZi1SZWZyZXNoCisgKiBTdGFuZGJ5IFNlbGYtUmVmcmVzaCBtb2RlIGlzIGFib3ZlIHBsdXMgc3RvcHBlZCBjbG9ja3MKKyAqLworI2RlZmluZSBTVVNQX01PREVfU0xFRVAJCShTVVNQX1NIX1NMRUVQKQorI2RlZmluZSBTVVNQX01PREVfU0xFRVBfU0YJKFNVU1BfU0hfU0xFRVAgfCBTVVNQX1NIX1NGKQorI2RlZmluZSBTVVNQX01PREVfU1RBTkRCWV9TRgkoU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRikKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIG5vdCB0aGVyZSB5ZXQ6CisgKgorICogUi1zdGFuZGJ5IG1vZGUgaXMgdW5zdXBwb3J0ZWQsIGJ1dCB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUKKyAqIFUtc3RhbmRieSBtb2RlIGlzIGxvdyBwcmlvcml0eSBzaW5jZSBpdCBuZWVkcyBib290bG9hZGVyIGhhY2tzCisgKgorICogQWxsIG1vZGVzIHNob3VsZCBiZSB0aWVkIGluIHdpdGggY3B1aWRsZS4gQnV0IGJlZm9yZSB0aGF0IGNhbgorICogaGFwcGVuIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBlbmFibGVkIGhhcmR3YXJlIGJsb2NrcyBzbyB3ZQorICogY2FuIGF2b2lkIGVudGVyaW5nIHNsZWVwIG1vZGVzIHRoYXQgc3RvcCBjbG9ja3MgdG8gaGFyZHdhcmUKKyAqIGJsb2NrcyB0aGF0IGFyZSBpbiB1c2UgZXZlbiB0aG91Z2ggdGhlIGNwdSBjb3JlIGlzIGlkbGUuCisgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hfbW9iaWxlX3N0YW5kYnlbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZTsKKworc3RhdGljIHZvaWQgc2hfbW9iaWxlX2NhbGxfc3RhbmRieSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJZXh0ZXJuIHZvaWQgKnZicl9iYXNlOworCXZvaWQgKm9uY2hpcF9tZW0gPSAodm9pZCAqKTB4ZTUyMDAwMDA7IC8qIElMUkFNICovCisJdm9pZCAoKnN0YW5kYnlfb25jaGlwX21lbSkodW5zaWduZWQgbG9uZykgPSBvbmNoaXBfbWVtOworCisJLyogTm90ZTogV2FrZSB1cCBmcm9tIHNsZWVwIG1heSBnZW5lcmF0ZSBleGNlcHRpb25zIQorCSAqIFNldHVwIFZCUiB0byBwb2ludCB0byBvbi1jaGlwIHJhbSBpZiBzZWxmLXJlZnJlc2ggaXMKKwkgKiBnb2luZyB0byBiZSB1c2VkLgorCSAqLworCWlmIChtb2RlICYgU1VTUF9TSF9TRikKKwkJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAob25jaGlwX21lbSkgOiAibWVtb3J5Iik7CisKKwkvKiBDb3B5IHRoZSBhc3NlbWJseSBzbmlwcGV0IHRvIHRoZSBvdGhlcndpc2UgdW51bnNlZCBJTFJBTSAqLworCW1lbWNweShvbmNoaXBfbWVtLCBzaF9tb2JpbGVfc3RhbmRieSwgc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZSk7CisJd21iKCk7CisJY3RybF9iYXJyaWVyKCk7CisKKwkvKiBMZXQgYXNzZW1ibHkgc25pcHBldCBpbiBvbi1jaGlwIG1lbW9yeSBoYW5kbGUgdGhlIHJlc3QgKi8KKwlzdGFuZGJ5X29uY2hpcF9tZW0obW9kZSk7CisKKwkvKiBQdXQgVkJSIGJhY2sgaW4gU3lzdGVtIFJBTSBhZ2FpbiAqLworCWlmIChtb2RlICYgU1VTUF9TSF9TRikKKwkJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAoJnZicl9iYXNlKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGludCBzaF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlzZXRfYmxfYml0KCk7CisJc2hfbW9iaWxlX2NhbGxfc3RhbmRieShTVVNQX01PREVfU1RBTkRCWV9TRik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwljbGVhcl9ibF9iaXQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzaF9wbV9vcHMgPSB7CisJLmVudGVyICAgICAgICAgID0gc2hfcG1fZW50ZXIsCisJLnZhbGlkICAgICAgICAgID0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX3BtX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX3NldF9vcHMoJnNoX3BtX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoc2hfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODg4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NsZWVwLXNoX21vYmlsZS5TCisgKgorICogU2xlZXAgbW9kZSBhbmQgU3RhbmRieSBtb2RlcyBzdXBwb3J0IGZvciBTdXBlckggTW9iaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorCisvKiBtYW5hZ2Ugc2VsZi1yZWZyZXNoIGFuZCBlbnRlciBzdGFuZGJ5IG1vZGUuCisgKiB0aGlzIGNvZGUgd2lsbCBiZSBjb3BpZWQgdG8gb24tY2hpcCBtZW1vcnkgYW5kIGV4ZWN1dGVkIGZyb20gdGhlcmUuCisgKi8KKworCS5iYWxpZ24gCTQwOTYsMCw0MDk2CitFTlRSWShzaF9tb2JpbGVfc3RhbmRieSkKKwltb3YJcjQsIHIwCisKKwl0c3QJI1NVU1BfU0hfU0YsIHIwCisJYnQJc2tpcF9zZXRfc2YKKworCS8qIFNEUkFNOiBkaXNhYmxlIHBvd2VyIGRvd24gYW5kIHB1dCBpbiBzZWxmLXJlZnJlc2ggbW9kZSAqLworCW1vdi5sCTFmLCByNAorCW1vdi5sCTJmLCByMQorCW1vdi5sCUByNCwgcjIKKwlvcglyMSwgcjIKKwltb3YubCAgIDNmLCByMworCWFuZAlyMywgcjIKKwltb3YubAlyMiwgQHI0CisKK3NraXBfc2V0X3NmOgorCXRzdAkjU1VTUF9TSF9TTEVFUCwgcjAKKwlidAl0ZXN0X3N0YW5kYnkKKworCS8qIHNldCBtb2RlIHRvICJzbGVlcCBtb2RlIiAqLworCWJyYQlkb19zbGVlcAorCSBtb3YJIzB4MDAsIHIxCisKK3Rlc3Rfc3RhbmRieToKKwl0c3QJI1NVU1BfU0hfU1RBTkRCWSwgcjAKKwlidAl0ZXN0X3JzdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAic29mdHdhcmUgc3RhbmRieSBtb2RlIiAqLworCWJyYQlkb19zbGVlcAorCSBtb3YJIzB4ODAsIHIxCisKK3Rlc3RfcnN0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1JTVEFOREJZLCByMAorCWJ0CXRlc3RfdXN0YW5kYnkKKworCS8qIHNldCBtb2RlIHRvICJyLXN0YW5kYnkgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDIwLCByMQorCit0ZXN0X3VzdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9VU1RBTkRCWSwgcjAKKwlidAlkb25lX3NsZWVwCisKKwkvKiBzZXQgbW9kZSB0byAidS1zdGFuZGJ5IG1vZGUiICovCisJbW92CSMweDEwLCByMQorCisJLyogZmFsbC10aHJvdWdoICovCisKK2RvX3NsZWVwOgorCS8qIHNldHVwIGFuZCBlbnRlciBzZWxlY3RlZCBzdGFuZGJ5IG1vZGUgKi8KKwltb3YubAk1ZiwgcjQKKwltb3YubAlyMSwgQHI0CisJc2xlZXAKKworZG9uZV9zbGVlcDoKKwkvKiByZXNldCBzdGFuZGJ5IG1vZGUgdG8gc2xlZXAgbW9kZSAqLworCW1vdi5sCTVmLCByNAorCW1vdgkjMHgwMCwgcjEKKwltb3YubAlyMSwgQHI0CisKKwl0c3QJI1NVU1BfU0hfU0YsIHIwCisJYnQJc2tpcF9yZXN0b3JlX3NmCisKKwkvKiBTRFJBTTogc2V0IGF1dG8tcmVmcmVzaCBtb2RlICovCisJbW92LmwJMWYsIHI0CisJbW92LmwJQHI0LCByMgorCW1vdi5sICAgNGYsIHIzCisJYW5kCXIzLCByMgorCW1vdi5sCXIyLCBAcjQKKwltb3YubAk2ZiwgcjQKKwltb3YubAk3ZiwgcjEKKwltb3YubAk4ZiwgcjIKKwltb3YubAlAcjQsIHIzCisJbW92CSMtMSwgcjQKKwlhZGQJcjQsIHIzCisJb3IJcjIsIHIzCisJbW92LmwJcjMsIEByMQorc2tpcF9yZXN0b3JlX3NmOgorCXJ0cworCSBub3AKKworCS5iYWxpZ24gNAorMToJLmxvbmcJMHhmZTQwMDAwOCAvKiBTRENSMCAqLworMjoJLmxvbmcJMHgwMDAwMDQwMAorMzoJLmxvbmcJMHhmZmZmN2ZmZgorNDoJLmxvbmcJMHhmZmZmZmJmZgorNToJLmxvbmcJMHhhNDE1MDAyMCAvKiBTVEJDUiAqLworNjoJLmxvbmcgICAweGZlNDAwMDFjIC8qIFJUQ09SICovCis3OgkubG9uZyAgIDB4ZmU0MDAwMTggLyogUlRDTlQgKi8KKzg6CS5sb25nICAgMHhhNTVhMDAwMAorCisvKiBpbnRlcnJ1cHQgdmVjdG9yIEAgMHg2MDAgKi8KKwkuYmFsaWduIAkweDQwMCwwLDB4NDAwCisJLmxvbmcJMHhkZWFkYmVlZgorCS5iYWxpZ24gCTB4MjAwLDAsMHgyMDAKKwkvKiBzaDc3MjIgd2lsbCBlbmQgdXAgaGVyZSBpbiBzbGVlcCBtb2RlICovCisJcnRlCisJIG5vcAorc2hfbW9iaWxlX3N0YW5kYnlfZW5kOgorCitFTlRSWShzaF9tb2JpbGVfc3RhbmRieV9zaXplKQorCS5sb25nIHNoX21vYmlsZV9zdGFuZGJ5X2VuZCAtIHNoX21vYmlsZV9zdGFuZGJ5CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9ncGlvLmMgYi9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKaW5kZXggZDM3MTY1My4uZDIyZTVhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCisrKyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwpAQCAtMTksMjIgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKnJlZ2lzdGVyZWRfZ3BpbzsKLQotc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb19jb250cm9sbGVyKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKCFyZWdpc3RlcmVkX2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGdwaW8gPCByZWdpc3RlcmVkX2dwaW8tPmZpcnN0X2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGdwaW8gPiByZWdpc3RlcmVkX2dwaW8tPmxhc3RfZ3BpbykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcmVnaXN0ZXJlZF9ncGlvOwotfQotCiBzdGF0aWMgaW50IGVudW1faW5fcmFuZ2UocGlubXV4X2VudW1fdCBlbnVtX2lkLCBzdHJ1Y3QgcGlubXV4X3JhbmdlICpyKQogewogCWlmIChlbnVtX2lkIDwgci0+YmVnaW4pCkBAIC00Niw5ICszMCw2NCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHJlYWRfd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKLQkJCSAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBkb193cml0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW9fcmVhZF9yYXdfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCkKK3sKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJcmV0dXJuIGN0cmxfaW5iKHJlZyk7CisJY2FzZSAxNjoKKwkJcmV0dXJuIGN0cmxfaW53KHJlZyk7CisJY2FzZSAzMjoKKwkJcmV0dXJuIGN0cmxfaW5sKHJlZyk7CisJfQorCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfcmF3X3JlZyh1bnNpZ25lZCBsb25nIHJlZywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YihkYXRhLCByZWcpOworCQlyZXR1cm47CisJY2FzZSAxNjoKKwkJY3RybF9vdXR3KGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwljYXNlIDMyOgorCQljdHJsX291dGwoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCX0KKworCUJVRygpOworfQorCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX2JpdChzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaW5fcG9zLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcG9zOworCisJcG9zID0gZHItPnJlZ193aWR0aCAtIChpbl9wb3MgKyAxKTsKKworI2lmZGVmIERFQlVHCisJcHJfaW5mbygid3JpdGVfYml0IGFkZHIgPSAlbHgsIHZhbHVlID0gJWxkLCBwb3MgPSAlbGQsICIKKwkJInJfd2lkdGggPSAlbGRcbiIsCisJCWRyLT5yZWcsICEhdmFsdWUsIHBvcywgZHItPnJlZ193aWR0aCk7CisjZW5kaWYKKworCWlmICh2YWx1ZSkKKwkJc2V0X2JpdChwb3MsICZkci0+cmVnX3NoYWRvdyk7CisJZWxzZQorCQljbGVhcl9iaXQocG9zLCAmZHItPnJlZ19zaGFkb3cpOworCisJZ3Bpb193cml0ZV9yYXdfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsIGRyLT5yZWdfc2hhZG93KTsKK30KKworc3RhdGljIGludCBncGlvX3JlYWRfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSB1bnNpZ25lZCBsb25nIGZpZWxkX3dpZHRoLCB1bnNpZ25lZCBsb25nIGluX3BvcykKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGEsIG1hc2ssIHBvczsKIApAQCAtNTcsNTIgKzk2LDUzIEBACiAJcG9zID0gcmVnX3dpZHRoIC0gKChpbl9wb3MgKyAxKSAqIGZpZWxkX3dpZHRoKTsKIAogI2lmZGVmIERFQlVHCi0JcHJfaW5mbygiJXMsIGFkZHIgPSAlbHgsIHZhbHVlID0gJWxkLCBwb3MgPSAlbGQsICIKKwlwcl9pbmZvKCJyZWFkX3JlZzogYWRkciA9ICVseCwgcG9zID0gJWxkLCAiCiAJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAotCQlkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHJlZywgdmFsdWUsIHBvcywKLQkJcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisJCXJlZywgcG9zLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoKTsKICNlbmRpZgogCi0Jc3dpdGNoIChyZWdfd2lkdGgpIHsKLQljYXNlIDg6Ci0JCWRhdGEgPSBjdHJsX2luYihyZWcpOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlkYXRhID0gY3RybF9pbncocmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJZGF0YSA9IGN0cmxfaW5sKHJlZyk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICghZG9fd3JpdGUpCi0JCXJldHVybiAoZGF0YSA+PiBwb3MpICYgbWFzazsKLQotCWRhdGEgJj0gfihtYXNrIDw8IHBvcyk7Ci0JZGF0YSB8PSB2YWx1ZSA8PCBwb3M7Ci0KLQlzd2l0Y2ggKHJlZ193aWR0aCkgewotCWNhc2UgODoKLQkJY3RybF9vdXRiKGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWN0cmxfb3V0dyhkYXRhLCByZWcpOwotCQlicmVhazsKLQljYXNlIDMyOgotCQljdHJsX291dGwoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOworCWRhdGEgPSBncGlvX3JlYWRfcmF3X3JlZyhyZWcsIHJlZ193aWR0aCk7CisJcmV0dXJuIChkYXRhID4+IHBvcykgJiBtYXNrOwogfQogCi1zdGF0aWMgaW50IGdldF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAotCQkJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqKmRycCwgaW50ICpiaXRwKQorc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9yZWcodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgcmVnX3dpZHRoLAorCQkJICAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCisJCQkgICB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotCXBpbm11eF9lbnVtX3QgZW51bV9pZCA9IGdwaW9jLT5ncGlvc1tncGlvXS5lbnVtX2lkOworCXVuc2lnbmVkIGxvbmcgbWFzaywgcG9zOworCisJbWFzayA9ICgxIDw8IGZpZWxkX3dpZHRoKSAtIDE7CisJcG9zID0gcmVnX3dpZHRoIC0gKChpbl9wb3MgKyAxKSAqIGZpZWxkX3dpZHRoKTsKKworI2lmZGVmIERFQlVHCisJcHJfaW5mbygid3JpdGVfcmVnIGFkZHIgPSAlbHgsIHZhbHVlID0gJWxkLCBwb3MgPSAlbGQsICIKKwkJInJfd2lkdGggPSAlbGQsIGZfd2lkdGggPSAlbGRcbiIsCisJCXJlZywgdmFsdWUsIHBvcywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisjZW5kaWYKKworCW1hc2sgPSB+KG1hc2sgPDwgcG9zKTsKKwl2YWx1ZSA9IHZhbHVlIDw8IHBvczsKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQljdHJsX291dGIoKGN0cmxfaW5iKHJlZykgJiBtYXNrKSB8IHZhbHVlLCByZWcpOworCQlicmVhazsKKwljYXNlIDE2OgorCQljdHJsX291dHcoKGN0cmxfaW53KHJlZykgJiBtYXNrKSB8IHZhbHVlLCByZWcpOworCQlicmVhazsKKwljYXNlIDMyOgorCQljdHJsX291dGwoKGN0cmxfaW5sKHJlZykgJiBtYXNrKSB8IHZhbHVlLCByZWcpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2dwaW8gKmdwaW9wID0gJmdwaW9jLT5ncGlvc1tncGlvXTsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZzsKIAlpbnQgaywgbjsKIAotCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCWlmICghZW51bV9pbl9yYW5nZShncGlvcC0+ZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKIAkJcmV0dXJuIC0xOwogCiAJayA9IDA7CkBAIC0xMTMsMTkgKzE1Myw1OCBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChuID0gMDsgbiA8IGRhdGFfcmVnLT5yZWdfd2lkdGg7IG4rKykgewotCQkJaWYgKGRhdGFfcmVnLT5lbnVtX2lkc1tuXSA9PSBlbnVtX2lkKSB7Ci0JCQkJKmRycCA9IGRhdGFfcmVnOwotCQkJCSpiaXRwID0gbjsKKwkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZ3Bpb3AtPmVudW1faWQpIHsKKwkJCQlncGlvcC0+ZmxhZ3MgJj0gflBJTk1VWF9GTEFHX0RSRUc7CisJCQkJZ3Bpb3AtPmZsYWdzIHw9IChrIDw8IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQpOworCQkJCWdwaW9wLT5mbGFncyAmPSB+UElOTVVYX0ZMQUdfREJJVDsKKwkJCQlncGlvcC0+ZmxhZ3MgfD0gKG4gPDwgUElOTVVYX0ZMQUdfREJJVF9TSElGVCk7CiAJCQkJcmV0dXJuIDA7Ci0KIAkJCX0KIAkJfQogCQlrKys7CiAJfQogCisJQlVHKCk7CisKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX2RhdGFfcmVncyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jKQoreworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRycDsKKwlpbnQgazsKKworCWZvciAoayA9IGdwaW9jLT5maXJzdF9ncGlvOyBrIDw9IGdwaW9jLT5sYXN0X2dwaW87IGsrKykKKwkJc2V0dXBfZGF0YV9yZWcoZ3Bpb2MsIGspOworCisJayA9IDA7CisJd2hpbGUgKDEpIHsKKwkJZHJwID0gZ3Bpb2MtPmRhdGFfcmVncyArIGs7CisKKwkJaWYgKCFkcnAtPnJlZ193aWR0aCkKKwkJCWJyZWFrOworCisJCWRycC0+cmVnX3NoYWRvdyA9IGdwaW9fcmVhZF9yYXdfcmVnKGRycC0+cmVnLCBkcnAtPnJlZ193aWR0aCk7CisJCWsrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCisJCQlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICoqZHJwLCBpbnQgKmJpdHApCit7CisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvcCA9ICZncGlvYy0+Z3Bpb3NbZ3Bpb107CisJaW50IGssIG47CisKKwlpZiAoIWVudW1faW5fcmFuZ2UoZ3Bpb3AtPmVudW1faWQsICZncGlvYy0+ZGF0YSkpCisJCXJldHVybiAtMTsKKworCWsgPSAoZ3Bpb3AtPmZsYWdzICYgUElOTVVYX0ZMQUdfRFJFRykgPj4gUElOTVVYX0ZMQUdfRFJFR19TSElGVDsKKwluID0gKGdwaW9wLT5mbGFncyAmIFBJTk1VWF9GTEFHX0RCSVQpID4+IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQ7CisJKmRycCA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCSpiaXRwID0gbjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnZXRfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCBwaW5tdXhfZW51bV90IGVudW1faWQsCiAJCQkgIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqKmNycCwgaW50ICppbmRleHAsCiAJCQkgIHVuc2lnbmVkIGxvbmcgKipjbnRwKQpAQCAtMTg3LDkgKzI2Niw5IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKLQkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKLQkJCSAgICBpbnQgaW5kZXgpCitzdGF0aWMgdm9pZCB3cml0ZV9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCisJCQkgICAgIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY3JwLAorCQkJICAgICBpbnQgaW5kZXgpCiB7CiAJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKIApAQCAtMTk3LDggKzI3Niw3IEBACiAJcG9zID0gaW5kZXggLyBuY29tYjsKIAl2YWx1ZSA9IGluZGV4ICUgbmNvbWI7CiAKLQlyZXR1cm4gcmVhZF93cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAotCQkJICAgICAgY3JwLT5maWVsZF93aWR0aCwgcG9zLCB2YWx1ZSwgMSk7CisJZ3Bpb193cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLCBjcnAtPmZpZWxkX3dpZHRoLCBwb3MsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBjaGVja19jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCkBAIC0yMTEsOCArMjg5LDggQEAKIAlwb3MgPSBpbmRleCAvIG5jb21iOwogCXZhbHVlID0gaW5kZXggJSBuY29tYjsKIAotCWlmIChyZWFkX3dyaXRlX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCi0JCQkgICBjcnAtPmZpZWxkX3dpZHRoLCBwb3MsIDAsIDApID09IHZhbHVlKQorCWlmIChncGlvX3JlYWRfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgY3JwLT5maWVsZF93aWR0aCwgcG9zKSA9PSB2YWx1ZSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLTE7CkBAIC0yMjAsOCArMjk4LDggQEAKIAogZW51bSB7IEdQSU9fQ0ZHX0RSWVJVTiwgR1BJT19DRkdfUkVRLCBHUElPX0NGR19GUkVFIH07CiAKLWludCBwaW5tdXhfY29uZmlnX2dwaW8oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKLQkJICAgICAgIGludCBwaW5tdXhfdHlwZSwgaW50IGNmZ19tb2RlKQorc3RhdGljIGludCBwaW5tdXhfY29uZmlnX2dwaW8oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCSAgICAgIGludCBwaW5tdXhfdHlwZSwgaW50IGNmZ19tb2RlKQogewogCXN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY3IgPSBOVUxMOwogCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKQEAgLTI4Nyw4ICszNjUsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBHUElPX0NGR19SRVE6Ci0JCQlpZiAod3JpdGVfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KSAhPSAwKQotCQkJCWdvdG8gb3V0X2VycjsKKwkJCXdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCk7CiAJCQkqY250cCA9ICpjbnRwICsgMTsKIAkJCWJyZWFrOwogCkBAIC0zMDUsOSArMzgyLDE0IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19sb2NrKTsKIAotaW50IF9fZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpjaGlwX3RvX3Bpbm11eChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGlubXV4X2luZm8sIGNoaXApOworfQorCitzdGF0aWMgaW50IHNoX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmR1bW15OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIHJldCwgcGlubXV4X3R5cGU7CkBAIC0zMTksMjkgKzQwMSwzMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCi0JaWYgKChncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQorCWlmICgoZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQogCQlnb3RvIGVycl91bmxvY2s7CiAKIAkvKiBzZXR1cCBwaW4gZnVuY3Rpb24gaGVyZSBpZiBubyBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBwaW4gKi8KIAotCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkdW1teSwgJmkpICE9IDApCisJaWYgKGdldF9kYXRhX3JlZyhncGlvYywgb2Zmc2V0LCAmZHVtbXksICZpKSAhPSAwKQogCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0ZVTkNUSU9OOwogCWVsc2UKIAkJcGlubXV4X3R5cGUgPSBQSU5NVVhfVFlQRV9HUElPOwogCiAJaWYgKHBpbm11eF90eXBlID09IFBJTk1VWF9UWVBFX0ZVTkNUSU9OKSB7Ci0JCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIG9mZnNldCwKIAkJCQkgICAgICAgcGlubXV4X3R5cGUsCiAJCQkJICAgICAgIEdQSU9fQ0ZHX0RSWVJVTikgIT0gMCkKIAkJCWdvdG8gZXJyX3VubG9jazsKIAotCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsCiAJCQkJICAgICAgIHBpbm11eF90eXBlLAogCQkJCSAgICAgICBHUElPX0NGR19SRVEpICE9IDApCiAJCQlCVUcoKTsKIAl9CiAKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBwaW5tdXhfdHlwZTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmPSB+UElOTVVYX0ZMQUdfVFlQRTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyB8PSBwaW5tdXhfdHlwZTsKIAogCXJldCA9IDA7CiAgZXJyX3VubG9jazoKQEAgLTM0OSwxMSArNDMyLDEwIEBACiAgZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChfX2dwaW9fcmVxdWVzdCk7CiAKLXZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgdm9pZCBzaF9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBpbm11eF90eXBlOwogCkBAIC0zNjIsMjAgKzQ0NCwyMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCi0JcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOwotCXBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywgcGlubXV4X3R5cGUsIEdQSU9fQ0ZHX0ZSRUUpOwotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IFBJTk1VWF9UWVBFX05PTkU7CisJcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEU7CisJcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmPSB+UElOTVVYX0ZMQUdfVFlQRTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyB8PSBQSU5NVVhfVFlQRV9OT05FOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CiAKIHN0YXRpYyBpbnQgcGlubXV4X2RpcmVjdGlvbihzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAogCQkJICAgIHVuc2lnbmVkIGdwaW8sIGludCBuZXdfcGlubXV4X3R5cGUpCiB7Ci0JaW50IHJldCwgcGlubXV4X3R5cGU7CisJaW50IHBpbm11eF90eXBlOworCWludCByZXQgPSAtRUlOVkFMOwogCi0JcmV0ID0gLUVJTlZBTDsKKwlpZiAoIWdwaW9jKQorCQlnb3RvIGVycl9vdXQ7CisKIAlwaW5tdXhfdHlwZSA9IGdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEU7CiAKIAlzd2l0Y2ggKHBpbm11eF90eXBlKSB7CkBAIC00MDEsMTAyICs0ODYsOTkgQEAKIAkJCSAgICAgICBHUElPX0NGR19SRVEpICE9IDApCiAJCUJVRygpOwogCi0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gbmV3X3Bpbm11eF90eXBlOworCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyAmPSB+UElOTVVYX0ZMQUdfVFlQRTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgfD0gbmV3X3Bpbm11eF90eXBlOwogCiAJcmV0ID0gMDsKICBlcnJfb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBzaF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gY2hpcF90b19waW5tdXgoY2hpcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmICghZ3Bpb2MpCi0JCWdvdG8gZXJyX291dDsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX0lOUFVUKTsKKwlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBvZmZzZXQsIFBJTk1VWF9UWVBFX0lOUFVUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLSBlcnJfb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwogCi1zdGF0aWMgaW50IF9fZ3Bpb19nZXRfc2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCi0JCQkJdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlLAotCQkJCWludCBkb193cml0ZSkKK3N0YXRpYyB2b2lkIHNoX2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCisJCQkgICAgIHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkciA9IE5VTEw7CiAJaW50IGJpdCA9IDA7CiAKLQlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApCisJaWYgKCFncGlvYyB8fCBnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkciwgJmJpdCkgIT0gMCkKIAkJQlVHKCk7CiAJZWxzZQotCQl2YWx1ZSA9IHJlYWRfd3JpdGVfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsCi0JCQkJICAgICAgIDEsIGJpdCwgISF2YWx1ZSwgZG9fd3JpdGUpOwotCi0JcmV0dXJuIHZhbHVlOworCQlncGlvX3dyaXRlX2JpdChkciwgYml0LCB2YWx1ZSk7CiB9CiAKLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBzaF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgICBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gY2hpcF90b19waW5tdXgoY2hpcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgcmV0OwogCi0JaWYgKCFncGlvYykKLQkJZ290byBlcnJfb3V0OwotCisJc2hfZ3Bpb19zZXRfdmFsdWUoZ3Bpb2MsIG9mZnNldCwgdmFsdWUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOwotCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX09VVFBVVCk7CisJcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgb2Zmc2V0LCBQSU5NVVhfVFlQRV9PVVRQVVQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotIGVycl9vdXQ6CisKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOwogCi1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgc2hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbykKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZhbHVlID0gMDsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkciA9IE5VTEw7CisJaW50IGJpdCA9IDA7CiAKLQlpZiAoIWdwaW9jKQorCWlmICghZ3Bpb2MgfHwgZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApIHsKIAkJQlVHKCk7Ci0JZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQkJdmFsdWUgPSBfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgMCwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gdmFsdWU7CisJcmV0dXJuIGdwaW9fcmVhZF9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwgMSwgYml0KTsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwogCi12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2hfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghZ3Bpb2MpCi0JCUJVRygpOwotCWVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCV9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCB2YWx1ZSwgMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCX0KKwlyZXR1cm4gc2hfZ3Bpb19nZXRfdmFsdWUoY2hpcF90b19waW5tdXgoY2hpcCksIG9mZnNldCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fc2V0X3ZhbHVlKTsKKworc3RhdGljIHZvaWQgc2hfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc2hfZ3Bpb19zZXRfdmFsdWUoY2hpcF90b19waW5tdXgoY2hpcCksIG9mZnNldCwgdmFsdWUpOworfQogCiBpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKQogewotCXJlZ2lzdGVyZWRfZ3BpbyA9IHBpcDsKLQlwcl9pbmZvKCJwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCisJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9ICZwaXAtPmNoaXA7CisKKwlwcl9pbmZvKCJzaCBwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCiAJCXBpcC0+bmFtZSwgcGlwLT5maXJzdF9ncGlvLCBwaXAtPmxhc3RfZ3Bpbyk7CiAKLQlyZXR1cm4gMDsKKwlzZXR1cF9kYXRhX3JlZ3MocGlwKTsKKworCWNoaXAtPnJlcXVlc3QgPSBzaF9ncGlvX3JlcXVlc3Q7CisJY2hpcC0+ZnJlZSA9IHNoX2dwaW9fZnJlZTsKKwljaGlwLT5kaXJlY3Rpb25faW5wdXQgPSBzaF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwljaGlwLT5nZXQgPSBzaF9ncGlvX2dldDsKKwljaGlwLT5kaXJlY3Rpb25fb3V0cHV0ID0gc2hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWNoaXAtPnNldCA9IHNoX2dwaW9fc2V0OworCisJV0FSTl9PTihwaXAtPmZpcnN0X2dwaW8gIT0gMCk7IC8qIG5lZWRzIHRlc3RpbmcgKi8KKworCWNoaXAtPmxhYmVsID0gcGlwLT5uYW1lOworCWNoaXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2hpcC0+YmFzZSA9IHBpcC0+Zmlyc3RfZ3BpbzsKKwljaGlwLT5uZ3BpbyA9IChwaXAtPmxhc3RfZ3BpbyAtIHBpcC0+Zmlyc3RfZ3BpbykgKyAxOworCisJcmV0dXJuIGdwaW9jaGlwX2FkZChjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggNjRiNzY5MC4uM2YxMzcyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkJCWdvdG8gdW5sb2NrOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJfQogI2VuZGlmCiAKLQlpcnEgPSBpcnFfZGVtdXgoZXZ0MmlycShpcnEpKTsKKwlpcnEgPSBpcnFfZGVtdXgoaW50Y19ldnQyaXJxKGlycSkpOwogCiAjaWZkZWYgQ09ORklHX0lSUVNUQUNLUwogCWN1cmN0eCA9ICh1bmlvbiBpcnFfY3R4ICopY3VycmVudF90aHJlYWRfaW5mbygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDk0ZGY1NmIuLjdlYTI3MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTE0LDIxICsxNCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotdHlwZWRlZiBOT1JFVF9UWVBFIHZvaWQgKCpyZWxvY2F0ZV9uZXdfa2VybmVsX3QpKAotCQkJCXVuc2lnbmVkIGxvbmcgaW5kaXJlY3Rpb25fcGFnZSwKLQkJCQl1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlciwKLQkJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsCi0JCQkJdW5zaWduZWQgbG9uZyB2YnJfcmVnKSBBVFRSSUJfTk9SRVQ7Cit0eXBlZGVmIHZvaWQgKCpyZWxvY2F0ZV9uZXdfa2VybmVsX3QpKHVuc2lnbmVkIGxvbmcgaW5kaXJlY3Rpb25fcGFnZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpOwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZWxvY2F0ZV9uZXdfa2VybmVsW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZTsKIGV4dGVybiB2b2lkICpnZGJfdmJyX3ZlY3RvcjsKK2V4dGVybiB2b2lkICp2YnJfYmFzZTsKIAogdm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCiB7CkBAIC00NSw2ICs0NiwxMiBAQAogICovCiBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogeworCS8qIG9sZGVyIHZlcnNpb25zIG9mIGtleGVjLXRvb2xzIGFyZSBwYXNzaW5nCisJICogdGhlIHpJbWFnZSBlbnRyeSBwb2ludCBhcyBhIHZpcnR1YWwgYWRkcmVzcy4KKwkgKi8KKwlpZiAoaW1hZ2UtPnN0YXJ0ICE9IFBIWVNBRERSKGltYWdlLT5zdGFydCkpCisJCXJldHVybiAtRUlOVkFMOyAvKiB1cGdyYWRlIHlvdXIga2V4ZWMtdG9vbHMgKi8KKwogCXJldHVybiAwOwogfQogCkBAIC03MywxNyArODAsMzMgQEAKICAqLwogdm9pZCBtYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewotCiAJdW5zaWduZWQgbG9uZyBwYWdlX2xpc3Q7CiAJdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXI7Ci0JdW5zaWduZWQgbG9uZyB2YnJfcmVnOwogCXJlbG9jYXRlX25ld19rZXJuZWxfdCBybms7CisJdW5zaWduZWQgbG9uZyBlbnRyeTsKKwl1bnNpZ25lZCBsb25nICpwdHI7CisJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQ7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQotCXZicl9yZWcgPSAoKHVuc2lnbmVkIGxvbmcgKWdkYl92YnJfdmVjdG9yKSAtIDB4MTAwOwotI2Vsc2UKLQl2YnJfcmVnID0gMHg4MDAwMDAwMDsgIC8vIGR1bW15CisJLyoKKwkgKiBOaWNrZWQgZnJvbSB0aGUgbWlwcyB2ZXJzaW9uIG9mIG1hY2hpbmVfa2V4ZWMoKToKKwkgKiBUaGUgZ2VuZXJpYyBrZXhlYyBjb2RlIGJ1aWxkcyBhIHBhZ2UgbGlzdCB3aXRoIHBoeXNpY2FsCisJICogYWRkcmVzc2VzLiBVc2UgcGh5c190b192aXJ0KCkgdG8gY29udmVydCB0aGVtIHRvIHZpcnR1YWwuCisJICovCisJZm9yIChwdHIgPSAmaW1hZ2UtPmhlYWQ7IChlbnRyeSA9ICpwdHIpICYmICEoZW50cnkgJiBJTkRfRE9ORSk7CisJICAgICBwdHIgPSAoZW50cnkgJiBJTkRfSU5ESVJFQ1RJT04pID8KKwkgICAgICAgcGh5c190b192aXJ0KGVudHJ5ICYgUEFHRV9NQVNLKSA6IHB0ciArIDEpIHsKKwkJaWYgKCpwdHIgJiBJTkRfU09VUkNFIHx8ICpwdHIgJiBJTkRfSU5ESVJFQ1RJT04gfHwKKwkJICAgICpwdHIgJiBJTkRfREVTVElOQVRJT04pCisJCQkqcHRyID0gKHVuc2lnbmVkIGxvbmcpIHBoeXNfdG9fdmlydCgqcHRyKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkKKwkJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKICNlbmRpZgorCisJc2F2ZV9mdHJhY2VfZW5hYmxlZCA9IF9fZnRyYWNlX2VuYWJsZWRfc2F2ZSgpOworCiAJLyogSW50ZXJydXB0cyBhcmVuJ3QgYWNjZXB0YWJsZSB3aGlsZSB3ZSByZWJvb3QgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCkBAIC05NywxMiArMTIwLDM3IEBACiAJbWVtY3B5KCh2b2lkICopcmVib290X2NvZGVfYnVmZmVyLCByZWxvY2F0ZV9uZXdfa2VybmVsLAogCQkJCQkJcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplKTsKIAotICAgICAgICBrZXhlY19pbmZvKGltYWdlKTsKKwlrZXhlY19pbmZvKGltYWdlKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCisJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOgorCQkgICAgIDogInIiICgoKHVuc2lnbmVkIGxvbmcpIGdkYl92YnJfdmVjdG9yKSAtIDB4MTAwKQorCQkgICAgIDogIm1lbW9yeSIpOworI2VuZGlmCisKIAkvKiBub3cgY2FsbCBpdCAqLwogCXJuayA9IChyZWxvY2F0ZV9uZXdfa2VybmVsX3QpIHJlYm9vdF9jb2RlX2J1ZmZlcjsKLQkoKnJuaykocGFnZV9saXN0LCByZWJvb3RfY29kZV9idWZmZXIsIFAyU0VHQUREUihpbWFnZS0+c3RhcnQpLCB2YnJfcmVnKTsKKwkoKnJuaykocGFnZV9saXN0LCByZWJvb3RfY29kZV9idWZmZXIsCisJICAgICAgICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChpbWFnZS0+c3RhcnQpKTsKKworI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCisJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAoJnZicl9iYXNlKSA6ICJtZW1vcnkiKTsKKworCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkKKwkJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKKworCS8qIENvbnZlcnQgcGFnZSBsaXN0IGJhY2sgdG8gcGh5c2ljYWwgYWRkcmVzc2VzLCB3aGF0IGEgbWVzcy4gKi8KKwlmb3IgKHB0ciA9ICZpbWFnZS0+aGVhZDsgKGVudHJ5ID0gKnB0cikgJiYgIShlbnRyeSAmIElORF9ET05FKTsKKwkgICAgIHB0ciA9ICgqcHRyICYgSU5EX0lORElSRUNUSU9OKSA/CisJICAgICAgIHBoeXNfdG9fdmlydCgqcHRyICYgUEFHRV9NQVNLKSA6IHB0ciArIDEpIHsKKwkJaWYgKCpwdHIgJiBJTkRfU09VUkNFIHx8ICpwdHIgJiBJTkRfSU5ESVJFQ1RJT04gfHwKKwkJICAgICpwdHIgJiBJTkRfREVTVElOQVRJT04pCisJCQkqcHRyID0gdmlydF90b19waHlzKCpwdHIpOworCX0KKyNlbmRpZgorCisJX19mdHJhY2VfZW5hYmxlZF9yZXN0b3JlKHNhdmVfZnRyYWNlX2VuYWJsZWQpOwogfQogCiB2b2lkIGFyY2hfY3Jhc2hfc2F2ZV92bWNvcmVpbmZvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyBiL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCmluZGV4IGM2NmNiMzIuLmZjYzk5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCisrKyBiL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCkBAIC00LDYgKzQsOCBAQAogICoKICAqIExBTkRJU0svc2g0IGlzIHN1cHBvcnRlZC4gTWF5YmUsIFNIIGFyY2h0ZWN0dXJlIHdvcmtzIHdlbGwuCiAgKgorICogMjAwOS0wMy0xOCBNYWdudXMgRGFtbSAtIEFkZGVkIEtleGVjIEp1bXAgc3VwcG9ydAorICoKICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAogICogVmVyc2lvbiAyLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KICAqLwpAQCAtMTYsMjMgKzE4LDE0MSBAQAogCS8qIHI0ID0gaW5kaXJlY3Rpb25fcGFnZSAgICovCiAJLyogcjUgPSByZWJvb3RfY29kZV9idWZmZXIgKi8KIAkvKiByNiA9IHN0YXJ0X2FkZHJlc3MgICAgICAqLwotCS8qIHI3ID0gdmJyX3JlZyAgICAgICAgICAgICovCiAKLQltb3YubAkxMGYscjgJICAvKiBQQUdFX1NJWkUgKi8KLQltb3YubAkxMWYscjkgICAgLyogUDJTRUcgKi8KKwltb3YubAkxMGYsIHIwCQkvKiBQQUdFX1NJWkUgKi8KKwlhZGQJcjUsIHIwCQkvKiBzZXR1cCBuZXcgc3RhY2sgYXQgZW5kIG9mIGNvbnRyb2wgcGFnZSAqLwogCi0JLyogIHN0YWNrIHNldHRpbmcgKi8KLQlhZGQJcjgscjUKLQltb3YJcjUscjE1CisJLyogc2F2ZSByMTUtPnI4IHRvIG5ldyBzdGFjayAqLworCW1vdi5sCXIxNSwgQC1yMAorCW1vdglyMCwgcjE1CisJbW92LmwJcjE0LCBALXIxNQorCW1vdi5sCXIxMywgQC1yMTUKKwltb3YubAlyMTIsIEAtcjE1CisJbW92LmwJcjExLCBALXIxNQorCW1vdi5sCXIxMCwgQC1yMTUKKwltb3YubAlyOSwgQC1yMTUKKwltb3YubAlyOCwgQC1yMTUKIAorCS8qIHNhdmUgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyAqLworCXN0cy5sCW1hY2wsIEAtcjE1CisJc3RzLmwJbWFjaCwgQC1yMTUKKwlzdGMubAlnYnIsIEAtcjE1CisJc3RjLmwJc3NyLCBALXIxNQorCXN0Yy5sCXNyLCBALXIxNQorCXN0cy5sCXByLCBALXIxNQorCXN0Yy5sCXNwYywgQC1yMTUKKworCS8qIHN3aXRjaCB0byBiYW5rMSBhbmQgc2F2ZSByNy0+cjAgKi8KKwltb3YubAkxMmYsIHI5CisJc3RjCXNyLCByOAorCW9yCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwltb3YubAlyMCwgQC1yMTUKKworCS8qIHN3aXRjaCB0byBiYW5rMCBhbmQgc2F2ZSByNy0+cjAgKi8KKwltb3YubAkxMmYsIHI5CisJbm90CXI5LCByOQorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCXI3LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXIzLCBALXIxNQorCW1vdi5sCXIyLCBALXIxNQorCW1vdi5sCXIxLCBALXIxNQorCW1vdi5sCXIwLCBALXIxNQorCisJbW92LmwJcjQsIEAtcjE1CS8qIHNhdmUgaW5kaXJlY3Rpb24gcGFnZSBhZ2FpbiAqLworCisJYnNyCXN3YXBfcGFnZXMJLyogc3dhcCBwYWdlcyBiZWZvcmUganVtcGluZyB0byBuZXcga2VybmVsICovCisJIG5vcAorCisJbW92YQkxMWYsIHIwCisJbW92LmwJcjE1LCBAcjAJLyogc2F2ZSBwb2ludGVyIHRvIHN0YWNrICovCisKKwlqc3IJQHI2CQkvKiBoYW5kIG92ZXIgY29udHJvbCB0byBuZXcga2VybmVsICovCisJIG5vcAorCisJbW92LmwJMTFmLCByMTUJLyogZ2V0IHBvaW50ZXIgdG8gc3RhY2sgKi8KKwltb3YubAlAcjE1KywgcjQJLyogcmVzdG9yZSByNCB0byBnZXQgaW5kaXJlY3Rpb24gcGFnZSAqLworCisJYnNyCXN3YXBfcGFnZXMJLyogc3dhcCBwYWdlcyBiYWNrIHRvIHByZXZpb3VzIHN0YXRlICovCisJIG5vcAorCisJLyogbWFrZSBzdXJlIGJhbmswIGlzIGFjdGl2ZSBhbmQgcmVzdG9yZSByMC0+cjcgKi8KKwltb3YubAkxMmYsIHI5CisJbm90CXI5LCByOQorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCUByMTUrLCByMAorCW1vdi5sCUByMTUrLCByMQorCW1vdi5sCUByMTUrLCByMgorCW1vdi5sCUByMTUrLCByMworCW1vdi5sCUByMTUrLCByNAorCW1vdi5sCUByMTUrLCByNQorCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNworCisJLyogc3dpdGNoIHRvIGJhbmsxIGFuZCByZXN0b3JlIHIwLT5yNyAqLworCW1vdi5sCTEyZiwgcjkKKwlzdGMJc3IsIHI4CisJb3IJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCUByMTUrLCByMAorCW1vdi5sCUByMTUrLCByMQorCW1vdi5sCUByMTUrLCByMgorCW1vdi5sCUByMTUrLCByMworCW1vdi5sCUByMTUrLCByNAorCW1vdi5sCUByMTUrLCByNQorCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNworCisJLyogc3dpdGNoIGJhY2sgdG8gYmFuazAgKi8KKwltb3YubAkxMmYsIHI5CisJbm90CXI5LCByOQorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJbGRjCXI4LCBzcgorCisJLyogcmVzdG9yZSBvdGhlciByYW5kb20gcmVnaXN0ZXJzICovCisJbGRjLmwJQHIxNSssIHNwYworCWxkcy5sCUByMTUrLCBwcgorCWxkYy5sCUByMTUrLCBzcgorCWxkYy5sCUByMTUrLCBzc3IKKwlsZGMubAlAcjE1KywgZ2JyCisJbGRzLmwJQHIxNSssIG1hY2gKKwlsZHMubAlAcjE1KywgbWFjbAorCisJLyogcmVzdG9yZSByOC0+cjE1ICovCisJbW92LmwJQHIxNSssIHI4CisJbW92LmwJQHIxNSssIHI5CisJbW92LmwJQHIxNSssIHIxMAorCW1vdi5sCUByMTUrLCByMTEKKwltb3YubAlAcjE1KywgcjEyCisJbW92LmwJQHIxNSssIHIxMworCW1vdi5sCUByMTUrLCByMTQKKwltb3YubAlAcjE1KywgcjE1CisJcnRzCisJIG5vcAorCitzd2FwX3BhZ2VzOgogCWJyYQkxZgotCW1vdglyNCxyMAkgIC8qIGNtZCA9IGluZGlyZWN0aW9uX3BhZ2UgKi8KKwkgbW92CXI0LHIwCSAgLyogY21kID0gaW5kaXJlY3Rpb25fcGFnZSAqLwogMDoKIAltb3YubAlAcjQrLHIwCSAgLyogY21kID0gKmluZCsrICovCiAKLTE6CS8qIGFkZHIgPSAoY21kIHwgUDJTRUcpICYgMHhmZmZmZmZmMCAqLworMToJLyogYWRkciA9IGNtZCAmIDB4ZmZmZmZmZjAgKi8KIAltb3YJcjAscjIKLQlvcglyOSxyMgogCW1vdgkjLTE2LHIxCiAJYW5kCXIxLHIyCiAKQEAgLTQwLDU3ICsxNjAsNzAgQEAKIAl0c3QJIzEscjAKIAlidAkyZgogCWJyYQkwYgotCW1vdglyMixyNQorCSBtb3YJcjIscjUKIAogMjoJLyogZWxzZSBpZihjbWQgJiBJTkRfSU5ESVJFQ1RJT04pIGluZCA9IGFkZHIgICovCiAJdHN0CSMyLHIwCiAJYnQJM2YKIAlicmEJMGIKLQltb3YJcjIscjQKKwkgbW92CXIyLHI0CiAKLTM6CS8qIGVsc2UgaWYoY21kICYgSU5EX0RPTkUpIGdvdG8gNiAgKi8KKzM6CS8qIGVsc2UgaWYoY21kICYgSU5EX0RPTkUpIHJldHVybiAqLwogCXRzdAkjNCxyMAogCWJ0CTRmCi0JYnJhCTZmCi0Jbm9wCisJcnRzCisJIG5vcAogCiA0OgkvKiBlbHNlIGlmKGNtZCAmIElORF9TT1VSQ0UpIG1lbWNweShkc3QsYWRkcixQQUdFX1NJWkUpICovCiAJdHN0CSM4LHIwCiAJYnQJMGIKIAotCW1vdglyOCxyMworCW1vdi5sCTEwZixyMwkgIC8qIFBBR0VfU0laRSAqLwogCXNobHIyCXIzCiAJc2hscjIJcjMKIDU6CiAJZHQJcjMKLQltb3YubAlAcjIrLHIxICAgLyogIDE2biswICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMQkgIC8qICAxNm4rNCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzggKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxICAgLyogIDE2bisxMiAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQorCisJLyogcmVndWxhciBrZXhlYyBqdXN0IG92ZXJ3cml0ZXMgdGhlIGRlc3RpbmF0aW9uIHBhZ2UKKwkgKiB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgc291cmNlIHBhZ2UuCisJICogZm9yIHRoZSBrZXhlYyBqdW1wIGNhc2Ugd2UgbmVlZCB0byBzd2FwIHRoZSBjb250ZW50cworCSAqIG9mIHRoZSBwYWdlcy4KKwkgKiB0byBrZWVwIGl0IHNpbXBsZSBzd2FwIHRoZSBjb250ZW50cyBmb3IgYm90aCBjYXNlcy4KKwkgKi8KKwltb3YubAlAKDAsIHIyKSwgcjgKKwltb3YubAlAKDAsIHI1KSwgcjEKKwltb3YubAlyOCwgQCgwLCByNSkKKwltb3YubAlyMSwgQCgwLCByMikKKworCW1vdi5sCUAoNCwgcjIpLCByOAorCW1vdi5sCUAoNCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDQsIHI1KQorCW1vdi5sCXIxLCBAKDQsIHIyKQorCisJbW92LmwJQCg4LCByMiksIHI4CisJbW92LmwJQCg4LCByNSksIHIxCisJbW92LmwJcjgsIEAoOCwgcjUpCisJbW92LmwJcjEsIEAoOCwgcjIpCisKKwltb3YubAlAKDEyLCByMiksIHI4CisJbW92LmwJQCgxMiwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDEyLCByNSkKKwltb3YubAlyMSwgQCgxMiwgcjIpCisKKwlhZGQJIzE2LHI1CisJYWRkCSMxNixyMgogCWJmCTViCiAKIAlicmEJMGIKLQlub3AKLTY6Ci0jaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKLQlsZGMgICByNywgdmJyCi0jZW5kaWYKLQlqbXAgQHI2Ci0Jbm9wCisJIG5vcAogCiAJLmFsaWduIDIKIDEwOgogCS5sb25nCVBBR0VfU0laRQogMTE6Ci0JLmxvbmcJUDJTRUcKKwkubG9uZwkwCisxMjoKKwkubG9uZwkweDIwMDAwMDAwICEgUkI9MQogCiByZWxvY2F0ZV9uZXdfa2VybmVsX2VuZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggMzcwZDJjZi4uMjRjNjAyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC00MzIsNiArNDMyLDcgQEAKIAlbQ1BVX1NINzc2M10JPSAiU0g3NzYzIiwJW0NQVV9TSDc3NzBdCT0gIlNINzc3MCIsCiAJW0NQVV9TSDc3ODBdCT0gIlNINzc4MCIsCVtDUFVfU0g3NzgxXQk9ICJTSDc3ODEiLAogCVtDUFVfU0g3MzQzXQk9ICJTSDczNDMiLAlbQ1BVX1NINzc4NV0JPSAiU0g3Nzg1IiwKKwlbQ1BVX1NINzc4Nl0JPSAiU0g3Nzg2IiwKIAlbQ1BVX1NINzcyMl0JPSAiU0g3NzIyIiwJW0NQVV9TSFgzXQk9ICJTSC1YMyIsCiAJW0NQVV9TSDVfMTAxXQk9ICJTSDUtMTAxIiwJW0NQVV9TSDVfMTAzXQk9ICJTSDUtMTAzIiwKIAlbQ1BVX01YR10JPSAiTVgtRyIsCVtDUFVfU0g3NzIzXQk9ICJTSDc3MjMiLApAQCAtNDQ4LDcgKzQ0OSw3IEBACiAvKiBTeW1ib2xpYyBDUFUgZmxhZ3MsIGtlZXAgaW4gc3luYyB3aXRoIGFzbS9jcHUtZmVhdHVyZXMuaCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9mbGFnc1tdID0gewogCSJub25lIiwgImZwdSIsICJwMmZsdXNoIiwgIm1tdWFzc29jIiwgImRzcCIsICJwZXJmY3RyIiwKLQkicHRlYSIsICJsbHNjIiwgImwyIiwgIm9wMzIiLCBOVUxMCisJInB0ZWEiLCAibGxzYyIsICJsMiIsICJvcDMyIiwgInB0ZWFleCIsIE5VTEwKIH07CiAKIHN0YXRpYyB2b2lkIHNob3dfY3B1ZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2hfY3B1aW5mbyAqYykKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jIGIvYXJjaC9zaC9rZXJuZWwvc3dzdXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNjRhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBzd3N1c3AuYyAtIFN1cGVySCBoaWJlcm5hdGlvbiBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKworc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3Mgc3dzdXNwX2FyY2hfcmVnc19jcHUwOworCitpbnQgcGZuX2lzX25vc2F2ZSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIGJlZ2luX3BmbiA9IF9fcGEoJl9fbm9zYXZlX2JlZ2luKSA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IFBBR0VfQUxJR04oX19wYSgmX19ub3NhdmVfZW5kKSkgPj4gUEFHRV9TSElGVDsKKworCXJldHVybiAocGZuID49IGJlZ2luX3BmbikgJiYgKHBmbiA8IGVuZF9wZm4pOworfQorCit2b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisJaW5pdF9mcHUoY3VycmVudCk7Cit9CisKK3ZvaWQgcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKK3sKKwlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKaW5kZXggODQ1N2Y4My4uYzM0ZTFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYwpAQCAtNDEsMTQgKzQxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIE51bGwgaGlnaCBwcmVjaXNpb24gdGltZXIgZnVuY3Rpb25zIGZvciBzeXN0ZW1zIGxhY2tpbmcgb25lLgotICovCi1zdGF0aWMgY3ljbGVfdCBudWxsX2hwdF9yZWFkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgKCpydGNfc2hfZ2V0X3RpbWUpKHN0cnVjdCB0aW1lc3BlYyAqKSA9IG51bGxfcnRjX2dldF90aW1lOwogaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpID0gbnVsbF9ydGNfc2V0X3RpbWU7CiAKQEAgLTExMiw3ICsxMDQsNiBAQAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwogI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19USU1FICovCiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMKIC8qIGxhc3QgdGltZSB0aGUgUlRDIGNsb2NrIGdvdCB1cGRhdGVkICovCiBzdGF0aWMgbG9uZyBsYXN0X3J0Y191cGRhdGU7CiAKQEAgLTE1Niw3ICsxNDcsNiBAQAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogI2VuZGlmCiB9Ci0jZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCiAKICNpZmRlZiBDT05GSUdfUE0KIGludCB0aW1lcl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTE4OSw3ICsxNzksMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNmcyh2b2lkKQogewotCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnRpbWVyX3N5c2NsYXNzKTsKKwlpbnQgcmV0OworCisJaWYgKCFzeXNfdGltZXIpCisJCXJldHVybiAwOworCisJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMDAsNDIgKzE5NSwyMSBAQAogCiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIAotLyoKLSAqIFNoYW1lbGVzc2x5IGJhc2VkIG9uIHRoZSBNSVBTIGFuZCBTcGFyYzY0IHdvcmsuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50IF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIHNoX2hwdF9mcmVxdWVuY3kgPSAwOwotCi0jZGVmaW5lIE5TRUNfUEVSX0NZQ19TSElGVAkxMAotCi1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoID0geworc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoID0gewogCS5uYW1lCQk9ICJTdXBlckgiLAotCS5yYXRpbmcJCT0gMjAwLAotCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5yZWFkCQk9IG51bGxfaHB0X3JlYWQsCi0JLnNoaWZ0CQk9IDE2LAotCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NoX2Nsb2Nrc291cmNlKHZvaWQpCi17Ci0JaWYgKCFzaF9ocHRfZnJlcXVlbmN5IHx8IGNsb2Nrc291cmNlX3NoLnJlYWQgPT0gbnVsbF9ocHRfcmVhZCkKLQkJcmV0dXJuOwotCi0JY2xvY2tzb3VyY2Vfc2gubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoc2hfaHB0X2ZyZXF1ZW5jeSwKLQkJCQkJCSAgY2xvY2tzb3VyY2Vfc2guc2hpZnQpOwotCi0JdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQgPQotCQljbG9ja3NvdXJjZV9oejJtdWx0KHNoX2hwdF9mcmVxdWVuY3ksIE5TRUNfUEVSX0NZQ19TSElGVCk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2Vfc2gpOwotfQotCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQogdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRpY2tzID0gY2xvY2tzb3VyY2Vfc2gucmVhZCgpOwotCXJldHVybiAodGlja3MgKiB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCkgPj4gTlNFQ19QRVJfQ1lDX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXM7CisKKwkvKiBqaWZmaWVzIGJhc2VkIHNjaGVkX2Nsb2NrIGlmIG5vIGNsb2Nrc291cmNlIGlzIGluc3RhbGxlZCAqLworCWlmICghY2xvY2tzb3VyY2Vfc2gucmF0aW5nKQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKKworCWN5Y2xlcyA9IGNsb2Nrc291cmNlX3NoLnJlYWQoKTsKKwlyZXR1cm4gY3ljMm5zKCZjbG9ja3NvdXJjZV9zaCwgY3ljbGVzKTsKIH0KICNlbmRpZgogCkBAIC0yNTksMTcgKzIzMyw4IEBACiAJICogaW5pdGlhbGl6ZWQgZm9yIHVzLgogCSAqLwogCXN5c190aW1lciA9IGdldF9zeXNfdGltZXIoKTsKKwlpZiAodW5saWtlbHkoIXN5c190aW1lcikpCisJCXBhbmljKCJTeXN0ZW0gdGltZXIgbWlzc2luZy5cbiIpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgJXMgZm9yIHN5c3RlbSB0aW1lclxuIiwgc3lzX3RpbWVyLT5uYW1lKTsKLQotCi0JaWYgKHN5c190aW1lci0+b3BzLT5yZWFkKQotCQljbG9ja3NvdXJjZV9zaC5yZWFkID0gc3lzX3RpbWVyLT5vcHMtPnJlYWQ7Ci0KLQlpbml0X3NoX2Nsb2Nrc291cmNlKCk7Ci0KLQlpZiAoc2hfaHB0X2ZyZXF1ZW5jeSkKLQkJcHJpbnRrKCJVc2luZyAlbHUuJTAzbHUgTUh6IGhpZ2ggcHJlY2lzaW9uIHRpbWVyLlxuIiwKLQkJICAgICAgICgoc2hfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAvIDEwMDAsCi0JCSAgICAgICAoKHNoX2hwdF9mcmVxdWVuY3kgKyA1MDApIC8gMTAwMCkgJSAxMDAwKTsKLQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKaW5kZXggYzNkMjM3ZS4uOWE3N2FlOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCkBAIC0zNSw3ICszNSw4IEBACiAjZGVmaW5lIE1UVTJfVFNSXzEJMHhmZmZlNDM4NQogI2RlZmluZSBNVFUyX1RDTlRfMQkweGZmZmU0Mzg2CS8qIDE2LWJpdCBjb3VudGVyICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQogI2RlZmluZSBNVFUyX1RHUkFfMQkweGZmZmU0Mzg4CiAjZWxzZQogI2RlZmluZSBNVFUyX1RHUkFfMQkweGZmZmU0MzhhCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggMGRiM2Y5NS4uMTBiNWE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMTQ2LDcgKzE0NiwxNCBAQAogCV90bXVfY2xlYXJfc3RhdHVzKFRNVTApOwogCV90bXVfc2V0X2lycShUTVUwLHRtdTBfY2xvY2tldmVudC5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwogCi0JZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJc3dpdGNoICh0bXUwX2Nsb2NrZXZlbnQubW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjM3LDYgKzI0NCw3IEBACiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogCWN0cmxfb3V0YihUTVVfVE9DUl9JTklULCBUTVVfVE9DUik7CiAjZW5kaWYKQEAgLTI1NCw3ICsyNjIsMTQgQEAKIAogCV90bXVfc3RhcnQoVE1VMSk7CiAKLQlzaF9ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUxX2Nsayk7CisJY2xvY2tzb3VyY2Vfc2gucmF0aW5nID0gMjAwOworCWNsb2Nrc291cmNlX3NoLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKTsKKwljbG9ja3NvdXJjZV9zaC5yZWFkID0gdG11X3RpbWVyX3JlYWQ7CisJY2xvY2tzb3VyY2Vfc2guc2hpZnQgPSAxMDsKKwljbG9ja3NvdXJjZV9zaC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjbGtfZ2V0X3JhdGUoJnRtdTFfY2xrKSwKKwkJCQkJCSAgY2xvY2tzb3VyY2Vfc2guc2hpZnQpOworCWNsb2Nrc291cmNlX3NoLmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVM7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NoKTsKIAogCXRtdTBfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGZyZXF1ZW5jeSwgTlNFQ19QRVJfU0VDLAogCQkJCSAgICAgIHRtdTBfY2xvY2tldmVudC5zaGlmdCk7CkBAIC0yNjQsNiArMjc5LDcgQEAKIAkJCWNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJnRtdTBfY2xvY2tldmVudCk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJdG11MF9jbG9ja2V2ZW50LnJhdGluZyA9IDEwMDsKIAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmdG11MF9jbG9ja2V2ZW50KTsKIApAQCAtMjc0LDcgKzI5MCw2IEBACiAJLmluaXQJCT0gdG11X3RpbWVyX2luaXQsCiAJLnN0YXJ0CQk9IHRtdV90aW1lcl9zdGFydCwKIAkuc3RvcAkJPSB0bXVfdGltZXJfc3RvcCwKLQkucmVhZAkJPSB0bXVfdGltZXJfcmVhZCwKIH07CiAKIHN0cnVjdCBzeXNfdGltZXIgdG11X3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eF8zMi5sZHMuUyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKaW5kZXggN2I0YjgyYi4uZDBiMmE3MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eF8zMi5sZHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCkBAIC0xNSw3ICsxNSwxMCBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CX0ZJWEVECisJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIChDT05GSUdfTUVNT1JZX1NUQVJUICYgMHgxZmZmZmZmZikgKworCSAgICBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzMyQklUKQogCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKICNlbHNlCiAJLiA9IENPTkZJR19QQUdFX09GRlNFVCArIENPTkZJR19NRU1PUllfU1RBUlQgKyBDT05GSUdfWkVST19QQUdFX09GRlNFVDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA1NTVlYzk3Li4xMGMyNDM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC01Nyw3ICs1Nyw3IEBACiAJYm9vbAogCWRlZmF1bHQgeSBpZiBDUFVfU0g1CiAKLWNvbmZpZyBQTUIKK2NvbmZpZyBQTUJfRU5BQkxFCiAJYm9vbCAiU3VwcG9ydCAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB0aHJvdWdoIFBNQiIKIAlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUpCiAJc2VsZWN0IDMyQklUCkBAIC02Nyw2ICs2NywzMyBAQAogCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5CiAJICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCiAKK2Nob2ljZQorCXByb21wdCAiUE1CIGhhbmRsaW5nIHR5cGUiCisJZGVwZW5kcyBvbiBQTUJfRU5BQkxFCisJZGVmYXVsdCBQTUJfRklYRUQKKworY29uZmlnIFBNQgorCWJvb2wgIlBNQiIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgKENQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUpCisJc2VsZWN0IDMyQklUCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSBleHRlbmRlZCB0bworCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5CisJICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCisKK2NvbmZpZyBQTUJfRklYRUQKKwlib29sICJmaXhlZCBQTUIiCisJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIChDUFVfU1VCVFlQRV9TSDc3ODAgfHwgXAorCQkJCQkgICBDUFVfU1VCVFlQRV9TSDc3ODUpCisJc2VsZWN0IDMyQklUCisJaGVscAorCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZml4ZWQgUE1CIG1hcHBpbmdzIGFyZSBpbmhlcml0ZWQKKwkgIGZyb20gdGhlIGJvb3QgbG9hZGVyLCBhbmQgdGhlIGtlcm5lbCBkb2VzIG5vdCBhdHRlbXB0IGR5bmFtaWMKKwkgIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIGNsb3Nlc3QgdG8gbGVnYWN5IDI5LWJpdCBwaHlzaWNhbCBtb2RlLAorCSAgYW5kIGFsbG93cyBzeXN0ZW1zIHRvIHN1cHBvcnQgdXAgdG8gNTEyTWlCIG9mIHN5c3RlbSBtZW1vcnkuCisKK2VuZGNob2ljZQorCiBjb25maWcgWDJUTEIKIAlib29sICJFbmFibGUgZXh0ZW5kZWQgVExCIG1vZGUiCiAJZGVwZW5kcyBvbiAoQ1BVX1NIWDIgfHwgQ1BVX1NIWDMpICYmIE1NVSAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIgYi9hcmNoL3NoL21tL01ha2VmaWxlXzMyCmluZGV4IGNiMmYzZjIuLjk4NmExZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgpAQCAtMjUsOCArMjUsMTAgQEAKIGVuZGlmCiAKIGlmZGVmIENPTkZJR19NTVUKLW9iai0kKENPTkZJR19DUFVfU0gzKQkrPSB0bGItc2gzLm8KLW9iai0kKENPTkZJR19DUFVfU0g0KQkrPSB0bGItc2g0Lm8KK3RsYi0kKENPTkZJR19DUFVfU0gzKQkJOj0gdGxiLXNoMy5vCit0bGItJChDT05GSUdfQ1BVX1NINCkJCTo9IHRsYi1zaDQubwordGxiLSQoQ09ORklHX0NQVV9IQVNfUFRFQUVYKQk6PSB0bGItcHRlYWV4Lm8KK29iai15CQkJCSs9ICQodGxiLXkpCiBpZm5kZWYgQ09ORklHX0NBQ0hFX09GRgogb2JqLSQoQ09ORklHX0NQVV9TSDQpCQkrPSBwZy1zaDQubwogb2JqLSQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQkrPSBwZy1zaDc3MDUubwpAQCAtMzUsNiArMzcsNyBAQAogCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCiBvYmotJChDT05GSUdfUE1CKQkJKz0gcG1iLm8KK29iai0kKENPTkZJR19QTUJfRklYRUQpCQkrPSBwbWItZml4ZWQubwogb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9hc2lkcy1kZWJ1Z2ZzLmMKaW5kZXggOGU5MTJhMS4uY2Q4YzNiZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jCisrKyBiL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jCkBAIC0zNywxMCArMzcsOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHAtPm1tKQotCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogJTAybHhcbiIsIHBpZCwKKwkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6ICUwNGx4XG4iLCBwaWQsCiAJCQkJICAgY3B1X2FzaWQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBwLT5tbSkpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAobm9uZSlcbiIsIHBpZCk7CiAJfQogCiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYwppbmRleCAzMjk0NmZiLi42MGNjNDg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYwpAQCAtNTksMTEgKzU5LDEzIEBACiAJaWYgKGlzX3BjaV9tZW1hZGRyKHBoeXNfYWRkcikgJiYgaXNfcGNpX21lbWFkZHIobGFzdF9hZGRyKSkKIAkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwaHlzX2FkZHI7CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQogCS8qCiAJICogRG9uJ3QgYWxsb3cgYW55Ym9keSB0byByZW1hcCBub3JtYWwgUkFNIHRoYXQgd2UncmUgdXNpbmcuLgogCSAqLwogCWlmIChwaHlzX2FkZHIgPCB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKQogCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgogCiAJLyoKIAkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZApAQCAtODEsNyArODMsNyBAQAogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAlvcmlnX2FkZHIgPSBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKIAotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19QTUIKIAkvKgogCSAqIEZpcnN0IHRyeSB0byByZW1hcCB0aHJvdWdoIHRoZSBQTUIgb25jZSBhIHZhbGlkIFZNQSBoYXMgYmVlbgogCSAqIGVzdGFibGlzaGVkLiBTbWFsbGVyIGFsbG9jYXRpb25zIChvciB0aGUgcmVzdCBvZiB0aGUgc2l6ZQpAQCAtMTE5LDEwICsxMjEsMTAgQEAKIAl1bnNpZ25lZCBsb25nIHNlZyA9IFBYU0VHKHZhZGRyKTsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICpwOwogCi0JaWYgKHNlZyA8IFAzU0VHIHx8IHNlZyA+PSBQM19BRERSX01BWCB8fCBpc19wY2lfbWVtYWRkcih2YWRkcikpCisJaWYgKHNlZyA8IFAzU0VHIHx8IHZhZGRyID49IFAzX0FERFJfTUFYIHx8IGlzX3BjaV9tZW1hZGRyKHZhZGRyKSkKIAkJcmV0dXJuOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCisjaWZkZWYgQ09ORklHX1BNQgogCS8qCiAJICogUHVyZ2UgYW55IFBNQiBlbnRyaWVzIHRoYXQgbWF5IGhhdmUgYmVlbiBlc3RhYmxpc2hlZCBmb3IgdGhpcwogCSAqIG1hcHBpbmcsIHRoZW4gcHJvY2VlZCB3aXRoIGNvbnZlbnRpb25hbCBWTUEgdGVhcmRvd24uCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi1maXhlZC5jIGIvYXJjaC9zaC9tbS9wbWItZml4ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2M4ZWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS9wbWItZml4ZWQuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogYXJjaC9zaC9tbS9maXhlZF9wbWIuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCitzdGF0aWMgaW50IF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGZpeGVkX3BtYl9pbml0KHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOworCisJanVtcF90b191bmNhY2hlZCgpOworCisJZm9yIChpID0gMDsgaSA8IFBNQl9FTlRSWV9NQVg7IGkrKykgeworCQlhZGRyID0gUE1CX0RBVEEgKyAoaSA8PCBQTUJfRV9TSElGVCk7CisJCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKKwkJaWYgKCEoZGF0YSAmIFBNQl9WKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkYXRhICYgUE1CX0MpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gpCisJCQlkYXRhIHw9IFBNQl9XVDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFQkFDSykKKwkJCWRhdGEgJj0gflBNQl9XVDsKKyNlbHNlCisJCQlkYXRhICY9IH4oUE1CX0MgfCBQTUJfV1QpOworI2VuZGlmCisJCX0KKwkJY3RybF9vdXRsKGRhdGEsIGFkZHIpOworCX0KKworCWJhY2tfdG9fY2FjaGVkKCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoZml4ZWRfcG1iX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggODQyNDE2Ny4uYjFhNzE0YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0xNSw2ICsxNSw4IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpAQCAtNDAyLDMgKzQwNCwzOSBAQAogCXJldHVybiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwocG1iX2RlYnVnZnNfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG1iX3N5c2Rldl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdGF0aWMgcG1fbWVzc2FnZV90IHByZXZfc3RhdGU7CisKKwkvKiBSZXN0b3JlIHRoZSBQTUIgYWZ0ZXIgYSByZXN1bWUgZnJvbSBoaWJlcm5hdGlvbiAqLworCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTiAmJgorCSAgICBwcmV2X3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgeworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCQlzcGluX2xvY2tfaXJxKCZwbWJfbGlzdF9sb2NrKTsKKwkJZm9yIChwbWJlID0gcG1iX2xpc3Q7IHBtYmU7IHBtYmUgPSBwbWJlLT5uZXh0KQorCQkJc2V0X3BtYl9lbnRyeShwbWJlKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwbWJfbGlzdF9sb2NrKTsKKwl9CisJcHJldl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtYl9zeXNkZXZfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBtYl9zeXNkZXZfc3VzcGVuZChkZXYsIFBNU0dfT04pOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgcG1iX3N5c2Rldl9kcml2ZXIgPSB7CisJLnN1c3BlbmQgPSBwbWJfc3lzZGV2X3N1c3BlbmQsCisJLnJlc3VtZSA9IHBtYl9zeXNkZXZfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG1iX3N5c2Rldl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsICZwbWJfc3lzZGV2X2RyaXZlcik7Cit9CisKK3N1YnN5c19pbml0Y2FsbChwbWJfc3lzZGV2X2luaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1wdGVhZXguYyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWIzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3RsYi1wdGVhZXguYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKKyAqCisgKiBUTEIgb3BlcmF0aW9ucyBmb3IgU0gtWDMgQ1BVcyBmZWF0dXJpbmcgUFRFIEFTSUQgRXh0ZW5zaW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCit2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcHRldmFsOworCXVuc2lnbmVkIGxvbmcgdnBuOworCisJLyogUHRyYWNlIG1heSBjYWxsIHRoaXMgcm91dGluZS4gKi8KKwlpZiAodm1hICYmIGN1cnJlbnQtPmFjdGl2ZV9tbSAhPSB2bWEtPnZtX21tKQorCQlyZXR1cm47CisKKyNpZm5kZWYgQ09ORklHX0NBQ0hFX09GRgorCXsKKwkJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisKKwkJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKKwkJCWlmICghdGVzdF9iaXQoUEdfbWFwcGVkLCAmcGFnZS0+ZmxhZ3MpKSB7CisJCQkJdW5zaWduZWQgbG9uZyBwaHlzID0gcHRlX3ZhbChwdGUpICYgUFRFX1BIWVNfTUFTSzsKKwkJCQlfX2ZsdXNoX3diYWNrX3JlZ2lvbigodm9pZCAqKVAxU0VHQUREUihwaHlzKSwKKwkJCQkJCSAgICAgUEFHRV9TSVpFKTsKKwkJCQlfX3NldF9iaXQoUEdfbWFwcGVkLCAmcGFnZS0+ZmxhZ3MpOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBTZXQgUFRFSCByZWdpc3RlciAqLworCXZwbiA9IGFkZHJlc3MgJiBNTVVfVlBOX01BU0s7CisJX19yYXdfd3JpdGVsKHZwbiwgTU1VX1BURUgpOworCisJLyogU2V0IFBURUFFWCAqLworCV9fcmF3X3dyaXRlbChnZXRfYXNpZCgpLCBNTVVfUFRFQUVYKTsKKworCXB0ZXZhbCA9IHB0ZS5wdGVfbG93OworCisJLyogU2V0IFBURUEgcmVnaXN0ZXIgKi8KKyNpZmRlZiBDT05GSUdfWDJUTEIKKwkvKgorCSAqIEZvciB0aGUgZXh0ZW5kZWQgbW9kZSBUTEIgdGhpcyBpcyB0cml2aWFsLCBvbmx5IHRoZSBFU1ogYW5kCisJICogRVBSIGJpdHMgbmVlZCB0byBiZSB3cml0dGVuIG91dCB0byBQVEVBLCB3aXRoIHRoZSByZW1haW5kZXIgb2YKKwkgKiB0aGUgcHJvdGVjdGlvbiBiaXRzICh3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGNvbXBhdC1tb2RlIFNaCisJICogYW5kIFBSIGJpdHMsIHdoaWNoIGFyZSBjbGVhcmVkKSBiZWluZyB3cml0dGVuIG91dCBpbiBQVEVMLgorCSAqLworCV9fcmF3X3dyaXRlbChwdGUucHRlX2hpZ2gsIE1NVV9QVEVBKTsKKyNlbmRpZgorCisJLyogU2V0IFBURUwgcmVnaXN0ZXIgKi8KKwlwdGV2YWwgJj0gX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSzsgLyogZHJvcCBzb2Z0d2FyZSBmbGFncyAqLworI2lmZGVmIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gKKwlwdGV2YWwgfD0gX1BBR0VfV1Q7CisjZW5kaWYKKwkvKiBjb252ZW5pZW50bHksIHdlIHdhbnQgYWxsIHRoZSBzb2Z0d2FyZSBmbGFncyB0byBiZSAwIGFueXdheSAqLworCV9fcmF3X3dyaXRlbChwdGV2YWwsIE1NVV9QVEVMKTsKKworCS8qIExvYWQgdGhlIFRMQiAqLworCWFzbSB2b2xhdGlsZSgibGR0bGIiOiAvKiBubyBvdXRwdXQgKi8gOiAvKiBubyBpbnB1dCAqLyA6ICJtZW1vcnkiKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBXaGlsZSBTSC1YMiBleHRlbmRlZCBUTEIgbW9kZSBzcGxpdHMgb3V0IHRoZSBtZW1vcnktbWFwcGVkIEkvVVRMQgorICogZGF0YSBhcnJheXMsIFNILVgzIGNvcmVzIHdpdGggUFRFQUVYIHNwbGl0IG91dCB0aGUgbWVtb3J5LW1hcHBlZAorICogYWRkcmVzcyBhcnJheXMuIEluIGNvbXBhdCBtb2RlIHRoZSBzZWNvbmQgYXJyYXkgaXMgaW5hY2Nlc3NpYmxlLCB3aGlsZQorICogaW4gZXh0ZW5kZWQgbW9kZSwgdGhlIGxlZ2FjeSA4LWJpdCBBU0lEIGZpZWxkIGluIGFkZHJlc3MgYXJyYXkgMSBoYXMKKyAqIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisgKi8KK3ZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbG9jYWxfZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFzaWQsCisJCQkJCQkgdW5zaWduZWQgbG9uZyBwYWdlKQoreworCWp1bXBfdG9fdW5jYWNoZWQoKTsKKwlfX3Jhd193cml0ZWwocGFnZSwgTU1VX1VUTEJfQUREUkVTU19BUlJBWSB8IE1NVV9QQUdFX0FTU09DX0JJVCk7CisJX19yYXdfd3JpdGVsKGFzaWQsIE1NVV9VVExCX0FERFJFU1NfQVJSQVkyIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKKwliYWNrX3RvX2NhY2hlZCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggMWQ5N2Q2NC4uMWI5ZDQzMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jCkBAIC0xMDcsNiArMTA3LDcgQEAKIAljYXNlIENQVV9TSDc3ODA6CiAJY2FzZSBDUFVfU0g3NzgxOgogCWNhc2UgQ1BVX1NINzc4NToKKwljYXNlIENQVV9TSDc3ODY6CiAJY2FzZSBDUFVfU0g3NzIzOgogCWNhc2UgQ1BVX1NIWDM6CiAJCWxtb2RlbCA9ICZvcF9tb2RlbF9zaDRhX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCAyODRiN2U4Li44NDc3YjVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC01MiwzICs1Miw2IEBACiBBUDMyNVJYQQkJU0hfQVAzMjVSWEEKIFNINzc2M1JEUAkJU0hfU0g3NzYzUkRQCiBTSDc3ODVMQ1IJCVNIX1NINzc4NUxDUgorVVJRVUVMTAkJCVNIX1VSUVVFTEwKK0VTUFQJCQlTSF9FU1BUCitQT0xBUklTCQkJU0hfUE9MQVJJUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggYmY1MGQwYy4uOTgyYTEyZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01MCw2ICs1MCw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTB4MDAyMgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMHgwMDIzCisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKIC8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCiAjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkweDUwMDEKICNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMHg1MDAyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaAppbmRleCBlYzgxY2RlLi5lZTM4ZTczIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKQEAgLTU3LDYgKzU3LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKm1wKQogeworCWlmICghbXAtPmZ1bGxtbSkKKwkJZmx1c2hfdGxiX3BlbmRpbmcoKTsKIAlpZiAobXAtPm5lZWRfZmx1c2gpIHsKIAkJZnJlZV9wYWdlc19hbmRfc3dhcF9jYWNoZShtcC0+cGFnZXMsIG1wLT5wYWdlc19ucik7CiAJCW1wLT5wYWdlc19uciA9IDA7CkBAIC03OCw4ICs4MCw2IEBACiAKIAlpZiAobXAtPmZ1bGxtbSkKIAkJbXAtPmZ1bGxtbSA9IDA7Ci0JZWxzZQotCQlmbHVzaF90bGJfcGVuZGluZygpOwogCiAJLyoga2VlcCB0aGUgcGFnZSB0YWJsZSBjYWNoZSB3aXRoaW4gYm91bmRzICovCiAJY2hlY2tfcGd0X2NhY2hlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCmluZGV4IDFjMzc4ZDguLjhiYTA2NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICU5cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggMmRiM2MyMi4uNGVlMmU0OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpAQCAtMzYsMTAgKzM2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgpAQCAtNzI0LDEyICs3MjQsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHRpY2tfbWFzayA9IHRpY2tfb3BzLT5zb2Z0aW50X21hc2s7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShzcGFyYzY0X2V2ZW50cywgY3B1KTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAljbGVhcl9zb2Z0aW50KHRpY2tfbWFzayk7CiAKIAlpcnFfZW50ZXIoKTsKIAotCWtzdGF0X3RoaXNfY3B1LmlycXNbMF0rKzsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoMCk7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KDAsIGRlc2MpOwogCiAJaWYgKHVubGlrZWx5KCFldnQtPmV2ZW50X2hhbmRsZXIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2lycS5jIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKaW5kZXggM2Q3YWFkMC4uMzM2YjYxNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmMyZmJhZC4uM2EzMzBhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMTY1LDYgKzE2NSw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOTAzZGU0YS4uZWJlN2RlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fQUVTX1g4Nl82NCkgKz0gYWVzLXg4Nl82NC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0KSArPSB0d29maXNoLXg4Nl82NC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NBTFNBMjBfWDg2XzY0KSArPSBzYWxzYTIwLXg4Nl82NC5vCitvYmotJChDT05GSUdfQ1JZUFRPX0FFU19OSV9JTlRFTCkgKz0gYWVzbmktaW50ZWwubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSQzMyQ19JTlRFTCkgKz0gY3JjMzJjLWludGVsLm8KIApAQCAtMTksMyArMjAsNSBAQAogYWVzLXg4Nl82NC15IDo9IGFlcy14ODZfNjQtYXNtXzY0Lm8gYWVzX2dsdWUubwogdHdvZmlzaC14ODZfNjQteSA6PSB0d29maXNoLXg4Nl82NC1hc21fNjQubyB0d29maXNoX2dsdWUubwogc2Fsc2EyMC14ODZfNjQteSA6PSBzYWxzYTIwLXg4Nl82NC1hc21fNjQubyBzYWxzYTIwX2dsdWUubworCithZXNuaS1pbnRlbC15IDo9IGFlc25pLWludGVsX2FzbS5vIGFlc25pLWludGVsX2dsdWUubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TIGIvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCmluZGV4IGU0MWIxNDcuLmI5NDllYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKQEAgLTQxLDE0ICs0MSwxNCBAQAogI2RlZmluZSB0bGVuIDEwMjQgICAvLyBsZW5ndGggb2YgZWFjaCBvZiA0ICd4b3InIGFycmF5cyAoMjU2IDMyLWJpdCB3b3JkcykKIAogLyogb2Zmc2V0cyB0byBwYXJhbWV0ZXJzIHdpdGggb25lIHJlZ2lzdGVyIHB1c2hlZCBvbnRvIHN0YWNrICovCi0jZGVmaW5lIHRmbSA4CisjZGVmaW5lIGN0eCA4CiAjZGVmaW5lIG91dF9ibGsgMTIKICNkZWZpbmUgaW5fYmxrIDE2CiAKLS8qIG9mZnNldHMgaW4gY3J5cHRvX3RmbSBzdHJ1Y3R1cmUgKi8KLSNkZWZpbmUga2xlbiAoY3J5cHRvX3RmbV9jdHhfb2Zmc2V0ICsgMCkKLSNkZWZpbmUgZWtleSAoY3J5cHRvX3RmbV9jdHhfb2Zmc2V0ICsgNCkKLSNkZWZpbmUgZGtleSAoY3J5cHRvX3RmbV9jdHhfb2Zmc2V0ICsgMjQ0KQorLyogb2Zmc2V0cyBpbiBjcnlwdG9fYWVzX2N0eCBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUga2xlbiAoNDgwKQorI2RlZmluZSBla2V5ICgwKQorI2RlZmluZSBka2V5ICgyNDApCiAKIC8vIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIGVuY3J5cHQgYW5kIGRlY3J5cHQgc3Vicm91dGluZXMKIApAQCAtMjE3LDcgKzIxNyw3IEBACiAJZG9fY29sICh0YWJsZSwgcjUscjAscjEscjQsIHIyLHIzKTsJCS8qIGlkeD1yNSAqLwogCiAvLyBBRVMgKFJpam5kYWVsKSBFbmNyeXB0aW9uIFN1YnJvdXRpbmUKLS8qIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCisvKiB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KIAogLmdsb2JhbCAgYWVzX2VuY19ibGsKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAKIGFlc19lbmNfYmxrOgogCXB1c2ggICAgJWVicAotCW1vdiAgICAgdGZtKCVlc3ApLCVlYnAKKwltb3YgICAgIGN0eCglZXNwKSwlZWJwCiAKIC8vIENBVVRJT046IHRoZSBvcmRlciBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZXNlIGFzc2lnbnMgCiAvLyByZWx5IG9uIHRoZSByZWdpc3RlciBtYXBwaW5ncwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJcmV0CiAKIC8vIEFFUyAoUmlqbmRhZWwpIERlY3J5cHRpb24gU3Vicm91dGluZQotLyogdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KKy8qIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLwogCiAuZ2xvYmFsICBhZXNfZGVjX2JsawogCkBAIC0zMDMsNyArMzAzLDcgQEAKIAogYWVzX2RlY19ibGs6CiAJcHVzaCAgICAlZWJwCi0JbW92ICAgICB0Zm0oJWVzcCksJWVicAorCW1vdiAgICAgY3R4KCVlc3ApLCVlYnAKIAogLy8gQ0FVVElPTjogdGhlIG9yZGVyIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlc2UgYXNzaWducyAKIC8vIHJlbHkgb24gdGhlIHJlZ2lzdGVyIG1hcHBpbmdzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUyBiL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TCmluZGV4IGExMjBmNTIuLjViNTc3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXMteDg2XzY0LWFzbV82NC5TCkBAIC0xNyw4ICsxNyw2IEBACiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotI2RlZmluZSBCQVNFIGNyeXB0b190Zm1fY3R4X29mZnNldAotCiAjZGVmaW5lIFIxCSVyYXgKICNkZWZpbmUgUjFFCSVlYXgKICNkZWZpbmUgUjFYCSVheApAQCAtNTYsMTMgKzU0LDEzIEBACiAJLmFsaWduCTg7CQkJXAogRlVOQzoJbW92cQlyMSxyMjsJCQlcCiAJbW92cQlyMyxyNDsJCQlcCi0JbGVhcQlCQVNFK0tFWSs0OCs0KHI4KSxyOTsJXAorCWxlYXEJS0VZKzQ4KHI4KSxyOTsJCVwKIAltb3ZxCXIxMCxyMTE7CQlcCiAJbW92bAkocjcpLHI1ICMjIEU7CQlcCiAJbW92bAk0KHI3KSxyMSAjIyBFOwkJXAogCW1vdmwJOChyNykscjYgIyMgRTsJCVwKIAltb3ZsCTEyKHI3KSxyNyAjIyBFOwkJXAotCW1vdmwJQkFTRSswKHI4KSxyMTAgIyMgRTsJXAorCW1vdmwJNDgwKHI4KSxyMTAgIyMgRTsJXAogCXhvcmwJLTQ4KHI5KSxyNSAjIyBFOwlcCiAJeG9ybAktNDQocjkpLHIxICMjIEU7CVwKIAl4b3JsCS00MChyOSkscjYgIyMgRTsJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYwppbmRleCA3MWY0NTc4Li40OWFlOWZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzX2dsdWUuYwpAQCAtNSwxNyArNSwyOSBAQAogCiAjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgogCi1hc21saW5rYWdlIHZvaWQgYWVzX2VuY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKTsKLWFzbWxpbmthZ2Ugdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pOworCit2b2lkIGNyeXB0b19hZXNfZW5jcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJYWVzX2VuY19ibGsoY3R4LCBkc3QsIHNyYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KTsKKwordm9pZCBjcnlwdG9fYWVzX2RlY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCWFlc19kZWNfYmxrKGN0eCwgZHN0LCBzcmMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2Flc19kZWNyeXB0X3g4Nik7CiAKIHN0YXRpYyB2b2lkIGFlc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0JYWVzX2VuY19ibGsodGZtLCBkc3QsIHNyYyk7CisJYWVzX2VuY19ibGsoY3J5cHRvX3RmbV9jdHgodGZtKSwgZHN0LCBzcmMpOwogfQogCiBzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogewotCWFlc19kZWNfYmxrKHRmbSwgZHN0LCBzcmMpOworCWFlc19kZWNfYmxrKGNyeXB0b190Zm1fY3R4KHRmbSksIGRzdCwgc3JjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiYTk5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9hc20uUwpAQCAtMCwwICsxLDg5NiBAQAorLyoKKyAqIEltcGxlbWVudCBBRVMgYWxnb3JpdGhtIGluIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMuCisgKgorICogVGhlIHdoaXRlIHBhcGVyIG9mIEFFUy1OSSBpbnN0cnVjdGlvbnMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKyAqICAgaHR0cDovL3NvZnR3YXJlY29tbXVuaXR5LmludGVsLmNvbS9pc24vZG93bmxvYWRzL2ludGVsYXZ4L0FFUy1JbnN0cnVjdGlvbnMtU2V0X1dQLnBkZgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSW50ZWwgQ29ycC4KKyAqICAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKiAgICAgICAgICAgIFZpbm9kaCBHb3BhbCA8dmlub2RoLmdvcGFsQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgS2FocmFtYW4gQWtkZW1pcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLnRleHQKKworI2RlZmluZSBTVEFURTEJJXhtbTAKKyNkZWZpbmUgU1RBVEUyCSV4bW00CisjZGVmaW5lIFNUQVRFMwkleG1tNQorI2RlZmluZSBTVEFURTQJJXhtbTYKKyNkZWZpbmUgU1RBVEUJU1RBVEUxCisjZGVmaW5lIElOMQkleG1tMQorI2RlZmluZSBJTjIJJXhtbTcKKyNkZWZpbmUgSU4zCSV4bW04CisjZGVmaW5lIElONAkleG1tOQorI2RlZmluZSBJTglJTjEKKyNkZWZpbmUgS0VZCSV4bW0yCisjZGVmaW5lIElWCSV4bW0zCisKKyNkZWZpbmUgS0VZUAklcmRpCisjZGVmaW5lIE9VVFAJJXJzaQorI2RlZmluZSBJTlAJJXJkeAorI2RlZmluZSBMRU4JJXJjeAorI2RlZmluZSBJVlAJJXI4CisjZGVmaW5lIEtMRU4JJXI5ZAorI2RlZmluZSBUMQklcjEwCisjZGVmaW5lIFRLRVlQCVQxCisjZGVmaW5lIFQyCSVyMTEKKworX2tleV9leHBhbnNpb25fMTI4OgorX2tleV9leHBhbnNpb25fMjU2YToKKwlwc2h1ZmQgJDBiMTExMTExMTEsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJcHhvciAleG1tMSwgJXhtbTAKKwltb3ZhcHMgJXhtbTAsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCXJldAorCitfa2V5X2V4cGFuc2lvbl8xOTJhOgorCXBzaHVmZCAkMGIwMTAxMDEwMSwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlweG9yICV4bW0xLCAleG1tMAorCisJbW92YXBzICV4bW0yLCAleG1tNQorCW1vdmFwcyAleG1tMiwgJXhtbTYKKwlwc2xsZHEgJDQsICV4bW01CisJcHNodWZkICQwYjExMTExMTExLCAleG1tMCwgJXhtbTMKKwlweG9yICV4bW0zLCAleG1tMgorCXB4b3IgJXhtbTUsICV4bW0yCisKKwltb3ZhcHMgJXhtbTAsICV4bW0xCisJc2h1ZnBzICQwYjAxMDAwMTAwLCAleG1tMCwgJXhtbTYKKwltb3ZhcHMgJXhtbTYsICglcmN4KQorCXNodWZwcyAkMGIwMTAwMTExMCwgJXhtbTIsICV4bW0xCisJbW92YXBzICV4bW0xLCAxNiglcmN4KQorCWFkZCAkMHgyMCwgJXJjeAorCXJldAorCitfa2V5X2V4cGFuc2lvbl8xOTJiOgorCXBzaHVmZCAkMGIwMTAxMDEwMSwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlweG9yICV4bW0xLCAleG1tMAorCisJbW92YXBzICV4bW0yLCAleG1tNQorCXBzbGxkcSAkNCwgJXhtbTUKKwlwc2h1ZmQgJDBiMTExMTExMTEsICV4bW0wLCAleG1tMworCXB4b3IgJXhtbTMsICV4bW0yCisJcHhvciAleG1tNSwgJXhtbTIKKworCW1vdmFwcyAleG1tMCwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJcmV0CisKK19rZXlfZXhwYW5zaW9uXzI1NmI6CisJcHNodWZkICQwYjEwMTAxMDEwLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0yLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0yCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMiwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMgorCXB4b3IgJXhtbTEsICV4bW0yCisJbW92YXBzICV4bW0yLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwlyZXQKKworLyoKKyAqIGludCBhZXNuaV9zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAorICogICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pCisgKi8KK0VOVFJZKGFlc25pX3NldF9rZXkpCisJbW92dXBzICglcnNpKSwgJXhtbTAJCSMgdXNlciBrZXkgKGZpcnN0IDE2IGJ5dGVzKQorCW1vdmFwcyAleG1tMCwgKCVyZGkpCisJbGVhIDB4MTAoJXJkaSksICVyY3gJCSMga2V5IGFkZHIKKwltb3ZsICVlZHgsIDQ4MCglcmRpKQorCXB4b3IgJXhtbTQsICV4bW00CQkjIHhtbTQgaXMgYXNzdW1lZCAwIGluIF9rZXlfZXhwYW5zaW9uX3gKKwljbXAgJDI0LCAlZGwKKwlqYiAuTGVuY19rZXkxMjgKKwlqZSAuTGVuY19rZXkxOTIKKwltb3Z1cHMgMHgxMCglcnNpKSwgJXhtbTIJIyBvdGhlciB1c2VyIGtleQorCW1vdmFwcyAleG1tMiwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTIsICV4bW0xCSMgcm91bmQgMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTIsICV4bW0xCSMgcm91bmQgMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTIsICV4bW0xCSMgcm91bmQgMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4LCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA3CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHg0MAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCWptcCAuTGRlY19rZXkKKy5MZW5jX2tleTE5MjoKKwltb3ZxIDB4MTAoJXJzaSksICV4bW0yCQkjIG90aGVyIHVzZXIga2V5CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTIsICV4bW0xCSMgcm91bmQgMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMiwgJXhtbTEJIyByb3VuZCAyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0yLCAleG1tMQkjIHJvdW5kIDMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyMCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0MCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4NDAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmEKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4MCwgJXhtbTIsICV4bW0xCSMgcm91bmQgOAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4ODAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwlqbXAgLkxkZWNfa2V5CisuTGVuY19rZXkxMjg6CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTAsICV4bW0xCSMgcm91bmQgMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDEKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0wLCAleG1tMQkjIHJvdW5kIDIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMCwgJXhtbTEJIyByb3VuZCAzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDgKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA1CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDYKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0MCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4NDAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA4CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHg4MAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MWIsICV4bW0wLCAleG1tMQkjIHJvdW5kIDkKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDFiCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgzNiwgJXhtbTAsICV4bW0xCSMgcm91bmQgMTAKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDM2CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKy5MZGVjX2tleToKKwlzdWIgJDB4MTAsICVyY3gKKwltb3ZhcHMgKCVyZGkpLCAleG1tMAorCW1vdmFwcyAoJXJjeCksICV4bW0xCisJbW92YXBzICV4bW0wLCAyNDAoJXJjeCkKKwltb3ZhcHMgJXhtbTEsIDI0MCglcmRpKQorCWFkZCAkMHgxMCwgJXJkaQorCWxlYSAyNDAtMTYoJXJjeCksICVyc2kKKy5hbGlnbiA0CisuTGRlY19rZXlfbG9vcDoKKwltb3ZhcHMgKCVyZGkpLCAleG1tMAorCSMgYWVzaW1jICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGIsIDB4YzgKKwltb3ZhcHMgJXhtbTEsICglcnNpKQorCWFkZCAkMHgxMCwgJXJkaQorCXN1YiAkMHgxMCwgJXJzaQorCWNtcCAlcmN4LCAlcmRpCisJamIgLkxkZWNfa2V5X2xvb3AKKwl4b3IgJXJheCwgJXJheAorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCisgKi8KK0VOVFJZKGFlc25pX2VuYykKKwltb3ZsIDQ4MChLRVlQKSwgS0xFTgkJIyBrZXkgbGVuZ3RoCisJbW92dXBzIChJTlApLCBTVEFURQkJIyBpbnB1dAorCWNhbGwgX2Flc25pX2VuYzEKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQkJIyBvdXRwdXQKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9lbmMxOgkJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlyb3VuZCBjb3VudAorICoJU1RBVEU6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqIG91dHB1dDoKKyAqCVNUQVRFOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9lbmMxOgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUJCSMgcm91bmQgMAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkxlbmMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkxlbmMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorLmFsaWduIDQKKy5MZW5jMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIC0weDMwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKy5hbGlnbiA0CisuTGVuYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGMyCisJcmV0CisKKy8qCisgKiBfYWVzbmlfZW5jNDoJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlyb3VuZCBjb3VudAorICoJU1RBVEUxOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBvdXRwdXQ6CisgKglTVEFURTE6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2VuYzQ6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURTEJCSMgcm91bmQgMAorCXB4b3IgS0VZLCBTVEFURTIKKwlweG9yIEtFWSwgU1RBVEUzCisJcHhvciBLRVksIFNUQVRFNAorCWFkZCAkMHgzMCwgVEtFWVAKKwljbXAgJDI0LCBLTEVOCisJamIgLkw0ZW5jMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MNGVuYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgLTB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKyMuYWxpZ24gNAorLkw0ZW5jMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorIy5hbGlnbiA0CisuTDRlbmMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUxCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4YzIKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGUyCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhlYQorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZjIKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZGVjIChzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKKyAqLworRU5UUlkoYWVzbmlfZGVjKQorCW1vdiA0ODAoS0VZUCksIEtMRU4JCSMga2V5IGxlbmd0aAorCWFkZCAkMjQwLCBLRVlQCisJbW92dXBzIChJTlApLCBTVEFURQkJIyBpbnB1dAorCWNhbGwgX2Flc25pX2RlYzEKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQkJI291dHB1dAorCXJldAorCisvKgorICogX2Flc25pX2RlYzE6CQlpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCWtleSBsZW5ndGgKKyAqCVNUQVRFOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKiBvdXRwdXQ6CisgKglTVEFURToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZGVjMToKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFCQkjIHJvdW5kIDAKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MZGVjMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MZGVjMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKy5hbGlnbiA0CisuTGRlYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisuYWxpZ24gNAorLkxkZWMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUJCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4YzIKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9kZWM0OglpbnRlcm5hbCBBQkkKKyAqIGlucHV0OgorICoJS0VZUDoJCWtleSBzdHJ1Y3QgcG9pbnRlcgorICoJS0xFTjoJCWtleSBsZW5ndGgKKyAqCVNUQVRFMToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogb3V0cHV0OgorICoJU1RBVEUxOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9kZWM0OgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUxCQkjIHJvdW5kIDAKKwlweG9yIEtFWSwgU1RBVEUyCisJcHhvciBLRVksIFNUQVRFMworCXB4b3IgS0VZLCBTVEFURTQKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MNGRlYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTDRkZWMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisuYWxpZ24gNAorLkw0ZGVjMTkyOgorCW1vdmFwcyAtMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorLmFsaWduIDQKKy5MNGRlYzEyODoKKwltb3ZhcHMgLTB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTEJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhjMgorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZTIKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGVhCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhmMgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9lY2JfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4pCisgKi8KK0VOVFJZKGFlc25pX2VjYl9lbmMpCisJdGVzdCBMRU4sIExFTgkJIyBjaGVjayBsZW5ndGgKKwlqeiAuTGVjYl9lbmNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2VuY19yZXQKKwljbXAgJDY0LCBMRU4KKwlqYiAuTGVjYl9lbmNfbG9vcDEKKy5hbGlnbiA0CisuTGVjYl9lbmNfbG9vcDQ6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwltb3Z1cHMgMHgxMChJTlApLCBTVEFURTIKKwltb3Z1cHMgMHgyMChJTlApLCBTVEFURTMKKwltb3Z1cHMgMHgzMChJTlApLCBTVEFURTQKKwljYWxsIF9hZXNuaV9lbmM0CisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJbW92dXBzIFNUQVRFMiwgMHgxMChPVVRQKQorCW1vdnVwcyBTVEFURTMsIDB4MjAoT1VUUCkKKwltb3Z1cHMgU1RBVEU0LCAweDMwKE9VVFApCisJc3ViICQ2NCwgTEVOCisJYWRkICQ2NCwgSU5QCisJYWRkICQ2NCwgT1VUUAorCWNtcCAkNjQsIExFTgorCWpnZSAuTGVjYl9lbmNfbG9vcDQKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9lbmNfcmV0CisuYWxpZ24gNAorLkxlY2JfZW5jX2xvb3AxOgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJY2FsbCBfYWVzbmlfZW5jMQorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxlY2JfZW5jX2xvb3AxCisuTGVjYl9lbmNfcmV0OgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9lY2JfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4pOworICovCitFTlRSWShhZXNuaV9lY2JfZGVjKQorCXRlc3QgTEVOLCBMRU4KKwlqeiAuTGVjYl9kZWNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCWFkZCAkMjQwLCBLRVlQCisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZGVjX3JldAorCWNtcCAkNjQsIExFTgorCWpiIC5MZWNiX2RlY19sb29wMQorLmFsaWduIDQKKy5MZWNiX2RlY19sb29wNDoKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCW1vdnVwcyAweDEwKElOUCksIFNUQVRFMgorCW1vdnVwcyAweDIwKElOUCksIFNUQVRFMworCW1vdnVwcyAweDMwKElOUCksIFNUQVRFNAorCWNhbGwgX2Flc25pX2RlYzQKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCisJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQorCW1vdnVwcyBTVEFURTQsIDB4MzAoT1VUUCkKKwlzdWIgJDY0LCBMRU4KKwlhZGQgJDY0LCBJTlAKKwlhZGQgJDY0LCBPVVRQCisJY21wICQ2NCwgTEVOCisJamdlIC5MZWNiX2RlY19sb29wNAorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2RlY19yZXQKKy5hbGlnbiA0CisuTGVjYl9kZWNfbG9vcDE6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwljYWxsIF9hZXNuaV9kZWMxCisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGVjYl9kZWNfbG9vcDEKKy5MZWNiX2RlY19yZXQ6CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2NiY19lbmMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbiwgdTggKml2KQorICovCitFTlRSWShhZXNuaV9jYmNfZW5jKQorCWNtcCAkMTYsIExFTgorCWpiIC5MY2JjX2VuY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJbW92dXBzIChJVlApLCBTVEFURQkjIGxvYWQgaXYgYXMgaW5pdGlhbCBzdGF0ZQorLmFsaWduIDQKKy5MY2JjX2VuY19sb29wOgorCW1vdnVwcyAoSU5QKSwgSU4JIyBsb2FkIGlucHV0CisJcHhvciBJTiwgU1RBVEUKKwljYWxsIF9hZXNuaV9lbmMxCisJbW92dXBzIFNUQVRFLCAoT1VUUCkJIyBzdG9yZSBvdXRwdXQKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MY2JjX2VuY19sb29wCisJbW92dXBzIFNUQVRFLCAoSVZQKQorLkxjYmNfZW5jX3JldDoKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfY2JjX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuLCB1OCAqaXYpCisgKi8KK0VOVFJZKGFlc25pX2NiY19kZWMpCisJY21wICQxNiwgTEVOCisJamIgLkxjYmNfZGVjX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwlhZGQgJDI0MCwgS0VZUAorCW1vdnVwcyAoSVZQKSwgSVYKKwljbXAgJDY0LCBMRU4KKwlqYiAuTGNiY19kZWNfbG9vcDEKKy5hbGlnbiA0CisuTGNiY19kZWNfbG9vcDQ6CisJbW92dXBzIChJTlApLCBJTjEKKwltb3ZhcHMgSU4xLCBTVEFURTEKKwltb3Z1cHMgMHgxMChJTlApLCBJTjIKKwltb3ZhcHMgSU4yLCBTVEFURTIKKwltb3Z1cHMgMHgyMChJTlApLCBJTjMKKwltb3ZhcHMgSU4zLCBTVEFURTMKKwltb3Z1cHMgMHgzMChJTlApLCBJTjQKKwltb3ZhcHMgSU40LCBTVEFURTQKKwljYWxsIF9hZXNuaV9kZWM0CisJcHhvciBJViwgU1RBVEUxCisJcHhvciBJTjEsIFNUQVRFMgorCXB4b3IgSU4yLCBTVEFURTMKKwlweG9yIElOMywgU1RBVEU0CisJbW92YXBzIElONCwgSVYKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwltb3Z1cHMgU1RBVEUyLCAweDEwKE9VVFApCisJbW92dXBzIFNUQVRFMywgMHgyMChPVVRQKQorCW1vdnVwcyBTVEFURTQsIDB4MzAoT1VUUCkKKwlzdWIgJDY0LCBMRU4KKwlhZGQgJDY0LCBJTlAKKwlhZGQgJDY0LCBPVVRQCisJY21wICQ2NCwgTEVOCisJamdlIC5MY2JjX2RlY19sb29wNAorCWNtcCAkMTYsIExFTgorCWpiIC5MY2JjX2RlY19yZXQKKy5hbGlnbiA0CisuTGNiY19kZWNfbG9vcDE6CisJbW92dXBzIChJTlApLCBJTgorCW1vdmFwcyBJTiwgU1RBVEUKKwljYWxsIF9hZXNuaV9kZWMxCisJcHhvciBJViwgU1RBVEUKKwltb3Z1cHMgU1RBVEUsIChPVVRQKQorCW1vdmFwcyBJTiwgSVYKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MY2JjX2RlY19sb29wMQorCW1vdnVwcyBJViwgKElWUCkKKy5MY2JjX2RlY19yZXQ6CisJcmV0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmFmMGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMuIFRoaXMgZmlsZSBjb250YWlucyBnbHVlCisgKiBjb2RlLCB0aGUgcmVhbCBBRVMgaW1wbGVtZW50YXRpb24gaXMgaW4gaW50ZWwtYWVzX2FzbS5TLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSW50ZWwgQ29ycC4KKyAqICAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRkLmg+CisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKyNpbmNsdWRlIDxhc20vYWVzLmg+CisKK3N0cnVjdCBhc3luY19hZXNfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07Cit9OworCisjZGVmaW5lIEFFU05JX0FMSUdOCTE2CisjZGVmaW5lIEFFU19CTE9DS19NQVNLCSh+KEFFU19CTE9DS19TSVpFLTEpKQorCithc21saW5rYWdlIGludCBhZXNuaV9zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqaW5fa2V5LAorCQkJICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICBjb25zdCB1OCAqaW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9lY2JfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9lY2JfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9jYmNfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9mcHVfdXNpbmcodm9pZCkKK3sKKwlpZiAoaW5faW50ZXJydXB0KCkgJiYgIShyZWFkX2NyMCgpICYgWDg2X0NSMF9UUykpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqYWVzX2N0eCh2b2lkICpyYXdfY3R4KQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXJhd19jdHg7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IEFFU05JX0FMSUdOOworCisJaWYgKGFsaWduIDw9IGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpKQorCQlhbGlnbiA9IDE7CisJcmV0dXJuIChzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKilBTElHTihhZGRyLCBhbGlnbik7Cit9CisKK3N0YXRpYyBpbnQgYWVzX3NldF9rZXlfY29tbW9uKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHZvaWQgKnJhd19jdHgsCisJCQkgICAgICBjb25zdCB1OCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgocmF3X2N0eCk7CisJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKKwlpbnQgZXJyOworCisJaWYgKGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTI4ICYmIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMTkyICYmCisJICAgIGtleV9sZW4gIT0gQUVTX0tFWVNJWkVfMjU2KSB7CisJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwkJZXJyID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKKwllbHNlIHsKKwkJa2VybmVsX2ZwdV9iZWdpbigpOworCQllcnIgPSBhZXNuaV9zZXRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKKwkJa2VybmVsX2ZwdV9lbmQoKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFlc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlyZXR1cm4gYWVzX3NldF9rZXlfY29tbW9uKHRmbSwgY3J5cHRvX3RmbV9jdHgodGZtKSwgaW5fa2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIHZvaWQgYWVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKQorCQljcnlwdG9fYWVzX2VuY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOworCWVsc2UgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWFlc25pX2VuYyhjdHgsIGRzdCwgc3JjKTsKKwkJa2VybmVsX2ZwdV9lbmQoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFlc19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwkJY3J5cHRvX2Flc19kZWNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKKwllbHNlIHsKKwkJa2VybmVsX2ZwdV9iZWdpbigpOworCQlhZXNuaV9kZWMoY3R4LCBkc3QsIHNyYyk7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzbmlfYWxnID0geworCS5jcmFfbmFtZQkJPSAiYWVzIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gImFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSAzMDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGNyeXB0b19hZXNfY3R4KStBRVNOSV9BTElHTi0xLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGFlc25pX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CT0geworCQkuY2lwaGVyCT0geworCQkJLmNpYV9taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkuY2lhX21heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5jaWFfc2V0a2V5CQk9IGFlc19zZXRfa2V5LAorCQkJLmNpYV9lbmNyeXB0CQk9IGFlc19lbmNyeXB0LAorCQkJLmNpYV9kZWNyeXB0CQk9IGFlc19kZWNyeXB0CisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IGVjYl9lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9lY2JfZW5jKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSyk7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGVjYl9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9lY2JfZGVjKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSyk7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYmxrX2VjYl9hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJfX2VjYi1hZXMtYWVzbmkiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiX19kcml2ZXItZWNiLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCkrQUVTTklfQUxJR04tMSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChibGtfZWNiX2FsZy5jcmFfbGlzdCksCisJLmNyYV91ID0geworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFlc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBlY2JfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gZWNiX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgY2JjX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2NiY19lbmMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLLCB3YWxrLml2KTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2JjX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJa2VybmVsX2ZwdV9iZWdpbigpOworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCWFlc25pX2NiY19kZWMoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgIG5ieXRlcyAmIEFFU19CTE9DS19NQVNLLCB3YWxrLml2KTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisJa2VybmVsX2ZwdV9lbmQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBibGtfY2JjX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gIl9fY2JjLWFlcy1hZXNuaSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJfX2RyaXZlci1jYmMtYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGNyeXB0b19hZXNfY3R4KStBRVNOSV9BTElHTi0xLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGJsa19jYmNfYWxnLmNyYV9saXN0KSwKKwkuY3JhX3UgPSB7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGNiY19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBjYmNfZGVjcnlwdCwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBhYmxrX3NldF9rZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCQl1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisKKwlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KCZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UsIGtleSwga2V5X2xlbik7Cit9CisKK3N0YXRpYyBpbnQgYWJsa19lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpIHsKKwkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CisJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKGNyeXB0ZF9yZXEsICZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UpOworCQlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChjcnlwdGRfcmVxKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKKwkJZGVzYy50Zm0gPSBjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChjdHgtPmNyeXB0ZF90Zm0pOworCQlkZXNjLmluZm8gPSByZXEtPmluZm87CisJCWRlc2MuZmxhZ3MgPSAwOworCQlyZXR1cm4gY3J5cHRvX2Jsa2NpcGhlcl9jcnQoZGVzYy50Zm0pLT5lbmNyeXB0KAorCQkJJmRlc2MsIHJlcS0+ZHN0LCByZXEtPnNyYywgcmVxLT5uYnl0ZXMpOworCX0KK30KKworc3RhdGljIGludCBhYmxrX2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkgeworCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KKwkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oY3J5cHRkX3JlcSwgJmN0eC0+Y3J5cHRkX3RmbS0+YmFzZSk7CisJCXJldHVybiBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KGNyeXB0ZF9yZXEpOworCX0gZWxzZSB7CisJCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjOworCQlkZXNjLnRmbSA9IGNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKGN0eC0+Y3J5cHRkX3RmbSk7CisJCWRlc2MuaW5mbyA9IHJlcS0+aW5mbzsKKwkJZGVzYy5mbGFncyA9IDA7CisJCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLnRmbSktPmRlY3J5cHQoCisJCQkmZGVzYywgcmVxLT5kc3QsIHJlcS0+c3JjLCByZXEtPm5ieXRlcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhYmxrX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0ZF9mcmVlX2FibGtjaXBoZXIoY3R4LT5jcnlwdGRfdGZtKTsKK30KKworc3RhdGljIHZvaWQgYWJsa19pbml0X2NvbW1vbihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJICAgICBzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm0pCit7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljdHgtPmNyeXB0ZF90Zm0gPSBjcnlwdGRfdGZtOworCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSArCisJCWNyeXB0b19hYmxrY2lwaGVyX3JlcXNpemUoJmNyeXB0ZF90Zm0tPmJhc2UpOworfQorCitzdGF0aWMgaW50IGFibGtfZWNiX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07CisKKwljcnlwdGRfdGZtID0gY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoIl9fZHJpdmVyLWVjYi1hZXMtYWVzbmkiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNyeXB0ZF90Zm0pKQorCQlyZXR1cm4gUFRSX0VSUihjcnlwdGRfdGZtKTsKKwlhYmxrX2luaXRfY29tbW9uKHRmbSwgY3J5cHRkX3RmbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhYmxrX2VjYl9hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJlY2IoYWVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJlY2ItYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDQwMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSfENSWVBUT19BTEdfQVNZTkMsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgYXN5bmNfYWVzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGFibGtfZWNiX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9IGFibGtfZWNiX2luaXQsCisJLmNyYV9leGl0CQk9IGFibGtfZXhpdCwKKwkuY3JhX3UgPSB7CisJCS5hYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFibGtfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gYWJsa19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBhYmxrX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgYWJsa19jYmNfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqY3J5cHRkX3RmbTsKKworCWNyeXB0ZF90Zm0gPSBjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcigiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsIDAsIDApOworCWlmIChJU19FUlIoY3J5cHRkX3RmbSkpCisJCXJldHVybiBQVFJfRVJSKGNyeXB0ZF90Zm0pOworCWFibGtfaW5pdF9jb21tb24odGZtLCBjcnlwdGRfdGZtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFibGtfY2JjX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gImNiYyhhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gImNiYy1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gNDAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVJ8Q1JZUFRPX0FMR19BU1lOQywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBhc3luY19hZXNfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYWJsa19jYmNfYWxnLmNyYV9saXN0KSwKKwkuY3JhX2luaXQJCT0gYWJsa19jYmNfaW5pdCwKKwkuY3JhX2V4aXQJCT0gYWJsa19leGl0LAorCS5jcmFfdSA9IHsKKwkJLmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5pdnNpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFibGtfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gYWJsa19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBhYmxrX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFlc25pX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJaWYgKCFjcHVfaGFzX2FlcykgeworCQlwcmludGsoS0VSTl9FUlIgIkludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBkZXRlY3RlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpKSkKKwkJZ290byBhZXNfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpKSkKKwkJZ290byBibGtfZWNiX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKSkpCisJCWdvdG8gYmxrX2NiY19lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpKSkKKwkJZ290byBhYmxrX2VjYl9lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhYmxrX2NiY19hbGcpKSkKKwkJZ290byBhYmxrX2NiY19lcnI7CisKKwlyZXR1cm4gZXJyOworCithYmxrX2NiY19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX2VjYl9hbGcpOworYWJsa19lY2JfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2NiY19hbGcpOworYmxrX2NiY19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZyk7CitibGtfZWNiX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZyk7CithZXNfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZXNuaV9leGl0KHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhYmxrX2NiY19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19lY2JfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZyk7Cit9CisKK21vZHVsZV9pbml0KGFlc25pX2luaXQpOworbW9kdWxlX2V4aXQoYWVzbmlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmlqbmRhZWwgKEFFUykgQ2lwaGVyIEFsZ29yaXRobSwgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBvcHRpbWl6ZWQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygiYWVzIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Flcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTQ1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZXMuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIEFTTV9YODZfQUVTX0gKKyNkZWZpbmUgQVNNX1g4Nl9BRVNfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorCit2b2lkIGNyeXB0b19hZXNfZW5jcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsCisJCQkgICAgY29uc3QgdTggKnNyYyk7Cit2b2lkIGNyeXB0b19hZXNfZGVjcnlwdF94ODYoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsCisJCQkgICAgY29uc3QgdTggKnNyYyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA3MzAxZTYwLi4wYmViYTBkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0yMTMsNiArMjEzLDcgQEAKICNkZWZpbmUgY3B1X2hhc194bW0JCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0pCiAjZGVmaW5lIGNwdV9oYXNfeG1tMgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTIpCiAjZGVmaW5lIGNwdV9oYXNfeG1tMwkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTMpCisjZGVmaW5lIGNwdV9oYXNfYWVzCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQUVTKQogI2RlZmluZSBjcHVfaGFzX2h0CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFQpCiAjZGVmaW5lIGNwdV9oYXNfbXAJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NUCkKICNkZWZpbmUgY3B1X2hhc19ueAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05YKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaAppbmRleCA4ODZjOTQwLi5kYzNmNmNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBfX0tWTV9IQVZFX0RFVklDRV9BU1NJR05NRU5UCiAjZGVmaW5lIF9fS1ZNX0hBVkVfTVNJCiAjZGVmaW5lIF9fS1ZNX0hBVkVfVVNFUl9OTUkKKyNkZWZpbmUgX19LVk1fSEFWRV9HVUVTVF9ERUJVRwogCiAvKiBBcmNoaXRlY3R1cmFsIGludGVycnVwdCBsaW5lIGNvdW50LiAqLwogI2RlZmluZSBLVk1fTlJfSU5URVJSVVBUUyAyNTYKQEAgLTIxMiw3ICsyMTMsMzAgQEAKIAlfX3M2NCBjb3VudF9sb2FkX3RpbWU7CiB9OwogCitzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCB7CisJX191MzIgZXhjZXB0aW9uOworCV9fdTMyIHBhZDsKKwlfX3U2NCBwYzsKKwlfX3U2NCBkcjY7CisJX191NjQgZHI3OworfTsKKworI2RlZmluZSBLVk1fR1VFU1REQkdfVVNFX1NXX0JQCQkweDAwMDEwMDAwCisjZGVmaW5lIEtWTV9HVUVTVERCR19VU0VfSFdfQlAJCTB4MDAwMjAwMDAKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0lOSkVDVF9EQgkJMHgwMDA0MDAwMAorI2RlZmluZSBLVk1fR1VFU1REQkdfSU5KRUNUX0JQCQkweDAwMDgwMDAwCisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworCV9fdTY0IGRlYnVncmVnWzhdOworfTsKKwogc3RydWN0IGt2bV9waXRfc3RhdGUgewogCXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgY2hhbm5lbHNbM107CiB9OworCitzdHJ1Y3Qga3ZtX3JlaW5qZWN0X2NvbnRyb2wgeworCV9fdTggcGl0X3JlaW5qZWN0OworCV9fdTggcmVzZXJ2ZWRbMzFdOworfTsKICNlbmRpZiAvKiBfQVNNX1g4Nl9LVk1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNzMwODQzZC4uZjBmYWY1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3B2Y2xvY2stYWJpLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KIAogI2RlZmluZSBLVk1fTUFYX1ZDUFVTIDE2CiAjZGVmaW5lIEtWTV9NRU1PUllfU0xPVFMgMzIKQEAgLTEzNCwxMSArMTM1LDE4IEBACiAKICNkZWZpbmUgS1ZNX05SX01FTV9PQkpTIDQwCiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgYnBbNF07Ci0JaW50IHNpbmdsZXN0ZXA7Ci19OworI2RlZmluZSBLVk1fTlJfREJfUkVHUwk0CisKKyNkZWZpbmUgRFI2X0JECQkoMSA8PCAxMykKKyNkZWZpbmUgRFI2X0JTCQkoMSA8PCAxNCkKKyNkZWZpbmUgRFI2X0ZJWEVEXzEJMHhmZmZmMGZmMAorI2RlZmluZSBEUjZfVk9MQVRJTEUJMHgwMDAwZTAwZgorCisjZGVmaW5lIERSN19CUF9FTl9NQVNLCTB4MDAwMDAwZmYKKyNkZWZpbmUgRFI3X0dFCQkoMSA8PCA5KQorI2RlZmluZSBEUjdfR0QJCSgxIDw8IDEzKQorI2RlZmluZSBEUjdfRklYRURfMQkweDAwMDAwNDAwCisjZGVmaW5lIERSN19WT0xBVElMRQkweGZmZmYyM2ZmCiAKIC8qCiAgKiBXZSBkb24ndCB3YW50IGFsbG9jYXRpb24gZmFpbHVyZXMgd2l0aGluIHRoZSBtbXUgY29kZSwgc28gd2UgcHJlYWxsb2NhdGUKQEAgLTE2Miw3ICsxNzAsOCBAQAogICogICBiaXRzIDA6MyAtIHRvdGFsIGd1ZXN0IHBhZ2luZyBsZXZlbHMgKDItNCwgb3IgemVybyBmb3IgcmVhbCBtb2RlKQogICogICBiaXRzIDQ6NyAtIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIHRoaXMgc2hhZG93ICgxLTQpCiAgKiAgIGJpdHMgODo5IC0gcGFnZSB0YWJsZSBxdWFkcmFudCBmb3IgMi1sZXZlbCBndWVzdHMKLSAqICAgYml0ICAgMTYgLSAibWV0YXBoeXNpY2FsIiAtIGdmbiBpcyBub3QgYSByZWFsIHBhZ2UgKGh1Z2UgcGFnZS9yZWFsIG1vZGUpCisgKiAgIGJpdCAgIDE2IC0gZGlyZWN0IG1hcHBpbmcgb2YgdmlydHVhbCB0byBwaHlzaWNhbCBtYXBwaW5nIGF0IGdmbgorICogICAgICAgICAgICAgIHVzZWQgZm9yIHJlYWwgbW9kZSBhbmQgdHdvLWRpbWVuc2lvbmFsIHBhZ2luZwogICogICBiaXRzIDE3OjE5IC0gY29tbW9uIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgYWxsIHB0ZXMgaW4gdGhpcyBzaGFkb3cgcGFnZQogICovCiB1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSB7CkBAIC0xNzIsOSArMTgxLDEwIEBACiAJCXVuc2lnbmVkIGxldmVsOjQ7CiAJCXVuc2lnbmVkIHF1YWRyYW50OjI7CiAJCXVuc2lnbmVkIHBhZF9mb3JfbmljZV9oZXhfb3V0cHV0OjY7Ci0JCXVuc2lnbmVkIG1ldGFwaHlzaWNhbDoxOworCQl1bnNpZ25lZCBkaXJlY3Q6MTsKIAkJdW5zaWduZWQgYWNjZXNzOjM7CiAJCXVuc2lnbmVkIGludmFsaWQ6MTsKKwkJdW5zaWduZWQgY3I0X3BnZToxOwogCX07CiB9OwogCkBAIC0yMTgsNiArMjI4LDE4IEBACiAJY2hhciBidWZbNTEyXSBfX2FsaWduZWQoc2l6ZW9mKGxvbmcpKTsKIH07CiAKK3N0cnVjdCBrdm1fcGlvX3JlcXVlc3QgeworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJaW50IGN1cl9jb3VudDsKKwlndmFfdCBndWVzdF9ndmE7CisJaW50IGluOworCWludCBwb3J0OworCWludCBzaXplOworCWludCBzdHJpbmc7CisJaW50IGRvd247CisJaW50IHJlcDsKK307CisKIC8qCiAgKiB4ODYgc3VwcG9ydHMgMyBwYWdpbmcgbW9kZXMgKDQtbGV2ZWwgNjQtYml0LCAzLWxldmVsIDY0LWJpdCwgYW5kIDItbGV2ZWwKICAqIDMyLWJpdCkuICBUaGUga3ZtX21tdSBzdHJ1Y3R1cmUgYWJzdHJhY3RzIHRoZSBkZXRhaWxzIG9mIHRoZSBjdXJyZW50IG1tdQpAQCAtMjM2LDYgKzI1OCw3IEBACiAJaHBhX3Qgcm9vdF9ocGE7CiAJaW50IHJvb3RfbGV2ZWw7CiAJaW50IHNoYWRvd19yb290X2xldmVsOworCXVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIGJhc2Vfcm9sZTsKIAogCXU2NCAqcGFlX3Jvb3Q7CiB9OwpAQCAtMjU4LDYgKzI4MSw3IEBACiAJdW5zaWduZWQgbG9uZyBjcjM7CiAJdW5zaWduZWQgbG9uZyBjcjQ7CiAJdW5zaWduZWQgbG9uZyBjcjg7CisJdTMyIGhmbGFnczsKIAl1NjQgcGRwdHJzWzRdOyAvKiBwYWUgKi8KIAl1NjQgc2hhZG93X2VmZXI7CiAJdTY0IGFwaWNfYmFzZTsKQEAgLTMzOCw2ICszNjIsMTUgQEAKIAogCXN0cnVjdCBtdHJyX3N0YXRlX3R5cGUgbXRycl9zdGF0ZTsKIAl1MzIgcGF0OworCisJaW50IHN3aXRjaF9kYl9yZWdzOworCXVuc2lnbmVkIGxvbmcgaG9zdF9kYltLVk1fTlJfREJfUkVHU107CisJdW5zaWduZWQgbG9uZyBob3N0X2RyNjsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZHI3OworCXVuc2lnbmVkIGxvbmcgZGJbS1ZNX05SX0RCX1JFR1NdOworCXVuc2lnbmVkIGxvbmcgZHI2OworCXVuc2lnbmVkIGxvbmcgZHI3OworCXVuc2lnbmVkIGxvbmcgZWZmX2RiW0tWTV9OUl9EQl9SRUdTXTsKIH07CiAKIHN0cnVjdCBrdm1fbWVtX2FsaWFzIHsKQEAgLTM3OCw2ICs0MTEsNyBAQAogCiAJdW5zaWduZWQgbG9uZyBpcnFfc291cmNlc19iaXRtYXA7CiAJdW5zaWduZWQgbG9uZyBpcnFfc3RhdGVzW0tWTV9JT0FQSUNfTlVNX1BJTlNdOworCXU2NCB2bV9pbml0X3RzYzsKIH07CiAKIHN0cnVjdCBrdm1fdm1fc3RhdCB7CkBAIC00NDYsOCArNDgwLDcgQEAKIAl2b2lkICgqdmNwdV9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIAlpbnQgKCpzZXRfZ3Vlc3RfZGVidWcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgICAgICBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpOwotCXZvaWQgKCpndWVzdF9kZWJ1Z19wcmUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJCQkgICAgICAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKTsKIAlpbnQgKCpnZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCAqcGRhdGEpOwogCWludCAoKnNldF9tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0IGRhdGEpOwogCXU2NCAoKmdldF9zZWdtZW50X2Jhc2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZyk7CkBAIC01ODMsMTYgKzYxNiwxMiBAQAogdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKTsKIAotdm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOworaW50IGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCk7CiAKIHZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWludCBlbXVsYXRvcl9yZWFkX3N0ZCh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgIHZvaWQgKnZhbCwKLQkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBjb25zdCB2b2lkICp2YWwsCiAJCQkgICAgdW5zaWduZWQgaW50IGJ5dGVzLApAQCAtNzM3LDYgKzc2NiwxMCBAQAogCVRBU0tfU1dJVENIX0dBVEUgPSAzLAogfTsKIAorI2RlZmluZSBIRl9HSUZfTUFTSwkJKDEgPDwgMCkKKyNkZWZpbmUgSEZfSElGX01BU0sJCSgxIDw8IDEpCisjZGVmaW5lIEhGX1ZJTlRSX01BU0sJCSgxIDw8IDIpCisKIC8qCiAgKiBIYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zIG1heSBmYXVsdCBpZiBhCiAgKiByZWJvb3QgdHVybnMgb2ZmIHZpcnR1YWxpemF0aW9uIHdoaWxlIHByb2Nlc3NlcyBhcmUgcnVubmluZy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggMzU4YWNjNS4uZjRlNTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTE4LDExICsxOCwxNSBAQAogI2RlZmluZSBfRUZFUl9MTUUJCTggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8KICNkZWZpbmUgX0VGRVJfTE1BCQkxMCAvKiBMb25nIG1vZGUgYWN0aXZlIChyZWFkLW9ubHkpICovCiAjZGVmaW5lIF9FRkVSX05YCQkxMSAvKiBObyBleGVjdXRlIGVuYWJsZSAqLworI2RlZmluZSBfRUZFUl9TVk1FCQkxMiAvKiBFbmFibGUgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgX0VGRVJfRkZYU1IJCTE0IC8qIEVuYWJsZSBGYXN0IEZYU0FWRS9GWFJTVE9SICovCiAKICNkZWZpbmUgRUZFUl9TQ0UJCSgxPDxfRUZFUl9TQ0UpCiAjZGVmaW5lIEVGRVJfTE1FCQkoMTw8X0VGRVJfTE1FKQogI2RlZmluZSBFRkVSX0xNQQkJKDE8PF9FRkVSX0xNQSkKICNkZWZpbmUgRUZFUl9OWAkJCSgxPDxfRUZFUl9OWCkKKyNkZWZpbmUgRUZFUl9TVk1FCQkoMTw8X0VGRVJfU1ZNRSkKKyNkZWZpbmUgRUZFUl9GRlhTUgkJKDE8PF9FRkVSX0ZGWFNSKQogCiAvKiBJbnRlbCBNU1JzLiBTb21lIGFsc28gYXZhaWxhYmxlIG9uIG90aGVyIENQVXMgKi8KICNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjAJCTB4MDAwMDAwYzEKQEAgLTM2MCw0ICszNjQsOSBAQAogI2RlZmluZSBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMyICAgIDB4MDAwMDA0OGIKICNkZWZpbmUgTVNSX0lBMzJfVk1YX0VQVF9WUElEX0NBUCAgICAgICAweDAwMDAwNDhjCiAKKy8qIEFNRC1WIE1TUnMgKi8KKworI2RlZmluZSBNU1JfVk1fQ1IgICAgICAgICAgICAgICAgICAgICAgIDB4YzAwMTAxMTQKKyNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBICAgICAgICAgICAgICAgICAweGMwMDEwMTE3CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9NU1JfSU5ERVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmgKaW5kZXggYTg4OTQ2NC4uM2FjNTAzMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCkBAIC02LDggKzYsNCBAQAogI2RlZmluZSBBUkNIX0dFVF9GUyAweDEwMDMKICNkZWZpbmUgQVJDSF9HRVRfR1MgMHgxMDA0CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci1leHRlcm4gbG9uZyBzeXNfYXJjaF9wcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcpOwotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQogI2VuZGlmIC8qIF9BU01fWDg2X1BSQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGViZTg1OGMuLmMyMzA4ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMSwyNyArMSwxMiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9TRVRVUF9ICiAjZGVmaW5lIF9BU01fWDg2X1NFVFVQX0gKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyMDQ4CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLS8qIEludGVycnVwdCBjb250cm9sIGZvciB2U01Qb3dlcmVkIHg4Nl82NCBzeXN0ZW1zICovCi12b2lkIHZzbXBfaW5pdCh2b2lkKTsKLQotCi12b2lkIHNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjayh2b2lkKTsKLQotCi0jaWZkZWYgQ09ORklHX1g4Nl9WSVNXUwotZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOwotZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotZXh0ZXJuIGludCB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbm1pKGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKLWV4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX2luaXQoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOwogLyoKICAqIEFueSBzZXR1cCBxdWlya3MgdG8gYmUgcGVyZm9ybWVkPwogICovCkBAIC00OCwxNiArMzMsOCBAQAogCWludCAoKnVwZGF0ZV9nZW5hcGljKSh2b2lkKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgeDg2X3F1aXJrcyAqeDg2X3F1aXJrczsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7Ci0KLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaWZkZWYgX19pMzg2X18KIAogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgpAQCAtNzgsNiArNTUsMjggQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgogCisvKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwordm9pZCB2c21wX2luaXQodm9pZCk7CisKK3ZvaWQgc2V0dXBfYmlvc19jb3JydXB0aW9uX2NoZWNrKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9WSVNXUworZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOworZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworZXh0ZXJuIGludCB3YWtldXBfc2Vjb25kYXJ5X2NwdV92aWFfbm1pKGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKK2V4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX2luaXQoaW50IGFwaWNpZCwgdW5zaWduZWQgbG9uZyBzdGFydF9laXApOworZXh0ZXJuIHN0cnVjdCB4ODZfcXVpcmtzICp4ODZfcXVpcmtzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmlkZW9fbW9kZTsKKworI2lmbmRlZiBDT05GSUdfUEFSQVZJUlQKKyNkZWZpbmUgcGFyYXZpcnRfcG9zdF9hbGxvY2F0b3JfaW5pdCgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZm5kZWYgX1NFVFVQCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDhhYjljYzguLmNhOGJmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9YODZfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggMWI4YWZhNy4uODJhZGE3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTE3NCwxMCArMTc0LDYgQEAKICNkZWZpbmUgU1ZNX0NQVUlEX0ZFQVRVUkVfU0hJRlQgMgogI2RlZmluZSBTVk1fQ1BVSURfRlVOQyAweDgwMDAwMDBhCiAKLSNkZWZpbmUgTVNSX0VGRVJfU1ZNRV9NQVNLICgxVUxMIDw8IDEyKQotI2RlZmluZSBNU1JfVk1fQ1IgICAgICAgMHhjMDAxMDExNAotI2RlZmluZSBNU1JfVk1fSFNBVkVfUEEgMHhjMDAxMDExN1VMTAotCiAjZGVmaW5lIFNWTV9WTV9DUl9TVk1fRElTQUJMRSA0CiAKICNkZWZpbmUgU1ZNX1NFTEVDVE9SX1NfU0hJRlQgNApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKaW5kZXggYzBiMGJkYS4uZTI2ZDM0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCkBAIC03NCw2ICs3NCw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2V4ZWN2ZShjaGFyIF9fdXNlciAqLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLAogCQkJICAgY2hhciBfX3VzZXIgKiBfX3VzZXIgKiwKIAkJCSAgIHN0cnVjdCBwdF9yZWdzICopOworbG9uZyBzeXNfYXJjaF9wcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBrZXJuZWwvaW9wb3J0LmMgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfaW9wbCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwdF9yZWdzICopOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggMmJiNmE4My4uNGY1YzI0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCkBAIC0xMSw4ICsxMSw4IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gaW50IHRpbWVyX2FjazsKKyNlbmRpZgogZXh0ZXJuIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOwotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogZXh0ZXJuIGludCBub190aW1lcl9jaGVjazsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oCmluZGV4IDU5MzYzNjIuLmUwZjlhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmgKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAJd3Jtc3JsKE1TUl9WTV9IU0FWRV9QQSwgMCk7CiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgJiB+TVNSX0VGRVJfU1ZNRV9NQVNLKTsKKwl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgJiB+RUZFUl9TVk1FKTsKIH0KIAogLyoqIE1ha2VzIHN1cmUgU1ZNIGlzIGRpc2FibGVkLCBpZiBpdCBpcyBzdXBwb3J0ZWQgb24gdGhlIENQVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAppbmRleCBkMDIzOGU2Li40OThmOTQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaApAQCAtMjcwLDggKzI3MCw5IEBACiAKICNkZWZpbmUgSU5UUl9UWVBFX0VYVF9JTlRSICAgICAgICAgICAgICAoMCA8PCA4KSAvKiBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgSU5UUl9UWVBFX05NSV9JTlRSCQkoMiA8PCA4KSAvKiBOTUkgKi8KLSNkZWZpbmUgSU5UUl9UWVBFX0VYQ0VQVElPTiAgICAgICAgICAgICAoMyA8PCA4KSAvKiBwcm9jZXNzb3IgZXhjZXB0aW9uICovCisjZGVmaW5lIElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTgkoMyA8PCA4KSAvKiBwcm9jZXNzb3IgZXhjZXB0aW9uICovCiAjZGVmaW5lIElOVFJfVFlQRV9TT0ZUX0lOVFIgICAgICAgICAgICAgKDQgPDwgOCkgLyogc29mdHdhcmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVFJfVFlQRV9TT0ZUX0VYQ0VQVElPTgkoNiA8PCA4KSAvKiBzb2Z0d2FyZSBleGNlcHRpb24gKi8KIAogLyogR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPIGZsYWdzLiAqLwogI2RlZmluZSBHVUVTVF9JTlRSX1NUQVRFX1NUSQkJMHgwMDAwMDAwMQpAQCAtMzExLDcgKzMxMiw3IEBACiAjZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfVFlQRSAgICAgICAgICAgMHgxMCAgICAvKiA0LCBkaXJlY3Rpb24gb2YgYWNjZXNzICovCiAjZGVmaW5lIFRZUEVfTU9WX1RPX0RSICAgICAgICAgICAgICAgICAgKDAgPDwgNCkKICNkZWZpbmUgVFlQRV9NT1ZfRlJPTV9EUiAgICAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX1JFRyAgICAgICAgICAgIDB4ZjAwICAgLyogMTE6OCwgZ2VuZXJhbCBwdXJwb3NlIHJlZy4gKi8KKyNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19SRUcoZXEpICAgICAgICAoKChlcSkgPj4gOCkgJiAweGYpIC8qIDExOjgsIGdlbmVyYWwgcHVycG9zZSByZWcuICovCiAKIAogLyogc2VnbWVudCBBUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCA2NTc5MmMyLi41MmM4Mzk4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpAQCAtODcsMzAgKzg3LDE1IEBACiBjb25maWcgWDg2X1BPV0VSTk9XX0s4CiAJdHJpc3RhdGUgIkFNRCBPcHRlcm9uL0F0aGxvbjY0IFBvd2VyTm93ISIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKKwlkZXBlbmRzIG9uIEFDUEkgJiYgQUNQSV9QUk9DRVNTT1IKIAloZWxwCi0JICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBtb2JpbGUgQU1EIE9wdGVyb24vQXRobG9uNjQgcHJvY2Vzc29ycy4KKwkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIEs4L0sxMCBPcHRlcm9uL0F0aGxvbjY0IHByb2Nlc3NvcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBvd2Vybm93LWs4LgogCiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCi0JICBJZiBpbiBkb3VidCwgc2F5IE4uCi0KLWNvbmZpZyBYODZfUE9XRVJOT1dfSzhfQUNQSQotCWJvb2wKLQlwcm9tcHQgIkFDUEkgU3VwcG9ydCIgaWYgWDg2XzMyCi0JZGVwZW5kcyBvbiBBQ1BJICYmIFg4Nl9QT1dFUk5PV19LOCAmJiBBQ1BJX1BST0NFU1NPUgotCWRlcGVuZHMgb24gIShYODZfUE9XRVJOT1dfSzggPSB5ICYmIEFDUElfUFJPQ0VTU09SID0gbSkKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSzhzIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBTdGF0ZXMgdmlhIEFDUEkuCi0JICBUaGlzIGRyaXZlciBpcyBwcm9iYWJseSByZXF1aXJlZCBmb3IgQ1BVRnJlcSB0byB3b3JrIHdpdGggbXVsdGktc29ja2V0IGFuZAotCSAgU01QIHN5c3RlbXMuICBJdCBpcyBub3QgcmVxdWlyZWQgb24gYXQgbGVhc3Qgc29tZSBzaW5nbGUtc29ja2V0IHlldAotCSAgbXVsdGktY29yZSBzeXN0ZW1zLCBldmVuIGlmIFNNUCBpcyBlbmFibGVkLgotCi0JICBJdCBpcyBzYWZlIHRvIHNheSBZIGhlcmUuCi0KIGNvbmZpZyBYODZfR1hfU1VTUE1PRAogCXRyaXN0YXRlICJDeXJpeCBNZWRpYUdYL05hdFNlbWkgR2VvZGUgU3VzcGVuZCBNb2R1bGF0aW9uIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFBDSQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCmluZGV4IDU2MGY3NzYuLjUwOTI5NmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKQEAgLTEsNiArMSwxMSBAQAorIyBMaW5rIG9yZGVyIG1hdHRlcnMuIEs4IGlzIHByZWZlcnJlZCB0byBBQ1BJIGJlY2F1c2Ugb2YgZmlybXdhcmUgYnVncyBpbiBlYXJseQorIyBLOCBzeXN0ZW1zLiBBQ1BJIGlzIHByZWZlcnJlZCB0byBhbGwgb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4KKyMgc3BlZWRzdGVwLSogaXMgcHJlZmVycmVkIG92ZXIgcDQtY2xvY2ttb2QuCisKK29iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCitvYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s2KQkJKz0gcG93ZXJub3ctazYubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNykJCSs9IHBvd2Vybm93LWs3Lm8KLW9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCiBvYmotJChDT05GSUdfWDg2X0xPTkdIQVVMKQkJKz0gbG9uZ2hhdWwubwogb2JqLSQoQ09ORklHX1g4Nl9FX1BPV0VSU0FWRVIpCQkrPSBlX3Bvd2Vyc2F2ZXIubwogb2JqLSQoQ09ORklHX0VMQU5fQ1BVRlJFUSkJCSs9IGVsYW5mcmVxLm8KQEAgLTEwLDcgKzE1LDYgQEAKIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0lDSCkJCSs9IHNwZWVkc3RlcC1pY2gubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCKQkJKz0gc3BlZWRzdGVwLWxpYi5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9TTUkpCQkrPSBzcGVlZHN0ZXAtc21pLm8KLW9iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwogb2JqLSQoQ09ORklHX1g4Nl9QNF9DTE9DS01PRCkJCSs9IHA0LWNsb2NrbW9kLm8KIG9iai0kKENPTkZJR19YODZfQ1BVRlJFUV9ORk9SQ0UyKQkrPSBjcHVmcmVxLW5mb3JjZTIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDRiMWMzMTkuLjNiYWJlMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYWNwaS1jcHVmcmVxLmMgLSBBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIgKCRSZXZpc2lvbjogMS40ICQpCisgKiBhY3BpLWNwdWZyZXEuYyAtIEFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlcgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBQYXVsIERpZWZlbmJhdWdoIDxwYXVsLnMuZGllZmVuYmF1Z2hAaW50ZWwuY29tPgpAQCAtMzYsMTYgKzM2LDE4IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKwogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJhY3BpLWNwdWZyZXEiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiYWNwaS1jcHVmcmVxIiwgbXNnKQogCiBNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoLCBEb21pbmlrIEJyb2Rvd3NraSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIiKTsKQEAgLTk1LDcgKzk3LDcgQEAKIAogCXBlcmYgPSBkYXRhLT5hY3BpX2RhdGE7CiAKLQlmb3IgKGk9MDsgaTxwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKIAkJaWYgKHZhbHVlID09IHBlcmYtPnN0YXRlc1tpXS5zdGF0dXMpCiAJCQlyZXR1cm4gZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3k7CiAJfQpAQCAtMTEwLDcgKzExMiw3IEBACiAJbXNyICY9IElOVEVMX01TUl9SQU5HRTsKIAlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCi0JZm9yIChpPTA7IGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CiAJCWlmIChtc3IgPT0gcGVyZi0+c3RhdGVzW2RhdGEtPmZyZXFfdGFibGVbaV0uaW5kZXhdLnN0YXR1cykKIAkJCXJldHVybiBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKIAl9CkBAIC0xMzgsMTUgKzE0MCwxMyBAQAogCXU4IGJpdF93aWR0aDsKIH07CiAKLXR5cGVkZWYgdW5pb24gewotCXN0cnVjdCBtc3JfYWRkciBtc3I7Ci0Jc3RydWN0IGlvX2FkZHIgaW87Ci19IGRydl9hZGRyX3VuaW9uOwotCiBzdHJ1Y3QgZHJ2X2NtZCB7CiAJdW5zaWduZWQgaW50IHR5cGU7CiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7Ci0JZHJ2X2FkZHJfdW5pb24gYWRkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBtc3JfYWRkciBtc3I7CisJCXN0cnVjdCBpb19hZGRyIGlvOworCX0gYWRkcjsKIAl1MzIgdmFsOwogfTsKIApAQCAtMzY5LDcgKzM2OSw3IEBACiAJdW5zaWduZWQgaW50IGN1cl9mcmVxOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpPTA7IGk8MTAwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJY3VyX2ZyZXEgPSBleHRyYWN0X2ZyZXEoZ2V0X2N1cl92YWwobWFzayksIGRhdGEpOwogCQlpZiAoY3VyX2ZyZXEgPT0gZnJlcSkKIAkJCXJldHVybiAxOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAkJdW5zaWduZWQgbG9uZyBmcmVxbiA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAKLQkJZm9yIChpPTA7IGk8KHBlcmYtPnN0YXRlX2NvdW50LTEpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IChwZXJmLT5zdGF0ZV9jb3VudC0xKTsgaSsrKSB7CiAJCQlmcmVxID0gZnJlcW47CiAJCQlmcmVxbiA9IHBlcmYtPnN0YXRlc1tpKzFdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkJCWlmICgoMiAqIGNwdV9raHopID4gKGZyZXFuICsgZnJlcSkpIHsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCiAJLyogZGV0ZWN0IHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAwOwotCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewogCQlpZiAoKHBlcmYtPnN0YXRlc1tpXS50cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAwKSA+CiAJCSAgICBwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5KQogCQkJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CkBAIC02ODIsOCArNjgyLDggQEAKIAogCWRhdGEtPm1heF9mcmVxID0gcGVyZi0+c3RhdGVzWzBdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkvKiB0YWJsZSBpbml0ICovCi0JZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewotCQlpZiAoaT4wICYmIHBlcmYtPnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSA+PQorCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJCWlmIChpID4gMCAmJiBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgPj0KIAkJICAgIGRhdGEtPmZyZXFfdGFibGVbdmFsaWRfc3RhdGVzLTFdLmZyZXF1ZW5jeSAvIDEwMDApCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCmluZGV4IDk2NWVhNTIuLjczMzA5M2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqIG5mb3JjZTJfY2hpcHNldDoKICAqIEZTQiBpcyBjaGFuZ2VkIHVzaW5nIHRoZSBjaGlwc2V0CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmZvcmNlMl9jaGlwc2V0X2RldjsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmZvcmNlMl9kZXY7CiAKIC8qIGZpZDoKICAqIG11bHRpcGxpZXIgKiAxMApAQCAtNTYsNyArNTYsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhtaW5fZnNiLAogCQkiTWluaW11bSBGU0IgdG8gdXNlLCBpZiBub3QgZGVmaW5lZDogY3VycmVudCBGU0IgLSA1MCIpOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImNwdWZyZXEtbmZvcmNlMiIsIG1zZykKKyNkZWZpbmUgUEZYICJjcHVmcmVxLW5mb3JjZTI6ICIKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJjcHVmcmVxLW5mb3JjZTIiLCBtc2cpCiAKIC8qKgogICogbmZvcmNlMl9jYWxjX2ZzYiAtIGNhbGN1bGF0ZSBGU0IKQEAgLTExOCwxMSArMTIwLDExIEBACiAJaW50IHRlbXA7CiAKIAkvKiBTZXQgdGhlIHBsbCBhZGRyLiB0byAweDAwICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEFEUiwgMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExBRFIsIDApOwogCiAJLyogTm93IHdyaXRlIHRoZSB2YWx1ZSBpbiBhbGwgNjQgcmVnaXN0ZXJzICovCiAJZm9yICh0ZW1wID0gMDsgdGVtcCA8PSAweDNmOyB0ZW1wKyspCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExSRUcsIHBsbCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMUkVHLCBwbGwpOwogCiAJcmV0dXJuOwogfQpAQCAtMTM5LDggKzE0MSw4IEBACiAJdTMyIGZzYiwgdGVtcCA9IDA7CiAKIAkvKiBHZXQgY2hpcHNldCBib290IEZTQiBmcm9tIHN1YmRldmljZSA1IChGU0IgYXQgYm9vdC10aW1lKSAqLwotCW5mb3JjZTJfc3ViNSA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLAotCQkJCQkJMHgwMUVGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwluZm9yY2UyX3N1YjUgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMUVGLAorCQkJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwogCWlmICghbmZvcmNlMl9zdWI1KQogCQlyZXR1cm4gMDsKIApAQCAtMTQ4LDEzICsxNTAsMTMgQEAKIAlmc2IgLz0gMTAwMDAwMDsKIAogCS8qIENoZWNrIGlmIFBMTCByZWdpc3RlciBpcyBhbHJlYWR5IHNldCAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CiAKIAlpZiAoYm9vdGZzYiB8fCAhdGVtcCkKIAkJcmV0dXJuIGZzYjsKIAogCS8qIFVzZSBQTEwgcmVnaXN0ZXIgRlNCIHZhbHVlICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMUkVHLCAmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTFJFRywgJnRlbXApOwogCWZzYiA9IG5mb3JjZTJfY2FsY19mc2IodGVtcCk7CiAKIAlyZXR1cm4gZnNiOwpAQCAtMTc0LDE4ICsxNzYsMTggQEAKIAlpbnQgcGxsID0gMDsKIAogCWlmICgoZnNiID4gbWF4X2ZzYikgfHwgKGZzYiA8IE5GT1JDRTJfTUlOX0ZTQikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBGU0IgJWQgaXMgb3V0IG9mIHJhbmdlIVxuIiwgZnNiKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRlNCICVkIGlzIG91dCBvZiByYW5nZSFcbiIsIGZzYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXRmc2IgPSBuZm9yY2UyX2ZzYl9yZWFkKDApOwogCWlmICghdGZzYikgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IEVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIEZTQlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIEZTQlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEZpcnN0IHdyaXRlPyBUaGVuIHNldCBhY3R1YWwgdmFsdWUgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4ICopJnRlbXApOwogCWlmICghdGVtcCkgewogCQlwbGwgPSBuZm9yY2UyX2NhbGNfcGxsKHRmc2IpOwogCkBAIC0xOTcsNyArMTk5LDcgQEAKIAogCS8qIEVuYWJsZSB3cml0ZSBhY2Nlc3MgKi8KIAl0ZW1wID0gMHgwMTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCl0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTgpdGVtcCk7CiAKIAlkaWZmID0gdGZzYiAtIGZzYjsKIApAQCAtMjIyLDcgKzIyNCw3IEBACiAJfQogCiAJdGVtcCA9IDB4NDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMQURSLCAodTgpdGVtcCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEFEUiwgKHU4KXRlbXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQsNyArMjQ2LDggQEAKICAqIG5mb3JjZTJfdGFyZ2V0IC0gc2V0IGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKiBAcG9saWN5OiBuZXcgcG9saWN5CiAgKiBAdGFyZ2V0X2ZyZXE6IHRoZSB0YXJnZXQgZnJlcXVlbmN5Ci0gKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeSAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKKyAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5CisgKiAgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS4KICAqLwpAQCAtMjc2LDcgKzI3OSw3IEBACiAJLyogbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAqLwogCiAJaWYgKG5mb3JjZTJfc2V0X2ZzYih0YXJnZXRfZnNiKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKIAkJCXRhcmdldF9mc2IpOwogCWVsc2UKIAkJZHByaW50aygiQ2hhbmdlZCBGU0Igc3VjY2Vzc2Z1bGx5IHRvICVkXG4iLApAQCAtMzI3LDggKzMzMCw4IEBACiAJLyogRklYOiBHZXQgRklEIGZyb20gQ1BVICovCiAJaWYgKCFmaWQpIHsKIAkJaWYgKCFjcHVfa2h6KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNwdWZyZXE6IGNwdV9raHogbm90IHNldCwgY2FuJ3QgY2FsY3VsYXRlIG11bHRpcGxpZXIhXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkiY3B1X2toeiBub3Qgc2V0LCBjYW4ndCBjYWxjdWxhdGUgbXVsdGlwbGllciFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMzQzLDcgKzM0Niw3IEBACiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiBGU0IgY3VycmVudGx5IGF0ICVpIE1IeiwgRklEICVkLiVkXG4iLCBmc2IsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZTQiBjdXJyZW50bHkgYXQgJWkgTUh6LCBGSUQgJWQuJWRcbiIsIGZzYiwKIAkgICAgICAgZmlkIC8gMTAsIGZpZCAlIDEwKTsKIAogCS8qIFNldCBtYXhpbXVtIEZTQiB0byBGU0IgYXQgYm9vdCB0aW1lICovCkBAIC0zOTIsMTcgKzM5NSwxOCBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mb3JjZTJfZGV0ZWN0X2NoaXBzZXQodm9pZCkKIHsKLQluZm9yY2UyX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsCisJbmZvcmNlMl9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwKIAkJCQkJUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMiwKIAkJCQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CiAKLQlpZiAobmZvcmNlMl9jaGlwc2V0X2RldiA9PSBOVUxMKQorCWlmIChuZm9yY2UyX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6IERldGVjdGVkIG5Gb3JjZTIgY2hpcHNldCByZXZpc2lvbiAlWFxuIiwKLQkgICAgICAgbmZvcmNlMl9jaGlwc2V0X2Rldi0+cmV2aXNpb24pOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgImNwdWZyZXE6IEZTQiBjaGFuZ2luZyBpcyBtYXliZSB1bnN0YWJsZSBhbmQgY2FuIGxlYWQgdG8gY3Jhc2hlcyBhbmQgZGF0YSBsb3NzLlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRldGVjdGVkIG5Gb3JjZTIgY2hpcHNldCByZXZpc2lvbiAlWFxuIiwKKwkgICAgICAgbmZvcmNlMl9kZXYtPnJldmlzaW9uKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWAorCSAgICAgICAiRlNCIGNoYW5naW5nIGlzIG1heWJlIHVuc3RhYmxlIGFuZCBjYW4gbGVhZCB0byAiCisJICAgICAgICJjcmFzaGVzIGFuZCBkYXRhIGxvc3MuXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIwLDcgKzQyNCw3IEBACiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmIChuZm9yY2UyX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBObyBuRm9yY2UyIGNoaXBzZXQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIG5Gb3JjZTIgY2hpcHNldC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwppbmRleCBjMmY5MzBkLi4zZjgzZWExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCkBAIC0xMiwxMiArMTIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS90c2MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAogI2RlZmluZSBFUFNfQlJBTkRfQzdNCTAKICNkZWZpbmUgRVBTX0JSQU5EX0M3CTEKQEAgLTE4NCw3ICsxODQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlzd2l0Y2goYnJhbmQpIHsKKwlzd2l0Y2ggKGJyYW5kKSB7CiAJY2FzZSBFUFNfQlJBTkRfQzdNOgogCQlwcmludGsoS0VSTl9DT05UICJDNy1NXG4iKTsKIAkJYnJlYWs7CkBAIC0yMTgsMTcgKzIxOCwyMCBAQAogCS8qIFByaW50IHZvbHRhZ2UgYW5kIG11bHRpcGxpZXIgKi8KIAlyZG1zcihNU1JfSUEzMl9QRVJGX1NUQVRVUywgbG8sIGhpKTsKIAljdXJyZW50X3ZvbHRhZ2UgPSBsbyAmIDB4ZmY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDdXJyZW50IHZvbHRhZ2UgPSAlZG1WXG4iLCBjdXJyZW50X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDdXJyZW50IHZvbHRhZ2UgPSAlZG1WXG4iLAorCQkJY3VycmVudF92b2x0YWdlICogMTYgKyA3MDApOwogCWN1cnJlbnRfbXVsdGlwbGllciA9IChsbyA+PiA4KSAmIDB4ZmY7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBDdXJyZW50IG11bHRpcGxpZXIgPSAlZFxuIiwgY3VycmVudF9tdWx0aXBsaWVyKTsKIAogCS8qIFByaW50IGxpbWl0cyAqLwogCW1heF92b2x0YWdlID0gaGkgJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gImVwczogSGlnaGVzdCB2b2x0YWdlID0gJWRtVlxuIiwgbWF4X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBIaWdoZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLAorCQkJbWF4X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CiAJbWF4X211bHRpcGxpZXIgPSAoaGkgPj4gOCkgJiAweGZmOwogCXByaW50ayhLRVJOX0lORk8gImVwczogSGlnaGVzdCBtdWx0aXBsaWVyID0gJWRcbiIsIG1heF9tdWx0aXBsaWVyKTsKIAltaW5fdm9sdGFnZSA9IChoaSA+PiAxNikgJiAweGZmOwotCXByaW50ayhLRVJOX0lORk8gImVwczogTG93ZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLCBtaW5fdm9sdGFnZSAqIDE2ICsgNzAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJlcHM6IExvd2VzdCB2b2x0YWdlID0gJWRtVlxuIiwKKwkJCW1pbl92b2x0YWdlICogMTYgKyA3MDApOwogCW1pbl9tdWx0aXBsaWVyID0gKGhpID4+IDI0KSAmIDB4ZmY7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBMb3dlc3QgbXVsdGlwbGllciA9ICVkXG4iLCBtaW5fbXVsdGlwbGllcik7CiAKQEAgLTMxOCw3ICszMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogZXBzX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICplcHNfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTM1Niw3ICszNTksNyBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmVwc19kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSYWZhsyBCaWxza2kgPHJhZmFsYmlsc2tpQGludGVyaWEucGw+Iik7CitNT0RVTEVfQVVUSE9SKCJSYWZhbCBCaWxza2kgPHJhZmFsYmlsc2tpQGludGVyaWEucGw+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkVuaGFuY2VkIFBvd2VyU2F2ZXIgZHJpdmVyIGZvciBWSUEgQzcgQ1BVJ3MuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKaW5kZXggZmU2MTNjOS4uMDA2YjI3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKQEAgLTE4NCw3ICsxODQsOCBAQAogewogCXVuc2lnbmVkIGludCBuZXdzdGF0ZSA9IDA7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmVsYW5mcmVxX3RhYmxlWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZlbGFuZnJlcV90YWJsZVswXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZWxhbmZyZXFfc2V0X2NwdV9zdGF0ZShuZXdzdGF0ZSk7CkBAIC0zMDEsNyArMzAyLDggQEAKIG1vZHVsZV9wYXJhbShtYXhfZnJlcSwgaW50LCAwNDQ0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgU3ZlbiBHZWdndXMgPHN2ZW5AZ2VnZ3VzLm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIlJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sICIKKwkJIlN2ZW4gR2VnZ3VzIDxzdmVuQGdlZ2d1cy5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImNwdWZyZXEgZHJpdmVyIGZvciBBTUQncyBFbGFuIENQVXMiKTsKIAogbW9kdWxlX2luaXQoZWxhbmZyZXFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYwppbmRleCA5ZDllYWU4Li5hYzI3ZWMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKQEAgLTc5LDggKzc5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItY3lyaXguaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAogLyogUENJIGNvbmZpZyByZWdpc3RlcnMsIGFsbCBhdCBGMCAqLwogI2RlZmluZSBQQ0lfUE1FUjEJMHg4MAkvKiBwb3dlciBtYW5hZ2VtZW50IGVuYWJsZSByZWdpc3RlciAxICovCkBAIC0xMjIsOCArMTIzLDggQEAKIHN0YXRpYyBpbnQgc3RvY2tfZnJlcTsKIAogLyogUENJIGJ1cyBjbG9jayAtIGRlZmF1bHRzIHRvIDMwLjAwMCBpZiBjcHVfa2h6IGlzIG5vdCBhdmFpbGFibGUgKi8KLXN0YXRpYyBpbnQgcGNpX2J1c2NsayA9IDA7Ci1tb2R1bGVfcGFyYW0gKHBjaV9idXNjbGssIGludCwgMDQ0NCk7CitzdGF0aWMgaW50IHBjaV9idXNjbGs7Cittb2R1bGVfcGFyYW0ocGNpX2J1c2NsaywgaW50LCAwNDQ0KTsKIAogLyogbWF4aW11bSBkdXJhdGlvbiBmb3Igd2hpY2ggdGhlIGNwdSBtYXkgYmUgc3VzcGVuZGVkCiAgKiAoMzJ1cyAqIE1BWF9EVVJBVElPTikuIElmIG5vIHBhcmFtZXRlciBpcyBnaXZlbiwgdGhpcyBkZWZhdWx0cwpAQCAtMTMyLDcgKzEzMyw3IEBACiAgKiBpcyBzdXNwZW5kZWQgLS0gcHJvY2Vzc2luZyBwb3dlciBpcyBqdXN0IDAuMzklIG9mIHdoYXQgaXQgdXNlZCB0byBiZSwKICAqIHRob3VnaC4gNzgxLjI1IGtIeighKSBmb3IgYSAyMDAgTUh6IHByb2Nlc3NvciAtLSB3b3cuICovCiBzdGF0aWMgaW50IG1heF9kdXJhdGlvbiA9IDI1NTsKLW1vZHVsZV9wYXJhbSAobWF4X2R1cmF0aW9uLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKG1heF9kdXJhdGlvbiwgaW50LCAwNDQ0KTsKIAogLyogRm9yIHRoZSBkZWZhdWx0IHBvbGljeSwgd2Ugd2FudCBhdCBsZWFzdCBzb21lIHByb2Nlc3NpbmcgcG93ZXIKICAqIC0gbGV0J3Mgc2F5IDUlLiAobWluID0gbWF4ZnJlcSAvIFBPTElDWV9NSU5fRElWKQpAQCAtMTQwLDcgKzE0MSw4IEBACiAjZGVmaW5lIFBPTElDWV9NSU5fRElWIDIwCiAKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJneC1zdXNwbW9kIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImd4LXN1c3Btb2QiLCBtc2cpCiAKIC8qKgogICogd2UgY2FuIGRldGVjdCBhIGNvcmUgbXVsdGlwaWxlciBmcm9tIGRpcjBfbHNiCkBAIC0xNjYsMTIgKzE2OCwyMCBAQAogICoJTG93IExldmVsIGNoaXBzZXQgaW50ZXJmYWNlCQkJCSoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGd4X2NoaXBzZXRfdGJsW10gX19pbml0ZGF0YSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1ksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKLQl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXsgMCwgfSwKIH07CiAKK3N0YXRpYyB2b2lkIGd4X3dyaXRlX2J5dGUoaW50IHJlZywgaW50IHZhbHVlKQoreworCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgcmVnLCB2YWx1ZSk7Cit9CisKIC8qKgogICogZ3hfZGV0ZWN0X2NoaXBzZXQ6CiAgKgpAQCAtMjAwLDcgKzIxMCw4IEBACiAvKioKICAqIGd4X2dldF9jcHVzcGVlZDoKICAqCi0gKiBGaW5kcyBvdXQgYXQgd2hpY2ggZWZmaWNpZW50IGZyZXF1ZW5jeSB0aGUgQ3lyaXggTWVkaWFHWC9OYXRTZW1pIEdlb2RlIENQVSBydW5zLgorICogRmluZHMgb3V0IGF0IHdoaWNoIGVmZmljaWVudCBmcmVxdWVuY3kgdGhlIEN5cml4IE1lZGlhR1gvTmF0U2VtaQorICogR2VvZGUgQ1BVIHJ1bnMuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3hfZ2V0X2NwdXNwZWVkKHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC0yMTcsMTcgKzIyOCwxOCBAQAogICoKICAqKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBneF92YWxpZGF0ZV9zcGVlZCh1bnNpZ25lZCBpbnQga2h6LCB1OCAqb25fZHVyYXRpb24sIHU4ICpvZmZfZHVyYXRpb24pCitzdGF0aWMgdW5zaWduZWQgaW50IGd4X3ZhbGlkYXRlX3NwZWVkKHVuc2lnbmVkIGludCBraHosIHU4ICpvbl9kdXJhdGlvbiwKKwkJdTggKm9mZl9kdXJhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCB0bXBfb24sIHRtcF9vZmY7CiAJaW50IG9sZF90bXBfZnJlcSA9IHN0b2NrX2ZyZXE7CiAJaW50IHRtcF9mcmVxOwogCi0JKm9mZl9kdXJhdGlvbj0xOwotCSpvbl9kdXJhdGlvbj0wOworCSpvZmZfZHVyYXRpb24gPSAxOworCSpvbl9kdXJhdGlvbiA9IDA7CiAKLQlmb3IgKGk9bWF4X2R1cmF0aW9uOyBpPjA7IGktLSkgeworCWZvciAoaSA9IG1heF9kdXJhdGlvbjsgaSA+IDA7IGktLSkgewogCQl0bXBfb2ZmID0gKChraHogKiBpKSAvIHN0b2NrX2ZyZXEpICYgMHhmZjsKIAkJdG1wX29uID0gaSAtIHRtcF9vZmY7CiAJCXRtcF9mcmVxID0gKHN0b2NrX2ZyZXEgKiB0bXBfb2ZmKSAvIGk7CkBAIC0yNTksMjYgKzI3MSwzNCBAQAogCWZyZXFzLmNwdSA9IDA7CiAJZnJlcXMub2xkID0gZ3hfZ2V0X2NwdXNwZWVkKDApOwogCi0JbmV3X2toeiA9IGd4X3ZhbGlkYXRlX3NwZWVkKGtoeiwgJmd4X3BhcmFtcy0+b25fZHVyYXRpb24sICZneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CisJbmV3X2toeiA9IGd4X3ZhbGlkYXRlX3NwZWVkKGtoeiwgJmd4X3BhcmFtcy0+b25fZHVyYXRpb24sCisJCQkmZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOwogCiAJZnJlcXMubmV3ID0gbmV3X2toejsKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JaWYgKG5ld19raHogIT0gc3RvY2tfZnJlcSkgeyAgLyogaWYgbmV3IGtoeiA9PSAxMDAlIG9mIENQVSBzcGVlZCwgaXQgaXMgc3BlY2lhbCBjYXNlICovCisKKworCWlmIChuZXdfa2h6ICE9IHN0b2NrX2ZyZXEpIHsKKwkJLyogaWYgbmV3IGtoeiA9PSAxMDAlIG9mIENQVSBzcGVlZCwgaXQgaXMgc3BlY2lhbCBjYXNlICovCiAJCXN3aXRjaCAoZ3hfcGFyYW1zLT5jczU1eDAtPmRldmljZSkgewogCQljYXNlIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1k6CiAJCQlwbWVyMSA9IGd4X3BhcmFtcy0+cGNpX3BtZXIxIHwgSVJRX1NQRFVQIHwgVklEX1NQRFVQOwogCQkJLyogRklYTUU6IG5lZWQgdG8gdGVzdCBvdGhlciB2YWx1ZXMgLS0gWndhbmUsTWl1cmEgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX0lSUVRDLCA0KTsgLyogdHlwaWNhbCAyIHRvIDRtcyAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfVklEVEMsIDEwMCk7LyogdHlwaWNhbCA1MCB0byAxMDBtcyAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjEsIHBtZXIxKTsKKwkJCS8qIHR5cGljYWwgMiB0byA0bXMgKi8KKwkJCWd4X3dyaXRlX2J5dGUoUENJX0lSUVRDLCA0KTsKKwkJCS8qIHR5cGljYWwgNTAgdG8gMTAwbXMgKi8KKwkJCWd4X3dyaXRlX2J5dGUoUENJX1ZJRFRDLCAxMDApOworCQkJZ3hfd3JpdGVfYnl0ZShQQ0lfUE1FUjEsIHBtZXIxKTsKIAotCQkJaWYgKGd4X3BhcmFtcy0+Y3M1NXgwLT5yZXZpc2lvbiA8IDB4MTApIHsgICAvKiBDUzU1MzAocmV2IDEuMiwgMS4zKSAqLwotCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyB8IFNVU01PRDsKLQkJCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1M1NTMwQSxCLi4gKi8KLQkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmcgfCBTVVNNT0QgfCBQV1JTVkU7CisJCQlpZiAoZ3hfcGFyYW1zLT5jczU1eDAtPnJldmlzaW9uIDwgMHgxMCkgeworCQkJCS8qIENTNTUzMChyZXYgMS4yLCAxLjMpICovCisJCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnfFNVU01PRDsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ1M1NTMwQSxCLi4gKi8KKwkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmd8U1VTTU9EfFBXUlNWRTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMDoKQEAgLTI5NCwxMyArMzE0LDEzIEBACiAJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyAmIH4oU1VTTU9EKTsKIAkJZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24gPSAwOwogCQlneF9wYXJhbXMtPm9uX2R1cmF0aW9uID0gMDsKLQkJZHByaW50aygic3VzcGVuZCBtb2R1bGF0aW9uIGRpc2FibGVkOiBjcHUgcnVucyAxMDAgcGVyY2VudCBzcGVlZC5cbiIpOworCQlkcHJpbnRrKCJzdXNwZW5kIG1vZHVsYXRpb24gZGlzYWJsZWQ6IGNwdSBydW5zIDEwMCUlIHNwZWVkLlxuIik7CiAJfQogCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET0ZGLCBneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET04sIGd4X3BhcmFtcy0+b25fZHVyYXRpb24pOworCWd4X3dyaXRlX2J5dGUoUENJX01PRE9GRiwgZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOworCWd4X3dyaXRlX2J5dGUoUENJX01PRE9OLCBneF9wYXJhbXMtPm9uX2R1cmF0aW9uKTsKIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1NVU0NGRywgc3VzY2ZnKTsKKwlneF93cml0ZV9ieXRlKFBDSV9TVVNDRkcsIHN1c2NmZyk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9TVVNDRkcsICZzdXNjZmcpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMzM0LDcgKzM1NCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcG9saWN5LT5jcHUgPSAwOwotCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksIHN0b2NrX2ZyZXEpOworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCAoc3RvY2tfZnJlcSAvIG1heF9kdXJhdGlvbiksCisJCQlzdG9ja19mcmVxKTsKIAogCS8qIGl0IG5lZWRzIHRvIGJlIGFzc3VyZWQgdGhhdCBhdCBsZWFzdCBvbmUgc3VwcG9ydGVkIGZyZXF1ZW5jeSBpcwogCSAqIHdpdGhpbiBwb2xpY3ktPm1pbiBhbmQgcG9saWN5LT5tYXguIElmIGl0IGlzIG5vdCwgcG9saWN5LT5tYXgKQEAgLTM1NCw3ICszNzUsOCBAQAogCXBvbGljeS0+bWF4ID0gdG1wX2ZyZXE7CiAJaWYgKHBvbGljeS0+bWF4IDwgcG9saWN5LT5taW4pCiAJCXBvbGljeS0+bWF4ID0gcG9saWN5LT5taW47Ci0JY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwgc3RvY2tfZnJlcSk7CisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwKKwkJCXN0b2NrX2ZyZXEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTgsMTggKzQyMCwxOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGRldGVybWluZSBtYXhpbXVtIGZyZXF1ZW5jeSAqLwotCWlmIChwY2lfYnVzY2xrKSB7CisJaWYgKHBjaV9idXNjbGspCiAJCW1heGZyZXEgPSBwY2lfYnVzY2xrICogZ3hfZnJlcV9tdWx0W2dldEN4ODYoQ1g4Nl9ESVIxKSAmIDB4MGZdOwotCX0gZWxzZSBpZiAoY3B1X2toeikgeworCWVsc2UgaWYgKGNwdV9raHopCiAJCW1heGZyZXEgPSBjcHVfa2h6OwotCX0gZWxzZSB7CisJZWxzZQogCQltYXhmcmVxID0gMzAwMDAgKiBneF9mcmVxX211bHRbZ2V0Q3g4NihDWDg2X0RJUjEpICYgMHgwZl07Ci0JfQorCiAJc3RvY2tfZnJlcSA9IG1heGZyZXE7CiAJY3VyZnJlcSA9IGd4X2dldF9jcHVzcGVlZCgwKTsKIAogCWRwcmludGsoImNwdSBtYXggZnJlcXVlbmN5IGlzICVkLlxuIiwgbWF4ZnJlcSk7Ci0JZHByaW50aygiY3B1IGN1cnJlbnQgZnJlcXVlbmN5IGlzICVka0h6LlxuIixjdXJmcmVxKTsKKwlkcHJpbnRrKCJjcHUgY3VycmVudCBmcmVxdWVuY3kgaXMgJWRrSHouXG4iLCBjdXJmcmVxKTsKIAogCS8qIHNldHVwIGJhc2ljIHN0cnVjdCBmb3IgY3B1ZnJlcSBBUEkgKi8KIAlwb2xpY3ktPmNwdSA9IDA7CkBAIC00NDcsNyArNDY5LDggQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZ3hfcGNpOwogCiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwotCWlmICgoZ3hfcGNpID0gZ3hfZGV0ZWN0X2NoaXBzZXQoKSkgPT0gTlVMTCkKKwlneF9wY2kgPSBneF9kZXRlY3RfY2hpcHNldCgpOworCWlmIChneF9wY2kgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBjaGVjayB3aGV0aGVyIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBzYW5lICovCkBAIC00NjgsOSArNDkxLDExIEBACiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9QTUVSMSwgJihwYXJhbXMtPnBjaV9wbWVyMSkpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjIsICYocGFyYW1zLT5wY2lfcG1lcjIpKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9OLCAmKHBhcmFtcy0+b25fZHVyYXRpb24pKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwgJihwYXJhbXMtPm9mZl9kdXJhdGlvbikpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET0ZGLAorCQkJJihwYXJhbXMtPm9mZl9kdXJhdGlvbikpOwogCi0JaWYgKChyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmZ3hfc3VzcG1vZF9kcml2ZXIpKSkgeworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZneF9zdXNwbW9kX2RyaXZlcik7CisJaWYgKHJldCkgewogCQlrZnJlZShwYXJhbXMpOwogCQlyZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciBlcnJvciEgKi8KIAl9CkBAIC00ODUsOSArNTEwLDkgQEAKIAlrZnJlZShneF9wYXJhbXMpOwogfQogCi1NT0RVTEVfQVVUSE9SICgiSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkNwdWZyZXEgZHJpdmVyIGZvciBDeXJpeCBNZWRpYUdYIGFuZCBOYXRTZW1pIEdlb2RlIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGlyb3NoaSBNaXVyYSA8bWl1cmFAZGEtY2hhLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ3B1ZnJlcSBkcml2ZXIgZm9yIEN5cml4IE1lZGlhR1ggYW5kIE5hdFNlbWkgR2VvZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoY3B1ZnJlcV9neF9pbml0KTsKIG1vZHVsZV9leGl0KGNwdWZyZXFfZ3hfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IGE0Y2ZmNWQuLmYxYzUxYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlICJsb25naGF1bC5oIgpAQCAtNTgsNyArNTgsNyBAQAogI2RlZmluZSBVU0VfTk9SVEhCUklER0UJCSgxIDw8IDIpCiAKIHN0YXRpYyBpbnQgY3B1X21vZGVsOwotc3RhdGljIHVuc2lnbmVkIGludCBudW1zY2FsZXM9MTY7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bXNjYWxlcyA9IDE2Owogc3RhdGljIHVuc2lnbmVkIGludCBmc2I7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbVZfcG9zICp2cm1fbVZfdGFibGU7CkBAIC02Nyw4ICs2Nyw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGhpZ2hlc3Rfc3BlZWQsIGxvd2VzdF9zcGVlZDsgLyoga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG1pbm11bHQsIG1heG11bHQ7CiBzdGF0aWMgaW50IGNhbl9zY2FsZV92b2x0YWdlOwotc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3ggPSBOVUxMOworc3RhdGljIHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CitzdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeDsKIHN0YXRpYyB1MzIgYWNwaV9yZWdzX2FkZHI7CiBzdGF0aWMgdTggbG9uZ2hhdWxfZmxhZ3M7CiBzdGF0aWMgdW5zaWduZWQgaW50IGxvbmdoYXVsX2luZGV4OwpAQCAtNzgsMTIgKzc4LDEzIEBACiBzdGF0aWMgaW50IGRpc2FibGVfYWNwaV9jMzsKIHN0YXRpYyBpbnQgcmV2aWRfZXJyYXRhOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImxvbmdoYXVsIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImxvbmdoYXVsIiwgbXNnKQogCiAKIC8qIENsb2NrIHJhdGlvcyBtdWx0aXBsaWVkIGJ5IDEwICovCi1zdGF0aWMgaW50IGNsb2NrX3JhdGlvWzMyXTsKLXN0YXRpYyBpbnQgZWJsY3JfdGFibGVbMzJdOworc3RhdGljIGludCBtdWx0c1szMl07CitzdGF0aWMgaW50IGVibGNyWzMyXTsKIHN0YXRpYyBpbnQgbG9uZ2hhdWxfdmVyc2lvbjsKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmxvbmdoYXVsX3RhYmxlOwogCkBAIC05Myw3ICs5NCw3IEBACiBzdGF0aWMgY2hhciAqcHJpbnRfc3BlZWQoaW50IHNwZWVkKQogewogCWlmIChzcGVlZCA8IDEwMDApIHsKLQkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksIiVkTUh6Iiwgc3BlZWQpOworCQlzbnByaW50ZihzcGVlZGJ1ZmZlciwgc2l6ZW9mKHNwZWVkYnVmZmVyKSwgIiVkTUh6Iiwgc3BlZWQpOwogCQlyZXR1cm4gc3BlZWRidWZmZXI7CiAJfQogCkBAIC0xMjIsMjcgKzEyMywyOCBAQAogCiBzdGF0aWMgaW50IGxvbmdoYXVsX2dldF9jcHVfbXVsdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgaW52YWx1ZT0wLGxvLCBoaTsKKwl1bnNpZ25lZCBsb25nIGludmFsdWUgPSAwLCBsbywgaGk7CiAKLQlyZG1zciAoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIGxvLCBoaSk7Ci0JaW52YWx1ZSA9IChsbyAmICgxPDwyMnwxPDwyM3wxPDwyNHwxPDwyNSkpID4+MjI7Ci0JaWYgKGxvbmdoYXVsX3ZlcnNpb249PVRZUEVfTE9OR0hBVUxfVjIgfHwgbG9uZ2hhdWxfdmVyc2lvbj09VFlQRV9QT1dFUlNBVkVSKSB7CisJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIGxvLCBoaSk7CisJaW52YWx1ZSA9IChsbyAmICgxPDwyMnwxPDwyM3wxPDwyNHwxPDwyNSkpPj4yMjsKKwlpZiAobG9uZ2hhdWxfdmVyc2lvbiA9PSBUWVBFX0xPTkdIQVVMX1YyIHx8CisJICAgIGxvbmdoYXVsX3ZlcnNpb24gPT0gVFlQRV9QT1dFUlNBVkVSKSB7CiAJCWlmIChsbyAmICgxPDwyNykpCi0JCQlpbnZhbHVlKz0xNjsKKwkJCWludmFsdWUgKz0gMTY7CiAJfQotCXJldHVybiBlYmxjcl90YWJsZVtpbnZhbHVlXTsKKwlyZXR1cm4gZWJsY3JbaW52YWx1ZV07CiB9CiAKIC8qIEZvciBwcm9jZXNzb3Igd2l0aCBCQ1IyIE1TUiAqLwogCi1zdGF0aWMgdm9pZCBkb19sb25naGF1bDEodW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4KQorc3RhdGljIHZvaWQgZG9fbG9uZ2hhdWwxKHVuc2lnbmVkIGludCBtdWx0c19pbmRleCkKIHsKIAl1bmlvbiBtc3JfYmNyMiBiY3IyOwogCiAJcmRtc3JsKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOwogCS8qIEVuYWJsZSBzb2Z0d2FyZSBjbG9jayBtdWx0aXBsaWVyICovCiAJYmNyMi5iaXRzLkVTT0ZUQkYgPSAxOwotCWJjcjIuYml0cy5DTE9DS01VTCA9IGNsb2NrX3JhdGlvX2luZGV4ICYgMHhmZjsKKwliY3IyLmJpdHMuQ0xPQ0tNVUwgPSBtdWx0c19pbmRleCAmIDB4ZmY7CiAKIAkvKiBTeW5jIHRvIHRpbWVyIHRpY2sgKi8KIAlzYWZlX2hhbHQoKTsKQEAgLTE2MSw3ICsxNjMsNyBAQAogCiAvKiBGb3IgcHJvY2Vzc29yIHdpdGggTG9uZ2hhdWwgTVNSICovCiAKLXN0YXRpYyB2b2lkIGRvX3Bvd2Vyc2F2ZXIoaW50IGN4X2FkZHJlc3MsIHVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleCwKK3N0YXRpYyB2b2lkIGRvX3Bvd2Vyc2F2ZXIoaW50IGN4X2FkZHJlc3MsIHVuc2lnbmVkIGludCBtdWx0c19pbmRleCwKIAkJCSAgdW5zaWduZWQgaW50IGRpcikKIHsKIAl1bmlvbiBtc3JfbG9uZ2hhdWwgbG9uZ2hhdWw7CkBAIC0xNzMsMTEgKzE3NSwxMSBAQAogCQlsb25naGF1bC5iaXRzLlJldmlzaW9uS2V5ID0gbG9uZ2hhdWwuYml0cy5SZXZpc2lvbklEOwogCWVsc2UKIAkJbG9uZ2hhdWwuYml0cy5SZXZpc2lvbktleSA9IDA7Ci0JbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW8gPSBjbG9ja19yYXRpb19pbmRleCAmIDB4ZjsKLQlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbzQgPSAoY2xvY2tfcmF0aW9faW5kZXggJiAweDEwKSA+PiA0OworCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvID0gbXVsdHNfaW5kZXggJiAweGY7CisJbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW80ID0gKG11bHRzX2luZGV4ICYgMHgxMCkgPj4gNDsKIAkvKiBTZXR1cCBuZXcgdm9sdGFnZSAqLwogCWlmIChjYW5fc2NhbGVfdm9sdGFnZSkKLQkJbG9uZ2hhdWwuYml0cy5Tb2Z0VklEID0gKGNsb2NrX3JhdGlvX2luZGV4ID4+IDgpICYgMHgxZjsKKwkJbG9uZ2hhdWwuYml0cy5Tb2Z0VklEID0gKG11bHRzX2luZGV4ID4+IDgpICYgMHgxZjsKIAkvKiBTeW5jIHRvIHRpbWVyIHRpY2sgKi8KIAlzYWZlX2hhbHQoKTsKIAkvKiBSYWlzZSB2b2x0YWdlIGlmIG5lY2Vzc2FyeSAqLwpAQCAtMjQwLDE0ICsyNDIsMTQgQEAKIAogLyoqCiAgKiBsb25naGF1bF9zZXRfY3B1X2ZyZXF1ZW5jeSgpCi0gKiBAY2xvY2tfcmF0aW9faW5kZXggOiBiaXRwYXR0ZXJuIG9mIHRoZSBuZXcgbXVsdGlwbGllci4KKyAqIEBtdWx0c19pbmRleCA6IGJpdHBhdHRlcm4gb2YgdGhlIG5ldyBtdWx0aXBsaWVyLgogICoKICAqIFNldHMgYSBuZXcgY2xvY2sgcmF0aW8uCiAgKi8KIAogc3RhdGljIHZvaWQgbG9uZ2hhdWxfc2V0c3RhdGUodW5zaWduZWQgaW50IHRhYmxlX2luZGV4KQogewotCXVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleDsKKwl1bnNpZ25lZCBpbnQgbXVsdHNfaW5kZXg7CiAJaW50IHNwZWVkLCBtdWx0OwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTYsOSArMjU4LDkgQEAKIAl1MzIgYm1fdGltZW91dCA9IDEwMDA7CiAJdW5zaWduZWQgaW50IGRpciA9IDA7CiAKLQljbG9ja19yYXRpb19pbmRleCA9IGxvbmdoYXVsX3RhYmxlW3RhYmxlX2luZGV4XS5pbmRleDsKKwltdWx0c19pbmRleCA9IGxvbmdoYXVsX3RhYmxlW3RhYmxlX2luZGV4XS5pbmRleDsKIAkvKiBTYWZldHkgcHJlY2F1dGlvbnMgKi8KLQltdWx0ID0gY2xvY2tfcmF0aW9bY2xvY2tfcmF0aW9faW5kZXggJiAweDFmXTsKKwltdWx0ID0gbXVsdHNbbXVsdHNfaW5kZXggJiAweDFmXTsKIAlpZiAobXVsdCA9PSAtMSkKIAkJcmV0dXJuOwogCXNwZWVkID0gY2FsY19zcGVlZChtdWx0KTsKQEAgLTI3NCw3ICsyNzYsNyBAQAogCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAotCWRwcmludGsgKCJTZXR0aW5nIHRvIEZTQjolZE1IeiBNdWx0OiVkLiVkeCAoJXMpXG4iLAorCWRwcmludGsoIlNldHRpbmcgdG8gRlNCOiVkTUh6IE11bHQ6JWQuJWR4ICglcylcbiIsCiAJCQlmc2IsIG11bHQvMTAsIG11bHQlMTAsIHByaW50X3NwZWVkKHNwZWVkLzEwMDApKTsKIHJldHJ5X2xvb3A6CiAJcHJlZW1wdF9kaXNhYmxlKCk7CkBAIC0yODIsOCArMjg0LDggQEAKIAogCXBpYzJfbWFzayA9IGluYigweEExKTsKIAlwaWMxX21hc2sgPSBpbmIoMHgyMSk7CS8qIHdvcmtzIG9uIEMzLiBzYXZlIG1hc2suICovCi0Jb3V0YigweEZGLDB4QTEpOwkvKiBPdmVya2lsbCAqLwotCW91dGIoMHhGRSwweDIxKTsJLyogVE1SMCBvbmx5ICovCisJb3V0YigweEZGLCAweEExKTsJLyogT3ZlcmtpbGwgKi8KKwlvdXRiKDB4RkUsIDB4MjEpOwkvKiBUTVIwIG9ubHkgKi8KIAogCS8qIFdhaXQgd2hpbGUgUENJIGJ1cyBpcyBidXN5LiAqLwogCWlmIChhY3BpX3JlZ3NfYWRkciAmJiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfTk9SVEhCUklER0UKQEAgLTMxMiw3ICszMTQsNyBAQAogCSAqIFNvZnR3YXJlIGNvbnRyb2xsZWQgbXVsdGlwbGllcnMgb25seS4KIAkgKi8KIAljYXNlIFRZUEVfTE9OR0hBVUxfVjE6Ci0JCWRvX2xvbmdoYXVsMShjbG9ja19yYXRpb19pbmRleCk7CisJCWRvX2xvbmdoYXVsMShtdWx0c19pbmRleCk7CiAJCWJyZWFrOwogCiAJLyoKQEAgLTMyNyw5ICszMjksOSBAQAogCQlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfQUNQSV9DMykgewogCQkJLyogRG9uJ3QgYWxsb3cgd2FrZXVwICovCiAJCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCk7Ci0JCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBjbG9ja19yYXRpb19pbmRleCwgZGlyKTsKKwkJCWRvX3Bvd2Vyc2F2ZXIoY3gtPmFkZHJlc3MsIG11bHRzX2luZGV4LCBkaXIpOwogCQl9IGVsc2UgewotCQkJZG9fcG93ZXJzYXZlcigwLCBjbG9ja19yYXRpb19pbmRleCwgZGlyKTsKKwkJCWRvX3Bvd2Vyc2F2ZXIoMCwgbXVsdHNfaW5kZXgsIGRpcik7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMzQxLDggKzM0Myw4IEBACiAJCS8qIEVuYWJsZSBidXMgbWFzdGVyIGFyYml0cmF0aW9uICovCiAJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKIAl9Ci0Jb3V0YihwaWMyX21hc2ssMHhBMSk7CS8qIHJlc3RvcmUgbWFzayAqLwotCW91dGIocGljMV9tYXNrLDB4MjEpOworCW91dGIocGljMl9tYXNrLCAweEExKTsJLyogcmVzdG9yZSBtYXNrICovCisJb3V0YihwaWMxX21hc2ssIDB4MjEpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0zOTIsNyArMzk0LDggQEAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAogCWlmICghYm1fdGltZW91dCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhcm5pbmc6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgaWRsZSBQQ0kgYnVzLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXJuaW5nOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yICIKKwkJCQkiaWRsZSBQQ0kgYnVzLlxuIik7CiB9CiAKIC8qCkBAIC00NTgsMzEgKzQ2MSwzMiBAQAogCQlicmVhazsKIAl9CiAKLQlkcHJpbnRrICgiTWluTXVsdDolZC4lZHggTWF4TXVsdDolZC4lZHhcbiIsCisJZHByaW50aygiTWluTXVsdDolZC4lZHggTWF4TXVsdDolZC4lZHhcbiIsCiAJCSBtaW5tdWx0LzEwLCBtaW5tdWx0JTEwLCBtYXhtdWx0LzEwLCBtYXhtdWx0JTEwKTsKIAogCWhpZ2hlc3Rfc3BlZWQgPSBjYWxjX3NwZWVkKG1heG11bHQpOwogCWxvd2VzdF9zcGVlZCA9IGNhbGNfc3BlZWQobWlubXVsdCk7Ci0JZHByaW50ayAoIkZTQjolZE1IeiAgTG93ZXN0IHNwZWVkOiAlcyAgIEhpZ2hlc3Qgc3BlZWQ6JXNcbiIsIGZzYiwKKwlkcHJpbnRrKCJGU0I6JWRNSHogIExvd2VzdCBzcGVlZDogJXMgICBIaWdoZXN0IHNwZWVkOiVzXG4iLCBmc2IsCiAJCSBwcmludF9zcGVlZChsb3dlc3Rfc3BlZWQvMTAwMCksCiAJCSBwcmludF9zcGVlZChoaWdoZXN0X3NwZWVkLzEwMDApKTsKIAogCWlmIChsb3dlc3Rfc3BlZWQgPT0gaGlnaGVzdF9zcGVlZCkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggImhpZ2hlc3RzcGVlZCA9PSBsb3dlc3QsIGFib3J0aW5nLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJoaWdoZXN0c3BlZWQgPT0gbG93ZXN0LCBhYm9ydGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGxvd2VzdF9zcGVlZCA+IGhpZ2hlc3Rfc3BlZWQpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJub25zZW5zZSEgbG93ZXN0ICglZCA+ICVkKSAhXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAibm9uc2Vuc2UhIGxvd2VzdCAoJWQgPiAlZCkgIVxuIiwKIAkJCWxvd2VzdF9zcGVlZCwgaGlnaGVzdF9zcGVlZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxvbmdoYXVsX3RhYmxlID0ga21hbGxvYygobnVtc2NhbGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoIWxvbmdoYXVsX3RhYmxlKQorCWxvbmdoYXVsX3RhYmxlID0ga21hbGxvYygobnVtc2NhbGVzICsgMSkgKiBzaXplb2YoKmxvbmdoYXVsX3RhYmxlKSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghbG9uZ2hhdWxfdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChqID0gMDsgaiA8IG51bXNjYWxlczsgaisrKSB7Ci0JCXJhdGlvID0gY2xvY2tfcmF0aW9bal07CisJCXJhdGlvID0gbXVsdHNbal07CiAJCWlmIChyYXRpbyA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocmF0aW8gPiBtYXhtdWx0IHx8IHJhdGlvIDwgbWlubXVsdCkKQEAgLTUwNywxMyArNTExLDEwIEBACiAJCQl9CiAJCX0KIAkJaWYgKG1pbl9pICE9IGopIHsKLQkJCXVuc2lnbmVkIGludCB0ZW1wOwotCQkJdGVtcCA9IGxvbmdoYXVsX3RhYmxlW2pdLmZyZXF1ZW5jeTsKLQkJCWxvbmdoYXVsX3RhYmxlW2pdLmZyZXF1ZW5jeSA9IGxvbmdoYXVsX3RhYmxlW21pbl9pXS5mcmVxdWVuY3k7Ci0JCQlsb25naGF1bF90YWJsZVttaW5faV0uZnJlcXVlbmN5ID0gdGVtcDsKLQkJCXRlbXAgPSBsb25naGF1bF90YWJsZVtqXS5pbmRleDsKLQkJCWxvbmdoYXVsX3RhYmxlW2pdLmluZGV4ID0gbG9uZ2hhdWxfdGFibGVbbWluX2ldLmluZGV4OwotCQkJbG9uZ2hhdWxfdGFibGVbbWluX2ldLmluZGV4ID0gdGVtcDsKKwkJCXN3YXAobG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5LAorCQkJICAgICBsb25naGF1bF90YWJsZVttaW5faV0uZnJlcXVlbmN5KTsKKwkJCXN3YXAobG9uZ2hhdWxfdGFibGVbal0uaW5kZXgsCisJCQkgICAgIGxvbmdoYXVsX3RhYmxlW21pbl9pXS5pbmRleCk7CiAJCX0KIAl9CiAKQEAgLTUyMSw3ICs1MjIsNyBAQAogCiAJLyogRmluZCBpbmRleCB3ZSBhcmUgcnVubmluZyBvbiAqLwogCWZvciAoaiA9IDA7IGogPCBrOyBqKyspIHsKLQkJaWYgKGNsb2NrX3JhdGlvW2xvbmdoYXVsX3RhYmxlW2pdLmluZGV4ICYgMHgxZl0gPT0gbXVsdCkgeworCQlpZiAobXVsdHNbbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggJiAweDFmXSA9PSBtdWx0KSB7CiAJCQlsb25naGF1bF9pbmRleCA9IGo7CiAJCQlicmVhazsKIAkJfQpAQCAtNTU5LDIwICs1NjAsMjIgQEAKIAltYXh2aWQgPSB2cm1fbVZfdGFibGVbbG9uZ2hhdWwuYml0cy5NYXhpbXVtVklEXTsKIAogCWlmIChtaW52aWQubVYgPT0gMCB8fCBtYXh2aWQubVYgPT0gMCB8fCBtaW52aWQubVYgPiBtYXh2aWQubVYpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJCb2d1cyB2YWx1ZXMgTWluOiVkLiUwM2QgTWF4OiVkLiUwM2QuICIKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJvZ3VzIHZhbHVlcyBNaW46JWQuJTAzZCBNYXg6JWQuJTAzZC4gIgogCQkJCQkiVm9sdGFnZSBzY2FsaW5nIGRpc2FibGVkLlxuIiwKLQkJCQkJbWludmlkLm1WLzEwMDAsIG1pbnZpZC5tViUxMDAwLCBtYXh2aWQubVYvMTAwMCwgbWF4dmlkLm1WJTEwMDApOworCQkJCQltaW52aWQubVYvMTAwMCwgbWludmlkLm1WJTEwMDAsCisJCQkJCW1heHZpZC5tVi8xMDAwLCBtYXh2aWQubVYlMTAwMCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAobWludmlkLm1WID09IG1heHZpZC5tVikgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkNsYWltcyB0byBzdXBwb3J0IHZvbHRhZ2Ugc2NhbGluZyBidXQgbWluICYgbWF4IGFyZSAiCi0JCQkJImJvdGggJWQuJTAzZC4gVm9sdGFnZSBzY2FsaW5nIGRpc2FibGVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQ2xhaW1zIHRvIHN1cHBvcnQgdm9sdGFnZSBzY2FsaW5nIGJ1dCAiCisJCQkJIm1pbiAmIG1heCBhcmUgYm90aCAlZC4lMDNkLiAiCisJCQkJIlZvbHRhZ2Ugc2NhbGluZyBkaXNhYmxlZFxuIiwKIAkJCQltYXh2aWQubVYvMTAwMCwgbWF4dmlkLm1WJTEwMDApOwogCQlyZXR1cm47CiAJfQogCi0JLyogSG93IG1hbnkgdm9sdGFnZSBzdGVwcyAqLworCS8qIEhvdyBtYW55IHZvbHRhZ2Ugc3RlcHMqLwogCW51bXZzY2FsZXMgPSBtYXh2aWQucG9zIC0gbWludmlkLnBvcyArIDE7CiAJcHJpbnRrKEtFUk5fSU5GTyBQRlgKIAkJIk1heCBWSUQ9JWQuJTAzZCAgIgpAQCAtNTg2LDcgKzU4OSw3IEBACiAJaiA9IGxvbmdoYXVsLmJpdHMuTWluTUh6QlI7CiAJaWYgKGxvbmdoYXVsLmJpdHMuTWluTUh6QlI0KQogCQlqICs9IDE2OwotCW1pbl92aWRfc3BlZWQgPSBlYmxjcl90YWJsZVtqXTsKKwltaW5fdmlkX3NwZWVkID0gZWJsY3Jbal07CiAJaWYgKG1pbl92aWRfc3BlZWQgPT0gLTEpCiAJCXJldHVybjsKIAlzd2l0Y2ggKGxvbmdoYXVsLmJpdHMuTWluTUh6RlNCKSB7CkBAIC02MTcsNyArNjIwLDggQEAKIAkJCXBvcyA9IG1pbnZpZC5wb3M7CiAJCWxvbmdoYXVsX3RhYmxlW2pdLmluZGV4IHw9IG1WX3ZybV90YWJsZVtwb3NdIDw8IDg7CiAJCXZpZCA9IHZybV9tVl90YWJsZVttVl92cm1fdGFibGVbcG9zXV07Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJmOiAlZCBrSHosIGluZGV4OiAlZCwgdmlkOiAlZCBtVlxuIiwgc3BlZWQsIGosIHZpZC5tVik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJmOiAlZCBrSHosIGluZGV4OiAlZCwgdmlkOiAlZCBtVlxuIiwKKwkJCQlzcGVlZCwgaiwgdmlkLm1WKTsKIAkJaisrOwogCX0KIApAQCAtNjQwLDcgKzY0NCw4IEBACiAJdW5zaWduZWQgaW50IGRpciA9IDA7CiAJdTggdmlkLCBjdXJyZW50X3ZpZDsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBsb25naGF1bF90YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmdGFibGVfaW5kZXgpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBsb25naGF1bF90YWJsZSwgdGFyZ2V0X2ZyZXEsCisJCQkJcmVsYXRpb24sICZ0YWJsZV9pbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRG9uJ3Qgc2V0IHNhbWUgZnJlcXVlbmN5IGFnYWluICovCkBAIC02NTYsNyArNjYxLDggQEAKIAkJICogdGhpcyBpbiBoYXJkd2FyZSwgQzMgaXMgb2xkIGFuZCB3ZSBuZWVkIHRvIGRvIHRoaXMKIAkJICogaW4gc29mdHdhcmUuICovCiAJCWkgPSBsb25naGF1bF9pbmRleDsKLQkJY3VycmVudF92aWQgPSAobG9uZ2hhdWxfdGFibGVbbG9uZ2hhdWxfaW5kZXhdLmluZGV4ID4+IDgpICYgMHgxZjsKKwkJY3VycmVudF92aWQgPSAobG9uZ2hhdWxfdGFibGVbbG9uZ2hhdWxfaW5kZXhdLmluZGV4ID4+IDgpOworCQljdXJyZW50X3ZpZCAmPSAweDFmOwogCQlpZiAodGFibGVfaW5kZXggPiBsb25naGF1bF9pbmRleCkKIAkJCWRpciA9IDE7CiAJCXdoaWxlIChpICE9IHRhYmxlX2luZGV4KSB7CkBAIC02OTEsOSArNjk3LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmQ7CiAKLQlpZiAoIGFjcGlfYnVzX2dldF9kZXZpY2Uob2JqX2hhbmRsZSwgJmQpICkgeworCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKG9ial9oYW5kbGUsICZkKSkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJKnJldHVybl92YWx1ZSA9IGFjcGlfZHJpdmVyX2RhdGEoZCk7CiAJcmV0dXJuIDE7CiB9CkBAIC03NTAsNyArNzU2LDcgQEAKIAkvKiBGaW5kIFZUODIzNSBzb3V0aGJyaWRnZSAqLwogCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCBOVUxMKTsKIAlpZiAoZGV2ID09IE5VTEwpCi0JLyogRmluZCBWVDgyMzcgc291dGhicmlkZ2UgKi8KKwkJLyogRmluZCBWVDgyMzcgc291dGhicmlkZ2UgKi8KIAkJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsCiAJCQkJICAgICBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LCBOVUxMKTsKIAlpZiAoZGV2ICE9IE5VTEwpIHsKQEAgLTc2OSw3ICs3NzUsOCBAQAogCQlpZiAocGNpX2NtZCAmIDEgPDwgNykgewogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg4OCwgJmFjcGlfcmVnc19hZGRyKTsKIAkJCWFjcGlfcmVnc19hZGRyICY9IDB4ZmYwMDsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJBQ1BJIEkvTyBhdCAweCV4XG4iLCBhY3BpX3JlZ3NfYWRkcik7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUNQSSBJL08gYXQgMHgleFxuIiwKKwkJCQkJYWNwaV9yZWdzX2FkZHIpOwogCQl9CiAKIAkJcGNpX2Rldl9wdXQoZGV2KTsKQEAgLTc4MSw3ICs3ODgsNyBAQAogc3RhdGljIGludCBfX2luaXQgbG9uZ2hhdWxfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwotCWNoYXIgKmNwdW5hbWU9TlVMTDsKKwljaGFyICpjcHVuYW1lID0gTlVMTDsKIAlpbnQgcmV0OwogCXUzMiBsbywgaGk7CiAKQEAgLTc5MSw4ICs3OTgsOCBAQAogCQljcHVfbW9kZWwgPSBDUFVfU0FNVUVMOwogCQljcHVuYW1lID0gIkMzICdTYW11ZWwnIFtDNUFdIjsKIAkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7Ci0JCW1lbWNweSAoY2xvY2tfcmF0aW8sIHNhbXVlbDFfY2xvY2tfcmF0aW8sIHNpemVvZihzYW11ZWwxX2Nsb2NrX3JhdGlvKSk7Ci0JCW1lbWNweSAoZWJsY3JfdGFibGUsIHNhbXVlbDFfZWJsY3IsIHNpemVvZihzYW11ZWwxX2VibGNyKSk7CisJCW1lbWNweShtdWx0cywgc2FtdWVsMV9tdWx0cywgc2l6ZW9mKHNhbXVlbDFfbXVsdHMpKTsKKwkJbWVtY3B5KGVibGNyLCBzYW11ZWwxX2VibGNyLCBzaXplb2Yoc2FtdWVsMV9lYmxjcikpOwogCQlicmVhazsKIAogCWNhc2UgNzoKQEAgLTgwMywxMCArODEwLDggQEAKIAkJCWNwdW5hbWUgPSAiQzMgJ1NhbXVlbCAyJyBbQzVCXSI7CiAJCQkvKiBOb3RlLCB0aGlzIGlzIG5vdCBhIHR5cG8sIGVhcmx5IFNhbXVlbDIncyBoYWQKIAkJCSAqIFNhbXVlbDEgcmF0aW9zLiAqLwotCQkJbWVtY3B5KGNsb2NrX3JhdGlvLCBzYW11ZWwxX2Nsb2NrX3JhdGlvLAotCQkJCXNpemVvZihzYW11ZWwxX2Nsb2NrX3JhdGlvKSk7Ci0JCQltZW1jcHkoZWJsY3JfdGFibGUsIHNhbXVlbDJfZWJsY3IsCi0JCQkJc2l6ZW9mKHNhbXVlbDJfZWJsY3IpKTsKKwkJCW1lbWNweShtdWx0cywgc2FtdWVsMV9tdWx0cywgc2l6ZW9mKHNhbXVlbDFfbXVsdHMpKTsKKwkJCW1lbWNweShlYmxjciwgc2FtdWVsMl9lYmxjciwgc2l6ZW9mKHNhbXVlbDJfZWJsY3IpKTsKIAkJCWJyZWFrOwogCQljYXNlIDEgLi4uIDE1OgogCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7CkBAIC04MTcsMTAgKzgyMiw4IEBACiAJCQkJY3B1X21vZGVsID0gQ1BVX0VaUkE7CiAJCQkJY3B1bmFtZSA9ICJDMyAnRXpyYScgW0M1Q10iOwogCQkJfQotCQkJbWVtY3B5KGNsb2NrX3JhdGlvLCBlenJhX2Nsb2NrX3JhdGlvLAotCQkJCXNpemVvZihlenJhX2Nsb2NrX3JhdGlvKSk7Ci0JCQltZW1jcHkoZWJsY3JfdGFibGUsIGV6cmFfZWJsY3IsCi0JCQkJc2l6ZW9mKGV6cmFfZWJsY3IpKTsKKwkJCW1lbWNweShtdWx0cywgZXpyYV9tdWx0cywgc2l6ZW9mKGV6cmFfbXVsdHMpKTsKKwkJCW1lbWNweShlYmxjciwgZXpyYV9lYmxjciwgc2l6ZW9mKGV6cmFfZWJsY3IpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtODI5LDE4ICs4MzIsMTYgQEAKIAkJY3B1X21vZGVsID0gQ1BVX0VaUkFfVDsKIAkJY3B1bmFtZSA9ICJDMyAnRXpyYS1UJyBbQzVNXSI7CiAJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX1BPV0VSU0FWRVI7Ci0JCW51bXNjYWxlcz0zMjsKLQkJbWVtY3B5IChjbG9ja19yYXRpbywgZXpyYXRfY2xvY2tfcmF0aW8sIHNpemVvZihlenJhdF9jbG9ja19yYXRpbykpOwotCQltZW1jcHkgKGVibGNyX3RhYmxlLCBlenJhdF9lYmxjciwgc2l6ZW9mKGV6cmF0X2VibGNyKSk7CisJCW51bXNjYWxlcyA9IDMyOworCQltZW1jcHkobXVsdHMsIGV6cmF0X211bHRzLCBzaXplb2YoZXpyYXRfbXVsdHMpKTsKKwkJbWVtY3B5KGVibGNyLCBlenJhdF9lYmxjciwgc2l6ZW9mKGV6cmF0X2VibGNyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSA5OgogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9QT1dFUlNBVkVSOwogCQludW1zY2FsZXMgPSAzMjsKLQkJbWVtY3B5KGNsb2NrX3JhdGlvLAotCQkgICAgICAgbmVoZW1pYWhfY2xvY2tfcmF0aW8sCi0JCSAgICAgICBzaXplb2YobmVoZW1pYWhfY2xvY2tfcmF0aW8pKTsKLQkJbWVtY3B5KGVibGNyX3RhYmxlLCBuZWhlbWlhaF9lYmxjciwgc2l6ZW9mKG5laGVtaWFoX2VibGNyKSk7CisJCW1lbWNweShtdWx0cywgbmVoZW1pYWhfbXVsdHMsIHNpemVvZihuZWhlbWlhaF9tdWx0cykpOworCQltZW1jcHkoZWJsY3IsIG5laGVtaWFoX2VibGNyLCBzaXplb2YobmVoZW1pYWhfZWJsY3IpKTsKIAkJc3dpdGNoIChjLT54ODZfbWFzaykgewogCQljYXNlIDAgLi4uIDE6CiAJCQljcHVfbW9kZWwgPSBDUFVfTkVIRU1JQUg7CkBAIC04NjksMTQgKzg3MCwxNCBAQAogCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjE7CiAJfQogCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJWSUEgJXMgQ1BVIGRldGVjdGVkLiAgIiwgY3B1bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlZJQSAlcyBDUFUgZGV0ZWN0ZWQuICAiLCBjcHVuYW1lKTsKIAlzd2l0Y2ggKGxvbmdoYXVsX3ZlcnNpb24pIHsKIAljYXNlIFRZUEVfTE9OR0hBVUxfVjE6CiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YyOgotCQlwcmludGsgKCJMb25naGF1bCB2JWQgc3VwcG9ydGVkLlxuIiwgbG9uZ2hhdWxfdmVyc2lvbik7CisJCXByaW50ayhLRVJOX0NPTlQgIkxvbmdoYXVsIHYlZCBzdXBwb3J0ZWQuXG4iLCBsb25naGF1bF92ZXJzaW9uKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BPV0VSU0FWRVI6Ci0JCXByaW50ayAoIlBvd2Vyc2F2ZXIgc3VwcG9ydGVkLlxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIlBvd2Vyc2F2ZXIgc3VwcG9ydGVkLlxuIik7CiAJCWJyZWFrOwogCX07CiAKQEAgLTk0MCw3ICs5NDEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogbG9uZ2hhdWxfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKmxvbmdoYXVsX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC05NjYsMTMgKzk2NywxNSBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTW9yZSB0aGFuIDEgQ1BVIGRldGVjdGVkLCBsb25naGF1bCBkaXNhYmxlZC5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJNb3JlIHRoYW4gMSBDUFUgZGV0ZWN0ZWQsICIKKwkJCQkibG9uZ2hhdWwgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaWYgKGNwdV9oYXNfYXBpYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBUElDIGRldGVjdGVkLiBMb25naGF1bCBpcyBjdXJyZW50bHkgYnJva2VuIGluIHRoaXMgY29uZmlndXJhdGlvbi5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJBUElDIGRldGVjdGVkLiBMb25naGF1bCBpcyBjdXJyZW50bHkgIgorCQkJCSJicm9rZW4gaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNlbmRpZgpAQCAtOTkzLDggKzk5Niw4IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDsgaSA8IG51bXNjYWxlczsgaSsrKSB7Ci0JCWlmIChjbG9ja19yYXRpb1tpXSA9PSBtYXhtdWx0KSB7CisJZm9yIChpID0gMDsgaSA8IG51bXNjYWxlczsgaSsrKSB7CisJCWlmIChtdWx0c1tpXSA9PSBtYXhtdWx0KSB7CiAJCQlsb25naGF1bF9zZXRzdGF0ZShpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMDA3LDExICsxMDEwLDExIEBACiAvKiBFdmVuIGlmIEJJT1MgaXMgZXhwb3J0aW5nIEFDUEkgQzMgc3RhdGUsIGFuZCBpdCBpcyB1c2VkCiAgKiB3aXRoIHN1Y2Nlc3Mgd2hlbiBDUFUgaXMgaWRsZSwgdGhpcyBzdGF0ZSBkb2Vzbid0CiAgKiB0cmlnZ2VyIGZyZXF1ZW5jeSB0cmFuc2l0aW9uIGluIHNvbWUgY2FzZXMuICovCi1tb2R1bGVfcGFyYW0gKGRpc2FibGVfYWNwaV9jMywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShkaXNhYmxlX2FjcGlfYzMsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfYWNwaV9jMywgIkRvbid0IHVzZSBBQ1BJIEMzIHN1cHBvcnQiKTsKIC8qIENoYW5nZSBDUFUgdm9sdGFnZSB3aXRoIGZyZXF1ZW5jeS4gVmVyeSB1c2VmdWxsIHRvIHNhdmUKICAqIHBvd2VyLCBidXQgbW9zdCBWSUEgQzMgcHJvY2Vzc29ycyBhcmVuJ3Qgc3VwcG9ydGluZyBpdC4gKi8KLW1vZHVsZV9wYXJhbSAoc2NhbGVfdm9sdGFnZSwgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbShzY2FsZV92b2x0YWdlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzY2FsZV92b2x0YWdlLCAiU2NhbGUgdm9sdGFnZSBvZiBwcm9jZXNzb3IiKTsKIC8qIEZvcmNlIHJldmlzaW9uIGtleSB0byAwIGZvciBwcm9jZXNzb3JzIHdoaWNoIGRvZXNuJ3QKICAqIHN1cHBvcnQgdm9sdGFnZSBzY2FsaW5nLCBidXQgYXJlIGludHJvZHVjaW5nIGl0c2VsZiBhcwpAQCAtMTAxOSw5ICsxMDIyLDkgQEAKIG1vZHVsZV9wYXJhbShyZXZpZF9lcnJhdGEsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJldmlkX2VycmF0YSwgIklnbm9yZSBDUFUgUmV2aXNpb24gSUQiKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJMb25naGF1bCBkcml2ZXIgZm9yIFZJQSBDeXJpeCBwcm9jZXNzb3JzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIGxhdGVfaW5pdGNhbGwobG9uZ2hhdWxfaW5pdCk7CiBtb2R1bGVfZXhpdChsb25naGF1bF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKaW5kZXggNGZjYzMyMC4uZTIzNjBhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmgKQEAgLTQ5LDE0ICs0OSwxNCBAQAogCiAvKgogICogQ2xvY2sgcmF0aW8gdGFibGVzLiBEaXYvTW9kIGJ5IDEwIHRvIGdldCByYXRpby4KLSAqIFRoZSBlYmxjciBvbmVzIHNwZWNpZnkgdGhlIHJhdGlvIHJlYWQgZnJvbSB0aGUgQ1BVLgotICogVGhlIGNsb2NrX3JhdGlvIG9uZXMgc3BlY2lmeSB3aGF0IHRvIHdyaXRlIHRvIHRoZSBDUFUuCisgKiBUaGUgZWJsY3IgdmFsdWVzIHNwZWNpZnkgdGhlIHJhdGlvIHJlYWQgZnJvbSB0aGUgQ1BVLgorICogVGhlIG11bHRzIHZhbHVlcyBzcGVjaWZ5IHdoYXQgdG8gd3JpdGUgdG8gdGhlIENQVS4KICAqLwogCiAvKgogICogVklBIEMzIFNhbXVlbCAxICAmIFNhbXVlbCAyIChzdGVwcGluZyAwKQogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgc2FtdWVsMV9jbG9ja19yYXRpb1sxNl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgc2FtdWVsMV9tdWx0c1sxNl0gPSB7CiAJLTEsIC8qIDAwMDAgLT4gUkVTRVJWRUQgKi8KIAkzMCwgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAvKiAwMDEwIC0+ICA0LjB4ICovCkBAIC0xMTksNyArMTE5LDcgQEAKIC8qCiAgKiBWSUEgQzMgRXpyYQogICovCi1zdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYV9jbG9ja19yYXRpb1sxNl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYV9tdWx0c1sxNl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJMzAsICAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCkBAIC0xNjAsNyArMTYwLDcgQEAKIC8qCiAgKiBWSUEgQzMgKEV6cmEtVCkgW0M1TV0uCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhdF9jbG9ja19yYXRpb1szMl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZXpyYXRfbXVsdHNbMzJdID0gewogCTEwMCwgLyogMDAwMCAtPiAxMC4weCAqLwogCTMwLCAgLyogMDAwMSAtPiAgMy4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpAQCAtMjM1LDcgKzIzNSw3IEBACiAvKgogICogVklBIEMzIE5laGVtaWFoICovCiAKLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSAgbmVoZW1pYWhfY2xvY2tfcmF0aW9bMzJdID0geworc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhICBuZWhlbWlhaF9tdWx0c1szMl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJLTEsIC8qIDAwMDEgLT4gMTYuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCmluZGV4IDc3N2E3ZmYuLmRhNWY3MGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwpAQCAtMTEsMTIgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAibG9uZ3J1biIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJsb25ncnVuIiwgbXNnKQogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyCWxvbmdydW5fZHJpdmVyOwogCkBAIC01MSw3ICs1Miw3IEBACiAJbXNyX2xvICY9IDB4MDAwMDAwN0Y7CiAJbXNyX2hpICY9IDB4MDAwMDAwN0Y7CiAKLQlpZiAoIGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEgKSB7CisJaWYgKGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEpIHsKIAkJLyogQXNzdW1lIGRlZ2VuZXJhdGUgTG9uZ3J1biB0YWJsZSAqLwogCQlwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gbG9uZ3J1bl9oaWdoX2ZyZXE7CiAJfSBlbHNlIHsKQEAgLTc5LDcgKzgwLDcgQEAKIAlpZiAoIXBvbGljeSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEgKSB7CisJaWYgKGxvbmdydW5faGlnaF9mcmVxIDw9IGxvbmdydW5fbG93X2ZyZXEpIHsKIAkJLyogQXNzdW1lIGRlZ2VuZXJhdGUgTG9uZ3J1biB0YWJsZSAqLwogCQlwY3RnX2xvID0gcGN0Z19oaSA9IDEwMDsKIAl9IGVsc2UgewpAQCAtMTUyLDcgKzE1Myw3IEBACiAJY3B1aWQoMHg4MDg2MDAwNywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CiAJZHByaW50aygiY3B1aWQgZWF4IGlzICV1XG4iLCBlYXgpOwogCi0JcmV0dXJuIChlYXggKiAxMDAwKTsKKwlyZXR1cm4gZWF4ICogMTAwMDsKIH0KIAogLyoqCkBAIC0xOTYsNyArMTk3LDggQEAKIAkJcmRtc3IoTVNSX1RNVEFfTFJUSV9WT0xUX01IWiwgbXNyX2xvLCBtc3JfaGkpOwogCQkqaGlnaF9mcmVxID0gbXNyX2xvICogMTAwMDsgLyogdG8ga0h6ICovCiAKLQkJZHByaW50aygibG9uZ3J1biB0YWJsZSBpbnRlcmZhY2UgdG9sZCAldSAtICV1IGtIelxuIiwgKmxvd19mcmVxLCAqaGlnaF9mcmVxKTsKKwkJZHByaW50aygibG9uZ3J1biB0YWJsZSBpbnRlcmZhY2UgdG9sZCAldSAtICV1IGtIelxuIiwKKwkJCQkqbG93X2ZyZXEsICpoaWdoX2ZyZXEpOwogCiAJCWlmICgqbG93X2ZyZXEgPiAqaGlnaF9mcmVxKQogCQkJKmxvd19mcmVxID0gKmhpZ2hfZnJlcTsKQEAgLTIxOSw3ICsyMjEsNyBAQAogCWNwdWlkKDB4ODA4NjAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCS8qIHRyeSBkZWNyZWFzaW5nIGluIDEwJSBzdGVwcywgc29tZSBwcm9jZXNzb3JzIHJlYWN0IG9ubHkKIAkgKiBvbiBzb21lIGJhcnJpZXIgdmFsdWVzICovCi0JZm9yICh0cnlfaGkgPSA4MDsgdHJ5X2hpID4gMCAmJiBlY3ggPiA5MDsgdHJ5X2hpIC09MTApIHsKKwlmb3IgKHRyeV9oaSA9IDgwOyB0cnlfaGkgPiAwICYmIGVjeCA+IDkwOyB0cnlfaGkgLT0gMTApIHsKIAkJLyogc2V0IHRvIDAgdG8gdHJ5X2hpIHBlcmZfcGN0ZyAqLwogCQltc3JfbG8gJj0gMHhGRkZGRkY4MDsKIAkJbXNyX2hpICY9IDB4RkZGRkZGODA7CkBAIC0yMzYsNyArMjM4LDcgQEAKIAogCS8qIHBlcmZvcm1hbmNlX3BjdGcgPSAoY3VycmVudF9mcmVxIC0gbG93X2ZyZXEpLyhoaWdoX2ZyZXEgLSBsb3dfZnJlcSkKIAkgKiBlcWFscwotCSAqIGxvd19mcmVxICogKCAxIC0gcGVyZl9wY3RnKSA9IChjdXJfZnJlcSAtIGhpZ2hfZnJlcSAqIHBlcmZfcGN0ZykKKwkgKiBsb3dfZnJlcSAqICgxIC0gcGVyZl9wY3RnKSA9IChjdXJfZnJlcSAtIGhpZ2hfZnJlcSAqIHBlcmZfcGN0ZykKIAkgKgogCSAqIGhpZ2hfZnJlcSAqIHBlcmZfcGN0ZyBpcyBzdG9yZWQgdGVtcG9hcmlseSBpbnRvICJlYngiLgogCSAqLwpAQCAtMzE3LDkgKzMxOSwxMCBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJMb25nUnVuIGRyaXZlciBmb3IgVHJhbnNtZXRhIENydXNvZSBhbmQgRWZmaWNlb24gcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxvbmdSdW4gZHJpdmVyIGZvciBUcmFuc21ldGEgQ3J1c29lIGFuZCAiCisJCSJFZmZpY2VvbiBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChsb25ncnVuX2luaXQpOwogbW9kdWxlX2V4aXQobG9uZ3J1bl9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKaW5kZXggMzE3OGMzYS4uNDFlZDk0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKQEAgLTI3LDE1ICsyNywxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgogCiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCiAjZGVmaW5lIFBGWAkicDQtY2xvY2ttb2Q6ICIKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAicDQtY2xvY2ttb2QiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkicDQtY2xvY2ttb2QiLCBtc2cpCiAKIC8qCiAgKiBEdXR5IEN5Y2xlICgzYml0cyksIG5vdGUgRENfRElTQUJMRSBpcyBub3Qgc3BlY2lmaWVkIGluCkBAIC01OCw3ICs2MCw4IEBACiB7CiAJdTMyIGwsIGg7CiAKLQlpZiAoIWNwdV9vbmxpbmUoY3B1KSB8fCAobmV3c3RhdGUgPiBEQ19ESVNBQkxFKSB8fCAobmV3c3RhdGUgPT0gRENfUkVTVikpCisJaWYgKCFjcHVfb25saW5lKGNwdSkgfHwKKwkgICAgKG5ld3N0YXRlID4gRENfRElTQUJMRSkgfHwgKG5ld3N0YXRlID09IERDX1JFU1YpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgJmwsICZoKTsKQEAgLTY2LDcgKzY5LDggQEAKIAlpZiAobCAmIDB4MDEpCiAJCWRwcmludGsoIkNQVSMlZCBjdXJyZW50bHkgdGhlcm1hbCB0aHJvdHRsZWRcbiIsIGNwdSk7CiAKLQlpZiAoaGFzX040NF9PMTdfZXJyYXRhW2NwdV0gJiYgKG5ld3N0YXRlID09IERDXzI1UFQgfHwgbmV3c3RhdGUgPT0gRENfREZMVCkpCisJaWYgKGhhc19ONDRfTzE3X2VycmF0YVtjcHVdICYmCisJICAgIChuZXdzdGF0ZSA9PSBEQ18yNVBUIHx8IG5ld3N0YXRlID09IERDX0RGTFQpKQogCQluZXdzdGF0ZSA9IERDXzM4UFQ7CiAKIAlyZG1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9DT05UUk9MLCAmbCwgJmgpOwpAQCAtMTEyLDcgKzExNiw4IEBACiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJaW50IGk7CiAKLQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnA0Y2xvY2ttb2RfdGFibGVbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnA0Y2xvY2ttb2RfdGFibGVbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZyZXFzLm9sZCA9IGNwdWZyZXFfcDRfZ2V0KHBvbGljeS0+Y3B1KTsKQEAgLTEyNyw3ICsxMzIsOCBAQAogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCX0KIAotCS8qIHJ1biBvbiBlYWNoIGxvZ2ljYWwgQ1BVLCBzZWUgc2VjdGlvbiAxMy4xNS4zIG9mIElBMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlCisJLyogcnVuIG9uIGVhY2ggbG9naWNhbCBDUFUsCisJICogc2VlIHNlY3Rpb24gMTMuMTUuMyBvZiBJQTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZQogCSAqIERldmVsb3BlcidzIE1hbnVhbCwgVm9sdW1lIDMKIAkgKi8KIAlmb3JfZWFjaF9jcHUoaSwgcG9saWN5LT5jcHVzKQpAQCAtMTUzLDI4ICsxNTksMzAgQEAKIHsKIAlpZiAoYy0+eDg2ID09IDB4MDYpIHsKIAkJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBFU1QtY2FwYWJsZSBDUFUgZGV0ZWN0ZWQuICIKLQkJCSAgICAgICAiVGhlIGFjcGktY3B1ZnJlcSBtb2R1bGUgb2ZmZXJzIHZvbHRhZ2Ugc2NhbGluZyIKLQkJCSAgICAgICAiIGluIGFkZGl0aW9uIG9mIGZyZXF1ZW5jeSBzY2FsaW5nLiBZb3Ugc2hvdWxkIHVzZSAiCi0JCQkgICAgICAgInRoYXQgaW5zdGVhZCBvZiBwNC1jbG9ja21vZCwgaWYgcG9zc2libGUuXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBFU1QtY2FwYWJsZSBDUFUgIgorCQkJICAgICAgICJkZXRlY3RlZC4gVGhlIGFjcGktY3B1ZnJlcSBtb2R1bGUgb2ZmZXJzICIKKwkJCSAgICAgICAidm9sdGFnZSBzY2FsaW5nIGluIGFkZGl0aW9uIG9mIGZyZXF1ZW5jeSAiCisJCQkgICAgICAgInNjYWxpbmcuIFlvdSBzaG91bGQgdXNlIHRoYXQgaW5zdGVhZCBvZiAiCisJCQkgICAgICAgInA0LWNsb2NrbW9kLCBpZiBwb3NzaWJsZS5cbiIpOwogCQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCQljYXNlIDB4MEU6IC8qIENvcmUgKi8KIAkJY2FzZSAweDBGOiAvKiBDb3JlIER1byAqLwogCQljYXNlIDB4MTY6IC8qIENlbGVyb24gQ29yZSAqLwogCQkJcDRjbG9ja21vZF9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKLQkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koU1BFRURTVEVQX1BST0NFU1NPUl9QQ09SRSk7CisJCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QQ09SRSk7CiAJCWNhc2UgMHgwRDogLyogUGVudGl1bSBNIChEb3RoYW4pICovCiAJCQlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgMHgwOTogLyogUGVudGl1bSBNIChCYW5pYXMpICovCi0JCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUE0pOworCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUE0pOwogCQl9CiAJfQogCiAJaWYgKGMtPng4NiAhPSAweEYpIHsKIAkJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5rbm93biBwNC1jbG9ja21vZC1jYXBhYmxlIENQVS4gIgotCQkJCSJQbGVhc2Ugc2VuZCBhbiBlLW1haWwgdG8gPGNwdWZyZXFAdmdlci5rZXJuZWwub3JnPlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5rbm93biBDUFUuICIKKwkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvICIKKwkJCQkiPGNwdWZyZXFAdmdlci5rZXJuZWwub3JnPlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTgyLDE2ICsxOTAsMTYgQEAKIAkgKiB0aHJvdHRsaW5nIGlzIGFjdGl2ZSBvciBub3QuICovCiAJcDRjbG9ja21vZF9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKIAotCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNKSB7CisJaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX0NQVV9QNE0pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IFBlbnRpdW0gNC1NIGRldGVjdGVkLiAiCiAJCSAgICAgICAiVGhlIHNwZWVkc3RlcC1pY2ggb3IgYWNwaSBjcHVmcmVxIG1vZHVsZXMgb2ZmZXIgIgogCQkgICAgICAgInZvbHRhZ2Ugc2NhbGluZyBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgc2NhbGluZy4gIgogCQkgICAgICAgIllvdSBzaG91bGQgdXNlIGVpdGhlciBvbmUgaW5zdGVhZCBvZiBwNC1jbG9ja21vZCwgIgogCQkgICAgICAgImlmIHBvc3NpYmxlLlxuIik7Ci0JCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koU1BFRURTVEVQX1BST0NFU1NPUl9QNE0pOworCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QNE0pOwogCX0KIAotCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koU1BFRURTVEVQX1BST0NFU1NPUl9QNEQpOworCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1A0RCk7CiB9CiAKIApAQCAtMjE3LDE0ICsyMjUsMjAgQEAKIAkJZHByaW50aygiaGFzIGVycmF0YSAtLSBkaXNhYmxpbmcgbG93IGZyZXF1ZW5jaWVzXG4iKTsKIAl9CiAKKwlpZiAoc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKSA9PSBTUEVFRFNURVBfQ1BVX1A0RCAmJgorCSAgICBjLT54ODZfbW9kZWwgPCAyKSB7CisJCS8qIHN3aXRjaCB0byBtYXhpbXVtIGZyZXF1ZW5jeSBhbmQgbWVhc3VyZSByZXN1bHQgKi8KKwkJY3B1ZnJlcV9wNF9zZXRkYyhwb2xpY3ktPmNwdSwgRENfRElTQUJMRSk7CisJCXJlY2FsaWJyYXRlX2NwdV9raHooKTsKKwl9CiAJLyogZ2V0IG1heCBmcmVxdWVuY3kgKi8KIAlzdG9ja19mcmVxID0gY3B1ZnJlcV9wNF9nZXRfZnJlcXVlbmN5KGMpOwogCWlmICghc3RvY2tfZnJlcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiB0YWJsZSBpbml0ICovCi0JZm9yIChpPTE7IChwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewotCQlpZiAoKGk8MikgJiYgKGhhc19ONDRfTzE3X2VycmF0YVtwb2xpY3ktPmNwdV0pKQorCWZvciAoaSA9IDE7IChwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCQlpZiAoKGkgPCAyKSAmJiAoaGFzX040NF9PMTdfZXJyYXRhW3BvbGljeS0+Y3B1XSkpCiAJCQlwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKIAkJZWxzZQogCQkJcDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSAoc3RvY2tfZnJlcSAqIGkpLzg7CkBAIC0yMzIsNyArMjQ2LDEwIEBACiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIocDRjbG9ja21vZF90YWJsZSwgcG9saWN5LT5jcHUpOwogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCi0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDA7IC8qIGFzc3VtZWQgKi8KKworCS8qIHRoZSB0cmFuc2l0aW9uIGxhdGVuY3kgaXMgc2V0IHRvIGJlIDEgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0KKwkgKiB0cmFuc2l0aW9uIGxhdGVuY3kgb2YgdGhlIG9uZGVtYW5kIGdvdmVybm9yICovCisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDAxOwogCXBvbGljeS0+Y3VyID0gc3RvY2tfZnJlcTsKIAogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgJnA0Y2xvY2ttb2RfdGFibGVbMF0pOwpAQCAtMjU4LDEyICsyNzUsMTIgQEAKIAkJbCA9IERDX0RJU0FCTEU7CiAKIAlpZiAobCAhPSBEQ19ESVNBQkxFKQotCQlyZXR1cm4gKHN0b2NrX2ZyZXEgKiBsIC8gOCk7CisJCXJldHVybiBzdG9ja19mcmVxICogbCAvIDg7CiAKIAlyZXR1cm4gc3RvY2tfZnJlcTsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHA0Y2xvY2ttb2RfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnA0Y2xvY2ttb2RfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTI5OCw5ICszMTUsMTAgQEAKIAogCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwNGNsb2NrbW9kX2RyaXZlcik7CiAJaWYgKCFyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQNC9YZW9uKFRNKSBDUFUgT24tRGVtYW5kIENsb2NrIE1vZHVsYXRpb24gYXZhaWxhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlA0L1hlb24oVE0pIENQVSBPbi1EZW1hbmQgQ2xvY2sgIgorCQkJCSJNb2R1bGF0aW9uIGF2YWlsYWJsZVxuIik7CiAKLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0zMTAsOSArMzI4LDkgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiWndhbmUgTXdhaWthbWJvIDx6d2FuZUBjb21tZmlyZXNlcnZpY2VzLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoImNwdWZyZXEgZHJpdmVyIGZvciBQZW50aXVtKFRNKSA0L1hlb24oVE0pIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiWndhbmUgTXdhaWthbWJvIDx6d2FuZUBjb21tZmlyZXNlcnZpY2VzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiY3B1ZnJlcSBkcml2ZXIgZm9yIFBlbnRpdW0oVE0pIDQvWGVvbihUTSkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbGF0ZV9pbml0Y2FsbChjcHVmcmVxX3A0X2luaXQpOwogbW9kdWxlX2V4aXQoY3B1ZnJlcV9wNF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKaW5kZXggYzFhYzU3OS4uZjEwZGVhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogIFRoaXMgZmlsZSB3YXMgYmFzZWQgdXBvbiBjb2RlIGluIFBvd2VydHdlYWsgTGludXggKGh0dHA6Ly9wb3dlcnR3ZWFrLnNmLm5ldCkKLSAqICAoQykgMjAwMC0yMDAzICBEYXZlIEpvbmVzLCBBcmphbiB2YW4gZGUgVmVuLCBKYW5uZSBQw6Rua8OkbMOkLCBEb21pbmlrIEJyb2Rvd3NraS4KKyAqICAoQykgMjAwMC0yMDAzICBEYXZlIEpvbmVzLCBBcmphbiB2YW4gZGUgVmVuLCBKYW5uZSBQw6Rua8OkbMOkLAorICogICAgICAgICAgICAgICAgIERvbWluaWsgQnJvZG93c2tpLgogICoKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKgpAQCAtMTMsMTQgKzE0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKKyNpbmNsdWRlIDxhc20vbXNyLmg+CisKICNkZWZpbmUgUE9XRVJOT1dfSU9QT1JUIDB4ZmZmMCAgICAgICAgICAvKiBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSwgYXMgbG9uZwogCQkJCQkgICBhcyBpdCBpcyB1bnVzZWQgKi8KIAorI2RlZmluZSBQRlggInBvd2Vybm93LWs2OiAiCiBzdGF0aWMgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgYnVzZnJlcTsgICAvKiBGU0IsIGluIDEwIGtIeiAqLwogc3RhdGljIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIG1heF9tdWx0aXBsaWVyOwogCkBAIC00Nyw4ICs0OSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgcG93ZXJub3dfazZfZ2V0X2NwdV9tdWx0aXBsaWVyKHZvaWQpCiB7Ci0JdTY0ICAgICAgICAgICAgIGludmFsdWUgPSAwOwotCXUzMiAgICAgICAgICAgICBtc3J2YWw7CisJdTY0IGludmFsdWUgPSAwOworCXUzMiBtc3J2YWw7CiAKIAltc3J2YWwgPSBQT1dFUk5PV19JT1BPUlQgKyAweDE7CiAJd3Jtc3IoTVNSX0s2X0VQTVIsIG1zcnZhbCwgMCk7IC8qIGVuYWJsZSB0aGUgUG93ZXJOb3cgcG9ydCAqLwpAQCAtNjgsMTIgKzcwLDEyIEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s2X3NldF9zdGF0ZSh1bnNpZ25lZCBpbnQgYmVzdF9pKQogewotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIG91dHZhbHVlID0gMCwgaW52YWx1ZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgbXNydmFsOwotCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICAgIGZyZXFzOworCXVuc2lnbmVkIGxvbmcgb3V0dmFsdWUgPSAwLCBpbnZhbHVlID0gMDsKKwl1bnNpZ25lZCBsb25nIG1zcnZhbDsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAogCWlmIChjbG9ja19yYXRpb1tiZXN0X2ldLmluZGV4ID4gbWF4X211bHRpcGxpZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBpbnZhbGlkIHRhcmdldCBmcmVxdWVuY3lcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIHRhcmdldCBmcmVxdWVuY3lcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTksNyArMTIxLDggQEAKICAqIHBvd2Vybm93X2s2X3NldHBvbGljeSAtIHNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqIEBwb2xpY3k6IG5ldyBwb2xpY3kKICAqIEB0YXJnZXRfZnJlcTogdGhlIHRhcmdldCBmcmVxdWVuY3kKLSAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5IChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQorICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kKKyAqICAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKICAqCiAgKiBzZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5CiAgKi8KQEAgLTEyNyw5ICsxMzAsMTAgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewotCXVuc2lnbmVkIGludCAgICBuZXdzdGF0ZSA9IDA7CisJdW5zaWduZWQgaW50IG5ld3N0YXRlID0gMDsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmY2xvY2tfcmF0aW9bMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmNsb2NrX3JhdGlvWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwb3dlcm5vd19rNl9zZXRfc3RhdGUobmV3c3RhdGUpOwpAQCAtMTQwLDcgKzE0NCw3IEBACiAKIHN0YXRpYyBpbnQgcG93ZXJub3dfazZfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGksIGY7CiAJaW50IHJlc3VsdDsKIAogCWlmIChwb2xpY3ktPmNwdSAhPSAwKQpAQCAtMTUyLDEwICsxNTYsMTEgQEAKIAogCS8qIHRhYmxlIGluaXQgKi8KIAlmb3IgKGkgPSAwOyAoY2xvY2tfcmF0aW9baV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7Ci0JCWlmIChjbG9ja19yYXRpb1tpXS5pbmRleCA+IG1heF9tdWx0aXBsaWVyKQorCQlmID0gY2xvY2tfcmF0aW9baV0uaW5kZXg7CisJCWlmIChmID4gbWF4X211bHRpcGxpZXIpCiAJCQljbG9ja19yYXRpb1tpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CiAJCWVsc2UKLQkJCWNsb2NrX3JhdGlvW2ldLmZyZXF1ZW5jeSA9IGJ1c2ZyZXEgKiBjbG9ja19yYXRpb1tpXS5pbmRleDsKKwkJCWNsb2NrX3JhdGlvW2ldLmZyZXF1ZW5jeSA9IGJ1c2ZyZXEgKiBmOwogCX0KIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMTg1LDcgKzE5MCw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG93ZXJub3dfazZfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JcmV0dXJuIGJ1c2ZyZXEgKiBwb3dlcm5vd19rNl9nZXRfY3B1X211bHRpcGxpZXIoKTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCXJldCA9IChidXNmcmVxICogcG93ZXJub3dfazZfZ2V0X2NwdV9tdWx0aXBsaWVyKCkpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpwb3dlcm5vd19rNl9hdHRyW10gPSB7CkBAIC0yMjEsNyArMjI4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKFBPV0VSTk9XX0lPUE9SVCwgMTYsICJQb3dlck5vdyEiKSkgewotCQlwcmludGsoImNwdWZyZXE6IFBvd2VyTm93IElPUE9SVCByZWdpb24gYWxyZWFkeSB1c2VkLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJQb3dlck5vdyBJT1BPUlQgcmVnaW9uIGFscmVhZHkgdXNlZC5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI0Niw3ICsyNTMsOCBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4sIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuLCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgIgorCQkiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlck5vdyEgZHJpdmVyIGZvciBBTUQgSzYtMisgLyBLNi0zKyBwcm9jZXNzb3JzLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCmluZGV4IDFiNDQ2ZDcuLjNjMjhjY2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCkBAIC02LDEwICs2LDEyIEBACiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgogICogIEJhc2VkIHVwb24gZGF0YXNoZWV0cyAmIHNhbXBsZSBDUFVzIGtpbmRseSBwcm92aWRlZCBieSBBTUQuCiAgKgotICogRXJyYXRhIDU6IFByb2Nlc3NvciBtYXkgZmFpbCB0byBleGVjdXRlIGEgRklEL1ZJRCBjaGFuZ2UgaW4gcHJlc2VuY2Ugb2YgaW50ZXJydXB0LgotICogLSBXZSBjbGkvc3RpIG9uIHN0ZXBwaW5nIEEwIENQVXMgYXJvdW5kIHRoZSBGSUQvVklEIHRyYW5zaXRpb24uCi0gKiBFcnJhdGEgMTU6IFByb2Nlc3NvcnMgd2l0aCBoYWxmIGZyZXF1ZW5jeSBtdWx0aXBsaWVycyBtYXkgaGFuZyB1cG9uIHdha2V1cCBmcm9tIGRpc2Nvbm5lY3QuCi0gKiAtIFdlIGRpc2FibGUgaGFsZiBtdWx0aXBsaWVycyBpZiBBQ1BJIGlzIHVzZWQgb24gQTAgc3RlcHBpbmcgQ1BVcy4KKyAqIEVycmF0YSA1OgorICogIENQVSBtYXkgZmFpbCB0byBleGVjdXRlIGEgRklEL1ZJRCBjaGFuZ2UgaW4gcHJlc2VuY2Ugb2YgaW50ZXJydXB0LgorICogIC0gV2UgY2xpL3N0aSBvbiBzdGVwcGluZyBBMCBDUFVzIGFyb3VuZCB0aGUgRklEL1ZJRCB0cmFuc2l0aW9uLgorICogRXJyYXRhIDE1OgorICogIENQVSB3aXRoIGhhbGYgZnJlcXVlbmN5IG11bHRpcGxpZXJzIG1heSBoYW5nIHVwb24gd2FrZXVwIGZyb20gZGlzY29ubmVjdC4KKyAqICAtIFdlIGRpc2FibGUgaGFsZiBtdWx0aXBsaWVycyBpZiBBQ1BJIGlzIHVzZWQgb24gQTAgc3RlcHBpbmcgQ1BVcy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMCwxMSArMjIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CQkvKiBOZWVkZWQgZm9yIHJlY2FsaWJyYXRlX2NwdV9raHooKSAqLwogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s3X0FDUEkKQEAgLTU4LDkgKzYwLDkgQEAKIHVuaW9uIHBvd2Vybm93X2FjcGlfY29udHJvbF90IHsKIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCBsb25nIGZpZDo1LAotCQl2aWQ6NSwKLQkJc2d0YzoyMCwKLQkJcmVzMToyOworCQkJdmlkOjUsCisJCQlzZ3RjOjIwLAorCQkJcmVzMToyOwogCX0gYml0czsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIH07CkBAIC05NCwxNCArOTYsMTUgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBjYW5fc2NhbGVfYnVzOwogc3RhdGljIHVuc2lnbmVkIGludCBjYW5fc2NhbGVfdmlkOwotc3RhdGljIHVuc2lnbmVkIGludCBtaW5pbXVtX3NwZWVkPS0xOworc3RhdGljIHVuc2lnbmVkIGludCBtaW5pbXVtX3NwZWVkID0gLTE7CiBzdGF0aWMgdW5zaWduZWQgaW50IG1heGltdW1fc3BlZWQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IG51bWJlcl9zY2FsZXM7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZzYjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeTsKIHN0YXRpYyBjaGFyIGhhdmVfYTA7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAicG93ZXJub3ctazciLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkicG93ZXJub3ctazciLCBtc2cpCiAKIHN0YXRpYyBpbnQgY2hlY2tfZnNiKHVuc2lnbmVkIGludCBmc2JzcGVlZCkKIHsKQEAgLTEwOSw3ICsxMTIsNyBAQAogCXVuc2lnbmVkIGludCBmID0gZnNiIC8gMTAwMDsKIAogCWRlbHRhID0gKGZzYnNwZWVkID4gZikgPyBmc2JzcGVlZCAtIGYgOiBmIC0gZnNic3BlZWQ7Ci0JcmV0dXJuIChkZWx0YSA8IDUpOworCXJldHVybiBkZWx0YSA8IDU7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfcG93ZXJub3codm9pZCkKQEAgLTExNywyNCArMTIwLDI2IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCXVuc2lnbmVkIGludCBtYXhlaSwgZWF4LCBlYngsIGVjeCwgZWR4OwogCi0JaWYgKChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKSB8fCAoYy0+eDg2ICE9NikpIHsKKwlpZiAoKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpIHx8IChjLT54ODYgIT0gNikpIHsKICNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJUaGlzIG1vZHVsZSBvbmx5IHdvcmtzIHdpdGggQU1EIEs3IENQVXNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGhpcyBtb2R1bGUgb25seSB3b3JrcyB3aXRoICIKKwkJCQkiQU1EIEs3IENQVXNcbiIpOwogI2VuZGlmCiAJCXJldHVybiAwOwogCX0KIAogCS8qIEdldCBtYXhpbXVtIGNhcGFiaWxpdGllcyAqLwotCW1heGVpID0gY3B1aWRfZWF4ICgweDgwMDAwMDAwKTsKKwltYXhlaSA9IGNwdWlkX2VheCgweDgwMDAwMDAwKTsKIAlpZiAobWF4ZWkgPCAweDgwMDAwMDA3KSB7CS8qIEFueSBwb3dlcm5vdyBpbmZvID8gKi8KICNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJObyBwb3dlcm5vdyBjYXBhYmlsaXRpZXMgZGV0ZWN0ZWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTm8gcG93ZXJub3cgY2FwYWJpbGl0aWVzIGRldGVjdGVkXG4iKTsKICNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoYy0+eDg2X21hc2sgPT0gMCkpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJLNyA2NjBbQTBdIGNvcmUgZGV0ZWN0ZWQsIGVuYWJsaW5nIGVycmF0YSB3b3JrYXJvdW5kc1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJLNyA2NjBbQTBdIGNvcmUgZGV0ZWN0ZWQsICIKKwkJCQkiZW5hYmxpbmcgZXJyYXRhIHdvcmthcm91bmRzXG4iKTsKIAkJaGF2ZV9hMCA9IDE7CiAJfQogCkBAIC0xNDQsMzcgKzE0OSw0MiBAQAogCWlmICghKGVkeCAmICgxIDw8IDEgfCAxIDw8IDIpKSkKIAkJcmV0dXJuIDA7CiAKLQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlBvd2VyTk9XISBUZWNobm9sb2d5IHByZXNlbnQuIENhbiBzY2FsZTogIik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvd2VyTk9XISBUZWNobm9sb2d5IHByZXNlbnQuIENhbiBzY2FsZTogIik7CiAKIAlpZiAoZWR4ICYgMSA8PCAxKSB7Ci0JCXByaW50ayAoImZyZXF1ZW5jeSIpOwotCQljYW5fc2NhbGVfYnVzPTE7CisJCXByaW50aygiZnJlcXVlbmN5Iik7CisJCWNhbl9zY2FsZV9idXMgPSAxOwogCX0KIAogCWlmICgoZWR4ICYgKDEgPDwgMSB8IDEgPDwgMikpID09IDB4NikKLQkJcHJpbnRrICgiIGFuZCAiKTsKKwkJcHJpbnRrKCIgYW5kICIpOwogCiAJaWYgKGVkeCAmIDEgPDwgMikgewotCQlwcmludGsgKCJ2b2x0YWdlIik7Ci0JCWNhbl9zY2FsZV92aWQ9MTsKKwkJcHJpbnRrKCJ2b2x0YWdlIik7CisJCWNhbl9zY2FsZV92aWQgPSAxOwogCX0KIAotCXByaW50ayAoIi5cbiIpOworCXByaW50aygiLlxuIik7CiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfZW50cnkodW5zaWduZWQgaW50IGVudHJ5KQoreworCXBvd2Vybm93X3RhYmxlW2VudHJ5XS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7Cit9CiAKLXN0YXRpYyBpbnQgZ2V0X3JhbmdlcyAodW5zaWduZWQgY2hhciAqcHN0KQorc3RhdGljIGludCBnZXRfcmFuZ2VzKHVuc2lnbmVkIGNoYXIgKnBzdCkKIHsKIAl1bnNpZ25lZCBpbnQgajsKIAl1bnNpZ25lZCBpbnQgc3BlZWQ7CiAJdTggZmlkLCB2aWQ7CiAKLQlwb3dlcm5vd190YWJsZSA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICogKG51bWJlcl9zY2FsZXMgKyAxKSksIEdGUF9LRVJORUwpOworCXBvd2Vybm93X3RhYmxlID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKgorCQkJCShudW1iZXJfc2NhbGVzICsgMSkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvd2Vybm93X3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaj0wIDsgaiA8IG51bWJlcl9zY2FsZXM7IGorKykgeworCWZvciAoaiA9IDAgOyBqIDwgbnVtYmVyX3NjYWxlczsgaisrKSB7CiAJCWZpZCA9ICpwc3QrKzsKIAogCQlwb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgPSAoZnNiICogZmlkX2NvZGVzW2ZpZF0pIC8gMTA7CkBAIC0xODIsMTAgKzE5MiwxMCBAQAogCiAJCXNwZWVkID0gcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5OwogCi0JCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCk9PTUpIHsKKwkJaWYgKChmaWRfY29kZXNbZmlkXSAlIDEwKSA9PSA1KSB7CiAjaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LN19BQ1BJCiAJCQlpZiAoaGF2ZV9hMCA9PSAxKQotCQkJCXBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCQlpbnZhbGlkYXRlX2VudHJ5KGopOwogI2VuZGlmCiAJCX0KIApAQCAtMTk3LDcgKzIwNyw3IEBACiAJCXZpZCA9ICpwc3QrKzsKIAkJcG93ZXJub3dfdGFibGVbal0uaW5kZXggfD0gKHZpZCA8PCA4KTsgLyogdXBwZXIgOCBiaXRzICovCiAKLQkJZHByaW50ayAoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCisJCWRwcmludGsoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCiAJCQkgIlZJRDogMHgleCAoJWQuJTAzZFYpXG4iLCBmaWQsIGZpZF9jb2Rlc1tmaWRdIC8gMTAsCiAJCQkgZmlkX2NvZGVzW2ZpZF0gJSAxMCwgc3BlZWQvMTAwMCwgdmlkLAogCQkJIG1vYmlsZV92aWRfdGFibGVbdmlkXS8xMDAwLApAQCAtMjE0LDEzICsyMjQsMTMgQEAKIHsKIAl1bmlvbiBtc3JfZmlkdmlkY3RsIGZpZHZpZGN0bDsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKIAlpZiAoZmlkdmlkY3RsLmJpdHMuRklEICE9IGZpZCkgewogCQlmaWR2aWRjdGwuYml0cy5TR1RDID0gbGF0ZW5jeTsKIAkJZmlkdmlkY3RsLmJpdHMuRklEID0gZmlkOwogCQlmaWR2aWRjdGwuYml0cy5WSURDID0gMDsKIAkJZmlkdmlkY3RsLmJpdHMuRklEQyA9IDE7Ci0JCXdybXNybCAoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKKwkJd3Jtc3JsKE1TUl9LN19GSURfVklEX0NUTCwgZmlkdmlkY3RsLnZhbCk7CiAJfQogfQogCkBAIC0yMjksMTggKzIzOSwxOCBAQAogewogCXVuaW9uIG1zcl9maWR2aWRjdGwgZmlkdmlkY3RsOwogCi0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOwogCWlmIChmaWR2aWRjdGwuYml0cy5WSUQgIT0gdmlkKSB7CiAJCWZpZHZpZGN0bC5iaXRzLlNHVEMgPSBsYXRlbmN5OwogCQlmaWR2aWRjdGwuYml0cy5WSUQgPSB2aWQ7CiAJCWZpZHZpZGN0bC5iaXRzLkZJREMgPSAwOwogCQlmaWR2aWRjdGwuYml0cy5WSURDID0gMTsKLQkJd3Jtc3JsIChNU1JfSzdfRklEX1ZJRF9DVEwsIGZpZHZpZGN0bC52YWwpOworCQl3cm1zcmwoTVNSX0s3X0ZJRF9WSURfQ1RMLCBmaWR2aWRjdGwudmFsKTsKIAl9CiB9CiAKIAotc3RhdGljIHZvaWQgY2hhbmdlX3NwZWVkICh1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgdm9pZCBjaGFuZ2Vfc3BlZWQodW5zaWduZWQgaW50IGluZGV4KQogewogCXU4IGZpZCwgdmlkOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwpAQCAtMjU3LDcgKzI2Nyw3IEBACiAKIAlmcmVxcy5jcHUgPSAwOwogCi0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOwogCWNmaWQgPSBmaWR2aWRzdGF0dXMuYml0cy5DRklEOwogCWZyZXFzLm9sZCA9IGZzYiAqIGZpZF9jb2Rlc1tjZmlkXSAvIDEwOwogCkBAIC0zMjEsMTIgKzMzMSwxNCBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JaWYgKGFjcGlfcHJvY2Vzc29yX3BlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHsKKwlpZiAoYWNwaV9wcm9jZXNzb3JfcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCAhPQorCQkJQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnIyOwogCX0KIAotCWlmIChhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHsKKwlpZiAoYWNwaV9wcm9jZXNzb3JfcGVyZi0+c3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkICE9CisJCQlBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycjI7CiAJfQpAQCAtMzM4LDcgKzM1MCw4IEBACiAJCWdvdG8gZXJyMjsKIAl9CiAKLQlwb3dlcm5vd190YWJsZSA9IGt6YWxsb2MoKG51bWJlcl9zY2FsZXMgKyAxKSAqIChzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSksIEdGUF9LRVJORUwpOworCXBvd2Vybm93X3RhYmxlID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKgorCQkJCShudW1iZXJfc2NhbGVzICsgMSkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvd2Vybm93X3RhYmxlKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMjsKQEAgLTM1Miw3ICszNjUsNyBAQAogCQl1bnNpZ25lZCBpbnQgc3BlZWQsIHNwZWVkX21oejsKIAogCQlwYy52YWwgPSAodW5zaWduZWQgbG9uZykgc3RhdGUtPmNvbnRyb2w7Ci0JCWRwcmludGsgKCJhY3BpOiAgUCVkOiAlZCBNSHogJWQgbVcgJWQgdVMgY29udHJvbCAlMDh4IFNHVEMgJWRcbiIsCisJCWRwcmludGsoImFjcGk6ICBQJWQ6ICVkIE1IeiAlZCBtVyAlZCB1UyBjb250cm9sICUwOHggU0dUQyAlZFxuIiwKIAkJCSBpLAogCQkJICh1MzIpIHN0YXRlLT5jb3JlX2ZyZXF1ZW5jeSwKIAkJCSAodTMyKSBzdGF0ZS0+cG93ZXIsCkBAIC0zODEsMTIgKzM5NCwxMiBAQAogCQlpZiAoc3BlZWQgJSAxMDAwID4gMCkKIAkJCXNwZWVkX21oeisrOwogCi0JCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCk9PTUpIHsKKwkJaWYgKChmaWRfY29kZXNbZmlkXSAlIDEwKSA9PSA1KSB7CiAJCQlpZiAoaGF2ZV9hMCA9PSAxKQotCQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCQlpbnZhbGlkYXRlX2VudHJ5KGkpOwogCQl9CiAKLQkJZHByaW50ayAoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCisJCWRwcmludGsoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCiAJCQkgIlZJRDogMHgleCAoJWQuJTAzZFYpXG4iLCBmaWQsIGZpZF9jb2Rlc1tmaWRdIC8gMTAsCiAJCQkgZmlkX2NvZGVzW2ZpZF0gJSAxMCwgc3BlZWRfbWh6LCB2aWQsCiAJCQkgbW9iaWxlX3ZpZF90YWJsZVt2aWRdLzEwMDAsCkBAIC00MjIsNyArNDM1LDggQEAKIGVycjA1OgogCWtmcmVlKGFjcGlfcHJvY2Vzc29yX3BlcmYpOwogZXJyMDoKLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiQUNQSSBwZXJmbGliIGNhbiBub3QgYmUgdXNlZCBpbiB0aGlzIHBsYXRmb3JtXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiQUNQSSBwZXJmbGliIGNhbiBub3QgYmUgdXNlZCBvbiAiCisJCQkidGhpcyBwbGF0Zm9ybVxuIik7CiAJYWNwaV9wcm9jZXNzb3JfcGVyZiA9IE5VTEw7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQzNSw3ICs0NDksMTQgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHBvd2Vybm93X2RlY29kZV9iaW9zIChpbnQgbWF4ZmlkLCBpbnQgc3RhcnR2aWQpCitzdGF0aWMgdm9pZCBwcmludF9wc3RfZW50cnkoc3RydWN0IHBzdF9zICpwc3QsIHVuc2lnbmVkIGludCBqKQoreworCWRwcmludGsoIlBTVDolZCAoQCVwKVxuIiwgaiwgcHN0KTsKKwlkcHJpbnRrKCIgY3B1aWQ6IDB4JXggIGZzYjogJWQgIG1heEZJRDogMHgleCAgc3RhcnR2aWQ6IDB4JXhcbiIsCisJCXBzdC0+Y3B1aWQsIHBzdC0+ZnNic3BlZWQsIHBzdC0+bWF4ZmlkLCBwc3QtPnN0YXJ0dmlkKTsKK30KKworc3RhdGljIGludCBwb3dlcm5vd19kZWNvZGVfYmlvcyhpbnQgbWF4ZmlkLCBpbnQgc3RhcnR2aWQpCiB7CiAJc3RydWN0IHBzYl9zICpwc2I7CiAJc3RydWN0IHBzdF9zICpwc3Q7CkBAIC00NDYsNjEgKzQ2Nyw2NyBAQAogCiAJZXR1cGxlID0gY3B1aWRfZWF4KDB4ODAwMDAwMDEpOwogCi0JZm9yIChpPTB4QzAwMDA7IGkgPCAweGZmZmYwIDsgaSs9MTYpIHsKKwlmb3IgKGkgPSAweEMwMDAwOyBpIDwgMHhmZmZmMCA7IGkgKz0gMTYpIHsKIAogCQlwID0gcGh5c190b192aXJ0KGkpOwogCi0JCWlmIChtZW1jbXAocCwgIkFNREs3UE5PVyEiLCAgMTApID09IDApewotCQkJZHByaW50ayAoIkZvdW5kIFBTQiBoZWFkZXIgYXQgJXBcbiIsIHApOworCQlpZiAobWVtY21wKHAsICJBTURLN1BOT1chIiwgIDEwKSA9PSAwKSB7CisJCQlkcHJpbnRrKCJGb3VuZCBQU0IgaGVhZGVyIGF0ICVwXG4iLCBwKTsKIAkJCXBzYiA9IChzdHJ1Y3QgcHNiX3MgKikgcDsKLQkJCWRwcmludGsgKCJUYWJsZSB2ZXJzaW9uOiAweCV4XG4iLCBwc2ItPnRhYmxldmVyc2lvbik7CisJCQlkcHJpbnRrKCJUYWJsZSB2ZXJzaW9uOiAweCV4XG4iLCBwc2ItPnRhYmxldmVyc2lvbik7CiAJCQlpZiAocHNiLT50YWJsZXZlcnNpb24gIT0gMHgxMikgewotCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiU29ycnksIG9ubHkgdjEuMiB0YWJsZXMgc3VwcG9ydGVkIHJpZ2h0IG5vd1xuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlNvcnJ5LCBvbmx5IHYxLjIgdGFibGVzIgorCQkJCQkJIiBzdXBwb3J0ZWQgcmlnaHQgbm93XG4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAotCQkJZHByaW50ayAoIkZsYWdzOiAweCV4XG4iLCBwc2ItPmZsYWdzKTsKLQkJCWlmICgocHNiLT5mbGFncyAmIDEpPT0wKSB7Ci0JCQkJZHByaW50ayAoIk1vYmlsZSB2b2x0YWdlIHJlZ3VsYXRvclxuIik7Ci0JCQl9IGVsc2UgewotCQkJCWRwcmludGsgKCJEZXNrdG9wIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKLQkJCX0KKwkJCWRwcmludGsoIkZsYWdzOiAweCV4XG4iLCBwc2ItPmZsYWdzKTsKKwkJCWlmICgocHNiLT5mbGFncyAmIDEpID09IDApCisJCQkJZHByaW50aygiTW9iaWxlIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKKwkJCWVsc2UKKwkJCQlkcHJpbnRrKCJEZXNrdG9wIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKIAogCQkJbGF0ZW5jeSA9IHBzYi0+c2V0dGxpbmd0aW1lOwogCQkJaWYgKGxhdGVuY3kgPCAxMDApIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQklPUyBzZXQgc2V0dGxpbmcgdGltZSB0byAlZCBtaWNyb3NlY29uZHMuICIKLQkJCQkJCSJTaG91bGQgYmUgYXQgbGVhc3QgMTAwLiBDb3JyZWN0aW5nLlxuIiwgbGF0ZW5jeSk7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJJT1Mgc2V0IHNldHRsaW5nIHRpbWUgIgorCQkJCQkJInRvICVkIG1pY3Jvc2Vjb25kcy4gIgorCQkJCQkJIlNob3VsZCBiZSBhdCBsZWFzdCAxMDAuICIKKwkJCQkJCSJDb3JyZWN0aW5nLlxuIiwgbGF0ZW5jeSk7CiAJCQkJbGF0ZW5jeSA9IDEwMDsKIAkJCX0KLQkJCWRwcmludGsgKCJTZXR0bGluZyBUaW1lOiAlZCBtaWNyb3NlY29uZHMuXG4iLCBwc2ItPnNldHRsaW5ndGltZSk7Ci0JCQlkcHJpbnRrICgiSGFzICVkIFBTVCB0YWJsZXMuIChPbmx5IGR1bXBpbmcgb25lcyByZWxldmFudCB0byB0aGlzIENQVSkuXG4iLCBwc2ItPm51bXBzdCk7CisJCQlkcHJpbnRrKCJTZXR0bGluZyBUaW1lOiAlZCBtaWNyb3NlY29uZHMuXG4iLAorCQkJCQlwc2ItPnNldHRsaW5ndGltZSk7CisJCQlkcHJpbnRrKCJIYXMgJWQgUFNUIHRhYmxlcy4gKE9ubHkgZHVtcGluZyBvbmVzICIKKwkJCQkJInJlbGV2YW50IHRvIHRoaXMgQ1BVKS5cbiIsCisJCQkJCXBzYi0+bnVtcHN0KTsKIAotCQkJcCArPSBzaXplb2YgKHN0cnVjdCBwc2Jfcyk7CisJCQlwICs9IHNpemVvZihzdHJ1Y3QgcHNiX3MpOwogCiAJCQlwc3QgPSAoc3RydWN0IHBzdF9zICopIHA7CiAKLQkJCWZvciAoaj0wOyBqPHBzYi0+bnVtcHN0OyBqKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBwc2ItPm51bXBzdDsgaisrKSB7CiAJCQkJcHN0ID0gKHN0cnVjdCBwc3RfcyAqKSBwOwogCQkJCW51bWJlcl9zY2FsZXMgPSBwc3QtPm51bXBzdGF0ZXM7CiAKLQkJCQlpZiAoKGV0dXBsZSA9PSBwc3QtPmNwdWlkKSAmJiBjaGVja19mc2IocHN0LT5mc2JzcGVlZCkgJiYKLQkJCQkgICAgKG1heGZpZD09cHN0LT5tYXhmaWQpICYmIChzdGFydHZpZD09cHN0LT5zdGFydHZpZCkpCi0JCQkJewotCQkJCQlkcHJpbnRrICgiUFNUOiVkIChAJXApXG4iLCBqLCBwc3QpOwotCQkJCQlkcHJpbnRrICgiIGNwdWlkOiAweCV4ICBmc2I6ICVkICBtYXhGSUQ6IDB4JXggIHN0YXJ0dmlkOiAweCV4XG4iLAotCQkJCQkJIHBzdC0+Y3B1aWQsIHBzdC0+ZnNic3BlZWQsIHBzdC0+bWF4ZmlkLCBwc3QtPnN0YXJ0dmlkKTsKLQotCQkJCQlyZXQgPSBnZXRfcmFuZ2VzICgoY2hhciAqKSBwc3QgKyBzaXplb2YgKHN0cnVjdCBwc3RfcykpOworCQkJCWlmICgoZXR1cGxlID09IHBzdC0+Y3B1aWQpICYmCisJCQkJICAgIGNoZWNrX2ZzYihwc3QtPmZzYnNwZWVkKSAmJgorCQkJCSAgICAobWF4ZmlkID09IHBzdC0+bWF4ZmlkKSAmJgorCQkJCSAgICAoc3RhcnR2aWQgPT0gcHN0LT5zdGFydHZpZCkpIHsKKwkJCQkJcHJpbnRfcHN0X2VudHJ5KHBzdCwgaik7CisJCQkJCXAgPSAoY2hhciAqKXBzdCArIHNpemVvZihzdHJ1Y3QgcHN0X3MpOworCQkJCQlyZXQgPSBnZXRfcmFuZ2VzKHApOwogCQkJCQlyZXR1cm4gcmV0OwogCQkJCX0gZWxzZSB7CiAJCQkJCXVuc2lnbmVkIGludCBrOwotCQkJCQlwID0gKGNoYXIgKikgcHN0ICsgc2l6ZW9mIChzdHJ1Y3QgcHN0X3MpOwotCQkJCQlmb3IgKGs9MDsgazxudW1iZXJfc2NhbGVzOyBrKyspCi0JCQkJCQlwKz0yOworCQkJCQlwID0gKGNoYXIgKilwc3QgKyBzaXplb2Yoc3RydWN0IHBzdF9zKTsKKwkJCQkJZm9yIChrID0gMDsgayA8IG51bWJlcl9zY2FsZXM7IGsrKykKKwkJCQkJCXAgKz0gMjsKIAkJCQl9CiAJCQl9Ci0JCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIk5vIFBTVCB0YWJsZXMgbWF0Y2ggdGhpcyBjcHVpZCAoMHgleClcbiIsIGV0dXBsZSk7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRoaXMgaXMgaW5kaWNhdGl2ZSBvZiBhIGJyb2tlbiBCSU9TLlxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTm8gUFNUIHRhYmxlcyBtYXRjaCB0aGlzIGNwdWlkICIKKwkJCQkJIigweCV4KVxuIiwgZXR1cGxlKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJUaGlzIGlzIGluZGljYXRpdmUgb2YgYSBicm9rZW4gIgorCQkJCQkiQklPUy5cbiIpOwogCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNTExLDEzICs1MzgsMTQgQEAKIH0KIAogCi1zdGF0aWMgaW50IHBvd2Vybm93X3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHBvd2Vybm93X3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCiAJCQkgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewogCXVuc2lnbmVkIGludCBuZXdzdGF0ZTsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBwb3dlcm5vd190YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBwb3dlcm5vd190YWJsZSwgdGFyZ2V0X2ZyZXEsCisJCQkJcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2hhbmdlX3NwZWVkKG5ld3N0YXRlKTsKQEAgLTUyNiw3ICs1NTQsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgcG93ZXJub3dfdmVyaWZ5IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgcG93ZXJub3dfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCBwb3dlcm5vd190YWJsZSk7CiB9CkBAIC01NjYsMTggKzU5NCwyMyBAQAogCiAJaWYgKGNwdSkKIAkJcmV0dXJuIDA7Ci0JcmRtc3JsIChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOworCXJkbXNybChNU1JfSzdfRklEX1ZJRF9TVEFUVVMsIGZpZHZpZHN0YXR1cy52YWwpOwogCWNmaWQgPSBmaWR2aWRzdGF0dXMuYml0cy5DRklEOwogCi0JcmV0dXJuIChmc2IgKiBmaWRfY29kZXNbY2ZpZF0gLyAxMCk7CisJcmV0dXJuIGZzYiAqIGZpZF9jb2Rlc1tjZmlkXSAvIDEwOwogfQogCiAKIHN0YXRpYyBpbnQgX19pbml0IGFjZXJfY3B1ZnJlcV9wc3QoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCiB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgbGFwdG9wIHdpdGggYnJva2VuIFBTVCB0YWJsZXMgaW4gQklPUyBkZXRlY3RlZC5cbiIsIGQtPmlkZW50KTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJZb3UgbmVlZCB0byBkb3duZ3JhZGUgdG8gM0EyMSAoMDkvMDkvMjAwMiksIG9yIHRyeSBhIG5ld2VyIEJJT1MgdGhhbiAzQTcxICgwMS8yMC8yMDAzKVxuIik7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiY3B1ZnJlcSBzY2FsaW5nIGhhcyBiZWVuIGRpc2FibGVkIGFzIGEgcmVzdWx0IG9mIHRoaXMuXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkiJXMgbGFwdG9wIHdpdGggYnJva2VuIFBTVCB0YWJsZXMgaW4gQklPUyBkZXRlY3RlZC5cbiIsCisJCWQtPmlkZW50KTsKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkiWW91IG5lZWQgdG8gZG93bmdyYWRlIHRvIDNBMjEgKDA5LzA5LzIwMDIpLCBvciB0cnkgYSBuZXdlciAiCisJCSJCSU9TIHRoYW4gM0E3MSAoMDEvMjAvMjAwMylcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSJjcHVmcmVxIHNjYWxpbmcgaGFzIGJlZW4gZGlzYWJsZWQgYXMgYSByZXN1bHQgb2YgdGhpcy5cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC01OTgsNyArNjMxLDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2NwdV9pbml0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXVuaW9uIG1zcl9maWR2aWRzdGF0dXMgZmlkdmlkc3RhdHVzOwogCWludCByZXN1bHQ7CkBAIC02MDYsNyArNjM5LDcgQEAKIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZG1zcmwgKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CisJcmRtc3JsKE1TUl9LN19GSURfVklEX1NUQVRVUywgZmlkdmlkc3RhdHVzLnZhbCk7CiAKIAlyZWNhbGlicmF0ZV9jcHVfa2h6KCk7CiAKQEAgLTYxOCwxOSArNjUxLDIxIEBACiAJZHByaW50aygiRlNCOiAlM2RNSHpcbiIsIGZzYi8xMDAwKTsKIAogCWlmIChkbWlfY2hlY2tfc3lzdGVtKHBvd2Vybm93X2RtaV90YWJsZSkgfHwgYWNwaV9mb3JjZSkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlBTQi9QU1Qga25vd24gdG8gYmUgYnJva2VuLiAgVHJ5aW5nIEFDUEkgaW5zdGVhZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJQU0IvUFNUIGtub3duIHRvIGJlIGJyb2tlbi4gICIKKwkJCQkiVHJ5aW5nIEFDUEkgaW5zdGVhZFxuIik7CiAJCXJlc3VsdCA9IHBvd2Vybm93X2FjcGlfaW5pdCgpOwogCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IHBvd2Vybm93X2RlY29kZV9iaW9zKGZpZHZpZHN0YXR1cy5iaXRzLk1GSUQsIGZpZHZpZHN0YXR1cy5iaXRzLlNWSUQpOworCQlyZXN1bHQgPSBwb3dlcm5vd19kZWNvZGVfYmlvcyhmaWR2aWRzdGF0dXMuYml0cy5NRklELAorCQkJCWZpZHZpZHN0YXR1cy5iaXRzLlNWSUQpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRyeWluZyBBQ1BJIHBlcmZsaWJcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRyeWluZyBBQ1BJIHBlcmZsaWJcbiIpOwogCQkJbWF4aW11bV9zcGVlZCA9IDA7CiAJCQltaW5pbXVtX3NwZWVkID0gLTE7CiAJCQlsYXRlbmN5ID0gMDsKIAkJCXJlc3VsdCA9IHBvd2Vybm93X2FjcGlfaW5pdCgpOwogCQkJaWYgKHJlc3VsdCkgewotCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiQUNQSSBhbmQgbGVnYWN5IG1ldGhvZHMgZmFpbGVkXG4iKTsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlNlZSBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL3Byb2plY3RzL2NwdWZyZXEvcG93ZXJub3ctazcuaHRtbFxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkJIkFDUEkgYW5kIGxlZ2FjeSBtZXRob2RzIGZhaWxlZFxuIik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiBTR1RDIHVzZSB0aGUgYnVzIGNsb2NrIGFzIHRpbWVyICovCkBAIC02NDIsMTAgKzY3NywxMSBAQAogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKLQlwcmludGsgKEtFUk5fSU5GTyBQRlggIk1pbmltdW0gc3BlZWQgJWQgTUh6LiBNYXhpbXVtIHNwZWVkICVkIE1Iei5cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk1pbmltdW0gc3BlZWQgJWQgTUh6LiBNYXhpbXVtIHNwZWVkICVkIE1Iei5cbiIsCiAJCQkJbWluaW11bV9zcGVlZC8xMDAwLCBtYXhpbXVtX3NwZWVkLzEwMDApOwogCi0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IGNwdWZyZXFfc2NhbGUoMjAwMDAwMFVMLCBmc2IsIGxhdGVuY3kpOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPQorCQljcHVmcmVxX3NjYWxlKDIwMDAwMDBVTCwgZnNiLCBsYXRlbmN5KTsKIAogCXBvbGljeS0+Y3VyID0gcG93ZXJub3dfZ2V0KDApOwogCkBAIC02NTQsNyArNjkwLDggQEAKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHBvd2Vybm93X3RhYmxlKTsKIH0KIAotc3RhdGljIGludCBwb3dlcm5vd19jcHVfZXhpdCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpIHsKK3N0YXRpYyBpbnQgcG93ZXJub3dfY3B1X2V4aXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIocG9saWN5LT5jcHUpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LN19BQ1BJCkBAIC02NjksNyArNzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHBvd2Vybm93X3RhYmxlX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpwb3dlcm5vd190YWJsZV9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtNjg1LDE1ICs3MjIsMTUgQEAKIAkuYXR0cgk9IHBvd2Vybm93X3RhYmxlX2F0dHIsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfaW5pdCh2b2lkKQogewotCWlmIChjaGVja19wb3dlcm5vdygpPT0wKQorCWlmIChjaGVja19wb3dlcm5vdygpID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmcG93ZXJub3dfZHJpdmVyKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2V4aXQgcG93ZXJub3dfZXhpdCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBwb3dlcm5vd19leGl0KHZvaWQpCiB7CiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmcG93ZXJub3dfZHJpdmVyKTsKIH0KQEAgLTcwMSw5ICs3MzgsOSBAQAogbW9kdWxlX3BhcmFtKGFjcGlfZm9yY2UsICBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhY3BpX2ZvcmNlLCAiRm9yY2UgQUNQSSB0byBiZSB1c2VkLiIpOwogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlBvd2Vybm93IGRyaXZlciBmb3IgQU1EIEs3IHByb2Nlc3NvcnMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUG93ZXJub3cgZHJpdmVyIGZvciBBTUQgSzcgcHJvY2Vzc29ycy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbGF0ZV9pbml0Y2FsbChwb3dlcm5vd19pbml0KTsKIG1vZHVsZV9leGl0KHBvd2Vybm93X2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA2NDI4YWExLi5hMTVhYzk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMzMsMTYgKzMzLDE0IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBjdXJyZW50IC8gc2V0X2NwdXNfYWxsb3dlZCgpICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCi0jaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KLSNlbmRpZgogCiAjZGVmaW5lIFBGWCAicG93ZXJub3ctazg6ICIKICNkZWZpbmUgVkVSU0lPTiAidmVyc2lvbiAyLjIwLjAwIgpAQCAtNzEsNyArNjksOCBAQAogCXJldHVybiAxMDAwICogZmluZF9mcmVxX2Zyb21fZmlkKGZpZCk7CiB9CiAKLXN0YXRpYyB1MzIgZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmRhdGEsIHUzMiBwc3RhdGUpCitzdGF0aWMgdTMyIGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpkYXRhLAorCQl1MzIgcHN0YXRlKQogewogCXJldHVybiBkYXRhW3BzdGF0ZV0uZnJlcXVlbmN5OwogfQpAQCAtMTg2LDcgKzE4NSw5IEBACiAJCXJldHVybiAxOwogCX0KIAotCWxvID0gZmlkIHwgKGRhdGEtPmN1cnJ2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKSB8IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKKwlsbyA9IGZpZDsKKwlsbyB8PSAoZGF0YS0+Y3VycnZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpOworCWxvIHw9IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKIAogCWRwcmludGsoIndyaXRpbmcgZmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCiAJCWZpZCwgbG8sIGRhdGEtPnBsbGxvY2sgKiBQTExfTE9DS19DT05WRVJTSU9OKTsKQEAgLTE5NCw3ICsxOTUsOSBAQAogCWRvIHsKIAkJd3Jtc3IoTVNSX0ZJRFZJRF9DVEwsIGxvLCBkYXRhLT5wbGxsb2NrICogUExMX0xPQ0tfQ09OVkVSU0lPTik7CiAJCWlmIChpKysgPiAxMDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkhhcmR3YXJlIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJIYXJkd2FyZSBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSAiCisJCQkJIm5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IHdoaWxlIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSk7CkBAIC0yMDIsMTQgKzIwNSwxNiBAQAogCWNvdW50X29mZl9pcnQoZGF0YSk7CiAKIAlpZiAoc2F2ZXZpZCAhPSBkYXRhLT5jdXJydmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInZpZCBjaGFuZ2Ugb24gZmlkIHRyYW5zLCBvbGQgMHgleCwgbmV3IDB4JXhcbiIsCi0JCSAgICAgICBzYXZldmlkLCBkYXRhLT5jdXJydmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJInZpZCBjaGFuZ2Ugb24gZmlkIHRyYW5zLCBvbGQgMHgleCwgbmV3IDB4JXhcbiIsCisJCQlzYXZldmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKGZpZCAhPSBkYXRhLT5jdXJyZmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZpZCB0cmFucyBmYWlsZWQsIGZpZCAweCV4LCBjdXJyIDB4JXhcbiIsIGZpZCwKLQkJICAgICAgICBkYXRhLT5jdXJyZmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImZpZCB0cmFucyBmYWlsZWQsIGZpZCAweCV4LCBjdXJyIDB4JXhcbiIsIGZpZCwKKwkJCWRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIyOCw3ICsyMzMsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlsbyA9IGRhdGEtPmN1cnJmaWQgfCAodmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCkgfCBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CisJbG8gPSBkYXRhLT5jdXJyZmlkOworCWxvIHw9ICh2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKTsKKwlsbyB8PSBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CiAKIAlkcHJpbnRrKCJ3cml0aW5nIHZpZCAweCV4LCBsbyAweCV4LCBoaSAweCV4XG4iLAogCQl2aWQsIGxvLCBTVE9QX0dSQU5UXzVOUyk7CkBAIC0yMzYsMjAgKzI0MywyNCBAQAogCWRvIHsKIAkJd3Jtc3IoTVNSX0ZJRFZJRF9DVEwsIGxvLCBTVE9QX0dSQU5UXzVOUyk7CiAJCWlmIChpKysgPiAxMDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImludGVybmFsIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW50ZXJuYWwgZXJyb3IgLSBwZW5kaW5nIGJpdCAiCisJCQkJCSJ2ZXJ5IHN0dWNrIC0gbm8gZnVydGhlciBwc3RhdGUgIgorCQkJCQkiY2hhbmdlcyBwb3NzaWJsZVxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gd2hpbGUgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKTsKIAogCWlmIChzYXZlZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmlkIGNoYW5nZWQgb24gdmlkIHRyYW5zLCBvbGQgMHgleCBuZXcgMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmlkIGNoYW5nZWQgb24gdmlkIHRyYW5zLCBvbGQgIgorCQkJIjB4JXggbmV3IDB4JXhcbiIsCiAJCSAgICAgICBzYXZlZmlkLCBkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKHZpZCAhPSBkYXRhLT5jdXJydmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInZpZCB0cmFucyBmYWlsZWQsIHZpZCAweCV4LCBjdXJyIDB4JXhcbiIsIHZpZCwKLQkJCQlkYXRhLT5jdXJydmlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidmlkIHRyYW5zIGZhaWxlZCwgdmlkIDB4JXgsICIKKwkJCQkiY3VyciAweCV4XG4iLAorCQkJCXZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjYxLDcgKzI3Miw4IEBACiAgKiBEZWNyZWFzaW5nIHZpZCBjb2RlcyByZXByZXNlbnQgaW5jcmVhc2luZyB2b2x0YWdlczoKICAqIHZpZCBvZiAwIGlzIDEuNTUwViwgdmlkIG9mIDB4MWUgaXMgMC44MDBWLCB2aWQgb2YgVklEX09GRiBpcyBvZmYuCiAgKi8KLXN0YXRpYyBpbnQgZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcXZpZCwgdTMyIHN0ZXApCitzdGF0aWMgaW50IGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXUzMiByZXF2aWQsIHUzMiBzdGVwKQogewogCWlmICgoZGF0YS0+Y3VycnZpZCAtIHJlcXZpZCkgPiBzdGVwKQogCQlyZXF2aWQgPSBkYXRhLT5jdXJydmlkIC0gc3RlcDsKQEAgLTI4Myw3ICsyOTUsOCBAQAogfQogCiAvKiBDaGFuZ2UgT3B0ZXJvbi9BdGhsb242NCBmaWQgYW5kIHZpZCwgYnkgdGhlIDMgcGhhc2VzLiAqLwotc3RhdGljIGludCB0cmFuc2l0aW9uX2ZpZF92aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHUzMiByZXFmaWQsIHUzMiByZXF2aWQpCitzdGF0aWMgaW50IHRyYW5zaXRpb25fZmlkX3ZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJdTMyIHJlcWZpZCwgdTMyIHJlcXZpZCkKIHsKIAlpZiAoY29yZV92b2x0YWdlX3ByZV90cmFuc2l0aW9uKGRhdGEsIHJlcXZpZCkpCiAJCXJldHVybiAxOwpAQCAtMjk4LDcgKzMxMSw4IEBACiAJCXJldHVybiAxOwogCiAJaWYgKChyZXFmaWQgIT0gZGF0YS0+Y3VycmZpZCkgfHwgKHJlcXZpZCAhPSBkYXRhLT5jdXJydmlkKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgKGNwdSVkKTogcmVxIDB4JXggMHgleCwgY3VyciAweCV4IDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCAoY3B1JWQpOiByZXEgMHgleCAweCV4LCAiCisJCQkJImN1cnIgMHgleCAweCV4XG4iLAogCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJCQlyZXFmaWQsIHJlcXZpZCwgZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJCXJldHVybiAxOwpAQCAtMzExLDEzICszMjUsMTUgQEAKIH0KIAogLyogUGhhc2UgMSAtIGNvcmUgdm9sdGFnZSB0cmFuc2l0aW9uIC4uLiBzZXR1cCB2b2x0YWdlICovCi1zdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcXZpZCkKK3N0YXRpYyBpbnQgY29yZV92b2x0YWdlX3ByZV90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1MzIgcmVxdmlkKQogewogCXUzMiBydm9zdGVwcyA9IGRhdGEtPnJ2bzsKIAl1MzIgc2F2ZWZpZCA9IGRhdGEtPmN1cnJmaWQ7CiAJdTMyIG1heHZpZCwgbG87CiAKLQlkcHJpbnRrKCJwaDEgKGNwdSVkKTogc3RhcnQsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCByZXF2aWQgMHgleCwgcnZvIDB4JXhcbiIsCisJZHByaW50aygicGgxIChjcHUlZCk6IHN0YXJ0LCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgIgorCQkicmVxdmlkIDB4JXgsIHJ2byAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQsIHJlcXZpZCwgZGF0YS0+cnZvKTsKIApAQCAtMzQwLDcgKzM1Niw3IEBACiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKCJwaDE6IGNoYW5naW5nIHZpZCBmb3IgcnZvLCByZXEgMHgleFxuIiwKIAkJCQlkYXRhLT5jdXJydmlkIC0gMSk7Ci0JCQlpZiAoZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChkYXRhLCBkYXRhLT5jdXJydmlkIC0gMSwgMSkpCisJCQlpZiAoZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChkYXRhLCBkYXRhLT5jdXJydmlkLTEsIDEpKQogCQkJCXJldHVybiAxOwogCQkJcnZvc3RlcHMtLTsKIAkJfQpAQCAtMzUwLDcgKzM2Niw4IEBACiAJCXJldHVybiAxOwogCiAJaWYgKHNhdmVmaWQgIT0gZGF0YS0+Y3VycmZpZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDEgZXJyLCBjdXJyZmlkIGNoYW5nZWQgMHgleFxuIiwgZGF0YS0+Y3VycmZpZCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBoMSBlcnIsIGN1cnJmaWQgY2hhbmdlZCAweCV4XG4iLAorCQkJCWRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTM2MywyMCArMzgwLDI0IEBACiAvKiBQaGFzZSAyIC0gY29yZSBmcmVxdWVuY3kgdHJhbnNpdGlvbiAqLwogc3RhdGljIGludCBjb3JlX2ZyZXF1ZW5jeV90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxZmlkKQogewotCXUzMiB2Y29yZXFmaWQsIHZjb2N1cnJmaWQsIHZjb2ZpZGRpZmYsIGZpZF9pbnRlcnZhbCwgc2F2ZXZpZCA9IGRhdGEtPmN1cnJ2aWQ7CisJdTMyIHZjb3JlcWZpZCwgdmNvY3VycmZpZCwgdmNvZmlkZGlmZjsKKwl1MzIgZmlkX2ludGVydmFsLCBzYXZldmlkID0gZGF0YS0+Y3VycnZpZDsKIAotCWlmICgocmVxZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDI6IGlsbGVnYWwgbG8tbG8gdHJhbnNpdGlvbiAweCV4IDB4JXhcbiIsCi0JCQlyZXFmaWQsIGRhdGEtPmN1cnJmaWQpOworCWlmICgocmVxZmlkIDwgSElfRklEX1RBQkxFX0JPVFRPTSkgJiYKKwkgICAgKGRhdGEtPmN1cnJmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDI6IGlsbGVnYWwgbG8tbG8gdHJhbnNpdGlvbiAiCisJCQkJIjB4JXggMHgleFxuIiwgcmVxZmlkLCBkYXRhLT5jdXJyZmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKGRhdGEtPmN1cnJmaWQgPT0gcmVxZmlkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInBoMiBudWxsIGZpZCB0cmFuc2l0aW9uIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJwaDIgbnVsbCBmaWQgdHJhbnNpdGlvbiAweCV4XG4iLAorCQkJCWRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkcHJpbnRrKCJwaDIgKGNwdSVkKTogc3RhcnRpbmcsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCByZXFmaWQgMHgleFxuIiwKKwlkcHJpbnRrKCJwaDIgKGNwdSVkKTogc3RhcnRpbmcsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCisJCSJyZXFmaWQgMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkLCByZXFmaWQpOwogCkBAIC0zOTAsMTQgKzQxMSwxNCBAQAogCiAJCWlmIChyZXFmaWQgPiBkYXRhLT5jdXJyZmlkKSB7CiAJCQlpZiAoZGF0YS0+Y3VycmZpZCA+IExPX0ZJRF9UQUJMRV9UT1ApIHsKLQkJCQlpZiAod3JpdGVfbmV3X2ZpZChkYXRhLCBkYXRhLT5jdXJyZmlkICsgZmlkX2ludGVydmFsKSkgeworCQkJCWlmICh3cml0ZV9uZXdfZmlkKGRhdGEsCisJCQkJCQlkYXRhLT5jdXJyZmlkICsgZmlkX2ludGVydmFsKSkKIAkJCQkJcmV0dXJuIDE7Ci0JCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlpZiAod3JpdGVfbmV3X2ZpZAotCQkJCSAgICAoZGF0YSwgMiArIGNvbnZlcnRfZmlkX3RvX3Zjb19maWQoZGF0YS0+Y3VycmZpZCkpKSB7CisJCQkJICAgIChkYXRhLAorCQkJCSAgICAgMiArIGNvbnZlcnRfZmlkX3RvX3Zjb19maWQoZGF0YS0+Y3VycmZpZCkpKQogCQkJCQlyZXR1cm4gMTsKLQkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAod3JpdGVfbmV3X2ZpZChkYXRhLCBkYXRhLT5jdXJyZmlkIC0gZmlkX2ludGVydmFsKSkKQEAgLTQxNyw3ICs0MzgsOCBAQAogCiAJaWYgKGRhdGEtPmN1cnJmaWQgIT0gcmVxZmlkKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJwaDI6IG1pc21hdGNoLCBmYWlsZWQgZmlkIHRyYW5zaXRpb24sIGN1cnIgMHgleCwgcmVxIDB4JXhcbiIsCisJCQkicGgyOiBtaXNtYXRjaCwgZmFpbGVkIGZpZCB0cmFuc2l0aW9uLCAiCisJCQkiY3VyciAweCV4LCByZXEgMHgleFxuIiwKIAkJCWRhdGEtPmN1cnJmaWQsIHJlcWZpZCk7CiAJCXJldHVybiAxOwogCX0KQEAgLTQzNSw3ICs0NTcsOCBAQAogfQogCiAvKiBQaGFzZSAzIC0gY29yZSB2b2x0YWdlIHRyYW5zaXRpb24gZmxvdyAuLi4ganVtcCB0byB0aGUgZmluYWwgdmlkLiAqLwotc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcG9zdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxdmlkKQorc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcG9zdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAorCQl1MzIgcmVxdmlkKQogewogCXUzMiBzYXZlZmlkID0gZGF0YS0+Y3VycmZpZDsKIAl1MzIgc2F2ZXJlcXZpZCA9IHJlcXZpZDsKQEAgLTQ1Nyw3ICs0ODAsOCBAQAogCiAJCWlmIChkYXRhLT5jdXJydmlkICE9IHJlcXZpZCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICJwaDM6IGZhaWxlZCB2aWQgdHJhbnNpdGlvblxuLCByZXEgMHgleCwgY3VyciAweCV4IiwKKwkJCSAgICAgICAicGgzOiBmYWlsZWQgdmlkIHRyYW5zaXRpb25cbiwgIgorCQkJICAgICAgICJyZXEgMHgleCwgY3VyciAweCV4IiwKIAkJCSAgICAgICByZXF2aWQsIGRhdGEtPmN1cnJ2aWQpOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTUwOCw3ICs1MzIsOCBAQAogCWlmICgoZWF4ICYgQ1BVSURfWEZBTSkgPT0gQ1BVSURfWEZBTV9LOCkgewogCQlpZiAoKChlYXggJiBDUFVJRF9VU0VfWEZBTV9YTU9EKSAhPSBDUFVJRF9VU0VfWEZBTV9YTU9EKSB8fAogCQkgICAgKChlYXggJiBDUFVJRF9YTU9EKSA+IENQVUlEX1hNT0RfUkVWX01BU0spKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUHJvY2Vzc29yIGNwdWlkICV4IG5vdCBzdXBwb3J0ZWRcbiIsIGVheCk7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCSJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTUyMCw4ICs1NDUsMTAgQEAKIAkJfQogCiAJCWNwdWlkKENQVUlEX0ZSRVFfVk9MVF9DQVBBQklMSVRJRVMsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCQlpZiAoKGVkeCAmIFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSAhPSBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvd2VyIHN0YXRlIHRyYW5zaXRpb25zIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlpZiAoKGVkeCAmIFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKQorCQkJIT0gUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkJIlBvd2VyIHN0YXRlIHRyYW5zaXRpb25zIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgeyAvKiBtdXN0IGJlIGEgSFcgUHN0YXRlIGNhcGFibGUgcHJvY2Vzc29yICovCkBAIC01MzksNyArNTY2LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfcHN0X3RhYmxlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgcHN0X3MgKnBzdCwgdTggbWF4dmlkKQorc3RhdGljIGludCBjaGVja19wc3RfdGFibGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBwc3RfcyAqcHN0LAorCQl1OCBtYXh2aWQpCiB7CiAJdW5zaWduZWQgaW50IGo7CiAJdTggbGFzdGZpZCA9IDB4ZmY7CkBAIC01NTAsMTIgKzU3OCwxNCBAQAogCQkJICAgICAgIGosIHBzdFtqXS52aWQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHBzdFtqXS52aWQgPCBkYXRhLT5ydm8pIHsJLyogdmlkICsgcnZvID49IDAgKi8KKwkJaWYgKHBzdFtqXS52aWQgPCBkYXRhLT5ydm8pIHsKKwkJCS8qIHZpZCArIHJ2byA+PSAwICovCiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiMCB2aWQgZXhjZWVkZWQgd2l0aCBwc3RhdGUiCiAJCQkgICAgICAgIiAlZFxuIiwgaik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAocHN0W2pdLnZpZCA8IG1heHZpZCArIGRhdGEtPnJ2bykgewkvKiB2aWQgKyBydm8gPj0gbWF4dmlkICovCisJCWlmIChwc3Rbal0udmlkIDwgbWF4dmlkICsgZGF0YS0+cnZvKSB7CisJCQkvKiB2aWQgKyBydm8gPj0gbWF4dmlkICovCiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAibWF4dmlkIGV4Y2VlZGVkIHdpdGggcHN0YXRlIgogCQkJICAgICAgICIgJWRcbiIsIGopOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NzksMjMgKzYwOSwzMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGxhc3RmaWQgPiBMT19GSURfVEFCTEVfVE9QKQotCQlwcmludGsoS0VSTl9JTkZPIEZXX0JVRyBQRlggICJmaXJzdCBmaWQgbm90IGZyb20gbG8gZnJlcSB0YWJsZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gRldfQlVHIFBGWAorCQkJImZpcnN0IGZpZCBub3QgZnJvbSBsbyBmcmVxIHRhYmxlXG4iKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2VudHJ5KHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgZW50cnkpCit7CisJZGF0YS0+cG93ZXJub3dfdGFibGVbZW50cnldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfYmFzaWNzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKQogewogCWludCBqOwogCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1wczsgaisrKSB7Ci0JCWlmIChkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKSB7CisJCWlmIChkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgIT0KKwkJCQlDUFVGUkVRX0VOVFJZX0lOVkFMSUQpIHsKIAkJCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiICAgJWQgOiBwc3RhdGUgJWQgKCVkIE1IeilcbiIsCi0JCQkJCWosCisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkJIiAgICVkIDogcHN0YXRlICVkICglZCBNSHopXG4iLCBqLAogCQkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5pbmRleCwKIAkJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5LzEwMDApOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiICAgJWQgOiBmaWQgMHgleCAoJWQgTUh6KSwgdmlkIDB4JXhcbiIsCisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkJIiAgICVkIDogZmlkIDB4JXggKCVkIE1IeiksIHZpZCAweCV4XG4iLAogCQkJCQlqLAogCQkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5pbmRleCAmIDB4ZmYsCiAJCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeS8xMDAwLApAQCAtNjA0LDIwICs2NDIsMjUgQEAKIAkJfQogCX0KIAlpZiAoZGF0YS0+YmF0cHMpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJPbmx5ICVkIHBzdGF0ZXMgb24gYmF0dGVyeVxuIiwgZGF0YS0+YmF0cHMpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT25seSAlZCBwc3RhdGVzIG9uIGJhdHRlcnlcbiIsCisJCQkJZGF0YS0+YmF0cHMpOwogfQogCi1zdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBwc3RfcyAqcHN0LCB1OCBtYXh2aWQpCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXN0cnVjdCBwc3RfcyAqcHN0LCB1OCBtYXh2aWQpCiB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZTsKIAl1bnNpZ25lZCBpbnQgajsKIAotCWlmIChkYXRhLT5iYXRwcykgeyAgICAvKiB1c2UgQUNQSSBzdXBwb3J0IHRvIGdldCBmdWxsIHNwZWVkIG9uIG1haW5zIHBvd2VyICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJPbmx5ICVkIHBzdGF0ZXMgdXNhYmxlICh1c2UgQUNQSSBkcml2ZXIgZm9yIGZ1bGwgcmFuZ2VcbiIsIGRhdGEtPmJhdHBzKTsKKwlpZiAoZGF0YS0+YmF0cHMpIHsKKwkJLyogdXNlIEFDUEkgc3VwcG9ydCB0byBnZXQgZnVsbCBzcGVlZCBvbiBtYWlucyBwb3dlciAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJIk9ubHkgJWQgcHN0YXRlcyB1c2FibGUgKHVzZSBBQ1BJIGRyaXZlciBmb3IgZnVsbCAiCisJCQkicmFuZ2VcbiIsIGRhdGEtPmJhdHBzKTsKIAkJZGF0YS0+bnVtcHMgPSBkYXRhLT5iYXRwczsKIAl9CiAKLQlmb3IgKCBqPTE7IGo8ZGF0YS0+bnVtcHM7IGorKyApIHsKKwlmb3IgKGogPSAxOyBqIDwgZGF0YS0+bnVtcHM7IGorKykgewogCQlpZiAocHN0W2otMV0uZmlkID49IHBzdFtqXS5maWQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIlBTVCBvdXQgb2Ygc2VxdWVuY2VcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NDAsOSArNjgzLDExIEBACiAJfQogCiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bXBzOyBqKyspIHsKKwkJaW50IGZyZXE7CiAJCXBvd2Vybm93X3RhYmxlW2pdLmluZGV4ID0gcHN0W2pdLmZpZDsgLyogbG93ZXIgOCBiaXRzICovCiAJCXBvd2Vybm93X3RhYmxlW2pdLmluZGV4IHw9IChwc3Rbal0udmlkIDw8IDgpOyAvKiB1cHBlciA4IGJpdHMgKi8KLQkJcG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5ID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChwc3Rbal0uZmlkKTsKKwkJZnJlcSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQocHN0W2pdLmZpZCk7CisJCXBvd2Vybm93X3RhYmxlW2pdLmZyZXF1ZW5jeSA9IGZyZXE7CiAJfQogCXBvd2Vybm93X3RhYmxlW2RhdGEtPm51bXBzXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKIAlwb3dlcm5vd190YWJsZVtkYXRhLT5udW1wc10uaW5kZXggPSAwOwpAQCAtNjU4LDcgKzcwMyw4IEBACiAJCXByaW50X2Jhc2ljcyhkYXRhKTsKIAogCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1wczsgaisrKQotCQlpZiAoKHBzdFtqXS5maWQ9PWRhdGEtPmN1cnJmaWQpICYmIChwc3Rbal0udmlkPT1kYXRhLT5jdXJydmlkKSkKKwkJaWYgKChwc3Rbal0uZmlkID09IGRhdGEtPmN1cnJmaWQpICYmCisJCSAgICAocHN0W2pdLnZpZCA9PSBkYXRhLT5jdXJydmlkKSkKIAkJCXJldHVybiAwOwogCiAJZHByaW50aygiY3VycmZpZC92aWQgZG8gbm90IG1hdGNoIFBTVCwgaWdub3JpbmdcbiIpOwpAQCAtNjk4LDcgKzc0NCw4IEBACiAJCX0KIAogCQlkYXRhLT52c3RhYmxlID0gcHNiLT52c3RhYmxlOwotCQlkcHJpbnRrKCJ2b2x0YWdlIHN0YWJpbGl6YXRpb24gdGltZTogJWQoKjIwdXMpXG4iLCBkYXRhLT52c3RhYmxlKTsKKwkJZHByaW50aygidm9sdGFnZSBzdGFiaWxpemF0aW9uIHRpbWU6ICVkKCoyMHVzKVxuIiwKKwkJCQlkYXRhLT52c3RhYmxlKTsKIAogCQlkcHJpbnRrKCJmbGFnczI6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MyKTsKIAkJZGF0YS0+cnZvID0gcHNiLT5mbGFnczIgJiAzOwpAQCAtNzEzLDExICs3NjAsMTIgQEAKIAogCQlkcHJpbnRrKCJudW1wc3Q6IDB4JXhcbiIsIHBzYi0+bnVtX3RhYmxlcyk7CiAJCWNwc3QgPSBwc2ItPm51bV90YWJsZXM7Ci0JCWlmICgocHNiLT5jcHVpZCA9PSAweDAwMDAwZmMwKSB8fCAocHNiLT5jcHVpZCA9PSAweDAwMDAwZmUwKSApeworCQlpZiAoKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwKKwkJICAgIChwc2ItPmNwdWlkID09IDB4MDAwMDBmZTApKSB7CiAJCQl0aGlzY3B1aWQgPSBjcHVpZF9lYXgoQ1BVSURfUFJPQ0VTU09SX1NJR05BVFVSRSk7Ci0JCQlpZiAoKHRoaXNjcHVpZCA9PSAweDAwMDAwZmMwKSB8fCAodGhpc2NwdWlkID09IDB4MDAwMDBmZTApICkgeworCQkJaWYgKCh0aGlzY3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwKKwkJCSAgICAodGhpc2NwdWlkID09IDB4MDAwMDBmZTApKQogCQkJCWNwc3QgPSAxOwotCQkJfQogCQl9CiAJCWlmIChjcHN0ICE9IDEpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJudW1wc3QgbXVzdCBiZSAxXG4iKTsKQEAgLTczMiw3ICs3ODAsOCBAQAogCiAJCWRhdGEtPm51bXBzID0gcHNiLT5udW1wczsKIAkJZHByaW50aygibnVtcHN0YXRlczogMHgleFxuIiwgZGF0YS0+bnVtcHMpOwotCQlyZXR1cm4gZmlsbF9wb3dlcm5vd190YWJsZShkYXRhLCAoc3RydWN0IHBzdF9zICopKHBzYisxKSwgbWF4dmlkKTsKKwkJcmV0dXJuIGZpbGxfcG93ZXJub3dfdGFibGUoZGF0YSwKKwkJCQkoc3RydWN0IHBzdF9zICopKHBzYisxKSwgbWF4dmlkKTsKIAl9CiAJLyoKIAkgKiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSwgY29tcGxhaW4gdG8gQklPUyBtYW51ZmFjdHVyZXIuIElmCkBAIC03NDUsMjggKzc5NCwzMSBAQAogCSAqIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSwgd2hpY2ggaXMgYXZhaWxhYmxlIG9uCiAJICogd3d3LmFtZC5jb20KIAkgKi8KLQlwcmludGsoS0VSTl9FUlIgUEZYICJCSU9TIGVycm9yIC0gbm8gUFNCIG9yIEFDUEkgX1BTUyBvYmplY3RzXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiTm8gUFNCIG9yIEFDUEkgX1BTUyBvYmplY3RzXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQotc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCitzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXVuc2lnbmVkIGludCBpbmRleCkKIHsKKwlhY3BpX2ludGVnZXIgY29udHJvbDsKKwogCWlmICghZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IHx8IChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpKQogCQlyZXR1cm47CiAKLQlkYXRhLT5pcnQgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBJUlRfU0hJRlQpICYgSVJUX01BU0s7Ci0JZGF0YS0+cnZvID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaW5kZXhdLmNvbnRyb2wgPj4gUlZPX1NISUZUKSAmIFJWT19NQVNLOwotCWRhdGEtPmV4dHR5cGUgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBFWFRfVFlQRV9TSElGVCkgJiBFWFRfVFlQRV9NQVNLOwotCWRhdGEtPnBsbGxvY2sgPSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiBQTExfTF9TSElGVCkgJiBQTExfTF9NQVNLOwotCWRhdGEtPnZpZG12cyA9IDEgPDwgKChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IE1WU19TSElGVCkgJiBNVlNfTUFTSyk7Ci0JZGF0YS0+dnN0YWJsZSA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IFZTVF9TSElGVCkgJiBWU1RfTUFTSzsKLX0KKwljb250cm9sID0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbDsgZGF0YS0+aXJ0ID0gKGNvbnRyb2wKKwkJCT4+IElSVF9TSElGVCkgJiBJUlRfTUFTSzsgZGF0YS0+cnZvID0gKGNvbnRyb2wgPj4KKwkJCQlSVk9fU0hJRlQpICYgUlZPX01BU0s7IGRhdGEtPmV4dHR5cGUgPSAoY29udHJvbAorCQkJCQk+PiBFWFRfVFlQRV9TSElGVCkgJiBFWFRfVFlQRV9NQVNLOworCWRhdGEtPnBsbGxvY2sgPSAoY29udHJvbCA+PiBQTExfTF9TSElGVCkgJiBQTExfTF9NQVNLOyBkYXRhLT52aWRtdnMgPSAxCisJCTw8ICgoY29udHJvbCA+PiBNVlNfU0hJRlQpICYgTVZTX01BU0spOyBkYXRhLT52c3RhYmxlID0KKwkJKGNvbnRyb2wgPj4gVlNUX1NISUZUKSAmIFZTVF9NQVNLOyB9CiAKIHN0YXRpYyBpbnQgcG93ZXJub3dfazhfY3B1X2luaXRfYWNwaShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlOwogCWludCByZXRfdmFsID0gLUVOT0RFVjsKKwlhY3BpX2ludGVnZXIgc3BhY2VfaWQ7CiAKIAlpZiAoYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KSkgewogCQlkcHJpbnRrKCJyZWdpc3RlciBwZXJmb3JtYW5jZSBmYWlsZWQ6IGJhZCBBQ1BJIGRhdGFcbiIpOwpAQCAtNzc5LDExICs4MzEsMTIgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWlmICgoZGF0YS0+YWNwaV9kYXRhLmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHx8Ci0JCShkYXRhLT5hY3BpX2RhdGEuc3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSkgeworCXNwYWNlX2lkID0gZGF0YS0+YWNwaV9kYXRhLmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQ7CisJaWYgKChzcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgfHwKKwkJKHNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSkgewogCQlkcHJpbnRrKCJJbnZhbGlkIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoJXggLSAleClcbiIsCiAJCQlkYXRhLT5hY3BpX2RhdGEuY29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCwKLQkJCWRhdGEtPmFjcGlfZGF0YS5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQpOworCQkJc3BhY2VfaWQpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC04MDIsNyArODU1LDggQEAKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBlcnJfb3V0X21lbTsKIAotCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7CisJcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5mcmVxdWVuY3kgPQorCQlDUFVGUkVRX1RBQkxFX0VORDsKIAlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmluZGV4ID0gMDsKIAlkYXRhLT5wb3dlcm5vd190YWJsZSA9IHBvd2Vybm93X3RhYmxlOwogCkBAIC04MzAsMTMgKzg4NCwxNSBAQAogZXJyX291dDoKIAlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSk7CiAKLQkvKiBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgaW5mb3JtcyB1cyBhdCAtPmV4aXQoKSB3aGV0aGVyIEFDUEkgd2FzIHVzZWQgKi8KKwkvKiBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgaW5mb3JtcyB1cyBhdCAtPmV4aXQoKQorCSAqIHdoZXRoZXIgQUNQSSB3YXMgdXNlZCAqLwogCWRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCA9IDA7CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCiB7CiAJaW50IGk7CiAJdTMyIGhpID0gMCwgbG8gPSAwOwpAQCAtODQ4LDg0ICs5MDQsMTAxIEBACiAKIAkJaW5kZXggPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvbnRyb2wgJiBIV19QU1RBVEVfTUFTSzsKIAkJaWYgKGluZGV4ID4gZGF0YS0+bWF4X2h3X3BzdGF0ZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBwc3RhdGUgJWQgLSBiYWQgdmFsdWUgJWQuXG4iLCBpLCBpbmRleCk7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJQbGVhc2UgcmVwb3J0IHRvIEJJT1MgbWFudWZhY3R1cmVyXG4iKTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgcHN0YXRlICVkIC0gIgorCQkJCQkiYmFkIHZhbHVlICVkLlxuIiwgaSwgaW5kZXgpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUGxlYXNlIHJlcG9ydCB0byBCSU9TICIKKwkJCQkJIm1hbnVmYWN0dXJlclxuIik7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAkJcmRtc3IoTVNSX1BTVEFURV9ERUZfQkFTRSArIGluZGV4LCBsbywgaGkpOwogCQlpZiAoIShoaSAmIEhXX1BTVEFURV9WQUxJRF9NQVNLKSkgewogCQkJZHByaW50aygiaW52YWxpZCBwc3RhdGUgJWQsIGlnbm9yaW5nXG4iLCBpbmRleCk7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGluZGV4OwogCi0JCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOworCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPQorCQkJZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQorc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKKwkJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSkKIHsKIAlpbnQgaTsKIAlpbnQgY250bG9mcmVxID0gMDsKKwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7IGkrKykgewogCQl1MzIgZmlkOwogCQl1MzIgdmlkOworCQl1MzIgZnJlcSwgaW5kZXg7CisJCWFjcGlfaW50ZWdlciBzdGF0dXMsIGNvbnRyb2w7CiAKIAkJaWYgKGRhdGEtPmV4dHR5cGUpIHsKLQkJCWZpZCA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzICYgRVhUX0ZJRF9NQVNLOwotCQkJdmlkID0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzID4+IFZJRF9TSElGVCkgJiBFWFRfVklEX01BU0s7CisJCQlzdGF0dXMgPSAgZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5zdGF0dXM7CisJCQlmaWQgPSBzdGF0dXMgJiBFWFRfRklEX01BU0s7CisJCQl2aWQgPSAoc3RhdHVzID4+IFZJRF9TSElGVCkgJiBFWFRfVklEX01BU0s7CiAJCX0gZWxzZSB7Ci0JCQlmaWQgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvbnRyb2wgJiBGSURfTUFTSzsKLQkJCXZpZCA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvbnRyb2wgPj4gVklEX1NISUZUKSAmIFZJRF9NQVNLOworCQkJY29udHJvbCA9ICBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvbnRyb2w7CisJCQlmaWQgPSBjb250cm9sICYgRklEX01BU0s7CisJCQl2aWQgPSAoY29udHJvbCA+PiBWSURfU0hJRlQpICYgVklEX01BU0s7CiAJCX0KIAogCQlkcHJpbnRrKCIgICAlZCA6IGZpZCAweCV4LCB2aWQgMHgleFxuIiwgaSwgZmlkLCB2aWQpOwogCi0JCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4ID0gZmlkOyAvKiBsb3dlciA4IGJpdHMgKi8KLQkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggfD0gKHZpZCA8PCA4KTsgLyogdXBwZXIgOCBiaXRzICovCi0JCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZmlkKTsKKwkJaW5kZXggPSBmaWQgfCAodmlkPDw4KTsKKwkJcG93ZXJub3dfdGFibGVbaV0uaW5kZXggPSBpbmRleDsKKworCQlmcmVxID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChmaWQpOworCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBmcmVxOwogCiAJCS8qIHZlcmlmeSBmcmVxdWVuY3kgaXMgT0sgKi8KLQkJaWYgKChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPiAoTUFYX0ZSRVEgKiAxMDAwKSkgfHwKLQkJCShwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPCAoTUlOX0ZSRVEgKiAxMDAwKSkpIHsKLQkJCWRwcmludGsoImludmFsaWQgZnJlcSAldSBrSHosIGlnbm9yaW5nXG4iLCBwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kpOwotCQkJcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOworCQlpZiAoKGZyZXEgPiAoTUFYX0ZSRVEgKiAxMDAwKSkgfHwgKGZyZXEgPCAoTUlOX0ZSRVEgKiAxMDAwKSkpIHsKKwkJCWRwcmludGsoImludmFsaWQgZnJlcSAldSBrSHosIGlnbm9yaW5nXG4iLCBmcmVxKTsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIHZlcmlmeSB2b2x0YWdlIGlzIE9LIC0gQklPU3MgYXJlIHVzaW5nICJvZmYiIHRvIGluZGljYXRlIGludmFsaWQgKi8KKwkJLyogdmVyaWZ5IHZvbHRhZ2UgaXMgT0sgLQorCQkgKiBCSU9TcyBhcmUgdXNpbmcgIm9mZiIgdG8gaW5kaWNhdGUgaW52YWxpZCAqLwogCQlpZiAodmlkID09IFZJRF9PRkYpIHsKIAkJCWRwcmludGsoImludmFsaWQgdmlkICV1LCBpZ25vcmluZ1xuIiwgdmlkKTsKLQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCWludmFsaWRhdGVfZW50cnkoZGF0YSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIHZlcmlmeSBvbmx5IDEgZW50cnkgZnJvbSB0aGUgbG8gZnJlcXVlbmN5IHRhYmxlICovCiAJCWlmIChmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSB7CiAJCQlpZiAoY250bG9mcmVxKSB7Ci0JCQkJLyogaWYgYm90aCBlbnRyaWVzIGFyZSB0aGUgc2FtZSwgaWdub3JlIHRoaXMgb25lIC4uLiAqLwotCQkJCWlmICgocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ICE9IHBvd2Vybm93X3RhYmxlW2NudGxvZnJlcV0uZnJlcXVlbmN5KSB8fAotCQkJCSAgICAocG93ZXJub3dfdGFibGVbaV0uaW5kZXggIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5pbmRleCkpIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVG9vIG1hbnkgbG8gZnJlcSB0YWJsZSBlbnRyaWVzXG4iKTsKKwkJCQkvKiBpZiBib3RoIGVudHJpZXMgYXJlIHRoZSBzYW1lLAorCQkJCSAqIGlnbm9yZSB0aGlzIG9uZSAuLi4gKi8KKwkJCQlpZiAoKGZyZXEgIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5mcmVxdWVuY3kpIHx8CisJCQkJICAgIChpbmRleCAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmluZGV4KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJCQkiVG9vIG1hbnkgbG8gZnJlcSB0YWJsZSAiCisJCQkJCQkiZW50cmllc1xuIik7CiAJCQkJCXJldHVybiAxOwogCQkJCX0KIAotCQkJCWRwcmludGsoImRvdWJsZSBsb3cgZnJlcXVlbmN5IHRhYmxlIGVudHJ5LCBpZ25vcmluZyBpdC5cbiIpOwotCQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCQlkcHJpbnRrKCJkb3VibGUgbG93IGZyZXF1ZW5jeSB0YWJsZSBlbnRyeSwgIgorCQkJCQkJImlnbm9yaW5nIGl0LlxuIik7CisJCQkJaW52YWxpZGF0ZV9lbnRyeShkYXRhLCBpKTsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZQogCQkJCWNudGxvZnJlcSA9IGk7CiAJCX0KIAotCQlpZiAocG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5ICE9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJpbnZhbGlkIGZyZXEgZW50cmllcyAldSBrSHogdnMuICV1IGtIelxuIiwKLQkJCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3ksCi0JCQkJKHVuc2lnbmVkIGludCkgKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSk7Ci0JCQlwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7CisJCWlmIChmcmVxICE9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJpbnZhbGlkIGZyZXEgZW50cmllcyAiCisJCQkJIiV1IGtIeiB2cy4gJXUga0h6XG4iLCBmcmVxLAorCQkJCSh1bnNpZ25lZCBpbnQpCisJCQkJKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kKKwkJCQkgKiAxMDAwKSk7CisJCQlpbnZhbGlkYXRlX2VudHJ5KGRhdGEsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC05MzUsNyArMTAwOCw4IEBACiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9jcHVfZXhpdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKQogewogCWlmIChkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQpCi0JCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KTsKKwkJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLAorCQkJCWRhdGEtPmNwdSk7CiAJZnJlZV9jcHVtYXNrX3ZhcihkYXRhLT5hY3BpX2RhdGEuc2hhcmVkX2NwdV9tYXApOwogfQogCkBAIC05NTMsMTUgKzEwMjcsOSBAQAogCXJldHVybiAxMDAwICogbWF4X2xhdGVuY3k7CiB9CiAKLSNlbHNlCi1zdGF0aWMgaW50IHBvd2Vybm93X2s4X2NwdV9pbml0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpIHsgcmV0dXJuIC1FTk9ERVY7IH0KLXN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2NwdV9leGl0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkgeyByZXR1cm47IH0KLXN0YXRpYyBpbnQgZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSkgeyByZXR1cm4gMDsgfQotI2VuZGlmIC8qIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSSAqLwotCiAvKiBUYWtlIGEgZnJlcXVlbmN5LCBhbmQgaXNzdWUgdGhlIGZpZC92aWQgdHJhbnNpdGlvbiBjb21tYW5kICovCi1zdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXVuc2lnbmVkIGludCBpbmRleCkKIHsKIAl1MzIgZmlkID0gMDsKIAl1MzIgdmlkID0gMDsKQEAgLTk4OSw3ICsxMDU3LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKChmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSAmJiAoZGF0YS0+Y3VycmZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pKSB7CisJaWYgKChmaWQgPCBISV9GSURfVEFCTEVfQk9UVE9NKSAmJgorCSAgICAoZGF0YS0+Y3VycmZpZCA8IEhJX0ZJRF9UQUJMRV9CT1RUT00pKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJICAgICAgICJpZ25vcmluZyBpbGxlZ2FsIGNoYW5nZSBpbiBsbyBmcmVxIHRhYmxlLSV4IHRvIDB4JXhcbiIsCiAJCSAgICAgICBkYXRhLT5jdXJyZmlkLCBmaWQpOwpAQCAtMTAxNyw3ICsxMDg2LDggQEAKIH0KIAogLyogVGFrZSBhIGZyZXF1ZW5jeSwgYW5kIGlzc3VlIHRoZSBoYXJkd2FyZSBwc3RhdGUgdHJhbnNpdGlvbiBjb21tYW5kICovCi1zdGF0aWMgaW50IHRyYW5zaXRpb25fZnJlcXVlbmN5X3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsCisJCXVuc2lnbmVkIGludCBpbmRleCkKIHsKIAl1MzIgcHN0YXRlID0gMDsKIAlpbnQgcmVzLCBpOwpAQCAtMTAyOSw3ICsxMDk5LDggQEAKIAlwc3RhdGUgPSBpbmRleCAmIEhXX1BTVEFURV9NQVNLOwogCWlmIChwc3RhdGUgPiBkYXRhLT5tYXhfaHdfcHN0YXRlKQogCQlyZXR1cm4gMDsKLQlmcmVxcy5vbGQgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBkYXRhLT5jdXJycHN0YXRlKTsKKwlmcmVxcy5vbGQgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZnJlcXMubmV3ID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgcHN0YXRlKTsKIAogCWZvcl9lYWNoX2NwdV9tYXNrX25yKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgewpAQCAtMTA0OCw3ICsxMTE5LDggQEAKIH0KIAogLyogRHJpdmVyIGVudHJ5IHBvaW50IHRvIHN3aXRjaCB0byB0aGUgdGFyZ2V0IGZyZXF1ZW5jeSAqLwotc3RhdGljIGludCBwb3dlcm5vd2s4X3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCwgdW5zaWduZWQgdGFyZ2ZyZXEsIHVuc2lnbmVkIHJlbGF0aW9uKQorc3RhdGljIGludCBwb3dlcm5vd2s4X3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCwKKwkJdW5zaWduZWQgdGFyZ2ZyZXEsIHVuc2lnbmVkIHJlbGF0aW9uKQogewogCWNwdW1hc2tfdCBvbGRtYXNrOwogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gcGVyX2NwdShwb3dlcm5vd19kYXRhLCBwb2wtPmNwdSk7CkBAIC0xMDg3LDE0ICsxMTU5LDE4IEBACiAJCWRwcmludGsoInRhcmc6IGN1cnIgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAotCQlpZiAoKGNoZWNrdmlkICE9IGRhdGEtPmN1cnJ2aWQpIHx8IChjaGVja2ZpZCAhPSBkYXRhLT5jdXJyZmlkKSkgeworCQlpZiAoKGNoZWNrdmlkICE9IGRhdGEtPmN1cnJ2aWQpIHx8CisJCSAgICAoY2hlY2tmaWQgIT0gZGF0YS0+Y3VycmZpZCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCQkJImVycm9yIC0gb3V0IG9mIHN5bmMsIGZpeCAweCV4IDB4JXgsIHZpZCAweCV4IDB4JXhcbiIsCi0JCQkJY2hlY2tmaWQsIGRhdGEtPmN1cnJmaWQsIGNoZWNrdmlkLCBkYXRhLT5jdXJydmlkKTsKKwkJCQkiZXJyb3IgLSBvdXQgb2Ygc3luYywgZml4IDB4JXggMHgleCwgIgorCQkJCSJ2aWQgMHgleCAweCV4XG4iLAorCQkJCWNoZWNrZmlkLCBkYXRhLT5jdXJyZmlkLAorCQkJCWNoZWNrdmlkLCBkYXRhLT5jdXJydmlkKTsKIAkJfQogCX0KIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9sLCBkYXRhLT5wb3dlcm5vd190YWJsZSwgdGFyZ2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9sLCBkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCQl0YXJnZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCWdvdG8gZXJyX291dDsKIAogCW11dGV4X2xvY2soJmZpZHZpZF9tdXRleCk7CkBAIC0xMTE0LDcgKzExOTAsOCBAQAogCW11dGV4X3VubG9jaygmZmlkdmlkX211dGV4KTsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCi0JCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgbmV3c3RhdGUpOworCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsCisJCQkJbmV3c3RhdGUpOwogCWVsc2UKIAkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCXJldCA9IDA7CkBAIC0xMTQxLDYgKzEyMTgsNyBAQAogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrOwogCWludCByYzsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CiAKIAlpZiAoIWNwdV9vbmxpbmUocG9sLT5jcHUpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTExNjMsMzMgKzEyNDEsMzEgQEAKIAkJICogYW4gVVAgdmVyc2lvbiwgYW5kIGlzIGRlcHJlY2F0ZWQgYnkgQU1ELgogCQkgKi8KIAkJaWYgKG51bV9vbmxpbmVfY3B1cygpICE9IDEpIHsKLSNpZm5kZWYgQ09ORklHX0FDUElfUFJPQ0VTU09SCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJBQ1BJIFByb2Nlc3NvciBzdXBwb3J0IGlzIHJlcXVpcmVkICIKLQkJCSAgICAgICAiZm9yIFNNUCBzeXN0ZW1zIGJ1dCBpcyBhYnNlbnQuIFBsZWFzZSBsb2FkIHRoZSAiCi0JCQkgICAgICAgIkFDUEkgUHJvY2Vzc29yIG1vZHVsZSBiZWZvcmUgc3RhcnRpbmcgdGhpcyAiCi0JCQkgICAgICAgImRyaXZlci5cbiIpOwotI2Vsc2UKLQkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJZb3VyIEJJT1MgZG9lcyBub3QgcHJvdmlkZSIKLQkJCSAgICAgICAiIEFDUEkgX1BTUyBvYmplY3RzIGluIGEgd2F5IHRoYXQgTGludXggIgotCQkJICAgICAgICJ1bmRlcnN0YW5kcy4gUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHRoZSBMaW51eCAiCi0JCQkgICAgICAgIkFDUEkgbWFpbnRhaW5lcnMgYW5kIGNvbXBsYWluIHRvIHlvdXIgQklPUyAiCi0JCQkgICAgICAgInZlbmRvci5cbiIpOwotI2VuZGlmCi0JCQlrZnJlZShkYXRhKTsKLQkJCXJldHVybiAtRU5PREVWOworCQkJLyoKKwkJCSAqIFJlcGxhY2UgdGhpcyBvbmUgd2l0aCBwcmludF9vbmNlIGFzIHNvb24gYXMgc3VjaCBhCisJCQkgKiB0aGluZyBnZXRzIGludHJvZHVjZWQKKwkJCSAqLworCQkJaWYgKCFwcmludF9vbmNlKSB7CisJCQkJV0FSTl9PTkNFKDEsIEtFUk5fRVJSIEZXX0JVRyBQRlggIllvdXIgQklPUyAiCisJCQkJCSJkb2VzIG5vdCBwcm92aWRlIEFDUEkgX1BTUyBvYmplY3RzICIKKwkJCQkJImluIGEgd2F5IHRoYXQgTGludXggdW5kZXJzdGFuZHMuICIKKwkJCQkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byB0aGUgTGludXggQUNQSSIKKwkJCQkJIiBtYWludGFpbmVycyBhbmQgY29tcGxhaW4gdG8geW91ciAiCisJCQkJCSJCSU9TIHZlbmRvci5cbiIpOworCQkJCXByaW50X29uY2UrKzsKKwkJCX0KKwkJCWdvdG8gZXJyX291dDsKIAkJfQogCQlpZiAocG9sLT5jcHUgIT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIk5vIEFDUEkgX1BTUyBvYmplY3RzIGZvciAiCiAJCQkgICAgICAgIkNQVSBvdGhlciB0aGFuIENQVTAuIENvbXBsYWluIHRvIHlvdXIgQklPUyAiCiAJCQkgICAgICAgInZlbmRvci5cbiIpOwotCQkJa2ZyZWUoZGF0YSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX291dDsKIAkJfQogCQlyYyA9IGZpbmRfcHNiX3RhYmxlKGRhdGEpOwotCQlpZiAocmMpIHsKLQkJCWtmcmVlKGRhdGEpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkJaWYgKHJjKQorCQkJZ290byBlcnJfb3V0OworCiAJCS8qIFRha2UgYSBjcnVkZSBndWVzcyBoZXJlLgogCQkgKiBUaGF0IGd1ZXNzIHdhcyBpbiBtaWNyb3NlY29uZHMsIHNvIG11bHRpcGx5IHdpdGggMTAwMCAqLwogCQlwb2wtPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gKApAQCAtMTIwNCwxNiArMTI4MCwxNiBAQAogCiAJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBwb2wtPmNwdSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJsaW1pdGluZyB0byBjcHUgJXUgZmFpbGVkXG4iLCBwb2wtPmNwdSk7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAl9CiAKIAlpZiAocGVuZGluZ19iaXRfc3R1Y2soKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsaW5nIGluaXQsIGNoYW5nZSBwZW5kaW5nIGJpdCBzZXRcbiIpOwotCQlnb3RvIGVycl9vdXQ7CisJCWdvdG8gZXJyX291dF91bm1hc2s7CiAJfQogCiAJaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKQotCQlnb3RvIGVycl9vdXQ7CisJCWdvdG8gZXJyX291dF91bm1hc2s7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfT1BURVJPTikKIAkJZmlkdmlkX21zcl9pbml0KCk7CkBAIC0xMjI4LDcgKzEzMDQsOCBAQAogCWRhdGEtPmF2YWlsYWJsZV9jb3JlcyA9IHBvbC0+Y3B1czsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCi0JCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwgZGF0YS0+Y3VycnBzdGF0ZSk7CisJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKKwkJCQlkYXRhLT5jdXJycHN0YXRlKTsKIAllbHNlCiAJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlkcHJpbnRrKCJwb2xpY3kgY3VycmVudCBmcmVxdWVuY3kgJWQga0h6XG4iLCBwb2wtPmN1cik7CkBAIC0xMjQ1LDcgKzEzMjIsOCBAQAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBwb2wtPmNwdSk7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IHBzdGF0ZSAweCV4XG4iLCBkYXRhLT5jdXJycHN0YXRlKTsKKwkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBwc3RhdGUgMHgleFxuIiwKKwkJCQlkYXRhLT5jdXJycHN0YXRlKTsKIAllbHNlCiAJCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CkBAIC0xMjU0LDE1ICsxMzMyLDE2IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX291dDoKK2Vycl9vdXRfdW5tYXNrOgogCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGRtYXNrKTsKIAlwb3dlcm5vd19rOF9jcHVfZXhpdF9hY3BpKGRhdGEpOwogCitlcnJfb3V0OgogCWtmcmVlKGRhdGEpOwogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBwb3dlcm5vd2s4X2NwdV9leGl0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBvd2Vybm93azhfY3B1X2V4aXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wpCiB7CiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEgPSBwZXJfY3B1KHBvd2Vybm93X2RhdGEsIHBvbC0+Y3B1KTsKIApAQCAtMTI3OSw3ICsxMzU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm5vd2s4X2dldCAodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG93ZXJub3drOF9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YTsKIAljcHVtYXNrX3Qgb2xkbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKQEAgLTEzMTUsNyArMTM5NCw3IEBACiAJcmV0dXJuIGtoejsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHBvd2Vybm93X2s4X2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpwb3dlcm5vd19rOF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMTM2MCw3ICsxNDM5LDggQEAKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZjcHVmcmVxX2FtZDY0X2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlBhdWwgRGV2cmllbmR0IDxwYXVsLmRldnJpZW5kdEBhbWQuY29tPiBhbmQgTWFyayBMYW5nc2RvcmYgPG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQYXVsIERldnJpZW5kdCA8cGF1bC5kZXZyaWVuZHRAYW1kLmNvbT4gYW5kICIKKwkJIk1hcmsgTGFuZ3Nkb3JmIDxtYXJrLmxhbmdzZG9yZkBhbWQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgQXRobG9uIDY0IGFuZCBPcHRlcm9uIHByb2Nlc3NvciBmcmVxdWVuY3kgZHJpdmVyLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCmluZGV4IDhlY2M3NWIuLjZjNjY5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCkBAIC00NSwxMSArNDUsMTAgQEAKIAkgKiBmcmVxdWVuY3kgaXMgaW4ga0h6ICovCiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICAqcG93ZXJub3dfdGFibGU7CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKIAkvKiB0aGUgYWNwaSB0YWJsZSBuZWVkcyB0byBiZSBrZXB0LiBpdCdzIG9ubHkgYXZhaWxhYmxlIGlmIEFDUEkgd2FzCiAJICogdXNlZCB0byBkZXRlcm1pbmUgdmFsaWQgZnJlcXVlbmN5L3ZpZC9maWQgc3RhdGVzICovCiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlIGFjcGlfZGF0YTsKLSNlbmRpZgorCiAJLyogd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGFzc29jaWF0ZWQgY29yZXMsIGJ1dCBsZXQgY3B1ZnJlcQogCSAqIGhhbmRsZSBob3RwbHVnIGV2ZW50cyAtIHNvIGp1c3QgcG9pbnQgYXQgY3B1ZnJlcSBwb2wtPmNwdXMKIAkgKiBzdHJ1Y3R1cmUgKi8KQEAgLTIyMiwxMCArMjIxLDggQEAKIAogc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9QT1dFUk5PV19LOF9BQ1BJCiBzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKTsKIHN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVmaW5lX3NpYmxpbmdzKGludCBjcHUsIGNwdW1hc2tfdCBjcHVfc2hhcmVkY29yZV9tYXNrW10pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwppbmRleCA0MmRhOWJkLi40MzVhOTk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKQEAgLTE5LDE3ICsxOSwxOSBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIE1NQ1JfQkFTRQkweGZmZmVmMDAwCS8qIFRoZSBkZWZhdWx0IGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBPRkZTX0NQVUNUTAkweDIgICAvKiBDUFUgQ29udHJvbCBSZWdpc3RlciAqLwogCiBzdGF0aWMgX191OCBfX2lvbWVtICpjcHVjdGw7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic2M1MjBfZnJlcSIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJzYzUyMF9mcmVxIiwgbXNnKQorI2RlZmluZSBQRlggInNjNTIwX2ZyZXE6ICIKIAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBzYzUyMF9mcmVxX3RhYmxlW10gPSB7CiAJezB4MDEsCTEwMDAwMH0sCkBAIC00Myw3ICs0NSw4IEBACiAKIAlzd2l0Y2ggKGNsb2Nrc3BlZWRfcmVnICYgMHgwMykgewogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAic2M1MjBfZnJlcTogZXJyb3I6IGNwdWN0bCByZWdpc3RlciBoYXMgdW5leHBlY3RlZCB2YWx1ZSAlMDJ4XG4iLCBjbG9ja3NwZWVkX3JlZyk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yOiBjcHVjdGwgcmVnaXN0ZXIgaGFzIHVuZXhwZWN0ZWQgIgorCQkJCSJ2YWx1ZSAlMDJ4XG4iLCBjbG9ja3NwZWVkX3JlZyk7CiAJY2FzZSAweDAxOgogCQlyZXR1cm4gMTAwMDAwOwogCWNhc2UgMHgwMjoKQEAgLTUxLDcgKzU0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNjNTIwX2ZyZXFfc2V0X2NwdV9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlKHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzCWZyZXFzOwpAQCAtNzYsMTggKzc5LDE5IEBACiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiB9OwogCi1zdGF0aWMgaW50IHNjNTIwX2ZyZXFfdmVyaWZ5IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgc2M1MjBfZnJlcV92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksICZzYzUyMF9mcmVxX3RhYmxlWzBdKTsKIH0KIAotc3RhdGljIGludCBzYzUyMF9mcmVxX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHNjNTIwX2ZyZXFfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlID0gMDsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBzYzUyMF9mcmVxX3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUsCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNjNTIwX2ZyZXFfc2V0X2NwdV9zdGF0ZShuZXdzdGF0ZSk7CkBAIC0xMTYsNyArMTIwLDcgQEAKIAogCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBzYzUyMF9mcmVxX3RhYmxlKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzYzUyMF9mcmVxX3RhYmxlLCBwb2xpY3ktPmNwdSk7CiAKQEAgLTEzMSw3ICsxMzUsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBzYzUyMF9mcmVxX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpzYzUyMF9mcmVxX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0xNTUsMTMgKzE1OSwxMyBAQAogCWludCBlcnI7CiAKIAkvKiBUZXN0IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IGhhcmR3YXJlICovCi0JaWYoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAotCQkJCWMtPng4NiAhPSA0IHx8IGMtPng4Nl9tb2RlbCAhPSA5KSB7CisJaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKKwkgICAgYy0+eDg2ICE9IDQgfHwgYy0+eDg2X21vZGVsICE9IDkpIHsKIAkJZHByaW50aygibm8gRWxhbiBTQzUyMCBwcm9jZXNzb3IgZm91bmQhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWNwdWN0bCA9IGlvcmVtYXAoKHVuc2lnbmVkIGxvbmcpKE1NQ1JfQkFTRSArIE9GRlNfQ1BVQ1RMKSwgMSk7Ci0JaWYoIWNwdWN0bCkgeworCWlmICghY3B1Y3RsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2M1MjBfZnJlcTogZXJyb3I6IGZhaWxlZCB0byByZW1hcCBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCBkZWRjMWU5Li44YmJiMTFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAogLyogc3BlZWRzdGVwX3Byb2Nlc3NvcgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yOwogCiBzdGF0aWMgdTMyIHBtYmFzZTsKIApAQCAtNTQsNyArNTQsOCBAQAogfTsKIAogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1pY2giLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLWljaCIsIG1zZykKIAogCiAvKioKQEAgLTYyLDcgKzYzLDcgQEAKICAqCiAgKiBSZXR1cm5zOiAtRU5PREVWIGlmIG5vIHJlZ2lzdGVyIGNvdWxkIGJlIGZvdW5kCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9maW5kX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaWYgKCFzcGVlZHN0ZXBfY2hpcHNldF9kZXYpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtOTAsNyArOTEsNyBAQAogICoKICAqICAgVHJpZXMgdG8gY2hhbmdlIHRoZSBTcGVlZFN0ZXAgc3RhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUgKHVuc2lnbmVkIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNwZWVkc3RlcF9zZXRfc3RhdGUodW5zaWduZWQgaW50IHN0YXRlKQogewogCXU4IHBtMl9ibGs7CiAJdTggdmFsdWU7CkBAIC0xMzMsMTEgKzEzNCwxMSBAQAogCiAJZHByaW50aygicmVhZCBhdCBwbWJhc2UgMHgleCArIDB4NTAgcmV0dXJuZWQgMHgleFxuIiwgcG1iYXNlLCB2YWx1ZSk7CiAKLQlpZiAoc3RhdGUgPT0gKHZhbHVlICYgMHgxKSkgewotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZFxuIiwgKHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKSAvIDEwMDApKTsKLQl9IGVsc2UgewotCQlwcmludGsgKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgZmFpbGVkIC0gSS9PIGVycm9yXG4iKTsKLQl9CisJaWYgKHN0YXRlID09ICh2YWx1ZSAmIDB4MSkpCisJCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkXG4iLAorCQkJc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3NvcikgLyAxMDAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIGZhaWxlZCAtIEkvTyBlcnJvclxuIik7CiAKIAlyZXR1cm47CiB9CkBAIC0xNDksNyArMTUwLDcgQEAKICAqICAgVHJpZXMgdG8gYWN0aXZhdGUgdGhlIFNwZWVkU3RlcCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLgogICogUmV0dXJucyAtRUlOVkFMIG9uIGFuIHVuc3VwcG9ydGVkIGNoaXBzZXQsIGFuZCB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX2FjdGl2YXRlICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfYWN0aXZhdGUodm9pZCkKIHsKIAl1MTYgdmFsdWUgPSAwOwogCkBAIC0xNzUsMjAgKzE3NiwxOCBAQAogICogZnVuY3Rpb25zLiBSZXR1cm5zIHRoZSBTUEVFRFNURVBfQ0hJUFNFVF8tbnVtYmVyIGZvciB0aGUgZGV0ZWN0ZWQKICAqIGNoaXBzZXQsIG9yIHplcm8gb24gZmFpbHVyZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X2NoaXBzZXQgKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCh2b2lkKQogewogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KQogCQlyZXR1cm4gNDsgLyogNC1NICovCiAKIAlzcGVlZHN0ZXBfY2hpcHNldF9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAJaWYgKHNwZWVkc3RlcF9jaGlwc2V0X2RldikKIAkJcmV0dXJuIDM7IC8qIDMtTSAqLwpAQCAtMTk2LDggKzE5NSw3IEBACiAKIAlzcGVlZHN0ZXBfY2hpcHNldF9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzEwLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAJaWYgKHNwZWVkc3RlcF9jaGlwc2V0X2RldikgewogCQkvKiBzcGVlZHN0ZXAuYyBjYXVzZXMgbG9ja3VwcyBvbiBEZWxsIEluc3Bpcm9ucyA4MDAwIGFuZApAQCAtMjA4LDggKzIwNiw3IEBACiAKIAkJaG9zdGJyaWRnZSAgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJICAgICAgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxNV9NQywKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCiAJCWlmICghaG9zdGJyaWRnZSkKQEAgLTIzNiw3ICsyMzMsNyBAQAogCiAJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdXMpOwotCXNwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOworCXNwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdXNfYWxsb3dlZCk7CiAJZHByaW50aygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBzcGVlZCk7CiAJcmV0dXJuIHNwZWVkOwpAQCAtMjUxLDExICsyNDgsMTIgQEAKICAqIHNwZWVkc3RlcF90YXJnZXQgLSBzZXQgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqIEBwb2xpY3k6IG5ldyBwb2xpY3kKICAqIEB0YXJnZXRfZnJlcTogdGhlIHRhcmdldCBmcmVxdWVuY3kKLSAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5IChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQorICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kKKyAqCShDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQogICoKICAqIFNldHMgYSBuZXcgQ1BVRnJlcSBwb2xpY3kuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKIAkJCSAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQogewpAQCAtMjY0LDcgKzI2Miw4IEBACiAJY3B1bWFza190IGNwdXNfYWxsb3dlZDsKIAlpbnQgaTsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZyZXFzLm9sZCA9IF9zcGVlZHN0ZXBfZ2V0KHBvbGljeS0+Y3B1cyk7CkBAIC0zMDgsNyArMzA3LDcgQEAKICAqIExpbWl0IG11c3QgYmUgd2l0aGluIHNwZWVkc3RlcF9sb3dfZnJlcSBhbmQgc3BlZWRzdGVwX2hpZ2hfZnJlcSwgd2l0aAogICogYXQgbGVhc3Qgb25lIGJvcmRlciBpbmNsdWRlZC4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSk7CiB9CkBAIC0zNDQsNyArMzQzLDggQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlkcHJpbnRrKCJjdXJyZW50bHkgYXQgJXMgc3BlZWQgc2V0dGluZyAtICVpIE1IelxuIiwKLQkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpID8gImxvdyIgOiAiaGlnaCIsCisJCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KQorCQk/ICJsb3ciIDogImhpZ2giLAogCQkoc3BlZWQgLyAxMDAwKSk7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KQEAgLTM1Miw5ICszNTIsOSBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNwZWVkc3RlcF9mcmVxcyk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCi0gICAgICAgIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNwZWVkc3RlcF9mcmVxcywgcG9saWN5LT5jcHUpOworCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNwZWVkc3RlcF9mcmVxcywgcG9saWN5LT5jcHUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjYsNyArMzY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNwZWVkc3RlcF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc3BlZWRzdGVwX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zOTYsMTMgKzM5NiwxNSBAQAogCS8qIGRldGVjdCBwcm9jZXNzb3IgKi8KIAlzcGVlZHN0ZXBfcHJvY2Vzc29yID0gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKTsKIAlpZiAoIXNwZWVkc3RlcF9wcm9jZXNzb3IpIHsKLQkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBjYXBhYmxlIHByb2Nlc3NvciBub3QgZm91bmRcbiIpOworCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGNhcGFibGUgcHJvY2Vzc29yICIKKwkJCQkibm90IGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogZGV0ZWN0IGNoaXBzZXQgKi8KIAlpZiAoIXNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCgpKSB7Ci0JCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgZm9yIHRoaXMgY2hpcHNldCBub3QgKHlldCkgYXZhaWxhYmxlLlxuIik7CisJCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgZm9yIHRoaXMgY2hpcHNldCBub3QgIgorCQkJCSIoeWV0KSBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC00MzEsOSArNDMzLDExIEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJbnRlbCBtb2JpbGUgcHJvY2Vzc29ycyBvbiBjaGlwc2V0cyB3aXRoIElDSC1NIHNvdXRoYnJpZGdlcy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgIgorCQkiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJbnRlbCBtb2JpbGUgcHJvY2Vzc29ycyBvbiBjaGlwc2V0cyAiCisJCSJ3aXRoIElDSC1NIHNvdXRoYnJpZGdlcy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoc3BlZWRzdGVwX2luaXQpOwogbW9kdWxlX2V4aXQoc3BlZWRzdGVwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKaW5kZXggY2RhYzdkNi4uMmUzYzY4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCkBAIC0xNiwxMiArMTYsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzcGVlZHN0ZXAtbGliIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNwZWVkc3RlcC1saWIiLCBtc2cpCisKKyNkZWZpbmUgUEZYICJzcGVlZHN0ZXAtbGliOiAiCiAKICNpZmRlZiBDT05GSUdfWDg2X1NQRUVEU1RFUF9SRUxBWEVEX0NBUF9DSEVDSwotc3RhdGljIGludCByZWxheGVkX2NoZWNrID0gMDsKK3N0YXRpYyBpbnQgcmVsYXhlZF9jaGVjazsKICNlbHNlCiAjZGVmaW5lIHJlbGF4ZWRfY2hlY2sgMAogI2VuZGlmCkBAIC0zMCwxNCArMzQsMTQgQEAKICAqICAgICAgICAgICAgICAgICAgIEdFVCBQUk9DRVNTT1IgQ09SRSBTUEVFRCBJTiBLSFogICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGVudGl1bTNfZ2V0X2ZyZXF1ZW5jeSAodW5zaWduZWQgaW50IHByb2Nlc3NvcikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVudGl1bTNfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQogewotICAgICAgICAvKiBTZWUgdGFibGUgMTQgb2YgcDNfZHMucGRmIGFuZCB0YWJsZSAyMiBvZiAyOTgzNDAwMy5wZGYgKi8KKwkvKiBTZWUgdGFibGUgMTQgb2YgcDNfZHMucGRmIGFuZCB0YWJsZSAyMiBvZiAyOTgzNDAwMy5wZGYgKi8KIAlzdHJ1Y3QgewogCQl1bnNpZ25lZCBpbnQgcmF0aW87CS8qIEZyZXF1ZW5jeSBNdWx0aXBsaWVyICh4MTApICovCiAJCXU4IGJpdG1hcDsJCS8qIHBvd2VyIG9uIGNvbmZpZ3VyYXRpb24gYml0cwogCQkJCQlbMjcsIDI1OjIyXSAoaW4gTVNSIDB4MmEpICovCi0JfSBtc3JfZGVjb2RlX211bHQgW10gPSB7CisJfSBtc3JfZGVjb2RlX211bHRbXSA9IHsKIAkJeyAzMCwgMHgwMSB9LAogCQl7IDM1LCAweDA1IH0sCiAJCXsgNDAsIDB4MDIgfSwKQEAgLTUyLDcgKzU2LDcgQEAKIAkJeyA4NSwgMHgyNiB9LAogCQl7IDkwLCAweDIwIH0sCiAJCXsgMTAwLCAweDJiIH0sCi0JCXsgMCwgMHhmZiB9ICAgICAvKiBlcnJvciBvciB1bmtub3duIHZhbHVlICovCisJCXsgMCwgMHhmZiB9CS8qIGVycm9yIG9yIHVua25vd24gdmFsdWUgKi8KIAl9OwogCiAJLyogUElJSSgtTSkgRlNCIHNldHRpbmdzOiBzZWUgdGFibGUgYjEtYiBvZiAyNDU0NzIwNi5wZGYgKi8KQEAgLTYwLDcgKzY0LDcgQEAKIAkJdW5zaWduZWQgaW50IHZhbHVlOwkvKiBGcm9udCBTaWRlIEJ1cyBzcGVlZCBpbiBNSHogKi8KIAkJdTggYml0bWFwOwkJLyogcG93ZXIgb24gY29uZmlndXJhdGlvbiBiaXRzIFsxODogMTldCiAJCQkJCShpbiBNU1IgMHgyYSkgKi8KLQl9IG1zcl9kZWNvZGVfZnNiIFtdID0geworCX0gbXNyX2RlY29kZV9mc2JbXSA9IHsKIAkJeyAgNjYsIDB4MCB9LAogCQl7IDEwMCwgMHgyIH0sCiAJCXsgMTMzLCAweDEgfSwKQEAgLTg1LDcgKzg5LDcgQEAKIAl9CiAKIAkvKiBkZWNvZGUgdGhlIG11bHRpcGxpZXIgKi8KLQlpZiAocHJvY2Vzc29yID09IFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZKSB7CisJaWYgKHByb2Nlc3NvciA9PSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWSkgewogCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIGZvciBlYXJseSBQSUlJc1xuIik7CiAJCW1zcl9sbyAmPSAweDAzYzAwMDAwOwogCX0gZWxzZQpAQCAtOTcsOSArMTAxLDEwIEBACiAJCWorKzsKIAl9CiAKLQlkcHJpbnRrKCJzcGVlZCBpcyAldVxuIiwgKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKSk7CisJZHByaW50aygic3BlZWQgaXMgJXVcbiIsCisJCShtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMCkpOwogCi0JcmV0dXJuIChtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMCk7CisJcmV0dXJuIG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwOwogfQogCiAKQEAgLTExMiwyMCArMTE3LDIzIEBACiAKIAkvKiBzZWUgdGFibGUgQi0yIG9mIDI0NTQ3MjEyLnBkZiAqLwogCWlmIChtc3JfbG8gJiAweDAwMDQwMDAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJzcGVlZHN0ZXAtbGliOiBQTSAtIGludmFsaWQgRlNCOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUE0gLSBpbnZhbGlkIEZTQjogMHgleCAweCV4XG4iLAorCQkJCW1zcl9sbywgbXNyX3RtcCk7CiAJCXJldHVybiAwOwogCX0KIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsIG1zcl90bXAsIChtc3JfdG1wICogMTAwICogMTAwMCkpOworCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLAorCQkJbXNyX3RtcCwgKG1zcl90bXAgKiAxMDAgKiAxMDAwKSk7CiAKLQlyZXR1cm4gKG1zcl90bXAgKiAxMDAgKiAxMDAwKTsKKwlyZXR1cm4gbXNyX3RtcCAqIDEwMCAqIDEwMDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGVudGl1bV9jb3JlX2dldF9mcmVxdWVuY3kodm9pZCkKIHsKIAl1MzIgZnNiID0gMDsKIAl1MzIgbXNyX2xvLCBtc3JfdG1wOworCWludCByZXQ7CiAKIAlyZG1zcihNU1JfRlNCX0ZSRVEsIG1zcl9sbywgbXNyX3RtcCk7CiAJLyogc2VlIHRhYmxlIEItMiBvZiAyNTM2NjkyMC5wZGYgKi8KQEAgLTE1MywxMiArMTYxLDE1IEBACiAJfQogCiAJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIG1zcl9sbywgbXNyX3RtcCk7Ci0JZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl90bXApOworCWRwcmludGsoIlBDT1JFIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwKKwkJCW1zcl9sbywgbXNyX3RtcCk7CiAKIAltc3JfdG1wID0gKG1zcl9sbyA+PiAyMikgJiAweDFmOwotCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLCBtc3JfdG1wLCAobXNyX3RtcCAqIGZzYikpOworCWRwcmludGsoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLAorCQkJbXNyX3RtcCwgKG1zcl90bXAgKiBmc2IpKTsKIAotCXJldHVybiAobXNyX3RtcCAqIGZzYik7CisJcmV0ID0gKG1zcl90bXAgKiBmc2IpOworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMTY3LDYgKzE3OCwxNiBAQAogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOwogCXUzMiBtc3JfbG8sIG1zcl9oaSwgbXVsdDsKIAl1bnNpZ25lZCBpbnQgZnNiID0gMDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCXU4IGZzYl9jb2RlOworCisJLyogUGVudGl1bSA0IE1vZGVsIDAgYW5kIDEgZG8gbm90IGhhdmUgdGhlIENvcmUgQ2xvY2sgRnJlcXVlbmN5CisJICogdG8gU3lzdGVtIEJ1cyBGcmVxdWVuY3kgUmF0aW8gRmllbGQgaW4gdGhlIFByb2Nlc3NvciBGcmVxdWVuY3kKKwkgKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIG9mIHRoZSBNU1IuIFRoZXJlZm9yZSB0aGUgY3VycmVudAorCSAqIGZyZXF1ZW5jeSBjYW5ub3QgYmUgY2FsY3VsYXRlZCBhbmQgaGFzIHRvIGJlIG1lYXN1cmVkLgorCSAqLworCWlmIChjLT54ODZfbW9kZWwgPCAyKQorCQlyZXR1cm4gY3B1X2toejsKIAogCXJkbXNyKDB4MmMsIG1zcl9sbywgbXNyX2hpKTsKIApAQCAtMTc3LDYyICsxOTgsNjEgQEAKIAkgKiByZXZpc2lvbiAjMTIgaW4gVGFibGUgQi0xOiBNU1JzIGluIHRoZSBQZW50aXVtIDQgYW5kCiAJICogSW50ZWwgWGVvbiBQcm9jZXNzb3JzLCBvbiBwYWdlIEItNCBhbmQgQi01LgogCSAqLwotCWlmIChjLT54ODZfbW9kZWwgPCAyKQorCWZzYl9jb2RlID0gKG1zcl9sbyA+PiAxNikgJiAweDc7CisJc3dpdGNoIChmc2JfY29kZSkgeworCWNhc2UgMDoKIAkJZnNiID0gMTAwICogMTAwMDsKLQllbHNlIHsKLQkJdTggZnNiX2NvZGUgPSAobXNyX2xvID4+IDE2KSAmIDB4NzsKLQkJc3dpdGNoIChmc2JfY29kZSkgewotCQljYXNlIDA6Ci0JCQlmc2IgPSAxMDAgKiAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWZzYiA9IDEzMzMzICogMTA7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJZnNiID0gMjAwICogMTAwMDsKLQkJCWJyZWFrOwotCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJZnNiID0gMTMzMzMgKiAxMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmc2IgPSAyMDAgKiAxMDAwOworCQlicmVhazsKIAl9CiAKIAlpZiAoIWZzYikKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNwZWVkc3RlcC1saWI6IGNvdWxkbid0IGRldGVjdCBGU0Igc3BlZWQuIFBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8bGludXhAYnJvZG8uZGU+XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJjb3VsZG4ndCBkZXRlY3QgRlNCIHNwZWVkLiAiCisJCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8bGludXhAYnJvZG8uZGU+XG4iKTsKIAogCS8qIE11bHRpcGxpZXIuICovCiAJbXVsdCA9IG1zcl9sbyA+PiAyNDsKIAotCWRwcmludGsoIlA0IC0gRlNCICV1IGtIejsgTXVsdGlwbGllciAldTsgU3BlZWQgJXUga0h6XG4iLCBmc2IsIG11bHQsIChmc2IgKiBtdWx0KSk7CisJZHByaW50aygiUDQgLSBGU0IgJXUga0h6OyBNdWx0aXBsaWVyICV1OyBTcGVlZCAldSBrSHpcbiIsCisJCQlmc2IsIG11bHQsIChmc2IgKiBtdWx0KSk7CiAKLQlyZXR1cm4gKGZzYiAqIG11bHQpOworCXJldCA9IChmc2IgKiBtdWx0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKLXVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3NvcikKK3Vuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQogewogCXN3aXRjaCAocHJvY2Vzc29yKSB7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QQ09SRToKIAkJcmV0dXJuIHBlbnRpdW1fY29yZV9nZXRfZnJlcXVlbmN5KCk7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BNOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QTToKIAkJcmV0dXJuIHBlbnRpdW1NX2dldF9mcmVxdWVuY3koKTsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDREOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNE06CisJY2FzZSBTUEVFRFNURVBfQ1BVX1A0RDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUDRNOgogCQlyZXR1cm4gcGVudGl1bTRfZ2V0X2ZyZXF1ZW5jeSgpOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1Q6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQzoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX1Q6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfQzoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOgogCQlyZXR1cm4gcGVudGl1bTNfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX07CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kpOworRVhQT1JUX1NZTUJPTF9HUEwoc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kpOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICBERVRFQ1QgU1BFRURTVEVQLUNBUEFCTEUgUFJPQ0VTU09SICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvciAodm9pZCkKK3Vuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3Nvcih2b2lkKQogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1MzIgZWJ4LCBtc3JfbG8sIG1zcl9oaTsKQEAgLTI2MSw3ICsyODEsNyBAQAogCQkJICogc2FtcGxlIGhhcyBlYnggPSAweDBmLCBwcm9kdWN0aW9uIGhhcyAweDBlLgogCQkJICovCiAJCQlpZiAoKGVieCA9PSAweDBlKSB8fCAoZWJ4ID09IDB4MGYpKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QNE07CiAJCQlicmVhazsKIAkJY2FzZSA3OgogCQkJLyoKQEAgLTI3Miw3ICsyOTIsNyBAQAogCQkJICogc2FtcGxlcyBhcmUgb25seSBvZiBCLXN0ZXBwaW5nLi4uCiAJCQkgKi8KIAkJCWlmIChlYnggPT0gMHgwZSkKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QNE07CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUDRNOwogCQkJYnJlYWs7CiAJCWNhc2UgOToKIAkJCS8qCkBAIC0yODgsMTAgKzMwOCwxMyBAQAogCQkJICogTS1QNC1NcyBtYXkgaGF2ZSBlaXRoZXIgZWJ4PTB4ZSBvciAweGYgW3NlZSBhYm92ZV0KIAkJCSAqIE0tUDQvNTMzIGhhdmUgZWl0aGVyIGVieD0weGUgb3IgMHhmLiBbMjUzMTc2MDcucGRmXQogCQkJICogYWxzbywgTS1QNE0gSFRzIGhhdmUgZWJ4PTB4OCwgdG9vCi0JCQkgKiBGb3Igbm93LCB0aGV5IGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBtb2RlbF9pZCBzdHJpbmcKKwkJCSAqIEZvciBub3csIHRoZXkgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIG1vZGVsX2lkCisJCQkgKiBzdHJpbmcKIAkJCSAqLwotCQkJaWYgKChlYnggPT0gMHgwZSkgfHwgKHN0cnN0cihjLT54ODZfbW9kZWxfaWQsIk1vYmlsZSBJbnRlbChSKSBQZW50aXVtKFIpIDQiKSAhPSBOVUxMKSkKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QNE07CisJCQlpZiAoKGVieCA9PSAweDBlKSB8fAorCQkJCShzdHJzdHIoYy0+eDg2X21vZGVsX2lkLAorCQkJCSAgICAiTW9iaWxlIEludGVsKFIpIFBlbnRpdW0oUikgNCIpICE9IE5VTEwpKQorCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1A0TTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC0zMDEsNyArMzI0LDggQEAKIAogCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJY2FzZSAweDBCOiAvKiBJbnRlbCBQSUlJIFtUdWFsYXRpbl0gKi8KLQkJLyogY3B1aWRfZWJ4KDEpIGlzIDB4MDQgZm9yIGRlc2t0b3AgUElJSSwgMHgwNiBmb3IgbW9iaWxlIFBJSUktTSAqLworCQkvKiBjcHVpZF9lYngoMSkgaXMgMHgwNCBmb3IgZGVza3RvcCBQSUlJLAorCQkgKiAweDA2IGZvciBtb2JpbGUgUElJSS1NICovCiAJCWVieCA9IGNwdWlkX2VieCgweDAwMDAwMDAxKTsKIAkJZHByaW50aygiZWJ4IGlzICV4XG4iLCBlYngpOwogCkBAIC0zMTMsMTQgKzMzNywxNSBAQAogCQkvKiBTbyBmYXIgYWxsIFBJSUktTSBwcm9jZXNzb3JzIHN1cHBvcnQgU3BlZWRTdGVwLiBTZWUKIAkJICogSW50ZWwncyAyNDU0MDY0MC5wZGYgb2YgSnVuZSAyMDAzCiAJCSAqLwotCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1Q7CisJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfVDsKIAogCWNhc2UgMHgwODogLyogSW50ZWwgUElJSSBbQ29wcGVybWluZV0gKi8KIAogCQkvKiBhbGwgbW9iaWxlIFBJSUkgQ29wcGVybWluZXMgaGF2ZSBGU0IgMTAwIE1IegogCQkgKiA9PT4gc29ydCBvdXQgYSBmZXcgZGVza3RvcCBQSUlJcy4gKi8KIAkJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIG1zcl9sbywgbXNyX2hpKTsKLQkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfRUJMX0NSX1BPV0VST04gaXMgMHgleCwgMHgleFxuIiwgbXNyX2xvLCBtc3JfaGkpOworCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLAorCQkJCW1zcl9sbywgbXNyX2hpKTsKIAkJbXNyX2xvICY9IDB4MDBjMDAwMDsKIAkJaWYgKG1zcl9sbyAhPSAweDAwODAwMDApCiAJCQlyZXR1cm4gMDsKQEAgLTMzMiwxMyArMzU3LDE1IEBACiAJCSAqIGJpdCA1NiBvciA1NyBpcyBzZXQKIAkJICovCiAJCXJkbXNyKE1TUl9JQTMyX1BMQVRGT1JNX0lELCBtc3JfbG8sIG1zcl9oaSk7Ci0JCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX1BMQVRGT1JNIElEIGlzIDB4JXgsIDB4JXhcbiIsIG1zcl9sbywgbXNyX2hpKTsKLQkJaWYgKChtc3JfaGkgJiAoMTw8MTgpKSAmJiAocmVsYXhlZF9jaGVjayA/IDEgOiAobXNyX2hpICYgKDM8PDI0KSkpKSB7CisJCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX1BMQVRGT1JNIElEIGlzIDB4JXgsIDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfaGkpOworCQlpZiAoKG1zcl9oaSAmICgxPDwxOCkpICYmCisJCSAgICAocmVsYXhlZF9jaGVjayA/IDEgOiAobXNyX2hpICYgKDM8PDI0KSkpKSB7CiAJCQlpZiAoYy0+eDg2X21hc2sgPT0gMHgwMSkgewogCQkJCWRwcmludGsoImVhcmx5IFBJSUkgdmVyc2lvblxuIik7Ci0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWTsKIAkJCX0gZWxzZQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQzsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QSUlJX0M7CiAJCX0KIAogCWRlZmF1bHQ6CkBAIC0zNjksNyArMzk2LDcgQEAKIAlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGJvdGggc3BlZWRzXG4iKTsKIAogCS8qIGdldCBjdXJyZW50IHNwZWVkICovCi0JcHJldl9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOworCXByZXZfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWlmICghcHJldl9zcGVlZCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTM3OSw3ICs0MDYsNyBAQAogCiAJLyogc3dpdGNoIHRvIGxvdyBzdGF0ZSAqLwogCXNldF9zdGF0ZShTUEVFRFNURVBfTE9XKTsKLQkqbG93X3NwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CisJKmxvd19zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCEqbG93X3NwZWVkKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtMzk4LDcgKzQyNSw3IEBACiAJaWYgKHRyYW5zaXRpb25fbGF0ZW5jeSkKIAkJZG9fZ2V0dGltZW9mZGF5KCZ0djIpOwogCi0JKmhpZ2hfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kocHJvY2Vzc29yKTsKKwkqaGlnaF9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCEqaGlnaF9zcGVlZCkgewogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTQyNiw5ICs0NTMsMTIgQEAKIAkJLyogY2hlY2sgaWYgdGhlIGxhdGVuY3kgbWVhc3VyZW1lbnQgaXMgdG9vIGhpZ2ggb3IgdG9vIGxvdwogCQkgKiBhbmQgc2V0IGl0IHRvIGEgc2FmZSB2YWx1ZSAoNTAwdVNlYykgaW4gdGhhdCBjYXNlCiAJCSAqLwotCQlpZiAoKnRyYW5zaXRpb25fbGF0ZW5jeSA+IDEwMDAwMDAwIHx8ICp0cmFuc2l0aW9uX2xhdGVuY3kgPCA1MDAwMCkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwZWVkc3RlcDogZnJlcXVlbmN5IHRyYW5zaXRpb24gbWVhc3VyZWQgc2VlbXMgb3V0IG9mICIKLQkJCQkJInJhbmdlICgldSBuU2VjKSwgZmFsbGluZyBiYWNrIHRvIGEgc2FmZSBvbmUgb2YgJXUgblNlYy5cbiIsCisJCWlmICgqdHJhbnNpdGlvbl9sYXRlbmN5ID4gMTAwMDAwMDAgfHwKKwkJICAgICp0cmFuc2l0aW9uX2xhdGVuY3kgPCA1MDAwMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggImZyZXF1ZW5jeSB0cmFuc2l0aW9uICIKKwkJCQkJIm1lYXN1cmVkIHNlZW1zIG91dCBvZiByYW5nZSAoJXUgIgorCQkJCQkiblNlYyksIGZhbGxpbmcgYmFjayB0byBhIHNhZmUgb25lIG9mIgorCQkJCQkiJXUgblNlYy5cbiIsCiAJCQkJCSp0cmFuc2l0aW9uX2xhdGVuY3ksIDUwMDAwMCk7CiAJCQkqdHJhbnNpdGlvbl9sYXRlbmN5ID0gNTAwMDAwOwogCQl9CkBAIC00MzYsMTUgKzQ2NiwxNiBAQAogCiBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BlZWRzdGVwX2dldF9mcmVxcyk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1NQRUVEU1RFUF9SRUxBWEVEX0NBUF9DSEVDSwogbW9kdWxlX3BhcmFtKHJlbGF4ZWRfY2hlY2ssIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlbGF4ZWRfY2hlY2ssICJEb24ndCBkbyBhbGwgY2hlY2tzIGZvciBzcGVlZHN0ZXAgY2FwYWJpbGl0eS4iKTsKK01PRFVMRV9QQVJNX0RFU0MocmVsYXhlZF9jaGVjaywKKwkJIkRvbid0IGRvIGFsbCBjaGVja3MgZm9yIHNwZWVkc3RlcCBjYXBhYmlsaXR5LiIpOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJMaWJyYXJ5IGZvciBJbnRlbCBTcGVlZFN0ZXAgMSBvciAyIGNwdWZyZXEgZHJpdmVycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpYnJhcnkgZm9yIEludGVsIFNwZWVkU3RlcCAxIG9yIDIgY3B1ZnJlcSBkcml2ZXJzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKaW5kZXggYjExYmNjNi4uMmI2YzA0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCkBAIC0xMiwxNyArMTIsMTcgQEAKIAogLyogcHJvY2Vzc29ycyAqLwogCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZCTB4MDAwMDAwMDEgIC8qIENvcHBlcm1pbmUgY29yZSAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQwkJMHgwMDAwMDAwMiAgLyogQ29wcGVybWluZSBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9UCQkweDAwMDAwMDAzICAvKiBUdWFsYXRpbiBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNCQkJMHgwMDAwMDAwNCAgLyogUDQtTSAgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFkJMHgwMDAwMDAwMSAgLyogQ29wcGVybWluZSBjb3JlICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUElJSV9DCQkweDAwMDAwMDAyICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX1QJCTB4MDAwMDAwMDMgIC8qIFR1YWxhdGluIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QNE0JCTB4MDAwMDAwMDQgIC8qIFA0LU0gICovCiAKIC8qIHRoZSBmb2xsb3dpbmcgcHJvY2Vzc29ycyBhcmUgbm90IHNwZWVkc3RlcC1jYXBhYmxlIGFuZCBhcmUgbm90IGF1dG8tZGV0ZWN0ZWQKICAqIGluIHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkuIEhvd2V2ZXIsIHRoZWlyIHNwZWVkIGNhbiBiZSBkZXRlY3RlZCB1c2luZwotICogdGhlIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSgpIGNhbGwuICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUE0JCQkweEZGRkZGRjAzICAvKiBQZW50aXVtIE0gICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRECQkJMHhGRkZGRkYwNCAgLyogZGVza3RvcCBQNCAgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QQ09SRQkJMHhGRkZGRkYwNSAgLyogQ29yZSAqLworICogdGhlIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KCkgY2FsbC4gKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QTQkJMHhGRkZGRkYwMyAgLyogUGVudGl1bSBNICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1A0RAkJMHhGRkZGRkYwNCAgLyogZGVza3RvcCBQNCAgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QQ09SRQkJMHhGRkZGRkYwNSAgLyogQ29yZSAqLwogCiAvKiBzcGVlZHN0ZXAgc3RhdGVzIC0tIG9ubHkgdHdvIG9mIHRoZW0gKi8KIApAQCAtMzQsNyArMzQsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvciAodm9pZCk7CiAKIC8qIGRldGVjdCB0aGUgY3VycmVudCBzcGVlZCAoaW4ga2h6KSBvZiB0aGUgcHJvY2Vzc29yICovCi1leHRlcm4gdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3Nvcik7CiAKIAogLyogZGV0ZWN0IHRoZSBsb3cgYW5kIGhpZ2ggc3BlZWRzIG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggOGE4NWM5My4uYmVmZWEwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lzdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCkBAIC0zMCwxMiArMzAsMTIgQEAKICAqIElmIHVzZXIgZ2l2ZXMgaXQsIHRoZXNlIGFyZSB1c2VkLgogICoKICAqLwotc3RhdGljIGludCBzbWlfcG9ydCA9IDA7Ci1zdGF0aWMgaW50IHNtaV9jbWQgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBzbWlfc2lnID0gMDsKK3N0YXRpYyBpbnQgc21pX3BvcnQ7CitzdGF0aWMgaW50IHNtaV9jbWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHNtaV9zaWc7CiAKIC8qIGluZm8gYWJvdXQgdGhlIHByb2Nlc3NvciAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvcjsKIAogLyoKICAqIFRoZXJlIGFyZSBvbmx5IHR3byBmcmVxdWVuY3kgc3RhdGVzIGZvciBlYWNoIHByb2Nlc3Nvci4gVmFsdWVzCkBAIC01NiwxMiArNTYsMTMgQEAKICAqIG9mIERNQSBhY3Rpdml0eSBnb2luZyBvbj8gKi8KICNkZWZpbmUgU01JX1RSSUVTIDUKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzcGVlZHN0ZXAtc21pIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNwZWVkc3RlcC1zbWkiLCBtc2cpCiAKIC8qKgogICogc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX293bmVyc2hpcCAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAodm9pZCkKIHsKIAl1MzIgY29tbWFuZCwgcmVzdWx0LCBtYWdpYywgZHVtbXk7CiAJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9PV05FUjsKQEAgLTcwLDE2ICs3MSwxOCBAQAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAltYWdpYyA9IHZpcnRfdG9fcGh5cyhtYWdpY19kYXRhKTsKIAotCWRwcmludGsoInRyeWluZyB0byBvYnRhaW4gb3duZXJzaGlwIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIG9idGFpbiBvd25lcnNoaXAgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicFxuIgotCQk6ICI9RCIgKHJlc3VsdCksICI9YSIgKGR1bW15KSwgIj1iIiAoZHVtbXkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwKLQkJCSI9UyIgKGR1bW15KQorCQk6ICI9RCIgKHJlc3VsdCksCisJCSAgIj1hIiAoZHVtbXkpLCAiPWIiIChkdW1teSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLAorCQkgICI9UyIgKGR1bW15KQogCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLCAiZCIgKHNtaV9wb3J0KSwKLQkJCSJEIiAoMCksICJTIiAobWFnaWMpCisJCSAgIkQiICgwKSwgIlMiIChtYWdpYykKIAkJOiAibWVtb3J5IgogCSk7CiAKQEAgLTk3LDEwICsxMDAsMTAgQEAKICAqIGV2ZW4gaGFuZ3MgW2NmLiBidWdtZS5vc2RsLm9yZyAjIDE0MjJdIG9uIGVhcmxpZXIgc3lzdGVtcy4gRW1waXJpY2FsIHRlc3RpbmcKICAqIHNob3dzIHRoYXQgdGhlIGxhdHRlciBvY2N1cnMgaWYgIShpc3RfaW5mby5ldmVudCAmIDB4RkZGRikuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXMgKHVuc2lnbmVkIGludCAqbG93LCB1bnNpZ25lZCBpbnQgKmhpZ2gpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfZ2V0X2ZyZXFzKHVuc2lnbmVkIGludCAqbG93LCB1bnNpZ25lZCBpbnQgKmhpZ2gpCiB7CiAJdTMyIGNvbW1hbmQsIHJlc3VsdCA9IDAsIGVkaSwgaGlnaF9taHosIGxvd19taHosIGR1bW15OwotCXUzMiBzdGF0ZT0wOworCXUzMiBzdGF0ZSA9IDA7CiAJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9GUkVRUzsKIAogCWlmICghKGlzdF9pbmZvLmV2ZW50ICYgMHhGRkZGKSkgewpAQCAtMTEwLDE3ICsxMTMsMjUgQEAKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGZyZXF1ZW5jaWVzIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLAorCQkJY29tbWFuZCwgc21pX3BvcnQpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJwdXNoICUlZWJwXG4iCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCSJwb3AgJSVlYnAiCi0JCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoaGlnaF9taHopLCAiPWMiIChsb3dfbWh6KSwgIj1kIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPVMiIChkdW1teSkKLQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCTogIj1hIiAocmVzdWx0KSwKKwkJICAiPWIiIChoaWdoX21oeiksCisJCSAgIj1jIiAobG93X21oeiksCisJCSAgIj1kIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPVMiIChkdW1teSkKKwkJOiAiYSIgKGNvbW1hbmQpLAorCQkgICJiIiAoZnVuY3Rpb24pLAorCQkgICJjIiAoc3RhdGUpLAorCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAotCWRwcmludGsoInJlc3VsdCAleCwgbG93X2ZyZXEgJXUsIGhpZ2hfZnJlcSAldVxuIiwgcmVzdWx0LCBsb3dfbWh6LCBoaWdoX21oeik7CisJZHByaW50aygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLAorCQkJcmVzdWx0LCBsb3dfbWh6LCBoaWdoX21oeik7CiAKIAkvKiBhYm9ydCBpZiByZXN1bHRzIGFyZSBvYnZpb3VzbHkgaW5jb3JyZWN0Li4uICovCiAJaWYgKChoaWdoX21oeiArIGxvd19taHopIDwgNjAwKQpAQCAtMTM3LDI2ICsxNDgsMzAgQEAKICAqIEBzdGF0ZTogcHJvY2Vzc29yIGZyZXF1ZW5jeSBzdGF0ZSAoU1BFRURTVEVQX0xPVyBvciBTUEVFRFNURVBfSElHSCkKICAqCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX2dldF9zdGF0ZSAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX2dldF9zdGF0ZSh2b2lkKQogewotCXUzMiBmdW5jdGlvbj1HRVRfU1BFRURTVEVQX1NUQVRFOworCXUzMiBmdW5jdGlvbiA9IEdFVF9TUEVFRFNURVBfU1RBVEU7CiAJdTMyIHJlc3VsdCwgc3RhdGUsIGVkaSwgY29tbWFuZCwgZHVtbXk7CiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgc2V0dGluZyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCAiCisJCSJhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicFxuIgotCQk6ICI9YSIgKHJlc3VsdCksICI9YiIgKHN0YXRlKSwgIj1EIiAoZWRpKSwgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQorCQk6ICI9YSIgKHJlc3VsdCksCisJCSAgIj1iIiAoc3RhdGUpLCAiPUQiIChlZGkpLAorCQkgICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKKwkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiICgwKSwKKwkJICAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQogCSk7CiAKIAlkcHJpbnRrKCJzdGF0ZSBpcyAleCwgcmVzdWx0IGlzICV4XG4iLCBzdGF0ZSwgcmVzdWx0KTsKIAotCXJldHVybiAoc3RhdGUgJiAxKTsKKwlyZXR1cm4gc3RhdGUgJiAxOwogfQogCiAKQEAgLTE2NSwxMSArMTgwLDExIEBACiAgKiBAc3RhdGU6IG5ldyBwcm9jZXNzb3IgZnJlcXVlbmN5IHN0YXRlIChTUEVFRFNURVBfTE9XIG9yIFNQRUVEU1RFUF9ISUdIKQogICoKICAqLwotc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDAsIGNvbW1hbmQsIG5ld19zdGF0ZSwgZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgZnVuY3Rpb249U0VUX1NQRUVEU1RFUF9TVEFURTsKKwl1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBTRVRfU1BFRURTVEVQX1NUQVRFOwogCXVuc2lnbmVkIGludCByZXRyeSA9IDA7CiAKIAlpZiAoc3RhdGUgPiAweDEpCkBAIC0xODAsMTEgKzE5NSwxNCBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gc3RhdGUgJXUgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIHN0YXRlLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gc3RhdGUgJXUgIgorCQkid2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCXN0YXRlLCBjb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlkbyB7CiAJCWlmIChyZXRyeSkgewotCQkJZHByaW50aygicmV0cnkgJXUsIHByZXZpb3VzIHJlc3VsdCAldSwgd2FpdGluZy4uLlxuIiwgcmV0cnksIHJlc3VsdCk7CisJCQlkcHJpbnRrKCJyZXRyeSAldSwgcHJldmlvdXMgcmVzdWx0ICV1LCB3YWl0aW5nLi4uXG4iLAorCQkJCQlyZXRyeSwgcmVzdWx0KTsKIAkJCW1kZWxheShyZXRyeSAqIDUwKTsKIAkJfQogCQlyZXRyeSsrOwpAQCAtMTkyLDIwICsyMTAsMjYgQEAKIAkJCSJwdXNoICUlZWJwXG4iCiAJCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkJInBvcCAlJWVicCIKLQkJCTogIj1iIiAobmV3X3N0YXRlKSwgIj1EIiAocmVzdWx0KSwgIj1jIiAoZHVtbXkpLCAiPWEiIChkdW1teSksCi0JCQkJIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKLQkJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLCAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQorCQkJOiAiPWIiIChuZXdfc3RhdGUpLCAiPUQiIChyZXN1bHQpLAorCQkJICAiPWMiIChkdW1teSksICI9YSIgKGR1bW15KSwKKwkJCSAgIj1kIiAoZHVtbXkpLCAiPVMiIChkdW1teSkKKwkJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoc3RhdGUpLAorCQkJICAiZCIgKHNtaV9wb3J0KSwgIlMiICgwKSwgIkQiICgwKQogCQkJKTsKIAl9IHdoaWxlICgobmV3X3N0YXRlICE9IHN0YXRlKSAmJiAocmV0cnkgPD0gU01JX1RSSUVTKSk7CiAKIAkvKiBlbmFibGUgSVJRcyAqLwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCWlmIChuZXdfc3RhdGUgPT0gc3RhdGUpIHsKLQkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWQgYWZ0ZXIgJXUgdHJpZXMgd2l0aCByZXN1bHQgJXVcbiIsIChzcGVlZHN0ZXBfZnJlcXNbbmV3X3N0YXRlXS5mcmVxdWVuY3kgLyAxMDAwKSwgcmV0cnksIHJlc3VsdCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgdG8gc3RhdGUgJXUgZmFpbGVkIHdpdGggbmV3X3N0YXRlICV1IGFuZCByZXN1bHQgJXVcbiIsIHN0YXRlLCBuZXdfc3RhdGUsIHJlc3VsdCk7Ci0JfQorCWlmIChuZXdfc3RhdGUgPT0gc3RhdGUpCisJCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkIGFmdGVyICV1IHRyaWVzICIKKwkJCSJ3aXRoIHJlc3VsdCAldVxuIiwKKwkJCShzcGVlZHN0ZXBfZnJlcXNbbmV3X3N0YXRlXS5mcmVxdWVuY3kgLyAxMDAwKSwKKwkJCXJldHJ5LCByZXN1bHQpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgdG8gc3RhdGUgJXUgIgorCQkJImZhaWxlZCB3aXRoIG5ld19zdGF0ZSAldSBhbmQgcmVzdWx0ICV1XG4iLAorCQkJc3RhdGUsIG5ld19zdGF0ZSwgcmVzdWx0KTsKIAogCXJldHVybjsKIH0KQEAgLTIxOSwxMyArMjQzLDE0IEBACiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS9mcmVxLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLCB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlID0gMDsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sCisJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZyZXFzLm9sZCA9IHNwZWVkc3RlcF9mcmVxc1tzcGVlZHN0ZXBfZ2V0X3N0YXRlKCldLmZyZXF1ZW5jeTsKQEAgLTI1MCw3ICsyNzUsNyBAQAogICogTGltaXQgbXVzdCBiZSB3aXRoaW4gc3BlZWRzdGVwX2xvd19mcmVxIGFuZCBzcGVlZHN0ZXBfaGlnaF9mcmVxLCB3aXRoCiAgKiBhdCBsZWFzdCBvbmUgYm9yZGVyIGluY2x1ZGVkLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdKTsKIH0KQEAgLTI1OSw3ICsyODQsOCBAQAogc3RhdGljIGludCBzcGVlZHN0ZXBfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJlc3VsdDsKLQl1bnNpZ25lZCBpbnQgc3BlZWQsc3RhdGU7CisJdW5zaWduZWQgaW50IHNwZWVkLCBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgKmxvdywgKmhpZ2g7CiAKIAkvKiBjYXBhYmlsaXR5IGNoZWNrICovCiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCkBAIC0yNzIsMTkgKzI5OCwyMyBAQAogCX0KIAogCS8qIGRldGVjdCBsb3cgYW5kIGhpZ2ggZnJlcXVlbmN5ICovCi0JcmVzdWx0ID0gc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXMoJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3ksCi0JCQkJJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5KTsKKwlsb3cgPSAmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeTsKKwloaWdoID0gJnNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfSElHSF0uZnJlcXVlbmN5OworCisJcmVzdWx0ID0gc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXMobG93LCBoaWdoKTsKIAlpZiAocmVzdWx0KSB7Ci0JCS8qIGZhbGwgYmFjayB0byBzcGVlZHN0ZXBfbGliLmMgZGVjdGlvbiBtZWNoYW5pc206IHRyeSBib3RoIHN0YXRlcyBvdXQgKi8KLQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCBsb3cgYW5kIGhpZ2ggZnJlcXVlbmNpZXMgYnkgU01JIGNhbGwuXG4iKTsKKwkJLyogZmFsbCBiYWNrIHRvIHNwZWVkc3RlcF9saWIuYyBkZWN0aW9uIG1lY2hhbmlzbToKKwkJICogdHJ5IGJvdGggc3RhdGVzIG91dCAqLworCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyAiCisJCQkJImJ5IFNNSSBjYWxsLlxuIik7CiAJCXJlc3VsdCA9IHNwZWVkc3RlcF9nZXRfZnJlcXMoc3BlZWRzdGVwX3Byb2Nlc3NvciwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3ksCisJCQkJbG93LCBoaWdoLAogCQkJCU5VTEwsCiAJCQkJJnNwZWVkc3RlcF9zZXRfc3RhdGUpOwogCiAJCWlmIChyZXN1bHQpIHsKLQkJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgdHdvIGRpZmZlcmVudCBzcGVlZHMgLS0gYWJvcnRpbmcuXG4iKTsKKwkJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgdHdvIGRpZmZlcmVudCBzcGVlZHMiCisJCQkJCSIgLS0gYWJvcnRpbmcuXG4iKTsKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0gZWxzZQogCQkJZHByaW50aygid29ya2Fyb3VuZCB3b3JrZWQuXG4iKTsKQEAgLTI5NSw3ICszMjUsOCBAQAogCXNwZWVkID0gc3BlZWRzdGVwX2ZyZXFzW3N0YXRlXS5mcmVxdWVuY3k7CiAKIAlkcHJpbnRrKCJjdXJyZW50bHkgYXQgJXMgc3BlZWQgc2V0dGluZyAtICVpIE1IelxuIiwKLQkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpID8gImxvdyIgOiAiaGlnaCIsCisJCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KQorCQk/ICJsb3ciIDogImhpZ2giLAogCQkoc3BlZWQgLyAxMDAwKSk7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KQEAgLTMwNCw3ICszMzUsNyBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNwZWVkc3RlcF9mcmVxcyk7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuIChyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OwogCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKQEAgLTMyMSw3ICszNTIsNyBAQAogewogCWlmIChjcHUpCiAJCXJldHVybiAtRU5PREVWOwotCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CisJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpOwogfQogCiAKQEAgLTMzNSw3ICszNjYsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBzcGVlZHN0ZXBfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnNwZWVkc3RlcF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMzY0LDIxICszOTUsMjMgQEAKIAlzcGVlZHN0ZXBfcHJvY2Vzc29yID0gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKTsKIAogCXN3aXRjaCAoc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1Q6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfQzoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DX0VBUkxZOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX1Q6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfQzoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVlZHN0ZXBfcHJvY2Vzc29yID0gMDsKIAl9CiAKIAlpZiAoIXNwZWVkc3RlcF9wcm9jZXNzb3IpIHsKLQkJZHByaW50ayAoIk5vIHN1cHBvcnRlZCBJbnRlbCBDUFUgZGV0ZWN0ZWQuXG4iKTsKKwkJZHByaW50aygiTm8gc3VwcG9ydGVkIEludGVsIENQVSBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkcHJpbnRrKCJzaWduYXR1cmU6MHglLjhseCwgY29tbWFuZDoweCUuOGx4LCBldmVudDoweCUuOGx4LCBwZXJmX2xldmVsOjB4JS44bHguXG4iLAotCQlpc3RfaW5mby5zaWduYXR1cmUsIGlzdF9pbmZvLmNvbW1hbmQsIGlzdF9pbmZvLmV2ZW50LCBpc3RfaW5mby5wZXJmX2xldmVsKTsKKwlkcHJpbnRrKCJzaWduYXR1cmU6MHglLjhseCwgY29tbWFuZDoweCUuOGx4LCAiCisJCSJldmVudDoweCUuOGx4LCBwZXJmX2xldmVsOjB4JS44bHguXG4iLAorCQlpc3RfaW5mby5zaWduYXR1cmUsIGlzdF9pbmZvLmNvbW1hbmQsCisJCWlzdF9pbmZvLmV2ZW50LCBpc3RfaW5mby5wZXJmX2xldmVsKTsKIAogCS8qIEVycm9yIGlmIG5vIElTVC1TTUkgQklPUyBvciBubyBQQVJNCiAJCSBzaWc9ICdJU0dFJyBha2EgJ0ludGVsIFNwZWVkc3RlcCBHYXRlIEUnICovCkBAIC00MTYsMTcgKzQ0OSwyMCBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwZWVkc3RlcF9kcml2ZXIpOwogfQogCi1tb2R1bGVfcGFyYW0oc21pX3BvcnQsICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHNtaV9jbWQsICAgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShzbWlfc2lnLCAgdWludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oc21pX3BvcnQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oc21pX2NtZCwgIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oc21pX3NpZywgdWludCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0Moc21pX3BvcnQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgcG9ydCB3aXRoIHRoaXMgdmFsdWUgLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHhiMiIpOwotTU9EVUxFX1BBUk1fREVTQyhzbWlfY21kLCAiT3ZlcnJpZGUgdGhlIEJJT1MtZ2l2ZW4gSVNUIGNvbW1hbmQgd2l0aCB0aGlzIHZhbHVlIC0tIEludGVsJ3MgZGVmYXVsdCBzZXR0aW5nIGlzIDB4ODIiKTsKLU1PRFVMRV9QQVJNX0RFU0Moc21pX3NpZywgIlNldCB0byAxIHRvIGZha2UgdGhlIElTVCBzaWduYXR1cmUgd2hlbiB1c2luZyB0aGUgU01JIGludGVyZmFjZS4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc21pX3BvcnQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgcG9ydCB3aXRoIHRoaXMgdmFsdWUgIgorCQkiLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHhiMiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfY21kLCAiT3ZlcnJpZGUgdGhlIEJJT1MtZ2l2ZW4gSVNUIGNvbW1hbmQgd2l0aCB0aGlzIHZhbHVlICIKKwkJIi0tIEludGVsJ3MgZGVmYXVsdCBzZXR0aW5nIGlzIDB4ODIiKTsKK01PRFVMRV9QQVJNX0RFU0Moc21pX3NpZywgIlNldCB0byAxIHRvIGZha2UgdGhlIElTVCBzaWduYXR1cmUgd2hlbiB1c2luZyB0aGUgIgorCQkiU01JIGludGVyZmFjZS4iKTsKIAotTU9EVUxFX0FVVEhPUiAoIkhpcm9zaGkgTWl1cmEiKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIElTVCBhcHBsZXQgU01JIGludGVyZmFjZS4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIE1pdXJhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNwZWVkc3RlcCBkcml2ZXIgZm9yIElTVCBhcHBsZXQgU01JIGludGVyZmFjZS4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoc3BlZWRzdGVwX2luaXQpOwogbW9kdWxlX2V4aXQoc3BlZWRzdGVwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDI0ZmYyNmEuLjVmZmYwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCkBAIC01NiwxMSArNTcsMTYgQEAKIAogCS8qCiAJICogYy0+eDg2X3Bvd2VyIGlzIDgwMDBfMDAwNyBlZHguIEJpdCA4IGlzIFRTQyBydW5zIGF0IGNvbnN0YW50IHJhdGUKLQkgKiB3aXRoIFAvVCBzdGF0ZXMgYW5kIGRvZXMgbm90IHN0b3AgaW4gZGVlcCBDLXN0YXRlcworCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzLgorCSAqCisJICogSXQgaXMgYWxzbyByZWxpYWJsZSBhY3Jvc3MgY29yZXMgYW5kIHNvY2tldHMuIChidXQgbm90IGFjcm9zcworCSAqIGNhYmluZXRzIC0gd2UgdHVybiBpdCBvZmYgaW4gdGhhdCBjYXNlIGV4cGxpY2l0bHkuKQogCSAqLwogCWlmIChjLT54ODZfcG93ZXIgJiAoMSA8PCA4KSkgewogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9OT05TVE9QX1RTQyk7CisJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CisJCXNjaGVkX2Nsb2NrX3N0YWJsZSA9IDE7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwppbmRleCBhMDA1NDVmLi42NDhiM2EyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqLwogc3RhdGljIGludCBib290X2hwZXRfZGlzYWJsZTsKIGludCBocGV0X2ZvcmNlX3VzZXI7CitzdGF0aWMgaW50IGhwZXRfdmVyYm9zZTsKIAogc3RhdGljIGludCBfX2luaXQgaHBldF9zZXR1cChjaGFyICpzdHIpCiB7CkBAIC04OCw2ICs4OSw4IEBACiAJCQlib290X2hwZXRfZGlzYWJsZSA9IDE7CiAJCWlmICghc3RybmNtcCgiZm9yY2UiLCBzdHIsIDUpKQogCQkJaHBldF9mb3JjZV91c2VyID0gMTsKKwkJaWYgKCFzdHJuY21wKCJ2ZXJib3NlIiwgc3RyLCA3KSkKKwkJCWhwZXRfdmVyYm9zZSA9IDE7CiAJfQogCXJldHVybiAxOwogfQpAQCAtMTE5LDYgKzEyMiw0MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNfaHBldF9lbmFibGVkKTsKIAorc3RhdGljIHZvaWQgX2hwZXRfcHJpbnRfY29uZmlnKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgbGluZSkKK3sKKwl1MzIgaSwgdGltZXJzLCBsLCBoOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6ICVzKCVkKTpcbiIsIGZ1bmN0aW9uLCBsaW5lKTsKKwlsID0gaHBldF9yZWFkbChIUEVUX0lEKTsKKwloID0gaHBldF9yZWFkbChIUEVUX1BFUklPRCk7CisJdGltZXJzID0gKChsICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKSArIDE7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogSUQ6IDB4JXgsIFBFUklPRDogMHgleFxuIiwgbCwgaCk7CisJbCA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOworCWggPSBocGV0X3JlYWRsKEhQRVRfU1RBVFVTKTsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiBDRkc6IDB4JXgsIFNUQVRVUzogMHgleFxuIiwgbCwgaCk7CisJbCA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKKwloID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIrNCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogQ09VTlRFUl9sOiAweCV4LCBDT1VOVEVSX2g6IDB4JXhcbiIsIGwsIGgpOworCisJZm9yIChpID0gMDsgaSA8IHRpbWVyczsgaSsrKSB7CisJCWwgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGkpKTsKKwkJaCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaSkrNCk7CisJCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IFQlZDogQ0ZHX2w6IDB4JXgsIENGR19oOiAweCV4XG4iLAorCQkgICAgICAgaSwgbCwgaCk7CisJCWwgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ01QKGkpKTsKKwkJaCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DTVAoaSkrNCk7CisJCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IFQlZDogQ01QX2w6IDB4JXgsIENNUF9oOiAweCV4XG4iLAorCQkgICAgICAgaSwgbCwgaCk7CisJCWwgPSBocGV0X3JlYWRsKEhQRVRfVG5fUk9VVEUoaSkpOworCQloID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGkpKzQpOworCQlwcmludGsoS0VSTl9JTkZPICJocGV0OiBUJWQgUk9VVEVfbDogMHgleCwgUk9VVEVfaDogMHgleFxuIiwKKwkJICAgICAgIGksIGwsIGgpOworCX0KK30KKworI2RlZmluZSBocGV0X3ByaW50X2NvbmZpZygpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKGhwZXRfdmVyYm9zZSkJCQkJCVwKKwkJX2hwZXRfcHJpbnRfY29uZmlnKF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwlcCit9IHdoaWxlICgwKQorCiAvKgogICogV2hlbiB0aGUgaHBldCBkcml2ZXIgKC9kZXYvaHBldCkgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byByZXNlcnZlCiAgKiB0aW1lciAwIGFuZCB0aW1lciAxIGluIGNhc2Ugb2YgUlRDIGVtdWxhdGlvbi4KQEAgLTE5MSwyNyArMjMxLDM3IEBACiAJLnJhdGluZwkJPSA1MCwKIH07CiAKLXN0YXRpYyB2b2lkIGhwZXRfc3RhcnRfY291bnRlcih2b2lkKQorc3RhdGljIHZvaWQgaHBldF9zdG9wX2NvdW50ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwotCiAJY2ZnICY9IH5IUEVUX0NGR19FTkFCTEU7CiAJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CiAJaHBldF93cml0ZWwoMCwgSFBFVF9DT1VOVEVSKTsKIAlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIgKyA0KTsKK30KKworc3RhdGljIHZvaWQgaHBldF9zdGFydF9jb3VudGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjZmcgPSBocGV0X3JlYWRsKEhQRVRfQ0ZHKTsKIAljZmcgfD0gSFBFVF9DRkdfRU5BQkxFOwogCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9DRkcpOwogfQogCitzdGF0aWMgdm9pZCBocGV0X3Jlc3RhcnRfY291bnRlcih2b2lkKQoreworCWhwZXRfc3RvcF9jb3VudGVyKCk7CisJaHBldF9zdGFydF9jb3VudGVyKCk7Cit9CisKIHN0YXRpYyB2b2lkIGhwZXRfcmVzdW1lX2RldmljZSh2b2lkKQogewogCWZvcmNlX2hwZXRfcmVzdW1lKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhwZXRfcmVzdGFydF9jb3VudGVyKHZvaWQpCitzdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9jb3VudGVyKHZvaWQpCiB7CiAJaHBldF9yZXN1bWVfZGV2aWNlKCk7Ci0JaHBldF9zdGFydF9jb3VudGVyKCk7CisJaHBldF9yZXN0YXJ0X2NvdW50ZXIoKTsKIH0KIAogc3RhdGljIHZvaWQgaHBldF9lbmFibGVfbGVnYWN5X2ludCh2b2lkKQpAQCAtMjU5LDI5ICszMDksMjMgQEAKIHN0YXRpYyB2b2lkIGhwZXRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCiAJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCwgaW50IHRpbWVyKQogewotCXVuc2lnbmVkIGxvbmcgY2ZnLCBjbXAsIG5vdzsKKwl1bnNpZ25lZCBsb25nIGNmZzsKIAl1aW50NjRfdCBkZWx0YTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWhwZXRfc3RvcF9jb3VudGVyKCk7CiAJCWRlbHRhID0gKCh1aW50NjRfdCkoTlNFQ19QRVJfU0VDL0haKSkgKiBldnQtPm11bHQ7CiAJCWRlbHRhID4+PSBldnQtPnNoaWZ0OwotCQlub3cgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7Ci0JCWNtcCA9IG5vdyArICh1bnNpZ25lZCBsb25nKSBkZWx0YTsKIAkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyh0aW1lcikpOwogCQkvKiBNYWtlIHN1cmUgd2UgdXNlIGVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgKi8KIAkJY2ZnICY9IH5IUEVUX1ROX0xFVkVMOwogCQljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROX1BFUklPRElDIHwKIAkJICAgICAgIEhQRVRfVE5fU0VUVkFMIHwgSFBFVF9UTl8zMkJJVDsKIAkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwotCQkvKgotCQkgKiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgd3JpdGluZyBUTl9TRVRWQUwgdG8gdGhlCi0JCSAqIGNvbmZpZyByZWdpc3RlciBzZXRzIHRoZSBjb3VudGVyIHZhbHVlLCB0aGUgc2Vjb25kCi0JCSAqIHdyaXRlIHNldHMgdGhlIHBlcmlvZC4KLQkJICovCi0JCWhwZXRfd3JpdGVsKGNtcCwgSFBFVF9Ubl9DTVAodGltZXIpKTsKLQkJdWRlbGF5KDEpOwogCQlocGV0X3dyaXRlbCgodW5zaWduZWQgbG9uZykgZGVsdGEsIEhQRVRfVG5fQ01QKHRpbWVyKSk7CisJCWhwZXRfc3RhcnRfY291bnRlcigpOworCQlocGV0X3ByaW50X2NvbmZpZygpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKQEAgLTMwOCw2ICszNTIsNyBAQAogCQkJaXJxX3NldF9hZmZpbml0eShoZGV2LT5pcnEsIGNwdW1hc2tfb2YoaGRldi0+Y3B1KSk7CiAJCQllbmFibGVfaXJxKGhkZXYtPmlycSk7CiAJCX0KKwkJaHBldF9wcmludF9jb25maWcoKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNTI2LDYgKzU3MSw3IEBACiAKIAludW1fdGltZXJzID0gKChpZCAmIEhQRVRfSURfTlVNQkVSKSA+PiBIUEVUX0lEX05VTUJFUl9TSElGVCk7CiAJbnVtX3RpbWVycysrOyAvKiBWYWx1ZSByZWFkIG91dCBzdGFydHMgZnJvbSAwICovCisJaHBldF9wcmludF9jb25maWcoKTsKIAogCWhwZXRfZGV2cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBocGV0X2RldikgKiBudW1fdGltZXJzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhwZXRfZGV2cykKQEAgLTY5NSw3ICs3NDEsNyBAQAogCS5tYXNrCQk9IEhQRVRfTUFTSywKIAkuc2hpZnQJCT0gSFBFVF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCi0JLnJlc3VtZQkJPSBocGV0X3Jlc3RhcnRfY291bnRlciwKKwkucmVzdW1lCQk9IGhwZXRfcmVzdW1lX2NvdW50ZXIsCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCS52cmVhZAkJPSB2cmVhZF9ocGV0LAogI2VuZGlmCkBAIC03MDcsNyArNzUzLDcgQEAKIAljeWNsZV90IHQxOwogCiAJLyogU3RhcnQgdGhlIGNvdW50ZXIgKi8KLQlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKwlocGV0X3Jlc3RhcnRfY291bnRlcigpOwogCiAJLyogVmVyaWZ5IHdoZXRoZXIgaHBldCBjb3VudGVyIHdvcmtzICovCiAJdDEgPSByZWFkX2hwZXQoKTsKQEAgLTc5Myw2ICs4MzksNyBAQAogCSAqIGluZm9ybWF0aW9uIGFuZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCiAJICovCiAJaWQgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAKICNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwogCS8qCkBAIC04NDUsNiArODkyLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlocGV0X3Jlc2VydmVfcGxhdGZvcm1fdGltZXJzKGhwZXRfcmVhZGwoSFBFVF9JRCkpOworCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlocGV0X2NwdWhwX25vdGlmeShOVUxMLCBDUFVfT05MSU5FLCAodm9pZCAqKShsb25nKWNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggMzA5OTQ5ZS4uNjk3ZDFiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwpAQCAtMTcyLDcgKzE3Miw4IEBACiAJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNywKIAkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwotCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzYTE2LAkvKiBJQ0gxMCAqLworCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqY2FjaGVkX2RldjsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IGQ1Y2ViYjUuLjA4YWZhMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKQEAgLTE3LDIwICsxNywyMSBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAKLXVuc2lnbmVkIGludCBjcHVfa2h6OyAgICAgICAgICAgLyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi8KK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IGNwdV9raHo7CS8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovCiBFWFBPUlRfU1lNQk9MKGNwdV9raHopOwotdW5zaWduZWQgaW50IHRzY19raHo7CisKK3Vuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHRzY19raHo7CiBFWFBPUlRfU1lNQk9MKHRzY19raHopOwogCiAvKgogICogVFNDIGNhbiBiZSB1bnN0YWJsZSBkdWUgdG8gY3B1ZnJlcSBvciBkdWUgdG8gdW5zeW5jZWQgVFNDcwogICovCi1zdGF0aWMgaW50IHRzY191bnN0YWJsZTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0c2NfdW5zdGFibGU7CiAKIC8qIG5hdGl2ZV9zY2hlZF9jbG9jaygpIGlzIGNhbGxlZCBiZWZvcmUgdHNjX2luaXQoKSwgc28KICAgIHdlIG11c3Qgc3RhcnQgd2l0aCB0aGUgVFNDIHNvZnQgZGlzYWJsZWQgdG8gcHJldmVudAogICAgZXJyb25lb3VzIHJkdHNjIHVzYWdlIG9uICFjcHVfaGFzX3RzYyBwcm9jZXNzb3JzICovCi1zdGF0aWMgaW50IHRzY19kaXNhYmxlZCA9IC0xOworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHRzY19kaXNhYmxlZCA9IC0xOwogCiBzdGF0aWMgaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTsKIC8qCkBAIC01NDMsOCArNTQ0LDYgQEAKIAlyZXR1cm4gdHNjX3BpdF9taW47CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0vKiBPbmx5IGNhbGxlZCBmcm9tIHRoZSBQb3dlcm5vdyBLNyBjcHUgZnJlcSBkcml2ZXIgKi8KIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpCiB7CiAjaWZuZGVmIENPTkZJR19TTVAKQEAgLTU2Niw3ICs1NjUsNiBAQAogCiBFWFBPUlRfU1lNQk9MKHJlY2FsaWJyYXRlX2NwdV9raHopOwogCi0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiAvKiBBY2NlbGVyYXRvcnMgZm9yIHNjaGVkX2Nsb2NrKCkKICAqIGNvbnZlcnQgZnJvbSBjeWNsZXMoNjRiaXRzKSA9PiBuYW5vc2Vjb25kcyAoNjRiaXRzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCBiODExMjVmLi4wYTMwM2MzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtNCw2ICs0LDEwIEBACiBjb25maWcgSEFWRV9LVk0KICAgICAgICBib29sCiAKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgeQorCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCiAJZGVwZW5kcyBvbiBIQVZFX0tWTSB8fCBYODYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggNzJiZDI3NS4uYzEzYmI5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTIwMSw2ICsyMDEsOSBAQAogCWlmICghYXRvbWljX2luY19hbmRfdGVzdCgmcHQtPnBlbmRpbmcpKQogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJnZjcHUwLT5yZXF1ZXN0cyk7CiAKKwlpZiAoIXB0LT5yZWluamVjdCkKKwkJYXRvbWljX3NldCgmcHQtPnBlbmRpbmcsIDEpOworCiAJaWYgKHZjcHUwICYmIHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUwLT53cSkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdTAtPndxKTsKIApAQCAtNTM2LDYgKzUzOSwxNiBAQAogCXBpdC0+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+bW9kcm1fbW9kID09IDMpIHsKKwkJCQlzd2l0Y2ggKGMtPm1vZHJtX3JtKSB7CisJCQkJY2FzZSAxOgorCQkJCQlyYyA9IGt2bV9maXhfaHlwZXJjYWxsKGN0eHQtPnZjcHUpOworCQkJCQlpZiAocmMpCisJCQkJCQlnb3RvIGRvbmU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlyYyA9IHJlYWRfZGVzY3JpcHRvcihjdHh0LCBvcHMsIGMtPnNyYy5wdHIsCiAJCQkJCQkgICAgICZzaXplLCAmYWRkcmVzcywKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNjEwMDY4Mi4uZGQxYTdhNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTY1LDQgKzY1LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZgkvKiBfWFRFTlNBX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggZjUwYjY5Ny4uMjI2YTM5MSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBfWFRFTlNBX1NXQUJfSAogI2RlZmluZSBfWFRFTlNBX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwppbmRleCA1ZmJjZGU1Li5mM2I2NmZiIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCkBAIC05OSw3ICs5OSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDI5YmNmYWMuLjk5NmVkOTAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtNjAzLDEzICs2MDMsMTAgQEAKIAlxLT5xdWV1ZV9mbGFncwkJPSBRVUVVRV9GTEFHX0RFRkFVTFQ7CiAJcS0+cXVldWVfbG9jawkJPSBsb2NrOwogCi0JYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocSwgQkxLX1NFR19CT1VOREFSWV9NQVNLKTsKLQorCS8qCisJICogVGhpcyBhbHNvIHNldHMgaHcvcGh5cyBzZWdtZW50cywgYm91bmRhcnkgYW5kIHNpemUKKwkgKi8KIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHEsIF9fbWFrZV9yZXF1ZXN0KTsKLQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxLCBNQVhfU0VHTUVOVF9TSVpFKTsKLQotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgTUFYX0hXX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgTUFYX1BIWVNfU0VHTUVOVFMpOwogCiAJcS0+c2dfcmVzZXJ2ZWRfc2l6ZSA9IElOVF9NQVg7CiAKQEAgLTczNSw3ICs3MzIsNiBAQAogCQlfX2ZyZWVkX3JlcXVlc3QocSwgcncgXiAxKTsKIH0KIAotI2RlZmluZSBibGtkZXZfZnJlZV9ycShsaXN0KSBsaXN0X2VudHJ5KChsaXN0KS0+bmV4dCwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCkKIC8qCiAgKiBHZXQgYSBmcmVlIHJlcXVlc3QsIHF1ZXVlX2xvY2sgbXVzdCBiZSBoZWxkLgogICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIHdpdGggcXVldWVfbG9jayBoZWxkLgpAQCAtMTA2Niw2ICsxMDYyLDkgQEAKIAogCWVsdl9jb21wbGV0ZWRfcmVxdWVzdChxLCByZXEpOwogCisJLyogdGhpcyBpcyBhIGJpbyBsZWFrICovCisJV0FSTl9PTihyZXEtPmJpbyAhPSBOVUxMKTsKKwogCS8qCiAJICogUmVxdWVzdCBtYXkgbm90IGhhdmUgb3JpZ2luYXRlZCBmcm9tIGxsX3J3X2Jsay4gaWYgbm90LAogCSAqIGl0IGRpZG4ndCBjb21lIG91dCBvZiBvdXIgcmVzZXJ2ZWQgcnEgcG9vbHMKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggNWEyNDRmMC4uZTM5Y2IyNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTQwMyw2ICs0MDMsOCBAQAogCWlmIChibGtfcnFfY3B1X3ZhbGlkKG5leHQpKQogCQlyZXEtPmNwdSA9IG5leHQtPmNwdTsKIAorCS8qIG93bmVyLXNoaXAgb2YgYmlvIHBhc3NlZCBmcm9tIG5leHQgdG8gcmVxICovCisJbmV4dC0+YmlvID0gTlVMTDsKIAlfX2Jsa19wdXRfcmVxdWVzdChxLCBuZXh0KTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggMGNlODgwNi4uMjA2MDYwZSAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTIxOCw5ICsyMTgsNiBAQAogCiAJaWYgKGhkci0+Z3VhcmQgIT0gJ1EnKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaGRyLT5kb3V0X3hmZXJfbGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpIHx8Ci0JICAgIGhkci0+ZGluX3hmZXJfbGVuID4gKHEtPm1heF9zZWN0b3JzIDw8IDkpKQotCQlyZXR1cm4gLUVJTzsKIAogCXN3aXRjaCAoaGRyLT5wcm90b2NvbCkgewogCWNhc2UgQlNHX1BST1RPQ09MX1NDU0k6CkBAIC0zNTMsNiArMzUwLDggQEAKIHN0YXRpYyB2b2lkIGJzZ19hZGRfY29tbWFuZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJICAgIHN0cnVjdCBic2dfY29tbWFuZCAqYmMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlpbnQgYXRfaGVhZCA9ICgwID09IChiYy0+aGRyLmZsYWdzICYgQlNHX0ZMQUdfUV9BVF9UQUlMKSk7CisKIAkvKgogCSAqIGFkZCBiYyBjb21tYW5kIHRvIGJ1c3kgcXVldWUgYW5kIHN1Ym1pdCBycSBmb3IgaW8KIAkgKi8KQEAgLTM2OCw3ICszNjcsNyBAQAogCWRwcmludGsoIiVzOiBxdWV1ZWluZyBycSAlcCwgYmMgJXBcbiIsIGJkLT5uYW1lLCBycSwgYmMpOwogCiAJcnEtPmVuZF9pb19kYXRhID0gYmM7Ci0JYmxrX2V4ZWN1dGVfcnFfbm93YWl0KHEsIE5VTEwsIHJxLCAxLCBic2dfcnFfZW5kX2lvKTsKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocSwgTlVMTCwgcnEsIGF0X2hlYWQsIGJzZ19ycV9lbmRfaW8pOwogfQogCiBzdGF0aWMgc3RydWN0IGJzZ19jb21tYW5kICpic2dfbmV4dF9kb25lX2NtZChzdHJ1Y3QgYnNnX2RldmljZSAqYmQpCkBAIC05MjQsNiArOTIzLDcgQEAKIAkJc3RydWN0IHJlcXVlc3QgKnJxOwogCQlzdHJ1Y3QgYmlvICpiaW8sICpiaWRpX2JpbyA9IE5VTEw7CiAJCXN0cnVjdCBzZ19pb192NCBoZHI7CisJCWludCBhdF9oZWFkOwogCQl1OCBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaGRyLCB1YXJnLCBzaXplb2YoaGRyKSkpCkBAIC05MzYsNyArOTM2LDkgQEAKIAkJYmlvID0gcnEtPmJpbzsKIAkJaWYgKHJxLT5uZXh0X3JxKQogCQkJYmlkaV9iaW8gPSBycS0+bmV4dF9ycS0+YmlvOwotCQlibGtfZXhlY3V0ZV9ycShiZC0+cXVldWUsIE5VTEwsIHJxLCAwKTsKKworCQlhdF9oZWFkID0gKDAgPT0gKGhkci5mbGFncyAmIEJTR19GTEFHX1FfQVRfVEFJTCkpOworCQlibGtfZXhlY3V0ZV9ycShiZC0+cXVldWUsIE5VTEwsIHJxLCBhdF9oZWFkKTsKIAkJcmV0ID0gYmxrX2NvbXBsZXRlX3NndjRfaGRyX3JxKHJxLCAmaGRyLCBiaW8sIGJpZGlfYmlvKTsKIAogCQlpZiAoY29weV90b191c2VyKHVhcmcsICZoZHIsIHNpemVvZihoZHIpKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL3Njc2lfaW9jdGwuYyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwppbmRleCBlZTljNjdkLi42MjZlZTI3IDEwMDY0NAotLS0gYS9ibG9jay9zY3NpX2lvY3RsLmMKKysrIGIvYmxvY2svc2NzaV9pb2N0bC5jCkBAIC0yMTQsMjEgKzIxNCwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogdW5tYXAgYSByZXF1ZXN0IHRoYXQgd2FzIHByZXZpb3VzbHkgbWFwcGVkIHRvIHRoaXMgc2dfaW9faGRyLiBoYW5kbGVzCi0gKiBib3RoIHNnIGFuZCBub24tc2cgc2dfaW9faGRyLgotICovCi1zdGF0aWMgaW50IGJsa191bm1hcF9zZ2hkcl9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBzZ19pb19oZHIgKmhkcikKLXsKLQlibGtfcnFfdW5tYXBfdXNlcihycS0+YmlvKTsKLQlibGtfcHV0X3JlcXVlc3QocnEpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGJsa19jb21wbGV0ZV9zZ2hkcl9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBzZ19pb19oZHIgKmhkciwKIAkJCQkgc3RydWN0IGJpbyAqYmlvKQogewotCWludCByLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCiAJLyoKIAkgKiBmaWxsIGluIGFsbCB0aGUgb3V0cHV0IG1lbWJlcnMKQEAgLTI1MywxMiArMjQyLDEwIEBACiAJCQlyZXQgPSAtRUZBVUxUOwogCX0KIAotCXJxLT5iaW8gPSBiaW87Ci0JciA9IGJsa191bm1hcF9zZ2hkcl9ycShycSwgaGRyKTsKLQlpZiAocmV0KQotCQlyID0gcmV0OworCWJsa19ycV91bm1hcF91c2VyKGJpbyk7CisJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKIAotCXJldHVybiByOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2dfaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBnZW5kaXNrICpiZF9kaXNrLApkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA4ZGRlNGZjLi43NGQwZTYyIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtNTYsNiArNTYsNyBAQAogCXRyaXN0YXRlCiAJc2VsZWN0IENSWVBUT19BTEdBUEkyCiAJc2VsZWN0IENSWVBUT19STkcyCisJc2VsZWN0IENSWVBUT19XT1JLUVVFVUUKIAogY29uZmlnIENSWVBUT19IQVNICiAJdHJpc3RhdGUKQEAgLTc1LDYgKzc2LDEwIEBACiAJdHJpc3RhdGUKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKIAorY29uZmlnIENSWVBUT19QQ09NUAorCXRyaXN0YXRlCisJc2VsZWN0IENSWVBUT19BTEdBUEkyCisKIGNvbmZpZyBDUllQVE9fTUFOQUdFUgogCXRyaXN0YXRlICJDcnlwdG9ncmFwaGljIGFsZ29yaXRobSBtYW5hZ2VyIgogCXNlbGVjdCBDUllQVE9fTUFOQUdFUjIKQEAgLTg3LDYgKzkyLDcgQEAKIAlzZWxlY3QgQ1JZUFRPX0FFQUQyCiAJc2VsZWN0IENSWVBUT19IQVNIMgogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSMgorCXNlbGVjdCBDUllQVE9fUENPTVAKIAogY29uZmlnIENSWVBUT19HRjEyOE1VTAogCXRyaXN0YXRlICJHRigyXjEyOCkgbXVsdGlwbGljYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgpAQCAtMTA2LDExICsxMTIsMTUgQEAKIAloZWxwCiAJICBUaGVzZSBhcmUgJ051bGwnIGFsZ29yaXRobXMsIHVzZWQgYnkgSVBzZWMsIHdoaWNoIGRvIG5vdGhpbmcuCiAKK2NvbmZpZyBDUllQVE9fV09SS1FVRVVFCisgICAgICAgdHJpc3RhdGUKKwogY29uZmlnIENSWVBUT19DUllQVEQKIAl0cmlzdGF0ZSAiU29mdHdhcmUgYXN5bmMgY3J5cHRvIGRhZW1vbiIKIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgogCXNlbGVjdCBDUllQVE9fSEFTSAogCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCXNlbGVjdCBDUllQVE9fV09SS1FVRVVFCiAJaGVscAogCSAgVGhpcyBpcyBhIGdlbmVyaWMgc29mdHdhcmUgYXN5bmNocm9ub3VzIGNyeXB0byBkYWVtb24gdGhhdAogCSAgY29udmVydHMgYW4gYXJiaXRyYXJ5IHN5bmNocm9ub3VzIHNvZnR3YXJlIGNyeXB0byBhbGdvcml0aG0KQEAgLTQ3MCw2ICs0ODAsMzEgQEAKIAogCSAgU2VlIDxodHRwOi8vY3NyYy5uaXN0Lmdvdi9lbmNyeXB0aW9uL2Flcy8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCitjb25maWcgQ1JZUFRPX0FFU19OSV9JTlRFTAorCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEFFUy1OSSkiCisJZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmIDY0QklUCisJc2VsZWN0IENSWVBUT19BRVNfWDg2XzY0CisJc2VsZWN0IENSWVBUT19DUllQVEQKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCWhlbHAKKwkgIFVzZSBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zIGZvciBBRVMgYWxnb3JpdGhtLgorCisJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsCisJICBhbGdvcml0aG0uCisKKwkgIFJpam5kYWVsIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudGx5IGEgdmVyeSBnb29kIHBlcmZvcm1lciBpbgorCSAgYm90aCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBjb21wdXRpbmcKKwkgIGVudmlyb25tZW50cyByZWdhcmRsZXNzIG9mIGl0cyB1c2UgaW4gZmVlZGJhY2sgb3Igbm9uLWZlZWRiYWNrCisJICBtb2Rlcy4gSXRzIGtleSBzZXR1cCB0aW1lIGlzIGV4Y2VsbGVudCwgYW5kIGl0cyBrZXkgYWdpbGl0eSBpcworCSAgZ29vZC4gUmlqbmRhZWwncyB2ZXJ5IGxvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIG1ha2UgaXQgdmVyeSB3ZWxsCisJICBzdWl0ZWQgZm9yIHJlc3RyaWN0ZWQtc3BhY2UgZW52aXJvbm1lbnRzLCBpbiB3aGljaCBpdCBhbHNvCisJICBkZW1vbnN0cmF0ZXMgZXhjZWxsZW50IHBlcmZvcm1hbmNlLiBSaWpuZGFlbCdzIG9wZXJhdGlvbnMgYXJlCisJICBhbW9uZyB0aGUgZWFzaWVzdCB0byBkZWZlbmQgYWdhaW5zdCBwb3dlciBhbmQgdGltaW5nIGF0dGFja3MuCisKKwkgIFRoZSBBRVMgc3BlY2lmaWVzIHRocmVlIGtleSBzaXplczogMTI4LCAxOTIgYW5kIDI1NiBiaXRzCisKKwkgIFNlZSA8aHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9hZXMvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwogY29uZmlnIENSWVBUT19BTlVCSVMKIAl0cmlzdGF0ZSAiQW51YmlzIGNpcGhlciBhbGdvcml0aG0iCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKQEAgLTcxNCw2ICs3NDksMTUgQEAKIAogCSAgWW91IHdpbGwgbW9zdCBwcm9iYWJseSB3YW50IHRoaXMgaWYgdXNpbmcgSVBTZWMuCiAKK2NvbmZpZyBDUllQVE9fWkxJQgorCXRyaXN0YXRlICJabGliIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKKwlzZWxlY3QgQ1JZUFRPX1BDT01QCisJc2VsZWN0IFpMSUJfSU5GTEFURQorCXNlbGVjdCBaTElCX0RFRkxBVEUKKwlzZWxlY3QgTkxBVFRSCisJaGVscAorCSAgVGhpcyBpcyB0aGUgemxpYiBhbGdvcml0aG0uCisKIGNvbmZpZyBDUllQVE9fTFpPCiAJdHJpc3RhdGUgIkxaTyBjb21wcmVzc2lvbiBhbGdvcml0aG0iCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCA0NmIwOGJmLi42NzNkOWY3IDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrIGIvY3J5cHRvL01ha2VmaWxlCkBAIC01LDYgKzUsOCBAQAogb2JqLSQoQ09ORklHX0NSWVBUTykgKz0gY3J5cHRvLm8KIGNyeXB0by1vYmpzIDo9IGFwaS5vIGNpcGhlci5vIGRpZ2VzdC5vIGNvbXByZXNzLm8KIAorb2JqLSQoQ09ORklHX0NSWVBUT19XT1JLUVVFVUUpICs9IGNyeXB0b193cS5vCisKIG9iai0kKENPTkZJR19DUllQVE9fRklQUykgKz0gZmlwcy5vCiAKIGNyeXB0b19hbGdhcGktJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCkBAIC0yNSw2ICsyNyw4IEBACiBjcnlwdG9faGFzaC1vYmpzICs9IHNoYXNoLm8KIG9iai0kKENPTkZJR19DUllQVE9fSEFTSDIpICs9IGNyeXB0b19oYXNoLm8KIAorb2JqLSQoQ09ORklHX0NSWVBUT19QQ09NUCkgKz0gcGNvbXByZXNzLm8KKwogY3J5cHRvbWdyLW9ianMgOj0gYWxnYm9zcy5vIHRlc3RtZ3IubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX01BTkFHRVIyKSArPSBjcnlwdG9tZ3IubwpAQCAtNzAsNiArNzQsNyBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19TRUVEKSArPSBzZWVkLm8KIG9iai0kKENPTkZJR19DUllQVE9fU0FMU0EyMCkgKz0gc2Fsc2EyMF9nZW5lcmljLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVGTEFURSkgKz0gZGVmbGF0ZS5vCitvYmotJChDT05GSUdfQ1JZUFRPX1pMSUIpICs9IHpsaWIubwogb2JqLSQoQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQykgKz0gbWljaGFlbF9taWMubwogb2JqLSQoQ09ORklHX0NSWVBUT19DUkMzMkMpICs9IGNyYzMyYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FVVEhFTkMpICs9IGF1dGhlbmMubwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FibGtjaXBoZXIuYyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKaW5kZXggOTQxNDBiMy4uZTExY2UzNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYWJsa2NpcGhlci5jCkBAIC0yODIsNiArMjgyLDI1IEBACiAJCQkJCSAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKQogCQlyZXR1cm4gYWxnOwogCisJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwlhbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSwgdHlwZSB8IENSWVBUT19BTEdfVEVTVEVELAorCQkJCSAgICBtYXNrICYgfkNSWVBUT19BTEdfVEVTVEVEKTsKKwlpZiAoSVNfRVJSKGFsZykpCisJCXJldHVybiBhbGc7CisKKwlpZiAoKGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0spID09CisJICAgIENSWVBUT19BTEdfVFlQRV9HSVZDSVBIRVIpIHsKKwkJaWYgKChhbGctPmNyYV9mbGFncyBeIHR5cGUgXiB+bWFzaykgJiBDUllQVE9fQUxHX1RFU1RFRCkgeworCQkJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwkJCWFsZyA9IEVSUl9QVFIoLUVOT0VOVCk7CisJCX0KKwkJcmV0dXJuIGFsZzsKKwl9CisKKwlCVUdfT04oISgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkJIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIgPyBhbGctPmNyYV9ibGtjaXBoZXIuaXZzaXplIDoKKwkJCQkJICAgICBhbGctPmNyYV9hYmxrY2lwaGVyLml2c2l6ZSkpOworCiAJcmV0dXJuIEVSUl9QVFIoY3J5cHRvX2dpdmNpcGhlcl9kZWZhdWx0KGFsZywgdHlwZSwgbWFzaykpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVhZC5jIGIvY3J5cHRvL2FlYWQuYwppbmRleCAzYTZmM2Y1Li5kOWFhNzMzIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVhZC5jCisrKyBiL2NyeXB0by9hZWFkLmMKQEAgLTQyMiw2ICs0MjIsMjIgQEAKIAlpZiAoIWFsZy0+Y3JhX2FlYWQuaXZzaXplKQogCQlyZXR1cm4gYWxnOwogCisJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwlhbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSwgdHlwZSB8IENSWVBUT19BTEdfVEVTVEVELAorCQkJCSAgICBtYXNrICYgfkNSWVBUT19BTEdfVEVTVEVEKTsKKwlpZiAoSVNfRVJSKGFsZykpCisJCXJldHVybiBhbGc7CisKKwlpZiAoYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX2FlYWRfdHlwZSkgeworCQlpZiAoKGFsZy0+Y3JhX2ZsYWdzIF4gdHlwZSBeIH5tYXNrKSAmIENSWVBUT19BTEdfVEVTVEVEKSB7CisJCQljcnlwdG9fbW9kX3B1dChhbGcpOworCQkJYWxnID0gRVJSX1BUUigtRU5PRU5UKTsKKwkJfQorCQlyZXR1cm4gYWxnOworCX0KKworCUJVR19PTighYWxnLT5jcmFfYWVhZC5pdnNpemUpOworCiAJcmV0dXJuIEVSUl9QVFIoY3J5cHRvX25pdmFlYWRfZGVmYXVsdChhbGcsIHR5cGUsIG1hc2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FsZ2Jvc3MuYyBiL2NyeXB0by9hbGdib3NzLmMKaW5kZXggNDYwMWU0MjYuLjY5MDZmOTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbGdib3NzLmMKKysrIGIvY3J5cHRvL2FsZ2Jvc3MuYwpAQCAtMTAsNyArMTAsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2FlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIwNiw4ICsyMDYsNyBAQAogCXUzMiB0eXBlID0gcGFyYW0tPnR5cGU7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoISgodHlwZSBeIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIpICYKLQkgICAgICBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSX01BU0spICYmICEodHlwZSAmIENSWVBUT19BTEdfR0VOSVYpKQorCWlmICh0eXBlICYgQ1JZUFRPX0FMR19URVNURUQpCiAJCWdvdG8gc2tpcHRlc3Q7CiAKIAllcnIgPSBhbGdfdGVzdChwYXJhbS0+ZHJpdmVyLCBwYXJhbS0+YWxnLCB0eXBlLCBDUllQVE9fQUxHX1RFU1RFRCk7CkBAIC0yMjMsNiArMjIyLDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAlzdHJ1Y3QgY3J5cHRvX3Rlc3RfcGFyYW0gKnBhcmFtOworCXUzMiB0eXBlOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiAJCWdvdG8gZXJyOwpAQCAtMjMzLDcgKzIzMywxOSBAQAogCiAJbWVtY3B5KHBhcmFtLT5kcml2ZXIsIGFsZy0+Y3JhX2RyaXZlcl9uYW1lLCBzaXplb2YocGFyYW0tPmRyaXZlcikpOwogCW1lbWNweShwYXJhbS0+YWxnLCBhbGctPmNyYV9uYW1lLCBzaXplb2YocGFyYW0tPmFsZykpOwotCXBhcmFtLT50eXBlID0gYWxnLT5jcmFfZmxhZ3M7CisJdHlwZSA9IGFsZy0+Y3JhX2ZsYWdzOworCisJLyogVGhpcyBwaWVjZSBvZiBjcmFwIG5lZWRzIHRvIGRpc2FwcGVhciBpbnRvIHBlci10eXBlIHRlc3QgaG9va3MuICovCisJaWYgKCghKCh0eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUikgJgorCSAgICAgICBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSX01BU0spICYmICEodHlwZSAmIENSWVBUT19BTEdfR0VOSVYpICYmCisJICAgICAoKGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0spID09CisJICAgICAgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiA/IGFsZy0+Y3JhX2Jsa2NpcGhlci5pdnNpemUgOgorCQkJCQkgIGFsZy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplKSkgfHwKKwkgICAgKCEoKHR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQUVBRCkgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgJiYKKwkgICAgIGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19uaXZhZWFkX3R5cGUgJiYgYWxnLT5jcmFfYWVhZC5pdnNpemUpKQorCQl0eXBlIHw9IENSWVBUT19BTEdfVEVTVEVEOworCisJcGFyYW0tPnR5cGUgPSB0eXBlOwogCiAJdGhyZWFkID0ga3RocmVhZF9ydW4oY3J5cHRvbWdyX3Rlc3QsIHBhcmFtLCAiY3J5cHRvbWdyX3Rlc3QiKTsKIAlpZiAoSVNfRVJSKHRocmVhZCkpCmRpZmYgLS1naXQgYS9jcnlwdG8vYW5zaV9jcHJuZy5jIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwppbmRleCAwZmFjOGZmLi5kODBlZDRjIDEwMDY0NAotLS0gYS9jcnlwdG8vYW5zaV9jcHJuZy5jCisrKyBiL2NyeXB0by9hbnNpX2Nwcm5nLmMKQEAgLTEzMiw5ICsxMzIsMTUgQEAKIAkJCSAqLwogCQkJaWYgKCFtZW1jbXAoY3R4LT5yYW5kX2RhdGEsIGN0eC0+bGFzdF9yYW5kX2RhdGEsCiAJCQkJCURFRkFVTFRfQkxLX1NaKSkgeworCQkJCWlmIChmaXBzX2VuYWJsZWQpIHsKKwkJCQkJcGFuaWMoImNwcm5nICVwIEZhaWxlZCByZXBldGl0aW9uIGNoZWNrIVxuIiwKKwkJCQkJCWN0eCk7CisJCQkJfQorCiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJCSJjdHggJXAgRmFpbGVkIHJlcGV0aXRpb24gY2hlY2shXG4iLAogCQkJCQljdHgpOworCiAJCQkJY3R4LT5mbGFncyB8PSBQUk5HX05FRURfUkVTRVQ7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CkBAIC0zMzgsNyArMzQ0LDE2IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmY3R4LT5wcm5nX2xvY2spOwogCi0JcmV0dXJuIHJlc2V0X3BybmdfY29udGV4dChjdHgsIE5VTEwsIERFRkFVTFRfUFJOR19LU1osIE5VTEwsIE5VTEwpOworCWlmIChyZXNldF9wcm5nX2NvbnRleHQoY3R4LCBOVUxMLCBERUZBVUxUX1BSTkdfS1NaLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBhZnRlciBhbGxvY2F0aW9uLCB3ZSBzaG91bGQgYWx3YXlzIGZvcmNlIHRoZSB1c2VyIHRvIHJlc2V0CisJICogc28gdGhleSBkb24ndCBpbmFkdmVydGVudGx5IHVzZSB0aGUgaW5zZWN1cmUgZGVmYXVsdCB2YWx1ZXMKKwkgKiB3aXRob3V0IHNwZWNpZnlpbmcgdGhlbSBpbnRlbnRpYWxseQorCSAqLworCWN0eC0+ZmxhZ3MgfD0gUFJOR19ORUVEX1JFU0VUOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcHJuZ19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCmRpZmYgLS1naXQgYS9jcnlwdG8vYXBpLmMgYi9jcnlwdG8vYXBpLmMKaW5kZXggMzhhMmJjMC4uMzE0ZGFiOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FwaS5jCisrKyBiL2NyeXB0by9hcGkuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJc3RydWN0IGNyeXB0b19hbGcgKmxhcnZhbDsKIAlpbnQgb2s7CiAKLQlpZiAoIShtYXNrICYgQ1JZUFRPX0FMR19URVNURUQpKSB7CisJaWYgKCEoKHR5cGUgfCBtYXNrKSAmIENSWVBUT19BTEdfVEVTVEVEKSkgewogCQl0eXBlIHw9IENSWVBUT19BTEdfVEVTVEVEOwogCQltYXNrIHw9IENSWVBUT19BTEdfVEVTVEVEOwogCX0KQEAgLTQ2NCw4ICs0NjQsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX2Jhc2UpOwogCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCit2b2lkICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKIHsKIAljaGFyICptZW07CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IE5VTEw7CkBAIC00OTksOSArNDk5LDkgQEAKIAkJY3J5cHRvX3Nob290X2FsZyhhbGcpOwogCWtmcmVlKG1lbSk7CiBvdXRfZXJyOgotCXRmbSA9IEVSUl9QVFIoZXJyKTsKKwltZW0gPSBFUlJfUFRSKGVycik7CiBvdXQ6Ci0JcmV0dXJuIHRmbTsKKwlyZXR1cm4gbWVtOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2NyZWF0ZV90Zm0pOwogCkBAIC01MjUsMTIgKzUyNSwxMSBAQAogICoKICAqCUluIGNhc2Ugb2YgZXJyb3IgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBlcnJvciBwb2ludGVyLgogICovCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwKLQkJCQkgICAgdTMyIHR5cGUsIHUzMiBtYXNrKQordm9pZCAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqKCpsb29rdXApKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwl2b2lkICp0Zm07CiAJaW50IGVycjsKIAogCXR5cGUgJj0gZnJvbnRlbmQtPm1hc2tjbGVhcjsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibGtjaXBoZXIuYyBiL2NyeXB0by9ibGtjaXBoZXIuYwppbmRleCBkNzBhNDFjLi45MGQyNmM5IDEwMDY0NAotLS0gYS9jcnlwdG8vYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2Jsa2NpcGhlci5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAlpbnQgZXJyOwogCiAJdHlwZSA9IGNyeXB0b19za2NpcGhlcl90eXBlKHR5cGUpOwotCW1hc2sgPSBjcnlwdG9fc2tjaXBoZXJfbWFzayhtYXNrKSB8IENSWVBUT19BTEdfR0VOSVY7CisJbWFzayA9IGNyeXB0b19za2NpcGhlcl9tYXNrKG1hc2spfCBDUllQVE9fQUxHX0dFTklWOwogCiAJYWxnID0gY3J5cHRvX2FsZ19tb2RfbG9va3VwKG5hbWUsIHR5cGUsIG1hc2spOwogCWlmIChJU19FUlIoYWxnKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9jaGFpbml2LmMgYi9jcnlwdG8vY2hhaW5pdi5jCmluZGV4IDdjMzdhNDkuLmJhMjAwYjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jaGFpbml2LmMKKysrIGIvY3J5cHRvL2NoYWluaXYuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3JuZy5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdG9fd3EuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMzMsNyArMTM0LDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCXF1ZXVlZCA9IHNjaGVkdWxlX3dvcmsoJmN0eC0+cG9zdHBvbmVkKTsKKwlxdWV1ZWQgPSBxdWV1ZV93b3JrKGtjcnlwdG9fd3EsICZjdHgtPnBvc3Rwb25lZCk7CiAJQlVHX09OKCFxdWV1ZWQpOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRkLmMgYi9jcnlwdG8vY3J5cHRkLmMKaW5kZXggZDI5ZTA2Yi4uZDE0YjIyNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0ZC5jCisrKyBiL2NyeXB0by9jcnlwdGQuYwpAQCAtMTIsMzAgKzEyLDMxIEBACiAKICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRkLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jZGVmaW5lIENSWVBURF9NQVhfUUxFTiAxMDAKKyNkZWZpbmUgQ1JZUFREX01BWF9DUFVfUUxFTiAxMDAKIAotc3RydWN0IGNyeXB0ZF9zdGF0ZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBtdXRleDsKK3N0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlIHsKIAlzdHJ1Y3QgY3J5cHRvX3F1ZXVlIHF1ZXVlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisKK3N0cnVjdCBjcnlwdGRfcXVldWUgeworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CiB9OwogCiBzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCB7CiAJc3RydWN0IGNyeXB0b19zcGF3biBzcGF3bjsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZTsKIH07CiAKIHN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX2N0eCB7CkBAIC01NCwxMSArNTUsODUgQEAKIAljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpjcnlwdGRfZ2V0X3N0YXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgdm9pZCBjcnlwdGRfcXVldWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3N0YXRpYyBpbnQgY3J5cHRkX2luaXRfcXVldWUoc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUsCisJCQkgICAgIHVuc2lnbmVkIGludCBtYXhfY3B1X3FsZW4pCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCisJcXVldWUtPmNwdV9xdWV1ZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSk7CisJaWYgKCFxdWV1ZS0+Y3B1X3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNwdV9xdWV1ZSA9IHBlcl9jcHVfcHRyKHF1ZXVlLT5jcHVfcXVldWUsIGNwdSk7CisJCWNyeXB0b19pbml0X3F1ZXVlKCZjcHVfcXVldWUtPnF1ZXVlLCBtYXhfY3B1X3FsZW4pOworCQlJTklUX1dPUksoJmNwdV9xdWV1ZS0+d29yaywgY3J5cHRkX3F1ZXVlX3dvcmtlcik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdGRfZmluaV9xdWV1ZShzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNwdV9xdWV1ZSA9IHBlcl9jcHVfcHRyKHF1ZXVlLT5jcHVfcXVldWUsIGNwdSk7CisJCUJVR19PTihjcHVfcXVldWUtPnF1ZXVlLnFsZW4pOworCX0KKwlmcmVlX3BlcmNwdShxdWV1ZS0+Y3B1X3F1ZXVlKTsKK30KKworc3RhdGljIGludCBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlLAorCQkJCSAgc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWludCBjcHUsIGVycjsKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCisJY3B1ID0gZ2V0X2NwdSgpOworCWNwdV9xdWV1ZSA9IHBlcl9jcHVfcHRyKHF1ZXVlLT5jcHVfcXVldWUsIGNwdSk7CisJZXJyID0gY3J5cHRvX2VucXVldWVfcmVxdWVzdCgmY3B1X3F1ZXVlLT5xdWV1ZSwgcmVxdWVzdCk7CisJcXVldWVfd29ya19vbihjcHUsIGtjcnlwdG9fd3EsICZjcHVfcXVldWUtPndvcmspOworCXB1dF9jcHUoKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIENhbGxlZCBpbiB3b3JrcXVldWUgY29udGV4dCwgZG8gb25lIHJlYWwgY3J5cHRpb24gd29yayAodmlhCisgKiByZXEtPmNvbXBsZXRlKSBhbmQgcmVzY2hlZHVsZSBpdHNlbGYgaWYgdGhlcmUgYXJlIG1vcmUgd29yayB0bworICogZG8uICovCitzdGF0aWMgdm9pZCBjcnlwdGRfcXVldWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCAqYmFja2xvZzsKKworCWNwdV9xdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSwgd29yayk7CisJLyogT25seSBoYW5kbGUgb25lIHJlcXVlc3QgYXQgYSB0aW1lIHRvIGF2b2lkIGhvZ2dpbmcgY3J5cHRvCisJICogd29ya3F1ZXVlLiBwcmVlbXB0X2Rpc2FibGUvZW5hYmxlIGlzIHVzZWQgdG8gcHJldmVudAorCSAqIGJlaW5nIHByZWVtcHRlZCBieSBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KCkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwliYWNrbG9nID0gY3J5cHRvX2dldF9iYWNrbG9nKCZjcHVfcXVldWUtPnF1ZXVlKTsKKwlyZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZjcHVfcXVldWUtPnF1ZXVlKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJaWYgKCFyZXEpCisJCXJldHVybjsKKworCWlmIChiYWNrbG9nKQorCQliYWNrbG9nLT5jb21wbGV0ZShiYWNrbG9nLCAtRUlOUFJPR1JFU1MpOworCXJlcS0+Y29tcGxldGUocmVxLCAwKTsKKworCWlmIChjcHVfcXVldWUtPnF1ZXVlLnFsZW4pCisJCXF1ZXVlX3dvcmsoa2NyeXB0b193cSwgJmNwdV9xdWV1ZS0+d29yayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqY3J5cHRkX2dldF9xdWV1ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QgPSBjcnlwdG9fdGZtX2FsZ19pbnN0YW5jZSh0Zm0pOwogCXN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4ICppY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKLQlyZXR1cm4gaWN0eC0+c3RhdGU7CisJcmV0dXJuIGljdHgtPnF1ZXVlOwogfQogCiBzdGF0aWMgaW50IGNyeXB0ZF9ibGtjaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqcGFyZW50LApAQCAtMTMwLDE5ICsyMDUsMTMgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9yZXF1ZXN0X2N0eCAqcmN0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0KLQkJY3J5cHRkX2dldF9zdGF0ZShjcnlwdG9fYWJsa2NpcGhlcl90Zm0odGZtKSk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZTsKIAorCXF1ZXVlID0gY3J5cHRkX2dldF9xdWV1ZShjcnlwdG9fYWJsa2NpcGhlcl90Zm0odGZtKSk7CiAJcmN0eC0+Y29tcGxldGUgPSByZXEtPmJhc2UuY29tcGxldGU7CiAJcmVxLT5iYXNlLmNvbXBsZXRlID0gY29tcGxldGU7CiAKLQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQllcnIgPSBhYmxrY2lwaGVyX2VucXVldWVfcmVxdWVzdCgmc3RhdGUtPnF1ZXVlLCByZXEpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0KLQl3YWtlX3VwX3Byb2Nlc3Moc3RhdGUtPnRhc2spOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3QocXVldWUsICZyZXEtPmJhc2UpOwogfQogCiBzdGF0aWMgaW50IGNyeXB0ZF9ibGtjaXBoZXJfZW5jcnlwdF9lbnF1ZXVlKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKQEAgLTE3NiwyMSArMjQ1LDEyIEBACiBzdGF0aWMgdm9pZCBjcnlwdGRfYmxrY2lwaGVyX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gY3J5cHRkX2dldF9zdGF0ZSh0Zm0pOwotCWludCBhY3RpdmU7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWFjdGl2ZSA9IGFibGtjaXBoZXJfdGZtX2luX3F1ZXVlKCZzdGF0ZS0+cXVldWUsCi0JCQkJCSBfX2NyeXB0b19hYmxrY2lwaGVyX2Nhc3QodGZtKSk7Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0JQlVHX09OKGFjdGl2ZSk7CiAKIAljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3R4LT5jaGlsZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2NfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkJCSAgICAgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCisJCQkJCQkgICAgIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggKmN0eDsKQEAgLTIxMyw3ICsyNzMsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKIAotCWN0eC0+c3RhdGUgPSBzdGF0ZTsKKwljdHgtPnF1ZXVlID0gcXVldWU7CiAKIAltZW1jcHkoaW5zdC0+YWxnLmNyYV9uYW1lLCBhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FKTsKIApAQCAtMjMxLDcgKzI5MSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKAotCXN0cnVjdCBydGF0dHIgKip0Yiwgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCisJc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CkBAIC0yNDEsNyArMzAxLDcgQEAKIAlpZiAoSVNfRVJSKGFsZykpCiAJCXJldHVybiBFUlJfQ0FTVChhbGcpOwogCi0JaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHN0YXRlKTsKKwlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgcXVldWUpOwogCWlmIChJU19FUlIoaW5zdCkpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CiAKQEAgLTI4OSwxNSArMzQ5LDYgQEAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0ZF9oYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9IGNyeXB0ZF9nZXRfc3RhdGUodGZtKTsKLQlpbnQgYWN0aXZlOwotCi0JbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQlhY3RpdmUgPSBhaGFzaF90Zm1faW5fcXVldWUoJnN0YXRlLT5xdWV1ZSwKLQkJCQlfX2NyeXB0b19haGFzaF9jYXN0KHRmbSkpOwotCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQotCUJVR19PTihhY3RpdmUpOwogCiAJY3J5cHRvX2ZyZWVfaGFzaChjdHgtPmNoaWxkKTsKIH0KQEAgLTMyMywxOSArMzc0LDEzIEBACiB7CiAJc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPQotCQljcnlwdGRfZ2V0X3N0YXRlKGNyeXB0b19haGFzaF90Zm0odGZtKSk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSA9CisJCWNyeXB0ZF9nZXRfcXVldWUoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKIAogCXJjdHgtPmNvbXBsZXRlID0gcmVxLT5iYXNlLmNvbXBsZXRlOwogCXJlcS0+YmFzZS5jb21wbGV0ZSA9IGNvbXBsZXRlOwogCi0Jc3Bpbl9sb2NrX2JoKCZzdGF0ZS0+bG9jayk7Ci0JZXJyID0gYWhhc2hfZW5xdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUsIHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCXdha2VfdXBfcHJvY2VzcyhzdGF0ZS0+dGFzayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRkX2VucXVldWVfcmVxdWVzdChxdWV1ZSwgJnJlcS0+YmFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2luaXQoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXFfYXN5bmMsIGludCBlcnIpCkBAIC00NjgsNyArNTEzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19oYXNoKAotCXN0cnVjdCBydGF0dHIgKip0Yiwgc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCisJc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CkBAIC00NzgsNyArNTIzLDcgQEAKIAlpZiAoSVNfRVJSKGFsZykpCiAJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoYWxnKSk7CiAKLQlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgc3RhdGUpOworCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBxdWV1ZSk7CiAJaWYgKElTX0VSUihpbnN0KSkKIAkJZ290byBvdXRfcHV0X2FsZzsKIApAQCAtNTAyLDcgKzU0Nyw3IEBACiAJcmV0dXJuIGluc3Q7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRkX3N0YXRlIHN0YXRlOworc3RhdGljIHN0cnVjdCBjcnlwdGRfcXVldWUgcXVldWU7CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2Moc3RydWN0IHJ0YXR0ciAqKnRiKQogewpAQCAtNTE0LDkgKzU1OSw5IEBACiAKIAlzd2l0Y2ggKGFsZ3QtPnR5cGUgJiBhbGd0LT5tYXNrICYgQ1JZUFRPX0FMR19UWVBFX01BU0spIHsKIAljYXNlIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVI6Ci0JCXJldHVybiBjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKHRiLCAmc3RhdGUpOworCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2Jsa2NpcGhlcih0YiwgJnF1ZXVlKTsKIAljYXNlIENSWVBUT19BTEdfVFlQRV9ESUdFU1Q6Ci0JCXJldHVybiBjcnlwdGRfYWxsb2NfaGFzaCh0YiwgJnN0YXRlKTsKKwkJcmV0dXJuIGNyeXB0ZF9hbGxvY19oYXNoKHRiLCAmcXVldWUpOwogCX0KIAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtNTM3LDgyICs1ODIsNTggQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBjcnlwdGRfY3JlYXRlX3RocmVhZChzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSwKLQkJCQkgICAgICAgaW50ICgqZm4pKHZvaWQgKmRhdGEpLCBjb25zdCBjaGFyICpuYW1lKQorc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcihjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJCQkJCSAgdTMyIHR5cGUsIHUzMiBtYXNrKQogewotCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+bG9jayk7Ci0JbXV0ZXhfaW5pdCgmc3RhdGUtPm11dGV4KTsKLQljcnlwdG9faW5pdF9xdWV1ZSgmc3RhdGUtPnF1ZXVlLCBDUllQVERfTUFYX1FMRU4pOworCWNoYXIgY3J5cHRkX2FsZ19uYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtOwogCi0Jc3RhdGUtPnRhc2sgPSBrdGhyZWFkX3J1bihmbiwgc3RhdGUsIG5hbWUpOwotCWlmIChJU19FUlIoc3RhdGUtPnRhc2spKQotCQlyZXR1cm4gUFRSX0VSUihzdGF0ZS0+dGFzayk7CisJaWYgKHNucHJpbnRmKGNyeXB0ZF9hbGdfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAiY3J5cHRkKCVzKSIsIGFsZ19uYW1lKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihjcnlwdGRfYWxnX25hbWUsIHR5cGUsIG1hc2spOworCWlmIChJU19FUlIodGZtKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHRmbSk7CisJaWYgKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pLT5fX2NydF9hbGctPmNyYV9tb2R1bGUgIT0gVEhJU19NT0RVTEUpIHsKKwkJY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcih0Zm0pOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19jcnlwdGRfYWJsa2NpcGhlcl9jYXN0KHRmbSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfYWxsb2NfYWJsa2NpcGhlcik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdGRfc3RvcF90aHJlYWQoc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUpCitzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pCiB7Ci0JQlVHX09OKHN0YXRlLT5xdWV1ZS5xbGVuKTsKLQlrdGhyZWFkX3N0b3Aoc3RhdGUtPnRhc2spOworCXN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KCZ0Zm0tPmJhc2UpOworCXJldHVybiBjdHgtPmNoaWxkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQpOwogCi1zdGF0aWMgaW50IGNyeXB0ZF90aHJlYWQodm9pZCAqZGF0YSkKK3ZvaWQgY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSkKIHsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9IGRhdGE7Ci0JaW50IHN0b3A7Ci0KLQljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLQotCWRvIHsKLQkJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsICpiYWNrbG9nOwotCi0JCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQkJYmFja2xvZyA9IGNyeXB0b19nZXRfYmFja2xvZygmc3RhdGUtPnF1ZXVlKTsKLQkJcmVxID0gY3J5cHRvX2RlcXVldWVfcmVxdWVzdCgmc3RhdGUtPnF1ZXVlKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCQlzdG9wID0ga3RocmVhZF9zaG91bGRfc3RvcCgpOwotCi0JCWlmIChzdG9wIHx8IHJlcSkgewotCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJaWYgKHJlcSkgewotCQkJCWlmIChiYWNrbG9nKQotCQkJCQliYWNrbG9nLT5jb21wbGV0ZShiYWNrbG9nLAotCQkJCQkJCSAgLUVJTlBST0dSRVNTKTsKLQkJCQlyZXEtPmNvbXBsZXRlKHJlcSwgMCk7Ci0JCQl9Ci0JCX0KLQotCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0KLQkJc2NoZWR1bGUoKTsKLQl9IHdoaWxlICghc3RvcCk7Ci0KLQlyZXR1cm4gMDsKKwljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKCZ0Zm0tPmJhc2UpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcik7CiAKIHN0YXRpYyBpbnQgX19pbml0IGNyeXB0ZF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGNyeXB0ZF9jcmVhdGVfdGhyZWFkKCZzdGF0ZSwgY3J5cHRkX3RocmVhZCwgImNyeXB0ZCIpOworCWVyciA9IGNyeXB0ZF9pbml0X3F1ZXVlKCZxdWV1ZSwgQ1JZUFREX01BWF9DUFVfUUxFTik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRkX3RtcGwpOwogCWlmIChlcnIpCi0JCWt0aHJlYWRfc3RvcChzdGF0ZS50YXNrKTsKKwkJY3J5cHRkX2ZpbmlfcXVldWUoJnF1ZXVlKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdGRfZXhpdCh2b2lkKQogewotCWNyeXB0ZF9zdG9wX3RocmVhZCgmc3RhdGUpOworCWNyeXB0ZF9maW5pX3F1ZXVlKCZxdWV1ZSk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0ZF90bXBsKTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0b193cS5jIGIvY3J5cHRvL2NyeXB0b193cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkY2Y2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vY3J5cHRvX3dxLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIFdvcmtxdWV1ZSBmb3IgY3J5cHRvIHN1YnN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3JwLgorICogICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgorCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2NyeXB0b193cTsKK0VYUE9SVF9TWU1CT0xfR1BMKGtjcnlwdG9fd3EpOworCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fd3FfaW5pdCh2b2lkKQoreworCWtjcnlwdG9fd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJjcnlwdG8iKTsKKwlpZiAodW5saWtlbHkoIWtjcnlwdG9fd3EpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b193cV9leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUoa2NyeXB0b193cSk7Cit9CisKK21vZHVsZV9pbml0KGNyeXB0b193cV9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0b193cV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXb3JrcXVldWUgZm9yIGNyeXB0byBzdWJzeXN0ZW0iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9nZjEyOG11bC5jIGIvY3J5cHRvL2dmMTI4bXVsLmMKaW5kZXggZWNiZWFhMS4uYTkwZDI2MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2dmMTI4bXVsLmMKKysrIGIvY3J5cHRvL2dmMTI4bXVsLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIFJpayBTbmVsIDxyc25lbEBjdWJlLmR5bmRucy5vcmc+CiAgKgogICogQmFzZWQgb24gRHIgQnJpYW4gR2xhZG1hbidzIChHUEwnZCkgd29yayBwdWJsaXNoZWQgYXQKLSAqIGh0dHA6Ly9mcC5nbGFkbWFuLnBsdXMuY29tL2NyeXB0b2dyYXBoeV90ZWNobm9sb2d5L2luZGV4Lmh0bQorICogaHR0cDovL2dsYWRtYW4ucGx1c2hvc3QuY28udWsvb2xkc2l0ZS9jcnlwdG9ncmFwaHlfdGVjaG5vbG9neS9pbmRleC5waHAKICAqIFNlZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBiZWxvdy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApkaWZmIC0tZ2l0IGEvY3J5cHRvL2ludGVybmFsLmggYi9jcnlwdG8vaW50ZXJuYWwuaAppbmRleCAzYzE5YTI3Li5mYzc2ZTFmIDEwMDY0NAotLS0gYS9jcnlwdG8vaW50ZXJuYWwuaAorKysgYi9jcnlwdG8vaW50ZXJuYWwuaApAQCAtMTA5LDggKzEwOSwxMCBAQAogdm9pZCBjcnlwdG9fc2hvb3RfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpOwogc3RydWN0IGNyeXB0b190Zm0gKl9fY3J5cHRvX2FsbG9jX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLCB1MzIgdHlwZSwKIAkJCQkgICAgICB1MzIgbWFzayk7Ci1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpOwordm9pZCAqY3J5cHRvX2NyZWF0ZV90Zm0oc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJCWNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpOwordm9pZCAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsIHUzMiB0eXBlLCB1MzIgbWFzayk7CiAKIGludCBjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwKIAkJCSAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vcGNvbXByZXNzLmMgYi9jcnlwdG8vcGNvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5YTRhZgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9wY29tcHJlc3MuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogUGFydGlhbCAoZGUpY29tcHJlc3Npb24gb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworCitzdGF0aWMgaW50IGNyeXB0b19wY29tcF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fcGNvbXBfZXh0c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJCQkgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3sKKwlyZXR1cm4gYWxnLT5jcmFfY3R4c2l6ZTsKK30KKworc3RhdGljIGludCBjcnlwdG9fcGNvbXBfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCQkgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3Bjb21wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQorCV9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKK3N0YXRpYyB2b2lkIGNyeXB0b19wY29tcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlzZXFfcHJpbnRmKG0sICJ0eXBlICAgICAgICAgOiBwY29tcFxuIik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3Bjb21wX3R5cGUgPSB7CisJLmV4dHNpemUJPSBjcnlwdG9fcGNvbXBfZXh0c2l6ZSwKKwkuaW5pdAkJPSBjcnlwdG9fcGNvbXBfaW5pdCwKKwkuaW5pdF90Zm0JPSBjcnlwdG9fcGNvbXBfaW5pdF90Zm0sCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwkuc2hvdwkJPSBjcnlwdG9fcGNvbXBfc2hvdywKKyNlbmRpZgorCS5tYXNrY2xlYXIJPSB+Q1JZUFRPX0FMR19UWVBFX01BU0ssCisJLm1hc2tzZXQJPSBDUllQVE9fQUxHX1RZUEVfTUFTSywKKwkudHlwZQkJPSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTLAorCS50Zm1zaXplCT0gb2Zmc2V0b2Yoc3RydWN0IGNyeXB0b19wY29tcCwgYmFzZSksCit9OworCitzdHJ1Y3QgY3J5cHRvX3Bjb21wICpjcnlwdG9fYWxsb2NfcGNvbXAoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAorCQkJCQl1MzIgbWFzaykKK3sKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19wY29tcF90eXBlLCB0eXBlLCBtYXNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19wY29tcCk7CisKK2ludCBjcnlwdG9fcmVnaXN0ZXJfcGNvbXAoc3RydWN0IHBjb21wX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICpiYXNlID0gJmFsZy0+YmFzZTsKKworCWJhc2UtPmNyYV90eXBlID0gJmNyeXB0b19wY29tcF90eXBlOworCWJhc2UtPmNyYV9mbGFncyAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7CisJYmFzZS0+Y3JhX2ZsYWdzIHw9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1M7CisKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZyhiYXNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19yZWdpc3Rlcl9wY29tcCk7CisKK2ludCBjcnlwdG9fdW5yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpCit7CisJcmV0dXJuIGNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnLT5iYXNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQYXJ0aWFsIChkZSljb21wcmVzc2lvbiB0eXBlIik7CitNT0RVTEVfQVVUSE9SKCJTb255IENvcnBvcmF0aW9uIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCmluZGV4IGNhYTM1NDIuLjYzNDlkODMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCkBAIC0yLDcgKzIsNyBAQAogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogU0hBLTI1NiwgYXMgc3BlY2lmaWVkIGluCi0gKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9zaHMvc2hhMjU2LTM4NC01MTIucGRmCisgKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1RNL2NhdnAvZG9jdW1lbnRzL3Nocy9zaGEyNTYtMzg0LTUxMi5wZGYKICAqCiAgKiBTSEEtMjU2IGNvZGUgYnkgSmVhbi1MdWMgQ29va2UgPGpsY29va2VAY2VydGFpbmtleS5jb20+LgogICoKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGFzaC5jIGIvY3J5cHRvL3NoYXNoLmMKaW5kZXggZDVhMmI2MS4uN2E2NTk3MyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYXNoLmMKKysrIGIvY3J5cHRvL3NoYXNoLmMKQEAgLTE4LDE1ICsxOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19zaGFzaF90eXBlOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fc2hhc2ggKl9fY3J5cHRvX3NoYXNoX2Nhc3Qoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHRmbSwgc3RydWN0IGNyeXB0b19zaGFzaCwgYmFzZSk7Ci19Ci0KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19zaGFzaF90eXBlOworCiBzdGF0aWMgaW50IHNoYXNoX3NldGtleV91bmFsaWduZWQoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJCSAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKQEAgLTI4Miw4ICsyNzcsNyBAQAogCWlmICghY3J5cHRvX21vZF9nZXQoY2FsZykpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc2hhc2ggPSBfX2NyeXB0b19zaGFzaF9jYXN0KGNyeXB0b19jcmVhdGVfdGZtKAotCQljYWxnLCAmY3J5cHRvX3NoYXNoX3R5cGUpKTsKKwlzaGFzaCA9IGNyeXB0b19jcmVhdGVfdGZtKGNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSk7CiAJaWYgKElTX0VSUihzaGFzaCkpIHsKIAkJY3J5cHRvX21vZF9wdXQoY2FsZyk7CiAJCXJldHVybiBQVFJfRVJSKHNoYXNoKTsKQEAgLTM5MSw4ICszODUsNyBAQAogCWlmICghY3J5cHRvX21vZF9nZXQoY2FsZykpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc2hhc2ggPSBfX2NyeXB0b19zaGFzaF9jYXN0KGNyeXB0b19jcmVhdGVfdGZtKAotCQljYWxnLCAmY3J5cHRvX3NoYXNoX3R5cGUpKTsKKwlzaGFzaCA9IGNyeXB0b19jcmVhdGVfdGZtKGNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSk7CiAJaWYgKElTX0VSUihzaGFzaCkpIHsKIAkJY3J5cHRvX21vZF9wdXQoY2FsZyk7CiAJCXJldHVybiBQVFJfRVJSKHNoYXNoKTsKQEAgLTQ0Miw4ICs0MzUsNiBAQAogc3RhdGljIGludCBjcnlwdG9fc2hhc2hfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKIAkJCQkgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKIHsKLQlpZiAoZnJvbnRlbmQtPnR5cGUgIT0gQ1JZUFRPX0FMR19UWVBFX1NIQVNIKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgyLDggKzQ3Myw3IEBACiBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjcnlwdG9fYWxsb2Nfc2hhc2goY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAogCQkJCQl1MzIgbWFzaykKIHsKLQlyZXR1cm4gX19jcnlwdG9fc2hhc2hfY2FzdCgKLQkJY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19zaGFzaF90eXBlLCB0eXBlLCBtYXNrKSk7CisJcmV0dXJuIGNyeXB0b19hbGxvY190Zm0oYWxnX25hbWUsICZjcnlwdG9fc2hhc2hfdHlwZSwgdHlwZSwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2Nfc2hhc2gpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vdGNyeXB0LmMgYi9jcnlwdG8vdGNyeXB0LmMKaW5kZXggMjhhNDVhMS4uYzNjOTEyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL3RjcnlwdC5jCisrKyBiL2NyeXB0by90Y3J5cHQuYwpAQCAtNTMsNyArNTMsNyBAQAogCSJjYXN0NiIsICJhcmM0IiwgIm1pY2hhZWxfbWljIiwgImRlZmxhdGUiLCAiY3JjMzJjIiwgInRlYSIsICJ4dGVhIiwKIAkia2hhemFkIiwgIndwNTEyIiwgIndwMzg0IiwgIndwMjU2IiwgInRuZXByZXMiLCAieGV0YSIsICAiZmNyeXB0IiwKIAkiY2FtZWxsaWEiLCAic2VlZCIsICJzYWxzYTIwIiwgInJtZDEyOCIsICJybWQxNjAiLCAicm1kMjU2IiwgInJtZDMyMCIsCi0JImx6byIsICJjdHMiLCBOVUxMCisJImx6byIsICJjdHMiLCAiemxpYiIsIE5VTEwKIH07CiAKIHN0YXRpYyBpbnQgdGVzdF9jaXBoZXJfamlmZmllcyhzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGludCBlbmMsCkBAIC02NjEsNiArNjYxLDEwIEBACiAJCXRjcnlwdF90ZXN0KCJlY2Ioc2VlZCkiKTsKIAkJYnJlYWs7CiAKKwljYXNlIDQ0OgorCQl0Y3J5cHRfdGVzdCgiemxpYiIpOworCQlicmVhazsKKwogCWNhc2UgMTAwOgogCQl0Y3J5cHRfdGVzdCgiaG1hYyhtZDUpIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuYyBiL2NyeXB0by90ZXN0bWdyLmMKaW5kZXggYTc1ZjExZi4uYjUwYzNjNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuYworKysgYi9jcnlwdG8vdGVzdG1nci5jCkBAIC03Miw2ICs3MiwxMyBAQAogCX0gY29tcCwgZGVjb21wOwogfTsKIAorc3RydWN0IHBjb21wX3Rlc3Rfc3VpdGUgeworCXN0cnVjdCB7CisJCXN0cnVjdCBwY29tcF90ZXN0dmVjICp2ZWNzOworCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJfSBjb21wLCBkZWNvbXA7Cit9OworCiBzdHJ1Y3QgaGFzaF90ZXN0X3N1aXRlIHsKIAlzdHJ1Y3QgaGFzaF90ZXN0dmVjICp2ZWNzOwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTg2LDYgKzkzLDcgQEAKIAkJc3RydWN0IGFlYWRfdGVzdF9zdWl0ZSBhZWFkOwogCQlzdHJ1Y3QgY2lwaGVyX3Rlc3Rfc3VpdGUgY2lwaGVyOwogCQlzdHJ1Y3QgY29tcF90ZXN0X3N1aXRlIGNvbXA7CisJCXN0cnVjdCBwY29tcF90ZXN0X3N1aXRlIHBjb21wOwogCQlzdHJ1Y3QgaGFzaF90ZXN0X3N1aXRlIGhhc2g7CiAJfSBzdWl0ZTsKIH07CkBAIC04OTgsNiArOTA2LDE1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdGVzdF9wY29tcChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCSAgICAgIHN0cnVjdCBwY29tcF90ZXN0dmVjICpjdGVtcGxhdGUsCisJCSAgICAgIHN0cnVjdCBwY29tcF90ZXN0dmVjICpkdGVtcGxhdGUsIGludCBjdGNvdW50LAorCQkgICAgICBpbnQgZHRjb3VudCkKK3sKKwljb25zdCBjaGFyICphbGdvID0gY3J5cHRvX3RmbV9hbGdfZHJpdmVyX25hbWUoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIHJlc3VsdFtDT01QX0JVRl9TSVpFXTsKKwlpbnQgZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3Rjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBjb21wX3JlcXVlc3QgcmVxOworCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX3NldHVwKHRmbSwgY3RlbXBsYXRlW2ldLnBhcmFtcywKKwkJCQkJICAgICAgY3RlbXBsYXRlW2ldLnBhcmFtc2l6ZSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBzZXR1cCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc19pbml0KHRmbSk7CisJCWlmIChlcnJvcikgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBjb21wcmVzc2lvbiBpbml0IGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKKworCQlyZXEubmV4dF9pbiA9IGN0ZW1wbGF0ZVtpXS5pbnB1dDsKKwkJcmVxLmF2YWlsX2luID0gY3RlbXBsYXRlW2ldLmlubGVuIC8gMjsKKwkJcmVxLm5leHRfb3V0ID0gcmVzdWx0OworCQlyZXEuYXZhaWxfb3V0ID0gY3RlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBBZGQgcmVtYWluaW5nIGlucHV0IGRhdGEgKi8KKwkJcmVxLmF2YWlsX2luICs9IChjdGVtcGxhdGVbaV0uaW5sZW4gKyAxKSAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBQcm92aWRlIHJlbWFpbmluZyBvdXRwdXQgc3BhY2UgKi8KKwkJcmVxLmF2YWlsX291dCArPSBDT01QX0JVRl9TSVpFIC0gY3RlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3NfZmluYWwodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIGZpbmFsIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmIChDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCAhPSBjdGVtcGxhdGVbaV0ub3V0bGVuKSB7CisJCQlwcl9lcnIoImFsZzogY29tcDogQ29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICVzOiAiCisJCQkgICAgICAgIm91dHB1dCBsZW4gPSAlZCAoZXhwZWN0ZWQgJWQpXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCwKKwkJCSAgICAgICBjdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG1lbWNtcChyZXN1bHQsIGN0ZW1wbGF0ZVtpXS5vdXRwdXQsIGN0ZW1wbGF0ZVtpXS5vdXRsZW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IENvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzXG4iLCBpICsgMSwgYWxnbyk7CisJCQloZXhkdW1wKHJlc3VsdCwgY3RlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBkdGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGNvbXBfcmVxdWVzdCByZXE7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19zZXR1cCh0Zm0sIGR0ZW1wbGF0ZVtpXS5wYXJhbXMsCisJCQkJCQlkdGVtcGxhdGVbaV0ucGFyYW1zaXplKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gc2V0dXAgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX2luaXQodGZtKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gaW5pdCBmYWlsZWQgb24gdGVzdCAiCisJCQkgICAgICAgIiVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisKKwkJcmVxLm5leHRfaW4gPSBkdGVtcGxhdGVbaV0uaW5wdXQ7CisJCXJlcS5hdmFpbF9pbiA9IGR0ZW1wbGF0ZVtpXS5pbmxlbiAvIDI7CisJCXJlcS5uZXh0X291dCA9IHJlc3VsdDsKKwkJcmVxLmF2YWlsX291dCA9IGR0ZW1wbGF0ZVtpXS5vdXRsZW4gLyAyOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIEFkZCByZW1haW5pbmcgaW5wdXQgZGF0YSAqLworCQlyZXEuYXZhaWxfaW4gKz0gKGR0ZW1wbGF0ZVtpXS5pbmxlbiArIDEpIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiB1cGRhdGUgZmFpbGVkIG9uICIKKwkJCSAgICAgICAidGVzdCAlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywKKwkJCSAgICAgICBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQkvKiBQcm92aWRlIHJlbWFpbmluZyBvdXRwdXQgc3BhY2UgKi8KKwkJcmVxLmF2YWlsX291dCArPSBDT01QX0JVRl9TSVpFIC0gZHRlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc19maW5hbCh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IgICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBmaW5hbCBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmIChDT01QX0JVRl9TSVpFIC0gcmVxLmF2YWlsX291dCAhPSBkdGVtcGxhdGVbaV0ub3V0bGVuKSB7CisJCQlwcl9lcnIoImFsZzogY29tcDogRGVjb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlczogb3V0cHV0IGxlbiA9ICVkIChleHBlY3RlZCAlZClcbiIsIGkgKyAxLAorCQkJICAgICAgIGFsZ28sIENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0LAorCQkJICAgICAgIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobWVtY21wKHJlc3VsdCwgZHRlbXBsYXRlW2ldLm91dHB1dCwgZHRlbXBsYXRlW2ldLm91dGxlbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogRGVjb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgIgorCQkJICAgICAgICIlc1xuIiwgaSArIDEsIGFsZ28pOworCQkJaGV4ZHVtcChyZXN1bHQsIGR0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhbGdfdGVzdF9hZWFkKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCiAJCQkgdTMyIHR5cGUsIHUzMiBtYXNrKQogewpAQCAtMTAwNyw2ICsxMTY4LDI4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBhbGdfdGVzdF9wY29tcChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAorCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b19wY29tcCAqdGZtOworCWludCBlcnI7CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfcGNvbXAoZHJpdmVyLCB0eXBlLCBtYXNrKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJfZXJyKCJhbGc6IHBjb21wOiBGYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsCisJCSAgICAgICBkcml2ZXIsIFBUUl9FUlIodGZtKSk7CisJCXJldHVybiBQVFJfRVJSKHRmbSk7CisJfQorCisJZXJyID0gdGVzdF9wY29tcCh0Zm0sIGRlc2MtPnN1aXRlLnBjb21wLmNvbXAudmVjcywKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5kZWNvbXAudmVjcywKKwkJCSBkZXNjLT5zdWl0ZS5wY29tcC5jb21wLmNvdW50LAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmRlY29tcC5jb3VudCk7CisKKwljcnlwdG9fZnJlZV9wY29tcCh0Zm0pOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYWxnX3Rlc3RfaGFzaChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqZHJpdmVyLAogCQkJIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKQEAgLTE4MzUsNiArMjAxOCwyMSBAQAogCQkJCX0KIAkJCX0KIAkJfQorCX0sIHsKKwkJLmFsZyA9ICJ6bGliIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9wY29tcCwKKwkJLnN1aXRlID0geworCQkJLnBjb21wID0geworCQkJCS5jb21wID0geworCQkJCQkudmVjcyA9IHpsaWJfY29tcF90dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gWkxJQl9DT01QX1RFU1RfVkVDVE9SUworCQkJCX0sCisJCQkJLmRlY29tcCA9IHsKKwkJCQkJLnZlY3MgPSB6bGliX2RlY29tcF90dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gWkxJQl9ERUNPTVBfVEVTVF9WRUNUT1JTCisJCQkJfQorCQkJfQorCQl9CiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuaCBiL2NyeXB0by90ZXN0bWdyLmgKaW5kZXggMTMyOTUzZS4uNTI2ZjAwYSAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuaAorKysgYi9jcnlwdG8vdGVzdG1nci5oCkBAIC0xNSw2ICsxNSwxMSBAQAogI2lmbmRlZiBfQ1JZUFRPX1RFU1RNR1JfSAogI2RlZmluZSBfQ1JZUFRPX1RFU1RNR1JfSAogCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KKworI2luY2x1ZGUgPGNyeXB0by9jb21wcmVzcy5oPgorCiAjZGVmaW5lIE1BWF9ESUdFU1RfU0laRQkJNjQKICNkZWZpbmUgTUFYX1RBUAkJCTgKIApAQCAtODM0NywxMCArODM1MiwxOSBAQAogCWNoYXIgb3V0cHV0W0NPTVBfQlVGX1NJWkVdOwogfTsKIAorc3RydWN0IHBjb21wX3Rlc3R2ZWMgeworCXZvaWQgKnBhcmFtczsKKwl1bnNpZ25lZCBpbnQgcGFyYW1zaXplOworCWludCBpbmxlbiwgb3V0bGVuOworCWNoYXIgaW5wdXRbQ09NUF9CVUZfU0laRV07CisJY2hhciBvdXRwdXRbQ09NUF9CVUZfU0laRV07Cit9OworCiAvKgogICogRGVmbGF0ZSB0ZXN0IHZlY3RvcnMgKG51bGwtdGVybWluYXRlZCBzdHJpbmdzKS4KICAqIFBhcmFtczogd2luYml0cz0tMTEsIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgTUFYX01FTV9MRVZFTC4KICAqLworCiAjZGVmaW5lIERFRkxBVEVfQ09NUF9URVNUX1ZFQ1RPUlMgMgogI2RlZmluZSBERUZMQVRFX0RFQ09NUF9URVNUX1ZFQ1RPUlMgMgogCkBAIC04NDI2LDYgKzg0NDAsMTM5IEBACiAJfSwKIH07CiAKKyNkZWZpbmUgWkxJQl9DT01QX1RFU1RfVkVDVE9SUyAyCisjZGVmaW5lIFpMSUJfREVDT01QX1RFU1RfVkVDVE9SUyAyCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXN0cnVjdCBubGF0dHIgbmxhOworCWludCB2YWw7Cit9IGRlZmxhdGVfY29tcF9wYXJhbXNbXSA9IHsKKwl7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9MRVZFTCwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX01FVEhPRCwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZMQVRFRCwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9XSU5ET1dCSVRTLAorCQl9LAorCQkudmFsCQkJPSAtMTEsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfTUVNTEVWRUwsCisJCX0sCisJCS52YWwJCQk9IE1BWF9NRU1fTEVWRUwsCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfU1RSQVRFR1ksCisJCX0sCisJCS52YWwJCQk9IFpfREVGQVVMVF9TVFJBVEVHWSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdHJ1Y3QgbmxhdHRyIG5sYTsKKwlpbnQgdmFsOworfSBkZWZsYXRlX2RlY29tcF9wYXJhbXNbXSA9IHsKKwl7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfREVDT01QX1dJTkRPV0JJVFMsCisJCX0sCisJCS52YWwJCQk9IC0xMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBjb21wX3Rlc3R2ZWMgemxpYl9jb21wX3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkucGFyYW1zID0gJmRlZmxhdGVfY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9jb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDcwLAorCQkub3V0bGVuCT0gMzgsCisJCS5pbnB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJCS5vdXRwdXQJPSAiXHhmM1x4Y2FceGNmXHhjY1x4NTNceDI4XHgyZFx4NTYiCisJCQkgICJceGM4XHhjYlx4MmZceDU3XHg0OFx4Y2NceDRiXHg1MSIKKwkJCSAgIlx4MjhceGNlXHg0OFx4MmNceDRhXHg1NVx4MjhceGM5IgorCQkJICAiXHg0OFx4NTVceDI4XHhjZVx4NGZceDJiXHgyOVx4MDciCisJCQkgICJceDcxXHhiY1x4MDhceDJiXHgwMVx4MDAiLAorCX0sIHsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2NvbXBfcGFyYW1zLAorCQkucGFyYW1zaXplID0gc2l6ZW9mKGRlZmxhdGVfY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAxOTEsCisJCS5vdXRsZW4JPSAxMjIsCisJCS5pbnB1dAk9ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBhIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgREVGTEFURSIKKwkJCSJjb21wcmVzc2lvbiBhbGdvcml0aG0uICBUaGlzIGRvY3VtZW50IGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIG9mICIKKwkJCSJ0aGUgREVGTEFURSBhbGdvcml0aG0gdG8gdGhlIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wuIiwKKwkJLm91dHB1dAk9ICJceDVkXHg4ZFx4MzFceDBlXHhjMlx4MzBceDEwXHgwNCIKKwkJCSAgIlx4YmZceGIyXHgyZlx4YzhceDFmXHgxMFx4MDRceDA5IgorCQkJICAiXHg4OVx4YzJceDg1XHgzZlx4NzBceGIxXHgyZlx4ZjgiCisJCQkgICJceDI0XHhkYlx4NjdceGQ5XHg0N1x4YzFceGVmXHg0OSIKKwkJCSAgIlx4NjhceDEyXHg1MVx4YWVceDc2XHg2N1x4ZDZceDI3IgorCQkJICAiXHgxOVx4ODhceDFhXHhkZVx4ODVceGFiXHgyMVx4ZjIiCisJCQkgICJceDA4XHg1ZFx4MTZceDFlXHgyMFx4MDRceDJkXHhhZCIKKwkJCSAgIlx4ZjNceDE4XHhhMlx4MTVceDg1XHgyZFx4NjlceGM0IgorCQkJICAiXHg0Mlx4ODNceDIzXHhiNlx4NmNceDg5XHg3MVx4OWIiCisJCQkgICJceGVmXHhjZlx4OGJceDlmXHhjZlx4MzNceGNhXHgyZiIKKwkJCSAgIlx4ZWRceDYyXHhhOVx4NGNceDgwXHhmZlx4MTNceGFmIgorCQkJICAiXHg1Mlx4MzdceGVkXHgwZVx4NTJceDZiXHg1OVx4MDIiCisJCQkgICJceGQ5XHg0ZVx4ZThceDdhXHg3Nlx4MWRceDAyXHg5OCIKKwkJCSAgIlx4ZmVceDhhXHg4N1x4ODNceGEzXHg0Zlx4NTZceDhhIgorCQkJICAiXHhiOFx4OWVceDhlXHg1Y1x4NTdceGQzXHhhMFx4NzkiCisJCQkgICJceGZhXHgwMiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB6bGliX2RlY29tcF90dl90ZW1wbGF0ZVtdID0geworCXsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2RlY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9kZWNvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMTIyLAorCQkub3V0bGVuCT0gMTkxLAorCQkuaW5wdXQJPSAiXHg1ZFx4OGRceDMxXHgwZVx4YzJceDMwXHgxMFx4MDQiCisJCQkgICJceGJmXHhiMlx4MmZceGM4XHgxZlx4MTBceDA0XHgwOSIKKwkJCSAgIlx4ODlceGMyXHg4NVx4M2ZceDcwXHhiMVx4MmZceGY4IgorCQkJICAiXHgyNFx4ZGJceDY3XHhkOVx4NDdceGMxXHhlZlx4NDkiCisJCQkgICJceDY4XHgxMlx4NTFceGFlXHg3Nlx4NjdceGQ2XHgyNyIKKwkJCSAgIlx4MTlceDg4XHgxYVx4ZGVceDg1XHhhYlx4MjFceGYyIgorCQkJICAiXHgwOFx4NWRceDE2XHgxZVx4MjBceDA0XHgyZFx4YWQiCisJCQkgICJceGYzXHgxOFx4YTJceDE1XHg4NVx4MmRceDY5XHhjNCIKKwkJCSAgIlx4NDJceDgzXHgyM1x4YjZceDZjXHg4OVx4NzFceDliIgorCQkJICAiXHhlZlx4Y2ZceDhiXHg5Zlx4Y2ZceDMzXHhjYVx4MmYiCisJCQkgICJceGVkXHg2Mlx4YTlceDRjXHg4MFx4ZmZceDEzXHhhZiIKKwkJCSAgIlx4NTJceDM3XHhlZFx4MGVceDUyXHg2Ylx4NTlceDAyIgorCQkJICAiXHhkOVx4NGVceGU4XHg3YVx4NzZceDFkXHgwMlx4OTgiCisJCQkgICJceGZlXHg4YVx4ODdceDgzXHhhM1x4NGZceDU2XHg4YSIKKwkJCSAgIlx4YjhceDllXHg4ZVx4NWNceDU3XHhkM1x4YTBceDc5IgorCQkJICAiXHhmYVx4MDIiLAorCQkub3V0cHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBERUZMQVRFIgorCQkJImNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gb2YgIgorCQkJInRoZSBERUZMQVRFIGFsZ29yaXRobSB0byB0aGUgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbC4iLAorCX0sIHsKKwkJLnBhcmFtcyA9ICZkZWZsYXRlX2RlY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9kZWNvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gMzgsCisJCS5vdXRsZW4JPSA3MCwKKwkJLmlucHV0CT0gIlx4ZjNceGNhXHhjZlx4Y2NceDUzXHgyOFx4MmRceDU2IgorCQkJICAiXHhjOFx4Y2JceDJmXHg1N1x4NDhceGNjXHg0Ylx4NTEiCisJCQkgICJceDI4XHhjZVx4NDhceDJjXHg0YVx4NTVceDI4XHhjOSIKKwkJCSAgIlx4NDhceDU1XHgyOFx4Y2VceDRmXHgyYlx4MjlceDA3IgorCQkJICAiXHg3MVx4YmNceDA4XHgyYlx4MDFceDAwIiwKKwkJLm91dHB1dAk9ICJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIKKwkJCSJKb2luIHVzIG5vdyBhbmQgc2hhcmUgdGhlIHNvZnR3YXJlICIsCisJfSwKK307CisKIC8qCiAgKiBMWk8gdGVzdCB2ZWN0b3JzIChudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncykuCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by96bGliLmMgYi9jcnlwdG8vemxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjA5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vemxpYi5jCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogWmxpYiBhbGdvcml0aG0KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTb255IENvcnBvcmF0aW9uCisgKgorICogQmFzZWQgb24gZGVmbGF0ZS5jLCB3aGljaCBpcworICogQ29weXJpZ2h0IChjKSAyMDAzIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRklYTUU6IGRlZmxhdGUgdHJhbnNmb3JtcyB3aWxsIHJlcXVpcmUgdXAgdG8gYSB0b3RhbCBvZiBhYm91dCA0MzZrIG9mIGtlcm5lbAorICogbWVtb3J5IG9uIGkzODYgKDM5MGsgZm9yIGNvbXByZXNzaW9uLCB0aGUgcmVzdCBmb3IgZGVjb21wcmVzc2lvbiksIGFzIHRoZQorICogY3VycmVudCB6bGliIGtlcm5lbCBjb2RlIHVzZXMgYSB3b3JzdCBjYXNlIHByZS1hbGxvY2F0aW9uIHN5c3RlbSBieSBkZWZhdWx0LgorICogVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBzbyB0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGlzIHByb3Blcmx5CisgKiByZWxhdGVkIHRvIHRoZSB3aW5iaXRzIGFuZCBtZW1sZXZlbCBwYXJhbWV0ZXJzLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIiVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCisKK3N0cnVjdCB6bGliX2N0eCB7CisJc3RydWN0IHpfc3RyZWFtX3MgY29tcF9zdHJlYW07CisJc3RydWN0IHpfc3RyZWFtX3MgZGVjb21wX3N0cmVhbTsKKwlpbnQgZGVjb21wX3dpbmRvd0JpdHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHpsaWJfY29tcF9leGl0KHN0cnVjdCB6bGliX2N0eCAqY3R4KQoreworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKKworCWlmIChzdHJlYW0tPndvcmtzcGFjZSkgeworCQl6bGliX2RlZmxhdGVFbmQoc3RyZWFtKTsKKwkJdmZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCB6bGliX2RlY29tcF9leGl0KHN0cnVjdCB6bGliX2N0eCAqY3R4KQoreworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOworCisJaWYgKHN0cmVhbS0+d29ya3NwYWNlKSB7CisJCXpsaWJfaW5mbGF0ZUVuZChzdHJlYW0pOworCQlrZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgemxpYl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCXpsaWJfY29tcF9leGl0KGN0eCk7CisJemxpYl9kZWNvbXBfZXhpdChjdHgpOworfQorCisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCB6bGliX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CisJc3RydWN0IG5sYXR0ciAqdGJbWkxJQl9DT01QX01BWCArIDFdOworCXNpemVfdCB3b3Jrc3BhY2VzaXplOworCWludCByZXQ7CisKKwlyZXQgPSBubGFfcGFyc2UodGIsIFpMSUJfQ09NUF9NQVgsIHBhcmFtcywgbGVuLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJemxpYl9jb21wX2V4aXQoY3R4KTsKKworCXdvcmtzcGFjZXNpemUgPSB6bGliX2RlZmxhdGVfd29ya3NwYWNlc2l6ZSgpOworCXN0cmVhbS0+d29ya3NwYWNlID0gdm1hbGxvYyh3b3Jrc3BhY2VzaXplKTsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChzdHJlYW0tPndvcmtzcGFjZSwgMCwgd29ya3NwYWNlc2l6ZSk7CisJcmV0ID0gemxpYl9kZWZsYXRlSW5pdDIoc3RyZWFtLAorCQkJCXRiW1pMSUJfQ09NUF9MRVZFTF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTEVWRUxdKQorCQkJCQk6IFpfREVGQVVMVF9DT01QUkVTU0lPTiwKKwkJCQl0YltaTElCX0NPTVBfTUVUSE9EXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9NRVRIT0RdKQorCQkJCQk6IFpfREVGTEFURUQsCisJCQkJdGJbWkxJQl9DT01QX1dJTkRPV0JJVFNdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX1dJTkRPV0JJVFNdKQorCQkJCQk6IE1BWF9XQklUUywKKwkJCQl0YltaTElCX0NPTVBfTUVNTEVWRUxdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX01FTUxFVkVMXSkKKwkJCQkJOiBERUZfTUVNX0xFVkVMLAorCQkJCXRiW1pMSUJfQ09NUF9TVFJBVEVHWV0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfU1RSQVRFR1ldKQorCQkJCQk6IFpfREVGQVVMVF9TVFJBVEVHWSk7CisJaWYgKHJldCAhPSBaX09LKSB7CisJCXZmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcmV0ID0gemxpYl9kZWZsYXRlUmVzZXQoc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5jb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2RlZmxhdGUoc3RyZWFtLCBaX05PX0ZMVVNIKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgWl9PSzoKKwkJYnJlYWs7CisKKwljYXNlIFpfQlVGX0VSUk9SOgorCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGNvdWxkIG5vdCBtYWtlIHByb2dyZXNzXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkgICAgICAgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfZGVmbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlwcl9kZWJ1ZygiemxpYl9kZWZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOworCXN0cnVjdCBubGF0dHIgKnRiW1pMSUJfREVDT01QX01BWCArIDFdOworCWludCByZXQgPSAwOworCisJcmV0ID0gbmxhX3BhcnNlKHRiLCBaTElCX0RFQ09NUF9NQVgsIHBhcmFtcywgbGVuLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJemxpYl9kZWNvbXBfZXhpdChjdHgpOworCisJY3R4LT5kZWNvbXBfd2luZG93Qml0cyA9IHRiW1pMSUJfREVDT01QX1dJTkRPV0JJVFNdCisJCQkJID8gbmxhX2dldF91MzIodGJbWkxJQl9ERUNPTVBfV0lORE9XQklUU10pCisJCQkJIDogREVGX1dCSVRTOworCisJc3RyZWFtLT53b3Jrc3BhY2UgPSBremFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCksIEdGUF9LRVJORUwpOworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gemxpYl9pbmZsYXRlSW5pdDIoc3RyZWFtLCBjdHgtPmRlY29tcF93aW5kb3dCaXRzKTsKKwlpZiAocmV0ICE9IFpfT0spIHsKKwkJa2ZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcmV0ID0gemxpYl9pbmZsYXRlUmVzZXQoc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlicmVhazsKKworCWNhc2UgWl9CVUZfRVJST1I6CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgY291bGQgbm90IG1ha2UgcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3NfZmluYWwoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCSBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1XG4iLCByZXEtPmF2YWlsX2luLCByZXEtPmF2YWlsX291dCk7CisJc3RyZWFtLT5uZXh0X2luID0gcmVxLT5uZXh0X2luOworCXN0cmVhbS0+YXZhaWxfaW4gPSByZXEtPmF2YWlsX2luOworCXN0cmVhbS0+bmV4dF9vdXQgPSByZXEtPm5leHRfb3V0OworCXN0cmVhbS0+YXZhaWxfb3V0ID0gcmVxLT5hdmFpbF9vdXQ7CisKKwlpZiAoZGN0eC0+ZGVjb21wX3dpbmRvd0JpdHMgPCAwKSB7CisJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCS8qCisJCSAqIFdvcmsgYXJvdW5kIGEgYnVnIGluIHpsaWIsIHdoaWNoIHNvbWV0aW1lcyB3YW50cyB0byB0YXN0ZSBhbgorCQkgKiBleHRyYSBieXRlIHdoZW4gYmVpbmcgdXNlZCBpbiB0aGUgKHVuZG9jdW1lbnRlZCkgcmF3IGRlZmxhdGUKKwkJICogbW9kZS4gKEZyb20gVVNBR0kpLgorCQkgKi8KKwkJaWYgKHJldCA9PSBaX09LICYmICFzdHJlYW0tPmF2YWlsX2luICYmIHN0cmVhbS0+YXZhaWxfb3V0KSB7CisJCQljb25zdCB2b2lkICpzYXZlZF9uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCQkJdTggemVyb3N0dWZmID0gMDsKKworCQkJc3RyZWFtLT5uZXh0X2luID0gJnplcm9zdHVmZjsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSAxOworCQkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCQkJc3RyZWFtLT5uZXh0X2luID0gc2F2ZWRfbmV4dF9pbjsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSAwOworCQl9CisJfSBlbHNlCisJCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlwcl9kZWJ1ZygiemxpYl9pbmZsYXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXUgKGNvbnN1bWVkICV1LCBwcm9kdWNlZCAldSlcbiIsCisJCSBzdHJlYW0tPmF2YWlsX2luLCBzdHJlYW0tPmF2YWlsX291dCwKKwkJIHJlcS0+YXZhaWxfaW4gLSBzdHJlYW0tPmF2YWlsX2luLAorCQkgcmVxLT5hdmFpbF9vdXQgLSBzdHJlYW0tPmF2YWlsX291dCk7CisJcmVxLT5uZXh0X2luID0gc3RyZWFtLT5uZXh0X2luOworCXJlcS0+YXZhaWxfaW4gPSBzdHJlYW0tPmF2YWlsX2luOworCXJlcS0+bmV4dF9vdXQgPSBzdHJlYW0tPm5leHRfb3V0OworCXJlcS0+YXZhaWxfb3V0ID0gc3RyZWFtLT5hdmFpbF9vdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY29tcF9hbGcgemxpYl9hbGcgPSB7CisJLmNvbXByZXNzX3NldHVwCQk9IHpsaWJfY29tcHJlc3Nfc2V0dXAsCisJLmNvbXByZXNzX2luaXQJCT0gemxpYl9jb21wcmVzc19pbml0LAorCS5jb21wcmVzc191cGRhdGUJPSB6bGliX2NvbXByZXNzX3VwZGF0ZSwKKwkuY29tcHJlc3NfZmluYWwJCT0gemxpYl9jb21wcmVzc19maW5hbCwKKwkuZGVjb21wcmVzc19zZXR1cAk9IHpsaWJfZGVjb21wcmVzc19zZXR1cCwKKwkuZGVjb21wcmVzc19pbml0CT0gemxpYl9kZWNvbXByZXNzX2luaXQsCisJLmRlY29tcHJlc3NfdXBkYXRlCT0gemxpYl9kZWNvbXByZXNzX3VwZGF0ZSwKKwkuZGVjb21wcmVzc19maW5hbAk9IHpsaWJfZGVjb21wcmVzc19maW5hbCwKKworCS5iYXNlCQkJPSB7CisJCS5jcmFfbmFtZQk9ICJ6bGliIiwKKwkJLmNyYV9mbGFncwk9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MsCisJCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgemxpYl9jdHgpLAorCQkuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX2luaXQJPSB6bGliX2luaXQsCisJCS5jcmFfZXhpdAk9IHpsaWJfZXhpdCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB6bGliX21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9wY29tcCgmemxpYl9hbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgemxpYl9tb2RfZmluaSh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKCZ6bGliX2FsZyk7Cit9CisKK21vZHVsZV9pbml0KHpsaWJfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoemxpYl9tb2RfZmluaSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWmxpYiBDb21wcmVzc2lvbiBBbGdvcml0aG0iKTsKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDM1MDk0ZjIuLjdhZjdkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJCXNpemVvZihzdHJ1Y3QgZG9ja19zdGF0aW9uICopKTsKIAogCS8qIHdlIHdhbnQgdGhlIGRvY2sgZGV2aWNlIHRvIHNlbmQgdWV2ZW50cyAqLwotCWRvY2tfZGV2aWNlLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmZG9ja19kZXZpY2UtPmRldiwgMCk7CiAKIAlpZiAoaXNfZG9jayhoYW5kbGUpKQogCQlkb2NrX3N0YXRpb24tPmZsYWdzIHw9IERPQ0tfSVNfRE9DSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ldmVudC5jIGIvZHJpdmVycy9hY3BpL2V2ZW50LmMKaW5kZXggMGMyNGJkNC4uYWViN2U1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50LmMKKysrIGIvZHJpdmVycy9hY3BpL2V2ZW50LmMKQEAgLTIzNSwxMSArMjM1LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlyZXN1bHQgPQotCSAgICBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIGFjcGlfZXZlbnRfbWNncnAuaWQsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkgICJGYWlsZWQgdG8gc2VuZCBhIEdlbmV0bGluayBtZXNzYWdlIVxuIikpOworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgYWNwaV9ldmVudF9tY2dycC5pZCwgR0ZQX0FUT01JQyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW1iYS9idXMuYyBiL2RyaXZlcnMvYW1iYS9idXMuYwppbmRleCAwMGM0NmUwLi4zZDc2M2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FtYmEvYnVzLmMKKysrIGIvZHJpdmVycy9hbWJhL2J1cy5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlkZXYtPmRldi5yZWxlYXNlID0gYW1iYV9kZXZpY2VfcmVsZWFzZTsKIAlkZXYtPmRldi5idXMgPSAmYW1iYV9idXN0eXBlOwogCWRldi0+ZGV2LmRtYV9tYXNrID0gJmRldi0+ZG1hX21hc2s7Ci0JZGV2LT5yZXMubmFtZSA9IGRldi0+ZGV2LmJ1c19pZDsKKwlkZXYtPnJlcy5uYW1lID0gZGV2X25hbWUoJmRldi0+ZGV2KTsKIAogCWlmICghZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgJiYgZGV2LT5kbWFfbWFzaykKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiY29oZXJlbnQgZG1hIG1hc2sgaXMgdW5zZXRcbiIpOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJaWYgKGQtPnBhcmVudCkKIAkJciAmPSBkLT5wYXJlbnQgPT0gZGV2LT5wYXJlbnQ7CiAJaWYgKGQtPmJ1c2lkKQotCQlyICY9IHN0cmNtcChkZXYtPmJ1c19pZCwgZC0+YnVzaWQpID09IDA7CisJCXIgJj0gc3RyY21wKGRldl9uYW1lKGRldiksIGQtPmJ1c2lkKSA9PSAwOwogCiAJaWYgKHIpIHsKIAkJZ2V0X2RldmljZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IDY2ZTAxMmMuLjc4OGJiYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCS8qIGJvYXJkX2FoY2kgKi8KIAl7CiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDEyLDcgKzQxMiw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19OQ1EgfCBBSENJX0hGTEFHX05PX1BNUCksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX3Z0ODI1MV9vcHMsCiAJfSwKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX0lSUV9JRl9FUlIpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQzMCw3ICs0MzAsNyBAQAogCQkJCSBBSENJX0hGTEFHXzMyQklUX09OTFkgfCBBSENJX0hGTEFHX05PX01TSSB8CiAJCQkJIEFIQ0lfSEZMQUdfU0VDVDI1NSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX3NiNjAwX29wcywKIAl9LApAQCAtNDQwLDcgKzQ0MCw3IEBACiAJCQkJIEFIQ0lfSEZMQUdfTVZfUEFUQSB8IEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00NDgsNyArNDQ4LDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfc2I2MDBfb3BzLAogCX0sCkBAIC00NTYsNyArNDU2LDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX1lFU19OQ1EpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC0xMzQ4LDcgKzEzNDgsNyBAQAogCXdyaXRlbChtZXNzYWdlWzFdLCBtbWlvICsgaHByaXYtPmVtX2xvYys0KTsKIAogCS8qIHNhdmUgb2ZmIG5ldyBsZWQgc3RhdGUgZm9yIHBvcnQvc2xvdCAqLwotCWVtcC0+bGVkX3N0YXRlID0gbWVzc2FnZVsxXTsKKwllbXAtPmxlZF9zdGF0ZSA9IHN0YXRlOwogCiAJLyoKIAkgKiB0ZWxsIGhhcmR3YXJlIHRvIHRyYW5zbWl0IHRoZSBtZXNzYWdlCkBAIC0yNTY1LDYgKzI1NjUsMTUgQEAKIAkJCS8qIFBDSSBzbG90IG51bWJlciBvZiB0aGUgY29udHJvbGxlciAqLwogCQkJLmRyaXZlcl9kYXRhID0gKHZvaWQgKikweDFGVUwsCiAJCX0sCisJCXsKKwkJCS5pZGVudCA9ICJIUCBDb21wYXEgNjcyMHMiLAorCQkJLm1hdGNoZXMgPSB7CisJCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJIUCBDb21wYXEgNjcyMHMiKSwKKwkJCX0sCisJCQkvKiBQQ0kgc2xvdCBudW1iZXIgb2YgdGhlIGNvbnRyb2xsZXIgKi8KKwkJCS5kcml2ZXJfZGF0YSA9ICh2b2lkICopMHgxRlVMLAorCQl9LAogCiAJCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogCX07CkBAIC0yNjQ3LDggKzI2NTYsOCBAQAogCWlmIChib2FyZF9pZCA9PSBib2FyZF9haGNpX3NiNzAwICYmIHBkZXYtPnJldmlzaW9uID49IDB4NDApCiAJCWhwcml2LT5mbGFncyAmPSB+QUhDSV9IRkxBR19JR05fU0VSUl9JTlRFUk5BTDsKIAotCWlmICgoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19OT19NU0kpIHx8IHBjaV9lbmFibGVfbXNpKHBkZXYpKQotCQlwY2lfaW50eChwZGV2LCAxKTsKKwlpZiAoIShocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkpCisJCXBjaV9lbmFibGVfbXNpKHBkZXYpOwogCiAJLyogc2F2ZSBpbml0aWFsIGNvbmZpZyAqLwogCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyhwZGV2LCBocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwppbmRleCBkYzQ4YTYzLi5lY2ZkMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKQEAgLTExOCw4ICsxMTgsOCBAQAogCXUxNiBjb21tYW5kOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZnZW5lcmljX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCmluZGV4IGVmOGIzMGQuLmU1Y2JlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtNDQ2LDM0ICs0NDYsMzQgQEAKIAlbcGlpeF9wYXRhX213ZG1hXSA9IAkvKiBQSUlYMyBNV0RNQSBvbmx5ICovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwogCQkucG9ydF9vcHMJPSAmcGlpeF9wYXRhX29wcywKIAl9LAogCiAJW3BpaXhfcGF0YV8zM10gPQkvKiBQSUlYNCBhdCAzM01IeiAqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BX01BU0tfNDBDLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLworCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmcGlpeF9wYXRhX29wcywKIAl9LAogCiAJW2ljaF9wYXRhXzMzXSA9IAkvKiBJQ0gwIC0gSUNIIGF0IDMzTWh6Ki8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzayAJPSAweDFmLAkvKiBwaW8gMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogQ2hlY2s6IG1heWJlIDB4MDcgICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsIC8qIFVETUEzMyAqLworCQkucGlvX21hc2sgCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgLyogQ2hlY2s6IG1heWJlIE1XRE1BMCBpcyBvayAgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJmljaF9wYXRhX29wcywKIAl9LAogCiAJW2ljaF9wYXRhXzY2XSA9IAkvKiBJQ0ggY29udHJvbGxlcnMgdXAgdG8gNjZNSHogKi8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzayAJPSAweDFmLAkvKiBwaW8gMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogTVdETUEwIGlzIGJyb2tlbiBvbiBjaGlwICovCisJCS5waW9fbWFzayAJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBNV0RNQTAgaXMgYnJva2VuIG9uIGNoaXAgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmljaF9wYXRhX29wcywKIAl9LApAQCAtNDgxLDE3ICs0ODEsMTcgQEAKIAlbaWNoX3BhdGFfMTAwXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTIHwgUElJWF9GTEFHX0NIRUNLSU5UUiwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoNV9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNDk5LDggKzQ5OSw4IEBACiAJW2ljaDZfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUwOCw4ICs1MDgsOCBAQAogCVtpY2g2bV9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTE3LDggKzUxNyw4IEBACiAJW2ljaDhfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19TSURQUiwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUyNiw4ICs1MjYsOCBAQAogCVtpY2g4XzJwb3J0X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfU0lEUFIsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MzUsOCArNTM1LDggQEAKIAlbdG9sYXBhaV9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTQ0LDggKzU0NCw4IEBACiAJW2ljaDhtX2FwcGxlX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01NTMsOSArNTUzLDkgQEAKIAlbcGlpeF9wYXRhX3Ztd10gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogbXdkbWExLTIgPz8gQ0hFQ0sgMCBzaG91bGQgYmUgb2sgYnV0IHNsb3cgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BX01BU0tfNDBDLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLworCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmcGlpeF92bXdfb3BzLAogCX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDA2MGJjZDYuLmU3ZWE3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CkBAIC0yMzg5LDYgKzIzOTAsNyBAQAogCWRldi0+Y3lsaW5kZXJzID0gMDsKIAlkZXYtPmhlYWRzID0gMDsKIAlkZXYtPnNlY3RvcnMgPSAwOworCWRldi0+bXVsdGlfY291bnQgPSAwOwogCiAJLyoKIAkgKiBjb21tb24gQVRBLCBBVEFQSSBmZWF0dXJlIHRlc3RzCkBAIC0yNDI2LDggKzI0MjgsMTUgQEAKIAogCQlkZXYtPm5fc2VjdG9ycyA9IGF0YV9pZF9uX3NlY3RvcnMoaWQpOwogCi0JCWlmIChkZXYtPmlkWzU5XSAmIDB4MTAwKQotCQkJZGV2LT5tdWx0aV9jb3VudCA9IGRldi0+aWRbNTldICYgMHhmZjsKKwkJLyogZ2V0IGN1cnJlbnQgUi9XIE11bHRpcGxlIGNvdW50IHNldHRpbmcgKi8KKwkJaWYgKChkZXYtPmlkWzQ3XSA+PiA4KSA9PSAweDgwICYmIChkZXYtPmlkWzU5XSAmIDB4MTAwKSkgeworCQkJdW5zaWduZWQgaW50IG1heCA9IGRldi0+aWRbNDddICYgMHhmZjsKKwkJCXVuc2lnbmVkIGludCBjbnQgPSBkZXYtPmlkWzU5XSAmIDB4ZmY7CisJCQkvKiBvbmx5IHJlY29nbml6ZS9hbGxvdyBwb3dlcnMgb2YgdHdvIGhlcmUgKi8KKwkJCWlmIChpc19wb3dlcl9vZl8yKG1heCkgJiYgaXNfcG93ZXJfb2ZfMihjbnQpKQorCQkJCWlmIChjbnQgPD0gbWF4KQorCQkJCQlkZXYtPm11bHRpX2NvdW50ID0gY250OworCQl9CiAKIAkJaWYgKGF0YV9pZF9oYXNfbGJhKGlkKSkgewogCQkJY29uc3QgY2hhciAqbGJhX2Rlc2M7CkBAIC02NzA5LDYgKzY3MTgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2RvX2Rldl9yZWFkX2lkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3NpbXVsYXRlKTsKIAorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Bpb19xdWV1ZV90YXNrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9waW9fbmVlZF9pb3JkeSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfdGltaW5nX2ZpbmRfbW9kZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfdGltaW5nX2NvbXB1dGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCBlYTg5MDkxLi4wMTgzMTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAKIAkvKiBGb3IgbmV3IEVILCBhbGwgcWNzIGFyZSBmaW5pc2hlZCBpbiBvbmUgb2YgdGhyZWUgd2F5cyAtCiAJICogbm9ybWFsIGNvbXBsZXRpb24sIGVycm9yIGNvbXBsZXRpb24sIGFuZCBTQ1NJIHRpbWVvdXQuCi0JICogQm90aCBjbXBsZXRpb25zIGNhbiByYWNlIGFnYWluc3QgU0NTSSB0aW1lb3V0LiAgV2hlbiBub3JtYWwKKwkgKiBCb3RoIGNvbXBsZXRpb25zIGNhbiByYWNlIGFnYWluc3QgU0NTSSB0aW1lb3V0LiAgV2hlbiBub3JtYWwKIAkgKiBjb21wbGV0aW9uIHdpbnMsIHRoZSBxYyBuZXZlciByZWFjaGVzIEVILiAgV2hlbiBlcnJvcgogCSAqIGNvbXBsZXRpb24gd2lucywgdGhlIHFjIGhhcyBBVEFfUUNGTEFHX0ZBSUxFRCBzZXQuCiAJICoKQEAgLTU2Miw3ICs1NjIsMTkgQEAKIAkJaW50IG5yX3RpbWVkb3V0ID0gMDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOworCQkKKwkJLyogVGhpcyBtdXN0IG9jY3VyIHVuZGVyIHRoZSBhcC0+bG9jayBhcyB3ZSBkb24ndCB3YW50CisJCSAgIGEgcG9sbGVkIHJlY292ZXJ5IHRvIHJhY2UgdGhlIHJlYWwgaW50ZXJydXB0IGhhbmRsZXIKKwkJICAgCisJCSAgIFRoZSBsb3N0X2ludGVycnVwdCBoYW5kbGVyIGNoZWNrcyBmb3IgYW55IGNvbXBsZXRlZCBidXQKKwkJICAgbm9uLW5vdGlmaWVkIGNvbW1hbmQgYW5kIGNvbXBsZXRlcyBtdWNoIGxpa2UgYW4gSVJRIGhhbmRsZXIuCisJCSAgIAorCQkgICBXZSB0aGVuIGZhbGwgaW50byB0aGUgZXJyb3IgcmVjb3ZlcnkgY29kZSB3aGljaCB3aWxsIHRyZWF0CisJCSAgIHRoaXMgYXMgaWYgbm9ybWFsIGNvbXBsZXRpb24gd29uIHRoZSByYWNlICovCiAKKwkJaWYgKGFwLT5vcHMtPmxvc3RfaW50ZXJydXB0KQorCQkJYXAtPm9wcy0+bG9zdF9pbnRlcnJ1cHQoYXApOworCQkJCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY21kLCB0bXAsICZob3N0LT5laF9jbWRfcSwgZWhfZW50cnkpIHsKIAkJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAKQEAgLTYwNiw2ICs2MTgsOSBAQAogCQlhcC0+ZWhfdHJpZXMgPSBBVEFfRUhfTUFYX1RSSUVTOwogCX0gZWxzZQogCQlzcGluX3VubG9ja193YWl0KGFwLT5sb2NrKTsKKwkJCisJLyogSWYgd2UgdGltZWQgcmFjZWQgbm9ybWFsIGNvbXBsZXRpb24gYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8KKwkgICByZWNvdmVyIG5yX3RpbWVkb3V0ID09IDAgd2h5IGV4YWN0bHkgYXJlIHdlIGRvaW5nIGVycm9yIHJlY292ZXJ5ID8gKi8KIAogIHJlcGVhdDoKIAkvKiBpbnZva2UgZXJyb3IgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCmluZGV4IGY5M2RjMDIuLjgzMzJlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAkuc29mdHJlc2V0CQk9IGF0YV9zZmZfc29mdHJlc2V0LAogCS5oYXJkcmVzZXQJCT0gc2F0YV9zZmZfaGFyZHJlc2V0LAogCS5wb3N0cmVzZXQJCT0gYXRhX3NmZl9wb3N0cmVzZXQsCisJLmRyYWluX2ZpZm8JCT0gYXRhX3NmZl9kcmFpbl9maWZvLAogCS5lcnJvcl9oYW5kbGVyCQk9IGF0YV9zZmZfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kLAogCkBAIC02NCw2ICs2NSw4IEBACiAJLnNmZl9pcnFfb24JCT0gYXRhX3NmZl9pcnFfb24sCiAJLnNmZl9pcnFfY2xlYXIJCT0gYXRhX3NmZl9pcnFfY2xlYXIsCiAKKwkubG9zdF9pbnRlcnJ1cHQJCT0gYXRhX3NmZl9sb3N0X2ludGVycnVwdCwKKwogCS5wb3J0X3N0YXJ0CQk9IGF0YV9zZmZfcG9ydF9zdGFydCwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX3BvcnRfb3BzKTsKQEAgLTE2NDYsNyArMTY0OSw3IEBACiAgKglSRVRVUk5TOgogICoJT25lIGlmIGludGVycnVwdCB3YXMgaGFuZGxlZCwgemVybyBpZiBub3QgKHNoYXJlZCBpcnEpLgogICovCi1pbmxpbmUgdW5zaWduZWQgaW50IGF0YV9zZmZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCit1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCQkgICAgICBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5saW5rLmVoX2luZm87CkBAIC0xNzc1LDYgKzE3NzgsNDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfaW50ZXJydXB0KTsKIAogLyoqCisgKglhdGFfc2ZmX2xvc3RfaW50ZXJydXB0CS0JQ2hlY2sgZm9yIGFuIGFwcGFyZW50IGxvc3QgaW50ZXJydXB0CisgKglAYXA6IHBvcnQgdGhhdCBhcHBlYXJzIHRvIGhhdmUgdGltZWQgb3V0CisgKgorICoJQ2FsbGVkIGZyb20gdGhlIGxpYmF0YSBlcnJvciBoYW5kbGVycyB3aGVuIHRoZSBjb3JlIGNvZGUgc3VzcGVjdHMKKyAqCWFuIGludGVycnVwdCBoYXMgYmVlbiBsb3N0LiBJZiBpdCBoYXMgY29tcGxldGUgYW55dGhpbmcgd2UgY2FuIGFuZAorICoJdGhlbiByZXR1cm4uIEludGVyZmFjZSBtdXN0IHN1cHBvcnQgYWx0c3RhdHVzIGZvciB0aGlzIGZhc3RlcgorICoJcmVjb3ZlcnkgdG8gb2NjdXIuCisgKgorICoJTG9ja2luZzoKKyAqCUNhbGxlciBob2xkcyBob3N0IGxvY2sKKyAqLworCit2b2lkIGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl1OCBzdGF0dXM7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKworCS8qIE9ubHkgb25lIG91dHN0YW5kaW5nIGNvbW1hbmQgcGVyIFNGRiBjaGFubmVsICovCisJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5saW5rLmFjdGl2ZV90YWcpOworCS8qIENoZWNrIHdlIGhhdmUgYSBsaXZlIG9uZS4uICovCisJaWYgKHFjID09IE5VTEwgfHwgICEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKQorCQlyZXR1cm47CisJLyogV2UgY2Fubm90IGxvc2UgYW4gaW50ZXJydXB0IG9uIGEgcG9sbGVkIGNvbW1hbmQgKi8KKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCXJldHVybjsKKwkvKiBTZWUgaWYgdGhlIGNvbnRyb2xsZXIgdGhpbmtzIGl0IGlzIHN0aWxsIGJ1c3kgLSBpZiBzbyB0aGUgY29tbWFuZAorCSAgIGlzbid0IGEgbG9zdCBJUlEgYnV0IGlzIHN0aWxsIGluIHByb2dyZXNzICovCisJc3RhdHVzID0gYXRhX3NmZl9hbHRzdGF0dXMoYXApOworCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkKKwkJcmV0dXJuOworCisJLyogVGhlcmUgd2FzIGEgY29tbWFuZCBydW5uaW5nLCB3ZSBhcmUgbm8gbG9uZ2VyIGJ1c3kgYW5kIHdlIGhhdmUKKwkgICBubyBpbnRlcnJ1cHQuICovCisJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJsb3N0IGludGVycnVwdCAoU3RhdHVzIDB4JXgpXG4iLAorCQkJCQkJCQlzdGF0dXMpOworCS8qIFJ1biB0aGUgaG9zdCBpbnRlcnJ1cHQgbG9naWMgYXMgaWYgdGhlIGludGVycnVwdCBoYWQgbm90IGJlZW4KKwkgICBsb3N0ICovCisJYXRhX3NmZl9ob3N0X2ludHIoYXAsIHFjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQpOworCisvKioKICAqCWF0YV9zZmZfZnJlZXplIC0gRnJlZXplIFNGRiBjb250cm9sbGVyIHBvcnQKICAqCUBhcDogcG9ydCB0byBmcmVlemUKICAqCkBAIC0yMTk5LDYgKzIyNDQsMzkgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfcG9zdHJlc2V0KTsKIAogLyoqCisgKglhdGFfc2ZmX2RyYWluX2ZpZm8gLSBTdG9jayBGSUZPIGRyYWluIGxvZ2ljIGZvciBTRkYgY29udHJvbGxlcnMKKyAqCUBxYzogY29tbWFuZAorICoKKyAqCURyYWluIHRoZSBGSUZPIGFuZCBkZXZpY2Ugb2YgYW55IHN0dWNrIGRhdGEgZm9sbG93aW5nIGEgY29tbWFuZAorICoJZmFpbGluZyB0byBjb21wbGV0ZS4gSW4gc29tZSBjYXNlcyB0aGlzIGlzIG5lY2Nlc3NhcnkgYmVmb3JlIGEKKyAqCXJlc2V0IHdpbGwgcmVjb3ZlciB0aGUgZGV2aWNlLgorICoKKyAqLworCit2b2lkIGF0YV9zZmZfZHJhaW5fZmlmbyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCWludCBjb3VudDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCisJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIGluY29taW5nIGRhdGEgd2hlbiBhIGNvbW1hbmQgd2FzIHJ1bm5pbmcgKi8KKwlpZiAocWMgPT0gTlVMTCB8fCBxYy0+ZG1hX2RpciA9PSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm47CisKKwlhcCA9IHFjLT5hcDsKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJJiYgY291bnQgPCAzMjc2ODsgY291bnQrKykKKwkJaW9yZWFkMTYoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJLyogQ2FuIGJlY29tZSBERUJVRyBsYXRlciAqLworCWlmIChjb3VudCkKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0RFQlVHLAorCQkJImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwgY291bnQpOworCit9CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2ZmX2RyYWluX2ZpZm8pOworCisvKioKICAqCWF0YV9zZmZfZXJyb3JfaGFuZGxlciAtIFN0b2NrIGVycm9yIGhhbmRsZXIgZm9yIEJNRE1BIGNvbnRyb2xsZXIKICAqCUBhcDogcG9ydCB0byBoYW5kbGUgZXJyb3IgZm9yCiAgKgpAQCAtMjIzOSw3ICsyMzE3LDggQEAKIAkJICogcmVhbGx5IGEgdGltZW91dCBldmVudCwgYWRqdXN0IGVycm9yIG1hc2sgYW5kCiAJCSAqIGNhbmNlbCBmcm96ZW4gc3RhdGUuCiAJCSAqLwotCQlpZiAocWMtPmVycl9tYXNrID09IEFDX0VSUl9USU1FT1VUICYmIChob3N0X3N0YXQgJiBBVEFfRE1BX0VSUikpIHsKKwkJaWYgKHFjLT5lcnJfbWFzayA9PSBBQ19FUlJfVElNRU9VVAorCQkJCQkJJiYgKGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgewogCQkJcWMtPmVycl9tYXNrID0gQUNfRVJSX0hPU1RfQlVTOwogCQkJdGhhdyA9IDE7CiAJCX0KQEAgLTIyNTAsNiArMjMyOSwxMyBAQAogCWF0YV9zZmZfc3luYyhhcCk7CQkvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0aGlzICovCiAJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CiAJYXAtPm9wcy0+c2ZmX2lycV9jbGVhcihhcCk7CisJLyogV2UgKk1VU1QqIGRvIEZJRk8gZHJhaW5pbmcgYmVmb3JlIHdlIGlzc3VlIGEgcmVzZXQgYXMgc2V2ZXJhbAorCSAqIGRldmljZXMgaGVscGZ1bGx5IGNsZWFyIHRoZWlyIGludGVybmFsIHN0YXRlIGFuZCB3aWxsIGxvY2sgc29saWQKKwkgKiBpZiB3ZSB0b3VjaCB0aGUgZGF0YSBwb3J0IHBvc3QgcmVzZXQuIFBhc3MgcWMgaW4gY2FzZSBhbnlvbmUgd2FudHMKKwkgKiAgdG8gZG8gZGlmZmVyZW50IFBJTy9ETUEgcmVjb3Zlcnkgb3IgaGFzIHBlciBjb21tYW5kIGZpeHVwcworCSAqLworCWlmIChhcC0+b3BzLT5kcmFpbl9maWZvKQorCQlhcC0+b3BzLT5kcmFpbl9maWZvKHFjKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjk1OSw0ICszMDQ1LDMgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfc2ZmX2luaXRfb25lKTsKIAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLmggYi9kcml2ZXJzL2F0YS9saWJhdGEuaAppbmRleCBjZWE4MDE0Li44OWExZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEuaAorKysgYi9kcml2ZXJzL2F0YS9saWJhdGEuaApAQCAtNzksOCArNzksNiBAQAogCQkJICAgdTY0IGJsb2NrLCB1MzIgbl9ibG9jaywgdW5zaWduZWQgaW50IHRmX2ZsYWdzLAogCQkJICAgdW5zaWduZWQgaW50IHRhZyk7CiBleHRlcm4gdTY0IGF0YV90Zl9yZWFkX2Jsb2NrKHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIGF0YV9waW9fcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB2b2lkICpkYXRhLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfZmx1c2hfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB1bnNpZ25lZCBhdGFfZXhlY19pbnRlcm5hbChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsIGNvbnN0IHU4ICpjZGIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jCmluZGV4IDhiNzdhOTguLmQ4ZjM1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jCkBAIC0yNDYsOSArMjQ2LDkgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKLQkJLnVkbWFfbWFzayAJPSAweDdmLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAogCQkucG9ydF9vcHMJPSAmcGFjcGlfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwppbmRleCBlYjk5ZGJlLi43NTFiN2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKQEAgLTQ5Miw1MyArNDkyLDUzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fZWFybHkgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmYWxpX2Vhcmx5X3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweDIwIGFkZGVkIERNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzIwID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZhbGlfMjBfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4MjAgd2l0aCBzdXBwb3J0IGxvZ2ljIGFkZGVkIFVETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMF91ZG1hID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAkvKiBVRE1BMzMgKi8KKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJmFsaV8yMF9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDMiBhZGRzIFVETUE2NiAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2MyID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzJfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzMgaXMgVURNQTY2IGZvciBub3cgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmYWxpX2MyX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEM0IGlzIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1BJT19MQkE0OCwKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmYWxpX2M0X3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEM1IGlzIFVETUExMzMgd2l0aCBMQkE0OCBETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmYWxpX2M1X3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCmluZGV4IDExNWIxY2QuLjMzYTc0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwpAQCAtNDU1LDc0ICs0NTUsNzQgQEAKIHN0YXRpYyBpbnQgYW1kX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bMTBdID0gewotCQl7CS8qIDA6IEFNRCA3NDAxICovCisJCXsJLyogMDogQU1EIDc0MDEgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCS8qIE5vIFNXRE1BICovCi0JCQkudWRtYV9tYXNrID0gMHgwNywJLyogVURNQSAzMyAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkJLnBvcnRfb3BzID0gJmFtZDMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogMTogRWFybHkgQU1ENzQwOSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZhbWQ2Nl9wb3J0X29wcwogCQl9LAotCQl7CS8qIDI6IEFNRCA3NDA5LCBubyBzd2RtYSBlcnJhdGEgKi8KKwkJewkvKiAyOiBBTUQgNzQwOSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAkvKiBVRE1BIDY2ICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmYW1kNjZfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiAzOiBBTUQgNzQxMSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9LAogCQl7CS8qIDQ6IEFNRCA3NDQxICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTAwX3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogNTogQU1EIDgxMTEqLworCQl7CS8qIDU6IEFNRCA4MTExIC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogVURNQSAxMzMsIG5vIHN3ZG1hICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTMzX3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogNjogQU1EIDgxMTEgVURNQSAxMDAgKFNlcmVuYWRlKSAqLworCQl7CS8qIDY6IEFNRCA4MTExIFVETUEgMTAwIChTZXJlbmFkZSkgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCwgbm8gc3dkbWEgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiA3OiBOdmlkaWEgTmZvcmNlICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmbnYxMDBfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA4OiBOdmlkaWEgTmZvcmNlMiBhbmQgbGF0ZXIgKi8KKwkJewkvKiA4OiBOdmlkaWEgTmZvcmNlMiBhbmQgbGF0ZXIgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAkvKiBVRE1BIDEzMywgbm8gc3dkbWEgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJCS5wb3J0X29wcyA9ICZudjEzM19wb3J0X29wcwogCQl9LAogCQl7CS8qIDk6IEFNRCBDUzU1MzYgKEdlb2RlIGNvbXBhbmlvbikgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMDBfcG9ydF9vcHMKIAkJfQogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKaW5kZXggNmIzMDkyYy4uZDMzMmNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwpAQCAtMTIsNyArMTIsNiBAQAogICoJCXBlcmZvcm1hbmNlIEFsZXNzYW5kcm8gWnVtbW8gPGFsZXNzYW5kcm8uenVtbW9AdG93ZXJ0ZWNoLml0PgogICoKICAqCVRPRE8KLSAqCTg1MCBzZXJpYWxpemF0aW9uIG9uY2UgdGhlIGNvcmUgc3VwcG9ydHMgaXQKICAqCUludmVzdGlnYXRlIG5vX2RzYyBvbiA4NTBSCiAgKglDbG9jayBkZXRlY3QKICAqLwpAQCAtMjksNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2FydG9wIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjQuNSIKIAogLyoKICAqCVRoZSBBUlRPUCBoYXMgMzMgTWh6IGFuZCAib3ZlciBjbG9ja2VkIiB0aW1pbmcgdGFibGVzLiBVbnRpbCB3ZQpAQCAtMjgzLDYgKzI4MiwzMSBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQ0ICsgYXAtPnBvcnRfbm8sIHVsdHJhKTsKIH0KIAorLyoqCisgKglhcnRvcF82MjEwX3FjX2RlZmVyCS0JaW1wbGVtZW50IHNlcmlhbGl6YXRpb24KKyAqCUBxYzogY29tbWFuZAorICoKKyAqCUlzc3VlIGNvbW1hbmRzIHBlciBob3N0IG9uIHRoaXMgY2hpcC4KKyAqLworCitzdGF0aWMgaW50IGFydG9wNjIxMF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IHFjLT5hcC0+aG9zdDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFsdCA9IGhvc3QtPnBvcnRzWzEgXiBxYy0+YXAtPnBvcnRfbm9dOworCWludCByYzsKKworCS8qIEZpcnN0IGFwcGx5IHRoZSB1c3VhbCBydWxlcyAqLworCXJjID0gYXRhX3N0ZF9xY19kZWZlcihxYyk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCS8qIE5vdyBhcHBseSBzZXJpYWxpemF0aW9uIHJ1bGVzLiBPbmx5IGFsbG93IGEgY29tbWFuZCBpZiB0aGUKKwkgICBvdGhlciBjaGFubmVsIHN0YXRlIG1hY2hpbmUgaXMgaWRsZSAqLworCWlmIChhbHQgJiYgYWx0LT5xY19hY3RpdmUpCisJCXJldHVybglBVEFfREVGRVJfUE9SVDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYXJ0b3Bfc2h0ID0gewogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogfTsKQEAgLTI5Myw2ICszMTcsNyBAQAogCS5zZXRfcGlvbW9kZQkJPSBhcnRvcDYyMTBfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCQk9IGFydG9wNjIxMF9zZXRfZG1hbW9kZSwKIAkucHJlcmVzZXQJCT0gYXJ0b3A2MjEwX3ByZV9yZXNldCwKKwkucWNfZGVmZXIJCT0gYXJ0b3A2MjEwX3FjX2RlZmVyLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFydG9wNjI2MF9vcHMgPSB7CkBAIC0zMjMsMjkgKzM0OCwyOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyMTAgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjIxMF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182MjZ4ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI4eCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjYwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyOHhfZmFzdCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjYwX29wcywKIAl9OwpAQCAtMzYyLDEyICszODcsOCBAQAogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSAwKSB7CS8qIDYyMTAgdmFyaWFudCAqLwogCQlwcGlbMF0gPSAmaW5mb182MjEwOwotCQlwcGlbMV0gPSAmYXRhX2R1bW15X3BvcnRfaW5mbzsKIAkJLyogQklPUyBtYXkgaGF2ZSBsZWZ0IHVzIGluIFVETUEsIGNsZWFyIGl0IGJlZm9yZSBsaWJhdGEgcHJvYmUgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NTQsIDApOwotCQkvKiBGb3IgdGhlIG1vbWVudCAoYWxzbyBsYWNrcyBkc2MpICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkFSVE9QIDYyMTAgcmVxdWlyZXMgc2VyaWFsaXplIGZ1bmN0aW9uYWxpdHkgbm90IHlldCBzdXBwb3J0ZWQgYnkgbGliYXRhLlxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNlY29uZGFyeSBBVEEgcG9ydHMgd2lsbCBub3QgYmUgYWN0aXZhdGVkLlxuIik7CiAJfQogCWVsc2UgaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSAxKQkvKiA2MjYwICovCiAJCXBwaVswXSA9ICZpbmZvXzYyNng7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0MzIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jCmluZGV4IGFiNjEwOTUuLjVjMTI5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jCkBAIC02Nyw3ICs2Nyw5IEBACiAgKgogICogQWx0ZXIgUElPX01BU0sgYmVsb3cgYWNjb3JkaW5nIHRvIHRhYmxlIHRvIHNldCBtYXhpbWFsIFBJTyBtb2RlLgogICovCi0jZGVmaW5lIFBJT19NQVNLICgweDFmKQorZW51bSB7CisgIFBJT19NQVNLID0gQVRBX1BJTzQsCit9OwogCiAvKgogICogU3RydWN0IGNvbnRhaW5pbmcgcHJpdmF0ZSBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwppbmRleCA1MDZhZGRlLi5iZWMwYjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKQEAgLTIyMCw5ICsyMjAsOSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDYsCS8qIE5vIE1XRE1BMCBzdXBwb3J0ICovCi0JCS51ZG1hX21hc2sgPSAweDNGLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUExMl9PTkxZLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmYXRpaXhwX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIGF0aWl4cF9lbmFibGVfYml0c1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCmluZGV4IDEwNTBmZWQuLmM0YjQ3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTCiAJCQkJfCBBVEFfRkxBR19NTUlPCiAJCQkJfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSAwLAogCQkudWRtYV9tYXNrCT0gMCwKIAkJLnBvcnRfb3BzCT0gJmJmaW5fcGF0YV9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYwppbmRleCAzNGEzOTQyLi41YWNmOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJmNtZDY0MF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKaW5kZXggMzE2N2Q4Zi4uZjk4ZGZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCkBAIC0yOTksNDAgKzI5OSw0MCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBjbWRfaW5mb1s2XSA9IHsKIAkJewkvKiBDTUQgNjQzIC0gbm8gVURNQSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHdpdGggYnJva2VuIFVETUEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkucG9ydF9vcHMgPSAmY21kNjR4X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0NiB3aXRoIHdvcmtpbmcgVURNQSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCQkucG9ydF9vcHMgPSAmY21kNjR4X3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogQ01EIDY0NiByZXYgMSAgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkucG9ydF9vcHMgPSAmY21kNjQ2cjFfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ4ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ5ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDhfcG9ydF9vcHMKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKaW5kZXggMTE4NmJjZC4uZGI2YTk2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGN0bF9wb3J0W10gPSB7IDB4M0Y2LCAweDM3NiB9OwogCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBpID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcwk9ICZjczU1MjBfcG9ydF9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpWzJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKaW5kZXggYmJhNDUzMy4uYzk3NGIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCkBAIC0yOTgsMTUgKzI5OCwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmY3M1NTMwX3BvcnRfb3BzCiAJfTsKIAkvKiBUaGUgZG9ja2luZyBjb25uZWN0b3IgZG9lc24ndCBkbyBVRE1BLCBhbmQgaXQgc2VlbXMgbm90IE1XRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFsbWF4X3NlY29uZGFyeSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZjczU1MzBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCmluZGV4IDhiMjM2YWYuLmQzM2FhMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwpAQCAtMTgxLDggKzE4MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmNzNTUzNV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwppbmRleCBhZmVkOTI5Li42ZGE0Y2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKQEAgLTI0MSw4ICsyNDEsOCBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZjczU1MzZfcG9ydF9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMKaW5kZXggZDU0NjQyNS4uOGZiMDQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMKQEAgLTEyNCw4ICsxMjQsOCBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZjeTgyYzY5M19wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfZWZhci5jIGIvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMKaW5kZXggYWM2MzkyZS4uMjA4NWUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMKQEAgLTI1MSw5ICsyNTEsOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzayAJPSAweDBmLCAvKiBVRE1BIDY2ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmZWZhcl9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwppbmRleCA2NWMyOGU1Li5kN2YyZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKQEAgLTMzNiw4ICszMzYsOCBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM2NiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmaHB0MzY2X3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IDQyMTYzOTkuLjgxYWI1NzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTc1Myw1NSArNzUzLDU1IEBACiAJLyogSFBUMzcwIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzBBIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MGFfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MCAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBfMzMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MF9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwQSAtIFVETUExMDAgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBhXzMzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBhX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzEsIDM3MiBhbmQgZnJpZW5kcyAtIFVETUExMzMgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzIgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDM3Ml9wb3J0X29wcwogCX07CiAJLyogSFBUMzc0IC0gVURNQTEwMCwgZnVuY3Rpb24gMSB1c2VzIGRpZmZlcmVudCBwcmVyZXNldCBtZXRob2QgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4wID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3NF9mbjFfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwppbmRleCBkNWM5ZmQ3Li4zZDU5ZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwpAQCAtNDQxLDggKzQ0MSw4IEBACiAJLyogSFBUMzcyTiBhbmQgZnJpZW5kcyAtIFVETUExMzMgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaHB0M3gybl9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwppbmRleCBmMTljYzY0Li43ZTMxMDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKQEAgLTE4OCwxMSArMTg4LDExIEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfSFBUM1gzX0RNQSkKIAkJLyogRnVydGhlciBkZWJ1ZyBuZWVkZWQgKi8KLQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkudWRtYV9tYXNrID0gMHgwNywKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogI2VuZGlmCiAJCS5wb3J0X29wcyA9ICZocHQzeDNfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKaW5kZXggY2Y5ZTk4NC4uZTczNDdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogCWlmIChlYy0+ZG1hICE9IE5PX0RNQSAmJiAhcmVxdWVzdF9kbWEoZWMtPmRtYSwgRFJWX05BTUUpKSB7CiAJCXN0YXRlLT5kbWEgPSBlYy0+ZG1hOwotCQlpbmZvLT5td2RtYV9tYXNrID0gMHgwNzsJLyogTVcwLi4yICovCisJCWluZm8tPm13ZG1hX21hc2sgPSBBVEFfTVdETUEyOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDczLDcgKzQ3Myw3IEBACiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX3BvcnRzOyBpKyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW2ldOwogCi0JCWFwLT5waW9fbWFzayA9IDB4MWY7CisJCWFwLT5waW9fbWFzayA9IEFUQV9QSU80OwogCQlhcC0+bXdkbWFfbWFzayA9IGluZm8tPm13ZG1hX21hc2s7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+b3BzID0gJnBhdGFfaWNzaWRlX3BvcnRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKaW5kZXggMTVjZGI5MS4uNGJjZWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfaXNhcG5wIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuNSIKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaXNhcG5wX3NodCA9IHsKIAlBVEFfUElPX1NIVChEUlZfTkFNRSksCkBAIC0yOCw2ICsyOCwxMyBAQAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogfTsKIAorc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGlzYXBucF9ub2FsdF9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKKwkvKiBObyBhbHRzdGF0dXMgc28gd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGxvc3QgaW50ZXJydXB0IHBvbGwgKi8KKwkubG9zdF9pbnRlcnJ1cHQgPSBBVEFfT1BfTlVMTCwKK307CisKIC8qKgogICoJaXNhcG5wX2luaXRfb25lCQktCWF0dGFjaCBhbiBpc2FwbnAgaW50ZXJmYWNlCiAgKglAaWRldjogUG5QIGRldmljZQpAQCAtNjUsOCArNzIsOCBAQAogCiAJYXAgPSBob3N0LT5wb3J0c1swXTsKIAotCWFwLT5vcHMgPSAmaXNhcG5wX3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDE7CisJYXAtPm9wcyA9ICZpc2FwbnBfbm9hbHRfcG9ydF9vcHM7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzA7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CkBAIC03Niw2ICs4Myw3IEBACiAJCQkJCSAgIHBucF9wb3J0X3N0YXJ0KGlkZXYsIDEpLCAxKTsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyOwogCQlhcC0+aW9hZGRyLmN0bF9hZGRyID0gY3RsX2FkZHI7CisJCWFwLT5vcHMgPSAmaXNhcG5wX3BvcnRfb3BzOwogCX0KIAogCWF0YV9zZmZfc3RkX3BvcnRzKCZhcC0+aW9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCmluZGV4IGMxMTNkN2MuLmYxNTZkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwpAQCAtMjYyLDggKzI2Miw4IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwgLyogRklYTUU6IHdhbnQgVURNQSAxMDA/ICovCiAJCS5wb3J0X29wcwk9ICZpdDgyMTNfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwppbmRleCBiMDViODZhLi4xODhiYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKQEAgLTg3NSwyOSArODc1LDI5IEBACiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbWFydCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3NtYXJ0X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYXNzdGhydSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3Bhc3N0aHJ1X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19yZGMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9yZGNfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX3JkY18xMSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkvKiBObyBVRE1BICovCiAJCS5wb3J0X29wcyA9ICZpdDgyMXhfcmRjX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCmluZGV4IGIxNzNjMTUuLjE5ZmRlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJYXAgPSBob3N0LT5wb3J0c1swXTsKIAogCWFwLT5vcHMJPSAmaXhwNHh4X3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MWY7IC8qIFBJTzQgKi8KKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX05PX0FUQVBJOwogCiAJaXhwNHh4X3NldHVwX3BvcnQoYXAsIGRhdGEsIGNzMC0+c3RhcnQsIGNzMS0+c3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYwppbmRleCAzOGNmMWFiLi4zYTE0NzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYwpAQCAtMTM2LDggKzEzNiw4IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAogCQkucG9ydF9vcHMJPSAmam1pY3Jvbl9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jIGIvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYwppbmRleCBlM2JjMWI0Li4zZjgzMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogc3RhdGljIGludCB3aW5ib25kOwkJLyogU2V0IHRvIHByb2JlIFdpbmJvbmQgY29udHJvbGxlcnMsCiAJCQkJCWdpdmUgSS9PIHBvcnQgaWYgbm9uIHN0YW5kYXJkICovCiBzdGF0aWMgaW50IGF1dG9zcGVlZDsJCS8qIENoaXAgcHJlc2VudCB3aGljaCBzbm9vcHMgc3BlZWQgY2hhbmdlcyAqLwotc3RhdGljIGludCBwaW9fbWFzayA9IDB4MUY7CS8qIFBJTyByYW5nZSBmb3IgYXV0b3NwZWVkIGRldmljZXMgKi8KK3N0YXRpYyBpbnQgcGlvX21hc2sgPSBBVEFfUElPNDsJLyogUElPIHJhbmdlIGZvciBhdXRvc3BlZWQgZGV2aWNlcyAqLwogc3RhdGljIGludCBpb3JkeV9tYXNrID0gMHhGRkZGRkZGRjsJLyogVXNlIGlvcmR5IGlmIGF2YWlsYWJsZSAqLwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKaW5kZXggNzZlMzk5Yi4uMjA5NmZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE1LAogCiAJCS5wb3J0X29wcwk9ICZtYXJ2ZWxsX29wcywKQEAgLTEzNiw4ICsxMzYsOCBAQAogCQkvKiBTbGF2ZSBwb3NzaWJsZSBhcyBpdHMgbWFnaWNhbGx5IG1hcHBlZCBub3QgcmVhbCAqLwogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCiAJCS5wb3J0X29wcwk9ICZtYXJ2ZWxsX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKaW5kZXggNTBhZTZkMS4uNjhkMjdiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCkBAIC03MzcsMTAgKzczNywxMCBAQAogCSAqLwogCXByb3AgPSBvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJtd2RtYS1tb2RlIiwgJnByb3BsZW4pOwogCWlmICgocHJvcCkgJiYgKHByb3BsZW4gPj0gNCkpCi0JCW13ZG1hX21hc2sgPSAweDcgJiAoKDEgPDwgKCpwcm9wICsgMSkpIC0gMSk7CisJCW13ZG1hX21hc2sgPSBBVEFfTVdETUEyICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOwogCXByb3AgPSBvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJ1ZG1hLW1vZGUiLCAmcHJvcGxlbik7CiAJaWYgKChwcm9wKSAmJiAocHJvcGxlbiA+PSA0KSkKLQkJdWRtYV9tYXNrID0gMHg3ICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOworCQl1ZG1hX21hc2sgPSBBVEFfVURNQTIgJiAoKDEgPDwgKCpwcm9wICsgMSkpIC0gMSk7CiAKIAlhdGFfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOwogCWlmIChhdGFfaXJxID09IE5PX0lSUSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCmluZGV4IGFhNTc2Y2EuLmIyMWYwMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCSAgIHRoZSBNUElJWCB5b3VyIGJveCBnb2VzIGNhc3RvcnMgdXAgKi8KIAogCWFwLT5vcHMgPSAmbXBpaXhfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHgxRjsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBjbWRfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKaW5kZXggOWRjMDVlMS4uYmRiMjM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uZXRjZWxsLmMKQEAgLTUxLDggKzUxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAJCS8qIEFjdHVhbGx5IHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZXNlIGFzIHRoZQogCQkgICBmaXJtd2FyZSBkZWFscyB3aXRoIGl0ICovCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE1LCAvKiBVRE1BIDEzMyAqLwogCQkucG9ydF9vcHMJPSAmbmV0Y2VsbF9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKaW5kZXggNGRkOWEzYi4uMGZiNmIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uaW5qYTMyLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCWlmICghYmFzZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJYXAtPm9wcyA9ICZuaW5qYTMyX3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MUY7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gYmFzZSArIDB4MTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCmluZGV4IDQwZDQxMWMuLmNhNTNmYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgwRiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzMsCiAJCS5wb3J0X29wcyA9ICZuczg3NDEwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jCmluZGV4IDg5YmY1ZjguLjc3M2IxNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jCkBAIC0zNDYsOCArMzQ2LDggQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcwk9ICZuczg3NDE1X3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpAQCAtMzU1LDggKzM1NSw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU1VQRVJJTykKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbzg3NTYwID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm5zODc1NjBfcGF0YV9vcHMsCiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKaW5kZXggMGZlNGVmMy4uZWZlMmMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCkBAIC04NzEsNyArODcxLDcgQEAKIAlhcC0+cHJpdmF0ZV9kYXRhID0gY2ZfcG9ydDsKIAljZl9wb3J0LT5hcCA9IGFwOwogCWFwLT5vcHMgPSAmb2N0ZW9uX2NmX29wczsKLQlhcC0+cGlvX21hc2sgPSAweDdmOyAvKiBTdXBwb3J0IFBJTyAwLTYgKi8KKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNjsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX05PX0xFR0FDWQogCQkgIHwgQVRBX0ZMQUdfTk9fQVRBUEkgfCBBVEFfRkxBR19QSU9fUE9MTElORzsKIApAQCAtOTAwLDcgKzkwMCw3IEBACiAJCWFwLT5pb2FkZHIuY3RsX2FkZHIJPSBjczEgKyAoNiA8PCAxKSArIDE7CiAJCW9jdGVvbl9jZl9vcHMuc2ZmX2RhdGFfeGZlciA9IG9jdGVvbl9jZl9kYXRhX3hmZXIxNjsKIAotCQlhcC0+bXdkbWFfbWFzawk9IDB4MWY7IC8qIFN1cHBvcnQgTVdETUEgMC00ICovCisJCWFwLT5td2RtYV9tYXNrCT0gQVRBX01XRE1BNDsKIAkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAkJaXJxX2hhbmRsZXIgPSBvY3Rlb25fY2ZfaW50ZXJydXB0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCmluZGV4IDJjMWE5MWMuLjg0YWM1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCkBAIC0yMzgsOCArMjM4LDggQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcwk9ICZvbGRwaWl4X3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYwppbmRleCBlNGZhNGQ1Li45OWVkZGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmb3B0aV9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwppbmRleCA5M2JiNmU5Li44Njg4NWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwpAQCAtMzk5LDE1ICszOTksMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb184MmM3MDAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJm9wdGlkbWFfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMF91ZG1hID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmb3B0aXBsdXNfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm9fODJjNzAwLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwppbmRleCA2NGIyZTIyLi5mNGQwMDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX3BjbWNpYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjUiCiAKIC8qCiAgKglQcml2YXRlIGRhdGEgc3RydWN0dXJlIHRvIGdsdWUgc3R1ZmYgdG9nZXRoZXIKQEAgLTEyNiw2ICsxMjYsMzcgQEAKIAlyZXR1cm4gYnVmbGVuOwogfQogCisvKioKKyAqCXBjbWNpYV84Yml0X2RyYWluX2ZpZm8gLSBTdG9jayBGSUZPIGRyYWluIGxvZ2ljIGZvciBTRkYgY29udHJvbGxlcnMKKyAqCUBxYzogY29tbWFuZAorICoKKyAqCURyYWluIHRoZSBGSUZPIGFuZCBkZXZpY2Ugb2YgYW55IHN0dWNrIGRhdGEgZm9sbG93aW5nIGEgY29tbWFuZAorICoJZmFpbGluZyB0byBjb21wbGV0ZS4gSW4gc29tZSBjYXNlcyB0aGlzIGlzIG5lY2Nlc3NhcnkgYmVmb3JlIGEKKyAqCXJlc2V0IHdpbGwgcmVjb3ZlciB0aGUgZGV2aWNlLgorICoKKyAqLworIAordm9pZCBwY21jaWFfOGJpdF9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaW50IGNvdW50OworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisKKwkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggaW5jb21pbmcgZGF0YSB3aGVuIGEgY29tbWFuZCB3YXMgcnVubmluZyAqLworCWlmIChxYyA9PSBOVUxMIHx8IHFjLT5kbWFfZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybjsKKworCWFwID0gcWMtPmFwOworCisJLyogRHJhaW4gdXAgdG8gNjRLIG9mIGRhdGEgYmVmb3JlIHdlIGdpdmUgdXAgdGhpcyByZWNvdmVyeSBtZXRob2QgKi8KKwlmb3IgKGNvdW50ID0gMDsgKGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApICYgQVRBX0RSUSkKKwkJCQkJCQkmJiBjb3VudCsrIDwgNjU1MzY7KQorCQlpb3JlYWQ4KGFwLT5pb2FkZHIuZGF0YV9hZGRyKTsKKworCWlmIChjb3VudCkKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJkcmFpbmVkICVkIGJ5dGVzIHRvIGNsZWFyIERSUS5cbiIsCisJCQkJCQkJCWNvdW50KTsKKworfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwY21jaWFfc2h0ID0gewogCUFUQV9QSU9fU0hUKERSVl9OQU1FKSwKQEAgLTE0Myw2ICsxNzQsNyBAQAogCS5zZmZfZGF0YV94ZmVyCT0gYXRhX2RhdGFfeGZlcl84Yml0LAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogCS5zZXRfbW9kZQk9IHBjbWNpYV9zZXRfbW9kZV84Yml0LAorCS5kcmFpbl9maWZvCT0gcGNtY2lhXzhiaXRfZHJhaW5fZmlmbywKIH07CiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXApAQCAtMjk5LDcgKzMzMSw3IEBACiAJCWFwID0gaG9zdC0+cG9ydHNbcF07CiAKIAkJYXAtPm9wcyA9IG9wczsKLQkJYXAtPnBpb19tYXNrID0gMTsJCS8qIElTQSBzbyBQSU8gMCBjeWNsZXMgKi8KKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzA7CS8qIElTQSBzbyBQSU8gMCBjeWNsZXMgKi8KIAkJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAJCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBpb19hZGRyICsgMHgxMCAqIHA7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkciArIDB4MTAgKiBwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCmluZGV4IGU5NGVmY2MuLmNhNWNhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKQEAgLTE1MiwxOCArMTUyLDE4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCSAgICAgICAgICAgICAgICAgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsIC8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnBkYzIwMjd4X3BhdGExMDBfb3BzLAogCX0sCiAJLyogUERDX1VETUFfMTMzICovCiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAgICAgICAgICAgICAgICAgICAgICAgICAJICBBVEFfRkxBR19NTUlPLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LCAvKiB1ZG1hMC02ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGMyMDI3eF9wYXRhMTMzX29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCmluZGV4IDc5OWE2YTAuLjVmZWRiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYwpAQCAtMjkxLDIyICsyOTEsMjIgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1szXSA9IHsKIAkJewogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCQkucG9ydF9vcHMgPSAmcGRjMjAyNHhfcG9ydF9vcHMKIAkJfSwKIAkJewogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCQkucG9ydF9vcHMgPSAmcGRjMjAyNnhfcG9ydF9vcHMKIAkJfSwKIAkJewogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmcGRjMjAyNnhfcG9ydF9vcHMKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKaW5kZXggZjFiMjZmNy4uNDU4NzlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCkBAIC0yMTIsMTEgKzIxMiwxMSBAQAogCiAJaWYgKHR5cGUgPT0gNjU4MCkgewogCQlhcC0+b3BzID0gJnFkaTY1ODBfcG9ydF9vcHM7Ci0JCWFwLT5waW9fbWFzayA9IDB4MUY7CisJCWFwLT5waW9fbWFzayA9IEFUQV9QSU80OwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAl9IGVsc2UgewogCQlhcC0+b3BzID0gJnFkaTY1MDBfcG9ydF9vcHM7Ci0JCWFwLT5waW9fbWFzayA9IDB4MDc7CS8qIEFjdHVhbGx5IFBJTzMgIUlPUkRZIGlzIHBvc3NpYmxlICovCisJCWFwLT5waW9fbWFzayA9IEFUQV9QSU8yOyAvKiBBY3R1YWxseSBQSU8zICFJT1JEWSBpcyBwb3NzaWJsZSAqLwogCQlhcC0+ZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfTk9fSU9SRFk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCmluZGV4IDY5NWQ0NGEuLjQ0MDFiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCkBAIC0yMTYsOSArMjE2LDkgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCi0JCS51ZG1hX21hc2sJPSAweDE0LCAvKiBVRE1BMzMvNjYgb25seSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyNF9PTkxZLAogCQkucG9ydF9vcHMJPSAmcmFkaXN5c19wYXRhX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYwppbmRleCBlYmZjZGEyLi44ZTNjZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCkBAIC00OCw2MyArNDgsMTEgQEAKIHN0cnVjdCByYjUzMl9jZl9pbmZvIHsKIAl2b2lkIF9faW9tZW0JKmlvYmFzZTsKIAl1bnNpZ25lZCBpbnQJZ3Bpb19saW5lOwotCWludAkJZnJvemVuOwogCXVuc2lnbmVkIGludAlpcnE7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHJiNTMyX3BhdGFfZmluaXNoX2lvKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IGF0YV9ob3N0ICphaCA9IGFwLT5ob3N0OwotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYWgtPnByaXZhdGVfZGF0YTsKLQotCS8qIEZJWE1FOiBLZWVwIHByZXZpb3VzIGRlbGF5LiBJZiB0aGlzIGlzIG1lcmVseSBhIGZlbmNlIHRoZW4KLQkgICBhdGFfc2ZmX3N5bmMgbWlnaHQgYmUgc3VmZmljaWVudC4gKi8KLQlhdGFfc2ZmX2RtYV9wYXVzZShhcCk7Ci0JbmRlbGF5KFJCNTAwX0NGX0lPX0RFTEFZKTsKLX0KLQotc3RhdGljIHZvaWQgcmI1MzJfcGF0YV9leGVjX2NvbW1hbmQoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCQljb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQl3cml0ZWIodGYtPmNvbW1hbmQsIGFwLT5pb2FkZHIuY29tbWFuZF9hZGRyKTsKLQlyYjUzMl9wYXRhX2ZpbmlzaF9pbyhhcCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmI1MzJfcGF0YV9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQkJCQl1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgd3JpdGVfZGF0YSkKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYWRldi0+bGluay0+YXA7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBhcC0+aW9hZGRyLmRhdGFfYWRkcjsKLQlpbnQgcmV0bGVuID0gYnVmbGVuOwotCi0JaWYgKHdyaXRlX2RhdGEpIHsKLQkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKLQkJCXdyaXRlYigqYnVmLCBpb2FkZHIpOwotCX0gZWxzZSB7Ci0JCWZvciAoOyBidWZsZW4gPiAwOyBidWZsZW4tLSwgYnVmKyspCi0JCQkqYnVmID0gcmVhZGIoaW9hZGRyKTsKLQl9Ci0KLQlyYjUzMl9wYXRhX2ZpbmlzaF9pbyhhZGV2LT5saW5rLT5hcCk7Ci0JcmV0dXJuIHJldGxlbjsKLX0KLQotc3RhdGljIHZvaWQgcmI1MzJfcGF0YV9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgcmI1MzJfY2ZfaW5mbyAqaW5mbyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7Ci0KLQlpbmZvLT5mcm96ZW4gPSAxOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgcmI1MzJfY2ZfaW5mbyAqaW5mbyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7Ci0KLQlpbmZvLT5mcm96ZW4gPSAwOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgcmI1MzJfcGF0YV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiB7CiAJc3RydWN0IGF0YV9ob3N0ICphaCA9IGRldl9pbnN0YW5jZTsKQEAgLTExMiw4ICs2MCw3IEBACiAKIAlpZiAoZ3Bpb19nZXRfdmFsdWUoaW5mby0+Z3Bpb19saW5lKSkgewogCQlzZXRfaXJxX3R5cGUoaW5mby0+aXJxLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCQlpZiAoIWluZm8tPmZyb3plbikKLQkJCWF0YV9zZmZfaW50ZXJydXB0KGluZm8tPmlycSwgZGV2X2luc3RhbmNlKTsKKwkJYXRhX3NmZl9pbnRlcnJ1cHQoaW5mby0+aXJxLCBkZXZfaW5zdGFuY2UpOwogCX0gZWxzZSB7CiAJCXNldF9pcnFfdHlwZShpbmZvLT5pcnEsIElSUV9UWVBFX0xFVkVMX0hJR0gpOwogCX0KQEAgLTEyMywxMCArNzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcmI1MzJfcGF0YV9wb3J0X29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCi0JLnNmZl9leGVjX2NvbW1hbmQJPSByYjUzMl9wYXRhX2V4ZWNfY29tbWFuZCwKLQkuc2ZmX2RhdGFfeGZlcgkJPSByYjUzMl9wYXRhX2RhdGFfeGZlciwKLQkuZnJlZXplCQkJPSByYjUzMl9wYXRhX2ZyZWV6ZSwKLQkudGhhdwkJCT0gcmI1MzJfcGF0YV90aGF3LAorCS5zZmZfZGF0YV94ZmVyCQk9IGF0YV9zZmZfZGF0YV94ZmVyMzIsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0NSw3ICs4OSw3IEBACiAJYXAgPSBhaC0+cG9ydHNbMF07CiAKIAlhcC0+b3BzCQk9ICZyYjUzMl9wYXRhX3BvcnRfb3BzOwotCWFwLT5waW9fbWFzawk9IDB4MWY7IC8qIFBJTzQgKi8KKwlhcC0+cGlvX21hc2sJPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19NTUlPOwogCiAJYXAtPmlvYWRkci5jbWRfYWRkcgk9IGluZm8tPmlvYmFzZSArIFJCNTAwX0NGX1JFR19CQVNFOwpAQCAtMTYwLDcgKzEwNCw3IEBACiAKIHN0YXRpYyBfX2RldmluaXQgaW50IHJiNTMyX3BhdGFfZHJpdmVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JdW5zaWduZWQgaW50IGlycTsKKwlpbnQgaXJxOwogCWludCBncGlvOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBhdGFfaG9zdCAqYWg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwppbmRleCA0NmQ2YmMxLi4wYzU3NGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZyejEwMDBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IDlhNGJkY2EuLmY0OTgxNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMiw3ICsyLDYgQEAKICAqIE5ldyBBVEEgbGF5ZXIgU0MxMjAwIGRyaXZlcgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKiBUT0RPOiBNb2RlIHNlbGVjdGlvbiBmaWx0ZXJpbmcKLSAqIFRPRE86IENhbid0IGVuYWJsZSBzZWNvbmQgY2hhbm5lbCB1bnRpbCBBVEEgY29yZSBoYXMgc2VyaWFsaXplCiAgKiBUT0RPOiBOZWVkcyBjdXN0b20gRE1BIGNsZWFudXAgY29kZQogICoKICAqIEJhc2VkIHZlcnkgaGVhdmlseSBvbgpAQCAtMTc4LDYgKzE3NywzMSBAQAogCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAorLyoqCisgKglzYzEyMDBfcWNfZGVmZXIJLQlpbXBsZW1lbnQgc2VyaWFsaXphdGlvbgorICoJQHFjOiBjb21tYW5kCisgKgorICoJU2VyaWFsaXplIGNvbW1hbmQgaXNzdWUgb24gdGhpcyBjb250cm9sbGVyLgorICovCisKK3N0YXRpYyBpbnQgc2MxMjAwX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcWMtPmFwLT5ob3N0OworCXN0cnVjdCBhdGFfcG9ydCAqYWx0ID0gaG9zdC0+cG9ydHNbMSBeIHFjLT5hcC0+cG9ydF9ub107CisJaW50IHJjOworCisJLyogRmlyc3QgYXBwbHkgdGhlIHVzdWFsIHJ1bGVzICovCisJcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogTm93IGFwcGx5IHNlcmlhbGl6YXRpb24gcnVsZXMuIE9ubHkgYWxsb3cgYSBjb21tYW5kIGlmIHRoZQorCSAgIG90aGVyIGNoYW5uZWwgc3RhdGUgbWFjaGluZSBpcyBpZGxlICovCisJaWYgKGFsdCAmJiBhbHQtPnFjX2FjdGl2ZSkKKwkJcmV0dXJuCUFUQV9ERUZFUl9QT1JUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzYzEyMDBfc2h0ID0gewogCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAogCS5zZ190YWJsZXNpemUJPSBMSUJBVEFfRFVNQl9NQVhfUFJELApAQCAtMTg3LDYgKzIxMSw3IEBACiAJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkucWNfcHJlcCAJPSBhdGFfc2ZmX2R1bWJfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBzYzEyMDBfcWNfaXNzdWUsCisJLnFjX2RlZmVyCT0gc2MxMjAwX3FjX2RlZmVyLAogCS5jYWJsZV9kZXRlY3QJPSBhdGFfY2FibGVfNDB3aXJlLAogCS5zZXRfcGlvbW9kZQk9IHNjMTIwMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJPSBzYzEyMDBfc2V0X2RtYW1vZGUsCkBAIC0yMDUsMTMgKzIzMCwxMyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmc2MxMjAwX3BvcnRfb3BzCiAJfTsKIAkvKiBDYW4ndCBlbmFibGUgcG9ydCAyIHlldCwgc2VlIHRvcCBjb21tZW50cyAqLwotCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sICZhdGFfZHVtbXlfcG9ydF9pbmZvIH07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgfTsKIAogCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zY2MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKaW5kZXggZDQ0N2YxYy4uNDI1N2Q2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zY2MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCkBAIC0xMDAxLDggKzEwMDEsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNjY19wb3J0X2luZm9bXSA9IHsKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwMCwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS8qIE5vIE1XRE1BICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZzY2NfcGF0YV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjaC5jCmluZGV4IDZhZWVlZWIuLjk5Y2NlYjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjaC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKQEAgLTg0LDkgKzg0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNjaF9wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gQVRBX1BJTzQsICAgLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLCAvKiBtd2RtYTAtMiAqLwotCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsICAvKiB1ZG1hMC01ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJLnBvcnRfb3BzCT0gJnNjaF9wYXRhX29wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYwppbmRleCA4ZDJmZDlkLi5iZWFlZDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCkBAIC0zOTgsMjYgKzM5OCwyNiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzRdID0gewogCQl7IC8qIE9TQjQgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIE9TQjQgbm8gVURNQSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gMHgwMCwKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLyogTm8gVURNQSAqLwogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX29zYjRfcG9ydF9vcHMKIAkJfSwgeyAvKiBDU0I1ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19jc2JfcG9ydF9vcHMKIAkJfSwgeyAvKiBDU0I1IC0gbGF0ZXIgcmV2aXNpb25zKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwppbmRleCA5ZTc2NGU1Li40Y2I2NDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKQEAgLTI4MiwxNSArMjgyLDE1IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJnNpbDY4MF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc2xvdyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCmluZGV4IDI3Y2ViNDIuLjQ4OGU3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtNTUyLDUxICs1NTIsNTcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gMHgwNywKLQkudWRtYV9tYXNrCT0gMCwKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLyogTm8gVURNQSAqLwogCS5wb3J0X29wcwk9ICZzaXNfb2xkX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8zMyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IDB4MDcsCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwJLyogVURNQSAzMyAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAogCS5wb3J0X29wcwk9ICZzaXNfb2xkX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm82NiA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAkvKiBVRE1BIDY2ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KKwkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCS5wb3J0X29wcwk9ICZzaXNfNjZfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEwMCA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJLnBvcnRfb3BzCT0gJnNpc18xMDBfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEwMF9lYXJseSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTMzID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmc2lzXzEzM19vcHMsCiB9OwogY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZm9yX3NhdGEgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmc2lzXzEzM19mb3Jfc2F0YV9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTMzX2Vhcmx5ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmc2lzXzEzM19lYXJseV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCmluZGV4IDFiMGU3YjYuLjI5ZjczM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKQEAgLTI4MywxMyArMjgzLDEzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fZG1hID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fZWFybHkgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmc2w4MmMxMDVfcG9ydF9vcHMKIAl9OwogCS8qIGZvciBub3cgdXNlIG9ubHkgdGhlIGZpcnN0IHBvcnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKaW5kZXggZWY5NTk3NS4uZjFmMTNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKQEAgLTE5MSw4ICsxOTEsOCBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZ0cmlmbGV4X3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwppbmRleCBiYTU1NmQzLi5iMDhlNmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKQEAgLTQyMiw0NiArNDIyLDQ2IEBACiAJLyogRWFybHkgVklBIHdpdGhvdXQgVURNQSBzdXBwb3J0ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV9td2RtYV9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIERpdHRvIHdpdGggSVJRIG1hc2tpbmcgcmVxdWlyZWQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm9fYm9ya2VkID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHNfbm9pcnEsCiAJfTsKIAkvKiBWSUEgVURNQSAzMyBkZXZpY2VzIChhbmQgYm9ya2VkIDY2KSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTMzX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogVklBIFVETUEgNjYgZGV2aWNlcyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTY2X2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogVklBIFVETUEgMTAwIGRldmljZXMgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWExMDBfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBVRE1BMTMzIHdpdGggYmFkIEFTVCAoQWxsIGN1cnJlbnQgMTMzKSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTEzM19pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCS8qIEZJWE1FOiBzaG91bGQgY2hlY2sgbm9ydGggYnJpZGdlICovCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV93aW5ib25kLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYwppbmRleCAzMTllMTY0Li42ZDg2MTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCWF0YV9wb3J0X2Rlc2MoYXAsICJjbWQgMHglbHggY3RsIDB4JWx4IiwgY21kX3BvcnQsIGN0bF9wb3J0KTsKIAogCQlhcC0+b3BzID0gJndpbmJvbmRfcG9ydF9vcHM7Ci0JCWFwLT5waW9fbWFzayA9IDB4MUY7CisJCWFwLT5waW9fbWFzayA9IEFUQV9QSU80OwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGNtZF9hZGRyOwogCQlhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyID0gY3RsX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwppbmRleCBiZTUzNTQ1Li4zOTU4ODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKQEAgLTE0OCw2ICsxNDgsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFkbWFfYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCiAKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCisKIAkuY2hlY2tfYXRhcGlfZG1hCT0gYWRtYV9jaGVja19hdGFwaV9kbWEsCiAJLnFjX3ByZXAJCT0gYWRtYV9xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBhZG1hX3FjX2lzc3VlLApAQCAtMTY2LDcgKzE2OCw3IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU8gfAogCQkJCSAgQVRBX0ZMQUdfUElPX1BPTExJTkcsCi0JCS5waW9fbWFzawk9IDB4MTAsIC8qIHBpbzQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzRfT05MWSwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmFkbWFfYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKaW5kZXggNTViYzg4Yy4uYzJlOTBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCkBAIC0xMjc5LDggKzEyNzksOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNhdGFfZnNsX3BvcnRfaW5mb1tdID0gewogCXsKIAkgLmZsYWdzID0gU0FUQV9GU0xfSE9TVF9GTEFHUywKLQkgLnBpb19tYXNrID0gMHgxZiwJLyogcGlvIDAtNCAqLwotCSAudWRtYV9tYXNrID0gMHg3ZiwJLyogdWRtYSAwLTYgKi8KKwkgLnBpb19tYXNrID0gQVRBX1BJTzQsCisJIC51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJIC5wb3J0X29wcyA9ICZzYXRhX2ZzbF9vcHMsCiAJIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jIGIvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCmluZGV4IGZiYmQ4N2MuLjMwNWE0ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKQEAgLTc0NCw4ICs3NDQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5pY19wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfUElPX0RNQSwKLQkucGlvX21hc2sJCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkucGlvX21hc2sJCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCQk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJCT0gJmluaWNfcG9ydF9vcHMKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggNzRiMTA4MC4uYTM3NzIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwpAQCAtMSwxMCArMSwxMyBAQAogLyoKICAqIHNhdGFfbXYuYyAtIE1hcnZlbGwgU0FUQSBzdXBwb3J0CiAgKgotICogQ29weXJpZ2h0IDIwMDg6IE1hcnZlbGwgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5OiBNYXJ2ZWxsIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDU6IEVNQyBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgorICogT3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyZXR0IFJ1c3MuCisgKiBFeHRlbnNpdmUgb3ZlcmhhdWwgYW5kIGVuaGFuY2VtZW50IGJ5IE1hcmsgTG9yZCA8bWxvcmRAcG9ib3guY29tPi4KKyAqCiAgKiBQbGVhc2UgQUxXQVlTIGNvcHkgbGludXgtaWRlQHZnZXIua2VybmVsLm9yZyBvbiBlbWFpbHMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDIwICsyOCwxMyBAQAogLyoKICAqIHNhdGFfbXYgVE9ETyBsaXN0OgogICoKLSAqIC0tPiBFcnJhdGEgd29ya2Fyb3VuZCBmb3IgTkNRIGRldmljZSBlcnJvcnMuCi0gKgogICogLS0+IE1vcmUgZXJyYXRhIHdvcmthcm91bmRzIGZvciBQQ0ktWC4KICAqCiAgKiAtLT4gQ29tcGxldGUgYSBmdWxsIGVycmF0YSBhdWRpdCBmb3IgYWxsIGNoaXBzZXRzIHRvIGlkZW50aWZ5IG90aGVycy4KICAqCi0gKiAtLT4gQVRBUEkgc3VwcG9ydCAoTWFydmVsbCBjbGFpbXMgdGhlIDYweHgvNzB4eCBjaGlwcyBjYW4gZG8gaXQpLgotICoKICAqIC0tPiBEZXZlbG9wIGEgbG93LXBvd2VyLWNvbnN1bXB0aW9uIHN0cmF0ZWd5LCBhbmQgaW1wbGVtZW50IGl0LgogICoKLSAqIC0tPiBbRXhwZXJpbWVudCwgbG93IHByaW9yaXR5XSBJbnZlc3RpZ2F0ZSBpbnRlcnJ1cHQgY29hbGVzY2luZy4KLSAqICAgICAgIFF1aXRlIG9mdGVuLCBlc3BlY2lhbGx5IHdpdGggUENJIE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdHMgKE1TSSksCi0gKiAgICAgICB0aGUgb3ZlcmhlYWQgcmVkdWNlZCBieSBpbnRlcnJ1cHQgbWl0aWdhdGlvbiBpcyBxdWl0ZSBvZnRlbiBub3QKLSAqICAgICAgIHdvcnRoIHRoZSBsYXRlbmN5IGNvc3QuCisgKiAtLT4gQWRkIHN5c2ZzIGF0dHJpYnV0ZXMgZm9yIHBlci1jaGlwIC8gcGVyLUhDIElSUSBjb2FsZXNjaW5nIHRocmVzaG9sZHMuCiAgKgogICogLS0+IFtFeHBlcmltZW50LCBNYXJ2ZWxsIHZhbHVlIGFkZGVkXSBJcyBpdCBwb3NzaWJsZSB0byB1c2UgdGFyZ2V0CiAgKiAgICAgICBtb2RlIHRvIGNyb3NzLWNvbm5lY3QgdHdvIExpbnV4IGJveGVzIHdpdGggTWFydmVsbCBjYXJkcz8gIElmIHNvLApAQCAtNjgsNyArNjQsMjcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9tdiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMjUiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjI3IgorCisvKgorICogbW9kdWxlIG9wdGlvbnMKKyAqLworCitzdGF0aWMgaW50IG1zaTsKKyNpZmRlZiBDT05GSUdfUENJCittb2R1bGVfcGFyYW0obXNpLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhtc2ksICJFbmFibGUgdXNlIG9mIFBDSSBNU0kgKDA9b2ZmLCAxPW9uKSIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgaXJxX2NvYWxlc2NpbmdfaW9fY291bnQ7Cittb2R1bGVfcGFyYW0oaXJxX2NvYWxlc2NpbmdfaW9fY291bnQsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9jb2FsZXNjaW5nX2lvX2NvdW50LAorCQkgIklSUSBjb2FsZXNjaW5nIEkvTyBjb3VudCB0aHJlc2hvbGQgKDAuLjI1NSkiKTsKKworc3RhdGljIGludCBpcnFfY29hbGVzY2luZ191c2VjczsKK21vZHVsZV9wYXJhbShpcnFfY29hbGVzY2luZ191c2VjcywgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxX2NvYWxlc2NpbmdfdXNlY3MsCisJCSAiSVJRIGNvYWxlc2NpbmcgdGltZSB0aHJlc2hvbGQgaW4gdXNlY3MiKTsKIAogZW51bSB7CiAJLyogQkFSJ3MgYXJlIGVudW1lcmF0ZWQgaW4gdGVybXMgb2YgcGNpX3Jlc291cmNlX3N0YXJ0KCkgdGVybXMgKi8KQEAgLTc5LDEzICs5NSwzMiBAQAogCU1WX01BSk9SX1JFR19BUkVBX1NaCT0gMHgxMDAwMCwJLyogNjRLQiAqLwogCU1WX01JTk9SX1JFR19BUkVBX1NaCT0gMHgyMDAwLAkvKiA4S0IgKi8KIAorCS8qIEZvciB1c2Ugd2l0aCBib3RoIElSUSBjb2FsZXNjaW5nIG1ldGhvZHMgKCJhbGwgcG9ydHMiIG9yICJwZXItSEMiICovCisJQ09BTF9DTE9DS1NfUEVSX1VTRUMJPSAxNTAsCQkvKiBmb3IgY2FsY3VsYXRpbmcgQ09BTF9USU1FcyAqLworCU1BWF9DT0FMX1RJTUVfVEhSRVNIT0xECT0gKCgxIDw8IDI0KSAtIDEpLCAvKiBpbnRlcm5hbCBjbG9ja3MgY291bnQgKi8KKwlNQVhfQ09BTF9JT19DT1VOVAk9IDI1NSwJCS8qIGNvbXBsZXRlZCBJL08gY291bnQgKi8KKwogCU1WX1BDSV9SRUdfQkFTRQkJPSAwLAotCU1WX0lSUV9DT0FMX1JFR19CQVNFCT0gMHgxODAwMCwJLyogNnh4eCBwYXJ0IG9ubHkgKi8KLQlNVl9JUlFfQ09BTF9DQVVTRQkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweDA4KSwKLQlNVl9JUlFfQ09BTF9DQVVTRV9MTwkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweDg4KSwKLQlNVl9JUlFfQ09BTF9DQVVTRV9ISQkJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweDhjKSwKLQlNVl9JUlFfQ09BTF9USFJFU0hPTEQJCT0gKE1WX0lSUV9DT0FMX1JFR19CQVNFICsgMHhjYyksCi0JTVZfSVJRX0NPQUxfVElNRV9USFJFU0hPTEQJPSAoTVZfSVJRX0NPQUxfUkVHX0JBU0UgKyAweGQwKSwKKworCS8qCisJICogUGVyLWNoaXAgKCJhbGwgcG9ydHMiKSBpbnRlcnJ1cHQgY29hbGVzY2luZyBmZWF0dXJlLgorCSAqIFRoaXMgaXMgb25seSBmb3IgR0VOX0lJIC8gR0VOX0lJRSBoYXJkd2FyZS4KKwkgKgorCSAqIENvYWxlc2NpbmcgZGVmZXJzIHRoZSBpbnRlcnJ1cHQgdW50aWwgZWl0aGVyIHRoZSBJT19USFJFU0hPTEQKKwkgKiAoY291bnQgb2YgY29tcGxldGVkIEkvT3MpIGlzIG1ldCwgb3IgdGhlIFRJTUVfVEhSRVNIT0xEIGlzIG1ldC4KKwkgKi8KKwlNVl9DT0FMX1JFR19CQVNFCT0gMHgxODAwMCwKKwlNVl9JUlFfQ09BTF9DQVVTRQk9IChNVl9DT0FMX1JFR19CQVNFICsgMHgwOCksCisJQUxMX1BPUlRTX0NPQUxfSVJRCT0gKDEgPDwgNCksCS8qIGFsbCBwb3J0cyBpcnEgZXZlbnQgKi8KKworCU1WX0lSUV9DT0FMX0lPX1RIUkVTSE9MRCAgID0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweGNjKSwKKwlNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRCA9IChNVl9DT0FMX1JFR19CQVNFICsgMHhkMCksCisKKwkvKgorCSAqIFJlZ2lzdGVycyBmb3IgdGhlICh1bnVzZWQgaGVyZSkgdHJhbnNhY3Rpb24gY29hbGVzY2luZyBmZWF0dXJlOgorCSAqLworCU1WX1RSQU5fQ09BTF9DQVVTRV9MTwk9IChNVl9DT0FMX1JFR19CQVNFICsgMHg4OCksCisJTVZfVFJBTl9DT0FMX0NBVVNFX0hJCT0gKE1WX0NPQUxfUkVHX0JBU0UgKyAweDhjKSwKIAogCU1WX1NBVEFIQzBfUkVHX0JBU0UJPSAweDIwMDAwLAogCU1WX0ZMQVNIX0NUTF9PRlMJPSAweDEwNDZjLApAQCAtMTE3LDE3ICsxNTIsMTYgQEAKIAogCS8qIEhvc3QgRmxhZ3MgKi8KIAlNVl9GTEFHX0RVQUxfSEMJCT0gKDEgPDwgMzApLCAgLyogdHdvIFNBVEEgSG9zdCBDb250cm9sbGVycyAqLwotCU1WX0ZMQUdfSVJRX0NPQUxFU0NFCT0gKDEgPDwgMjkpLCAgLyogSVJRIGNvYWxlc2NpbmcgY2FwYWJpbGl0eSAqLwogCiAJTVZfQ09NTU9OX0ZMQUdTCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAotCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX05PX0FUQVBJIHwKLQkJCQkgIEFUQV9GTEFHX1BJT19QT0xMSU5HLAorCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAogCi0JTVZfNlhYWF9GTEFHUwkJPSBNVl9GTEFHX0lSUV9DT0FMRVNDRSwKKwlNVl9HRU5fSV9GTEFHUwkJPSBNVl9DT01NT05fRkxBR1MgfCBBVEFfRkxBR19OT19BVEFQSSwKIAotCU1WX0dFTklJRV9GTEFHUwkJPSBNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKLQkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSB8Ci0JCQkJICBBVEFfRkxBR19OQ1EgfCBBVEFfRkxBR19BTiwKKwlNVl9HRU5fSUlfRkxBR1MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfTkNRIHwKKwkJCQkgIEFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX0FDUElfU0FUQSwKKworCU1WX0dFTl9JSUVfRkxBR1MJPSBNVl9HRU5fSUlfRkxBR1MgfCBBVEFfRkxBR19BTiwKIAogCUNSUUJfRkxBR19SRUFECQk9ICgxIDw8IDApLAogCUNSUUJfVEFHX1NISUZUCQk9IDEsCkBAIC0xODAsMTYgKzIxNCwxOCBAQAogCVBDSV9IQ19NQUlOX0lSUV9NQVNLX09GUyAgPSAweDFkNjQsCiAJU09DX0hDX01BSU5fSVJRX0NBVVNFX09GUyA9IDB4MjAwMjAsCiAJU09DX0hDX01BSU5fSVJRX01BU0tfT0ZTICA9IDB4MjAwMjQsCi0JRVJSX0lSUQkJCT0gKDEgPDwgMCksCS8qIHNoaWZ0IGJ5IHBvcnQgIyAqLwotCURPTkVfSVJRCQk9ICgxIDw8IDEpLAkvKiBzaGlmdCBieSBwb3J0ICMgKi8KKwlFUlJfSVJRCQkJPSAoMSA8PCAwKSwJLyogc2hpZnQgYnkgKDIgKiBwb3J0ICMpICovCisJRE9ORV9JUlEJCT0gKDEgPDwgMSksCS8qIHNoaWZ0IGJ5ICgyICogcG9ydCAjKSAqLwogCUhDMF9JUlFfUEVORAkJPSAweDFmZiwJLyogYml0cyAwLTggPSBIQzAncyBwb3J0cyAqLwogCUhDX1NISUZUCQk9IDksCQkvKiBiaXRzIDktMTcgPSBIQzEncyBwb3J0cyAqLworCURPTkVfSVJRXzBfMwkJPSAweDAwMDAwMGFhLAkvKiBET05FX0lSUSBwb3J0cyAwLDEsMiwzICovCisJRE9ORV9JUlFfNF83CQk9IChET05FX0lSUV8wXzMgPDwgSENfU0hJRlQpLCAgLyogNCw1LDYsNyAqLwogCVBDSV9FUlIJCQk9ICgxIDw8IDE4KSwKLQlUUkFOX0xPX0RPTkUJCT0gKDEgPDwgMTkpLAkvKiA2eHh4OiBJUlEgY29hbGVzY2luZyAqLwotCVRSQU5fSElfRE9ORQkJPSAoMSA8PCAyMCksCS8qIDZ4eHg6IElSUSBjb2FsZXNjaW5nICovCi0JUE9SVFNfMF8zX0NPQUxfRE9ORQk9ICgxIDw8IDgpLAotCVBPUlRTXzRfN19DT0FMX0RPTkUJPSAoMSA8PCAxNyksCi0JUE9SVFNfMF83X0NPQUxfRE9ORQk9ICgxIDw8IDIxKSwJLyogNnh4eDogSVJRIGNvYWxlc2NpbmcgKi8KKwlUUkFOX0NPQUxfTE9fRE9ORQk9ICgxIDw8IDE5KSwJLyogdHJhbnNhY3Rpb24gY29hbGVzY2luZyAqLworCVRSQU5fQ09BTF9ISV9ET05FCT0gKDEgPDwgMjApLAkvKiB0cmFuc2FjdGlvbiBjb2FsZXNjaW5nICovCisJUE9SVFNfMF8zX0NPQUxfRE9ORQk9ICgxIDw8IDgpLAkvKiBIQzAgSVJRIGNvYWxlc2NpbmcgKi8KKwlQT1JUU180XzdfQ09BTF9ET05FCT0gKDEgPDwgMTcpLAkvKiBIQzEgSVJRIGNvYWxlc2NpbmcgKi8KKwlBTExfUE9SVFNfQ09BTF9ET05FCT0gKDEgPDwgMjEpLAkvKiBHRU5fSUkoRSkgSVJRIGNvYWxlc2NpbmcgKi8KIAlHUElPX0lOVAkJPSAoMSA8PCAyMiksCiAJU0VMRl9JTlQJCT0gKDEgPDwgMjMpLAogCVRXU0lfSU5UCQk9ICgxIDw8IDI0KSwKQEAgLTIwNSw2ICsyNDEsMjEgQEAKIAlIQ19DT0FMX0lSUQkJPSAoMSA8PCA0KSwJLyogSVJRIGNvYWxlc2NpbmcgKi8KIAlERVZfSVJRCQkJPSAoMSA8PCA4KSwJLyogc2hpZnQgYnkgcG9ydCAjICovCiAKKwkvKgorCSAqIFBlci1IQyAoSG9zdC1Db250cm9sbGVyKSBpbnRlcnJ1cHQgY29hbGVzY2luZyBmZWF0dXJlLgorCSAqIFRoaXMgaXMgcHJlc2VudCBvbiBhbGwgY2hpcCBnZW5lcmF0aW9ucy4KKwkgKgorCSAqIENvYWxlc2NpbmcgZGVmZXJzIHRoZSBpbnRlcnJ1cHQgdW50aWwgZWl0aGVyIHRoZSBJT19USFJFU0hPTEQKKwkgKiAoY291bnQgb2YgY29tcGxldGVkIEkvT3MpIGlzIG1ldCwgb3IgdGhlIFRJTUVfVEhSRVNIT0xEIGlzIG1ldC4KKwkgKi8KKwlIQ19JUlFfQ09BTF9JT19USFJFU0hPTERfT0ZTCT0gMHgwMDBjLAorCUhDX0lSUV9DT0FMX1RJTUVfVEhSRVNIT0xEX09GUwk9IDB4MDAxMCwKKworCVNPQ19MRURfQ1RSTF9PRlMJPSAweDJjLAorCVNPQ19MRURfQ1RSTF9CTElOSwk9ICgxIDw8IDApLAkvKiBBY3RpdmUgTEVEIGJsaW5rICovCisJU09DX0xFRF9DVFJMX0FDVF9QUkVTRU5DRSA9ICgxIDw8IDIpLAkvKiBNdWx0aXBsZXggZGV2IHByZXNlbmNlICovCisJCQkJCQkvKiAgd2l0aCBkZXYgYWN0aXZpdHkgTEVEICovCisKIAkvKiBTaGFkb3cgYmxvY2sgcmVnaXN0ZXJzICovCiAJU0hEX0JMS19PRlMJCT0gMHgxMDAsCiAJU0hEX0NUTF9BU1RfT0ZTCQk9IDB4MjAsCQkvKiBvZnMgZnJvbSBTSERfQkxLX09GUyAqLwpAQCAtMzQ2LDYgKzM5NywxMiBAQAogCUVETUFfQVJCX0NGR19PRlMJPSAweDM4LAogCiAJRURNQV9IQUxUQ09ORF9PRlMJPSAweDYwLAkJLyogR2VuSUllIGhhbHQgY29uZGl0aW9ucyAqLworCUVETUFfVU5LTk9XTl9SU1ZEX09GUwk9IDB4NkMsCQkvKiBHZW5JSWUgdW5rbm93bi9yZXNlcnZlZCAqLworCisJQk1ETUFfQ01EX09GUwkJPSAweDIyNCwJLyogYm1kbWEgY29tbWFuZCByZWdpc3RlciAqLworCUJNRE1BX1NUQVRVU19PRlMJPSAweDIyOCwJLyogYm1kbWEgc3RhdHVzIHJlZ2lzdGVyICovCisJQk1ETUFfUFJEX0xPV19PRlMJPSAweDIyYywJLyogYm1kbWEgUFJEIGFkZHIgMzE6MCAqLworCUJNRE1BX1BSRF9ISUdIX09GUwk9IDB4MjMwLAkvKiBibWRtYSBQUkQgYWRkciA2MzozMiAqLwogCiAJLyogSG9zdCBwcml2YXRlIGZsYWdzIChocF9mbGFncykgKi8KIAlNVl9IUF9GTEFHX01TSQkJPSAoMSA8PCAwKSwKQEAgLTM1OSwxMiArNDE2LDE0IEBACiAJTVZfSFBfUENJRQkJPSAoMSA8PCA5KSwJLyogUENJZSBidXMvcmVnczogNzA0MiAqLwogCU1WX0hQX0NVVF9USFJPVUdICT0gKDEgPDwgMTApLAkvKiBjYW4gdXNlIEVETUEgY3V0LXRocm91Z2ggKi8KIAlNVl9IUF9GTEFHX1NPQwkJPSAoMSA8PCAxMSksCS8qIFN5c3RlbU9uQ2hpcCwgbm8gUENJICovCisJTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOID0gKDEgPDwgMTIpLAkvKiBpcyBsZWQgYmxpbmtpbmcgZW5hYmxlZD8gKi8KIAogCS8qIFBvcnQgcHJpdmF0ZSBmbGFncyAocHBfZmxhZ3MpICovCiAJTVZfUFBfRkxBR19FRE1BX0VOCT0gKDEgPDwgMCksCS8qIGlzIEVETUEgZW5naW5lIGVuYWJsZWQ/ICovCiAJTVZfUFBfRkxBR19OQ1FfRU4JPSAoMSA8PCAxKSwJLyogaXMgRURNQSBzZXQgdXAgZm9yIE5DUT8gKi8KIAlNVl9QUF9GTEFHX0ZCU19FTgk9ICgxIDw8IDIpLAkvKiBpcyBFRE1BIHNldCB1cCBmb3IgRkJTPyAqLwogCU1WX1BQX0ZMQUdfREVMQVlFRF9FSAk9ICgxIDw8IDMpLAkvKiBkZWxheWVkIGRldiBlcnIgaGFuZGxpbmcgKi8KKwlNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kgPSAoMSA8PCA0KSwJLyogaWdub3JlIGluaXRpYWwgQVRBX0RSRFkgKi8KIH07CiAKICNkZWZpbmUgSVNfR0VOX0koaHByaXYpICgoaHByaXYpLT5ocF9mbGFncyAmIE1WX0hQX0dFTl9JKQpAQCAtNDMzLDYgKzQ5MiwxOCBAQAogCV9fbGUzMgkJCXJlc2VydmVkOwogfTsKIAorLyoKKyAqIFdlIGtlZXAgYSBsb2NhbCBjYWNoZSBvZiBhIGZldyBmcmVxdWVudGx5IGFjY2Vzc2VkIHBvcnQKKyAqIHJlZ2lzdGVycyBoZXJlLCB0byBhdm9pZCBoYXZpbmcgdG8gcmVhZCB0aGVtICh2ZXJ5IHNsb3cpCisgKiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIEVETUEgYW5kIG5vbi1FRE1BIG1vZGVzLgorICovCitzdHJ1Y3QgbXZfY2FjaGVkX3JlZ3MgeworCXUzMgkJCWZpc2NmZzsKKwl1MzIJCQlsdG1vZGU7CisJdTMyCQkJaGFsdGNvbmQ7CisJdTMyCQkJdW5rbm93bl9yc3ZkOworfTsKKwogc3RydWN0IG12X3BvcnRfcHJpdiB7CiAJc3RydWN0IG12X2NycWIJCSpjcnFiOwogCWRtYV9hZGRyX3QJCWNycWJfZG1hOwpAQCAtNDQ1LDYgKzUxNiw3IEBACiAJdW5zaWduZWQgaW50CQlyZXNwX2lkeDsKIAogCXUzMgkJCXBwX2ZsYWdzOworCXN0cnVjdCBtdl9jYWNoZWRfcmVncwljYWNoZWQ7CiAJdW5zaWduZWQgaW50CQlkZWxheWVkX2VoX3BtcF9tYXA7CiB9OwogCkBAIC01MzUsNyArNjA3LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgaW50IHBvcnRfbm8pOwogc3RhdGljIGludCBtdl9zdG9wX2VkbWEoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IG12X3N0b3BfZWRtYV9lbmdpbmUodm9pZCBfX2lvbWVtICpwb3J0X21taW8pOwotc3RhdGljIHZvaWQgbXZfZWRtYV9jZmcoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHdhbnRfbmNxKTsKK3N0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSwgaW50IHdhbnRfZWRtYSk7CiAKIHN0YXRpYyB2b2lkIG12X3BtcF9zZWxlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHBtcCk7CiBzdGF0aWMgaW50IG12X3BtcF9oYXJkcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzLApAQCAtNTQ2LDYgKzYxOCwxNCBAQAogc3RhdGljIHZvaWQgbXZfcHJvY2Vzc19jcnBiX2VudHJpZXMoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCQkJc3RydWN0IG12X3BvcnRfcHJpdiAqcHApOwogCitzdGF0aWMgdm9pZCBtdl9zZmZfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCBtdl9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdm9pZCBtdl9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB2b2lkIG12X2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB1OCAgIG12X2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyB1OCBtdl9zZmZfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCiAvKiAuc2dfdGFibGVzaXplIGlzIChNVl9NQVhfU0dfQ1QgLyAyKSBpbiB0aGUgc3RydWN0dXJlcyBiZWxvdwogICogYmVjYXVzZSB3ZSBoYXZlIHRvIGFsbG93IHJvb20gZm9yIHdvcnN0IGNhc2Ugc3BsaXR0aW5nIG9mCiAgKiBQUkRzIGZvciA2NEsgYm91bmRhcmllcyBpbiBtdl9maWxsX3NnKCkuCkBAIC01NjYsNiArNjQ2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtdjVfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKIAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKKwogCS5xY19kZWZlcgkJPSBtdl9xY19kZWZlciwKIAkucWNfcHJlcAkJPSBtdl9xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBtdl9xY19pc3N1ZSwKQEAgLTU5Myw2ICs2NzUsMTQgQEAKIAkucG1wX3NvZnRyZXNldAkJPSBtdl9zb2Z0cmVzZXQsCiAJLnNvZnRyZXNldAkJPSBtdl9zb2Z0cmVzZXQsCiAJLmVycm9yX2hhbmRsZXIJCT0gbXZfcG1wX2Vycm9yX2hhbmRsZXIsCisKKwkuc2ZmX2NoZWNrX3N0YXR1cwk9IG12X3NmZl9jaGVja19zdGF0dXMsCisJLnNmZl9pcnFfY2xlYXIJCT0gbXZfc2ZmX2lycV9jbGVhciwKKwkuY2hlY2tfYXRhcGlfZG1hCT0gbXZfY2hlY2tfYXRhcGlfZG1hLAorCS5ibWRtYV9zZXR1cAkJPSBtdl9ibWRtYV9zZXR1cCwKKwkuYm1kbWFfc3RhcnQJCT0gbXZfYm1kbWFfc3RhcnQsCisJLmJtZG1hX3N0b3AJCT0gbXZfYm1kbWFfc3RvcCwKKwkuYm1kbWFfc3RhdHVzCQk9IG12X2JtZG1hX3N0YXR1cywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtdl9paWVfb3BzID0gewpAQCAtNjAzLDUzICs2OTMsNDkgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIG12X3BvcnRfaW5mb1tdID0gewogCXsgIC8qIGNoaXBfNTA0eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY1X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNTA4eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lfRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY1X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNTA4MCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfRkxBR19EVUFMX0hDLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lfRkxBR1MgfCBNVl9GTEFHX0RVQUxfSEMsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXY1X29wcywKIAl9LAogCXsgIC8qIGNoaXBfNjA0eCAqLwotCQkuZmxhZ3MJCT0gTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19BQ1BJX1NBVEEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRLAorCQkuZmxhZ3MJCT0gTVZfR0VOX0lJX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12Nl9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzYwOHggKi8KLQkJLmZsYWdzCQk9IE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MgfAotCQkJCSAgQVRBX0ZMQUdfUE1QIHwgQVRBX0ZMQUdfQUNQSV9TQVRBIHwKLQkJCQkgIEFUQV9GTEFHX05DUSB8IE1WX0ZMQUdfRFVBTF9IQywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSV9GTEFHUyB8IE1WX0ZMQUdfRFVBTF9IQywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZtdjZfb3BzLAogCX0sCiAJeyAgLyogY2hpcF82MDQyICovCi0JCS5mbGFncwkJPSBNVl9HRU5JSUVfRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlFX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12X2lpZV9vcHMsCiAJfSwKIAl7ICAvKiBjaGlwXzcwNDIgKi8KLQkJLmZsYWdzCQk9IE1WX0dFTklJRV9GTEFHUywKKwkJLmZsYWdzCQk9IE1WX0dFTl9JSUVfRkxBR1MsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmbXZfaWllX29wcywKIAl9LAogCXsgIC8qIGNoaXBfc29jICovCi0JCS5mbGFncwkJPSBNVl9HRU5JSUVfRkxBR1MsCisJCS5mbGFncwkJPSBNVl9HRU5fSUlFX0ZMQUdTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJm12X2lpZV9vcHMsCkBAIC03OTQsNiArODgwLDQ0IEBACiAJcmV0dXJuICgocG9ydF9mbGFncyAmIE1WX0ZMQUdfRFVBTF9IQykgPyAyIDogMSk7CiB9CiAKKy8qKgorICogICAgICBtdl9zYXZlX2NhY2hlZF9yZWdzIC0gKHJlLSlpbml0aWFsaXplIGNhY2hlZCBwb3J0IHJlZ2lzdGVycworICogICAgICBAYXA6IHRoZSBwb3J0IHdob3NlIHJlZ2lzdGVycyB3ZSBhcmUgY2FjaGluZworICoKKyAqCUluaXRpYWxpemUgdGhlIGxvY2FsIGNhY2hlIG9mIHBvcnQgcmVnaXN0ZXJzLAorICoJc28gdGhhdCByZWFkaW5nIHRoZW0gb3ZlciBhbmQgb3ZlciBhZ2FpbiBjYW4KKyAqCWJlIGF2b2lkZWQgb24gdGhlIGhvdHRlciBwYXRocyBvZiB0aGlzIGRyaXZlci4KKyAqCVRoaXMgc2F2ZXMgYSBmZXcgbWljcm9zZWNvbmRzIGVhY2ggdGltZSB3ZSBzd2l0Y2gKKyAqCXRvL2Zyb20gRURNQSBtb2RlIHRvIHBlcmZvcm0gKGVnLikgYSBkcml2ZSBjYWNoZSBmbHVzaC4KKyAqLworc3RhdGljIHZvaWQgbXZfc2F2ZV9jYWNoZWRfcmVncyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCisJcHAtPmNhY2hlZC5maXNjZmcgPSByZWFkbChwb3J0X21taW8gKyBGSVNDRkdfT0ZTKTsKKwlwcC0+Y2FjaGVkLmx0bW9kZSA9IHJlYWRsKHBvcnRfbW1pbyArIExUTU9ERV9PRlMpOworCXBwLT5jYWNoZWQuaGFsdGNvbmQgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUyk7CisJcHAtPmNhY2hlZC51bmtub3duX3JzdmQgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX1VOS05PV05fUlNWRF9PRlMpOworfQorCisvKioKKyAqICAgICAgbXZfd3JpdGVfY2FjaGVkX3JlZyAtIHdyaXRlIHRvIGEgY2FjaGVkIHBvcnQgcmVnaXN0ZXIKKyAqICAgICAgQGFkZHI6IGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKiAgICAgIEBvbGQ6IHBvaW50ZXIgdG8gY2FjaGVkIHZhbHVlIG9mIHRoZSByZWdpc3RlcgorICogICAgICBAbmV3OiBuZXcgdmFsdWUgZm9yIHRoZSByZWdpc3RlcgorICoKKyAqCVdyaXRlIGEgbmV3IHZhbHVlIHRvIGEgY2FjaGVkIHJlZ2lzdGVyLAorICoJYnV0IG9ubHkgaWYgdGhlIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIGJlZm9yZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG12X3dyaXRlX2NhY2hlZF9yZWcodm9pZCBfX2lvbWVtICphZGRyLCB1MzIgKm9sZCwgdTMyIG5ldykKK3sKKwlpZiAobmV3ICE9ICpvbGQpIHsKKwkJKm9sZCA9IG5ldzsKKwkJd3JpdGVsKG5ldywgYWRkcik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtdl9zZXRfZWRtYV9wdHJzKHZvaWQgX19pb21lbSAqcG9ydF9tbWlvLAogCQkJICAgICBzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiwKIAkJCSAgICAgc3RydWN0IG12X3BvcnRfcHJpdiAqcHApCkBAIC04MjUsNiArOTQ5LDIzIEBACiAJCSBwb3J0X21taW8gKyBFRE1BX1JTUF9RX09VVF9QVFJfT0ZTKTsKIH0KIAorc3RhdGljIHZvaWQgbXZfd3JpdGVfbWFpbl9pcnFfbWFzayh1MzIgbWFzaywgc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYpCit7CisJLyoKKwkgKiBXaGVuIHdyaXRpbmcgdG8gdGhlIG1haW5faXJxX21hc2sgaW4gaGFyZHdhcmUsCisJICogd2UgbXVzdCBlbnN1cmUgZXhjbHVzaXZpdHkgYmV0d2VlbiB0aGUgaW50ZXJydXB0IGNvYWxlc2NpbmcgYml0cworCSAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpbmRpdmlkdWFsIHBvcnQgRE9ORV9JUlEgYml0cy4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIHJlZ2lzdGVyIGlzIHJlYWxseSBhbiAiSVJRIGVuYWJsZSIgcmVnaXN0ZXIsCisJICogbm90IGFuICJJUlEgbWFzayIgcmVnaXN0ZXIgYXMgTWFydmVsbCdzIG5hbWluZyBtaWdodCBzdWdnZXN0LgorCSAqLworCWlmIChtYXNrICYgKEFMTF9QT1JUU19DT0FMX0RPTkUgfCBQT1JUU18wXzNfQ09BTF9ET05FKSkKKwkJbWFzayAmPSB+RE9ORV9JUlFfMF8zOworCWlmIChtYXNrICYgKEFMTF9QT1JUU19DT0FMX0RPTkUgfCBQT1JUU180XzdfQ09BTF9ET05FKSkKKwkJbWFzayAmPSB+RE9ORV9JUlFfNF83OworCXdyaXRlbGZsKG1hc2ssIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworfQorCiBzdGF0aWMgdm9pZCBtdl9zZXRfbWFpbl9pcnFfbWFzayhzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsCiAJCQkJIHUzMiBkaXNhYmxlX2JpdHMsIHUzMiBlbmFibGVfYml0cykKIHsKQEAgLTgzNSw3ICs5NzYsNyBAQAogCW5ld19tYXNrID0gKG9sZF9tYXNrICYgfmRpc2FibGVfYml0cykgfCBlbmFibGVfYml0czsKIAlpZiAobmV3X21hc2sgIT0gb2xkX21hc2spIHsKIAkJaHByaXYtPm1haW5faXJxX21hc2sgPSBuZXdfbWFzazsKLQkJd3JpdGVsZmwobmV3X21hc2ssIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworCQltdl93cml0ZV9tYWluX2lycV9tYXNrKG5ld19tYXNrLCBocHJpdik7CiAJfQogfQogCkBAIC04NTIsOCArOTkzLDk0IEBACiAJbXZfc2V0X21haW5faXJxX21hc2soYXAtPmhvc3QsIGRpc2FibGVfYml0cywgZW5hYmxlX2JpdHMpOwogfQogCitzdGF0aWMgdm9pZCBtdl9jbGVhcl9hbmRfZW5hYmxlX3BvcnRfaXJxcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCQkgIHZvaWQgX19pb21lbSAqcG9ydF9tbWlvLAorCQkJCQkgIHVuc2lnbmVkIGludCBwb3J0X2lycXMpCit7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCBoYXJkcG9ydCA9IG12X2hhcmRwb3J0X2Zyb21fcG9ydChhcC0+cG9ydF9ubyk7CisJdm9pZCBfX2lvbWVtICpoY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQoCisJCQkJbXZfaG9zdF9iYXNlKGFwLT5ob3N0KSwgYXAtPnBvcnRfbm8pOworCXUzMiBoY19pcnFfY2F1c2U7CisKKwkvKiBjbGVhciBFRE1BIGV2ZW50IGluZGljYXRvcnMsIGlmIGFueSAqLworCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfRVJSX0lSUV9DQVVTRV9PRlMpOworCisJLyogY2xlYXIgcGVuZGluZyBpcnEgZXZlbnRzICovCisJaGNfaXJxX2NhdXNlID0gfigoREVWX0lSUSB8IERNQV9JUlEpIDw8IGhhcmRwb3J0KTsKKwl3cml0ZWxmbChoY19pcnFfY2F1c2UsIGhjX21taW8gKyBIQ19JUlFfQ0FVU0VfT0ZTKTsKKworCS8qIGNsZWFyIEZJUyBJUlEgQ2F1c2UgKi8KKwlpZiAoSVNfR0VOX0lJRShocHJpdikpCisJCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIFNBVEFfRklTX0lSUV9DQVVTRV9PRlMpOworCisJbXZfZW5hYmxlX3BvcnRfaXJxcyhhcCwgcG9ydF9pcnFzKTsKK30KKworc3RhdGljIHZvaWQgbXZfc2V0X2lycV9jb2FsZXNjaW5nKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKKwkJCQkgIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IHVzZWNzKQoreworCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlLCAqaGNfbW1pbzsKKwl1MzIgY29hbF9lbmFibGUgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNsa3MsIGlzX2R1YWxfaGMgPSBocHJpdi0+bl9wb3J0cyA+IE1WX1BPUlRTX1BFUl9IQzsKKwljb25zdCB1MzIgY29hbF9kaXNhYmxlID0gUE9SVFNfMF8zX0NPQUxfRE9ORSB8IFBPUlRTXzRfN19DT0FMX0RPTkUgfAorCQkJCQkJCUFMTF9QT1JUU19DT0FMX0RPTkU7CisKKwkvKiBEaXNhYmxlIElSUSBjb2FsZXNjaW5nIGlmIGVpdGhlciB0aHJlc2hvbGQgaXMgemVybyAqLworCWlmICghdXNlY3MgfHwgIWNvdW50KSB7CisJCWNsa3MgPSBjb3VudCA9IDA7CisJfSBlbHNlIHsKKwkJLyogUmVzcGVjdCBtYXhpbXVtIGxpbWl0cyBvZiB0aGUgaGFyZHdhcmUgKi8KKwkJY2xrcyA9IHVzZWNzICogQ09BTF9DTE9DS1NfUEVSX1VTRUM7CisJCWlmIChjbGtzID4gTUFYX0NPQUxfVElNRV9USFJFU0hPTEQpCisJCQljbGtzID0gTUFYX0NPQUxfVElNRV9USFJFU0hPTEQ7CisJCWlmIChjb3VudCA+IE1BWF9DT0FMX0lPX0NPVU5UKQorCQkJY291bnQgPSBNQVhfQ09BTF9JT19DT1VOVDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCW12X3NldF9tYWluX2lycV9tYXNrKGhvc3QsIGNvYWxfZGlzYWJsZSwgMCk7CisKKwlpZiAoaXNfZHVhbF9oYyAmJiAhSVNfR0VOX0koaHByaXYpKSB7CisJCS8qCisJCSAqIEdFTl9JSS9HRU5fSUlFIHdpdGggZHVhbCBob3N0IGNvbnRyb2xsZXJzOgorCQkgKiBvbmUgc2V0IG9mIGdsb2JhbCB0aHJlc2hvbGRzIGZvciB0aGUgZW50aXJlIGNoaXAuCisJCSAqLworCQl3cml0ZWwoY2xrcywgIG1taW8gKyBNVl9JUlFfQ09BTF9USU1FX1RIUkVTSE9MRCk7CisJCXdyaXRlbChjb3VudCwgbW1pbyArIE1WX0lSUV9DT0FMX0lPX1RIUkVTSE9MRCk7CisJCS8qIGNsZWFyIGxlZnRvdmVyIGNvYWwgSVJRIGJpdCAqLworCQl3cml0ZWwofkFMTF9QT1JUU19DT0FMX0lSUSwgbW1pbyArIE1WX0lSUV9DT0FMX0NBVVNFKTsKKwkJaWYgKGNvdW50KQorCQkJY29hbF9lbmFibGUgPSBBTExfUE9SVFNfQ09BTF9ET05FOworCQljbGtzID0gY291bnQgPSAwOyAvKiBmb3JjZSBjbGVhcmluZyBvZiByZWd1bGFyIHJlZ3MgYmVsb3cgKi8KKwl9CisKKwkvKgorCSAqIEFsbCBjaGlwczogaW5kZXBlbmRlbnQgdGhyZXNob2xkcyBmb3IgZWFjaCBIQyBvbiB0aGUgY2hpcC4KKwkgKi8KKwloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobW1pbywgMCk7CisJd3JpdGVsKGNsa3MsICBoY19tbWlvICsgSENfSVJRX0NPQUxfVElNRV9USFJFU0hPTERfT0ZTKTsKKwl3cml0ZWwoY291bnQsIGhjX21taW8gKyBIQ19JUlFfQ09BTF9JT19USFJFU0hPTERfT0ZTKTsKKwl3cml0ZWwofkhDX0NPQUxfSVJRLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7CisJaWYgKGNvdW50KQorCQljb2FsX2VuYWJsZSB8PSBQT1JUU18wXzNfQ09BTF9ET05FOworCWlmIChpc19kdWFsX2hjKSB7CisJCWhjX21taW8gPSBtdl9oY19iYXNlX2Zyb21fcG9ydChtbWlvLCBNVl9QT1JUU19QRVJfSEMpOworCQl3cml0ZWwoY2xrcywgIGhjX21taW8gKyBIQ19JUlFfQ09BTF9USU1FX1RIUkVTSE9MRF9PRlMpOworCQl3cml0ZWwoY291bnQsIGhjX21taW8gKyBIQ19JUlFfQ09BTF9JT19USFJFU0hPTERfT0ZTKTsKKwkJd3JpdGVsKH5IQ19DT0FMX0lSUSwgaGNfbW1pbyArIEhDX0lSUV9DQVVTRV9PRlMpOworCQlpZiAoY291bnQpCisJCQljb2FsX2VuYWJsZSB8PSBQT1JUU180XzdfQ09BTF9ET05FOworCX0KKworCW12X3NldF9tYWluX2lycV9tYXNrKGhvc3QsIDAsIGNvYWxfZW5hYmxlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Cit9CisKIC8qKgotICogICAgICBtdl9zdGFydF9kbWEgLSBFbmFibGUgZURNQSBlbmdpbmUKKyAqICAgICAgbXZfc3RhcnRfZWRtYSAtIEVuYWJsZSBlRE1BIGVuZ2luZQogICogICAgICBAYmFzZTogcG9ydCBiYXNlIGFkZHJlc3MKICAqICAgICAgQHBwOiBwb3J0IHByaXZhdGUgZGF0YQogICoKQEAgLTg2Myw3ICsxMDkwLDcgQEAKICAqICAgICAgTE9DS0lORzoKICAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgogICovCi1zdGF0aWMgdm9pZCBtdl9zdGFydF9kbWEoc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCBfX2lvbWVtICpwb3J0X21taW8sCitzdGF0aWMgdm9pZCBtdl9zdGFydF9lZG1hKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgX19pb21lbSAqcG9ydF9tbWlvLAogCQkJIHN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwLCB1OCBwcm90b2NvbCkKIHsKIAlpbnQgd2FudF9uY3EgPSAocHJvdG9jb2wgPT0gQVRBX1BST1RfTkNRKTsKQEAgLTg3NSwyNiArMTEwMiwxMSBAQAogCX0KIAlpZiAoIShwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0VETUFfRU4pKSB7CiAJCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQkJaW50IGhhcmRwb3J0ID0gbXZfaGFyZHBvcnRfZnJvbV9wb3J0KGFwLT5wb3J0X25vKTsKLQkJdm9pZCBfX2lvbWVtICpoY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQoCi0JCQkJCW12X2hvc3RfYmFzZShhcC0+aG9zdCksIGFwLT5wb3J0X25vKTsKLQkJdTMyIGhjX2lycV9jYXVzZTsKIAotCQkvKiBjbGVhciBFRE1BIGV2ZW50IGluZGljYXRvcnMsIGlmIGFueSAqLwotCQl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBFRE1BX0VSUl9JUlFfQ0FVU0VfT0ZTKTsKLQotCQkvKiBjbGVhciBwZW5kaW5nIGlycSBldmVudHMgKi8KLQkJaGNfaXJxX2NhdXNlID0gfigoREVWX0lSUSB8IERNQV9JUlEpIDw8IGhhcmRwb3J0KTsKLQkJd3JpdGVsZmwoaGNfaXJxX2NhdXNlLCBoY19tbWlvICsgSENfSVJRX0NBVVNFX09GUyk7Ci0KLQkJbXZfZWRtYV9jZmcoYXAsIHdhbnRfbmNxKTsKLQotCQkvKiBjbGVhciBGSVMgSVJRIENhdXNlICovCi0JCWlmIChJU19HRU5fSUlFKGhwcml2KSkKLQkJCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIFNBVEFfRklTX0lSUV9DQVVTRV9PRlMpOworCQltdl9lZG1hX2NmZyhhcCwgd2FudF9uY3EsIDEpOwogCiAJCW12X3NldF9lZG1hX3B0cnMocG9ydF9tbWlvLCBocHJpdiwgcHApOwotCQltdl9lbmFibGVfcG9ydF9pcnFzKGFwLCBET05FX0lSUXxFUlJfSVJRKTsKKwkJbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoYXAsIHBvcnRfbW1pbywgRE9ORV9JUlF8RVJSX0lSUSk7CiAKIAkJd3JpdGVsZmwoRURNQV9FTiwgcG9ydF9tbWlvICsgRURNQV9DTURfT0ZTKTsKIAkJcHAtPnBwX2ZsYWdzIHw9IE1WX1BQX0ZMQUdfRURNQV9FTjsKQEAgLTk1Miw2ICsxMTY0LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOwogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyID0gMDsKIAogCWlmICghKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikpCiAJCXJldHVybiAwOwpAQCAtOTU5LDkgKzExNzIsMTAgQEAKIAltdl93YWl0X2Zvcl9lZG1hX2VtcHR5X2lkbGUoYXApOwogCWlmIChtdl9zdG9wX2VkbWFfZW5naW5lKHBvcnRfbW1pbykpIHsKIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwgIlVuYWJsZSB0byBzdG9wIGVETUFcbiIpOwotCQlyZXR1cm4gLUVJTzsKKwkJZXJyID0gLUVJTzsKIAl9Ci0JcmV0dXJuIDA7CisJbXZfZWRtYV9jZmcoYXAsIDAsIDApOworCXJldHVybiBlcnI7CiB9CiAKICNpZmRlZiBBVEFfREVCVUcKQEAgLTExMzAsMzUgKzEzNDQsMzMgQEAKIAlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CiB9CiAKLXN0YXRpYyB2b2lkIG12X2NvbmZpZ19mYnModm9pZCBfX2lvbWVtICpwb3J0X21taW8sIGludCB3YW50X25jcSwgaW50IHdhbnRfZmJzKQorc3RhdGljIHZvaWQgbXZfY29uZmlnX2ZicyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EsIGludCB3YW50X2ZicykKIHsKLQl1MzIgbmV3X2Zpc2NmZywgb2xkX2Zpc2NmZzsKLQl1MzIgbmV3X2x0bW9kZSwgb2xkX2x0bW9kZTsKLQl1MzIgbmV3X2hhbHRjb25kLCBvbGRfaGFsdGNvbmQ7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvOwogCi0Jb2xkX2Zpc2NmZyAgID0gcmVhZGwocG9ydF9tbWlvICsgRklTQ0ZHX09GUyk7Ci0Jb2xkX2x0bW9kZSAgID0gcmVhZGwocG9ydF9tbWlvICsgTFRNT0RFX09GUyk7Ci0Jb2xkX2hhbHRjb25kID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9IQUxUQ09ORF9PRlMpOworCXUzMiBmaXNjZmcsICAgKm9sZF9maXNjZmcgICA9ICZwcC0+Y2FjaGVkLmZpc2NmZzsKKwl1MzIgbHRtb2RlLCAgICpvbGRfbHRtb2RlICAgPSAmcHAtPmNhY2hlZC5sdG1vZGU7CisJdTMyIGhhbHRjb25kLCAqb2xkX2hhbHRjb25kID0gJnBwLT5jYWNoZWQuaGFsdGNvbmQ7CiAKLQluZXdfZmlzY2ZnICAgPSBvbGRfZmlzY2ZnICYgfihGSVNDRkdfU0lOR0xFX1NZTkMgfCBGSVNDRkdfV0FJVF9ERVZfRVJSKTsKLQluZXdfbHRtb2RlICAgPSBvbGRfbHRtb2RlICYgfkxUTU9ERV9CSVQ4OwotCW5ld19oYWx0Y29uZCA9IG9sZF9oYWx0Y29uZCB8IEVETUFfRVJSX0RFVjsKKwlsdG1vZGUgICA9ICpvbGRfbHRtb2RlICYgfkxUTU9ERV9CSVQ4OworCWhhbHRjb25kID0gKm9sZF9oYWx0Y29uZCB8IEVETUFfRVJSX0RFVjsKIAogCWlmICh3YW50X2ZicykgewotCQluZXdfZmlzY2ZnID0gb2xkX2Zpc2NmZyB8IEZJU0NGR19TSU5HTEVfU1lOQzsKLQkJbmV3X2x0bW9kZSA9IG9sZF9sdG1vZGUgfCBMVE1PREVfQklUODsKKwkJZmlzY2ZnID0gKm9sZF9maXNjZmcgfCBGSVNDRkdfU0lOR0xFX1NZTkM7CisJCWx0bW9kZSA9ICpvbGRfbHRtb2RlIHwgTFRNT0RFX0JJVDg7CiAJCWlmICh3YW50X25jcSkKLQkJCW5ld19oYWx0Y29uZCAmPSB+RURNQV9FUlJfREVWOworCQkJaGFsdGNvbmQgJj0gfkVETUFfRVJSX0RFVjsKIAkJZWxzZQotCQkJbmV3X2Zpc2NmZyB8PSAgRklTQ0ZHX1dBSVRfREVWX0VSUjsKKwkJCWZpc2NmZyB8PSAgRklTQ0ZHX1dBSVRfREVWX0VSUjsKKwl9IGVsc2UgeworCQlmaXNjZmcgPSAqb2xkX2Zpc2NmZyAmIH4oRklTQ0ZHX1NJTkdMRV9TWU5DIHwgRklTQ0ZHX1dBSVRfREVWX0VSUik7CiAJfQogCi0JaWYgKG5ld19maXNjZmcgIT0gb2xkX2Zpc2NmZykKLQkJd3JpdGVsZmwobmV3X2Zpc2NmZywgcG9ydF9tbWlvICsgRklTQ0ZHX09GUyk7Ci0JaWYgKG5ld19sdG1vZGUgIT0gb2xkX2x0bW9kZSkKLQkJd3JpdGVsZmwobmV3X2x0bW9kZSwgcG9ydF9tbWlvICsgTFRNT0RFX09GUyk7Ci0JaWYgKG5ld19oYWx0Y29uZCAhPSBvbGRfaGFsdGNvbmQpCi0JCXdyaXRlbGZsKG5ld19oYWx0Y29uZCwgcG9ydF9tbWlvICsgRURNQV9IQUxUQ09ORF9PRlMpOworCXBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCW12X3dyaXRlX2NhY2hlZF9yZWcocG9ydF9tbWlvICsgRklTQ0ZHX09GUywgb2xkX2Zpc2NmZywgZmlzY2ZnKTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKHBvcnRfbW1pbyArIExUTU9ERV9PRlMsIG9sZF9sdG1vZGUsIGx0bW9kZSk7CisJbXZfd3JpdGVfY2FjaGVkX3JlZyhwb3J0X21taW8gKyBFRE1BX0hBTFRDT05EX09GUywgb2xkX2hhbHRjb25kLCBoYWx0Y29uZCk7CiB9CiAKIHN0YXRpYyB2b2lkIG12XzYweDFfZXJyYXRhX3NhdGEyNShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EpCkBAIC0xMTc2LDcgKzEzODgsODYgQEAKIAkJd3JpdGVsKG5ldywgaHByaXYtPmJhc2UgKyBNVl9HUElPX1BPUlRfQ1RMX09GUyk7CiB9CiAKLXN0YXRpYyB2b2lkIG12X2VkbWFfY2ZnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3YW50X25jcSkKKy8qKgorICoJbXZfYm1kbWFfZW5hYmxlIC0gc2V0IGEgbWFnaWMgYml0IG9uIEdFTl9JSUUgdG8gYWxsb3cgYm1kbWEKKyAqCUBhcDogUG9ydCBiZWluZyBpbml0aWFsaXplZAorICoKKyAqCVRoZXJlIGFyZSB0d28gRE1BIG1vZGVzIG9uIHRoZXNlIGNoaXBzOiAgYmFzaWMgRE1BLCBhbmQgRURNQS4KKyAqCisgKglCaXQtMCBvZiB0aGUgIkVETUEgUkVTRVJWRUQiIHJlZ2lzdGVyIGVuYWJsZXMvZGlzYWJsZXMgdXNlCisgKglvZiBiYXNpYyBETUEgb24gdGhlIEdFTl9JSUUgdmVyc2lvbnMgb2YgdGhlIGNoaXBzLgorICoKKyAqCVRoaXMgYml0IHN1cnZpdmVzIEVETUEgcmVzZXRzLCBhbmQgbXVzdCBiZSBzZXQgZm9yIGJhc2ljIERNQQorICoJdG8gZnVuY3Rpb24sIGFuZCBzaG91bGQgYmUgY2xlYXJlZCB3aGVuIEVETUEgaXMgYWN0aXZlLgorICovCitzdGF0aWMgdm9pZCBtdl9ibWRtYV9lbmFibGVfaWllKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCBlbmFibGVfYm1kbWEpCit7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXUzMiBuZXcsICpvbGQgPSAmcHAtPmNhY2hlZC51bmtub3duX3JzdmQ7CisKKwlpZiAoZW5hYmxlX2JtZG1hKQorCQluZXcgPSAqb2xkIHwgMTsKKwllbHNlCisJCW5ldyA9ICpvbGQgJiB+MTsKKwltdl93cml0ZV9jYWNoZWRfcmVnKG12X2FwX2Jhc2UoYXApICsgRURNQV9VTktOT1dOX1JTVkRfT0ZTLCBvbGQsIG5ldyk7Cit9CisKKy8qCisgKiBTT0MgY2hpcHMgaGF2ZSBhbiBpc3N1ZSB3aGVyZWJ5IHRoZSBIREQgTEVEcyBkb24ndCBhbHdheXMgYmxpbmsKKyAqIGR1cmluZyBJL08gd2hlbiBOQ1EgaXMgZW5hYmxlZC4gRW5hYmxpbmcgYSBzcGVjaWFsICJMRUQgYmxpbmsiIG1vZGUKKyAqIG9mIHRoZSBTT0MgdGFrZXMgY2FyZSBvZiBpdCwgZ2VuZXJhdGluZyBhIHN0ZWFkeSBibGluayByYXRlIHdoZW4KKyAqIGFueSBkcml2ZSBvbiB0aGUgY2hpcCBpcyBhY3RpdmUuCisgKgorICogVW5mb3J0dW5hdGVseSwgdGhlIGJsaW5rIG1vZGUgaXMgYSBnbG9iYWwgaGFyZHdhcmUgc2V0dGluZyBmb3IgdGhlIFNPQywKKyAqIHNvIHdlIG11c3QgdXNlIGl0IHdoZW5ldmVyIGF0IGxlYXN0IG9uZSBwb3J0IG9uIHRoZSBTT0MgaGFzIE5DUSBlbmFibGVkLgorICoKKyAqIFdlIHR1cm4gIkxFRCBibGluayIgb2ZmIHdoZW4gTkNRIGlzIG5vdCBpbiB1c2UgYW55d2hlcmUsIGJlY2F1c2UgdGhlIG5vcm1hbAorICogTEVEIG9wZXJhdGlvbiB3b3JrcyB0aGVuLCBhbmQgcHJvdmlkZXMgYmV0dGVyIChtb3JlIGFjY3VyYXRlKSBmZWVkYmFjay4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBhbiBTT0MgbmV2ZXIgaGFzIG1vcmUgdGhhbiBvbmUgSEMgb25ib2FyZC4KKyAqLworc3RhdGljIHZvaWQgbXZfc29jX2xlZF9ibGlua19lbmFibGUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBhcC0+aG9zdDsKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmhjX21taW87CisJdTMyIGxlZF9jdHJsOworCisJaWYgKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX1FVSVJLX0xFRF9CTElOS19FTikKKwkJcmV0dXJuOworCWhwcml2LT5ocF9mbGFncyB8PSBNVl9IUF9RVUlSS19MRURfQkxJTktfRU47CisJaGNfbW1pbyA9IG12X2hjX2Jhc2VfZnJvbV9wb3J0KG12X2hvc3RfYmFzZShob3N0KSwgYXAtPnBvcnRfbm8pOworCWxlZF9jdHJsID0gcmVhZGwoaGNfbW1pbyArIFNPQ19MRURfQ1RSTF9PRlMpOworCXdyaXRlbChsZWRfY3RybCB8IFNPQ19MRURfQ1RSTF9CTElOSywgaGNfbW1pbyArIFNPQ19MRURfQ1RSTF9PRlMpOworfQorCitzdGF0aWMgdm9pZCBtdl9zb2NfbGVkX2JsaW5rX2Rpc2FibGUoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBhcC0+aG9zdDsKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmhjX21taW87CisJdTMyIGxlZF9jdHJsOworCXVuc2lnbmVkIGludCBwb3J0OworCisJaWYgKCEoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfUVVJUktfTEVEX0JMSU5LX0VOKSkKKwkJcmV0dXJuOworCisJLyogZGlzYWJsZSBsZWQtYmxpbmsgb25seSBpZiBubyBwb3J0cyBhcmUgdXNpbmcgTkNRICovCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhwcml2LT5uX3BvcnRzOyBwb3J0KyspIHsKKwkJc3RydWN0IGF0YV9wb3J0ICp0aGlzX2FwID0gaG9zdC0+cG9ydHNbcG9ydF07CisJCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwID0gdGhpc19hcC0+cHJpdmF0ZV9kYXRhOworCisJCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX05DUV9FTikKKwkJCXJldHVybjsKKwl9CisKKwlocHJpdi0+aHBfZmxhZ3MgJj0gfk1WX0hQX1FVSVJLX0xFRF9CTElOS19FTjsKKwloY19tbWlvID0gbXZfaGNfYmFzZV9mcm9tX3BvcnQobXZfaG9zdF9iYXNlKGhvc3QpLCBhcC0+cG9ydF9ubyk7CisJbGVkX2N0cmwgPSByZWFkbChoY19tbWlvICsgU09DX0xFRF9DVFJMX09GUyk7CisJd3JpdGVsKGxlZF9jdHJsICYgflNPQ19MRURfQ1RSTF9CTElOSywgaGNfbW1pbyArIFNPQ19MRURfQ1RSTF9PRlMpOworfQorCitzdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgd2FudF9uY3EsIGludCB3YW50X2VkbWEpCiB7CiAJdTMyIGNmZzsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCAgICA9IGFwLT5wcml2YXRlX2RhdGE7CkBAIC0xMTg1LDcgKzE0NzYsOCBAQAogCiAJLyogc2V0IHVwIG5vbi1OQ1EgRURNQSBjb25maWd1cmF0aW9uICovCiAJY2ZnID0gRURNQV9DRkdfUV9ERVBUSDsJCS8qIGFsd2F5cyAweDFmIGZvciAqYWxsKiBjaGlwcyAqLwotCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19GQlNfRU47CisJcHAtPnBwX2ZsYWdzICY9CisJICB+KE1WX1BQX0ZMQUdfRkJTX0VOIHwgTVZfUFBfRkxBR19OQ1FfRU4gfCBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kpOwogCiAJaWYgKElTX0dFTl9JKGhwcml2KSkKIAkJY2ZnIHw9ICgxIDw8IDgpOwkvKiBlbmFiIGNvbmZpZyBidXJzdCBzaXplIG1hc2sgKi8KQEAgLTEyMDYsNyArMTQ5OCw3IEBACiAJCSAqLwogCQl3YW50X2ZicyAmPSB3YW50X25jcTsKIAotCQltdl9jb25maWdfZmJzKHBvcnRfbW1pbywgd2FudF9uY3EsIHdhbnRfZmJzKTsKKwkJbXZfY29uZmlnX2ZicyhhcCwgd2FudF9uY3EsIHdhbnRfZmJzKTsKIAogCQlpZiAod2FudF9mYnMpIHsKIAkJCXBwLT5wcF9mbGFncyB8PSBNVl9QUF9GTEFHX0ZCU19FTjsKQEAgLTEyMTQsMTggKzE1MDYsMjcgQEAKIAkJfQogCiAJCWNmZyB8PSAoMSA8PCAyMyk7CS8qIGRvIG5vdCBtYXNrIFBNIGZpZWxkIGluIHJ4J2QgRklTICovCi0JCWNmZyB8PSAoMSA8PCAyMik7CS8qIGVuYWIgNC1lbnRyeSBob3N0IHF1ZXVlIGNhY2hlICovCi0JCWlmICghSVNfU09DKGhwcml2KSkKLQkJCWNmZyB8PSAoMSA8PCAxOCk7CS8qIGVuYWIgZWFybHkgY29tcGxldGlvbiAqLworCQlpZiAod2FudF9lZG1hKSB7CisJCQljZmcgfD0gKDEgPDwgMjIpOyAvKiBlbmFiIDQtZW50cnkgaG9zdCBxdWV1ZSBjYWNoZSAqLworCQkJaWYgKCFJU19TT0MoaHByaXYpKQorCQkJCWNmZyB8PSAoMSA8PCAxOCk7IC8qIGVuYWIgZWFybHkgY29tcGxldGlvbiAqLworCQl9CiAJCWlmIChocHJpdi0+aHBfZmxhZ3MgJiBNVl9IUF9DVVRfVEhST1VHSCkKIAkJCWNmZyB8PSAoMSA8PCAxNyk7IC8qIGVuYWIgY3V0LXRocnUgKGRpcyBzdG9yJmZvcndyZCkgKi8KKwkJbXZfYm1kbWFfZW5hYmxlX2lpZShhcCwgIXdhbnRfZWRtYSk7CisKKwkJaWYgKElTX1NPQyhocHJpdikpIHsKKwkJCWlmICh3YW50X25jcSkKKwkJCQltdl9zb2NfbGVkX2JsaW5rX2VuYWJsZShhcCk7CisJCQllbHNlCisJCQkJbXZfc29jX2xlZF9ibGlua19kaXNhYmxlKGFwKTsKKwkJfQogCX0KIAogCWlmICh3YW50X25jcSkgewogCQljZmcgfD0gRURNQV9DRkdfTkNROwogCQlwcC0+cHBfZmxhZ3MgfD0gIE1WX1BQX0ZMQUdfTkNRX0VOOwotCX0gZWxzZQotCQlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfTkNRX0VOOworCX0KIAogCXdyaXRlbGZsKGNmZywgcG9ydF9tbWlvICsgRURNQV9DRkdfT0ZTKTsKIH0KQEAgLTEzMDksNiArMTYxMCw4IEBACiAJCQlwcC0+c2dfdGJsX2RtYVt0YWddID0gcHAtPnNnX3RibF9kbWFbMF07CiAJCX0KIAl9CisJbXZfc2F2ZV9jYWNoZWRfcmVncyhhcCk7CisJbXZfZWRtYV9jZmcoYXAsIDAsIDApOwogCXJldHVybiAwOwogCiBvdXRfcG9ydF9mcmVlX2RtYV9tZW06CkBAIC0xMzU3LDEyICsxNjYwLDEzIEBACiAJCQl1MzIgb2Zmc2V0ID0gYWRkciAmIDB4ZmZmZjsKIAkJCXUzMiBsZW4gPSBzZ19sZW47CiAKLQkJCWlmICgob2Zmc2V0ICsgc2dfbGVuID4gMHgxMDAwMCkpCisJCQlpZiAob2Zmc2V0ICsgbGVuID4gMHgxMDAwMCkKIAkJCQlsZW4gPSAweDEwMDAwIC0gb2Zmc2V0OwogCiAJCQltdl9zZy0+YWRkciA9IGNwdV90b19sZTMyKGFkZHIgJiAweGZmZmZmZmZmKTsKIAkJCW12X3NnLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoKGFkZHIgPj4gMTYpID4+IDE2KTsKIAkJCW12X3NnLT5mbGFnc19zaXplID0gY3B1X3RvX2xlMzIobGVuICYgMHhmZmZmKTsKKwkJCW12X3NnLT5yZXNlcnZlZCA9IDA7CiAKIAkJCXNnX2xlbiAtPSBsZW47CiAJCQlhZGRyICs9IGxlbjsKQEAgLTEzNzQsNiArMTY3OCw3IEBACiAKIAlpZiAobGlrZWx5KGxhc3Rfc2cpKQogCQlsYXN0X3NnLT5mbGFnc19zaXplIHw9IGNwdV90b19sZTMyKEVQUkRfRkxBR19FTkRfT0ZfVEJMKTsKKwltYigpOyAvKiBlbnN1cmUgZGF0YSBzdHJ1Y3R1cmUgaXMgdmlzaWJsZSB0byB0aGUgY2hpcHNldCAqLwogfQogCiBzdGF0aWMgdm9pZCBtdl9jcnFiX3BhY2tfY21kKF9fbGUxNiAqY21kdywgdTggZGF0YSwgdTggYWRkciwgdW5zaWduZWQgbGFzdCkKQEAgLTEzODQsNiArMTY4OSwxNDcgQEAKIH0KIAogLyoqCisgKgltdl9zZmZfaXJxX2NsZWFyIC0gQ2xlYXIgaGFyZHdhcmUgaW50ZXJydXB0IGFmdGVyIERNQS4KKyAqCUBhcDogUG9ydCBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVEEgdHJhbnNhY3Rpb24uCisgKgorICoJV2UgbmVlZCB0aGlzIG9ubHkgZm9yIEFUQVBJIGJtZG1hIHRyYW5zYWN0aW9ucywKKyAqCWFzIG90aGVyd2lzZSB3ZSBleHBlcmllbmNlIHNwdXJpb3VzIGludGVycnVwdHMKKyAqCWFmdGVyIGxpYmF0YS1zZmYgaGFuZGxlcyB0aGUgYm1kbWEgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgbXZfc2ZmX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCW12X2NsZWFyX2FuZF9lbmFibGVfcG9ydF9pcnFzKGFwLCBtdl9hcF9iYXNlKGFwKSwgRVJSX0lSUSk7Cit9CisKKy8qKgorICoJbXZfY2hlY2tfYXRhcGlfZG1hIC0gRmlsdGVyIEFUQVBJIGNtZHMgd2hpY2ggYXJlIHVuc3VpdGFibGUgZm9yIERNQS4KKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gY2hlY2sgZm9yIGNoaXBzZXQvRE1BIGNvbXBhdGliaWxpdHkuCisgKgorICoJVGhlIGJtZG1hIGVuZ2luZXMgY2Fubm90IGhhbmRsZSBzcGVjdWxhdGl2ZSBkYXRhIHNpemVzCisgKgkoYnl0ZWNvdW50IHVuZGVyL292ZXIgZmxvdykuICBTbyBvbmx5IGFsbG93IERNQSBmb3IKKyAqCWRhdGEgdHJhbnNmZXIgY29tbWFuZHMgd2l0aCBrbm93biBkYXRhIHNpemVzLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyBpbnQgbXZfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHFjLT5zY3NpY21kOworCisJaWYgKHNjbWQpIHsKKwkJc3dpdGNoIChzY21kLT5jbW5kWzBdKSB7CisJCWNhc2UgUkVBRF82OgorCQljYXNlIFJFQURfMTA6CisJCWNhc2UgUkVBRF8xMjoKKwkJY2FzZSBXUklURV82OgorCQljYXNlIFdSSVRFXzEwOgorCQljYXNlIFdSSVRFXzEyOgorCQljYXNlIEdQQ01EX1JFQURfQ0Q6CisJCWNhc2UgR1BDTURfU0VORF9EVkRfU1RSVUNUVVJFOgorCQljYXNlIEdQQ01EX1NFTkRfQ1VFX1NIRUVUOgorCQkJcmV0dXJuIDA7IC8qIERNQSBpcyBzYWZlICovCisJCX0KKwl9CisJcmV0dXJuIC1FT1BOT1RTVVBQOyAvKiB1c2UgUElPIGluc3RlYWQgKi8KK30KKworLyoqCisgKgltdl9ibWRtYV9zZXR1cCAtIFNldCB1cCBCTURNQSB0cmFuc2FjdGlvbgorICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBwcmVwYXJlIERNQSBmb3IuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCisJbXZfZmlsbF9zZyhxYyk7CisKKwkvKiBjbGVhciBhbGwgRE1BIGNtZCBiaXRzICovCisJd3JpdGVsKDAsIHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworCisJLyogbG9hZCBQUkQgdGFibGUgYWRkci4gKi8KKwl3cml0ZWwoKHBwLT5zZ190YmxfZG1hW3FjLT50YWddID4+IDE2KSA+PiAxNiwKKwkJcG9ydF9tbWlvICsgQk1ETUFfUFJEX0hJR0hfT0ZTKTsKKwl3cml0ZWxmbChwcC0+c2dfdGJsX2RtYVtxYy0+dGFnXSwKKwkJcG9ydF9tbWlvICsgQk1ETUFfUFJEX0xPV19PRlMpOworCisJLyogaXNzdWUgci93IGNvbW1hbmQgKi8KKwlhcC0+b3BzLT5zZmZfZXhlY19jb21tYW5kKGFwLCAmcWMtPnRmKTsKK30KKworLyoqCisgKgltdl9ibWRtYV9zdGFydCAtIFN0YXJ0IGEgQk1ETUEgdHJhbnNhY3Rpb24KKyAqCUBxYzogcXVldWVkIGNvbW1hbmQgdG8gc3RhcnQgRE1BIG9uLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyB2b2lkIG12X2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXVuc2lnbmVkIGludCBydyA9IChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOworCXUzMiBjbWQgPSAocncgPyAwIDogQVRBX0RNQV9XUikgfCBBVEFfRE1BX1NUQVJUOworCisJLyogc3RhcnQgaG9zdCBETUEgdHJhbnNhY3Rpb24gKi8KKwl3cml0ZWxmbChjbWQsIHBvcnRfbW1pbyArIEJNRE1BX0NNRF9PRlMpOworfQorCisvKioKKyAqCW12X2JtZG1hX3N0b3AgLSBTdG9wIEJNRE1BIHRyYW5zZmVyCisgKglAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHN0b3AgRE1BIG9uLgorICoKKyAqCUNsZWFycyB0aGUgQVRBX0RNQV9TVEFSVCBmbGFnIGluIHRoZSBibWRtYSBjb250cm9sIHJlZ2lzdGVyCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgbXZfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKGFwKTsKKwl1MzIgY21kOworCisJLyogY2xlYXIgc3RhcnQvc3RvcCBiaXQgKi8KKwljbWQgPSByZWFkbChwb3J0X21taW8gKyBCTURNQV9DTURfT0ZTKTsKKwljbWQgJj0gfkFUQV9ETUFfU1RBUlQ7CisJd3JpdGVsZmwoY21kLCBwb3J0X21taW8gKyBCTURNQV9DTURfT0ZTKTsKKworCS8qIG9uZS1QSU8tY3ljbGUgZ3VhcmFudGVlZCB3YWl0LCBwZXIgc3BlYywgZm9yIEhETUExOjAgdHJhbnNpdGlvbiAqLworCWF0YV9zZmZfZG1hX3BhdXNlKGFwKTsKK30KKworLyoqCisgKgltdl9ibWRtYV9zdGF0dXMgLSBSZWFkIEJNRE1BIHN0YXR1cworICoJQGFwOiBwb3J0IGZvciB3aGljaCB0byByZXRyaWV2ZSBETUEgc3RhdHVzLgorICoKKyAqCVJlYWQgYW5kIHJldHVybiBlcXVpdmFsZW50IG9mIHRoZSBzZmYgQk1ETUEgc3RhdHVzIHJlZ2lzdGVyLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3N0YXRpYyB1OCBtdl9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOworCXUzMiByZWcsIHN0YXR1czsKKworCS8qCisJICogT3RoZXIgYml0cyBhcmUgdmFsaWQgb25seSBpZiBBVEFfRE1BX0FDVElWRT09MCwKKwkgKiBhbmQgdGhlIEFUQV9ETUFfSU5UUiBiaXQgZG9lc24ndCBleGlzdC4KKwkgKi8KKwlyZWcgPSByZWFkbChwb3J0X21taW8gKyBCTURNQV9TVEFUVVNfT0ZTKTsKKwlpZiAocmVnICYgQVRBX0RNQV9BQ1RJVkUpCisJCXN0YXR1cyA9IEFUQV9ETUFfQUNUSVZFOworCWVsc2UKKwkJc3RhdHVzID0gKHJlZyAmIEFUQV9ETUFfRVJSKSB8IEFUQV9ETUFfSU5UUjsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqICAgICAgbXZfcWNfcHJlcCAtIEhvc3Qgc3BlY2lmaWMgY29tbWFuZCBwcmVwYXJhdGlvbi4KICAqICAgICAgQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBwcmVwYXJlCiAgKgpAQCAtMTU0NSw2ICsxOTkxLDEzMiBAQAogfQogCiAvKioKKyAqCW12X3NmZl9jaGVja19zdGF0dXMgLSBmZXRjaCBkZXZpY2Ugc3RhdHVzLCBpZiB2YWxpZAorICoJQGFwOiBBVEEgcG9ydCB0byBmZXRjaCBzdGF0dXMgZnJvbQorICoKKyAqCVdoZW4gdXNpbmcgY29tbWFuZCBpc3N1ZSB2aWEgbXZfcWNfaXNzdWVfZmlzKCksCisgKgl0aGUgaW5pdGlhbCBBVEFfQlVTWSBzdGF0ZSBkb2VzIG5vdCBzaG93IHVwIGluIHRoZQorICoJQVRBIHN0YXR1cyAoc2hhZG93KSByZWdpc3Rlci4gIFRoaXMgY2FuIGNvbmZ1c2UgbGliYXRhIQorICoKKyAqCVNvIHdlIGhhdmUgYSBob29rIGhlcmUgdG8gZmFrZSBBVEFfQlVTWSBmb3IgdGhhdCBzaXR1YXRpb24sCisgKgl1bnRpbCB0aGUgZmlyc3QgdGltZSBhIEJVU1ksIERSUSwgb3IgRVJSIGJpdCBpcyBzZWVuLgorICoKKyAqCVRoZSByZXN0IG9mIHRoZSB0aW1lLCBpdCBzaW1wbHkgcmV0dXJucyB0aGUgQVRBIHN0YXR1cyByZWdpc3Rlci4KKyAqLworc3RhdGljIHU4IG12X3NmZl9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl1OCBzdGF0ID0gaW9yZWFkOChhcC0+aW9hZGRyLnN0YXR1c19hZGRyKTsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZKSB7CisJCWlmIChzdGF0ICYgKEFUQV9CVVNZIHwgQVRBX0RSUSB8IEFUQV9FUlIpKQorCQkJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1k7CisJCWVsc2UKKwkJCXN0YXQgPSBBVEFfQlVTWTsKKwl9CisJcmV0dXJuIHN0YXQ7Cit9CisKKy8qKgorICoJbXZfc2VuZF9maXMgLSBTZW5kIGEgRklTLCB1c2luZyB0aGUgIlZlbmRvci1VbmlxdWUgRklTIiByZWdpc3RlcgorICoJQGZpczogZmlzIHRvIGJlIHNlbnQKKyAqCUBud29yZHM6IG51bWJlciBvZiAzMi1iaXQgd29yZHMgaW4gdGhlIGZpcworICovCitzdGF0aWMgdW5zaWduZWQgaW50IG12X3NlbmRfZmlzKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiAqZmlzLCBpbnQgbndvcmRzKQoreworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CisJdTMyIGlmY3RsLCBvbGRfaWZjdGwsIGlmc3RhdDsKKwlpbnQgaSwgdGltZW91dCA9IDIwMCwgZmluYWxfd29yZCA9IG53b3JkcyAtIDE7CisKKwkvKiBJbml0aWF0ZSBGSVMgdHJhbnNtaXNzaW9uIG1vZGUgKi8KKwlvbGRfaWZjdGwgPSByZWFkbChwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisJaWZjdGwgPSAweDEwMCB8IChvbGRfaWZjdGwgJiAweGYpOworCXdyaXRlbGZsKGlmY3RsLCBwb3J0X21taW8gKyBTQVRBX0lGQ1RMX09GUyk7CisKKwkvKiBTZW5kIGFsbCB3b3JkcyBvZiB0aGUgRklTIGV4Y2VwdCBmb3IgdGhlIGZpbmFsIHdvcmQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmluYWxfd29yZDsgKytpKQorCQl3cml0ZWwoZmlzW2ldLCBwb3J0X21taW8gKyBWRU5ET1JfVU5JUVVFX0ZJU19PRlMpOworCisJLyogRmxhZyBlbmQtb2YtdHJhbnNtaXNzaW9uLCBhbmQgdGhlbiBzZW5kIHRoZSBmaW5hbCB3b3JkICovCisJd3JpdGVsZmwoaWZjdGwgfCAweDIwMCwgcG9ydF9tbWlvICsgU0FUQV9JRkNUTF9PRlMpOworCXdyaXRlbGZsKGZpc1tmaW5hbF93b3JkXSwgcG9ydF9tbWlvICsgVkVORE9SX1VOSVFVRV9GSVNfT0ZTKTsKKworCS8qCisJICogV2FpdCBmb3IgRklTIHRyYW5zbWlzc2lvbiB0byBjb21wbGV0ZS4KKwkgKiBUaGlzIHR5cGljYWxseSB0YWtlcyBqdXN0IGEgc2luZ2xlIGl0ZXJhdGlvbi4KKwkgKi8KKwlkbyB7CisJCWlmc3RhdCA9IHJlYWRsKHBvcnRfbW1pbyArIFNBVEFfSUZTVEFUX09GUyk7CisJfSB3aGlsZSAoIShpZnN0YXQgJiAweDEwMDApICYmIC0tdGltZW91dCk7CisKKwkvKiBSZXN0b3JlIG9yaWdpbmFsIHBvcnQgY29uZmlndXJhdGlvbiAqLworCXdyaXRlbGZsKG9sZF9pZmN0bCwgcG9ydF9tbWlvICsgU0FUQV9JRkNUTF9PRlMpOworCisJLyogU2VlIGlmIGl0IHdvcmtlZCAqLworCWlmICgoaWZzdGF0ICYgMHgzMDAwKSAhPSAweDEwMDApIHsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsCisJCQkJIiVzIHRyYW5zbWlzc2lvbiBlcnJvciwgaWZzdGF0PSUwOHhcbiIsCisJCQkJX19mdW5jX18sIGlmc3RhdCk7CisJCXJldHVybiBBQ19FUlJfT1RIRVI7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqCW12X3FjX2lzc3VlX2ZpcyAtIElzc3VlIGEgY29tbWFuZCBkaXJlY3RseSBhcyBhIEZJUworICoJQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdGFydAorICoKKyAqCU5vdGUgdGhhdCB0aGUgQVRBIHNoYWRvdyByZWdpc3RlcnMgYXJlIG5vdCB1cGRhdGVkCisgKglhZnRlciBjb21tYW5kIGlzc3VlLCBzbyB0aGUgZGV2aWNlIHdpbGwgYXBwZWFyICJSRUFEWSIKKyAqCWlmIHBvbGxlZCwgZXZlbiB3aGlsZSBpdCBpcyBCVVNZIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQuCisgKgorICoJU28gd2UgdXNlIGEgc3RhdHVzIGhvb2sgdG8gZmFrZSBBVEFfQlVTWSB1bnRpbCB0aGUgZHJpdmUgY2hhbmdlcyBzdGF0ZS4KKyAqCisgKglOb3RlOiB3ZSBkb24ndCBnZXQgdXBkYXRlZCBzaGFkb3cgcmVncyBvbiAqY29tcGxldGlvbioKKyAqCW9mIG5vbi1kYXRhIGNvbW1hbmRzLiBTbyBhdm9pZCBzZW5kaW5nIHRoZW0gdmlhIHRoaXMgZnVuY3Rpb24sCisgKglhcyB0aGV5IHdpbGwgYXBwZWFyIHRvIGhhdmUgY29tcGxldGVkIGltbWVkaWF0ZWx5LgorICoKKyAqCUdFTl9JSUUgaGFzIHNwZWNpYWwgcmVnaXN0ZXJzIHRoYXQgd2UgY291bGQgZ2V0IHRoZSByZXN1bHQgdGYgZnJvbSwKKyAqCWJ1dCBlYXJsaWVyIGNoaXBzZXRzIGRvIG5vdC4gIEZvciBub3csIHdlIGlnbm9yZSB0aG9zZSByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXZfcWNfaXNzdWVfZmlzKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0YV9saW5rICpsaW5rID0gcWMtPmRldi0+bGluazsKKwl1MzIgZmlzWzVdOworCWludCBlcnIgPSAwOworCisJYXRhX3RmX3RvX2ZpcygmcWMtPnRmLCBsaW5rLT5wbXAsIDEsICh2b2lkICopZmlzKTsKKwllcnIgPSBtdl9zZW5kX2ZpcyhhcCwgZmlzLCBzaXplb2YoZmlzKSAvIHNpemVvZihmaXNbMF0pKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKKwljYXNlIEFUQVBJX1BST1RfUElPOgorCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFUQVBJX1BST1RfTk9EQVRBOgorCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRklSU1Q7CisJCWJyZWFrOworCWNhc2UgQVRBX1BST1RfUElPOgorCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZOworCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKQorCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0ZJUlNUOworCQllbHNlCisJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9MQVNUOworCQlicmVhazsKKwl9CisKKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1BPTExJTkcpCisJCWF0YV9waW9fcXVldWVfdGFzayhhcCwgcWMsIDApOworCXJldHVybiAwOworfQorCisvKioKICAqICAgICAgbXZfcWNfaXNzdWUgLSBJbml0aWF0ZSBhIGNvbW1hbmQgdG8gdGhlIGhvc3QKICAqICAgICAgQHFjOiBxdWV1ZWQgY29tbWFuZCB0byBzdGFydAogICoKQEAgLTE1NTgsMTQgKzIxMzAsMjggQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBtdl9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogeworCXN0YXRpYyBpbnQgbGltaXRfd2FybmluZ3MgPSAxMDsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXUzMiBpbl9pbmRleDsKKwl1bnNpZ25lZCBpbnQgcG9ydF9pcnFzOwogCi0JaWYgKChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfRE1BKSAmJgotCSAgICAocWMtPnRmLnByb3RvY29sICE9IEFUQV9QUk9UX05DUSkpIHsKLQkJc3RhdGljIGludCBsaW1pdF93YXJuaW5ncyA9IDEwOworCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19GQUtFX0FUQV9CVVNZOyAvKiBwYXJhbm9pYSAqLworCisJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKKwljYXNlIEFUQV9QUk9UX0RNQToKKwljYXNlIEFUQV9QUk9UX05DUToKKwkJbXZfc3RhcnRfZWRtYShhcCwgcG9ydF9tbWlvLCBwcCwgcWMtPnRmLnByb3RvY29sKTsKKwkJcHAtPnJlcV9pZHggPSAocHAtPnJlcV9pZHggKyAxKSAmIE1WX01BWF9RX0RFUFRIX01BU0s7CisJCWluX2luZGV4ID0gcHAtPnJlcV9pZHggPDwgRURNQV9SRVFfUV9QVFJfU0hJRlQ7CisKKwkJLyogV3JpdGUgdGhlIHJlcXVlc3QgaW4gcG9pbnRlciB0byBraWNrIHRoZSBFRE1BIHRvIGxpZmUgKi8KKwkJd3JpdGVsZmwoKHBwLT5jcnFiX2RtYSAmIEVETUFfUkVRX1FfQkFTRV9MT19NQVNLKSB8IGluX2luZGV4LAorCQkJCQlwb3J0X21taW8gKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpOworCQlyZXR1cm4gMDsKKworCWNhc2UgQVRBX1BST1RfUElPOgogCQkvKgogCQkgKiBFcnJhdGEgU0FUQSMxNiwgU0FUQSMyNDogd2FybiBpZiBtdWx0aXBsZSBEUlFzIGV4cGVjdGVkLgogCQkgKgpAQCAtMTU4MywyNyArMjE2OSw0NiBAQAogCQkJCQkiOiBhdHRlbXB0aW5nIFBJTyB3L211bHRpcGxlIERSUTogIgogCQkJCQkidGhpcyBtYXkgZmFpbCBkdWUgdG8gaC93IGVycmF0YVxuIik7CiAJCX0KLQkJLyoKLQkJICogV2UncmUgYWJvdXQgdG8gc2VuZCBhIG5vbi1FRE1BIGNhcGFibGUgY29tbWFuZCB0byB0aGUKLQkJICogcG9ydC4gIFR1cm4gb2ZmIEVETUEgc28gdGhlcmUgd29uJ3QgYmUgcHJvYmxlbXMgYWNjZXNzaW5nCi0JCSAqIHNoYWRvdyBibG9jaywgZXRjIHJlZ2lzdGVycy4KLQkJICovCi0JCW12X3N0b3BfZWRtYShhcCk7Ci0JCW12X2VuYWJsZV9wb3J0X2lycXMoYXAsIEVSUl9JUlEpOwotCQltdl9wbXBfc2VsZWN0KGFwLCBxYy0+ZGV2LT5saW5rLT5wbXApOwotCQlyZXR1cm4gYXRhX3NmZl9xY19pc3N1ZShxYyk7CisJCS8qIGRyb3AgdGhyb3VnaCAqLworCWNhc2UgQVRBX1BST1RfTk9EQVRBOgorCWNhc2UgQVRBUElfUFJPVF9QSU86CisJY2FzZSBBVEFQSV9QUk9UX05PREFUQToKKwkJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1BJT19QT0xMSU5HKQorCQkJcWMtPnRmLmZsYWdzIHw9IEFUQV9URkxBR19QT0xMSU5HOworCQlicmVhazsKIAl9CiAKLQltdl9zdGFydF9kbWEoYXAsIHBvcnRfbW1pbywgcHAsIHFjLT50Zi5wcm90b2NvbCk7CisJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQlwb3J0X2lycXMgPSBFUlJfSVJROwkvKiBtYXNrIGRldmljZSBpbnRlcnJ1cHQgd2hlbiBwb2xsaW5nICovCisJZWxzZQorCQlwb3J0X2lycXMgPSBFUlJfSVJRIHwgRE9ORV9JUlE7CS8qIHVubWFzayBhbGwgaW50ZXJydXB0cyAqLwogCi0JcHAtPnJlcV9pZHggPSAocHAtPnJlcV9pZHggKyAxKSAmIE1WX01BWF9RX0RFUFRIX01BU0s7Ci0JaW5faW5kZXggPSBwcC0+cmVxX2lkeCA8PCBFRE1BX1JFUV9RX1BUUl9TSElGVDsKKwkvKgorCSAqIFdlJ3JlIGFib3V0IHRvIHNlbmQgYSBub24tRURNQSBjYXBhYmxlIGNvbW1hbmQgdG8gdGhlCisJICogcG9ydC4gIFR1cm4gb2ZmIEVETUEgc28gdGhlcmUgd29uJ3QgYmUgcHJvYmxlbXMgYWNjZXNzaW5nCisJICogc2hhZG93IGJsb2NrLCBldGMgcmVnaXN0ZXJzLgorCSAqLworCW12X3N0b3BfZWRtYShhcCk7CisJbXZfY2xlYXJfYW5kX2VuYWJsZV9wb3J0X2lycXMoYXAsIG12X2FwX2Jhc2UoYXApLCBwb3J0X2lycXMpOworCW12X3BtcF9zZWxlY3QoYXAsIHFjLT5kZXYtPmxpbmstPnBtcCk7CiAKLQkvKiBhbmQgd3JpdGUgdGhlIHJlcXVlc3QgaW4gcG9pbnRlciB0byBraWNrIHRoZSBFRE1BIHRvIGxpZmUgKi8KLQl3cml0ZWxmbCgocHAtPmNycWJfZG1hICYgRURNQV9SRVFfUV9CQVNFX0xPX01BU0spIHwgaW5faW5kZXgsCi0JCSBwb3J0X21taW8gKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpOwotCi0JcmV0dXJuIDA7CisJaWYgKHFjLT50Zi5jb21tYW5kID09IEFUQV9DTURfUkVBRF9MT0dfRVhUKSB7CisJCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwkJLyoKKwkJICogV29ya2Fyb3VuZCBmb3IgODhTWDYweDEgRkVyIFNBVEEjMjUgKHBhcnQgMikuCisJCSAqCisJCSAqIEFmdGVyIGFueSBOQ1EgZXJyb3IsIHRoZSBSRUFEX0xPR19FWFQgY29tbWFuZAorCQkgKiBmcm9tIGxpYmF0YS1laCAqbXVzdCogdXNlIG12X3FjX2lzc3VlX2ZpcygpLgorCQkgKiBPdGhlcndpc2UgaXQgbWlnaHQgZmFpbCwgZHVlIHRvIGNoaXAgZXJyYXRhLgorCQkgKgorCQkgKiBSYXRoZXIgdGhhbiBzcGVjaWFsLWNhc2UgaXQsIHdlJ2xsIGp1c3QgKmFsd2F5cyoKKwkJICogdXNlIHRoaXMgbWV0aG9kIGhlcmUgZm9yIFJFQURfTE9HX0VYVCwgbWFraW5nIGZvcgorCQkgKiBlYXNpZXIgdGVzdGluZy4KKwkJICovCisJCWlmIChJU19HRU5fSUkoaHByaXYpKQorCQkJcmV0dXJuIG12X3FjX2lzc3VlX2ZpcyhxYyk7CisJfQorCXJldHVybiBhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqbXZfZ2V0X2FjdGl2ZV9xYyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMTYxNCw4ICsyMjE5LDEyIEBACiAJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKQogCQlyZXR1cm4gTlVMTDsKIAlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7Ci0JaWYgKHFjICYmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykpCi0JCXFjID0gTlVMTDsKKwlpZiAocWMpIHsKKwkJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKQorCQkJcWMgPSBOVUxMOworCQllbHNlIGlmICghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSkKKwkJCXFjID0gTlVMTDsKKwl9CiAJcmV0dXJuIHFjOwogfQogCkBAIC0yMDg0LDYgKzI2OTMsMTAgQEAKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+YmFzZSwgKmhjX21taW87CiAJdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwLCBwb3J0OwogCisJLyogSWYgYXNzZXJ0ZWQsIGNsZWFyIHRoZSAiYWxsIHBvcnRzIiBJUlEgY29hbGVzY2luZyBiaXQgKi8KKwlpZiAobWFpbl9pcnFfY2F1c2UgJiBBTExfUE9SVFNfQ09BTF9ET05FKQorCQl3cml0ZWwofkFMTF9QT1JUU19DT0FMX0lSUSwgbW1pbyArIE1WX0lSUV9DT0FMX0NBVVNFKTsKKwogCWZvciAocG9ydCA9IDA7IHBvcnQgPCBocHJpdi0+bl9wb3J0czsgcG9ydCsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1twb3J0XTsKIAkJdW5zaWduZWQgaW50IHAsIHNoaWZ0LCBoYXJkcG9ydCwgcG9ydF9jYXVzZTsKQEAgLTIxMTYsNiArMjcyOSw4IEBACiAJCQkgKiB0byBhY2sgKG9ubHkpIHRob3NlIHBvcnRzIHZpYSBoY19pcnFfY2F1c2UuCiAJCQkgKi8KIAkJCWFja19pcnFzID0gMDsKKwkJCWlmIChoY19jYXVzZSAmIFBPUlRTXzBfM19DT0FMX0RPTkUpCisJCQkJYWNrX2lycXMgPSBIQ19DT0FMX0lSUTsKIAkJCWZvciAocCA9IDA7IHAgPCBNVl9QT1JUU19QRVJfSEM7ICsrcCkgewogCQkJCWlmICgocG9ydCArIHApID49IGhwcml2LT5uX3BvcnRzKQogCQkJCQlicmVhazsKQEAgLTIyMDQsNyArMjgxOSw3IEBACiAKIAkvKiBmb3IgTVNJOiAgYmxvY2sgbmV3IGludGVycnVwdHMgd2hpbGUgaW4gaGVyZSAqLwogCWlmICh1c2luZ19tc2kpCi0JCXdyaXRlbCgwLCBocHJpdi0+bWFpbl9pcnFfbWFza19hZGRyKTsKKwkJbXZfd3JpdGVfbWFpbl9pcnFfbWFzaygwLCBocHJpdik7CiAKIAltYWluX2lycV9jYXVzZSA9IHJlYWRsKGhwcml2LT5tYWluX2lycV9jYXVzZV9hZGRyKTsKIAlwZW5kaW5nX2lycXMgICA9IG1haW5faXJxX2NhdXNlICYgaHByaXYtPm1haW5faXJxX21hc2s7CkBAIC0yMjIxLDcgKzI4MzYsNyBAQAogCiAJLyogZm9yIE1TSTogdW5tYXNrOyBpbnRlcnJ1cHQgY2F1c2UgYml0cyB3aWxsIHJldHJpZ2dlciBub3cgKi8KIAlpZiAodXNpbmdfbXNpKQotCQl3cml0ZWwoaHByaXYtPm1haW5faXJxX21hc2ssIGhwcml2LT5tYWluX2lycV9tYXNrX2FkZHIpOworCQltdl93cml0ZV9tYWluX2lycV9tYXNrKGhwcml2LT5tYWluX2lycV9tYXNrLCBocHJpdik7CiAKIAlzcGluX3VubG9jaygmaG9zdC0+bG9jayk7CiAKQEAgLTI3NzQsNiArMzM4OSw4IEBACiAKIAltdl9yZXNldF9jaGFubmVsKGhwcml2LCBtbWlvLCBhcC0+cG9ydF9ubyk7CiAJcHAtPnBwX2ZsYWdzICY9IH5NVl9QUF9GTEFHX0VETUFfRU47CisJcHAtPnBwX2ZsYWdzICY9CisJICB+KE1WX1BQX0ZMQUdfRkJTX0VOIHwgTVZfUFBfRkxBR19OQ1FfRU4gfCBNVl9QUF9GTEFHX0ZBS0VfQVRBX0JVU1kpOwogCiAJLyogV29ya2Fyb3VuZCBmb3IgZXJyYXRhIEZFciBTQVRBIzEwIChwYXJ0IDIpICovCiAJZG8gewpAQCAtMjc5Myw2ICszNDEwLDggQEAKIAkJCQlleHRyYSA9IEhaOyAvKiBvbmx5IGV4dGVuZCBpdCBvbmNlLCBtYXggKi8KIAkJfQogCX0gd2hpbGUgKHNzdGF0dXMgIT0gMHgwICYmIHNzdGF0dXMgIT0gMHgxMTMgJiYgc3N0YXR1cyAhPSAweDEyMyk7CisJbXZfc2F2ZV9jYWNoZWRfcmVncyhhcCk7CisJbXZfZWRtYV9jZmcoYXAsIDAsIDApOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzEyNiw2ICszNzQ1LDggQEAKIAkgKiBUaGUgcGVyLXBvcnQgaW50ZXJydXB0cyBnZXQgZG9uZSBsYXRlciBhcyBwb3J0cyBhcmUgc2V0IHVwLgogCSAqLwogCW12X3NldF9tYWluX2lycV9tYXNrKGhvc3QsIDAsIFBDSV9FUlIpOworCW12X3NldF9pcnFfY29hbGVzY2luZyhob3N0LCBpcnFfY29hbGVzY2luZ19pb19jb3VudCwKKwkJCQkgICAgaXJxX2NvYWxlc2NpbmdfdXNlY3MpOwogZG9uZToKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMjg3LDEyICszOTA4LDYgQEAKIAkucmVtb3ZlCQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCiB9OwogCi0vKgotICogbW9kdWxlIG9wdGlvbnMKLSAqLwotc3RhdGljIGludCBtc2k7CSAgICAgIC8qIFVzZSBQQ0kgbXNpOyBlaXRoZXIgemVybyAob2ZmLCBkZWZhdWx0KSBvciBub24temVybyAqLwotCi0KIC8qIG1vdmUgdG8gUENJIGxheWVyIG9yIGxpYmF0YSBjb3JlPyAqLwogc3RhdGljIGludCBwY2lfZ29fNjQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0zNDc0LDEwICs0MDg5LDUgQEAKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTkFNRSk7CiAKLSNpZmRlZiBDT05GSUdfUENJCi1tb2R1bGVfcGFyYW0obXNpLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtc2ksICJFbmFibGUgdXNlIG9mIFBDSSBNU0kgKDA9b2ZmLCAxPW9uKSIpOwotI2VuZGlmCi0KIG1vZHVsZV9pbml0KG12X2luaXQpOwogbW9kdWxlX2V4aXQobXZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggZjY1YjUzNy4uNmNkYTEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtNTcsOSArNTcsOSBAQAogCU5WX01NSU9fQkFSCQkJPSA1LAogCiAJTlZfUE9SVFMJCQk9IDIsCi0JTlZfUElPX01BU0sJCQk9IDB4MWYsCi0JTlZfTVdETUFfTUFTSwkJCT0gMHgwNywKLQlOVl9VRE1BX01BU0sJCQk9IDB4N2YsCisJTlZfUElPX01BU0sJCQk9IEFUQV9QSU80LAorCU5WX01XRE1BX01BU0sJCQk9IEFUQV9NV0RNQTIsCisJTlZfVURNQV9NQVNLCQkJPSBBVEFfVURNQTYsCiAJTlZfUE9SVDBfU0NSX1JFR19PRkZTRVQJCT0gMHgwMCwKIAlOVl9QT1JUMV9TQ1JfUkVHX09GRlNFVAkJPSAweDQwLAogCkBAIC00MDgsNiArNDA4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG52X2NvbW1vbl9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCS5zY3JfcmVhZAkJPSBudl9zY3JfcmVhZCwKIAkuc2NyX3dyaXRlCQk9IG52X3Njcl93cml0ZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCmluZGV4IGJhOWEyNTcuLmIxZmQ3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCkBAIC0xNzYsNyArMTc2LDkgQEAKIAkuY2hlY2tfYXRhcGlfZG1hCT0gcGRjX2NoZWNrX2F0YXBpX2RtYSwKIAkucWNfcHJlcAkJPSBwZGNfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gcGRjX3FjX2lzc3VlLAorCiAJLnNmZl9pcnFfY2xlYXIJCT0gcGRjX2lycV9jbGVhciwKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBwZGNfcG9zdF9pbnRlcm5hbF9jbWQsCiAJLmVycm9yX2hhbmRsZXIJCT0gcGRjX2Vycm9yX2hhbmRsZXIsCkBAIC0yMTMsOCArMjE1LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19TQVRBX1BBVEEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfb2xkX3NhdGFfb3BzLAogCX0sCkBAIC0yMjIsOCArMjI0LDggQEAKIAlbYm9hcmRfMjAzN3hfcGF0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yMzIsOCArMjM0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX29sZF9zYXRhX29wcywKIAl9LApAQCAtMjQyLDggKzI0NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjUyLDggKzI1NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfU0FUQV9QQVRBLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3NhdGFfb3BzLAogCX0sCkBAIC0yNjIsOCArMjY0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBQRENfRkxBR19HRU5fSUksCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTI3Miw4ICsyNzQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSB8IFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYwppbmRleCBhMDAwYzg2Li5jMzkzNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkuc29mdHJlc2V0CQk9IEFUQV9PUF9OVUxMLAogCS5lcnJvcl9oYW5kbGVyCQk9IHFzX2Vycm9yX2hhbmRsZXIsCiAJLnBvc3RfaW50ZXJuYWxfY21kCT0gQVRBX09QX05VTEwsCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCiAJLnNjcl9yZWFkCQk9IHFzX3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gcXNfc2NyX3dyaXRlLApAQCAtMTYwLDcgKzE2MSw3IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX1BPTExJTkcsCi0JCS5waW9fbWFzawk9IDB4MTAsIC8qIHBpbzQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzRfT05MWSwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnFzX2F0YV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCmluZGV4IGQwMDkxNjAuLmU2N2NlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwuYwpAQCAtMjAwLDggKzIwMCw4IEBACiAJLyogc2lsXzMxMTIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKQEAgLTIwOSwyNCArMjA5LDI0IEBACiAJewogCQkuZmxhZ3MJCT0gU0lMX0RGTF9QT1JUX0ZMQUdTIHwgU0lMX0ZMQUdfTU9EMTVXUklURSB8CiAJCQkJICBTSUxfRkxBR19OT19TQVRBX0lSUSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCiAJLyogc2lsXzM1MTIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LAogCS8qIHNpbF8zMTE0ICovCiAJewogCQkuZmxhZ3MJCT0gU0lMX0RGTF9QT1JUX0ZMQUdTIHwgU0lMX0ZMQUdfUkVSUl9PTl9ETUFfQUNULAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYwppbmRleCAyNTkwYzIyLi4wZDg5OTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCkBAIC00MjksMjUgKzQyOSwyNSBAQAogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDQpIHwKIAkJCQkgIFNJTDI0X0ZMQUdfUENJWF9JUlFfV09DLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogCS8qIHNpbF8zMTMyICovCiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoMiksCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiAJLyogc2lsXzMxMzEvc2lsXzM1MzEgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygxKSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwppbmRleCA5YzQzYjRlLi44Zjk4MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKQEAgLTk3LDggKzk3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4NywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmc2lzX29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwppbmRleCA2MDlkMTQ3Li43MjU3ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKQEAgLTM2MSw4ICszNjEsOCBAQAogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzcxLDggKzM3MSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBLMl9GTEFHX05PX0FUQVBJX0RNQSB8CiAJCQkJICBLMl9GTEFHX1NBVEFfOF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmazJfc2F0YV9vcHMsCiAJfSwKQEAgLTM4MCw4ICszODAsOCBAQAogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfQkFSX1BPU18zLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzg5LDggKzM4OSw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zeDQuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKaW5kZXggZWMwNGI4ZC4uZGNlM2RjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zeDQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCkBAIC0yNjUsOCArMjY1LDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX01NSU8gfAogCQkJCSAgQVRBX0ZMQUdfTk9fQVRBUEkgfCBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY18yMDYyMV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCmluZGV4IDAxOTU3NWIuLmU1YmZmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV91bGkuYwpAQCAtODksNyArODksNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHVsaV9wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJICBBVEFfRkxBR19JR05fU0lNUExFWCwKLQkucGlvX21hc2sgICAgICAgPSAweDFmLAkJLyogcGlvMC00ICovCisJLnBpb19tYXNrICAgICAgID0gQVRBX1BJTzQsCiAJLnVkbWFfbWFzayAgICAgID0gQVRBX1VETUE2LAogCS5wb3J0X29wcyAgICAgICA9ICZ1bGlfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCmluZGV4IDVjNjJkYTkuLjk4ZThjNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwpAQCAtMTQ2LDI0ICsxNDYsMjQgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMF9wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0NjQyMF9zYXRhX29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2dDY0MjFfc3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIxX3NhdGFfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMV9wcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAwLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIxX3BhdGFfb3BzLAogfTsKQEAgLTE3MSw4ICsxNzEsOCBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0ODI1MV9wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDgyNTFfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCmluZGV4IGM1N2NkZmYuLmVkNzBiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92c2MuYwpAQCAtMzA4LDYgKzMwOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2c2Nfc2F0YV9vcHMgPSB7CiAJLmluaGVyaXRzCQk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCisJLyogVGhlIElSUSBoYW5kbGluZyBpcyBub3QgcXVpdGUgc3RhbmRhcmQgU0ZGIGJlaGF2aW91ciBzbyB3ZQorCSAgIGNhbm5vdCB1c2UgdGhlIGRlZmF1bHQgbG9zdCBpbnRlcnJ1cHQgaGFuZGxlciAqLworCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAkuc2ZmX3RmX2xvYWQJCT0gdnNjX3NhdGFfdGZfbG9hZCwKIAkuc2ZmX3RmX3JlYWQJCT0gdnNjX3NhdGFfdGZfcmVhZCwKIAkuZnJlZXplCQkJPSB2c2NfZnJlZXplLApAQCAtMzQ1LDggKzM0OCw4IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHBpID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZ2c2Nfc2F0YV9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwppbmRleCA5ODA5OWY1Li5iMTE5NjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKKysrIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCkBAIC0xNjkwLDE3ICsxNjkwLDE3IEBACiAJCSAgfCAoMCAqIFNBUk1PREUwX1NIQURFTikgLyogV2UgZG9uJ3QgdXNlIHNoYWRvdyByZWdpc3RlcnMuICovCiAJCSAgfCAoMSAqIFNBUk1PREUwX0lOVE1PREVfUkVBRENMRUFSKQogCQkgIHwgKDEgKiBTQVJNT0RFMF9DV1JFKQotCQkgIHwgSVNfRlM1MChkZXYpP1NBUk1PREUwX1BSUFdUX0ZTNTBfNTogCi0JCSAgICAgICAgICAgICAgICAgU0FSTU9ERTBfUFJQV1RfRlMxNTVfMworCQkgIHwgKElTX0ZTNTAoZGV2KSA/IFNBUk1PREUwX1BSUFdUX0ZTNTBfNToKKwkJCSAgU0FSTU9ERTBfUFJQV1RfRlMxNTVfMykKIAkJICB8ICgxICogU0FSTU9ERTBfQ0FMU1VQXzEpCi0JCSAgfCBJU19GUzUwIChkZXYpPygwCisJCSAgfCAoSVNfRlM1MChkZXYpID8gKDAKIAkJCQkgICB8IFNBUk1PREUwX1JYVkNTXzMyCiAJCQkJICAgfCBTQVJNT0RFMF9BQlJWQ1NfMzIgCiAJCQkJICAgfCBTQVJNT0RFMF9UWFZDU18zMik6CiAJCSAgICAgICAgICAgICAgICAgICgwCiAJCQkJICAgfCBTQVJNT0RFMF9SWFZDU18xawogCQkJCSAgIHwgU0FSTU9ERTBfQUJSVkNTXzFrIAotCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMWspKTsKKwkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzFrKSkpOwogCiAJLyogMTBtcyAqIDEwMCBpcyAxIHNlY29uZC4gVGhhdCBzaG91bGQgYmUgZW5vdWdoLCBhcyBBTjM6OSBzYXlzIGl0IHRha2VzCiAJICAgMW1zLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaXBoYXNlLmMgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwppbmRleCBlMWM3NjExLi43OGM5NzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pcGhhc2UuYworKysgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwpAQCAtOTc3LDkgKzk3Nyw3IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcEJ1ZiArPSBzcHJpbnRmKCBwQnVmLCAiLiIgKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHNwcmludGYoIHBCdWYsICJcbiIgKTsKLSAgICAgICAgLy8gU1ByaW50KHBybnRCdWYpOwotICAgICAgICBwcmludGsocHJudEJ1Zik7CisgICAgICAgIHByaW50aygiJXNcbiIsIHBybnRCdWYpOwogICAgICAgICBjb3VudCArPSBjb2w7CiAgICAgICAgIHBCdWYgPSBwcm50QnVmOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1hdHRybGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTI4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1hdHRybGlzdC5jCkBAIC0wLDAgKzEsNzAgQEAKK1NPTE9TX0FUVFJfUk8oRHJpdmVyVmVyc2lvbikKK1NPTE9TX0FUVFJfUk8oQVBJVmVyc2lvbikKK1NPTE9TX0FUVFJfUk8oRmlybXdhcmVWZXJzaW9uKQorLy8gU09MT1NfQVRUUl9STyhEc3BWZXJzaW9uKQorLy8gU09MT1NfQVRUUl9STyhDb21tb25IYW5kc2hha2UpCitTT0xPU19BVFRSX1JPKENvbm5lY3RlZCkKK1NPTE9TX0FUVFJfUk8oT3BlcmF0aW9uYWxNb2RlKQorU09MT1NfQVRUUl9STyhTdGF0ZSkKK1NPTE9TX0FUVFJfUk8oV2F0Y2hkb2cpCitTT0xPU19BVFRSX1JPKE9wZXJhdGlvblByb2dyZXNzKQorU09MT1NfQVRUUl9STyhMYXN0RmFpbGVkKQorU09MT1NfQVRUUl9STyhUeEJpdFJhdGUpCitTT0xPU19BVFRSX1JPKFJ4Qml0UmF0ZSkKKy8vIFNPTE9TX0FUVFJfUk8oRGVsdEFDVEFUUGRzKQorLy8gU09MT1NfQVRUUl9STyhEZWx0QUNUQVRQdXMpCitTT0xPU19BVFRSX1JPKFR4QVRUTkRSKQorU09MT1NfQVRUUl9STyhSeEFUVE5EUikKK1NPTE9TX0FUVFJfUk8oQW5uZXhUeXBlKQorU09MT1NfQVRUUl9STyhHZW5lcmFsRmFpbHVyZSkKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZURwRG4pCitTT0xPU19BVFRSX1JPKEludGVybGVhdmVEcFVwKQorU09MT1NfQVRUUl9STyhSU0NvcnJlY3RlZEVycm9yc0RuKQorU09MT1NfQVRUUl9STyhSU1VuQ29ycmVjdGVkRXJyb3JzRG4pCitTT0xPU19BVFRSX1JPKFJTQ29ycmVjdGVkRXJyb3JzVXApCitTT0xPU19BVFRSX1JPKFJTVW5Db3JyZWN0ZWRFcnJvcnNVcCkKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZVJEbikKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZVJVcCkKK1NPTE9TX0FUVFJfUk8oU2hvd3RpbWVTdGFydCkKK1NPTE9TX0FUVFJfUk8oQVRVUlZlbmRvcikKK1NPTE9TX0FUVFJfUk8oQVRVQ0NvdW50cnkpCitTT0xPU19BVFRSX1JPKEFUVVJBTlNJUmV2KQorU09MT1NfQVRUUl9STyhBVFVSQU5TSVNURCkKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lSZXYpCitTT0xPU19BVFRSX1JPKEFUVUNBTlNJSWQpCitTT0xPU19BVFRSX1JPKEFUVUNBTlNJU1REKQorU09MT1NfQVRUUl9STyhEYXRhQm9vc3QpCitTT0xPU19BVFRSX1JPKExvY2FsSVRVQ291bnRyeUNvZGUpCitTT0xPU19BVFRSX1JPKExvY2FsU0VGKQorU09MT1NfQVRUUl9STyhMb2NhbEVuZExPUykKK1NPTE9TX0FUVFJfUk8oTG9jYWxTTlJNYXJnaW4pCitTT0xPU19BVFRSX1JPKExvY2FsTGluZUF0dG4pCitTT0xPU19BVFRSX1JPKFJhd0F0dG4pCitTT0xPU19BVFRSX1JPKExvY2FsVHhQb3dlcikKK1NPTE9TX0FUVFJfUk8oUmVtb3RlVHhQb3dlcikKK1NPTE9TX0FUVFJfUk8oUmVtb3RlU0VGKQorU09MT1NfQVRUUl9STyhSZW1vdGVMT1MpCitTT0xPU19BVFRSX1JPKFJlbW90ZUxpbmVBdHRuKQorU09MT1NfQVRUUl9STyhSZW1vdGVTTlJNYXJnaW4pCitTT0xPU19BVFRSX1JPKExpbmVVcENvdW50KQorU09MT1NfQVRUUl9STyhTUkFDbnQpCitTT0xPU19BVFRSX1JPKFNSQUNudFVwKQorU09MT1NfQVRUUl9STyhQcm9maWxlU3RhdHVzKQorU09MT1NfQVRUUl9SVyhBY3Rpb24pCitTT0xPU19BVFRSX1JXKEFjdGl2YXRlTGluZSkKK1NPTE9TX0FUVFJfUk8oTGluZVN0YXR1cykKK1NPTE9TX0FUVFJfUlcoSG9zdENvbnRyb2wpCitTT0xPU19BVFRSX1JXKEF1dG9TdGFydCkKK1NPTE9TX0FUVFJfUlcoRmFpbHNhZmUpCitTT0xPU19BVFRSX1JXKFNob3d0aW1lTGVkKQorU09MT1NfQVRUUl9SVyhSZXRyYWluKQorU09MT1NfQVRUUl9SVyhEZWZhdWx0cykKK1NPTE9TX0FUVFJfUlcoTGluZU1vZGUpCitTT0xPU19BVFRSX1JXKFByb2ZpbGUpCitTT0xPU19BVFRSX1JXKERldGVjdE5vaXNlKQorU09MT1NfQVRUUl9STyhTdXBwb3J0ZWRBbm5leGVzKQorU09MT1NfQVRUUl9STyhTdGF0dXMpCitTT0xPU19BVFRSX1JPKFRvdGFsU3RhcnQpCitTT0xPU19BVFRSX1JPKFJlY2VudFNob3d0aW1lU3RhcnQpCitTT0xPU19BVFRSX1JPKFRvdGFsUnhCbG9ja3MpCitTT0xPU19BVFRSX1JPKFRvdGFsVHhCbG9ja3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IDg5ZDdhNmUuLmJlMjA0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC05LDYgKzksNyBAQAogICoKICAqIEF1dGhvcnM6IE5hdGhhbiBXaWxsaWFtcyA8bmF0aGFuQHRyYXZlcnNlLmNvbS5hdT4KICAqICAgICAgICAgIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqICAgICAgICAgIFRyZWtlciBDaGVuIDx0cmVrZXJAeHJpby5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTM2LDggKzM3LDExIEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KIAotI2RlZmluZSBWRVJTSU9OICIwLjA0IgorI2RlZmluZSBWRVJTSU9OICIwLjA3IgogI2RlZmluZSBQVEFHICJzb2xvcy1wY2kiCiAKICNkZWZpbmUgQ09ORklHX1JBTV9TSVpFCTEyOApAQCAtNDUsMTYgKzQ5LDMxIEBACiAjZGVmaW5lIElSUV9FTl9BRERSCTB4NzgKICNkZWZpbmUgRlBHQV9WRVIJMHg3NAogI2RlZmluZSBJUlFfQ0xFQVIJMHg3MAotI2RlZmluZSBCVUdfRkxBRwkweDZDCisjZGVmaW5lIFdSSVRFX0ZMQVNICTB4NkMKKyNkZWZpbmUgUE9SVFMJCTB4NjgKKyNkZWZpbmUgRkxBU0hfQkxPQ0sJMHg2NAorI2RlZmluZSBGTEFTSF9CVVNZCTB4NjAKKyNkZWZpbmUgRlBHQV9NT0RFCTB4NUMKKyNkZWZpbmUgRkxBU0hfTU9ERQkweDU4CisjZGVmaW5lIFRYX0RNQV9BRERSKHBvcnQpCSgweDQwICsgKDQgKiAocG9ydCkpKQorI2RlZmluZSBSWF9ETUFfQUREUihwb3J0KQkoMHgzMCArICg0ICogKHBvcnQpKSkKIAogI2RlZmluZSBEQVRBX1JBTV9TSVpFCTMyNzY4CiAjZGVmaW5lIEJVRl9TSVpFCTQwOTYKKyNkZWZpbmUgRlBHQV9QQUdFCTUyOCAvKiBGUEdBIGZsYXNoIHBhZ2Ugc2l6ZSovCisjZGVmaW5lIFNPTE9TX1BBR0UJNTEyIC8qIFNvbG9zIGZsYXNoIHBhZ2Ugc2l6ZSovCisjZGVmaW5lIEZQR0FfQkxPQ0sJKEZQR0FfUEFHRSAqIDgpIC8qIEZQR0EgZmxhc2ggYmxvY2sgc2l6ZSovCisjZGVmaW5lIFNPTE9TX0JMT0NLCShTT0xPU19QQUdFICogOCkgLyogU29sb3MgZmxhc2ggYmxvY2sgc2l6ZSovCiAKICNkZWZpbmUgUlhfQlVGKGNhcmQsIG5yKSAoKGNhcmQtPmJ1ZmZlcnMpICsgKG5yKSpCVUZfU0laRSoyKQogI2RlZmluZSBUWF9CVUYoY2FyZCwgbnIpICgoY2FyZC0+YnVmZmVycykgKyAobnIpKkJVRl9TSVpFKjIgKyBCVUZfU0laRSkKIAotc3RhdGljIGludCBkZWJ1ZyA9IDA7CisjZGVmaW5lIFJYX0RNQV9TSVpFCTIwNDgKKworc3RhdGljIGludCByZXNldCA9IDA7CiBzdGF0aWMgaW50IGF0bWRlYnVnID0gMDsKK3N0YXRpYyBpbnQgZmlybXdhcmVfdXBncmFkZSA9IDA7CitzdGF0aWMgaW50IGZwZ2FfdXBncmFkZSA9IDA7CiAKIHN0cnVjdCBwa3RfaGRyIHsKIAlfX2xlMTYgc2l6ZTsKQEAgLTYzLDIzICs4Miw0OCBAQAogCV9fbGUxNiB0eXBlOwogfTsKIAorc3RydWN0IHNvbG9zX3NrYl9jYiB7CisJc3RydWN0IGF0bV92Y2MgKnZjYzsKKwl1aW50MzJfdCBkbWFfYWRkcjsKK307CisKKworI2RlZmluZSBTS0JfQ0Ioc2tiKQkJKChzdHJ1Y3Qgc29sb3Nfc2tiX2NiICopc2tiLT5jYikKKwogI2RlZmluZSBQS1RfREFUQQkwCiAjZGVmaW5lIFBLVF9DT01NQU5ECTEKICNkZWZpbmUgUEtUX1BPUEVOCTMKICNkZWZpbmUgUEtUX1BDTE9TRQk0CisjZGVmaW5lIFBLVF9TVEFUVVMJNQogCiBzdHJ1Y3Qgc29sb3NfY2FyZCB7CiAJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKIAl2b2lkIF9faW9tZW0gKmJ1ZmZlcnM7CiAJaW50IG5yX3BvcnRzOworCWludCB0eF9tYXNrOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IGF0bV9kZXYgKmF0bWRldls0XTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGxldDsKIAlzcGlubG9ja190IHR4X2xvY2s7CiAJc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOwogCXNwaW5sb2NrX3QgY2xpX3F1ZXVlX2xvY2s7CisJc3BpbmxvY2tfdCBwYXJhbV9xdWV1ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcGFyYW1fcXVldWU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVs0XTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGNsaV9xdWV1ZVs0XTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiWzRdOworCXN0cnVjdCBza19idWZmICpyeF9za2JbNF07CisJd2FpdF9xdWV1ZV9oZWFkX3QgcGFyYW1fd3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZndfd3E7CisJaW50IHVzaW5nX2RtYTsKK307CisKKworc3RydWN0IHNvbG9zX3BhcmFtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJcGlkX3QgcGlkOworCWludCBwb3J0OworCXN0cnVjdCBza19idWZmICpyZXNwb25zZTsKIH07CiAKICNkZWZpbmUgU09MT1NfQ0hBTihhdG1kZXYpICgoaW50KSh1bnNpZ25lZCBsb25nKShhdG1kZXYpLT5waHlfZGF0YSkKQEAgLTg4LDE5ICsxMzIsMjIgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU29sb3MgUENJIGRyaXZlciIpOwogTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIExvb3BiYWNrIik7CitNT0RVTEVfUEFSTV9ERVNDKHJlc2V0LCAiUmVzZXQgU29sb3MgY2hpcHMgb24gc3RhcnR1cCIpOwogTU9EVUxFX1BBUk1fREVTQyhhdG1kZWJ1ZywgIlByaW50IEFUTSBkYXRhIik7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0oYXRtZGVidWcsIGludCwgMDQ0NCk7Ci0KLXN0YXRpYyBpbnQgb3BlbnM7CitNT0RVTEVfUEFSTV9ERVNDKGZpcm13YXJlX3VwZ3JhZGUsICJJbml0aWF0ZSBTb2xvcyBmaXJtd2FyZSB1cGdyYWRlIik7CitNT0RVTEVfUEFSTV9ERVNDKGZwZ2FfdXBncmFkZSwgIkluaXRpYXRlIEZQR0EgdXBncmFkZSIpOworbW9kdWxlX3BhcmFtKHJlc2V0LCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGF0bWRlYnVnLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGZpcm13YXJlX3VwZ3JhZGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oZnBnYV91cGdyYWRlLCBpbnQsIDA0NDQpOwogCiBzdGF0aWMgdm9pZCBmcGdhX3F1ZXVlKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpOwotc3RhdGljIGludCBmcGdhX3R4KHN0cnVjdCBzb2xvc19jYXJkICopOworc3RhdGljIHVpbnQzMl90IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc29sb3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgc3RydWN0IGF0bV92Y2MqIGZpbmRfdmNjKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwgaW50IHZjaSk7CiBzdGF0aWMgaW50IGxpc3RfdmNjcyhpbnQgdmNpKTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KTsKIHN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgdm9pZCBhdG1fcmVtb3ZlKHN0cnVjdCBzb2xvc19jYXJkICopOwogc3RhdGljIGludCBzZW5kX2NvbW1hbmQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOwpAQCAtMTE1LDYgKzE2MiwyNjQgQEAKICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQogCitzdGF0aWMgc3NpemVfdCBzb2xvc19wYXJhbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhdG1fZGV2ICphdG1kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYXRtX2RldiwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGF0bWRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHNvbG9zX3BhcmFtIHBybTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisJaW50IGJ1ZmxlbjsKKworCWJ1ZmxlbiA9IHN0cmxlbihhdHRyLT5hdHRyLm5hbWUpICsgMTA7CisKKwlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpICsgYnVmbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBzb2xvc19wYXJhbV9zaG93KClcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJYnVmbGVuID0gc25wcmludGYoKHZvaWQgKikmaGVhZGVyWzFdLCBidWZsZW4gLSAxLAorCQkJICAiTCUwNWRcbiVzXG4iLCBjdXJyZW50LT5waWQsIGF0dHItPmF0dHIubmFtZSk7CisJc2tiX3B1dChza2IsIGJ1Zmxlbik7CisKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihidWZsZW4pOworCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYoMCk7CisJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfQ09NTUFORCk7CisKKwlwcm0ucGlkID0gY3VycmVudC0+cGlkOworCXBybS5yZXNwb25zZSA9IE5VTEw7CisJcHJtLnBvcnQgPSBTT0xPU19DSEFOKGF0bWRldik7CisKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlsaXN0X2FkZCgmcHJtLmxpc3QsICZjYXJkLT5wYXJhbV9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCWZwZ2FfcXVldWUoY2FyZCwgcHJtLnBvcnQsIHNrYiwgTlVMTCk7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQoY2FyZC0+cGFyYW1fd3EsIHBybS5yZXNwb25zZSwgNSAqIEhaKTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfZGVsKCZwcm0ubGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCWlmICghcHJtLnJlc3BvbnNlKQorCQlyZXR1cm4gLUVJTzsKKworCWJ1ZmxlbiA9IHBybS5yZXNwb25zZS0+bGVuOworCW1lbWNweShidWYsIHBybS5yZXNwb25zZS0+ZGF0YSwgYnVmbGVuKTsKKwlrZnJlZV9za2IocHJtLnJlc3BvbnNlKTsKKworCXJldHVybiBidWZsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNvbG9zX3BhcmFtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdG1fZGV2ICphdG1kZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYXRtX2RldiwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGF0bWRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHNvbG9zX3BhcmFtIHBybTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisJaW50IGJ1ZmxlbjsKKwlzc2l6ZV90IHJldDsKKworCWJ1ZmxlbiA9IHN0cmxlbihhdHRyLT5hdHRyLm5hbWUpICsgMTEgKyBjb3VudDsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHNvbG9zX3BhcmFtX3N0b3JlKClcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJYnVmbGVuID0gc25wcmludGYoKHZvaWQgKikmaGVhZGVyWzFdLCBidWZsZW4gLSAxLAorCQkJICAiTCUwNWRcbiVzXG4lc1xuIiwgY3VycmVudC0+cGlkLCBhdHRyLT5hdHRyLm5hbWUsIGJ1Zik7CisKKwlza2JfcHV0KHNrYiwgYnVmbGVuKTsKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihidWZsZW4pOworCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYoMCk7CisJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfQ09NTUFORCk7CisKKwlwcm0ucGlkID0gY3VycmVudC0+cGlkOworCXBybS5yZXNwb25zZSA9IE5VTEw7CisJcHJtLnBvcnQgPSBTT0xPU19DSEFOKGF0bWRldik7CisKKwlzcGluX2xvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlsaXN0X2FkZCgmcHJtLmxpc3QsICZjYXJkLT5wYXJhbV9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCWZwZ2FfcXVldWUoY2FyZCwgcHJtLnBvcnQsIHNrYiwgTlVMTCk7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQoY2FyZC0+cGFyYW1fd3EsIHBybS5yZXNwb25zZSwgNSAqIEhaKTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfZGVsKCZwcm0ubGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKworCXNrYiA9IHBybS5yZXNwb25zZTsKKworCWlmICghc2tiKQorCQlyZXR1cm4gLUVJTzsKKworCWJ1ZmxlbiA9IHNrYi0+bGVuOworCisJLyogU29tZXRpbWVzIGl0IGhhcyBhIG5ld2xpbmUsIHNvbWV0aW1lcyBpdCBkb2Vzbid0LiAqLworCWlmIChza2ItPmRhdGFbYnVmbGVuIC0gMV0gPT0gJ1xuJykKKwkJYnVmbGVuLS07CisKKwlpZiAoYnVmbGVuID09IDIgJiYgIXN0cm5jbXAoc2tiLT5kYXRhLCAiT0siLCAyKSkKKwkJcmV0ID0gY291bnQ7CisJZWxzZSBpZiAoYnVmbGVuID09IDUgJiYgIXN0cm5jbXAoc2tiLT5kYXRhLCAiRVJST1IiLCA1KSkKKwkJcmV0ID0gLUVJTzsKKwllbHNlIHsKKwkJLyogV2Uga25vdyB3ZSBoYXZlIGVub3VnaCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoaXM7IHdlIGFsbG9jYXRlZCAKKwkJICAgaXQgb3Vyc2VsdmVzICovCisJCXNrYi0+ZGF0YVtidWZsZW5dID0gMDsKKwkKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiVW5leHBlY3RlZCBwYXJhbWV0ZXIgcmVzcG9uc2U6ICclcydcbiIsCisJCQkgc2tiLT5kYXRhKTsKKwkJcmV0ID0gLUVJTzsKKwl9CisJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqbmV4dF9zdHJpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaSA9IDA7CisJY2hhciAqdGhpcyA9IHNrYi0+ZGF0YTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgc2tiLT5sZW47IGkrKykgeworCQlpZiAodGhpc1tpXSA9PSAnXG4nKSB7CisJCQl0aGlzW2ldID0gMDsKKwkJCXNrYl9wdWxsKHNrYiwgaSArIDEpOworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJaWYgKCFpc3ByaW50KHRoaXNbaV0pKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogU3RhdHVzIHBhY2tldCBoYXMgZmllbGRzIHNlcGFyYXRlZCBieSBcbiwgc3RhcnRpbmcgd2l0aCBhIHZlcnNpb24gbnVtYmVyCisgKiBmb3IgdGhlIGluZm9ybWF0aW9uIHRoZXJlaW4uIEZpZWxkcyBhcmUuLi4uCisgKgorICogICAgIHBhY2tldCB2ZXJzaW9uCisgKiAgICAgUnhCaXRSYXRlCSh2ZXJzaW9uID49IDEpCisgKiAgICAgVHhCaXRSYXRlCSh2ZXJzaW9uID49IDEpCisgKiAgICAgU3RhdGUJCSh2ZXJzaW9uID49IDEpCisgKiAgICAgTG9jYWxTTlJNYXJnaW4JKHZlcnNpb24gPj0gMSkKKyAqICAgICBMb2NhbExpbmVBdHRuCSh2ZXJzaW9uID49IDEpCisgKi8gICAgICAgCitzdGF0aWMgaW50IHByb2Nlc3Nfc3RhdHVzKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljaGFyICpzdHIsICplbmQsICpzdGF0ZV9zdHIsICpzbnIsICphdHRuOworCWludCB2ZXIsIHJhdGVfdXAsIHJhdGVfZG93bjsKKworCWlmICghY2FyZC0+YXRtZGV2W3BvcnRdKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCisJdmVyID0gc2ltcGxlX3N0cnRvbChzdHIsIE5VTEwsIDEwKTsKKwlpZiAodmVyIDwgMSkgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbmV4cGVjdGVkIHN0YXR1cyBpbnRlcnJ1cHQgdmVyc2lvbiAlZFxuIiwKKwkJCSB2ZXIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoIXN0cmNtcChzdHIsICJFUlJPUiIpKSB7CisJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiU3RhdHVzIHBhY2tldCBpbmRpY2F0ZWQgU29sb3MgZXJyb3Igb24gcG9ydCAlZCAoc3RhcnRpbmcgdXA/KVxuIiwKKwkJCSBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmF0ZV9kb3duID0gc2ltcGxlX3N0cnRvbChzdHIsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIC1FSU87CisKKwlzdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTzsKKwlyYXRlX3VwID0gc2ltcGxlX3N0cnRvbChzdHIsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIC1FSU87CisKKwlzdGF0ZV9zdHIgPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghc3RhdGVfc3RyKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIEFueXRoaW5nIGJ1dCAnU2hvd3RpbWUnIGlzIGRvd24gKi8KKwlpZiAoc3RyY21wKHN0YXRlX3N0ciwgIlNob3d0aW1lIikpIHsKKwkJY2FyZC0+YXRtZGV2W3BvcnRdLT5zaWduYWwgPSBBVE1fUEhZX1NJR19MT1NUOworCQlyZWxlYXNlX3ZjY3MoY2FyZC0+YXRtZGV2W3BvcnRdKTsKKwkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUG9ydCAlZDogJXNcbiIsIHBvcnQsIHN0YXRlX3N0cik7CisJCXJldHVybiAwOworCX0KKworCXNuciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCWF0dG4gPSBuZXh0X3N0cmluZyhza2IpOworCWlmICghYXR0bikKKwkJcmV0dXJuIC1FSU87CisKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJQb3J0ICVkOiAlcyBAJWQvJWQga2IvcyVzJXMlcyVzXG4iLAorCQkgcG9ydCwgc3RhdGVfc3RyLCByYXRlX2Rvd24vMTAwMCwgcmF0ZV91cC8xMDAwLAorCQkgc25yWzBdPyIsIFNOUiAiOiIiLCBzbnIsIGF0dG5bMF0/IiwgQXR0biAiOiIiLCBhdHRuKTsKKwkKKwljYXJkLT5hdG1kZXZbcG9ydF0tPmxpbmtfcmF0ZSA9IHJhdGVfZG93biAvIDQyNDsKKwljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0ZPVU5EOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb21tYW5kKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gKnBybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjbWRwaWQ7CisJaW50IGZvdW5kID0gMDsKKworCWlmIChza2ItPmxlbiA8IDcpCisJCXJldHVybiAwOworCisJaWYgKHNrYi0+ZGF0YVswXSAhPSAnTCcgICAgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzFdKSB8fAorCSAgICAhaXNkaWdpdChza2ItPmRhdGFbMl0pIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVszXSkgfHwKKwkgICAgIWlzZGlnaXQoc2tiLT5kYXRhWzRdKSB8fCAhaXNkaWdpdChza2ItPmRhdGFbNV0pIHx8CisJICAgIHNrYi0+ZGF0YVs2XSAhPSAnXG4nKQorCQlyZXR1cm4gMDsKKworCWNtZHBpZCA9IHNpbXBsZV9zdHJ0b2woJnNrYi0+ZGF0YVsxXSwgTlVMTCwgMTApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBybSwgJmNhcmQtPnBhcmFtX3F1ZXVlLCBsaXN0KSB7CisJCWlmIChwcm0tPnBvcnQgPT0gcG9ydCAmJiBwcm0tPnBpZCA9PSBjbWRwaWQpIHsKKwkJCXBybS0+cmVzcG9uc2UgPSBza2I7CisJCQlza2JfcHVsbChza2IsIDcpOworCQkJd2FrZV91cCgmY2FyZC0+cGFyYW1fd3EpOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jaywgZmxhZ3MpOworCXJldHVybiBmb3VuZDsKK30KKwogc3RhdGljIHNzaXplX3QgY29uc29sZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgY2hhciAqYnVmKQogewpAQCAtMTQwLDggKzQ0NSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgInNpemU6ICVkXG4iLCBzaXplKTsKLQogCWlmIChzaXplID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgewogCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkNvbW1hbmQgaXMgdG9vIGJpZy4gIERyb3BwaW5nIHJlcXVlc3RcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTE4MCw4MiArNDgzLDE4MSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoY29uc29sZSwgMDY0NCwgY29uc29sZV9zaG93LCBjb25zb2xlX3N0b3JlKTsKIAorCisjZGVmaW5lIFNPTE9TX0FUVFJfUk8oeCkgc3RhdGljIERFVklDRV9BVFRSKHgsIDA0NDQsIHNvbG9zX3BhcmFtX3Nob3csIE5VTEwpOworI2RlZmluZSBTT0xPU19BVFRSX1JXKHgpIHN0YXRpYyBERVZJQ0VfQVRUUih4LCAwNjQ0LCBzb2xvc19wYXJhbV9zaG93LCBzb2xvc19wYXJhbV9zdG9yZSk7CisKKyNpbmNsdWRlICJzb2xvcy1hdHRybGlzdC5jIgorCisjdW5kZWYgU09MT1NfQVRUUl9STworI3VuZGVmIFNPTE9TX0FUVFJfUlcKKworI2RlZmluZSBTT0xPU19BVFRSX1JPKHgpICZkZXZfYXR0cl8jI3guYXR0ciwKKyNkZWZpbmUgU09MT1NfQVRUUl9SVyh4KSAmZGV2X2F0dHJfIyN4LmF0dHIsCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzb2xvc19hdHRyc1tdID0geworI2luY2x1ZGUgInNvbG9zLWF0dHJsaXN0LmMiCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc29sb3NfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBzb2xvc19hdHRycywKKwkubmFtZSA9ICJwYXJhbWV0ZXJzIiwKK307CisKK3N0YXRpYyBpbnQgZmxhc2hfdXBncmFkZShzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IGNoaXApCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBjaGFyICpmd19uYW1lOworCXVpbnQzMl90IGRhdGEzMiA9IDA7CisJaW50IGJsb2Nrc2l6ZSA9IDA7CisJaW50IG51bWJsb2NrcyA9IDA7CisJaW50IG9mZnNldDsKKworCWlmIChjaGlwID09IDApIHsKKwkJZndfbmFtZSA9ICJzb2xvcy1GUEdBLmJpbiI7CisJCWJsb2Nrc2l6ZSA9IEZQR0FfQkxPQ0s7CisJfSBlbHNlIHsKKwkJZndfbmFtZSA9ICJzb2xvcy1GaXJtd2FyZS5iaW4iOworCQlibG9ja3NpemUgPSBTT0xPU19CTE9DSzsKKwl9CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZjYXJkLT5kZXYtPmRldikpCisJCXJldHVybiAtRU5PRU5UOworCisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiRmxhc2ggdXBncmFkZSBzdGFydGluZ1xuIik7CisKKwludW1ibG9ja3MgPSBmdy0+c2l6ZSAvIGJsb2Nrc2l6ZTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJGaXJtd2FyZSBzaXplOiAlemRcbiIsIGZ3LT5zaXplKTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJOdW1iZXIgb2YgYmxvY2tzOiAlZFxuIiwgbnVtYmxvY2tzKTsKKwkKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJDaGFuZ2luZyBGUEdBIHRvIFVwZGF0ZSBtb2RlXG4iKTsKKwlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisKKwkvKiBTZXQgbW9kZSB0byBDaGlwIEVyYXNlICovCisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiU2V0IEZQR0EgRmxhc2ggbW9kZSB0byAlcyBDaGlwIEVyYXNlXG4iLAorCQkgY2hpcD8iU29sb3MiOiJGUEdBIik7CisJaW93cml0ZTMyKChjaGlwICogMiksIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfTU9ERSk7CisKKworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIFdSSVRFX0ZMQVNIKTsKKwl3YWl0X2V2ZW50KGNhcmQtPmZ3X3dxLCAhaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9CVVNZKSk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3LT5zaXplOyBvZmZzZXQgKz0gYmxvY2tzaXplKSB7CisJCWludCBpOworCisJCS8qIENsZWFyIHdyaXRlIGZsYWcgKi8KKwkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCisJCS8qIFNldCBtb2RlIHRvIEJsb2NrIFdyaXRlICovCisJCS8qIGRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlNldCBGUEdBIEZsYXNoIG1vZGUgdG8gQmxvY2sgV3JpdGVcbiIpOyAqLworCQlpb3dyaXRlMzIoKChjaGlwICogMikgKyAxKSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKworCQkvKiBDb3B5IGJsb2NrIHRvIGJ1ZmZlciwgc3dhcHBpbmcgZWFjaCAxNiBiaXRzICovCisJCWZvcihpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSArPSA0KSB7CisJCQl1aW50MzJfdCB3b3JkID0gc3dhaGIzMnAoKHVpbnQzMl90ICopKGZ3LT5kYXRhICsgb2Zmc2V0ICsgaSkpOworCQkJaW93cml0ZTMyKHdvcmQsIFJYX0JVRihjYXJkLCAzKSArIGkpOworCQl9CisKKwkJLyogU3BlY2lmeSBibG9jayBudW1iZXIgYW5kIHRoZW4gdHJpZ2dlciBmbGFzaCB3cml0ZSAqLworCQlpb3dyaXRlMzIob2Zmc2V0IC8gYmxvY2tzaXplLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JMT0NLKTsKKwkJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCQl3YWl0X2V2ZW50KGNhcmQtPmZ3X3dxLCAhaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9CVVNZKSk7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfTU9ERSk7CisJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmV0dXJuaW5nIEZQR0EgdG8gRGF0YSBtb2RlXG4iKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90IHNvbG9zX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBkZXZfaWQ7CiAJaW50IGhhbmRsZWQgPSAxOwogCi0JLy9BQ0sgSVJRCiAJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0NMRUFSKTsKLQkvL0Rpc2FibGUgSVJRcyBmcm9tIEZQR0EKLQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKLQkvKiBJZiB3ZSBvbmx5IGRvIGl0IHdoZW4gdGhlIGRldmljZSBpcyBvcGVuLCB3ZSBsb3NlIGNvbnNvbGUKLQkgICBtZXNzYWdlcyAqLwotCWlmICgxIHx8IG9wZW5zKQorCS8qIElmIHdlJ3JlIHVwIGFuZCBydW5uaW5nLCBqdXN0IGtpY2sgdGhlIHRhc2tsZXQgdG8gcHJvY2VzcyBUWC9SWCAqLworCWlmIChjYXJkLT5hdG1kZXZbMF0pCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmNhcmQtPnRsZXQpOworCWVsc2UKKwkJd2FrZV91cCgmY2FyZC0+Zndfd3EpOwogCi0JLy9FbmFibGUgSVJRcyBmcm9tIEZQR0EKLQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKIHZvaWQgc29sb3NfYmgodW5zaWduZWQgbG9uZyBjYXJkX2FyZykKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9ICh2b2lkICopY2FyZF9hcmc7Ci0JaW50IHBvcnQ7CiAJdWludDMyX3QgY2FyZF9mbGFnczsKLQl1aW50MzJfdCB0eF9tYXNrOwogCXVpbnQzMl90IHJ4X2RvbmUgPSAwOworCWludCBwb3J0OwogCi0JY2FyZF9mbGFncyA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7Ci0KLQkvKiBUaGUgVFggYml0cyBhcmUgc2V0IGlmIHRoZSBjaGFubmVsIGlzIGJ1c3k7IGNsZWFyIGlmIG5vdC4gV2Ugd2FudCB0bwotCSAgIGludm9rZSBmcGdhX3R4KCkgdW5sZXNzIF9hbGxfIHRoZSBiaXRzIGZvciBhY3RpdmUgY2hhbm5lbHMgYXJlIHNldCAqLwotCXR4X21hc2sgPSAoMSA8PCBjYXJkLT5ucl9wb3J0cykgLSAxOwotCWlmICgoY2FyZF9mbGFncyAmIHR4X21hc2spICE9IHR4X21hc2spCi0JCWZwZ2FfdHgoY2FyZCk7CisJLyoKKwkgKiBTaW5jZSBmcGdhX3R4KCkgaXMgZ29pbmcgdG8gbmVlZCB0byByZWFkIHRoZSBmbGFncyB1bmRlciBpdHMgbG9jaywKKwkgKiBpdCBjYW4gcmV0dXJuIHRoZW0gdG8gdXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGhpdCBQQ0kgTU1JTworCSAqIGFnYWluIGZvciB0aGUgc2FtZSBpbmZvcm1hdGlvbgorCSAqLworCWNhcmRfZmxhZ3MgPSBmcGdhX3R4KGNhcmQpOwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGNhcmQtPm5yX3BvcnRzOyBwb3J0KyspIHsKIAkJaWYgKGNhcmRfZmxhZ3MgJiAoMHgxMCA8PCBwb3J0KSkgewotCQkJc3RydWN0IHBrdF9oZHIgaGVhZGVyOworCQkJc3RydWN0IHBrdF9oZHIgX2hkciwgKmhlYWRlcjsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCQkJaW50IHNpemU7CiAKLQkJCXJ4X2RvbmUgfD0gMHgxMCA8PCBwb3J0OworCQkJaWYgKGNhcmQtPnVzaW5nX2RtYSkgeworCQkJCXNrYiA9IGNhcmQtPnJ4X3NrYltwb3J0XTsKKwkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBOVUxMOwogCi0JCQltZW1jcHlfZnJvbWlvKCZoZWFkZXIsIFJYX0JVRihjYXJkLCBwb3J0KSwgc2l6ZW9mKGhlYWRlcikpOworCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXIuc2l6ZSk7CisJCQkJaGVhZGVyID0gKHZvaWQgKilza2ItPmRhdGE7CisJCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2l6ZSk7CisJCQkJc2tiX3B1dChza2IsIHNpemUgKyBzaXplb2YoKmhlYWRlcikpOworCQkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKKwkJCX0gZWxzZSB7CisJCQkJaGVhZGVyID0gJl9oZHI7CiAKLQkJCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKLQkJCWlmICghc2tiKSB7Ci0JCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgZm9yIFJYXG4iKTsKLQkJCQljb250aW51ZTsKKwkJCQlyeF9kb25lIHw9IDB4MTAgPDwgcG9ydDsKKworCQkJCW1lbWNweV9mcm9taW8oaGVhZGVyLCBSWF9CVUYoY2FyZCwgcG9ydCksIHNpemVvZigqaGVhZGVyKSk7CisKKwkJCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLT5zaXplKTsKKworCQkJCXNrYiA9IGFsbG9jX3NrYihzaXplICsgMSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKCFza2IpIHsKKwkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGZvciBSWFxuIik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLAorCQkJCQkgICAgICBSWF9CVUYoY2FyZCwgcG9ydCkgKyBzaXplb2YoKmhlYWRlciksCisJCQkJCSAgICAgIHNpemUpOwogCQkJfQotCi0JCQltZW1jcHlfZnJvbWlvKHNrYl9wdXQoc2tiLCBzaXplKSwKLQkJCQkgICAgICBSWF9CVUYoY2FyZCwgcG9ydCkgKyBzaXplb2YoaGVhZGVyKSwKLQkJCQkgICAgICBzaXplKTsKLQogCQkJaWYgKGF0bWRlYnVnKSB7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmVjZWl2ZWQ6IGRldmljZSAlZFxuIiwgcG9ydCk7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAic2l6ZTogJWQgVlBJOiAlZCBWQ0k6ICVkXG4iLAotCQkJCQkgc2l6ZSwgbGUxNl90b19jcHUoaGVhZGVyLnZwaSksCi0JCQkJCSBsZTE2X3RvX2NwdShoZWFkZXIudmNpKSk7CisJCQkJCSBzaXplLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCisJCQkJCSBsZTE2X3RvX2NwdShoZWFkZXItPnZjaSkpOwogCQkJCXByaW50X2J1ZmZlcihza2IpOwogCQkJfQogCi0JCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci50eXBlKSkgeworCQkJc3dpdGNoIChsZTE2X3RvX2NwdShoZWFkZXItPnR5cGUpKSB7CiAJCQljYXNlIFBLVF9EQVRBOgotCQkJCXZjYyA9IGZpbmRfdmNjKGNhcmQtPmF0bWRldltwb3J0XSwgbGUxNl90b19jcHUoaGVhZGVyLnZwaSksCi0JCQkJCSAgICAgICBsZTE2X3RvX2NwdShoZWFkZXIudmNpKSk7CisJCQkJdmNjID0gZmluZF92Y2MoY2FyZC0+YXRtZGV2W3BvcnRdLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCisJCQkJCSAgICAgICBsZTE2X3RvX2NwdShoZWFkZXItPnZjaSkpOwogCQkJCWlmICghdmNjKSB7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJSZWNlaXZlZCBwYWNrZXQgZm9yIHVua25vd24gVkNJLlZQSSAlZC4lZCBvbiBwb3J0ICVkXG4iLAotCQkJCQkJCSBsZTE2X3RvX2NwdShoZWFkZXIudmNpKSwgbGUxNl90b19jcHUoaGVhZGVyLnZwaSksCisJCQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSwgbGUxNl90b19jcHUoaGVhZGVyLT52cGkpLAogCQkJCQkJCSBwb3J0KTsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtMjY0LDE5ICs2NjYsNTAgQEAKIAkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgUEtUX1NUQVRVUzoKKwkJCQlpZiAocHJvY2Vzc19zdGF0dXMoY2FyZCwgcG9ydCwgc2tiKSAmJgorCQkJCSAgICBuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiQmFkIHN0YXR1cyBwYWNrZXQgb2YgJWQgYnl0ZXMgb24gcG9ydCAlZDpcbiIsIHNrYi0+bGVuLCBwb3J0KTsKKwkJCQkJcHJpbnRfYnVmZmVyKHNrYik7CisJCQkJfQorCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgUEtUX0NPTU1BTkQ6CiAJCQlkZWZhdWx0OiAvKiBGSVhNRTogTm90IHJlYWxseSwgc3VyZWx5PyAqLworCQkJCWlmIChwcm9jZXNzX2NvbW1hbmQoY2FyZCwgcG9ydCwgc2tiKSkKKwkJCQkJYnJlYWs7CiAJCQkJc3Bpbl9sb2NrKCZjYXJkLT5jbGlfcXVldWVfbG9jayk7CiAJCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJmNhcmQtPmNsaV9xdWV1ZVtwb3J0XSkgPiAxMCkgewogCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRHJvcHBpbmcgY29uc29sZSByZXNwb25zZSBvbiBwb3J0ICVkXG4iLAogCQkJCQkJCSBwb3J0KTsKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQl9IGVsc2UKIAkJCQkJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmNsaV9xdWV1ZVtwb3J0XSwgc2tiKTsKIAkJCQlzcGluX3VubG9jaygmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCS8qIEFsbG9jYXRlIFJYIHNrYnMgZm9yIGFueSBwb3J0cyB3aGljaCBuZWVkIHRoZW0gKi8KKwkJaWYgKGNhcmQtPnVzaW5nX2RtYSAmJiBjYXJkLT5hdG1kZXZbcG9ydF0gJiYKKwkJICAgICFjYXJkLT5yeF9za2JbcG9ydF0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IoUlhfRE1BX1NJWkUsIEdGUF9BVE9NSUMpOworCQkJaWYgKHNrYikgeworCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9CisJCQkJCXBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJICAgICAgIFJYX0RNQV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBSWF9ETUFfQUREUihwb3J0KSk7CisJCQkJY2FyZC0+cnhfc2tiW3BvcnRdID0gc2tiOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgUlggc2tiIik7CisKKwkJCQkvKiBXZSdsbCBoYXZlIHRvIHRyeSBhZ2FpbiBsYXRlciAqLworCQkJCXRhc2tsZXRfc2NoZWR1bGUoJmNhcmQtPnRsZXQpOworCQkJfQorCQl9CiAJfQogCWlmIChyeF9kb25lKQogCQlpb3dyaXRlMzIocnhfZG9uZSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKQEAgLTMyNiw3ICs3NTksNyBAQAogCQkJICAgICAgIHZjYy0+dmNpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvcihpPTA7IGk8MzI7IGkrKyl7CisJCWZvcihpID0gMDsgaSA8IFZDQ19IVEFCTEVfU0laRTsgaSsrKXsKIAkJCWhlYWQgPSAmdmNjX2hhc2hbaV07CiAJCQlza19mb3JfZWFjaChzLCBub2RlLCBoZWFkKSB7CiAJCQkJbnVtX2ZvdW5kICsrOwpAQCAtMzQyLDYgKzc3NSwyOCBAQAogCXJldHVybiBudW1fZm91bmQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KQoreworICAgICAgICBpbnQgaTsKKworICAgICAgICB3cml0ZV9sb2NrX2lycSgmdmNjX3NrbGlzdF9sb2NrKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFZDQ19IVEFCTEVfU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbaV07CisgICAgICAgICAgICAgICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisgICAgICAgICAgICAgICAgc3RydWN0IHNvY2sgKnM7CisgICAgICAgICAgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYzsKKworICAgICAgICAgICAgICAgIHNrX2Zvcl9lYWNoX3NhZmUocywgbm9kZSwgdG1wLCBoZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2Y2MgPSBhdG1fc2socyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmNjLT5kZXYgPT0gZGV2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjY19yZWxlYXNlX2FzeW5jKHZjYywgLUVQSVBFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tfZGVsX25vZGVfaW5pdChzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd3JpdGVfdW5sb2NrX2lycSgmdmNjX3NrbGlzdF9sb2NrKTsKK30KKwogCiBzdGF0aWMgaW50IHBvcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CkBAIC0zNDksNiArODA0LDEyIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOwogCisJaWYgKHZjYy0+cW9zLmFhbCAhPSBBVE1fQUFMNSkgeworCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBBVE0gdHlwZSAlZFxuIiwKKwkJCSB2Y2MtPnFvcy5hYWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYiAmJiBuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gcG9wZW4oKVxuIik7CkBAIC0zNTYsMjIgKzgxNywxNyBAQAogCX0KIAloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpoZWFkZXIpKTsKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNigwKTsKIAloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KHZjYy0+dnBpKTsKIAloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KHZjYy0+dmNpKTsKIAloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfUE9QRU4pOwogCiAJZnBnYV9xdWV1ZShjYXJkLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSwgc2tiLCBOVUxMKTsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJPcGVuIGZvciB2cGkgJWQgYW5kIHZjaSAlZCBvbiBpbnRlcmZhY2UgJWRcbiIsIHZjYy0+dnBpLCB2Y2MtPnZjaSwgU09MT1NfQ0hBTih2Y2MtPmRldikpOwotCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsgLy8gYWNjZXB0IHRoZSB2cGkgLyB2Y2kKKwlzZXRfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7CiAJc2V0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIAlsaXN0X3ZjY3MoMCk7CiAKLQlpZiAoIW9wZW5zKQotCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7Ci0KLQlvcGVucysrOyAvL2NvdW50IG9wZW4gUFZDcwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODksMTcgKzg0NSwxMyBAQAogCX0KIAloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpoZWFkZXIpKTsKKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNigwKTsKIAloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KHZjYy0+dnBpKTsKIAloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KHZjYy0+dmNpKTsKIAloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfUENMT1NFKTsKIAogCWZwZ2FfcXVldWUoY2FyZCwgU09MT1NfQ0hBTih2Y2MtPmRldiksIHNrYiwgTlVMTCk7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiQ2xvc2UgZm9yIHZwaSAlZCBhbmQgdmNpICVkIG9uIGludGVyZmFjZSAlZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSk7Ci0JaWYgKCEtLW9wZW5zKQotCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7Ci0KIAljbGVhcl9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAljbGVhcl9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncyk7CiAKQEAgLTQzOSwyMiArODkxLDI2IEBACiAJCSAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCWludCBvbGRfbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkqKHZvaWQgKiopc2tiLT5jYiA9IHZjYzsKKwlTS0JfQ0Ioc2tiKS0+dmNjID0gdmNjOwogCi0Jc3Bpbl9sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dHhfcXVldWVfbG9jaywgZmxhZ3MpOwogCW9sZF9sZW4gPSBza2JfcXVldWVfbGVuKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSk7CiAJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPnR4X3F1ZXVlW3BvcnRdLCBza2IpOwotCXNwaW5fdW5sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKKwlpZiAoIW9sZF9sZW4pCisJCWNhcmQtPnR4X21hc2sgfD0gKDEgPDwgcG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dHhfcXVldWVfbG9jaywgZmxhZ3MpOwogCi0JLyogSWYgVFggbWlnaHQgbmVlZCB0byBiZSBzdGFydGVkLCBkbyBzbyAqLworCS8qIFRoZW9yZXRpY2FsbHkgd2UgY291bGQganVzdCBzY2hlZHVsZSB0aGUgdGFza2xldCBoZXJlLCBidXQKKwkgICB0aGF0IGludHJvZHVjZXMgbGF0ZW5jeSB3ZSBkb24ndCB3YW50IC0tIGl0J3Mgbm90aWNlYWJsZSAqLwogCWlmICghb2xkX2xlbikKIAkJZnBnYV90eChjYXJkKTsKIH0KIAotc3RhdGljIGludCBmcGdhX3R4KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkKQorc3RhdGljIHVpbnQzMl90IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQpCiB7Ci0JdWludDMyX3QgdHhfcGVuZGluZzsKKwl1aW50MzJfdCB0eF9wZW5kaW5nLCBjYXJkX2ZsYWdzOwogCXVpbnQzMl90IHR4X3N0YXJ0ZWQgPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKQEAgLTQ2Miw2OSArOTE4LDc3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50eF9sb2NrLCBmbGFncyk7CisJCisJY2FyZF9mbGFncyA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJLyoKKwkgKiBUaGUgcXVldWUgbG9jayBpcyByZXF1aXJlZCBmb3IgX3dyaXRpbmdfIHRvIHR4X21hc2ssIGJ1dCB3ZSdyZQorCSAqIE9LIHRvIHJlYWQgaXQgaGVyZSB3aXRob3V0IGxvY2tpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1cGRhdGUKKwkgKiB0aGF0IHdlIGNvdWxkIHJhY2Ugd2l0aCBpcyBpbiBmcGdhX3F1ZXVlKCkgd2hlcmUgaXQgc2V0cyBhIGJpdAorCSAqIGZvciBhIG5ldyBwb3J0Li4uIGJ1dCBpdCdzIGdvaW5nIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBpZgorCSAqIGl0J3MgZG9pbmcgdGhhdCwgYW55d2F5LgorCSAqLworCXR4X3BlbmRpbmcgPSBjYXJkLT50eF9tYXNrICYgfmNhcmRfZmxhZ3M7CiAKLQl0eF9wZW5kaW5nID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLQotCWRldl92ZGJnKCZjYXJkLT5kZXYtPmRldiwgIlRYIEZsYWdzIGFyZSAlWFxuIiwgdHhfcGVuZGluZyk7Ci0KLQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2FyZC0+bnJfcG9ydHM7IHBvcnQrKykgewotCQlpZiAoISh0eF9wZW5kaW5nICYgKDEgPDwgcG9ydCkpKSB7CisJZm9yIChwb3J0ID0gMDsgdHhfcGVuZGluZzsgdHhfcGVuZGluZyA+Pj0gMSwgcG9ydCsrKSB7CisJCWlmICh0eF9wZW5kaW5nICYgMSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKm9sZHNrYiA9IGNhcmQtPnR4X3NrYltwb3J0XTsKKwkJCWlmIChvbGRza2IpCisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihvbGRza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBvbGRza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAkJCXNwaW5fbG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CiAJCQlza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbcG9ydF0pOworCQkJaWYgKCFza2IpCisJCQkJY2FyZC0+dHhfbWFzayAmPSB+KDEgPDwgcG9ydCk7CiAJCQlzcGluX3VubG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CiAKLQkJCWlmICghc2tiKQorCQkJaWYgKHNrYiAmJiAhY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJbWVtY3B5X3RvaW8oVFhfQlVGKGNhcmQsIHBvcnQpLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCQl0eF9zdGFydGVkIHw9IDEgPDwgcG9ydDsKKwkJCQlvbGRza2IgPSBza2I7IC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHNrYiBhbHJlYWR5ICovCisJCQl9IGVsc2UgaWYgKHNrYiAmJiBjYXJkLT51c2luZ19kbWEpIHsKKwkJCQlTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShjYXJkLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJCQkJICAgICAgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlpb3dyaXRlMzIoU0tCX0NCKHNrYiktPmRtYV9hZGRyLAorCQkJCQkgIGNhcmQtPmNvbmZpZ19yZWdzICsgVFhfRE1BX0FERFIocG9ydCkpOworCQkJfQorCisJCQlpZiAoIW9sZHNrYikKIAkJCQljb250aW51ZTsKIAorCQkJLyogQ2xlYW4gdXAgYW5kIGZyZWUgb2xkc2tiIG5vdyBpdCdzIGdvbmUgKi8KIAkJCWlmIChhdG1kZWJ1ZykgewogCQkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlRyYW5zbWl0dGVkOiBwb3J0ICVkXG4iLAogCQkJCQkgcG9ydCk7Ci0JCQkJcHJpbnRfYnVmZmVyKHNrYik7CisJCQkJcHJpbnRfYnVmZmVyKG9sZHNrYik7CiAJCQl9Ci0JCQltZW1jcHlfdG9pbyhUWF9CVUYoY2FyZCwgcG9ydCksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCQl2Y2MgPSAqKHZvaWQgKiopc2tiLT5jYjsKKwkJCXZjYyA9IFNLQl9DQihvbGRza2IpLT52Y2M7CiAKIAkJCWlmICh2Y2MpIHsKIAkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eCk7Ci0JCQkJc29sb3NfcG9wKHZjYywgc2tiKTsKKwkJCQlzb2xvc19wb3AodmNjLCBvbGRza2IpOwogCQkJfSBlbHNlCi0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycShvbGRza2IpOwogCi0JCQl0eF9zdGFydGVkIHw9IDEgPDwgcG9ydDsgLy9TZXQgVFggZnVsbCBmbGFnCiAJCX0KIAl9CisJLyogRm9yIG5vbi1ETUEgVFgsIHdyaXRlIHRoZSAnVFggc3RhcnQnIGJpdCBmb3IgYWxsIGZvdXIgcG9ydHMgc2ltdWx0YW5lb3VzbHkgKi8KIAlpZiAodHhfc3RhcnRlZCkKIAkJaW93cml0ZTMyKHR4X3N0YXJ0ZWQsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50eF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNhcmRfZmxhZ3M7CiB9CiAKIHN0YXRpYyBpbnQgcHNlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IHZjYy0+ZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7CiAJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgcGt0bGVuOwogCi0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgInBzZW5kIGNhbGxlZC5cbiIpOwotCS8vZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJkZXYsdnBpLHZjaSA9ICVkLCVkLCVkXG4iLFNPTE9TX0NIQU4odmNjLT5kZXYpLHZjYy0+dnBpLHZjYy0+dmNpKTsKLQotCWlmIChkZWJ1ZykgewotCQlza2IyID0gYXRtX2FsbG9jX2NoYXJnZSh2Y2MsIHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHNrYjIpIHsKLQkJCW1lbWNweShza2IyLT5kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJCXNrYl9wdXQoc2tiMiwgc2tiLT5sZW4pOwotCQkJdmNjLT5wdXNoKHZjYywgc2tiMik7Ci0JCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7Ci0JCX0KLQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHgpOwotCQlzb2xvc19wb3AodmNjLCBza2IpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2tiLT5sZW4gPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CisJcGt0bGVuID0gc2tiLT5sZW47CisJaWYgKHBrdGxlbiA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKIAkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiTGVuZ3RoIG9mIFBEVSBpcyB0b28gbGFyZ2UuIERyb3BwaW5nIFBEVS5cbiIpOwogCQlzb2xvc19wb3AodmNjLCBza2IpOwogCQlyZXR1cm4gMDsKQEAgLTUzOSw2ICsxMDAzLDcgQEAKIAogCQlyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZXhwYW5kX2J5LCAwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAicHNrYl9leHBhbmRfaGVhZCBmYWlsZWQuXG4iKTsKIAkJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC01NDYsNyArMTAxMSw4IEBACiAKIAloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKIAotCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKwkvKiBUaGlzIGRvZXMgX25vdF8gaW5jbHVkZSB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyICovCisJaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYocGt0bGVuKTsKIAloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KHZjYy0+dnBpKTsKIAloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KHZjYy0+dmNpKTsKIAloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfREFUQSk7CkBAIC01NzMsMjAgKzEwMzksMTkgQEAKIAogc3RhdGljIGludCBmcGdhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgZXJyLCBpOworCWludCBlcnI7CiAJdWludDE2X3QgZnBnYV92ZXI7CiAJdWludDhfdCBtYWpvcl92ZXIsIG1pbm9yX3ZlcjsKIAl1aW50MzJfdCBkYXRhMzI7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQ7CiAKLQlpZiAoZGVidWcpCi0JCXJldHVybiAwOwotCiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYXJkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNhcmQtPmRldiA9IGRldjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5md193cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+cGFyYW1fd3EpOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC01OTQsNiArMTA1OSwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BXzMyQklUX01BU0spOworCWlmIChlcnIpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCAzMi1iaXQgRE1BIG1hc2tcbiIpOworCQlnb3RvIG91dDsKKwl9CisKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgInNvbG9zIik7CiAJaWYgKGVycikgewogCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCByZWdpb25zXG4iKTsKQEAgLTYxMSwxNyArMTA4MiwxMyBAQAogCQlnb3RvIG91dF91bm1hcF9jb25maWc7CiAJfQogCi0vLwlmb3IoaT0wO2k8NjQgO2krPTQpewotLy8JCWRhdGEzMj1pb3JlYWQzMihjYXJkLT5idWZmZXJzICsgaSk7Ci0vLwkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICIlMDhsWFxuIiwodW5zaWduZWQgbG9uZylkYXRhMzIpOwotLy8JfQorCWlmIChyZXNldCkgeworCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCQlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAogCi0JLy9GaWxsIENvbmZpZyBNZW0gd2l0aCB6ZXJvcwotCWZvcihpID0gMDsgaSA8IDEyODsgaSArPSA0KQotCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBpKTsKLQotCS8vU2V0IFJYIGVtcHR5IGZsYWdzCi0JaW93cml0ZTMyKDB4RjAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisJfQogCiAJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX1ZFUik7CiAJZnBnYV92ZXIgPSAoZGF0YTMyICYgMHgwMDAwRkZGRik7CkBAIC02MzAsNTUgKzEwOTcsNTMgQEAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJTb2xvcyBGUEdBIFZlcnNpb24gJWQuJTAyZCBzdm4tJWRcbiIsCiAJCSBtYWpvcl92ZXIsIG1pbm9yX3ZlciwgZnBnYV92ZXIpOwogCi0JY2FyZC0+bnJfcG9ydHMgPSAyOyAvKiBGSVhNRTogRGV0ZWN0IGRhdWdodGVyYm9hcmQgKi8KKwlpZiAoMCAmJiBmcGdhX3ZlciA+IDI3KQorCQljYXJkLT51c2luZ19kbWEgPSAxOworCWVsc2UgeworCQkvKiBTZXQgUlggZW1wdHkgZmxhZyBmb3IgYWxsIHBvcnRzICovCisJCWlvd3JpdGUzMigweEYwLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOworCX0KIAotCWVyciA9IGF0bV9pbml0KGNhcmQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubWFwX2JvdGg7CisJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBQT1JUUyk7CisJY2FyZC0+bnJfcG9ydHMgPSAoZGF0YTMyICYgMHgwMDAwMDBGRik7CiAKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKKwogCXRhc2tsZXRfaW5pdCgmY2FyZC0+dGxldCwgc29sb3NfYmgsICh1bnNpZ25lZCBsb25nKWNhcmQpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT50eF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+dHhfcXVldWVfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKLS8qCi0JLy8gU2V0IExvb3BiYWNrIG1vZGUKLQlkYXRhMzIgPSAweDAwMDEwMDAwOwotCWlvd3JpdGUzMihkYXRhMzIsY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLSovCi0vKgotCS8vIEZpbGwgQnVmZmVycyB3aXRoIHplcm9zCi0JZm9yIChpID0gMDsgaSA8IEJVRl9TSVpFICogODsgaSArPSA0KQotCQlpb3dyaXRlMzIoMCwgY2FyZC0+YnVmZmVycyArIGkpOwotKi8KLS8qCi0JZm9yKGkgPSAwOyBpIDwgKEJVRl9TSVpFICogMSk7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4MTIzNDU2NzgsIGNhcmQtPmJ1ZmZlcnMgKyBpICsgKDAqQlVGX1NJWkUpKTsKLQlmb3IoaSA9IDA7IGkgPCAoQlVGX1NJWkUgKiAxKTsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHhhYmNkZWY5OCwgY2FyZC0+YnVmZmVycyArIGkgKyAoMSpCVUZfU0laRSkpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cGFyYW1fcXVldWUpOwogCi0JLy8gUmVhZCBDb25maWcgTWVtb3J5Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlJlYWRpbmcgQ29uZmlnIE1FTVxuIik7Ci0JaSA9IDA7Ci0JZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlkYXRhMzI9aW9yZWFkMzIoY2FyZC0+YnVmZmVycyArIGkqKEJVRl9TSVpFLzIpKTsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIkFkZHI6ICVsWCBEYXRhOiAlMDhsWFxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKShhZGRyX3N0YXJ0ICsgaSooQlVGX1NJWkUvMikpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZGF0YTMyKTsKLQl9Ci0qLwotCS8vZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJSZXF1ZXN0aW5nIElSUTogJWRcbiIsZGV2LT5pcnEpOwotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzb2xvc19pcnEsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbG9zX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkgICJzb2xvcy1wY2kiLCBjYXJkKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKIAkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgSVJROiAlZFxuIiwgZGV2LT5pcnEpOworCQlnb3RvIG91dF91bm1hcF9ib3RoOworCX0KIAotCS8vIEVuYWJsZSBJUlFzCiAJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCisJaWYgKGZwZ2FfdXBncmFkZSkKKwkJZmxhc2hfdXBncmFkZShjYXJkLCAwKTsKKworCWlmIChmaXJtd2FyZV91cGdyYWRlKQorCQlmbGFzaF91cGdyYWRlKGNhcmQsIDEpOworCisJZXJyID0gYXRtX2luaXQoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZnJlZV9pcnE7CisKIAlyZXR1cm4gMDsKIAorIG91dF9mcmVlX2lycToKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGNhcmQpOworCXRhc2tsZXRfa2lsbCgmY2FyZC0+dGxldCk7CisJCiAgb3V0X3VubWFwX2JvdGg6CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5jb25maWdfcmVncyk7CiAgb3V0X3VubWFwX2NvbmZpZzoKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmJ1ZmZlcnMpOwpAQCAtNjkzLDkgKzExNTgsMTAgQEAKIHsKIAlpbnQgaTsKIAotCW9wZW5zID0gMDsKLQogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ucl9wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CisKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2FyZC0+dHhfcXVldWVbaV0pOwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT5jbGlfcXVldWVbaV0pOwogCkBAIC03MDcsNiArMTE3Myw4IEBACiAJCX0KIAkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmY2FyZC0+YXRtZGV2W2ldLT5jbGFzc19kZXYsICZkZXZfYXR0cl9jb25zb2xlKSkKIAkJCWRldl9lcnIoJmNhcmQtPmRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIGNvbnNvbGUgZm9yIEFUTSBkZXZpY2UgJWRcbiIsIGkpOworCQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2Rldi5rb2JqLCAmc29sb3NfYXR0cl9ncm91cCkpCisJCQlkZXZfZXJyKCZjYXJkLT5kZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBwYXJhbWV0ZXIgZ3JvdXAgZm9yIEFUTSBkZXZpY2UgJWRcbiIsIGkpOwogCiAJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlJlZ2lzdGVyZWQgQVRNIGRldmljZSAlZFxuIiwgY2FyZC0+YXRtZGV2W2ldLT5udW1iZXIpOwogCkBAIC03MTQsNiArMTE4MiwyMiBAQAogCQljYXJkLT5hdG1kZXZbaV0tPmNpX3JhbmdlLnZjaV9iaXRzID0gMTY7CiAJCWNhcmQtPmF0bWRldltpXS0+ZGV2X2RhdGEgPSBjYXJkOwogCQljYXJkLT5hdG1kZXZbaV0tPnBoeV9kYXRhID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylpOworCQljYXJkLT5hdG1kZXZbaV0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX1VOS05PV047CisKKwkJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiKSB7CisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBhdG1faW5pdCgpXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaGVhZGVyID0gKHZvaWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNigwKTsKKwkJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwkJaGVhZGVyLT52Y2kgPSBjcHVfdG9fbGUxNigwKTsKKwkJaGVhZGVyLT50eXBlID0gY3B1X3RvX2xlMTYoUEtUX1NUQVRVUyk7CisKKwkJZnBnYV9xdWV1ZShjYXJkLCBpLCBza2IsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTcyNCw4ICsxMjA4LDI4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnJfcG9ydHM7IGkrKykgewogCQlpZiAoY2FyZC0+YXRtZGV2W2ldKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCiAJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJVbnJlZ2lzdGVyaW5nIEFUTSBkZXZpY2UgJWRcbiIsIGNhcmQtPmF0bWRldltpXS0+bnVtYmVyKTsKKworCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2Rldi5rb2JqLCAmc29sb3NfYXR0cl9ncm91cCk7CiAJCQlhdG1fZGV2X2RlcmVnaXN0ZXIoY2FyZC0+YXRtZGV2W2ldKTsKKworCQkJc2tiID0gY2FyZC0+cnhfc2tiW2ldOworCQkJaWYgKHNrYikgeworCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJfQorCQkJc2tiID0gY2FyZC0+dHhfc2tiW2ldOworCQkJaWYgKHNrYikgeworCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCX0KKwkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNhcmQtPnR4X3F1ZXVlW2ldKSkpCisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworIAogCQl9CiAJfQogfQpAQCAtNzMzLDMxICsxMjM3LDMxIEBACiBzdGF0aWMgdm9pZCBmcGdhX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJCisJLyogRGlzYWJsZSBJUlFzICovCisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCi0JaWYgKGRlYnVnKQotCQlyZXR1cm47CisJLyogUmVzZXQgRlBHQSAqLworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJKHZvaWQpaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKIAogCWF0bV9yZW1vdmUoY2FyZCk7CiAKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJGcmVlaW5nIElSUVxuIik7Ci0JLy8gRGlzYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAlmcmVlX2lycShkZXYtPmlycSwgY2FyZCk7CiAJdGFza2xldF9raWxsKCZjYXJkLT50bGV0KTsKIAotCS8vCWlvd3JpdGUzMigweDAxLHBjaXJlZ3MpOwotCWRldl92ZGJnKCZkZXYtPmRldiwgIlVubWFwcGluZyBQQ0kgcmVzb3VyY2VcbiIpOworCS8qIFJlbGVhc2UgZGV2aWNlIGZyb20gcmVzZXQgKi8KKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOworCSh2b2lkKWlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmJ1ZmZlcnMpOwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+Y29uZmlnX3JlZ3MpOwogCi0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiUmVsZWFzaW5nIFBDSSBSZWdpb25cbiIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWtmcmVlKGNhcmQpOwotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJmcGdhX3JlbW92ZVxuIik7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZnBnYV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9iYXNlLmggYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCmluZGV4IDlmNTBmMWIuLmRkYzk3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmgKKysrIGIvZHJpdmVycy9iYXNlL2Jhc2UuaApAQCAtNjMsNiArNjMsMzIgQEAKICNkZWZpbmUgdG9fY2xhc3Mob2JqKQlcCiAJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNsYXNzX3ByaXZhdGUsIGNsYXNzX3N1YnN5cy5rb2JqKQogCisvKioKKyAqIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAtIHN0cnVjdHVyZSB0byBob2xkIHRoZSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgY29yZSBwb3J0aW9ucyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqCisgKiBAa2xpc3RfY2hpbGRyZW4gLSBrbGlzdCBjb250YWluaW5nIGFsbCBjaGlsZHJlbiBvZiB0aGlzIGRldmljZQorICogQGtub2RlX3BhcmVudCAtIG5vZGUgaW4gc2libGluZyBsaXN0CisgKiBAa25vZGVfZHJpdmVyIC0gbm9kZSBpbiBkcml2ZXIgbGlzdAorICogQGtub2RlX2J1cyAtIG5vZGUgaW4gYnVzIGxpc3QKKyAqIEBkZXZpY2UgLSBwb2ludGVyIGJhY2sgdG8gdGhlIHN0cnVjdCBjbGFzcyB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCisgKiBhc3NvY2lhdGVkIHdpdGguCisgKgorICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuCisgKi8KK3N0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7CisJc3RydWN0IGtsaXN0IGtsaXN0X2NoaWxkcmVuOworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX3BhcmVudDsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9kcml2ZXI7CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfYnVzOworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKK307CisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX3BhcmVudCkKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfZHJpdmVyKG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfZHJpdmVyKQorI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9idXMob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9idXMpCisKIC8qIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBkZXZpY2VzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGJ1c2VzX2luaXQodm9pZCk7CkBAIC04Niw2ICsxMTIsMTEgQEAKIAogZXh0ZXJuIHZvaWQgZHJpdmVyX2RldGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKIGV4dGVybiBpbnQgZHJpdmVyX3Byb2JlX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGlubGluZSBpbnQgZHJpdmVyX21hdGNoX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZHJ2LT5idXMtPm1hdGNoICYmIGRydi0+YnVzLT5tYXRjaChkZXYsIGRydik7Cit9CiAKIGV4dGVybiB2b2lkIHN5c2Rldl9zaHV0ZG93bih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IDgzZjMyYjguLmRjMDMwZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCWludCBlcnIgPSAtRU5PREVWOwogCiAJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlX2J5X25hbWUoYnVzLCBOVUxMLCBidWYpOwotCWlmIChkZXYgJiYgZGV2LT5kcml2ZXIgPT0gTlVMTCkgeworCWlmIChkZXYgJiYgZGV2LT5kcml2ZXIgPT0gTlVMTCAmJiBkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkgewogCQlpZiAoZGV2LT5wYXJlbnQpCS8qIE5lZWRlZCBmb3IgVVNCICovCiAJCQlkb3duKCZkZXYtPnBhcmVudC0+c2VtKTsKIAkJZG93bigmZGV2LT5zZW0pOwpAQCAtMjUzLDcgKzI1MywxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKKworCWlmIChuKSB7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC0yODYsNyArMjkzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmYnVzLT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9idXMgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfYnVzIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oZGV2LCBkYXRhKTsKIAlrbGlzdF9pdGVyX2V4aXQoJmkpOwpAQCAtMzIwLDcgKzMyNyw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIChzdGFydCA/ICZzdGFydC0+a25vZGVfYnVzIDogTlVMTCkpOworCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2J1cyA6IE5VTEwpKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChkZXYsIGRhdGEpICYmIGdldF9kZXZpY2UoZGV2KSkKIAkJCWJyZWFrOwpAQCAtNTA3LDcgKzUxNCw4IEBACiAJCQlyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7CiAJCVdBUk5fT04ocmV0IDwgMCk7CiAJCWlmIChyZXQgPj0gMCkKLQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX2J1cywgJmJ1cy0+cC0+a2xpc3RfZGV2aWNlcyk7CisJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9idXMsCisJCQkJICAgICAgICZidXMtPnAtPmtsaXN0X2RldmljZXMpOwogCX0KIH0KIApAQCAtNTI4LDggKzUzNiw4IEBACiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmJ1cy0+cC0+ZGV2aWNlc19rc2V0LT5rb2JqLAogCQkJCSAgZGV2X25hbWUoZGV2KSk7CiAJCWRldmljZV9yZW1vdmVfYXR0cnMoZGV2LT5idXMsIGRldik7Ci0JCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPmtub2RlX2J1cykpCi0JCQlrbGlzdF9kZWwoJmRldi0+a25vZGVfYnVzKTsKKwkJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+cC0+a25vZGVfYnVzKSkKKwkJCWtsaXN0X2RlbCgmZGV2LT5wLT5rbm9kZV9idXMpOwogCiAJCXByX2RlYnVnKCJidXM6ICclcyc6IHJlbW92ZSBkZXZpY2UgJXNcbiIsCiAJCQkgZGV2LT5idXMtPm5hbWUsIGRldl9uYW1lKGRldikpOwpAQCAtODMxLDE0ICs4MzksMTYgQEAKIAogc3RhdGljIHZvaWQga2xpc3RfZGV2aWNlc19nZXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRldl9wcnYtPmRldmljZTsKIAogCWdldF9kZXZpY2UoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQga2xpc3RfZGV2aWNlc19wdXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfYnVzKG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRldl9wcnYtPmRldmljZTsKIAogCXB1dF9kZXZpY2UoZGV2KTsKIH0KQEAgLTkzMiw2ICs5NDIsNyBAQAogCWtzZXRfdW5yZWdpc3RlcigmYnVzLT5wLT5zdWJzeXMpOwogCWtmcmVlKGJ1cy0+cCk7CiBvdXQ6CisJYnVzLT5wID0gTlVMTDsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3JlZ2lzdGVyKTsKQEAgLTk1Myw2ICs5NjQsNyBAQAogCWJ1c19yZW1vdmVfZmlsZShidXMsICZidXNfYXR0cl91ZXZlbnQpOwogCWtzZXRfdW5yZWdpc3RlcigmYnVzLT5wLT5zdWJzeXMpOwogCWtmcmVlKGJ1cy0+cCk7CisJYnVzLT5wID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJ1c191bnJlZ2lzdGVyKTsKIApAQCAtOTkzLDE4ICsxMDA1LDIwIEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCXN0cnVjdCBrbGlzdF9ub2RlICpuOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqZGV2X3BydjsKIAlzdHJ1Y3QgZGV2aWNlICpiOwogCiAJbGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHsKIAkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOwotCQliID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJCWIgPSBkZXZfcHJ2LT5kZXZpY2U7CiAJCWlmIChjb21wYXJlKGEsIGIpIDw9IDApIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLAotCQkJCSAgICAgICAmYi0+a25vZGVfYnVzLm5fbm9kZSk7CisJCQlsaXN0X21vdmVfdGFpbCgmYS0+cC0+a25vZGVfYnVzLm5fbm9kZSwKKwkJCQkgICAgICAgJmItPnAtPmtub2RlX2J1cy5uX25vZGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLCBsaXN0KTsKKwlsaXN0X21vdmVfdGFpbCgmYS0+cC0+a25vZGVfYnVzLm5fbm9kZSwgbGlzdCk7CiB9CiAKIHZvaWQgYnVzX3NvcnRfYnJlYWR0aGZpcnN0KHN0cnVjdCBidXNfdHlwZSAqYnVzLApAQCAtMTAxNCw2ICsxMDI4LDcgQEAKIAlMSVNUX0hFQUQoc29ydGVkX2RldmljZXMpOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBrbGlzdCAqZGV2aWNlX2tsaXN0OwogCkBAIC0xMDIyLDcgKzEwMzcsOCBAQAogCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7CiAJCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKLQkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldl9wcnYgPSB0b19kZXZpY2VfcHJpdmF0ZV9idXMobik7CisJCWRldiA9IGRldl9wcnYtPmRldmljZTsKIAkJZGV2aWNlX2luc2VydGlvbl9zb3J0X2tsaXN0KGRldiwgJnNvcnRlZF9kZXZpY2VzLCBjb21wYXJlKTsKIAl9CiAJbGlzdF9zcGxpY2UoJnNvcnRlZF9kZXZpY2VzLCAmZGV2aWNlX2tsaXN0LT5rX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggZjNlYWU2My4uZTczYzkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0xMDksNiArMTA5LDcgQEAKIHN0YXRpYyB2b2lkIGRldmljZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSBkZXYtPnA7CiAKIAlpZiAoZGV2LT5yZWxlYXNlKQogCQlkZXYtPnJlbGVhc2UoZGV2KTsKQEAgLTEyMCw2ICsxMjEsNyBAQAogCQlXQVJOKDEsIEtFUk5fRVJSICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBoYXZlIGEgcmVsZWFzZSgpICIKIAkJCSJmdW5jdGlvbiwgaXQgaXMgYnJva2VuIGFuZCBtdXN0IGJlIGZpeGVkLlxuIiwKIAkJCWRldl9uYW1lKGRldikpOworCWtmcmVlKHApOwogfQogCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBkZXZpY2Vfa3R5cGUgPSB7CkBAIC0xMzQsOCArMTM2LDYgQEAKIAogCWlmIChrdHlwZSA9PSAmZGV2aWNlX2t0eXBlKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKLQkJaWYgKGRldi0+dWV2ZW50X3N1cHByZXNzKQotCQkJcmV0dXJuIDA7CiAJCWlmIChkZXYtPmJ1cykKIAkJCXJldHVybiAxOwogCQlpZiAoZGV2LT5jbGFzcykKQEAgLTUwNywxNCArNTA3LDE2IEBACiAKIHN0YXRpYyB2b2lkIGtsaXN0X2NoaWxkcmVuX2dldChzdHJ1Y3Qga2xpc3Rfbm9kZSAqbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfcGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKnAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcC0+ZGV2aWNlOwogCiAJZ2V0X2RldmljZShkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBrbGlzdF9jaGlsZHJlbl9wdXQoc3RydWN0IGtsaXN0X25vZGUgKm4pCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX3BhcmVudCk7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpwID0gdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG4pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHAtPmRldmljZTsKIAogCXB1dF9kZXZpY2UoZGV2KTsKIH0KQEAgLTUzOCw4ICs1NDAsNiBAQAogewogCWRldi0+a29iai5rc2V0ID0gZGV2aWNlc19rc2V0OwogCWtvYmplY3RfaW5pdCgmZGV2LT5rb2JqLCAmZGV2aWNlX2t0eXBlKTsKLQlrbGlzdF9pbml0KCZkZXYtPmtsaXN0X2NoaWxkcmVuLCBrbGlzdF9jaGlsZHJlbl9nZXQsCi0JCSAgIGtsaXN0X2NoaWxkcmVuX3B1dCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZG1hX3Bvb2xzKTsKIAlpbml0X01VVEVYKCZkZXYtPnNlbSk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+ZGV2cmVzX2xvY2spOwpAQCAtNzc3LDE3ICs3NzcsMTIgQEAKIGludCBkZXZfc2V0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IHZhcmdzOwotCWNoYXIgKnM7CisJaW50IGVycjsKIAogCXZhX3N0YXJ0KHZhcmdzLCBmbXQpOwotCXZzbnByaW50ZihkZXYtPmJ1c19pZCwgc2l6ZW9mKGRldi0+YnVzX2lkKSwgZm10LCB2YXJncyk7CisJZXJyID0ga29iamVjdF9zZXRfbmFtZV92YXJncygmZGV2LT5rb2JqLCBmbXQsIHZhcmdzKTsKIAl2YV9lbmQodmFyZ3MpOwotCi0JLyogZXd3dy4uLiBzb21lIG9mIHRoZXNlIGJ1Z2dlcnMgaGF2ZSAvIGluIHRoZSBuYW1lLi4uICovCi0Jd2hpbGUgKChzID0gc3RyY2hyKGRldi0+YnVzX2lkLCAnLycpKSkKLQkJKnMgPSAnISc7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3NldF9uYW1lKTsKIApAQCAtODY0LDEyICs4NTksMjYgQEAKIAlpZiAoIWRldikKIAkJZ290byBkb25lOwogCi0JLyogVGVtcG9yYXJpbHkgc3VwcG9ydCBpbml0X25hbWUgaWYgaXQgaXMgc2V0LgotCSAqIEl0IHdpbGwgb3ZlcnJpZGUgYnVzX2lkIGZvciBub3cgKi8KLQlpZiAoZGV2LT5pbml0X25hbWUpCi0JCWRldl9zZXRfbmFtZShkZXYsICIlcyIsIGRldi0+aW5pdF9uYW1lKTsKKwlkZXYtPnAgPSBremFsbG9jKHNpemVvZigqZGV2LT5wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnApIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+cC0+ZGV2aWNlID0gZGV2OworCWtsaXN0X2luaXQoJmRldi0+cC0+a2xpc3RfY2hpbGRyZW4sIGtsaXN0X2NoaWxkcmVuX2dldCwKKwkJICAga2xpc3RfY2hpbGRyZW5fcHV0KTsKIAotCWlmICghc3RybGVuKGRldi0+YnVzX2lkKSkKKwkvKgorCSAqIGZvciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2VzLCB3aGljaCBzaG91bGQgYWxsIGJlIGNvbnZlcnRlZAorCSAqIHNvbWUgZGF5LCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIG5hbWUuIFdlIHByZXZlbnQgcmVhZGluZyBiYWNrCisJICogdGhlIG5hbWUsIGFuZCBmb3JjZSB0aGUgdXNlIG9mIGRldl9uYW1lKCkKKwkgKi8KKwlpZiAoZGV2LT5pbml0X25hbWUpIHsKKwkJZGV2X3NldF9uYW1lKGRldiwgZGV2LT5pbml0X25hbWUpOworCQlkZXYtPmluaXRfbmFtZSA9IE5VTEw7CisJfQorCisJaWYgKCFkZXZfbmFtZShkZXYpKQogCQlnb3RvIGRvbmU7CiAKIAlwcl9kZWJ1ZygiZGV2aWNlOiAnJXMnOiAlc1xuIiwgZGV2X25hbWUoZGV2KSwgX19mdW5jX18pOwpAQCAtOTI4LDcgKzkzNyw4IEBACiAJa29iamVjdF91ZXZlbnQoJmRldi0+a29iaiwgS09CSl9BREQpOwogCWJ1c19hdHRhY2hfZGV2aWNlKGRldik7CiAJaWYgKHBhcmVudCkKLQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LCAmcGFyZW50LT5rbGlzdF9jaGlsZHJlbik7CisJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCSAgICAgICAmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAKIAlpZiAoZGV2LT5jbGFzcykgewogCQltdXRleF9sb2NrKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19tdXRleCk7CkBAIC0xMDQyLDcgKzEwNTIsNyBAQAogCWRldmljZV9wbV9yZW1vdmUoZGV2KTsKIAlkcG1fc3lzZnNfcmVtb3ZlKGRldik7CiAJaWYgKHBhcmVudCkKLQkJa2xpc3RfZGVsKCZkZXYtPmtub2RlX3BhcmVudCk7CisJCWtsaXN0X2RlbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCWlmIChNQUpPUihkZXYtPmRldnQpKSB7CiAJCWRldmljZV9yZW1vdmVfc3lzX2Rldl9lbnRyeShkZXYpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2dF9hdHRyKTsKQEAgLTExMDMsNyArMTExMywxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm5leHRfZGV2aWNlKHN0cnVjdCBrbGlzdF9pdGVyICppKQogewogCXN0cnVjdCBrbGlzdF9ub2RlICpuID0ga2xpc3RfbmV4dChpKTsKLQlyZXR1cm4gbiA/IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9wYXJlbnQpIDogTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZSAqcDsKKworCWlmIChuKSB7CisJCXAgPSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQobik7CisJCWRldiA9IHAtPmRldmljZTsKKwl9CisJcmV0dXJuIGRldjsKIH0KIAogLyoqCkBAIC0xMTI1LDcgKzExNDIsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmNoaWxkOwogCWludCBlcnJvciA9IDA7CiAKLQlrbGlzdF9pdGVyX2luaXQoJnBhcmVudC0+a2xpc3RfY2hpbGRyZW4sICZpKTsKKwlrbGlzdF9pdGVyX2luaXQoJnBhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4sICZpKTsKIAl3aGlsZSAoKGNoaWxkID0gbmV4dF9kZXZpY2UoJmkpKSAmJiAhZXJyb3IpCiAJCWVycm9yID0gZm4oY2hpbGQsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC0xMTU2LDcgKzExNzMsNyBAQAogCWlmICghcGFyZW50KQogCQlyZXR1cm4gTlVMTDsKIAotCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5rbGlzdF9jaGlsZHJlbiwgJmkpOworCWtsaXN0X2l0ZXJfaW5pdCgmcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbiwgJmkpOwogCXdoaWxlICgoY2hpbGQgPSBuZXh0X2RldmljZSgmaSkpKQogCQlpZiAobWF0Y2goY2hpbGQsIGRhdGEpICYmIGdldF9kZXZpY2UoY2hpbGQpKQogCQkJYnJlYWs7CkBAIC0xMzQ4LDcgKzEzNjUsMTAgQEAKIAlkZXYtPnJlbGVhc2UgPSBkZXZpY2VfY3JlYXRlX3JlbGVhc2U7CiAJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CiAKLQl2c25wcmludGYoZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFLCBmbXQsIGFyZ3MpOworCXJldHZhbCA9IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3MoJmRldi0+a29iaiwgZm10LCBhcmdzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcjsKQEAgLTE0NTIsMTkgKzE0NzIsMTUgQEAKIAkJb2xkX2NsYXNzX25hbWUgPSBtYWtlX2NsYXNzX25hbWUoZGV2LT5jbGFzcy0+bmFtZSwgJmRldi0+a29iaik7CiAjZW5kaWYKIAotCW9sZF9kZXZpY2VfbmFtZSA9IGttYWxsb2MoQlVTX0lEX1NJWkUsIEdGUF9LRVJORUwpOworCW9sZF9kZXZpY2VfbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUoZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvbGRfZGV2aWNlX25hbWUpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3RybGNweShvbGRfZGV2aWNlX25hbWUsIGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSk7Ci0Jc3RybGNweShkZXYtPmJ1c19pZCwgbmV3X25hbWUsIEJVU19JRF9TSVpFKTsKIAogCWVycm9yID0ga29iamVjdF9yZW5hbWUoJmRldi0+a29iaiwgbmV3X25hbWUpOwotCWlmIChlcnJvcikgewotCQlzdHJsY3B5KGRldi0+YnVzX2lkLCBvbGRfZGV2aWNlX25hbWUsIEJVU19JRF9TSVpFKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwotCX0KIAogI2lmZGVmIENPTkZJR19TWVNGU19ERVBSRUNBVEVECiAJaWYgKG9sZF9jbGFzc19uYW1lKSB7CkBAIC0xNTQ1LDggKzE1NjEsMTAgQEAKICAqIGRldmljZV9tb3ZlIC0gbW92ZXMgYSBkZXZpY2UgdG8gYSBuZXcgcGFyZW50CiAgKiBAZGV2OiB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IGRldmljZSB0byBiZSBtb3ZlZAogICogQG5ld19wYXJlbnQ6IHRoZSBuZXcgcGFyZW50IG9mIHRoZSBkZXZpY2UgKGNhbiBieSBOVUxMKQorICogQGRwbV9vcmRlcjogaG93IHRvIHJlb3JkZXIgdGhlIGRwbV9saXN0CiAgKi8KLWludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQpCitpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50LAorCQllbnVtIGRwbV9vcmRlciBkcG1fb3JkZXIpCiB7CiAJaW50IGVycm9yOwogCXN0cnVjdCBkZXZpY2UgKm9sZF9wYXJlbnQ7CkBAIC0xNTU2LDYgKzE1NzQsNyBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWRldmljZV9wbV9sb2NrKCk7CiAJbmV3X3BhcmVudCA9IGdldF9kZXZpY2UobmV3X3BhcmVudCk7CiAJbmV3X3BhcmVudF9rb2JqID0gZ2V0X2RldmljZV9wYXJlbnQoZGV2LCBuZXdfcGFyZW50KTsKIApAQCAtMTU3MCw5ICsxNTg5LDEwIEBACiAJb2xkX3BhcmVudCA9IGRldi0+cGFyZW50OwogCWRldi0+cGFyZW50ID0gbmV3X3BhcmVudDsKIAlpZiAob2xkX3BhcmVudCkKLQkJa2xpc3RfcmVtb3ZlKCZkZXYtPmtub2RlX3BhcmVudCk7CisJCWtsaXN0X3JlbW92ZSgmZGV2LT5wLT5rbm9kZV9wYXJlbnQpOwogCWlmIChuZXdfcGFyZW50KSB7Ci0JCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX3BhcmVudCwgJm5ld19wYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfcGFyZW50LAorCQkJICAgICAgICZuZXdfcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAJCXNldF9kZXZfbm9kZShkZXYsIGRldl90b19ub2RlKG5ld19wYXJlbnQpKTsKIAl9CiAKQEAgLTE1ODQsMTEgKzE2MDQsMTEgQEAKIAkJZGV2aWNlX21vdmVfY2xhc3NfbGlua3MoZGV2LCBuZXdfcGFyZW50LCBvbGRfcGFyZW50KTsKIAkJaWYgKCFrb2JqZWN0X21vdmUoJmRldi0+a29iaiwgJm9sZF9wYXJlbnQtPmtvYmopKSB7CiAJCQlpZiAobmV3X3BhcmVudCkKLQkJCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfcGFyZW50KTsKKwkJCQlrbGlzdF9yZW1vdmUoJmRldi0+cC0+a25vZGVfcGFyZW50KTsKIAkJCWRldi0+cGFyZW50ID0gb2xkX3BhcmVudDsKIAkJCWlmIChvbGRfcGFyZW50KSB7Ci0JCQkJa2xpc3RfYWRkX3RhaWwoJmRldi0+a25vZGVfcGFyZW50LAotCQkJCQkgICAgICAgJm9sZF9wYXJlbnQtPmtsaXN0X2NoaWxkcmVuKTsKKwkJCQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9wYXJlbnQsCisJCQkJCSAgICAgICAmb2xkX3BhcmVudC0+cC0+a2xpc3RfY2hpbGRyZW4pOwogCQkJCXNldF9kZXZfbm9kZShkZXYsIGRldl90b19ub2RlKG9sZF9wYXJlbnQpKTsKIAkJCX0KIAkJfQpAQCAtMTU5Niw5ICsxNjE2LDIzIEBACiAJCXB1dF9kZXZpY2UobmV3X3BhcmVudCk7CiAJCWdvdG8gb3V0OwogCX0KKwlzd2l0Y2ggKGRwbV9vcmRlcikgeworCWNhc2UgRFBNX09SREVSX05PTkU6CisJCWJyZWFrOworCWNhc2UgRFBNX09SREVSX0RFVl9BRlRFUl9QQVJFTlQ6CisJCWRldmljZV9wbV9tb3ZlX2FmdGVyKGRldiwgbmV3X3BhcmVudCk7CisJCWJyZWFrOworCWNhc2UgRFBNX09SREVSX1BBUkVOVF9CRUZPUkVfREVWOgorCQlkZXZpY2VfcG1fbW92ZV9iZWZvcmUobmV3X3BhcmVudCwgZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfREVWX0xBU1Q6CisJCWRldmljZV9wbV9tb3ZlX2xhc3QoZGV2KTsKKwkJYnJlYWs7CisJfQogb3V0X3B1dDoKIAlwdXRfZGV2aWNlKG9sZF9wYXJlbnQpOwogb3V0OgorCWRldmljZV9wbV91bmxvY2soKTsKIAlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCAxMzUyMzEyLi5mMTdjMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMzAsNyArMzAsNyBAQAogCiBzdGF0aWMgdm9pZCBkcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPmtub2RlX2RyaXZlcikpIHsKKwlpZiAoa2xpc3Rfbm9kZV9hdHRhY2hlZCgmZGV2LT5wLT5rbm9kZV9kcml2ZXIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkZXZpY2UgJXMgYWxyZWFkeSBib3VuZFxuIiwKIAkJCV9fZnVuY19fLCBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOwogCQlyZXR1cm47CkBAIC00Myw3ICs0Myw3IEBACiAJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsCiAJCQkJCSAgICAgQlVTX05PVElGWV9CT1VORF9EUklWRVIsIGRldik7CiAKLQlrbGlzdF9hZGRfdGFpbCgmZGV2LT5rbm9kZV9kcml2ZXIsICZkZXYtPmRyaXZlci0+cC0+a2xpc3RfZGV2aWNlcyk7CisJa2xpc3RfYWRkX3RhaWwoJmRldi0+cC0+a25vZGVfZHJpdmVyLCAmZGV2LT5kcml2ZXItPnAtPmtsaXN0X2RldmljZXMpOwogfQogCiBzdGF0aWMgaW50IGRyaXZlcl9zeXNmc19hZGQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTcyLDE2ICsxNzIsMTIgQEAKIC8qKgogICogd2FpdF9mb3JfZGV2aWNlX3Byb2JlCiAgKiBXYWl0IGZvciBkZXZpY2UgcHJvYmluZyB0byBiZSBjb21wbGV0ZWQuCi0gKgotICogTm90ZTogdGhpcyBmdW5jdGlvbiBwb2xscyBhdCAxMDAgbXNlYyBpbnRlcnZhbHMuCiAgKi8KLWludCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCkKK3ZvaWQgd2FpdF9mb3JfZGV2aWNlX3Byb2JlKHZvaWQpCiB7CiAJLyogd2FpdCBmb3IgdGhlIGtub3duIGRldmljZXMgdG8gY29tcGxldGUgdGhlaXIgcHJvYmluZyAqLwotCXdoaWxlIChkcml2ZXJfcHJvYmVfZG9uZSgpICE9IDApCi0JCW1zbGVlcCgxMDApOworCXdhaXRfZXZlbnQocHJvYmVfd2FpdHF1ZXVlLCBhdG9taWNfcmVhZCgmcHJvYmVfY291bnQpID09IDApOwogCWFzeW5jX3N5bmNocm9uaXplX2Z1bGwoKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xODksMTQgKzE4NSw4IEBACiAgKiBAZHJ2OiBkcml2ZXIgdG8gYmluZCBhIGRldmljZSB0bwogICogQGRldjogZGV2aWNlIHRvIHRyeSB0byBiaW5kIHRvIHRoZSBkcml2ZXIKICAqCi0gKiBGaXJzdCwgd2UgY2FsbCB0aGUgYnVzJ3MgbWF0Y2ggZnVuY3Rpb24sIGlmIG9uZSBwcmVzZW50LCB3aGljaCBzaG91bGQKLSAqIGNvbXBhcmUgdGhlIGRldmljZSBJRHMgdGhlIGRyaXZlciBzdXBwb3J0cyB3aXRoIHRoZSBkZXZpY2UgSURzIG9mIHRoZQotICogZGV2aWNlLiBOb3RlIHdlIGRvbid0IGRvIHRoaXMgb3Vyc2VsdmVzIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB0aGUKLSAqIGZvcm1hdCBvZiB0aGUgSUQgc3RydWN0dXJlcywgbm9yIHdoYXQgaXMgdG8gYmUgY29uc2lkZXJlZCBhIG1hdGNoIGFuZAotICogd2hhdCBpcyBub3QuCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDEgaWYgYSBtYXRjaCBpcyBmb3VuZCwgLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzCi0gKiBub3QgcmVnaXN0ZXJlZCwgYW5kIDAgb3RoZXJ3aXNlLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZCwKKyAqIDEgaWYgdGhlIGRldmljZSBpcyBib3VuZCBzdWNlc3NmdWxseSBhbmQgMCBvdGhlcndpc2UuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEBkZXYtPnNlbSBoZWxkLiAgV2hlbiBjYWxsZWQgZm9yIGEKICAqIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudC0+c2VtIG11c3QgYmUgaGVsZCBhcyB3ZWxsLgpAQCAtMjA3LDIxICsxOTcsMjIgQEAKIAogCWlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGRydi0+YnVzLT5tYXRjaCAmJiAhZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KSkKLQkJZ290byBkb25lOwogCiAJcHJfZGVidWcoImJ1czogJyVzJzogJXM6IG1hdGNoZWQgZGV2aWNlICVzIHdpdGggZHJpdmVyICVzXG4iLAogCQkgZHJ2LT5idXMtPm5hbWUsIF9fZnVuY19fLCBkZXZfbmFtZShkZXYpLCBkcnYtPm5hbWUpOwogCiAJcmV0ID0gcmVhbGx5X3Byb2JlKGRldiwgZHJ2KTsKIAotZG9uZToKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2aWNlX2F0dGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoIWRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiBkcml2ZXJfcHJvYmVfZGV2aWNlKGRydiwgZGV2KTsKIH0KIApAQCAtMjc0LDcgKzI2NSw3IEBACiAJICogaXMgYW4gZXJyb3IuCiAJICovCiAKLQlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQorCWlmICghZHJpdmVyX21hdGNoX2RldmljZShkcnYsIGRldikpCiAJCXJldHVybiAwOwogCiAJaWYgKGRldi0+cGFyZW50KQkvKiBOZWVkZWQgZm9yIFVTQiAqLwpAQCAtMzI3LDcgKzMxOCw3IEBACiAJCQlkcnYtPnJlbW92ZShkZXYpOwogCQlkZXZyZXNfcmVsZWFzZV9hbGwoZGV2KTsKIAkJZGV2LT5kcml2ZXIgPSBOVUxMOwotCQlrbGlzdF9yZW1vdmUoJmRldi0+a25vZGVfZHJpdmVyKTsKKwkJa2xpc3RfcmVtb3ZlKCZkZXYtPnAtPmtub2RlX2RyaXZlcik7CiAJfQogfQogCkBAIC0zNTcsNiArMzQ4LDcgQEAKICAqLwogdm9pZCBkcml2ZXJfZGV0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCWZvciAoOzspIHsKQEAgLTM2NSw4ICszNTcsMTAgQEAKIAkJCXNwaW5fdW5sb2NrKCZkcnYtPnAtPmtsaXN0X2RldmljZXMua19sb2NrKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWRldiA9IGxpc3RfZW50cnkoZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbGlzdC5wcmV2LAotCQkJCXN0cnVjdCBkZXZpY2UsIGtub2RlX2RyaXZlci5uX25vZGUpOworCQlkZXZfcHJ2ID0gbGlzdF9lbnRyeShkcnYtPnAtPmtsaXN0X2RldmljZXMua19saXN0LnByZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsCisJCQkJICAgICBrbm9kZV9kcml2ZXIubl9ub2RlKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOwogCQlnZXRfZGV2aWNlKGRldik7CiAJCXNwaW5fdW5sb2NrKCZkcnYtPnAtPmtsaXN0X2RldmljZXMua19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RyaXZlci5jIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCmluZGV4IDFlMmJkYTcuLmM1MWYxMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKQEAgLTE5LDcgKzE5LDE0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZSAqbmV4dF9kZXZpY2Uoc3RydWN0IGtsaXN0X2l0ZXIgKmkpCiB7CiAJc3RydWN0IGtsaXN0X25vZGUgKm4gPSBrbGlzdF9uZXh0KGkpOwotCXJldHVybiBuID8gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2RyaXZlcikgOiBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9wcml2YXRlICpkZXZfcHJ2OworCisJaWYgKG4pIHsKKwkJZGV2X3BydiA9IHRvX2RldmljZV9wcml2YXRlX2RyaXZlcihuKTsKKwkJZGV2ID0gZGV2X3Bydi0+ZGV2aWNlOworCX0KKwlyZXR1cm4gZGV2OwogfQogCiAvKioKQEAgLTQyLDcgKzQ5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgc3RhcnQgPyAmc3RhcnQtPmtub2RlX2RyaXZlciA6IE5VTEwpOworCQkJICAgICBzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfZHJpdmVyIDogTlVMTCk7CiAJd2hpbGUgKChkZXYgPSBuZXh0X2RldmljZSgmaSkpICYmICFlcnJvcikKIAkJZXJyb3IgPSBmbihkZXYsIGRhdGEpOwogCWtsaXN0X2l0ZXJfZXhpdCgmaSk7CkBAIC03Niw3ICs4Myw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJa2xpc3RfaXRlcl9pbml0X25vZGUoJmRydi0+cC0+a2xpc3RfZGV2aWNlcywgJmksCi0JCQkgICAgIChzdGFydCA/ICZzdGFydC0+a25vZGVfZHJpdmVyIDogTlVMTCkpOworCQkJICAgICAoc3RhcnQgPyAmc3RhcnQtPnAtPmtub2RlX2RyaXZlciA6IE5VTEwpKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkpCiAJCWlmIChtYXRjaChkZXYsIGRhdGEpICYmIGdldF9kZXZpY2UoZGV2KSkKIAkJCWJyZWFrOwpAQCAtMjE2LDYgKzIyMyw4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqb3RoZXI7CiAKKwlCVUdfT04oIWRydi0+YnVzLT5wKTsKKwogCWlmICgoZHJ2LT5idXMtPnByb2JlICYmIGRydi0+cHJvYmUpIHx8CiAJICAgIChkcnYtPmJ1cy0+cmVtb3ZlICYmIGRydi0+cmVtb3ZlKSB8fAogCSAgICAoZHJ2LT5idXMtPnNodXRkb3duICYmIGRydi0+c2h1dGRvd24pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA0NDY5OWQ5Li5kM2E1OWM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCWZfZGV2LT5wYXJlbnQgPSBkZXZpY2U7CiAJZl9kZXYtPmNsYXNzID0gJmZpcm13YXJlX2NsYXNzOwogCWRldl9zZXRfZHJ2ZGF0YShmX2RldiwgZndfcHJpdik7Ci0JZl9kZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIDEpOwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAl9CiAKIAlpZiAodWV2ZW50KQotCQlmX2Rldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIDApOwogCSpkZXZfcCA9IGZfZGV2OwogCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDM0OWExMDEuLmQyMTk4ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0yMTcsNiArMjE3LDcgQEAKIAlpZiAoZCkgewogCQltZW1jcHkoZCwgZGF0YSwgc2l6ZSk7CiAJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKKwkJcGRldi0+cGxhdGZvcm1fZGF0YSA9IGQ7CiAJfQogCXJldHVybiBkID8gMCA6IC1FTk9NRU07CiB9CkBAIC0yNDYsNiArMjQ3LDIxIEBACiAJZWxzZQogCQlkZXZfc2V0X25hbWUoJnBkZXYtPmRldiwgcGRldi0+bmFtZSk7CiAKKwkvKiBXZSB3aWxsIHJlbW92ZSBwbGF0Zm9ybV9kYXRhIGZpZWxkIGZyb20gc3RydWN0IGRldmljZQorCSogaWYgYWxsIHBsYXRmb3JtIGRldmljZXMgcGFzcyBpdHMgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YQorCSogZnJvbSBwbGF0Zm9ybV9kZXZpY2UuIFRoZSBjb252ZXJzaW9uIGlzIGdvaW5nIHRvIGJlIGEKKwkqIGxvbmcgdGltZSwgc28gd2UgYWxsb3cgdGhlIHR3byBjYXNlcyBjb2V4aXN0IHRvIG1ha2UKKwkqIHRoaXMga2luZCBvZiBmaXggbW9yZSBlYXNpbHkqLworCWlmIChwZGV2LT5wbGF0Zm9ybV9kYXRhICYmIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogdXNlIHdoaWNoIHBsYXRmb3JtX2RhdGE/XG4iLAorCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwl9IGVsc2UgaWYgKHBkZXYtPnBsYXRmb3JtX2RhdGEpIHsKKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGV2LT5wbGF0Zm9ybV9kYXRhOworCX0gZWxzZSBpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJcGRldi0+cGxhdGZvcm1fZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpwLCAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKIApAQCAtNTg0LDEwICs2MDAsMjUgQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAKLQlhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1wbGF0Zm9ybTolcyIsIHBkZXYtPm5hbWUpOworCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPSVzJXMiLCBQTEFURk9STV9NT0RVTEVfUFJFRklYLAorCQkocGRldi0+aWRfZW50cnkpID8gcGRldi0+aWRfZW50cnktPm5hbWUgOiBwZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKnBsYXRmb3JtX21hdGNoX2lkKAorCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQsCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXdoaWxlIChpZC0+bmFtZVswXSkgeworCQlpZiAoc3RyY21wKHBkZXYtPm5hbWUsIGlkLT5uYW1lKSA9PSAwKSB7CisJCQlwZGV2LT5pZF9lbnRyeSA9IGlkOworCQkJcmV0dXJuIGlkOworCQl9CisJCWlkKys7CisJfQorCXJldHVybiBOVUxMOworfQorCiAvKioKICAqIHBsYXRmb3JtX21hdGNoIC0gYmluZCBwbGF0Zm9ybSBkZXZpY2UgdG8gcGxhdGZvcm0gZHJpdmVyLgogICogQGRldjogZGV2aWNlLgpAQCAtNjAzLDkgKzYzNCwxNCBAQAogICovCiBzdGF0aWMgaW50IHBsYXRmb3JtX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRydik7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBpZCB0YWJsZSBmaXJzdCAqLworCWlmIChwZHJ2LT5pZF90YWJsZSkKKwkJcmV0dXJuIHBsYXRmb3JtX21hdGNoX2lkKHBkcnYtPmlkX3RhYmxlLCBwZGV2KSAhPSBOVUxMOworCisJLyogZmFsbC1iYWNrIHRvIGRyaXZlciBuYW1lIG1hdGNoICovCiAJcmV0dXJuIChzdHJjbXAocGRldi0+bmFtZSwgZHJ2LT5uYW1lKSA9PSAwKTsKIH0KIApAQCAtNjIzLDI2ICs2NTksMjQgQEAKIAogc3RhdGljIGludCBwbGF0Zm9ybV9sZWdhY3lfc3VzcGVuZF9sYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlmIChkZXYtPmRyaXZlciAmJiBkcnYtPnN1c3BlbmRfbGF0ZSkKLQkJcmV0ID0gZHJ2LT5zdXNwZW5kX2xhdGUocGRldiwgbWVzZyk7CisJaWYgKGRldi0+ZHJpdmVyICYmIHBkcnYtPnN1c3BlbmRfbGF0ZSkKKwkJcmV0ID0gcGRydi0+c3VzcGVuZF9sYXRlKHBkZXYsIG1lc2cpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwbGF0Zm9ybV9sZWdhY3lfcmVzdW1lX2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQgPSAwOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+cmVzdW1lX2Vhcmx5KQotCQlyZXQgPSBkcnYtPnJlc3VtZV9lYXJseShwZGV2KTsKKwlpZiAoZGV2LT5kcml2ZXIgJiYgcGRydi0+cmVzdW1lX2Vhcmx5KQorCQlyZXQgPSBwZHJ2LT5yZXN1bWVfZWFybHkocGRldik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggMmQxNGY0YS4uZTI1NTM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC0xMDcsNiArMTA3LDUwIEBACiB9CiAKIC8qKgorICoJZGV2aWNlX3BtX21vdmVfYmVmb3JlIC0gbW92ZSBkZXZpY2UgaW4gZHBtX2xpc3QKKyAqCUBkZXZhOiAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqCUBkZXZiOiAgRGV2aWNlIEBkZXZhIHNob3VsZCBjb21lIGJlZm9yZQorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQoreworCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIGJlZm9yZSAlczolc1xuIiwKKwkJIGRldmEtPmJ1cyA/IGRldmEtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZhLT5rb2JqKSwKKwkJIGRldmItPmJ1cyA/IGRldmItPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZiLT5rb2JqKSk7CisJLyogRGVsZXRlIGRldmEgZnJvbSBkcG1fbGlzdCBhbmQgcmVpbnNlcnQgYmVmb3JlIGRldmIuICovCisJbGlzdF9tb3ZlX3RhaWwoJmRldmEtPnBvd2VyLmVudHJ5LCAmZGV2Yi0+cG93ZXIuZW50cnkpOworfQorCisvKioKKyAqCWRldmljZV9wbV9tb3ZlX2FmdGVyIC0gbW92ZSBkZXZpY2UgaW4gZHBtX2xpc3QKKyAqCUBkZXZhOiAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqCUBkZXZiOiAgRGV2aWNlIEBkZXZhIHNob3VsZCBjb21lIGFmdGVyCisgKi8KK3ZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwgc3RydWN0IGRldmljZSAqZGV2YikKK3sKKwlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyBhZnRlciAlczolc1xuIiwKKwkJIGRldmEtPmJ1cyA/IGRldmEtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZhLT5rb2JqKSwKKwkJIGRldmItPmJ1cyA/IGRldmItPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXZiLT5rb2JqKSk7CisJLyogRGVsZXRlIGRldmEgZnJvbSBkcG1fbGlzdCBhbmQgcmVpbnNlcnQgYWZ0ZXIgZGV2Yi4gKi8KKwlsaXN0X21vdmUoJmRldmEtPnBvd2VyLmVudHJ5LCAmZGV2Yi0+cG93ZXIuZW50cnkpOworfQorCisvKioKKyAqIAlkZXZpY2VfcG1fbW92ZV9sYXN0IC0gbW92ZSBkZXZpY2UgdG8gZW5kIG9mIGRwbV9saXN0CisgKiAJQGRldjogICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAorICovCit2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqZGV2KQoreworCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIHRvIGVuZCBvZiBsaXN0XG4iLAorCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAorCQkga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKKwlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9saXN0KTsKK30KKworLyoqCiAgKglwbV9vcCAtIGV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3BpYXRlIGZvciBnaXZlbiBQTSBldmVudAogICoJQGRldjoJRGV2aWNlLgogICoJQG9wczoJUE0gb3BlcmF0aW9ucyB0byBjaG9vc2UgZnJvbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKaW5kZXggNDFmNTFmYS4uYzdjYjRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKQEAgLTE4LDExICsxOCwxOSBAQAogCiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICopOwogCiAjZWxzZSAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICpkZXZhLAorCQkJCQkgc3RydWN0IGRldmljZSAqZGV2Yikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICpkZXZhLAorCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXZiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqZGV2KSB7fQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3N5cy5jIGIvZHJpdmVycy9iYXNlL3N5cy5jCmluZGV4IGI0MjhjOGMuLmNiZDM2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9zeXMuYworKysgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKQEAgLTMwLDEwICszMCwxMCBAQAogCiAKIHN0YXRpYyBzc2l6ZV90Ci1zeXNkZXZfc2hvdyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICogYnVmZmVyKQorc3lzZGV2X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZmZlcikKIHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldiA9IHRvX3N5c2Rldihrb2JqKTsKLQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIHN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiA9IHRvX3N5c2Rldihrb2JqKTsKKwlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKIAogCWlmIChzeXNkZXZfYXR0ci0+c2hvdykKIAkJcmV0dXJuIHN5c2Rldl9hdHRyLT5zaG93KHN5c2Rldiwgc3lzZGV2X2F0dHIsIGJ1ZmZlcik7CkBAIC00MiwxMSArNDIsMTEgQEAKIAogCiBzdGF0aWMgc3NpemVfdAotc3lzZGV2X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIsCi0JICAgICBjb25zdCBjaGFyICogYnVmZmVyLCBzaXplX3QgY291bnQpCitzeXNkZXZfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJICAgICBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldiA9IHRvX3N5c2Rldihrb2JqKTsKLQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIHN5c2Rldl9hdHRyID0gdG9fc3lzZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiA9IHRvX3N5c2Rldihrb2JqKTsKKwlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKIAogCWlmIChzeXNkZXZfYXR0ci0+c3RvcmUpCiAJCXJldHVybiBzeXNkZXZfYXR0ci0+c3RvcmUoc3lzZGV2LCBzeXNkZXZfYXR0ciwgYnVmZmVyLCBjb3VudCk7CkBAIC02MywxMyArNjMsMTMgQEAKIH07CiAKIAotaW50IHN5c2Rldl9jcmVhdGVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqIHMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogYSkKK2ludCBzeXNkZXZfY3JlYXRlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphKQogewogCXJldHVybiBzeXNmc19jcmVhdGVfZmlsZSgmcy0+a29iaiwgJmEtPmF0dHIpOwogfQogCiAKLXZvaWQgc3lzZGV2X3JlbW92ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICogcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBhKQordm9pZCBzeXNkZXZfcmVtb3ZlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphKQogewogCXN5c2ZzX3JlbW92ZV9maWxlKCZzLT5rb2JqLCAmYS0+YXR0cik7CiB9CkBAIC04NCw3ICs4NCw3IEBACiBzdGF0aWMgc3NpemVfdCBzeXNkZXZfY2xhc3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY2hhciAqYnVmZmVyKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKIAlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOwogCiAJaWYgKGNsYXNzX2F0dHItPnNob3cpCkBAIC05NSw4ICs5NSw4IEBACiBzdGF0aWMgc3NpemVfdCBzeXNkZXZfY2xhc3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKiBjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MgPSB0b19zeXNkZXZfY2xhc3Moa29iaik7CisJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKIAogCWlmIChjbGFzc19hdHRyLT5zdG9yZSkKIAkJcmV0dXJuIGNsYXNzX2F0dHItPnN0b3JlKGNsYXNzLCBidWZmZXIsIGNvdW50KTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGtzZXQgKnN5c3RlbV9rc2V0OwogCi1pbnQgc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMpCitpbnQgc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscykKIHsKIAlwcl9kZWJ1ZygiUmVnaXN0ZXJpbmcgc3lzZGV2IGNsYXNzICclcydcbiIsIGNscy0+bmFtZSk7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXJldHVybiBrc2V0X3JlZ2lzdGVyKCZjbHMtPmtzZXQpOwogfQogCi12b2lkIHN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMpCit2b2lkIHN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscykKIHsKIAlwcl9kZWJ1ZygiVW5yZWdpc3RlcmluZyBzeXNkZXYgY2xhc3MgJyVzJ1xuIiwKIAkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKQEAgLTIwMyw4ICsyMDMsOCBAQAogICoJQGNsczoJQ2xhc3MgZHJpdmVyIGJlbG9uZ3MgdG8uCiAgKglAZHJ2OglEcml2ZXIuCiAgKi8KLXZvaWQgc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMsCi0JCQkgICAgICBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydikKK3ZvaWQgc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscywKKwkJCSAgICAgIHN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnYpCiB7CiAJbXV0ZXhfbG9jaygmc3lzZGV2X2RyaXZlcnNfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmZHJ2LT5lbnRyeSk7CkBAIC0yMjksMTAgKzIyOSwxMCBAQAogICoJQHN5c2RldjoJZGV2aWNlIGluIHF1ZXN0aW9uCiAgKgogICovCi1pbnQgc3lzZGV2X3JlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2KQoraW50IHN5c2Rldl9yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogewogCWludCBlcnJvcjsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzID0gc3lzZGV2LT5jbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzID0gc3lzZGV2LT5jbHM7CiAKIAlpZiAoIWNscykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJCQkgICAgIHN5c2Rldi0+aWQpOwogCiAJaWYgKCFlcnJvcikgewotCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydjsKKwkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKIAogCQlwcl9kZWJ1ZygiUmVnaXN0ZXJpbmcgc3lzIGRldmljZSAnJXMnXG4iLAogCQkJIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7CkBAIC0yNzQsOSArMjc0LDkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXZvaWQgc3lzZGV2X3VucmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCit2b2lkIHN5c2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCiB7Ci0Jc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnY7CisJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKIAogCW11dGV4X2xvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmc3lzZGV2LT5jbHMtPmRyaXZlcnMsIGVudHJ5KSB7CkBAIC0zMDUsMTkgKzMwNSwxOSBAQAogICovCiB2b2lkIHN5c2Rldl9zaHV0ZG93bih2b2lkKQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHM7CisJc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwogCiAJcHJfZGVidWcoIlNodXR0aW5nIERvd24gU3lzdGVtIERldmljZXNcbiIpOwogCiAJbXV0ZXhfbG9jaygmc3lzZGV2X2RyaXZlcnNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGNscywgJnN5c3RlbV9rc2V0LT5saXN0LCBrc2V0LmtvYmouZW50cnkpIHsKLQkJc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXY7CisJCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKIAkJcHJfZGVidWcoIlNodXR0aW5nIGRvd24gdHlwZSAnJXMnOlxuIiwKIAkJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShzeXNkZXYsICZjbHMtPmtzZXQubGlzdCwga29iai5lbnRyeSkgewotCQkJc3RydWN0IHN5c2Rldl9kcml2ZXIgKiBkcnY7CisJCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCQkJcHJfZGVidWcoIiAlc1xuIiwga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKIAogCQkJLyogQ2FsbCBhdXhpbGxhcnkgZHJpdmVycyBmaXJzdCAqLwpAQCAtMzY0LDcgKzM2NCw3IEBACiAgKi8KIGludCBzeXNkZXZfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHM7CiAJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgKmVycl9kZXY7CiAJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydiwgKmVycl9kcnY7CiAJaW50IHJldDsKQEAgLTQ0MiwxMiArNDQyLDEyIEBACiAgKi8KIGludCBzeXNkZXZfcmVzdW1lKHZvaWQpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHM7CiAKIAlwcl9kZWJ1ZygiUmVzdW1pbmcgU3lzdGVtIERldmljZXNcbiIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2OworCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJCXByX2RlYnVnKCJSZXN1bWluZyB0eXBlICclcyc6XG4iLAogCQkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZyBiL2RyaXZlcnMvYmxvY2svS2NvbmZpZwppbmRleCAwMzQ0YThhLi5lN2I4YWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcKKysrIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCkBAIC00NSw2ICs0NSwxMyBAQAogCSAgSWYgeW91IGhhdmUgYSBTV0lNLTMgKFN1cGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUgMzsgZnJvbSBBcHBsZSkKIAkgIGZsb3BweSBjb250cm9sbGVyLCBzYXkgWSBoZXJlLiBNb3N0IGNvbW1vbmx5IGZvdW5kIGluIFBvd2VyTWFjcy4KIAorY29uZmlnIEJMS19ERVZfU1dJTQorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHkiCisJZGVwZW5kcyBvbiBNNjhLICYmIE1BQworCWhlbHAKKwkgIFlvdSBzaG91bGQgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZsb3BweSBzdXBwb3J0CisJICBhbmQgeW91IGRvbid0IGhhdmUgYSBJSSwgSUlmeCwgUTkwMCwgUTk1MCBvciBBViBzZXJpZXMuCisKIGNvbmZpZyBBTUlHQV9aMlJBTQogCXRyaXN0YXRlICJBbWlnYSBab3JybyBJSSByYW1kaXNrIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBaT1JSTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKaW5kZXggODdlMTIwZS4uMzE0NTE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogIyAKIAogb2JqLSQoQ09ORklHX01BQ19GTE9QUFkpCSs9IHN3aW0zLm8KK29iai0kKENPTkZJR19CTEtfREVWX1NXSU0pCSs9IHN3aW1fbW9kLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0ZEKQkrPSBmbG9wcHkubwogb2JqLSQoQ09ORklHX0FNSUdBX0ZMT1BQWSkJKz0gYW1pZmxvcC5vCiBvYmotJChDT05GSUdfUFMzX0RJU0spCQkrPSBwczNkaXNrLm8KQEAgLTMzLDMgKzM0LDUgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX0hEKQkrPSBoZC5vCiAKIG9iai0kKENPTkZJR19YRU5fQkxLREVWX0ZST05URU5EKQkrPSB4ZW4tYmxrZnJvbnQubworCitzd2ltX21vZC1vYmpzCTo9IHN3aW0ubyBzd2ltX2FzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VuZXQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCmluZGV4IGM2MDk5YmEuLmNlMGQ2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhb2VfcHQgPSB7CitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFvZV9wdCBfX3JlYWRfbW9zdGx5ID0gewogCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BT0UpLAogCS5mdW5jID0gYW9lbmV0X3JjdiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggNGY5YjZkNy4uNWQwZTEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMzg5OCw2ICszODk4LDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGNjaXNzX2luaXQodm9pZCkKIHsKKwkvKgorCSAqIFRoZSBoYXJkd2FyZSByZXF1aXJlcyB0aGF0IGNvbW1hbmRzIGFyZSBhbGlnbmVkIG9uIGEgNjQtYml0CisJICogYm91bmRhcnkuIEdpdmVuIHRoYXQgd2UgdXNlIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgdG8gYWxsb2NhdGUgYW4KKwkgKiBhcnJheSBvZiB0aGVtLCB0aGUgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcy4KKwkgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCkgJSA4KTsKKwogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlxuIik7CiAKIAkvKiBSZWdpc3RlciBmb3Igb3VyIFBDSSBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggNWQzOWRmMS4uY2EyNjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtNjE3LDYgKzYxNyw3IEBACiAJaW50IGk7CiAKIAljLT5wY2lfZGV2ID0gcGRldjsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIEVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggODNkOGVkMy4uYzJjOTVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MTM1LDEwICs0MTM1LDkgQEAKIHN0YXRpYyBzc2l6ZV90IGZsb3BweV9jbW9zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IGRyaXZlOwogCi0JcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsZGV2KTsKIAlkcml2ZSA9IHAtPmlkOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVYXG4iLCBVRFAtPmNtb3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCBiZjAzNDU1Li4yNjIxZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNDc0LDEwICs0NzQsMzUgQEAKIAlpbnQgcmV0OwogCiAJcG9zID0gKChsb2ZmX3QpIGJpby0+Ymlfc2VjdG9yIDw8IDkpICsgbG8tPmxvX29mZnNldDsKLQlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpCisKKwlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpIHsKKwkJaW50IGJhcnJpZXIgPSBiaW9fYmFycmllcihiaW8pOworCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLT5sb19iYWNraW5nX2ZpbGU7CisKKwkJaWYgKGJhcnJpZXIpIHsKKwkJCWlmICh1bmxpa2VseSghZmlsZS0+Zl9vcC0+ZnN5bmMpKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IHZmc19mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCiAJCXJldCA9IGxvX3NlbmQobG8sIGJpbywgcG9zKTsKLQllbHNlCisKKwkJaWYgKGJhcnJpZXIgJiYgIXJldCkgeworCQkJcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJcmV0ID0gLUVJTzsKKwkJfQorCX0gZWxzZQogCQlyZXQgPSBsb19yZWNlaXZlKGxvLCBiaW8sIGxvLT5sb19ibG9ja3NpemUsIHBvcyk7CisKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MjYsNiArODUxLDkgQEAKIAlsby0+bG9fcXVldWUtPnF1ZXVlZGF0YSA9IGxvOwogCWxvLT5sb19xdWV1ZS0+dW5wbHVnX2ZuID0gbG9vcF91bnBsdWc7CiAKKwlpZiAoIShsb19mbGFncyAmIExPX0ZMQUdTX1JFQURfT05MWSkgJiYgZmlsZS0+Zl9vcC0+ZnN5bmMpCisJCWJsa19xdWV1ZV9vcmRlcmVkKGxvLT5sb19xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CisKIAlzZXRfY2FwYWNpdHkobG8tPmxvX2Rpc2ssIHNpemUpOwogCWJkX3NldF9zaXplKGJkZXYsIHNpemUgPDwgOSk7CiAKQEAgLTk0MSwxMSArOTY5LDE4IEBACiAJCWJkX3NldF9zaXplKGJkZXYsIDApOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtPmZfbWFwcGluZywgZ2ZwKTsKIAlsby0+bG9fc3RhdGUgPSBMb191bmJvdW5kOwotCWZwdXQoZmlscCk7CiAJLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAlpZiAobWF4X3BhcnQgPiAwKQogCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CisJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwkvKgorCSAqIE5lZWQgbm90IGhvbGQgbG9fY3RsX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLgorCSAqIENhbGxpbmcgZnB1dCBob2xkaW5nIGxvX2N0bF9tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyCisJICogbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMgZnB1dCBjYW4gdGFrZQorCSAqIGJkX211dGV4IHdoaWNoIGlzIHVzdWFsbHkgdGFrZW4gYmVmb3JlIGxvX2N0bF9tdXRleC4KKwkgKi8KKwlmcHV0KGZpbHApOwogCXJldHVybiAwOwogfQogCkBAIC0xMTYzLDcgKzExOTgsNyBAQAogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZsby0+bG9fY3RsX211dGV4LCAxKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTE9PUF9TRVRfRkQ6CiAJCWVyciA9IGxvb3Bfc2V0X2ZkKGxvLCBtb2RlLCBiZGV2LCBhcmcpOwpAQCAtMTE3Miw3ICsxMjA3LDEwIEBACiAJCWVyciA9IGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpOwogCQlicmVhazsKIAljYXNlIExPT1BfQ0xSX0ZEOgorCQkvKiBsb29wX2Nscl9mZCB3b3VsZCBoYXZlIHVubG9ja2VkIGxvX2N0bF9tdXRleCBvbiBzdWNjZXNzICovCiAJCWVyciA9IGxvb3BfY2xyX2ZkKGxvLCBiZGV2KTsKKwkJaWYgKCFlcnIpCisJCQlnb3RvIG91dF91bmxvY2tlZDsKIAkJYnJlYWs7CiAJY2FzZSBMT09QX1NFVF9TVEFUVVM6CiAJCWVyciA9IGxvb3Bfc2V0X3N0YXR1c19vbGQobG8sIChzdHJ1Y3QgbG9vcF9pbmZvIF9fdXNlciAqKSBhcmcpOwpAQCAtMTE5MCw2ICsxMjI4LDggQEAKIAkJZXJyID0gbG8tPmlvY3RsID8gbG8tPmlvY3RsKGxvLCBjbWQsIGFyZykgOiAtRUlOVkFMOwogCX0KIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCitvdXRfdW5sb2NrZWQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjJjYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKQEAgLTAsMCArMSw5OTUgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFNXSU0gKFNhbmRlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBmbG9wcHkgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyIDxMYXVyZW50QGx2aXZpZXIuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxCisgKiBiYXNlZCBvbiBTV0lNMyBkcml2ZXIgKGMpIFBhdWwgTWFja2VycmFzLCAxOTk2CisgKiBiYXNlZCBvbiBuZXRCU0QgSVdNIGRyaXZlciAoYykgMTk5NywgMTk5OCBIYXVrZSBGYXRoLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogMjAwNC0wOC0yMSAobHYpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICogMjAwOC0xMC0zMCAobHYpIC0gUG9ydCB0byAyLjYKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KKworI2RlZmluZSBDQVJETkFNRSAic3dpbSIKKworc3RydWN0IHNlY3Rvcl9oZWFkZXIgeworCXVuc2lnbmVkIGNoYXIgc2lkZTsKKwl1bnNpZ25lZCBjaGFyIHRyYWNrOworCXVuc2lnbmVkIGNoYXIgc2VjdG9yOworCXVuc2lnbmVkIGNoYXIgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGNyYzA7CisJdW5zaWduZWQgY2hhciBjcmMxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVmVyc2lvbiAwLjIgKDIwMDgtMTAtMzApIgorCisjZGVmaW5lIFJFRyh4KQl1bnNpZ25lZCBjaGFyIHgsIHggIyMgX3BhZFsweDIwMCAtIDFdOworCitzdHJ1Y3Qgc3dpbSB7CisJUkVHKHdyaXRlX2RhdGEpCisJUkVHKHdyaXRlX21hcmspCisJUkVHKHdyaXRlX0NSQykKKwlSRUcod3JpdGVfcGFyYW1ldGVyKQorCVJFRyh3cml0ZV9waGFzZSkKKwlSRUcod3JpdGVfc2V0dXApCisJUkVHKHdyaXRlX21vZGUwKQorCVJFRyh3cml0ZV9tb2RlMSkKKworCVJFRyhyZWFkX2RhdGEpCisJUkVHKHJlYWRfbWFyaykKKwlSRUcocmVhZF9lcnJvcikKKwlSRUcocmVhZF9wYXJhbWV0ZXIpCisJUkVHKHJlYWRfcGhhc2UpCisJUkVHKHJlYWRfc2V0dXApCisJUkVHKHJlYWRfc3RhdHVzKQorCVJFRyhyZWFkX2hhbmRzaGFrZSkKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgc3dpbV93cml0ZShiYXNlLCByZWcsIHYpIAlvdXRfOCgmKGJhc2UpLT53cml0ZV8jI3JlZywgKHYpKQorI2RlZmluZSBzd2ltX3JlYWQoYmFzZSwgcmVnKQkJaW5fOCgmKGJhc2UpLT5yZWFkXyMjcmVnKQorCisvKiBJV00gcmVnaXN0ZXJzICovCisKK3N0cnVjdCBpd20geworCVJFRyhwaDBMKQorCVJFRyhwaDBIKQorCVJFRyhwaDFMKQorCVJFRyhwaDFIKQorCVJFRyhwaDJMKQorCVJFRyhwaDJIKQorCVJFRyhwaDNMKQorCVJFRyhwaDNIKQorCVJFRyhtdHJPZmYpCisJUkVHKG10ck9uKQorCVJFRyhpbnREcml2ZSkKKwlSRUcoZXh0RHJpdmUpCisJUkVHKHE2TCkKKwlSRUcocTZIKQorCVJFRyhxN0wpCisJUkVHKHE3SCkKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCYoYmFzZSktPnJlZywgKHYpKQorI2RlZmluZSBpd21fcmVhZChiYXNlLCByZWcpCQlpbl84KCYoYmFzZSktPnJlZykKKworLyogYml0cyBpbiBwaGFzZSByZWdpc3RlciAqLworCisjZGVmaW5lIFNFRUtfUE9TSVRJVkUJMHgwNzAKKyNkZWZpbmUgU0VFS19ORUdBVElWRQkweDA3NAorI2RlZmluZSBTVEVQCQkweDA3MQorI2RlZmluZSBNT1RPUl9PTgkweDA3MgorI2RlZmluZSBNT1RPUl9PRkYJMHgwNzYKKyNkZWZpbmUgSU5ERVgJCTB4MDczCisjZGVmaW5lIEVKRUNUCQkweDA3NworI2RlZmluZSBTRVRNRk0JCTB4MTcxCisjZGVmaW5lIFNFVEdDUgkJMHgxNzUKKworI2RlZmluZSBSRUxBWAkJMHgwMzMKKyNkZWZpbmUgTFNUUkIJCTB4MDA4CisKKyNkZWZpbmUgQ0FfTUFTSwkJMHgwNzcKKworLyogU2VsZWN0IHZhbHVlcyBmb3Igc3dpbV9zZWxlY3QgYW5kIHN3aW1fcmVhZGJpdCAqLworCisjZGVmaW5lIFJFQURfREFUQV8wCTB4MDc0CisjZGVmaW5lIFRXT01FR19EUklWRQkweDA3NQorI2RlZmluZSBTSU5HTEVfU0lERUQJMHgwNzYKKyNkZWZpbmUgRFJJVkVfUFJFU0VOVAkweDA3NworI2RlZmluZSBESVNLX0lOCQkweDE3MAorI2RlZmluZSBXUklURV9QUk9UCTB4MTcxCisjZGVmaW5lIFRSQUNLX1pFUk8JMHgxNzIKKyNkZWZpbmUgVEFDSE8JCTB4MTczCisjZGVmaW5lIFJFQURfREFUQV8xCTB4MTc0CisjZGVmaW5lIE1GTV9NT0RFCTB4MTc1CisjZGVmaW5lIFNFRUtfQ09NUExFVEUJMHgxNzYKKyNkZWZpbmUgT05FTUVHX01FRElBCTB4MTc3CisKKy8qIEJpdHMgaW4gaGFuZHNoYWtlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTUFSS19CWVRFCTB4MDEKKyNkZWZpbmUgQ1JDX1pFUk8JMHgwMgorI2RlZmluZSBSRERBVEEJCTB4MDQKKyNkZWZpbmUgU0VOU0UJCTB4MDgKKyNkZWZpbmUgTU9URU4JCTB4MTAKKyNkZWZpbmUgRVJST1IJCTB4MjAKKyNkZWZpbmUgREFUMkJZVEUJMHg0MAorI2RlZmluZSBEQVQxQllURQkweDgwCisKKy8qIGJpdHMgaW4gc2V0dXAgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBTX0lOVl9XREFUQQkweDAxCisjZGVmaW5lIFNfM181X1NFTEVDVAkweDAyCisjZGVmaW5lIFNfR0NSCQkweDA0CisjZGVmaW5lIFNfRkNMS19ESVYyCTB4MDgKKyNkZWZpbmUgU19FUlJPUl9DT1JSCTB4MTAKKyNkZWZpbmUgU19JQk1fRFJJVkUJMHgyMAorI2RlZmluZSBTX0dDUl9XUklURQkweDQwCisjZGVmaW5lIFNfVElNRU9VVAkweDgwCisKKy8qIGJpdHMgaW4gbW9kZSByZWdpc3RlciAqLworCisjZGVmaW5lIENMRklGTwkJMHgwMQorI2RlZmluZSBFTkJMMQkJMHgwMgorI2RlZmluZSBFTkJMMgkJMHgwNAorI2RlZmluZSBBQ1RJT04JCTB4MDgKKyNkZWZpbmUgV1JJVEVfTU9ERQkweDEwCisjZGVmaW5lIEhFRFNFTAkJMHgyMAorI2RlZmluZSBNT1RPTgkJMHg4MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlbnVtIGRyaXZlX2xvY2F0aW9uIHsKKwlJTlRFUk5BTF9EUklWRSA9IDB4MDIsCisJRVhURVJOQUxfRFJJVkUgPSAweDA0LAorfTsKKworZW51bSBtZWRpYV90eXBlIHsKKwlERF9NRURJQSwKKwlIRF9NRURJQSwKK307CisKK3N0cnVjdCBmbG9wcHlfc3RhdGUgeworCisJLyogcGh5c2ljYWwgcHJvcGVydGllcyAqLworCisJZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjsJLyogaW50ZXJuYWwgb3IgZXh0ZXJuYWwgZHJpdmUgKi8KKwlpbnQJCSBoZWFkX251bWJlcjsJLyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi8KKworCS8qIG1lZGlhICovCisKKwlpbnQJCSBkaXNrX2luOworCWludAkJIGVqZWN0ZWQ7CisJZW51bSBtZWRpYV90eXBlCSB0eXBlOworCWludAkJIHdyaXRlX3Byb3RlY3RlZDsKKworCWludAkJIHRvdGFsX3NlY3M7CisJaW50CQkgc2VjcGVyY3lsOworCWludAkJIHNlY3BlcnRyYWNrOworCisJLyogaW4tdXNlIGluZm9ybWF0aW9uICovCisKKwlpbnQJCXRyYWNrOworCWludAkJcmVmX2NvdW50OworCisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CisKKwkvKiBwYXJlbnQgY29udHJvbGxlciAqLworCisJc3RydWN0IHN3aW1fcHJpdiAqc3dkOworfTsKKworZW51bSBtb3Rvcl9hY3Rpb24geworCU9GRiwKKwlPTiwKK307CisKK2VudW0gaGVhZCB7CisJTE9XRVJfSEVBRCA9IDAsCisJVVBQRVJfSEVBRCA9IDEsCit9OworCisjZGVmaW5lIEZEX01BWF9VTklUCTIKKworc3RydWN0IHN3aW1fcHJpdiB7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCWludCBmbG9wcHlfY291bnQ7CisJc3RydWN0IGZsb3BweV9zdGF0ZSB1bml0W0ZEX01BWF9VTklUXTsKK307CisKK2V4dGVybiBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCQkgICBzdHJ1Y3Qgc2VjdG9yX2hlYWRlciAqaGVhZGVyKTsKK2V4dGVybiBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBpd20gX19pb21lbSAqaXdtX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZW5hYmxlKSB7CisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIDB4ZjgpOworCQlyZXR1cm47CisJfQorCisJaXdtX2Jhc2UgPSAoc3RydWN0IGl3bSBfX2lvbWVtICopYmFzZTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpd21fcmVhZChpd21fYmFzZSwgcTdMKTsKKwlpd21fcmVhZChpd21fYmFzZSwgbXRyT2ZmKTsKKwlpd21fcmVhZChpd21fYmFzZSwgcTZIKTsKKworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDU3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHgxNyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDU3KTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAweGY1KTsKKwlpZiAoc3dpbV9yZWFkKGJhc2UsIHBoYXNlKSAhPSAweGY1KQorCQlnb3RvIGlzX2l3bTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAweGY2KTsKKwlpZiAoc3dpbV9yZWFkKGJhc2UsIHBoYXNlKSAhPSAweGY2KQorCQlnb3RvIGlzX2l3bTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAweGY3KTsKKwlpZiAoc3dpbV9yZWFkKGJhc2UsIHBoYXNlKSAhPSAweGY3KQorCQlnb3RvIGlzX2l3bTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDE7Citpc19pd206CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9zZWxlY3Qoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IHNlbCkKK3sKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBSRUxBWCk7CisKKwl2aWExX3NldF9oZWFkKHNlbCAmIDB4MTAwKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIHNlbCAmIENBX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9hY3Rpb24oc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGFjdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTsKKwl1ZGVsYXkoMSk7CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCPDw0KSB8IExTVFJCKTsKKwl1ZGVsYXkoMSk7CisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCPDw0KSB8ICgofkxTVFJCKSAmIDB4MEYpKTsKKwl1ZGVsYXkoMSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KQoreworCWludCBzdGF0OworCisJc3dpbV9zZWxlY3QoYmFzZSwgYml0KTsKKworCXVkZWxheSgxMCk7CisKKwlzdGF0ID0gc3dpbV9yZWFkKGJhc2UsIGhhbmRzaGFrZSk7CisKKwlyZXR1cm4gKHN0YXQgJiBTRU5TRSkgPT0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZHJpdmUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCSAgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCit7CisJaWYgKGxvY2F0aW9uID09IElOVEVSTkFMX0RSSVZFKSB7CisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMSBiaXQgKi8KKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgSU5URVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMCBiaXQgKi8KKwl9IGVsc2UgaWYgKGxvY2F0aW9uID09IEVYVEVSTkFMX0RSSVZFKSB7CisJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMCBiaXQgKi8KKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgRVhURVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMSBiaXQgKi8KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCisJCQkgICAgICBlbnVtIG1vdG9yX2FjdGlvbiBhY3Rpb24pCit7CisJaWYgKGFjdGlvbiA9PSBPTikgeworCQlpbnQgaTsKKworCQlzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PTik7CisKKwkJZm9yIChpID0gMDsgaSA8IDIqSFo7IGkrKykgeworCQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQkJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpCisJCQkJYnJlYWs7CisJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCX0KKwl9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHsKKwkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTsKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZWplY3Qoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgaTsKKworCXN3aW1fYWN0aW9uKGJhc2UsIEVKRUNUKTsKKworCWZvciAoaSA9IDA7IGkgPCAyKkhaOyBpKyspIHsKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoIXN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkKKwkJCWJyZWFrOworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwl9CisJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKQoreworCS8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi8KKworCWlmIChoZWFkID09IFVQUEVSX0hFQUQpCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTsKKwllbHNlIGlmIChoZWFkID09IExPV0VSX0hFQUQpCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8wKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9zdGVwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IHdhaXQ7CisKKwlzd2ltX2FjdGlvbihiYXNlLCBTVEVQKTsKKworCWZvciAod2FpdCA9IDA7IHdhaXQgPCBIWjsgd2FpdCsrKSB7CisKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoIXN3aW1fcmVhZGJpdChiYXNlLCBTVEVQKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCB0cnk7CisKKwlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTsKKworCWZvciAodHJ5ID0gMDsgdHJ5IDwgMTAwOyB0cnkrKykgeworCisJCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKKwkJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBUUkFDS19aRVJPKSkKKwkJCWJyZWFrOworCisJCWlmIChzd2ltX3N0ZXAoYmFzZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBUUkFDS19aRVJPKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcCkKK3sKKwlpZiAoc3RlcCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGVwIDwgMCkgeworCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTsKKwkJc3RlcCA9IC1zdGVwOworCX0gZWxzZQorCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX1BPU0lUSVZFKTsKKworCWZvciAoIDsgc3RlcCA+IDA7IHN0ZXAtLSkgeworCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCAgaW50IHRyYWNrKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCByZXQ7CisKKwlyZXQgPSBzd2ltX3NlZWsoYmFzZSwgdHJhY2sgLSBmcy0+dHJhY2spOworCisJaWYgKHJldCA9PSAwKQorCQlmcy0+dHJhY2sgPSB0cmFjazsKKwllbHNlIHsKKwkJc3dpbV90cmFjazAwKGJhc2UpOworCQlmcy0+dHJhY2sgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwlzd2ltX2VqZWN0KGJhc2UpOworCisJZnMtPmRpc2tfaW4gPSAwOworCWZzLT5lamVjdGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRfc2VjdG9yKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAorCQkJCSAgIGludCBzaWRlLCBpbnQgdHJhY2ssCisJCQkJICAgaW50IHNlY3RvciwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNlY3Rvcl9oZWFkZXIgaGVhZGVyOworCWludCByZXQgPSAtMTsKKwlzaG9ydCBpOworCisJc3dpbV90cmFjayhmcywgdHJhY2spOworCisJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pOworCXN3aW1faGVhZChiYXNlLCBzaWRlKTsKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBzaWRlKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzY7IGkrKykgeworCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcihiYXNlLCAmaGVhZGVyKTsKKwkJaWYgKCFyZXQgJiYgKGhlYWRlci5zZWN0b3IgPT0gc2VjdG9yKSkgeworCQkJLyogZm91bmQgKi8KKworCQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlcik7CisJCQlicmVhazsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBNT1RPTik7CisKKwlpZiAoKGhlYWRlci5zaWRlICE9IHNpZGUpICB8fCAoaGVhZGVyLnRyYWNrICE9IHRyYWNrKSB8fAorCSAgICAgKGhlYWRlci5zZWN0b3IgIT0gc2VjdG9yKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZsb3BweV9yZWFkX3NlY3RvcnMoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsCisJCQkgICAgICAgaW50IHJlcV9zZWN0b3IsIGludCBzZWN0b3JzX25iLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgcmV0OworCWludCBzaWRlLCB0cmFjaywgc2VjdG9yOworCWludCBpLCB0cnk7CisKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKwlmb3IgKGkgPSByZXFfc2VjdG9yOyBpIDwgcmVxX3NlY3RvciArIHNlY3RvcnNfbmI7IGkrKykgeworCQlpbnQgeDsKKwkJdHJhY2sgPSBpIC8gZnMtPnNlY3BlcmN5bDsKKwkJeCA9IGkgJSBmcy0+c2VjcGVyY3lsOworCQlzaWRlID0geCAvIGZzLT5zZWNwZXJ0cmFjazsKKwkJc2VjdG9yID0geCAlIGZzLT5zZWNwZXJ0cmFjayArIDE7CisKKwkJdHJ5ID0gNTsKKwkJZG8geworCQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcihmcywgc2lkZSwgdHJhY2ssIHNlY3RvciwKKwkJCQkJCWJ1ZmZlcik7CisJCQlpZiAodHJ5LS0gPT0gMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0gd2hpbGUgKHJldCAhPSA1MTIpOworCisJCWJ1ZmZlciArPSByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzOworCisJd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHEpKSkgeworCisJCWZzID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CisJCWlmIChyZXEtPnNlY3RvciA8IDAgfHwgcmVxLT5zZWN0b3IgPj0gZnMtPnRvdGFsX3NlY3MpIHsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmVxLT5jdXJyZW50X25yX3NlY3RvcnMgPT0gMCkgeworCQkJZW5kX3JlcXVlc3QocmVxLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghZnMtPmRpc2tfaW4pIHsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgeworCQkJaWYgKGZzLT53cml0ZV9wcm90ZWN0ZWQpIHsKKwkJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXN3aXRjaCAocnFfZGF0YV9kaXIocmVxKSkgeworCQljYXNlIFdSSVRFOgorCQkJLyogTk9UIElNUExFTUVOVEVEICovCisJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJYnJlYWs7CisJCWNhc2UgUkVBRDoKKwkJCWlmIChmbG9wcHlfcmVhZF9zZWN0b3JzKGZzLCByZXEtPnNlY3RvciwKKwkJCQkJCXJlcS0+Y3VycmVudF9ucl9zZWN0b3JzLAorCQkJCQkJcmVxLT5idWZmZXIpKSB7CisJCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJlcS0+bnJfc2VjdG9ycyAtPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwkJCXJlcS0+c2VjdG9yICs9IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCQkJcmVxLT5idWZmZXIgKz0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnMgKiA1MTI7CisJCQllbmRfcmVxdWVzdChyZXEsIDEpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX2ZkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJcmVkb19mZF9yZXF1ZXN0KHEpOworfQorCitzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7CisJeyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAgICovCisJeyAgNzIwLCAgOSwgMSwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogMzYwS0IgU1MgMy41IiovCisJeyAxNDQwLCAgOSwgMiwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogNzIwS0IgMy41IiAgICovCisJeyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNSIgICovCit9OworCitzdGF0aWMgaW50IGdldF9mbG9wcHlfZ2VvbWV0cnkoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGludCB0eXBlLAorCQkJICAgICAgIHN0cnVjdCBmbG9wcHlfc3RydWN0ICoqZykKK3sKKwlpZiAodHlwZSA+PSBBUlJBWV9TSVpFKGZsb3BweV90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodHlwZSkKKwkJKmcgPSAmZmxvcHB5X3R5cGVbdHlwZV07CisJZWxzZSBpZiAoZnMtPnR5cGUgPT0gSERfTUVESUEpIC8qIEhpZ2gtRGVuc2l0eSBtZWRpYSAqLworCQkqZyA9ICZmbG9wcHlfdHlwZVszXTsKKwllbHNlIGlmIChmcy0+aGVhZF9udW1iZXIgPT0gMikgLyogZG91YmxlLXNpZGVkICovCisJCSpnID0gJmZsb3BweV90eXBlWzJdOworCWVsc2UKKwkJKmcgPSAmZmxvcHB5X3R5cGVbMV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfbWVkaXVtKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkgeworCQlzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqZzsKKwkJZnMtPmRpc2tfaW4gPSAxOworCQlmcy0+d3JpdGVfcHJvdGVjdGVkID0gc3dpbV9yZWFkYml0KGJhc2UsIFdSSVRFX1BST1QpOworCQlmcy0+dHlwZSA9IHN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfTUVESUEpOworCisJCWlmIChzd2ltX3RyYWNrMDAoYmFzZSkpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiU1dJTTogY2Fubm90IG1vdmUgZmxvcHB5IGhlYWQgdG8gdHJhY2sgMFxuIik7CisKKwkJc3dpbV90cmFjazAwKGJhc2UpOworCisJCWdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsICZnKTsKKwkJZnMtPnRvdGFsX3NlY3MgPSBnLT5zaXplOworCQlmcy0+c2VjcGVyY3lsID0gZy0+aGVhZCAqIGctPnNlY3Q7CisJCWZzLT5zZWNwZXJ0cmFjayA9IGctPnNlY3Q7CisJCWZzLT50cmFjayA9IDA7CisJfSBlbHNlIHsKKwkJZnMtPmRpc2tfaW4gPSAwOworCX0KK30KKworc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IGVycjsKKworCWlmIChmcy0+cmVmX2NvdW50ID09IC0xIHx8IChmcy0+cmVmX2NvdW50ICYmIG1vZGUgJiBGTU9ERV9FWENMKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChtb2RlICYgRk1PREVfRVhDTCkKKwkJZnMtPnJlZl9jb3VudCA9IC0xOworCWVsc2UKKwkJZnMtPnJlZl9jb3VudCsrOworCisJc3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgIHwgU19GQ0xLX0RJVjIpOworCXVkZWxheSgxMCk7CisJc3dpbV9kcml2ZShiYXNlLCBJTlRFUk5BTF9EUklWRSk7CisJc3dpbV9tb3RvcihiYXNlLCBPTik7CisJc3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTsKKwlpZiAoZnMtPmVqZWN0ZWQpCisJCXNldHVwX21lZGl1bShmcyk7CisJaWYgKCFmcy0+ZGlza19pbikgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtb2RlICYgRk1PREVfTkRFTEFZKQorCQlyZXR1cm4gMDsKKworCWlmIChtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSB7CisJCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOworCQlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgZnMtPndyaXRlX3Byb3RlY3RlZCkgeworCQkJZXJyID0gLUVST0ZTOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7CitvdXQ6CisJaWYgKGZzLT5yZWZfY291bnQgPCAwKQorCQlmcy0+cmVmX2NvdW50ID0gMDsKKwllbHNlIGlmIChmcy0+cmVmX2NvdW50ID4gMCkKKwkJLS1mcy0+cmVmX2NvdW50OworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCWlmIChmcy0+cmVmX2NvdW50IDwgMCkKKwkJZnMtPnJlZl9jb3VudCA9IDA7CisJZWxzZSBpZiAoZnMtPnJlZl9jb3VudCA+IDApCisJCS0tZnMtPnJlZl9jb3VudDsKKworCWlmIChmcy0+cmVmX2NvdW50ID09IDApCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwlpZiAoKGNtZCAmIDB4ODApICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGREVKRUNUOgorCQlpZiAoZnMtPnJlZl9jb3VudCAhPSAxKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJZXJyID0gZmxvcHB5X2VqZWN0KGZzKTsKKwkJcmV0dXJuIGVycjsKKworCWNhc2UgRkRHRVRQUk06CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopIHBhcmFtLCAodm9pZCAqKSAmZmxvcHB5X3R5cGUsCisJCQkJIHNpemVvZihzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNXSU0gZmxvcHB5X2lvY3RsOiB1bmtub3duIGNtZCAlZFxuIiwKKwkJICAgICAgIGNtZCk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbG9wcHlfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpnOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCAmZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdlby0+aGVhZHMgPSBnLT5oZWFkOworCWdlby0+c2VjdG9ycyA9IGctPnNlY3Q7CisJZ2VvLT5jeWxpbmRlcnMgPSBnLT50cmFjazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9jaGVja19jaGFuZ2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZnMtPmVqZWN0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisKKwlpZiAoZnMtPmVqZWN0ZWQpCisJCXNldHVwX21lZGl1bShmcyk7CisKKwlpZiAoIWZzLT5kaXNrX2luKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJZWxzZQorCQlmcy0+ZWplY3RlZCA9IDA7CisKKwlyZXR1cm4gIWZzLT5kaXNrX2luOworfQorCitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0geworCS5vd25lcgkJID0gVEhJU19NT0RVTEUsCisJLm9wZW4JCSA9IGZsb3BweV9vcGVuLAorCS5yZWxlYXNlCSA9IGZsb3BweV9yZWxlYXNlLAorCS5sb2NrZWRfaW9jdGwJID0gZmxvcHB5X2lvY3RsLAorCS5nZXRnZW8JCSA9IGZsb3BweV9nZXRnZW8sCisJLm1lZGlhX2NoYW5nZWQJID0gZmxvcHB5X2NoZWNrX2NoYW5nZSwKKwkucmV2YWxpZGF0ZV9kaXNrID0gZmxvcHB5X3JldmFsaWRhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGtvYmplY3QgKmZsb3BweV9maW5kKGRldl90IGRldiwgaW50ICpwYXJ0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IGRhdGE7CisJaW50IGRyaXZlID0gKCpwYXJ0ICYgMyk7CisKKwlpZiAoZHJpdmUgPiBzd2QtPmZsb3BweV9jb3VudCkKKwkJcmV0dXJuIE5VTEw7CisKKwkqcGFydCA9IDA7CisJcmV0dXJuIGdldF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN3aW1fYWRkX2Zsb3BweShzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QsCisJCQkJICAgICBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gJnN3ZC0+dW5pdFtzd2QtPmZsb3BweV9jb3VudF07CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC0+YmFzZTsKKworCWZzLT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisJc3dpbV9kcml2ZShiYXNlLCBsb2NhdGlvbik7CisKKwlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFNJTkdMRV9TSURFRCkpCisJCWZzLT5oZWFkX251bWJlciA9IDE7CisJZWxzZQorCQlmcy0+aGVhZF9udW1iZXIgPSAyOworCWZzLT5yZWZfY291bnQgPSAwOworCWZzLT5lamVjdGVkID0gMTsKKworCXN3ZC0+ZmxvcHB5X2NvdW50Kys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpCit7CisJaW50IGVycjsKKwlpbnQgZHJpdmU7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC0+YmFzZTsKKworCS8qIHNjYW4gZmxvcHB5IGRyaXZlcyAqLworCisJc3dpbV9kcml2ZShiYXNlLCBJTlRFUk5BTF9EUklWRSk7CisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSkKKwkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgSU5URVJOQUxfRFJJVkUpOworCXN3aW1fZHJpdmUoYmFzZSwgRVhURVJOQUxfRFJJVkUpOworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkpCisJCXN3aW1fYWRkX2Zsb3BweShzd2QsIEVYVEVSTkFMX0RSSVZFKTsKKworCS8qIHJlZ2lzdGVyIGZsb3BweSBkcml2ZXMgKi8KKworCWVyciA9IHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsICJmZCIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBTV0lNIGZsb3BweVxuIiwKKwkJICAgICAgIEZMT1BQWV9NQUpPUik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZm9yIChkcml2ZSA9IDA7IGRyaXZlIDwgc3dkLT5mbG9wcHlfY291bnQ7IGRyaXZlKyspIHsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrID0gYWxsb2NfZGlzaygxKTsKKwkJaWYgKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0X3B1dF9kaXNrczsKKwkJfQorCQlzd2QtPnVuaXRbZHJpdmVdLnN3ZCA9IHN3ZDsKKwl9CisKKwlzd2QtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoZG9fZmRfcmVxdWVzdCwgJnN3ZC0+bG9jayk7CisJaWYgKCFzd2QtPnF1ZXVlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9wdXRfZGlza3M7CisJfQorCisJZm9yIChkcml2ZSA9IDA7IGRyaXZlIDwgc3dkLT5mbG9wcHlfY291bnQ7IGRyaXZlKyspIHsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5tYWpvciA9IEZMT1BQWV9NQUpPUjsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5maXJzdF9taW5vciA9IGRyaXZlOworCQlzcHJpbnRmKHN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGRyaXZlKTsKKwkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5mb3BzID0gJmZsb3BweV9mb3BzOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPnByaXZhdGVfZGF0YSA9ICZzd2QtPnVuaXRbZHJpdmVdOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPnF1ZXVlID0gc3dkLT5xdWV1ZTsKKwkJc2V0X2NhcGFjaXR5KHN3ZC0+dW5pdFtkcml2ZV0uZGlzaywgMjg4MCk7CisJCWFkZF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJfQorCisJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihGTE9QUFlfTUFKT1IsIDApLCAyNTYsIFRISVNfTU9EVUxFLAorCQkJICAgIGZsb3BweV9maW5kLCBOVUxMLCBzd2QpOworCisJcmV0dXJuIDA7CisKK2V4aXRfcHV0X2Rpc2tzOgorCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisJd2hpbGUgKGRyaXZlLS0pCisJCXB1dF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHN3aW0gX19pb21lbSAqc3dpbV9iYXNlOworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZDsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBDQVJETkFNRSkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2ltX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFzd2ltX2Jhc2UpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X3JlbGVhc2VfaW87CisJfQorCisJLyogcHJvYmUgZGV2aWNlICovCisKKwlzZXRfc3dpbV9tb2RlKHN3aW1fYmFzZSwgMSk7CisJaWYgKCFnZXRfc3dpbV9tb2RlKHN3aW1fYmFzZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1dJTSBkZXZpY2Ugbm90IGZvdW5kICFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9pb3VubWFwOworCX0KKworCS8qIHNldCBwbGF0Zm9ybSBkcml2ZXIgZGF0YSAqLworCisJc3dkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN3aW1fcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghc3dkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgc3dkKTsKKworCXN3ZC0+YmFzZSA9IHN3aW1fYmFzZTsKKworCXJldCA9IHN3aW1fZmxvcHB5X2luaXQoc3dkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9rZnJlZTsKKworCXJldHVybiAwOworCitvdXRfa2ZyZWU6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShzd2QpOworb3V0X2lvdW5tYXA6CisJaW91bm1hcChzd2ltX2Jhc2UpOworb3V0X3JlbGVhc2VfaW86CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3dpbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGRyaXZlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJYmxrX3VucmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1Nik7CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlkZWxfZ2VuZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworCQlwdXRfZGlzayhzd2QtPnVuaXRbZHJpdmVdLmRpc2spOworCX0KKworCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisKKwlibGtfY2xlYW51cF9xdWV1ZShzd2QtPnF1ZXVlKTsKKworCS8qIGVqZWN0IGZsb3BwaWVzICovCisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykKKwkJZmxvcHB5X2VqZWN0KCZzd2QtPnVuaXRbZHJpdmVdKTsKKworCWlvdW5tYXAoc3dkLT5iYXNlKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZGV2LCBJT1JFU09VUkNFX01FTSwgInN3aW0tcmVncyIpOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShzd2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN3aW1fZHJpdmVyID0geworCS5wcm9iZSAgPSBzd2ltX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzd2ltX3JlbW92ZSksCisJLmRyaXZlciAgID0geworCQkubmFtZQk9IENBUkROQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3dpbV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1dJTSBmbG9wcHkgZHJpdmVyICVzXG4iLCBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzd2ltX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzd2ltX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc3dpbV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnN3aW1fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHN3aW1fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTV0lNIGZsb3BweSBjb250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFZpdmllciA8bGF1cmVudEBsdml2aWVyLmluZm8+Iik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoRkxPUFBZX01BSk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUyBiL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTY2ODIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIKKyAqCisgKiBuZWVkcyBhc3NlbWJseSBsYW5ndWFnZSBiZWNhdXNlIGlzIHZlcnkgdGltaW5nIGRlcGVuZGVudAorICogdGhpcyBjb250cm9sbGVyIGV4aXN0cyBvbmx5IG9uIG1hY2ludG9zaCA2ODB4MCBiYXNlZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyIDxMYXVyZW50QGx2aXZpZXIuaW5mbz4KKyAqCisgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxCisgKiBiYXNlZCBvbiBuZXRCU0QgSVdNIGRyaXZlciAoYykgMTk5NywgMTk5OCBIYXVrZSBGYXRoLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogMjAwNC0wOC0yMSAobHYpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbgorICogMjAwOC0xMS0wNSAobHYpIC0gYWRkIGdldF9zd2ltX21vZGUKKyAqLworCisJLmVxdQl3cml0ZV9kYXRhLAkweDAwMDAKKwkuZXF1CXdyaXRlX21hcmssCTB4MDIwMAorCS5lcXUJd3JpdGVfQ1JDLAkweDA0MDAKKwkuZXF1CXdyaXRlX3BhcmFtZXRlciwweDA2MDAKKwkuZXF1CXdyaXRlX3BoYXNlLAkweDA4MDAKKwkuZXF1CXdyaXRlX3NldHVwLAkweDBhMDAKKwkuZXF1CXdyaXRlX21vZGUwLAkweDBjMDAKKwkuZXF1CXdyaXRlX21vZGUxLAkweDBlMDAKKwkuZXF1CXJlYWRfZGF0YSwJMHgxMDAwCisJLmVxdQlyZWFkX21hcmssCTB4MTIwMAorCS5lcXUJcmVhZF9lcnJvciwJMHgxNDAwCisJLmVxdQlyZWFkX3BhcmFtZXRlciwJMHgxNjAwCisJLmVxdQlyZWFkX3BoYXNlLAkweDE4MDAKKwkuZXF1CXJlYWRfc2V0dXAsCTB4MWEwMAorCS5lcXUJcmVhZF9zdGF0dXMsCTB4MWMwMAorCS5lcXUJcmVhZF9oYW5kc2hha2UsCTB4MWUwMAorCisJLmVxdQlvX3NpZGUsIDAKKwkuZXF1CW9fdHJhY2ssIDEKKwkuZXF1CW9fc2VjdG9yLCAyCisJLmVxdQlvX3NpemUsIDMKKwkuZXF1CW9fY3JjMCwgNAorCS5lcXUJb19jcmMxLCA1CisKKwkuZXF1CXNlZWtfdGltZSwgMzAwMDAKKwkuZXF1CW1heF9yZXRyeSwgNDAKKwkuZXF1CXNlY3Rvcl9zaXplLCA1MTIKKworCS5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIKK3N3aW1fcmVhZF9zZWN0b3JfaGVhZGVyOgorCWxpbmsJJWE2LCAjMAorCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTQsJXNwQC0KKwltb3ZlbAklYTZAKDB4MGMpLCAlYTQKKwlic3IJbWZtX3JlYWRfYWRkcm1hcmsKKwltb3ZlbWwJJXNwQCssICVkMS0lZDUvJWEwLSVhNAorCXVubGsJJWE2CisJcnRzCisKK3NlY3Rvcl9hZGRyZXNzX21hcms6CisJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmZQorc2VjdG9yX2RhdGFfbWFyazoKKwkuYnl0ZQkweGExLCAweGExLCAweGExLCAweGZiCisKK21mbV9yZWFkX2FkZHJtYXJrOgorCW1vdmVsCSVhNkAoMHgwOCksICVhMworCWxlYQklYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyCisJbGVhCSVhM0AocmVhZF9tYXJrKSwgJWEzCisJbW92ZXEJIy0xLCAlZDAKKwltb3Zldwkjc2Vla190aW1lLCAlZDIKKword2FpdF9oZWFkZXJfaW5pdDoKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKwltb3ZlYgkjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKKworCWxlYQlzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTAKKwltb3ZlcQkjMywgJWQxCisKK3dhaXRfYWRkcl9tYXJrX2J5dGU6CisKKwl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgd2FpdF9hZGRyX21hcmtfYnl0ZQorCWJwbAloZWFkZXJfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQzCisJY21wYgklYTBAKywgJWQzCisJZGJuZQklZDEsIHdhaXRfYWRkcl9tYXJrX2J5dGUKKwlibmUJd2FpdF9oZWFkZXJfaW5pdAorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMDoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMAorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob190cmFjaykKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCithbWFyazE6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBhbWFyazEKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fc2lkZSkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCithbWFyazI6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBhbWFyazIKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fc2VjdG9yKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMzoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMworCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zaXplKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2NyYzA6CXRzdGIJJWEyQAorCWRibWkJJWQyLCBjcmMwCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX2NyYzApCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworY3JjMToJdHN0YgklYTJACisJZGJtaQklZDIsIGNyYzEKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fY3JjMSkKKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCitoZWFkZXJfZXhpdDoKKwltb3ZlcQkjMCwgJWQwCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJcnRzCitzaWduYWxfbm9ueWI6CisJbW92ZXEJIy0xLCAlZDAKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwlydHMKKworCS5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhCitzd2ltX3JlYWRfc2VjdG9yX2RhdGE6CisJbGluawklYTYsICMwCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhNSwlc3BALQorCW1vdmVsCSVhNkAoMHgwYyksICVhNAorCWJzcgltZm1fcmVhZF9kYXRhCisJbW92ZW1sCSVzcEArLCAlZDEtJWQ1LyVhMC0lYTUKKwl1bmxrCSVhNgorCXJ0cworCittZm1fcmVhZF9kYXRhOgorCW1vdmVsCSVhNkAoMHgwOCksICVhMworCWxlYQklYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyCisJbGVhCSVhM0AocmVhZF9kYXRhKSwgJWE1CisJbGVhCSVhM0AocmVhZF9tYXJrKSwgJWEzCisJbW92ZXcJI3NlZWtfdGltZSwgJWQyCisKK3dhaXRfZGF0YV9pbml0OgorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCisJbGVhCXNlY3Rvcl9kYXRhX21hcmssICVhMAorCW1vdmVxCSMzLCAlZDEKKworCS8qIHdhaXQgZGF0YSBhZGRyZXNzIG1hcmsgKi8KKword2FpdF9kYXRhX21hcmtfYnl0ZToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCB3YWl0X2RhdGFfbWFya19ieXRlCisJYnBsCWRhdGFfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQzCisJY21wYgklYTBAKywgJWQzCisJZGJuZQklZDEsIHdhaXRfZGF0YV9tYXJrX2J5dGUKKwlibmUJd2FpdF9kYXRhX2luaXQKKworCS8qIHJlYWQgZGF0YSAqLworCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKKwltb3ZlbAkjc2VjdG9yX3NpemUtMSwgJWQ0CQkvKiBzZWN0b3Igc2l6ZSAqLworcmVhZF9uZXdfZGF0YToKKwltb3ZldwkjbWF4X3JldHJ5LCAlZDIKK3JlYWRfZGF0YV9sb29wOgorCW1vdmViCSVhMkAsICVkNQorCWFuZGIJIzB4YzAsICVkNQorCWRibmUJJWQyLCByZWFkX2RhdGFfbG9vcAorCWJlcQlkYXRhX2V4aXQKKwltb3ZlYgklYTVALCAlYTRAKworCWFuZGIJIzB4NDAsICVkNQorCWRibmUJJWQ0LCByZWFkX25ld19kYXRhCisJYmVxCWV4aXRfbG9vcAorCW1vdmViCSVhNUAsICVhNEArCisJZGJyYQklZDQsIHJlYWRfbmV3X2RhdGEKK2V4aXRfbG9vcDoKKworCS8qIHJlYWQgQ1JDICovCisKKwltb3ZldwkjbWF4X3JldHJ5LCAlZDIKK2RhdGFfY3JjMDoKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCBkYXRhX2NyYzAKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDUKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitkYXRhX2NyYzE6CisKKwl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgZGF0YV9jcmMxCisJYnBsCWRhdGFfZXhpdAorCisJbW92ZWIJJWEzQCwgJWQ1CisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCisJLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkICovCisKKwltb3ZlbAkjc2VjdG9yX3NpemUsICVkMAorCWFkZHcJIzEsICVkNAorCXN1YmwJJWQ0LCAlZDAKKwlydHMKK2RhdGFfZXhpdDoKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwltb3ZlcQkjLTEsICVkMAorCXJ0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDEyZmI4MTYuLjY5YjdmOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogICovCiAjaWZkZWYgQ09ORklHX1VTQl9MSUJVU1VBTAogCi0jZGVmaW5lIHViX3VzYl9pZHMgIHN0b3JhZ2VfdXNiX2lkcworI2RlZmluZSB1Yl91c2JfaWRzICB1c2Jfc3RvcmFnZV91c2JfaWRzCiAjZWxzZQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdWJfdXNiX2lkc1tdID0gewpAQCAtMjE0NiwxMCArMjE0Niw5IEBACiAJCWVwID0gJmFsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2M7CiAKIAkJLyogSXMgaXQgYSBCVUxLIGVuZHBvaW50PyAqLwotCQlpZiAoKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwKSkgewogCQkJLyogQlVMSyBpbiBvciBvdXQ/ICovCi0JCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpIHsKIAkJCQlpZiAoZXBfaW4gPT0gTlVMTCkKIAkJCQkJZXBfaW4gPSBlcDsKIAkJCX0gZWxzZSB7CkBAIC0yMTY4LDkgKzIxNjcsOSBAQAogCXNjLT5zZW5kX2N0cmxfcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkZXYsIDApOwogCXNjLT5yZWN2X2N0cmxfcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShkZXYsIDApOwogCXNjLT5zZW5kX2J1bGtfcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsCi0JCWVwX291dC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVzYl9lbmRwb2ludF9udW0oZXBfb3V0KSk7CiAJc2MtPnJlY3ZfYnVsa19waXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRldiwgCi0JCWVwX2luLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9pbikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwppbmRleCBkM2YxNGJlLi4yYTAwNzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKQEAgLTI1Nyw4ICsyNTcsNyBAQAogCiAJaWYgKGhkciAmIDB4MTApIHsKIAkJQlRfRVJSKCIlcyBlcnJvciBpbiBibG9jayIsIGRhdGEtPmhkZXYtPm5hbWUpOwotCQlpZiAoZGF0YS0+cmVhc3NlbWJseSkKLQkJCWtmcmVlX3NrYihkYXRhLT5yZWFzc2VtYmx5KTsKKwkJa2ZyZWVfc2tiKGRhdGEtPnJlYXNzZW1ibHkpOwogCQlkYXRhLT5yZWFzc2VtYmx5ID0gTlVMTDsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCmluZGV4IGZmMTk1YzIuLmQ1OGUyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKQEAgLTM1OSw5ICszNTksOSBAQAogCQkJQlRfRVJSKCJWZXJ5IHN0cmFuZ2UgKHN0YXQ9MHglMDR4KSIsIHN0YXQpOwogCQl9IGVsc2UgaWYgKChzdGF0ICYgMHhmZikgIT0gMHhmZikgewogCQkJaWYgKHN0YXQgJiAweDAwMjApIHsKLQkJCQlpbnQgc3RhdCA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwMikgJiAweDEwOworCQkJCWludCBzdGF0dXMgPSBidDNjX3JlYWQoaW9iYXNlLCAweDcwMDIpICYgMHgxMDsKIAkJCQlCVF9JTkZPKCIlczogQW50ZW5uYSAlcyIsIGluZm8tPmhkZXYtPm5hbWUsCi0JCQkJCQkJc3RhdCA/ICJvdXQiIDogImluIik7CisJCQkJCQkJc3RhdHVzID8gIm91dCIgOiAiaW4iKTsKIAkJCX0KIAkJCWlmIChzdGF0ICYgMHgwMDAxKQogCQkJCWJ0M2NfcmVjZWl2ZShpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IGI1ZmJkYTYuLmU3MGM1N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuNCIKKyNkZWZpbmUgVkVSU0lPTiAiMC41IgogCiBzdGF0aWMgaW50IGlnbm9yZV9kZ2E7CiBzdGF0aWMgaW50IGlnbm9yZV9jc3I7CkBAIC0xNzEsNiArMTcxLDcgQEAKIAogCV9fdTggY21kcmVxX3R5cGU7CiAKKwl1bnNpZ25lZCBpbnQgc2NvX251bTsKIAlpbnQgaXNvY19hbHRzZXR0aW5nOwogCWludCBzdXNwZW5kX2NvdW50OwogfTsKQEAgLTQ5NiwxMSArNDk3LDIzIEBACiAJCXJldHVybiAwOwogCiAJZXJyID0gYnR1c2Jfc3VibWl0X2ludHJfdXJiKGhkZXYsIEdGUF9LRVJORUwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCWVyciA9IGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKIAlpZiAoZXJyIDwgMCkgewotCQljbGVhcl9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQljbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7CisJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmludHJfYW5jaG9yKTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCisJc2V0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CisJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwljbGVhcl9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOworCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02NTUsMTkgKzY2OCwxMCBAQAogCiAJQlRfREJHKCIlcyBldnQgJWQiLCBoZGV2LT5uYW1lLCBldnQpOwogCi0JaWYgKGhkZXYtPmNvbm5faGFzaC5hY2xfbnVtID4gMCkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKSB7Ci0JCQlpZiAoYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9BVE9NSUMpIDwgMCkKLQkJCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQkJZWxzZQotCQkJCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfQVRPTUlDKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCXVzYl91bmxpbmtfYW5jaG9yZWRfdXJicygmZGF0YS0+YnVsa19hbmNob3IpOworCWlmIChoZGV2LT5jb25uX2hhc2guc2NvX251bSAhPSBkYXRhLT5zY29fbnVtKSB7CisJCWRhdGEtPnNjb19udW0gPSBoZGV2LT5jb25uX2hhc2guc2NvX251bTsKKwkJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CiAJfQotCi0Jc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CiB9CiAKIHN0YXRpYyBpbnQgaW5saW5lIF9fc2V0X2lzb2NfaW50ZXJmYWNlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgYWx0c2V0dGluZykKQEAgLTk4Miw5ICs5ODYsMTEgQEAKIAl9CiAKIAlpZiAodGVzdF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKSB7Ci0JCWlmIChidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pIDwgMCkKKwkJZXJyID0gYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKTsKKwkJaWYgKGVyciA8IDApIHsKIAkJCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCWVsc2UKKwkJCXJldHVybiBlcnI7CisJCX0gZWxzZQogCQkJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKaW5kZXggYjBmYWZiMC4uYzBjZTgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKQEAgLTEwMiw4ICsxMDIsNyBAQAogCiAJc2tiX3F1ZXVlX3B1cmdlKCZoNC0+dHhxKTsKIAotCWlmIChoNC0+cnhfc2tiKQotCQlrZnJlZV9za2IoaDQtPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGg0LT5yeF9za2IpOwogCiAJaHUtPnByaXYgPSBOVUxMOwogCWtmcmVlKGg0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMKaW5kZXggYjkxZDQ1YS4uNWM2NTAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMKQEAgLTE2Myw4ICsxNjMsNyBAQAogCXNrYl9xdWV1ZV9wdXJnZSgmbGwtPnR4X3dhaXRfcSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZsbC0+dHhxKTsKIAotCWlmIChsbC0+cnhfc2tiKQotCQlrZnJlZV9za2IobGwtPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGxsLT5yeF9za2IpOwogCiAJaHUtPnByaXYgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCmluZGV4IGE1MzQ5NjguLjU0NDgxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCkBAIC0xMywxMCArMTMsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPG5ldC9pdWN2L2l1Y3YuaD4KQEAgLTk1LDYgKzk2LDEyIEBACiAvKiBBcnJheSBvZiBhbGxvY2F0ZWQgaHZjIGl1Y3YgdHR5IGxpbmVzLi4uICovCiBzdGF0aWMgc3RydWN0IGh2Y19pdWN2X3ByaXZhdGUgKmh2Y19pdWN2X3RhYmxlW01BWF9IVkNfSVVDVl9MSU5FU107CiAjZGVmaW5lIElVQ1ZfSFZDX0NPTl9JRFgJKDApCisvKiBMaXN0IG9mIHovVk0gdXNlciBJRCBmaWx0ZXIgZW50cmllcyAoc3RydWN0IGl1Y3Zfdm1pZF9maWx0ZXIpICovCisjZGVmaW5lIE1BWF9WTUlEX0ZJTFRFUgkJKDUwMCkKK3N0YXRpYyBzaXplX3QgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7CitzdGF0aWMgdm9pZCAqaHZjX2l1Y3ZfZmlsdGVyOworc3RhdGljIGNvbnN0IGNoYXIgKmh2Y19pdWN2X2ZpbHRlcl9zdHJpbmc7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhodmNfaXVjdl9maWx0ZXJfbG9jayk7CiAKIC8qIEttZW0gY2FjaGUgYW5kIG1lbXBvb2wgZm9yIGl1Y3ZfdHR5X2J1ZmZlciBlbGVtZW50cyAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpodmNfaXVjdl9idWZmZXJfY2FjaGU7CkBAIC02MTgsNiArNjI1LDI3IEBACiB9CiAKIC8qKgorICogaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEoKSAtIEZpbHRlciBjb25uZWN0aW9uIHJlcXVlc3QgYmFzZWQgb24gei9WTSB1c2VyIElECisgKiBAaXB2bWlkOglPcmlnaW5hdGluZyB6L1ZNIHVzZXIgSUQgKHJpZ2h0IHBhZGRlZCB3aXRoIGJsYW5rcykKKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHovVk0gdXNlciBJRCBAaXB2bWlkIGlzIGFsbG93ZWQgdG8gY29ubmVjdGlvbiwgb3RoZXJ3aXNlCisgKiBub24temVyby4KKyAqLworc3RhdGljIGludCBodmNfaXVjdl9maWx0ZXJfY29ubnJlcSh1OCBpcHZtaWRbOF0pCit7CisJc2l6ZV90IGk7CisKKwkvKiBOb3RlOiBkZWZhdWx0IHBvbGljeSBpcyBBQ0NFUFQgaWYgbm8gZmlsdGVyIGlzIHNldCAqLworCWlmICghaHZjX2l1Y3ZfZmlsdGVyX3NpemUpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGh2Y19pdWN2X2ZpbHRlcl9zaXplOyBpKyspCisJCWlmICgwID09IG1lbWNtcChpcHZtaWQsIGh2Y19pdWN2X2ZpbHRlciArICg4ICogaSksIDgpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgogICogaHZjX2l1Y3ZfcGF0aF9wZW5kaW5nKCkgLSBJVUNWIGhhbmRsZXIgdG8gcHJvY2VzcyBhIGNvbm5lY3Rpb24gcmVxdWVzdC4KICAqIEBwYXRoOglQZW5kaW5nIHBhdGggKHN0cnVjdCBpdWN2X3BhdGgpCiAgKiBAaXB2bWlkOgl6L1ZNIHN5c3RlbSBpZGVudGlmaWVyIG9mIG9yaWdpbmF0b3IKQEAgLTY0MSw2ICs2NjksNyBAQAogewogCXN0cnVjdCBodmNfaXVjdl9wcml2YXRlICpwcml2OwogCXU4IG51c2VyX2RhdGFbMTZdOworCXU4IHZtX3VzZXJfaWRbOV07CiAJaW50IGksIHJjOwogCiAJcHJpdiA9IE5VTEw7CkBAIC02NTMsNiArNjgyLDIwIEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCS8qIEVuZm9yY2UgdGhhdCBpcHZtaWQgaXMgYWxsb3dlZCB0byBjb25uZWN0IHRvIHVzICovCisJcmVhZF9sb2NrKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJcmMgPSBodmNfaXVjdl9maWx0ZXJfY29ubnJlcShpcHZtaWQpOworCXJlYWRfdW5sb2NrKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJaWYgKHJjKSB7CisJCWl1Y3ZfcGF0aF9zZXZlcihwYXRoLCBpcHVzZXIpOworCQlpdWN2X3BhdGhfZnJlZShwYXRoKTsKKwkJbWVtY3B5KHZtX3VzZXJfaWQsIGlwdm1pZCwgOCk7CisJCXZtX3VzZXJfaWRbOF0gPSAwOworCQlwcl9pbmZvKCJBIGNvbm5lY3Rpb24gcmVxdWVzdCBmcm9tIHovVk0gdXNlciBJRCAlcyAiCisJCQkid2FzIHJlZnVzZWRcbiIsIHZtX3VzZXJfaWQpOworCQlyZXR1cm4gMDsKKwl9CisKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCiAJLyogSWYgdGhlIHRlcm1pbmFsIGlzIGFscmVhZHkgY29ubmVjdGVkIG9yIGJlaW5nIHNldmVyZWQsIHRoZW4gc2V2ZXIKQEAgLTg3Nyw2ICs5MjAsMTcxIEBACiB9CiAKIC8qKgorICogaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKCkgLSBQYXJzZSBmaWx0ZXIgZm9yIGEgc2luZ2xlIHovVk0gdXNlciBJRAorICogQGZpbHRlcjoJU3RyaW5nIGNvbnRhaW5pbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9wYXJzZV9maWx0ZXIoY29uc3QgY2hhciAqZmlsdGVyLCBjaGFyICpkZXN0KQoreworCWNvbnN0IGNoYXIgKm5leHRkZWxpbSwgKnJlc2lkdWFsOworCXNpemVfdCBsZW47CisKKwluZXh0ZGVsaW0gPSBzdHJjaHIoZmlsdGVyLCAnLCcpOworCWlmIChuZXh0ZGVsaW0pIHsKKwkJbGVuID0gbmV4dGRlbGltIC0gZmlsdGVyOworCQlyZXNpZHVhbCA9IG5leHRkZWxpbSArIDE7CisJfSBlbHNlIHsKKwkJbGVuID0gc3RybGVuKGZpbHRlcik7CisJCXJlc2lkdWFsID0gZmlsdGVyICsgbGVuOworCX0KKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBjaGVjayBmb3IgJ1xuJyAoaWYgY2FsbGVkIGZyb20gc3lzZnMpICovCisJaWYgKGZpbHRlcltsZW4gLSAxXSA9PSAnXG4nKQorCQlsZW4tLTsKKworCWlmIChsZW4gPiA4KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIHBhZCB3aXRoIGJsYW5rcyBhbmQgc2F2ZSB1cHBlciBjYXNlIHZlcnNpb24gb2YgdXNlciBJRCAqLworCW1lbXNldChkZXN0LCAnICcsIDgpOworCXdoaWxlIChsZW4tLSkKKwkJZGVzdFtsZW5dID0gdG91cHBlcihmaWx0ZXJbbGVuXSk7CisJcmV0dXJuIHJlc2lkdWFsOworfQorCisvKioKKyAqIGh2Y19pdWN2X3NldHVwX2ZpbHRlcigpIC0gU2V0IHVwIHovVk0gdXNlciBJRCBmaWx0ZXIKKyAqIEBmaWx0ZXI6CVN0cmluZyBjb25zaXN0aW5nIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICoKKyAqIFRoZSBmdW5jdGlvbiBwYXJzZXMgdGhlIEBmaWx0ZXIgc3RyaW5nIGFuZCBjcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAqIHRoZSBsaXN0IG9mIHovVk0gdXNlciBJRCBmaWx0ZXIgZW50cmllcy4KKyAqIFJldHVybiBjb2RlIDAgbWVhbnMgc3VjY2VzcywgLUVJTlZBTCBpZiB0aGUgZmlsdGVyIGlzIHN5bnRhY3RpY2FsbHkKKyAqIGluY29ycmVjdCwgLUVOT01FTSBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCisgKiBmaWx0ZXIgbGlzdCBhcnJheSwgb3IgLUVOT1NQQyBpZiB0b28gbWFueSB6L1ZNIHVzZXIgSURzIGhhdmUgYmVlbiBzcGVjaWZpZWQuCisgKi8KK3N0YXRpYyBpbnQgaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCkKK3sKKwljb25zdCBjaGFyICpyZXNpZHVhbDsKKwlpbnQgZXJyOworCXNpemVfdCBzaXplLCBjb3VudDsKKwl2b2lkICphcnJheSwgKm9sZF9maWx0ZXI7CisKKwljb3VudCA9IHN0cmxlbih2YWwpOworCWlmIChjb3VudCA9PSAwIHx8IChjb3VudCA9PSAxICYmIHZhbFswXSA9PSAnXG4nKSkgeworCQlzaXplICA9IDA7CisJCWFycmF5ID0gTlVMTDsKKwkJZ290byBvdXRfcmVwbGFjZV9maWx0ZXI7CS8qIGNsZWFyIGZpbHRlciAqLworCX0KKworCS8qIGNvdW50IHVzZXIgSURzIGluIG9yZGVyIHRvIGFsbG9jYXRlIHN1ZmZpY2llbnQgbWVtb3J5ICovCisJc2l6ZSA9IDE7CisJcmVzaWR1YWwgPSB2YWw7CisJd2hpbGUgKChyZXNpZHVhbCA9IHN0cmNocihyZXNpZHVhbCwgJywnKSkgIT0gTlVMTCkgeworCQlyZXNpZHVhbCsrOworCQlzaXplKys7CisJfQorCisJLyogY2hlY2sgaWYgdGhlIHNwZWNpZmllZCBsaXN0IGV4Y2VlZHMgdGhlIGZpbHRlciBsaW1pdCAqLworCWlmIChzaXplID4gTUFYX1ZNSURfRklMVEVSKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWFycmF5ID0ga3phbGxvYyhzaXplICogOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcnJheSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb3VudCA9IHNpemU7CisJcmVzaWR1YWwgPSB2YWw7CisJd2hpbGUgKCpyZXNpZHVhbCAmJiBjb3VudCkgeworCQlyZXNpZHVhbCA9IGh2Y19pdWN2X3BhcnNlX2ZpbHRlcihyZXNpZHVhbCwKKwkJCQkJCSBhcnJheSArICgoc2l6ZSAtIGNvdW50KSAqIDgpKTsKKwkJaWYgKElTX0VSUihyZXNpZHVhbCkpIHsKKwkJCWVyciA9IFBUUl9FUlIocmVzaWR1YWwpOworCQkJa2ZyZWUoYXJyYXkpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCWNvdW50LS07CisJfQorCitvdXRfcmVwbGFjZV9maWx0ZXI6CisJd3JpdGVfbG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCW9sZF9maWx0ZXIgPSBodmNfaXVjdl9maWx0ZXI7CisJaHZjX2l1Y3ZfZmlsdGVyX3NpemUgPSBzaXplOworCWh2Y19pdWN2X2ZpbHRlciA9IGFycmF5OworCXdyaXRlX3VubG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWtmcmVlKG9sZF9maWx0ZXIpOworCisJZXJyID0gMDsKK291dF9lcnI6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBwYXJhbV9zZXRfdm1pZGZpbHRlcigpIC0gU2V0IHovVk0gdXNlciBJRCBmaWx0ZXIgcGFyYW1ldGVyCisgKiBAdmFsOglTdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqIEBrcDoJCUtlcm5lbCBwYXJhbWV0ZXIgcG9pbnRpbmcgdG8gaHZjX2l1Y3ZfZmlsdGVyIGFycmF5CisgKgorICogVGhlIGZ1bmN0aW9uIHNldHMgdXAgdGhlIHovVk0gdXNlciBJRCBmaWx0ZXIgc3BlY2lmaWVkIGFzIGNvbW1hLXNlcGFyYXRlZAorICogbGlzdCBvZiB1c2VyIElEcyBpbiBAdmFsLgorICogTm90ZTogSWYgaXQgaXMgY2FsbGVkIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MsIEB2YWwgaXMgc3RvcmVkIGFuZAorICoJIHBhcnNlZCBsYXRlciBpbiBodmNfaXVjdl9pbml0KCkuCisgKi8KK3N0YXRpYyBpbnQgcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIU1BQ0hJTkVfSVNfVk0gfHwgIWh2Y19pdWN2X2RldmljZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCF2YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmMgPSAwOworCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQorCQlyYyA9IGh2Y19pdWN2X3NldHVwX2ZpbHRlcih2YWwpOworCWVsc2UKKwkJaHZjX2l1Y3ZfZmlsdGVyX3N0cmluZyA9IHZhbDsJLyogZGVmZXIuLi4gKi8KKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogcGFyYW1fZ2V0X3ZtaWRmaWx0ZXIoKSAtIEdldCB6L1ZNIHVzZXIgSUQgZmlsdGVyCisgKiBAYnVmZmVyOglCdWZmZXIgdG8gc3RvcmUgei9WTSB1c2VyIElEIGZpbHRlciwKKyAqCQkoYnVmZmVyIHNpemUgYXNzdW1wdGlvbiBQQUdFX1NJWkUpCisgKiBAa3A6CQlLZXJuZWwgcGFyYW1ldGVyIHBvaW50aW5nIHRvIHRoZSBodmNfaXVjdl9maWx0ZXIgYXJyYXkKKyAqCisgKiBUaGUgZnVuY3Rpb24gc3RvcmVzIHRoZSBmaWx0ZXIgYXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKiBpbiBAYnVmZmVyLiBUeXBpY2FsbHksIHN5c2ZzIHJvdXRpbmVzIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYXR0ciBzaG93LgorICovCitzdGF0aWMgaW50IHBhcmFtX2dldF92bWlkZmlsdGVyKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJjOworCXNpemVfdCBpbmRleCwgbGVuOworCXZvaWQgKnN0YXJ0LCAqZW5kOworCisJaWYgKCFNQUNISU5FX0lTX1ZNIHx8ICFodmNfaXVjdl9kZXZpY2VzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJjID0gMDsKKwlyZWFkX2xvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaW5kZXgrKykgeworCQlzdGFydCA9IGh2Y19pdWN2X2ZpbHRlciArICg4ICogaW5kZXgpOworCQllbmQgICA9IG1lbWNocihzdGFydCwgJyAnLCA4KTsKKwkJbGVuICAgPSAoZW5kKSA/IGVuZCAtIHN0YXJ0IDogODsKKwkJbWVtY3B5KGJ1ZmZlciArIHJjLCBzdGFydCwgbGVuKTsKKwkJcmMgKz0gbGVuOworCQlidWZmZXJbcmMrK10gPSAnLCc7CisJfQorCXJlYWRfdW5sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJaWYgKHJjKQorCQlidWZmZXJbLS1yY10gPSAnXDAnOwkvKiByZXBsYWNlIGxhc3QgY29tbWEgYW5kIHVwZGF0ZSByYyAqLworCXJldHVybiByYzsKK30KKworI2RlZmluZSBwYXJhbV9jaGVja192bWlkZmlsdGVyKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdm9pZCkKKworLyoqCiAgKiBodmNfaXVjdl9pbml0KCkgLSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24KICAqLwogc3RhdGljIGludCBfX2luaXQgaHZjX2l1Y3ZfaW5pdCh2b2lkKQpAQCAtODg0LDI0ICsxMDkyLDUzIEBACiAJaW50IHJjOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKCFNQUNISU5FX0lTX1ZNKSB7Ci0JCXByX2luZm8oIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90ICIKLQkJCSAgICJiZSB1c2VkIHdpdGhvdXQgei9WTVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCWlmICghaHZjX2l1Y3ZfZGV2aWNlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoaHZjX2l1Y3ZfZGV2aWNlcyA+IE1BWF9IVkNfSVVDVl9MSU5FUykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFNQUNISU5FX0lTX1ZNKSB7CisJCXByX25vdGljZSgiVGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgIgorCQkJICAgImJlIHVzZWQgd2l0aG91dCB6L1ZNXG4iKTsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwlpZiAoaHZjX2l1Y3ZfZGV2aWNlcyA+IE1BWF9IVkNfSVVDVl9MSU5FUykgeworCQlwcl9lcnIoIiVsdSBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhlIGh2Y19pdWN2PSAiCisJCQkia2VybmVsIHBhcmFtZXRlclxuIiwgaHZjX2l1Y3ZfZGV2aWNlcyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJLyogcGFyc2UgaHZjX2l1Y3ZfYWxsb3cgc3RyaW5nIGFuZCBjcmVhdGUgei9WTSB1c2VyIElEIGZpbHRlciBsaXN0ICovCisJaWYgKGh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcpIHsKKwkJcmMgPSBodmNfaXVjdl9zZXR1cF9maWx0ZXIoaHZjX2l1Y3ZfZmlsdGVyX3N0cmluZyk7CisJCXN3aXRjaCAocmMpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgLUVOT01FTToKKwkJCXByX2VycigiQWxsb2NhdGluZyBtZW1vcnkgZmFpbGVkIHdpdGggIgorCQkJCSJyZWFzb24gY29kZT0lZFxuIiwgMyk7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJY2FzZSAtRUlOVkFMOgorCQkJcHJfZXJyKCJodmNfaXVjdl9hbGxvdz0gZG9lcyBub3Qgc3BlY2lmeSBhIHZhbGlkICIKKwkJCQkiei9WTSB1c2VyIElEIGxpc3RcbiIpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWNhc2UgLUVOT1NQQzoKKwkJCXByX2VycigiaHZjX2l1Y3ZfYWxsb3c9IHNwZWNpZmllcyB0b28gbWFueSAiCisJCQkJInovVk0gdXNlciBJRHNcbiIpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJfQorCX0KIAogCWh2Y19pdWN2X2J1ZmZlcl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKEtNU0dfQ09NUE9ORU5ULAogCQkJCQkgICBzaXplb2Yoc3RydWN0IGl1Y3ZfdHR5X2J1ZmZlciksCiAJCQkJCSAgIDAsIDAsIE5VTEwpOwogCWlmICghaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlKSB7CiAJCXByX2VycigiQWxsb2NhdGluZyBtZW1vcnkgZmFpbGVkIHdpdGggcmVhc29uIGNvZGU9JWRcbiIsIDEpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAKIAlodmNfaXVjdl9tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKE1FTVBPT0xfTUlOX05SLApAQCAtOTA5LDcgKzExNDYsOCBAQAogCWlmICghaHZjX2l1Y3ZfbWVtcG9vbCkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoIHJlYXNvbiBjb2RlPSVkXG4iLCAyKTsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGh2Y19pdWN2X2J1ZmZlcl9jYWNoZSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Vycm9yOwogCX0KIAogCS8qIHJlZ2lzdGVyIHRoZSBmaXJzdCB0ZXJtaW5hbCBkZXZpY2UgYXMgY29uc29sZQpAQCAtOTUzLDYgKzExOTEsOCBAQAogb3V0X2Vycm9yX21lbW9yeToKIAltZW1wb29sX2Rlc3Ryb3koaHZjX2l1Y3ZfbWVtcG9vbCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGh2Y19pdWN2X2J1ZmZlcl9jYWNoZSk7CitvdXRfZXJyb3I6CisJaHZjX2l1Y3ZfZGV2aWNlcyA9IDA7IC8qIGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGFueSBkZXZpY2UgKi8KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTk2OCwzICsxMjA4LDQgQEAKIAogZGV2aWNlX2luaXRjYWxsKGh2Y19pdWN2X2luaXQpOwogX19zZXR1cCgiaHZjX2l1Y3Y9IiwgaHZjX2l1Y3ZfY29uZmlnKTsKK2NvcmVfcGFyYW0oaHZjX2l1Y3ZfYWxsb3csIGh2Y19pdWN2X2ZpbHRlciwgdm1pZGZpbHRlciwgMDY0MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKaW5kZXggODgyMmVjYS4uNWZhYjY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwpAQCAtMjAsNiArMjAsMjAgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIEhXX1JBTkRPTV9USU1FUklPTUVNCisJdHJpc3RhdGUgIlRpbWVyIElPTUVNIEhXIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgSEFTX0lPTUVNCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsLXNpZGUgc3VwcG9ydCBmb3IgYSBnZW5lcmljIFJhbmRvbQorCSAgTnVtYmVyIEdlbmVyYXRvciB1c2VkIGJ5IHJlYWRpbmcgYSAnZHVtYicgaW9tZW0gYWRkcmVzcyB0aGF0CisJICBpcyB0byBiZSByZWFkIG5vIGZhc3RlciB0aGFuLCBmb3IgZXhhbXBsZSwgb25jZSBhIHNlY29uZDsKKwkgIHRoZSBkZWZhdWx0IEZQR0EgYml0c3RyZWFtIG9uIHRoZSBUUy03ODAwIGhhcyBzdWNoIGZ1bmN0aW9uYWxpdHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpbWVyaW9tZW0tcm5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgSFdfUkFORE9NX0lOVEVMCiAJdHJpc3RhdGUgIkludGVsIEhXIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgKFg4NiB8fCBJQTY0KSAmJiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCmluZGV4IGI2ZWZmYjcuLmU4MWQyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX0hXX1JBTkRPTSkgKz0gcm5nLWNvcmUubwogcm5nLWNvcmUteSA6PSBjb3JlLm8KK29iai0kKENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSkgKz0gdGltZXJpb21lbS1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9JTlRFTCkgKz0gaW50ZWwtcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fQU1EKSArPSBhbWQtcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fR0VPREUpICs9IGdlb2RlLXJuZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhZDQxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIGRyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKKyAqICAgQ29weXJpZ2h0IDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogT3ZlcnZpZXc6CisgKiAgIFRoaXMgZHJpdmVyIGlzIHVzZWZ1bCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBhbiBJTyByYW5nZSB0aGF0IHByb3ZpZGVzCisgKiAgIHBlcmlvZGljIHJhbmRvbSBkYXRhIGZyb20gYSBzaW5nbGUgSU8gbWVtb3J5IGFkZHJlc3MuICBBbGwgdGhlIHBsYXRmb3JtCisgKiAgIGhhcyB0byBkbyBpcyBwcm92aWRlIHRoZSBhZGRyZXNzIGFuZCAnd2FpdCB0aW1lJyB0aGF0IG5ldyBkYXRhIGJlY29tZXMKKyAqICAgYXZhaWxhYmxlLgorICoKKyAqIFRPRE86IGFkZCBzdXBwb3J0IGZvciByZWFkaW5nIHNpemVzIG90aGVyIHRoYW4gMzJiaXRzIGFuZCBtYXNraW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+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+dmNfdHR5ID0gTlVMTDsKLQl2Y3NfcmVtb3ZlX3N5c2ZzKHR0eSk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCXR0eV9zaHV0ZG93bih0dHkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggMTUyNTg4Mi4uMWVmYjI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC0yLDMgKzIsNCBAQAogb2JqLSQoQ09ORklHX1g4Nl9DWUNMT05FX1RJTUVSKQkrPSBjeWNsb25lLm8KIG9iai0kKENPTkZJR19YODZfUE1fVElNRVIpCSs9IGFjcGlfcG0ubwogb2JqLSQoQ09ORklHX1NDeDIwMEhSX1RJTUVSKQkrPSBzY3gyMDBfaHJ0Lm8KK29iai0kKENPTkZJR19TSF9USU1FUl9DTVQpCSs9IHNoX2NtdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgzYjQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtMCwwICsxLDYxNSBAQAorLyoKKyAqIFN1cGVySCBUaW1lciBTdXBwb3J0IC0gQ01UCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+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+ZG1hLmNoYW5jbnQpOwogCiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmZHctPmRtYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwppbmRleCAyNGYzY2E4Li5jYjBmNjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAltY2ktPmVkYWNfY2FwID0gRURBQ19GTEFHX0VDIHwgRURBQ19GTEFHX1NFQ0RFRDsKIAltY2ktPm1vZF9uYW1lID0gImNlbGxfZWRhYyI7CiAJbWNpLT5jdGxfbmFtZSA9ICJNSUMiOwotCW1jaS0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCW1jaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAltY2ktPmVkYWNfY2hlY2sgPSBjZWxsX2VkYWNfY2hlY2s7CiAJY2VsbF9lZGFjX2luaXRfY3Nyb3dzKG1jaSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwppbmRleCA4NTNlZjM3Li40NjM3YTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlwY2ktPmRldiA9ICZvcC0+ZGV2OwogCXBjaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CiAJcGNpLT5jdGxfbmFtZSA9IHBkYXRhLT5uYW1lOwotCXBjaS0+ZGV2X25hbWUgPSBvcC0+ZGV2LmJ1c19pZDsKKwlwY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJm9wLT5kZXYpOwogCiAJaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpCiAJCXBjaS0+ZWRhY19jaGVjayA9IG1wYzg1eHhfcGNpX2NoZWNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCmluZGV4IDA4M2NlOGQuLjUxMzFhYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCXBkYXRhLT5pcnEgPSBOT19JUlE7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNpKTsKIAlwY2ktPmRldiA9ICZwZGV2LT5kZXY7Ci0JcGNpLT5kZXZfbmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CisJcGNpLT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCXBjaS0+bW9kX25hbWUgPSBFREFDX01PRF9TVFI7CiAJcGNpLT5jdGxfbmFtZSA9IHBkYXRhLT5uYW1lOwogCkBAIC0yOTQsNyArMjk0LDcgQEAKIAlwZGF0YS0+aXJxID0gTk9fSVJROwogCWVkYWNfZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVkYWNfZGV2KTsKLQllZGFjX2Rldi0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCWVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC00NjIsNyArNDYyLDcgQEAKIAlwZGF0YS0+aXJxID0gTk9fSVJROwogCWVkYWNfZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVkYWNfZGV2KTsKLQllZGFjX2Rldi0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCWVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC03MTMsNyArNzEzLDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY2kpOwogCXBkYXRhLT5uYW1lID0gIm12NjR4NjBfbWNfZXJyIjsKIAlwZGF0YS0+aXJxID0gTk9fSVJROwotCW1jaS0+ZGV2X25hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCW1jaS0+ZGV2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlwZGF0YS0+ZWRhY19pZHggPSBlZGFjX21jX2lkeCsrOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYyBiL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCmluZGV4IGM5NTBiZjguLjY2OTU4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCisrKyBiL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAllZGV2LT5kZXYuYnVzID0gJmVpc2FfYnVzX3R5cGU7CiAJZWRldi0+ZGV2LmRtYV9tYXNrID0gJmVkZXYtPmRtYV9tYXNrOwogCWVkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IGVkZXYtPmRtYV9tYXNrOwotCXNwcmludGYgKGVkZXYtPmRldi5idXNfaWQsICIlMDJYOiUwMlgiLCByb290LT5idXNfbnIsIHNsb3QpOworCWRldl9zZXRfbmFtZSgmZWRldi0+ZGV2LCAiJTAyWDolMDJYIiwgcm9vdC0+YnVzX25yLCBzbG90KTsKIAogCWZvciAoaSA9IDA7IGkgPCBFSVNBX01BWF9SRVNPVVJDRVM7IGkrKykgewogI2lmZGVmIENPTkZJR19FSVNBX05BTUVTCkBAIC0zMDEsNyArMzAxLDcgQEAKIAlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXY7CiAKICAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIkVJU0E6IFByb2JpbmcgYnVzICVkIGF0ICVzXG4iLAotCQlyb290LT5idXNfbnIsIHJvb3QtPmRldi0+YnVzX2lkKTsKKwkJcm9vdC0+YnVzX25yLCBkZXZfbmFtZShyb290LT5kZXYpKTsKIAogCS8qIEZpcnN0IHRyeSB0byBnZXQgaG9sZCBvZiBzbG90IDAuIElmIHRoZXJlIGlzIG5vIGRldmljZQogCSAqIGhlcmUsIHNpbXBseSBmYWlsLCB1bmxlc3Mgcm9vdC0+Zm9yY2VfcHJvYmUgaXMgc2V0LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jIGIvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCmluZGV4IDdhMTE2ODIuLjk4NGI1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogewogCXN0cnVjdCBncGlvX2NoaXAgKmMgPSAmYmctPmdwaW87CiAKLQljLT5sYWJlbCA9IGJnLT5wZGV2LT5kZXYuYnVzX2lkOworCWMtPmxhYmVsID0gZGV2X25hbWUoJmJnLT5wZGV2LT5kZXYpOwogCWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJYy0+ZGlyZWN0aW9uX2lucHV0ID0gYnQ4eHhncGlvX2dwaW9fZGlyZWN0aW9uX2lucHV0OwogCWMtPmdldCA9IGJ0OHh4Z3Bpb19ncGlvX2dldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKaW5kZXggZjUyNjYzZS4uZTEzY2I2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKQEAgLTMzNywxNCArMzM3LDEwIEBACiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCWludCByZXRjb2RlOwogCiAJRFJNX0RFQlVHKCJmZCA9ICVkLCBkZXZpY2UgPSAweCVseFxuIiwgZmQsCiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYocHJpdi0+bWlub3ItPmRldmljZSkpOwotCXJldGNvZGUgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKLQlpZiAocmV0Y29kZSA8IDApCi0JCXJldHVybiByZXRjb2RlOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmRldi0+YnVmX2FzeW5jKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2Zhc3luYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCA1YWE2NzgwLi4xODZkMDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0zNTksOCArMzU5LDggQEAKIAlEUk1fREVCVUcoImFkZGluZyBcIiVzXCIgdG8gc3lzZnNcbiIsCiAJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAotCXNucHJpbnRmKGNvbm5lY3Rvci0+a2Rldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiY2FyZCVkLSVzIiwKLQkJIGRldi0+cHJpbWFyeS0+aW5kZXgsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJZGV2X3NldF9uYW1lKCZjb25uZWN0b3ItPmtkZXYsICJjYXJkJWQtJXMiLAorCQkgICAgIGRldi0+cHJpbWFyeS0+aW5kZXgsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjb25uZWN0b3ItPmtkZXYpOwogCiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDFmNWI1ZDQuLmFhMjE0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTIyNywxMiArMjI3LDkgQEAKICAqLwogc3RhdGljIGludCBoaWRkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IGU3ZDk4NDguLmZiYjkwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtODQxLDcgKzg0MSw3IEBACiAKIAlpZiAoY2xpZW50LT5kcml2ZXIgJiYgIWlzX25ld3N0eWxlX2RyaXZlcihjbGllbnQtPmRyaXZlcikpIHsKIAkJY2xpZW50LT5kZXYucmVsZWFzZSA9IGkyY19jbGllbnRfcmVsZWFzZTsKLQkJY2xpZW50LT5kZXYudWV2ZW50X3N1cHByZXNzID0gMTsKKwkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJmNsaWVudC0+ZGV2LCAxKTsKIAl9IGVsc2UKIAkJY2xpZW50LT5kZXYucmVsZWFzZSA9IGkyY19jbGllbnRfZGV2X3JlbGVhc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IDVlYTNiZmEuLjY0MGM5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNTYsOCArNTYsMTIgQEAKIAogY29tbWVudCAiUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcyIKIAorY29uZmlnIElERV9YRkVSX01PREUKKwlib29sCisKIGNvbmZpZyBJREVfVElNSU5HUwogCWJvb2wKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCiBjb25maWcgSURFX0FUQVBJCiAJYm9vbApAQCAtNjk4LDYgKzcwMiw3IEBACiBjb25maWcgQkxLX0RFVl9JREVfQVUxWFhYCiAgICAgICAgYm9vbCAiSURFIGZvciBBTUQgQWxjaGVteSBBdTEyMDAiCiAgICAgICAgZGVwZW5kcyBvbiBTT0NfQVUxMjAwCisgICAgICAgc2VsZWN0IElERV9YRkVSX01PREUKIGNob2ljZQogICAgICAgIHByb21wdCAiSURFIE1vZGUgZm9yIEFNRCBBbGNoZW15IEF1MTIwMCIKICAgICAgICBkZWZhdWx0IENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BCkBAIC04NzEsNiArODc2LDcgQEAKIAogY29uZmlnIEJMS19ERVZfRFRDMjI3OAogCXRyaXN0YXRlICJEVEMtMjI3OCBzdXBwb3J0IgorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAJc2VsZWN0IElERV9MRUdBQ1kKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpcyBlbmFibGVkIGF0IHJ1bnRpbWUgdXNpbmcgdGhlICJkdGMyMjc4LnByb2JlIiBrZXJuZWwKQEAgLTkwMiw2ICs5MDgsNyBAQAogCiBjb25maWcgQkxLX0RFVl9VTUM4NjcyCiAJdHJpc3RhdGUgIlVNQy04NjcyIHN1cHBvcnQiCisJc2VsZWN0IElERV9YRkVSX01PREUKIAlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgInVtYzg2NzIucHJvYmUiIGtlcm5lbApAQCAtOTE1LDUgKzkyMiw2IEBACiBjb25maWcgQkxLX0RFVl9JREVETUEKIAlkZWZfYm9vbCBCTEtfREVWX0lERURNQV9TRkYgfHwgXAogCQkgQkxLX0RFVl9JREVETUFfSUNTIHx8IEJMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAKIGVuZGlmICMgSURFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCmluZGV4IDFjMzI2ZDkuLjliNGJiZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWRlL01ha2VmaWxlCkBAIC01LDkgKzUsMTEgQEAKIEVYVFJBX0NGTEFHUwkJCQkrPSAtSWRyaXZlcnMvaWRlCiAKIGlkZS1jb3JlLXkgKz0gaWRlLm8gaWRlLWlvY3Rscy5vIGlkZS1pby5vIGlkZS1pb3BzLm8gaWRlLWxpYi5vIGlkZS1wcm9iZS5vIFwKLQkgICAgICBpZGUtdGFza2ZpbGUubyBpZGUtcG0ubyBpZGUtcGFyay5vIGlkZS1waW8tYmxhY2tsaXN0Lm8gaWRlLXN5c2ZzLm8KKwkgICAgICBpZGUtdGFza2ZpbGUubyBpZGUtcG0ubyBpZGUtcGFyay5vIGlkZS1zeXNmcy5vIGlkZS1kZXZzZXRzLm8gXAorCSAgICAgIGlkZS1pby1zdGQubyBpZGUtZWgubwogCiAjIGNvcmUgSURFIGNvZGUKK2lkZS1jb3JlLSQoQ09ORklHX0lERV9YRkVSX01PREUpCSs9IGlkZS1waW8tYmxhY2tsaXN0Lm8gaWRlLXhmZXItbW9kZS5vCiBpZGUtY29yZS0kKENPTkZJR19JREVfVElNSU5HUykJCSs9IGlkZS10aW1pbmdzLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9BVEFQSSkJCSs9IGlkZS1hdGFwaS5vCiBpZGUtY29yZS0kKENPTkZJR19CTEtfREVWX0lERVBDSSkJKz0gc2V0dXAtcGNpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FlYzYyeHguYyBiL2RyaXZlcnMvaWRlL2FlYzYyeHguYwppbmRleCA0NDg1YjljLi44NzhmOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKKysrIGIvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAlkcml2ZS0+aHdpZi0+cG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgcGlvICsgWEZFUl9QSU9fMCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2FlYzYyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2FlYzYyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAkvKiBUaGVzZSBhcmUgbmVjZXNzYXJ5IHRvIGdldCBBRUM2MjgwIE1hY2ludG9zaCBjYXJkcyB0byB3b3JrICovCiAJaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NSkgfHwKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDRhLCByZWc0YWggfCAweDgwKTsKIAl9CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBhdHA4NnhfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwppbmRleCA2NmY0MzA4Li5kMzUxM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogICoJYXBwcm9wcmlhdGUgYWxzbyBzZXRzIHVwIHRoZSAxNTMzIHNvdXRoYnJpZGdlLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2FsaTE1eDMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2FsaTE1eDMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHRtcGJ5dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKaW5kZXggNzcyNjdjOC4uNjI4Y2QyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYW1kNzR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2FtZDc0eHguYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgKiBUaGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2suICBJbml0aWFsaXplIGRyaXZlIGluZGVwZW5kZW50IHJlZ2lzdGVycy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9hbWQ3NHh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9hbWQ3NHh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggdCA9IDAsIG9mZnNldCA9IGFtZF9vZmZzZXQoZGV2KTsKIApAQCAtMTcyLDcgKzE3Miw3IEBACiAJCXQgfD0gMHhmMDsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBBTURfSURFX0NPTkZJRyArIG9mZnNldCwgdCk7CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBhbWRfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCkBAIC0xODMsMTQgKzE4Myw2IEBACiAJCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9hbWQ3NHh4KGlkZV9od2lmX3QgKmh3aWYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQotCWlmIChod2lmLT5pcnEgPT0gMCkgLyogMCBpcyBib2d1cyBidXQgd2lsbCBkbyBmb3Igbm93ICovCi0JCWh3aWYtPmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoZGV2LCBod2lmLT5jaGFubmVsKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgYW1kX3BvcnRfb3BzID0gewogCS5zZXRfcGlvX21vZGUJCT0gYW1kX3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYV9tb2RlCQk9IGFtZF9zZXRfZHJpdmUsCkBAIC0yMDcsNyArMTk5LDYgQEAKIAl7CQkJCQkJCQlcCiAJCS5uYW1lCQk9IERSVl9OQU1FLAkJCQlcCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYW1kNzR4eCwJCQlcCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfYW1kNzR4eCwJCQlcCiAJCS5lbmFibGViaXRzCT0ge3sweDQwLDB4MDIsMHgwMn0sIHsweDQwLDB4MDEsMHgwMX19LAlcCiAJCS5wb3J0X29wcwk9ICZhbWRfcG9ydF9vcHMsCQkJXAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfQU1ELAkJCVwKQEAgLTIyMSw3ICsyMTIsNiBAQAogCXsJCQkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQkJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hbWQ3NHh4LAkJCVwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbWQ3NHh4LAkJCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NTAsMHgwMiwweDAyfSwgezB4NTAsMHgwMSwweDAxfX0sCVwKIAkJLnBvcnRfb3BzCT0gJmFtZF9wb3J0X29wcywJCQlcCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19BTUQsCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9hdGlpeHAuYwppbmRleCBlY2QxZTYyLi45MjNjYmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdGlpeHAuYworKysgYi9kcml2ZXJzL2lkZS9hdGlpeHAuYwpAQCAtMTQyLDcgKzE0Miw2IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuZW5hYmxlYml0cwk9IHt7MHg0OCwweDAxLDB4MDB9LCB7MHg0OCwweDA4LDB4MDB9fSwKIAkJLnBvcnRfb3BzCT0gJmF0aWl4cF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTEVHQUNZX0lSUVMsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0xNTEsNyArMTUwLDcgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ4LDB4MDEsMHgwMH0sIHsweDAwLDB4MDAsMHgwMH19LAogCQkucG9ydF9vcHMJPSAmYXRpaXhwX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfTEVHQUNZX0lSUVMsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwppbmRleCA3OWEyZGZlLi4xNTRlYzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCkBAIC01MzYsOSArNTM2LDggQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBhdV9pZGVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdV9pZGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CkBAIC01NTIsMjMgKzU1MSwyMyBAQAogI2VuZGlmCiAKIAltZW1zZXQoJmF1aWRlX2h3aWYsIDAsIHNpemVvZihfYXVpZGVfaHdpZikpOwotCWFod2lmLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWFod2lmLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAogCWlmIChyZXMgPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIGJhc2UgYWRkcmVzc1xuIiwgRFJWX05BTUUsIHBkZXYtPmlkKTsKKwkJcHJfZGVidWcoIiVzICVkOiBubyBiYXNlIGFkZHJlc3NcbiIsIERSVl9OQU1FLCBkZXYtPmlkKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChhaHdpZi0+aXJxIDwgMCkgewotCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIElSUVxuIiwgRFJWX05BTUUsIHBkZXYtPmlkKTsKKwkJcHJfZGVidWcoIiVzICVkOiBubyBJUlFcbiIsIERSVl9OQU1FLCBkZXYtPmlkKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKLQkJCQlwZGV2LT5uYW1lKSkgeworCQkJCWRldi0+bmFtZSkpIHsKIAkJcHJfZGVidWcoIiVzOiByZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iLCBEUlZfTkFNRSk7CiAJCXJldCA9ICAtRUJVU1k7CiAJCWdvdG8gb3V0OwpAQCAtNTgzLDcgKzU4Miw3IEBACiAJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAJYXVpZGVfc2V0dXBfcG9ydHMoJmh3LCBhaHdpZik7CiAJaHcuaXJxID0gYWh3aWYtPmlycTsKLQlody5kZXYgPSBkZXY7CisJaHcuZGV2ID0gJmRldi0+ZGV2OwogCWh3LmNoaXBzZXQgPSBpZGVfYXUxeHh4OwogCiAJcmV0ID0gaWRlX2hvc3RfYWRkKCZhdTF4eHhfcG9ydF9pbmZvLCBod3MsICZob3N0KTsKQEAgLTU5Miw3ICs1OTEsNyBAQAogCiAJYXVpZGVfaHdpZi5od2lmID0gaG9zdC0+cG9ydHNbMF07CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQXUxeHh4IElERShidWlsdGluKSBjb25maWd1cmVkIGZvciAlc1xuIiwgbW9kZSApOwogCkBAIC02MDAsMzggKzU5OSwzOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXVfaWRlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1X2lkZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCiAJaWRlX2hvc3RfcmVtb3ZlKGhvc3QpOwogCiAJaW91bm1hcCgodm9pZCAqKWFod2lmLT5yZWdiYXNlKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMjAwX2lkZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTIwMC1pZGUiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMjAwX2lkZV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImF1MTIwMC1pZGUiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUgCQk9IGF1X2lkZV9wcm9iZSwKIAkucmVtb3ZlCQk9IGF1X2lkZV9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdV9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdV9pZGVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdTEyMDBfaWRlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCAyZjk2ODhkLi5hZWVlMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2NtZDY0eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfY21kNjR4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggbXJkbW9kZSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NzNTUyMC5jIGIvZHJpdmVycy9pZGUvY3M1NTIwLmMKaW5kZXggZDAwM2JlYy4uNThmYjkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3M1NTIwLmMKKysrIGIvZHJpdmVycy9pZGUvY3M1NTIwLmMKQEAgLTEzMyw3ICsxMzMsOCBAQAogCSAqCWRvIGFsbCB0aGUgZGV2aWNlIHNldHVwIGZvciB1cwogCSAqLwogCi0JaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIDE0LCAmaHdbMF0sICZod3NbMF0pOworCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAmaHdbMF0sICZod3NbMF0pOworCWh3WzBdLmlycSA9IDE0OwogCiAJcmV0dXJuIGlkZV9ob3N0X2FkZChkLCBod3MsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTMwLmMgYi9kcml2ZXJzL2lkZS9jczU1MzAuYwppbmRleCBkOGVkZTg1Li44ZThiMzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MzAuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MzAuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAgKglJbml0aWFsaXplIHRoZSBjczU1MzAgYnJpZGdlIGZvciByZWxpYWJsZSBJREUgRE1BIG9wZXJhdGlvbi4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9jczU1MzAoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2NzNTUzMChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICptYXN0ZXJfMCA9IE5VTEwsICpjczU1MzBfMCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKaW5kZXggOGYxYjJkOS4uYmFjYjExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkucXVpcmtwcm9jCQk9IGlkZV91bmRlY29kZWRfc2xhdmUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgZGVsa2luX2NiX2luaXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9ocHQzNjYuYwppbmRleCAzZWI5YjVjLi5kM2IzZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9ocHQzNjYuYwpAQCAtOTk1LDcgKzk5NSw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyICsgMSwgbmV3X21jcik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2hwdDM2NihzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfaHB0MzY2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBpb19iYXNlCT0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CiAJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKCZkZXYtPmRldik7CkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCWhwdDN4eF9kaXNhYmxlX2Zhc3RfaXJxKGRldiwgMHg1MCk7CiAJaHB0M3h4X2Rpc2FibGVfZmFzdF9pcnEoZGV2LCAweDU0KTsKIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGhwdDN4eF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCmluZGV4IGVjN2QwN2YuLjViNzA0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwpAQCAtMjAsOSArMjAsNiBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2RlZmluZSBSRUdTX1BFUl9HVEYJCTcKLXN0cnVjdCB0YXNrZmlsZV9hcnJheSB7Ci0JdTgJdGZhW1JFR1NfUEVSX0dURl07CS8qIHJlZ3MuIDB4MWYxIC0gMHgxZjcgKi8KLX07CiAKIHN0cnVjdCBHVE1fYnVmZmVyIHsKIAl1MzIJUElPX3NwZWVkMDsKQEAgLTg5LDEyICs4Niw4IEBACiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogCi1zdGF0aWMgaW50IGlkZV9hY3BpX2JsYWNrbGlzdCh2b2lkKQoraW50IGlkZV9hY3BpX2luaXQodm9pZCkKIHsKLQlzdGF0aWMgaW50IGRvbmU7Ci0JaWYgKGRvbmUpCi0JCXJldHVybiAwOwotCWRvbmUgPSAxOwogCWRtaV9jaGVja19zeXN0ZW0oaWRlX2FjcGlfZG1pX3RhYmxlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMiw0MCArMTk1LDYgQEAKIH0KIAogLyoqCi0gKiBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlIC0gR2V0IEFDUEkgb2JqZWN0IGhhbmRsZSBmb3IgYSBnaXZlbiBkcml2ZQotICogQGRyaXZlOiBkZXZpY2UgdG8gbG9jYXRlCi0gKgotICogUmV0cmlldmVzIHRoZSBvYmplY3QgaGFuZGxlIG9mIGEgZ2l2ZW4gZHJpdmUuIEFjY29yZGluZyB0byB0aGUgQUNQSQotICogc3BlYyB0aGUgZHJpdmUgaXMgYSBjaGlsZCBvZiB0aGUgaHdpZi4KLSAqCi0gKiBSZXR1cm5zIGhhbmRsZSBvbiBzdWNjZXNzLCAwIG9uIGVycm9yLgotICovCi1zdGF0aWMgYWNwaV9oYW5kbGUgaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdAkqaHdpZiA9IGRyaXZlLT5od2lmOwotCWludAkJIHBvcnQ7Ci0JYWNwaV9oYW5kbGUJIGRyaXZlX2hhbmRsZTsKLQotCWlmICghaHdpZi0+YWNwaWRhdGEpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCFod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwb3J0ID0gaHdpZi0+Y2hhbm5lbCA/IGRyaXZlLT5kbiAtIDI6IGRyaXZlLT5kbjsKLQotCURFQlBSSU5UKCJFTlRFUjogJXMgYXQgY2hhbm5lbCM6ICVkIHBvcnQjOiAlZFxuIiwKLQkJIGRyaXZlLT5uYW1lLCBod2lmLT5jaGFubmVsLCBwb3J0KTsKLQotCi0JLyogVEJEOiBjb3VsZCBhbHNvIGNoZWNrIEFDUEkgb2JqZWN0IFZBTElEIGJpdHMgKi8KLQlkcml2ZV9oYW5kbGUgPSBhY3BpX2dldF9jaGlsZChod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwgcG9ydCk7Ci0JREVCUFJJTlQoImRyaXZlICVzIGhhbmRsZSAweCVwXG4iLCBkcml2ZS0+bmFtZSwgZHJpdmVfaGFuZGxlKTsKLQotCXJldHVybiBkcml2ZV9oYW5kbGU7Ci19Ci0KLS8qKgogICogZG9fZHJpdmVfZ2V0X0dURiAtIGdldCB0aGUgZHJpdmUgYm9vdHVwIGRlZmF1bHQgdGFza2ZpbGUgc2V0dGluZ3MKICAqIEBkcml2ZTogdGhlIGRyaXZlIGZvciB3aGljaCB0aGUgdGFza2ZpbGUgc2V0dGluZ3Mgc2hvdWxkIGJlIHJldHJpZXZlZAogICogQGd0Zl9sZW5ndGg6IG51bWJlciBvZiBieXRlcyBvZiBfR1RGIGRhdGEgcmV0dXJuZWQgYXQgQGd0Zl9hZGRyZXNzCkBAIC0yNTcsNDcgKzIxNiwxNSBAQAogCWFjcGlfc3RhdHVzCQkJc3RhdHVzOwogCXN0cnVjdCBhY3BpX2J1ZmZlcgkJb3V0cHV0OwogCXVuaW9uIGFjcGlfb2JqZWN0IAkJKm91dF9vYmo7Ci0JaWRlX2h3aWZfdAkJCSpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGRldmljZQkJCSpkZXYgPSBod2lmLT5nZW5kZXYucGFyZW50OwogCWludAkJCQllcnIgPSAtRU5PREVWOwotCWludAkJCQlwb3J0OwogCiAJKmd0Zl9sZW5ndGggPSAwOwogCSpndGZfYWRkcmVzcyA9IDBVTDsKIAkqb2JqX2xvYyA9IDBVTDsKIAotCWlmIChpZGVfbm9hY3BpKQotCQlyZXR1cm4gMDsKLQotCWlmICghZGV2KSB7Ci0JCURFQlBSSU5UKCJubyBQQ0kgZGV2aWNlIGZvciAlc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghaHdpZi0+YWNwaWRhdGEpIHsKLQkJREVCUFJJTlQoIm5vIEFDUEkgZGF0YSBmb3IgJXNcbiIsIGh3aWYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwb3J0ID0gaHdpZi0+Y2hhbm5lbCA/IGRyaXZlLT5kbiAtIDI6IGRyaXZlLT5kbjsKLQotCURFQlBSSU5UKCJFTlRFUjogJXMgYXQgJXMsIHBvcnQjOiAlZCwgaGFyZF9wb3J0IzogJWRcbiIsCi0JCSBod2lmLT5uYW1lLCBkZXZfbmFtZShkZXYpLCBwb3J0LCBod2lmLT5jaGFubmVsKTsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKSB7Ci0JCURFQlBSSU5UKCIlcyBkcml2ZSAlZDolZCBub3QgcHJlc2VudFxuIiwKLQkJCSBod2lmLT5uYW1lLCBod2lmLT5jaGFubmVsLCBwb3J0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IHRoaXMgZHJpdmUncyBfQURSIGluZm8uIGlmIG5vdCBhbHJlYWR5IGtub3duLiAqLwogCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKSB7Ci0JCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoZHJpdmUpOwotCQlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkgewotCQkJREVCUFJJTlQoIk5vIEFDUEkgb2JqZWN0IGZvdW5kIGZvciAlc1xuIiwKLQkJCQkgZHJpdmUtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJREVCUFJJTlQoIk5vIEFDUEkgb2JqZWN0IGZvdW5kIGZvciAlc1xuIiwgZHJpdmUtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBTZXR0aW5nIHVwIG91dHB1dCBidWZmZXIgKi8KQEAgLTM1NSw0MyArMjgyLDYgQEAKIH0KIAogLyoqCi0gKiB0YXNrZmlsZV9sb2FkX3JhdyAtIHNlbmQgdGFza2ZpbGUgcmVnaXN0ZXJzIHRvIGRyaXZlCi0gKiBAZHJpdmU6IGRyaXZlIHRvIHdoaWNoIG91dHB1dCBpcyBzZW50Ci0gKiBAZ3RmOiByYXcgQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldCAoMHgxZjEgLSAweDFmNykKLSAqCi0gKiBPdXRwdXRzIElERSB0YXNrZmlsZSB0byB0aGUgZHJpdmUuCi0gKi8KLXN0YXRpYyBpbnQgdGFza2ZpbGVfbG9hZF9yYXcoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQkJICAgICAgY29uc3Qgc3RydWN0IHRhc2tmaWxlX2FycmF5ICpndGYpCi17Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCWludCBlcnIgPSAwOwotCi0JREVCUFJJTlQoIigweDFmMS0xZjcpOiBoZXg6ICIKLQkgICAgICAgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JICAgICAgIGd0Zi0+dGZhWzBdLCBndGYtPnRmYVsxXSwgZ3RmLT50ZmFbMl0sCi0JICAgICAgIGd0Zi0+dGZhWzNdLCBndGYtPnRmYVs0XSwgZ3RmLT50ZmFbNV0sIGd0Zi0+dGZhWzZdKTsKLQotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQotCS8qIGNvbnZlcnQgZ3RmIHRvIElERSBUYXNrZmlsZSAqLwotCW1lbWNweSgmYXJncy50Zl9hcnJheVs3XSwgJmd0Zi0+dGZhLCA3KTsKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQotCWlmICghaWRlX2FjcGlndGYpIHsKLQkJREVCUFJJTlQoIl9HVEYgZXhlY3V0aW9uIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlkZV9ub19kYXRhX3Rhc2tmaWxlIGZhaWxlZDogJXVcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZXJyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgogICogZG9fZHJpdmVfc2V0X3Rhc2tmaWxlcyAtIHdyaXRlIHRoZSBkcml2ZSB0YXNrZmlsZSBzZXR0aW5ncyBmcm9tIF9HVEYKICAqIEBkcml2ZTogdGhlIGRyaXZlIHRvIHdoaWNoIHRoZSB0YXNrZmlsZSBjb21tYW5kIHNob3VsZCBiZSBzZW50CiAgKiBAZ3RmX2xlbmd0aDogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG9mIF9HVEYgdGFza2ZpbGVzCkBAIC00MDQsNDMgKzI5NCw0MSBAQAogCQkJCSAgdW5zaWduZWQgaW50IGd0Zl9sZW5ndGgsCiAJCQkJICB1bnNpZ25lZCBsb25nIGd0Zl9hZGRyZXNzKQogewotCWludAkJCXJjID0gLUVOT0RFViwgZXJyOworCWludAkJCXJjID0gMCwgZXJyOwogCWludAkJCWd0Zl9jb3VudCA9IGd0Zl9sZW5ndGggLyBSRUdTX1BFUl9HVEY7CiAJaW50CQkJaXg7Ci0Jc3RydWN0IHRhc2tmaWxlX2FycmF5CSpndGY7Ci0KLQlpZiAoaWRlX25vYWNwaSkKLQkJcmV0dXJuIDA7Ci0KLQlERUJQUklOVCgiRU5URVI6ICVzLCBoYXJkX3BvcnQjOiAlZFxuIiwgZHJpdmUtPm5hbWUsIGRyaXZlLT5kbik7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoIWd0Zl9jb3VudCkJCS8qIHNob3VsZG4ndCBiZSBoZXJlICovCi0JCWdvdG8gb3V0OwogCiAJREVCUFJJTlQoInRvdGFsIEdURiBieXRlcz0ldSAoMHgleCksIGd0Zl9jb3VudD0lZCwgYWRkcj0weCVseFxuIiwKIAkJIGd0Zl9sZW5ndGgsIGd0Zl9sZW5ndGgsIGd0Zl9jb3VudCwgZ3RmX2FkZHJlc3MpOwogCi0JaWYgKGd0Zl9sZW5ndGggJSBSRUdTX1BFUl9HVEYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5leHBlY3RlZCBHVEYgbGVuZ3RoICglZClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZ3RmX2xlbmd0aCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJjID0gMDsKKwkvKiBzZW5kIGFsbCB0YXNrZmlsZSByZWdpc3RlcnMgKDB4MWYxLTB4MWY3KSAqaW4qdGhhdCpvcmRlciogKi8KIAlmb3IgKGl4ID0gMDsgaXggPCBndGZfY291bnQ7IGl4KyspIHsKLQkJZ3RmID0gKHN0cnVjdCB0YXNrZmlsZV9hcnJheSAqKQotCQkJKGd0Zl9hZGRyZXNzICsgaXggKiBSRUdTX1BFUl9HVEYpOworCQl1OCAqZ3RmID0gKHU4ICopKGd0Zl9hZGRyZXNzICsgaXggKiBSRUdTX1BFUl9HVEYpOworCQlpZGVfdGFza190IHRhc2s7CiAKLQkJLyogc2VuZCBhbGwgVGFza0ZpbGUgcmVnaXN0ZXJzICgweDFmMS0weDFmNykgKmluKnRoYXQqb3JkZXIqICovCi0JCWVyciA9IHRhc2tmaWxlX2xvYWRfcmF3KGRyaXZlLCBndGYpOwotCQlpZiAoZXJyKQorCQlERUJQUklOVCgiKDB4MWYxLTFmNyk6ICIKKwkJCSAiaGV4OiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJIGd0ZlswXSwgZ3RmWzFdLCBndGZbMl0sCisJCQkgZ3RmWzNdLCBndGZbNF0sIGd0Zls1XSwgZ3RmWzZdKTsKKworCQlpZiAoIWlkZV9hY3BpZ3RmKSB7CisJCQlERUJQUklOVCgiX0dURiBleGVjdXRpb24gZGlzYWJsZWRcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjb252ZXJ0IEdURiB0byB0YXNrZmlsZSAqLworCQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJCW1lbWNweSgmdGFzay50Zl9hcnJheVs3XSwgZ3RmLCBSRUdTX1BFUl9HVEYpOworCQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKworCQllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZGVfbm9fZGF0YV90YXNrZmlsZSBmYWlsZWQ6ICV1XG4iLAorCQkJCQlfX2Z1bmNfXywgZXJyKTsKIAkJCXJjID0gZXJyOworCQl9CiAJfQogCi1vdXQ6CiAJcmV0dXJuIHJjOwogfQogCkBAIC02NDcsMjYgKzUzNSwyMyBAQAogCQlERUJQUklOVCgibm8gQUNQSSBkYXRhIGZvciAlc1xuIiwgaHdpZi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CisKIAkvKiBjaGFubmVsIGZpcnN0IGFuZCB0aGVuIGRyaXZlcyBmb3IgcG93ZXIgb24gYW5kIHZlcnNlIHZlcnNhIGZvciBwb3dlciBvZmYgKi8KIAlpZiAob24pCiAJCWFjcGlfYnVzX3NldF9wb3dlcihod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwgQUNQSV9TVEFURV9EMCk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpCi0JCQlkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgPSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGRyaXZlKTsKLQotCQlpZiAoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlICYmCi0JCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSkgeworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlmIChkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpCiAJCQlhY3BpX2J1c19zZXRfcG93ZXIoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLAotCQkJCW9uPyBBQ1BJX1NUQVRFX0QwOiBBQ1BJX1NUQVRFX0QzKTsKLQkJfQorCQkJCQkgICBvbiA/IEFDUElfU1RBVEVfRDAgOiBBQ1BJX1NUQVRFX0QzKTsKIAl9CisKIAlpZiAoIW9uKQogCQlhY3BpX2J1c19zZXRfcG93ZXIoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsIEFDUElfU1RBVEVfRDMpOwogfQogCiAvKioKLSAqIGlkZV9hY3BpX2luaXQgLSBpbml0aWFsaXplIHRoZSBBQ1BJIGxpbmsgZm9yIGFuIElERSBpbnRlcmZhY2UKKyAqIGlkZV9hY3BpX2luaXRfcG9ydCAtIGluaXRpYWxpemUgdGhlIEFDUEkgbGluayBmb3IgYW4gSURFIGludGVyZmFjZQogICogQGh3aWY6IHRhcmdldCBJREUgaW50ZXJmYWNlIChjaGFubmVsKQogICoKICAqIFRoZSBBQ1BJIHNwZWMgaXMgbm90IHF1aXRlIGNsZWFyIHdoZW4gdGhlIGRyaXZlIGlkZW50aWZ5IGJ1ZmZlcgpAQCAtNjc2LDEwICs1NjEsOCBAQAogICogU28gd2UgZ2V0IHRoZSBpbmZvcm1hdGlvbiBkdXJpbmcgc3RhcnR1cDsgYnV0IHRoaXMgbWVhbnMgdGhhdAogICogYW55IGNoYW5nZXMgZHVyaW5nIHJ1bi10aW1lIHdpbGwgYmUgbG9zdCBhZnRlciByZXN1bWUuCiAgKi8KLXZvaWQgaWRlX2FjcGlfaW5pdChpZGVfaHdpZl90ICpod2lmKQordm9pZCBpZGVfYWNwaV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlpZGVfYWNwaV9ibGFja2xpc3QoKTsKLQogCWh3aWYtPmFjcGlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlkZV9hY3BpX2h3aWZfbGluayksIEdGUF9LRVJORUwpOwogCWlmICghaHdpZi0+YWNwaWRhdGEpCiAJCXJldHVybjsKQEAgLTcwOCwxNSArNTkxLDI0IEBACiAJaHdpZi0+ZGV2aWNlc1swXS0+YWNwaWRhdGEgPSAmaHdpZi0+YWNwaWRhdGEtPm1hc3RlcjsKIAlod2lmLT5kZXZpY2VzWzFdLT5hY3BpZGF0YSA9ICZod2lmLT5hY3BpZGF0YS0+c2xhdmU7CiAKLQkvKgotCSAqIFNlbmQgSURFTlRJRlkgZm9yIGVhY2ggZHJpdmUKLQkgKi8KLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJbWVtc2V0KGRyaXZlLT5hY3BpZGF0YSwgMCwgc2l6ZW9mKCpkcml2ZS0+YWNwaWRhdGEpKTsKKwkvKiBnZXQgX0FEUiBpbmZvIGZvciBlYWNoIGRldmljZSAqLworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWFjcGlfaGFuZGxlIGRldl9oYW5kbGU7CiAKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQljb250aW51ZTsKKwkJREVCUFJJTlQoIkVOVEVSOiAlcyBhdCBjaGFubmVsIzogJWQgcG9ydCM6ICVkXG4iLAorCQkJIGRyaXZlLT5uYW1lLCBod2lmLT5jaGFubmVsLCBkcml2ZS0+ZG4gJiAxKTsKIAorCQkvKiBUQkQ6IGNvdWxkIGFsc28gY2hlY2sgQUNQSSBvYmplY3QgVkFMSUQgYml0cyAqLworCQlkZXZfaGFuZGxlID0gYWNwaV9nZXRfY2hpbGQoaHdpZi0+YWNwaWRhdGEtPm9ial9oYW5kbGUsCisJCQkJCSAgICBkcml2ZS0+ZG4gJiAxKTsKKworCQlERUJQUklOVCgiZHJpdmUgJXMgaGFuZGxlIDB4JXBcbiIsIGRyaXZlLT5uYW1lLCBkZXZfaGFuZGxlKTsKKworCQlkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgPSBkZXZfaGFuZGxlOworCX0KKworCS8qIHNlbmQgSURFTlRJRlkgZm9yIGVhY2ggZGV2aWNlICovCisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKIAkJZXJyID0gdGFza2ZpbGVfbGliX2dldF9pZGVudGlmeShkcml2ZSwgZHJpdmUtPmFjcGlkYXRhLT5pZGJ1ZmYpOwogCQlpZiAoZXJyKQogCQkJREVCUFJJTlQoImlkZW50aWZ5IGRldmljZSAlcyBmYWlsZWQgKCVkKVxuIiwKQEAgLTczNiw5ICs2MjgsNyBAQAogCWlkZV9hY3BpX2dldF90aW1pbmcoaHdpZik7CiAJaWRlX2FjcGlfcHVzaF90aW1pbmcoaHdpZik7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKLQkJCS8qIEV4ZWN1dGUgQUNQSSBzdGFydHVwIGNvZGUgKi8KLQkJCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZGVfYWNwaV9leGVjX3Rmcyhkcml2ZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwppbmRleCBlOWQwNDJkYi4uNmFkYzViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTE0OSw3ICsxNDksMTAgQEAKIAltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlKQogCQlycS0+Y21kWzEzXSA9IFJFUV9JREVUQVBFX1BDMTsKLQlpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSk7CisKKwlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOworCisJZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7CiB9CiAKIC8qCkBAIC0yOTcsNiArMzAwLDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfY2RfZ2V0X3hmZXJsZW4pOwogCit2b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHUxNiAqYmNvdW50LCB1OCAqaXJlYXNvbikKK3sKKwlpZGVfdGFza190IHRhc2s7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAorCQkJSURFX1RGTEFHX0lOX05TRUNUOworCisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCisJKmJjb3VudCA9ICh0YXNrLnRmLmxiYWggPDwgOCkgfCB0YXNrLnRmLmxiYW07CisJKmlyZWFzb24gPSB0YXNrLnRmLm5zZWN0ICYgMzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbik7CisKIC8qCiAgKiBUaGlzIGlzIHRoZSB1c3VhbCBpbnRlcnJ1cHQgaGFuZGxlciB3aGljaCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgYSBwYWNrZXQKICAqIGNvbW1hbmQuICBXZSB3aWxsIHRyYW5zZmVyIHNvbWUgb2YgdGhlIGRhdGEgKGFzIHJlcXVlc3RlZCBieSB0aGUgZHJpdmUpCkBAIC00NTYsNiArNDc0LDI1IEBACiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCitzdGF0aWMgdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1MzIgdGZfZmxhZ3MsIHUxNiBiY291bnQpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWlkZV90YXNrX3QgdGFzazsKKwl1OCBkbWEgPSBkcml2ZS0+ZG1hOworCisJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0xCQUggfCBJREVfVEZMQUdfT1VUX0xCQU0gfAorCQkJSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgdGZfZmxhZ3M7CisJdGFzay50Zi5mZWF0dXJlID0gZG1hOwkJLyogVXNlIFBJTy9ETUEgKi8KKwl0YXNrLnRmLmxiYW0gICAgPSBiY291bnQgJiAweGZmOworCXRhc2sudGYubGJhaCAgICA9IChiY291bnQgPj4gOCkgJiAweGZmOworCisJaWRlX3RmX2R1bXAoZHJpdmUtPm5hbWUsICZ0YXNrLnRmKTsKKwlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CisJU0VMRUNUX01BU0soZHJpdmUsIDApOworCWh3aWYtPnRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworfQorCiBzdGF0aWMgdTggaWRlX3JlYWRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX3Rhc2tfdCB0YXNrOwpAQCAtNjI5LDcgKzY2Niw3IEBACiAJCQkJCQkgICAgICAgOiBXQUlUX1RBUEVfQ01EOwogCX0KIAotCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgdGZfZmxhZ3MsIGJjb3VudCwgZHJpdmUtPmRtYSk7CisJaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCB0Zl9mbGFncywgYmNvdW50KTsKIAogCS8qIElzc3VlIHRoZSBwYWNrZXQgY29tbWFuZCAqLwogCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCBkZGZiZWE0Li4yMTc3Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMjQyLDcgKzI0Miw5IEBACiAJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZF9jbWQ6IDB4JXhcbiIsCiAJCQkgICAgICBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKIAotCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKKwlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOworCisJZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNkcm9tX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzOTUzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKQEAgLTAsMCArMSwxOTAgQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCitERUZJTkVfTVVURVgoaWRlX3NldHRpbmdfbXR4KTsKKworaWRlX2RldnNldF9nZXQoaW9fMzJiaXQsIGlvXzMyYml0KTsKKworc3RhdGljIGludCBzZXRfaW9fMzJiaXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX0lPXzMyQklUKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSArIChTVVBQT1JUX1ZMQl9TWU5DIDw8IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRyaXZlLT5pb18zMmJpdCA9IGFyZzsKKworCXJldHVybiAwOworfQorCitpZGVfZGV2c2V0X2dldF9mbGFnKGtzZXR0aW5ncywgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpOworCitzdGF0aWMgaW50IHNldF9rc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFyZykKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19LRUVQX1NFVFRJTkdTOworCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcodXNpbmdfZG1hLCBJREVfREZMQUdfVVNJTkdfRE1BKTsKKworc3RhdGljIGludCBzZXRfdXNpbmdfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKKwlpbnQgZXJyID0gLUVQRVJNOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXRhX2lkX2hhc19kbWEoZHJpdmUtPmlkKSA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmIChkcml2ZS0+aHdpZi0+ZG1hX29wcyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWVyciA9IDA7CisKKwlpZiAoYXJnKSB7CisJCWlmIChpZGVfc2V0X2RtYShkcml2ZSkpCisJCQllcnIgPSAtRUlPOworCX0gZWxzZQorCQlpZGVfZG1hX29mZihkcml2ZSk7CisKK291dDoKKwlyZXR1cm4gZXJyOworI2Vsc2UKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAtRVBFUk07CisjZW5kaWYKK30KKworLyoKKyAqIGhhbmRsZSBIRElPX1NFVF9QSU9fTU9ERSBpb2N0bCBhYnVzZXJzIGhlcmUsIGV2ZW50dWFsbHkgaXQgd2lsbCBnbyBhd2F5CisgKi8KK3N0YXRpYyBpbnQgc2V0X3Bpb19tb2RlX2FidXNlKGlkZV9od2lmX3QgKmh3aWYsIHU4IHJlcV9waW8pCit7CisJc3dpdGNoIChyZXFfcGlvKSB7CisJY2FzZSAyMDI6CisJY2FzZSAyMDE6CisJY2FzZSAyMDA6CisJY2FzZSAxMDI6CisJY2FzZSAxMDE6CisJY2FzZSAxMDA6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9ETUFfTU9ERVMpID8gMSA6IDA7CisJY2FzZSA5OgorCWNhc2UgODoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIKSA/IDEgOiAwOworCWNhc2UgNzoKKwljYXNlIDY6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9GQVNUX0RFVlNFTCkgPyAxIDogMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmIChzZXRfcGlvX21vZGVfYWJ1c2UoZHJpdmUtPmh3aWYsIGFyZykpIHsKKwkJaWYgKGFyZyA9PSA4IHx8IGFyZyA9PSA5KSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkvKiB0YWtlIGxvY2sgZm9yIElERV9ERkxBR19bTk9fXVVOTUFTSy9bTk9fXUlPXzMyQklUICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlCisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCX0gZWxzZSB7CisJCWludCBrZWVwX2RtYSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKKworCQlpZGVfc2V0X3Bpbyhkcml2ZSwgYXJnKTsKKworCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVRfUElPX01PREVfS0VFUF9ETUEpIHsKKwkJCWlmIChrZWVwX2RtYSkKKwkJCQlpZGVfZG1hX29uKGRyaXZlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpZGVfZGV2c2V0X2dldF9mbGFnKHVubWFza2lycSwgSURFX0RGTEFHX1VOTUFTSyk7CisKK3N0YXRpYyBpbnQgc2V0X3VubWFza2lycShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fVU5NQVNLKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VTk1BU0s7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmMoaW9fMzJiaXQsIGlvXzMyYml0KTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmMoa2VlcHNldHRpbmdzLCBrc2V0dGluZ3MpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1bm1hc2tpcnEsIHVubWFza2lycSk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKHVzaW5nX2RtYSwgdXNpbmdfZG1hKTsKK19fSURFX0RFVlNFVChwaW9fbW9kZSwgRFNfU1lOQywgTlVMTCwgc2V0X3Bpb19tb2RlKTsKKworaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nLAorCQkgICAgICAgaW50IGFyZykKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIShzZXR0aW5nLT5mbGFncyAmIERTX1NZTkMpKQorCQlyZXR1cm4gc2V0dGluZy0+c2V0KGRyaXZlLCBhcmcpOworCisJcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgUkVBRCwgX19HRlBfV0FJVCk7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU1BFQ0lBTDsKKwlycS0+Y21kX2xlbiA9IDU7CisJcnEtPmNtZFswXSA9IFJFUV9ERVZTRVRfRVhFQzsKKwkqKGludCAqKSZycS0+Y21kWzFdID0gYXJnOworCXJxLT5zcGVjaWFsID0gc2V0dGluZy0+c2V0OworCisJaWYgKGJsa19leGVjdXRlX3JxKHEsIE5VTEwsIHJxLCAwKSkKKwkJcmV0ID0gcnEtPmVycm9yczsKKwlibGtfcHV0X3JlcXVlc3QocnEpOworCisJcmV0dXJuIHJldDsKK30KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19kZXZzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJaW50IGVyciwgKCpzZXRmdW5jKShpZGVfZHJpdmVfdCAqLCBpbnQpID0gcnEtPnNwZWNpYWw7CisKKwllcnIgPSBzZXRmdW5jKGRyaXZlLCAqKGludCAqKSZycS0+Y21kWzFdKTsKKwlpZiAoZXJyKQorCQlycS0+ZXJyb3JzID0gZXJyOworCWVsc2UKKwkJZXJyID0gMTsKKwlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciwgMCk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCmluZGV4IDA1OWM5MGIuLmE4NzhmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKQEAgLTQ3MCw2ICs0NzAsNjMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfdGltZW91dCk7CiAKKy8qCisgKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KKyAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKKyAqIGFsbCBhd2F5CisgKi8KK2lkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpZGVfc3RhcnRzdG9wX3QgcmV0ID0gaWRlX3N0b3BwZWQ7CisKKwkvKgorCSAqIGVuZCBjdXJyZW50IGRtYSB0cmFuc2FjdGlvbgorCSAqLworCisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKKwkJKHZvaWQpaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCXJldCA9IGlkZV9lcnJvcihkcml2ZSwgImRtYSB0aW1lb3V0IGVycm9yIiwKKwkJCQlod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgcmV0cnlcbiIsIGRyaXZlLT5uYW1lKTsKKwkJaHdpZi0+ZG1hX29wcy0+ZG1hX3RpbWVvdXQoZHJpdmUpOworCX0KKworCS8qCisJICogZGlzYWJsZSBkbWEgZm9yIG5vdywgYnV0IHJlbWVtYmVyIHRoYXQgd2UgZGlkIHNvIGJlY2F1c2Ugb2YKKwkgKiBhIHRpbWVvdXQgLS0gd2UnbGwgcmVlbmFibGUgYWZ0ZXIgd2UgZmluaXNoIHRoaXMgbmV4dCByZXF1ZXN0CisJICogKG9yIHJhdGhlciB0aGUgZmlyc3QgY2h1bmsgb2YgaXQpIGluIHBpby4KKwkgKi8KKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ETUFfUElPX1JFVFJZOworCWRyaXZlLT5yZXRyeV9waW8rKzsKKwlpZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKworCS8qCisJICogdW4tYnVzeSBkcml2ZSBldGMgYW5kIG1ha2Ugc3VyZSByZXF1ZXN0IGlzIHNhbmUKKwkgKi8KKworCXJxID0gaHdpZi0+cnE7CisJaWYgKCFycSkKKwkJZ290byBvdXQ7CisKKwlod2lmLT5ycSA9IE5VTEw7CisKKwlycS0+ZXJyb3JzID0gMDsKKworCWlmICghcnEtPmJpbykKKwkJZ290byBvdXQ7CisKKwlycS0+c2VjdG9yID0gcnEtPmJpby0+Ymlfc2VjdG9yOworCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgPSBiaW9faW92ZWMocnEtPmJpbyktPmJ2X2xlbiA+PiA5OworCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwlycS0+YnVmZmVyID0gYmlvX2RhdGEocnEtPmJpbyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaWYgKGh3aWYtPmRtYXRhYmxlX2NwdSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMxYjVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWVoLmMKQEAgLTAsMCArMSw0MjggQEAKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisKKwlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKKwkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7CisJCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisJfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgeworCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCisJCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKKwkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCisJCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLworCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCisJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQl9IGVsc2UgaWYgKChlcnIgJiBCQURfQ1JDKSA9PSBCQURfQ1JDKSB7CisJCQkvKiBVRE1BIGNyYyBlcnJvciwganVzdCByZXRyeSB0aGUgb3BlcmF0aW9uICovCisJCQlkcml2ZS0+Y3JjX2NvdW50Kys7CisJCX0gZWxzZSBpZiAoZXJyICYgKEFUQV9CQksgfCBBVEFfVU5DKSkgeworCQkJLyogcmV0cmllcyB3b24ndCBoZWxwIHRoZXNlICovCisJCQlycS0+ZXJyb3JzID0gRVJST1JfTUFYOworCQl9IGVsc2UgaWYgKGVyciAmIEFUQV9UUkswTkYpIHsKKwkJCS8qIGhlbHAgaXQgZmluZCB0cmFjayB6ZXJvICovCisJCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFQ0FMOworCQl9CisJfQorCisJaWYgKChzdGF0ICYgQVRBX0RSUSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFJFQUQgJiYKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTykgPT0gMCkgeworCQlpbnQgbnNlY3QgPSBkcml2ZS0+bXVsdF9jb3VudCA/IGRyaXZlLT5tdWx0X2NvdW50IDogMTsKKworCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBSRUFELCBuc2VjdCAqIFNFQ1RPUl9TSVpFKTsKKwl9CisKKwlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKKwkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCisJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CisKKwlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKKwkJKytycS0+ZXJyb3JzOworCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwl9CisKKwlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRUNBTCkgPT0gRVJST1JfUkVDQUwpCisJCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgPSAxOworCisJKytycS0+ZXJyb3JzOworCisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9hdGFwaV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgICAgdTggc3RhdCwgdTggZXJyKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKKwkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKwl9IGVsc2UgeworCQkvKiBhZGQgZGVjb2RpbmcgZXJyb3Igc3R1ZmYgKi8KKwl9CisKKwlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQorCQkvKiBmb3JjZSBhbiBhYm9ydCAqLworCQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0lETEVJTU1FRElBVEUpOworCisJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7CisJCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7CisJfSBlbHNlIHsKKwkJaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7CisJCQkrK3JxLT5lcnJvcnM7CisJCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKKwkJfQorCQkrK3JxLT5lcnJvcnM7CisJfQorCisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IF9faWRlX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgIHU4IHN0YXQsIHU4IGVycikKK3sKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlyZXR1cm4gaWRlX2F0YV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7CisJcmV0dXJuIGlkZV9hdGFwaV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Cit9CisKKy8qKgorICoJaWRlX2Vycm9yCS0JaGFuZGxlIGFuIGVycm9yIG9uIHRoZSBJREUKKyAqCUBkcml2ZTogZHJpdmUgdGhlIGVycm9yIG9jY3VycmVkIG9uCisgKglAbXNnOiBtZXNzYWdlIHRvIHJlcG9ydAorICoJQHN0YXQ6IHN0YXR1cyBiaXRzCisgKgorICoJaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgZHJpdmUuCisgKglGb3Igbm9ybWFsIEkvTyB0aGF0IG1heSB3ZWxsIGluY2x1ZGUgcmV0cmllcy4gV2UgZGVhbCB3aXRoCisgKglib3RoIG5ldy1zdHlsZSAodGFza2ZpbGUpIGFuZCBvbGQgc3R5bGUgY29tbWFuZCBoYW5kbGluZyBoZXJlLgorICoJSW4gdGhlIGNhc2Ugb2YgdGFza2ZpbGUgY29tbWFuZCBoYW5kbGluZyB0aGVyZSBpcyB3b3JrIGxlZnQgdG8KKyAqCWRvCisgKi8KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm1zZywgdTggc3RhdCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJdTggZXJyOworCisJZXJyID0gaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCBtc2csIHN0YXQpOworCisJcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisJaWYgKHJxID09IE5VTEwpCisJCXJldHVybiBpZGVfc3RvcHBlZDsKKworCS8qIHJldHJ5IG9ubHkgIm5vcm1hbCIgSS9POiAqLworCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJCXJxLT5lcnJvcnMgPSAxOworCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgZXJyKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCXJldHVybiBfX2lkZV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXJyb3IpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisKKwlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCisJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7Cit9CisKKy8qIG5lZWRlZCBiZWxvdyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEoaWRlX2RyaXZlX3QgKiwgaW50KTsKKworLyoKKyAqIGF0YXBpX3Jlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbgorICogZXZlcnkgNTBtcyBkdXJpbmcgYW4gYXRhcGkgZHJpdmUgcmVzZXQgb3BlcmF0aW9uLiAgSWYgdGhlIGRyaXZlIGhhcyBub3QgeWV0CisgKiByZXNwb25kZWQsIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIKKyAqIGlzIHJlc3RhcnRlZCBmb3IgYW5vdGhlciA1MG1zLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGF0YXBpX3Jlc2V0X3BvbGxmdW5jKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggc3RhdDsKKworCVNFTEVDVF9EUklWRShkcml2ZSk7CisJdWRlbGF5KDEwKTsKKwlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKworCWlmIChPS19TVEFUKHN0YXQsIDAsIEFUQV9CVVNZKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CisJZWxzZSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsCisJCQkJCU5VTEwpOworCQkJLyogY29udGludWUgcG9sbGluZyAqLworCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQl9CisJCS8qIGVuZCBvZiBwb2xsaW5nICovCisJCWh3aWYtPnBvbGxpbmcgPSAwOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBVEFQSSByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCisJCQlkcml2ZS0+bmFtZSwgc3RhdCk7CisJCS8qIGRvIGl0IHRoZSBvbGQgZmFzaGlvbmVkIHdheSAqLworCQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAxKTsKKwl9CisJLyogZG9uZSBwb2xsaW5nICovCisJaHdpZi0+cG9sbGluZyA9IDA7CisJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaWRlX2h3aWZfdCAqaHdpZiwgdTggZXJyKQoreworCXN0YXRpYyBjb25zdCBjaGFyICplcnJfbWFzdGVyX3ZhbHNbXSA9CisJCXsgTlVMTCwgInBhc3NlZCIsICJmb3JtYXR0ZXIgZGV2aWNlIGVycm9yIiwKKwkJICAic2VjdG9yIGJ1ZmZlciBlcnJvciIsICJFQ0MgY2lyY3VpdHJ5IGVycm9yIiwKKwkJICAiY29udHJvbGxpbmcgTVBVIGVycm9yIiB9OworCisJdTggZXJyX21hc3RlciA9IGVyciAmIDB4N2Y7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldDogbWFzdGVyOiAiLCBod2lmLT5uYW1lKTsKKwlpZiAoZXJyX21hc3RlciAmJiBlcnJfbWFzdGVyIDwgNikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBlcnJfbWFzdGVyX3ZhbHNbZXJyX21hc3Rlcl0pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fQ09OVCAiZXJyb3IgKDB4JTAyeD8pIiwgZXJyKTsKKwlpZiAoZXJyICYgMHg4MCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiOyBzbGF2ZTogZmFpbGVkIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKworLyoKKyAqIHJlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCisgKiBkdXJpbmcgYW4gaWRlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlcyBoYXZlIG5vdCB5ZXQgcmVzcG9uZGVkLAorICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKKyAqIGZvciBhbm90aGVyIDUwbXMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVzZXRfcG9sbGZ1bmMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCXU4IHRtcDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cmVzZXRfcG9sbCkgeworCQllcnIgPSBwb3J0X29wcy0+cmVzZXRfcG9sbChkcml2ZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhvc3QgcmVzZXRfcG9sbCBmYWlsdXJlIGZvciAlcy5cbiIsCisJCQkJaHdpZi0+bmFtZSwgZHJpdmUtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwl0bXAgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCisJaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQkJLyogY29udGludWUgcG9sbGluZyAqLworCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCWh3aWYtPm5hbWUsIHRtcCk7CisJCWRyaXZlLT5mYWlsdXJlcysrOworCQllcnIgPSAtRUlPOworCX0gZWxzZSAgeworCQl0bXAgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CisKKwkJaWYgKHRtcCA9PSAxKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQ6IHN1Y2Nlc3NcbiIsIGh3aWYtPm5hbWUpOworCQkJZHJpdmUtPmZhaWx1cmVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaHdpZiwgdG1wKTsKKwkJCWRyaXZlLT5mYWlsdXJlcysrOworCQkJZXJyID0gLUVJTzsKKwkJfQorCX0KK291dDoKKwlod2lmLT5wb2xsaW5nID0gMDsJLyogZG9uZSBwb2xsaW5nICovCisJaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCBlcnIpOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpbnQgbGVnYWN5ID0gKGRyaXZlLT5pZFtBVEFfSURfQ0ZTX0VOQUJMRV8yXSAmIDB4MDQwMCkgPyAwIDogMTsKKworCWRyaXZlLT5zcGVjaWFsLmFsbCA9IDA7CisJZHJpdmUtPnNwZWNpYWwuYi5zZXRfZ2VvbWV0cnkgPSBsZWdhY3k7CisJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSAgPSBsZWdhY3k7CisKKwlkcml2ZS0+bXVsdF9jb3VudCA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BBUktFRDsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwICYmCisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkKKwkJZHJpdmUtPm11bHRfcmVxID0gMDsKKworCWlmIChkcml2ZS0+bXVsdF9yZXEgIT0gZHJpdmUtPm11bHRfY291bnQpCisJCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKK30KKworc3RhdGljIHZvaWQgcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGRyaXZlLT5od2lmLT5wb3J0X29wczsKKworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCWlkZV9kaXNrX3ByZV9yZXNldChkcml2ZSk7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QT1NUX1JFU0VUOworCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSB7CisJCWlmIChkcml2ZS0+Y3JjX2NvdW50KQorCQkJaWRlX2NoZWNrX2RtYV9jcmMoZHJpdmUpOworCQllbHNlCisJCQlpZGVfZG1hX29mZihkcml2ZSk7CisJfQorCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDApIHsKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkgeworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKKwkJCWRyaXZlLT5pb18zMmJpdCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cHJlX3Jlc2V0KQorCQlwb3J0X29wcy0+cHJlX3Jlc2V0KGRyaXZlKTsKKworCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCAhPSAweGZmKQorCQlkcml2ZS0+ZGVzaXJlZF9zcGVlZCA9IGRyaXZlLT5jdXJyZW50X3NwZWVkOworCWRyaXZlLT5jdXJyZW50X3NwZWVkID0gMHhmZjsKK30KKworLyoKKyAqIGRvX3Jlc2V0MSgpIGF0dGVtcHRzIHRvIHJlY292ZXIgYSBjb25mdXNlZCBkcml2ZSBieSByZXNldHRpbmcgaXQuCisgKiBVbmZvcnR1bmF0ZWx5LCByZXNldHRpbmcgYSBkaXNrIGRyaXZlIGFjdHVhbGx5IHJlc2V0cyBhbGwgZGV2aWNlcyBvbgorICogdGhlIHNhbWUgaW50ZXJmYWNlLCBzbyBpdCBjYW4gcmVhbGx5IGJlIHRob3VnaHQgb2YgYXMgcmVzZXR0aW5nIHRoZQorICogaW50ZXJmYWNlIHJhdGhlciB0aGFuIHJlc2V0dGluZyB0aGUgZHJpdmUuCisgKgorICogQVRBUEkgZGV2aWNlcyBoYXZlIHRoZWlyIG93biByZXNldCBtZWNoYW5pc20gd2hpY2ggYWxsb3dzIHRoZW0gdG8gYmUKKyAqIGluZGl2aWR1YWxseSByZXNldCB3aXRob3V0IGNsb2JiZXJpbmcgb3RoZXIgZGV2aWNlcyBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCisgKgorICogVW5mb3J0dW5hdGVseSwgdGhlIElERSBpbnRlcmZhY2UgZG9lcyBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIGxldAorICogdXMga25vdyB3aGVuIHRoZSByZXNldCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLCBzbyB3ZSBtdXN0IHBvbGwgZm9yIHRoaXMuCisgKiBFcXVhbGx5IHBvb3IsIHRob3VnaCwgaXMgdGhlIGZhY3QgdGhhdCB0aGlzIG1heSBhIHZlcnkgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLAorICogKHVwIHRvIDMwIHNlY29uZHMgd29yc3RjYXNlKS4gIFNvLCBpbnN0ZWFkIG9mIGJ1c3ktd2FpdGluZyBoZXJlIGZvciBpdCwKKyAqIHdlIHNldCBhIHRpbWVyIHRvIHBvbGwgYXQgNTBtcyBpbnRlcnZhbHMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHM7CisJaWRlX2RyaXZlX3QgKnRkcml2ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OworCWludCBpOworCURFRklORV9XQUlUKHdhaXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKworCS8qIFdlIG11c3Qgbm90IHJlc2V0IHdpdGggcnVubmluZyBoYW5kbGVycyAqLworCUJVR19PTihod2lmLT5oYW5kbGVyICE9IE5VTEwpOworCisJLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgeworCQlwcmVfcmVzZXQoZHJpdmUpOworCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCQl1ZGVsYXkoMjApOworCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7CisJCW5kZWxheSg0MDApOworCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CisJCWh3aWYtPnBvbGxpbmcgPSAxOworCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIGlkZV9zdGFydGVkOworCX0KKworCS8qIFdlIG11c3Qgbm90IGRpc3R1cmIgZGV2aWNlcyBpbiB0aGUgSURFX0RGTEFHX1BBUktFRCBzdGF0ZS4gKi8KKwlkbyB7CisJCXVuc2lnbmVkIGxvbmcgbm93OworCisJCXByZXBhcmVfdG9fd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXRpbWVvdXQgPSBqaWZmaWVzOworCQlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCB0ZHJpdmUsIGh3aWYpIHsKKwkJCWlmICgodGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEKSAmJgorCQkJICAgIHRpbWVfYWZ0ZXIodGRyaXZlLT5zbGVlcCwgdGltZW91dCkpCisJCQkJdGltZW91dCA9IHRkcml2ZS0+c2xlZXA7CisJCX0KKworCQlub3cgPSBqaWZmaWVzOworCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91dCwgbm93KSkKKwkJCWJyZWFrOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHRpbWVvdXQgLSBub3cpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCX0gd2hpbGUgKHRpbWVvdXQpOworCWZpbmlzaF93YWl0KCZpZGVfcGFya193cSwgJndhaXQpOworCisJLyoKKwkgKiBGaXJzdCwgcmVzZXQgYW55IGRldmljZSBzdGF0ZSBkYXRhIHdlIHdlcmUgbWFpbnRhaW5pbmcKKwkgKiBmb3IgYW55IG9mIHRoZSBkcml2ZXMgb24gdGhpcyBpbnRlcmZhY2UuCisJICovCisJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikKKwkJcHJlX3Jlc2V0KHRkcml2ZSk7CisKKwlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIC1FTlhJTyk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBhbHNvIHNldCBuSUVOIHdoaWxlIHJlc2V0dGluZyB0aGUgZGV2aWNlLAorCSAqIHRvIG1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyBmcm9tIHRoZSBpbnRlcmZhY2UgZHVyaW5nIHRoZSByZXNldC4KKwkgKiBIb3dldmVyLCBkdWUgdG8gdGhlIGRlc2lnbiBvZiBQQyBoYXJkd2FyZSwgdGhpcyB3aWxsIGNhdXNlIGFuCisJICogaW1tZWRpYXRlIGludGVycnVwdCBkdWUgdG8gdGhlIGVkZ2UgdHJhbnNpdGlvbiBpdCBwcm9kdWNlcy4KKwkgKiBUaGlzIHNpbmdsZSBpbnRlcnJ1cHQgZ2l2ZXMgdXMgYSAiZmFzdCBwb2xsIiBmb3IgZHJpdmVzIHRoYXQKKwkgKiByZWNvdmVyIGZyb20gcmVzZXQgdmVyeSBxdWlja2x5LCBzYXZpbmcgdXMgdGhlIGZpcnN0IDUwbXMgd2FpdCB0aW1lLgorCSAqCisJICogVE9ETzogYWRkIC0+c29mdHJlc2V0IG1ldGhvZCBhbmQgc3RvcCBhYnVzaW5nIC0+c2V0X2lycQorCSAqLworCS8qIHNldCBTUlNUIGFuZCBuSUVOICovCisJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDQpOworCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLworCXVkZWxheSgxMCk7CisJLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7CisJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCisJdWRlbGF5KDEwKTsKKwlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CisJaHdpZi0+cG9sbGluZyA9IDE7CisJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCisJLyoKKwkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKKwkgKiBzdGF0ZSB3aGVuIHRoZSBkaXNrcyBhcmUgcmVzZXQgdGhpcyB3YXkuIEF0IGxlYXN0LCB0aGUgV2luYm9uZAorCSAqIDU1MyBkb2N1bWVudGF0aW9uIHNheXMgdGhhdAorCSAqLworCXBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldHByb2MpCisJCXBvcnRfb3BzLT5yZXNldHByb2MoZHJpdmUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBpZGVfc3RhcnRlZDsKK30KKworLyoKKyAqIGlkZV9kb19yZXNldCgpIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZHJpdmUvaW50ZXJmYWNlIHJlc2V0IGNvZGUuCisgKi8KKworaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGlkZV9kb19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViNDNkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYwpAQCAtMCwwICsxLDMxNiBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKKy8qCisgKglDb252ZW50aW9uYWwgUElPIG9wZXJhdGlvbnMgZm9yIEFUQSBkZXZpY2VzCisgKi8KKworc3RhdGljIHU4IGlkZV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAodTgpIGluYihwb3J0KTsKK30KKworc3RhdGljIHZvaWQgaWRlX291dGIodTggdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJb3V0Yih2YWwsIHBvcnQpOworfQorCisvKgorICoJTU1JTyBvcGVyYXRpb25zLCB0eXBpY2FsbHkgdXNlZCBmb3IgU0FUQSBjb250cm9sbGVycworICovCisKK3N0YXRpYyB1OCBpZGVfbW1faW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlyZXR1cm4gKHU4KSByZWFkYigodm9pZCBfX2lvbWVtICopIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBpZGVfbW1fb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKK30KKwordm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKmh3aWYsIHU4IGNtZCkKK3sKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoY21kLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKKwllbHNlCisJCW91dGIoY21kLCBod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWNfY29tbWFuZCk7CisKK3U4IGlkZV9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOworCWVsc2UKKwkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9zdGF0dXMpOworCit1OCBpZGVfcmVhZF9hbHRzdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKKwllbHNlCisJCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYWx0c3RhdHVzKTsKKwordm9pZCBpZGVfc2V0X2lycShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pCit7CisJdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7CisKKwlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCisJCWN0bCB8PSA0OworCQlvbiAmPSB+NDsKKwl9CisKKwljdGwgfD0gb24gPyAwIDogMjsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihjdGwsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJZWxzZQorCQlvdXRiKGN0bCwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9pcnEpOworCit2b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisJdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKKworCWlmIChtbWlvKQorCQl0Zl9vdXRiID0gaWRlX21tX291dGI7CisJZWxzZQorCQl0Zl9vdXRiID0gaWRlX291dGI7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwkJSElISSA9IDB4RkY7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpIHsKKwkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7CisKKwkJaWYgKG1taW8pCisJCQl3cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOworCQllbHNlCisJCQlvdXR3KGRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOworCX0KKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJCXRmX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKKwkJdGZfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJCXRmX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJCXRmX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJCXRmX291dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQorCQl0Zl9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJCXRmX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwkJdGZfb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKKwkJdGZfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKKwkJCSBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX2xvYWQpOworCit2b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJdm9pZCAoKnRmX291dGIpKHU4IGFkZHIsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdTggKCp0Zl9pbmIpKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlpZiAobW1pbykgeworCQl0Zl9vdXRiID0gaWRlX21tX291dGI7CisJCXRmX2luYiAgPSBpZGVfbW1faW5iOworCX0gZWxzZSB7CisJCXRmX291dGIgPSBpZGVfb3V0YjsKKwkJdGZfaW5iICA9IGlkZV9pbmI7CisJfQorCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwkJdTE2IGRhdGE7CisKKwkJaWYgKG1taW8pCisJCQlkYXRhID0gcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOworCQllbHNlCisJCQlkYXRhID0gaW53KGlvX3BvcnRzLT5kYXRhX2FkZHIpOworCisJCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7CisJCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKKwl9CisKKwkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCisJdGZfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJCXRmLT5mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwkJdGYtPm5zZWN0ICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJCXRmLT5sYmFsICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJCXRmLT5sYmFtICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJCXRmLT5sYmFoICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwkJdGYtPmRldmljZSA9IHRmX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOworCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJCXRmLT5ob2JfZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJCXRmLT5ob2JfbGJhbCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQkJdGYtPmhvYl9sYmFtICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX3JlYWQpOworCisvKgorICogU29tZSBsb2NhbGJ1cyBFSURFIGludGVyZmFjZXMgcmVxdWlyZSBhIHNwZWNpYWwgYWNjZXNzIHNlcXVlbmNlCisgKiB3aGVuIHVzaW5nIDMyLWJpdCBJL08gaW5zdHJ1Y3Rpb25zIHRvIHRyYW5zZmVyIGRhdGEuICBXZSBjYWxsIHRoaXMKKyAqIHRoZSAidmxiX3N5bmMiIHNlcXVlbmNlLCB3aGljaCBjb25zaXN0cyBvZiB0aHJlZSBzdWNjZXNzaXZlIHJlYWRzCisgKiBvZiB0aGUgc2VjdG9yIGNvdW50IHJlZ2lzdGVyIGxvY2F0aW9uLCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKKyAqIHRvIGVuc3VyZSB0aGF0IHRoZSByZWFkcyBhbGwgaGFwcGVuIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZCBhdGFfdmxiX3N5bmModW5zaWduZWQgbG9uZyBwb3J0KQoreworCSh2b2lkKWluYihwb3J0KTsKKwkodm9pZClpbmIocG9ydCk7CisJKHZvaWQpaW5iKHBvcnQpOworfQorCisvKgorICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqZnJvbSogdGhlIElERSBpbnRlcmZhY2UKKyAqCisgKiBUaGVzZSByb3V0aW5lcyB3aWxsIHJvdW5kIHVwIGFueSByZXF1ZXN0IGZvciBhbiBvZGQgbnVtYmVyIG9mIGJ5dGVzLAorICogc28gaWYgYW4gb2RkIGxlbiBpcyBzcGVjaWZpZWQsIGJlIHN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZQorICogZXh0cmEgYnl0ZSBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIuCisgKi8KK3ZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKKwkJICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKKwl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWxlbisrOworCisJaWYgKGlvXzMyYml0KSB7CisJCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgeworCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJfQorCisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1faW5zbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCQllbHNlCisJCQlpbnNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkJaWYgKChsZW4gJiAzKSA+PSAyKSB7CisJCQlpZiAobW1pbykKKwkJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCisJCQkJCQkodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJCWVsc2UKKwkJCQlpbnN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwkJZWxzZQorCQkJaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lucHV0X2RhdGEpOworCisvKgorICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqdG8qIHRoZSBJREUgaW50ZXJmYWNlCisgKi8KK3ZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOworCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJbGVuKys7CisKKwlpZiAoaW9fMzJiaXQpIHsKKwkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQl9CisKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9vdXRzbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCQllbHNlCisJCQlvdXRzbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWlmICgobGVuICYgMykgPj0gMikgeworCQkJaWYgKG1taW8pCisJCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKKwkJCQkJCSAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJCWVsc2UKKwkJCQlvdXRzdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCQllbHNlCisJCQlvdXRzdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX291dHB1dF9kYXRhKTsKKworY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKworCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAorCisJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggYTlhNmMyMC4uMmU5MjQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogfQogRVhQT1JUX1NZTUJPTChpZGVfZW5kX2RyaXZlX2NtZCk7CiAKLXN0YXRpYyB2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQordm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZiAocnEtPnJxX2Rpc2spIHsKIAkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKQEAgLTIwNywxMzMgKzIwNyw2IEBACiAJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiB9CiAKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCwgdTggZXJyKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAotCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKLQkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KLQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKLQl9IGVsc2UgaWYgKHN0YXQgJiBBVEFfRVJSKSB7Ci0JCS8qIGVyciBoYXMgZGlmZmVyZW50IG1lYW5pbmcgb24gY2Ryb20gYW5kIHRhcGUgKi8KLQkJaWYgKGVyciA9PSBBVEFfQUJPUlRFRCkgewotCQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgJiYKLQkJCSAgICAvKiBzb21lIG5ld2VyIGRyaXZlcyBkb24ndCBzdXBwb3J0IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TICovCi0JCQkgICAgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSA9PSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUykKLQkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JCX0gZWxzZSBpZiAoKGVyciAmIEJBRF9DUkMpID09IEJBRF9DUkMpIHsKLQkJCS8qIFVETUEgY3JjIGVycm9yLCBqdXN0IHJldHJ5IHRoZSBvcGVyYXRpb24gKi8KLQkJCWRyaXZlLT5jcmNfY291bnQrKzsKLQkJfSBlbHNlIGlmIChlcnIgJiAoQVRBX0JCSyB8IEFUQV9VTkMpKSB7Ci0JCQkvKiByZXRyaWVzIHdvbid0IGhlbHAgdGhlc2UgKi8KLQkJCXJxLT5lcnJvcnMgPSBFUlJPUl9NQVg7Ci0JCX0gZWxzZSBpZiAoZXJyICYgQVRBX1RSSzBORikgewotCQkJLyogaGVscCBpdCBmaW5kIHRyYWNrIHplcm8gKi8KLQkJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVDQUw7Ci0JCX0KLQl9Ci0KLQlpZiAoKHN0YXQgJiBBVEFfRFJRKSAmJiBycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJgotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPKSA9PSAwKSB7Ci0JCWludCBuc2VjdCA9IGRyaXZlLT5tdWx0X2NvdW50ID8gZHJpdmUtPm11bHRfY291bnQgOiAxOwotCi0JCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIFJFQUQsIG5zZWN0ICogU0VDVE9SX1NJWkUpOwotCX0KLQotCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCB8fCBibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSkgewotCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKLQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKLQotCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgewotCQkrK3JxLT5lcnJvcnM7Ci0JCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwotCX0KLQotCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFQ0FMKSA9PSBFUlJPUl9SRUNBTCkKLQkJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSA9IDE7Ci0KLQkrK3JxLT5lcnJvcnM7Ci0KLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YXBpX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnIpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8Ci0JICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgewotCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLwotCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwotCX0gZWxzZSB7Ci0JCS8qIGFkZCBkZWNvZGluZyBlcnJvciBzdHVmZiAqLwotCX0KLQotCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCi0JCS8qIGZvcmNlIGFuIGFib3J0ICovCi0JCWh3aWYtPnRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfSURMRUlNTUVESUFURSk7Ci0KLQlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsKLQkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKLQl9IGVsc2UgewotCQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKLQkJCSsrcnEtPmVycm9yczsKLQkJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwotCQl9Ci0JCSsrcnEtPmVycm9yczsKLQl9Ci0KLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QKLV9faWRlX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnIpCi17Ci0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJcmV0dXJuIGlkZV9hdGFfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotCXJldHVybiBpZGVfYXRhcGlfZXJyb3IoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotfQotCi0vKioKLSAqCWlkZV9lcnJvcgktCWhhbmRsZSBhbiBlcnJvciBvbiB0aGUgSURFCi0gKglAZHJpdmU6IGRyaXZlIHRoZSBlcnJvciBvY2N1cnJlZCBvbgotICoJQG1zZzogbWVzc2FnZSB0byByZXBvcnQKLSAqCUBzdGF0OiBzdGF0dXMgYml0cwotICoKLSAqCWlkZV9lcnJvcigpIHRha2VzIGFjdGlvbiBiYXNlZCBvbiB0aGUgZXJyb3IgcmV0dXJuZWQgYnkgdGhlIGRyaXZlLgotICoJRm9yIG5vcm1hbCBJL08gdGhhdCBtYXkgd2VsbCBpbmNsdWRlIHJldHJpZXMuIFdlIGRlYWwgd2l0aAotICoJYm90aCBuZXctc3R5bGUgKHRhc2tmaWxlKSBhbmQgb2xkIHN0eWxlIGNvbW1hbmQgaGFuZGxpbmcgaGVyZS4KLSAqCUluIHRoZSBjYXNlIG9mIHRhc2tmaWxlIGNvbW1hbmQgaGFuZGxpbmcgdGhlcmUgaXMgd29yayBsZWZ0IHRvCi0gKglkbwotICovCi0gCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2Vycm9yIChpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm1zZywgdTggc3RhdCkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JdTggZXJyOwotCi0JZXJyID0gaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCBtc2csIHN0YXQpOwotCi0JcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JaWYgKHJxID09IE5VTEwpCi0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQotCS8qIHJldHJ5IG9ubHkgIm5vcm1hbCIgSS9POiAqLwotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7Ci0JCXJxLT5lcnJvcnMgPSAxOwotCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgZXJyKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCXJldHVybiBfX2lkZV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZXJyb3IpOwotCiBzdGF0aWMgdm9pZCBpZGVfdGZfc2V0X3NwZWNpZnlfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV90YXNrZmlsZSAqdGYpCiB7CiAJdGYtPm5zZWN0ICAgPSBkcml2ZS0+c2VjdDsKQEAgLTQ5MCw3MSArMzYzLDE2IEBACiAgCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAotaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nLAotCQkgICAgICAgaW50IGFyZykKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIShzZXR0aW5nLT5mbGFncyAmIERTX1NZTkMpKQotCQlyZXR1cm4gc2V0dGluZy0+c2V0KGRyaXZlLCBhcmcpOwotCi0JcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgUkVBRCwgX19HRlBfV0FJVCk7Ci0JcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU1BFQ0lBTDsKLQlycS0+Y21kX2xlbiA9IDU7Ci0JcnEtPmNtZFswXSA9IFJFUV9ERVZTRVRfRVhFQzsKLQkqKGludCAqKSZycS0+Y21kWzFdID0gYXJnOwotCXJxLT5zcGVjaWFsID0gc2V0dGluZy0+c2V0OwotCi0JaWYgKGJsa19leGVjdXRlX3JxKHEsIE5VTEwsIHJxLCAwKSkKLQkJcmV0ID0gcnEtPmVycm9yczsKLQlibGtfcHV0X3JlcXVlc3QocnEpOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXZzZXRfZXhlY3V0ZSk7Ci0KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3NwZWNpYWxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJdTggY21kID0gcnEtPmNtZFswXTsKIAotCWlmIChjbWQgPT0gUkVRX1BBUktfSEVBRFMgfHwgY21kID09IFJFUV9VTlBBUktfSEVBRFMpIHsKLQkJaWRlX3Rhc2tfdCB0YXNrOwotCQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOwotCi0JCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQkJaWYgKGNtZCA9PSBSRVFfUEFSS19IRUFEUykgewotCQkJZHJpdmUtPnNsZWVwID0gKih1bnNpZ25lZCBsb25nICopcnEtPnNwZWNpYWw7Ci0JCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKLQkJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOwotCQkJdGYtPmZlYXR1cmUgPSAweDQ0OwotCQkJdGYtPmxiYWwgPSAweDRjOwotCQkJdGYtPmxiYW0gPSAweDRlOwotCQkJdGYtPmxiYWggPSAweDU1OwotCQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7Ci0JCX0gZWxzZQkJLyogY21kID09IFJFUV9VTlBBUktfSEVBRFMgKi8KLQkJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9DSEtfUE9XRVI7Ci0KLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCQl0YXNrLnJxID0gcnE7Ci0JCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKLQkJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7Ci0JfQotCiAJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJFUV9QQVJLX0hFQURTOgorCWNhc2UgUkVRX1VOUEFSS19IRUFEUzoKKwkJcmV0dXJuIGlkZV9kb19wYXJrX3VucGFyayhkcml2ZSwgcnEpOwogCWNhc2UgUkVRX0RFVlNFVF9FWEVDOgotCXsKLQkJaW50IGVyciwgKCpzZXRmdW5jKShpZGVfZHJpdmVfdCAqLCBpbnQpID0gcnEtPnNwZWNpYWw7Ci0KLQkJZXJyID0gc2V0ZnVuYyhkcml2ZSwgKihpbnQgKikmcnEtPmNtZFsxXSk7Ci0JCWlmIChlcnIpCi0JCQlycS0+ZXJyb3JzID0gZXJyOwotCQllbHNlCi0JCQllcnIgPSAxOwotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciwgMCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9CisJCXJldHVybiBpZGVfZG9fZGV2c2V0KGRyaXZlLCBycSk7CiAJY2FzZSBSRVFfRFJJVkVfUkVTRVQ6CiAJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCWRlZmF1bHQ6CkBAIC04MjAsNjMgKzYzOCw2IEBACiAJCWJsa19wbHVnX2RldmljZShxKTsKIH0KIAotLyoKLSAqIHVuLWJ1c3kgdGhlIHBvcnQgZXRjLCBhbmQgY2xlYXIgYW55IHBlbmRpbmcgRE1BIHN0YXR1cy4gd2Ugd2FudCB0bwotICogcmV0cnkgdGhlIGN1cnJlbnQgcmVxdWVzdCBpbiBwaW8gbW9kZSBpbnN0ZWFkIG9mIHJpc2tpbmcgdG9zc2luZyBpdAotICogYWxsIGF3YXkKLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlpZGVfc3RhcnRzdG9wX3QgcmV0ID0gaWRlX3N0b3BwZWQ7Ci0KLQkvKgotCSAqIGVuZCBjdXJyZW50IGRtYSB0cmFuc2FjdGlvbgotCSAqLwotCi0JaWYgKGVycm9yIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKLQkJKHZvaWQpaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7Ci0JCXJldCA9IGlkZV9lcnJvcihkcml2ZSwgImRtYSB0aW1lb3V0IGVycm9yIiwKLQkJCQlod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgcmV0cnlcbiIsIGRyaXZlLT5uYW1lKTsKLQkJaHdpZi0+ZG1hX29wcy0+ZG1hX3RpbWVvdXQoZHJpdmUpOwotCX0KLQotCS8qCi0JICogZGlzYWJsZSBkbWEgZm9yIG5vdywgYnV0IHJlbWVtYmVyIHRoYXQgd2UgZGlkIHNvIGJlY2F1c2Ugb2YKLQkgKiBhIHRpbWVvdXQgLS0gd2UnbGwgcmVlbmFibGUgYWZ0ZXIgd2UgZmluaXNoIHRoaXMgbmV4dCByZXF1ZXN0Ci0JICogKG9yIHJhdGhlciB0aGUgZmlyc3QgY2h1bmsgb2YgaXQpIGluIHBpby4KLQkgKi8KLQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ETUFfUElPX1JFVFJZOwotCWRyaXZlLT5yZXRyeV9waW8rKzsKLQlpZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQotCS8qCi0JICogdW4tYnVzeSBkcml2ZSBldGMgYW5kIG1ha2Ugc3VyZSByZXF1ZXN0IGlzIHNhbmUKLQkgKi8KLQotCXJxID0gaHdpZi0+cnE7Ci0JaWYgKCFycSkKLQkJZ290byBvdXQ7Ci0KLQlod2lmLT5ycSA9IE5VTEw7Ci0KLQlycS0+ZXJyb3JzID0gMDsKLQotCWlmICghcnEtPmJpbykKLQkJZ290byBvdXQ7Ci0KLQlycS0+c2VjdG9yID0gcnEtPmJpby0+Ymlfc2VjdG9yOwotCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgPSBiaW9faW92ZWMocnEtPmJpbyktPmJ2X2xlbiA+PiA5OwotCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsKLQlycS0+YnVmZmVyID0gYmlvX2RhdGEocnEtPmJpbyk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgaWRlX3BsdWdfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKQEAgLTg4OCw2ICs2NDksMjkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHN0YXQgPSAwOworCisJaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCisJCXJldHVybiBod2lmLT5kbWFfb3BzLT5kbWFfdGVzdF9pcnEoZHJpdmUpOworCisJaWYgKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyICYmCisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0JST0tFTl9BTFRTVEFUVVMpID09IDApCisJCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfYWx0c3RhdHVzKGh3aWYpOworCWVsc2UKKwkJLyogTm90ZTogdGhpcyBtYXkgY2xlYXIgYSBwZW5kaW5nIElSUSEhICovCisJCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCisJaWYgKHN0YXQgJiBBVEFfQlVTWSkKKwkJLyogZHJpdmUgYnVzeTogZGVmaW5pdGVseSBub3QgaW50ZXJydXB0aW5nICovCisJCXJldHVybiAwOworCisJLyogZHJpdmUgcmVhZHk6ICptaWdodCogYmUgaW50ZXJydXB0aW5nICovCisJcmV0dXJuIDE7Cit9CisKIC8qKgogICoJaWRlX3RpbWVyX2V4cGlyeQktCWhhbmRsZSBsYWNrIG9mIGFuIElERSBpbnRlcnJ1cHQKICAqCUBkYXRhOiB0aW1lciBjYWxsYmFjayBtYWdpYyAoaHdpZikKQEAgLTExNjQsNTQgKzk0OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW50cik7CiAKLS8qKgotICoJaWRlX2RvX2RyaXZlX2NtZAktCWlzc3VlIElERSBzcGVjaWFsIGNvbW1hbmQKLSAqCUBkcml2ZTogZGV2aWNlIHRvIGlzc3VlIGNvbW1hbmQKLSAqCUBycTogcmVxdWVzdCB0byBpc3N1ZQotICoKLSAqCVRoaXMgZnVuY3Rpb24gaXNzdWVzIGEgc3BlY2lhbCBJREUgZGV2aWNlIHJlcXVlc3QKLSAqCW9udG8gdGhlIHJlcXVlc3QgcXVldWUuCi0gKgotICoJdGhlIHJxIGlzIHF1ZXVlZCBhdCB0aGUgaGVhZCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSwgZGlzcGxhY2luZwotICoJdGhlIGN1cnJlbnRseS1iZWluZy1wcm9jZXNzZWQgcmVxdWVzdCBhbmQgdGhpcyBmdW5jdGlvbgotICoJcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBuZXcgcnEgdG8gYmUKLSAqCWNvbXBsZXRlZC4gIFRoaXMgaXMgVkVSWSBEQU5HRVJPVVMsIGFuZCBpcyBpbnRlbmRlZCBmb3IKLSAqCWNhcmVmdWwgdXNlIGJ5IHRoZSBBVEFQSSB0YXBlL2Nkcm9tIGRyaXZlciBjb2RlLgotICovCi0KLXZvaWQgaWRlX2RvX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlfX2Vsdl9hZGRfcmVxdWVzdChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woaWRlX2RvX2RyaXZlX2NtZCk7Ci0KLXZvaWQgaWRlX3BrdGNtZF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTMyIHRmX2ZsYWdzLCB1MTYgYmNvdW50LCB1OCBkbWEpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWlkZV90YXNrX3QgdGFzazsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKLQkJCUlERV9URkxBR19PVVRfRkVBVFVSRSB8IHRmX2ZsYWdzOwotCXRhc2sudGYuZmVhdHVyZSA9IGRtYTsJCS8qIFVzZSBQSU8vRE1BICovCi0JdGFzay50Zi5sYmFtICAgID0gYmNvdW50ICYgMHhmZjsKLQl0YXNrLnRmLmxiYWggICAgPSAoYmNvdW50ID4+IDgpICYgMHhmZjsKLQotCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCAmdGFzay50Zik7Ci0JaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOwotCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQlod2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3BrdGNtZF90Zl9sb2FkKTsKLQogdm9pZCBpZGVfcGFkX3RyYW5zZmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHdyaXRlLCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IGIxODkyYmQuLjMxN2M1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtMjcsMzUgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0vKgotICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcwotICovCi0KLXN0YXRpYyB1OCBpZGVfaW5iICh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JcmV0dXJuICh1OCkgaW5iKHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfb3V0YiAodTggdmFsLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0Jb3V0Yih2YWwsIHBvcnQpOwotfQotCi0vKgotICoJTU1JTyBvcGVyYXRpb25zLCB0eXBpY2FsbHkgdXNlZCBmb3IgU0FUQSBjb250cm9sbGVycwotICovCi0KLXN0YXRpYyB1OCBpZGVfbW1faW5iICh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JcmV0dXJuICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX21tX291dGIgKHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0Jd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopIHBvcnQpOwotfQotCi12b2lkIFNFTEVDVF9EUklWRSAoaWRlX2RyaXZlX3QgKmRyaXZlKQordm9pZCBTRUxFQ1RfRFJJVkUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwpAQCAtNzgsMjc3ICs1MCw2IEBACiAJCXBvcnRfb3BzLT5tYXNrcHJvYyhkcml2ZSwgbWFzayk7CiB9CiAKLXZvaWQgaWRlX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCi17Ci0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJd3JpdGViKGNtZCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Ci0JZWxzZQotCQlvdXRiKGNtZCwgaHdpZi0+aW9fcG9ydHMuY29tbWFuZF9hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjX2NvbW1hbmQpOwotCi11OCBpZGVfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKLQllbHNlCi0JCXJldHVybiBpbmIoaHdpZi0+aW9fcG9ydHMuc3RhdHVzX2FkZHIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfc3RhdHVzKTsKLQotdTggaWRlX3JlYWRfYWx0c3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCi17Ci0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKLQkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Ci0JZWxzZQotCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2FsdHN0YXR1cyk7Ci0KLXZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQotewotCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOwotCi0JaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLwotCQljdGwgfD0gNDsKLQkJb24gJj0gfjQ7Ci0JfQotCi0JY3RsIHw9IG9uID8gMCA6IDI7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwotCWVsc2UKLQkJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKLQotdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7Ci0KLQlpZiAobW1pbykKLQkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOwotCWVsc2UKLQkJdGZfb3V0YiA9IGlkZV9vdXRiOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCi0JCUhJSEkgPSAweEZGOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7Ci0JCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOwotCi0JCWlmIChtbWlvKQotCQkJd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQkJZWxzZQotCQkJb3V0dyhkYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQl9Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQotCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCi0JCXRmX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCi0JCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQotCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKLQkJdGZfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQotCQl0Zl9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQotCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKLQkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQotCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCi0JCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCi0JCQkgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9sb2FkKTsKLQotdm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCi0JaWYgKG1taW8pIHsKLQkJdGZfb3V0YiA9IGlkZV9tbV9vdXRiOwotCQl0Zl9pbmIgID0gaWRlX21tX2luYjsKLQl9IGVsc2UgewotCQl0Zl9vdXRiID0gaWRlX291dGI7Ci0JCXRmX2luYiAgPSBpZGVfaW5iOwotCX0KLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhOwotCi0JCWlmIChtbWlvKQotCQkJZGF0YSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQkJZWxzZQotCQkJZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQotCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwotCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Ci0JfQotCi0JLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQotCQl0Zi0+ZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCi0JCXRmLT5uc2VjdCAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQotCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQotCQl0Zi0+bGJhbSAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQotCQl0Zi0+bGJhaCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCi0JCXRmLT5kZXZpY2UgPSB0Zl9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKLQotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCi0JCQl0Zi0+aG9iX2xiYWwgICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9yZWFkKTsKLQotLyoKLSAqIFNvbWUgbG9jYWxidXMgRUlERSBpbnRlcmZhY2VzIHJlcXVpcmUgYSBzcGVjaWFsIGFjY2VzcyBzZXF1ZW5jZQotICogd2hlbiB1c2luZyAzMi1iaXQgSS9PIGluc3RydWN0aW9ucyB0byB0cmFuc2ZlciBkYXRhLiAgV2UgY2FsbCB0aGlzCi0gKiB0aGUgInZsYl9zeW5jIiBzZXF1ZW5jZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhyZWUgc3VjY2Vzc2l2ZSByZWFkcwotICogb2YgdGhlIHNlY3RvciBjb3VudCByZWdpc3RlciBsb2NhdGlvbiwgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCi0gKiB0byBlbnN1cmUgdGhhdCB0aGUgcmVhZHMgYWxsIGhhcHBlbiB0b2dldGhlci4KLSAqLwotc3RhdGljIHZvaWQgYXRhX3ZsYl9zeW5jKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQkodm9pZClpbmIocG9ydCk7Ci0JKHZvaWQpaW5iKHBvcnQpOwotCSh2b2lkKWluYihwb3J0KTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKmZyb20qIHRoZSBJREUgaW50ZXJmYWNlCi0gKgotICogVGhlc2Ugcm91dGluZXMgd2lsbCByb3VuZCB1cCBhbnkgcmVxdWVzdCBmb3IgYW4gb2RkIG51bWJlciBvZiBieXRlcywKLSAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKLSAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgotICovCi12b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCi0JCSAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7Ci0JdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0KLQlsZW4rKzsKLQotCWlmIChpb18zMmJpdCkgewotCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKLQotCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCX0KLQotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX2luc2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQkJZWxzZQotCQkJaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JCWlmICgobGVuICYgMykgPj0gMikgewotCQkJaWYgKG1taW8pCi0JCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAotCQkJCQkJKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCQllbHNlCi0JCQkJaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JCWVsc2UKLQkJCWluc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnB1dF9kYXRhKTsKLQotLyoKLSAqIFRoaXMgaXMgdXNlZCBmb3IgbW9zdCBQSU8gZGF0YSB0cmFuc2ZlcnMgKnRvKiB0aGUgSURFIGludGVyZmFjZQotICovCi12b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAotCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gaW9fcG9ydHMtPmRhdGFfYWRkcjsKLQl1OCBpb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQotCWxlbisrOwotCi0JaWYgKGlvXzMyYml0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykgewotCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJYXRhX3ZsYl9zeW5jKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJfQotCi0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKLQkJZWxzZQotCQkJb3V0c2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCi0JCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKLQkJCWlmIChtbWlvKQotCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCi0JCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCQllbHNlCi0JCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQkJZWxzZQotCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9vdXRwdXRfZGF0YSk7Ci0KIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfdGFza190IHRhc2s7CkBAIC0zNjIsMzUgKzYzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Vycm9yKTsKIAotdm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1MTYgKmJjb3VudCwgdTggKmlyZWFzb24pCi17Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKLQkJCUlERV9URkxBR19JTl9OU0VDVDsKLQotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKLQotCSpiY291bnQgPSAodGFzay50Zi5sYmFoIDw8IDgpIHwgdGFzay50Zi5sYmFtOwotCSppcmVhc29uID0gdGFzay50Zi5uc2VjdCAmIDM7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24pOwotCi1jb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBkZWZhdWx0X3RwX29wcyA9IHsKLQkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCi0JLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKLQkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAotCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KLQkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKLQkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKLQotCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAotCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCi19OwotCiB2b2lkIGlkZV9maXhfZHJpdmVpZCh1MTYgKmlkKQogewogI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU4KQEAgLTQxMiw3ICs4NCw3IEBACiAgKiByZXR1cm5lZCBieSB0aGUgQVRBX0NNRF9JRF9BVEFbUEldIGNvbW1hbmRzLgogICovCiAKLXZvaWQgaWRlX2ZpeHN0cmluZyAodTggKnMsIGNvbnN0IGludCBieXRlY291bnQsIGNvbnN0IGludCBieXRlc3dhcCkKK3ZvaWQgaWRlX2ZpeHN0cmluZyh1OCAqcywgY29uc3QgaW50IGJ5dGVjb3VudCwgY29uc3QgaW50IGJ5dGVzd2FwKQogewogCXU4ICpwLCAqZW5kID0gJnNbYnl0ZWNvdW50ICYgfjFdOyAvKiBieXRlY291bnQgbXVzdCBiZSBldmVuICovCiAKQEAgLTQzNSw0NCArMTA3LDkgQEAKIAl3aGlsZSAocCAhPSBlbmQpCiAJCSpwKysgPSAnXDAnOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV9maXhzdHJpbmcpOwogCiAvKgotICogTmVlZGVkIGZvciBQQ0kgaXJxIHNoYXJpbmcKLSAqLwotaW50IGRyaXZlX2lzX3JlYWR5IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwotCXU4IHN0YXQJCQk9IDA7Ci0KLQlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKLQkJcmV0dXJuIGh3aWYtPmRtYV9vcHMtPmRtYV90ZXN0X2lycShkcml2ZSk7Ci0KLQkvKgotCSAqIFdlIGRvIGEgcGFzc2l2ZSBzdGF0dXMgdGVzdCB1bmRlciBzaGFyZWQgUENJIGludGVycnVwdHMgb24KLQkgKiBjYXJkcyB0aGF0IHRydWx5IHNoYXJlIHRoZSBBVEEgc2lkZSBpbnRlcnJ1cHQsIGJ1dCBtYXkgYWxzbyBzaGFyZQotCSAqIGFuIGludGVycnVwdCB3aXRoIGFub3RoZXIgcGNpIGNhcmQvZGV2aWNlLiAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucwotCSAqIGFib3V0IHBvc3NpYmxlIGlzYS1wbnAgYW5kIHBjaS1wbnAgaXNzdWVzIHlldC4KLQkgKi8KLQlpZiAoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIgJiYKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQlJPS0VOX0FMVFNUQVRVUykgPT0gMCkKLQkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9hbHRzdGF0dXMoaHdpZik7Ci0JZWxzZQotCQkvKiBOb3RlOiB0aGlzIG1heSBjbGVhciBhIHBlbmRpbmcgSVJRISEgKi8KLQkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoc3RhdCAmIEFUQV9CVVNZKQotCQkvKiBkcml2ZSBidXN5OiAgZGVmaW5pdGVseSBub3QgaW50ZXJydXB0aW5nICovCi0JCXJldHVybiAwOwotCi0JLyogZHJpdmUgcmVhZHk6ICptaWdodCogYmUgaW50ZXJydXB0aW5nICovCi0JcmV0dXJuIDE7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZHJpdmVfaXNfcmVhZHkpOwotCi0vKgogICogVGhpcyByb3V0aW5lIGJ1c3ktd2FpdHMgZm9yIHRoZSBkcml2ZSBzdGF0dXMgdG8gYmUgbm90ICJidXN5Ii4KICAqIEl0IHRoZW4gY2hlY2tzIHRoZSBzdGF0dXMgZm9yIGFsbCBvZiB0aGUgImdvb2QiIGJpdHMgYW5kIG5vbmUKICAqIG9mIHRoZSAiYmFkIiBiaXRzLCBhbmQgaWYgYWxsIGlzIG9rYXkgaXQgcmV0dXJucyAwLiAgQWxsIG90aGVyCkBAIC00ODMsNyArMTIwLDggQEAKICAqIHNldHRpbmcgYSB0aW1lciB0byB3YWtlIHVwIGF0IGhhbGYgc2Vjb25kIGludGVydmFscyB0aGVyZWFmdGVyLAogICogdW50aWwgdGltZW91dCBpcyBhY2hpZXZlZCwgYmVmb3JlIHRpbWluZyBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgX19pZGVfd2FpdF9zdGF0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHU4ICpyc3RhdCkKK3N0YXRpYyBpbnQgX19pZGVfd2FpdF9zdGF0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwgdTggYmFkLAorCQkJICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1OCAqcnN0YXQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CkBAIC01NDEsNyArMTc5LDggQEAKICAqIFRoZSBjYWxsZXIgc2hvdWxkIHJldHVybiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiAic3RhcnRzdG9wIiBpbiB0aGlzIGNhc2UsCiAgKiAic3RhcnRzdG9wIiBpcyB1bmNoYW5nZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgogICovCi1pbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKnN0YXJ0c3RvcCwgaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK2ludCBpZGVfd2FpdF9zdGF0KGlkZV9zdGFydHN0b3BfdCAqc3RhcnRzdG9wLCBpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsCisJCSAgdTggYmFkLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CiAJaW50IGVycjsKIAl1OCBzdGF0OwpAQCAtNTYxLDcgKzIwMCw2IEBACiAKIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV93YWl0X3N0YXQpOwogCiAvKioKQEAgLTU4Miw3ICsyMjAsNiBAQAogCQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbl9kcml2ZV9saXN0KTsKIAogLyoKQEAgLTYwNyw3ICsyNDQsNyBAQAogICogIEFsbCBob3N0cyB0aGF0IHVzZSB0aGUgODBjIHJpYmJvbiBtdXN0IHVzZSEKICAqICBUaGUgbmFtZSBpcyBkZXJpdmVkIGZyb20gdXBwZXIgYnl0ZSBvZiB3b3JkIDkzIGFuZCB0aGUgODBjIHJpYmJvbi4KICAqLwotdTggZWlnaHR5X25pbnR5X3RocmVlIChpZGVfZHJpdmVfdCAqZHJpdmUpCit1OCBlaWdodHlfbmludHlfdGhyZWUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwpAQCAtNjUyLDQ3ICsyODksMTkgQEAKIAogaW50IGlkZV9kcml2ZWlkX3VwZGF0ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJdTE2ICppZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4IHN0YXQ7CisJaW50IHJjOwogCi0JLyoKLQkgKiBSZS1yZWFkIGRyaXZlLT5pZCBmb3IgcG9zc2libGUgRE1BIG1vZGUKLQkgKiBjaGFuZ2UgKGNvcGllZCBmcm9tIGlkZS1wcm9iZS5jKQotCSAqLworCWlkID0ga21hbGxvYyhTRUNUT1JfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKGlkID09IE5VTEwpCisJCXJldHVybiAwOwogCiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwotCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKLQltc2xlZXAoNTApOwotCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfSURfQVRBKTsKLQotCWlmIChpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMSkpIHsKLQkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltc2xlZXAoNTApOwkvKiB3YWl0IGZvciBJUlEgYW5kIEFUQV9EUlEgKi8KLQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVChzdGF0LCBBVEFfRFJRLCBCQURfUl9TVEFUKSkgewotCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCXByaW50aygiJXM6IENIRUNLIGZvciBnb29kIFNUQVRVU1xuIiwgZHJpdmUtPm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSwgaWQpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQlpZCA9IGttYWxsb2MoU0VDVE9SX1NJWkUsIEdGUF9BVE9NSUMpOwotCWlmICghaWQpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JdHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCBpZCwgU0VDVE9SX1NJWkUpOwotCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CS8qIGNsZWFyIGRyaXZlIElSUSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JaWRlX2ZpeF9kcml2ZWlkKGlkKTsKKworCWlmIChyYykKKwkJZ290byBvdXRfZXJyOwogCiAJZHJpdmUtPmlkW0FUQV9JRF9VRE1BX01PREVTXSAgPSBpZFtBVEFfSURfVURNQV9NT0RFU107CiAJZHJpdmUtPmlkW0FUQV9JRF9NV0RNQV9NT0RFU10gPSBpZFtBVEFfSURfTVdETUFfTU9ERVNdOwpAQCAtNzA1LDYgKzMxNCwxMiBAQAogCQlpZGVfZG1hX29mZihkcml2ZSk7CiAKIAlyZXR1cm4gMTsKK291dF9lcnI6CisJU0VMRUNUX01BU0soZHJpdmUsIDApOworCWlmIChyYyA9PSAyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYmFkIHN0YXR1c1xuIiwgZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKKwlrZnJlZShpZCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCkBAIC03MzEsMTggKzM0NiwxNSBAQAogCSAqIGJ1dCBmb3Igc29tZSByZWFzb24gdGhlc2UgZG9uJ3Qgd29yayBhdAogCSAqIHRoaXMgcG9pbnQgKGxvc3QgaW50ZXJydXB0KS4KIAkgKi8KLSAgICAgICAgLyoKLSAgICAgICAgICogU2VsZWN0IHRoZSBkcml2ZSwgYW5kIGlzc3VlIHRoZSBTRVRGRUFUVVJFUyBjb21tYW5kCi0gICAgICAgICAqLwotCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOwotCQorCiAJLyoKIAkgKglGSVhNRTogd2UgcmFjZSBhZ2FpbnN0IHRoZSBydW5uaW5nIElSUSBoZXJlIGlmCiAJICoJdGhpcyBpcyBjYWxsZWQgZnJvbSBub24gSVJRIGNvbnRleHQuIElmIHdlIHVzZQogCSAqCWRpc2FibGVfaXJxKCkgd2UgaGFuZyBvbiB0aGUgZXJyb3IgcGF0aC4gV29yawogCSAqCWlzIG5lZWRlZC4KIAkgKi8KLQkgCisJZGlzYWJsZV9pcnFfbm9zeW5jKGh3aWYtPmlycSk7CisKIAl1ZGVsYXkoMSk7CiAJU0VMRUNUX0RSSVZFKGRyaXZlKTsKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7CkBAIC04MTIsOCArNDI0LDggQEAKICAqCiAgKiBTZWUgYWxzbyBpZGVfZXhlY3V0ZV9jb21tYW5kCiAgKi8KLXN0YXRpYyB2b2lkIF9faWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCi0JCSAgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKK3ZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAorCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIApAQCAtODM1LDkgKzQ0Nyw4IEBACiAJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsIGV4cGlyeSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV9zZXRfaGFuZGxlcik7Ci0gCisKIC8qKgogICoJaWRlX2V4ZWN1dGVfY29tbWFuZAktCWV4ZWN1dGUgYW4gSURFIGNvbW1hbmQKICAqCUBkcml2ZTogSURFIGRyaXZlIHRvIGlzc3VlIHRoZSBjb21tYW5kIGFnYWluc3QKQEAgLTg0Nyw3ICs0NTgsNyBAQAogICoJQGV4cGlyeTogIGhhbmRsZXIgdG8gcnVuIG9uIHRpbWVvdXQKICAqCiAgKglIZWxwZXIgZnVuY3Rpb24gdG8gaXNzdWUgYW4gSURFIGNvbW1hbmQuIFRoaXMgaGFuZGxlcyB0aGUKLSAqCWF0b21pY2l0eSByZXF1aXJlbWVudHMsIGNvbW1hbmQgdGltaW5nIGFuZCBlbnN1cmVzIHRoYXQgdGhlIAorICoJYXRvbWljaXR5IHJlcXVpcmVtZW50cywgY29tbWFuZCB0aW1pbmcgYW5kIGVuc3VyZXMgdGhhdCB0aGUKICAqCWhhbmRsZXIgYW5kIElSUSBzZXR1cCBkbyBub3QgcmFjZS4gQWxsIElERSBjb21tYW5kIGtpY2sgb2ZmCiAgKglzaG91bGQgZ28gdmlhIHRoaXMgZnVuY3Rpb24gb3IgZG8gZXF1aXZhbGVudCBsb2NraW5nLgogICovCkBAIC04ODQsMzAxICs0OTUsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWN1dGVfcGt0X2NtZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyKQotewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQotCWlmIChycSAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+Y21kWzBdID09IFJFUV9EUklWRV9SRVNFVCkKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIgPyBlcnIgOiAxLCAwKTsKLX0KLQotLyogbmVlZGVkIGJlbG93ICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MSAoaWRlX2RyaXZlX3QgKiwgaW50KTsKLQotLyoKLSAqIGF0YXBpX3Jlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCi0gKiBkdXJpbmcgYW4gYXRhcGkgZHJpdmUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmUgaGFzIG5vdCB5ZXQgcmVzcG9uZGVkLAotICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKLSAqIGZvciBhbm90aGVyIDUwbXMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgYXRhcGlfcmVzZXRfcG9sbGZ1bmMgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggc3RhdDsKLQotCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JdWRlbGF5ICgxMCk7Ci0Jc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoT0tfU1RBVChzdGF0LCAwLCBBVEFfQlVTWSkpCi0JCXByaW50aygiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7Ci0JZWxzZSB7Ci0JCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCQkJLyogY29udGludWUgcG9sbGluZyAqLwotCQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCQl9Ci0JCS8qIGVuZCBvZiBwb2xsaW5nICovCi0JCWh3aWYtPnBvbGxpbmcgPSAwOwotCQlwcmludGsoIiVzOiBBVEFQSSByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsCi0JCQkJZHJpdmUtPm5hbWUsIHN0YXQpOwotCQkvKiBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXkgKi8KLQkJcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMSk7Ci0JfQotCS8qIGRvbmUgcG9sbGluZyAqLwotCWh3aWYtPnBvbGxpbmcgPSAwOwotCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgMCk7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGlkZV9od2lmX3QgKmh3aWYsIHU4IGVycikKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZXJyX21hc3Rlcl92YWxzW10gPQotCQl7IE5VTEwsICJwYXNzZWQiLCAiZm9ybWF0dGVyIGRldmljZSBlcnJvciIsCi0JCSAgInNlY3RvciBidWZmZXIgZXJyb3IiLCAiRUNDIGNpcmN1aXRyeSBlcnJvciIsCi0JCSAgImNvbnRyb2xsaW5nIE1QVSBlcnJvciIgfTsKLQotCXU4IGVycl9tYXN0ZXIgPSBlcnIgJiAweDdmOwotCi0JcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQ6IG1hc3RlcjogIiwgaHdpZi0+bmFtZSk7Ci0JaWYgKGVycl9tYXN0ZXIgJiYgZXJyX21hc3RlciA8IDYpCi0JCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZXJyX21hc3Rlcl92YWxzW2Vycl9tYXN0ZXJdKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgImVycm9yICgweCUwMng/KSIsIGVycik7Ci0JaWYgKGVyciAmIDB4ODApCi0JCXByaW50ayhLRVJOX0NPTlQgIjsgc2xhdmU6IGZhaWxlZCIpOwotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci19Ci0KLS8qCi0gKiByZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcwotICogZHVyaW5nIGFuIGlkZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZXMgaGF2ZSBub3QgeWV0IHJlc3BvbmRlZCwKLSAqIGFuZCB3ZSBoYXZlIG5vdCB5ZXQgaGl0IG91ciBtYXhpbXVtIHdhaXRpbmcgdGltZSwgdGhlbiB0aGUgdGltZXIgaXMgcmVzdGFydGVkCi0gKiBmb3IgYW5vdGhlciA1MG1zLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHJlc2V0X3BvbGxmdW5jIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JdTggdG1wOwotCWludCBlcnIgPSAwOwotCi0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldF9wb2xsKSB7Ci0JCWVyciA9IHBvcnRfb3BzLT5yZXNldF9wb2xsKGRyaXZlKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaG9zdCByZXNldF9wb2xsIGZhaWx1cmUgZm9yICVzLlxuIiwKLQkJCQlod2lmLT5uYW1lLCBkcml2ZS0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXRtcCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQodG1wLCAwLCBBVEFfQlVTWSkpIHsKLQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0JCQkvKiBjb250aW51ZSBwb2xsaW5nICovCi0JCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JCX0KLQkJcHJpbnRrKCIlczogcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLCBod2lmLT5uYW1lLCB0bXApOwotCQlkcml2ZS0+ZmFpbHVyZXMrKzsKLQkJZXJyID0gLUVJTzsKLQl9IGVsc2UgIHsKLQkJdG1wID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOwotCi0JCWlmICh0bXAgPT0gMSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0OiBzdWNjZXNzXG4iLCBod2lmLT5uYW1lKTsKLQkJCWRyaXZlLT5mYWlsdXJlcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGh3aWYsIHRtcCk7Ci0JCQlkcml2ZS0+ZmFpbHVyZXMrKzsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQl9Ci1vdXQ6Ci0JaHdpZi0+cG9sbGluZyA9IDA7CS8qIGRvbmUgcG9sbGluZyAqLwotCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgZXJyKTsKLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3ByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaW50IGxlZ2FjeSA9IChkcml2ZS0+aWRbQVRBX0lEX0NGU19FTkFCTEVfMl0gJiAweDA0MDApID8gMCA6IDE7Ci0KLQlkcml2ZS0+c3BlY2lhbC5hbGwgPSAwOwotCWRyaXZlLT5zcGVjaWFsLmIuc2V0X2dlb21ldHJ5ID0gbGVnYWN5OwotCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgID0gbGVnYWN5OwotCi0JZHJpdmUtPm11bHRfY291bnQgPSAwOwotCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QQVJLRUQ7Ci0KLQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCAmJgotCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApCi0JCWRyaXZlLT5tdWx0X3JlcSA9IDA7Ci0KLQlpZiAoZHJpdmUtPm11bHRfcmVxICE9IGRyaXZlLT5tdWx0X2NvdW50KQotCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9tdWx0bW9kZSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBkcml2ZS0+aHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlpZGVfZGlza19wcmVfcmVzZXQoZHJpdmUpOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUE9TVF9SRVNFVDsKLQotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgewotCQlpZiAoZHJpdmUtPmNyY19jb3VudCkKLQkJCWlkZV9jaGVja19kbWFfY3JjKGRyaXZlKTsKLQkJZWxzZQotCQkJaWRlX2RtYV9vZmYoZHJpdmUpOwotCX0KLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApIHsKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7Ci0JCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnByZV9yZXNldCkKLQkJcG9ydF9vcHMtPnByZV9yZXNldChkcml2ZSk7Ci0KLQlpZiAoZHJpdmUtPmN1cnJlbnRfc3BlZWQgIT0gMHhmZikKLQkJZHJpdmUtPmRlc2lyZWRfc3BlZWQgPSBkcml2ZS0+Y3VycmVudF9zcGVlZDsKLQlkcml2ZS0+Y3VycmVudF9zcGVlZCA9IDB4ZmY7Ci19Ci0KLS8qCi0gKiBkb19yZXNldDEoKSBhdHRlbXB0cyB0byByZWNvdmVyIGEgY29uZnVzZWQgZHJpdmUgYnkgcmVzZXR0aW5nIGl0LgotICogVW5mb3J0dW5hdGVseSwgcmVzZXR0aW5nIGEgZGlzayBkcml2ZSBhY3R1YWxseSByZXNldHMgYWxsIGRldmljZXMgb24KLSAqIHRoZSBzYW1lIGludGVyZmFjZSwgc28gaXQgY2FuIHJlYWxseSBiZSB0aG91Z2h0IG9mIGFzIHJlc2V0dGluZyB0aGUKLSAqIGludGVyZmFjZSByYXRoZXIgdGhhbiByZXNldHRpbmcgdGhlIGRyaXZlLgotICoKLSAqIEFUQVBJIGRldmljZXMgaGF2ZSB0aGVpciBvd24gcmVzZXQgbWVjaGFuaXNtIHdoaWNoIGFsbG93cyB0aGVtIHRvIGJlCi0gKiBpbmRpdmlkdWFsbHkgcmVzZXQgd2l0aG91dCBjbG9iYmVyaW5nIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUgaW50ZXJmYWNlLgotICoKLSAqIFVuZm9ydHVuYXRlbHksIHRoZSBJREUgaW50ZXJmYWNlIGRvZXMgbm90IGdlbmVyYXRlIGFuIGludGVycnVwdCB0byBsZXQKLSAqIHVzIGtub3cgd2hlbiB0aGUgcmVzZXQgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCwgc28gd2UgbXVzdCBwb2xsIGZvciB0aGlzLgotICogRXF1YWxseSBwb29yLCB0aG91Z2gsIGlzIHRoZSBmYWN0IHRoYXQgdGhpcyBtYXkgYSB2ZXJ5IGxvbmcgdGltZSB0byBjb21wbGV0ZSwKLSAqICh1cCB0byAzMCBzZWNvbmRzIHdvcnN0Y2FzZSkuICBTbywgaW5zdGVhZCBvZiBidXN5LXdhaXRpbmcgaGVyZSBmb3IgaXQsCi0gKiB3ZSBzZXQgYSB0aW1lciB0byBwb2xsIGF0IDUwbXMgaW50ZXJ2YWxzLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZG9fbm90X3RyeV9hdGFwaSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wczsKLQlpZGVfZHJpdmVfdCAqdGRyaXZlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVvdXQ7Ci0JaW50IGk7Ci0JREVGSU5FX1dBSVQod2FpdCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCi0JLyogV2UgbXVzdCBub3QgcmVzZXQgd2l0aCBydW5uaW5nIGhhbmRsZXJzICovCi0JQlVHX09OKGh3aWYtPmhhbmRsZXIgIT0gTlVMTCk7Ci0KLQkvKiBGb3IgYW4gQVRBUEkgZGV2aWNlLCBmaXJzdCB0cnkgYW4gQVRBUEkgU1JTVC4gKi8KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmICFkb19ub3RfdHJ5X2F0YXBpKSB7Ci0JCXByZV9yZXNldChkcml2ZSk7Ci0JCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JCXVkZWxheSAoMjApOwotCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7Ci0JCW5kZWxheSg0MDApOwotCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7Ci0JCWh3aWYtPnBvbGxpbmcgPSAxOwotCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0KLQotCS8qIFdlIG11c3Qgbm90IGRpc3R1cmIgZGV2aWNlcyBpbiB0aGUgSURFX0RGTEFHX1BBUktFRCBzdGF0ZS4gKi8KLQlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgbm93OwotCi0JCXByZXBhcmVfdG9fd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCXRpbWVvdXQgPSBqaWZmaWVzOwotCQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgdGRyaXZlLCBod2lmKSB7Ci0JCQlpZiAodGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCAmJgotCQkJICAgIHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCAmJgotCQkJICAgIHRpbWVfYWZ0ZXIodGRyaXZlLT5zbGVlcCwgdGltZW91dCkpCi0JCQkJdGltZW91dCA9IHRkcml2ZS0+c2xlZXA7Ci0JCX0KLQotCQlub3cgPSBqaWZmaWVzOwotCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91dCwgbm93KSkKLQkJCWJyZWFrOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHRpbWVvdXQgLSBub3cpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCX0gd2hpbGUgKHRpbWVvdXQpOwotCWZpbmlzaF93YWl0KCZpZGVfcGFya193cSwgJndhaXQpOwotCi0JLyoKLQkgKiBGaXJzdCwgcmVzZXQgYW55IGRldmljZSBzdGF0ZSBkYXRhIHdlIHdlcmUgbWFpbnRhaW5pbmcKLQkgKiBmb3IgYW55IG9mIHRoZSBkcml2ZXMgb24gdGhpcyBpbnRlcmZhY2UuCi0JICovCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIHRkcml2ZSwgaHdpZikKLQkJcHJlX3Jlc2V0KHRkcml2ZSk7Ci0KLQlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyID09IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIC1FTlhJTyk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB3ZSBhbHNvIHNldCBuSUVOIHdoaWxlIHJlc2V0dGluZyB0aGUgZGV2aWNlLAotCSAqIHRvIG1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyBmcm9tIHRoZSBpbnRlcmZhY2UgZHVyaW5nIHRoZSByZXNldC4KLQkgKiBIb3dldmVyLCBkdWUgdG8gdGhlIGRlc2lnbiBvZiBQQyBoYXJkd2FyZSwgdGhpcyB3aWxsIGNhdXNlIGFuCi0JICogaW1tZWRpYXRlIGludGVycnVwdCBkdWUgdG8gdGhlIGVkZ2UgdHJhbnNpdGlvbiBpdCBwcm9kdWNlcy4KLQkgKiBUaGlzIHNpbmdsZSBpbnRlcnJ1cHQgZ2l2ZXMgdXMgYSAiZmFzdCBwb2xsIiBmb3IgZHJpdmVzIHRoYXQKLQkgKiByZWNvdmVyIGZyb20gcmVzZXQgdmVyeSBxdWlja2x5LCBzYXZpbmcgdXMgdGhlIGZpcnN0IDUwbXMgd2FpdCB0aW1lLgotCSAqCi0JICogVE9ETzogYWRkIC0+c29mdHJlc2V0IG1ldGhvZCBhbmQgc3RvcCBhYnVzaW5nIC0+c2V0X2lycQotCSAqLwotCS8qIHNldCBTUlNUIGFuZCBuSUVOICovCi0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDQpOwotCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwotCXVkZWxheSgxMCk7Ci0JLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7Ci0JLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCi0JdWRlbGF5KDEwKTsKLQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7Ci0JaHdpZi0+cG9sbGluZyA9IDE7Ci0JX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOwotCi0JLyoKLQkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKLQkgKiBzdGF0ZSB3aGVuIHRoZSBkaXNrcyBhcmUgcmVzZXQgdGhpcyB3YXkuIEF0IGxlYXN0LCB0aGUgV2luYm9uZAotCSAqIDU1MyBkb2N1bWVudGF0aW9uIHNheXMgdGhhdAotCSAqLwotCXBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldHByb2MpCi0JCXBvcnRfb3BzLT5yZXNldHByb2MoZHJpdmUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBpZGVfc3RhcnRlZDsKLX0KLQotLyoKLSAqIGlkZV9kb19yZXNldCgpIGlzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgZHJpdmUvaW50ZXJmYWNlIHJlc2V0IGNvZGUuCi0gKi8KLQotaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldCAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDApOwotfQotCi1FWFBPUlRfU1lNQk9MKGlkZV9kb19yZXNldCk7Ci0KIC8qCiAgKiBpZGVfd2FpdF9ub3RfYnVzeSgpIHdhaXRzIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRldmljZSBvbiB0aGUgaHdpZgogICogdG8gcmVwb3J0IGEgbm9uLWJ1c3kgc3RhdHVzLCBzZWUgY29tbWVudHMgaW4gaWRlX3Byb2JlX3BvcnQoKS4KQEAgLTExODcsNyArNTAzLDcgQEAKIHsKIAl1OCBzdGF0ID0gMDsKIAotCXdoaWxlKHRpbWVvdXQtLSkgeworCXdoaWxlICh0aW1lb3V0LS0pIHsKIAkJLyoKIAkJICogVHVybiB0aGlzIGludG8gYSBzY2hlZHVsZSgpIHNsZWVwIG9uY2UgSSdtIHN1cmUKIAkJICogYWJvdXQgbG9ja2luZyBpc3N1ZXMgKDIuNSB3b3JrID8pLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IDA5NTI2YTAuLmY2YzY4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTUsMTYzICs1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKnVkbWFfc3RyW10gPQotCSB7ICJVRE1BLzE2IiwgIlVETUEvMjUiLCAgIlVETUEvMzMiLCAgIlVETUEvNDQiLAotCSAgICJVRE1BLzY2IiwgIlVETUEvMTAwIiwgIlVETUEvMTMzIiwgIlVETUE3IiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKm13ZG1hX3N0cltdID0KLQl7ICJNV0RNQTAiLCAiTVdETUExIiwgIk1XRE1BMiIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9Ci0JeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KLQl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKLQotLyoqCi0gKglpZGVfeGZlcl92ZXJib3NlCS0JcmV0dXJuIElERSBtb2RlIG5hbWVzCi0gKglAbW9kZTogdHJhbnNmZXIgbW9kZQotICoKLSAqCVJldHVybnMgYSBjb25zdGFudCBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2RlCi0gKglyZXF1ZXN0ZWQuCi0gKi8KLQotY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKQotewotCWNvbnN0IGNoYXIgKnM7Ci0JdTggaSA9IG1vZGUgJiAweGY7Ci0KLQlpZiAobW9kZSA+PSBYRkVSX1VETUFfMCAmJiBtb2RlIDw9IFhGRVJfVURNQV83KQotCQlzID0gdWRtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfMikKLQkJcyA9IG13ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQotCQlzID0gc3dkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCi0JCXMgPSBwaW9fc3RyW2kgJiAweDddOwotCWVsc2UgaWYgKG1vZGUgPT0gWEZFUl9QSU9fU0xPVykKLQkJcyA9ICJQSU8gU0xPVyI7Ci0JZWxzZQotCQlzID0gIlhGRVIgRVJST1IiOwotCi0JcmV0dXJuIHM7Ci19Ci1FWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOwotCi0vKioKLSAqCWlkZV9yYXRlX2ZpbHRlcgkJLQlmaWx0ZXIgdHJhbnNmZXIgbW9kZQotICoJQGRyaXZlOiBJREUgZGV2aWNlCi0gKglAc3BlZWQ6IGRlc2lyZWQgc3BlZWQKLSAqCi0gKglHaXZlbiB0aGUgYXZhaWxhYmxlIHRyYW5zZmVyIG1vZGVzIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICoJdGhlIGJlc3QgYXZhaWxhYmxlIHNwZWVkIGF0IG9yIGJlbG93IHRoZSBzcGVlZCByZXF1ZXN0ZWQuCi0gKgotICoJVE9ETzogY2hlY2sgZGV2aWNlIFBJTyBjYXBhYmlsaXRpZXMKLSAqLwotCi1zdGF0aWMgdTggaWRlX3JhdGVfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IG1vZGUgPSBpZGVfZmluZF9kbWFfbW9kZShkcml2ZSwgc3BlZWQpOwotCi0JaWYgKG1vZGUgPT0gMCkgewotCQlpZiAoaHdpZi0+cGlvX21hc2spCi0JCQltb2RlID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDEgKyBYRkVSX1BJT18wOwotCQllbHNlCi0JCQltb2RlID0gWEZFUl9QSU9fNDsKLQl9Ci0KLS8qCXByaW50aygiJXM6IG1vZGUgMHglMDJ4LCBzcGVlZCAweCUwMnhcbiIsIF9fZnVuY19fLCBtb2RlLCBzcGVlZCk7ICovCi0KLQlyZXR1cm4gbWluKHNwZWVkLCBtb2RlKTsKLX0KLQotLyoqCi0gKglpZGVfZ2V0X2Jlc3RfcGlvX21vZGUJLQlnZXQgUElPIG1vZGUgZnJvbSBkcml2ZQotICoJQGRyaXZlOiBkcml2ZSB0byBjb25zaWRlcgotICoJQG1vZGVfd2FudGVkOiBwcmVmZXJyZWQgbW9kZQotICoJQG1heF9tb2RlOiBoaWdoZXN0IGFsbG93ZWQgbW9kZQotICoKLSAqCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSByZWNvbW1lbmRlZCBQSU8gc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gZHJpdmUsCi0gKgliYXNlZCBvbiB0aGUgZHJpdmUtPmlkIGluZm9ybWF0aW9uIGFuZCB0aGUgaWRlX3Bpb19ibGFja2xpc3RbXS4KLSAqCi0gKglEcml2ZSBQSU8gbW9kZSBpcyBhdXRvLXNlbGVjdGVkIGlmIDI1NSBpcyBwYXNzZWQgYXMgbW9kZV93YW50ZWQuCi0gKglUaGlzIGlzIHVzZWQgYnkgbW9zdCBjaGlwc2V0IHN1cHBvcnQgbW9kdWxlcyB3aGVuICJhdXRvLXR1bmluZyIuCi0gKi8KLQotdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZV93YW50ZWQsIHU4IG1heF9tb2RlKQotewotCXUxNiAqaWQgPSBkcml2ZS0+aWQ7Ci0JaW50IHBpb19tb2RlID0gLTEsIG92ZXJyaWRkZW4gPSAwOwotCi0JaWYgKG1vZGVfd2FudGVkICE9IDI1NSkKLQkJcmV0dXJuIG1pbl90KHU4LCBtb2RlX3dhbnRlZCwgbWF4X21vZGUpOwotCi0JaWYgKChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QSU9fTk9fQkxBQ0tMSVNUKSA9PSAwKQotCQlwaW9fbW9kZSA9IGlkZV9zY2FuX3Bpb19ibGFja2xpc3QoKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdKTsKLQotCWlmIChwaW9fbW9kZSAhPSAtMSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogaXMgb24gUElPIGJsYWNrbGlzdFxuIiwgZHJpdmUtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCXBpb19tb2RlID0gaWRbQVRBX0lEX09MRF9QSU9fTU9ERVNdID4+IDg7Ci0JCWlmIChwaW9fbW9kZSA+IDIpIHsJLyogMiBpcyBtYXhpbXVtIGFsbG93ZWQgdFBJTyB2YWx1ZSAqLwotCQkJcGlvX21vZGUgPSAyOwotCQkJb3ZlcnJpZGRlbiA9IDE7Ci0JCX0KLQotCQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJICAgICAgLyogQVRBMj8gKi8KLQkJCWlmIChhdGFfaWRfaGFzX2lvcmR5KGlkKSkgewotCQkJCWlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDcpIHsKLQkJCQkJb3ZlcnJpZGRlbiA9IDA7Ci0JCQkJCWlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDQpCi0JCQkJCQlwaW9fbW9kZSA9IDU7Ci0JCQkJCWVsc2UgaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgMikKLQkJCQkJCXBpb19tb2RlID0gNDsKLQkJCQkJZWxzZQotCQkJCQkJcGlvX21vZGUgPSAzOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChvdmVycmlkZGVuKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRQSU8gPiAyLCBhc3N1bWluZyB0UElPID0gMlxuIiwKLQkJCQkJIGRyaXZlLT5uYW1lKTsKLQl9Ci0KLQlpZiAocGlvX21vZGUgPiBtYXhfbW9kZSkKLQkJcGlvX21vZGUgPSBtYXhfbW9kZTsKLQotCXJldHVybiBwaW9fbW9kZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9nZXRfYmVzdF9waW9fbW9kZSk7Ci0KLS8qIHJlcV9waW8gPT0gIjI1NSIgZm9yIGF1dG8tdHVuZSAqLwotdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJlcV9waW8pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JdTggaG9zdF9waW8sIHBpbzsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybjsKLQotCUJVR19PTihod2lmLT5waW9fbWFzayA9PSAweDAwKTsKLQotCWhvc3RfcGlvID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDE7Ci0KLQlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8sIGhvc3RfcGlvKTsKLQotCS8qCi0JICogVE9ETzoKLQkgKiAtIHJlcG9ydCBkZXZpY2UgbWF4IFBJTyBtb2RlCi0JICogLSBjaGVjayByZXFfcGlvICE9IDI1NSBhZ2FpbnN0IGRldmljZSBtYXggUElPIG1vZGUKLQkgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3QgbWF4IFBJTyVkIHdhbnRlZCBQSU8lZCVzIHNlbGVjdGVkIFBJTyVkXG4iLAotCQkJICBkcml2ZS0+bmFtZSwgaG9zdF9waW8sIHJlcV9waW8sCi0JCQkgIHJlcV9waW8gPT0gMjU1ID8gIihhdXRvLXR1bmUpIiA6ICIiLCBwaW8pOwotCi0JKHZvaWQpaWRlX3NldF9waW9fbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X3Bpbyk7Ci0KIC8qKgogICoJaWRlX3RvZ2dsZV9ib3VuY2UJLQloYW5kbGUgYm91bmNlIGJ1ZmZlcmluZwogICoJQGRyaXZlOiBkcml2ZSB0byB1cGRhdGUKQEAgLTE4OCw4OSArMzEsNiBAQAogCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KGRyaXZlLT5xdWV1ZSwgYWRkcik7CiB9CiAKLWludCBpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQotCQlyZXR1cm4gMDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBUT0RPOiB0ZW1wb3JhcnkgaGFjayBmb3Igc29tZSBsZWdhY3kgaG9zdCBkcml2ZXJzIHRoYXQgZGlkbid0Ci0JICogc2V0IHRyYW5zZmVyIG1vZGUgb24gdGhlIGRldmljZSBpbiAtPnNldF9waW9fbW9kZSBtZXRob2QuLi4KLQkgKi8KLQlpZiAocG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKSB7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgewotCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCi0JCQlyZXR1cm4gLTE7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOwotCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7Ci0JfQotfQotCi1pbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKLQkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQotCQkJcmV0dXJuIC0xOwotCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7Ci0JCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2RtYV9tb2RlKTsKLQotLyoqCi0gKglpZGVfc2V0X3hmZXJfcmF0ZQktCXNldCB0cmFuc2ZlciByYXRlCi0gKglAZHJpdmU6IGRyaXZlIHRvIHNldAotICoJQHJhdGU6IHNwZWVkIHRvIGF0dGVtcHQgdG8gc2V0Ci0gKgotICoJR2VuZXJhbCBoZWxwZXIgZm9yIHNldHRpbmcgdGhlIHNwZWVkIG9mIGFuIElERSBkZXZpY2UuIFRoaXMKLSAqCWZ1bmN0aW9uIGtub3dzIGFib3V0IHVzZXIgZW5mb3JjZWQgbGltaXRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KLSAqCXdoaWNoIC0+c2V0X3Bpb19tb2RlLy0+c2V0X2RtYV9tb2RlIGRvZXMgbm90LgotICovCi0KLWludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwgfHwKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQotCQlyZXR1cm4gLTE7Ci0KLQlyYXRlID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCByYXRlKTsKLQotCUJVR19PTihyYXRlIDwgWEZFUl9QSU9fMCk7Ci0KLQlpZiAocmF0ZSA+PSBYRkVSX1BJT18wICYmIHJhdGUgPD0gWEZFUl9QSU9fNSkKLQkJcmV0dXJuIGlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIHJhdGUpOwotCi0JcmV0dXJuIGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIHJhdGUpOwotfQotCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9vcGNvZGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCmluZGV4IGM4NzVhOTUuLmYzMGU1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIApAQCAtNjAsNiArNjEsMzAgQEAKIAlyZXR1cm47CiB9CiAKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJaWYgKHJxLT5jbWRbMF0gPT0gUkVRX1BBUktfSEVBRFMpIHsKKwkJZHJpdmUtPnNsZWVwID0gKih1bnNpZ25lZCBsb25nICopcnEtPnNwZWNpYWw7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1NMRUVQSU5HOworCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKKwkJdGYtPmZlYXR1cmUgPSAweDQ0OworCQl0Zi0+bGJhbCA9IDB4NGM7CisJCXRmLT5sYmFtID0gMHg0ZTsKKwkJdGYtPmxiYWggPSAweDU1OworCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCisJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9DSEtfUE9XRVI7CisKKwl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJdGFzay5ycSA9IHJxOworCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKK30KKwogc3NpemVfdCBpZGVfcGFya19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wY2ktZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMKaW5kZXggYmRkYWUyYi4uNjExMTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMKQEAgLTMzLDggKzMzLDYgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChhbGxfZ2VuZXJpY19pZGUsIGlkZV9nZW5lcmljX2FsbCwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFsbF9nZW5lcmljX2lkZSwgIklERSBnZW5lcmljIHdpbGwgY2xhaW0gYWxsIHVua25vd24gUENJIElERSBzdG9yYWdlIGNvbnRyb2xsZXJzLiIpOwogCi0jZGVmaW5lIElERV9IRkxBR1NfVU1DIChJREVfSEZMQUdfTk9fRE1BIHwgSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTKQotCiAjZGVmaW5lIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKGV4dHJhX2ZsYWdzKSBcCiAJeyBcCiAJCS5uYW1lCQk9IERSVl9OQU1FLCBcCkBAIC02MSw3ICs1OSw3IEBACiAJLyogIDI6IFNBTVVSQUkgLyBIVDY1NjUgLyBISU5UX0lERSAqLwogCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKDApLAogCS8qICAzOiBVTTg2NzNGIC8gVU04ODg2QSAvIFVNODg4NkJGICovCi0JREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoSURFX0hGTEFHU19VTUMpLAorCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR19OT19ETUEpLAogCS8qICA0OiBWSUFfSURFIC8gT1BUSTYyMVYgLyBQaWNjb2xvMDEwezIsMyw1fSAqLwogCURFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKElERV9IRkxBR19OT19BVVRPRE1BKSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCBlZThlM2U3Li45NzQwNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMTgxLDE2ICsxODEsMTYgQEAKICAqCWRvX2lkZW50aWZ5CS0JaWRlbnRpZnkgYSBkcml2ZQogICoJQGRyaXZlOiBkcml2ZSB0byBpZGVudGlmeSAKICAqCUBjbWQ6IGNvbW1hbmQgdXNlZAorICoJQGlkOiBidWZmZXIgZm9yIElERU5USUZZIGRhdGEKICAqCiAgKglDYWxsZWQgd2hlbiB3ZSBoYXZlIGlzc3VlZCBhIGRyaXZlIGlkZW50aWZ5IGNvbW1hbmQgdG8KICAqCXJlYWQgYW5kIHBhcnNlIHRoZSByZXN1bHRzLiBUaGlzIGZ1bmN0aW9uIGlzIHJ1biB3aXRoCiAgKglpbnRlcnJ1cHRzIGRpc2FibGVkLiAKICAqLwogCi1zdGF0aWMgdm9pZCBkb19pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKK3N0YXRpYyB2b2lkIGRvX2lkZW50aWZ5KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCB1MTYgKmlkKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWNoYXIgKm0gPSAoY2hhciAqKSZpZFtBVEFfSURfUFJPRF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYnN3YXAgPSAxOwpAQCAtMjMzLDE2ICsyMzMsNiBAQAogCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BSRVNFTlQ7CiAJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RFQUQ7CiAKLQkvKgotCSAqIENoZWNrIGZvciBhbiBBVEFQSSBkZXZpY2UKLQkgKi8KLQlpZiAoY21kID09IEFUQV9DTURfSURfQVRBUEkpCi0JCWlkZV9jbGFzc2lmeV9hdGFwaV9kZXYoZHJpdmUpOwotCWVsc2UKLQkvKgotCSAqIE5vdCBhbiBBVEFQSSBkZXZpY2U6IGxvb2tzIGxpa2UgYSAicmVndWxhciIgaGFyZCBkaXNrCi0JICovCi0JCWlkZV9jbGFzc2lmeV9hdGFfZGV2KGRyaXZlKTsKIAlyZXR1cm47CiBlcnJfbWlzYzoKIAlrZnJlZShpZCk7CkBAIC0yNTAsMjEgKzI0MCwxOSBAQAogfQogCiAvKioKLSAqCWFjdHVhbF90cnlfdG9faWRlbnRpZnkJLQlzZW5kIGF0YS9hdGFwaSBpZGVudGlmeQorICoJaWRlX2Rldl9yZWFkX2lkCS0Jc2VuZCBBVEEvQVRBUEkgSURFTlRJRlkgY29tbWFuZAogICoJQGRyaXZlOiBkcml2ZSB0byBpZGVudGlmeQogICoJQGNtZDogY29tbWFuZCB0byB1c2UKKyAqCUBpZDogYnVmZmVyIGZvciBJREVOVElGWSBkYXRhCiAgKgotICoJdHJ5X3RvX2lkZW50aWZ5KCkgc2VuZHMgYW4gQVRBKFBJKSBJREVOVElGWSByZXF1ZXN0IHRvIGEgZHJpdmUKLSAqCWFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gIEl0IGFsc28gbW9uaXRvcnMgaXJxcyB3aGlsZSB0aGlzIGlzCi0gKgloYXBwZW5pbmcsIGluIGhvcGUgb2YgYXV0b21hdGljYWxseSBkZXRlcm1pbmluZyB3aGljaCBvbmUgaXMKLSAqCWJlaW5nIHVzZWQgYnkgdGhlIGludGVyZmFjZS4KKyAqCVNlbmRzIGFuIEFUQShQSSkgSURFTlRJRlkgcmVxdWVzdCB0byBhIGRyaXZlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4KICAqCiAgKglSZXR1cm5zOgkwICBkZXZpY2Ugd2FzIGlkZW50aWZpZWQKICAqCQkJMSAgZGV2aWNlIHRpbWVkLW91dCAobm8gcmVzcG9uc2UgdG8gaWRlbnRpZnkgcmVxdWVzdCkKICAqCQkJMiAgZGV2aWNlIGFib3J0ZWQgdGhlIGNvbW1hbmQgKHJlZnVzZWQgdG8gaWRlbnRpZnkgaXRzZWxmKQogICovCiAKLXN0YXRpYyBpbnQgYWN0dWFsX3RyeV90b19pZGVudGlmeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCB1MTYgKmlkKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKQEAgLTI3Myw2ICsyNjEsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTggcyA9IDAsIGEgPSAwOwogCisJLyoKKwkgKiBEaXNhYmxlIGRldmljZSBJUlEuICBPdGhlcndpc2Ugd2UnbGwgZ2V0IHNwdXJpb3VzIGludGVycnVwdHMKKwkgKiBkdXJpbmcgdGhlIGlkZW50aWZ5IHBoYXNlIHRoYXQgdGhlIElSUSBoYW5kbGVyIGlzbid0IGV4cGVjdGluZy4KKwkgKi8KKwlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyKQorCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7CisKIAkvKiB0YWtlIGEgZGVlcCBicmVhdGggKi8KIAltc2xlZXAoNTApOwogCkBAIC0zMTcsNyArMzEyLDcgQEAKIAogCWlmIChPS19TVEFUKHMsIEFUQV9EUlEsIEJBRF9SX1NUQVQpKSB7CiAJCS8qIGRyaXZlIHJldHVybmVkIElEICovCi0JCWRvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOworCQlkb19pZGVudGlmeShkcml2ZSwgY21kLCBpZCk7CiAJCS8qIGRyaXZlIHJlc3BvbmRlZCB3aXRoIElEICovCiAJCXJjID0gMDsKIAkJLyogY2xlYXIgZHJpdmUgSVJRICovCkBAIC0zMjksNjMgKzMyNCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKioKLSAqCXRyeV90b19pZGVudGlmeQktCXRyeSB0byBpZGVudGlmeSBhIGRyaXZlCi0gKglAZHJpdmU6IGRyaXZlIHRvIHByb2JlCi0gKglAY21kOiBjb21tYW5kIHRvIHVzZQotICoKLSAqCUlzc3VlIHRoZSBpZGVudGlmeSBjb21tYW5kIGFuZCB0aGVuIGRvIElSUSBwcm9iaW5nIHRvCi0gKgljb21wbGV0ZSB0aGUgaWRlbnRpZmljYXRpb24gd2hlbiBuZWVkZWQgYnkgZmluZGluZyB0aGUKLSAqCUlSUSB0aGUgZHJpdmUgaXMgYXR0YWNoZWQgdG8KLSAqLwotIAotc3RhdGljIGludCB0cnlfdG9faWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwotCWludCByZXR2YWw7Ci0JaW50IGF1dG9wcm9iZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjb29raWUgPSAwOwotCi0JLyoKLQkgKiBEaXNhYmxlIGRldmljZSBpcnEgdW5sZXNzIHdlIG5lZWQgdG8KLQkgKiBwcm9iZSBmb3IgaXQuIE90aGVyd2lzZSB3ZSdsbCBnZXQgc3B1cmlvdXMKLQkgKiBpbnRlcnJ1cHRzIGR1cmluZyB0aGUgaWRlbnRpZnktcGhhc2UgdGhhdAotCSAqIHRoZSBpcnEgaGFuZGxlciBpc24ndCBleHBlY3RpbmcuCi0JICovCi0JaWYgKGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKSB7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlhdXRvcHJvYmUgPSAxOwotCQkJY29va2llID0gcHJvYmVfaXJxX29uKCk7Ci0JCX0KLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGF1dG9wcm9iZSk7Ci0JfQotCi0JcmV0dmFsID0gYWN0dWFsX3RyeV90b19pZGVudGlmeShkcml2ZSwgY21kKTsKLQotCWlmIChhdXRvcHJvYmUpIHsKLQkJaW50IGlycTsKLQotCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7Ci0JCS8qIGNsZWFyIGRyaXZlIElSUSAqLwotCQkodm9pZCl0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCQl1ZGVsYXkoNSk7Ci0JCWlycSA9IHByb2JlX2lycV9vZmYoY29va2llKTsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCWlmIChpcnEgPiAwKSB7Ci0JCQkJaHdpZi0+aXJxID0gaXJxOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBNbW1tLi4gbXVsdGlwbGUgSVJRcy4uCi0JCQkJICogZG9uJ3Qga25vdyB3aGljaCB3YXMgb3VycwotCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSBwcm9iZSBmYWlsZWQgKDB4JWx4KVxuIiwKLQkJCQkJZHJpdmUtPm5hbWUsIGNvb2tpZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IGlkZV9idXN5X3NsZWVwKGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGFsdHN0YXR1cykKIHsKIAl1OCBzdGF0OwpAQCAtNDQwLDYgKzM3OCw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CisJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAlpbnQgcmM7CiAJdTggcHJlc2VudCA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCksIHN0YXQ7CiAKQEAgLTQ3NSwxMSArNDE0LDEwIEBACiAKIAlpZiAoT0tfU1RBVChzdGF0LCBBVEFfRFJEWSwgQVRBX0JVU1kpIHx8CiAJICAgIHByZXNlbnQgfHwgY21kID09IEFUQV9DTURfSURfQVRBUEkpIHsKLQkJLyogc2VuZCBjbWQgYW5kIHdhaXQgKi8KLQkJaWYgKChyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSwgY21kKSkpIHsKKwkJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIGNtZCwgaWQpOworCQlpZiAocmMpCiAJCQkvKiBmYWlsZWQ6IHRyeSBhZ2FpbiAqLwotCQkJcmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsY21kKTsKLQkJfQorCQkJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIGNtZCwgaWQpOwogCiAJCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCkBAIC00OTQsNyArNDMyLDcgQEAKIAkJCW1zbGVlcCg1MCk7CiAJCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7CiAJCQkodm9pZClpZGVfYnVzeV9zbGVlcChod2lmLCBXQUlUX1dPUlNUQ0FTRSwgMCk7Ci0JCQlyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSwgY21kKTsKKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKIAkJfQogCiAJCS8qIGVuc3VyZSBkcml2ZSBJUlEgaXMgY2xlYXIgKi8KQEAgLTUxNywzNyArNDU1LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKgotICovCi1zdGF0aWMgdm9pZCBlbmFibGVfbmVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwotCXU4IHN0YXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxpbmcgJXMgLS0gIiwKLQkJaHdpZi0+bmFtZSwgKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXSk7Ci0KLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOwotCW1zbGVlcCg1MCk7Ci0JdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0VYQUJZVEVfRU5BQkxFX05FU1QpOwotCi0JaWYgKGlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAwKSkgewotCQlwcmludGsoS0VSTl9DT05UICJmYWlsZWQgKHRpbWVvdXQpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1zbGVlcCg1MCk7Ci0KLQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVChzdGF0LCAwLCBCQURfU1RBVCkpCi0JCXByaW50ayhLRVJOX0NPTlQgImZhaWxlZCAoc3RhdHVzID0gMHglMDJ4KVxuIiwgc3RhdCk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9DT05UICJzdWNjZXNzXG4iKTsKLX0KLQogLyoqCiAgKglwcm9iZV9mb3JfZHJpdmVzCS0JdXBwZXIgbGV2ZWwgZHJpdmUgcHJvYmUKICAqCUBkcml2ZTogZHJpdmUgdG8gcHJvYmUgZm9yCkBAIC01NjMsNiArNDcwLDggQEAKIHN0YXRpYyB1OCBwcm9iZV9mb3JfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWNoYXIgKm07CisJaW50IHJjOworCXU4IGNtZDsKIAogCS8qCiAJICoJSW4gb3JkZXIgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlIHdlIGhhdmUgYW4gaWQKQEAgLTU4NiwyMSArNDk1LDE5IEBACiAKIAkvKiBza2lwIHByb2Jpbmc/ICovCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PUFJPQkUpID09IDApIHsKLXJldHJ5OgogCQkvKiBpZiAhKHN1Y2Nlc3N8fHRpbWVkLW91dCkgKi8KLQkJaWYgKGRvX3Byb2JlKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSkgPj0gMikKKwkJY21kID0gQVRBX0NNRF9JRF9BVEE7CisJCXJjID0gZG9fcHJvYmUoZHJpdmUsIGNtZCk7CisJCWlmIChyYyA+PSAyKSB7CiAJCQkvKiBsb29rIGZvciBBVEFQSSBkZXZpY2UgKi8KLQkJCSh2b2lkKWRvX3Byb2JlKGRyaXZlLCBBVEFfQ01EX0lEX0FUQVBJKTsKKwkJCWNtZCA9IEFUQV9DTURfSURfQVRBUEk7CisJCQlyYyA9IGRvX3Byb2JlKGRyaXZlLCBjbWQpOworCQl9CiAKIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCQkvKiBkcml2ZSBub3QgZm91bmQgKi8KIAkJCXJldHVybiAwOwogCi0JCWlmIChzdHJzdHIobSwgIkUgWCBBIEIgWSBUIEUgTiBFIFMgVCIpKSB7Ci0JCQllbmFibGVfbmVzdChkcml2ZSk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0KIAkJLyogaWRlbnRpZmljYXRpb24gZmFpbGVkPyAqLwogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewogCQkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgewpAQCAtNjE0LDggKzUyMSwxMiBAQAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIGRldmljZSBvbiBidXMgcmVmdXNlZCBpZGVudGlmaWNhdGlvbi4gSWdub3JpbmcuXG4iLCBkcml2ZS0+bmFtZSk7CiAJCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CiAJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY21kID09IEFUQV9DTURfSURfQVRBUEkpCisJCQkJaWRlX2NsYXNzaWZ5X2F0YXBpX2Rldihkcml2ZSk7CisJCQllbHNlCisJCQkJaWRlX2NsYXNzaWZ5X2F0YV9kZXYoZHJpdmUpOwogCQl9Ci0JCS8qIGRyaXZlIHdhcyBmb3VuZCAqLwogCX0KIAogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQpAQCAtNzc5LDcgKzY5MCw2IEBACiBzdGF0aWMgaW50IGlkZV9wcm9iZV9wb3J0KGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGlycWQ7CiAJaW50IGksIHJjID0gLUVOT0RFVjsKIApAQCAtNzk3LDkgKzcwNyw2IEBACiAJaWYgKGlycWQpCiAJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CiAKLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKLQogCWlmIChpZGVfcG9ydF93YWl0X3JlYWR5KGh3aWYpID09IC1FQlVTWSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXYWl0IGZvciByZWFkeSBmYWlsZWQgYmVmb3JlIHByb2JlICFcbiIsIGh3aWYtPm5hbWUpOwogCkBAIC04MTMsOCArNzIwLDYgQEAKIAkJCXJjID0gMDsKIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KIAkvKgogCSAqIFVzZSBjYWNoZWQgSVJRIG51bWJlci4gSXQgbWlnaHQgYmUgKGFuZCBpcy4uLikgY2hhbmdlZCBieSBwcm9iZQogCSAqIGNvZGUgYWJvdmUKQEAgLTgzMSwyOSArNzM2LDE4IEBACiAJaWRlX2RyaXZlX3QgKmRyaXZlOwogCWludCBpOwogCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKLQkJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQotCQkJCXBvcnRfb3BzLT5xdWlya3Byb2MoZHJpdmUpOwotCQl9CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5xdWlya3Byb2MpCisJCQlwb3J0X29wcy0+cXVpcmtwcm9jKGRyaXZlKTsKIAl9CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOwogCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OSUNFMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CiAKLQkJCWlmIChod2lmLT5kbWFfb3BzKQotCQkJCWlkZV9zZXRfZG1hKGRyaXZlKTsKLQkJfQotCX0KLQotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19JT18zMkJJVCkKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX0lPXzMyQklUOwotCQllbHNlCi0JCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9fSU9fMzJCSVQ7CisJCWlmIChod2lmLT5kbWFfb3BzKQorCQkJaWRlX3NldF9kbWEoZHJpdmUpOwogCX0KIH0KIApAQCAtOTI0LDEwICs4MTgsNyBAQAogCWludCBpLCBqID0gMDsKIAogCW11dGV4X2xvY2soJmlkZV9jZmdfbXR4KTsKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCQljb250aW51ZTsKLQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCWlmIChpZGVfaW5pdF9xdWV1ZShkcml2ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaWRlOiBmYWlsZWQgdG8gaW5pdCAlc1xuIiwKIAkJCQkJZHJpdmUtPm5hbWUpOwpAQCAtOTUzLDEzICs4NDQsNiBAQAogCWlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXI7CiAJaW50IHNhID0gMDsKIAotCW11dGV4X2xvY2soJmlkZV9jZmdfbXR4KTsKLQlzcGluX2xvY2tfaW5pdCgmaHdpZi0+bG9jayk7Ci0KLQlpbml0X3RpbWVyKCZod2lmLT50aW1lcik7Ci0JaHdpZi0+dGltZXIuZnVuY3Rpb24gPSAmaWRlX3RpbWVyX2V4cGlyeTsKLQlod2lmLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHdpZjsKLQogCWlycV9oYW5kbGVyID0gaHdpZi0+aG9zdC0+aXJxX2hhbmRsZXI7CiAJaWYgKGlycV9oYW5kbGVyID09IE5VTEwpCiAJCWlycV9oYW5kbGVyID0gaWRlX2ludHI7CkBAIC05OTcsMTAgKzg4MSw4IEBACiAJCXByaW50ayhLRVJOX0NPTlQgIiAoc2VyaWFsaXplZCkiKTsKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCi0JbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiAJcmV0dXJuIDA7CiBvdXRfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwOTksMTQgKzk4MSw5IEBACiAKIHN0YXRpYyBpbnQgaHdpZl9pbml0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaW50IG9sZF9pcnE7Ci0KIAlpZiAoIWh3aWYtPmlycSkgewotCQlod2lmLT5pcnEgPSBfX2lkZV9kZWZhdWx0X2lycShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIpOwotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIG5vIElSUVxuIiwgaHdpZi0+bmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgbm8gSVJRXG4iLCBod2lmLT5uYW1lKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2Jsa2Rldihod2lmLT5tYWpvciwgaHdpZi0+bmFtZSkpCkBAIC0xMTI0LDI5ICsxMDAxLDEyIEBACiAKIAlzZ19pbml0X3RhYmxlKGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19tYXhfbmVudHMpOwogCQotCWlmIChpbml0X2lycShod2lmKSA9PSAwKQotCQlnb3RvIGRvbmU7Ci0KLQlvbGRfaXJxID0gaHdpZi0+aXJxOwotCS8qCi0JICoJSXQgZmFpbGVkIHRvIGluaXRpYWxpc2UuIEZpbmQgdGhlIGRlZmF1bHQgSVJRIGZvciAKLQkgKgl0aGlzIHBvcnQgYW5kIHRyeSB0aGF0LgotCSAqLwotCWh3aWYtPmlycSA9IF9faWRlX2RlZmF1bHRfaXJxKGh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcik7Ci0JaWYgKCFod2lmLT5pcnEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAotCQkJaHdpZi0+bmFtZSwgb2xkX2lycSk7Ci0JCWdvdG8gb3V0OwotCX0KIAlpZiAoaW5pdF9pcnEoaHdpZikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcHJvYmVkIElSUSAlZCBhbmQgZGVmYXVsdCBJUlEgJWQgZmFpbGVkXG4iLAotCQkJaHdpZi0+bmFtZSwgb2xkX2lycSwgaHdpZi0+aXJxKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGlzYWJsZWQsIHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAorCQkJaHdpZi0+bmFtZSwgaHdpZi0+aXJxKTsKIAkJZ290byBvdXQ7CiAJfQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBwcm9iZWQgSVJRICVkIGZhaWxlZCwgdXNpbmcgZGVmYXVsdFxuIiwKLQkJaHdpZi0+bmFtZSwgaHdpZi0+aXJxKTsKIAotZG9uZToKIAlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKGh3aWYtPm1ham9yLCAwKSwgTUFYX0RSSVZFUyA8PCBQQVJUTl9CSVRTLAogCQkJICAgIFRISVNfTU9EVUxFLCBhdGFfcHJvYmUsIGF0YV9sb2NrLCBod2lmKTsKIAlyZXR1cm4gMTsKQEAgLTExNjEsMTMgKzEwMjEsMTAgQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHJpdmUtPmdlbmRldjsKIAkJaW50IHJldDsKIAotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCiAJCWRldl9zZXRfbmFtZShkZXYsICIldS4ldSIsIGh3aWYtPmluZGV4LCBpKTsKIAkJZGV2LT5wYXJlbnQgPSAmaHdpZi0+Z2VuZGV2OwogCQlkZXYtPmJ1cyA9ICZpZGVfYnVzX3R5cGU7CkBAIC0xMTkyLDYgKzEwNDksOCBAQAogCiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0lPXzMyQklUKQogCQkJZHJpdmUtPmlvXzMyYml0ID0gMTsKKwkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpCisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfVU5NQVNLX0lSUVMpCiAJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VTk1BU0s7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1VOTUFTS19JUlFTKQpAQCAtMTIxMywxMCArMTA3Miw2IEBACiAJaWYgKGQtPmluaXRfaW9wcykKIAkJZC0+aW5pdF9pb3BzKGh3aWYpOwogCi0JaWYgKCghaHdpZi0+aXJxICYmIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0xFR0FDWV9JUlFTKSkgfHwKLQkgICAgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMpKQotCQlod2lmLT5pcnEgPSBwb3J0ID8gMTUgOiAxNDsKLQogCS8qIC0+aG9zdF9mbGFncyBtYXkgYmUgc2V0IGJ5IC0+aW5pdF9pb3BzIChvciBldmVuIGVhcmxpZXIuLi4pICovCiAJaHdpZi0+aG9zdF9mbGFncyB8PSBkLT5ob3N0X2ZsYWdzOwogCWh3aWYtPnBpb19tYXNrID0gZC0+cGlvX21hc2s7CkBAIC0xMzE3LDYgKzExNzIsMTIgQEAKIAlod2lmLT5uYW1lWzJdCT0gJ2UnOwogCWh3aWYtPm5hbWVbM10JPSAnMCcgKyBpbmRleDsKIAorCXNwaW5fbG9ja19pbml0KCZod2lmLT5sb2NrKTsKKworCWluaXRfdGltZXIoJmh3aWYtPnRpbWVyKTsKKwlod2lmLT50aW1lci5mdW5jdGlvbiA9ICZpZGVfdGltZXJfZXhwaXJ5OworCWh3aWYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylod2lmOworCiAJaW5pdF9jb21wbGV0aW9uKCZod2lmLT5nZW5kZXZfcmVsX2NvbXApOwogCiAJaHdpZi0+dHBfb3BzID0gJmRlZmF1bHRfdHBfb3BzOwpAQCAtMTU2Nyw3ICsxNDI4LDcgQEAKIAogCQlqKys7CiAKLQkJaWRlX2FjcGlfaW5pdChod2lmKTsKKwkJaWRlX2FjcGlfaW5pdF9wb3J0KGh3aWYpOwogCiAJCWlmIChod2lmLT5wcmVzZW50KQogCQkJaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaHdpZik7CkBAIC0xNjI0LDExICsxNDg1LDkgQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IGk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmRyaXZlLT5nZW5kZXYpOwotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmZHJpdmUtPmdlbmRldl9yZWxfY29tcCk7Ci0JCX0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggYTdiOTI4Ny4uNDE3Y2RlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC02MDAsNyArNjAwLDcgQEAKIAlpbnQgaTsKIAogCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCB8fCBkcml2ZS0+cHJvYykKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCQljb250aW51ZTsKIAogCQlkcml2ZS0+cHJvYyA9IHByb2NfbWtkaXIoZHJpdmUtPm5hbWUsIHBhcmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMgYi9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxMGY2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYwpAQCAtMCwwICsxLDI0NiBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICp1ZG1hX3N0cltdID0KKwkgeyAiVURNQS8xNiIsICJVRE1BLzI1IiwgICJVRE1BLzMzIiwgICJVRE1BLzQ0IiwKKwkgICAiVURNQS82NiIsICJVRE1BLzEwMCIsICJVRE1BLzEzMyIsICJVRE1BNyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptd2RtYV9zdHJbXSA9CisJeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqc3dkbWFfc3RyW10gPQorCXsgIlNXRE1BMCIsICJTV0RNQTEiLCAiU1dETUEyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBpb19zdHJbXSA9CisJeyAiUElPMCIsICJQSU8xIiwgIlBJTzIiLCAiUElPMyIsICJQSU80IiwgIlBJTzUiIH07CisKKy8qKgorICoJaWRlX3hmZXJfdmVyYm9zZQktCXJldHVybiBJREUgbW9kZSBuYW1lcworICoJQG1vZGU6IHRyYW5zZmVyIG1vZGUKKyAqCisgKglSZXR1cm5zIGEgY29uc3RhbnQgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUgbW9kZQorICoJcmVxdWVzdGVkLgorICovCisKK2NvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSkKK3sKKwljb25zdCBjaGFyICpzOworCXU4IGkgPSBtb2RlICYgMHhmOworCisJaWYgKG1vZGUgPj0gWEZFUl9VRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1VETUFfNykKKwkJcyA9IHVkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9NV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfTVdfRE1BXzIpCisJCXMgPSBtd2RtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX1NXX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9TV19ETUFfMikKKwkJcyA9IHN3ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfUElPXzAgJiYgbW9kZSA8PSBYRkVSX1BJT181KQorCQlzID0gcGlvX3N0cltpICYgMHg3XTsKKwllbHNlIGlmIChtb2RlID09IFhGRVJfUElPX1NMT1cpCisJCXMgPSAiUElPIFNMT1ciOworCWVsc2UKKwkJcyA9ICJYRkVSIEVSUk9SIjsKKworCXJldHVybiBzOworfQorRVhQT1JUX1NZTUJPTChpZGVfeGZlcl92ZXJib3NlKTsKKworLyoqCisgKglpZGVfZ2V0X2Jlc3RfcGlvX21vZGUJLQlnZXQgUElPIG1vZGUgZnJvbSBkcml2ZQorICoJQGRyaXZlOiBkcml2ZSB0byBjb25zaWRlcgorICoJQG1vZGVfd2FudGVkOiBwcmVmZXJyZWQgbW9kZQorICoJQG1heF9tb2RlOiBoaWdoZXN0IGFsbG93ZWQgbW9kZQorICoKKyAqCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSByZWNvbW1lbmRlZCBQSU8gc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gZHJpdmUsCisgKgliYXNlZCBvbiB0aGUgZHJpdmUtPmlkIGluZm9ybWF0aW9uIGFuZCB0aGUgaWRlX3Bpb19ibGFja2xpc3RbXS4KKyAqCisgKglEcml2ZSBQSU8gbW9kZSBpcyBhdXRvLXNlbGVjdGVkIGlmIDI1NSBpcyBwYXNzZWQgYXMgbW9kZV93YW50ZWQuCisgKglUaGlzIGlzIHVzZWQgYnkgbW9zdCBjaGlwc2V0IHN1cHBvcnQgbW9kdWxlcyB3aGVuICJhdXRvLXR1bmluZyIuCisgKi8KKwordTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZV93YW50ZWQsIHU4IG1heF9tb2RlKQoreworCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CisJaW50IHBpb19tb2RlID0gLTEsIG92ZXJyaWRkZW4gPSAwOworCisJaWYgKG1vZGVfd2FudGVkICE9IDI1NSkKKwkJcmV0dXJuIG1pbl90KHU4LCBtb2RlX3dhbnRlZCwgbWF4X21vZGUpOworCisJaWYgKChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QSU9fTk9fQkxBQ0tMSVNUKSA9PSAwKQorCQlwaW9fbW9kZSA9IGlkZV9zY2FuX3Bpb19ibGFja2xpc3QoKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdKTsKKworCWlmIChwaW9fbW9kZSAhPSAtMSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaXMgb24gUElPIGJsYWNrbGlzdFxuIiwgZHJpdmUtPm5hbWUpOworCX0gZWxzZSB7CisJCXBpb19tb2RlID0gaWRbQVRBX0lEX09MRF9QSU9fTU9ERVNdID4+IDg7CisJCWlmIChwaW9fbW9kZSA+IDIpIHsJLyogMiBpcyBtYXhpbXVtIGFsbG93ZWQgdFBJTyB2YWx1ZSAqLworCQkJcGlvX21vZGUgPSAyOworCQkJb3ZlcnJpZGRlbiA9IDE7CisJCX0KKworCQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJICAgICAgLyogQVRBMj8gKi8KKwkJCWlmIChhdGFfaWRfaGFzX2lvcmR5KGlkKSkgeworCQkJCWlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDcpIHsKKwkJCQkJb3ZlcnJpZGRlbiA9IDA7CisJCQkJCWlmIChpZFtBVEFfSURfUElPX01PREVTXSAmIDQpCisJCQkJCQlwaW9fbW9kZSA9IDU7CisJCQkJCWVsc2UgaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgMikKKwkJCQkJCXBpb19tb2RlID0gNDsKKwkJCQkJZWxzZQorCQkJCQkJcGlvX21vZGUgPSAzOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChvdmVycmlkZGVuKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRQSU8gPiAyLCBhc3N1bWluZyB0UElPID0gMlxuIiwKKwkJCQkJIGRyaXZlLT5uYW1lKTsKKwl9CisKKwlpZiAocGlvX21vZGUgPiBtYXhfbW9kZSkKKwkJcGlvX21vZGUgPSBtYXhfbW9kZTsKKworCXJldHVybiBwaW9fbW9kZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9nZXRfYmVzdF9waW9fbW9kZSk7CisKK2ludCBpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQorCQlyZXR1cm4gMDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBUT0RPOiB0ZW1wb3JhcnkgaGFjayBmb3Igc29tZSBsZWdhY3kgaG9zdCBkcml2ZXJzIHRoYXQgZGlkbid0CisJICogc2V0IHRyYW5zZmVyIG1vZGUgb24gdGhlIGRldmljZSBpbiAtPnNldF9waW9fbW9kZSBtZXRob2QuLi4KKwkgKi8KKwlpZiAocG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKSB7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgeworCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCisJCQlyZXR1cm4gLTE7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7CisJfQorfQorCitpbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKKwkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQorCQkJcmV0dXJuIC0xOworCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7CisJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2RtYV9tb2RlKTsKKworLyogcmVxX3BpbyA9PSAiMjU1IiBmb3IgYXV0by10dW5lICovCit2b2lkIGlkZV9zZXRfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmVxX3BpbykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKwl1OCBob3N0X3BpbywgcGlvOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8CisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKKwkJcmV0dXJuOworCisJQlVHX09OKGh3aWYtPnBpb19tYXNrID09IDB4MDApOworCisJaG9zdF9waW8gPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMTsKKworCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcmVxX3BpbywgaG9zdF9waW8pOworCisJLyoKKwkgKiBUT0RPOgorCSAqIC0gcmVwb3J0IGRldmljZSBtYXggUElPIG1vZGUKKwkgKiAtIGNoZWNrIHJlcV9waW8gIT0gMjU1IGFnYWluc3QgZGV2aWNlIG1heCBQSU8gbW9kZQorCSAqLworCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdCBtYXggUElPJWQgd2FudGVkIFBJTyVkJXMgc2VsZWN0ZWQgUElPJWRcbiIsCisJCQkgIGRyaXZlLT5uYW1lLCBob3N0X3BpbywgcmVxX3BpbywKKwkJCSAgcmVxX3BpbyA9PSAyNTUgPyAiKGF1dG8tdHVuZSkiIDogIiIsIHBpbyk7CisKKwkodm9pZClpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfcGlvKTsKKworLyoqCisgKglpZGVfcmF0ZV9maWx0ZXIJCS0JZmlsdGVyIHRyYW5zZmVyIG1vZGUKKyAqCUBkcml2ZTogSURFIGRldmljZQorICoJQHNwZWVkOiBkZXNpcmVkIHNwZWVkCisgKgorICoJR2l2ZW4gdGhlIGF2YWlsYWJsZSB0cmFuc2ZlciBtb2RlcyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqCXRoZSBiZXN0IGF2YWlsYWJsZSBzcGVlZCBhdCBvciBiZWxvdyB0aGUgc3BlZWQgcmVxdWVzdGVkLgorICoKKyAqCVRPRE86IGNoZWNrIGRldmljZSBQSU8gY2FwYWJpbGl0aWVzCisgKi8KKworc3RhdGljIHU4IGlkZV9yYXRlX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBtb2RlID0gaWRlX2ZpbmRfZG1hX21vZGUoZHJpdmUsIHNwZWVkKTsKKworCWlmIChtb2RlID09IDApIHsKKwkJaWYgKGh3aWYtPnBpb19tYXNrKQorCQkJbW9kZSA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxICsgWEZFUl9QSU9fMDsKKwkJZWxzZQorCQkJbW9kZSA9IFhGRVJfUElPXzQ7CisJfQorCisvKglwcmludGsoIiVzOiBtb2RlIDB4JTAyeCwgc3BlZWQgMHglMDJ4XG4iLCBfX2Z1bmNfXywgbW9kZSwgc3BlZWQpOyAqLworCisJcmV0dXJuIG1pbihzcGVlZCwgbW9kZSk7Cit9CisKKy8qKgorICoJaWRlX3NldF94ZmVyX3JhdGUJLQlzZXQgdHJhbnNmZXIgcmF0ZQorICoJQGRyaXZlOiBkcml2ZSB0byBzZXQKKyAqCUByYXRlOiBzcGVlZCB0byBhdHRlbXB0IHRvIHNldAorICoKKyAqCUdlbmVyYWwgaGVscGVyIGZvciBzZXR0aW5nIHRoZSBzcGVlZCBvZiBhbiBJREUgZGV2aWNlLiBUaGlzCisgKglmdW5jdGlvbiBrbm93cyBhYm91dCB1c2VyIGVuZm9yY2VkIGxpbWl0cyBmcm9tIHRoZSBjb25maWd1cmF0aW9uCisgKgl3aGljaCAtPnNldF9waW9fbW9kZS8tPnNldF9kbWFfbW9kZSBkb2VzIG5vdC4KKyAqLworCitpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMIHx8CisJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKKwkJcmV0dXJuIC0xOworCisJcmF0ZSA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgcmF0ZSk7CisKKwlCVUdfT04ocmF0ZSA8IFhGRVJfUElPXzApOworCisJaWYgKHJhdGUgPj0gWEZFUl9QSU9fMCAmJiByYXRlIDw9IFhGRVJfUElPXzUpCisJCXJldHVybiBpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCByYXRlKTsKKworCXJldHVybiBpZGVfc2V0X2RtYV9tb2RlKGRyaXZlLCByYXRlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggMDkyMGUzYi4uOTJjOWI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTYyLDE2MCArNjIsNiBAQAogCiBzdHJ1Y3QgY2xhc3MgKmlkZV9wb3J0X2NsYXNzOwogCi0vKgotICoJTG9ja3MgZm9yIElERSBzZXR0aW5nIGZ1bmN0aW9uYWxpdHkKLSAqLwotCi1ERUZJTkVfTVVURVgoaWRlX3NldHRpbmdfbXR4KTsKLQotaWRlX2RldnNldF9nZXQoaW9fMzJiaXQsIGlvXzMyYml0KTsKLQotc3RhdGljIGludCBzZXRfaW9fMzJiaXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX0lPXzMyQklUKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSArIChTVVBQT1JUX1ZMQl9TWU5DIDw8IDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRyaXZlLT5pb18zMmJpdCA9IGFyZzsKLQotCXJldHVybiAwOwotfQotCi1pZGVfZGV2c2V0X2dldF9mbGFnKGtzZXR0aW5ncywgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpOwotCi1zdGF0aWMgaW50IHNldF9rc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFyZykKLQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19LRUVQX1NFVFRJTkdTOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcodXNpbmdfZG1hLCBJREVfREZMQUdfVVNJTkdfRE1BKTsKLQotc3RhdGljIGludCBzZXRfdXNpbmdfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKLQlpbnQgZXJyID0gLUVQRVJNOwotCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXRhX2lkX2hhc19kbWEoZHJpdmUtPmlkKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmIChkcml2ZS0+aHdpZi0+ZG1hX29wcyA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCWVyciA9IDA7Ci0KLQlpZiAoYXJnKSB7Ci0JCWlmIChpZGVfc2V0X2RtYShkcml2ZSkpCi0JCQllcnIgPSAtRUlPOwotCX0gZWxzZQotCQlpZGVfZG1hX29mZihkcml2ZSk7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotI2Vsc2UKLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAtRVBFUk07Ci0jZW5kaWYKLX0KLQotLyoKLSAqIGhhbmRsZSBIRElPX1NFVF9QSU9fTU9ERSBpb2N0bCBhYnVzZXJzIGhlcmUsIGV2ZW50dWFsbHkgaXQgd2lsbCBnbyBhd2F5Ci0gKi8KLXN0YXRpYyBpbnQgc2V0X3Bpb19tb2RlX2FidXNlKGlkZV9od2lmX3QgKmh3aWYsIHU4IHJlcV9waW8pCi17Ci0Jc3dpdGNoIChyZXFfcGlvKSB7Ci0JY2FzZSAyMDI6Ci0JY2FzZSAyMDE6Ci0JY2FzZSAyMDA6Ci0JY2FzZSAxMDI6Ci0JY2FzZSAxMDE6Ci0JY2FzZSAxMDA6Ci0JCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9ETUFfTU9ERVMpID8gMSA6IDA7Ci0JY2FzZSA5OgotCWNhc2UgODoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIKSA/IDEgOiAwOwotCWNhc2UgNzoKLQljYXNlIDY6Ci0JCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9GQVNUX0RFVlNFTCkgPyAxIDogMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDI1NSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKLQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCWlmIChzZXRfcGlvX21vZGVfYWJ1c2UoZHJpdmUtPmh3aWYsIGFyZykpIHsKLQkJaWYgKGFyZyA9PSA4IHx8IGFyZyA9PSA5KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkvKiB0YWtlIGxvY2sgZm9yIElERV9ERkxBR19bTk9fXVVOTUFTSy9bTk9fXUlPXzMyQklUICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQkJfSBlbHNlCi0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOwotCX0gZWxzZSB7Ci0JCWludCBrZWVwX2RtYSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKLQotCQlpZGVfc2V0X3Bpbyhkcml2ZSwgYXJnKTsKLQotCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVRfUElPX01PREVfS0VFUF9ETUEpIHsKLQkJCWlmIChrZWVwX2RtYSkKLQkJCQlpZGVfZG1hX29uKGRyaXZlKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1pZGVfZGV2c2V0X2dldF9mbGFnKHVubWFza2lycSwgSURFX0RGTEFHX1VOTUFTSyk7Ci0KLXN0YXRpYyBpbnQgc2V0X3VubWFza2lycShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fVU5NQVNLKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXJnKQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VTk1BU0s7Ci0JZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9leHRfZGV2c2V0X3J3X3N5bmMoaW9fMzJiaXQsIGlvXzMyYml0KTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmMoa2VlcHNldHRpbmdzLCBrc2V0dGluZ3MpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1bm1hc2tpcnEsIHVubWFza2lycSk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKHVzaW5nX2RtYSwgdXNpbmdfZG1hKTsKLV9fSURFX0RFVlNFVChwaW9fbW9kZSwgRFNfU1lOQywgTlVMTCwgc2V0X3Bpb19tb2RlKTsKLQogLyoqCiAgKiBpZGVfZGV2aWNlX2dldAktCWdldCBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBhIGlkZV9kcml2ZV90CiAgKiBAZHJpdmU6CWRldmljZSB0byBnZXQgYSByZWZlcmVuY2UgdG8KQEAgLTUyNyw2ICszNzMsOCBAQAogCQlnb3RvIG91dF9wb3J0X2NsYXNzOwogCX0KIAorCWlkZV9hY3BpX2luaXQoKTsKKwogCXByb2NfaWRlX2NyZWF0ZSgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pdDgyMXguYyBiL2RyaXZlcnMvaWRlL2l0ODIxeC5jCmluZGV4IDEzYjgxNTMuLjZiOWZjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvaWRlL2l0ODIxeC5jCkBAIC02MDMsNyArNjAzLDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHgyMCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2l0ODIxeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfaXQ4MjF4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggY29uZjsKIAlzdGF0aWMgY2hhciAqbW9kZVsyXSA9IHsgInBhc3MgdGhyb3VnaCIsICJzbWFydCIgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL25zODc0MTUuYyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwppbmRleCA4MzY0M2VkLi5lYTQ4YTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCkBAIC0yODYsOSArMjg2LDcgQEAKIAl9CiAKIAlpZiAoIXVzaW5nX2ludGEpCi0JCWh3aWYtPmlycSA9IF9faWRlX2RlZmF1bHRfaXJxKGh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcik7Ci0JZWxzZSBpZiAoIWh3aWYtPmlycSAmJiBod2lmLT5tYXRlICYmIGh3aWYtPm1hdGUtPmlycSkKLQkJaHdpZi0+aXJxID0gaHdpZi0+bWF0ZS0+aXJxOwkvKiBzaGFyZSBJUlEgd2l0aCBtYXRlICovCisJCWh3aWYtPmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoZGV2LCBod2lmLT5jaGFubmVsKTsKIAogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X25ldy5jIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMKaW5kZXggZjIxMjkwYy4uYjY4OTA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMKKysrIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMKQEAgLTMyNSw3ICszMjUsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9wZGNuZXcoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3BkY25ldyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBEUlZfTkFNRTsKIAl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CkBAIC00NDQsNyArNDQ0LDcgQEAKICNlbmRpZgogCiAgb3V0OgotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICogX19kZXZpbml0IHBkYzIwMjcwX2dldF9kZXYyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCmluZGV4IDk3MTkzMzIuLmNiYTY2ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZGVfZG1hX3RpbWVvdXQoZHJpdmUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9wZGMyMDJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGRtYWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKIAl1OCB1ZG1hX3NwZWVkX2ZsYWcgPSAwLCBwcmltYXJ5X21vZGUgPSAwLCBzZWNvbmRhcnlfbW9kZSA9IDA7CkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJcHJpbnRrKCIlc0FDVElWRVxuIiwgKGluYihkbWFiYXNlIHwgMHgxZikgJiAxKSA/ICIiIDogIklOIik7CiAJfQogb3V0OgotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBkYzIwMmF0YTRfZml4dXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9waWl4LmMgYi9kcml2ZXJzL2lkZS9waWl4LmMKaW5kZXggZjFlMmU0ZS4uMmFhNjk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGlpeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BpaXguYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAgKglvdXQgdG8gYmUgbmljZSBhbmQgc2ltcGxlLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2ljaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfaWNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIGV4dHJhID0gMDsKIApAQCAtMzE4LDE5ICszMTgsMTIgQEAKIAkuY2FibGVfZGV0ZWN0CQk9IHBpaXhfY2FibGVfZGV0ZWN0LAogfTsKIAotI2lmbmRlZiBDT05GSUdfSUE2NAotICNkZWZpbmUgSURFX0hGTEFHU19QSUlYIElERV9IRkxBR19MRUdBQ1lfSVJRUwotI2Vsc2UKLSAjZGVmaW5lIElERV9IRkxBR1NfUElJWCAwCi0jZW5kaWYKLQogI2RlZmluZSBERUNMQVJFX1BJSVhfREVWKHVkbWEpIFwKIAl7CQkJCQkJXAogCQkubmFtZQkJPSBEUlZfTkFNRSwJCVwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9waWl4LAlcCiAJCS5lbmFibGViaXRzCT0ge3sweDQxLDB4ODAsMHg4MH0sIHsweDQzLDB4ODAsMHg4MH19LCBcCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BvcnRfb3BzLAlcCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19QSUlYLAlcCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAkJXAogCQkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTJfT05MWSwJXAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCVwKQEAgLTM0NCw3ICszMzcsNiBAQAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BpaXgsIFwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDEsMHg4MCwweDgwfSwgezB4NDMsMHg4MCwweDgwfX0sIFwKIAkJLnBvcnRfb3BzCT0gJmljaF9wb3J0X29wcywgXAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUElJWCwgXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwgXAogCQkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTJfT05MWSwgXAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIFwKQEAgLTM2MCw4ICszNTIsNyBAQAogCQkgKi8KIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5lbmFibGViaXRzCT0ge3sweDZkLDB4YzAsMHg4MH0sIHsweDZkLDB4YzAsMHhjMH19LAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19JU0FfUE9SVFMgfCBJREVfSEZMQUdfTk9fRE1BIHwKLQkJCQkgIElERV9IRkxBR1NfUElJWCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwgSURFX0hGTEFHX05PX0RNQSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS8qIFRoaXMgaXMgYSBwYWluZnVsIHN5c3RlbSBiZXN0IHRvIGxldCBpdCBzZWxmIHR1bmUgZm9yIG5vdyAqLwogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwppbmRleCAzODIxMDJiLi5iNjU1NGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTQsIHVsdHJhX2VuYWJsZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3N2d2tzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zdndrcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGludCByZWc7CiAJdTggYnRyOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NUEsIGJ0cik7CiAJfQogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggYXRhNjZfc3Z3a3Nfc3Z3a3MoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTM1MywxNCArMzUzLDExIEBACiAJLmNhYmxlX2RldGVjdAkJPSBzdndrc19jYWJsZV9kZXRlY3QsCiB9OwogCi0jZGVmaW5lIElERV9IRkxBR1NfU1ZXS1MgSURFX0hGTEFHX0xFR0FDWV9JUlFTCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzZXJ2ZXJ3b3Jrc19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewkvKiAwOiBPU0I0ICovCiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmb3NiNF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogVURNQSBpcyBwcm9ibGVtYXRpYyBvbiBPU0I0ICovCkBAIC0zNjksNyArMzY2LDYgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzc4LDcgKzM3NCw2IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM4Nyw3ICszODIsNyBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MgfCBJREVfSEZMQUdfU0lOR0xFLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zOTYsNyArMzkxLDcgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTIHwgSURFX0hGTEFHX1NJTkdMRSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCBlODVkMWVkLi4yNGJjODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtMzA1LDcgKzMwNSw2IEBACiAgKglAZGV2OiBQQ0kgZGV2aWNlIGhvbGRpbmcgaW50ZXJmYWNlCiAgKglAZDogSURFIHBvcnQgaW5mbwogICoJQHBvcnQ6IHBvcnQgbnVtYmVyCi0gKglAaXJxOiBQQ0kgSVJRCiAgKglAaHc6IGh3X3JlZ3NfdCBpbnN0YW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcG9ydAogICoKICAqCVBlcmZvcm0gdGhlIGluaXRpYWwgc2V0IHVwIGZvciB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIHN0cnVjdHVyZS4gVGhpcwpAQCAtMzE2LDcgKzMxNSw3IEBACiAgKi8KIAogc3RhdGljIGludCBpZGVfaHdfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkLAotCQkJICAgIHVuc2lnbmVkIGludCBwb3J0LCBpbnQgaXJxLCBod19yZWdzX3QgKmh3KQorCQkJICAgIHVuc2lnbmVkIGludCBwb3J0LCBod19yZWdzX3QgKmh3KQogewogCXVuc2lnbmVkIGxvbmcgY3RsID0gMCwgYmFzZSA9IDA7CiAKQEAgLTM0NCw3ICszNDMsNiBAQAogCX0KIAogCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOwotCWh3LT5pcnEgPSBpcnE7CiAJaHctPmRldiA9ICZkZXYtPmRldjsKIAlody0+Y2hpcHNldCA9IGQtPmNoaXBzZXQgPyBkLT5jaGlwc2V0IDogaWRlX3BjaTsKIAlpZGVfc3RkX2luaXRfcG9ydHMoaHcsIGJhc2UsIGN0bCB8IDIpOwpAQCAtNDQ4LDcgKzQ0Niw2IEBACiAgKglpZGVfcGNpX3NldHVwX3BvcnRzCS0JY29uZmlndXJlIHBvcnRzL2RldmljZXMgb24gUENJIElERQogICoJQGRldjogUENJIGRldmljZQogICoJQGQ6IElERSBwb3J0IGluZm8KLSAqCUBwY2lpcnE6IElSUSBsaW5lCiAgKglAaHc6IGh3X3JlZ3NfdCBpbnN0YW5jZXMgY29ycmVzcG9uZGluZyB0byB0aGlzIFBDSSBJREUgZGV2aWNlCiAgKglAaHdzOiBod19yZWdzX3QgcG9pbnRlcnMgdGFibGUgdG8gdXBkYXRlCiAgKgpAQCAtNDYyLDcgKzQ1OSw3IEBACiAgKi8KIAogdm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkLAotCQkJIGludCBwY2lpcnEsIGh3X3JlZ3NfdCAqaHcsIGh3X3JlZ3NfdCAqKmh3cykKKwkJCSBod19yZWdzX3QgKmh3LCBod19yZWdzX3QgKipod3MpCiB7CiAJaW50IGNoYW5uZWxzID0gKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0lOR0xFKSA/IDEgOiAyLCBwb3J0OwogCXU4IHRtcDsKQEAgLTQ4MSw3ICs0NzgsNyBAQAogCQkJY29udGludWU7CS8qIHBvcnQgbm90IGVuYWJsZWQgKi8KIAkJfQogCi0JCWlmIChpZGVfaHdfY29uZmlndXJlKGRldiwgZCwgcG9ydCwgcGNpaXJxLCBodyArIHBvcnQpKQorCQlpZiAoaWRlX2h3X2NvbmZpZ3VyZShkZXYsIGQsIHBvcnQsIGh3ICsgcG9ydCkpCiAJCQljb250aW51ZTsKIAogCQkqKGh3cyArIHBvcnQpID0gaHcgKyBwb3J0OwpAQCAtNTI0LDcgKzUyMSw3IEBACiAJCWlmIChub2lzeSkKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzICVzOiBub3QgMTAwJSUgbmF0aXZlIG1vZGU6IHdpbGwgIgogCQkJCSJwcm9iZSBpcnFzIGxhdGVyXG4iLCBkLT5uYW1lLCBwY2lfbmFtZShkZXYpKTsKLQkJcGNpaXJxID0gcmV0OworCQlwY2lpcnEgPSAwOwogCX0gZWxzZSBpZiAoIXBjaWlycSAmJiBub2lzeSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlczogYmFkIGlycSAoJWQpOiB3aWxsIHByb2JlIGxhdGVyXG4iLAogCQkJZC0+bmFtZSwgcGNpX25hbWUoZGV2KSwgcGNpaXJxKTsKQEAgLTU0OSw3ICs1NDYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAwLCAmaHdbMF0sICZod3NbMF0pOworCWlkZV9wY2lfc2V0dXBfcG9ydHMoZGV2LCBkLCAmaHdbMF0sICZod3NbMF0pOwogCiAJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKGQsIGh3cyk7CiAJaWYgKGhvc3QgPT0gTlVMTCkgewpAQCAtNTY4LDcgKzU2NSwxMSBAQAogCQlnb3RvIG91dDsKIAogCS8qIGZpeHVwIElSUSAqLwotCWh3WzFdLmlycSA9IGh3WzBdLmlycSA9IHJldDsKKwlpZiAoaWRlX3BjaV9pc19pbl9jb21wYXRpYmlsaXR5X21vZGUoZGV2KSkgeworCQlod1swXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgMCk7CisJCWh3WzFdLmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoZGV2LCAxKTsKKwl9IGVsc2UKKwkJaHdbMV0uaXJxID0gaHdbMF0uaXJxID0gcmV0OwogCiAJcmV0ID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgZCwgaHdzKTsKIAlpZiAocmV0KQpAQCAtNTkxLDcgKzU5Miw3IEBACiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAKLQkJaWRlX3BjaV9zZXR1cF9wb3J0cyhwZGV2W2ldLCBkLCAwLCAmaHdbaSoyXSwgJmh3c1tpKjJdKTsKKwkJaWRlX3BjaV9zZXR1cF9wb3J0cyhwZGV2W2ldLCBkLCAmaHdbaSoyXSwgJmh3c1tpKjJdKTsKIAl9CiAKIAlob3N0ID0gaWRlX2hvc3RfYWxsb2MoZCwgaHdzKTsKQEAgLTYxOSw3ICs2MjAsMTEgQEAKIAkJCWdvdG8gb3V0OwogCiAJCS8qIGZpeHVwIElSUSAqLwotCQlod1tpKjIgKyAxXS5pcnEgPSBod1tpKjJdLmlycSA9IHJldDsKKwkJaWYgKGlkZV9wY2lfaXNfaW5fY29tcGF0aWJpbGl0eV9tb2RlKHBkZXZbaV0pKSB7CisJCQlod1tpKjJdLmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEocGRldltpXSwgMCk7CisJCQlod1tpKjIgKyAxXS5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHBkZXZbaV0sIDEpOworCQl9IGVsc2UKKwkJCWh3W2kqMiArIDFdLmlycSA9IGh3W2kqMl0uaXJxID0gcmV0OwogCX0KIAogCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsIGQsIGh3cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaWltYWdlLmMgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKaW5kZXggY2IyYjM1Mi4uMTgxMWFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jCisrKyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAgKgl0byAxMzMgTUh6IGNsb2NraW5nIGlmIHRoZSBzeXN0ZW0gaXNuJ3QgYWxyZWFkeSBzZXQgdXAgdG8gZG8gaXQuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2lpbWFnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc2lpbWFnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gaG9zdC0+aG9zdF9wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCmluZGV4IDllYzFhNGEuLmFmY2EyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYworKysgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCXJldHVybiBjaGlwc2V0X2ZhbWlseTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc2lzNTUxMyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc2lzNTUxMyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCS8qIE1ha2UgZ2VuZXJhbCBjb25maWcgb3BzIGhlcmUKIAkgICAxLyB0ZWxsIElERSBjaGFubmVscyB0byBvcGVyYXRlIGluIENvbXBhdGliaWxpdHkgbW9kZSBvbmx5CkBAIC01NjMsNyArNTYzLDcgQEAKIAkubmFtZQkJPSBEUlZfTkFNRSwKIAkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3NpczU1MTMsCiAJLmVuYWJsZWJpdHMJPSB7IHsweDRhLCAweDAyLCAweDAyfSwgezB4NGEsIDB4MDQsIDB4MDR9IH0sCi0JLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTEVHQUNZX0lSUVMgfCBJREVfSEZMQUdfTk9fQVVUT0RNQSwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVVRPRE1BLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAogCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwppbmRleCA2Mjk3OTU2Li5kYmEyMTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogICogY2hhbm5lbCAwIGhlcmUgYXQgbGVhc3QsIGJ1dCBjaGFubmVsIDEgaGFzIHRvIGJlIGVuYWJsZWQgYnkKICAqIGZpcm13YXJlIG9yIGFyY2ggY29kZS4gV2Ugc3RpbGwgc2V0IGJvdGggdG8gMTYgYml0cyBtb2RlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zbDgyYzEwNShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfc2w4MmMxMDUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MzIgdmFsOwogCkBAIC0yODEsNyArMjgxLDcgQEAKIAl2YWwgfD0gQ1RSTF9QMEVOIHwgQ1RSTF9QMEYxNiB8IENUUkxfUDFGMTY7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDAsIHZhbCk7CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHNsODJjMTA1X3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2xjOTBlNjYuYyBiL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKaW5kZXggNDBiNGI5NC4uZjU1ZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2xjOTBlNjYuYworKysgYi9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCkBAIC0xMzYsNyArMTM2LDYgQEAKIAkubmFtZQkJPSBEUlZfTkFNRSwKIAkuZW5hYmxlYml0cwk9IHsgezB4NDEsIDB4ODAsIDB4ODB9LCB7MHg0MywgMHg4MCwgMHg4MH0gfSwKIAkucG9ydF9vcHMJPSAmc2xjOTBlNjZfcG9ydF9vcHMsCi0JLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTEVHQUNZX0lSUVMsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCiAJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHJtMjkwLmMgYi9kcml2ZXJzL2lkZS90cm0yOTAuYwppbmRleCBiNmExMjg1Li4xYzA5ZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90cm0yOTAuYworKysgYi9kcml2ZXJzL2lkZS90cm0yOTAuYwpAQCAtMjc3LDkgKzI3Nyw2IEBACiAJaWYgKHJlZyAmIDB4MTApCiAJCS8qIGxlZ2FjeSBtb2RlICovCiAJCWh3aWYtPmlycSA9IGh3aWYtPmNoYW5uZWwgPyAxNSA6IDE0OwotCWVsc2UgaWYgKCFod2lmLT5pcnEgJiYgaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5pcnEpCi0JCS8qIHNoYXJpbmcgSVJRIHdpdGggbWF0ZSAqLwotCQlod2lmLT5pcnEgPSBod2lmLT5tYXRlLT5pcnE7CiAKICNpZiAxCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS92aWE4MmN4eHguYwppbmRleCA2MDkyZmUzLi4zZmY3MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS92aWE4MmN4eHguYworKysgYi9kcml2ZXJzL2lkZS92aWE4MmN4eHguYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAgKglhbmQgaW5pdGlhbGl6ZSBpdHMgZHJpdmUgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3ZpYTgyY3h4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfdmlhODJjeHh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHZpYTgyY3h4eF9kZXYgKnZkZXYgPSBob3N0LT5ob3N0X3ByaXY7CkBAIC00NDMsMTYgKzQ0Myw2IEBACiAJaWYgKCh2aWFfY29uZmlnLT5mbGFncyAmIFZJQV9OT19VTk1BU0spID09IDApCiAJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfVU5NQVNLX0lSUVM7CiAKLSNpZmRlZiBDT05GSUdfUFBDX0NIUlAKLQlpZiAobWFjaGluZV9pcyhjaHJwKSAmJiBfY2hycF90eXBlID09IF9DSFJQX1BlZ2Fzb3MpCi0JCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVM7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BTUlHQU9ORQotCWlmIChtYWNoaW5lX2lzKGFtaWdhb25lKSkKLQkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUzsKLSNlbmRpZgotCiAJZC51ZG1hX21hc2sgPSB2aWFfY29uZmlnLT51ZG1hX21hc2s7CiAKIAl2ZGV2ID0ga3phbGxvYyhzaXplb2YoKnZkZXYpLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCmluZGV4IDM4MzhiYzQuLmNiMTViZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwpAQCAtMTMyNSwxMSArMTMyNSw3IEBACiAKIAlzdHJ1Y3QgdmlkZW9fY2FyZCAqdmlkZW8gPSBmaWxlX3RvX3ZpZGVvX2NhcmQoZmlsZSk7CiAKLQlpbnQgcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZ2aWRlby0+ZmFzeW5jKTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZ2aWRlby0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZHYxMzk0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGYxZTgyYTkuLjUxMzBmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtOTI3LDggKzkyNyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzayA/IHNlcnZpY2VfbWFzayA6Ci0JCSAgICAgICBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwlzZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2sgPyBzZXJ2aWNlX21hc2sgOiB+Y3B1X3RvX2JlNjQoMCk7CiAJc2VydmljZV9pZCAmPSBzZXJ2aWNlX21hc2s7CiAJaWYgKChzZXJ2aWNlX2lkICYgSUJfU0VSVklDRV9JRF9BR05fTUFTSykgPT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQgJiYKIAkgICAgKHNlcnZpY2VfaWQgIT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpKQpAQCAtOTU0LDcgKzk1Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtLmxvY2ssIGZsYWdzKTsKIAlpZiAoc2VydmljZV9pZCA9PSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCkgewogCQljbV9pZC0+c2VydmljZV9pZCA9IGNwdV90b19iZTY0KGNtLmxpc3Rlbl9zZXJ2aWNlX2lkKyspOwotCQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJfSBlbHNlIHsKIAkJY21faWQtPnNlcnZpY2VfaWQgPSBzZXJ2aWNlX2lkOwogCQljbV9pZC0+c2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrOwpAQCAtMTEzNCw3ICsxMTMzLDcgQEAKIAkJCWdvdG8gZXJyb3IxOwogCX0KIAljbV9pZC0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwotCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBjbV9jb252ZXJ0X3RvX21zKAogCQkJCSAgICBwYXJhbS0+cHJpbWFyeV9wYXRoLT5wYWNrZXRfbGlmZV90aW1lKSAqIDIgKwogCQkJCSBjbV9jb252ZXJ0X3RvX21zKApAQCAtMTU0NSw3ICsxNTQ0LDcgQEAKIAljbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyID0gbGlzdGVuX2NtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXI7CiAJY21faWRfcHJpdi0+aWQuY29udGV4dCA9IGxpc3Rlbl9jbV9pZF9wcml2LT5pZC5jb250ZXh0OwogCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQgPSByZXFfbXNnLT5zZXJ2aWNlX2lkOwotCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAogCWNtX3Byb2Nlc3Nfcm91dGVkX3JlcShyZXFfbXNnLCB3b3JrLT5tYWRfcmVjdl93Yy0+d2MpOwogCWNtX2Zvcm1hdF9wYXRoc19mcm9tX3JlcShyZXFfbXNnLCAmd29yay0+cGF0aFswXSwgJndvcmstPnBhdGhbMV0pOwpAQCAtMjg5OCw3ICsyODk3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAljbV9pZC0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwotCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBwYXJhbS0+dGltZW91dF9tczsKIAljbV9pZF9wcml2LT5tYXhfY21fcmV0cmllcyA9IHBhcmFtLT5tYXhfY21fcmV0cmllczsKIAlyZXQgPSBjbV9hbGxvY19tc2coY21faWRfcHJpdiwgJm1zZyk7CkBAIC0yOTkyLDcgKzI5OTEsNyBAQAogCWNtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXIgPSBjdXJfY21faWRfcHJpdi0+aWQuY21faGFuZGxlcjsKIAljbV9pZF9wcml2LT5pZC5jb250ZXh0ID0gY3VyX2NtX2lkX3ByaXYtPmlkLmNvbnRleHQ7CiAJY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCA9IHNpZHJfcmVxX21zZy0+c2VydmljZV9pZDsKLQljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAKIAljbV9mb3JtYXRfc2lkcl9yZXFfZXZlbnQod29yaywgJmN1cl9jbV9pZF9wcml2LT5pZCk7CiAJY21fcHJvY2Vzc193b3JrKGNtX2lkX3ByaXYsIHdvcmspOwpAQCAtMzc4OSw3ICszNzg4LDcgQEAKIAlyd2xvY2tfaW5pdCgmY20uZGV2aWNlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjbS5sb2NrKTsKIAljbS5saXN0ZW5fc2VydmljZV90YWJsZSA9IFJCX1JPT1Q7Ci0JY20ubGlzdGVuX3NlcnZpY2VfaWQgPSBfX2NvbnN0YW50X2JlNjRfdG9fY3B1KElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKTsKKwljbS5saXN0ZW5fc2VydmljZV9pZCA9IGJlNjRfdG9fY3B1KElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKTsKIAljbS5yZW1vdGVfaWRfdGFibGUgPSBSQl9ST09UOwogCWNtLnJlbW90ZV9xcF90YWJsZSA9IFJCX1JPT1Q7CiAJY20ucmVtb3RlX3NpZHJfdGFibGUgPSBSQl9ST09UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCmluZGV4IGFlYzljN2EuLjdlNjNjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKQEAgLTQ0LDE3ICs0NCwxNyBAQAogCiAjZGVmaW5lIElCX0NNX0NMQVNTX1ZFUlNJT04JMiAvKiBJQiBzcGVjaWZpY2F0aW9uIDEuMiAqLwogCi0jZGVmaW5lIENNX1JFUV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgQ01fTVJBX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBDTV9SRUpfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIENNX1JFUF9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMykKLSNkZWZpbmUgQ01fUlRVX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE0KQotI2RlZmluZSBDTV9EUkVRX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE1KQotI2RlZmluZSBDTV9EUkVQX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE2KQotI2RlZmluZSBDTV9TSURSX1JFUV9BVFRSX0lEIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE3KQotI2RlZmluZSBDTV9TSURSX1JFUF9BVFRSX0lEIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE4KQotI2RlZmluZSBDTV9MQVBfQVRUUl9JRCAgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE5KQotI2RlZmluZSBDTV9BUFJfQVRUUl9JRCAgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDFBKQorI2RlZmluZSBDTV9SRVFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBDTV9NUkFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBDTV9SRUpfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBDTV9SRVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEzKQorI2RlZmluZSBDTV9SVFVfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE0KQorI2RlZmluZSBDTV9EUkVRX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNSkKKyNkZWZpbmUgQ01fRFJFUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTYpCisjZGVmaW5lIENNX1NJRFJfUkVRX0FUVFJfSUQJY3B1X3RvX2JlMTYoMHgwMDE3KQorI2RlZmluZSBDTV9TSURSX1JFUF9BVFRSX0lECWNwdV90b19iZTE2KDB4MDAxOCkKKyNkZWZpbmUgQ01fTEFQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxOSkKKyNkZWZpbmUgQ01fQVBSX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxQSkKIAogZW51bSBjbV9tc2dfc2VxdWVuY2UgewogCUNNX01TR19TRVFVRU5DRV9SRVEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IDc5MTNiODAuLmQxZmJhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogCUJVR19PTihkZXZpY2UtPnJlZ19zdGF0ZSAhPSBJQl9ERVZfVU5SRUdJU1RFUkVEKTsKIAotCWliX2RldmljZV91bnJlZ2lzdGVyX3N5c2ZzKGRldmljZSk7CisJa29iamVjdF9wdXQoJmRldmljZS0+ZGV2LmtvYmopOwogfQogRVhQT1JUX1NZTUJPTChpYl9kZWFsbG9jX2RldmljZSk7CiAKQEAgLTM0OCw2ICszNDgsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZkZXZpY2VfbXV0ZXgpOwogCisJaWJfZGV2aWNlX3VucmVnaXN0ZXJfc3lzZnMoZGV2aWNlKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNsaWVudF9kYXRhX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29udGV4dCwgdG1wLCAmZGV2aWNlLT5jbGllbnRfZGF0YV9saXN0LCBsaXN0KQogCQlrZnJlZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKaW5kZXggNWM1NGZjMi4uZGU5MjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKQEAgLTMwMSw2ICszMDEsMTYgQEAKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQuY29udGV4dCA9IGNvbnRleHQ7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LnFwID0gcG9ydF9wcml2LT5xcF9pbmZvW3Fwbl0ucXA7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LnBvcnRfbnVtID0gcG9ydF9udW07CisJc3Bpbl9sb2NrX2luaXQoJm1hZF9hZ2VudF9wcml2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+ZG9uZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnJtcHBfbGlzdCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrLCB0aW1lb3V0X3NlbmRzKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmxvY2FsX2xpc3QpOworCUlOSVRfV09SSygmbWFkX2FnZW50X3ByaXYtPmxvY2FsX3dvcmssIGxvY2FsX2NvbXBsZXRpb25zKTsKKwlhdG9taWNfc2V0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmbWFkX2FnZW50X3ByaXYtPmNvbXApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRfcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQuaGlfdGlkID0gKytpYl9tYWRfY2xpZW50X2lkOwpAQCAtMzUwLDE3ICszNjAsNiBAQAogCWxpc3RfYWRkX3RhaWwoJm1hZF9hZ2VudF9wcml2LT5hZ2VudF9saXN0LCAmcG9ydF9wcml2LT5hZ2VudF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X3ByaXYtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2tfaW5pdCgmbWFkX2FnZW50X3ByaXYtPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+c2VuZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5kb25lX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+cm1wcF9saXN0KTsKLQlJTklUX0RFTEFZRURfV09SSygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmssIHRpbWVvdXRfc2VuZHMpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdCk7Ci0JSU5JVF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfd29yaywgbG9jYWxfY29tcGxldGlvbnMpOwotCWF0b21pY19zZXQoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCwgMSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7Ci0KIAlyZXR1cm4gJm1hZF9hZ2VudF9wcml2LT5hZ2VudDsKIAogZXJyb3I0OgpAQCAtNzQzLDkgKzc0Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgSUJfTUFEX1JFU1VMVF9TVUNDRVNTIHwgSUJfTUFEX1JFU1VMVF9DT05TVU1FRDoKIAkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbWFkX3ByaXYpOwotCQlrZnJlZShsb2NhbCk7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAljYXNlIElCX01BRF9SRVNVTFRfU1VDQ0VTUzoKIAkJLyogVHJlYXQgbGlrZSBhbiBpbmNvbWluZyByZWNlaXZlIE1BRCAqLwogCQlwb3J0X3ByaXYgPSBpYl9nZXRfbWFkX3BvcnQobWFkX2FnZW50X3ByaXYtPmFnZW50LmRldmljZSwKQEAgLTc1NiwxMCArNzUzLDEyIEBACiAJCQkJCQkgICAgICAgICZtYWRfcHJpdi0+bWFkLm1hZCk7CiAJCX0KIAkJaWYgKCFwb3J0X3ByaXYgfHwgIXJlY3ZfbWFkX2FnZW50KSB7CisJCQkvKgorCQkJICogTm8gcmVjZWl2aW5nIGFnZW50IHNvIGRyb3AgcGFja2V0IGFuZAorCQkJICogZ2VuZXJhdGUgc2VuZCBjb21wbGV0aW9uLgorCQkJICovCiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBtYWRfcHJpdik7Ci0JCQlrZnJlZShsb2NhbCk7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCQlsb2NhbC0+bWFkX3ByaXYgPSBtYWRfcHJpdjsKIAkJbG9jYWwtPnJlY3ZfbWFkX2FnZW50ID0gcmVjdl9tYWRfYWdlbnQ7CkBAIC0yMzU2LDcgKzIzNTUsNyBAQAogCXN0cnVjdCBpYl9tYWRfbG9jYWxfcHJpdmF0ZSAqbG9jYWw7CiAJc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICpyZWN2X21hZF9hZ2VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZWN2ID0gMDsKKwlpbnQgZnJlZV9tYWQ7CiAJc3RydWN0IGliX3djIHdjOwogCXN0cnVjdCBpYl9tYWRfc2VuZF93YyBtYWRfc2VuZF93YzsKIApAQCAtMjM3MCwxNCArMjM2OSwxNSBAQAogCQkJCSAgIGNvbXBsZXRpb25fbGlzdCk7CiAJCWxpc3RfZGVsKCZsb2NhbC0+Y29tcGxldGlvbl9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZnJlZV9tYWQgPSAwOwogCQlpZiAobG9jYWwtPm1hZF9wcml2KSB7CiAJCQlyZWN2X21hZF9hZ2VudCA9IGxvY2FsLT5yZWN2X21hZF9hZ2VudDsKIAkJCWlmICghcmVjdl9tYWRfYWdlbnQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyByZWNlaXZlIE1BRCBhZ2VudCBmb3IgbG9jYWwgY29tcGxldGlvblxuIik7CisJCQkJZnJlZV9tYWQgPSAxOwogCQkJCWdvdG8gbG9jYWxfc2VuZF9jb21wbGV0aW9uOwogCQkJfQogCi0JCQlyZWN2ID0gMTsKIAkJCS8qCiAJCQkgKiBEZWZpbmVkIGJlaGF2aW9yIGlzIHRvIGNvbXBsZXRlIHJlc3BvbnNlCiAJCQkgKiBiZWZvcmUgcmVxdWVzdApAQCAtMjQyMiw3ICsyNDIyLDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKIAkJYXRvbWljX2RlYygmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KTsKLQkJaWYgKCFyZWN2KQorCQlpZiAoZnJlZV9tYWQpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBsb2NhbC0+bWFkX3ByaXYpOwogCQlrZnJlZShsb2NhbCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKaW5kZXggM2FmMmI4NC4uNTdhM2M2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKHJtcHBfaGRyLT5zZWdfbnVtID09IF9fY29uc3RhbnRfaHRvbmwoMSkpIHsKKwlpZiAocm1wcF9oZHItPnNlZ19udW0gPT0gY3B1X3RvX2JlMzIoMSkpIHsKIAkJaWYgKCEoaWJfZ2V0X3JtcHBfZmxhZ3Mocm1wcF9oZHIpICYgSUJfTUdNVF9STVBQX0ZMQUdfRklSU1QpKSB7CiAJCQlybXBwX3N0YXR1cyA9IElCX01HTVRfUk1QUF9TVEFUVVNfQkFEX1NFRzsKIAkJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKaW5kZXggNzg2M2E1MC4uMTg2NTA0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCkBAIC0zOTUsNiArMzk1LDggQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxKCZwb3J0LT5haF9sb2NrKTsKKwlpZiAocG9ydC0+c21fYWgpCisJCWtyZWZfcHV0KCZwb3J0LT5zbV9haC0+cmVmLCBmcmVlX3NtX2FoKTsKIAlwb3J0LT5zbV9haCA9IG5ld19haDsKIAlzcGluX3VubG9ja19pcnEoJnBvcnQtPmFoX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCBiNDNmN2QzLi41YzA0Y2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTY2LDExICs2Niw2IEBACiAJaW50CQkJaW5kZXg7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBpYmRldl9pc19hbGl2ZShjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldi0+cmVnX3N0YXRlID09IElCX0RFVl9SRUdJU1RFUkVEOwotfQotCiBzdGF0aWMgc3NpemVfdCBwb3J0X2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTgwLDggKzc1LDYgQEAKIAogCWlmICghcG9ydF9hdHRyLT5zaG93KQogCQlyZXR1cm4gLUVJTzsKLQlpZiAoIWliZGV2X2lzX2FsaXZlKHAtPmliZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gcG9ydF9hdHRyLT5zaG93KHAsIHBvcnRfYXR0ciwgYnVmKTsKIH0KQEAgLTU2Miw5ICs1NTUsNiBAQAogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBpYl9kZXZpY2UsIGRldik7CiAKLQlpZiAoIWliZGV2X2lzX2FsaXZlKGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJc3dpdGNoIChkZXYtPm5vZGVfdHlwZSkgewogCWNhc2UgUkRNQV9OT0RFX0lCX0NBOgkgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBDQVxuIiwgZGV2LT5ub2RlX3R5cGUpOwogCWNhc2UgUkRNQV9OT0RFX1JOSUM6CSAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IFJOSUNcbiIsIGRldi0+bm9kZV90eXBlKTsKQEAgLTU4MSw5ICs1NzEsNiBAQAogCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciBhdHRyOwogCXNzaXplX3QgcmV0OwogCi0JaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldCA9IGliX3F1ZXJ5X2RldmljZShkZXYsICZhdHRyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNjAwLDkgKzU4Nyw2IEBACiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAotCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlyZXR1cm4gc3ByaW50ZihidWYsICIlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgJmRldi0+bm9kZV9ndWlkKVswXSksCiAJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSAmZGV2LT5ub2RlX2d1aWQpWzFdKSwKQEAgLTg0OCw2ICs4MzIsOSBAQAogCXN0cnVjdCBrb2JqZWN0ICpwLCAqdDsKIAlzdHJ1Y3QgaWJfcG9ydCAqcG9ydDsKIAorCS8qIEhvbGQga29iamVjdCB1bnRpbCBpYl9kZWFsbG9jX2RldmljZSgpICovCisJa29iamVjdF9nZXQoJmRldmljZS0+ZGV2LmtvYmopOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHQsICZkZXZpY2UtPnBvcnRfbGlzdCwgZW50cnkpIHsKIAkJbGlzdF9kZWwoJnAtPmVudHJ5KTsKIAkJcG9ydCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgaWJfcG9ydCwga29iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCmluZGV4IDExM2YzYzAuLjdkNzlhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCkBAIC03Niw3ICs3Niw2IEBACiBzdGF0aWMgdm9pZCBjMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBjMl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKIHN0YXRpYyB2b2lkIGMyX3Jlc2V0KHN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYzJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYzJfcGNpX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFKDB4MThiOCwgMHhiMDAxKSB9LApAQCAtMzQ5LDcgKzM0OCw3IEBACiAJCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9BRERSKTsKIAkJCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBjcHVfdG9fYmUxNihUWFBfSFRYRF9ET05FKSwKIAkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKLQkJCQljMl9wb3J0LT5uZXRzdGF0cy50eF9kcm9wcGVkKys7CisJCQkJYzJfcG9ydC0+bmV0ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCV9fcmF3X3dyaXRldygwLApAQCAtNDU3LDcgKzQ1Niw3IEBACiAJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9GTEFHUyk7CiAKIAlwcl9kZWJ1ZygicGFja2V0IGRyb3BwZWRcbiIpOwotCWMyX3BvcnQtPm5ldHN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwljMl9wb3J0LT5uZXRkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIH0KIAogc3RhdGljIHZvaWQgYzJfcnhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC01MzIsOCArNTMxLDggQEAKIAkJbmV0aWZfcngoc2tiKTsKIAogCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQljMl9wb3J0LT5uZXRzdGF0cy5yeF9wYWNrZXRzKys7Ci0JCWMyX3BvcnQtPm5ldHN0YXRzLnJ4X2J5dGVzICs9IGJ1ZmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gYnVmbGVuOwogCX0KIAogCS8qIFNhdmUgd2hlcmUgd2UgbGVmdCBvZmYgKi8KQEAgLTc5Nyw4ICs3OTYsOCBAQAogCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX1JFQURZKSwKIAkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKIAotCWMyX3BvcnQtPm5ldHN0YXRzLnR4X3BhY2tldHMrKzsKLQljMl9wb3J0LT5uZXRzdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CisJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CiAKIAkvKiBMb29wIHRocnUgYWRkaXRpb25hbCBkYXRhIGZyYWdtZW50cyBhbmQgcXVldWUgdGhlbSAqLwogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CkBAIC04MjMsOCArODIyLDggQEAKIAkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX1JFQURZKSwKIAkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwogCi0JCQljMl9wb3J0LT5uZXRzdGF0cy50eF9wYWNrZXRzKys7Ci0JCQljMl9wb3J0LT5uZXRzdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CisJCQluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbWFwbGVuOwogCQl9CiAJfQogCkBAIC04NDUsMTMgKzg0NCw2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlyZXR1cm4gJmMyX3BvcnQtPm5ldHN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBjMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtODgwLDYgKzg3MiwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzJfbmV0ZGV2ID0geworCS5uZG9fb3BlbiAJCT0gYzJfdXAsCisJLm5kb19zdG9wIAkJPSBjMl9kb3duLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBjMl94bWl0X2ZyYW1lLAorCS5uZG9fdHhfdGltZW91dAkJPSBjMl90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBjMl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIEluaXRpYWxpemUgbmV0d29yayBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYzJfZGV2aW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwKIAkJCQkgICAgIHZvaWQgX19pb21lbSAqIG1taW9fYWRkcikKQEAgLTg5NCwxMiArODk2LDcgQEAKIAogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmMyZGV2LT5wY2lkZXYtPmRldik7CiAKLQluZXRkZXYtPm9wZW4gPSBjMl91cDsKLQluZXRkZXYtPnN0b3AgPSBjMl9kb3duOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYzJfeG1pdF9mcmFtZTsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGMyX2dldF9zdGF0czsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBjMl90eF90aW1lb3V0OwotCW5ldGRldi0+Y2hhbmdlX210dSA9IGMyX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmMyX25ldGRldjsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gQzJfVFhfVElNRU9VVDsKIAluZXRkZXYtPmlycSA9IGMyZGV2LT5wY2lkZXYtPmlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaAppbmRleCBkMTJhMjRhLi5mN2ZmNjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaApAQCAtMzY5LDggKzM2OSw2IEBACiAJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKIAogCXUzMiByeF9idWZfc2l6ZTsKLQotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldHN0YXRzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKaW5kZXggNTExOWQ2NS4uZjE5NDhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKQEAgLTcwOCwyNiArNzA4LDI3IEBACiAKIHN0YXRpYyBpbnQgYzJfcHNldWRvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAlpZiAobmV3X210dSA8IEVUSF9aTEVOIHx8IG5ld19tdHUgPiBFVEhfSlVNQk9fTVRVKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAogCS8qIFRPRE86IFRlbGwgcm5pYyBhYm91dCBuZXcgcm1kYSBpbnRlcmZhY2UgbXR1ICovCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjMl9wc2V1ZG9fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGMyX3BzZXVkb191cCwKKwkubmRvX3N0b3AgCQk9IGMyX3BzZXVkb19kb3duLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBjMl9wc2V1ZG9feG1pdF9mcmFtZSwKKwkubmRvX2NoYW5nZV9tdHUgCT0gYzJfcHNldWRvX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgdm9pZCBzZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCW5ldGRldi0+b3BlbiA9IGMyX3BzZXVkb191cDsKLQluZXRkZXYtPnN0b3AgPSBjMl9wc2V1ZG9fZG93bjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGMyX3BzZXVkb194bWl0X2ZyYW1lOwotCW5ldGRldi0+Z2V0X3N0YXRzID0gTlVMTDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBOVUxMOwotCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gTlVMTDsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSBjMl9wc2V1ZG9fY2hhbmdlX210dTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYzJfcHNldWRvX25ldGRldl9vcHM7CisKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gMDsKIAluZXRkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CiAJbmV0ZGV2LT5tdHUgPSAxNTAwOwpAQCAtNzM1LDcgKzczNiw2IEBACiAJbmV0ZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwogCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMDsKIAluZXRkZXYtPmZsYWdzIHw9IElGRl9OT0FSUDsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYzJfcHNldWRvX25ldGRldl9pbml0KHN0cnVjdCBjMl9kZXYgKmMyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwppbmRleCA0ZGNmMDhiLi5hNGE4MmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJaWYgKChDUUVfT1BDT0RFKCpjcWUpID09IFQzX1JFQURfUkVTUCkgJiYgU1FfVFlQRSgqY3FlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKENRRV9PUENPREUoKmNxZSkgPT0gVDNfU0VORCkgJiYgUlFfVFlQRSgqY3FlKSAmJgorCWlmIChDUUVfU0VORF9PUENPREUoKmNxZSkgJiYgUlFfVFlQRSgqY3FlKSAmJgogCSAgICBRX0VNUFRZKHdxLT5ycV9ycHRyLCB3cS0+cnFfd3B0cikpCiAJCXJldHVybiAwOwogCkBAIC03MDEsNiArNzAxLDkgQEAKIAl1MzIgc3RhZ19pZHg7CiAJdTMyIHdwdHI7CiAKKwlpZiAocmRldl9wLT5mbGFncykKKwkJcmV0dXJuIC1FSU87CisKIAlzdGFnX3N0YXRlID0gc3RhZ19zdGF0ZSA+IDA7CiAJc3RhZ19pZHggPSAoKnN0YWcpID4+IDg7CiAKQEAgLTkzOCw2ICs5NDEsMjMgQEAKIAlpZiAoIXJkZXZfcC0+dDNjZGV2X3ApCiAJCXJkZXZfcC0+dDNjZGV2X3AgPSBkZXYydDNjZGV2KG5ldGRldl9wKTsKIAlyZGV2X3AtPnQzY2Rldl9wLT51bHAgPSAodm9pZCAqKSByZGV2X3A7CisKKwllcnIgPSByZGV2X3AtPnQzY2Rldl9wLT5jdGwocmRldl9wLT50M2NkZXZfcCwgR0VUX0VNQkVEREVEX0lORk8sCisJCQkJCSAmKHJkZXZfcC0+ZndfaW5mbykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyB0M2NkZXZfcCglcCktPmN0bCByZXR1cm5lZCBlcnJvciAlZC5cbiIsCisJCSAgICAgX19mdW5jX18sIHJkZXZfcC0+dDNjZGV2X3AsIGVycik7CisJCWdvdG8gZXJyMTsKKwl9CisJaWYgKEdfRldfVkVSU0lPTl9NQUpPUihyZGV2X3AtPmZ3X2luZm8uZndfdmVycykgIT0gQ1hJT19GV19NQUopIHsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiZmF0YWwgZmlybXdhcmUgdmVyc2lvbiBtaXNtYXRjaDogIgorCQkgICAgICAgIm5lZWQgdmVyc2lvbiAldSBidXQgYWRhcHRlciBoYXMgdmVyc2lvbiAldVxuIiwKKwkJICAgICAgIENYSU9fRldfTUFKLAorCQkgICAgICAgR19GV19WRVJTSU9OX01BSk9SKHJkZXZfcC0+ZndfaW5mby5md192ZXJzKSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyMTsKKwl9CisKIAllcnIgPSByZGV2X3AtPnQzY2Rldl9wLT5jdGwocmRldl9wLT50M2NkZXZfcCwgUkRNQV9HRVRfUEFSQU1TLAogCQkJCQkgJihyZGV2X3AtPnJuaWNfaW5mbykpOwogCWlmIChlcnIpIHsKQEAgLTEyMDQsMTEgKzEyMjQsMTIgQEAKIAkJfQogCiAJCS8qIGluY29taW5nIFNFTkQgd2l0aCBubyByZWNlaXZlIHBvc3RlZCBmYWlsdXJlcyAqLwotCQlpZiAoKENRRV9PUENPREUoKmh3X2NxZSkgPT0gVDNfU0VORCkgJiYgUlFfVFlQRSgqaHdfY3FlKSAmJgorCQlpZiAoQ1FFX1NFTkRfT1BDT0RFKCpod19jcWUpICYmIFJRX1RZUEUoKmh3X2NxZSkgJiYKIAkJICAgIFFfRU1QVFkod3EtPnJxX3JwdHIsIHdxLT5ycV93cHRyKSkgewogCQkJcmV0ID0gLTE7CiAJCQlnb3RvIHNraXBfY3FlOwogCQl9CisJCUJVR19PTigoKmNxZV9mbHVzaGVkID09IDApICYmICFTV19DUUUoKmh3X2NxZSkpOwogCQlnb3RvIHByb2NfY3FlOwogCX0KIApAQCAtMTIyMyw2ICsxMjQ0LDEzIEBACiAJCSAqIHRoZW4gd2UgY29tcGxldGUgdGhpcyB3aXRoIFRQVF9FUlJfTVNOIGFuZCBtYXJrIHRoZSB3cSBpbgogCQkgKiBlcnJvci4KIAkJICovCisKKwkJaWYgKFFfRU1QVFkod3EtPnJxX3JwdHIsIHdxLT5ycV93cHRyKSkgeworCQkJd3EtPmVycm9yID0gMTsKKwkJCXJldCA9IC0xOworCQkJZ290byBza2lwX2NxZTsKKwkJfQorCiAJCWlmICh1bmxpa2VseSgoQ1FFX1dSSURfTVNOKCpod19jcWUpICE9ICh3cS0+cnFfcnB0ciArIDEpKSkpIHsKIAkJCXdxLT5lcnJvciA9IDE7CiAJCQlod19jcWUtPmhlYWRlciB8PSBodG9ubChWX0NRRV9TVEFUVVMoVFBUX0VSUl9NU04pKTsKQEAgLTEyNzcsNiArMTMwNSw3IEBACiAJCQljeGlvX2hhbF9wYmxwb29sX2ZyZWUod3EtPnJkZXYsCiAJCQkJd3EtPnJxW1FfUFRSMklEWCh3cS0+cnFfcnB0ciwKIAkJCQl3cS0+cnFfc2l6ZV9sb2cyKV0ucGJsX2FkZHIsIFQzX1NUQUcwX1BCTF9TSVpFKTsKKwkJQlVHX09OKFFfRU1QVFkod3EtPnJxX3JwdHIsIHdxLT5ycV93cHRyKSk7CiAJCXdxLT5ycV9ycHRyKys7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCmluZGV4IDY1NmZlNDcuLjA5NGE2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCkBAIC02MSw2ICs2MSw4IEBACiAKICNkZWZpbmUgVDNfTUFYX0RFVl9OQU1FX0xFTiAzMgogCisjZGVmaW5lIENYSU9fRldfTUFKIDcKKwogc3RydWN0IGN4aW9faGFsX2N0cmxfcXAgewogCXUzMiB3cHRyOwogCXUzMiBycHRyOwpAQCAtMTA4LDYgKzExMCw5IEBACiAJc3RydWN0IGdlbl9wb29sICpwYmxfcG9vbDsKIAlzdHJ1Y3QgZ2VuX3Bvb2wgKnJxdF9wb29sOwogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJc3RydWN0IGNoX2VtYmVkZGVkX2luZm8gZndfaW5mbzsKKwl1MzIJZmxhZ3M7CisjZGVmaW5lCUNYSU9fRVJST1JfRkFUQUwJMQogfTsKIAogc3RhdGljIGlubGluZSBpbnQgY3hpb19udW1fc3RhZ3Moc3RydWN0IGN4aW9fcmRldiAqcmRldl9wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKaW5kZXggMDQ2MThmNy4uZmY5YmUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCkBAIC02MDQsNiArNjA0LDEyIEBACiAjZGVmaW5lIENRRV9TVEFUVVMoeCkgICAgIChHX0NRRV9TVEFUVVMoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpKQogI2RlZmluZSBDUUVfT1BDT0RFKHgpICAgICAoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSkKIAorI2RlZmluZSBDUUVfU0VORF9PUENPREUoeCkoIFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EKSB8fCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORF9XSVRIX1NFKSB8fCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORF9XSVRIX0lOVikgfHwgXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkRfV0lUSF9TRV9JTlYpKQorCiAjZGVmaW5lIENRRV9MRU4oeCkgICAgICAgIChiZTMyX3RvX2NwdSgoeCkubGVuKSkKIAogLyogdXNlZCBmb3IgUlEgY29tcGxldGlvbiBwcm9jZXNzaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwppbmRleCA0NDg5Yzg5Li4zN2E0ZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKQEAgLTUxLDEzICs1MSwxNSBAQAogCiBzdGF0aWMgdm9pZCBvcGVuX3JuaWNfZGV2KHN0cnVjdCB0M2NkZXYgKik7CiBzdGF0aWMgdm9pZCBjbG9zZV9ybmljX2RldihzdHJ1Y3QgdDNjZGV2ICopOworc3RhdGljIHZvaWQgaXdjaF9lcnJfaGFuZGxlcihzdHJ1Y3QgdDNjZGV2ICosIHUzMiwgdTMyKTsKIAogc3RydWN0IGN4Z2IzX2NsaWVudCB0M2NfY2xpZW50ID0gewogCS5uYW1lID0gIml3X2N4Z2IzIiwKIAkuYWRkID0gb3Blbl9ybmljX2RldiwKIAkucmVtb3ZlID0gY2xvc2Vfcm5pY19kZXYsCiAJLmhhbmRsZXJzID0gdDNjX2hhbmRsZXJzLAotCS5yZWRpcmVjdCA9IGl3Y2hfZXBfcmVkaXJlY3QKKwkucmVkaXJlY3QgPSBpd2NoX2VwX3JlZGlyZWN0LAorCS5lcnJfaGFuZGxlciA9IGl3Y2hfZXJyX2hhbmRsZXIKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQoZGV2X2xpc3QpOwpAQCAtMTYwLDYgKzE2MiwxNyBAQAogCW11dGV4X3VubG9jaygmZGV2X211dGV4KTsKIH0KIAorc3RhdGljIHZvaWQgaXdjaF9lcnJfaGFuZGxlcihzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCB1MzIgc3RhdHVzLCB1MzIgZXJyb3IpCit7CisJc3RydWN0IGN4aW9fcmRldiAqcmRldiA9IHRkZXYtPnVscDsKKworCWlmIChzdGF0dXMgPT0gT0ZGTE9BRF9TVEFUVVNfRE9XTikKKwkJcmRldi0+ZmxhZ3MgPSBDWElPX0VSUk9SX0ZBVEFMOworCisJcmV0dXJuOworCit9CisKIHN0YXRpYyBpbnQgX19pbml0IGl3Y2hfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKaW5kZXggNDRlOTM2ZS4uODY5OTk0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCkBAIC0xNjc4LDYgKzE2NzgsOSBAQAogewogCXN0cnVjdCBpd2NoX2VwICplcCA9IGN0eDsKIAorCWlmIChzdGF0ZV9yZWFkKCZlcC0+Y29tKSAhPSBGUERVX01PREUpCisJCXJldHVybiBDUExfUkVUX0JVRl9ET05FOworCiAJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7CiAJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGNwbF9yZG1hX3Rlcm1pbmF0ZSkpOwogCVBEQkcoIiVzIHNhdmluZyAlZCBieXRlcyBvZiB0ZXJtIG1zZ1xuIiwgX19mdW5jX18sIHNrYi0+bGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCmluZGV4IDdiNjdhNjcuLjc0M2M1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYwpAQCAtMTc5LDExICsxNzksNiBAQAogCWNhc2UgVFBUX0VSUl9CT1VORDoKIAljYXNlIFRQVF9FUlJfSU5WQUxJREFURV9TSEFSRURfTVI6CiAJY2FzZSBUUFRfRVJSX0lOVkFMSURBVEVfTVJfV0lUSF9NV19CT1VORDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAtIENRRSBFcnIgcXBpZCAweCV4IG9wY29kZSAlZCBzdGF0dXMgMHgleCAiCi0JCSAgICAgICAidHlwZSAlZCB3cmlkLmhpIDB4JXggd3JpZC5sbyAweCV4IFxuIiwgX19mdW5jX18sCi0JCSAgICAgICBDUUVfUVBJRChyc3BfbXNnLT5jcWUpLCBDUUVfT1BDT0RFKHJzcF9tc2ctPmNxZSksCi0JCSAgICAgICBDUUVfU1RBVFVTKHJzcF9tc2ctPmNxZSksIENRRV9UWVBFKHJzcF9tc2ctPmNxZSksCi0JCSAgICAgICBDUUVfV1JJRF9ISShyc3BfbXNnLT5jcWUpLCBDUUVfV1JJRF9MT1cocnNwX21zZy0+Y3FlKSk7CiAJCSgqY2hwLT5pYmNxLmNvbXBfaGFuZGxlcikoJmNocC0+aWJjcSwgY2hwLT5pYmNxLmNxX2NvbnRleHQpOwogCQlwb3N0X3FwX2V2ZW50KHJuaWNwLCBjaHAsIHJzcF9tc2csIElCX0VWRU5UX1FQX0FDQ0VTU19FUlIsIDEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IDE5NjYxYjIuLmM3NThmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtOTksOCArOTksOCBAQAogCWlmICh3ci0+b3Bjb2RlID09IElCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU0pIHsKIAkJcGxlbiA9IDQ7CiAJCXdxZS0+d3JpdGUuc2dsWzBdLnN0YWcgPSB3ci0+ZXguaW1tX2RhdGE7Ci0JCXdxZS0+d3JpdGUuc2dsWzBdLmxlbiA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMCk7Ci0JCXdxZS0+d3JpdGUubnVtX3NnbGUgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDApOworCQl3cWUtPndyaXRlLnNnbFswXS5sZW4gPSBjcHVfdG9fYmUzMigwKTsKKwkJd3FlLT53cml0ZS5udW1fc2dsZSA9IGNwdV90b19iZTMyKDApOwogCQkqZmxpdF9jbnQgPSA2OwogCX0gZWxzZSB7CiAJCXBsZW4gPSAwOwpAQCAtMTk1LDE1ICsxOTUsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRCRDogdGhpcyBpcyBnb2luZyB0byBiZSBtb3ZlZCB0byBmaXJtd2FyZS4gTWlzc2luZyBwZGlkL3FwaWQgY2hlY2sgZm9yIG5vdy4KLSAqLwogc3RhdGljIGludCBpd2NoX3NnbDJwYmxfbWFwKHN0cnVjdCBpd2NoX2RldiAqcmhwLCBzdHJ1Y3QgaWJfc2dlICpzZ19saXN0LAogCQkJICAgIHUzMiBudW1fc2dsZSwgdTMyICogcGJsX2FkZHIsIHU4ICogcGFnZV9zaXplKQogewogCWludCBpOwogCXN0cnVjdCBpd2NoX21yICptaHA7Ci0JdTMyIG9mZnNldDsKKwl1NjQgb2Zmc2V0OwogCWZvciAoaSA9IDA7IGkgPCBudW1fc2dsZTsgaSsrKSB7CiAKIAkJbWhwID0gZ2V0X21ocChyaHAsIChzZ19saXN0W2ldLmxrZXkpID4+IDgpOwpAQCAtMjM1LDggKzIzMiw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlvZmZzZXQgPSBzZ19saXN0W2ldLmFkZHIgLSBtaHAtPmF0dHIudmFfZmJvOwotCQlvZmZzZXQgKz0gKCh1MzIpIG1ocC0+YXR0ci52YV9mYm8pICUKLQkJICAgICAgICAgICgxVUwgPDwgKDEyICsgbWhwLT5hdHRyLnBhZ2Vfc2l6ZSkpOworCQlvZmZzZXQgKz0gbWhwLT5hdHRyLnZhX2ZibyAmCisJCQkgICgoMVVMIDw8ICgxMiArIG1ocC0+YXR0ci5wYWdlX3NpemUpKSAtIDEpOwogCQlwYmxfYWRkcltpXSA9ICgobWhwLT5hdHRyLnBibF9hZGRyIC0KIAkJCSAgICAgICAgcmhwLT5yZGV2LnJuaWNfaW5mby5wYmxfYmFzZSkgPj4gMykgKwogCQkJICAgICAgKG9mZnNldCA+PiAoMTIgKyBtaHAtPmF0dHIucGFnZV9zaXplKSk7CkBAIC0yNjYsOCArMjYzLDggQEAKIAkJd3FlLT5yZWN2LnNnbFtpXS5sZW4gPSBjcHVfdG9fYmUzMih3ci0+c2dfbGlzdFtpXS5sZW5ndGgpOwogCiAJCS8qIHRvIGluIHRoZSBXUUUgPT0gdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlICovCi0JCXdxZS0+cmVjdi5zZ2xbaV0udG8gPSBjcHVfdG9fYmU2NCgoKHUzMikgd3ItPnNnX2xpc3RbaV0uYWRkcikgJQotCQkJCSgxVUwgPDwgKDEyICsgcGFnZV9zaXplW2ldKSkpOworCQl3cWUtPnJlY3Yuc2dsW2ldLnRvID0gY3B1X3RvX2JlNjQoKCh1MzIpd3ItPnNnX2xpc3RbaV0uYWRkcikgJgorCQkJCSgoMVVMIDw8ICgxMiArIHBhZ2Vfc2l6ZVtpXSkpIC0gMSkpOwogCiAJCS8qIHBibF9hZGRyIGlzIHRoZSBhZGFwdGVycyBhZGRyZXNzIGluIHRoZSBQQkwgKi8KIAkJd3FlLT5yZWN2LnBibF9hZGRyW2ldID0gY3B1X3RvX2JlMzIocGJsX2FkZHJbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKaW5kZXggNDQ0NDdhYS4uYzU2OGIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCkBAIC00NiwxMSArNDYsMTEgQEAKICNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgogI2luY2x1ZGUgImhjcF9pZi5oIgogCi0jZGVmaW5lIElCX01BRF9TVEFUVVNfUkVESVJFQ1QJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9NQURfU1RBVFVTX1VOU1VQX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX01BRF9TVEFUVVNfVU5TVVBfTUVUSE9ECV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQorI2RlZmluZSBJQl9NQURfU1RBVFVTX1JFRElSRUNUCQljcHVfdG9fYmUxNigweDAwMDIpCisjZGVmaW5lIElCX01BRF9TVEFUVVNfVU5TVVBfVkVSU0lPTgljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX01BRF9TVEFUVVNfVU5TVVBfTUVUSE9ECWNwdV90b19iZTE2KDB4MDAwOCkKIAotI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJY3B1X3RvX2JlMTYoMHgwMDAxKQogCiAvKioKICAqIGVoY2FfZGVmaW5lX3NxcCAtIERlZmluZXMgc3BlY2lhbCBxdWV1ZSBwYWlyIDEgKEdTSSBRUCkuIFdoZW4gc3BlY2lhbCBxdWV1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IDY5YzBjZTMuLmNiOWRhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTI3MTUsNyArMjcxNSw3IEBACiAgKiB0byBwcmV2ZW50IEhvTCBibG9ja2luZywgdGhlbiBzdGFydCB0aGUgSG9MIHRpbWVyIHRoYXQKICAqIHBlcmlvZGljYWxseSBjb250aW51ZXMsIHRoZW4gc3RvcCBwcm9jcywgc28gdGhleSBjYW4gZGV0ZWN0CiAgKiBsaW5rIGRvd24gaWYgdGhleSB3YW50LCBhbmQgZG8gc29tZXRoaW5nIGFib3V0IGl0LgotICogVGltZXIgbWF5IGFscmVhZHkgYmUgcnVubmluZywgc28gdXNlIF9fbW9kX3RpbWVyLCBub3QgYWRkX3RpbWVyLgorICogVGltZXIgbWF5IGFscmVhZHkgYmUgcnVubmluZywgc28gdXNlIG1vZF90aW1lciwgbm90IGFkZF90aW1lci4KICAqLwogdm9pZCBpcGF0aF9ob2xfZG93bihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CkBAIC0yNzI0LDcgKzI3MjQsNyBAQAogCWRkLT5pcGF0aF9ob2xfbmV4dCA9IElQQVRIX0hPTF9ET1dOQ09OVDsKIAlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKIAkJbXNlY3NfdG9famlmZmllcyhpcGF0aF9ob2xfdGltZW91dF9tcyk7Ci0JX19tb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsIGRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyk7CisJbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLCBkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMpOwogfQogCiAvKgpAQCAtMjc2Myw3ICsyNzYzLDcgQEAKIAllbHNlIHsKIAkJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzID0gamlmZmllcyArCiAJCQltc2Vjc190b19qaWZmaWVzKGlwYXRoX2hvbF90aW1lb3V0X21zKTsKLQkJX19tb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsCisJCW1vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwKIAkJCWRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCmluZGV4IGRjMzcyNzcuLmZjNzE4MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKQEAgLTc3Miw4ICs3NzIsOCBAQAogCQkJICIweCV4LCBub3QgMHgleFxuIiwgY3N1bSwgaWZwLT5pZl9jc3VtKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IDBVTEwgfHwKLQkgICAgKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoLTFMTCkpIHsKKwlpZiAoKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IGNwdV90b19iZTY0KDApIHx8CisJICAgICooX19iZTY0ICopIGlmcC0+aWZfZ3VpZCA9PSB+Y3B1X3RvX2JlNjQoMCkpIHsKIAkJaXBhdGhfZGV2X2VycihkZCwgIkludmFsaWQgR1VJRCAlbGx4IGZyb20gZmxhc2g7ICIKIAkJCSAgICAgICJpZ25vcmluZ1xuIiwKIAkJCSAgICAgICoodW5zaWduZWQgbG9uZyBsb25nICopIGlmcC0+aWZfZ3VpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKaW5kZXggNjRhZWVmYi4uMDc3ODc5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJaWYgKCFhZGRycykgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIGFsbG9jYXRlIHNoYWRvdyBkbWEgaGFuZGxlICIKIAkJCSAgICAgICJhcnJheSwgbm8gZXhwZWN0ZWQgc2VuZHMhXG4iKTsKLQkJdmZyZWUoZGQtPmlwYXRoX3BhZ2VzaGFkb3cpOworCQl2ZnJlZShwYWdlcyk7CiAJCWRkLT5pcGF0aF9wYWdlc2hhZG93ID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwppbmRleCAxN2ExMjMxLi4xNmE3MDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCkBAIC0zNywxMCArMzcsMTAgQEAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCi0jZGVmaW5lIElCX1NNUF9VTlNVUF9WRVJTSU9OCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSE9ECV9fY29uc3RhbnRfaHRvbnMoMHgwMDA4KQotI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSCV9fY29uc3RhbnRfaHRvbnMoMHgwMDBDKQotI2RlZmluZSBJQl9TTVBfSU5WQUxJRF9GSUVMRAlfX2NvbnN0YW50X2h0b25zKDB4MDAxQykKKyNkZWZpbmUgSUJfU01QX1VOU1VQX1ZFUlNJT04JY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSE9ECWNwdV90b19iZTE2KDB4MDAwOCkKKyNkZWZpbmUgSUJfU01QX1VOU1VQX01FVEhfQVRUUgljcHVfdG9fYmUxNigweDAwMEMpCisjZGVmaW5lIElCX1NNUF9JTlZBTElEX0ZJRUxECWNwdV90b19iZTE2KDB4MDAxQykKIAogc3RhdGljIGludCByZXBseShzdHJ1Y3QgaWJfc21wICpzbXApCiB7CkBAIC03ODksMTIgKzc4OSwxMiBAQAogCXJldHVybiByZWN2X3N1Ym5fZ2V0X3BrZXl0YWJsZShzbXAsIGliZGV2KTsKIH0KIAotI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19DT05UUk9MCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxMSkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQotI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSU19FWFQJX19jb25zdGFudF9odG9ucygweDAwMUQpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUX0VYVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxRSkKKyNkZWZpbmUgSUJfUE1BX0NMQVNTX1BPUlRfSU5GTwkJY3B1X3RvX2JlMTYoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX0NPTlRST0wJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX1JFU1VMVAljcHVfdG9fYmUxNigweDAwMTEpCisjZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTCQljcHVfdG9fYmUxNigweDAwMTIpCisjZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTX0VYVAljcHVfdG9fYmUxNigweDAwMUQpCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUX0VYVAljcHVfdG9fYmUxNigweDAwMUUpCiAKIHN0cnVjdCBpYl9wZXJmIHsKIAl1OCBiYXNlX3ZlcnNpb247CkBAIC04ODQsMTkgKzg4NCwxOSBAQAogCV9fYmUzMiBwb3J0X3Jjdl9wYWNrZXRzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSUJfUE1BX1NFTF9TWU1CT0xfRVJST1IJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKLSNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0VSUk9SX1JFQ09WRVJZCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0RPV05FRAkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX0VSUk9SUwkJX19jb25zdGFudF9odG9ucygweDAwMDgpCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUkVNUEhZU19FUlJPUlMJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RJU0NBUkRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDA0MCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9MT0NBTF9MSU5LX0lOVEVHUklUWV9FUlJPUlMJX19jb25zdGFudF9odG9ucygweDAyMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfRVhDRVNTSVZFX0JVRkZFUl9PVkVSUlVOUwlfX2NvbnN0YW50X2h0b25zKDB4MDQwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1ZMMTVfRFJPUFBFRAkJX19jb25zdGFudF9odG9ucygweDA4MDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgxMDAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgyMDAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4NDAwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9TWU1CT0xfRVJST1IJCQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9TRUxfTElOS19FUlJPUl9SRUNPVkVSWQkJY3B1X3RvX2JlMTYoMHgwMDAyKQorI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRE9XTkVECQkJY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX0VSUk9SUwkJY3B1X3RvX2JlMTYoMHgwMDA4KQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1JFTVBIWVNfRVJST1JTCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMJCWNwdV90b19iZTE2KDB4MDA0MCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9MT0NBTF9MSU5LX0lOVEVHUklUWV9FUlJPUlMJY3B1X3RvX2JlMTYoMHgwMjAwKQorI2RlZmluZSBJQl9QTUFfU0VMX0VYQ0VTU0lWRV9CVUZGRVJfT1ZFUlJVTlMJY3B1X3RvX2JlMTYoMHgwNDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfVkwxNV9EUk9QUEVECQljcHVfdG9fYmUxNigweDA4MDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX0RBVEEJCWNwdV90b19iZTE2KDB4MTAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9EQVRBCQljcHVfdG9fYmUxNigweDIwMDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX1BBQ0tFVFMJCWNwdV90b19iZTE2KDB4NDAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9QQUNLRVRTCQljcHVfdG9fYmUxNigweDgwMDApCiAKIHN0cnVjdCBpYl9wbWFfcG9ydGNvdW50ZXJzX2V4dCB7CiAJdTggcmVzZXJ2ZWQ7CkBAIC05MTMsMTQgKzkxMywxNCBAQAogCV9fYmU2NCBwb3J0X211bHRpY2FzdF9yY3ZfcGFja2V0czsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMSkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfREFUQQkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfUEFDS0VUUwkJX19jb25zdGFudF9odG9ucygweDAwMDgpCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfVU5JX1hNSVRfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfUkNWX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwMjApCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfWE1JVF9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDQwKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1JDVl9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDgwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1hNSVRfREFUQQkJY3B1X3RvX2JlMTYoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9EQVRBCQljcHVfdG9fYmUxNigweDAwMDIpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9QQUNLRVRTCQljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX1BBQ0tFVFMJCWNwdV90b19iZTE2KDB4MDAwOCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfWE1JVF9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDAxMCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfUkNWX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDIwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX01VTFRJX1hNSVRfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwNDApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfUkNWX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDgwKQogCiBzdGF0aWMgaW50IHJlY3ZfcG1hX2dldF9jbGFzc3BvcnRpbmZvKHN0cnVjdCBpYl9wZXJmICpwbXApCiB7CkBAIC05MzMsNyArOTMzLDcgQEAKIAkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAKIAkvKiBJbmRpY2F0ZSBBbGxQb3J0U2VsZWN0IGlzIHZhbGlkIChvbmx5IG9uZSBwb3J0IGFueXdheSkgKi8KLQlwLT5jYXBfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMSA8PCA4KTsKKwlwLT5jYXBfbWFzayA9IGNwdV90b19iZTE2KDEgPDwgOCk7CiAJcC0+YmFzZV92ZXJzaW9uID0gMTsKIAlwLT5jbGFzc192ZXJzaW9uID0gMTsKIAkvKgpAQCAtOTUxLDEyICs5NTEsMTEgQEAKICAqIFdlIHN1cHBvcnQgNSBjb3VudGVycyB3aGljaCBvbmx5IGNvdW50IHRoZSBtYW5kYXRvcnkgcXVhbnRpdGllcy4KICAqLwogI2RlZmluZSBDT1VOVEVSX01BU0socSwgbikgKHEgPDwgKCg5IC0gbikgKiAzKSkKLSNkZWZpbmUgQ09VTlRFUl9NQVNLMF85IFwKLQlfX2NvbnN0YW50X2NwdV90b19iZTMyKENPVU5URVJfTUFTSygxLCAwKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMSkgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDIpIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAzKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgNCkpCisjZGVmaW5lIENPVU5URVJfTUFTSzBfOSBjcHVfdG9fYmUzMihDT1VOVEVSX01BU0soMSwgMCkgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCAxKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDIpIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgMykgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCA0KSkKIAogc3RhdGljIGludCByZWN2X3BtYV9nZXRfcG9ydHNhbXBsZXNjb250cm9sKHN0cnVjdCBpYl9wZXJmICpwbXAsCiAJCQkJCSAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQpAQCAtMTEzNyw3ICsxMTM2LDcgQEAKIAkJc3RhdHVzID0gZGV2LT5wbWFfc2FtcGxlX3N0YXR1czsKIAlwLT5zYW1wbGVfc3RhdHVzID0gY3B1X3RvX2JlMTYoc3RhdHVzKTsKIAkvKiA2NCBiaXRzICovCi0JcC0+ZXh0ZW5kZWRfd2lkdGggPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4ODAwMDAwMDApOworCXAtPmV4dGVuZGVkX3dpZHRoID0gY3B1X3RvX2JlMzIoMHg4MDAwMDAwMCk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2LT5wbWFfY291bnRlcl9zZWxlY3QpOyBpKyspCiAJCXAtPmNvdW50ZXJbaV0gPSAoc3RhdHVzICE9IElCX1BNQV9TQU1QTEVfU1RBVFVTX0RPTkUpID8gMCA6CiAJCSAgICBjcHVfdG9fYmU2NCgKQEAgLTExODUsNyArMTE4NCw3IEBACiAJCXBtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCiAJaWYgKGNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyID4gMHhGRkZGVUwpCi0JCXAtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5zeW1ib2xfZXJyb3JfY291bnRlciA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5zeW1ib2xfZXJyb3JfY291bnRlciA9CiAJCQljcHVfdG9fYmUxNigodTE2KWNudHJzLnN5bWJvbF9lcnJvcl9jb3VudGVyKTsKQEAgLTExOTksMTcgKzExOTgsMTcgQEAKIAllbHNlCiAJCXAtPmxpbmtfZG93bmVkX2NvdW50ZXIgPSAodTgpY250cnMubGlua19kb3duZWRfY291bnRlcjsKIAlpZiAoY250cnMucG9ydF9yY3ZfZXJyb3JzID4gMHhGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X2Vycm9ycyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfZXJyb3JzID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X2Vycm9ycyA9CiAJCQljcHVfdG9fYmUxNigodTE2KSBjbnRycy5wb3J0X3Jjdl9lcnJvcnMpOwogCWlmIChjbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA+IDB4RkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPQogCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyk7CiAJaWYgKGNudHJzLnBvcnRfeG1pdF9kaXNjYXJkcyA+IDB4RkZGRlVMKQotCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnBvcnRfeG1pdF9kaXNjYXJkcyA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3htaXRfZGlzY2FyZHMgPQogCQkJY3B1X3RvX2JlMTYoKHUxNiljbnRycy5wb3J0X3htaXRfZGlzY2FyZHMpOwpAQCAtMTIyMCwyNCArMTIxOSwyNCBAQAogCXAtPmxsaV9lYm9yX2Vycm9ycyA9IChjbnRycy5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgPDwgNCkgfAogCQljbnRycy5leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzOwogCWlmIChjbnRycy52bDE1X2Ryb3BwZWQgPiAweEZGRkZVTCkKLQkJcC0+dmwxNV9kcm9wcGVkID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT52bDE1X2Ryb3BwZWQgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+dmwxNV9kcm9wcGVkID0gY3B1X3RvX2JlMTYoKHUxNiljbnRycy52bDE1X2Ryb3BwZWQpOwogCWlmIChjbnRycy5wb3J0X3htaXRfZGF0YSA+IDB4RkZGRkZGRkZVTCkKLQkJcC0+cG9ydF94bWl0X2RhdGEgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCQlwLT5wb3J0X3htaXRfZGF0YSA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF94bWl0X2RhdGEgPSBjcHVfdG9fYmUzMigodTMyKWNudHJzLnBvcnRfeG1pdF9kYXRhKTsKIAlpZiAoY250cnMucG9ydF9yY3ZfZGF0YSA+IDB4RkZGRkZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfZGF0YSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfcmN2X2RhdGEgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X2RhdGEgPSBjcHVfdG9fYmUzMigodTMyKWNudHJzLnBvcnRfcmN2X2RhdGEpOwogCWlmIChjbnRycy5wb3J0X3htaXRfcGFja2V0cyA+IDB4RkZGRkZGRkZVTCkKLQkJcC0+cG9ydF94bWl0X3BhY2tldHMgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF94bWl0X3BhY2tldHMgPQogCQkJY3B1X3RvX2JlMzIoKHUzMiljbnRycy5wb3J0X3htaXRfcGFja2V0cyk7CiAJaWYgKGNudHJzLnBvcnRfcmN2X3BhY2tldHMgPiAweEZGRkZGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X3BhY2tldHMgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDB4RkZGRkZGRkYpOworCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9wYWNrZXRzID0KIAkJCWNwdV90b19iZTMyKCh1MzIpIGNudHJzLnBvcnRfcmN2X3BhY2tldHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwppbmRleCA5MTcwNzEwLi43OWIzZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAKIAkJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLwogCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJCSAgICAgICAob2hkci0+YnRoWzBdICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJCQljcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jCmluZGV4IDhlMjU1YWQuLjRiMDY5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYwpAQCAtNzgxLDEwICs3ODEsMTAgQEAKIAkJZGVzY3FwID0gJmRkLT5pcGF0aF9zZG1hX2Rlc2NxW2RkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudF0ucXdbMF07CiAJZGVzY3FwIC09IDI7CiAJLyogU0RtYUxhc3REZXNjICovCi0JZGVzY3FwWzBdIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSk7CisJZGVzY3FwWzBdIHw9IGNwdV90b19sZTY0KDFVTEwgPDwgMTEpOwogCWlmICh0eC0+dHhyZXEuZmxhZ3MgJiBJUEFUSF9TRE1BX1RYUkVRX0ZfSU5UUkVRKSB7CiAJCS8qIFNEbWFJbnRSZXEgKi8KLQkJZGVzY3FwWzBdIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxNSk7CisJCWRlc2NxcFswXSB8PSBjcHVfdG9fbGU2NCgxVUxMIDw8IDE1KTsKIAl9CiAKIAkvKiBDb21taXQgd3JpdGVzIHRvIG1lbW9yeSBhbmQgYWR2YW5jZSB0aGUgdGFpbCBvbiB0aGUgY2hpcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYwppbmRleCA4MmNjNTg4Li4yMmU2MDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KIAkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCiAJCQkgICAgICAgKG9oZHItPmJ0aFswXSAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCQkJY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOwogCQlicmVhazsKIAogCWNhc2UgT1AoUkRNQV9XUklURV9GSVJTVCk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCmluZGV4IDkxYzc0Y2MuLjYwNzZjYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkgKi8KIAlvaGRyLT5idGhbMV0gPSBhaF9hdHRyLT5kbGlkID49IElQQVRIX01VTFRJQ0FTVF9MSURfQkFTRSAmJgogCQlhaF9hdHRyLT5kbGlkICE9IElQQVRIX1BFUk1JU1NJVkVfTElEID8KLQkJX19jb25zdGFudF9jcHVfdG9fYmUzMihJUEFUSF9NVUxUSUNBU1RfUVBOKSA6CisJCWNwdV90b19iZTMyKElQQVRIX01VTFRJQ0FTVF9RUE4pIDoKIAkJY3B1X3RvX2JlMzIod3FlLT53ci53ci51ZC5yZW1vdGVfcXBuKTsKIAlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+c19uZXh0X3BzbisrICYgSVBBVEhfUFNOX01BU0spOwogCS8qCkBAIC01NzMsNyArNTczLDcgQEAKIAkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsCiAJCSAgICAgICAob2hkci0+YnRoWzBdICYKLQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQkJY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOwogCiBiYWlsOjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCmluZGV4IDAxOTBlZGMuLjg1NTkxMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpAQCAtMjA5LDIwICsyMDksMjAgQEAKIAogCW1tID0gZ2V0X3Rhc2tfbW0oY3VycmVudCk7CiAJaWYgKCFtbSkKLQkJZ290byBiYWlsOworCQlyZXR1cm47CiAKIAl3b3JrID0ga21hbGxvYyhzaXplb2YoKndvcmspLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXdvcmspCiAJCWdvdG8gYmFpbF9tbTsKIAotCWdvdG8gYmFpbDsKLQogCUlOSVRfV09SSygmd29yay0+d29yaywgdXNlcl9wYWdlc19hY2NvdW50KTsKIAl3b3JrLT5tbSA9IG1tOwogCXdvcmstPm51bV9wYWdlcyA9IG51bV9wYWdlczsKIAorCXNjaGVkdWxlX3dvcmsoJndvcmstPndvcmspOworCXJldHVybjsKKwogYmFpbF9tbToKIAltbXB1dChtbSk7Ci1iYWlsOgogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwppbmRleCA4MmQ5YTBiLi43YmZmNGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCkBAIC02NjcsMTMgKzY2NywxMyBAQAogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCBpcGF0aF9zZG1hX21ha2VfZmlyc3RfZGVzYzAoX19sZTY0IGRlc2NxKQogewotCXJldHVybiBkZXNjcSB8IF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxMik7CisJcmV0dXJuIGRlc2NxIHwgY3B1X3RvX2xlNjQoMVVMTCA8PCAxMik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19sZTY0IGlwYXRoX3NkbWFfbWFrZV9sYXN0X2Rlc2MwKF9fbGU2NCBkZXNjcSkKIHsKIAkJCQkJICAgICAgLyogbGFzdCAqLyAgLyogZG1hIGhlYWQgKi8KLQlyZXR1cm4gZGVzY3EgfCBfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTEgfCAxVUxMIDw8IDEzKTsKKwlyZXR1cm4gZGVzY3EgfCBjcHVfdG9fbGU2NCgxVUxMIDw8IDExIHwgMVVMTCA8PCAxMyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19sZTY0IGlwYXRoX3NkbWFfbWFrZV9kZXNjMSh1NjQgYWRkcikKQEAgLTc2Myw3ICs3NjMsNyBAQAogCQlpZiAob2ZzID49IElQQVRIX1NNQUxMQlVGX0RXT1JEUykgewogCQkJZm9yIChpID0gMDsgaSA8IHBrdC0+bmFkZHI7IGkrKykgewogCQkJCWRkLT5pcGF0aF9zZG1hX2Rlc2NxW2R0YWlsXS5xd1swXSB8PQotCQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTY0KDFVTEwgPDwgMTQpOworCQkJCQljcHVfdG9fbGU2NCgxVUxMIDw8IDE0KTsKIAkJCQlpZiAoKytkdGFpbCA9PSBkZC0+aXBhdGhfc2RtYV9kZXNjcV9jbnQpCiAJCQkJCWR0YWlsID0gMDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKaW5kZXggY2RmMGU2YS4uOTI4OWFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMKQEAgLTE1ODUsNyArMTU4NSw3IEBACiAJdTY0IGliY3N0YXQ7CiAKIAltZW1zZXQocHJvcHMsIDAsIHNpemVvZigqcHJvcHMpKTsKLQlwcm9wcy0+bGlkID0gbGlkID8gbGlkIDogX19jb25zdGFudF9iZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CisJcHJvcHMtPmxpZCA9IGxpZCA/IGxpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKIAlwcm9wcy0+bG1jID0gZGQtPmlwYXRoX2xtYzsKIAlwcm9wcy0+c21fbGlkID0gZGV2LT5zbV9saWQ7CiAJcHJvcHMtPnNtX3NsID0gZGV2LT5zbV9zbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKaW5kZXggMTFlM2Y2MS4uYWU2Y2ZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKQEAgLTg2LDExICs4NiwxMSBAQAogI2RlZmluZSBJQl9QTUFfU0FNUExFX1NUQVRVU19SVU5OSU5HCTB4MDIKIAogLyogTWFuZGF0b3J5IElCIHBlcmZvcm1hbmNlIGNvdW50ZXIgc2VsZWN0IHZhbHVlcy4gKi8KLSNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9EQVRBCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfUE9SVF9SQ1ZfREFUQQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9QS1RTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAzKQotI2RlZmluZSBJQl9QTUFfUE9SVF9SQ1ZfUEtUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9XQUlUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA1KQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX0RBVEEJY3B1X3RvX2JlMTYoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfUE9SVF9SQ1ZfREFUQQljcHVfdG9fYmUxNigweDAwMDIpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfUEtUUwljcHVfdG9fYmUxNigweDAwMDMpCisjZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9QS1RTCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9XQUlUCWNwdV90b19iZTE2KDB4MDAwNSkKIAogc3RydWN0IGliX3JldGggewogCV9fYmU2NCB2YWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMKaW5kZXggNjA2ZjFlMi4uMTllNjhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMKQEAgLTE0Nyw3ICsxNDcsOCBAQAogICogU25vb3AgU00gTUFEcyBmb3IgcG9ydCBpbmZvIGFuZCBQX0tleSB0YWJsZSBzZXRzLCBzbyB3ZSBjYW4KICAqIHN5bnRoZXNpemUgTElEIGNoYW5nZSBhbmQgUF9LZXkgY2hhbmdlIGV2ZW50cy4KICAqLwotc3RhdGljIHZvaWQgc21wX3Nub29wKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0X251bSwgc3RydWN0IGliX21hZCAqbWFkKQorc3RhdGljIHZvaWQgc21wX3Nub29wKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0X251bSwgc3RydWN0IGliX21hZCAqbWFkLAorCQkJCXUxNiBwcmV2X2xpZCkKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAKQEAgLTE1Nyw2ICsxNTgsNyBAQAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CiAJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CiAJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisJCQl1MTYgbGlkID0gYmUxNl90b19jcHUocGluZm8tPmxpZCk7CiAKIAkJCXVwZGF0ZV9zbV9haCh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0sCiAJCQkJICAgICBiZTE2X3RvX2NwdShwaW5mby0+c21fbGlkKSwKQEAgLTE2NSwxMiArMTY3LDE1IEBACiAJCQlldmVudC5kZXZpY2UJICAgICAgID0gaWJkZXY7CiAJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydF9udW07CiAKLQkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApCisJCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKSB7CiAJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKLQkJCWVsc2UKLQkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCX0KIAotCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCWlmIChwcmV2X2xpZCAhPSBsaWQpIHsKKwkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCX0KIAkJfQogCiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFKSB7CkBAIC0yMjgsOCArMjMzLDkgQEAKIAkJCXN0cnVjdCBpYl93YyAqaW5fd2MsIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKIAkJCXN0cnVjdCBpYl9tYWQgKmluX21hZCwgc3RydWN0IGliX21hZCAqb3V0X21hZCkKIHsKLQl1MTYgc2xpZDsKKwl1MTYgc2xpZCwgcHJldl9saWQgPSAwOwogCWludCBlcnI7CisJc3RydWN0IGliX3BvcnRfYXR0ciBwYXR0cjsKIAogCXNsaWQgPSBpbl93YyA/IGluX3djLT5zbGlkIDogYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOwogCkBAIC0yNjMsNiArMjY5LDEzIEBACiAJfSBlbHNlCiAJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CiAKKwlpZiAoKGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9MSURfUk9VVEVEIHx8CisJICAgICBpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpICYmCisJICAgIGluX21hZC0+bWFkX2hkci5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfU0VUICYmCisJICAgIGluX21hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTyAmJgorCSAgICAhaWJfcXVlcnlfcG9ydChpYmRldiwgcG9ydF9udW0sICZwYXR0cikpCisJCXByZXZfbGlkID0gcGF0dHIubGlkOworCiAJZXJyID0gbWx4NF9NQURfSUZDKHRvX21kZXYoaWJkZXYpLAogCQkJICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLAogCQkJICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9CS0VZLApAQCAtMjcxLDcgKzI4NCw3IEBACiAJCXJldHVybiBJQl9NQURfUkVTVUxUX0ZBSUxVUkU7CiAKIAlpZiAoIW91dF9tYWQtPm1hZF9oZHIuc3RhdHVzKSB7Ci0JCXNtcF9zbm9vcChpYmRldiwgcG9ydF9udW0sIGluX21hZCk7CisJCXNtcF9zbm9vcChpYmRldiwgcG9ydF9udW0sIGluX21hZCwgcHJldl9saWQpOwogCQlub2RlX2Rlc2Nfb3ZlcnJpZGUoaWJkZXYsIG91dF9tYWQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCmluZGV4IDYxNTg4YmQuLjJjY2I5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKQEAgLTY5OSwxMSArNjk5LDEyIEBACiAJc3RydWN0IG1seDRfaWJfZGV2ICppYmRldiA9IGliZGV2X3B0cjsKIAlpbnQgcDsKIAorCW1seDRfaWJfbWFkX2NsZWFudXAoaWJkZXYpOworCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZpYmRldi0+aWJfZGV2KTsKKwogCWZvciAocCA9IDE7IHAgPD0gaWJkZXYtPm51bV9wb3J0czsgKytwKQogCQltbHg0X0NMT1NFX1BPUlQoZGV2LCBwKTsKIAotCW1seDRfaWJfbWFkX2NsZWFudXAoaWJkZXYpOwotCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZpYmRldi0+aWJfZGV2KTsKIAlpb3VubWFwKGliZGV2LT51YXJfbWFwKTsKIAltbHg0X3Vhcl9mcmVlKGRldiwgJmliZGV2LT5wcml2X3Vhcik7CiAJbWx4NF9wZF9mcmVlKGRldiwgaWJkZXYtPnByaXZfcGRuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCmluZGV4IGE5MWNiNGMuLmYzODVhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwpAQCAtNzEsMTcgKzcxLDE3IEBACiB9OwogCiBzdGF0aWMgY29uc3QgX19iZTMyIG1seDRfaWJfb3Bjb2RlW10gPSB7Ci0JW0lCX1dSX1NFTkRdCQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkQpLAotCVtJQl9XUl9MU09dCQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xTTyksCi0JW0lCX1dSX1NFTkRfV0lUSF9JTU1dCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTU0pLAotCVtJQl9XUl9SRE1BX1dSSVRFXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEUpLAotCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9XUklURV9JTU0pLAotCVtJQl9XUl9SRE1BX1JFQURdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9SRUFEKSwKLQlbSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0NTKSwKLQlbSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BRERdCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9BVE9NSUNfRkEpLAotCVtJQl9XUl9TRU5EX1dJVEhfSU5WXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU5WQUwpLAotCVtJQl9XUl9MT0NBTF9JTlZdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTE9DQUxfSU5WQUwpLAotCVtJQl9XUl9GQVNUX1JFR19NUl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9GTVIpLAorCVtJQl9XUl9TRU5EXQkJCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORCksCisJW0lCX1dSX0xTT10JCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xTTyksCisJW0lCX1dSX1NFTkRfV0lUSF9JTU1dCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKKwlbSUJfV1JfUkRNQV9XUklURV0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9XUklURSksCisJW0lCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU1dCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9XUklURV9JTU0pLAorCVtJQl9XUl9SRE1BX1JFQURdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfUkVBRCksCisJW0lCX1dSX0FUT01JQ19DTVBfQU5EX1NXUF0JPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9BVE9NSUNfQ1MpLAorCVtJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERF0JPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9BVE9NSUNfRkEpLAorCVtJQl9XUl9TRU5EX1dJVEhfSU5WXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lOVkFMKSwKKwlbSUJfV1JfTE9DQUxfSU5WXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MT0NBTF9JTlZBTCksCisJW0lCX1dSX0ZBU1RfUkVHX01SXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9GTVIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBtbHg0X2liX3NxcCAqdG9fbXNxcChzdHJ1Y3QgbWx4NF9pYl9xcCAqbXFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCmluZGV4IDY0MDQ0OTUuLjU2NDg2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKQEAgLTEwNCw3ICsxMDQsOCBAQAogICovCiBzdGF0aWMgdm9pZCBzbXBfc25vb3Aoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCiAJCSAgICAgIHU4IHBvcnRfbnVtLAotCQkgICAgICBzdHJ1Y3QgaWJfbWFkICptYWQpCisJCSAgICAgIHN0cnVjdCBpYl9tYWQgKm1hZCwKKwkJICAgICAgdTE2IHByZXZfbGlkKQogewogCXN0cnVjdCBpYl9ldmVudCBldmVudDsKIApAQCAtMTE0LDYgKzExNSw3IEBACiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8pIHsKIAkJCXN0cnVjdCBpYl9wb3J0X2luZm8gKnBpbmZvID0KIAkJCQkoc3RydWN0IGliX3BvcnRfaW5mbyAqKSAoKHN0cnVjdCBpYl9zbXAgKikgbWFkKS0+ZGF0YTsKKwkJCXUxNiBsaWQgPSBiZTE2X3RvX2NwdShwaW5mby0+bGlkKTsKIAogCQkJbXRoY2FfdXBkYXRlX3JhdGUodG9fbWRldihpYmRldiksIHBvcnRfbnVtKTsKIAkJCXVwZGF0ZV9zbV9haCh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0sCkBAIC0xMjMsMTIgKzEyNSwxNSBAQAogCQkJZXZlbnQuZGV2aWNlICAgICAgICAgICA9IGliZGV2OwogCQkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnRfbnVtOwogCi0JCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKQorCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkgewogCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVI7Ci0JCQllbHNlCi0JCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAKLQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQlpZiAocHJldl9saWQgIT0gbGlkKSB7CisJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOworCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCQl9CiAJCX0KIAogCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUEtFWV9UQUJMRSkgewpAQCAtMTk2LDYgKzIwMSw4IEBACiAJaW50IGVycjsKIAl1OCBzdGF0dXM7CiAJdTE2IHNsaWQgPSBpbl93YyA/IGluX3djLT5zbGlkIDogYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOworCXUxNiBwcmV2X2xpZCA9IDA7CisJc3RydWN0IGliX3BvcnRfYXR0ciBwYXR0cjsKIAogCS8qIEZvcndhcmQgbG9jYWxseSBnZW5lcmF0ZWQgdHJhcHMgdG8gdGhlIFNNICovCiAJaWYgKGluX21hZC0+bWFkX2hkci5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfVFJBUCAmJgpAQCAtMjMzLDYgKzI0MCwxMiBAQAogCQkJcmV0dXJuIElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKIAl9IGVsc2UKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKKwlpZiAoKGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9MSURfUk9VVEVEIHx8CisJICAgICBpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpICYmCisJICAgIGluX21hZC0+bWFkX2hkci5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfU0VUICYmCisJICAgIGluX21hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTyAmJgorCSAgICAhaWJfcXVlcnlfcG9ydChpYmRldiwgcG9ydF9udW0sICZwYXR0cikpCisJCXByZXZfbGlkID0gcGF0dHIubGlkOwogCiAJZXJyID0gbXRoY2FfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwKIAkJCSAgICBtYWRfZmxhZ3MgJiBJQl9NQURfSUdOT1JFX01LRVksCkBAIC0yNTIsNyArMjY1LDcgQEAKIAl9CiAKIAlpZiAoIW91dF9tYWQtPm1hZF9oZHIuc3RhdHVzKSB7Ci0JCXNtcF9zbm9vcChpYmRldiwgcG9ydF9udW0sIGluX21hZCk7CisJCXNtcF9zbm9vcChpYmRldiwgcG9ydF9udW0sIGluX21hZCwgcHJldl9saWQpOwogCQlub2RlX2Rlc2Nfb3ZlcnJpZGUoaWJkZXYsIG91dF9tYWQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKaW5kZXggYjk2MTFhZC4uY2E1OTk3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKaW5kZXggMTNhNWJiMS4uMDRiMTJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKaW5kZXggNGE2NWI5Ni4uNTI0MjUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0xMDMsNiArMTAzLDcgQEAKIHN0YXRpYyB2b2lkIG5lc19kaXNjb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdGF0aWMgaW50IHNlbmRfbXBhX3JlcXVlc3Qoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICopOworc3RhdGljIGludCBzZW5kX21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ub2RlICopOwogc3RhdGljIGludCBzZW5kX3N5bihzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgdTMyLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyBpbnQgc2VuZF9yZXNldChzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiBzdGF0aWMgaW50IHNlbmRfYWNrKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xMTMsOCArMTE0LDcgQEAKIHN0YXRpYyB2b2lkIGFjdGl2ZV9vcGVuX2VycihzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHBhc3NpdmVfb3Blbl9lcnIoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBzdGF0aWMgdm9pZCBjbGVhbnVwX3JldHJhbnNfZW50cnkoc3RydWN0IG5lc19jbV9ub2RlICopOwotc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICosIHN0cnVjdCBza19idWZmICosCi0JZW51bSBuZXNfY21fZXZlbnRfdHlwZSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiBzdGF0aWMgdm9pZCBmcmVlX3JldHJhbnNfZW50cnkoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKTsKIHN0YXRpYyBpbnQgaGFuZGxlX3RjcF9vcHRpb25zKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHRjcGhkciAqdGNwaCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0aW9uc2l6ZSwgaW50IHBhc3NpdmUpOwpAQCAtMTI0LDYgKzEyNCw4IEBACiBzdGF0aWMgdm9pZCBjbV9ldmVudF9jb25uZWN0X2Vycm9yKHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CiBzdGF0aWMgdm9pZCBjbV9ldmVudF9yZXNldChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOwogc3RhdGljIHZvaWQgY21fZXZlbnRfbXBhX3JlcShzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOworc3RhdGljIHZvaWQgY21fZXZlbnRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX2V2ZW50ICopOworc3RhdGljIHZvaWQgaGFuZGxlX3JlY3ZfZW50cnkoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1MzIgcmVtX25vZGUpOwogCiBzdGF0aWMgdm9pZCBwcmludF9jb3JlKHN0cnVjdCBuZXNfY21fY29yZSAqY29yZSk7CiAKQEAgLTE5Niw3ICsxOTgsNiBAQAogICovCiBzdGF0aWMgaW50IHNlbmRfbXBhX3JlcXVlc3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByZXQ7CiAJaWYgKCFza2IpIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJza2Igc2V0IHRvIE5VTExcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yMDYsMTEgKzIwNywyNyBAQAogCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCAmY21fbm9kZS0+bXBhX2ZyYW1lLAogCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsIFNFVF9BQ0spOwogCi0JcmV0ID0gc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIHNrYiwgTkVTX1RJTUVSX1RZUEVfU0VORCwgMSwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJcmV0dXJuIHNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBza2IsIE5FU19USU1FUl9UWVBFX1NFTkQsIDEsIDApOworfQogCi0JcmV0dXJuIDA7CisKKworc3RhdGljIGludCBzZW5kX21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQoreworCXN0cnVjdCBza19idWZmICAqc2tiID0gTlVMTDsKKworCXNrYiA9IGRldl9hbGxvY19za2IoTUFYX0NNX0JVRkZFUik7CisJaWYgKCFza2IpIHsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJGYWlsZWQgdG8gZ2V0IGEgRnJlZSBwa3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzZW5kIGFuIE1QQSByZWplY3QgZnJhbWUgKi8KKwlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgJmNtX25vZGUtPm1wYV9mcmFtZSwKKwkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLCBTRVRfQUNLIHwgU0VUX0ZJTik7CisKKwljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9GSU5fV0FJVDE7CisJcmV0dXJuIHNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBza2IsIE5FU19USU1FUl9UWVBFX1NFTkQsIDEsIDApOwogfQogCiAKQEAgLTIxOCwxNCArMjM1LDE3IEBACiAgKiByZWN2X21wYSAtIHByb2Nlc3MgYSByZWNlaXZlZCBUQ1AgcGt0LCB3ZSBhcmUgZXhwZWN0aW5nIGFuCiAgKiBJRVRGIE1QQSBmcmFtZQogICovCi1zdGF0aWMgaW50IHBhcnNlX21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHU4ICpidWZmZXIsIHUzMiBsZW4pCitzdGF0aWMgaW50IHBhcnNlX21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHU4ICpidWZmZXIsIHUzMiAqdHlwZSwKKwkJdTMyIGxlbikKIHsKIAlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKm1wYV9mcmFtZTsKIAorCSp0eXBlID0gTkVTX01QQV9SRVFVRVNUX0FDQ0VQVDsKKwogCS8qIGFzc3VtZSByZXEgZnJhbWUgaXMgaW4gdGNwIGRhdGEgcGF5bG9hZCAqLwogCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSkgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBpZXRmIGJ1ZmZlciB3YXMgdG9vIHNtYWxsICgleClcbiIsIGxlbik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbXBhX2ZyYW1lID0gKHN0cnVjdCBpZXRmX21wYV9mcmFtZSAqKWJ1ZmZlcjsKQEAgLTIzNCwxNCArMjU0LDI1IEBACiAJaWYgKGNtX25vZGUtPm1wYV9mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkgIT0gbGVuKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiVGhlIHJlY2VpdmVkIGlldGYgYnVmZmVyIHdhcyBub3QgcmlnaHQiCiAJCQkJIiBjb21wbGV0ZSAoJXggKyAleCAhPSAleClcbiIsCi0JCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsICh1MzIpc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSksIGxlbik7Ci0JCXJldHVybiAtMTsKKwkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwKKwkJCQkodTMyKXNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogbWFrZSBzdXJlIGl0IGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4IHNpemUgKi8KKwlpZiAobGVuID4gTUFYX0NNX0JVRkZFUikgeworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlRoZSByZWNlaXZlZCBpZXRmIGJ1ZmZlciB3YXMgdG9vIGxhcmdlIgorCQkJCSIgKCV4ICsgJXggIT0gJXgpXG4iLAorCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLAorCQkJCSh1MzIpc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSksIGxlbik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGNvcHkgZW50aXJlIE1QQSBmcmFtZSB0byBvdXIgY21fbm9kZSdzIGZyYW1lICovCiAJbWVtY3B5KGNtX25vZGUtPm1wYV9mcmFtZV9idWYsIGJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpLAogCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUpOwogCisJaWYgKG1wYV9mcmFtZS0+ZmxhZ3MgJiBJRVRGX01QQV9GTEFHU19SRUpFQ1QpCisJCSp0eXBlID0gTkVTX01QQV9SRVFVRVNUX1JFSkVDVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzgwLDcgKzQxMSw3IEBACiAKIAluZXdfc2VuZCA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfc2VuZCksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X3NlbmQpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBuZXdfc2VuZC0+dGltZXRvc2VuZCA9IGN1cnJlbnR0aW1lICovCiAJbmV3X3NlbmQtPnJldHJ5Y291bnQgPSBORVNfREVGQVVMVF9SRVRSWVM7CkBAIC0zOTQsOSArNDI1LDExIEBACiAKIAlpZiAodHlwZSA9PSBORVNfVElNRVJfVFlQRV9DTE9TRSkgewogCQluZXdfc2VuZC0+dGltZXRvc2VuZCArPSAoSFovMTApOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9hZGRfdGFpbCgmbmV3X3NlbmQtPmxpc3QsICZjbV9ub2RlLT5yZWN2X2xpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoY21fbm9kZS0+cmVjdl9lbnRyeSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNtX25vZGUtPnJlY3ZfZW50cnkgPSBuZXdfc2VuZDsKIAl9CiAKIAlpZiAodHlwZSA9PSBORVNfVElNRVJfVFlQRV9TRU5EKSB7CkBAIC00MzUsMjQgKzQ2OCw3OCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG5lc19yZXRyYW5zX2V4cGlyZWQoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQoreworCXN3aXRjaCAoY21fbm9kZS0+c3RhdGUpIHsKKwljYXNlIE5FU19DTV9TVEFURV9TWU5fUkNWRDoKKwljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgorCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX0xBU1RfQUNLOgorCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRUpfUkNWRDoKKwkJc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3JlYXRlX2V2ZW50KGNtX25vZGUsIE5FU19DTV9FVkVOVF9BQk9SVEVEKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWN2X2VudHJ5KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTMyIHJlbV9ub2RlKQoreworCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgKnJlY3ZfZW50cnkgPSBjbV9ub2RlLT5yZWN2X2VudHJ5OworCXN0cnVjdCBpd19jbV9pZCAqY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKKwlzdHJ1Y3QgbmVzX3FwICpuZXNxcDsKKwl1bnNpZ25lZCBsb25nIHFwbG9ja2ZsYWdzOworCisJaWYgKCFyZWN2X2VudHJ5KQorCQlyZXR1cm47CisJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKXJlY3ZfZW50cnktPnNrYjsKKwlpZiAobmVzcXApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7CisJCWlmIChuZXNxcC0+Y21faWQpIHsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgorCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCisJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggc29tZXRoaW5nICIKKwkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKKwkJCQlhdG9taWNfcmVhZCgmbmVzcXAtPnJlZmNvdW50KSk7CisJCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRDsKKwkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKKwkJCW5lc3FwLT5pYnFwX3N0YXRlID0gSUJfUVBTX0VSUjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7CisJCQluZXNfY21fZGlzY29ubihuZXNxcCk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOworCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCisJCQkJInJlZmNvdW50ID0gJWQ6IEhJVCBBICIKKwkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nICIKKwkJCQkidG8gZG8hISFcbiIsIG5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCwKKwkJCQlhdG9taWNfcmVhZCgmbmVzcXAtPnJlZmNvdW50KSk7CisJCX0KKwl9IGVsc2UgaWYgKHJlbV9ub2RlKSB7CisJCS8qIFRJTUVfV0FJVCBzdGF0ZSAqLworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJfQorCWlmIChjbV9ub2RlLT5jbV9pZCkKKwkJY21faWQtPnJlbV9yZWYoY21faWQpOworCWtmcmVlKHJlY3ZfZW50cnkpOworCWNtX25vZGUtPnJlY3ZfZW50cnkgPSBOVUxMOworfQogCiAvKioKICAqIG5lc19jbV90aW1lcl90aWNrCiAgKi8KIHN0YXRpYyB2b2lkIG5lc19jbV90aW1lcl90aWNrKHVuc2lnbmVkIGxvbmcgcGFzcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBxcGxvY2tmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbmV4dHRpbWVvdXQgPSBqaWZmaWVzICsgTkVTX0xPTkdfVElNRTsKLQlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOwogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZTsKIAlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICpzZW5kX2VudHJ5LCAqcmVjdl9lbnRyeTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2NvcmUsICpsaXN0X2NvcmVfdGVtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X25vZGUsICpsaXN0X25vZGVfdGVtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2NvcmVfdGVtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X25vZGU7CiAJc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlID0gZ19jbV9jb3JlOwotCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwogCXUzMiBzZXR0aW1lciA9IDA7CiAJaW50IHJldCA9IE5FVERFVl9UWF9PSzsKLQllbnVtIG5lc19jbV9ub2RlX3N0YXRlIGxhc3Rfc3RhdGU7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRpbWVyX2xpc3Q7CiAJSU5JVF9MSVNUX0hFQUQoJnRpbWVyX2xpc3QpOwpAQCAtNDYxLDcgKzU0OCw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3Rfbm9kZSwgbGlzdF9jb3JlX3RlbXAsCiAJCQkJJmNtX2NvcmUtPmNvbm5lY3RlZF9ub2RlcykgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5lc19jbV9ub2RlLCBsaXN0KTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZjbV9ub2RlLT5yZWN2X2xpc3QpIHx8IChjbV9ub2RlLT5zZW5kX2VudHJ5KSkgeworCQlpZiAoKGNtX25vZGUtPnJlY3ZfZW50cnkpIHx8IChjbV9ub2RlLT5zZW5kX2VudHJ5KSkgewogCQkJYWRkX3JlZl9jbV9ub2RlKGNtX25vZGUpOwogCQkJbGlzdF9hZGQoJmNtX25vZGUtPnRpbWVyX2VudHJ5LCAmdGltZXJfbGlzdCk7CiAJCX0KQEAgLTQ3MSw1NCArNTU4LDE4IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3Rfbm9kZSwgbGlzdF9jb3JlX3RlbXAsICZ0aW1lcl9saXN0KSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9ub2RlLCBzdHJ1Y3QgbmVzX2NtX25vZGUsCiAJCQkJCXRpbWVyX2VudHJ5KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X2NvcmUsIGxpc3Rfbm9kZV90ZW1wLAotCQkJJmNtX25vZGUtPnJlY3ZfbGlzdCkgewotCQkJcmVjdl9lbnRyeSA9IGNvbnRhaW5lcl9vZihsaXN0X2NvcmUsCi0JCQkJc3RydWN0IG5lc190aW1lcl9lbnRyeSwgbGlzdCk7Ci0JCQlpZiAoIXJlY3ZfZW50cnkpCi0JCQkJYnJlYWs7CisJCXJlY3ZfZW50cnkgPSBjbV9ub2RlLT5yZWN2X2VudHJ5OworCisJCWlmIChyZWN2X2VudHJ5KSB7CiAJCQlpZiAodGltZV9hZnRlcihyZWN2X2VudHJ5LT50aW1ldG9zZW5kLCBqaWZmaWVzKSkgewogCQkJCWlmIChuZXh0dGltZW91dCA+IHJlY3ZfZW50cnktPnRpbWV0b3NlbmQgfHwKLQkJCQkJIXNldHRpbWVyKSB7CisJCQkJCQkhc2V0dGltZXIpIHsKIAkJCQkJbmV4dHRpbWVvdXQgPSByZWN2X2VudHJ5LT50aW1ldG9zZW5kOwogCQkJCQlzZXR0aW1lciA9IDE7CiAJCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJbGlzdF9kZWwoJnJlY3ZfZW50cnktPmxpc3QpOwotCQkJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCQluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopcmVjdl9lbnRyeS0+c2tiOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQlpZiAobmVzcXAtPmNtX2lkKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCi0JCQkJCSJyZWZjb3VudCA9ICVkOiBISVQgQSAiCi0JCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIHNvbWV0aGluZyAiCi0JCQkJCSJ0byBkbyEhIVxuIiwgbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkLAotCQkJCQlhdG9taWNfcmVhZCgmbmVzcXAtPnJlZmNvdW50KSk7Ci0JCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7Ci0JCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOwotCQkJCW5lc3FwLT5pYnFwX3N0YXRlID0gSUJfUVBTX0VSUjsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywKLQkJCQkJcXBsb2NrZmxhZ3MpOwotCQkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssCi0JCQkJCXFwbG9ja2ZsYWdzKTsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKLQkJCQkJInJlZmNvdW50ID0gJWQ6IEhJVCBBICIKLQkJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyAiCi0JCQkJCSJ0byBkbyEhIVxuIiwgbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkLAotCQkJCQlhdG9taWNfcmVhZCgmbmVzcXAtPnJlZmNvdW50KSk7Ci0JCQl9Ci0JCQlpZiAoY21faWQpCi0JCQkJY21faWQtPnJlbV9yZWYoY21faWQpOwotCi0JCQlrZnJlZShyZWN2X2VudHJ5KTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJfSBlbHNlCisJCQkJaGFuZGxlX3JlY3ZfZW50cnkoY21fbm9kZSwgMSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssIGZsYWdzKTsKIAkJZG8gewpAQCAtNTMzLDEyICs1ODQsMTEgQEAKIAkJCQkJCW5leHR0aW1lb3V0ID0KIAkJCQkJCQlzZW5kX2VudHJ5LT50aW1ldG9zZW5kOwogCQkJCQkJc2V0dGltZXIgPSAxOwotCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewogCQkJCQlmcmVlX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCQkJCWJyZWFrOwogCQkJCX0KKwkJCQlicmVhazsKIAkJCX0KIAogCQkJaWYgKChjbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSB8fApAQCAtNTUwLDE2ICs2MDAsMTIgQEAKIAkJCWlmICghc2VuZF9lbnRyeS0+cmV0cmFuc2NvdW50IHx8CiAJCQkJIXNlbmRfZW50cnktPnJldHJ5Y291bnQpIHsKIAkJCQljbV9wYWNrZXRzX2Ryb3BwZWQrKzsKLQkJCQlsYXN0X3N0YXRlID0gY21fbm9kZS0+c3RhdGU7Ci0JCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOwogCQkJCWZyZWVfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCiAJCQkJCSZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywgZmxhZ3MpOwotCQkJCWlmIChsYXN0X3N0YXRlID09IE5FU19DTV9TVEFURV9TWU5fUkNWRCkKLQkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOwotCQkJCWVsc2UKLQkJCQkJY3JlYXRlX2V2ZW50KGNtX25vZGUsCi0JCQkJCQlORVNfQ01fRVZFTlRfQUJPUlRFRCk7CisJCQkJbmVzX3JldHJhbnNfZXhwaXJlZChjbV9ub2RlKTsKKwkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLAogCQkJCQlmbGFncyk7CiAJCQkJYnJlYWs7CkBAIC03MTQsNyArNzYwLDcgQEAKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihNQVhfQ01fQlVGRkVSKTsKIAlpZiAoIXNrYikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkZhaWxlZCB0byBnZXQgYSBGcmVlIHBrdFxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsIE5VTEwsIDAsIGZsYWdzKTsKQEAgLTc3OCwxNCArODI0LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpodGU7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOwotCV9fYmUzMiB0bXBfYWRkciA9IGNwdV90b19iZTMyKGxvY19hZGRyKTsKIAogCS8qIGdldCBhIGhhbmRsZSBvbiB0aGUgaHRlICovCiAJaHRlID0gJmNtX2NvcmUtPmNvbm5lY3RlZF9ub2RlczsKIAotCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiU2VhcmNoaW5nIGZvciBhbiBvd25lciBub2RlOiAlcEk0OiV4IGZyb20gY29yZSAlcC0+JXBcbiIsCi0JCSAgJnRtcF9hZGRyLCBsb2NfcG9ydCwgY21fY29yZSwgaHRlKTsKLQogCS8qIHdhbGsgbGlzdCBhbmQgZmluZCBjbV9ub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24gSUQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21fY29yZS0+aHRfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY21fbm9kZSwgaHRlLCBsaXN0KSB7CkBAIC04NzUsNyArOTE3LDggQEAKIHN0YXRpYyBpbnQgbWluaV9jbV9kZWNfcmVmY250X2xpc3RlbihzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUsCiAJc3RydWN0IG5lc19jbV9saXN0ZW5lciAqbGlzdGVuZXIsIGludCBmcmVlX2hhbmdpbmdfbm9kZXMpCiB7Ci0JaW50IHJldCA9IDE7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcyA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF90ZW1wID0gTlVMTDsKQEAgLTkwNCwxMCArOTQ3LDYwIEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfdGVtcCwgJnJlc2V0X2xpc3QpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X3Bvcywgc3RydWN0IG5lc19jbV9ub2RlLAotCQkJCQlyZXNldF9lbnRyeSk7Ci0JCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKLQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQkJCXJlc2V0X2VudHJ5KTsKKwkJeworCQkJc3RydWN0IG5lc19jbV9ub2RlICpsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKKwkJCWlmIChORVNfQ01fU1RBVEVfRklOX1dBSVQxIDw9IGNtX25vZGUtPnN0YXRlKSB7CisJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWxvb3BiYWNrKSB7CisJCQkJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJCQkJZXJyID0gc2VuZF9yZXNldChjbV9ub2RlLCBOVUxMKTsKKwkJCQkJaWYgKGVycikgeworCQkJCQkJY21fbm9kZS0+c3RhdGUgPQorCQkJCQkJCSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQkJCQkJV0FSTl9PTigxKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNtX25vZGUtPnN0YXRlID0KKwkJCQkJCQlORVNfQ01fU1RBVEVfQ0xPU0VEOworCQkJCQkJcmVtX3JlZl9jbV9ub2RlKAorCQkJCQkJCWNtX25vZGUtPmNtX2NvcmUsCisJCQkJCQkJY21fbm9kZSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlzdHJ1Y3QgbmVzX2NtX2V2ZW50IGV2ZW50OworCisJCQkJCWV2ZW50LmNtX25vZGUgPSBsb29wYmFjazsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9CisJCQkJCQkJbG9vcGJhY2stPnJlbV9hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0KKwkJCQkJCQlsb29wYmFjay0+bG9jX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX3BvcnQgPQorCQkJCQkJCWxvb3BiYWNrLT5yZW1fcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CisJCQkJCQkJIGxvb3BiYWNrLT5sb2NfcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5jbV9pZCA9IGxvb3BiYWNrLT5jbV9pZDsKKwkJCQkJY21fZXZlbnRfY29ubmVjdF9lcnJvcigmZXZlbnQpOworCQkJCQlsb29wYmFjay0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCisJCQkJCWV2ZW50LmNtX25vZGUgPSBjbV9ub2RlOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9hZGRyID0KKwkJCQkJCQkgY21fbm9kZS0+cmVtX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPQorCQkJCQkJCSBjbV9ub2RlLT5sb2NfYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fcG9ydCA9CisJCQkJCQkJIGNtX25vZGUtPnJlbV9wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmxvY19wb3J0ID0KKwkJCQkJCQkgY21fbm9kZS0+bG9jX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8uY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKKwkJCQkJY21fZXZlbnRfcmVzZXQoJmV2ZW50KTsKKworCQkJCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwKKwkJCQkJCQkgY21fbm9kZSk7CisKKwkJCQl9CisJCQl9CisJCX0KIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21fY29yZS0+bGlzdGVuX2xpc3RfbG9jaywgZmxhZ3MpOwpAQCAtOTY4LDYgKzEwNjEsNyBAQAogCWlmIChjbV9ub2RlLT5hY2NlcHRfcGVuZCkgewogCQlCVUdfT04oIWNtX25vZGUtPmxpc3RlbmVyKTsKIAkJYXRvbWljX2RlYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOworCQljbV9ub2RlLT5hY2NlcHRfcGVuZCA9IDA7CiAJCUJVR19PTihhdG9taWNfcmVhZCgmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpIDwgMCk7CiAJfQogCkBAIC05OTQsNyArMTA4OCw3IEBACiAJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mIGZsKTsKIAlmbC5ubF91LmlwNF91LmRhZGRyID0gaHRvbmwoZHN0X2lwKTsKIAlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZydCwgJmZsKSkgewotCQlwcmludGsoIiVzOiBpcF9yb3V0ZV9vdXRwdXRfa2V5IGZhaWxlZCBmb3IgMHglMDhYXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpcF9yb3V0ZV9vdXRwdXRfa2V5IGZhaWxlZCBmb3IgMHglMDhYXG4iLAogCQkJCV9fZnVuY19fLCBkc3RfaXApOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMTA1Nyw4ICsxMTUxLDYgQEAKIAkJCWNtX25vZGUtPmNtX2lkKTsKIAogCXNwaW5fbG9ja19pbml0KCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNtX25vZGUtPnJlY3ZfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrKTsKIAogCWNtX25vZGUtPmxvb3BiYWNrcGFydG5lciA9IE5VTEw7CiAJYXRvbWljX3NldCgmY21fbm9kZS0+cmVmX2NvdW50LCAxKTsKQEAgLTExMjYsMTAgKzEyMTgsNyBAQAogc3RhdGljIGludCByZW1fcmVmX2NtX25vZGUoc3RydWN0IG5lc19jbV9jb3JlICpjbV9jb3JlLAogCXN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBxcGxvY2tmbGFnczsKLQlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5ICpyZWN2X2VudHJ5OwotCXN0cnVjdCBpd19jbV9pZCAqY21faWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9jb3JlLCAqbGlzdF9ub2RlX3RlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbmVzX3FwICpuZXNxcDsKIAogCWlmICghY21fbm9kZSkKQEAgLTExNTAsMzggKzEyMzksOSBAQAogCQlhdG9taWNfZGVjKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CiAJCUJVR19PTihhdG9taWNfcmVhZCgmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpIDwgMCk7CiAJfQotCUJVR19PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9jb3JlLCBsaXN0X25vZGVfdGVtcCwgJmNtX25vZGUtPnJlY3ZfbGlzdCkgewotCQlyZWN2X2VudHJ5ID0gY29udGFpbmVyX29mKGxpc3RfY29yZSwgc3RydWN0IG5lc190aW1lcl9lbnRyeSwKLQkJCQlsaXN0KTsKLQkJbGlzdF9kZWwoJnJlY3ZfZW50cnktPmxpc3QpOwotCQljbV9pZCA9IGNtX25vZGUtPmNtX2lkOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopcmVjdl9lbnRyeS0+c2tiOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJaWYgKG5lc3FwLT5jbV9pZCkgewotCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwOiBISVQgQSAiCi0JCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggc29tZXRoaW5nIHRvIGRvIVxuIiwKLQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgY21faWQpOwotCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7Ci0JCQluZXNxcC0+aWJxcF9zdGF0ZSA9IElCX1FQU19FUlI7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcDogSElUIEEgIgotCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgdG8gZG8hXG4iLAotCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCk7Ci0JCX0KLQkJY21faWQtPnJlbV9yZWYoY21faWQpOwotCi0JCWtmcmVlKHJlY3ZfZW50cnkpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQorCVdBUk5fT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7CisJaWYgKGNtX25vZGUtPnJlY3ZfZW50cnkpCisJCWhhbmRsZV9yZWN2X2VudHJ5KGNtX25vZGUsIDApOwogCWlmIChjbV9ub2RlLT5saXN0ZW5lcikgewogCQltaW5pX2NtX2RlY19yZWZjbnRfbGlzdGVuKGNtX2NvcmUsIGNtX25vZGUtPmxpc3RlbmVyLCAwKTsKIAl9IGVsc2UgewpAQCAtMTI2Niw4ICsxMzI2LDcgQEAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVfZmluX3BrdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IsCi0Jc3RydWN0IHRjcGhkciAqdGNwaCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9maW5fcGt0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKIHsKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgIlJlY2VpdmVkIEZJTiwgY21fbm9kZSA9ICVwLCBzdGF0ZSA9ICV1LiAiCiAJCSJyZWZjbnQ9JWRcbiIsIGNtX25vZGUsIGNtX25vZGUtPnN0YXRlLApAQCAtMTI3OSwyMyArMTMzOCwzMCBAQAogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9TRU5UOgogCWNhc2UgTkVTX0NNX1NUQVRFX0VTVEFCTElTSEVEOgogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOgogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9MQVNUX0FDSzsKLQkJc2VuZF9maW4oY21fbm9kZSwgc2tiKTsKKwkJc2VuZF9maW4oY21fbm9kZSwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0lORzsKLQkJc2VuZF9hY2soY21fbm9kZSwgc2tiKTsKKwkJc2VuZF9hY2soY21fbm9kZSwgTlVMTCk7CisJCS8qIFdhaXQgZm9yIEFDSyBhcyB0aGlzIGlzIHNpbXVsdGFub3VzIGNsb3NlLi4KKwkJKiBBZnRlciB3ZSByZWNlaXZlIEFDSywgZG8gbm90IHNlbmQgYW55dGhpbmcuLgorCQkqIEp1c3Qgcm0gdGhlIG5vZGUuLiBEb25lLi4gKi8KIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQyOgogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9USU1FX1dBSVQ7Ci0JCXNlbmRfYWNrKGNtX25vZGUsIHNrYik7CisJCXNlbmRfYWNrKGNtX25vZGUsIE5VTEwpOworCQlzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgTlVMTCwgIE5FU19USU1FUl9UWVBFX0NMT1NFLCAxLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOgogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfVFNBOgogCWRlZmF1bHQ6CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRXJyb3IgUmN2ZCBGSU4gZm9yIG5vZGUtJXAgc3RhdGUgPSAlZFxuIiwKIAkJCWNtX25vZGUsIGNtX25vZGUtPnN0YXRlKTsKLQkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTM0MSwyMyArMTQwNywzNSBAQAogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiQmFkIHN0YXRlICVzWyV1XVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlkZWZhdWx0OgogCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQllbnVtIG5lc19jbV9ldmVudF90eXBlIHR5cGUpCisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAotCWludAlyZXQ7CisJaW50CXJldCA9IDA7CiAJaW50IGRhdGFzaXplID0gc2tiLT5sZW47CiAJdTggKmRhdGFsb2MgPSBza2ItPmRhdGE7Ci0JcmV0ID0gcGFyc2VfbXBhKGNtX25vZGUsIGRhdGFsb2MsIGRhdGFzaXplKTsKLQlpZiAocmV0IDwgMCkgeworCisJZW51bSBuZXNfY21fZXZlbnRfdHlwZSB0eXBlID0gTkVTX0NNX0VWRU5UX1VOS05PV047CisJdTMyICAgICByZXNfdHlwZTsKKwlyZXQgPSBwYXJzZV9tcGEoY21fbm9kZSwgZGF0YWxvYywgJnJlc190eXBlLCBkYXRhc2l6ZSk7CisJaWYgKHJldCkgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgImRpZG4ndCBsaWtlIE1QQSBSZXF1ZXN0XG4iKTsKLQkJaWYgKHR5cGUgPT0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCkgeworCQlpZiAoY21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIiVzWyV1XSBjcmVhdGUgYWJvcnQgZm9yICIKIAkJCQkiY21fbm9kZT0lcCBsaXN0ZW5lcj0lcCBzdGF0ZT0lZFxuIiwgX19mdW5jX18sCiAJCQkJX19MSU5FX18sIGNtX25vZGUsIGNtX25vZGUtPmxpc3RlbmVyLApAQCAtMTM2NiwxOCArMTQ0NCwzOCBAQAogCQl9IGVsc2UgewogCQkJcGFzc2l2ZV9vcGVuX2VycihjbV9ub2RlLCBza2IsIDEpOwogCQl9Ci0JfSBlbHNlIHsKLQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlpZiAodHlwZSA9PSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEKQotCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfVFNBOwotCQllbHNlCi0JCQlhdG9taWNfc2V0KCZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlLAotCQkJCQlORVNfUEFTU0lWRV9TVEFURV9JTkRJQ0FURUQpOwotCQljcmVhdGVfZXZlbnQoY21fbm9kZSwgdHlwZSk7Ci0KKwkJcmV0dXJuOwogCX0KLQlyZXR1cm4gOworCisJc3dpdGNoIChjbV9ub2RlLT5zdGF0ZSkgeworCWNhc2UgTkVTX0NNX1NUQVRFX0VTVEFCTElTSEVEOgorCQlpZiAocmVzX3R5cGUgPT0gTkVTX01QQV9SRVFVRVNUX1JFSkVDVCkgeworCQkJLypCSUcgcHJvYmxlbSBhcyB3ZSBhcmUgcmVjZWl2aW5nIHRoZSBNUEEuLiBTbyBzaG91bGQKKwkJCSogbm90IGJlIFJFSkVDVC4uIFRoaXMgaXMgUGFzc2l2ZSBPcGVuLi4gV2UgY2FuCisJCQkqIG9ubHkgcmVjZWl2ZSBpdCBSZWplY3QgZm9yIEFjdGl2ZSBPcGVuLi4uKi8KKwkJCVdBUk5fT04oMSk7CisJCX0KKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7CisJCXR5cGUgPSBORVNfQ01fRVZFTlRfTVBBX1JFUTsKKwkJYXRvbWljX3NldCgmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSwKKwkJCQlORVNfUEFTU0lWRV9TVEFURV9JTkRJQ0FURUQpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwkJaWYgKHJlc190eXBlID09IE5FU19NUEFfUkVRVUVTVF9SRUpFQ1QpIHsKKwkJCXR5cGUgPSBORVNfQ01fRVZFTlRfTVBBX1JFSkVDVDsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOworCQl9IGVsc2UgeworCQkJdHlwZSA9IE5FU19DTV9FVkVOVF9DT05ORUNURUQ7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9UU0E7CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwljcmVhdGVfZXZlbnQoY21fbm9kZSwgdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluZGljYXRlX3BrdF9lcnIoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTQ2NSw4ICsxNTYzLDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfTElTVEVOSU5HOgogCQkvKiBQYXNzaXZlIE9QRU4gKi8KLQkJY21fbm9kZS0+YWNjZXB0X3BlbmQgPSAxOwotCQlhdG9taWNfaW5jKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CiAJCWlmIChhdG9taWNfcmVhZCgmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpID4KIAkJCQljbV9ub2RlLT5saXN0ZW5lci0+YmFja2xvZykgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJkcm9wIHN5biBkdWUgdG8gYmFja2xvZyAiCkBAIC0xNDg0LDYgKzE1ODAsOSBAQAogCQl9CiAJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfbnh0ID0gaW5jX3NlcXVlbmNlICsgMTsKIAkJQlVHX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOworCQljbV9ub2RlLT5hY2NlcHRfcGVuZCA9IDE7CisJCWF0b21pY19pbmMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKKwogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9TWU5fUkNWRDsKIAkJc2VuZF9zeW4oY21fbm9kZSwgMSwgc2tiKTsKIAkJYnJlYWs7CkBAIC0xNTE4LDYgKzE2MTcsNyBAQAogCWluY19zZXF1ZW5jZSA9IG50b2hsKHRjcGgtPnNlcSk7CiAJc3dpdGNoIChjbV9ub2RlLT5zdGF0ZSkgewogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9TRU5UOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCS8qIGFjdGl2ZSBvcGVuICovCiAJCWlmIChjaGVja19zeW4oY21fbm9kZSwgdGNwaCwgc2tiKSkKIAkJCXJldHVybjsKQEAgLTE1NjcsMTAgKzE2NjcsNyBAQAogCXUzMiByZW1fc2VxOwogCWludCByZXQ7CiAJaW50IG9wdGlvbnNpemU7Ci0JdTMyIHRlbXBfc2VxID0gY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtOwotCiAJb3B0aW9uc2l6ZSA9ICh0Y3BoLT5kb2ZmIDw8IDIpIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwotCWNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bSA9IG50b2hsKHRjcGgtPmFja19zZXEpOwogCiAJaWYgKGNoZWNrX3NlcShjbV9ub2RlLCB0Y3BoLCBza2IpKQogCQlyZXR1cm47CkBAIC0xNTgwLDcgKzE2NzcsNyBAQAogCXJlbV9zZXEgPSBudG9obCh0Y3BoLT5zZXEpOwogCXJlbV9zZXFfYWNrID0gIG50b2hsKHRjcGgtPmFja19zZXEpOwogCWRhdGFzaXplID0gc2tiLT5sZW47Ci0KKwljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJc3dpdGNoIChjbV9ub2RlLT5zdGF0ZSkgewogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOgogCQkvKiBQYXNzaXZlIE9QRU4gKi8KQEAgLTE1ODgsNyArMTY4NSw2IEBACiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAkJY21fbm9kZS0+dGNwX2NudHh0LnJlbV9hY2tfbnVtID0gbnRvaGwodGNwaC0+YWNrX3NlcSk7Ci0JCWNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bSA9IHRlbXBfc2VxOwogCQlpZiAoY21fbm9kZS0+dGNwX2NudHh0LnJlbV9hY2tfbnVtICE9CiAJCSAgICBjbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW0pIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAicmVtX2Fja19udW0gIT0gbG9jX3NlcV9udW1cbiIpOwpAQCAtMTU5NywzMSArMTY5MywzMCBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0VTVEFCTElTSEVEOworCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWlmIChkYXRhc2l6ZSkgewogCQkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl9ueHQgPSBpbmNfc2VxdWVuY2UgKyBkYXRhc2l6ZTsKLQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOwotCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiLCBORVNfQ01fRVZFTlRfTVBBX1JFUSk7Ci0JCSB9IGVsc2UgeyAvKiByY3ZkIEFDSyBvbmx5ICovCisJCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IpOworCQl9IGVsc2UgeyAvKiByY3ZkIEFDSyBvbmx5ICovCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQkgfQogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9FU1RBQkxJU0hFRDoKIAkJLyogUGFzc2l2ZSBPUEVOICovCi0JCS8qIFdlIGV4cGVjdCBtcGEgZnJhbWUgdG8gYmUgcmVjZWl2ZWQgb25seSAqLworCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWlmIChkYXRhc2l6ZSkgewogCQkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl9ueHQgPSBpbmNfc2VxdWVuY2UgKyBkYXRhc2l6ZTsKLQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOwotCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiLAotCQkJCU5FU19DTV9FVkVOVF9NUEFfUkVRKTsKKwkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYik7CiAJCX0gZWxzZQogCQkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJY21fbm9kZS0+dGNwX2NudHh0LnJlbV9hY2tfbnVtID0gbnRvaGwodGNwaC0+YWNrX3NlcSk7CiAJCWlmIChkYXRhc2l6ZSkgewogCQkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl9ueHQgPSBpbmNfc2VxdWVuY2UgKyBkYXRhc2l6ZTsKLQkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYiwgTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCk7CisJCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IpOwogCQl9IGVsc2UgeyAvKiBDb3VsZCBiZSBqdXN0IGFuIGFjayBwa3QuLiAqLwogCQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTE2MzIsMTMgKzE3MjcsMjQgQEAKIAkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQlzZW5kX3Jlc2V0KGNtX25vZGUsIHNrYik7CiAJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX0xBU1RfQUNLOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJY21fbm9kZS0+Y21faWQtPnJlbV9yZWYoY21fbm9kZS0+Y21faWQpOworCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlkcm9wX3BhY2tldChza2IpOworCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRklOX1dBSVQyOworCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9TWU5fU0VOVDoKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDI6CiAJY2FzZSBORVNfQ01fU1RBVEVfVFNBOgogCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOgotCWNhc2UgTkVTX0NNX1NUQVRFX0xBU1RfQUNLOgotCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CiAJY2FzZSBORVNfQ01fU1RBVEVfVU5LTk9XTjoKIAlkZWZhdWx0OgogCQlkcm9wX3BhY2tldChza2IpOwpAQCAtMTc0OCw2ICsxODU0LDcgQEAKIHsKIAllbnVtIG5lc190Y3BpcF9wa3RfdHlwZQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9VTktOT1dOOwogCXN0cnVjdCB0Y3BoZHIgKnRjcGggPSB0Y3BfaGRyKHNrYik7CisJdTMyICAgICBmaW5fc2V0ID0gMDsKIAlza2JfcHVsbChza2IsIGlwX2hkcihza2IpLT5paGwgPDwgMik7CiAKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgInByb2Nlc3NfcGFja2V0OiBjbV9ub2RlPSVwIHN0YXRlID0lZCBzeW49JWQgIgpAQCAtMTc2MCwxMCArMTg2NywxMCBAQAogCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9TWU47CiAJCWlmICh0Y3BoLT5hY2spCiAJCQlwa3RfdHlwZSA9IE5FU19QS1RfVFlQRV9TWU5BQ0s7Ci0JfSBlbHNlIGlmICh0Y3BoLT5maW4pCi0JCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX0ZJTjsKLQllbHNlIGlmICh0Y3BoLT5hY2spCisJfSBlbHNlIGlmICh0Y3BoLT5hY2spCiAJCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX0FDSzsKKwlpZiAodGNwaC0+ZmluKQorCQlmaW5fc2V0ID0gMTsKIAogCXN3aXRjaCAocGt0X3R5cGUpIHsKIAljYXNlIE5FU19QS1RfVFlQRV9TWU46CkBAIC0xNzc0LDE1ICsxODgxLDE2IEBACiAJCWJyZWFrOwogCWNhc2UgTkVTX1BLVF9UWVBFX0FDSzoKIAkJaGFuZGxlX2Fja19wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKKwkJaWYgKGZpbl9zZXQpCisJCQloYW5kbGVfZmluX3BrdChjbV9ub2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBORVNfUEtUX1RZUEVfUlNUOgogCQloYW5kbGVfcnN0X3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOwogCQlicmVhazsKLQljYXNlIE5FU19QS1RfVFlQRV9GSU46Ci0JCWhhbmRsZV9maW5fcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRyb3BfcGFja2V0KHNrYik7CisJCWlmIChmaW5fc2V0KQorCQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTE5MjUsNyArMjAzMyw3IEBACiAJCQkJbG9vcGJhY2tyZW1vdGVub2RlLT50Y3BfY250eHQucmN2X3dzY2FsZTsKIAkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+dGNwX2NudHh0LnNuZF93c2NhbGUgPQogCQkJCWNtX25vZGUtPnRjcF9jbnR4dC5yY3Zfd3NjYWxlOwotCisJCQlsb29wYmFja3JlbW90ZW5vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX01QQVJFUV9SQ1ZEOwogCQkJY3JlYXRlX2V2ZW50KGxvb3BiYWNrcmVtb3Rlbm9kZSwgTkVTX0NNX0VWRU5UX01QQV9SRVEpOwogCQl9CiAJCXJldHVybiBjbV9ub2RlOwpAQCAtMTk4MCw3ICsyMDg4LDExIEBACiAJc3RydWN0IGlldGZfbXBhX2ZyYW1lICptcGFfZnJhbWUsIHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSkKIHsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgZXJyID0gMDsKIAlpbnQgcGFzc2l2ZV9zdGF0ZTsKKwlzdHJ1Y3QgbmVzX2NtX2V2ZW50IGV2ZW50OworCXN0cnVjdCBpd19jbV9pZCAqY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKKwlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrID0gY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICIlcyBjbV9ub2RlPSVwIHR5cGU9JWQgc3RhdGU9JWRcbiIsCiAJCV9fZnVuY19fLCBjbV9ub2RlLCBjbV9ub2RlLT50Y3BfY250eHQuY2xpZW50LCBjbV9ub2RlLT5zdGF0ZSk7CkBAIC0xOTg5LDEyICsyMTAxLDM4IEBACiAJCXJldHVybiByZXQ7CiAJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCi0JcGFzc2l2ZV9zdGF0ZSA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlKTsKLQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7Ci0JaWYgKHBhc3NpdmVfc3RhdGUgPT0gTkVTX1NFTkRfUkVTRVRfRVZFTlQpCisJaWYgKCFsb29wYmFjaykgeworCQlwYXNzaXZlX3N0YXRlID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUpOworCQlpZiAocGFzc2l2ZV9zdGF0ZSA9PSBORVNfU0VORF9SRVNFVF9FVkVOVCkgeworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGNtX25vZGUpOworCQl9IGVsc2UgeworCQkJcmV0ID0gc2VuZF9tcGFfcmVqZWN0KGNtX25vZGUpOworCQkJaWYgKHJldCkgeworCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJCQllcnIgPSBzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQkJCWlmIChlcnIpCisJCQkJCVdBUk5fT04oMSk7CisJCQl9IGVsc2UKKwkJCQljbV9pZC0+YWRkX3JlZihjbV9pZCk7CisJCX0KKwl9IGVsc2UgeworCQljbV9ub2RlLT5jbV9pZCA9IE5VTEw7CisJCWV2ZW50LmNtX25vZGUgPSBsb29wYmFjazsKKwkJZXZlbnQuY21faW5mby5yZW1fYWRkciA9IGxvb3BiYWNrLT5yZW1fYWRkcjsKKwkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9IGxvb3BiYWNrLT5sb2NfYWRkcjsKKwkJZXZlbnQuY21faW5mby5yZW1fcG9ydCA9IGxvb3BiYWNrLT5yZW1fcG9ydDsKKwkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9IGxvb3BiYWNrLT5sb2NfcG9ydDsKKwkJZXZlbnQuY21faW5mby5jbV9pZCA9IGxvb3BiYWNrLT5jbV9pZDsKKwkJY21fZXZlbnRfbXBhX3JlamVjdCgmZXZlbnQpOwogCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7Ci0JZWxzZQotCQlyZXQgPSBzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQlsb29wYmFjay0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0lORzsKKworCQljbV9pZCA9IGxvb3BiYWNrLT5jbV9pZDsKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX2NvcmUsIGxvb3BiYWNrKTsKKwkJY21faWQtPnJlbV9yZWYoY21faWQpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwMzEsNiArMjE2OSw3IEBACiAJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKIAkJcmV0ID0gLTE7CiAJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOgogCWNhc2UgTkVTX0NNX1NUQVRFX0xJU1RFTklORzoKIAljYXNlIE5FU19DTV9TVEFURV9VTktOT1dOOgogCWNhc2UgTkVTX0NNX1NUQVRFX0lOSVRFRDoKQEAgLTIyMjcsMTUgKzIzNjYsMTUgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAodHlwZSkgewotCQljYXNlIE5FU19DTV9TRVRfUEtUX1NJWkU6Ci0JCQljbV9jb3JlLT5tdHUgPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIE5FU19DTV9TRVRfRlJFRV9QS1RfUV9TSVpFOgotCQkJY21fY29yZS0+ZnJlZV90eF9wa3RfbWF4ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIHVua25vd24gc2V0IG9wdGlvbiAqLwotCQkJcmV0ID0gLUVJTlZBTDsKKwljYXNlIE5FU19DTV9TRVRfUEtUX1NJWkU6CisJCWNtX2NvcmUtPm10dSA9IHZhbHVlOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TRVRfRlJFRV9QS1RfUV9TSVpFOgorCQljbV9jb3JlLT5mcmVlX3R4X3BrdF9tYXggPSB2YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5rbm93biBzZXQgb3B0aW9uICovCisJCXJldCA9IC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTI2NTQsOSArMjc5Myw3IEBACiAJCQlORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSk7CiAJfSBlbHNlIHsKIAkJbmVzcXAtPm5lc3FwX2NvbnRleHQtPmlyZF9vcmRfc2l6ZXMgfD0KLQkJCWNwdV90b19sZTMyKChORVNfUVBDT05URVhUX09SRElSRF9MU01NX1BSRVNFTlQgfAotCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUgfAotCQkJTkVTX1FQQ09OVEVYVF9PUkRJUkRfQUxTTU0pKTsKKwkJCWNwdV90b19sZTMyKE5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVKTsKIAl9CiAJbmVzcXAtPnNraXBfbHNtbSA9IDE7CiAKQEAgLTI3NzgsMjMgKzI5MTUsMzUgQEAKIGludCBuZXNfcmVqZWN0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIGNvbnN0IHZvaWQgKnBkYXRhLCB1OCBwZGF0YV9sZW4pCiB7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOworCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2s7CisKIAlzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmU7CiAKIAlhdG9taWNfaW5jKCZjbV9yZWplY3RzKTsKIAljbV9ub2RlID0gKHN0cnVjdCBuZXNfY21fbm9kZSAqKSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKwlsb29wYmFjayA9IGNtX25vZGUtPmxvb3BiYWNrcGFydG5lcjsKIAljbV9jb3JlID0gY21fbm9kZS0+Y21fY29yZTsKKwljbV9ub2RlLT5jbV9pZCA9IGNtX2lkOwogCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkgKyBwZGF0YV9sZW47CiAKLQlzdHJjcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5rZXlbMF0sIElFRlRfTVBBX0tFWV9SRVApOwotCW1lbWNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YSwgcGRhdGEsIHBkYXRhX2xlbik7CisJaWYgKGNtX25vZGUtPm1wYV9mcmFtZV9zaXplID4gTUFYX0NNX0JVRkZFUikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQljbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhX2xlbiA9IGNwdV90b19iZTE2KHBkYXRhX2xlbik7CisJc3RyY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUua2V5WzBdLCBJRUZUX01QQV9LRVlfUkVQKTsKKwlpZiAobG9vcGJhY2spIHsKKwkJbWVtY3B5KCZsb29wYmFjay0+bXBhX2ZyYW1lLnByaXZfZGF0YSwgcGRhdGEsIHBkYXRhX2xlbik7CisJCWxvb3BiYWNrLT5tcGFfZnJhbWUucHJpdl9kYXRhX2xlbiA9IHBkYXRhX2xlbjsKKwkJbG9vcGJhY2stPm1wYV9mcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSkgKworCQkJCXBkYXRhX2xlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGEsIHBkYXRhLCBwZGF0YV9sZW4pOworCQljbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhX2xlbiA9IGNwdV90b19iZTE2KHBkYXRhX2xlbik7CisJfQorCiAJY21fbm9kZS0+bXBhX2ZyYW1lLnJldiA9IG1wYV92ZXJzaW9uOwogCWNtX25vZGUtPm1wYV9mcmFtZS5mbGFncyA9IElFVEZfTVBBX0ZMQUdTX0NSQyB8IElFVEZfTVBBX0ZMQUdTX1JFSkVDVDsKIAotCWNtX2NvcmUtPmFwaS0+cmVqZWN0KGNtX2NvcmUsICZjbV9ub2RlLT5tcGFfZnJhbWUsIGNtX25vZGUpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNtX2NvcmUtPmFwaS0+cmVqZWN0KGNtX2NvcmUsICZjbV9ub2RlLT5tcGFfZnJhbWUsIGNtX25vZGUpOwogfQogCiAKQEAgLTMzMDMsMTMgKzM0NTIsNTYgQEAKIAljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLnJlbV9wb3J0KTsKIAljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChldmVudC0+Y21faW5mby5yZW1fYWRkcik7Ci0KLQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhICAgICAgICAgICAgICAgID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKLQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiAgICAgICAgICAgID0gKHU4KSBjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZTsKKwljbV9ldmVudC5wcml2YXRlX2RhdGEgPSBjbV9ub2RlLT5tcGFfZnJhbWVfYnVmOworCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gID0gKHU4KSBjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZTsKIAogCXJldCA9IGNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOwogCWlmIChyZXQpCi0JCXByaW50aygiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBjbV9ldmVudF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBpd19jbV9pZCAgICpjbV9pZDsKKwlzdHJ1Y3QgaXdfY21fZXZlbnQgY21fZXZlbnQ7CisJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOworCWludCByZXQ7CisKKwljbV9ub2RlID0gZXZlbnQtPmNtX25vZGU7CisJaWYgKCFjbV9ub2RlKQorCQlyZXR1cm47CisJY21faWQgPSBjbV9ub2RlLT5jbV9pZDsKKworCWF0b21pY19pbmMoJmNtX2Nvbm5lY3RfcmVxcyk7CisJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJjbV9ub2RlID0gJXAgLSBjbV9pZCA9ICVwLCBqaWZmaWVzID0gJWx1XG4iLAorCQkJY21fbm9kZSwgY21faWQsIGppZmZpZXMpOworCisJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOworCWNtX2V2ZW50LnN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7CisJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9IGNtX2lkLT5wcm92aWRlcl9kYXRhOworCisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ubG9jX3BvcnQpOworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ubG9jX2FkZHIpOworCisJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5yZW1fcG9ydCk7CisJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoZXZlbnQtPmNtX2luZm8ucmVtX2FkZHIpOworCisJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZjsKKwljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuID0gKHU4KSBjbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZTsKKworCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiY2FsbCBDTV9FVkVOVF9NUEFfUkVKRUNURUQsIGxvY2FsX2FkZHI9JTA4eCwgIgorCQkJInJlbW92ZV9hZGRyPSUwOHhcbiIsCisJCQljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciwKKwkJCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkcik7CisKKwlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzWyV1XSBPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLAogCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0KTsKIAogCXJldHVybjsKQEAgLTMzNzQsNiArMzU2NiwxNCBAQAogCQljbV9ldmVudF9jb25uZWN0ZWQoZXZlbnQpOwogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkNNIEV2ZW50OiBDT05ORUNURURcbiIpOwogCQlicmVhazsKKwljYXNlIE5FU19DTV9FVkVOVF9NUEFfUkVKRUNUOgorCQlpZiAoKCFldmVudC0+Y21fbm9kZS0+Y21faWQpIHx8CisJCQkJKGV2ZW50LT5jbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfVFNBKSkKKwkJCWJyZWFrOworCQljbV9ldmVudF9tcGFfcmVqZWN0KGV2ZW50KTsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJDTSBFdmVudDogUkVKRUNUXG4iKTsKKwkJYnJlYWs7CisKIAljYXNlIE5FU19DTV9FVkVOVF9BQk9SVEVEOgogCQlpZiAoKCFldmVudC0+Y21fbm9kZS0+Y21faWQpIHx8CiAJCQkoZXZlbnQtPmNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9UU0EpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKaW5kZXggZmFmYTM1MC4uZDVmNzc4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0zOSw2ICszOSw5IEBACiAjZGVmaW5lIE5FU19NQU5BR0VfQVBCVlRfREVMIDAKICNkZWZpbmUgTkVTX01BTkFHRV9BUEJWVF9BREQgMQogCisjZGVmaW5lIE5FU19NUEFfUkVRVUVTVF9BQ0NFUFQgIDEKKyNkZWZpbmUgTkVTX01QQV9SRVFVRVNUX1JFSkVDVCAgMgorCiAvKiBJRVRGIE1QQSAtLSBkZWZpbmVzLCBlbnVtcywgc3RydWN0cyAqLwogI2RlZmluZSBJRUZUX01QQV9LRVlfUkVRICAiTVBBIElEIFJlcSBGcmFtZSIKICNkZWZpbmUgSUVGVF9NUEFfS0VZX1JFUCAgIk1QQSBJRCBSZXAgRnJhbWUiCkBAIC0xODYsNiArMTg5LDcgQEAKIAlORVNfQ01fU1RBVEVfQUNDRVBUSU5HLAogCU5FU19DTV9TVEFURV9NUEFSRVFfU0VOVCwKIAlORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQsCisJTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZELAogCU5FU19DTV9TVEFURV9UU0EsCiAJTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMSwKIAlORVNfQ01fU1RBVEVfRklOX1dBSVQyLApAQCAtMjc4LDEzICsyODIsMTIgQEAKIAlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5CSpzZW5kX2VudHJ5OwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICByZXRyYW5zX2xpc3RfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgIHJlY3ZfbGlzdDsKLQlzcGlubG9ja190ICAgICAgICAgICAgICAgIHJlY3ZfbGlzdF9sb2NrOworCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgICpyZWN2X2VudHJ5OwogCiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3dyaXRlMDsKIAl1bmlvbiB7CiAJCXN0cnVjdCBpZXRmX21wYV9mcmFtZSBtcGFfZnJhbWU7Ci0JCXU4ICAgICAgICAgICAgICAgICAgICBtcGFfZnJhbWVfYnVmW05FU19DTV9ERUZBVUxUX01UVV07CisJCXU4ICAgICAgICAgICAgICAgICAgICBtcGFfZnJhbWVfYnVmW01BWF9DTV9CVUZGRVJdOwogCX07CiAJdTE2ICAgICAgICAgICAgICAgICAgICAgICBtcGFfZnJhbWVfc2l6ZTsKIAlzdHJ1Y3QgaXdfY21faWQgICAgICAgICAgICpjbV9pZDsKQEAgLTMyNiw2ICszMjksNyBAQAogCU5FU19DTV9FVkVOVF9NUEFfUkVRLAogCU5FU19DTV9FVkVOVF9NUEFfQ09OTkVDVCwKIAlORVNfQ01fRVZFTlRfTVBBX0FDQ0VQVCwKKwlORVNfQ01fRVZFTlRfTVBBX1JFSkVDVCwKIAlORVNfQ01fRVZFTlRfTVBBX0VTVEFCTElTSEVELAogCU5FU19DTV9FVkVOVF9DT05ORUNURUQsCiAJTkVTX0NNX0VWRU5UX0NMT1NFRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaAppbmRleCBkYTlkYWJhLi4wZmI4ZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwppbmRleCA1ZDEzOWRiLi41MmU3MzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTI1NCw2ICsyNTQsNyBAQAogCXUzMiBhZGFwdGVyX3NpemU7CiAJdTMyIGFycF90YWJsZV9zaXplOwogCXUxNiB2ZW5kb3JfaWQ7CisJdTE2IGRldmljZV9pZDsKIAl1OCAgT25lR19Nb2RlOwogCXU4ICBmdW5jX2luZGV4OwogCkBAIC0zNTYsNiArMzU3LDEzIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCW5lc2FkYXB0ZXItPnZlbmRvcl9pZCA9ICgoKHUzMikgbmVzYWRhcHRlci0+bWFjX2FkZHJfaGlnaCkgPDwgOCkgfAorCQkJCShuZXNhZGFwdGVyLT5tYWNfYWRkcl9sb3cgPj4gMjQpOworCisJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKG5lc2Rldi0+cGNpZGV2LT5idXMsIG5lc2Rldi0+cGNpZGV2LT5kZXZmbiwKKwkJCQkgUENJX0RFVklDRV9JRCwgJmRldmljZV9pZCk7CisJbmVzYWRhcHRlci0+dmVuZG9yX3BhcnRfaWQgPSBkZXZpY2VfaWQ7CisKIAlpZiAobmVzX2luaXRfc2VyZGVzKG5lc2RldiwgaHdfcmV2LCBwb3J0X2NvdW50LCBuZXNhZGFwdGVyLAogCQkJCQkJCU9uZUdfTW9kZSkpIHsKIAkJa2ZyZWUobmVzYWRhcHRlcik7CkBAIC0xNjM2LDcgKzE2NDQsNiBAQAogCW5lc3ZuaWMtPnBvc3RfY3FwX3JlcXVlc3QgPSBuZXNfcG9zdF9jcXBfcmVxdWVzdDsKIAluZXN2bmljLT5tY3JxX21jYXN0X2ZpbHRlciA9IE5VTEw7CiAKLQlzcGluX2xvY2tfaW5pdCgmbmVzdm5pYy0+bmljLnNxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZuZXN2bmljLT5uaWMucnFfbG9jayk7CiAKIAkvKiBzZXR1cCB0aGUgUlEgKi8KQEAgLTIyNjEsNiArMjI2OCw4IEBACiAKIAkJaWYgKCsraGVhZCA+PSBhZXFfc2l6ZSkKIAkJCWhlYWQgPSAwOworCisJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncyArIE5FU19BRVFfQUxMT0MsIDEgPDwgMTYpOwogCX0KIAl3aGlsZSAoMSk7CiAJYWVxLT5hZXFfaGVhZCA9IGhlYWQ7CkBAIC0yNTQxLDcgKzI1NTAsNyBAQAogewogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IGNvbnRhaW5lcl9vZihjcSwgc3RydWN0IG5lc192bmljLCBuaWNfY3EpOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJm5lc3ZuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5lc3ZuaWMtPm5hcGkpOwogfQogCiAKQEAgLTI2MjIsOSArMjYzMSw5IEBACiAJCQkJCQl9IGVsc2UKIAkJCQkJCQlicmVhazsKIAkJCQkJfQotCQkJCQlpZiAoc2tiKQotCQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQl9CisJCQkJaWYgKHNrYikKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQluZXNuaWMtPnNxX3RhaWwrKzsKIAkJCQluZXNuaWMtPnNxX3RhaWwgJj0gbmVzbmljLT5zcV9zaXplLTE7CiAJCQkJaWYgKHNxX2NxZXMgPiAxMjgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCmluZGV4IGJjMGI0ZGUuLmY0MWE4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTYxLDYgKzYxLDcgQEAKIAlORVNfQ1FfQUNLID0gMHgwMDM0LAogCU5FU19XUUVfQUxMT0MgPSAweDAwNDAsCiAJTkVTX0NRRV9BTExPQyA9IDB4MDA0NCwKKwlORVNfQUVRX0FMTE9DID0gMHgwMDQ4CiB9OwogCiBlbnVtIGluZGV4ZWRfcmVncyB7CkBAIC04NzUsNyArODc2LDYgQEAKIAl1OCByZXBsZW5pc2hpbmdfcnE7CiAJdTggcmVzZXJ2ZWQ7CiAKLQlzcGlubG9ja190IHNxX2xvY2s7CiAJc3BpbmxvY2tfdCBycV9sb2NrOwogfTsKIApAQCAtMTE0Nyw3ICsxMTQ3LDYgQEAKIHN0cnVjdCBuZXNfdm5pYyB7CiAJc3RydWN0IG5lc19pYl9kZXZpY2UgKm5lc2liZGV2OwogCXU2NCBzcV9mdWxsOwotCXU2NCBzcV9sb2NrZWQ7CiAJdTY0IHRzb19yZXF1ZXN0czsKIAl1NjQgc2VnbWVudGVkX3Rzb19yZXF1ZXN0czsKIAl1NjQgbGluZWFyaXplZF9za2JzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCA1N2E0N2NmLi5lY2IxZjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTExLDcgKzExMSw3IEBACiAJbmVzX25pY19jZV9oYW5kbGVyKG5lc2RldiwgbmVzY3EpOwogCiAJaWYgKG5lc2NxLT5jcWVzX3BlbmRpbmcgPT0gMCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJLyogY2xlYXIgb3V0IGNvbXBsZXRlZCBjcWVzIGFuZCBhcm0gKi8KIAkJbmVzX3dyaXRlMzIobmVzZGV2LT5yZWdzK05FU19DUUVfQUxMT0MsIE5FU19DUUVfQUxMT0NfTk9USUZZX05FWFQgfAogCQkJCW5lc2NxLT5jcV9udW1iZXIgfCAobmVzY3EtPmNxZV9hbGxvY3NfcGVuZGluZyA8PCAxNikpOwpAQCAtNDAwLDggKzQwMCw3IEBACiAJaWYgKHNrYl9oZWFkbGVuKHNrYikgPT0gc2tiLT5sZW4pIHsKIAkJaWYgKHNrYl9oZWFkbGVuKHNrYikgPD0gTkVTX0ZJUlNUX0ZSQUdfU0laRSkgewogCQkJbmljX3NxZS0+d3FlX3dvcmRzW05FU19OSUNfU1FfV1FFX0xFTkdUSF8yXzFfSURYXSA9IDA7Ci0JCQluZXNuaWMtPnR4X3NrYltuZXNuaWMtPnNxX2hlYWRdID0gTlVMTDsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCW5lc25pYy0+dHhfc2tiW25lc25pYy0+c3FfaGVhZF0gPSBza2I7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBEZWFsIHdpdGggRnJhZ21lbnRzICovCkBAIC00NTMsNyArNDUyLDYgQEAKIAl1MzIgd3FlX2NvdW50PTE7CiAJdTMyIHNlbmRfcmM7CiAJc3RydWN0IGlwaGRyICppcGg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX2xlMTYgKndxZV9mcmFnbWVudF9sZW5ndGg7CiAJdTMyIG5yX2ZyYWdzOwogCXUzMiBvcmlnaW5hbF9maXJzdF9sZW5ndGg7CkBAIC00ODAsMTMgKzQ3OCw2IEBACiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmICghc3Bpbl90cnlsb2NrKCZuZXNuaWMtPnNxX2xvY2spKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJbmVzdm5pYy0+c3FfbG9ja2VkKys7Ci0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotCX0KLQogCS8qIENoZWNrIGlmIFNRIGlzIGZ1bGwgKi8KIAlpZiAoKCgobmVzbmljLT5zcV90YWlsKyhuZXNuaWMtPnNxX3NpemUqMikpLW5lc25pYy0+c3FfaGVhZCkgJiAobmVzbmljLT5zcV9zaXplIC0gMSkpID09IDEpIHsKIAkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpIHsKQEAgLTQ5OCw3ICs0ODksNiBAQAogCQkJfQogCQl9CiAJCW5lc3ZuaWMtPnNxX2Z1bGwrKzsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTUzMSw3ICs1MjEsNiBAQAogCQkJCQl9CiAJCQkJfQogCQkJCW5lc3ZuaWMtPnNxX2Z1bGwrKzsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNuaWMtPnNxX2xvY2ssIGZsYWdzKTsKIAkJCQluZXNfZGVidWcoTkVTX0RCR19OSUNfVFgsICIlczogSE5JQyBTUSBmdWxsLSBUU08gcmVxdWVzdCBoYXMgdG9vIG1hbnkgZnJhZ3MhXG4iLAogCQkJCQkJbmV0ZGV2LT5uYW1lKTsKIAkJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CkBAIC02NTYsMTcgKzY0NSwxMyBAQAogCQkJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaG9mZnNldCk7CiAJCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbmhvZmZzZXQpOwogCQkJc2VuZF9yYyA9IG5lc19uaWNfc2VuZChza2IsIG5ldGRldik7Ci0JCQlpZiAoc2VuZF9yYyAhPSBORVRERVZfVFhfT0spIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNuaWMtPnNxX2xvY2ssIGZsYWdzKTsKKwkJCWlmIChzZW5kX3JjICE9IE5FVERFVl9UWF9PSykKIAkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJc2VuZF9yYyA9IG5lc19uaWNfc2VuZChza2IsIG5ldGRldik7Ci0JCWlmIChzZW5kX3JjICE9IE5FVERFVl9UWF9PSykgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzbmljLT5zcV9sb2NrLCBmbGFncyk7CisJCWlmIChzZW5kX3JjICE9IE5FVERFVl9UWF9PSykKIAkJCXJldHVybiBORVRERVZfVFhfT0s7Ci0JCX0KIAl9CiAKIAliYXJyaWVyKCk7CkBAIC02NzYsNyArNjYxLDYgQEAKIAkJCQkod3FlX2NvdW50IDw8IDI0KSB8ICgxIDw8IDIzKSB8IG5lc3ZuaWMtPm5pYy5xcF9pZCk7CiAKIAluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNuaWMtPnNxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xMDEyLDcgKzk5Niw2IEBACiAJIlBhdXNlIEZyYW1lcyBSZWNlaXZlZCIsCiAJIkludGVybmFsIFJvdXRpbmcgRXJyb3JzIiwKIAkiU1EgU1cgRHJvcHBlZCBTS0JzIiwKLQkiU1EgTG9ja2VkIiwKIAkiU1EgRnVsbCIsCiAJIlNlZ21lbnRlZCBUU08gUmVxdWVzdHMiLAogCSJSeCBTeW1ib2wgRXJyb3JzIiwKQEAgLTExMjksMTYgKzExMTIsMTcgQEAKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwogCXUzMiBuaWNfY291bnQ7CiAJdTMyIHUzMnRlbXA7CisJdTMyIGluZGV4ID0gMDsKIAogCXRhcmdldF9ldGh0b29sX3N0YXRzLT5uX3N0YXRzID0gTkVTX0VUSFRPT0xfU1RBVF9DT1VOVDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMF0gPSBuZXN2bmljLT5uZXNkZXYtPmxpbmtfc3RhdHVzX2ludGVycnVwdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzFdID0gbmVzdm5pYy0+bGluZWFyaXplZF9za2JzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syXSA9IG5lc3ZuaWMtPnRzb19yZXF1ZXN0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbaW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5saW5rX3N0YXR1c19pbnRlcnJ1cHRzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxpbmVhcml6ZWRfc2ticzsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT50c29fcmVxdWVzdHM7CiAKIAl1MzJ0ZW1wID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsCiAJCQlORVNfSURYX01BQ19UWF9QQVVTRV9GUkFNRVMgKyAobmVzdm5pYy0+bmVzZGV2LT5tYWNfaW5kZXgqMHgyMDApKTsKIAluZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfc2VudCArPSB1MzJ0ZW1wOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szXSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3BhdXNlX2ZyYW1lc19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3BhdXNlX2ZyYW1lc19zZW50OwogCiAJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAogCQkJTkVTX0lEWF9NQUNfUlhfUEFVU0VfRlJBTUVTICsgKG5lc3ZuaWMtPm5lc2Rldi0+bWFjX2luZGV4KjB4MjAwKSk7CkBAIC0xMjA5LDYwICsxMTkzLDU5IEBACiAJCW5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHMgKz0gdTMydGVtcDsKIAl9CiAKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfcmVjZWl2ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzVdID0gbmVzZGV2LT5uZXNhZGFwdGVyLT5uaWNfcnhfZXRoX3JvdXRlX2VycjsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNl0gPSBuZXN2bmljLT50eF9zd19kcm9wcGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s3XSA9IG5lc3ZuaWMtPnNxX2xvY2tlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbOF0gPSBuZXN2bmljLT5zcV9mdWxsOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s5XSA9IG5lc3ZuaWMtPnNlZ21lbnRlZF90c29fcmVxdWVzdHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzEwXSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3N5bWJvbF9lcnJfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMV0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9qYWJiZXJfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxMl0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9vdmVyc2l6ZWRfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxM10gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zaG9ydF9mcmFtZXM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE0XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfZGlzY2FyZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTVdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9vY3RldHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE2XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfZnJhbWVzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxN10gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3R4X29jdGV0czsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMThdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF90eF9mcmFtZXM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE5XSA9IG1oX2RldGVjdGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syMF0gPSBtaF9wYXVzZXNfc2VudDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjFdID0gbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0czsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjJdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjNdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VwdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNF0gPSBhdG9taWNfcmVhZCgmY21fZGlzY29ubmVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syNV0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdGVkcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzI2XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0X3JlcXMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syN10gPSBhdG9taWNfcmVhZCgmY21fcmVqZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzI4XSA9IGF0b21pY19yZWFkKCZtb2RfcXBfdGltb3V0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzI5XSA9IGF0b21pY19yZWFkKCZxcHNfY3JlYXRlZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMwXSA9IGF0b21pY19yZWFkKCZzd19xcHNfZGVzdHJveWVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzFdID0gYXRvbWljX3JlYWQoJnFwc19kZXN0cm95ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMl0gPSBhdG9taWNfcmVhZCgmY21fY2xvc2VzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzNdID0gY21fcGFja2V0c19zZW50OwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNF0gPSBjbV9wYWNrZXRzX2JvdW5jZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM1XSA9IGNtX3BhY2tldHNfY3JlYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzZdID0gY21fcGFja2V0c19yZWNlaXZlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzddID0gY21fcGFja2V0c19kcm9wcGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szOF0gPSBjbV9wYWNrZXRzX3JldHJhbnM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM5XSA9IGNtX2xpc3RlbnNfY3JlYXRlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDBdID0gY21fbGlzdGVuc19kZXN0cm95ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQxXSA9IGNtX2JhY2tsb2dfZHJvcHM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQyXSA9IGF0b21pY19yZWFkKCZjbV9sb29wYmFja3MpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0M10gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfY3JlYXRlZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ0XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19kZXN0cm95ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0NV0gPSBhdG9taWNfcmVhZCgmY21fYWNjZWxfZHJvcHBlZF9wa3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDZdID0gYXRvbWljX3JlYWQoJmNtX3Jlc2V0c19yZWN2ZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ3XSA9IGludF9tb2RfdGltZXJfaW5pdDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDhdID0gaW50X21vZF9jcV9kZXB0aF8xOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0OV0gPSBpbnRfbW9kX2NxX2RlcHRoXzQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzUwXSA9IGludF9tb2RfY3FfZGVwdGhfMTY7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzUxXSA9IGludF9tb2RfY3FfZGVwdGhfMjQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzUyXSA9IGludF9tb2RfY3FfZGVwdGhfMzI7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzUzXSA9IGludF9tb2RfY3FfZGVwdGhfMTI4OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1NF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI1NjsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTVdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1Nl0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU3XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19wYXVzZV9mcmFtZXNfcmVjZWl2ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzZGV2LT5uZXNhZGFwdGVyLT5uaWNfcnhfZXRoX3JvdXRlX2VycjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT50eF9zd19kcm9wcGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnNxX2Z1bGw7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+c2VnbWVudGVkX3Rzb19yZXF1ZXN0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zeW1ib2xfZXJyX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9qYWJiZXJfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X292ZXJzaXplZF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc2hvcnRfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfZGlzY2FyZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X29jdGV0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3R4X29jdGV0czsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3R4X2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBtaF9kZXRlY3RlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBtaF9wYXVzZXNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VwdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9kaXNjb25uZWN0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RlZHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0X3JlcXMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9yZWplY3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmbW9kX3FwX3RpbW91dHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZxcHNfY3JlYXRlZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJnN3X3Fwc19kZXN0cm95ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZxcHNfZGVzdHJveWVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY2xvc2VzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19ib3VuY2VkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfY3JlYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3JlY2VpdmVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3JldHJhbnM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fbGlzdGVuc19jcmVhdGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2JhY2tsb2dfZHJvcHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2xvb3BiYWNrcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19kZXN0cm95ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlbF9kcm9wcGVkX3BrdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9yZXNldHNfcmVjdmQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfdGltZXJfaW5pdDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF80OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMTY7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8yNDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzMyOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMTI4OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMjU2OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5ub19kZXNjOwogCiB9CiAKQEAgLTE1NjgsNiArMTU1MSwxOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBoeV9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmVzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBuZXNfbmV0ZGV2X29wZW4sCisJLm5kb19zdG9wCQk9IG5lc19uZXRkZXZfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQgCT0gbmVzX25ldGRldl9zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG5lc19uZXRkZXZfZ2V0X3N0YXRzLAorCS5uZG9fdHhfdGltZW91dCAJPSBuZXNfbmV0ZGV2X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBuZXNfbmV0ZGV2X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG5lc19uZXRkZXZfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAJPSBuZXNfbmV0ZGV2X3ZsYW5fcnhfcmVnaXN0ZXIsCit9OwogCiAvKioKICAqIG5lc19uZXRkZXZfaW5pdCAtIGluaXRpYWxpemUgbmV0d29yayBkZXZpY2UKQEAgLTE1NzYsNyArMTU3Miw3IEBACiAJCXZvaWQgX19pb21lbSAqbW1pb19hZGRyKQogewogCXU2NCB1NjR0ZW1wOwotCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IE5VTEw7CisJc3RydWN0IG5lc192bmljICpuZXN2bmljOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5pY19xcF9tYXAgKmN1cnJfcXBfbWFwOwogCXUzMiB1MzJ0ZW1wOwpAQCAtMTU4OCwyMiArMTU4NCwxMiBAQAogCQlwcmludGsoS0VSTl9FUlIgUEZYICJuZXN2bmljIGV0aGVyZGV2IGFsbG9jIGZhaWxlZCIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisJbmVzdm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAluZXNfZGVidWcoTkVTX0RCR19JTklULCAibmV0ZGV2ID0gJXAsICVzXG4iLCBuZXRkZXYsIG5ldGRldi0+bmFtZSk7CiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZuZXNkZXYtPnBjaWRldi0+ZGV2KTsKIAotCW5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCW1lbXNldChuZXN2bmljLCAwLCBzaXplb2YoKm5lc3ZuaWMpKTsKLQotCW5ldGRldi0+b3BlbiA9IG5lc19uZXRkZXZfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBuZXNfbmV0ZGV2X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuZXNfbmV0ZGV2X3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBuZXNfbmV0ZGV2X2dldF9zdGF0czsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBuZXNfbmV0ZGV2X3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBuZXNfbmV0ZGV2X3NldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG5lc19uZXRkZXZfc2V0X211bHRpY2FzdF9saXN0OwotCW5ldGRldi0+Y2hhbmdlX210dSA9IG5lc19uZXRkZXZfY2hhbmdlX210dTsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gTkVTX1RYX1RJTUVPVVQ7CiAJbmV0ZGV2LT5pcnEgPSBuZXNkZXYtPnBjaWRldi0+aXJxOwogCW5ldGRldi0+bXR1ID0gRVRIX0RBVEFfTEVOOwpAQCAtMTYxMSwxMiArMTU5NywxMSBAQAogCW5ldGRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKIAluZXRkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CiAJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSElHSERNQTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmbmVzX25ldGRldl9vcHM7CiAJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZuZXNfZXRodG9vbF9vcHM7CiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmbmVzdm5pYy0+bmFwaSwgbmVzX25ldGRldl9wb2xsLCAxMjgpOwogCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJFbmFibGluZyBWTEFOIEluc2VydC9EZWxldGUuXG4iKTsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQluZXRkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBuZXNfbmV0ZGV2X3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAKIAkvKiBGaWxsIGluIHRoZSBwb3J0IHN0cnVjdHVyZSAqLwogCW5lc3ZuaWMtPm5ldGRldiA9IG5ldGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaAppbmRleCBlNjQzMDZiLi5jYzkwYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKaW5kZXggNmYzYmMxYi4uYTI4MjAzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYwppbmRleCBkOTNhNjU2Li43ZTViNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTU1MSw2ICs1NTEsNyBAQAogCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CiAJc3RydWN0IG5lc19hZGFwdGVyICpuZXNhZGFwdGVyID0gbmVzZGV2LT5uZXNhZGFwdGVyOwogCWludCBpID0gMDsKKwlpbnQgcmM7CiAKIAkvKiBmcmVlIHRoZSByZXNvdXJjZXMgKi8KIAlpZiAobmVzZm1yLT5sZWFmX3BibF9jbnQgPT0gMCkgewpAQCAtNTcyLDcgKzU3Myw5IEBACiAJbmVzbXItPmlibXcucmtleSA9IGliZm1yLT5ya2V5OwogCW5lc21yLT5pYm13LnVvYmplY3QgPSBOVUxMOwogCi0JaWYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkICE9IDApIHsKKwlyYyA9IG5lc19kZWFsbG9jX213KCZuZXNtci0+aWJtdyk7CisKKwlpZiAoKHJjID09IDApICYmIChuZXNmbXItPm5lc21yLnBibHNfdXNlZCAhPSAwKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAkJaWYgKG5lc2Ztci0+bmVzbXIucGJsXzRrKSB7CiAJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc2Ztci0+bmVzbXIucGJsc191c2VkOwpAQCAtNTg0LDcgKzU4Nyw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIG5lc19kZWFsbG9jX213KCZuZXNtci0+aWJtdyk7CisJcmV0dXJuIHJjOwogfQogCiAKQEAgLTE4ODYsMjEgKzE4ODksNzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHJvb3RfMjU2CisgKi8KK3N0YXRpYyB1MzIgcm9vdF8yNTYoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwKKwkJICAgIHN0cnVjdCBuZXNfcm9vdF92cGJsICpyb290X3ZwYmwsCisJCSAgICBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqbmV3X3Jvb3QsCisJCSAgICB1MTYgcGJsX2NvdW50XzRrLAorCQkgICAgdTE2IHBibF9jb3VudF8yNTYpCit7CisJdTY0IGxlYWZfcGJsOworCWludCBpLCBqLCBrOworCisJaWYgKHBibF9jb3VudF80ayA9PSAxKSB7CisJCW5ld19yb290LT5wYmxfdmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwKKwkJCQkJCTUxMiwgJm5ld19yb290LT5wYmxfcGJhc2UpOworCisJCWlmIChuZXdfcm9vdC0+cGJsX3ZiYXNlID09IE5VTEwpCisJCQlyZXR1cm4gMDsKKworCQlsZWFmX3BibCA9ICh1NjQpcm9vdF92cGJsLT5wYmxfcGJhc2U7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQluZXdfcm9vdC0+cGJsX3ZiYXNlW2ldLnBhX2xvdyA9CisJCQkJY3B1X3RvX2xlMzIoKHUzMilsZWFmX3BibCk7CisJCQluZXdfcm9vdC0+cGJsX3ZiYXNlW2ldLnBhX2hpZ2ggPQorCQkJCWNwdV90b19sZTMyKCh1MzIpKCgoKHU2NClsZWFmX3BibCkgPj4gMzIpKSk7CisJCQlsZWFmX3BibCArPSAyNTY7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAzOyBpID49IDA7IGktLSkgeworCQkJaiA9IGkgKiAxNjsKKwkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdID0gcm9vdF92cGJsLT5wYmxfdmJhc2VbaV07CisJCQlsZWFmX3BibCA9IGxlMzJfdG9fY3B1KHJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdLnBhX2xvdykgKworCQkJICAgICgoKHU2NClsZTMyX3RvX2NwdShyb290X3ZwYmwtPnBibF92YmFzZVtqXS5wYV9oaWdoKSkKKwkJCQk8PCAzMik7CisJCQlmb3IgKGsgPSAxOyBrIDwgMTY7IGsrKykgeworCQkJCWxlYWZfcGJsICs9IDI1NjsKKwkJCQlyb290X3ZwYmwtPnBibF92YmFzZVtqICsga10ucGFfbG93ID0KKwkJCQkJCWNwdV90b19sZTMyKCh1MzIpbGVhZl9wYmwpOworCQkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2ogKyBrXS5wYV9oaWdoID0KKwkJCQkgICAgY3B1X3RvX2xlMzIoKHUzMikoKCgodTY0KWxlYWZfcGJsKSA+PiAzMikpKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAxOworfQorCiAKIC8qKgogICogbmVzX3JlZ19tcgogICovCiBzdGF0aWMgaW50IG5lc19yZWdfbXIoc3RydWN0IG5lc19kZXZpY2UgKm5lc2Rldiwgc3RydWN0IG5lc19wZCAqbmVzcGQsCiAJCXUzMiBzdGFnLCB1NjQgcmVnaW9uX2xlbmd0aCwgc3RydWN0IG5lc19yb290X3ZwYmwgKnJvb3RfdnBibCwKLQkJZG1hX2FkZHJfdCBzaW5nbGVfYnVmZmVyLCB1MTYgcGJsX2NvdW50LCB1MTYgcmVzaWR1YWxfcGFnZV9jb3VudCwKLQkJaW50IGFjYywgdTY0ICppb3ZhX3N0YXJ0KQorCQlkbWFfYWRkcl90IHNpbmdsZV9idWZmZXIsIHUxNiBwYmxfY291bnRfNGssCisJCXUxNiByZXNpZHVhbF9wYWdlX2NvdW50XzRrLCBpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQsCisJCXUxNiAqYWN0dWFsX3BibF9jbnQsIHU4ICp1c2VkXzRrX3BibHMpCiB7CiAJc3RydWN0IG5lc19od19jcXBfd3FlICpjcXBfd3FlOwogCXN0cnVjdCBuZXNfY3FwX3JlcXVlc3QgKmNxcF9yZXF1ZXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7Ci0JLyogaW50IGNvdW50OyAqLworCXVpbnQgcGdfY250ID0gMDsKKwl1MTYgcGJsX2NvdW50XzI1NjsKKwl1MTYgcGJsX2NvdW50ID0gMDsKKwl1OCAgdXNlXzI1Nl9wYmxzID0gMDsKKwl1OCAgdXNlXzRrX3BibHMgPSAwOworCXUxNiB1c2VfdHdvX2xldmVsID0gKHBibF9jb3VudF80ayA+IDEpID8gMSA6IDA7CisJc3RydWN0IG5lc19yb290X3ZwYmwgbmV3X3Jvb3QgPSB7MCwgMCwgMH07CiAJdTMyIG9wY29kZSA9IDA7CiAJdTE2IG1ham9yX2NvZGU7CiAKQEAgLTE5MTMsNDEgKzE5NzAsNzAgQEAKIAljcXBfcmVxdWVzdC0+d2FpdGluZyA9IDE7CiAJY3FwX3dxZSA9ICZjcXBfcmVxdWVzdC0+Y3FwX3dxZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCS8qIHRyYWNrIFBCTCByZXNvdXJjZXMgKi8KLQlpZiAocGJsX2NvdW50ICE9IDApIHsKLQkJaWYgKHBibF9jb3VudCA+IDEpIHsKLQkJCS8qIFR3byBsZXZlbCBQQkwgKi8KLQkJCWlmICgocGJsX2NvdW50KzEpID4gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIDRLQiBQYmxzIGZvciB0d28gbGV2ZWwgcmVxdWVzdC5cbiIpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9IGVsc2UgewotCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50KzE7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocmVzaWR1YWxfcGFnZV9jb3VudCA+IDMyKSB7Ci0JCQlpZiAocGJsX2NvdW50ID4gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIDRLQiBQYmxzLlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQ7CisJaWYgKHBibF9jb3VudF80aykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKworCQlwZ19jbnQgPSAoKHBibF9jb3VudF80ayAtIDEpICogNTEyKSArIHJlc2lkdWFsX3BhZ2VfY291bnRfNGs7CisJCXBibF9jb3VudF8yNTYgPSAocGdfY250ICsgMzEpIC8gMzI7CisJCWlmIChwZ19jbnQgPD0gMzIpIHsKKwkJCWlmIChwYmxfY291bnRfMjU2IDw9IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKQorCQkJCXVzZV8yNTZfcGJscyA9IDE7CisJCQllbHNlIGlmIChwYmxfY291bnRfNGsgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkKKwkJCQl1c2VfNGtfcGJscyA9IDE7CisJCX0gZWxzZSBpZiAocGdfY250IDw9IDIwNDgpIHsKKwkJCWlmICgoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpICYmCisJCQkgICAgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiAobmVzYWRhcHRlci0+bWF4XzRrcGJsID4+IDEpKSkgeworCQkJCXVzZV80a19wYmxzID0gMTsKKwkJCX0gZWxzZSBpZiAoKHBibF9jb3VudF8yNTYgKyAxKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCkgeworCQkJCXVzZV8yNTZfcGJscyA9IDE7CisJCQkJdXNlX3R3b19sZXZlbCA9IDE7CisJCQl9IGVsc2UgaWYgKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7CisJCQkJdXNlXzRrX3BibHMgPSAxOwogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKHBibF9jb3VudCA+IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgMjU2QiBQYmxzLlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgLT0gcGJsX2NvdW50OwotCQkJfQorCQkJaWYgKChwYmxfY291bnRfNGsgKyAxKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKQorCQkJCXVzZV80a19wYmxzID0gMTsKIAkJfQorCisJCWlmICh1c2VfMjU2X3BibHMpIHsKKwkJCXBibF9jb3VudCA9IHBibF9jb3VudF8yNTY7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQl9IGVsc2UgaWYgKHVzZV80a19wYmxzKSB7CisJCQlwYmxfY291bnQgPSAgcGJsX2NvdW50XzRrOworCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAiT3V0IG9mIFBibHNcbiIpOworCQkJbmVzX2ZyZWVfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwlpZiAodXNlXzI1Nl9wYmxzICYmIHVzZV90d29fbGV2ZWwpIHsKKwkJaWYgKHJvb3RfMjU2KG5lc2Rldiwgcm9vdF92cGJsLCAmbmV3X3Jvb3QsIHBibF9jb3VudF80aywgcGJsX2NvdW50XzI1NikgPT0gMSkgeworCQkJaWYgKG5ld19yb290LnBibF9wYmFzZSAhPSAwKQorCQkJCXJvb3RfdnBibCA9ICZuZXdfcm9vdDsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gcGJsX2NvdW50XzI1NiArIHVzZV90d29fbGV2ZWw7CisJCQl1c2VfMjU2X3BibHMgPSAwOworCisJCQlpZiAocGJsX2NvdW50XzRrID09IDEpCisJCQkJdXNlX3R3b19sZXZlbCA9IDA7CisJCQlwYmxfY291bnQgPSBwYmxfY291bnRfNGs7CisKKwkJCWlmICgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgeworCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgLT0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCisJCQlpZiAodXNlXzRrX3BibHMgPT0gMCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KIAogCW9wY29kZSA9IE5FU19DUVBfUkVHSVNURVJfU1RBRyB8IE5FU19DUVBfU1RBR19SSUdIVFNfTE9DQUxfUkVBRCB8CiAJCQkJCU5FU19DUVBfU1RBR19WQV9UTyB8IE5FU19DUVBfU1RBR19NUjsKQEAgLTE5NzYsMTAgKzIwNjIsOSBAQAogCX0gZWxzZSB7CiAJCXNldF93cWVfNjRiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BBX0xPV19JRFgsIHJvb3RfdnBibC0+cGJsX3BiYXNlKTsKIAkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0JMS19DT1VOVF9JRFgsIHBibF9jb3VudCk7Ci0JCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9MRU5fSURYLAotCQkJCSgoKHBibF9jb3VudCAtIDEpICogNDA5NikgKyAocmVzaWR1YWxfcGFnZV9jb3VudCo4KSkpOworCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfTEVOX0lEWCwgKHBnX2NudCAqIDgpKTsKIAotCQlpZiAoKHBibF9jb3VudCA+IDEpIHx8IChyZXNpZHVhbF9wYWdlX2NvdW50ID4gMzIpKQorCQlpZiAodXNlXzRrX3BibHMpCiAJCQljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9XUUVfT1BDT0RFX0lEWF0gfD0gY3B1X3RvX2xlMzIoTkVTX0NRUF9TVEFHX1BCTF9CTEtfU0laRSk7CiAJfQogCWJhcnJpZXIoKTsKQEAgLTE5OTYsMTMgKzIwODEsMjUgQEAKIAltYWpvcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1ham9yX2NvZGU7CiAJbmVzX3B1dF9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKIAorCWlmICgoIXJldCB8fCBtYWpvcl9jb2RlKSAmJiBwYmxfY291bnQgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHVzZV8yNTZfcGJscykKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCWVsc2UgaWYgKHVzZV80a19wYmxzKQorCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCX0KKwlpZiAobmV3X3Jvb3QucGJsX3BiYXNlKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LCA1MTIsIG5ld19yb290LnBibF92YmFzZSwKKwkJCQkgICAgbmV3X3Jvb3QucGJsX3BiYXNlKTsKKwogCWlmICghcmV0KQogCQlyZXR1cm4gLUVUSU1FOwogCWVsc2UgaWYgKG1ham9yX2NvZGUpCiAJCXJldHVybiAtRUlPOwotCWVsc2UKLQkJcmV0dXJuIDA7CiAKKwkqYWN0dWFsX3BibF9jbnQgPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCSp1c2VkXzRrX3BibHMgPSB1c2VfNGtfcGJsczsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE2NywxOCArMjI2NCwxNCBAQAogCQlwYmxfY291bnQgPSByb290X3BibF9pbmRleDsKIAl9CiAJcmV0ID0gbmVzX3JlZ19tcihuZXNkZXYsIG5lc3BkLCBzdGFnLCByZWdpb25fbGVuZ3RoLCAmcm9vdF92cGJsLAotCQkJYnVmZmVyX2xpc3RbMF0uYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywgaW92YV9zdGFydCk7CisJCQlidWZmZXJfbGlzdFswXS5hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCBpb3ZhX3N0YXJ0LAorCQkJJm5lc21yLT5wYmxzX3VzZWQsICZuZXNtci0+cGJsXzRrKTsKIAogCWlmIChyZXQgPT0gMCkgewogCQluZXNtci0+aWJtci5ya2V5ID0gc3RhZzsKIAkJbmVzbXItPmlibXIubGtleSA9IHN0YWc7CiAJCW5lc21yLT5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfTUVNOwogCQlpYm1yID0gJm5lc21yLT5pYm1yOwotCQluZXNtci0+cGJsXzRrID0gKChwYmxfY291bnQgPiAxKSB8fCAoY3VyX3BibF9pbmRleCA+IDMyKSkgPyAxIDogMDsKLQkJbmVzbXItPnBibHNfdXNlZCA9IHBibF9jb3VudDsKLQkJaWYgKHBibF9jb3VudCA+IDEpIHsKLQkJCW5lc21yLT5wYmxzX3VzZWQrKzsKLQkJfQogCX0gZWxzZSB7CiAJCWtmcmVlKG5lc21yKTsKIAkJaWJtciA9IEVSUl9QVFIoLUVOT01FTSk7CkBAIC0yNDU2LDggKzI1NDksOSBAQAogCQkJCQlzdGFnLCAodW5zaWduZWQgaW50KWlvdmFfc3RhcnQsCiAJCQkJCSh1bnNpZ25lZCBpbnQpcmVnaW9uX2xlbmd0aCwgc3RhZ19pbmRleCwKIAkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24tPmxlbmd0aCwgcGJsX2NvdW50KTsKLQkJCXJldCA9IG5lc19yZWdfbXIoIG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbi0+bGVuZ3RoLCAmcm9vdF92cGJsLAotCQkJCQlmaXJzdF9kbWFfYWRkciwgcGJsX2NvdW50LCAodTE2KWN1cl9wYmxfaW5kZXgsIGFjYywgJmlvdmFfc3RhcnQpOworCQkJcmV0ID0gbmVzX3JlZ19tcihuZXNkZXYsIG5lc3BkLCBzdGFnLCByZWdpb24tPmxlbmd0aCwgJnJvb3RfdnBibCwKKwkJCQkJIGZpcnN0X2RtYV9hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLAorCQkJCQkgJmlvdmFfc3RhcnQsICZuZXNtci0+cGJsc191c2VkLCAmbmVzbXItPnBibF80ayk7CiAKIAkJCW5lc19kZWJ1ZyhORVNfREJHX01SLCAicmV0PSVkXG4iLCByZXQpOwogCkBAIC0yNDY2LDExICsyNTYwLDYgQEAKIAkJCQluZXNtci0+aWJtci5sa2V5ID0gc3RhZzsKIAkJCQluZXNtci0+bW9kZSA9IElXTkVTX01FTVJFR19UWVBFX01FTTsKIAkJCQlpYm1yID0gJm5lc21yLT5pYm1yOwotCQkJCW5lc21yLT5wYmxfNGsgPSAoKHBibF9jb3VudCA+IDEpIHx8IChjdXJfcGJsX2luZGV4ID4gMzIpKSA/IDEgOiAwOwotCQkJCW5lc21yLT5wYmxzX3VzZWQgPSBwYmxfY291bnQ7Ci0JCQkJaWYgKHBibF9jb3VudCA+IDEpIHsKLQkJCQkJbmVzbXItPnBibHNfdXNlZCsrOwotCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWJfdW1lbV9yZWxlYXNlKHJlZ2lvbik7CiAJCQkJa2ZyZWUobmVzbXIpOwpAQCAtMjYwOSwyNCArMjY5OCw2IEBACiAJY3FwX3JlcXVlc3QtPndhaXRpbmcgPSAxOwogCWNxcF93cWUgPSAmY3FwX3JlcXVlc3QtPmNxcF93cWU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQlpZiAobmVzbXItPnBibHNfdXNlZCAhPSAwKSB7Ci0JCWlmIChuZXNtci0+cGJsXzRrKSB7Ci0JCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7Ci0JCQlpZiAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IG5lc2FkYXB0ZXItPm1heF80a3BibCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgNEtCIFBCTHMoJXUpIGhhcyBleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKLQkJCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwsIG5lc2FkYXB0ZXItPm1heF80a3BibCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBuZXNtci0+cGJsc191c2VkOwotCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImZyZWUgMjU2QiBQQkxzKCV1KSBoYXMgZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCi0JCQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCwgbmVzYWRhcHRlci0+bWF4XzI1NnBibCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCW5lc19maWxsX2luaXRfY3FwX3dxZShjcXBfd3FlLCBuZXNkZXYpOwogCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1dRRV9PUENPREVfSURYLAogCQkJTkVTX0NRUF9ERUFMTE9DQVRFX1NUQUcgfCBORVNfQ1FQX1NUQUdfVkFfVE8gfApAQCAtMjY0NCwxMSArMjcxNSw2IEBACiAJCQkiIENRUCBNYWpvcjpNaW5vciBjb2RlcyA9IDB4JTA0WDoweCUwNFhcbiIsCiAJCQlpYl9tci0+cmtleSwgcmV0LCBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZSwgY3FwX3JlcXVlc3QtPm1pbm9yX2NvZGUpOwogCi0JbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywKLQkJCShpYl9tci0+cmtleSAmIDB4MGZmZmZmMDApID4+IDgpOwotCi0Ja2ZyZWUobmVzbXIpOwotCiAJbWFqb3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlOwogCW1pbm9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWlub3JfY29kZTsKIApAQCAtMjY2NCw4ICsyNzMwLDMzIEBACiAJCQkJIiB0byBkZXN0cm95IFNUYWcsIGliX21yPSVwLCBya2V5ID0gMHglMDhYXG4iLAogCQkJCW1ham9yX2NvZGUsIG1pbm9yX2NvZGUsIGliX21yLCBpYl9tci0+cmtleSk7CiAJCXJldHVybiAtRUlPOwotCX0gZWxzZQotCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobmVzbXItPnBibHNfdXNlZCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQlpZiAobmVzbXItPnBibF80aykgeworCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCArPSBuZXNtci0+cGJsc191c2VkOworCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgPiBuZXNhZGFwdGVyLT5tYXhfNGtwYmwpCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSA0S0IgUEJMcygldSkgaGFzICIKKwkJCQkJImV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAorCQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsLAorCQkJCQluZXNhZGFwdGVyLT5tYXhfNGtwYmwpOworCQl9IGVsc2UgeworCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKKwkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzI1NnBibCA+IG5lc2FkYXB0ZXItPm1heF8yNTZwYmwpCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSAyNTZCIFBCTHMoJXUpIGhhcyAiCisJCQkJCSJleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKKwkJCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwsCisJCQkJCW5lc2FkYXB0ZXItPm1heF8yNTZwYmwpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJfQorCW5lc19mcmVlX3Jlc291cmNlKG5lc2FkYXB0ZXIsIG5lc2FkYXB0ZXItPmFsbG9jYXRlZF9tcnMsCisJCQkoaWJfbXItPnJrZXkgJiAweDBmZmZmZjAwKSA+PiA4KTsKKworCWtmcmVlKG5lc21yKTsKKworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCmluZGV4IGFlMGNhOWIuLjVlNDhmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwppbmRleCBhMTkyNTgxLi5kYTYwODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCkBAIC00NDYsMTEgKzQ0NiwxMSBAQAogCQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQkJbHJvX2ZsdXNoX2FsbCgmcHJpdi0+bHJvLmxyb19tZ3IpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAodW5saWtlbHkoaWJfcmVxX25vdGlmeV9jcShwcml2LT5yZWN2X2NxLAogCQkJCQkgICAgICBJQl9DUV9ORVhUX0NPTVAgfAogCQkJCQkgICAgICBJQl9DUV9SRVBPUlRfTUlTU0VEX0VWRU5UUykpICYmCi0JCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKQorCQkgICAgbmFwaV9yZXNjaGVkdWxlKG5hcGkpKQogCQkJZ290byBwb2xsX21vcmU7CiAJfQogCkBAIC00NjIsNyArNDYyLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X3B0cjsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJnByaXYtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogfQogCiBzdGF0aWMgdm9pZCBkcmFpbl90eF9jcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwppbmRleCAwYmQyYTRmLi40MjFhNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwpAQCAtNjYwLDggKzY2MCwxMiBAQAogCiAJcGF0aCA9IF9fcGF0aF9maW5kKGRldiwgcGhkci0+aHdhZGRyICsgNCk7CiAJaWYgKCFwYXRoIHx8ICFwYXRoLT52YWxpZCkgewotCQlpZiAoIXBhdGgpCisJCWludCBuZXdfcGF0aCA9IDA7CisKKwkJaWYgKCFwYXRoKSB7CiAJCQlwYXRoID0gcGF0aF9yZWNfY3JlYXRlKGRldiwgcGhkci0+aHdhZGRyICsgNCk7CisJCQluZXdfcGF0aCA9IDE7CisJCX0KIAkJaWYgKHBhdGgpIHsKIAkJCS8qIHB1dCBwc2V1ZG9oZWFkZXIgYmFjayBvbiBmb3IgbmV4dCB0aW1lICovCiAJCQlza2JfcHVzaChza2IsIHNpemVvZiAqcGhkcik7CkBAIC02NjksNyArNjczLDggQEAKIAogCQkJaWYgKCFwYXRoLT5xdWVyeSAmJiBwYXRoX3JlY19zdGFydChkZXYsIHBhdGgpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJCXBhdGhfZnJlZShkZXYsIHBhdGgpOworCQkJCWlmIChuZXdfcGF0aCkKKwkJCQkJcGF0aF9mcmVlKGRldiwgcGF0aCk7CiAJCQkJcmV0dXJuOwogCQkJfSBlbHNlCiAJCQkJX19wYXRoX2FkZChkZXYsIHBhdGgpOwpAQCAtMTAxNiwxOCArMTAyMSwyMiBAQAogCXByaXYtPmxyby5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBvaWJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCSA9IGlwb2liX29wZW4sCisJLm5kb19zdG9wCQkgPSBpcG9pYl9zdG9wLAorCS5uZG9fY2hhbmdlX210dQkJID0gaXBvaWJfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQJIAkgPSBpcG9pYl9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJID0gaXBvaWJfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAkgPSBpcG9pYl9zZXRfbWNhc3RfbGlzdCwKKwkubmRvX25laWdoX3NldHVwCSA9IGlwb2liX25laWdoX3NldHVwX2RldiwKK307CisKIHN0YXRpYyB2b2lkIGlwb2liX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWRldi0+b3BlbgkJID0gaXBvaWJfb3BlbjsKLQlkZXYtPnN0b3AJCSA9IGlwb2liX3N0b3A7Ci0JZGV2LT5jaGFuZ2VfbXR1CQkgPSBpcG9pYl9jaGFuZ2VfbXR1OwotCWRldi0+aGFyZF9zdGFydF94bWl0CSA9IGlwb2liX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0CQkgPSBpcG9pYl90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJID0gJmlwb2liX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzCQkgPSAmaXBvaWJfaGVhZGVyX29wczsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdAkgPSBpcG9pYl9zZXRfbWNhc3RfbGlzdDsKLQlkZXYtPm5laWdoX3NldHVwCSA9IGlwb2liX25laWdoX3NldHVwX2RldjsKIAogCWlwb2liX3NldF9ldGh0b29sX29wcyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYwppbmRleCAzMTliMTg4Li5lYTllMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKQEAgLTQwMSwxMyArNDAxLDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWx1cmU7CiAKLQlpc2VyX2RiZygicGF0aC5tdHUgaXMgJWQgc2V0dGluZyBpdCB0byAlZFxuIiwKLQkJIGNtYV9pZC0+cm91dGUucGF0aF9yZWMtPm10dSwgSUJfTVRVXzEwMjQpOwotCi0JLyogd2UgbXVzdCBzZXQgdGhlIE1UVSB0byAxMDI0IGFzIHRoaXMgaXMgd2hhdCB0aGUgdGFyZ2V0IGlzIGFzc3VtaW5nICovCi0JaWYgKGNtYV9pZC0+cm91dGUucGF0aF9yZWMtPm10dSA+IElCX01UVV8xMDI0KQotCQljbWFfaWQtPnJvdXRlLnBhdGhfcmVjLT5tdHUgPSBJQl9NVFVfMTAyNDsKLQogCW1lbXNldCgmY29ubl9wYXJhbSwgMCwgc2l6ZW9mIGNvbm5fcGFyYW0pOwogCWNvbm5fcGFyYW0ucmVzcG9uZGVyX3Jlc291cmNlcyA9IDQ7CiAJY29ubl9wYXJhbS5pbml0aWF0b3JfZGVwdGggICAgID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCBlZDhiYWEwLi43YTdhMDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC05NCwxMSArOTQsOCBAQAogc3RhdGljIGludCBldmRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgaW50IGV2ZGV2X2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IGlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggNmYyMzY2Mi4uNDIyNGYwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC0xNTksMTIgKzE1OSw5IEBACiAKIHN0YXRpYyBpbnQgam95ZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3Qgam95ZGV2X2NsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgdm9pZCBqb3lkZXZfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYwppbmRleCBlNTAwNDdiLi43N2NmZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKQEAgLTMsNyArMyw3IEBACiAgKglCYXNlZCBvbiBkcml2ZXJzL3VzYi9pZm9yY2UuYwogICoKICAqCUNvcHlyaWdodCBZYWVnYXNoaSBUYWtlc2hpLCAyMDAxCi0gKglBZHJpYW4gTWNNZW5hbWluLCAyMDA4CisgKglBZHJpYW4gTWNNZW5hbWluLCAyMDA4IC0gMjAwOQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI5LDcgKzI5LDcgQEAKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptYXBsZWRldiA9IG1xLT5kZXY7CiAJc3RydWN0IGRjX3BhZCAqcGFkID0gbWFwbGVfZ2V0X2RydmRhdGEobWFwbGVkZXYpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBhZC0+ZGV2OwotCXVuc2lnbmVkIGNoYXIgKnJlcyA9IG1xLT5yZWN2YnVmOworCXVuc2lnbmVkIGNoYXIgKnJlcyA9IG1xLT5yZWN2YnVmLT5idWY7CiAKIAlidXR0b25zID0gfmxlMTZfdG9fY3B1cCgoX19sZTE2ICopKHJlcyArIDgpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwppbmRleCAyMmYxN2E1Li41YWEyMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBTRUdBIERyZWFtY2FzdCBrZXlib2FyZCBkcml2ZXIKICAqIEJhc2VkIG9uIGRyaXZlcnMvdXNiL3VzYmtiZC5jCi0gKiBDb3B5cmlnaHQgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQotICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IEFkcmlhbiBNY01lbmFtaW4sIDIwMDcsIDIwMDgKKyAqIENvcHlyaWdodCAoYykgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQorICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluLCAyMDA3IC0gMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIE5SX1NDQU5DT0RFUyAyNTYKIAotTU9EVUxFX0FVVEhPUigiWUFFR0FTSEkgVGFrZXNoaSwgQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiA8YWRyaWFuQG1jbWVuLmRlbW9uLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNFR0EgRHJlYW1jYXN0IGtleWJvYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKIAkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBsZV9rZXliOiAiCisJCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5Y29kZSwgMSk7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAibWFwbGVfa2V5YjogIgorCQkJCWRldl9kYmcoJmRldi0+ZGV2LAogCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcHJlc3NlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTQwLDcgKzE0MCw3IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19rYmQgKmtiZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKLQl1bnNpZ25lZCBsb25nICpidWYgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKShtcS0+cmVjdmJ1Zi0+YnVmKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkIGFsd2F5cyBnZXQgdGhlIGxvY2sgYmVjYXVzZSB0aGUgb25seQpAQCAtMTU5LDIyICsxNTksMjcgQEAKIAogc3RhdGljIGludCBwcm9iZV9tYXBsZV9rYmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKLQlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnY7CiAJaW50IGksIGVycm9yOwogCXN0cnVjdCBkY19rYmQgKmtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCi0JaWYgKCEobWRldi0+ZnVuY3Rpb24gJiBNQVBMRV9GVU5DX0tFWUJPQVJEKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCW1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCiAJa2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRjX2tiZCksIEdGUF9LRVJORUwpOwotCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWtiZCB8fCAhaWRldikgeworCWlmICgha2JkKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KIAorCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlkZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaWRldl9hbGxvYzsKKwl9CisKIAlrYmQtPmRldiA9IGlkZXY7CiAJbWVtY3B5KGtiZC0+a2V5Y29kZSwgZGNfa2JkX2tleWNvZGUsIHNpemVvZihrYmQtPmtleWNvZGUpKTsKIApAQCAtMTk1LDcgKzIwMCw3IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpZGV2KTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX3JlZ2lzdGVyOwogCiAJLyogTWFwbGUgcG9sbGluZyBpcyBsb2NrZWQgdG8gVkJMQU5LIC0gd2hpY2ggbWF5IGJlIGp1c3QgNTAvcyAqLwogCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgZGNfa2JkX2NhbGxiYWNrLCBIWi81MCwKQEAgLTIwNywxMCArMjEyLDEyIEBACiAKIAlyZXR1cm4gZXJyb3I7CiAKLWZhaWw6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7Ci0Ja2ZyZWUoa2JkKTsKK2ZhaWxfcmVnaXN0ZXI6CiAJbWFwbGVfc2V0X2RydmRhdGEobWRldiwgTlVMTCk7CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CitmYWlsX2lkZXZfYWxsb2M6CisJa2ZyZWUoa2JkKTsKK2ZhaWw6CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKaW5kZXggNWM4YTFiYy4uZTE0ODBmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpAQCAtMjE5LDYgKzIxOSw4IEBACiAJCSAgcGRhdGEtPnNjYW5fdGltaW5nLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CiAJaW93cml0ZTE2KDAsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWU9VVERSX09GRlMpOwogCWlvd3JpdGUxNihLWUNSMl9JUlFfTEVWRUwsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKICBlcnI1OgogCWZyZWVfaXJxKGlycSwgcGRldik7CkBAIC0yNTMsMTcgKzI1NSwzMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoX2tleXNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCi0jZGVmaW5lIHNoX2tleXNjX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzaF9rZXlzY19yZXN1bWUgTlVMTAorCXZhbHVlID0gaW9yZWFkMTYocHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXZhbHVlIHw9IDB4ODA7CisJZWxzZQorCQl2YWx1ZSAmPSB+MHg4MDsKKworCWlvd3JpdGUxNih2YWx1ZSwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfa2V5c2NfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX2tleXNjX3N1c3BlbmQsCit9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2tleXNjX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNoX2tleXNjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfa2V5c2NfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHNoX2tleXNjX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzaF9rZXlzY19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNoX2tleXNjIiwKKwkJLnBtCT0gJnNoX2tleXNjX2Rldl9wbV9vcHMsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCmluZGV4IGVmOTlhN2UuLjE3ZmQ2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKQEAgLTQwMywxMiArNDAzLDkgQEAKIAogc3RhdGljIGludCBtb3VzZWRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IG1vdXNlZGV2X2NsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY2xpZW50LT5mYXN5bmMpOwogfQogCiBzdGF0aWMgdm9pZCBtb3VzZWRldl9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCmluZGV4IDA2YmJkMGUuLmIwMzAwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwpAQCAtNTgsMTAgKzU4LDggQEAKIHN0YXRpYyBpbnQgc2VyaW9fcmF3X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7CiAJc3RydWN0IHNlcmlvX3Jhd19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7Ci0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VyaW9fcmF3ICpzZXJpb19yYXdfbG9jYXRlKGludCBtaW5vcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCmluZGV4IDFiZDg5NjAuLmZlYTViNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYwpAQCAtMjU3LDkgKzI1Nyw5IEBACiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICJhY3QyMDAwX2lzYV9yZWNlaXZlOiBJbnZhbGlkIENBUEkgbXNnXG4iKTsKIAkJCQkJewotCQkJCQkJaW50IGk7IF9fdTggKnA7IF9fdTggKmM7IF9fdTggdG1wWzMwXTsKLQkJCQkJCWZvciAoaSA9IDAsIHAgPSAoX191OCAqKSZjYXJkLT5pZGF0LmlzYS5yY3ZoZHIsIGMgPSB0bXA7IGkgPCA4OyBpKyspCi0JCQkJCQkJYyArPSBzcHJpbnRmKGMsICIlMDJ4ICIsICoocCsrKSk7CisJCQkJCQlpbnQgaTsgX191OCAqcDsgX191OCAqdDsgX191OCB0bXBbMzBdOworCQkJCQkJZm9yIChpID0gMCwgcCA9IChfX3U4ICopJmNhcmQtPmlkYXQuaXNhLnJjdmhkciwgdCA9IHRtcDsgaSA8IDg7IGkrKykKKwkJCQkJCQl0ICs9IHNwcmludGYodCwgIiUwMnggIiwgKihwKyspKTsKIAkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFjdDIwMDBfaXNhX3JlY2VpdmU6ICVzXG4iLCB0bXApOwogCQkJCQl9CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDFiNWJmODcuLjNlNDY4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCWxpc3RfZGVsKCZtcC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGltaW5vcl9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWlmIChtcC0+dHR5c2tiKSBrZnJlZV9za2IobXAtPnR0eXNrYik7CisJa2ZyZWVfc2tiKG1wLT50dHlza2IpOwogCW1wLT50dHlza2IgPSBOVUxMOwogCXNrYl9xdWV1ZV9wdXJnZSgmbXAtPmlucXVldWUpOwogCXNrYl9xdWV1ZV9wdXJnZSgmbXAtPm91dHF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwppbmRleCBjMjkyMDhiLi41MGVkNzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCkBAIC0yMzksNiArMjM5LDcgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZCAqY2FwaV9kcml2ZXJfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCiB7CiAJcmVhZF9sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmNhcGlfZHJpdmVycywgKnBvcyk7CkBAIC0yNTAsNiArMjUxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY2FwaV9kcml2ZXJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKQogewogCXJlYWRfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCmluZGV4IDAwMTdlNTAuLjljYTg4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIG1lbnVjb25maWcgSVNETl9EUlZfR0lHQVNFVAotCXRyaXN0YXRlICJTaWVtZW5zIEdpZ2FzZXQgc3VwcG9ydCAoaXNkbikiCisJdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IgogCXNlbGVjdCBDUkNfQ0NJVFQKIAlzZWxlY3QgQklUUkVWRVJTRQogCWhlbHAKQEAgLTExLDExICsxMSwxMSBAQAogCSAgb25lIG9mIHRoZSBjb25uZWN0aW9uIHNwZWNpZmljIHBhcnRzIHRoYXQgZm9sbG93LgogCSAgVGhpcyB3aWxsIGJ1aWxkIGEgbW9kdWxlIGNhbGxlZCAiZ2lnYXNldCIuCiAKLWlmIElTRE5fRFJWX0dJR0FTRVQhPW4KK2lmIElTRE5fRFJWX0dJR0FTRVQKIAogY29uZmlnIEdJR0FTRVRfQkFTRQogCXRyaXN0YXRlICJHaWdhc2V0IGJhc2Ugc3RhdGlvbiBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVCAmJiBVU0IKKwlkZXBlbmRzIG9uIFVTQgogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgaW50ZXJmYWNlIG9mIHRoZSBHaWdhc2V0CiAJICBiYXNlIGZvciBjb25uZWN0aW9uIHRvIHlvdXIgc3lzdGVtLgpAQCAtMjMsNyArMjMsNyBAQAogCiBjb25maWcgR0lHQVNFVF9NMTA1CiAJdHJpc3RhdGUgIkdpZ2FzZXQgTTEwNSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVCAmJiBVU0IKKwlkZXBlbmRzIG9uIFVTQgogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB0aGUgR2lnYXNldCBiYXNlIHZpYSBERUNUCiAJICB1c2luZyBhIEdpZ2FzZXQgTTEwNSAoU2ludXMgNDUgRGF0YSAyKSBVU0IgREVDVCBkZXZpY2UuCkBAIC0zMSw3ICszMSw2IEBACiAKIGNvbmZpZyBHSUdBU0VUX00xMDEKIAl0cmlzdGF0ZSAiR2lnYXNldCBNMTAxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBHaWdhc2V0IGJhc2UgdmlhIERFQ1QKIAkgIHVzaW5nIGEgR2lnYXNldCBNMTAxIChTaW51cyA0NSBEYXRhIDEpIFJTMjMyIERFQ1QgZGV2aWNlLgpAQCAtNDgsNyArNDcsNiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBVU0IgcmVxdWVzdHMgd2Ugb25seSBrbm93IGZyb20KIAkgIHJldmVyc2UgZW5naW5lZXJpbmcgKGN1cnJlbnRseSBNMTA1IG9ubHkpLiBJZiB5b3UgbmVlZAotCSAgZmVhdHVyZXMgbGlrZSBjb25maWd1cmF0aW9uIG1vZGUgb2YgTTEwNSwgc2F5IHllcy4gSWYgeW91Ci0JICBjYXJlIGFib3V0IHlvdXIgZGV2aWNlLCBzYXkgbm8uCisJICBmZWF0dXJlcyBsaWtlIGNvbmZpZ3VyYXRpb24gbW9kZSBvZiBNMTA1LCBzYXkgeWVzLgogCi1lbmRpZiAjIElTRE5fRFJWX0dJR0FTRVQgIT0gbgorZW5kaWYgIyBJU0ROX0RSVl9HSUdBU0VUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwppbmRleCBhYzI0NWU3Li4zMDcxYTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKQEAgLTM4OSw4ICszODksNyBAQAogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAKIAkvKiBhZGFwdGVkIGZyb20gcGxhdGZvcm1fZGV2aWNlX3JlbGVhc2UoKSBpbiBkcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyAqLwogCS8vRklYTUUgaXMgdGhpcyBhY3R1YWxseSBuZWNlc3Nhcnk/CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwppbmRleCBmYmE2MWY2Li5kNzgzODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKQEAgLTI3OCwxNyArMjc4LDE3IEBACiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X21vZGVtX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIG9sZF9zdGF0ZSwKIAkJCQkgIHVuc2lnbmVkIG5ld19zdGF0ZSkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogc3RhdGljIGludCBnaWdhc2V0X3NldF9saW5lX2N0cmwoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNmbGFnKQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfYmF1ZF9yYXRlKHN0cnVjdCBjYXJkc3RhdGUgKmNzLCB1bnNpZ25lZCBjZmxhZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KICNlbmRpZgogCkBAIC01NzcsNyArNTc3LDcgQEAKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgxOSwgMHg0MSwKIAkJCSAgICAgICAwLCAwLCAmYnVmLCA2LCAyMDAwKTsKICNlbHNlCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYwppbmRleCA4NDMxOGVjLi4zM2NlODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKICAgICAgICAgcEMtPnhidWZmZXJbNV0gPSAoYnl0ZSkocnhfZG1hX21hZ2ljID4+ICA4KTsKICAgICAgICAgcEMtPnhidWZmZXJbNl0gPSAoYnl0ZSkocnhfZG1hX21hZ2ljID4+IDE2KTsKICAgICAgICAgcEMtPnhidWZmZXJbN10gPSAoYnl0ZSkocnhfZG1hX21hZ2ljID4+IDI0KTsKLSAgICAgICAgcEMtPnhidWZmZXJbOF0gPSAoYnl0ZSlESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkU7CisJcEMtPnhidWZmZXJbOF0gPSAoYnl0ZSkoRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFICYgMHhGRik7CiAgICAgICAgIHBDLT54YnVmZmVyWzldID0gKGJ5dGUpKERJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRSA+PiA4KTsKICAgICAgICAgcEMtPnhidWZmZXJbMTBdID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKaW5kZXggNGNjOTRmMi4uMzFmOTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCkBAIC0xMTk0LDcgKzExOTQsOCBAQAogLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gZm9yIGVhY2ggbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1ieXRlIGNvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgY2g7CiAgIHdvcmQgaTsKQEAgLTE0MTEsNyArMTQxMiw4IEBACiAgIHJldHVybiAyOwogfQogCi1ieXRlIGNvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCVBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgaSwgSW5mbzsKICAgd29yZCBSZWplY3Q7CkBAIC0xNTY3LDEzICsxNTY5LDE1IEBACiAgIHJldHVybiAxOwogfQogCi1ieXRlIGNvbm5lY3RfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgY29ubmVjdF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImNvbm5lY3RfYV9yZXMiKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbzsKICAgd29yZCBpOwpAQCAtMTYyOCw3ICsxNjMyLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImRpc2Nvbm5lY3RfcmVzIikpOwogICBpZihwbGNpKQpAQCAtMTY1NSw3ICsxNjYwLDggQEAKICAgcmV0dXJuIDA7CiB9CiAKLWJ5dGUgbGlzdGVuX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGxpc3Rlbl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbzsKICAgYnl0ZSBpOwpAQCAtMTcwNCw3ICsxNzEwLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGluZm9fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGluZm9fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgaTsKICAgQVBJX1BBUlNFICogYWk7CkBAIC0xODEzLDEzICsxODIwLDE1IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBpbmZvX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBpbmZvX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiaW5mb19yZXMiKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBhbGVydF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgYWxlcnRfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm87CiAgIGJ5dGUgcmV0OwpAQCAtMTg0OSw3ICsxODU4LDggQEAKICAgcmV0dXJuIHJldDsKIH0KIAotYnl0ZSBmYWNpbGl0eV9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZmFjaWxpdHlfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbyA9IDA7CiAgIHdvcmQgaSAgICA9IDA7CkBAIC0yNTk5LDEzICsyNjA5LDE1IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBmYWNpbGl0eV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZmFjaWxpdHlfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJmYWNpbGl0eV9yZXMiKSk7CiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm8gPSAwOwogICBieXRlIHJlcTsKQEAgLTI4MzksNyArMjg1MSw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAgIEFQSV9QQVJTRSAqIG5jcGk7CkBAIC0yOTU0LDcgKzI5NjcsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM19hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogCkBAIC0yOTc0LDcgKzI5ODgsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvOwogICB3b3JkIG5jY2k7CkBAIC0zMDMwLDcgKzMwNDUsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkaXNjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogICB3b3JkIGk7CkBAIC0zMDg2LDcgKzMxMDIsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGF0YV9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkYXRhX2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgTkNDSSAgICpuY2NpX3B0cjsKICAgREFUQV9CM19ERVNDICAgKmRhdGE7CkBAIC0zMTYzLDcgKzMxODAsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGF0YV9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBkYXRhX2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuOwogICB3b3JkIG5jY2k7CkBAIC0zMTk2LDcgKzMyMTQsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgcmVzZXRfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgcmVzZXRfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvOwogICB3b3JkIG5jY2k7CkBAIC0zMjM3LDcgKzMyNTYsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgcmVzZXRfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgcmVzZXRfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBuY2NpOwogCkBAIC0zMjYxLDcgKzMyODEsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgY29ubmVjdF9iM190OTBfYV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2IzX3Q5MF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAgIEFQSV9QQVJTRSAqIG5jcGk7CkBAIC0zMjk1LDcgKzMzMTYsOCBAQAogfQogCiAKLWJ5dGUgc2VsZWN0X2JfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIHNlbGVjdF9iX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICB3b3JkIEluZm89MDsKICAgd29yZCBpOwpAQCAtODY4OSw3ICs4NzExLDcgQEAKIC8qIHNlbmQgYSByZXF1ZXN0IGZvciB0aGUgc2lnbmFsaW5nIGVudGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCBzaWdfcmVxKFBMQ0kgICAqIHBsY2ksIGJ5dGUgcmVxLCBieXRlIElkKQorc3RhdGljIHZvaWQgc2lnX3JlcShQTENJICpwbGNpLCBieXRlIHJlcSwgYnl0ZSBJZCkKIHsKICAgaWYoIXBsY2kpIHJldHVybjsKICAgaWYocGxjaS0+YWRhcHRlci0+YWRhcHRlcl9kaXNhYmxlZCkgcmV0dXJuOwpAQCAtODc4OSw3ICs4ODExLDcgQEAKICAgZGJ1ZygxLGRwcmludGYoInNlbmRfb2siKSk7CiB9CiAKLXZvaWQgc2VuZF9kYXRhKFBMQ0kgICAqIHBsY2kpCitzdGF0aWMgdm9pZCBzZW5kX2RhdGEoUExDSSAqcGxjaSkKIHsKICAgRElWQV9DQVBJX0FEQVBURVIgICAqIGE7CiAgIERBVEFfQjNfREVTQyAgICogZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwppbmRleCBmMGUxNGRmLi42NDFhOWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCkBAIC01Niw4ICs1Niw4IEBACiBzdGF0aWMgaW50IEhGQ19jbnQ7CiBzdGF0aWMgdWludCBkZWJ1ZzsKIHN0YXRpYyB1aW50IHBvbGwsIHRpY3M7Ci1zdHJ1Y3QgdGltZXJfbGlzdCBoZmNfdGw7Ci11MzIJaGZjX2ppZmZpZXM7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgaGZjX3RsOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaGZjX2ppZmZpZXM7CiAKIE1PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKaW5kZXggYmE2OTI1Zi4uOWM0MjdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbUlTRE5ody5oPgogI2luY2x1ZGUgImhmY3N1c2IuaCIKIAotY29uc3QgY2hhciAqaGZjc3VzYl9yZXYgPSAiUmV2aXNpb246IDAuMy4zIChzb2NrZXQpLCAyMDA4LTExLTA1IjsKK3N0YXRpYyBjb25zdCBjaGFyICpoZmNzdXNiX3JldiA9ICJSZXZpc2lvbjogMC4zLjMgKHNvY2tldCksIDIwMDgtMTEtMDUiOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogc3RhdGljIGludCBwb2xsID0gREVGQVVMVF9UUkFOU1BfQlVSU1RfU1o7CkBAIC05NzQsNyArOTc0LDcgQEAKIAlzcGluX3VubG9jaygmaHctPmxvY2spOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogZmlsbF9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLAogCSAgICAgIHZvaWQgKmJ1ZiwgaW50IG51bV9wYWNrZXRzLCBpbnQgcGFja2V0X3NpemUsIGludCBpbnRlcnZhbCwKIAkgICAgICB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCkKQEAgLTE3MjAsNyArMTcyMCw3IEBACiAKIAogLyogSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gKi8KLWludAorc3RhdGljIGludAogc2V0dXBfaGZjc3VzYihzdHJ1Y3QgaGZjc3VzYiAqaHcpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oCmluZGV4IDA5ODQ4NmIuLjQzZWZlNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmgKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaApAQCAtMTk4LDcgKzE5OCw3IEBACiB9OwogCiAvKiBzdHJpbmcgZGVzY3JpcHRpb24gb2YgY2hvc2VuIGNvbmZpZyAqLwotY2hhciAqY29uZl9zdHJbXSA9IHsKK3N0YXRpYyBjaGFyICpjb25mX3N0cltdID0gewogCSI0IEludGVycnVwdCBJTiArIDMgSXNvY2hyb24gT1VUIiwKIAkiMyBJbnRlcnJ1cHQgSU4gKyAzIElzb2Nocm9uIE9VVCIsCiAJIjQgSXNvY2hyb24gSU4gKyAzIElzb2Nocm9uIE9VVCIsCkBAIC0zMTYsNyArMzE2LDcgQEAKICNkZWZpbmUgSEZDX01BWF9URV9MQVlFUjFfU1RBVEUgOAogI2RlZmluZSBIRkNfTUFYX05UX0xBWUVSMV9TVEFURSA0CiAKLWNvbnN0IGNoYXIgKkhGQ19URV9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfVEVfTEFZRVIxX1NUQVRFICsgMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqSEZDX1RFX0xBWUVSMV9TVEFURVNbSEZDX01BWF9URV9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKIAkiVEUgRjAgLSBSZXNldCIsCiAJIlRFIEYxIC0gUmVzZXQiLAogCSJURSBGMiAtIFNlbnNpbmciLApAQCAtMzI4LDcgKzMyOCw3IEBACiAJIlRFIEY4IC0gTG9zdCBmcmFtaW5nIiwKIH07CiAKLWNvbnN0IGNoYXIgKkhGQ19OVF9MQVlFUjFfU1RBVEVTW0hGQ19NQVhfTlRfTEFZRVIxX1NUQVRFICsgMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqSEZDX05UX0xBWUVSMV9TVEFURVNbSEZDX01BWF9OVF9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKIAkiTlQgRzAgLSBSZXNldCIsCiAJIk5UIEcxIC0gRGVhY3RpdmUiLAogCSJOVCBHMiAtIFBlbmRpbmcgYWN0aXZhdGlvbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCmluZGV4IDdjNTZjNDQuLjAyNWEyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCkBAIC0yNCw3ICsyNCw2IEBACiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjU5LjIuNCAkIjsKIAogZXh0ZXJuIHN0cnVjdCBJc2RuQ2FyZCBjYXJkc1tdOwotZXh0ZXJuIGludCBucmNhcmRzOwogCiBzdGF0aWMgaW50IGluaXRfYl9zdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbnAsIGludCBpbmNvbWluZyk7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2Jfc3Qoc3RydWN0IENoYW5uZWwgKmNoYW5wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwppbmRleCBkZWQ5ZDBiLi40ZmFiMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCkBAIC0zNjEsMTIgKzM2MSw2IEBACiAKIGludCBucmNhcmRzOwogCi1leHRlcm4gY29uc3QgY2hhciAqbDFfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbDJfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbDNfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqbGxpX3JldmlzaW9uOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnRlaV9yZXZpc2lvbjsKLQogY2hhciAqSGlTYXhfZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKQogewogCWNoYXIgKnJldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKaW5kZXggY2YwODI2Ni4uMjBkNzY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKQEAgLTE2LDggKzE2LDYgQEAKICNpbmNsdWRlICJoZmNfMmJkczAuaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpoZmNzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xMC4yLjQgJCI7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAppbmRleCBlOGQ0MjlmLi5mODUyNzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaApAQCAtMTIxLDYgKzEyMSwxNSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCitleHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKK2V4dGVybiBpbnQgbnJjYXJkczsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmwxX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmwyX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmwzX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbjsKK2V4dGVybiBjb25zdCBjaGFyICp0ZWlfcmV2aXNpb247CisKIC8qIGluY2x1ZGUgbDNkc3MxICYgbmkxIHNwZWNpZmljIHByb2Nlc3Mgc3RydWN0dXJlcywgYnV0IG5vIG90aGVyIGRlZmluZXMgKi8KICNpZmRlZiBDT05GSUdfSElTQVhfRVVSTwogICAjZGVmaW5lIGwzZHNzMV9wcm9jZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKaW5kZXggYTE0MjA0ZS4uMzE3ZjE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwpAQCAtMTgsMTIgKzE4LDEyIEBACiAgKgogICovCiAKLWNvbnN0IGNoYXIgKmwxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi40Ni4yLjUgJCI7Ci0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAorY29uc3QgY2hhciAqbDFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjQ2LjIuNSAkIjsKKwogI2RlZmluZSBUSU1FUjNfVkFMVUUgNzAwMAogCiBzdGF0aWMgc3RydWN0IEZzbSBsMWZzbV9iOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCmluZGV4IGExMGRmYTguLjU1NjlhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKQEAgLTQ4LDggKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpTZWRsYmF1ZXJfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjM0LjIuNiAkIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgKlNlZGxiYXVlcl9UeXBlc1tdID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYwppbmRleCA0ODU4MTMzLi4zY2EwYmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSAiaXNhYy5oIgogI2luY2x1ZGUgImhzY3guaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci0KIHN0YXRpYyBjb25zdCBjaGFyICp0ZWxlczBfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE1LjIuNCAkIjsKIAogI2RlZmluZSBURUxFU19JT01FTV9TSVpFCTB4NDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKaW5kZXggNWRjOWYxYS4uZTlmNWJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImhzY3guaCIKICNpbmNsdWRlICJpc2RubDEuaCIKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiBzdGF0aWMgY29uc3QgY2hhciAqdGVsZXMzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9jbG9jay5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMKaW5kZXggNDRkOWMzZC4uZjFiYmM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMKQEAgLTQxLDExICs0MSwxMSBAQAogCiBzdGF0aWMgdV9pbnQgKmRlYnVnOwogc3RhdGljIExJU1RfSEVBRChpY2xvY2tfbGlzdCk7Ci1ERUZJTkVfUldMT0NLKGljbG9ja19sb2NrKTsKLXUxNglpY2xvY2tfY291bnQ7CQkvKiBjb3VudGVyIG9mIGxhc3QgY2xvY2sgKi8KLXN0cnVjdAl0aW1ldmFsIGljbG9ja190djsJLyogdGltZSBzdGFtcCBvZiBsYXN0IGNsb2NrICovCi1pbnQJaWNsb2NrX3R2X3ZhbGlkOwkvKiBhbHJlYWR5IHJlY2VpdmVkIG9uZSB0aW1lc3RhbXAgKi8KLXN0cnVjdAltSVNETmNsb2NrICppY2xvY2tfY3VycmVudDsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGljbG9ja19sb2NrKTsKK3N0YXRpYyB1MTYgaWNsb2NrX2NvdW50OwkJLyogY291bnRlciBvZiBsYXN0IGNsb2NrICovCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgaWNsb2NrX3R2OwkvKiB0aW1lIHN0YW1wIG9mIGxhc3QgY2xvY2sgKi8KK3N0YXRpYyBpbnQgaWNsb2NrX3R2X3ZhbGlkOwkJLyogYWxyZWFkeSByZWNlaXZlZCBvbmUgdGltZXN0YW1wICovCitzdGF0aWMgc3RydWN0IG1JU0ROY2xvY2sgKmljbG9ja19jdXJyZW50OwogCiB2b2lkCiBtSVNETl9pbml0X2Nsb2NrKHVfaW50ICpkcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi90aW1lcmRldi5jIGIvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKaW5kZXggZjJiMzIxOC4uYmJkOTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMKQEAgLTE1Miw4ICsxNTIsNyBAQAogCXVfbG9uZwkJCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyLT5kZXYtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmdGltZXItPmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5saXN0LCAmdGltZXItPmRldi0+ZXhwaXJlZCk7CisJbGlzdF9tb3ZlX3RhaWwoJnRpbWVyLT5saXN0LCAmdGltZXItPmRldi0+ZXhwaXJlZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXItPmRldi0+bG9jaywgZmxhZ3MpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdGltZXItPmRldi0+d2FpdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKaW5kZXggNWJhMmE4Ny4uZTA3NWU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwpAQCAtMzQ3LDggKzM0Nyw3IEBACiAJCWlmIChkZXYtPnJlYWRfZnJhbWUpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJwY2JpdF9yZWNlaXZlOiBUeXBlIDAgZnJhbWUgYW5kIHJlYWRfZnJhbWUgIT0gTlVMTFxuIik7CiAJCQkvKiBkaXNjYXJkIHByZXZpb3VzIHF1ZXVlZCBmcmFtZSAqLwotCQkJaWYgKGRldi0+cmVhZF9mcmFtZS0+c2tiKQotCQkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CisJCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOwogCQkJa2ZyZWUoZGV2LT5yZWFkX2ZyYW1lKTsKIAkJCWRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CiAJCX0KQEAgLTYwMSw4ICs2MDAsNyBAQAogCWRldi0+d19idXN5ID0gZGV2LT5yX2J1c3kgPSAxOwogCiAJaWYgKGRldi0+cmVhZF9mcmFtZSkgewotCQlpZiAoZGV2LT5yZWFkX2ZyYW1lLT5za2IpCi0JCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOworCQlrZnJlZV9za2IoZGV2LT5yZWFkX2ZyYW1lLT5za2IpOwogCQlrZnJlZShkZXYtPnJlYWRfZnJhbWUpOwogCQlkZXYtPnJlYWRfZnJhbWUgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggNzQyNzEzNi4uNTU2YWVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTIyMyw0ICsyMjMsNyBAQAogCSAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBpbml0aWFsaXNlZCBpbiB0aGUgT04gc3RhdGUuCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb21tZW50ICJpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpIgorCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUworCiBlbmRpZiAjIE5FV19MRURTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21jYS9tY2EtYnVzLmMgYi9kcml2ZXJzL21jYS9tY2EtYnVzLmMKaW5kZXggZWYyZGJmZS4uYWRhNWViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCisrKyBiL2RyaXZlcnMvbWNhL21jYS1idXMuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAKIAltY2FfZGV2LT5kZXYucGFyZW50ID0gJm1jYV9idXMtPmRldjsKIAltY2FfZGV2LT5kZXYuYnVzID0gJm1jYV9idXNfdHlwZTsKLQlzcHJpbnRmIChtY2FfZGV2LT5kZXYuYnVzX2lkLCAiJTAyZDolMDJYIiwgYnVzLCBtY2FfZGV2LT5zbG90KTsKKwlkZXZfc2V0X25hbWUoJm1jYV9kZXYtPmRldiwgIiUwMmQ6JTAyWCIsIGJ1cywgbWNhX2Rldi0+c2xvdCk7CiAJbWNhX2Rldi0+ZG1hX21hc2sgPSBtY2FfYnVzLT5kZWZhdWx0X2RtYV9tYXNrOwogCW1jYV9kZXYtPmRldi5kbWFfbWFzayA9ICZtY2FfZGV2LT5kbWFfbWFzazsKIAltY2FfZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBtY2FfZGV2LT5kbWFfbWFzazsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmICghbWNhX2J1cykKIAkJcmV0dXJuIE5VTEw7CiAKLQlzcHJpbnRmKG1jYV9idXMtPmRldi5idXNfaWQsIm1jYSVkIixidXMpOworCWRldl9zZXRfbmFtZSgmbWNhX2J1cy0+ZGV2LCAibWNhJWQiLCBidXMpOwogCXNwcmludGYobWNhX2J1cy0+bmFtZSwiSG9zdCAlcyBNQ0EgQnJpZGdlIiwgYnVzID8gIlNlY29uZGFyeSIgOiAiUHJpbWFyeSIpOwogCWlmIChkZXZpY2VfcmVnaXN0ZXIoJm1jYV9idXMtPmRldikpIHsKIAkJa2ZyZWUobWNhX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCmluZGV4IDRkMzUzMDguLjM5MzYyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogCXN0cmxjcHkodi0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsIGRldi0+bmFtZSwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIkkyQzolcyIsIGRldi0+ZGV2LmJ1c19pZCk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksCisJCSAiSTJDOiVzIiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA2NmM3NTVjLi5jZTk4ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC04MDMsOSArODAzLDEwIEBACiAJCXJldHVybiAoLUVOT0VOVCk7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAoLUVOT01FTSk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3g4OF9kZXZfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwppbmRleCAyYWM3MzhmLi5mMTMyZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwpAQCAtNDQ4LDkgKzQ0OCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gImVtMjh4eC1hdWRpby5jOiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzICIKIAkJCSAiUmVjaGJlcmdlclxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5yXSwgIkVtMjh4eCBBdWRpbyIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnJdLCAiRW0yOHh4IEF1ZGlvIiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRldi0+c2xvY2spOwogCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJFbTI4eHggQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBjNzUwZDNkLi44YjBiNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC05OTAsMTAgKzk5MCwxMCBAQAogCWlmICghZW5hYmxlW2Rldm51bV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCkpOwotCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTQUE3MTM0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwppbmRleCBjZjlkNGM3Li44YTRiNzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCkBAIC0zNCw3ICszNCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnY0bDJfZGV2LT5sb2NrKTsKIAl2NGwyX2Rldi0+ZGV2ID0gZGV2OwogCXNucHJpbnRmKHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpLCAiJXMgJXMiLAotCQkJZGV2LT5kcml2ZXItPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB2NGwyX2Rldik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwppbmRleCA2MDYzZGMyLi41NzI3MWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBpbnQgbWNwX2hvc3RfcmVnaXN0ZXIoc3RydWN0IG1jcCAqbWNwKQogewotCXN0cmNweShtY3AtPmF0dGFjaGVkX2RldmljZS5idXNfaWQsICJtY3AwIik7CisJZGV2X3NldF9uYW1lKCZtY3AtPmF0dGFjaGVkX2RldmljZSwgIm1jcDAiKTsKIAlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZtY3AtPmF0dGFjaGVkX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MKG1jcF9ob3N0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKaW5kZXggNjg2MGM5Mi4uZmVhOTA4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCiAJdWNiLT5kZXYuY2xhc3MgPSAmdWNiMXgwMF9jbGFzczsKIAl1Y2ItPmRldi5wYXJlbnQgPSAmbWNwLT5hdHRhY2hlZF9kZXZpY2U7Ci0Jc3RybGNweSh1Y2ItPmRldi5idXNfaWQsICJ1Y2IxeDAwIiwgc2l6ZW9mKHVjYi0+ZGV2LmJ1c19pZCkpOworCWRldl9zZXRfbmFtZSgmdWNiLT5kZXYsICJ1Y2IxeDAwIik7CiAKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5pb19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IDJiMTE5NmUuLmU5NGU5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKIAogCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGFza2xldCwgYXRtY2lfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBwZGV2LT5kZXYuYnVzX2lkLCBob3N0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCmluZGV4IGZiMjkyMWYuLjBjNDRkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb2ZfbW1jX3NwaS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKCFncGlvX2lzX3ZhbGlkKG9tcy0+Z3Bpb3NbaV0pKQogCQkJY29udGludWU7CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG9tcy0+Z3Bpb3NbaV0sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0IDwgMCkgewogCQkJb21zLT5ncGlvc1tpXSA9IC1FSU5WQUw7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAwNDNkNTBmLi43MjlmODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC01NTEsNSArNTUxLDE1IEBACiAKIAkgIFRoaXMgc2VsZWN0aW9uIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgbWFwX3JhbSBkcml2ZXIuCiAKLWVuZG1lbnUKK2NvbmZpZyBNVERfVk1VCisJdHJpc3RhdGUgIk1hcCBkcml2ZXIgZm9yIERyZWFtY2FzdCBWTVUiCisJZGVwZW5kcyBvbiBNQVBMRQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBEcmVhbWNhc3QgVmlzdWFsIE1lbW9yeSBVbml0IChWTVUpLgogCisJICBNb3N0IERyZWFtY2FzdCB1c2VycyB3aWxsIHdhbnQgdG8gc2F5IFkgaGVyZS4KKworCSAgVG8gYnVpbGQgdGhpcyBhcyBhIG1vZHVsZSBzZWxlY3QgTSBoZXJlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICB2bXUtZmxhc2guCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDZkOWJhMzUuLjI2YjI4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNjEsMyArNjEsNCBAQAogb2JqLSQoQ09ORklHX01URF9PTUFQX05PUikJKz0gb21hcF9ub3Iubwogb2JqLSQoQ09ORklHX01URF9JTlRFTF9WUl9OT1IpCSs9IGludGVsX3ZyX25vci5vCiBvYmotJChDT05GSUdfTVREX0JGSU5fQVNZTkMpCSs9IGJmaW4tYXN5bmMtZmxhc2gubworb2JqLSQoQ09ORklHX01URF9WTVUpCQkrPSB2bXUtZmxhc2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKaW5kZXggNzcxMTM5Yy4uZTkwMjZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCkBAIC00MSw5ICs0MSw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCiAKLXN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKmZsYXNoID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKQEAgLTExNCwxNSArMTEzLDE1IEBACiAJCWFkZF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAlpZiAoaW5mby0+bnJfcGFydHMpCkBAIC0xNDEsOSArMTQwLDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGEyeHhfZmxhc2hfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChpbmZvLT5tdGQgJiYgaW5mby0+bXRkLT5zdXNwZW5kKQpAQCAtMTUxLDE3ICsxNTAsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfZmxhc2hfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8tPm10ZCAmJiBpbmZvLT5tdGQtPnJlc3VtZSkKIAkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyB2b2lkIHB4YTJ4eF9mbGFzaF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBweGEyeHhfZmxhc2hfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mbyAmJiBpbmZvLT5tdGQtPnN1c3BlbmQoaW5mby0+bXRkKSA9PSAwKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwpAQCAtMTcyLDExICsxNzEsMTMgQEAKICNkZWZpbmUgcHhhMnh4X2ZsYXNoX3NodXRkb3duIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcHhhMnh4X2ZsYXNoX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9mbGFzaF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInB4YTJ4eC1mbGFzaCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBweGEyeHhfZmxhc2hfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2V4aXRfcChweGEyeHhfZmxhc2hfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTJ4eF9mbGFzaF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gcHhhMnh4X2ZsYXNoX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGEyeHhfZmxhc2hfcmVzdW1lLAogCS5zaHV0ZG93bgk9IHB4YTJ4eF9mbGFzaF9zaHV0ZG93biwKQEAgLTE4NCwxMiArMTg1LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcHhhMnh4X2ZsYXNoKHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2ZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2ZsYXNoX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3B4YTJ4eF9mbGFzaCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2ZsYXNoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGluaXRfcHhhMnh4X2ZsYXNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdm11LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jCkBAIC0wLDAgKzEsODMyIEBACisvKiB2bXUtZmxhc2guYworICogRHJpdmVyIGZvciBTRUdBIERyZWFtY2FzdCBWaXN1YWwgTWVtb3J5IFVuaXQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIEFkcmlhbiBNY01lbmFtaW4gMjAwMiAtIDIwMDkKKyAqIENvcHlyaWdodCAoYykgUGF1bCBNdW5kdCAyMDAxCisgKgorICogTGljZW5zZWQgdW5kZXIgdmVyc2lvbiAyIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+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+ZHJpdmVyID0gbWRydjsKKworCWVycm9yID0gdm11X2Nvbm5lY3QobWRldik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcmVtb3ZlX21hcGxlX3ZtdShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCisJdm11X2Rpc2Nvbm5lY3QobWRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwbGVfZHJpdmVyIHZtdV9mbGFzaF9kcml2ZXIgPSB7CisJLmZ1bmN0aW9uID0JTUFQTEVfRlVOQ19NRU1DQVJELAorCS5kcnYgPSB7CisJCS5uYW1lID0JCSJEcmVhbWNhc3RfdmlzdWFsX21lbW9yeSIsCisJCS5wcm9iZSA9CXByb2JlX21hcGxlX3ZtdSwKKwkJLnJlbW92ZSA9IAlfX2RldmV4aXRfcChyZW1vdmVfbWFwbGVfdm11KSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdm11X2ZsYXNoX21hcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG1hcGxlX2RyaXZlcl9yZWdpc3Rlcigmdm11X2ZsYXNoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2bXVfZmxhc2hfbWFwX2V4aXQodm9pZCkKK3sKKwltYXBsZV9kcml2ZXJfdW5yZWdpc3Rlcigmdm11X2ZsYXNoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZtdV9mbGFzaF9tYXBfaW5pdCk7Cittb2R1bGVfZXhpdCh2bXVfZmxhc2hfbWFwX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZsYXNoIG1hcHBpbmcgZm9yIFNlZ2EgRHJlYW1jYXN0IHZpc3VhbCBtZW1vcnkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jIGIvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMKaW5kZXggY2VkMTRiNS4uNzI0NDZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMKQEAgLTEyOCwxMSArMTI4LDExIEBACiAgKiBUaGUgYmluZGluZyB0byB0aGUgbXRkIGFuZCBhbGwgYWxsb2NhdGVkCiAgKiByZXNvdXJjZXMgYXJlIHJlbGVhc2VkLgogICovCi1zdGF0aWMgaW50IF9fZXhpdCBleGNpdGVfbmFuZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgZXhjaXRlX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqIGNvbnN0IHRoaXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqIGNvbnN0IHRoaXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmICh1bmxpa2VseSghdGhpcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkICVzIHdpdGhvdXQgcHJpdmF0ZSBkYXRhISEiLApAQCAtMTU5LDkgKzE1OSw4IEBACiAgKiBpdCBjYW4gYWxsb2NhdGUgYWxsIG5lY2Vzc2FyeSByZXNvdXJjZXMgdGhlbiBjYWxscyB0aGUKICAqIG5hbmQgbGF5ZXIgdG8gbG9vayBmb3IgZGV2aWNlcy4KICovCi1zdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBjb25zdCBwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKmRydmRhdGE7CS8qIHByaXZhdGUgZHJpdmVyIGRhdGEgKi8KIAlzdHJ1Y3QgbmFuZF9jaGlwICpib2FyZF9jaGlwOwkvKiBwcml2YXRlIGZsYXNoIGNoaXAgZGF0YSAqLwogCXN0cnVjdCBtdGRfaW5mbyAqYm9hcmRfbXRkOwkvKiBtdGQgaW5mbyBmb3IgdGhpcyBib2FyZCAqLwpAQCAtMTc1LDcgKzE3NCw3IEBACiAJfQogCiAJLyogYmluZCBwcml2YXRlIGRhdGEgaW50byBkcml2ZXIgKi8KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcnZkYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcnZkYXRhKTsKIAogCS8qIGFsbG9jYXRlIGFuZCBtYXAgdGhlIHJlc291cmNlICovCiAJZHJ2ZGF0YS0+cmVncyA9CkBAIC0yMTksMjMgKzIxOCwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZXhjaXRlX25hbmRfZHJpdmVyID0gewotCS5uYW1lID0gImV4Y2l0ZV9uYW5kIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXhjaXRlX25hbmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImV4Y2l0ZV9uYW5kIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlID0gZXhjaXRlX25hbmRfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZXhpdF9wKGV4Y2l0ZV9uYW5kX3JlbW92ZSkKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZXhjaXRlX25hbmRfcmVtb3ZlKQogfTsKIAogc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfaW5pdCh2b2lkKQogewogCXByX2luZm8oIkJhc2xlciBlWGNpdGUgbmFuZCBmbGFzaCBkcml2ZXIgVmVyc2lvbiAiCiAJCUVYQ0lURV9OQU5ERkxBU0hfVkVSU0lPTiAiXG4iKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGNpdGVfbmFuZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGV4Y2l0ZV9uYW5kX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwppbmRleCA1ODJjZjgwLi44OWJmODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJbmRmYy0+bXRkLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzLiVzIiwKLQkJCQkgICBuZGZjLT5vZmRldi0+ZGV2LmJ1c19pZCwgZmxhc2hfbnAtPm5hbWUpOworCQkJZGV2X25hbWUoJm5kZmMtPm9mZGV2LT5kZXYpLCBmbGFzaF9ucC0+bmFtZSk7CiAJaWYgKCFuZGZjLT5tdGQubmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMKaW5kZXggNWI2OWU3Ny4uM2E0OTZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9nZW5lcmljLmMKQEAgLTM2LDEwICszNiw5IEBACiAJc3RydWN0IG9uZW5hbmRfY2hpcAlvbmVuYW5kOwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19vbmVuYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfb25lbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm87Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKQEAgLTQ5LDcgKzQ4LDcgQEAKIAlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgZGV2LT5kcml2ZXItPm5hbWUpKSB7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+ZGV2LmRyaXZlci0+bmFtZSkpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dF9mcmVlX2luZm87CiAJfQpAQCAtODIsNyArODEsNyBAQAogI2VuZGlmCiAJCWVyciA9IGFkZF9tdGRfZGV2aWNlKCZpbmZvLT5tdGQpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk2LDE0ICs5NSwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGdlbmVyaWNfb25lbmFuZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgZ2VuZXJpY19vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgb25lbmFuZF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBvbmVuYW5kX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoaW5mbykgewogCQlpZiAoaW5mby0+cGFydHMpCkBAIC0xMjAsOSArMTE4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnZW5lcmljX29uZW5hbmRfZHJpdmVyID0gewotCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2VuZXJpY19vbmVuYW5kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGdlbmVyaWNfb25lbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdlbmVyaWNfb25lbmFuZF9yZW1vdmUpLAogfTsKQEAgLTEzMSwxMiArMTMxLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfb25lbmFuZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnZW5lcmljX29uZW5hbmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX29uZW5hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGdlbmVyaWNfb25lbmFuZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDNkMTMxOGEuLjFjNTM0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtMTk3LDYgKzE5NywxNyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWxfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gZWxfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWwxX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBlbF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBlbF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqCWVsMV9wcm9iZTE6CiAgKglAZGV2OiBUaGUgZGV2aWNlIHN0cnVjdHVyZSB0byB1c2UKQEAgLTMwNSwxMiArMzE2LDggQEAKIAkgKglUaGUgRUwxLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuCiAJICovCiAKLQlkZXYtPm9wZW4gPSAmZWxfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZlbF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZlbF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsKLQlkZXYtPnN0b3AgPSAmZWwxX2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmMgYi9kcml2ZXJzL25ldC8zYzUwNS5jCmluZGV4IGE4MTA3ZjkuLjJkZTFjOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuYwpAQCAtMTM1NCw2ICsxMzU0LDE3IEBACiAJcmV0dXJuIDA7CQkvKiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBsYXllciBhYm92ZSB3aWxsIHJldHVybiAtRU5PREVWICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWxwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVscF9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbHBfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMgCQk9IGVscF9nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGVscF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbHBfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVscF9zZXRfbWNfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE1NTgsMTMgKzE1NjksOCBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGFwdGVyIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCX0KIAotCWRldi0+b3BlbiA9IGVscF9vcGVuOwkJCQkvKiBsb2NhbCAqLwotCWRldi0+c3RvcCA9IGVscF9jbG9zZTsJCQkJLyogbG9jYWwgKi8KLQlkZXYtPmdldF9zdGF0cyA9IGVscF9nZXRfc3RhdHM7CQkJLyogbG9jYWwgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGVscF9zdGFydF94bWl0OwkJLyogbG9jYWwgKi8KLQlkZXYtPnR4X3RpbWVvdXQgPSBlbHBfdGltZW91dDsJCQkvKiBsb2NhbCAqLworCWRldi0+bmV0ZGV2X29wcyA9ICZlbHBfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBlbHBfc2V0X21jX2xpc3Q7CS8qIGxvY2FsICovCiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CQkvKiBsb2NhbCAqLwogCiAJZGV2LT5tZW1fc3RhcnQgPSBkZXYtPm1lbV9lbmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDcuYyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKaW5kZXggNDIzZTY1ZC4uZmJiYWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDcuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNy5jCkBAIC0zNTIsNiArMzUyLDE2IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbDE2X29wZW4sCisJLm5kb19zdG9wCQk9IGVsMTZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsMTZfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVsMTZfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZWwxNl9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbml0X0lEX2RvbmUsIHZlcnNpb25fcHJpbnRlZDsKQEAgLTQ0OSwxMCArNDU5LDcgQEAKIAkJZ290byBvdXQxOwogCX0KIAotIAlkZXYtPm9wZW4gPSBlbDE2X29wZW47Ci0gCWRldi0+c3RvcCA9IGVsMTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlbDE2X3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dCA9IGVsMTZfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKICAJZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsJLyogTXVsdGljYXN0IGRvZXNuJ3Qgd29yayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggOGM2OTQyMS4uZmJiMzcxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC01MzcsNiArNTM3LDIxIEBACiBzdGF0aWMgaW50IG1jYV9yZWdpc3RlcmVkOwogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWwzX29wZW4sCisJLm5kb19zdG9wCSAJPSBlbDNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsM19zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzIAkJPSBlbDNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDNfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlbDNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlbDNfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU1MywxNiArNTY4LDggQEAKIAl9CiAKIAkvKiBUaGUgRUwzLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmVsM19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsM19zdGFydF94bWl0OwotCWRldi0+c3RvcCA9ICZlbDNfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmZWwzX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gZWwzX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVsM19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmZXRodG9vbF9vcHMpOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUxNS5jIGIvZHJpdmVycy9uZXQvM2M1MTUuYwppbmRleCAzOWFjMTIyLi4xNjdiZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUxNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKQEAgLTU2Myw2ICs1NjMsMjAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGNvcmtzY3Jld19vcGVuLAorCS5uZG9fc3RvcAkJPSBjb3Jrc2NyZXdfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGNvcmtzY3Jld19zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBjb3Jrc2NyZXdfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBjb3Jrc2NyZXdfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKKwogc3RhdGljIGludCBjb3Jrc2NyZXdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkciwKIAkJCSAgICBzdHJ1Y3QgcG5wX2RldiAqaWRldiwgaW50IGNhcmRfbnVtYmVyKQogewpAQCAtNjgxLDEzICs2OTUsOCBAQAogCXZwLT5mdWxsX2J1c19tYXN0ZXJfcnggPSAodnAtPmNhcGFiaWxpdGllcyAmIDB4MjApID8gMSA6IDA7CiAKIAkvKiBUaGUgM2M1MXgtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSAmY29ya3NjcmV3X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmY29ya3NjcmV3X3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmNvcmtzY3Jld190aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoNDAwICogSFopIC8gMTAwMDsKLQlkZXYtPnN0b3AgPSAmY29ya3NjcmV3X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmNvcmtzY3Jld19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X3J4X21vZGU7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyMy5jIGIvZHJpdmVycy9uZXQvM2M1MjMuYwppbmRleCBmZjQxZTFmLi44ZjczNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKQEAgLTQwMyw2ICs0MDMsMjAgQEAKIAlyZXR1cm4gbGVuOwogfQkJCQkvKiBlbG1jX2dldGluZm8oKSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbG1jX29wZW4sCisJLm5kb19zdG9wCQk9IGVsbWNfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gZWxtY19nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGVsbWNfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVsbWNfdGltZW91dCwKKyNpZmRlZiBFTE1DX01VTFRJQ0FTVAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorI2VuZGlmCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBfX2luaXQgZG9fZWxtY19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTQ0LDE3ICs1NTgsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBoYXJkd2FyZSBhZGRyZXNzICVwTVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKIAotCWRldi0+b3BlbiA9ICZlbG1jX29wZW47Ci0JZGV2LT5zdG9wID0gJmVsbWNfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmZWxtY19nZXRfc3RhdHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWxtY19zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmZWxtY190aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsKLSNpZmRlZiBFTE1DX01VTFRJQ0FTVAotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLSNlbHNlCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBOVUxMOwotI2VuZGlmCiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKIAkvKiBub3RlIHRoYXQgd2UgaGF2ZW4ndCBhY3R1YWxseSByZXF1ZXN0ZWQgdGhlIElSUSBmcm9tIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCAyZGYzYWYzLi5iNjEwNzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTI4OCw2ICsyODgsMTggQEAKIAlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBtYzMyX29wZW4sCisJLm5kb19zdG9wCQk9IG1jMzJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG1jMzJfc2VuZF9wYWNrZXQsCisJLm5kb19nZXRfc3RhdHMJCT0gbWMzMl9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtYzMyX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbWMzMl90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIG1jMzJfcHJvYmUxCS0JQ2hlY2sgYSBnaXZlbiBzbG90IGZvciBhIGJvYXJkIGFuZCB0ZXN0IHRoZSBjYXJkCiAgKiBAZGV2OiAgRGV2aWNlIHN0cnVjdHVyZSB0byBmaWxsIGluCkBAIC01MTgsMTIgKzUzMCw3IEBACiAJcHJpbnRrKCIlczogRmlybXdhcmUgUmV2ICVkLiAlZCBSWCBidWZmZXJzLCAlZCBUWCBidWZmZXJzLiBCYXNlIG9mIDB4JTA4WC5cbiIsCiAJCWRldi0+bmFtZSwgbHAtPmV4ZWNfYm94LT5kYXRhWzEyXSwgbHAtPnJ4X2xlbiwgbHAtPnR4X2xlbiwgbHAtPmJhc2UpOwogCi0JZGV2LT5vcGVuCQk9IG1jMzJfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbWMzMl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG1jMzJfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbWMzMl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBtYzMyX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gbWMzMl90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFoqNTsJLyogQm9hcmQgZG9lcyBhbGwgdGhlIHdvcmsgKi8KIAlkZXYtPmV0aHRvb2xfb3BzCT0gJm5ldGRldl9ldGh0b29sX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggY2RiYmI2Mi4uYzU2Njk4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0xMDIsOCArMTAyLDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLURSVl9OQU1FICI6IERvbmFsZCBCZWNrZXIgYW5kIG90aGVycy5cbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCURSVl9OQU1FICI6IERvbmFsZCBCZWNrZXIgYW5kIG90aGVycy5cbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIjNDb20gM2M1OXgvM2M5eHggZXRoZXJuZXQgZHJpdmVyICIpOwpAQCAtOTkyLDYgKzk5Miw0MiBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib29tcmFuZ19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB2b3J0ZXhfb3BlbiwKKwkubmRvX3N0b3AJCT0gdm9ydGV4X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBib29tZXJhbmdfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdm9ydGV4X3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gdm9ydGV4X2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfUENJCisJLm5kb19kb19pb2N0bCAJCT0gdm9ydGV4X2lvY3RsLAorI2VuZGlmCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBwb2xsX3ZvcnRleCwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2b3J0ZXhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdm9ydGV4X29wZW4sCisJLm5kb19zdG9wCQk9IHZvcnRleF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdm9ydGV4X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHZvcnRleF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHZvcnRleF9nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX1BDSQorCS5uZG9fZG9faW9jdGwgCQk9IHZvcnRleF9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF92b3J0ZXgsCisjZW5kaWYKK307CisKIC8qCiAgKiBTdGFydCB1cCB0aGUgUENJL0VJU0EgZGV2aWNlIHdoaWNoIGlzIGRlc2NyaWJlZCBieSAqZ2VuZGV2LgogICogUmV0dXJuIDAgb24gc3VjY2Vzcy4KQEAgLTEzNjYsMTggKzE0MDIsMTYgQEAKIAl9CiAKIAkvKiBUaGUgM2M1OXgtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSB2b3J0ZXhfb3BlbjsKIAlpZiAodnAtPmZ1bGxfYnVzX21hc3Rlcl90eCkgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJvb21lcmFuZ19zdGFydF94bWl0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmYm9vbXJhbmdfbmV0ZGV2X29wczsKIAkJLyogQWN0dWFsbHksIGl0IHN0aWxsIHNob3VsZCB3b3JrIHdpdGggaW9tbXUuICovCiAJCWlmIChjYXJkX2lkeCA8IE1BWF9VTklUUyAmJgogCQkgICAgKChod19jaGVja3N1bXNbY2FyZF9pZHhdID09IC0xICYmICh2cC0+ZHJ2X2ZsYWdzICYgSEFTX0hXQ0tTTSkpIHx8CiAJCQkJaHdfY2hlY2tzdW1zW2NhcmRfaWR4XSA9PSAxKSkgewogCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwogCQl9Ci0JfSBlbHNlIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2b3J0ZXhfc3RhcnRfeG1pdDsKLQl9CisJfSBlbHNlCisJCWRldi0+bmV0ZGV2X29wcyA9ICAmdm9ydGV4X25ldGRldl9vcHM7CiAKIAlpZiAocHJpbnRfaW5mbykgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogc2NhdHRlci9nYXRoZXIgJXNhYmxlZC4gaC93IGNoZWNrc3VtcyAlc2FibGVkXG4iLApAQCAtMTM4NiwxOCArMTQyMCw5IEBACiAJCQkJKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pID8gImVuIjoiZGlzIik7CiAJfQogCi0JZGV2LT5zdG9wID0gdm9ydGV4X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gdm9ydGV4X2dldF9zdGF0czsKLSNpZmRlZiBDT05GSUdfUENJCi0JZGV2LT5kb19pb2N0bCA9IHZvcnRleF9pb2N0bDsKLSNlbmRpZgogCWRldi0+ZXRodG9vbF9vcHMgPSAmdm9ydGV4X2V0aHRvb2xfb3BzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGU7Ci0JZGV2LT50eF90aW1lb3V0ID0gdm9ydGV4X3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9ICh3YXRjaGRvZyAqIEhaKSAvIDEwMDA7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBvbGxfdm9ydGV4OwotI2VuZGlmCisKIAlpZiAocGRldikgewogCQl2cC0+cG1fc3RhdGVfdmFsaWQgPSAxOwogIAkJcGNpX3NhdmVfc3RhdGUoVk9SVEVYX1BDSSh2cCkpOwpAQCAtMjg4Myw3ICsyOTA4LDcgQEAKIAkJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShWT1JURVhfUENJKHZwKSkpOwogCX0gZWxzZSB7CiAJCWlmIChWT1JURVhfRUlTQSh2cCkpCi0JCQlzcHJpbnRmKGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSh2cC0+Z2VuZGV2KSk7CisJCQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKHZwLT5nZW5kZXYpKTsKIAkJZWxzZQogCQkJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIkVJU0EgMHglbHggJWQiLAogCQkJCQlkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCA0ZTE5YWUzLi5hMDllM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJCWNwdzE2X2YoSW50ck1hc2ssIGNwX2ludHJfbWFzayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTY0MSw5ICs2NDEsOSBAQAogCX0KIAogCWlmIChzdGF0dXMgJiAoUnhPSyB8IFJ4RXJyIHwgUnhFbXB0eSB8IFJ4RklGT092cikpCi0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZjcC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmY3AtPm5hcGkpKSB7CiAJCQljcHcxNl9mKEludHJNYXNrLCBjcF9ub3J4X2ludHJfbWFzayk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKIAkJfQogCiAJaWYgKHN0YXR1cyAmIChUeE9LIHwgVHhFcnIgfCBUeEVtcHR5IHwgU1dJbnQpKQpAQCAtMTYwMiw2ICsxNjAyLDI4IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGNwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJc3Bpbl9sb2NrX2lycSgmY3AtPmxvY2spOworCisJY3B3OF9mKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwljcHczMl9mKE1BQzAgKyAwLCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyAwKSkpOworCWNwdzMyX2YoTUFDMCArIDQsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSk7CisJY3B3OF9mKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisKKwlzcGluX3VubG9ja19pcnEoJmNwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiAvKiBTZXJpYWwgRUVQUk9NIHNlY3Rpb24uICovCiAKIC8qICBFRVBST01fQ3RybCBiaXRzLiAqLwpAQCAtMTgyMSw3ICsxODQzLDcgQEAKIAkubmRvX29wZW4JCT0gY3Bfb3BlbiwKIAkubmRvX3N0b3AJCT0gY3BfY2xvc2UsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGNwX3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGNwX3NldF9yeF9tb2RlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IGNwX2dldF9zdGF0cywKIAkubmRvX2RvX2lvY3RsCQk9IGNwX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IGE1YjI0MjAuLjI5ZGYzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTY0MCw2ICs2NDAsNyBAQAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgorc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTsKIHN0YXRpYyBpbnQgcnRsODEzOV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtOTE3LDcgKzkxOCw3IEBACiAJLm5kb19zdG9wCQk9IHJ0bDgxMzlfY2xvc2UsCiAJLm5kb19nZXRfc3RhdHMJCT0gcnRsODEzOV9nZXRfc3RhdHMsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTM5X3N0YXJ0X3htaXQsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBydGw4MTM5X3NldF9yeF9tb2RlLAogCS5uZG9fZG9faW9jdGwJCT0gbmV0ZGV2X2lvY3RsLApAQCAtMjEyOCw3ICsyMTI5LDcgQEAKIAkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCQlSVExfVzE2X0YoSW50ck1hc2ssIHJ0bDgxMzlfaW50cl9tYXNrKTsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCX0KIAlzcGluX3VubG9jaygmdHAtPnJ4X2xvY2spOwpAQCAtMjE3OCw5ICsyMTc5LDkgQEAKIAkvKiBSZWNlaXZlIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBieSBwb2xsIHJvdXRpbmUuCiAJICAgSWYgbm90IHJ1bm5pbmcgc3RhcnQgaXQgbm93LiAqLwogCWlmIChzdGF0dXMgJiBSeEFja0JpdHMpewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQkJUlRMX1cxNl9GIChJbnRyTWFzaywgcnRsODEzOV9ub3J4X2ludHJfbWFzayk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAkJfQogCX0KIApAQCAtMjIxNSw2ICsyMjE2LDI5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOworCisJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCVJUTF9XMzJfRihNQUMwICsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtPmRldl9hZGRyICsgMCkpKTsKKwlSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSk7CisJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MjU5Ni5jIGIvZHJpdmVycy9uZXQvODI1OTYuYwppbmRleCBiMjczNTk2Li5jY2E5NGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKQEAgLTExMjIsNiArMTEyMiwxNyBAQAogc3RhdGljIGludCBpbyA9IDB4MzAwOwogc3RhdGljIGludCBpcnEgPSAxMDsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNTk2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBpNTk2X29wZW4sCisJLm5kb19zdG9wCQk9IGk1OTZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGk1OTZfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaTU5Nl90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBpODI1OTZfcHJvYmUoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEyMzIsMTEgKzEyNDMsNyBAQAogCURFQihERUJfUFJPQkUscHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKSk7CiAKIAkvKiBUaGUgODI1OTYtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSBpNTk2X29wZW47Ci0JZGV2LT5zdG9wID0gaTU5Nl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGk1OTZfc3RhcnRfeG1pdDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBpNTk2X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmk1OTZfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogCWRldi0+bWxfcHJpdiA9ICh2b2lkICopKGRldi0+bWVtX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDYyZDczMmEuLmU1ZmZjMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTUgQEAKICMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy4KIGlmIE5FVERFVklDRVMKIAorY29uZmlnIENPTVBBVF9ORVRfREVWX09QUworICAgICAgIGRlZmF1bHQgeQorICAgICAgIGJvb2wgIkVuYWJsZSBvbGRlciBuZXR3b3JrIGRldmljZSBBUEkgY29tcGF0aWFibGl0eSIKKyAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBrZXJuZWwgY29tcGF0aWFiaWxpdHkgd2l0aCBvbGRlciBuZXR3b3JrIGRldmljZXMKKyAgICAgICAgICB0aGF0IGRvIG5vdCB1c2UgbmV0X2RldmljZV9vcHMgaW50ZXJmYWNlLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgSUZCCiAJdHJpc3RhdGUgIkludGVybWVkaWF0ZSBGdW5jdGlvbmFsIEJsb2NrIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORVRfQ0xTX0FDVApAQCAtMTg0MCwxMCArMTg0OSwxMCBAQAogCiBjb25maWcgRkVDCiAJYm9vbCAiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIENQVXMpIgotCWRlcGVuZHMgb24gTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMngKKwlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IE1BQ0hfTVgyNwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBidWlsdC1pbiAxMC8xMDAgRmFzdCBldGhlcm5ldAotCSAgY29udHJvbGxlciBvbiBzb21lIE1vdG9yb2xhIENvbGRGaXJlIHByb2Nlc3NvcnMuCisJICBjb250cm9sbGVyIG9uIHNvbWUgTW90b3JvbGEgQ29sZEZpcmUgYW5kIEZyZWVzY2FsZSBpLk1YIHByb2Nlc3NvcnMuCiAKIGNvbmZpZyBGRUMyCiAJYm9vbCAiU2Vjb25kIEZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvbiBzb21lIENvbGRGaXJlIENQVXMpIgpAQCAtMjAzMCwxNSArMjAzOSw2IEBACiAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBpZ2IuCiAKLWNvbmZpZyBJR0JfTFJPIAotCWJvb2wgIlVzZSBzb2Z0d2FyZSBMUk8iCi0JZGVwZW5kcyBvbiBJR0IgJiYgSU5FVAotCXNlbGVjdCBJTkVUX0xSTwotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGxhcmdlIHJlY2VpdmUgb2ZmbG9hZC4gCi0KLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQogY29uZmlnIElHQl9EQ0EKIAlib29sICJEaXJlY3QgQ2FjaGUgQWNjZXNzIChEQ0EpIFN1cHBvcnQiCiAJZGVmYXVsdCB5CkBAIC0yMjg0LDkgKzIyODQsMTcgQEAKIAogICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBGU0xfUFFfTURJTworCXRyaXN0YXRlICJGcmVlc2NhbGUgUFEgTURJTyIKKwlkZXBlbmRzIG9uIEZTTF9TT0MKKwlzZWxlY3QgUEhZTElCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gYnVzIHVzZWQgYnkgdGhlIGdpYW5mYXIgYW5kIFVDQyBkcml2ZXJzLgorCiBjb25maWcgR0lBTkZBUgogCXRyaXN0YXRlICJHaWFuZmFyIEV0aGVybmV0IgogCWRlcGVuZHMgb24gRlNMX1NPQworCXNlbGVjdCBGU0xfUFFfTURJTwogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCkBAIC0yMjk2LDYgKzIzMDQsNyBAQAogY29uZmlnIFVDQ19HRVRICiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBRRSBHaWdhYml0IEV0aGVybmV0IgogCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCisJc2VsZWN0IEZTTF9QUV9NRElPCiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgdGhlIFFVSUNDIEVuZ2luZSwKQEAgLTIzMTIsNiArMjMyMSw3IEBACiBjb25maWcgTVY2NDNYWF9FVEgKIAl0cmlzdGF0ZSAiTWFydmVsbCBEaXNjb3ZlcnkgKDY0M1hYKSBhbmQgT3Jpb24gZXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1WNjQzNjAgfHwgTVY2NFg2MCB8fCAoUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIpIHx8IFBMQVRfT1JJT04KKwlzZWxlY3QgSU5FVF9MUk8KIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGUKQEAgLTI0MzAsNyArMjQ0MCw2IEBACiAJdHJpc3RhdGUgIkNoZWxzaW8gQ29tbXVuaWNhdGlvbnMgVDMgMTBHYiBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ0hFTFNJT19UM19ERVBFTkRTCiAJc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBJTkVUX0xSTwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIENoZWxzaW8gVDMtYmFzZWQgZ2lnYWJpdCBhbmQgMTBHYiBFdGhlcm5ldAogCSAgYWRhcHRlcnMuCkBAIC0yNDY2LDcgKzI0NzUsNiBAQAogY29uZmlnIElYR0JFCiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAotCXNlbGVjdCBJTkVUX0xSTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZgogCSAgYWRhcHRlcnMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCA0NzFiYWFmLi43NThlY2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMjYsMTEgKzI2LDEyIEBACiAKIGdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFwKIAkJZ2lhbmZhcl9ldGh0b29sLm8gXAotCQlnaWFuZmFyX21paS5vIFwKIAkJZ2lhbmZhcl9zeXNmcy5vCiAKIG9iai0kKENPTkZJR19VQ0NfR0VUSCkgKz0gdWNjX2dldGhfZHJpdmVyLm8KLXVjY19nZXRoX2RyaXZlci1vYmpzIDo9IHVjY19nZXRoLm8gdWNjX2dldGhfbWlpLm8gdWNjX2dldGhfZXRodG9vbC5vCit1Y2NfZ2V0aF9kcml2ZXItb2JqcyA6PSB1Y2NfZ2V0aC5vIHVjY19nZXRoX2V0aHRvb2wubworCitvYmotJChDT05GSUdfRlNMX1BRX01ESU8pICs9IGZzbF9wcV9tZGlvLm8KIAogIwogIyBsaW5rIG9yZGVyIGltcG9ydGFudCBoZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hMjA2NS5jIGIvZHJpdmVycy9uZXQvYTIwNjUuYwppbmRleCA3YTYwYmRkLi5kMGQwYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hMjA2NS5jCisrKyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKQEAgLTU1MiwxOCArNTUyLDEzIEBACiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfcmVncyAqbGwgPSBscC0+bGw7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7Ci0JaW50IGVudHJ5LCBza2JsZW4sIGxlbjsKKwlpbnQgZW50cnksIHNrYmxlbjsKIAlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2tibGVuID0gc2tiLT5sZW47Ci0JbGVuID0gc2tibGVuOwotCi0JaWYgKGxlbiA8IEVUSF9aTEVOKSB7Ci0JCWxlbiA9IEVUSF9aTEVOOwotCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCXJldHVybiAwOworCXNrYmxlbiA9IG1heF90KHVuc2lnbmVkLCBza2ItPmxlbiwgRVRIX1pMRU4pOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC01ODYsMTUgKzU4MSwxMSBAQAogCX0KICNlbmRpZgogCWVudHJ5ID0gbHAtPnR4X25ldyAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwotCWliLT5idHhfcmluZyBbZW50cnldLmxlbmd0aCA9ICgtbGVuKSB8IDB4ZjAwMDsKKwlpYi0+YnR4X3JpbmcgW2VudHJ5XS5sZW5ndGggPSAoLXNrYmxlbikgfCAweGYwMDA7CiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0ubWlzYyA9IDA7CiAKIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgKHZvaWQgKikmaWItPnR4X2J1ZiBbZW50cnldWzBdLCBza2JsZW4pOwogCi0JLyogQ2xlYXIgdGhlIHNsYWNrIG9mIHRoZSBwYWNrZXQsIGRvIEkgbmVlZCB0aGlzPyAqLwotCWlmIChsZW4gIT0gc2tibGVuKQotCQltZW1zZXQgKCh2b2lkICopICZpYi0+dHhfYnVmIFtlbnRyeV1bc2tibGVuXSwgMCwgbGVuIC0gc2tibGVuKTsKLQogCS8qIE5vdywgZ2l2ZSB0aGUgcGFja2V0IHRvIHRoZSBsYW5jZSAqLwogCWliLT5idHhfcmluZyBbZW50cnldLnRtZDFfYml0cyA9IChMRV9UMV9QT0t8TEVfVDFfT1dOKTsKIAlscC0+dHhfbmV3ID0gKGxwLT50eF9uZXcrMSkgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggOTU4OWQ2MjAuLjA2YTlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC00MzcsNyArNDM3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHhfcmF0aW8sICJBY2VOSUMvM0M5ODUvR0E2MjAgcmF0aW8gb2YgTklDIG1lbW9yeSB1c2VkIGZvciBUWC9SWCBkZXNjcmlwdG9ycyAocmFuZ2UgMC02MykiKTsKIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICAiYWNlbmljLmM6IHYwLjkyIDA4LzA1LzIwMDIgIEplcyBTb3JlbnNlbiwgbGludXgtYWNlbmljQFN1blNJVEUuZGtcbiIKICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vaG9tZS5jZXJuLmNoL35qZXMvZ2lnZS9hY2VuaWMuaHRtbFxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggNzcwOTk5Mi4uY2I5Yzk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlpZiAocnhfcGt0X2xpbWl0ID4gMCkgewogCQkvKiBSZWNlaXZlIGRlc2NyaXB0b3IgaXMgZW1wdHkgbm93ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXdyaXRlbChWQUwwfFJJTlRFTjAsIG1taW8gKyBJTlRFTjApOwogCQl3cml0ZWwoVkFMMiB8IFJETUQwLCBtbWlvICsgQ01EMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC0xMTcwLDExICsxMTcwLDExIEBACiAKIAkvKiBDaGVjayBpZiBSZWNlaXZlIEludGVycnVwdCBoYXMgb2NjdXJyZWQuICovCiAJaWYgKGludHIwICYgUklOVDApIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKIAkJCS8qIERpc2FibGUgcmVjZWl2ZSBpbnRlcnVwdHMgKi8KIAkJCXdyaXRlbChSSU5URU4wLCBtbWlvICsgSU5URU4wKTsKIAkJCS8qIFNjaGVkdWxlIGEgcG9sbGluZyByb3V0aW5lICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJfSBlbHNlIGlmIChpbnRyZW4wICYgUklOVEVOMCkgewogCQkJcHJpbnRrKCIqKioqKioqKioqKipEcml2ZXIgYnVnISBcCiAJCQkJaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYwppbmRleCAzZmY5YWZmLi42NDZkZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSQ05FVCk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FSQ05FVCk7CiA7CiAJbmV0aWZfcngoc2tiKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwppbmRleCA2YjUzZTVlLi5kNmQ0YWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC05NSwxNyArOTUsMTYgQEAKIEVYUE9SVF9TWU1CT0woYXJjbmV0X2RlYnVnKTsKIEVYUE9SVF9TWU1CT0woYWxsb2NfYXJjZGV2KTsKIEVYUE9SVF9TWU1CT0woYXJjbmV0X2ludGVycnVwdCk7CitFWFBPUlRfU1lNQk9MKGFyY25ldF9vcGVuKTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X2Nsb3NlKTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X3NlbmRfcGFja2V0KTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X3RpbWVvdXQpOwogCiAvKiBJbnRlcm5hbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhcmNuZXRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqZGFkZHIsCiAJCQkgY29uc3Qgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbik7CiBzdGF0aWMgaW50IGFyY25ldF9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJjbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZ29fdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbnQgZGVidWcgPSBBUkNORVRfREVCVUc7CkBAIC0zMjIsMTEgKzMyMSwxOCBAQAogCS5yZWJ1aWxkID0gYXJjbmV0X3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhcmNuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBhcmNuZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBhcmNuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0LAorfTsKIAogLyogU2V0dXAgYSBzdHJ1Y3QgZGV2aWNlIGZvciBBUkNuZXQuICovCiBzdGF0aWMgdm9pZCBhcmNkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVJDTkVUOworCWRldi0+bmV0ZGV2X29wcyA9ICZhcmNuZXRfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXJjbmV0X2hlYWRlcl9vcHM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGFyY2hkcik7CiAJZGV2LT5tdHUgPSBjaG9vc2VfbXR1KCk7CkBAIC0zMzksMTggKzM0NSw5IEBACiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MgPSBJRkZfQlJPQURDQVNUOwogCi0JLyoKLQkgKiBQdXQgaW4gdGhpcyBzdHVmZiBoZXJlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGV4cG9ydCB0aGUgc3ltYm9scyB0bwotCSAqIHRoZSBjaGlwc2V0IGRyaXZlcnMuCi0JICovCi0JZGV2LT5vcGVuID0gYXJjbmV0X29wZW47Ci0JZGV2LT5zdG9wID0gYXJjbmV0X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0OwotCWRldi0+Z2V0X3N0YXRzID0gYXJjbmV0X2dldF9zdGF0czsKIH0KIAotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2RldihjaGFyICpuYW1lKQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2Rldihjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKQEAgLTM3Miw3ICszNjksNyBAQAogICogdGhhdCAic2hvdWxkIiBvbmx5IG5lZWQgdG8gYmUgc2V0IG9uY2UgYXQgYm9vdCwgc28gdGhhdCB0aGVyZSBpcwogICogbm9uLXJlYm9vdCB3YXkgdG8gcmVjb3ZlciBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KICAqLwotc3RhdGljIGludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjb3VudCwgbmV3bXR1LCBlcnJvcjsKQEAgLTM4Myw3ICszODAsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUJVR0xWTChEX1BST1RPKSB7Ci0JCWludCBjb3VudDsKIAkJQlVHTVNHKERfUFJPVE8sICJwcm90b2NvbCBtYXAgKGRlZmF1bHQgaXMgJyVjJyk6ICIsCiAJCSAgICAgICBhcmNfcHJvdG9fZGVmYXVsdC0+c3VmZml4KTsKIAkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMjU2OyBjb3VudCsrKQpAQCAtNDcyLDcgKzQ2OCw3IEBACiAKIAogLyogVGhlIGludmVyc2Ugcm91dGluZSB0byBhcmNuZXRfb3BlbiAtIHNodXRzIGRvd24gdGhlIGNhcmQuICovCi1zdGF0aWMgaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNTgzLDggKzU3OSw4IEBACiAJfSBlbHNlIHsKIAkJQlVHTVNHKERfTk9STUFMLAogCQkgICAgICAgIkkgZG9uJ3QgdW5kZXJzdGFuZCBldGhlcm5ldCBwcm90b2NvbCAlWGggYWRkcmVzc2VzIVxuIiwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAl9CiAKIAkvKiBpZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBhZGRyZXNzLi4uIGdpdmUgdXAuICovCkBAIC02MDEsNyArNTk3LDcgQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCBpbiBvcmRlciB0byB0cmFuc21pdCBhIHBhY2tldC4gKi8KLXN0YXRpYyBpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdDsKQEAgLTY0NSw3ICs2NDEsNyBAQAogCQkgICAgIXByb3RvLT5hY2tfdHgpIHsKIAkJCS8qIGRvbmUgcmlnaHQgYXdheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhY2tub3dsZWRnZQogCQkJICAgdGhlIHBhY2thZ2UgbGF0ZXIgLSBmb3JnZXQgYWJvdXQgaXQgbm93ICovCi0JCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJZnJlZXNrYiA9IDE7CiAJCX0gZWxzZSB7CiAJCQkvKiBkbyBpdCB0aGUgJ3NwbGl0JyB3YXkgKi8KQEAgLTcwOSw3ICs3MDUsNyBAQAogCS8qIHN0YXJ0IHNlbmRpbmcgKi8KIAlBQ09NTUFORChUWGNtZCB8IChscC0+Y3VyX3R4IDw8IDMpKTsKIAotCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJbHAtPmxhc3R0cmFuc19kZXN0ID0gbHAtPmxhc3Rsb2FkX2Rlc3Q7CiAJbHAtPmxhc3Rsb2FkX2Rlc3QgPSAwOwogCWxwLT5leGNuYWtfcGVuZGluZyA9IDA7CkBAIC03MjAsNyArNzE2LDcgQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRyYW5zbWl0IHRpbWVzIG91dCAqLwotc3RhdGljIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTczMiwxMSArNzI4LDExIEBACiAJCW1zZyA9ICIgLSBtaXNzZWQgSVJRPyI7CiAJfSBlbHNlIHsKIAkJbXNnID0gIiI7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCWxwLT50aW1lZF9vdXQgPSAxOwogCQlBQ09NTUFORChOT1RYY21kIHwgKGxwLT5jdXJfdHggPDwgMykpOwogCX0KLQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhIFRYIG9yIGEgRVhDIE5BSyBJUlEgKi8KIAlBSU5UTUFTSygwKTsKQEAgLTg2NSw4ICs4NjEsOCBAQAogCQkJCQkJICAgICAgICJ0cmFuc21pdCB3YXMgbm90IGFja25vd2xlZGdlZCEgIgogCQkJCQkJICAgICAgICIoc3RhdHVzPSVYaCwgZGVzdD0lMDJYaClcbiIsCiAJCQkJCQkgICAgICAgc3RhdHVzLCBscC0+bGFzdHRyYW5zX2Rlc3QpOwotCQkJCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJQlVHTVNHKERfRFVSSU5HLAogCQkJCQkJICAgICAgICJicm9hZGNhc3Qgd2FzIG5vdCBhY2tub3dsZWRnZWQ7IHRoYXQncyBub3JtYWwgIgpAQCAtOTA1LDcgKzkwMSw3IEBACiAJCQkJaWYgKHR4YnVmICE9IC0xKSB7CiAJCQkJCWlmIChscC0+b3V0Z29pbmcucHJvdG8tPmNvbnRpbnVlX3R4KGRldiwgdHhidWYpKSB7CiAJCQkJCQkvKiB0aGF0IHdhcyB0aGUgbGFzdCBzZWdtZW50ICovCi0JCQkJCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gbHAtPm91dGdvaW5nLnNrYi0+bGVuOworCQkJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBscC0+b3V0Z29pbmcuc2tiLT5sZW47CiAJCQkJCQlpZighbHAtPm91dGdvaW5nLnByb3RvLT5hY2tfdHgpCiAJCQkJCQkgIHsKIAkJCQkJCSAgICBkZXZfa2ZyZWVfc2tiX2lycShscC0+b3V0Z29pbmcuc2tiKTsKQEAgLTkzMCw3ICs5MjYsNyBAQAogCQl9CiAJCWlmIChzdGF0dXMgJiBscC0+aW50bWFzayAmIFJFQ09OZmxhZykgewogCQkJQUNPTU1BTkQoQ0ZMQUdTY21kIHwgQ09ORklHY2xlYXIpOwotCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAKIAkJCUJVR01TRyhEX1JFQ09OLCAiTmV0d29yayByZWNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQgKHN0YXR1cz0lWGgpXG4iLAogCQkJICAgICAgIHN0YXR1cyk7CkBAIC0xMDM4LDggKzEwMzQsOCBAQAogCSAgICAgICAiKCVkKzQgYnl0ZXMpXG4iLAogCSAgICAgICBidWZudW0sIHBrdC5oYXJkLnNvdXJjZSwgcGt0LmhhcmQuZGVzdCwgbGVuZ3RoKTsKIAotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCArIEFSQ19IRFJfU0laRTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCArIEFSQ19IRFJfU0laRTsKIAogCS8qIGNhbGwgdGhlIHJpZ2h0IHJlY2VpdmVyIGZvciB0aGUgcHJvdG9jb2wgKi8KIAlpZiAoYXJjX3Byb3RvX21hcFtzb2Z0LT5wcm90b10tPmlzX2lwKSB7CkBAIC0xMDY3LDE4ICsxMDYzLDYgQEAKIH0KIAogCi0KLS8qIAotICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yCi0gKiBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJjbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxwLT5zdGF0czsKLX0KLQotCiBzdGF0aWMgdm9pZCBudWxsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWZudW0sCiAJCSAgICBzdHJ1Y3QgYXJjaGRyICpwa3RoZHIsIGludCBsZW5ndGgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwppbmRleCAzMDU4MGJiLi4wODNlMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUgKyBzaXplb2YoaW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSArIHNpemVvZihpbnQpKTsKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJDTkVUKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIDsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBACiAgIEJVR01TRyhEX1BST1RPLCAiQWNra25vd2xlZGdlIGZvciBjYXAgcGFja2V0ICV4LlxuIiwKIAkgKigoaW50KikmYWNrcGt0LT5zb2Z0LmNhcC5jb29raWVbMF0pKTsKIAotICBhY2tza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUkNORVQpOworICBhY2tza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIAogICBCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIGFja3NrYiwgImFja190eF9yZWN2Iik7CiAgIG5ldGlmX3J4KGFja3NrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKaW5kZXggZWE1M2E5NC4uZGIwOGZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYwpAQCAtMTUxLDYgKzE1MSw4IEBACiAJaWYgKG5vZGUgJiYgbm9kZSAhPSAweGZmKQogCQlkZXYtPmRldl9hZGRyWzBdID0gbm9kZTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZjb20yMDAyMF9uZXRkZXZfb3BzOworCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxwLT5iYWNrcGxhbmUgPSBiYWNrcGxhbmU7CiAJbHAtPmNsb2NrcCA9IGNsb2NrcCAmIDc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKaW5kZXggOGI1MWY2My4uZGJmNGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwpAQCAtNzIsNiArNzIsOSBAQAogCWRldiA9IGFsbG9jX2FyY2RldihkZXZpY2UpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+bmV0ZGV2X29wcyA9ICZjb20yMDAyMF9uZXRkZXZfb3BzOworCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCmluZGV4IDEwMzY4ODMuLjY1MTI3NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCkBAIC0xNDksNiArMTQ5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2NvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjb20yMDAyMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGFyY25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGFyY25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBjb20yMDAyMF9zZXRfbWNfbGlzdCwKK307CisKIC8qIFNldCB1cCB0aGUgc3RydWN0IG5ldF9kZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FyZC4gIENhbGxlZCBhZnRlcgogICogcHJvYmluZyBzdWNjZWVkcy4KICAqLwpAQCAtMTcwLDggKzE3OCw2IEBACiAJbHAtPmh3LmNvcHlfZnJvbV9jYXJkID0gY29tMjAwMjBfY29weV9mcm9tX2NhcmQ7CiAJbHAtPmh3LmNsb3NlID0gY29tMjAwMjBfY2xvc2U7CiAKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNvbTIwMDIwX3NldF9tY19saXN0OwotCiAJaWYgKCFkZXYtPmRldl9hZGRyWzBdKQogCQlkZXYtPmRldl9hZGRyWzBdID0gaW5iKGlvYWRkciArIEJVU19BTElHTio4KTsJLyogRklYTUU6IGRvIHRoaXMgc29tZSBvdGhlciB3YXkhICovCiAKQEAgLTM0Miw2ICszNDgsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DU19NT0RVTEUpCiBFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX2NoZWNrKTsKIEVYUE9SVF9TWU1CT0woY29tMjAwMjBfZm91bmQpOworRVhQT1JUX1NZTUJPTChjb20yMDAyMF9uZXRkZXZfb3BzKTsKICNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYwppbmRleCA0OWQzOWE5Li4wNmY4ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKQEAgLTg4LDcgKzg4LDYgQEAKICAqLwogc3RhdGljIF9fYmUxNiB0eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYXJjX3JmYzEwNTEgKnNvZnQgPSAmcGt0LT5zb2Z0LnJmYzEwNTE7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTA1MV9IRFJfU0laRTsKQEAgLTExMiw4ICsxMTEsOCBAQAogCQlyZXR1cm4gaHRvbnMoRVRIX1BfQVJQKTsKIAogCWRlZmF1bHQ6Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQwLDcgKzEzOSw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0xNjgsNyArMTY3LDYgQEAKIHN0YXRpYyBpbnQgYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQl1bnNpZ25lZCBzaG9ydCB0eXBlLCB1aW50OF90IGRhZGRyKQogewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMDUxX0hEUl9TSVpFOwogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYl9wdXNoKHNrYiwgaGRyX3NpemUpOwogCXN0cnVjdCBhcmNfcmZjMTA1MSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTA1MTsKQEAgLTE4NCw4ICsxODIsOCBAQAogCWRlZmF1bHQ6CiAJCUJVR01TRyhEX05PUk1BTCwgIlJGQzEwNTE6IEkgZG9uJ3QgdW5kZXJzdGFuZCBwcm90b2NvbCAlZCAoJVhoKVxuIiwKIAkJICAgICAgIHR5cGUsIHR5cGUpOwotCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKaW5kZXggMjMwM2QzYS4uNzQ1NTMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCkBAIC05Miw3ICs5Miw2IEBACiB7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBhcmNfcmZjMTIwMSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTIwMTsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTIwMV9IRFJfU0laRTsKIAogCS8qIFB1bGwgb2ZmIHRoZSBhcmNuZXQgaGVhZGVyLiAqLwpAQCAtMTIxLDggKzEyMCw4IEBACiAJY2FzZSBBUkNfUF9OT1ZFTExfRUM6CiAJCXJldHVybiBodG9ucyhFVEhfUF84MDJfMyk7CiAJZGVmYXVsdDoKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlscC0+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+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKaW5kZXggM2VjMjBjYy4uY2M3NzA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJaW50IG1vcmUgPSAwOwogCiAJCXNwaW5fbG9ja19pcnEoJmVwLT5yeF9sb2NrKTsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQl3cmwoZXAsIFJFR19JTlRFTiwgUkVHX0lOVEVOX1RYIHwgUkVHX0lOVEVOX1JYKTsKIAkJaWYgKGVwOTN4eF9oYXZlX21vcmVfcngoZXApKSB7CiAJCQl3cmwoZXAsIFJFR19JTlRFTiwgUkVHX0lOVEVOX1RYKTsKQEAgLTMwNyw3ICszMDcsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmZXAtPnJ4X2xvY2spOwogCi0JCWlmIChtb3JlICYmIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpCisJCWlmIChtb3JlICYmIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkKIAkJCWdvdG8gcG9sbF9zb21lX21vcmU7CiAJfQogCkBAIC00MTUsOSArNDE1LDkgQEAKIAogCWlmIChzdGF0dXMgJiBSRUdfSU5UU1RTX1JYKSB7CiAJCXNwaW5fbG9jaygmZXAtPnJ4X2xvY2spOwotCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmVwLT5uYXBpKSkpIHsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmVwLT5uYXBpKSkpIHsKIAkJCXdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFgpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZXAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZlcC0+bmFwaSk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmVwLT5yeF9sb2NrKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwppbmRleCA1ZmNlMWQ1Li41ZmUxN2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3J4X2lycVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCXFtZ3JfZGlzYWJsZV9pcnEocG9ydC0+cGxhdC0+cnhxKTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CiB9CiAKIHN0YXRpYyBpbnQgZXRoX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtNDk4LDE2ICs0OTgsMTYgQEAKIAogCQlpZiAoKG4gPSBxdWV1ZV9nZXRfZGVzYyhyeHEsIHBvcnQsIDApKSA8IDApIHsKICNpZiBERUJVR19SWAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCBuZXRpZl9yeF9jb21wbGV0ZVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwgbmFwaV9jb21wbGV0ZVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQlxbWdyX2VuYWJsZV9pcnEocnhxKTsKIAkJCWlmICghcW1ncl9zdGF0X2VtcHR5KHJ4cSkgJiYKLQkJCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKSB7CisJCQkgICAgbmFwaV9yZXNjaGVkdWxlKG5hcGkpKSB7CiAjaWYgREVCVUdfUlgKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIgotCQkJCSAgICAgICAiIG5ldGlmX3J4X3Jlc2NoZWR1bGUgc3VjY2Vzc2VkXG4iLAorCQkJCSAgICAgICAiIG5hcGlfcmVzY2hlZHVsZSBzdWNjZXNzZWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJCQlxbWdyX2Rpc2FibGVfaXJxKHJ4cSk7CkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCX0KIAlwb3J0c19vcGVuKys7CiAJLyogd2UgbWF5IGFscmVhZHkgaGF2ZSBSWCBkYXRhLCBlbmFibGVzIElSUSAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCmluZGV4IGYzYTEyNzQuLjM1Y2QyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKQEAgLTEwNTksNyArMTA1OSw3IEBACiB7CiAJc3RybGNweShpbmZvLT5kcml2ZXIsIE1PRFVMRU5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGluZm8tPnZlcnNpb24sIE1PRFVMRVZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybGNweShpbmZvLT5idXNfaW5mbywgbmRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLAorCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKG5kZXYtPmRldi5wYXJlbnQpLAogCQlzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCA3MmVhNmUzLi5jZWQ3MDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdDE3MDAuYworKysgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwpAQCAtODI4LDcgKzgyOCw2IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgbWNfZmlsdGVyWzhdOwkJIC8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKQEAgLTg1Nyw2ICs4NTYsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZscC0+bG9jaywgZmxhZ3MpOwogCWlmIChtZW1jbXAobWNfZmlsdGVyLCBscC0+bWNfZmlsdGVyLCBzaXplb2YobWNfZmlsdGVyKSkpIHsKKwkJaW50IGk7CiAJCWludCBzYXZlZF9iYW5rID0gaW53KGlvYWRkciArIENPTkZJR18wKTsKIAkJLyogU3dpdGNoIHRvIGJhbmsgMSBhbmQgc2V0IHRoZSBtdWx0aWNhc3QgdGFibGUuICovCiAJCW91dHcoKHNhdmVkX2JhbmsgJiB+MHgwQzAwKSB8IDB4MDQ4MCwgaW9hZGRyICsgQ09ORklHXzApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKaW5kZXggYWMxMWI4NC4uZTE2NThlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaCBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmgKaW5kZXggYzQ5NTUwZC4uMmJmNjNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oCkBAIC00NDgsNyArNDQ4LDcgQEAKIAkvKiBBbGwgRGVzY3JpcHRvciBtZW1vcnkgKi8KIAlkbWFfYWRkcl90ICAJcmluZ19kbWE7CiAJdm9pZCAgICAgCSpyaW5nX3Zpcl9hZGRyOwotCWludCAgICAgICAgICAgICByaW5nX3NpemU7CisJdTMyICAgICAgICAgICAgIHJpbmdfc2l6ZTsKIAogCXN0cnVjdCBhdGwxZV90eF9yaW5nIHR4X3Jpbmc7CiAJc3RydWN0IGF0bDFlX3J4X3JpbmcgcnhfcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwppbmRleCBiYjkwOTRkLi5jNzU4ODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCkBAIC0xMzI2LDkgKzEzMjYsOSBAQAogCQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSU1SLAogCQkJCSAgICAgSU1SX05PUk1BTF9NQVNLICYgfklTUl9SWF9FVkVOVCk7CiAJCQlBVF9XUklURV9GTFVTSChodyk7Ci0JCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoCisJCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgKIAkJCQkgICAmYWRhcHRlci0+bmFwaSkpKQotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQkJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJCX0KIAl9IHdoaWxlICgtLW1heF9pbnRzID4gMCk7CiAJLyogcmUtZW5hYmxlIEludGVycnVwdCovCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCS8qIElmIG5vIFR4IGFuZCBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogcXVpdF9wb2xsaW5nOgotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW1yX2RhdGEgPSBBVF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIpOwogCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SLCBpbXJfZGF0YSB8IElTUl9SWF9FVkVOVCk7CiAJCS8qIHRlc3QgZGVidWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCmluZGV4IGY3MmFiYjMuLmIzYmU1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYwpAQCAtNDEsNyArNDEsNyBAQAogCiAjZGVmaW5lIEFUTDFFX1BBUkFNKHgsIGRlc2MpIFwKIAlzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgeFtBVEwxRV9NQVhfTklDICsgMV0gPSBBVEwxRV9QQVJBTV9JTklUOyBcCi0Jc3RhdGljIGludCBudW1fIyN4OyBcCisJc3RhdGljIHVuc2lnbmVkIGludCBudW1fIyN4OyBcCiAJbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHgsIHgsIGludCwgJm51bV8jI3gsIDApOyBcCiAJTU9EVUxFX1BBUk1fREVTQyh4LCBkZXNjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwppbmRleCBjMGNlZWUwLi40M2ZjMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAgKiBEZWZhdWx0IFZhbHVlOiAxMDAgKDIwMHVzKQogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgaW50X21vZF90aW1lcltBVEwxX01BWF9OSUMrMV0gPSBBVEwxX1BBUkFNX0lOSVQ7Ci1zdGF0aWMgaW50IG51bV9pbnRfbW9kX3RpbWVyOworc3RhdGljIHVuc2lnbmVkIGludCBudW1faW50X21vZF90aW1lcjsKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChpbnRfbW9kX3RpbWVyLCBpbnRfbW9kX3RpbWVyLCBpbnQsCiAJJm51bV9pbnRfbW9kX3RpbWVyLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW50X21vZF90aW1lciwgIkludGVycnVwdCBtb2RlcmF0b3IgdGltZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggYmMzOTQ0OS4uOWZlMDZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTI4NTQsNyArMjg1NCw3IEBACiAjZWxzZQogI2RlZmluZSBBVEwyX1BBUkFNKFgsIGRlc2MpIFwKICAgICBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgWFtBVEwyX01BWF9OSUMrMV0gPSBBVEwyX1BBUkFNX0lOSVQ7IFwKLSAgICBzdGF0aWMgaW50IG51bV8jI1ggPSAwOyBcCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBudW1fIyNYOyBcCiAgICAgbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKFgsIFgsIGludCwgJm51bV8jI1gsIDApOyBcCiAgICAgTU9EVUxFX1BBUk1fREVTQyhYLCBkZXNjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDljODc1YmIuLjQyNzRlNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTgxLDI0ICs4MSw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vLyBwcm90b3R5cGVzCi1zdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBlbmFibGVfcnhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50LCB2b2lkICopOwotc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOwotc3RhdGljIGludCBhdTEwMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyB2b2lkIGF1MTAwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50LCB1MTYpOwotc3RhdGljIHZvaWQgYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwotCiAvKgogICogVGhlb3J5IG9mIG9wZXJhdGlvbgogICoKQEAgLTE4OCw2ICsxNzAsMjYgQEAKICMgZXJyb3IgTUFDMC1hc3NvY2lhdGVkIFBIWSBhdHRhY2hlZCAybmQgTUFDcyBNSUkgYnVzIG5vdCBzdXBwb3J0ZWQgeWV0CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2VfcmVzZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZihmb3JjZV9yZXNldCB8fCAoIWF1cC0+bWFjX2VuYWJsZWQpKSB7CisJCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9DTE9DS19FTkFCTEU7CisJCWF1X3N5bmNfZGVsYXkoMik7CisJCSphdXAtPmVuYWJsZSA9IChNQUNfRU5fUkVTRVQwIHwgTUFDX0VOX1JFU0VUMSB8IE1BQ19FTl9SRVNFVDIKKwkJCQl8IE1BQ19FTl9DTE9DS19FTkFCTEUpOworCQlhdV9zeW5jX2RlbGF5KDIpOworCisJCWF1cC0+bWFjX2VuYWJsZWQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworfQorCiAvKgogICogTUlJIG9wZXJhdGlvbnMKICAqLwpAQCAtMjgxLDYgKzI4MywxMDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBoYXJkIHN0b3BcbiIsIGRldi0+bmFtZSk7CisKKwlhdXAtPm1hYy0+Y29udHJvbCAmPSB+KE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFKTsKKwlhdV9zeW5jX2RlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGVfcnhfdHhcbiIsIGRldi0+bmFtZSk7CisKKwlhdXAtPm1hYy0+Y29udHJvbCB8PSAoTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOworCWF1X3N5bmNfZGVsYXkoMTApOworfQorCitzdGF0aWMgdm9pZAorYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBhdXAtPnBoeV9kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWludCBzdGF0dXNfY2hhbmdlID0gMDsKKworCUJVR19PTighYXVwLT5waHlfZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX3NwZWVkICE9IHBoeWRldi0+c3BlZWQpKSB7CisJCS8vIHNwZWVkIGNoYW5nZWQKKworCQlzd2l0Y2gocGh5ZGV2LT5zcGVlZCkgeworCQljYXNlIFNQRUVEXzEwOgorCQljYXNlIFNQRUVEXzEwMDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogU3BlZWQgKCVkKSBpcyBub3QgMTAvMTAwID8/P1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOworCQkJYnJlYWs7CisJCX0KKworCQlhdXAtPm9sZF9zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJaWYgKHBoeWRldi0+bGluayAmJiAoYXVwLT5vbGRfZHVwbGV4ICE9IHBoeWRldi0+ZHVwbGV4KSkgeworCQkvLyBkdXBsZXggbW9kZSBjaGFuZ2VkCisKKwkJLyogc3dpdGNoaW5nIGR1cGxleCBtb2RlIHJlcXVpcmVzIHRvIGRpc2FibGUgcnggYW5kIHR4ISAqLworCQloYXJkX3N0b3AoZGV2KTsKKworCQlpZiAoRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXgpCisJCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKKwkJCQkJICAgICB8IE1BQ19GVUxMX0RVUExFWCkKKwkJCQkJICAgICAmIH5NQUNfRElTQUJMRV9SWF9PV04pOworCQllbHNlCisJCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKKwkJCQkJICAgICAgJiB+TUFDX0ZVTExfRFVQTEVYKQorCQkJCQkgICAgIHwgTUFDX0RJU0FCTEVfUlhfT1dOKTsKKwkJYXVfc3luY19kZWxheSgxKTsKKworCQllbmFibGVfcnhfdHgoZGV2KTsKKwkJYXVwLT5vbGRfZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisKKwkJc3RhdHVzX2NoYW5nZSA9IDE7CisJfQorCisJaWYocGh5ZGV2LT5saW5rICE9IGF1cC0+b2xkX2xpbmspIHsKKwkJLy8gbGluayBzdGF0ZSBjaGFuZ2VkCisKKwkJaWYgKCFwaHlkZXYtPmxpbmspIHsKKwkJCS8qIGxpbmsgd2VudCBkb3duICovCisJCQlhdXAtPm9sZF9zcGVlZCA9IDA7CisJCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsKKwkJfQorCisJCWF1cC0+b2xkX2xpbmsgPSBwaHlkZXYtPmxpbms7CisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1c19jaGFuZ2UpIHsKKwkJaWYgKHBoeWRldi0+bGluaykKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwICglZC8lcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkLAorCQkJICAgICAgIERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTM1NSw4ICs0NTgsOCBAQAogCS8qIG5vdyB3ZSBhcmUgc3VwcG9zZWQgdG8gaGF2ZSBhIHByb3BlciBwaHlkZXYsIHRvIGF0dGFjaCB0by4uLiAqLwogCUJVR19PTihwaHlkZXYtPmF0dGFjaGVkX2Rldik7CiAKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmF1MTAwMF9hZGp1c3RfbGluaywgMCwKLQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJmF1MTAwMF9hZGp1c3RfbGluaywKKwkJCTAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwpAQCAtMzgxLDggKzQ4NCw4IEBACiAJYXVwLT5waHlfZGV2ID0gcGh5ZGV2OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCi0JICAgICAgICIobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJICAgICAgICIobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTIsNDggKzUxNSw2IEBACiAJYXVwLT5wREJmcmVlID0gcERCOwogfQogCi1zdGF0aWMgdm9pZCBlbmFibGVfcnhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9yeF90eFxuIiwgZGV2LT5uYW1lKTsKLQotCWF1cC0+bWFjLT5jb250cm9sIHw9IChNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7Ci0JYXVfc3luY19kZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZCBzdG9wXG4iLCBkZXYtPm5hbWUpOwotCi0JYXVwLT5tYWMtPmNvbnRyb2wgJj0gfihNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7Ci0JYXVfc3luY19kZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCi0JaWYoZm9yY2VfcmVzZXQgfHwgKCFhdXAtPm1hY19lbmFibGVkKSkgewotCQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOwotCQlhdV9zeW5jX2RlbGF5KDIpOwotCQkqYXVwLT5lbmFibGUgPSAoTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyCi0JCQkJfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFKTsKLQkJYXVfc3luY19kZWxheSgyKTsKLQotCQlhdXAtPm1hY19lbmFibGVkID0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIHZvaWQgcmVzZXRfbWFjX3VubG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTQyLDMwICs2MDMsNiBAQAogc3RhdGljIGludCBudW1faWZzOwogCiAvKgotICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcwotICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCi0gKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQotewotCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZm91bmRfb25lID0gMDsKLQotCW51bV9pZnMgPSBOVU1fRVRIX0lOVEVSRkFDRVMgLSBuaTsKLQotCWZvcihpID0gMDsgaSA8IG51bV9pZnM7IGkrKykgewotCQlkZXYgPSBhdTEwMDBfcHJvYmUoaSk7Ci0JCWlmbGlzdFtpXS5kZXYgPSBkZXY7Ci0JCWlmIChkZXYpCi0JCQlmb3VuZF9vbmUrKzsKLQl9Ci0JaWYgKCFmb3VuZF9vbmUpCi0JCXJldHVybiAtRU5PREVWOwotCXJldHVybiAwOwotfQotCi0vKgogICogZXRodG9vbCBvcGVyYXRpb25zCiAgKi8KIApAQCAtNjExLDYgKzY0OCw0MDUgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIAorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJmYWNlLgorICoKKyAqIFdoZW4gdGhlIGRldmljZSBwb3dlcnMgdXAsIHRoZSBjbG9ja3MgYXJlIGRpc2FibGVkIGFuZCB0aGUKKyAqIG1hYyBpcyBpbiByZXNldCBzdGF0ZS4gIFdoZW4gdGhlIGludGVyZmFjZSBpcyBjbG9zZWQsIHdlCisgKiBkbyB0aGUgc2FtZSAtLSByZXNldCB0aGUgZGV2aWNlIGFuZCBkaXNhYmxlIHRoZSBjbG9ja3MgdG8KKyAqIGNvbnNlcnZlIHBvd2VyLiBUaHVzLCB3aGVuZXZlciBhdTEwMDBfaW5pdCgpIGlzIGNhbGxlZCwKKyAqIHRoZSBkZXZpY2Ugc2hvdWxkIGFscmVhZHkgYmUgaW4gcmVzZXQgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwl1MzIgY29udHJvbDsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBhdTEwMDBfaW5pdFxuIiwgZGV2LT5uYW1lKTsKKworCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJlc2V0ICovCisJZW5hYmxlX21hYyhkZXYsIDEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgPSAwOworCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2RtYV9yaW5nWzBdLT5idWZmX3N0YXQgJiAweEMpID4+IDI7CisJYXVwLT50eF90YWlsID0gYXVwLT50eF9oZWFkOworCWF1cC0+cnhfaGVhZCA9IChhdXAtPnJ4X2RtYV9yaW5nWzBdLT5idWZmX3N0YXQgJiAweEMpID4+IDI7CisKKwlhdXAtPm1hYy0+bWFjX2FkZHJfaGlnaCA9IGRldi0+ZGV2X2FkZHJbNV08PDggfCBkZXYtPmRldl9hZGRyWzRdOworCWF1cC0+bWFjLT5tYWNfYWRkcl9sb3cgPSBkZXYtPmRldl9hZGRyWzNdPDwyNCB8IGRldi0+ZGV2X2FkZHJbMl08PDE2IHwKKwkJZGV2LT5kZXZfYWRkclsxXTw8OCB8IGRldi0+ZGV2X2FkZHJbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RNQTsgaSsrKSB7CisJCWF1cC0+cnhfZG1hX3JpbmdbaV0tPmJ1ZmZfc3RhdCB8PSBSWF9ETUFfRU5BQkxFOworCX0KKwlhdV9zeW5jKCk7CisKKwljb250cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7CisjaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47CisjZW5kaWYKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkKKwkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOworCQllbHNlCisJCQljb250cm9sIHw9IE1BQ19ESVNBQkxFX1JYX09XTjsKKwl9IGVsc2UgeyAvKiBQSFktbGVzcyBvcCwgYXNzdW1lIGZ1bGwtZHVwbGV4ICovCisJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOworCX0KKworCWF1cC0+bWFjLT5jb250cm9sID0gY29udHJvbDsKKwlhdXAtPm1hYy0+dmxhbjFfdGFnID0gMHg4MTAwOyAvKiBhY3RpdmF0ZSB2bGFuIHN1cHBvcnQgKi8KKwlhdV9zeW5jKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKKworCXBzLT5yeF9wYWNrZXRzKys7CisJaWYgKHN0YXR1cyAmIFJYX01DQVNUX0ZSQU1FKQorCQlwcy0+bXVsdGljYXN0Kys7CisKKwlpZiAoc3RhdHVzICYgUlhfRVJST1IpIHsKKwkJcHMtPnJ4X2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQorCQkJcHMtPnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIChSWF9PVkVSTEVOIHwgUlhfT1ZFUkxFTiB8IFJYX0xFTl9FUlJPUikpCisJCQlwcy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKQorCQkJcHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCisJCQlwcy0+Y29sbGlzaW9ucysrOworCX0KKwllbHNlCisJCXBzLT5yeF9ieXRlcyArPSBzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSzsKKworfQorCisvKgorICogQXUxMDAwIHJlY2VpdmUgcm91dGluZS4KKyAqLworc3RhdGljIGludCBhdTEwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2xhdGlsZSByeF9kbWFfdCAqcHJ4ZDsKKwl1MzIgYnVmZl9zdGF0LCBzdGF0dXM7CisJZGJfZGVzdF90ICpwREI7CisJdTMyCWZybWxlbjsKKworCWlmIChhdTEwMDBfZGVidWcgPiA1KQorCQlwcmludGsoIiVzOiBhdTEwMDBfcnggaGVhZCAlZFxuIiwgZGV2LT5uYW1lLCBhdXAtPnJ4X2hlYWQpOworCisJcHJ4ZCA9IGF1cC0+cnhfZG1hX3JpbmdbYXVwLT5yeF9oZWFkXTsKKwlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7CisJd2hpbGUgKGJ1ZmZfc3RhdCAmIFJYX1RfRE9ORSkgIHsKKwkJc3RhdHVzID0gcHJ4ZC0+c3RhdHVzOworCQlwREIgPSBhdXAtPnJ4X2RiX2ludXNlW2F1cC0+cnhfaGVhZF07CisJCXVwZGF0ZV9yeF9zdGF0cyhkZXYsIHN0YXR1cyk7CisJCWlmICghKHN0YXR1cyAmIFJYX0VSUk9SKSkgIHsKKworCQkJLyogZ29vZCBmcmFtZSAqLworCQkJZnJtbGVuID0gKHN0YXR1cyAmIFJYX0ZSQU1FX0xFTl9NQVNLKTsKKwkJCWZybWxlbiAtPSA0OyAvKiBSZW1vdmUgRkNTICovCisJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGZybWxlbiArIDIpOworCQkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIElQIGhlYWRlciBhbGlnbiAqLworCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLAorCQkJCSh1bnNpZ25lZCBjaGFyICopcERCLT52YWRkciwgZnJtbGVuKTsKKwkJCXNrYl9wdXQoc2tiLCBmcm1sZW4pOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCW5ldGlmX3J4KHNrYik7CS8qIHBhc3MgdGhlIHBhY2tldCB0byB1cHBlciBsYXllcnMgKi8KKwkJfQorCQllbHNlIHsKKwkJCWlmIChhdTEwMDBfZGVidWcgPiA0KSB7CisJCQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKKwkJCQkJcHJpbnRrKCJyeCBtaXNzXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfV0RPR19USU1FUikKKwkJCQkJcHJpbnRrKCJyeCB3ZG9nXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfUlVOVCkKKwkJCQkJcHJpbnRrKCJyeCBydW50XG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfT1ZFUkxFTikKKwkJCQkJcHJpbnRrKCJyeCBvdmVybGVuXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfQ09MTCkKKwkJCQkJcHJpbnRrKCJyeCBjb2xsXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTUlJX0VSUk9SKQorCQkJCQlwcmludGsoInJ4IG1paSBlcnJvclxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKKwkJCQkJcHJpbnRrKCJyeCBjcmMgZXJyb3JcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9MRU5fRVJST1IpCisJCQkJCXByaW50aygicnggbGVuIGVycm9yXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfVV9DTlRSTF9GUkFNRSkKKwkJCQkJcHJpbnRrKCJyeCB1IGNvbnRyb2wgZnJhbWVcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCisJCQkJCXByaW50aygicnggbWlzc1xuIik7CisJCQl9CisJCX0KKwkJcHJ4ZC0+YnVmZl9zdGF0ID0gKHUzMikocERCLT5kbWFfYWRkciB8IFJYX0RNQV9FTkFCTEUpOworCQlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9oZWFkICsgMSkgJiAoTlVNX1JYX0RNQSAtIDEpOworCQlhdV9zeW5jKCk7CisKKwkJLyogbmV4dCBkZXNjcmlwdG9yICovCisJCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07CisJCWJ1ZmZfc3RhdCA9IHByeGQtPmJ1ZmZfc3RhdDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKKworCWlmIChzdGF0dXMgJiBUWF9GUkFNRV9BQk9SVEVEKSB7CisJCWlmICghYXVwLT5waHlfZGV2IHx8IChEVVBMRVhfRlVMTCA9PSBhdXAtPnBoeV9kZXYtPmR1cGxleCkpIHsKKwkJCWlmIChzdGF0dXMgJiAoVFhfSkFCX1RJTUVPVVQgfCBUWF9VTkRFUlJVTikpIHsKKwkJCQkvKiBhbnkgb3RoZXIgdHggZXJyb3JzIGFyZSBvbmx5IHZhbGlkCisJCQkJICogaW4gaGFsZiBkdXBsZXggbW9kZSAqLworCQkJCXBzLT50eF9lcnJvcnMrKzsKKwkJCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXBzLT50eF9lcnJvcnMrKzsKKwkJCXBzLT50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJaWYgKHN0YXR1cyAmIChUWF9OT19DQVJSSUVSIHwgVFhfTE9TU19DQVJSSUVSKSkKKwkJCQlwcy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIENhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIGFja25vd2xlZGdlCisgKiB0aGUgVFggRE9ORSBiaXRzLiAgVGhpcyBpcyBhIG11c3QgaWYgdGhlIGlycSBpcyBzZXR1cCBhcworICogZWRnZSB0cmlnZ2VyZWQuCisgKi8KK3N0YXRpYyB2b2lkIGF1MTAwMF90eF9hY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7CisKKwlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOworCisJd2hpbGUgKHB0eGQtPmJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgeworCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOworCQlwdHhkLT5idWZmX3N0YXQgJj0gflRYX1RfRE9ORTsKKwkJcHR4ZC0+bGVuID0gMDsKKwkJYXVfc3luYygpOworCisJCWF1cC0+dHhfdGFpbCA9IChhdXAtPnR4X3RhaWwgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7CisJCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfdGFpbF07CisKKwkJaWYgKGF1cC0+dHhfZnVsbCkgeworCQkJYXVwLT50eF9mdWxsID0gMDsKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJfQorCX0KK30KKworLyoKKyAqIEF1MTAwMCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYXUxMDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKworCS8qIEhhbmRsZSBSWCBpbnRlcnJ1cHRzIGZpcnN0IHRvIG1pbmltaXplIGNoYW5jZSBvZiBvdmVycnVuICovCisKKwlhdTEwMDBfcngoZGV2KTsKKwlhdTEwMDBfdHhfYWNrKGRldik7CisJcmV0dXJuIElSUV9SRVRWQUwoMSk7Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBvcGVuOiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKKworCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0LCAwLAorCQkJCQlkZXYtPm5hbWUsIGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAorCQkJCWRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgocmV0dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChhdXAtPnBoeV9kZXYpIHsKKwkJLyogY2F1c2UgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lIHRvIHNjaGVkdWxlIGEgbGluayBzdGF0ZSBjaGVjayAqLworCQlhdXAtPnBoeV9kZXYtPnN0YXRlID0gUEhZX0NIQU5HRUxJTks7CisJCXBoeV9zdGFydChhdXAtPnBoeV9kZXYpOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogb3BlbjogSW5pdGlhbGl6YXRpb24gZG9uZS5cbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBjbG9zZTogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoYXVwLT5waHlfZGV2KQorCQlwaHlfc3RvcChhdXAtPnBoeV9kZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJcmVzZXRfbWFjX3VubG9ja2VkIChkZXYpOworCisJLyogc3RvcCB0aGUgZGV2aWNlICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEF1MTAwMCB0cmFuc21pdCByb3V0aW5lLgorICovCitzdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKKwl2b2xhdGlsZSB0eF9kbWFfdCAqcHR4ZDsKKwl1MzIgYnVmZl9zdGF0OworCWRiX2Rlc3RfdCAqcERCOworCWludCBpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDUpCisJCXByaW50aygiJXM6IHR4OiBhdXAgJXggbGVuPSVkLCBkYXRhPSVwLCBoZWFkICVkXG4iLAorCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCwgc2tiLT5sZW4sCisJCQkJc2tiLT5kYXRhLCBhdXAtPnR4X2hlYWQpOworCisJcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF9oZWFkXTsKKwlidWZmX3N0YXQgPSBwdHhkLT5idWZmX3N0YXQ7CisJaWYgKGJ1ZmZfc3RhdCAmIFRYX0RNQV9FTkFCTEUpIHsKKwkJLyogV2UndmUgd3JhcHBlZCBhcm91bmQgYW5kIHRoZSB0cmFuc21pdHRlciBpcyBzdGlsbCBidXN5ICovCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJYXVwLT50eF9mdWxsID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCWVsc2UgaWYgKGJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgeworCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOworCQlwdHhkLT5sZW4gPSAwOworCX0KKworCWlmIChhdXAtPnR4X2Z1bGwpIHsKKwkJYXVwLT50eF9mdWxsID0gMDsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KKworCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOworCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CisJCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7CisJCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7CisJCX0KKwkJcHR4ZC0+bGVuID0gRVRIX1pMRU47CisJfQorCWVsc2UKKwkJcHR4ZC0+bGVuID0gc2tiLT5sZW47CisKKwlwcy0+dHhfcGFja2V0cysrOworCXBzLT50eF9ieXRlcyArPSBwdHhkLT5sZW47CisKKwlwdHhkLT5idWZmX3N0YXQgPSBwREItPmRtYV9hZGRyIHwgVFhfRE1BX0VOQUJMRTsKKwlhdV9zeW5jKCk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgVHggcmluZyBoYXMgYmVlbiBmdWxsIGxvbmdlciB0aGFuIHRoZSB3YXRjaGRvZyB0aW1lb3V0CisgKiB2YWx1ZS4gVGhlIHRyYW5zbWl0dGVyIG11c3QgYmUgaHVuZz8KKyAqLworc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBhdTEwMDBfdHhfdGltZW91dDogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisJcmVzZXRfbWFjKGRldik7CisJYXUxMDAwX2luaXQoZGV2KTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50aygiJXM6IHNldF9yeF9tb2RlOiBmbGFncz0leFxuIiwgZGV2LT5uYW1lLCBkZXYtPmZsYWdzKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCisJCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QUk9NSVNDVU9VUzsKKwl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAgfHwKKwkJCSAgIGRldi0+bWNfY291bnQgPiBNVUxUSUNBU1RfRklMVEVSX0xJTUlUKSB7CisJCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QQVNTX0FMTF9NVUxUSTsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhc3MgYWxsIG11bHRpY2FzdFxuIiwgZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLworCisJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7CisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OworCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCQlzZXRfYml0KGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik+PjI2LAorCQkJCQkobG9uZyAqKW1jX2ZpbHRlcik7CisJCX0KKwkJYXVwLT5tYWMtPm11bHRpX2hhc2hfaGlnaCA9IG1jX2ZpbHRlclsxXTsKKwkJYXVwLT5tYWMtPm11bHRpX2hhc2hfbG93ID0gbWNfZmlsdGVyWzBdOworCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfSEFTSF9NT0RFOworCX0KK30KKworc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlCisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChhdXAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIGF1MTAwMF9wcm9iZShpbnQgcG9ydF9udW0pCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZCA9IDA7CkBAIC02MjIsNyArMTA1OCw3IEBACiAJdTMyIGJhc2UsIG1hY2VuOwogCiAJaWYgKHBvcnRfbnVtID49IE5VTV9FVEhfSU5URVJGQUNFUykKLSAJCXJldHVybiBOVUxMOworCQlyZXR1cm4gTlVMTDsKIAogCWJhc2UgID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyICk7CiAJbWFjZW4gPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyKTsKQEAgLTgwNiwyMDAgKzEyNDIsMjYgQEAKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgdGhlIGludGVyZmFjZS4KLSAqCi0gKiBXaGVuIHRoZSBkZXZpY2UgcG93ZXJzIHVwLCB0aGUgY2xvY2tzIGFyZSBkaXNhYmxlZCBhbmQgdGhlCi0gKiBtYWMgaXMgaW4gcmVzZXQgc3RhdGUuICBXaGVuIHRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLCB3ZQotICogZG8gdGhlIHNhbWUgLS0gcmVzZXQgdGhlIGRldmljZSBhbmQgZGlzYWJsZSB0aGUgY2xvY2tzIHRvCi0gKiBjb25zZXJ2ZSBwb3dlci4gVGh1cywgd2hlbmV2ZXIgYXUxMDAwX2luaXQoKSBpcyBjYWxsZWQsCi0gKiB0aGUgZGV2aWNlIHNob3VsZCBhbHJlYWR5IGJlIGluIHJlc2V0IHN0YXRlLgorICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcworICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCisgKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCiAgKi8KLXN0YXRpYyBpbnQgYXUxMDAwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQogewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXUzMiBjb250cm9sOworCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgaSwgZm91bmRfb25lID0gMDsKIAotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoIiVzOiBhdTEwMDBfaW5pdFxuIiwgZGV2LT5uYW1lKTsKKwludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7CiAKLQkvKiBicmluZyB0aGUgZGV2aWNlIG91dCBvZiByZXNldCAqLwotCWVuYWJsZV9tYWMoZGV2LCAxKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWF1cC0+bWFjLT5jb250cm9sID0gMDsKLQlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOwotCWF1cC0+dHhfdGFpbCA9IGF1cC0+dHhfaGVhZDsKLQlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOwotCi0JYXVwLT5tYWMtPm1hY19hZGRyX2hpZ2ggPSBkZXYtPmRldl9hZGRyWzVdPDw4IHwgZGV2LT5kZXZfYWRkcls0XTsKLQlhdXAtPm1hYy0+bWFjX2FkZHJfbG93ID0gZGV2LT5kZXZfYWRkclszXTw8MjQgfCBkZXYtPmRldl9hZGRyWzJdPDwxNiB8Ci0JCWRldi0+ZGV2X2FkZHJbMV08PDggfCBkZXYtPmRldl9hZGRyWzBdOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgewotCQlhdXAtPnJ4X2RtYV9yaW5nW2ldLT5idWZmX3N0YXQgfD0gUlhfRE1BX0VOQUJMRTsKKwlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKKwkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOworCQlpZmxpc3RbaV0uZGV2ID0gZGV2OworCQlpZiAoZGV2KQorCQkJZm91bmRfb25lKys7CiAJfQotCWF1X3N5bmMoKTsKLQotCWNvbnRyb2wgPSBNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRTsKLSNpZm5kZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCi0JY29udHJvbCB8PSBNQUNfQklHX0VORElBTjsKLSNlbmRpZgotCWlmIChhdXAtPnBoeV9kZXYpIHsKLQkJaWYgKGF1cC0+cGh5X2Rldi0+bGluayAmJiAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKQotCQkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7Ci0JCWVsc2UKLQkJCWNvbnRyb2wgfD0gTUFDX0RJU0FCTEVfUlhfT1dOOwotCX0gZWxzZSB7IC8qIFBIWS1sZXNzIG9wLCBhc3N1bWUgZnVsbC1kdXBsZXggKi8KLQkJY29udHJvbCB8PSBNQUNfRlVMTF9EVVBMRVg7Ci0JfQotCi0JYXVwLT5tYWMtPmNvbnRyb2wgPSBjb250cm9sOwotCWF1cC0+bWFjLT52bGFuMV90YWcgPSAweDgxMDA7IC8qIGFjdGl2YXRlIHZsYW4gc3VwcG9ydCAqLwotCWF1X3N5bmMoKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBhdXAtPnBoeV9kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWludCBzdGF0dXNfY2hhbmdlID0gMDsKLQotCUJVR19PTighYXVwLT5waHlfZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX3NwZWVkICE9IHBoeWRldi0+c3BlZWQpKSB7Ci0JCS8vIHNwZWVkIGNoYW5nZWQKLQotCQlzd2l0Y2gocGh5ZGV2LT5zcGVlZCkgewotCQljYXNlIFNQRUVEXzEwOgotCQljYXNlIFNQRUVEXzEwMDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogU3BlZWQgKCVkKSBpcyBub3QgMTAvMTAwID8/P1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlhdXAtPm9sZF9zcGVlZCA9IHBoeWRldi0+c3BlZWQ7Ci0KLQkJc3RhdHVzX2NoYW5nZSA9IDE7Ci0JfQotCi0JaWYgKHBoeWRldi0+bGluayAmJiAoYXVwLT5vbGRfZHVwbGV4ICE9IHBoeWRldi0+ZHVwbGV4KSkgewotCQkvLyBkdXBsZXggbW9kZSBjaGFuZ2VkCi0KLQkJLyogc3dpdGNoaW5nIGR1cGxleCBtb2RlIHJlcXVpcmVzIHRvIGRpc2FibGUgcnggYW5kIHR4ISAqLwotCQloYXJkX3N0b3AoZGV2KTsKLQotCQlpZiAoRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXgpCi0JCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKLQkJCQkJICAgICB8IE1BQ19GVUxMX0RVUExFWCkKLQkJCQkJICAgICAmIH5NQUNfRElTQUJMRV9SWF9PV04pOwotCQllbHNlCi0JCQlhdXAtPm1hYy0+Y29udHJvbCA9ICgoYXVwLT5tYWMtPmNvbnRyb2wKLQkJCQkJICAgICAgJiB+TUFDX0ZVTExfRFVQTEVYKQotCQkJCQkgICAgIHwgTUFDX0RJU0FCTEVfUlhfT1dOKTsKLQkJYXVfc3luY19kZWxheSgxKTsKLQotCQllbmFibGVfcnhfdHgoZGV2KTsKLQkJYXVwLT5vbGRfZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7Ci0KLQkJc3RhdHVzX2NoYW5nZSA9IDE7Ci0JfQotCi0JaWYocGh5ZGV2LT5saW5rICE9IGF1cC0+b2xkX2xpbmspIHsKLQkJLy8gbGluayBzdGF0ZSBjaGFuZ2VkCi0KLQkJaWYgKCFwaHlkZXYtPmxpbmspIHsKLQkJCS8qIGxpbmsgd2VudCBkb3duICovCi0JCQlhdXAtPm9sZF9zcGVlZCA9IDA7Ci0JCQlhdXAtPm9sZF9kdXBsZXggPSAtMTsKLQkJfQotCi0JCWF1cC0+b2xkX2xpbmsgPSBwaHlkZXYtPmxpbms7Ci0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHN0YXR1c19jaGFuZ2UpIHsKLQkJaWYgKHBoeWRldi0+bGluaykKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwICglZC8lcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkLAotCQkJICAgICAgIERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4ID8gIkZ1bGwiIDogIkhhbGYiKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoIiVzOiBvcGVuOiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKLQotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0LCAwLAotCQkJCQlkZXYtPm5hbWUsIGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkXG4iLAotCQkJCWRldi0+bmFtZSwgZGV2LT5pcnEpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlmICgocmV0dmFsID0gYXUxMDAwX2luaXQoZGV2KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7Ci0JCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlmIChhdXAtPnBoeV9kZXYpIHsKLQkJLyogY2F1c2UgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lIHRvIHNjaGVkdWxlIGEgbGluayBzdGF0ZSBjaGVjayAqLwotCQlhdXAtPnBoeV9kZXYtPnN0YXRlID0gUEhZX0NIQU5HRUxJTks7Ci0JCXBoeV9zdGFydChhdXAtPnBoeV9kZXYpOwotCX0KLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogb3BlbjogSW5pdGlhbGl6YXRpb24gZG9uZS5cbiIsIGRldi0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoIiVzOiBjbG9zZTogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0KLQlpZiAoYXVwLT5waHlfZGV2KQotCQlwaHlfc3RvcChhdXAtPnBoeV9kZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCi0JcmVzZXRfbWFjX3VubG9ja2VkIChkZXYpOwotCi0JLyogc3RvcCB0aGUgZGV2aWNlICovCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KKwlpZiAoIWZvdW5kX29uZSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMjIsMjk4ICsxMjg0LDE1IEBACiAJCQlmb3IgKGogPSAwOyBqIDwgTlVNX1RYX0RNQTsgaisrKQogCQkJCWlmIChhdXAtPnR4X2RiX2ludXNlW2pdKQogCQkJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2pdKTsKLSAJCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgotIAkJCQkJICAgICAoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKLSAJCQkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKLSAJCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOwotIAkJCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoaWZsaXN0W2ldLm1hY2VuX2FkZHIpLCA0KTsKKwkJCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCisJCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisJCQkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTUFDX0lPU0laRSk7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7CiAJCQlmcmVlX25ldGRldihkZXYpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7Ci0KLQlpZiAoc3RhdHVzICYgVFhfRlJBTUVfQUJPUlRFRCkgewotCQlpZiAoIWF1cC0+cGh5X2RldiB8fCAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKSB7Ci0JCQlpZiAoc3RhdHVzICYgKFRYX0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7Ci0JCQkJLyogYW55IG90aGVyIHR4IGVycm9ycyBhcmUgb25seSB2YWxpZAotCQkJCSAqIGluIGhhbGYgZHVwbGV4IG1vZGUgKi8KLQkJCQlwcy0+dHhfZXJyb3JzKys7Ci0JCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwcy0+dHhfZXJyb3JzKys7Ci0JCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKLQkJCWlmIChzdGF0dXMgJiAoVFhfTk9fQ0FSUklFUiB8IFRYX0xPU1NfQ0FSUklFUikpCi0JCQkJcHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIGFja25vd2xlZGdlCi0gKiB0aGUgVFggRE9ORSBiaXRzLiAgVGhpcyBpcyBhIG11c3QgaWYgdGhlIGlycSBpcyBzZXR1cCBhcwotICogZWRnZSB0cmlnZ2VyZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGF1MTAwMF90eF9hY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7Ci0KLQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOwotCi0Jd2hpbGUgKHB0eGQtPmJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgewotCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOwotCQlwdHhkLT5idWZmX3N0YXQgJj0gflRYX1RfRE9ORTsKLQkJcHR4ZC0+bGVuID0gMDsKLQkJYXVfc3luYygpOwotCi0JCWF1cC0+dHhfdGFpbCA9IChhdXAtPnR4X3RhaWwgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7Ci0JCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfdGFpbF07Ci0KLQkJaWYgKGF1cC0+dHhfZnVsbCkgewotCQkJYXVwLT50eF9mdWxsID0gMDsKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJfQotCX0KLX0KLQotCi0vKgotICogQXUxMDAwIHRyYW5zbWl0IHJvdXRpbmUuCi0gKi8KLXN0YXRpYyBpbnQgYXUxMDAwX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwotCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOwotCXUzMiBidWZmX3N0YXQ7Ci0JZGJfZGVzdF90ICpwREI7Ci0JaW50IGk7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCIlczogdHg6IGF1cCAleCBsZW49JWQsIGRhdGE9JXAsIGhlYWQgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCAodW5zaWduZWQpYXVwLCBza2ItPmxlbiwKLQkJCQlza2ItPmRhdGEsIGF1cC0+dHhfaGVhZCk7Ci0KLQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X2hlYWRdOwotCWJ1ZmZfc3RhdCA9IHB0eGQtPmJ1ZmZfc3RhdDsKLQlpZiAoYnVmZl9zdGF0ICYgVFhfRE1BX0VOQUJMRSkgewotCQkvKiBXZSd2ZSB3cmFwcGVkIGFyb3VuZCBhbmQgdGhlIHRyYW5zbWl0dGVyIGlzIHN0aWxsIGJ1c3kgKi8KLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlhdXAtPnR4X2Z1bGwgPSAxOwotCQlyZXR1cm4gMTsKLQl9Ci0JZWxzZSBpZiAoYnVmZl9zdGF0ICYgVFhfVF9ET05FKSB7Ci0JCXVwZGF0ZV90eF9zdGF0cyhkZXYsIHB0eGQtPnN0YXR1cyk7Ci0JCXB0eGQtPmxlbiA9IDA7Ci0JfQotCi0JaWYgKGF1cC0+dHhfZnVsbCkgewotCQlhdXAtPnR4X2Z1bGwgPSAwOwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQotCi0JcERCID0gYXVwLT50eF9kYl9pbnVzZVthdXAtPnR4X2hlYWRdOwotCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBwREItPnZhZGRyLCBza2ItPmxlbik7Ci0JaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKLQkJZm9yIChpPXNrYi0+bGVuOyBpPEVUSF9aTEVOOyBpKyspIHsKLQkJCSgoY2hhciAqKXBEQi0+dmFkZHIpW2ldID0gMDsKLQkJfQotCQlwdHhkLT5sZW4gPSBFVEhfWkxFTjsKLQl9Ci0JZWxzZQotCQlwdHhkLT5sZW4gPSBza2ItPmxlbjsKLQotCXBzLT50eF9wYWNrZXRzKys7Ci0JcHMtPnR4X2J5dGVzICs9IHB0eGQtPmxlbjsKLQotCXB0eGQtPmJ1ZmZfc3RhdCA9IHBEQi0+ZG1hX2FkZHIgfCBUWF9ETUFfRU5BQkxFOwotCWF1X3N5bmMoKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfaGVhZCArIDEpICYgKE5VTV9UWF9ETUEgLSAxKTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKLQotCXBzLT5yeF9wYWNrZXRzKys7Ci0JaWYgKHN0YXR1cyAmIFJYX01DQVNUX0ZSQU1FKQotCQlwcy0+bXVsdGljYXN0Kys7Ci0KLQlpZiAoc3RhdHVzICYgUlhfRVJST1IpIHsKLQkJcHMtPnJ4X2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQotCQkJcHMtPnJ4X21pc3NlZF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIChSWF9PVkVSTEVOIHwgUlhfT1ZFUkxFTiB8IFJYX0xFTl9FUlJPUikpCi0JCQlwcy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgUlhfQ1JDX0VSUk9SKQotCQkJcHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCi0JCQlwcy0+Y29sbGlzaW9ucysrOwotCX0KLQllbHNlCi0JCXBzLT5yeF9ieXRlcyArPSBzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSzsKLQotfQotCi0vKgotICogQXUxMDAwIHJlY2VpdmUgcm91dGluZS4KLSAqLwotc3RhdGljIGludCBhdTEwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl2b2xhdGlsZSByeF9kbWFfdCAqcHJ4ZDsKLQl1MzIgYnVmZl9zdGF0LCBzdGF0dXM7Ci0JZGJfZGVzdF90ICpwREI7Ci0JdTMyCWZybWxlbjsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA1KQotCQlwcmludGsoIiVzOiBhdTEwMDBfcnggaGVhZCAlZFxuIiwgZGV2LT5uYW1lLCBhdXAtPnJ4X2hlYWQpOwotCi0JcHJ4ZCA9IGF1cC0+cnhfZG1hX3JpbmdbYXVwLT5yeF9oZWFkXTsKLQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7Ci0Jd2hpbGUgKGJ1ZmZfc3RhdCAmIFJYX1RfRE9ORSkgIHsKLQkJc3RhdHVzID0gcHJ4ZC0+c3RhdHVzOwotCQlwREIgPSBhdXAtPnJ4X2RiX2ludXNlW2F1cC0+cnhfaGVhZF07Ci0JCXVwZGF0ZV9yeF9zdGF0cyhkZXYsIHN0YXR1cyk7Ci0JCWlmICghKHN0YXR1cyAmIFJYX0VSUk9SKSkgIHsKLQotCQkJLyogZ29vZCBmcmFtZSAqLwotCQkJZnJtbGVuID0gKHN0YXR1cyAmIFJYX0ZSQU1FX0xFTl9NQVNLKTsKLQkJCWZybWxlbiAtPSA0OyAvKiBSZW1vdmUgRkNTICovCi0JCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGZybWxlbiArIDIpOwotCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIElQIGhlYWRlciBhbGlnbiAqLwotCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLAotCQkJCSh1bnNpZ25lZCBjaGFyICopcERCLT52YWRkciwgZnJtbGVuKTsKLQkJCXNrYl9wdXQoc2tiLCBmcm1sZW4pOwotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJCW5ldGlmX3J4KHNrYik7CS8qIHBhc3MgdGhlIHBhY2tldCB0byB1cHBlciBsYXllcnMgKi8KLQkJfQotCQllbHNlIHsKLQkJCWlmIChhdTEwMDBfZGVidWcgPiA0KSB7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKLQkJCQkJcHJpbnRrKCJyeCBtaXNzXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfV0RPR19USU1FUikKLQkJCQkJcHJpbnRrKCJyeCB3ZG9nXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfUlVOVCkKLQkJCQkJcHJpbnRrKCJyeCBydW50XG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfT1ZFUkxFTikKLQkJCQkJcHJpbnRrKCJyeCBvdmVybGVuXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfQ09MTCkKLQkJCQkJcHJpbnRrKCJyeCBjb2xsXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTUlJX0VSUk9SKQotCQkJCQlwcmludGsoInJ4IG1paSBlcnJvclxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKLQkJCQkJcHJpbnRrKCJyeCBjcmMgZXJyb3JcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9MRU5fRVJST1IpCi0JCQkJCXByaW50aygicnggbGVuIGVycm9yXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfVV9DTlRSTF9GUkFNRSkKLQkJCQkJcHJpbnRrKCJyeCB1IGNvbnRyb2wgZnJhbWVcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCi0JCQkJCXByaW50aygicnggbWlzc1xuIik7Ci0JCQl9Ci0JCX0KLQkJcHJ4ZC0+YnVmZl9zdGF0ID0gKHUzMikocERCLT5kbWFfYWRkciB8IFJYX0RNQV9FTkFCTEUpOwotCQlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9oZWFkICsgMSkgJiAoTlVNX1JYX0RNQSAtIDEpOwotCQlhdV9zeW5jKCk7Ci0KLQkJLyogbmV4dCBkZXNjcmlwdG9yICovCi0JCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07Ci0JCWJ1ZmZfc3RhdCA9IHByeGQtPmJ1ZmZfc3RhdDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIEF1MTAwMCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXUxMDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQotCS8qIEhhbmRsZSBSWCBpbnRlcnJ1cHRzIGZpcnN0IHRvIG1pbmltaXplIGNoYW5jZSBvZiBvdmVycnVuICovCi0KLQlhdTEwMDBfcngoZGV2KTsKLQlhdTEwMDBfdHhfYWNrKGRldik7Ci0JcmV0dXJuIElSUV9SRVRWQUwoMSk7Ci19Ci0KLQotLyoKLSAqIFRoZSBUeCByaW5nIGhhcyBiZWVuIGZ1bGwgbG9uZ2VyIHRoYW4gdGhlIHdhdGNoZG9nIHRpbWVvdXQKLSAqIHZhbHVlLiBUaGUgdHJhbnNtaXR0ZXIgbXVzdCBiZSBodW5nPwotICovCi1zdGF0aWMgdm9pZCBhdTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByaW50ayhLRVJOX0VSUiAiJXM6IGF1MTAwMF90eF90aW1lb3V0OiBkZXY9JXBcbiIsIGRldi0+bmFtZSwgZGV2KTsKLQlyZXNldF9tYWMoZGV2KTsKLQlhdTEwMDBfaW5pdChkZXYpOwotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogc2V0X3J4X21vZGU6IGZsYWdzPSV4XG4iLCBkZXYtPm5hbWUsIGRldi0+ZmxhZ3MpOwotCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KLQkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BST01JU0NVT1VTOwotCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICB8fAotCQkJICAgZGV2LT5tY19jb3VudCA+IE1VTFRJQ0FTVF9GSUxURVJfTElNSVQpIHsKLQkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BBU1NfQUxMX01VTFRJOwotCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUGFzcyBhbGwgbXVsdGljYXN0XG4iLCBkZXYtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJdTMyIG1jX2ZpbHRlclsyXTsJLyogTXVsdGljYXN0IGhhc2ggZmlsdGVyICovCi0KLQkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCQkgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQkJCXNldF9iaXQoZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKT4+MjYsCi0JCQkJCShsb25nICopbWNfZmlsdGVyKTsKLQkJfQotCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9oaWdoID0gbWNfZmlsdGVyWzFdOwotCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9sb3cgPSBtY19maWx0ZXJbMF07Ci0JCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7Ci0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19IQVNIX01PREU7Ci0JfQotfQotCi1zdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSByZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXVwLT5waHlfZGV2KSByZXR1cm4gLUVJTlZBTDsgLy8gUEhZIG5vdCBjb250cm9sbGFibGUKLQotCXJldHVybiBwaHlfbWlpX2lvY3RsKGF1cC0+cGh5X2RldiwgaWZfbWlpKHJxKSwgY21kKTsKLX0KLQogbW9kdWxlX2luaXQoYXUxMDAwX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGF1MTAwMF9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMgYi9kcml2ZXJzL25ldC9heDg4Nzk2LmMKaW5kZXggYTRlYjZjNC4uNjJkOWM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwpAQCAtOTMsNiArOTMsNyBAQAogCiAJdW5zaWduZWQgY2hhcgkJIHJ1bm5pbmc7CiAJdW5zaWduZWQgY2hhcgkJIHJlc3VtZV9vcGVuOworCXVuc2lnbmVkIGludAkJIGlycWZsYWdzOwogCiAJdTMyCQkJIHJlZ19vZmZzZXRzWzB4MjBdOwogfTsKQEAgLTQ3NCw3ICs0NzUsOCBAQAogCiAJZGV2X2RiZygmYXgtPmRldi0+ZGV2LCAiJXM6IG9wZW5cbiIsIGRldi0+bmFtZSk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYXhfZWlfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldik7CisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGF4X2VpX2ludGVycnVwdCwgYXgtPmlycWZsYWdzLAorCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNzMxLDEyICs3MzMsMTkgQEAKIAkvKiBsb2FkIHRoZSBtYWMtYWRkcmVzcyBmcm9tIHRoZSBkZXZpY2UgaWYgdGhpcyBpcyB0aGUKIAkgKiBmaXJzdCB0aW1lIHdlJ3ZlIGluaXRpYWxpc2VkICovCiAKLQlpZiAoZmlyc3RfaW5pdCAmJiBheC0+cGxhdC0+ZmxhZ3MgJiBBWEZMR19NQUNfRlJPTURFVikgewotCQllaV9vdXRiKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEgKyBFODM5MF9TVE9QLAotCQkJZWlfbG9jYWwtPm1lbSArIEU4MzkwX0NNRCk7IC8qIDB4NjEgKi8KKwlpZiAoZmlyc3RfaW5pdCkgeworCQlpZiAoYXgtPnBsYXQtPmZsYWdzICYgQVhGTEdfTUFDX0ZST01ERVYpIHsKKwkJCWVpX291dGIoRTgzOTBfTk9ETUEgKyBFODM5MF9QQUdFMSArIEU4MzkwX1NUT1AsCisJCQkJZWlfbG9jYWwtPm1lbSArIEU4MzkwX0NNRCk7IC8qIDB4NjEgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBFVEhFUl9BRERSX0xFTjsgaSsrKQorCQkJCWRldi0+ZGV2X2FkZHJbaV0gPQorCQkJCQllaV9pbmIoaW9hZGRyICsgRU4xX1BIWVNfU0hJRlQoaSkpOworCQl9CiAKLQkJZm9yIChpID0gMCA7IGkgPCBFVEhFUl9BRERSX0xFTiA7IGkrKykKLQkJCWRldi0+ZGV2X2FkZHJbaV0gPSBlaV9pbmIoaW9hZGRyICsgRU4xX1BIWVNfU0hJRlQoaSkpOworCQlpZiAoKGF4LT5wbGF0LT5mbGFncyAmIEFYRkxHX01BQ19GUk9NUExBVEZPUk0pICYmCisJCSAgICAgYXgtPnBsYXQtPm1hY19hZGRyKQorCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF4LT5wbGF0LT5tYWNfYWRkciwKKwkJCQlFVEhFUl9BRERSX0xFTik7CiAJfQogCiAJYXhfcmVzZXRfODM5MChkZXYpOwpAQCAtODI5LDcgKzgzOCw3IEBACiAJc3RydWN0IGF4X2RldmljZSAgKmF4OwogCXN0cnVjdCByZXNvdXJjZSAgICpyZXM7CiAJc2l6ZV90IHNpemU7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWRldiA9IGF4X19hbGxvY19laV9uZXRkZXYoc2l6ZW9mKHN0cnVjdCBheF9kZXZpY2UpKTsKIAlpZiAoZGV2ID09IE5VTEwpCkBAIC04NTAsMTIgKzg1OSwxNCBAQAogCiAJLyogZmluZCB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzICovCiAKLQlyZXQgID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAocmV0IDwgMCkgeworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSBzcGVjaWZpZWRcbiIpOwogCQlnb3RvIGV4aXRfbWVtOwogCX0KLQlkZXYtPmlycSA9IHJldDsKKworCWRldi0+aXJxID0gcmVzLT5zdGFydDsKKwlheC0+aXJxZmxhZ3MgPSByZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCBkYzVmMDUxLi41Yzg0NTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtODc0LDcgKzg3NCw3IEBACiAJfQogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKIAl9CiAKQEAgLTkwNiwxMyArOTA2LDEzIEBACiAJCQlnb3RvIGlycV9hY2s7CiAJCX0KIAotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYnAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgewogCQkJLyogTk9URTogVGhlc2Ugd3JpdGVzIGFyZSBwb3N0ZWQgYnkgdGhlIHJlYWRiYWNrIG9mCiAJCQkgKiAgICAgICB0aGUgSVNUQVQgcmVnaXN0ZXIgYmVsb3cuCiAJCQkgKi8KIAkJCWJwLT5pc3RhdCA9IGlzdGF0OwogCQkJX19iNDRfZGlzYWJsZV9pbnRzKGJwKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmYnAtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEVycm9yLCBwb2xsIGFscmVhZHkgc2NoZWR1bGVkXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CkBAIC05NzMsNyArOTczLDcgQEAKIAkJCXNzYl9kbWFfdW5tYXBfc2luZ2xlKGJwLT5zZGV2LCBtYXBwaW5nLCBsZW4sCiAJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAKLQkJYm91bmNlX3NrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKKwkJYm91bmNlX3NrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGxlbiwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIWJvdW5jZV9za2IpCiAJCQlnb3RvIGVycl9vdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCmluZGV4IGYzMjdiZTUuLmM0OWRkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaApAQCAtMTAwLDkgKzEwMCw5IEBACiAJdTMyIGJlX3R4X3dyYnM7CQkvKiBudW1iZXIgb2YgdHggV1JCcyB1c2VkICovCiAJdTMyIGJlX3R4X2V2ZW50czsJLyogbnVtYmVyIG9mIHR4IGNvbXBsZXRpb24gZXZlbnRzICAqLwogCXUzMiBiZV90eF9jb21wbDsJLyogbnVtYmVyIG9mIHR4IGNvbXBsZXRpb24gZW50cmllcyBwcm9jZXNzZWQgKi8KLQl1NjQgYmVfdHhfamlmZmllczsKLQl1bG9uZyBiZV90eF9ieXRlczsKLQl1bG9uZyBiZV90eF9ieXRlc19wcmV2OworCXVsb25nIGJlX3R4X2ppZmZpZXM7CisJdTY0IGJlX3R4X2J5dGVzOworCXU2NCBiZV90eF9ieXRlc19wcmV2OwogCXUzMiBiZV90eF9yYXRlOwogCiAJdTMyIGNhY2hlX2JhcnJpZXJbMTZdOwpAQCAtMTEzLDkgKzExMyw5IEBACiAJdTMyIGJlX3J4X2NvbXBsOwkvKiBudW1iZXIgb2YgcnggY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZCAqLwogCXUzMiBiZV9scm9faGdyYW1fZGF0YVs4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBkYXRhIHBhY2tldHMgKi8KIAl1MzIgYmVfbHJvX2hncmFtX2Fja1s4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBBQ0tzICovCi0JdTY0IGJlX3J4X2ppZmZpZXM7Ci0JdWxvbmcgYmVfcnhfYnl0ZXM7Ci0JdWxvbmcgYmVfcnhfYnl0ZXNfcHJldjsKKwl1bG9uZyBiZV9yeF9qaWZmaWVzOworCXU2NCBiZV9yeF9ieXRlczsKKwl1NjQgYmVfcnhfYnl0ZXNfcHJldjsKIAl1MzIgYmVfcnhfcmF0ZTsKIAkvKiBudW1iZXIgb2Ygbm9uIGV0aGVyIHR5cGUgSUkgZnJhbWVzIGRyb3BwZWQgd2hlcmUKIAkgKiBmcmFtZSBsZW4gPiBsZW5ndGggZmllbGQgb2YgTWFjIEhkciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDBlY2FmZmIuLmY5MDFmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTI0NSwxOSArMjQ1LDI5IEBACiAvKiBVcGRhdGUgdGhlIEVRIGRlbGF5IG4gQkUgYmFzZWQgb24gdGhlIFJYIGZyYWdzIGNvbnN1bWVkIC8gc2VjICovCiBzdGF0aWMgdm9pZCBiZV9yeF9lcWRfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBlcWQ7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOwogCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisJdTMyIGVxZDsKKworCWlmICghcnhfZXEtPmVuYWJsZV9haWMpCisJCXJldHVybjsKKworCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSkgeworCQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CiAKIAkvKiBVcGRhdGUgb25jZSBhIHNlY29uZCAqLwotCWlmICgoKGppZmZpZXMgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIDwgSFopIHx8IHJ4X2VxLT5lbmFibGVfYWljID09IDApCisJaWYgKChub3cgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIDwgSFopCiAJCXJldHVybjsKIAogCXN0YXRzLT5iZV9yeF9mcHMgPSAoc3RhdHMtPmJlX3J4X2ZyYWdzIC0gc3RhdHMtPmJlX3ByZXZfcnhfZnJhZ3MpIC8KLQkJCSgoamlmZmllcyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CisJCQkoKG5vdyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CiAKLQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBqaWZmaWVzOworCXN0YXRzLT5yeF9mcHNfamlmZmllcyA9IG5vdzsKIAlzdGF0cy0+YmVfcHJldl9yeF9mcmFncyA9IHN0YXRzLT5iZV9yeF9mcmFnczsKIAllcWQgPSBzdGF0cy0+YmVfcnhfZnBzIC8gMTEwMDAwOwogCWVxZCA9IGVxZCA8PCAzOwpAQCAtMjgwLDI2ICsyOTAsMzggQEAKIAlyZXR1cm4gJmFkYXB0ZXItPnN0YXRzLm5ldF9zdGF0czsKIH0KIAorc3RhdGljIHZvaWQgYmVfdHhfcmF0ZV91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKTsKKwl1bG9uZyBub3cgPSBqaWZmaWVzOworCisJLyogV3JhcHBlZCBhcm91bmQ/ICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPmJlX3R4X2ppZmZpZXMpKSB7CisJCXN0YXRzLT5iZV90eF9qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIHR4IHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLworCWlmICgobm93IC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpID4gMiAqIEhaKSB7CisJCXUzMiByOworCQlyID0gKHN0YXRzLT5iZV90eF9ieXRlcyAtIHN0YXRzLT5iZV90eF9ieXRlc19wcmV2KSAvCisJCQkoKG5vdyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSAvIEhaKTsKKwkJciA9IHIgLyAxMDAwMDAwOwkJCS8qIE0gYnl0ZXMvcyAqLworCQlzdGF0cy0+YmVfdHhfcmF0ZSA9IHIgKiA4OwkvKiBNIGJpdHMvcyAqLworCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IG5vdzsKKwkJc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfdHhfYnl0ZXM7CisJfQorfQorCiBzdGF0aWMgdm9pZCBiZV90eF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgYm9vbCBzdG9wcGVkKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CiAJc3RhdHMtPmJlX3R4X3JlcXMrKzsKIAlzdGF0cy0+YmVfdHhfd3JicyArPSB3cmJfY250OwogCXN0YXRzLT5iZV90eF9ieXRlcyArPSBjb3BpZWQ7CiAJaWYgKHN0b3BwZWQpCiAJCXN0YXRzLT5iZV90eF9zdG9wcysrOwotCi0JLyogVXBkYXRlIHR4IHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSA+IDIgKiBIWikgewotCQl1MzIgcjsKLQkJciA9IChzdGF0cy0+YmVfdHhfYnl0ZXMgLSBzdGF0cy0+YmVfdHhfYnl0ZXNfcHJldikgLwotCQkJKCh1MzIpIChqaWZmaWVzIC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpIC8gSFopOwotCQlyID0gKHIgLyAxMDAwMDAwKTsJCQkvKiBNIGJ5dGVzL3MgKi8KLQkJc3RhdHMtPmJlX3R4X3JhdGUgPSAociAqIDgpOwkvKiBNIGJpdHMvcyAqLwotCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IGppZmZpZXM7Ci0JCXN0YXRzLT5iZV90eF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3R4X2J5dGVzOwotCX0KIH0KIAogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBXUkIgZW50cmllcyBuZWVkZWQgdG8geG1pdCBkYXRhIGluIGFuIHNrYiAqLwpAQCAtNTczLDI2ICs1OTUsMzggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgcGt0c2l6ZSwKLQkJCXUxNiBudW1mcmFncykKK3N0YXRpYyB2b2lkIGJlX3J4X3JhdGVfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CisJdWxvbmcgbm93ID0gamlmZmllczsKIAl1MzIgcmF0ZTsKIAorCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPmJlX3J4X2ppZmZpZXMpKSB7CisJCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gbm93OworCQlyZXR1cm47CisJfQorCisJLyogVXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KKwlpZiAoKG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSA8IDIgKiBIWikKKwkJcmV0dXJuOworCisJcmF0ZSA9IChzdGF0cy0+YmVfcnhfYnl0ZXMgLSBzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldikgLworCQkoKG5vdyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSAvIEhaKTsKKwlyYXRlID0gcmF0ZSAvIDEwMDAwMDA7CS8qIE1CL1NlYyAqLworCXN0YXRzLT5iZV9yeF9yYXRlID0gcmF0ZSAqIDg7IAkvKiBNZWdhIEJpdHMvU2VjICovCisJc3RhdHMtPmJlX3J4X2ppZmZpZXMgPSBub3c7CisJc3RhdHMtPmJlX3J4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfcnhfYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3J4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJdTMyIHBrdHNpemUsIHUxNiBudW1mcmFncykKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCiAJc3RhdHMtPmJlX3J4X2NvbXBsKys7CiAJc3RhdHMtPmJlX3J4X2ZyYWdzICs9IG51bWZyYWdzOwogCXN0YXRzLT5iZV9yeF9ieXRlcyArPSBwa3RzaXplOwotCi0JLyogVXBkYXRlIHRoZSByYXRlIG9uY2UgaW4gdHdvIHNlY29uZHMgKi8KLQlpZiAoKGppZmZpZXMgLSBzdGF0cy0+YmVfcnhfamlmZmllcykgPCAyICogSFopCi0JCXJldHVybjsKLQotCXJhdGUgPSAoc3RhdHMtPmJlX3J4X2J5dGVzIC0gc3RhdHMtPmJlX3J4X2J5dGVzX3ByZXYpIC8KLQkJKCh1MzIpIChqaWZmaWVzIC0gc3RhdHMtPmJlX3J4X2ppZmZpZXMpIC8gSFopOwotCXJhdGUgPSAocmF0ZSAvIDEwMDAwMDApOwkvKiBNQi9TZWMgKi8KLQlzdGF0cy0+YmVfcnhfcmF0ZSA9IChyYXRlICogOCk7IAkvKiBNZWdhIEJpdHMvU2VjICovCi0Jc3RhdHMtPmJlX3J4X2ppZmZpZXMgPSBqaWZmaWVzOwotCXN0YXRzLT5iZV9yeF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3J4X2J5dGVzOwogfQogCiBzdGF0aWMgc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqCkBAIC03MDAsNyArNzM0LDcgQEAKIAkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKIAl9CiAKLQliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyLCBwa3RzaXplLCBudW1fcmN2ZCk7CisJYmVfcnhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHBrdHNpemUsIG51bV9yY3ZkKTsKIAlyZXR1cm47CiB9CiAKQEAgLTc5OSw3ICs4MzMsNyBAQAogCQkJdmlkLCBOVUxMLCAwKTsKIAl9CiAKLQliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyLCBwa3Rfc2l6ZSwgbnVtX3JjdmQpOworCWJlX3J4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCBwa3Rfc2l6ZSwgbnVtX3JjdmQpOwogCXJldHVybjsKIH0KIApAQCAtODQxLDcgKzg3NSw2IEBACiAJdTY0IHBhZ2VfZG1hYWRkciA9IDAsIGZyYWdfZG1hYWRkcjsKIAl1MzIgcG9zdGVkLCBwYWdlX29mZnNldCA9IDA7CiAKLQogCXBhZ2VfaW5mbyA9ICZwYWdlX2luZm9fdGJsW3J4cS0+aGVhZF07CiAJZm9yIChwb3N0ZWQgPSAwOyBwb3N0ZWQgPCBNQVhfUlhfUE9TVCAmJiAhcGFnZV9pbmZvLT5wYWdlOyBwb3N0ZWQrKykgewogCQlpZiAoIXBhZ2VwKSB7CkBAIC0xMzA1LDYgKzEzMzgsOSBAQAogCS8qIFNldCBFUSBkZWxheSAqLwogCWJlX3J4X2VxZF91cGRhdGUoYWRhcHRlcik7CiAKKwliZV90eF9yYXRlX3VwZGF0ZShhZGFwdGVyKTsKKwliZV9yeF9yYXRlX3VwZGF0ZShhZGFwdGVyKTsKKwogCWlmIChhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQpIHsKIAkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gZmFsc2U7CiAJCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5jIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwppbmRleCA3OGUzMWFhLi45YWZlODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKQEAgLTQxNSwxMSArNDE1LDExIEBACiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfUk1JSSkKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmJmaW5fbWFjX2FkanVzdF9saW5rLCAwLAotCQkJUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJmJmaW5fbWFjX2FkanVzdF9saW5rLAorCQkJMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpOwogI2Vsc2UKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmJmaW5fbWFjX2FkanVzdF9saW5rLCAwLAotCQkJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKICNlbmRpZgogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CkBAIC00NDcsNyArNDQ3LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKIAkgICAgICAgIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQsIG1kY19jbGs9JWRIeihtZGNfZGl2PSVkKSIKIAkgICAgICAgIkBzY2xrPSVkTUh6KVxuIiwKLQkgICAgICAgRFJWX05BTUUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxLAorCSAgICAgICBEUlZfTkFNRSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxLAogCSAgICAgICBNRENfQ0xLLCBtZGNfZGl2LCBzY2xrLzEwMDAwMDApOwogCiAJcmV0dXJuIDA7CkBAIC00ODgsNyArNDg4LDcgQEAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKIAlzdHJjcHkoaW5mby0+ZndfdmVyc2lvbiwgIk4vQSIpOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZkZXYtPmRldikpOwogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJmaW5fbWFjX2V0aHRvb2xfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm1hYy5jIGIvZHJpdmVycy9uZXQvYm1hYy5jCmluZGV4IDhhNTQ2YTMuLjQ0ZDAxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JtYWMuYworKysgYi9kcml2ZXJzL25ldC9ibWFjLmMKQEAgLTEwNjIsNyArMTA2Miw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgYm1hY19taXNjX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwotCXN0cnVjdCBibWFjX2RhdGEgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gYm1yZWFkKGRldiwgU1RBVFVTKTsKIAlpZiAobWlzY2ludGNvdW50KysgPCAxMCkgewogCQlYWERFQlVHKCgiYm1hY19taXNjX2ludHJcbiIpKTsKQEAgLTEyNDAsNyArMTIzOSw3IEBACiB7CiAJc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cmNweShpbmZvLT5kcml2ZXIsICJibWFjIik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBicC0+bWRldi0+b2ZkZXYuZGV2LmJ1c19pZCk7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSgmYnAtPm1kZXYtPm9mZGV2LmRldikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJtYWNfZXRodG9vbF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNmI2NTMwZi4uYWQ0NDZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMTQ5Nyw2ICsxNDk3LDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9yZW1vdGVfcGh5KHN0cnVjdCBibngyICpicCwgdTggcG9ydCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgc3BlZWRfYXJnID0gMCwgcGF1c2VfYWR2OwogCkBAIC0xNTU0LDYgKzE1NTYsOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3NlcmRlc19waHkoc3RydWN0IGJueDIgKmJwLCB1OCBwb3J0KQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCXUzMiBhZHYsIGJtY3I7CiAJdTMyIG5ld19hZHYgPSAwOwpAQCAtMTg2Niw2ICsxODcwLDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9jb3BwZXJfcGh5KHN0cnVjdCBibngyICpicCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgYm1jcjsKIAl1MzIgbmV3X2JtY3I7CkBAIC0xOTYzLDYgKzE5NjksOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3BoeShzdHJ1Y3QgYm54MiAqYnAsIHU4IHBvcnQpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJaWYgKGJwLT5sb29wYmFjayA9PSBNQUNfTE9PUEJBQ0spCiAJCXJldHVybiAwOwpAQCAtMjE3Niw2ICsyMTg0LDggQEAKIAogc3RhdGljIGludAogYm54Ml9pbml0X3BoeShzdHJ1Y3QgYm54MiAqYnAsIGludCByZXNldF9waHkpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwpAQCAtMzAwNSw2ICszMDE1LDggQEAKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQl9CiAKKwkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGJuYXBpIC0gJmJwLT5ibngyX25hcGlbMF0pOworCiAjaWZkZWYgQkNNX1ZMQU4KIAkJaWYgKGh3X3ZsYW4pCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBicC0+dmxncnAsIHZ0YWcpOwpAQCAtMzA2MSw3ICszMDczLDcgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzA3OCw3ICszMDkwLDcgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzExNCw5ICszMTI2LDkgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZibmFwaS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZibmFwaS0+bmFwaSkpIHsKIAkJYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19pZHg7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzIyNiw3ICszMjM4LDcgQEAKIAkJcm1iKCk7CiAJCWlmIChsaWtlbHkoIWJueDJfaGFzX2Zhc3Rfd29yayhibmFwaSkpKSB7CiAKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsIGJuYXBpLT5pbnRfbnVtIHwKIAkJCSAgICAgICBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTkRFWF9WQUxJRCB8CiAJCQkgICAgICAgYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCk7CkBAIC0zMjU5LDcgKzMyNzEsNyBAQAogCiAJCXJtYigpOwogCQlpZiAobGlrZWx5KCFibngyX2hhc193b3JrKGJuYXBpKSkpIHsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCWlmIChsaWtlbHkoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSV9PUl9NU0lYKSkgewogCQkJCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsCiAJCQkJICAgICAgIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElEIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC5oCmluZGV4IDNjZjJiOTIuLmEzMjliZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnguaApAQCAtMjUsNiArMjUsMTYgQEAKICNlbmRpZgogCiAKKyNkZWZpbmUgQk5YMlhfTVVMVElfUVVFVUUKKworI2RlZmluZSBCTlgyWF9ORVdfTkFQSQorCisKKyNpbmNsdWRlICJibngyeF9yZWcuaCIKKyNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCisjaW5jbHVkZSAiYm54MnhfaHNpLmgiCisjaW5jbHVkZSAiYm54MnhfbGluay5oIgorCiAvKiBlcnJvci9kZWJ1ZyBwcmludHMgKi8KIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyeCIKQEAgLTkyLDEyICsxMDIsMTAgQEAKIAogI2RlZmluZSBSRUdfUkQoYnAsIG9mZnNldCkJCXJlYWRsKFJFR19BRERSKGJwLCBvZmZzZXQpKQogI2RlZmluZSBSRUdfUkQ4KGJwLCBvZmZzZXQpCQlyZWFkYihSRUdfQUREUihicCwgb2Zmc2V0KSkKLSNkZWZpbmUgUkVHX1JENjQoYnAsIG9mZnNldCkJCXJlYWRxKFJFR19BRERSKGJwLCBvZmZzZXQpKQogCiAjZGVmaW5lIFJFR19XUihicCwgb2Zmc2V0LCB2YWwpCQl3cml0ZWwoKHUzMil2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQogI2RlZmluZSBSRUdfV1I4KGJwLCBvZmZzZXQsIHZhbCkJd3JpdGViKCh1OCl2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQogI2RlZmluZSBSRUdfV1IxNihicCwgb2Zmc2V0LCB2YWwpCXdyaXRldygodTE2KXZhbCwgUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19XUjMyKGJwLCBvZmZzZXQsIHZhbCkJUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCkKIAogI2RlZmluZSBSRUdfUkRfSU5EKGJwLCBvZmZzZXQpCQlibngyeF9yZWdfcmRfaW5kKGJwLCBvZmZzZXQpCiAjZGVmaW5lIFJFR19XUl9JTkQoYnAsIG9mZnNldCwgdmFsKQlibngyeF9yZWdfd3JfaW5kKGJwLCBvZmZzZXQsIHZhbCkKQEAgLTE1NCw4ICsxNjIsNiBAQAogI2RlZmluZSBTR0VfUEFHRV9TSElGVAkJCVBBR0VfU0hJRlQKICNkZWZpbmUgU0dFX1BBR0VfQUxJR04oYWRkcikJCVBBR0VfQUxJR04oKHR5cGVvZihQQUdFX1NJWkUpKWFkZHIpCiAKLSNkZWZpbmUgQkNNX1JYX0VUSF9QQVlMT0FEX0FMSUdOCTY0Ci0KIC8qIFNHRSByaW5nIHJlbGF0ZWQgbWFjcm9zICovCiAjZGVmaW5lIE5VTV9SWF9TR0VfUEFHRVMJCTIKICNkZWZpbmUgUlhfU0dFX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9yeF9zZ2UpKQpAQCAtMTg3LDYgKzE5Myw0MyBAQAogI2RlZmluZSBORVhUX1NHRV9NQVNLX0VMRU0oZWwpCQkoKChlbCkgKyAxKSAmIFJYX1NHRV9NQVNLX0xFTl9NQVNLKQogCiAKK3N0cnVjdCBibngyeF9ldGhfcV9zdGF0cyB7CisJdTMyIHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvOworCisJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKKworCXUzMiBkcml2ZXJfeG9mZjsKKwl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OworCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOworCXUzMiBod19jc3VtX2VycjsKK307CisKKyNkZWZpbmUgQk5YMlhfTlVNX1FfU1RBVFMJCTExCisjZGVmaW5lIFFfU1RBVFNfT0ZGU0VUMzIoc3RhdF9uYW1lKSBcCisJCQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKKwogc3RydWN0IGJueDJ4X2Zhc3RwYXRoIHsKIAogCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOwpAQCAtMjI4LDIwICsyNzEsMTUgQEAKIAl1OAkJCWluZGV4OwkvKiBudW1iZXIgaW4gZnAgYXJyYXkgKi8KIAl1OAkJCWNsX2lkOwkvKiBldGggY2xpZW50IGlkICovCiAJdTgJCQlzYl9pZDsJLyogc3RhdHVzIGJsb2NrIG51bWJlciBpbiBIVyAqLwotI2RlZmluZSBGUF9JRFgoZnApCQkJKGZwLT5pbmRleCkKLSNkZWZpbmUgRlBfQ0xfSUQoZnApCQkJKGZwLT5jbF9pZCkKLSNkZWZpbmUgQlBfQ0xfSUQoYnApCQkJKGJwLT5mcFswXS5jbF9pZCkKLSNkZWZpbmUgRlBfU0JfSUQoZnApCQkJKGZwLT5zYl9pZCkKLSNkZWZpbmUgQ05JQ19TQl9JRAkJCTAKIAogCXUxNgkJCXR4X3BrdF9wcm9kOwogCXUxNgkJCXR4X3BrdF9jb25zOwogCXUxNgkJCXR4X2JkX3Byb2Q7CiAJdTE2CQkJdHhfYmRfY29uczsKLQl1MTYJCQkqdHhfY29uc19zYjsKKwlfX2xlMTYJCQkqdHhfY29uc19zYjsKIAotCXUxNgkJCWZwX2NfaWR4OwotCXUxNgkJCWZwX3VfaWR4OworCV9fbGUxNgkJCWZwX2NfaWR4OworCV9fbGUxNgkJCWZwX3VfaWR4OwogCiAJdTE2CQkJcnhfYmRfcHJvZDsKIAl1MTYJCQlyeF9iZF9jb25zOwpAQCAtMjUwLDggKzI4OCw4IEBACiAJdTE2CQkJcnhfc2dlX3Byb2Q7CiAJLyogVGhlIGxhc3QgbWF4aW1hbCBjb21wbGV0ZWQgU0dFICovCiAJdTE2CQkJbGFzdF9tYXhfc2dlOwotCXUxNgkJCSpyeF9jb25zX3NiOwotCXUxNgkJCSpyeF9iZF9jb25zX3NiOworCV9fbGUxNgkJCSpyeF9jb25zX3NiOworCV9fbGUxNgkJCSpyeF9iZF9jb25zX3NiOwogCiAJdW5zaWduZWQgbG9uZwkJdHhfcGt0LAogCQkJCXJ4X3BrdCwKQEAgLTI2Niw2ICszMDQsMTIgQEAKIAl1NjQJCQl0cGFfcXVldWVfdXNlZDsKICNlbmRpZgogCisJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF90Y2xpZW50OworCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfdWNsaWVudDsKKwlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3hjbGllbnQ7CisJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzIGV0aF9xX3N0YXRzOworCisJY2hhcgkJCW5hbWVbSUZOQU1TSVpdOwogCXN0cnVjdCBibngyeAkJKmJwOyAvKiBwYXJlbnQgKi8KIH07CiAKQEAgLTQwMSwxMCArNDQ1LDEzIEBACiAjZGVmaW5lIEJOWDJYX1JYX0NTVU1fT0soY3FlKSBcCiAJCQkoIShCTlgyWF9MNF9DU1VNX0VSUihjcWUpIHx8IEJOWDJYX0lQX0NTVU1fRVJSKGNxZSkpKQogCisjZGVmaW5lIEJOWDJYX1BSU19GTEFHX09WRVJFVEhfSVBWNChmbGFncykgXAorCQkJCSgoKGxlMTZfdG9fY3B1KGZsYWdzKSAmIFwKKwkJCQkgICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0wpID4+IFwKKwkJCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkgXAorCQkJCSA9PSBQUlNfRkxBR19PVkVSRVRIX0lQVjQpCiAjZGVmaW5lIEJOWDJYX1JYX1NVTV9GSVgoY3FlKSBcCi0JCQkoKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmIFwKLQkJCSAgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MKSA9PSBcCi0JCQkgKDEgPDwgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MX1NISUZUKSkKKwlCTlgyWF9QUlNfRkxBR19PVkVSRVRIX0lQVjQoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpCiAKIAogI2RlZmluZSBGUF9VU0JfRlVOQ19PRkYJCQkoMiArIDIqSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTKQpAQCAtNDc4LDExICs1MjUsOCBAQAogCXUzMgkJCXNobWVtX2Jhc2U7CiAKIAl1MzIJCQlod19jb25maWc7Ci0JdTMyCQkJYm9hcmQ7CiAKIAl1MzIJCQliY192ZXI7Ci0KLQljaGFyCQkJKm5hbWU7CiB9OwogCiAKQEAgLTUyOCw2ICs1NzIsNyBAQAogCiAJLyogdXNlZCB0byBzeW5jaHJvbml6ZSBwaHkgYWNjZXNzZXMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXBoeV9tdXRleDsKKwlpbnQJCQluZWVkX2h3X2xvY2s7CiAKIAl1MzIJCQlwb3J0X3N0eDsKIApAQCAtNTczLDYgKzYxOCwxMCBAQAogCiAJdTMyIGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpOwogCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9sbzsKKwl1MzIgZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGk7CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvOworCXUzMiBub19idWZmX2Rpc2NhcmRfaGk7CisJdTMyIG5vX2J1ZmZfZGlzY2FyZF9sbzsKIAogCXUzMiByeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaTsKIAl1MzIgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG87CkBAIC02NTEsMTkgKzcwMCwyMCBAQAogCXUzMiB0eF9zdGF0X2JtYWNfdWZsX2hpOwogCXUzMiB0eF9zdGF0X2JtYWNfdWZsX2xvOwogCi0JdTMyIGJyYl9kcm9wX2hpOwotCXUzMiBicmJfZHJvcF9sbzsKLQl1MzIgYnJiX3RydW5jYXRlX2hpOwotCXUzMiBicmJfdHJ1bmNhdGVfbG87Ci0KLQl1MzIgamFiYmVyX3BhY2tldHNfcmVjZWl2ZWQ7CisJdTMyIHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaTsKKwl1MzIgcGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvOworCXUzMiBwYXVzZV9mcmFtZXNfc2VudF9oaTsKKwl1MzIgcGF1c2VfZnJhbWVzX3NlbnRfbG87CiAKIAl1MzIgZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2hpOwogCXUzMiBldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfbG87CiAJdTMyIGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGk7CiAJdTMyIGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfbG87CiAKLQl1MzIgbm9fYnVmZl9kaXNjYXJkOworCXUzMiBicmJfZHJvcF9oaTsKKwl1MzIgYnJiX2Ryb3BfbG87CisJdTMyIGJyYl90cnVuY2F0ZV9oaTsKKwl1MzIgYnJiX3RydW5jYXRlX2xvOwogCiAJdTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKIAl1MzIgeHhvdmVyZmxvd19kaXNjYXJkOwpAQCAtNjc0LDE3ICs3MjQsMTYgQEAKIAl1MzIgcnhfZXJyX2Rpc2NhcmRfcGt0OwogCXUzMiByeF9za2JfYWxsb2NfZmFpbGVkOwogCXUzMiBod19jc3VtX2VycjsKKworCXUzMiBuaWdfdGltZXJfbWF4OwogfTsKIAorI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQk0MQogI2RlZmluZSBTVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKIAkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKIAogCi0jaWZkZWYgQk5YMlhfTVVMVEkKICNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxNgotI2Vsc2UKLSNkZWZpbmUgTUFYX0NPTlRFWFQJCQkxCi0jZW5kaWYKIAogdW5pb24gY2R1X2NvbnRleHQgewogCXN0cnVjdCBldGhfY29udGV4dCBldGg7CkBAIC03MzksNiArNzg4LDkgQEAKIAogCWF0b21pY190CQlpbnRyX3NlbTsKIAlzdHJ1Y3QgbXNpeF9lbnRyeQltc2l4X3RhYmxlW01BWF9DT05URVhUKzFdOworI2RlZmluZSBJTlRfTU9ERV9JTlR4CQkJMQorI2RlZmluZSBJTlRfTU9ERV9NU0kJCQkyCisjZGVmaW5lIElOVF9NT0RFX01TSVgJCQkzCiAKIAlpbnQJCQl0eF9yaW5nX3NpemU7CiAKQEAgLTc0NywyMyArNzk5LDI2IEBACiAjZW5kaWYKIAogCXUzMgkJCXJ4X2NzdW07Ci0JdTMyCQkJcnhfb2Zmc2V0OwogCXUzMgkJCXJ4X2J1Zl9zaXplOwogI2RlZmluZSBFVEhfT1ZSRUhFQUQJCQkoRVRIX0hMRU4gKyA4KQkvKiA4IGZvciBDUkMgKyBWTEFOICovCiAjZGVmaW5lIEVUSF9NSU5fUEFDS0VUX1NJWkUJCTYwCiAjZGVmaW5lIEVUSF9NQVhfUEFDS0VUX1NJWkUJCTE1MDAKICNkZWZpbmUgRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRQk5NjAwCiAKKwkvKiBNYXggc3VwcG9ydGVkIGFsaWdubWVudCBpcyAyNTYgKDggc2hpZnQpICovCisjZGVmaW5lIEJOWDJYX1JYX0FMSUdOX1NISUZUCQkoKEwxX0NBQ0hFX1NISUZUIDwgOCkgPyBcCisJCQkJCSBMMV9DQUNIRV9TSElGVCA6IDgpCisjZGVmaW5lIEJOWDJYX1JYX0FMSUdOCQkJKDEgPDwgQk5YMlhfUlhfQUxJR05fU0hJRlQpCisKIAlzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrICpkZWZfc3RhdHVzX2JsazsKICNkZWZpbmUgREVGX1NCX0lECQkJMTYKLQl1MTYJCQlkZWZfY19pZHg7Ci0JdTE2CQkJZGVmX3VfaWR4OwotCXUxNgkJCWRlZl94X2lkeDsKLQl1MTYJCQlkZWZfdF9pZHg7Ci0JdTE2CQkJZGVmX2F0dF9pZHg7CisJX19sZTE2CQkJZGVmX2NfaWR4OworCV9fbGUxNgkJCWRlZl91X2lkeDsKKwlfX2xlMTYJCQlkZWZfeF9pZHg7CisJX19sZTE2CQkJZGVmX3RfaWR4OworCV9fbGUxNgkJCWRlZl9hdHRfaWR4OwogCXUzMgkJCWF0dG5fc3RhdGU7CiAJc3RydWN0IGF0dG5fcm91dGUJYXR0bl9ncm91cFtNQVhfRFlOQU1JQ19BVFROX0dSUFNdOwotCXUzMgkJCW5pZ19tYXNrOwogCiAJLyogc2xvdyBwYXRoIHJpbmcgKi8KIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcTsKQEAgLTc3MSw3ICs4MjYsNyBAQAogCXUxNgkJCXNwcV9wcm9kX2lkeDsKIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcV9wcm9kX2JkOwogCXN0cnVjdCBldGhfc3BlCQkqc3BxX2xhc3RfYmQ7Ci0JdTE2CQkJKmRzYl9zcF9wcm9kOworCV9fbGUxNgkJCSpkc2Jfc3BfcHJvZDsKIAl1MTYJCQlzcHFfbGVmdDsgLyogc2VyaWFsaXplIHNwcSAqLwogCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3BxIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdAkJc3BxX2xvY2s7CkBAIC03ODksMTEgKzg0NCwxMSBAQAogCXUzMgkJCWZsYWdzOwogI2RlZmluZSBQQ0lYX0ZMQUcJCQkxCiAjZGVmaW5lIFBDSV8zMkJJVF9GTEFHCQkJMgotI2RlZmluZSBPTkVfVERNQV9GTEFHCQkJNAkvKiBubyBsb25nZXIgdXNlZCAqLworI2RlZmluZSBPTkVfUE9SVF9GTEFHCQkJNAogI2RlZmluZSBOT19XT0xfRkxBRwkJCTgKICNkZWZpbmUgVVNJTkdfREFDX0ZMQUcJCQkweDEwCiAjZGVmaW5lIFVTSU5HX01TSVhfRkxBRwkJCTB4MjAKLSNkZWZpbmUgQVNGX0VOQUJMRV9GTEFHCQkJMHg0MAorI2RlZmluZSBVU0lOR19NU0lfRkxBRwkJCTB4NDAKICNkZWZpbmUgVFBBX0VOQUJMRV9GTEFHCQkJMHg4MAogI2RlZmluZSBOT19NQ1BfRkxBRwkJCTB4MTAwCiAjZGVmaW5lIEJQX05PTUNQKGJwKQkJCShicC0+ZmxhZ3MgJiBOT19NQ1BfRkxBRykKQEAgLTgwOCwxMiArODYzLDEyIEBACiAKIAlpbnQJCQlwbV9jYXA7CiAJaW50CQkJcGNpZV9jYXA7CisJaW50CQkJbXJyczsKIAogCXN0cnVjdCBkZWxheWVkX3dvcmsJc3BfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVzZXRfdGFzazsKIAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwotCWludAkJCXRpbWVyX2ludGVydmFsOwogCWludAkJCWN1cnJlbnRfaW50ZXJ2YWw7CiAKIAl1MTYJCQlmd19zZXE7CkBAIC04MjYsNiArODgxLDkgQEAKIAlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKIAlzdHJ1Y3QgYm54MnhfcG9ydAlwb3J0OwogCisJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IGNtbmc7CisJdTMyCQkJdm5fd2VpZ2h0X3N1bTsKKwogCXUzMgkJCW1mX2NvbmZpZzsKIAl1MTYJCQllMWhvdjsKIAl1OAkJCWUxaG1mOwpAQCAtODQ4LDcgKzkwNiw3IEBACiAJdTMyCQkJbGluX2NudDsKIAogCWludAkJCXN0YXRlOwotI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TRUQJCTB4MAorI2RlZmluZSBCTlgyWF9TVEFURV9DTE9TRUQJCTAKICNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FECTB4MTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQJMHgyMDAwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU4JCTB4MzAwMApAQCAtODU5LDggKzkxNyw5IEBACiAjZGVmaW5lIEJOWDJYX1NUQVRFX0RJQUcJCTB4ZTAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9FUlJPUgkJMHhmMDAwCiAKLQlpbnQJCQludW1fcXVldWVzOwotI2RlZmluZSBCUF9NQVhfUVVFVUVTKGJwKQkJKElTX0UxSE1GKGJwKSA/IDQgOiAxNikKKwlpbnQJCQltdWx0aV9tb2RlOworCWludAkJCW51bV9yeF9xdWV1ZXM7CisJaW50CQkJbnVtX3R4X3F1ZXVlczsKIAogCXUzMgkJCXJ4X21vZGU7CiAjZGVmaW5lIEJOWDJYX1JYX01PREVfTk9ORQkJMApAQCAtODk4LDggKzk1Nyw2IEBACiAJaW50CQkJZXhlY3V0ZXJfaWR4OwogCiAJdTE2CQkJc3RhdHNfY291bnRlcjsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF94Y2xpZW50OwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMJZXRoX3N0YXRzOwogCiAJc3RydWN0IHpfc3RyZWFtX3MJKnN0cm07CkBAIC05MTEsMTcgKzk2OCwyNyBAQAogfTsKIAogCi0jZGVmaW5lIGZvcl9lYWNoX3F1ZXVlKGJwLCB2YXIpCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBCTlgyWF9NQVhfUVVFVUVTKGJwKQkoSVNfRTFITUYoYnApID8gKE1BWF9DT05URVhUIC8gRTFIVk5fTUFYKSA6IFwKKwkJCQkJCSBNQVhfQ09OVEVYVCkKKyNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJbWF4KGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcykKKyNkZWZpbmUgaXNfbXVsdGkoYnApCQkoQk5YMlhfTlVNX1FVRVVFUyhicCkgPiAxKQogCisjZGVmaW5lIGZvcl9lYWNoX3J4X3F1ZXVlKGJwLCB2YXIpIFwKKwkJCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9yeF9xdWV1ZXM7IHZhcisrKQorI2RlZmluZSBmb3JfZWFjaF90eF9xdWV1ZShicCwgdmFyKSBcCisJCQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fdHhfcXVldWVzOyB2YXIrKykKKyNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCiAjZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIHZhcikgXAotCQkJCWZvciAodmFyID0gMTsgdmFyIDwgYnAtPm51bV9xdWV1ZXM7IHZhcisrKQotI2RlZmluZSBpc19tdWx0aShicCkJCShicC0+bnVtX3F1ZXVlcyA+IDEpCisJCQlmb3IgKHZhciA9IDE7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKIAogCiB2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMik7CiB2b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGRzdF9hZGRyLAogCQkgICAgICB1MzIgbGVuMzIpOworaW50IGJueDJ4X2dldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTggcG9ydCk7CiBpbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCk7CitpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOwogCiBzdGF0aWMgaW5saW5lIHUzMiByZWdfcG9sbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgZXhwZWN0ZWQsIGludCBtcywKIAkJCSAgIGludCB3YWl0KQpAQCAtOTkyLDEzICsxMDU5LDEyIEBACiAjZGVmaW5lIFBDSUNGR19MSU5LX1NQRUVEX1NISUZUCQkxNgogCiAKLSNkZWZpbmUgQk5YMlhfTlVNX1NUQVRTCQkJNDIKLSNkZWZpbmUgQk5YMlhfTlVNX1RFU1RTCQkJOAorI2RlZmluZSBCTlgyWF9OVU1fVEVTVFMJCQk3CiAKLSNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLCQkwCi0jZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMQotI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVECTEKLSNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkyCisjZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDSwkJMAorI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0sJCTEKKyNkZWZpbmUgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRAkxCisjZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDS19GQUlMRUQJMgogI2RlZmluZSBCTlgyWF9MT09QQkFDS19GQUlMRUQJCShCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEIHwgXAogCQkJCQkgQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRCkKIApAQCAtMTA2MSw5ICsxMTI3LDYgQEAKICNkZWZpbmUgQk5YMlhfTUNQX0FTU0VSVCBcCiAJR0VORVJBTF9BVFRFTl9PRkZTRVQoTUNQX0ZBVEFMX0FTU0VSVF9BVFRFTlRJT05fQklUKQogCi0jZGVmaW5lIEJOWDJYX0RPT1JRX0FTU0VSVCBcCi0JQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVAotCiAjZGVmaW5lIEJOWDJYX0dSQ19USU1FT1VUCUdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9USU1FT1VUX0dSQykKICNkZWZpbmUgQk5YMlhfR1JDX1JTVgkJKEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNSKSB8IFwKIAkJCQkgR0VORVJBTF9BVFRFTl9PRkZTRVQoTEFUQ0hFRF9BVFROX1JCQ1QpIHwgXApAQCAtMTEyMCwxMiArMTE4MywxMyBAQAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19NSVNDX1BBUklUWV9FUlJPUikKIAogCi0jZGVmaW5lIE1VTFRJX0ZMQUdTIFwKKyNkZWZpbmUgTVVMVElfRkxBR1MoYnApIFwKIAkJKFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X1RDUF9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFkgfCBcCiAJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgfCBcCi0JCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0VOQUJMRSkKKwkJIChicC0+bXVsdGlfbW9kZSA8PCBcCisJCSAgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUKSkKIAogI2RlZmluZSBNVUxUSV9NQVNLCQkJMHg3ZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmggYi9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjNmIwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaApAQCAtMCwwICsxLDUyNiBAQAorLyogYm54MnhfZHVtcC5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisKKy8qIFRoaXMgc3RydWN0IGhvbGRzIGEgc2lnbmF0dXJlIHRvIGVuc3VyZSB0aGUgZHVtcCByZXR1cm5lZCBmcm9tIHRoZSBkcml2ZXIKKyAqIG1hdGNoIHRoZSBtZXRhIGRhdGEgZmlsZSBpbnNlcnRlZCB0byBncmNfZHVtcC50Y2wKKyAqIFRoZSBzaWduYXR1cmUgaXMgdGltZSBzdGFtcCwgZGlhZyB2ZXJzaW9uIGFuZCBncmNfZHVtcCB2ZXJzaW9uCisgKi8KKworc3RydWN0IGR1bXBfc2lnbiB7CisJdTMyIHRpbWVfc3RhbXA7CisJdTMyIGRpYWdfdmVyOworCXUzMiBncmNfZHVtcF92ZXI7Cit9OworCisjZGVmaW5lIFRTVE9STV9XQUlUUF9BRERSCTB4MWI4YTgwCisjZGVmaW5lIENTVE9STV9XQUlUUF9BRERSCTB4MjM4YTgwCisjZGVmaW5lIFhTVE9STV9XQUlUUF9BRERSCTB4MmI4YTgwCisjZGVmaW5lIFVTVE9STV9XQUlUUF9BRERSCTB4MzM4YTgwCisjZGVmaW5lIFRTVE9STV9DQU1fTU9ERQkJMHgxYjE0NDAKKworI2RlZmluZSBSSV9FMQkJCTB4MQorI2RlZmluZSBSSV9FMUgJCQkweDIKKyNkZWZpbmUgUklfT05MSU5FCQkweDEwMAorCisjZGVmaW5lIFJJX0UxX09GRkxJTkUJCShSSV9FMSkKKyNkZWZpbmUgUklfRTFfT05MSU5FCQkoUklfRTEgfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0UxSF9PRkZMSU5FCQkoUklfRTFIKQorI2RlZmluZSBSSV9FMUhfT05MSU5FCQkoUklfRTFIIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9BTExfT0ZGTElORQkJKFJJX0UxIHwgUklfRTFIKQorI2RlZmluZSBSSV9BTExfT05MSU5FCQkoUklfRTEgfCBSSV9FMUggfCBSSV9PTkxJTkUpCisKKyNkZWZpbmUgTUFYX1RJTUVSX1BFTkRJTkcJMjAwCisjZGVmaW5lIFRJTUVSX1NDQU5fRE9OVF9DQVJFCTB4RkYKKworCitzdHJ1Y3QgZHVtcF9oZHIgeworCXUzMgkJIGhkcl9zaXplOwkvKiBpbiBkd29yZHMsIGV4Y2x1ZGluZyB0aGlzIGZpZWxkICovCisJc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ247CisJdTMyCQkgeHN0b3JtX3dhaXRwOworCXUzMgkJIHRzdG9ybV93YWl0cDsKKwl1MzIJCSB1c3Rvcm1fd2FpdHA7CisJdTMyCQkgY3N0b3JtX3dhaXRwOworCXUxNgkJIGluZm87CisJdTgJCSBpZGxlX2NoazsKKwl1OAkJIHJlc2VydmVkOworfTsKKworc3RydWN0IHJlZ19hZGRyIHsKKwl1MzIgYWRkcjsKKwl1MzIgc2l6ZTsKKwl1MTYgaW5mbzsKK307CisKK3N0cnVjdCB3cmVnX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBzaXplOworCXUzMiByZWFkX3JlZ3NfY291bnQ7CisJY29uc3QgdTMyICpyZWFkX3JlZ3M7CisJdTE2IGluZm87Cit9OworCisKKyNkZWZpbmUgUkVHU19DT1VOVAkJNTU4CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIHJlZ19hZGRyc1tSRUdTX0NPVU5UXSA9IHsKKwl7IDB4MjAwMCwgMzQxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDAsIDEwMywgUklfQUxMX09OTElORX0sCisJeyAweDMwMDAsIDI4NywgUklfQUxMX09OTElORX0sIHsgMHgzODAwLCAzMzEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg4ODAwLCA2LCBSSV9FMV9PTkxJTkV9LCB7IDB4YTAwMCwgMjIzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTM4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhMzk4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTM5YywgNywgUklfRTFIX09OTElORX0sIHsgMHhhM2MwLCAzLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNkMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2Q4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNlMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2U4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTNmMCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhM2Y4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YTQwMCwgNjksIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1MjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUyOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1MzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTUzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU2OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1NzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTU4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1OTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTVhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE1YzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTVlMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE1ZTgsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTVmMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE1ZjgsIDEwLCBSSV9FMUhfT05MSU5FfSwgeyAweDEwMDAwLCAyMzYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDNiYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNjYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwM2RjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAwLCA1NywgUklfQUxMX09OTElORX0sCisJeyAweDEwNGU4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNGY0LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDAsIDE0NiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc1MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwNzYwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzcwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3ODAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3OTAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDdhMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDdiMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwN2MwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwN2QwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3ZTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4ODAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDkwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MDAwLCAyNiwgUklfRTFIX09OTElORX0sCisJeyAweDE2MDcwLCAxOCwgUklfRTFIX09OTElORX0sIHsgMHgxNjBjMCwgMjcsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjE0MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxNjE2MCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDE2MTgwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MWMwLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYyMDQsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTgwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxODAwOCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgyMDAwMCwgMjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDA2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgyMDA4MCwgMTM4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAyYjQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYzQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDQwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwYywgOCwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDJjLCAxOCwgUklfRTFIX09OTElORX0sIHsgMHgyMDQ4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNTAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDQwMDAwLCA5OCwgUklfQUxMX09OTElORX0sIHsgMHg0MDE5NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQwMWE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwMWE4LCAxMSwgUklfRTFIX09OTElORX0sCisJeyAweDQwMjAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwNDAwLCA0MywgUklfQUxMX09OTElORX0sCisJeyAweDQwNGI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNGM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0Y2MsIDMsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NDA1MDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDUxMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHg0MDUyMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQwNTMwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNTQwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHg0MjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyMmJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyZDQsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NDI0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTY4LCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI4MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAwMDAsIDIwLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAwNTAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAwNzAsIDg4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxZGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAxZWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDFmMCwgNCwgUklfRTFIX09OTElORX0sIHsgMHg1MDIwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDUwMjBjLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjI4LCA2LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4NTAyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MjAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1NDAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDU0MDA0LCAzMzI3LCBSSV9BTExfT0ZGTElORX0sIHsgMHg1ODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDU4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sIHsgMHg2MDAwMCwgNzEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDEyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDEzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTNjLCAyNCwgUklfRTFIX09OTElORX0sIHsgMHg2MDIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYxMDA0LCA1MTEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4NzAwMDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NzAwMjAsIDIxNDk2LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDBjLCA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDFjLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDM4LCA0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MDQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MDRjLCAxMDksIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4ODUyMDAsIDMyLCBSSV9BTExfT05MSU5FfSwgeyAweDg1MjgwLCAxMTEwNCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHhhMDAwMCwgMTYzODQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YjAwMDAsIDE2Mzg0LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YzEwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzEwMjgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMTAzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMTgwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGMyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNDAwLCA0OSwgUklfQUxMX09OTElORX0sIHsgMHhjMjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjU2OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHhjMjYwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MDAwLCAxNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJjMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0MmUwLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweGM0NDAwLCA1MSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NGQwLCAzOCwgUklfQUxMX09OTElORX0sIHsgMHhjNDU3MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGM0NjAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMDAwLCAxOSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMDRjLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGQwMDZjLCA5MSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMWY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAyMGMsIDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDIyOCwgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4ZDAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDMwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDQwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQ0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQ0MDA0LCAyNTU5LCBSSV9BTExfT0ZGTElORX0sCisJeyAweGQ4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQ4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweGUwMDAwLCAyMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDA1NCwgOCwgUklfQUxMX09OTElORX0sCisJeyAweGUwMDc0LCA4NSwgUklfQUxMX09OTElORX0sIHsgMHhlMDFkNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAyMGMsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMmMsIDE4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4ZTAyODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAzMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMjAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUyMDA0LCAyMDQ3LCBSSV9BTExfT0ZGTElORX0sIHsgMHhmMDAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGYwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkV9LCB7IDB4MTAxMDAwLCAxMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTAzYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDEwNGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwNTAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTAxMTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxODAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjAwMCwgMTgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwNTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAyMDgwLCAxNywgUklfQUxMX09OTElORX0sIHsgMHgxMDIwYzgsIDgsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMDI0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDAwLCAyNiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA3NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwODQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDk4LCA1LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTAzODAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAwMCwgNjMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQxMDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MjAwLCAxNywgUklfQUxMX09OTElORX0sIHsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0NTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQ5MDAsIDE5MiwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDAwLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMwMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2FjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2RjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNmYywgNzY5LCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDgwMDAsIDMzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MDkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwODBhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwODBhYywgNSwgUklfRTFIX09OTElORX0sIHsgMHgxMDgxMDAsIDUsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgxMjAsIDUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4MjAwLCA3NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwODQwMCwgNzQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4ODAwLCAxNTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDkwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMDAwLCAzNDcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1NzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTg4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNTk4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU5YywgMjMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMjA2MTQsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTIwNjFjLCAzMCwgUklfRTFIX09OTElORX0sCisJeyAweDEyMDgwYywgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwYTAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIyMDAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyODAwMCwgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE0MDAwMCwgMTE0LCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDFkNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDQwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQ4MDAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTRjMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE1MDAwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE1NDAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNTgwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNWMwMDAsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxMDAwLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxMDI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2MTgwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwMDAsIDYwLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MGZjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDEwYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDExMCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNjQyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDI1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyNzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjgwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0ODAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NTAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjI5YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2ODAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDAwLCAyNzAsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDQ0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4NDU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODgwMCwgMTksIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjg5MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4YTAwLCAxMjgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNmEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZhMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE2YzAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNmMwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MTZlMDAwLCAxNiwgUklfRTFIX09OTElORX0sIHsgMHgxNmUxMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNmUyMDAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlNDAwLCAxODMsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNzAwMDAsIDkzLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDE5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAyMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAyMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTc4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMDAwLCA2MSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEzYywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE4MTAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxODEwMTAsIDEwMjAsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWEwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTgxMDAsIDE5ODQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDFhYTAwNCwgNjY1NSwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDFiMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MjAwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgyMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjAyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjI1ODAwLCAxNTM2LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMjcwMDQsIDEwMjMsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjI4MTAwLCA4NjQwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MjMyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIzODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI0MDAwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyODAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyODIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmE4MTAwLCA5NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDJhOTAwNCwgNzY3OSwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDJiMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MzAwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgzMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzAyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzI1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyODEwMCwgNTM2LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgzMjg5NjQsIDgxMDMsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgzMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzM4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzQwMDAwLCAyLCBSSV9BTExfT05MSU5FfQorfTsKKworCisjZGVmaW5lIElETEVSRUdTX0NPVU5UCQkyNzcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgaWRsZV9hZGRyc1tJRExFUkVHU19DT1VOVF0gPSB7CisJeyAweDIxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjEyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIxMmMsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MWMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTM4YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGE0MDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTQyYywgMTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNjAwLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweGE2MTgsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhjMDljLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2IwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzZDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyMDIxYywgMTEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDJiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwNDBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDAxNTQsIDE0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA0YWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjI5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjJhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDI1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDE2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDFkMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMWUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAyMGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDA5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDExYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDYwMTJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzEwMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNTUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyOTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJiNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQ1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxNmMsIDgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDFlOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMjBjLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAxNTQsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDIwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGUwMjBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTAzMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDIwODAsIDE2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzAwNCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMzA2OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwNzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDljLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTA0MDA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDAyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwM2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0NDAwLCA2NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTAxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMWIwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDM2YywgMywgUklfQUxMX09OTElORX0sCisJeyAweDEyMDQwOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjA0MTQsIDE1LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNDc4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDUyYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMjA1N2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1OGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNjA4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTIwODA4LCAxLCBSSV9FMV9PTkxJTkV9LCB7IDB4MTIwODBjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDgyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDgyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4MzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4MzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODcwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODc4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4OTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4YzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGQwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhlOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ZjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOTA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDA1YywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE0MDBkMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNDAwZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAyYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDAxNCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MmEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDA4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODAxOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAyOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwNTgsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwNzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MjM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODJlMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODMwMCwgNjcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4NDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQ0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FfSwgeyAweDE2ZTIwMCwgMTI4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTZlNDA0LCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTU4NCwgNzAsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNzAwYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMGFjLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE3NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDE4NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYWEwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MWI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MmI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDI2YywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MzM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODA4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODBjMCwgMSwgUklfQUxMX09OTElORX0KK307CisKK3N0YXRpYyBjb25zdCB1MzIgcmVhZF9yZWdfZTFfMFtdID0geyAweDFiMTAwMCB9OworCisjZGVmaW5lIFdSRUdTX0NPVU5UX0UxCQkxCitzdGF0aWMgY29uc3Qgc3RydWN0IHdyZWdfYWRkciB3cmVnX2FkZHJzX2UxW1dSRUdTX0NPVU5UX0UxXSA9IHsKKwl7IDB4MWIwYzAwLCAxOTIsIDEsIHJlYWRfcmVnX2UxXzAsIFJJX0UxX09GRkxJTkUgfQorfTsKKworc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMWhfMFtdID0geyAweDFiMTA0MCwgMHgxYjEwMDAgfTsKKworI2RlZmluZSBXUkVHU19DT1VOVF9FMUgJCTEKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFoW1dSRUdTX0NPVU5UX0UxSF0gPSB7CisJeyAweDFiMGMwMCwgMjU2LCAyLCByZWFkX3JlZ19lMWhfMCwgUklfRTFIX09GRkxJTkUgfQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ25fYWxsID0geyAweDQ5YWE5M2VlLCAweDQwODM1LCAweDIyIH07CisKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxCTIKK3N0YXRpYyBjb25zdCB1MzIgdGltZXJfc3RhdHVzX3JlZ3NfZTFbVElNRVJfUkVHU19DT1VOVF9FMV0gPQorCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9CisJeyAweDE2NDBkMCwgMHgxNjQwZDQgfTsKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxSAkyCitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQorCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMWhbVElNRVJfUkVHU19DT1VOVF9FMUhdID0KKwl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmggYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKaW5kZXggMTkyZmE5OC4uZTJkZjIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2Z3X2RlZnMuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDggKzUwLDEwIEBACiAjZGVmaW5lIFRTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMzU4ICsgKHBvcnQgKiAweDNlOCkgKyAoY2xpZW50X2lkICogMHgyOCkpIFwKLQk6ICgweDljOCArIChwb3J0ICogMHgyZjgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDMzNTAgKyAocG9ydCAqIDB4MTkwKSArIChjbGllbnRfaWQgKiAweDEwKSkgXAorCTogKDB4OWMwICsgKHBvcnQgKiAweDEzMCkgKyAoY2xpZW50X2lkICogMHgxMCkpKQorI2RlZmluZSBUU1RPUk1fQ09NTU9OX1NBRkNfV09SS0FST1VORF9FTkFCTEVfT0ZGU0VUIFwKKwkoSVNfRTFIX09GRlNFVCA/IDB4MWFkOCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFRTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAoZnVuY3Rpb24gKiBcCkBAIC04MSw0MyArODMsNTQgQEAKIAkoZnVuY3Rpb24gKiAweDM4KSkpCiAjZGVmaW5lIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjAxMCArIChwb3J0ICogMHg1YjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCi0JMHg1MCkpIDogKDB4NDAwMCArIChwb3J0ICogMHgzZjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDM4KSkpCi0jZGVmaW5lIFRTVE9STV9SWF9QUk9EU19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMzUwICsgKHBvcnQgKiAweDNlOCkgKyAoY2xpZW50X2lkICogMHgyOCkpIFwKLQk6ICgweDljMCArIChwb3J0ICogMHgyZjgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSkKKwkweDUwKSkgOiAoMHg0MDgwICsgKHBvcnQgKiAweDViMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4NTApKSkKICNkZWZpbmUgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MmMwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGI4OCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKLSNkZWZpbmUgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweDNiMzAgOiAweDFjMjApCisjZGVmaW5lIFRTVE9STV9UUEFfRVhJU1RfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHgzNjgwIDogMHgxYzIwKQogI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHhhMDQwIDogMHgyYzEwKQogI2RlZmluZSBVU1RPUk1fQUdHX0RBVEFfU0laRSAoSVNfRTFIX09GRlNFVCA/IDB4MjQ0MCA6IDB4MTIwMCkKICNkZWZpbmUgVVNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDgwMDAgOiAweDEwMDApCisJKElTX0UxSF9PRkZTRVQgPyAweDg5NjAgOiAweDEwMDApCiAjZGVmaW5lIFVTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODk4MCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMjk4ICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCi0JKDB4NTQ1MCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxOCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCSgweDUzMzAgKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkxYSArIChmdW5jdGlvbiAqIFwKLQkweDI4KSArIChpbmRleCAqIDB4NCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUyMiArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkyMiArIChmdW5jdGlvbiAqIFwKKwkweDQwKSArIChpbmRleCAqIDB4NCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHgyOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwMCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHg0MCkpKQogI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NTA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDQwKSkpCisjZGVmaW5lIFVTVE9STV9FVEhfUklOR19QQVVTRV9EQVRBX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAyMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCTB4ZmZmZmZmZmYpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhNTAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkOTggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFVTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDI0NDggOiAweGZmZmZmZmZmKQogI2RlZmluZSBVU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NjQ0ICsgKHBvcnQgKiAweGQwKSkgOiAoMHgxOTU0ICsgKHBvcnQgKiAweGI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg5NzA0ICsgKHBvcnQgKiAweGYwKSkgOiAoMHgxOTg0ICsgKHBvcnQgKiAweGMwKSkpCiAjZGVmaW5lIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMjkwICsgKHBvcnQgKiAweDI1OCkgKyAoY2xpZW50SWQgKiAweDE4KSkgOiBcCi0JKDB4NTQ0OCArIChwb3J0ICogMHgxYzgpICsgKGNsaWVudElkICogMHgxOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAorCSgweDUzMjggKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNDA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg1NDA4ICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjQwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTMwOCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhZDQgKyAocG9ydCAqIDB4OCkpIDogMHhmZmZmZmZmZikKKyNkZWZpbmUgVVNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDUwICsgKHBvcnQgKiAweDJkMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKKwkweDI4KSkgOiAoMHg0NzQwICsgKHBvcnQgKiAweDJkMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgVVNUT1JNX1JYX1BST0RTX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRfaWQgKiAweDMwKSkgXAorCTogKDB4NTMxOCArIChwb3J0ICogMHgyNjApICsgKGNsaWVudF9pZCAqIDB4MjApKSkKICNkZWZpbmUgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDkwMWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKIAkoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKQEAgLTEzMiwxMiArMTQ1LDE1IEBACiAjZGVmaW5lIFVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgY3B1X2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg5MDA4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpIDogXAogCSgweDE0MDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkpCisjZGVmaW5lIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI5ZjAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkODAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFhTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAogCShJU19FMUhfT0ZGU0VUID8gMHg5MDAwIDogMHgxMDAwKQogI2RlZmluZSBYU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4OTAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjRhOCArIChwb3J0ICogMHg0MCkpIDogKDB4M2JhMCArIChwb3J0ICogMHg0MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjRhOCArIChwb3J0ICogMHg1MCkpIDogKDB4M2JhMCArIChwb3J0ICogMHg1MCkpKQogI2RlZmluZSBYU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKGZ1bmN0aW9uICogXApAQCAtMTQ5LDIzICsxNjUsMjMgQEAKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxNDA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQogI2RlZmluZSBYU1RPUk1fRTFIT1ZfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyYWI4ICsgKGZ1bmN0aW9uICogMHgyKSkgOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MmMxMCArIChmdW5jdGlvbiAqIDB4MikpIDogMHhmZmZmZmZmZikKICNkZWZpbmUgWFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjQxOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4M2I3MCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgWFNUT1JNX0ZBSVJORVNTX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjU2OCArIChmdW5jdGlvbiAqIDB4NzApKSA6ICgweDNjNjAgKyBcCi0JKGZ1bmN0aW9uICogMHg3MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MjU4OCArIChmdW5jdGlvbiAqIDB4OTApKSA6ICgweDNjODAgKyBcCisJKGZ1bmN0aW9uICogMHg5MCkpKQogI2RlZmluZSBYU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQgXAotCShJU19FMUhfT0ZGU0VUID8gMHgyYWM4IDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/IDB4MmMyMCA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGExNDQgKyAocG9ydCAqIDB4MzApKSA6ICgweDE0NTQgKyAocG9ydCAqIDB4MTgpKSkKICNkZWZpbmUgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhjMDAwICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKIAkweDM4KSkgOiAoMHgzMzc4ICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MzgpKSkKICNkZWZpbmUgWFNUT1JNX1JBVEVfU0hBUElOR19QRVJfVk5fVkFSU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI1MjggKyAoZnVuY3Rpb24gKiAweDcwKSkgOiAoMHgzYzIwICsgXAotCShmdW5jdGlvbiAqIDB4NzApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI1NDggKyAoZnVuY3Rpb24gKiAweDkwKSkgOiAoMHgzYzQwICsgXAorCShmdW5jdGlvbiAqIDB4OTApKSkKICNkZWZpbmUgWFNUT1JNX1NQUV9QQUdFX0JBU0VfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDAwICsgKGZ1bmN0aW9uICogMHgxMCkpIDogKDB4MzMyOCArIFwKIAkoZnVuY3Rpb24gKiAweDEwKSkpCkBAIC0xNzgsNyArMTk0LDcgQEAKICNkZWZpbmUgQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUgMHgwCiAKIC8qKgotKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhdG50cyBmb3IgdGhlIEVUSCBmbG93CisqIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGFudHMgZm9yIHRoZSBFVEggZmxvdwogKi8KICNpZmRlZiBfRVZFUkVTVF9NSUNST0NPREUKICNpbmNsdWRlICJtaWNyb2NvZGVfY29uc3RhbnRzLmgiCkBAIC0xOTYsMTggKzIxMiwxOCBAQAogI2RlZmluZSBJUFY2X0hBU0hfVFlQRSAzCiAjZGVmaW5lIFRDUF9JUFY2X0hBU0hfVFlQRSA0CiAKLS8qIEV0aGVybmV0IFJpbmcgcGFybWF0ZXJzICovCisKKy8qIEV0aGVybmV0IFJpbmcgcGFyYW1ldGVycyAqLwogI2RlZmluZSBYX0VUSF9MT0NBTF9SSU5HX1NJWkUgMTMKICNkZWZpbmUgRklSU1RfQkRfSU5fUEtUIDAKICNkZWZpbmUgUEFSU0VfQkRfSU5ERVggMQotI2RlZmluZSBOVU1fT0ZfRVRIX0JEU19JTl9QQUdFIFwKLQkoKFBBR0VfU0laRSkgLyAoU1RSVUNUX1NJWkUoZXRoX3R4X2JkKS84KSkKKyNkZWZpbmUgTlVNX09GX0VUSF9CRFNfSU5fUEFHRSAoKFBBR0VfU0laRSkvKFNUUlVDVF9TSVpFKGV0aF90eF9iZCkvOCkpCiAKIAogLyogUnggcmluZyBwYXJhbXMgKi8KLSNkZWZpbmUgVV9FVEhfTE9DQUxfQkRfUklOR19TSVpFICgxNikKLSNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAoMTIpCi0jZGVmaW5lIFVfRVRIX1NHTF9TSVpFICg4KQorI2RlZmluZSBVX0VUSF9MT0NBTF9CRF9SSU5HX1NJWkUgMTYKKyNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAxMgorI2RlZmluZSBVX0VUSF9TR0xfU0laRSA4CiAKIAogI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0VfTUFTSyBcCkBAIC0yMjksMTUgKzI0NSwxNSBAQAogI2RlZmluZSBVX0VUSF9VTkRFRklORURfUSAweEZGCiAKIC8qIHZhbHVlcyBvZiBjb21tYW5kIElEcyBpbiB0aGUgcmFtcm9kIG1lc3NhZ2UgKi8KLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCAoODApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCAoODUpCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NUQVRfUVVFUlkgKDkwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9VUERBVEUgKDEwMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAoMTA1KQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDICgxMTApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgKDExNSkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgKDEyMCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfRk9SV0FSRF9TRVRVUCAoMTI1KQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9QT1JUX1NFVFVQIDgwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCA4NQorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZIDkwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1VQREFURSAxMDAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCAxMDUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyAxMTAKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfQ0ZDX0RFTCAxMTUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9ERUwgMTIwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0ZPUldBUkRfU0VUVVAgMTI1CiAKIAogLyogY29tbWFuZCB2YWx1ZXMgZm9yIHNldCBtYWMgY29tbWFuZCAqLwpAQCAtMjU0LDEyICsyNzAsMTYgQEAKICNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UxSCAyNQogCiAvKiBNYXhpbWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTEgKDMyKQotI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggKDY0KQorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSAzMgorI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUggNjQKKworLyogRVRIIFJTUyBtb2RlcyAqLworI2RlZmluZSBFVEhfUlNTX01PREVfRElTQUJMRUQgMAorI2RlZmluZSBFVEhfUlNTX01PREVfUkVHVUxBUiAxCiAKIAogLyoqCi0qIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGF0bnRzIGNvbW1vbiB0byBhbGwgbWljcm9jb2RlIGZsb3dzCisqIFRoaXMgZmlsZSBkZWZpbmVzIEhTSSBjb25zdGFudHMgY29tbW9uIHRvIGFsbCBtaWNyb2NvZGUgZmxvd3MKICovCiAKIC8qIENvbm5lY3Rpb24gdHlwZXMgKi8KQEAgLTI3OCwyNSArMjk4LDIyIEBACiAjZGVmaW5lIEVUSF9TVEFURSAoRVRIX0NPTk5FQ1RJT05fVFlQRSA8PCBQUk9UT0NPTF9TVEFURV9CSVRfT0ZGU0VUKQogI2RlZmluZSBUT0VfU1RBVEUgKFRPRV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKICNkZWZpbmUgUkRNQV9TVEFURSAoUkRNQV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKLSNkZWZpbmUgSVNDU0lfU1RBVEUgXAotCShJU0NTSV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKLSNkZWZpbmUgRkNPRV9TVEFURSAoRkNPRV9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKIAogLyogbWljcm9jb2RlIGZpeGVkIHBhZ2UgcGFnZSBzaXplIDRLIChjaGFpbnMgYW5kIHJpbmcgc2VnbWVudHMpICovCi0jZGVmaW5lIE1DX1BBR0VfU0laRSAoNDA5NikKKyNkZWZpbmUgTUNfUEFHRV9TSVpFIDQwOTYKIAogCiAvKiBIb3N0IGNvYWxlc2NpbmcgY29uc3RhbnRzICovCiAKIC8qIGluZGV4IG51bWJlcnMgKi8KLSNkZWZpbmUgSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CisjZGVmaW5lIEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgOAogI2RlZmluZSBIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDgKICNkZWZpbmUgSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA0CiAjZGVmaW5lIEhDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19VU1RPUk1fU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19DU1RPUk1fU0JfTlVNX0lORElDRVMgNAogCi0vKiBpbmRleCB2YWx1ZXMgLSB3aGljaCBjb3VudGVydG8gdXBkYXRlICovCisvKiBpbmRleCB2YWx1ZXMgLSB3aGljaCBjb3VudGVyIHRvIHVwZGF0ZSAqLwogCiAjZGVmaW5lIEhDX0lOREVYX1VfVE9FX1JYX0NRX0NPTlMgMAogI2RlZmluZSBIQ19JTkRFWF9VX0VUSF9SWF9DUV9DT05TIDEKQEAgLTMzMCwxNiArMzQ3LDE2IEBACiAjZGVmaW5lIEFUVEVOVElPTl9JRCA0CiAKIC8qIG1heCBudW1iZXIgb2Ygc2xvdyBwYXRoIGNvbW1hbmRzIHBlciBwb3J0ICovCi0jZGVmaW5lIE1BWF9SQU1ST0RTX1BFUl9QT1JUICg4KQorI2RlZmluZSBNQVhfUkFNUk9EU19QRVJfUE9SVCA4CiAKIC8qIHZhbHVlcyBmb3IgUlggRVRIIENRRSB0eXBlIGZpZWxkICovCi0jZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfRkFTVFBBVEggKDApCi0jZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfUkFNUk9EICgxKQorI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX0ZBU1RQQVRIIDAKKyNkZWZpbmUgUlhfRVRIX0NRRV9UWVBFX0VUSF9SQU1ST0QgMQogCiAKIC8qKioqIERFRklORVMgRk9SIFRJTUVSUy9DTE9DS1MgUkVTT0xVVElPTlMgKioqKi8KLSNkZWZpbmUgRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IgKDE2MDApCi0jZGVmaW5lIEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUiAoMTAwKQorI2RlZmluZSBFTVVMQVRJT05fRlJFUVVFTkNZX0ZBQ1RPUiAxNjAwCisjZGVmaW5lIEZQR0FfRlJFUVVFTkNZX0ZBQ1RPUiAxMDAKIAogI2RlZmluZSBUSU1FUlNfVElDS19TSVpFX0NISVAgKDFlLTMpCiAjZGVmaW5lIFRJTUVSU19USUNLX1NJWkVfRU1VTCBcCkBAIC0zNTMsMTIgKzM3MCw5IEBACiAjZGVmaW5lIFRTRU1JX0NMSzFfUkVTVUxfRlBHQSBcCiAgKChUU0VNSV9DTEsxX1JFU1VMX0NISVApLyhGUEdBX0ZSRVFVRU5DWV9GQUNUT1IpKQogCi0jZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfQ0hJUCBcCi0gKFRJTUVSU19USUNLX1NJWkVfQ0hJUCkKLSNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9FTVVMIFwKLSAoVElNRVJTX1RJQ0tfU0laRV9FTVVMKQotI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0ZQR0EgXAotIChUSU1FUlNfVElDS19TSVpFX0ZQR0EpCisjZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfQ0hJUCAoVElNRVJTX1RJQ0tfU0laRV9DSElQKQorI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0VNVUwgKFRJTUVSU19USUNLX1NJWkVfRU1VTCkKKyNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9GUEdBIChUSU1FUlNfVElDS19TSVpFX0ZQR0EpCiAKICNkZWZpbmUgWFNFTUlfQ0xLMV9SRVNVTF9DSElQICgxZS0zKQogI2RlZmluZSBYU0VNSV9DTEsxX1JFU1VMX0VNVUwgXApAQCAtMzgzLDEyICszOTcsMTUgQEAKICNkZWZpbmUgWFNUT1JNX0lQX0lEX1JPTExfSEFMRiAweDgwMDAKICNkZWZpbmUgWFNUT1JNX0lQX0lEX1JPTExfQUxMIDAKIAotI2RlZmluZSBGV19MT0dfTElTVF9TSVpFICg1MCkKKyNkZWZpbmUgRldfTE9HX0xJU1RfU0laRSA1MAogCiAjZGVmaW5lIE5VTV9PRl9QUk9UT0NPTFMgNAotI2RlZmluZSBNQVhfQ09TX05VTUJFUiAxNgorI2RlZmluZSBOVU1fT0ZfU0FGQ19CSVRTIDE2CisjZGVmaW5lIE1BWF9DT1NfTlVNQkVSIDQKICNkZWZpbmUgTUFYX1RfU1RBVF9DT1VOVEVSX0lEIDE4CiAjZGVmaW5lIE1BWF9YX1NUQVRfQ09VTlRFUl9JRCAxOAorI2RlZmluZSBNQVhfVV9TVEFUX0NPVU5URVJfSUQgMTgKKwogCiAjZGVmaW5lIFVOS05PV05fQUREUkVTUyAwCiAjZGVmaW5lIFVOSUNBU1RfQUREUkVTUyAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCmluZGV4IGVmZDc2NDQuLjAzYzYyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfaHNpLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMTksMzUgKzExOSwxNSBAQAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX1VNUF9OQ19TSV9FWFRfUEhZX1RZUEVfQkNNNTIyMSAweDAwMDEwMDAwCiAKIAl1MzIgYm9hcmQ7CQkJCQkJLyogMHgxMjQgKi8KLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0sJCSAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9TSElGVAkJICAgIDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX05PTkUJCSAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMCAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDEgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAyRyAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwNEcgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDdHICAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDE1RyAgICAweDAwMDAwMDA2Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMEcgICAgMHgwMDAwMDAwNwotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDNHICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIyRyAgICAweDAwMDAwMDA5Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMUcgICAgMHgwMDAwMDAwYQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjNHICAgIDB4MDAwMDAwMGIKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDMzRyAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFUMTEwMSAgICAgMHgwMDAwMDAwZAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExRVQxMjAxICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMUExMTMzRyAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFFQTEyMzNHICAgMHgwMDAwMDAxMAotCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVkVSX01BU0sJCSAgICAweGZmZmYwMDAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVkVSX1NISUZUCQkgICAgMTYKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfTUFTSwkgICAgMHhmMDAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01BSk9SX1ZFUl9TSElGVAkgICAgMjgKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfTUFTSwkgICAgMHgwZjAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9TSElGVAkgICAgMjQKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfTUFTSwkJICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfTUFTSwkJICAgIDB4MDBGRjAwMDAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9SRVZfU0hJRlQJCSAgICAxNgogCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUFKT1JfVkVSX01BU0sJICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfU0hJRlQJICAgIDI0CisKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfTUFTSwkgICAgMHhGMDAwMDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01JTk9SX1ZFUl9TSElGVAkgICAgMjgKKwogCXUzMiByZXNlcnZlZDsJCQkJCQkvKiAweDEyOCAqLwogCiB9OwpAQCAtMTk4LDM2ICsxNzgsMjEgQEAKIAl1MzIgcmRtYV9tYWNfbG93ZXI7CiAKIAl1MzIgc2VyZGVzX2NvbmZpZzsKLQkvKiBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KLSNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfTUFTSyAweGZmZmYwMDAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19UWF9EUlZfUFJFX0VNUEhBU0lTX1NISUZUICAxNgorI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLCSAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQJICAgICAgMAogCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX01BU0sgICAgMHgwMDAwZmZmZgotI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCAgIDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfTUFTSwkgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUCSAgICAgIDE2CiAKLQl1MTYgc2VyZGVzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNbMTZdOwotCXUxNiBzZXJkZXNfcnhfZHJpdmVyX2VxdWFsaXplclsxNl07CiAKLQl1MzIgeGd4c19jb25maWdfbGFuZTA7Ci0JdTMyIHhneHNfY29uZmlnX2xhbmUxOwotCXUzMiB4Z3hzX2NvbmZpZ19sYW5lMjsKLQl1MzIgeGd4c19jb25maWdfbGFuZTM7Ci0JLyogZm9yIGV4dGVybmFsIFBIWSwgb3IgZm9yY2VkIG1vZGUgb3IgZHVyaW5nIEFOICovCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfVFhfRFJWX1BSRV9FTVBIQVNJU19NQVNLICAgMHhmZmZmMDAwMAotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX1RYX0RSVl9QUkVfRU1QSEFTSVNfU0hJRlQgIDE2CisJdTMyIFJlc2VydmVkMFsxNl07CQkJCSAgICAvKiAweDE1OCAqLwogCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLCSAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCAgICAgMAorCS8qICBmb3IgZXh0ZXJuYWwgUEhZLCBvciBmb3JjZWQgbW9kZSBvciBkdXJpbmcgQU4gKi8KKwl1MTYgeGd4c19jb25maWdfcnhbNF07CQkJCSAgICAvKiAweDE5OCAqLwogCi0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMFsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMVsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lMlsxNl07Ci0JdTE2IHhneHNfdHhfZHJpdmVyX3ByZV9lbXBoYXNpc19sYW5lM1sxNl07CisJdTE2IHhneHNfY29uZmlnX3R4WzRdOwkJCQkgICAgLyogMHgxQTAgKi8KIAotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTBbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTFbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTJbMTZdOwotCXUxNiB4Z3hzX3J4X2RyaXZlcl9lcXVhbGl6ZXJfbGFuZTNbMTZdOworCXUzMiBSZXNlcnZlZDFbNjRdOwkJCQkgICAgLyogMHgxQTggKi8KIAogCXUzMiBsYW5lX2NvbmZpZzsKICNkZWZpbmUgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNLCQkgICAgMHgwMDAwZmZmZgpAQCAtMjY1LDcgKzIzMCw3IEBACiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMJICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNQkgICAgMHgwMDAwMDQwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2CSAgICAweDAwMDAwNTAwCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgyNzYJICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNgkgICAgMHgwMDAwMDYwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxCSAgICAweDAwMDAwNzAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEJICAgIDB4MDAwMDA4MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRQkgICAgMHgwMDAwZmQwMApAQCAtMzE5LDYgKzI4NCwxMiBAQAogCiAJdTMyIGNvbmZpZzsJCQkJCQkvKiAweDQ1MCAqLwogI2RlZmluZSBTSEFSRURfRkVBVFVSRV9CTUNfRUNIT19NT0RFX0VOIAkgICAgMHgwMDAwMDAwMQorCisJLyogIFVzZSB0aGUgdmFsdWVzIGZyb20gb3B0aW9ucyA0NyBhbmQgNDggaW5zdGVhZCBvZiB0aGUgSFcgZGVmYXVsdAorCSAgdmFsdWVzICovCisjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRElTQUJMRUQgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0ZFQVRfQ0ZHX09WRVJSSURFX1BSRUVNUEhBU0lTX0NGR19FTkFCTEVEICAgICAgMHgwMDAwMDAwMgorCiAjZGVmaW5lIFNIQVJFRF9GRUFUVVJFX01GX01PREVfRElTQUJMRUQgCSAgICAweDAwMDAwMTAwCiAKIH07CkBAIC0zNzIsNiArMzQzLDExIEBACiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9NQkFfRU5BQkxFRAkJICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgUE9SVF9GRUFUVVJFX01GV19FTkFCTEVECQkgICAgMHgwNDAwMDAwMAogCisJLyogIENoZWNrIHRoZSBvcHRpYyB2ZW5kb3IgdmlhIGkyYyBiZWZvcmUgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBieQorCSAgU1cgKi8KKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVEIAkgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9FTkFCTEVECQkgICAgICAweDA4MDAwMDAwCisKIAl1MzIgd29sX2NvbmZpZzsKIAkvKiBEZWZhdWx0IGlzIHVzZWQgd2hlbiBkcml2ZXIgc2V0cyB0byAiYXV0byIgbW9kZSAqLwogI2RlZmluZSBQT1JUX0ZFQVRVUkVfV09MX0RFRkFVTFRfTUFTSwkJICAgIDB4MDAwMDAwMDMKQEAgLTUxMiw3ICs0ODgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERldmljZSBJbmZvcm1hdGlvbgkJCQkJCQkgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZGV2X2luZm8gewkJCQkJCSAgICAvKiBzaXplICovCitzdHJ1Y3Qgc2htX2Rldl9pbmZvIHsJCQkJCQkgICAgLyogc2l6ZSAqLwogCiAJdTMyICAgIGJjX3JldjsgLyogOCBiaXRzIGVhY2g6IG1ham9yLCBtaW5vciwgYnVpbGQgKi8JICAgICAgIC8qIDQgKi8KIApAQCAtNjQxLDcgKzYxNywxMCBAQAogCiAJdTMyIHBvcnRfc3R4OwogCi0JdTMyIHJlc2VydmVkWzJdOworCXUzMiBzdGF0X25pZ190aW1lcjsKKworCS8qIE1DUCBmaXJtd2FyZSBkb2VzIG5vdCB1c2UgdGhpcyBmaWVsZCAqLworCXUzMiBleHRfcGh5X2Z3X3ZlcnNpb247CiAKIH07CiAKQEAgLTgyNywxMSArODA2LDcgQEAKIAogCXN0cnVjdCBzaGFyZWRfbWZfY2ZnCXNoYXJlZF9tZl9jb25maWc7CiAJc3RydWN0IHBvcnRfbWZfY2ZnCXBvcnRfbWZfY29uZmlnW1BPUlRfTUFYXTsKLSNpZiBkZWZpbmVkKGI3MTApCi0Jc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxX0ZVTkNfTUFYXTsKLSNlbHNlCiAJc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxSF9GVU5DX01BWF07Ci0jZW5kaWYKIAogfTsKIApAQCAtODYyLDcgKzgzNyw3IEBACiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfQUNUSVZFX01GV19OT05FCSAgICAweDAwMDAwMWMwCiAjZGVmaW5lIFNIUl9NRU1fVkFMSURJVFlfQUNUSVZFX01GV19NQVNLCSAgICAweDAwMDAwMWMwCiAKLQlzdHJ1Y3QgZGV2X2luZm8gCWRldl9pbmZvOwkJIC8qIDB4OCAgICAgKDB4NDM4KSAqLworCXN0cnVjdCBzaG1fZGV2X2luZm8JZGV2X2luZm87CQkgLyogMHg4ICAgICAoMHg0MzgpICovCiAKIAl1OAkJCXJlc2VydmVkWzUyKlBPUlRfTUFYXTsKIApAQCAtMTIxMiw4ICsxMTg3LDkgQEAKIAogCiAjZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk0Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk1Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQkxCisjZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk4CisjZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQk1MworI2RlZmluZSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OIAkJMAogI2RlZmluZSBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTCQkJMQogCiAKQEAgLTEyMjEsMTggKzExOTcsMTIgQEAKICAqIGF0dGVudGlvbiBiaXRzCiAgKi8KIHN0cnVjdCBhdHRlbl9kZWZfc3RhdHVzX2Jsb2NrIHsKLQl1MzIgYXR0bl9iaXRzOwotCXUzMiBhdHRuX2JpdHNfYWNrOwotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBhdHRuX2JpdHNfaW5kZXg7Ci0JdTggcmVzZXJ2ZWQwOwotCXU4IHN0YXR1c19ibG9ja19pZDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCV9fbGUzMiBhdHRuX2JpdHM7CisJX19sZTMyIGF0dG5fYml0c19hY2s7CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwogCXU4IHJlc2VydmVkMDsKLQl1MTYgYXR0bl9iaXRzX2luZGV4OwotI2VuZGlmCi0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMTYgYXR0bl9iaXRzX2luZGV4OworCV9fbGUzMiByZXNlcnZlZDE7CiB9OwogCiAKQEAgLTEzMDUsNyArMTI3NSw3IEBACiAgKiBQYXJzZXIgcGFyc2luZyBmbGFncyBmaWVsZAogICovCiBzdHJ1Y3QgcGFyc2luZ19mbGFncyB7Ci0JdTE2IGZsYWdzOworCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUEFSU0lOR19GTEFHU19FVEhFUk5FVF9BRERSRVNTX1RZUEUgKDB4MTw8MCkKICNkZWZpbmUgUEFSU0lOR19GTEFHU19FVEhFUk5FVF9BRERSRVNTX1RZUEVfU0hJRlQgMAogI2RlZmluZSBQQVJTSU5HX0ZMQUdTX1ZMQU4gKDB4MTw8MSkKQEAgLTEzMzYsOCArMTMwNiw4IEBACiAKIAogc3RydWN0IHJlZ3BhaXIgewotCXUzMiBsbzsKLQl1MzIgaGk7CisJX19sZTMyIGxvOworCV9fbGUzMiBoaTsKIH07CiAKIApAQCAtMTQzNCw4ICsxNDA0LDEwIEBACiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAyCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHhGPDw0KQotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyAoMHgxPDw0KQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTX1NISUZUIDQKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHg3PDw1KQorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDUKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7CiAJdTggY2xpZW50SWQ7CiAJdTggc2JfaW5kZXhfbnVtYmVyczsKQEAgLTE0NjAsMTQgKzE0MzIsMTggQEAKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDQpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgNAorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweDc8PDUpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNQogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTE2IGJkX2J1ZmZfc2l6ZTsKLQl1MTYgbWNfYWxpZ25tZW50X3NpemU7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOworCXU4IG1jX2FsaWdubWVudF9sb2dfc2l6ZTsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBtY19hbGlnbm1lbnRfc2l6ZTsKKwl1OCBtY19hbGlnbm1lbnRfbG9nX3NpemU7CisJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOwogCXUxNiBiZF9idWZmX3NpemU7CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKQEAgLTE0NzksMTMgKzE0NTUsNyBAQAogCXU4IF9fbG9jYWxfYmRfcHJvZDsKIAl1OCBfX2xvY2FsX3NnZV9wcm9kOwogI2VuZGlmCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IF9fYmRfY29uczsKLQl1MTYgX19zZ2VfY29uczsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBfX3NnZV9jb25zOwotCXUxNiBfX2JkX2NvbnM7Ci0jZW5kaWYKKwl1MzIgcmVzZXJ2ZWQ7CiAJdTMyIGJkX3BhZ2VfYmFzZV9sbzsKIAl1MzIgYmRfcGFnZV9iYXNlX2hpOwogCXUzMiBzZ2VfcGFnZV9iYXNlX2xvOwpAQCAtMTQ5NiwxNiArMTQ2NiwxNiBAQAogICogVGhlIGV0aCBSeCBCdWZmZXIgRGVzY3JpcHRvcgogICovCiBzdHJ1Y3QgZXRoX3J4X2JkIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKIH07CiAKIC8qCiAgKiBUaGUgZXRoIFJ4IFNHRSBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfcnhfc2dlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKIH07CiAKIC8qCkBAIC0xNjk3LDcgKzE2NjcsNyBAQAogfTsKIAogLyoKLSAqIFRoZSBldGggYWdncmVnYXRpdmUgY29udGV4dCBzZWN0aW9uIG9mIFRzdG9ybQorICogVGhlIGV0aCBleHRyYSBhZ2dyZWdhdGl2ZSBjb250ZXh0IHNlY3Rpb24gb2YgVHN0b3JtCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX2V4dHJhX2FnX2NvbnRleHRfc2VjdGlvbiB7CiAJdTMyIF9fYWdnX3ZhbDE7CkBAIC0xOTA4LDExICsxODc4LDExIEBACiAgKiBUaGUgZXRoIFR4IEJ1ZmZlciBEZXNjcmlwdG9yCiAgKi8KIHN0cnVjdCBldGhfdHhfYmQgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOwotCXUxNiBuYmQ7Ci0JdTE2IG5ieXRlczsKLQl1MTYgdmxhbjsKKwlfX2xlMzIgYWRkcl9sbzsKKwlfX2xlMzIgYWRkcl9oaTsKKwlfX2xlMTYgbmJkOworCV9fbGUxNiBuYnl0ZXM7CisJX19sZTE2IHZsYW47CiAJc3RydWN0IGV0aF90eF9iZF9mbGFncyBiZF9mbGFnczsKIAl1OCBnZW5lcmFsX2RhdGE7CiAjZGVmaW5lIEVUSF9UWF9CRF9IRFJfTkJEUyAoMHgzRjw8MCkKQEAgLTE5NTUsMTEgKzE5MjUsMTEgQEAKICNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NXUl9GTEdfU0hJRlQgNwogCXU4IGlwX2hsZW47CiAJczggY3Nfb2Zmc2V0OwotCXUxNiB0b3RhbF9obGVuOwotCXUxNiBsc29fbXNzOwotCXUxNiB0Y3BfcHNldWRvX2NzdW07Ci0JdTE2IGlwX2lkOwotCXUzMiB0Y3Bfc2VuZF9zZXE7CisJX19sZTE2IHRvdGFsX2hsZW47CisJX19sZTE2IGxzb19tc3M7CisJX19sZTE2IHRjcF9wc2V1ZG9fY3N1bTsKKwlfX2xlMTYgaXBfaWQ7CisJX19sZTMyIHRjcF9zZW5kX3NlcTsKIH07CiAKIC8qCkBAIC0yMDc1LDQ0ICsyMDQ1LDQ0IEBACiAgKiB1c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiB4c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB4c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19YU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiB0c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKLQl1MTYgc3RhdHVzX2Jsb2NrX2luZGV4OworCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCkBAIC0yMTMxLDIyICsyMTAxLDIyIEBACiAgKiB1c3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCB1c3Rvcm1fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCiAgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107CisJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwogCXU4IHN0YXR1c19ibG9ja19pZDsKLQl1MzIgX19mbGFnczsKKwlfX2xlMzIgX19mbGFnczsKIH07CiAKIC8qCkBAIC0yMTYyLDkgKzIxMzIsOSBAQAogICogVGhlIGRhdGEgZm9yIFJTUyBzZXR1cCByYW1yb2QKICAqLwogc3RydWN0IGV0aF9jbGllbnRfc2V0dXBfcmFtcm9kX2RhdGEgewotCXUzMiBjbGllbnRfaWRfNWI7Ci0JdTggaXNfcmRtYV8xYjsKLQl1OCByZXNlcnZlZDA7CisJdTMyIGNsaWVudF9pZDsKKwl1OCBpc19yZG1hOworCXU4IGlzX2Zjb2U7CiAJdTE2IHJlc2VydmVkMTsKIH07CiAKQEAgLTIyMTIsMTIgKzIxODIsMTIgQEAKICNkZWZpbmUgRVRIX0ZBU1RfUEFUSF9SWF9DUUVfTDRfWFNVTV9OT19WQUxJREFUSU9OX0ZMR19TSElGVCA3CiAJdTggcGxhY2VtZW50X29mZnNldDsKIAl1OCBxdWV1ZV9pbmRleDsKLQl1MzIgcnNzX2hhc2hfcmVzdWx0OwotCXUxNiB2bGFuX3RhZzsKLQl1MTYgcGt0X2xlbjsKLQl1MTYgbGVuX29uX2JkOworCV9fbGUzMiByc3NfaGFzaF9yZXN1bHQ7CisJX19sZTE2IHZsYW5fdGFnOworCV9fbGUxNiBwa3RfbGVuOworCV9fbGUxNiBsZW5fb25fYmQ7CiAJc3RydWN0IHBhcnNpbmdfZmxhZ3MgcGFyc19mbGFnczsKLQl1MTYgc2dsWzhdOworCV9fbGUxNiBzZ2xbOF07CiB9OwogCiAKQEAgLTIyMjUsNyArMjE5NSw3IEBACiAgKiBUaGUgZGF0YSBmb3IgUlNTIHNldHVwIHJhbXJvZAogICovCiBzdHJ1Y3QgZXRoX2hhbHRfcmFtcm9kX2RhdGEgewotCXUzMiBjbGllbnRfaWRfNWI7CisJdTMyIGNsaWVudF9pZDsKIAl1MzIgcmVzZXJ2ZWQwOwogfTsKIApAQCAtMjIzNiwxMSArMjIwNiwxMSBAQAogc3RydWN0IGV0aF9xdWVyeV9yYW1yb2RfZGF0YSB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTggcmVzZXJ2ZWQwOwotCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCBjb2xsZWN0X3BvcnQ7CiAJdTE2IGRydl9jb3VudGVyOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGRydl9jb3VudGVyOwotCXU4IGNvbGxlY3RfcG9ydF8xYjsKKwl1OCBjb2xsZWN0X3BvcnQ7CiAJdTggcmVzZXJ2ZWQwOwogI2VuZGlmCiAJdTMyIGN0cl9pZF92ZWN0b3I7CkBAIC0yMjUxLDggKzIyMjEsOCBAQAogICogUGxhY2UgaG9sZGVyIGZvciByYW1yb2RzIHByb3RvY29sIHNwZWNpZmljIGRhdGEKICAqLwogc3RydWN0IHJhbXJvZF9kYXRhIHsKLQl1MzIgZGF0YV9sbzsKLQl1MzIgZGF0YV9oaTsKKwlfX2xlMzIgZGF0YV9sbzsKKwlfX2xlMzIgZGF0YV9oaTsKIH07CiAKIC8qCkBAIC0yMjY0LDE2ICsyMjM0LDYgQEAKIAogCiAvKgotICogUnggTGFzdCBCRCBpbiBwYWdlIChpbiBFVEgpCi0gKi8KLXN0cnVjdCBldGhfcnhfYmRfbmV4dF9wYWdlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1OCByZXNlcnZlZFs4XTsKLX07Ci0KLQotLyoKICAqIEV0aCBSeCBDcWUgc3RydWN0dXJlLSBnZW5lcmFsIHN0cnVjdHVyZSBmb3IgcmFtcm9kcwogICovCiBzdHJ1Y3QgY29tbW9uX3JhbXJvZF9ldGhfcnhfY3FlIHsKQEAgLTIyODIsMjQgKzIyNDIsMjQgQEAKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1RZUEVfU0hJRlQgMAogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwICgweDdGPDwxKQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDEKLQl1OCBjb25uX3R5cGVfM2I7Ci0JdTE2IHJlc2VydmVkMTsKLQl1MzIgY29ubl9hbmRfY21kX2RhdGE7CisJdTggY29ubl90eXBlOworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ0lEICgweEZGRkZGRjw8MCkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NJRF9TSElGVCAwCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ01EX0lEX1NISUZUIDI0CiAJc3RydWN0IHJhbXJvZF9kYXRhIHByb3RvY29sX2RhdGE7Ci0JdTMyIHJlc2VydmVkMls0XTsKKwlfX2xlMzIgcmVzZXJ2ZWQyWzRdOwogfTsKIAogLyoKICAqIFJ4IExhc3QgQ1FFIGluIHBhZ2UgKGluIEVUSCkKICAqLwogc3RydWN0IGV0aF9yeF9jcWVfbmV4dF9wYWdlIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1MzIgcmVzZXJ2ZWRbNl07CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CisJX19sZTMyIHJlc2VydmVkWzZdOwogfTsKIAogLyoKQEAgLTIzMTYsMTcgKzIyNzYsMTcgQEAKICAqIGNvbW1vbiBkYXRhIGZvciBhbGwgcHJvdG9jb2xzCiAgKi8KIHN0cnVjdCBzcGVfaGRyIHsKLQl1MzIgY29ubl9hbmRfY21kX2RhdGE7CisJX19sZTMyIGNvbm5fYW5kX2NtZF9kYXRhOwogI2RlZmluZSBTUEVfSERSX0NJRCAoMHhGRkZGRkY8PDApCiAjZGVmaW5lIFNQRV9IRFJfQ0lEX1NISUZUIDAKICNkZWZpbmUgU1BFX0hEUl9DTURfSUQgKDB4RkY8PDI0KQogI2RlZmluZSBTUEVfSERSX0NNRF9JRF9TSElGVCAyNAotCXUxNiB0eXBlOworCV9fbGUxNiB0eXBlOwogI2RlZmluZSBTUEVfSERSX0NPTk5fVFlQRSAoMHhGRjw8MCkKICNkZWZpbmUgU1BFX0hEUl9DT05OX1RZUEVfU0hJRlQgMAogI2RlZmluZSBTUEVfSERSX0NPTU1PTl9SQU1ST0QgKDB4RkY8PDgpCiAjZGVmaW5lIFNQRV9IRFJfQ09NTU9OX1JBTVJPRF9TSElGVCA4Ci0JdTE2IHJlc2VydmVkOworCV9fbGUxNiByZXNlcnZlZDsKIH07CiAKIC8qCkBAIC0yMzU1LDkgKzIzMTUsOSBAQAogICogZG9vcmJlbGwgZGF0YSBpbiBob3N0IG1lbW9yeQogICovCiBzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgewotCXUzMiBwYWNrZXRzX3Byb2Q7Ci0JdTE2IGJkc19wcm9kOwotCXUxNiByZXNlcnZlZDsKKwlfX2xlMzIgcGFja2V0c19wcm9kOworCV9fbGUxNiBiZHNfcHJvZDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9OwogCiAKQEAgLTIzNzcsMTQgKzIzMzcsMTYgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFlfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUgKDB4MTw8NCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEVfU0hJRlQgNAotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERSAoMHg3PDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA4CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU0gKDB4MTw8OSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTV9TSElGVCA5CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRjw8MTApCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMAogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGNvbmZpZ19mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgKDB4MTw8MCkKQEAgLTIzOTUsMTQgKzIzNTcsMTYgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X0NBUEFCSUxJVFlfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZX1NISUZUIDMKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUgKDB4MTw8NCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEVfU0hJRlQgNAotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDYpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA2Ci0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRkY8PDcpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERSAoMHg3PDw0KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREVfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfREVGQVVMVF9FTkFCTEUgKDB4MTw8NykKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTV9TSElGVCA4CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU0gKDB4MTw8OSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTV9TSElGVCA5CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgzRjw8MTApCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMAogCXU4IHJzc19yZXN1bHRfbWFzazsKIAl1OCBsZWFkaW5nX2NsaWVudF9pZDsKICNlbmRpZgpAQCAtMjQyMiw3ICsyMzg2LDcgQEAKICAqIE1BQyBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiBjb21tYW5kIGhlYWRlcgogICovCiBzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25faGRyIHsKLQl1OCBsZW5ndGhfNmI7CisJdTggbGVuZ3RoOwogCXU4IG9mZnNldDsKIAl1MTYgY2xpZW50X2lkOwogCXUzMiByZXNlcnZlZDE7CkBAIC0yNDMyLDEwICsyMzk2LDEwIEBACiAgKiBNQUMgYWRkcmVzcyBpbiBsaXN0IGZvciByYW1yb2QKICAqLwogc3RydWN0IHRzdG9ybV9jYW1fZW50cnkgewotCXUxNiBsc2JfbWFjX2FkZHI7Ci0JdTE2IG1pZGRsZV9tYWNfYWRkcjsKLQl1MTYgbXNiX21hY19hZGRyOwotCXUxNiBmbGFnczsKKwlfX2xlMTYgbHNiX21hY19hZGRyOworCV9fbGUxNiBtaWRkbGVfbWFjX2FkZHI7CisJX19sZTE2IG1zYl9tYWNfYWRkcjsKKwlfX2xlMTYgZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9DQU1fRU5UUllfUE9SVF9JRCAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1BPUlRfSURfU0hJRlQgMAogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1JTUlZWQUwwICgweDc8PDEpCkBAIC0yNDg0LDExICsyNDQ4LDExIEBACiAgKiBNQUMgYWRkcmVzcyBpbiBsaXN0IGZvciByYW1yb2QKICAqLwogc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2VudHJ5X2UxaCB7Ci0JdTE2IGxzYl9tYWNfYWRkcjsKLQl1MTYgbWlkZGxlX21hY19hZGRyOwotCXUxNiBtc2JfbWFjX2FkZHI7Ci0JdTE2IHZsYW5faWQ7Ci0JdTE2IGUxaG92X2lkOworCV9fbGUxNiBsc2JfbWFjX2FkZHI7CisJX19sZTE2IG1pZGRsZV9tYWNfYWRkcjsKKwlfX2xlMTYgbXNiX21hY19hZGRyOworCV9fbGUxNiB2bGFuX2lkOworCV9fbGUxNiBlMWhvdl9pZDsKIAl1OCBjbGllbnRfaWQ7CiAJdTggZmxhZ3M7CiAjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9QT1JUICgweDE8PDApCkBAIC0yNTQ0LDI0ICsyNTA4LDI4IEBACiAjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMSAoMHhGRkY8PDQpCiAjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMV9TSElGVCA0CiAJdTE2IGNvbmZpZ19mbGFnczsKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEUgKDB4MTw8MCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEVfU0hJRlQgMAotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDEKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwyKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDIKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweDFGRkY8PDMpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAzCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEUgKDB4MTw8MCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRV9TSElGVCAwCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFICgweDE8PDEpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFX1NISUZUIDEKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDIpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAyCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHhGRkY8PDQpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgY29uZmlnX2ZsYWdzOwotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRSAoMHgxPDwwKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1PVkFMX0VOQUJMRV9TSElGVCAwCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwxKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDIpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMgotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4MUZGRjw8MykKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDMKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRSAoMHgxPDwwKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFX1NISUZUIDAKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEUgKDB4MTw8MSkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEVfU0hJRlQgMQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MikKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKIAl1MTYgZHJvcF9mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX0lQX0NTX0VSUl9TSElGVCAwCkBAIC0yNTk0LDI4ICsyNTYyLDcgQEAKIAogCiAvKgotICogVGhyZWUgUlggcHJvZHVjZXJzIGZvciBFVEgKLSAqLwotc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgYmRfcHJvZDsKLQl1MTYgY3FlX3Byb2Q7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgY3FlX3Byb2Q7Ci0JdTE2IGJkX3Byb2Q7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTE2IHNnZV9wcm9kOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IHNnZV9wcm9kOwotCXUxNiByZXNlcnZlZDsKLSNlbmRpZgotfTsKLQotCi0vKgotICogY29tbW9uIGZsYWcgdG8gaW5kaWNhdGUgZXhpc3RlbmNlIG9mIFRQQS4KKyAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0YW5jZSBvZiBUUEEuCiAgKi8KIHN0cnVjdCB0c3Rvcm1fZXRoX3RwYV9leGlzdCB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCkBAIC0yNjMyLDIxICsyNTc5LDc5IEBACiAKIAogLyoKKyAqIHJ4IHJpbmdzIHBhdXNlIGRhdGEgZm9yIEUxaCBvbmx5CisgKi8KK3N0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfdGhyX2xvdzsKKwl1MTYgY3FlX3Rocl9sb3c7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Rocl9sb3c7CisJdTE2IGJkX3Rocl9sb3c7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgY29zOworCXUxNiBzZ2VfdGhyX2xvdzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfdGhyX2xvdzsKKwl1MTYgY29zOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX3Rocl9oaWdoOworCXUxNiBjcWVfdGhyX2hpZ2g7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Rocl9oaWdoOworCXUxNiBiZF90aHJfaGlnaDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByZXNlcnZlZDA7CisJdTE2IHNnZV90aHJfaGlnaDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfdGhyX2hpZ2g7CisJdTE2IHJlc2VydmVkMDsKKyNlbmRpZgorfTsKKworCisvKgorICogVGhyZWUgUlggcHJvZHVjZXJzIGZvciBFVEgKKyAqLworc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgYmRfcHJvZDsKKwl1MTYgY3FlX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FlX3Byb2Q7CisJdTE2IGJkX3Byb2Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcmVzZXJ2ZWQ7CisJdTE2IHNnZV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHNnZV9wcm9kOworCXUxNiByZXNlcnZlZDsKKyNlbmRpZgorfTsKKworCisvKgogICogcGVyLXBvcnQgU0FGQyBkZW1vIHZhcmlhYmxlcwogICovCiBzdHJ1Y3QgY21uZ19mbGFnc19wZXJfcG9ydCB7CiAJdTggY29uX251bWJlcltOVU1fT0ZfUFJPVE9DT0xTXTsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1OCBmYWlybmVzc19lbmFibGU7Ci0JdTggcmF0ZV9zaGFwaW5nX2VuYWJsZTsKLQl1OCBjbW5nX3Byb3RvY29sX2VuYWJsZTsKLQl1OCBjbW5nX3ZuX2VuYWJsZTsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXU4IGNtbmdfdm5fZW5hYmxlOwotCXU4IGNtbmdfcHJvdG9jb2xfZW5hYmxlOwotCXU4IHJhdGVfc2hhcGluZ19lbmFibGU7Ci0JdTggZmFpcm5lc3NfZW5hYmxlOwotI2VuZGlmCisJdTMyIGNtbmdfZW5hYmxlczsKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTiAoMHgxPDwwKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOX1NISUZUIDAKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk4gKDB4MTw8MSkKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk5fU0hJRlQgMQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1BST1RPQ09MICgweDE8PDIpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfUFJPVE9DT0xfU0hJRlQgMgorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19QUk9UT0NPTCAoMHgxPDwzKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19QUk9UT0NPTF9TSElGVCAzCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfQ09TICgweDE8PDQpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfQ09TX1NISUZUIDQKKyNkZWZpbmUgX19DTU5HX0ZMQUdTX1BFUl9QT1JUX1JFU0VSVkVEMCAoMHg3RkZGRkZGPDw1KQorI2RlZmluZSBfX0NNTkdfRkxBR1NfUEVSX1BPUlRfUkVTRVJWRUQwX1NISUZUIDUKIH07CiAKIApAQCAtMjY3NCwxNSArMjY3OSwxNSBAQAogICovCiBzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBfX3Jlc2VydmVkMDsKLQl1OCBjdXJfY29zX3R5cGVzOworCXUxNiBfX3Jlc2VydmVkMTsKKwl1OCBfX3Jlc2VydmVkMDsKIAl1OCBzYWZjX3RpbWVvdXRfdXNlYzsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXU4IHNhZmNfdGltZW91dF91c2VjOwotCXU4IGN1cl9jb3NfdHlwZXM7Ci0JdTE2IF9fcmVzZXJ2ZWQwOworCXU4IF9fcmVzZXJ2ZWQwOworCXUxNiBfX3Jlc2VydmVkMTsKICNlbmRpZgotCXU4IGNvc190b19wcm90b2NvbFtNQVhfQ09TX05VTUJFUl07CisJdTE2IGNvc190b19wYXVzZV9tYXNrW05VTV9PRl9TQUZDX0JJVFNdOwogfTsKIAogCkBAIC0yNzAyLDE2ICsyNzA3LDE2IEBACiAgKi8KIHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyB7CiAJc3RydWN0IHJlZ3BhaXIgdG90YWxfc2VudF9ieXRlczsKLQl1MzIgdG90YWxfc2VudF9wa3RzOwotCXUzMiB1bmljYXN0X3BrdHNfc2VudDsKKwlfX2xlMzIgdG90YWxfc2VudF9wa3RzOworCV9fbGUzMiB1bmljYXN0X3BrdHNfc2VudDsKIAlzdHJ1Y3QgcmVncGFpciB1bmljYXN0X2J5dGVzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgbXVsdGljYXN0X2J5dGVzX3NlbnQ7Ci0JdTMyIG11bHRpY2FzdF9wa3RzX3NlbnQ7Ci0JdTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIG11bHRpY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgYnJvYWRjYXN0X2J5dGVzX3NlbnQ7Ci0JdTE2IHN0YXRzX2NvdW50ZXI7Ci0JdTE2IHJlc2VydmVkMDsKLQl1MzIgcmVzZXJ2ZWQxOworCV9fbGUxNiBzdGF0c19jb3VudGVyOworCV9fbGUxNiByZXNlcnZlZDA7CisJX19sZTMyIHJlc2VydmVkMTsKIH07CiAKIApAQCAtMjcyNywxMCArMjczMiwxMCBAQAogICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBUc3Rvcm0gKHBlciBwb3J0KQogICovCiBzdHJ1Y3QgdHN0b3JtX3Blcl9wb3J0X3N0YXRzIHsKLQl1MzIgbWFjX2ZpbHRlcl9kaXNjYXJkOwotCXUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7Ci0JdTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOwotCXUzMiBtYWNfZGlzY2FyZDsKKwlfX2xlMzIgbWFjX2ZpbHRlcl9kaXNjYXJkOworCV9fbGUzMiB4eG92ZXJmbG93X2Rpc2NhcmQ7CisJX19sZTMyIGJyYl90cnVuY2F0ZV9kaXNjYXJkOworCV9fbGUzMiBtYWNfZGlzY2FyZDsKIH07CiAKIApAQCAtMjc0MywxNyArMjc0OCwxNyBAQAogCXN0cnVjdCByZWdwYWlyIHJjdl9icm9hZGNhc3RfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X211bHRpY2FzdF9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfZXJyb3JfYnl0ZXM7Ci0JdTMyIGNoZWNrc3VtX2Rpc2NhcmQ7Ci0JdTMyIHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkOwotCXUzMiB0b3RhbF9yY3ZfcGt0czsKLQl1MzIgcmN2X3VuaWNhc3RfcGt0czsKLQl1MzIgcmN2X2Jyb2FkY2FzdF9wa3RzOwotCXUzMiByY3ZfbXVsdGljYXN0X3BrdHM7Ci0JdTMyIG5vX2J1ZmZfZGlzY2FyZDsKLQl1MzIgdHRsMF9kaXNjYXJkOwotCXUxNiBzdGF0c19jb3VudGVyOwotCXUxNiByZXNlcnZlZDA7Ci0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMzIgY2hlY2tzdW1fZGlzY2FyZDsKKwlfX2xlMzIgcGFja2V0c190b29fYmlnX2Rpc2NhcmQ7CisJX19sZTMyIHRvdGFsX3Jjdl9wa3RzOworCV9fbGUzMiByY3ZfdW5pY2FzdF9wa3RzOworCV9fbGUzMiByY3ZfYnJvYWRjYXN0X3BrdHM7CisJX19sZTMyIHJjdl9tdWx0aWNhc3RfcGt0czsKKwlfX2xlMzIgbm9fYnVmZl9kaXNjYXJkOworCV9fbGUzMiB0dGwwX2Rpc2NhcmQ7CisJX19sZTE2IHN0YXRzX2NvdW50ZXI7CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfTsKIAogLyoKQEAgLTI3NjUsMTEgKzI3NzAsMzMgQEAKIH07CiAKIC8qCisgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFVzdG9ybSAocGVyIGNsaWVudCkKKyAqLworc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIHsKKwlzdHJ1Y3QgcmVncGFpciB1Y2FzdF9ub19idWZmX2J5dGVzOworCXN0cnVjdCByZWdwYWlyIG1jYXN0X25vX2J1ZmZfYnl0ZXM7CisJc3RydWN0IHJlZ3BhaXIgYmNhc3Rfbm9fYnVmZl9ieXRlczsKKwlfX2xlMzIgdWNhc3Rfbm9fYnVmZl9wa3RzOworCV9fbGUzMiBtY2FzdF9ub19idWZmX3BrdHM7CisJX19sZTMyIGJjYXN0X25vX2J1ZmZfcGt0czsKKwlfX2xlMTYgc3RhdHNfY291bnRlcjsKKwlfX2xlMTYgcmVzZXJ2ZWQwOworfTsKKworLyoKKyAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVXN0b3JtCisgKi8KK3N0cnVjdCB1c3Rvcm1fY29tbW9uX3N0YXRzIHsKKyBzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgY2xpZW50X3N0YXRpc3RpY3NbTUFYX1VfU1RBVF9DT1VOVEVSX0lEXTsKK307CisKKy8qCiAgKiBFdGggc3RhdGlzdGljcyBxdWVyeSBzdHJ1Y3R1cmUgZm9yIHRoZSBldGhfc3RhdHNfcXVlcnkgcmFtcm9kCiAgKi8KIHN0cnVjdCBldGhfc3RhdHNfcXVlcnkgewogCXN0cnVjdCB4c3Rvcm1fY29tbW9uX3N0YXRzIHhzdG9ybV9jb21tb247CiAJc3RydWN0IHRzdG9ybV9jb21tb25fc3RhdHMgdHN0b3JtX2NvbW1vbjsKKwlzdHJ1Y3QgdXN0b3JtX2NvbW1vbl9zdGF0cyB1c3Rvcm1fY29tbW9uOwogfTsKIAogCkBAIC0yNzc3LDYgKzI4MDQsNyBAQAogICogcGVyLXZuaWMgZmFpcm5lc3MgdmFyaWFibGVzCiAgKi8KIHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biB7CisJdTMyIGNvc19jcmVkaXRfZGVsdGFbTUFYX0NPU19OVU1CRVJdOwogCXUzMiBwcm90b2NvbF9jcmVkaXRfZGVsdGFbTlVNX09GX1BST1RPQ09MU107CiAJdTMyIHZuX2NyZWRpdF9kZWx0YTsKIAl1MzIgX19yZXNlcnZlZDA7CkBAIC0yNzg4LDEzICsyODE2LDE1IEBACiAgKi8KIHN0cnVjdCBmd192ZXJzaW9uIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgcGF0Y2g7Ci0JdTggcHJpbWFyeTsKLQl1OCBjbGllbnQ7CisJdTggZW5naW5lZXJpbmc7CisJdTggcmV2aXNpb247CisJdTggbWlub3I7CisJdTggbWFqb3I7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1OCBjbGllbnQ7Ci0JdTggcHJpbWFyeTsKLQl1MTYgcGF0Y2g7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcmV2aXNpb247CisJdTggZW5naW5lZXJpbmc7CiAjZW5kaWYKIAl1MzIgZmxhZ3M7CiAjZGVmaW5lIEZXX1ZFUlNJT05fT1BUSU1JWkVEICgweDE8PDApCkBAIC0yODEyLDkgKzI4NDIsMTAgQEAKICAqIEZXIHZlcnNpb24gc3RvcmVkIGluIGZpcnN0IGxpbmUgb2YgcHJhbQogICovCiBzdHJ1Y3QgcHJhbV9md192ZXJzaW9uIHsKLQl1OCBjbGllbnQ7Ci0JdTggcHJpbWFyeTsKLQl1MTYgcGF0Y2g7CisJdTggbWFqb3I7CisJdTggbWlub3I7CisJdTggcmV2aXNpb247CisJdTggZW5naW5lZXJpbmc7CiAJdTggZmxhZ3M7CiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9PUFRJTUlaRUQgKDB4MTw8MCkKICNkZWZpbmUgUFJBTV9GV19WRVJTSU9OX09QVElNSVpFRF9TSElGVCAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKaW5kZXggM2IwYzI0OS4uMzliYTI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2luaXQuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDEyICsyMiwxNSBAQAogI2RlZmluZSBJTklUX0FTSUMJCQkweDQKICNkZWZpbmUgSU5JVF9IQVJEV0FSRQkJCTB4NwogCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkoMHg1ODAwIC8gNCkKLSNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkoMHgxMDAwMCAvIDQpCi0jZGVmaW5lIFRTVE9STV9JTlRNRU1fQUREUgkJMHgxYTAwMDAKLSNkZWZpbmUgQ1NUT1JNX0lOVE1FTV9BRERSCQkweDIyMDAwMAotI2RlZmluZSBYU1RPUk1fSU5UTUVNX0FERFIJCTB4MmEwMDAwCi0jZGVmaW5lIFVTVE9STV9JTlRNRU1fQUREUgkJMHgzMjAwMDAKKyNkZWZpbmUgVFNUT1JNX0lOVE1FTV9BRERSCQlUU0VNX1JFR19GQVNUX01FTU9SWQorI2RlZmluZSBDU1RPUk1fSU5UTUVNX0FERFIJCUNTRU1fUkVHX0ZBU1RfTUVNT1JZCisjZGVmaW5lIFhTVE9STV9JTlRNRU1fQUREUgkJWFNFTV9SRUdfRkFTVF9NRU1PUlkKKyNkZWZpbmUgVVNUT1JNX0lOVE1FTV9BRERSCQlVU0VNX1JFR19GQVNUX01FTU9SWQorLyogUkFNMCBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkweDU4MDAKKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkweDEwMDAwCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFKGJwKQkoKENISVBfSVNfRTFIKGJwKSA/IFNUT1JNX0lOVE1FTV9TSVpFX0UxSCA6IFwKKwkJCQkJCSAgICBTVE9STV9JTlRNRU1fU0laRV9FMSkgLyA0KQogCiAKIC8qIEluaXQgb3BlcmF0aW9uIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzICovCkBAIC0xNjcsMjEgKzE3MCwyNCBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ZpbGwoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGludCBmaWxsLCB1MzIgbGVuKQogewotCWlmICgobGVuICogNCkgPiBGV19CVUZfU0laRSkgewotCQlCTlgyWF9FUlIoIkxBUkdFIERNQUUgT1BFUkFUSU9OICEgYWRkciAweCV4ICBsZW4gMHgleFxuIiwKLQkJCSAgYWRkciwgbGVuKjQpOwotCQlyZXR1cm47Ci0JfQotCW1lbXNldChicC0+Z3VuemlwX2J1ZiwgZmlsbCwgbGVuICogNCk7CisJdTMyIGJ1Zl9sZW4gPSAoKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSA/IEZXX0JVRl9TSVpFIDogKGxlbiAqIDQpKTsKKwl1MzIgYnVmX2xlbjMyID0gYnVmX2xlbiAvIDQ7CisJaW50IGk7CiAKLQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyLCBsZW4pOworCW1lbXNldChicC0+Z3VuemlwX2J1ZiwgZmlsbCwgYnVmX2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IGJ1Zl9sZW4zMikgeworCQl1MzIgY3VyX2xlbiA9IG1pbihidWZfbGVuMzIsIGxlbiAtIGkpOworCisJCWJueDJ4X3dyaXRlX2JpZ19idWYoYnAsIGFkZHIgKyBpICogNCwgY3VyX2xlbik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3dyXzY0KHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBsZW42NCkKIHsKLQl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUvNDsKLQl1MzIgbGVuID0gbGVuNjQqMjsKKwl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUgLyA0OworCXUzMiBsZW4gPSBsZW42NCAqIDI7CiAJdTY0IGRhdGE2NCA9IDA7CiAJaW50IGk7CiAKQEAgLTI3MCw2ICsyNzYsOSBAQAogCQlyYyA9IGJueDJ4X2d1bnppcChicCwgKHU4ICopZGF0YSwgbGVuKTsKIAkJaWYgKHJjKSB7CiAJCQlCTlgyWF9FUlIoImd1bnppcCBmYWlsZWQgISByYyAlZFxuIiwgcmMpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJa2ZyZWUodGVtcCk7CisjZW5kaWYKIAkJCXJldHVybjsKIAkJfQogCQlsZW4gPSBicC0+Z3VuemlwX291dGxlbjsKQEAgLTQyMiw1NyArNDMxLDU3IEBACiAKIC8qIGRlcml2ZWQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCByZWFkIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgcmVhZF9hcmJfZGF0YVtOVU1fUkRfUV1bTUFYX1JEX09SRCArIDFdID0gewotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0sIHs2NCAsIDY0ICwgNDF9IH0sCi0Je3s0ICwgOCAsIDR9LCAgIHs0ICwgOCAsIDR9LCAgICB7NCAsIDggLCA0fSwgICAgezQgLCA4ICwgNH0gfSwKLQl7ezQgLCAzICwgM30sICAgezQgLCAzICwgM30sICAgIHs0ICwgMyAsIDN9LCAgICB7NCAsIDMgLCAzfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezE2ICwgMyAsIDExfSwgIHsxNiAsIDMgLCAxMX0gfSwKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCAyNX0sIHszMiAsIDY0ICwgMjV9LCB7NjQgLCA2NCAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7NjQgLCAzICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezY0ICwgMyAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgNDF9LCB7MzIgLCA2NCAsIDgxfSwgezY0ICwgNjQgLCAxMjB9IH0KKy8qIDEgKi8JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0sIHs2NCwgNjQsIDQxfSB9LAorCXsgezQsIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0sICB7NCwgIDgsICA0fSAgfSwKKwl7IHs0LCAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9LCAgezQsICAzLCAgM30gIH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0sIHsxNiwgMywgIDExfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisvKiAxMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKy8qIDIwICoveyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0sIHs2NCwgNjQsIDEyMH0gfQogfTsKIAogLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHdyaXRlIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2RhdGFbTlVNX1dSX1FdW01BWF9XUl9PUkQgKyAxXSA9IHsKLQl7ezQgLCA2ICwgM30sICAgezQgLCA2ICwgM30sICAgIHs0ICwgNiAsIDN9IH0sCi0Je3s0ICwgMiAsIDN9LCAgIHs0ICwgMiAsIDN9LCAgICB7NCAsIDIgLCAzfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezE2ICwgMiAsIDExfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDIgLCA2fSwgICB7MTYgLCAyICwgMTF9LCAgezMyICwgMiAsIDIxfSB9LAotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDI1fSwgezMyICwgNjQgLCAyNX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCA5ICwgNn0sICAgezE2ICwgOSAsIDExfSwgIHszMiAsIDkgLCAyMX0gfSwKLQl7ezggLCA0NyAsIDE5fSwgezE2ICwgNDcgLCAxOX0sIHszMiAsIDQ3ICwgMjF9IH0sCi0Je3s4ICwgOSAsIDZ9LCAgIHsxNiAsIDkgLCAxMX0sICB7MTYgLCA5ICwgMTF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgNDF9LCB7MzIgLCA2NCAsIDgxfSB9CisvKiAxICovCXsgezQsIDYsICAzfSwgIHs0LCAgNiwgIDN9LCAgezQsICA2LCAgM30gfSwKKwl7IHs0LCAyLCAgM30sICB7NCwgIDIsICAzfSwgIHs0LCAgMiwgIDN9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKy8qIDEwICoveyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MzIsIDksICAyMX0gfSwKKwl7IHs4LCA0NywgMTl9LCB7MTYsIDQ3LCAxOX0sIHszMiwgNDcsIDIxfSB9LAorCXsgezgsIDksICA2fSwgIHsxNiwgOSwgIDExfSwgezE2LCA5LCAgMTF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0gfQogfTsKIAogLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciByZWFkIHF1ZXVlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9hZGRyW05VTV9SRF9RLTFdID0gewotCXtQWFAyX1JFR19SUV9CV19SRF9MMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMCwKKy8qIDEgKi8Je1BYUDJfUkVHX1JRX0JXX1JEX0wwLCBQWFAyX1JFR19SUV9CV19SRF9BREQwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQwfSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMX0sCkBAIC00OTAsNyArNDk5LDcgQEAKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUI3fSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDgsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOH0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAorLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDksIFBYUDJfUkVHX1BTV1JRX0JXX0FERDksCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOX0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wxMCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTAsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LApAQCAtNTEwLDcgKzUxOSw3IEBACiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE3fSwKIAl7UFhQMl9SRUdfUlFfQldfUkRfTDE4LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOCwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTh9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTksIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE5LAorLyogMjAgKi97UFhQMl9SRUdfUlFfQldfUkRfTDE5LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOSwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTl9LAogCXtQWFAyX1JFR19SUV9CV19SRF9MMjAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIwLAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMH0sCkBAIC01MzIsNyArNTQxLDcgQEAKIAogLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciB3cml0ZSBxdWV1ZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2FkZHJbTlVNX1dSX1EtMV0gPSB7Ci0Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAorLyogMSAqLwl7UFhQMl9SRUdfUFNXUlFfQldfTDEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMX0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wyLCBQWFAyX1JFR19QU1dSUV9CV19BREQyLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjJ9LApAQCAtNTUwLDcgKzU1OSw3IEBACiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MMTEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDExLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjExfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDI4LCBQWFAyX1JFR19QU1dSUV9CV19BREQyOCwKKy8qIDEwICove1BYUDJfUkVHX1BTV1JRX0JXX0wyOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMjgsCiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMjh9LAogCXtQWFAyX1JFR19SUV9CV19XUl9MMjksIFBYUDJfUkVHX1JRX0JXX1dSX0FERDI5LAogCQlQWFAyX1JFR19SUV9CV19XUl9VQk9VTkQyOX0sCkBAIC01NjgsNyArNTc3LDEyIEBACiAJCQkgICAgIGJwLT5wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMLCAmZGV2Y3RsKTsKIAlEUChORVRJRl9NU0dfSFcsICJyZWFkIDB4JXggZnJvbSBkZXZjdGxcbiIsIGRldmN0bCk7CiAJd19vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNSk7Ci0Jcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CisJaWYgKGJwLT5tcnJzID09IC0xKQorCQlyX29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEpID4+IDEyKTsKKwllbHNlIHsKKwkJRFAoTkVUSUZfTVNHX0hXLCAiZm9yY2UgcmVhZCBvcmRlciB0byAlZFxuIiwgYnAtPm1ycnMpOworCQlyX29yZGVyID0gYnAtPm1ycnM7CisJfQogCiAJaWYgKHJfb3JkZXIgPiBNQVhfUkRfT1JEKSB7CiAJCURQKE5FVElGX01TR19IVywgInJlYWQgb3JkZXIgb2YgJWQgIG9yZGVyIGFkanVzdGVkIHRvICVkXG4iLApAQCAtNjQzLDE3ICs2NTcsMTggQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1EUF9USCwgKDB4MTggPDwgd19vcmRlcikpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9YU0RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9RTV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVE1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1NSQ19NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfREJHX01QUywgd19vcmRlcisxKTsKKwkJdmFsID0gKCh3X29yZGVyID09IDApID8gMiA6IDMpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9UU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9YU0RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9RTV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVE1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1NSQ19NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfREJHX01QUywgdmFsKTsKIAkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9ETUFFX01QUywgMik7IC8qIERNQUUgaXMgc3BlY2lhbCAqLwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0NEVV9NUFMsIHdfb3JkZXIrMSk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ0RVX01QUywgdmFsKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCmluZGV4IDk3NTViZjYuLjFmMjJjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaApAQCAtMSw3ICsxLDIzIEBACiAjaWZuZGVmIF9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fCiAjZGVmaW5lIF9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fCiAKLS8qIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGxpc3Qgb2Ygb3BlcmF0aW9ucyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcC4KKy8qIGJueDJ4X2luaXRfdmFsdWVzLmg6IEJyb2FkY29tIE5YMiAxMEcgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGV4Y2VwdCBhcyBub3RlZCBiZWxvdy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICoKKyAqCisgKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGluaXRpYWxpemUgdGhlIGNoaXAuCiAgKgogICogRm9yIGVhY2ggYmxvY2sgaW4gdGhlIGNoaXAgdGhlcmUgYXJlIHRocmVlIGluaXQgc3RhZ2VzOgogICogY29tbW9uIC0gSFcgdXNlZCBieSBib3RoIHBvcnRzLApAQCAtNDcsMTIgKzYzLDE2IEBACiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMSwgMHgxMDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMiwgMHgyMDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMywgMHgzMDEwMDAwMH0sCi0Je09QX1pSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80LCAweDQwMTAwMDAwfSwKKwl7T1BfWlJfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNSwgMHgzfSwKIAl7T1BfV1IsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8wLCAweDEwMDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMSwgMHgxMjE0MDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMiwgMHgyMjE0MDAwMH0sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMywgMHgzMjE0MDAwMH0sCi0Je09QX1pSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDR9LAorCXtPUF9XUl9FMUgsIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80LCAweDQyMTQwMDAwfSwKKwl7T1BfWlJfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNSwgMHgzfSwKIAl7T1BfUkQsIFBSU19SRUdfTlVNX09GX1BBQ0tFVFMsIDB4MH0sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9DRkNfRkxVU0hfTUVTU0FHRVMsIDB4MH0sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9UUkFOU1BBUkVOVF9GTFVTSF9NRVNTQUdFUywgMHgwfSwKQEAgLTcxLDE1ICs5MSwxNiBAQAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzEsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzIsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzMsIDB4M2Z9LAotCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzQsIDB4MH0sCisJe09QX1dSX0UxLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgwfSwKKwl7T1BfV1JfRTFILCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNCwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNSwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNiwgMHgzZn0sCiAJe09QX1dSLCBQUlNfUkVHX1BBQ0tFVF9SRUdJT05TX1RZUEVfNywgMHgzZn0sCi0jZGVmaW5lIFBSU19DT01NT05fRU5EICAgICAgICAgIDQ3Ci0jZGVmaW5lIFNSQ0hfQ09NTU9OX1NUQVJUICAgICAgIDQ3CisjZGVmaW5lIFBSU19DT01NT05fRU5EICAgICAgICAgIDUyCisjZGVmaW5lIFNSQ0hfQ09NTU9OX1NUQVJUICAgICAgIDUyCiAJe09QX1dSX0UxSCwgU1JDX1JFR19FMUhNRl9FTkFCTEUsIDB4MX0sCi0jZGVmaW5lIFNSQ0hfQ09NTU9OX0VORCAgICAgICAgIDQ4Ci0jZGVmaW5lIFRTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ4CisjZGVmaW5lIFNSQ0hfQ09NTU9OX0VORCAgICAgICAgIDUzCisjZGVmaW5lIFRTRE1fQ09NTU9OX1NUQVJUICAgICAgIDUzCiAJe09QX1dSX0UxLCBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDExfSwKIAl7T1BfV1JfRTFILCBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4MjExfSwKIAl7T1BfV1JfRTEsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NDAwfSwKQEAgLTkyLDEwICsxMTMsMTUgQEAKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDEsIDB4ZmZmZn0sCiAJe09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyLCAweGZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMywgMHhmZmZmfSwKLQl7T1BfWlIsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMCwgMHgyfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4MjB9LAorCXtPUF9XUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMSwgMHgwfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMiwgMHgzNH0sCiAJe09QX1dSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMsIDB4MzV9LAotCXtPUF9aUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDdjfSwKKwl7T1BfWlJfRTEsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg3Y30sCisJe09QX1pSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDFjfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX1RfMCwgMHgxfSwKKwl7T1BfWlJfRTFILCBUU0RNX1JFR19BR0dfSU5UX1RfMSwgMHg1Zn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX0lOMiwgMHgzZn0sCiAJe09QX1dSLCBUU0RNX1JFR19FTkFCTEVfT1VUMSwgMHg3ZmZmZmZmfSwKQEAgLTExOCw4ICsxNDQsOCBAQAogCXtPUF9XUl9BU0lDLCBUU0RNX1JFR19USU1FUl9USUNLLCAweDNlOH0sCiAJe09QX1dSX0VNVUwsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4MX0sCiAJe09QX1dSX0ZQR0EsIFRTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4YX0sCi0jZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDg2Ci0jZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDg2CisjZGVmaW5lIFRTRE1fQ09NTU9OX0VORCAgICAgICAgIDk2CisjZGVmaW5lIFRDTV9DT01NT05fU1RBUlQgICAgICAgIDk2CiAJe09QX1dSLCBUQ01fUkVHX1hYX01BWF9MTF9TWiwgMHgyMH0sCiAJe09QX1dSLCBUQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBUQ01fUkVHX1RRTV9UQ01fSERSX1AsIDB4MjE1MDAyMH0sCkBAIC0xMjksMTAgKzE1NSwxNiBAQAogCXtPUF9XUiwgVENNX1JFR19FUlJfRVZOVF9JRCwgMHgzM30sCiAJe09QX1dSLCBUQ01fUkVHX0VYUFJfRVZOVF9JRCwgMHgzMH0sCiAJe09QX1dSLCBUQ01fUkVHX1NUT1BfRVZOVF9JRCwgMHgzMX0sCi0Je09QX1dSLCBUQ01fUkVHX1BSU19XRUlHSFQsIDB4NH0sCi0Je09QX1dSLCBUQ01fUkVHX1BCRl9XRUlHSFQsIDB4NX0sCisJe09QX1dSLCBUQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFRDTV9SRUdfUFJTX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfUEJGX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFRDTV9SRUdfVVNFTV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX0NTRU1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVENNX1JFR19DUF9XRUlHSFQsIDB4MH0sCi0Je09QX1dSLCBUQ01fUkVHX1RTRE1fV0VJR0hULCAweDR9LAorCXtPUF9XUiwgVENNX1JFR19UU0RNX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIFRDTV9SRUdfVFFNX1BfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVENNX1JFR19UUU1fU19XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX1RNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFRDTV9SRUdfVENNX1RRTV9VU0VfUSwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfR1JfQVJCX1RZUEUsIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX0dSX0xEMF9QUiwgMHgxfSwKQEAgLTE0OSw3ICsxODEsOSBAQAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8yLCAweDh9LAogCXtPUF9XUiwgVENNX1JFR19OX1NNX0NUWF9MRF8zLCAweDh9LAotCXtPUF9aUiwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9aUl9FMSwgVENNX1JFR19OX1NNX0NUWF9MRF80LCAweDR9LAorCXtPUF9XUl9FMUgsIFRDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHgxfSwKKwl7T1BfWlJfRTFILCBUQ01fUkVHX05fU01fQ1RYX0xEXzUsIDB4M30sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9SRUcwX1NaLCAweDZ9LAogCXtPUF9XUl9FMSwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4ZH0sCiAJe09QX1dSX0UxLCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgyZH0sCkBAIC0xNzUsNzUgKzIwOSw3NSBAQAogCXtPUF9XUiwgVENNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFRDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgVENNX0NPTU1PTl9FTkQgICAgICAgICAgMTQxCi0jZGVmaW5lIFRDTV9GVU5DMF9TVEFSVCAgICAgICAgIDE0MQorI2RlZmluZSBUQ01fQ09NTU9OX0VORCAgICAgICAgICAxNTkKKyNkZWZpbmUgVENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTU5CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4N30sCi0jZGVmaW5lIFRDTV9GVU5DMF9FTkQgICAgICAgICAgIDE0NQotI2RlZmluZSBUQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNDUKKyNkZWZpbmUgVENNX0ZVTkMwX0VORCAgICAgICAgICAgMTYzCisjZGVmaW5lIFRDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE2MwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Mjd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDI3fSwKLSNkZWZpbmUgVENNX0ZVTkMxX0VORCAgICAgICAgICAgMTQ5Ci0jZGVmaW5lIFRDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE0OQorI2RlZmluZSBUQ01fRlVOQzFfRU5EICAgICAgICAgICAxNjcKKyNkZWZpbmUgVENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTY3CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDE3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgxN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MTd9LAotI2RlZmluZSBUQ01fRlVOQzJfRU5EICAgICAgICAgICAxNTMKLSNkZWZpbmUgVENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTUzCisjZGVmaW5lIFRDTV9GVU5DMl9FTkQgICAgICAgICAgIDE3MQorI2RlZmluZSBUQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNzEKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgzZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Mzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8xLCAweDM3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgzN30sCi0jZGVmaW5lIFRDTV9GVU5DM19FTkQgICAgICAgICAgIDE1NwotI2RlZmluZSBUQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTcKKyNkZWZpbmUgVENNX0ZVTkMzX0VORCAgICAgICAgICAgMTc1CisjZGVmaW5lIFRDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE3NQogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDRkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg0N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4NDd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDQ3fSwKLSNkZWZpbmUgVENNX0ZVTkM0X0VORCAgICAgICAgICAgMTYxCi0jZGVmaW5lIFRDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE2MQorI2RlZmluZSBUQ01fRlVOQzRfRU5EICAgICAgICAgICAxNzkKKyNkZWZpbmUgVENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTc5CiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8xLCAweDY3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg2N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzEsIDB4Njd9LAotI2RlZmluZSBUQ01fRlVOQzVfRU5EICAgICAgICAgICAxNjUKLSNkZWZpbmUgVENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTY1CisjZGVmaW5lIFRDTV9GVU5DNV9FTkQgICAgICAgICAgIDE4MworI2RlZmluZSBUQ01fRlVOQzZfU1RBUlQgICAgICAgICAxODMKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg1ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4NTd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8wLCAweDU3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg1N30sCi0jZGVmaW5lIFRDTV9GVU5DNl9FTkQgICAgICAgICAgIDE2OQotI2RlZmluZSBUQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNjkKKyNkZWZpbmUgVENNX0ZVTkM2X0VORCAgICAgICAgICAgMTg3CisjZGVmaW5lIFRDTV9GVU5DN19TVEFSVCAgICAgICAgIDE4NwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDdkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg3N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Nzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDc3fSwKLSNkZWZpbmUgVENNX0ZVTkM3X0VORCAgICAgICAgICAgMTczCi0jZGVmaW5lIEJSQjFfQ09NTU9OX1NUQVJUICAgICAgIDE3MworI2RlZmluZSBUQ01fRlVOQzdfRU5EICAgICAgICAgICAxOTEKKyNkZWZpbmUgQlJCMV9DT01NT05fU1RBUlQgICAgICAgMTkxCiAJe09QX1NXLCBCUkIxX1JFR19MTF9SQU0sIDB4MjAwMDAyMH0sCiAJe09QX1dSLCBCUkIxX1JFR19TT0ZUX1JFU0VULCAweDF9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzQsIDB4MH0sCiAJe09QX1NXLCBCUkIxX1JFR19GUkVFX0xJU1RfUFJTX0NSRFQsIDB4MzAyMjB9LAogCXtPUF9XUiwgQlJCMV9SRUdfU09GVF9SRVNFVCwgMHgwfSwKLSNkZWZpbmUgQlJCMV9DT01NT05fRU5EICAgICAgICAgMTc4Ci0jZGVmaW5lIEJSQjFfUE9SVDBfU1RBUlQgICAgICAgIDE3OAorI2RlZmluZSBCUkIxX0NPTU1PTl9FTkQgICAgICAgICAxOTYKKyNkZWZpbmUgQlJCMV9QT1JUMF9TVEFSVCAgICAgICAgMTk2CiAJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDB4Yjh9LAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCwgMHgxMTR9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX1BBVVNFX0NZQ0xFU18wLCAweDB9LAogCXtPUF9SRCwgQlJCMV9SRUdfTlVNX09GX0ZVTExfQ1lDTEVTXzAsIDB4MH0sCi0jZGVmaW5lIEJSQjFfUE9SVDBfRU5EICAgICAgICAgIDE4MgotI2RlZmluZSBCUkIxX1BPUlQxX1NUQVJUICAgICAgICAxODIKKyNkZWZpbmUgQlJCMV9QT1JUMF9FTkQgICAgICAgICAgMjAwCisjZGVmaW5lIEJSQjFfUE9SVDFfU1RBUlQgICAgICAgIDIwMAogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8xLCAweGI4fSwKIAl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzEsIDB4MTE0fSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMSwgMHgwfSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU18xLCAweDB9LAotI2RlZmluZSBCUkIxX1BPUlQxX0VORCAgICAgICAgICAxODYKLSNkZWZpbmUgVFNFTV9DT01NT05fU1RBUlQgICAgICAgMTg2CisjZGVmaW5lIEJSQjFfUE9SVDFfRU5EICAgICAgICAgIDIwNAorI2RlZmluZSBUU0VNX0NPTU1PTl9TVEFSVCAgICAgICAyMDQKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFRTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTMwMywxNDMgKzMzNywxNjYgQEAKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAyMCwgMHhjOH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxOCwgMHg0fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAwMCwgMHgyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWMxMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWFkMCwgMHgwfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhZDgsIDB4NH0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjI4LCAweDZ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNjc4LCAweDZ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzY3MCwgMHgyfSwKIAl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDQwMjI0fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyfSwKIAl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0Y2IwLCAweDgwMjI4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwOCwgMHg0fSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5MzAwMDB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDE4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDk0MDAwMH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4NH0sCiAJe09QX1dSXzY0X0UxLCBUU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2MCwgMHgxNDAyMzB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDR9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSwgMHgzMjRmMDAwMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMzgsIDB4NH0sCi0Je09QX1pQX0UxLCBUU0VNX1JFR19QUkFNLCAweDMwYjEwMDAwfSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzMyNTBjOTR9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzM2M1MGMyZH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhlNGQxOTVlfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA1OCwgMHg0fSwKLQl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweGJjNjE5MWZ9LAorCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTFlMDAsIDB4NWM0MDAyMzJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDY4LCAweDR9LAotCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTE3ZjAsIDB4NWQwMjAyMzJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDc4LCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDA4LCAweDJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MTQwLCAweDIwMDIyNH0sCi0Je09QX1pQX0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFLCAweDk2MDAwMH0sCi0Je09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjAsIDB4MTQwMjQ0fSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNLCAweDMwY2MwMDAwfSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzZGYwYzMzfSwKLQl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhkY2UxOTJifSwKLQl7T1BfV1JfNjRfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMWM3MCwgMHg1YzcyMDI0Nn0sCi0jZGVmaW5lIFRTRU1fQ09NTU9OX0VORCAgICAgICAgIDI3NgotI2RlZmluZSBUU0VNX1BPUlQwX1NUQVJUICAgICAgICAyNzYKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjJjMCwgMHgyMDAyMjR9LAorCXtPUF9aUF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5YjAwMDB9LAorCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSArIDB4Mzk4LCAweGQwMjQ0fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNLCAweDMyNWUwMDAwfSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM1OTYwYzk4fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgxYWVhMTlmZX0sCisJe09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTQzZDAsIDB4NTc4NjAyNDZ9LAorI2RlZmluZSBUU0VNX0NPTU1PTl9FTkQgICAgICAgICAyOTcKKyNkZWZpbmUgVFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMjk3CiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjJjOCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTZjfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweGZjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDE2Y30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIwMDAsIDB4Mjh9LAogCXtPUF9XUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIxNDAsIDB4Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJjMCwgMHgxMn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ1MCwgMHg2fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM1MCwgMHhmYX0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM1MCwgMHg2NH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODEwOCwgMHgyfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwICsgMHg4LCAweDUwMjM0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTcwLCAweDEyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5YzAsIDB4YmV9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDljMCwgMHg0Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgyMCwgMHhlfSwKLQl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM0fSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmIwLCAweDIwMjM5fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTA4LCAweDJ9LAotI2RlZmluZSBUU0VNX1BPUlQwX0VORCAgICAgICAgICAyOTQKLSNkZWZpbmUgVFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMjk0CisjZGVmaW5lIFRTRU1fUE9SVDBfRU5EICAgICAgICAgIDMxNworI2RlZmluZSBUU0VNX1BPUlQxX1NUQVJUICAgICAgICAzMTcKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzQ4LCAweDIwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjViMCwgMHgxNmN9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQzZjAsIDB4ZmN9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQ1YjAsIDB4MTZjfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjBhMCwgMHgyOH0sCiAJe09QX1dSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2NCwgMHgwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YjE3MCwgMHhjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDI4LCAweGF9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDEyfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4LCAweGZhfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNGUwLCAweDY0fSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4LCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTEwLCAweDJ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzggKyAweDgsIDB4NTAyM2J9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MzggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1YjgsIDB4MTJ9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGNiOCwgMHhiZX0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YWYwLCAweDRjfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDgsIDB4Mn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODU4LCAweGV9LAotCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjgsIDB4MjAyMzZ9LAorCXtPUF9TV19FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmYjgsIDB4MjAyNDB9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MTAsIDB4Mn0sCi0jZGVmaW5lIFRTRU1fUE9SVDFfRU5EICAgICAgICAgIDMxMgotI2RlZmluZSBUU0VNX0ZVTkMwX1NUQVJUICAgICAgICAzMTIKKyNkZWZpbmUgVFNFTV9QT1JUMV9FTkQgICAgICAgICAgMzM3CisjZGVmaW5lIFRTRU1fRlVOQzBfU1RBUlQgICAgICAgIDMzNwogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjYwLCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwICsgMHg4LCAweDUwMjQ4fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxYzAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4MTJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDJ9LAotI2RlZmluZSBUU0VNX0ZVTkMwX0VORCAgICAgICAgICAzMTgKLSNkZWZpbmUgVFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMzE4CisjZGVmaW5lIFRTRU1fRlVOQzBfRU5EICAgICAgICAgIDM0NQorI2RlZmluZSBUU0VNX0ZVTkMxX1NUQVJUICAgICAgICAzNDUKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI2NCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzOCArIDB4OCwgMHg1MDI0ZH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzggKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMWUwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDEwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MGM4LCAweDEyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwOCwgMHgyfSwKLSNkZWZpbmUgVFNFTV9GVU5DMV9FTkQgICAgICAgICAgMzI0Ci0jZGVmaW5lIFRTRU1fRlVOQzJfU1RBUlQgICAgICAgIDMyNAorI2RlZmluZSBUU0VNX0ZVTkMxX0VORCAgICAgICAgICAzNTMKKyNkZWZpbmUgVFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMzUzCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjgsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAgKyAweDgsIDB4NTAyNTJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIwMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4MjAyNDh9LAotI2RlZmluZSBUU0VNX0ZVTkMyX0VORCAgICAgICAgICAzMzAKLSNkZWZpbmUgVFNFTV9GVU5DM19TVEFSVCAgICAgICAgMzMwCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4MjAyNTd9LAorI2RlZmluZSBUU0VNX0ZVTkMyX0VORCAgICAgICAgICAzNjEKKyNkZWZpbmUgVFNFTV9GVU5DM19TVEFSVCAgICAgICAgMzYxCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNmMsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwYTggKyAweDgsIDB4NTAyNTl9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIyMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAzMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE1OCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4MjAyNGF9LAotI2RlZmluZSBUU0VNX0ZVTkMzX0VORCAgICAgICAgICAzMzYKLSNkZWZpbmUgVFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMzM2CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTgsIDB4MjAyNWV9LAorI2RlZmluZSBUU0VNX0ZVTkMzX0VORCAgICAgICAgICAzNjkKKyNkZWZpbmUgVFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMzY5CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzAsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwZTAgKyAweDgsIDB4NTAyNjB9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGUwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI0MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFhMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNGN9LAotI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNDIKLSNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzQyCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4MjAyNjV9LAorI2RlZmluZSBUU0VNX0ZVTkM0X0VORCAgICAgICAgICAzNzcKKyNkZWZpbmUgVFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMzc3CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzQsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxMTggKyAweDgsIDB4NTAyNjd9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTE4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI2MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA1MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFlOCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4MjAyNGV9LAotI2RlZmluZSBUU0VNX0ZVTkM1X0VORCAgICAgICAgICAzNDgKLSNkZWZpbmUgVFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMzQ4CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4MjAyNmN9LAorI2RlZmluZSBUU0VNX0ZVTkM1X0VORCAgICAgICAgICAzODUKKyNkZWZpbmUgVFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMzg1CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzgsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxNTAgKyAweDgsIDB4NTAyNmV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4MCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA2MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIzMCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4MjAyNTB9LAotI2RlZmluZSBUU0VNX0ZVTkM2X0VORCAgICAgICAgICAzNTQKLSNkZWZpbmUgVFNFTV9GVU5DN19TVEFSVCAgICAgICAgMzU0CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzAsIDB4MjAyNzN9LAorI2RlZmluZSBUU0VNX0ZVTkM2X0VORCAgICAgICAgICAzOTMKKyNkZWZpbmUgVFNFTV9GVU5DN19TVEFSVCAgICAgICAgMzkzCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiN2MsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODggKyAweDgsIDB4NTAyNzV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTg4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzJhMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA3MCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTI3OCwgMHgxMn0sCi0Je09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyNTJ9LAotI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICAzNjAKLSNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgMzYwCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4MjAyN2F9LAorI2RlZmluZSBUU0VNX0ZVTkM3X0VORCAgICAgICAgICA0MDEKKyNkZWZpbmUgTUlTQ19DT01NT05fU1RBUlQgICAgICAgNDAxCiAJe09QX1dSX0UxLCBNSVNDX1JFR19HUkNfVElNRU9VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzEsIDB4NzFkMjkxMX0sCiAJe09QX1dSLCBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF8yLCAweDB9LApAQCAtNDQ3LDM5ICs1MDQsMzkgQEAKIAl7T1BfV1IsIE1JU0NfUkVHX1BMTF9TVE9STV9DVFJMXzQsIDB4MH0sCiAJe09QX1dSLCBNSVNDX1JFR19MQ1BMTF9DVFJMXzEsIDB4MjA5fSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX1NQSU8sIDB4ZmYwMDAwMDB9LAotI2RlZmluZSBNSVNDX0NPTU1PTl9FTkQgICAgICAgICAzNjcKLSNkZWZpbmUgTUlTQ19GVU5DMF9TVEFSVCAgICAgICAgMzY3CisjZGVmaW5lIE1JU0NfQ09NTU9OX0VORCAgICAgICAgIDQwOAorI2RlZmluZSBNSVNDX0ZVTkMwX1NUQVJUICAgICAgICA0MDgKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMwX0VORCAgICAgICAgICAzNjgKLSNkZWZpbmUgTUlTQ19GVU5DMV9TVEFSVCAgICAgICAgMzY4CisjZGVmaW5lIE1JU0NfRlVOQzBfRU5EICAgICAgICAgIDQwOQorI2RlZmluZSBNSVNDX0ZVTkMxX1NUQVJUICAgICAgICA0MDkKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMxX0VORCAgICAgICAgICAzNjkKLSNkZWZpbmUgTUlTQ19GVU5DMl9TVEFSVCAgICAgICAgMzY5CisjZGVmaW5lIE1JU0NfRlVOQzFfRU5EICAgICAgICAgIDQxMAorI2RlZmluZSBNSVNDX0ZVTkMyX1NUQVJUICAgICAgICA0MTAKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMyX0VORCAgICAgICAgICAzNzAKLSNkZWZpbmUgTUlTQ19GVU5DM19TVEFSVCAgICAgICAgMzcwCisjZGVmaW5lIE1JU0NfRlVOQzJfRU5EICAgICAgICAgIDQxMQorI2RlZmluZSBNSVNDX0ZVTkMzX1NUQVJUICAgICAgICA0MTEKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkMzX0VORCAgICAgICAgICAzNzEKLSNkZWZpbmUgTUlTQ19GVU5DNF9TVEFSVCAgICAgICAgMzcxCisjZGVmaW5lIE1JU0NfRlVOQzNfRU5EICAgICAgICAgIDQxMgorI2RlZmluZSBNSVNDX0ZVTkM0X1NUQVJUICAgICAgICA0MTIKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM0X0VORCAgICAgICAgICAzNzIKLSNkZWZpbmUgTUlTQ19GVU5DNV9TVEFSVCAgICAgICAgMzcyCisjZGVmaW5lIE1JU0NfRlVOQzRfRU5EICAgICAgICAgIDQxMworI2RlZmluZSBNSVNDX0ZVTkM1X1NUQVJUICAgICAgICA0MTMKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM1X0VORCAgICAgICAgICAzNzMKLSNkZWZpbmUgTUlTQ19GVU5DNl9TVEFSVCAgICAgICAgMzczCisjZGVmaW5lIE1JU0NfRlVOQzVfRU5EICAgICAgICAgIDQxNAorI2RlZmluZSBNSVNDX0ZVTkM2X1NUQVJUICAgICAgICA0MTQKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AwLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM2X0VORCAgICAgICAgICAzNzQKLSNkZWZpbmUgTUlTQ19GVU5DN19TVEFSVCAgICAgICAgMzc0CisjZGVmaW5lIE1JU0NfRlVOQzZfRU5EICAgICAgICAgIDQxNQorI2RlZmluZSBNSVNDX0ZVTkM3X1NUQVJUICAgICAgICA0MTUKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19OSUdfV09MX1AxLCAweDB9LAotI2RlZmluZSBNSVNDX0ZVTkM3X0VORCAgICAgICAgICAzNzUKLSNkZWZpbmUgTklHX0NPTU1PTl9TVEFSVCAgICAgICAgMzc1CisjZGVmaW5lIE1JU0NfRlVOQzdfRU5EICAgICAgICAgIDQxNgorI2RlZmluZSBOSUdfQ09NTU9OX1NUQVJUICAgICAgICA0MTYKIAl7T1BfV1IsIE5JR19SRUdfUEJGX0xCX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19QUlNfUkVRX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfREVCVUdfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQl9MQl9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1BSU19FT1BfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfQ09NTU9OX0VORCAgICAgICAgICAzODAKLSNkZWZpbmUgTklHX1BPUlQwX1NUQVJUICAgICAgICAgMzgwCisjZGVmaW5lIE5JR19DT01NT05fRU5EICAgICAgICAgIDQyMQorI2RlZmluZSBOSUdfUE9SVDBfU1RBUlQgICAgICAgICA0MjEKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9DTV9IRUFERVIsIDB4MzAwMDAwfSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMF9FVkVOVF9JRCwgMHgyOH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfRVJST1JfTUFTSywgMHgwfSwKQEAgLTQ5Miw4ICs1NDksOCBAQAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfUEJGMF9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCMF9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1hDTTBfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfUE9SVDBfRU5EICAgICAgICAgICAzOTIKLSNkZWZpbmUgTklHX1BPUlQxX1NUQVJUICAgICAgICAgMzkyCisjZGVmaW5lIE5JR19QT1JUMF9FTkQgICAgICAgICAgIDQzMworI2RlZmluZSBOSUdfUE9SVDFfU1RBUlQgICAgICAgICA0MzMKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9DTV9IRUFERVIsIDB4MzAwMDAwfSwKIAl7T1BfV1IsIE5JR19SRUdfTExIMV9FVkVOVF9JRCwgMHgyOH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfRVJST1JfTUFTSywgMHgwfSwKQEAgLTUwNiwxMSArNTYzLDExIEBACiAJe09QX1dSLCBOSUdfUkVHX0VHUkVTU19QQkYxX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19CUkIxX09VVF9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfWENNMV9PVVRfRU4sIDB4MX0sCi0jZGVmaW5lIE5JR19QT1JUMV9FTkQgICAgICAgICAgIDQwNAotI2RlZmluZSBVUEJfQ09NTU9OX1NUQVJUICAgICAgICA0MDQKKyNkZWZpbmUgTklHX1BPUlQxX0VORCAgICAgICAgICAgNDQ1CisjZGVmaW5lIFVQQl9DT01NT05fU1RBUlQgICAgICAgIDQ0NQogCXtPUF9XUiwgR1JDQkFTRV9VUEIgKyBQQl9SRUdfQ09OVFJPTCwgMHgyMH0sCi0jZGVmaW5lIFVQQl9DT01NT05fRU5EICAgICAgICAgIDQwNQotI2RlZmluZSBDU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0MDUKKyNkZWZpbmUgVVBCX0NPTU1PTl9FTkQgICAgICAgICAgNDQ2CisjZGVmaW5lIENTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ0NgogCXtPUF9XUl9FMSwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweGExMX0sCiAJe09QX1dSX0UxSCwgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDIxMX0sCiAJe09QX1dSX0UxLCBDU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweGEwMH0sCkBAIC01NTAsOCArNjA3LDggQEAKIAl7T1BfV1JfQVNJQywgQ1NETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBDU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBDU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBDU0RNX0NPTU1PTl9FTkQgICAgICAgICA0NDQKLSNkZWZpbmUgVVNETV9DT01NT05fU1RBUlQgICAgICAgNDQ0CisjZGVmaW5lIENTRE1fQ09NTU9OX0VORCAgICAgICAgIDQ4NQorI2RlZmluZSBVU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0ODUKIAl7T1BfV1JfRTEsIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHhhMTF9LAogCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHg0MTF9LAogCXtPUF9XUl9FMSwgVVNETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDB9LApAQCAtNTY4LDkgKzYyNSwxNCBAQAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xLCAweDV9LAogCXtPUF9XUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yLCAweDM0fSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMywgMHgzNX0sCi0Je09QX1pSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4NWN9LAorCXtPUF9aUl9FMSwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDVjfSwKKwl7T1BfV1JfRTFILCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4N30sCisJe09QX1pSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF81LCAweDVifSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wLCAweDF9LAotCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAorCXtPUF9aUl9FMSwgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xLCAweDN9LAorCXtPUF9XUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV80LCAweDF9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81LCAweDFifSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9JTjEsIDB4N2ZmZmZmZn0sCiAJe09QX1dSLCBVU0RNX1JFR19FTkFCTEVfSU4yLCAweDNmfSwKIAl7T1BfV1IsIFVTRE1fUkVHX0VOQUJMRV9PVVQxLCAweDdmZmZmZmZ9LApAQCAtNTk0LDE4ICs2NTYsMjEgQEAKIAl7T1BfV1JfQVNJQywgVVNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBVU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBVU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBVU0RNX0NPTU1PTl9FTkQgICAgICAgICA0ODYKLSNkZWZpbmUgQ0NNX0NPTU1PTl9TVEFSVCAgICAgICAgNDg2CisjZGVmaW5lIFVTRE1fQ09NTU9OX0VORCAgICAgICAgIDUzMgorI2RlZmluZSBDQ01fQ09NTU9OX1NUQVJUICAgICAgICA1MzIKIAl7T1BfV1IsIENDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIENDTV9SRUdfQ1FNX0NDTV9IRFJfUCwgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIENDTV9SRUdfQ1FNX0NDTV9IRFJfUywgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIENDTV9SRUdfRVJSX0NDTV9IRFIsIDB4ODEwMDAwMH0sCiAJe09QX1dSLCBDQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKKwl7T1BfV1IsIENDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19UU0VNX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIENDTV9SRUdfWFNFTV9XRUlHSFQsIDB4NH0sCi0Je09QX1dSLCBDQ01fUkVHX1VTRU1fV0VJR0hULCAweDR9LAorCXtPUF9XUiwgQ0NNX1JFR19YU0VNX1dFSUdIVCwgMHg1fSwKKwl7T1BfV1IsIENDTV9SRUdfVVNFTV9XRUlHSFQsIDB4NX0sCiAJe09QX1pSLCBDQ01fUkVHX1BCRl9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBDQ01fUkVHX0NRTV9QX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1NETV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBDQ01fUkVHX0NRTV9QX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIENDTV9SRUdfQ1FNX1NfV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ1FNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DTlRfQVVYMV9RLCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19DTlRfQVVYMl9RLCAweDJ9LApAQCAtNjIwLDggKzY4NSw4IEBACiAJe09QX1dSLCBDQ01fUkVHX1hYX0lOSVRfQ1JELCAweDN9LAogCXtPUF9XUiwgQ0NNX1JFR19YWF9NU0dfTlVNLCAweDE4fSwKIAl7T1BfWlIsIENDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyMzh9LAotCXtPUF9TV19FMUgsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjU0fSwKKwl7T1BfU1dfRTEsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjQyfSwKKwl7T1BfU1dfRTFILCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDI3Y30sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzEsIDB4Mn0sCiAJe09QX1dSLCBDQ01fUkVHX05fU01fQ1RYX0xEXzIsIDB4OH0sCkBAIC02NTcsOCArNzIyLDggQEAKIAl7T1BfV1IsIENDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBDQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIENDTV9DT01NT05fRU5EICAgICAgICAgIDU0NwotI2RlZmluZSBDQ01fRlVOQzBfU1RBUlQgICAgICAgICA1NDcKKyNkZWZpbmUgQ0NNX0NPTU1PTl9FTkQgICAgICAgICAgNTk2CisjZGVmaW5lIENDTV9GVU5DMF9TVEFSVCAgICAgICAgIDU5NgogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg5fSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0xXzAsIDB4YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDd9LApAQCAtNjY2LDggKzczMSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4Y30sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0yXzAsIDB4Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4N30sCi0jZGVmaW5lIENDTV9GVU5DMF9FTkQgICAgICAgICAgIDU1NAotI2RlZmluZSBDQ01fRlVOQzFfU1RBUlQgICAgICAgICA1NTQKKyNkZWZpbmUgQ0NNX0ZVTkMwX0VORCAgICAgICAgICAgNjAzCisjZGVmaW5lIENDTV9GVU5DMV9TVEFSVCAgICAgICAgIDYwMwogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgyOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDJhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mjd9LApAQCAtNjc1LDggKzc0MCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4MmN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDJifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgyN30sCi0jZGVmaW5lIENDTV9GVU5DMV9FTkQgICAgICAgICAgIDU2MQotI2RlZmluZSBDQ01fRlVOQzJfU1RBUlQgICAgICAgICA1NjEKKyNkZWZpbmUgQ0NNX0ZVTkMxX0VORCAgICAgICAgICAgNjEwCisjZGVmaW5lIENDTV9GVU5DMl9TVEFSVCAgICAgICAgIDYxMAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHgxOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDFhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4MTd9LApAQCAtNjg0LDggKzc0OSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4MWN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDFifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgxN30sCi0jZGVmaW5lIENDTV9GVU5DMl9FTkQgICAgICAgICAgIDU2OAotI2RlZmluZSBDQ01fRlVOQzNfU1RBUlQgICAgICAgICA1NjgKKyNkZWZpbmUgQ0NNX0ZVTkMyX0VORCAgICAgICAgICAgNjE3CisjZGVmaW5lIENDTV9GVU5DM19TVEFSVCAgICAgICAgIDYxNwogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHgzOX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDNhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Mzd9LApAQCAtNjkzLDggKzc1OCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4M2N9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDNifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgzN30sCi0jZGVmaW5lIENDTV9GVU5DM19FTkQgICAgICAgICAgIDU3NQotI2RlZmluZSBDQ01fRlVOQzRfU1RBUlQgICAgICAgICA1NzUKKyNkZWZpbmUgQ0NNX0ZVTkMzX0VORCAgICAgICAgICAgNjI0CisjZGVmaW5lIENDTV9GVU5DNF9TVEFSVCAgICAgICAgIDYyNAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg0OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDRhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NDd9LApAQCAtNzAyLDggKzc2Nyw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NGN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDRifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg0N30sCi0jZGVmaW5lIENDTV9GVU5DNF9FTkQgICAgICAgICAgIDU4MgotI2RlZmluZSBDQ01fRlVOQzVfU1RBUlQgICAgICAgICA1ODIKKyNkZWZpbmUgQ0NNX0ZVTkM0X0VORCAgICAgICAgICAgNjMxCisjZGVmaW5lIENDTV9GVU5DNV9TVEFSVCAgICAgICAgIDYzMQogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg2OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDZhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Njd9LApAQCAtNzExLDggKzc3Niw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4NmN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDZifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg2N30sCi0jZGVmaW5lIENDTV9GVU5DNV9FTkQgICAgICAgICAgIDU4OQotI2RlZmluZSBDQ01fRlVOQzZfU1RBUlQgICAgICAgICA1ODkKKyNkZWZpbmUgQ0NNX0ZVTkM1X0VORCAgICAgICAgICAgNjM4CisjZGVmaW5lIENDTV9GVU5DNl9TVEFSVCAgICAgICAgIDYzOAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMCwgMHg1OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweDVhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzAsIDB4NTd9LApAQCAtNzIwLDggKzc4NSw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzAsIDB4NWN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweDVifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg1N30sCi0jZGVmaW5lIENDTV9GVU5DNl9FTkQgICAgICAgICAgIDU5NgotI2RlZmluZSBDQ01fRlVOQzdfU1RBUlQgICAgICAgICA1OTYKKyNkZWZpbmUgQ0NNX0ZVTkM2X0VORCAgICAgICAgICAgNjQ1CisjZGVmaW5lIENDTV9GVU5DN19TVEFSVCAgICAgICAgIDY0NQogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTBfMSwgMHg3OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8xLCAweDdhfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0yXzEsIDB4Nzd9LApAQCAtNzI5LDggKzc5NCw4IEBACiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0xXzEsIDB4N2N9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8xLCAweDdifSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg3N30sCi0jZGVmaW5lIENDTV9GVU5DN19FTkQgICAgICAgICAgIDYwMwotI2RlZmluZSBVQ01fQ09NTU9OX1NUQVJUICAgICAgICA2MDMKKyNkZWZpbmUgQ0NNX0ZVTkM3X0VORCAgICAgICAgICAgNjUyCisjZGVmaW5lIFVDTV9DT01NT05fU1RBUlQgICAgICAgIDY1MgogCXtPUF9XUiwgVUNNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgVUNNX1JFR19VUU1fVUNNX0hEUl9QLCAweDIxNTAwMjB9LAogCXtPUF9XUiwgVUNNX1JFR19VUU1fVUNNX0hEUl9TLCAweDIxNTAwMjB9LApAQCAtNzM5LDEwICs4MDQsMTYgQEAKIAl7T1BfV1IsIFVDTV9SRUdfRVJSX0VWTlRfSUQsIDB4MzN9LAogCXtPUF9XUiwgVUNNX1JFR19FWFBSX0VWTlRfSUQsIDB4MzB9LAogCXtPUF9XUiwgVUNNX1JFR19TVE9QX0VWTlRfSUQsIDB4MzF9LAotCXtPUF9XUiwgVUNNX1JFR19UU0VNX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFVDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19UU0VNX1dFSUdIVCwgMHg0fSwKIAl7T1BfV1IsIFVDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4MH0sCisJe09QX1dSLCBVQ01fUkVHX1hTRU1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19ET1JRX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFVDTV9SRUdfQ1BfV0VJR0hULCAweDB9LAotCXtPUF9XUiwgVUNNX1JFR19VUU1fUF9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBVQ01fUkVHX1VTRE1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVUNNX1JFR19VUU1fUF9XRUlHSFQsIDB4N30sCisJe09QX1dSLCBVQ01fUkVHX1VRTV9TX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFVDTV9SRUdfVE1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgVUNNX1JFR19VQ01fVVFNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19JTlZfQ0ZMR19RLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19HUl9BUkJfVFlQRSwgMHgxfSwKQEAgLTc1NiwxNCArODI3LDE0IEBACiAJe09QX1dSLCBVQ01fUkVHX1hYX0lOSVRfQ1JELCAweGV9LAogCXtPUF9XUiwgVUNNX1JFR19YWF9NU0dfTlVNLCAweDFifSwKIAl7T1BfWlIsIFVDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgVUNNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxYjAyNWN9LAotCXtPUF9TV19FMUgsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjc4fSwKKwl7T1BfU1dfRTEsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjY2fSwKKwl7T1BfU1dfRTFILCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDJhMH0sCiAJe09QX1dSLCBVQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4MTB9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8xLCAweDd9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8yLCAweGZ9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8zLCAweDEwfSwKIAl7T1BfWlJfRTEsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKLQl7T1BfV1JfRTFILCBVQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4ZH0sCisJe09QX1dSX0UxSCwgVUNNX1JFR19OX1NNX0NUWF9MRF80LCAweGJ9LAogCXtPUF9aUl9FMUgsIFVDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX1JFRzBfU1osIDB4M30sCiAJe09QX1dSX0UxLCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKQEAgLTc4Nyw1NiArODU4LDU2IEBACiAJe09QX1dSLCBVQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgVUNNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBVQ01fQ09NTU9OX0VORCAgICAgICAgICA2NTkKLSNkZWZpbmUgVUNNX0ZVTkMwX1NUQVJUICAgICAgICAgNjU5CisjZGVmaW5lIFVDTV9DT01NT05fRU5EICAgICAgICAgIDcxNAorI2RlZmluZSBVQ01fRlVOQzBfU1RBUlQgICAgICAgICA3MTQKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHhmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHhlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMwX0VORCAgICAgICAgICAgNjYzCi0jZGVmaW5lIFVDTV9GVU5DMV9TVEFSVCAgICAgICAgIDY2MworI2RlZmluZSBVQ01fRlVOQzBfRU5EICAgICAgICAgICA3MTgKKyNkZWZpbmUgVUNNX0ZVTkMxX1NUQVJUICAgICAgICAgNzE4CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDJlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMxX0VORCAgICAgICAgICAgNjY3Ci0jZGVmaW5lIFVDTV9GVU5DMl9TVEFSVCAgICAgICAgIDY2NworI2RlZmluZSBVQ01fRlVOQzFfRU5EICAgICAgICAgICA3MjIKKyNkZWZpbmUgVUNNX0ZVTkMyX1NUQVJUICAgICAgICAgNzIyCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4MWZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDFlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMyX0VORCAgICAgICAgICAgNjcxCi0jZGVmaW5lIFVDTV9GVU5DM19TVEFSVCAgICAgICAgIDY3MQorI2RlZmluZSBVQ01fRlVOQzJfRU5EICAgICAgICAgICA3MjYKKyNkZWZpbmUgVUNNX0ZVTkMzX1NUQVJUICAgICAgICAgNzI2CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4M2Z9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDNlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkMzX0VORCAgICAgICAgICAgNjc1Ci0jZGVmaW5lIFVDTV9GVU5DNF9TVEFSVCAgICAgICAgIDY3NQorI2RlZmluZSBVQ01fRlVOQzNfRU5EICAgICAgICAgICA3MzAKKyNkZWZpbmUgVUNNX0ZVTkM0X1NUQVJUICAgICAgICAgNzMwCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4NGZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDRlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM0X0VORCAgICAgICAgICAgNjc5Ci0jZGVmaW5lIFVDTV9GVU5DNV9TVEFSVCAgICAgICAgIDY3OQorI2RlZmluZSBVQ01fRlVOQzRfRU5EICAgICAgICAgICA3MzQKKyNkZWZpbmUgVUNNX0ZVTkM1X1NUQVJUICAgICAgICAgNzM0CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4NmZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDZlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM1X0VORCAgICAgICAgICAgNjgzCi0jZGVmaW5lIFVDTV9GVU5DNl9TVEFSVCAgICAgICAgIDY4MworI2RlZmluZSBVQ01fRlVOQzVfRU5EICAgICAgICAgICA3MzgKKyNkZWZpbmUgVUNNX0ZVTkM2X1NUQVJUICAgICAgICAgNzM4CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4NWZ9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8wLCAweDVlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM2X0VORCAgICAgICAgICAgNjg3Ci0jZGVmaW5lIFVDTV9GVU5DN19TVEFSVCAgICAgICAgIDY4NworI2RlZmluZSBVQ01fRlVOQzZfRU5EICAgICAgICAgICA3NDIKKyNkZWZpbmUgVUNNX0ZVTkM3X1NUQVJUICAgICAgICAgNzQyCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzEsIDB4N2Z9LAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMV8xLCAweDdlfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgVUNNX0ZVTkM3X0VORCAgICAgICAgICAgNjkxCi0jZGVmaW5lIFVTRU1fQ09NTU9OX1NUQVJUICAgICAgIDY5MQorI2RlZmluZSBVQ01fRlVOQzdfRU5EICAgICAgICAgICA3NDYKKyNkZWZpbmUgVVNFTV9DT01NT05fU1RBUlQgICAgICAgNzQ2CiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBVU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC04ODcsNjkgKzk1OCw3MiBAQAogCXtPUF9XUl9BU0lDLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4MWRjZDY1MDB9LAogCXtPUF9XUl9FTVVMLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjR9LAogCXtPUF9XUl9GUEdBLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzODAsIDB4NGM0YjQwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDEwMn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHhjMn0sCiAJe09QX1dSX0VNVUxfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MH0sCiAJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDF9LAogCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MTAyfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2U4LCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDIwLCAweGM4fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2QwLCAweDV9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAwLCAweDJ9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDAgKyAweDE0LCAweDEwMjc3fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc2MCwgMHg0fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZTIwLCAweDQyfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzczOCwgMHg5fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjY4LCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzNzM4ICsgMHgyNCwgMHgxMDI5M30sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2OCArIDB4OCwgMHgyMDI3OH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODAsIDB4NDJ9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMTAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDY0MCwgMHg0MH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg5ODAsIDB4Yzh9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZjAsIDB4NH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg5NjAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkOCwgMHg1fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIyOCwgMHg0fSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2Q4ICsgMHgxNCwgMHgxMDI4MX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAsIDB4OX0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWM2MCwgMHgyMH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAgKyAweDI0LCAweDEwMmJifSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjgyfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4NDAwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODMwLCAweDIwMjdhfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCArIDB4OCwgMHgyMDI5NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAgKyAweDgsIDB4MTAyYmN9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwICsgMHhjLCAweDN9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4LCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjY4ICsgMHg4LCAweDIwMjk2fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCArIDB4OCwgMHgyMDJiZH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMTAsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDc0YzAsIDB4MjAyOTh9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg3NGMwLCAweDIwMmJmfSwKIAl7T1BfV1IsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyN2N9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyOWF9LAorCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDI4NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJjMX0sCiAJe09QX1dSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjhjfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmFhfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMjAwMDB9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjNDAwMDB9LAotCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMjljfSwKLQl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAyYmF9LAotCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSwgMHgzMTFjMDAwMH0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSwgMHgzMTA3MDAwMH0sCi0Je09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzNDUwYzQ3fSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzMGUwYzQyfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM4NTYxOTE5fSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzODliMTkwNn0sCi0Je09QX1dSXzY0X0UxLCBVU0VNX1JFR19QUkFNICsgMHgxN2ZlMCwgMHg1MDA0MDI5ZX0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MTMyMjcyZH0sCi0Je09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTgyNTAsIDB4NGZiNjAyYmN9LAotI2RlZmluZSBVU0VNX0NPTU1PTl9FTkQgICAgICAgICA3ODcKLSNkZWZpbmUgVVNFTV9QT1JUMF9TVEFSVCAgICAgICAgNzg3CisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMjk0fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmQxfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhjMzAwMDB9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX0lOVF9UQUJMRSwgMHhkMjAwMDB9LAorCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMmE0fSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUgKyAweDNhOCwgMHhiMDJlMX0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNLCAweDMxNGMwMDAwfSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNLCAweDMxYjYwMDAwfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzVlZjBjNTN9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzY1MDBjNmV9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4MzYxMzE5Y2Z9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM3NTkxYTAyfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDcxMTI3NTR9LAorCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDI4NjEyN2Q5fSwKKwl7T1BfV1JfNjRfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDE4ZWUwLCAweDRlMjQwMmE2fSwKKwl7T1BfV1JfNjRfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxZmY0MCwgMHg0MDE4MDJlM30sCisjZGVmaW5lIFVTRU1fQ09NTU9OX0VORCAgICAgICAgIDg0MgorI2RlZmluZSBVU0VNX1BPUlQwX1NUQVJUICAgICAgICA4NDIKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHhhMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHhhfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTUwMCwgMHgyOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk1MCwgMHgyZX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk2NDAsIDB4MzR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMDAsIDB4NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk1MDAsIDB4NDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5ODAsIDB4MzB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NzAwLCAweDNjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0NzQwLCAweGI0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQ1MCwgMHhiNH0sCisJe09QX1dSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5MCwgMHgwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFkMCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjQwLCAweDR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDgwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDIwLCAweDIwfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzI4OCwgMHg5Nn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ0MCwgMHg3Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWI2MCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4MTJjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzE4LCAweDk4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIzOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI3OCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMDAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMDgsIDB4Y30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMDAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzAwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQwMCwgMHgyMH0sCkBAIC05NjYsMjMgKzEwNDAsMjYgQEAKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWYwMCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiNzgsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTA4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQwX0VORCAgICAgICAgICA4MTgKLSNkZWZpbmUgVVNFTV9QT1JUMV9TVEFSVCAgICAgICAgODE4CisjZGVmaW5lIFVTRU1fUE9SVDBfRU5EICAgICAgICAgIDg3NgorI2RlZmluZSBVU0VNX1BPUlQxX1NUQVJUICAgICAgICA4NzYKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNjgwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTI4MCwgMHhhMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkyOCwgMHhhfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTVhMCwgMHgyOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWEwOCwgMHgyZX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk3MTAsIDB4MzR9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkMTAsIDB4NH0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk0MCwgMHgxMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk2MDAsIDB4NDB9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhNDAsIDB4MzB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5N2YwLCAweDNjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YTEwLCAweGI0fSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjcyMCwgMHhiNH0sCisJe09QX1dSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQ5NCwgMHgwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFkOCwgMHgyfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYjUwLCAweDR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTAwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZGEwLCAweDIwfSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzRlMCwgMHg5Nn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTYwOCwgMHg3Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWJlMCwgMHgyMH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg0YjAsIDB4MTJjfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1NTc4LCAweDk4fSwKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzIzYywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGNjMCwgMHg1Mn0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxODAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRlMzgsIDB4Y30sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyODAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MzgwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTQ4MCwgMHgyMH0sCkBAIC05OTksNDAgKzEwNzYsNDggQEAKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NWY4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZjYzAsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZTM4LCAweGN9LAotI2RlZmluZSBVU0VNX1BPUlQxX0VORCAgICAgICAgICA4NDkKLSNkZWZpbmUgVVNFTV9GVU5DMF9TVEFSVCAgICAgICAgODQ5CisjZGVmaW5lIFVTRU1fUE9SVDFfRU5EICAgICAgICAgIDkxMAorI2RlZmluZSBVU0VNX0ZVTkMwX1NUQVJUICAgICAgICA5MTAKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzMCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxMCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DMF9FTkQgICAgICAgICAgODUxCi0jZGVmaW5lIFVTRU1fRlVOQzFfU1RBUlQgICAgICAgIDg1MQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDE4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMwX0VORCAgICAgICAgICA5MTMKKyNkZWZpbmUgVVNFTV9GVU5DMV9TVEFSVCAgICAgICAgOTEzCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzQsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMTAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzFfRU5EICAgICAgICAgIDg1MwotI2RlZmluZSBVU0VNX0ZVTkMyX1NUQVJUICAgICAgICA4NTMKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAyOCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DMV9FTkQgICAgICAgICAgOTE2CisjZGVmaW5lIFVTRU1fRlVOQzJfU1RBUlQgICAgICAgIDkxNgorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM4LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDIwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDMwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkMyX0VORCAgICAgICAgICA4NTUKLSNkZWZpbmUgVVNFTV9GVU5DM19TVEFSVCAgICAgICAgODU1CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMzgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzJfRU5EICAgICAgICAgIDkxOQorI2RlZmluZSBVU0VNX0ZVTkMzX1NUQVJUICAgICAgICA5MTkKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzYywgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAzMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DM19FTkQgICAgICAgICAgODU3Ci0jZGVmaW5lIFVTRU1fRlVOQzRfU1RBUlQgICAgICAgIDg1NworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQ4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMzX0VORCAgICAgICAgICA5MjIKKyNkZWZpbmUgVVNFTV9GVU5DNF9TVEFSVCAgICAgICAgOTIyCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNDAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNDAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNTAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzRfRU5EICAgICAgICAgIDg1OQotI2RlZmluZSBVU0VNX0ZVTkM1X1NUQVJUICAgICAgICA4NTkKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA1OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DNF9FTkQgICAgICAgICAgOTI1CisjZGVmaW5lIFVTRU1fRlVOQzVfU1RBUlQgICAgICAgIDkyNQorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTQ0LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDUwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDYwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkM1X0VORCAgICAgICAgICA4NjEKLSNkZWZpbmUgVVNFTV9GVU5DNl9TVEFSVCAgICAgICAgODYxCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNjgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzVfRU5EICAgICAgICAgIDkyOAorI2RlZmluZSBVU0VNX0ZVTkM2X1NUQVJUICAgICAgICA5MjgKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE0OCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA2MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA3MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DNl9FTkQgICAgICAgICAgODYzCi0jZGVmaW5lIFVTRU1fRlVOQzdfU1RBUlQgICAgICAgIDg2MworCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDc4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM2X0VORCAgICAgICAgICA5MzEKKyNkZWZpbmUgVVNFTV9GVU5DN19TVEFSVCAgICAgICAgOTMxCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNGMsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNzAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwODAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzdfRU5EICAgICAgICAgIDg2NQotI2RlZmluZSBDU0VNX0NPTU1PTl9TVEFSVCAgICAgICA4NjUKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA4OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DN19FTkQgICAgICAgICAgOTM0CisjZGVmaW5lIENTRU1fQ09NTU9OX1NUQVJUICAgICAgIDkzNAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgQ1NFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtMTA5MSwyOSArMTE3NiwzMCBAQAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMWU4LCAweDB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YzAsIDB4MjQwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHhjMH0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhMH0sCisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmVjOCwgMHg4MDJhOH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNzAsIDB4ODB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjgwLCAweDR9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MjgwLCAweDI0MH0sCi0Je09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiODgsIDB4MjAwMmJlfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjcwMCwgMHgxMDB9LAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5MDAwLCAweDQwMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMDgsIDB4MjAwMmU1fSwKIAl7T1BfV1IsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxM2ZmZmZmfSwKLQl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyYTh9LAotCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyZGV9LAorCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJiMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMwNX0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MH0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmI4fSwKLQl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmVlfSwKLQl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZTAwMDB9LAotCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg2ZjAwMDB9LAotCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmM4fSwKLQl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAyZmV9LAotCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjU4MDAwMH0sCi0Je09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMWZhMDAwMH0sCi0Je09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE4MjcwYzk2fSwKLQl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDE5MDQwYzdmfSwKLQl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGIyMTAsIDB4NjgyNDAyY2F9LAotCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGI0MzAsIDB4NjdlMDAzMDB9LAotI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICA5NDQKLSNkZWZpbmUgQ1NFTV9QT1JUMF9TVEFSVCAgICAgICAgOTQ0CisJe09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMmMwfSwKKwl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4MTAwMzE1fSwKKwl7T1BfWlBfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg3MTAwMDB9LAorCXtPUF9aUF9FMUgsIENTRU1fUkVHX0lOVF9UQUJMRSwgMHg3NDAwMDB9LAorCXtPUF9XUl82NF9FMSwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmQwfSwKKwl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUgKyAweDM4MCwgMHgxMDAzMjV9LAorCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSwgMHgzMjI5MDAwMH0sCisJe09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSwgMHgzMjI2MDAwMH0sCisJe09QX1pQX0UxLCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDIzNjMwYzhifSwKKwl7T1BfWlBfRTFILCBDU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDI0NmUwYzhhfSwKKwl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX1BSQU0gKyAweGM5MzAsIDB4NjU0MDAyZDJ9LAorCXtPUF9XUl82NF9FMUgsIENTRU1fUkVHX1BSQU0gKyAweGNiYjAsIDB4NjRmMDAzMjd9LAorI2RlZmluZSBDU0VNX0NPTU1PTl9FTkQgICAgICAgICAxMDE0CisjZGVmaW5lIENTRU1fUE9SVDBfU1RBUlQgICAgICAgIDEwMTQKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwMCwgMHhhMH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTkwMCwgMHgxMH0sCkBAIC0xMTIzLDExICsxMjA5LDEwIEBACiAJe09QX1dSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0MCwgMHg2fSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzAwLCAweGV9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MDQwLCAweDMwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQwLCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0MTAsIDB4MzB9LAotI2RlZmluZSBDU0VNX1BPUlQwX0VORCAgICAgICAgICA5NTYKLSNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgOTU2CisjZGVmaW5lIENTRU1fUE9SVDBfRU5EICAgICAgICAgIDEwMjUKKyNkZWZpbmUgQ1NFTV9QT1JUMV9TVEFSVCAgICAgICAgMTAyNQogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE2ODAsIDB4YTB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MjgwLCAweGEwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTQwLCAweDEwfSwKQEAgLTExMzcsNDYgKzEyMjIsNTMgQEAKIAl7T1BfV1JfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTFjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDU4LCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzMzgsIDB4ZX0sCi0Je09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxMDAsIDB4MzB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNTgsIDB4Nn0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRkMCwgMHgzMH0sCi0jZGVmaW5lIENTRU1fUE9SVDFfRU5EICAgICAgICAgIDk2OAotI2RlZmluZSBDU0VNX0ZVTkMwX1NUQVJUICAgICAgICA5NjgKKyNkZWZpbmUgQ1NFTV9QT1JUMV9FTkQgICAgICAgICAgMTAzNgorI2RlZmluZSBDU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxMDM2CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMDAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzBfRU5EICAgICAgICAgIDk3MAotI2RlZmluZSBDU0VNX0ZVTkMxX1NUQVJUICAgICAgICA5NzAKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjA0MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzBfRU5EICAgICAgICAgIDEwMzkKKyNkZWZpbmUgQ1NFTV9GVU5DMV9TVEFSVCAgICAgICAgMTAzOQogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTRjLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzA4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkMxX0VORCAgICAgICAgICA5NzIKLSNkZWZpbmUgQ1NFTV9GVU5DMl9TVEFSVCAgICAgICAgOTcyCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYxMDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkMxX0VORCAgICAgICAgICAxMDQyCisjZGVmaW5lIENTRU1fRlVOQzJfU1RBUlQgICAgICAgIDEwNDIKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1MCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMxMCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DMl9FTkQgICAgICAgICAgOTc0Ci0jZGVmaW5lIENTRU1fRlVOQzNfU1RBUlQgICAgICAgIDk3NAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MWMwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DMl9FTkQgICAgICAgICAgMTA0NQorI2RlZmluZSBDU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxMDQ1CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNTQsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMTgsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzNfRU5EICAgICAgICAgIDk3NgotI2RlZmluZSBDU0VNX0ZVTkM0X1NUQVJUICAgICAgICA5NzYKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjI4MCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzNfRU5EICAgICAgICAgIDEwNDgKKyNkZWZpbmUgQ1NFTV9GVU5DNF9TVEFSVCAgICAgICAgMTA0OAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTU4LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzIwLCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM0X0VORCAgICAgICAgICA5NzgKLSNkZWZpbmUgQ1NFTV9GVU5DNV9TVEFSVCAgICAgICAgOTc4CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYzNDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM0X0VORCAgICAgICAgICAxMDUxCisjZGVmaW5lIENTRU1fRlVOQzVfU1RBUlQgICAgICAgIDEwNTEKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1YywgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMyOCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DNV9FTkQgICAgICAgICAgOTgwCi0jZGVmaW5lIENTRU1fRlVOQzZfU1RBUlQgICAgICAgIDk4MAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2NDAwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DNV9FTkQgICAgICAgICAgMTA1NAorI2RlZmluZSBDU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxMDU0CiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNjAsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMzAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzZfRU5EICAgICAgICAgIDk4MgotI2RlZmluZSBDU0VNX0ZVTkM3X1NUQVJUICAgICAgICA5ODIKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjRjMCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzZfRU5EICAgICAgICAgIDEwNTcKKyNkZWZpbmUgQ1NFTV9GVU5DN19TVEFSVCAgICAgICAgMTA1NwogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTY0LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzM4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM3X0VORCAgICAgICAgICA5ODQKLSNkZWZpbmUgWFBCX0NPTU1PTl9TVEFSVCAgICAgICAgOTg0CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDY1ODAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM3X0VORCAgICAgICAgICAxMDYwCisjZGVmaW5lIFhQQl9DT01NT05fU1RBUlQgICAgICAgIDEwNjAKIAl7T1BfV1IsIEdSQ0JBU0VfWFBCICsgUEJfUkVHX0NPTlRST0wsIDB4MjB9LAotI2RlZmluZSBYUEJfQ09NTU9OX0VORCAgICAgICAgICA5ODUKLSNkZWZpbmUgRFFfQ09NTU9OX1NUQVJUICAgICAgICAgOTg1CisjZGVmaW5lIFhQQl9DT01NT05fRU5EICAgICAgICAgIDEwNjEKKyNkZWZpbmUgRFFfQ09NTU9OX1NUQVJUICAgICAgICAgMTA2MQogCXtPUF9XUiwgRE9SUV9SRUdfTU9ERV9BQ1QsIDB4Mn0sCiAJe09QX1dSLCBET1JRX1JFR19OT1JNX0NJRF9PRlNULCAweDN9LAogCXtPUF9XUiwgRE9SUV9SRUdfT1VUU1RfUkVRLCAweDR9LApAQCAtMTE5NSw4ICsxMjg3LDggQEAKIAl7T1BfV1IsIERPUlFfUkVHX0RRX0ZJRk9fQUZVTExfVEgsIDB4NzZjfSwKIAl7T1BfV1IsIERPUlFfUkVHX1JFR04sIDB4N2MxMDA0fSwKIAl7T1BfV1IsIERPUlFfUkVHX0lGX0VOLCAweGZ9LAotI2RlZmluZSBEUV9DT01NT05fRU5EICAgICAgICAgICAxMDAzCi0jZGVmaW5lIFRJTUVSU19DT01NT05fU1RBUlQgICAgIDEwMDMKKyNkZWZpbmUgRFFfQ09NTU9OX0VORCAgICAgICAgICAgMTA3OQorI2RlZmluZSBUSU1FUlNfQ09NTU9OX1NUQVJUICAgICAxMDc5CiAJe09QX1pSLCBUTV9SRUdfQ0xJTl9QUklPUjBfQ0xJRU5ULCAweDJ9LAogCXtPUF9XUiwgVE1fUkVHX0xJTl9TRVRDTFJfRklGT19BTEZVTExfVEhSLCAweDFjfSwKIAl7T1BfV1IsIFRNX1JFR19DRkNfQUNfQ1JEQ05UX1ZBTCwgMHgxfSwKQEAgLTEyMTksMTQgKzEzMTEsMTggQEAKIAl7T1BfV1IsIFRNX1JFR19FTl9DTDBfSU5QVVQsIDB4MX0sCiAJe09QX1dSLCBUTV9SRUdfRU5fQ0wxX0lOUFVULCAweDF9LAogCXtPUF9XUiwgVE1fUkVHX0VOX0NMMl9JTlBVVCwgMHgxfSwKLSNkZWZpbmUgVElNRVJTX0NPTU1PTl9FTkQgICAgICAgMTAyNQotI2RlZmluZSBUSU1FUlNfUE9SVDBfU1RBUlQgICAgICAxMDI1CisjZGVmaW5lIFRJTUVSU19DT01NT05fRU5EICAgICAgIDExMDEKKyNkZWZpbmUgVElNRVJTX1BPUlQwX1NUQVJUICAgICAgMTEwMQorCXtPUF9XUiwgVE1fUkVHX0xJTjBfTE9HSUNfQUREUiwgMHgwfSwKKwl7T1BfV1IsIFRNX1JFR19MSU4wX1BIWV9BRERSX1ZBTElELCAweDB9LAogCXtPUF9aUiwgVE1fUkVHX0xJTjBfUEhZX0FERFIsIDB4Mn0sCi0jZGVmaW5lIFRJTUVSU19QT1JUMF9FTkQgICAgICAgIDEwMjYKLSNkZWZpbmUgVElNRVJTX1BPUlQxX1NUQVJUICAgICAgMTAyNgorI2RlZmluZSBUSU1FUlNfUE9SVDBfRU5EICAgICAgICAxMTA0CisjZGVmaW5lIFRJTUVSU19QT1JUMV9TVEFSVCAgICAgIDExMDQKKwl7T1BfV1IsIFRNX1JFR19MSU4xX0xPR0lDX0FERFIsIDB4MH0sCisJe09QX1dSLCBUTV9SRUdfTElOMV9QSFlfQUREUl9WQUxJRCwgMHgwfSwKIAl7T1BfWlIsIFRNX1JFR19MSU4xX1BIWV9BRERSLCAweDJ9LAotI2RlZmluZSBUSU1FUlNfUE9SVDFfRU5EICAgICAgICAxMDI3Ci0jZGVmaW5lIFhTRE1fQ09NTU9OX1NUQVJUICAgICAgIDEwMjcKKyNkZWZpbmUgVElNRVJTX1BPUlQxX0VORCAgICAgICAgMTEwNworI2RlZmluZSBYU0RNX0NPTU1PTl9TVEFSVCAgICAgICAxMTA3CiAJe09QX1dSX0UxLCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NjE0fSwKIAl7T1BfV1JfRTFILCBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDI0fSwKIAl7T1BfV1JfRTEsIFhTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4NjAwfSwKQEAgLTEyNDksNyArMTM0NSw5IEBACiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzksIDB4Mjl9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMCwgMHgyYX0sCiAJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExLCAweDJifSwKLQl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIsIDB4NTR9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMiwgMHgyY30sCisJe09QX1dSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzLCAweDJkfSwKKwl7T1BfWlIsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQsIDB4NTJ9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzAsIDB4MX0sCiAJe09QX1pSLCBYU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgxZn0sCiAJe09QX1dSLCBYU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LApAQCAtMTI3NCw4ICsxMzcyLDggQEAKIAl7T1BfV1JfQVNJQywgWFNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBYU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBYU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBYU0RNX0NPTU1PTl9FTkQgICAgICAgICAxMDc0Ci0jZGVmaW5lIFFNX0NPTU1PTl9TVEFSVCAgICAgICAgIDEwNzQKKyNkZWZpbmUgWFNETV9DT01NT05fRU5EICAgICAgICAgMTE1NgorI2RlZmluZSBRTV9DT01NT05fU1RBUlQgICAgICAgICAxMTU2CiAJe09QX1dSLCBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8wLCAweDZ9LAogCXtPUF9XUiwgUU1fUkVHX0FDVENUUklOSVRWQUxfMSwgMHg1fSwKIAl7T1BfV1IsIFFNX1JFR19BQ1RDVFJJTklUVkFMXzIsIDB4YX0sCkBAIC0xNTc2LDggKzE2NzQsOCBAQAogCXtPUF9XUl9FMUgsIFFNX1JFR19QUTJQQ0lGVU5DXzYsIDB4NX0sCiAJe09QX1dSX0UxSCwgUU1fUkVHX1BRMlBDSUZVTkNfNywgMHg3fSwKIAl7T1BfV1IsIFFNX1JFR19DTUlOVEVOLCAweGZmfSwKLSNkZWZpbmUgUU1fQ09NTU9OX0VORCAgICAgICAgICAgMTM3NAotI2RlZmluZSBQQkZfQ09NTU9OX1NUQVJUICAgICAgICAxMzc0CisjZGVmaW5lIFFNX0NPTU1PTl9FTkQgICAgICAgICAgIDE0NTYKKyNkZWZpbmUgUEJGX0NPTU1PTl9TVEFSVCAgICAgICAgMTQ1NgogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfTEJfRU5BQkxFLCAweDF9LApAQCAtMTU4NSwyMCArMTY4MywyMCBAQAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1A0LCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19JTklULCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDQsIDB4MH0sCi0jZGVmaW5lIFBCRl9DT01NT05fRU5EICAgICAgICAgIDEzODEKLSNkZWZpbmUgUEJGX1BPUlQwX1NUQVJUICAgICAgICAgMTM4MQorI2RlZmluZSBQQkZfQ09NTU9OX0VORCAgICAgICAgICAxNDYzCisjZGVmaW5lIFBCRl9QT1JUMF9TVEFSVCAgICAgICAgIDE0NjMKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMCwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0lGMF9FTkFCTEUsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDAsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMCwgMHgwfSwKLSNkZWZpbmUgUEJGX1BPUlQwX0VORCAgICAgICAgICAgMTM4NQotI2RlZmluZSBQQkZfUE9SVDFfU1RBUlQgICAgICAgICAxMzg1CisjZGVmaW5lIFBCRl9QT1JUMF9FTkQgICAgICAgICAgIDE0NjcKKyNkZWZpbmUgUEJGX1BPUlQxX1NUQVJUICAgICAgICAgMTQ2NwogCXtPUF9XUiwgUEJGX1JFR19JTklUX1AxLCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19NQUNfSUYxX0VOQUJMRSwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMSwgMHgwfSwKIAl7T1BfV1IsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1AxLCAweDB9LAotI2RlZmluZSBQQkZfUE9SVDFfRU5EICAgICAgICAgICAxMzg5Ci0jZGVmaW5lIFhDTV9DT01NT05fU1RBUlQgICAgICAgIDEzODkKKyNkZWZpbmUgUEJGX1BPUlQxX0VORCAgICAgICAgICAgMTQ3MQorI2RlZmluZSBYQ01fQ09NTU9OX1NUQVJUICAgICAgICAxNDcxCiAJe09QX1dSLCBYQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9YQ01fSERSX1AsIDB4MzE1MDAyMH0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9YQ01fSERSX1MsIDB4MzE1MDAyMH0sCkBAIC0xNjA3LDE1ICsxNzA1LDE4IEBACiAJe09QX1dSLCBYQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKIAl7T1BfV1IsIFhDTV9SRUdfRVhQUl9FVk5UX0lELCAweDMwfSwKIAl7T1BfV1IsIFhDTV9SRUdfU1RPUF9FVk5UX0lELCAweDMxfSwKLQl7T1BfV1IsIFhDTV9SRUdfU1RPUk1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19UU0VNX1dFSUdIVCwgMHg1fSwKLQl7T1BfV1IsIFhDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4Mn0sCi0Je09QX1dSLCBYQ01fUkVHX1VTRU1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19QQkZfV0VJR0hULCAweDd9LAotCXtPUF9XUiwgWENNX1JFR19OSUcxX1dFSUdIVCwgMHgxfSwKKwl7T1BfV1IsIFhDTV9SRUdfU1RPUk1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19UU0VNX1dFSUdIVCwgMHg2fSwKKwl7T1BfV1IsIFhDTV9SRUdfQ1NFTV9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBYQ01fUkVHX1VTRU1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19ET1JRX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFhDTV9SRUdfUEJGX1dFSUdIVCwgMHgwfSwKKwl7T1BfV1IsIFhDTV9SRUdfTklHMF9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBYQ01fUkVHX0NQX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIFhDTV9SRUdfWFNETV9XRUlHSFQsIDB4NX0sCi0Je09QX1dSLCBYQ01fUkVHX1hRTV9QX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFhDTV9SRUdfWFNETV9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBYQ01fUkVHX1hRTV9QX1dFSUdIVCwgMHg0fSwKKwl7T1BfV1IsIFhDTV9SRUdfWFFNX1NfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgWENNX1JFR19UTV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9YUU1fVVNFX1EsIDB4MX0sCiAJe09QX1dSLCBYQ01fUkVHX1hRTV9CWVBfQUNUX1VQRCwgMHg2fSwKIAl7T1BfV1IsIFhDTV9SRUdfVU5BX0dUX05YVF9RLCAweDB9LApAQCAtMTYzMywxNCArMTczNCwxNCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19YWF9NU0dfTlVNLCAweDFmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1hYX01TR19OVU0sIDB4MjB9LAogCXtPUF9aUiwgWENNX1JFR19YWF9UQUJMRSwgMHgxMn0sCi0Je09QX1NXX0UxLCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDJjY30sCi0Je09QX1NXX0UxSCwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAzMDJ9LAorCXtPUF9TV19FMSwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAyZDR9LAorCXtPUF9TV19FMUgsIFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWYwMzI5fSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMCwgMHhmfSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMSwgMHg3fSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMiwgMHhifSwKIAl7T1BfV1IsIFhDTV9SRUdfTl9TTV9DVFhfTERfMywgMHhlfSwKIAl7T1BfWlJfRTEsIFhDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKLQl7T1BfV1JfRTFILCBYQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4Y30sCisJe09QX1dSX0UxSCwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweGV9LAogCXtPUF9aUl9FMUgsIFhDTV9SRUdfTl9TTV9DVFhfTERfNSwgMHgzfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX1JFRzBfU1osIDB4NH0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9TVE9STTBfSUZFTiwgMHgxfSwKQEAgLTE2NjMsOCArMTc2NCw4IEBACiAJe09QX1dSLCBYQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgWENNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFhDTV9SRUdfWENNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBYQ01fQ09NTU9OX0VORCAgICAgICAgICAxNDUzCi0jZGVmaW5lIFhDTV9QT1JUMF9TVEFSVCAgICAgICAgIDE0NTMKKyNkZWZpbmUgWENNX0NPTU1PTl9FTkQgICAgICAgICAgMTUzOAorI2RlZmluZSBYQ01fUE9SVDBfU1RBUlQgICAgICAgICAxNTM4CiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTY3Myw4ICsxNzc0LDggQEAKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDEwLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCi0jZGVmaW5lIFhDTV9QT1JUMF9FTkQgICAgICAgICAgIDE0NjEKLSNkZWZpbmUgWENNX1BPUlQxX1NUQVJUICAgICAgICAgMTQ2MQorI2RlZmluZSBYQ01fUE9SVDBfRU5EICAgICAgICAgICAxNTQ2CisjZGVmaW5lIFhDTV9QT1JUMV9TVEFSVCAgICAgICAgIDE1NDYKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNjgzLDggKzE3ODQsOCBAQAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfQ01EMTEsIDB4Mn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKLSNkZWZpbmUgWENNX1BPUlQxX0VORCAgICAgICAgICAgMTQ2OQotI2RlZmluZSBYQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNDY5CisjZGVmaW5lIFhDTV9QT1JUMV9FTkQgICAgICAgICAgIDE1NTQKKyNkZWZpbmUgWENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTU1NAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE2OTQsOCArMTc5NSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzBfRU5EICAgICAgICAgICAxNDc4Ci0jZGVmaW5lIFhDTV9GVU5DMV9TVEFSVCAgICAgICAgIDE0NzgKKyNkZWZpbmUgWENNX0ZVTkMwX0VORCAgICAgICAgICAgMTU2MworI2RlZmluZSBYQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNTYzCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTcwNSw4ICsxODA2LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DMV9FTkQgICAgICAgICAgIDE0ODcKLSNkZWZpbmUgWENNX0ZVTkMyX1NUQVJUICAgICAgICAgMTQ4NworI2RlZmluZSBYQ01fRlVOQzFfRU5EICAgICAgICAgICAxNTcyCisjZGVmaW5lIFhDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE1NzIKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNzE2LDggKzE4MTcsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkMyX0VORCAgICAgICAgICAgMTQ5NgotI2RlZmluZSBYQ01fRlVOQzNfU1RBUlQgICAgICAgICAxNDk2CisjZGVmaW5lIFhDTV9GVU5DMl9FTkQgICAgICAgICAgIDE1ODEKKyNkZWZpbmUgWENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTU4MQogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE3MjcsOCArMTgyOCw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzNfRU5EICAgICAgICAgICAxNTA1Ci0jZGVmaW5lIFhDTV9GVU5DNF9TVEFSVCAgICAgICAgIDE1MDUKKyNkZWZpbmUgWENNX0ZVTkMzX0VORCAgICAgICAgICAgMTU5MAorI2RlZmluZSBYQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTkwCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTczOCw4ICsxODM5LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DNF9FTkQgICAgICAgICAgIDE1MTQKLSNkZWZpbmUgWENNX0ZVTkM1X1NUQVJUICAgICAgICAgMTUxNAorI2RlZmluZSBYQ01fRlVOQzRfRU5EICAgICAgICAgICAxNTk5CisjZGVmaW5lIFhDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE1OTkKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNzQ5LDggKzE4NTAsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkM1X0VORCAgICAgICAgICAgMTUyMwotI2RlZmluZSBYQ01fRlVOQzZfU1RBUlQgICAgICAgICAxNTIzCisjZGVmaW5lIFhDTV9GVU5DNV9FTkQgICAgICAgICAgIDE2MDgKKyNkZWZpbmUgWENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTYwOAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE3NjAsOCArMTg2MSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzZfRU5EICAgICAgICAgICAxNTMyCi0jZGVmaW5lIFhDTV9GVU5DN19TVEFSVCAgICAgICAgIDE1MzIKKyNkZWZpbmUgWENNX0ZVTkM2X0VORCAgICAgICAgICAgMTYxNworI2RlZmluZSBYQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNjE3CiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTc3MSw4ICsxODcyLDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DN19FTkQgICAgICAgICAgIDE1NDEKLSNkZWZpbmUgWFNFTV9DT01NT05fU1RBUlQgICAgICAgMTU0MQorI2RlZmluZSBYQ01fRlVOQzdfRU5EICAgICAgICAgICAxNjI2CisjZGVmaW5lIFhTRU1fQ09NTU9OX1NUQVJUICAgICAgIDE2MjYKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIFhTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTE4MjcsMTAgKzE5MjgsMTIgQEAKIAl7T1BfV1JfQVNJQywgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDFkY2Q2NTAwfSwKIAl7T1BfV1JfRU1VTF9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgwfSwKIAl7T1BfV1JfRlBHQSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0MH0sCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2QwMCwgMHg0fSwKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDYwLCAweDR9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgxfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDYwICsgMHgxMCwgMHgyMDJmM30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YzgsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHg0OH0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4NH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5YzggKyAweDEwLCAweDIwMzQ4fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDIwLCAweGM4fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjA4MCwgMHg0OH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAwMCwgMHgyfSwKQEAgLTE4MzksNjggKzE5NDIsNzMgQEAKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzY4LCAweDB9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMWE4LCAweDg2fSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzcwLCAweDIwMmVifSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzcwLCAweDIwMmY1fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjAwMCwgMHgyMH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I5MCwgMHg0MDJlZH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I5MCwgMHg0MDJmN30sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzYzgsIDB4MH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2UyMCwgMHgyMDJmYn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzZDAsIDB4MjAzNGF9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MTgsIDB4MX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIzZDAsIDB4MjAzMjF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzRjfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODMwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDk4LCAweDQwMzIzfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmMyMCwgMHgwfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4LCAweDB9LAotCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWM4LCAweDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZjF9LAotCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWI4LCAweDB9LAorCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzEwLCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MjAsIDB4MjAyZmR9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYzA4LCAweDIwMzUwfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YWMwLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDEwLCAweDF9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMDAsIDB4NH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNDAsIDB4MTB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmNTAsIDB4MjAyZjN9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDEwMDMyN30sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWY0OCwgMHgyMDJmZn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4MTAwMzUyfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIwMCwgMHg0fSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODNiMCwgMHgyMDMzN30sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg0MDgsIDB4MjAzNjJ9LAogCXtPUF9XUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDJmNX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMzOX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzAxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMzY0fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgxMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMwNX0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzQ5fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDMxMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDgwMzc0fSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgyMDAwMDAwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDMwZH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzYwLCAweDgwMzUxfSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhhOTAwMDB9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX0lOVF9UQUJMRSwgMHhhYzAwMDB9LAotCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMzE1fSwKLQl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAzNTl9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSwgMHgzNDRlMDAwMH0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSwgMHgzNDYyMDAwMH0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4ODQwZDE0fSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4MjQwZDE5fSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNlNzExYjM1fSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzZTk3MWIyMn0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgxZGQwMmFkMn0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MjE1NDJhYzh9LAotCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MWMwZDAsIDB4NDdlNjAzMTd9LAotCXtPUF9XUl82NF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDFjOGQwLCAweDQ2ZTYwMzVifSwKLSNkZWZpbmUgWFNFTV9DT01NT05fRU5EICAgICAgICAgMTY1MQotI2RlZmluZSBYU0VNX1BPUlQwX1NUQVJUICAgICAgICAxNjUxCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JhMCwgMHgxMH0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzMTl9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDM3Y30sCisJe09QX1pQX0UxLCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YjUwMDAwfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YmQwMDAwfSwKKwl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDMyMX0sCisJe09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzYTgsIDB4YjAzODR9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSwgMHgzMzY2MDAwMH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSwgMHgzNDA2MDAwMH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM4YjMwY2RhfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM3OTYwZDAyfSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDNiYjExYjA3fSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzYmMzMWFlOH0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgyYTI2MjlmNH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MzgyNjI5ZDl9LAorCXtPUF9XUl82NF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MWQ2YzAsIDB4NDUyODAzMjN9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDIwMDAwLCAweDEyNDUzN2UzfSwKKwl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19QUkFNICsgMHgyMjIyMCwgMHgzYmJjMDM4Nn0sCisjZGVmaW5lIFhTRU1fQ09NTU9OX0VORCAgICAgICAgIDE3NDEKKyNkZWZpbmUgWFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMTc0MQorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiYTAsIDB4MTR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjMDAwLCAweGZjfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzIwLCAweDFjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRhOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M0MCwgMHgyNH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0YTgsIDB4MTR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YX0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1MjgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNTQ4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDUwLCAweDZ9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjA4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjY2OCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM3OCwgMHhmY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2ZTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNzg4LCAweDI0fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjU4LCAweDB9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyN2M4LCAweDFjfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDEwLCAweDEwMDMxOX0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI4YTgsIDB4MjR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkNzgsIDB4MjAzMjV9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMDAwLCAweDI4fSwKLQl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODgsIDB4MTAwMzI3fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE0MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTAwLCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWUwLCAweDIwMzg4fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA4LCAweDF9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDAwLCAweDF9LAogCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjAsIDB4Mn0sCkBAIC0xOTEwLDMxICsyMDE4LDMzIEBACiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0MCwgMHgwfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwOCwgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDQ4LCAweGV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWM4LCAweDIwMzVkfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjOCwgMHgyMDM4YX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHgxfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmIxMCwgMHg0Mn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjOCwgMHgyMDMyOX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjOCwgMHgyMDMzN30sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMjAsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGIxMCwgMHg0Mn0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQyMCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMF9FTkQgICAgICAgICAgMTY4MwotI2RlZmluZSBYU0VNX1BPUlQxX1NUQVJUICAgICAgICAxNjgzCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2JlMCwgMHgxMH0sCisjZGVmaW5lIFhTRU1fUE9SVDBfRU5EICAgICAgICAgIDE3NzUKKyNkZWZpbmUgWFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMTc3NQorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiZjAsIDB4MTR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjM2YwLCAweGZjfSwKLQl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYzkwLCAweDFjfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjRlOCwgMHgxMH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2NkMCwgMHgyNH0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZjgsIDB4MTR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MjgsIDB4YX0sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1OTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNWQ4LCAweDI0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDY4LCAweDZ9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNjc4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjZmOCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mzc2OCwgMHhmY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3NTgsIDB4MWN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODE4LCAweDI0fSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYjVjLCAweDB9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyODM4LCAweDFjfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDUwLCAweDEwMDMyYn0sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5MzgsIDB4MjR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkODAsIDB4MjAzMzl9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhhMGEwLCAweDI4fSwKLQl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkYzgsIDB4MTAwMzNifSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTE3MCwgMHhjfSwKKwl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTA0LCAweDB9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWU4LCAweDIwMzhjfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTBjLCAweDF9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDA0LCAweDF9LAogCXtPUF9aUiwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjgsIDB4Mn0sCkBAIC0xOTQ0LDY4ICsyMDU0LDY4IEBACiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0NCwgMHgwfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTIwYywgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDgwLCAweGV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YWQwLCAweDIwMzVmfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFkMCwgMHgyMDM4ZX0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiYywgMHgxfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmMxOCwgMHg0Mn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDMzYn0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFkMCwgMHgyMDM0Yn0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZkMzAsIDB4NH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGMxOCwgMHg0Mn0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGQzMCwgMHg0fSwKLSNkZWZpbmUgWFNFTV9QT1JUMV9FTkQgICAgICAgICAgMTcxNQotI2RlZmluZSBYU0VNX0ZVTkMwX1NUQVJUICAgICAgICAxNzE1CisjZGVmaW5lIFhTRU1fUE9SVDFfRU5EICAgICAgICAgIDE4MDkKKyNkZWZpbmUgWFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMTgwOQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2UwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGI4LCAweDEwMDM2MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI5ZjAsIDB4MTAwMzkwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0OCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMF9FTkQgICAgICAgICAgMTcxOAotI2RlZmluZSBYU0VNX0ZVTkMxX1NUQVJUICAgICAgICAxNzE4CisjZGVmaW5lIFhTRU1fRlVOQzBfRU5EICAgICAgICAgIDE4MTIKKyNkZWZpbmUgWFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMTgxMgogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2U0LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGY4LCAweDEwMDM3MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzAsIDB4MTAwM2EwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMV9FTkQgICAgICAgICAgMTcyMQotI2RlZmluZSBYU0VNX0ZVTkMyX1NUQVJUICAgICAgICAxNzIxCisjZGVmaW5lIFhTRU1fRlVOQzFfRU5EICAgICAgICAgIDE4MTUKKyNkZWZpbmUgWFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMTgxNQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2U4LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTM4LCAweDEwMDM4MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNzAsIDB4MTAwM2IwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBiOCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DMl9FTkQgICAgICAgICAgMTcyNAotI2RlZmluZSBYU0VNX0ZVTkMzX1NUQVJUICAgICAgICAxNzI0CisjZGVmaW5lIFhTRU1fRlVOQzJfRU5EICAgICAgICAgIDE4MTgKKyNkZWZpbmUgWFNFTV9GVU5DM19TVEFSVCAgICAgICAgMTgxOAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2VjLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTc4LCAweDEwMDM5MX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhYjAsIDB4MTAwM2MwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBmMCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DM19FTkQgICAgICAgICAgMTcyNwotI2RlZmluZSBYU0VNX0ZVTkM0X1NUQVJUICAgICAgICAxNzI3CisjZGVmaW5lIFhTRU1fRlVOQzNfRU5EICAgICAgICAgIDE4MjEKKyNkZWZpbmUgWFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMTgyMQogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2YwLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWI4LCAweDEwMDNhMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhZjAsIDB4MTAwM2QwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTEyOCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNF9FTkQgICAgICAgICAgMTczMAotI2RlZmluZSBYU0VNX0ZVTkM1X1NUQVJUICAgICAgICAxNzMwCisjZGVmaW5lIFhTRU1fRlVOQzRfRU5EICAgICAgICAgIDE4MjQKKyNkZWZpbmUgWFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMTgyNAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2Y0LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWY4LCAweDEwMDNiMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiMzAsIDB4MTAwM2UwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE2MCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNV9FTkQgICAgICAgICAgMTczMwotI2RlZmluZSBYU0VNX0ZVTkM2X1NUQVJUICAgICAgICAxNzMzCisjZGVmaW5lIFhTRU1fRlVOQzVfRU5EICAgICAgICAgIDE4MjcKKyNkZWZpbmUgWFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMTgyNwogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2Y4LCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM4LCAweDEwMDNjMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNzAsIDB4MTAwM2YwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTE5OCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DNl9FTkQgICAgICAgICAgMTczNgotI2RlZmluZSBYU0VNX0ZVTkM3X1NUQVJUICAgICAgICAxNzM2CisjZGVmaW5lIFhTRU1fRlVOQzZfRU5EICAgICAgICAgIDE4MzAKKyNkZWZpbmUgWFNFTV9GVU5DN19TVEFSVCAgICAgICAgMTgzMAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjN2ZjLCAweDB9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTc4LCAweDEwMDNkMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiYjAsIDB4MTAwNDAwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTFkMCwgMHhlfSwKLSNkZWZpbmUgWFNFTV9GVU5DN19FTkQgICAgICAgICAgMTczOQotI2RlZmluZSBDRFVfQ09NTU9OX1NUQVJUICAgICAgICAxNzM5CisjZGVmaW5lIFhTRU1fRlVOQzdfRU5EICAgICAgICAgIDE4MzMKKyNkZWZpbmUgQ0RVX0NPTU1PTl9TVEFSVCAgICAgICAgMTgzMwogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ09OVFJPTDAsIDB4MX0sCiAJe09QX1dSX0UxSCwgQ0RVX1JFR19NRl9NT0RFLCAweDF9LAogCXtPUF9XUiwgQ0RVX1JFR19DRFVfQ0hLX01BU0swLCAweDNkMDAwfSwKIAl7T1BfV1IsIENEVV9SRUdfQ0RVX0NIS19NQVNLMSwgMHgzZH0sCi0Je09QX1dCX0UxLCBDRFVfUkVHX0wxVFQsIDB4MjAwMDMzZH0sCi0Je09QX1dCX0UxSCwgQ0RVX1JFR19MMVRULCAweDIwMDAzZTF9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRULCAweDIwMDUzZH0sCi0Je09QX1dCX0UxSCwgQ0RVX1JFR19NQVRULCAweDI4MDVlMX0sCisJe09QX1dCX0UxLCBDRFVfUkVHX0wxVFQsIDB4MjAwMDM0ZH0sCisJe09QX1dCX0UxSCwgQ0RVX1JFR19MMVRULCAweDIwMDA0MTB9LAorCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRULCAweDIwMDU0ZH0sCisJe09QX1dCX0UxSCwgQ0RVX1JFR19NQVRULCAweDI4MDYxMH0sCiAJe09QX1pSX0UxLCBDRFVfUkVHX01BVFQgKyAweDgwLCAweDJ9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRUICsgMHg4OCwgMHg2MDU1ZH0sCisJe09QX1dCX0UxLCBDRFVfUkVHX01BVFQgKyAweDg4LCAweDYwNTZkfSwKIAl7T1BfWlIsIENEVV9SRUdfTUFUVCArIDB4YTAsIDB4MTh9LAotI2RlZmluZSBDRFVfQ09NTU9OX0VORCAgICAgICAgICAxNzUwCi0jZGVmaW5lIERNQUVfQ09NTU9OX1NUQVJUICAgICAgIDE3NTAKKyNkZWZpbmUgQ0RVX0NPTU1PTl9FTkQgICAgICAgICAgMTg0NAorI2RlZmluZSBETUFFX0NPTU1PTl9TVEFSVCAgICAgICAxODQ0CiAJe09QX1pSLCBETUFFX1JFR19DTURfTUVNLCAweGUwfSwKIAl7T1BfV1IsIERNQUVfUkVHX0NSQzE2Q19JTklULCAweDB9LAogCXtPUF9XUiwgRE1BRV9SRUdfQ1JDMTZUMTBfSU5JVCwgMHgxfSwKQEAgLTIwMTMsMjQgKzIxMjMsMjcgQEAKIAl7T1BfV1JfRTFILCBETUFFX1JFR19QWFBfUkVRX0lOSVRfQ1JELCAweDJ9LAogCXtPUF9XUiwgRE1BRV9SRUdfUENJX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBETUFFX1JFR19HUkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgRE1BRV9DT01NT05fRU5EICAgICAgICAgMTc1NwotI2RlZmluZSBQWFBfQ09NTU9OX1NUQVJUICAgICAgICAxNzU3Ci0Je09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNTYzfSwKLQl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDAwLCAweDUwNjA5fSwKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MjAsIDB4NTA1Njh9LAotCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNjBlfSwKLQl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5ULCAweDUwNTZkfSwKLSNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTc2MgotI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxNzYyCisjZGVmaW5lIERNQUVfQ09NTU9OX0VORCAgICAgICAgIDE4NTEKKyNkZWZpbmUgUFhQX0NPTU1PTl9TVEFSVCAgICAgICAgMTg1MQorCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDU3M30sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDYzOH0sCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDIwLCAweDUwNTc4fSwKKwl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDYzZH0sCisJe09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDU3ZH0sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDIwLCAweDUwNjQyfSwKKyNkZWZpbmUgUFhQX0NPTU1PTl9FTkQgICAgICAgICAgMTg1NworI2RlZmluZSBDRkNfQ09NTU9OX1NUQVJUICAgICAgICAxODU3CiAJe09QX1pSX0UxSCwgQ0ZDX1JFR19MSU5LX0xJU1QsIDB4MTAwfSwKIAl7T1BfV1IsIENGQ19SRUdfQ09OVFJPTDAsIDB4MTB9LAogCXtPUF9XUiwgQ0ZDX1JFR19ESVNBQkxFX09OX0VSUk9SLCAweDNmZmZ9LAorCXtPUF9XUiwgQ0ZDX1JFR19JTlRFUkZBQ0VTLCAweDI4MDAwMH0sCiAJe09QX1dSLCBDRkNfUkVHX0xDUkVRX1dFSUdIVFMsIDB4ODQ5MjRhfSwKLSNkZWZpbmUgQ0ZDX0NPTU1PTl9FTkQgICAgICAgICAgMTc2NgotI2RlZmluZSBIQ19DT01NT05fU1RBUlQgICAgICAgICAxNzY2CisJe09QX1dSLCBDRkNfUkVHX0lOVEVSRkFDRVMsIDB4MH0sCisjZGVmaW5lIENGQ19DT01NT05fRU5EICAgICAgICAgIDE4NjMKKyNkZWZpbmUgSENfQ09NTU9OX1NUQVJUICAgICAgICAgMTg2MwogCXtPUF9aUl9FMSwgSENfUkVHX1VTVE9STV9BRERSX0ZPUl9DT0FMRVNDRSwgMHg0fSwKLSNkZWZpbmUgSENfQ09NTU9OX0VORCAgICAgICAgICAgMTc2NwotI2RlZmluZSBIQ19QT1JUMF9TVEFSVCAgICAgICAgICAxNzY3CisjZGVmaW5lIEhDX0NPTU1PTl9FTkQgICAgICAgICAgIDE4NjQKKyNkZWZpbmUgSENfUE9SVDBfU1RBUlQgICAgICAgICAgMTg2NAogCXtPUF9XUl9FMSwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9aUl9FMSwgSENfUkVHX1VDX1JBTV9BRERSXzAsIDB4Mn0sCiAJe09QX1dSX0UxLCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjA0OSw4ICsyMTYyLDggQEAKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDBfRU5EICAgICAgICAgICAgMTc4NQotI2RlZmluZSBIQ19QT1JUMV9TVEFSVCAgICAgICAgICAxNzg1CisjZGVmaW5lIEhDX1BPUlQwX0VORCAgICAgICAgICAgIDE4ODIKKyNkZWZpbmUgSENfUE9SVDFfU1RBUlQgICAgICAgICAgMTg4MgogCXtPUF9XUl9FMSwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9aUl9FMSwgSENfUkVHX1VDX1JBTV9BRERSXzEsIDB4Mn0sCiAJe09QX1dSX0UxLCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjA2OSw4ICsyMTgyLDggQEAKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfUE9SVDFfRU5EICAgICAgICAgICAgMTgwMwotI2RlZmluZSBIQ19GVU5DMF9TVEFSVCAgICAgICAgICAxODAzCisjZGVmaW5lIEhDX1BPUlQxX0VORCAgICAgICAgICAgIDE5MDAKKyNkZWZpbmUgSENfRlVOQzBfU1RBUlQgICAgICAgICAgMTkwMAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIwODYsOCArMjE5OSw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMwX0VORCAgICAgICAgICAgIDE4MTgKLSNkZWZpbmUgSENfRlVOQzFfU1RBUlQgICAgICAgICAgMTgxOAorI2RlZmluZSBIQ19GVU5DMF9FTkQgICAgICAgICAgICAxOTE1CisjZGVmaW5lIEhDX0ZVTkMxX1NUQVJUICAgICAgICAgIDE5MTUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDF9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMTAzLDggKzIyMTYsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DMV9FTkQgICAgICAgICAgICAxODMzCi0jZGVmaW5lIEhDX0ZVTkMyX1NUQVJUICAgICAgICAgIDE4MzMKKyNkZWZpbmUgSENfRlVOQzFfRU5EICAgICAgICAgICAgMTkzMAorI2RlZmluZSBIQ19GVU5DMl9TVEFSVCAgICAgICAgICAxOTMwCiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjEyMCw4ICsyMjMzLDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzJfRU5EICAgICAgICAgICAgMTg0OAotI2RlZmluZSBIQ19GVU5DM19TVEFSVCAgICAgICAgICAxODQ4CisjZGVmaW5lIEhDX0ZVTkMyX0VORCAgICAgICAgICAgIDE5NDUKKyNkZWZpbmUgSENfRlVOQzNfU1RBUlQgICAgICAgICAgMTk0NQogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4M30sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIxMzcsOCArMjI1MCw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMzX0VORCAgICAgICAgICAgIDE4NjMKLSNkZWZpbmUgSENfRlVOQzRfU1RBUlQgICAgICAgICAgMTg2MworI2RlZmluZSBIQ19GVU5DM19FTkQgICAgICAgICAgICAxOTYwCisjZGVmaW5lIEhDX0ZVTkM0X1NUQVJUICAgICAgICAgIDE5NjAKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDR9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMTU0LDggKzIyNjcsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DNF9FTkQgICAgICAgICAgICAxODc4Ci0jZGVmaW5lIEhDX0ZVTkM1X1NUQVJUICAgICAgICAgIDE4NzgKKyNkZWZpbmUgSENfRlVOQzRfRU5EICAgICAgICAgICAgMTk3NQorI2RlZmluZSBIQ19GVU5DNV9TVEFSVCAgICAgICAgICAxOTc1CiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHg1fSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjE3MSw4ICsyMjg0LDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzVfRU5EICAgICAgICAgICAgMTg5MwotI2RlZmluZSBIQ19GVU5DNl9TVEFSVCAgICAgICAgICAxODkzCisjZGVmaW5lIEhDX0ZVTkM1X0VORCAgICAgICAgICAgIDE5OTAKKyNkZWZpbmUgSENfRlVOQzZfU1RBUlQgICAgICAgICAgMTk5MAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4Nn0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIxODgsOCArMjMwMSw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM2X0VORCAgICAgICAgICAgIDE5MDgKLSNkZWZpbmUgSENfRlVOQzdfU1RBUlQgICAgICAgICAgMTkwOAorI2RlZmluZSBIQ19GVU5DNl9FTkQgICAgICAgICAgICAyMDA1CisjZGVmaW5lIEhDX0ZVTkM3X1NUQVJUICAgICAgICAgIDIwMDUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDd9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMjA1LDEwICsyMzE4LDEwIEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM3X0VORCAgICAgICAgICAgIDE5MjMKLSNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMTkyMwotCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0NPTlRST0wwLCAweGUzODM0MH0sCisjZGVmaW5lIEhDX0ZVTkM3X0VORCAgICAgICAgICAgIDIwMjAKKyNkZWZpbmUgUFhQMl9DT01NT05fU1RBUlQgICAgICAgMjAyMAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0RSQU1fQUxJR04sIDB4MX0sCisJe09QX1dSLCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKIAl7T1BfV1IsIFBYUDJfUkVHX1BHTF9DT05UUk9MMSwgMHgzYzEwfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19SUV9FTFRfRElTQUJMRSwgMHgxfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19XUl9SRVZfTU9ERSwgMHgwfSwKQEAgLTIyMjAsNyArMjMzMyw3IEBACiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1RTRE1fNywgMHhmZmZmZmZmZn0sCi0Je09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmZmZmZmZmZn0sCisJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMiwgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMywgMHhmZmZmZmZmZn0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fNCwgMHhmZmZmZmZmZn0sCkBAIC0yMjQ3LDYgKzIzNjAsNyBAQAogCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzEsIDB4ZmZmZjMzNDB9LAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDA1MDAwfSwKIAl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9JTlRfVVNETV8wLCAweGYwMDAzMDAwfSwKKwl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMSwgMHhmMDAwODAwMH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTYsIDB4OH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTksIDB4OH0sCiAJe09QX1dSLCBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTEwLCAweDh9LApAQCAtMjMyMyw5ICsyNDM3LDggQEAKIAl7T1BfV1IsIFBYUDJfUkVHX1BTV1JRX0JXX1dSLCAweDEwNjQ0MH0sCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfUlFfSUxUX01PREUsIDB4MX0sCiAJe09QX1dSLCBQWFAyX1JFR19SUV9SQkNfRE9ORSwgMHgxfSwKLQl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfQ09OVFJPTDAsIDB4ZTM4MzQwfSwKLSNkZWZpbmUgUFhQMl9DT01NT05fRU5EICAgICAgICAgMjA0MAotI2RlZmluZSBNSVNDX0FFVV9DT01NT05fU1RBUlQgICAyMDQwCisjZGVmaW5lIFBYUDJfQ09NTU9OX0VORCAgICAgICAgIDIxMzcKKyNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX1NUQVJUICAgMjEzNwogCXtPUF9aUiwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wLCAweDE2fSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFMV9OSUdfMCwgMHg1NTU0MDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTJfTklHXzAsIDB4NTU1NTU1NTV9LApAQCAtMjM0NSw4ICsyNDU4LDggQEAKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfRU5BQkxFNF9QWFBfMSwgMHgwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfQ0xSX0xBVENIX1NJR05BTCwgMHhjMDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX01BU0ssIDB4M30sCi0jZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9FTkQgICAgIDIwNTkKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfU1RBUlQgICAgMjA1OQorI2RlZmluZSBNSVNDX0FFVV9DT01NT05fRU5EICAgICAyMTU2CisjZGVmaW5lIE1JU0NfQUVVX1BPUlQwX1NUQVJUICAgIDIxNTYKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCwgMHhiZjVjMDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCAweGZmNWMwMDAwfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMF9PVVRfMCwgMHhmZmY1MWZlZn0sCkBAIC0yMzc5LDggKzI0OTIsOCBAQAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18wLCAweDB9LAogCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18wLCAweDN9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQwX0VORCAgICAgIDIwOTEKLSNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfU1RBUlQgICAgMjA5MQorI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9FTkQgICAgICAyMTg4CisjZGVmaW5lIE1JU0NfQUVVX1BPUlQxX1NUQVJUICAgIDIxODgKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCwgMHhiZjVjMDAwMH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wLCAweGZmNWMwMDAwfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX0ZVTkNfMV9PVVRfMCwgMHhmZmY1MWZlZn0sCkBAIC0yNDEzLDcgKzI1MjYsNyBAQAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzFfRlVOQ18xLCAweDB9LAogCXtPUF9aUl9FMSwgTUlTQ19SRUdfQUVVX0lOVkVSVEVSXzJfRlVOQ18xLCAweDN9LAogCXtPUF9XUl9FMSwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzEsIDB4N30sCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQxX0VORCAgICAgIDIxMjMKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDFfRU5EICAgICAgMjIyMAogCiB9OwogCkBAIC0yNTEyLDcyICsyNjI1LDY0IEBACiAJMHgwMDAwMDIwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDBjMCwKLQkweDAwMDA2MTgwLCAweDAwMDA4MjQwLCAweDAwMDBhMzAwLCAweDAwMDBjM2MwLCAweDAwMDBlNDgwLCAweDAwMDEwNTQwLAotCTB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsIDB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsIDB4MDAwMWE5MDAsIDB4MDAwMWM5YzAsCi0JMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwgMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwgMHgwMDAyNmQ4MCwgMHgwMDAyOGU0MCwKLQkweDAwMDJhZjAwLCAweDAwMDJjZmMwLCAweDAwMDJmMDgwLCAweDAwMDMxMTQwLCAweDAwMDMzMjAwLCAweDAwMDM1MmMwLAotCTB4MDAwMzczODAsIDB4MDAwMzk0NDAsIDB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsIDB4MDAwM2Y2ODAsIDB4MDAwNDE3NDAsCi0JMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwgMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwgMHgwMDAwODAwMCwgMHgwMDAxMDM4MCwKLQkweDAwMDE4NzAwLCAweDAwMDIwYTgwLCAweDAwMDI4ZTAwLCAweDAwMDMxMTgwLCAweDAwMDM5NTAwLCAweDAwMDQxODgwLAotCTB4MDAwNDljMDAsIDB4MDAwNTFmODAsIDB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsIDB4MDAwNmFhMDAsIDB4MDAwNzJkODAsCi0JMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwgMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwgMHgwMDA5YmYwMCwgMHgwMDBhNDI4MCwKLQkweDAwMGFjNjAwLCAweDAwMGI0OTgwLCAweDAwMGJjZDAwLCAweDAwMGM1MDgwLCAweDAwMGNkNDAwLCAweDAwMGQ1NzgwLAotCTB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsCisJMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAorCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCisJMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKKwkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAorCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCisJMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKKwkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAorCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCisJMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKKwkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAorCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKLQkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAotCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCi0JMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKLQkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAotCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCi0JMHhjY2NjY2NjMSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwODAsCisJMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwgMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwgMHgwMDAwODM4MCwKKwkweDAwMDA5NDAwLCAweDAwMDBhNDgwLCAweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLCAweDAwMDBlNjgwLAorCTB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsIDB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsIDB4MDAwMTQ5ODAsCisJMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwgMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwgMHgwMDAxYWM4MCwKKwkweDAwMDFiZDAwLCAweDAwMDFjZDgwLCAweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLCAweDEwMDAwMDAwLAorCTB4MDAwMDI4YWQsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAzNTA4MDQsIDB4Y2NjY2NjYzEsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHg3MDU4MTAzYywgMHgwMDAwMDAwMCwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKIAkweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwKLQkweDAwMDAzNTAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKKwkweDAwMDAzNTAwLCAweDAwMGUwMWI3LCAweDAxMTYwMGQ2LCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAogCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCiAJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMTAwMDAwLAotCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDcyMDFiYiwgMHgwMTIzMDBmMywgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywKKwkweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCiAJMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LAogCTB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsCi0JMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsCisJMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKIAkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCkBAIC0yNTg1LDQxICsyNjkwLDQxIEBACiAJMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKIAkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAogCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKIAkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCiAJMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjhhLAotCTB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAorCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKIAkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsCi0JMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCiAJMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKLQkweDA0MGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOGEsIDB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKKwkweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAorCTB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAorCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCisJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDQwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKKwkweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCiAJMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLApAQCAtMjY0MSwxNiArMjc0NiwyNiBAQAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCiAJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsIDB4MDAwNzAxMDAsIDB4MDAwMjgxNzAsCi0JMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwgMHgwMDAxMDM3MCwgMHgwMDA4MDAwMCwKLQkweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLCAweDAwMDEwMjAwLCAweDAwMDcwMjEwLAotCTB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsCi0JMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwgMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwKLQkweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LCAweDAwMDgwMzgwLCAweDAwMDI4MDAwLAotCTB4MDAwYjgwMjgsIDB4MDAwMjAwZTAsIDB4MDAwMTAxMDAsIDB4MDAwMDgxMTAsIDB4MDAwMDAxMTgsIDB4Y2NjY2NjY2MsCi0JMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAKKwkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhjZGNkY2RjZCwgMHgwMDEwMDAwMCwgMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwKKwkweDAwMDEwMjcwLCAweDAwMGYwMjgwLCAweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLAorCTB4MDAwYjgxMjgsIDB4MDAwMjAxZTAsIDB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsCisJMHgwMDA4MDBmMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwKKwkweDAwMDgwMzM4LCAweDAwMTAwMDAwLCAweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLAorCTB4MDAwMTgyODAsIDB4MDAwZTgyOTgsIDB4MDAwODAzODAsIDB4MDAwMjgwMDAsIDB4MDAwYjgwMjgsIDB4MDAwMjAwZTAsCisJMHgwMDAxMDEwMCwgMHgwMDAwODExMCwgMHgwMDAwMDExOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKKwkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAorCTB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgaW5pdF9kYXRhX2UxaFtdID0gewpAQCAtMjc1MSwxMTk3MyArMjg2NiwxMzQ1NyBAQAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKLQkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLAotCTB4MDAwMGEzMDAsIDB4MDAwMGMzYzAsIDB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsCi0JMHgwMDAxNjc4MCwgMHgwMDAxODg0MCwgMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwKLQkweDAwMDIyYzAwLCAweDAwMDI0Y2MwLCAweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLAotCTB4MDAwMmYwODAsIDB4MDAwMzExNDAsIDB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsCi0JMHgwMDAzYjUwMCwgMHgwMDAzZDVjMCwgMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwKLQkweDAwMDQ3OTgwLCAweDAwMDQ5YTQwLCAweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLAotCTB4MDAwMjhlMDAsIDB4MDAwMzExODAsIDB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsCi0JMHgwMDA1YTMwMCwgMHgwMDA2MjY4MCwgMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwKLQkweDAwMDhiODAwLCAweDAwMDkzYjgwLCAweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLAotCTB4MDAwYmNkMDAsIDB4MDAwYzUwODAsIDB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsCi0JMHgwMDAwMDAyOCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwKLQkweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLCAweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLAotCTB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsIDB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsCi0JMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwgMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwKLQkweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLCAweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLAotCTB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAwMDA2MDQsCi0JMHhjY2NjY2NjNSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwKLQkweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLAotCTB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsCi0JMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywKKwkweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAorCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwKKwkweDAwMDAyMDAwLCAweDAwMDA0MGMwLCAweDAwMDA2MTgwLCAweDAwMDA4MjQwLCAweDAwMDBhMzAwLCAweDAwMDBjM2MwLAorCTB4MDAwMGU0ODAsIDB4MDAwMTA1NDAsIDB4MDAwMTI2MDAsIDB4MDAwMTQ2YzAsIDB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsCisJMHgwMDAxYTkwMCwgMHgwMDAxYzljMCwgMHgwMDAxZWE4MCwgMHgwMDAyMGI0MCwgMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwKKwkweDAwMDI2ZDgwLCAweDAwMDI4ZTQwLCAweDAwMDJhZjAwLCAweDAwMDJjZmMwLCAweDAwMDJmMDgwLCAweDAwMDMxMTQwLAorCTB4MDAwMzMyMDAsIDB4MDAwMzUyYzAsIDB4MDAwMzczODAsIDB4MDAwMzk0NDAsIDB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsCisJMHgwMDAzZjY4MCwgMHgwMDA0MTc0MCwgMHgwMDA0MzgwMCwgMHgwMDA0NThjMCwgMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwKKwkweDAwMDA4MDAwLCAweDAwMDEwMzgwLCAweDAwMDE4NzAwLCAweDAwMDIwYTgwLCAweDAwMDI4ZTAwLCAweDAwMDMxMTgwLAorCTB4MDAwMzk1MDAsIDB4MDAwNDE4ODAsIDB4MDAwNDljMDAsIDB4MDAwNTFmODAsIDB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsCisJMHgwMDA2YWEwMCwgMHgwMDA3MmQ4MCwgMHgwMDA3YjEwMCwgMHgwMDA4MzQ4MCwgMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwKKwkweDAwMDliZjAwLCAweDAwMGE0MjgwLCAweDAwMGFjNjAwLCAweDAwMGI0OTgwLCAweDAwMGJjZDAwLCAweDAwMGM1MDgwLAorCTB4MDAwY2Q0MDAsIDB4MDAwZDU3ODAsIDB4MDAwZGRiMDAsIDB4MDAwMDE5MDAsIDB4MDAwMDAwMjgsIDB4MDAxMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDEwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCi0JMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsCi0JMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwKLQkweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAotCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCi0JMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAotCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKLQkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLAotCTB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsCi0JMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywKLQkweDA1NmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAotCTB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAotCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCi0JMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjhhLCAweDA0MmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFhZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1OGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsCi0JMHgwMDA3MDEwMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwKLQkweDAwMDEwMzcwLCAweDAwMDgwMDAwLCAweDAwMDgwMDgwLCAweDAwMDI4MTAwLCAweDAwMGI4MTI4LCAweDAwMDIwMWUwLAotCTB4MDAwMTAyMDAsIDB4MDAwNzAyMTAsIDB4MDAwMjAyODAsIDB4MDAwZjAwMDAsIDB4MDAwODAwZjAsIDB4MDAwMjgxNzAsCi0JMHgwMDBiODE5OCwgMHgwMDAyMDI1MCwgMHgwMDAxMDI3MCwgMHgwMDBiODI4MCwgMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwKLQkweDAwMDgwMTAwLCAweDAwMDI4MTgwLCAweDAwMGI4MWE4LCAweDAwMDIwMjYwLCAweDAwMDE4MjgwLCAweDAwMGU4Mjk4LAotCTB4MDAwODAzODAsIDB4MDAwZDAwMDAsIDB4MDAwMDAwZDAsIDB4MDAwMjgwZDAsIDB4MDAwYjgwZjgsIDB4MDAwMjAxYjAsCi0JMHgwMDAxMDFkMCwgMHgwMDBjODFlMCwgMHgwMDAwMDJhOCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAotCTB4MDAwMDIwMDAKKwkweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwgMHgwMDAwMTAwMCwKKwkweDAwMDAyMDgwLCAweDAwMDAzMTAwLCAweDAwMDA0MTgwLCAweDAwMDA1MjAwLCAweDAwMDA2MjgwLCAweDAwMDA3MzAwLAorCTB4MDAwMDgzODAsIDB4MDAwMDk0MDAsIDB4MDAwMGE0ODAsIDB4MDAwMGI1MDAsIDB4MDAwMGM1ODAsIDB4MDAwMGQ2MDAsCisJMHgwMDAwZTY4MCwgMHgwMDAwZjcwMCwgMHgwMDAxMDc4MCwgMHgwMDAxMTgwMCwgMHgwMDAxMjg4MCwgMHgwMDAxMzkwMCwKKwkweDAwMDE0OTgwLCAweDAwMDE1YTAwLCAweDAwMDE2YTgwLCAweDAwMDE3YjAwLCAweDAwMDE4YjgwLCAweDAwMDE5YzAwLAorCTB4MDAwMWFjODAsIDB4MDAwMWJkMDAsIDB4MDAwMWNkODAsIDB4MDAwMWRlMDAsIDB4MDAwMWVlODAsIDB4MDAwMWZmMDAsCisJMHgxMDAwMDAwMCwgMHgwMDAwMjhhZCwgMHgwMDAwMDAwMCwgMHgwMDAxMDAwMSwgMHgwMDM1MDgwNCwgMHhjY2NjY2NjNSwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDcwNTgxMDNjLCAweDAwMDAwMDAwLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLAorCTB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsCisJMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywKKwkweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMGUwMjMyLCAweDAxMTYwMGQ2LAorCTB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA3MjAyMzYsIDB4MDEyMzAwZjMsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwZWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLAorCTB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDJmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywKKwkweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsIDB4MzAyZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMWVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLAorCTB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDU2ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywKKwkweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywKKwkweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzEwZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmYzLCAweDMxNmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzBiZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMTQsIDB4ZjNjZjNjZjMsCisJMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNywgMHgzMWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYwLCAweDMwN2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweDAwMTAwMDAwLCAweDAwMDcwMTAwLAorCTB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwZjAyODAsIDB4MDAwMTAzNzAsCisJMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwgMHgwMDAxMDIwMCwKKwkweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LAorCTB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsIDB4MDAxMDAwMDAsIDB4MDAwODAxMDAsCisJMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwgMHgwMDBlODI5OCwgMHgwMDA4MDM4MCwKKwkweDAwMGIwMDAwLCAweDAwMDEwMGIwLCAweDAwMDI4MGMwLCAweDAwMDU4MGU4LCAweDAwMDIwMTQwLCAweDAwMDEwMTYwLAorCTB4MDAwZTAxNzAsIDB4MDAwMzgyNTAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCisJMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwKKwkweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDA0MDAyMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDE5ZDliMzhhLCAweDIyNzE3NjE4LAotCTB4YTcwMTQzZjgsIDB4YTQzMDMzMzIsIDB4MTAyNjcxMDMsIDB4OTdlMjA0YWYsIDB4YWYwYzBjOGMsIDB4MmZkNzg5MTgsCi0JMHhjZjYwODYyMSwgMHgzODYwNjYxMCwgMHg0MjA2YzQwMiwgMHgyMjQ1MGMwYywgMHhhMDdhZjEwOCwgMHhmZTQwN2I5YSwKLQkweGI2OThhODQyLCAweDc2YzMwMzI4LCAweDNiZjc4MWQxLCAweDM0OTU3MDM1LCAweDI0YTQ1OGE2LCAweDQ1OGQ1ZDgyLAotCTB4YTBkNzE5MWUsIDB4NDQ5NGVmYzksIDB4ZDAxMmQ3ZTUsIDB4NDUzOGQwM2YsIDB4NTEzZjk1MDksIDB4NTQ3ZjQyMDEsCi0JMHgzNDJmYTY4NCwgMHhmOTUwNDlmOSwgMHhhNTdmNTAzOSwgMHg3NzM3NjEyOSwgMHgwMDFlNTQyZSwgMHg2MWFhOGE5MiwKLQkweDAwMDAwMzYwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgxOWQ5NDU4YSwgMHgxMTM4ZmMxOCwKKwkweDU5ODBhMWZjLCAweGQ4MTgxOTk4LCAweDg4MDM5ODgwLCAweDgxYjg4MDNkLCAweDkxYTE4MTkxLCAweGRhZmQ3ODkxLAorCTB4YmY3NjA4NjIsIDB4NmVjMzAzMzAsIDB4MDIxMWU2MjAsIDB4MTA4MjIzOWEsIDB4ZjM1NDAyOWYsIDB4MGY1ZmM4MDYsCisJMHg2NTEyYjMxNSwgMHgzYTI2Mzg2MCwgMHgwNmE3N2VmMCwgMHgyOThkMmFkZSwgMHhjMTEyNDUzNiwgMHgxZTQ1ODZkZSwKKwkweDkzNDc2ZjE5LCAweGNhODkyMmZmLCAweGZmNDA0MWRmLCAweDY1Mjk2MzQwLCAweDIyOWRiZTU0LCAweDA0YTY1ZTg0LAorCTB4ZTRkMWE1YTEsIDB4ZDdmMmExZWQsIDB4NTE5MmZlYTEsIDB4MGRlZTZlYzYsIDB4ZjgwMDNjYTgsIDB4NjA2NTQ5NWMsCisJMHgwMDYwNjU0OQogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX3ByYW1fZGF0YV9lMVtdID0gewogCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4NDk5OTljY2UsCi0JMHgyMDRlNGNjZSwgMHgzMDg0MDkwOSwgMHg0MzUxMTg3OSwgMHg3YzA2MWUxYywgMHgyMDEyNzZmNCwgMHgwNmJmMmFlNSwKLQkweDBlYTJhMTdjLCAweDJkZTQyMTA4LCAweGViZjhmZWE1LCAweDA5MjEzMmZkLCAweGY2MzZjNTQ0LCAweGRhMmY0NWEyLAotCTB4MDVhODU1ZTEsIDB4YTE4MGQwM2IsIDB4NGEwMGVlMDUsIDB4NzgzNmRhYTEsIDB4ZjVhYjE1YmQsIDB4NjJhMjk2OGUsCi0JMHg5NmFkMjI0OCwgMHhiZmNiMTdmZSwgMHgyNGZiZGFkNiwgMHgwMDY2NGU3MywgMHhiYmY3YmRjYiwgMHg5ZmE3ZWZkNywKLQkweGVjZTdkOWRkLCAweGViZGFmN2IzLCAweDdiNWFkN2I1LCAweDVkOGEzZGVkLCAweDE5ZDdlYTYyLCAweGEwZmY4NzNiLAotCTB4YzYzMWIzZWMsIDB4OWYyYzE5YWUsIDB4MjNhNTdjYzgsIDB4NmFkOGNiZDcsIDB4MzEyN2Q0M2IsIDB4MGY2MjNjMTYsCi0JMHg1YjE4OTI2ZCwgMHhiNTlmZGEzMiwgMHg3MWNhMGQzMCwgMHhiYzIwYmU2OSwgMHhlYmUxNjc2NywgMHhjNjU0YzYxMiwKLQkweDliNGFhZGZmLCAweGU4ZjJjOTk0LCAweGYwNzNiOWY5LCAweGYzMGY4MWRjLCAweDU4NTY0YjE5LCAweDYzMDI2NTMwLAotCTB4YWZjYzZjMmIsIDB4OGZiYTgzMGYsIDB4ZmM5YzBmYjEsIDB4N2ZmODczOWIsIDB4ZjYxYjI0YzEsIDB4YmY4NzQyMzMsCi0JMHhhZjNlZGZhMSwgMHg4MTRmNjgyZCwgMHhlZGNkYjM3ZSwgMHgxMjE1NDk0ZSwgMHhkNWRiMTk5MywgMHgxNDBiZDJjNCwKLQkweDljOWFiYWM2LCAweDQ5YjRmZTU0LCAweDYwMjgyZjRmLCAweDI2NTM0ZjZjLCAweDc5MzVmN2Q1LCAweDhkMzQ4Y2E5LAotCTB4OWEwN2U3YTUsIDB4YjM0ZjU0N2MsIDB4ZjdlM2Q3ZjUsIDB4MmI3YzhlMjMsIDB4Y2UwZDE1OTUsIDB4NjhhZTVhZGYsCi0JMHgwNjBiNzE4MiwgMHg2NGNjN2ZlYiwgMHhmOWUwMDU0MSwgMHhhZmVlYzJhMywgMHg1ZjlhZWY4MCwgMHg4NTEyOTg5ZiwKLQkweDgwMmM5OWYyLCAweGY3ZTg2NTM2LCAweDQ1ZmIyZWNmLCAweDhjZTFiNGZlLCAweDM4N2MzZDY1LCAweDY4NDRkYTdmLAotCTB4ZTEzOWIxMjcsIDB4ODc0NTljMjIsIDB4ZTI1YzZiMzQsIDB4NzdiMTlmNzEsIDB4Y2RjMDMyYTQsIDB4Njk5MTgwMmQsCi0JMHhiOWI1OGM5OSwgMHg0ZjJlNmZmYSwgMHg0NGY1Y2M2NSwgMHgwYjlhN2ZiNiwgMHg1ZDBjZGRlNiwgMHgyZWVjNjQ4YywKLQkweGRlMGMxMDU2LCAweGY4MWZmZDAwLCAweGU4MDUyNWI4LCAweDYxNDk3NmExLCAweDRiMjZjZDc4LCAweGQwMTJjZDE1LAotCTB4N2NjZWRkOGIsIDB4YTUzODcwOWIsIDB4ZDQxNDc5YTIsIDB4ZGU2MGVlZmIsIDB4ZTM4M2JkYzcsIDB4OTg4MGM1ZGMsCi0JMHg0NmNjZDhlOSwgMHgzMmE4NjRlNSwgMHhhNWRkODdlOCwgMHhlMmU1MzY4NiwgMHgxNWM1ZmQ4NywgMHgyZmI3MTJlMywKLQkweGQ1MTdmODM5LCAweGY2ZjFhNmViLCAweDA3OGQzMjhmLCAweDdmMTNiOWRmLCAweGNiZTA3NTk3LCAweGFlZjdkNzdkLAotCTB4Nzg4NDIzMzIsIDB4ZTExZjk4NTMsIDB4YzY1Nzc1M2IsIDB4ZGUyNWM3YmEsIDB4N2Q4ZjE2M2UsIDB4YzcwYWFiMmEsCi0JMHg4ZTE1NjdhMSwgMHg2NmRjZmMwYiwgMHgzNjdiNzRlNywgMHhiMThkNGExNywgMHgxNjY2MzgzNSwgMHg5YzYyYjU2MywKLQkweDAzZDk1YTI5LCAweDMwMDBiMjU4LCAweGI1OGNiNWU3LCAweGRkYTBiZDIwLCAweDNhYmY2ODk0LCAweGRmNGFlMDBmLAotCTB4ODUyYTRiMzMsIDB4MGFmMWZhN2EsIDB4ZjIxMTVlNjksIDB4MTBjZjQxYTEsIDB4YjEyNTlmZjUsIDB4OWVmODFkOGEsCi0JMHg3MGNhOTJjZCwgMHhlNzFmM2IxYywgMHg4YjUwZmU4NiwgMHhlODZlZTAwNywgMHhlYzllZGRjYSwgMHg2MTk0ZmRlNSwKLQkweDQ4NTUzZmJiLCAweDM4NThiNWYzLCAweDdhNGZkNGJkLCAweGRmMDM4YzE3LCAweDM4YzBmN2E3LCAweGE1NmIzZWYwLAotCTB4ZmU2OWJhYzQsIDB4ZTFhNjE0ZGUsIDB4MzJjNjdlNzgsIDB4NzBhNmE0NDAsIDB4YThkOTkwOTksIDB4Nzg2N2U0MjQsCi0JMHhmYzgxNjVhZSwgMHgzZjJlMzM2NCwgMHg4YmU2MzVhNywgMHg5ZjczN2UwMCwgMHhkMGQ0N2NkNCwgMHg3ODM1NzlhYiwKLQkweDY5Yzg1YTNmLCAweDI2NmFhMDc2LCAweDAxYjYzMGYzLCAweDUzMDU5M2QwLCAweDdjYThkZDFlLCAweGIzOTE4ZDEwLAotCTB4Y2RhMzczMzEsIDB4OTY2M2ZhMjgsIDB4OTk3YjlmOTksIDB4OWNmMjg2ZDcsIDB4Y2YzZjM0MWIsIDB4YmZkNzM3NmYsCi0JMHgyNzY5ZGNjZCwgMHhkYzNmODJhZSwgMHg4ZTRlN2RjYywgMHhjMGUzOGYzMywgMHgxMmNmMDBkNCwgMHg2ZmMwZWYyMSwKLQkweGFkYmYyYzZhLCAweDVhMTk2MjZkLCAweDkxMzk2MjQxLCAweDVkY2UxYzk2LCAweGI3Njg3YTg5LCAweGY3YzA3M2U0LAotCTB4OTA3YjYwMmYsIDB4NmVmODkwZWYsIDB4MDVkN2E4YmQsIDB4MGQ1ZDg1NTUsIDB4MWUyODIwMjUsIDB4OTU4YWZjN2YsCi0JMHgxZmJhNDA2ZSwgMHgxMDFiNjU2NywgMHhiZjRhMGRmZiwgMHgwZDdjMDNhYSwgMHhhNDNmYWE4ZCwgMHgxN2JmNmQwZCwKLQkweGQ3ZGIxMTE4LCAweDRlMDNiZTJiLCAweDk5YmZiZjE4LCAweGY4YzNkNmY5LCAweDE5N2FlYzRiLCAweGVjM2M5N2Q2LAotCTB4ZDc5OGJkMjUsIDB4N2U0NzJkMWUsIDB4ZWEwNWQzMWQsIDB4ZmJmMDc3MmEsIDB4Mjc2NzgwOGIsIDB4ZWNmMDAxYzIsCi0JMHg5N2Y0ZTNlNCwgMHhkZmVkZmVhMywgMHhiOWY1YjEyYiwgMHg3N2VmMGUzOCwgMHgxNjVjZWVjOSwgMHhlNzBjNGRjYywKLQkweGZjNGVjYzczLCAweGJjMGI0MGI0LCAweDI2N2VlNTgyLCAweDAyYzYyNzI5LCAweDgzY2MzZDlhLCAweGNhYTk2OGY0LAotCTB4NTQzOTRlZmIsIDB4ZTlmN2M2OWYsIDB4ZjljY2Y1ODMsIDB4MDAwMzMyMzMsIDB4NjYxOGQ2NTcsIDB4YjNhNTU3YTIsCi0JMHg3YWY1MDczMSwgMHgxY2I4NDU3NSwgMHgyNWMzZTJmOSwgMHgxMmMwYWNhZiwgMHgwMGFlOWNmMCwgMHgyYTM4OGZiZSwKLQkweGVhN2VjNzVlLCAweGEyMTYzNmU2LCAweGU4NzBlZGM4LCAweDdiMWFmZTM0LCAweDcyMzdkNjQ3LCAweDFmYTUwZjExLAotCTB4ZDA2ZmMwMmIsIDB4MTg2NTMwNmQsIDB4ZmY0NTk1ZjIsIDB4YzYwZmJmYzMsIDB4OTg5Y2JhOGEsIDB4MTcyYTE3ZWUsCi0JMHhlMjBhM2Y2MCwgMHhmNTlmY2I4ZCwgMHgwZjQyMDdmZCwgMHhmODI2MWU4MSwgMHg5NTdlY2JiYywgMHhiNjNjMzA1ZiwKLQkweGMxN2U3YWZlLCAweDA5NTAwMTQ0LCAweDEzZjBjYmMxLCAweDQ1NTJhMmM2LCAweDY2M2RiZDFjLCAweGE1NjFlOTc3LAotCTB4ZmYzYzMxMzgsIDB4NzQwNGYzZDksIDB4MDAxYTdjZDIsIDB4NzUyN2M4YjcsIDB4MWNiNDM1NmUsIDB4YTc3NTNkZjAsCi0JMHhlMDc1ZjIzZCwgMHg1Mjc1YmE5MywgMHhkYjc1MDFjOCwgMHhlZmJkMTczZSwgMHgxMWViY2I1ZCwgMHhlOWY1Y2FiNywKLQkweDBhODNhODQ2LCAweDdmNzQ3MDZjLCAweGIzZTQ3YWZiLCAweDhmNWIzMjlkLCAweGY1ODU4ZWRkLCAweDA5Y2NmNDE4LAotCTB4YzQ5YjNiMDEsIDB4MTc0YWU3ZDcsIDB4ZGJhZGQ2YWYsIDB4NWY3ZTFmN2YsIDB4MmU2MGU1ZDUsIDB4Zjc2ZWFmZTgsCi0JMHg4N2FmOWJhMiwgMHg3NmMzYTJmYSwgMHgzNmVhNGQ4NiwgMHhhMTIzYWIzNSwgMHhkN2M0MzhiZSwgMHgwZTMyYmVhNSwKLQkweDRjOTc3MDVmLCAweGE3OWY0YmViLCAweGEwNzZlMzNiLCAweDI3MjZjOWNmLCAweGQwZjE4MmYzLCAweGI4Y2VlZWUyLAotCTB4M2FhZGY4MGQsIDB4YmYxY2JkYjQsIDB4ZjkyYWRlYWIsIDB4Nzc1M2VkMTAsIDB4ODU5NDNhNmUsIDB4OTcyMWZhZjMsCi0JMHhjOTJkOWFmMywgMHgwZmUwNmJjYywgMHgyOWQxM2JmZSwgMHhlZjBlYmU0NywgMHgxOTNjYzA5NywgMHg3NTg4YmJmNCwKLQkweGFjM2VhMzk0LCAweGFkMTRmNGRiLCAweDRlYmUwNjMzLCAweGNlMzRlOTM2LCAweDEwZmUxYzgwLCAweGVhZWY4MWM2LAotCTB4Mzg3YzkyNWYsIDB4MGIxYjdhYzUsIDB4ZWVmNjNjYTAsIDB4YTBkOWNkNzYsIDB4ZDU5YWZjZTEsIDB4NmJjZTM3NDIsCi0JMHgxNmVkOGFhNSwgMHg3MmVkZTY4NSwgMHg3NWJlMTE3OSwgMHhhZmJjMzk2YSwgMHhhZDRlYmI1ZSwgMHg5YWRmOTE4YywKLQkweDcwY2RjMzJkLCAweDExMWZjOWFkLCAweDcxN2Q4ZjM4LCAweDZmMGJlYzEyLCAweDFhYmQ2MGUxLCAweDQ1ZWEwMWY1LAotCTB4YWVjNmE0MjUsIDB4YTk0OTZmNmIsIDB4MmQ5YWRmNDQsIDB4Zjg5YWYzMzIsIDB4ZjgzZGQzODgsIDB4ZWRkNjhjYWYsCi0JMHg1ZjM3NWVlMCwgMHgwNmRkMDViNywgMHhkYmEwYWFmNCwgMHg1MWQwNWQ2OSwgMHg2Nzg5MmZlOSwgMHhlOTFiN2M3ZiwKLQkweDIwNzRmMDAwLCAweDI1NWNhMDllLCAweGMwZGNmM2UwLCAweGRmZTgxNTRhLCAweDJlM2E2N2UzLCAweGNiZTIxN2JiLAotCTB4Yzc5YjNiMGUsIDB4Y2QzOWFjNjAsIDB4YWMwYWZkOWIsIDB4N2IyYTFkYTMsIDB4ZWY5OWVkMTAsIDB4ZDNmZDg2YjYsCi0JMHg5NjZkYmQ2MCwgMHg4MDI1YjMwMiwgMHhhYTA1YjY1YiwgMHhjZTE1YmFmOCwgMHg4NTdmNzVjNCwgMHg5NDZmNmY1OCwKLQkweDE1YWYzNGJjLCAweDgwOWZjMDU5LCAweDI1ZTk4ZWY3LCAweGMwNDk2NDFiLCAweGNhZjU4NjllLCAweDRiOWUzYzFmLAotCTB4ZmQ0M2RjZmQsIDB4ZmU0ZmQwYTgsIDB4Y2JkMWZiODUsIDB4ZDFmYTk4YTcsIDB4N2U4Y2FiY2IsIDB4NDkzZjUwMTYsCi0JMHg0NzRmZDcxNywgMHg3ODY2NzVmOSwgMHg3ZThkYWJjYSwgMHhjZjFmYThlYSwgMHhmZjRiY2RjNSwgMHg3ODY2MGRjNiwKLQkweGZkNGI1MWJlLCAweGIxZjM0ZWE0LCAweGJhZWI4NjgwLCAweGVkZDYwN2UwLCAweGI2YmRlMTk3LCAweGUzYzI3NTM1LAotCTB4Y2EyZjk2MmMsIDB4ZGNmMWM2MWUsIDB4N2NiMTI1MjAsIDB4YzkyNTMyOTEsIDB4ZmVhOTg3YzQsIDB4ZjQzYWE2NjEsCi0JMHgyY2JhZDNhNCwgMHhlM2RmOGZmNCwgMHg0NzU0YjkyNCwgMHg0YTE3YTRhYSwgMHg5ZTA5M2E0NywgMHhhNDZhNDY4NywKLQkweDJlYmExZTE3LCAweDg3YWUzOTcwLCAweDRiZGEzNjM4LCAweGFiODFhOTBmLCAweDBkN2MzOGY1LCAweDEzMmM0YTcwLAotCTB4MzIwZmIwNGIsIDB4Njk1ZmJlODcsIDB4MWIyODc4ZTcsIDB4N2RmMGI2NzUsIDB4ZDZjMWJlZjgsIDB4ZjUwYTk4NWYsCi0JMHgzZmU5NWIzNiwgMHg5NTllM2NlMiwgMHgyNDk2OWRiOCwgMHg5NzZjNDZiMywgMHhkZWY2ZTBlNCwgMHgwZDkyZGNjYSwKLQkweGI1M2MxOGMxLCAweDRiZmEwNjhmLCAweGRiYjZmZDgzLCAweDVmYzg5OTAzLCAweDBlYmY0YmNmLCAweDE4YWRiZjIyLAotCTB4ZmM3ZDkyYWQsIDB4MjJhZmYzNDIsIDB4MmI4ZmQwNDEsIDB4MjI2NjU3NDcsIDB4YzgyYTFkM2UsIDB4MmFmOGVjNzcsCi0JMHhlMzQ0NWY4YywgMHg3ZmYxYzA2ZiwgMHg0NzdjNjA5OCwgMHhmOGQzMTRkZSwgMHhkMzJhOWNjZSwgMHhjNjE1NGVmOCwKLQkweDI2ZGY3ZTA3LCAweDA3YzYyNWJkLCAweGQ4Yzc1ZGZjLCAweGExYmZjZDRiLCAweDU1MzkxZGYxLCAweGI0NGFmZTM0LAotCTB4NGZjNzYzNGYsIDB4MjdmZjE4MWEsIDB4NWJiYjhjMTIsIDB4OTBkMmViZTIsIDB4Njc1ZGU3ZjksIDB4YjU0ZTdmOWUsCi0JMHg5ZjJhZmU3OSwgMHhkZmU5NWVmZiwgMHgzNDQ5ZjhjNCwgMHhlZmNkN2RmZiwgMHg1NGU3ZjlmMSwgMHg3ODNiZjlmMywKLQkweDdiZTMwM2JmLCAweDEwN2ZmMDA2LCAweGQxMjQ3ZmU3LCAweDMwNmZmM2ZjLCAweGFkNGM3ZmNmLCAweDNlMGVmZTc5LAotCTB4MGZhNTJmZmUsIDB4OGQxYWY4YzUsIDB4MTNlNmFiZmYsIDB4NmE2M2ZlN2MsIDB4MTFkNTdjNjksIDB4YTkxZjIxZjAsCi0JMHhjOTFhOTJhMywgMHhlZDA2Y2Y5ZSwgMHg5NDc0ODIzNCwgMHhkY2IxY2E5ZiwgMHhmMjk3NmVlZSwgMHgyNTBmMGYwOCwKLQkweDNjZmJiZTcxLCAweDFiNGRmODA5LCAweDA0MmM3N2Q0LCAweGFjZmEwNTEyLCAweGNkN2NmMDVlLCAweDUwMzU1MmQ2LAotCTB4ZGU4M2RlMjQsIDB4NWQ0MDI4NWIsIDB4NWYxMzI1ZDAsIDB4ZDA4ZWQ1YjMsIDB4NmY2ZjAwNjUsIDB4ZmFjNDFjOTcsCi0JMHgwYjVmZDU4MiwgMHg3MWRlYjRjOSwgMHhiOWNjMDA3ZiwgMHhjM2ZmM2UwOCwgMHhjN2Q2ZTNkMywgMHgyZTVhY2JjZSwKLQkweDg4OWZiMGVjLCAweGMzODhlNDlhLCAweDYzNjMyYzEzLCAweDZiYmUwMTFiLCAweDY3ZjA5ZDI1LCAweDFlODA0ZmQ0LAotCTB4M2YzZmEwNjUsIDB4ZTU4YTNkMDAsIDB4MzgxZmMyODcsIDB4YTk5NjdhMGUsIDB4NGNkMzcyYjEsIDB4NmY3NzQxZGYsCi0JMHhlZWJjYzExNiwgMHg1MDlmZjAxMCwgMHgyYzRmYmUzOCwgMHhmZjg4NDI5NSwgMHg1MDdhOWZjZiwgMHhiMGI0ZmQ0NSwKLQkweDNlOTAxOTIzLCAweGEwODM0NzA4LCAweDQ3NmVmZjUzLCAweGY4NDRiZDY4LCAweGVlN2UyMmY0LCAweGVjNjQ1MTI0LAotCTB4NWZiZWMyNzcsIDB4ZTliODY2YjQsIDB4ZDQyY2I5YmIsIDB4MWZlZDA5OTYsIDB4YjQ2ZjM1NTgsIDB4NjdiZmYzMGUsCi0JMHg0YzgyNjM4ZSwgMHg5NDdmOWY3ZSwgMHg4ZDk4ZTQ4ZCwgMHgzMThmODFiMiwgMHhmYjI5ZjNhNywgMHgzOWRjYTgyOCwKLQkweGVmYjI2ZWM3LCAweGViOTgwYWVmLCAweGViOTk1NGY3LCAweGRkOTBmNmJkLCAweDYyYzZmNjg2LCAweDdlODNhZDg5LAotCTB4YmYzNDZkZWYsIDB4ZGJiMWM2MzcsIDB4OGM3YjA5ODYsIDB4MDY0Nzc3OGYsIDB4MmM1ZWY3ODcsIDB4OWQ2M2UwMjcsCi0JMHhjZTlmN2FlOCwgMHg2OWUwMzViZiwgMHgyMmNlYzQ3OCwgMHhkMzQ2NWViNCwgMHhjMTY3OGZkMSwgMHgwMmQ3YjI3NCwKLQkweDE1Yjc5ZjNhLCAweDRlZWNmYmRlLCAweDczYzAwNTdmLCAweGUxMzJjM2RmLCAweDc0N2YwYWQzLCAweDA2ZGZiMjVmLAotCTB4Y2Q3NDVjNzYsIDB4ZTc2OGVkMWYsIDB4ODU2M2U3NWEsIDB4ZDY2NWZlZmYsIDB4ZWEyYWU4ZjksIDB4ZWI0MTc5ZmIsCi0JMHg1NjI3Y2U3MywgMHgyYWU4NmE3ZSwgMHhhNjNjN2UxZCwgMHhlZmY4NWQ1ZCwgMHhlMThmMWY4NywgMHhiMzJkOWFhZiwKLQkweGExYzVmNTRjLCAweDE3ZWQ0Y2JiLCAweDdhNjc5OWFkLCAweGIxNjNiMGJmLCAweGVkMDNmZGU5LCAweGYzZWE5YTBmLAotCTB4ZGE5YjBmODIsIDB4ZDlhY2JmZGYsIDB4YzZkZWZlZjQsIDB4ZWZlZjRjYzcsIDB4NTRjYTdhYTksIDB4YWNmMDJiYmYsCi0JMHg3MzlkZmRhOSwgMHg0YmRlOTlkNiwgMHg4OThmMTZmYiwgMHg4YzBkNWU5MiwgMHhmMmJiNDJjOSwgMHg3ZTQzMDc2ZCwKLQkweDkwZGRmODM0LCAweDMyOWE4Zjg3LCAweGU0ZDkzY2E5LCAweGU1MTliMmE1LCAweGI2ZGZlNDE0LCAweGViMGQ5NzliLAotCTB4NjNkMThkZTcsIDB4ZWQwZmY2ZWMsIDB4NGYyODM5OGQsIDB4ZTJiN2JlNTYsIDB4ZjBkZmNhZDMsIDB4NzViYzU0NmYsCi0JMHhjMTZiMjhjOCwgMHhkNzNkNDc1ZiwgMHhlMzY3ZDYyNywgMHhmODY0OGY3OSwgMHgyZTQ5Y2IwNywgMHhiNzJlNTU2YiwKLQkweGNhYjIzYmI1LCAweDU1YWU1ZmQwLCAweDcxOGQ4NTIzLCAweDc5MDE4YWZjLCAweDBmMzQ0YjBlLCAweDNhNzQ1Njg2LAotCTB4ZDViODBkZDIsIDB4MTM3Y2Q3NDQsIDB4NjVmYjNkOWMsIDB4NjUxZWJmMWEsIDB4ZmZkZmY0MTcsIDB4YjJkZjE1NjUsCi0JMHgxYzg4M2VhMSwgMHgxYzc1YjljYywgMHhjODdmZTNjMiwgMHhhNTc0ZjA4NiwgMHhkM2RiZmFkMywgMHg3MWY4NjMzNCwKLQkweDQxNTdmMTA1LCAweDczNGQ0N2U1LCAweDE0ZDEzY2E4LCAweDUzNzhmMmEwLCAweDM0MWY5NTE1LCAweDZkMTk1MjM1LAotCTB4N2JlNTQ2NWEsIDB4ZGYyYTQxNGQsIDB4ZjJhNzZhNmQsIDB4NTQxZDRkYjcsIDB4NDM1YTZiMWUsIDB4NDI5YTZmZTUsCi0JMHhmOTM2ZjY1NCwgMHgyYmYwMWNhOSwgMHgyNjk5M2QwYywgMHhmZjYxNGFlYywgMHhmNTQxMGFjMywgMHgzMjJlNjJkMywKLQkweGYyNGRkZGZjLCAweDc5NDRjYmU4LCAweDVlN2RhZDNjLCAweGU5ZjM3Njg4LCAweDcyYzYwZTYzLCAweGNhY2JlMzEzLAotCTB4Y2FmMTA5MGYsIDB4NTQ1NzY0ZmMsIDB4NGMzOTQwODYsIDB4OTVkZWZhMWMsIDB4YjJlNGU5YzQsIDB4ZjQwYzE5YjEsCi0JMHhmZDk3NjNjNiwgMHg4OGJmMzdjMCwgMHg4NjFiMGFlYSwgMHhiMzdjODdkZiwgMHgwNWZhNzFkYywgMHg3NWU5MTVkZiwKLQkweDdmMzEzYTIxLCAweGEwNmNmMTdmLCAweGZlZTc4OWM3LCAweGVkZmIwNGJkLCAweGQ3MGE3NWMxLCAweGFkMzI4M2NiLAotCTB4YzFiMjJjOTcsIDB4YzE4YWY0ODcsIDB4ZmQzZmFkMWIsIDB4YmU1ZTg1M2IsIDB4YTU0ZWZlMDAsIDB4Y2VlYmY4MWIsCi0JMHhkOGJiN2Y0MSwgMHhhN2ZmNTNhNiwgMHg0MTRjMWQzYiwgMHgwZTQ5ZWUzYywgMHhmNGVhYTg2MSwgMHg1YzFlMGRlMSwKLQkweGRhNjQ5NmVmLCAweGYwNzFlM2Y0LCAweGUxNzU5NDYwLCAweDVkOGI1ZDVjLCAweGY1Y2NiYTI3LCAweDBjZDIxZGQzLAotCTB4YTZmMmJmMWUsIDB4ZDY3Yzg2ZGMsIDB4MGJjN2ViYTQsIDB4NTQ5OWZlOTAsIDB4YzkyY2ZkMWEsIDB4ZTRlM2Y1NTQsCi0JMHgzYWY4ODcxZiwgMHhmODk1MzViNSwgMHg2YTM2ZmMxNCwgMHg0NzBkMWZmNywgMHhlMTA2N2VhMiwgMHg4N2JmNjRlOCwKLQkweGM5MTdjOWVmLCAweDMzN2VmMmZmLCAweDcxNDRmZTUzLCAweGZlYzdiNjI2LCAweDBlZTdhZTM5LCAweGY5MWNlZmY4LAotCTB4OGRkNTBhZjcsIDB4NzJjMjFiN2UsIDB4M2UzNTcxZDAsIDB4MGYxYTZhZGYsIDB4M2UxYWYzYmUsIDB4ZjNiY2I5ZjEsCi0JMHg0ZWMyYWJmMSwgMHhiZGY5ZjhjNCwgMHg3MWY5MDYzOCwgMHhmN2FjZGQyZSwgMHg4NmY1NGQ1MywgMHhiNGRkMmNhZSwKLQkweDIwMWZlMDBlLCAweDUyNGFhY2Y3LCAweDA1NmE1ZjkwLCAweDVhMjlmNGY3LCAweDFkZjAwNGJiLCAweDJlODk3OWIxLAotCTB4NTc2ZjEyMGQsIDB4MDFhYThjZTcsIDB4Y2I0ZGYyMmYsIDB4YjE3YmQ3MWQsIDB4MmYxYTg3NjUsIDB4ZTliMjcxNmUsCi0JMHgxMjUxNTdiMCwgMHg5ZjIzNWZjMywgMHg4ZTIyYTg3ZSwgMHg4ZDFjM2Y5ZCwgMHgzNjhiZDQyNywgMHg2NzMzNGY2ZSwKLQkweDI0ZmU4M2QwLCAweDY2N2EwY2NiLCAweDZkMzQwOWJiLCAweDA3ZTQzZjAwLCAweDc1MzEzOGMxLCAweDIxYzU5ZmEzLAotCTB4NzViYzdmN2IsIDB4ZWRjNmM3YjIsIDB4MDViOGViNjQsIDB4Zjg1MTc0YjIsIDB4YjQ3YWRmYWIsIDB4YzU2ZGU3MWMsCi0JMHhhN2Q3N2Q2MywgMHgwYmU0ODA2YSwgMHg4ODMyNTdmZSwgMHg0N2JmMDM0NywgMHgzMjA1MTU2YywgMHhlNWJkNWZmNCwKLQkweDNmMjdiMjdkLCAweDFmMGIwN2IyLCAweDFhZGU4ZjM5LCAweDc5OTZiZjBhLCAweGRlNjYzOTIyLCAweGUzOGRkNjQxLAotCTB4NWE3MTE3Y2MsIDB4ZGYzYmVmZTAsIDB4ZTNmMTc1ODEsIDB4ZTMwY2VjZDcsIDB4YjQyY2VjZjAsIDB4ODMwMzgxOGEsCi0JMHgzZmE4MzY0YywgMHgzYmYzNmEyMCwgMHhmYjNlMjg2YiwgMHg0MWRiOGRiMSwgMHgwNzg1NTgwYiwgMHhkNjJhYzI5ZCwKLQkweGUwNzY4MjUxLCAweDgxOWI2NjI5LCAweGRlYzUzYTc4LCAweGExOGM0Y2YwLCAweDI1NTkwY2QzLCAweDZlZDAzY2ZhLAotCTB4N2VjMDQzYjYsIDB4YWQxN2Q1MzUsIDB4ZDkyYmQ3MzEsIDB4MzNkNDBjZWMsIDB4MmNlZGFiOTUsIDB4NGNmY2QxMjQsCi0JMHgzYWM4YTdlZiwgMHgzNTg4YmJmNSwgMHhiOWY1YzBhZSwgMHhkZmUzY2VjNSwgMHg4Y2E2NzVmMywgMHg1ZWVhZjgwMiwKLQkweGUzMDRiZTdlLCAweGRjYzhiN2UyLCAweDFiZTIzMDhmLCAweGY4NzE4NzhiLCAweDU0ZWJjM2FiLCAweDdkZmZiYzNmLAotCTB4YWUzYmM0ZTcsIDB4Njg3ZGY4NjcsIDB4YzEwZmFlMDUsIDB4OTM2ZjkyOWQsIDB4YmY3ZTI4NzcsIDB4Nzg1NmZjMmMsCi0JMHg0ODdiZjU4ZCwgMHg1MWMwNDU5YywgMHgxYjhhNDViNywgMHhmMDU3YmQzNywgMHgzZjhmYzFiNywgMHhlYzM2ZjMxMiwKLQkweDFlYjE5N2ZhLCAweGNhMzdmNzYzLCAweDMzMmFhZTIyLCAweDRhN2VlOTE5LCAweDI5NmQwNjc3LCAweGVmZTI5ZWY0LAotCTB4NWYwZTFkYzEsIDB4YWNlZmNjMGIsIDB4ZjIyOTYyYWQsIDB4YzUwZmQ4MTcsIDB4NTlkZGE2MmMsIDB4Zjc5ZTgwNWIsCi0JMHhkMjU3YWY0OCwgMHhhMTEyOTliZSwgMHg3YjU4MTA3ZCwgMHgzNTdkZDg5NCwgMHg4YzUzYzkzOSwgMHg4MzM3NjM3MSwKLQkweGY3MWYzNWY1LCAweDI0MTQ4MmQ1LCAweDlhYWVlMTU4LCAweDZlMzE4YWM5LCAweGZhMDBmYTBkLCAweDdlNTNkMjdiLAotCTB4NGJiYTgyNTgsIDB4OWZkODY0ZWIsIDB4OTcxY2QzMjMsIDB4ZjVjZDc5NzcsIDB4ZjcwM2ZjMDYsIDB4OGEzMmM2N2QsCi0JMHg1NThmMjUxZiwgMHgzMDhjNzgyYywgMHg5ZjZlMWZkNCwgMHhlNDJmYmUyNSwgMHgxZjEzZGUxMSwgMHhhMWM1ODg3YiwKLQkweGI5MTE2YTc0LCAweGU5NDYxOTE4LCAweGYyOTdmMDE5LCAweGYwZTM1ZmQwLCAweGRhMDA3YzUzLCAweGZiNzlkNTJmLAotCTB4NWYwNzExN2EsIDB4ODhkOTc2ZmEsIDB4OTc4OWU3NjEsIDB4MTU4MTljMzUsIDB4ZGQ0Yzc4NjgsIDB4NTE5ZmQzODgsCi0JMHgyNWUyNjg1OCwgMHhhYzJmNTVlOCwgMHhmNTdhMzFiNiwgMHgwN2UwNWI2NSwgMHhhM2Q0MGY0OCwgMHhlMzA0OWYwOCwKLQkweDA0Zjg2MjA0LCAweDU2M2Q1NzFjLCAweGY4NWEwZmNlLCAweDIzODY2ZmUxLCAweGZiZjQ5OThkLCAweGU1ZTA1YjExLAotCTB4Y2RmYzcwNzgsIDB4ZTkwZTY3ZmQsIDB4Njg3ZmUwZmYsIDB4ZmE0MzA1ZmYsIDB4ZmViYzc1ZmYsIDB4YjZkZTVlZWIsCi0JMHg1NGZjMDgyYiwgMHgzZGE3ZTNmZCwgMHg2M2VjY2NjMCwgMHgwN2MzMjNhNSwgMHhkNGRkYWY3NCwgMHhmY2I5NDFlNiwKLQkweDkwN2EwOTQ4LCAweDY0ODcxZmFlLCAweGYyYjNmN2RhLCAweGU0MzE1ZDgxLCAweDI1NDlhZmQzLCAweDQ3YzQzZmM0LAotCTB4ZTI3YzVmMjcsIDB4M2ViN2I0NjYsIDB4YzlkNzY0ZGYsIDB4ODhlMmRmYmYsIDB4ZWIyOTgwMzgsIDB4Zjk3MzE3M2IsCi0JMHg5Zjc4ZTJkOCwgMHg4YTdlNTdkNywgMHg2NWQwZDlmYywgMHg5YmQ1MTdkNiwgMHhkMmYwY2U5ZiwgMHhmZTE0MTVmYSwKLQkweDg3ZmM4NDZmLCAweDI4N2Y4ZGZhLCAweDgxYWM3YjQ3LCAweGIzZGU5M2Y1LCAweDlmZTM4NzdlLCAweGMyZjY0NjE5LAotCTB4ZTg2NTM1M2MsIDB4YWViZjYzN2IsIDB4YTFhNWUwNDEsIDB4NjU0Zjg5ZjMsIDB4ZjkyODk2MTIsIDB4NTVmNmQ2OGIsCi0JMHg1Y2Y4MGZjMiwgMHg5MzY3ZmIxNiwgMHgzM2U0NjRkOSwgMHhjNDJjMWYwMywgMHhlNWY5MDBmZCwgMHg4ZTMxOGJlNywKLQkweDM1ZjFiM2QzLCAweGNiMTQ1NDhmLCAweDlkZWY1YzlmLCAweGZkZjAzZjBlLCAweGNiMTM3YTlmLCAweGM1ZTgyZjUzLAotCTB4YjBkYjdiNTgsIDB4YzI1ZGJjZWYsIDB4Y2JjM2Q5N2YsIDB4ODNjNDdiNWEsIDB4NzVkYWZkNzEsIDB4MWUxMDVmNzYsCi0JMHhmMGRiNmVkNywgMHhhZTMwZTc4MywgMHg3N2MzYjZmMiwgMHhiMzVmZjQxOSwgMHg1Y2RmZDVlZCwgMHhlZDlhZjUwNywKLQkweDdjOTliNGY2LCAweDMxOTQ5YTFhLCAweGY4MDY5NzQ4LCAweDQxODRkOTZmLCAweGU0ZmY1NDNhLCAweDhlM2JkNTU1LAotCTB4ZDg3NDdmM2YsIDB4YjY2YTNkMjAsIDB4YjhkOTU3ZWYsIDB4MWE5OGY4YTEsIDB4YjU0NmFmZGUsIDB4YmYwOTc0MzgsCi0JMHg4NjdlOGU1ZiwgMHgyYTE3ZjJmYywgMHg3ZGUzZmRkMiwgMHgxYjkxMWIxMiwgMHg1ZWViOWYwNywgMHhmMTE5N2IyNSwKLQkweDc0MTQ3NDQ0LCAweGE1OWJhMDFhLCAweDA1ZDAwMzdkLCAweDI3NDFhYmY1LCAweDQyNjNmYmViLCAweDZmM2ZiMWRlLAotCTB4NGJmM2YxMTEsIDB4OTA3ZGM1M2YsIDB4Mzg3YzNhZGYsIDB4YmU5N2FhZmYsIDB4N2M3OWMxZTksIDB4YmU3MjM0YTgsCi0JMHhjMzJkYmU3ZSwgMHhkOTU2ZTMwZiwgMHg5NTNhMTk4MywgMHgwYmQ1NzlmYywgMHg1YjdlMjJkZiwgMHgxOTViZjQ3NCwKLQkweGZlNjBiZjE0LCAweDBhZDkxYjJjLCAweGRmOWMyY2MxLCAweGQzYjdiNWMyLCAweDgwNTkyYWZjLCAweDc5ZWFhZWY4LAotCTB4YWJkNzAyYjksIDB4NjMzNjE0Y2YsIDB4NzhiOTFjN2IsIDB4ODdjNWM4NDQsIDB4ODBmMWMxZWIsIDB4MGI4ODdkZjksCi0JMHhiYzBiZWUwNywgMHgwNmRlNTMyMSwgMHg3YzUyMGY2MywgMHg3ZWM2NWJlNCwgMHhmNTQyNWIwZSwgMHg0ZTljOWNjZiwKLQkweGVmYzMxNWIzLCAweDk2Mjc5NTg1LCAweGVjYWUzNzVmLCAweDFjOWNmYTQ2LCAweDcxODExZmVkLCAweDA0YTYwNmRmLAotCTB4NzNhNDNlMDUsIDB4NzQ3Y2FmZDAsIDB4MWY0ZTA4ZmEsIDB4YzQ0YTU1ZTYsIDB4YTdlZmEwNzcsIDB4ZGY2YzczZTIsCi0JMHg4YWJiZjc2ZCwgMHg3M2IxZGY0ZCwgMHgyZmUzODNiOSwgMHhkYzAzZTMxNSwgMHg3ZWNmNjg0OSwgMHgxZjdmMTE5OCwKLQkweGFjNjJiMzdmLCAweGM1NTc2MDM3LCAweDdjOGM1N2YwLCAweGY4ZGY3OTczLCAweDQzNmY5NzE4LCAweDY2YjM0M2RlLAotCTB4YmQzZmZiZTAsIDB4YmYwN2U1YzksIDB4ZTAwNTdiNDMsIDB4ZjdhMDhjOGEsIDB4NDg5MzZmZmIsIDB4MjQ1ODM4MWYsCi0JMHhiNDZmNWM5ZSwgMHhiZjM2YjkwYiwgMHhlMDA0ZjgzNywgMHgxZGRkNzA1NiwgMHg3ZmVjMTdlMCwgMHhlYzlmZTExOCwKLQkweGYwZDVjYWQ4LCAweDZjYmU4YzVkLCAweDQzM2NmMWMwLCAweDc2ZTQzM2ZiLCAweDg3ZmY5MDkxLCAweGIzZmNiMzE0LAotCTB4MTNlZTVjYjUsIDB4YzI0MTFiZmIsIDB4ZjQzZGFkNGYsIDB4NWU1MGU3ODMsIDB4MWY3MTNlNDEsIDB4YmQ5Yjc2YmEsCi0JMHhjOWZkZTcwMiwgMHhiOWJmODNkNiwgMHg5M2U0ZTQxYiwgMHg2NmE3MjFiMCwgMHhkMzk1NjlmZCwgMHhiMGQ3MWRhYSwKLQkweDA5ZmE3Mjc4LCAweDkzYzQxM2E2LCAweDU3MWU3ODUzLCAweGYxMjhiNTRlLCAweGZlOTU3ZmYxLCAweDgyZjdmMDM0LAotCTB4M2U4NjdmMDUsIDB4YWI0Nzg0NGMsIDB4ZjE1ZWJjM2UsIDB4ZmFhZDNlMTIsIDB4YzliZGZlMTAsIDB4OWZmMjg2NGEsCi0JMHhiZjA2NzdjMSwgMHg2ZWE4ZmY1NSwgMHgwMTlkZWEwYywgMHg2ZWY4MzRiZSwgMHhiZTBkMmY4MCwgMHgzNDJmMTIxYiwKLQkweDNlODg2ZmUxLCAweGYwMGNkOGMzLCAweDdmZWVjNTQ5LCAweDk5ZmNjNzJkLCAweDVmN2MzZGRhLCAweDg0M2JiZTE0LAotCTB4OWY5M2MwNzUsIDB4ODcxZDYxYmIsIDB4ZDZjNWE1NDYsIDB4ZDg3YTk2NDMsIDB4YTk2ZmRlZDIsIDB4MDdkYTU4NTcsCi0JMHg0YjQ2ZjUyYywgMHgwYmY3MTBmYiwgMHgzY2FhMGViYiwgMHg2YTYyMjU0ZiwgMHg4MmNlNWY2ZiwgMHhlZjUzOGM2ZSwKLQkweGQyMWUyOTk1LCAweGMwYWYzMDA3LCAweGI5YWRhNGJjLCAweDY4NjNjYzIxLCAweDUzMzhmMTczLCAweDAyYmFiYTdmLAotCTB4ZGU5ZjU3ZjUsIDB4YjA3YjQxZWYsIDB4NzNlM2M1ZGYsIDB4OWVmZDE1N2QsIDB4ZWMzYjE4ZDQsIDB4ZTkzMjNkZmQsCi0JMHhjZDg4NjhkZiwgMHg4MjJmZTc4OCwgMHg4YmY0NDE4NywgMHg3OWVmNDRiMiwgMHhhY2JhN2RkYywgMHhmOGMzMmNlNSwKLQkweGMzZWM4NzRhLCAweGU2ODJjZDkwLCAweGRmYjgzZDNiLCAweGZmMjdiN2RmLCAweDdjZjAzOTk2LCAweGI2OTkxMWUxLAotCTB4ZmVkMGZhZjMsIDB4ZmIzNDQxNGUsIDB4M2YxOGFjOTUsIDB4N2MxNjIzZWQsIDB4YTM4YzA2ZTYsIDB4ZGFmZWUxZWYsCi0JMHhiYjE2NTU4MiwgMHhiZTIyYWQ4MiwgMHhhYTk2ZDRhOCwgMHhiZmMxMTdhOCwgMHg4ZmJjYzBmYSwgMHg1YWJiZjljMCwKLQkweGQ2YjU1N2Y0LCAweGRlZjhkZWZjLCAweDM3YWJlM2YwLCAweDg0MDdkZjlhLCAweGY5MTY3ZmRmLCAweGYxZDJlZDFkLAotCTB4YmJmNzNjNmMsIDB4MDkzNzhmMTksIDB4MmU1ZDNhZmQsIDB4ZTAwZTY1YmEsIDB4Y2NiMGVmYmYsIDB4ZWY0ZTVmOTAsCi0JMHhhN2ZmMDk5MSwgMHg3MzdkZjJiNywgMHg4YjVmOWY4YSwgMHg3YTRmZGE3YywgMHgwZjUzYzBjZCwgMHg1ODlhODVjYSwKLQkweGZjZWNmNGVmLCAweGQwMjNjOTVkLCAweDNiZDc3NmE0LCAweDY1MDRmZmM1LCAweDBiYjdhZWNmLCAweDk3ZjU4NjdmLAotCTB4ODc3OWNhZGYsIDB4NzUzZjZkMGQsIDB4MmJmNjhiOWYsIDB4NjliOWY2ZmEsIDB4ZWY2ZmIxN2YsIDB4YzExZTczMmYsCi0JMHg4Zjg3NmVmYSwgMHhmZGY2ZmVmMiwgMHhhN2Y5MThiOSwgMHgwYWEzYjk2ZiwgMHg2OGRmNTZmNSwgMHhlY2I2NjdlZSwKLQkweDk0NzE3M2ZkLCAweGEyNTZjOWQ2LCAweGVlNzZlNWRiLCAweGYzZGU5ZWU3LCAweDY5NDllZmVmLCAweDcwYWNjMjU4LAotCTB4NGM5N2RmZmQsIDB4OWY4NmI3NzEsIDB4ZDY1ZTI4YmEsIDB4MjVjZmY3YjcsIDB4YTVmYmY2YjEsIDB4ZWM1ZWE3Y2UsCi0JMHhkOWI5ZjYyMywgMHg1ZjA4MWQ5YywgMHg2OTdmZGYyYSwgMHgxYmI1ZDlmOCwgMHhhMjBmMzE5YSwgMHgwMGZhYmY3MywKLQkweGNmZmE5ZmJjLCAweDNlYTMxNDVmLCAweGVkYzFkYmVjLCAweGY0N2I1ZTlhLCAweDliMjdkYzA1LCAweGI5NjJiNmQwLAotCTB4OGJkNWU4MWQsIDB4NjRmYjgxNDIsIDB4MGIyZjNmNmQsIDB4ZjJmMGYxNmEsIDB4MmYwMWM1MDUsIDB4OGY3ZjFmMTYsCi0JMHg5ZmZmNDhmOCwgMHhmNjg5MGY4MCwgMHhiOGY3NmJiZiwgMHhlNzA5NGU0MywgMHhkZWY3OTdmZCwgMHhjZmIwM2Q0MSwKLQkweGNjNjk3YzQxLCAweDMzNzA5M2Y3LCAweDlhMTcxZGQ5LCAweDZlNTdkNTc3LCAweDYyZTQ1MmRlLCAweGJmZjJiZGU2LAotCTB4ZWRiYmZmMzksIDB4MmFjZjgyNWUsIDB4N2NmOTQzMDcsIDB4ZGY1NDQzZWYsIDB4YmMxMWY2ZTYsIDB4OWJlZmM5MTcsCi0JMHhkZjc0NmFiZiwgMHg1Y2Y3NzQwMSwgMHhmZTg3ZGU3OCwgMHhjOGZkZDJjNywgMHgzYWVlODI3ZCwgMHhmYzM0OTllNiwKLQkweGRmMDQxN2YzLCAweDI3NzNkNTk3LCAweDNkZDM5YmZlLCAweGZiMGRmY2QxLCAweGFmOWI3MWZjLCAweDZjZTMwZjIzLAotCTB4M2FjM2ZkNjgsIDB4Yjc2N2I5YWQsIDB4ZjFlZmQ4NjMsIDB4YjQ3NWIzYjEsIDB4MmZiMTY1MTcsIDB4ODQ2Zjg1NjksCi0JMHgxOTFmZmRjYSwgMHg1ZTMxMjdmNywgMHgzYzg5OWEzNywgMHhkMTBmZWU2ZCwgMHhhZDBjMWQ5NiwgMHg4ZjY0OTU2OCwKLQkweDZlMGFkYTJhLCAweDZlYmUyYjI3LCAweGYxZTVlMDNmLCAweDI4ZmJlNzJiLCAweDM4NGQ4Nzg3LCAweGY2N2FjMDE2LAotCTB4NDM4YTNlMGQsIDB4NTZjMmZjNWIsIDB4YjAyNWY5ODksIDB4NmYyYjk1NTMsIDB4OGE3ZThjM2MsIDB4ZTIyZGFjN2QsCi0JMHg3ZGYyYTYyOCwgMHhmODhhNTcyYywgMHg0ZDU3NWRhMiwgMHg2NDU2OGJmZSwgMHhlNmJjYmJhZSwgMHhlN2Y0NDNiYSwKLQkweDY3N2UxYzY0LCAweDljNjEwYjI2LCAweDgwZTJiZTU5LCAweGYyNjVmOThlLCAweDUwNDk4NTc4LCAweDIwOGViMTc3LAotCTB4NGM4ZTA5ZmEsIDB4YzQ3ZmY3ZjMsIDB4Yjg5OGQzNjQsIDB4MTFlYmRhMmMsIDB4YmU3ZmQ3YjAsIDB4MDdjNTAzNzUsCi0JMHhmZWY4YmQ0ZSwgMHhjZDZmZDhjZCwgMHgwNGU2NjRjZiwgMHg3NTZlZjRiYywgMHg4ZGYyMDhiMywgMHhmZmQxNTIxMiwKLQkweGZkOTRlZWE4LCAweDUyM2M4ZjNjLCAweDNlY2M2YjcyLCAweGQ2Mjc2MWEwLCAweDcwNGRkOGZjLCAweDg0NzBlZjU1LAotCTB4ZDVmN2MyNjYsIDB4NGM1ZjdlYmIsIDB4N2VmMmY2ZWIsIDB4MmY4MzYzYjIsIDB4M2Q0ZjNjNGEsIDB4N2RjNjJkMTgsCi0JMHgwZTcxNmFiZSwgMHhmMWE3NGFjMCwgMHhmNzdmOGYyYSwgMHg4MzllNGVlYywgMHg4NWI0YmFmZSwgMHg4NzU2NDllNywKLQkweDYyM2JiNGVmLCAweGFhYzY0YmYyLCAweGYxMWRhMzc2LCAweDEyODdmMDUxLCAweDdjMjBhOWU1LCAweDg2NzlmOWIxLAotCTB4NDNmM2RhOWQsIDB4NjVkN2MzODksIDB4NjViZTYxMGYsIDB4YmRlZDk2ZjUsIDB4M2VhODc3MTgsIDB4ZDlhMWYwZTYsCi0JMHg1M2U1YjBkNywgMHhmZDRmNmI4YSwgMHg5NDRmMzZmMSwgMHhlNGQ5MmNmYywgMHhmN2YxMGU3NywgMHhkNzQ0YzhiNiwKLQkweGIyM2FjZWZhLCAweGY0NGVhMTViLCAweDhmYzcwZmFkLCAweDJmYzg1YzdiLCAweGRlZjFmOWE5LCAweDYxNDA0MTVkLAotCTB4N2IzNjRmY2QsIDB4YjI3MWFlMzAsIDB4ZmM4NzkzN2IsIDB4OGZlNzJkYmUsIDB4ZWZmMTBjYjcsIDB4ZDc5ZDhmYzIsCi0JMHg3Zjg5M2JiZiwgMHhiNzc0ZmQ4MCwgMHhiNzhmZjE2YSwgMHgxNWZiMjcwYywgMHhiNzg5MmJlMCwgMHg0ZGYwNjVkZiwKLQkweDVlY2ZiNmNkLCAweGNmNjNmOGMwLCAweDQwNWU0ZjhlLCAweGZhZmY2Yjc4LCAweGZlZDAxN2M3LCAweDNhNWNmYjY0LAotCTB4YmMzNDQzZWUsIDB4YmYxNGFmZjgsIDB4MmE1YmJlMzEsIDB4ODdmN2FlZTQsIDB4ZDVlZTI5OWIsIDB4ZjYzNTdlMGIsCi0JMHhjM2Y3YmJkNiwgMHg3YTNmZjQxYywgMHgwMzI1ZmZiNywgMHg3YmE1ZTRmZCwgMHhmOWMwOGZhNywgMHg3NTM5ZGQyZSwKLQkweGJmMjM4YjA0LCAweDFiN2M4OTQ2LCAweDliYjg4OGJhLCAweDNiMDc1ZTk1LCAweDdjOWQ5MjBmLCAweDdlOGRlODBhLAotCTB4MWViZjgwY2EsIDB4MGZmMWUzYWUsIDB4YjdkM2YwYWYsIDB4MGU2ZjhmYzYsIDB4NmYzYmNiZjEsIDB4OTM2YmU1YmQsCi0JMHg1MGZiYjRiMCwgMHgzZmQwNWMwZCwgMHg3OGU4MTM3ZiwgMHg2ZmQwNDVmNSwgMHg1ZmMyNjNlYiwgMHg1M2JmNGY4OSwKLQkweGU5ZDAwN2Y4LCAweDU3ZjBhYWJiLCAweGViM2VmZDA0LCAweGU3ZmRmODVjLCAweGYwZTc1ZGYwLCAweGU0NzlmZTg0LAotCTB4YzQ2NmYwMjIsIDB4ZmQ1N2VmNGYsIDB4MzcyOGFiY2YsIDB4ZjE0NDdlM2IsIDB4NGNkYmE0MTAsIDB4YjZlZjY4OTgsCi0JMHhlZTMwNzJjZiwgMHhmZmJkOTFmYywgMHhlZjU3OWUzZSwgMHhhZDFmZDFkMCwgMHhjOTE2ZmJkZSwgMHhhM2NlZWY0ZiwKLQkweDIyNjQ5ZjE0LCAweDA2Y2JkOThlLCAweDkzYjhmMWZlLCAweGQ4NmI4NWM4LCAweGJkN2VlNmU4LCAweGZkZmEzZmMwLAotCTB4MTczZDBmNWUsIDB4NjNlNzNkZmUsIDB4ZTQ0ZmVmYzMsIDB4ZjJhOWJmZWYsIDB4YWUyMzAyM2MsIDB4MWRmMWI3NWIsCi0JMHhkMjBmM2ZlMSwgMHg3NDgyOWE0YiwgMHg3MWJjZmY3YSwgMHgzYTBmMDM2OCwgMHg2YzcyNjFlMiwgMHg1YzdlMmFmYywKLQkweDI5Y2UyMDY1LCAweGFkYzQ2NWU4LCAweDUwNTNlMjA2LCAweDQ1NzhjNmNmLCAweGM1OGI3YTQ4LCAweGViYmQwN2QxLAotCTB4ZDdhYmRjNzgsIDB4MTk5ZmNlNmUsIDB4Njc4ZjBmYTQsIDB4YTcyYWRhZmQsIDB4NjM4YjhiYTEsIDB4MmZmZTA4NWQsCi0JMHhlYTg4OWY4YiwgMHgwYzczYzUzNSwgMHg4ZDljZjUzYywgMHhhYjRmYzdhZiwgMHgzN2ZhOWUzYywgMHg5MDJjODdlZiwKLQkweDlmMjFmYmFjLCAweDc1ZDYzZjIyLCAweGYzZjJhZmJlLCAweGNiYmNmYzA0LCAweGM4YjdiZWMwLCAweDUxNzllYmY3LAotCTB4OGFjODc4YTYsIDB4ZTNkMjQxZjAsIDB4ZWM2MTdkNTYsIDB4NTVlMTU5OTcsIDB4ZDU0ZjVjMWMsIDB4YTI3NWYxNzcsCi0JMHhhNDNiODc2NywgMHgwNzNkM2Y0MSwgMHhkNzNmMTM3NiwgMHg0NTVmN2Q2ZiwgMHg5NmQwZjMzZiwgMHg5ZWRjYTg5ZiwKLQkweGViODNmMmUyLCAweGZlMDYyODQ0LCAweDE3ZjY5NzllLCAweGNmMWQ3OGYzLCAweDMzOGViNjNmLCAweGQyZjFjMWNjLAotCTB4MzhmZTI3YjAsIDB4MzUzZjViMGQsIDB4MGMxMzUzOGQsIDB4ZjM3ZjNjYWIsIDB4NTQ5ZGUzZmMsIDB4N2Y2Mjc3ZmMsCi0JMHgwY2VkYmIyNywgMHg4NjRlZjNmMywgMHhmNmYxMTllNSwgMHhlYjEzM2Y2NywgMHgwMzVlNzFhNiwgMHhiM2NhNGJkNywKLQkweDMzY2ZjYTNlLCAweDg5MjM3YTRjLCAweDFlOTc5OGYyLCAweDllMGVmMTlkLCAweGUyMGE1YjhiLCAweDY3NjBmNjhjLAotCTB4Y2VkM2U3MzMsIDB4NDI4ZmYwN2YsIDB4YmQxZTc3N2EsIDB4NmE3NWM2NWIsIDB4YzYzN2UyMTcsIDB4YjM3OTJjMmUsCi0JMHhmNDFiYWE3MSwgMHgxNWJiYzk0MiwgMHhhZDVkOTA5MywgMHgzMWYyNjZmYSwgMHgxODdlMDk5YiwgMHgwM2FlMDQ2NywKLQkweDllMGZkMGFkLCAweDI3ZmNjMDJmLCAweDk0ZjY0Nzg0LCAweDY0Nzg0MGNmLCAweGUyYmJhNmRkLCAweGI1ZGE5NWU0LAotCTB4MzZmM2NhMGEsIDB4ZTZlYmI1ZmEsIDB4NzY3NjZlM2MsIDB4ZTlmYjE3YTIsIDB4MGJjOGMyYmQsIDB4M2M0MTQ4YWEsCi0JMHgzYjdkZDY3ZCwgMHgyOTE1OWQyZiwgMHg5OWQ2NzlmYSwgMHhlY2JlODQ4ZiwgMHhlZjAxZjI2OSwgMHg1ODE2NzNmMywKLQkweGJkZjkxMDZmLCAweGQyMGU3YjU1LCAweGIwYWFhMmI5LCAweGFmODBiY2M0LCAweGU0ODNhY2M1LCAweGFhNDc2NmU2LAotCTB4ZGIzMzViYzgsIDB4ZmU3YmQ1MGYsIDB4Nzc1N2RhODUsIDB4MmMzNWY2ZjIsIDB4M2NmMWVkNGMsIDB4MWYyNGM0NDYsCi0JMHgwNzc2MmQxMywgMHg5MTNlZWZlNywgMHhhNjdiNTFkNywgMHhmNjYyNDU4NCwgMHg3YzEzZWY3MSwgMHg5YmE0ZDNkYiwKLQkweGMyMmQ3YmY0LCAweGE5MzllMWE3LCAweDJlYTcxYTZlLCAweDhlMzRkYzNjLCAweGNjZWVhZWQxLCAweDkzMTIyYzc1LAotCTB4NzRhNzU0N2YsIDB4OWRkNWJmMTMsIDB4NjcxYTNiZjksIDB4MzI5YWJlNDAsIDB4ZmI4OTBmMDksIDB4N2I4MjY1MWYsCi0JMHgyNjI5ZmZiMCwgMHhiZmZiMDc3OCwgMHhlNmI1YzY4MSwgMHhlNmNlNjY3NywgMHg1YmFjYzI3MSwgMHhjZTM0MTk3OSwKLQkweDg1MjY1NGJkLCAweGI3NmYwMDVhLCAweDBlMjU4MTZiLCAweDVlZTk5ZjY4LCAweGMzMmFmYjlkLCAweDI4NTM1NmYzLAotCTB4ODc2MWZhM2YsIDB4OGNkZTUwYTQsIDB4NGE3NTlmMzgsIDB4NTgzNjgyZDcsIDB4ZDZkMzlmNmYsIDB4YTMwMzc1M2YsCi0JMHg3MDdmODEzYywgMHgyNzkzMTM1YywgMHgzZTc0MjJjMCwgMHhlNDM3NjhkMywgMHgyMDhmMjViZCwgMHgxNTAxM2YxYiwKLQkweGYyZjgwYjI4LCAweDY4YzExZTQ1LCAweGI0ZjNhNTE2LCAweDNjZmNkZDZiLCAweGNkMmQxOGUwLCAweDEwNmZkZjg2LAotCTB4ZGU3MWJlNzYsIDB4NDBmOWM4NmYsIDB4MGJjMGI5Y2IsIDB4OWI0YzA3OWQsIDB4MThlMGZhNWEsIDB4Mzk2ZjYzMWYsCi0JMHg3OThhOWQzZSwgMHg5Njc3NjllMiwgMHg4M2E1MWY2ZSwgMHhhNjUyYzFkZiwgMHhlOTczN2Q1MSwgMHg5N2E4MmNmOCwKLQkweGY1ZTE2ZmI1LCAweGNmOGU5NzVmLCAweGFiOTU3YTgxLCAweDI0NmJkNzkzLCAweGIzNWZhYmNhLCAweDYwYjRjMTcyLAotCTB4ZTVlODI1ZDEsIDB4MjUyMzAwZGIsIDB4MTFiY2JkMjYsIDB4ZTJhYTcxZTksIDB4N2ExNjNiZGQsIDB4NWZhMTRmMzEsCi0JMHgxNTY1ZjhlNSwgMHgxNGY0NmVkOCwgMHhlZDZjYjc4ZSwgMHhhNzg4ZWRkZCwgMHgzMzY4YjYzMSwgMHhlZmVmOTNlYSwKLQkweGVhMmE3M2ZkLCAweDA5ZDMyZjcxLCAweGQ1NmIzYTNmLCAweDY4ZjA3ZTkxLCAweGU0ZjNiOWNhLCAweGMyZjM1OWMzLAotCTB4YTVkOWZlMGMsIDB4MWMyMjc2MDUsIDB4ZDJjN2YzNmQsIDB4YWFlN2JjMzksIDB4MWZkMTM4MjYsIDB4NmNmMjIzNWMsCi0JMHgwZmM4MWQ5ZSwgMHg3ZWYxZTdlNCwgMHg3NWZiZTBlZSwgMHhlYjBmMjI5OSwgMHgyOWI5YTNmNCwgMHgwZmEzY2VjMywKLQkweDVkYmIzMjFhLCAweDdkNWMwYzRhLCAweGIzZWQzZjRhLCAweGZmN2Q5ZGY3LCAweGM0OWJjYzNlLCAweDc1OWM2YTdhLAotCTB4MzdmYmYwNjUsIDB4OTNjOTBhNWQsIDB4ZTk4MWZmMzksIDB4MGI1ZmM0NjksIDB4ZGUyMTdmMDQsIDB4Zjg3OTMxOWMsCi0JMHhjYWEwZTQ4YiwgMHg4ODc0YzNjZiwgMHg4ZTlhNmVmNSwgMHhiNTgyOTdmMywgMHhiZWFiYjlmMiwgMHg2ODE2OWUzYywKLQkweGNmOTBmNzgxLCAweGJjODg3MWRmLCAweDM0YmU3MTFiLCAweDdiZTMzY2U2LCAweDc5ZWI0Nzg4LCAweDhhOGU4ZGM2LAotCTB4NTU5NzdlMjgsIDB4ZTUwNzI2NzksIDB4YTI3Y2UwNmQsIDB4ZjQ4NTkxZDQsIDB4NjQ3NzllYjMsIDB4OWUyZGJmNGEsCi0JMHg5YzVlYjExZiwgMHhmNzA0NGM3NywgMHgzZTgxOWQ4ZiwgMHg5ZmVmM2YxYywgMHg4MzBlM2JiZCwgMHg0MGJkNWZkYywKLQkweGU3Y2E2MWY1LCAweGE1MjZjYmQ1LCAweDIxNWNmYzJiLCAweDgyMGQwNWQ5LCAweDVjNmQzMmFmLCAweDE4ODdiMDNmLAotCTB4MzlmNmQzZWQsIDB4ZWJmYTNmMjQsIDB4YzlkNGRmN2QsIDB4MzA1ZWM4MGUsIDB4YmVlNmZjOTMsIDB4ZTYzMGRjZTQsCi0JMHhjMjNkZjUxMywgMHhmZDgyOTdjZiwgMHg4ZjdjYTEyMCwgMHg3MTEyOTNkZSwgMHgzZjNlNDg3OSwgMHhlN2U3YzhiNywKLQkweDNjYzk3YjY2LCAweDZmMzlkZjZlLCAweGQzZmE5NDU3LCAweGM4NjA3ZjQ1LCAweDBmOWUwYzY3LCAweGZhZjk5M2VlLAotCTB4MjVlNGQ3ZGUsIDB4ZTBiMzQ2MzgsIDB4MmYxM2I0N2UsIDB4ZDM4ZjNjNzYsIDB4ZjAxN2ZlN2MsIDB4ZjA2MzNiYWYsCi0JMHg4MTFjNzQwZiwgMHg0MjY3MzRmNSwgMHhjNjcwOGUzYSwgMHgxY2Y1YTNhMSwgMHgyMDQ3MTFlYSwgMHg1ODdkZGIxYiwKLQkweDg2MDU2ODc5LCAweDRmZTdhYzVlLCAweDQyY2MxMjk5LCAweGRiZTk1OTNjLCAweDZiM2M3NGEwLCAweGVjNjYyOTg3LAotCTB4MTZlYzk0ZjksIDB4MmY1NzdlODMsIDB4YzMyYmE1ZjMsIDB4OGIxY2Y0NGQsIDB4ZTdiZDVlNzAsIDB4NmRjMjFiNTMsCi0JMHg1MjdiZjFkMCwgMHg4Mjc3YmI3YywgMHhkNjY3YWY5MywgMHg0NGU2MzJmMSwgMHhlZDM4ODE2ZCwgMHg1MDk1OTc4YiwKLQkweDQ5OWY4MDdmLCAweDhmNWNmYzE2LCAweDE0ZTI5YWYzLCAweGZjNTBjMmViLCAweDJmZWQ4ZjVjLCAweDhiZmUzZjAyLAotCTB4YzdlMThmYzEsIDB4YWUzOTA4ZDUsIDB4YTAyNzdkYzEsIDB4YjNiYzFmZjMsIDB4ZGM2MGYyMzMsIDB4M2UyMzU5NzIsCi0JMHhhNjQ5YmM1ZCwgMHg5ZmI0MmRiOCwgMHgyODMxOTU5OSwgMHg2ZGFmOGJmNywgMHg3ZTA3NmZkYywgMHg0NGJjZmM1OSwKLQkweDljNDBiNGZjLCAweDljNDRmZjJmLCAweGVmZTZiMTNmLCAweDkyMDljZTU1LCAweDFlNzBiZDllLCAweDQ2ZjQ4ODVmLAotCTB4ZjNmMzE2Y2QsIDB4N2ZjMjlkYmIsIDB4Y2ExY2IzNzQsIDB4NDdmNzE1Y2IsIDB4YWQ3ZjgyYzgsIDB4MDlhZDNmZjgsCi0JMHg2YTkwNWViOSwgMHhjN2E1Njc2YSwgMHgyOTliNDZlOCwgMHhlYTZiM2MwZiwgMHhkN2U0M2Y0MCwgMHg2ZmJjZGE2NywKLQkweDE3ZWRmYzUxLCAweDIwZjE4Njc2LCAweDI5MzY5MmJmLCAweDI0OThmODgyLCAweDRiN2VjMzRkLCAweGZkMTk3Yzg1LAotCTB4YjY2NjU5OGQsIDB4ZTY4MzcyZWIsIDB4ZWRmOTc5ZjMsIDB4OTc3OWYzZTYsIDB4YjUzNDhjNzUsIDB4OWU0ZDdjYmYsCi0JMHhhMTE1ZmRlOSwgMHhhZmVmNGQyYiwgMHg1NGMxMzJkYSwgMHhjZWJlMTcxZiwgMHhhZWVhZmVkNCwgMHg3YzdkNTMzMiwKLQkweGZiNTM0NmU0LCAweDliNjc4Nzg5LCAweGRmNzRkN2VhLCAweGY5M2Y2YTZkLCAweGZiZDM3Y2Q4LCAweGE2ZDVhMzZiLAotCTB4YjQ3ZmQ3ZjcsIDB4NWFmZjU0YzQsIDB4YjUzMWZmZmYsIDB4ZmFlNDJjOGYsIDB4NjY1MzQwZWIsIDB4N2M5OGYxZjYsCi0JMHhhYTBmMDNlMywgMHgzZjlmMWQzNiwgMHg4YmQzNjg1OCwgMHhmODY3OWY2MywgMHg5NjU4YzViZCwgMHg0ZTlmZDFmOCwKLQkweDNhYTc2N2E0LCAweGQ3NjNiMmIzLCAweDM3NjY1MmY3LCAweDRlYTk5ZmU5LCAweGYwNjQzZDczLCAweDBiZjAwZTRiLAotCTB4NDU5MzdmMTAsIDB4NmRiYzgwZWYsIDB4ZDUxOTM5NDEsIDB4OTgzYjQzNzgsIDB4ZTJlNDZjYTEsIDB4YTc5NDE0ODIsCi0JMHhjNWY5ZjFhNywgMHg5MjM2ZDljOSwgMHg5ZDA4ZmFiMywgMHgwZTczOGY4YiwgMHgxNzM1NmRmZSwgMHhmNzQ4MmVmOSwKLQkweDJlMTk4MGExLCAweGEzMzEwMGNhLCAweDk2MDZlNjBjLCAweDI5MDYwYjBhLCAweDI4Zjk5Y2Q5LCAweGVlYmFkMmVmLAotCTB4MTViZGViMWIsIDB4ZGM5YzA3MWYsIDB4NjE3ODcwMWUsIDB4ZGZkOTM3OWQsIDB4NjQ1ZmVlMjEsIDB4MzEyOTczMWUsCi0JMHhhOGY1OTBmOCwgMHgxZWYwZWVhOSwgMHhkNzdmZTJkNiwgMHhlYjJlN2E2ZCwgMHg2OTc1NGNjNywgMHhmZmNhNGNkMSwKLQkweDNkOTcwNDQ5LCAweDFiNGRmZTczLCAweGIzZDliZjQxLCAweGNmMWE1NDAyLCAweGUyZDhlNmRiLCAweDlkNDVmN2U2LAotCTB4OWRlNzk3MTcsIDB4ZjEwYmJlZDAsIDB4ZmIxOGE1ZmMsIDB4Mzk3NDhhMmUsIDB4MzNjNmY2OTUsIDB4M2Y1NmFmOTgsCi0JMHhlZmZjOWZiNywgMHgzZjU5ODcyYywgMHgyMzdkZDYwYywgMHg5Nzk2M2U3OCwgMHhmOWQ0Mjc5ZiwgMHhkYTliNmI5ZiwKLQkweGRmNzVjMjZmLCAweGI3YzJlNzk4LCAweDdlNjA2NzY3LCAweDdmMDI3NjQyLCAweGU3YzVjNzNjLCAweGQ1NTM0MmYxLAotCTB4OGNmMDBiNGQsIDB4MjU4OWRhMDksIDB4NzNiMmU3ODMsIDB4NjhlNTBkMjIsIDB4ZjkxMThkN2YsIDB4ZTJkOGNmZDQsCi0JMHg3NTlkM2RlNywgMHgwNDdiN2Y3MiwgMHgxM2I0NjgyYSwgMHhjYjNmN2UzNCwgMHgzZDc3Y2FhOSwgMHgyNDU1YjI5OCwKLQkweDdmMjJjZTA3LCAweGJiYmFiZmNlLCAweGY2NWY5Zjg0LCAweDdjM2NmMjY1LCAweGY0MzdlMDlkLCAweGYxNTY4ZTVjLAotCTB4MWNhZGVhMGMsIDB4YjliY2Q3MzAsIDB4MzExOWUxNDMsIDB4MmU0NjYyYjcsIDB4NjYxZDZmYmMsIDB4ZWY1NDY5ZjMsCi0JMHhmMDVjZTg5NywgMHg4NzBkOGNhMywgMHg5NTdmYWRmNiwgMHgwM2Q2YmUwOSwgMHg5MDVlNTJkNywgMHhkYTE4MDVhYSwKLQkweDk5M2NjNmUxLCAweGY2MzAzN2M4LCAweGJiNGIzZTExLCAweGQ2ZDRmYzhkLCAweDA1Y2UwNzJiLCAweGI1NWJmMjMxLAotCTB4ZjdlYzZlOGEsIDB4MDg1OGJjMzMsIDB4OTMyZDY5YzYsIDB4YjQ3M2VmNGMsIDB4MDEwZjA3OGUsIDB4Yzk5ZDk1MWMsCi0JMHhkNjU0OTcxNCwgMHg5NjdlNGNkYywgMHg2OWUxYzk5YSwgMHhkOTYyNDE3ZCwgMHhlM2MzYzExMiwgMHgwZjhlMWVlNiwKLQkweDQyZWE4M2MwLCAweDNmNzNmYjNhLCAweDg2OTMxOWI3LCAweDJhMjk3NWY3LCAweDlkMWNlYjlkLCAweDhkNzE5ZTIwLAotCTB4NWI3ZWJmMDEsIDB4OTcwOWQ5MDYsIDB4NTc5NWUxOWIsIDB4MjFlMGZkM2YsIDB4ODlkOTAzY2MsIDB4ZmRlMTE2MzcsCi0JMHgzZDA0Y2IyMiwgMHg0YjZkZjNjZCwgMHg1ZGNiN2Q5YiwgMHg0ZGU1YWVkMCwgMHhiODAwYzk5OSwgMHgzMGQ4Y2EzNywKLQkweDBhMWM4NzlhLCAweDQxYjdjMWM1LCAweDFhZmI4MDJmLCAweDUzNWU1Yjg0LCAweDE1Y2NmMzRlLCAweDc0MDQ1ZTc0LAotCTB4ZDMyNTc1YzYsIDB4ZTg4MzMxNTYsIDB4Mzg2MzYxOWUsIDB4MzdmYzJiNGYsIDB4N2ZkY2I4YjgsIDB4NzkwYmE1Y2QsCi0JMHhlMzY5YmNhZCwgMHg5MDE3MmM3MCwgMHg5YjVlODFiYywgMHhiYTk3ZmQ4NiwgMHhkMzExZGExMiwgMHhkYmY0NzE1YywKLQkweGE4ZmZlZTg1LCAweDA4N2RkMzlkLCAweDEzNmZkOTRiLCAweDYxNjM2ZDc2LCAweGZhMGNiZGFjLCAweGQ3ZWMxNmYwLAotCTB4OGYyOWNiYTgsIDB4MTdiZjYzMTYsIDB4MTQxYmJiYjIsIDB4ZWU2MTdiNWYsIDB4YjQzMmVkODUsIDB4MGNmZjkwYzcsCi0JMHgzOWU2MGM3YiwgMHhjZmJiYzcwZiwgMHgzMWViZDY2NSwgMHhlYjllN2M3YSwgMHg0YWM5ZWNlMiwgMHhkZGUxZjc2YywKLQkweDEyZjZiODkxLCAweDFiYjI3MWU4LCAweGZhZjhkNWQzLCAweDFlODJmYmVlLCAweDI4Y2FiYTBkLCAweDNlYzEzMDJmLAotCTB4NWM1ZDc3ZDEsIDB4NGZmM2FkYWUsIDB4Yzg1ZGRlYjQsIDB4NjExYmM4ZWYsIDB4MTRlYzA3ZWUsIDB4YTU1ODNmZjIsCi0JMHhhNzU2ZmI0YSwgMHg1OGY3NWQxZiwgMHg2OGZiZTYyMSwgMHg5YmM3OTQ3OSwgMHhjYjUxOWZhOCwgMHgwZjNmMjBkZSwKLQkweGUyMDRmOWYwLCAweGJiNWZjMGMxLCAweGM2OWU3Zjg1LCAweGM1ZDZmMWY3LCAweGNkYTdjMDVhLCAweGQ3MGVjZjg0LAotCTB4N2Y5ZmQ4NDUsIDB4ZjMyOGI5ZmIsIDB4ODE1ZTllNzksIDB4MGZmYmQwNzcsIDB4ZjViODNlOTIsIDB4YjM4YzEyYmQsCi0JMHgzOWZlZGZkNCwgMHg3OWJmZmRlOSwgMHhiOGU2Mzk5YywgMHg4MDJmMTE4MSwgMHg5YzcxNmE3MSwgMHgyYWZmNWJkZSwKLQkweDhhNTFiYWUyLCAweGJjZWNiNjQ3LCAweGFiMDdlZTljLCAweDQ5ZjQzMzJiLCAweDQ1Y2U5M2EzLCAweDdkMTFlNzY2LAotCTB4Zjg3MmVkNGUsIDB4YzM1M2NlMTEsIDB4ZDRlYzVjNzgsIDB4MzA4N2M5YWUsIDB4ZDM0OWYzMmUsIDB4NzNkOGJjZTEsCi0JMHgzYTVlYTc1OSwgMHhmZTg3NjI1YSwgMHg1YTM4ZWQ0ZSwgMHgwZjVlOTBhMiwgMHhmNzhjZGUxMSwgMHhhNWZlZTc3NSwKLQkweGUzNzdmZDA0LCAweGRmMDBjMWZjLCAweDRiYWZlMzM5LCAweGY5ZmMxNmJmLCAweGYxODBmMTY1LCAweDUyNWZkYTc4LAotCTB4Y2Y2OGIzZDgsIDB4ZDZhNWUwMGQsIDB4MmE3ZmY3OWMsIDB4YzQxMmJkZjksIDB4MTNmZmU2MDMsIDB4NDYzYzA0NWUsCi0JMHg4YmI1N2JiYywgMHhhNDVhOWZjNywgMHhjNmUzMTA2MCwgMHg1NGY3NTIyZCwgMHhmZjA2ZDM4YywgMHg0MDczYTMxNywKLQkweDkyNTZiNzk5LCAweGNjM2RmZTk5LCAweGQ2MWFiYzAzLCAweGI3ZGIwY2ExLCAweDNlNjY3ZGIxLCAweDc1MGI5YjFiLAotCTB4MTExZDJiYzcsIDB4MWRkNDlmN2MsIDB4ZWQ0MmJjYTYsIDB4NGIwNDc3NTgsIDB4OGZkZmI0NGYsIDB4NDdmYTg2ZGIsCi0JMHg2ZjJjN2VmYSwgMHg4NmZmMDJkNywgMHgwZmViMGZlMywgMHhmZGYyODE1ZSwgMHgzMzEzMDU4ZiwgMHg0Y2ExMjYzMSwKLQkweDYyZjYxZGY1LCAweDg1MmNlMjFlLCAweDdkM2E2ZGVlLCAweDIyNzVhNjU4LCAweDNkNzM5NjYzLCAweGE4Y2VmZjNmLAotCTB4NWVlZGNjZmUsIDB4OTM5MjM3NWEsIDB4ODFlOWYzOGMsIDB4MTU1NzVjNWMsIDB4ZjYxMWZhNTYsIDB4ZjgxNWQ1YmIsCi0JMHhjMzNmZjkwNCwgMHgwODc4NWRkNiwgMHhmYjFkNzNiZSwgMHg3OWU2MGU2ZCwgMHhlZGEyZjcxYiwgMHg4ZmQ4YWQyYSwKLQkweGJiZmRjNmZiLCAweDM2N2FlZjI1LCAweDljOWY2ZTM0LCAweDI4ZGZlNWM0LCAweGJlMzUyN2JmLCAweGM5NjFmOThkLAotCTB4NjNhN2RiOGYsIDB4YWU3YmViYmMsIDB4MDU0N2JhNDYsIDB4OTk5ZGY5ZmUsIDB4NzAyYjlmZDAsIDB4NzE4NTRiMGYsCi0JMHhjNjZkYTkyNCwgMHg4NzZlYTBkNywgMHg3YmYxZTNmNywgMHhkMDJiNWI1YiwgMHg2MDZhNTc2MSwgMHhiYmRlMGQ5NCwKLQkweDg3YWQ3M2E1LCAweDhkZmMzZGYxLCAweDQ5Yzk2NWY5LCAweDllZjE1YWU3LCAweGU3NDkzNTM4LCAweGI5MDJkMGYzLAotCTB4YmE4MTg3NDgsIDB4NGM3Nzc1MGUsIDB4MmJhOTY5ZGQsIDB4YWJjYzZlYmMsIDB4Mjg1ZmUwZWUsIDB4MGY3ZWIzZWYsCi0JMHhlZjA3ZDdiZiwgMHgzMzdkYzMzMywgMHhlNTBjYjdiYywgMHhlODQ5MzUzZiwgMHhiMTY5OGQwOSwgMHhkYWNlYTFlNywKLQkweDNjNDllOTAyLCAweGU1Yzg1OTNlLCAweDI2NWY4OGM0LCAweDk3ZTIyZjc4LCAweGUyOTFhYzg1LCAweDYwZjEyMzZiLAotCTB4NWJkYTNlNzUsIDB4YjBlNjU0ZGQsIDB4Zjg4ZDJhN2UsIDB4NTFmMzFlNWIsIDB4YTgyYWMwNTksIDB4YTgzYWNiMWMsCi0JMHhhOTg1OTJiYywgMHg1NGRkNjIyYywgMHgyYTdlYjMxNiwgMHhiMTk3NGM3ZCwgMHg1NDdjYzA5YywgMHg4ZjFhZDlhNiwKLQkweGY5N2Q0NzRlLCAweGNiZTkzYjBiLCAweDFlMGYyZGMyLCAweDA1MDhjOTE4LCAweDZhYTViYTI2LCAweDY5ODY3ZTVjLAotCTB4Mjg2NGExYTUsIDB4ODAzODhiNTcsIDB4MTZhOWFlNzEsIDB4MzU0NWU2NjksIDB4ZDA3ZDkwYTAsIDB4OTNlYTY0MjMsCi0JMHhlZTIwYjYzNSwgMHgyYWI5YjI5ZiwgMHhlNzE1YWYzZCwgMHgzZWRmNmI4MCwgMHgyN2U0NzY0MCwgMHhhYTc5ZjhmZSwKLQkweDRiOTQ5MzUzLCAweGViMzI4N2RjLCAweDFhYjU4NmM3LCAweDczZTQxYmUxLCAweDFlYmJlMjJhLCAweGNkYmE4MmUxLAotCTB4MWVlNzRkZDksIDB4ZGZjM2NiZWQsIDB4NzQ1ZjcxOTYsIDB4NDVmNjlkOWIsIDB4YTAyNjUwNmIsIDB4MGMyZWUzNWUsCi0JMHhhNzk4NGIzNSwgMHg5ZjZhNTE1YiwgMHhmMjRkN2M0NCwgMHhjZTFhOTM1MywgMHg5ZTBkYTA5OCwgMHg3OGZhYzQwNywKLQkweGViZGY5MDZkLCAweGMxY2E5ZWJiLCAweGY3OGZmNjdkLCAweGY5ZWI0ZGJmLCAweDM0YjljOWY1LCAweGEzY2ViYTlmLAotCTB4ZmI0ZGMwNmEsIDB4Y2RjYTJhNzYsIDB4ZjYwM2U5YzcsIDB4NmQ4ZGQ5MzcsIDB4OWUwYTVmMmUsIDB4MjVmZmU5M2IsCi0JMHhjMGNhOGZiZiwgMHg3ZTk1ZjdkZiwgMHhjN2JlZWM1NywgMHg3NDUwMjZlMSwgMHgzN2FmNjMyYSwgMHhhYmY5NTI2NSwKLQkweGJmOTUyZjI2LCAweDFmOTlkMjY4LCAweGY2MjNiOTFjLCAweGUxMTEzNmE4LCAweDExZDAyZjRkLCAweGYwZjQ0ZmRlLAotCTB4NjEyNjYzZWIsIDB4MTc5ZTdiMWUsIDB4NzY5MmQzZTcsIDB4ZDQ0NGQ1N2MsIDB4NzdkOTNlM2YsIDB4Nzc2MzhjMTksCi0JMHhmNzg0OWYyZiwgMHhjZTY0YjYyNywgMHg5NTk0N2NhNiwgMHgxZmU3MDRkYSwgMHhjNTE2OWUwMCwgMHg3MTg3NGNlNywKLQkweDY4NzZkMzVmLCAweGQzNzk0MTk3LCAweGI4OWQ5MzE3LCAweGQ2OTZiZmFlLCAweGRmNzE3OWE5LCAweDNhZWRmYzY0LAotCTB4N2Y0MTAzZWUsIDB4ZmVhNTZmYWIsIDB4MDliZmEyZWMsIDB4MThmZjZjNGUsIDB4ZjYwZGEzZjYsIDB4NmZkNDVmYjMsCi0JMHhjMzQ4ZWY3MiwgMHgxODlhODdmNywgMHg3YTUzN2RjMSwgMHhmN2Y2MWE2NywgMHhhZjg1YTJmMywgMHhkZjg0OTg0ZiwKLQkweGJiZGVlMmRiLCAweDM0OTlkMzc0LCAweDY3YmIwN2U2LCAweGU2MWM5OWU2LCAweDczN2FmNTg3LCAweDI4OTVlMzU5LAotCTB4OWE0ZGRmZmYsIDB4ZjkwNGU2ZDYsIDB4YWIxYjcyNTcsIDB4NGRhYzVmNTEsIDB4MDljZGI5YmEsIDB4MzY1M2VmYzYsCi0JMHhmNTRlOTNhMCwgMHgwMDE1ZGFlOSwgMHgxZmFlMzRjNywgMHhiYzM2ZjIwMCwgMHg2NTllZDA2ZiwgMHhmYzNhZjhhMywKLQkweDhlNWVlYmEzLCAweDhlYjhmZWEwLCAweDJkOTY5ZmJmLCAweGZkYTAxMGYyLCAweDlmOWZjN2NjLCAweGFkNTc3NjhlLAotCTB4ZTk2MmY5YzQsIDB4ZDNlZThjZWQsIDB4NTQ0ZjY0NDgsIDB4ZjNhMjQ5OWQsIDB4N2FmZDQ2NzksIDB4ZjMxMTA0YmEsCi0JMHg4ZmI0ODNkOCwgMHg0M2M2NzU1MiwgMHhiZTJlZmFlNywgMHgxY2U5YTczZiwgMHgzNGZlZDBlMCwgMHg5NWYwZWYxYSwKLQkweDI5ZjkzZjA2LCAweGJiNzRiMzZlLCAweGY5NzBjZmM4LCAweGVmYmI2MDQ3LCAweDgzZjk4ZGQ5LCAweDdjNDRlZGJkLAotCTB4MGE4M2Q0MGQsIDB4YWEyM2RiZTgsIDB4NmRmOWZmMzEsIDB4NmU3ZjQwZDMsIDB4YjNkZjA3NTYsIDB4NjU4Zjk4MjksCi0JMHhmNDdlNjdiYywgMHg4OTI0OGY4NywgMHg3ZTNhYjA3YSwgMHhmYjRiMjRmYiwgMHg0ZGZlYTMzYywgMHhlNzg1NmY2YSwKLQkweGJhYzFhZTdiLCAweDVmMmJkYTEzLCAweDA4ZWEwNjM4LCAweDRiMzY1M2RmLCAweGYxOGNjMzdmLCAweDZhZmVhMTFmLAotCTB4YmVkMTY1NzIsIDB4MTJiZjU1ZjUsIDB4YWFlMGVmNDMsIDB4NjY3YmQyZjMsIDB4YWQ2ZGQzZDIsIDB4OTAxMWZkZjAsCi0JMHg2ZWJmNWE3MywgMHhhMTdlYjQ2NywgMHhmNDYyZjlkYywgMHg2ZWIxNGNlMCwgMHhkMmI5OWQ1NSwgMHgzYTQxOGY0NCwKLQkweGZlZTg5YjE0LCAweGVjNjVjODIxLCAweGFkYTJlYjNlLCAweDIxNzNhNGRmLCAweGJjYmM5MzMzLCAweGU3ZTQxNjFmLAotCTB4OWJlNmQ2OWMsIDB4M2ZmZjU3ZjYsIDB4MWMyYjdmMWMsIDB4NGM3MDA0ZmUsIDB4NjM4NjJmZmIsIDB4NDFiYzY5YWMsCi0JMHhmMDRjOGEzOCwgMHg1MWMzZTdmZCwgMHhmMjhlMDA5NiwgMHg1NjFjMTRhZiwgMHhjNzI4YzU3YiwgMHhmNjQyYmRhMCwKLQkweGIwZjM4ZjJhLCAweGI3YjIzNmU1LCAweDE1MTU1MmZiLCAweDM2OTg5N2YzLCAweDUyMDRlYzg1LCAweDhlZWE1ZTE5LAotCTB4ZjE0NmYxZjYsIDB4OGY3Nzk5YWUsIDB4ZjNiNjFlNjMsIDB4OTk1ZGFjMmEsIDB4ZTgyYWZhODAsIDB4ZWQ3ZGMzY2MsCi0JMHhlMDdlZjE2ZiwgMHg3NDA1NjFmOSwgMHgyNzU0ZThkMCwgMHgxNzdiNDdlZCwgMHhmYzYwZDQ1NCwgMHhiMmE3M2JkZiwKLQkweGYxYmQ0YThlLCAweDMzZmZiYzE2LCAweDNjN2ZhMGE3LCAweGI0ZWI3N2RhLCAweDk4ZGIxN2I0LCAweDY5MDVlZjQ5LAotCTB4MjQxZTk3ZGQsIDB4MTNlZTc2YmIsIDB4MmM5NGRhZGIsIDB4Y2Y4ZDliZDQsIDB4MDUyYzFkYTIsIDB4Y2UxZGI1YjcsCi0JMHhlYjllZjc4YSwgMHg1ZjkyN2JhZCwgMHg1NDI5NzVhMiwgMHgzZjQ0YWVjNiwgMHg4NTBhZTQyOCwgMHhkYTNkMjAwZiwKLQkweDIzZDIxZjM0LCAweDdiNTA4OWY3LCAweGM3OTVkNDFlLCAweDgwNjZiZTZjLCAweDZkMGQ0OTU3LCAweDJiZjAwZjU5LAotCTB4OWFmYTE2NGYsIDB4ZjUwODdkZTEsIDB4NTI3ZmI2MWYsIDB4YWIzZGUxMDksIDB4ZDliYzlhMmIsIDB4OGI0OWJmNzgsCi0JMHhiN2Q2OGZiMCwgMHhkZjMxZDRjZSwgMHhiMzBhOWVkOCwgMHhiMGFlNTIwNCwgMHhmNjg1ZGUzNywgMHhkN2U0OWFmYSwKLQkweGUyZDc5Y2RiLCAweDFmNmJlMDdhLCAweDI2N2FmM2FlLCAweDhmMzliNWMwLCAweGM1NTMzOWU1LCAweDQzN2Y1ODdiLAotCTB4MWVhNDZjY2QsIDB4N2Y0YWY3NTMsIDB4NWZiY2Y5OTUsIDB4ODBkZmYzNmYsIDB4NmE5MmZjZWIsIDB4MTU3ZmJmYzYsCi0JMHg4NzliOTVlMywgMHhlZmUxNzgxOSwgMHg1Yzc1MzFiZCwgMHhjMWU2OTQ0ZiwgMHhmNzk4MzRmYSwgMHhiZWI5ZTc4NiwKLQkweDQ3ZmExNDdmLCAweDEzZTYxZjdiLCAweDFjNmUzYjI0LCAweDhjMzI0ZjlmLCAweDI3MTBmNzhkLCAweGY1YTNjZjhmLAotCTB4OGJlYjA0MzUsIDB4NTc4ZmRmMDcsIDB4YjE5NjNjZTgsIDB4NjcxY2UzYmYsIDB4NmMxZGZkYTMsIDB4ZGNlNGY1OGYsCi0JMHg3M2ZmZGEzYywgMHgwOGJlNjJjZSwgMHg2OTY2ZWRlNiwgMHhmMTUwYmY3YywgMHgzOGZjYzM0ZiwgMHhmOGJmMDBmNywKLQkweDhhYThkZTI5LCAweDkyNmQwZmZkLCAweGE5M2ZmZjc5LCAweDM5YjRiYmY1LCAweDdlNjQ1NDllLCAweGQ3MzAyY2VlLAotCTB4MWYzN2NjMWQsIDB4YjY2YTk2ODMsIDB4NTkyODc5ZjksIDB4YjM4N2VmYzQsIDB4ZTQ1N2U4OTEsIDB4NmMzNjgyZGIsCi0JMHg1MTBiMDU3NywgMHg5MDhiMTU3OSwgMHg0NThlM2Y1ZCwgMHg4NjM1N2VhOSwgMHgzOGYxZjMzZSwgMHg3MDBlOTc5NCwKLQkweDk5N2U2NDRkLCAweDY0MmI0N2M3LCAweDY4MTYzYmY0LCAweGJmNjhjZDgxLCAweGZlMTY0YzZmLCAweDZmZGU0OGNhLAotCTB4NzdjMTQ1NGIsIDB4YmUyOTdiYTYsIDB4YzVlNTE5YjEsIDB4NTU5ZWFmYTgsIDB4NDQ4ZGYxNGUsIDB4M2M2OWE1ZjIsCi0JMHhkZWUyMzg4ZSwgMHhmYmRlZjM4MiwgMHg4ZjhjZjUzOSwgMHgzY2U0NjM3OSwgMHhiYjc5ZTM1ZCwgMHhiYTMxYjcwZCwKLQkweDBmNjFhMjhmLCAweGY3OGNhM2Y3LCAweDdlZjMyNGFmLCAweDJmYzQxMjFiLCAweGMxNWZhZTQxLCAweDQ1OWY3Yzc5LAotCTB4NzRiOWVkY2IsIDB4ZDNkZmM5Y2YsIDB4ZGE4ZmIwM2QsIDB4MTc1NDgyMTgsIDB4NmRmYjliNzksIDB4NTEzYjdiMTYsCi0JMHg5MmNmZDkxZSwgMHg4MGYyZmU3OSwgMHgxOGZjMjM1ZiwgMHhjZTkwMzVmMiwgMHhlMDU5N2ZjMiwgMHhiZTZlZTgzMiwKLQkweGM3YjhjMWNmLCAweDRkYzg0ZmExLCAweGM0NGFhNTVmLCAweDA5ODM0MDY4LCAweDA1YjdlOWVhLCAweDRhODAxZWU4LAotCTB4MzVjYTlmMzEsIDB4MWZlODE5YTUsIDB4MTc3ZmQ4MmMsIDB4ZjU3MGI5YzEsIDB4MGUzMDM1MmMsIDB4MjNjZGM5Y2YsCi0JMHg1ZDc4MThiYywgMHhmZTBmZjE2MCwgMHhiY2YxMzFkOCwgMHg5ZWMzMzJmMSwgMHhjMzAzZmMzNiwgMHgwOWZhYjAxZiwKLQkweDcxYmZiZTg5LCAweDQzYTI3ZWVjLCAweGVkMjk2Njc5LCAweDdiMjM3ZWRiLCAweGMwZWIwZDk2LCAweDRmYmM3ZTZkLAotCTB4NzhhZjM4Y2EsIDB4OWZlZWNlYzQsIDB4NjQzOTQ0NWQsIDB4YjNmOWYwMzMsIDB4NTUwZjdlMmUsIDB4NzU0M2RjNDgsCi0JMHgwYzNmOWJkOCwgMHhmZjkxOWJiZiwgMHhiZTU4MTVjNSwgMHhhODZiMGNlNiwgMHg3YjNiNWZiNywgMHgxZmYyNjZmNCwKLQkweDc5ODZiMDk0LCAweGVlMTRhNzE3LCAweGM2NzUxOWZmLCAweGJmMTRjOGNlLCAweGM5YmY3ODE3LCAweDhmZGQwNmZkLAotCTB4ZWZlZTUzNzAsIDB4OWQ3OGJjZTgsIDB4NTczYTBkZmIsIDB4NGVkM2FhN2UsIDB4YjkzNzcyNzksIDB4ZjdiMTY5YzIsCi0JMHhiYjk0ZGM2NywgMHhmODdjZWQzNywgMHgyMzg3ZmMzMSwgMHg3OWMzZGUwMiwgMHg2ODA0ZTQ5ZiwgMHhlMTlmOTE1YywKLQkweDRiOWQyMGRmLCAweDM1YmRmYzRlLCAweDQ3MWFlMzNmLCAweDYxZjIzNzU5LCAweDVkZDdlMGI3LCAweDgzNDUyMDVhLAotCTB4MjE3NjZkYjIsIDB4YWNkYTRmYzksIDB4YmZkZTRlNDksIDB4OTQyNDdmMzksIDB4YzU3YzQ0Y2MsIDB4ZmYwNjQ3Y2MsCi0JMHg1OTA1ZWY1OSwgMHhlODczZjEyYSwgMHgzODZhZTA4OSwgMHhhZmFkMzM2MywgMHhhODg0Zjc4MywgMHg4YWY2YmViNCwKLQkweDI2Nzc0Mzc4LCAweDkwN2FmYTdiLCAweGQxYWM1OTk3LCAweGUyNmZmYjRlLCAweGM5MTY5NTdlLCAweDMxM2Q0NzZiLAotCTB4ZGZiOTZmY2IsIDB4NTU1MWU0NDcsIDB4MmRmMGY1ODgsIDB4NmEwNTFmOTEsIDB4ZTYzZjU1ZjEsIDB4N2QzZjMxNzUsCi0JMHg2M2VlMmRkNywgMHg4ZjYwMmM2MSwgMHhmZDAyM2Y5NywgMHhhZGRhZjQ5YSwgMHhkYmY1Y2MzMywgMHhlYjc1Y2MyYiwKLQkweDFlNDY4NjNkLCAweDdhNGQyYmNjLCAweDVkM2RlYzc2LCAweDg3ZTgxMmQzLCAweGE1ZGIzNTFiLCAweGNkMWEwZmM1LAotCTB4YWUyMzAzZjEsIDB4YzNmOTg3NTcsIDB4ZTNjMmNmYjQsIDB4N2M5ZGQzN2EsIDB4OGI4OGIyZmMsIDB4MzQxYTJmZjYsCi0JMHhiODg2MWQ3NSwgMHgzZGUxOWY1MSwgMHhhZTM1ZDNmNiwgMHg4NDVlMzA2ZiwgMHg1NzRkMDRmNywgMHg0MzZkZmI4YywKLQkweGVmOTM5ZjIyLCAweDY0NTdhNDdiLCAweDdkZmRmYjhhLCAweDU0YWY3NDk5LCAweDFjZTk5MjU3LCAweDM4NjcxMWFiLAotCTB4NDk0ZGUwNWQsIDB4M2I3ZjBmM2QsIDB4YWQ3MGQ4ZDYsIDB4NTRhZmE4MTgsIDB4MDdjODlkMWEsIDB4NWU3OWIzMmIsCi0JMHg4NzFmMjBkNSwgMHhjNzU0ZjE0YywgMHhmZGVlMzUxYSwgMHg4MGZkMDM3MiwgMHhlMjczYzE1ZSwgMHhkYjZmYjEyZSwKLQkweGQ4ZjVmOGFlLCAweDVlYzM4NDc4LCAweGRhN2YyM2ExLCAweDVlZGQ2NWRkLCAweGFiNTVlNWUwLCAweGFiYzcyY2VlLAotCTB4YmYzMDVhMGIsIDB4NDY5NGVjMTcsIDB4ODIyYmViZWQsIDB4ZWQzYjRmZTAsIDB4YWY3OGMzYmUsIDB4ZjM2ZGQzYWYsCi0JMHhhY2RjN2FlMiwgMHhhYjNmNjhkOSwgMHhlYjQ5ZDMyNSwgMHg1NmE5MGFlZiwgMHhlOGQyZjVjNywgMHg2ODU1MTlkNywKLQkweDNjYjVhNzNlLCAweGUwODk3ZmQyLCAweDY2OWZjMTUzLCAweGJlNjMxZmI0LCAweDZmM2ZlYThmLCAweDBkZGE4ZDNjLAotCTB4ZTBlYWZmYjksIDB4NzU2NzE0YjUsIDB4ZmY5NDZkNzksIDB4NzQ2ODE2YTQsIDB4NWZjMTlhOGYsIDB4NmI5YzdlZDYsCi0JMHgyNGZkYjg5NCwgMHhiYTQyN2ZjMiwgMHhkNzk0YTNkYiwgMHhkZmM1YWJkNiwgMHhiYjQ5N2U1ZiwgMHhiOWVlYmNjNCwKLQkweGVhNzc3ODk2LCAweGY4MjMwYTZmLCAweGUwZjUxNGJkLCAweDhmOTAyZWI5LCAweGFiOGMzNDk3LCAweGFiZmQzZThkLAotCTB4NDdjOTJmNTIsIDB4ZTFhZmNmMDYsIDB4MmRhMmRiNzIsIDB4NWZiY2YyNzcsIDB4ODk2OTNkZjMsIDB4NGJjMGQxZjgsCi0JMHg0NzI4M2MyMiwgMHg0ZmRjNTFmZSwgMHhmYWIxNjAxZiwgMHg1NjM1MjljNiwgMHg2OGUxYmVkMCwgMHgxMzhhNmQ4NSwKLQkweDVjZGM1MTRmLCAweDNlMjhiNzRmLCAweDZiZjk1ZmUyLCAweDA3NWM0ZTE1LCAweDljY2FkMzlhLCAweGE2ZGY5ZmI4LAotCTB4ZDE3MjUzNzgsIDB4MzMyMjNjM2UsIDB4ZWFiNTliOGMsIDB4Y2EzMWI5NjYsIDB4NGY3ZWYxYzcsIDB4ODg5OGUzODAsCi0JMHgyN2RmNWE4YiwgMHgzODBiYzgyNSwgMHhjN2Y1ZDYyNywgMHhlZGRiNWZmNywgMHgwMDlmMGYzZiwgMHg0OTFlNjhkZSwKLQkweDdhOGU4YTc5LCAweDc4NzNiNjQxLCAweGVkN2RjNTkzLCAweGM0NGRmYTg5LCAweGU3ZWM0ZjFmLCAweDhhYmJlMGY3LAotCTB4Y2E4ZTc0OWMsIDB4MzhhYjVlM2EsIDB4ZjAwYWQ3MmYsIDB4OWFkYjlkYTAsIDB4YmVlM2UzMGQsIDB4YzlkMTU3YjgsCi0JMHhjNDliMWU4ZSwgMHhhMTdjMzE5YywgMHhmN2EyNGVhNCwgMHgzYzM0YjVhNywgMHgxMzVhYzdiYiwgMHhhNzgxOWRmMCwKLQkweDFmNTUyZWQ3LCAweDk3ZmMyYzA3LCAweDk3OGE1YmZlLCAweDVmZGZmMGM3LCAweDZiZGZmMWUzLCAweDFjZTk3M2M4LAotCTB4MmQ3YmQ4ZmUsIDB4YmZiZTU0OTUsIDB4YzhkNzg1NjcsIDB4ZGI2Njc3YWYsIDB4YzA0YmVkNGMsIDB4YTM3MWUwYjcsCi0JMHgwMzJhMWNlZiwgMHg1MDMxMWNkNiwgMHhmMTg3MDYwNywgMHg3MWNmNTEzYSwgMHg3NGUyMmU3ZiwgMHg3MTRmYjYwZSwKLQkweDU1YmNhNzdmLCAweGMzOWQzYWExLCAweGViZmNlZjgzLCAweGY3NGY2YTM0LCAweGNlYTFkNGQ5LCAweGY2YWEzZjA3LAotCTB4YjBlOThkNGUsIDB4NGJkNTlmM2UsIDB4NmYwMGRkZDMsIDB4N2UwMWY3NDksIDB4OWQzM2E2MWUsIDB4Zjg4YjVlZmYsCi0JMHg4ZGVmMGFkZSwgMHgxYmY3NGUxZSwgMHgyOTk1M2EzZCwgMHhjMjNmZmNjNywgMHhlY2U4M2ZkZiwgMHgxYzYyZjI0ZSwKLQkweGZjNTg3M2I3LCAweGNjNzg4M2RmLCAweDc0MmZlNDZkLCAweDI4YzhmZDg4LCAweDRmYTQ0YmVkLCAweGZmNTFlYmU1LAotCTB4OGZmMjY0ZWUsIDB4OTlhN2UyODYsIDB4YjE2MTc3ZGYsIDB4YzFlZTA2MzcsIDB4Nzc2NDIyNTAsIDB4YzNiYjBhZDQsCi0JMHgyZTY0YmYxOCwgMHhmMjg3YWZmMywgMHhlZWQ2MjRkNSwgMHhjYTcwZmIwNCwgMHgxNWRmZjhjMCwgMHg0NzgwMmRmYiwKLQkweDlmOTZmYjgwLCAweDRmZmI0NTVkLCAweGMyYWY3ZjQ2LCAweDMzZWQ4NGIyLCAweDkyYzVhMjMyLCAweDEzZmMwOTdjLAotCTB4Y2VmYmE2NjYsIDB4NDJkMTljZWEsIDB4ZDk3YjFmZGMsIDB4Zjg4ZTk4MTYsIDB4Y2QxNjM4NmUsIDB4MWJlNzdhYzAsCi0JMHhiYzFlYzkyNywgMHg3MmVlMWUxMCwgMHg3YjlhN2Q3MywgMHg0NzlmNjE5NSwgMHhlYjM4ZDhkNCwgMHhlN2E1ZWRkMiwKLQkweDhiNTcwZjNkLCAweGZkMTg5MGYxLCAweDcyYjc4ODM2LCAweDdlOTBlYmMyLCAweGU4YWYzZmExLCAweGU5MmJlMzFmLAotCTB4M2FlOWYxMmQsIDB4MmM5MTlmNDgsIDB4ZjQ3Y2ZjMzgsIDB4ODljMTYxYzksIDB4MjJhMTJlOWMsIDB4ZTdkYzdmNGUsCi0JMHg1ZDkzNzk4MywgMHhmNTliNzQxZiwgMHg4YWZlZmZjOSwgMHgxMzBkMzdjYywgMHhkMjlmODBkMSwgMHhiZWYzYzRhMSwKLQkweGRlMmNlZjc4LCAweGUzYzRiYjhmLCAweDY5M2ZhZDM1LCAweDFkNDU3YjBhLCAweDQ5ODdjMzE2LCAweGZhODRlODJjLAotCTB4NGJlODhlMmQsIDB4NzUxOGZmNjgsIDB4MGUyZGZkZTMsIDB4Y2ZlYzY5ZTAsIDB4OTBjOGU1YzksIDB4ZjFiOWRhZGYsCi0JMHhlZGM3MzZlNSwgMHhjNzRkZjllMSwgMHhmN2RjMWUyMiwgMHgwM2UzOGU5OCwgMHhiZmMzM2JiZSwgMHgzYWM3N2JhNywKLQkweDNmODY2NGJiLCAweDZlNjIzMDlkLCAweDgzNjgwZTQwLCAweDBmZGExYTc0LCAweGZjODZhYmQ3LCAweDk1NzkzOTgzLAotCTB4ZWQzZmM4NWIsIDB4ZmVlMzJlZTMsIDB4OGM2N2ExYjUsIDB4NmI3MjVlZWYsIDB4OGI4ZmE2OTcsIDB4N2FmMzljODYsCi0JMHhlNDA4ZTUwOSwgMHhjYjJlMTBlYSwgMHhiZGY4Y2IzOSwgMHg1ZWUyYjU3NywgMHgwZjcxMWU5YiwgMHhkZmMyMDdlMiwKLQkweGFmZjczYTYwLCAweDNlYjA3YjhkLCAweGY3YzgxYzI4LCAweGQ2YWYzZjIzLCAweGRlMGVmZmU1LCAweGNhOGVjMzQzLAotCTB4MjdmYTZmOTQsIDB4ZmRjMjlmZGQsIDB4ZDRiZmIzNDMsIDB4MzFiOWVlMjMsIDB4NjZiNmE1ZmMsIDB4MzY3MzZmNzEsCi0JMHg0OTM2ZTdlNywgMHhmNjE2N2ZiYSwgMHhmNzRhMzYzYiwgMHhmMDY0NjcxOCwgMHhhNzM4ZDNmNSwgMHhmNGEzMzJjNywKLQkweDFmMDY1YTdiLCAweDdmYjNlMjI1LCAweDdhODBmMjExLCAweDhmOTcxODJmLCAweGUzMmZlMjU1LCAweGVlYjAwN2Y5LAotCTB4YjVlYzYzMDUsIDB4ZDAxNTFmZjksIDB4OTgwNzliYjksIDB4MGY5N2UyOGYsIDB4NjBiMzI3YjQsIDB4NWYzYjVlMGMsCi0JMHg3MzJmOWY4OCwgMHgyOWRiOGM0MiwgMHg0NTY2NzllZSwgMHg3YzgzNWU3YywgMHhiOWQxZTdjZSwgMHgwZmRjM2UzYywKLQkweGU4ZmU3MGE3LCAweDc3NzlmNzE0LCAweGM0NjRmZTJhLCAweGUxNzVhMjUzLCAweGY2NWU4MGM0LCAweDJiMWYyMzI3LAotCTB4OTliYzFjNWYsIDB4Yzc5YWY1YzYsIDB4ZmJmNDU3YmQsIDB4ZTJjYWJmYjMsIDB4OGYwMDA0ZjcsIDB4N2I2MDdmNDIsCi0JMHgxNzYyYzdhNywgMHhmMGZlYjI1ZCwgMHg0MTliZDY5YiwgMHhiZDIzNGZiYywgMHg0M2ZhZTk3MiwgMHg0OGZlODBiZiwKLQkweGYyYzJmYTIzLCAweGUyYmI0MWVlLCAweDU3YmYzMGM1LCAweGI2YzNjNWVkLCAweGQwZTNlYjE5LCAweGU1Yzg0MGFkLAotCTB4ZGQwYWU5OTUsIDB4ODQ1NTc2NDMsIDB4ZGE4OWZiYWYsIDB4ZjcxMzBjNjUsIDB4NWEzYzBiMGEsIDB4OGZjYjRiZTEsCi0JMHgwOGI3MWZjZiwgMHhmMTk2ZDQzYSwgMHg5ZWYxOTE3YiwgMHg5NDJmOWM3NiwgMHhhZmU4M2UzOSwgMHhkMjBiNGNhNywKLQkweGJjOGJiZmYzLCAweGRhZDE3MTg3LCAweGZlMmYwZTFkLCAweDBlY2Y1MjRlLCAweDg1ZWExNTU3LCAweGFhOGUxZDllLAotCTB4ZmE1MGRhZjUsIDB4OWJmNDJkZjksIDB4ZmY4Y2VjMmMsIDB4NjRiZmZhZTksIDB4MmZlMjdmYWUsIDB4NGJhMDFmNzEsCi0JMHhhZDFjN2JhNiwgMHg3NmU5M2RmZCwgMHhmYTAzNzdkMywgMHhlNWRkODEzYiwgMHgyZDMzZmExMCwgMHg5ZWM1ZDM5OSwKLQkweGFiNGRkN2M3LCAweGYwMjNkZDVjLCAweDY3YzA4Zjc2LCAweDFlNTdiODlhLCAweGFlMjcyMWQ2LCAweDM5YmI0NjQzLAotCTB4MDA5NGZkZTIsIDB4ZWYzZjdiOGIsIDB4ZmE1NzA4NjMsIDB4ZWNmMDNhZTAsIDB4ZmJmNjMyYjIsIDB4N2QzYmY4ZTEsCi0JMHg3NDJiOGE0MSwgMHg4MzkyMzZmZSwgMHhmMjk0ZjZmZCwgMHhmYmY1ODEzOCwgMHg4YzY3YzE2MiwgMHhjOWU4ZWQ5OSwKLQkweGZkMTJiY2QzLCAweGQyNTg2MTFlLCAweDgwN2VkZjcxLCAweDRmN2U2MWRlLCAweGIyNzcwYWYwLCAweGM1YTJjZmIwLAotCTB4ZjczZjkyZjcsIDB4NDhhM2Y1MjQsIDB4MGYxYzUwYWYsIDB4MGRiZjM2NmMsIDB4MGE3ZTg4ZjMsIDB4OWU0YzViNzYsCi0JMHhiZDE2YmRlNiwgMHhiZTY3ODU2MywgMHgxM2I3Y2Y5YiwgMHhhM2Y2MzdmNSwgMHhkZGUzOGI0NSwgMHg1YmFjNjBmZiwKLQkweDg2ZDNiY2M2LCAweDQ5ZTBlNTliLCAweDI2YzcxZjBmLCAweDI1OTc0YmM2LCAweDZlYmEwZjFhLCAweGViZTMwYzc3LAotCTB4ZTYwYmNmMzEsIDB4NDc5ZTEyN2EsIDB4YzgwYjM5ZTgsIDB4ZmFlZTAwZTMsIDB4ZmM2ZmM1ZmIsIDB4NTljZTc4ODgsCi0JMHgxM2QyYjAzZCwgMHg1ZGEwMDc2MywgMHhiMDk1ZWI0ZSwgMHhjNjU1M2JjMywgMHg1ZDg0NGJmNywgMHg4Mjc0ZmE4OCwKLQkweDkwNzcwYjE2LCAweDZkOTc0OTA2LCAweGYxMmI1ZjVjLCAweDQzY2MzNWY1LCAweDliODk3ZWZjLCAweDJmYjQxOWZhLAotCTB4NGZiMTFkYjgsIDB4Mzg5ZDZiY2MsIDB4OGRhYWZhM2YsIDB4MjFiZDkyYjUsIDB4ZTljODY0ZjAsIDB4NmU5YzhiNGUsCi0JMHhlYzM1N2NmNSwgMHg3N2UyNzViNCwgMHhmMTdlOTEyZCwgMHg2MTRhZTFmNCwgMHhmMzFjOTVhZiwgMHg5NWJjYzc4ZiwKLQkweDFmMzQyYWNiLCAweGRkMjVhMWZhLCAweDllNjAwZmIzLCAweGZjMWVlMTRlLCAweDM5NDE5YTYxLCAweDhjZmMxNDJlLAotCTB4YzE4ZGNkZmQsIDB4NmUzY2VmZGYsIDB4ZTZmN2RkOTMsIDB4ODU3ZjA0NTcsIDB4N2NjMGQ4YzcsIDB4ZWJkMThkZWYsCi0JMHg3YWUxZWVmZiwgMHgyZGZjMWQyYiwgMHg1ZmQzODM5NCwgMHg3ODVlYmQxMSwgMHg5ZTAwZTJhYywgMHhiYTA1YWFjMywKLQkweGY4MzBjYWEzLCAweDZmM2MzM2EzLCAweGUxZWQwYmI5LCAweGY2ODdjYzYzLCAweDllNzg2Zjc0LCAweDQ3ZjAxYzZkLAotCTB4M2Y2ZTFhZWYsIDB4ZDVmOWU4MGUsIDB4OTdhMDVmMWMsIDB4MmY5N2E4YzMsIDB4MmU0ZmU2M2IsIDB4YzI5NmJhODIsCi0JMHg3MzY1ZWVmNSwgMHgyOTY3YmYxOSwgMHg1ZmExMGVlYywgMHhmNDg5ZTg2ZCwgMHhlMmE3ZmFkYiwgMHg3MjdkNmYzZSwKLQkweGU2MmJiMzYzLCAweDJlZmI0MGY5LCAweGE4M2I5ZjY4LCAweGRmNTE2YTZmLCAweGYzZGIxMzc4LCAweDc5OTI1MzIzLAotCTB4YzcxZTdiM2UsIDB4ZTY2NGY0Y2IsIDB4YWYzYzAxNzQsIDB4ZGM2NTA2ZTYsIDB4YjJmNTdjYzcsIDB4YWY3ODA5ZGMsCi0JMHg0MGE0YTFmYSwgMHg3ZWY4MTJkMSwgMHgwZTNlMGNmMiwgMHgyZTg0NzJlYiwgMHg0Nzg3OGRjYiwgMHg0NDMzYWZhZSwKLQkweGU0NDMyOGRjLCAweGYxMjQ2NzZmLCAweGU3MGE0NTcyLCAweDk3OWQyNGY3LCAweDFmOWNlOWY3LCAweGUzZjEzYzMyLAotCTB4YmI0NGNiNGMsIDB4M2JkNzFiM2UsIDB4YjdjNjk3OGYsIDB4OTE0YmFlNGIsIDB4OGIzY2VkMmUsIDB4ZGZjNmIyNGYsCi0JMHgxNzQ5NGJhZiwgMHgwNmRiNmFmNywgMHgzZmMxYjVmNSwgMHhjNjc3YzQyNywgMHhmYzYyNjVmOCwgMHg4OTk4Njc0NSwKLQkweDhkMjkxNjdmLCAweGNlOGIzN2M0LCAweDg2MzdjNDI4LCAweDNmZTIyNDVjLCAweDFhZWVmZjYzLCAweDE0YzZlMDQ3LAotCTB4OWZhM2Y3OWMsIDB4MjA5YzYzMTUsIDB4ZGYwZjY1NzcsIDB4ZGZkZmMyMzcsIDB4N2NiMTM2YjksIDB4NDE4MWViMTgsCi0JMHg5ZGYzZDA2ZiwgMHgzZDAwY2YxOCwgMHhhZDBhNjkzZiwgMHhmYzhiY2Y0MywgMHgzMWE3MmU1MywgMHhmMDhmZmE3NiwKLQkweGJiM2IxZGY3LCAweDhlNmJjY2FmLCAweDdhYzBlYmExLCAweDhjZmVlM2U5LCAweDg1MTk1ZDc1LCAweDg5ZTljMDQ5LAotCTB4NzI5OGQ1ZTcsIDB4Y2FlZGZhYTksIDB4ZjE3ODc2MDQsIDB4NWUxZGE5N2YsIDB4ZTQ4MTNkZDIsIDB4NTc4MTAxZjYsCi0JMHhjNDY2YmUyMywgMHg3ODk3ZjBiMSwgMHg4YWIzYmRiOSwgMHgxYTc5MzFmMCwgMHhmZmMwNmY5NywgMHgyMmZmODE1NiwKLQkweDFhN2ZmZjhlLCAweDY0M2RmZmMwLCAweDc5NzA3NDI3LCAweDRiZDY4OGM5LCAweGY0NWYyNGY5LCAweDQ1M2JmMTlkLAotCTB4YTBkZjI3YjksIDB4MjkzZGNlN2MsIDB4YTlkZjdmZGMsIDB4YmU0MDlmZmIsIDB4YmJmMjI1NWMsIDB4YTg4OGNmMjcsCi0JMHg0MDdiNThkZSwgMHgyYWQxN2VmYywgMHgxYWY5YzBmYiwgMHg1OTFiYzdjYSwgMHgwZWNkZmJjYiwgMHgxODk0OTdlZiwKLQkweDg1OTZkMWY5LCAweGY5ODAyY2M3LCAweGY5ZjE1NzY3LCAweDliYjE0ZGFjLCAweDU4NzVhN2Q2LCAweDQ4NWYyZTg3LAotCTB4YmIyZGZhZTEsIDB4NjAxNTIyMmEsIDB4NGEzNzZiN2YsIDB4MTIzN2Y0MGEsIDB4ZjgwOTg3N2YsIDB4MGIyMzY0NjYsCi0JMHhkMGZlZmVjNSwgMHg0ZjFmMWY0OCwgMHgwN2E0ODVmMywgMHhkM2U3MDY4YSwgMHhhNDU1OWI2ZSwgMHhjZjY5NWU4MywKLQkweGEwYjVmNjQ4LCAweDM2MDZhNGM4LCAweGJlZDc5ZjIzLCAweGYyZmNhMTFiLCAweDJiNzZlZmM5LCAweDllNWZjN2U4LAotCTB4Y2Y4MmRmZWEsIDB4NjU3OGY5OGQsIDB4YmVmZDI0N2QsIDB4Y2UxY2JiZjksIDB4MzJmNzYxMGUsIDB4NzFlMWNkMTYsCi0JMHhmZTA0MjdmZiwgMHg4ODdiMGJkNywgMHgyM2RmYTYxZCwgMHg5NGZkYjhkMiwgMHhlOWFjN2NiMSwgMHhmZjBjZTc3NywKLQkweGZhNzNmZDA3LCAweGI1OTk2OTNkLCAweDcwYTc4YTMzLCAweGJjYjE5NmZkLCAweDgzNGJlYzkwLCAweDU3ZTdhNjFmLAotCTB4ZDNlN2M0NmMsIDB4MDEzMTVjNDcsIDB4NWZjODk3ZWYsIDB4NzdmMDUxMTUsIDB4ZDZiYTdmYTUsIDB4OTRmZWY3MTYsCi0JMHhjMDFmNDI0MywgMHhjZWM3ZjYzYywgMHg2YjcyNDJlMywgMHg5ZDI3YjNiNCwgMHg2NzkzNmY5ZiwgMHgwZGRiYjdjNCwKLQkweDNlN2QyYzNlLCAweDBmYmE2ZWVkLCAweGI4NjU1NWIxLCAweGZmZTA2NGVmLCAweDM3OGFkNGYyLCAweGUxOTE5ZTExLAotCTB4NDZlMTEyNzUsIDB4NDljNDY3OGMsIDB4Y2ZjYTM5ZjAsIDB4OWNmOWFhMDcsIDB4NWNmOTQyNWUsIDB4ODJjYzYzYjYsCi0JMHg1NTZjZjk1OCwgMHgyY2ViM2U4OSwgMHhlODZlMTNiZiwgMHhhZTE0ZGU4YiwgMHhhZDQ4ZWZjNywgMHg3MWYyMDNmOCwKLQkweDE0NTNkNzdkLCAweDkxYmM1OWI3LCAweDQyNGMxZWZmLCAweGZlMjQ1Y2ZjLCAweDc4Y2RkZTYwLCAweGY4MGQ1ZGNmLAotCTB4YTNlZjc4MTcsIDB4ZWVjODk2MTQsIDB4ZjdjMzlkYWQsIDB4NzJiNzZhZGYsIDB4MmFhZDY1N2UsIDB4MWI1NzAzZGQsCi0JMHg3ZjQxMWVkZSwgMHg3ZWEzZDQ2MiwgMHhkNWE3NmUxZiwgMHgyZDJlZGQ2YywgMHhhOGViYzE4YywgMHgyN2U1MTBkYSwKLQkweGU0MzZlZTVjLCAweDJiMTllYjg5LCAweGQ4ZGM2M2RmLCAweGM4NzZmYzA1LCAweDllZWFlZGM1LCAweGZmMDdlZTUyLAotCTB4N2FjOTA4M2YsIDB4MDA4MDAwNmIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsCi0JMHhkNTk0N2M3OSwgMHg2Nzc5ZjBiOSwgMHhjYzkzMzI0ZiwgMHgyMTMzZGY2NCwgMHg2MTI2MjIwMSwgMHgwMTE2MTIxMiwKLQkweGEwMDg0OTMzLCAweDI0NTg0ZTA4LCAweDgxZWMzNmM4LCAweDhiZjYyOGFjLCAweDBjMTk3ZTk1LCAweDZmNjJlNDUyLAotCTB4YjkwNTU2YWMsIDB4ZGE1NDQwNzYsIDB4MWEwODA5NjIsIDB4ODhiMGU4MzQsIDB4MTQ4ZDZhZDAsIDB4NDNiMDViMDUsCi0JMHg5MjEwODhhNSwgMHg2ZjE2YjYyOSwgMHg3OWU3YmQ2OSwgMHg3OTk5MzljZSwgMHhmOGIwY2NkZiwgMHhhYmJmN2VkMSwKLQkweDljY2UxYzdmLCAweGYzY2Y2Y2Y3LCAweDI3M2Y2NzljLCAweDJkNjc1YTVkLCAweDJiYTQyMjI5LCAweGNhZTZjMjI5LAotCTB4OWRiZGU0MjQsIDB4OTE0ODhlZTMsIDB4ZTk3Njk4ODQsIDB4NTVhZTUwM2QsIDB4ZDAzNDQ5NmQsIDB4NzQ4M2I1ZjYsCi0JMHg0ZWRhMTZiNiwgMHg2MjkwOWI4OCwgMHg4ZTM1YTI0MiwgMHgxMmNmZDBkZCwgMHg5MmFkYjI2YiwgMHg0OWVhYjEwOCwKLQkweGM4NDhkOWExLCAweGVlYzRmMWIwLCAweGYwYjdlNWE2LCAweGFmYWQwOTVmLCAweDQyNWNmNWE0LCAweGMxZDMzNGVlLAotCTB4MjkzZmEwZTIsIDB4YzkwODk4NzQsIDB4OWM3MDliMzYsIDB4YzMyMTE1NzgsIDB4YWMzOTA5MGIsIDB4MzQ0MzJlMjUsCi0JMHg4YmUwYmIyMSwgMHg4OWFjODQxMSwgMHhlMzk5YzQ3MiwgMHhiMTBmMWU2MCwgMHhmMTk2ZmVkMSwgMHg0MjU4ZjdmNCwKLQkweDViODkxYTZhLCAweDZjZDVmM2EyLCAweGY0MjNhZGRhLCAweDc2ODQ3Mjc3LCAweDY1MjQyMjRhLCAweGQ2ZjM4NGJiLAotCTB4MmQyY2RmNmMsIDB4NWU2N2JmYTAsIDB4MDc1ZmI1ZDgsIDB4YTE5MzU3ZGYsIDB4N2FiM2Y0NjEsIDB4ZDAzYjhkODksCi0JMHg3MTgwY2Y2MiwgMHhmNjFjN2I0OSwgMHg5NjU0ZWIxMywgMHhiZDcwYjg4NCwgMHhlOWI3YzZjMywgMHgwZTM4YjlhYywKLQkweGJmZjRhM2VlLCAweDA3OWY0YWI2LCAweDU2NjZjZmVjLCAweDliMzU3N2UzLCAweGE2NGZlZWI2LCAweDYyNmE5MWYzLAotCTB4ZWZjNTZmZWUsIDB4ZTZjNWRmZjYsIDB4ZmY4OWU4ZDcsIDB4Njc1ODY0ZmIsIDB4YTJlNzViMmUsIDB4YzRiYWZmNWMsCi0JMHgyYWFhZDdmZSwgMHhkZmI0Y2Q3MywgMHg1YjA4ZjhkYSwgMHhiMzhiNmQwYiwgMHg3YWMxODczOCwgMHgwZjNhYTc4ZCwKLQkweDYxOTE4ODUxLCAweGE3M2EzY2E3LCAweDc3ZmViZmQxLCAweGQxODQ4NDc1LCAweDU4YzM4NzdlLCAweDE1YjM1MmZmLAotCTB4NDc1NjNhZTEsIDB4Y2ViYmY4NWMsIDB4ZTNhNTYzOTUsIDB4OGUxN2VlMWQsIDB4NDliOWJkZTMsIDB4YTRlMDFlMzUsCi0JMHgyNzczMjcwZCwgMHgzNzkzZjlkMywgMHhiNDU0OTU2ZCwgMHhlNjQxMWIxZSwgMHgyM2Q2MDIzYSwgMHg1Y2M3YmJkNiwKLQkweDA2MmU2MTU2LCAweDFjMjI3NDM4LCAweDcwNjkzNmVhLCAweDQ3M2ExNWZkLCAweGZmNWNmMmY2LCAweDJhY2M1Mzc3LAotCTB4ZjRjMGY3OWMsIDB4ZmE1ZTc0Y2YsIDB4N2M2ZmQzZmIsIDB4NmJhOWY4ODQsIDB4YjA2ZGVjOTUsIDB4NzQ4ZmQ2ZGUsCi0JMHhhYzAwZjJkMywgMHg3ODkzNTMzZiwgMHhmNjEwMjY0MiwgMHgzZTdiMzNkZiwgMHhlZmU5NTlkMiwgMHhmYzMzNzYxMywKLQkweGE5ZGVlZGQ1LCAweGFlY2I0MDU5LCAweDFhNGJhMzUyLCAweDMwM2M3ODBjLCAweGFlYWNlODA3LCAweDI0YzI0ZjRkLAotCTB4MDY3MzlmYzAsIDB4YTc0OTQzYzAsIDB4Nzg4NDFlMDIsIDB4NDJiZTgxZDMsIDB4ZTgwMjMzZTEsIDB4M2FhYTA4YTgsCi0JMHg2N2E0N2Y3NywgMHhmYTY0ZTY2NywgMHhkZDM0NmI3ZCwgMHg4ZWU4MTFiZiwgMHhkOTE4ODNlZCwgMHhiZWMxMGZlZiwKLQkweGM3ZTkwMmUyLCAweGFmZTYwY2I5LCAweDgwMWRiNzA4LCAweDI4NTE1MTczLCAweGFjMDg1YWQ5LCAweDIzZWUxOGYzLAotCTB4MzFjMTljYjYsIDB4Nzk5NTNkNzAsIDB4MGFiM2Q2YzEsIDB4NjE4Yjg5ZTcsIDB4Mzc4ZDEyZjMsIDB4ZTcxM2U2MWQsCi0JMHhkNjRkNGUyYiwgMHhmZjdmNDI5MiwgMHhmYTU3OGUyNiwgMHg0ZWZkODdiYiwgMHhmY2YyMzlmYSwgMHg2ZGUyNTZlYiwKLQkweDc1YzI1OWFiLCAweDU1YTdhMTA3LCAweDUzZGFjZjgwLCAweGE3YTMwZjFlLCAweDkzZDAwZDRlLCAweDhmYTBiZjU4LAotCTB4YzY2OTM2NTcsIDB4NTZlMzllMDcsIDB4NmJjNzBlYjMsIDB4MWQ3MDZiMzUsIDB4YTI3ZTAwY2YsIDB4ZTc2NWE5NjgsCi0JMHgwNjU1OTlmMiwgMHgxOThmZjIzNywgMHhmOTQ4OGY2MywgMHhlYmY3MmYxNCwgMHhhYmJlNTAzYywgMHhlZDBiNWY5YSwKLQkweGY5YjMyNmVmLCAweDBmNTRhYWQ3LCAweGEzZWQ3ZDQwLCAweGY4ODJkMjQ2LCAweGYwMDkzZmI0LCAweDEyM2QzMDNjLAotCTB4YTU1YjUyZjEsIDB4MzhlOWViNzMsIDB4YjEyNmJmNGYsIDB4MjZlOGNiYmEsIDB4Y2ViNTlmZjQsIDB4MWZhMTBiYTksCi0JMHhiZGIzMGQ4OSwgMHgxZTczNzgwNCwgMHhmNTMzNGRkMiwgMHgzZDJiMjdhNSwgMHhmYmZhNTZmNiwgMHhjZTc2MzY4NCwKLQkweGRiNmExZTA0LCAweGRkMDE1ZDE4LCAweDVjMzliYzIzLCAweGNiNzRmMGZkLCAweGM3YzA4ZGNlLCAweGEzMzMyODlhLAotCTB4MDAyNzRhMDcsIDB4NjE2ZDlhZWYsIDB4MzYwNmIzZTYsIDB4ZTgwNGI3ZDcsIDB4MzdhYjIyZDIsIDB4Y2Y5OTI3YjQsCi0JMHgzNWViZjhlNiwgMHg4M2EwMGZmMCwgMHg4NjQ4YzRlZCwgMHg3NWYwNzVkMiwgMHhlZTcyYTFiZSwgMHgxOWQ0M2MwMiwKLQkweDE0YjU4N2JjLCAweGZhNGY0M2I1LCAweGEyODc1Y2YwLCAweDVmYTY5YWRiLCAweDg0M2IzODBkLCAweDQ3ODk2NTkwLAotCTB4NTVlNzE0YjAsIDB4NDdlZDhmZGIsIDB4YzcwZWZmN2MsIDB4ZDI1MGNiZmIsIDB4YmE3MzBmZjEsIDB4YzM2YTI5YTksCi0JMHhiNjczNThmMywgMHg3MWIxY2YxMSwgMHhjNjY3ZTMzYywgMHg0ZDdlNzI1MywgMHhiZjdjMTNjOCwgMHg4YTljNzFlYiwKLQkweDZhYjFiNjg4LCAweDlmOGFmNzBhLCAweDEyMTZlNjRhLCAweDkxMmU1ZjlhLCAweDhlOGRhMzg4LCAweDgzYTZjNWY3LAotCTB4YmUwMGYzOTEsIDB4ZTM1NWJmNTcsIDB4N2VkOGMzN2UsIDB4ZDBmZTcwNGYsIDB4MWMwMjhkYjUsIDB4NDc1MWJkZTksCi0JMHg0NmY3ZWM4MiwgMHhlMzllMjNjNywgMHg4NmJkZTAxMiwgMHg3YjZiYmVjMywgMHg1MTNmODhmOSwgMHg4YjZkNzE3YSwKLQkweGJkZmYwMWIyLCAweGMzY2E3ZGI4LCAweGVlZWJhMjdmLCAweDUzNjI1YWRhLCAweDM4YjRkOTAzLCAweDcxN2M3ZTkwLAotCTB4OTQyZGI2NjEsIDB4NjRkNTYyN2UsIDB4YmVmMTQ0YmMsIDB4ZTQ2MGVkYWEsIDB4Y2JlZmRhNDgsIDB4ZDQyZTBjNWYsCi0JMHg3Y2RkN2VkMywgMHg1MzVlMTc5ZCwgMHgxZTVjMDEzNywgMHg5ZGM3NjU3ZCwgMHg5NmUzNWVkMCwgMHg3NzhmODA2MiwKLQkweDNmZTlmYjZkLCAweDZmNTdjZjgxLCAweDkzMDgwMDZkLCAweGEzYmM1Zjk2LCAweDU0ZWZkMmYzLCAweGY3ZWNjZGVlLAotCTB4Zjg2NjUxNmQsIDB4OWYxN2NiZWUsIDB4ZGRlMDEzYmMsIDB4ZWQ4MmQ2ZDIsIDB4OGNkYzVlMTcsIDB4ZWNhZjAzZjUsCi0JMHhlOWJmZmI3OCwgMHg0ODhlYjU3NywgMHhlMTc3N2MxYiwgMHg5Nzg4ZmRiNSwgMHgwZWM2YTc1YSwgMHhkNzQ1MGRmYiwKLQkweGNmZGNlY2NmLCAweDg0OWI2NGY4LCAweDMxNTQ4ZGU3LCAweDVhZTgyNWZlLCAweGFmOTdlZmQwLCAweDI4MTExZGNjLAotCTB4OGVkNTZhMWYsIDB4NGZiZTA5NTQsIDB4OTI1ZWRiZDAsIDB4OWNhMDVlNTAsIDB4Njg4YzM3NzgsIDB4ZGZmZWU4YzIsCi0JMHg5NjgxYTVhMywgMHhmYmU1ZWExNSwgMHgyY2U3ODBiNSwgMHhkOTA4Y2ZjNiwgMHhhN2I1ZTQyYywgMHg2ZjdlZmU4NCwKLQkweDc1ZTZjNDQ5LCAweDNlYWVlZTcwLCAweDI2ZTc4ZDk4LCAweDFkMWRkMTgyLCAweDMxYzdjMGM3LCAweDQzNDQzOGMwLAotCTB4MGZiZWIwZWMsIDB4YjJkYjZmZDMsIDB4YTU0N2NlOGUsIDB4OTI0ZWZiMzQsIDB4NDc3NzljNzAsIDB4Y2UwNWJlZGYsCi0JMHg4YzJmNThiZCwgMHhkYTBmMzkzNywgMHg5ZTQxNTMyYiwgMHhmMmQ3ZGY4OCwgMHg2NzBkYWU3NSwgMHhlNzIyZWRmMiwKLQkweGM2NjUzNTM3LCAweDdjNWU1MGI1LCAweGYwMGFhYzM1LCAweDBlZjNhZjUzLCAweDcyZmMwMGIwLCAweDViNDcxZDE5LAotCTB4NmRhZWJmMTgsIDB4MzdhZGFlNWIsIDB4ZTcxYzdmNjIsIDB4YTBhN2NhMTMsIDB4ZTllN2EzY2MsIDB4ZjQ5ZjNkMWMsCi0JMHgwZWRmYWRhYiwgMHhjOTdlZjk4MSwgMHgxOTM4NjRmOCwgMHgzZTk4ZmIwZSwgMHhmMDA0OGNlYiwgMHhkNDZkYzg4YiwKLQkweDdmNWMyMGQ2LCAweDk2MjlkYWMxLCAweGFlODdkYjAyLCAweDQ5NDdlNzYwLCAweDIzMTZiOWI3LCAweGI3M2IxYjg3LAotCTB4NTMyYmJiYzksIDB4ZjRiN2M4YWQsIDB4ZmEwMWZlYjYsIDB4YjNiNTcyNTMsIDB4YmY3ZjQ0YzUsIDB4YTZkMzg1N2IsCi0JMHhlNmY3NzRhNiwgMHg1MzYzNjNmOSwgMHgxYzk1ZmQ2OCwgMHhhYmQyMDg2OSwgMHhkOGYyNjI1YSwgMHhlYTc5YzQ2NSwKLQkweGU3YzhjYTlhLCAweDJkMjNiZDc0LCAweDliYzc1Y2VjLCAweDQyOGVlNjg5LCAweDM0MmE5ZTNmLCAweGY4NDQ2MzQ0LAotCTB4ZDVhZjkwZmIsIDB4N2FmMmU1YWQsIDB4MzEyNzViMmIsIDB4OThhN2QyZjgsIDB4OGVmMTlmYjAsIDB4NjgzYWZmNjgsCi0JMHhlYjExYTMzZiwgMHhmMmZiZjRiZSwgMHhhYWJhM2U0MCwgMHg3NTVhM2U1MCwgMHg4MjBiZGViOCwgMHhmZTU3MTE3ZiwKLQkweDdmM2YzY2VjLCAweDEzOWI3YWEwLCAweDQ3NWUzNWU4LCAweDhmZTMyMzRiLCAweGZiZmM3NDk1LCAweDk2OTVhNTJjLAotCTB4MWYxOTdmMzgsIDB4NzA5NWRhY2UsIDB4NzRlZDBmNWEsIDB4NzYyZGQ3OWMsIDB4OGI2YzhlZmMsIDB4NTBhZmM5OTEsCi0JMHhlMzllYjA3YywgMHhiYmM5MTlmZiwgMHhiNWNjZTgxOCwgMHg3NDBjY2MzNywgMHg3N2E3N2Y1ZCwgMHg1YzFmMjA0MCwKLQkweGIwN2M2MTZiLCAweGY3NGRkMzliLCAweGVmMmY0NjVlLCAweGQ4MmU1NGFhLCAweDZlNWJiYmRmLCAweGE4NzQwY2RmLAotCTB4ZmYwM2M3OTQsIDB4ODY5NTc2MmIsIDB4MmVkYzliOGUsIDB4YzkyZjAxOTksIDB4ZjBjYjI2OWIsIDB4NTViYWY1NDcsCi0JMHhlNWQ2NTdhMCwgMHg1ZjgxNDM0OCwgMHg3ZmNiZWQ0OCwgMHhkN2FkMWI3NSwgMHhiZDQxYmM1MywgMHg5ZjNmMzc3ZSwKLQkweGVmODU0ZjU0LCAweDE3MmJkYmViLCAweGIxMjk3Y2MyLCAweDEyZDRkOTc3LCAweDUzNjM0N2VhLCAweDk2YmViZDY4LAotCTB4N2ZmOWMzMTQsIDB4MzdiZWNkMjYsIDB4OTEyMWY3MDUsIDB4NGYyMGFjOTcsIDB4ZjIwZDVlYTksIDB4ZjUwZjJlMzQsCi0JMHg1NmU3N2FmMSwgMHg4ZTQ5YmZkNCwgMHg4NWJkY2I4ZSwgMHgyN2Q3YWZhOCwgMHhmOWMxYjRjZSwgMHhmNjI3YzNlYSwKLQkweGFmN2Q0MmFlLCAweDBiNmUxYWRlLCAweDY4NGZkZmEzLCAweGZhNjAxZTk3LCAweGY1YjA5MThlLCAweDRmYTg3NjQ4LAotCTB4YzM3NDhmNzAsIDB4ZjgwOTJlN2EsIDB4MzlkYjUyODgsIDB4ZGVlZmU2MDcsIDB4ZGEyZTI3YTMsIDB4NzFkZWRlZmUsCi0JMHhiZDA1Y2YyOCwgMHhhM2Q3NWU5OCwgMHg5OGQ2OGY1YywgMHgyZmNiZDAyNSwgMHhlN2M5ZGIzNiwgMHg2NTk4MjU1NCwKLQkweDA1YmMyMmIxLCAweDY3YjY2YjNjLCAweDVjOWNlMGFhLCAweDlmZjBlZGUyLCAweDQzY2I5ZTM1LCAweDQyZGQ2OWZhLAotCTB4MmQ2N2QyMGYsIDB4ZjU2M2RiZDcsIDB4MDMwNzgyZjYsIDB4MjhmNDI3ZjAsIDB4ODJmYzFkMjUsIDB4YTZmMjdmZDMsCi0JMHg2MjFjMTI0MywgMHhhZWVlN2UyNSwgMHhiYTA2OWUyNiwgMHhhOTM3YmJiZSwgMHhhOGY5MjUzYywgMHg3YzhmZGQ1ZiwKLQkweDZjOGU5NTdmLCAweGI3OGVmYTkxLCAweDhhOGJmMzgzLCAweGYwMDE0NzE4LCAweDQ2ZTk4YWM5LCAweGFhN2YyMDViLAotCTB4YzJhYmI3MDgsIDB4NDIzY2Y0MDIsIDB4ZmEyYTQ1MWMsIDB4MTM3OGY5ZGQsIDB4ZDg3NWZmYzIsIDB4YWNiZDEwNzcsCi0JMHg2Mzk2N2ZiNywgMHgyMmJiYzAyYiwgMHhhN2VkMGMyMSwgMHhmOTVkNWE3YiwgMHg1ZDZkMWZhNCwgMHhlNzA1NWUxNSwKLQkweDIzNjNmMjkyLCAweGVkMzM0ZGYyLCAweGRmOGJiZjRmLCAweGU0NDVmMjMyLCAweGQ3MDVhNGIzLCAweDY2NjJkOWI1LAotCTB4OGEzOGM0ZTMsIDB4NjRiNTgxMWEsIDB4MzkzMDU2MzksIDB4ZGIwNWIyNjYsIDB4M2Y3YzdkY2YsIDB4MjljZmE2MDcsCi0JMHg0YzlkMDE1MCwgMHhmNGY0ZGEzNSwgMHg5MmRmYTdiYiwgMHhiOGRkMjNlNiwgMHhmMzg0YzBhOCwgMHhlYzcxNWNlMiwKLQkweGQ4YWY2NjJlLCAweDUzODhlZTgwLCAweDdkNTZmYTgzLCAweDljMWRjM2EzLCAweGQ3MWQxOGFlLCAweGY0MGJmZDUzLAotCTB4ODg1NzRhNzAsIDB4MjY3NmZhYjcsIDB4ZGRiODIyN2YsIDB4NTAyMjdjMDcsIDB4NGFlNzE1ZGYsIDB4ZDdlMDViOWMsCi0JMHhkZTgyMzc0MCwgMHhkMWJkYjljNCwgMHhjZmNkZDlmMywgMHg3ZmRkMzc0NywgMHhkZTlhN2QyMCwgMHg2ZWI5NzQ2NCwKLQkweGRhMTRiNTk1LCAweDczMTA1NWQ3LCAweGI0YWFiZGEwLCAweGY4NzBhYzgzLCAweDYyZmFkZDY4LCAweDExYzYxYjg0LAotCTB4ZTJjZTJlN2MsIDB4YThmYzBiMzgsIDB4MzVkMWNiN2UsIDB4MmY5Y2I2NDgsIDB4ZjhmOWJmZDUsIDB4NjdlOTZiODAsCi0JMHhjZjFiMGQwNiwgMHgwNzcwOGVlMCwgMHg4MjgxOGZkMiwgMHhhNTg4NTRkYiwgMHg0NDczZjgwYiwgMHgxMmRmNWM5MywKLQkweGRjYjkzZmU1LCAweDY1ZmFjZWY4LCAweDdjMDFhNGFlLCAweGE4ZjJmZDA5LCAweDBiNGZmOWNhLCAweDQ1MjkyZmQ3LAotCTB4YTYyNmY0OTAsIDB4YWYwM2M2NWYsIDB4MjViMDdlMDcsIDB4MjRmYzBkYzIsIDB4NzczODllM2UsIDB4OTdjZjU5MDUsCi0JMHhiYzA5OWNmYywgMHgzZTIzM2IwYSwgMHgxYzlmN2Q5MiwgMHg1MzI0ZjRjZCwgMHg4YjJlZmIzNCwgMHgwYmY2MDE5NywKLQkweGNhYWIwNzllLCAweDQzYTg4Njc5LCAweDhmZDEwMWNiLCAweGM1ZGIwYmFlLCAweDFmZWQ3YTdhLCAweGZjNmY1YjAzLAotCTB4YWNiNjAzYTMsIDB4ZmZhN2MwMGIsIDB4MDg1NmRkNWMsIDB4ZWY1YWNlNzgsIDB4ZmEzN2NjZDEsIDB4NDhmMjExZTcsCi0JMHg3ZWIwM2Y0OSwgMHg5ZmIwNWI5MCwgMHhkZmQwZGNjYSwgMHg3NmU3ZWViNSwgMHhjYjllODI5YywgMHg2MzNhZjlmOCwKLQkweGYyZGRmODIxLCAweDY4ZWFlNzE4LCAweDQ1MTU5ZjVhLCAweGZmMTQzMWVjLCAweDIzZDFkZWIzLCAweGRmMWM5MTNkLAotCTB4NmI0M2IwMDAsIDB4OGZhNWM0MzQsIDB4ZGQ2YWJjMDYsIDB4ZmUzYzAwZGUsIDB4ZmI0MGYwMGQsIDB4MmUwYzk4ZjUsCi0JMHgyZDA3M2QzNSwgMHg2OGUyY2UzMSwgMHg4Y2FiOWUzYSwgMHhjN2EwM2NkOCwgMHgwYmYyOWY3ZSwgMHg1M2M0OTczOCwKLQkweDgxYTRmYzBjLCAweDhlMDEyMzc4LCAweDIzOWM5ODJmLCAweDc1N2FiYmUwLCAweGE5ZDQzYTY3LCAweGYzMGY5MzFkLAotCTB4ZWNjMTFiM2MsIDB4YjU1MWRmMjcsIDB4Yzc4NTIwN2IsIDB4NDdmNzgzNjUsIDB4MmU3YWU5MjMsIDB4YjliMmM4YWYsCi0JMHhkZmE3MzhlOCwgMHhkZjllZmRmYywgMHhlZDJmYWZkMywgMHgxOWNkMjJmOSwgMHgwZGViNTdjMCwgMHhjNjI2ODMyYSwKLQkweDQ4OTZlZjVmLCAweGJlMTA1YjU1LCAweGM5OWEyMzNiLCAweDA5ZGJjY2QzLCAweDY4YjgwNGU5LCAweGFlYjdhODdjLAotCTB4ODAyN2IzMDgsIDB4YmVjNTY3ZGYsIDB4ZTk2Yjg0ZDIsIDB4Y2E1NzBkZjMsIDB4OWU2MDNiODgsIDB4ZmExZmRhMDYsCi0JMHg0YjE5NWMzNSwgMHg4YzgyNDNkYywgMHhmOTAzYzc0YiwgMHg5OTI1NzBkMCwgMHgzY2Q4NjJiOCwgMHgzMTU0MzdjMCwKLQkweGZiZjhjZTRjLCAweGVkMTcxM2E3LCAweGFhNDU1YTdmLCAweGU3ZmJhZDgzLCAweGJiNWYwY2QxLCAweGFjMWYxOTA5LAotCTB4ZDdkZjA3N2QsIDB4ZmNlYzdlZWUsIDB4NmU0ODM2ZmEsIDB4YWYxNjBmYjAsIDB4MTRkNDc5MzAsIDB4Y2ZlOThiYTQsCi0JMHgzNjJkMmZhMCwgMHg0OGFhM2NiYiwgMHg4Zjk0M2ZlMCwgMHg0ZTM0NDYwZCwgMHg2NDdiNTAzNSwgMHhmNDY3OTcxZSwKLQkweGEwMjhjZDNiLCAweGNmMTk5NzU3LCAweGMzOWY5M2ExLCAweDdkZWZlZDc5LCAweGM1ODlmZTAzLCAweDQ1MTg2MjFhLAotCTB4YjA2Zjk5YzcsIDB4YmZhMTRlMWQsIDB4MjYzOGM5ZmYsIDB4YzJjNGM0MTIsIDB4ODNjNGE2ODcsIDB4ZDU5ODRiMWMsCi0JMHhiZDIyNzNhOCwgMHg3ZTgzMzE4ZCwgMHhlYTUxOTEyYSwgMHhhNWFlMjM2ZiwgMHg4ZjUwNjkwZiwgMHg3NGEyN2E0NSwKLQkweGFjNzE4YmEwLCAweDNhMDBiYTA0LCAweGY1OTgzYTA0LCAweGUyNmJlMzIwLCAweDVlN2U1Y2ZiLCAweDU5Zjg3NDk1LAotCTB4OGVjZjdjMDgsIDB4ZjE4MWNiMjksIDB4MzU4ZTUxMmMsIDB4NWUwZmRmNDgsIDB4NmViZmYxOTIsIDB4ZjNmMmZiYzksCi0JMHg0ZGNiYTc0MCwgMHhkZjQ4OTdiNiwgMHg3MGUxM2ZmZSwgMHhkNGU4MjllZiwgMHgyZTVhMmM5MSwgMHhlYTNhNDdmZiwKLQkweDlkZWYxZGEzLCAweDY3NWQzZTA0LCAweGEwZDQ3YTMwLCAweDc2ZDZlYzU3LCAweDI4M2VjNTc5LCAweGQ5NDUwNjBlLAotCTB4ZjA3M2MyOWYsIDB4NzM5NjUxYzMsIDB4MDI0ODI2OTQsIDB4ZTNkNzFkZmQsIDB4MDNiZjAwZGMsIDB4MDM2M2RiOWQsCi0JMHgxNTFhZGNlOSwgMHhlYmEyNzQwZCwgMHgxMGMzOGJjNSwgMHg0OTBiYzdlZiwgMHhkMWYxYzkzNSwgMHgzMWYxMTQ3MSwKLQkweDAxZDc2MGRmLCAweDFkZDgxN2RjLCAweDUxNTliZWI4LCAweDBjYjM2MjllLCAweDZmZWFiOWZlLCAweGY4NzFiZjZmLAotCTB4ZjllN2U3YWYsIDB4NjFkMjhlYjQsIDB4ODNiMDczOTAsIDB4YzMxNTQzYzMsIDB4NjRlOWM2ZjgsIDB4ZDNhN2FmNDYsCi0JMHgyODJlZjU0OSwgMHhmNjkyZDEwNywgMHhkNzhmZGQzYiwgMHgwMDdkNzkwYiwgMHhkNTllMmVmZiwgMHg3OTdlNzAwZiwKLQkweGE3N2Q5ZjNhLCAweDNlMzNlNzljLCAweDdiMThlY2NmLCAweGY2OGJjMDA3LCAweDRmMDBlOGYzLCAweDQxYjk4NzZmLAotCTB4ZWFmY2E2NGYsIDB4OGYxM2E3MDAsIDB4MTU1ZjkwMjUsIDB4MWYwMDA2ZjksIDB4ZjhhNjI5ZWMsIDB4NTc1OWZiYTIsCi0JMHgwMTNmNGJlYSwgMHhkZTlmNjRmYywgMHg3ZDdhYzViYywgMHhkN2MyN2RiYywgMHg5N2U1OWRmNSwgMHhhMWFmY2E4ZCwKLQkweDQ5ZjVmOTMyLCAweDg4NWY5MzM0LCAweDFkMTJiYTI3LCAweDExYjJhYmQzLCAweGVhMTc0ODNmLCAweDViY2ZjNzFiLAotCTB4ZjRlZTBjNjEsIDB4NTFhMzc4OWMsIDB4MWNmMjc5NGUsIDB4YWZmZDdjMDEsIDB4OGY4MjZlMWMsIDB4ZTM5NzBlOWMsCi0JMHhmN2Y3YzVkMSwgMHhlYjQ3M2YyNSwgMHhkZTRjY2RhMywgMHgzMGU5N2NkOSwgMHhlMGU4ZTljZSwgMHhjN2VkNWY3OCwKLQkweDIzOWUzNzQ3LCAweDBjNGU2ZmJkLCAweGE4ZmJiN2E1LCAweDQ0MmJhMGJlLCAweGY1ODdhYzdjLCAweDczNGJiMWY0LAotCTB4NzM4NTdmM2QsIDB4ODk4MGYwZGMsIDB4MjJiYmRjODAsIDB4YTFmMjJiZTYsIDB4OTdjYTkzN2YsIDB4NGU4ZjA2NzQsCi0JMHg4N2FmZDQxZCwgMHgyN2QxZjAxZiwgMHhkNDk1MWE1MSwgMHhkNWEwMjI3NCwgMHg3MWM1NjIxYywgMHg5ZTMzMjhjOCwKLQkweDNlNWViMGIzLCAweGYzODk4OWEyLCAweGVmMzk0N2MzLCAweGM4YWY4ZTI5LCAweDBlNzM0OTE4LCAweDM2MjM2YWYwLAotCTB4YTNlNzM3ZTgsIDB4MjliMzRjYWYsIDB4MWIzMjVjOWQsIDB4Y2YyYTJhNWMsIDB4ZDE5Y2FhYWUsIDB4NzllZmUwMzEsCi0JMHhiYmVhMjhmOCwgMHgwMTllNzRhNywgMHhlZDIwYzZhZCwgMHhjZjBiY2YzYSwgMHhiOWY2ZmU0YSwgMHg3NGJiNTMzZiwKLQkweGVlZWYxY2Y0LCAweDc0YzlmYWVjLCAweGE3Njc3ZmJhLCAweGQ4ZTcwNmRhLCAweDFmYWZmMmI5LCAweGE1YmQwMzBjLAotCTB4NGZlYjZiNTMsIDB4ZDdhZWFlNTAsIDB4OTkxYTNlYzAsIDB4MjU0YTc2N2UsIDB4ZWZjNWZmODcsIDB4YzE4N2VkYzksCi0JMHg1NDBmMGMzMSwgMHgxMzNhNDA5ZiwgMHg1ODU0ZTBmYywgMHhlYmExM2U2NCwgMHhmZDNjNDI1OSwgMHg1MWU3ZWU4MSwKLQkweGVmNGExN2MzLCAweDEwZjcyNWYyLCAweDE4MTYyN2NhLCAweDdkZmQyMmE3LCAweGU4NWRjMGYxLCAweDljNDg1ZTZmLAotCTB4YjllNjJmYzgsIDB4ZTQwYzdmYjQsIDB4Y2FkNjBiYTMsIDB4ZTU1YThiZWIsIDB4YzljZjI1ZjUsIDB4ZGZmZWJkZWIsCi0JMHg0ZWZmYjk3MiwgMHg5ODYzNTM5NCwgMHgwYmE4YmE1YywgMHg4NjNlM2VkZSwgMHg5Nzc3ZTNkMSwgMHhlZTUwODNjNywKLQkweGY5Yzc5NWY2LCAweGUzOTVhNzI4LCAweGFlZTVjM2RlLCAweDFlNDJjYjkwLCAweDg0MzE1YzM3LCAweGUzODhjNzE4LAotCTB4N2MxYzVjNWMsIDB4ZjVmMWY3ZmQsIDB4YTMzMTVjMzcsIDB4M2ZkYmVmN2MsIDB4ZDUzYWU1MTYsIDB4ODEzYmYwYzQsCi0JMHg4OTJiODZjZiwgMHgwYmE4YmJmOCwgMHgyZmRmZDA3ZCwgMHg4Y2EzYzcxNSwgMHhjMjJlN2NkZiwgMHhkZjg1ZmU3ZiwKLQkweDE5ZWZkMDU3LCAweGQwOTIxODg5LCAweGZiOTI3YjVlLCAweGUwZjljYzZiLCAweGYyMDMzYTg3LCAweDM5ZDllMjlkLAotCTB4YTVlZGJjOGUsIDB4NDhmNzljNGIsIDB4M2Y0ZDAwZDIsIDB4ZjcyYjdkM2YsIDB4ODJlMGU5NDEsIDB4ZDU5ZjgwMzcsCi0JMHg3MTYyOThjNiwgMHgzMDY0YzFkZSwgMHg3M2U4MmJjYywgMHg1MTE1YzNjZSwgMHhiMGZmZGYyMCwgMHg1MDIxM2NiMiwKLQkweDZiZjVlYWZmLCAweDQ0N2Q5OGU4LCAweGFmMjY1MTg4LCAweGNkOWU0Mjg4LCAweDJiZjJhNzZiLCAweDAxODhmNTFmLAotCTB4ZWY5Zjk3NDAsIDB4YjlmNDgxOWIsIDB4ODFlMmQ4OTAsIDB4ZTlmNjdiNmUsIDB4ZjdmZmQxZDMsIDB4NTg5OGU1MWQsCi0JMHgzY2Q3MTRjZiwgMHhhOTJmZDMyZCwgMHg2NWU3YTA5MCwgMHg0YTdmOWYzMiwgMHg1NDY3ZDMwNywgMHhmNTE2YmIwNiwKLQkweDlhYjEzYjE1LCAweDY0YTRkMWUzLCAweDEzMGE5NmYyLCAweDE2OGZhZDBkLCAweDVhMWUyMDc1LCAweDIzMzdjNTFmLAotCTB4ZmViYTdmNDEsIDB4ZjMyNGJjZDEsIDB4OWU3MDg5OWQsIDB4MWFhZjMwZjQsIDB4MTEzYjkwZDgsIDB4MzYxMTk2Y2EsCi0JMHg5MjI1OTQyYiwgMHhjMWQ2YzM0MywgMHgzNDk2M2NmMCwgMHgyYWY3YzJhNiwgMHhmNGNkNTc4MywgMHg3ODgyYmEyNSwKLQkweDYzZTYyZmU4LCAweGFmYWYxMzc1LCAweGNlNzk3YTllLCAweDY4ZGRmODIyLCAweGUzYWY3M2MyLCAweGYwNTU3OGViLAotCTB4YzAzMTAzMmYsIDB4Y2Y0NmY1YmUsIDB4ZTI0ZjE4OTcsIDB4OGFjY2FiYTUsIDB4MWZhYmE4NzYsIDB4OWMzZmJiNDEsCi0JMHhkNzk4MTFiNCwgMHg4MmU0YmM2OCwgMHg1OTg5OWFjZCwgMHhmOTk4N2E4MiwgMHgwMjExZTdiMiwgMHg1MmU4Y2Q3YywKLQkweGI2YmU0NjBkLCAweGY0OWFmOTEzLCAweDdiZTA2MmZlLCAweDAzZTY4Zjk0LCAweGFlZDkwZDFmLCAweDJlZmVhMGYxLAotCTB4NWYzNDUyZjgsIDB4NGJlNzBiNWYsIDB4MjFjMTg0NDksIDB4YmU3MWQ4ODYsIDB4MjMxNjliMWYsIDB4YWUzMzhhNWYsCi0JMHg4NmZmYTA5MCwgMHg5N2M4ZjFjOCwgMHhiNGYwMDFlMiwgMHg0NmJjNjYzZCwgMHgxY2UyNjdjNiwgMHg5NTQyN2FmMiwKLQkweDk0ZTQ5ZWJjLCAweDE0ZTQwZGQ3LCAweGUzYzkwM2NhLCAweDA2MzZmYzQ4LCAweGYwMWM5MWVkLCAweGQ4Y2I2ODNiLAotCTB4Y2UxZTk5ZjksIDB4ZWIwZGQ1ZDYsIDB4MTEzOWZiYTMsIDB4OTM3ZmZhYTMsIDB4YmI3MjQ1ZmIsIDB4NDc1YTNlYjUsCi0JMHg0ZjE1MGZkMCwgMHhhOGMxZTYyZCwgMHg2MTg4OWMwNywgMHgyZTY3YzA3YSwgMHg5MGZiNTc2OCwgMHhmZWUwOWVmZiwKLQkweDFkZTNhOTgzLCAweGRmOGExYTE1LCAweDA3Yzk3MmZiLCAweDhmOWU1YTc2LCAweGVmODY5ZTczLCAweGFjNjkxYzY3LAotCTB4YWFmNWE1YWIsIDB4ODc5ZTQ5ZjcsIDB4ZTYyNTA1OTYsIDB4OWYxNGVkOWEsIDB4NmM5YjY2NmIsIDB4MWFmYWQyOGYsCi0JMHg1NzZkMjMxMywgMHgyMmY1MWU5YywgMHhiNjk4ZjIwMiwgMHhhMjI1NTY2ZiwgMHhmYzAxYTNmZiwgMHg2YmZmNzRhZCwKLQkweDNhMDA2ZjQwLCAweDVlZDA0ZmU4LCAweDFhYzg3YWE2LCAweDc5YjdlZDAzLCAweGNlYmNkOTlkLCAweGRmMmE3ZTBhLAotCTB4ZmEwN2YwNTgsIDB4MTZmMzExMTYsIDB4NWMzY2U0MTIsIDB4ZTI4Y2U3YTUsIDB4NTNhODQ1ZjUsIDB4YmU5YzRhM2MsCi0JMHhlMTViZWZjNCwgMHgyZjU2MmNmNywgMHgxZTc2MGExOSwgMHg4M2FiMmZmYiwgMHhjZmYwMjgzMiwgMHhmZGRjZThlNCwKLQkweGE1MWQzZDYxLCAweGNmNWEzOGRhLCAweDdmNDM2MzFhLCAweDYxN2NlMTMxLCAweDlmODc5ODk4LCAweDczZmU5MWJiLAotCTB4YmMwNWVkODAsIDB4NjRmMWRkOWUsIDB4OTc4YzNjNDUsIDB4Y2E3ZTUwNGIsIDB4ZDYyYzBkY2UsIDB4Y2ExODdmNGMsCi0JMHg3M2MwZWRjYywgMHhmZmYxMDc3YiwgMHhmYjk1ZTMwNywgMHg4ZGJjNDdjNywgMHhjZWVmNmRlMSwgMHg2MWQ4ZjE2NiwKLQkweDM4N2VjZjFhLCAweDU5NzkyM2Q3LCAweDg3NzRjYmMwLCAweGE1MTFmZTU0LCAweGVkODM0MmQ3LCAweDgwMmIxZWUwLAotCTB4N2Q4NmExZDQsIDB4ZGUzZjM1MGYsIDB4NzA4ZmYzMDIsIDB4N2MwMzE0N2MsIDB4ZjI4MTk0NmMsIDB4MGNiNjVhMDMsCi0JMHg1OWNjZDliNywgMHhmODE1NmZiOCwgMHg0MmI1YmE5NywgMHg0MGEzZDkxZSwgMHg5MmFkNGRhZSwgMHg3ZDAwZmY1YywKLQkweGUxMWE4YzYwLCAweGU1MzE5N2YzLCAweDc3OTRkNzUxLCAweDNhYjIyYTRkLCAweGQ2YWNjZTUwLCAweGYzZjdmY2M5LAotCTB4NjVmZjk5NjMsIDB4ZWNkOGVjNWMsIDB4MmMwNzk0NTgsIDB4OTYyODM3ZGUsIDB4ZGJhMDA5ZjIsIDB4N2MwMzkyMWMsCi0JMHhlNzFjZTAyMiwgMHhhNTVkNzdjMywgMHhjZTc1MGViZiwgMHg5Y2ZjZWRlNSwgMHhkMTBmYjM0ZiwgMHhjZmNiM2VhMiwKLQkweDhlYWJlMGJiLCAweDY2OWU3NjcwLCAweDc0MDY5MjEwLCAweDIyMzQ5NTMyLCAweGJhNTYzZGZmLCAweDdkZmJjZjE0LAotCTB4NzgwNWE1YzQsIDB4ZTBjNjVhN2QsIDB4NjUzZGQ2MmMsIDB4OThhZjVjYmMsIDB4YTdkNzkwZTYsIDB4MGVmNTI5NTcsCi0JMHg3ZmJjN2IzYSwgMHg3OTRlMTlkZSwgMHgzZmExNjRmYiwgMHg4ZmViOTc4ZSwgMHg1NWNmZmViMywgMHg4NGI1Y2EwYiwKLQkweGNkYmVlYjk3LCAweDU0ZjgzZjAwLCAweDAzZjgxYzZkLCAweGZhMzMyNDNiLCAweDhjMjQzYmMxLCAweDE5NTQzNGZiLAotCTB4NmM2ZmUwZGMsIDB4NWJmMTY3NjgsIDB4ZWZkMDVhYjIsIDB4N2U4MGM3YmMsIDB4MzFkYTU2NTMsIDB4YmVkZjU3MWUsCi0JMHg4MDE0NWE1MywgMHhiNzVhOTRhZiwgMHgyMDdjZmMwNCwgMHhjODI3NTE4NSwgMHg5Yzc3YWUyZiwgMHg4M2Y3YmFkMCwKLQkweDUyYzRmY2JmLCAweDllNzRlMjRhLCAweGUxZGYzYzgzLCAweDE0M2JlNDEwLCAweDM0Y2VlOWZhLCAweDI4ZmZmOTg3LAotCTB4M2M3ZmEzMTUsIDB4MDM2MTFjZDUsIDB4YWFhZDc5YmQsIDB4NmI4NWZkMTAsIDB4YmYzMjRkMjMsIDB4ZjY1NWJhZWUsCi0JMHhmODRlZjgwYSwgMHhjYWZlNDUwOSwgMHg2YzY5M2Q3NCwgMHg0M2E3ZmU2MywgMHhjYzhkOGNjOCwgMHg3NmU2ZTQzZiwKLQkweGQzMmM3NjcyLCAweDZhZmI2OGNiLCAweGNlMjk0ZmY0LCAweDQxMGM1YzZkLCAweDMzMzcxMWI5LCAweDU1ODBmZDA3LAotCTB4ZTA0NTA1MWQsIDB4MDdmMmE1ODcsIDB4YjFkOWQzZmQsIDB4ZTU1ZmVjNTYsIDB4ZDVmZjQwMmMsIDB4MTgxOWM2ZGQsCi0JMHhkOGU4NjgxNywgMHhmNDY4NTlhYywgMHg4MmMzY2ZkMywgMHgwNDQ4MjJlZSwgMHg1ZmFmNWRkMCwgMHhmZDFlOTc2OCwKLQkweDhlNTU1NzQyLCAweGQ1N2QwMDFmLCAweDQ0ZjkzY2VhLCAweDdiZjg5NzRlLCAweDg0YjJmOTI4LCAweGU2NWI1ZGUzLAotCTB4YzI4OGIxOTgsIDB4OWQwM2U3YTUsIDB4YWEzYmVjMGQsIDB4NWViZTIwNDAsIDB4ZmU0MTZiZGIsIDB4OTA0Yzk5YTcsCi0JMHgyNTJlYWZjZiwgMHgzNjdiMjdjOCwgMHgxN2M4YmYzMywgMHg2ODdiZWE5NiwgMHhiNTJkNTkwYiwgMHg4ZWVlMWYyMiwKLQkweDVmZjA4YjFlLCAweDdhODQzYzY2LCAweDRhMjZmNTQ4LCAweDdlN2MwMTRmLCAweGJkNzk1NmQ5LCAweGIyZmIzMDg2LAotCTB4YmExZjdiNzYsIDB4ZjgyNDdlNDQsIDB4Nzk2ZWZkNTUsIDB4ZTRjZDkyM2YsIDB4YjljMzhkYjcsIDB4NDJkMWYzODAsCi0JMHgwNTRhNmQ4NywgMHg5NmNhYmQyYywgMHg2MjQ0ZWNjNSwgMHhmYzVlM2UwNywgMHgwYmZiOGViZSwgMHg4NWNmOTk2NywKLQkweDU5N2I4YjAxLCAweGQ0MWU5NmJhLCAweDY2YWYzYTYzLCAweGNkZjE5OGU3LCAweDkyOGYzZTYyLCAweGZkNzMxNzlmLAotCTB4OWQwZDRlZTcsIDB4Y2ZhZmQwYTcsIDB4M2Y1NjEzMTQsIDB4Mjc1MGVhYTQsIDB4MmRlYmZjYWEsIDB4MWU4NGZkZTIsCi0JMHhjMGE5ZjgyNSwgMHg0MjcwZTk1NywgMHgzYjNhNTM4NiwgMHg4ZmRkZjAyMCwgMHhkMzdjMDNmNCwgMHgyNWNlOTFmMSwKLQkweGM2ODk1NGM4LCAweGVmNjA1ZGYxLCAweDUxZjNlNDhjLCAweDVkMDE3MDdhLCAweDM3MDY1NGI5LCAweGE5MWFlZmQwLAotCTB4MDE4OGU1MTEsIDB4YWU1YTY1ZjQsIDB4NTdjODljOTMsIDB4YTk3NmE4ZGYsIDB4NDgyM2RlMDEsIDB4MzI3Yjk0ZTMsCi0JMHg0Njc2YmY4MSwgMHg5ZDI4OWMwMCwgMHg5ZmE0MGUxYywgMHhkZjQ5ZTIxNiwgMHgwOGU4YzkyOSwgMHhiZjJjYmJkYiwKLQkweDgyNDc0YTBlLCAweDY1M2U3YmVmLCAweGJhMDRjMGZhLCAweDAyYTcxODYzLCAweDNjYjQwOTAyLCAweDNhNDEyZDI0LAotCTB4NWE3YzY3MTksIDB4YWQ3ZmZkMDMsIDB4NzhkM2Y2NjIsIDB4ZmFjMGQ2ZTIsIDB4ZmM3MmNjMmEsIDB4ZDc5NDRiOGYsCi0JMHhhMWY2YjJlZiwgMHhkYmZmOGMwZiwgMHhlNDI3M2MzOSwgMHg4MmVkZGJjOCwgMHhkZjM5MTE2ZiwgMHg5OTU3MjRjYSwKLQkweGUxZjhmYjdkLCAweDhlYWVjMDg3LCAweDEwMzkyMjY4LCAweDlkMWFhM2RmLCAweGY4OTA3ZmFkLCAweDJkZWM0ZjQ5LAotCTB4YzRmN2MzZjcsIDB4ZjdjM2YxMDYsIDB4YWZiZWI5NjgsIDB4YzNmYWFmYTAsIDB4MjdhY2U2MTcsIDB4ZTcxNDNhN2UsCi0JMHhhOGQyMGVlMSwgMHg5MzcwYTQ0ZSwgMHg4ZWYxNjFkZSwgMHgyOGZlODAzYiwgMHg5MDM3MGMzZCwgMHg0ODZmZDA1YywKLQkweDg5NzNmMzExLCAweDZkZTgyMWYzLCAweGM1NDVhZjI4LCAweDIwY2FmYTcxLCAweGEzNWY0MDE5LCAweGJmZDBjM2RiLAotCTB4MTlkMDA3NzksIDB4M2UwMmRiYTUsIDB4NDJkZjkwYWUsIDB4ZGUxOTZmMmYsIDB4YTUzMmFlODcsIDB4NzhlMzk0MmMsCi0JMHgxZjFjODRkZSwgMHg3ZjllZDkyMiwgMHg3MmY0MTMyNCwgMHgwMWU1ZWExNywgMHg4NzEzMTQ3NCwgMHgxMWQyODhmYywKLQkweDcyM2VjZjllLCAweGEwYWVkZTUyLCAweGUzZWY4MTMzLCAweDI1MmNkZjVjLCAweDUzNWY0ODhkLCAweDNkMmM1NjU1LAotCTB4MmY0ZWNjOTUsIDB4NDBkNTRlMzcsIDB4MzMyNmY3ZmYsIDB4NzQwMzFiM2EsIDB4Y2JkZjA1OTgsIDB4MjBkY2E0ZTksCi0JMHg5MGU5MmJhZiwgMHg5YzBhYThjZSwgMHhhMTk3NDk1NywgMHhlODAzMmNlOCwgMHg5OGM3Yzg0YywgMHhhOGQ5ZDNlYiwKLQkweDY3NGU1YmI4LCAweDgyNmVlMmEzLCAweGRhZGYwNGNlLCAweDM3MmU2NjE5LCAweDk2YWVkYzgyLCAweGY5MGMwZTUwLAotCTB4ZWEwNWJiMjAsIDB4NTEzMmViMDMsIDB4YjE2OWRjY2YsIDB4NDZmNmM0MWQsIDB4NjlkNDVlZDYsIDB4NDJkZTQzNTcsCi0JMHg5ZWRlMGFkNiwgMHg3YTg3MjhlOSwgMHhhNzZkMTM0MywgMHg2NzFmMTc0MywgMHgyYmQ5MGQ3OSwgMHhhM2MxN2I1OSwKLQkweGUwNGQwNzhkLCAweGZlYjE3MmM3LCAweDQ2Yjk3ZTZmLCAweGRkZGI0OTFkLCAweGQyZmY3ODZiLCAweDM3YTg3MmQ2LAotCTB4YmZmZDY1YWMsIDB4NjBjODc4ODAsIDB4Yjc3Mjg3YzgsIDB4YWRiN2VmYzAsIDB4YjMzMWI0Y2YsIDB4MjViN2U5OTQsCi0JMHhhNTNiYmY3YywgMHg1ZmIxMDc1ZCwgMHhlNGI3ZWIyYiwgMHhhMDljMjFiMCwgMHhkNmY0Y2NmZCwgMHg0YjNlZjkzYiwKLQkweGM2N2RiMTM2LCAweDc4Zjc3ZTdlLCAweDQ1OGJhNTJiLCAweDVmZWExNzNlLCAweDQzYjU1NGU3LCAweGIwODVhZjkxLAotCTB4ZDZhNTRiM2YsIDB4NTFjNzI4NTQsIDB4ZGRhNTBiYjYsIDB4ZWVhYjViNjAsIDB4NWI2MWUyYzcsIDB4NzE0ZDE0ZTgsCi0JMHhlMjIxN2ZjYywgMHhhZWFmMTA0OCwgMHg5YTY3ZDAwYywgMHgyNDVkOThlMiwgMHgyNjhmOGJiZSwgMHg4ZDkxMWZhOCwKLQkweDQ0MzdiNDI2LCAweDJjZjNjYjljLCAweDg1MGVjMDkxLCAweDUwYmY0MjNkLCAweDU5NzFhZjcxLCAweDhjMmZhODhkLAotCTB4MmVmMTEwY2IsIDB4OWQzZTY2YWYsIDB4YWZkYmUwYjcsIDB4YWZmMzA2YzYsIDB4M2QzMWM3MzQsIDB4YmY4ZjNjZTUsCi0JMHhkZGFiZGY4YiwgMHgxM2JmMmUyYywgMHhlMDE5MjQ4OCwgMHg3MDU3Zjg3YSwgMHgzYzQyNzc1ZSwgMHgxNzI3MDk4YiwKLQkweDY1NzgwZTE5LCAweDcyN2UyN2Y1LCAweDZhNWFkZDYwLCAweDM1NTEyZmJjLCAweGNjMjA1YzZhLCAweDIzY2MyNWQyLAotCTB4M2M0OWQ0OWEsIDB4ZDc3ZDkxNTEsIDB4M2M0MzRlM2YsIDB4ODQwNzk2M2EsIDB4YTJkYzVmZWIsIDB4YzIyMDNjYzMsCi0JMHhjMTM0ZDlmOSwgMHhjN2Y1NDY5ZSwgMHhlMzk1M2RmMywgMHg0ZmUwYTM2OSwgMHhlMDEwYzg0MywgMHhkZTM4ZDM0ZiwKLQkweDNkNTAzM2VlLCAweGFiNzJlNTE4LCAweDVlMzdjMTU2LCAweDIxYjFiZTQwLCAweDZmMmRmZWE0LCAweDZhOTVmMDU3LAotCTB4YWU2MmVmM2UsIDB4M2UyNTJmNzcsIDB4NDljZTRiZDQsIDB4NmZjZjJjNmUsIDB4OGQ3NzdhNjAsIDB4MzVlYTM4ZjEsCi0JMHg5ZTk5MWIzZCwgMHhhOGJjNGI1OSwgMHhjYjc1MmNmNywgMHgzNmNkNDJmOSwgMHg0ZGFlYmQ3OSwgMHg5NzY4NmY1ZSwKLQkweDVjZjI3YmQ3LCAweDg2Y2Y0ZjM4LCAweDRmZTBhMWJhLCAweDAzZWU3ZWFiLCAweDBiNTZkZmY0LCAweGYzOTZlMmZlLAotCTB4MzI1NjQyMTcsIDB4MjBlY2YyZmUsIDB4ZWQyOGU3ZjQsIDB4ZWVmNzZhNzAsIDB4YTFmOGMzOGIsIDB4ZTgyZDY2NzksCi0JMHg1ODIyNzMwNSwgMHg5OGRhODJiZSwgMHg2NGMwN2M4NywgMHgxNDM4M2I0MCwgMHgzOWRhNTAxZiwgMHg4MzIwZWY0MiwKLQkweDJhMGY5ZjgyLCAweGNmMDAwYzY5LCAweGM2Nzc3ODAwLCAweDkyMWVkYjVkLCAweDIxZjAyYmI3LCAweDM5ZmI5MWVjLAotCTB4N2M1MGE2M2UsIDB4OTNiZjNjYzMsIDB4MWNmNzY4ZWMsIDB4MzFmMGNhNWIsIDB4ZTkwMmI4Y2QsIDB4MGM2NWQzZTEsCi0JMHhiYTJlYzIxZiwgMHhhZWM4M2I3OSwgMHg5MDc2MmVmZSwgMHhjZTJlNWZkMiwgMHhiMDlhNzc1NSwgMHg4NzY4YWQ0ZiwKLQkweDI5ODAwMDM2LCAweGYzN2JhZTlmLCAweDlmYTAwYmM0LCAweDM1OGVlZjhhLCAweGMwNGQzODkzLCAweDJhNTYzYzc5LAotCTB4OWU0ZThmZjcsIDB4ZTQyODdhNzAsIDB4MmIwZjZlM2IsIDB4OTNlMDBiZmIsIDB4ZmZhMWM0NzQsIDB4ZDg0MTJlYjAsCi0JMHhlOWZjNmM0NSwgMHhmMmVhZmYzYywgMHhlOGE4Y2NjYSwgMHg4OWJkZDk2YiwgMHgwMDlhNjE5ZCwgMHhjNjhmNmNmZiwKLQkweDRlNzYwOTE3LCAweGU3MDk1NWNmLCAweDQ4MjViYTg1LCAweGZmZGZjOTFjLCAweDg3YzQxODc4LCAweGY5ZGZjZWZiLAotCTB4M2YwM2RmYmQsIDB4ZTMwMjIxN2IsIDB4MzI1Nzk3N2YsIDB4YTZmMmVmN2IsIDB4N2MwNzk4ODEsIDB4MDU0OWM3OTEsCi0JMHhkZTFjOTYxYywgMHhjZTE3YjZmNiwgMHgxYzMxZDM1YiwgMHg3ZjcyNDZhZiwgMHgxZGI2ODdiZCwgMHhlMjYzM2JkNSwKLQkweDNjYWEwZTQxLCAweDJjNTc0NjNhLCAweDFkZjYyMTllLCAweDQyZTk2ZmRhLCAweGMwM2JhNmZlLCAweDBhNGZhY2U0LAotCTB4ZmE0ZWJjYzcsIDB4YjhjMDgwZmIsIDB4ZTMwMjUyNGUsIDB4N2UwZTQyYzMsIDB4MmQ2YWZkY2MsIDB4MTdkOGE1YmQsCi0JMHhjNGI0MmJmMywgMHgzZDYwYjNkOCwgMHhjMWJhYzMxZiwgMHgxNjkxZjQzZiwgMHhiYmY4MzVmOSwgMHhhNTQ4Y2UyMSwKLQkweGVlODk0OTJlLCAweGEzODgxZWJiLCAweDM4ODFiZDZmLCAweGM5OWUyZGJhLCAweGY2OTRhNTgzLCAweDYyY2QzZjMwLAotCTB4Y2VmOTgwMmYsIDB4NzllMWI4ZjMsIDB4MWYzYTc3MWUsIDB4MjM1MGUyYzksIDB4NWYxZjE5ZTMsIDB4ZTQ0ZGZiY2EsCi0JMHhmMTEwZjllNSwgMHhkOWRkZjE2ZSwgMHgzNTYxODM2NiwgMHg5YjFmZWI1ZCwgMHgzNjc1NjE4OSwgMHhmNTY3ZjEyNSwKLQkweDMzOWY5ODhkLCAweDY3YWJlZDhiLCAweDM5ZjMwNWFmLCAweGY4YWFiZjQ1LCAweDhlYjBhNWQyLCAweDE4YzcxNjIxLAotCTB4OWViNjE3MjgsIDB4YTlmYTA1ZDEsIDB4YTgzZjYwN2IsIDB4ZjU3ZGIwNGYsIDB4Y2M1MmIxODQsIDB4Yjk1ZjE1NTcsCi0JMHgzY2UwMWUzNCwgMHhlYzc4OGJjMywgMHg3NTEwOGZhZCwgMHgzM2RmOGUwNywgMHhjMjRmZjE5YSwgMHhmYzc1MTBmZCwKLQkweDViOGE4NWZjLCAweGE1NWUyZjVkLCAweGU2Y2VmYjhjLCAweGVmYjg4OWUzLCAweDk5MTQzNjJjLCAweDczYmVlM2NkLAotCTB4MGE0ZDY0MGMsIDB4OTFkYjlmNmQsIDB4NDhkNWVjYzAsIDB4ZGM1OTAwZDcsIDB4NTM3MTE1ZDcsIDB4ODc0MTc3NzEsCi0JMHhiOGZlNjkzZCwgMHg4ODliYzZlOSwgMHhmZTIwZmU5YiwgMHg3ZjRkYzc5NiwgMHg2ZTI0MWYxMCwgMHhiZmE3OGNhYSwKLQkweGI2NDE3YTBlLCAweDk4MGYwZjFmLCAweGQ0MmFkYzE5LCAweGNmZTBlNWI1LCAweDYwOTBiY2JjLCAweGU5MDE3MzFlLAotCTB4ZDAyOGVjZjcsIDB4ODk2ODhlYjMsIDB4MTM3YzhhZGIsIDB4ZTFlYmUzZjUsIDB4MjJhMWNlMmQsIDB4MzlkZjk5NTYsCi0JMHhkNjAzNTg5YywgMHg5NjhjZTQ5ZiwgMHgwZWUzNTFkNSwgMHhhOTRjMGZjOCwgMHg0ZmY1OTY0ZSwgMHhmYjI3ZWM2YiwKLQkweDkwNjlhMzNlLCAweDU1ZDMzZGFjLCAweGFkNjdhYjI4LCAweDdkZjY0M2JkLCAweDU5MzJkNmZmLCAweDc3NzNlMDdkLAotCTB4Y2RiZmJlY2IsIDB4YmY1NjU5M2QsIDB4N2U0MGZmMGMsIDB4NzY3ZTQ2YTYsIDB4NjVmYmI2ZmIsIDB4MWQxYzk3ZmQsCi0JMHhkZGNhN2U4MiwgMHg5NzEyZmU1YywgMHgyODc3MzNiZCwgMHhmYWMwYTM3MywgMHhjYmU2ZGFmMywgMHhjOTFlMjNjNiwKLQkweDQ1ZjZkMTIzLCAweDIzMTc0ZjFjLCAweDg1ODkzZGQ5LCAweDNmOWZjYzlkLCAweDZjOTk3ZGI4LCAweDJkNzUxYWZjLAotCTB4NDcxOTRmZTIsIDB4YzNiZTI0MmMsIDB4OTZlYTNmOTgsIDB4MzdkMjFlNmMsIDB4N2RiNGI4YWUsIDB4OWViYmY2MzMsCi0JMHhmYWZjMjI3ZSwgMHhiMTRkZTIwNywgMHgyNGM5MTc0OCwgMHg5MmIzZDE5OSwgMHg3MGJkOGMxZSwgMHgwNTE5N2I4MCwKLQkweGEzYjNjMDY0LCAweDIwZjQ2NDhhLCAweDFiODUxYmMzLCAweDZmMmVhOWZhLCAweGQxZGU2MTM3LCAweDcwMGJhMzkyLAotCTB4Mzk0NGZhM2QsIDB4ZTU1OTg0M2QsIDB4MjM5MTEwZjQsIDB4NGQ5MzA3YTcsIDB4ZTFhOGZmOGUsIDB4ZTEyYmZjNzIsCi0JMHhlOWNiYjE2ZCwgMHhmZmU5Nzg4MSwgMHhjYzc3ODBkNywgMHhmY2JkMzk3OCwgMHgxZGRjZTBhYiwgMHgxYzgxZTNjZiwKLQkweGQ5MGU0M2JlLCAweDM3MDg4YzViLCAweGVjMjQzZjk2LCAweGEzYjczZDdiLCAweGNmZGNhYzQ5LCAweDdmYTdmNDI1LAotCTB4MTU3OGYzYzYsIDB4ZDVmODQ3MWYsIDB4YjQyZTQ4ZDcsIDB4NjZlMzdiY2IsIDB4OWVlOTNkYzMsIDB4MWJjZmIwNGMsCi0JMHgzOGYzZjMwOSwgMHg0MWM1MDk1NCwgMHg3YmY4ODRmZCwgMHg4MGExM2YyOCwgMHg2N2FlNTRlYiwgMHhmYTNiMTBkNiwKLQkweGZjNDExN2E1LCAweDJiNjc5NjliLCAweDY3N2ZhMjk3LCAweDFkNjlmMTg5LCAweDk5MzhiZmY0LCAweGM0ZDU2M2U5LAotCTB4N2FmZGZjOGQsIDB4ZGMyNTZmZjEsIDB4MDEyNTJmNDAsIDB4MWMyNTU0N2UsIDB4NjNjOTBlYTUsIDB4ZTVjMzNlMDIsCi0JMHgxMGU5MzI0MCwgMHhmMmM5YzA3MiwgMHgxMmZlZTVmOCwgMHgwMGIyZjEwMiwgMHg1ZWY0MjUzZSwgMHg5ZjgwYmUzMSwKLQkweDdjNjI1ZmUwLCAweGUwNTlmODNkLCAweDE5ZjgyODFjLCAweDQ1ZTM5MWM5LCAweDYzODE1ZmU5LCAweDE4MWExODYwLAotCTB4YzA5MmIxMmYsIDB4YWZkMjhhZjgsIDB4NTBhN2Y3ZTIsIDB4YTdjZTkyYmIsIDB4MjE2Y2M4Y2UsIDB4Y2M0MzZmMTQsCi0JMHgxNWQ3ZjQ3NiwgMHhmMDk5Y2U5MywgMHhhMGE3ZjBiYiwgMHhkMjM2ZTE3ZiwgMHgyOTA4NWZlYiwgMHg4ZjEzYWU5ZiwKLQkweGJjOTJlMjlkLCAweDhkZjY2N2NmLCAweDJlYjg4YWMzLCAweGJmZTdjMzA1LCAweDQ5NDc5ZGE3LCAweGU0ZjdjNDU2LAotCTB4MDFjNjA3MzcsIDB4MmZmNWY1MWQsIDB4NDViZTRlZGEsIDB4N2NhYjUxYzcsIDB4M2Y3ZTgxMzEsIDB4NGY3ZjVmZTEsCi0JMHhlZTdlZTJmMiwgMHg0OGM3ZjYyMywgMHg0ZjUxOWU4MCwgMHhjY2NlYzZkYSwgMHg5NTJlZmYwNCwgMHgzMjUwOTE4YiwKLQkweDU3NjkxNDNmLCAweGY0MWFkOWVhLCAweDRlZThhYWZmLCAweDQ4NmJkZTgwLCAweGQzMzI5YzQwLCAweDc1NzU4ZWRmLAotCTB4ZTY4ZGZhZGYsIDB4YzEzYWZjYmIsIDB4MmNiZDlkY2MsIDB4ZmU3MDkzNWYsIDB4ZDBjM2VjMjcsIDB4N2Q3Yzk4ZjYsCi0JMHgzMzBiOGMwYiwgMHg4MmZiZmEyNSwgMHhjMGRjNzVjMCwgMHgwMzdlNDUzYSwgMHg3ODg0ZTNkYywgMHg5ZjJhMjZjNiwKLQkweGIwNGJjZjUxLCAweDE3NTE1ZWEyLCAweDNiMTNlYTdlLCAweDk5ZDQ1NjdjLCAweDM2ZDdhODFlLCAweDAzMDFhOGU4LAotCTB4N2FlYmY4ZjYsIDB4OTM2Yzk3MTYsIDB4NGMzZmNiZWIsIDB4YTEyZWY5NjAsIDB4YThmM2MwZTEsIDB4ZjVjYzc2MTQsCi0JMHg0NzkxMWRmNCwgMHgxNmUwMTEzNSwgMHg5NDRiM2ViMCwgMHg5ZjgwM2ZlMywgMHg5ZWY0OWRhNCwgMHhmZWZlNTQ5MywKLQkweGNjMmVlYTE1LCAweGFlZGNiYzEzLCAweGY1NGVmYmM2LCAweDFmYzg1ZGEzLCAweGYxYWFmN2VhLCAweGU4Nzc3NTA4LAotCTB4NzU2ZjNlZjEsIDB4OTNkNDQxZmIsIDB4MDMyOTlhYmEsIDB4ODVjOTdhYTIsIDB4ZTZiMzNhNjYsIDB4ZWM1N2YwMWEsCi0JMHgyMDdkOTQzNywgMHg0YzVlOGRmMiwgMHg5ZjMzZmNlMCwgMHgyYmU2MDdlNCwgMHg4YWY4M2U1MSwgMHhkYWY2MGY4YywKLQkweDRhNzliZGFkLCAweDkzZTMwNGFmLCAweDI4ZGNlYTE1LCAweDliZGFlN2I4LCAweGE1ZjFhMjg3LCAweDhmYzAwZTRmLAotCTB4NzIwZjFmNzIsIDB4MWEzN2U0M2IsIDB4NWQwMjViNDcsIDB4ZDRjZTk5ZDcsIDB4MGFiYzYwNjcsIDB4NjRlMWM3NzUsCi0JMHhjOTBhY2Y4MCwgMHgxMmI0NzEwNiwgMHhhODdmYmIzZCwgMHgzNWI3MmY1NywgMHgwMzc1ZDgwNiwgMHgyMDNiNTIxZiwKLQkweGM1N2E3OTVlLCAweGJmNzBkMTgzLCAweDUwM2I4YzU5LCAweDM5M2RlMTUyLCAweGY2N2Q3NjQyLCAweDlmODgyMmZkLAotCTB4YTNhZGIyY2QsIDB4NjY3YWQ5YjUsIDB4MmY3ZTY2NTcsIDB4Y2Y0NTkzYzIsIDB4NzYzYTNiZDcsIDB4YWZkYjRiM2YsCi0JMHg3ZGZlZjMxMSwgMHhlM2ZhMzUxNiwgMHgwYzY0ZDU2MiwgMHhhZjU4ODVkMCwgMHg3ZTI4NTdiOCwgMHg3MGNlZmI4NywKLQkweDVlZmM0ZDdmLCAweGYyMWJlMmQyLCAweDA3MWYyZDAwLCAweGFmZjYyY2ZhLCAweDM3ZGNhNGFmLCAweDg3ZThkMWE0LAotCTB4NmU5YzdkN2IsIDB4ZGQ0NWU4MGQsIDB4NDQzZjI2MDYsIDB4NmIzMTE1OWUsIDB4MzBhZDdjZjAsIDB4YWE3NWYzYjAsCi0JMHgzZDliYjBiZiwgMHhlYWJmYjAyNiwgMHg5ODUxZWNjMywgMHg5YTkxZjVlNywgMHgxN2Y5NWQ4MCwgMHg4MmNhM2RiMywKLQkweGRlYTJiM2ZiLCAweGZhY2NjMmI5LCAweGRlN2NmMzc1LCAweGExOTY5ZjE1LCAweDEyZDcxNjVkLCAweDdjZThjZjNjLAotCTB4NmE5ZmIzMDIsIDB4Nzk2NGE4YWYsIDB4MGYxYWI1NDYsIDB4NWVkNTBiZTYsIDB4OTEzZTYxZDEsIDB4MTQ4ZmZkZjgsCi0JMHhmZTAxYWUwZSwgMHhkOWYzZmNmYSwgMHgwYjVkNjE2MywgMHg3YzBkNmQ4OCwgMHgwNDZkNjBiZiwgMHgyMWU4MDU3MSwKLQkweDg5NThhZjIyLCAweDdjNzFlZmZmLCAweDQ0MzQ1YmQ3LCAweGU3ZWYxODMzLCAweGRkZjVhZTNhLCAweDA3NTRmZjViLAotCTB4OWQxMmVmYmQsIDB4NWM3MWNlYzgsIDB4YTVlYmNiMzksIDB4ZTFjNjA1NzYsIDB4MjU4NWRmOTQsIDB4NmNmYzhhNGEsCi0JMHhlY2FmZGUyZiwgMHg1YmRiMDdjZCwgMHg2MWFlNDA5YSwgMHhiMTVmZDdlNywgMHhlYmIzZjJjYiwgMHg1N2U4N2Y2OSwKLQkweDIyOGM2NTdmLCAweDRiOGY5YjNmLCAweGZkMWFiM2M3LCAweGUwYTE2MDc5LCAweDY2MDRiZGZmLCAweDllNDNkNGRmLAotCTB4ZGZjMDkwZDcsIDB4ZTdmOGZkMTksIDB4NWI3OWU1ODksIDB4N2YzODQ4ZGUsIDB4ZTM1NzZmM2YsIDB4MWY5ZmUzZmQsCi0JMHgxMmRmOGQ1MSwgMHgxMmMzZGQ2NCwgMHhjNTA2ZGMxOSwgMHhkYzVjZjA2OSwgMHhjZGY2MjFlZSwgMHhkZjE3ZTY0MSwKLQkweGUyMDVmYjg5LCAweDdkNzI5YzdlLCAweDczYmNjYmJiLCAweGM2YzNmZDYwLCAweDcyYWVmZjMwLCAweGVjODk0MTljLAotCTB4ZGRlZWIxM2IsIDB4ZjUxZjBjZDEsIDB4NjA3YzUzNmYsIDB4OWZjYjA4ZmUsIDB4NWRlZDFkZGQsIDB4MmNjMGZjOGMsCi0JMHg4ZTdjZjNjNywgMHg3Yjc3ZGRlNywgMHhjYmJlZjFkMywgMHgwZTdlY2M1ZCwgMHhjZDU3MGY0NSwgMHg0ZjgwMDdjZSwKLQkweDQyMzc0ZWQ0LCAweGFhMTkxOTJlLCAweDAxY2M5NDY5LCAweGY0N2FlYmU3LCAweDRhYmI4N2UwLCAweDcwYmVkNzg2LAotCTB4YzU3ZTIxZDcsIDB4ZmZkZjQyYjgsIDB4YzYzNTM5ZjIsIDB4YzYzY2JmZjEsIDB4MWJiMTJkY2YsIDB4Zjc3YzgwYTUsCi0JMHhlYmYzMDkyZiwgMHhhMTJhZDk3ZiwgMHg0OWRmM2Y5ZSwgMHgyZmU1MTM0OCwgMHhhMGQ2YjZmMywgMHhhNWY4Yjg1ZSwKLQkweDAzNjI5ODIxLCAweDdjYTRhZmJmLCAweDIxMjI1ZTY0LCAweGZlNzJkMjc3LCAweDc3NWM3OTZhLCAweDdlM2VmYWUxLAotCTB4N2YyODEyMzksIDB4OTQ0NjkxMTcsIDB4OTY5ZjhiMTcsIDB4ZWIyNmFiZjcsIDB4ODM3YTBjZmYsIDB4M2U4Y2RlMzIsCi0JMHhjZjE3NmE0ZiwgMHhmNzdhZTQ0ZSwgMHhmODE0MzI1MCwgMHg3ZDJmMDNmZCwgMHg4NmI0OGJhNSwgMHg5NGYzZmZhNiwKLQkweDgwNmI2NjlmLCAweGVjYjAxYWFmLCAweGI5NjMzNjZhLCAweDI4YmVkMTNjLCAweDM5YTVjMjkxLCAweDA4OWQ1OWQxLAotCTB4MTg4ZjhjZmUsIDB4NWVkNzJlM2MsIDB4MmUwMGYyNjYsIDB4N2UwMDhlNGYsIDB4ZDMzY2ExMmQsIDB4ZDhmMTY0Y2YsCi0JMHg3MjNkYzIxZiwgMHg5ZWJkMGYwYSwgMHhkNDc1NzVjOSwgMHg3MDkzYzljYSwgMHhmZjg0NmU5NSwgMHg4ZTc5YWYzMCwKLQkweDJkOGRlNTA1LCAweGY2M2RlODExLCAweDYzYzZlMzE3LCAweDIyMmZkNzVlLCAweDc1YmYwMGVjLCAweGMxOTdlZWE1LAotCTB4NTU2ZWIwOGYsIDB4MGQ3MWZhMzgsIDB4Y2UwZjE2N2EsIDB4ODJhYTVlZGEsIDB4ZWRiNzAzZmIsIDB4MWY4M2Y2OTYsCi0JMHg1NTYzYTFhMywgMHgzN2VmZGMwZSwgMHg4ZjMxYzM1YSwgMHg1ZTYzYWEyMCwgMHg2YzYzOTMyNiwgMHhjNzE2ZDg5ZSwKLQkweDJjNjdjMDRlLCAweGViYTM2YmRjLCAweDRlZTk5NzVhLCAweGU5OWE3YzY0LCAweGY2MWNmNTM5LCAweDNmZjU5MjNkLAotCTB4ZWJiMzllZTEsIDB4MjFlZjFhYTgsIDB4YmNiMGQ2NWUsIDB4ZTE4NDQxZmEsIDB4YzEyYmU0NTUsIDB4NWNmYTgxZGMsCi0JMHgyNDFiODUxNywgMHg5MzllZjVkNSwgMHg4ZGEzYzkzNiwgMHgzMDFjNzdjNCwgMHhhOGZiNTBjZSwgMHhjODI2N2UyNywKLQkweDMwNjk5ZjliLCAweGFlYmJkMzRlLCAweDIwY2E5Mjc3LCAweGNjZTQyMzFlLCAweGZjY2NjOTRjLCAweDlkNWY1YzQyLAotCTB4MmM3ZmM0NDEsIDB4ZTljNTUzOWUsIDB4NTNkNzA2NjEsIDB4ZjgzMDQ2NjcsIDB4NzRiNjI3Y2UsIDB4ODFiZjc3ZTgsCi0JMHhkMWU4YWE0NCwgMHg1NmRlNTk5OSwgMHhkMWFiZmI4YywgMHgxMTZmNDA1YSwgMHg3YWQwODk3MSwgMHg0ZTdmNzA0MiwKLQkweDc2MjZjYmZkLCAweDBkZjI1MjFmLCAweDY4MmU0MTgwLCAweDc5ZDZiOTA5LCAweDQzZjljM2RiLCAweDk3ZTYwMGZkLAotCTB4MGVjNGQ5MjUsIDB4YjdmYWIwNzEsIDB4Zjg4NjZlMDcsIDB4YzU5YzNlODcsIDB4MzIxZjI5NTksIDB4ZWYyNzdiYzAsCi0JMHhmYmE2M2M4MiwgMHgxODU2ZmE1ZSwgMHhkYzQyYmY3YiwgMHgwYmRiMzY4NywgMHhjMzYxN2VlMCwgMHhjYzQyZDRlNCwKLQkweGMzZTkzODVmLCAweGI1YmEwODc3LCAweGFmM2M3NGRlLCAweDU0NDhiZjk0LCAweDM4OTg3ZTA2LCAweGE1MGQxZWVmLAotCTB4YWE2NGZhZjMsIDB4M2ZmYWQxNmYsIDB4YmQ1ODFiMTIsIDB4OGFiMTc3OWYsIDB4M2QyNDA3ZDYsIDB4YmM4M2VhY2UsCi0JMHg0YjZlYTBlNywgMHgwZDFlZmE3YSwgMHhmNDJiNjNkYywgMHhmYWQzNTYyZSwgMHhhYzJkYTQ4NCwgMHgzMjRiMDYwZSwKLQkweGNmZDI2Zjg1LCAweGYxZDE3MWVlLCAweDNlYjg1ODJmLCAweDNkZTJmMzYzLCAweDA3MzdmYWQwLCAweDg0ZmQwMmFhLAotCTB4N2YxODkyNjMsIDB4YmVjNjEwYmEsIDB4ZTY0OTkwYmIsIDB4ZTc3ODA2NGUsIDB4ODczZWZmMDQsIDB4NWNmNDJmN2YsCi0JMHg5ZmQxNWZiMSwgMHhmN2VmMDYyNCwgMHg0YjdiOTcxOSwgMHg5MmQwM2RmOSwgMHg4YzM2YjIwOCwgMHg5MTVjOTVjNSwKLQkweDNhODcwZjE0LCAweGVjNWM2MjA2LCAweGNiMzQ2MjQwLCAweGYxN2IzNWRmLCAweDhlMzExMDlkLCAweDRmMThhNzgwLAotCTB4ZTQwY2JiY2MsIDB4YzlmMzExYjAsIDB4ZTJmOTY0YWEsIDB4NzlkMjdlNWMsIDB4ZDkzY2UzNTYsIDB4NzI3Zjc2NzYsCi0JMHhlMDAxNmE3MiwgMHhjMzRkZTI4ZiwgMHhiYzAxYTZmMSwgMHgzMGQ3N2I4OSwgMHhmOTFmMjVhZSwgMHg0M2YwMTBmZCwKLQkweGJmNGFiYTFmLCAweDViYWZmNGNmLCAweDM4NTcyNzQ5LCAweDYxNmQyYzlkLCAweDI1OWY0MGYxLCAweDI0YTllOTBiLAotCTB4NTEzYmJmODIsIDB4MDRjN2RmMjQsIDB4NDkzMWJmMGUsIDB4NWVjZmI2MTYsIDB4Mzg0ODI0YmMsIDB4NjM4NzBiNGYsCi0JMHhlNGMwNzdhYSwgMHg3N2RmOWJiYywgMHhjZjViMTI3OCwgMHgwMDc3ZGVhZCwgMHg3ZWYwZWNiZSwgMHhkYmY2YTFjNCwKLQkweDMwZmRiMGI2LCAweDQ3M2QwMTdjLCAweGE0Zjc1ZWEzLCAweGFiMGJiYzZjLCAweGQzODdmZDE0LCAweDhkZmIwOTAzLAotCTB4M2ZmZWMyY2UsIDB4MTAwZGVmZTQsIDB4NWZiN2E1YjIsIDB4M2ZkMzNlNjYsIDB4ZjcxNTJmNDEsIDB4NGVlYjg5ZTQsCi0JMHhlZDE3ZTgxMiwgMHhjNmRmMGZiZCwgMHhmN2ZhYWRlZSwgMHhkZjExNGY3OSwgMHhkM2VmOTlhNywgMHg5NmU5ZjZjYywKLQkweGVlMzkyYmQxLCAweGVhNmE5ZjRiLCAweGYwYmRjNzRiLCAweGI3MmYxZGVmLCAweDNiMjc4ZjkwLCAweDgzYzZjMWU3LAotCTB4MmYwYTFkNzMsIDB4MzE2ZTkzYTMsIDB4MmE3NThhM2QsIDB4NjcwYmQ5ZTAsIDB4M2MwNGZhYzUsIDB4YmY2MzdjZTEsCi0JMHg4YTVkMzk1YywgMHg5ZDQyZGE3NSwgMHgzOGVmY2NlZiwgMHg1N2ViMjk1ZiwgMHhiZmNiMzBmNywgMHg1ZDM5NTYyNSwKLQkweDU0Y2VlZGQ3LCAweGY0NWJkYzQxLCAweGVlM2UwYTNiLCAweGNiNWZiZjM4LCAweDk4ZTNjNDk5LCAweDQ0MzUyNGE5LAotCTB4YTRjMmRjZGUsIDB4MzBmZWEwYjgsIDB4ZTc2OTVkZmMsIDB4M2U1ODU4ZjUsIDB4ZWZkZWQyYjIsIDB4YzI3NWIzODksCi0JMHgyNWQ3MzQzZCwgMHhhNDdhN2Y3NiwgMHg3MTAxM2ZjMiwgMHg3ZjQ2NWQ5MiwgMHg5MTdjYmYzZiwgMHhmODcxNzdkNywKLQkweGY4YWZmNWY1LCAweDkxNjc3ZWYwLCAweGFiMzVlY2JlLCAweDliZmY5MDhkLCAweGViZjIwZWY0LCAweDA3YjJhOGEyLAotCTB4ZjU3ZDY5MzMsIDB4ZGZjOGZkODYsIDB4YmVjYTUyOGIsIDB4N2NmY2E0Y2EsIDB4YWMwMzg2Y2QsIDB4YWZiMmY2ZmQsCi0JMHhlOTNkNDFmYSwgMHhkODk3YWIyMCwgMHg0ZjdlMDM1ZiwgMHhjNjdiYzFjOCwgMHg4OGY1ZjkyNCwgMHg3MTU5MjYxZiwKLQkweDBhYjk3NTVlLCAweGQ1ZWFkZmRmLCAweGEzZDFkZTVmLCAweDFhZTAyMmZlLCAweGFiZDIyY2FhLCAweDlmYzU4MzFhLAotCTB4ODFlOTdiNWEsIDB4YzM4NjA5YzUsIDB4YTc5MGFkM2YsIDB4YWY3OGVkYzQsIDB4ZjdjNzY2NDYsIDB4YWZmYmIyNDQsCi0JMHg4NmZlZmIzZCwgMHg0ZjllMTlmNywgMHhmMDA0ZmU3MiwgMHgzNWQxMTBkMCwgMHgxZmQ2OTMyNywgMHhlMzBjZjg4ZCwKLQkweGVhOWQ5MjUwLCAweGIwYzdlMDIxLCAweGJhMmNjOTlhLCAweDlkNmJhOTVlLCAweGIyMjVmNDAzLCAweDIwZDA2NmNjLAotCTB4MDc1ZmI5NWMsIDB4ZjBhMmY0ZGUsIDB4OWZlZGViN2IsIDB4YTZjMjkyM2QsIDB4NDYzYWMwNzEsIDB4ZjBkMDNlNzAsCi0JMHg0MzVmMzdmNiwgMHg4MmUxYjJkYywgMHhlMWVhMDZkMSwgMHgwZjBkOGU4OCwgMHhhMjM1YmU4MiwgMHgzMGRmZDdlMywKLQkweDVmZWVjYzM5LCAweDAwOGY3NTg4LCAweDdkZmQxZGJmLCAweGQ3MWViYjc4LCAweGI2ZTNhMjNmLCAweGM4ZmRmMDQ1LAotCTB4MDE2NDc2ZGYsIDB4ZTUzZThjOWQsIDB4ZDBiNjAxNjksIDB4MTQ4ZGVmYjMsIDB4MmZjZGZkZjksIDB4MTg2Zjk5YWUsCi0JMHhlMDI0OGUzMiwgMHg1NGFhMjdmMSwgMHhkZTNjMjE0NSwgMHg4YWI4ZjA2MCwgMHg3MWRkNTFmOSwgMHhkMTc4ZDZjNywKLQkweGRmYmYyN2I5LCAweDhjNzZmNTQyLCAweGUxMjY1ZTgzLCAweDhiZDNmMDM2LCAweDdmNGFjNTdiLCAweGJhNGFjOWUwLAotCTB4NjhmYmZhM2YsIDB4ODA0MTVkMWYsIDB4ODU3MjVjZGUsIDB4N2EwMWZmZGEsIDB4YzhiMTI5NzgsIDB4MjQ4NmU1ZWEsCi0JMHhlNjE1ZjdkOSwgMHhiOGZiNTk0YywgMHhlZDY0ZGJjNCwgMHg2NDBiNTk3NywgMHgyMzM5MDlmNSwgMHhiNDRmZGY2NCwKLQkweGY3ZWFjYTk1LCAweGY2NGJiZjBlLCAweDUyYmRhNTdkLCAweGI0ZjAyZjU2LCAweDcyMWZiZWM5LCAweDdlZGU1ZGE0LAotCTB4MGYwMWE4OWMsIDB4MDc2ZDI3ODUsIDB4NmIzZTJjYTEsIDB4ZDBlMmI3NDcsIDB4YTEwNzhkZjMsIDB4MDYxN2YxMWMsCi0JMHhmNDNmYTUwZSwgMHgwNzZkMmI4ZSwgMHgwZmUxNzdlMSwgMHgxMTU3ZGU1NSwgMHg2YWU5ZDFmZSwgMHhkYzE3NWJhMywKLQkweGExYTg5YTBmLCAweDhiYzkyNWU1LCAweDYyYWQ0NGZjLCAweDMwNWU1NWY3LCAweDZmMDFiYjM5LCAweDA5NGFiZWUyLAotCTB4MTIyOTQzZjgsIDB4NjI1ZWU2MmEsIDB4MzE2N2IyZjcsIDB4NDA0OWQ4N2YsIDB4MTlhN2YwMGMsIDB4OWRlM2Y0MjYsCi0JMHhmYWJlMzZkNCwgMHg0ZWM3MTY3YiwgMHhkYTM3YmUwMywgMHg3N2RiMjU1NywgMHg2Y2E3MTVjOSwgMHhhOTY0YTVkZiwKLQkweDY1Y2I0ZjAyLCAweGMzZjMwYWY1LCAweDI1YzdlZmIyLCAweGRmYjU5MmFlLCAweDgxNWM3ZDY1LCAweGY1NjUyN2E3LAotCTB4MGEwZGI2ODksIDB4ZTA1NjZkM2MsIDB4NzZiMjY3ZTksIDB4ZGMxZGRmNDEsIDB4ZjgzNmY1M2YsIDB4Y2EzOTY4OTUsCi0JMHg3ODBlNTlkYiwgMHgwZmJjZjNiOCwgMHhiM2JjMzFmMSwgMHg3NGYwMWNiNSwgMHhjNDM2YzljNywgMHg1MWM3OTE1NywKLQkweGU4NzJlYzBlLCAweDUwODNjNjkxLCAweDA1ZmRhODdhLCAweDI3MzQwZWZkLCAweGQ5YTg3OTYyLCAweGMzYTlmZThhLAotCTB4MWU1ODM5Y2QsIDB4ZWZlMWI2NjksIDB4OGUxZTZhYmYsIDB4NzZjZGZiZTUsIDB4M2NkMzdmMmMsIDB4NjZjZWNiMWUsCi0JMHhjZDZkOTYwNywgMHhhZWZkZjg2ZCwgMHhkZmU2NzZlNiwgMHhkN2JkZTk4YSwgMHg4MDdlMDY5ZiwgMHgxZWI3OTU2ZSwKLQkweDI3NjQzZWVlLCAweDdlMDQ0ZWM3LCAweGVkZWUxZGQ5LCAweGFlYTNmYTg2LCAweDJmYzA4OWU4LCAweGExMTMwMDA3LAotCTB4Y2JjZjljNzgsIDB4M2RmNjI5YjEsIDB4MGRiZjk0YzksIDB4OTE3NTY2NDksIDB4YjJhNmQwNTcsIDB4NWUxZTgwMTcsCi0JMHgwOWUzMzFiMiwgMHg4ZjIxMWE0ZCwgMHg5YTI0NzJhZCwgMHhhMDZlYWMyZCwgMHhlNjM2NDQ3NSwgMHg2MTNjNjU1YiwKLQkweDU1ZTQyNTRmLCAweDYwNzcyNTEwLCAweDdiZDQyMjdkLCAweDkwZmI1OGMyLCAweDQxMTMxOThkLCAweGYxY2VmZjBmLAotCTB4YmM5ZjdiNjAsIDB4MjBlNDkyYzAsIDB4Y2Y1N2UwZjEsIDB4YmZlMDRkNWIsIDB4YTA3NTc2MzksIDB4OGM3MWUwMDksCi0JMHhhNGVjYjFmYiwgMHg5NjhmM2I0MCwgMHgyZDAyOWFhNSwgMHgwYTkzZDljOCwgMHgzZDk0NDRiZCwgMHhjOWYxZDJhYSwKLQkweGRiNmZiMDcxLCAweGJlNDNjYzM0LCAweDdlODA0YjViLCAweGRlY2M0YjI3LCAweDRmZjVkZjE1LCAweDEzMTdmOWUxLAotCTB4MWQ0ZjY4ZjUsIDB4NjExN2Q5NTcsIDB4N2JlNDkzZGUsIDB4NjRiY2UwMDEsIDB4N2I4NDEwZTMsIDB4MGU5N2M5OGYsCi0JMHhiMWI0NWJmMCwgMHg3Y2UzZDU5MCwgMHg4MGI2NDgyZiwgMHg2N2MxOTZiYSwgMHg4OTgyYzZmYSwgMHgwYTViZGNhZSwKLQkweGUwYzEwNTlmLCAweDY2NmM5ZDUzLCAweDllYzdiNmZhLCAweGE4ODA3YTA2LCAweGQ3YjRhZjFmLCAweDVlM2U3OWMxLAotCTB4YTJmYmM3NmEsIDB4NzY3YTFjYzcsIDB4YmMyNjFkN2UsIDB4ZjYzNDQwZTcsIDB4ZmUwMTY5ZTIsIDB4NWFjOWIzOWMsCi0JMHgyZTE1MzdlYywgMHhmMzVmODE5ZSwgMHg3MzllMzU3ZSwgMHgyOTU1M2MyNSwgMHgzYTQ3MGY0YywgMHg0NjczM2IwMSwKLQkweGM3MDVkYTA0LCAweGI3ZGVlYzU1LCAweDE0Y2NmYmYyLCAweDBjNWQxZjY2LCAweGViNzdlZTBmLCAweGE2Y2JkYmM3LAotCTB4ODdiYWJkZDQsIDB4MjJiM2Q3OGUsIDB4NzFlZTg3MGMsIDB4YWM3ZDQ0MGMsIDB4N2JjMjUxYTcsIDB4MWJlNzNkYjUsCi0JMHhiZDc2YjEyZiwgMHhlMzA0ODM4ZCwgMHg1ZmUxMzM5MiwgMHg4ZWQ1ZmRiNCwgMHgzMWZhZmYwNywgMHgxNWIzZmVmZCwKLQkweDIxOTQzNjExLCAweGJmMDg0MWU2LCAweGIzYzdmOWZiLCAweDNmYTgwYzYzLCAweDU2OWM5ZWNkLCAweDI2NzE3MjA2LAotCTB4MzFjZDczOGYsIDB4ZGMzMWUyNjksIDB4ZTBlOGIxYTUsIDB4YzY4NWJhMDksIDB4ODIxNDM1ODIsIDB4YTU2YzcxNjQsCi0JMHhhOWNjOWUwZSwgMHgwNmJlNWQ0ZSwgMHg0ZmQ5NjVjYSwgMHhmMGFkYTJlYSwgMHgzNWNlZDc3ZSwgMHhkMWQ2YzZhMCwKLQkweGZjOGM1YzIzLCAweDMzNDFmYmNmLCAweDI2ZGNkNzVkLCAweDczZDk5NWI1LCAweDZiZGFhZTVjLCAweDQzM2YyYTZlLAotCTB4OWU3MWVmZDAsIDB4ODA4MTQzMmYsIDB4ODcxNjZhZjYsIDB4YzU5N2U4YjcsIDB4MzI1Yjc0ZTksIDB4OTFlNDEzOGYsCi0JMHhhN2RmNzYzYywgMHgxZGIwMGUzNywgMHhmNjZiYTRlOCwgMHhjNDQyMDMwNywgMHg1Y2VkZTQwOSwgMHhjNzQ0ZmM3ZiwKLQkweGJiYmU1NWU2LCAweDRlY2RlNjIwLCAweDcxZmU3YTYxLCAweGQwNGNhNTFkLCAweDcyNjdlZjI3LCAweGFiZWFiZjIwLAotCTB4ZmVlOThiNDcsIDB4MmFjYzNiZjMsIDB4YWRjZmMzOGMsIDB4Yjg3ODAzZGIsIDB4YThmMWNlZGMsIDB4OWU3MGVkMjUsCi0JMHg3ZGU2YjhhNiwgMHg4YTRhYjk4NiwgMHg5M2Q3OWE3YiwgMHg3MzRlYjY5NywgMHgyY2JjYTA3OSwgMHgwM2NhM2FmMiwKLQkweDVmNzBlNWU1LCAweDQ1YzgzOTZiLCAweDdjNDUxZjIxLCAweGNkNWNkM2QwLCAweGYyMjM3MmY5LCAweDRkY2Q0M2QzLAotCTB4ZWNkYzNmNTgsIDB4ZjM0OGYyYzIsIDB4NWI5N2NlNWEsIDB4ZTZmZGZkYjEsIDB4NzY1ZjM4ZTcsIDB4MGRiY2JlNzMsCi0JMHhhZTY4ZWY3ZiwgMHg2NmVkZjJjMiwgMHgyODk2OTYyNywgMHg3ZTAxNmZjNywgMHhjYzRlMGQ1MywgMHg4Mzc3N2JlZiwKLQkweGViN2M0MDllLCAweGYzMWU4NzcyLCAweDc4ODllODBlLCAweGM4NThmOWUxLCAweGJkZTNkMWE3LCAweDhkNWU2NTNiLAotCTB4ZDJmN2NmOTIsIDB4MjVmN2RmNDMsIDB4ZjRmMzAwZmUsIDB4YmU4MGMzZTYsIDB4OWU5YTExOTgsIDB4MDlhYjExOGUsCi0JMHg5MmRmZDJmOCwgMHhiZTgyMjY5YiwgMHgzNTZhY2M3ZCwgMHg2NTdkM2U4MSwgMHhhNWYyMTM2MywgMHg0OWFiNzY2MywKLQkweDI0ZGZlYjRiLCAweDlkZGFjYzNmLCAweGQ2OWU5MzU2LCAweGMzZTM3YmZmLCAweDM1NjVkZGFjLCAweGRmZmFkMTg1LAotCTB4ZWFjZmJmOTMsIDB4YzQ4MmMyNmUsIDB4ZTdjOGNkMjksIDB4MDg3NDg5NGIsIDB4MjFiOTQ3Y2UsIDB4MTcxNTBjNzMsCi0JMHgxZTk3NWU1NCwgMHgyZTMxNzM4MiwgMHgzODE4ZGU3MSwgMHg1NmM5NzUxNywgMHhhY2JiOGZhNCwgMHg3ZDQxMGVhYiwKLQkweDBkNjZjZTQyLCAweDFiYjZjNTVjLCAweGJmNDM1NjBiLCAweDBkNGFkOGIyLCAweGJhOTMxYmY0LCAweDFiZjQzNTdjLAotCTB4MjZhNGZkOWIsIDB4ZGNmOGRmYjAsIDB4N2VhMWFiOWQsIDB4MDZiMzZkOGYsIDB4Y2UzYWQzZjQsIDB4YTIzOGM0YzcsCi0JMHg5ZjA1ZGEyZSwgMHg4MzVlNzkxNiwgMHgwZjI4MWMzYiwgMHgyODFkZGJmMiwgMHhjYTVjMDQwZiwgMHgwNjNlNTZhNiwKLQkweDc2ODZjNzdlLCAweDNhYzEyY2M5LCAweGMxYmQ0YWE2LCAweGFiOTFjODZmLCAweDI5MWFmNzg3LCAweGZlN2E4ZWJmLAotCTB4YmEyYWQzMDksIDB4ZGZhODA2Y2YsIDB4NTYyN2Y1ODEsIDB4OWRmZTVhZGQsIDB4OTdkNzEyOTIsIDB4ZTdlMDlmN2YsCi0JMHhlNDNkZTQxZCwgMHhiMWQwOWY2NSwgMHgwMDFlMzJmNywgMHg3ZGUzMTRiOCwgMHgyYmJlMTMzNCwgMHhkMDI2OWM0OSwKLQkweDNjYjg5YWIzLCAweDZkMjUwOTVmLCAweDNiZWJjZWRmLCAweGQ5NTc5Yzg1LCAweGRmZDBhN2ZiLCAweDdkYjg1MzczLAotCTB4ZDgzZjk3ZDksIDB4ZmNmNDFkNjAsIDB4ODQzOWVlMmIsIDB4YTFmY2U3NjgsIDB4N2IyY2M1MzAsIDB4YjA4ZWExNWYsCi0JMHhjYmQ3NTU3YiwgMHgzMWU2NTMxYiwgMHg5NjI5ZjMyYiwgMHhmNmMzYjY5MSwgMHgxNDc5YmVjYywgMHhjN2JkODRiNSwKLQkweGFlNGZjY2EyLCAweGFkNWVlYzI3LCAweGQ3Yjk0ZjMyLCAweGZjNjcwYWFlLCAweDBkNzgwYWI0LCAweDI5ODllM2E1LAotCTB4NjU2NGY5MjEsIDB4ZTEzNWYxNGEsIDB4OTEwZjZmMjAsIDB4YjA5NGJkOTcsIDB4ZjkzZWVjM2MsIDB4NWIxZjNjMzUsCi0JMHg4Y2UyMmZiOSwgMHhmMjVkZWY2MywgMHhmZWU1NmNmYywgMHhkZGY0NWQwNCwgMHhiZjgzMmI1ZiwgMHhlYTlmYzE4NiwKLQkweDdkNjAwYjc3LCAweDA0NGQ3MzE1LCAweGZjODE1NmZjLCAweGYwNmJlM2U3LCAweGJiM2YyNTFmLCAweGZhNzI3YzU1LAotCTB4OWY3NjNhZGMsIDB4NmIxZjJmYmYsIDB4YzdjMjA5NGEsIDB4YjI5NzVlNDQsIDB4ZGMyYTdhMTQsIDB4M2VmYzgzMWIsCi0JMHhlYzA2MGY3OCwgMHg5YzEyM2JmYywgMHgzZDk3NDAyZCwgMHg1NWFmYmU2NSwgMHhiMmM2ODc2MCwgMHgyZGJiOTNmNywKLQkweGJiZjAzNWNlLCAweDAzZjk2M2E0LCAweGJjZjZhZjIyLCAweGQwNGJmNWNhLCAweGY5NGE5ZWRiLCAweDZlYmJmMjE1LAotCTB4OGNmNDE2MTAsIDB4ZTA3NWEzYWMsIDB4OGUyYzQzNjcsIDB4ZTQ4ZmQwZjUsIDB4ZWY4MTc1NzgsIDB4MWZjYTg3MzAsCi0JMHhlMWNiOWE3ZCwgMHhlNTkxMjViZSwgMHhmZTZjZjY1NSwgMHgwZmRlODZlNiwgMHgwYThmMDUwYSwgMHhkYzJmMjhmNSwKLQkweDNjM2NiODVmLCAweDk3NjdlNTAyLCAweGZlZjAzYzQ0LCAweDNjNjk1NzZiLCAweDY5NWQyZGVhLCAweGI3OTQwZDNhLAotCTB4NGFlZTJlZGEsIDB4MmJlMzgwMWIsIDB4YTRhZWUzZWQsIDB4ZWYzNjA2ZTEsIDB4ZmU1MGYxZDgsIDB4MTE1Y2U5MjYsCi0JMHg3OTBmYmRjOCwgMHhjZWJiNjEzZSwgMHhlMDM3ZTQzNSwgMHg4NjExMWUxZiwgMHgyNTdiZmE3MSwgMHg0MWMwMTE2ZiwKLQkweDFkNzc1NzY5LCAweGNkNjY1NTlkLCAweGQzNWY2YmVmLCAweGZkODE4ZGZkLCAweDNkNTE5ZWQ1LCAweGFjZGRiZjA2LAotCTB4ZjRkYjVkYmQsIDB4ZWQzYzgxMzUsIDB4MDk1NzRkOTEsIDB4YmNkZjhmZTQsIDB4OWQxOWRkZmQsIDB4YzJiZDA1NmYsCi0JMHgzMjI0MDJkOSwgMHgxM2VhOGJhYywgMHhmY2JkN2ViNCwgMHhiNTEyNGJhNCwgMHhlYzAzMzNkMywgMHg2NmJmZTFmMiwKLQkweDU0YmM0YTc5LCAweGRlN2RlN2RhLCAweDkyZTY1YjRiLCAweDdhOTVjM2U3LCAweDQ0ZGYzMThhLCAweGZiYzQ4ZGVkLAotCTB4OWVmNjJhYWEsIDB4N2E1N2M4ODIsIDB4ZDRmM2RiOGYsIDB4ODI5YjNmNWUsIDB4NzRjZWI4N2UsIDB4ZmRmZWJkOTksCi0JMHg4MjNjZTc0ZiwgMHhmMzBjMjA3YywgMHhmZjZkNWUzMywgMHhmYWQ2MGUzYywgMHg5ZmI4Y2U4NywgMHhkM2Y1NjViYywKLQkweDZiZjk4Mzc3LCAweDVmNjc5ODEyLCAweDU2NTk3NGRiLCAweGVkN2VlMmVmLCAweDJmYmIyZDU2LCAweDM1NGZmYjU0LAotCTB4YzcyYTI1Y2EsIDB4Yzg5ZTIyZDYsIDB4MDEwM2RkMDEsIDB4ZmRiNDk1ZjIsIDB4ODNkZTE3YjksIDB4MDRhYmJmMjksCi0JMHgxZDdjYTE4MCwgMHhmYjRlYzkzOSwgMHg4ODdiNzI1NSwgMHg5ZDU4Nzc5MCwgMHg5NWM0OGZkYiwgMHhlMjcxZWFjMiwKLQkweDdhYjMxZmZiLCAweGE5ZmVmODlhLCAweDRmM2E3NjQ5LCAweGU3Njg5MjY1LCAweDc1ZTM2ZmZkLCAweDMzZDU4Nzk3LAotCTB4NjQ3ZmY3YzUsIDB4YmI1ODliZGYsIDB4NDk4ZWQzN2UsIDB4M2YwNWNlNzAsIDB4ZGZjYWE1MzcsIDB4ZGRmY2EyMDEsCi0JMHhjZDdjNWE5MiwgMHgzYjc5MWE3YywgMHhkZGUyZmZlNywgMHhkZmVmOGE5ZiwgMHg5YzAxZjExNSwgMHg3MzA5MzZkMywKLQkweDZhNTc2YWU3LCAweDMxN2Y1ZmQxLCAweGYwM2YyZGJhLCAweDc3OTE1MDdkLCAweDYxMzcyOGUzLCAweGViZGQ1NDFlLAotCTB4MGI4MGI3MDMsIDB4MWUzYTZkNTMsIDB4NDRjYTdhMGYsIDB4YTE1NGZmOWUsIDB4ZTU5YzYyMzYsIDB4YzdjNjdhZjIsCi0JMHg4Yjc5ZTk0MywgMHhlMTk0ZGU5YiwgMHg3ZjNiNGZhYiwgMHg5MTAzMTc4ZiwgMHg0ZjRiYmU3NCwgMHg5MGY3YjAyNCwKLQkweGVlMzEzYmIzLCAweGU5OTUzODNmLCAweDIyYmVmMGYxLCAweGY5MTVlN2RjLCAweGM0NTliMTVjLCAweGVjNzFmNjBlLAotCTB4NWRlYzYxMWIsIDB4Yzg5ZGIzYzgsIDB4YzFiZjE3NWYsIDB4MWI3NWQ3ZmMsIDB4OWIzY2EyMGUsIDB4ZmZhMmI2YWYsCi0JMHg2NzNmNWM2OCwgMHg0N2M0MmE3MSwgMHgzMDAzOWQ0YywgMHgzNmY0ZGRlZSwgMHg2NzNmYzM5ZSwgMHhjYjljNzk5OCwKLQkweGNmMDgxYjk3LCAweDVmZTE3ZGQxLCAweDk3ZjgxZDdhLCAweGJmZTEzYmZlLCAweDE4MGRlYTliLCAweDg2MTNkYWU3LAotCTB4YzY4MjZjZjYsIDB4MWM0MWIzYWIsIDB4NTc3YjI0ZjMsIDB4ZGI4NzIxNzIsIDB4ZTIzZmNlZDAsIDB4Nzg4N2ZmN2QsCi0JMHhjNTlkYWEzZCwgMHg5NTllNDQ2OSwgMHg1NGExZjc5OCwgMHg4ZjAzODMxMywgMHg3ZTRkZDQ4NywgMHg0M2M0MTQ3ZiwKLQkweDIyNGFmZTA0LCAweGI3ZjgxYjQ4LCAweDFjNmMxZTI5LCAweDgzYzAzNjBmLCAweDJlM2ZiNzgwLCAweDA2NjVmYjQyLAotCTB4YmQ5NTZiOGUsIDB4MWVlMDJiNWYsIDB4ZTkyYjFjZWEsIDB4MTk1YmFjNDMsIDB4M2M2NjU4MjcsIDB4NWRmODBjNTQsCi0JMHg4MTc5OTM3NiwgMHhiZTM4ZDI5NywgMHhmYmNjNWUzNSwgMHg0MTA2NzNmYiwgMHhiOGYwMjhiOSwgMHg1ZGRlMmZiMiwKLQkweGM0ZDc3MWE5LCAweDVmZmRiY2JiLCAweGRjMjU3NzhjLCAweDhmMmQ2NTk0LCAweDdmN2YyOTdiLCAweDJmZjU1NTIxLAotCTB4MzZmZmUzODUsIDB4YzZlY2VhN2YsIDB4YjlmNmIyZmQsIDB4Yzg2ZjQ3NGQsIDB4YTBmYzJhZGYsIDB4YWJiZjJlZmYsCi0JMHg3YTRlYjdmMCwgMHhlMjBhODk2ZCwgMHg3YzdiNGEzMiwgMHg2YmUzYmE1YSwgMHhkZjdiYmZhMCwgMHgwOWVlNDdmYywKLQkweDAwZjU3YzU4LCAweDkwNzkzZmNjLCAweDUxYWJlNWVmLCAweDExZWNmYjdmLCAweDM1NWY0ZjRhLCAweGE5ZDQzZjMyLAotCTB4YWQ2YTVmZmQsIDB4NjNlOTdkNzksIDB4YjExNTE1ZjYsIDB4ZWNkNWQwMDcsIDB4MjBiNDhmYTYsIDB4Y2Q1MzY2YWYsCi0JMHhlYTNjNTgyMiwgMHgzMDllOWNlZiwgMHg4MWYyODQ3ZiwgMHhjNmQxMDMyYSwgMHg1NTVmZjNkMiwgMHhhZTczZGVjNSwKLQkweDM0NGJjMDgyLCAweDZkMjcxZTk2LCAweDFlMjFhNDlmLCAweGQyYjVhZjc4LCAweDMxZThmMWE4LCAweGI3YmYyNDFlLAotCTB4YjllZmU3YWEsIDB4NzY1MmMzNTIsIDB4NTc2ZDU1N2YsIDB4YjRkMzdlNjMsIDB4NzQ4ZTJjZTEsIDB4ZWYwZGIxYmYsCi0JMHhmMjM4Y2UyNSwgMHg2ODQ3YTVlOCwgMHgyYWVkNTkzYiwgMHhlMmI3Nzk2NiwgMHg1NGVmZDE5ZSwgMHhmYTFmMTMzNywKLQkweDdlNjEyYTdiLCAweDFkYzc4OTU0LCAweGVlMzE2Yjk3LCAweDYxZjdlY2E4LCAweDRkNjNmMzJhLCAweGJmMmM0YjUyLAotCTB4NGZjYjJmNjAsIDB4ZWU5MWU3MTMsIDB4OTBiZTg4ZWYsIDB4YmJjM2MxZTUsIDB4NWE4ZDk1YTYsIDB4ZDA3Y2MwY2YsCi0JMHhmZWEzZjYzZiwgMHg1NTdjMzBkMSwgMHg2MWFmZTAzZSwgMHg5ZjQ2NzQ4YywgMHgxYjAzZDdlZiwgMHhmZDgyZmU5YSwKLQkweDU5NThmYzk1LCAweGU5ZGZhOGRlLCAweDQ4MjNlNmIzLCAweDNjNWY0MjJmLCAweGJhYzFlY2Q1LCAweGFiMzUwZmQyLAotCTB4NmUzMDNmZTQsIDB4ZWUyZmUyMzMsIDB4NWU0NzI4MTYsIDB4NjYxODlmYjUsIDB4OTVmNmVlZmQsIDB4OWQ4NGFiYjAsCi0JMHgwNGRiYjRhNSwgMHhiNWVmMTBiZiwgMHhjM2ZjMTQwZCwgMHg3NzdiMTFmMCwgMHhiY2NhYzM1MSwgMHgxNWZmMzkzNCwKLQkweGQ5ZjI5NTdjLCAweDdmOGMzNDgyLCAweDAwNmZmOWNhLCAweDdmZjZjNjFmLCAweGQzZjYxZjE3LCAweGZjMGRhMzdkLAotCTB4ZWNhOTU1MzUsIDB4ZGQyNTczN2QsIDB4ZjkzMjI2ZDcsIDB4NzU3N2E0YTksIDB4MTlmNTFhYjksIDB4M2EwYmJkMjUsCi0JMHgxOWJlY2ZiZiwgMHgyMGIzNzVmZCwgMHgzMWQ3NGY1NiwgMHhmYmMyNDFhYiwgMHhmZjVmMjc1MiwgMHhiYTA2NDNlMSwKLQkweGE3YjZhZTg0LCAweGU4ZjdiMmI0LCAweGZiZWU5MjZlLCAweGU5YjM4MWNhLCAweDk2NzdkZjMwLCAweDljMzNhNDAzLAotCTB4Zjg2NjViZGQsIDB4NDdkNjk0NTgsIDB4YmI0ZDJlOGUsIDB4Yjc5NTFjYjYsIDB4MTdmMThiZmYsIDB4YmU3M2ZmNjQsCi0JMHhjYTI0MWM5YiwgMHhkNDczMDU3YiwgMHhkMzlmMzYyYSwgMHgyMTNlZjJjOCwgMHhjZGM3YWNlZiwgMHg2NzU1NzllZSwKLQkweGQzN2JlMmI2LCAweDEyMmZiODY0LCAweDdkZDJjOGY4LCAweGM1OGViMjZhLCAweDAxNDkzNDM3LCAweDExNzUwOGVmLAotCTB4ZTkyMzI3Y2YsIDB4YjE0NjRiZWYsIDB4Zjk5NDM4NzcsIDB4NGYzY2Y1OTgsIDB4Mzc3MTk5NzMsIDB4YmU1MjEzZGUsCi0JMHgzZGYyMjQwNywgMHhjYTc4ZjllYiwgMHg3ZjQ0ODE3NywgMHhmOTU4MmY3MSwgMHgzNGM2ZDAyZSwgMHg5MGFkN2Y3ZSwKLQkweGY4MzhiMjE0LCAweDM3NTNmOWI1LCAweGZmMDBjOWM4LCAweDY2ZDVmNzcwLCAweGE0YjY3M2I0LCAweGFlNDdmMWZkLAotCTB4NmYzYzdlNTEsIDB4M2U3ZWUzNGIsIDB4YmY2YzVkM2YsIDB4ZmY2YzVkMGUsIDB4NmExNzQ5ZmYsIDB4ZWY3YzU2ZDMsCi0JMHhlMmU5NjZlMywgMHgzZjdkYWIxMSwgMHg4ZjljNWJhYywgMHg5NmZjNzNkZSwgMHg3OGIxY2YxZSwgMHhmOTY3YjgwZiwKLQkweDQ3MWVmOGFiLCAweGUzMDQzN2NmLCAweGMzZjNkNzQwLCAweDZiYjE3NDk0LCAweGJhY2ZhMzNkLCAweGFmMTQ0YzViLAotCTB4ZDBiOTRmMjMsIDB4YjhlMjMwM2YsIDB4MGRiZmVmMTMsIDB4OTkwZWRmN2IsIDB4OTBlMGE0YzYsIDB4MTZlYjBkNDMsCi0JMHgxYmQwODI3YSwgMHhkZjgwZmNmYywgMHgxZDc5ZTE1MywgMHg2ZTM3Y2EzNywgMHhhZmYxYmUzNiwgMHhmYjg4NmI4YSwKLQkweDRmNWFkZDMyLCAweGRiOTAwOWYxLCAweGJlODJjMzdiLCAweDhkMjU3ZDk3LCAweGVmNTBlZGM5LCAweDljYTI1YTZlLAotCTB4NTM0ZjAwNTcsIDB4ZWYxNWRmMzgsIDB4ZDlhODU2NmYsIDB4M2I5N2I5M2IsIDB4NTg5ZmU4ZDUsIDB4ZmVkZjgzZjEsCi0JMHhkZjZiNzlmMiwgMHg1OGZhOTVmMSwgMHg1MDcyZjk4MywgMHgwZDk0NDZmYiwgMHg1ZjJmOTYyYSwgMHhiY2M1NmU1OCwKLQkweGMwN2JiMDJjLCAweDE3ZmMyMTVmLCAweDU4NDdlZmNhLCAweGQxZDNjMmNiLCAweDY5ZDUxZWRlLCAweGM3M2NmNTg3LAotCTB4NWYwYTEzZDYsIDB4MTIzZTRkMGQsIDB4YTg3Y2VlZjgsIDB4MTVmNjFiZjksIDB4OWMwN2U3OWIsIDB4YmRlOTA5OGYsCi0JMHg5Y2Y5OTY3NiwgMHgxYmVmOGZjMSwgMHg2ZGZmOGJhNSwgMHgzNTI0ZmZmYSwgMHhmZTU0NDk3MSwgMHhhNjZlNDllNiwKLQkweDU3YTYxMjRmLCAweDU4OWQyMmNlLCAweDJjM2UyMWNlLCAweDRmZTU4NDlkLCAweDJjMzYyN2NmLCAweGFlZjYxMjE3LAotCTB4NjcwY2ExZjksIDB4OGRlODNhNDksIDB4MGZiZTFmNWEsIDB4YmZmNWU5N2IsIDB4NGNmYmUyZTcsIDB4ODU2YzhlNzcsCi0JMHhlNTViYTg5YywgMHg1NWVhNTZiNywgMHg4ZmJlMDUzZCwgMHhkOGZmMDNhNywgMHgyYjc0ZjdmMywgMHg3YjFiZmZjYSwKLQkweDk0NTA3YWE3LCAweDEwN2E0YTdkLCAweDRhNmZmNmJmLCAweGM0YmVlY2Q1LCAweDVlNTEwN2M5LCAweDFmNTk5YTU0LAotCTB4ZmRmOTg2MzIsIDB4ZTI2NDI2MjcsIDB4Y2RmM2YxZjksIDB4NmY4MmNkODQsIDB4ZWYyYWZjNDIsIDB4ZGZjNThhOGMsCi0JMHg3N2Y4NGE5NywgMHgyYWJkZGE3OSwgMHg4Yjc5NjIzYywgMHhhODZhZGQzMiwgMHg3OWVkNjZlZiwgMHg0NGI3MTY3NSwKLQkweGMyMjM3OWViLCAweDhiNzJmYjU4LCAweDY3ZGRmMjFiLCAweGNiOWUyZjEzLCAweGFlZWQ5MGI5LCAweGJkMTNiZmY2LAotCTB4N2JmOWQ4ODAsIDB4MTI3ZWJlMDYsIDB4YzNhOGJmZWQsIDB4ODliNmYyYzAsIDB4OWJmNjFiMzcsIDB4MTA0OTc2MGYsCi0JMHhlOTk3ZjczYiwgMHhlZTBmYmNlYywgMHhlMGZkZjhjNywgMHhlMTVmYjkzMiwgMHgyNjdlZGUyMSwgMHhlMDEzYWNhMywKLQkweGZiNzRiYmYxLCAweDBkN2NlMGY3LCAweGY3NWNlZThlLCAweDUzZjgxMTU0LCAweGMyZmMwNDU0LCAweDE4Nzg4YzVmLAotCTB4NWZhMjI4ZTMsIDB4MTFlY2I1OTgsIDB4YzQ4NzZlZjgsIDB4ZmI1ZDhiZjIsIDB4ZDJkZGUyZjQsIDB4ZmM3ZjQwZjgsCi0JMHg1NWYyOGNhMSwgMHg3NGRhZGRmMCwgMHhjMTQyOWZjNiwgMHg5NDJlZmUxNSwgMHgyNjFkODgyMywgMHg4MzA2ZDVmMiwKLQkweDQyN2U4ODZlLCAweGVkMDZlZjgyLCAweDQzN2Q1ODkwLCAweDU3N2JkOGZhLCAweGU5NzdkMTFiLCAweGNjMzNmZDAyLAotCTB4ZWMzMWZjZWEsIDB4MTA4ZWIwNjMsIDB4YmZmZmFjMjMsIDB4ZDIxOWJkZjgsIDB4ZWY3MTBlOTgsIDB4NTVlODJmMjUsCi0JMHg0YTdjNWZhMCwgMHgyN2RjMzFjNSwgMHg2M2I1M2RmOCwgMHhlZDRkM2NhMSwgMHg0MGZmMjg1MSwgMHhjZjI4NTFlZCwKLQkweGNhMTQ3YjUwLCAweDBhM2RhOWNmLCAweDM2MmJhMmU1LCAweDE0OTcxYzc4LCAweGNlN2ZkODY3LCAweGJiZjgzY2U4LAotCTB4MzNhNjJmMWIsIDB4YzMyNjc5YjksIDB4Yzc1YjI5ZDksIDB4NjNhZTFkM2UsIDB4YzdmM2E1ODcsIDB4ZWM3NWQxNGYsCi0JMHg4MmFkOTNkOCwgMHhlMGExMmNmYiwgMHg2ZmVmYjNkMSwgMHhmODIwY2VlOSwgMHg5M2RmY2RlYywgMHg2Y2NiZTc4MiwKLQkweGVmZTdmM2U0LCAweGNmZGNhMGQ2LCAweDJlNDZmNzZmLCAweDNkYWVmODBlLCAweGM4Nzg4NzVkLCAweDEyMzY3M2RiLAotCTB4ZjczNmVmYzYsIDB4ZDEyZWQ1YzIsIDB4YjE1MjRlYWQsIDB4MzMwYmZiN2EsIDB4MGI5ZDVkZWYsIDB4MDI3N2IwZmIsCi0JMHhlZWY5ZThmZSwgMHhmZGJmMzI4MCwgMHhmYjg2M2ZiNywgMHg4YzdjNzQxYiwgMHhiZTQ4ZjZjNywgMHg1MzJmNDA2NywKLQkweDZmYjk0M2VlLCAweGZmYmEyZmIxLCAweGM3N2ZkMDc1LCAweDEzYjA3ZTllLCAweDNiMDg2ZmNhLCAweGZiZDhmYjJmLAotCTB4YmJmNzdkYjgsIDB4YWY3YmQ3MGEsIDB4ZjcwNDU3ZGUsIDB4NTZmZGVlMTIsIDB4ZjQxZjM0MWQsIDB4YzIyOTQ2NGMsCi0JMHg5OWQwNTZiYiwgMHhiYTcxYjc4OCwgMHhhZWZhZjgxMiwgMHgxZTM5NWFlNywgMHgwMDE3ZWYxMSwgMHgzYzgyYjUwZiwKLQkweGZhMDkxYWJhLCAweDViOGYyNTYwLCAweGZlY2VlZmI2LCAweDFjYjllZjEwLCAweDNiZjgxMzUxLCAweGU1YTM4MzgxLAotCTB4YzE5ZDRlZTcsIDB4ZjMyODlkY2UsIDB4ODAxY2U5ZjYsIDB4Y2VmYjFkYWYsIDB4OWNmYmMzNjUsIDB4ZjBkOTNmMTQsCi0JMHg0YWJmNWI3NywgMHgxN2YzMmZlZiwgMHg2NmY4OGRlNiwgMHhmZDBmZDAyMywgMHhlMDJlZmYxZSwgMHgwMmI5YjIwYywKLQkweDBkMzNmM2UyLCAweDJkODVkZmZiLCAweGE5OWYzNmNkLCAweGRjZmNmODgwLCAweDk0MzBlOTQ0LCAweDYzOTlhY2YzLAotCTB4ZjIyZjJlMjEsIDB4OTRlNDE3OWEsIDB4NzRhMzg2MWUsIDB4ZjUxMmFkOGYsIDB4MmU2MDUyYjgsIDB4ZGNhMTcyMDEsCi0JMHhlNzFmYzExMCwgMHg0NjI4NzIxNSwgMHg5ODk3MWY1NiwgMHgyZWZlZmIyMiwgMHg3ZGFjOTY2YiwgMHhiMmVkY2U0MiwKLQkweDI2ZmJkZWY2LCAweGRmZmUyMWI2LCAweDdjM2MwMWZiLCAweDQ2NWUyMGZkLCAweDhlZmVjMWY3LCAweDdkZWM0YmQ5LAotCTB4YzczZGJjZGQsIDB4ZDY5ZGJlZWYsIDB4MGQzY2JkMjcsIDB4YzFkYjYzZGYsIDB4MmFlZDI3ZGIsIDB4ZDYyM2JmYzcsCi0JMHhhM2E5ZTE0MywgMHhlMWY5ZDQ4YSwgMHgxNGYzM2Y4ZiwgMHgxM2IwYTYwYywgMHg3OGJkZjc2YSwgMHhiZTY3ZGUxOCwKLQkweDFkNzA5ZGFlLCAweGZiZDQyMGZiLCAweGQyYmZhMmExLCAweGYyZmNhMDNlLCAweDA3MmZjMGM3LCAweDBjZDUzZWJmLAotCTB4MjMxZGExZjEsIDB4NzkwNjQ5YmUsIDB4ZWZjMTk5OTQsIDB4MjFiYjcxODcsIDB4OWVmNGRkMTQsIDB4NjFmYWM5MGYsCi0JMHgyNTI4ZmRlMCwgMHgyOGYyMTBkZCwgMHg0ZTU2NDNhNywgMHgwMWVlYzYzYSwgMHhmYjNmMmNkZCwgMHhiNDMzZjAxMywKLQkweGYwMjQ1ZGMzLCAweGZkMmEwOGVmLCAweGI2NzU4MzY1LCAweGZmMDQxZjBmLCAweGI4NmEwN2NlLCAweDNmN2JkMTA5LAotCTB4NWJmYzMxNmIsIDB4YjI3N2E3ZWQsIDB4NDk2M2YzNzAsIDB4MGJiYmY4YjEsIDB4ZWU3YWUwZjQsIDB4YzE5NTliM2YsCi0JMHg3NmE0YWNlMiwgMHg0NTQ5NjNmZiwgMHhlMmIyNzZmZSwgMHhiMjdiZWM4YywgMHhhYjIzNWE1MiwgMHhkNzk0Y2VhZiwKLQkweDA5YWU5N2Q3LCAweDBmNGExZmVjLCAweDNjZGNmYzViLCAweGVlMGYzMzlkLCAweGZmNDE0OWYxLCAweDdhZWY2MjZlLAotCTB4ZDg1ZjM5NjIsIDB4ZWNmOTA0YjcsIDB4ZjE0YmZkYjksIDB4YmYyYWI5ZWYsIDB4ODFlM2E3YWYsIDB4MDg3MTZmZGYsCi0JMHhkM2Y4MmFmOSwgMHhjZjdiMzUwYywgMHg0Y2JlZDk1NywgMHhiNWJiNjdjYywgMHg2MTRhN2RmMywgMHg2ZjVjNzk4ZiwKLQkweDY5ZmJiOTMwLCAweDkzMjc1Mzk0LCAweDdmNGMxOWViLCAweGM5ZTFiNGJkLCAweDcxMGQ3YzFmLCAweDllY2NiZGE0LAotCTB4NzI2MTY0YmEsIDB4MTdmNzdmMjMsIDB4Y2M3YmY4MmEsIDB4N2QxOWMzODMsIDB4MmFiZDliZTUsIDB4NTNkMzI3YjgsCi0JMHhiYzgyZTExZCwgMHgyNmE1ODZlZCwgMHhkYzFiYjdjYywgMHhhMTg5ZjdjZiwgMHhmYzFmOTA4MCwgMHgxYTdmZDBmNCwKLQkweDBlZmU3ZDI4LCAweGM4MDViZjJlLCAweGI5ZDAxZWUxLCAweDhjZjFmZDY4LCAweDQ5ODcyODQzLCAweGI4NmZjYjJlLAotCTB4OWM3Y2ZiNTUsIDB4YmZhODY0ZWEsIDB4MzE3ZTMxOTQsIDB4Y2I4ZmU4MDcsIDB4NTVjZjQyMmIsIDB4NTdhNDYzYzMsCi0JMHgwMjFmMDE3ZSwgMHhjMGZkNDBiOCwgMHhmMGZiZGY0ZiwgMHgxZTMzZjA2OSwgMHhmYzAyZmM2NSwgMHgwZjUxMzMwNywKLQkweDdlZTUxYmIwLCAweDFlZjYzNjg1LCAweDBiYmQ5NTk4LCAweDQyNDJmMjIyLCAweDg3NjU4ZmYxLCAweDU3NjA3NTVhLAotCTB4ZjFmZTZhZGUsIDB4YzRmOWY1ZjIsIDB4OGYxNDA5YjEsIDB4M2U1OTdiMGQsIDB4ZmU4ZWU1ZjcsIDB4NmY4MDI0NTEsCi0JMHhmMGQ3ZTEyOCwgMHhiN2NmMGE5YywgMHhhODc3NzdhOCwgMHg1MDc5YzNjNywgMHg3MDE2NGJkZSwgMHhiMjAxZTYyNiwKLQkweDE4MWU3OGY3LCAweDIwYzliN2ZkLCAweGE3ZDgxZjk3LCAweDUwZjQ0MTYxLCAweDExNTVhY2YzLCAweDgzM2NjMDZiLAotCTB4OGU1MWU5ZjcsIDB4OThmN2Y1ODksIDB4ZjdkOTFmMzksIDB4NWNkMmU4ZDcsIDB4MjIwYWFlNTYsIDB4YTAxZWE5NGYsCi0JMHhhMDNkMDU4ZCwgMHhmNWJiNDI1MiwgMHg2NTA5N2RlMywgMHgyNThmZmYwMCwgMHhlMjE2YjFlMiwgMHgzYTJmOTgxMCwKLQkweGJmMDcwZDg1LCAweDg5OWRmMTFiLCAweGUwNGQxY2M0LCAweDZlYzI3YWZiLCAweDVhNmZiNjlkLCAweDNmNTdkMDdmLAotCTB4NjNmZjNkZDksIDB4NjlmMjE5OGEsIDB4ODc5ZTE2NDYsIDB4MWY4ZWYwZTksIDB4MTZjN2VmODUsIDB4NDNmODFhNDcsCi0JMHhlYjc4ZjEyNiwgMHgxNzVmMTZjNywgMHg4ZjFmZDVlOCwgMHg2ZmMwOTA4ZSwgMHgwZDVmYzc0OSwgMHg3ZDdkOGJlMywKLQkweDM1YTQ3NWFjLCAweGVkMTdmYTA2LCAweGZiZDNiZTgzLCAweDQyYmRhMjVkLCAweDAyNzRiMmJkLCAweDExNjc4YmM0LAotCTB4NWVmY2Q3N2MsIDB4YzlhM2QzMzUsIDB4MGIzY2VjM2IsIDB4NzUyMGRhYmUsIDB4YzczYmUzNDYsIDB4MzJiYjkzMTksCi0JMHhhNjg0ZmY2OCwgMHhhYjNkYTExZiwgMHg1MWJhMjdjYywgMHg2ZWQ3YmEzZCwgMHg3N2IxMjZkZSwgMHg0ZThjNmMzMiwKLQkweGZjNWQ0N2ViLCAweDdmM2E3NGM5LCAweDQxZWZiNTNkLCAweGRmNmJhYmFmLCAweDI4YTZlZjhmLCAweDdiNWVmOWVkLAotCTB4YmMyZmU5NGEsIDB4N2ZlODNmOGUsIDB4Y2E2ZmIxMDAsIDB4MDA4MDAwNWIsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg1OGFkZmYwMCwgMHhlNTU0NzAwYiwgMHhkZWY3M2UxNSwgMHg2NmNkOTI3ZCwgMHg0MjFiMjJmMywKLQkweDI2MGRkZGUyLCAweDliNzA5NjAxLCAweGY1MWU0MzU3LCAweDhjYTQxMDlhLCAweDYzODgzNzZkLCAweGZhZGVhNTZhLAotCTB4NTkwOTIwNDAsIDB4ZDZhMjc1MDksIDB4MDA3MWE2ZTEsIDB4M2I2MzRlYTksIDB4YjMzMDg4YTMsIDB4MjMzMWUxZDIsCi0JMHgzMDU0ZDM1MywgMHgzMmQ3NDBhMywgMHg1ZGE5NjI1NSwgMHg2NmQ0MmQ4YiwgMHg4OGQ0NmI5OCwgMHhmMWE2YzkzNSwKLQkweGExOTg2NjU1LCAweDVlZjdmY2U3LCAweGQ2MDg2Zjc2LCAweGU2Y2NkZDNhLCAweGU3M2VmZmVjLCAweDljZmY4ZjNiLAotCTB4YWEzNmMwMWYsIDB4NWNmYjAxOTUsIDB4OGJkZmYwMTYsIDB4ZWQyYmYxZjYsIDB4OGNhMmMwMjAsIDB4MDZhYzQzYjAsCi0JMHgyN2M4ZjJkOCwgMHhmYjBkYmQ3ZiwgMHg5OTBkZWRkNCwgMHg0N2YxOGI2MywgMHg0NzVmOGUzZSwgMHg1YzgwNTRiMywKLQkweDAwMGVhNTgwLCAweGQ0YzAxNTRmLCAweGJlZThiNGZlLCAweGYwOTdmNTAwLCAweGQ5YjAwMzUwLCAweDgwNDUzZjg3LAotCTB4OWM5NDRlOGYsIDB4OGZmMWM2ZWQsIDB4ODcwM2IwZGUsIDB4OWYxYjI3NWQsIDB4ZGIxMDdjOWUsIDB4ZjlhN2Y2NWIsCi0JMHgwNTllMzQ5YywgMHhlZjhkM2U2YSwgMHgzOGFhOGQyYiwgMHg2YTdlM2VlMSwgMHgyNzA3M2JhNCwgMHhmYjRiYTYwZSwKLQkweGJkYzNmYzcxLCAweGM2MWZjZmE1LCAweGFmZTc4NmY2LCAweGFlY2Q4ODk3LCAweGQ5ODgzYzVkLCAweDBkODg1ZmQ4LAotCTB4M2U2ZGZmZWEsIDB4ZmQ3ZTA3NWIsIDB4ZmQyZTc1ZGMsIDB4OTJlMGUxNWMsIDB4ZjhkMDM3OWYsIDB4Y2U4OTZjYzEsCi0JMHhjYjM5YTU2OSwgMHg3NWVjMmUwMCwgMHhmMDBlNTBjYiwgMHg3ZGNhYzQxOSwgMHg3MzFmMDBjNSwgMHgxYjhmMThlYSwKLQkweGNmODdmM2I3LCAweGIzYzAzYzczLCAweGU0OTRhNTBlLCAweDM3ZmJiOGRlLCAweDc5NDdhYjdmLCAweGU3N2UwZjlhLAotCTB4ZGZjODY1ZTksIDB4NDBiOTMzODYsIDB4NWNmMmMwZmIsIDB4Nzg3ZTAxODYsIDB4MWE3MjhiOTgsIDB4OTcwOGI1ZTcsCi0JMHg2MDA4NWFiYywgMHgwNjcxNThmYSwgMHhiNGY4OTI4NCwgMHhkZWZiNzIxZiwgMHhlMmI4MTk3NywgMHhkMzIwNzNiNywKLQkweGNhMWFlZWQyLCAweDk2NWZiZGY3LCAweDhlODNiNzZjLCAweGQ5YzNkYzMxLCAweDdkMGVmZjY4LCAweDY1Nzk4NjA4LAotCTB4MDlkNWYxMDksIDB4MDgwODAzOWEsIDB4OTc4NDcyOTgsIDB4OWMwODU0MDAsIDB4MTNmZjg0MGMsIDB4NjVmZjg2NGUsCi0JMHhhNDkwZGNmYSwgMHhmOGNmMjIyZCwgMHgxOTQxZTBlOCwgMHg2Y2ZjZTBmMCwgMHg3MDJiZjk3MCwgMHg5N2UzYTJiOSwKLQkweGRmNzRhMjc4LCAweGFkNjZjNDRlLCAweGNkNTAwNTk4LCAweGJkNTkyZGY2LCAweDhiN2ZjOTI0LCAweDE1ZTliMjMwLAotCTB4OTc3YTdmZGMsIDB4ZWY2MjcyNTMsIDB4MGNlZTFiYjgsIDB4YTczZWFlODcsIDB4ZWI2NGNjNTUsIDB4MDUzZWI5ZDcsCi0JMHg3ZmIyNzY1YiwgMHhhZGJmY2Y1MywgMHg1MWM4MTBlZCwgMHgyN2QxNWY1YywgMHhiNDhmZGU1NiwgMHhhZmNiZDBkYiwKLQkweDBjMzVlMWZjLCAweDhmMjc4MWY3LCAweGVlNzg2NjllLCAweDNhMWRlMDc5LCAweGU5ODc5NGY3LCAweGI4ZWI0ZTBmLAotCTB4MjM2ODM4MjcsIDB4ZDZmZGNjMzksIDB4NTZjMGE2YjksIDB4YzczZWZjNDksIDB4YzdmYjM1ZjgsIDB4YWU1YjM5OWUsCi0JMHg0NzYzZmVlMCwgMHhkYTAzOTcxNiwgMHg3YzQyNWRmMywgMHg2N2M0NTllYywgMHhmZTdlM2QzMiwgMHhhNzgzYTQ2MSwKLQkweGYxNTczMmZlLCAweDQ3NmZjZDVjLCAweGNmZGIzNGNmLCAweDFjNzM4ZjZjLCAweGU0ODNiNzkzLCAweDgyOWJmZWMwLAotCTB4OWUyMjhkZTEsIDB4MDk5MDM2MDMsIDB4NGI5ZGQxYmYsIDB4NDIyZDdlMTgsIDB4OWZmNDgzMjgsIDB4ZGZjYWM4ZjgsCi0JMHhmZGNkM2U0YywgMHhmZGNjZmU0ZCwgMHhhNDNkNzljZCwgMHhjMjYxYzQyZiwgMHhjMmNmMmYxMSwgMHhhMjQ1MzlmZSwKLQkweDZmMDlhZTQ1LCAweDQzZDMzY2JjLCAweDNmZDYzZWZkLCAweDE0ZWQ4NTkxLCAweDlmYTM2YjdiLCAweDE3MzZkZmE4LAotCTB4YmY5MDczZDgsIDB4ZWE0ZTM2YjYsIDB4NDJhZmQ2MDMsIDB4MDUzMWEzMTYsIDB4MmZmYzNiYzcsIDB4ZDg0MWI4MWIsCi0JMHhhYjc2NzY4NSwgMHg5MzkwNjc2MSwgMHg1YTNmMjM2ZCwgMHhkZjVkYmEwMywgMHg4YmM3ZmI1YSwgMHg3NmUwMTc5YywKLQkweGZhMDNiMDE4LCAweGY3YmUzOWNiLCAweGUzYTQyZWM3LCAweDEzYjRiZjAzLCAweGJlMTBlODdlLCAweDRlNWZiNDMxLAotCTB4YmNiZjg3N2QsIDB4NGRiOTZhZjgsIDB4YTU4ZDgwNGEsIDB4NWY4MzFiYzYsIDB4MjJjYTA5YjUsIDB4Y2Y4NGNmYjgsCi0JMHgwMTRiZjJhMywgMHgxYjM5MTE5ZSwgMHg4NTA4NTc5YiwgMHhhNWM3MGYzNCwgMHgzYTgxZGExOCwgMHg5MGZhOTRlOCwKLQkweDc4N2M0YjlmLCAweGUxZGZlMTJmLCAweDFmOTM5NTg4LCAweGYxMmVlYjk4LCAweGU3MWZlYjBhLCAweDdkMjNhZjRlLAotCTB4MWU1NjJkODMsIDB4NjQ3ZDQ3NGUsIDB4NDBjYjgwM2EsIDB4NjVjNTJiOWEsIDB4MGNmZDQzYzQsIDB4MjMwMTVjNTgsCi0JMHg5NTE4ZjFmZSwgMHgxZDg0OWNlOCwgMHg4ZjkxMDZkYSwgMHhmZDM3ZWE0NiwgMHhhYWE0ZWQxMywgMHg3YTBjOGY5OSwKLQkweGZjOTNmMzkyLCAweDAxOTVkYjViLCAweGIyYWFjZmRkLCAweDJjYzBjOGY5LCAweGMzMjdmMWZlLCAweDQwNjBmYjBmLAotCTB4ZDYxN2ZkZDAsIDB4N2FlNzEwYjgsIDB4NTkwMDY3MDMsIDB4NjRkZjdmMjAsIDB4M2NiOTM3YjQsIDB4NTRlMzAxMzEsCi0JMHgwNTUyZWJjMiwgMHgxOGZlYmZlNCwgMHhmNWRiMDFlYSwgMHg0NGFiZDhiNiwgMHgwN2ExZWJkMSwgMHgzMTA3NTlmNSwKLQkweDZiMjFiZjdkLCAweDhmNzBlNmZjLCAweGZjMWM3MDNiLCAweGE5MWM1OThiLCAweDhkYmJkNDMzLCAweGQxZTkwMDhiLAotCTB4ZWU4Y2ZkMDUsIDB4ZDEwMmUyZTQsIDB4YTMxNGMxNmYsIDB4NDQ2Y2Y4MzIsIDB4OTc0Njc2MTEsIDB4MTVkMTk4NDMsCi0JMHgyNTc0NjExMCwgMHgwYWJhMzNmNCwgMHgxOWJkMTgwNiwgMHhhMmMyOGNlMiwgMHhmOGIwMWY1OCwgMHg1OGRmMTNmZiwKLQkweGRmNmY5MjFhLCAweDVhNDY1ZmM3LCAweDY2NDQxYjc1LCAweGMzMjk4N2YzLCAweDA3OGRhZmNlLCAweGFmOWFmNTQ2LAotCTB4NTAwYWM3OGYsIDB4NmJhZjhjZmMsIDB4OGNiZjMyZTEsIDB4OGI4OWI5ZDksIDB4ZDcxMWVjOTMsIDB4MjdlYTIxYjksCi0JMHhkYjFhMDhkYSwgMHg1YzMyMDZlNywgMHgxMDQ2ZTdkYywgMHgwNjZlZDQ2ZCwgMHhiZTViYjU5OSwgMHg5YWI1MWUyMiwKLQkweGIzNDI1MzYyLCAweGJiM2NkMmUwLCAweDcwMzQ1YzlkLCAweGFiMmMyNWU5LCAweDE4NWFmYTkzLCAweGQ0ZGI1OTEwLAotCTB4MTQ5ZjIwMWIsIDB4MjdkNmFmZmYsIDB4NTU5ZjExMTQsIDB4ODg5ZjRkNjksIDB4MDNiMjIyMTgsIDB4YzYxYjYxYmQsCi0JMHhhNmNhYWFkNywgMHgyZjZjNjJlZSwgMHhiN2E5M2MwOCwgMHhlZDJhOWJlYiwgMHhmYmQzOWUxMiwgMHg4YzcyZjA4YiwKLQkweGVlMGMyZWFiLCAweDI4NDVjNDZlLCAweGE5MTZhMDE2LCAweDAzOTZmNmUyLCAweGI4NTM5NWZhLCAweDU0ZmYyMjVmLAotCTB4MTBmMTAwZGMsIDB4NDBiOWUzNzMsIDB4YzI1NmQwZmUsIDB4M2UyZGJmZWUsIDB4M2FlZjNmNWQsIDB4ZGEwMGY0OTQsCi0JMHhlNjJiYTc3NywgMHgyZGU3MTExNSwgMHg3NDc5MmRiZCwgMHhlODc3NmUwZiwgMHgyYjliYmVmYiwgMHg2NTA1N2UyZSwKLQkweGFlMzllMjcyLCAweDM4M2NhNDhhLCAweGFkYjFiYWFlLCAweDRmNzc2MjcxLCAweDU3ZWU3OTIwLCAweDUwMjBhZjM4LAotCTB4OWFmM2VkN2QsIDB4ZmM0ODhhZmMsIDB4NDgwNGFiODAsIDB4M2RjNjA1Y2YsIDB4MmY1ODM4M2QsIDB4ZWY5ZDNjNDksCi0JMHhlOTZiZTc2MywgMHgzODNkZGQyNSwgMHhiYzNmYTRmNCwgMHhhNDRiZjY5MCwgMHg5MGI1ZjZlYiwgMHhkMjRkY2ZmMCwKLQkweDk0YjkwMTM1LCAweDI3ZjY2N2M2LCAweDFhMzhiZjdhLCAweDFmMTM3ZGMzLCAweGFlYjhjMWUwLCAweGQzOTRhMDMxLAotCTB4NTZiYzVkYjksIDB4Zjg3YTg5NTQsIDB4MDc3OWRhNjksIDB4NGZiNGRmZTksIDB4MDc3Mjk1MGUsIDB4NDMyN2RiY2EsCi0JMHhiZWVjYzFkNCwgMHhhZjI1NzdjMSwgMHg3N2RhNGUyYSwgMHgwZmRjNWVlMiwgMHg4NzBhYTg3MSwgMHg1YzM4ZWQ5YiwKLQkweDQ5MzkxNmQzLCAweDZmZTk1NmI0LCAweGE3M2ExMWM2LCAweDEyZTlmODllLCAweGJlOTFkNmE2LCAweDM4Y2YzMzI3LAotCTB4MzdmZTYwM2UsIDB4MjMzM2I3NWYsIDB4MzEzZjFkMmUsIDB4ZGU4MTcwZmMsIDB4N2Y4YTQzMGMsIDB4ZjhiODlkNzUsCi0JMHgxZTMwM2ZmOSwgMHgyNDdiNGQ3NiwgMHhlYzdmNWU5YSwgMHgyNmYwNmU5OSwgMHgzYWIzMGFmZCwgMHhmZDMwZGM0YiwKLQkweDE5Yzg2ZWFjLCAweDg1YmNkODEzLCAweGM2ZmNkMmY3LCAweDE0YzUyMzMzLCAweGQxMTg2ZjZmLCAweDQyZGMzMGZhLAotCTB4MDJkOWY4ZTIsIDB4N2I4ZGRlZGQsIDB4ZmI4MmZlNDEsIDB4OGI0MmY3M2EsIDB4YjhjNzRhODAsIDB4MTA4OGY5YmYsCi0JMHg5YjVjYTI3NSwgMHhkYTMwNGYyOSwgMHg3NDNmYjYyYSwgMHhkMDY0OWRhMSwgMHg4ZjkzZDk3YywgMHhlNDM3YWQ3MiwKLQkweDgzZmUxY2VhLCAweDZkM2E4MzAzLCAweDFiYmM5MmEzLCAweGVmZDdmZTBjLCAweGNhNjZmYmI5LCAweGVkNDQzNmZiLAotCTB4ZGY4ZWY4YzksIDB4MzZlODkxZjYsIDB4OTBmZGJiZTIsIDB4MjEyMjlmYjUsIDB4YWM2NWRmYzksIDB4YWJiY2EwZWYsCi0JMHhlYjM3ZjI5OCwgMHhmYzc4MmViYywgMHhiYTk3MTQ1ZiwgMHg5YmZkYWM4NiwgMHg0YzM5ZTkwMiwgMHgwNjNkYzYwZiwKLQkweDlmNzhiZTQ2LCAweGEzZTQ4NzMxLCAweDcxZjM3OWJjLCAweGIyODlkNDQ3LCAweDJkZGJkZTZkLCAweGU4NWRhOGY5LAotCTB4ZGQxYzU4OTEsIDB4NWJiMzI4ZjMsIDB4YzllYzNlNzMsIDB4ZmE2MjM2NjYsIDB4YzAxZDg2ZTcsIDB4YzcxMzYwZjIsCi0JMHgzMjljMDdhNSwgMHg4MWU5NjNlOSwgMHg2MmRmOTYzYywgMHgwYWYyY2U1ZSwgMHhjZWNjMTM4YywgMHgxYzI2MjI5NywKLQkweDk5MGJkZGRhLCAweGNmMWU0MTUzLCAweDk5NzhlMTc5LCAweGNiZjM3OTQ0LCAweDZmNzg2NTViLCAweDMzM2Y5MjQxLAotCTB4MGUxMTZmNmYsIDB4M2VkMDNiMzcsIDB4MWYwMWVmYTYsIDB4NTAzNTdkZTUsIDB4YWUwMzc0ZjYsIDB4ODc2NTNlYWIsCi0JMHg4MzRmOGUyOCwgMHgwYmU5OGZhZSwgMHhlYmJmY2IzYywgMHg2NGZkMmI4NiwgMHgyMzFjYzIwNywgMHg0ZjMxZjg2ZSwKLQkweDJkYzNjMTRmLCAweDI1MzEwMWNlLCAweDc1ZjEzNWNmLCAweDJiNGI3YTFhLCAweGE3OGNiMmNiLCAweGViMmNmMzRiLAotCTB4ZDY4MzZhMzMsIDB4MGYxY2FhZjUsIDB4ZDY5YzUwZDUsIDB4OGJjYTY3ZDcsIDB4YzM0MWYzMmMsIDB4MzA2ZjFjM2YsCi0JMHg1ZGVlZGJlMCwgMHhiN2VjOGE3MSwgMHg2NmZlYjNkMSwgMHg2NTdiMjljMiwgMHg1M2JlNjU4NSwgMHhmZjEwMjYzOCwKLQkweDJjZGE5ZjBkLCAweDg0MjZmYzdhLCAweGNlNTFkMzliLCAweDBmMzFiN2RhLCAweGM2ZWE3M2MxLCAweDRkNmVlM2FkLAotCTB4N2VlNzVhMDUsIDB4YTAxZjI1M2IsIDB4N2I2YjQ0ZmQsIDB4Zjk4N2I0YzAsIDB4MWVkNTNmMzAsIDB4YWU3Yjc4OTIsCi0JMHg1MGY2NDllMCwgMHg3ODJjMGIwMywgMHgwYWViYzRjZiwgMHhmMzA3MWVmZSwgMHg2ZWUxYmE4NywgMHhkODZlNWZjNiwKLQkweDliNWU3YjhhLCAweGM1N2NmNzE1LCAweDdhYzE3MzhhLCAweDExODVjZTJiLCAweGY1ZDdjZTJiLCAweGE4MGQ3MTU4LAotCTB4Nzc4YWRjNTYsIDB4NWZlNjU5ZDQsIDB4Njk2NGRmZGYsIDB4NjU1YWVlOTcsIDB4YmEzMGJmOTksIDB4N2M1ZWQyZGEsCi0JMHhmY2NiNzZlOCwgMHg1OTc3MDMyNSwgMHg2ZDBlOTdjNiwgMHhmNjliOGNiNCwgMHhkZmZmNTMzNSwgMHg2MTllNmQ4OCwKLQkweDVmZjAzYzVmLCAweDUzY2FmZmEyLCAweDk5Y2U1OTBmLCAweDg4ODA3N2E5LCAweDZiZDZmODQwLCAweDU3MDNiYjAwLAotCTB4ZWRmYWJkZWIsIDB4NTc4YWYwN2UsIDB4MGYwMjlkZWIsIDB4ZjUzMzlkZTUsIDB4YTdmYTQ1M2YsIDB4ZmZlODZmMzgsCi0JMHhjNjI5ZDIzMywgMHgxN2JkMzdiOSwgMHhmZDM3MjcxZSwgMHhjZjFlOWE2ZSwgMHhiODg2ODQ1YSwgMHhiMDZkN2E0YywKLQkweGNmZWI3YWIzLCAweDNhNzM3NjYyLCAweDFlZTMwM2M1LCAweDE4ZjcxYjBiLCAweGVjYzFkZmFjLCAweGRiZDNlYzIxLAotCTB4NDkzYTVjNTIsIDB4NWNlMmFjNzEsIDB4YWFmODk5YjgsIDB4NTEyNzIyZDIsIDB4ZDBiOWE4NGMsIDB4ZjM0MTljZGYsCi0JMHgzODdkMTA2NSwgMHhmYWYwMzM5ZiwgMHgzNjA3MmQ1ZSwgMHg3YjYxM2Y4YiwgMHg1YmNmMTI2ZSwgMHgwMzIxNWVkNCwKLQkweDhhNWZkNzI3LCAweDRiMzBiMWY2LCAweGJmOWUwZWM1LCAweDZhZTcxOGRhLCAweDU1YTI3YmY1LCAweDA1MmQ4Mzc2LAotCTB4ZjM1YWM2OTcsIDB4ZmUzMTA4ZmUsIDB4MzE2ZmZjNGMsIDB4ZTdjYzA4ZWEsIDB4M2NmOTQxYzEsIDB4MDVmNjhhZWYsCi0JMHhhNDVmY2I2NiwgMHhhZmNiMDI1ZCwgMHhiZDZmOTYxNCwgMHhhMjc2MjljZSwgMHgyMmYxNWM2YiwgMHg5ZTRhZWI4YSwKLQkweGI4ODgyZjMyLCAweGM4OTJmMjRkLCAweGViNGUzM2YyLCAweDI0MTJhMTIzLCAweDZhNTY1ZDE4LCAweDc1NGNhYjY2LAotCTB4MzBhMzk2MTgsIDB4ZDE5ZjI5MGYsIDB4ZmIxODdhYWEsIDB4MmY0NmFkM2UsIDB4MTI1M2U5N2IsIDB4MTg4MzhhNTQsCi0JMHhkZjM5NDcxNywgMHhmYjVjNGFiNiwgMHg0NWM3ZGQ2NiwgMHhjYTJkNmY3NCwgMHhmZjUwMTc5MCwgMHgzYzhlZjc5NSwKLQkweGFiZTMwYjk0LCAweDQxMmE4YmM2LCAweGIxYzQzZWEwLCAweGRhNjNlMWZhLCAweGRmOGE1OTY0LCAweDdiYjNiMGVlLAotCTB4NmE3YThjMGEsIDB4NTk5MzgxYWQsIDB4OWM2MWRkNGYsIDB4YWM1YjhhM2IsIDB4NzZiZGY4YzcsIDB4NDc4Njc1ZTgsCi0JMHhkNTljN2ZiYiwgMHg5MjZmNjg5ZiwgMHg3YmJmZjcwZiwgMHhlYTgyYTdiZSwgMHgyNTJiOTA0OSwgMHhlYjM3MGViZCwKLQkweDdmZTEwMmFiLCAweDdhY2Q0N2I5LCAweGRiZjM1YWY0LCAweDc1MmMxN2ZkLCAweGVmZDYxYzJlLCAweGFmZWY2Yjk3LAotCTB4Y2E0ZDdiMzIsIDB4ZmEzZmVmYWQsIDB4NzdiYjFhNTgsIDB4NmMyYjFmNDYsIDB4N2ZkYzlhMjIsIDB4MzZiZmVkOTIsCi0JMHgzZWM1OTZmMiwgMHhiYmY5ZWNlZSwgMHhhNDdlZWVjNSwgMHhkNzE5NmJiZSwgMHgwNWVjYTY3MiwgMHgzNDc2YmYyOCwKLQkweDEwMGZjNTdmLCAweGNlMjM4OWJmLCAweDUxMzNhYTFhLCAweGE2MGZkZjVmLCAweDEzZGFjMWQ0LCAweGJjZTljYmE1LAotCTB4M2ZlNzJlZmYsIDB4NWIyM2JlMTksIDB4OTA1YjYwZTMsIDB4ZDZmY2YzOTQsIDB4NmRhZGFjNzMsIDB4Mjk5ZDE4ZDUsCi0JMHg5YTk3NTlhNywgMHgyODdiZjFkNCwgMHhhNjdlYTFiMywgMHg2Y2QyMzliOCwgMHg0MTIzMmNlZiwgMHhiOTFmNmYzZCwKLQkweGRkMTM2ZTcxLCAweDBlODUyM2JmLCAweGY0NGI0ZTliLCAweDRiYWQ3ZTc2LCAweDQ5NThhZjZmLCAweGVjZjc2MTM0LAotCTB4ODQ3NGJhYTAsIDB4N2I0Mzk5MDMsIDB4ZjlmNzlkMTgsIDB4NTE2ZTA3MDEsIDB4NDAzY2E3OTcsIDB4YTY5YTI2NzIsCi0JMHgyOTc3YTczZSwgMHgyODhhZDFjOCwgMHgyYTY2NGM5ZSwgMHg4NzNmNTIwZiwgMHgxNjdlNWZjOSwgMHhmMjg0YjNlMywKLQkweGZhYmMwYmZmLCAweDcwMThjMDZiLCAweGFkNmRkZjYwLCAweDdhNGZkNzk0LCAweDY0N2ZiYjc1LCAweDJhYWQyZGRmLAotCTB4MTk5OTUyZTIsIDB4NDBlYjRhZGUsIDB4OTE3YmQ4ZDYsIDB4OGVmOWFmYzksIDB4ZDUyZjc1NDIsIDB4NGViNzA5MjEsCi0JMHgyNjM5MDdiNywgMHg3NDE5OGVmZiwgMHgyOGQ0ZDUzNywgMHgxZDA2NGJkZiwgMHgzODRhZmJlNSwgMHg0ZWRkODdmMiwKLQkweDdlNjAxZmQ4LCAweDMxNWU1MzIwLCAweGZiYTljYzdkLCAweDhiYzAwZDgxLCAweDcxMWRlZmUzLCAweDNjZjY0NzNlLAotCTB4YmNhNjc5MTcsIDB4OTYzM2IzMDUsIDB4Y2VmYzU3ZmYsIDB4NjEzOGEzMTksIDB4MTRlNGJmYmUsIDB4ZTEwYjNmOGIsCi0JMHhlYzk3OWNmYSwgMHg0YzlmY2VhYywgMHhiZmM4NmIxNywgMHhiMmFmYmQzYiwgMHhhMGE2ZWJiYywgMHg0MGU0YzAzMiwKLQkweDhjN2UyODQ5LCAweGRiZWU3NTFlLCAweDJhNGRmY2M5LCAweDdmZmU5ZDVhLCAweDEwM2I2NzdkLCAweGE2OGM3NTY0LAotCTB4M2JjNjkxZTcsIDB4OGI3NzI5OWIsIDB4N2I5MzM4ZjAsIDB4NDgxMzk3N2EsIDB4ZTM3Yjg5Y2UsIDB4YmJkODg1NGYsCi0JMHg3YzQ0NTQ5MiwgMHhkZjNhZjI4ZSwgMHg3Y2E2YmYyNiwgMHg3ZGM5MWNhNiwgMHhjZDZlZGNiZSwgMHg3YmU0YTJmNywKLQkweGYyMTJmNmQ2LCAweDdmNTFjNDAzLCAweDNiYjgxM2M3LCAweGZlYjJjZjU3LCAweDlhYWJlOTBjLCAweGEwOWRhN2JkLAotCTB4YTIzMWI2MzgsIDB4ZjUyNWE3YmYsIDB4M2JjMGZmZGUsIDB4MGY2MWI3YTQsIDB4NWFkNzYzOGIsIDB4Y2VjZTUzM2YsCi0JMHgwZjBjYzMxMywgMHgyNDg3ZjM5NCwgMHhhNzljOGE1ZiwgMHg3ZWVmMjk4MywgMHgzZWNmYzcxMywgMHhiZWJmMTIxNSwKLQkweDM4YzI4OTdjLCAweDNjNGNkZjdiLCAweGM0NDhiMTc3LCAweDVlYzc5ZGY1LCAweGQyNzY0NzNmLCAweDMzZmZkNDY5LAotCTB4NzM5ZGE5ZGYsIDB4OWFjYzdlYjAsIDB4NmYxYTdkZWQsIDB4Yzk3Yzk0ODUsIDB4NmY5ZmFlNjksIDB4MDRjN2FlYjMsCi0JMHg4ODZjZmM5OSwgMHgwYWYyOTFmYywgMHg1ZTI5MjdiYywgMHg4YmU0Zjc5YiwgMHg2OWMxOWQ0NiwgMHg0ZDc4YjFhZiwKLQkweDZlZmQ5MWU3LCAweDVmNzY1NGUzLCAweDdkMDVlZjk5LCAweDU0NDdkZTFjLCAweDJjZGQyYjk3LCAweDc5ZDcwYjhlLAotCTB4MTdjZmIyMjQsIDB4NzRlMzA2ZDEsIDB4MzRlNGQ4ZmYsIDB4YTMzYzJlZjYsIDB4NTRlNzlkOGUsIDB4ZDkzYjI1M2UsCi0JMHgxZTUzNTZmMiwgMHg2ZjgzYjlkNSwgMHgyN2VhMzJhYywgMHgzNmE5MWVmZCwgMHhjZTlhYjJlYywgMHgxOTQzZmUyNywKLQkweDMyYTkzZWVjLCAweDQ1NzFhYmY4LCAweDBjYmFkZTU4LCAweDE3N2Y0MTU0LCAweDFlMTlkZTMwLCAweDc3NTJjZDdiLAotCTB4YTJiZjA3ZmQsIDB4MTdmMDg0NmIsIDB4MDAwMDE3ZjAKKwkweDQyNGU0Y2NlLCAweDRjMjJmMjEyLCAweDIxYTA4ODEyLCAweDhhODBhZjBjLCAweDIyMDEyNzdmLCAweDI4MjAzOWY1LAorCTB4NDIwMWQ0NTgsIDB4ZDQ4Mzc5MDgsIDB4Y2RlZGFmNGIsIDB4MTExMDI0ODQsIDB4MDU0N2Y0MzUsIDB4NTA4ODc2OGIsCisJMHgzNDBkYTJkMSwgMHgwZWMxNjBkMiwgMHg2ZDdiMTQyMCwgMHhjMGZhZjA2ZiwgMHg0ODBiZjVlYSwgMHhiMTJmMzE0MSwKKwkweGNiYzU3ZTIwLCAweGU3ZGFkNmJmLCAweDI2NGNlNjY0LCAweGFmZGJkODgwLCAweGI0ZmRmZmZmLCAweGVjZTdkOWI4LAorCTB4ZWJkYWY3YjMsIDB4N2I1YWQ3YjUsIDB4NzU5MjNkZWQsIDB4YzdiZjkzMDIsIDB4MDNmYzQ1ZDgsIDB4OGM0ZDRmZTUsCisJMHhmMmMxMDliMSwgMHg4MGY2NjY2NywgMHhjOWIxODcyNywgMHg0NzNhZmViZCwgMHg2ZDU1NjMzYywgMHg5ZGEyM2IxOSwKKwkweDk5ZWMyNThjLCAweDUwMjgxNDIxLCAweDJjMjNkNWZlLCAweGJmZGY4MjUwLCAweGYwOTdjMzY1LCAweDQyMTliNmZmLAorCTB4ZDA5NzdjM2UsIDB4YzNlNjExZTksIDB4MDJkNWU0ZmIsIDB4OTMzYTg3NmIsIDB4ZWEwYzMxOWMsIDB4NGIxOWI5OGMsCisJMHgxMjZiMmM2NCwgMHg0YjIyM2ZhMywgMHhlMGZmODI4ZCwgMHg4ZjM5MjU3MywgMHgyN2ZjMzRiMSwgMHg2MTQ2NzU3NCwKKwkweGM2NzhjMGFlLCAweDVjNTMxZTMyLCAweDM4YTlkMGQ0LCAweDg0M2Y3ODE1LCAweGJjZDJjNjdmLCAweDA3MzFiNzI1LAorCTB4YmMwM2NmNjMsIDB4YmNmMDcxYzksIDB4NjFkZTNhNWEsIDB4YzIyZWVmZTUsIDB4M2FmM2ExZGYsIDB4YWU1OGNkNmEsCisJMHgzMjc3M2UzMCwgMHg0MTY1ODlhNywgMHhmM2UzM2ViZiwgMHgzZDYzNDZhYywgMHg0ZmUzZDk5YiwgMHhlYzNmYzM0NiwKKwkweDhjNTE3ZWNjLCAweGIxMTM4ZjMwLCAweGNiM2MwMThjLCAweDYzMmYwZTU0LCAweDU0NjdiMmJkLCAweDZhOWIxZjEwLAorCTB4MmMzMmEyNTgsIDB4ODUyZjBmNTgsIDB4NTYzMzg3NjUsIDB4ZWQ5NzVlMDMsIDB4ZjgxNjVjMTYsIDB4MmY2YzM5ZmUsCisJMHhiZWQ3ZTYzMSwgMHgxNWVhZDY2YiwgMHhhMzYyNTkzZSwgMHhiNTA0MDRhMSwgMHg2N2VmZjRlNCwgMHgxMWJmY2IxMSwKKwkweDJiMzBmZWYxLCAweGVhNGFiMmEwLCAweGFmODA1NTk1LCAweGZiNzY1YWFhLCAweDY3ZWRmZTk1LCAweDU0ZTg4OTMzLAorCTB4NWJmNmI5MjksIDB4NWFkZWZjNjEsIDB4ZjE4NjZhZTYsIDB4MDJkNTk5OTcsIDB4OTFmYjJmYWMsIDB4N2E4M2U1ZDMsCisJMHgyMTQ3NjM2NiwgMHgzNmQwZmE4MywgMHhjMTE5ODk4MSwgMHg5ZTAwYWZlZiwgMHgwMDdmOTFkYiwgMHhhNTJiMmExZSwKKwkweDc0MDY0MmRlLCAweGIwMmJkZGVjLCAweDg3MWMwY2U2LCAweDc3NmNiYmY3LCAweDBjNjVmMzA2LCAweDY2NThlNzBjLAorCTB4MzJlNzM4MjYsIDB4NzQ4OTNhNDEsIDB4ZDIwNzMwNzEsIDB4ZjMyNGJjYzEsIDB4Y2VhODQyODksIDB4YjBmM2RjNTQsCisJMHg5ZGUyOWY3ZiwgMHhlN2Y0ZWQ4NywgMHgzOGU2MGI0OSwgMHhmMjU3MDBiZCwgMHg1N2EwNjY1MCwgMHg5ZDNhYjViMSwKKwkweGVhNTYzMjY1LCAweGJlNDQyOTY5LCAweDhkZWNiNTM4LCAweDllMDI1ODU1LCAweGY3YzAyNDEzLCAweDA4YTc4YjdjLAorCTB4NTc5OGE5ZmIsIDB4YTc4MGNkOWQsIDB4OGQxODU5ZTYsIDB4ZmYyZGI0M2YsIDB4MGNmODA5MzMsIDB4YzRjNWYzYmEsCisJMHg3NjMxM2YyMSwgMHhmMDRmODQzYywgMHg1YTExZjFjZiwgMHhkZTk4MWM1ZCwgMHhiMDhiMmI5NywgMHgwNWYxMDkxZiwKKwkweDFmMDExNzcyLCAweDI2YTA0MjNmLCAweDU0NGQyOGUwLCAweDI5ZmM1NzNhLCAweGQwYTBkODZiLCAweGMzNTk1YmZhLAorCTB4ZTUwMDY5YzYsIDB4M2YwY2JjMTEsIDB4MDg0M2FjNjEsIDB4MWNiZDRiZTUsIDB4YjBmZjNiYmEsIDB4M2MzMDNiOTQsCisJMHgwNGYzZDNmZiwgMHhhYjdlMTI3NCwgMHgxZmM4YjcwMCwgMHhiZmQ5NzYxNSwgMHhjYTYxZjgxMiwgMHhmN2MwZTZhYiwKKwkweDM2MmEzZjgwLCAweGQ0MGI3ZTBiLCAweGU4ZGJhZjRkLCAweDVlMjZmNzdkLCAweDM3NjVkODBmLCAweDE2ZDc0ZmYyLAorCTB4YmRmMDBiYTgsIDB4MWJmMWZkYTUsIDB4MTU1ZWJmOTEsIDB4M2I3NjMzNTksIDB4ZmE4NGNhMjIsIDB4M2IwNmE0ZTUsCisJMHhjMDc1MGYxYiwgMHg1NzhkYjE0NywgMHhiYmVmMzYyYiwgMHg2OTJmYmYxZiwgMHhmNDFiMzBiMywgMHhmMTdiYjE1NywKKwkweDdkNDIzNzFkLCAweGMzMzM2MWYxLCAweDZiNWIxNTI2LCAweDJmYTgxNGU1LCAweDU4MmQwYmYxLCAweGYwZTAyOWVmLAorCTB4ZmU4OTc2ZjksIDB4YzdiZWQwYWQsIDB4MWIzODllZDEsIDB4YzZiYTczZTgsIDB4NjMzMjljY2EsIDB4YzRmNmY2NzUsCisJMHhhNTY3YzA1OSwgMHhmODg1MWRmZSwgMHhjMTc2ZTk1ZCwgMHhmMjlmNjg4NSwgMHhjOTQzZDZlYSwgMHhiOTE3YWYzOCwKKwkweDhiNmQ5NzdjLCAweDdmMWQ0ZTY2LCAweGFiNjRmN2YwLCAweGJjMWVmODE4LCAweDY0ZjMwNjVmLCAweGQ2NjJlZmQwLAorCTB4YjA3YTg4NTQsIDB4ZDkzYWViNjIsIDB4ZWJlMjBmNjksIDB4ZTM0YThkNzQsIDB4OGJkZmM5ZjQsIDB4NTc3YzBlMzAsCisJMHhjMmUwOGFmOSwgMHg5ODlhNTYyOSwgMHg3YmIwZTUxNywgMHhmM2NlNmRiNywgMHg1NmFmY2UwYSwgMHhiY2UzYjZjZSwKKwkweDZlZDhjYjU2LCAweDJlZmU3ZmIxLCAweGZlYTVjZDU0LCAweGJjMjE3MmNkLCAweDU5YjRkZDJmLCAweGRiOTEwZTJlLAorCTB4OGM4MzZkYjIsIDB4MWFjODZkNzAsIDB4ZDcyMDhkZWMsIDB4ZDc4MDc4NDEsIDB4NTJmNTgzYjIsIDB4MGZhODAzZDQsCisJMHgyMzNjYmYyNSwgMHg4NTJhY2Y4NCwgMHhiMmNiZTI1OCwgMHgxYTczMjI2ZCwgMHhkZGQzODhmOCwgMHgxM2ZjMmVmNywKKwkweDZiZGJlNWYwLCAweDc0ZWFiYzI3LCAweDFhYTdkM2ViLCAweDFhYThjZWRkLCAweGJjZGVhNTFkLCAweGY4ZjgxMTE5LAorCTB4YzAwM2E0NzEsIDB4ODI3ODg0ZDMsIDB4OWYwNmFkNzIsIDB4OTdjYjMyNjMsIDB4OWI4NzdmYTAsIDB4M2NiYjAyYTksCisJMHhkOTk5MzY1ZiwgMHhmNTYzMDY3YywgMHhkMmRkMDdiMCwgMHhkOTk3NTBmNSwgMHhmNTgyZTY1MiwgMHg3YmIxZmE1MCwKKwkweDA0OTNkNDJhLCAweDlmMzg2N2VmLCAweGMyNWJjMTdhLCAweDI0OTZhYmQ3LCAweDk1NzllMDBmLCAweGZjZTBlNmMwLAorCTB4MzBkMDIxOGYsIDB4YzBjOTU1YWYsIDB4YTZmNzgwOWYsIDB4OGJjZjc5NjksIDB4M2M3YjA2ODIsIDB4YjE3ZjhiZDYsCisJMHgzOWZhODMyNiwgMHhhMTk4ZmQ0MywgMHhmN2NiYWM5ZiwgMHgzMjRlMTZhMywgMHg5NjE2YTNmNCwgMHg4ZGZjZmRlOCwKKwkweDU5NWRiMWZhLCAweDM3ODU0ZDNmLCAweDJjMjllMTE4LCAweDA0OTFmYmQ1LCAweGJmNmY1NzY4LCAweDM3YTk3OWIyLAorCTB4NzNjMjM2NGYsIDB4MTNmNTM5NzMsIDB4YmNjNWQ1M2IsIDB4MWFlN2FlMGEsIDB4Yjc3NmIwM2YsIDB4ZWQ5NWVmMDgsCisJMHhiMGQ3NjNiMSwgMHg1MDI4YmU1MCwgMHgwZWRiODAwNSwgMHgxN2NhMTI1MiwgMHgwY2EyOTMzMSwgMHg4ZWViMTg3YywKKwkweDI3YTFkNDMzLCAweDQxNzVlNGY1LCAweDk1ODgxM2ZkLCAweDQ1Mzk3YzY5LCAweDlmOTBiZDI2LCAweDQzZmFhNTYyLAorCTB4ODVlOTBhMjksIDB4NWVmMDZlODcsIDB4OGUyMGViODMsIDB4MmVhMTkyY2QsIDB4MTFhYjQ3N2IsIDB4MTRlMDFhZjgsCisJMHg2MDk2MTI1OCwgMHg3ZmY1MjQxNywgMHhmMWNjZGFiZiwgMHgyMTdhOTA1MCwgMHg1ZjdjMThmYiwgMHg4ZWNkZWE2NSwKKwkweGE2MzVmYTg1LCAweDZmMTE2YmZjLCAweGU1ZWI4MTJlLCAweDYzNTU5MTI4LCAweDIzMGIyOGJiLCAweDIzM2FiNGZkLAorCTB4MDg1Zjc5ZWYsIDB4MDA4NzFhOWUsIDB4YmY2MDg1ZmQsIDB4MTI2ZjY2OGQsIDB4ZGFmOGQ3ZjIsIDB4YzAxMjdjNjcsCisJMHhjYzA4NmFiNywgMHgxMmJhMDUyNywgMHg2MGY4MDk5ZSwgMHhhNDNkNWEzZCwgMHg2OWYxMDkzOCwgMHg0M2JlNDE5MSwKKwkweGZjNjE5N2M3LCAweDA2ZmYxYTFjLCAweGM3MWJhM2M0LCAweGJlM2ZlODRmLCAweDYxOTI3MzI1LCAweDg5N2E2YjdjLAorCTB4MGNhYjdjNjEsIDB4NGZiZjAzZTMsIDB4YzZkNjZkYWQsIDB4YzBkZGZjMDcsIDB4OTlhMTM0ZDgsIDB4OTdhNGI3YzYsCisJMHg2NWFiZjhkMCwgMHgzZjE4NjI1NiwgMHg1YmZjNmZhYSwgMHg4MTllZmU3MCwgMHg4Mzc5OWZlNiwgMHhhNWU5ZmU3MSwKKwkweDdjY2JmOWM2LCAweDVmNmFiM2ZlLCAweGEyOGZjNmQyLCAweDVlMTZjZmY5LCAweDJmNGZmM2UyLCAweGYwYjdmM2U1LAorCTB4NzdjNmZiN2UsIDB4NWVmZmUxZjQsIDB4ODA3N2JmOWMsIDB4OTM1OTJkZjEsIDB4NWExZmYzOGQsIDB4ODViZjljNmUsCisJMHhiYjU0NWY4ZiwgMHhhMTVmMWI1MywgMHgzYjA5MTdmMSwgMHg5Njg3ZmNmOSwgMHhjNWIyZjhkMywgMHg5MjNlNDJlYiwKKwkweGZkYWFhMzUzLCAweDgxYTQ0ZjY4LCAweDFkMjYwYzQwLCAweDA0NzJhNmU1LCAweDFmYTAwNTE4LCAweDA0OTkwYTg2LAorCTB4OWM1MTQzYzcsIDB4MDE0NWNlZWYsIDB4N2Q0MTI5YmYsIDB4NTEyMGZjYzcsIDB4MzUyYWNmYTAsIDB4OWVkYjJmOWUsCisJMHhhNTllYTMyZiwgMHgzNzY4ODlmNywgMHg2ZDQ1M2ZmMSwgMHg2YzM3YWQyMiwgMHgxYzNmYzViZCwgMHgxMzZlZWRlMCwKKwkweDVhMmY1ODdkLCAweGE0NWY5MzdmLCAweGU1ZGI4ZWY1LCAweGYwMDVjNjYwLCAweDFjOWU1ZmY5LCAweGFmM2ExY2Q1LAorCTB4OTM1MTcyZjAsIDB4NDE4NzY0ZjksIDB4YmUzYzM4OGUsIDB4MWFhMjM2MDIsIDB4MjY0NzZiZTAsIDB4OWZhYzEwOTgsCisJMHhjNjBhM2QwNCwgMHg3YTBlM2IyZiwgMHg2NjUzY2IxNCwgMHgwMDljOGY2ZSwgMHg1MGU0Y2IzZCwgMHhmNmU1YTliOSwKKwkweDkzYmQ4Zjg4LCAweDViYmFmMzAzLCAweGM0YTRmZjgzLCAweGI5NzI3ZGYxLCAweDlmZmM0N2UwLCAweDQ2NTRiNzViLAorCTB4MDlhOGI0ZmQsIDB4NzkxMGU5OGMsIDB4ZDRlOGQyYWYsIDB4NmZlMmRiYmIsIDB4NGU5ZjA4MTYsIDB4MjQzZGNmYzQsCisJMHg5N2ZkOGM4YSwgMHhkZTJmZDc2NiwgMHhkZGYwYzgzMCwgMHg0ODZmZTYzYywgMHhkNzBiZjY4MiwgMHhjMmEyMWZjZSwKKwkweGM3MzA3ZmZjLCAweDUzZWQxNjMyLCAweDEzNTQ4NDkwLCAweDM1NGIzMWM5LCAweGE3MzE2ZjgxLCAweDE1Mzk5ZDc1LAorCTB4MzFjY2Y3MmEsIDB4YjlmYWVjMWIsIDB4MDdmZDYzNWUsIDB4Yjc3YWM2MjUsIDB4YTEzNjZmZDksIDB4NjA0NGIxYmQsCisJMHhmYmRmYTE5YiwgMHhmNWVmOGRhYSwgMHg3MTA5MzY3MSwgMHg3OGRhYWU5YywgMHg3ODcyMjc3NywgMHgyYzcyYzNlZiwKKwkweGFlODk1NjNlLCAweDViZmNhYmY3LCAweDg3YWE5ZTFkLCAweGViNDAyY2NkLCAweDQzMDI0NzY1LCAweGM4MTJmYTNhLAorCTB4N2NhYWYzNWUsIDB4ZGVmMGUxZGUsIDB4M2RiYWI2NmYsIDB4M2ZmZGNmMDAsIDB4ZTE5ZjA5MTIsIDB4MWViYzc3ZjAsCisJMHgxZDgxMzZlZCwgMHg0YmUxYjFkNywgMHhlMWI3ZGEzMywgMHhmZjg3MDlmMywgMHhmM2UxMTU4MSwgMHhmN2Q0NjU1MSwKKwkweGNmZTE3ZGYzLCAweGYzODQ5ZjM5LCAweGZlNWI1NTUzLCAweGVkMjExM2EwLCAweDNmYmU1YTJhLCAweDdmMDg0NGU4LAorCTB4NjE5YjZkOTUsIDB4Y2ZmMTJmYTgsIDB4YmM1ZmI0MzUsIDB4ZmRlMWJlNjEsIDB4ODYyNWE2YTIsIDB4OTcxYjBiZjcsCisJMHg3ZGYzZWExYSwgMHg3ZmI0MzIzZiwgMHhlMWFkNDU2MCwgMHg4ZmQ1N2RmZCwgMHhhMGZmZGUxOCwgMHgzZWExOWQ2NCwKKwkweGQwZDFiYmQ3LCAweDliMzk5ZWZlLCAweGFmNGRlZjBkLCAweGU1MTNiYzhmLCAweDkxNWRlZWE4LCAweDU2NzFiYWUxLAorCTB4ZGEzOGY5MzksIDB4YzkxNTY3ODMsIDB4YjRmOGY0ODUsIDB4ZTBlNDg5MjYsIDB4Y2E5MzhkNzQsIDB4NTY3MWI2ZWUsCisJMHhjNTgzZDcyZiwgMHg1ZTljNGMwYywgMHg3MWFmOWNlMSwgMHg0NjY1ZWEzMiwgMHhjMmFmZjNmYSwgMHhlYTBmOWYwNSwKKwkweDg0OWMxMzdmLCAweGNjODM3MTNmLCAweDAyYzJjMDAyLCAweGUzZTNlYjhiLCAweDdkZTQzMTVlLCAweDZmZGU2NWM3LAorCTB4ZDcxZjQxMDAsIDB4MTFkOGJkZmYsIDB4ZjM1NTc5ZjksIDB4MDQ2YWExZmMsIDB4YjcyODIxZmYsIDB4YjlkNzE1MmMsCisJMHgwZjdkNmQxZSwgMHgzMDJlNWY3ZiwgMHhjNjczZTg0ZiwgMHhkNzljOTI1NiwgMHhiOTRjZWI2OSwgMHhmOTQxZjVjYywKKwkweGY0MDJlNGNlLCAweDQwZTVjYmJmLCAweGM2YTVmNTc2LCAweGEyYTQwMTZiLCAweDNjZWI0NDllLCAweGE0MDFmOTAxLAorCTB4NTkyZmMwYzAsIDB4ZGNlZWY5MDYsIDB4OTU1YzEyMjcsIDB4YWY0MDEzYTgsIDB4YzE5ZTYzYWUsIDB4ODEzM2Q0MjYsCisJMHg4ZDc3ZTkwMywgMHg0OWRjMzg0MiwgMHhhMDRiNmY1NCwgMHg2NmIzYmQ3NSwgMHgxMjEzYTBmYSwgMHhlNTQzYzdkMiwKKwkweGE4NzMzNWE3LCAweGE1ZTM1OTNjLCAweDA5NGQ0NGYyLCAweGFhNmJjNzk1LCAweDU5YThlY2E5LCAweDM1YzdlNTQxLAorCTB4YWEzZjJhM2UsIDB4Y2ZmMmE0NjksIDB4MWU1NDRkMzUsIDB4ZTU0MGQ5YWQsIDB4MmE3ZTM1N2IsIDB4NTRkYzZiYmIsCisJMHhiYTJiZjlmNiwgMHhlY2Q3OGRmZSwgMHg4MGFmY2Q1NSwgMHg2N2VhODc5NSwgMHg0M2Q0YjliNCwgMHg3MzkyNzZkYiwKKwkweGY5Y2ExMjU3LCAweDM2NWNlNTE5LCAweDhlNjdlM2RhLCAweDMxOTk2MzgyLCAweGY5YzJiZTMwLCAweGJhM2E2MDZkLAorCTB4ZjYyOTVlYzksIDB4ZjVjN2ZkMDMsIDB4ZTI4YjZmN2YsIDB4ZDg5OWIyNzQsIDB4ZDlhNjcwNzQsIDB4ZTE3ZmMzMjMsCisJMHg3NTQzOTA1YSwgMHgxNjA2NTkwOSwgMHg3YjBjZDcyNCwgMHhlZDYxN2U4NCwgMHg4ZTVkN2E0MywgMHg5YmRkY2M0ZSwKKwkweDcxZTgxMzNiLCAweGU1YmY5OWYyLCAweGRhNzViZjYxLCAweDQwNzUxN2ZhLCAweDA1OTg3NWE0LCAweGJkMjE3NzllLAorCTB4ZWI0NmYwNDIsIDB4OWFhYmVmNWEsIDB4ZmUwY2JmYmUsIDB4ZDdmMGZhYmEsIDB4ZmJmZThlOWUsIDB4ZmVhNTQxNDEsCisJMHg5ODVhYjRjZiwgMHgxM2RjNzg4NCwgMHg2N2U2MDdlZCwgMHhlZjNmMGU2NywgMHg5NjVjNzk0MCwgMHg0NDRmNTI2NCwKKwkweDU2NWU4M2MwLCAweDRhYTg2NGI0LCAweDY2ZDNmYWU4LCAweDEyNjk5ZmFjLCAweDdhZDBiN2E2LCAweDM1OTk4Y2VjLAorCTB4NTU0YWY5MGEsIDB4ZmE0MzBjNGYsIDB4ZjdhOTUxMjcsIDB4NTY0OTJjYjMsIDB4OWViYzgwNGYsIDB4YzMxNTk2ZGUsCisJMHg1ZjNmNmZkNywgMHgxMmM3YjcwNywgMHg0ODVmODJiZiwgMHhmMGRlZmZlZCwgMHgwZThmZDQwYywgMHhlY2FkNjMwZiwKKwkweDAzZWEyYjEzLCAweGVkZjU5Nzc4LCAweGZkMjY3MmZkLCAweDZjNTdlMjk1LCAweGRhMWNmOThmLCAweDdiZjgxNjBiLAorCTB4MTIwN2UyOTEsIDB4YWI3ZWY1ZDUsIDB4NjU5ZjQ0NWEsIDB4NmVkZjNlMzQsIDB4NzNiZTBmMTgsIDB4YzVmNzNlZWEsCisJMHhhZGYxNGJjYywgMHhjNDg2NGVjNCwgMHhmMTY5ZDYxMSwgMHgzNjZkYjJjNiwgMHhjNGFlYjhkNSwgMHg2ZDU1ZWExYSwKKwkweDlkNjFhYWM5LCAweGZjODA3ZmMxLCAweDQyNDE2YWIzLCAweGI4ZDcyOWJlLCAweDFhNTI0N2E4LCAweGRjYWY4MDA1LAorCTB4YWI3ZWE0ZTQsIDB4YzJhZWRlMDQsIDB4ZTE3YjIxZGEsIDB4YTcyYjU3NTEsIDB4OWRmMDQwZGIsIDB4OTRlYzM5YWUsCisJMHhhYzRiZGU0MCwgMHg3YzAyMDFlMCwgMHhhNzIzMmQyNSwgMHg2YWViOWVhMiwgMHg3YjQ0NGJhZCwgMHhmMzNjNGNiMCwKKwkweGY3YzIyNzkwLCAweDhkMDI0ZDNiLCAweGVlNmZjNGI3LCAweDFhYTNhZTM1LCAweDU3ZTgzMDdmLCAweDE2N2U0ZTdmLAorCTB4ZDQ4NjRlNTMsIDB4Y2VkYzRkM2IsIDB4ODBmN2VmMGUsIDB4ZjBlNWVmZDYsIDB4NDhmZGI5NTMsIDB4ZmVjZThkZTEsCisJMHhmYjZjYWE3OCwgMHgxYzkyZjY0MiwgMHg4MmYyZmZjMSwgMHg1N2YxZDI3OCwgMHg0MDFjZjI2ZSwgMHhlZGJhNWE3ZCwKKwkweDlmYTNkOTE4LCAweDBmZDk3ZDlhLCAweGY1M2Y0MjVmLCAweDQ0OTI5ZjlmLCAweDVlN2Q1MjcxLCAweDYxMjkzMDNlLAorCTB4N2M1YTA1OWMsIDB4OWVmN2Y4MTcsIDB4ZmQzZDYxMGYsIDB4NmNjZGRmZWMsIDB4MmVjN2MwMGQsIDB4NmY3ODJiNDAsCisJMHgxMzMzNWZkNiwgMHhhMTdkNDEzMywgMHg1YWQwNWI1NiwgMHhjZmRkNzE0NiwgMHgyYThlZGM0YywgMHhkMTA3MWU2MiwKKwkweGExZTUzNTgxLCAweDRjYzVkOTFkLCAweDVkNGYxMWQzLCAweGI4Yzc2ZGVjLCAweDMyOWMzYTEwLCAweDE2NjdhNGM5LAorCTB4MThlZDFhMzYsIDB4ZjUwZDdmYjAsIDB4ZjU4YzFiYzUsIDB4MTEzMzM2NjIsIDB4N2FmMTQ5ZjUsIDB4MzQwYmYzMzMsCisJMHhmN2ZiYzMzZiwgMHg3ZmUxMmE0ZCwgMHg4NTVlYWIzMSwgMHhmOWE0YWFlYiwgMHgyNjU0MGIyMywgMHgxNTdjMDJhNSwKKwkweDZmMzY3OWJmLCAweDRjNWZjNjNlLCAweGUzZDEwZmRjLCAweDM4ZTI0YjIzLCAweDdlZjFhNWZjLCAweDNmZWYwZGQ5LAorCTB4Zjc3NzFkNjksIDB4OGIwNjQ4OGQsIDB4ODljNjE1N2YsIDB4NmQ3MzBjNTgsIDB4ZmJmMWZkNjUsIDB4ODcwZmUxNmQsCisJMHhmYmFmNWY1NywgMHgzODM0NjljNSwgMHhkYjgyNmRjNCwgMHgyZjdmODExZiwgMHhlYmE2N2M2OCwgMHhkNTQ0NWJlYiwKKwkweDhkZGMxN2UwLCAweDIxYmYxMGY1LCAweGIyZTJkNDQ2LCAweGVlOTExMzIyLCAweDY3ZDVhYTVkLCAweDE0ZjdhMThhLAorCTB4YjRlZGY3YjcsIDB4ZGU4MGVhYjgsIDB4MDY3OTM3M2YsIDB4NGVjODEzODksIDB4ZWQyMTY1YzgsIDB4ZDJmMjZlN2UsCisJMHhhZGUxNGVmMywgMHg5OTViYjQ2MiwgMHgzYjQ1YzgxNCwgMHhlMjE4ZDYxNCwgMHgwN2UzNTk1MywgMHg4YjkxY2EzMSwKKwkweDgzM2I2NmYxLCAweDZmZTgxNDc1LCAweDlmYTBmODQxLCAweGRiOTJmNjU1LCAweGJiYzYyZTU4LCAweGJmYTFkZTQxLAorCTB4ODc4NTFjYzcsIDB4OTRkYmE4MDUsIDB4NTlmZDg2NTYsIDB4N2NmMThjOTIsIDB4YWY1OGQzOWIsIDB4MWQyMDdmYzIsCisJMHgzZjhhMzA0NiwgMHhjMjkwOGY0NSwgMHhhODYwMThmMCwgMHhlMzJlZWQwZiwgMHg4NGU4NTFmMywgMHgyMDFmZGQ5MSwKKwkweDhiMTA3NjNlLCAweDAyNTU2OTQzLCAweDI2Y2Y4YzIyLCAweGZlN2Q5ZDQ5LCAweDdiZmEyNjU2LCAweDJmOGE3ZTFjLAorCTB4MmFlNWZiNDAsIDB4YzVhOTVmNmYsIDB4NTA3Zjk3Y2YsIDB4MTJlZTM4MzAsIDB4M2NlYWE4ZmEsIDB4MjE0MTkwNjgsCisJMHg3ZmJlM2Q3NSwgMHg3MWZlNjI1ZSwgMHgzYTZmNDFkZiwgMHhkMTBkNTU2MSwgMHhkZTRkNzM5YiwgMHhkNDBmNDg2OSwKKwkweDAwOWYwODkzLCAweDc2MGQ3OGUzLCAweDJhMWE5YTYwLCAweGY4YzIwYmU3LCAweDg4ZTFhYWUzLCAweDVkZmQwNjY3LAorCTB4MmRkZWYyNmUsIDB4ZTM4N2Y0MjYsIDB4ZWE0ZmZiYWEsIDB4NDg4MmZmZDcsIDB4ZmVlYWJjZjMsIDB4YmZlYmY1ODcsCisJMHgxNWZmNTIzMiwgMHg5Nzc5NzliZiwgMHhmNGE5ZjgwZiwgMHg4MDNhNGY1NywgMHg1MjY3ZDk5OSwgMHhlODBiYTI1MywKKwkweGMxYjViZTVlLCAweGE5Zjk3MjgxLCAweDVkMjA3M2U0LCAweGQzOGJmMzNmLCAweDE2ZTdjOTIzLCAweGI3NGY5NzUxLAorCTB4ZmYxMWU0MjIsIDB4N2U5ZDFmMTAsIDB4ZDAzYmQxZTksIDB4ZDViNzNhYWUsIDB4NjA3YzUyYWMsIDB4MDE2MDI1OWIsCisJMHg1ZDZjYWNhNiwgMHg5YjYzZTVjMiwgMHhhZmFmMThlNSwgMHhiM2Y5MDJmZSwgMHgyZmE4Y2RhYSwgMHgzMjc4NWY0YSwKKwkweDQwY2RlMzExLCAweDBlN2ZjZDQ5LCAweGI5NTA3ZjkwLCAweDY4ODUyZmU1LCAweDVlYjE1NTc3LCAweGRmZTE3YmQyLAorCTB4ZTNlN2Y4ZTEsIDB4MmY5ODFlYzgsIDB4YWY3ZmY0YzcsIDB4Njk1NWYzZWYsIDB4N2Q2YWE5NzgsIDB4ODQ5MTBiZjQsCisJMHhjZGZjODNhNSwgMHg5YTI1ZjZmMCwgMHg2OGE0ZmZiZCwgMHhkZjM4YTc4ZiwgMHhmOTExMzY0NCwgMHhmMzA3Yzc0YywKKwkweGVlYmY3YjczLCAweDhmNzNhN2M1LCAweDViOWQzYzAxLCAweGU0MjFkZGZlLCAweGQ3MjdmMjg0LCAweDE2NWE2NzdiLAorCTB4ZTczNWZjZmUsIDB4MGRkNGYyYzAsIDB4YWVkNDMxN2EsIDB4Njc2N2Q3ZDYsIDB4ZWNhN2U2OWIsIDB4MzliOTY1ZTEsCisJMHhiMDNmNDBlMCwgMHhlNWQ5YjM3YywgMHhmY2JlYmE0MywgMHhjMTllMmZmYywgMHgxNjA3Y2NiOCwgMHhiZmU4NzBkNywKKwkweGVmODNlNWVjLCAweGIyZjUwMGRkLCAweGRiZjhlNjFkLCAweDIxMTQzNGY4LCAweDJhOTc0ODMxLCAweDZjNjJiYmY4LAorCTB4YmZhNTBlOTAsIDB4NDczYjI4M2UsIDB4OGUzZmU3ZjEsIDB4NmNhM2QyMGIsIDB4OGQ5OTNlYzcsIDB4Mjk4ZjhmZWEsCisJMHgwZWU0ZmIyZCwgMHg1YTVkMDIyNSwgMHgzZmEyMTU4ZSwgMHg1N2UyZjc1MSwgMHhjZmFmZWEzMiwgMHhlMGQ4MTc1ZSwKKwkweGRjZjgwODhjLCAweDYyZWM5MDdjLCAweDUxZDExM2M0LCAweGRkMWY1M2EzLCAweDAxNTdkYWMyLCAweGVhYmY1MDVkLAorCTB4ZmY3ZjBhNzQsIDB4YzdmZTlhMmYsIDB4YzQzOTljZmUsIDB4ODZiY2FmY2YsIDB4YjY3ZjI4ZmIsIDB4MjVmZTcwYjgsCisJMHhjMGU4M2NhZiwgMHhhYTkyOWM3OSwgMHhkYjNmNWYzOSwgMHg3MTg2ZTg5MCwgMHg0NGJlY2M0YiwgMHhiY2ZlNGE5NSwKKwkweDEyMWZiOWU0LCAweGYyM2UyZGJmLCAweDdmOGE0NGMzLCAweDg5YjI3NzMwLCAweDMyNWYwNTZjLCAweGE2ZDE2ZmNlLAorCTB4NjJiZjM0ZDksIDB4MmJiZTI1ZTYsIDB4ZTBmNDU2NzksIDB4ODk1OWUwZmUsIDB4NDExMWRmNGQsIDB4YWUyNDUyMmUsCisJMHg1YjM1NGY4ZiwgMHhhNzY1NGQ3MCwgMHg3ZGMwZTE3MCwgMHhmZjQ1Yjc4NSwgMHgyZGZmOGE1NiwgMHgwZmNhZjhhNSwKKwkweGI2MjBmZGY1LCAweGFkNjdlYThjLCAweDg4NWY0ZTljLCAweGFjMWFiZWZhLCAweGJhZmNhMTNjLCAweGQyM2I3NTY1LAorCTB4ZjcxMGY0ZTcsIDB4NTcxYjhjNjAsIDB4ZTFhN2M5MzEsIDB4ZmQwOGI4NDMsIDB4MGRhNjQ3OGEsIDB4NGU2MWY0ZTYsCisJMHgwZWZiNGYyOSwgMHg3YzE0ZmRmNCwgMHhjZGRiZWQ4ZSwgMHhlMWFlNWI2ZSwgMHgyMzMxNzYzYiwgMHg2ZDcyZmUzOCwKKwkweDBhM2I4MDdjLCAweDg5NTNkNWVkLCAweDk4NDVmZjYwLCAweGFmYTRhMTVmLCAweDg1NTc2MDM3LCAweDdjODg1N2YwLAorCTB4ZjJkZjc5NzMsIDB4NWQ2Zjk3MDgsIDB4YTYzM2ZkZGUsIDB4YmViZmZiZTMsIDB4YmYwN2U1YzMsIDB4ZTAwNTdiNDMsCisJMHhmN2E2MGMwYSwgMHhhNDA5NjZmYiwgMHgxMDJjMmMwZiwgMHg5OGI3YWU0OSwgMHhiZTM2YjkzNSwgMHhlMDA0ZjlkNywKKwkweGVkZGQ3MDk2LCAweDNmZWMxN2UzLCAweDc2NGZmMDhlLCAweGY4N2FmMTZjLCAweDU2NWY0NDJlLCAweGZlOGU3OGUxLAorCTB4YmI3MmU5ZmQsIDB4MDRmZjkzNTgsIDB4NmNmZjI4YzksIDB4ODFmYjk3MTMsIDB4OGYxZjA5ZmQsIDB4YmZmZDk4NGIsCisJMHgxNWU1MDY3OCwgMHhhZmY3MTNlNCwgMHg3YjM2NWZjYiwgMHg2ZjlmZGU3MCwgMHhiZGRlZjAzZiwgMHhiNzlmYTcyMCwKKwkweGQ0NmE3MmU4LCAweDVhNzJlMTlmLCAweDhiMDI3M2IyLCAweDYzOWZhNzI0LCAweDM5MjQ0MjFhLCAweGU1MTFlNzg1LAorCTB4M2UyMGU5NTQsIDB4NGZlOTQ3ZmUsIDB4ODUzNzdmMWQsIDB4ODdkNzRmZTEsIDB4NWMzMWUxMDMsIDB4NzQ1OWZlMWYsCisJMHhmMDg3ZDQ0NiwgMHhkNzk2MWRlNywgMHhiZTc0ZmY5ZiwgMHhmNGFkZjlkMywgMHgyOTQzMTU5NywgMHhhNWYzYTYzZSwKKwkweDdjN2Q3N2NlLCAweGJmNWRmM2E5LCAweDdmMDFhMzc4LCAweDE4MmRlZmUxLCAweDNjYjgwMTgzLCAweDQ3MTRjZGJiLAorCTB4ZjdjM2RmMjgsIDB4NDNiYmUxN2YsIDB4NGYwOWUzYTksIDB4NThjNjVhNmUsIDB4ZjhkNGExZDMsIDB4YWMzZmJhZDAsCisJMHhkZWQ2MTJkZSwgMHg4NGY3NTYxZCwgMHhkNTg2ZjdiNSwgMHhjYmVkMGRhYiwgMHgzY2M4MGVkYiwgMHg2ODYwMjVhZiwKKwkweDg2NzhhZTI3LCAweDEyMjgzMjdkLCAweDVmYjlmYWJmLCAweGVjODVmYWRhLCAweDdhNTBiZTQzLCAweDRhZjM3YmU5LAorCTB4M2M2M2IzZTYsIDB4ZjE0OGFmN2MsIDB4ZjFjMDFlOTEsIDB4NjdhNzE4MmEsIDB4ZjMxZjg2N2IsIDB4M2M2YzFhMjQsCisJMHhmNmEzZDRlZSwgMHg2YzVlZDAzYSwgMHhkZWY1ZTU4OCwgMHhlYTE1NzkwNCwgMHhhZjc5ZmQzZCwgMHg3YWY1Yzc4ZCwKKwkweGQ4OGViZDNjLCAweGQ4ZWRmYjEwLCAweDc2ZjQ5MTFlLCAweDhmNGQ5Zjg3LCAweDhhYzI2N2U0LCAweGMxZDQ3MjQyLAorCTB4ZTNjZjdhMDYsIDB4MjU0NGQzZmQsIDB4NWZjNjA1N2QsIDB4ODYxNzQ0OWEsIDB4ZWY2YThhNzQsIDB4NDE5ZTYwNzEsCisJMHgzYmFjOWVjZiwgMHg0NWYzYzBlNywgMHg4ZGI0OGE2ZiwgMHg3Yjc2ODNkOCwgMHgyZGM3OTIwYywgMHg3N2Y4ODcyNSwKKwkweDUzZGYzMjlmLCAweGJmN2UzMTkzLCAweDQ1NzlmYjg3LCAweDExZWNjMzZiLCAweGE5Zjg5NmI2LCAweGEzMmU1OTU4LAorCTB4ZWNiZjA1M2UsIDB4ODJmZjcxYjgsIDB4ZDZhOTQ1Y2IsIDB4ZTMyNmM5NWYsIDB4ZGM3YmZkN2IsIDB4YmRmYjQ1YzEsCisJMHhiZGYxOGI3NCwgMHgzNDA3OGI1NywgMHg4NjMyNzJlYiwgMHg3MWZjZDE4ZCwgMHhmNGQyOGYxZSwgMHhlNzMxMzRmMiwKKwkweDhmNDAzOWNlLCAweGMzMjJjMzllLCAweDdiMzNmYmZkLCAweDk5YzdhMjQ0LCAweDllYmY3Y2VkLCAweDIzZDdmNmUyLAorCTB4M2U5MmY3N2YsIDB4ODlkNGYxZDQsIDB4YWMwZjI0ZjIsIDB4ZmQ1ZjNhYWYsIDB4OTE4N2JjYWYsIDB4OTg3ZDc2NmYsCisJMHgzYjI4MzNmYiwgMHhmZDkwN2Q3NywgMHhlNmZmYWM1YiwgMHg1OTBmZjRmZCwgMHg1ZTUzZjZmZiwgMHg0OTNlZDFiNywKKwkweGUyNzZlYmNmLCAweDdmYmQ5ZWY3LCAweGViMTg3ZjRjLCAweDlmMTQyZGJiLCAweGFiZmQ3OWVlLCAweDllOWZlNDVjLAorCTB4ZDQxMjk2OTUsIDB4ODA0MzNkNzcsIDB4ZWMxZjY4ZmUsIDB4ODNiNzJhZmQsIDB4YTI3YWQ3ZDYsIDB4OTkyNTFmZGIsCisJMHhmZTdiNDdkYiwgMHg4ZjEwYjFmNiwgMHhlZDBhY2MyNSwgMHg0OWEzZDc4NiwgMHhiMzVlYWE5ZSwgMHg2N2FkM2M1MSwKKwkweGExNzk1N2VmLCAweDlkNzdmZjc2LCAweDdmYjZhNTRmLCAweDczNjc2M2Q5LCAweGIxN2MyMjc2LCAweGVhYTdkZjdjLAorCTB4NWYzZmQ3YjcsIDB4YWQxN2Y5OGIsIDB4ZjA4NWU0ZmIsIDB4YmVlZmNhN2UsIDB4ZGEzZDQ1YzksIDB4NDNkYjkzYjMsCisJMHhlNzhlZTZkZCwgMHg2OGVlN2Y3MCwgMHg2Njk1ZGNmZCwgMHgwYTM3NzNjMCwgMHg5YmFjMGE1NSwgMHhhMDE0Y2YwZCwKKwkweGNiYzdmNGRjLCAweGJjMjcxNDM3LCAweGZjZjQ3YzUyLCAweGMxMGY4MzVmLCAweGRkOWRmNWNkLCAweGRlNzAxNTZmLAorCTB4MjFmYzdmNWYsIDB4MmRkNzg1ZWEsIDB4N2NmYTk3YzQsIDB4MjVhOTZmM2YsIDB4ZjM3MmU1N2IsIDB4OWM3OTk4NzYsCisJMHg3OTlkZmZlNCwgMHg5OTJiODEwYiwgMHgzZmYzMjhmNywgMHgyZDdmYmQzNywgMHhlMTJlODkzOSwgMHhjZjlmZDA3MiwKKwkweGY1NDQzZWY3LCAweDgyMmVlZDk3LCAweGZkZjkwYWY3LCAweGY5ZjI3ZmY2LCAweGVmYmE2YjdmLCAweDJlM2JiYTA0LAorCTB4N2ZmMmVmM2YsIDB4NGMwZjc5ZjIsIDB4ZDdlZjM3ZjcsIDB4N2U2MmFlZTgsIDB4YmVlZmQ1NGIsIDB4YWRiZWY4MjEsCisJMHg0ZmZiNWI5ZSwgMHhjZDAzZWYyZSwgMHhkN2ViYjc1ZiwgMHg5OTRkNWM5OCwgMHhhZjQzOWYxOCwgMHhjNTY5ZDYwMSwKKwkweGMzMTFiMzNlLCAweGNjNDY2Yjg1LCAweDE0Y2VkMTU0LCAweGY1MmJmNmMzLCAweGZiOTlhZjcyLCAweDViZWUyMjRkLAorCTB4MDg2ZjljNjIsIDB4Y2QzMWYzOGYsIDB4M2QyZGEyOGYsIDB4OGE1MjVhMTgsIDB4OTQ5NThlYzksIDB4OTZiZWRjNTUsCisJMHhjMDZlZWQ1YywgMHgxNzZiOWFjYiwgMHg4ODc3MjhiOCwgMHhjNWVhM2Q4ZCwgMHgxNzY0ZGE3YSwgMHhmY2MzYWZjNSwKKwkweGI5ODE3YWM5LCAweGE1NmZiMDA1LCAweDhjMzk2ZjZiLCAweDg0Nzk4ZGZlLCAweGE1Yzk2MDI5LCAweGFiOTYxOGYyLAorCTB4NTlhNGI4YjUsIDB4OGY3ZTBkOTUsIDB4ZGJhYzYzOTIsIDB4NDViYWM2OWMsIDB4MzhjYWNmZWIsIDB4ZTYyNGQ2ZmMsCisJMHgzOGI0ZjhjNywgMHg3OThhYmY3MiwgMHg4OTE4ZTI2ZCwgMHhiMWI3NTAwOSwgMHgxN2ZhMWYyNiwgMHhmN2UzMjQ5NiwKKwkweDFlYzAzMTFiLCAweDVhYmRjZjEyLCAweGUxZjZmNjNjLCAweDFiYmI2YzcxLCAweDQ0ZDIzOGYxLCAweDJlNGE2YjcxLAorCTB4ZmNiOGJjMjUsIDB4OGQ5ZTc4NmIsIDB4NTVkNzg4ZDUsIDB4MDk0Zjg4ZWQsIDB4N2Y2ZTVmZmQsIDB4MzRjY2RmOTEsCisJMHhiYWQyNTk3ZiwgMHhkYzk4NDY5MCwgMHhjZDNiNjMzNiwgMHg5ZDJjYmU0ZiwgMHhjYmQyNWQzOCwgMHgzMzJkM2EzNSwKKwkweDQzYTc0NWQwLCAweGU4MThmYTA0LCAweGRiZjllM2EyLCAweDJlOWMyN2QyLCAweDZmZGZmOGUxLCAweDA3ZmUxMjc2LAorCTB4OTc0ZTk3YTIsIDB4NTBjZGM1MzQsIDB4YmY5YWNkNWUsIDB4NDlmZDE1MzAsIDB4MTg3OWE3YWMsIDB4ZmU2YjMzZWQsCisJMHg2NmVmMTQ4MiwgMHhlYTkzYTQzZSwgMHhmNDJmNDg2MiwgMHhiN2UwMDJkYiwgMHhmM2ZiN2VmZCwgMHg3YWVhMjcxNCwKKwkweDA4MWRkOGU5LCAweDQ1NmZkOTRmLCAweDc1ZmMwNTY2LCAweDAwYjNiNzZmLCAweDY1ZjkyZjdlLCAweDViNGI0M2Y0LAorCTB4MzNmYjhhNDUsIDB4NTc3NzkwMjksIDB4NmVhZmJlYzgsIDB4Y2FmZDk3ZjcsIDB4ZGQyOWYzNGUsIDB4MDZkZmYxNjksCisJMHhmYWVlOTdkZiwgMHhiMGVjOTcyNCwgMHhkN2U0YmQ5NSwgMHgzODEyNWVmOCwgMHhiOTFkN2RkZCwgMHgyYTViYWZiOCwKKwkweDljMjNmZjcxLCAweDllNjU2MjVmLCAweDNiYjlkMDI3LCAweDZkYzYwZTdhLCAweGRmM2M2ZDg0LCAweDFlZTViNGI2LAorCTB4N2Y5MGM1YjMsIDB4OTFkYmQ2NjYsIDB4MjhiZGYwNWUsIDB4YzIxM2JlNTAsIDB4YTllNzlhMTcsIDB4MmY5ZDFkZmIsCisJMHgzNmJlMWMwYSwgMHg3NmYzMWZiMywgMHhlOGVkYjc0YiwgMHhlOTUzZjhjNiwgMHhjMzBiOGI1MSwgMHhiZWRiNTVkMiwKKwkweDI5OGRmZGEwLCAweGQxZDk3YWJmLCAweDY4YjZmZTQxLCAweGYzZjQzZjg4LCAweGM0ODliN2ZiLCAweDE1YWQ5NTFmLAorCTB4OWQ0MDg3ZTQsIDB4MjViMmEyZjgsIDB4NzJlYmZjNzIsIDB4YWZkOTY5ZmUsIDB4MDFmMmVlZjYsIDB4ZmQ3ZWNiMGEsCisJMHg1YmUzMDM4MiwgMHgzYWI3ZGJhNywgMHg3NmRmZmZjOCwgMHgzZjViYjhlOSwgMHg5MWU1YmYzZiwgMHhhN2Y5ZmE0YiwKKwkweGJmZTAxZmYxLCAweGM1ODcyMGRjLCAweDIyMGRiNjQ5LCAweGNiZTAwNDdmLCAweGFkZWY5NDhiLCAweGNiZDk1YmYzLAorCTB4MzhjMzlmNjcsIDB4Y2ZjZWU3NzQsIDB4Y2I3ODQzOWYsIDB4ZTdjYmZiZmYsIDB4YWY2MDlmZDAsIDB4ODhhZGQ0ZGIsCisJMHhhNWRlOTc5NywgMHhkZGZlOWUzOCwgMHg5ZGM3OTkyYywgMHg4MTdjNWZiYiwgMHgxZmRkOWZlMiwgMHg3ZjAxZGY4MCwKKwkweDRhOWVmN2JhLCAweDdiYjI3ZjQ3LCAweDE4ODlkN2M3LCAweDc3YmU1OTJmLCAweGVmOWM2MGRhLCAweDBjYTc1N2YyLAorCTB4ODhmNDExNjYsIDB4ZmFkZjIyNWUsIDB4MWFmZTIwYWYsIDB4YWQwM2FmNGUsIDB4ZTllZmM4MDcsIDB4ZGZhMzdhMDIsCisJMHg2OWI3MTdkOSwgMHgzMDcxZTBhOSwgMHhkOWFmMTZhNywgMHhkZGNlMzkxZSwgMHg3YWQzM2UyZiwgMHg4ZDM3OWRkNywKKwkweDcyZWNkMmM3LCAweGQzODgyYmIyLCAweDFjNzQwM2JjLCAweGRiZjQwNTdkLCAweDdmZTY4OGZlLCAweDE3NWZhNjQ2LAorCTB4YjRlODAzZmUsIDB4Njc3ZThjMmMsIDB4ZmNmZDE3NWIsIDB4M2FkNzdjMTksIDB4NGQzOGMwNjgsIDB4YTZmMDBhZTAsCisJMHgyN2JmZDFjNywgMHhhMzIyN2ZiYiwgMHgyNWZjZWQ3YywgMHg2ZTkwYzVjNSwgMHhiYjQ0YzFiNywgMHg4ZTliM2U1ZiwKKwkweDlhOWYwZmZiLCAweGU3ZTdlZjdiLCAweGM2MmEyYzMyLCAweGJlZjc0YTFiLCAweGZkZDNmMjRmLCAweDUzOGExMWVhLAorCTB4ZGQ5ZTJkMzMsIDB4ZjBmZWZhY2QsIDB4NTM5NmEzZjgsIDB4Y2VjNWI1NTksIDB4ZmUxYTNiZTMsIDB4NzRlM2ZlMzEsCisJMHhjZTJkNzNkMCwgMHg4ZjU4ZjljMywgMHhmNzE0MGNmZiwgMHhkZTc5OTU2OSwgMHhhZmRmMWU4OCwgMHgxNmExZjJkOCwKKwkweDRiZDIwOTRmLCAweDNhNzQ4NDk4LCAweDA4ZmRjOTc2LCAweGUyMmEwZjFkLCAweDFjNjg2MjYxLCAweGFkN2M3MjMzLAorCTB4ZDFhZGRlMmYsIDB4ZjE4N2U5MGIsIDB4MjUzOGJlY2IsIDB4NmUzMGQzZDQsIDB4NjdkZTE3ZTUsIDB4Zjc0MWY0MTEsCisJMHhlY2ZmMWU2NiwgMHhhM2NlNDczNiwgMHhiZjlhZTNkMiwgMHhmZjUzOTcwYSwgMHgyZjMzYzU5NSwgMHhjNWI3ZmYwNywKKwkweDUyNzY1ZjhmLCAweGVhNzhlMWJmLCAweDhmNTkxMGJjLCAweDc1ZjMyZGJmLCAweGM1ZjdhYWZmLCAweGJlNDMwNWNhLAorCTB4N2JjOWI5NDEsIDB4YTJiMWY5MDQsIDB4Y2ZjYzk4ZjUsIDB4NTJmM2YwYTUsIDB4YjUzYjdjZmEsIDB4OTdjZWQxYmMsCisJMHhhZDc3OGE0NCwgMHg3YTQwMzk2YSwgMHhlODVmNWMzYywgMHhmMGUxYTZmYiwgMHhhZGUwZDA5ZSwgMHg0NGViZTM2YywKKwkweDVmYmI0ZWU3LCAweGY3M2E3ZTgxLCAweGFlN2UyNmVmLCAweGUyOGM3ZWRjLCAweGZkYjY4NzZkLCAweDU5MDhlZTVhLAorCTB4ZjA5ZDcxNTcsIDB4ZjlkZmMwODcsIDB4MWU1Y2JlY2EsIDB4ZWM3OWU1YjcsIDB4ZDE5Y2UzZTEsIDB4OWVkNTYxZjQsCisJMHg2ZDU0ZTNjOCwgMHg0ZTMwYzJmZiwgMHhlNjQ1YWY5OSwgMHhjN2E1ZmRlYiwgMHhlZmI5MmQzYiwgMHhiNzRlZmVjMSwKKwkweDc5ZTYxOTliLCAweGE3MTE2ZTllLCAweGY1MTczYTQ3LCAweGVhNmViNmFlLCAweGJkNzA3ZWU3LCAweDIzZmQ3Y2E0LAorCTB4ZjhjYzVjZmMsIDB4MWYyOGEzYjcsIDB4ZTk5MWY5N2UsIDB4NjNjNGM2MWYsIDB4ZmU4Nzg0MDksIDB4OWYzOTZiNWEsCisJMHg5ZGM0ZmViNiwgMHgzZDZlZjQ4YSwgMHhlYjg4YWY3MiwgMHg2ZmM0MmVkNCwgMHhmNzlmOWQ4OCwgMHgzYjE0ZjU0ZSwKKwkweDhmYmM4NWU4LCAweDVkOTFlMzNjLCAweGM0Y2RmNWMzLCAweGZjMDMyNmEzLCAweDVjNjBjZTMwLCAweDFmYTFlYTA3LAorCTB4Zjk4MmE3M2MsIDB4ZTg4ZjA4NmUsIDB4ZjA4ZTljMjgsIDB4YjU0OWFhODgsIDB4NjFlN2ZkMDksIDB4NWU3NDNjNTYsCisJMHhhY2Q3ZWY0MCwgMHhiMDAzY2YxYSwgMHhkODljZTMwYiwgMHgxZTRjZDI0ZiwgMHg4YmJlNGM0NywgMHgzY2ZkM2U5NywKKwkweGJmOTQ3MTRlLCAweGEwNTllNjBlLCAweGYwMmNkMzc4LCAweDdkN2Q5MjdkLCAweGU3ODY0MWM2LCAweGRlNTEyNmJmLAorCTB4NzhjNTk2NzYsIDB4NTU0YmFjNmUsIDB4ZGZkMDI2N2MsIDB4NTk2Y2U0Y2YsIDB4Zjk0OWQ5MzcsIDB4NDI1OGQ3MDcsCisJMHgyMDU4MGZmMywgMHg2ZjUxZjkxNywgMHg1ODdkZWZkNywgMHg3ZTFhNDI3ZSwgMHgxYTg4ZmQwMiwgMHg3ZTVhNTk3YywKKwkweDIxZDYxMGMyLCAweGM5YmQ3ZGEwLCAweDBlMjdjZmNlLCAweGY4NGRlMjU1LCAweGJkOWFmM2ZkLCAweGVjM2Y5ZmE5LAorCTB4ZWMzMTVlNzcsIDB4Y2VlNWUyOWMsIDB4Yzk0ZmM2MjcsIDB4MDVkNDNhNWYsIDB4Y2Y3YWI0ZmMsIDB4OGY1ZmNjMTQsCisJMHg0NzdmMjdiZiwgMHgxMjc5OGFhYSwgMHhlNzgyOWU3ZiwgMHhjODVmZTI1NywgMHhmNTBjOTMxZiwgMHg5YzFmYWIxMywKKwkweGM4ZmZmNTRhLCAweGY1MGU5MzFmLCAweDhkZmYxYTZmLCAweGNhMDRjYmQ3LCAweDNkNTgyZDU3LCAweGViZjIyYTdhLAorCTB4MmNmOWNiNTUsIDB4Y2U1MTg4YzAsIDB4NzViYzQwZWYsIDB4N2JiYTNlNzksIDB4MWZmMzEzOTEsIDB4NWY4ZTY1N2EsCisJMHg0Mzc2YzFlNiwgMHhhNWJjNzEyNiwgMHg0MGVkMWYyOSwgMHg3NTM1MGQzYywgMHhmZTdmMjJkNCwgMHhiMTU3ZWY3YywKKwkweDRjOWMxN2E4LCAweGFjYThmYzI1LCAweGMxZmE0NTVlLCAweDJmMTc0OWEzLCAweDllMTc0NzkxLCAweDkzZWJhNjRmLAorCTB4MDFmNzhhY2QsIDB4Zjk5MWUzODQsIDB4ZTA1Y2U4MjMsIDB4YWQzMzI1MzMsIDB4OThjZjVmM2MsIDB4NzhkNGMwYzcsCisJMHg0NjkxNjdhMiwgMHgxYWQzODQ0ZiwgMHg1OGJmOGY5MiwgMHg1Y2ZjYzlmNCwgMHhhZmE2OTM0YywgMHg5ZTM4YWFhNiwKKwkweDJmMTcyYmUwLCAweGUxZWRmNzVlLCAweDRiZTc1MDdhLCAweGM4Njk1Y2VkLCAweDEwODdjNjc5LCAweDdkZTI5ZjVlLAorCTB4ZmZkMDkyYzgsIDB4MTYxZGUzM2MsIDB4OWY3YzBhY2YsIDB4MWQzZTdjNWMsIDB4OWYzZjViZjksIDB4OTFjZTdlMTgsCisJMHg0OGE2YmQ0OSwgMHg3NmIzNWZmNiwgMHg3ODIwNzFjZSwgMHgyYWVmNTYzZCwgMHg3N2YzMzcxYywgMHg0MTg3OWRjZSwKKwkweGM5MTc0NmJlLCAweDFjY2Q0YzJlLCAweDgyN2M2MmJkLCAweDUyMTVjZmM0LCAweDQ2OTU0MzllLCAweDk3MTMyNGJmLAorCTB4YTMxMGY2NDMsIDB4OGIxZWQ2N2QsIDB4YjliZjQ2ZTAsIDB4ZjQ5NTQxZTcsIDB4NmRkMTVhNzcsIDB4NDRmNTU3ZTQsCisJMHgzZTYwYjQ2NywgMHhmY2MzY2Y1MCwgMHg0YzY2Mjk1YywgMHhkOTBkMWNhMywgMHhiZjQwMTMxMywgMHg1Y2UwZTQwZiwKKwkweDMzOWMxYzk4LCAweDcxYzY3M2FlLCAweGRiM2EyZTdiLCAweDU1M2ZhODNhLCAweGIwMGMwZmViLCAweGUwYjllMGM0LAorCTB4ZTVlYjkxMWUsIDB4YzEyNzFhOWUsIDB4ZjZmOTg0MzEsIDB4YTU3ZWZhZTEsIDB4MThiNTZkZTMsIDB4ZGUwMmZkY2YsCisJMHhlOGJjNDA1ZiwgMHhjMGU1ZmY3OCwgMHhhMzQ1N2JmNCwgMHhlODkxMmJkZiwgMHg3NGZlN2UxNywgMHg2YmZiYzViZSwKKwkweGY4YWE3ZjZjLCAweDE1NzQyYWQwLCAweDg2OWRjZmMzLCAweDZhNGFiNWQzLCAweDc4YWU4OGRhLCAweDY4MmY5ZWUyLAorCTB4MzZlOWQxOWQsIDB4NDEyYjg1N2EsIDB4ZTNhMDY0MWEsIDB4ZThlZmQ4ZWIsIDB4MTA5ODVmM2QsIDB4NGY3ZTlkNWUsCisJMHhmZGVmOTAwZiwgMHhjZjVmMGIwNywgMHg5YzRiYzdjMiwgMHg4ZGUyOTFkMywgMHgxMDYwZmViNCwgMHhjZjU4MjEyZSwKKwkweGY4ZDFlNmI1LCAweGRlM2M0ZDgzLCAweDEwYmRiZmQzLCAweDdmZDAzZTcxLCAweDMwZjJhNWU2LCAweDJmZGU1NTczLAorCTB4NTBmZGZmZTAsIDB4ZjExMGZmYmUsIDB4ZmUyMjIyM2YsIDB4MDNiYzQ2M2YsIDB4ZjZjNjNmZmUsIDB4NGZmZjgwNTcsCisJMHhkZDdmODUyZSwgMHhmNGQzMmZhZSwgMHgyYmVlMTk0MiwgMHhjNWZjZmYwMSwgMHgxMzMxMzMzOSwgMHgxNTE0MmRjNiwKKwkweDViMjVmZmUyLCAweGQyMWY2ZDQ1LCAweDYyNzI1YjdkLCAweGI5MmM4ZjUwLCAweDE5OWY3YWJlLCAweGIzYzk3MGY4LAorCTB4OTE2OWYxMDIsIDB4NzNmZDVlNzYsIDB4Nzg0YjVjZWQsIDB4MWNmMTVmNWUsIDB4Y2JjOWU5MWYsIDB4NDlmOWY3ZTcsCisJMHgzMzZkOTUwZiwgMHhlNDEwYmYzZSwgMHhjN2NhNzRkYiwgMHg5M2YzZjFmNSwgMHhlMTE3MjZhMiwgMHg2OGEzM2ZmOCwKKwkweGQ2MjhhMmZhLCAweDBlOWMyZWQwLCAweDg2NGRhYTQzLCAweDI5ZTRmMDNjLCAweDlmOTBmZDdkLCAweGJlNzI2NDk3LAorCTB4M2ZiNWYxNGYsIDB4MDdjNjE5OTgsIDB4ZjhmYzUyZGMsIDB4YmM2M2UyMDAsIDB4Y2RmYjE1MzAsIDB4ZWY1NmU0ZDcsCisJMHhlMzBhZTg2ZiwgMHgzM2UxOWYzYSwgMHg2YWNiZmI5ZSwgMHgxYmZiOWUzNCwgMHg2ODYyOTRkZSwgMHg0Yzg2Y2Q3ZiwKKwkweGZlOTFmYmMzLCAweGFmZWYwZDZiLCAweDUwZDYzNmRiLCAweDgzNzJkNTFmLCAweGI2ZThmZGExLCAweDRjN2Q0MzAyLAorCTB4ZmI0MzE2ZTAsIDB4MWE2Nzg3NzEsIDB4ZWZkYTEzZWEsIDB4Nzg5ZmI0MzUsIDB4ZmRlMTgxNzQsIDB4ODZhNTFkZjUsCisJMHhiYTdlMzdmNywgMHhhOWJmNTBjYywgMHhlZDBkNWZmNywgMHg1ZWI4OGIwMywgMHg5NDkzNWZkYywgMHg3NDBhZTc4NiwKKwkweDJhNWZlY2JjLCAweGJlN2M1NDliLCAweGU2YTRkYjM0LCAweDc0NGYzZTg2LCAweGNjYjE3MzNiLCAweDM1N2ZhMzczLAorCTB4YjE0Y2JjOTAsIDB4YWU4NWE3MjYsIDB4NmNjY2Y5Y2YsIDB4YWM1MzZiZDAsIDB4NTU4MTdhYzYsIDB4ZTA3NDk3ZTMsCisJMHhjZGZlMjAxNywgMHhhNTVjYTM1NiwgMHgwMjZiY2Y1NiwgMHgyY2E1OWJiMywgMHhkMmY5NDYxOSwgMHg1OGI3NWYyMCwKKwkweGM1YmI3ZWI5LCAweGVkZmE2NTdhLCAweGFhN2Y2YzRlLCAweGVjZTc0MDMyLCAweDQ0NGJlNWMzLCAweGQyYTJjYWY5LAorCTB4Y2NhOWZiNDcsIDB4MWI5NmY5NDUsIDB4NGQzZTQ2NmQsIDB4Y2NhZjQwMWEsIDB4YzNjZjFhYjMsIDB4OWI2MWVhOGIsCisJMHhmZDEzOTA2NCwgMHhkMGE4ZjlmOSwgMHhkYmUyYzJlNywgMHhhMDY3NmYyOCwgMHgwNWE0ZTU3ZSwgMHg3ZDAxNmViNywKKwkweGE5N2IyNzI5LCAweDlhYWY5ZmQ0LCAweDk3OTg4YTYzLCAweDNiZjU5MGY3LCAweGZhMWI0OWZhLCAweDIxMGY0ZmQ5LAorCTB4ZGU5MmJiN2UsIDB4Y2NmMzBhN2UsIDB4OTJmNWU3MmEsIDB4MzE2Yzk0YmYsIDB4Nzc1ODI1ZTIsIDB4NTQ3OWU2MGQsCisJMHg1MDhlN2U0ZSwgMHg1NGRjZmZlNSwgMHhhZTJiNzhkMywgMHgxNzNjZmFmNywgMHgxMTMzMzA3ZCwgMHgwNmQyMDNmMywKKwkweGQ1NWU5ZmYwLCAweDRkNWNmMWU2LCAweGMzNDVhZGM5LCAweDE0ZDUzZmIwLCAweDdhNDViZjdhLCAweGZkMTBhYWEwLAorCTB4MWU1YWExOTgsIDB4YzhhNjUzZjQsIDB4ZDUzZjRhZjksIDB4MGE4YzE5ZmEsIDB4NTUwM2VkMTQsIDB4YWJhMGZiMjEsCisJMHgwNDg3MjNmOCwgMHg5Mzc3ZjhmMywgMHgxN2M4YTdmNywgMHhlN2I3NDYwYiwgMHg2ZWNiNzNmMSwgMHhhYmIyNGNkNywKKwkweGQ3NWY4MjU0LCAweGU3OGFlOTQzLCAweGU5MmJkNDI5LCAweDY2NzMxMjQ5LCAweGYwNjc4N2Y0LCAweDA2NjM2ZjNjLAorCTB4MzM4ZmFmYmMsIDB4ZjdhYTE0YjksIDB4ZTU5ZTM4MGEsIDB4ODIwZDhjYzcsIDB4NWJmZmVhZjEsIDB4ZjdlYWY4MjQsCisJMHgzY2Y5NGY1ZiwgMHhlMjlhYTUxNiwgMHg5OTNjZmFhNywgMHhjN2FmZGZiNiwgMHhjZDI2Y2Y4YiwgMHhkNjNjNDE4YSwKKwkweDZlNzdkYjVmLCAweGFjZmQ2MTg3LCAweDdlYzc2ZGUyLCAweGQzMzdhZWNmLCAweDgyMDVmNWI4LCAweDZmM2ViZGUxLAorCTB4NzQxZGMzNjksIDB4ZTE1ZDJiMWUsIDB4Nzk4NjJlZjMsIDB4MzQ5NmRjMjMsIDB4NzNmZDU3MGUsIDB4YjgyMzRiMDIsCisJMHg0M2QyZjdmZSwgMHg4YWVjYmZlOCwgMHgwZGJjNjE3NiwgMHhlODg5YjFmMCwgMHg2NzM4Y2VlZCwgMHhmMzBmMjdkMiwKKwkweDM0YTQxOGFhLCAweDI1ZmIyMWFmLCAweDk2ZmExZmIyLCAweDRjZGJhZjk1LCAweGY2ODg5NTlkLCAweDQ2MzVmMjU0LAorCTB4NjZmNWM1YjgsIDB4YzUxNzA3ZjIsIDB4ZTBhZjk0MmEsIDB4ZDFhMTU5YWYsIDB4NTVlZjM4ZDUsIDB4OWNlZjMzNDksCisJMHhiZGQ0ZjAwYiwgMHhmZDRjMzIyMywgMHgyZDM0NzY3MSwgMHgxNWRmMDQzZCwgMHhmY2JiNDZiNywgMHhlZjc4ZmVjZSwKKwkweDAxMzg3MjcyLCAweDZlMTBiN2VlLCAweGNkMjE0MzcxLCAweGRjMjFkYTliLCAweDMzZDgxNzNmLCAweGRlNzdjODE5LAorCTB4MTRmZjQ0ZTksIDB4OTc3ZGMzMTMsIDB4ZDNmZmY4NzAsIDB4ZWZjNGUzY2EsIDB4ODc5YTU1NTgsIDB4ZWI3YzU0OWMsCisJMHgxNjU4NDE5NiwgMHhiNTFkZGM5MSwgMHg3ZmNlYjgwZSwgMHhmY2ViZTU2OCwgMHhlYjA4ZDY4NywgMHhmZGVlZTVmYywKKwkweDdlZDM5ZjI4LCAweDZkZDE0YjA4LCAweGVhZGFlY2QyLCAweDE5N2I1MGVjLCAweGVjNDlkNmY0LCAweDMxOGJhZjU3LAorCTB4N2VjNWNlM2YsIDB4M2NjYmI2MDcsIDB4OTcxOWQ5NGQsIDB4MWVkMGNiYjcsIDB4ZWRkM2ZlNDMsIDB4OGQ1YWJmYjEsCisJMHg5ZTg4NjQ3NiwgMHhiM2QzNGFmZCwgMHg5ZWExNWQ1ZiwgMHg0ZWVkODBiZCwgMHg2ODg4MWJkZCwgMHg5MWM4MjRjNywKKwkweDFiMzhkY2Y1LCAweDJhOTU3ZmM3LCAweDFiZTNjYTMzLCAweDZkOWY5ZTIwLCAweDBlMWY2YzhiLCAweGNlNWQwZWI0LAorCTB4ZDY4Y2M4Y2YsIDB4ZWZkNzU0ZjksIDB4YzU2MGRmZGMsIDB4OWMyZmVkMzIsIDB4MjQ3ZmUwZDksIDB4ZTMyOWY3MWIsCisJMHhlZGRlNTE4NywgMHhhZWE0ZmQ0MCwgMHhmMTBkODNmOCwgMHg4ODZkZTNhYiwgMHhjMDRmODhjZCwgMHhmOWM2ZDNhMywKKwkweDY0OGI2OWM0LCAweDFlMDM5NjBmLCAweDBlM2MwNjRkLCAweGQ5MDNmNmM3LCAweGRmYWQ1NzgzLCAweDZlZTc4YzRiLAorCTB4ODM3YzM1YmEsIDB4YmM3MTk3OWUsIDB4Y2UzZWJiYWUsIDB4ZTU0NWI4YzMsIDB4ZTdhNDczZWMsIDB4Mzk5YzdhYWYsCisJMHhmNzQ0NzVjNiwgMHgwMTFjNjFiZiwgMHhkNzdkZGZlNywgMHhiNzcxNmI3ZiwgMHhkNTE3OGEwZSwgMHgwYzRkN2FiZCwKKwkweDBhMmFhN2M2LCAweDk1ODZmNGZhLCAweGE0OTk4NWRiLCAweDU5NzZiYjA3LCAweDU3NjcwOGRjLCAweGVjZTdjZjFjLAorCTB4MTBmMTM1ZGEsIDB4YWYzZTM5YzYsIDB4ODUyOTljMzksIDB4YWY1ZDJkZDgsIDB4NDMzM2M5MWMsIDB4OGYzYjVkN2YsCisJMHgyMDk0NDllNCwgMHhkMTdlMjdlNywgMHhmYzVjNTdkZiwgMHgxMjhmM2NjZiwgMHhjN2QwMjczYywgMHgwZWJlNTY2ZiwKKwkweGY4ZjFiN2FkLCAweGM3OThkM2M5LCAweGY3YjE5YTM2LCAweGZhZjk2M2EzLCAweDFjN2E2ODkxLCAweGUzYmY0NzlmLAorCTB4N2Y3ZWExZjMsIDB4YzdlNTcwNTQsIDB4ZGQyNjJiMDAsIDB4YWI2NjRjNTUsIDB4MDBhNjhkZTUsIDB4NmUwYThmOTYsCisJMHhiZTU1ZTMxMSwgMHg0ZDNjZmM5MSwgMHg5MTFiMTY1MiwgMHg0NzI4ZmQwMSwgMHg4ZTA4MDNkYiwgMHg4ZGQ3YTNhMywKKwkweGE3ZWEyOWRiLCAweDBiMmMzZWVhLCAweGM0MDJlZjE0LCAweDJiYWY1YzdiLCAweDM3ZmM3ZDA5LCAweGExYjM4ZDg3LAorCTB4ZTE0ZDIxNWYsIDB4N2U3N2I3N2EsIDB4MjllZjFmOTQsIDB4OGZiOTM0NGEsIDB4Njc2N2FhODAsIDB4YzU4YzJmMGUsCisJMHhlNjhiN2ZmNywgMHhkMjU4ZjJmMiwgMHg4ZTVjMjY4OSwgMHgzOGEwMzk3MCwgMHg1YTY2OWJkNCwgMHg3MTBkOTZkZiwKKwkweGVmODIyZjI3LCAweGU3ODg0ZDk3LCAweDk4MDVlOTdlLCAweDk2MzljODdkLCAweDA5NjdlM2M3LCAweDAwYjkwNzE0LAorCTB4MTRlNzgxNzgsIDB4YjUzZTAyZmEsIDB4MzMxN2NjNGIsIDB4ODliMGY0MTYsIDB4MGJmMDU1YjksIDB4ZWU0MjkzZWMsCisJMHg2OGZmYzFkOSwgMHg0ZDYwZmM3NiwgMHg0ZDM4ZjZmZiwgMHg0NWUwMzMzZSwgMHhkNWRiMTk3NiwgMHg1YzBjZWUwOSwKKwkweGZjODE3NzRmLCAweGI0ZmEwMzBkLCAweDdjYTk1OGQ1LCAweDE4NGQ0NmFkLCAweGE3YjhmMjA2LCAweGFmZWE4OTI2LAorCTB4MGNhOTM4ZDcsIDB4ZTdhMDhjZDQsIDB4NTQ1YzZiZmIsIDB4YTdiNTM2OGYsIDB4NTUyYzdhZDMsIDB4ZmU4NzliYWYsCisJMHgwYjEyZmRmNSwgMHhiYzIzYjdiZCwgMHg4ZTU2N2JjNCwgMHg5N2Y5Yzg4NywgMHgwMDkzZTYyZSwgMHgzZDM1MmZhZSwKKwkweDM4ZDZmYjUyLCAweGM2YTdhZmUyLCAweGZkMzFkNDAwLCAweDhhZDlmZmJmLCAweDA1NGQ2NDNmLCAweGEzZmE5ODNkLAorCTB4NDE1MzU5YzMsIDB4NzgxMjlmOGUsIDB4MTgxZTAyZmUsIDB4NTUyZTc0OGUsIDB4YjczMjlmMmYsIDB4ZjBhOWEyYzQsCisJMHg0ZGYzMWI2YiwgMHhjOGJjYzI0ZCwgMHg4ZTE1M2ZkZSwgMHhlOGY2Y2M2MSwgMHgxZDRlYTY5ZiwgMHhmZGM3ZjMwOSwKKwkweGY2YzYxNGZlLCAweGM3YWJkZWRhLCAweGZiYTlkODczLCAweDgxOGJhYjNmLCAweGZjNmRjOGY5LCAweDgyODk5ZjNlLAorCTB4N2Q0MDU2YTcsIDB4MGJmMzliMzMsIDB4OThiNTNjOTMsIDB4Mzc3M2Q5Y2YsIDB4YmVmZWUyNzMsIDB4MWI1ZWNlM2UsCisJMHhkYjc2MTNiNywgMHg1MTM5OWRiOCwgMHhlNmMxZmNlMCwgMHg0MTFlNWFjYSwgMHhiYWU4NmU2ZiwgMHhlZjNlZGUxMSwKKwkweDhmNzRkN2MwLCAweDJmYjc4YzBmLCAweDJmNWUzMGQ1LCAweGZhMDcxMWM1LCAweGQ3ZmY3NTJlLCAweGU5NWM4ZWI0LAorCTB4NDkxZjNkNzcsIDB4YzQ4NDdjZmMsIDB4ZTZiYTJiZjMsIDB4ZmRhNjZlMjYsIDB4YmExZjY4NzgsIDB4NDcyM2RhOGYsCisJMHhkMmRlZDdiNiwgMHhlZDA2ODFkNiwgMHg2NTlmYjdiZSwgMHhhNjgzNzJmMCwgMHhmNWM2MjQ1NywgMHgwNWQxNmJmZiwKKwkweDYxYjk0N2JmLCAweDVmZGEzOGRlLCAweDA5ZTJkM2FhLCAweGU1N2EzYTkzLCAweDJmN2U3NmY5LCAweDEzZDQzZTVjLAorCTB4M2MwNDc4NGUsIDB4ZDFhNWQ3MGYsIDB4MWU2MDU1MzMsIDB4NjA0OGZmY2MsIDB4MjgwMjg0MzMsIDB4ZGJjZjM2ZGQsCisJMHhjMmQyNGZkOCwgMHhkMTk3YmU0ZCwgMHg3MTY1ZDg1ZSwgMHhlM2EzZDlhMiwgMHhkOTAzZWVhYiwgMHg2MTIxZmE4YSwKKwkweDhmZGEzMWNmLCAweDY0M2ExM2FhLCAweDhmOTdmN2E0LCAweGNiNzE0ZDdjLCAweDMyNzU3MzNhLCAweDFiMTc2ZGQ1LAorCTB4YmRiNGZlYjAsIDB4OTlkNjIzN2EsIDB4NmZhOWViZWYsIDB4ZDYwYzNmMDAsIDB4MTNlM2UxY2UsIDB4OTBiYjYzZDQsCisJMHgzYjU4MjllOCwgMHg3ZTA2ZWY1NywgMHhmNWU2NjVkOCwgMHg0YjM5MWYyZiwgMHg1Y2NiYjFmYywgMHhlMThkOWYzZCwKKwkweGVmOTg3YWY1LCAweGFhNmY1OGFlLCAweDUyOTA1NDA5LCAweGUxZmQ2NWZiLCAweGI3YWViMDliLCAweDc3ZGE5MmZmLAorCTB4M2Y2ZTU0ZGIsIDB4YTQwY2RlMmEsIDB4ODU1ZDVmN2YsIDB4MmVhNDNkYmEsIDB4ZjJiMzNhZjEsIDB4YzU1ZjlmNTIsCisJMHg3ZjI5YWY4MSwgMHhlNzBmNzJiOCwgMHhjZTFiYzQ0NywgMHhjM2NkZWYxMywgMHg3YThjZTk3NSwgMHhhNGViNTFkNCwKKwkweGQ3MzY3M2I4LCAweDlmMDMwMWQ3LCAweGI3NTNlN2U5LCAweDJhMmNiYzk4LCAweDA4NWVjZjQ0LCAweGNlNDJmZjViLAorCTB4ODRhOGIxZDksIDB4MzhiNGZlOTAsIDB4YmIwMzNhNzYsIDB4NmYxODJiMzQsIDB4MmEyZTY0Y2QsIDB4OTUwZjMxODcsCisJMHhlZTk2ZGJkOSwgMHhiYjJkYjQ0NywgMHg3YTg5ZDVhZiwgMHhmYWQ3M2UyYiwgMHg2OGU4OTc4MCwgMHhkMDllMWZmNCwKKwkweGU4ZmFlMmY0LCAweDAxYTMxYmZjLCAweDc3ODJmNTllLCAweGYxN2E4ODhkLCAweGU3NGFiMzY1LCAweGIyMjQzYTJmLAorCTB4MzViNTNiMzcsIDB4NTMzMGFkOGMsIDB4ZjczYjVjYmQsIDB4NWRlOTVlNmQsIDB4ZWVmNTEyMzMsIDB4MTlhYjkzMjIsCisJMHg0ZjBjYjNkNywgMHgyZmJlMTliZSwgMHhhYWUxOWRkYiwgMHhlN2JjYzE2NSwgMHhjNDk2ZDhiMiwgMHhlZjMwNGFiMSwKKwkweGFhM2ZhZjU5LCAweGI1NDZkOWYxLCAweGQyZjc4NmM5LCAweDk1NDNmYmU4LCAweDcxZDJlYjZkLCAweDdkYjNmYjdmLAorCTB4YmQzYzkwMWYsIDB4N2M0MTk1MWYsIDB4NDQ3YWQxNWMsIDB4YmY2OWRhZjYsIDB4MjlmM2M2NGMsIDB4ZDZmYWQ5OWYsCisJMHhiZWY3NWEzZiwgMHgwYjc0MTk2YywgMHhlYjJmZjVlYSwgMHg3OWI4NzQ0ZCwgMHgwNmY0M2QyMCwgMHgzODM3M2ZlOCwKKwkweGFjNmE4N2M4LCAweDVkYzJmZTU0LCAweGRlOWEyZDdkLCAweGQzMjk1MTA1LCAweGJmYjQ2MDZjLCAweDkxNTZlOTkwLAorCTB4YjlhZGU2OGYsIDB4N2MwYWMxYTYsIDB4OGVhYzgyZjQsIDB4MTc5YjNlNDQsIDB4NWI3YzRiOTUsIDB4YmU3MjJiMTYsCisJMHhkZDA3Yjk2NCwgMHgwZGNmYjY5MiwgMHg2NTM1ZDRmNSwgMHgzYzUzYmVkMywgMHg2ZjY4YzhiZSwgMHg4ODUyNmQ1NCwKKwkweGM4MGVjMDBmLCAweGRjYTgzZTQ3LCAweDdlZTFmMjYwLCAweDRlZGFjOWEyLCAweDQ1ZTc3ZGU3LCAweDM2OGZjZDMxLAorCTB4YWY1YzRmOWUsIDB4NmNkZjNiZTksIDB4ZGNiZGRmMWUsIDB4ZjM5MmM1MzksIDB4NTExZTc0NTEsIDB4ZTUxZmJmYWYsCisJMHg5MTI4YmUyNCwgMHg1NWZmYjQ3YywgMHhlNzQxZGU3MiwgMHgzOGZiYmYxOCwgMHhjODc5YzM1NiwgMHgwNDI4ZTNmZSwKKwkweDc5NGUzZTg3LCAweDU3ZDIxYzcwLCAweDI3ZWMxZmU1LCAweDZiOGRmODNmLCAweDRkZDY3Yjc1LCAweDNiZTVhYzcxLAorCTB4OWIwNWZjYjQsIDB4ZjNmNjMwN2IsIDB4MTgyN2E2YjQsIDB4Nzc4MGIxZmEsIDB4ZWVhZmEzMjksIDB4MWNjZjQwOTMsCisJMHhmOTMzZDNlYywgMHg5MGQzNTMwZCwgMHg2Y2Y3YzFiZSwgMHhiOTBmNDE5MiwgMHhjMWQzYTAyNSwgMHhmYmVlYWQyOCwKKwkweDUxZjZlNDdlLCAweGY1MzNlZDYxLCAweGE5ODZjY2ZhLCAweGYzYzNmYjkzLCAweGI3NTgyZGI0LCAweDFiZTk3YjQyLAorCTB4ZTExZDVmNGIsIDB4YTFmNTczYTMsIDB4ZTNlOWM1ZmQsIDB4ZTlmZDRiZGYsIDB4YjUxYTk3ZmMsIDB4ZjgwZmEwZjAsCisJMHgyN2FjNjBlZiwgMHg3YTdjZjMxZiwgMHhjYTI3MzM2NywgMHg4ZDQ5NjZlMSwgMHgyMWQwODU3MiwgMHgzN2FmOGEzNSwKKwkweDM1YWZlNzI1LCAweGY3ODgzZmUwLCAweDRmZmQwMzVjLCAweGZiMGQzOGQ1LCAweDk2OGI4YjhhLCAweDU0OTg3OWQxLAorCTB4YzdjYzVlOWQsIDB4Y2E2ZDc3Y2YsIDB4ZmUyN2VjMzIsIDB4MTZhZTM4N2YsIDB4NzAwMGY3MGUsIDB4YzMwN2ZkNGMsCisJMHg1ZTMwYzIzMSwgMHgwMzFjOGUxMCwgMHg4NzBiNTc3YywgMHg3YTZiM2IxOCwgMHg4ZjZiZGEwNiwgMHgyODBmMjg5OCwKKwkweDY2YjNlNGQxLCAweDZmZjY1ZGEyLCAweDBjYTc4YTI2LCAweDg4MGYzYzY3LCAweGZiMGRlMzI5LCAweDJjN2I5OWI0LAorCTB4OWVmZTMxZjMsIDB4ZDJjM2IxMjksIDB4YjcyNzk0NTgsIDB4YTlkNzE2YjMsIDB4NWY2NDQ4OWYsIDB4MzlhYjczYzEsCisJMHg3MjZlODcwZSwgMHgyMDRmZmRlMywgMHg2NjVmZDQ5NSwgMHgxZjgyYjdiOSwgMHg4MmZiZTZmMiwgMHg3MGQzM2VmYSwKKwkweGJkZTNlNTk1LCAweGU3YTM5YmEwLCAweGZiOGQxOGRmLCAweGFhMWU3MzY2LCAweGU3OTgzY2MyLCAweDM1MmZmMTk1LAorCTB4OTJiYzgzMzAsIDB4MmMyMGQyMWQsIDB4YWJlMzNiMjUsIDB4NzAxYjg3YTgsIDB4MTQ3MDc2YmYsIDB4ZjYwNDViYjcsCisJMHhlNGUxYzM3MCwgMHhiY2I5ZWY0OCwgMHhmMGYzNWI5ZSwgMHgzNDFiOGMzNCwgMHg4YjVlNzRhZiwgMHhjZGIzNTNmZSwKKwkweGYzMWZiMmRmLCAweGU4NTMxZTc2LCAweDQ3YWNkNmRlLCAweDUwOTk4ZGZkLCAweDY4OTlkNzE3LCAweGZkNjMxNGJkLAorCTB4ZGY3MTlhZGIsIDB4MTc2Y2M5ZmQsIDB4NjhjZDExZGEsIDB4NDdmYjYwYmYsIDB4NTY2YmYyMTQsIDB4ZjBkMzM4ZDUsCisJMHg2ZDNhOTI3ZSwgMHg3NmIyZDgxZCwgMHhjMTc5OGFiMiwgMHg4NzE0OGFmNSwgMHg3MzJhZGRlYiwgMHg3NzNjNWNmNSwKKwkweDhkZDFlZTMxLCAweDUxZWJkNjBkLCAweDA3MWFiOThmLCAweDk0OWViY2E5LCAweDMzOWFlYjhjLCAweDdiNDYzYWQzLAorCTB4YWU2OGM4MGYsIDB4YjFhOGE2NzUsIDB4NmZmMGZhYzEsIDB4M2QyMGZhYzAsIDB4OWRjMWIxYjMsIDB4MmIyZWZkODYsCisJMHg4ODNiZmFkNSwgMHhlMjE3OGE3MSwgMHhlZjY4YmMzNCwgMHhkMmY0ZmIzMywgMHhjYmNjMDZjNiwgMHhmNTgzNmIxMiwKKwkweGFkZGYzMGE5LCAweDM1M2Q3MmNmLCAweGZiNDdmYTE4LCAweGMzZTNlNjBiLCAweDg3N2IwNTdiLCAweGNhNGU3NDRiLAorCTB4NjAzYjYzMDYsIDB4OTk5MWI2N2UsIDB4MGNkN2RmYjQsIDB4MmJlZjExN2EsIDB4ZGZjOTFkZWUsIDB4ZjIzNGZiZWIsCisJMHhkM2VkMTM3MCwgMHg2ZjVjN2I2MCwgMHhiZGJjYzk2YywgMHg1N2RmODMzYywgMHg4YTE1ZGIyMCwgMHgzMDdhYzAzNywKKwkweDE0OWVmMzE1LCAweGYzNzFmZmE2LCAweDhmYjZhNGI4LCAweDAxZjc4NTExLCAweDc1YTNmMDg0LCAweGY3M2EzMmVkLAorCTB4ZGM2NjFkNjksIDB4OGNkMzk3OWYsIDB4MTY3OTg5NzUsIDB4YWEyN2JmYTAsIDB4NDYzN2U3YzYsIDB4ODM0MWY5NmIsCisJMHg2ZGRhMGE1OCwgMHgxMzNlNGRjMywgMHhmY2M5MWJiNiwgMHgwMmM3NWU1NCwgMHg2MjhkOGY2NCwgMHg4ZDFmNTQxZCwKKwkweDFlMTY2MzVlLCAweDQxZDI3MjViLCAweDJkY2M3MWFiLCAweDQ3YWEzOGYyLCAweDcxMzEzYjQ0LCAweGYyNDcxZWFlLAorCTB4NzRiZTQxNGUsIDB4NjE3NjZiNDcsIDB4N2UzZmVmMGEsIDB4ZjdjYTJjYzYsIDB4Y2RlZjY5ZjUsIDB4MzEzZDg2MzMsCisJMHg3ZWI1ZTYwZCwgMHg1MGNlZGRjNiwgMHgyZjVmNGVmYiwgMHg0OGFkZmI3NSwgMHg2OGNiZjk4MywgMHhhMGJkYTIyMSwKKwkweDM2NDU3NWRiLCAweGU1OTg0ZjVlLCAweGM2MTQ3YTdlLCAweDI2Y2RkYjExLCAweDU4YWQ5ZmJjLCAweDZmMTY2MzhiLAorCTB4YmI0NDRmYzgsIDB4NWNkZjY4YWMsIDB4NDRkNzg3YjIsIDB4ZDE2Y2JiNzMsIDB4NzdiMjE5ZmEsIDB4OWFmNzllMTQsCisJMHhmZTdmNzY0ZiwgMHgxODMxMDliYSwgMHhiOWIwNmZhNywgMHhmZTQ3YWU2MiwgMHhkZmJmMjNmZCwgMHhiMWVkNGFmNSwKKwkweDBhNmJjNGU2LCAweGMxOWIxZTUwLCAweDhmZmJjNmFmLCAweGNhZGQ5YTBlLCAweDc1OGJlNDE4LCAweDZjY2VjOGMzLAorCTB4YzdkNmYyOGUsIDB4ZmZjZGJmNDIsIDB4NDFkNTc0ZWEsIDB4ZjczNjY3ZmQsIDB4NGUzODIzZjgsIDB4OGY3ZjE0NDMsCisJMHg2ZjIxMjZmNywgMHgzZmY3ZWRmNiwgMHgxZThjNWMyZiwgMHhmZGYwZmM3OCwgMHg5MWIxODNmZSwgMHg0M2JkZjFlZiwKKwkweGZlZDA1ZmMzLCAweGQ5ZGQ5MGYwLCAweGRjYzRmNjYwLCAweGNiYmRmMDg3LCAweGVhZDY3OWU3LCAweDExMmY1MTg5LAorCTB4ODZiNGZiNjcsIDB4ZDY3NjAzZTcsIDB4ZTY0MDU4YjgsIDB4YmQ2MmQxZjcsIDB4ZGQzZjY4YTQsIDB4MjJkMjVjYWYsCisJMHgwOTdjZGM1MCwgMHgzYTNkMjI2YiwgMHhlZWQ1ODk0YywgMHhjNWU2MzFhNywgMHg0ZGJkMTY5NiwgMHg3OTViNGJlZCwKKwkweDQyZDYzMmZiLCAweGUxN2E3NWVkLCAweDgzMDFiNWJkLCAweGYwY2UzYTFkLCAweGRjZDExZGZkLCAweDc4YWNkZDZmLAorCTB4ZmZmYjQzMWYsIDB4YzRkOTE5OTEsIDB4MTE2N2MwNGYsIDB4MDdlMjJkZjMsIDB4MzFiOTc3ZDgsIDB4MzcxZmFmOWEsCisJMHhmNmM4ZGI2MiwgMHhiODYzZjEyOCwgMHhlMDVjYjg3ZCwgMHhjMjA3YjNlNywgMHg5Mzc5ZDU1MywgMHhkZTBhM2Q2MSwKKwkweDdhZDMyMTlmLCAweDQ5ZjlhZGQ0LCAweGViN2M5Mzg3LCAweDdmZjk4NDZmLCAweDI0NGFmNTlmLCAweDIzYmRkYWE3LAorCTB4NDI1ZjgyNzUsIDB4MzNiZWZhZjksIDB4MmQxYmRlZWMsIDB4YTZiYTY4MGYsIDB4Y2I0M2ZlMjUsIDB4NmIzZWY5ZWYsCisJMHhmZDBkYzM3OSwgMHhmNDAyY2VkYywgMHg5ZWVkNjFkZCwgMHg0OGE0MTQxMiwgMHhhZmQwMTk3OSwgMHgzYWRjMWY0MSwKKwkweGRkYmY1OGMyLCAweDM5ZGZhYzY1LCAweDdkM2RmMjI5LCAweGI0ZDQ2YjZiLCAweGQ2YWE3YmQwLCAweGYzOGU3MDBlLAorCTB4NTc1ZThkMmQsIDB4MGIxMmRmN2YsIDB4MGI3YmViY2YsIDB4Zjk4MTVlZTksIDB4YzE3ZmI0OTQsIDB4MWIxNGZhZjMsCisJMHhkOTFlYTBmMywgMHhmYjQ2Y2ZiZiwgMHhiYzhhNTUyMSwgMHg1NTE2NDMxOSwgMHhiZGUyZWZlMCwgMHg5ZjlkOGFmMCwKKwkweDE3ZmY0MDM3LCAweDk5OGEwNWUzLCAweDk3ZGUwZmI3LCAweDEyNTFmN2M0LCAweDNjNWE0OTNjLCAweDYzMzQ5NWMzLAorCTB4MWI4N2I3ZDQsIDB4MGJjYTJhZmQsIDB4ZGM0NmQ4OTYsIDB4MjdlNjBkNzcsIDB4ZThlZGVmMWEsIDB4MGYzOGZlOGEsCisJMHhjZjk4NjNmZCwgMHhlODRmOGM2YywgMHgzZTdkNWE3MSwgMHgyYzdmMjhmZiwgMHgzOWNmYmI1YSwgMHgzNDZiNmU5YywKKwkweGEzMGJhOGY5LCAweDM5ZDIzZDczLCAweGI5NzNkZjA3LCAweDg3YmI1MmY5LCAweDQzYzEyOWZmLCAweDI2ODk2ODc5LAorCTB4YjNhYzE3MWUsIDB4OWM1MjhlYjksIDB4ZWEwZmYzNDQsIDB4ZjMwNmI4YjQsIDB4NTZlZjVkN2QsIDB4MTA5NWVjYzIsCisJMHhlZDdkMjJmZiwgMHgzOWY1ZjVkNywgMHgzOGYzNzdlNCwgMHgxNTZhMmQ4OCwgMHgzNjBkYzNhZSwgMHhmYWE2NmViZCwKKwkweDAwYTZlNmQzLCAweDVhYWZmZGY5LCAweDgzMWYxODljLCAweDY3MThkZGVmLCAweDQxMWRjZGYzLCAweDA2NWQ1ZDdlLAorCTB4MGU3YmMxNGIsIDB4YjRjYmIwZGUsIDB4NmFiZGQ2ZmUsIDB4ZDhmNWM2NjksIDB4ZGI3NmYzNmQsIDB4YmE0OWYyNDIsCisJMHhmOWQxZWZlYywgMHhmOWZkMDhhNiwgMHhmOTBkZmQwYywgMHhmOGMxZmQ3NiwgMHhmZDc3ODhhZCwgMHhhN2Y2MWJmZCwKKwkweGNlZmYyMjAyLCAweDY5MWJmOTQ5LCAweGExN2IxZmVkLCAweDQyY2JiODllLCAweGY3ZmQ0ZjcxLCAweGU3Y2ZjYTBmLAorCTB4N2E4Y2ZkZDEsIDB4NGUxNDEzN2YsIDB4ZDUxYWNlODcsIDB4OGU1ZDhmOTAsIDB4ZTUwNzM3N2EsIDB4NjdmNDlkYTAsCisJMHg4MzIwY2I0NSwgMHg2OWY1ZDRkZSwgMHg2ODFiZjljNSwgMHg1NzQ4MmNiZiwgMHhiNTIxMmUyZCwgMHgzOGFhNWU5MywKKwkweGJjNjhiZmZmLCAweDM0OWU5MDNiLCAweGY3ZTkxMjRlLCAweDM1NDljNzgxLCAweDM4ZTBlM2U4LCAweGY3NzAwYzkzLAorCTB4YzEzMjY3MWYsIDB4ZGFjMzhmYTEsIDB4OWZlNzBjYTIsIDB4YWUzY2NjZWIsIDB4MzM5ODY2NzIsIDB4MWU4MjM2MjYsCisJMHg4MzcxNGJkMSwgMHg2MGZmNzBjOSwgMHg2MmIyZTQ5ZCwgMHg0ZWNhNzVmZiwgMHgyODdmMzQzNSwgMHhlZjAwNWY3YywKKwkweGYwMjE2NGM1LCAweDg2N2FjMWQ1LCAweGYzMGI3MmMxLCAweDNkNDA1ZTUyLCAweDA3MjIxM2Y2LCAweDYyYTVkOWEyLAorCTB4ZjhjMjYyYmYsIDB4YzYyZWY5ZTksIDB4YmRiOTQ1ZmUsIDB4MzM3MjdkMTAsIDB4OGJkODJkZjIsIDB4N2UzYjU4M2YsCisJMHg0OWVjMGY5NSwgMHg0NzY5ZWNjOSwgMHg5Mzc2NGFiYSwgMHg2YjY4ZjMxMywgMHg0NWM1MTMxNSwgMHg2NGFjOTJlYiwKKwkweGNhMTJhZGZmLCAweGJkNzM5NDU1LCAweDIyNDNhOTVmLCAweDhmN2RmNDM4LCAweDlmMjllNjgxLCAweGMzM2NkMDc3LAorCTB4OWZmYjNiZWYsIDB4NzZhMTRmMWIsIDB4M2I1N2VlZmQsIDB4MGY5M2Q3MzAsIDB4OTM1NDViZmQsIDB4NGU1ZDQ1MGIsCisJMHgyMTI3ZDg1MywgMHg0N2VmMGZmNCwgMHhlYzQ1MjBkYSwgMHg4ZTlkYmMyNywgMHg2Y2U5MDFmZiwgMHgzZDIwNzBlZSwKKwkweDg4YTVlM2JhLCAweDk1MWIxMDc5LCAweDMxMDc5OGVmLCAweDI3MWY0YzJmLCAweGUwMGVjZDFjLCAweDIzODc0MmY3LAorCTB4ZTVmNDgzMjMsIDB4YTVmNTA1NDYsIDB4ZGM5ZmNjZmQsIDB4YjRjYmQyNGUsIDB4N2ZhZmFkZWYsIDB4NTZhOTg0ZTYsCisJMHhiYzZjNGY5ZSwgMHhmZTIwNmY1NywgMHg3ZDYyZjFkMywgMHhmM2M2NDFmMywgMHg3Zjk0YmQ1MywgMHg0ODNjMzk3MiwKKwkweGZiNDNjYjgyLCAweGUyMjk3NjAwLCAweDQyNTgzNmJlLCAweDQ5MzhmYzg2LCAweDM1NGZlNjMxLCAweDYzZTIxZTQ4LAorCTB4NTZkNTRkZjMsIDB4NWI0OTI3ZGEsIDB4OTI3ZGM1NjksIDB4MDYzMzkyZDUsIDB4MzdkZWQ4ZmQsIDB4Zjk4M2ZlYzEsCisJMHhiZTc5M2EzNSwgMHg2YmZmNzg2YSwgMHhiNDY2MWVmMCwgMHhjNDUzMTU3MywgMHgwNmEzNzlmYiwgMHgzNGJhYWZiMCwKKwkweDc3ZDlhY2ZhLCAweGY1MDFmZTY5LCAweDM3NzVjMWUxLCAweDcxNTI0ZTJhLCAweDM5OWIzNWRkLCAweDRiYWQwM2JjLAorCTB4ZTEwM2JmN2EsIDB4ZmM3ZGQxZWIsIDB4MzkyYzFiZjcsIDB4ZmZhZTNmNTYsIDB4NGEzNWUzZTEsIDB4YmMzZTRmMWUsCisJMHg3MDc4MDQ2ZiwgMHhjZDMxYWNkZiwgMHg1NDZkZjg0ZCwgMHhkNWZkMTUyNSwgMHhjYzUxMTFlOCwgMHg2NTZmZWExYSwKKwkweDY3ZjdhMmNjLCAweGNjZjFlM2UyLCAweDhmOGM2YjIyLCAweGUzYTM5NzljLCAweDFkZjJiNzY5LCAweDE4NmYxZGVkLAorCTB4OGY3ZjBlNWYsIDB4N2MyMWU4ZTIsIDB4ZTg0Y2E5ZDksIDB4OTFiYjk3Y2YsIDB4ZmMzODEzMTcsIDB4NWFhNmY3YTEsCisJMHhiYzQ1ODYzMywgMHg3ZjFmYjI3ZiwgMHhkZTRkZjE4NiwgMHhmN2U3NDY2NCwgMHgxOWI5NDMwNiwgMHhlZWQ1NmVmYSwKKwkweGI1YzBhYTQzLCAweGYyZjRmYzBiLCAweGMyYTYxNDdiLCAweGU0NzdlNmZhLCAweGM5Mzk0MDVmLCAweGNmY2ZkZjZiLAorCTB4ZjAyNmI0ZDEsIDB4ZWZiNTFlN2IsIDB4NjI1ZGM3YzMsIDB4MTJjOGZlZTcsIDB4Y2M2NTRhYmIsIDB4ZjEyZmY3NTEsCisJMHhkYjVhMzdmNywgMHg1ZTc4OWNhMywgMHhiMjJlMzViMSwgMHhkNzYzOTMxZiwgMHhiNDlhNjhmMywgMHhiNDFkMDg3MywKKwkweGNmYjdhMTRmLCAweGNkZGNjNzliLCAweDFiM2RjNTBhLCAweDI1N2ZlMGFkLCAweGE5ZmZiNWY0LCAweDgyMDIzZmI2LAorCTB4ZjlkY2UzMGIsIDB4Zjk5YWViZGIsIDB4N2YzZTUxZjksIDB4ZmI2MmFiOGMsIDB4NWM4ZWM0YzQsIDB4NzQwZWZjNDEsCisJMHhmNzBjYzZkYiwgMHgzYjU4NTVkYiwgMHhlN2NlNTFiMiwgMHg3Njk5YmM5YSwgMHg2OGVhYTcxOCwgMHg1YmQ2MjI0NywKKwkweDRlOWQzZWRmLCAweGI3MWQ2ZjdlLCAweDQ3Nzc3YjM3LCAweDNmYTBkYzUzLCAweDc5Zjk2YTdkLCAweGNjMjlmM2YyLAorCTB4ZGQzZmE4MzcsIDB4YWQwMGE1Y2EsIDB4ZDNlN2U1YWIsIDB4Y2QxYzZmOTksIDB4MGI4ZDY3ZGIsIDB4YzJkM2JmYmUsCisJMHhjOGIxYTRkOCwgMHg4ODRmMWMwMCwgMHgzMGY0NDg5ZiwgMHg3YTA2NGRkYiwgMHg2NzVlM2M4MCwgMHg3ODgxZThkNywKKwkweDc2YjdhM2VhLCAweDc2YTc0YmVmLCAweGNkNzFlMGJmLCAweGY3MmE2MTVmLCAweGE1ZmJmNWQ3LCAweGU1Zjc2NzhlLAorCTB4NWI3ZGQwNWIsIDB4MTNmNzM2ZTUsIDB4M2IwYjRmNzgsIDB4ZTZiZTUyMjIsIDB4ZmVmYzI5YzIsIDB4NzcxNjg1YzQsCisJMHgwYjU3ZGEwYywgMHg2YTE0NTNmZiwgMHhmMzkzN2Y2OSwgMHg3ZjBkMjJmZCwgMHhmNzQ1Y2M5ZCwgMHhkYWQ2ZjgwZSwKKwkweDk4NGViZWY4LCAweDU0ZjE5NjdmLCAweGMyM2ZiOGZlLCAweDQ0ZGE4YmY3LCAweDMwNWYxYmNhLCAweGJmNjFmMTQ1LAorCTB4YmYwNWVkNzksIDB4ZTJmOWZkYzQsIDB4NzczYTY4YzYsIDB4YWU3YmYwYmUsIDB4MmRkNzY4OTMsIDB4YzRlNmMyN2MsCisJMHhmZTU5N2JkZiwgMHgzMjdlNjY0MSwgMHhjOWZjYmJmNCwgMHhkZjA3ZDUwYywgMHgyNGYwYWY0NSwgMHgyN2EwNWQ1OSwKKwkweDg4NTNkYjFmLCAweDMwODM0NTdlLCAweDA2MzBiZTdmLCAweDBlYzdjYWZjLCAweDk4YjhjMmFjLCAweGNmOTRjZGY0LAorCTB4ZjQ3ZjUwNmQsIDB4NjE1Njc3YjEsIDB4MThiN2U5YmMsIDB4ZjYzYjI2ZTcsIDB4NjNiNDQyZGQsIDB4ZjRkMDQyNWYsCisJMHhjMWMwM2ZmZCwgMHg1YTRkODc0YiwgMHhhOWFhYzRmZCwgMHg0ZGFmZjJhMCwgMHgyYTI5MzU2OCwgMHg1NjI3NjVmYSwKKwkweGM0ZDkzOWUxLCAweDEzMThmNzM4LCAweGZkOGVmNzhjLCAweDZmZWM0MmIzLCAweGNlYTMxM2MxLCAweGU3Zjc4MDZkLAorCTB4YmVjODE3ZWQsIDB4ZGY2OTNhMDAsIDB4MDE0ZjM3MGIsIDB4YjI3OGJiYmIsIDB4NTgyZDk3NWUsIDB4ODY2NjhmOGYsCisJMHgzMzM5YmUzOCwgMHhkOWRhM2UzOCwgMHg4YjdjN2FhZCwgMHg3MThjZGQ0NSwgMHhkNTA1ZTNmNywgMHgzZmU4MjQ1MywKKwkweGNlYWVhMWMzLCAweGM0ZDhjOTE5LCAweDFiYWFmOWY1LCAweGM0NzZjZmM2LCAweDk4ZjE4Y2RkLCAweDgzN2RiZWQ2LAorCTB4MWYxOGQ1ZjgsIDB4MDNkZTY1NmIsIDB4ZDM3Zjc4NjYsIDB4YjY2ZTQzZTMsIDB4MDdlMzYyMDIsIDB4MzBhOGM2NzksCisJMHgyOWQ2NDFmZiwgMHhmNGRmYTdhYiwgMHg0NDYzZTQxZCwgMHgwZDU5ZjNiZiwgMHg5MzkyMDRmNiwgMHhmNGQyODg0MywKKwkweGMyZGVmYzE1LCAweGUzNGVmOTNlLCAweDFmNTdkYjdjLCAweGMzY2ZjMWQxLCAweDVlMjRmNWU4LCAweDU5MTk1ZDZmLAorCTB4YzMxMmRjNWYsIDB4MmEzNWJhZjksIDB4NGQ2NmZiZjIsIDB4MDNiZTAwM2YsIDB4OGI2ZDdmMTQsIDB4MDhjZjBmZjYsCisJMHgxZjkwMGZlYSwgMHhhNzkyMjRlYiwgMHg4MDdmNWM3NSwgMHg5M2I0Y2QxYywgMHhlZmVjNDZkYywgMHhhYjZiY2FkYiwKKwkweGFiNzlhZjc2LCAweGY4YzY4ZWU0LCAweDMwYzdhZTgyLCAweGNjZTM4NjgyLCAweGZhMGQzYmI1LCAweDAxN2RhZjM5LAorCTB4MzE1MWQ3ZTksIDB4YzljNzg3MmEsIDB4YzUzMDkzZjEsIDB4YjU5ODQ3YTgsIDB4ZGY3NDNiM2QsIDB4M2NkYTc3ZmUsCisJMHhlM2QzYWUzMywgMHg3NDM5MDEzZiwgMHg4ZWY5NjlkZiwgMHg5ZjllNGJmYywgMHg3ZjM4YzcyZCwgMHg5YzFkYmQ4OCwKKwkweDY3OGE1NGM3LCAweGZhMTdlYmY0LCAweGJiZmQ2YTczLCAweDVmMDRhZTcyLCAweDE1ZjA2NWVhLCAweGRjYmFmODRmLAorCTB4MTlmZDgzM2MsIDB4ZmJmZDJmZTMsIDB4YzE3ZGI1OTMsIDB4MjIzYWUzMjYsIDB4YTRmMzg2NDcsIDB4N2Y4MDI3Y2UsCisJMHgyY2ZlODg1MywgMHg5ZWE5ZjRkNiwgMHg2YmJkZDEwNywgMHgwNjRmZTUyNCwgMHgzMWU3ZTVjNywgMHhjNGJmYmU4MSwKKwkweDgxZjI1ZGRmLCAweDk2M2Q0NTNlLCAweGM1NmZiOTI3LCAweDcxZWQ3OWY2LCAweGMwZWZkYTJhLCAweGJmMWFmNTZmLAorCTB4M2E2ZmM4NDksIDB4YWFlMzViOWQsIDB4ZWJiZTY5ZjMsIDB4ZmE0YmIyMDQsIDB4M2FkYTQxZDksIDB4ZDAyNGQ3OWEsCisJMHg5ZTBkOTllZiwgMHg4N2U3MTVlNywgMHg3YmViYTdjMCwgMHhlYjU1YmZlOCwgMHhlN2U3M2M3ZiwgMHhmOWY4ZmI2NywKKwkweGNkMWY5NDNlLCAweDBlYWU2NzlmLCAweDFjM2Q1ZmJhLCAweDczMjg4NWZlLCAweGQ1ZWIyMTA5LCAweGViOGEzNmFiLAorCTB4NWFiYjc4ZWIsIDB4ODVlZGQ3ZmUsIDB4MjVkNzAxZjIsIDB4ZjgzNzdkMDcsIDB4ODRlMWMwNjgsIDB4MWU1MThiNzYsCisJMHg3Y2I1NWY1MCwgMHhiNjY0Zjc0MiwgMHg3ZjBjODliNiwgMHg4ZGU3MDBiMiwgMHhkNzRmMjM3YSwgMHg4Nzk1YmU5MywKKwkweDViYjIyNDBhLCAweDQ5ZDk3YTgyLCAweDM3YWU4YmY2LCAweGIwNmI1NjAzLCAweDJiYjViOWZkLCAweGFmNTFlYjBiLAorCTB4YzdlY2Y3NmEsIDB4YzdjNWEwOGIsIDB4NzM0OGUxMDYsIDB4OTI3N2JiNzAsIDB4ZGRmYzQ1OTcsIDB4NWRiYjFjYjgsCisJMHg4ZjM0MjNkNywgMHhlODBhMmI4ZCwgMHg2ZDJhODU1ZSwgMHhlMWQ0OWQzZCwgMHgzNDUzNzhhMywgMHgxMDQyNzFlMiwKKwkweDdkN2FmYTFmLCAweDE1ZTNhNWE3LCAweDgxOTdiY2VkLCAweGQ4M2FmNTFmLCAweGFjYTY5NTI1LCAweDdlZjhmZjYwLAorCTB4ZTdkZjA4NjYsIDB4ODQxZjM4MzksIDB4ZWFiYmU3ZDMsIDB4MGY4M2MwMjcsIDB4MGQ0M2YwZjEsIDB4Yzc1MDA5ZWYsCisJMHgwNDk4MmQ3YiwgMHhmZGU2MTdlYiwgMHg2YjVjNTBjYywgMHg1NmUwNDIzMiwgMHgxMDRlM2ViOCwgMHg1ZDhmNWM0ZCwKKwkweDA3ZTIyZTQ2LCAweDU4ZjdlZDMxLCAweDQxY2YyNGVjLCAweGU1YmI3MDdjLCAweGU3MTY4NzAxLCAweDNmMjllZWQ1LAorCTB4YTEzOTAyNjgsIDB4Y2YzZTM2N2QsIDB4ZDRjOTVkZWUsIDB4ZGRhZDZjZWYsIDB4NmYyZjRiZGYsIDB4NzQ5NmYyZDYsCisJMHhiNWUyYjE3YiwgMHhmODQ2Y2RkNCwgMHgxY2JiN2Y3OSwgMHg0Nzc5MmYxYywgMHg4ZWQwNjNkZCwgMHg1YzUxZWUxOSwKKwkweGI1ZTQxZmU4LCAweGY5OGZkY2NmLCAweGYwN2JkOTI0LCAweDdjODIwNDA3LCAweGU1YzJkZDllLCAweGMzNGJiODE0LAorCTB4NDNkYjliY2IsIDB4ZDg3NGFkZmIsIDB4YmJmYjM5NzUsIDB4MjhmYjIzY2MsIDB4Y2JhNDU3ZTcsIDB4NWE3MjIxN2QsCisJMHhiZTM4NTBlMywgMHhjNDE2N2U2MCwgMHhhM2Q0NjRhNywgMHg4M2Y3Zjk3YSwgMHhjZjFmYjNjMywgMHgzZTAzOTUyNSwKKwkweDc4ZWI2ZDUwLCAweGJmOTk2ZDZiLCAweDdjNzI4NmQyLCAweDhlNTBiOTk0LCAweDliZTY1YmJiLCAweDMxNWQyMTQ2LAorCTB4YTIxOWNjMTEsIDB4NzlmM2Q2MWYsIDB4ZjAyODc2ZTgsIDB4ZTVmMjBiNjUsIDB4MWExMGM3M2EsIDB4Nzc1MWY4NmYsCisJMHgxZmJjMGU3NCwgMHhjNjEzNzY4ZSwgMHg3ZWVjNWI3ZCwgMHgwZWZjMjNmNCwgMHhlMjA3MmVlZiwgMHgxNGVmNTY3MywKKwkweDhjYWQ0ZmRjLCAweDg1YjVhZWFlLCAweGRmNmJlZjNjLCAweDhmODllZDA2LCAweDFmZWUyMmJkLCAweGY4YzAzZjk1LAorCTB4N2NkYWYxYmQsIDB4MDJjZmE5YTAsIDB4MjBjODU1ZTMsIDB4MGY1NDU5YTcsIDB4NjU1YWRlMjAsIDB4M2VmN2JlZGUsCisJMHg1NjExYTVmYSwgMHhmOTdiZjIyOSwgMHg5NWJlZmQ2MCwgMHg1MzZkZjNmOCwgMHhmZDE3ZDIxYywgMHhjYjkzYjQyNCwKKwkweGVlMWE0ZjQ1LCAweDE2YzFiMjdiLCAweGUwMDNhZTE3LCAweDFmYmYxMDc3LCAweDA2YzkzMWI0LCAweDRhMWVmZmZkLAorCTB4YzRkM2QzZDQsIDB4NmI4ZTc0YTUsIDB4ZmI0MDk2NWEsIDB4OGY3ZmJhNDQsIDB4YTRmZDBiN2EsIDB4NGQxN2JmM2IsCisJMHgzYzJlYzhmYywgMHhkM2UzMGMzOCwgMHg0ZTljZDEwOSwgMHhlYjU1OGZkMCwgMHgxYjFkNmFjNywgMHg0OGZmYmY5NCwKKwkweDhlZmU0OTFmLCAweDE0MWRiZWJlLCAweGUwZTdlYTA0LCAweGQ3MzVkNzRkLCAweGQ4NDFmODg1LCAweDgzZmZlYTFmLAorCTB4YTViNDhjYzIsIDB4MWY5YWZmYzgsIDB4N2M2MWY2NDcsIDB4N2I0NWRkNzAsIDB4Y2UyMWFjNjUsIDB4ZWJlMGQzZTYsCisJMHgwYTNlNDc0OCwgMHgzZWQxNDdiNSwgMHg3ZDY3YjNlZCwgMHgwY2RmNTdmMywgMHhmNGUyNzY3YSwgMHg3MTVlMDA5NiwKKwkweDZlOGFjYjVmLCAweDZmZTgxN2ZlLCAweDM2YjNkODFhLCAweDhkM2VjM2MwLCAweGY4NjYwZTJmLCAweDNkNGZkYzQ0LAorCTB4ZmJhMDVjMzgsIDB4Nzk0NTBmZGMsIDB4ZTA5NWFhNzMsIDB4NWM1YTg5MzgsIDB4MzNjYjUxMjAsIDB4ZTVlMjhjNGYsCisJMHgxZWI4NjIwZiwgMHhhZjg2M2NmYywgMHhiY2E4MzdkNywgMHgxYzg4ZTg5ZSwgMHhiZGFkOTg0NywgMHhlYjg5YTlmZiwKKwkweDkxZjkzNWY3LCAweDY4NGZkMWYzLCAweGVkYWFmNWZhLCAweGZjMjExY2RlLCAweDhlMTNlZWJlLCAweGRkN2RkYTA5LAorCTB4ZTNjNzZmOTQsIDB4ZmUzNDBiZmQsIDB4ZTg4NzNiMDYsIDB4ZjhhYmI0MTQsIDB4ODc2ZTlkN2UsIDB4NGQ5ZjZkOWUsCisJMHhmNzgyMTNmNSwgMHgyYzA0N2JiZCwgMHg5ZjkwNGYzZCwgMHhmMTQ4YWVmNCwgMHg2ZjU4ZTJhMSwgMHg1NWE1ZTYyMiwKKwkweGNiOGU0NTQ0LCAweGY0ZjBkMjBjLCAweDM4YTMwZDU5LCAweGNmZGMyOWVmLCAweGI3YmZlNmNiLCAweDFiMjVmNTg1LAorCTB4MWQ3YmE0OWUsIDB4ZTI5Zjk5NGEsIDB4MWExYjQ1YmQsIDB4YzhhZWJmNjgsIDB4ODBhNzMwMmYsIDB4Yzc4Nzk5ZmUsCisJMHg5NDNhMzU4MSwgMHg3MTBkMTE2ZSwgMHhiNTUyYzVlNywgMHhlNDEzOWIxYywgMHhhZTFkZmM1YiwgMHg5YjI1ZjdkMCwKKwkweDU3ZWExOWM2LCAweDE4MTY5NzZmLCAweDdhODIzYmYyLCAweGJmZWM5MGE3LCAweDNlNzU3ZWYwLCAweDhmNGZiNzBmLAorCTB4ZjEwZDM4ZDcsIDB4ODYxYjA1ZWUsIDB4NzhjZGYyMTcsIDB4NzMyMTdlZGUsIDB4MzYxNzdjZDEsIDB4MTFlZjE5NjYsCisJMHhiMmI4NGM2ZSwgMHgxZWMxODI3YiwgMHg1Mzg0NDVmNSwgMHgzZmE4ZmQyNiwgMHhmN2Y4MGUzZiwgMHgxN2Y3YzQ4NSwKKwkweGUwOGMzYTdjLCAweDdiYzM4YmY4LCAweDhlMDE4YzVkLCAweGM0MzNlNjY4LCAweGRmZjMyNmNmLCAweGY4ZjFiNDI5LAorCTB4ZWY4ZmYwMjMsIDB4N2U0MDc2NTIsIDB4MDdmNTc3Y2MsIDB4MWZjMDFkYWUsIDB4ZmE4N2ZkYzgsIDB4Yjk5Mzc5MDMsCisJMHgwMjRkNjVmZSwgMHg5YzRjZTBlNSwgMHg2NmNmYjQ2YSwgMHg2ZTc1ZjBjNywgMHhjMWI0NGM3NiwgMHg2NzlhMmIzZSwKKwkweDZiNTczNzZjLCAweDc3NmI1NzM3LCAweGE4NGEzOGI5LCAweGExNjQyNjVkLCAweGU5ZmRlMzNlLCAweDcxOTUxZmJmLAorCTB4ZmZjYTZkZmEsIDB4ZWRjMzEwZGMsIDB4NmVhYTlmZDcsIDB4YmJmNDBjNmYsIDB4ZDA3NzNiNTYsIDB4ZWZkYWRlNmYsCisJMHhmNzM1YWQ0YSwgMHg1ZTUyODVlNSwgMHgxZTZmZTZlMCwgMHgwOWRmYzNhYywgMHhmNjAxZGRlOSwgMHhmY2MxZTgzZiwKKwkweDdiYTBkZjY3LCAweDZlZWZmNGJhLCAweGI0MzJkMTVmLCAweGE5NTRmMDA4LCAweDhiYjk3M2M5LCAweDE1ZGNhZmNmLAorCTB4M2Y0MTg3OTAsIDB4YWUxY2U1MjksIDB4ODI3ZDk2YjQsIDB4NWE1ZGYyMTQsIDB4MjJiNzZmMDksIDB4MmZmMDZjYzYsCisJMHhmZmQ1YTI3ZiwgMHg2NTQ5YzYzNSwgMHgxODQwNDk1YSwgMHgzNjUyZWQwNiwgMHhlYzI0MTE2ZCwgMHgwYjU3N2YwZiwKKwkweDY2YTk0OWUwLCAweDkzZGZkMGZlLCAweGVkY2YxOTRhLCAweDZmYzdkYjlhLCAweDA0ZTYxNjE2LCAweDlhNjhkMGYxLAorCTB4NWM2MmEzOTEsIDB4ODVkYTMxMzUsIDB4YWE0N2NjZWIsIDB4NTBmMTBlYjcsIDB4Y2U4MDUxZmUsIDB4YThmYzRjNDksCisJMHhiZGJiNDI1ZCwgMHgyM2Q3NzU1YiwgMHg3MDc4ZWI3ZiwgMHhhZTBhNmE4YSwgMHg3MTFmZDFhMywgMHhmY2ZhOWIzOCwKKwkweDMwYmViZTYyLCAweDQ3NjZhOGY2LCAweGU5NzZlYjM3LCAweDQyZWRjNjYxLCAweDU3MTJhNzVhLCAweDNlZmMzMDhlLAorCTB4YjY5YzYyNjEsIDB4ZWYzMjI0NGUsIDB4MzdkYTg1NGUsIDB4YTMyN2EyMzIsIDB4Y2NhZTI0ZjksIDB4MmM3NmU2NmUsCisJMHgyY2I0ZjdhNywgMHgzZTdjMTZjZiwgMHhiMWM4ZjA2ZCwgMHhkNjQ3ZGY3OCwgMHhiZjg0ODBkYSwgMHgyNmRhZmUzYiwKKwkweDUxZmJjNDUzLCAweGMzZmMzNTlhLCAweGY5YzU5ZTNjLCAweDljYjhmM2U5LCAweDk5ZGJkMDVlLCAweGU4NGY4ODA3LAorCTB4M2QzZDEwZjIsIDB4ZDhjMWRmYjIsIDB4ZmYzZWY0ZTMsIDB4ZTk3YmY4ZDksIDB4OTk3YWNhZmUsIDB4Yzc0ZTRmN2UsCisJMHg2OWVhYjc3ZiwgMHhiNGE2YmM0MSwgMHgzNzA4MTY2YywgMHhkYzdhNzhkYSwgMHg1Y2EzOWYwZSwgMHhlNzhkOTcxZSwKKwkweGZiOTQwNzNhLCAweDE2ODczYjE1LCAweGJkN2RjYTg1LCAweDFjZDlmNDRjLCAweGRiYWZlNzk2LCAweGUxODg3ZmY3LAorCTB4NTg5MGVhZWIsIDB4NGJjNDNlY2YsIDB4OGEzYWRiNjUsIDB4YzJkOTJjZWYsIDB4NDA2N2Y3N2YsIDB4ZmUyMTVjZmMsCisJMHgwN2VlMTI4NCwgMHhmYmUxY2Y5NCwgMHg0YWNmZjk1ZSwgMHg3YWIyZmY0NCwgMHhlNWFjZmJmZSwgMHhiOGYwNzdkYiwKKwkweDBiOTk4ZmNlLCAweGNiNzk0M2Y1LCAweDA3MjhhMTBlLCAweDg3NzMwNzdmLCAweDlmMDQyOGIwLCAweGNhN2VlNWE5LAorCTB4YWVjNmJmODMsIDB4NWJkNzFmY2IsIDB4NzE4ZWZjZTEsIDB4MGU1M2I0NjIsIDB4ZTg3ZWI4ZDksIDB4Yjg3YzU3Y2MsCisJMHhmNjY5ZGMxZiwgMHhjZWJiNjM5NiwgMHhlNjE3NjhlNCwgMHhmZmY4ZTk3NywgMHhlOTliOGVmZCwgMHhhNzdkYjVkYywKKwkweGEzNjU4MDI1LCAweDhhYzkzOWE5LCAweGNhZDcwZWZiLCAweDZlYWJlNDJlLCAweGU5MTI3YmQ1LCAweDVhNzkyNzEzLAorCTB4NzhkOGZiZjEsIDB4YmUxNmFiYmIsIDB4NThkODVhNzUsIDB4M2M3MmI5NTUsIDB4OGZlMzBjNGMsIDB4NzJlNjNmODksCisJMHhmNDNhYTQ5MywgMHgyNGIxODZiYywgMHhlYjlkYWEzNywgMHg2N2Q3MTMyZCwgMHgxZTdjY2M4NywgMHhmNzg3MTkzYiwKKwkweGIzZWUzMTA3LCAweGUzODc4NzI0LCAweGYyOTRkYzY4LCAweGNhMWY5ZDAwLCAweDcwZDNiZDM4LCAweDVmYzgzMGNlLAorCTB4MWI3ZGJmZWUsIDB4MmMzZmZmN2UsIDB4MDAyODRiYTEsIDB4MDAwMDI4NGIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCisJMHg3ZGQ1ZmYwMCwgMHhjNTU0N2M3YiwgMHhiZGRjZjhmNSwgMHgwZGQ5MGFmYiwgMHhkYzNiZjc5YiwgMHgyNDI4MGMxMCwKKwkweDAxMDQ5ZTZjLCAweDg3ODQyNGQ5LCAweDI4MDI2ZTIwLCAweDQ3Nzk2YmM4LCAweGQyMDI2YzkyLCAweDZkZmFkMGZlLAorCTB4ZTUzMTgzMTYsIDB4MTZkNDZiNmIsIDB4ODgyZWE5NDUsIDB4ODM1YWI2OTYsIDB4YjgwZDA2YTIsIDB4NDdkNjIyMjgsCisJMHgyZDhhYTUyMywgMHgyMjIwYTVkYSwgMHhmYjFiNjQ4NCwgMHg2ZmNiNTZjMCwgMHhlYzk5OTljZSwgMHgwZjBkOWJkZSwKKwkweDdjZjlmYjZiLCAweGRjYzk4ZmUxLCAweGU2NzM5Zjc5LCAweDljZTczMzljLCAweGI1MzMxZDk5LCAweDIyOGNhOGNkLAorCTB4Mzg5YWE2YTQsIDB4ZmQyZDM0YmMsIDB4ODRlOTBlZTksIDB4ZjAwYjkwODUsIDB4ODMyMTIyNmYsIDB4ZjEyMTMyNmMsCisJMHhiZDNjYTQ4NCwgMHg1ODJjNTI0ZCwgMHgxYzVhN2ZiZSwgMHgwNTI2MjdkNiwgMHhhZWQ4NGJiZSwgMHhhMGFmOTY4NiwKKwkweDg0MjI1YmE5LCAweGEwZTQyNThjLCAweDMxY2M3ODgxLCAweDJhZThiNDg0LCAweGZkNjhkOTQ3LCAweDdiNDg4NDk2LAorCTB4NjYzYjJkMTMsIDB4NjhkYjQ1NzMsIDB4OWQ2Mzk2N2YsIDB4ZWFiNGFjMDcsIDB4YTMzZTYzOTgsIDB4ZGE0YmY2OGIsCisJMHg0MjY0YzdlOSwgMHgxMjEyMzBkZSwgMHg4YzFkZGI0MSwgMHg2ZGQzZWQ2MCwgMHg0MjIyOTA3NCwgMHgwNzg5MWIyNiwKKwkweDIzM2QxYmJmLCAweGMxZGZkYTE0LCAweGJmYjA4M2ExLCAweGE2ZWFiNzk3LCAweGMzN2I2OTdhLCAweDE5ZDhiMjIwLAorCTB4OWI3NGVmMzIsIDB4NmNhNWRiMGUsIDB4ZThlOTIxZGQsIDB4NWE0OGI4ZjcsIDB4NTEzZjMyMWUsIDB4NTk1YjAxZWYsCisJMHhjYzY3Y2MyNiwgMHg0Mzg0NGVkNCwgMHhhZTNkNTZkZCwgMHgxY2U4YzJhNywgMHhiMDU0NjZiNiwgMHg4ZmU4NjhkZSwKKwkweGU2ZWQ3YmQ2LCAweGZhN2U4YzRmLCAweGJkMmZjN2ZkLCAweGJmNTAyNDZmLCAweGMxYjQ3MjU1LCAweDM3ZGY1YmZjLAorCTB4YTlhMWM5Y2UsIDB4NDkzMmU3ZTcsIDB4NjEzYTY0MjAsIDB4ZjBiZjM2ZmYsIDB4ZGZhMTUxYmUsIDB4NzBhNmVmYTcsCisJMHg3NmVhZjVhMiwgMHhhMzJmZDJlZiwgMHhjNWE5NTc2OSwgMHgyNDI2OGQyMywgMHg4YjZiY2NmMywgMHhkZWZkMjE0OCwKKwkweDc0MTEyMjY2LCAweDU3MzZkZDZlLCAweGZiY2U4ZDkxLCAweDBlNTM1ZGNkLCAweDU4ODQ1MTQ5LCAweDIwZjkzMzlmLAorCTB4YzQyMWYwMTUsIDB4MDZiNGUxOWYsIDB4M2E1MjI1ZTcsIDB4NzIyZmNlMzAsIDB4MTBiM2ZkMmEsIDB4NTVlZjQ2YjIsCisJMHg5NWRkZjA5OSwgMHhiN2ViNDU1OSwgMHhjY2Y4MzBjNiwgMHg0MmUwY2MxZiwgMHgxNTdiZWMyYywgMHgwYjgwOTc1ZiwKKwkweDhjMGE3ZjFkLCAweGRjZTU5MTVmLCAweDI0NTRmZDAxLCAweDMyOWJkODQ2LCAweGFmZjk5ZTYxLCAweGViZGMyOTk5LAorCTB4ODIzZDkyZWMsIDB4NjcyYjhkNTYsIDB4NTc5ZDBjZjAsIDB4NzliODRlNjUsIDB4ZTJmMWMwNmQsIDB4NDRmOGQ5NjMsCisJMHg3MTgwY2ZlZiwgMHhlZmIyZjEwOSwgMHhmOTIxNjkzMiwgMHgzODczZjZjMSwgMHgxZjc3ZTliZSwgMHgzYTg2NGVmYiwKKwkweGQ3ZjM4MjczLCAweDRkODM2ZmUyLCAweGU4NjFmYWMyLCAweGEzYWMxMTZjLCAweGM3Y2Y5OGY2LCAweDBmNTNhY2U4LAorCTB4ZTY3OTk2NzQsIDB4ZDA0M2UyMzAsIDB4ZWFiNmNmY2QsIDB4ZDVmZDE1MzEsIDB4NWZkODhjZDksIDB4NzA4ZjRkOWQsCisJMHgxYTc4MGNkOSwgMHgyYzAzNTM0YywgMHhjYzFiYTY5YSwgMHhjNzg1MGY1ZSwgMHgxZjI2ZjM5YiwgMHg3ZTI5NzI5MiwKKwkweDIwZmEzMTZlLCAweGI0Yjc0MzdkLCAweDQ4ZGZjYTE2LCAweGU4YjdlMzYxLCAweGRmMjE2Yjc0LCAweDM0ODU5NzcyLAorCTB4NmUxZDVlMjEsIDB4Mzc2YmNmOTgsIDB4NmE3ZTIxNDcsIDB4MjZiZDFhZTcsIDB4OWY4ZmNmZGEsIDB4NjNkZTU4OTcsCisJMHg2N2ZhMTJmMSwgMHg3MmY2NmJhZCwgMHgyMmUyNDc2OCwgMHhmZTAyNGZlYywgMHg3MzhjMDc1YywgMHg0YWU5ZmRhYywKKwkweDUxYmY2ZTc5LCAweGI3YTdkZmExLCAweGYwMjdmZGIxLCAweGU4YzZkYjUwLCAweDAxMDdlYzRiLCAweGJkM2MyMGQ3LAorCTB4ZjAyNGZkYWEsIDB4OGRiMDdmMzEsIDB4MTdhNTA1ZDEsIDB4Y2VjZDc3ODAsIDB4MzM0OWRiMDgsIDB4MDEwMmViMWIsCisJMHhlNTU2OGNmYSwgMHg2ZDkzZGJlYiwgMHhmMzA0NDcyNywgMHhkMDA3ZjAzNSwgMHg4MTYyMGVjMSwgMHg3OWYyZDY3OSwKKwkweGVlYjlkM2NlLCAweDY3NTVmZDgzLCAweDUwMzQxZmY2LCAweDBkMWYxNmQ0LCAweDg4MWY3ZWUwLCAweGZmZDY2YjdlLAorCTB4MDE2NGZiM2EsIDB4MGU5M2FiMjEsIDB4YWRmNjJhNjEsIDB4N2Y3YWE4NjEsIDB4NmY3OGU1NmYsIDB4N2JiNjk0ODIsCisJMHg0ZDRkZDM4MiwgMHhjYmVlMWI2MSwgMHhiODBkOTM5YSwgMHgxOTUzMmQ5ZiwgMHgyMzFjYjM1ZiwgMHgxMzNjNTA4ZSwKKwkweGRlYmU0M2YyLCAweDQ1N2RiMTdiLCAweDk5NjRkYjY0LCAweDcxZTJiZGMyLCAweGZhNDRkNmM5LCAweGFiYTQ0ZmNmLAorCTB4YTM2Y2UyMjQsIDB4ZjViNjdkZmQsIDB4MDAyNWE4ZjUsIDB4YzgyZWFmZGYsIDB4MzdhZTk4YTQsIDB4Mzc3N2FkODIsCisJMHgzYjVkM2JlNywgMHhkZTkxYzAyOSwgMHhjYzI0OGMxYiwgMHgzZmI3MmY3YSwgMHgwMTIyM2JlMiwgMHhlYzM4NmIzYywKKwkweDFmMmU5ZWJiLCAweDE3YTUyOWZiLCAweGY2YzFjZWNmLCAweGNmOTJlOGFiLCAweGY2ZWIzZDNlLCAweGJiYmNlOTRmLAorCTB4Y2JiNDRjNzYsIDB4NGU0ZDM2NDAsIDB4N2M0MDlmYTQsIDB4YTUzYjdkODQsIDB4NGM5OTM4OWYsIDB4MzdkZTI4OTUsCisJMHgzNTFlYmRiNCwgMHhmY2ZiYjY4ZSwgMHg4MWYzYTM5NywgMHhmN2NkYmY2ZiwgMHhlNWU3OTlmZCwgMHhiYjk3MDBmNSwKKwkweDc1ZWNmNjdlLCAweDk1ZTM1ZTUwLCAweGNlMzA0ZDYyLCAweDk1ZmZjN2NlLCAweGRlYTlmYjQyLCAweDI2MTAwZjUxLAorCTB4ZDU3Y2JmNGQsIDB4NzRmNWE3ZTgsIDB4ZmJlYzZkZGUsIDB4YTgzNmMxY2UsIDB4ZjcxM2Y5ZjcsIDB4NmVmMDA3NWYsCisJMHhmMmMyNmI2YSwgMHhjMzZjNGYzMywgMHg3YjNmNmJmYywgMHg2ODNmZGY3NiwgMHg5NDY3NWFiZCwgMHg3OTlkZWExZCwKKwkweGE1ZTIzZjdlLCAweGMwNzdhNWQ2LCAweGViYTIwNzdhLCAweDMzZjZiYmNkLCAweGUxMjZkOTdlLCAweDE5NzMyMzdlLAorCTB4MmQ3NDEzMWYsIDB4OWZmM2Y3ZTgsIDB4MmExYjFlMmQsIDB4MTZmN2M0MzcsIDB4ODMzYjk3MjMsIDB4Y2IzOTFjOTgsCisJMHg5OTRkNmZmNywgMHhiM2QyMDVhNSwgMHg4NWNjNDRjZiwgMHhmZThkYmFmNSwgMHhjZjk4NjhlYywgMHgxZjE3NDYyOCwKKwkweGI2ZDQ3ODcxLCAweDJkYjgzMWFkLCAweGY5ZmIxZWQ4LCAweDQ4N2JlZTgwLCAweDllN2QyODczLCAweDZiNGVmNGEyLAorCTB4MDA1MGI4ZWQsIDB4ZWIwYWZkZTMsIDB4MTEyNTdhZDMsIDB4MmYzN2JlMTQsIDB4N2NjMTJlMzgsIDB4MTgzNTQ3MjIsCisJMHhiZjllNzA2YSwgMHhkNTc0ZTU2NCwgMHhlYmM1ZTVhMSwgMHhlOTZhM2QxOCwgMHgwNTliMGJlMCwgMHg5MDdkOGJlYiwKKwkweDRkMzJiYmIyLCAweGIyNjAzZTQxLCAweGQ2Y2UzZTMzLCAweDZhZWQ1Mjk3LCAweGQ3ZWZkMmIyLCAweDY1ZDk3M2FmLAorCTB4NGY5N2M3OGEsIDB4NGE5YzllMWYsIDB4MjExYjNmZjMsIDB4NjVmZTIwMTUsIDB4OGYzOWM5ODksIDB4NWJhOWM3MDUsCisJMHhkMDRlNDY1ZiwgMHhkOWEyZWFmOSwgMHgxMWIwNDk3ZSwgMHgwN2M4YjVmZCwgMHhkN2JhMzFiNiwgMHhmMjA1YmQxMywKKwkweDg5ZjIwMGZhLCAweDA3MmUxNmJhLCAweDEyNzliMDc3LCAweDk2NjMyMDczLCAweGFlNTlkYjE1LCAweDgzY2UwOThkLAorCTB4MzA1OGIzYjYsIDB4MjliOGM4MWYsIDB4Njc4ZWU0MDcsIDB4YzUxZGNhMmUsIDB4MjMzZGYzODgsIDB4ZTRmMTAxZjgsCisJMHhlZTA5Y2MyZSwgMHg3MTFkMDRiNywgMHg4YzEzZmUwMSwgMHg3ZTMwYjUzNCwgMHg0ZmZiNDk1MywgMHg4YTRkMmU4ZiwKKwkweDA5YTYwYTJlLCAweDE2Yjk1ODgzLCAweGYyZjBiNzRlLCAweDkyM2I0NTFmLCAweDNiNWUwMWEyLCAweDYwZjI1NTYzLAorCTB4ZGFmMmJlMjAsIDB4NmU0Y2RkY2QsIDB4ZTkxYzcyYmYsIDB4MDg3NDBkZDAsIDB4YWE0ZWJiZTMsIDB4NjQ3MmY2ZTQsCisJMHhmNzBlOTRhZSwgMHg1YzNhNDcxYywgMHhhYmY4Y2VkZSwgMHhiOGQ0YmRiYiwgMHgyNTliYTY4YywgMHhlZmU2MTczMiwKKwkweDc0MDRmNGU2LCAweDliZjlhNzY0LCAweDdkNzFhM2EyLCAweGQ5ZmNlYmVlLCAweDM5YmFhN2MwLCAweDYxZWY3NWRkLAorCTB4NGU4NmY2ZjQsIDB4YmNmODAxZTcsIDB4MzZlNDdkYjEsIDB4Zjk1YTA3OTAsIDB4MTEzYjU1MjgsIDB4NmY4YTZlZGYsCisJMHhkNjdhMDQ5MywgMHg2N2EwYzNiYSwgMHgzYjEzNTVkNSwgMHg2ZWY3NTdlYywgMHgwODFhMWZiZSwgMHg3Yjc3MDdlZSwKKwkweDJmZTg3MmU1LCAweDVkOWE2ZTM1LCAweDk5MmY1MDk2LCAweGVlZjM0YTljLCAweGZiMDQ1MjVhLCAweGQ5NmI2NTJkLAorCTB4ZDIwYmEwMWUsIDB4MjBhYjkxMmUsIDB4MGRkY2VkNWYsIDB4YWI4ZmFmZWQsIDB4MjA5OWNiYjMsIDB4OTkyN2I2ZjcsCisJMHg0N2ViZmQ2OSwgMHhjZGZiNjMxNCwgMHhmNDI5NGFlOSwgMHhiNjIwYTllNywgMHg3MDZmMjEyNywgMHg5Y2RiM2NhMSwKKwkweGYyMGVkMjNjLCAweDg4ZGFlZGNlLCAweDA2NTExNzdhLCAweGI4OWNhMWQ5LCAweGJlYTE2YmY0LCAweDZjODBiM2RiLAorCTB4ZTNlY2MyOTIsIDB4Y2IwMzkyM2QsIDB4MDhkZTkxYmQsIDB4M2I3YTdlZGEsIDB4ZWRkYzdmZDMsIDB4MTM5ZjFmNmMsCisJMHhhMWE5MTFmMCwgMHhkNzhjMTE3MywgMHg3ODg5ODJmZCwgMHhiZDlkMjBhNCwgMHg5MzBhNjdiOSwgMHg1MDlhMmZiMywKKwkweDc0NmQ5ZWNlLCAweDM0NTQxMzkwLCAweDEwNTY4YzhmLCAweDM1OGUwMmFmLCAweGEwM2E5OWFkLCAweDk5NjY0MjViLAorCTB4ZjhjYjFlNjAsIDB4NGMwZDVhM2MsIDB4Mzk3MzQ0NmUsIDB4OWIyZjc1OTAsIDB4MWZiZTcyYzcsIDB4NzhlYjQ3OTYsCisJMHhhZmZiZTQ2YSwgMHg5YjA1Yzk5NSwgMHhlMGU0MTcyNywgMHg5MjFlM2UzOSwgMHg3Mzk3MDI0NSwgMHhlNWJhZTg3NCwKKwkweGI1MjdkYzNlLCAweGUyZmViMzRmLCAweGRiYmM4ZTRjLCAweGU4NTVlODQyLCAweDZjN2E1YTQ3LCAweDZjYTZlM2UyLAorCTB4MzMwMTIwM2QsIDB4YTU1YWQ5NDksIDB4NTdkN2U3ZGEsIDB4NWQzZDVmMTMsIDB4NzU1YmY1ZTcsIDB4YThiOTg5YmUsCisJMHhmYzgyZGQzNywgMHg2YzkxODM3YywgMHg3N2Y3ZmE5NywgMHg1YmUzMzQ0ZiwgMHgzY2NlYjExNSwgMHhjZGQ3ZTQwOSwKKwkweGZhM2ZkNDE2LCAweDg3MjBlOWY2LCAweGI4ZjQwMjJlLCAweDg0ZGVjOTdjLCAweGVhMTY3MGFiLCAweDA5ZDNiZDY4LAorCTB4ZWRlMDNiNTYsIDB4NWE4ZTFjNDcsIDB4YmRhZmFiN2QsIDB4ZDE5YzBmNDYsIDB4NDMyNWM5ZWEsIDB4NDE4NmU5NjksCisJMHg1NDllMDE3MywgMHhhMTk4Yjc1ZiwgMHhhN2I2OGQ5ZCwgMHg4ZmI2MTJmNSwgMHhmMjEzNjI3YiwgMHhmN2VjMjZhYiwKKwkweGViMWI2OGY2LCAweGQ4NTlkNjI3LCAweGNiMmUyYzAwLCAweDI3Yzk4ZWI5LCAweDdhZGMzZGFiLCAweDllODVhM2QyLAorCTB4MDc0ZjI4YmQsIDB4ODJkYjMzZjQsIDB4YWZjN2UxZmIsIDB4YmQxOTRiNDgsIDB4MDEyODQxNTEsIDB4NDFmZGIyM2QsCisJMHg1Mjc4ZmVlOCwgMHgzZDQ0N2E0MSwgMHhmNGUwZGRjYSwgMHhiNjQ3YTc4NiwgMHhhZjU0ZGM1ZiwgMHhkMjliM2QwMiwKKwkweDI3YTY1YWUzLCAweDRmZGIwODViLCAweGE3MjMyZThjLCAweDdjMDA3OTMyLCAweDE1OWY1NDJiLCAweGVmYmI1NGZiLAorCTB4ZWRmNmZkMDUsIDB4ZWZkY2NiZmIsIDB4MWZiNjA2ZGQsIDB4ODAxYzI5YmIsIDB4ZmNlOGZiZGUsIDB4OWJlNzQ2NjUsCisJMHg0OGZkZDAzNiwgMHhmZGQxMzdjYiwgMHhmZmMyMTRkOCwgMHg5ODFmZTdiNSwgMHgwNDA3OWMyNywgMHg3MzY2M2RiZiwKKwkweDc0NWYwMDc2LCAweDE5YWI3ZjZmLCAweDQ3ZjM5NmM5LCAweGM4M2ZjYmY3LCAweDY1ZGU5OGJlLCAweDVmYjRjYTg2LAorCTB4YTFhZmRkMzMsIDB4ZTBhNjYzZjQsIDB4ZWE2M2U2YjYsIDB4YjkxMTM5MDEsIDB4ODk0N2FkNWUsIDB4MjY2ODgzZjQsCisJMHhkZWIxYmViZiwgMHhhM2QyNDIzOCwgMHg1NWYxYzNkZSwgMHgwMDdkNzNhYiwgMHg0NmY0MWU3YywgMHg2MzI0MTE0YSwKKwkweDEzMWJkMzNkLCAweGRlMDBlNjQwLCAweDQxN2E0N2I2LCAweDIwNDg0ZTNmLCAweGNjYzJlN2FlLCAweDY3ZGYzZjY3LAorCTB4ZmNlMjlmMDIsIDB4ZWFjNTEwOTAsIDB4ZmY3ZGYyZjcsIDB4NGZmN2FmMjksIDB4NGI5Yzg2OWUsIDB4M2EyODNmNzAsCisJMHgwZjIyNzFkNywgMHgzYjQ0OGYyYywgMHgxNzJjMmYzYSwgMHhkNzNiZTlmMywgMHgxMzdjZDk5OCwgMHhiZWRlY2FlZSwKKwkweGMxOGYwNDI5LCAweDNlNzU3NTdkLCAweDVlZWIzN2UwLCAweDI1YTk3ZTlmLCAweDhiOTA4ZTM4LCAweGY5ODFiYTVhLAorCTB4ZjU4MWZjODMsIDB4YjgxYThlNTQsIDB4N2U3ZWViNWUsIDB4NzFkMGQzM2UsIDB4N2I1ZmRmMDQsIDB4YjQ4MmI4YTgsCisJMHgyYmZiZTBkNSwgMHg1NjM1YzdlZSwgMHgyNTIyZmEwMiwgMHg5ZDJjNDcwNywgMHhlMWJlZmQ1NywgMHgwODhkMWY2YywKKwkweGVhZmI0MzY0LCAweDMxNGRkNzU4LCAweDkzMzFkZmI0LCAweGRmYTBmZWY4LCAweGEwOWNlMGFiLCAweDBjNTMxZTI3LAorCTB4ZjVlMGRkZTAsIDB4ZDNmOWUwODcsIDB4OGY3ZmQ2MTgsIDB4ZTk5MWVjZDUsIDB4ZDYyM2I4ZmUsIDB4M2RlZDBkMTUsCisJMHgwM2VlYzQ2NSwgMHhlNTA3NzMzOSwgMHg4OTZmYjAyNywgMHg0ZGY4MDhhZiwgMHgwMTQ3ZjEzZCwgMHg1ZDU4Yzc5YywKKwkweGJmNDAzMWYxLCAweGM5MzY2NzcyLCAweGYyNTdmY2EyLCAweDYzZjdjMmU3LCAweDg0Yjk1MTExLCAweGZiNzFmM2Y2LAorCTB4ODU3OTlmNmYsIDB4Y2FmODVhYjYsIDB4MDNkZjg1YjksIDB4MjIzMTdhZmEsIDB4MThlMmU4MDMsIDB4NTEzYjk3ZDUsCisJMHg4MzA2NTZkZiwgMHg5NDRiZGRiZSwgMHhmYzMwYjZjMSwgMHhjYzBiYTQ1NywgMHgyMGJlYjMzYSwgMHg1NTY2M2Y5OCwKKwkweDdhNDQyZjlmLCAweDZmYzMwYzRkLCAweGUyMTRmOWZkLCAweDA5ZmU4NTg5LCAweDYyN2JiZjllLCAweDFmNWRmNjE0LAorCTB4NTZlYTgyMzAsIDB4Nzg4MzNlN2YsIDB4ZWIxZjdmNjgsIDB4OTg1Yjc1NDgsIDB4MzBjNTM3NzEsIDB4Yzg0ZGRiN2EsCisJMHhmN2U1NzBkNCwgMHgwZjc2NzFmMSwgMHhiMDMwZmI2NSwgMHg3ZjAyZjI0ZCwgMHhlMWJmNWVhYywgMHgwN2U1MzJjZiwKKwkweDNlYWNlYmQ1LCAweGU4MzE2OTRjLCAweDhmMzZkNTZmLCAweGM3ZjM0NzRmLCAweGQxMWY4YzBjLCAweGM1Y2RiMzdmLAorCTB4ZWI0N2I5NDEsIDB4MGUwM2M3ZTksIDB4NGIyMGY0M2MsIDB4MmU1MmUwZjksIDB4YmMzNTk2YjcsIDB4MTNkODI1ZjksCisJMHgzY2M0ZjVhYSwgMHhkY2IzZjY5ZSwgMHg0YTk4M2NlYywgMHgyY2IzM2U4YiwgMHhiZmI2MDI4ZiwgMHgyNWI3M2JmMiwKKwkweDVjNGE1YzgwLCAweDMyZWNjYWQwLCAweGY0MGQ5MjY0LCAweDQzMzFjOTVlLCAweDMxNzkxMGJlLCAweGZhOGY0YjNkLAorCTB4ZTI5ZmUyMzEsIDB4ZTcxODhiZWIsIDB4ODJmN2MwNGMsIDB4ODBmNTA0YzEsIDB4N2E0NWI3MDUsIDB4ZDA3YzIxM2QsCisJMHhhNWExZTFjYywgMHg3ZWI4NGY5YiwgMHg3NjdmZWRhNSwgMHhmZTgxMTk2YywgMHg3MzljYTIzYSwgMHhkYzE2M2U4MSwKKwkweGNmYzU0ZTc2LCAweDUzZmYyNWJhLCAweGFkNWQwMjhmLCAweDY0OWZkYWIxLCAweDQzMzg2NWRkLCAweDYyM2JmZWU4LAorCTB4YzQzYWYzYmMsIDB4Njc1ZTRmNTMsIDB4YTA0Y2ZhZjYsIDB4ODdjNjQwZGYsIDB4MzBlYWNmNjAsIDB4OTQwYTNjZDksCisJMHhhMmNmMTExYiwgMHgyOTFhOWZkZCwgMHhlNjBlY2JlMywgMHgzNjFlOWU5NywgMHgxOTZiZTgxOSwgMHhkZTAzMzdiMSwKKwkweDEyNDRiNTk3LCAweDAzM2YwODRmLCAweGMzZTgxODA1LCAweDNmNjA5ZTdkLCAweDNjZGUzYjRiLCAweGFkZGNmYzBhLAorCTB4MmM5ZDIzZjcsIDB4OGYxMDViMzUsIDB4OWM3YWYzZWUsIDB4NzQzMTY5MDcsIDB4OGE3YjQ1ZjksIDB4OGU1MTIzZmIsCisJMHg5ZTdkNjBkYiwgMHg5ZjQ3YzY3YiwgMHgyNjNmNDkxYSwgMHg3ZWI4ZWZkMiwgMHhmZGYwZWRkNywgMHhlMjI4YzhhMSwKKwkweDRiNzhmYTAwLCAweGYzYTcwZWY2LCAweDgzMmIzNWVmLCAweGVhYmMyODYzLCAweDQ2MGU5NDhkLCAweDczNGUzNzYzLAorCTB4ZDI0M2ZlODgsIDB4NzdmYzZhYWMsIDB4Y2MyNWY1YmMsIDB4NjVkOWI5NjcsIDB4YzJiZTM5MDQsIDB4MzJhN2NmNDEsCisJMHg2NDU3YzllMCwgMHhlZjhhMTUxYiwgMHg5MTg1ZjJmMSwgMHg0NWVmOGY5NywgMHg2YzdmYmY3YywgMHg2NjFmZjRhNCwKKwkweGUxYzdkZDFmLCAweGE1ZWEyM2RmLCAweDcxZjI3ZGIwLCAweDBlN2VhOTA2LCAweDRhNjg2YmQyLCAweDk0M2M3ZGRiLAorCTB4M2U3OWYzZTcsIDB4NjA0YmQ3OWIsIDB4OWY3YzFkZjksIDB4ZWFjYjljN2MsIDB4YzVmMWM3NjksIDB4M2IzNmZlMzAsCisJMHhlMDE1YjFkNiwgMHg4Y2Y5ZGI0NSwgMHgyMmZiMTc0MCwgMHgxNmI3YThiYywgMHhmYzA3N2U1MiwgMHhlYTNhNmQ2ZCwKKwkweGVkYWY5NGFkLCAweGM0ZDk3YWMwLCAweDRjZjU4ZDE3LCAweDAzNDg1NzI4LCAweGNmYjA3YmU1LCAweGNmODQxNDhiLAorCTB4Mjc0YTUyYTYsIDB4ZDdiMDNjYjQsIDB4MDRhZWRiNjQsIDB4YTlmMDJhZjEsIDB4OGM3YjYzYzUsIDB4YzNjOWVmZjQsCisJMHhkNDNlOTI1MSwgMHg2MWU1NDI4ZSwgMHhhM2IzMGM3YiwgMHhkMjdmNjExOCwgMHg5ZTk5MTg5OSwgMHg4NWYxMGMzNiwKKwkweDNlNWYyMjc0LCAweDYwOGM2ZWJlLCAweGY0ZmJhMDc4LCAweDdiZDQxOGI1LCAweGZiYTEzOTdkLCAweDk3YzcwNGU1LAorCTB4MGYxZjY3ZTAsIDB4OGFiNWUzNTIsIDB4NWU2ZGUxZTMsIDB4OGQ4YzUxNmYsIDB4MDA3YjRmYzksIDB4MzFjN2RkZjcsCisJMHgxNjVjN2VhYywgMHgwZjQyNDM5MywgMHhjYjg3MDNmZiwgMHhjODU0OWE0ZCwgMHhkNTUzMzE5NSwgMHgxYzRkYzVmYSwKKwkweDQ0YzUzNzlmLCAweDA4N2ViYzA5LCAweDg4ZjIxNWYzLCAweDM0NWYxN2YyLCAweDVlMGIwZmRkLCAweDIxN2YyMTM1LAorCTB4YjBkOTAzMWIsIDB4NjNiZDY4ZmYsIDB4MmMwYTZlNTgsIDB4ZTQ3MmE1OGEsIDB4MThkZmFhMjYsIDB4MjJkZGIxZjMsCisJMHgzY2VmZGY2OCwgMHg4NWQwNGEzZiwgMHgzZTljODA5NSwgMHgxODUzZDYyNSwgMHhlNTRmN2U0MCwgMHgyOTZiYWUxZCwKKwkweGJhNDM3Y2ExLCAweGQwMzdmZTM0LCAweGQ2OTRjOTNhLCAweGQ4NTYwYzg3LCAweDAzYTY0ZWY5LCAweDIwOGZlZDAyLAorCTB4ZTE0N2Y0MGEsIDB4Yjg1MGU3ZmUsIDB4YzYzYmM3NmIsIDB4MzE5ZmUwZTksIDB4OTZmMTFlOTIsIDB4OWY3MGYyNDcsCisJMHg3NTg1ZmZiZCwgMHg5Y2YyZWQyMSwgMHg1MWQxZWNjZCwgMHhjZWI4ZmZiZSwgMHhlOWZhMDE3NSwgMHhkNDJkZmRiYSwKKwkweDdkMTk4ZmNiLCAweDMwOTZhZGQ5LCAweDYzZGY0NmU1LCAweGYyYzE0OTBmLCAweDNkOTczZmM1LCAweDc2MmZjYTQ2LAorCTB4ZTRmZDc2NzcsIDB4YTVlZWJhNjYsIDB4ODYxZGIyOWQsIDB4NWZlNzdhNWMsIDB4N2EwMzFkZGYsIDB4MGVjMWE3NzUsCisJMHhkZjJhNDZlNywgMHhiY2MzZDVlZiwgMHg3OTFlOTgxYiwgMHg4M2E2YTc0YywgMHg5ZjU1ZGZiMywgMHgxOTYyZDI3MywKKwkweDgzZGVhOGJlLCAweDNiZTA5Y2ZhLCAweDRhZGY3ZTQyLCAweDVjODE1NzdjLCAweDQ2MWM0NjVmLCAweDY2YjRmZjQ4LAorCTB4ZTE0MjBjZDUsIDB4MGViMmMyYjcsIDB4NmJlN2QxZjksIDB4YmMxZWExYTcsIDB4N2NiMDc4OTIsIDB4NGZlMThiNTksCisJMHg0NTYxZjJhMSwgMHhlYWJmM2FhYiwgMHg1NmZlNzU2MSwgMHg2N2RmM2FhZiwgMHgyZjBmMmU3ZiwgMHgzMmM3YTdkZiwKKwkweGQ5NGIzZTNhLCAweGIwM2ZlMDNlLCAweDNkMDVlNGMxLCAweDk4YWY1YjQ4LCAweDNjYTRjYmQ3LCAweDI0ZjgxM2IxLAorCTB4NDc2MGZiOTUsIDB4NDhlMTE3NTgsIDB4NmViZWJlMDQsIDB4YzVlMjY5NmYsIDB4ZTdmNTdjZWMsIDB4MTBkZTIxYWYsCisJMHgzN2E4MjM3ZCwgMHg2YzZmMTJlNCwgMHg2M2NiN2VmZiwgMHhmNDIzODQxNSwgMHhlMDcxZjBhYiwgMHgyY2I2NzFiYywKKwkweGM2MjYzYWZjLCAweDEwNjUzZDBhLCAweDhiYmUyN2Y2LCAweDQ1ZTM4MjdlLCAweGNmZWEzY2UxLCAweDhmOTgwNzliLAorCTB4NWQ5ZmRiMDUsIDB4MWI5YzdlMTksIDB4YTliMWM2ZmEsIDB4N2RiMDY0ZTQsIDB4ZmM2YjkzMWMsIDB4YTNlODJkMWMsCisJMHg3ZTEyN2NmZSwgMHgwN2ExNzkxNywgMHgzMWE1ZGIwNywgMHhkOWE0OGFmZCwgMHhmOTA2NDU0ZSwgMHg4YjYzYjA5NCwKKwkweDIyNDI3MGZkLCAweDNiYjQ2NGU2LCAweGViY2ZjZmRkLCAweDVmYjA1Y2Y2LCAweDA4M2QwMDlmLCAweDY1MTRlM2Y2LAorCTB4NzE0ZTlmOWYsIDB4NjZjNmY3ZDksIDB4ZjcwNjg3ZWIsIDB4OTQxZDc2OGIsIDB4NDNmOGNlYWUsIDB4NThiMmVlZjgsCisJMHg2YjhlMWM2YiwgMHg1NzE4NzYyNywgMHhkYmEyZmJkMCwgMHhlOGJiMDYyYiwgMHg2Nzc4ZmY3YywgMHg1NDZiYTI3OSwKKwkweDMwZjUzZjI4LCAweGU4NTE4OWJmLCAweDljOTUxNjVmLCAweGJjMzkxYTI1LCAweGQ0MmRmZGFjLCAweDk1YmVhOGJiLAorCTB4ZDNlNzRjMGQsIDB4YmQyM2I3YmQsIDB4MDRjZTI0YWYsIDB4YmQ5ZWYzYTAsIDB4ZmY1YzMzYzMsIDB4ZjMxNWZjODYsCisJMHg2MjU5ZTU5OSwgMHg5YmE3OTgyMCwgMHgyYWJmZWU5OCwgMHgxZDU5OWYzZSwgMHg5OWQzZWY0YywgMHhjNzFjMDYxZCwKKwkweDAyNWIxNDQxLCAweDdjZDlhNTFlLCAweGQzZDRmMzI5LCAweGY5YmU4NGZjLCAweDkwOGU5MTgzLCAweDEyZmU3Y2YxLAorCTB4OWRmMGE3YjQsIDB4ZDRiMjUzYzAsIDB4MzZmMzA0OTUsIDB4YmM3NGI4YzEsIDB4ODI0ZGUyMDgsIDB4NWRhYzY5YjQsCisJMHhlNGEyNzQ4MSwgMHgzMDc5YjNkNCwgMHgwZDI2NGYzYywgMHg2NzVmNTA2OSwgMHg5ZDZjY2JmNiwgMHhkMDA5MDY3NCwKKwkweDk4NWUwZmJlLCAweGM2ZmNmMmI3LCAweDU2OGJiZGQ5LCAweDE1OGI3N2MwLCAweGNmOTE4OGY5LCAweGU1MmM0NzYzLAorCTB4MmZlNDY2ODcsIDB4YzliNzU4NjYsIDB4ZmQxY2ZiZTIsIDB4OTRmNTNjNjQsIDB4M2Q4ZmI4MjksIDB4M2JkYTA5NDMsCisJMHgwMjM2OTEwNiwgMHhlNzJjNWFlMywgMHgxYjU4YjAzYywgMHg4ZjkwNDliMSwgMHhlMGZhZjViMCwgMHg2NmNlNzBmYywKKwkweDIzNDZlOGYxLCAweDBiMTlkYzlmLCAweDY3N2E1MjdjLCAweGYyODVlMDI1LCAweDE5ZmY2NjY1LCAweGMzZWY1Y2E4LAorCTB4NzNlMGI3NzMsIDB4NGQ3ZTdjMzEsIDB4MTMyNWNmOWMsIDB4ZTI1ODg3MDYsIDB4YjAxZWYxYzAsIDB4NDA0MTljYWUsCisJMHg0OWQ2NTk4NCwgMHhkNDRiN2VkMCwgMHgyNWVmZjQ1NCwgMHg3OTY5ZTAwMCwgMHg4YWJkNTRlYywgMHhkNTNiYzU2ZiwKKwkweGVhYjljNGY5LCAweDlkNGJiMjdjLCAweDNmOTNkMzM3LCAweGNmOTI4YmU4LCAweDE2MjE3NDk5LCAweGMwMjM1OWNmLAorCTB4ZmNlMDYyZGUsIDB4ZWJjZjk5YTIsIDB4M2Q3NGE0MDgsIDB4ZmQzZTcxZWYsIDB4YmIxM2Y1OGQsIDB4OGVlZWJjZmEsCisJMHhlM2I0MTIzMSwgMHhkMGNkOTgyNSwgMHhkZTU3ZDUzZiwgMHhjYWZhNjU4YiwgMHg5NzI4MWUyNywgMHhmM2NmYzgwMywKKwkweGMwZjliNjI2LCAweDgzN2NkM2FlLCAweDdlOGJiZjY0LCAweDFiMmFiNjZmLCAweDNkNTQ5NGY0LCAweGM3NjYyNGQzLAorCTB4ZjU0YWRiZDEsIDB4ODY1YjdjYjQsIDB4ZTY4OWJlY2QsIDB4MWQ3ZWMxZWIsIDB4ZDViN2YzMGIsIDB4NDlmNjhkM2MsCisJMHgwMjQ3YWIxMywgMHhkYzhmZTBjZCwgMHg4MzY2YzliNiwgMHg4MWU1NzE3YSwgMHg4YmQwNDZjOSwgMHg3NmRiMTA1NywKKwkweGJmYmU4NjEyLCAweGNlODZmYmEyLCAweDUzYzgwOWY3LCAweDVlOWM0OGJjLCAweGYzMjkwZjIyLCAweDdjYmMwZDcxLAorCTB4YzU5ZGZjMDcsIDB4ZTE4YjEzZjIsIDB4NjVmZWNhNWMsIDB4M2E3NWU0NzUsIDB4OTBlMGVlYzAsIDB4NzdkNjJlNTEsCisJMHhhMTZlYmRlNCwgMHhjZWNkNjVlMywgMHhiM2JjM2I0MywgMHgwOTczZjk5YywgMHgzNDYzZjdkZiwgMHg5MDVjNmFmYiwKKwkweDhmM2NiMWNlLCAweDcwNzU4N2U3LCAweDg5OWM2ZWJiLCAweDc0NmQ2YmY5LCAweDM2NjY2Mjg4LCAweDhjNzFmYWMwLAorCTB4ZmM0NGVkZmUsIDB4NWFmMmZiNjMsIDB4ZmQwN2ZjMTIsIDB4NDdmYjA3OTUsIDB4NTgyOTM0M2UsIDB4NzQ2N2RjMWMsCisJMHhiZGIzN2NhOCwgMHgxYmQ2OTZhOSwgMHg4N2VkZjdhMywgMHhhNzhlM2M3ZCwgMHhhMzdkM2M3OSwgMHhiZjk0MDZmNCwKKwkweDYyOGIzYTlkLCAweDZkN2RiMWQ0LCAweDg2MTMwMmNlLCAweDE0YjgwNjUzLCAweDA0ZDA3ZWRiLCAweDdjOTA0Y2ZkLAorCTB4YmQ0YzY2OTgsIDB4NWZhNjA5YmYsIDB4ZDE0N2VkYzUsIDB4MDZlZjQ2NDksIDB4MTJhNjhlYmEsIDB4NzdiNDY3OGEsCisJMHhkODIwZjlmYywgMHg0OTA3ZTVhNSwgMHg4OGU5ZTAwMSwgMHgwNzM5Yzg0MSwgMHg3YTE1ZDM5ZSwgMHgzYTFhZmIxYywKKwkweGZkNDA2Yzk4LCAweDJhOTMyZmZjLCAweGQ1MDEzYmYwLCAweGQyYmJjZThjLCAweGJlMjExNmM2LCAweDc1NWYyYzBmLAorCTB4ZTM2YTNmMjgsIDB4YjMzN2U0NjQsIDB4NmFiZjMyYTYsIDB4NTdiMzVjZmQsIDB4MTBjZTQwOTIsIDB4YmJkMjc3ZTYsCisJMHhiMTBhNmYzMiwgMHhjNDNmMDg5NywgMHg3NzMyMDZmYiwgMHg0NGYzOTg1NywgMHg0ZmQzMWM2ZCwgMHgzYjMwNjZhYiwKKwkweGEzNDZmZDZmLCAweDFkNTM3ZmNhLCAweDMzNWVlY2M3LCAweDhjOGYyNmUzLCAweGZjYzQ3OTQzLCAweDVjNzE3OWE3LAorCTB4NDY0MTFiNmYsIDB4ZTEwYTlmMDAsIDB4YWY1MDQ1MjMsIDB4ODFlZGY0YWIsIDB4OWNiYThjZjgsIDB4OGUzOTk5ZjMsCisJMHhmZGVhMDMwMiwgMHhiZTA4ZGY5YywgMHhmNmM0MWNlZSwgMHhkMjQyM2NmMywgMHg5MzY3YWU4MSwgMHg4N2ZmZTQwNiwKKwkweDdlNDU2ZjRiLCAweDE4ZjExMzczLCAweDk1MWY2ZjAwLCAweDMxMDI3OGIxLCAweGQ1NTM1OWVmLCAweGE3MWNkMjdhLAorCTB4NWNmMzdmM2EsIDB4ZjBjNTFlYWQsIDB4ZTc5ZGM2MjEsIDB4MDk1Nzk3NTIsIDB4NWFhYTc4M2QsIDB4ZmZmMDVlMGYsCisJMHhiOTQ2OGFiZSwgMHhkZDU0Zjg5YSwgMHhlN2UwMjE4NSwgMHhjMDAwZjY2MCwgMHhlODczZjMwYiwgMHgxYmRjNmU5MSwKKwkweGJlYmMzZjk5LCAweDM4OGRlZjNkLCAweDEyNzc2N2Q4LCAweDQ5NzZjZmJlLCAweGIyZmZkMWNiLCAweDgyMTE1YTRiLAorCTB4YWY1YWQ0ZmYsIDB4Yjg2NDcyMDQsIDB4OTg3ZGQ4NTUsIDB4NzkzNGU0ZGUsIDB4YzNkZjgzZjcsIDB4OTExMjgzNTksCisJMHg0OWUzY2ViYywgMHg0OTNjNDAwZSwgMHhhZGJlOTA3ZSwgMHg1NzE2NTY2NSwgMHgzMGI1MWM0MSwgMHhhNDViMzQ5ZiwKKwkweDE2ZmVmNDFkLCAweDY1ZGEzZTVkLCAweDJhYWNhMjViLCAweDBkYTZmYTNiLCAweDEzZDQwNTRhLCAweDQ0YzU1OGY2LAorCTB4NmU5YzZkZjIsIDB4ZDc3NzlkYzIsIDB4YmFmZTMxYzUsIDB4NzE3NjYyNTksIDB4OWUzMzNjY2YsIDB4OWNiM2UzMmIsCisJMHhiYzQxM2YyYSwgMHg5ZDgyOGU0YywgMHgyMjljNjQ3MCwgMHg2M2ZkYTNlYSwgMHg1Yzk1YzFiMywgMHg0NGFmNTM0MCwKKwkweGQyMTcxMTk3LCAweGQxMWIyNjVlLCAweDRmZTFhOGFlLCAweGI0NzZiMWYxLCAweGNlMGZjN2ViLCAweDljZmQzYjQxLAorCTB4MmZiNDNjOGUsIDB4ZmQ4NDRiMTIsIDB4ZmZkODI5MmEsIDB4ZjRkYmQ5OWMsIDB4ZGY1M2E3MTAsIDB4ZGNiZjRkYjEsCisJMHg3YmJiYTQxMiwgMHg4ZDVjYjhlMiwgMHhhZjQwOTEyNCwgMHhlN2JhNzY3ZCwgMHg3YmE3Njg0YywgMHg1ZmZjZTc1YywKKwkweGEzNWFjYmEwLCAweDIxNzFlZDBmLCAweDA3ZGY4YWY0LCAweDM4YWI4YjkyLCAweDljY2ExOGJkLCAweGY5ZDA1NmYzLAorCTB4YjQ2YmJjZjUsIDB4MWQxOWY5YzMsIDB4ZTdmZmI0NmQsIDB4OWRhMzQ0ZjcsIDB4NTA0NTVmNTEsIDB4NjUyYzZkM2UsCisJMHhlYzA3YTQ3YywgMHg5ZjFkNzQ1ZiwgMHhmOWUzNTc0NSwgMHg4YWQ0YTM2MCwgMHg2NjNiYTNmMiwgMHg2YWYxZDIzMiwKKwkweDA3M2MwMWNiLCAweDc0YTU2ZjU3LCAweDU2OWYyMjE4LCAweDZiZTc1MGVmLCAweGRmOWUyNzQ4LCAweDQ3ZWU5ZjZiLAorCTB4MDUxN2M4Y2YsIDB4NTZlZjc2MWYsIDB4ZDRjMzIzYjcsIDB4Y2I4ZjM3N2MsIDB4N2RhNzdjOGIsIDB4N2Q0YzA1NTYsCisJMHg5ZDhiM2RhZSwgMHg4NjQxZTljMywgMHgxZGU4YTNhZSwgMHgyZWVmYjcyMywgMHgwMDhhOWRiMCwgMHg3NDk0ZmI1NiwKKwkweGM3YWRmZDMxLCAweGZiNjY1YTdhLCAweDIyODNjOTlmLCAweDZlNTY4ZTNlLCAweGVkYmQ3MTE1LCAweGUwYmZjYTNhLAorCTB4YjBmNDJhZmMsIDB4MDdmMmMyMjIsIDB4OTI3MjFkNzQsIDB4NDJkZjM4MmUsIDB4N2ZlODRlZGUsIDB4N2MwODRlNDIsCisJMHg1MjEwOTY5NSwgMHhhNzQzZjc0MiwgMHhjOTQzNGZlMCwgMHhlZDM3YzA1MCwgMHgwNDg5ZjcxZiwgMHhkODMxNDM5MSwKKwkweDdkY2UwN2JmLCAweDk0NzhmOGUzLCAweGI3MjAzYzFlLCAweDE3YjMzYTNkLCAweDZhNTlhYmU4LCAweDA2NjkzOTQwLAorCTB4OWJhNjlmM2QsIDB4ODNjYTE3MjQsIDB4MzIzZGFhOTcsIDB4NjkyYzdiYzAsIDB4ZDY4MzM1OTgsIDB4OGNlZTZmMWIsCisJMHgzYTUxMzgwNCwgMHgzZjRhMTIzOSwgMHhiMTk3YzQ0ZCwgMHgxMWQxNTI0YiwgMHhiZjQ1Nzc5NiwgMHg4NDhlOTYxZCwKKwkweGM0N2RmMzNjLCAweDc0ZTk5OGY0LCAweDA1NGZkMGM1LCAweDdhNjg3ZTM4LCAweGM4ZTc2MjQwLCAweGViMWY5NjI5LAorCTB4YmFkYmZkYTEsIDB4NTMyNzQ4NjksIDB4ZjMwZjU3ODksIDB4ZjFhOWIwYWIsIDB4OWQ0OTI1M2YsIDB4YTNmNGE2OWYsCisJMHg3MGMzOGMwZiwgMHgxZjRlNzg3MCwgMHgwODc3MmVhMSwgMHhmY2Q0NDc3ZSwgMHg4NTdjOTMyZSwgMHhjMWY5MTg3YSwKKwkweDVkODBlZmMxLCAweDE5M2Q3MjIxLCAweGQ1MGRmYTAxLCAweDZhMWY3MTQ0LCAweGI4ZWJlMGU5LCAweGYyNmZkZDZmLAorCTB4YmYxODVjNzUsIDB4MTNiNzBmNDksIDB4MmJmYzRiNWYsIDB4ZDNmYTk2OWYsIDB4ZWIxYmY3NTksIDB4N2ExMGE0ZTUsCisJMHg2NWUyZmIxNCwgMHg5MDdmOGIwMywgMHhhOWZlNjU1ZSwgMHhlNTE5MzMxMiwgMHg2NDJhZmEwMywgMHgzZmIxNDU3NiwKKwkweDhjZmEwNWFlLCAweDMxNWRkMjA5LCAweGNmMTE5ZWZmLCAweDE5MDg2Y2U5LCAweGExMzY3NDAyLCAweDUzMjdjMjNkLAorCTB4ZmVmMWU0YmMsIDB4Y2JiYTA1YWUsIDB4ZTIyM2VhMGYsIDB4ZDI1NGQxNWMsIDB4YTUzMmJlOGYsIDB4NzA1ZmQ0MmMsCisJMHhhNDdkMDlkZiwgMHhkMjZiNmE0MCwgMHhiOTFmMDI2NywgMHgxYmU2MDlhNywgMHhlMzQzNGY0MiwgMHg1MTJmODA4YiwKKwkweGRhN2RjMjdhLCAweGNiYWFjZTRmLCAweGYwMjZmNDM1LCAweDUyZTVmNDJlLCAweDM2NzQ4MGQyLCAweGVhNjBhNzViLAorCTB4ZjI4NTVjYWIsIDB4NWIzMmRjYjUsIDB4YWNkZmVkMGYsIDB4MDkzNmY0NjIsIDB4ZWEwYjMxZTgsIDB4ZGNhNWU5YWIsCisJMHhlOTZiY2VhYywgMHgwYmE4OGU5MSwgMHg5ZjRiNTcxZCwgMHgxMGRiZDEwMywgMHg1ZjIxMzdhMCwgMHg2ZjRkMmY2MywKKwkweDc1YmZlM2QzLCAweDdmMWU5YjdhLCAweGQyZDM3YTExLCAweGJiNWZlMDk5LCAweGEwZTU2YzIyLCAweDRiNTdkNzNmLAorCTB4ZGUwYTBmMjgsIDB4ZjkwNGQ2MWQsIDB4YTg5OTc1ZTEsIDB4YjY4YWVmNGYsIDB4ZGY1ZDdlYTMsIDB4M2IwYmNhYzAsCisJMHhiZGM0MzIxZCwgMHhlNWUzYWQ2NCwgMHhjODcyY2U5OSwgMHhlNWE3YWZkNywgMHgyM2EyZWJiNCwgMHhkODY2MmUyYywKKwkweGVmM2NhYzlkLCAweGFkZDc4NmFlLCAweDU4Nzg2N2EwLCAweDZmM2Y5N2ZiLCAweGI5NjhhMzk2LCAweDJmYjc5OWI3LAorCTB4N2M4NzJkNmQsIDB4ZmY2YjBiN2QsIDB4NDZhOWY4MTksIDB4Yjc5YTdjNDMsIDB4N2Q1ZmJlMDksIDB4MWQ5ZGE2NmYsCisJMHgzZWZlOTlhYiwgMHg5Nzc3YWY5MSwgMHhkOGViZGNmNCwgMHg1YmI1OTVhZSwgMHg4ODNjZDA3NSwgMHhlOTlmZjllMCwKKwkweDc1ZjFkN2U1LCAweGQ2Y2FkYzRlLCAweGZhZTI3NzE5LCAweDhiYTUwYWE5LCAweGVhMGYwMTE1LCAweGI1NzRhNzZmLAorCTB4MDZkZmM4YzUsIDB4NGE5NzNmMzgsIDB4NGU5MDY5YWQsIDB4NTIxN2VjYTEsIDB4MjJkZWQ5ODcsIDB4Y2M3ZTY1MGYsCisJMHg3Yjg4NzRlZCwgMHg0NWZkOTllMiwgMHhjZTIwZmZmOCwgMHg5ZjQ0MzJhMCwgMHhkOTllMjdiOCwgMHg4NGJkNDU2MywKKwkweGEwMDE4YTE4LCAweGE4YWM0Nzg3LCAweGE0ZmYwYjVmLCAweDgxMjIyMWVmLCAweDcyMzU4N2JjLCAweGJmYWMyNDNkLAorCTB4MDM1NjRhNzIsIDB4ODY1MzExZWEsIDB4NWZhNTNmMDgsIDB4OWI4ZTk0YmYsIDB4Yzk4YmUxNzcsIDB4M2Y0M2VjZTEsCisJMHhlNjllZTNlMiwgMHg3YTdkMTM3MSwgMHgwNzUzMzdiMiwgMHg4ODBiYjE3NCwgMHhmNDgwMDUyNCwgMHg3ZjQxYWZkZSwKKwkweDQ4N2UwNWRiLCAweGE0M2NhNDI2LCAweGYyY2FmMDA0LCAweGJkN2ZlMzViLCAweDg1M2M2NWE5LCAweGVmNDFhZWFmLAorCTB4MjE5NmExMDEsIDB4Y2NjOWRjNjEsIDB4MWMxYmUyNGUsIDB4NTNmZTdmZDUsIDB4YzQ2N2M0ZjQsIDB4ZmYzNjI2MzgsCisJMHgxZTU0NGQ5NSwgMHg3ZTMxZDEyMywgMHg4ZmUzODczNiwgMHhlOTBhYmY4YywgMHhkM2M3MzY3NywgMHgyYTdmMDVjZiwKKwkweDlmYzAwNTIwLCAweGRkYmM3MGU2LCAweDM0N2FhNjY0LCAweDgzNTZjM2YyLCAweDEzM2M2Zjg2LCAweGNiNmE3MjBmLAorCTB4YmFiYmZhODAsIDB4YWE1N2MzNWMsIDB4YjkyYmI4ZjksIDB4MDkyYjdlZGUsIDB4NGE3MjdlYTAsIDB4N2E3YTYyZjIsCisJMHg2YmRiZDMwYiwgMHhiZjUwNDcyYywgMHhlOTg0NzllOSwgMHg4ZmM0YjVlZCwgMHhiZWQ2OGZmYSwgMHg5ZDUzYjM1OSwKKwkweGU3NTM2YmFmLCAweGY5ZDVkYmViLCAweDhlMGYxYzllLCAweGFlYTViM2QzLCAweGQ1OGFlYzE4LCAweDc2OGJiZjBmLAorCTB4NWZjMTZhZWMsIDB4NDJmZTZhYmMsIDB4NWZjNjcxMTUsIDB4ZWQwNmJhMWUsIDB4NmY5OGRmNTEsIDB4NmY0ZjRkM2MsCisJMHhkMGI4YWFjNSwgMHhmYTljMDJkZiwgMHhiMjJmMzVlYywgMHg2MTM3MTRmOCwgMHhlYjFlODI3NiwgMHg0ZTcwZjk4OCwKKwkweGE0NzkxYTI1LCAweDljNzkyN2U1LCAweDg2ZmIwODlmLCAweDg0NzkyZmUwLCAweDhlN2EyM2M5LCAweDgyNDFkNzdkLAorCTB4ZDdhYjVjN2MsIDB4YmQ3M2M0ZjUsIDB4ODRkMzlmOTcsIDB4ZmEwNzkzZmUsIDB4MzVkM2QwMGYsIDB4NDE2NDQ4MGQsCisJMHhkYjdmNjQzOSwgMHg5ZmM4ODcyNCwgMHhjMDY2ODU3OSwgMHhlZTk5YmU3MywgMHg2Yzk3ODA2NywgMHg1NDU5NzFjOSwKKwkweGNhMDVmMGY0LCAweDdiY2Y4MTk5LCAweGJkMGQ3MmVhLCAweDJkZDZmMzg4LCAweDgxNjY1ZTljLCAweGZmOGU4NTI3LAorCTB4ZTc4MWM5N2IsIDB4MzJiN2MzYmEsIDB4NTk2Mzk5N2EsIDB4ZDFmYWY0ODcsIDB4ZTIyZjQ2NmEsIDB4ZTdlNTc3ZGMsCisJMHg0ZGZjODczYywgMHg3NDdkNzljZSwgMHg1ZWY1NDExMiwgMHgxNzQ5MWU5YSwgMHg4ZmU2N2NlNywgMHgxZDE4OTdhZiwKKwkweGY4N2Q1NWQ0LCAweDgyY2ZlODE4LCAweDI0NmUxYzJmLCAweDNlMTBmYWYxLCAweDY0Y2QzNGQxLCAweDkzNGEzYjA2LAorCTB4YWE4MzlkODEsIDB4YmM1YzdmYTYsIDB4MzhjZjg0MzQsIDB4MTMxMzRhMjIsIDB4ODhlZTU5NDAsIDB4NWQ2Y2ZiNDcsCisJMHg2NjljN2FhNCwgMHg3ZmJiZjNhOSwgMHg0ZmQyZjM4MCwgMHhkNDRlZDEyMywgMHg5NTQxMzBmYiwgMHg3MGViNzdhNCwKKwkweDZiM2VkYjhjLCAweDMxNTI3ZTYwLCAweDc3MDc1NTlmLCAweDdlYzNmM2VlLCAweDA4ZWJmZjVjLCAweDM1OWY5NTNkLAorCTB4NWFjNWY3OTIsIDB4ZTRjNGI2NWEsIDB4NmE3MTg2Y2EsIDB4YjMyMzNlNzQsIDB4NWZhMjc2NjMsIDB4YjAzYjhjNTcsCisJMHhmMjgzZDY1ZCwgMHg5MzFhZjhkNSwgMHgxMDY5MDFjMywgMHhlZmQyZTFjNiwgMHhiNWZlYTFkOSwgMHg0ZjhjODlkMSwKKwkweDJhZWIxMWRmLCAweGNhMGY4ODQ4LCAweGE0M2Y2MTRiLCAweGM2YTQ5NjUyLCAweGMxMjZmZDA0LCAweDM3NjYwNmY4LAorCTB4NWM3MTBiZjksIDB4NjM2MWJlMzIsIDB4YjY5ZTdkODgsIDB4NTY4ZjFiMGYsIDB4ZjVmOGMwOTYsIDB4NjFjZTI5ZjcsCisJMHgxZGEzMDdkZSwgMHhkMzlmMzBlNSwgMHg5YTdiOGZkYywgMHg0NzRlZmRmYiwgMHhjY2UwM2YzMSwgMHg3NTJjZmFiZSwKKwkweGY3MzRmNGYxLCAweDUxOGU5ZTEzLCAweGJkNDQ4N2ZiLCAweDhlY2MwOWE1LCAweDZjZDFiMjcyLCAweGJmMDdhOGRlLAorCTB4MWM2ZjMxM2EsIDB4MjFlYzQ5NDYsIDB4OTNjNjAzNTMsIDB4ZWE3ODYwMmMsIDB4NmRiZDEzZDksIDB4YTVmZjg4NTMsCisJMHhmYmY0YTEyZSwgMHhkODdmOWYzMCwgMHhiYTQzMzc5YywgMHgzMWI4ZjViYywgMHgyM2RmMGVkNCwgMHgwZjc3ZjNiMSwKKwkweDA4OWU5N2E3LCAweGViNzE4YTk2LCAweDBmYmYyYTEyLCAweGU3OTllYzc4LCAweGU1ZjYzYzQ3LCAweDEzYmM4YWM3LAorCTB4YzA5OWVmZmIsIDB4ZmU1ZjZiZjgsIDB4Yjg0ZjJjM2IsIDB4ZjVkODQzZGQsIDB4NjlmN2YyMDcsIDB4ZDA1NDdiZmQsCisJMHgwNDQwNzNiMCwgMHhmZDZiY2ZiMywgMHgzZjA1MGJmMywgMHgwNWY5ZmVlMywgMHhlYzJkMWY5YywgMHg0NTgyN2U2MCwKKwkweDRhOWNkMjY2LCAweDI0NzcxN2NiLCAweDk0NmU3M2IyLCAweDlmZTU1YjI3LCAweDUxNWU0NGY3LCAweGNiYTA4NjNjLAorCTB4M2VjZWY0OWUsIDB4MjEyM2Y2N2YsIDB4ZWUzYWVjZmUsIDB4ZWIxM2FjY2YsIDB4ZGY1ZWFkZGIsIDB4YmFkZjA5MDMsCisJMHg4NDgxZmIzZiwgMHg2ZDZjZmUzMCwgMHhhMDhiYzNkYywgMHhlMjBiMGM0NywgMHhjMThkYWQ2MSwgMHgyZGFlNDJhZCwKKwkweGVmNmY3YjA3LCAweGU4NzE4MjcyLCAweGQ2NWFkZjZiLCAweGI1ZTBmNjA0LCAweDJhMGIwMDNmLCAweGE3ZDQzMWYyLAorCTB4MDc5YzM4ZWIsIDB4NTNiYzU3NWEsIDB4OWQ5NTE0NDcsIDB4NDI1MTEwN2QsIDB4OGFlYzlmZTYsIDB4NDM1MWU1NTEsCisJMHg0ZDAzODkwZiwgMHhiNTUxNGVhZCwgMHhhYTE4NmY0ZiwgMHhmZDY0M2ZhYSwgMHg0Y2YyYWEzNSwgMHg5ZjJhYmU0ZiwKKwkweGFhYWQ3MmQ1LCAweDY1YWQ1NWZlLCAweDg3ZjBmY2FhLCAweGNmZDU1N2FmLCAweGEzMDc0MzIzLCAweDBjOTBlY2ZkLAorCTB4YjU3MjIxYjYsIDB4M2U1NTRhYjcsIDB4YWEyZGU3NzIsIDB4ODY5MTlmZjYsIDB4YmQ2OWUzY2QsIDB4NzlmZTQyZGQsCisJMHg4YWEzOWQxYywgMHgzOWNlNzE4MywgMHhlZDU1NGI2ZCwgMHg2MmI2YTQ5YiwgMHg5ZjQ2ZjAxZiwgMHhiZDY4OTNlNCwKKwkweGNiNWYxYzE1LCAweDYyZmY5OTNiLCAweDU1NmFmYjc0LCAweGQ4YTM2N2ZmLCAweDVmYWQxODNkLCAweGEzMmU3Njk2LAorCTB4OTEyZWQ2MWUsIDB4N2VmZWE0NDcsIDB4ZmI4ZWVhZGEsIDB4YThlZTIxOWIsIDB4ZjI5NmJmYmYsIDB4MzU2ZWRhNGQsCisJMHhmZTgwYmYzZCwgMHg4ZTZmZDVhNiwgMHg1ZDNmNzAyNiwgMHg3NDYxNDkwYSwgMHgwYjBiYTVhZCwgMHg1YmJkN2ZlYSwKKwkweGU2MjdiNDY1LCAweGM2ODdlYzkxLCAweGM0MGNiYzIzLCAweDVmYzdmNGFiLCAweGFlNzY2MTJmLCAweDc2YWRhN2RlLAorCTB4ZjU1OWZmODgsIDB4NDdhNDMyZDYsIDB4MmU5YTkyNTMsIDB4NWQzNTE0MjIsIDB4ZDM1MDhlNDQsIDB4YTZhZWQ1ODUsCisJMHg2YTI1YzE4MywgMHgzZGMyZDAzYSwgMHgwYmE2YTFkYSwgMHg0M2ZmYTdlMiwgMHgyYWUwMmRlMCwgMHg1NTNiMWVlMCwKKwkweDc4NWEzNzRkLCAweGRhMDA5M2U3LCAweGM5NWVkZGQ5LCAweGZjNjEyM2VlLCAweDcwZGJlZGUyLCAweDFmZDI5NzVkLAorCTB4Zjg2YTg5ZjUsIDB4MzQ3MDFjMTYsIDB4MmM2ZTEwNTksIDB4NjFlODRjYmUsIDB4NjhmZmFlMjYsIDB4YWY0MjEzZmQsCisJMHg3YWU0NGI4OSwgMHhmODQ3ZWYxNSwgMHgwZjI1OWExNywgMHhmZTdkNTFlYSwgMHg4NjVmMTJjMiwgMHhhN2Y0MTMyZiwKKwkweDQ0ZWNjMjA2LCAweGYwYzRhNGNlLCAweDNlZmM0Njc2LCAweGMwNTE5ZDkwLCAweDI2MjBmNjc1LCAweDAzODg2YjJmLAorCTB4ODgyYmUxZWQsIDB4YzlkZGY5MGIsIDB4M2VkMTViY2EsIDB4NjNmMmNhYjQsIDB4YWQ5ZWJiZjQsIDB4MzU1MjdhNjIsCisJMHhiZjlmMjJmMSwgMHhhYTAyYjhlMiwgMHhmYjEwOTI4NywgMHg1MjhlMTZhYiwgMHgwMmIzZTQ4NywgMHgyMGYyZTFiZiwKKwkweDc5MDg3NDg1LCAweDEzNzhjMmUwLCAweDYyZTY4NjRhLCAweGFkNDcxZjk1LCAweDMwZGY4MmU3LCAweGJkMDk3Zjg0LAorCTB4ZTAyNzhjNTcsIDB4MTg5YWY4MjksIDB4ZTQxYTQ0Y2YsIDB4MWExN2Q4MjQsIDB4Njg0NjQ3M2UsIDB4M2I2YTQ4ZmQsCisJMHhlMGYzYjA4ZCwgMHgyMmZlMjE2MCwgMHg0NDI2NWRhZCwgMHhlOTkxNmUwZiwgMHhjYzkwZjIzOCwgMHg1N2YxNDIyNiwKKwkweGRkYTA3MzYwLCAweGNlNzQ4OGFmLCAweGU2MjVlZjg3LCAweGMyYmQyNmI2LCAweDkzNTcxM2VkLCAweDgwYzRmYjNlLAorCTB4ZmUxMmVhZjIsIDB4YzkxZTU5ZTgsIDB4N2Y2NjY4ZmYsIDB4NmJmMGI0M2YsIDB4Zjg5ZmU1ZDMsIDB4NWUzYzZkMDMsCisJMHg1NWVmMTA1MiwgMHgwNzhmMGYyZiwgMHhhNzZmZWE3YSwgMHg4NTdkMWZiNCwgMHgwMmViMjNmNiwgMHhjM2Y2YTFiMSwKKwkweDkyMDZmYmJlLCAweDEzNzNkNzFmLCAweDQyNGRkYzcxLCAweDY5MzcxMGY0LCAweDEzM2YzYzliLCAweDRlNTRjNGVjLAorCTB4ZWNjYTQxNDYsIDB4YWI1ZGE0NTgsIDB4OGVkMWViMDcsIDB4MDEyYmEzYWMsIDB4MjEyMWFmYmEsIDB4NjBjY2RhN2UsCisJMHhmZWU1ZTYzOSwgMHg3NDM3MTE3OSwgMHg0MmUyN2QyOSwgMHgzZmM3OGRhMiwgMHhjMjI3NzhiMCwgMHg1ZjM4YTBmOSwKKwkweDEzOWU3NDBlLCAweGNmNzAxNDcxLCAweDIyMjFmYzE2LCAweDkxMzlhODRlLCAweDQ5NzM4MzlmLCAweGY3NGZmNDJlLAorCTB4YjQ0NGE2ZGIsIDB4MjlmZGQwMWYsIDB4YmVjN2VlODUsIDB4ZWYyYzIyYjgsIDB4ZWIzNTFmYjcsIDB4YjIxNDcxMTcsCisJMHg0MmVkMTBiNSwgMHg3YmQ3NDJjYiwgMHg3YTEwZjAxOSwgMHgzZWE4NmZjYiwgMHgxMjM0Zjc4MCwgMHgwZGQ3YTYxNSwKKwkweDAzODFmNjNhLCAweDU1M2IwYjhhLCAweDQ2ZjU5ZTcxLCAweDdiMDE4MDdhLCAweDhlM2M4YmMxLCAweGFmYWQ0ZGFmLAorCTB4ZTNjODliM2YsIDB4ZTczOWY4OTMsIDB4MTgxYWYwNTIsIDB4NGVlZTNjMWYsIDB4ZjUzMmUzZTAsIDB4Mjc3NzExMzAsCisJMHg3ZjQyZjhlMCwgMHhjMTUxZWZiOCwgMHhkOGJjZWZiNSwgMHhlMTNkZjcwNywgMHg3MmUwMmVlMCwgMHgyOWYzYThhZSwKKwkweDNkNmM5N2MwLCAweGVlZjAwMDkyLCAweDgzZWU3Mjg4LCAweGZkNDdlOWZhLCAweDcwNWQyNGE3LCAweDE3NzIxNTVlLAorCTB4YjZmNmNiYzYsIDB4Y2YzZjc4Y2IsIDB4NWJjNTgxM2QsIDB4YzhjOGY3YjksIDB4NGMzYmJhMWEsIDB4NmVhZDM3ZTgsCisJMHhjMmY1MWQ3ZiwgMHg2OGNhNDZhZSwgMHhhNjc2MWVhOSwgMHhiZmE5MGU5MSwgMHgwMzQwYmQ4OCwgMHg0N2NlODFlZiwKKwkweDY4MWYzZDYyLCAweDc1ZTIyZmQ2LCAweDdmN2YzYWU4LCAweDNlZmMzODA5LCAweGU0MmExYzFjLCAweDllZTE4MzUxLAorCTB4OTE5YzVmNTcsIDB4MTU1MTkwM2UsIDB4NzVkYTFmNDIsIDB4YjBmNGU2NmMsIDB4MDEzY2VmNTYsIDB4NGNlZjFkZmQsCisJMHg1NWZkMGNkYiwgMHg1MzA3MWRjOCwgMHgyNGViM2UwMCwgMHhkMTM1N2ZiYywgMHgyNmNiZWVjNCwgMHgyNTc0ZmJmMywKKwkweGRjM2IwNmZlLCAweGIzNGE0ZTM3LCAweGUxYTlmZGUwLCAweGUwOWQ5MWRmLCAweGRkNzhmZTE3LCAweDRmNzAzMTZkLAorCTB4NWMzZmY0NGMsIDB4NGVmZGUxZDIsIDB4ZTRmYjllNDIsIDB4NTdmMDQyOGUsIDB4YTI2ZmIwMmUsIDB4MTYyNjg1YjksCisJMHhkZGY5OTE5NywgMHhlNTE2NWY0OCwgMHg4OTFhYWYyMywgMHg2MWEzZjYxOSwgMHg2YmRlMDM2OCwgMHg2OGNiNDQwOSwKKwkweGM5OTM4Y2I3LCAweDMxM2JhMDI0LCAweDU2MWY3MTZmLCAweGZhZmI4NzdjLCAweDdjNTJlZjcwLCAweDI4MTRkODlmLAorCTB4MGVkMzRiNTgsIDB4ZGQ2MjBmNGUsIDB4MDUwM2NiMTMsIDB4ZmMyMDk2MGQsIDB4MTZhNjVjNDUsIDB4M2MzODViM2UsCisJMHg2NmM2ZjFkYywgMHhjZGJiMTdkMCwgMHg1MmM5ZmNlMiwgMHg5ZjIzZDM2MiwgMHhmYjY2Njc1OSwgMHhlMjU1ZDhlNiwKKwkweGMyYjNlZGZjLCAweGUxMWRkNGI5LCAweGY2MDYzYzE4LCAweDc5MzJmYmRmLCAweGIxN2YyNjkyLCAweGUzNDcwNjM5LAorCTB4YzdkNDE1ZmEsIDB4YmI1OGQ5ZDcsIDB4YmYwNzFlNmUsIDB4NDRiMmEzZWUsIDB4NmY4ZTVmODgsIDB4YTY2ZjFmMGEsCisJMHg1YzczYjEyNCwgMHg4YmVmZjcyZCwgMHgxZjdhYjVlZiwgMHg0MmQ1OGRjNiwgMHhmMDQxNzZiYywgMHg2YmM2OTVmYiwKKwkweDAxZmM3ODhiLCAweDI3YWQxMGUxLCAweGVmNzhkMWZhLCAweDdhYjE3OWRjLCAweDBlNGJmY2FmLCAweDNlYmViZTdiLAorCTB4MGZlMjI3NDksIDB4Y2Y0ZGVmZDEsIDB4MGJlMzYxNWIsIDB4ZjlkODkzNGIsIDB4ZTgwNzE4MmEsIDB4N2RjMzdiYzcsCisJMHg0YTdiODVmMSwgMHhjZTQ1YzkxMywgMHgwZWYzZWVmYiwgMHg4ODlmZGM1NSwgMHg5ZjlmNzczNywgMHhmZDdlNzE4NCwKKwkweDI5ZmRhNWZhLCAweGUxNWM2MDk2LCAweDkyZGZmMDQwLCAweDg2ZTVlNmM4LCAweGQwODJiZjc4LCAweGRlZmIwYWVmLAorCTB4OGYxYzRlMzcsIDB4YzE0N2YzZGYsIDB4YmI0NWZkM2UsIDB4N2ZlYWY3OGMsIDB4NzUzNzQ4NzEsIDB4ZDc3OTk4N2IsCisJMHg1ZGI4MzEyNywgMHg3ZGM3YWYxMywgMHgxYzQ3ZDIzMywgMHgyZjhjYzJkYiwgMHgzNWZiODllYSwgMHg3NmFhOWVlMiwKKwkweGZjY2JiYjdlLCAweDEwZmU2MDhiLCAweGJjNmUxYzQ3LCAweGM0OGU5Y2E1LCAweDMwYzc3N2JjLCAweDk5ZjdiODdjLAorCTB4ZWQwNTllZjAsIDB4NzdiZGUzMTcsIDB4ZTI1N2Y4YzcsIDB4ZjFhOWIwYmUsIDB4ZDdiNzNiN2MsIDB4OWZkZWJlZWMsCisJMHhhNmJjZjc4MSwgMHg0MGMzM2IzMSwgMHg3MjhkZTBmNCwgMHhkOGY1MDRmZCwgMHg0YTY1Njk5YiwgMHgwNmZhYzUzZiwKKwkweGZmYjIxNmM5LCAweDQxMGY0NTJlLCAweDc4NTRlYmI4LCAweDIzNzcwZmVkLCAweGZiZjQ1N2UyLCAweDRmYmU2MWY5LAorCTB4ZTcwMmMzODksIDB4YmU1YzI1YjcsIDB4ODM1MWQ5MmQsIDB4MWYzOGFmZmEsIDB4OGNiMGZlN2QsIDB4MTM5ZjE3ZjEsCisJMHhiY2Y5MjdlNiwgMHhjZmYzYzI1NSwgMHhlYjIxMTc1MiwgMHhmOTVhMWYyOSwgMHg4ODMzNDE2NCwgMHg4NDQ5MjViOSwKKwkweGJlYzMxNzVjLCAweDQ2ZTkwOWRmLCAweGY5N2M5ZmI1LCAweDg3ZWNmZGJkLCAweGFlYWU1NDI0LCAweDU3MjgwZDIwLAorCTB4ZGQ1OGZlNTYsIDB4ZmJkYzlhYWUsIDB4YjQ5ZmQwNjcsIDB4ZGNlMWZiZmUsIDB4YjFkNjI3MmUsIDB4NDc5ZTg5MzksCisJMHgyNjI5ZWY0MCwgMHhkNjFmMjBjNSwgMHgzMTg1ZjkzZSwgMHgxZjc4MTk0YSwgMHg3NzdjYTY5YywgMHhhZmY4MWU5OCwKKwkweDQ2YWVkMzE5LCAweDQ4YmZhNjFiLCAweDQ0OTYzYzcyLCAweGM5MjdiN2YxLCAweDllZDIwZGI1LCAweGJkZmY1OWY3LAorCTB4N2U0Y2JkYjUsIDB4Yjk0MzhkNmMsIDB4MmVmZDY0ZDUsIDB4MDg3OTc1ZjIsIDB4YzBmN2ViZTMsIDB4MWUxNDA5M2IsCisJMHg5N2QzMTMyNiwgMHg3MjBkNzQxMiwgMHg1ZTJkZWExNCwgMHhmMWUzODdhNCwgMHg2MjY2YWE2YiwgMHg3NDA0OWVkZSwKKwkweDI5Y2JmNzFmLCAweGVmY2UzMTUzLCAweDgwMGU5MTk3LCAweDQ3NTJhNmY3LCAweDM2MjVkODFlLCAweDk5N2JiMjU1LAorCTB4YjNmMzEzNjYsIDB4ZjYzMTdmN2IsIDB4MGM4MzcwMzUsIDB4MGNiZmJiNmIsIDB4OGViNmMxY2UsIDB4ZjdiMDNlZmQsCisJMHg3Y2ZlZThiNCwgMHg1YTU3ZTIxMCwgMHg4YmYxNjNhZSwgMHhmZWZmM2EwOSwgMHhlMmYxOTBkNCwgMHhlMDQ5YmQyMywKKwkweDY5MWY4Zjg3LCAweDM4OGYzOGM0LCAweDIxYWYzNGI5LCAweGNkY2E1ZTI0LCAweDllZGJkMTcxLCAweDFlYzI3Njg1LAorCTB4YjYxYmIwODMsIDB4YThiZGUwNDUsIDB4ODE4M2ExZGEsIDB4MTg0MzVjOGYsIDB4MWJkYzQ1OWUsIDB4ZGY1NDIxY2MsCisJMHg4NDcwYTJlZCwgMHhiZjkxNGJhMCwgMHgxOWYyNGRhNiwgMHgxMmZkZjBhMiwgMHhkZWQ0ZTNmNCwgMHgwZjk4NGJlNSwKKwkweDdhZTdlYTcyLCAweGY5ODk4M2Y0LCAweDVjOWFiZGM1LCAweDIxMmVmZTA2LCAweDM2NGJlNjlmLCAweGZhZTM0NzY2LAorCTB4ZmUyMjNjZmMsIDB4NWNkOTdmMzEsIDB4YjhmMzI3NGUsIDB4OTIzZjNmMWUsIDB4YjEyOTdiYzEsIDB4NWJiYjQwNjcsCisJMHg0NzRhMjRjYywgMHhmMmZjZDRiNywgMHg2NzVjMjJiNiwgMHhmNDFhMjE4ZCwgMHgxOWY3ZTEwNSwgMHg2ZjA4Y2Y1OCwKKwkweDY1M2Y3MmZmLCAweGE1OGRmNzY1LCAweDcyNzQzNjQwLCAweDYyZTdjMjg2LCAweGY5YzAzMGZiLCAweGRkOWIzYmIyLAorCTB4ODhjMzIzYmIsIDB4ZWU4Y2ZjMDMsIDB4ODFiN2MzN2QsIDB4ODgzNGMyN2QsIDB4N2YyOWFmZjksIDB4YTNlNDk3MzIsCisJMHg3Mzg2NmQ1ZSwgMHg0NGFmYWRkNCwgMHgyZjIyZjhmMCwgMHhjOGVjNGZiZiwgMHhmYTljZjg4MywgMHg4YzdjYjRhYSwKKwkweGMwMWEzOTEzLCAweDBkYmEzNzc3LCAweGM3ZGMwY2ZlLCAweDU0NDhlZjk0LCAweGYyZGEwZTM2LCAweGI4N2ExOWZkLAorCTB4ZjU0Mjk5YWYsIDB4ZDkyZjlhMzUsIDB4MGZjYjJmNzIsIDB4ZDFkNGFmZjUsIDB4NGYyZDkyZmMsIDB4ZmRkM2QwY2QsCisJMHg3ZmM2YmVlMSwgMHg1YjM1ZjIwYSwgMHhiZTdjYjE3NiwgMHhmMzRjYTU3ZiwgMHg2NTVlNWJjZCwgMHg0OTYwZTFmNSwKKwkweDJkYzFlYzA5LCAweDY4Nzg2NzA3LCAweGI5YTI2N2ZmLCAweGYxZmJiN2JjLCAweGU1ZmJiNTllLCAweDNiNTBiYWUxLAorCTB4ZTMzMjYzNmIsIDB4OWRiODY3NWIsIDB4NTkyNjRjZjgsIDB4MWVmMDA1NWMsIDB4YjJmZWJlMTEsIDB4NWEwZjFkNjQsCisJMHhhYzU0YzU2OSwgMHg0OTI3YjQ1NywgMHhmMzI1ZGJlMSwgMHhmN2U1NmU3MSwgMHg5MjQ2MjdhMywgMHhiN2U2MDg5NiwKKwkweDNjNTE0NGYzLCAweDhlMThlODFjLCAweDkzYWZjNzdlLCAweDZlOWU5ODYyLCAweDM4ZmJlM2YzLCAweDRmMDExZmEyLAorCTB4NzcxODlmZDEsIDB4ZTA2N2M4MzUsIDB4YWM3ODlhY2IsIDB4M2Y4NjY0ZWMsIDB4MWM0NmNlM2EsIDB4ZGQ4Mzk4NjcsCisJMHhjYjRhYWUyYiwgMHhiYzUxZmMwMywgMHhmNGRlMzllOSwgMHg4ZGJiZmNlYywgMHgxYmY2OGZjZCwgMHhhMDcyOGI5ZCwKKwkweDA3ZjhlYzAwLCAweDMzZjVhMmJlLCAweGQyZDZmMzgzLCAweDkzMzI0MTQ5LCAweDMxMzZiNzJmLCAweDNhMjA2YjdmLAorCTB4NjI2OWU5MGIsIDB4YTU2NzdmMjQsIDB4NjY4ZWJkNTAsIDB4ZTRjNjg3MGUsIDB4NDY2ZjdlNjgsIDB4YzI1MTJiYzAsCisJMHgxYzM4OWE3MSwgMHhjZjc4ZmNkMywgMHg1ZGQ3NGFmMiwgMHg3NzVhMWZmMSwgMHhmMDFjYmUwOCwgMHhmNjgxY2E1ZSwKKwkweGY1YjNiN2FiLCAweGNkN2JmMGM0LCAweGQ0MTg4Y2ZlLCAweGY1NTdlZWY3LCAweGE2ODM2Njc3LCAweGI4YzEwOTdkLAorCTB4MTY0Yzc3MzYsIDB4ODIyN2JmYjYsIDB4ZDkzYmYxOTgsIDB4MzMyZWQ3ZGUsIDB4YTBhZGU5OTcsIDB4MmM3NzhhY2YsCisJMHgxMjNhZTc4OCwgMHg3YmVjNDdlYSwgMHhjNThkYTJhZiwgMHgzOWQ3MDY2NywgMHhkM2FmOTBhMywgMHg2MzY5ZDdjNiwKKwkweGU4YWFmNGViLCAweDY0MDkxYzk1LCAweGE3ZjZiNmNjLCAweGY3ZjgzZWUzLCAweDlmMmEzN2Y1LCAweGU3ZGFhN2Y3LAorCTB4N2Q4M2ZhZTEsIDB4ZDY1ZTEwM2QsIDB4ZDZmOTNhNzMsIDB4YTllNjIyZjAsIDB4OWMxZjY3ODEsIDB4ZjAxM2YzMzUsCisJMHhlZDhkZmQ4NCwgMHg1MmU5YTk0NiwgMHg1OTI2YjNjYywgMHhmYjM1OTM5YywgMHg4ZTFiZjMzYiwgMHhkNWRhY2E1NywKKwkweGI5ZTJjZWRkLCAweGViYTZhMjg5LCAweDNhOTlkZGJhLCAweGVkMTAyYjg4LCAweDEwMjdjMTZhLCAweDNkZmZiNDFmLAorCTB4ODllZGNjOWEsIDB4ODA2ZDI0NjksIDB4OTNjN2M0ZjgsIDB4MGRkYWMyOGIsIDB4OWNmNmJiZjEsIDB4ZTJjZDEzZDgsCisJMHg4YWY2YjVkNSwgMHgyNzdiNzg5ZSwgMHg5Y2Y0YWZkYywgMHg4YzBhZWY2MywgMHhjMDZmZDhkMywgMHgyNTljZjRjZiwKKwkweDVmMjgyZWQ4LCAweDljNzNmOWQ0LCAweDNmYjdmNjNmLCAweDdlNjAzMjA1LCAweGU3YjJhNjg1LCAweDQ3ZDUzYjE1LAorCTB4N2U0MzFjYjYsIDB4ZWNiODM4NWQsIDB4N2Y5YTRjYjYsIDB4Yzg4ZmY5MzUsIDB4Y2I1MzBiY2YsIDB4ZmNhNGM4YmUsCisJMHg5ZmIyN2Y3YywgMHg3ZDk2NDdlNSwgMHg1YmYyMTQzMSwgMHg0NGZlYWNmYywgMHhlZmMwZjNjNywgMHg2MzNmYzc4OSwKKwkweGFmNTA3MjUyLCAweDQxNTkyZDc4LCAweDNhZTVjOWI4LCAweDAyNjQ3NDAyLCAweGM3YWU4NjI1LCAweGUzMDlhYWY0LAorCTB4MDc1YzA0ZjYsIDB4YmE0ZDBiNGEsIDB4NmZmNzcwODYsIDB4MDdhM2VlZGYsIDB4ODEyOTU3ZTYsIDB4ZjNiMDE1M2YsCisJMHg1ZjgwM2I3MSwgMHhmNDAzYjJhZiwgMHhkZjdiYjE0NCwgMHg4ZWZmN2IzZCwgMHg0ODNlNWRmNywgMHgxZTAyNzU3NiwKKwkweDE2YmIyM2VhLCAweDVkZmNkMjY1LCAweDFmYTA5ZjkxLCAweDNkZDA3MjRmLCAweGM1MTVmNjAxLCAweGY5ZDAxNjQ2LAorCTB4OWM5YjVkNGEsIDB4ZDU5MTNmYTAsIDB4ZTExZWIzNzYsIDB4NzQ1ZWVkY2EsIDB4ZmMyODE3OGQsIDB4ZjNmN2Q5NWUsCisJMHg2MWIyYTVlZiwgMHhiMThmMzA5YywgMHhlZmQ0MGY5YywgMHhlMDZmZjJmYiwgMHg2MzNmYWRmNywgMHg3YWY5ODNiMSwKKwkweGRiOTZjNzZjLCAweGRiMWFmZjQwLCAweDRjOTdmNmYxLCAweDM5ZmJiMzBlLCAweGMxNjNkZTYyLCAweDk3YmY0OWFlLAorCTB4ZmU3MDliYjQsIDB4NWVhZTNiNjMsIDB4ZmRjN2Y1MDEsIDB4ZTgwYjIzYjYsIDB4NWYzMWMyNjQsIDB4OWU4NWIwMTMsCisJMHhhYWE1MmZiZCwgMHhjZjkwZTVlZSwgMHgzOWQ3MWEyZSwgMHhjMDRkZGZhMCwgMHg1NGFhNTNlMywgMHhmNDc4NDYwZCwKKwkweDg1N2M3ODMyLCAweGYxZGQ2N2YxLCAweDY4ZmQ5Yjg3LCAweDdmZGY1NGZjLCAweGZhM2FmYWEyLCAweDIwYzk3YjkxLAorCTB4YzQzM2Y4M2IsIDB4YmRhZDdhN2QsIDB4NWQyNTY4ZjQsIDB4MjEzZWZkMWYsIDB4YTIxMDY3NDAsIDB4NmYzYzRmNGYsCisJMHg5ODI0OGNhNiwgMHhhYWQxMjUyZiwgMHg1OTM5Yjk3YywgMHg5NmMyYmY1NSwgMHg5MjlmMmFhOSwgMHg3Y2FhYjU3NCwKKwkweGNhYTc5MjlhLCAweDU2MzExZjRmLCAweDdiMDZmZjU1LCAweDYzN2YyYWE5LCAweGZkNTUzNGM5LCAweDJhYTU0NzRhLAorCTB4NTM2YmU3OWYsIDB4ZDQzODJmZDUsIDB4NDIzZjJlYWUsIDB4ZmU0M2MwNjQsIDB4OTBlYmZiNTEsIDB4YTA3NDlkMTYsCisJMHg3NGY4YjVkOSwgMHg4ZTkwZWJjMywgMHg4NzAzMGJmZCwgMHhlZDdjNWVkNiwgMHhlMWQ3YjZmOSwgMHg2YjE3YjBiYiwKKwkweGZiMDkzM2VmLCAweGM1YjJjZGYxLCAweDI3NmYwYzZiLCAweDA1NjdkMjRlLCAweDc1OTAxZmRmLCAweDE4ZDMzZWVjLAorCTB4OTRlYWViYWIsIDB4YTY3ZGUwYTIsIDB4YTYyZjYwODksIDB4N2M1OGE4NDgsIDB4MDBlMzQ3ZWUsIDB4M2Q5ODBiNGYsCisJMHgwNjIwMjhlZCwgMHg2OGFkYmVlMywgMHg2ODZhM2M4NywgMHgyYzBmZTY3OCwgMHhmODFkMjAwZSwgMHg1Y2MwODRkZSwKKwkweDllMjdiYWQ1LCAweDVkZDZhOTc3LCAweGUwZDU2ZTRhLCAweDVmMmE4ZDY5LCAweDU1NWRiYjYxLCAweDA2ZDI0YTdmLAorCTB4ZTUzNGY5NTUsIDB4ZGQzYzFhMDcsIDB4NjBkZmNhYWYsIDB4ZDNjMWEyZGYsIDB4N2U5ZTBkMzYsIDB4ZjQxNzJhYWUsCisJMHg1YWVkYzFkZCwgMHg0NTFlYzBmYiwgMHhjZWZlZjFkMywgMHg3NWMzYzA3MiwgMHg4Zjg4MDNhNywgMHg3MmQ2Y2U5MiwKKwkweDQ3YjVkM2MwLCAweDg1NWYxMGRiLCAweGIwMzk2NzNlLCAweDBkNDNlMmNiLCAweGEzZWE0M2FmLCAweGY3NjgzMWU3LAorCTB4YTYxMjYzNWEsIDB4YjQxNTFhMDcsIDB4MWM2YzFkNmIsIDB4NDZhMWU5ODEsIDB4NzVmZjdlM2IsIDB4ZWZhNjA5NjMsCisJMHg3ZDMwM2EzNCwgMHhhNjJhNzFhZiwgMHg0YzRlOGQ5ZCwgMHhiMGRiMWFkYiwgMHhlZDhkNzNmZSwgMHhkYjE2MmVjYywKKwkweDNhNDVkZWY3LCAweDc1YmEwN2Q4LCAweDgyNzgzNzdlLCAweDc3OTIzZjE3LCAweGVlY2JmMDAzLCAweGM4NmVmZTQxLAorCTB4MzdlYzQ1ZGYsIDB4MjVmOWEyNGMsIDB4YmVlODQ0YzAsIDB4Mzc0ZjI5ZmMsIDB4ODAwMjNhYTQsIDB4Y2ExYzM3NTcsCisJMHgxOGYxODI4YSwgMHgxZTQ3M2E2ZCwgMHhhNDc3ZTFlOCwgMHgzZWExZjg0YywgMHgzN2JiOTA5ZCwgMHhkMTZjOTMzOCwKKwkweDc5YTY2ZjJjLCAweGIzYzYzNjQ0LCAweDgzYTFmODRkLCAweDIwMzNkNzEyLCAweDMzYTlkMDRhLCAweGY3YzgwNmUxLAorCTB4Nzc3MmIwNDQsIDB4NDAxYjg0Y2EsIDB4ZmVjNmZmMGYsIDB4ZmYzZjQ3NzMsIDB4NjEyOTFkZjksIDB4OWNjZmU3ZmMsCisJMHhkNzYwYWM1NiwgMHg3MGQ1ZmMzOSwgMHgzMGUzYzAyYiwgMHg0ODM5NmZiNywgMHg0ZDA5NjE5ZSwgMHgwNjc5ZjU0YiwKKwkweDA3NDdiMzkwLCAweDgwZjBiN2I4LCAweGUwMDliNGFlLCAweGNmYjNhNmQwLCAweGViZWY3OGMxLCAweGI3ZTgwNDBkLAorCTB4NWZlNzYyNGEsIDB4Y2E5NWNmNTEsIDB4MGRjZjQxZTQsIDB4MWQ0ZjNjMjYsIDB4NjA1NjM5ZDEsIDB4NzgxNDk5NWMsCisJMHgzZGJjZTAwYywgMHhkZWUxMTJhNSwgMHgwMDY0MGQ2MywgMHg0ZTI5YmNmYywgMHgzYzBmOGY5NiwgMHhmMjQzZDkyNiwKKwkweDA3OWYwNjA2LCAweGI2ZmM2ZTUyLCAweDM4NThmM2UxLCAweDYyOTEzY2Y4LCAweGNmYjZmYTYzLCAweDgwN2EwZTkxLAorCTB4NzRhOTFmYzgsIDB4M2U3ZWMxZDQsIDB4MGFiOGVhNTIsIDB4NGQzOGNmZWYsIDB4YWQzYWZmNmMsIDB4M2VkMGFiZGUsCisJMHgxMzlhMjhlNCwgMHg5MjE5ZTc2MiwgMHhkMWY3NjA2YSwgMHhkODIyNjJlMSwgMHg3MTkxNmYzYiwgMHgzOWUxNmI5ZiwKKwkweDdiZTk5NTIxLCAweGNlNzAyNzQ4LCAweGU3ODkxNzljLCAweGY2M2EyMzgyLCAweGZlYjY4MTllLCAweGIzZDcwZTAyLAorCTB4ZTNkYmMyODMsIDB4YmQzMmE2MTYsIDB4ZGQ1NjZjYTIsIDB4ZmVkMDJmMzMsIDB4NjA0NWQ2N2EsIDB4ZTFjZTNkZDcsCisJMHgzNGY1OGZhOCwgMHgzNDJhZTg1MCwgMHg4ZTcwZGQzZCwgMHgxY2VjOWI5NSwgMHg5ZGJmZTgyNCwgMHhmMmQxN2YwZiwKKwkweGZiNmUzYTY3LCAweGZkNjhlZmViLCAweGRhNDVkNjRmLCAweGFlZDg4NjUxLCAweGMyZGRmODQxLCAweDM1OGMyZjJiLAorCTB4YjBiNGZlYTMsIDB4ZTQwY2JkMmEsIDB4MDdlZTdjZTIsIDB4MjdkNTY0NWMsIDB4MWY1MDNiYTAsIDB4MTcyNzg0NmQsCisJMHg5YWYyNWI5NywgMHhjYWM5MDQyOSwgMHgzYzIzNGFiOCwgMHhiNjlkNTUyNSwgMHhkNWQyMTlhNiwgMHhjMjM3ZWVjMywKKwkweGEzYjUyOTEzLCAweDFhODMzNTc2LCAweDcwYjc0NzViLCAweGZmM2ZmMjExLCAweDVlNzQ4ZGJiLCAweDBhY2JkNzhiLAorCTB4ZmI4OWNmM2IsIDB4MTQ1NzM1YWUsIDB4ZjdlODIyY2YsIDB4YTIzYjhmMDgsIDB4ZWFmM2MwNDAsIDB4ZDE2ZjBlMjIsCisJMHhkNzg3MTE2ZSwgMHgzZmFlMTQ4OSwgMHgwYjljOTBlNiwgMHg2N2Q2M2Y2YSwgMHgwYjVkZWY0MCwgMHhjMDFlY2RkZiwKKwkweGU3MmVhMGNmLCAweDQ2MDdlM2ZhLCAweGZkZjZhZTM2LCAweGUyZWUzMTEyLCAweDNhZmU3NjU0LCAweDA5OTRhNDYyLAorCTB4NGMyZGU0ZmEsIDB4ZmRjZWU0MGUsIDB4YmEyMmFlZTIsIDB4OWIwZWRjZmUsIDB4MTYxNWUzMGUsIDB4NzgwMGJkZDcsCisJMHg3OGU3NmRlOCwgMHhkODc2OTAzNCwgMHg0YjNjYjM0ZiwgMHgyMjFkZjkzZSwgMHg4Zjc1NGUyNiwgMHhkMmYyNTJmNywKKwkweDBmMmI2OWRlLCAweDdlODU5Nzk1LCAweGJjYTg3OTY3LCAweDk2YjQwOTJjLCAweGYyMTQ1YzgzLCAweDdkNGZmODUxLAorCTB4MmY5Y2Q1OGQsIDB4M2QzZjIwMzcsIDB4ZjMxZWI4ZDAsIDB4OTgzZDFiMDcsIDB4ZTE2YzZhMWUsIDB4Y2IxNWI5N2MsCisJMHg5ODdjNjlkZiwgMHhlNzJmNjVmMywgMHg3YmYxM2JjYiwgMHg0YzVjZTM0NywgMHg1OGJhMzVmNywgMHg5NTE5Y2EzZSwKKwkweGVjYzRmYjBhLCAweDM3YzRmOGMyLCAweGY4MDg5OGI2LCAweDRjM2I3YWU3LCAweDc3NDE5ZjE4LCAweGM2OGY2M2M0LAorCTB4MDk5MWZjNDEsIDB4ZTM2YTcxZWYsIDB4YmU3Y2I0OTAsIDB4Zjc3NjFlOGYsIDB4MDUyNTM3N2IsIDB4MWY4YmU5YzYsCisJMHhjODcxN2QwMiwgMHg5ODc0ZjRjMCwgMHg0YmUwNTYyOCwgMHhlNGZlOGZmOSwgMHgwZmFmZDAwNiwgMHhmNDE1OGEyYiwKKwkweGNkZDQ4MmU5LCAweGFjNTBlZjJjLCAweDdjMmY5YTA2LCAweDhhNWRlNzk0LCAweDIyYWMwNGQ1LCAweDViZTQyMWY1LAorCTB4MzU4YTNkODcsIDB4MWY4YmU2ODIsIDB4N2I5NTg4N2QsIDB4YzdmMzNhMDksIDB4MDZmNWJhM2QsIDB4MjI1OWYwMGYsCisJMHg1MWZkODAxZCwgMHg0NDljY2U2ZSwgMHhkNzk1MDVjNSwgMHg1ZjYwMDdhNSwgMHgzMjVhNDk0YywgMHhjZWM1ZjYwOSwKKwkweDYzZTkwNTE0LCAweDAwZTFiMjlhLCAweGQ4OGZhN2U0LCAweGZhYWI4N2E2LCAweDQ2ZGU0YjBlLCAweDU3MTY1NzY4LAorCTB4OTM3Njg3YTksIDB4ODQ2Y2Q2ZDIsIDB4ZGQ4NzkzNzYsIDB4Mzc2ZDBmYWYsIDB4OGRhZWQ0NzUsIDB4ZGY2MTlmOTAsCisJMHg3NGZkMDdhNiwgMHhmOGIxZjAyNywgMHgyZjIyM2Y2MCwgMHgxNjlmMDVjYSwgMHgzYmEzNzI3MSwgMHg3MjBmMjg5YywKKwkweDBmMjg5ZGRiLCAweDY2Y2E1YzA0LCAweGY2MGRkZTU3LCAweGM5NzZmYWNmLCAweDY2M2NjMTI2LCAweDBhNDE3ZDRiLAorCTB4ODZlODkzMTAsIDB4YmYyOTQ5ZjcsIDB4OTdmNTNlYmUsIDB4NWRiNDBkZDYsIDB4YzVhZmU0M2QsIDB4N2MzNzBmZmMsCisJMHhhNmZiZmNiYiwgMHhmYmZjMzBkNCwgMHg0MWRmYmU0MywgMHhmYmRjNDNkZSwgMHgwZWY2NDY4NywgMHgyZTFjMzNjYywKKwkweGFjNGIxZGY1LCAweDcxMmE4ZWY4LCAweDdhY2Y0MTU5LCAweDk3ZjNjYjllLCAweDlmZTVhNTIwLCAweDdmOGJiNGYxLAorCTB4NzBlNzQwN2YsIDB4NTJhYjM4YzEsIDB4M2ZiMjFmYjksIDB4NjU0OWE4N2YsIDB4OGY3MzVmZmIsIDB4Y2U3MjgwNjQsCisJMHg2ZDUyZWExZiwgMHhlYTNjZjdhYSwgMHg3NmJmYmIwOCwgMHg2ZDNiMzhhOSwgMHhlZTM2Yjg5YywgMHgzYjY5MzU2NCwKKwkweDFmZWNjOGU4LCAweGY3MGI1MjZmLCAweGM3ZmFiMmRjLCAweDZhNzg4YjdmLCAweGRmNzgxYzZkLCAweGUzMTA2YWI5LAorCTB4ZDc4MTczYTcsIDB4NDk2ZWJhNTAsIDB4ZGU0ZjkwMWQsIDB4ZGMzODA5N2IsIDB4ZmQwZTBlMWIsIDB4OWM1ODQzZDYsCisJMHgyNDM4YmY3YiwgMHg1ZGFlZWYxZSwgMHhiM2M1NzExNywgMHhmYzc5OGQ3NywgMHg4MjdkNzZiYiwgMHhhZmFmZmEyZSwKKwkweGNmNWZjMTk1LCAweGJiZjU0ZmUwLCAweDE1N2U2MGM3LCAweGVjMDRhZDhiLCAweGU3ZmNhMTU2LCAweDNmZTExNzc3LAorCTB4NmRmNjdlNWEsIDB4MTc5YmM5ZjEsIDB4NjViYmUxZDcsIDB4ZjNkOGY4NjEsIDB4Yjg5OGY4ZTEsIDB4ODU0ZGFmY2YsCisJMHhmM2Y3MGE5ZSwgMHhkZTEyMWUyMCwgMHg3ZTczODIzOSwgMHgxZjZiYTI2NSwgMHgxNjUzZDNmNCwgMHhjZTBlOWJmOCwKKwkweGRkZWM3MWExLCAweGFlZDE4M2YwLCAweDMyNWRmMGZkLCAweDExMDZiOGIyLCAweGU3NWE3Yzk3LCAweDZkZTgxNWY5LAorCTB4MTlmYTNkZWYsIDB4MTA2ZWIzZjIsIDB4YmM4Zjc0MTYsIDB4OTdhMGYzNDEsIDB4N2NlNmMzZmQsIDB4NDY0N2UwMTMsCisJMHhlZmExOGRmOCwgMHg3ZjE0MGY4ZiwgMHhmZjJlMWJmYiwgMHhkZjZjYTdmYSwgMHg5ZWQ0Mzg4OSwgMHhhMDY2NWY2ZCwKKwkweGZiMTJlZWZkLCAweDU0NzgyMDYyLCAweDcwZmRlM2M4LCAweDI0YjdhNDNmLCAweDk3NjdlNTEyLCAweGRlZjA3YzQ0LAorCTB4MDI2OTU3NzEsIDB4ZTk1ZDJkZWEsIDB4ZGZhNDNkNDYsIDB4MmJiOGI5ZjYsIDB4ZDdmYjFiM2QsIDB4OTJiYjhmOWUsCisJMHhkYzZjY2M0YiwgMHg3ZDIxNTNjOSwgMHgyMTU0ZjkyZiwgMHhmMGRmYmRjOCwgMHhhMzc2Y2JmOCwgMHhiMDNkZTBhNywKKwkweDQwOGQ4ZjBmLCAweDkyOGRmZWZmLCAweGEwZTAxMGJmLCAweGJkNzc1NzNkLCAweGM5NGNhMGI1LCAweGE2YmU3ZmVkLAorCTB4ZWIwNDliZWIsIDB4YmJhZTNkYWIsIDB4ZTk1ZGJlMWIsIDB4ZmQ3NmJiNzksIDB4YjljNDA4ZGYsIDB4MTVmZjViOGYsCisJMHhhZWVmZjc4MSwgMHgxOWRkZmNmYywgMHg1ZTgwYWI5MywgMHgxMjAyNmFlMSwgMHhmNTQ1ZDMxOSwgMHg1NGJmOWEwOSwKKwkweDg5MzlkNmZjLCAweDQzMzNkMzllLCAweDZmMjVlNWNlLCAweDllMmUzOGIzLCAweGZkZTdjZjZhLCAweGVkNWMwOWRlLAorCTB4OTYwZGM3NTEsIDB4NWUzMDhhZmEsIDB4ZTE0N2Y2NDUsIDB4N2IxZDYwYmQsIDB4NzNjNDQzNmYsIDB4ZjNjZmM5YmQsCisJMHgyNDNlYmNmNCwgMHg5ZDcwZWQwZCwgMHhmYWYzYWExOSwgMHhmYTJkMWYxZCwgMHgwODgxZjIxZSwgMHhhNjc4ZWY4YywKKwkweGNjM2M0NGZkLCAweGYxOWQ4ZmY1LCAweDA5NDU3OTNmLCAweGVkYmQ3N2QyLCAweDlkZjQyNDZmLCAweGJkZjVkYWMwLAorCTB4ODZkNzdjYWEsIDB4NzA1NmZiZTAsIDB4NWZmNmFiMWYsIDB4MmEyNWNhMzIsIDB4NGYxMDVhYzcsIDB4ZGFlMzM1ZTQsCisJMHhkYTRhZjkxMCwgMHhlZjA3ZGNmZSwgMHg1NWRmOTRkMSwgMHhiZTUwYzAwMiwgMHhkMDc0Y2YzNiwgMHgzY2ZjOTU3NiwKKwkweDhkZTQ0ODQ0LCAweDkyYWVkYTBlLCAweDY3ODkxZjlmLCAweGU3OGYyYjI1LCAweGIwOWYzZGY1LCAweGZmMjhiYTdjLAorCTB4N2ZhYzRjZTMsIDB4MWM2ZmU4OTUsIDB4NzkxNjRmMmIsIDB4MjJkNWRmZGUsIDB4OTYyMzc4OWYsIDB4MjVmNjhhNjcsCisJMHhjNjIzOWYyYywgMHhhZGVkNjRhZiwgMHhhZGU0ZmVhYywgMHg3YTA5OWNmZiwgMHgzM2Y3ZTA4ZCwgMHhlMDljYjhkMiwKKwkweGZlNTE1MmVmLCAweGJhMmI0Y2VmLCAweGJhOGViYzY4LCAweGYxMDdjYjljLCAweDFkYzU1NTBlLCAweDg1ZGYyMmQzLAorCTB4NjEyNmRjN2QsIDB4OWRlZDYxZWMsIDB4OWZlN2I0MDYsIDB4MGRjYjY5OGQsIDB4ZTIyZjJmYmQsIDB4NTZlNTljN2EsCisJMHg3YmFhZjM4YywgMHg5OTc2Zjg3MSwgMHgxZTgxM2JjNywgMHhlOWZiOWNiMywgMHhmYTBiNjQyYiwgMHg2NWVmN2E2MSwKKwkweDNkMjA3ZTdjLCAweDk3ZmFlNTcwLCAweDU3ZWNmODU1LCAweDQ2ZDNkZmNlLCAweGVmMWQyNTQ3LCAweGYxMTMwZmRjLAorCTB4ZDYxOTAyN2UsIDB4ZWUwMmYxODksIDB4MjdjNDQ5MzQsIDB4MTE2YWJkZTAsIDB4NDU5NzE3NTcsIDB4OGU3ZTcwMWMsCisJMHhiZDgyMjk3YiwgMHgxM2IyN2FhNywgMHg5N2NhZWZmOSwgMHg2ZWJiN2Q5OCwgMHhlZjI4ZWJjYiwgMHhkYTBhY2E5NiwKKwkweGVhMWViZTk3LCAweGU5ZjAwNzVhLCAweDJmNzdiMmI2LCAweDg3ZGZhZTU3LCAweGM1MzFmNGZiLCAweDgxNjBmZGM2LAorCTB4YmNmMGExNTEsIDB4M2RmYzNmYjMsIDB4ODUxN2YxNjksIDB4M2ZmY2JhYmYsIDB4NWRhZDdmMGMsIDB4NWZkN2RjNWQsCisJMHg3ZmYxODU3ZCwgMHgwN2U2NTZkZCwgMHhmZDNjNzNiNiwgMHg3MzE0YTc0OSwgMHhmMDAyM2Q3OCwgMHgzM2EyYjczYSwKKwkweDIwODY1YTNiLCAweDc3OGM0ZWVlLCAweDI5ZGY5MGFiLCAweDZmNTZmMzgyLCAweGRlMDA5NTgzLCAweGRjY2VhNWJiLAorCTB4NWZlMGMzMGYsIDB4OWYzOGFlN2IsIDB4Njk3MTU0NDEsIDB4ZjdjM2ZiM2IsIDB4ZjdkMDRiZTksIDB4ZmE0ZGZmZDMsCisJMHg4ZGZiZDQ0ZSwgMHgxZjFiZjA3NiwgMHgxNWU1ZWY2NSwgMHgxOGM5ZmU3NywgMHg0ZWY0MWYxYSwgMHgwZjA3M2IxYSwKKwkweDMxN2U2NzZlLCAweDJjMTcxNzExLCAweDcxM2MzMmI3LCAweGQ1NWQ1M2ZmLCAweGZmYzFlMzNiLCAweGM0YzNmNjI0LAorCTB4ZmUwNmQyNDgsIDB4NzZkNzRhMDQsIDB4YTA3NmQ3NGUsIDB4NDFiZjQxNmIsIDB4MTc2ZDE0M2YsIDB4ZmE0MWJlMDYsCisJMHg5MTJlMmMyNSwgMHhmZGI3ZTljMywgMHgyNWUxZmFlMSwgMHg3ZmUxZmFlMCwgMHhhOWJiYWUxMywgMHhkYmZlOGMzZSwKKwkweDRlZDAyMjE3LCAweDNmZjM4NWEzLCAweGJjMDU1YzM4LCAweDBlMmZkMzIzLCAweGZmZjRjOGU3LCAweGQzMjM5YzBjLAorCTB4NDM5ZDk1MTUsIDB4ZjkyMDdiYzAsIDB4OTg4ZmM1YTQsIDB4NWE3ZDk4NzcsIDB4ZTlmNjRkZjQsIDB4NGY5YzE5MjMsCisJMHg4ZjE4ZmRlOSwgMHg0YzdiYzVhYiwgMHgyN2JjM2Y3YSwgMHhlZjFjNWZhNCwgMHgzMGZmZjJlYSwgMHhkMzcwYjVkZSwKKwkweDlmZGNiNWE2LCAweDk4NWVmZGFiLCAweGZiYmYyMDNlLCAweDdmZjhlMDU2LCAweGIwYjA0ZmNkLCAweDdjYWFiZjYxLAorCTB4NTRiN2ZhZjEsIDB4ZWYzYzRiZTUsIDB4NDE1Zjk2NWYsIDB4NWJmZmZiZDgsIDB4NTdlMTA1ZmUsIDB4MmFmY2Y5OTgsCisJMHhiNTFmZjgxZCwgMHhjNDM3NDFmMiwgMHhjN2EwMjNmOSwgMHg3YWZlNWYxYiwgMHhmOTMwODdkNCwgMHhiNzhjNmNlYSwKKwkweGU1YWY4ZGJhLCAweGZmN2ZmMThiLCAweGJlOTQ3YmU0LCAweGY2NjA2OGJlLCAweDNmZmI2M2Q2LCAweGZkMzkyODM3LAorCTB4NzllMTY1ZTksIDB4ZDA4NDcxMWQsIDB4ZWZmNWMyZDksIDB4NWFjZjQwMWIsIDB4NTRmYmQ4NDgsIDB4YTYwZmZhZGEsCisJMHhjNjMwN2IzMywgMHgzMGJlNTE0OSwgMHg3MTBjNGNkNywgMHg5ZGNjMWY5NCwgMHhjZjRiZWVjYiwgMHgwYzYzMDcwNSwKKwkweDJkMTczZWE2LCAweDNlMjdhOTlmLCAweGQyYmI4Zjc4LCAweGQwOTlmN2EyLCAweGZmYmVhOWVmLCAweDc1ZWZlMjZlLAorCTB4ZDU1OGI4OTMsIDB4MjFkOTc4M2QsIDB4OWNkZjljNjMsIDB4YmQyZmU2MTIsIDB4Zjc4NmQyYzUsIDB4YmExZGU3ODcsCisJMHg2MGY3ZGNlYiwgMHgxNGY0NmYyZiwgMHg3MTc3YjhiMSwgMHhiYWY3ZjBmZiwgMHgzZTgzZjEyYiwgMHg5YzJhN2EwOCwKKwkweDVmZWUyNGZiLCAweGZmNDA2MzVmLCAweDJhZGRiNmJhLCAweGNhNjY5ZmJlLCAweGQ5YTM4YjEyLCAweGM1MzNlMmMzLAorCTB4M2JlYmE0ZmUsIDB4Zjc2N2NhNjQsIDB4NDhmN2UwNjAsIDB4YmUwYzFiMmEsIDB4NjdhMGI5ZTEsIDB4YmIzZDQ3ZWYsCisJMHgyZTQzNjRiZSwgMHg5MjdlYWZlMCwgMHgxYjk0ZGM3NCwgMHhhZmQ0ZWYzYywgMHhkN2I2MGJmZiwgMHg3YTZkNjdmMiwKKwkweDRmZDVmNmI5LCAweGJkMjEwZjFhLCAweGIxZDE3Mzg4LCAweGI1ZTYxZjQ2LCAweDEzMDVkNmY2LCAweDkzZmQxN2ZmLAorCTB4NmRlMmZmNjMsIDB4NTdkYzc0ODIsIDB4ZDBjNzBmOGUsIDB4M2IxYmZiNzUsIDB4ODI3YjJkZmYsIDB4YmIwODIzYjAsCisJMHgyMTRlZDY4MiwgMHhiZjc4ODhmOCwgMHhlMzZlOTdkMiwgMHhhMjk2YjJlZiwgMHg1OWU4ODNkZiwgMHhjMWVkZjgyYSwKKwkweGQ3ZjlmY2ZlLCAweDI3ZDcxN2U5LCAweDYxZmZlNWQ1LCAweGY0Yjk3Y2ZlLCAweGU0YzQ5YjVmLCAweDhmZWU5NmFhLAorCTB4ZWQwY2ZkNTYsIDB4YjViZTgyY2YsIDB4NjIwMGJmZjQsIDB4MGJmOGU4NTIsIDB4MjdiYzI1ZWEsIDB4YWI1NTc3M2UsCisJMHhjZGY0OWM2MSwgMHhlNWI1N2RlOSwgMHg5YjgzMDY2NCwgMHhiMTVjMmU0NiwgMHgzYzc4NTAzYywgMHgwYmU3OGM4NywKKwkweDBlYzZiYzkzLCAweDg3ODEwZjc2LCAweGVmZDVkM2FmLCAweDQ4YmM1MzAzLCAweGFiOTcxNzE5LCAweGZhZmZmMmVhLAorCTB4YTJlNGUwMzksIDB4ODkxNzI2NmYsIDB4Y2I0ODlmNGEsIDB4ZTU2ZWI3ZTgsIDB4ZmU1NmViMTIsIDB4YjkwZWViOWIsCisJMHhkNjQ4YjRhNywgMHg0MGUzZWYwNSwgMHg4MWM0MzVmYywgMHhmZGQ5NzhmNiwgMHg1NmNjZWFkNCwgMHg1MjAzZGRmYywKKwkweDdlMDI4ODEyLCAweDk5NWVlYjc3LCAweGRlOGU5ZWZkLCAweDc5MGU0ZmExLCAweGY4OGJhZDNmLCAweDVjN2EwMDNlLAorCTB4M2JiZDllMzUsIDB4NzY5YjhkYTQsIDB4ZDVlYTc4ZjMsIDB4YmY3OGRkOTYsIDB4OWEwZWZiNTEsIDB4ZjM3NmNiODgsCisJMHhhMWVmYjRmZSwgMHg5ZGUyZjY4OSwgMHg2ODdiZWQwMywgMHgxYzc4MzI1MywgMHg2N2M5M2U3NiwgMHhlNzE3Mjk3MSwKKwkweGNmMjBkZGEzLCAweGRkMzVmYzQzLCAweDVkYTIzNTVmLCAweDRhYzdjNmUxLCAweDA1YTRmM2VlLCAweGEzMjczMmYxLAorCTB4OTc5OWRmMWYsIDB4YTNiZTcxNzEsIDB4ZDMyZmZmMmUsIDB4ODFkZDZjYWYsIDB4OTRhZWQ4ZjcsIDB4M2E2NDQ3N2UsCisJMHg4MjdmNDBkYywgMHg5YmYxZjcyZiwgMHg2ZmM4NGM1NywgMHgzZGYzM2JjNCwgMHhmN2MxOWU2YiwgMHgyNGJlN2E4NywKKwkweGQ0YmQ5N2U4LCAweGJiMTNlMzNiLCAweDA5YzQzNWQ4LCAweDU2NGRiZDI3LCAweGM3NzFkNzhhLCAweDFiYWY2ODNjLAorCTB4Zjc4NWM0N2IsIDB4ZTNiY2M3NzYsIDB4OTI3Zjg4ODAsIDB4YzMyOWMwNzcsIDB4MjMzZTg1YmMsIDB4ZmYyMDliZjQsCisJMHg3OGQ5ZjdlMiwgMHhmMmU1ZDU5YywgMHgzN2Y1MmJiOSwgMHg4Y2ZjYTdmZSwgMHhiNzVkNWVlMiwgMHhiZjA0NTdjMSwKKwkweDEzZDllMGU3LCAweGExMDNiZjgxLCAweDE5OTNmZjlkLCAweDkzYmU4YmJhLCAweDdhZTUxMWRjLCAweDhiMzRmMDEyLAorCTB4NWVmMTA5Y2IsIDB4ZGVjYzg1NzIsIDB4OTRlZGVmNDksIDB4ZWViODVlZDEsIDB4YWJmYjdlN2YsIDB4ZGI0Yjk1NDcsCisJMHhiZDZkZWExNSwgMHgyMjY1Y2Y2MSwgMHg3YmIxZDdhZCwgMHgwYWU1ZjkyZCwgMHg3OWMyNDljNiwgMHhjMjg3ZWMwZCwKKwkweDdmYWRhODllLCAweDI5N2IyOTRhLCAweGUzNWJlZDAzLCAweGRlZGEzZGYxLCAweDA2N2NkOTg3LCAweGZhZmQ1N2MyLAorCTB4NjAzZjhlMDAsIDB4N2ViZjFmMzksIDB4ZjQyZDkxNmYsIDB4MTlmMzk1OWQsIDB4ZGI0M2U3N2QsIDB4ZGYxMDczMjksCisJMHhmZjE3NGI5NywgMHgzMzJkY2VkNywgMHhhODkxZTI2NSwgMHhiYzkxY2Q3YywgMHg0YzI1ZWY0YywgMHgzYTQwNWRmZiwKKwkweDAyNDQ1ZDMxLCAweGJiMDhiYTk4LCAweGQ4OTRiMGNmLCAweDljNGU1ZDMxLCAweDVjNTVhZTk4LCAweDM3MTgxOTVkLAorCTB4ZjhjMDQ4MTQsIDB4MzlmZjE3ZDMsIDB4ZGNlNmU4MGEsIDB4MjE1YWUzNzUsIDB4ZjJkYmYxNDYsIDB4YmVmNTY5MjMsCisJMHhiZDg1M2M5ZSwgMHgzZmMyZjQ5NywgMHhkOWY0MDc3ZiwgMHhjYjg2M2ZmMywgMHhhMjQ3MWJlMiwgMHgxODQ4NjQxYywKKwkweGE1N2JkMzNmLCAweDU0ZDdiYjMyLCAweDE3ZGM1ZGYyLCAweDMyNWRmZGUyLCAweDk2ZTFmOTg5LCAweGZlZTI2NjI3LAorCTB4YzRjZGYyMDksIDB4ODI2ZjgyNmQsIDB4YjhlNzM5M2YsIDB4ZGNjM2M1OGUsIDB4YzY3YmUxMmEsIDB4NmUxZDdlZWQsCisJMHg5OTE1OWNiMSwgMHhiOWRkZjg1ZSwgMHgzY2FjZGRmNiwgMHgyYmRhMmVhNywgMHhkOGNlN2NkMSwgMHgyNmJlNTYwOCwKKwkweDRmZjcwYmRhLCAweGVlM2YxMjE2LCAweGZiNzBjNWNiLCAweDRiZmI4NjQ0LCAweGRmOGEyZjhjLCAweDgyMjdhMDBiLAorCTB4YmY2ZDEyYTEsIDB4ZWVjY2MzYTIsIDB4MzBmZjEwNTEsIDB4NzBiOWZmZTAsIDB4NGYxNzBhN2UsIDB4ZjFmMTg0MzMsCisJMHhiZjE5NDNkMSwgMHhiNmE2NWQxZiwgMHhlNWU1MGM4NywgMHhkZjY1MjlmNywgMHgwY2I0NzgwNywgMHg4MTBkNjQ3MSwKKwkweDliOWQzMWZhLCAweDNiMDQyYzFlLCAweDlmODA4ZTkwLCAweGI3YjFiM2U2LCAweGI0NTM1ZmEzLCAweDFiMjk1MTdiLAorCTB4OTU5ZmY1MDEsIDB4NjdiZmJjNTgsIDB4NGM2ZmJmMmYsIDB4ZmVhMTA5MDIsIDB4Nzk0YWI1YjEsIDB4MWEyYmQ0MmUsCisJMHg0MGQzZjhjMiwgMHg1MWRmODU3MCwgMHgyZjM5ODY3NCwgMHhkMWQxZjg4YSwgMHhiYjQzNjY3MCwgMHhkMjc3YzEzYywKKwkweDdlNTg5NTllLCAweDZmNWJlM2YyLCAweDVmNDE2OGRjLCAweGUzZjQwNzgyLCAweDQ0ZDcxNTE3LCAweDkxYjQ2ZjE4LAorCTB4ZmZjYzBiMTAsIDB4MWI3ZWZjYTcsIDB4YmIwMGM4NjksIDB4NGNjN2FhZTgsIDB4M2UyZmQwM2EsIDB4ZWUxOGUyYTIsCisJMHg5ZTgxZmNmNywgMHg5OGZkMjFiNywgMHhmZDIxOWI5ZSwgMHg0MzM3M2QyMywgMHg5YjllOWM3YSwgMHhjZjQxM2QyMSwKKwkweDM4YWU5MGNkLCAweGNjYzc4NzZmLCAweDhlMjE4OWM5LCAweGYwYmZkMGI5LCAweDViZTc2OWY3LCAweGQ3ZjE4NDM5LAorCTB4MWFmN2YxYmUsIDB4MTRmYmZjNzEsIDB4MGZiN2MyMTcsIDB4ZmUwODdiZGYsIDB4ZDFiM2VkZGUsIDB4OGI5ODk0ODEsCisJMHhkZWNmNWJkMCwgMHg3NDlmYTNiZiwgMHhmZjA4YjgyMCwgMHgwYTdjYjZhMywgMHg2ZWVlNmJjNywgMHhkY2ZmY2EzZCwKKwkweGNhZDQ3Zjc2LCAweDg3MmI3YTkwLCAweGNlN2RiMTE4LCAweGEwYTMyNzBiLCAweDFmNWI2ZWZmLCAweDVkMTIxZDdjLAorCTB4Y2IxZDRjZjIsIDB4YjlmYzdjYWYsIDB4ODI4ZTM3MWIsIDB4MGZiZTNiZjksIDB4ZjlmNzQxNzQsIDB4ZGI3MzQ4NmEsCisJMHhmYzAwZmI3ZiwgMHgxZmVkMmE1ZSwgMHhhNDdhMjRlMywgMHgyZjNjNjZjMCwgMHg4NWExZDY2OCwgMHhiM2Q3NTg4MywKKwkweGEwOWI5ZGQxLCAweDBjMmZiM2ZkLCAweGJlNTA5NTg1LCAweDAxYmVkODQzLCAweGFkYzI5MjNhLCAweGU3YWUwMzc3LAorCTB4MTBhMDUzNDYsIDB4NzhkZDBiZWUsIDB4YTcxYjBlNDEsIDB4OGE1MjlmN2QsIDB4N2EwNjRlNzAsIDB4Y2FkZGZlNDMsCisJMHgwMjVmNDY1MywgMHg3Zjc0ZGY2ZiwgMHhlMjIzZmI2YiwgMHhhNWUwMTVmZCwgMHhhZmE1YzgwYSwgMHhhYzJmNDBhMiwKKwkweGVkMDRmMWU0LCAweDA2ZmQ4N2JiLCAweDI0MzllOWQ2LCAweGRhYmRmODEzLCAweGZkZWEzMWQxLCAweDQ5ZTM4YmI3LAorCTB4OGQ3YjM5YTQsIDB4YjNkN2MwNGUsIDB4ODMwZDRmN2IsIDB4N2UyOTg5ZjcsIDB4YzU3YmMxODYsIDB4NDU1Yzg2ZGIsCisJMHgzMWVmN2Y0MiwgMHg4Zjk3ZWM2NywgMHhmNTg3MTgzYywgMHhlNzY5ZjdmMSwgMHgxMDE1NmQ5MSwgMHhiY2RmMzMzNywKKwkweGQyNTgwZGZmLCAweDBhZjFkYjQyLCAweDljNTk5Yjg4LCAweDc0ODQxZDI0LCAweDE5Mzk5Mjg5LCAweDdkYzQ2NWUyLAorCTB4NGEyMzY1ODMsIDB4OWE5NmMyMGYsIDB4N2Q0NGFmNjEsIDB4NGM5ODE0YWUsIDB4MzcyODdjODgsIDB4ZDg0N2YyNDcsCisJMHg1NThhM2M4NSwgMHhhNTI0YTdlNSwgMHg1MzRmZWFhYSwgMHhkM2U1NTRiMiwgMHg5NTU0OGM0NywgMHhkODY3NzE4YiwKKwkweDQ2ZjU1NDBiLCAweGMyODYwNGM3LCAweDgzYWU4ZTc5LCAweGE0ZmYwM2JkLCAweDM5ODZmMThjLCAweDdlYjkxYzJmLAorCTB4N2NjZmNkMjQsIDB4NDNiZTBlNmEsIDB4OWYyZjJjZjksIDB4MTdiOTVjZjksIDB4ZTE0M2QxZjAsIDB4ZDUwYWE0NjksCisJMHg2YzFmOTJlOSwgMHhkMzNhMTA3ZSwgMHhmNzZhMTc5YywgMHhhMWQwNzEzZSwgMHhlMTc5YzY1YywgMHg4MTg0ZTcxMiwKKwkweGVkMTY0ZmRlLCAweGNhMDRlN2I1LCAweGJlMDAxZjM3LCAweGQ5YzVmYTM5LCAweDNlZGJmMDM2LCAweDE0Y2JmNjNiLAorCTB4Y2RmZDQ3ODgsIDB4MGNhZWZlMTAsIDB4NDQwYzNmM2YsIDB4NDNmYjdkMzcsIDB4YmNkZDE4NTIsIDB4YzMyNzkzMjUsCisJMHhmMjQ0MGRkMCwgMHhlOTY0M2EzMiwgMHg3ZWVjYzNjYywgMHhiNWYyOTVkZSwgMHhhMWFmODE0ZiwgMHg0MjQzYzBiZCwKKwkweDZiNTc3ZjdmLCAweGI0NmQxYmRmLCAweGIwMzZlNmZmLCAweGMzMmJiZDQ3LCAweDdiYmVhNTBkLCAweDZmZTEyYjkzLAorCTB4NjRlZjQ4MzksIDB4OTNiYmI2ZjksIDB4MDdiYmYwZTMsIDB4YjczNzYxZjQsIDB4Yjg1MjBkZjcsIDB4ZmZiYjU1M2UsCisJMHg2MGMyZTRlZSwgMHg1Yzc3NTkzOSwgMHgyOWRjOWY1NSwgMHgxYmYyYWIzNSwgMHg3YmY5ZDUzMywgMHhkYjQzOWI0YiwKKwkweGFkOGZhNDBmLCAweGQxODk3ODdjLCAweDZlZjcwMzk1LCAweDM3YmZiMGE1LCAweGZmZjNlNjJjLCAweGQ1ODAwOTAxLAorCTB4MDA4MDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4MTliNWZmMDAsIDB4NjU1NDU0MGIsCisJMHhjZWY3YmJmYSwgMHg3ODYwMTkwYiwgMHg3NzQyMTAyOCwgMHg4NDBhNDQ5OCwgMHhiMDI4NTc4OSwgMHhkNzFlYTA4ZCwKKwkweDhmNGMxYWRhLCAweGU1OTM1NjU0LCAweGUwNGQ3OTAzLCAweGUzZDhmNGI2LCAweGI2OGZhZDE4LCAweDY5NWI2ZDA3LAorCTB4OTY1NjM1NmIsIDB4YjEzOWU0ZTcsIDB4MzYyNTQ2NDQsIDB4ZWI0OTViYWUsIDB4NjZhMjU0ZDYsIDB4NDJkODk5ZTQsCisJMHg3YTI2NzA0YywgMHhmNzVhOWQ2ZCwgMHg1ZWZmZmVmYiwgMHg1YjYwMmU2NywgMHhlNzRlZDY5ZCwgMHhmZmZmZWY5ZiwKKwkweDI3ZWY3ZmZiLCAweDcwY2ExNDkwLCAweGY2MDgwMGNlLCAweDk5NzBjY2FjLCAweGQ2ZjcwNjAxLCAweDgwMThlNDFhLAorCTB4ZTJlZmY0ZDMsIDB4ZjliOGRhZjAsIDB4Y2YwMzgzN2EsIDB4M2EzODAwNTcsIDB4MDFjZmUzY2MsIDB4MDMxNDAxZDYsCisJMHg3YjgxMjk1YywgMHg1OTE0ZjNhMiwgMHhmZjYwZTc2MCwgMHgyZmJkZjE2NSwgMHgwMDQ5MDgwMSwgMHhkZThkMTc5ZSwKKwkweGUzODQ1NmVkLCAweDZlNjcwNjVjLCAweGYwOGQ5ZWY4LCAweGQ5MTgwNjRlLCAweGJmZWZmZjcyLCAweDI1ZjVjMjJhLAorCTB4OGMwZWUzYjAsIDB4YmQwZDQzYzQsIDB4NWM3NWQ3OWIsIDB4OWZjZDcxMTQsIDB4NzdkMWQ3MDQsIDB4OTg4MDk2NzksCisJMHg1NTcwNmI4MCwgMHgwMGUyMDdiNCwgMHgzYzYzNmE5YSwgMHg2NzllM2U2MiwgMHgyZTk5MGU4NiwgMHhhNmYxYzgwNCwKKwkweDAxNTI5YmI1LCAweGMwMjI4YThlLCAweDc4MDc0NDM5LCAweGUzZWYxNGEwLCAweDI0NWYwNDFiLCAweGE0ZWYzOWE3LAorCTB4NjdjOGI5ZGYsIDB4ZTdjNzJmY2MsIDB4MzViMDMyNDUsIDB4ZTk5NDMyYmYsIDB4N2VkNzdiYzYsIDB4YmYxY2U3ODcsCisJMHhjZTkxYTIwMywgMHg4ZjRhODAzZiwgMHgyZTVjNGMwMywgMHgxOWJkYmIwNCwgMHgzZjIzM2ZmZSwgMHgxODEyYmQ0ZCwKKwkweGYwNjE5ZjkwLCAweDYwNWFiYTFkLCAweDI1YTljY2Q3LCAweGE3ZTkyYjAwLCAweDA2MWRmYjRjLCAweDE5NmZkODkwLAorCTB4YjI5NTdmNzAsIDB4ZTU3Y2IyYmYsIDB4ZjA4YjEwYTUsIDB4MjA0MGZkNTYsIDB4YTcwZmJkOWIsIDB4N2ZkNWZmZjEsCisJMHhmMTk4Mzc2ZiwgMHhkYTUzZjU3YywgMHg1MzBmNDI3ZCwgMHhmYmU1MmY5MCwgMHg3N2IzZjAzYSwgMHgzZGUyNzdlYiwKKwkweDIzNWVmODUzLCAweDg0OTlmZGRjLCAweDY5NzYzNmVmLCAweGM3MjQ1ZmJmLCAweGUwZTYwZDI0LCAweDM4MjgwMjhmLAorCTB4OTE2ZGIxMmQsIDB4ZjEzNjZiZGUsIDB4ZGY0YWU2ZjcsIDB4ZWEwOTdiYmQsIDB4YzkyNWU5YjEsIDB4ZDFhZGM0NmUsCisJMHgwMGUyZDNkZCwgMHhhODM5ODNmOSwgMHhmMmYxZDRlNCwgMHg3YThjZGE2YiwgMHhhN2MzMGMyYSwgMHhiZGYzNGI3NiwKKwkweGNhMTc1Zjc0LCAweDVlMzE5ZWE4LCAweGUyYzk2MGNlLCAweDVmMWMyY2Y4LCAweDBiZDdjNTczLCAweGY3MzVmMTAxLAorCTB4N2VkMGQwZTgsIDB4MTE0NmNmMDAsIDB4Y2YzYzA4ZTQsIDB4ZjJhZTMxZWQsIDB4MDdmNGMzOWEsIDB4ZmNjNzljMmQsCisJMHg2NjEzMmY5ZSwgMHgxZDc1ZjJlNywgMHgxY2VkMDFkMSwgMHg5OGJmNzAyZiwgMHgwOTNlODAyMSwgMHg2MGI1NDFmMSwKKwkweDVmNGI4ZWRmLCAweGM5MjU3MjRmLCAweDlmMDA0ZmJmLCAweDU4OWVjMDVjLCAweDVjZmQ0MjY0LCAweDdkYTM5ZmMxLAorCTB4OGZlMDI0MzMsIDB4ZTExZDZjOTQsIDB4ZmRjOGE4NTksIDB4N2M3ZmQyOGEsIDB4OGI3N2UwMjMsIDB4NDM0ZjE2N2IsCisJMHhkNzUwZTAwYSwgMHgwY2Q0M2ViMiwgMHgwYzZkOTA2YywgMHhlOGYwMTJkZiwgMHhmMTdkMmY0OSwgMHhhNDE2ZjRjZSwKKwkweDYwNDkzMmYzLCAweDFmMTdkZmY2LCAweDdmMTAxNjFhLCAweGQwYjQ0NTVmLCAweGVmZjdiMDI2LCAweGJlNTVmN2E0LAorCTB4NzRjZWY0ZmEsIDB4OGU2YmUzMzcsIDB4MjZmNTEwNjUsIDB4NGU5MDJlMzgsIDB4NDc5NzhmNDcsIDB4MTgzYWFlNTgsCisJMHg3MTJiZjU1NCwgMHg5YzdmMjE3NywgMHhmYjNlZGQyYiwgMHhkMWRiZjQxMiwgMHgyMjMxNjBhNSwgMHg2ODRiOTdiZCwKKwkweGFiYzMwODM4LCAweDQ5YWI4ZmRjLCAweGFlNTEzM2Q2LCAweGU4ODEzZjgyLCAweDZlMTc5NjZjLCAweGU0YmJmMTkxLAorCTB4OTc0MTdiZDYsIDB4MWQzNzIxMTgsIDB4MmY1NTMzZjcsIDB4ZDNjNzFjYWEsIDB4ZjcyZGUyYTEsIDB4ZDFiZjkwM2IsCisJMHg5ZmIzMDIxZCwgMHhlY2NjYmI0NiwgMHhlNGZjYjFiMywgMHg3ZjEwNGI4MywgMHgwYmIyNWZhMywgMHhlZWIyY2Y0OCwKKwkweDdlNDg0N2JkLCAweDQwM2I2YjFkLCAweGU3NDAxZTc3LCAweDJlYjY2ZWRhLCAweDUyN2Q5OTMzLCAweGQ5OGJlMzFlLAorCTB4NDE0Njg4YWQsIDB4NjA1NmFkN2MsIDB4N2MzNWE3YzYsIDB4MGM3YmU2MWUsIDB4N2MzZjUxYmMsIDB4MzgwNGNlMDYsCisJMHg5ZTdjZWIxOCwgMHhmYmYzNWJmOCwgMHgxMDk2ZmJjZiwgMHhlM2NhMWJiNSwgMHhhZDkwMWY5OSwgMHgzZmE2MWI5ZCwKKwkweDQ2NjAwMGRmLCAweGEzZGI0M2ZhLCAweDNjMzA0ZmJkLCAweDYxMjVhZjY4LCAweDI3YjEzZDdiLCAweDllMGI3MGViLAorCTB4Y2Y1Mzc4OWYsIDB4YzU1Zjc1Y2MsIDB4NDE2ZWE3YzMsIDB4NjhmNmNkNzgsIDB4MDkxM2U3MjYsIDB4ZjNhNTQ5ZTAsCisJMHgzZDdiYTYyNywgMHgxOGE1NjE3OCwgMHhiOTIxNmZlYSwgMHhiN2Q4YzY3NywgMHg0N2YxZjllMywgMHgxM2JiM2ZhNywKKwkweGE3NjdkYWUxLCAweGYyNGM4OWQ5LCAweDdkZTUxOTFmLCAweGRhMDExZDNjLCAweDdkOTUzZTdmLCAweGVmMWMyOTA3LAorCTB4YTUyZmM1MGEsIDB4NTdkYzY2NjcsIDB4MjRjZmU3NGUsIDB4YWE4ZjA5ZGEsIDB4YTM0N2ExYmYsIDB4ZmFmMjgwMWMsCisJMHgxNjc5N2MxMiwgMHg4MjkzYmQzNCwgMHg4N2M0NTA2NywgMHhjNzlkYzRlYiwgMHhkYmNiYjQwNCwgMHhjNDgzYWUwYywKKwkweGZlNDdlYWY3LCAweGY5MGNhODdhLCAweDM3ZTY3YWE5LCAweGZhNDRjZjBmLCAweDBjOWJkZjZhLCAweGFmNTg0ZWY0LAorCTB4NmM0MGUyZTMsIDB4ZGZmYzk3MjAsIDB4OTE1ZmZkYzYsIDB4Mjg4ZWRkNGYsIDB4NzExMWM3Y2IsIDB4NWUyM2ExYTYsCisJMHhhNzc1MzcwMywgMHg4ODhlM2U1YSwgMHg2NWMwNzUzNywgMHg4ZTgyZjUwYywgMHhmYzU3YTlmOCwgMHgxZDc0NWVhYSwKKwkweDIwMWFiYTI1LCAweDg0MjJlM2MwLCAweDA1NTc2NDBjLCAweDc4YTBlMDkyLCAweGM4YzdiYTEwLCAweGNlZDYzZmU0LAorCTB4ZDE5MTY1NDYsIDB4OGI4MjJmNTEsIDB4MjI0MTc5ZTIsIDB4NmZjODUyOTgsIDB4YzE3ZTVjNWQsIDB4NzEzZmE2N2IsCisJMHg5MjY2Y2ExNywgMHhmYmY1NDEzNSwgMHgyMjMzODVhYywgMHhmMWJmYjNlZCwgMHhjZGNmYjIxNSwgMHhjMzlmNjY0NiwKKwkweDhkMmYzYzUxLCAweDM5MWZmM2M1LCAweGMyYmY3ZDllLCAweDg3ZjMwNWY0LCAweGY1YTRmOTMzLCAweDE3Mzg1YWRmLAorCTB4MGFlZjE0MWMsIDB4OWJjMmU0ZGEsIDB4ZjQ1MTZkNzAsIDB4MjljNTJjNzIsIDB4MWRlZTQ5NTgsIDB4YzAzYWVmZjcsCisJMHhlNmY1YjllNCwgMHhiZjc3ODRhMywgMHgwZTBmZTk5OSwgMHgwNTA3Yjk3MCwgMHhmN2Q1Mjc5ZSwgMHhhMDQyOTg1NiwKKwkweGI3N2EyNDJiLCAweGZkZDU3YTMxLCAweGYzODcyZGMxLCAweGUwZmVmODVjLCAweDgwNzkzOTBiLCAweGYyNGNiY2Y2LAorCTB4ZTUwNWZlMGYsIDB4N2ZjNjJhNzMsIDB4M2I1YzM2ZWMsIDB4ODUzYmJmZjcsIDB4N2E1OGUwZjIsIDB4ZDk0NzViZWIsCisJMHgyYzNjMmE3YiwgMHg0ZjU0MzhmMCwgMHhmN2ZlZTA3YywgMHhhMjY0Y2U5OSwgMHg4YjA4YzMxMywgMHhjZDc3MDMwZiwKKwkweDJiOWJmMjYwLCAweGZlOTFjNmU1LCAweGY0YjQyNzgzLCAweDdkNTNhNThkLCAweDdkNGZhNTVmLCAweGNkMzdiZDVmLAorCTB4OGUzOTMyMmEsIDB4OTQ3OWZjMTgsIDB4OTBjYzVmZjcsIDB4YzQ4ZDdjMzUsIDB4Y2RlMmYzZmEsIDB4NzVlMTZmYjQsCisJMHgxMWMyMDI0NCwgMHgzZjQzNTZmNiwgMHgyNjM1YmY1MSwgMHg1ZjQ4ZGI4YywgMHg2ZjYwOGQ0ZCwgMHhhMWVmYjYwMywKKwkweGNmYWI4OWI4LCAweDI5ZjVlNzg1LCAweDAzNzIyYjJmLCAweDc4ZWQwOWE3LCAweDkwNjc2MmIxLCAweDZlZWNjODk0LAorCTB4NWViYjcwMTEsIDB4YWJlZGM0YWMsIDB4ZTgwZjQzYTAsIDB4NzVjNDQ3MmYsIDB4ZmRhMDM1YmYsIDB4YTAzYzc3MGQsCisJMHg1ZGM2NDU3NywgMHg3NGYxNTFjZiwgMHhiYjhmNGZjZSwgMHhhNmM4NGE5ZSwgMHgzMTYyM2RmOCwgMHg5ZTY2YmFiMywKKwkweDdiYjFkMDU1LCAweGY3NGU5MGU5LCAweDQzZWVkY2YwLCAweDFhNzRmMDNiLCAweGNmNDg2ZGVkLCAweDgxNzNhMmUzLAorCTB4NmY1M2U1MTUsIDB4MWY5MWU1ZjAsIDB4MmUzZGRmYTgsIDB4YjBmZWQ4YmEsIDB4ZTkwNTYwNzAsIDB4M2NiZTc0MWIsCisJMHgxYmM0ZWY1NiwgMHgyMzNhYzA0MCwgMHg3N2VlZDkzOCwgMHgyNWY2NWQ1MCwgMHhkNDEyYjhiMCwgMHhlMjI3NGQ0MywKKwkweGRkMTJhYTJkLCAweDNjNzBlNjlkLCAweDUxNjdlMzU0LCAweDVjYTNlZTBlLCAweGY1NWY2ODJiLCAweGEyOWJiNDU3LAorCTB4MzBmZGVkN2MsIDB4YjhmODVhM2YsIDB4NTE1ZGZiOTUsIDB4OThlZWU4YTIsIDB4NTc2ZTVmYzAsIDB4MWQwNmRjZjQsCisJMHg5ZTY3ZjcxMiwgMHhiOTE0Y2I0NywgMHg0NTIyZGQ2MywgMHg0YThkMmRkNiwgMHg5YWM2MGY5YywgMHg1M2YyMTIzYywKKwkweDgyZjUxYmI2LCAweGI3Y2U5OTcwLCAweDAyOGM1Njk3LCAweDlkZmE4YWQwLCAweDVlZmUzZTA1LCAweDUzOWUzNmI3LAorCTB4ZjJjYTU5MGUsIDB4Y2JjYjBlNzIsIDB4YWY3NTE0YjMsIDB4N2E0MGRjMTcsIDB4YzJmZTUxMzUsIDB4MmZjMTJlZjUsCisJMHgwODJiZmFkMSwgMHgxNjAxZDViMSwgMHgwNmE4YWQxZCwgMHgyNzAxY2ViNiwgMHg5YjgxZTc1YiwgMHg5ZGExZjNhZCwKKwkweDgzYTAwYmFkLCAweDlmODI5N2FkLCAweGFmODE3MGFkLCAweGI4M2U1ODBkLCAweGY5ODgzMmRkLCAweDUyYmQ3ZTE4LAorCTB4YjQ1Y2JjYTQsIDB4ZmM3YWUyNjQsIDB4Njc1ZTQ1NzEsIDB4Zjk0NjA3OTcsIDB4OGYyZjlmOTIsIDB4NjE0YWUwNzksCisJMHgyZTRkOWQ3NCwgMHhkZDk5YjM1MywgMHg5MjMxNzJhYiwgMHg1MTc3ZTI3ZCwgMHhiNWExNGRlMCwgMHg5ZGVjMDIwMiwKKwkweGYxOTBjOThiLCAweGViMjBkOTlkLCAweDA3MDJhZTA4LCAweDQ4ZmVlNzgzLCAweDVjMDY5NDc5LCAweDA0ZWU1NzNhLAorCTB4ZDg5YWE5NzIsIDB4NzYyODc2NGUsIDB4NWQzNjRjNTIsIDB4ODdkN2Q2MWMsIDB4NTQxNzFlNTYsIDB4NDlkMjAxYmQsCisJMHgzZWJjNjBmOSwgMHgyY2U4ODMyMSwgMHg1Y2ZjYWU4YSwgMHhkYWYxOTBjNiwgMHgzYTlkZjdiNiwgMHg4NTQ1YTM4YywKKwkweDg0MzYyZDk1LCAweGU1M2Y1OTBmLCAweGYzZTU1OTcwLCAweGQ5MWYwODk5LCAweDliYTlkMjc2LCAweDU5NWU3NjQ5LAorCTB4MTU2M2I3YTgsIDB4MzlkODZlYmEsIDB4MTg0ZGNmMDcsIDB4NGU1MGEzZmMsIDB4NTI4MjRkOTIsIDB4YjE1MTVkNWMsCisJMHg2NzdlODA3OSwgMHg3NGViYWM5NCwgMHhkYmM2NTdlOCwgMHg1NzE5YzU4MCwgMHhkNTlmODAxNCwgMHhlNDY1NjhiMywKKwkweDdlYmMzNTI3LCAweDdhZTE2MzVkLCAweGJkNzA2YmRiLCAweDYwZGE3ZTRhLCAweGM4Y2FjNWYyLCAweDczNzU5YWQzLAorCTB4NmU1ZjI5OTMsIDB4M2ZmN2YwMzAsIDB4YmNlNzJjOWEsIDB4MjIzMjcyODIsIDB4OTg0MTUzM2UsIDB4NDRmNzNjNGYsCisJMHhlNDEwMWMyMSwgMHgxODZiNTY5NiwgMHhmN2MwOGZmZiwgMHg3N2MyMWZjZiwgMHg1ZGViOGE2YiwgMHg1OTRkY2YxNiwKKwkweDUzNGZmYTQwLCAweDY3Njc3OWYyLCAweDI0NWQ4YTU5LCAweDNmODYxNmZjLCAweGQyZDU5MzEwLCAweDUyMDc0NzhhLAorCTB4N2JkMjFmOWMsIDB4Nzc2ZTE4YzEsIDB4NWViOTVhMWYsIDB4MzI5YWI2Y2UsIDB4Mjc1ODFmMWQsIDB4ZmJhZTBmZDgsCisJMHhlMjhmOTc3YSwgMHgwODQ4MjdkMCwgMHhkNTk5ZjNiZSwgMHgzNDc0NDAzNSwgMHg0MjhjODE4OSwgMHhkMTFkZDdkNCwKKwkweDI3NjQwY2M3LCAweGE4MGIxZGFhLCAweDdmYzhhNWJjLCAweDA2YmMwMzliLCAweDk2ZTUxZmU2LCAweDJkOThmNTMzLAorCTB4ZTVjMTA3ZWMsIDB4YTVjYTFlZjgsIDB4ZDJhY2U5YzgsIDB4OGQ0OTcxZTMsIDB4YTVhZDFmN2IsIDB4M2MyYWY2YWUsCisJMHhhMjQxM2MyMSwgMHhhZDBhNDlhNywgMHgxNTM4YmIyMCwgMHgxM2UxOWVmZiwgMHhiOTUzYTdlNiwgMHhhYmYxMmEzZCwKKwkweDZkZWY0ZjY3LCAweDQyNzQxYzY5LCAweGVkMzYxZjg0LCAweDBmYWJlNmY5LCAweGEzNGRkZjUwLCAweDBmNWQzYjY2LAorCTB4MTY5NmRmZmIsIDB4MWFiMDBiZWEsIDB4ZDUxN2M0ZDQsIDB4MWI3NTY3MmYsIDB4OTU1ZmQ0N2QsIDB4Mzk3ZjNlZWQsCisJMHhhZjc4YWJkZCwgMHhmYTcxNDZkZiwgMHgxYjQwZmVlMiwgMHg5ZWMxY2I5NSwgMHgyZmRjNjljMywgMHg2YmZlM2FkNCwKKwkweDkzZTRlN2UxLCAweDc1MDUxMmI5LCAweDkwNWVjYmFjLCAweGFiZTQ0NmJjLCAweDA1MGJlYTk5LCAweGRjN2MyMGY2LAorCTB4NDcxMzc2ODQsIDB4YTliZjc5ZjcsIDB4YmQwZDk1ZjYsIDB4MmZhODE5YWYsIDB4YzQzYzY3YzEsIDB4ZmY0MmFkNmYsCisJMHg1YzM3YWRhYSwgMHhhZDYyZjU0YSwgMHhkNjJmZGI1NywgMHgxM2Q3N2JmNSwgMHhiNDNiNzVkZCwgMHhkOWJmNmFmYiwKKwkweDRmNWY3Y2E0LCAweGVhOGQ5YWY1LCAweDI2YmRlZDNlLCAweGE4ZjMzN2VhLCAweDY3ZWVkM2ZlLCAweGE2ZmQyYTY2LAorCTB4YTk0MGZmOTIsIDB4NzcyYTU3MzMsIDB4ZWIzMzNmODgsIDB4MjM1ZTBjZmYsIDB4NjhmY2Q2ZjIsIDB4NzA0MmRkOGIsCisJMHhlMmNlZDliYSwgMHg2NjA2ZmQ2ZCwgMHhkODdkZWFjNywgMHg0NDZjYzg5YSwgMHg4ZGRhZGJmNSwgMHg1NTY3ZWFjMCwKKwkweDFiNGZmOThlLCAweGZjOGZhNDFkLCAweDVkNTk5M2E3LCAweGFiM2NmNThjLCAweGYwOWUzMDQ3LCAweDIyNjUxZWZlLAorCTB4MTczZGRkYTAsIDB4MTExNGNhMWYsIDB4ZDkzZDczY2YsIDB4NWZiN2FhNzYsIDB4N2Y4MGViNWUsIDB4NGZhNjE3OWQsCisJMHg0YWU3ZjdhZCwgMHhkNDBjYWIzYiwgMHg3ZDg4ZGQ0NywgMHhmNzM1NmUxNCwgMHg0MjY2ZDkzZSwgMHhkMDEzNzliOCwKKwkweDNiMmQyNDBkLCAweGUyYTZlYThlLCAweGU5NzgxMmZkLCAweDUwM2VmMDFkLCAweDFhOTc2YjhlLCAweGJlYjA1MjRmLAorCTB4OTQ0NzkwOGYsIDB4MDllNDA5M2MsIDB4YTJhMzc5ZmEsIDB4MDRlY2U4YjcsIDB4ZmQ4Yzc5Y2QsIDB4NzFmN2NkMWMsCisJMHhlZmRhOTlhNSwgMHg2ZTdmMGUzZCwgMHhmZTczYzUwOSwgMHgwMmUzYmM3ZCwgMHhjMTM2ZmRjZCwgMHhjZDkxZjc2ZCwKKwkweGJjM2ZmMDA0LCAweGIxODhhZTU3LCAweGNkODJiZmMyLCAweDE3ZTcxMjFkLCAweDg4NmZlZTY4LCAweGVjOWZiNzlkLAorCTB4ZGQwYmZjYmIsIDB4NGI3MDNiMTgsIDB4MDE2NTc3NjQsIDB4MmY1MDQ3ODAsIDB4ZTdiNTg2YjMsIDB4MjFkYjA3YzUsCisJMHgxZDQ3ZjExNiwgMHg1Nzk5OGRkNCwgMHgxNmVhODA3OCwgMHg1ZmRkYWNhMywgMHg1NGM1ZGFhZSwgMHg0Mzk5YWE5OCwKKwkweGI3M2I5MTljLCAweDkxMjFkMWZiLCAweDljMDk0NWQ5LCAweDExNzk3MGY3LCAweDVlMGY1OWM5LCAweDQ2ZGNiYzc5LAorCTB4NjZmYmE1NjksIDB4NTk4YmYzMDMsIDB4OGE3NjJkYmQsIDB4NWE5ZDkzNDcsIDB4NjhkNzI3ZjksIDB4ZDJlYTlmZTUsCisJMHg5NTZkM2JjYSwgMHg2ZWU5ZGU1NiwgMHg2ZGNmYmNhZCwgMHhlYWQ3Y2FkNSwgMHhiNmNmY2FkMSwgMHhmZWU2OTY3MSwKKwkweDBkNGFmNmI0LCAweDAyZjM3ZDNjLCAweGJkZjNmZGNkLCAweGNlNzAzNTBiLCAweGY3MzRhYjhlLCAweGQzMmM3NDY3LAorCTB4YWY3N2U3OWMsIDB4NzZhYjljZDYsIDB4MmUwZWQ2MzYsIDB4YjE4ZjM1ZjQsIDB4MDhjNDExMzMsIDB4NTY3YWFiZmQsCisJMHhmZjcwYTBlZCwgMHhmZjNjMWFhZCwgMHgxZjZmZmQ2ZiwgMHhjOGE3ZmZhMywgMHhiZGRlMzFkNywgMHgzNzc0M2IxNSwKKwkweGQxNjVlYmI5LCAweDk5OWRhZTNjLCAweDU5ZWI5NDI3LCAweDljYjZmNmJmLCAweDc3NDMxNTU4LCAweDU0ZTZmYzk1LAorCTB4ZmY5NDFiZjIsIDB4MGUxNmMzOTEsIDB4N2RmNmZkZGIsIDB4OGUwYWNmMTQsIDB4YWU4OGFiMzgsIDB4MWY3YjgwYTIsCisJMHhhMTkyZjM4NSwgMHhiYTM4YWFmNiwgMHgzMmQ5MDBlZiwgMHhlODljOGY4NSwgMHgwMmE1ZTVmZSwgMHg4NTdlMzRlOCwKKwkweDNjYjA5NGYwLCAweDkzYWNmMGFmLCAweGQ5NzJmMGUyLCAweDE2MzZkZTc3LCAweDRiZTljOTZlLCAweGExMjBmM2MyLAorCTB4NmE4NWU3OTQsIDB4MjJlODE0NDcsIDB4ZWNhMTUyZTQsIDB4MjllOTI1MDMsIDB4ZjNhYmY5NjEsIDB4YzAwN2VjMjMsCisJMHg2ODgwZmQ0MCwgMHgyNzU5YjZmMiwgMHg5YmVjNzdhYSwgMHhiOThmNTYyNSwgMHg4NmY2N2Q1OCwgMHhhNTczNjJlMCwKKwkweDA2N2YyNjQ1LCAweDI1ZGZmN2M1LCAweGM0Y2VkZWJiLCAweGI0NGE3NmI4LCAweDEzOWVhY2NiLCAweDU0YzQ2ZDAyLAorCTB4YTRhMzE4OTAsIDB4NzZhZmE5ZTUsIDB4ZWQ4NzFmNTAsIDB4ZmYyYmNkMmMsIDB4YjU2ZDQ3NzQsIDB4NmY5MTk3MjcsCisJMHhiNmYwOTQwOSwgMHg2N2Y1ZmU5OSwgMHhhMjY0OGViYSwgMHhjYjA0MDdmYywgMHhmNmZjNDJmYSwgMHgzMzI3NTlhZCwKKwkweDI1MTk3ZjI4LCAweGNkMDE0NDk0LCAweGU5NDcxYzRmLCAweDI0ZGNjY2ZjLCAweDc4YzNmOTE5LCAweDBmNjUxMDFiLAorCTB4YWI3M2MyODksIDB4OTM5MGZhYzAsIDB4MDhjY2Q4ZjQsIDB4NjdhOGRkZmYsIDB4YmU5NDBiNzksIDB4NWU0NTFhZWMsCisJMHg1NGI2NWY2YSwgMHg0ZjgwM2ZjMSwgMHg3ZTc4YzJhYywgMHg0YzFiZjc0ZCwgMHhjMzI5NzUyZSwgMHg2ZGNhMWNjYSwKKwkweDM3ZmJlMGI3LCAweDUwMTczNTRjLCAweDQyOGUwYTVmLCAweGQ1ZTdlZjNiLCAweGZhNGQyZDNlLCAweGVkNTU3OTI5LAorCTB4YmY3NmNmNmIsIDB4ZDM0ODY1MmUsIDB4YzRjZWMzMmYsIDB4NjM5MWU3MDksIDB4YmU2MTVlZTcsIDB4OWIwM2ZiZjksCisJMHgxYTFlNTlhMiwgMHhlNmNlOTRkOCwgMHg0ZmY3ZTE4YiwgMHg3MWFmZjdiMSwgMHg5M2IxYTNiZiwgMHhkN2RmNWFlYiwKKwkweDllZjVkZmQ4LCAweDgxZTczNDhmLCAweDBkM2U5MGE0LCAweDRhZWMwZmY5LCAweGNhMzU3NzlkLCAweDYzMDVlNDZmLAorCTB4YThhYmY1MDksIDB4NzE1YjM4YjcsIDB4M2RjMGZkZjgsIDB4YmUxMGU3ZDMsIDB4YTdlN2NkZmYsIDB4NmJmZGJlNGMsCisJMHhhNmVlNmNmZCwgMHhlZDZjNzlmMiwgMHhkNjA3MDYxMSwgMHg5NjNhZDgwNiwgMHg1NWJmYjU0ZiwgMHgyMGRmYzM1NywKKwkweDkwZTVlYTliLCAweGQxM2VjOTMwLCAweDFiMzFlNmJjLCAweDY3ZmE4M2VmLCAweDdjYTRhOTRmLCAweGQwNmU5ZmRjLAorCTB4YzM4YjM1ZjEsIDB4MGUyNmE1YTksIDB4NmI0ZjliY2YsIDB4NDhkZTZmNTAsIDB4MDBiZjZkZmQsIDB4NjFlZDAxMGUsCisJMHhlYzdjZTBhOSwgMHgzYWJiZTQ3YSwgMHhhMzZiOTVkOSwgMHgyODc1NzI3YSwgMHhkMGZlODc0ZiwgMHg1NmI4MWY5NCwKKwkweDFlYmU3ZDQwLCAweGZlMjdjYWVmLCAweDUzMDYyYzA1LCAweDU5OWQxODEzLCAweDg5MGMzN2Q0LCAweDYzMDEzYzllLAorCTB4NzY0ZjRkYzEsIDB4M2ZmZDUzNTcsIDB4OGE3M2M5MzQsIDB4YWRhZDc2MzIsIDB4ODNmYTlhYWIsIDB4OGZmNzAzMjEsCisJMHg4NDdjOWU1YiwgMHgxNmI3YzNmOSwgMHhlNzdhNGNkNywgMHgzMWYyNDExMywgMHhmMDQ5N2U3YiwgMHgxNmY2Njc2ZSwKKwkweGY4OGMyYzMwLCAweGFmM2E4MmJiLCAweGZhOWI3ZWExLCAweDVmMTQ2MDliLCAweGRmZjhkYjY3LCAweGFjYzcyYTVmLAorCTB4YWUzYzZkNGIsIDB4MzE2YjQyZGQsIDB4MmNlZWU1ZTksIDB4ZThjYTdiZmEsIDB4NWY5MDIzNjYsIDB4NDg4NzNlMjAsCisJMHg1Y2Y4N2FmOCwgMHg0MGYyMGE3NiwgMHg2ZjU2MGQ3NSwgMHg3ODI4NWZhYywgMHhmOGEzZThkNSwgMHgxNjc1Y2VhMSwKKwkweGJkZWNhY2RiLCAweGQ3OWYxYjI0LCAweGY0NjdkZDI0LCAweGVlZmNiMWI2LCAweDNhNDZhOGNmLCAweGVmNThmNWRiLAorCTB4MTA3MGRmNTAsIDB4ODQ2ZDFjZDgsIDB4N2ExMTYxZTYsIDB4ZmRlMzZjNTksIDB4YzAwOGRjMTcsIDB4ZDFiNzkzY2YsCisJMHhjMGVmNDM3OSwgMHhkZjI3OGEzMSwgMHgyNGFlYmE2NywgMHg3Mjg4MGMzOSwgMHg4NjkzYzUwOSwgMHhkZWFjYmRkOCwKKwkweGVjYzliNjZiLCAweGYxOTdhNDNiLCAweDRlZTE3MThmLCAweDM4MmZjZmQyLCAweGZhNDU1YzBmLCAweDc4MDUzMDZkLAorCTB4MDNjY2FhZGQsIDB4OTFiNzI2Y2YsIDB4NzI4N2ZlZTUsIDB4OWVjYmZjZDksIDB4ZjRhOWY0NDEsIDB4YjZjZGZkMjIsCisJMHg0YTlkYjk4OCwgMHgxZjlkZjg3ZiwgMHhhZTc1MGJmNiwgMHg1YjgzYzJhNSwgMHg5ZjkxNjQzNiwgMHhiY2Y4NWVhMSwKKwkweDViYWUxMjUxLCAweDBmZjdjMTM4LCAweDk2M2VmYTJhLCAweGZlMTBmNGUyLCAweGY3M2U2ZWQ1LCAweGZiNGRkYjBiLAorCTB4Y2Y0OTQ3Y2QsIDB4MjcxNjY2YmQsIDB4NThmZGY2Y2YsIDB4ZjRmNjFiM2UsIDB4OWYyMDc5MzIsIDB4MTE3ZjEyZDcsCisJMHhjOTFiZGU3YywgMHhlMWNmNDhlNywgMHg5ZmU1NzI4NywgMHg5ZDMwNWZjZiwgMHhiODI5MWRmZiwgMHgxOTBjOWJlZCwKKwkweGZkZDg2ZmJmLCAweGJiYjIxMWM2LCAweGRmMWU3NTA2LCAweDE4MzM5ZGE1LCAweDlhZmY2MTI3LCAweDFkMWNkMTMwLAorCTB4NWQ0NDRmYjMsIDB4OWZiZjU0NjYsIDB4OGY3ZWQzYWEsIDB4YTljZDM5MDUsIDB4YTlkZmM5YmIsIDB4YmZmMDcxN2UsCisJMHhiOGY5YTk4YiwgMHg4NDZiZTk0YiwgMHgxZjJjZWJjMCwgMHg4N2YyM2UxMCwgMHhlNTg3ODJmNSwgMHhkMThlNzU0NSwKKwkweDIzZGU2MDI2LCAweDU4NWFiYWRkLCAweDM1Y2U5MDllLCAweGJiOWVjOWRiLCAweGU0ZmQwNmQwLCAweDM0NDczYTA3LAorCTB4ZTk4ZjVmOWIsIDB4YjgzNWJmYTMsIDB4ZDZmYzkxNzYsIDB4NGM5OTUzYmMsIDB4OWJlNzc2N2QsIDB4OGQ3ZTk0MGIsCisJMHhjNTYyYTllNywgMHgzZjA5OGIyZSwgMHhjNzFiOWZkMSwgMHhhMTQ4YjVlYywgMHhmNTg0YzRhZiwgMHg3Yzg1MjY1MCwKKwkweDE1ZTdjNDhmLCAweGQzNjNmY2NhLCAweGVmM2U5YWViLCAweDY4NTkzMmJmLCAweDAwMWUwMDUzLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYWI2NzhhLCAweDMyZWE3ODMwLAotCTB4MzFlOWM4MzAsIDB4NDNkMjRjMzAsIDB4YjcxMmQzODgsIDB4OWZhNjUxNzMsIDB4ODE4MTg1OWQsIDB4ODFiOTg4MTMsCi0JMHg1Zjg4MTc5OCwgMHhiYzMwMzIzMSwgMHhmZjVlMjQ2NiwgMHgzYjA0NjE0NywgMHhlMTgxODA0YiwgMHgwYjZmOTAxMywKLQkweDMyMDg5ZmE0LCAweGIyMDc1YzMwLCAweDAzNzEwMzNmLCAweDg4MDczZjkwLCAweDM1YjEwMDU3LCAweDQ4MGZiZjkwLAotCTB4YTNlMjA0ZGYsIDB4MTg0NWZjNDAsIDB4MDk1ZmY5YmYsIDB4NDIxNTZmYzgsIDB4ZTM0NDNmZTUsIDB4YWZjNDE1OWYsCi0JMHhmOTgwODI1ZiwgMHhiMWU0MDQ3MiwgMHhlNDIyNjllMSwgMHgwYTZkYzdjNywgMHhkZTA0MGVmNCwgMHg2N2NhODZhNiwKLQkweGUwNjA2NTUzLCAweGFhYzU4YTA3LCAweDkxZGJmODQzLCAweDYyODFmM2U0LCAweGY2MTBhYWVjLCAweDg2MDYzOTZiLAotCTB4MWRiOTQwNWYsIDB4N2RjZGQ4NmEsIDB4MGRmZjk0MDMsIDB4OWE4NmFiOTQsIDB4ZjFiOTAwMDMsIDB4MDM2ODUwNTQsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTkxNWM1OGEsIDB4MTlkNDQ0MTgsCisJMHgxODM0NGMxOCwgMHgyMDY4NTYxOCwgMHhiNTg5NjljNCwgMHg5ZmQzMjliOCwgMHg5MGMwYzJjOSwgMHg0MGI5YzQwZCwKKwkweDdjYzQwZjljLCAweGZjMGMwYzRjLCAweDE3ZWJjNDRjLCAweGY1YjA0NTE0LCAweDg0MTgxOTA0LCAweDAyNmZmYzgwLAorCTB4ODVkNzBjMGMsIDB4OGJiZTE4MTgsIDB4MDMwODMwMzAsIDB4ZjE0MDJlZjksIDB4MDFjZTIwMDQsIDB4NThhMDZmNjIsCisJMHgwNDVlOTAwYiwgMHgyYzQwZGRjNCwgMHg3Y2RmOGEyMiwgMHg2YmYyMDI1MSwgMHgzN2Y5NTE4NSwgMHg4NDdiZjhkMSwKKwkweDEwNTdlYmYwLCAweDQ3YWYyZmMxLCAweDE2MWIxZTQwLCAweDNlM2YyMmQxLCAweDNiZDAyOTIyLCAweDAxNWY1ODEwLAorCTB4YzcyNjVmOTUsIDB4MGYyN2QwYzAsIDB4YjhhODdmOGMsIDB4NGJmYzkyMDEsIDB4MGU1Y2JiMjAsIDB4NjA5NmY2YzIsCisJMHhmMjA2Mjg2MCwgMHg5YmIwMTUwZCwgMHgyZjk0MDNlYiwgMHg4NTdkY2EwMSwgMHhjYzAwMDNjYSwgMHg2ODhjYmFjYywKKwkweDAwNjg4Y2JhCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHg0NTU0NzgwOSwgMHhiZWRkNzBiNiwgMHhlOWQzYmI3ZCwKLQkweDg0ODQ5ZDI1LCAweDE2NzRiMDkwLCAweDI2YzQzNTEwLCAweDYzMGEwODQwLCAweDk0NGMyMTI3LCAweDYxNTE1MWE4LAotCTB4ODQwOGVjNDQsIDB4Zjk3MDdkOTAsIDB4MzdkN2Q0NzAsIDB4ZGY5NTAxMmMsIDB4M2UzMGViODksIDB4MGUwYzFhNzQsCi0JMHgxMDM2YTBjMywgMHhjNmMwNmEzMCwgMHg2ODBlODMwMCwgMHg4Y2MwODM3OCwgMHgzNjQ1ODRjYiwgMHg1YzcxMDkyMSwKLQkweDdmOWU2NDY2LCAweGJiNzU1MzlkLCAweDQ4ZTliZGVmLCAweDliZGZmYzc0LCAweDNmNmZlZjM3LCAweDU1NmVhMmJmLAotCTB4NWIzYWFhOWQsIDB4YWE3NTNhOWQsIDB4NDIwNDk0NjIsIDB4MWJlNDI2YWUsIDB4NzFmNGQxZjgsIDB4MTA5MjEwOTEsCi0JMHg2OWYyYmI0ZSwgMHhiOTEwOTYzYSwgMHg5NmJmY2EyNywgMHhmZjZlMGQ1NiwgMHg0MDE5MDRmYSwgMHg1YmU2YjljOCwKLQkweDQyNTRlNjVjLCAweGMxNTEzZDNjLCAweDM5Zjk2OWFiLCAweDRjZGY5ZTdmLCAweGJjYjYwYmNiLCAweDdjZDIzMGVmLAotCTB4MDhkMTE2ZjUsIDB4MTZlZDg2ZTUsIDB4NGFiOWRmNmMsIDB4ZDZiZTQzZjAsIDB4NTVkOGZlZGMsIDB4NDViZGRmMzQsCi0JMHg2ODI4NmIyNCwgMHgyMDY2Y2ViMiwgMHg4ODljODQzOSwgMHhiNDY3ZWMyMiwgMHgyMTIyNDgxYiwgMHhhZDk2MTY2NSwKLQkweDE2NjNiZDVlLCAweDYyZGU1N2Y0LCAweGZlZGExNjI2LCAweDgxZThiMzQ0LCAweDgyYjU4MmZjLCAweGFhZmVkMDlmLAotCTB4NGE2NjViNWYsIDB4ZjllNmYwYTYsIDB4NDVjNTgwODUsIDB4MzcxZjZiZjMsIDB4MmM4NGVjYjksIDB4YTM4MWZlZGEsCi0JMHgxOWM4NDZjMywgMHg5OTcxMTQ1ZiwgMHg4MWU1MWU3MCwgMHhmYzJhNDI0YywgMHhkMzI0YTcxYiwgMHgwNDFiMTVmNiwKLQkweGFmYzI4MWI3LCAweDEzYmU3NTU4LCAweDJjZDE1N2M2LCAweGJjMjkxNzBkLCAweGUyNTY3NWNhLCAweGZlZmFjOTFhLAotCTB4NmQ3ZjQwODYsIDB4MmRiZmIwYzcsIDB4NTdmNDA2NTIsIDB4MTM2ZWUxN2UsIDB4OTI5ZTYxMTEsIDB4ZDM1NWRhMDcsCi0JMHg5NWJjYzA3MSwgMHgxYWY4Y2Y3ZSwgMHgxODQ0NmI4OSwgMHhhMWJmZDU5ZiwgMHgzNTdhZDFmZCwgMHg5ODZlMGIyZiwKLQkweDc4ODE4ZDYyLCAweGFmOWQxYzYxLCAweDYwYmZhNjU5LCAweDliZDVmOTgzLCAweGYzZDVkODQ2LCAweGYzMGFkZDI4LAotCTB4MzZhZmYwYTgsIDB4ZjhjMWIxNGQsIDB4MzJjYTliNTYsIDB4ZDcyYWYwYzMsIDB4NTE1YzQ5M2QsIDB4NGNhZGYxYWEsCi0JMHg5NTU1ZTgxZiwgMHgzZTMzZDNlYiwgMHgwNTRmMTlhMiwgMHgwNmMwNTkyNSwgMHg2ZTliZjY3OCwgMHg3ZWZlMTUxYywKLQkweDdhNDU4ODU4LCAweDM1MTNhZTU3LCAweGYxZTUyOWYwLCAweGZkM2VmY2JiLCAweGJjODNjNTI3LCAweDliNWZlZWNkLAotCTB4MDJkYmE2MWEsIDB4MmJiN2ZkMjcsIDB4YTcxZWI3NGMsIDB4MWNlZWM3NDIsIDB4N2QyNTdjMzUsIDB4Yzc0MWU4MGMsCi0JMHg2MjczZThkMywgMHgwOTJmODRmYSwgMHgyZTdjYTdkMywgMHhiZTMzZDNhNCwgMHhmNGFlOTg5MSwgMHhiM2ZiZjFiOSwKLQkweDU3NGM1Y2JlLCAweDNlOTgzY2Y5LCAweGQ0YzIyYmVmLCAweDdhYzEyYmVmLCAweDMxZDM3YzZiLCAweGYxNzlmMjZkLAotCTB4NzJiZThiZmIsIDB4ZWFmOWQ3NGMsIDB4ZGY3YWZiZjAsIDB4ZjgzNzRjNDIsIDB4YjJmZWZjNjQsIDB4MDFhNjM5NmYsCi0JMHhiZTRkYTc0ZSwgMHhmYjM2OTg5NSwgMHhhYjZmNThmYywgMHgyZGE2MWQ2ZiwgMHg1ZjdlMDBiZSwgMHg5OGU3ZjFjMSwKLQkweDc0OGNmMjQ4LCAweDcxMGYwZWZlLCAweGI4OTM3MjUyLCAweDQ0OWU0ZjYyLCAweDJjMjU3MWYzLCAweGNlNTMzODlmLAotCTB4YTI3Y2QxMzMsIDB4M2UyOWU2OTcsIDB4Nzk4MmFiOTIsIDB4YWU0ZjlhNjYsIDB4MWY0M2U1NjMsIDB4MzQ1MWY5MjQsCi0JMHhlNTY2NTQzZiwgMHhmOTNjMmI2OSwgMHg2YjRmOWExNiwgMHg1NjIzZTU2NCwgMHgzNGQxZjljOSwgMHhjYWNmYzIzZiwKLQkweGNjMTBkYjJmLCAweDY1ZmNkMmI3LCAweGQ1OWU1NjAxLCAweDM0NmMwYTRhLCAweGY5NjQxNTlmLCAweDAyOWViZGVjLAotCTB4Yjc2N2NkM2IsIDB4ODdjZTdjYjMsIDB4ZTY4MzgxNzIsIDB4N2I1ODNhNzMsIDB4MTIwM2RlM2QsIDB4NmQyODRkOTksCi0JMHgzYzhiOTU5ZSwgMHg2ZjM0NDFjNiwgMHgzNzEzNzcyMiwgMHhhMzdjOGJjNSwgMHhlMjgxMzhjNywgMHhmOTYxNzI0MSwKLQkweDU4MjdmOTc2LCAweGMyZTRjOWJlLCAweDM2Nzk3NmYyLCAweDFlNGIzNzk2LCAweDU3MmEzZjJjLCAweGM5YjM3OTYxLAotCTB4OTE3ZmU1ODMsIDB4NTZmY2M1ZWYsIDB4YTZlNThiYzksIDB4ZmFjMzdmZmEsIDB4MmM1ZTRkNWIsIDB4ODY1ZmFhNGYsCi0JMHhjNjQ5MTZmOSwgMHgxYmVhY2JmMiwgMHg0OThiN2ViMSwgMHg5NjI3ZjJjNiwgMHg5OTMzZDJmYywgMHhlZjA0ZmI5NiwKLQkweDhiNjdjMDUzLCAweDQ5Mzk2ZjA1LCAweDI0MDlmZTA3LCAweDY5ZmU1MDk1LCAweGUwNzRjODEwLCAweGM5ODEwN2Q3LAotCTB4MjBmY2QxYzYsIDB4NjA1ZGNhMTMsIDB4MjAwYmNlNTcsIDB4MDAxYmY4YWYsIDB4MWYxN2IyZjksIDB4Y2YzODQ1NDksCi0JMHhjMjg5MWMyMSwgMHhjNzBlMmYxMSwgMHgwMzU3M2JiZCwgMHg1Y2JiYmRjNywgMHhkNDIyZjM4MSwgMHgxZmU5NmM1YiwKLQkweDJiZWVjMDljLCAweDVkZDllM2I1LCAweDA1NzljMGExLCAweDM3ZmJkOGUxLCAweDI2ZWZmNzJmLCAweGJiZjNjNzZhLAotCTB4MGI0ZTA1MmEsIDB4ZGZlZDg5YzIsIDB4ZDNlZDM2NzgsIDB4YmVkMzY3ZTIsIDB4MjA3NjdlMTAsIDB4MzdmYTEyN2UsCi0JMHhiNTc3ZWM5ZSwgMHgzNzdlYzlmOCwgMHg3MDc3OWY4NCwgMHgwN2ZhODMzYywgMHg1YWJiZDM2NywgMHgzNzdhNmNmYywKLQkweGUwM2Y5Zjg0LCAweDZmZjQ4Njc4LCAweDY5ZWZkOTVlLCAweDVlZmQ5M2YxLCAweDIyMWYzZjA4LCAweGMxZmVkNDljLAotCTB4OGI1ZjdlNjksIDB4NDNmN2U2OWYsIDB4ZTEwNGY5ZjgsIDB4YmNkZmVmMGMsIDB4ZTJkNDFlYzYsIDB4MTBjMWVjNjcsCi0JMHgzZjExM2E3ZSwgMHg0ZTBmZjY5NywgMHg3ZTJkNDFmMywgMHhmMDg2MGY5YSwgMHg2NzhlMjVmMywgMHgzNWU2ZmY1NCwKLQkweDNmMTY5MGY2LCAweGYwODUwZjYzLCAweDMzODAwNDQzLCAweGQ5ZTM3ZmJhLCAweDNmMTY5MWZhLCAweGUxMGEzZjViLAotCTB4YzY3MDgyYzcsIDB4MzkzYzZmZjUsIDB4OTNmMTZiMWYsIDB4M2YwODcxZjMsIDB4NDI2NzA4NzEsIDB4ZmQ2Y2UwZmYsCi0JMHhhZDlmOGI1OCwgMHg5M2YwODcxZiwgMHhmNTI2NzA4MiwgMHg3ZjM5NWU2ZiwgMHhlNzI3ZTJkNiwgMHg2NGZjMjFjZiwKLQkweDNlM2M5YzIwLCAweGQ4ZTE0MjFlLCAweGYyZDM4NmZiLCAweDJkM2YxNjg5LCAweDMzZjA4NDlmLCAweGYyMTRlMTBhLAotCTB4NGUwNDVjZjEsIDB4N2UyZDA5ZWUsIDB4ZjA4NDRmNzIsIDB4YWU3MDgzOTMsIDB4OTY5YzFmZTksIDB4YjRmYzVhMTMsCi0JMHhlN2UxMDg5YywgMHg1ZDczODQ2YSwgMHg3Yjk1ZTZmZiwgMHhkYzlmOGI1MiwgMHhhMzNmMGM5MywgMHhjMWI0OTZmNywKLQkweDQwZDc0MzdhLCAweDRjOWI0OGI3LCAweDA4ZjFlZTM4LCAweDY0ZThiZWI0LCAweDI2ZTlkMTc5LCAweDhhODg4NzYwLAotCTB4M2RkYTQxN2QsIDB4ZGI2ZmFkMjIsIDB4MDhmZDliMTAsIDB4ZjkxOWRiNTEsIDB4ZWM3OGMwMzcsIDB4ZGI1MmZhZDQsCi0JMHhkMWI5MzExOSwgMHhkNjJiYmIxYSwgMHhjN2M5YTcxMywgMHhlYTZiMjUxNywgMHg2OWE0OTQyNywgMHhiZjRlMDdjYSwKLQkweGM4M2U1MzRjLCAweGE3YzlhZDliLCAweGE5YTk1Zjk0LCAweDVmMmVhNDNmLCAweGYwYjYxZjkzLCAweDU0ZmQ0ZDVhLAotCTB4M2U0ZDI2ZjksIDB4MzQ0ZmY5N2QsIDB4ZGUzNzg3ZjUsIDB4NjRiZjI5YTUsIDB4ZmNhNjg1NjUsIDB4NGQwMmZmNTIsCi0JMHgzZjc1ZjJmZSwgMHgxNTFmZDRkMywgMHhiZjI5YTQ1OCwgMHg0ZDExZTVhMiwgMHgxM2UwZThmOSwgMHgzZDk4ZmM5YSwKLQkweDhmZWE2YWNmLCAweDI5YTM1ZjZiLCAweGJkNzg3ZjFmLCAweGM3NDI3Y2E2LCAweDUyOWU0ZDI2LCAweDcyZTI3OWMyLAotCTB4Y2Y4MTE3OWUsIDB4MDdlYmIzMDksIDB4MGI5ZWQwOTksIDB4Mzc5ODRkZGEsIDB4NGVkMGRiMjUsIDB4NWNjYmRhMGYsCi0JMHg0ZDFkMjljNywgMHgwMDZiYWYwNiwgMHg4NDg2ODE0ZCwgMHhjOTc5ZGJhZSwgMHg1MDc0OTdlNSwgMHhhNTc3ZGYzYSwKLQkweGZkMjcxMmY3LCAweDdiYzk5ZjdlLCAweGZkODIzMzg1LCAweDkwMmZlOTQ5LCAweDA2NWQ0ODI0LCAweGNiZTVmNTQ4LAotCTB4Zjk3ZmM2MjQsIDB4MWM0NjE3MjksIDB4MGQ2YmVkYTEsIDB4Njk2MjIzZGQsIDB4Zjc5MGNiYmUsIDB4ZjFmOTQwOTQsCi0JMHg3YzgwYzE1OSwgMHgzYTkyMmQxOSwgMHgyNjZkMTdhOCwgMHg0YjJmZjc2OCwgMHg1NjQxNzljZCwgMHgyMWYyZTdmMSwKLQkweDMwODRlZTU0LCAweDM3OTJlNWRjLCAweGU3OGFlYzA5LCAweGMxOTNkZmViLCAweDQyMTg2OGNlLCAweGM4NGM5NWU3LAotCTB4ODJmNzg0YWYsIDB4M2Y2ZDA2NzIsIDB4NGJjOTJjYTQsIDB4ZDQ0ZDk5ZTEsIDB4NmZmNzU3MGUsIDB4NjI2N2ZkYTIsCi0JMHhmZmQwNGRmZiwgMHgzN2ZhM2VmYSwgMHhmYTZhZTVhNywgMHhhZTVhMWE4ZiwgMHg0NGNhM2ZlOSwgMHgzYjUyNzdmYiwKLQkweGVmMTBmZWIzLCAweDRhZTkxMjlmLCAweDBlMTE1ZTQyLCAweGExZTZmZjYxLCAweDMyZmZkOGU1LCAweGE4OGZkZDEzLAotCTB4ZjUwZThmZmIsIDB4ZjFmMjBjZGYsIDB4MTA5ZmY0M2EsIDB4NTc2OWZlNjEsIDB4YjQzZmU3NmEsIDB4MTM3ZjNiNDIsCi0JMHhmYWY2ZmY5YiwgMHhhM2ZlZjMzZiwgMHgwYTZmZmU3MSwgMHgxZmYzNjY3ZiwgMHg2ZmU2YzE1YSwgMHhmZDQzNzA2NiwKLQkweGRmZjg0MjNiLCAweGE3N2ZmMzA5LCAweDRmYTdmOWFmLCAweDU4N2ZjZWQ0LCAweDY2ZmU3Njk1LCAweGY1YmJmZmQ2LAotCTB4MzZmZjc5MjcsIDB4ZTEzZGZmZWMsIDB4YjBmZjliMjQsIDB4NjRkZmVjMmEsIDB4N2Y4MWJhZjYsIDB4NzVkMTI5NGMsCi0JMHgxOTNmZGE3ZSwgMHg0MGQxMTU0YywgMHgwZmRhMTc2MCwgMHgyOGUzMjNhNCwgMHhiMGYyMTMxMywgMHhiOGUzODY5MCwKLQkweGRiZjE5YTJmLCAweGRmOTRkMTE3LCAweDg4YzhiZjUwLCAweDlhYTdlMjFmLCAweDZhNDNlZThjLCAweDZlNTQyY2I4LAotCTB4MWU4MTMzYzgsIDB4MWZiYTcyYzIsIDB4M2E4N2NiOTksIDB4ZmU0NDQ1YTcsIDB4ZmQ5OTRmMjYsIDB4M2I3OGU5YzMsCi0JMHhmMjE5NDQ1YiwgMHhlNDlhOWU3MywgMHg2YjU3N2QwNywgMHg0MDk2NzcyNiwgMHhjMjA5MjMzYiwgMHgxZTllNGZmNywKLQkweDJmM2Q0NmI1LCAweDUxYjczYTdkLCAweDkxYTFkMTNhLCAweDM5MWUzNjJmLCAweGEzYWM4YzlmLCAweDI2MDQyYmUzLAotCTB4OWZjZTE3MTgsIDB4NDIxZGZiYTAsIDB4ZTk0NzExZjcsIDB4OTNkMjAyN2UsIDB4N2U4ZmVkMTIsIDB4NDNmNzRlM2YsCi0JMHg5Yjk2YTRjNCwgMHg2NDQ3NmM3YSwgMHg3NDE5ZmJjZiwgMHhlNTEyYjdmYywgMHhkZTc5YzFlNywgMHhlMTQ1MjI4MSwKLQkweDRmZmUxOTE5LCAweGQwMzU3ZGQwLCAweDk1YTM2ZTYzLCAweDFlM2MzZjIyLCAweDZmOWMxZjNhLCAweDVmZTBhOTc3LAotCTB4ZDJiYzcwMjMsIDB4ZjZmMWI3ZjYsIDB4ZTE0N2M2MDQsIDB4MzZiMjcyY2YsIDB4MGY3MjUxMWYsIDB4Yjc5ZjI4YTIsCi0JMHg2NzAzNWUzMiwgMHg0ZDJmZjEwNiwgMHg1ZjZmZWRhMiwgMHhiNDIyNDNiMSwgMHg3NGExNDFjZSwgMHg5N2UwMDJjOCwKLQkweGM0MTIyNDA3LCAweDAyNDc2NDdkLCAweDQwY2NlNGM5LCAweDBjOWQ3YmUxLCAweGE1ZDM2ZGZlLCAweDM4MmExZGUzLAotCTB4NGYyOGE0YjMsIDB4YWNjZjFkMDksIDB4ZWYxYzQ1ZmIsIDB4YmNiNmFmMGMsIDB4NjNkNWJiNjMsIDB4Y2FlOWEyYzgsCi0JMHg0OTQyMjRjZiwgMHhiNmI5N2I3ZSwgMHg2ZDNhOGVmYywgMHhkYTg1Y2VmZSwgMHgwOThmOWQzYywgMHg1OTUyYjVkNiwKLQkweDg3NGU5ZGZmLCAweGQwYWVmM2NlLCAweDY5YzRlOWJjLCAweDliMmYzNjdlLCAweDM1OTI1Y2JkLCAweDY4NmQ4NDc0LAotCTB4MDM0ZjJmMGUsIDB4MTNjNDEzYjQsIDB4NWRlZjRmYjYsIDB4MjY4MWYyOWYsIDB4MGVhNTZmM2YsIDB4ZmY4YmU3MWUsCi0JMHhkZGZmZmY0ZiwgMHhjOTZkYWZmNCwgMHgxYWFlM2Y4YiwgMHg5YWUwNzU1NywgMHg3YWFhZTNmOCwgMHhkNDZlZWI5NSwKLQkweDY3ZmJlN2U0LCAweDViY2ZlYTY4LCAweDlmMjlhYTU5LCAweDUzNWYzOGRiLCAweDRmZjk3YjNlLCAweGY5NTJmOTM1LAotCTB4M2JmZDRkN2UsIDB4Y2E2YmQ2MTcsIDB4NTg3YmE4ZWYsIDB4Zjk3YjdlNTMsIDB4MGNmYzlhZTMsIDB4ZjUzNTJmZWYsCi0JMHg1YWJlOWI2ZiwgMHg5ZjZjMmU1MywgMHhkNzAzYWMzZiwgMHg0MWIwZWY0ZCwgMHhhM2ZjMGZlMCwgMHgyOTlmMDA5OSwKLQkweGZiZjBhY2ZjLCAweGE2MTI1ZjI5LCAweDRjMmU3YzY3LCAweDUzMGY0MWViLCAweDhkNzg2ZWZkLCAweDRhNmJiNWE1LAotCTB4NTczZTgxODcsIDB4NTRhNGZmZjgsIDB4YTVmNDE0MzcsIDB4ZmFmNTlmOWUsIDB4ZjRhN2NmNTcsIDB4Y2VjOTEyOTcsCi0JMHg4MTJhZDI1MCwgMHhkNjNhYzA5NCwgMHhlNTVlZWRjNSwgMHhjZWJlMzlmYiwgMHhkMzA4YjIxMSwgMHhjYjkzMTMyYSwKLQkweGYyODM0ZGFhLCAweGMxZjIwMzg5LCAweGJlYjY3NTExLCAweDgwODA5MmUxLCAweGNkZTAyMGYzLCAweGE1YmEwMDRjLAotCTB4NGQ0YmI1ZDAsIDB4MzhjZDc0ZDcsIDB4YjExMGVlY2YsIDB4Yzk5MDFhZmYsIDB4OTRkY2IwMDksIDB4ZmY0MDMyNmMsCi0JMHgzN2ExYjZjMSwgMHg3OGYxODI4ZiwgMHgyNWJlNjMzNiwgMHhiM2FkZWQwMSwgMHhlM2Y4YTJiZSwgMHgwOTVmYzA0NiwKLQkweGQzN2NhN2E2LCAweGYzZTEzZDMxLCAweDU3ZGM3YTYyLCAweDVmNTFlOThlLCAweGJlMWRhNjFkLCAweGVjN2U5ODg1LAotCTB4ZDBmZDMxOTMsIDB4M2ZkMzFjYjcsIDB4M2QzMTFhZjksIDB4ZTk4OTViZWMsIDB4ZDMxZjlmNDEsIDB4NTMwNzlmNGUsCi0JMHg1NWZmNGY4NSwgMHhmMGNhM2FlOCwgMHg3M2Q3NGVkZiwgMHgzMjhlYmE2YSwgMHgzODc4ZDkzOCwgMHhmMTg1MWY1ZCwKLQkweDkzOWJiMDQ2LCAweGE3MTkxOGMxLCAweDU2M2M0N2IyLCAweGUwMmVhYmY0LCAweDg5NmE3MGZlLCAweGVmMmIzZjMxLAotCTB4ZDcwNTMxN2IsIDB4N2Y4Yjc2OGUsIDB4OWVlMWU4MjQsIDB4MDExYjdmOTEsIDB4YzM5ZWU0N2UsIDB4ZWQ0ODAxNzQsCi0JMHhmYTdhN2U3YiwgMHhlMjA3ODlmNSwgMHhjY2JkZmI0MSwgMHgzMTg3MTc0ZiwgMHhkMTJkY2JiZCwgMHgwMzE2YWYwYywKLQkweGQ0ZDkyMjI5LCAweGEyZmUxYjVlLCAweGNjNGNhZWZiLCAweGI0MWM0OTFiLCAweGI0NmZiYmY3LCAweDZkNGI4MDQ3LAotCTB4YzVlZmMwNDEsIDB4ZmVkOGJhZjAsIDB4M2JjMDE2NDUsIDB4MzlkN2VjZjEsIDB4YTQzMjhlOTAsIDB4NGRiOGJiMzEsCi0JMHgwNDk0YmI0NCwgMHg3ZTAzNzA1ZiwgMHhlY2Q2N2E0MywgMHg2ZDNmMDI0ZSwgMHgxMzkzNzBmNywgMHhiOGE3YmRkNywKLQkweDlmYzE1YTlmLCAweGZlMGFmMmNjLCAweGFmZTEwZTFlLCAweDk3ZjEwOTMxLCAweDE0YmZjNWYxLCAweDNiYTc4OGZlLAotCTB4NjE1MWE2ZWIsIDB4YmUxMzlkZmMsIDB4MzljYTdmMWQsIDB4MWJiZmJlODksIDB4ZTI3N2UzNDQsIDB4MDU0NGFlY2IsCi0JMHgwOTQzZWRhZiwgMHhlMDJkZTdlZCwgMHhhN2JmMGE3ZiwgMHhjMDE4OTJmOSwgMHhkOTNlYzg3MywgMHg4N2Y3ZjY2MiwKLQkweDRlODBlNzRlLCAweDZhYmMzMGI2LCAweDNkOWViYzFkLCAweGVlYzAzODJmLCAweDcwNjQ5MDVmLCAweDY3ODA4ZjFlLAotCTB4YTQwZWFkMjUsIDB4M2I2YTZkM2EsIDB4ZWY5YjQ1YTksIDB4MDI4YTE0NjksIDB4NjJiOGNmNjgsIDB4ZmQwMjhkYTYsCi0JMHhjZjFlNzRlYiwgMHg4NDk5M2QwMCwgMHg0MTY3MDJhOSwgMHgzYzc5Yzk5MiwgMHhlNGMzZTkxZSwgMHhjYTJjNDM3YSwKLQkweDE0NWYxOWZkLCAweGM3YTFmYmQ2LCAweGYwOWMxN2QxLCAweDMxYzk5YTM4LCAweGY5NTAxZWRhLCAweGY1ZGY3YTRkLAotCTB4ZTM1M2U0ZmIsIDB4MzdlMDRjNWYsIDB4MTdkMmFkMjMsIDB4ZDE0NGJmNjAsIDB4MDM4MWJmZmYsIDB4YmNjNDYyMzIsCi0JMHgyMDM2YjcwMiwgMHhlMDJiZTZjYSwgMHg3ZjRkMDZmYiwgMHgzOTRiOWRiNCwgMHhlZDI2ZmJjMywgMHg0OGMxZTRkYiwKLQkweDRhZmMyODRlLCAweGYwNDY4YTk3LCAweGJlMDM4ZDQ5LCAweGY2YjUzOGI1LCAweDVmMjZhYzUxLCAweGE5YzgzMmRiLAotCTB4MWZlMDk3YjEsIDB4NzI5MjhmNTQsIDB4NTc3YzA4YzEsIDB4Y2JhNmQ5YzUsIDB4ZDAyZTViNjgsIDB4NTM4MjU1ZjEsCi0JMHg2MDU1ZjgwYSwgMHgzYWEzYWFmNSwgMHhmMDE3NWU0YywgMHhhZjViZTJjYiwgMHg0NmNkNDE3MiwgMHg3YzdlYWY5YywKLQkweDFhMzc3ZTk0LCAweGJmOGY3ZDhkLCAweGFmYjllYzUyLCAweDZjN2M4MjI0LCAweGNhYmI3YWUxLCAweDI0MGFmY2MwLAotCTB4ZjljMDc2NGEsIDB4MWQ5MjQ5MTcsIDB4Njg3MWQ5MzcsIDB4ZDA3ZTEwYjYsIDB4NTFmYjQ3MGYsIDB4ZjMzODE1ZTUsCi0JMHhkNmI3NTJmZCwgMHhjZjkxOTU3ZSwgMHhiZjk4MWFjZiwgMHg2ZWVmZGY0MCwgMHhlMmUxMzdlOCwgMHhiMGQ5YWJmOCwKLQkweDViY2MwYTdmLCAweDk2OWFjNzhmLCAweGNhMmYyNmYzLCAweDI3MmZmZDE1LCAweGJmMDU0NzhjLCAweDZlYzk2Mjk1LAotCTB4NThhZmMyOTEsIDB4ZDVmNzA0NzcsIDB4YzQ3OTI0YTcsIDB4MTdhMmRmMDMsIDB4OTZkZjhmN2IsIDB4OWFhYWMyNzQsCi0JMHhhMWRhNGNiNywgMHg3OTcyYmI5ZiwgMHhkYjc1YzQ0NywgMHg5ZjVmNTQwNywgMHgxZTQ0YmRmZSwgMHhhMDVjYmEwMSwKLQkweGEwZTM1NGI1LCAweGU0MzEwNTE2LCAweGJiZjVlZDg0LCAweDYxOGIyYjlhLCAweGZiMGQzZWZkLCAweGU3MmZhYTE1LAotCTB4MzgwNzEyOTAsIDB4NjM0OWNiMWQsIDB4ZTdlN2Q4MGUsIDB4ZjAwOGExODgsIDB4ODdmYzhlNzQsIDB4NGU4YThjNjMsCi0JMHhlMjEzNDQ2NywgMHg0N2VmZGE4OSwgMHhmNmEzZTNkNSwgMHhlZDRmMjZiYiwgMHg4Y2JlNGQ3NywgMHhlNzA4OTRkYywKLQkweDQ5NGY2NWQ5LCAweGZjZTAyZmM0LCAweDEyN2ZlNTM0LCAweDc5Zjc0ODlkLCAweGVjMDFhZWE0LCAweDViMTJjNTlkLAotCTB4MTI3MmVmZDcsIDB4NWYxZDBhNjMsIDB4ZTVjZmFiZjUsIDB4NzlmY2QyOTQsIDB4Y2EyM2Q5OTEsIDB4MzhmY2VjNzksCi0JMHhjMDhhZmUzNiwgMHg5Njg3OTM2YSwgMHg3MzFlNmIxZiwgMHhkYTA0NTVlYiwgMHhmZDYwMWJmYiwgMHhlZTA4Yjc5MSwKLQkweGY4ZGVhZWI1LCAweGQ3ZTNhZWZkLCAweDg3YjE1NzhmLCAweGYzMGI5ZDdhLCAweDEzYWY1NDcxLCAweDc2NDhmZTNjLAotCTB4ODUzM2U3MTEsIDB4NGU4YzYzMWYsIDB4NDUyMzdmOGQsIDB4OTc0NGJmOTcsIDB4N2ZjYmEzMWYsIDB4NDAxZjc5NmYsCi0JMHgyOTVlZjIzNCwgMHhlMzhjNTM3YSwgMHhmZWMzN2M5OCwgMHgyMzc2MzA0ZSwgMHhmODZmN2YzZiwgMHg1ZmUwYmQ0OSwKLQkweDFmYzI4M2YyLCAweGQxMzM5M2FjLCAweDg1MDdlNjNiLCAweGZjNmJkMTlmLCAweDVmODI0NzU3LCAweDViNGJlYWZkLAotCTB4MmE5ZmFhNjUsIDB4NDFkYTc5NWUsIDB4NmQzYTdlYTgsIDB4NTM3NDRjNmMsIDB4NWRhZDU3ZmEsIDB4MzgzZTAwZWEsCi0JMHhjMDFkOTQ2NSwgMHg2MmZkYTdjZiwgMHhiZTgyM2Y5MSwgMHhmMGE4ZDdiYiwgMHg4MDI2Yzc4MywgMHg0OWZlMGRmZiwKLQkweGZmNTk5ZmUxLCAweGFlYjBmNWU4LCAweDcyNTZiMTdmLCAweDlkNmQ1ZmEyLCAweGYyYTY2ODM5LCAweGJmM2NkMzVhLAotCTB4ZmU2MTY0OTgsIDB4M2IyZmNiMDgsIDB4NDViZTQyMmYsIDB4YmYxNTlmY2IsIDB4ODVkMTNhN2UsIDB4MzE0ZTUyZmEsCi0JMHg4ODM4ZmZhMCwgMHhkMzRkN2ZmNiwgMHhkZDYwNTMyNywgMHgyOGRkMjVhZiwgMHhkMDc2ZmE2NywgMHhiODcxNTdmZiwKLQkweDYyOWE5NTNlLCAweDQ2ZTM5NzdhLCAweGIzZGExMTNlLCAweGEzZjM2ZDVmLCAweGZjMDc0NWU3LCAweDA2ZmQwM2FiLAotCTB4ZGNlNWZhZmEsIDB4ZGEzMzJmOGUsIDB4MWFmZWEwMDcsIDB4ZmU4M2M2NGYsIDB4ZmM0MWYwNTIsIDB4NWYxNzhlY2MsCi0JMHhmYzBiMmU3ZCwgMHg3ZTliNjdhNywgMHg3ODU0MTBlZiwgMHgyN2FjZTQ1MiwgMHhhZjU3ZmIzMCwgMHg5N2Q2ZmFiYiwKLQkweGQ1MGU1NDlkLCAweDRmNjJhM2Y2LCAweGZlZjg1YWI4LCAweDU1YTU5NWEzLCAweDE1NzFkMDUyLCAweGFiNTU5M2Q1LAotCTB4M2Y0Y2I3MjUsIDB4YzJmNGJkNTcsIDB4M2Y4MmNmOGIsIDB4Zjc2NjhmZjMsIDB4ZjJiZjBhNzAsIDB4YWYwNzVkYTUsCi0JMHg4ZGNhZjlhNCwgMHgzNjYyODBkMiwgMHgxODkwOWIwZCwgMHhmZDJkNGJhNiwgMHg5ODc2NjE3ZiwgMHg3NzliMTUwZSwKLQkweGQ4YTM1Yzk5LCAweGMyZTMwN2Y3LCAweGI4ZGNhOGY0LCAweGY1NDY0NGMzLCAweDYwNDE0N2M2LCAweDE2YzNhOTg3LAotCTB4MjM4MTJlODEsIDB4MTJmZWMwNTMsIDB4MDliYmZkNWYsIDB4YmI3YTdlZTgsIDB4NDZhNjA2NDAsIDB4NWRlYWU3YzAsCi0JMHg5ZTAxOWY2OCwgMHg0ZTljOGU5MCwgMHhlYWU5YmEyMSwgMHg4MGJhNTJkNywgMHhhNGU4NTczZSwgMHhmYWUyMmYyZiwKLQkweDMyYjllMDA0LCAweDdlNWY5ZjkxLCAweGZlODRlMjFkLCAweGZjYzM3NjY0LCAweGRiYmU1ZmNiLCAweDY5MzhmMzAxLAotCTB4ZmQ3YzYzYWMsIDB4MGY0NGQyZGMsIDB4OTI1Y2I3ZWQsIDB4YjI5ODlkMTMsIDB4ZGZjZmU1ZWYsIDB4NmYzNmZjOGIsCi0JMHhjYzg5YmRmZiwgMHg2NDE5ZTU4ZiwgMHgxZTQ5YjVjMCwgMHhiYjliZjMwNCwgMHg1ZjljMTZlYSwgMHhkZjIyZjExOSwKLQkweDk2MjczZjk1LCAweGRjZmM3ZTgwLCAweDQ2MzY4YTQ4LCAweDhkNGY4YjkwLCAweGI5MzgwZWNjLCAweDc0YjgxYTg2LAotCTB4YjJlOTI3N2UsIDB4ZmYzMzcxODMsIDB4MTRmYzYyMjEsIDB4M2Y0NTNmMjEsIDB4MmU3Y2JkZDksIDB4ZmNjMzgyZDQsCi0JMHg0ZThjNTFlNywgMHg1YzBkMTk2ZiwgMHhhZjE1YThhZSwgMHg2NWE2ZDdlNiwgMHgzMzlmNDBlZCwgMHhlMTAzM2M0MywKLQkweDE4OTZhNWJjLCAweGUxMGY4ZTY1LCAweGRjNTcwYTFiLCAweGQxOTAzODVmLCAweDM5OGNiODg3LCAweGMzYjUxZGJjLAotCTB4ZDQzYmUwMGEsIDB4OTYzYzk3NmYsIDB4ZjIzYjRkMmMsIDB4ZmZiODZhNGQsIDB4NzRmZjc4N2IsIDB4M2Y2MGQxZGMsCi0JMHhiYzhjNGM5ZCwgMHgyOTI4MTgwZiwgMHg3MWQ3NGY3MiwgMHhlNGE5N2YxNSwgMHhkMzdiYzk5YiwgMHgxNWJlNGNjMywKLQkweDU4ZGZmNzc5LCAweDM5N2ZlNTA0LCAweGRhMDdlNGMwLCAweGM3NDhmYWMxLCAweGU1ODgxYzE1LCAweGE4MDlhNjNiLAotCTB4MTgyNGNjMGYsIDB4MjQ5YmFlNDksIDB4NzJkYWQ3MmUsIDB4YjhlODRmODUsIDB4OGE4YzQyOGQsIDB4MWM3ZTAwNWYsCi0JMHhhNmVkMWZlMiwgMHgzYjY4YTdiMiwgMHg4NWFjYmU5NSwgMHhlMWJkMWNmZSwgMHg4ZjNiNzIyOSwgMHg5MDA5ZmZjYiwKLQkweGYyYzNjYmZmLCAweGI5MzE1NjRmLCAweDk1YmVkYmVmLCAweDkyNTUzZjExLCAweDQxNjdjNWZmLCAweGNhN2NhOTVlLAotCTB4YTk1NzkwMmUsIDB4ZTlmZGU2MDQsIDB4M2Y4M2I2ODYsIDB4NjlmMjcyYTEsIDB4YWQ1MzkxNDAsIDB4NjljYmQ0ZmUsCi0JMHgwOTdiYTZmOSwgMHg0ZTVlYTdmMCwgMHg0NzVjMWQzZiwgMHhmZDI5Y2EyMiwgMHgwNzRlNTExZSwgMHhlYTk3ZmM3NywKLQkweDBlN2YwNTRmLCAweDE1M2ZhYjQ5LCAweDFlMTdkODdkLCAweGI3ZjBmYWY1LCAweDUzZTIxNzQ2LCAweGVmZTkwZmFmLAotCTB4Y2RlOWM5MDAsIDB4MjlkZjBhN2YsIDB4ZGJmMTU2ZmMsIDB4NzdhMDYxZWEsIDB4ZjBhOTdjNDIsIDB4MTUyZjg4NWQsCi0JMHg1N2NmZDNiZSwgMHhmOTdkM2Y4YiwgMHhkMTk5ZjA2MSwgMHhmNmJjOTU3MSwgMHg0YTE0OTRmZSwgMHhjMTU2YWFjZiwKLQkweGJiNjE3NjZkLCAweDc4YTc5MGRkLCAweGJmYjMzMGYyLCAweDAwY2E3NzcxLCAweGNiYWZkZTc1LCAweDNkZjU3NDA3LAotCTB4YWU4OTdjYmEsIDB4YWY5NzU3YmUsIDB4YjNmN2Q1ZDMsIDB4OWI0YjQ4N2QsIDB4MDQxZjIwODksIDB4NDVhNWY1MzUsCi0JMHhmYzczODY0NCwgMHhlZTIyNmRlZSwgMHg5OGU4YmJiYiwgMHhhZWZiNjgxYiwgMHg5OTdlYTkwZCwgMHgxNmE1ODNlYSwKLQkweDRlZWZiZmI2LCAweGZlODAzNTMwLCAweDNiNzY3MmVhLCAweDYxNmYyMGUyLCAweDkyYWViNWZlLCAweGNhYWM0NzZlLAotCTB4MmFkMjNjM2UsIDB4ZjBlZGZlYTIsIDB4ZmI0OGEyOTMsIDB4MjJkMTZhMTMsIDB4NWY0ODNhOWUsIDB4YTNiY2VjZTUsCi0JMHg1ZDBkYjQ1MCwgMHg0Njk3N2UwOCwgMHg4MWFlMGRkMSwgMHgzOWI3ZjUzOSwgMHhhYmExYmNlMCwgMHhlOTg2ZmQzNSwKLQkweGI3ZGNmYmY0LCAweGU4NWYwYzQ1LCAweGMxNjQ3NjhhLCAweDMxZWM4OGI4LCAweDBiZWQ1MjBlLCAweDk5ZjkxMTRlLAotCTB4YjMzZTc0ODksIDB4NjBmZWQ5NWIsIDB4NWQ5ZDBhY2UsIDB4NWYyMDU2NDEsIDB4MzFlZWQ5OTQsIDB4ZjZhNDVlODEsCi0JMHg5ZmFkNTFmYywgMHgwNTc3ZjE5ZSwgMHg0YWJlNTc4NywgMHg1N2I0YWU1YiwgMHg0ZDE1OGRmNiwgMHhkZjJmNzJkYSwKLQkweDVjNDk1NjY3LCAweGEzMjY4YzVmLCAweDMwOGYzZWQ5LCAweGFmZDcwOTNmLCAweDBkZTY2Mjg1LCAweGJiZmUyOWQzLAotCTB4ZjgwNDg4ZjYsIDB4NDQ1NWE3YTUsIDB4MTA2Y2Y3ZmMsIDB4MjI2ZmUwZmMsIDB4NGRjYTAyNzIsIDB4YmQ0NmU5MGQsCi0JMHgyY2U5ZTBhNiwgMHg2ZmE5ODVjOCwgMHhjYjc2NzNiZCwgMHhkMDBmMzk0NywgMHgzZjViNTUyYSwgMHg5YTc3ZmFjOCwKLQkweGM3ZmFkZDllLCAweGZlNDA2ZjExLCAweDNmNDM0M2Q1LCAweDE3ZWJiZDIwLCAweDc5ZTBiNzZjLCAweDNiNzZkNzZlLAotCTB4NmQ3NmFmYzYsIDB4MDFmNDM3ZGIsIDB4NzY2NmJmYzgsIDB4YjZiYjM4YzMsIDB4ZmMwNTk5N2YsIDB4NWNjOGI1ZDMsCi0JMHg2YmFiN2EwZSwgMHgyY2Q3ZGIwOCwgMHg1NjY1ZjZkZSwgMHg0YjkzYWUwNywgMHg5MGJmNmU5MCwgMHhhN2FhYmVkOCwKLQkweDg1OGZlYmY1LCAweDU5ZDI5MDAxLCAweGRkYmZmYWMxLCAweGRhOWRmZThhLCAweGE3MTgyZGQ3LCAweGNiZWRiNWRiLAotCTB4ODdlZGFmMWMsIDB4M2YwZDRmOWIsIDB4OTNiMmVmYmYsIDB4N2M2MDliZTksIDB4YmE3Y2VjYjEsIDB4MmYwOThkZjYsCi0JMHhhYmZlZDNkNCwgMHg2Njk4Nzc5YiwgMHgzNzgyZjJkMywgMHhmYTA1OWVmZiwgMHhiMzEzNmJiMCwgMHg4ZWE1M2E2YiwKLQkweDdhN2NlMWU3LCAweDhiZWRkMmNkLCAweDRlZTc4YTI0LCAweDQyNjQ4YTEwLCAweDRkZjBkNDdlLCAweDA5MTk5Y2JlLAotCTB4N2Y0NzdmMmYsIDB4ZjFmMTdmNTMsIDB4N2MxOGZmZGEsIDB4NTNlZjE4MDgsIDB4NDdmNzZhZDUsIDB4YmZlZjMwMDksCi0JMHhlODAxZmM3ZSwgMHhlNDY2ZWQ4MSwgMHg5ZmJlNjU0YiwgMHhlZWQxZWEwNiwgMHgwZmJjZDhiOCwgMHhmZGM3YmNjMywKLQkweDA4NWJjZDJiLCAweDVmZGU2N2Y2LCAweGZiZDM5M2ZlLCAweGUzODVjOTIxLCAweDZmNDFjYmQzLCAweDFmNzZkZjNlLAotCTB4YmJiMjVmZTYsIDB4ZTRmZGJjNzEsIDB4N2ZhNjgxZjcsIDB4YTI2ZmJhMzEsIDB4N2M1Yzc3NzQsIDB4ZTRmZjM5ZGUsCi0JMHhlZTliZWVmMywgMHg3NGUyY2Y2ZiwgMHg4YzdkZTI3NywgMHhlMzhlZmYzNywgMHhlZTdhYWVmYiwgMHhmM2ExZmZkNiwKLQkweGIzNzNlYzU3LCAweDhmM2RhNGExLCAweDY5M2E2ZjhlLCAweDMxNjE4M2I0LCAweDJmNjdhMTIzLCAweDg3OTljNDg0LAotCTB4OGMwMDY1ZmMsIDB4OGFlN2UyNTcsIDB4MzMyZGYxZmEsIDB4MDQ4ZmZkYjEsIDB4NWZiNGM2ZTcsIDB4ZjdjMDhiNzIsCi0JMHg3NDNmNmM3NSwgMHhhZTFmYjczZCwgMHhmNjg2NWMxZiwgMHg2NjFlZjVlOCwgMHg0OTYzMTNhZiwgMHg4ODU4ZGU0OSwKLQkweDQ2ZTM5YWZmLCAweDNlYzkyNzNmLCAweDJkZmM4NWVjLCAweGJiNWU3ODkzLCAweDIwNTc3YzJmLCAweGUzZGE4MTFlLAotCTB4ZGEyZDBmZDcsIDB4MGRlOWY2MDMsIDB4MzM0MThkODMsIDB4ZmE0MDhmNGIsIDB4Y2Y3ZjgzYmUsIDB4NjY1ZmVlZDUsCi0JMHhkYmY5YjU3OCwgMHhiN2YzNmJhNiwgMHg4MmI3Nzg3MCwgMHhiZmZiNDU3MSwgMHg4M2YwNDRiNSwgMHhmMjFhNTM1ZiwKLQkweDM5ZjgwMjU0LCAweDExMTJiOWE1LCAweGE5MTM4ODA0LCAweDg0ZmIwYTViLCAweGVkYjQ0YTViLCAweDc2N2VjMzY3LAotCTB4ZjM4ZjE4NWMsIDB4ZTE1M2JjYTMsIDB4YTQ2YTIxZmMsIDB4NjFiOGY4ODAsIDB4MjRmYTg4ODUsIDB4Zjg0MDUzMmEsCi0JMHhjNjEyYjkyNSwgMHgyODYyN2UxMywgMHgxNzNjMDFjOSwgMHhmMzVmMTk4ZiwgMHgwZGNlMDYzMywgMHhmMWNmOWRmMywKLQkweGQwZWE0NjU1LCAweGJlMTcyMWRlLCAweDBlNjI2NmY5LCAweGRhMDk3M2Y4LCAweDg0M2RmMzRiLCAweGY1ZWQ0NzVjLAotCTB4MzA0Mjg5YjIsIDB4M2NlNWNhOWEsIDB4YjI2MzkxMjMsIDB4OTAyOWNmYzEsIDB4YTczZjFhYTMsIDB4MWZiZjBmMzYsCi0JMHg1Y2UxODYyNSwgMHhmYzVmN2VhYywgMHg3ZmE3NDNmOCwgMHgzNDdmZmNhNiwgMHg5MGNkZGE4MywgMHhmMzNiYjllMiwKLQkweGFhZmIyOWQ3LCAweDFlMTk1YjNiLCAweDdmMDRhYjZiLCAweDUwNTVmMjFhLCAweDdjNTM5ZjUyLCAweDg1ZmU2MjZkLAotCTB4MDYzODNmM2YsIDB4ZTdlZjJhZTUsIDB4N2VkODYyYTMsIDB4Y2NlZDAzMmYsIDB4ZjY2NzZlNWEsIDB4ZjAxOGFlYzgsCi0JMHhhNmI0ZjQ2ZiwgMHgwMmIxZjNmMywgMHgzZjAyMzc4NywgMHhhZGZiZTdlZiwgMHgzZWY5YzAzZiwgMHgwYjI2YmI0ZCwKLQkweGZkZDgyMjhkLCAweDc4ZmQxYmE0LCAweDU5MGI2NGYyLCAweGVlMGUyMTFiLCAweGE3ZTI5MzAzLCAweDFmZmRjM2E4LAotCTB4YTAxY2M0ZmMsIDB4YTNjZGZiMjMsIDB4NTRlMjYzNGQsIDB4ZGQ3MTViNzQsIDB4NmY1NjYzNjksIDB4YThlZmMwM2EsCi0JMHgxZmU4M2NlYSwgMHhlZmVjMmZjNSwgMHgyZGZiYWYwMCwgMHgyMjRhNTMxZCwgMHg5NzFjZjdjYywgMHhmZWI3ZTJkZiwKLQkweDZlYjVmNzhhLCAweDAwOTU0ZDZhLCAweDE2NGQzNzJmLCAweDlmYTZlNzM1LCAweDc1YmVmODk4LCAweGUzMDMxOTBjLAotCTB4MWFlYjdlMmEsIDB4Y2JhMDA0YzcsIDB4ZjcwZGQxMWUsIDB4Y2Y1YjZhYjMsIDB4Y2UxMWJjOWIsIDB4MDRmOGY0OGYsCi0JMHg5N2RmZThmOCwgMHhjZjgwNjVkYywgMHg0MmM3ZmY2MywgMHg4ZmI1OWY2MCwgMHg0MjY0ZTc5ZiwgMHg2ZTI2NzRiYywKLQkweDRmZTAzZGU1LCAweDc1ZTM4MmZhLCAweDc0ODlkOWFhLCAweDRmMzhiOWJlLCAweDY2ZmRhMDRhLCAweGMzNDczYjM2LAotCTB4YWYzMjU2OTEsIDB4YWQxNjE1M2YsIDB4YzExYzEwNzEsIDB4OTJmNTI5ZGEsIDB4MjNiZDU4YWIsIDB4YTQ0ZDY3MjYsCi0JMHgxMjhhMmZmOSwgMHhmYjg1NzlmOCwgMHg5ZmUxNWNiZSwgMHgzZjc5NmU4ZiwgMHg2MWYzMDdiNywgMHhlZWNjOTkzZCwKLQkweDZiZTZmNWQ1LCAweDUzZDFmMjgyLCAweGRmNDFmODI0LCAweGYzMDlmZWMzLCAweGUwM2VlY2M1LCAweDk3MmIwMzNlLAotCTB4NTk3YTYyNmYsIDB4OWUzZDdiZTEsIDB4Y2YwY2NkZDMsIDB4M2MwNWZmNGEsIDB4ZjBjY2QyM2YsIDB4YzE1OWUwYTMsCi0JMHg0YWJjN2VhZiwgMHhhZWFmYWE3ZCwgMHg2ZTIxZmI1NiwgMHgzMmZkMTk2OCwgMHhhZDM1ODdhYywgMHg0MTQwZDM4MiwKLQkweDRjM2IxOGQ1LCAweDJkYjU4NzIwLCAweDY3ZTA0YjhmLCAweDcwNjJlMTlmLCAweGE1OTA3YWU5LCAweDZhOWRkNzNlLAotCTB4NmRlYmU3NjYsIDB4MDJjZDU3ZDksIDB4MDU2Y2Y5M2UsIDB4N2I2ODRiYjUsIDB4MGVmMzljY2YsIDB4MTlmNzc3NTgsCi0JMHhiZGMxZWZkYywgMHg5MTVkZjk0OSwgMHg3ZDE2ZmRhYywgMHg3OWNmODFmNSwgMHgxYWEzNjRlZCwgMHhmMzhlMmE2ZSwKLQkweDA5M2NhYWU2LCAweDU3YjcyNmRjLCAweGFhMDY5MGVkLCAweDM5YWE2OWY4LCAweGVmOTVjYjBlLCAweDZjYWU1NWM5LAotCTB4YzNmYjRlZjgsIDB4OTk4ZmM4NzEsIDB4Njc4N2M0MDksIDB4M2VmMWRhMDYsIDB4YjE3NWVkZGEsIDB4MDNjYjBmOGMsCi0JMHg0Zjk4NGMzYiwgMHg3ZjRhZmFjNSwgMHg3OTdhM2Y0YSwgMHg4ZGFjNTY5YSwgMHhkMDVkOTlmYiwgMHg1MmYwMTgzMSwKLQkweGUzZGUwZTZjLCAweDlkYTdjMDhlLCAweGJiZTQwZTljLCAweGNhMWUxM2FlLCAweDhiZmY1OWI3LCAweDk0N2I4OWQ2LAotCTB4MmE0M2EyNzUsIDB4NmM4OWM1NTEsIDB4YTczZDMzMzUsIDB4NDYwNjI3NWEsIDB4ZDQxNjI3NWEsIDB4MWQwMjA2YmIsCi0JMHgxZjRiNmMxNiwgMHhlMGIyNDIwOCwgMHg0OGM0YzJlZCwgMHgzZWZiYzRlYiwgMHg4ODc4NWU3NiwgMHg5YWVjZGZkZiwKLQkweDJiODlkNzQ2LCAweDM0YzRlYjU0LCAweGJlODlmMjBiLCAweGM0YWNkZjlkLCAweDlkNjQ1ZDYxLCAweDVmZjZlODUwLAotCTB4ODdkZTZmYWMsIDB4N2M4MjIyNzUsIDB4ZDc2YjM2NmYsIDB4NGI1YjViODksIDB4NzViODlkNzEsIDB4NTdiOWE4OWEsCi0JMHhiMTdjZGViMSwgMHg3MTJmMjI3NSwgMHhiNzI1ZTYwNiwgMHhiY2ZmMDIzNSwgMHg0M2UxZWRjZiwgMHhmYTBlYmUzYywKLQkweDM0ZTJmNTgxLCAweGRlODRmZmU4LCAweDdhNWY0NmViLCAweGVhZmViMWZkLCAweDNjMjZmZmY1LCAweGMxN2Q3YTJiLAotCTB4NzgxZWVjMmQsIDB4YzgyNDNlNmYsIDB4NTA2NjBiY2YsIDB4M2YwMDJlYmQsIDB4ZTBiZWJkMzIsIDB4ZDMxN2VlMGUsCi0JMHhkMDEyZDllOSwgMHg3YWQ1NjNiMywgMHhmMWFmYjU5NiwgMHhiNmExNzViMiwgMHgzMzE3ZjUyNSwgMHgxYTRmZjk2OSwKLQkweGFkMTQ3NzI1LCAweGRlYjA5M2ZmLCAweGRkZWI1MWNkLCAweDEzNzdhMGQzLCAweDcyZGRlODIyLCAweDZiM2Y3N2E2LAotCTB4NTNmNjgzMWQsIDB4ODhmYmYzNWYsIDB4Y2ZhYTViZWIsIDB4ZjgxMWRjMzIsIDB4YWI0Y2ZhNjMsIDB4YjFjZTllZTYsCi0JMHhkY2NiYmZkMSwgMHg0ZmIyZjIwYywgMHg0ZmJiNzNjNCwgMHg3N2IwMWRiOCwgMHg4MmM2ZWZmNCwgMHgxNDRhN2E5ZiwKLQkweGE3MWM0ZjFiLCAweDVjOGZhNzY3LCAweDgxZWE5OTNiLCAweDllY2MzOTgyLCAweDIyMjBkZWFlLCAweDk5OWE2YWZlLAotCTB4NDQ2NGQ3ZmMsIDB4M2YzNDVkZmIsIDB4MjZhZmZiMjUsIDB4NjM2ZTU3YzgsIDB4MDY3NDZmZTcsIDB4ZmEyYTc5YzUsCi0JMHg2OGViZWU1NywgMHhlNTcwM2YwMCwgMHgwZmNmMDE2YSwgMHhmMDE5Y2UyMSwgMHhiM2UzOGYzOSwgMHhmYjg5NWRjYywKLQkweDgwZmM3ZDE1LCAweGU2YWQxN2UyLCAweGFlYjdlNmY1LCAweDNlYTlmZjQ2LCAweGUzM2FhMGFlLCAweGFmYjBkM2RhLAotCTB4M2EzMzM2MjgsIDB4ZmMxNjZmMTQsIDB4MWNlMTUzYWIsIDB4ZmRjZjU3NWIsIDB4NTQxYjllMzAsIDB4YzdkZmI0MDcsCi0JMHgxNWNlZjlmMCwgMHg2MTliOTk4MywgMHhlODllZjU1ZiwgMHg4ZGNlYjQ4ZSwgMHhmY2E1ZTNkMSwgMHg3ZWNiYzQxZiwKLQkweGZmYjE5NzhhLCAweDE3ZDJmMWVmLCAweDhmN2RhODFlLCAweDNlM2Q2NGZlLCAweGJkNzE0NWM2LCAweDgyYzY0ZDkyLAotCTB4ZjA2MjdlMWMsIDB4ZGY5MTVlYTAsIDB4NjQyZTMxMTEsIDB4MzVjM2UzY2UsIDB4YTIwYmZlZjcsIDB4NjdkYWJlOTgsCi0JMHhkYzQwMzZmMCwgMHhlMmMzNWNhZSwgMHhkYWFkZTY0NywgMHhlNjkxMmJiOCwgMHg2OGM4MDY2NywgMHg1YmNmNDc3MCwKLQkweDQzODc1ZGE5LCAweDBiYjM3ZWViLCAweDc1OTlmNWQ3LCAweDEzODgwNTFiLCAweGZkZWZjYjljLCAweGM3MWZmYjk0LAotCTB4NThlZTEyZjcsIDB4NWE3OWQ3NDgsIDB4ZDliNjc2N2YsIDB4ZmI5ZmU3MGIsIDB4MzdhOGRkMmQsIDB4MTA1ZGJlMTUsCi0JMHgzYTk3ZWNjNSwgMHhjOTYzOGUzZSwgMHg3ZDcxOTNkZCwgMHgyODljMTE2YSwgMHg1YjBiNDE4ZiwgMHhlMDlkMjhhZiwKLQkweDA5YjY4NzFkLCAweDc0ZTE0ZTVmLCAweDE2ODg3ZTYxLCAweDRhNWFjNzQ2LCAweDI5ZTc5MDM3LCAweDhlYmYzY2FkLAotCTB4MmJiNzgxZDksIDB4NzdlMDgwZjksIDB4Nzc1N2EwMDksIDB4MDg1ZGVjNDgsIDB4OWMwYmM0ODEsIDB4MTFmNWFhMDgsCi0JMHgxMmYyZDVjZSwgMHg3NmRlNzQ1NSwgMHg1YWZmZjE4NCwgMHhmYzFmOGRjMSwgMHg0M2VmYmZmNCwgMHg5ZWY5M2VlNywKLQkweGU1ZmQzMWQ5LCAweDBiNGYwNTc3LCAweDZmZGU3NDc0LCAweDgzMWUyZjY5LCAweDFiODIzM2U3LCAweDhkNjhjN2RmLAotCTB4ZTM4NTczYzUsIDB4MDc5ZGVjOGQsIDB4Y2JkM2I3OTksIDB4NWMzYmVjMDUsIDB4OGRjYWJmMmEsIDB4MWY4ODcwMzAsCi0JMHg5YzYwYjIyZCwgMHhjNjliZjYxZSwgMHhiZGVkMzJlYywgMHhkNzEzNTk0MCwgMHg0ZWUzNWRmMywgMHhkYTNiNDk2YSwKLQkweDMxNzhlMTYzLCAweDgwMjYzN2VmLCAweGI1MTgyNDU3LCAweGM4ZGQ1YzcxLCAweGZjMDAzZmU3LCAweDAyZGZjZGQ3LAotCTB4MzEzOTI0OWYsIDB4YTc2ZWY0NmUsIDB4ZWVjOWRkZjIsIDB4ZGI3Y2YwNmYsIDB4MzM0MzljOTAsIDB4NWIzZjdlMjksCi0JMHhkZDc5ZTIyZSwgMHhjMWQ3MDY2ZCwgMHgxZTZmYTA4OSwgMHhjYmM4MDg5MSwgMHgwZjI1N2I2NywgMHhiOGFjMDc1YiwKLQkweDNiZWU5NGVlLCAweDRhNWVmNzg2LCAweDI5MTFlYzU5LCAweDJmYWQ4ODdkLCAweGZlNzhmOGM3LCAweDBmNmRkNzQ0LAotCTB4NjA0ODQ0ZjgsIDB4NGRmYmM0MWMsIDB4NzQyOGVmNzMsIDB4ZWM2NGRmODEsIDB4MmU3MGE1ZmUsIDB4ZjM4MTczNzYsCi0JMHhlN2EwNDFlMCwgMHg5M2JkZWNjMywgMHg3MDBiY2JhMywgMHg0ZmY3NzY5ZiwgMHhjM2I3OTQwNSwgMHhmZWQwNmU5NCwKLQkweDA3YTk2OTk2LCAweGVmN2VkMjBmLCAweGU3ODA5ZTU4LCAweDA5M2QzMzVjLCAweGQ3YjljMmI3LCAweGRiYTJiZGNjLAotCTB4YmVjZGViNDUsIDB4NzM4MzZlYzEsIDB4NDUyM2E5YWYsIDB4ZTdlMTU1ZTIsIDB4N2U4ZWQyMGUsIDB4M2Y3NTk5OWEsCi0JMHg1ZGM2MDViZCwgMHgzMTQzZDc0ZSwgMHg4NWZkZDIxNSwgMHg0YWJmMjEwMywgMHhiMmI1ZjZjMCwgMHhiMjkwMzRkNywKLQkweGYzY2FmYjRlLCAweGZmYjRiMWE2LCAweGQwMGY1YTMyLCAweGQ1OGFiYjVlLCAweGRjMTI2ZGFiLCAweGQ2NWI3YTEwLAotCTB4Y2JlYTM4ZmEsIDB4MWYwMTI2YjIsIDB4ZjZhNzY4OTYsIDB4ZWI4MzE0NmYsIDB4ZGI3MGEyOGYsIDB4MzRmNmQxNTcsCi0JMHgwM2RhMGYzZiwgMHg1YmQ4YTZkYywgMHg5NmFiM2NlMSwgMHhlN2RiMTM4ZSwgMHg2NDc5ZTNkNiwgMHg4YjQ3NmQxOSwKLQkweDRmZDM3YjQ5LCAweDU1ZmNkZTExLCAweDQ0N2I4MTAyLCAweDhmYTliOWU1LCAweGJkYmMwMmU1LCAweDBmY2ExYjkyLAotCTB4YzYyNWY4ZWQsIDB4ZmRhMmNjOGQsIDB4NjdmMGEyMGQsIDB4ZTg4NTFkOGIsIDB4NzA0MDdiNTcsIDB4ODMyMzNiZTIsCi0JMHg1ZDdlOTAzMywgMHg3MDY4NjEzMCwgMHg2NGZkMGQzYywgMHg0MmU5ZDcxOCwgMHg3MWQ1MTgzNCwgMHgxNjE2YzkwOCwKLQkweGIwYjY1Y2RmLCAweGQ1ZTYwMWJlLCAweDFhYTQyNzIxLCAweDliY2VhZjkwLCAweDRlM2YxZDYwLCAweGY2YTVlZGYxLAotCTB4OGIxMzMxZWIsIDB4OGY5MzY4NmYsIDB4N2E1NDNhOTksIDB4MWQyNWJjNzQsIDB4OTY5Y2Q4ZjUsIDB4OWYyZjNjM2MsCi0JMHhiY2YwNGE0YiwgMHhlY2NmNWJkYywgMHgyZDRiMjM5MSwgMHgzMGVjMDE3ZSwgMHhiZTE0MzljOSwgMHhlMzM1MmRiNywKLQkweGQ4OTdjZWY3LCAweGE0MzlkM2ZhLCAweDI3YTFmZDAzLCAweGVlMDQ0OTU3LCAweDk1NWUyZDM5LCAweGYxZDAwY2ZlLAotCTB4ZjkwOTA2ZTQsIDB4NDI0ZTdjNGQsIDB4MjVlZjM2M2QsIDB4NWI2YjI3ZTYsIDB4YmM5ZWUwYzUsIDB4Y2ZkZWM0YzcsCi0JMHg5ZjlhNzI4MSwgMHhmZjY1MWJmNywgMHg2NTYzZDVhYiwgMHg1M2Q0MGFhZSwgMHgyYmQ0YmQ3YSwgMHg3YWE5ZWZlZSwKLQkweDJmNmNiMDEzLCAweDE0Y2Y3NTdkLCAweDc0MTU1N2Q0LCAweGViNDYwMWRkLCAweDM3MDZhZmE1LCAweGFmNTJiZmEwLAotCTB4NGQ4OTZhYWYsIDB4MTBkOTUzZDEsIDB4M2Q1YTUyMzcsIDB4ZTA0YWQ2NjQsIDB4YzA1ODNiZTMsIDB4YjVmMDdiNzYsCi0JMHg3NTg2OWZjZiwgMHhlMDRlY2FiNywgMHhmOWQxOGQ0YiwgMHg4MmY4YzA4YywgMHg2Y2NjYmM4MCwgMHhjODM5ZjhkZCwKLQkweDBiNGNmOTQxLCAweDAyNzNiYmJlLCAweGIzNzIwMGU4LCAweDU5YzU5ZTIyLCAweGRmMTE0YmY5LCAweGJjZTUxYzRhLAotCTB4NTczZTVhOTUsIDB4Nzg2N2I1Y2UsIDB4YWY1MWUyNDUsIDB4ZTI1NmU1NWYsIDB4ZjQzYmQ1NTEsIDB4ZGE1N2U1MTAsCi0JMHg4MjJkOWRjZiwgMHhmZTQwMjJkZiwgMHhjNzdiZWVjOCwgMHhlMzg5ZGU2MiwgMHg4M2VkYzg1YSwgMHhlN2U0NzYxNSwKLQkweDVmOWZmNzQzLCAweGViM2FmYzBhLCAweGJkODA4MTQxLCAweDAzNmY2NDRlLCAweDJiMzU4N2FjLCAweDY1ZjgxNzA1LAotCTB4ZGFjODNkZTcsIDB4NjFlZGEzY2YsIDB4Yzk3ZTg3ZGMsIDB4YjdmMjhhZjgsIDB4NjZiZmY4MGIsIDB4YjFiYmUzZDUsCi0JMHgwMmUwOTM3ZSwgMHg5NzU2ODdmOCwgMHgyZTUxM2RhMiwgMHg5YmNiMDQ4YiwgMHg4MWZlZTA4ZSwgMHg1ZjE4NTNhZSwKLQkweDg5OGIyNmQ0LCAweDRiMzVmZmMwLCAweDk1MzA0ZWNjLCAweGY4NTIzZTE0LCAweDE3YmYwOGYyLCAweDU5ZGNhMjRkLAotCTB4OWY3NmQzMzcsIDB4ZGU4NDkwMDAsIDB4MTc0ZTI4ZmMsIDB4ZjAyOWViNDIsIDB4ZjhjY2FkNDksIDB4OTI0YmM4ZWMsCi0JMHhlMmU2ZDgxYiwgMHhjM2VlYzk3YywgMHhhYmViZTQ5ZSwgMHg1MzJkZGNmOCwgMHhkNzNjYzEwNiwgMHhiNjg2MzhiMiwKLQkweGIwMjYwNTU1LCAweDA1ZmE0ZTIzLCAweGNkZWY4ZjNjLCAweGI2YTZjNDk3LCAweDdjYmUxNGEzLCAweGZhZmE2MDRlLAotCTB4YmRhODcxNjIsIDB4YTVmMzhlZjgsIDB4YTk5NDdmYzIsIDB4YjU1OTVmNzEsIDB4MGY3MDIyNTcsIDB4NWU4ZmNmNTcsCi0JMHhjNDJiNzAyOSwgMHg0Y2JlOTQwYiwgMHg1YmM3NDNlNywgMHhkYTNmNzBkMCwgMHg2OTFlMGFlYiwgMHg2NWYyMTEzZSwKLQkweGExZWYxNjQ2LCAweDkxYjU0M2M4LCAweGU3N2QwNWM1LCAweDM3ZmFlOWYxLCAweDc5NjFlYzViLCAweDRhZGM1OTEwLAotCTB4YmJmYmY2OTAsIDB4OWM2MDJmMGQsIDB4NDdmNWI5ZGMsIDB4ZTZmYjQ3YWUsIDB4ODAwN2NhMGQsIDB4MTI3NjBkZmYsCi0JMHgxZjg3ZmRjNCwgMHhiMzQ1NTBmNSwgMHg0MjM4YzFlOCwgMHg2NmU3MzA2MywgMHg4OTVkYmVkNSwgMHhjNTdjYTg5NywKLQkweGQ4YWVmODhlLCAweGQzMTdmNjY0LCAweDhmNWIxNWY2LCAweGY1ZjllMTY1LCAweGU3OGM2ZWEyLCAweDY4MGJkNzkwLAotCTB4MjNiOTEzMWYsIDB4NTQ2ZmVlMGIsIDB4ODZkYzU5MTgsIDB4NjQ1ODJlZGUsIDB4YjNhYTdlNjEsIDB4ODNhNzU5YWYsCi0JMHg2M2FjMjZkZCwgMHgwNDU1NjllZiwgMHgyYWNjOTM2ZSwgMHgxNmZkZWViZiwgMHhlNzg3YTk0OSwgMHgzM2E1MzIyOSwKLQkweGYxODY5M2RjLCAweDUyNzFkZmE5LCAweGZlY2UzNWUyLCAweDQ1NWZmMTg2LCAweDVjZjY4NDhiLCAweDlkOGRiYWM1LAotCTB4NzE1NzdmMTAsIDB4ZGNmYjhjZDgsIDB4MzFlNzc1ZGEsIDB4OTVlMGI4OWUsIDB4YWUxZGYwOTcsIDB4MTM1MTE2ZGEsCi0JMHhlZTJiZDU3ZiwgMHhlNzg4OWQ2OSwgMHhkNWNkMzUxYiwgMHhmMzQxYmYxOCwgMHgxMzUxY2U3OCwgMHg3N2ZmMWM4OCwKLQkweGNhOWNmOGIxLCAweDk1NmRiNjU3LCAweDM3MmIwYTI5LCAweGVmODFkYWZmLCAweDc1YWZiNTcyLCAweDc1OTNiZGUwLAotCTB4ZDg3NzFlZGYsIDB4ZjAyOWNlMmIsIDB4MzljNmI3ZjAsIDB4NTA3ZjgxOWQsIDB4NDVhZGZhYzYsIDB4ZDY0NGU3MWIsCi0JMHhjNzQ2YmQzMSwgMHg5ZWU5MTM5NywgMHg3YWRlYzg0MSwgMHgyMWU3ZjNlOSwgMHhhNmVjZjcwZSwgMHhmMTg3OWY0ZiwKLQkweDY3ZTdmZDU2LCAweDA2MWM0M2NmLCAweDgyNzE2ZWQ5LCAweGZlYmI1MjNkLCAweDU0NjM4YzdkLCAweDMwYjJlZGRhLAotCTB4MzdmM2FmZmIsIDB4Y2ZmOGM2YmYsIDB4ZGQ5YTNmY2UsIDB4ZGI3M2FkMDAsIDB4NmY2MGExYzksIDB4NmJmYzZlNzQsCi0JMHhkZTc1YzQyMiwgMHhmZDEwYWRiMywgMHgyOTZjZjczOSwgMHhmODIyNDgxOCwgMHhmODE0OTQwYiwgMHhmODhmZGZkNiwKLQkweGRhYmQzZDUzLCAweDVlMzBkYjlhLCAweDM3YTUxY2U0LCAweGRjNTA4N2U4LCAweGM1OWFhMDVhLCAweGJjNzhiYTAxLAotCTB4NzFjODg2ZGEsIDB4ZDNlMmJkYmUsIDB4NjFiZTZmOWEsIDB4NjZjNWU4MTIsIDB4MzQ1YzE3NjYsIDB4YTUwMGVkNGUsCi0JMHhhMGZkMTVlMywgMHhiOTg3ODZkZiwgMHhiZjRjODkzZSwgMHg0YTBmZjA3MywgMHhmYTNhNjNhNywgMHhmNzNjZGU3ZCwKLQkweDU5NDJjZjU3LCAweDcxOWY3YzczLCAweGUwN2VjMTZhLCAweDBlMjM4OTRkLCAweDE2OWQzYzU4LCAweGJmNGQ5YjkwLAotCTB4YTA0MGI4YzUsIDB4ZjQwYmIxNWIsIDB4YzE0M2U3ZjMsIDB4ZWE0YTdjMmYsIDB4Zjc0M2ZmNDYsIDB4NWJkZTMzMzYsCi0JMHgwODc2ZDhhYiwgMHhjYjczYTdlNSwgMHgyNWQzOGM3ZSwgMHg5M2I3OWUzYywgMHhmZTJjN2U4NCwgMHg2YTdhZmI5MiwKLQkweGJlMmNlYzliLCAweGUyMWZlMzhkLCAweGZjMGU1Y2RmLCAweDE4ZGNlM2NlLCAweDZmZjEyYjFmLCAweDBkYmRjNTdkLAotCTB4ZWZlMzRlOGYsIDB4YmNmOGIwMmEsIDB4NzgwZmE2ZWEsIDB4NWU5ODU5MWMsIDB4ZTlkMDJlNDIsIDB4MTNjNmI3YzgsCi0JMHgwMjcwNzgyYSwgMHhlM2FiYzYxZSwgMHgxN2M3MjMzOCwgMHgzOTdkZTI4NiwgMHhhMDdlODBiZCwgMHg5YTcxNDNhNywKLQkweGUyMTgzZjM0LCAweDIxYzJmY2Y2LCAweDc0MWY0MTEyLCAweDlmZjE2NmFlLCAweDFlZjY5MjlkLCAweDJjM2U5ODY4LAotCTB4YWQxNWQzYWUsIDB4ZmY3ZjUzOTMsIDB4MzYyZjM5ZTIsIDB4OWY4YWVmZmUsIDB4MjY5NzY4ZDgsIDB4ZDNjMTUxYWUsCi0JMHhmNTkxMGJkOSwgMHhmMGI0NDE3OCwgMHg5YTkzZGQ4ZiwgMHgwNWVmZTgyMywgMHhjMDI3NDdlNCwgMHgxMzExZjk3OSwKLQkweDdjNWU3YmMxLCAweDM3ZGNhNGZmLCAweGIzYjRmZWUyLCAweDBiOGM0NWViLCAweGExYjQwODZjLCAweDhiZWJkNzFlLAotCTB4YTI0ZTdlMWEsIDB4ZDEyZGVmMWYsIDB4YjRkNTRmNGMsIDB4ZWNlMjc1YjAsIDB4NDZkZmJiMjYsIDB4ZWI3ZDljZTEsCi0JMHg5YWU3ZTQzNSwgMHgzMjRjNDcwZCwgMHhkZDdiYjc4NSwgMHgyYjhiMTM2NiwgMHhlYjAzZjI2MCwgMHhmZTM1NWY4NCwKLQkweGM4ZWYyZmIzLCAweGRmY2RiZDQyLCAweDMzZjdkMjE1LCAweGRiNTNmNzliLCAweGRhOWZiOTFhLCAweGZkMzVlNzBkLAotCTB4OTMwMWNhNTQsIDB4ZmVmMTc2ZDMsIDB4YjczZDE4Y2UsIDB4ZWQzM2JjMDEsIDB4MTMzYTVlY2MsIDB4ZGQyMjhiMTAsCi0JMHgyZDEyOTk4YiwgMHgyMzczZmRmMSwgMHhmNWQzNzNmMywgMHhiMjU3ZGYxMiwgMHg0NDk0ZjdiMywgMHg1ZmRhMzQ0NywKLQkweDBmNzNkOGY3LCAweGQ0ODAwY2M3LCAweDhiMTI3MTg0LCAweGM1NWM3OWViLCAweGEwMjRlZTQzLCAweGI1ZmI2MmY3LAotCTB4MTRiYmM2MDQsIDB4YzdkYWFiZjAsIDB4MDEyZjRlNGIsIDB4MmE0YTRkYmIsIDB4NjczZWFiMTksIDB4MWE2ZmM2NTEsCi0JMHgxNTdlMjA2MCwgMHgxN2IxZWZmZCwgMHgyN2ZkODQwZCwgMHg2MTgzY2EzMSwgMHg3ZGE3ZDcxYywgMHhhZmY1ODQ2OSwKLQkweGY3ZmNjN2RkLCAweDBjYjFjMmU0LCAweDc0NmVkZWY4LCAweDcwYTc4YWVlLCAweDZlMGIyN2RiLCAweGU2ZjZiZDcwLAotCTB4ZTQzZjA2N2IsIDB4ZGY2OGYwNGYsIDB4N2E1ODg0ODUsIDB4ZGI4ZjVmOTgsIDB4ZGRhMGY2ODAsIDB4MmFkMjc0MTAsCi0JMHg0ZjY5NmVjNCwgMHg4YmFjMGRjMiwgMHgxODg5OGNiOCwgMHhlODcxOGYwMiwgMHhhNmEyZjg4ZiwgMHgwNzNhYmRjMSwKLQkweGQ0MjllNmExLCAweGVmMzUxYjczLCAweDFhZTRjNDI0LCAweDkwMjZlZjc1LCAweGJkNzQxOTAzLCAweDU1N2U3MWIxLAotCTB4ZjY3NjcyZmMsIDB4MDNiNzBhNmYsIDB4Y2Q4ODYzZGYsIDB4YmVjMGY1MjQsIDB4YjQ1ZWVjMmIsIDB4ZWZlNDllMWIsCi0JMHg0OGRmZDA1OCwgMHgyMzg4Njc4OCwgMHgzYmY1NmVkMSwgMHhjZDVmYjQyZSwgMHg1ZmI0MTBmYiwgMHhhM2Q2M2U0ZCwKLQkweDE5MTdjN2NkLCAweDVmNWE0NzhmLCAweGE2MzhmOWUyLCAweDQzYzQzNjg4LCAweGQ5NDFhMTZjLCAweDRmMGYxNWFmLAotCTB4MzYzYjhmMGMsIDB4NTA4M2I4ODEsIDB4ZTMwZDlkN2UsIDB4Yzk3OGE5YzAsIDB4NmNkODc5ZWEsIDB4ZjFkMzcxZGEsCi0JMHg0YzQ0ZjQ2OSwgMHg2MDZjODc2NiwgMHg3NzdjZDRlMywgMHhmMzgwOTcxMiwgMHhkM2JmNjhmNywgMHhkYmYyNmFmMSwKLQkweGFhM2M3OWEzLCAweGRmNDExODkxLCAweDA5ZGFhMmQ5LCAweDA2OGY3ZmM3LCAweDdiOGM0YmRmLCAweDdkMDIyNDg3LAotCTB4Y2I1N2RmMDgsIDB4YzQxMWVlMDQsIDB4ZmVkMDc5ZjAsIDB4ZTA5ZGY1MzUsIDB4NmJmZDYwMWQsIDB4NGVjMTkwZTEsCi0JMHgyYmJmN2RmNSwgMHhjY2I3ZmFmOCwgMHhlODFlZjI1YSwgMHg3NTYxOWM5YiwgMHgzMTNiYzgxOCwgMHhiZGUyNjQ4OSwKLQkweGE4MDFkNmQ1LCAweGU2MTZkMjlmLCAweDJmMzQ2MzkzLCAweGNhYmUzMjM0LCAweDZlNTA0MTU4LCAweDljNTliYTMyLAotCTB4OGQxMjU5MGEsIDB4OGEzOWE4ZjYsIDB4Yjg2Yzk2YzgsIDB4Mjk2NDQ0YzcsIDB4ZjNmMTdhMWIsIDB4MjJkNzI1ZjMsCi0JMHg1YzY1MDUwMywgMHhiNjhkNzk0ZSwgMHgzN2NlZWQ2YiwgMHgwODQ0YTVjYywgMHhiZjg1MTE0MCwgMHgzMWYzZGEzNywKLQkweGEzNzBkZmY0LCAweDFhMzBjOTM3LCAweDc0YjdkZTNlLCAweGRhOTQ2MGU3LCAweDY4MjNjMTRiLCAweGI1ZGRlZTEwLAotCTB4ZTkwYjA4NjcsIDB4MDg5YWY3ODEsIDB4ZjAxNzc3YjksIDB4NGYyODYzNzgsIDB4YmFjZjcwODIsIDB4Zjc5NDNhMzEsCi0JMHhkZjdkNTE0NCwgMHg2N2YyYzY5OCwgMHhiYTVkZWZhMywgMHgzZmJiYzI5YywgMHgzNDZjZTRhNiwgMHg3OWNhMjc4YywKLQkweDA1Nzc5ZTE5LCAweDE3ZmU3MGUzLCAweDcxOTQ1ZjViLCAweDk4ZWE2YzhlLCAweGY5OTYzZDEyLCAweGNmMWRlMTRkLAotCTB4M2RkMGY2ZTEsIDB4ZDc4NzVjNmEsIDB4MTA3Yzk0ZGEsIDB4Y2QyNTExZjcsIDB4NTVhZjUxZmIsIDB4Yjk2M2Y2MDcsCi0JMHgxZDM0ZjIwMSwgMHgyNTMxZGYxNiwgMHhlYjEwOTYyNSwgMHg5MzBiNGJhMywgMHhmZDc4ODUyZSwgMHg5ZDAzMjRkMiwKLQkweDk3NDc4MGU3LCAweDYwZmI4MmVlLCAweGEyM2MzYzYxLCAweGIwZDE4M2MxLCAweDQ5OWVkNzdjLCAweGRmMmMzYzZhLAotCTB4N2Y0ODc2MDUsIDB4YmFjMDMwZjEsIDB4ODlmMmU5N2MsIDB4ZTUzNzlmZmQsIDB4YzQyYjc4OGIsIDB4ZjAxOWU0M2IsCi0JMHg4N2YxYTVkZCwgMHhhMTVmZTg2ZCwgMHg0N2FlMGIzZiwgMHgzZWVhY2UxYywgMHhmYjJhYmZlZSwgMHhjNTI3MGExMSwKLQkweDVmY2MyZTNhLCAweGFmODUzYjRhLCAweDc0OWJlMmZhLCAweGJkOGNiY2UyLCAweDlmZTVhN2FmLCAweDAzMjdhYjYyLAotCTB4N2FiNzBkZTAsIDB4ZTFjNmQ5ZjYsIDB4ZjYzZWYxZmMsIDB4M2RkN2FmNTQsIDB4YWY5ODRjNzksIDB4MDYzYmNkODksCi0JMHhiMzJlZjdlZSwgMHhhYWNhMzVkZSwgMHhjZDRlY2JmMiwgMHhkMWE2MjA1YiwgMHgyYzgxNjZmMSwgMHg5M2U3ODQyNCwKLQkweDhjYjY1MGIwLCAweGYwNGNmM2EwLCAweDdhY2UzMDE4LCAweDA2M2JkNTk5LCAweGVmNGM3MWZhLCAweDg0OTVkMjBlLAotCTB4MzFkZTAwOWEsIDB4MGI5NjE4ODIsIDB4NmQ4NmJmYTUsIDB4NTBkZWJmNmMsIDB4NjIyZmYwNmEsIDB4YzAwMmJkZTcsCi0JMHg4NzQ3ZjMwYiwgMHgxOWJhM2Y4ZSwgMHg0MTFjYjQ3ZiwgMHgzZDY5YThmZSwgMHhhNWEzZjhjMiwgMHgwYmY4MWYzZSwKLQkweDlmNjBjZGNlLCAweDQ3YmE0OGRmLCAweDc5YWZkZDAzLCAweDQ4ZDBhOWI0LCAweGI1OTg3ZmY5LCAweGYyODUyMWJiLAotCTB4MTRkNjQ0ODUsIDB4Nzg4YTVmMTYsIDB4YWY4YzMxZmQsIDB4ZjhmODdkMTcsIDB4NDVmNTc5OTQsIDB4NjkzZGM2ZGYsCi0JMHg3ZWMyNjY4ZiwgMHhjZjAxYWY3MiwgMHg4NWJjMTRiYiwgMHg4YjJiMDdlYywgMHhmNzY0MWMyMywgMHg2YTdlODM0ZSwKLQkweGMzNzYzYjczLCAweGY5ZWQzN2Y0LCAweDcwZGI4YzBmLCAweDA3NjliZGVjLCAweGEzNGM3N2I0LCAweGZiODU3MjE0LAotCTB4MDhiYmRjNmQsIDB4YTQ2ZGNiZGYsIDB4MzE5MDAwZjMsIDB4NzU4NjViYTQsIDB4MzA3YzZmYmQsIDB4MDNlMTA5ZjksCi0JMHhjMDRjOWVlYywgMHg5Nzk0MTFjNywgMHgxMDllZmNmNSwgMHhmZmJjM2I5NSwgMHhkZWNhY2MzYSwgMHg2NTY3OTg2NSwKLQkweGFjMDdlN2ZiLCAweDFkOTk0ZjIyLCAweGM3YjdiMDk2LCAweGRhYWRmYjA0LCAweDlmYWMwNjI1LCAweDdhYTY2OTAwLAotCTB4ZGViMDRiZmUsIDB4MjZhMzU2MDMsIDB4YTdhMTRlNWUsIDB4OTM1NDRmYzIsIDB4ODc3ZGUxNWEsIDB4M2RlZjU4OGMsCi0JMHhiMzg5ZmU1YSwgMHgyOWUwYTlhNiwgMHgxMWYzMWVlZCwgMHg0YTBjOWNmNywgMHhkZDc3OWQ4NywgMHhlNTJhZWIwZCwKLQkweGVkMzUxYjlmLCAweGMwMTY0OTQ2LCAweGY4MWY1MjliLCAweDY4N2QxMjMzLCAweGFlOGM0NWJiLCAweDE3YjA1NjcxLAotCTB4MjA1Y2VlMzYsIDB4N2Y0MmY5YzIsIDB4ZWYwMzlhZTksIDB4MzlmYWQxYzcsIDB4ODliNzUyNTYsIDB4YTE4OWNmYjYsCi0JMHg3OWUzZTQyOSwgMHhhN2NmMjA3ZSwgMHg0M2ZkMzRiMCwgMHhkZmEwNDFiNywgMHhlYmJmNzM1NywgMHgxNzFlNTZiMywKLQkweDA2NWU3NDYwLCAweGNiM2M1M2VmLCAweDI5MzEzYWYxLCAweDQ1MDVkNzFhLCAweDgwNjZjMTZlLCAweDNmMjM2YjczLAotCTB4NGVlYjRlYmYsIDB4MTRkZDAwMzMsIDB4MWI3NjM2MzksIDB4NjhiYTc2ODIsIDB4MDY1ZDE5YTUsIDB4Yzc3ODYzODgsCi0JMHhlYzZkZTc0NywgMHg3YjVjZWY1YiwgMHhhN2JmYmIyOSwgMHhhNzMyZmVmZiwgMHhhZmI2ZjdmMywgMHhhZjc1ZWFiZiwKLQkweDRiYTA2NWY3LCAweDYzYzc1NDc1LCAweGNkN2NkMTM3LCAweGY5ZTE5ZmE1LCAweGNkNmIyMmUwLCAweDNiNzNlYTU1LAotCTB4ZmYxZmFhN2QsIDB4M2E0ZTE3M2IsIDB4ZmNlYzNlYzAsIDB4YzkxNDVjY2EsIDB4MzJiMGVlY2UsIDB4NmY4Zjc3ZmIsCi0JMHhlYzUzYjYzYSwgMHhlODE1MjQyZSwgMHg0MTNkZjU2NCwgMHg1NzY4YTYzMywgMHgxZTU1MDhmZCwgMHhjNjM2NTFkMCwKLQkweDY1NmFmYWMxLCAweDc1YWJhNGZlLCAweDE0N2YwM2Y3LCAweDQyYmQ3ZTY0LCAweGY0MTIzOGQyLCAweDVmZDU4ZTY0LAotCTB4ZTVjMzhiOGMsIDB4NDgxNzE4ZTksIDB4NTFmNjYyYmUsIDB4Y2UwZmZkMTQsIDB4NzlmOTBhOTcsIDB4NzNiMGU3OTgsCi0JMHgzOTdmMmMyNywgMHhlMzkzOGQzMSwgMHgyYTRjN2VhMCwgMHhkYTIzY2ZjMiwgMHhlMjcyYjlmNywgMHg1ZGU4MjM2NSwKLQkweGYwOGE5ZTkyLCAweGU1NzRhMjBhLCAweGQxZGEwOTAzLCAweDMwY2I5MmU0LCAweGE4OTBhYjllLCAweGJlM2EzMWVjLAotCTB4NmZjNjc0OWMsIDB4YmE5NjQ3NTMsIDB4OWZlZmYzMjcsIDB4NmNmYWYzMDEsIDB4ZDYxMzE5YzQsIDB4NjZiOGQ3ZjMsCi0JMHhlYzZiMjdiOCwgMHhlODM3NDY5NCwgMHg1ZGZmZGZlZCwgMHgzYzUyMzNiYywgMHhlMzFiNzhjNSwgMHgxMmJlM2RjNywKLQkweGViMzM5YzM3LCAweDEyZWY5YWYxLCAweGJkNWRkODk2LCAweDlmYzdhYmYxLCAweDNlMGFkZjFlLCAweGZiY2I3OGY1LAotCTB4Y2UzOTNkZDAsIDB4N2EzZjFiZDUsIDB4NTA3NDI4N2MsIDB4YzdjN2FjZjAsIDB4OGE2ZmYwM2IsIDB4Y2QzMjc3YWYsCi0JMHgzYmRhY2VmOCwgMHg3N2RmODY0NiwgMHhkZWM4YjlhOCwgMHhmZGEwZjQ2ZCwgMHg0M2M3Yzg1YSwgMHg0ZmI0NTdlZCwKLQkweDZlZWMxMjBiLCAweGUyOWUxZWM2LCAweDc4ZjBjNGMyLCAweGUzZDU3OGY1LCAweGUzYmY4NzMxLCAweDdjNDQ2MjQyLAotCTB4ZTAzNzc0NDcsIDB4MDE2MWYyOGIsIDB4N2VkMDRjMWMsIDB4NzA5OWI2MGIsIDB4NTc4MjQ4ZmYsIDB4MDZmYzc1MTMsCi0JMHg0N2JlMDYxZCwgMHgxNzk3MzU3NywgMHhkNjM5MmYwNSwgMHgwMGIxOWRiYSwgMHhlNzhhOWNjZiwgMHhhNTdmNTdkNywKLQkweDViMGI2N2I1LCAweDdmMDY5Y2E3LCAweDc3OGM0ZTQwLCAweDg5NDFmODA5LCAweDVmMzg0YTk4LCAweDE1ZjJkNTFkLAotCTB4ZDUzNTk3MWYsIDB4YThlYWY5Y2YsIDB4OTE5OGFmOGUsIDB4MGJjYWNmMTMsIDB4NzRmMmJhOWQsIDB4ODU1MDdlODIsCi0JMHg1NmYzZjRlZiwgMHhmODE1ZWJmOCwgMHg5ZTM3YTEzMCwgMHhiMmNhZmUxNCwgMHg5OTNiZmI3MSwgMHgzODdiMDYwYywKLQkweDMxYjFiNWViLCAweDZiNDk5ZmEwLCAweGMzYmY0NDVjLCAweDIxMjVjM2Y4LCAweDkxNGY5YzM4LCAweDBkZTIwNTBmLAotCTB4ZmZhNjc3N2QsIDB4OWRhYTdhMDMsIDB4M2YyYTgyYWUsIDB4NWJkMTBjYzAsIDB4YTdhMDhiNjAsIDB4YzQ5OTNlMTQsCi0JMHhjODg5MzVlOSwgMHgzNDdmYzAzYiwgMHgxMmZmMTg4OSwgMHg1NTUzZjdiMiwgMHg5OWU2NTdmMywgMHg5ZTYwNTI0MiwKLQkweDRjNWQ1OGFmLCAweDg2NzlmM2JmLCAweDQ3Y2Q0ZGU2LCAweGRlNDRmYmEwLCAweDFiMjhjNGZmLCAweGRkMjBiN2RlLAotCTB4ZmMyMWIzYzYsIDB4MzJiYmUxYTcsIDB4M2MyZTI5YjIsIDB4MjdkNzg5MGUsIDB4YjMwOGViNDMsIDB4N2JlMjY2ZDcsCi0JMHhlNDJmMTRiNiwgMHgxYzc4NmIxYiwgMHhjNDYwOWI1ZSwgMHgzOGY4NTY3NywgMHg5MjhiYWRjZSwgMHg3OWVkNGUyMSwKLQkweGVjMDczYmQxLCAweGRlYzJiM2I4LCAweDMxOWY5YzJjLCAweDM3ZDYwMjM4LCAweDJkNjdmOTdkLCAweDljYTA2YjNiLAotCTB4N2FjMzJiZDYsIDB4MjI5NWZjN2MsIDB4NmY3NDJmZjMsIDB4YTRkN2ZiMzMsIDB4NTI4NzZkZjYsIDB4NDA3NWM2NzEsCi0JMHg3MDg5OWY5MSwgMHg5MDBhZjE1ZiwgMHg4YzBhNjBiNywgMHhjYTU4NmFmYiwgMHg3Y2ZkYmE2OCwgMHhmMmZiZWUzOSwKLQkweGQwOGRiMjVhLCAweDI5OWVhZWNmLCAweDRmOWY5NzE4LCAweDVmYjA0NjNjLCAweGU3YWY3Y2Y1LCAweGViM2YzZDZmLAotCTB4OGZlYzM3ZjksIDB4ZmIwYTFlZTgsIDB4MmZjYWVmOTAsIDB4ZTIxNjlkOGEsIDB4NmY5NGMzOWIsIDB4YzI5YmViNTQsCi0JMHgxZTdmOTQyZiwgMHg4ZDc1YmMwNSwgMHgzMDE5ZTRmZCwgMHhmZDhkZjdhYiwgMHgzN2Q2MTEyYywgMHhkYjBmMGVjNSwKLQkweGEwYzc5ZTFiLCAweGI4ZjY1ZjVlLCAweGJiZmY4NzYyLCAweGYwMzRmYmNkLCAweGNmNzQ5MWEzLCAweDIzNjlmNjgyLAotCTB4ZWZiODA2NWQsIDB4ZjNjZGI2ZmUsIDB4ZWM1NzdjMGMsIDB4MmJlZDhiOTMsIDB4ZTFiYTRlYzgsIDB4OGIzMzdjYTUsCi0JMHgyMDYwMjFkMywgMHhiY2FiZGVmOCwgMHg3NTNkNDA0MCwgMHhhMDk2ZTkwNywgMHgyNGVhM2JiZiwgMHg5Njc1ZmVjZCwKLQkweDA3ZTNmYmE1LCAweGZlYjAzY2UwLCAweGYyMDc4YzEyLCAweDg4OWE5NDQyLCAweDcxNWM1OWVkLCAweDMxZWZiZjAzLAotCTB4ZTAwNDdiYjIsIDB4ZGE4NWNlZjUsIDB4NjRkOGY4ZjYsIDB4Y2Q1ZGY4NGUsIDB4YWZiNjA1OGYsIDB4NDhlOTY1OWYsCi0JMHhhNWI0N2I4MCwgMHhiZWJlYjZiMiwgMHg3YTFlNjU3ZiwgMHhiNTc2ZmFiOCwgMHg3ODIxOWRmYywgMHhiMmFkZDhiNywKLQkweDMxYjU1ZTBiLCAweGRlMzQyNjNiLCAweDAzYmJmODc3LCAweGYwMDZkZjE0LCAweGVhNWViNGQ3LCAweGZmMDIyNDdmLAotCTB4MmEzN2E5MmEsIDB4YWYxOGQzMmUsIDB4OTliNjJmYjIsIDB4ZmY3YTQ3YTcsIDB4YzE0N2U5NDMsIDB4YWVkMjRjZjcsCi0JMHg5MTZmZjNlMCwgMHhlODlhMmZkZSwgMHhjMzdkZmI2NSwgMHg3OWNkNDE1MywgMHg3NDY2OTJiYiwgMHgyZWJiNDY0ZiwKLQkweDFkYTAyMDIzLCAweDMzYzgxNTVkLCAweGYzZDhkNmNjLCAweGNiZGJiZjZjLCAweDI5Nzc4NzllLCAweDBlZjM3ZWEwLAotCTB4ZWEwN2NmNjYsIDB4ZDU1MDVmNzEsIDB4YWIzN2Y2Y2MsIDB4OTkzOThjZTEsIDB4ZWQxMzI0MGYsIDB4MTViZWQwZmMsCi0JMHhlMWFhYTBlMiwgMHgxZTU2M2Y5ZCwgMHhlOWU2YWI4NCwgMHhkN2ZlYWM4ZCwgMHg4N2E2ODViNiwgMHhlOWRmNjAzMywKLQkweDM0ZGM5MjRkLCAweDg2YTFlMmJmLCAweDZhM2ZiYTI4LCAweDQyMTYyNTQ4LCAweDVkN2Y0N2Y3LCAweDE1OTRkMGYxLAotCTB4ZTJjYTU0YjksIDB4YzU4OTAyM2MsIDB4NDI2ZDgzN2MsIDB4NWZjOWY3ZmYsIDB4MDFiMDc4YWYsIDB4N2Y3NGM5ZjYsCi0JMHhlZDUzNjNkNSwgMHg4ZjkyZmI1YiwgMHhlMjE3MzZlMywgMHhlYWZkYWZiMSwgMHg1ZjI1MzFmZCwgMHgwNzdlNTRkYiwKLQkweGEyN2JmZDNkLCAweDdmYzAzMTVjLCAweGY0N2RmMzBmLCAweGMyZWYwYmI1LCAweDkyZTU4MWZkLCAweGRlMjE0MzBiLAotCTB4YmJhNzIyNmIsIDB4YTlmZGNlZDksIDB4M2FjZjc2NTYsIDB4ZWQ5YWY0NWYsIDB4NWQ2ZmRmMjAsIDB4ZTI3ZTAxMTgsCi0JMHhjMzFlNDY3NywgMHg3ZjJiNTk3ZCwgMHhhZmFmNzE2ZiwgMHg4NTIzZWQxYywgMHg2Njc2NzE4ZSwgMHg2OTdiNWZkNywKLQkweDE1ZjYwMzliLCAweDAzZmI4ZGQ3LCAweDY3M2YwZmRlLCAweDlkOTllZjY0LCAweGVjNjkzNWNkLCAweDg1NmM4N2Q4LAotCTB4NDk1ZjAwNzEsIDB4ZDA0NGRhMjksIDB4ZWVjNzEzY2IsIDB4N2NlYjBjM2MsIDB4NTg0M2ViNWYsIDB4ZDAwNDdiZmYsCi0JMHhmZWMyZTRmZiwgMHg2OWRmM2M0NCwgMHhiZjAwZTVkZSwgMHhkZjdlNTljZCwgMHg1YjczNWNmYywgMHhhZDM0NWRlMiwKLQkweDA3MDdmOGRlLCAweGY5ZDJhN2VjLCAweGRiMTljZWZjLCAweGFhOWI3ZGYxLCAweGNiYmUyMjJkLCAweGJjNGRmYjQwLAotCTB4Y2RjN2ZjMWQsIDB4NjExZTczYjMsIDB4ZDdhOTQ0ZGQsIDB4ZDVkZmMyM2YsIDB4NDliZmVjNTAsIDB4YWY5ZmIyNTEsCi0JMHgxMmRmOGE4NywgMHhiYWI4ZTFkZiwgMHgxYzU4ZjQ1OSwgMHg3M2MwZWRiZCwgMHgyYzllZDI3YiwgMHhjOTEwN2EwNiwKLQkweDFhM2UxYzNkLCAweDBiYjQ0ZWM5LCAweGZkMGRmOWY5LCAweDdlZjc4NGVkLCAweDliY2NmM2I3LCAweDdjZGQ5ZmNkLAotCTB4NzM5MTMyMTUsIDB4ZDgwMmU1YzksIDB4Y2MwMWRlNDcsIDB4YjBmNGM3MzksIDB4ZmQ1ZGJmNjIsIDB4YTkzZmQ2OTUsCi0JMHg1YmYzMWZiNywgMHgyMTQ5MmY0NywgMHhkZWY2MGY4OCwgMHgxZmM5Yjc3YiwgMHhlYzJlY2VjOSwgMHg5ZWQxMTI5ZSwKLQkweGM0NzFlNDI0LCAweGY0OTZmNjU3LCAweDRjZmVmMGE5LCAweDI3MDZkYmY2LCAweGNlYzgzYmY0LCAweGY5YjZiMWY4LAotCTB4YTUxZjdjMzMsIDB4ODU2ZjA0ODYsIDB4ZDE2NjlhZjIsIDB4YTZkZjI0MTksIDB4MWVmYzk3OWYsIDB4NTc1NDVlZmUsCi0JMHhiZTAyZTRhYiwgMHgxNWRkNmFlZCwgMHgxNmY5MDU5NSwgMHhiNTVkZmQxMSwgMHgwZTVlMjZmYiwgMHgyYWQ5ZDY3YywKLQkweGI1MjEzYmUxLCAweDgwNzEzZWRiLCAweGY3ZDY1MDFlLCAweDdlZjY1NmNlLCAweDMxZWI1NzQ4LCAweGVkYzBhZWZjLAotCTB4MWNiZjg5NmMsIDB4MDY4ZDlkZDYsIDB4YjlkY2JmYjYsIDB4ZDA1NjZmZmIsIDB4ZTg1ZTZmMGIsIDB4YWQ3ZGM3ODksCi0JMHhiNmY3M2ViMiwgMHgwNTJmMTE3ZiwgMHhiZmU0MzE3NiwgMHg0NGJmZGI1NSwgMHhlMjAwNzg5YywgMHgyNDYzMGE5ZiwKLQkweDNiNjEwYTIyLCAweGZjZmFkN2I1LCAweDI3NjI1OTIxLCAweDdjZTlkN2JkLCAweDA4YzVmNzU4LCAweDM3YzczNWViLAotCTB4ZmMwOGNmZWQsIDB4ZWZiZjVmYWUsIDB4NmE3YjczYjUsIDB4Zjc4NmM5MDgsIDB4YzQyZTVhZjUsIDB4Y2RiZGUyNTcsCi0JMHgxMTczYWI1NiwgMHg1ZDk4NWZmYSwgMHhjY2YzYjVkMiwgMHhmYmUxNTMxMywgMHhkYmRkOTE1ZSwgMHhkZjIyMjBiZiwKLQkweDcyYmRiNWJmLCAweDhkNGQ4NzU4LCAweGQ3YTQwNmY3LCAweDc3Y2U4MzE3LCAweDdmZWI0MWJlLCAweGY5OWEyYmIxLAotCTB4Y2JlZThkYTMsIDB4YzIwNmY3ZDUsIDB4NWYxY2ZkZjUsIDB4YWU3NjY0YzEsIDB4YmJjMzI3MjUsIDB4ZWVkYmRmMzgsCi0JMHgyZWY1ZWVlYywgMHhiNDc2MTNkNSwgMHg4MGE3YmIzYiwgMHhlYWIxMWRmYSwgMHhjNWY0MDk4OCwgMHg1M2M5N2IyMCwKLQkweGFjMDQwZjRjLCAweGU0OTkxNzgwLCAweDZmZGExMGE3LCAweDA3YzkzNDc5LCAweDI3YWVlYWZlLCAweGRiYTM4ODRlLAotCTB4MDA2MGM3YjIsIDB4OWI1ZDhjYmEsIDB4ZWIyZWYxOGEsIDB4ZmNkZmI5ZjksIDB4NTUyOWEzNDAsIDB4ZjNlNjVmYTUsCi0JMHg5MjUzYTM3MywgMHhmNTRlMzQzYywgMHhmNGMxZDkzZCwgMHgxNTVkYTljMCwgMHhmOTNkNDJiZiwgMHgxZTE5MzM0NywKLQkweDFiZmM1ZDYxLCAweDRkOWI2N2Q3LCAweDUwMGRkNGYyLCAweGY3MDFhOGVmLCAweGJmNzczYjFiLCAweDY5ZGUxYmJlLAotCTB4MzVkODdmOWIsIDB4MDM5OWQ2MWEsIDB4NWViNDBmMjAsIDB4MGRmNWRlY2IsIDB4ZjJkYjJmMTAsIDB4NmFlZjQxMjEsCi0JMHg2OGE5NTM0ZSwgMHg0MWJlZmRhMCwgMHg3NjBmY2M1YywgMHhlMGZiODBjMCwgMHg3ODkwZmY5MCwgMHhmYjllNjFlMiwKLQkweGY5YmY2Y2VkLCAweGU2ODMxZWM2LCAweGZlMGRlOTljLCAweDc2NWJlODNlLCAweDMzYjdjMTg5LCAweDNkYTZkNDNmLAotCTB4YjdhMGYxZjksIDB4NmZiZGQ5MDcsIDB4OGY2YjFlMDAsIDB4NWMzODM0NzcsIDB4NjI5OWJmNjEsIDB4YjAzODRkMjcsCi0JMHhmYTI4ZWE2OSwgMHgwZDY3MDljZiwgMHhlYmI3MjA0ZSwgMHhlNjExMWFjMCwgMHg0ODQ1M2FlYiwgMHhkOTdhNDBhYywKLQkweDJlZGUxNDRkLCAweGNlMzdiYzM1LCAweDFjNzQ3ODMyLCAweDJhOWM4MTZmLCAweGVmMmJhN2Y4LCAweGZmMzQ5OWEzLAotCTB4MGUzMWJiNDYsIDB4ZmMxNGE0ZTIsIDB4ZmE1MGYzMmIsIDB4Njc4ODA1NzcsIDB4Yzk0NTBkYjUsIDB4ZmM1YmU5YjMsCi0JMHhlNjljNGFiNywgMHhkZTUxMjcxOCwgMHg5Y2JlNDcyNywgMHhjZmJjZjc2YSwgMHgzYjQ2NDFmOCwgMHg2OGFlZDRmNiwKLQkweGYzMzY0N2I0LCAweDk1MjQ4Yzc1LCAweDI5ZmMwMzBlLCAweGE3ODJmYTc0LCAweGVhZmE3OGNhLCAweDA3NWYzY2ZmLAotCTB4ZjJiYmY0OTQsIDB4MjVjOTdhZjUsIDB4NzdmMGRmMjMsIDB4MzA3MjVjZmEsIDB4YjFlMjFkMmEsIDB4ZWZmMWQyNWEsCi0JMHg1NWUyYThhMSwgMHhhOTNlMDNjZiwgMHg4N2Y4ZDYwMiwgMHgwNjBjM2E1YSwgMHhiMzU1NGZiOCwgMHg2N2M1ODg0ZCwKLQkweGQ3NjlmYTQyLCAweDE4Y2NmODg2LCAweDM5NmJmZTQwLCAweDJiOGU1MDRjLCAweGY5OTRmZGQ2LCAweGUxYmVhOGVmLAotCTB4NzllMTU3ZWYsIDB4M2YwZmM4MzQsIDB4ZDAyNDFlOTcsIDB4ZWFlYjQyNzQsIDB4ZGY4ODI5YzUsIDB4MmFlNDAzYTAsCi0JMHgzNzJhMjc4YywgMHg5YTM1ZDY5MCwgMHhkZmU3NWY4MCwgMHhmYzc5ZDJjMywgMHg0YWZlNzc3YywgMHhkOTY3Y2EyZiwKLQkweDY3YTcxNjJhLCAweDM4ZTJhNDc1LCAweDI1N2U3MWNlLCAweDg4NjRlODg2LCAweDFiYjA2OGUzLCAweDRmYzlmMTM0LAotCTB4ZGQzZGJlNzAsIDB4ZjQxYjY0ZmMsIDB4ZDYyYmY5NGIsIDB4NmNhZmNiNDEsIDB4MTgxOWZjNzksIDB4YTdhZmMyYWUsCi0JMHg1Mzg0MjQ5YiwgMHhmZjNkYWQxZSwgMHg3ODMwNzQ0ZSwgMHg3ZTMwMGU1YiwgMHhlNTI0ZDA5ZiwgMHgxMzQ5ZmJjMywKLQkweDdmMDRlMjY0LCAweDZiNGQxYmYwLCAweDZmZGZkMDQ1LCAweDMyYTczZjAwLCAweGZkNzU4NzM5LCAweGFjNDdhZWQ0LAotCTB4ZWVmNTgzM2YsIDB4ZGY4MDgxODgsIDB4OTQ4OWIzNzksIDB4YzVjOTU0NmYsIDB4NmFhZmQ1Y2UsIDB4NWQ2MmI3ZTQsCi0JMHg2ZmY0NTRmZCwgMHhhMDA5YzQ3NywgMHg1NWI5MTVlNywgMHhlNGQ5YmVmMCwgMHhmZmU1MDZiZSwgMHg0ZmZjOWQ3YSwKLQkweDQxOGJlZDY2LCAweDI3YmQ2ODU4LCAweDU5M2ZmY2I5LCAweDdlOWZlNTQ0LCAweDE1OGE2ZDhhLCAweDUzNjZjZTAwLAotCTB4MjZiNGY3ZTQsIDB4ZmYxZmJlMzksIDB4ZjFlYWY0ODUsIDB4OTI3NTdhNWUsIDB4MWRlN2VkODMsIDB4OWFmZmI0ZTksCi0JMHgzZjcwN2FlYiwgMHhlNzFmMWExZiwgMHgyYjI3Mjc5YiwgMHgwMDJhOTM3YywgMHgwNTI5MWJmZSwgMHgxNDVmMDAzMywKLQkweDY4Y2ZjMGFmLCAweGNkYmU4MmI3LCAweDgyNzdjMzRiLCAweDIyZTNmMzdhLCAweDIzNGRkY2U1LCAweGE2YmQ2MWI3LAotCTB4MDZmN2FmYzgsIDB4ZTRjZTRmMTgsIDB4NWY2MGM1YmEsIDB4YzhjYjE3YzcsIDB4ZWYwNWE3YTcsIDB4YWViYTM4YjAsCi0JMHg4ZTc5MDY5ZCwgMHgzOTQ2MTdhMCwgMHg0MmY5MWU5OCwgMHgxMWRlNmFmMiwgMHg5MjBlM2RlZiwgMHg0ZTVkN2MwYywKLQkweDJmMzA2YTc3LCAweDAyNzA0YWIyLCAweGQ3NzI5NDdkLCAweGUwOWZiZTJhLCAweDRhZWY5NGYwLCAweGZkZTM3YmZlLAotCTB4YmRmY2JkMmYsIDB4Yjg3MThlNTUsIDB4NjQyMDk5OWUsIDB4YWQ5Zjg0NzMsIDB4NDdjODQ0NjcsIDB4NmI4NjIwYjksCi0JMHhlNmRlNDE5MywgMHgyN2VjNzVkMywgMHhiNGVjNzVhYSwgMHhhYWZjODhkNCwgMHhjZTNlZTFlMCwgMHhiMmM0NWZlZiwKLQkweGZjZTcwZjc5LCAweDNmNmMwZDMxLCAweDE3M2YzN2M0LCAweDgxNDY4YzEzLCAweDMwMjhiNWM5LCAweGZlMDExNzc5LAotCTB4NWU1NzVkZTksIDB4NWQ3ZjdjODMsIDB4ZGNhZmJlNjQsIDB4MzNmOTFhYjAsIDB4Zjc4OWM4YjYsIDB4YmEzNDllNDEsCi0JMHg5MTk5YjEyZCwgMHhkMzFmYjFmNCwgMHg4MTdmNmI5ZCwgMHg2M2UwMmJmYiwgMHhlNGJlZmI5MCwgMHg4MGU0MWNhMCwKLQkweDNmN2ZlMDQ0LCAweGZkMTU3ZmU1LCAweDdjYTAzZTE0LCAweGE1NDM4NGYxLCAweGExN2NmNDI3LCAweDc4MjlkZjljLAotCTB4ZmYzYmFjZDksIDB4ZjVjMWM4ZmIsIDB4N2Q1ZDRmM2MsIDB4ZjMyOGExYzQsIDB4M2U3NGRlZjksIDB4YmZjZThiZGIsCi0JMHhjYjBlNzQ2MSwgMHhkMTViZDAxNywgMHg5YzgxOGYxMywgMHhjZTViZWI4ZCwgMHhhYzRlMzE2YywgMHg2Y2QxZjBkNywKLQkweGU0NjhmYjhjLCAweGRlMDE0MGU3LCAweGU3ZGQ2ODVmLCAweDM5ZDdkOWZjLCAweGY3YWIzMmNlLCAweGUwZmUzNTc1LAotCTB4MTk5NWQxYmMsIDB4NmU0MjhmZTYsIDB4NmI1ODJlZDcsIDB4OGRmNDczYzYsIDB4YmNiM2M5ODQsIDB4YmVhZmRhMzMsCi0JMHg1MjM0ZTlhNywgMHhmYWEyOTQwMywgMHgwOWU3ZDAxZCwgMHgyMTA3MGFiOCwgMHgyMjY4NWFlZiwgMHhmODNmNzQxOSwKLQkweDRlZTk2YTQ1LCAweDcxZjlhNzg4LCAweDhhM2M1Y2JiLCAweDQ5YTM2M2NlLCAweGVlMWQ3NjllLCAweDAwZDdkYzBiLAotCTB4MGQ4YTZiZmMsIDB4ODhhZjg4NGUsIDB4ZjAwNTM4ZjUsIDB4MDA0YmEwNDMsIDB4ZWIyZjcwZTQsIDB4ZmJiYTRjNjcsCi0JMHhiYWFmZGM3MiwgMHgxZjQwNjNkYywgMHg1MmY0ZTAxYywgMHhhMWUwYWJlOCwgMHgyZmFlZjVhZiwgMHg5ODYyZGFiYSwKLQkweDcyZjAyNDVjLCAweDk5NzkxZWJkLCAweDRmMDM0ZGNiLCAweDY0NDdhZTJmLCAweDQxYzllNDExLCAweDE4NDQ4YmJjLAotCTB4MDdhNjQ0ZmYsIDB4MjI2NDdhNDMsIDB4Y2ZiZTczYzEsIDB4ZjNlNDdhNzUsIDB4N2M4ZjVlMWYsIDB4YjkyM2QxYWUsCi0JMHgwOGY1MTExZCwgMHhmZjk0NDVmZCwgMHg2OGI5YTY4NCwgMHg5MWMzOTJjZiwgMHg4NjI5NTllZCwgMHhiMDA5YzdhZCwKLQkweDA5N2FkMjhlLCAweGExZmJmYjMyLCAweDUyZGYzODA3LCAweGM0MzhjNDhlLCAweGM2MzMyNmM2LCAweGM4N2EyYjVkLAotCTB4YzNlNDhkMzEsIDB4YzA3NTNiZGYsIDB4YTZiNTBiYmEsIDB4ODI0ZjBmNzksIDB4OTMyNGQ3ZjMsIDB4NGY4M2NlMGIsCi0JMHhmNzQ4ZGQ0YiwgMHhkY2MzNzRkMywgMHgyMjUxZmM4OCwgMHhlODIzYmQwMCwgMHgwYjdlMDIyMywgMHg5OTgzNGZmOSwKLQkweDQ1NmM1ZGRmLCAweDQ4NTA1OTM5LCAweGI5ZGQxZDcwLCAweDU1ZjIzYzc2LCAweDAwOWE3MTc5LCAweDJlYjE1YjdjLAotCTB4YjhmMjgwNTYsIDB4ZTgwMzRlYzksIDB4ZTMxZTY1MmIsIDB4YzY0ODFhMTcsIDB4OTQ4Mzk0MTgsIDB4OGMxYzk1MTgsCi0JMHhjMDQ0ZWI5NywgMHg2Zjc4YjBkNywgMHhjODRiMTQ5MiwgMHhmZjRmMzE2NSwgMHhiOWI3ZWQ1OCwgMHg3ZWQ1ZTY4NCwKLQkweGY2NWY5YTFiLCAweDk3MzZmYzVkLCAweDY1YzlmY2ZkLCAweDczYzliN2UwLCAweDhjYzY0Njc4LCAweDY1Y2RmZjQzLAotCTB4YWMwY2U2OTAsIDB4NmY0YTg5MTMsIDB4ZmI4ZWNjNWQsIDB4Y2I1MmZjYmUsIDB4NDBlNDQzZmQsIDB4YWNlYzdmMmYsCi0JMHhjN2Y0MmU3NSwgMHhkNDdjMDI0ZSwgMHgwNjc4OWYyNCwgMHgxNTNiZTFjMCwgMHgzNjZlZWQxMSwgMHgyZjVjMDE4ZSwKLQkweGQyMDkwZjkwLCAweDlkNDk0MDYzLCAweDQ1MTJmZTA4LCAweDg3MDM1Y2VmLCAweDFlZDQyOGFlLCAweDE0MzNjZTAxLAotCTB4ODViZDAzNzksIDB4Y2UzYzZlZTcsIDB4NzY1NWZjMDEsIDB4OTFmYmQ3ZjQsIDB4OTMxZjIwOGYsIDB4MmI0N2Q2MWQsCi0JMHhkZjExMGQ4YSwgMHhjNjMzYmUxMSwgMHg2N2VhODNmNiwgMHhkNmY1ZmFkMiwgMHhmOGYwZTU5ZiwgMHhlOWU1MTE1ZiwKLQkweDNkOTUxOGNlLCAweGQxZjE2NGY0LCAweGMxMGU3NjQ0LCAweDliYmJlNWRlLCAweDQ1YWJmMWY3LCAweDE5MmVmN2VlLAotCTB4NjE1ZjdlMTAsIDB4NDMyNGQ5YjQsIDB4MTBmMTI5M2MsIDB4NGYxNTUzOTcsIDB4NDEwYWI0MmMsIDB4ZmVhN2M0M2IsCi0JMHg3NDZlNzYwZCwgMHgwMzM3ZmRiZiwgMHhiN2ZhYmZhNiwgMHhiMDU0YTI5MiwgMHg2ZTBjNWJlNywgMHg3YzQxMTk2YSwKLQkweDdiODNjYTA1LCAweDI2N2JjMTE4LCAweDYxNmVmZTAxLCAweDIzY2Q5YjVlLCAweDg4NDNiZjgxLCAweDNkYTBmN2UyLAotCTB4ZGM4ZGYzZGEsIDB4NjgxYmExZWUsIDB4MzM1NmUyZjksIDB4YWViZGNkZmUsIDB4MWVlZmU1M2MsIDB4YjIxZWYxYjgsCi0JMHg3ZGFjZGY4MiwgMHhiOGM0OGU0ZiwgMHgxYmEzNjM0ZCwgMHg4NThkNmNlNCwgMHg1MTYzNWZjMSwgMHg2MDYyYmJlYSwKLQkweDFjZWJlZWJkLCAweDY0YzJlMjdkLCAweGZlMjlmN2Y0LCAweDQxZGQ4OWM1LCAweGQ2OTJmMDExLCAweGUwYjAzMmVkLAotCTB4YjE4ZmQ2MzUsIDB4OTU3Y2UwOWIsIDB4YzcwMGY1ZjMsIDB4OWIzZGU2ZmIsIDB4NzNjNzU4NDQsIDB4ODYyZTM3MjYsCi0JMHg3NjRiY2VmZCwgMHhmM2MwMGFlZiwgMHg3NmI1MTM5NSwgMHgwZWExNThkZSwgMHhiOTI0NmVmZiwgMHg0OTNlZTA4NiwKLQkweDBlZjg4ZjkxLCAweDlhNGMwM2IyLCAweDFlMWRjM2Q4LCAweDllNTczZDUwLCAweGZkODBlY2YyLCAweDExMDk0YzY0LAotCTB4YWUyYTllMDAsIDB4NWYyMDE3ZTcsIDB4Yjg0NzgwNjQsIDB4YmRmYzAwNmUsIDB4MDhiN2ZlNGUsIDB4N2JjZDljMzksCi0JMHhmNzkwMDVmMiwgMHgwNTkzZWQwMSwgMHhmZTZmNjY1NywgMHhlZWZiMDk1ZSwgMHgwNGZlMmNiMSwgMHgwN2VjYWFlOCwKLQkweGIyZjZmZDg3LCAweDUzNGZlMGM5LCAweDYxOGQ2ZmVhLCAweGFmMmFmYzdhLCAweGM0NWMwMGI3LCAweDQyMmYzZTc0LAotCTB4ZmJhNjEzYmYsIDB4YTkyOWUwZGIsIDB4OWI3MmU1ZjEsIDB4Y2Y5YWE1YzksIDB4NTJmMDgyN2MsIDB4Yzc5YzY0M2EsCi0JMHgzY2RlYzNhMCwgMHg2MmQ5Zjc0OCwgMHg0ZjJiZGZiMSwgMHg2NTZlMzEwNSwgMHg3MGMxMWQ2MCwgMHgwN2VkMjE5ZSwKLQkweDUyMWE3ZWQwLCAweDFkMDAyZWQ3LCAweDBiNzllZjM3LCAweDdkYjgzYmM3LCAweDVjYjk0YjI3LCAweDgwZjZlMjZkLAotCTB4MzY3ZGFlMzIsIDB4ZTNlZTVlYjYsIDB4ZTcwZGQxZTcsIDB4N2FmOTdhZDgsIDB4OTJlMzE3OGMsIDB4ZTQzNDc5OTQsCi0JMHgyOGVhOTM3OSwgMHg2ZjEwOTVmYywgMHg3OGVmYjYzMywgMHg0MjYzYjc5YiwgMHgwMTZmMzZmMSwgMHg3N2E3NmFiZCwKLQkweGQzZGUwNmVjLCAweGY3MTIwZGZiLCAweDI0N2E0NTFlLCAweGYxZGI2NDJlLCAweDA4MTc3Yjk1LCAweGNlNTYyN2EwLAotCTB4NTAzN2VjOGMsIDB4ZWU0YWM1ZjQsIDB4YjVjNTU1NzcsIDB4NWFhMzE3YmMsIDB4YzY5NmE3MmYsIDB4ZmE1NGQzNTksCi0JMHg0Y2Y3Njk0OCwgMHgzMzY1YWUzOCwgMHg1Mzc5NmI4ZiwgMHg1MmQ0NmVkMywgMHgwY2QzZjAwYiwgMHg4YzEwZTc5YiwKLQkweDNmN2JmOTViLCAweGQxZGZmOWViLCAweDBhYjFmNjUxLCAweDBjOWQ1MmJlLCAweGRjYzdhZjVmLCAweDhkY2UwZmI4LAotCTB4Y2E0ZTRmMDAsIDB4OTEyZGViYzcsIDB4OWMxM2MzZTMsIDB4MzA2ZjZlMDYsIDB4OGNlZDIxN2UsIDB4NmExZTYwNWYsCi0JMHhiNzAyZWJiYiwgMHg3OGYyYWUzYiwgMHg0ZjhjOGMwYiwgMHhjOTNlNDUzZSwgMHhkZjAxYjdmNSwgMHhkYjkyMmY4ZSwKLQkweDEwODdmZjgwLCAweDhjNDUyN2NlLCAweDFlZmNmNDRmLCAweDdjZTM4Y2VkLCAweGVmMDA0ZGQyLCAweGIxYmRlMTYzLAotCTB4M2ZmMWZhMDgsIDB4MDY3Y2Q4NjMsIDB4ZmYyM2U3YjQsIDB4MGFmODc5NTAsIDB4M2E5NDliZDcsIDB4NDkyM2MyNTEsCi0JMHhjMzhjNTRlNywgMHg3ZTk5NTU4NCwgMHg2OWViOTMxZiwgMHg3YTczN2UwMywgMHhkMzllNTA0YSwgMHgwNzY2NGVhZCwKLQkweGEwZmUzMmE1LCAweDQyNjcwNWVkLCAweDJmZmU5ZTU4LCAweDRmODQyY2U3LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4YjNkYWU4YjksIDB4NjQ5MzI2NjcsIDB4NmYyNjRjOTIsCi0JMHg4MDg0OWFmMiwgMHgzYzg3MDEwOCwgMHg0ZTNkMjg3OCwgMHgwZjc4NjAxZSwgMHgwMjQ4MzUwOCwgMHg0ODA0MmJjMywKLQkweGQyZDA0MTMyLCAweDIwMTk2ZjFlLCAweDgzNTQ4MDg2LCAweGE5NmExZWE1LCAweDVhZjExZTBlLCAweGQ1MjgzNjhhLAotCTB4ZjA5ZDgzNjAsIDB4NDFkMDU4MmEsIDB4Mzk2YjQyZDEsIDB4MGE4YTIzNDEsIDB4ZjQxZWEwMDksIDB4ZmZmZGUzZDAsCi0JMHhjY2NkYWQ3ZiwgMHgyMjg4OTlkZSwgMHhiOWVlZmJmNiwgMHg2MmVjZmQzNywgMHhkYWY2YmRlZCwgMHg4ZmRmZmFmZiwKLQkweGZiMGNkN2I1LCAweDMzZDZjNjBmLCAweDJhMWQ3NmM2LCAweDhjYjk2Yzk2LCAweDc5NGJmYmM1LCAweGM1YTM5OGNiLAotCTB4OGNmM2Q4Y2MsIDB4ZmY0MGI1OTUsIDB4OWRiYmZjMmIsIDB4NzQ2M2NmYjEsIDB4MTYzMDI1OGMsIDB4MmIxODkxNmIsCi0JMHhhNDZmYWM2NCwgMHg1OThkZmE4NSwgMHgxODdhZTRhZSwgMHgxNWQyMzZiZiwgMHg3OWMwNDk2ZCwgMHgyNjA5MGU3NCwKLQkweGVjYzI3ZTE5LCAweGY4NzQzMDY1LCAweDk5OTk3YWYyLCAweGM0YmY1ZTcxLCAweGQ1YWNjNjY0LCAweGJjMjMyMjk2LAotCTB4MmVjNmI1MzcsIDB4N2VmZTYwYjksIDB4MGI3OGNlOTEsIDB4MGIxNzAzY2QsIDB4NzlkMjJkYTAsIDB4MmQ3M2MwZDcsCi0JMHg2NmEzOGVkMSwgMHg2NzkyY2Y3OCwgMHgyNjlkMmRjMiwgMHhjMTVmN2Y0NiwgMHhiMTJkYjU3ZiwgMHgzNWJiYmVhYSwKLQkweDIwMzlkMmM1LCAweGZmODI1ZmQwLCAweDBlZmY4MTQ4LCAweGM2MWIxMzMxLCAweGM1YmYwZDU4LCAweDJjYWVjODk2LAotCTB4NmI1N2NjMGIsIDB4MGU2ODc4ZWEsIDB4ZjM3ZWViZjQsIDB4OTJjMTkxYjksIDB4ODA1ZWI4NmMsIDB4Nzk0M2Y5ZTMsCi0JMHg4MWNkNzM5MSwgMHhkNjJhZGVmNSwgMHg1NWMzOWI3OSwgMHhjZmYxODdhMiwgMHhjNjZlYjk0NiwgMHhmMDhlNDdlNywKLQkweGExZTE5M2VlLCAweDdkOWU2NWUxLCAweGE0MGI2ODdhLCAweGIwNTE3ZGZhLCAweGQ5OTYzNjVlLCAweGFlM2Y0MWI3LAotCTB4NDM0N2I1ODMsIDB4ODc0NGY2MzcsIDB4NDdmYTFhMjMsIDB4YTc4NGIxY2QsIDB4YjQ3NDNmNWIsIDB4NjJmYWMyZTcsCi0JMHhlN2MyNGM5YywgMHgzOGY5NWYwMSwgMHhlNTc3OGIxZiwgMHhkZTIzMDczYiwgMHhlMDBjY2I5NiwgMHg2MWU5MDE3OCwKLQkweDhlM2QzNmJlLCAweGRmMDQ3NTlhLCAweDUzODczMzUxLCAweDQ4ODRjM2ExLCAweDVkMGIyOGM3LCAweDRmNWVmNDY3LAotCTB4ZDc4MDFiMzEsIDB4OTVkMDRjMzcsIDB4NTc5ZTgzNzksIDB4NGNjNWE3NWEsIDB4Y2YxYmFlZTMsIDB4MzA3ZDMwOWYsCi0JMHg3ZmRiNTk5ZSwgMHhlODEzZjhiZCwgMHgzMmRmZjFiYiwgMHhmMDI5ZGRlMSwgMHhkNjE3ZGQxZSwgMHhlZjA5ZjNmZCwKLQkweDk1ZTBiYTI2LCAweDYxZjc1MzNhLCAweGRiNTFmMDA5LCAweDU4NjRkYjI2LCAweDk2NjRhMGMyLCAweGQ4YzcxOWRiLAotCTB4MGVhZGZiOWEsIDB4NWEyNzgzZTQsIDB4OGMxODdiMjQsIDB4YjM2NjBlNjcsIDB4MjU2NDMyMjQsIDB4ZGZmOWQ2MjIsCi0JMHhiNzYxMGNjNywgMHhhYzE3MGI0MCwgMHg2MjkzY2UzMCwgMHhkZTQzNmVmNCwgMHg0MzMzN2ZkOSwgMHgwMmIxZGMzOCwKLQkweGMzZTgwNjhlLCAweDA1MTY1ZDczLCAweDBkZjUwNzMwLCAweDQ1OWZlYWVjLCAweGY4NjFmMTgyLCAweDZhNGI5ODJmLAotCTB4ODA5NzZmNjksIDB4MzA0NjZiNzAsIDB4ZGVlMDAxOTcsIDB4M2YxMzI2ZDcsIDB4ZTExOGQxM2UsIDB4N2ZmOTgzMGQsCi0JMHhlMWUyZTNiYiwgMHhiOWNmZDA5OSwgMHg4MmNiODc1ZiwgMHgzMzk2MDliZiwgMHg0M2E4Zjg5MSwgMHgzOTVhMGFmYSwKLQkweDBmNDAzNGRhLCAweDg0NzJlZGY3LCAweDJkZjE4NjVkLCAweDU4NDNkMTExLCAweGZiNDU2MzBjLCAweDlhZDlmOTg4LAotCTB4YmMwZjMwN2UsIDB4MDQ3YjRkNjcsIDB4M2Y0ZDZmYWQsIDB4ZTIyYzhmOTAsIDB4ZmY5MTdiODMsIDB4NTkxOTQ3ZjcsCi0JMHgwNGJmNWMwYSwgMHg4NmUzODM3MiwgMHg0NjM3OGViMywgMHg3NGU4MDU2NSwgMHg1OWQzZjVhOSwgMHhlZWZkNjE3YiwKLQkweGQ3NmYzZTQ4LCAweDkxZmQyYmRlLCAweGUzZmI5NTdmLCAweDk3YjVjYzU2LCAweDJjNTYzM2U2LCAweGYzOGE3ZWJiLAotCTB4MWQ1ZmQ3MjksIDB4ZTIzNDVlZjAsIDB4ODIzNGIxOWIsIDB4MDcyN2U4OTcsIDB4Mzc4YWJiZTAsIDB4MWNhZmM3MGIsCi0JMHg3NDc1YTdhNSwgMHhhZTNiMDhiMSwgMHg2MGU4YzViYiwgMHgyOWNmMjc0OCwgMHg1ZTBhZGZjZSwgMHg3NDZmMDRlYiwKLQkweDcwOWUxNWI1LCAweDM4OWVmYWMxLCAweGU3Yzc2NjkxLCAweDg1MmY1YWJiLCAweGIzN2RlMGViLCAweDIzMGY1YzYzLAotCTB4ZWVmNGU1ZGQsIDB4ZTIyZTY3NjgsIDB4MWRjZGQyZjMsIDB4ZTc1ZWI4YjksIDB4ZDJlZjg0NDYsIDB4YWVhY2Y3OTEsCi0JMHhkZjVhZWJkYywgMHg3ZDY0ZGY2MywgMHg0OWI5YmQ2ZSwgMHgzZmM5ZTk4YSwgMHhkYTkwM2U1YSwgMHg4NjkwYmZkYSwKLQkweGQ0MzA5YzkwLCAweGU2MGM5ZTViLCAweDZlZWIwMzVkLCAweDQ5YjQzYzFjLCAweDYzNGY0MjQ2LCAweGM2NGY5NDM2LAotCTB4MDY2NzJjMmEsIDB4MzEzZGU4MDUsIDB4MTJkZGI5YzYsIDB4MTg4ZTVmMjQsIDB4MmY1YzBlZTcsIDB4OGYzNTI3YmUsCi0JMHhkZTFjZjlkNiwgMHg1ZTc0NzIxZiwgMHg1ZDc3NDFiZSwgMHhmNDI5N2NlYiwgMHhhZjQ0N2QzYSwgMHg1YTllYjE1YSwKLQkweDAzMjdkOTkzLCAweGUxOTc2Y2ZjLCAweDNlNDUwZTkzLCAweDBiYzI3YmIzLCAweGYwOGJkOGY0LCAweDI3ZWQ4YTc5LAotCTB4YmZjZjQ4NWMsIDB4MTA2YmVkOWEsIDB4YzViZjdhMWYsIDB4ZWZmMDQ1MTksIDB4MTFiMWY3YzcsIDB4YmQ3MTkyNzMsCi0JMHhmZjFkMjM2YiwgMHhmNmZlODY2NSwgMHg4M2YzOGM1NSwgMHgxMjdmNjExNCwgMHhiZjczYjcxNiwgMHhlNGY1MDIzNSwKLQkweDlmZDcxOGM0LCAweGJhODFiZTcxLCAweGQwOWNiMzhiLCAweDc1M2JmMDJmLCAweDc4MWRiOTczLCAweDkyZmJhYzRkLAotCTB4OTdhOGUwOWUsIDB4NThlYmZlNzEsIDB4YWY0MjVmZmYsIDB4ZmUxZDA3YmYsIDB4MDUwNzRjMTYsIDB4N2QwNGEzM2YsCi0JMHg1MDdlMjE0NywgMHgzZmViNzcyMSwgMHhmMDA1MzBlOSwgMHg0ZjUyODEyMywgMHg4ZjljZjZiNSwgMHg4NDBjOGViMSwKLQkweDA3Zjc3ZGI3LCAweGJlNjAzYmZkLCAweDk4M2U1N2JhLCAweGY3NWJmMjg1LCAweGI3MTExODcyLCAweDYzOWJlNWY0LAotCTB4MTdjZjhmOTAsIDB4NzMxNmYyYjEsIDB4YzlmYTdkNGYsIDB4M2ViYjdhY2EsIDB4NGI0ZWIxODcsIDB4MWFkNWU5MzYsCi0JMHhiZWIyMzdlNiwgMHhkYTk3NGZhOCwgMHgxNGZhNDFmNSwgMHg0N2ZiYTYyMCwgMHgzODA5ZmUwYywgMHg5OTQyOTFmZiwKLQkweGJiYmUwMmFkLCAweGM0OWUxZjY0LCAweGE1NjllODQyLCAweGIzMjU2ZDdkLCAweDdmZDgwN2NmLCAweGYwMGU3YThlLAotCTB4NDE3NzY0M2YsIDB4Y2RhNWUxMGMsIDB4M2I1OGZhNGEsIDB4NmFjYWM4ZmUsIDB4ZWY0ZTY5N2IsIDB4MWExOTFkZjMsCi0JMHhiYjQ1ZWU1ZSwgMHhiMDY3MzEyMSwgMHhlNTg4NDk3ZCwgMHhiNDU3MjU3NiwgMHgwODFkMjhhMCwgMHhhMzE3YjllNywKLQkweDc0YjgxZWJjLCAweDY4YWRlZjJlLCAweGI3M2E3ODA2LCAweDBmN2NjZGViLCAweGU2MzljYmYwLCAweDk0MDdmNjVmLAotCTB4NmNjZDRmOWYsIDB4YTFjNzZhMWIsIDB4OGFhZmU1NmYsIDB4MGZkYmM4MGEsIDB4ZmZiNWYwNDYsIDB4ZDFhM2E1ZTAsCi0JMHg2MTNmMTgzNiwgMHg0Zjc4YmVlNywgMHhjMDdlZmUxMCwgMHhlNTVlOWZmNCwgMHgyZjdjMmNkZiwgMHg3ZDMwZmMyMywKLQkweDA3YTQ3ZjQ3LCAweDQ0ZDljM2ZiLCAweDc2MTNiNDFiLCAweDdjZTc4ODFmLCAweDNhNDNhODkwLCAweGViN2ExNzJmLAotCTB4NjQ2OTc4NzcsIDB4MmIwOWJlNjAsIDB4OTQ4Zjg4ZWEsIDB4MTM2NWVkN2UsIDB4ZjUwNWM2ZjMsIDB4OWEyMzdlZjUsCi0JMHg2NmNiZGFiZSwgMHg1ZjcxODVlNiwgMHg0OWUyYTI1OCwgMHg3ZDYxZjQ3ZiwgMHg1MzdjN2Y1MCwgMHgyYmFmNjliYywKLQkweGY0MzIzYjc4LCAweGVmZGEwNjZjLCAweGY5YTFlMWYzLCAweDc3MTg4NDY0LCAweDA5MzIzZWM5LCAweDQ2MDlhM2ZkLAotCTB4YzQyNThlNWYsIDB4MzRiY2M2MzgsIDB4NTdhZWJiNGUsIDB4YTVlY2JhNTcsIDB4MWJlMWRlZmEsIDB4OTZhZTY0NmYsCi0JMHhmNDM0N2MxMCwgMHg5OWMzN2JlYSwgMHhkOTdhZTQwNywgMHhhMWQ5MDM1NiwgMHgzMmZlNTdhMywgMHhmN2U4MWYyZCwKLQkweDY1ODMxNmMxLCAweGZhYjNlMDM1LCAweDdlZDJmYmQ3LCAweDg3YWJmNzBlLCAweGU4MjQ1OTg2LCAweGU1ZjM2MDdmLAotCTB4ZmMyZjFmMjAsIDB4NzVjNGVjYjUsIDB4NTk2NWIwN2YsIDB4M2Y2ODNjZTIsIDB4MDFhYzdlMDYsIDB4MzU2ZTE2MzgsCi0JMHhhZGVhZjVkMCwgMHhiM2Y1ZDJmNywgMHhmZTE3NGY4MiwgMHhlYTEwNjEzYSwgMHhkN2ZiYTNmOSwgMHhhYjNhZTIyNywKLQkweDg3ZjZiMWZmLCAweDFhNzYyZmE4LCAweDQyODY4MzJkLCAweGIyNDNiMzViLCAweGM1YzkwNjk3LCAweDU1YzJhN2UyLAotCTB4NTYzYTlkZmQsIDB4ZDY1MGViOGQsIDB4ZDVkNzI0Y2QsIDB4YTc4MDM2ZmIsIDB4ZGRmNzU2MmEsIDB4NmFmZDk3ZmMsCi0JMHg5NWZjMDVmZiwgMHhmMjA0ZDhhYSwgMHgwOWRkMjY1NywgMHhiYzJiYWVlYiwgMHhiZWUyN2U0NCwgMHhjNzY0MTE4MywKLQkweGM5OTY2OGZmLCAweGZkMGRmMDFmLCAweDAyZGYzZmNmLCAweGU4N2Y5MmZkLCAweDA4NDNlNGVkLCAweGY0MmQxZjNlLAotCTB4YTRjOTYzMzIsIDB4YmM0Y2FhODcsIDB4NGY1YmIyNWYsIDB4OTQ0OTQ0ZmUsIDB4ZjE4NmY4NGMsIDB4ZmY3MGQxZTYsCi0JMHgxZjc4YzQ1ZiwgMHgzN2U0MGRlOCwgMHgzNGRhOGYyNiwgMHg4ZThkYzYxMiwgMHgxM2Y0MzAzMSwgMHg3OGI3YzVmZiwKLQkweDdlZmQwMzAyLCAweGJiZmQ2NWZiLCAweDI5ZWI0MTFkLCAweGQwMDNjZDY2LCAweDA2NjIyOTExLCAweDFlODc3NWNkLAotCTB4ZDQ5ODk3YWYsIDB4OGNlNzQ3ZDcsIDB4NmU3NjhiM2IsIDB4NWQ3ZDQ1YjQsIDB4NTg4NjliOTEsIDB4MDE0MWZmZTAsCi0JMHhmMDc3ZGZmZSwgMHhjM2M2NDdhMywgMHhjODhlYWFmYSwgMHg4NmJiMGZkYywgMHhlMTBkNzk3ZSwgMHg1ZjlkMjNkNywKLQkweGNmMDFkOGFkLCAweDM5NTgxNTFkLCAweDg2ODNlNTdhLCAweDExYWJlNDE0LCAweGZkMGQ1YjEyLCAweDk1ODRhZTBmLAotCTB4MGI4NzkyODUsIDB4YmNhMzZmZTgsIDB4ODBlZmEwMzMsIDB4ZGEyNzdkMDAsIDB4YTNlZDVkMTcsIDB4YjExZTRjMzgsCi0JMHhlMTFmNmFmNCwgMHhlZTdhZTZmZiwgMHgxMWQxZTVlYiwgMHg2YmY3YTQ2YiwgMHg2ZTU2YTBmNSwgMHgzODNkMmZiZSwKLQkweDBjODFlODYxLCAweDRmYjUxNDRmLCAweDRlYzlmYjYzLCAweDdhYjQ1ZmFlLCAweDE0ZjdhYjUxLCAweGQ2ZjBiNGI4LAotCTB4ZjRhOWQ2NWUsIDB4MWI1OGQwZGQsIDB4M2RlODBiOGQsIDB4MWJiZGU5MjMsIDB4OGQxZDVmMTgsIDB4ODE1ZjExMGQsCi0JMHg3OTdjMjY1ZCwgMHhhZTI5ZTk4NiwgMHgwZGUxYmYwMywgMHhiNjZiOTcxYywgMHg0ODAxMTVjNSwgMHg0OGVjOTYwZCwKLQkweGNjMzNlN2Q0LCAweGVlNTBiN2FlLCAweGIwM2I3ZjMyLCAweDFlYmQ4MTk0LCAweDg3NTlhM2I0LCAweGUyNGJhMzdhLAotCTB4MTA2ZWRhZjQsIDB4MDM3M2Y2MmQsIDB4NjIzYmNmZjEsIDB4YmNiMWVkZmQsIDB4YzUwZmYxMGYsIDB4OGEyYmQ5OGQsCi0JMHhmZWIwN2JkOSwgMHg4NGYzMTMzMCwgMHhmN2JkOTFlNywgMHhmMzAyZjIxOCwgMHhhMmUzMWNiZiwgMHg4YzQ1OGQ3MSwKLQkweGRjYjE5ZGM3LCAweDYwMWVjYmVmLCAweDdlNjA1OWQzLCAweDg3NTkyMDM2LCAweDcwMjY1YWY0LCAweDI1YTU3NmIxLAotCTB4N2JmODEzYjcsIDB4NmE2NGNhZGQsIDB4ZTdjNDVmZDEsIDB4NjgyMzdiM2MsIDB4Y2U0YmVmNWQsIDB4NmI3NzI4MjEsCi0JMHg3YTVhN2MwNSwgMHhmZTE1NWI2NCwgMHhmNjBmZjY3NiwgMHg4NzE0MTY4NywgMHg1NmQxZDNkNiwgMHhlOGE3YWQzZCwKLQkweGU4MTkxOWQxLCAweDdlZGZiYzZmLCAweGNmZWEwNjc3LCAweDNmNWUwMWY3LCAweDNkYmQzZmRhLCAweDg0ZmNlYmU2LAotCTB4M2UzYzg1ODcsIDB4OGM0NGVjMjgsIDB4MjY3ZjIzODgsIDB4YzdkODA0ZTQsIDB4YjVmZDEzYjEsIDB4YmZiYTRlOTUsCi0JMHhiNTM5NjU2ZSwgMHhhMGFlNTcxYiwgMHg1OWIxZGRmYiwgMHg5MWU4ZmVmNCwgMHg4MWIzZmJjZiwgMHg2NDFiOWQ3ZSwKLQkweDhjMGIwM2IyLCAweGYwYjFmZWNlLCAweDhlOTM0ZWRlLCAweGVhZjdkMWUyLCAweGNjYmI2NWNkLCAweDVjNTE5ZDc4LAotCTB4ZjFkMWUwYjMsIDB4MTQyZTUwZGIsIDB4ZjU2M2JhMzgsIDB4ZDZkZWVlYjQsIDB4M2ViZDZkOTksIDB4M2FjYjVkZmQsCi0JMHg1ZDFlZDFhMiwgMHgwMDc3YzdlNSwgMHg3ZTAxODkzYiwgMHgzMmJiMjE5YywgMHhjNzE4MDlhZCwgMHgzOGUyMjQ3NCwKLQkweGJmZWZlNGI3LCAweGVlODA4MjgzLCAweDk1NmZmNDBjLCAweGVjY2FmZmY3LCAweDYyMTZiNmM4LCAweGExMDZjMzljLAotCTB4NzA0NGI0NWMsIDB4NzM4NWEzN2IsIDB4ZDlmMzk1YTAsIDB4YzEzNjk1ZGEsIDB4ZmRhODAzMDcsIDB4ZWY2MWY4NTgsCi0JMHhhMTBhOWRhMywgMHhjZjExNmU1NywgMHg2ZTNiMzYxZCwgMHg2NjMwZjdjMSwgMHhkNjkzN2YyNiwgMHhkYTNiZmE4MSwKLQkweDQyNzA4NzkxLCAweGY3ODA1MGJjLCAweGNiZDUyNTg3LCAweGRiZjkwOTA2LCAweGY4MGRmNWMyLCAweDc3MWZkY2E1LAotCTB4MmM3MWM0OGUsIDB4MDQ0ZDIxZGUsIDB4ZjkxMzBjN2EsIDB4MDVmMmRlOWIsIDB4YjRkZTM4NWEsIDB4ZTZkMGY5NzIsCi0JMHhjOTU2OTQxMSwgMHhmOTVhOTQyMywgMHg2YjE2ZmU3YSwgMHg2Yzc3ZTU1MSwgMHgyYTExY2MyZCwgMHhjYWQ1YjA3ZiwKLQkweGMzYjI2NmY1LCAweDdhZGE0NzIxLCAweGQ3MDJiYjk3LCAweGYzMTkxZWJiLCAweGRlY2NlNTI0LCAweDUxYTQ5YTBmLAotCTB4M2Y5OGVkMmQsIDB4YWVmNTI5NDksIDB4NjM0YWZjYzIsIDB4M2QwZTU2YWMsIDB4Yzk1Nzk4ZTEsIDB4M2QxMmU5NzYsCi0JMHhlZmQxMmUzMCwgMHgxYzAyMzIyYSwgMHhlOTEyNjI1YiwgMHg3ZWFjNDk3ZCwgMHhjMGFiZDIxNSwgMHgxNzQ1YTNhNSwKLQkweDRhZjA4ZmVjLCAweDQzMDc5MDRhLCAweDA0N2U4NWYyLCAweDc5NDcwZDA5LCAweDlhZTUxZjFiLCAweDVmOWRmODQzLAotCTB4YzM2OGM2YmYsIDB4NDY0NzkzZmMsIDB4MDI1NjcyZmQsIDB4MzhmZTAxM2UsIDB4YTQyMjIwN2IsIDB4MjI4Zjc3M2YsCi0JMHgxZjcxNTJiNywgMHg0ZjA1ZTkzNCwgMHgwNTBmMDgxOSwgMHgxNjYyZmQ0ZiwgMHhkNGYwNWJjMiwgMHgyODI5N2ExZCwKLQkweDZhYzg3ZjRlLCAweDNkOWRmYzIwLCAweGUyOTMzOGIwLCAweGFjNjE5M2U2LCAweDc5Y2Y1NjVmLCAweDU0NWYwNTFiLAotCTB4NjBiZjdjMDksIDB4YWI3N2NkMGMsIDB4NWJhZmZiYzUsIDB4N2Y4Mjc3NGYsIDB4ZDNkMmE4OTMsIDB4ODEwOWFkYWIsCi0JMHhlZDVkNGM3YywgMHhiM2QzZDI0NSwgMHhmYzNlZGNhYywgMHhiMDcyZGY0YSwgMHg1N2YzZTAwZiwgMHhmMTFkOTlmMywKLQkweGFkOTlmOGJlLCAweGMxN2JhNzk0LCAweDA3NzYzMmQ4LCAweGM3NGVhN2FlLCAweGZmYjAwZjMwLCAweGZiMDdjYmUwLAotCTB4ZGYzODdmYTAsIDB4ODNmZDE0MzYsIDB4ZDkxZmNmYWIsIDB4N2ZkNzg4ZGUsIDB4MjI4NmNkNTUsIDB4MWJiYzUzZmUsCi0JMHg3YzA3Y2MyNSwgMHhmODRjZGUxZSwgMHgxODViN2NmYSwgMHg1YTRiMDU1YiwgMHhlYzY1YWM3NCwgMHhiOWJmYTA0ZiwKLQkweGFmNTBjNzQ2LCAweDZmMGRkNzY4LCAweGIxOTJlODMyLCAweDIzNzQxOWY1LCAweGZmNTFmZDM4LCAweGM2MDc3NDI5LAotCTB4MTQzZDIyMzIsIDB4NTBmZTIxYmEsIDB4ZjZkZmVkOWYsIDB4YzBhZmMxMTIsIDB4NDZjNjI1YjUsIDB4Y2NmYzViZjgsCi0JMHgyN2M4YjFjZSwgMHgxMmFjNmE3ZCwgMHhiODE0NjdlNiwgMHhiODlkYWJiZSwgMHhmN2YzZjY4MSwgMHgzZjY2NmZkNiwKLQkweDY5ZmE0NjVmLCAweDZlZDZhN2VkLCAweGY2M2IzMGNlLCAweDg2YmJmZTkwLCAweGY4MjMxY2ZkLCAweDBmNDIzN2YwLAotCTB4NDFlZDk4ZGIsIDB4MjNiMjUzY2MsIDB4NjhmN2NhM2EsIDB4ZjgyYTUyZTksIDB4N2EyZjI4MzEsIDB4NzkxZDdhYzQsCi0JMHgyYjU2NjFkMSwgMHgxNzliNTdiZCwgMHg3YWU0NmVkZCwgMHg2NmNhZDliNCwgMHg4N2U1MDk0ZiwgMHg5Yjc1NzgwOSwKLQkweDE3Njg4ZGJhLCAweDkwYTRkYmUzLCAweDk5YThlOTdhLCAweDliZDAyNWViLCAweDlmNzI0MWZmLCAweDg2YWY1YTFhLAotCTB4YzQxOWVmYzAsIDB4N2MzYmNkZGIsIDB4NWU1NDcxN2IsIDB4YmEyNDRlNmMsIDB4MGZjZjgwNWQsIDB4NzgxNGY4NTQsCi0JMHhlMGFhZjA1NCwgMHg4OGE2MzFiMywgMHhmMGJiNjVmOCwgMHg3MGM0YjczMywgMHg5OTcwMjk3YywgMHg4ZTcxOTRlMywKLQkweDdhNWYzODBiLCAweDBiZmFmYTJmLCAweGZmODA2NzgxLCAweGJmMWZjMjMyLCAweGVhZjJhOTljLCAweGJlM2QzZTRhLAotCTB4MGIxOTIzZGUsIDB4Y2EzMDJjZDAsIDB4YjljNjY1YmYsIDB4NWM2MDE5NTYsIDB4N2Y2NjQ4ZjcsIDB4MTUzMWZhMTIsCi0JMHg3N2Q0MjI5NiwgMHgzYjdiNmFkNiwgMHhjZjFiZGRlNiwgMHhlMzY2YmNmMSwgMHg0ZDVkZTY1MiwgMHg3ZmZlMzBmMywKLQkweGEzY2E2Y2FlLCAweGU2OWRkZTIyLCAweDU5NDE3NjllLCAweDUzMmJkODFmLCAweDE1YzEyMTVjLCAweGY2MzVmNzExLAotCTB4NDVjYTA2ZWEsIDB4OTMzN2RjNzIsIDB4MTBiOGY0OGIsIDB4NzMxYjdiNzQsIDB4YzcyMTA5ODAsIDB4NDM3OWM1ZjcsCi0JMHhhZjA3MzlkMCwgMHhiN2NlOGI1ZiwgMHhlNWU1Nzg4OSwgMHhjZDQ3Mjk5OCwgMHgwY2I1NmZjMiwgMHg0YjVkZDAwOSwKLQkweGRmOTFiZWNmLCAweGM0Zjc4ZjUxLCAweDA5NzE2ZGNiLCAweDYxYjJmMTNkLCAweDFlODA2ZTgyLCAweGVjMjJjOWQ3LAotCTB4YTRjZWVjYTEsIDB4ZGYzZGVmYjgsIDB4NDQyZTI5M2YsIDB4NTRmZTFmYmUsIDB4YWIxM2Y0ZmUsIDB4ODRkZmFmZWQsCi0JMHg1MzI2YmU3MCwgMHg0ZmM0ZjQ5YywgMHgyNzk4OGMzYiwgMHgwYWQyZjI1NiwgMHg4MTJmZWViYywgMHg3NzNmNDBhMywKLQkweDU2YTNhOTdkLCAweDI2ZDc1ZWI5LCAweDU1ZGM2M2U1LCAweGY5MGFlZmI0LCAweDVmZWQ1ZGM3LCAweGE1ZGM3ZjkyLAotCTB4Zjc5NThmZjEsIDB4ODllYzAzZGUsIDB4MzY1YTMxZjIsIDB4ZGM1ZmZmMTMsIDB4OTk3OGUzYzIsIDB4MTQ2ZGZlZDksCi0JMHg2NDNlZTFjMCwgMHhmMTFiNWU2MCwgMHhiNDBmZjkyZiwgMHhjNDVmZTg1ZSwgMHg2MzNmYzcxNiwgMHhlMTZmNzhhNCwKLQkweGY5ODYxN2UxLCAweDA4Y2M1MmUwLCAweGUxMDViMzFkLCAweGMxMTFkNjJiLCAweDhhZjg0MTZjLCAweGZhYWFiMzJiLAotCTB4YWEzZWNlMDksIDB4ZDllNTQ5ZjEsIDB4YWUyOWZiYWEsIDB4YTlmYmFhODEsIDB4N2VhYTc5ZDUsIDB4YWFhZGZkN2EsCi0JMHhiNzYwOTlmMSwgMHg5ZTU5ZmI4MiwgMHg3ZGYxYWE3MSwgMHhmYWFhYTY5YiwgMHg1NmVmOWFmZCwgMHg4NzFlNjc4ZCwKLQkweDM5ZDYwNzNmLCAweGE2ZjNhYzVmLCAweGUzNTU3M2NkLCAweDYxZjI0Zjk5LCAweDIwODE2NDdkLCAweGM3ZGJjN2YzLAotCTB4YzhmYWMyMWMsIDB4Yjg4ZjkxN2MsIDB4MzU1OGJiZDksIDB4NzU2NjgyZGYsIDB4MDhmMDgxNWUsIDB4OTU2YWFiNzgsCi0JMHhiNzg4NjNkOCwgMHhkNWZiZWFjZCwgMHg1MzFiMWI2ZCwgMHg1NWU0NWRhMSwgMHg3NThjNWY1ZiwgMHg1M2Y5MDkwZiwKLQkweDNhZjdmZDdkLCAweGUzZjQzMmU3LCAweGNlYTcxOTdmLCAweGJlOTM1ZGQzLCAweDQ1YWU5YjllLCAweGM3MGZiYjVmLAotCTB4N2YyMjg4ZWYsIDB4NzllMWUxNjcsIDB4Yzk2MTQ3MjQsIDB4ZGI4NmZhNmEsIDB4N2YxNmJlMjIsIDB4OWFhYzAzOTEsCi0JMHhhZmJmZjBmYiwgMHg1ZDk0NWZjMSwgMHhmYzVhMGZjZCwgMHhjMWY3NTllOSwgMHhjZWFiODA1NCwgMHhhYzdkZDkyYiwKLQkweGI1MTZmZTI3LCAweGI1MzgyNTZlLCAweGVkZTJkM2Y4LCAweGJjZWE3MThmLCAweGQ3NDhkYWNlLCAweDk3MWJkNDVlLAotCTB4MGNjYjk3NWEsIDB4YmM2NWYzZjMsIDB4ZjVhOTc4ZmUsIDB4NmM0NzIxZDMsIDB4N2VmOTc5NDEsIDB4NWZlNWU2YmQsCi0JMHg5NzkxMGI4ZCwgMHhjYjdhYzJlZiwgMHhkNDFiZWMyZCwgMHg4MTdkZjY1YiwgMHg4YjAzMDg3OCwgMHhiMjdhMDA2MywKLQkweGQ1ZDM3NjExLCAweDIwNzg0YWZhLCAweDViZDVhZjBmLCAweGZiN2EwYjRhLCAweGNmYTQ3MTZmLCAweDM1YTk3NTAzLAotCTB4OThiMGY0ZjAsIDB4YWYwODlkYjcsIDB4ZWYxOGI3NTIsIDB4YjdiYzExNzIsIDB4ZTEyMzIwMjAsIDB4YTc1ZjMzM2YsCi0JMHhlMWUwMGYzMiwgMHg3YzY3OWMzZCwgMHhlMzEyMzU5MSwgMHhlZmZiOWRhNywgMHhiNTgwNzhhMSwgMHgwNzNkNzNjNSwKLQkweDFmMWUwZjI0LCAweGZlOTI5N2U0LCAweGE2N2ZjMTZjLCAweDQ4ZmMzZDkwLCAweDcwNGZjM2Q4LCAweDMyMWVjNTNlLAotCTB4NTdiZjk1OWYsIDB4ZTZkZWMzZDgsIDB4YmQxNmVhNTEsIDB4OTk1ZWQyYjUsIDB4NThkZDJmZWEsIDB4Y2ZhMTA5N2YsCi0JMHhkMWRmZjE4ZCwgMHgyM2QyN2NhZSwgMHgwZjhjNjlmZiwgMHhiZGVlMGY4ZSwgMHgzYWY1MTA3NCwgMHgxZTNjM2RlMCwKLQkweDA1MTUxOWQ2LCAweGQ4MGE1MmY2LCAweDhjOGI3ZmNiLCAweDNlZWI3OTI2LCAweDgyNmY3YjJjLCAweGI2NGQxNzBiLAotCTB4YTA2ZTZiMTgsIDB4Nzc4NWEyYmUsIDB4YWI5YWM5OTQsIDB4NmRlM2QyMGYsIDB4MzY1ZWRhOTIsIDB4MjNmZjcxZTYsCi0JMHgxZGZiOWUzMSwgMHgyZmRjY2M5MywgMHhlOWQ2MmMxZCwgMHhlZWViZjhkNiwgMHg4Mjk3MWUyNiwgMHgwNWI3NTQzNCwKLQkweGUzODM4MWY5LCAweDNiZmM2OGEzLCAweDcxODM0NTExLCAweDVjNDU1YjNkLCAweGQxMjU5OGRmLCAweDg5MjUxYWZiLAotCTB4MzEyZGZhZWMsIDB4OWRmZjc0YzUsIDB4NmM1Y2EyYjgsIDB4MGVmNzg5ZmIsIDB4ZGEwODlmNDYsIDB4OGYwZTZjZTYsCi0JMHg1MDEzZWM0ZCwgMHhjNzEwZmZlNiwgMHg0YzViNjIxNywgMHg4Yjc4ZTBlZCwgMHgwNjU4ZWZjOCwgMHg0NDhmYmQyMiwKLQkweGEzNWU2ODM4LCAweDI5ZmNhYjJjLCAweGU3OGJjZGE1LCAweDk5YTc0NDdlLCAweDJhOTM3ZTI5LCAweGU4NDYzYzdmLAotCTB4ODcxN2NjMzEsIDB4MjYzOTMwOTEsIDB4ZTQwYzRlOGMsIDB4ZWEzYzk5OGIsIDB4ZTQ1ZTMxYjgsIDB4ZGM3YTI1ODksCi0JMHg1ZGJjNzQ4MSwgMHhiY2I3YjFkMCwgMHg2NTgwNjNiMSwgMHg0NDM5YmMzZiwgMHgxYzk3ZDhkZSwgMHgxZjZjNmYzMiwKLQkweDc4NjM3OTQzLCAweGQyZWI4ZjUyLCAweDBlOTE4ZmU2LCAweDNjODBkNjkxLCAweGFhYmY4YzRjLCAweGRmNTBkMjZmLAotCTB4M2M3NTY2MzQsIDB4ZTNmOTFlMzIsIDB4MTI3ZjZjYTgsIDB4MTNjNzdmNDEsIDB4YjZlMDA0MzksIDB4N2M3Njc1ZDksCi0JMHhiNjE2ZTQ2NCwgMHgwYmZhMWMzYSwgMHgyZmNhMzYzZCwgMHg4YWZlMjAxOSwgMHhlZmM4MGJjYSwgMHg0ZTJjZjg5MiwKLQkweGQzM2UxM2ZmLCAweGZjM2ZiODEwLCAweGU2M2I2NzFkLCAweDYzNGZmYjkzLCAweGNkZmY1NDU2LCAweDFhMjRiOWFjLAotCTB4MmMyZDg4ZmQsIDB4MjU1MmJjNjQsIDB4ZDE3YzY2ZjgsIDB4M2NlNTE5NWUsIDB4MjVmODFiYTEsIDB4ZTJhYTNkMDQsCi0JMHhiZGJmOGE3NSwgMHhiYzM2ZTkwMCwgMHhmNTA5NzVkYiwgMHg0ODA3YTI4OSwgMHhiNDVjNjE5NSwgMHhiMjdlNDc1ZiwKLQkweGU4OTZmOWY2LCAweDA3YzQyNTkyLCAweDkyNzlkMGRlLCAweGUzODczMzRlLCAweDI5NzM4NDQyLCAweDU3NzgzZmNlLAotCTB4Y2RmNTExODcsIDB4Y2U2ZjQ1NDIsIDB4ZDAzZDMxZDcsIDB4YmY0MTRlZjcsIDB4YmFmMGI3M2IsIDB4ZDVmMmJiMzQsCi0JMHg1ZmUyYjI1NywgMHhhMTlmOWEzMSwgMHgyZDM4NTgzZSwgMHg4Nzc5OGJjYSwgMHgxZTU5NmQ4NSwgMHg1MTI5Y2I4MiwKLQkweDc2ZGRjNTVlLCAweDg1ZmQ4OWNjLCAweDhjMTYwNTA1LCAweDY1N2YxZDczLCAweGU0MDE5OWQyLCAweDc3YWUzMTlhLAotCTB4YTI4Y2VjZjQsIDB4YzY3ZWM4MDcsIDB4YWE2MjlkNTMsIDB4YjM0ZWFiZTAsIDB4ZmQwNGUwOGQsIDB4ZTgxMjIxYmMsCi0JMHhhYWNiNzBiMCwgMHhlMTJmYjhiZCwgMHg1NDY3N2ZhZCwgMHg3NzIxMzg4ZiwgMHhhNmM5YzMwZiwgMHhlNDU2NzIwMywKLQkweDE1NjdhYjYxLCAweGFmMzBmODc5LCAweGYzMTM0Yzc3LCAweGY3ODRiZTc4LCAweDlkZWYwMjlhLCAweGQ2OTg3NmRlLAotCTB4M2NjMGMyNzMsIDB4YWU5N2UwMjYsIDB4ZDBkOTc3M2QsIDB4MzA0YzZkNGYsIDB4NDU3Zjg5ZDksIDB4ZWM5NGViOWQsCi0JMHg4NzhjODA3YSwgMHg0MTBlYmJiZSwgMHg2OTE2ZDE5YiwgMHg1OGViMGY1OSwgMHhhZmRjNjQ2MywgMHgxMWQ4NDVkNSwKLQkweDFkY2QxM2ZmLCAweGY4OTdlMjdhLCAweGYxZTIzZDZlLCAweGY0Njc0MTBkLCAweDRmY2ZjOWVkLCAweDM5Mjc0NDYwLAotCTB4OTZlOWM3NTUsIDB4NDRmYmUzNjksIDB4YmZmOWQ0NzIsIDB4YzFkZDA0OTcsIDB4ZWJjMzRjNmIsIDB4NThkZjIzMTMsCi0JMHg3Y2NlMDM2ZSwgMHhjNzBmZDM3NiwgMHhkZWEyNDdlOSwgMHgxNjc5NjM3YiwgMHhkZDM2NWJmNCwgMHhmYzhmNGUzNSwKLQkweGE3YzZmYTlkLCAweGNmZWEyMDU5LCAweGY3ZTcyYTZmLCAweDY5ZjFiZDA3LCAweDZkNzdmNDM2LCAweGRmZWZjMTlhLAotCTB4NWVjZmJjNDYsIDB4MzhmNzc0ZGMsIDB4NzRiZmViY2MsIDB4ZjlmMDJmNTUsIDB4MTI0MjIwOTcsIDB4YzM5NWJmYWUsCi0JMHhlMmExZjU3NCwgMHg5MmJjNWYwYiwgMHg3YzA2NjY1ZiwgMHg0ZmVkYjM4ZiwgMHgzYWNlZDAyNywgMHhjM2I3ZmE5NSwKLQkweDIzN2ZhYWEwLCAweGRmODA5OGM3LCAweDYyYmUwYmM2LCAweDA3NjRkMWYxLCAweDhkZmEwOWM2LCAweDNmNjhmYmQ3LAotCTB4MjNlNGNlOGMsIDB4MWFjNGRlZmMsIDB4ODAzN2M4MmMsIDB4ZTU1ZjRkYWQsIDB4YzA3ZjdjZjcsIDB4NGJmOWE5YWUsCi0JMHgwMmI2MzA3MiwgMHgyY2Q5MmRlOCwgMHg1NjZiMjdjNCwgMHhkYTM4NTczMCwgMHg1ZGRkNDBmZCwgMHhjY2VlZWJjNywKLQkweGUwNTdlZjg5LCAweDAzZGZkZTUxLCAweGRlYWQyMDJlLCAweDE2ZDcwYzFhLCAweGFiODE0NzlhLCAweDA3OTg2ODZiLAotCTB4OWZiMTQ5ZTUsIDB4NTI1ZDVjMGEsIDB4ZjQ5OGUzZjcsIDB4MGYyZmQ5ZmUsIDB4NzViYTQwNGUsIDB4NDg2Nzc1NDUsCi0JMHg3MDkwZGZkMCwgMHg5NWQ4ZTg5MCwgMHg2NGI4ZmRkMCwgMHgzODFiZWEwZiwgMHg1YTZjY2YxZCwgMHhlZjAzY2UzNiwKLQkweGNlM2IyOGQ5LCAweDE5ODZkY2EwLCAweDI2OTJiZWY5LCAweDNkZTA1MzhjLCAweDNjYjgyNjBmLCAweGJlMDNjZjU4LAotCTB4ZWY5MGZiYjMsIDB4ODdhNDhkZDIsIDB4NzlkNDBiNGEsIDB4NjdjMTZlODksIDB4ZGViODEzY2IsIDB4NWNkNjFkMWYsCi0JMHhkMmY4MGM3ZiwgMHhhYjYyNGJiZCwgMHhjYWZiYmM2MCwgMHg4OWRhMjMyNSwgMHg4ZGE3NmQ4OSwgMHg3NmViNjgwZSwKLQkweGJlYTIzNjlkLCAweGNjM2VjM2FhLCAweDE4YzViNzUzLCAweDEyNzk2ZjUyLCAweGQ0M2Y2MTY0LCAweGY0ODFmMDdlLAotCTB4ZTNjNDBmZmUsIDB4MTJmOTg1YmUsIDB4ZDllZWUyNTUsIDB4ZmIxYTNiMWQsIDB4NTVjMWNjZjcsIDB4YThmNzc2MzIsCi0JMHg1ZDkxYTM5ZCwgMHgwZmVkOWQyYSwgMHg3NTliM2I2MCwgMHg5YTE2NDAxYywgMHg3ZTU1OTJlMSwgMHg0OGVhY2NlOSwKLQkweDU5NWI1Zjk1LCAweGNmZWFhNzFmLCAweDgwZWEwNjZlLCAweDkxNWVjZjVjLCAweDE4MWY4ZWFhLCAweGNmMDBhYmM0LAotCTB4NDNmODE2MGMsIDB4ZTgyZTU2ZmQsIDB4ODM3OTIzMzgsIDB4Y2NhZGY3MWYsIDB4MWQzYzE5NzAsIDB4NmM0ZGYzNDEsCi0JMHgyMmI3YTU1YiwgMHg5ZDkyZjVkYywgMHhkOTg3YWZkNCwgMHg3Yzk5YjlmMCwgMHgzZGVhZDA4NSwgMHhkMWIwZjVjMSwKLQkweDUxODkzY2FkLCAweDdmMjI2ZTU3LCAweDgwZmIwMmJmLCAweGQ5MWE4YWQ3LCAweDBmMTA5MzZiLCAweDZlZWZiYTQ2LAotCTB4NWJiZWU4OTUsIDB4NGI1Nzc3ZGMsIDB4ZWM5NjFkNGEsIDB4ZTMwMTZjZWUsIDB4NDZjNzNkY2MsIDB4ZTExMGI2ZDMsCi0JMHhjZWYwMmJkZiwgMHg0YjNiMmYyZSwgMHg3YWZjMjhmYywgMHgzNmU1NWQ2NSwgMHg3ZDcwYjNiMCwgMHgwNmRiZmE2ZCwKLQkweDhmZjY3NzljLCAweDQ1OTcxNjI0LCAweDUwZWNlYWViLCAweGFmZGQ1MWUxLCAweDE5Zjc1N2FjLCAweDllNjAzMGViLAotCTB4ZjUwYWY2N2EsIDB4YzIwOWUxZjUsIDB4ODM2MjBlOWUsIDB4MjU0NjllNTAsIDB4MmY5MjdhNDgsIDB4ZmQyNGZmZDEsCi0JMHgwMDdjZDdlZCwgMHhmM2IyZTNkZiwgMHg4M2UwMDRmNiwgMHhlYThmYTMxYSwgMHgyZWNiOGY1MCwgMHhlMWY3MmJlYSwKLQkweGI5MjMxZDdhLCAweGU0ODA3ZjAzLCAweDVjZjkyMjU4LCAweDhhNTg3MDYzLCAweDk1YWU4ZmQwLCAweGIyNjc2Zjg4LAotCTB4MmIyMTdmMjAsIDB4NzJmYTllMzAsIDB4MDkzZGZlY2YsIDB4MTM1YTVmZGMsIDB4ZjU0ZTVjZWUsIDB4NjU5MjNkYjAsCi0JMHhkNTJhNWMxYiwgMHgwN2U4ZjQzYiwgMHhlNzQyOTFhZSwgMHg3MDI1OTY0MywgMHg0MThkNzg3OSwgMHhmNTcwMGVmNCwKLQkweGJiNDUyNjQ3LCAweGQ3OGM2NzdlLCAweGZmZWRlZjAzLCAweGY0MWUzOWM3LCAweDAzZTdmYmVmLCAweGVlNTBkODFmLAotCTB4MmYxOWJkYjksIDB4ZjAyNGNkZWMsIDB4ZWJmZmQxMmYsIDB4OTM5NGI3MmYsIDB4NjhjNWJmN2UsIDB4ZWMyZWZkMjEsCi0JMHgxYzJmYTI5MCwgMHhhMWRiNTFiZiwgMHgyODg3NjlmMSwgMHg3OWI0OThmZSwgMHg4YmQ0MDVjMywgMHg3OTFkN2QzOSwKLQkweDA3YmUwMTFiLCAweDFmZmJmOWMzLCAweDcxNzkyZGRjLCAweGVlNWQ0ZTFmLCAweDQ5OWZkMjQxLCAweGRlZjgxZWMwLAotCTB4NDdhMTY0YmEsIDB4YWNmYmQ1NWIsIDB4MjFhZjUwOTIsIDB4YTVjODRjYzMsIDB4MTQ5OGE2ZjcsIDB4MWU5MDc3NmUsCi0JMHhiYWM1N2M5NCwgMHg0OTdlODBhZiwgMHg2OWE5YmRlMiwgMHhlMjU3YzIzNiwgMHhkNzA5MTZlMiwgMHhhYjNjY2U5ZCwKLQkweDQ1Y2Y4ZWQwLCAweGI0MGMyYzIxLCAweDk3Y2ZlZGQ3LCAweGJlN2Y1YTRhLCAweGU0ZjlmYzliLCAweDdiYzUyMzBlLAotCTB4OWRmOGRiYWMsIDB4ZTczZDczZjIsIDB4ZmNkNDMyZmYsIDB4NTNhYTdjYjAsIDB4MmJmMmUyMDcsIDB4YjlhNzk4ZDEsCi0JMHhhZmRmNGY2NywgMHg5YjI0ZGZkZCwgMHhjMWI3NzFkNCwgMHhjN2JiOGVhMiwgMHg5ZmViNTAwZiwgMHhkZWI1NzY4OSwKLQkweGFmYTIzYzk5LCAweGM3MTRmZWVhLCAweDNiZmRkNTIwLCAweGZkNTVmMmNiLCAweDU0ZGJjZWU5LCAweDJmMmFlZmUzLAotCTB4OTJjM2Y1NTEsIDB4MDBmMjY5YzcsIDB4ZTQ0YWJjZWEsIDB4MjU1ZTc1MDAsIDB4YTNjZWFlY2EsIDB4N2RmZTFkODQsCi0JMHgzMTc4MDRiOSwgMHgyZTFkM2M5YSwgMHhjODEzNDNjMCwgMHhjMDZiMDhjNiwgMHgzNjhhMGM4ZSwgMHgyMjM2NzE1MSwKLQkweDZkOGNkYzNmLCAweDFmMzBkMGQzLCAweDFmNTM0OWYyLCAweDFkODc4NzFlLCAweDA3ZDkzN2JlLCAweDc2NjI5OGYzLAotCTB4ZjEwNGIwOTgsIDB4MWM1YmM5NWIsIDB4OWEwMDczMDcsIDB4ZjAzYTllYTgsIDB4MzliZmI1N2UsIDB4MTdkYjg1MzIsCi0JMHhiODI1ZjVhNSwgMHgzNjg0NGY1ZSwgMHgyYTViMTlmNywgMHgxNGZkNjdmNywgMHgxODIyOTg5ZiwgMHgzNDVlOGJmNywKLQkweGM0YTQ1ZjkxLCAweGU5M2NjYWM5LCAweDUwMDc0NTY5LCAweGVmZGVlNDdmLCAweDZiMDliYWEwLCAweDI3Y2MxNjY1LAotCTB4NzkxNDY5M2UsIDB4YmVmOTE3ZDQsIDB4MGVkNmRjZGIsIDB4YmU0ODIzOWQsIDB4ZmFlNDRjZWYsIDB4ZTJjZTE3ZTAsCi0JMHg1ZDdmMzhiMSwgMHg5NDU5NTgxYiwgMHgxYWVmY2RhNywgMHhkNzU5M2ViMSwgMHhmNjhkMWVkNiwgMHg1ZGYzODg2YywKLQkweDAyZWJlNjIzLCAweGQzOWQ4NWQ3LCAweDVkNjA0Nzc3LCAweDcyMmQ3N2U1LCAweDcyY2FmZGM4LCAweDFmZWJjZjIyLAotCTB4ZjJiZDdhMTQsIDB4NTQ3YzQwZGUsIDB4YWZhMDJjMzQsIDB4ZjVmMjc3MmIsIDB4OTIzNzRlNTUsIDB4NDZjMmMxM2UsCi0JMHg3YTBkYmQyOCwgMHgyYWRlNjdiYSwgMHhmMjhjMWVkOCwgMHgwM2JhODAzZSwgMHhkYzZhYjdmNCwgMHgyZTNjNjllYywKLQkweDhkYmQwMGFhLCAweDVjZmEwYzcyLCAweDkxYWQzZjdkLCAweDczZTgwYmY0LCAweDAxMGJmNWQ1LCAweDE1ZmI5ZTdkLAotCTB4MTljMjc3M2MsIDB4ZThmNjVmN2EsIDB4M2YzNzVlMTQsIDB4ZmMyMTJhZTEsIDB4ODhmMDAyZmYsIDB4N2EyZmYyN2UsCi0JMHhmM2UzOGRlMCwgMHgxNjdhZjg1YSwgMHgzNzQ0MWY2OSwgMHgyOTI5YjhlZCwgMHhiNjdjN2ZkYywgMHg0MzNkN2QxNywKLQkweGM5NDlmNWQwLCAweGQ0Y2E4NzlmLCAweGJlMjA4Y2VkLCAweDhkNzI2OTlkLCAweDdhNDdjY2VmLCAweGY1ODhkZTdjLAotCTB4NGJkZmNhODksIDB4ZGZlY2VkMGMsIDB4N2VkMzBmZGEsIDB4MDNjZWUzM2QsIDB4ZDI4ZmI4ODksIDB4OTEyMDcyZGQsCi0JMHgxOGQ1ZGYwMSwgMHg4ZmQwYWI2YywgMHhhM2IwYmUwNywgMHhlYWQ3NTNkZiwgMHg1YjZiZjgyMywgMHg3YWYxZGJmMiwKLQkweDQ3NjRhYjZkLCAweDc1ZGVlYzU1LCAweDkzYWQwYzYxLCAweGJkNjIzNDc1LCAweGUwNWVjOWVmLCAweDc2ZTQ0Y2NhLAotCTB4OGRhMjYwNjQsIDB4OTg1YzA3ZTcsIDB4YzNlN2MxMTMsIDB4ZjkwOTVlYmMsIDB4YzIxMmY0MDAsIDB4Y2Q2MjViYjUsCi0JMHg5ZDcyN2ZkMCwgMHhiNzlkNjQyOSwgMHhmZjdiZTA1MiwgMHg1N2M1MjMzYSwgMHhhZTNjZjAzNSwgMHg0MWZhNjBlMywKLQkweDY4ZjkwOWEzLCAweGMyNGJhYzI3LCAweDFlOWIxYzc1LCAweDM3MmZmMzg5LCAweDE0MmZmNDMwLCAweGZiYTVjZWY4LAotCTB4NGZmYWUxNGYsIDB4MDcwMDg3Y2UsIDB4MmY5OWFmYWUsIDB4MmU0ZmJlMTMsIDB4MDVjODc5MTcsIDB4NThjZmVhMDYsCi0JMHhkZDdlMjQ2NCwgMHg0NmJkZmYzNywgMHhhYzlkZWZjYywgMHg0YmRjZmJlMSwgMHhmOTQ2N2MxNiwgMHgyNDhiMTliZSwKLQkweDhhOTkzZjY1LCAweGQ1N2UxNTlmLCAweDdmOTZhN2YyLCAweGY1NjlmMDdiLCAweDk4ZTlmMWY1LCAweDNhN2NhYmM0LAotCTB4ZDAzY2VkMDQsIDB4ZjIxMjc0N2QsIDB4Y2UyMThmY2YsIDB4YjJiOWY5NDYsIDB4ZjAwNDkwY2YsIDB4ZWM1YTM3NjYsCi0JMHhiMDZiYWZiOCwgMHgxMTIwN2RlYywgMHg3ZTNlYzRmNSwgMHg1NmNkNjg3ZiwgMHhkYjFiZWI4OSwgMHhhOTg3MjhkZCwKLQkweDFlYjY0NjRkLCAweGFlNDRjYmZkLCAweGJkMjA2Njk3LCAweGRkNjk3MTBhLCAweDdiYzUyNDUyLCAweDRiZDQ2Y2ZlLAotCTB4MGVmN2NhNTksIDB4MTNiZTU2MDYsIDB4YWU3YTcxZjMsIDB4OTRiZjA2NmYsIDB4MTA3ZDc1YmMsIDB4MzkxMjlhZGYsCi0JMHg3MDdhMmFiZiwgMHg3NmI5OTE5MCwgMHhhNWJmZGU1MiwgMHhlNzk4MTRjZiwgMHhkYmFmMDM1OSwgMHhmYWY5ODg2NCwKLQkweDMzMWVlZGY1LCAweDA4OWZkYTA1LCAweGUwMjc5OTdlLCAweDBhZjdmYTUwLCAweGNkNGY2N2ZlLCAweDM0NGVmYzIwLAotCTB4NWI4ZmJjNzEsIDB4NzVjMGFiZTEsIDB4OGI1ZDE5MzQsIDB4ODRmZWUxMTIsIDB4ZDA2YmI3OGMsIDB4YmY2NTM1Y2UsCi0JMHg0MmY5NGI5YSwgMHhhNzNiMjM2NiwgMHg0NmZiZTdjNCwgMHgxOTY1YjA3ZSwgMHhlNmZjMzdhYywgMHhmODYzYTIwOCwKLQkweGU0MTY4ZDllLCAweDA1N2VmMGUzLCAweDdjMTBhZTQ5LCAweGNiZWViNGE3LCAweDM5MDJlNjM2LCAweDRkOWNiYmFhLAotCTB4YjI5ZmQyYWQsIDB4ZjY5MWFjZjcsIDB4MTg1ZGI3MjEsIDB4Mzk3MjcyNDMsIDB4Y2YyYmFlOTksIDB4ZjkxMTRhMmQsCi0JMHg1M2RmYjEyYSwgMHg5ZTgyNWZjOSwgMHgwYmM4OGZkNiwgMHhjMGYwNTM4YywgMHgyMTVlMTc3MCwgMHhkMTE0ZjNjMiwKLQkweDM2NTJkOTZiLCAweDM3ZDFhNzk0LCAweGQ2NjdmYWQyLCAweGMwZTY5MzFjLCAweDFjMTk3NzNjLCAweGQ2MTY3MzA2LAotCTB4NzdjN2NhY2YsIDB4NTM3ZWUwZTYsIDB4NzFmZDVjYzYsIDB4Yjk4OTlkOWYsIDB4Y2ZkZmI4OGMsIDB4Y2FmZjdkNDIsCi0JMHhiMWJmZWE2NCwgMHg2M2VkNDZkMiwgMHhkMGNmZTcyNiwgMHg1ZmRmNGNkZSwgMHg0ZGY2OGZkZiwgMHgyY2VhM2ZhNiwKLQkweDFkNzRmNzg2LCAweGI2YmUwODMxLCAweDNhOTRiZTEwLCAweDk5MzZhNWQwLCAweGE1ZmVlMDk5LCAweDM1ZDUxMjVkLAotCTB4NWQ2N2Y4MTUsIDB4NzE1Y2MzZWUsIDB4ZGYxNWZkOGMsIDB4NWRhOWVmMDcsIDB4M2JlOTI2ZjEsIDB4MzE4NWY1N2IsCi0JMHhhZDBkMTcxOCwgMHg3ZDg4ZGQzOSwgMHhjNmNmOGFmNywgMHgwYTcxM2ZhMCwgMHhmNWY5MDdlYywgMHg0YjI3ZGZlMCwKLQkweDE5OGU0N2E4LCAweGM1NWQ3ZjcxLCAweGYzY2QyYjY1LCAweDBjN2JhZWFjLCAweDE1ZTc5N2NhLCAweGE3NGRlYTg5LAotCTB4OTMxODJmNWEsIDB4MDg2MjdkYjgsIDB4OWY1ODE2Y2EsIDB4MTg5NWQ3MDMsIDB4Yjc3MWY4NGIsIDB4ZmE3MWQ1MGQsCi0JMHg0YWI4ZjBlNiwgMHhjMGZiNDNmMCwgMHgxZTkxYTMyZiwgMHhkN2I2MTVhNiwgMHgwZmU3YzM2ZiwgMHg3N2U1MGNjOSwKLQkweGI0Nzc3MTdkLCAweDNkZmU4NDI1LCAweGZlYjJmMzAxLCAweDZhZDgxZDdjLCAweDNkMWI5N2VmLCAweDVjZjBlY2ZkLAotCTB4ZmVmNDJlYjksIDB4OWYwNTU3YTgsIDB4M2UyOWE2MDIsIDB4MTEyOTNmYzAsIDB4NTVmZjk5ZTUsIDB4YWM2MjkyYzIsCi0JMHgyMmY4ZjcxNCwgMHhkYjJiOGU0MCwgMHhiMWVhY2U0YSwgMHhiYmQ4OTdhZCwgMHhiZDhjNzhlYSwgMHhmN2I3ZTQxYiwKLQkweGI0ZGY4N2M2LCAweGY0ZjljM2FkLCAweGUyMDFmNjQxLCAweDA3ZTQxNjQ2LCAweDU0YzhkYzYxLCAweGJjZjBmN2VmLAotCTB4OTI0ZTdhNTIsIDB4YWYzYWM0MmIsIDB4MWY0NzQxY2EsIDB4ZDU3YTAzNjYsIDB4ZjNiYTAxMzUsIDB4NTIwN2RmOTEsCi0JMHg1YWY3N2U3YiwgMHgyOThmY2ExYiwgMHhiNDUxZmJhMiwgMHg4ZWJmYWMxMywgMHg4ZjVhOGNlMiwgMHg5M2Q5ZmZkYSwKLQkweDRmNzhlNWNjLCAweDc3ZWI5NzMyLCAweDEyZjFkNTEzLCAweGEzZWY0NWM0LCAweDE0NWM0MzFjLCAweGEwZGY4NThkLAotCTB4OWQ3YjQ5NzgsIDB4Y2ExMzI1ZTIsIDB4MTA3N2JjMTUsIDB4MTBmOWU3ZDAsIDB4MmU0ZTFmNzAsIDB4M2RmOTA4ZmUsCi0JMHg5ZjEzMzU4MywgMHhlNDczZTAzMywgMHgzZjNhZWQyZiwgMHg5MTUzZjYxMywgMHhkNzI4MTllYiwgMHg1Y2FkYmZjOCwKLQkweDFlZjNiNWFlLCAweDBjZmEyZTRmLCAweGZiODc1OWUxLCAweDhkZTg0MmI1LCAweDZiM2FjNTU3LCAweDk3YzIzMzM3LAotCTB4ZjA5NWIzN2IsIDB4NzY2ZDhlNzQsIDB4OWU1ZjAzMTYsIDB4ZmViMDM4MDMsIDB4NDY3NGU1ZGYsIDB4YzY3ZDYyYzYsCi0JMHg5YWI0OGNlNSwgMHg2ZWEwN2EwMywgMHhiNzNkMDQ3MywgMHhkYzZhNjcyZSwgMHgyNDQ3ZTgxYywgMHhkZjNmYmU3MSwKLQkweDNjNDI2MjVhLCAweGU1Y2NkYWNmLCAweDI5ZGY3OTRmLCAweDk0Mzg4Y2RmLCAweGI3NDM0MmE3LCAweGQzZjcwZWQxLAotCTB4YTM0NzRlZGEsIDB4ZmJiODU3ZGYsIDB4YzM5NDM4Y2UsIDB4NDdmY2UwZGUsIDB4ZWQ3NzVmMTIsIDB4ZTNjNjdiOGEsCi0JMHg4N2Y4NWRmNywgMHhmZWE1NGNmOSwgMHgzM2VkNWVlNiwgMHgwNTc4ZGQ1MiwgMHg3ZjZkZmUyMywgMHgyODc1NmZmMSwKLQkweDIyZGJlN2M3LCAweGNmMzc2ODJkLCAweGEwZjQ4OWVkLCAweDI1N2FlZmZlLCAweDI4OTNhYmNjLCAweDgwYzRmMGVlLAotCTB4ZTg2NzNiNWUsIDB4ZTVmZTQ0OTgsIDB4ZmU4MmQ5NmUsIDB4OGY5NWZiOWQsIDB4NzQ3OTQ1MWYsIDB4OWU4NjE4YmYsCi0JMHhiNmQyNWIxZSwgMHhiZGRhMDJmNiwgMHg2N2IxYjY5YSwgMHg5ZjY4NDNmNSwgMHgxZTU1M2ZmOSwgMHg0N2RjNTc2YSwKLQkweGZmZDI5MTdlLCAweDg5YzlhNTc4LCAweDllYmNmNDdhLCAweGFkMjU4OWViLCAweGJiYmY5MDJmLCAweDIxYTVjYWU0LAotCTB4YjczZWY3NTgsIDB4YTE4NmJmZTcsIDB4ZjFmZjczNWUsIDB4NjdkNDMwZDIsIDB4MWE1YzNmZWUsIDB4MmZkZGY3ODYsCi0JMHhmMjg3ZDY0NSwgMHhjOGE1NTY1NywgMHg1ZWM1N2Y0NCwgMHhhYmQ3MWQ2NiwgMHgwYjFmNDNmMiwgMHg2ODZhYzhmZSwKLQkweDliZmRjMzJlLCAweGQ5YTZjNzg1LCAweGRjYWI3ZjMxLCAweGEzYTdlYzJmLCAweDZmODVmYWZkLCAweDA4MmRjNjk1LAotCTB4YWZjMWFlN2EsIDB4MDVlYmMzMmYsIDB4ZTcyMzRhYzcsIDB4NDc2NWYxMDcsIDB4MmZjOTQxYjIsIDB4MDc1ZTU3NWUsCi0JMHgwNTg3ZWFlZiwgMHgzYWZjNzFlNSwgMHg1YjhjMzg0NywgMHg3ZGYzZDdlNywgMHgxNzkyZDViNCwgMHg1ZmYwMGJlMywKLQkweGRmOTFjZmI0LCAweGNlMjhiNWQ0LCAweDA0ZmM5ZWJiLCAweDA1YzFmOGU3LCAweDVmNjdlZmQ4LCAweDYyYjU0MzZmLAotCTB4ZTQxMzkwM2EsIDB4ZWJmMGNkMjcsIDB4NDdjMDYxN2MsIDB4M2U2MTZkZTUsIDB4ZmFmZGVmZjIsIDB4ZmUxN2Q0ZDMsCi0JMHgxZjBiYWNkMywgMHgyMTQ5NjU0NCwgMHhkZTAzMzNmMiwgMHg1YzdhOGQxOCwgMHhiZjgxYTc5YiwgMHhmMTViODQyOCwKLQkweDVkZWEyYWI3LCAweDM2YmYwOGU5LCAweGZjYmIzMzdmLCAweDY5MGZjYTBlLCAweDdlNTkzN2YzLCAweDAxNjI2ZWJkLAotCTB4NGQ3OWU3ZDYsIDB4OTM3ZjlkNzQsIDB4ZjE0NWU1MDksIDB4YmI3ZTkxNDMsIDB4NjdmZmM4NDIsIDB4OGE3ZTljNDksCi0JMHg3NWY4MzU1YywgMHg3ZjA2OTc0NCwgMHhkYTA3MjliMSwgMHgyZWZlZTJmMywgMHgxZGY4YTczMCwgMHg5ZGRiNDM0NywKLQkweGQwOGYzMGRiLCAweDQ4YWVlNTcwLCAweDFjMzU1ZGFjLCAweDNiZjBjYTlmLCAweGIxNGIyZThlLCAweDc3M2UxZmE5LAotCTB4ZjRkMzBlZTUsIDB4NjhiZjAwZGMsIDB4ODkyN2I3ZGYsIDB4OWY4MGNiZWIsIDB4M2RlZWRhMTAsIDB4OWZmOWU0MjcsCi0JMHgyN2I2ZmY2NSwgMHhmZmNmY2Q1ZCwgMHgyMGZmNmQ1ZiwgMHg5NDk5ZGYwZSwgMHg0Y2Y4NzE0MCwgMHg3MWUxMjc5ZSwKLQkweDI4NmVkNmI4LCAweGY3OTk1OGZhLCAweDllZTc0MTVkLCAweGY5MmNmOGZhLCAweDkzMmYxMDM3LCAweGM5Mzc3ZTNlLAotCTB4ZGFkMmUzNDYsIDB4MWM1MWM0YTYsIDB4OWM1YTdjN2QsIDB4ZmU3M2RjY2QsIDB4Y2ViYjdhYmUsIDB4N2U3M2RiOWEsCi0JMHg3YjczOGZjNSwgMHgxODRjMDcxYywgMHgzZWY4MzhlNywgMHg4OTM0ZjczMSwgMHg3ZTJhZDVmNiwgMHg5MTI5ZGI5ZiwKLQkweDMwYWVlZTNmLCAweDAyOWM3MTc4LCAweGNmMWE3Zjk3LCAweDE4Nzc0ZWFiLCAweGMwNTJlMWJjLCAweGM3ZmM1NDNmLAotCTB4MTJlZGY3YWIsIDB4NDlmYzU3ZGQsIDB4M2JmNDZmYzUsIDB4NWE3NzFlNzksIDB4OThmZmJmMDEsIDB4MDkzMjc1YzksCi0JMHg3MGJlNDFlYiwgMHg5MjM4NWViYSwgMHg3OWNjNjc1ZiwgMHg3N2ZhMTUyMCwgMHgyNDYyNTBmZCwgMHg1NDlmYzJmZiwKLQkweDZmZWI1NGY4LCAweGZiZWI2YzVlLCAweGI3ZTRmYmI1LCAweGU0NTRmZTA4LCAweDFmMjM0MzJjLCAweDEwOGFmZDhhLAotCTB4ZmI0M2FhNzgsIDB4ZmJmNjg3MWQsIDB4YWU1Zjk1MGIsIDB4ZjdlYzE3OWQsIDB4OGU3YTI0YjksIDB4NmYwNWYzZDEsCi0JMHhlMmExOWRlOSwgMHhmZTYyOTVmMywgMHhhMGZkMjA3ZiwgMHgyZmVmZjM0ZCwgMHg5OWQzNzg0MiwgMHhmNmI5ZjY5ZiwKLQkweDg1YmI1NzY2LCAweGZkZGJkMzdmLCAweGNmMjg2Zjg4LCAweGY4OWQ4NDAzLCAweDRlNzNjOTY3LCAweDc5MGNmZmYyLAotCTB4ZjYxN2VhYmUsIDB4ZTFkZDlkZjIsIDB4YzljMWEyZTQsIDB4ZGViOTdmNDgsIDB4ZjdmMjg0NWYsIDB4ZmFjODQzNjcsCi0JMHg3ZjgxMTVmNCwgMHg3YzU1NzM4OCwgMHhhOGRkMjA3YywgMHg1ZGM4YjhjMywgMHg0ZDAzZjNjZCwgMHgyOWQ3YjZiMSwKLQkweGQzMmMzOTdlLCAweDEwMjVlYmZlLCAweGI2ZmZhMjA3LCAweGRhODViMmY4LCAweGExOTNmNDFhLCAweDMxY2NmOTlkLAotCTB4OTk5N2VhMDMsIDB4OWJmODZhZDUsIDB4Y2Y4Yjc3MzAsIDB4YTJmMmNkMmYsIDB4NGFjOTVjZGYsIDB4ZDk1NGFmMjksCi0JMHhmZGMxNmIxNiwgMHgyZDA5NGRjYywgMHgzY2FlNTEwNywgMHhiNmRiNjRkYiwgMHgwNmViZjFlMCwgMHg5ZTI2ZjE4YSwKLQkweGE1OGVhYjZmLCAweGUzNGM5M2ZkLCAweDZiZDY1NDA3LCAweDVmYjU3ZGZkLCAweDEzYzg5YjcwLCAweGZjMWZlNmY1LAotCTB4ZWI5YzNkYTEsIDB4YzkzMjQzOTUsIDB4OTdlNjFkNzksIDB4ZDhjYzYxNmUsIDB4N2I4MmY1YzYsIDB4NGRlNTM4NDUsCi0JMHhiODQzNWUzMCwgMHg3OTIxNWMzZSwgMHhhZDc3MDA0ZCwgMHhkZWExZjcxOCwgMHhhYTI3Zjk0ZiwgMHhiMzkwYzFhNywKLQkweDUxMTMxYjZkLCAweDVkNDM5OTJlLCAweGVhN2RhYTNmLCAweGRhOWJkMjJkLCAweDk3NzU5MjNhLCAweGFkNWQwYmE4LAotCTB4YjA5MzBkMWIsIDB4NjRmMTBiNWYsIDB4MzY5N2ZhMTIsIDB4M2ZjNDY0ZGIsIDB4NDdkYWE3YzAsIDB4MTcwNWY4YTYsCi0JMHhmMTQ3YmQwZiwgMHhiY2RkY2NlNywgMHg3ZWEzZDNmZSwgMHhkNzhlMzRkNCwgMHgwZDNlYzQ4ZiwgMHg3NjcyMWU2ZCwKLQkweGE5MDNjMWU2LCAweDhkZDc2YmI2LCAweDE5OGY1YWVhLCAweGUxZThhZTMwLCAweDhlZmM2ODdmLCAweGYzYWIyNjlmLAotCTB4OWU3YTk5OGMsIDB4OTM2Y2NkYzcsIDB4Y2E5Zjk4MmMsIDB4YmUxYzc4MTQsIDB4ZWFmYzgyMmUsIDB4MWY5ZjdmMzEsCi0JMHhhMTQwZmE4NywgMHgxYzI5ZjlkMywgMHg3ZTRmZTdhZiwgMHgwNDViNDQ1YSwgMHg4NGI3YWVmZSwgMHg3MGZlYmFjMywKLQkweGE5OWJmOTcyLCAweGQ5MzM2ZmJjLCAweDkxZTViOWYwLCAweGRmZjQzZGY0LCAweGJjNDQ4OWVmLCAweGRjNWEwMWZlLAotCTB4MDlkMmY5OTcsIDB4YTQ3Y2M4N2QsIDB4MWZlNWMyOTQsIDB4OTNjZmUxZWMsIDB4MmZkZTFlZDEsIDB4YjA3YWQyZjIsCi0JMHg3YzgxNTE4NywgMHg5YjM5ZjY4ZSwgMHhjMjA5YWU3OCwgMHhlZTYzY2ExNCwgMHhhNmZkZjVlNiwgMHhlYTM4ZDcxNCwKLQkweDZkOWIzMmZmLCAweDQxZDBmZjIzLCAweDgwMTdlNzc5LCAweDM0NWYzMWFmLCAweGY1OGIxNjA4LCAweDU4MjJlN2U3LAotCTB4OWE4YmQ2MDMsIDB4OTJhZjVjMTIsIDB4Njc1MmZkMWMsIDB4ZTc4MjM5NDMsIDB4ZDllNGNlYTksIDB4ODhmYjIzNjksCi0JMHhjZTdhYzMyOCwgMHgyNjQ5YjAxMCwgMHhmN2MwZDdkYSwgMHg3NDE0MGM0NywgMHgxNjM4ODE0YywgMHhjZDAwNDllYiwKLQkweDBmMzdhYzM0LCAweDIxOWQ3NTEyLCAweGYzOGY0YzExLCAweGFkNzA2ODNmLCAweDQ4ZWIxOWJmLCAweDJhZmI3YWVkLAotCTB4ZGM3YjAyMTIsIDB4ZjU5ZWE4OTQsIDB4ZWJjMWM5MjUsIDB4NDk5ZDRhZTIsIDB4NTZmNzhmYTksIDB4M2RmMDkyNjcsCi0JMHhhZjBlMWY3YywgMHg3MjdkODkyYiwgMHhmZDg5M2Q0YSwgMHhhZTQ1NDlkMCwgMHgxOWVhMjMzNSwgMHg2OTQ5YWRjNiwKLQkweDBiZWRiYmVjLCAweGY5ZTc1OWViLCAweGRhYjljNjNiLCAweGMwNDdjZjNhLCAweGExM2YzY2UzLCAweDFmYWUyYmFlLAotCTB4ZTlmMTNjZjAsIDB4MGUyN2FkYjcsIDB4YjgzNzY2NDgsIDB4YTNmMWM1ZmUsIDB4ZjYyMGJiODUsIDB4NWJjNTIyNjIsCi0JMHg2OGNmZjhmZiwgMHg5NzZkYjNiMiwgMHg3NTc2MWVjOCwgMHhlNTNmMzE4NywgMHg5ZTc4M2IxZCwgMHhlZjdmOGRiZCwKLQkweDViNzEwNWQzLCAweGJkOWQ5MDQyLCAweDdiNWJmODQzLCAweGZmODg0YWRiLCAweDIzNGJmOTc3LCAweGIwYmQ3YzcxLAotCTB4NGY4ZWViZTMsIDB4ZDNiZjEzYmIsIDB4YjRmNWY4ZjIsIDB4MWUzMTg3MmYsIDB4ZWJmMmVkODcsIDB4Yjk2ZmQxMGIsCi0JMHgyMmY5NzQ4MSwgMHhjZGZkNDQyOSwgMHg5M2VkYzExNCwgMHg0YjllOGU1NiwgMHhlN2E0ZjllNiwgMHg5NDdmMzk5MiwKLQkweDk3ZjFlNDljLCAweGEzYWYzOTdiLCAweDcwNWU4NDU4LCAweDBmNDkxOTk3LCAweDk0NGY0YzFlLCAweDUyNzlmYzk0LAotCTB4ZWVjYjNhYTgsIDB4OTUxYmIyNmUsIDB4M2ZkYTI0OGIsIDB4OTY3NWRkN2IsIDB4Yjc2MTc2ZDYsIDB4YjJlOWY5MzQsCi0JMHg3YjM3YTQzMSwgMHhkNTA3NWJjYiwgMHgzM2Y3NTVjZCwgMHhlMTNlYzQ1MiwgMHhkZDdmM2NjMSwgMHhmNWExNmM5YywKLQkweDE2ODdlYjVhLCAweGFjYTY0YmExLCAweGUxZDIwNmZmLCAweDViZjdjYTY4LCAweGYzZWFlZDY3LCAweDI3YmZjZWZkLAotCTB4ZGM5Yzg0MjEsIDB4ZmIzZmY5YzAsIDB4NDM5N2U3OWUsIDB4MzgxYmE3ZTksIDB4ZWZjNGRmN2YsIDB4ZjkzZmZmMTcsCi0JMHhmNzlmZTc5ZSwgMHg2NDY3ZTMzZCwgMHhmZmY0M2QyOCwgMHg2ZDAwM2VlYSwgMHgyZmJiNWY5ZCwgMHgwZmVmNWI0MCwKLQkweDgzYzBiYzNiLCAweDFiNGFkNmY3LCAweDlhZDA3ZGJhLCAweDk3MmM1ZmEyLCAweDYzZWI1NTQwLCAweDFkYTEzMjlmLAotCTB4ZDc5MjMwOWQsIDB4OWE5NWQ2YzEsIDB4YzBhNTViYmMsIDB4NWYwNTAwZmUsIDB4MWM3OTUzYTcsIDB4ZTBiZGM5NjEsCi0JMHg2NzNjMDM4OSwgMHg3MWE1ZmMzOCwgMHhjOTFiMjc5OCwgMHgwYWVlMGUyOCwgMHhhNjMwZjVlNywgMHhhMTRjYTRiNywKLQkweDk0OTZmNmZkLCAweDliMzdhMGE5LCAweGU5NWVmOTdhLCAweDZmNWYzMTQxLCAweGFkM2QyNDc2LCAweDIxNGE3MGU4LAotCTB4OTQzYzhlZmYsIDB4ZWEyNTk2YmYsIDB4YmU1Njk2NTIsIDB4NmRlOTk2ZGYsIDB4YmRlOTUzMjksIDB4ODdmNDE0YjYsCi0JMHhlYmYzZjY2MiwgMHhkOGU2M2VkMSwgMHhiMmQ5NzA0YSwgMHg2ODNjNTJhNiwgMHgxZWY4NDJjYiwgMHhlYjVlZjUxMSwKLQkweDk4NTlmZWI4LCAweDVmODJiNjhmLCAweDhkYzBmNTg4LCAweDc4YTQxNzU4LCAweDk0ZTM0MmQ2LCAweGMzZWNjZGY3LAotCTB4YzBjNDdkZTEsIDB4N2FkZmFjMjQsIDB4OTlmYmU2NmUsIDB4NTU0MmYzNTgsIDB4YzE4OGVmM2QsIDB4YTI0NzM5ZDcsCi0JMHhlYTI3NWU3YSwgMHg1ZjNhYTNlYiwgMHg4MjU5OTNlZSwgMHhiOWJmMDE4OSwgMHg2NzU0MmNiYiwgMHhmZmU0NmQ3YywKLQkweDViYmZjMDFlLCAweDY1YmRmNWUyLCAweDFmNjQzZTE2LCAweGM3MDBjZGM2LCAweGM0ZjkzZGIyLCAweDhlZjczM2JmLAotCTB4YzYwNTRiZmMsIDB4MWNmYzM5MWQsIDB4YTU3MTFlOTAsIDB4MTA5YzE3YzgsIDB4NWYyNTBlZjksIDB4ZGViNWQ0YTAsCi0JMHg1MzkyNzkxMSwgMHhiNjgxN2Y5OCwgMHhkMDIxZjMwMywgMHgzNzc0N2Q0YSwgMHhhMTQ5M2VkYSwgMHgxMjIzYzdlYywKLQkweDhlNzkwZmNmLCAweGJlNTBmY2YyLCAweDc4MzdkZWQxLCAweGMwYjQ2NGRmLCAweGFmMWYxY2ViLCAweDllZjkyODViLAotCTB4ZjkzZDYyZWQsIDB4NjE3ZDk2M2YsIDB4MzdlNjk3ZTAsIDB4OWRhMjM2MGUsIDB4OGY0YzZmY2YsIDB4YzM4ODc2YzAsCi0JMHhlZjEyYzNhYiwgMHg3NTNiZjk4YywgMHhmMTQyZmQwYSwgMHhlZTFmNzI1MSwgMHhkNDNiYWM4ZiwgMHgxN2JkNzU0ZCwKLQkweDk5ZmU3NTM0LCAweGZmNzQ4YzdkLCAweDk5YzdlMGI4LCAweDk3ZjUxODdkLCAweDQxYWZkM2Y1LCAweDk0NjYzMWY3LAotCTB4NGY1NTBlNDUsIDB4MThiODg0YWEsIDB4YzRkMzljZTEsIDB4NWRmMDU2ZTEsIDB4ZTA5NWIzZTksIDB4ZTgxZjRlN2IsCi0JMHhhZjM2YzQ2ZSwgMHhmMjg0YWIzYSwgMHgxYTE3MzVlZCwgMHg1ZjczN2ZkMSwgMHg3NmYwNzRiOSwgMHg2ZDE5OTdjYSwKLQkweGVhY2M0ZjE4LCAweDJlZGRlNzUwLCAweDk2ZmRmMmE1LCAweDdiZmM0ODJmLCAweDNkNThjZjRjLCAweDYzZjljN2M1LAotCTB4ZDYzZmM0ZjUsIDB4NWY4YTcwY2EsIDB4OWIyNjA2YWQsIDB4ZmI4NTNmYjEsIDB4ZjE2NTc5NDUsIDB4ZDM2N2Q4MjUsCi0JMHhjYzFmYzk2MiwgMHg1ZDhiNjQzYiwgMHg4M2M4MWI5MCwgMHg0ZjJlYzc1OSwgMHhhYjVkM2M0MCwgMHhkM2U0YWFiZSwKLQkweDQ2MzkzMzFlLCAweDZkYmYzZDIyLCAweGM4ZjZiNTdkLCAweGFhNTdkYTcxLCAweDhiYzE0YmFjLCAweGFkZWQyNzUyLAotCTB4NzNlY2FhYmUsIDB4YWE3ZDk3NzAsIDB4ZDZlMTk3ZGEsIDB4ZmNjMThmNzcsIDB4ZDM5ZWZlNjMsIDB4ZDJjZmIxNDYsCi0JMHhhODE1OWM5MiwgMHhiZWVmZTZiZiwgMHhhNTU3NzU0MCwgMHhiZmFlZWFjZSwgMHgzYzM1N2U0MCwgMHhlNDkwZTc0NywKLQkweDQwNTNmOTAzLCAweGM5NWFlZTRmLCAweDAyMmZhZmViLCAweGMyYjZkODNjLCAweGQ3MDAxZGZhLCAweDZjN2ViMGNiLAotCTB4NzhmZDYwZGIsIDB4MDM5NTk1ZmQsIDB4YjRhZGY1YTgsIDB4ZTU3N2JiNTMsIDB4NmRkZDZhMDgsIDB4ZWI1ZWE4MTcsCi0JMHg3ZjYzZDNlYSwgMHgxZWYzZDUyNCwgMHhmYWYzOWQ5NywgMHg1MjQ3ZjdhOCwgMHg5M2VmNWI1ZiwgMHhjNmJlNzgyMywKLQkweGRmNDBjODdkLCAweDk4OGZiODJiLCAweGI1MTc3ZjQ4LCAweGY4YzRjOWNkLCAweGFlNjNmM2UwLCAweDBlYmI4NDRjLAotCTB4N2M0MTZkZWIsIDB4MGY2MWRlNzEsIDB4Y2UzMTczYzcsIDB4NThlMWVkM2IsIDB4M2Y2ZmNiNjcsIDB4MmZmZGM0NmIsCi0JMHgxMWJmN2E3NSwgMHg3MTAwNjFmMywgMHg3NDRkNmUyYSwgMHhmN2MwYmFlZiwgMHg4NTE1YjZmNywgMHg1OWFmN2UyMywKLQkweGZmZmQ2YjE3LCAweDUzNmZiMTc1LCAweDIwMmFmYjE3LCAweGYyNDdhNDlmLCAweDU2YzczYTljLCAweGMyMzkwZjZjLAotCTB4ODllOTA0MTcsIDB4NGY1ZTRlNzUsIDB4NGQ5Mzk3NTksIDB4OTljOWI4NzIsIDB4NjgzZjNiMWQsIDB4OWUzMjg2YmUsCi0JMHhjZDhlYjBiZiwgMHgzZWJlMGYwOSwgMHhmMzQwY2QzNSwgMHhhMDljZjE1YiwgMHgxNTZmZWYxMCwgMHhlYTA2ZWNmYSwKLQkweDIxM2VkNmVkLCAweDQ3ZjNiNmZjLCAweDQ4ZGRmNDRkLCAweDk5ODVlZWZiLCAweGVhNWZjNDFkLCAweGIyYmFkYzdjLAotCTB4ZmRmODk5ZjksIDB4MTg0NGU3YmQsIDB4NzVmM2M3ZWIsIDB4ZDMxYzdjYWEsIDB4Y2I3YWUzZDQsIDB4ZDMyY2NkY2IsCi0JMHhjZTI5YzIzOSwgMHhiYjQwY2VlYSwgMHgzMTliY2RhZCwgMHhiNzA2Nzc3ZCwgMHg3ZTU0OGVlYiwgMHg5NTI3ODM1ZSwKLQkweGVhM2Q2MDhkLCAweGRlNjU3ZjcyLCAweGZjNjA3MmI3LCAweGQ5MWQzMjhjLCAweDk3M2VhNTBiLCAweDJiNjdhNjU3LAotCTB4NTZmMzNmODEsIDB4OTc1NGJjMTgsIDB4YTY5ZmQzMmIsIDB4NmM2ZTIyZmIsIDB4MjJhNWU0YjAsIDB4NjIzYTlmOWYsCi0JMHg1N2RhODRiNCwgMHhhYTdiMmY2ZCwgMHhiNzllMWIyOSwgMHg1Yzc2NDhkNywgMHg3N2VhYjVkNiwgMHhhM2VkYWQ5NSwKLQkweDE2ZmQ2OTUzLCAweGYxMjRlNTE5LCAweDUzZWZhMzIwLCAweGY4ZjNkNjdiLCAweGQ2M2NlZjdlLCAweGUzMGE1NGRjLAotCTB4ODJjZThlNTgsIDB4Njc5YjUxZjYsIDB4YmY0MzNlNDMsIDB4ZWY4NzliNDQsIDB4NGJiYmY2MTIsIDB4NDhjMWNmZDgsCi0JMHg4ZjljMDRkYiwgMHg3M2NhNGJmYiwgMHg0ZDI5ZmU1YSwgMHhhZjM2YmU5NSwgMHhmZGNhOTA1ZiwgMHhiY2IyODZhYSwKLQkweGRmNDgzOTc1LCAweGY2ODYzYTA5LCAweGQ4YWNhMWE0LCAweDlmMzQxMzk0LCAweGUzNGY1NTJlLCAweDYwZmFjMTFlLAotCTB4OTA3ZDcwN2MsIDB4NzViNTAxZDcsIDB4ZTVjZjQ1NDEsIDB4MDYzMTdmYjcsIDB4ZjQwOWJkZjEsIDB4NzczMWRhMzUsCi0JMHhlNDFmYWYzMiwgMHgwODc0NTJiZiwgMHg0ZTAwNDZmNSwgMHhjOTRkYmViZSwgMHg4ZWI3YmY1NywgMHgwYzVkN2M2NSwKLQkweGY2NzljYmY3LCAweGNiOWY5NDQ4LCAweGRlZTlmMDliLCAweDEzOWZjNDQ4LCAweGI1ZWExZWVjLCAweGNjNmIzOTIzLAotCTB4ZTgyNjhmYTgsIDB4MWRmYmYxMGIsIDB4NWFiYTUzYjcsIDB4ZDI3YWMyNjcsIDB4OGY1N2FmOWQsIDB4ZjIwOWVmYzMsCi0JMHg4NjNkMGZhNywgMHg2MTVlOWY3OCwgMHg3NzgwZmRhMCwgMHgwNjNlNWViZSwgMHgyZmY2MmJhZiwgMHhkNWQ2ZmE3ZiwKLQkweDgwN2Y3ODExLCAweGUxYjcwZjY0LCAweGJjNjJiMmZkLCAweDBmODc3ZTNmLCAweDIyNmNlOTMzLCAweGRjZmEwNzQyLAotCTB4OGY1M2E0N2YsIDB4Yzk5OGYzNzIsIDB4ZjAwYTlkOTUsIDB4NzUxMTRmZTYsIDB4YTc2ZTBhYTYsIDB4MzE0ZGI3YTcsCi0JMHhhYTRmZWUzMCwgMHhmNGJlZTZlYywgMHg3NDFmMjljZiwgMHhlYTlmMmRhOSwgMHhlZmI4NzE0NywgMHhhZjYwMzcyMSwKLQkweDFkODBmN2YyLCAweGIxZDgwYThiLCAweDRhYmY2YWVmLCAweGNmODQyZDUzLCAweDIxOGVjMDViLCAweGJjMjlkNjNjLAotCTB4YmZhNWFmM2UsIDB4MzdiZmQwNGUsIDB4MWU5YmQ0YmIsIDB4ZTc4M2ZiNDYsIDB4NGE3Y2EwYTgsIDB4YjhlZDNkYzksCi0JMHhjMzNlZjMwZCwgMHhmMDk3NWZkMSwgMHhmOTVlOTU5MCwgMHg2ZmQwYTk2ZiwgMHg3M2Y4YmRiMSwgMHg3YWY4MGFmNywKLQkweGZhZDUzN2RkLCAweDJkMzNhOWNmLCAweDUyMWZmZDRkLCAweDk3ZjExMjY3LCAweGUyNTI2ZjUyLCAweDllMDRkN2I1LAotCTB4YTE3NWY2OTUsIDB4NzdmM2JlMzcsIDB4NDM1YzY4MGMsIDB4MGQ2MGM3N2UsIDB4YWNjMzFkZmQsIDB4NDQ4NzNhMTYsCi0JMHg4MGUxOGVmOSwgMHg4Y2VkMTU5MSwgMHhlMmIzZmRjNywgMHg5M2FmMjZiYiwgMHg4ZjAzYTRmYywgMHgzN2YxYjVmZCwKLQkweDkzNWRmOGYxLCAweDgwNjcyNzg0LCAweDc2NDYzYzNkLCAweGFlOGYzOTVlLCAweDllNjNlZGFlLCAweGZiZTE2ZDZmLAotCTB4NDM1YjZiYzAsIDB4OTkxMmViOWYsIDB4Mjk3YmVkYzYsIDB4MzNlYTg3YWMsIDB4OThlZDdmNjIsIDB4ZTQ0ZWEyNWQsCi0JMHg1OTZkN2EzMCwgMHg0ZmJjYjc5OCwgMHg3NGI3OWMxZiwgMHhjYTA5ZmNkYiwgMHhjNTJmNWRiZSwgMHg2NjNjZWE3YiwKLQkweDNhY2I3OTZmLCAweDZhZmMzYmU1LCAweGQxZGY4ZWM5LCAweGQzMWU3NzVjLCAweDdlZTFmN2MxLCAweDRiZTYzY2RiLAotCTB4Y2UzYWVhYTksIDB4YWQwYjE0ODEsIDB4ZDEyNWRjYmYsIDB4OWQyNjRjYjksIDB4ZTdmNjg2YjMsIDB4NDI1OTIyYmYsCi0JMHg5YTNlZWJlZCwgMHhiYzc1ZTVjYSwgMHg2ZDNjODNhOCwgMHhmNGYxZmNlNCwgMHg4YmVkMTJhZCwgMHg5MGVkZWZjNywKLQkweGMyYmY0ZmVlLCAweDNhNzliN2JmLCAweGEzNmY3ZjhmLCAweGVmOTQzZGQ0LCAweGQ0MGU2ZTY4LCAweDNiM2JlODNkLAotCTB4ZTUxYmZiZTUsIDB4ZmJlNTFhN2IsIDB4MjM5YjI5Y2QsIDB4MDdlMjNjZTgsIDB4ZGNjOTJkMGQsIDB4NWYxMGY1ZWYsCi0JMHhmNjFlMmJmZSwgMHgzMGQwZjU4MCwgMHg1ZTRhMWY1NiwgMHhmZDE2YTc3NywgMHhiYjhkMmE2YiwgMHg0NzZmNzFlMSwKLQkweDI5ZmYwODZhLCAweDc4NDhlMzA5LCAweDVlZDQ5OWNmLCAweGE5YjM4NWUzLCAweGZhODE3OGVhLCAweDQ2ZTE3OGRhLAotCTB4NGJlZTNkZDUsIDB4ZGQ3YTM3NjUsIDB4OGRmOTQyMDMsIDB4MmRmZTcwMzcsIDB4OWJmY2YzZGYsIDB4NGQ2ZGQxNDMsCi0JMHgxNWYzZTg3OCwgMHgxZDQ0ZDMyYiwgMHgzODBlNzM1ZCwgMHgyNDVkZjFlYiwgMHg5MjRkZWJiNywgMHg1MWI3MmZlZCwKLQkweGY1NDBkZDNkLCAweDM2YWY0NTc0LCAweDczZjlmMTQ1LCAweDdiNGE3Y2M1LCAweGIzZDcxYTQ3LCAweGY5ZDA4NjRkLAotCTB4ZGM2MmE5YjIsIDB4MjgzMWQ5NDYsIDB4Y2Y0MWRhMGQsIDB4ODM5N2YzYTgsIDB4Y2JmOWQ0NWIsIDB4ZTdkNTVhNWIsCi0JMHhhOWY1MGM4NSwgMHgzZmM5MDNjZiwgMHhhNjFmM2VhNCwgMHgxZjNlYWZkMCwgMHhmNTA5Zjg2NiwgMHgzYjIzMzBmOSwKLQkweGRjYzNlN2Q0LCAweDdjZmFhMWY2LCAweGFiNzQxZjk4LCAweDVmYjc5N2YzLCAweDVlZjlhYTllLCAweDc3Y2ZjYmQzLAotCTB4N2UwZGNlMDIsIDB4NGYzNGM0YWUsIDB4NGU4ZDJlNzMsIDB4ODQ0ZDJlNzMsIDB4Y2QxYTVjZTYsIDB4ZGU2MjI4MzksCi0JMHhjZDFmNGYyYywgMHhmNWVhMzRmOSwgMHg5NzFlYjE1OSwgMHhiOGY1ZmQ3YiwgMHg0NGQ4ZmE2NywgMHgzODZmYWUzZCwKLQkweDU5NDhmNzNlLCAweDZkZmEzODRlLCAweGZmZDM3N2NhLCAweDk3Y2NmODIxLCAweGY0OGI5YWU2LCAweDViMWVhZDcxLAotCTB4YjFkNTdjODcsIDB4ZjMwMzJjMmEsIDB4MjlkNWFlMmUsIDB4ODNmMDNjNzIsIDB4YmU4OTIxZWIsIDB4OWQ1ZTJmOWIsCi0JMHhlNjdiZmI0MiwgMHgzZjI1MGMzNSwgMHhjODM5OGYyOSwgMHg2MzhjYWE0ZiwgMHg1ODczY2YyMSwgMHhkNmY1YzY5ZiwKLQkweDMzMDM3YWRjLCAweDZjY2JlMGM2LCAweGQwYTgxZDQ2LCAweDViMTI0ZDczLCAweDc5OGRlZGNmLCAweDM1NjFmMDIyLAotCTB4YmI1ODdjZTMsIDB4ZDUzNDU4ZWUsIDB4NTlkZDg1YmQsIDB4YWFjMTUxYzQsIDB4YjlkMjE3ZWIsIDB4NWQ3M2RhMGQsCi0JMHgzMThiNTg2YSwgMHhiYzU5ZTYwNSwgMHg0MWU0OWRhMSwgMHg2MjhiY2U3YiwgMHg5ZTYyZGM4NywgMHg3ZGY1MTZkYSwKLQkweDgxNzBkYjM3LCAweDFkNjc4OWNlLCAweGVlMzNiNDQ2LCAweDg2ZmRmNTU2LCAweGIzMmY1MTM0LCAweDhkY2EzYjMzLAotCTB4MTMyOGJlZWIsIDB4MDJjNTk3ZmEsIDB4NDgzNjczMmYsIDB4Y2UwZmFjMTYsIDB4Yjg0ZjY4NmIsIDB4MGVmM2ZhMGIsCi0JMHgyOTZmMTRjOSwgMHhjZTNkNjE3OCwgMHg3M2E1YzllMSwgMHhlYTFlMmZkMiwgMHg0NWYzZmU0NywgMHhjNzA5MmQ5YiwKLQkweGJjNzlhMmI5LCAweGMzNWRlOTIwLCAweDljNjU3YWYxLCAweDVmOWUzODZiLCAweDBhMzI3ZGQ2LCAweGE3NjFmMWJmLAotCTB4NWZjOGViMmYsIDB4MDg2ODFmMDAsIDB4MzYxNjZkZjksIDB4M2JjZjM4MjQsIDB4YzQ0OTYwYzcsIDB4ZGQ4NzhiM2MsCi0JMHhhNjcxNGM5MywgMHg3NTk1N2I4OCwgMHhjNzEwNGRiYiwgMHhlMjFmNjM0NiwgMHhlOTNlYmU1NCwgMHg0NmU4ODkyYiwKLQkweGZjMWJhZDI2LCAweGY4MGY3YzIyLCAweDlhYzcxNDNmLCAweGZhMTU2OTk4LCAweGNkNmQ2NzNmLCAweDNhZmFlODg5LAotCTB4NWY5MDMwMWYsIDB4MmM0Nzc3MzEsIDB4MWI3MzE1ZjksIDB4ZmU3ODhjNGEsIDB4YjE1ZGRjYzEsIDB4Nzk5NjdmYjQsCi0JMHhhZTMxYzcxYywgMHhiYTc4ZTg1NSwgMHgzMjYwZmYyMSwgMHgyNWI3M2JjYywgMHhlOWFiMmVjYiwgMHgxNzEzOGFhNywKLQkweGU4NTY5ZDM3LCAweGJhMGQ3OWQ2LCAweDFiYTI4Njc1LCAweGZkNzU0YmQwLCAweDE3ZTEzNGU1LCAweGZiYjE3YTA4LAotCTB4YmRmYmU4ZTMsIDB4ZmEwN2E1OGEsIDB4NjJlZmJlNjEsIDB4MGVmZDM4N2QsIDB4YzAzOGNmNDUsIDB4NWE2NGY1YzMsCi0JMHgyOWRlMmFiYywgMHg4ZTM1NzNlYiwgMHgyZmJhNzNhMywgMHhiYTI0Mjg2ZCwgMHhmNjU1ZTk2OSwgMHhlMzg2ZjNkZiwKLQkweGFmZWM1NWY3LCAweDhkZmQwYzUxLCAweGY2NmNiZWNhLCAweDViM2ViODU0LCAweGI5NTVmMmUyLCAweGZhMTk2YzY2LAotCTB4N2QwYTZmMzksIDB4OGI4OGJhZjgsIDB4MDQ1YzYxOGUsIDB4MTg5YmZjN2UsIDB4MmRmZjQxMTcsIDB4MDVmZDE3MTEsCi0JMHg0ZjY4MjJlMywgMHg2ZDA0NWM2MiwgMHg0ZmZmMzhhNywgMHgwMDYwMzM5MSwgMHg0MjkzZDdlMiwgMHhkNTVlNGViZSwKLQkweDMxOTNjYmYzLCAweGRmZjY1NjlmLCAweDgwZWExNjZmLCAweGI1M2MxMmU3LCAweDMzYTc0NjkzLCAweGY2YTFkOTM2LAotCTB4YTlhN2NiYTcsIDB4ODMwZWU5ZmQsIDB4ZWQzMjRjNjUsIDB4ODFmNWUyNmIsIDB4NTRkYmNlYjksIDB4NjZkZTk5ZTMsCi0JMHgxYjA3M2NjNCwgMHg0ZWI4MWY5MCwgMHhjNDY2YzdmNiwgMHgwOThjYzczYywgMHgzZmYxYWE3MSwgMHhmNTU1NGE2YywKLQkweDBjNWZhMDJmLCAweGViMjk0ZGYwLCAweDc3N2ViYWFiLCAweDdmNTUyMGM1LCAweDQyNDA2NWNlLCAweDk1YWY3MjNlLAotCTB4ZTIyY2U3OWYsIDB4Mjc5NGNhMjQsIDB4OWYwZGVhMDYsIDB4ZmE0ZjBmZDYsIDB4ZTlmYmMwMTEsIDB4ZDdkZDAzMTEsCi0JMHhlYmExNDNkMiwgMHhjYTNhY2RmYywgMHgwY2RiY2VkZiwgMHgzYjc5ODM2YiwgMHg1YzkxZTc5YiwgMHg4YTIyN2M3ZCwKLQkweGRjNjk4N2NlLCAweDA4ZGFmZjkxLCAweDYxZGU5ZmU4LCAweGE3NjRmZGEwLCAweGMyMWVlMjFiLCAweGVmNGZhYWYzLAotCTB4ZWZjNjg4NDgsIDB4MzI4ZDVjZjIsIDB4YjU5ZTkxZjMsIDB4ZTY1NTllOTAsIDB4NDU1ODY5MmQsIDB4YzczMDdmYmYsCi0JMHhmOTQ3NjYxYiwgMHhmM2RmYjM5ZiwgMHhmZGM3ZDJiOCwgMHgwNjQ1YjQwMSwgMHhlY2I4ZTNlNSwgMHgzZjQ0NDlmNSwKLQkweDdiNzdlMTA3LCAweDNmYzVlNTM4LCAweDA1OGYzMDM0LCAweDFkNzljYmZjLCAweDI1MGZhZTFjLCAweGIzZmQ4MGQ2LAotCTB4ZmZmNGVmZTEsIDB4NmU3MWMwMTEsIDB4MGU5NTczNjIsIDB4NDhmOTI4ZmQsIDB4ZTdjYmU5MDIsIDB4NWI3Yzg2NjUsCi0JMHhlNzQwZDRiMSwgMHg0YjdhMmYwOSwgMHgyNjdkOGFkZSwgMHg3YTcyYTVlNSwgMHgxZDNiZjRjYiwgMHhjZDE4N2I2YywKLQkweDQzODFiYWNmLCAweGRmZjJkYzYwLCAweDVlYjkzZDg0LCAweGZmYThiOWU0LCAweGY1ZGVjMWZiLCAweDhmOTEzZjgyLAotCTB4OGU2NThjM2UsIDB4ZTc5NjAyNTgsIDB4OTYzYTNlMWIsIDB4MDA5ZTc1NDAsIDB4NzA0M2JkM2UsIDB4M2JkNGJmZGQsCi0JMHhiZDgzYTVmYiwgMHgzYmNhYThmYSwgMHhmZGRhZjQ4NCwgMHg1YTU3MjQwOSwgMHhiOTFhNzdiYywgMHgxY2EwZjJkZSwKLQkweDE5N2QwMTQ4LCAweDlkZmUzMzkwLCAweDNkODMzY2Q1LCAweGFhZmE0ZWQxLCAweDU1ZjUwNTIwLCAweGU1MDMwNmU3LAotCTB4MTFkZTk5MTUsIDB4Y2Y3MGViY2QsIDB4ZWYyYjFmMTMsIDB4YzZkYmQ0ZTksIDB4NGQ5ZDdjMjAsIDB4ZTExZGY0NTksCi0JMHhkOTMyMGRkYywgMHgzZTNmZTQzYiwgMHhlYmUzY2JkZSwgMHhlMzBiYjI4ZCwgMHhlNDkzNGY3NSwgMHhjYjVkNzhjMiwKLQkweDBlOTZjYjM3LCAweDk4MTVkZmE3LCAweGQ5MTkzODg1LCAweDRmOWMwZjUzLCAweGE1MDc3NWUxLCAweDNmMGY3OGJmLAotCTB4NzQxNTlmZDcsIDB4MGUwZGE3ZTgsIDB4N2YwMzQ3NWUsIDB4NWY5ZjMyNWYsIDB4MjZiYzc3MzksIDB4ZjBhNzRmZmIsCi0JMHg4NzhiYTY2OCwgMHhmN2UwYzZmYSwgMHhjYjhmNjczOCwgMHhiMzY3NjdjNCwgMHgwMzI1ODc5YiwgMHhlZGQxM2YzZCwKLQkweGU4MjNmNjFkLCAweDczZDEzYzdmLCAweDcwZmQ4ZjQ2LCAweGViYzQ1NGQ3LCAweDBjODZkZDEyLCAweGFiYmExZWZjLAotCTB4NmU4N2JkZWQsIDB4N2EzZWU3ODMsIDB4MzEyNzYwZDYsIDB4ZmE0MDkxNWYsIDB4NDVmNmYxNjMsIDB4N2RmNzVmOTksCi0JMHgzZWYwNTgxMCwgMHg0OGU4Y2YzYywgMHg0YjlmMDA5MSwgMHgzMDYzMmQ2YywgMHgzOTgwYjA3ZiwgMHhmOGUyMWQ4NSwKLQkweDc5ZTBlZGIxLCAweDllMjZjYjBjLCAweDMwYWY3OGQ3LCAweDY3ZWUzZDZhLCAweDViYzlhNzliLCAweDEzYmUyN2JjLAotCTB4YTkyZTkwNWMsIDB4YTJlZDg0ZmMsIDB4ZjljNzRmM2YsIDB4ZjNjNzNkOWIsIDB4ZDJhN2YwNTksIDB4ZmJmMTZlZmYsCi0JMHg1N2RlOGExZSwgMHg2YjBkNzVmNCwgMHg3ZmE5ZjNhNiwgMHhmMDRkOWU5NCwgMHgzNGJjOTIyYywgMHg5YTRmMGVhZSwKLQkweDY1NTUxNTA2LCAweGNkNmFmMWUxLCAweDhhNWU2MTMzLCAweGU5NjA2ZDQ3LCAweGRkODBmYzgyLCAweDZlN2EzNmU5LAotCTB4NDdkOWYxYjEsIDB4MzIxNzZkOTEsIDB4NjY5ZjVmM2YsIDB4NmYwNjQ3ZGMsIDB4YTdhYjNmOTUsIDB4NmNiMmE5YmQsCi0JMHhmY2QyYjA2ZCwgMHg1N2VlM2IwNiwgMHhiNGU0Mjg1YywgMHhmYWYyNTliNiwgMHg2ZWM4M2FmOCwgMHgyY2YzMTAyZSwKLQkweDZiNTM3NjEwLCAweDIzZDg3YTlmLCAweGEwNWExZDhkLCAweDU5YWNiM2IxLCAweDVlMDE1NzZkLCAweDgxNWI5NzNhLAotCTB4MzNhNzBiNTcsIDB4YjBmMDhhMzIsIDB4Y2Y5Zjk5YjgsIDB4MWVmMmU1NTEsIDB4NGI3MDQ0OWMsIDB4MGY2NGEwNzYsCi0JMHg2NzMyMTY3OCwgMHhlM2FlMmM2OSwgMHg2YjhmMWUxOSwgMHhhYmFlZDNlMSwgMHg5ZDYyYmMwNywgMHhlY2FiYjg1YSwKLQkweDAxNzI3YzE3LCAweGRhMGEzZGZmLCAweDg3NTlhOWRmLCAweGJmYWQwZjQyLCAweGNhYTVkMGE2LCAweGQ1NWJmMWMzLAotCTB4ZGYzZDExMjYsIDB4MzIwN2VhYmYsIDB4ZjBhYTA3ZGEsIDB4ZmY4MTZiMGIsIDB4NGU3NzllYTksIDB4NzBiNjdkNDIsCi0JMHhhY2RmZTgxMywgMHhmYzI4ZmYwMCwgMHg0NGI1OThiNCwgMHgzMWQ0YmYyMywgMHhkNDk2MjM1ZiwgMHg3ZTVhZmFjZiwKLQkweGNmMGIzMjM4LCAweGU3NDYzYTY1LCAweDdkNTg1NTQ3LCAweDgwYjE3NGZkLCAweDFmZGZjZjQyLCAweDgwNDFmYjJhLAotCTB4YmU3OGI1YWYsIDB4MTdhZjVkMTYsIDB4MTFkNDRjNmYsIDB4ZDNjMDM5ZTgsIDB4ZmE2NGE3ODIsIDB4OWM2ODI3YWUsCi0JMHgyNDNkN2Y4OCwgMHg4ZjFlZDU0ZiwgMHhkNWNiZWIxMSwgMHhkYzNlN2U3YSwgMHhlYjc0ZTBiNSwgMHg1ZDI5ZWZmOSwKLQkweGZjNWVkZTEzLCAweGY3MGFlZmE0LCAweGY5YmRlOTA3LCAweDQyNjJmZDU5LCAweDlkNjUyOWU5LCAweDcyYmQwOGVmLAotCTB4YjdhZWZiNGQsIDB4YmVjOGM1ZGYsIDB4OGY5ODQ4MjcsIDB4NTc1ZjRkZTksIDB4MDBiZWJiMDksIDB4NjdiNDNjZWQsCi0JMHhlNzQwYmYzNiwgMHhlOWJmYmUyZSwgMHhkNTVmM2EwNSwgMHhkYTAyZWNmOCwgMHhmMzY2NzA5NywgMHhmN2YwODdiYywKLQkweDk4ZWNjZTIzLCAweGUxN2Q3NjQ3LCAweDc3NWQ4YTYzLCAweDg1ZmQ4MzE5LCAweDllNzNjZDkyLCAweGFmYzg1ZmY4LAotCTB4ZGQ1Mzg0Y2YsIDB4NGJiZjZhYjgsIDB4NDdhMDM5YzQsIDB4MzM2ZDljNjEsIDB4MTM2YzliZDcsIDB4ZDEwYmEzZDcsCi0JMHhmZDkyZTVmZSwgMHhkZGM3MDliYiwgMHgwOWJhZTU1NywgMHgzYWU4M2VmOSwgMHhlNmZiYzVkOSwgMHgwN2I3N2ViOSwKLQkweGI3ZWZiZGU2LCAweDJkMGY3NjkxLCAweDc5ZTNlMmQ5LCAweGVkMGY4YjY3LCAweDdmM2RlZDVmLCAweDBiYmY0NTM5LAotCTB4ZWI3OTFmMjUsIDB4ODdiZDhhYzcsIDB4NTc3YWVkZWUsIDB4OTdjYTA2NDIsIDB4ZjJiNWYzYjAsIDB4ZmEwYjBjZDYsCi0JMHhmYzJlYzIwNSwgMHgxNzNkZjFiMywgMHgxNGZlNGRmMSwgMHg0ZGJiZjdjNywgMHg2ZGVmY2YxYywgMHhkYzZmNzhlMCwKLQkweGQzZTI5N2QxLCAweDkyZmE5Yjc3LCAweDhlZWVmNTFmLCAweGY5ZWY4NDdlLCAweGU0ZGYwMWViLCAweDdlZDRkYjQ3LAotCTB4MWJlMDEzNTQsIDB4MzdjNDA0ZTMsIDB4YmY3NzM1YzAsIDB4Y2VkYmUwNGQsIDB4ZjFjNGRkZjEsIDB4NzZmMDM2Y2MsCi0JMHg3YWJjMGY3ZSwgMHhmYmY0ZmNlOCwgMHg4ZWNjM2RmZSwgMHhlMTg3YzE3ZSwgMHgzZTk3ZjIzZSwgMHg5OWQzMjlkYywKLQkweGE1OWY4YTY3LCAweGIxOWYzOWY4LCAweDFmZDFjN2U2LCAweGE4YmRmMDUzLCAweGVhMDg3ZmJmLCAweDdmOGQ4YTk3LAotCTB4MmZiYzQ2OGEsIDB4MjM5M2M5ZGEsIDB4MWNjZGYwM2QsIDB4MDc2ZmU4NDksIDB4MmZkNTdmZGUsIDB4MDg0OGNiMmEsCi0JMHgyMWJlOGJmMiwgMHg5Mzk4ZWE1ZCwgMHhlMWQ3MjNmNiwgMHg4MjQzNjQ3OSwgMHhiZjJiM2RmNiwgMHhlN2RkYTY1YiwKLQkweGM4ZjllMzZjLCAweDk5Mzc2NjMwLCAweGVkMzQ5ZTEwLCAweDE4YjlhZmVmLCAweGJjZmU3YmVlLCAweGY3NTk4NWRmLAotCTB4YWI3NzFjOTAsIDB4MTI2MzRmN2UsIDB4OWNmMDE5ZjMsIDB4ZDEyMmQ2MDIsIDB4ZTVkYTk2N2UsIDB4MTg4YmEzNGIsCi0JMHg0ZjVhM2Y5ZSwgMHhlMGNkYWM3MCwgMHhiYzJiYmQ3NiwgMHhiMmZjODMzYiwgMHhlZjFjNjEzZCwgMHhmM2FhZjE5ZCwKLQkweDZmZGQyNzg5LCAweGI0NTdmOThmLCAweGY5Zjg0N2ZiLCAweDc2M2M5M2M0LCAweDFhNGU2N2NhLCAweDJhYjkzNDMxLAotCTB4MmUwYmFlODgsIDB4YWI4OTczZjMsIDB4ZjJlNjAzMmUsIDB4YzZmZGY3ZjEsIDB4MDU4N2JlZDIsIDB4Y2VhODUzY2QsCi0JMHg0OTZkMDU1ZiwgMHhiZTVlZjhmMCwgMHhjMTliNWJiZiwgMHhiODUzOWJlMywgMHg5NzNjM2NhNiwgMHg5ZDdlZmM0OSwKLQkweGVhOGQxNzM4LCAweDUzOWI4MGI0LCAweDM3M2E0ZWUxLCAweGM5ODI1NGVmLCAweDhiYmFjZmNlLCAweGVmZmRmM2ExLAotCTB4YTY3MDdhMTYsIDB4MTNlZDIwZjksIDB4Y2MzYzc5ODcsIDB4YmZkNmU3OGEsIDB4YWIwMTQwNjksIDB4OGIzYzc1MzAsCi0JMHhlNGVjZjAyMSwgMHhlOTM1ZWVmNywgMHg4MzdmNmI3MCwgMHg3NzczZTQ0NSwgMHgxM2Q3MTU3ZCwgMHhkNTFkMDA5ZSwKLQkweDIzYjliOWU3LCAweDlhM2ZlNzQyLCAweDg3MjU1ZTA1LCAweDYxMGNlYTgzLCAweGJjMDQ3NzMwLCAweDM2MTllN2ZmLAotCTB4NmZlYzVkN2UsIDB4OWU4MDViNjcsIDB4ODVjZjNkNTEsIDB4MGYzM2FlNTMsIDB4YTZiNjBmM2YsIDB4MmI3ZGZlMTgsCi0JMHg3YTg0OGNlMywgMHhmYWE5ZDY0MywgMHg3ZjdlNDYzNSwgMHhjOWM0YzY3YiwgMHhmNjMxNDY5YiwgMHhmN2FjMDMwNiwKLQkweGYxOTRiZjQ1LCAweDhjNGU3ZjM4LCAweDRkNzVmNzE3LCAweGFjYTM3M2M2LCAweGFmODllYWQ4LCAweDQ3OTllYWE2LAotCTB4MzMyNmRiYzcsIDB4NzljNDNiZDYsIDB4ZmUwNDkzNTEsIDB4YmU2MDhmYTYsIDB4ZGY3ZGUwMTgsIDB4ODliOWY1NjEsCi0JMHhiZTc0Zjk3NywgMHg5M2FmMDA5YiwgMHgyMWJhNWNmMSwgMHhjZDljZmU3OCwgMHgzOGY3ODE2MCwgMHg4YzNjYTRjYiwKLQkweDdmNTY2YTRmLCAweDY0Zjc3ODMzLCAweDk0ZGU0Zjk0LCAweDhlOWQ3ZDA2LCAweDllNjNmOWMzLCAweGY5ODk5ODhmLAotCTB4MmNjM2MwNzksIDB4ZTcyZmRiM2QsIDB4NWUyMzdhNzEsIDB4ZWQxYjU2ZGMsIDB4MmE1ZWU4ZjMsIDB4MjUxNDdlZDEsCi0JMHg3YmQwYWYyZiwgMHg0ZjJmMjA2OCwgMHhlMDI5OWM3NCwgMHhhMjlhNzk4MywgMHg2ODYzNzlmMSwgMHg1MGNlMWQ3YSwKLQkweDhhMTZlOGUyLCAweGY5MDg5N2FmLCAweGU1YzhhMjVjLCAweDllNWNiNTBlLCAweDdlODIzYTQ1LCAweGM4ODkzZGM2LAotCTB4MGI0NTMzNTcsIDB4NmJmOWE0ZWIsIDB4NzM5NDdiYzQsIDB4ZjA2NGNmZDMsIDB4MGM5OWU5N2MsIDB4ZmUzODdmNWUsCi0JMHhjY2M3ZGYyZCwgMHg0NTQ2OWNmYywgMHhmOGMzNmIzZSwgMHgyN2ZiY2FmYywgMHhjMzMzYjY4YiwgMHhmMDJiZjM0YSwKLQkweDFmZjFmMzY4LCAweDdlNDM1OTZjLCAweGNjYjdmNTUyLCAweDFiZTkwN2M3LCAweGM2NDk3YmFhLCAweDdhODhmOWVlLAotCTB4NDljMjVmZTksIDB4NWIxYTY2ZWUsIDB4N2I5YmQ1ZmEsIDB4MWRjZTUzOGUsIDB4MDM3ZTYwYWMsIDB4NTUzMDBmYWYsCi0JMHg2Y2I0NzQxZCwgMHgyYjJjNzNhNiwgMHg5YWZiZmUyNCwgMHgxZTUxNDU1ZCwgMHg2YmU2MGM1ZCwgMHg4YWRhNDQwYywKLQkweGU5NzNmMzFmLCAweGZiZTcwOWRlLCAweGVlNjMyYjNiLCAweDYwN2U4NDliLCAweDRmNTFiNDQ1LCAweDdmMzFlY2U3LAotCTB4NDA1NjU2NTQsIDB4YzkxNjM2ZWYsIDB4MDQyMTRlNzQsIDB4NmViMTkzODIsIDB4N2ZlYjA2YjYsIDB4MjNiMGZmYmMsCi0JMHhhMjRiYjI4ZCwgMHg1MWQ3YjNmZiwgMHgwMmJiNGQxZiwgMHg0M2ZlYTdmNCwgMHgwZjEwMWQ5MywgMHhmNzEwMWQ3NSwKLQkweDdjZjRjM2Q5LCAweDhmODIwM2Q3LCAweGZkZTczZjNkLCAweDM3ZjcyODVmLCAweGU1M2FmZWYzLCAweGZmZGUxNmZlLAotCTB4ZThiZjMyOTksIDB4NWZkY2Q0NmYsIDB4NGJmZmI5YTUsIDB4NjI3YzRmZGUsIDB4ZmEwZjY0Y2IsIDB4YTU5Y2M1YWYsCi0JMHhlODk1NmUyYiwgMHgwNWNhMzU3NywgMHhmNmFjNTU5ZiwgMHg3NDJiN2UxMSwgMHhjYzViNzk3YiwgMHg2YjgyYmE3YywKLQkweDc0Y2UyYjhmLCAweDIxMWZhMzk2LCAweGExNDY3NTQ3LCAweGU1OTA5ZTlkLCAweDc1YmI0NzI4LCAweDJiMmJiYTZiLAotCTB4NTNjNWRhMTMsIDB4ZDYxMThmMjQsIDB4Yzk3YjhlY2QsIDB4NDVlYTRjNmUsIDB4YmUwYjk3MWYsIDB4ZjlmMWIyMmQsCi0JMHgzY2MzN2MxNCwgMHhiZjBiMzMwMywgMHg4NDdlM2NmZCwgMHg0ZjM1NDEyYiwgMHhmM2MwZjVmZSwgMHg3OThmNWI2YiwKLQkweDNjY2Y1ZDQ2LCAweGJhZjUyY2JhLCAweDg5ZTgzZjE0LCAweDM4NWRjNzZjLCAweDJlMWVkNjlmLCAweDA2M2RhOWY5LAotCTB4MzVlYzUwZjMsIDB4ZWFlMWZkZjEsIDB4OTg3YzhjOTYsIDB4YmI3M2M5N2YsIDB4ZWZkMGFhMzMsIDB4MWQ0MGZlMTIsCi0JMHgzYzdjYzNkYSwgMHhjM2RiODJlNywgMHhmMjRmZGI4ZiwgMHhkYWJiNzA3ZCwgMHhiZjMwNjM4ZCwgMHgzZGIwNmQwZiwKLQkweGNlMDVlOWFjLCAweGQ4OWQ0YzhhLCAweGQ3OTFiMDQ3LCAweGFiM2I5ZWM1LCAweGQxMmU3YTQ3LCAweDBjNzk5Y2I1LAotCTB4NTJhZGZiZWQsIDB4MTEyN2RmZTgsIDB4ZTVlYTlkY2YsIDB4NjZlNjhlNzcsIDB4OTBkNDNkNzIsIDB4ZWI4Mzk4ZTMsCi0JMHgzNDY0YzkyYywgMHhlODRkNjRiZSwgMHg5YjdmOWE3MywgMHg4NTcyZWRjOSwgMHg4NmYzN2JiMCwgMHg4MDZjOTk0NSwKLQkweGFlZTNjMmU3LCAweGFhYmZiODM1LCAweDFlNTY0YjZhLCAweGE1Njc4NWU2LCAweGZjYzkyZjE3LCAweDM3NmFiY2RhLAotCTB4ZjFiNmFiY2YsIDB4ZDU4NTZhYmMsIDB4Mzc5NDFjYmYsIDB4ZWRiMzNhN2IsIDB4NjMzYTUzNjEsIDB4OTE0ZGZmZTMsCi0JMHg3ODU5MTAzMywgMHhlOTRjMmNiNiwgMHg3NGI5MzliZiwgMHg2MTdiY2YxNCwgMHg0NzEzZGQ3ZiwgMHgzOWI5NDYxZSwKLQkweGZlNjBmMDg0LCAweDA4ZTBmODdjLCAweDU5MWQwYmQ0LCAweGU4MGIzYTkxLCAweDczNjk1OThiLCAweGFjZmU0NjllLAotCTB4ZGEwM2ZlMWMsIDB4MTYxNDUzMmYsIDB4Y2YwZTdmZDUsIDB4Y2M1ZjEzY2YsIDB4NDJhZTczNGEsIDB4ZTYzYzcxMzgsCi0JMHg1ZjQ2NWM0MywgMHgwZWIwNWRjMiwgMHhlZDMyYWJkNywgMHg4OTBkNzU1MywgMHg0ZWZjODU3NCwgMHhlOWUxZTA1OSwKLQkweGViZTEwYjRjLCAweGZkMTk5MDEwLCAweGU1MGUwNTE0LCAweDJmZTdlMGZkLCAweDlkN2NjM2Y3LCAweGUyODY1M2FiLAotCTB4YjRiZTRlNzcsIDB4ODU5OTZkYTIsIDB4ZDJmYmY3ODEsIDB4YmYwNDhmNWMsIDB4ZmFjNzUzYmYsIDB4NGRmMWE4NjMsCi0JMHhjMDU4NzhlMSwgMHgwNmU5MGRiMSwgMHhjYzk0NzNhZCwgMHhkZWYxNDExYywgMHg1NTQ4ZDJkNCwgMHgzODg0ZGE3ZiwKLQkweGQ3Y2UwOGU2LCAweGY1NTU0YjRlLCAweGFhZmEyYmNiLCAweDdmM2RkZmM2LCAweGM0ZmVlYTkwLCAweDdkNDE3ZjMwLAotCTB4YmJkYmJmOTAsIDB4ZTdlMWU0OWYsIDB4NDU0NTQ1OGYsIDB4YmZiY2JlZTAsIDB4MzZmNjdkYjcsIDB4ZDc3NDVlZmUsCi0JMHg3ZDFkYjI1MywgMHhiNjdiNDVkYSwgMHgwMzQ3OGRiZCwgMHhiMzlmYzQ1ZiwgMHg4ZGE0M2NhMCwgMHgxZDFmNjZmMiwKLQkweGQ3M2YxOTkyLCAweGFlMGZhMWMyLCAweGZlNjM5ZDBmLCAweDEwNzdmMTQ3LCAweDI5MDdhYjdhLCAweGNiMTJlZWYxLAotCTB4ODAxZGZhN2UsIDB4M2EwZjVkMWIsIDB4NDFlYTI5OTgsIDB4ZWQwZjJjNzksIDB4YjdmYWM1ZTEsIDB4Njc1NzZmMjgsCi0JMHhiNzNiZWJlNiwgMHg4YjRmOWY5YiwgMHgwNTdmNTNlNywgMHgzZTA3N2VmYywgMHg2NWUxZmU4OCwgMHg0YmI1ZTUwZiwKLQkweGZkNTM0ZjVhLCAweGViOTMyYWFjLCAweGE1YjRiYWU5LCAweGRkOGJmNDdhLCAweDE4MWRhMmQwLCAweDA2MmFmYTAzLAotCTB4Y2VkZmM1ZjgsIDB4N2RjMmVmMDYsIDB4ZGM1MTU5NmMsIDB4OTUzY2JmNWYsIDB4MmJlNDM4YjEsIDB4OTQzOWU3OWUsCi0JMHg1M2JmNGIxOCwgMHg4Y2E5YTRiYywgMHg4ZTVkZDdhZSwgMHg5NzVmZjlhMCwgMHhjZDRmYjRmZCwgMHg3NTQ0OTJmMywKLQkweDk1YTk4OTg4LCAweGM2YmY3MWFiLCAweGVlNGYwOGExLCAweGM0ZWY3ODMyLCAweDg2NTFkZGRmLCAweGM1ZGJhYjc4LAotCTB4OTQ0YzkxZjcsIDB4MGE1ODI4ZGYsIDB4MTk3MzRkNmQsIDB4NjY1MTNmM2QsIDB4MTdmMDI0ODcsIDB4ZmI3MDk3YzYsCi0JMHhiZTZkMTEzYiwgMHg0NmUwZjcxNSwgMHgyYmJiNDdhZCwgMHg3ZmZkN2QxYiwgMHgxOGM2N2E4NSwgMHhlNjI2N2E0NSwKLQkweDdlZjRkZGYyLCAweDNkMTM2NWY3LCAweDg4ZjQyNWRmLCAweDM1YzM4M2ExLCAweGFlOTNiMmZhLCAweDU5ZjBmYzJiLAotCTB4NzdlYWI2NjYsIDB4NGYwOTBjN2YsIDB4OTFmN2YxZTksIDB4YzY4YzFkMGQsIDB4OTAzY2JiOGYsIDB4YWZiZDY1NWEsCi0JMHhmYTc3ZjgwZSwgMHhjMjQzNWI1ZCwgMHhmYTVmYjRhNywgMHg0MmM5NzhkNSwgMHgwZjQ2ODg2ZSwgMHgxZTFmYWE1ZiwKLQkweGE5ZTg0MmMzLCAweGYxMTFlZmFiLCAweDVmZWExODQ4LCAweDcyY2NiZjY4LCAweDMwMTJkYTQ0LCAweDYzZDBlOTllLAotCTB4NGQ5OTg4NWQsIDB4ZmZlNDRmYjQsIDB4MDUzOGNkMDAsIDB4MDA4MDAwNzYsIDB4MDAwMDAwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg3ZGM1ZmYwMCwgMHhkNTU0NzgwYiwgMHgzOTllZjBiNSwgMHg2NjQ5MWU2NywgMHg5OTIxMjcyNiwKLQkweDRjZTIxMDI0LCAweGUwMTAyNDVlLCAweDBmMDgwNDI0LCAweDg2MDI0MGNiLCAweDA4NDAxM2E3LCAweGJjODBlODM0LAotCTB4MmIxMDEwMjUsIDB4MDMzN2U5NWUsIDB4NjBkMjIwNDksIDB4NDU0MDUyODMsIDB4NjhiMDUwM2IsIDB4YWFmOGZmNmQsCi0JMHgwMTMxZjVhOSwgMHhlOTRhMGZlNCwgMHg3YWI3YmQ2MCwgMHg1MjAzNmI2ZiwgMHhlMDhkNDUwNCwgMHhiMTZkY2ZlZCwKLQkweGJkYWQ2YmZlLCAweDMyNjczMjRmLCAweGZkZWRlZDQxLCAweGJlM2VmOWZmLCAweDNlZjY3NTlkLCAweDdhZjZiMWZiLAotCTB4YjMwZmI1ZWYsIDB4Y2I1ZDhhY2EsIDB4MGFmYjE4OGIsIDB4OTMxODEzN2YsIDB4YmIzMDJlOGUsIDB4ZGE2NjMyODYsCi0JMHhiMWVjYzY3ZCwgMHhiMjgxNjYzMSwgMHg5NmJlYTIzYywgMHgwNDZiNGYzMSwgMHgyZTQ5OTVhYywgMHgxOTIzNjMyMywKLQkweDM5NTBiNmZjLCAweGZiYzFkYjBiLCAweDYzMWY3N2NjLCAweDU3NmVjNjRlLCAweDRhNmRmZjE4LCAweGIxODMyYzY1LAotCTB4ZWQwNGRmYmYsIDB4MGZkZTdiNTMsIDB4ODUyZWEwMWIsIDB4OTY4YmMwYjEsIDB4YmJmODYxZTAsIDB4YzcyZmI2NWYsCi0JMHg4OWUxZjUwNSwgMHhlYzM5ZmFhYywgMHg1NTY3MGU0NywgMHhjZGRmYTFkOSwgMHhkYTE1YjI5ZCwgMHgzOTU1OWIzMSwKLQkweDlmZjgwNmVjLCAweDZmODJmZjM0LCAweDhiYTc3ZjM5LCAweDEyYjdmZmNmLCAweGZkZmQ4NGRiLCAweGIwODRjMjc2LAotCTB4N2VkNWU2MDcsIDB4OTIxMTg4ZmYsIDB4MzFkZmE3YWIsIDB4NjNiNTMzMmUsIDB4NTY3NWQ3NGEsIDB4ZDdiYWQ4Y2EsCi0JMHg2MDNiNWMxMiwgMHhjMWZiMzM3ZCwgMHg1ZWJiODAzMywgMHhiYTBmMDRiNSwgMHhhNDMzMzllOSwgMHg2ODM5Njk2MCwKLQkweDhlNzVmYTgwLCAweDhjMmY3Y2FlLCAweDVjN2FmZTVmLCAweDdlODMwZDg4LCAweDE5OTM4ZjVmLCAweGFlNTJmMzhjLAotCTB4YTVlMjBjNmYsIDB4MTU0MWY1ZmMsIDB4ZjI0YzA3MDYsIDB4YTBjYzhiMTUsIDB4M2M5YmE0ZGQsIDB4NWY3OWYxNjMsCi0JMHhhZjVlOGRmMywgMHhmOWM2MDI1NiwgMHgxOGE3Y2VmYywgMHhhZGJiYmRmMSwgMHg1NTI5YjVmYywgMHgyMjYyNDA4NiwKLQkweGM5NTRkNzc0LCAweDE2YzYwOGQ4LCAweDliMGQ5YjVmLCAweDZiOTJkOGMyLCAweDVhZmIwNGYxLCAweDc1YWJmM2Y4LAotCTB4ZGY3MDUzNjksIDB4NDk4NjZlYWUsIDB4NmM5NjNhYzMsIDB4MDE3ZDBjMzYsIDB4NzY1Y2M1ZDYsIDB4MzBmMDBmMzUsCi0JMHhhZGEyYzA3MywgMHg1MzM5ZTYwYywgMHg2NzdhZDIzMiwgMHhkNjBhNDkwZSwgMHg3MWRiZDM0MywgMHg3M2UwYzdiZiwKLQkweDY2NDg2MWQ2LCAweDNkYjk3YTZjLCAweGQ2ZjE4NDYwLCAweGRmYTg1MzVjLCAweDFhMmU2YmRhLCAweDY0YjVlZDZmLAotCTB4YjM1ZGQ3ODIsIDB4ZGFlNGI5NTIsIDB4Yjk2ZTdhNjAsIDB4ODAxZTY0NjYsIDB4MWMwMzVlOTcsIDB4ZGIyNzNjMDAsCi0JMHgzZmQ3MGFiNywgMHg0YTk2ZmViMywgMHgzNWI3Y2YxYywgMHg4YjY3ZDRhMywgMHg4MmIzMTdhNCwgMHg5MmY0MDU3NCwKLQkweGIzZDZkY2JlLCAweDA1ZjZmYWZlLCAweDJmZTg1NTMwLCAweGIyZjQ0YmM1LCAweDg4ZjJjYTE0LCAweDBlODI2NWZhLAotCTB4NTZiNmYxYTIsIDB4YTUzN2ZmZWMsIDB4NWY0MTFhOTcsIDB4M2NhMTZjNGIsIDB4NTRjMWUwMjMsIDB4ODU2ZWE3MTcsCi0JMHg3MTQ5NWNmOSwgMHg2Y2JjNDE0ZCwgMHg2ZmUzODA3OCwgMHg2ZTViYzk4MywgMHg3ODZlZjk4NywgMHhjZWMyYTBjNCwKLQkweGQ5NDczYmIwLCAweDMyZjAwY2FkLCAweGIzM2FkZGVhLCAweDE3NmU4MjJmLCAweDVjYzYxYjVjLCAweGQ3MzlmZWIwLAotCTB4N2RiY2E5NzIsIDB4YWUzMzZmYTAsIDB4NzliNWYxN2YsIDB4YThjMzRmMDIsIDB4MjM2NGQ2NjQsIDB4NDZkOGM1MWIsCi0JMHg0ZTE3NTdkYywgMHhiM2VmOTkyOCwgMHg3NTE3ZGY5OCwgMHg4NWVlZDNhMywgMHg2NTM4YmZmMSwgMHhiODhiZmFhMiwKLQkweDU1MzAyNTJmLCAweDljMDllMDRmLCAweDUxNjgyOTk3LCAweDJlYmNjMDBmLCAweDgxNDA1ODlhLCAweDlmNzNiOGFkLAotCTB4ZGYwMDA1OTEsIDB4NDFmNGExNGIsIDB4YjA3YjVkMDksIDB4MjkxZGU1OWQsIDB4OTJlZDhlZDgsIDB4MDRhOTI3OTgsCi0JMHgyZGViMDlmMSwgMHgwNTdjNjNlMCwgMHhjMjE5MmVmZiwgMHhmZDQyZjdmOSwgMHg5NjViMzMyNywgMHg4MWUwNzMxYiwKLQkweDg2NTUyYTc0LCAweDljZjI3ZTc1LCAweGJlNzgyNGM0LCAweDRlMWJmZDZhLCAweDk1YWIxZTU4LCAweDUwMjk2NDBlLAotCTB4Y2MxMGQxYmYsIDB4M2Q4YzQ5MzcsIDB4ZTJmNmZiMjIsIDB4ZDg1YTNlYmEsIDB4ZDA2NTZmZmEsIDB4ZjNjYjdjZWUsCi0JMHgwZDU3ZGMwZSwgMHgyODcyYWRhZiwgMHgwNTY5ZmIwZiwgMHhlZTYwMDY3YywgMHg2NTUyY2RhZCwgMHgyNmMzNDZkMCwKLQkweGExZWQwZDU0LCAweGEzOWU4ZDZmLCAweGI1ZjU3Y2U5LCAweGFiYTdhMjZjLCAweDJmYTE5Njc1LCAweGRkMDMxZDIwLAotCTB4NDE1YWYzZTIsIDB4ZmQyMTc3ZWYsIDB4YWNlYTY5NDMsIDB4ZTljOGY0MTQsIDB4NWFlYmEzNWYsIDB4NWFhZGNiOTksCi0JMHgwMDMwNjI1YiwgMHhiZmY5OWJmMywgMHhmNTAwZmU4MCwgMHhmMmE4NWY2YiwgMHgyYmJhNDQ0ZSwgMHg1MDc5YTgzMCwKLQkweDMyZmMxMWFjLCAweGUwZjgzYTUzLCAweGNmODNlNDU4LCAweDc4N2FkNDUyLCAweDU3OWFmOTNlLCAweGMxZjNkNzNjLAotCTB4YzY3NGZlNGIsIDB4YmM0YjE5ZjIsIDB4ZDVjNjkwYjYsIDB4ZTgyMmRmZTgsIDB4ZGZmNDg0ZGQsIDB4MmQ4M2RlOGYsCi0JMHhkOWZmZmUwNSwgMHg3N2ZmOWVkZiwgMHhkYjkwZjNmOCwgMHg2YmUyMTZmNywgMHg3ZmNhMWM5YSwgMHgzYjRiMDUyYywKLQkweDk0ZTRkMWQxLCAweGU3ZTkxOTJhLCAweGIzY2ZjYjliLCAweGQ1OWU3ZTQyLCAweDdkYjVjZmM5LCAweGI3ZjBjZmM4LAotCTB4MDRkNzg3ZTQsIDB4ZDg1YTU0M2YsIDB4MmUyMmRlMWQsIDB4N2JkYjY3ZGYsIDB4M2Q5N2ViZmEsIDB4ZWEwYjljZTksCi0JMHg3ODE5NzQzZiwgMHhmMzQzZmY3ZiwgMHhjYTViZjBmZSwgMHg4NmZkN2ZmZCwgMHg0MmFmZmY3MiwgMHg3OWNiNDdlZSwKLQkweDljYTFmZDA2LCAweGMyZDVlY2ZmLCAweGY3ODFlYTIwLCAweGQ0MDVlODE5LCAweGI4MjRhZjdiLCAweDQwM2QwYjBlLAotCTB4MzEzZTIyN2EsIDB4ZDAzZDIzNzgsIDB4NWZlNzdiOTAsIDB4N2YwM2QwZmIsIDB4YTNmZGJjNDMsIDB4M2ZhMzQwN2EsCi0JMHhmZTM0NWY4ZCwgMHg5YTIxZjhkMCwgMHg5ODdlMzQ3ZiwgMHhmMTM1MDNmZSwgMHg0MDFmZGM1ZSwgMHgxZmU0NjFjYywKLQkweGFlMGNmMDM5LCAweDUwOTVkNmEzLCAweGYxYTk3YzhjLCAweDBjMTdkYWQxLCAweGY0YmQ2N2M0LCAweDFlOWJlMDgzLAotCTB4MGJlYmQxM2UsIDB4M2UzNDFmOGQsIDB4NTZhNmY4ZDEsIDB4MjhiMmMzZjAsIDB4YjUyNjM4N2UsIDB4ZGUxNjNjM2UsCi0JMHgxNWY2ZWVkYiwgMHhmODdiNTNiOSwgMHhkMTczY2Q2MywgMHg3YTRmYTE3YSwgMHhjYjRmNDg2MiwgMHhkMjE4ZWE1MiwKLQkweDkxOTQyZDUzLCAweDgzZTk2NGY0LCAweGRmZGQ4YTllLCAweDEyNmU5ZThlLCAweDllOGViZmVkLCAweDZhNjZkYzJhLAotCTB4NGY0ODNmZjcsIDB4MzE5MWVlMTUsIDB4ZmJiMjY5ZTksIDB4NWM1NzY4OWYsIDB4YTk3ZGZiYWQsIDB4YjU3M2U2MGIsCi0JMHhiYmFjZTQxNCwgMHhiZmE2ZGU4NywgMHg5MGRkYjhjNSwgMHg3ZTkxNTc2MywgMHgzYWY5ZTIzYSwgMHg4MzAzY2MzYiwKLQkweDJiZWVkOGY1LCAweGQ0Nzg4NzU2LCAweDY3ZGI1MmU4LCAweDg2NTgwZWNkLCAweGI2ZTUwMDc0LCAweDljMmFlZjZjLAotCTB4YTA3YzQ3NmYsIDB4OTMzN2ZkNjgsIDB4OTZjZmI0NzcsIDB4NTNkOWIwOTQsIDB4ZDYxZGZiODQsIDB4ZWNiZWZmZTksCi0JMHg3MmRmYjVjNSwgMHhkZmRjNmI5ZiwgMHhkZGY4NmU0YywgMHhkMTdiNzRmZiwgMHgyNzJkOGVlZiwgMHg3ZDlkZmYwMiwKLQkweDdmMGU1OTlkLCAweDk0ZjA0N2Y2LCAweGY2MWUzM2Q3LCAweDY2MDI4N2U3LCAweGNiZjIyZjYxLCAweGZlYWQzMmJjLAotCTB4MTkxZTJkMzcsIDB4M2RmYzAzZTUsIDB4MzBmMDQ2OTYsIDB4YzM4MWUxMmIsIDB4MGFlMWQzODEsIDB4ODdmNGU3OTgsCi0JMHg1ODAzZWJiYiwgMHhhMjdjNzkzZiwgMHgwYzc5OGZlOCwgMHg4ZmZkYTdhYywgMHg2ZTE1YmMwZiwgMHhjMmRlZmQyNiwKLQkweDk0ZWJlZmYxLCAweGUwMjM0M2JkLCAweDExZWQ4MDUyLCAweGJjMTQ1OTcwLCAweGM4NzdiNzlmLCAweDdlYTE0YzlkLAotCTB4YTBhZjljODIsIDB4YzIwOTQzN2YsIDB4N2U4MjdmNWEsIDB4NTVmOGU3OTksIDB4YzUyY2YzYzAsIDB4M2VjMDc2YzAsCi0JMHhmMDM5NGJhZCwgMHg2Yjk0NTVjNiwgMHg3MDY2MDY2ZCwgMHhmZDgxZTA0NSwgMHgwNGM5ZWJkZSwgMHgyMGM1NzhiYSwKLQkweDdiMDhmZmUwLCAweGY4NWIxOTcyLCAweGI4NGY4NzAyLCAweGM4MTJkNGZmLCAweGJlMDJmZDE1LCAweDliNzQwOGQ3LAotCTB4MDkxZTBkNWEsIDB4NjY1MzViZmEsIDB4N2JiYjY2MDgsIDB4NWI4NGZiZTMsIDB4N2NkYWFiZDMsIDB4ZGZlYTU1NDAsCi0JMHg2Zjk0ZTY2NywgMHg2ZDFhM2VmNywgMHhiZDM2N2VmNCwgMHg4YjdjYjIxZiwgMHg2NzhmZTdmMSwgMHg3YjBjNjA5ZSwKLQkweDFmODIwZmY4LCAweDYzMTM0YTJhLCAweDRiNzc5ZmQ2LCAweDAxZDdmZjFjLCAweDQ3ODdjNmQ2LCAweGMxZmQ2MDczLAotCTB4NTk3NWZjMTgsIDB4MWEzNjE3ZjQsIDB4ZDZmZjNlMDUsIDB4MzYxNjc0ODIsIDB4NmJmZWY4NmIsIDB4MzI3YmUyMGIsCi0JMHg4Mjc0ZGQ2MywgMHgxM2UzMDM3NCwgMHg3ZmRjN2ZmYywgMHg3Y2M5MzZmNSwgMHg3YzI4OWViOSwgMHg2ZmJkNjhkZCwKLQkweDIwNTdjMGM2LCAweDM3MmNiZjZhLCAweDZlZTlmN2MwLCAweGJlZjNkMGI5LCAweGU4N2VmZjRiLCAweDRlZjVmYjQ2LAotCTB4ZGQwNWYxYWYsIDB4ZDhlOGQ0YWUsIDB4NDRmN2EzYTMsIDB4OTlmNDRiZDksIDB4MDI1MDYyOTgsIDB4YmQ2YjhmNDAsCi0JMHgyZmU4Y2Q3MSwgMHhhOWE3ZjBmNCwgMHg4ZTE0ZjEwYSwgMHg4N2E5ZTNkMywgMHgxNTU1Y2NmZiwgMHg0NDhmYjIzNiwKLQkweGU0MmVlYjdiLCAweGJiYjFhZjVmLCAweDZlYzdlNzNkLCAweDAyOWU2NmJhLCAweGQyOWEyYmMwLCAweDQxZDI3ZWY4LAotCTB4OGQ4MGFlY2IsIDB4MDllYTgyZTgsIDB4Nzc5ODhkY2UsIDB4NDZiNjNmMzQsIDB4ZjhhM2UzYzEsIDB4YzkxZmYwNTcsCi0JMHg4MDA3ZDQwZiwgMHg2Zjk0M2NhNywgMHhhZWNkNjcyOSwgMHhiMzUxM2EwOCwgMHgzMTNlOWUzOSwgMHhhNzk0NmFiMCwKLQkweDhlZGM0OWUxLCAweGQyZjM2NzBjLCAweGZhYTA2ZDliLCAweDFmYmU2Y2IyLCAweGUzODY1MTFlLCAweGE3YTBmMDIzLAotCTB4MmJmYTEwOWYsIDB4M2MyNmViMTEsIDB4ZDZkMTQ4MmQsIDB4MDMzNTUwNWQsIDB4ZTY0ZTE1ZDYsIDB4NzNiMmQzZjUsCi0JMHg3YjMyMDU3NywgMHg2NmZlZThlMCwgMHgwNTU0MTc2NCwgMHhjZmZiMjI4YSwgMHg1ZDc4ODMzZiwgMHhjZGU2ZjAyMCwKLQkweGViMDY3NDFlLCAweDRiNTA3OTM1LCAweDExZjQ0Mjg0LCAweDhiNTA3OTQwLCAweDRkZTg2MWY0LCAweGJkZDllOTFmLAotCTB4ZjUxMDMzZTgsIDB4ODM3NGM3YmUsIDB4YmY3YWIzZjcsIDB4OWY3YTg5ZWYsIDB4Y2RiZTUyOTksIDB4NjZkZjYyZmIsCi0JMHg2NTZiZWQ0NCwgMHg0NDU2YmVkNCwgMHgxYzFhMzVjMSwgMHg0ZDVmYzlkNCwgMHhkYjY5MmYyZSwgMHg3OTg0ZThkNSwKLQkweGU0MDQ3NWRjLCAweGU3YTQ4YjJjLCAweDc3Y2Y0NDUxLCAweDhlZmQxYTI5LCAweGJiN2E4MzNlLCAweDA4Y2I5ZTg3LAotCTB4ZjYyYWRkOWUsIDB4MTc2NjMwMmQsIDB4OTQyYTlmZWEsIDB4ZTA3YjYzYzMsIDB4MDg4NzI4MzksIDB4MTllNTViMWUsCi0JMHhjNmFmYTkxZSwgMHgzZGI5NDJlZCwgMHgzZjZiNDliZiwgMHg2YzJmZGE5ZSwgMHg5OWJiZmFkMCwgMHg2NDdkYjVlYSwKLQkweGQxNTRlZjgxLCAweGMzYjkwYWJlLCAweDYwY2UxMzAyLCAweGY4NTdlYWZkLCAweDNkMDdmNWZiLCAweDBmYzg2ZTY3LAotCTB4ZDk3ODUxMmQsIDB4YTIwNzA1MWYsIDB4MWFmZWVmZGEsIDB4ZjUxMGQ2ZmQsIDB4ZmFhOGU2ZmUsIDB4NWY3ODI4ZTYsCi0JMHg3ZmE0ZGMxNCwgMHgwMzUyZjE3ZiwgMHhhMDYyZTFmMSwgMHg2ODg4ZGMwNywgMHg4ZmE2OGNiZSwgMHhlZGJiYjM4NywKLQkweDZlN2Q2ZTljLCAweGE3N2Q5MWIwLCAweGY1ZTlhYmUzLCAweGUwZmM3ZTFjLCAweGEyYTZhYWNjLCAweGQ2ZmIzODA4LAotCTB4ZGZmNzAwYWEsIDB4MjY5NzQ4MGQsIDB4NzMyMDdmYzYsIDB4ODNkMDEyMDMsIDB4ZjliOTBmYTksIDB4YjJlOGJlODMsCi0JMHhmM2RmNWEyMCwgMHg5ZmUxM2ZmYSwgMHgzMzJmNjgxOSwgMHg0YzcyNWQ5ZCwgMHg5MmVkYzNkMiwgMHg2NzQ1ZWYzNiwKLQkweDQzZTExNjM2LCAweDQyYTlhZTBkLCAweDVlZmE3YTdmLCAweDlmYzBiYWZkLCAweGFhYzJmMDE1LCAweGJiMDhjYzhhLAotCTB4Y2FhMGIwMjgsIDB4YWQ0ZWIxMTMsIDB4YmYyZjk0ZmQsIDB4ZTdiYzcwOTIsIDB4MWQ1NDE3YjMsIDB4NDk5YWZhODIsCi0JMHg5ODNhYmNhMSwgMHgyZjMyNGQ2NywgMHhhODRhNWY0MSwgMHhmODg5ZDdhZiwgMHgyNTU3OTRjZCwgMHg5YWNiZWEyZiwKLQkweDg2ZGU1MGY4LCAweGIyNzU4OGEyLCAweDY3NWM3Y2Q2LCAweGVkMTJmZGZiLCAweGY2MWVhMDRmLCAweDk4YjRmMDA3LAotCTB4OGYwYTIzODEsIDB4MzMxZTY0ZWUsIDB4YzRmYTgxY2IsIDB4YzI0ZjRkYzQsIDB4OTdlZWM3N2IsIDB4N2U5ZWExMzYsCi0JMHgyNzNmNTM3ZiwgMHgzOWM5NDNmYSwgMHg5NjNjZWVkYywgMHgxOTczOTM3OCwgMHg3NzA5ZWRjMCwgMHhkZjZkYmM5MCwKLQkweGEzY2E5OTNlLCAweDk3NWI2NzkyLCAweGQ5ZGJkOGMyLCAweDg1NmNhYWFiLCAweDc4NDg5ZjU4LCAweDY5NzA3ZDNhLAotCTB4ZWZhMDE2ZDUsIDB4N2EyZWQ5MzMsIDB4MzhhYzk3ZGYsIDB4ZGVkZWQwZGIsIDB4NWQ4NzYyNjEsIDB4ZTI5NTJmMzgsCi0JMHg1YTc3OGI0OCwgMHg3Y2UwNzc4YSwgMHhhMjcxMGNiNiwgMHg0N2U0YjlmZCwgMHhhMDMyNTM1NSwgMHg5MzQ2OTJkZCwKLQkweGE3NTQ3NjhhLCAweGY5YzJjOTUxLCAweDM2NGM3NmY5LCAweDA2ZDJmZDYzLCAweGExNmUwNjUxLCAweGZmYmZmNWYyLAotCTB4ZWQwMWRlYTQsIDB4YTgzNzFlYmIsIDB4Y2RmZGExMDcsIDB4MzViZWI0NWYsIDB4NGQxNWUwMGMsIDB4ZDE2ZTJhMzksCi0JMHgyODA3ZTA2YiwgMHg3ZGI5Y2UzMCwgMHhkMDEyODI4MywgMHg3NTcxMDdlNSwgMHhmNmYxNjYyNywgMHhiOGFmZGIwYywKLQkweGFiM2QzYWVlLCAweGNhNGJkYjE0LCAweDAxN2Y2ODU2LCAweDdjZmRhMzllLCAweGEwZTkwMWUxLCAweGIwZTVlNzAxLAotCTB4NDk2MDFiYzcsIDB4MTQ2NGJlMTcsIDB4NjhkMGI5Y2YsIDB4ZWU3YzYyMDksIDB4ZmI3N2NkOWMsIDB4OWY2NzFjM2UsCi0JMHg3NjdkMmQwOSwgMHgxODcyZTBjMSwgMHgxZDlmMGYwMCwgMHgzZDJhYjdiYywgMHhjNDViOWYwMywgMHhiNDliZGVmZSwKLQkweGQ4YjBmMDE4LCAweGE0M2Y0ZGQ4LCAweDcxMjc5NjRmLCAweDdiZWNiM2Y4LCAweDNhYzMwZWFiLCAweDg4MzIzYzJlLAotCTB4NzIyYjU3ZTIsIDB4ODBkOTVkM2MsIDB4Y2Y1Y2MyYWYsIDB4MTA3ZTU4ZTcsIDB4ZWJkNmY1YzcsIDB4NDBlZTk3N2YsCi0JMHg5N2Q3ZmUzYiwgMHhiZTkxMzg5NywgMHhkNmY0MjZmZSwgMHgzODk2ZDc2YiwgMHg1NWQ4NDQ5NywgMHg4OTkxM2ZjYiwKLQkweGJiMzc1ZTBlLCAweDVmN2NlMjM2LCAweDQwNjgxZjhmLCAweGEwZTgxYjNmLCAweDk3YzljNjFmLCAweGU4MDViZjBhLAotCTB4MzFmM2QzNzksIDB4Y2Q3ZmFiZWMsIDB4ZGFiZjY4OTYsIDB4ZGUzYTkwN2YsIDB4NmRlYmEzYTUsIDB4ZGZjOGE3YTQsCi0JMHg5M2Y2ZDgwMCwgMHhhMDAyYmJhZCwgMHgzNjViY2ZkYiwgMHg4ZTUwMGZiMSwgMHg3MTQ3ZWU2ZCwgMHhjODRjYTVkYiwKLQkweDgyZTI2NzgxLCAweGY0YjE1N2U4LCAweGY4YzhmY2Q2LCAweDhhMWYzNzRkLCAweGQ4MGM3ZmY2LCAweDg0N2ZhZjA5LAotCTB4ZmRmN2U4ZjYsIDB4NzYxZmYwMzEsIDB4N2VkZGViNjYsIDB4NDAxZWMzODUsIDB4YmI0M2UyZTMsIDB4NzhmZGM2NWQsCi0JMHhiODVmZjY1ZiwgMHhmZTViZGUwZiwgMHhjMGY0ODliOCwgMHgzNzUzYzdmMiwgMHg0MGI4ZTE3NywgMHg4YjU3MTgzNywKLQkweDFjODJkNzVlLCAweGY0NjM4ZjEzLCAweDg3ODE5N2M1LCAweGZlNzQyYWFiLCAweGJmMjRjM2NhLCAweGZjY2JlMmZiLAotCTB4NzU1NDNjOWYsIDB4NWYzN2Q2YzgsIDB4N2NiODUwYWUsIDB4YzliOGYyOWEsIDB4NjJiNGZjOGIsIDB4YTA2NjVkYTQsCi0JMHhmZTNkMjY0ZiwgMHhjZmM0NjFjNiwgMHgyNTcxZjU4YSwgMHg4YWY4OTgxNiwgMHg1ZmI0MmRjNywgMHg0MDdiNzY5ZCwKLQkweGMzOWY3YTgxLCAweDU5NDEyNzJlLCAweGQ2ZTVjMzlhLCAweGVkMTcxY2JjLCAweDY0YzRiOTczLCAweDBkOTUwOTZiLAotCTB4ODJiZDZmMTgsIDB4MmY4MDBkZTEsIDB4Y2Y3ODdhNmQsIDB4MjNlNzE4NjgsIDB4MWEzNzljMTYsIDB4YzNjNTc3ZjAsCi0JMHgwYmNhZjRlOSwgMHg5OTFkYzUxMiwgMHg4MjY3OTFlYywgMHhiOGM5NWNiYywgMHhmOTNkYTg5YywgMHhmYzIyNzliYywKLQkweGM1NmViMmI5LCAweDU3MDdmNDBjLCAweDNhZTc0ZDA1LCAweGYxOGUwZjg1LCAweGY5YWM3NWQ4LCAweGVhMTg2OTczLAotCTB4YTI3M2ZkNTcsIDB4ZjNkNjI3MDQsIDB4NDlkNjFhZGYsIDB4MzViNmEzNzIsIDB4ZGFlYmZiZjYsIDB4ZTQ2N2NmZjQsCi0JMHgwYzJlNTNkOCwgMHgyZTQzMTg2MSwgMHgyYmIxMGMwMSwgMHgwNjdjYTY3NSwgMHgwMzYxNWM0YiwgMHg5NmY1ODJmZSwKLQkweGJjZDAzN2VmLCAweDgyOTI2YzU3LCAweDc5Nzc5ODE2LCAweDNlMmYxZTNmLCAweDM3ZmQ4N2VmLCAweDBhMDNiYWQzLAotCTB4NzM3NjJiYzAsIDB4MTk4MmIzYmQsIDB4ZjNmODU2ODIsIDB4MjllYmZkOTYsIDB4Yzg0Yzc5N2UsIDB4ZTYwNmM1OTksCi0JMHgyMGZlZmE0NSwgMHgzZjQyY2Q0ZSwgMHg3MWUzZjk3ZiwgMHg0ZjE1ZGY4NCwgMHg0N2I3ZmFhYywgMHgyZGNlYmRlMCwKLQkweGZkMjI1MzMzLCAweDE3NDgyNWVhLCAweDlhY2NiZjFjLCAweDg3Y2ZkM2RjLCAweDg1OWZiZTViLCAweDYzZmU1ZmY0LAotCTB4M2Q2MThmZjAsIDB4MmZkODkyMmIsIDB4YmY3MWI4MTYsIDB4YjY1Y2IyMzIsIDB4YjYyYjc2OWUsIDB4ZGJjZjlmZGUsCi0JMHg3ZTBkN2Y4MSwgMHgyNDA3ZTJmNCwgMHhkMTdiMDc1YSwgMHg3ODEwN2E0MiwgMHhkYmM0ODk1ZCwgMHg2NjkzODZkMiwKLQkweDViZmYxMTczLCAweGRhZmIwYTcxLCAweDM5YmM3Mjg1LCAweGU3ZmJjMTJjLCAweDExYjI1ZWEwLCAweDExOWQwMmZlLAotCTB4YjAzYmYyNzEsIDB4MjM5MjBjYWYsIDB4OGQ1ZjVjM2UsIDB4NmNjNzcwZDEsIDB4OGNjYmE3ZWEsIDB4ODczM2JkN2MsCi0JMHg0NDFiNDNjNywgMHhiZDRiMzhiOSwgMHgwZmNmZTI5ZCwgMHg2ZWFkZDQ1YSwgMHg0YTM0OGZkZSwgMHhiYmZjMDNjYywKLQkweDM5Nzg2MzVhLCAweDJmZDk4MWM2LCAweDU5NTcxNDJkLCAweDg5ZTcxMGQ3LCAweGUyM2Y5MDczLCAweDVkZmEwZTc5LAotCTB4OWNkOTMzMjcsIDB4ZmE3MmZkOGMsIDB4NzJlMmUzNWIsIDB4MmJiZjllMDMsIDB4M2I1YWYzYzMsIDB4NDliNThiOTcsCi0JMHg5N2FlNmY4MCwgMHhmZmU4NDYzZCwgMHg4NzJiZmMzMywgMHhhYzMxOTdmNywgMHhmMWVlZmRlNywgMHg4NWY1M2QwZCwKLQkweGZkNWYxMGMzLCAweDNjZTM1NWU2LCAweGRmMTEyZTdlLCAweDJjMWUzMjAyLCAweGU3ZWVmYjQzLCAweGFiZjQwOGQyLAotCTB4NmM3MDNmMTcsIDB4YmJkOWNhMGEsIDB4ZjA1NjJkOWUsIDB4ZjhiZmM1ZDUsIDB4YmI4OWU5MWQsIDB4YTI3NzNlYzQsCi0JMHgwMzdhOGY5ZCwgMHg3Y2ExNjdlMCwgMHg0NWNiODczMiwgMHg0MmUzYzQ5ZiwgMHg2ODdjMGE0ZiwgMHhkN2Q1YWRmYiwKLQkweGYxZTI2MDNlLCAweDI4ZTc5MDc5LCAweGZjYjc2YTQwLCAweGI1YWRmYTllLCAweDY3Mjg5ZDg3LCAweDhkMzQ1ZjZiLAotCTB4OTRmYzc5NDIsIDB4MmQ5MmZmOTgsIDB4MGJiZmM3MDMsIDB4OTRjNGIzZjQsIDB4NWE1ZWEwYTgsIDB4NDY2OTk4MTMsCi0JMHg4MThiNGQ3OCwgMHg1MmY3OWVlMCwgMHgzZjFlOTBiMywgMHg4MWM5Nzg2ZSwgMHg1YzQxZjI3NCwgMHg0ZmY1MGYyOCwKLQkweGY1MzhmYWQ3LCAweGUxNDAyZTIwLCAweDFiOGZiOTcxLCAweGZjNjIwZWYyLCAweGI2MTJhOTY2LCAweGU5N2VhMDFiLAotCTB4OTQ2NDljYzYsIDB4MjEyYmVmZDMsIDB4ZGZiZmQ2MzMsIDB4ZWMyMjM2ZWEsIDB4MDhmMTk0NTEsIDB4MDRlMWU0N2IsCi0JMHhhYjIyMGM3ZiwgMHhjYTBmZDA1NSwgMHhiZTA2YjU5OSwgMHgzOTllNmI5ZiwgMHhmMTg2Y2U2NiwgMHhmZGMzOTM3ZSwKLQkweGZlN2U0ZjliLCAweGYzOGM3Y2JiLCAweGYzODU2NmQ0LCAweDdlYzA3ZjUxLCAweDNjNDAwZmU3LCAweGZkMjA2ZDNmLAotCTB4YzkxOWY2YmIsIDB4NjdhYzM3MTMsIDB4N2VlMmQ3YmYsIDB4MTZhZDdmMDMsIDB4ODVmNmJjZmIsIDB4YmE0NWVlOTcsCi0JMHg1ZGZiOGI1ZiwgMHg4MDVlOWJkMiwgMHhmM2QzOGY2ZSwgMHg2MTRjMGVlNywgMHg0OGUzZmRmYywgMHgwMmJlOWExNywKLQkweDhjOTRjMWI4LCAweDlmMGUzYTcxLCAweDAyZmNlMWNlLCAweGYzZjgyYmNmLCAweDRiYzkxMTQwLCAweDY3NjgyMzkwLAotCTB4NWY3YmQzNDYsIDB4ZDhiMWZiZmIsIDB4MmM1YjI1YmYsIDB4MTYzZjU3MjQsIDB4YzBmOWRiZmIsIDB4YmZkYzBlOGIsCi0JMHhlYzdlN2U0ZiwgMHhkNGEzOWUwNCwgMHhkOGRhMDczZSwgMHgwNWVlODMxNSwgMHhmYWUxZDYzZSwgMHhiMjdmMzQxZCwKLQkweDdhZTFkNjIzLCAweGVmZWIzZDFkLCAweDZmYzE3M2E2LCAweDlmNWYxOGViLCAweGIyNzVkZWI2LCAweDJmNTZiZjU4LAotCTB4ZDYyY2JmZGUsIDB4N2MwOTg2YjksIDB4ZjM4ODMwYmQsIDB4ZTQyN2UwOTcsIDB4YjRjN2I0NTcsIDB4Zjk5MmY5ZjUsCi0JMHgyNjdkMWFmYiwgMHhmZmI5NzJlNywgMHg5OWZmMjEzNywgMHhmYzQwZWFkMiwgMHg5Y2EyZmVlMCwgMHg5OGYxZmEwMSwKLQkweDAxYjkwOTQ3LCAweDE2NzkzZTRkLCAweDVmYjExZmU2LCAweDczYjNmY2RhLCAweGFlNDAzY2Y5LCAweDdiOTI5Mjc5LAotCTB4YzhkM2IxZjYsIDB4YjczYWM2NTYsIDB4NzhlNWM4NGMsIDB4OTY5OGRiM2MsIDB4ZmJmODA2ZDUsIDB4ODkyYmZjMTgsCi0JMHgyMzk1N2E3MSwgMHg0NmU4ZDNjNiwgMHg2N2ZjYWYxYiwgMHhkZDcwZDM1NSwgMHhmYjA4N2ZkMCwgMHgzZjdkYzZkNywKLQkweDNmNjMyMDkwLCAweDFmY2UzM2VmLCAweGJlMzVmY2RhLCAweDM0NWZhZjJjLCAweGVkODFkOGFkLCAweDE0ZTdiMTNlLAotCTB4ZGQzOWJhZTEsIDB4NTQyYWU3NjYsIDB4ODAyZWQwN2EsIDB4MDY2ZDNkZjcsIDB4MTU5ZjRmOGEsIDB4YzZkOWZjZmUsCi0JMHg4YTRiMWM5NywgMHgyNWRkZTg3YSwgMHhkOTNmOGRlNiwgMHgxYTllN2JkOSwgMHgzM2QwNDVmZCwgMHhmYjdjYjNjZCwKLQkweDZiMDg2OWZjLCAweDRiYTY4ZGYzLCAweDdkMWE2ZjBkLCAweDY0YTljZGIyLCAweGU5ZDM0NGFmLCAweDY2YjNjY2JhLAotCTB4YjlmYTJmMWMsIDB4ODA3Y2I3NjYsIDB4ZmZlNDE1ZjEsIDB4ZjJlM2M2NTQsIDB4NmU3OGVjMGQsIDB4OWY4NjNlODQsCi0JMHhkMWVhOGQ4ZCwgMHhkNzljOWEwZiwgMHgxNGJhZjNmNCwgMHgyZmMyMjVjZiwgMHg0MzcwM2EwYiwgMHg1MzY2ZTczNiwKLQkweGM3Mjk3N2JmLCAweGZkZTAzOWI3LCAweDc0YzNlNzMxLCAweDg3ZDlhYmZlLCAweDkyMTE3ZjM3LCAweGY0OGUzMTEyLAotCTB4NTIyNGJiODIsIDB4N2NiOWFkY2YsIDB4OTZiNmU4OWMsIDB4YmZhMWI3ODUsIDB4ZGY4MWY4YjMsIDB4ZjQ4ZDFjY2QsCi0JMHhjZTg5OTRmOSwgMHg0ZTM3MTY1YiwgMHhiZGRkYTMzNiwgMHhhMzlkZjBlYSwgMHgzNWNmZGY3MCwgMHhhOTc2M2Q3MSwKLQkweDY4OTNlNDYxLCAweDdhNmI5ZjM3LCAweDExNjc3OWQ4LCAweDY1M2U1N2JlLCAweGJjNWYzYzJjLCAweGY1ZjY5OGFiLAotCTB4NGNmMGI4ODMsIDB4OTFlZWJiODQsIDB4NmY3ODQxZDgsIDB4OWI5MWUxZGMsIDB4Y2UzYzAyMTcsIDB4YWUxMjUzN2UsCi0JMHg1MjQzZmRlZiwgMHgzYTA4ZDhjNSwgMHhjZDk0Y2E1OCwgMHg5MzRlZDEwYiwgMHg4YmU0MTUxMywgMHhhYjNjODVmNywKLQkweDVhN2RmMTM3LCAweDUxN2ZlODJlLCAweDQ1ZjNlNzJlLCAweGViY2I3ZjYyLCAweDdjZjFmM2ViLCAweGM4MDBlYmJjLAotCTB4OGQ2M2MwNTEsIDB4YzIxYWQ1ZDksIDB4MjM0ZDVmNzEsIDB4ZDgxZDdmYmIsIDB4NzRjOWU5MDgsIDB4ZDI3NjRkNGUsCi0JMHg2NmIzMzM0YSwgMHg2YjczZDA5NCwgMHg2OTNmM2MwNiwgMHhlYjgzZGYwYSwgMHhiZDhmNzkzOSwgMHg1OGUyMGI3OCwKLQkweDA5NmEzZWJhLCAweDVmODk2ZmI3LCAweGYxYTVhZWMwLCAweDMxNjhlZGJiLCAweDJlODI2NThmLCAweGRlZDNmYmEzLAotCTB4MWViYjQwZWYsIDB4ZmY5ODllZTUsIDB4ZTZhNzg2YTUsIDB4NzRiYWJlYTEsIDB4ZDcxOTJmMjQsIDB4NzFhYmUxZmYsCi0JMHg3Y2RmNjg0ZCwgMHg0YzcyZTI2OCwgMHhhZWVjMWZlYiwgMHgxMWY2OTFmMywgMHgxODNhNWJkOCwgMHgwYzFkMmFlYywKLQkweDZmNWU3NWY0LCAweGJjMjU2ZDhmLCAweGI3YWI5YmRjLCAweGFkM2EzNGFiLCAweDE4OTc5ZjU5LCAweGNiZDAxNzk5LAotCTB4MGE0M2ZlZmUsIDB4OWNmN2ZmOWQsIDB4NjQ0ZThjYmYsIDB4Nzc0MmU0MzEsIDB4ODgwZmQ1ZGMsIDB4M2M2YzY3Y2EsCi0JMHhjZjE4ZmFkYSwgMHhmOWYyZjg0ZCwgMHgyZGRmZGEzMCwgMHhlYjAyYzUxNiwgMHg4ZTc0OGYzYywgMHg0YTJmNGJlNywKLQkweDcyYjdlZWRjLCAweGUyZmYzZmJhLCAweDc3ZmEyMDg4LCAweGUxYzBmZmNiLCAweDIwODZhZGU1LCAweGRmMWVkZDFlLAotCTB4ZjZjMjVkYjUsIDB4NGJlZWMwY2IsIDB4YjNkODQ0MzMsIDB4MDNjZDc3YmIsIDB4NTQ1NzY3ZjIsIDB4NjgwY2I2ZGYsCi0JMHhjZjA4ZTU3ZiwgMHg1YjZhODA3NywgMHgyMjdiMWQ5NCwgMHgxZGI3ZDVjMywgMHg1ZmI2Y2ZmYiwgMHg2MWMwYjhiNSwKLQkweDUzMmFkZjBkLCAweDllMWFkZjExLCAweDc1ZTY3ZjM1LCAweDkyYjI4N2EwLCAweGVhN2RiYzFlLCAweGViZjY0OTVmLAotCTB4Y2E4ZmJmNjUsIDB4MWY2NzBjY2YsIDB4NmM3NDg3MWMsIDB4NWY5MTU0NGYsIDB4YjBmNmRkN2UsIDB4ZmJmNzAwMzQsCi0JMHhlOGViZTI4NSwgMHgyNWI1OGU5NywgMHg5ZmI3YzgyYSwgMHhiOWQxMzdmYSwgMHgxZDdmNjVlNiwgMHg2YjdlZGE5NSwKLQkweDVmOWJiMTcxLCAweDNlZjdhNzY4LCAweGNhZjExYjZkLCAweDM1ZWY3ODM4LCAweGQ3OTBhMjViLCAweDM1ZjczMWM5LAotCTB4ZWVlM2JmM2EsIDB4ZjBkM2EzZjUsIDB4OGZhZWI2YjksIDB4YWJmYmUzZWUsIDB4MjNhM2ZiY2QsIDB4NWQ3MDNhNzcsCi0JMHg3YmY1OGZlZCwgMHg2YmVlMGM2NSwgMHhmNjgyYTI0MiwgMHhkZjkxMGFkOSwgMHg5NzFmNjE3MSwgMHg4OWFkMTcwZiwKLQkweGZkODBjZTRmLCAweDhlN2ZiOGJkLCAweDVjOWM4MTkzLCAweDFlNzczZWQ2LCAweGFhZmU1ZjNlLCAweDVjZmI0MTQxLAotCTB4ODFjYWI1N2QsIDB4Y2IzZjhkZjEsIDB4NGIwNTBlOWQsIDB4ZjM4NDJmNzgsIDB4Y2ExMjgzOTEsIDB4NmM5NWIxYTMsCi0JMHgxYjFmYjYwZSwgMHhmYTBiOTk5MiwgMHhkMzgzMzMxOSwgMHg3MmNiOThjOSwgMHgzZTc4MGYxMCwgMHhiNzE0ZTc4NiwKLQkweDcxNGYxZWI4LCAweGMzZjVmODBiLCAweGJmNjU4ZGZjLCAweDBkMGVmMWUyLCAweDM1ZGY5YWVmLCAweDA0ZGJhYzRlLAotCTB4MmU3NDQ3ZWMsIDB4ZjE5Nzk3OWUsIDB4N2ZlZTFmZTcsIDB4NzdmNjE2N2UsIDB4YzE0OTkwZTksIDB4Yzg3YTdmNzksCi0JMHgwNmFmZmQ0NCwgMHhlMzA4Yzk3ZiwgMHhmZGMyM2M1ZCwgMHhkY2UzODQxMCwgMHhkZmRjYzdjOCwgMHhmZGNhZGQ1OCwKLQkweDI2ZjVkYThkLCAweDM3YjEzOThmLCAweGI0NDc5NjNkLCAweDllMGViZjQzLCAweDU1ZGM3MGI5LCAweDNhMzRkZTgyLAotCTB4ZWJlMWVkNWQsIDB4MGQ3YTBkNWIsIDB4Yjc0ZDFiZDcsIDB4MWI3NWFjNDksIDB4ZThlYmU5ZTIsIDB4ZWRkMjliZjcsCi0JMHgxMzVlOTBkZiwgMHhlODdjYjc1OCwgMHhlOGJlZDdhNiwgMHhmOTEzZTA0NCwgMHhhMzU1ZTkxZCwgMHhmOGZiZDU4NywKLQkweDZiNzI3YTM5LCAweDNiYTQ0NGYxLCAweDc5MzQzZThkLCAweDBhYzQ5ODEyLCAweDliZDY2ZjUwLCAweGRkZTYwMTU5LAotCTB4MmFmMThjMDQsIDB4OWIyYTgxY2EsIDB4N2Y3Mjg0Y2IsIDB4MDU2NzRhNGUsIDB4MWU0OTY1YTIsIDB4Yjk1MmE3OTcsCi0JMHhmZDQ0NjNkMSwgMHg3OTIxNmY1MywgMHg1MjZmMmQxMSwgMHhkZmZjYjhmMiwgMHhlZDA3NDQ4MywgMHgyYTE0ZjI4YiwKLQkweGZjOGVhYzRkLCAweDg1ODRhZDA3LCAweDVjZmQ0NDBjLCAweDlmZmM5MDk1LCAweDUzNzI2ODJlLCAweDY1YjM4M2RlLAotCTB4YjhkNTdmOTgsIDB4NTQ3MjdiZTQsIDB4ZWRlNTA2YzYsIDB4ZTQ4OGYwZTYsIDB4OTdhODI2OTEsIDB4NWQ5YTFmZWIsCi0JMHg5ZTQ1NzAwMSwgMHg0NDVlNjA2NywgMHhhNzBlOTdiZiwgMHhjMGY1YzQwZCwgMHg4YzFlNTc3MywgMHg5N2M1M2RiYiwKLQkweGIzM2FlNTgzLCAweDY3ZjdlNDhkLCAweDliNjFhZTg2LCAweGNmZWQzZGRjLCAweGZmN2Y2YWJjLCAweGI4MWVhZWQ3LAotCTB4ZDRiMmM0ZDMsIDB4Y2QxOTg0MjIsIDB4Y2FlZjJiNWIsIDB4ZTNlNjBjZjMsIDB4NjEyZjlmZTgsIDB4ZTJmMjkxYWMsCi0JMHg1ZGZiZmYwMiwgMHhlN2UwNDNiNCwgMHhkZWZlYzJiNSwgMHg4OTY5ZTgyYSwgMHhmZGMyMTZkNSwgMHhjYmE2NGQ2NCwKLQkweGE4MDU3NmRkLCAweGNhMjZhNjdlLCAweDA0YjMwNzQ4LCAweDg3MmFkYzFkLCAweDQyZmRmMWRhLCAweGIwNWNhMGQ2LAotCTB4ZmZiM2U5OTIsIDB4M2EzNzdlYWIsIDB4MDVkOTk1YTcsIDB4ODdhMDNmYWQsIDB4M2ViMDRjY2YsIDB4OTAwMzY3YTAsCi0JMHgxOTYwMjZkNywgMHgwNmIxMjAwMywgMHg5NWUxOTdlNCwgMHhkODVmZmRmZiwgMHg3NTgwN2Q2ZiwgMHg2YjllMTFjNiwKLQkweDA2N2I5NDE0LCAweDA1N2UzM2U2LCAweDYzODI2ZDY1LCAweDNjMzNjNjE4LCAweDM2NDNkOTJmLCAweDNmMGRjN2Q4LAotCTB4NWZiYTIwNGYsIDB4NTIxN2VjMjUsIDB4YTY1Zjk4YzYsIDB4NzRiMGY1ZjAsIDB4OGY3ZmRlN2UsIDB4ZmQwZmI3YTAsCi0JMHg1ODE3MzcyYywgMHhmNDc2MTNmYiwgMHhiMWU2MTk1MywgMHgxYjM3Y2UyYSwgMHg3OGM2YmRmMSwgMHgwYjgzNmIyYSwKLQkweDgxZGViNGY5LCAweGJmMjdjNTc2LCAweDA5MTQ1NDkwLCAweGM4ZGQ4NDZiLCAweDdlMGFhNTBlLCAweGEwMTM0Mjk3LAotCTB4Nzg1ZGMzYmUsIDB4OGQ0YmY1MTAsIDB4NmVjYjk3YTAsIDB4NjA2ZjdlNDYsIDB4ZmFmMjg1OGIsIDB4NTk2M2Y1ZDgsCi0JMHg5OTVjMDNmNywgMHhmZThhOGI3ZCwgMHhiNzY3ZTVlNCwgMHg3ZDgzMmVlNywgMHgwZWQ4YzBiMiwgMHhlODU0ZTc1OCwKLQkweDZhYTYwY2IzLCAweDczYTI1ODAyLCAweDAzZjUyMGRlLCAweDNjMDcwMWY1LCAweDM4N2VlNmRmLCAweGYzMTlkMzhiLAotCTB4ZmRiNDdhZTIsIDB4NmJkZWYwZDEsIDB4YjQ2ODYwM2YsIDB4NjY1NjhkMmYsIDB4OTBiMWZmNDIsIDB4ZmY5MDU3ZWQsCi0JMHg4Yzk5N2RiNCwgMHhmZmYwM2RjZSwgMHg5Yzc5MTc4NiwgMHg3NTgxODM2MywgMHhmOWFmMThjMywgMHg4ZDc4MGFkMCwKLQkweDRmNmE1ZjIxLCAweDI2NzY0MWJlLCAweDI3NDA1YmIwLCAweDE5ZGZmNjU3LCAweDFkOTVmZjViLCAweGZmZDc2MzMwLAotCTB4OThkODNkNmMsIDB4MzE1ZmY0MjcsIDB4MDM3YjI2MmIsIDB4YWRmZDA2OTcsIDB4NGIyNjZkMTAsIDB4ZDcxOTJlMzUsCi0JMHg5MTU1NmE5MywgMHg5ZTNjMzYxZSwgMHgxZDg2N2E0MywgMHhhMGY0NGRkOSwgMHhmYmZiNjNiNSwgMHg3MzZjOWQxMSwKLQkweDU1ZmY4NDRiLCAweGNjNGNiMDZkLCAweDRmZWI2OWQzLCAweGRhMzM4Yjc5LCAweDVjNzRhOTkyLCAweDk3ZTdhNzRiLAotCTB4OTRhYjdjOWUsIDB4M2ZiZTFiY2IsIDB4MzY5YTdmMzMsIDB4N2U4M2YyODksIDB4NmQ0YTg4M2EsIDB4YmQwNDFiMWUsCi0JMHhlMmJlNzg2OSwgMHhjOTNlNzgxNSwgMHhiYjA2ZDVmNSwgMHgzOTdkZmM5OSwgMHg3OTQ4OTg1MCwgMHgwYjEyMWQ4YywKLQkweGU0ZjczYzAyLCAweDU3ZTIxMzFjLCAweDZkNzRlNzhhLCAweDU3MzIzNzQ5LCAweGM0NTliYzBjLCAweGUyYjljNDdlLAotCTB4ZGVkMjJiOTksIDB4NjhjMjc4MGYsIDB4ZjUxN2NmZDcsIDB4NTFjOTA1MDksIDB4ZTZkZjdjZjUsIDB4YjdjZmU1ODksCi0JMHhmMzgxOWNhZCwgMHg3NWZkYWJiNiwgMHg0Yzc3NmNlMywgMHg5MmJhMjBlOSwgMHg1ZjM4Y2IyZSwgMHhlYjAzMDRjYiwKLQkweDM1MmJlNzg3LCAweDNiOTg3ZGZhLCAweGM2OWIwZjU3LCAweGQ1ZjI0ZTdmLCAweGJmN2EzZTM0LCAweDRkZmQwOTk5LAotCTB4ZmNmZjQ3OGIsIDB4MTdhMTNjYjUsIDB4ZTQ2MTU5MGEsIDB4OWZjMmY2M2UsIDB4MGQ3YzRhY2QsIDB4NzhlZjc5ZGEsCi0JMHg5ODc1ZTc4MCwgMHhlZGM1ZDA1OCwgMHhhZmM3YjQzNSwgMHhiNzQ0MmM3OCwgMHhkZTA0ZTNkYiwgMHgyMWU5YTUwYywKLQkweGE2NTg5ZjY4LCAweDQ3OTI1ZmM3LCAweDk1N2VhZjhmLCAweDdhYTRmYzdhLCAweGFiNDg3OGY1LCAweDY3ZDVkNmNlLAotCTB4ZWFlYjA2ZjgsIDB4ZDEyY2FjMDcsIDB4YzZlYjAzYzEsIDB4YjRkZmRhZWEsIDB4NzYwZTkyNjksIDB4ZGFlOWE2MDcsCi0JMHhkNmNkMzRlNywgMHgwYjJkNzljMSwgMHhlZDA3ZWQ3NSwgMHgyZmFiYTI1YiwgMHhkNWQ2YWUwYywgMHg0MWIyMzkwZiwKLQkweGZkNmQwZjA3LCAweGUxZmI1ZDE3LCAweGY1NzU1YjZkLCAweGJhMWRhMWM1LCAweDBmMWQxMWZhLCAweGUxOTFlMGU5LAotCTB4NDdlZDc1NDcsIDB4NTc1MDdiYmYsIDB4NjlmM2E2M2YsIDB4OGJiOGZkNWQsIDB4OWJlMGU5Y2YsIDB4YjVkNjVlYmIsCi0JMHhhOGVkNzA5ZiwgMHhkZWM4OWUwZSwgMHhiNzJmYjVkMiwgMHg0ZjA3NGVmZSwgMHhkNzQzZmU1NiwgMHgwZmY0OTZmZSwKLQkweDVkNTNmNTc0LCAweGE3ZWFlYjFmLCAweGMxZDU1YzE3LCAweDA5N2Q5ODc3LCAweGVhOTdjOGY5LCAweGNkZWY3NGRmLAotCTB4OGUxZmFlNjIsIDB4OWY5ZTNhMDcsIDB4MDA0MzU0NjIsIDB4ZmM4NWYzZGIsIDB4OGM5Nzc0MTAsIDB4ZGFlZDEzZmEsCi0JMHg3NDg1OTY1YywgMHgxZjFhNTkzYSwgMHgzMzZiYmEyMiwgMHg0NDU3ZThhOCwgMHg2M2Y5MjdlYiwgMHg2NWUzMDdhZiwKLQkweDhhODMyNWVjLCAweGIwNDRhYzcxLCAweGYxODhlNGViLCAweDcwNTYzYzkyLCAweDdlZTA3YjAwLCAweDRlMGU4YTk1LAotCTB4ZGFlYmE2ZjUsIDB4NzRiYjU1YTcsIDB4MDJiZTE5ZjUsIDB4OTU4MGZkNWQsIDB4NTgxZTBlYWEsIDB4N2Y2YmE2NTcsCi0JMHgwZThmMjZkMywgMHg3NTJhMDc3NiwgMHhiYzlhNzNlZCwgMHhhNWFmMzgzYSwgMHhkMDdlZDc1YSwgMHhiZWFlOWYzZSwKLQkweDU3NTJiODMwLCAweDlkNDhlNDNmLCAweGJhZGExZTBlLCAweDc4N2VkNzQ5LCAweDVmNTc0MDViLCAweGQ1ZDI2YTFjLAotCTB4ZDE2OGU4OGYsIDB4ZmJjMzIzYzEsIDB4YmY0N2VkNzQsIDB4OGZkNWQ0MWIsIDB4YWJhMjNjZTksIDB4NTViMTc3MWYsCi0JMHhkNWRjZGYwNywgMHhlMTNmNmJhNiwgMHg0ZjA3NDg1YSwgMHhlZDc1Mjc2NCwgMHg3NDY3YWRjYiwgMHgzZGU1NjRmMCwKLQkweGQyNWJmYjVkLCAweGE3ZWFlYWNmLCAweGVhZTkyZWJhLCAweDdhNjQ3YjM1LCAweGU3ZmFlN2MxLCAweGE5OTkzZWMyLAotCTB4ZmRlZTk3ZmUsIDB4NDMwZjI0YzAsIDB4NjczYzA4ZmEsIDB4YTA1ZGViNTAsIDB4YjliM2YyZmYsIDB4MmQxMzA3M2UsCi0JMHhjNjdiNDI0ZSwgMHhjOTQ1Zjk0YiwgMHg3MjA3YTA5OCwgMHgyMDYwMzEyYiwgMHg1Yjk1NDJiYSwgMHgxNDllZjE0MywKLQkweDUyYTQ1M2QyLCAweDAzNDc5ODVjLCAweGRlODFkZTdhLCAweGY2OGRkYjkzLCAweDlkOGY0MjZkLCAweDg4ZDVmOTk1LAotCTB4N2Q2NzZlNmYsIDB4MzAzODdkMWYsIDB4OTQ0ZGI2NWQsIDB4MGRlNTYzYWEsIDB4Yzc5ZjNmN2UsIDB4ZmJlNTBlMzksCi0JMHhhMmE3ZTQzNiwgMHgxNGVjZjExZiwgMHhiMTU3YjNiNCwgMHhlNzljMzZjMCwgMHhiMTI4YTk2NCwgMHg3MWE4ZTMxMywKLQkweDU2ODUzOGZhLCAweDY0NWViNTRlLCAweDc3ZGQ4NDcyLCAweGIzMjVhZTMyLCAweGZjZmUwNmU0LCAweDI2NjVlYjU0LAotCTB4NTdlODg4OGYsIDB4YjAwYzJmYzQsIDB4ZmQxMTBkZmUsIDB4ODA3ZTA4M2YsIDB4OGI3ZjNlMGMsIDB4NmMwYWY4MWYsCi0JMHgwYWZjODdhNCwgMHhlOWZkYmJjMSwgMHhiYmYxZWYwNCwgMHgyZmU3ZGNhOCwgMHhiZjUxZjJhMCwgMHhmZGZiZjU0YSwKLQkweGUxM2YwNDY1LCAweGY0MWMxMGY3LCAweGQwNzk1MjU3LCAweDg3ZTdhNWVmLCAweDNmMDRkNWZjLCAweDk2MzE3ZTA5LAotCTB4YzY0ZmMwNDcsIDB4NzdmMDY5ZjIsIDB4ZjAxOWZlYjEsIDB4ODVmZTExN2YsIDB4YWI2NTQwM2YsIDB4M2Y5ZTg5YmYsCi0JMHhmODIxNmZlNywgMHg4MjNlZmYwNSwgMHg1MjBmZTk3ZiwgMHg0MjNmZTZkOSwgMHg1NmZlY2JlNSwgMHhkZmM1N2ZhYSwKLQkweGZlNmJmMDQ2LCAweDdmMjFjMTEwLCAweGZkNDdjMTA3LCAweGZiOGY4MjYxLCAweDg0ZjgyNWRmLCAweDBlY2E5M2JmLAotCTB4ZGYyYTQ1ZmYsIDB4ZmQ1MTc3ZjQsIDB4ODIzNWZmMjksIDB4NmY1M2Y2N2IsIDB4ZjNlMzQ2ZmYsIDB4NjU1NzExMjMsCi0JMHgyMTVjNGVjMiwgMHg3MGE1ODdlOCwgMHgyNzM5NzBmYiwgMHhkMDQyYjYwNSwgMHhhODEyNjlhZCwgMHhmYTNmYjQ1NywKLQkweDNjYzQxZmU3LCAweDU3NDg5MWQ2LCAweGE3NTc0NDA1LCAweDFlZmQ4ZGJlLCAweDI1Njk3ZmVkLCAweDliZjcxOWQwLAotCTB4M2M3ODFiZDcsIDB4MjJlZmQzNDYsIDB4ZWZkMzQwNWYsIDB4N2Y3MGY3MzUsIDB4YmJkODExNzUsIDB4NDNmZmZmMTgsCi0JMHhhZjNmYjcxYywgMHhkMDBhOTlkNCwgMHhjNDMxYWI4ZSwgMHg1ZDJmNjhhYiwgMHhkOTMzZmJhOSwgMHhhZmNmMGM0NywKLQkweDc4ZWU0NTgxLCAweDQ3NjA3MmM1LCAweDAzNTZkZjg0LCAweGZkZTExYmVmLCAweDE4YjQ1OTk5LCAweDRjM2FjMzU2LAotCTB4MzMyYTJlNzQsIDB4MzU3YzA0OGYsIDB4MzdlZmEwNzYsIDB4MGY1NjFmYTgsIDB4N2ZjODA2MzQsIDB4ZDFmMzA1YjYsCi0JMHhhMDdkYmI2ZiwgMHg3ZWY0OGMyZiwgMHgwOWQ5NmVhNSwgMHhkMmEyOGZjMiwgMHg0YjRjZTBiOSwgMHhjNjNlNzUyOCwKLQkweDE0NGE0ZTQ5LCAweDFmMGJlYmRmLCAweDc4NWU0NGViLCAweDVkYWZmNTlmLCAweGJjM2I0NGNhLCAweDBmOTJlZmYyLAotCTB4YzliNGU3ZjcsIDB4ODM3MThkNWUsIDB4MWZiOWYyMGYsIDB4NTFiZTQxZmEsIDB4ZTgxZTVlNTcsIDB4ZmNmMzg3M2IsCi0JMHg3NmVlYmQ4YiwgMHgyZmYwYTAyMywgMHhlNGZmNTlkZiwgMHhiZjFlZWVkZCwgMHgzZDc0NTZmOSwgMHg2MmFlNWVjMSwKLQkweDI5ZTUxMzJlLCAweDZlMWJjZjMyLCAweGU2MzZlYWU4LCAweDBiM2U3ODIzLCAweGE2N2I3OTUwLCAweGQ3NWM2M2VmLAotCTB4ZDgyNDE2MDIsIDB4MTU5MmQ2MzcsIDB4ZjNkMTVkNmIsIDB4MDM5MDhiZmEsIDB4ZWEzN2M5N2YsIDB4YmU1OWZlY2EsCi0JMHhmMmYzZTRmZiwgMHg4ZjRlYmNkMCwgMHhkNzFmMjViOSwgMHg2MTZiY2RhNSwgMHgzZmU2OGI5NiwgMHg4MTNkNzU4YiwKLQkweGFiY2JmYmYzLCAweGU0MzA1ZjlmLCAweGZmOGZhNmY0LCAweDYxYjBiYTAxLCAweDMxZGEwNTk4LCAweGM3YThkZjNjLAotCTB4YWZhODFjYzQsIDB4Zjk0MGNmYmYsIDB4ZDQ1ZDFhZDksIDB4ZGYxMDQwNjAsIDB4YmNhMDZjZGIsIDB4MDEzYTFlZmQsCi0JMHgyYmJmNDBmYSwgMHhmMWVlOGJhNSwgMHgwZjI0OWQwMSwgMHgyMzE5M2E0MiwgMHg0ZjYwY2MwNSwgMHhmMzA2MzY5ZSwKLQkweGJjNWU3NDBkLCAweDg0NzE4Y2NjLCAweDFmNDAyOTE1LCAweGMxZDM3ZGQ5LCAweDQwOWY3MTVhLCAweDk1ZjQwZTdiLAotCTB4ZmE3ZGZkODksIDB4ODgwNWQxYWIsIDB4OGRhZjc1YWYsIDB4ZWFiZTIxNzEsIDB4ZTgwZmIwOGQsIDB4YTkyOWJlMjcsCi0JMHg4Yjg1MWYzYywgMHg1MGRjNjk3ZSwgMHg1OTMyNTc4YSwgMHgzNGNlMzE1NSwgMHhkZTViMTJkMywgMHhlOWM0MWY4ZSwKLQkweGE5YmE3NGU3LCAweGU5ZmQ0ODMyLCAweDA3NGE1NWNmLCAweDFkMmI3ZGYxLCAweGMzNzNmN2M0LCAweDQ4ZDcwZmZhLAotCTB4NDdkM2VmMzAsIDB4OTQ3ZGQxMmYsIDB4ZjRkZmYzNWUsIDB4YzQ2ZTYxNjYsIDB4OWRiNWQ3YmMsIDB4MjE4OWUyOWQsCi0JMHhmZThiZTdiZiwgMHhjYzkxYmEzNCwgMHg1YjAxZGY3NiwgMHhlOWJhYmNlNCwgMHhmYmFlMWM3OCwgMHhjNzQwNDkyZiwKLQkweDE3Yzc0NDM5LCAweDk2NzBmY2YwLCAweDFmMzg5NWM1LCAweDA5NDA0ZWNhLCAweDFmYmVlOWRhLCAweDJkZmZlNDJiLAotCTB4NGI5NTJhNjEsIDB4MTVjYTk3OTksIDB4Yjc0OGVkYjAsIDB4MzMyZWMwZGUsIDB4NmIzNTdiZTIsIDB4Y2I2YmU3YTUsCi0JMHgxZDIyNzRlZSwgMHhjOGZhMzcyZiwgMHg5OTgzNWUyZiwgMHhjYjllNzhiNywgMHgwMWQyMmFiYSwgMHg2ZDM1Yjc2ZiwKLQkweGQwMWQyMzc5LCAweGQ3NjVhNzM3LCAweGNlY2Y4YzY0LCAweDAzN2UyZTBlLCAweDg2NDNhYWNiLCAweDBhODc5ODBiLAotCTB4ZTcwYjMxN2MsIDB4NmJhODY5ZDUsIDB4MmZlMzBmZWMsIDB4ZTM2MjY2N2MsIDB4NGIzZTc4MDAsIDB4ZGVjMWZiZTIsCi0JMHhjOWExZmJlMiwgMHgwMzc1ZTg4ZCwgMHg5NDFiY2MxZiwgMHhkMGYyZWI4YSwgMHhhNTQ3MjRiYSwgMHhiNjZhMGY4ZSwKLQkweGE1MjE4ZjMyLCAweDliYmUxZjI3LCAweGZhZWVjYTJmLCAweDVmOTQwMGQzLCAweDA3YzUxNzcyLCAweDQ5NjZiZGQ2LAotCTB4Y2Q1ZTdkYzYsIDB4ZjA2MDNkYjgsIDB4Y2QwZmYxNjgsIDB4ZTc0NDYwMGUsIDB4MTU3OGIxNzcsIDB4ZTgyNDdkZGIsCi0JMHg4YzgxYTNmYSwgMHgwMzIzZmFlOCwgMHgzZDI1ODQzOCwgMHhmMmNiMjlmNiwgMHhmNGU0OTdhNSwgMHhjNjc1ZWJlOCwKLQkweDllMjE4NjY3LCAweGUyZDc5ZjQwLCAweGQwN2Y1NzdjLCAweDhkZDhhZGJhLCAweDg1OTgzZjcyLCAweDY5ZTk4OWY2LAotCTB4ZDZlZjVhOGIsIDB4NTVmNjE1ZTksIDB4ZWI1YzRmNDIsIDB4M2I4ZjEzNDEsIDB4NTBjYmNmNDUsIDB4ZDBiZmUyNzYsCi0JMHg1OTk4YjExZSwgMHg4MDM5Y2YwMCwgMHhlNDI4ZDlhZiwgMHhlMjY2ZmVlNywgMHgyZDQ0N2FhYiwgMHg3OTI2YzdjNiwKLQkweDU1N2NmYzVkLCAweDMxNjlmZmRmLCAweGI5MmY4ZWRmLCAweGY1ODAxYzNmLCAweGY3YTQ5YzYwLCAweDU5NGY1YzM4LAotCTB4MjFjNjdiZTIsIDB4MzQ2NGUxYjksIDB4OWM0MWNlY2UsIDB4OThmMWI1N2YsIDB4ZWQxMzMzYWQsIDB4N2RlM2ZiZjcsCi0JMHhkNWZkYzAzZiwgMHgzZjlhM2RlMiwgMHgzMGZlZTFkOSwgMHg4ZDk5ZWU5NywgMHhmNzQzNTRiZCwgMHhlODU4YzYzNywKLQkweDIyYWRkZjdlLCAweDE5NmI3NjBlLCAweGFhZGQ4MzhmLCAweDQ3YzZiZGM1LCAweGUyYTJiZGM1LCAweGVjN2M2YzJmLAotCTB4OTcyNjk4MzgsIDB4ZWZjOTUzMTksIDB4ZDA3ZjY0MmQsIDB4MTdmMTRmZDYsIDB4ZDJmNjBlNGQsIDB4MzA5MGIwYWIsCi0JMHgxNDVkYTVjNSwgMHhjYjhlZThhZiwgMHgxZTc5OWIxNCwgMHhhZDMwNmI4ZCwgMHhlNGU0MmNjNywgMHg0Zjk3MmY0ZSwKLQkweGQ1NjlmYmRhLCAweGZjZThjMmUwLCAweGQ1Y2IyYjA4LCAweDBlOGExMWY5LCAweGFlOTc1ODFlLCAweDI2ZDM3ZjZiLAotCTB4MWRkZWFlOTcsIDB4ZTdkNWQwMjgsIDB4MzgzYWE5MzQsIDB4ZDc0Y2E1YWYsIDB4OGYzZWQwN2UsIDB4NTYwYzJlMGUsCi0JMHgzOTBmZGFlYSwgMHg0M2MxZDVlMiwgMHhlZDc1YWI1YiwgMHg3NGY5Yjc4NywgMHg5NWExYzVmNSwgMHgxZDExZmFiYSwKLQkweDY0NzgzYTc1LCAweGZkYWU5Mzc4LCAweGJhMDM3N2U4LCAweDRkOWQzMWZhLCAweDE3NzFmYWJhLCAweGNkZjA3NDViLAotCTB4ZWQ3NGZiNWQsIDB4ZWEwYjVjMjcsIDB4YTdiMjI3ZWEsIDB4ZDZlNWY1NzQsIDB4NjRmMDc1NjcsIDB4ZjZiYTU3ZTUsCi0JMHg3NGZkMGI4ZiwgMHhlZWJiN2E0YiwgMHg0OWQ3NTRmOSwgMHgwYmQzN2JkZCwgMHhjN2UwZThjZSwgMHgwZjkxOWY3MSwKLQkweDBmODk5ODE2LCAweGU5ZWZhYTY2LCAweDEwZjI2N2RlLCAweGUzOWI5MzhhLCAweDFkZmRiM2Y4LCAweDNjYTMxNDZmLAotCTB4MTcwYzZmZGMsIDB4NmUzZTlmMjMsIDB4Zjk2Mzc0ZWMsIDB4YjViNWMxODQsIDB4Y2U0OWQwMWYsIDB4ZDYxNDg5ZjgsCi0JMHhiYzU4YWJjZSwgMHgzMzQxY2IxNSwgMHg1ZDUzMThiNiwgMHgwZjczMWZiMCwgMHgzOTNkNDU2YywgMHhlOGRkYTZhNCwKLQkweGQyZTg3ODA0LCAweDg4OWQ1YmIzLCAweDI5MDYzNWY3LCAweGQxYmRmMTBkLCAweDg4ZTU4ZjVkLCAweDc0YTUxM2NkLAotCTB4YjBkOTFmYTgsIDB4ZThlNTFlYjgsIDB4OGIzM2U2ZTgsIDB4MDA3NDk2ZDEsIDB4ZmUzMTg3Y2YsIDB4M2U4ODdiMjUsCi0JMHg2OTE4NjYzNywgMHhjNjQ3MWJkZSwgMHhjZWRjZGU1MywgMHg5ZDE5MzZiMSwgMHg5YzNiOWQ5NiwgMHhkYzBmMTgwZCwKLQkweDA5YTRhM2I5LCAweGJmNjA2ZGNiLCAweDM1OGNjZDA3LCAweGU1OGVmZDgxLCAweDgzZGZiMDBlLCAweDNjNmM4YmUwLAotCTB4ZTQyNGU3ZjMsIDB4NTNhNmU1NDcsIDB4YmYyZTc4ZTksIDB4YWE0N2QyN2QsIDB4NGExNWM1NTEsIDB4YmY0MzhmNzMsCi0JMHgyMmYxYTljZCwgMHgzYjlhNTE1ZiwgMHg0ZWZiNzQxMSwgMHhkZjgwNDllNCwgMHgxNzMwOTIzZiwgMHhlMWEzNzBmMywKLQkweGFkNzg4NzE3LCAweDcyZjdjODA1LCAweGJhZWQxYjhiLCAweGFjMDZmZDVlLCAweGZlMDE3ZWZhLCAweDkyN2FmZDY2LAotCTB4MWU3ODVmYjEsIDB4YWQyMTZmMzMsIDB4ZjdlMWViODAsIDB4ZGU1YThjMGIsIDB4NzE1YmU1M2EsIDB4YjA0YTFjNTMsCi0JMHg5ZTQxMTIzZiwgMHhmMGU5OGYzNSwgMHhjYWJjMDBhZCwgMHhlZTgxOWQ0YSwgMHgyNmZiOGIwOSwgMHhmOGE2YWExOCwKLQkweDI2YWZmNWVlLCAweDJlOWMwM2M0LCAweGU0NTFkYmRlLCAweGZlODAyYmNiLCAweDljYTA2MDZjLCAweGY0OTdhMDhiLAotCTB4ZDA0NzAwYTUsIDB4ZWZjMDVlYzcsIDB4Zjk5ZWRjYjksIDB4MDYzMGVlOTgsIDB4YTYwYjkwNjQsIDB4MTU1NTc4OWYsCi0JMHg1MTZjNzljNiwgMHg3Yjk3MzkzYywgMHgyMjNiN2FjZCwgMHhkYzhkZTQ0ZiwgMHhmNzE0NjA1NywgMHg2OGE4ZTY1ZiwKLQkweGMwNTdkY2ZmLCAweGZlMjNkY2Y1LCAweGU3Y2ZmMzhiLCAweGYzNWRmZjYyLCAweDMyOWUwM2NmLCAweDBmOTg4Njk2LAotCTB4ZjU0ZDk5ZTQsIDB4NjExYTk4YWEsIDB4YjE3NTY3YWEsIDB4ZjE5YmM4ZmMsIDB4NmZiYzA2MTIsIDB4ZWU5Mjc2M2EsCi0JMHg3MDJhYWZhZiwgMHhkNDMyNWUxMSwgMHhmZjc3NWExNiwgMHg2NDZmZDBhNSwgMHgzM2FlNGQ5YywgMHhkYTQwM2U2MCwKLQkweGNlMDMzYWU2LCAweGFhZjE0ZDJmLCAweGFjYzc4ZTc4LCAweGJjZmRkZDRlLCAweDk5N2Y0ZGI0LCAweGE3ZTQxZTdmLAotCTB4YjE1NWVmYzksIDB4NDZiYTY5OWQsIDB4MjIyYjIxOGYsIDB4OTI1YWFhZmIsIDB4NDdjYzYyYzgsIDB4ZmM5ZDZkMmIsCi0JMHg3YWFmYThmYywgMHg3NTliYzk0NywgMHg2MjVhMzc5NCwgMHhkMTExZTE3MywgMHhlYWI2YzVlMywgMHg3YmY2MzEwMywKLQkweDY2ZWZkODk1LCAweDliN2M3ZTg3LCAweGU0MjAzZTc2LCAweDcxODU1NWY0LCAweGY3ZjgyMTNkLCAweDZiMGUyNGVlLAotCTB4NWM1ZGRjZmQsIDB4ZjljMzc2OTIsIDB4Y2U3NDYzZWUsIDB4MzBjZGMxYTksIDB4ZjlhOWUyMGUsIDB4ZDcxNWJiN2EsCi0JMHgwYjc5OGNkZiwgMHhlOTE4MmZhNCwgMHg1NDdlMjc4OSwgMHhhMTg3NjA3MCwgMHhhMmY2M2VmNywgMHhjNGZjYTA0NywKLQkweGNlOGZhNDEyLCAweDgzZjAzZDYwLCAweGEyYWNkOGJkLCAweGRlZmI2NDVkLCAweGRlZWEwMzcyLCAweDg5NDc1Njc0LAotCTB4MTU5MWI2MzcsIDB4MWJiMGYyMWQsIDB4NGY1YWFmY2MsIDB4M2QzZTY5ODcsIDB4OTdkOTMyOWQsIDB4NjJmYWY5NDEsCi0JMHgxYzNkMzUxZiwgMHhhZmE2NmZiZCwgMHhjODcyZDI3MiwgMHhkOTc5ZTJlZSwgMHg2N2ZlNGUxYiwgMHhlZjAyMmY5YywKLQkweDU1N2MxMjNmLCAweGU0MjQ1YWM2LCAweDk1YWNiMTkzLCAweDRjMmNmMWNhLCAweDE3NTg3N2U1LCAweGM4YTYxZTk1LAotCTB4MmE2MjRlNTgsIDB4NGJjYzE1OTUsIDB4NDc1NjE0ZTUsIDB4YTE2YjI1NjUsIDB4YTU2YjFhNzIsIDB4NTMwYjA2NzIsCi0JMHg5NTBhZmUwOSwgMHg1ZjkwYTY1ZSwgMHgzNmY0MWIzNSwgMHg5Nzk5NzM5NiwgMHg4ZWFjNzljYSwgMHgxZDIyOWZjYSwKLQkweDU5YWIzZTAzLCAweDU5MGJjMTBiLCAweGMwNmQ5NTJiLCAweGZhYTU3ODdmLCAweDU4NmY5MDY1LCAweDBkZjIwMmJlLAotCTB4ZTlmY2Q3Y2IsIDB4MmVmYzg2NTQsIDB4YmY0N2NhZTYsIDB4ZTNjYTgwYmYsIDB4MTNjYTk1N2UsIDB4M2IyYTMyZmUsCi0JMHhmNzZhMWVmYywgMHhjYTkyYmZhNiwgMHg5NTJmN2U1MywgMHg1NGQ1ZmRhNywgMHg2YTNlZmQ4NiwgMHgyNTdmYjZmNywKLQkweGViZjhlZjk1LCAweGZmMzdmY2E4LCAweGY1ZGYyYTI2LCAweDc3ZmNhODA3LCAweDc5OTUxMzdmLCAweDM5NzY0NjY2LAotCTB4Y2YxNTA4MmIsIDB4N2U2N2ZjMDYsIDB4NjBiOGY2NjAsIDB4M2MwYWFmMWYsIDB4NTMxOGYzMWUsIDB4ZmY3MDUzMGIsCi0JMHg0ZGYxODY2NCwgMHgyMjMxYzU1YiwgMHg0OGNiOWIwYSwgMHg1YzlhZGRmNywgMHgyODlkZDk0NywgMHgzYjczNGYwNywKLQkweDI3NjY5ZWNkLCAweDcyZDZkMDNiLCAweDYxM2U2MTljLCAweDRhNTNhMTliLCAweDc5M2NiZDgwLCAweGQ2Yjk4ZWU0LAotCTB4YWY5M2QwNDIsIDB4MTUwNDg2YjAsIDB4YWRiYmE1ZTEsIDB4MzA5ZTA3YTAsIDB4MDI3ZWViODUsIDB4OTYwYmM3ZjUsCi0JMHhjZTgyYjVjYywgMHhmYjdmNmIxYSwgMHg0YzM5YTdlMywgMHhiMzhlNjNmNSwgMHhkZmUwMDU3YSwgMHgxYmIxNTkxZSwKLQkweDNjZTEzMGFmLCAweDU3YmVkZTUwLCAweGU2MmU3YWIwLCAweGYyMTU1ZmViLCAweDAwYzM3YzAyLCAweGI3YWQyZGU1LAotCTB4YjE2ZjMxMDUsIDB4MzE2OGU1YjgsIDB4NzUzMWI2MmEsIDB4MzdkNDEyYjYsIDB4MWUyOGVkMTEsIDB4ZThiYjU3ZDAsCi0JMHhjN2JkZWQ3YSwgMHhlMjEyOWQ2YSwgMHg2NGNmZjlhMSwgMHg5Y2NjYjM3ZSwgMHg5ZGM2MzE1MCwgMHg3ZTM1ZmIyMiwKLQkweDc0OTlmMWIzLCAweGRiMjNmMTgzLCAweGRmZDA2ZTE5LCAweDlmY2YyMjhlLCAweGZmZmNjZjUwLCAweGZhNjhmM2E2LAotCTB4ZWM3NTdkMzYsIDB4MDYyZWZhNTksIDB4N2U0MzhhZWIsIDB4ZTVjNDk4M2UsIDB4YTVkODE3NGQsIDB4MGIzNGRmZTgsCi0JMHgzNjRiNzliOCwgMHhiNTA3YTlkOSwgMHhjYmVmYjM3YywgMHg1ZTMwN2Y1NCwgMHhmMDgxZDJiZCwgMHgzNzhhNWM5NiwKLQkweGUyNzkyNzM0LCAweDYzN2RiMTBiLCAweGNjOWRjOTM2LCAweDYzNzk0NjA0LCAweDhhMTNkNTNiLCAweGUzZWY4MjJiLAotCTB4YjJmY2I5MGIsIDB4NzI4NWZjZGQsIDB4ZWZlNWNhMjcsIDB4YWU4ZjBjY2IsIDB4M2JmZWZhNmYsIDB4ZGUwMGI3MWQsCi0JMHgwNTQ2OGQ1YywgMHhlNmYxMmRmNywgMHg3ZTUxMmE3NywgMHhhM2NiMzcwNCwgMHgxOGUzMjEyNCwgMHgxMjc5MmZkNSwKLQkweGFhOWRhNmZkLCAweGY2MWYzZTM5LCAweDBlYTIwMGY1LCAweDFiMjZhY2VkLCAweGZkOTk1OWQ5LCAweGMzNzdjNTQyLAotCTB4Y2YzMjhkNzgsIDB4NmY5NjhhZmYsIDB4OWNiOTBiYjMsIDB4YzM0YmRhMzcsIDB4YzBiNzZlNzQsIDB4NDQ3OGMyZWEsCi0JMHhkOWIwZjI1ZiwgMHhmM2MyY2FlZiwgMHg2ZmJjNjc2NCwgMHgyODdlMDMzMSwgMHg0YTY3NmE3YywgMHhhNzczMjgyMywKLQkweGEzMTNkYjgzLCAweGY2NDgzYTlmLCAweDI3YzhiMzQ0LCAweGQyMzE0YzZkLCAweDI1NmM0OWY3LCAweDQ0NTIwM2NlLAotCTB4Yzg3MzM2YmYsIDB4MzZmOGU3ODUsIDB4YjE2M2UwYTMsIDB4MzIwN2U2OWUsIDB4ZjdiNzVmMjksIDB4ZWZiYTVkM2MsCi0JMHg5ODU1ZDkxNSwgMHg2ZTFjODQ0NywgMHhlZTgxNzExNiwgMHgzZmY0NDZmMSwgMHhjZGM0NDUyMCwgMHg0YTkwOTY2YywKLQkweDRiZmE2OWUzLCAweDNmYzc2ZjFiLCAweDkxNGVkZTM2LCAweDY3OGRhOTI3LCAweDlmNWZhNTFmLCAweGY1YTYxY2RkLAotCTB4YTFmZDg1ZDksIDB4ZDcxM2I3OGQsIDB4ZTMwZjIzMTcsIDB4ZjVjM2M3NmIsIDB4NWEzNzhlNDUsIDB4MjViYjNlYmYsCi0JMHg0YmIzZWI0YywgMHgxZWU5NWVkYywgMHhmMWVjNDc2ZiwgMHg0ZjY3MWFmYSwgMHg1NjljZmU1NCwgMHg3MmU0MmZjZSwKLQkweDc2MzJjYzE1LCAweGQzM2ZmNjBlLCAweDA5ZjllOWMyLCAweGQ5YzVkMzEzLCAweDdlN2EwOTM3LCAweGE2OTc4OGIyLAotCTB4OTkyZTVjMDksIDB4Y2ZiYTY2OWMsIDB4NzE3OWQxMzMsIDB4NmRiNWQyMTcsIDB4OWRjZTkxYjcsIDB4YzgyNzI5NmMsCi0JMHg0ZWQzOTI3ZSwgMHg0MGZjODkzMSwgMHg5ZmNmOGFkNiwgMHgwMmY3ZjAzMCwgMHg3OTk4ZTZhOSwgMHhlMWZjN2IyYiwKLQkweDcxMTFiOWY5LCAweGNlYjUzNGUzLCAweDEzNGZmOTgwLCAweGUzMGMxZDlkLCAweDMzMTRiNmVjLCAweDYyOTZkZmFkLAotCTB4ZmNhMWM2MGQsIDB4Y2Q4MDk5NTUsIDB4ZGI4MDA0YzEsIDB4MGIxYjdjOGIsIDB4OTU0ZTNkNjEsIDB4YzUzMzhiZjMsCi0JMHg5MmYzMDA3YywgMHhkZmExYWFkMiwgMHg4NGZmN2QwOCwgMHg3NzI2NjNhMCwgMHhlZTIyYWJiYSwgMHhjNDViM2NkNywKLQkweGFmOGQ0OWVkLCAweDcyMzdlN2EzLCAweDQxZmY1ZjMwLCAweDRmMzFlN2YwLCAweDhmMGM2YmE3LCAweGRjM2U5YzkzLAotCTB4NTk4N2ZjOWYsIDB4ZDA3YmM2MGYsIDB4YzBmZDNlOGYsIDB4Nzc4MjBhZTAsIDB4ZjVmM2E1OGMsIDB4NGVjNzg3ZDMsCi0JMHhkNjYyN2Y0MSwgMHg4MjQ2Njk4ZSwgMHhlMzAzYWMwZCwgMHgyYzc2YjMxZiwgMHhjY2YzZTIzNCwgMHhkZmZiNDYxYywKLQkweGYyNGNkNjc1LCAweGQ1OGVkNjc1LCAweDRjYmZmZGEyLCAweGM2NjVmNmMxLCAweDZlMzBjZmMwLCAweDkxZWY3NjUwLAotCTB4OGM4YjhjMDQsIDB4MDAzNzNmYjUsIDB4Y2VjNmQzY2IsIDB4YTA3ZGY4OGQsIDB4MWJmNjE1NWIsIDB4NWJiY2Q3MzQsCi0JMHhiMjI4ZWQ5MiwgMHgzNmM4MWVhYiwgMHg0NGY1OWZhMSwgMHg5OWJmM2YyMSwgMHg5ZTI2M2NjMywgMHhiZjI1ZTE4NywKLQkweGYwOTFmYzdlLCAweGZiYjJiYzMxLCAweDcyYWVkNjlkLCAweGI0ZjZjNjNjLCAweDljYjFjNzI5LCAweGRhZjE1MjE0LAotCTB4ZjBlOGFiMzIsIDB4NGE3MmM3MWUsIDB4Y2QwMmFlYjgsIDB4NWI3N2NhZDksIDB4MzE1OTYzOGUsIDB4ZTIwNGY3ZGMsCi0JMHg0NmY3ZjBmNywgMHhjNjE0ZmM5NSwgMHg2ZTZmYmFjOSwgMHhkOTNiZGEzYywgMHgwZjI3NDM1YiwgMHg0NGQ2NWM1MCwKLQkweDk0ZjZjMmY3LCAweDE4MjQ5Yjc5LCAweDZiY2I4ZjZmLCAweDI3YjQzZDQ1LCAweGYyNDhkYjI1LCAweDI1NmVhOTM1LAotCTB4M2M2MDczYWQsIDB4NTFlZTc1YzMsIDB4NDVjOTcxN2MsIDB4YmVjOTc3MjQsIDB4MTFlYzEzN2YsIDB4ZTdlZWZmZGMsCi0JMHgzM2Y5ZmNmMSwgMHgxNTFhZmU4MiwgMHhmODg5MzVhZiwgMHgwMjdjYTE0MCwgMHg5YWNiYjA5YiwgMHgxNTFkMjc5OSwKLQkweDA0Zjc2Y2ExLCAweGM3YjcyZTMxLCAweGMwNzhlNWMzLCAweDZjNTJmZGM2LCAweDU4ZWMwZGJlLCAweGVjNjk5MmJhLAotCTB4OTU1OTRmZDksIDB4NjBjNzc5ZjUsIDB4YjJiZjYwZGUsIDB4MTBiMjg3NjgsIDB4YTZiYzVmZWQsIDB4MGZlODMwOGEsCi0JMHhjNjFkNWRmZSwgMHhlNmRkYTFmNSwgMHgzNmJlMzhhNCwgMHhmYTE0Yjk3ZiwgMHg5YzMzYTA4YiwgMHhjZjViNmNmZiwKLQkweDY3YjhkYTdiLCAweDIzN2U3YWM0LCAweDFmMWVmNGU0LCAweGVmOWI0ZmVmLCAweDQ2MzcyOGRiLCAweDQ2NWRiY2QyLAotCTB4ZTYyNDhmOWMsIDB4NDYzMGViMDMsIDB4MWRhMjI3Y2MsIDB4ZGU3YmFmYWQsIDB4ZjdlNzRkNGMsIDB4ZGY4YzNkNGQsCi0JMHgzOTJlNjU0MywgMHg4YjBlZmQ2MiwgMHgxZTkxMmFkNywgMHhiZjQ4MmEzNCwgMHhmOTQ4ZDU3NiwgMHgyZmRiNzZmYywKLQkweDdhM2YwZjI5LCAweDc5MGExNzFkLCAweDcyODdlYWJjLCAweDM2NWZhMTg4LCAweGU0MzBmNTRkLCAweDFlMmExZmNiLAotCTB4MDE2NGFiYjIsIDB4MGVkYzI5Y2IsIDB4NjI0ZmM3OTMsIDB4Y2FmNTg4YTYsIDB4ZGRhODkzMjksIDB4ZjE4ZjY4MzQsCi0JMHgwOTY1NjljNSwgMHg3NGViZDIyYSwgMHg3MGEwZGFkNiwgMHgyZTc4ZTAzZiwgMHgzMThmMmZjYywgMHgyY2I3NWU1ZCwKLQkweDlmYWFjN2UwLCAweGYwYmI3MmFiLCAweDdiNGI1OTJhLCAweGY3NDVkYTAxLCAweDlkYmNhNzJjLCAweDNhZDMwZDg2LAotCTB4MDVlOWJlNzAsIDB4YTE5M2RiZWIsIDB4ZGYzOWZiZGUsIDB4ZTNjYzU2NzcsIDB4Y2I3NjAzNzIsIDB4OGNkZmJjYmEsCi0JMHg5ZTQ3MDA5NSwgMHgzMGY0ZmI1ZiwgMHhiZGFlODNkMCwgMHg0MzM2NTc0NiwgMHg4NDc2ODJhNSwgMHhhZWZhZTEzMSwKLQkweGVjYmY5ODNjLCAweDJjMWJmYWUwLCAweDQ2MzczNjVjLCAweDVkMTdiYTNjLCAweGZiNmJmYzA5LCAweDRiOWMxZjYzLAotCTB4MWM2ZDk0ZjgsIDB4YjU0YmFjZWYsIDB4ODlmN2M2ZGUsIDB4ODRmZThkZTgsIDB4NmQ4MWVhZjEsIDB4YmViZDFmMzEsCi0JMHg3ZGUyMGE0MiwgMHg3Yjc3N2I0YSwgMHgxYWZiOGE5NiwgMHg5NmQ5NGZiZCwgMHhiODc5NWRhZSwgMHhjYTQ2NzVmZSwKLQkweDJiYzY4ZjBmLCAweGI5YjcxMWQ4LCAweGE0ZDZjZTkxLCAweGE3M2MzZDUwLCAweGU4Y2M2ZjdjLCAweDhhNDdlZWU5LAotCTB4ZTNmN2ViMDUsIDB4Y2EzZmRhZWIsIDB4YmU3OGJiODIsIDB4N2E3OWZlYTksIDB4MDU5YmM5NGEsIDB4NTAwNzE0YTUsCi0JMHhlYmViMzZmOSwgMHhmN2VhMzZmMywgMHgyODNhNjMxNSwgMHgxNjU0ZDNjNywgMHhmZGJmYjkwYywgMHgzOTRiNGU3ZSwKLQkweGJkNmNjMTU4LCAweGJiYTM1NWY3LCAweGU1YjE3ZWNjLCAweGNlNDIxYmZjLCAweGQzMjgyNjY3LCAweGE3Y2U1MDBhLAotCTB4ZjNmZWM5MWEsIDB4MjM1MzFhYTYsIDB4ODMyOWRlZmQsIDB4ZjA5Y2ZlYjksIDB4MzdlNDhkOTIsIDB4Zjc0YWMwZmIsCi0JMHgzODUwZDRkNiwgMHg0OWM0ZWQwMSwgMHgzZWM5MTg1ZiwgMHhkMWQ0ZTM3ZiwgMHgzOTQxYTc4NywgMHg5YjRiMzdmOSwKLQkweDBjZTRkZGIwLCAweDg2ZWQwZTc4LCAweGM0N2Q3NGJlLCAweDg0Yjc2NDlkLCAweDVmNWY5MTBiLCAweGVkOTNhMTY2LAotCTB4NGMzYjFmYTgsIDB4MmRhN2JkZjQsIDB4MjY1MzZjOWYsIDB4NGNhYmZlZTEsIDB4NmQyOWRjYzUsIDB4ZGM2MjE1ZGMsCi0JMHg1ZTAyOWI1ZiwgMHg5OTZlYTc5MiwgMHg1MWU3ZTQxZCwgMHhmNmQyYmZkNywgMHgyODY1Yzc4OSwgMHhmMDM2NTc3ZiwKLQkweGJhZDU3YmI1LCAweDk5OTdkMjNhLCAweGYxNDJjYzQ1LCAweGQyMmFmMGVlLCAweDE5ZTMxYmM3LCAweGE1NmNjYmYyLAotCTB4Y2YwOGJiZjUsIDB4NDY2NGVjYmUsIDB4ZWFiNjZmZTgsIDB4ZjNjNjJkMzIsIDB4Y2U2NzYxMTksIDB4NDRkMzU0NTEsCi0JMHgzZjk1NTUyYywgMHg3M2U3ZjJiNywgMHg5ZjNkMGYxNSwgMHg3M2Y4N2FhYiwgMHg2ZmVmZjcxYiwgMHgzZjYxMDI1MywKLQkweDJkOWI3N2Y0LCAweGRkZmQ4NWQ5LCAweGZkNzk3YWE2LCAweDlmZDUwYjM1LCAweDE3MmZmZjAyLCAweDE3MWFjMTU4LAotCTB4YjdhZTUwNTAsIDB4ZjNmMjM0NWMsIDB4ZDEzYzVmMmYsIDB4YTRhZGEzN2IsIDB4MmJmMzg1YzMsIDB4MzZmZGQyMzUsCi0JMHgzZWU4OTNiMCwgMHg0YmM1NGVmMiwgMHgzMmY3OTFmNywgMHhmODIyMDY1ZiwgMHg2NGQ5ZDJlNSwgMHg2MjljYmY0NywKLQkweDJmNGI3YmE0LCAweGJmMGM4YzdiLCAweDkxYTgxNDAzLCAweDQxNDIzZGY5LCAweDY3NTcyZjQ3LCAweDM2NTRmOWQyLAotCTB4ZWJmNzEzMjIsIDB4NDNiMjU2YmIsIDB4MGZhMGYxMWEsIDB4ZTdmNzU3ZGIsIDB4ZjZlNjQyZmEsIDB4Mjk1MWJlYzMsCi0JMHg2MTYxZGVkNCwgMHgwNzQ4OTVjOSwgMHgzYmNhNjU4NywgMHgxZTc4ZTFmZiwgMHg2NTBmOTQzZiwgMHg3MzVlZDEwNywKLQkweDVkZjllOGQ2LCAweGU5YzQ5ZDJlLCAweGYyMGE2NTQxLCAweDI1NTUwY2MxLCAweGNkZGZhZmJhLCAweGY4OGJhMzU0LAotCTB4N2Q4N2RlOWUsIDB4MmNlZTc1YTUsIDB4MWZhMmJiN2QsIDB4NTU1NDZiYzIsIDB4OTNhMThjZTIsIDB4NmZhNWY1MTcsCi0JMHg4Y2Y4M2M3MywgMHhiM2JlNDc5NCwgMHg5YmVmYmM1NCwgMHhkN2M3MDg3NCwgMHhlMGIwN2NmOCwgMHhmNGFlNGQ0ZiwKLQkweGY1MmE0Mzk2LCAweGE0OWE0ZjYzLCAweDMwNjgwMGVlLCAweGJmZmM4MDBjLCAweDUxY2YwY2NmLCAweDc0Y2IyNDJlLAotCTB4YTk3MDZhZGYsIDB4ZjU4NjUyMWMsIDB4ZTg4NjdkZjAsIDB4NGZlMGIwNzcsIDB4Y2Y5ZTg4ZjksIDB4ZTFlOTBlZjIsCi0JMHhlZWZmMDQ0NywgMHgxZmI5MjE2MywgMHhlOGMyZGJmNiwgMHg4YjQwNmE1YywgMHgzZTc4MWRiZSwgMHhkMTYzOTQwNiwKLQkweDIyYWJmYzdjLCAweGQ0OGYxNjgzLCAweDllMTdhMWUxLCAweGQ5ZDdiMTdkLCAweDVjNDBhZWIzLCAweGM4Y2JhZDNlLAotCTB4NWRlNDI1ZDcsIDB4M2QyYjZkYWUsIDB4ZDU2NDU1Y2YsIDB4MmQ2MmYzODUsIDB4MDdmYWUzNmYsIDB4NDBjMTkyMWMsCi0JMHgzNTJhZmQ4NSwgMHg3ODAxY2VjZSwgMHg3MTI2NDA0NiwgMHg0OTg1OTMzNywgMHhiYWRkN2M1ZSwgMHgyYjVjNDUxYiwKLQkweGViZDE5ZDdhLCAweDQ0YjA2NWJiLCAweGYxY2NjYmViLCAweGNhNmVjOTc5LCAweDMyNmVjOTkwLCAweDE4YzIwMDZkLAotCTB4YmRiMGQ3OGUsIDB4YTM3MTZlM2IsIDB4ZDRmYjNiM2QsIDB4ZTY0MzkwNjAsIDB4MTgyYjU2N2IsIDB4ZTQyMzNlMGYsCi0JMHg4OTJiZTk5MiwgMHg1NmZkZDdkMywgMHhkYTUzNTdhMiwgMHhmYmM4ODI4YywgMHg0Zjg2OTcyYSwgMHhmMzE4MzMzYSwKLQkweDdhYmFiZmJkLCAweDRmOGYxMDcyLCAweGU1YTNmZTExLCAweDdmNDU1ZmRjLCAweGY5ZjUzYTYzLCAweGM2MmVlMzg2LAotCTB4ZTljN2U1NDcsIDB4NWMyNzBkZjMsIDB4MWY5NTFmZWIsIDB4MWY5NTEzOTcsIDB4M2Y1NzQ0MzcsIDB4OTUxMTE5NTksCi0JMHgyYTJlMzcxZiwgMHgwNzVjYWUzZiwgMHhhZTk4MmY0ZiwgMHg5ZDUzM2Y2YiwgMHgyZDZmODNhMywgMHg3ZGFlYWVmYiwKLQkweDVkNGVlNzk1LCAweGJiY2E5Y2ZkLCAweDc5YjdmNTc0LCAweGYzYzFkNmVmLCAweGI1ZDdlZmFiLCAweGQ3YWJlMDVmLAotCTB4ZTU3NzdmZDUsIDB4MjBmNTc0MGYsIDB4OGJjNjYyMmYsIDB4Zjc0YTNjMzEsIDB4NjEzZGQzODYsIDB4MzAxNmEwZmEsCi0JMHgzZDg2MzdiYywgMHg1NzcyMjkyMCwgMHhmNDcxZmVhNCwgMHgxZTRjNWZlMSwgMHg3MWUzZjdjMiwgMHgzYjA5M2ZjZCwKLQkweGM0NTkxYzc4LCAweDgzOGI1OTVmLCAweDdjNWFiMWUyLCAweDlhNzYzNDM2LCAweGI3MjJmZDE1LCAweGJkNDM0ZDQ1LAotCTB4ZjVjYjdlY2UsIDB4NzQzODBiMDYsIDB4ZGY4OWNiNzEsIDB4MWI3NmE0YWIsIDB4ZmNlOWIyOTIsIDB4YjNiMDUxZTMsCi0JMHhlZjMwZjk3ZCwgMHhlOTI3Y2YyMCwgMHgxYzZiMDAxZiwgMHg1MDBkZGJlMywgMHhkN2ZlYmI0MiwgMHgyMjM3Y2NjYywKLQkweDllMmMxZTYyLCAweDNjYjU4NWM3LCAweGU2NGYzMTA3LCAweDhiZjNlMDQ5LCAweDYxZjdjZmUzLCAweGZkMWYzMTNjLAotCTB4MGY5NTJiMzgsIDB4NDE3M2I1M2EsIDB4ZjZiZjYxOTUsIDB4ZjI4MDczMzIsIDB4ZWQ4MzRiMTEsIDB4MDM2Zjk4NjYsCi0JMHhjNTE0NDdjOCwgMHhjNzRlNWUxMiwgMHhiZDRkYjgzOCwgMHg3YWFhM2RlMSwgMHhiM2RkM2E3ZiwgMHgwNTBkMmRiMSwKLQkweDNhYTVkMDRjLCAweDNkMWZkMWU0LCAweDdjZGJlZjAyLCAweGUzMTRlMjhjLCAweDExZmZlYzg3LCAweDQzM2NlMWM2LAotCTB4YmIzZjM0NWMsIDB4ZjdiY2YxY2MsIDB4NzRiOTdmZjYsIDB4OTI2NWU1MTgsIDB4NDVmNWVlOTMsIDB4YjFkZGE3ZDcsCi0JMHg2ZTM3ZjNmOSwgMHhkMTc3YmY1MCwgMHg3NjViZGVmNywgMHhkZjZmZjdhMywgMHhhMjMxYjY3NCwgMHhjYmY5YWZiZSwKLQkweDEzY2NmZWI2LCAweDY2NTkwNzQxLCAweGFkNTVmZGZkLCAweGZhZTEwZWY0LCAweDMzNThkZDdkLCAweDQ5MjcyZmM1LAotCTB4NjA0Mzk5YmUsIDB4ZmVjNmNmYmMsIDB4ZTFkYjdiZjUsIDB4YmUyYjRmYmQsIDB4M2JmZDFkYjgsIDB4ZTdjNWVlNzgsCi0JMHhmYWYwOGVkMCwgMHgyYzk1ZTY2OSwgMHgwNDM5OWU3YywgMHhiM2Q0N2ZlYywgMHhiZTY2MmM3MSwgMHhhZGQwNWY5YywKLQkweDQ1ZDM1NjljLCAweDk5YWE3OWZlLCAweDZiNGU0M2UyLCAweGIwZjNmY2U3LCAweGYxNTE2ZGVmLCAweGNiZjQ2NjgyLAotCTB4NDQ3YmFmMDEsIDB4OGY4YjQ0N2MsIDB4NTlmYTJkZGYsIDB4ZTk0OTRhMjEsIDB4NjYwZTczYTQsIDB4NTI3ZGQwMGQsCi0JMHhjNWVjNWVjZCwgMHg4NjMyOGUwZiwgMHg5MzZjYTM3ZSwgMHhjNWNhNDQyZiwgMHhjNTMzNTRmNiwgMHg0Y2M1MjQwNywKLQkweDMyOTJlNzc5LCAweDI4MjNiZThhLCAweGU3OGZhMzgxLCAweDk4NWI3NjM3LCAweGQ0ZjY4Y2ZjLCAweDkwMGYxNDUxLAotCTB4Y2UyODYzNDIsIDB4YTg4NWIzNjAsIDB4MmZiNmJmM2YsIDB4NzdkZmRlYWEsIDB4YmNkM2NmNWEsIDB4NzU5ZmVlZmEsCi0JMHhjNzcwNGYzZiwgMHgxZTZhMjcxOCwgMHg0N2Q2MWUzOCwgMHhjY2MwNzM4ZiwgMHhkY2I5ZGZiOCwgMHhmMWJlMzMxYSwKLQkweDBkODk5MGUyLCAweDVmOTE1MjQzLCAweDgyZGQ3NzNiLCAweGQ4YmJmYWZjLCAweDMxMmI1OTcyLCAweDgxMTgzZThmLAotCTB4NjQ4Njg3OWYsIDB4ZmU2MDVkMTMsIDB4NWM2MjMwN2MsIDB4ODQ4Zjk3Y2MsIDB4ZGVlODAyODEsIDB4NmFhMGMxMDQsCi0JMHg3MTQyNWEwNiwgMHhhMTNjNzA4MywgMHg2YWNkOWEwNywgMHhhMDg3ZDkzYSwgMHhmNzFmNzBmZSwgMHgwYTdlN2UwOSwKLQkweDUxZmM4ZDY4LCAweDAzZWY4N2UxLCAweDUxZjJjNjNlLCAweGRhNzY0MmJmLCAweDg0M2ZlMDdlLCAweGE4YmJmMDlmLAotCTB4YTgwYmZhMGMsIDB4YTk1N2U4M2MsIDB4OGNiZjkwZmUsIDB4MWVmZDI3ZTAsIDB4MmJmODhmODIsIDB4ZWZkYTdjYTksCi0JMHhmOGNmZTdhNSwgMHg4NWZlMDlhYiwgMHhhYjY1NDdkZiwgMHg3ZjNkMjU3ZiwgMHhmMDQ3NWZjZSwgMHgwNDRkZmUwYiwKLQkweDQyZWQxMmZmLCAweDlhMjdjZjE5LCAweGRmZDk3Y2E4LCAweGY4YWZmNTQyLCAweDlhZmMxMWY3LCAweGM4NjU0ODNmLAotCTB4MWY5ZTg0N2YsIDB4N2MxMmI3ZjUsIDB4ZjA0NmRmZGMsIDB4ZTA4ODdmMDksIDB4OTUwNzdmMGUsIDB4ZjRjM2ZhNmYsCi0JMHg1ZGZmOTRmYywgMHgyNzU4YWZkZSwgMHhmYzY3MjI3OCwgMHg0NWI0OTc4MCwgMHg3OWRhMTc0NiwgMHhjYzk2OGI2OSwKLQkweDZmNzgwMGFlLCAweDZkZjc0Y2I1LCAweDRiZTQwYjlkLCAweDFlMmU4MDA3LCAweGY3ZjI2NTU1LCAweDUyMzRhZWY2LAotCTB4MmJiMzQ3ZGMsIDB4NDg2Y2Q2ZjcsIDB4YjlmYWE3MmEsIDB4MTU5MmRmNTQsIDB4YmVkOTc2NGYsIDB4NzdiYTY2YTUsCi0JMHhlZGM1NWI2ZCwgMHg0NmNjYjY1OSwgMHgzMmM1NmRlZCwgMHg3MmJhM2ZkNSwgMHhjZDhkZDkyZSwgMHhhZTMwMDUzOCwKLQkweDA3ODE4YzMyLCAweDI1YmI2MzI2LCAweGZiZGY5MjQ2LCAweGVmYmFlMmEyLCAweDZmNzlmZDg5LCAweDQ1ZWZjYzg4LAotCTB4MjI1Mzg5MWQsIDB4NWI2YjIxY2YsIDB4YmFmMDc0OTMsIDB4N2NlNTBjYjYsIDB4MjVkY2RkMDQsIDB4OTg5YjYxYzYsCi0JMHhjNDlkZjkxYywgMHgzM2JkZjY0ZiwgMHg3OWQ2MDJhZiwgMHgwZjdiZTQ5NywgMHhmYmE3YzhlNSwgMHgzNDAzY2RjZiwKLQkweGNiYjVhMzMxLCAweGM4ZTRmYzhjLCAweGJlYTdhZDg5LCAweDRiM2ZlNGQ0LCAweGRiZjg4OTNmLCAweGJmODRjYWFiLAotCTB4NjljNmVhYmQsIDB4MmM1ZmU4YjksIDB4MTM3YmU5OTIsIDB4Y2ZlNDhiNjksIDB4YmZlOTlmZDEsIDB4OTk3YmE2NDAsCi0JMHhjNTMyNTViNiwgMHhhMzIyZDkwMywgMHg1YTQ2YzdjMCwgMHg3MzA1ZmY3NywgMHhlOWI5NWVhOSwgMHg5ZGQxYzUxNCwKLQkweDI3ODc4ZWFiLCAweGY4MDJkZGEzLCAweDM4N2RhM2NhLCAweDRmZGY4NDk0LCAweGQ3NzExMGNhLCAweDk0ZjEyOTdkLAotCTB4OWYzZDE2MzcsIDB4ZjhiYmZmMmYsIDB4MTlmODBjZDksIDB4NWYzZjEzMTUsIDB4YTNjZmMyYzYsIDB4N2Y3NWZlZTIsCi0JMHg2ODg1N2RmMSwgMHgzMWRmNjkzYywgMHhjZjdjNTQ3ZCwgMHhjNzkxYjAzYiwgMHhhNWRiYTNlZiwgMHhlNjJhYjg4OCwKLQkweDRmZjdkMTc0LCAweDFmOTI2NTZhLCAweDgxZjA1OWZiLCAweGM1OWQ4MDdjLCAweDdkZTNkZDMyLCAweGIzZWFkMjY0LAotCTB4NzMzZTYwMDcsIDB4MTE0YTdjOGEsIDB4Yzg1NTAzOWUsIDB4MjZjNjUxNDcsIDB4NmZmZWYyNTcsIDB4ODkzZjIzNWEsCi0JMHhiYWY0MDU3NCwgMHhiNzY4NDllYSwgMHg5OWZhNjE3ZCwgMHgwNWZiMjg3YywgMHg3ZjE4ZWQ1YywgMHg5ZmRlOGZiNSwKLQkweDhkZjMxM2UxLCAweGM1YjIxN2E1LCAweDQ0N2JmNjNjLCAweDgxZTYxNGZjLCAweGFhZGIzYjcxLCAweGY5Yzc4NWRkLAotCTB4NTA0NTU5YjgsIDB4NjU3YWNjZWYsIDB4NzdmZDVlMmEsIDB4OTgzMmVkY2QsIDB4MmM1ZmVjYTAsIDB4MmNmMWM3YWYsCi0JMHg4OTNmNGRkZiwgMHgzYzA2YTVlMywgMHgzOGM1NzhkYSwgMHg1M2M1MzdkZSwgMHg2OTE1N2RkNiwgMHhmNzVkZWViMSwKLQkweDRlYmYwZjI1LCAweDEyMjg4ZTBlLCAweGIwMDY3NGY3LCAweDFmMDcyODAxLCAweDljNTI3NTMxLCAweGNiODY3MDNhLAotCTB4ZDMyNmE2NDEsIDB4NzFlOGI4N2QsIDB4OThmYmNhZmEsIDB4NjE5M2YwMjgsIDB4ZDEwZGU3ZTEsIDB4ZjZlYjRkZWYsCi0JMHhlZTU0MDI1YiwgMHhhMmFmZjRmNywgMHhiMmM5YTgzYywgMHgyMzNkMGVmOCwgMHhjNGMzN2I3ZiwgMHgwZGNiNjU3OCwKLQkweDQyMWU2M2NlLCAweDM2ODQwYmY5LCAweDdlODk4OGJlLCAweDdlZjJhNzMyLCAweDliOWZiYzhjLCAweDI3ODI3YWQ5LAotCTB4MGRjMDk0ZGEsIDB4OGI3NjAxY2UsIDB4NTE1NzUwN2UsIDB4OTVjMmM0NWUsIDB4M2RlMTFhYmIsIDB4Y2EyNjViZmIsCi0JMHhiZTRiYjM1NSwgMHg3ZTc3MjQ1ZCwgMHhlNDdmOTEyYiwgMHgzYWFjYjYzNCwgMHg2MmRmZDExNiwgMHgxY2VkMWViMSwKLQkweDhhMzVmMzAyLCAweDg4ZjM5ZWU0LCAweDkxZjAxYWY0LCAweGJkYWRmMDIyLCAweGQxYzQ1MGI3LCAweDZmN2ViYjFmLAotCTB4MTQ0NWU1MTIsIDB4ZmI0MzhjNmYsIDB4MTJiMzJmNmYsIDB4MjE0Y2Q4MWQsIDB4N2YwMjM4YTUsIDB4MGVmZjAzMzYsCi0JMHhlYmZjZjQ0ZSwgMHgxZTVhY2M4YiwgMHgyOGUyNmQ4MCwgMHhmYzY0NDczYywgMHg1MWNhMzBiZSwgMHgzZWFiZjc5OCwKLQkweGQxZGVmZjA3LCAweDBmYTY3N2EyLCAweDE3ZmM3ODA3LCAweDM4M2Y5ZDMyLCAweDdiZjNjNTk3LCAweDUyMzY3ZmQwLAotCTB4MjI2YmNmN2UsIDB4YjU5ZGY4NWUsIDB4MmMzZjc0MTUsIDB4NGZmNDRiMWQsIDB4NzgwNTRmZDEsIDB4ODZhNjY2ZmMsCi0JMHg4ZDlmN2RmMCwgMHhhZjliYzFmYywgMHhlZDIyZTdjOSwgMHhlYzE1MjQxMiwgMHg0NjQ1ZGM2ZiwgMHg1ZDcxZTVmMSwKLQkweGQ4M2VlZWIyLCAweGY2ZmE4Yjk4LCAweGZhMTJmZmIwLCAweGZhOWRlOWI1LCAweGZlNDI2OTc2LCAweGU4ZGE0NzNiLAotCTB4MWY3NjlkMWUsIDB4ZGVlNWY5Y2YsIDB4MTNkMjcyYzIsIDB4MWZmZjI0ZjEsIDB4ZTdlMjY1NTMsIDB4MDc2ZDRhYzcsCi0JMHgyYjc2ZGRiMCwgMHhhMjdlODRiYiwgMHg0MTU1ODE3ZCwgMHg4Y2VlZDAzOSwgMHgxYjZhYjkyNywgMHhmM2Y2NGYxMSwKLQkweGQ2YTNjY2Y2LCAweDY1OWZjMDRlLCAweGRhMGEzYmU0LCAweGJlMmQwMzJiLCAweDdlYmIxODAzLCAweGJjYzY2OGI0LAotCTB4YzcyNDMxZjQsIDB4NWMwM2JlN2IsIDB4MmYwNzdhMDYsIDB4NzMzYzEwMzcsIDB4YmRhNjkyMGYsIDB4ZTlkZjQ4ZDgsCi0JMHg2MzM0NWZkYSwgMHhiNjhjODA0ZiwgMHg1Yjk3OWExNiwgMHg3Y2YzMDY1MiwgMHgzNTc4NmVjMCwgMHg5Yzc2MGRkYSwKLQkweDYzYjQxOGZiLCAweGQwZTAxZWEwLCAweDk0MDFkZjcwLCAweDc1MjllOTQ3LCAweGNkNTc0OGVkLCAweDI5MmJhM2I2LAotCTB4NDI5YTVkMGUsIDB4YWJlNGQ1NzIsIDB4Njg5Y2ExMGIsIDB4OTFhYzRiNTYsIDB4YzlmMWFkZmMsIDB4MWFmYmU1YjcsCi0JMHgzYWZlZjcxMSwgMHg3ZWJhZmZmZSwgMHg0ZGYzZTJmYiwgMHhmYWVmOWM4NSwgMHg3ZTY4MDM4YSwgMHg5YTdmNzQ3ZSwKLQkweDYwYzZmZjVmLCAweDkwYTM3ZWZlLCAweGU2YjM4MWU3LCAweDcwYmY3Mjk4LCAweDY1Mjc5NzI4LCAweDU2NjFlZjIyLAotCTB4YWY3ZDI1NGEsIDB4NTNhMDU2N2QsIDB4YTFkM2ZjYTYsIDB4OWJkODBmZGMsIDB4ODY3Y2E3NmEsIDB4YzIxNjZlYmQsCi0JMHgwMTYwNzlmOCwgMHgyYmE0MGZkNywgMHgyOWIyOWU4OCwgMHgwODZjZDU0ZSwgMHgzYzFjODEyYiwgMHg3MGI5MGQwZiwKLQkweDk3ZTA5YzVmLCAweGQxN2JmZmUxLCAweGE0MThkMGJjLCAweDdkMDVkOGVmLCAweDM5M2RmODcxLCAweDE3ZTc0N2U4LAotCTB4YzU3YjRhZDgsIDB4ZDc3ZWM5YWIsIDB4MWY3OGQwZTIsIDB4NDM5YmJmMWYsIDB4YTA5ODIwYWUsIDB4N2QyMzZhZjYsCi0JMHhiZGZhMjYxZiwgMHhmMGY0YmI5YiwgMHg3ODdhNmI4NCwgMHhlNzdmZDMyMiwgMHg4N2FhZGNhNSwgMHhmODdhMmIyNywKLQkweDZlNDcyMTUzLCAweDlmM2ZkNzQ5LCAweGZkYzNkMmVhLCAweDMzOGMxYzE3LCAweDE0MTVmYmYyLCAweDgyOGVkMmFmLAotCTB4YzYwZWY3ZTEsIDB4MjAwODA2YzUsIDB4ZmNhMTZhNDcsIDB4NmI5ZDAxYTAsIDB4M2YzNDFlNDgsIDB4YmZmODgzMzgsCi0JMHg3YzdkMWFmZiwgMHg2ZGQ1OWQzOCwgMHg5YzYwMzY0OSwgMHg1OWRjZmY1YSwgMHhlZmQ2ODY3NCwgMHgwNzNmZDFhYywKLQkweGZjNjBlODNjLCAweDdkZDIwOWVjLCAweDNjOWY3MGM1LCAweDM4N2ZlNjE0LCAweGU2NTdlNzlmLCAweDc4NjlkZTQ4LAotCTB4NWEwMjYzZTQsIDB4ZmRmOTE1YmIsIDB4ZGI4ZmJlNzYsIDB4ZmUwYjVmNjQsIDB4NGFkYjE2YmYsIDB4YTBhZjI4NTMsCi0JMHhiNWY3YzJjYywgMHhmNzdjNThhYiwgMHhkZjg1MjVhNiwgMHhiY2IzNWVkYiwgMHhhNjdmMGRjOSwgMHhmYmE2Y2M4ZCwKLQkweGZlZGQ2ZGQ4LCAweDJiZTQ4ZmI1LCAweGUyOTFiZTNiLCAweDY0NmI3YmZmLCAweDg2NzZhZWZhLCAweDg1ZWI0MDM1LAotCTB4YzVkMTVjNzUsIDB4NWNiYTM0YTksIDB4NjA0OWNmYzAsIDB4NTg3YWJhM2QsIDB4M2QzZDE1Y2YsIDB4YTg3NDQ0M2MsCi0JMHgzMWY5MGJhZCwgMHhlNDVlYjExMCwgMHhmYjQ0NDBjMywgMHg3MmZiODZmNywgMHg4ZmM4ZGQ3MSwgMHg3MmUzY2Y5MSwKLQkweDBmNzQ0ZDNiLCAweDJmYTdhYzU5LCAweDQyZTRkNGJlLCAweGQ2OGYzODk5LCAweDEwYmVkMmYyLCAweDY5Nzk2YTYzLAotCTB4Njk1ZTQ1MWIsIDB4ODc4ZjQzOWIsIDB4NTEyN2FhMmYsIDB4ZjA4YmUxMWMsIDB4MGM1Zjc4OWMsIDB4MGZiZTQ1M2UsCi0JMHhjN2JlNzNlNCwgMHg4N2JjM2I3MiwgMHhmYWU3YmQ3YywgMHgxZTM4YTllMiwgMHhjNDQwODFjYSwgMHgwODRlMWJmNywKLQkweGVkODdmYzNhLCAweGJiMjg5NmNhLCAweDNmYmZlY2ZiLCAweGFlYzhjZjU5LCAweGViMGExY2FjLCAweDhlNzgxZGFjLAotCTB4ZGYxNzRmZGYsIDB4ZjQyMTNhYjcsIDB4ZTljMDk0YmUsIDB4ZWJiY2FmYTYsIDB4NTZiYzllZmEsIDB4OGE1YmFlMmIsCi0JMHgxMmJiZTNjYSwgMHgwMjBkYWY4NSwgMHg1N2ZiZGE1ZiwgMHhkM2MyNmM5NCwgMHg2YjcyOGU5NSwgMHg0MjYyNzg1ZiwKLQkweDFmMjEzMjNlLCAweGIzMmE3YmYxLCAweDRjNmVjZmNhLCAweDNhNWIxOTU1LCAweGY4NzliOWY0LCAweDc3NTk4ODdkLAotCTB4MDJjZDJkOWQsIDB4ZDdkMGYzNzgsIDB4YjNkM2ZjMzgsIDB4YTY4MDBjMmYsIDB4MmRmY2ZkMWYsIDB4ZjY3YzNmMGUsCi0JMHhmOTE1NGM4YiwgMHhlMWU3M2ZmMiwgMHhlMjFjMjNmNywgMHhhZjliNDVkYywgMHhhMWZhZGUzNiwgMHhiNzU4ZGVkYywKLQkweDIzOGYxY2U5LCAweGJmM2E1ZWM4LCAweGM5N2E3N2FjLCAweGE1MmNmZmNmLCAweDA3ZTc4MWNiLCAweDljYmI1MmViLAotCTB4ZDcyMDZlNGIsIDB4NDBiYTZkZDcsIDB4ZTk4NjBjNzEsIDB4NWYzMGEzNTEsIDB4OWYxMjkxODgsIDB4NTdjN2U1YWQsCi0JMHgxZGUzZjNlYSwgMHhkN2M0ZDU4ZSwgMHg1MDUwMTYxNiwgMHgzZDU5YzVkZSwgMHg3ZDdlN2U3NCwgMHg3M2U2OGJhOCwKLQkweGY5YWI1MzFiLCAweDBmMmJiOWY5LCAweDVkZDY2N2Y3LCAweDVmZjY5ODg2LCAweDhmOTE1MGUzLCAweDY4ZGY0MmNhLAotCTB4ZjJmMjI2NWMsIDB4NzY4OTk0ZTcsIDB4NzExN2Y4Y2EsIDB4OWU4Y2RiOWMsIDB4ZmZmYmQ0NDYsIDB4MmE1MTY2M2EsCi0JMHhiZjJkMDk4YSwgMHgzZGNmNDg2OSwgMHhlNmRmNDNiNywgMHgwZmFjZTRmZSwgMHgyNDU3NWMwYywgMHg1M2YxNzhmMiwKLQkweGNmMzQ1ZGMzLCAweGVhMDAzOGM4LCAweGU1ZjZiZTg1LCAweDNkNTNkMDg4LCAweDM4YTFlMmZiLCAweDg3YjI3ZDY3LAotCTB4ZTVkMjhiZWYsIDB4OTJmYjgyZDgsIDB4NWFkY2U1ZDQsIDB4N2JmYWY3ZDQsIDB4M2UxNDRmZWQsIDB4Y2QzMjg3NWEsCi0JMHg3ZTkwOTY3ZSwgMHhkYTdmMGViZiwgMHg2MDc5NjhmZSwgMHgxZTU3MDZmNSwgMHg4NzE3MmJkOSwgMHg2MDlmZTJlOCwKLQkweGY2YmNiYmU4LCAweDcxOGRmNGQ4LCAweGE3MzYwZDRhLCAweDY0OGUyOTdiLCAweDMwMGI1MTRhLCAweGVmZmViODRmLAotCTB4ZTliY2NjNTIsIDB4Yjc0ZTgyNzMsIDB4YmVlOWUyMzgsIDB4NGNjM2JkNzUsIDB4MWRkYWJkZjcsIDB4NjFkYTE4M2IsCi0JMHhjMjM2ZGI1NiwgMHg4OWEzODU0YiwgMHg4MzVjOWU2MSwgMHhiN2QyYjU5YiwgMHg4MmYyYTIwZiwgMHg3OTBiZWMxYiwKLQkweDY1OWYyYTdkLCAweDhlNGQ1NGMzLCAweGM2ZDY3ZTcxLCAweGRjOTRhYWJiLCAweDc3MmEyZTMwLCAweGEzYWZmZmYyLAotCTB4ZjI0NzdhYWYsIDB4ZWMxZjllMzQsIDB4YjA3ZTUzMzAsIDB4OGJhZTY4OTQsIDB4MjZkYzFmOTUsIDB4NWM3NjhkZWMsCi0JMHg4M2FlMGE1NywgMHhmNWI0YzljNywgMHhhZjNjNWQ1OCwgMHg5YzYzOWYxMSwgMHhkMWYyZWNjYywgMHhhZGEyZTNmZiwKLQkweDg3ZWM0ZGJiLCAweGFhZTJkZWQ2LCAweDI1ZWYyODYzLCAweGY5NDJlYWIzLCAweGZmNzNjNTJhLCAweDQxNDdmNTFkLAotCTB4YzZkNDljODQsIDB4ODlhODdlN2YsIDB4YWUxYjBiZGYsIDB4MmIzNWZjZjAsIDB4N2ViMzE3ZDcsIDB4N2YxOTg4NmIsCi0JMHhmMzU0M2FiZiwgMHhiZjE5YmViNywgMHhkYjMyZjQ2OSwgMHgzNDYxZjNjOCwgMHgzMzZiOWViZSwgMHg5ODFlZDA3YiwKLQkweDdjYTc0YjZiLCAweDgwNDBiOTlkLCAweGRhMjM5MzE3LCAweGJmM2U2NzdmLCAweGU5YWIyOWJmLCAweDFiYmY0NzQ4LAotCTB4ZGZjNWUxMzcsIDB4NGMzNmY4MDEsIDB4ZjZmNGYxMTcsIDB4NmJkZDEzNTQsIDB4M2NjMGRiN2EsIDB4ZTc0NjUyZTgsCi0JMHg0OWJkN2EyMywgMHhiNzlhNzE5MywgMHg4MGRiMzhjZSwgMHgzMWQ4Nzg2YywgMHhjYmU1MDRiZSwgMHgxMzcyOGVlMSwKLQkweDNiMDA2N2RlLCAweGNhMTg2ZTIxLCAweDQ2ZWVhNTk5LCAweGJmMzBlZmJjLCAweDdmYmU5OGE2LCAweGQ3N2ZjNWEyLAotCTB4NDkzMDNkMDksIDB4ZGRiMDM5ZjIsIDB4OWEzZjYzNjcsIDB4ZGU2YzQxNTUsIDB4N2ZkZjQ1OTUsIDB4ODhkZmYxMTQsCi0JMHhiYjQ0ZmQ3NiwgMHhhY2EyNmVkMywgMHhjMDNlZmEyZSwgMHg0NWU4ZTUxNSwgMHg4M2Y2OGI5ZiwgMHhmMWEyMWFmMiwKLQkweGY5MTJmYjg5LCAweDcyNjk4YmZmLCAweDhiM2JmNTAyLCAweGUxMjNiM2IyLCAweDk0OWQ4OWVkLCAweGE5ZTlhZjZmLAotCTB4Y2RmMjNlYTYsIDB4ZjIxMzBkYjYsIDB4NzE0ZmUzNTEsIDB4N2NjNzEwOWUsIDB4NjQ5M2M0NTYsIDB4ZjM3YjcyZjAsCi0JMHgzZjRmZDNjOCwgMHgzN2IxZWNlZCwgMHhhNDNkMDg3NywgMHhkMDUwOTNmNSwgMHgyMjA5OTU0YSwgMHg3OGEwYzRlZiwKLQkweDI1NjRmZTg4LCAweDc1ODAxZTkwLCAweGZiMTk3ZDM2LCAweDYxZGNmODllLCAweDcxNmQ4ZTVjLCAweGY2Yzc0YjZmLAotCTB4M2E2YWI5MTUsIDB4NzlkMTRiZmEsIDB4NTFlZWY1ZGUsIDB4ZjU3ZmM4ZTksIDB4YWFmZDM1NTMsIDB4YWZmOTIzNWEsCi0JMHg3YmZmOWRkZCwgMHg3NWI0MmYzYywgMHhiOWU0NTg5OCwgMHhjNjY5NzQ3YywgMHhlNDFiYjU3MywgMHhmZGM1OWJlZCwKLQkweGM3NDc2ZGM4LCAweGJjYmUzMTU4LCAweGM2MTI1NmNkLCAweGI2NmRkOWYzLCAweGJiNzIxMjk0LCAweDQ3OGYzYzZjLAotCTB4ZjFiMzZmNmIsIDB4Y2E5YjNhYmMsIDB4MWIzNmQ1ZTMsIDB4ZjJkMzdiY2YsIDB4MjdkZGRhNmYsIDB4YmI1YTBmMDgsCi0JMHhmZWY4YzNlMSwgMHhmZjdlNTRkOSwgMHg1MjBkNWUyMSwgMHgxYmQ5MzhiYiwgMHhiOGFjYmNjMCwgMHg2NmY2NDYxNCwKLQkweGM3N2Y5NTljLCAweGM4YzBhMTJmLCAweGY5ZmMzMWFjLCAweGVhMjY2MTgyLCAweDQ5NjY1YjY3LCAweDliNTRlYzk4LAotCTB4ZDg3NjQyZWMsIDB4NGU5MjVlOTYsIDB4MGRmMTEyNzIsIDB4YmJkYmQ2ZTMsIDB4MTlmNzQ1ZjEsIDB4NmI3YzA4NTYsCi0JMHhmM2I3ZDRmZCwgMHhhOWJlZGU3NSwgMHgwOGM1NmU3MiwgMHg4YmJkMTNiNCwgMHhkOWI3NGU5MCwgMHhiZjMxNTg5NiwKLQkweGRlOTdiMjU0LCAweGMzZjViZmIwLCAweGNhN2NiYTBjLCAweDc5OTRmZTllLCAweGQ4MTViZmEyLCAweDUxMmY2NDlmLAotCTB4OGIxMzNmYjAsIDB4ZmEwY2ZmZmQsIDB4YmJmZWJjYzUsIDB4ODE5ODE1ZTcsIDB4NjBlM2RmNDYsIDB4OWU0ZmJiNGMsCi0JMHg2OGNmNGIxZSwgMHg0MzljNTVhNSwgMHgwZmY3YmY0NCwgMHhmYWNkOTVkYiwgMHg5M2Q4MjU3OCwgMHg3NTgzMGQwZiwKLQkweDNiOWU2NmQ1LCAweDcwOWU5MTMxLCAweDVlMzFiMjdiLCAweGQ4NDkxNzdjLCAweGRiYzJiMjg1LCAweDNkZjkxYTM3LAotCTB4NjM3YmVkNGQsIDB4MjcyODlkOWEsIDB4NzNkMGYxZTksIDB4YzNlZjhhN2YsIDB4MzFjNzg1NTUsIDB4YzUxOGRhYWUsCi0JMHhmOWY5YTI1NywgMHhiYTYzYTllYSwgMHg2N2E4MTA3YiwgMHhjNmRlYzIzZCwgMHg4ZjQ4ZWQxMiwgMHgzODk1Y2YxOSwKLQkweDhlZmM2YjVmLCAweDNmMjhiYTc3LCAweGY3N2Y5YWFhLCAweDI5MThhNmM0LCAweGY0MDBjMjVmLCAweGRkYWQ3NDRiLAotCTB4OGE0YWY5ZGYsIDB4MTE1ZDdmNjksIDB4YWI0ODZhZmIsIDB4NmRiZjg5NTEsIDB4YTMyYzQyYTEsIDB4ZjNiZjdiZjksCi0JMHhmM2YyMjE1NCwgMHhmYWRkNjlmZSwgMHg2ZDc1YzE1NiwgMHhmN2U1Y2E0OCwgMHg1NjRlNGYxNywgMHg1ZmMzZDk2MiwKLQkweDcxYzI1Zjc3LCAweGE0ZGRjNzZlLCAweGNmNWM5ZDY3LCAweDNmYmViZmZlLCAweGFmMzRlOGQxLCAweDY2ZGViZDQ0LAotCTB4OTdmN2ZiZDAsIDB4NTBmZGRjODUsIDB4OWFmZDhmZjAsIDB4ZGJiY2Y3NGMsIDB4MjJlZjdjOGIsIDB4ZGU4Yzk4YmQsCi0JMHhmYjA3ZDQ2YSwgMHhiZjkzNjZlYiwgMHg1MDFlMDMyNCwgMHgzMGRmZWVlZiwgMHhjMGFmMmEyZCwgMHgwOGIwZmVmNywKLQkweDMyNmIyZTdlLCAweDFhYTY3N2QzLCAweGJmMjA4ZmMwLCAweGEzMWY2YTJlLCAweGI3ZWRhN2YxLCAweGY5YWJkYjA2LAotCTB4YmZiNjlhMzksIDB4MjE2Y2QzMTMsIDB4NzY0YmI3OTEsIDB4Yjk2NTMzODcsIDB4YjM5OGU1MDEsIDB4ZDlmMDY3ZGEsCi0JMHhlYzk4N2RiMSwgMHhmZGRhYmU4ZCwgMHhhZDNiYzg0YywgMHhiN2ZiMGRiZCwgMHgzYzRhZmNlMSwgMHg4YzRjN2JmYywKLQkweDZiMjRhZWYyLCAweGVjN2ZmZmVjLCAweDgxMGYwYTMwLCAweGNiYWMyYjFmLCAweDgyYWE3NDcxLCAweGVlYzI0YWZkLAotCTB4ZThmOTE0NmQsIDB4ZDVhOTRhZjUsIDB4OTRiZWYxMTMsIDB4MTQ5ZDZhNTQsIDB4N2RmNTJmNDEsIDB4ODc0YTg3YzQsCi0JMHg5NDJiZGI3NywgMHhmY2U1YTdlNywgMHg2MGFmNjg0YiwgMHhiZTRkOWY1ZSwgMHgyMDQ3MWRkYywgMHg2NzVlMjBmZiwKLQkweDQ3ZTM2YTJmLCAweDljZjdiYjlmLCAweGJlM2E3M2IzLCAweGJkOTI5NGFhLCAweGJiMDE4ZjI4LCAweDQzMDdlYzAwLAotCTB4NDg5YmQyZDIsIDB4M2Y3YzlhM2YsIDB4NzQzYzAzNGUsIDB4ZmNhMTY3YmQsIDB4M2YwNWY3ZGIsIDB4ZWM3ZTBhNzYsCi0JMHhkODA1NmU0YiwgMHhiN2RjYmE1MSwgMHg0YmM3MWQ5NSwgMHgyNTI3NDAxZSwgMHhmNTI3NDg4OSwgMHgzOWRkNDY5OSwKLQkweDhiMTY1NjhjLCAweDVmYjBjNjc1LCAweGZjOGY4N2YyLCAweDkwY2JmNjQ2LCAweDE3ZWMzMWUxLCAweGNmMjI0ZmI0LAotCTB4ZjEyZWQxY2YsIDB4YjQ0NWM4NDQsIDB4ZWMzMTNjNGIsIDB4ZjBhMzY2OTcsIDB4ZTc3OWM0ZGYsIDB4YWRhYjkzNjksCi0JMHhmYTcwZjAxMywgMHhjZWZhNDRlNiwgMHhkYmI0NjljZCwgMHhmYjNlYzA0YSwgMHhkYzVjZDllOSwgMHhlZTg2NTk5NCwKLQkweDNiMDg1M2VmLCAweDc2MGMxMTkxLCAweDVlNzA3N2RhLCAweDFhYmJjYzU1LCAweDFjZDZmZmZmLCAweDg4M2YxYmM5LAotCTB4ZmZkMTk3ZTcsIDB4ZmI3NWYyYWIsIDB4NDBiODA3MTksIDB4ZmJjNzZjYmMsIDB4MWY3NDQ1NzAsIDB4ZjlkNjMyYWUsCi0JMHhlOWJhZjdkYSwgMHg4ODk3NDUwNCwgMHg2MDFlMTFjMywgMHg1YmUyMjIxNywgMHg1MTc2ZTJiZCwgMHhhMzBjM2E3MSwKLQkweGU2ZmRlNzc0LCAweGZkYmY2ZWY0LCAweGRhZTI4MWJhLCAweDg4MmM3ZDNiLCAweGI1YmZiOWRmLCAweDdiNTcxZjRjLAotCTB4ZWQ5OWU0NDMsIDB4Y2Y4OGNhNWMsIDB4ODZiNDE2NzYsIDB4NTM0OTVmZDAsIDB4YWJjOWM1MTksIDB4NzNmNmZhM2MsCi0JMHhlM2JmYTMyYSwgMHhkZGJmOGZhYywgMHhjZjQ1MzVlNiwgMHhkNmViYmU5NywgMHhjMDZmYWM1ZiwgMHg5NzE0ZDVlZSwKLQkweDhiOGYxNWViLCAweGZhZDFjMzhhLCAweGYyOTQzZjUwLCAweDQ2YWRiYzc4LCAweDZmNjU1ZjlmLCAweDdkZGY0MTllLAotCTB4MTJhZWFjNjYsIDB4MzRjY2U3ZDcsIDB4ZGE4ZjhjMzIsIDB4Y2ZmM2EzYWIsIDB4MWVjZjAyMDIsIDB4OWUxYTVhMTIsCi0JMHhkODc4ZWZiNSwgMHg3YmZjOGQ4YSwgMHg1NDA5ODFhNCwgMHhlMWMxZTVhZiwgMHgzYTI3MDVmNywgMHg1YjY1ZDY3YiwKLQkweDJjNTNlNjJmLCAweGQ4ODFhY2UyLCAweGYxODlkYWViLCAweDJlNTdjYzQ2LCAweDgzYzQ4MzBhLCAweDMwMmU3MGZlLAotCTB4YTMwZDQ2NGUsIDB4YmFjMjk5ZWYsIDB4ODcwNWU3NzUsIDB4ZDAzNTZmNzcsIDB4MDNlMTQ3ZmYsIDB4M2MyNmVkNzEsCi0JMHg5ODEzY2ZlOCwgMHg1YWZiNDBjZiwgMHg4MDdmM2ZhMywgMHg2OGUwZWE3NSwgMHhlY2ViZmViYiwgMHhiM2JiYzNmOSwKLQkweDU4ZmY3ZTYzLCAweDUwMzhiNTJiLCAweDc2MTBmOGFmLCAweDM4M2E0ODAwLCAweDZjYTc3YzVjLCAweGY2OGExYjI4LAotCTB4MjM3OGFkOGQsIDB4NGM5NWMzZWQsIDB4MGFjYWY3OWUsIDB4YTFiYjlmNjIsIDB4MGRkZjhmOWQsIDB4MzI3YzhhOWEsCi0JMHhhNjc5ZmQxMiwgMHhmMzAyY2VmYiwgMHg2ZjlmOTRjOCwgMHgzNTczZTMyOCwgMHhhNjcyZjNmNCwgMHhkN2M0NjIyYiwKLQkweGIxMzA3ODk2LCAweGJjZmZmMDRhLCAweDFmYTBmNzhhLCAweDhjMDBiMTY3LCAweGRmMTA2M2RmLCAweGJkYzQ5NjlmLAotCTB4MjYwNjJkYTQsIDB4ZDUxNGNjMjMsIDB4YjVlNGYzY2EsIDB4ZTkwNDNjZWYsIDB4OGQ3ZDBmM2IsIDB4OGIwNzdkYTMsCi0JMHhkYTdiZjgwNSwgMHgzN2RmZDEzOCwgMHg3NGZiZDFiYSwgMHg3ZTg5NGQxZiwgMHgzYWUyODJiZiwgMHhlMTdkZjhkYSwKLQkweDE3ZWZhZmJkLCAweDlkZmNiMWZkLCAweDk1M2UzYzkxLCAweGMzNWE3NDQ5LCAweGViYTcxZmI0LCAweDJiNzRkZGM1LAotCTB4NTNiODNjOTMsIDB4MGYwZjRlYWIsIDB4NzczZTdlNDUsIDB4Zjc0YTgyNGYsIDB4MDQ3NWI1NmYsIDB4OGViNDRiYTYsCi0JMHhmNzVmZDk2ZiwgMHg1OTVkZDIzYywgMHg1ODgxZGVmYywgMHhkYmVmZTg5NywgMHgxMTdlOGJhZSwgMHg5MzAxYWNmMiwKLQkweDFhOGU4MTZmLCAweGNmOTFlZjgxLCAweDJlOTMyOTZjLCAweGExMGU3NGM5LCAweGJmOGJjZmJmLCAweDM1ZmQxMTczLAotCTB4Zjk0OTNkMWMsIDB4YmRjNDdiM2IsIDB4YTc1YzZkNzAsIDB4OGEwNDMzZWEsIDB4M2MxMDdlZjAsIDB4ZDA4ZjExOGYsCi0JMHhkZjhjYTVjYSwgMHhmNWU2ZDI4ZiwgMHgzNTA0MDE3ZiwgMHg3ZmUwNWY2YSwgMHgwMDAwN2ZlMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4NDUxNDc4MGIsIDB4NzRmNTcwYjYsIDB4OTkyNGNjZjcsCisJMHhmMjEyNGM5OSwgMHgwMDQ5M2RlMCwgMHgyMTBlMDMxMSwgMHg5OTcwYzA0NCwgMHg0NmEyYzAyNCwgMHgxNDFhMDIwZCwKKwkweDg0OTIwMjc1LCAweDdlODg5NzkwLCAweDMzZmVhZWVjLCAweGE4YTA4OTAxLCAweDE3YWNiOWYxLCAweDM3NjE0MWRkLAorCTB4MGMwNmU4YjIsIDB4NjBlMDM1MTgsIDB4YmEyZWIzMDAsIDB4ZTdjMDQ1YzEsIDB4MzZiYzgwMjYsIDB4YjlmMDQzMjQsCisJMHg5ZDZmNWVjYiwgMHhkZDMzZDU1MywgMHhjN2M0MDk5ZCwgMHhmZmVmN2ZkZSwgMHhhNTVmOWY4ZiwgMHg3MWViYWFiYSwKKwkweGU5ZDRlN2RlLCAweDI3OGYzMjQyLCAweGRmMjEwYTY0LCAweDlmOTY4ZmMxLCAweGY4OTA4NDhiLCAweDIwNmY1OTUwLAorCTB4ODg0MTkyMmUsIDB4NmRmNDY2ZDcsIDB4ODhjZmE2NGMsIDB4NjhlNjdhMjMsIDB4ZDExZDk4NWEsIDB4ZWY0MzU4MzcsCisJMHg5ZWQ1Y2JlOSwgMHgxODY5MzRhNCwgMHgxYzc5MGYyMSwgMHgyM2UyMTI1OCwgMHg1YWI1NGU4NCwgMHgxNmY1MDUyMCwKKwkweGUwOTMzYmE4LCAweDIxM2UzYTdkLCAweDBmZjhlOGZkLCAweDMwZjhlMjQ2LCAweDFhMTg5OTJkLCAweGUwMzExMDY3LAorCTB4ZjlhZDUzN2IsIDB4NDIxZWIwODksIDB4YzNlNjQ3NmEsIDB4MjEzYjE2ZmMsIDB4OWY5ZjdiZmQsIDB4YTdlYjg4OGUsCisJMHhmN2MxMGRlZiwgMHhiNTllZmEyNCwgMHg2NTI5ZWZlZiwgMHgxM2ZkMGU1NywgMHhmNjZkZGZmNiwgMHhmMTA4MTQ2ZCwKKwkweDcxYzdmY2VmLCAweDg2OTllZjU4LCAweDVkMTMwZTM5LCAweGQ5Yjc3NjZmLCAweGJlZWEwNTNmLCAweGI2ODk5ZjZjLAorCTB4YzBmYjZlZTcsIDB4ZTVmZWQxMjYsIDB4ZGEwOTQ0ZGIsIDB4ZjAyMzNiMGQsIDB4ODI3NWNlZmQsIDB4YTY5NWVhMGYsCisJMHhhNGFlNDdkNiwgMHg5MTM2YzBmNSwgMHhmOGQzMGYzYywgMHg0MDkyMDYyZCwgMHg2MTMzNzFjOCwgMHhlYjE1ODczZiwKKwkweDVhYWMxMTQ1LCAweDZkZDc3ZWJlLCAweGEzNDk1ZjMwLCAweGY3ZDA0NDg5LCAweDJlODgzNzhmLCAweDI4ZDkyZmE4LAorCTB4YWY5ZDA4ZjgsIDB4OGMwN2I1ZmMsIDB4YzU3OGU4MDMsIDB4YzIzZWExM2UsIDB4MWYxYmViNDEsIDB4M2VlODNhMzMsCisJMHhkOGZjZWY5NywgMHg3Y2UxNDZkNiwgMHgwZTI2NjNkYSwgMHhhNGEzZWUyMywgMHg1MjkwOGQzZSwgMHgwM2U5OTZkZiwKKwkweDliYTVmYmU4LCAweGJlODAyNzA1LCAweDRlZDlkZDc0LCAweDgzNjk1ZjU4LCAweGUzYTQ1YzNjLCAweDIyOGJhZTJkLAorCTB4ZWU2YzkxOGUsIDB4ZDdjYzA4ZWYsIDB4ZGJlNzE0N2MsIDB4Zjk4MzBmMjYsIDB4NjVkZmNlNGEsIDB4NmVlNTI0MDQsCisJMHhjYTJlOTE5MywgMHhkZjYwM2FlOSwgMHgzZGE3YmNjYSwgMHgwNTNlNzE2YiwgMHhkMjJmZTU5ZSwgMHg4YWJmNjhmOSwKKwkweDZjMjcwNTk3LCAweGRjNDBjMmIxLCAweGQ3Y2U4ZWIwLCAweGIwNWUwYTIyLCAweDhkYWFmZWMwLCAweDdkZWFhYzIzLAorCTB4N2Q4NzZlMTQsIDB4MWJkNmZhOTQsIDB4N2Q2MDViYTcsIDB4Njk0NThkZWIsIDB4ZDcxNmYxYTEsIDB4N2Q3NmE3ZmQsCisJMHhkZDEzNTM2YiwgMHhmM2UzYmQ2OSwgMHg3NDgyODdiNCwgMHg0YTVlYTg0NCwgMHg0ZmU5MGI4OCwgMHg4ZTgxMTlmMiwKKwkweDg1ZTdlNzk1LCAweGUyZjdjNDE4LCAweGNjMzg5MTNhLCAweDNhMTVmMWExLCAweGU5YzA3ZWYwLCAweGYxOTU4Nzc0LAorCTB4MTJkYmM3MDEsIDB4ODQyY2UwM2IsIDB4YzczYjZlYjcsIDB4NTRjODE0YTMsIDB4OGY5NGFmOGYsIDB4N2FlODNlMDAsCisJMHgyYzc2M2Q2YSwgMHg2MTI0ZjcxZiwgMHg4MWM3YTRmOSwgMHgzM2RhN2I3MCwgMHgxZWI1Y2IxMiwgMHhjNjdmM2UyNywKKwkweDc1Y2IwMTMzLCAweGNmOTYxNzFlLCAweGU5NjA2Njc5LCAweGJmNjNlNGYzLCAweDU4MDUzZGU3LCAweGYxYjhmMDZlLAorCTB4MjUzZDZmZjksIDB4YWE3OWQ2NTgsIDB4Y2YyNmY5ZjAsIDB4N2IzNzJjMzIsIDB4NjVmY2Y4YmMsIDB4ZWIyYzJhY2YsCisJMHg2ZTU4YjUzZCwgMHhiMmQxN2MwNSwgMHg3ZWMzZTNjMSwgMHg1ODc1M2RkYiwgMHhmMWVhN2EzNiwgMHg0NjllZWJmOSwKKwkweDM4NzBkNzJjLCAweGI2NDhiMmRhLCAweDczNjBlMTQ0LCAweDNiNDUzYjExLCAweDY1NzNjZDg5LCAweDliMWViNGNiLAorCTB4ZjMwOWVhY2YsIDB4NWE0NmQ5YmMsIDB4M2FkMzcwNGYsIDB4MzI4MGNiODUsIDB4ZDY4OWI2N2YsIDB4ZjZiMTU0MDcsCisJMHgxYzkyZjcyMSwgMHhmMTBmYWQzMywgMHgzNTk0ZjZiMiwgMHg1YTA4OWNhZSwgMHhlZDY1YTk0ZiwgMHg3Mzc5ZDYyMywKKwkweDg0N2Q2OTIyLCAweGRhOGZiNThmLCAweGEyODljZmVjLCAweGFjZjU1MWY1LCAweGM5MTM0YzdkLCAweDE4ZmFkMGI1LAorCTB4ZWZhN2FiM2YsIDB4Njk1YWU1NzMsIDB4ZDU5NWJkM2QsIDB4ZTZmMTNmMzMsIDB4YjMzZDY4ZGEsIDB4YTkzZmJkOGQsCisJMHgyYzNhMjdjMywgMHg1NWIwZjEzZCwgMHgxNDIwMmM3NiwgMHhiOWRlNGQ1NywgMHg5YmNhODkyZSwgMHg1ZGM3NDZhZCwKKwkweDdiYzg0OWM0LCAweDg5MmVmOWRlLCAweGQ5MDY4N2NhLCAweGRlNmRlZDg1LCAweDc0NmVhY2M1LCAweDc3Yjc3YjYxLAorCTB4MmVkZmY2MjksIDB4YWE1ZGIxYmIsIDB4YjdkYjBmYmUsIDB4OWVkOGRkMWIsIDB4ZWQ4MzVkNTAsIDB4ZGIxN2IyOGQsCisJMHg4YTNmNTY0NywgMHgyZjQ2OGRlZCwgMHg1ZWFhNGZiNiwgMHg2NWQ3ZjU4YiwgMHg1NWU3YjYxZiwgMHhhZmZlYzdhZiwKKwkweGZlZDg3ZDFiLCAweDVjOWJmZGY4LCAweDA1ZmQ2OTUzLCAweGU0MWRiZGMxLCAweDVkYzEwYWRlLCAweDllODE1MjQyLAorCTB4ZWU0MDkzZWEsIDB4ZjlmOTcwZDUsIDB4NmQxZDEwMWMsIDB4NDQ2ZmU5YWYsIDB4NmVmYWRjM2UsIDB4YmZjMDBiZTYsCisJMHhmNTA3ZWJmOCwgMHg5ODNlZGZhMiwgMHg4OWJjZTM4YywgMHgxYzc0YzhlMywgMHhhNGUzZTJmMSwgMHgzMzQxMzdiZiwKKwkweDI1N2JmYTRlLCAweDM4MmQzOGNhLCAweGM2ZGY0NDRlLCAweDI0ZGVmYWQ5LCAweDJiZGU3YWVkLCAweDBmZDljNjU1LAorCTB4ZGFjMmI0ZmMsIDB4ZmZhNTdkYjcsIDB4OWViYjRiMzksIDB4ZTMyOTk3M2YsIDB4ODllYjg0N2MsIDB4MWE3YWRiZTksCisJMHhhN2MyZDAzZSwgMHg3YzIwODNlMSwgMHhmMTM4ZTI4ZSwgMHhjNjRmNWI3ZCwgMHgzMjdjMmQ0MSwgMHhkM2UxMDYwZSwKKwkweGVmZjRlMzgxLCAweDA3MGQzOGRiLCAweDM4NjlmMGI1LCAweDk3Y2Y4NDE4LCAweDdkYzE5ZjA4LCAweDIxYzY1N2RiLAorCTB4MGUzMjdjMmQsIDB4NWZmM2UxMDUsIDB4YmVlNDllYjgsIDB4NTNmZGIzOGQsIDB4N2ZiNjdjMmQsIDB4NDk4Zjg0MWEsCisJMHhlZjBjZjU4MCwgMHgzZjMyYmVkYiwgMHhmMzI3YzJkMywgMHhlYzdjMjBiMywgMHg3ZGE1Y2UzOCwgMHg2N2ZiNjcxYiwKKwkweGZmNmNmODVhLCAweGZlOWYwODJjLCAweGJlZThjZTM4LCAweGFmZjMyYmVkLCAweGZlNjRmODVhLCAweDE0OWYwODM1LAorCTB4YjYzM2UwMDEsIDB4ZmM2OWViNmYsIDB4YzY5ZjBiNWMsIDB4YjlmMDgzY2YsIDB4ZGYxOWM3MGMsIDB4Mzg0Y2Y1YjcsCisJMHg4NGNmODVhZSwgMHg2NGY4NDFlMywgMHhmNjI2YmVlMCwgMHhlM2M2OWM2ZCwgMHgxZTM0Zjg1YSwgMHgzMjY3YzIwZiwKKwkweDZmYjkzMzhlLCAweDQyNzA5YWZiLCAweDI3MDk5ZjBiLCAweDhlOTlmMDgyLCAweGViYmI2NGUzLCAweGM3NDY1MTk4LAorCTB4Y2UzZWY2YjEsIDB4ZjBiNDY3ZWIsIDB4MTA0Y2ZkNzksIDB4MzhlM2Q3M2UsIDB4YTkzOGU4ZDMsIDB4NTI2NzFmMTcsCisJMHg5MzNlMTZhNywgMHgyOWYwODMzYSwgMHhlYWFlNzFjMCwgMHg3N2FmMzhkYiwgMHg3YWYzZTE2YSwgMHg4NTNlMTA2NywKKwkweDdkYjVjZTM4LCAweDJlYTRkN2RiLCAweDc1MjY3YzJkLCAweDNiOGNmODMxLCAweGEzNmI5NTUwLCAweDNhMTc1NGVkLAorCTB4OTVjYWZhNDUsIDB4NDA5NzJlMWQsIDB4ZDU5ZGEyZWIsIDB4ODA5M2JiNDUsIDB4ZjYyYTIyNWQsIDB4ODk3NTY5MDYsCisJMHhlNmNiN2RmNCwgMHg4OTA3ZjQ5OCwgMHhiOWM4ZWVkYSwgMHg0YWM3ZTgxMywgMHhkZGI1MzFhZCwgMHg1MjIxM2QxMSwKKwkweGI4YzRlNzYzLCAweGI4ZjUzNTYyLCAweGZkMzQwMzE5LCAweDM0NTNmM2UzLCAweGEzMDU4OWVkLCAweGRkZmRlZDM0LAorCTB4YzBmYTlhZTksIDB4ZmU5YTQ5OTIsIDB4MzQ3MmFiODMsIDB4YWVjYmExZjUsIDB4ZjY0ZmY0ZDYsIDB4YTdhOWEwZGUsCisJMHhkMzU5YmFhZSwgMHg3Y2VkNzg3ZiwgMHg2YjI1ZmI0ZCwgMHg5N2VkMzU0YiwgMHhlYTY4OTZmYSwgMHg0MmZkZDU5NywKKwkweGZkNzQ3ZmQzLCAweGU1ZmI0ZDcyLCAweGRhNmEwZjhkLCAweGQ3MWZmYWM3LCAweDNjYjVjN2Q0LCAweGJlM2ZlOWEzLAorCTB4ZmI0ZDc5ZjUsIDB4NjkzNzg3MTUsIDB4NmRiNjI3ZGEsIDB4M2NhZmQ0ZDUsIDB4Y2VjZWJhZjksIDB4NWY4ZmQ4YjMsCisJMHhkMDIyZWJjNiwgMHg3Zjc2NjEzZCwgMHhmOGY3ZTY3ZiwgMHgxYmFjNDZhZCwgMHg4ZWQwNTgwNywgMHg3MjJkNjVkZiwKKwkweDM1ZjhhMzFjLCAweGQxYzBiNWJlLCAweDcwMTdlMjhmLCAweGY2NDU3ZTBhLCAweGRhNGI5MjgwLCAweDI2N2JmM2U4LAorCTB4ZDNiMTJmYjksIDB4ZGQxOGY3ZTcsIDB4ZDhjM2RiOTcsIDB4MDQxZTk0YTcsIDB4YzNhNTA0OTIsIDB4ZmRiZWE1MDAsCisJMHg2M2QxOTkwMSwgMHgyM2YzYzBjZSwgMHg5NWZiZTlkYSwgMHgxODg4YzA4NiwgMHhiMzEyY2Y1YSwgMHg3NzdlODExYiwKKwkweDhhMmZjYzBhLCAweGY0MTU0OTE0LCAweGY0MTEzNDhiLCAweGNlNDgxZTBiLCAweGEyYWJjMTdjLCAweDI5ODM1NWQ3LAorCTB4NzFhMTBhMWYsIDB4MjRlZWM5NTcsIDB4YWFkZTMzYjAsIDB4MWQ4MmY3NmUsIDB4ZWU5ODMzNTIsIDB4Y2QyMTAwNmIsCisJMHg0YmRmYmI0MiwgMHgwNjA3YjRmZCwgMHhlOWI5MjUxNywgMHhiNTIzMjY3OCwgMHgxYmYzZDVkMywgMHgzODY5ZmNlOSwKKwkweGViZDAwYjdmLCAweDdjN2YzMDdiLCAweDI5NGRmOWNmLCAweDliZjMzNDEzLCAweGU2Njg5NDg3LCAweGZjZTkxYjM3LAorCTB4YWZkZTQyNzYsIDB4YTdlN2M1M2UsIDB4Yzg0NDk4NDgsIDB4Mzg1Mzg0NWYsIDB4MDk0ODY5YmYsIDB4OTE4MGZmY2UsCisJMHhmOWVhMmJmYSwgMHgxZmYzODMyMywgMHhkNjdmZmQ4NiwgMHgyNjUzZmVkYiwgMHhhNDNmZjc2OSwgMHgyMzdmYmI1NCwKKwkweGVhOTFmZmRiLCAweDQ4ZmU3Y2IzLCAweGUxNTFmZmRjLCAweDkwZmZkYjJjLCAweDEzN2ZiNjUyLCAweGJmMzgzNzFiLAorCTB4OTNmZjA4MmQsIDB4MmY2NzdmMzAsIDB4YjM1MjliZjMsIDB4NWExZmZiYjQsIDB4ODliZmRkYTYsIDB4ZmQ1ZGRmY2QsCisJMHg4MmRmOWYyZCwgMHhiZTEzOWZmMywgMHg1YTFmZmI2NSwgMHg0ZDFiZjM4NiwgMHg4ZmQwMjc2ZSwgMHg5NTY0NjA3MSwKKwkweDFkNGZjZThmLCAweDA0NDkwNzYxLCAweDQwZjNhMTcyLCAweGZkMTYzMjM5LCAweDE0ODQ5N2U0LCAweDkxM2RjNzVjLAorCTB4OGFiZWRlOGMsIDB4ZjI4NmY0YTQsIDB4NThmY2NiYzYsIDB4OTk2Yzk1MWYsIDB4YjRlMmVmZDQsIDB4YjY3Mzc4YmUsCisJMHhiNjEyZTQxMSwgMHgyMTY1N2Y1MywgMHg4ZDFkZWE1ZiwgMHg3OTM3ZDIyMiwgMHg0ZTFiZTRkMiwgMHgyOGQ5ZGJkNywKKwkweGM3N2VhMTdhLCAweDIwN2Q5MzkzLCAweGU0NGQyYWZmLCAweDRmNzg3Y2Y2LCAweGZlNzg3ZTIyLCAweDlmYTM1M2Y5LAorCTB4NWY0YmVmNTcsIDB4OGY5NWFjMmUsIDB4MmRmOGE5YjcsIDB4OTBlNTQ3ZTgsIDB4OTgxNjU1OTEsIDB4MWZhOWFlZDcsCisJMHhhMTEwN2VhMSwgMHhkNDI3YzVmZSwgMHgyNDk0MjBjZiwgMHhiZTZjY2E4ZiwgMHgwNGJmYThjZiwgMHgyZmVhMzZmNSwKKwkweGQ1MjEzYjQxLCAweDc1ZTI1ZmI4LCAweGFlOGMzMDdkLCAweDNmMjg5ZjNmLCAweDI2ZjNlZTE3LCAweDllM2EyOTY0LAorCTB4YzhmN2Y4YzQsIDB4ZjgwN2MxMWEsIDB4MTQ1OTdkYjgsIDB4M2Q2ODdlMDUsIDB4NGQzOGRlODUsIDB4ZmIwZmVlOWQsCisJMHg3YzEyYWUwNywgMHg4NjM4MGJjZiwgMHg5MzMzZTAxYiwgMHhiZDYwNDc4ZiwgMHg2NzYwNWViNCwgMHhlOGEyMWNlZiwKKwkweGIwNTE0ZmVmLCAweDhhNDBkNTYwLCAweGIzMzhkMDhiLCAweGE0NGU0Yjg4LCAweDVhNTljZmVmLCAweGEyZTg0MzI4LAorCTB4MmYwNjEwNTUsIDB4MjA1OWZhMDEsIDB4ZTAxMTk3NTMsIDB4NjkyNzhkZTcsIDB4N2FlODM4OWMsIDB4ZjFiM2I2NmYsCisJMHg2M2U0YmE2NywgMHgxNGY1YWE2ZCwgMHgzZTU3NjZjOCwgMHhhMTQxNGY1ZCwgMHgzNTlmZWI4OCwgMHhkMWZlZGI0MywKKwkweDYxOTcyOGNlLCAweDNkNTcyZDBjLCAweGM5Y2NmMzgxLCAweDU0ZGZiNmQ3LCAweDc1Y2ZhZGEwLCAweGVmNTRlYjZiLAorCTB4NmVmN2EwYzksIDB4YTczZmQxMjksIDB4OWNmYmExNjAsIDB4NWQyYjg0MTcsIDB4YWRlNzVkMjgsIDB4NTZiNzBlMWMsCisJMHg1ZTBkNWVjOSwgMHhkYTU1NmRjMSwgMHgyNmUwYTAyMSwgMHg1ZjdjMmZiOCwgMHhmNmZmZDllYywgMHhhMTdhZGE2NSwKKwkweGIwNWY1YjU3LCAweGE3M2UzNzRhLCAweGZmMWNlMzliLCAweDY4M2U4MDQ3LCAweDgzZTgwMjc5LCAweGE3MThmM2MyLAorCTB4ZDU1YzkwOGYsIDB4YzE4ZGM3ZDIsIDB4NTBmYTMwNmQsIDB4NjI1YzcxZjYsIDB4OGViZTM4MjgsIDB4ZGFjMmM3ZDEsCisJMHg1MGY0ZjBhOCwgMHg5NzA3YTQxOCwgMHg3YTE0YmU5YSwgMHhjM2QzOGRiOCwgMHg4YTFlOWNhNywgMHg2YWU5NmFkNywKKwkweDRjYWRmMTJlLCAweGIyZGZlZmEyLCAweGU5ZTIxNzY2LCAweGU4Yzg1MGEwLCAweDNkMGE5N2UxLCAweGMxZTg2OWI0LAorCTB4OGY0MWU5Y2QsIDB4M2QzOGRiYmYsIDB4NDY3M2Y2ZGMsIDB4YjY3YzdhMGYsIDB4NWI2ODdhNzEsIDB4MjkyNjRlN2IsCisJMHhmMTRhZjEzZCwgMHgzYzUzYTlhMCwgMHgzNzZlZjBlOCwgMHg3YzUwM2QwMiwgMHhmOTg3YTU4NCwgMHg4ZGQzN2RjMSwKKwkweGRlMDJmYWQzLCAweDljNWYwM2Q2LCAweDA1M2RiMDFlLCAweDRlMTA0ZWMwLCAweGNmNmE3ZWY4LCAweDY4NGU1NGZlLAorCTB4YzM2YmM1ZWEsIDB4MzFiMmJmZTMsIDB4NmE5OGVlM2IsIDB4NTdmNWU1NWQsIDB4ZjU1MzFkYzUsIDB4NTMzNzVjNWIsCisJMHg5YmU0NWY1MywgMHhiYzVmZTlhYiwgMHhiZWQzNTBiNiwgMHhhNjkxNzZiMCwgMHgzYmFhYzE3ZCwgMHhlZjQyZjUzNSwKKwkweDZmZmQzNWNmLCAweDY5YWQ1NjVmLCAweGI1NmFiNWJmLCAweDkyOTZmZGE2LCAweGI5ZjUzNGM3LCAweGZhNmI1ZmVlLAorCTB4NWViMDU0ZGYsIDB4ZmYyNzNlZDMsIDB4YWNmYjRkNDUsIDB4ZjUzNDViMTksIDB4MzRkN2FlOTksIDB4MmYzYjBkZmQsCisJMHgzMWU4MWViZCwgMHhjMDQ4YTBlYiwgMHg3MWU2MzhmZSwgMHhmNzFmZGQyMCwgMHhhNGYyYzQ4YywgMHg3MTdjODljNywKKwkweGNiMDEzM2RhLCAweDRmY2Q4ZDdkLCAweDdjYmI0OTVjLCAweDI2ODgyODE5LCAweDkxMTY3ZjRjLCAweDJjZjY0MjE4LAorCTB4Y2FhZjU3NzcsIDB4NTA0ZTdkMDIsIDB4Nzk3MWZlZWYsIDB4MTA3N2I1NTEsIDB4MDcwNjUzOTUsIDB4YWQ2ZjM5YzIsCisJMHgxMWM3Zjg5MSwgMHhlMjUyODAyMiwgMHg1MGM0MDdmMywgMHg2ZDFiNTY3YiwgMHgzZGJkZWI4ZiwgMHhiNjE0YWQ2ZiwKKwkweDBhNGRhYjNkLCAweGUzZTU2ZTNiLCAweDYxZWQ0Mzg1LCAweDdlMjEzM2UyLCAweDNlYzEwMzI2LCAweGI5ZjZlMmVhLAorCTB4MjA0Y2JkYmUsIDB4ODRlN2VhZjksIDB4OGZmZTQ3MmMsIDB4NWNmZDMwMzEsIDB4YTI3MjY0NjYsIDB4MWNmZjZiNmMsCisJMHg3ZmJhODM2MiwgMHhlNjg1ZDU0NCwgMHg5NWNjYTdhYiwgMHhhYTkxZjQwOCwgMHhiNWUyZTNlMSwgMHgzY2U0Njk5NywKKwkweDNjNmRlODgxLCAweGNkMzhkOWQwLCAweDU3NzVjNWYzLCAweGQ4ZWJkZTZhLCAweDJiYmFlMjI1LCAweDdkNTA4NjQwLAorCTB4MDdlNDhjM2QsIDB4ZmQ5N2EwMGMsIDB4OGQ2NjQzY2QsIDB4Y2ViYTc1ODYsIDB4MzU1ZTQwMWEsIDB4ZDhmZGEzYzYsCisJMHg3NzExOTllMSwgMHhlNjNjMDI0YywgMHg1M2QyNzk2MywgMHg4ZjcxZTU4MCwgMHg5ZTYzY2IxYiwgMHg3ODhmMmMxMiwKKwkweGYzNmNiMGFhLCAweDMzZjJjMzJjLCAweDRmY2IxNzhmLCAweGZjYjBhYjNjLCAweGU1OGI1M2M4LCAweDJjNWFjZjYxLAorCTB4NTg3YzdhMGYsIDB4NjFkNGYwMWUsIDB4MWVhN2JlZjksIDB4MjM0ZjU2Y2IsIDB4MTcxZTlkOTYsIDB4MjliZjBhOTYsCisJMHhkZGQzZDBmMCwgMHg0ZmE3YWU0OSwgMHg4MDVkZmQwMywgMHgwN2M0ZTJjZSwgMHgwYTBkNTdhYSwgMHg4YWUyNTlkMSwKKwkweDU5YmRhYjg3LCAweGQ2ZjM3MWExLCAweDI0OWQzODlhLCAweDA4NjFlODY4LCAweDgxZTM2NGY4LCAweDVlOWM0YzVlLAorCTB4YWRlN2I3YzIsIDB4OWVkODJmOTUsIDB4MWQ4NzI2ZDUsIDB4N2ZmOWYyYmYsIDB4ZjljZGJkMGQsIDB4YTIxNmY0OTEsCisJMHg3YTNhODFhNywgMHgzZDE4YmQ0YSwgMHg4N2M3MTI0ZCwgMHhjMThlNjllOCwgMHhhNzFmZjRjZSwgMHgxZjYwODdhNywKKwkweDYyOGZmYzYxLCAweGFiYzZlYTMwLCAweDE0NTczYWVjLCAweDczZjM2NzhiLCAweGIyZDE2YTA3LCAweDdiOWYzNjc4LAorCTB4MTVhZTFkMDUsIDB4NDhkZjNmZWQsIDB4YzhmNzczYzAsIDB4Nzg4MDhmYmYsIDB4YWE2MWY3N2QsIDB4ZGY3YjkzMjgsCisJMHg3YTVlOWU5ZiwgMHhmZDBiYmI4NywgMHg1NTFmMjJhMCwgMHhiNjdhZTNhMiwgMHhiODMyNDQ0NywgMHgwY2M4MTg0NiwKKwkweGVhYzg0ZTkyLCAweGNlNzViZmUxLCAweDQ0YmFjMzRmLCAweDlmN2RlMTYyLCAweGYzOTg2NjczLCAweDRmNjcwMjI4LAorCTB4ZWI4NzE3ODksIDB4NjM1N2ViMGEsIDB4Y2ZlM2JjNjAsIDB4Y2ExMzIzZmMsIDB4ZTYxNDg2MzksIDB4Njg4YjM0ZGYsCisJMHgwYmZmMTNkZiwgMHg1MDZmODA0ZSwgMHg0OTljOTkxZiwgMHgwYzBmMDcxMCwgMHgzZWQxZGEzNywgMHhmMGI0NTlmMCwKKwkweDY2N2FkMmYzLCAweDI5YWI3ZTA4LCAweGRmNTE1YThjLCAweGZjMjEyNmQ3LCAweGEyMzU3ZDg2LCAweDc3ZTAxZjdmLAorCTB4MzE3ZjM5MzEsIDB4MGRmN2NlNzgsIDB4ZjNjMDk3ZjgsIDB4NjJmMWYyNjIsIDB4MWNiODkxNzIsIDB4ZmRkMjM3MmYsCisJMHg5ZDFjZWQ3NywgMHhlNDAzYTBmZSwgMHhhZGUxODVlMCwgMHhkN2U5NWY5YywgMHg3ZDI4YmNmMywgMHg0YWVlM2EyZiwKKwkweDc1YjhlODUwLCAweDg4ZjNhMTA4LCAweGVmYzcxZGEyLCAweGM5ODRiODZlLCAweGRiZWVjNTJmLCAweDA1ZjVmMjY2LAorCTB4YjU5MjY3YWYsIDB4ZjljNTNkZTMsIDB4YmJhZjE5NGYsIDB4ZjgxYjA1ZTUsIDB4MGM5MjRiNWIsIDB4ZjA2MTYzZjYsCisJMHhmNWU1OTRhMCwgMHhkYThiNzZjOSwgMHhkNmQ0NmNmZSwgMHgxOTg1NmJiYiwgMHgzYTI3NjhmNSwgMHgwNjhmNjdhMiwKKwkweDFmYjc2MTNkLCAweDNiNzIwNjFiLCAweDljNjU0YjA5LCAweGZiNDY0OTI1LCAweDRlZjcyYTMxLCAweDMzNDZhNWQ3LAorCTB4ZTRjN2NmM2YsIDB4OTQxOGU2YzEsIDB4NjYzZGE3MTcsIDB4YWY1M2ZmZWMsIDB4OTQ3MWI3YTcsIDB4NDBkMjEwZjUsCisJMHgxZTQxOWE4ZSwgMHhkZWQ0YjZkMywgMHhjZjRhZjdmYiwgMHgzYzQ2MTdkMiwgMHhiZjkyNmRmNywgMHg0Y2QwZmIwMiwKKwkweGZjMGVmZmZmLCAweDVkNjEyMjBkLCAweDVlYjJiNzE5LCAweDg3MmU5YWY0LCAweGYzMzU5YmU3LCAweGNhMWNmN2QxLAorCTB4Mjk3N2ViMTksIDB4ODkxYmUyMTcsIDB4OTZlODU3MWMsIDB4NWM2MzhiZWEsIDB4OGJhZTJjOWYsIDB4Y2ZlZDZiYjAsCisJMHhiMmJkNGQxOCwgMHg2MzVkYmZiMSwgMHg1NDFmYzI4ZiwgMHg0MTJhOTJmZSwgMHhlMzI5ZmEwMiwgMHg1OTI1ZDNlNCwKKwkweDdkNzQwOTU2LCAweDEwOTA0MjZmLCAweGZkNjA1NmU4LCAweDQ2NmRjZGNhLCAweDk1Y2UwM2I3LCAweDViN2FkZTE5LAorCTB4NGNkZmM1MWYsIDB4ODk3YzkyODksIDB4NjFjZjE2YjksIDB4OWQyZmVhNGIsIDB4NGNlNjdhMGEsIDB4ODgwNDhhYzMsCisJMHhiYjE2MmMxYiwgMHhmMzBmYzllZiwgMHg3OTMxMmNiZSwgMHgwNzI3YzhiZiwgMHhhNzNkZjZiNCwgMHg1NWM3NDIwZiwKKwkweDk0NWM2MzllLCAweGVhYWI4ZTU4LCAweDhmMTYwNjFkLCAweDAwOWI4ZmQxLCAweDFjNWZjNmUzLCAweGY3OWIxNTNlLAorCTB4NDEzYjA3NGYsIDB4YzY4YWE3MGYsIDB4Y2EzNzQ2YjMsIDB4NjY1ZmZhNDUsIDB4ZmMwYTRlMDgsIDB4MTNmMzE0ZGUsCisJMHg2OTdlM2EyNCwgMHgyZGM2M2I1ZCwgMHgxMWRlY2E0ZSwgMHhiYzgwYmNiZiwgMHg0YjNmYjllYywgMHhkNTI4ZjFkMiwKKwkweDE1YTRiY2JlLCAweDgxM2Y5OWU2LCAweDM3MWM0NDRmLCAweGY4ZTU0YzdkLCAweDA0YzkzZmE5LCAweDRmMzkxMGU0LAorCTB4NDg2MjY1N2IsIDB4MDYzYmZiODYsIDB4ZjkwY2M4NjIsIDB4MTYxYmYzM2IsIDB4NGZiYzAxZTcsIDB4ZTU0N2JmODEsCisJMHhkZjI0MWRlNiwgMHhiNTIwNzg4NiwgMHg5Y2RmZTA5OSwgMHgwMDE5ODYyMSwgMHg3ZGU0MzNhNywgMHgxZTE1MzhkYiwKKwkweDg3MjMyNTcyLCAweDk0ODI5NTMzLCAweGYxYzE0YzFlLCAweGVmYzFmZGRkLCAweGI0ZDQxNTMyLCAweGI5ZTA2MzhhLAorCTB4YzIzZmY4YTQsIDB4NzI0NzE4NzcsIDB4NTBiNzk4MGIsIDB4ODk3YjllYzAsIDB4OTdlODFhYjksIDB4M2YxYTUxZmEsCisJMHg5YTUxZmE4ZCwgMHgzNGEzZjUzYSwgMHg0MzcyMjJmNSwgMHgxNDI1ZTQwMiwgMHg5ZjEzMjkzZCwgMHhiNGQyNzA4MCwKKwkweDg4ZWM5MjhmLCAweDU1NTI2MmM3LCAweGFmZDFmNjAzLCAweGJlNmRmYzc5LCAweGU5MDM0ODlkLCAweDdkNWZjYjNlLAorCTB4ZWU5MGIzMzYsIDB4YzU4OTZhZTcsIDB4ZjU3Mzk0ZmQsIDB4MGUwY2IxNDUsIDB4YTMzZTI1YTUsIDB4N2Y3M2QyY2IsCisJMHhkZGM2MWI0NywgMHg4YzNmMjU0OCwgMHg2ZmNmY2VjNywgMHgwNTFlNjIzNiwgMHhkYzk5NGFiNCwgMHg3ZGU5NDlmNCwKKwkweGEyMGQ4OWZmLCAweGZkMDZjMjJiLCAweGJkNjU3M2U4LCAweGZmN2ZkZmM5LCAweGYyMTJmZGZhLCAweGI0YTNlZTM4LAorCTB4ZmEwMTI2NmUsIDB4YzAyNzkxZWIsIDB4MDlkNzIzZjcsIDB4N2UxODVmMmUsIDB4YWY3NGU0MmEsIDB4MDEzYmE3ZTgsCisJMHhmMTQzZTM3ZSwgMHhmNTc0ZmJhYywgMHg0YWJlMWNkNSwgMHhmYjVkMjlmZCwgMHhmZDJmOTYwZiwgMHhiY2JlNDY4OCwKKwkweDkzZWZiYTI5LCAweDAyNzkzM2M2LCAweDAwYTQxN2YwLCAweDFlMGZkN2YyLCAweGY4YzdhOTNmLCAweDdmMWY4MWFiLAorCTB4NjkwN2YxYjIsIDB4ZmY4ZTllZjksIDB4ZmViYTRmZDQsIDB4YmZkNjNkNjEsIDB4Y2JmYWRjM2UsIDB4YmI2OTdkNWYsCisJMHhkMjk3ZWE5NywgMHgyMzY1M2MzZiwgMHg0OTRlZGY5NCwgMHg4YTRlMDliNSwgMHgyYjhkYjJmNywgMHgzYjkwMmU2ZCwKKwkweDdjMDZkNzkyLCAweGNlMjdjYTcxLCAweDg3MGY0NzA4LCAweDA2YTU3Y2I4LCAweDc4ODA0NTg4LCAweGM3NDlmYzJiLAorCTB4YTFlOWJkM2YsIDB4Zjg5ZWMwZWIsIDB4Yzc2Y2EzNmEsIDB4Yzk5ZDZhMzgsIDB4NWNmNGEyNmYsIDB4OGYyOGIwZDEsCisJMHgzYjdhYzE4YywgMHgxNjcwM2ZhYiwgMHg1MWIyYmZlOCwgMHhkM2E2YTIzZSwgMHg5NTNkZGZkMiwgMHg5NDM1NzkwMCwKKwkweDkyMWEwNjUyLCAweDdmYTNmNGEwLCAweGYzZTFiMTUyLCAweDU0NmY2MGU5LCAweGFiZjIwMDkyLCAweGZmOTgzZGZlLAorCTB4ODdkNDU4OWIsIDB4OWVlOGM2ODUsIDB4NDk5ODE4ZWQsIDB4YWZkOWY3ODAsIDB4YjNhMWUxYjIsIDB4NmFmZTBkYTIsCisJMHhiZTkwMzhjMywgMHgzN2Y3MDk3ZiwgMHgzZjZiMjQ1YSwgMHg4MmI5MjczYywgMHg1NGYyMDE1YywgMHgzMWYxMDc4MSwKKwkweDhiYzU2MzdmLCAweDRlZDMxYWJmLCAweGUxYjFkM2Q3LCAweDA1NDEzNjRmLCAweGVhNGZjNTI3LCAweDliZjA1ZmFlLAorCTB4Y2JiZDFkZDcsIDB4ODdjYTRlZWYsIDB4ZDE1NmJiNmEsIDB4ZWU0NjhlNGYsIDB4YjJiMTM1MjcsIDB4YWVkYmY2NGMsCisJMHg2Y2E0ZjJhNCwgMHhkMmY0ZWNiZCwgMHhiZDJmNjVjNywgMHgyMDY3ZGJmMCwgMHhjOWExZmQ3ZSwgMHhiZjhlOWMzOSwKKwkweDA3M2RhNWY4LCAweGUyZmFkMTI3LCAweDNjYmY3MjJkLCAweDkwOGIwZGI2LCAweDI1NGJjMjEwLCAweDdhNTk3ZmZkLAorCTB4YWZhNTBmMDgsIDB4NDYzYTMxZWMsIDB4YzZmN2U3YjMsIDB4NzhiMWYwODYsIDB4MTkyMzJlY2IsIDB4YjkxZTEzZGQsCisJMHg2ZDhjYmJmNSwgMHhhOTc4MzA5NiwgMHg3NjBlOWY2ZiwgMHhiZjE3OGFkZiwgMHgzYmJjODIzNiwgMHg4OTIwNTNiNSwKKwkweGI5ZTA2MWM5LCAweDg1ZGEwZjdlLCAweDIzYzQyNzAwLCAweDZmMTA1M2M3LCAweDE0OTVmZWJhLCAweDE0NWZhMDJmLAorCTB4MzdkYmU5M2MsIDB4ZTMwMjc5NzEsIDB4OWU5MGQyMzksIDB4Y2U5ZDdlNWYsIDB4Yzk5MWYyNWYsIDB4NzkyZmZiMDksCisJMHhlYzFiMmVmOSwgMHhjNTU0ODRlMywgMHg5NWQ5ZmFlOCwgMHg0YWRmMjAwOSwgMHgxZDgyNmY2NCwgMHhlNGJjZjY0YiwKKwkweGRlOTFiYmI5LCAweDlkZGZmNzhhLCAweGFlOTJlMmMwLCAweDk1ZDQwNmZlLCAweGJmYjBmZWRlLCAweGUwZTZlYjg1LAorCTB4MWI4ODhhZmUsIDB4NTllNGFlZTksIDB4Y2I0N2RmMzEsIDB4NjMzMjI1MmYsIDB4YjhiZTE4NGIsIDB4ZjI3MjY2NTYsCisJMHgyMzU0ZjNjNCwgMHg1MDlkZmRkMCwgMHgyMmZiYzBmNCwgMHg2Mjc3MDNkNywgMHhiZTZlZjNkYywgMHg2MjMxNmExNywKKwkweGMzMzM0YmZkLCAweGMwZDkzMGQzLCAweDJiZDMyY2U1LCAweGYwZGQ3YTQxLCAweGQzOGJlYTAwLCAweDcwODk1ZDgzLAorCTB4ZDIxOTU2YmUsIDB4YzQzN2E4MGYsIDB4MTkxMmQzZmQsIDB4YzE5ZTk4N2UsIDB4Yzk5ZWE4ZjcsIDB4YmZkMGU3ODUsCisJMHg4YzQ1NzY1NSwgMHg3YTg3YmNkMSwgMHgyOTdmOTk0NSwgMHgzYmFlOWY5ZiwgMHgxM2I1ZWMxMiwgMHg4ZmZkZTEwOSwKKwkweGRmMGFjYjlmLCAweDQ1NDJiYjUzLCAweDY2ZmUyYTVmLCAweDM1NjFiZWZjLCAweGRmODU2ZmUzLCAweDQwNjczMzdkLAorCTB4MTgwNzE3ZmIsIDB4YTA3YmMwZmYsIDB4ZmNiYWU5NjcsIDB4NmJiZWQ4ODksIDB4YzBmMjgwYjYsIDB4ZjhlMWZjNDQsCisJMHhmOWNjODM3YSwgMHhkMGFlZGI1YSwgMHgyNGI3NWQwOSwgMHgwNWU4YWI0NCwgMHhmODQ1OGZjNiwgMHg3YTJmNWVhMywKKwkweDkyYTdiZTkyLCAweDlmMzA5NTk3LCAweDBhNzhlN2FkLCAweGZlNzMxNmRmLCAweGY5NmIyMTlmLCAweGVmOGJhYzlmLAorCTB4OTk2NTNlNTMsIDB4MzNlZGZiZWMsIDB4M2Y5NGFmYzAsIDB4NTdlMDBlYmQsIDB4ZmRmNjFmMzksIDB4MDdjZGNkYjcsCisJMHhmYTdjYTY2ZiwgMHg0Zjg1N2FiNywgMHhjZjUzZjJiNSwgMHhlZjViMjVhNywgMHg3YTlmNDAyNiwgMHhhMGRiZmQzZSwKKwkweDRmOTYxMjJhLCAweDdjYjBmM2U5LCAweDdmZWRhODNhLCAweGYwMmE3ZTU0LCAweDQ1ZjgwMmFiLCAweGM4YTdlMDg1LAorCTB4YThlMGRlYzMsIDB4ZDk1Njg3OTcsIDB4ZDIxZTU2MTEsIDB4ZDk5MjAxZGYsIDB4YmExNGZlOTMsIDB4ZjRhZGU4NTMsCisJMHg0MTQzZTVmNywgMHg1MmU5MDRlZSwgMHg1ZDIwYmJhMSwgMHhkZmE3NzQyYSwgMHhmYTdlMTZhZiwgMHhjMTMyNDlmNiwKKwkweDI2YmZlNTc1LCAweGQ2NWNmZmEzLCAweGU5NDJmMmM0LCAweDY2MDc3YjdiLCAweGE4NWM5YzIwLCAweGRlZWQ0OGM2LAorCTB4NzVkNGZkODEsIDB4YWY1ZWFlOWYsIDB4ZDVkMmVmZWIsIDB4ZGRmZDc1ZjMsIDB4YTY5NTdhYmEsIDB4YjM2MzU5N2YsCisJMHhmZGZlMjA5MSwgMHhiMmUyN2U5YSwgMHhiOGQxYzg2NywgMHg2M2VhZjQ3MCwgMHg1OWMzNTk3ZSwgMHhjMmU4MTdhMywKKwkweGU1ZjdjMDEyLCAweDc5MGJjNGU1LCAweDIyMWQ4MTg2LCAweDI4YmEwNWM2LCAweDdlMjA2YjhjLCAweGU3ZDkzOWIxLAorCTB4NjU2MzcyYTUsIDB4NzQzZjhiMDQsIDB4NThiNjAzZDksIDB4NjE4Y2FlNWEsIDB4YjFiYzQwZjUsIDB4ZjI5ZWU0MDYsCisJMHhlMmMxMTAzYywgMHgwMWY5NWQ4YSwgMHg5ZmNhOGM1YiwgMHg1MTEyNmY2YSwgMHhjOGY5Yjc2ZSwgMHgxNjdlNzA4YywKKwkweDQ3YzgyOGQ1LCAweDc2YjdhNDZkLCAweDRkMzVlZTc2LCAweDA2NTkwY2I0LCAweGQxNWFhNTcxLCAweDFkZjgzNjA5LAorCTB4ZTBkOTM3ZDUsIDB4MjlhYmE5ZGMsIDB4ZmEwMmZhZjUsIDB4NDUxZmUxN2MsIDB4OGFlOTdiNGMsIDB4NzU4MThkYjQsCisJMHhlYTRiYWYxMSwgMHg0ZTZmZjJhZiwgMHg1OWQzZWYxMiwgMHg5YTBiN2Y3NCwgMHhjNzczOWY5OCwgMHg0MjNkOWQxYSwKKwkweDE1M2QyMGQ2LCAweDQxMWE5NjU5LCAweGUyN2Y1MjllLCAweDg2YmNmNjg4LCAweDFmMjk0NWYxLCAweGI2OWQ2NGFmLAorCTB4ZDI5Zjc5NWQsIDB4YTVmM2ZhMDEsIDB4NmVlZGI0MWIsIDB4YTA3ZjBmZWUsIDB4MzI1OGM5ZjAsIDB4MmNhM2ZiOTYsCisJMHhmMmU1YzMwZSwgMHhmYWVkMzEzNCwgMHhhZThmOGEwMiwgMHg2ODk4OTExNiwgMHg0NDQ5YmJiZCwgMHgxNjZmNzQ3YywKKwkweDIzNGYxMDdjLCAweGI3ZTQ3OGRlLCAweDc5NDAxMjBhLCAweDAzYTljMGE4LCAweGJiZDhjOWY4LCAweGY2ZDhlYWJjLAorCTB4ODEyZmU2NjksIDB4M2M3ZmI2NmUsIDB4ZDk2OTNmZTYsIDB4MTFjM2ZkYjEsIDB4ZDVmZDQwNmYsIDB4MjYzZTQzNDMsCisJMHhlZWU3ZmIzZCwgMHhmZjczYzA4YywgMHhhNDU2OWRhZSwgMHhlZjFkYWVmNywgMHhkNDI1ZjkwZSwgMHg2MTM5MzM1ZiwKKwkweGJmM2I1ZDlkLCAweGQzZjQwMzFlLCAweDAyNTRkY2I1LCAweDMwNmJhZWYyLCAweGQ4YWVjNzhiLCAweDM2OThmNWYxLAorCTB4MzNmN2FmZDQsIDB4ZmU2NDYxZmQsIDB4M2ZkMzc3NjEsIDB4NDFmYTEzM2UsIDB4NzYwNTc3NDksIDB4ZTQyOGNlYzMsCisJMHgyM2Q3Y2FhNywgMHg2YmJiZGYzMCwgMHg2ZTk5ZDdjNywgMHg5ZmI3NGZjYiwgMHhkMWU3OWUwYSwgMHg1YjA1MjU2NSwKKwkweDJjMzE3ZDYxLCAweDhkZjJhMThmLCAweGQzNTQyZjg5LCAweDc2MWJjYmY5LCAweGY2ZDAxNzE5LCAweDM5ZmYzN2RjLAorCTB4ZDc2OGU0MDYsIDB4NzUwZjY2NTYsIDB4NDFjZjZkY2EsIDB4ZjE5NDQzMWUsIDB4ZTI5OTcyZGMsIDB4OGE5ODEzYWIsCisJMHgzM2JmY2QzYSwgMHhkZjAyZTQ2NiwgMHgzZmNiODRmNCwgMHg1N2Q2M2UzMSwgMHhhZmZjYTQ3OCwgMHg2MmUwODc4MSwKKwkweDMzZWFjZWYyLCAweDZmZWZiMDBiLCAweGUzMThmYjNmLCAweDRiYTQyNjlhLCAweGFiN2ZiZjY1LCAweGU1N2I0NmFmLAorCTB4ZmVjZWZiNjIsIDB4ODJkZjZlN2YsIDB4NzZmYjJmYmYsIDB4ZmJlZjliZmYsIDB4N2FiYmQ3MzgsIDB4ZTc0OWU4M2UsCisJMHhmYWMxZWUzYiwgMHhhZTI3NTY0YiwgMHhlZWY0OGZiNywgMHhmZmM3ZmQ4NSwgMHg3YmZmZWVmYiwgMHhjNTJiN2RlMywKKwkweGZiZTJlZGJiLCAweDVhZmZjZGZlLCAweDM2ZjFmZmJjLCAweDdlM2I3NzhlLCAweDNmZTZmM2Q3LCAweDU3ZGY3ZDcxLAorCTB4NmZmOWJkY2UsIDB4ZjZkZWY3OGUsIDB4YWRmNWQ4YWYsIDB4MDY3YjJhODYsIDB4YTkwMTVmNWQsIDB4MzE2MTgyYjUsCisJMHg5MmRiYmUzNywgMHhkNzZjODBlMSwgMHg4ZjMwZmQ3MywgMHhjMzRiY2UwZSwgMHgyMzAxNGRmOCwgMHg5MDRkMGJmMywKKwkweGZiN2UwNzQ3LCAweDBiODk0MTFjLCAweDFkNzUxZmEyLCAweDFiYWUxZmI3LCAweGM4NzY4MjU0LCAweDk5ODdhZTc1LAorCTB4YjU1NTIwZGQsIDB4YWRmZWQzNjYsIDB4OTg5YzBiMzksIDB4MGZkMjQ5NzMsIDB4N2IzZWExYmIsIDB4ZmQ2YmFmMzIsCisJMHhlMjA0ZjdjOSwgMHg3ZjFkYTgxMiwgMHgyZDM1Y2U1ZCwgMHhlZjVlZDc2MCwgMHhhNWVlZDExMiwgMHgxZmJiZGEyNSwKKwkweDllY2U5OTBjLCAweDNkZmFkMDRmLCAweGZhZGFkZDczLCAweGZhZGEwNTRkLCAweDhkZGUzZTFjLCAweGM2ZmZhZDg0LAorCTB4NzEwN2MxN2MsIDB4MTNmNjUzNTUsIDB4MzU2NzEwZjEsIDB4OTA4OTk0MmQsIDB4NTU0MmY5MGMsIDB4OThiZmMxMmIsCisJMHg3ZjdkYWY5MywgMHhlM2MxZjgxZiwgMHg1MzFjM2M3ZiwgMHg5NzFjMGE0ZCwgMHhiNjQ4NWMyMCwgMHhmYTQ4ZGNlOCwKKwkweGVlYmU0NzAwLCAweDdkNjNkOWQ2LCAweDI0NGNjZjkwLCAweDhkZTM4MzI3LCAweDgzOGM0ZWU1LCAweGU2NWI3ZjczLAorCTB4NTU5NmNiZWYsIDB4YjJjZmMwYWQsIDB4ZmM1NmNmY2UsIDB4NGRlMGRlZTUsIDB4ZTM4ZGZmYjgsIDB4MmZlMDg0YTQsCisJMHhiZmY0NDRiYiwgMHhhZGZmOWQ2NSwgMHhlMmZiZTVlMCwgMHg4ZmUzYzE0MywgMHgzYTk3Y2JjNSwgMHhiOGIyMGNiYywKKwkweGNjYWJmMDA4LCAweDE2YTk4NWZkLCAweGNhMGZhYjI3LCAweGM4ZGU3ODI3LCAweDlmYTkwNWZkLCAweDQyZDM3ODhiLAorCTB4Y2M4YmRmNzksIDB4NWYzODZjZTYsIDB4MzAxNDhmMzMsIDB4MWFmZDcxZGUsIDB4Mzk4M2Y1MTEsIDB4ZTU3NWMwNGQsCisJMHg4ZjMxOTA0ZiwgMHg3ZTQzNzNmOCwgMHg2ZjNiZTAyNiwgMHhiZjE1MTVkYywgMHgwMjcwY2I2MCwgMHhiODcxMTczYywKKwkweGI0MmE5MTE3LCAweGVmZjljOTVmLCAweDg0Y2FjYmJlLCAweGY2ODIwNjczLCAweDIxMTcyMmVmLCAweGFkYmY1MmQ3LAorCTB4NDdmMDRiMjgsIDB4NGIxNTc4NTIsIDB4MGU5ZDFiYzQsIDB4MWM4MTZmNzEsIDB4YjViZGM0ZDEsIDB4NDdmZGY4NzUsCisJMHg4YjljNjg0MiwgMHhiZTRkZWZmNSwgMHg1ZmU1ZDRmYywgMHgzMjNiM2NhOSwgMHgxZTQxZmE4YywgMHg1ODQ5YmI5ZSwKKwkweGFmZjE1NmRjLCAweDcwNjI2ZjZmLCAweDdjMTMyY2FjLCAweDdlNzc0ODI5LCAweGVlNzU1ZjM5LCAweDgzZTcxY2Y4LAorCTB4MGUzYmRlYmYsIDB4YTNmNjY0ZTUsIDB4ZWZkMWEzYTMsIDB4NmZkMDM5NzcsIDB4NDM3ZWU0YTgsIDB4MGQxMWQ3YjcsCisJMHhhNmVlYWU3MSwgMHg5YjNlN2U1NCwgMHg1NWNiNTM2YiwgMHhmZGNmZGNhNSwgMHg3ZTQwYmZlZSwgMHhhNmJiMmQyMSwKKwkweGY4MjJiNTBhLCAweGYxODAyNDcxLCAweDA4ZDRlZjVjLCAweGZlNGMzMWIyLCAweDE5MzFmZmViLCAweDYxNTRmZDM4LAorCTB4NjI3ZTAwMWMsIDB4ZmQ5MWUwMjYsIDB4ZDFhYmU5OGEsIDB4YWRiYzJhYjEsIDB4MzQ5NGY2YjksIDB4ZTAxZTI3YTYsCisJMHgwZTc1NDQ3NywgMHgwYmUxNjNmOSwgMHg3NWMwM2U3ZSwgMHhmNGRiNDQ3ZiwgMHhhZGZiMzBmYywgMHg1NjM4YjEzNSwKKwkweGUyZGY1YmRlLCAweDM0Mzc5Yzc3LCAweDk3MDBjYjI1LCAweDlhOGFhNjFiLCAweDI2NTVmYjczLCAweDIzOGQ5N2VlLAorCTB4Nzk1ZDYwZTMsIDB4OWI2NTVkNmYsIDB4MTE2OTc4MDgsIDB4NjZkZGYwOWQsIDB4YTM1OWQzNjUsIDB4YjA3OWNjM2IsCisJMHgzZTMwOWUxZSwgMHhjYThmZDVjNCwgMHhlNzgwMjJjZSwgMHgwODIzODdkMSwgMHhmMmVmZDFmOCwgMHhmODM0YzY3MywKKwkweDQzMGQyMjZlLCAweDJiODgyZTNhLCAweGI1YzM5YWZlLCAweDcyYzc2NGQzLCAweDFjYjY1ZTU2LCAweDZiNGRlNzRmLAorCTB4YTM4NThmYjAsIDB4N2ZiYzAxZDQsIDB4ZTMyMTE4MjcsIDB4YmQ4Nzg5MjEsIDB4NTAxYmY0YTcsIDB4MWJiNWZhYzYsCisJMHhmNmUxMTVlZCwgMHhlZDgyM2MzZiwgMHhlZjM4OThiZiwgMHhmYmZjMjA5OSwgMHg1MWZiMmRlMSwgMHhlYzA3M2ZhYiwKKwkweGFlM2NhOTgzLCAweDA5YWU4M2QyLCAweDBjZjc0N2YyLCAweDFiZmEwN2MxLCAweGU3YWM2MWZjLCAweGRmODRlZmIxLAorCTB4YmViM2JlNTUsIDB4ODU1OWU5ODEsIDB4ZGU3MGY1ZWUsIDB4Y2NhY2UxY2IsIDB4ZTJjNGRjN2YsIDB4ZmNlMjdmYWYsCisJMHg4MTU5YzBhNSwgMHg0YWJkN2VhZiwgMHhhNmFmMmE3ZiwgMHhkNzUxZTNhOCwgMHgxOTdkOGUzNywgMHgyNjhhOWJlYywKKwkweDQzYTA2ZWMxLCAweDQ2NmQ0ODU1LCAweGM2Y2FjM2UwLCAweDZmMzg2NGM3LCAweGUzNjBlYjk5LCAweDhjN2YyOTEyLAorCTB4ZDNhMDlmM2EsIDB4OWEzYmYyYzQsIDB4MGRiY2FmZDMsIDB4MWFkY2U0ZTgsIDB4ZTI0MmU4MTMsIDB4MGRhY2UzYmEsCisJMHgwNmJiZjBlNCwgMHg3YmUxOWZlNywgMHgyMjdiZWY2YSwgMHg3OTAxNzhkOSwgMHhjZWE3YjFmNSwgMHg4ZjUyNTUzNSwKKwkweDljZWI4YzliLCAweDQzMmQ5NjU1LCAweGIyOTZlY2Y4LCAweDhhYTI3MjVkLCAweGIxNGQzYTllLCAweDFmM2NhZWQ4LAorCTB4ODc0OGU2NTAsIDB4NWMzZTc0ZTcsIDB4MTMxMWY3ODcsIDB4ZDI0MmVmODEsIDB4ZmJmMTViZWEsIDB4NjJhYTViZDQsCisJMHhkNDk2MWQxOCwgMHgzZDYyMzJlZiwgMHhmMzJiZmIxOSwgMHhmOWU4ZjMyOSwgMHgzNjllNzY2OSwgMHg2ZTQxNzhlZiwKKwkweDRiODAyMGRiLCAweGQ0YmZjOTllLCAweDFmNGU4NjE5LCAweDhlZTcyYjMzLCAweGI4NGY1M2RmLCAweGY5OGVkZDI4LAorCTB4MmM0ZjQ4ZmYsIDB4MWI0NGY0NTUsIDB4ZWYyYmI5ZTYsIDB4M2UzMzM1Y2YsIDB4YzQ4OWU5NTcsIDB4NDk2MjdhNzAsCisJMHhmMDExMjNiNSwgMHg2YTQ3NjRiMCwgMHg5MmM5MzAyMiwgMHgwODRiNGUzZiwgMHhmMDNlMjdhNywgMHg0M2UzNzNiMCwKKwkweGFlZWViYmZjLCAweDVjNGY1NGQ5LCAweGIzMTNkMmFlLCAweGY0NGU5MDIzLCAweDk1OWFlNWVmLCAweGU4OGI4ZDczLAorCTB4ZmY2ZjA1MDksIDB4MDNlNmYyYzMsIDB4Zjg2MTEzZDAsIDB4NTZiMzQ2ZmIsIDB4NTRkOGRjNGYsIDB4YzZlMjdhODgsCisJMHhmYmU2YTJkOSwgMHgxN2NkNmJhYSwgMHgwOWQ5MTNkMywgMHgzYjJlYjE3MywgMHhjZmQwYzJhMywgMHgzOWJmZGMwNywKKwkweDYxZmJmM2M0LCAweDZiMTdkMDFlLCAweDliODQ3NmNjLCAweDI2ZjQ2ZjVlLCAweDU1ZjZjN2Q3LCAweDgyNWZmZmFlLAorCTB4OTdkNzIyYjMsIDB4NDNmNzYxY2MsIDB4ODI0M2E0ZjQsIDB4MmU2NGJjZjQsIDB4ZDAwMmViOTUsIDB4NGJlYjkzMjMsCisJMHg0ZTcxZTU2ZSwgMHgwN2NkOWM5ZCwgMHg5NmExOWIzOSwgMHgwYWZkZWNiMywgMHg5NTBiZDMzNywgMHg5YWJmYzk4ZCwKKwkweGFlNmZkYjQ3LCAweGRhNjY5ZDk1LCAweGRjOTBlNmZmLCAweGRkY2I1NGNkLCAweGUxMDk2NjM1LCAweDk2ZWU0M2RjLAorCTB4YWU3YmI5MzAsIDB4NGZkYTFjNjksIDB4NTNlZmVkYmQsIDB4M2NhOTZmMmUsIDB4NDMwY2U2MWIsIDB4YTJmMzA1MWYsCisJMHgxZGRmZGYzNCwgMHhkYTc2ZmIxZCwgMHhlZjJmYzAyYiwgMHhmYjdlNzg4YSwgMHhmNjAzYjczOSwgMHgwMzNiN2Q4ZCwKKwkweDdjNTNlOWVjLCAweGZjYjhkYjNkLCAweDVjZjhmNGViLCAweGM4MWNhOTUzLCAweGQzZDk4M2JkLCAweDg0NDU5YmU1LAorCTB4ZTMwMzQ1NWYsIDB4OTE2MThhZmYsIDB4NGZhZDA3M2UsIDB4Y2YxNmZmNGYsIDB4NjBlZjE3NjEsIDB4MDc3NGIwZTcsCisJMHhmYzJhZDk3OSwgMHhhZGI3N2UyZiwgMHgxNjA1Y2UwNiwgMHgxY2YwMTdhZiwgMHgwMDVmYmUxOSwgMHg3ODczMTY3OCwKKwkweGUzMTczOTE2LCAweGRhZjE0YTM5LCAweGU1M2ZlN2YwLCAweGE2YTJkZmJjLCAweDVmMGYxOGY1LCAweDJiZjZkM2U0LAorCTB4MjlmNTc2MWYsIDB4NGNmMjQ3ZjAsIDB4YWY3OTBmMGMsIDB4YzlmNWJlMDgsIDB4ZWJhMGNmOTAsIDB4ZTc4ZDVjZTcsCisJMHhkYWY1ZTU0NywgMHg3ZWY5MDdlNywgMHhiNGZlOGExNywgMHhlNGZiZTg1NywgMHhkM2JmY2NjZiwgMHgxZWEwZmJjMywKKwkweDEyM2YyNTJlLCAweDVjMjlmYjJlLCAweDcwZjVmZTMyLCAweGQ0MGUwZGU5LCAweDAxZjNjN2JlLCAweDJiMGUzYzNkLAorCTB4NjQ5ZDI1NzIsIDB4NmU3ZTFmMDAsIDB4ZjE1Y2ExNzAsIDB4NDJlMTQzYmUsIDB4YjFlM2JiZTcsIDB4NDBmYjlhZTEsCisJMHhiY2I4NzM4ZSwgMHhmNGQ3NzA2YiwgMHgwMjE1N2U4NywgMHhiNzVlMmJmNiwgMHhhZDAyNGY2NSwgMHg2MzI3YWJjZiwKKwkweDc4YTE3OGUxLCAweDA3MGY1NmFkLCAweDAzODM3ZWY1LCAweGFhYmNmYWY1LCAweGM3ZTQwMjJkLCAweGZiZGZlNDJlLAorCTB4YzMxZWY4OTUsIDB4NWQ2ZTU0N2IsIDB4ZWQzY2Y1NDYsIDB4ZTRkZDIwYmYsIDB4ZmRmMDczODYsIDB4OWI5NDAxMTEsCisJMHg0N2M2ZGQwYSwgMHg4ZTI1ZmIzMCwgMHgwM2EzYTFjYiwgMHgzZjUxNTMwMiwgMHhlNDc2MGEzNSwgMHhkMzA0N2Y0NywKKwkweDcwNGYxNDU3LCAweGM0ZjM0YmJmLCAweGJjNzNhN2FmLCAweDIzNTJiOGIwLCAweGM1MjU2M2MzLCAweGY0ZjNmMDFiLAorCTB4NjNhZjVlMjYsIDB4NGEyZGUwNzYsIDB4MzlmMDVlYmQsIDB4YmJhYjkwMDQsIDB4OGM1Zjc2NjQsIDB4OGUwNGUyNDAsCisJMHg4NDdlOTUwNCwgMHgwNGVjZDVmMywgMHhiNDc3OWUxNSwgMHgyOGRmZmEzMywgMHg4ZjgxZjEzOCwgMHhmMDQzZjdmZSwKKwkweDMzZGQyYmRjLCAweGY0YWZhNjNiLCAweDNlMjljMGFlLCAweGZkZTc4YjQyLCAweGUzNzlhZDExLCAweDliZjljMWZhLAorCTB4NzM3YmM0ZTAsIDB4OWNmMDYyOWEsIDB4YmIyZDU4ZTgsIDB4YmY5NTI1ZmYsIDB4ZjAwYmU3YTcsIDB4ZDFmN2Q0M2IsCisJMHg0Mzg1ODRjYywgMHgwODhjZjM3ZSwgMHg3OWM1MGZjYywgMHhhNjVkOTg1MywgMHg3YmZhNGY5NiwgMHhmZTZmYmU4MCwKKwkweDQ1NjkyNTUxLCAweGM3OTQyYzdiLCAweDA0ZGU3ZWU4LCAweDM0MTBjZGUzLCAweDA5MTA0ZWY5LCAweDA5ZmYzYTAzLAorCTB4N2NkNWJmYzYsIDB4OTI0OWYxODEsIDB4ZWY5NmYzMWQsIDB4ZWRjZjJiYjIsIDB4NWUyY2JiZWMsIDB4Nzk5YzFlNmYsCisJMHhlZjg1MWU2OCwgMHgxM2EyNTViOSwgMHgwYzliYTg1YywgMHgyMDU5ODM4ZSwgMHgwOTk0MWU2ZiwgMHg3ZGI5Y2JmMCwKKwkweDgxZTk4YmIyLCAweDg1M2JkNDI4LCAweGVmYzUxZWVmLCAweDBlNTkwYWQ5LCAweDhmYmMyOTFhLCAweDdjYTM5N2U5LAorCTB4YmQ1MTFmM2QsIDB4MGE1ODgyZWQsIDB4ZjcwZjFmYTksIDB4ZWU3NmNjZTAsIDB4Nzg4MGU2OWEsIDB4OTVmZWM2NGIsCisJMHgyYjM5Y2U3MCwgMHgyMGYwN2VkNywgMHhiYjM1NzNlMCwgMHhhYWM4ZTkwNywgMHhlZWQzZjQ1YywgMHg3ZTQwNTNiYSwKKwkweDA2ZjE0YzNiLCAweDlkOTljZmVmLCAweDlkMjBmMDdjLCAweGYxNTVkNmY3LCAweGNmMzk2ZTc4LCAweDljMjM3ZjE1LAorCTB4MjdkYmNlNjMsIDB4ZGZiNDFkM2EsIDB4MTZhZGViODIsIDB4NjZiY2M3MzgsIDB4MmFkYzQ4YTQsIDB4NWE0YWRjZjgsCisJMHhhZjMzYmUzMSwgMHhiMDM5Y2VlYSwgMHgwZmFhMTJlZSwgMHhmNzI4NjRjNSwgMHhmYTg0NGI0ZiwgMHhhZmRmMDEzYSwKKwkweGYwOGRiYWY0LCAweGRhZWI2NmJkLCAweDNhMGNjNmIzLCAweDA3ZWQxMTdmLCAweGM3NWNhZjYwLCAweDEwNmU1NWZhLAorCTB4NWRmYTkwOWMsIDB4Y2ExOGY0ZDQsIDB4MDIwZGEyY2IsIDB4NGFkMzM0NWUsIDB4MWIzMzVmZWQsIDB4ZTNhNjY3ZDcsCisJMHhlZmEzYWViNiwgMHhiYzMxN2FkMywgMHg4ODZlZTMwZiwgMHgyN2NlMTFiOSwgMHhmMTNhZTkyYiwgMHg3OGQ1MDlmZCwKKwkweGRmNDQ1ZDJlLCAweDc1YTRjZGEzLCAweGRlMzg5ZGMzLCAweDgxMDI3NWEyLCAweDI2NGIwM2VmLCAweDAxMzIzZjI0LAorCTB4M2IyN2RiYzYsIDB4YWVkMGZkYTEsIDB4ZGQ2MTFiNWYsIDB4ZmFmOWQxYjcsIDB4ODgxN2YxZDMsIDB4M2ZhMGQzNmQsCisJMHhjNzYwYTVmOSwgMHg0NmVhODdmYiwgMHgwYmFkZGM2MCwgMHg1NDJmMGMzNiwgMHhlNjNhYzcwZCwgMHgwYzEwM2IxMywKKwkweDY1MWYzYTkyLCAweDRlZmIwNDQ3LCAweDc1NTk2OGI4LCAweGNkYWJlYzBkLCAweDQwNmM5ZjFiLCAweDA0NmIzYWJhLAorCTB4YzI4YzdlM2QsIDB4M2M4NzRkZGIsIDB4MmU3OTY0NmEsIDB4YzZhM2RlY2QsIDB4ZmQxYzk1MzYsIDB4ZGYxNTIyMjgsCisJMHgxYjMxYTNiZiwgMHg5MjE2MjZmMywgMHg3MDliY2M3YywgMHhhNDdiMzM1NywgMHgwZjg0NjU3ZCwgMHhiMmVkNmFlMiwKKwkweDZmM2MwODdkLCAweGU3YzI2OTVlLCAweGZkMzEyZjlkLCAweDBkYjgzOWQzLCAweGQ2MjdkYmUzLCAweDVmYmUwNGM5LAorCTB4ZjUyZWIxNWMsIDB4ODllM2MwNjksIDB4OWJkMjMyY2QsIDB4MWJjYjJjZjgsIDB4YzU4OTdlMjgsIDB4YjFkNzlhYzksCisJMHgzNTJjNGY3MSwgMHhhMGI1N2JiMiwgMHg1ZjhiZDY5ZCwgMHhiNDBhZjI1NCwgMHg1MWM4YWM3MiwgMHgyZjRhNzI4YSwKKwkweDZiNzJmNDk3LCAweDQ2ZDU5M2QxLCAweGYyMWVkOTIwLCAweDk0NzRlOTZhLCAweGVmNTRhNTU3LCAweDkwZjVhMTAwLAorCTB4MzA2YTgzNTcsIDB4NTc5N2FhNmUsIDB4YzhhMmM0OTUsIDB4NWY4ODc0YTksIDB4YmUwZjk2MTYsIDB4ZjFkMDJkNmQsCisJMHg4MTgzZWNhZCwgMHg1ZjZiZmY1NiwgMHhiNzdhMDUzZSwgMHg0OWUwNGFjYywgMHg1YTdmNjQ4NSwgMHg4MDQxNzQ2MCwKKwkweDZkMzVlNjVmLCAweGEwZjgxMmY5LCAweGRlMDQ1ZTY0LCAweGYwMWM3NWM3LCAweDI2YjM3YzAwLCAweDhiYWZjZjBlLAorCTB4NmYwODg1N2MsIDB4NzhiNzJmMjUsIDB4OTVjZTk2YWQsIDB4Yjc1Y2UzZjgsIDB4ZmQ2YTVjNDgsIDB4NWM0NTEyNTUsCisJMHhlZTg3N2VhYSwgMHhlNzRhZjRhMywgMHhmMDUxYmRiOSwgMHg3NDNjYTg4MSwgMHhiYmRlZmI1ZiwgMHhjNzZlYjAzMywKKwkweGY2ZTMyZDc1LCAweGQyMmIxYWMxLCAweDlmOWZhMWYzLCAweDdhZjQwOTVkLCAweDAxMDJiZGRiLCAweGRkNzg5ZDdiLAorCTB4MmIwZmEwMzUsIDB4ODgwZTBhZDYsIDB4Y2JkZjE3MGYsIDB4ZWZhNjJmZGUsIDB4ZmQwZmJhYzMsIDB4YTUxNWQxOWEsCisJMHg3ZmQwMDc2ZiwgMHhmNmM3YmFjNSwgMHg4MjBkZmY2MiwgMHhiNDNmYzYwMywgMHg4OWVkMTBiZSwgMHhiMDQ4YWYxMiwKKwkweGZhM2I0MzdkLCAweDYxNGY1NDBmLCAweDU3YjM1OTllLCAweGFmZmEwMDRjLCAweDA3NjRkZmI4LCAweDIzYTE0OTUzLAorCTB4ZjlkYjJlODUsIDB4ZWNjNDA4N2QsIDB4YmU4YjMzMWMsIDB4MTUxNjBhYjcsIDB4YzUxZTkzZGYsIDB4NGZhODIxMDIsCisJMHhiZDJhNGU4MSwgMHg1ZmRhY2U4YywgMHgzNjQwOWQ5MiwgMHhmNjRiYTcxNywgMHhhZTA5ZmMxZCwgMHhlNzY3YzU1ZiwKKwkweDc0ZWY4NzRjLCAweDA0N2VhOThhLCAweDk3NWU2ZDNhLCAweGUyM2IwNDZiLCAweGZjYzA0Zjg0LCAweDQ5NzQ5ZThhLAorCTB4NGEzYjZhMmMsIDB4MDU2N2NiYTEsIDB4ZDA3YmFmMjYsIDB4N2IwZThlYTMsIDB4NGJhNzFkZDAsIDB4NTEyOGZlODUsCisJMHhiNjU5NWZhMywgMHhmZGYwMjY0ZiwgMHhkZDFlOWViZCwgMHg5MDhkZmQ3MiwgMHgzMmY4NTFmZiwgMHg2ZjVkMGZkZCwKKwkweGQxY2ZjZDZlLCAweDQ4ZTA1NzVlLCAweDJmNTAwOWViLCAweDhmZGU1ODkyLCAweDEyZTUwZmMyLCAweGRlZmIwZmNiLAorCTB4YmZjZGQzZWIsIDB4ODdlNzgyMjksIDB4MmM4ODNmMDEsIDB4ZTc0ZmM5N2YsIDB4MGJmMzdiN2QsIDB4NjY3OTJmOTgsCisJMHg2ODc1ZmI1MywgMHhlOTQxYmNkZiwgMHhkOWJmZTAwMCwgMHg3ZmU4ZmM0YSwgMHg5NTBlNTBmOCwgMHg2Zjk4ODgzNiwKKwkweGU2N2YyNDRkLCAweGFlZGY5NTJjLCAweGZlMmNiZmU0LCAweDVkZTExNTgzLCAweGNiZTRkNWJhLCAweDZlOTdlZmEzLAorCTB4ZjMwNjNhM2YsIDB4MzAwNzk2MTEsIDB4NDliYmM3YmYsIDB4ZGUxZmU3NjAsIDB4ZmRmMDMxYjYsIDB4ZjJjNGE5NTAsCisJMHhjMTc2ZjQ3MCwgMHhlNzE2NDhmMCwgMHhhYTJkNzhlYSwgMHhhMTM2ZWMwMCwgMHg1N2IzZGQ4ZSwgMHg2YzkzN2Y1YSwKKwkweDA3NzVjNTUyLCAweDJmMzhjYTQ1LCAweDYzZTc4N2VkLCAweGI4Njc4YTVlLCAweGE3ZDYwMTFmLCAweGM5NGRkZmJlLAorCTB4OTE3OGU5YmYsIDB4YTM2OTVmZDEsIDB4Njk1Y2Y2OGMsIDB4Yzg0ZTk2ZGQsIDB4NmMzZDJjYzMsIDB4YjJiNzNmNDIsCisJMHhmYzExYWNlZSwgMHhiYzNmZGNkOCwgMHg1NWYzZjc4NCwgMHgzYzlhOGEzNiwgMHg2ZmY5MWViYywgMHgwNGRmYTI3NSwKKwkweGU1MGQ1YmY5LCAweGViNDM3ZTc4LCAweDBmYWY1OGVkLCAweGIxN2EwNzlmLCAweDdmYzVhZDNjLCAweDRiZGRiMWQ4LAorCTB4OTVmOGI4NDEsIDB4YmVmMGQ5ZGYsIDB4MzY4ZGQ2YmUsIDB4ZWVhOWVlZmMsIDB4M2RhN2Y5YzIsIDB4NTdlYWRkZjIsCisJMHhlZGRmMzA1ZiwgMHgwOTQxZmMzNCwgMHg1ZDQ4YmFlYiwgMHg5MzFkNjBiZSwgMHg5OTdkNzQ2YiwgMHhjNGUyNjFmOSwKKwkweGE1ZWI3YjQxLCAweDdjODM5ZjJmLCAweDdmYWQ4ZWVjLCAweDViZDYwZTdiLCAweDllZTc1ZmY2LCAweGIyMWFiYzgzLAorCTB4ZjYwZWMyMzMsIDB4MGZhNmU1NDgsIDB4Nzk1NTlmMzAsIDB4ZDk5MjI0YWYsIDB4ZmUyZjlkN2YsIDB4M2I4MGYzMGUsCisJMHg2MTM5MzQzZiwgMHgyNzFkY2ViNCwgMHhkMWJkODA4NiwgMHgwNGRiZTViOSwgMHhiYTVkZWZjOCwgMHg3M2M2MWE2MywKKwkweDRkY2I2ZTk2LCAweDA1ZTI2MTI0LCAweGViNzQwOTRhLCAweGIyMWU0M2ViLCAweDBkY2Q1ZjFlLCAweDczZmY5OGNkLAorCTB4ZTQxYmUyODYsIDB4YjE3ZjMwNDMsIDB4ODNlNTljYmUsIDB4ZTJkZTc4M2EsIDB4ZGVmOWYwZTYsIDB4MWIxNGYyM2QsCisJMHgxOTNmNWQ2NiwgMHhiMzAzNjJlNCwgMHhhZjlhMmUwYiwgMHhmMWUyODA3OCwgMHg2ZmUwM2VmMiwgMHg0ZjJlNmFmMywKKwkweDBjZWZlM2MyLCAweDU0ZjE0MWZjLCAweDU3Y2RhOTEzLCAweGUxNjFiMmZjLCAweGI2ODE5ZTZmLCAweGYzNWViODg2LAorCTB4ODA3ZGZkMTUsIDB4M2U0ZjkyOWIsIDB4NThmNWQyMmIsIDB4ZDZjZGYwMjQsIDB4Mjg3ZTYzZGYsIDB4MDFjZjJkZTAsCisJMHgyMWNiZjlmMiwgMHgyOTNlMTcxMCwgMHgxMGZlMzAwNywgMHhlZmMyNjFkOCwgMHgxYzc3NGIyYywgMHhkY2U5ZmU0MiwKKwkweGI1ZjMxZmI2LCAweGVlZWJjZjA5LCAweGNiMWZjMTI0LCAweDllYjFlNWMzLCAweDk2NTYwZGNhLCAweDBmZTFjOGU3LAorCTB4MWIwZTkwNzksIDB4OGVmOWU3M2UsIDB4M2M5NThlOGMsIDB4MWZmMmRlYzgsIDB4Zjg1MzIyNWIsIDB4NGYyYzJhN2QsCisJMHhjN2MzN2NiMywgMHg4NDMwYWYzYywgMHhlMDAyNjEyZiwgMHg3OTgyZmRhOSwgMHhlYzFjMGFhNSwgMHhkNDJiODcwMCwKKwkweGYzZTFiY2Y5LCAweGRmNzk4MzRjLCAweDNmODA1ZjFjLCAweDdjYzFkMzkwLCAweDA0MWY1YTVkLCAweGUxM2U5YmY5LAorCTB4MGYyMzA5MTAsIDB4M2NiM2Q3M2EsIDB4ZmMzOTRlZTAsIDB4N2U0YWNjZjcsIDB4NGY5ZWIzNmYsIDB4ZWJjYjdkN2QsCisJMHhiZmZhZDhiZCwgMHgyMjFhN2MyZiwgMHgxZWFlMzgxZCwgMHhjM2U3MWQ0ZSwgMHg5Y2UzZjFjYiwgMHhmN2YwN2ZlZiwKKwkweGZlODI2NTIxLCAweDgxY2Y5M2ZiLCAweGRhMWJjYjFlLCAweDg5OWY3ODhkLCAweGZkZjEzZmUyLCAweDVhNzhmMDc2LAorCTB4ZjMxMTI2YzcsIDB4OWJlYTZiM2UsIDB4ZTVlYjhlNTEsIDB4MjczZjA1NDUsIDB4MWJmN2FmZDEsIDB4NDY4YWRlYmUsCisJMHhiNjNhMjdhNiwgMHgzYTE2N2Q1YSwgMHhhZjViYzc0ZSwgMHg2YzU3M2QyMSwgMHhkM2JjYzc2ZSwgMHgxOGFmNzViZCwKKwkweGNiZTc1NGRiLCAweGFhN2MyN2EwLCAweGJjYmM3N2Y1LCAweDZkY2EwYzZiLCAweDdlOThiZjdlLCAweDliMTQ2MzFlLAorCTB4ZmMyOWIyYTcsIDB4Y2Y5Yjk1M2MsIDB4ZWM1OWU2NmEsIDB4MmRkYTM3YWQsIDB4YjRlZjlmMTcsIDB4YzYwOWJhZTQsCisJMHhlY2NhZGQzYiwgMHhlMmY1ZDNhNSwgMHhmOTk4NWYwYywgMHg0OWJkNzE0ZiwgMHgwZjNiMmQ0OCwgMHhlZjEyZmFhNSwKKwkweDdiYjJiMzU5LCAweDI0NWI0NGQ1LCAweGFkNGI1ZmRhLCAweGY3NDcwZTEzLCAweDc5ODhkMjgzLCAweDc5YWEyYjJmLAorCTB4Y2U3ZGNjOWUsIDB4MGFmN2MwMjQsIDB4ZDYwNGQ1ZWIsIDB4YWJlMDEyYmIsIDB4YmI2NWUzZjIsIDB4MjZkZDgwOWIsCisJMHhhODY3ZTUyNywgMHhmNTk0NTljZiwgMHg4ODE5ZmIxYiwgMHhhNWZmODU0ZiwgMHhlMDg5MTlkNiwgMHgzYmM5MTI3ZiwKKwkweDVkNzFkNjA4LCAweGU4MTJkN2NhLCAweDhiMGY1NmJmLCAweDQ3ZjM5M2RmLCAweDU2ZjNjMTg3LCAweDhlMjdiZWM5LAorCTB4NTUzYWRiOGUsIDB4YjVlODQyNzAsIDB4MzRmYmRkMjcsIDB4MmU5OTg2NzEsIDB4ZjhiMTdkZWQsIDB4NWZkZDFjMGQsCisJMHhmNjgwZDNiNywgMHhiN2UwZDVhMCwgMHgxYWM0MmVkMywgMHgwZTg0OWFkMSwgMHhhNDM4ODNhYywgMHgwMjE0ZmMwNCwKKwkweGY0MWUyMWYzLCAweGZkYzE2Nzk4LCAweGNkNDIzNmM4LCAweDk0ZTdlODUzLCAweDQ0OWZmNzM0LCAweGY3NzQ5MDRmLAorCTB4YzMwMzkwYTEsIDB4Mzg1YWJkMjgsIDB4Mzk3MTJhYmQsIDB4OGU5YmZiMmIsIDB4YWNmNzg2ZGIsIDB4NmE5MWE0YzQsCisJMHg1NjM1ZGYyMCwgMHg0ZjBkZGEzNywgMHhlODY5ZmJmMCwgMHg0MWU0MjQ2ZiwgMHhhNzQ4OTJjNCwgMHgzYTI2ZmVmYSwKKwkweDM4ZmJlNmFmLCAweDFlYTZhZjNhLCAweGUzZDZkMmUzLCAweGMyYzc0ODY2LCAweGJlMzg5N2U5LCAweDA1YTJlOThlLAorCTB4Y2QzMzEwZTEsIDB4Nzk2YmY4YTAsIDB4ZWI0MjEzYzMsIDB4NGUyNzg5OGUsIDB4NmI1ZmI0M2YsIDB4MjgwMWVmYzEsCisJMHhmYmQ1Nzk3YiwgMHhlYmI0NThiMCwgMHhjOGQzZWJhNiwgMHgzNmI0ZTg4OSwgMHg1M2FkODFhZiwgMHgxYzRlZGNmMywKKwkweGE1ZGZlZTAyLCAweGFiZDc0ZTdkLCAweDcxNDYxN2E5LCAweDA5MTEyNzc5LCAweGRjYzU5ZGU0LCAweGJiZmMzODRhLAorCTB4NWZiZWYwMzUsIDB4MDEzODM3ZGEsIDB4NWZiODQzZjAsIDB4Y2Y5MDI1ZWQsIDB4NDFmN2NkMTIsIDB4YjdmNGQ3ZTcsCisJMHhjZDgwNzQ0MywgMHgwYzg3MWRhZiwgMHg0M2JmYWJiMiwgMHhiZmViOWNiZCwgMHgyNWZjOTY1MSwgMHgzMjllOTQ1MSwKKwkweDYyNjE1Njg3LCAweDQ5MTI1Njc2LCAweDliYTVlZmMzLCAweDRhN2NhMWZhLCAweDc5ODM5NjU5LCAweGEzMmQ0MjI3LAorCTB4MDg2YjYxYWIsIDB4MDBiMGNkZjIsIDB4M2ZiYTliY2YsIDB4OTM1MWVkMTIsIDB4ZDIyMzc4OTksIDB4ZTIzNjdiZTEsCisJMHgxNjYxZDM5NSwgMHg3MDQzY2YxZiwgMHhhMWQwMzcyYywgMHhkNjk0NTVhNCwgMHg4MTRkN2JlOCwgMHg4YTQyYzMxYywKKwkweGEyNjg3YTg0LCAweGI5NDY1N2UzLCAweDlmMjhhM2FhLCAweDI3NzRjY2Q2LCAweGY2YzJjNjE5LCAweDNiYjk1ZWRlLAorCTB4NTJmNmI5MGIsIDB4YWExYTA4ODgsIDB4MTk2OWVlZjcsIDB4ZWYwNDIyOGMsIDB4YmRkZTIwZjEsIDB4NmJjNjgwN2IsCisJMHhlYzE1M2E5NSwgMHg2ZDdmOWRmMCwgMHgzMmVlYjA2NCwgMHg5YjVmNzk1MywgMHgzZThmZWFjMiwgMHhkYzI1NzdiNCwKKwkweGNmNmU5MzM3LCAweDQ5ZjYxNDdmLCAweDc4NTFmNmNjLCAweGQ1OGZlNWRlLCAweDliZGRmM2RjLCAweDM5ZDY1MTdlLAorCTB4MTczZjgzNzIsIDB4M2FiZTA1ZWUsIDB4MWRmNWVlYzAsIDB4Nzc3ZTBkNmUsIDB4YTM3ODdhOGYsIDB4ZDFmYmE5NDUsCisJMHhkODZmYzg4ZiwgMHhiY2FkNzI4ZiwgMHgxYmI2M2Y3ZSwgMHhhMWNiNGVhMCwgMHg4MWRjZmU3MSwgMHg0NzJmOWY3NCwKKwkweDc0OTY5YTFkLCAweGExYWYxZDI5LCAweGQ5M2UwOTMwLCAweGQwZWEzNTdmLCAweDMwZWVmODFlLCAweDU3OGY4NzA0LAorCTB4ODIxNDFlZWUsIDB4YzNmY2I0ODMsIDB4ZDU5MzJkM2QsIDB4MGY3MGY4NzAsIDB4ODU3ZDIxZDgsIDB4N2QwZmFiYzMsCisJMHhlYmU4NzA4OCwgMHg2YzVkMjliZSwgMHg5MzVjYmMwNywgMHhkNmZiYzA2ZCwgMHhjMTZjMzhhZSwgMHg0NWZkMGFmOCwKKwkweGUzZTIzZWEwLCAweGJiZTVlZmFjLCAweGExMWZjNTZjLCAweGQzNTRlY2UzLCAweDQyOWVmMjk3LCAweDRkZDFiZDU3LAorCTB4NjI4ZmIxMmEsIDB4ZTk2YTZjZjcsIDB4ZjVjYTJiYTcsIDB4MjVhYmFjMzYsIDB4MzU4Zjc1Y2EsIDB4Zjc4ZmY3MWUsCisJMHg3NmUzNWMwMCwgMHgwYjhlYTczYiwgMHhiOGIxMzVkMSwgMHhlZWZkYzFjNywgMHg1YmYzMmNhMywgMHhmMmYyNTRhMywKKwkweDYyMjVlYzlhLCAweDgxYzljNDBhLCAweGZiNDNlMjE3LCAweDhkZTY1Zjg5LCAweDE5Zjc0MTE4LCAweGRlNjAzMmVmLAorCTB4ZmI4YjI4ZmMsIDB4MmI2M2NjMjAsIDB4NzcyMWY4MDgsIDB4MWVlMjBhZWMsIDB4YmUyMTg4MjcsIDB4ZDlhYmU2NTAsCisJMHg5YWY1ZmNjMSwgMHgzOTZmODM0MiwgMHg2MDE1ZWYzYiwgMHhiNDdkMTBiYywgMHhjMDIzZThlOSwgMHgxZGIxYTNlOCwKKwkweGE5YTJhM2U5LCAweDYzNDdkMTlkLCAweDA2NjQ0ZTc1LCAweDNmMDMzNzNiLCAweGM2MDQ5NmJmLCAweGEyM2JkZTAyLAorCTB4NTEyNjlhYmUsIDB4MTUxYTFmZmEsIDB4OTFiYTAxYTgsIDB4ZTVhNmU3YmQsIDB4M2Q3MDhhNWQsIDB4N2MzZjE2MWQsCisJMHg3YWJlY2E3ZCwgMHg0YjZkNmZjMywgMHhlMDY5NDNjYSwgMHhlMDMzZWU0ZiwgMHgzNzAyOTc3OSwgMHg4NThjNWZhNSwKKwkweDU4YjZjNWU1LCAweGZjMDM1ZmRkLCAweGVkYjQyNzJhLCAweDZkNmZlZDg1LCAweDM2ZjMxZjc5LCAweGQ4NmVmYjZjLAorCTB4NjZkYmVmMDUsIDB4NDIzOTBjNTMsIDB4NWJlZWQ2ZjMsIDB4ZDc2N2Y3OGUsIDB4ZDg3ZGQ4MDYsIDB4MDVlMDI0ZDEsCisJMHgzYzNiZGViZCwgMHhlMTA0ZmYxOCwgMHgxYTRmNzYwMSwgMHhmOTFkYTNjMCwgMHg1ZWZmMTM2NSwgMHg3MDUxYWIyYywKKwkweDFhMWY5ZTgxLCAweDg5MGRlZWM1LCAweGViZjNiMGI0LCAweGQ3MTExNjIxLCAweGNlYzJjNDM5LCAweGJkZjdlMjU5LAorCTB4OTViZjgyMjUsIDB4ZmIwMWJmNzUsIDB4YTY5OTQzYzcsIDB4YmNmZGZmZGUsIDB4YWY4OWE0YmYsIDB4ZTg1NGY4MmIsCisJMHgyOGQyNGE4OSwgMHg0Y2U0N2ZiOCwgMHhhMmQxM2I4YywgMHhhOGQ4OWZhMSwgMHhjYTc4ZDUxNCwgMHg4ODc4OGY3YiwKKwkweDQ3YWEwZWYzLCAweGZmM2RkOGFmLCAweDk0YWJkMDJlLCAweGZjMDBiZTdlLCAweDk2OGRmYjA0LCAweDRhNmUwMDIzLAorCTB4NzBjZmEwN2YsIDB4MGRlZmExZjgsIDB4MWU2MGY5ODcsIDB4ZWNiNjE3YjAsIDB4M2RlMjIyNWUsIDB4NmJjNDdkMWEsCisJMHg0OTFiZGMyNiwgMHg5MTQ2NjdmYiwgMHhmZGY0YWRhYSwgMHg0MjVhNjhjYywgMHgxM2Q3OGUzZCwgMHgyYjIwN2Q3OSwKKwkweDFhNzEzZjUzLCAweDNkN2NmYTA0LCAweGI2NGViYjhmLCAweGM5MzFmY2YwLCAweGQxODZlYTNlLCAweDVjNzY2NzUwLAorCTB4ZWEyNDUyNTYsIDB4ZTE2Zjg1MDUsIDB4YjczODA4MGUsIDB4NzVmOWY4OTYsIDB4MDBjNTIwNGEsIDB4NThmODUzNzgsCisJMHg1NmZjMTgwYSwgMHgyNDUyYjRhYSwgMHgxOGYyMDE4NywgMHg3ZGQwZjFkZSwgMHg5ZGNiYmQ0YiwgMHhkZjY1MmZhYiwKKwkweGNmOWZlYTcxLCAweGMxZjllYmU0LCAweDNkMTdmNWY2LCAweDA5OWVlZmJlLCAweGI3MzcyZGYwLCAweGFkMDM3MjNkLAorCTB4MGU3YTVjNTcsIDB4NDc5NzA3Y2YsIDB4YTE3OTVjNTUsIDB4ZWJmNDJmN2IsIDB4ZGJmY2U3N2YsIDB4NGQ4NzQwNTEsCisJMHg3ZWMyOThkZiwgMHhlMWMzNTUwZiwgMHhjMDI5ZTJkNiwgMHhiZGY5MzJmNywgMHhjOTUxMjQyZSwgMHhiMWU1NTYzMywKKwkweGNiYjcxYjQyLCAweGY4Mjk5NTEwLCAweGZmYWNlZDFjLCAweGY4MDgxMTQwLCAweGYwYjE0YWY0LCAweDllMzI1NDdlLAorCTB4ZTVkMTRlMWYsIDB4OWY4N2ZlYWQsIDB4YzEzMmY5YzUsIDB4NzEyNTAwMzAsIDB4Y2YzNjI4YzksIDB4MzI0ZWNjMzcsCisJMHg5Y2UwZmZkMywgMHgxNzNmMWE2OSwgMHhhZjcyNDc3YiwgMHhkZWYxZDJiMCwgMHgzNTdjZWMyMSwgMHgxOWFhYWUzMywKKwkweGM2YzRjNGVhLCAweGZiZGEyNmNmLCAweDZiMTMzMjBhLCAweGI4YzJjNmE3LCAweGRmMThjOWQxLCAweGRhZWIzNWNhLAorCTB4YzgxMmJkNTMsIDB4OGM5YTkyNjksIDB4ODhkMzg5NzksIDB4N2E2MzNlY2EsIDB4MDhlZWVkMDMsIDB4ZTM5MDJlYmEsCisJMHg3NDJjOGNkNywgMHhlN2VkZTU0ZSwgMHg0ZDQzZmZlOCwgMHgyYTk5ZjZlNCwgMHhjNzJhZTM3ZiwgMHg4ZDU0ZTc1YywKKwkweGY3OGI1MmZkLCAweDlmZTlmZDAxLCAweGYyZTFlZGUyLCAweGZjZTMzZTJjLCAweDc3YzllMmRmLCAweDFlYjNmOWMyLAorCTB4ZTEwZTM5OWUsIDB4MjdhM2FiN2UsIDB4ZDQ3MGY1ZGMsIDB4YWI4MTVkYzMsIDB4OWZkOThlMWUsIDB4ODZjNmE3MzgsCisJMHgyZTFlOTM4MSwgMHg0OGVkNDhkMywgMHhkYzBhNjNkMCwgMHhjNzc5NzBmNSwgMHg5ZGUyZThjYywgMHhhYmRlMTMzNCwKKwkweGUwYzQ4ZWY4LCAweDIzMzUwZWY4LCAweDliYTQxZWExLCAweDAxZWYxMTY4LCAweGY1ZTI4Y2NlLCAweGJhYjA0NzM3LAorCTB4NjRhOGVmODIsIDB4YWUxZWI3YzQsIDB4YzY2NjM4N2EsIDB4NThlM2Y3ZjEsIDB4MmYwMGJkZmYsIDB4ZTIwMmU1MDksCisJMHhjYzliYTE0NywgMHgzMWRkYWFkNCwgMHhlYzUwN2EyYSwgMHgyZTFjNjllYiwgMHhmYjQ2YmVkNCwgMHg4YWRlMzczOSwKKwkweGFmYjAyNjcxLCAweGUwODQyNWE3LCAweGQ2Y2U1Yjk2LCAweGYyZGMzYjk1LCAweGY0YTlmODNjLCAweDcyYmZiYzc1LAorCTB4ZmYzZmUxMGEsIDB4Y2EyZjNjMTQsIDB4Y2UwNTU1ZTQsIDB4ZGFkMWJlNTMsIDB4YTY5YWQzYzksIDB4YzMzODgyOWYsCisJMHg3ZWZiOTM1MCwgMHgxMDgwY2ZhMCwgMHgxNDc1ZTc4MywgMHg3MDc0NDdlZSwgMHhkNzY3YmVkNywgMHhmODcwZjVkNiwKKwkweGIxMzFmYzAzLCAweDNhMTRiYzI3LCAweGUzYzJjMGZiLCAweDIwYzgwMzRlLCAweGJjYzc5N2IwLCAweGYyMGQxMTk2LAorCTB4ODZjNTM0OWIsIDB4NzE1YzRiOGQsIDB4MGUzODNmMzgsIDB4NjNhNDU3YTcsIDB4Y2Y4M2I4ODEsIDB4NDIzZmE5ZWQsCisJMHg1YWEzZWQ4ZSwgMHgzNmM3MjU1MiwgMHg5NmQzZWU4YiwgMHg0YzcyOWVmOCwgMHg4ZTY0ZDNjMSwgMHhiYmM0Yzk4NywKKwkweDkzNGJlMjBiLCAweGQwNDVmNDg5LCAweGVkMGU0ODFmLCAweGU3ZDk1YmJmLCAweGY2MTAzMjQwLCAweGMxYzU4Mzc5LAorCTB4NjdkZjNmZTQsIDB4YmNkNGRmNzAsIDB4ZjhiM2Y5ODQsIDB4MGI2NjU5ZmMsIDB4MDI0MzVmN2UsIDB4Y2UxMDQ3NTIsCisJMHg5MWRmNzgyOSwgMHg1YTFiMThkNywgMHg0ZmJmOTI4NywgMHg2NjExNTQ4NiwgMHg3YmMzY2RjZiwgMHhjODVjMjlhZSwKKwkweDc1YTE1MTc3LCAweDg0ODJhYzk4LCAweDc1ZjBmZGY3LCAweDdiMzNhOTljLCAweDViYWQ4ZjIxLCAweDlkODE0Nzc0LAorCTB4MWJlYzIxZDcsIDB4ZmM5M2ZiODMsIDB4ZTlmZjQwMjMsIDB4ZWUzNWNmZGIsIDB4ZGE3NjgwYWUsIDB4ZjFmYjA4YWYsCisJMHg1OTE2MmZmNSwgMHhjM2IwMjFmYywgMHhiOTNlN2JlNCwgMHhiMjk1M2I3NywgMHg4NTA5ZWEzNSwgMHhmYmUwYjM3ZSwKKwkweGRlODFjYmQ0LCAweGRkNjEwM2ZkLCAweGQxZDU0MDUzLCAweGY2NTllNzcyLCAweDYzNzY0MzFkLCAweGVjZjMwNGJhLAorCTB4ZmY3OTY2ZTksIDB4ODEyNWM0MzksIDB4ZGZhN2FiN2QsIDB4YTFhNzRiZWYsIDB4MDg2MDQ1NzgsIDB4NWQ4YTI5ZjgsCisJMHgxZWVhZDUzNiwgMHg1N2NmYTU2OSwgMHg5YjY2ZWZmMywgMHgwNTE4OGVjZSwgMHhmNGMxZjk3OCwgMHg0ZjRiNDA3NCwKKwkweGJhNTExZDBhLCAweGVjZjAwZjFhLCAweDY5ZmNmOGNhLCAweGNkZGZjNzMwLCAweDdhMDA5NzM4LCAweDQzZGZiMTUxLAorCTB4MDI2YjhhNzYsIDB4M2IzN2E3YWMsIDB4M2RkNTg5N2UsIDB4M2IwMTdhYzUsIDB4MmU2N2IxNWUsIDB4ZGQ5MDg3ZTYsCisJMHg3NGE2NDFkNCwgMHhjYmM3MWI3NCwgMHhjY2FiNzMzYywgMHg2MDBmY2RlZSwgMHg0OGVhZmRmZSwgMHg0NzNiNWVlNSwKKwkweGI3OTFkODI0LCAweDU0ZDk0ZWFkLCAweGQ1ODZlNzA3LCAweDZiN2VmZTJjLCAweDgzZjFhYzk1LCAweDg2ZGQ5MGRkLAorCTB4NjZmYmIzZWYsIDB4NmRhNjVmNmYsIDB4ZmU2MDRjZmYsIDB4ZmI1N2ExN2UsIDB4MzQxMjU4OWMsIDB4OWNmNmVkZjcsCisJMHhjMDM1ZTBkNywgMHgzMTIzYzNiYywgMHhhZjNmNDEzZiwgMHg3OWZhN2Y3ZSwgMHhlNmFkZjNmNSwgMHg2MzZhZDU3ZSwKKwkweGNhYTc0OGVkLCAweDY1NjA1OTJlLCAweGFhZjc1MGY2LCAweGNhZTBlYmM3LCAweGU3ZTBkZWJhLCAweDkzNDgwZjM2LAorCTB4YjVhYmY3NTQsIDB4MDgyYzhlYWQsIDB4MzI4YzZmNzcsIDB4NzllZjAyOWUsIDB4MDBlMmNmYzQsIDB4YzNkZmYyNTUsCisJMHhlNTliODNkZCwgMHhkZTgxZjE2NiwgMHg5ODE2MWRlNiwgMHhlMWEwNzY4YSwgMHhmNjA4YmY0OSwgMHg0MTAwYjBmYywKKwkweGUwMmIzYmZiLCAweGY4ZDAyYzMyLCAweGVlNGZjYzAxLCAweGJkYzAwN2UxLCAweGQ2NWViNDI2LCAweDAxZjk4YmIwLAorCTB4NGZlOGQ1ZjUsIDB4MDI3ZjUxOTQsIDB4Mzg3YWNjZjQsIDB4MTdjMDFlOWIsIDB4NDFmZTg2OTQsIDB4ZmM4NWRmZDAsCisJMHhjZmI4MmNhOSwgMHgxMmMzZmI5MiwgMHg1YWQ0OTdhNSwgMHhmNWEzN2ZkNiwgMHgwOTZhZTM1ZCwgMHg5Mjc3NTVmYywKKwkweGUzNjMyOTRjLCAweDk4ZDdlZmMzLCAweDkzNTU1ZmE5LCAweGY1MDgyMjRjLCAweGY4Nzg1ZWFiLCAweGMwNmJlOWZkLAorCTB4MDk3NThlNWYsIDB4YWQyODdmNzAsIDB4ZjdmYTU4ZDcsIDB4ZjhkZWJmZGQsIDB4YjgxYWZlZjAsIDB4NjVmYTk0NmYsCisJMHg3ZjJhYWNlYiwgMHg3OGZlMzdiNywgMHgwYjkxOGMwNCwgMHgzZGJhNDdmMCwgMHhhMWYwMjM3ZiwgMHg4YTY4YWYxMiwKKwkweDExMWY3Y2UwLCAweDgwNjhiYmE0LCAweDU3Mjc0Mjk3LCAweDdlOGY5YjJmLCAweGU3MjVjNDQ1LCAweDU4OWU0MDg3LAorCTB4MTZmZmM3MTYsIDB4NDZjMzhmMmIsIDB4MTI5ZmY3YjEsIDB4YmY5MDViZGQsIDB4MDIzZjNhZGYsIDB4OGNlZmNiZTIsCisJMHg1Y2ZlOGEzYywgMHhlN2M1OTU5MywgMHhkMDRhNzlmNywgMHhiOWYwNTI3ZSwgMHgzZjcwMmFjYiwgMHhmODEwM2ZjOSwKKwkweGNkZjFkYWVkLCAweDY0OTdlMDcxLCAweDQzZGUwMmM5LCAweDllZmIyNGRhLCAweDc5MDBjZjRjLCAweDgyYmVkYjM0LAorCTB4YTI2YjI5NmUsIDB4NmIxM2JmMTEsIDB4YmMwZmYwOGEsIDB4MzVhNzY1NWIsIDB4OWI0Y2ZiZjEsIDB4YTgxZGVlY2UsCisJMHg2NjFlNjNjZSwgMHg0NTY1ZGRjZCwgMHgzMDhiZjNmYSwgMHhlZWM2NTY3ZSwgMHg3YmVmYTBjMywgMHhmZDIxMmZkMywKKwkweDdmNDAxMmUxLCAweDEzZmJmMzkwLCAweDYxYThmY2YwLCAweDQyZTIwZDhmLCAweDgyN2VmYzFkLCAweDA5Y2QwZDMzLAorCTB4YmU1OTY5ZjMsIDB4ZjAzNjJmZTUsIDB4NzBlN2RlZDcsIDB4ZTJiNTIzMzgsIDB4ZGI2NTRhM2QsIDB4ODNmZmJjNDQsCisJMHgwYjcwOWJjZSwgMHgxNjFiYTdjNCwgMHhmN2VmYjI2NCwgMHg4YTY3NzdkOCwgMHg2N2ZmNGNmZSwgMHgxNjdjYzBmMywKKwkweGM4ZWZjNDM0LCAweGIyNzI3YjE0LCAweGY1ODNlYmQ5LCAweDE4OGI1NTM1LCAweGJiYWM5ZTJmLCAweGJmMGE2YzM3LAorCTB4NWY2ZjRjMzcsIDB4NzEyYWI0OWUsIDB4ODdjYzA0ZTksIDB4ZjM2NzZhNWEsIDB4NTk0ZmM2ZjQsIDB4OWYxMmM0ZGYsCisJMHgyNGIyZGY4YSwgMHhjZmViMDhiZiwgMHhjMDgxMjZmYSwgMHg1YTY3OTcxNSwgMHgwM2M4OWU1MiwgMHhjZWM4OWUzZiwKKwkweDQ0YWMzMGUxLCAweGNhZmRhMzc2LCAweDZmZTg5ZmNmLCAweGJlNDNkYzM3LCAweDZjZGU1NzkzLCAweDRhZWIzNzM4LAorCTB4ZmRmYjY2MjQsIDB4Nzc2MDA5OTcsIDB4ZTBiMWZiYjksIDB4OGEwN2QzMjIsIDB4MWJlNTM3N2QsIDB4NmY1NTdjNmQsCisJMHg4ZDM0ZTZlNywgMHg0MTIwN2ZiZCwgMHhhNzdmYjM3OCwgMHg1NWVlYzAyMiwgMHgwNmZmNjFlYiwgMHg3YmI1ODdhNiwKKwkweGUxMGM3OTA5LCAweGY1MmRiZTkwLCAweDI5NDdiODFhLCAweDNiMDY4ZmZkLCAweDdjMDJkYmNjLCAweDNjZjgwZjExLAorCTB4NTRmY2Y3ODcsIDB4ZDA4ZGZmMTAsIDB4ZGEyMGQxNWUsIDB4OTI3ZWIwZmQsIDB4OTVmMDE5NzEsIDB4NzAyODM3NjIsCisJMHg2Y2RmM2M2OSwgMHg5MWQ3NDMxZSwgMHg1ZjYwZDY3NSwgMHgzMzc4ODc0ZSwgMHhjZmZhMDVmMCwgMHgyZmJjZmVlMywKKwkweDUzNTdmNDBlLCAweDgyNzNjMjQwLCAweGEzYmJiM2FjLCAweDYwZTRhODE2LCAweDNlMDM3OWQzLCAweDViZmNmMzdmLAorCTB4ZDg4MWU3ZGEsIDB4MmRiZGUwY2IsIDB4ZWYxN2U2MDYsIDB4MjhmN2ZiZGUsIDB4OWU2ZjRiOTAsIDB4ODJmMWM2ZWYsCisJMHhiYjRmNDM3NiwgMHg2YjkxZTExOCwgMHg2NzcxODMxNSwgMHhjNDRjNWRiNSwgMHhiNzkwMDNhYywgMHhhYTlhMmQzNSwKKwkweGJiNzdhMTMxLCAweDcyMTNmYjM3LCAweGI0ZjQ5NWJmLCAweDFlYzA3MjFmLCAweDExZDhjMzExLCAweDNlNzRjZTFjLAorCTB4NmY0OGY4MDksIDB4ZTM2ZTVjNTcsIDB4MjRjMWU2ZjEsIDB4NmNhM2VlMWQsIDB4MThiNzFmM2MsIDB4OGE2ZTFmYmYsCisJMHg3ZDQ3MmZiMiwgMHhhZWE1ZWNjYywgMHhiZjFmYTdkZCwgMHgxM2VmOWUwNiwgMHhlNzExZmRkOSwgMHhiN2E3ZTQ0NSwKKwkweGRhMWUyZTc2LCAweDJhNWJlMmE2LCAweDVmNGYxMTM5LCAweGY5ZGIzZmY1LCAweGQ1ZmZlZDA2LCAweDQ3MTY0ODllLAorCTB4YTk5NzljOTcsIDB4ZjUwODc3YmYsIDB4Zjk3ODcxZjcsIDB4MzhmM2IwMDcsIDB4ZDdiODAwZWYsIDB4MmZkYjA3ZTksCisJMHhmYWZjM2QxZCwgMHhjM2RhMWIzYywgMHgxZWEwZTk4MSwgMHgzNzZiYWM0NiwgMHhhYzViZmUwMiwgMHg5MGQ5ZDdmOSwKKwkweDAwYTNlYWRmLCAweDMzOTI1ZTJlLCAweGYzODA0YzkwLCAweDc0MDM5MjdhLCAweDc2MjZhODE1LCAweGI1YjYyN2YwLAorCTB4OTc4MDBjMTgsIDB4OThjOThkOGMsIDB4OWY4OWIzYTcsIDB4YWZhYTJlNTcsIDB4ZThhYjI2MzUsIDB4ZWYzZjExNjIsCisJMHg4NzdiMjkzYSwgMHgxZjllYWFjNCwgMHg3MmY5MzFiMCwgMHg2ZmU5NGY3MiwgMHg0M2UzNGYzMCwgMHhjNjFlMTkxMywKKwkweDMxYjA2Y2RlLCAweGQxOGFmYjdkLCAweGU4NjZjZDdiLCAweGRmODBjNDc3LCAweGZiZGVlZDBkLCAweGNmYjg1ZWZhLAorCTB4Yzc2MWQxNzgsIDB4M2RmZjg4NTgsIDB4YmY2MDczNjIsIDB4NmE5YjdkYzYsIDB4ZjFiN2NmMjAsIDB4NTQ1MmQwMTMsCisJMHgxNDI4NmNhZiwgMHgzN2RlNzQwZCwgMHhlZmM1ODM4OCwgMHgxZmQwMTgwZSwgMHg4OTNkYzYwZiwgMHhmOWY2MGUyYiwKKwkweDFiY2Y1ZjEwLCAweGY5Y2QwNjJkLCAweGRlZmMxYmQ4LCAweDMyNmQ3YmRkLCAweDg5YjEyZmI2LCAweDJkYWRjNzg4LAorCTB4MzdhMDcxMzksIDB4YmJlZWFjNWEsIDB4OGUyZmEwNmQsIDB4MTJjMGQ1YjUsIDB4NjI5Zjc4OTQsIDB4YjAzYzRkYWYsCisJMHhmNGQxOWFmNSwgMHgwNjFkODljZiwgMHg3MWRiYTAzYiwgMHhmNjExNzllMCwgMHg0ODQ5MzhlYiwgMHhkODdhNDA4YywKKwkweDhmM2M3NDZmLCAweDNhMzdiYzdhLCAweDFkNzQ3OGQ4LCAweDJhYmYwMTZmLCAweGZmOWFhN2YwLCAweDdmNWEzNGExLAorCTB4ODU4YTU1YTMsIDB4ZmUwNTJlZmMsIDB4Zjk5NDNlY2EsIDB4YjVjNGY1MWQsIDB4ZTRhYzgyZGUsIDB4Yjg4MTdhZGEsCisJMHgzYTVmOTJiMywgMHg3Zjk0NGVjZSwgMHhkMmU5MDEyZiwgMHg2YTNkNzM2OCwgMHhkYTBlZjY2MywgMHgzMGY3MjdkNywKKwkweGFlMTVlOGJiLCAweGUxNTI0OTQ3LCAweDgyOWY4MDUwLCAweDhiMWI3YWE3LCAweGU5ZWIyYTMzLCAweGRiZGZmZTZkLAorCTB4Y2E1NDllOTgsIDB4OWJkNzRiZWYsIDB4ZTkxNzg3NjQsIDB4MGZjYjFiNjYsIDB4ZTZmZDc4NzcsIDB4NmIyM2M4NTQsCisJMHhjZjdmYzU0YywgMHhmYjY3OTU0OSwgMHg5M2U3YTQ3YiwgMHgxYjA1N2JkYSwgMHhmODA2MGNkYiwgMHg4NzYyYWMwZSwKKwkweDZkZTY4MzEwLCAweDIwZWJlZDFmLCAweDQ4ZjU0OTlkLCAweDA5ODc4ZDdmLCAweGRkNjk3MWYyLCAweDQ4ZWUyYzlkLAorCTB4N2ZiZjBkZTUsIDB4ODFkMWNmMGQsIDB4N2E3OWY4N2YsIDB4MTM5NjgxN2YsIDB4MThhZmQ2OWIsIDB4ZGJmNWYwODgsCisJMHg3MDQyYWY4MCwgMHg2NTAzN2NhMiwgMHhlODExYWQ1NSwgMHg1NjUyZDE3NSwgMHhlOTczZjMxNiwgMHhjOGRkNmI0NSwKKwkweDU4ZWI0NTlmLCAweDViMWVlMTdlLCAweDBjZTdhZTMyLCAweDg4NjI1N2E3LCAweDI3ZjkwMDFjLCAweDY1N2YwZTJlLAorCTB4NmU5Yzc5ZGQsIDB4ZDEzYzM1NGYsIDB4ZmE1MmYzMGMsIDB4NzNlMDEzZmEsIDB4NGY2M2UzNTIsIDB4N2ExNTcyYzMsCisJMHhjNjQxYjUzZCwgMHhiNTIyNGE3MSwgMHg3Y2FkZjZlNywgMHgxODA3NmRiYywgMHgyMGRjNGZiZCwgMHg1ZmZkYzBlNywKKwkweDBlYzRiZDEzLCAweDM2MzdlYzcxLCAweDdlNDExNDZjLCAweDljZjQwMWJmLCAweGY0MWNmOGNjLCAweDBmM2RjOWVkLAorCTB4ZjQwMmZkNDYsIDB4NDA4MWJiNWMsIDB4MjMxNWZjYmMsIDB4ZTJhMmQ5MjksIDB4NWZlYmRkOGIsIDB4Njk2ZmYwZDUsCisJMHgxODM1ZjU1ZCwgMHgxNThiNmY5NywgMHg3YzJiY2U0MCwgMHgxNWZkYzBhYiwgMHhlNDJhZjNhMywgMHhmYzc0ZWJmZiwKKwkweDJmYmQ5NTNmLCAweGRmYjAzYjQ3LCAweDlmZmY5YzEzLCAweDlmZjk0MTk4LCAweDEwZDk4YTNlLCAweGFmMzhjMDIzLAorCTB4MDdkZmMzMTgsIDB4YTQwZmY1ZjcsIDB4NmQ1Y2EwYmYsIDB4YmY1NzIxZWIsIDB4Y2RiNTcyNjYsIDB4YWZlNzRhOTYsCisJMHhlMzFiYjZiOCwgMHg3MWY1YzEwYywgMHhhYTYyNzliYSwgMHgwMmM5Mzc0MiwgMHg2Mjk2YmZjMCwgMHg4YmMwMTg3MCwKKwkweDk5ZTgxNWMyLCAweGRmYjdjZGRhLCAweGQ5NWM4NjkwLCAweDBmMzllMTIyLCAweGY5ZTI0NzNmLCAweDAyNzdjYTFmLAorCTB4ZTQ4NmJmMGEsIDB4NmViN2MyOTksIDB4ZDVkODM0NzMsIDB4ODA1NmFiNTMsIDB4ZTc5NzFmNWQsIDB4MjUzY2ZhNDUsCisJMHg1MmM2ODdiOCwgMHhmODBhNzY3ZCwgMHgzODNjOGMzOCwgMHg1N2M3ZTVjMSwgMHhmNzYyZmJiMiwgMHg3YTAwMGZlZSwKKwkweDIyMWVhMTJlLCAweDEzYWM4N2VjLCAweGE1MTc4MGVjLCAweGRkOGViMWRkLCAweDVhM2MzYWMzLCAweDJiYmY5Y2QwLAorCTB4ZWYwYzFmZjUsIDB4NDFmYjhmNDAsIDB4N2M2MzQ3ODcsIDB4M2M4NDYwM2EsIDB4YTYzZTExZDUsIDB4ODM5MDg4YzcsCisJMHg1NzBjNDBmYywgMHg1YjNlMDAwZiwgMHhjZGQ3ZjU0NCwgMHg0YTc1ZmQyYSwgMHg1NTNhNDVhZSwgMHgzNDc5NzBlMCwKKwkweGM1NWY1ZjkzLCAweDk1ZmY3ZGIwLCAweGUyMTU4NWQzLCAweDJmNzNhYTg1LCAweDAyNDg5MGVhLCAweDYwNTE2N2UzLAorCTB4ZjhjMjJlN2MsIDB4YmE0Y2Y2YTcsIDB4ZGFmZGU5MGEsIDB4MDc2ZWY0ZjAsIDB4ZmUxNjJhZmYsIDB4NDhmNWE3M2QsCisJMHhlYzMzMzE5ZiwgMHgxM2NiMWRmOCwgMHg0NjIyMzM5MiwgMHhiMGY5MWY2MywgMHg1N2YxYmRkYywgMHhmZDAxZDdlOCwKKwkweDQ2ZjdiZjAyLCAweGZmNDAyNWZmLCAweGZiZGQwYzI0LCAweGYwYWJkZDI4LCAweGE1MDFkMGE3LCAweDU1YTI2YjhiLAorCTB4MTc0ZjQxZjIsIDB4MDJhMzc5Y2EsIDB4ZTc3NDU3OTcsIDB4MzM0NzRmOTUsIDB4OTc4MGIwNzksIDB4NjZmMjVlOGUsCisJMHg2MGZjZmQ5NCwgMHg4MWVjOWYzYywgMHhjZjBjZjllNywgMHg3YzAyYmUyMSwgMHg2N2UxZjIyYiwgMHgzZGFmZTExNywKKwkweGFmNmM3NmQxLCAweGU2MDE3NGY5LCAweDczZjJkNGE5LCAweDlmM2U3YWFiLCAweGQxYTVlZWIyLCAweDRiN2NlNjgyLAorCTB4Y2EzNGVlN2YsIDB4NWEyYmJlZTIsIDB4NDhlYTNlNzcsIDB4MzRjN2QxMGIsIDB4ZDkyZWNmNmUsIDB4ZmY3M2MyNjgsCisJMHg3ODAyZDAyZCwgMHhiZGZlY2RkYiwgMHhiYjNkZTU2YywgMHgwYTRmMGQ0NCwgMHg0Y2QxMTVlYSwgMHhlMWY0MmI4ZSwKKwkweGMzMjQ2NjU4LCAweDU1ZjJmZmE4LCAweGM4NmVlMTcyLCAweGFiNTlmOWZmLCAweGRkMzQ2ZjM3LCAweDc3YTMxNmM3LAorCTB4MDdlOGI1ZjYsIDB4ZjE4MmFmMzgsIDB4ZDgzM2NhYWYsIDB4YzYyNDFmMjEsIDB4ZGUyMDE3NjUsIDB4N2MwYTI0ODEsCisJMHgzM2NkOGZiOCwgMHgxOTc5ZDUyZSwgMHhlNzBlYzlmYSwgMHgwZjA3OTAzOCwgMHhmODI5N2M3MywgMHg5YmQwZTA1NSwKKwkweGFmMGRlYjllLCAweGUyN2MzODdiLCAweDhlNWViYjc5LCAweDllZmU3MzE0LCAweDVjNWRmYmMyLCAweGUwNDU3ODhlLAorCTB4MmY3MTFiMjcsIDB4NTlmZDYxMTcsIDB4ZTUwNWZlNGMsIDB4NzNjMTE2NDgsIDB4NzI3NTk3YzksIDB4NWU5ZmU1ZTQsCisJMHg5MWFjYmM4ZSwgMHhjMmRhMTMyMywgMHgwYmZhMTFjYSwgMHgxYmYxZmZjYiwgMHg0YjFkYTIxNiwgMHg2M2I3ODcwZSwKKwkweDNkMzM0Njc3LCAweDkzZmEwZjFjLCAweGIyZjc4YmY2LCAweDM5ODdkZWYzLCAweGM0OGE1MmRkLCAweDBkZGFjOWJjLAorCTB4NTcxM2NjMjYsIDB4MzY2ZDkwZTQsIDB4YWY3ZjgxYzksIDB4MTZmYTA2ZDksIDB4MWY3NmNkN2EsIDB4YzVlNzBjOWUsCisJMHg5YzA3NDY0OSwgMHgwMzkyOWY1ZiwgMHhkNDUzZjc4OCwgMHhmYTQ1YWYwMSwgMHhjN2ZiYzdjOCwgMHgwMjIzYzhjMywKKwkweDQ3ZWYxMmYxLCAweDljZWZkMDgzLCAweDlmMjEzNjI2LCAweDUwNDY5OTJjLCAweDc4ZGVlZTdmLCAweDQ5NTVkMjA1LAorCTB4NzQwMDhhNWUsIDB4MjMxNzVhNWIsIDB4NTRlYzdiNDAsIDB4OTRlNDAxYmIsIDB4OTYyYjhmYjIsIDB4NzFiMGM4MTksCisJMHhkNDA3MDdjOCwgMHg2ZjBhZTQ3MiwgMHhjZGJiZmUxNSwgMHg0OWRjZTM0MywgMHg0NzIxMGM3MiwgMHgzM2ZiM2QxZiwKKwkweDhkYThiYzc1LCAweDIyZjFkNWQ2LCAweGZiZTA3ZjVhLCAweDQ2OGU4YmM0LCAweDc4ODAxZTA3LCAweGFlNmMzZmQxLAorCTB4OTQ3Nzk4NzYsIDB4ZWEyOGZmMjUsIDB4OTEyYWM0YjcsIDB4YzVkNmU0YTgsIDB4NGExZmI3ZWMsIDB4MmUzYzk1MmYsCisJMHgzNGE5NWE0NSwgMHg4MWM0ZDA0ZSwgMHg2MDczYWI2ZiwgMHg1ODJiZjgxYywgMHhlMzgwYzU0ZiwgMHg3ODcwYzM0ZiwKKwkweDdiNTg0NmFmLCAweDFmYTNhZDliLCAweDEzZTQwYjk3LCAweDk3ZThmODgyLCAweGZjNDIyNTVmLCAweDA2M2I5MTQ1LAorCTB4MmZlMmFjN2IsIDB4YTE5NzkwMGIsIDB4MDM3ZmRiZjAsIDB4ZDdiNTdkMWMsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsCisJMHgwMDAwMDAwMCwgMHg3ZGNkZmYwMCwgMHhkNTk0NzgwOSwgMHhlNzdkZjBkNSwgMHgyNGNiMmQ5ZCwgMHg3NjQyYzk5MywKKwkweDAzYmJlYzI2LCAweDRlYjFhYjA5LCAweDA0OTA2MDA4LCAweDhkNDQxMDA3LCAweGIwOTAwOTM4LCAweGQyOTEwMzY0LAorCTB4MjA4MTk2ZDYsIDB4MmIxODhhMDYsIDB4MGViMTU0YjUsIDB4NDU1MWZhMTQsIDB4ZGIxYWI2MWIsIDB4MWE0MDEzYTAsCisJMHhhZDU2MzQxNCwgMHg2MWE1YWZkOCwgMHg4MDg5MWQ5MSwgMHhlNThhZDNmZCwgMHg3YmRjZTczYiwgMHgyNjRlZjMzMywKKwkweGU3OWY2YTAyLCAweGNkY2YwZjBmLCAweGNmN2JkZTVkLCAweDc3M2RmYjNkLCAweDc5NjMyZDQ5LCAweDliMTkyMjNiLAorCTB4ZWQ1MGIzOTAsIDB4Y2NjOWE5MDYsIDB4ODMxYjE2M2MsIDB4NDM2MzJmMWYsIDB4MDg3YTNlNzksIDB4NmI5ODU5ZTYsCisJMHhmMjZiNjMyMCwgMHgwMWRlNzk3NSwgMHg5ZmM3NWQ4YywgMHhhMjY5ZmQzYiwgMHg2NzhlM2UxNSwgMHgzMGQ2ZmU2YywKKwkweGI1MzM0OWViLCAweDdmZTFkNzY3LCAweDI2OGM1ZDc5LCAweDY0OWY1OTVmLCAweDlmYzdkOTNkLCAweDI0YmY4ZjlmLAorCTB4NGMzM2ZmYzEsIDB4MmIxODEyY2YsIDB4ZTFhN2UyNjMsIDB4NzBmZmRmY2IsIDB4ZGZjN2I0MTgsIDB4NTRkZWM2NTUsCisJMHg4MDU2ODlkZCwgMHgxMmRjZGNhNywgMHhkOGNlZGRkNSwgMHgxM2M3ZjkzMywgMHg1MmQ0OTFkYywgMHgyMjNkZGY4NywKKwkweGI5NzE3OGM2LCAweDcxZGViZGUzLCAweDU1ZGU3OThjLCAweDBmYzgxNmQ5LCAweDRhM2QxOTM2LCAweDY0ZTJmYzM0LAorCTB4ZTg4MjZiNzYsIDB4MDY5NDdlMGYsIDB4MDQxOTY3YzUsIDB4NTU0MzdmZjksIDB4ZmU5NzYzMmMsIDB4YzVmNGEzYWQsCisJMHgzMmYyYjg5ZiwgMHg3YThhZmJlMCwgMHhiNDM5NjM5ZCwgMHgxODUwNjhhYiwgMHhkMWNjNjJjYiwgMHgxOWNkNzk5NSwKKwkweDQ3ODVkNThjLCAweDVmZDA2MjBkLCAweGE3NDhiZWNlLCAweDI5MmZjYTAxLCAweDgzMjlhZjY2LCAweDg3MDgwMGQxLAorCTB4YTIzZmMyNDEsIDB4ZDQxYjdkMzUsIDB4ZDg5ODM3NTcsIDB4Y2E1ZWM4NmEsIDB4ZTExOWFjNjEsIDB4ZDlhMjNiZDUsCisJMHgwNzdlM2YwMCwgMHgwZmE2N2UxZCwgMHg2YmNhMDBjYywgMHg2MzBiMmUxZCwgMHhmZjc4YzI5YiwgMHg3YjY0YzI5YiwKKwkweGI0ODMzNDdiLCAweGVjZDE5MmRiLCAweGQ3YTdjMDA0LCAweGY0MGQxNjMzLCAweDY5ODNjNDgxLCAweDAzNmU5MmY2LAorCTB4MWYzMDk5ZjQsIDB4ODAxOGYzM2QsIDB4M2VhZGQ5NGUsIDB4YWRkMmYxMTUsIDB4OTE2M2FlZDUsIDB4YWRmNDcxZmUsCisJMHg0ZGRiZTY4YywgMHg2MDM5ZDc2ZiwgMHhmNzgxM2FmYywgMHg1NDNiNGQ5ZCwgMHhkODczZTAzZCwgMHgxNTZhZGE5OCwKKwkweGY3MjhkMmQyLCAweGE4ZjNjNDU4LCAweDJjNmFhYWVjLCAweGE4ZjdjZDhmLCAweGE1OWY2ODZlLCAweDAwYjNlZDU0LAorCTB4ZTY3OGQ4NWUsIDB4Y2NlNTAyZDgsIDB4ODQ4ZjgzMDcsIDB4MThkNjE2ZmEsIDB4MjM5OGQ5MDUsIDB4MjgyOGNlMmQsCisJMHhkOWM2NzUxZiwgMHgxZGU2MDAzOCwgMHhmNjBhNjJlZCwgMHgxYTMyZDhjNywgMHhjYmE0NWZiZiwgMHgzOGIyZmQ4NSwKKwkweGZkMDA1MmE3LCAweDIzMDdmYjBjLCAweDc2N2VjOGJjLCAweGVjNTY4ZDM2LCAweGYzNWM2ZjAwLCAweGMwMWVjNTE4LAorCTB4ZTI0ZDMwNWYsIDB4ZmVjY2Y1YWIsIDB4NzNkN2VjNTMsIDB4YmE0MGU3NDgsIDB4NzM5OGViZGEsIDB4ZmFlZmI0MjMsCisJMHgyYzMxYmY3MiwgMHhkMmJlZGZjYSwgMHhiNzc4ZDBhYSwgMHg0NmI5ZGRiYiwgMHhkODc5ZjM0NiwgMHg5YzhmZGYwYSwKKwkweDAwNjdkZGVlLCAweGYxY2Y4Njc4LCAweDAzZGEzM2VjLCAweDUxOTczM2U2LCAweDFlMmQyOTdmLCAweDExZDI0NzlhLAorCTB4OGJhNjBlNzcsIDB4Y2ZkNDMxMmQsIDB4YzZiZTMzYTgsIDB4NGJhZWQwMDEsIDB4Y2EwN2NjMTUsIDB4NTQzZjlhZDMsCisJMHg1NTY5YWYxMCwgMHg3MWQyMGFjZCwgMHg4MjVlZDM2NywgMHgzZjc5YjUzNywgMHhlYTExODE0ZiwgMHg3MjAxZGQyMCwKKwkweDhmMzAxNzU1LCAweGNkMWQxNmM1LCAweGExNDViMTYzLCAweDk5YzVlNTc0LCAweDdmYTgyZTg5LCAweDZjNWVlYWM0LAorCTB4Yzc5ZmVhMTksIDB4NjI3NzFjY2EsIDB4YmViZmY0MTUsIDB4N2NmYjViYTksIDB4YjdiYzAyN2IsIDB4Mjc4ODY3YzEsCisJMHhhYjcyZGZkOSwgMHhiMjY5ZmE5MSwgMHhmMzg0N2ZiOCwgMHg3MmRlOWNhYiwgMHg0NzZmNzkwMCwgMHg0OGEzOWZkMywKKwkweDg4ZTIxYTJlLCAweDhlODcwOWJlLCAweDk2MTIzZDEzLCAweDc4YTBjZTAwLCAweDBhODVhMWZkLCAweDg1ZjVhYTgzLAorCTB4MjNhNTMzNDAsIDB4ZGRiODI3OWUsIDB4ODg5OTMxOGUsIDB4Zjg5ZjgwNmYsIDB4MDkzMTFhYzcsIDB4OGM2MmYyZjgsCisJMHg5MWM3MDZiYiwgMHhkOTE0MjdlZCwgMHhiNDVmNTAyMiwgMHhjZjc3YzVlNywgMHg1OThlNjUyZSwgMHhmYmNmMDAzZCwKKwkweDZlYjI3NzhiLCAweDEyZjc3NzQ4LCAweGJiN2I3YmE0LCAweDIxODc4ZjgxLCAweGIzOGIzMTNmLCAweGE0YmJmYjE2LAorCTB4Y2UzOGU5YjAsIDB4Zjk0Mjk4NGIsIDB4OTc5ZTA2NGIsIDB4OTVhYmZhZjgsIDB4ZWIxMWViZTMsIDB4Nzg5NmM1YTQsCisJMHhmMDJiMjc4ZSwgMHhiYzYxNGJmMSwgMHg3YTFlYjA1ZCwgMHhiM2JmY2FkNywgMHhjZDYxN2UwYiwgMHgxZTcwNWY5YywKKwkweGJiNjRiZmE4LCAweGRiZGZhMmRkLCAweDNkNWNlZTlkLCAweDA4Y2Q5M2U3LCAweGRlMTFjOGU3LCAweGMzYjdjODdkLAorCTB4OTBmYjNjZjMsIDB4ZTA5OGQzZmYsIDB4MjdjZTNjOTMsIDB4Y2ZiZWZjYzEsIDB4NDY3ZWEzNmEsIDB4ODg2NTY5OWQsCisJMHhiOTg1MmNmNywgMHhkMzJlZTkwMiwgMHhhMWFlMTBkNywgMHg4OWEzZGZjOCwgMHhiNjFlNDA3ZiwgMHg1MmMzNzhlMywKKwkweDgwMDM1NGFhLCAweDEzYWNjNzEyLCAweGRlYzY3NzU4LCAweDVkYTlkYWI2LCAweDNlZTcwOGU2LCAweGQzYWIzN2U0LAorCTB4MjA3Y2YyNDUsIDB4MmJlNTRhYzIsIDB4YzA3ZjM4MzMsIDB4ZmM0MDdmZjcsIDB4MmVkM2NiMDUsIDB4N2UwMWEzOTQsCisJMHg3ZTQzOGEzOSwgMHg4ZmM4ZWM4YywgMHhiY2YwMTNiZiwgMHg2M2E1ZTQyZCwgMHg2MTNmZWVmZiwgMHgzYWNkNzFmZiwKKwkweDBjOWQwMmE3LCAweDY1ZTkxMjNmLCAweGEyZjg3NGQwLCAweDhmZTExNTJhLCAweDAwZmZjMDYzLCAweDM1OGU2ZGEwLAorCTB4YTUyY2U1MDcsIDB4NWQyMGExY2MsIDB4ODc1YzIyOWIsIDB4MjMwZmQ0YWQsIDB4NDczMmI5YmQsIDB4ZWY4NmFkZTcsCisJMHg4OTNiNDZlNiwgMHgzZWQ4ZGY3ZSwgMHgzNjY2NjdlYywgMHhjMDFmNmZjYywgMHhlMTE1ZmMxZSwgMHhiNmIwN2IwMywKKwkweDZmZjRmNTA4LCAweDNkNDQ2OWZmLCAweGQ3ZjI5NzZhLCAweDM4YTIyNDM0LCAweDQ4YWUzZjgwLCAweGY3YTdlMGJkLAorCTB4NDEwYmQyNzEsIDB4NzNkNjBlZjQsIDB4ZWJmNmY0YzEsIDB4MDM5ZWFkMDUsIDB4ZjRlMDVkN2MsIDB4OWYyMjY3NzAsCisJMHg1MjJmMzVjNSwgMHhlYWQwN2ViOSwgMHhkMWU4Y2ViNSwgMHgzYTA4M2Y0MSwgMHg3ZTcwOGE1YywgMHgwYzVjZjg4MSwKKwkweDdhZTM4ODMyLCAweDU4M2ViMzQ2LCAweDBlMWQ5OWRlLCAweDc2YTQ4OThiLCAweDFjM2I0NWZmLCAweGQxZGYxMzE2LAorCTB4YWRjY2ViMGUsIDB4NDdjMDE1MDcsIDB4NTc2YTgzNzksIDB4OGZkNTBhNjEsIDB4ZmY0ODljZDksIDB4ODcxNGViMTcsCisJMHg0MWE0ZTUwOSwgMHg3MTc4N2UyNSwgMHg0YmQ5Mzg2NSwgMHhiYjY3ZWYwOSwgMHhkYmIxMDdhMywgMHhjZmYyMTUyMCwKKwkweDhlYzlkZGRjLCAweGYxODhjNjU2LCAweGYxODc5MGVkLCAweGQ2Nzk1OTJmLCAweGM1Mjc3NTY4LCAweDE3OTNlODA0LAorCTB4NDMwOGJlMWIsIDB4NjQ0ZmY3M2MsIDB4NjJjNjRlMDMsIDB4MGVkNmE3MGIsIDB4ZjAyOTA4ODMsIDB4NTM3ZjA5YmQsCisJMHg2YjgzYWYxMCwgMHg2OWFjMTQ1NCwgMHg5NTI2OWRlZSwgMHhmYjFkZDZlOCwgMHhmZTVhY2UxYiwgMHhiZDcwMGQ5YywKKwkweGNlYjQ2ZGJjLCAweGY1MzdjODFkLCAweDA1ZWM2NzU3LCAweGI4MjMyYmY4LCAweGY3YjRiZTVkLCAweDMzZTQyZjVhLAorCTB4OTJmNzdmNTksIDB4M2Y3YmQyNjIsIDB4MTMxOTJiMDcsIDB4ZWVkZjFmYTAsIDB4NjFlYjgyNzMsIDB4ZDUzZDY4NTYsCisJMHgyYTc2ODcxZiwgMHg4NTAwMjNkNywgMHg3YTNlZTY1MSwgMHg3MGQ0MjdmNCwgMHgyN2Y1YWE4NywgMHg3YmFhMzk4OCwKKwkweDdmMTA3ZTAyLCAweGJmODRlMThkLCAweDc3MjA5ZWVhLCAweDQ4ZTcwNDE5LCAweGM1YmY3ZmVjLCAweGZjYTA5MmM4LAorCTB4YjYyM2M4MGEsIDB4MDM3ZjcwOTMsIDB4ZTIwNzQ3NzgsIDB4YWE2ZjBmZDEsIDB4ZTA4NDU0ZjUsIDB4NWYwZmQ1MGIsCisJMHgwZTkwNWQzYiwgMHhkMTZhYmZkMCwgMHhiMTJlM2NkMywgMHhiM2QyMDc3MCwgMHg0ODY0ZThjZSwgMHhlMTUxY2Y3ZiwKKwkweDU1YmEwODFmLCAweGQ0YmI5ZTA4LCAweDFiODhmNDMwLCAweDkxZTJmN2U2LCAweDdmN2UwNzU0LCAweDk4NGFmZWE5LAorCTB4NDZmZDEyMmUsIDB4OTc5YzE0ZjcsIDB4ODUxYWQ2OWEsIDB4YzM1ZjcwZjYsIDB4MDMyZGJlOTUsIDB4YzU0ZGJmNDgsCisJMHg0ZTg3MmJmMiwgMHhiZTAzZGNkOCwgMHg4NDY2ZmNkMSwgMHg3ZTc2ODdhNiwgMHg5YWM4ZmE5NSwgMHg2MTUwZmY0MCwKKwkweDdjYzE3ZTdjLCAweGZlMzQzNGE0LCAweGYyNDQxOTRiLCAweDdhMWY1MGM3LCAweDFhYjc5OWQyLCAweGEwNzJiZGU2LAorCTB4OTk3YmE3ZTAsIDB4OTgzZWU1MWQsIDB4YWJhYjQ2ZGUsIDB4NmU0MDI2MjIsIDB4YWFlZDE1ZmYsIDB4OWM3MGI4NDIsCisJMHhjZjM0MjE5NCwgMHg3NDFmOTg4NSwgMHg0MWE2NjY3OCwgMHhjMzFiZjM4NywgMHg3ZjRhNmVkMCwgMHhiMGVmZmQwZiwKKwkweDRlZmY3ZTIxLCAweGZlN2RhZmNlLCAweDNhMGRhZjNkLCAweDNmYmU2OGM0LCAweGY4MDA3MWM2LCAweGFmODAzYWU1LAorCTB4ZWFjMThjMTIsIDB4ZmI3OWMwOGMsIDB4NjJlNTFlODgsIDB4NDhlNmU1N2UsIDB4NjFmMzBhOWYsIDB4NWExNzBjYmIsCisJMHhkNmU4MWVhNCwgMHg0ZmEwN2UxMSwgMHgxOWU3YzIwZCwgMHg0NmUyMzhlZCwgMHhkMjM1ZmVmYSwgMHhkMWY4OGQ1MSwKKwkweDVmZDE1YjM3LCAweGM2YWNmOTg1LCAweDI4YTIzNjdhLCAweDJmZGZlNzExLCAweGY1MDViOWQyLCAweDE4Y2I0YmZjLAorCTB4NTdhNWYzZjEsIDB4NGMxMzc3OTgsIDB4MWQ3ZWZiNzYsIDB4ZDY0NmNiZjEsIDB4OWZiZWY4OGYsIDB4NTcwY2YyZWUsCisJMHgzYWYzYzkyNCwgMHhiOWFiM2I4NCwgMHhiNzdhODc1NiwgMHg0M2FlZDdhNywgMHhiOWI3ZGE3ZCwgMHgzZTIzYTc0ZSwKKwkweDg2MjJmZjcwLCAweDU3OTllNGZjLCAweGZmNWYwMGY0LCAweDM3ZWE1NTZkLCAweDY4NmYwN2U0LCAweGFmNDBlZjdlLAorCTB4OTJmNDgxY2QsIDB4N2MxNmNiNzgsIDB4NDM3ODhkOTAsIDB4YmZhYWQwODMsIDB4ZTNmNjYyZDAsIDB4NTJjM2U4MGQsCisJMHg2M2ZiMWQ2YywgMHhmMTFkMjVhYywgMHhlOWZhZjhkNCwgMHg1ZmQwMmQ1ZSwgMHg2N2E3MWJjNSwgMHhmZTJhNWUyMCwKKwkweDE4MjYyMjYwLCAweGQxYmU4N2YzLCAweGU1OWZlZmM4LCAweDJlNjdmNjg0LCAweGU4NzJhZDJjLCAweDI1N2E5ZmMxLAorCTB4ODVkOTFiYTYsIDB4NDQ2Y2Q2MzIsIDB4NmViY2ExM2YsIDB4YTAxZjQzODEsIDB4NzZmZmE1Y2YsIDB4OGY5Y2QwYzgsCisJMHhhYTFhMWZmZCwgMHhlNzgwNjViMiwgMHg1ZGUxOGUyYiwgMHhkMTNiMDg1OCwgMHhiZmExMmZlZSwgMHg0NzJmYjAwNiwKKwkweGFmY2YxMWQ4LCAweGZmNzM0NTY3LCAweDIwZjY0NmQxLCAweGE1YTFmZGI4LCAweDdhNjMxYzczLCAweGExZGZkZTc0LAorCTB4YmRkMzYxYzEsIDB4OTA3ZTdkZjAsIDB4ODYzNDc0MWYsIDB4MThiNmI1ZGIsIDB4MjE0MTg3NmUsIDB4OGJjZTExM2IsCisJMHgzZDc4YjdiZiwgMHhjODcxNzQ1MCwgMHhmZDBjNTE0NywgMHg2NDFmNWRjYywgMHgyZThmODA3YSwgMHhmZTQ3ZTZiMiwKKwkweDM1NzY3Mjg4LCAweGY5NzFkNjkyLCAweDVjY2EzZjgzLCAweGU1Y2JmMTY2LCAweGRjZjgyMzFkLCAweDcwZWQ3OGVmLAorCTB4ZTdkYTFkOTQsIDB4ZTcxN2RmNmYsIDB4MWRkZmMwMDksIDB4OWRiNTdmNGMsIDB4NWM3MDMzYWYsIDB4N2QzM2UzNDYsCisJMHgwN2E0MmY0YiwgMHgwNGQ5ZTNmYiwgMHhhZmY5YTQzYiwgMHhmOWM3MTViZiwgMHg3NDg3NDEyMCwgMHhkYmY0MjQ1ZSwKKwkweGMwMjhiMGVmLCAweDUyNWZjZWRmLCAweGYzMjQ3YzQxLCAweGU2NjY2ZGU1LCAweGViYzgwZDhkLCAweDA0Yjg4ZDliLAorCTB4NjQ4YjZmMmUsIDB4MzdiNzY4NWUsIDB4N2E0NzEyYzYsIDB4YTMyNTk5MjYsIDB4NWYxNGU5OWUsIDB4ZTBjZjg5MzcsCisJMHg0M2NmODk3MiwgMHhhM2E2Y2Y4MywgMHgyNzU5ZjE1ZiwgMHgxYjZmNzBmZSwgMHhmN2NlZDc2ZiwgMHhkNzRmYzE0YiwKKwkweDdjZWZmM2ZiLCAweDBhZWMzZWE1LCAweDhkODQ1ZGYxLCAweDYzOGFlOWQzLCAweGY3ZjQxNzY0LCAweDFlYmU4ZGYyLAorCTB4ZTRlZDEwZDYsIDB4NGYxODMyZmEsIDB4OGQyYjVmNmYsIDB4ZGY3ZjdlYzAsIDB4MDUwYmNhNjYsIDB4ZmJhNmRlOTcsCisJMHgyMWNhN2U3NiwgMHgxZmMwMmE4MCwgMHg1M2JhYTZkYywgMHg5YzFmYzI2ZCwgMHhiZThhZjkwYywgMHhiYWQxYzY1NywKKwkweGQwOGJmMjVhLCAweDRmMzA3NzdiLCAweDMwNmZjYTIzLCAweGY3N2E0ODdmLCAweGZhZGQwMWIwLCAweDI5NjY3MmEzLAorCTB4MzE4YmI3NDgsIDB4NDIzN2NlNzYsIDB4MDQ3Y2E0MWUsIDB4OWQzODMxZTMsIDB4NTBlZTY0NjAsIDB4NjJhZjgwZWIsCisJMHg5OGMzNWUyNCwgMHgyM2UxZjQwNywgMHhkZjY0MGQxYiwgMHhmOGZiNWYwZiwgMHhmN2UwNGNkZSwgMHhkNjBjMWJkMywKKwkweDljZTQzMGU1LCAweDNlYTVmNjE3LCAweDA2NzNmNTAzLCAweGU0MGFhYzliLCAweDNkN2RkYjRmLCAweDVmNGJlZTUwLAorCTB4MGZjODVkNTAsIDB4OTIzYzM3YTcsIDB4ZjNkMjEzMzAsIDB4MDA2NWJmMjAsIDB4MDM0NmU5NDcsIDB4ZjhkOWNmOTUsCisJMHgxNTlmOTUyOCwgMHg0MmZhNWQ3MiwgMHg5N2Q0N2Y3YywgMHg0ZWFmZjc4NywgMHhmOWNlM2E0MCwgMHg0ODY5ODllYSwKKwkweDZiNDZlZDk3LCAweDk2OTBjMWZmLCAweDYzMWM1MzZkLCAweDZmM2RmMDAyLCAweGJmMjY5ODczLCAweGUwZTZjNzVkLAorCTB4OTk1ZDI0M2MsIDB4NDdhZjZlZTIsIDB4YTZkNTNmMTMsIDB4MWY3MTc2ZmIsIDB4MDRkZmQ2OWYsIDB4YTBhYTcyZmYsCisJMHgzMDI5YzRlMywgMHg1N2ExOGFlZiwgMHg3N2RmYWZjOCwgMHhjOWVjOWMyMCwgMHhmOTJhOTE5YiwgMHhmZmMxYmU4ZiwKKwkweDIwZGI5ZGVmLCAweGRlOTVmYjlmLCAweGEwOWRiZTQxLCAweDY3NDE1OGYzLCAweGI3YTQ1Y2IwLCAweDlmM2NjYzRiLAorCTB4ZmM5ZWJhZmIsIDB4NGE4YjVjY2YsIDB4OTFmNjg2ZjgsIDB4N2JmZWExNjMsIDB4ZjQwZmJkYTIsIDB4NTMyMWNhMmMsCisJMHg4NDhkZDdiMywgMHgwZGEzNjM3NiwgMHhmN2QwZWQwYywgMHgxOWYyZjM3YywgMHhkYjNiYzlkOCwgMHgwMjViYzdmNCwKKwkweGQ1OWEzM2U2LCAweDM4N2Y0MWY2LCAweGNhODIxOTg3LCAweGNmMmM3YTlkLCAweGM3Y2I2YjM1LCAweDJjZmJiOGY2LAorCTB4YWQ2MzBmZmEsIDB4NzdjOTcyZGEsIDB4ZmFiNGQ4OGYsIDB4NzM4MWRmNjIsIDB4ZjMwMDliM2YsIDB4OTJhNDM5MmIsCisJMHg3ZDIzN2NmZiwgMHhhZmMyMmVmYywgMHg1ZGJmM2E0NywgMHgzYmJlMGRiOCwgMHhmODcyYjAyYywgMHg0OTE1ZTlkYSwKKwkweDE0MjM1N2M4LCAweGQzYWNmMTg2LCAweGUzY2I0MmQ3LCAweDY2NWVhNDFmLCAweDdlM2VkZjQwLCAweGU2MzgxNmZhLAorCTB4ZGM1MWU3YjYsIDB4YTBiMTE5ZWYsIDB4ZGZmMDhmM2QsIDB4N2FmYjFlYmMsIDB4OGQ5Yjc1M2QsIDB4ZWQ4MjMzYzcsCisJMHhmY2RjYjA0NiwgMHhmZTQ2ZWNiNywgMHgzZGQyYjdlMCwgMHg4MzdmNGExNiwgMHg1Y2VkODVlOSwgMHg4OWViMDZlZiwKKwkweGUxMjEzYjYwLCAweGJjYjc4NjBhLCAweDBmYjFhNzRkLCAweDE5MWVhMTVmLCAweDhjMjc2ODFhLCAweGMzYmUyNzY0LAorCTB4NmQ4MzcwZjUsIDB4MzBmNWM3NjgsIDB4MmY4NDMxZjgsIDB4YWQzZDMwY2YsIDB4NmFkZmMxYzMsIDB4MjIwMzc2YzQsCisJMHgwMDM5YjFlZCwgMHhiNzZiMGFkMiwgMHgxNjdmYjIwOCwgMHg0MDViN2VmNywgMHhiNmZmYWExYywgMHg4ZGVhMWQ1YSwKKwkweDQxOGNmOGY2LCAweGViOTFhNzFiLCAweDlkODQ3N2Q1LCAweDFjZmExM2E4LCAweGNlYjRhYmQ2LCAweDRlZWUxOGRmLAorCTB4YzliOGUzZDQsIDB4OGM5NmM3NDYsIDB4NDhmOWY4OGUsIDB4Y2ZjY2VmYjQsIDB4YmVhYzdlOTUsIDB4OGZiMWZiODYsCisJMHgzODlhNWQ1OCwgMHhhODkzZWIxOSwgMHg1ZmEyZmI4OSwgMHhkOWVkZjI4ZSwgMHhmY2YzNGUxYiwgMHg0MjBkNzE1NCwKKwkweGU3MzNkNDM5LCAweGY0MDE2ZGRmLCAweGY4NzAzNmE5LCAweDhmODllMTgzLCAweDMxOTI3NmU1LCAweGIyMDdmOTE3LAorCTB4ZDBlOGY2N2MsIDB4ZDU4OTVjN2EsIDB4Njc5Y2ZiNTMsIDB4ZmY0NzRmZWYsIDB4MDdjNmQzZWQsIDB4N2ViZjUxZDIsCisJMHhlZGU3MTQxYSwgMHgxNjllMWU0YywgMHhiMGE0ZmFmMiwgMHgyZTIyMzEyMywgMHgxMWNhMTRmMCwgMHg5ZGRhNDFlNCwKKwkweDU1ZmJlMWRiLCAweDU3MjQ1ZDRiLCAweDlkM2E1ZDNmLCAweDJlOTY2N2QyLCAweGI2MTNmYWExLCAweDlhZGYxYTBjLAorCTB4Nzc1NzY3ZjMsIDB4MzVjOWQzYzAsIDB4ZDk4OWQ5MmEsIDB4MThhZjU3NDYsIDB4NTlhNGVlZjgsIDB4MTM4NWYxNDcsCisJMHhiYjc5OTE1NSwgMHhkMTljYjEyMiwgMHhiM2Y2NzI3YSwgMHgwMjc4YjYxMywgMHg2YzI3N2VlMiwgMHg2NzQzYTI3YSwKKwkweGZkOGY4Y2YzLCAweDljYmRmYTY2LCAweGJkYTE0NGI1LCAweDIzZDdlNzZhLCAweDJkYjVlYzFkLCAweGFjN2ZlMzE2LAorCTB4NTVkYjAxMjUsIDB4YjZiZGNkMmEsIDB4YjdjNzFkMjksIDB4MmM3YzY3MzIsIDB4ZjU5MTk3ZjIsIDB4MGJhOWI5NDcsCisJMHhiODI4ZjZlNywgMHhlNzJjNGE1ZCwgMHgxZmExYmZjMywgMHg4YTdlZmQwYiwgMHg5ZTg0MmI3NiwgMHgyZjNhMGJiMSwKKwkweGIxZWQzOGI0LCAweGM5MjJlZmE0LCAweDgxYjgyNzVmLCAweDcyOGNiZTVmLCAweDYwYjg0Nzc2LCAweGQzMTNkNjVkLAorCTB4N2M3ODVkNjEsIDB4MmFjNWIxNmUsIDB4ZjBhOWMzZjgsIDB4NWZhYjhlNzUsIDB4NWJmODg4NmMsIDB4NjA5ZWYxNjcsCisJMHg3ODExZGUzOCwgMHhjOTAzOGUwZCwgMHg4NjgxYzY1NCwgMHhiY2Y5ZjJjNiwgMHhlMjZhYjM2ZCwgMHgwZWZmMTg0MiwKKwkweDc5ZjlmZjE1LCAweDFiYTNkNzJjLCAweDJhM2M1YmMzLCAweDdjMDNjM2NhLCAweGRiMjVkZTNkLCAweDJiN2M2MGEzLAorCTB4MDczNmJmMjUsIDB4YzU3NzVmZTMsIDB4MmRhNWI4ZjIsIDB4ZWI4ODlkY2YsIDB4YTM0NGU0ZjYsIDB4MzczNmUzMDMsCisJMHhlYTAzOGYyYiwgMHhjMDVmN2M5YywgMHhkNjM4MjNhZCwgMHg3YWMyN2IzNywgMHhjZDA5NWMwMSwgMHhhNDIzMWNlZSwKKwkweDBkMzE3MTUzLCAweGFhYzJlZGY4LCAweGEwZGQyMTk2LCAweDZiMjMyMTFkLCAweDkxNTdiODdmLCAweDkyNjg2YzhiLAorCTB4NDAyOGY0MjksIDB4Njc3Mjg2MWEsIDB4NDU0ZjcyOGMsIDB4NTU5YjBjYmEsIDB4ZmE3MThkNTUsIDB4ZmZiZTMyOTQsCisJMHg3NzcxNTY3MCwgMHg5YzlmMDFiNSwgMHhhNDNjMmI3ZCwgMHhlODIyNWMzZiwgMHhjOWQxOTRjZiwgMHgzNmIzZmE2OCwKKwkweGFjYWUwODFiLCAweDgxOWYzZmNkLCAweGY5YjU5ZjdjLCAweGEwMTJiZDJlLCAweDFhYzc5Njg3LCAweGRmNjdmZTY4LAorCTB4ZTI5NWQ3OWEsIDB4NTg5ODlmMTYsIDB4ZWE3YTEwY2YsIDB4MWU1ZjgyODcsIDB4NjlkODc0MTAsIDB4OGI3ZmNkMGMsCisJMHhhYzZmYmI0NSwgMHg1NTQwNWJjZiwgMHhlMmY5ZjU2OSwgMHg1YjM4ODBkOCwgMHhkMjY1Zjk0NSwgMHhlZDYzOTNlNywKKwkweGZhZjNjZTM0LCAweDgwYzkwM2JhLCAweDMxNjdlN2NmLCAweGU2OGEwNzg3LCAweGYxNDhkZDZkLCAweGJhYzY5ZGQ3LAorCTB4ZTRlZmI4ZjEsIDB4YTQzMWQwYTksIDB4N2YwM2ZlZmIsIDB4N2U4YzkwMzgsIDB4NjBmYjJjZTQsIDB4YmZkYTIzZjQsCisJMHg0YWQyZjQzZiwgMHgwZTdlN2YyYywgMHg0ZmY4OGMxYiwgMHg2MGFkM2VmMiwgMHg2MTlmZTYzYywgMHg3ZmFmODRiNSwKKwkweDY1YjEzMTZlLCAweGJmN2RiNzE4LCAweDIxMGZmYzZlLCAweGM3NGNiZWJmLCAweGNmMDRiZjUwLCAweGU4MzI0NjFiLAorCTB4MTlmNTMxMTIsIDB4ZmQzODIzNzQsIDB4YmE0YTBmNTEsIDB4OTExOTAzMDMsIDB4ODg2ZTkyMWUsIDB4ZWU5MGVkYmYsCisJMHhjMTFhZjJkZiwgMHgyYTlhZTEyZiwgMHhiNmYzZGVlMiwgMHg3YzhmMWY2ZSwgMHg1MzY2NWM5MiwgMHhlMTIwNGUzMCwKKwkweDc5M2Q5MWJhLCAweGQ5ZGJmNjMxLCAweDBlZDBlZjkzLCAweDIyMWIxMmJmLCAweDBlYzIxZDJlLCAweDYxMGQ4OGVmLAorCTB4MmZlZDgzODcsIDB4NjM3NzM4YjMsIDB4ZTFkOTFiYmIsIDB4MzZmZjgyZTEsIDB4N2ZlZDA2YzYsIDB4MDg1OTdlZTAsCisJMHhlZDhkMGRiYSwgMHgxZmRmMGYxMCwgMHhlM2ZmNjIxYiwgMHhkZWYwZjE0NiwgMHg0M2ZmNzJiMSwgMHhjOTdmMGYxYiwKKwkweGFkNmZmNWM4LCAweDI5M2MzZDhkLCAweDEzNzRiYzg0LCAweGI1ZDZlYmUzLCAweGM2N2VkMTFhLCAweGY1MjEyODM1LAorCTB4NTE4YjYyZDksIDB4MWM3ZTFmZWUsIDB4MTI1ZmIwMWIsIDB4ZTA0MzhmYWMsIDB4ZWZiNjI4ZjcsIDB4MTdiN2NkYmIsCisJMHhlOTg5MGQ1YiwgMHg1YmVlODExMSwgMHhkZWIwZWJiZiwgMHgyOWNlMzEwZCwgMHgyMmZiM2Y4MSwgMHhmNmE2ZmI0NiwKKwkweDBhZmE0NjJhLCAweDE0MWU1ZWYyLCAweDM3MTQyOWY0LCAweDkzNGYzOGIwLCAweGJlYzFiYWRkLCAweDFjZDY5ZGQ1LAorCTB4M2VlNDgzZjIsIDB4ZDZhYjU0ZDUsIDB4OTM4YjhjNGYsIDB4MjM5ZjljZWQsIDB4ZDg5ZDY5OWMsIDB4M2MwOTdmODksCisJMHg3MGRiZmNjMSwgMHg0YzQ1YjhkYywgMHhmNzIzMWZiMywgMHgzY2FhZTI2MSwgMHhjZDBiMzE4YSwgMHg2YWY4YTMxMSwKKwkweDMyZjc1OGQ3LCAweDFkNmJiNDAzLCAweDIwOWIxY2M5LCAweGNkNjg1ZDFmLCAweDliNmE3ZDQxLCAweGZkYzQ2OGUzLAorCTB4NzkxNzk1OWEsIDB4MDJlNTdlM2MsIDB4ZmQ0ZTVkZTYsIDB4NzczMmY5ZjAsIDB4MTdjYTJmMzcsIDB4MmUzMDJkZDIsCisJMHhlMWM3MTExMCwgMHg3MmUzODg4OCwgMHgxY2QyNzYwNiwgMHg4ZjBhZTFjNywgMHg5MjkzYjAwYiwgMHgzZTc1YmExZSwKKwkweDFhZGFlODk1LCAweGQwMDU0ZWRhLCAweDc3ZGY0NmQ1LCAweDUwZWZkNzQyLCAweDM3NzFlZDJlLCAweDhjZjcxZmU3LAorCTB4MTliZTA1YmIsIDB4N2M3Mzc3MTgsIDB4NGI0YzE0ZjMsIDB4OGYwNGRmZWMsIDB4MGZmMzg5OTcsIDB4MmNmODBmMWUsCisJMHhmODI2ZWUyYiwgMHhlZTJkZWFlYywgMHg1MDg4MWU4ZiwgMHhhNWRjNWRiZSwgMHhjNDI3NWUyMywgMHg2Yjc3ZDA4NSwKKwkweDQ4N2Q3NWYyLCAweDQ3NzBiMzVmLCAweDIzM2FiYjI4LCAweDdkYmZmMjJlLCAweGEwODY2NDVlLCAweDE3OWQyZGY3LAorCTB4MmQyN2YxNzksIDB4ZGNiM2E0NDYsIDB4MDZmMDkwZjcsIDB4ZTU5MTEzOWYsIDB4MjY0YTBkMTUsIDB4ZjY3MzNmYWUsCisJMHhjMDc1YTM1ZCwgMHhkMzdmYzZhNSwgMHg3OWUzYTAzYSwgMHg0MmVlM2UwZiwgMHg2NzgwMDNlNCwgMHhjZWEwM2FhYywKKwkweDc5NzdmMjA3LCAweGVhNTY5MTliLCAweDIyZmZiMzJhLCAweDRkZjZlMzFiLCAweDUzYjVlNjA2LCAweGVmYjYzMzdiLAorCTB4N2VmYjc4YzcsIDB4NjMzNjU2ZGIsIDB4ZDMxZmFhZGMsIDB4NTQ3YWM0N2IsIDB4YThmZGNlYjksIDB4N2VlMzk0NjgsCisJMHg4ZDViMmE0ZCwgMHhiZWJjYWRmOSwgMHg2MTk3OTk4YSwgMHg4NDdhM2E1YywgMHhmMDAzZDk4ZSwgMHg2NzBjZTMxOSwKKwkweGM2N2MwMGY2LCAweDc5MzRkOWU2LCAweDJmOWU0ZWI5LCAweDI1Nzc4ZGM2LCAweDMyZWZiZTZiLCAweDdkYTY5YmJkLAorCTB4YTY5ZmJiOTIsIDB4MTBjZTY1M2UsIDB4NmFhZDNlNGQsIDB4NTc3ZGE2OTQsIDB4Zjk4MWNmYjAsIDB4OWFkZGNmMGMsCisJMHgyNjZiZGRmNiwgMHg2YjNkZjI2YiwgMHgzZmI0ZDAxZiwgMHhjZDllYWFjZCwgMHg5YzdhNzljNiwgMHhjZTAwM2RjZCwKKwkweGRlY2UwMjU5LCAweGRmMzU4YmViLCAweDBkZDVkN2Y1LCAweGY5MjBhMWYzLCAweGZmZWUxZjE0LCAweDMyNmMxNmNkLAorCTB4ZmE3M2M0NGIsIDB4ZmE2OWU3N2EsIDB4NWU2YWZmM2QsIDB4OWRmODAyOTMsIDB4MTkzODZiNWQsIDB4N2MyMTlmMTgsCisJMHhlYTRiN2UwMCwgMHg4YzFjZjYxNSwgMHg1YjVlYmE1YiwgMHhlOWUxYTczZiwgMHhjZTkwMjk5NSwgMHhlN2NiNmFmNSwKKwkweDgyOWNiZWUxLCAweGRmMmRhZGZjLCAweDgyM2Q3M2FkLCAweDcxZWQ5ZGViLCAweGUyMjhjZTIyLCAweDdmMDNhYzNkLAorCTB4OTdiOGQyNDQsIDB4OTc3OGYwMzcsIDB4YzQxZGU5ZWEsIDB4YjEzYTVhMWYsIDB4NzYyZmM5NmYsIDB4NDRhNjJmYzEsCisJMHhkOTg0YmYyZCwgMHg3YTUyZmNiNSwgMHgxZjMwZTc3MCwgMHg4OGZmODhlYiwgMHhlNDdjNDEzZSwgMHg3ODAxN2Y4MSwKKwkweGY4OTVmODk3LCAweDdjYjQzOGI3LCAweDlkZTE1ZGY1LCAweGRiOTFhZjMxLCAweDNmZjk2ZDBkLCAweGI1ZjFiNGUyLAorCTB4ZTNlZTkxN2UsIDB4ZDRhZWI3YTgsIDB4YmY3MTUyMmYsIDB4N2RmMWU1OGQsIDB4NTdmNTJiZmIsIDB4NmJiMjFkMDcsCisJMHhkYjNhZDdmNiwgMHgxNzE3M2E0ZiwgMHhmYjE3NTcxOCwgMHgzZjcwOTc0OSwgMHgxMzc2MzZmMSwgMHhmZWZiODlmYiwKKwkweGQ5MDBmODg1LCAweDFmODAxYjc3LCAweGI5ODcwOGQ4LCAweGNjMzBmZjdkLCAweGFjMTQ3ZmJmLCAweDc2MGE2NTM3LAorCTB4YjIzOGNiZTMsIDB4ZDc3ZGZlMjcsIDB4NTg3YWY4NmEsIDB4MDg1YzVmZjQsIDB4OTM4N2RjYWYsIDB4ZjllNDcyZTcsCisJMHhlN2M5MTYyMSwgMHgzYzAxZmIyOSwgMHhmMTQzZjFhOCwgMHgwMjJkOWZmYywgMHhmN2RiYWRkNywgMHg5NmY1YTQyZiwKKwkweGM0YzQzZjNjLCAweDdlMTBiZmI5LCAweDNhZWZlOTNmLCAweGZjODkzNWZjLCAweDZlNzhmMDgxLCAweDZkMzEyM2NmLAorCTB4ZjljNDA3ZjcsIDB4M2JjZjY5MmUsIDB4YjdlZTQ3ZWIsIDB4N2IyYTk2NzUsIDB4NmMzZmRhNTUsIDB4OWIxZGMyNTUsCisJMHg1ZTkzZDg0MiwgMHhmZDcyZGZmMSwgMHgxYzQzYTY3NSwgMHhlMDdjNTdiYSwgMHgyYmQxZWJmYSwgMHgwMGFlZDAwNywKKwkweGI5NjJmYmRlLCAweDVhZjYwMmM1LCAweDVmZWJkYmYxLCAweGJmMTE0NDQ0LCAweGJkNTQxZWI2LCAweGIyZTBhMWJkLAorCTB4MDM2ZDFlZDksIDB4Njk4NDM2M2MsIDB4YWI0Yzg4ZWQsIDB4ZjQwM2M5Y2MsIDB4M2RhZjU4YjEsIDB4MTFmNzI3ZTcsCisJMHg2MzY3ZGI4MywgMHgyN2ZkODBmYiwgMHg4ZmUzNGVmOCwgMHhmZGMyMWNhYywgMHg2ZTc4ZWNiNSwgMHhlNDg4YmZkZiwKKwkweDkxMTRjMWZlLCAweDE3NWEwY2FmLCAweGJmNzBkNjU1LCAweGU5ZjgyMzZjLCAweDRjZmQwMTBkLCAweGZiNTBiNzg5LAorCTB4NTMzOTExYTUsIDB4YzA4ZTI5ZTIsIDB4MzMyYmJiZDcsIDB4NTYyN2YyMTQsIDB4MjFmOTBhMmEsIDB4NTM0N2EyNjcsCisJMHg5Y2I4YjVmZCwgMHg2MjNmYzRjOSwgMHhiYmU4Mjk5YywgMHg2ZWRhZmZjMSwgMHgzOGJiMWUxYywgMHgzN2ZiMjM4ZiwKKwkweGU2ZjZmM2M3LCAweDRlOTRkMWY4LCAweGI4OGFiNzg5LCAweGYyMWZiNWIzLCAweDkzODQ2NTQ3LCAweGExYWEzNWZhLAorCTB4YzdhNmE1ZjcsIDB4YjVhZDc5ZjMsIDB4NmEyN2U5MzAsIDB4ODRlM2ZlZTIsIDB4YmYzOGM0ZGUsIDB4ZjlhM2ZiODksCisJMHg3MWZjMTM2MywgMHg3ZjY2YTY3ZSwgMHhmMTEzOGM2OCwgMHg3NzNlODU3ZCwgMHg1M2JhOWVhMiwgMHg3OGIzYmRkMCwKKwkweDc1OGZiM2JmLCAweDc1Mjc2ZTNmLCAweDEyZmJmNzhjLCAweDFkZmJjNjQzLCAweDBmZGUyOGUzLCAweDVlNzFlYTVmLAorCTB4YTQ3ZjcxYzEsIDB4MmZjZDg0NDMsIDB4YjdjNDhmM2YsIDB4ZDQ1NDgzZGIsIDB4Nzc0NmY1NGYsIDB4NWFiYmFlMzUsCisJMHgwZWZmODM3NywgMHgyZGJjN2RjNSwgMHhmMDMwMWZiNCwgMHhhZTA3Nzc1MCwgMHhiMDY2NTZhZiwgMHhiN2U0MTZiZCwKKwkweDdmYTE4YzY1LCAweDViYTJkZjVmLCAweDZiZjUwNjFlLCAweGY1OGFjYzNjLCAweDc1ZjAzNzIzLCAweGJiN2FlOTViLAorCTB4ODA2OWE3MDMsIDB4ODg2NWIwNzUsIDB4OGJhYzFmNWYsIDB4ZDdiYzIxOGYsIDB4YzQ2ZTRjYjcsIDB4ZjczNTgxZmQsCisJMHhhMTlhMWIzMiwgMHgxYjliNTY1YSwgMHgwNmQwZmU4NSwgMHhmOGRkNzIxNiwgMHgwOWIzOTA5NCwgMHhkNDU1N2IzOSwKKwkweGRmZThmMTE3LCAweDUzZDNhMDg3LCAweDBmYTA0ZTgyLCAweDg3OWQyMmQ2LCAweGYwYWZiYWI3LCAweDRmYWUzOGZkLAorCTB4ZmFlMjI1NDgsIDB4MWJjZWJmNzQsIDB4MzczZjNkNmEsIDB4ZjIxZDc3M2EsIDB4ZTg2ZjQwYzEsIDB4MGI1YWMzZjUsCisJMHgxMTc1YjdlNywgMHhkZGE4ZTdhZSwgMHhiNWVlN2UyZSwgMHg1OWRmZWE1NCwgMHhiYTA3YTYzYSwgMHg5ZDc0MTE0ZiwKKwkweGRmOWY4MWIyLCAweDVmYWVkNzYwLCAweGM4OWZhNTU3LCAweDdhODY3ZmE4LCAweDhiNWVmNGE1LCAweGE1NDNlMzE3LAorCTB4ODIxZTE5MGQsIDB4N2EzOGE1Y2IsIDB4Nzg2OGJlYTIsIDB4ZDJmOTg1ZGYsIDB4YzYyYjJjYWMsIDB4NjU3ZjljMjMsCisJMHhlNDNlYTljYSwgMHhiZmFlMzI2MiwgMHhkNDk0ZWNmNCwgMHhlM2M3NjQyNywgMHhiMjY5ZGY2OCwgMHgxNmI1YjdlMCwKKwkweDBkNDczZjNiLCAweGZjMDA4ZTI4LCAweGI2NTg2ZTk3LCAweDdjZWZjZjE3LCAweGZiNDY2YmY0LCAweGQ2ZDQ0NzRiLAorCTB4NTRkOWQ4NjEsIDB4MjE5MmNlNDAsIDB4MjE1OWVhOTgsIDB4ZmVmODJiYzUsIDB4MWZhMmJkZDUsIDB4NWM2MWJmY2YsCisJMHhhOWRjN2ZiMywgMHgzZTY5MDcwZCwgMHg2M2NjMGM0NywgMHhiNGJhM2UwNiwgMHhmYTNiM2VlNywgMHhjZGUzMmJkYiwKKwkweGZiOTNjNzE0LCAweGY3NTU0N2IyLCAweGY0ODQ2NGUzLCAweGRhMDgxNWFkLCAweDU2MTEwZGZkLCAweDQzZmM3ZjhjLAorCTB4ODI0NjVkZjAsIDB4YzdkMjFmN2IsIDB4MDU3YzdjYmQsIDB4NjU5NmMxZGEsIDB4YTNjNDc0YTYsIDB4MWE5Mjc5N2IsCisJMHhkN2JhNzAwNywgMHhkMWVmMzQyYSwgMHg3ODhjOTNjYiwgMHg4YWU2NjE3ZSwgMHg0ZjUwZTNjMSwgMHg5NWNlNjEwZCwKKwkweDI4NzlkZjE4LCAweGQzOTQ4NTk2LCAweDlkN2NmMWYzLCAweDYwNjU1YzU4LCAweDg0OWE2OGM2LCAweDE3MmZlMzExLAorCTB4YmY4YTE0NmIsIDB4MDE1YmZlZTAsIDB4OTg4ZTY3ZDAsIDB4ZjdhYWY5NWYsIDB4ZWMzZjg4YTMsIDB4MWUxODZmZjAsCisJMHg3MzNmZTVjYiwgMHgxZTQ5NGFhYSwgMHhlNDZiY2VjMSwgMHgxOWQ1OGNhNywgMHg3OTlmYTA5MywgMHhkYjM5NjA2YiwKKwkweGYxZmRlYzhkLCAweGMwNDNmZTBlLCAweDNhZjJlZjc5LCAweDViMjU3ZDZkLCAweDdmOWQzOWYzLCAweDViZWZlMDYxLAorCTB4ZWI2ODJlZDAsIDB4ZThmMjk1M2YsIDB4YWJhNDBlNjAsIDB4OGNjNWIxN2IsIDB4MGI0Njg0ZTcsIDB4NTFhZDE0YmMsCisJMHg2NjVmYThhYywgMHhiZjhjNjhhZSwgMHg5YjMzZjIwZiwgMHhiNGYyMDc1NCwgMHhlOGViMGJjNCwgMHg4ZjM5ZDNlZiwKKwkweDY5M2Q0ZGNiLCAweDZlZDk3MDNkLCAweGRjZWQ4MmVmLCAweDJiZmY1YzUxLCAweDJjNzBmNzdhLCAweDNkZDYyODdmLAorCTB4YWRmMWQ3MWMsIDB4OWUxODU4OWYsIDB4MDZkNjM5OWIsIDB4MWVjNjE4ZmUsIDB4YzUxMDZjY2QsIDB4ZDA2Y2FjMWYsCisJMHg1YTNiMDBhNCwgMHg2MDI2YjA2NCwgMHgxNmMzZGZiYywgMHhiN2JlMzIyNiwgMHg3NzljMGU2NSwgMHhmOTBkNzlhNSwKKwkweDA3ZTg5NTgxLCAweDFmOTFmOWYyLCAweDY3MmM1MGY4LCAweDE1ZDdkNmQ1LCAweGVhYzM5ZjNhLCAweDlhMDdlNDBkLAorCTB4ZDY3ODFmODUsIDB4YWUwMDliNWUsIDB4NmUzZDczMTcsIDB4ZGUyZDM5MjAsIDB4Njg3ZTQzMTYsIDB4MjM1YzhhZjEsCisJMHhhZWYxNmZmMiwgMHhlMDQzZDIxOCwgMHg2M2Q4N2UwNywgMHhjNzhlOWY5OCwgMHg0ODFlNjQ1NiwgMHhlYjhiN2U4NCwKKwkweDk2YWExYzMyLCAweGI4ZmY1YTdlLCAweDViYTQ5OGU2LCAweDRiNGZiZjQ3LCAweGU4YTE5M2I3LCAweDk0ZDJmNDA2LAorCTB4ZmYwODI0YTcsIDB4M2Q4YmQwNGUsIDB4NDc3ZTRiMTYsIDB4N2FiNzgyZTEsIDB4Y2I5ZTAxOWEsIDB4ZWU3NDYxNTUsCisJMHg4M2ZmMzNhOCwgMHhiZWQxYzZhNSwgMHhlNjE3NWM5ZSwgMHhkZmFmYjcyNSwgMHhjYWZjZGY2OCwgMHhiNzQ0YTE5YSwKKwkweGZkZTU3YTYwLCAweGI0NzBlNjY3LCAweDE2YWZlYzI3LCAweGExZWM3YTg2LCAweGM5ZTFlY2VlLCAweGMyYjBmZTUwLAorCTB4ZWFhMWViZTUsIDB4YTcyODc5ZjEsIDB4NmY1YzA5NTksIDB4NjYxNGI3YmUsIDB4ZmRlYzY0NjgsIDB4ZWNlNjY2YTUsCisJMHg0YjA3ZDhjNSwgMHg2OGZmOTRhZCwgMHgzZmU1MjI2OSwgMHhmNGE3NmE1ZSwgMHgyODdkYTU5MywgMHg2OGUyMjkzZCwKKwkweDAxODBjZTUyLCAweDI1NDc1Zjg4LCAweDk1MWFmOTcwLCAweDZjZGVlMjIwLCAweDhjYWEyMjUxLCAweDMwN2NmZmJjLAorCTB4YTFjNTY3NTQsIDB4NGQ4YzI3ZDIsIDB4MjcxZWVjNjMsIDB4ZGZjMDIzMjAsIDB4MDQ2ZjdlOTksIDB4ZGYzZGI5MTIsCisJMHg0YjhlYjA2MiwgMHg5NTcxZmY0NCwgMHhkOGJlZmE0MiwgMHgzZGE2YmI3NSwgMHgzYzQ2MjVmOCwgMHg2NGZhY2RmZiwKKwkweDljZTljYmZhLCAweDE5MzhkZDk4LCAweGZjZmVmMGY4LCAweDY5ZmI0ZDU4LCAweGZjOWEyOTM1LCAweGNkM2IwNGU0LAorCTB4Nzc1ZTUyN2IsIDB4ODUwM2Y5NGQsIDB4YTJmOTM1ZmQsIDB4OWUwMjQwMzYsIDB4ZjhkYjMwMmYsIDB4YjdkOGFhZmUsCisJMHhkN2M2Y2M2NywgMHhmNmRlNTZlYiwgMHgyZWYwZDU2YSwgMHhhZjc4MDdkZiwgMHg3ZDUwMzIxZSwgMHg1ZDI0M2QzMCwKKwkweDMxZDdhZDY3LCAweDczMzY4MDM3LCAweGZhMGRjYzNkLCAweDkzM2I1OTNkLCAweDExZmNlYWU0LCAweDk1ZmRkOTBiLAorCTB4MWRkZjMyZGIsIDB4ZGI2M2Y5MDEsIDB4N2ViZmI0MGMsIDB4NWFlYzQ1NmMsIDB4YjYzZTNmZGMsIDB4NDE4YTNlMmQsCisJMHgzMmE5NWVlYSwgMHg3YWMxZmExZiwgMHhlODA1OTFhYiwgMHhjYjE1ZGNiNywgMHg5MTU2ZmNlOCwgMHhmOTQwZTRkNywKKwkweGY5ZWZkYTJmLCAweGQxZGJjYzk1LCAweDUxMjA0NDFmLCAweGJkNTQzZTNlLCAweGU3ZTg4NTNlLCAweDE0YmVmYzI0LAorCTB4ZjkwMmRkZTYsIDB4ZjFhZmEwMzMsIDB4MTZjY2Y4YzgsIDB4ODUxOWQ3MGUsIDB4ZDlmY2MwYWQsIDB4ZmFmNWJmYjAsCisJMHhiMTcxYzAzZSwgMHg4NzQ0YjZhMCwgMHg1MGY1MDFlYiwgMHgxZGNiZTkzYywgMHgyZGJlNDMyYSwgMHhmZGEwNjA1YywKKwkweGE5MWZiOWJiLCAweDk0Y2YzMTFiLCAweGRlOWMyOTIxLCAweDY0NDc5ZDJhLCAweDdmYTg5OTJmLCAweDAyMWMwYWQ2LAorCTB4ZDZmZDE2ZWQsIDB4NzdkNjg5YjQsIDB4MGY3N2U0NGMsIDB4ZmMxNmFlZjQsIDB4MjY3NDdjODksIDB4MDg2MzM5ODYsCisJMHgzZGUwODU1OCwgMHg0NmZjN2VmNywgMHhkM2UzZjdhYywgMHhmZGU3MDgzYiwgMHgzMmI1ZGVhNSwgMHg1Y2ViZjgwMSwKKwkweGU5MTA3Nzg5LCAweDQ5ZTJjN2I1LCAweDdlZjE4MmFlLCAweDk2ZjVjOGQyLCAweGYxNDBlNTA3LCAweDljYmY0YmViLAorCTB4OWQzZTI3MmQsIDB4MzgyNDcwNjksIDB4MjU2NTVmNDgsIDB4YjkzYWJlYTEsIDB4OThlNzQwYzYsIDB4MzUxOWRlOTksCisJMHgzYjNmZDY4OSwgMHgzOGU1OGY4OCwgMHg3MWY2ZjUyNywgMHg5YWM5ZGYwOCwgMHg5NmZiODYwYywgMHhmMjU0NmJjNSwKKwkweDc4ZmY5MDA3LCAweGZmZTcyZjdiLCAweDFiMzc1NWE3LCAweDI4ZDZmZDBlLCAweDIzYTVkNjZlLCAweDYwYjIzY2RmLAorCTB4OWE2MzlkMzgsIDB4YzE0MWQ2MjEsIDB4OTAzM2UwN2EsIDB4N2YyZjc3NTUsIDB4N2UxZWRlN2UsIDB4YjU2NTg2Y2UsCisJMHgxODFkZWZlOCwgMHg3YzE1OGYzOCwgMHhiZmRlNDRiYywgMHhkNjUwMDczYywgMHhkMTQ3NGZlZCwgMHhkNGRjYmVlNSwKKwkweGYwZWQxYTNkLCAweGUyNTUwZmQ5LCAweDZhZGRiM2IzLCAweDNkMDIyNTg3LCAweDBlZjZlODJmLCAweGNmZTQzZWZiLAorCTB4ZTk0ZTc4MTcsIDB4Yjg1NGZmMjEsIDB4YWUwMjY3N2IsIDB4ZDI2Yjc0NTcsIDB4M2U3ODZlOTUsIDB4ZGJkYWM0ZjYsCisJMHhhZjczYmJlMSwgMHhlNjI0MWMxOCwgMHg3ZjQ5ZTI0YiwgMHg2ZTY5N2JjYywgMHg4ZWYzYzBkNywgMHgyZjk3ZjUxZCwKKwkweDM4YmZlZjk5LCAweGU3YzAxNDkzLCAweDM4ZGQ3YjdjLCAweDc3NWMwMGViLCAweGUyMWQ4NGJiLCAweGU2ZTNiMWY4LAorCTB4YmFjNWUwMmEsIDB4YzM0M2MxNGUsIDB4Y2I1MGM0ZWMsIDB4M2Q3NzNjNmEsIDB4MzAyNGM0MTMsIDB4ZWM0Mjc4NGUsCisJMHg3YTEwMWY4ZiwgMHgxMTA5ZmE0NSwgMHhhNjdlNzg1ZCwgMHg3YjM3ZjM4ZSwgMHgwZGJmMjE1NSwgMHhiZmZhMzQ3ZSwKKwkweDk0NGY5YzUyLCAweGViZWE1ZjdhLCAweGZiNGI1NjMyLCAweGY4MTI0N2MxLCAweDhhYjljNjM5LCAweGUwNTVkYTk3LAorCTB4YThhODJlY2UsIDB4NDIwZjJiMTIsIDB4NzkzNTZkOTcsIDB4OTdkNDE5YmQsIDB4NDgwZmQwMzUsIDB4ZmJlNzYyZWUsCisJMHg5ZTU3YzY0MywgMHg2NTJkYjY0NSwgMHg0MTdlN2NjZCwgMHhiYzE5Y2VlZCwgMHgxZDE5Y2QyNSwgMHg3NTg5NGRlZCwKKwkweGY1MWIwYWUzLCAweGZjNjA3MDZmLCAweDY5Yzg1NGE0LCAweGY1ZTJhZDc5LCAweGRkOTA3OWYxLCAweGQ5OGFmMTk0LAorCTB4ZGIwNjZlYzIsIDB4MjhmNjBlYTcsIDB4MGVjZDBlYzgsIDB4NTZhY2IzYjIsIDB4ZGUwMTU3NmIsIDB4YzI0NzFjNDgsCisJMHgyYmE3MGMxYiwgMHg5ODc4NDJjMiwgMHhiZGExNzAwNywgMHgwZjdiNzEyZCwgMHgxNWI4MjQ0YywgMHgwM2IyNTAwNywKKwkweDM1Y2NhNTNjLCAweDAxZTcwNjI2LCAweDQ3N2IzZWY1LCAweGQ1ZTc4MmY4LCAweGNmMzE1ZTAxLCAweDFjNGJiODYwLAorCTB4ZmY3MGZiOWYsIDB4NTE4N2NmMTgsIDB4MWU2ODI5YmMsIDB4ZmVjMTFlOTIsIDB4ODk0YmE0OWEsIDB4YTRiN2UzODcsCisJMHg3ZTdhMjE0MSwgMHgzMjA3ZWVkYSwgMHg3ZTQ5MWI4YSwgMHg5ZDUwMDU4MSwgMHg0NGQ3N2JmNiwgMHhlYmE1NjdkNCwKKwkweGY4NjZmZjQwLCAweGQzZjI0N2Y5LCAweDg1MTc1NjNjLCAweDdjYzE1MmZjLCAweGJlNTA5MzJiLCAweDQ2ZDM3NTdjLAorCTB4ZTFiZWRmYTIsIDB4NDljYTIzN2QsIDB4NTNkN2NkYTEsIDB4NWMyODgzMTcsIDB4YjRiY2QzZmIsIDB4MTA0NGY1ODAsCisJMHhkNzQ0NmY5ZSwgMHg5YzM3OGE2ZiwgMHhiZGM2NWU5NSwgMHgzN2IzNGYwMCwgMHg0MWIwY2VhYiwgMHgxY2UyNzY5YSwKKwkweDYwZTQ4NzkxLCAweGM0NjNjNzhlLCAweGIxMWNjNmY4LCAweDljMTFiZmVlLCAweDZlN2U3YTk1LCAweDc2ZjA4NmZjLAorCTB4NWI3ZDI3ZTIsIDB4NjhiYWYzYjgsIDB4OWZiZjYyZmQsIDB4OTQzYTMzZDUsIDB4YWZmNzZhOWUsIDB4ZGZmYWVjODIsCisJMHgyMTdlM2MwYywgMHhiZDU1ZjFmNSwgMHg1MDI1ZTI5MywgMHgyYWFlZmMyZSwgMHgwNzliOGYyYiwgMHgyY2I0ZjFlOSwKKwkweGMyMjVlM2QyLCAweDRlNzFjYmFlLCAweGYxNDlkZmFkLCAweGY3NjhkOWI3LCAweDVkM2ZjYTAzLCAweGZlZTI5M2I3LAorCTB4NDc2NjU3YzYsIDB4NmE3ZGZmYTEsIDB4NzhiNWNjZmQsIDB4YjZkNGViYmUsIDB4NGJlNzY0OTksIDB4ZGU3NjkzOWYsCisJMHgxZmY0MGM2ZCwgMHhiZDE3ZDc3MiwgMHhkZmU0NjNmOCwgMHg5ZjE0NjFhZCwgMHgxNmVmZDkyZiwgMHhhYmQwMWVlYiwKKwkweDllYmVjZWQwLCAweDhlYjY1MWViLCAweGI0NTJkNWViLCAweDFlYzgwMzg3LCAweDhiNzZjNmY2LCAweDUxYmRkYzRiLAorCTB4YzljYTAyMGUsIDB4ZTk5ZTJlNGUsIDB4ZTgxZWRkZmUsIDB4MTFjYmYxNzcsIDB4YzJhMTBmMGUsIDB4ZGY5MWQzZWEsCisJMHgzZGExZjU2ZSwgMHhmMWY4NWYyYywgMHgwZWU3M2M1MSwgMHgxZmEzZmZmNiwgMHhkOTBmZmI0OCwgMHg5MmY3N2E4ZCwKKwkweGMyNmYyODJlLCAweDFiYWI5N2VlLCAweDI3ZThhZGQzLCAweDVmZjEzYjA4LCAweDM0MzliZmMwLCAweGZlMTA4N2ZlLAorCTB4MDFmZjExOGIsIDB4NmJjNzIwZmIsIDB4MDY2NzllMzgsIDB4MWFjNGZmZTEsIDB4ZGI5NTk3NGUsIDB4ZmFlMTQ3YmEsCisJMHg3NzRkNzhmMSwgMHg2ZjhlYjNmMiwgMHg5ZmY4NDllYiwgMHhjZmYwMWFiNSwgMHgzZjVhNWZlMywgMHg4ZmYwMDZhYiwKKwkweDNmYzQwOGViLCAweGRmYmM1YmMwLCAweGUwZWZmMDJlLCAweDc4ZTFhZmY4LCAweDNhNzg2YjY3LCAweDNkOWUwM2FiLAorCTB4ZjE2MThlNzQsIDB4ZjQwZTRkYWYsIDB4Zjk4NGNlMWIsIDB4YjMzYTlmYzgsIDB4MDFkNTY1NWQsIDB4ODNmNDk4N2UsCisJMHhiZmI1NjBiZSwgMHhlMjRkN2Y0MiwgMHhlNmFmNmU3ZiwgMHgwYTdmYTg0MSwgMHgxNDUzZmU5ZiwgMHg3NmVlNjFkMiwKKwkweDgwZWZhNDFlLCAweDgyZWNlNjdmLCAweGZjN2ZiOGZlLCAweDk1ZTliZjc2LCAweDdlMDFmMTJlLCAweGE5ZDI0ZGQzLAorCTB4ZDkxOGI5ODIsIDB4MWQzZjg2YzUsIDB4ZTI4Mzc1YzEsIDB4Nzg2ZDRmODQsIDB4ZDdkYzQ2OGYsIDB4ZDdkZWQ3YTgsCisJMHg4NTE5MzNjMCwgMHgzODJmOGMzNiwgMHgyNzg0NjZjYywgMHg4YTFlZjgzNSwgMHhmOTFjNjE5YiwgMHg5ZjNmM2Q5ZiwKKwkweGJjZTQ5MGIxLCAweDZkYmU3MzU1LCAweGJhMTlmMzIyLCAweGE3NThmZmEwLCAweGYyYzZmZGQwLCAweDM5NTEzOTQ1LAorCTB4NTVkNGUzMGMsIDB4MmVlOWM3MDQsIDB4NzhmY2U2OGEsIDB4ZmYyM2FhYjksIDB4ZmRjOGNjYjEsIDB4ZjkzZmI5NDgsCisJMHhkZTBmZjBhZSwgMHgyNWQ3YzJlZCwgMHhkMmIxNzVlZiwgMHgxOGMyOTc3NywgMHgxNjRiODFkOSwgMHgyM2VmMTdhMywKKwkweDExMmE3YWMwLCAweDMxZWNmN2M3LCAweDIyOGVkZDExLCAweGQ1N2Y4MDRjLCAweDYwMzZlMjI4LCAweDFmNGY5MTAyLAorCTB4MWY0ZjljNjQsIDB4MzhhMjZjOGMsIDB4NWU1NGFjMzksIDB4ZDBmOGJiNDAsIDB4ZmM4MzkzMTIsIDB4OGE2OGI4ZGEsCisJMHhmNDIwM2VkNywgMHgyYjkxODNkZCwgMHgxZTFmNjg1ZCwgMHgzMTNhMzQ4YSwgMHg3ODNkN2U4NSwgMHgxYTMwY2U4OCwKKwkweDBkZjE4Nzg2LCAweGFmYmE0NmM5LCAweDc5NmU2ODUzLCAweDBmYmU5NzA1LCAweGQ0Nzg5ZTI3LCAweDA2ZGVhMDBjLAorCTB4NTVjNjM3ZWUsIDB4ZDc1ZGQ3ZTAsIDB4YzVkMjNiNjMsIDB4OWM2ZDFmNGYsIDB4NzQzYzMyYTcsIDB4ZTA1NWEzZGMsCisJMHgyOTNhNzE0YiwgMHhiZTgyNjM5ZSwgMHgyYjhlMDFjMywgMHhkY2IxMmY2OCwgMHg5ZGYxZTU2ZSwgMHg4YjI3NDAwZCwKKwkweGU1YzFiZTlmLCAweDAzZjdjM2NjLCAweGUzNWNmMGNhLCAweDY0MTljNjI4LCAweDkzNWZlMTA0LCAweGZhZjIzMzJmLAorCTB4MjZhZmM0ZjAsIDB4ZWM2NmNiYWMsIDB4MTAzZWNjY2YsIDB4M2E4NjU2ZTksIDB4NDVmN2Q3MDQsIDB4OTc4YzVlZDEsCisJMHgyNWYxODNkZiwgMHhlMjdhYTYxYiwgMHhlNjdhYzk5NywgMHgyNmI0ZjFkMSwgMHg4OWNjY2YxMiwgMHg4MTQ0ZDM3OCwKKwkweDk4MjNhOWNmLCAweGVlZjAxYTJmLCAweDc3OGRhODNiLCAweGY5ZDNlN2RkLCAweGVmN2UwMzdhLCAweDkxMWFmYmQxLAorCTB4YmI2Njc1M2YsIDB4YjhlMzBhYzEsIDB4YjgyMTk0ZjIsIDB4N2U1YjI5MmUsIDB4MjVhNmYwNzMsIDB4YTVkN2YzOWEsCisJMHhjZmM3NWU0MiwgMHg4MGZlYjU4NSwgMHgwNDFlMjFjNywgMHhjZGJjNDU2MSwgMHhlYWZkYjNkMCwgMHg4ODA3Y2UxMCwKKwkweGRkOWI0YTk3LCAweDI4MTZlZDQzLCAweDcxOTUwZjE0LCAweGMxZmY0OTM2LCAweDFkMjA3ZGQwLCAweDQxZjAxNDFmLAorCTB4Zjg1MTM1M2YsIDB4YmQzNDMxYmQsIDB4ZjVjYTI2ZmEsIDB4YWJhZDFkNzMsIDB4OWJiOTBiZTcsIDB4OWI2ZGU1MmYsCisJMHgyN2M2ZGU1NiwgMHg4MmJkYTlkYSwgMHhlZGUwMzA3ZSwgMHgyNjc2OTE0MSwgMHhmZjQ0ZTMxNywgMHg1Y2I5MTJlMywKKwkweDc4ZTJkZDY0LCAweDlkMzViMjJjLCAweDc5MDhiN2NlLCAweGZlZjEzNzI5LCAweDg4ZjdmOGU1LCAweDhkYTI0Yzc0LAorCTB4MDBmMDk1ZmEsIDB4N2VjNzFlYmYsIDB4OTAwMWEwNzQsIDB4NTZkNjRmNWYsIDB4ODczNDdmOTMsIDB4MzNiNWM0MDUsCisJMHg1ZjI0ZWRmYywgMHhlYmI3Y2M3NywgMHg0Yzc1ZGQxMSwgMHgxMGIzYWQ4ZCwgMHhjMmY3Y2FmNSwgMHgxZjQ3YTgxYywKKwkweGFjZjVkNjM0LCAweDRlZDhlYzhhLCAweGIyMTRkYmVlLCAweDNkMjMwMzY2LCAweGMyNjFlMjI5LCAweDIzNTU4Y2ZlLAorCTB4YTE0MDdjZTksIDB4NWUwZmVmYzIsIDB4NzQ3OGIxY2EsIDB4MzFhNzE4ZDEsIDB4NjMwYjY5MTAsIDB4ZjEzZjNhMTQsCisJMHhmMjdmYjEzNywgMHg4OWUyZjQ1MCwgMHg1MTg1ZDcyOCwgMHgzM2E2M2Q0NiwgMHhmYmY1MmI1OCwgMHhlOGI3NmI3NywKKwkweDMzZGUxOGZiLCAweDBlNzYzMTU2LCAweDc3Yzg4ZjAzLCAweGE4ZDViOGMyLCAweDhkN2U3ODc3LCAweDRhYTI5YjMzLAorCTB4MjFjNzdmMjIsIDB4ZGVlMWUwMjcsIDB4Y2E3ZjQwNmIsIDB4MDlkZjJmN2YsIDB4NGI3YTVmZmQsIDB4ZTkzYmIzZDQsCisJMHgwYjhmNGJmYiwgMHhmMmU0ZjYzZSwgMHg3ZDY1Y2ZmYywgMHg5MmFmY2YxZSwgMHhmZjNjZjlmNSwgMHhlNDVmZWNhNCwKKwkweDVmYWEwZTlmLCAweDRiZmY1NDE2LCAweDNlYmM1ZjllLCAweDdlODNkZjNmLCAweGQyY2U2OGViLCAweGQyMTRhMzg1LAorCTB4YmU4NDdiNTMsIDB4MjNlZTVjMjgsIDB4ZjZlYTE2ZmMsIDB4ZjMzNDc0ZjIsIDB4ZGM2ZWIyZTksIDB4NmJhMjUzNmUsCisJMHhkNTFmZGEwZiwgMHhmNjgyZDI3MiwgMHgyNzY0ZDVmNywgMHg3MDRmOWZlNSwgMHg3NWM0NGIyZiwgMHg2M2M1MjRkNCwKKwkweGExZmI3ZDQ0LCAweGM0YzFlYzk3LCAweGVkMWZjZTRlLCAweGY4ZTNjMmU5LCAweGJmYTA5MjliLCAweDA1ZmI3ZWExLAorCTB4OGM0ZWFjZmQsIDB4MWM3ZWY1YmYsIDB4ODBhZTFjNDksIDB4MjZmOTllN2UsIDB4MjNhN2ZjZjAsIDB4NDliZTFiM2MsCisJMHhiNTkyYjMzZiwgMHg0ODdmNDhmZCwgMHg4NmJlNzU0OSwgMHhlMzI3NjNmMywgMHhlNjQ1ZTczNCwgMHg4ZDExYzRmZiwKKwkweGU3ODYyN2YxLCAweGYzZjUwMDQ1LCAweDY3YTVkNzk3LCAweDVmZjNmZjQyLCAweDA0YmQzZDdkLCAweGU3NjEyNWZkLAorCTB4Y2M3NGRhMmIsIDB4ZGIzNGY3ODksIDB4MWJlN2E1MTgsIDB4N2RlMjMxM2YsIDB4OGQ1ZDhhYjMsIDB4YWVkMDcxYzYsCisJMHgwMGRjZDIxMiwgMHg5YzA0Y2FiOCwgMHg5M2Y0ZTc2MCwgMHg4MzczZWMwMywgMHgzZDhjMWJkMCwgMHg1ZjM3ZjdjZCwKKwkweDdhNDdhYjNkLCAweDlkZDVkN2NlLCAweGY2ZWQwZTdhLCAweDNlZTQyNTI4LCAweGRkZjE2NmNkLCAweDE3Y2U0ZWQxLAorCTB4ZTg3YTE1ZWYsIDB4MTFiMzlhNmEsIDB4OGM2YmY5ZTcsIDB4YjczZTQwMjEsIDB4NjBmYjkzYmEsIDB4ODU1ZjFjNDksCisJMHgxY2NkZWVjMiwgMHgwMWRiMzE2NiwgMHhlNDNmNDNjZiwgMHgxYjI1NTRmYiwgMHgzYzYwODYzMiwgMHhkMTg0Y2RmOCwKKwkweDZkN2UyNGVmLCAweGM3OTViNTNjLCAweDNjNzgxYjUzLCAweGJjZDZkMGI1LCAweDMzMzc5NDA4LCAweDMxYWQ5NTI2LAorCTB4ODRkOGMxZGYsIDB4MDMzOTQ4NWYsIDB4ZjM2Zjg1OTEsIDB4OWQ1ZjMyNGMsIDB4Yzc5YjI2M2YsIDB4NzY3ZjMwYmIsCisJMHg1MDZiNjNmZCwgMHhiOWMyOWE2ZSwgMHhmMGQwZmIxZiwgMHgxN2E4ZTE4MSwgMHg3NDIyMzI1YSwgMHgzN2U3OTA1NiwKKwkweDQ5OGM4YmUzLCAweDhlZmNiMTQzLCAweDYzOWU1ODcxLCAweDIyMmFmNGIyLCAweDhiZTIzMmZjLCAweGM3NWRlMzM3LAorCTB4M2RiMDVmOTAsIDB4NDZkYzQxYzYsIDB4MzA3ZGZjNWYsIDB4MmFkYmY3MGYsIDB4MGY3NWE3OWQsIDB4ZGE4NzcwOGEsCisJMHhjMDg3ZmE3NywgMHg0YWM5MzFhYiwgMHgxOTkwMTM2OSwgMHg4NzA5MTdmZCwgMHhmOWZjMWYxYywgMHhkZmQwY2Q0NSwKKwkweDgzNDllNWM5LCAweDlmNzFkYjU3LCAweDM0OTBjNzI1LCAweDQ2N2UzZmQ0LCAweGUwNzJmYjgyLCAweGFjNzUyN2Y4LAorCTB4NmUyOTJlMTcsIDB4MDI0YjhlMTYsIDB4NWRlZTAzMGUsIDB4ZDk1ZGJlMDMsIDB4YWMwNjczMmEsIDB4ODk4ZjI2ZjMsCisJMHhjZGVmZTRkMCwgMHhjMGNlNjU4ZiwgMHgyOWJkZWQzOCwgMHhjMmY0ZmM5YSwgMHgwZmY2OWFlZSwgMHhhOWFmZWFjYywKKwkweDY3MzUzMDJmLCAweGIxZjgwNTU1LCAweDFlNDlmYjlkLCAweDYyZDJhNzgyLCAweGVlN2Y0NzA5LCAweGZjNWYwZGVmLAorCTB4ZmZmNDQxZTUsIDB4ZjQwZWFiMzYsIDB4ZDllZWU3NTUsIDB4YTFkYjk3ZjIsIDB4NGUzYzY1ZDUsIDB4M2I0N2YxNDUsCisJMHhjOWNlY2JjNSwgMHhhNzdhMjhmMywgMHhlODVmNzAzZSwgMHhmM2E2NmIyMiwgMHgwM2VkOWQzZSwgMHg3Y2VlNzVjOSwKKwkweDc3M2E3ZWViLCAweDAzZWY1ZGY2LCAweGViMTI0YWY1LCAweDA4NmMyMWRkLCAweDU1Y2JjM2RhLCAweGFlYmM1MTFmLAorCTB4ZWZjZjkyMjIsIDB4OGNjN2ViZTIsIDB4ZmI4YTBmYjgsIDB4ZGY4MWQ3OGEsIDB4ZDEwZmMyZWYsIDB4NTBmMzZjM2YsCisJMHhmZWI3M2IzYywgMHgxZDliZWQxOCwgMHhiYTdhZTQ0OCwgMHgxZTgxNzUyMiwgMHg0MjU1MWRlZiwgMHgxYzY4NzY4YSwKKwkweGUwNjhhYmU4LCAweDM2NDZlNjk3LCAweGJiZWUxNzcwLCAweDFmYjg1ODY2LCAweGIxOTkzNmRlLCAweDFlMmJlNDU4LAorCTB4ODg0YTY5ZGYsIDB4ZjNkNzdiYTEsIDB4YmNhOGYyNmIsIDB4ZmE5YzJkYTIsIDB4MWU2ZDRmN2YsIDB4NWYwOWU3NDcsCisJMHhhMWZmNjg1MywgMHhlNWExZTUyMCwgMHgyOWI4N2U3OCwgMHgxMWUwMzNkYywgMHg3N2UwYjcxOCwgMHhkZTIxZTU3NywKKwkweGYzZjE3NjJhLCAweDlmZWEwNWI1LCAweDVhNDAxNmIzLCAweGRmNDc5YjU2LCAweDQ5YWNhODE3LCAweDQyNjE3ZjAxLAorCTB4MDViZmI3MmUsIDB4YWYyMWYzNjgsIDB4NDZhY2IzMGUsIDB4N2QxYWFiYmIsIDB4M2Q0NzllYmQsIDB4OWU5MGI0NjMsCisJMHg4MDdiNmU4OSwgMHgzMzZjYWZjNiwgMHgyNGY3ZjdkMywgMHhkMGQ3N2Y3MSwgMHhkYjFhZTFjMiwgMHhjOTcyYTJlNiwKKwkweGJhOTM1MzBmLCAweDg2MGZkNjY5LCAweDdjN2FjZGY4LCAweGMyZDBjMzk3LCAweDZkZGRmZGE4LCAweGYzOTUyOGZkLAorCTB4YWZjZmJiN2QsIDB4MjFhZTNlZTksIDB4MTRiOGVhZmUsIDB4NzFkYmY3OTgsIDB4OTBkYzk1OGEsIDB4YTU3YzNkMjAsCisJMHgwYjM0Nzg2YSwgMHhjN2RhYTdhMSwgMHhmNGU3ZTM2OSwgMHhkY2ZjNmQ0YywgMHg3MzhhNjE1ZSwgMHgzMWMwMTI3ZSwKKwkweDNkMTZiMWYxLCAweDQ4YjEwN2VlLCAweDM1ZjExNWIzLCAweDdiNjBjNDcxLCAweGE5N2M4MDQ5LCAweDIyMzdlZjdiLAorCTB4ZGVlYjBjN2QsIDB4MzY5ZGEyMzcsIDB4NTAxYjlhNDEsIDB4MzNjZTJlNWYsIDB4MDVlOWViMDQsIDB4MmY0ZjUyNDksCisJMHgxZGRhNTRhMywgMHhmOTA2NzU3NiwgMHg4MmFjMzNhOSwgMHhjY2ZjODUwMSwgMHg3ZTU0ZmExMCwgMHgxYTZiNGNkZiwKKwkweDFlNmVlM2EwLCAweGM1MzQ3ZmM3LCAweDQ1ZjUwMmJkLCAweGJlOWIwZTczLCAweDczNjZmNDgzLCAweDdjYzNlZTNhLAorCTB4OWQwM2YwNTcsIDB4ODlmOTBhY2QsIDB4NzUxZTc0MmQsIDB4MGViYjA4ZTIsIDB4MDRhYmZmZTMsIDB4NmY4ZTUyNWMsCisJMHhhMmM1OGYzNCwgMHg1YjJhN2JmZCwgMHg3N2JlZmQ4MiwgMHg0ZWNkOWRlNywgMHg0N2YxYWZlOCwgMHgwZjY4OTk5OSwKKwkweDI1Y2ZiOGU0LCAweGNjMjk3YmYxLCAweGQ3MGQ3YWRhLCAweDQ0NmY5NTgzLCAweDBiZGU1MWQ4LCAweGZiODYzMTcwLAorCTB4YjQ0YzdiOWQsIDB4ZGE3MjgxNGUsIDB4YzM3Y2E4Y2YsIDB4ODllZjA5YjQsIDB4N2FjMTQ2NTQsIDB4N2RjZmM2MTUsCisJMHg3Yzg3Y2MzMywgMHg5ODY2ZjhkYywgMHhlZjQ2ZWQxZSwgMHg0ODczZjc3NCwgMHg3YjM3ZGNjZiwgMHhhMWY1YzE4ZiwKKwkweDY3YTRjMWIzLCAweDlmMzhmN2U0LCAweDA5ZGIzZDI3LCAweDViZDIzN2JjLCAweGU1MjY3Y2MxLCAweGU1YzM1ZGQzLAorCTB4NjlmMDQ4YTUsIDB4YjczZjkwYjEsIDB4NTUyYmEzOTAsIDB4YWYwZTQ4NWQsIDB4ZTM0MDA2M2MsIDB4Y2E2M2U5M2UsCisJMHgyN2U4NWRjMCwgMHg3ZWY0MmRkOCwgMHgwMmNiOTQ5MywgMHg3OTQxMGY1YywgMHgzYTE4ZmY0MSwgMHg4ZGZkMmJmZiwKKwkweDZiMmMzOTYwLCAweGU1YmY1MmIzLCAweGVmMjE3NjZkLCAweGI5NGJjYTM2LCAweDYzNzIxNjJiLCAweDJjYzY3ZTEyLAorCTB4NTNiYmU3YzEsIDB4NWUyMGVmZGMsIDB4ZWU0MWFhMGEsIDB4M2YxZjY4YTMsIDB4Y2ZjOWU1MGIsIDB4ZjIyYjQ2MzcsCisJMHg2MjRkZjAxNywgMHg1NGZjODA0OSwgMHhkMGNmZGUzNywgMHhiOWM1MzEzZiwgMHg0MTY2NmY4OCwgMHhjYzlmZTgxYSwKKwkweGFjNGZmNzZlLCAweGZlMDAxMmUzLCAweDc0MzIyYjg5LCAweDlkYTlkZjc4LCAweGU2ZjlkYjdmLCAweDhmN2ZmOGU2LAorCTB4NDhlMjk3OTAsIDB4NjdmNDRmNWYsIDB4MGU2MTU1MGQsIDB4Mzk3ZTg3M2MsIDB4MmNmN2VmOGUsIDB4YjhmMWM1NWMsCisJMHg0NWNhZTBkMCwgMHgyZmUxNjJmZiwgMHhhMTk3OGExNSwgMHg2OTdhODFkZiwgMHg2MzJhOTFkOCwgMHhmZWU1MWM2MCwKKwkweDBlY2M0MWI2LCAweGQ2ZDI5ODc4LCAweDEzMzdkMjgzLCAweDBmMTE0N2RjLCAweDA0ZDM2ZDQ1LCAweGEzN2QwNmJlLAorCTB4NGVhMWM1ZmQsIDB4NzgzMjQ3MWUsIDB4MTk4ZDhlNGQsIDB4YWI3MjQ3MTgsIDB4NjkzM2U3NDgsIDB4ZTA0Y2ZhY2MsCisJMHgxZDdhZGU3ZSwgMHhiZWU0YzNjNSwgMHg5OTJiOGNhMywgMHg4MDdjYmNmMCwgMHg1ZjQyZmQxZCwgMHgzN2VmNGU5YiwKKwkweDcyOTljNzA0LCAweGIwYmZkZGI4LCAweGJmNzY0MGQ5LCAweGMzY2ZmMWFjLCAweDJlN2Y1MDc0LCAweGVkMDVkOWMzLAorCTB4Nzc3YTk3YzksIDB4YmNmNWYyMWIsIDB4MGQ1N2RlYzksIDB4ZTRmZjlmOTAsIDB4NzY5MWE4Y2UsIDB4ZjRlYjNlM2YsCisJMHg0NzY4OWViZSwgMHgxODhmMDBlYiwgMHhhMzViYWFlZiwgMHhiZmI5NzllNiwgMHhjOWY3YzExMywgMHg3ZTRiN2YzOCwKKwkweDc5ZjNlNjBlLCAweDlmODhkZDZkLCAweGM4OTk1NGFlLCAweGJlMDE1ZDBlLCAweDQ4NzYwMTY1LCAweGU3YTkxZGRhLAorCTB4N2M5MWZkYTUsIDB4ZmFlN2FlNWQsIDB4ZGEzMjNjYWIsIDB4YjQwOGM5ZWIsIDB4Mzk1YzkzM2IsIDB4Zjg3ZDc3YzgsCisJMHhkZGJmMWE3OSwgMHgxNDc2YjRkOSwgMHgzOGE1YzFjYSwgMHhlZDI4YjczYSwgMHhiYzFjYjA0NiwgMHhkMzFjMTRiNiwKKwkweDhlZWQxZDVlLCAweGNmNTJlYmQ0LCAweGZhMzViYjRiLCAweGZlNzcyZmU1LCAweDhhNTVjZDE1LCAweGUwMzI0MDdiLAorCTB4YjczZDZlZWIsIDB4MmRlYjc3NWYsIDB4ZTM2MzNmYzQsIDB4NmY5MWU5MjYsIDB4MWU4ZjVlNmUsIDB4OThmNDdhMTMsCisJMHg3NDU2OGY0NiwgMHgyNzA2MDc2MiwgMHg3NDFjOWFkZiwgMHg0Y2YzZWQxNSwgMHgzZDQ0N2ZkYywgMHhhM2RmZDgxZiwKKwkweGUwYzdhMzI5LCAweDczMjdjNjNjLCAweGMxNWRmYjNiLCAweDFmZmU5OWRkLCAweGZhNmI3YzlmLCAweDg4YjI1ODdmLAorCTB4ZmY0MGRkZjcsIDB4ZmQ3MzI2MTcsIDB4OTllZmFjMWYsIDB4NzNhN2JmOTUsIDB4MmY1ZjRmNjksIDB4MGNhMzgzZGEsCisJMHhjMWRhMDNlYywgMHgxNmZiMDg4NiwgMHg1ZWM4MGY2MSwgMHhiZjdiNDc4NCwgMHg0ZDVjMWVjZSwgMHg3ODg4NTk5YiwKKwkweDFlMGY2MTBhLCAweGY2MTZmZTRhLCAweDk0YTFmMjQwLCAweDUyMjcyOTFiLCAweDQ4ZTU4MjJlLCAweDlmODRjNWNhLAorCTB4ZTkxMTNhYzIsIDB4NTdiZjFlZjQsIDB4NmNmN2FlNTAsIDB4N2I0NmZkYTMsIDB4Y2Y5NDYwYzQsIDB4OTc2ZTNmNzYsCisJMHhjMWQ2ZjI0MiwgMHhmMWY5MDg0ZSwgMHg2ZWQ2OGJjYiwgMHhmMjkwYjk0OCwgMHg1Y2E3ZTUyMiwgMHgyMGVjYzVjOCwKKwkweGQ2YTdkOGI5LCAweGY3MGEzMzNkLCAweDZiZGQ5MmNiLCAweDcyZmRlMzkzLCAweGQ4MjNiNjUyLCAweDU3Y2E3NDNlLAorCTB4YjM2NDU5MTgsIDB4ZjIxOGFhZTMsIDB4ODFhNDM5NTUsIDB4NDRlYTY1N2MsIDB4YmU0OTllMWUsIDB4ZDk2OGJmMzUsCisJMHg2ZmQzZjI0ZCwgMHhmNGZjZmJmZSwgMHhlOWY4NGU5YiwgMHgzZjBkYmU3ZiwgMHgzZjYzZjQ3NSwgMHgzYzAzYjJjZSwKKwkweGRmNDBiMjU3LCAweDZkZjlmODY2LCAweGZiOGMzYmMyLCAweDdhZjlkZDBmLCAweDA0OTdkNjAwLCAweDhkMzE5Mzc3LAorCTB4YWUxMzNlZTIsIDB4MmY4YTJhYjMsIDB4NzQ5NGJlMGEsIDB4NmNjMGZlOTYsIDB4OTMzODc3MTEsIDB4ZTEwNzdhZTIsCisJMHg4MmMwZjVjNSwgMHg0NDdiZDM5YiwgMHhiMzVjNTM2NywgMHhiMzI3ZDcxMSwgMHgwM2Y0MGQyMSwgMHg5YjdmZjMzYSwKKwkweGJkZWY1MTZmLCAweDNlNzQ5MzcxLCAweGZiOWRmYzk2LCAweDQzOTJjNzhkLCAweGIxYzc4ZGZiLCAweGI1ZDI5YmZjLAorCTB4Zjg4OTk3MjAsIDB4MzAwYjhmZGUsIDB4MjllMTM4ZGUsIDB4MGFjYjY3OTEsIDB4NDZkMzhmMTAsIDB4M2M5ZmZhYzgsCisJMHhmYTgxZWNlOSwgMHgzOGI4Yzk4MSwgMHg1M2RlMzljNSwgMHhmNGIzZGU0NSwgMHgzZjY4MThmMCwgMHg4ZmU2MTllMSwKKwkweGQ4ZmQ0MzliLCAweGI4ZjZlOGVjLCAweGVkZmNjMjg4LCAweDNiMWZlNzk1LCAweDUxZTg4NmJjLCAweGRkY2NlNWNiLAorCTB4M2ZmYmU3YTIsIDB4NzkwNTlmMjIsIDB4NDQ3ZTQwNGIsIDB4NmYwMzdlNTAsIDB4NjE2ZmE1MWYsIDB4OTA0NWU3ODEsCisJMHg5YzIxOTQ5ZiwgMHhmZjAwYWVjZSwgMHg3ZmRmODYwMSwgMHg1NTg1ZWQwNSwgMHhhOGQ3MTg2MSwgMHhkNmY4ZGI4YywKKwkweGY1NmJkNDE1LCAweGI1NDVlZDBhLCAweDE0ZDU4MWUzLCAweGZiYzU1MzM4LCAweDczNWY5NGI5LCAweGMyM2UwOWQ4LAorCTB4YmU3OGJiMDMsIDB4OTNlZDRhNGYsIDB4MzdlOGJkMWUsIDB4YTFiZGRjZTAsIDB4YjlkMjcxNGUsIDB4Yjc4YTExODMsCisJMHg3YzQ3NDY1YiwgMHhkYWQxNDlmNywgMHg2YmQxZmMyNywgMHgxZTc4NjdiZiwgMHg2ZmJlNTZlZiwgMHg4ZGQ2Y2ZiZiwKKwkweDZlOTlmN2JlLCAweGIyZmJmYzYxLCAweGZlN2Y5ZjQzLCAweGVmZTcwYTVlLCAweDIxZDE1OTMxLCAweGE4YTVjN2ViLAorCTB4MzcxMTFmYmMsIDB4NjhhMWYxYTAsIDB4N2JlODVkNGEsIDB4YjhjNTEzYjAsIDB4NDI1ZmI4Y2QsIDB4MjRmNmRjZjgsCisJMHgyOGQ5YjdlMiwgMHg5M2YyZmRmMSwgMHgxOTYzNzdjOCwgMHg2MGNmYzRkMywgMHg5ZmRmY2E3YywgMHg4ZDQxNzJmMiwKKwkweDE5ZDc0ZjllLCAweDliYWZhZjg0LCAweGE5MTQ4MGVmLCAweGYyZjhmZGJmLCAweGY0Y2JkMTA0LCAweDg0NzZmODM1LAorCTB4ZmI1ZGI3YzAsIDB4ZThlYmVmYmQsIDB4ZjdjM2FjMzUsIDB4NDhlNzZmODIsIDB4Zjg2YTc2M2UsIDB4MjJlZjVhM2QsCisJMHg1MzhlOGNmZSwgMHg1NzQ3ZThhYywgMHhlMGQ2YzJiOCwgMHg5ZjJmYzE3YSwgMHg2Y2JlMjdiZiwgMHgxZDAzZmI5NiwKKwkweDAyYjVlZmU0LCAweDg5MGFiZjk0LCAweDRmZWJjZjQ3LCAweDc0YmFmY2EyLCAweDNjYjllZGVkLCAweDczMzVmM2I2LAorCTB4NTJiYzAxZjYsIDB4N2ZiZTBmYzgsIDB4MjdmYWY5ZTQsIDB4N2MwOTJlMzEsIDB4ZDc5NGY1NDEsIDB4MmMxZGMwMDcsCisJMHhmOTQxNzU4ZiwgMHgxNWY5MjBlYywgMHgwM2ZhNDdmMiwgMHhhOWUwMDFlZCwgMHhiOGI3ZWEyNywgMHgwMDdiNDY2MywKKwkweGQwNGNmYzlmLCAweDI3YjhhMmU5LCAweGZiOWEzY2RhLCAweDc4ZGRjZDkzLCAweGZiODUyM2JhLCAweDdjMDljZjhmLAorCTB4OWJlZDEyNmUsIDB4OTBmMDAzYzMsIDB4MWYxZmUxYWEsIDB4ZTYwMjViYWUsIDB4M2ZiYTc4NGQsIDB4OTNmYmNlNGUsCisJMHg2M2QwN2M4MiwgMHhiZjVlMzZjZCwgMHgyN2EzZTUyZCwgMHg3Y2ZlZDkzZCwgMHhhNmFmN2Y3MCwgMHg3ODgwNTI3YywKKwkweGYxZmZmN2YxLCAweGVlMjNmNDYxLCAweDkxZGI3ODE3LCAweDI3YjBlNDcyLCAweGMxMzlkMDUyLCAweGYwMjE0ZWZmLAorCTB4NTE2M2JkMDcsIDB4NzRhMWZjOGUsIDB4NzYxZjhmZTQsIDB4ZDA0ZjRmZTQsIDB4Nzc0ZWY0ZjcsIDB4M2E3YmRmNjcsCisJMHhmYTBjZWY3ZSwgMHhlYTNkZTE5ZSwgMHhkMDVlZmY5YiwgMHhhZTg4M2YyZCwgMHgxZDc0NDE3OSwgMHg5NDJmOTQxMywKKwkweGZmNDZhZjc5LCAweDVjNWNiZDRhLCAweDA5ZTNmNGZmLCAweDU0ZGYxODcxLCAweDlmYmYzOGU4LCAweGJkOTM0ZjlmLAorCTB4ZmM5NTZmOTksIDB4ZjIzMGU2N2IsIDB4Y2Y5ZjlmYWIsIDB4ZDcyNzllMTIsIDB4Y2U3OWJhMDksIDB4Nzg3YTg5M2QsCisJMHg1MWUxZWExMiwgMHhkNDE0ZmNmZSwgMHg1ZjNmOTQ0MywgMHg3ZTYxZmI4MCwgMHhlYTgxNzU3YiwgMHhlZDkxYWJlZiwKKwkweDdhZmQ5MjJmLCAweGVmZWM4NTYwLCAweDNhNGJjYTMzLCAweGIyMjVjZjMyLCAweGJkMGJmNzc3LCAweGE0YWQzY2MzLAorCTB4ZjAzNWU3ZjcsIDB4ZmU3ZDNmZWYsIDB4MmI1ZmMzZjMsIDB4Nzg0MWI1MGYsIDB4Zjc5NDEwZDksIDB4Nzc1ZmI1MDQsCisJMHgyMmI2ZmIwMywgMHg4MmM3ZmJlOCwgMHhlNTA0ZDdlYSwgMHg2YmU1MDdkNywgMHhjZDE3ZGZiNCwgMHg4YjBlNDg1MiwKKwkweGM5ZmRmMDQ2LCAweGU2MGNiOTYwLCAweGRhNTIyZjhmLCAweGY2ZWQ2M2UzLCAweGZmMjQ4OTVjLCAweDEzNTcyMzRlLAorCTB4ZmFmZTc5YWEsIDB4YTgyOWZmZjMsIDB4YTdjODBjODksIDB4YjIxZTg5YjAsIDB4YzA1YTMwZWYsIDB4YjlkMDQxZmQsCisJMHhjMWY4MTUxZSwgMHhiY2RlODlkMCwgMHhlY2RlOTlkOCwgMHg3OWVmNmMxMywgMHhkN2YwM2ZmZCwgMHhkMjJmZGEyNCwKKwkweDU0ZmIyNWY4LCAweDk1NTFiZTZkLCAweGJiYmQ0NzcwLCAweDVmNjAzMjI4LCAweGUyMjY1OTk1LCAweGZkZjNiYWJhLAorCTB4NjM4OTg4OWIsIDB4MjJmYzAzNTIsIDB4Njc0NGY4NGYsIDB4ZmI2NTNjYzAsIDB4NTc1ZDVmNzEsIDB4ZDRmOGJjNzEsCisJMHg3MTliODlmMCwgMHhkOGI0Njg3ZiwgMHgxNGYxYjRkNywgMHhmNjhhYTVlYywgMHg2ZmM0NTJiYSwgMHg1ZDM5ZTFjNiwKKwkweGViZWUxNzZjLCAweDBmZDAzMGI5LCAweDcwYmQ3NTYyLCAweDUyM2Y4ZDllLCAweGQ1NTBiYmY5LCAweDUzYzAxZjQwLAorCTB4NzlkM2IzMTEsIDB4ZWE3ODk5ZDMsIDB4NDdkNDNiYmUsIDB4MGRmOTJmNDcsIDB4NDdlZmI3N2MsIDB4ZDNiNDEyZWEsCisJMHhkMmM0OTc0NywgMHhhOTQ1YTYzOSwgMHgxN2RjZWZkYywgMHgzNjYxMzVkZCwgMHgxZTIzMWJlNCwgMHhmOGRiN2QyNiwKKwkweGY3NGE1OGM0LCAweGFkOTVjZWFhLCAweDM1M2FlODU2LCAweDVmNjQ2Mjc5LCAweDNjMjY4ZmFjLCAweDRmYzQzNjM5LAorCTB4OWRmYzA2NWMsIDB4MzgyNzZhOTksIDB4NDI2YjM2ZGMsIDB4YWJkYmZhM2QsIDB4MDg1ZmI0MGQsIDB4ZmM0NTdlMmQsCisJMHgzMDY5YTRmMywgMHg5NjhiYjdhZSwgMHhiMGZkYTdmNSwgMHgxYTRmOWZlMiwgMHg4YWIwZjc4NywgMHgzZWQwMzcxZiwKKwkweDRhY2U4YjQ5LCAweGVhZjcyMjcxLCAweDZhMmU3NGIxLCAweDdhOTEwYWQ2LCAweGNkZjRhMmVlLCAweDFhYmFmY2ZmLAorCTB4YmViNTY5ZWYsIDB4MGVmYmQwYTAsIDB4N2JhZDVjNzcsIDB4OWI5ZTEwNjcsIDB4Zjc0ZWU5YWMsIDB4NzU4MGRlMmUsCisJMHgzZWZiOWUwMCwgMHgxN2I3YmViZSwgMHgwODlmMjFjZiwgMHhhNDczYTJhYiwgMHg4YmVlOWVkMCwgMHhiZmIzNWU5NSwKKwkweGRiMGIzMTNiLCAweGQwZTVkNmFiLCAweGEzOTQxNGZlLCAweDk1NmE3Y2ZmLCAweDQxZWYwOWJhLCAweGMyNTk0NTE1LAorCTB4YTlmNmZjZjEsIDB4NzVjNTE4YWYsIDB4YTI2ZTNkNGUsIDB4NDc4ZTIyNzcsIDB4OGZhYzY3YmEsIDB4ZThiOGZiYTMsCisJMHg4YTUzYjNlOSwgMHgzYzAxNGEzZCwgMHg2N2QwZGE0YywgMHg5NjEyNjI2MiwgMHhmYjdkMDQ5YiwgMHgxZTAxMTU0NCwKKwkweGZjZWQ3NDhhLCAweDI0YTRmNjQzLCAweGE1MjdlNzg2LCAweDA1Yjg5OWY2LCAweDk3ZWE3MWU2LCAweGQ4N2NlOWJkLAorCTB4ZTRlNzU0YzEsIDB4MmZkN2MwNTQsIDB4NTI1MzljZDIsIDB4NmU1ZTExZTMsIDB4MGZmY2RlYjcsIDB4ZTNmYzhmZGYsCisJMHhlNDA0ZTI4NSwgMHgzOTUyODdhZiwgMHg1NmQxYmY1ZiwgMHhiZWY4MTA5YywgMHgzZDQ1Yzk3NywgMHg0NjliYzFmMSwKKwkweDI3N2EyMmZiLCAweGMxNGQzYzMwLCAweDQxZjAzNjc1LCAweDY3Y2RjNjJjLCAweGYwMGI3NTg5LCAweDIxOWQ5MmYzLAorCTB4YTllMWFiZmMsIDB4ZjFhYmQxMmEsIDB4NDhkOWYxYTcsIDB4MGY1ZjNmNWYsIDB4MTlmNTE3N2YsIDB4NWYyMDM3YWQsCisJMHgyZDczMjFiMSwgMHhhNjkzYjlkYSwgMHgwZjQ0ZWMyNSwgMHg5MWZlN2VkNiwgMHgzYzIzMGJlZCwgMHg3OTg1YjYxOSwKKwkweDdlMzAzMmMzLCAweGZjODcxY2VhLCAweDdhZWIxMmNkLCAweGM4MDRiNjRkLCAweDc3ZmY2OGExLCAweGZiZTczZjBmLAorCTB4ZWI4ZjY4NzcsIDB4ZmU3YmJmYmUsIDB4OWZiODEyZDcsIDB4NDY5N2RiMjEsIDB4NWNlODNjNTksIDB4ZjQ1OGI2OWMsCisJMHhmYWEzOGY0OCwgMHgzY2YwYTdhNSwgMHgwNjBiYzk1YSwgMHgyZjI1MDNiMiwgMHg4YWQ2M2ZjNCwgMHgwNmY4MDdmYSwKKwkweGYzYzE2YmUzLCAweDgxYWE2M2ZhLCAweDkzM2EzMWM3LCAweGFkMThjZjRiLCAweDEzMzFiMjVjLCAweGM5OWRiZTcxLAorCTB4ZGM4NmNkNjUsIDB4M2IyMzliODksIDB4MmI1MmNiOTcsIDB4NWVlMzRmZDcsIDB4OTY1MWVmZTAsIDB4NzFlOGI1MGUsCisJMHgwYmY0NzM3ZiwgMHg3YmExNmQ2ZiwgMHg4NmMyMGI3NCwgMHhkMjg5YmRlMCwgMHhhZjQ0NGMxNywgMHg2M2M1OGIxNiwKKwkweDEzZWYwZGJkLCAweDkwMzFmNDU4LCAweGVkY2E5YjNlLCAweDlmOTBiZDY5LCAweGNkZTk5NTVjLCAweDdiYTUyODQzLAorCTB4ZjBkZjcyMTIsIDB4OWU2NzkyZWMsIDB4ZTc5N2UzYzUsIDB4NzBkYTc3OTgsIDB4Mjc2NWRmYzAsIDB4YmJjYmQzZTcsCisJMHgwNjNmOGE1NCwgMHgxZjk2MjNlZiwgMHg2MWNjNjlkYywgMHg3ODhmYjEzNywgMHgzMmMzZmQ4MywgMHhkZmRlMjJkNiwKKwkweGYwN2RmZDBkLCAweGE5YWJlMWZlLCAweDA2ODdmYmMxLCAweDJhNWU0ZmJhLCAweDM3NzMwZmY2LCAweGU5NzcwNDI4LAorCTB4M2ZjZjdlMTIsIDB4OGRjNzk2MzcsIDB4ZmEwNTJlNGYsIDB4MWVkZTY5MWIsIDB4MGYzYzEwZWIsIDB4Mjk0ZWVkY2QsCisJMHhmODY2YmM1MywgMHgwYjBkYWVmNSwgMHgxM2Q5OGUyOCwgMHg2ZTcxODRmMSwgMHg4OWUyNmVmMSwgMHhhZTNhNDczMCwKKwkweDA4NWU0YmYzLCAweGZlOTZmYzIzLCAweDdlNWZlZTZhLCAweGZhZjc4NTk5LCAweGQ3MDJlMjBhLCAweDJmOTFmYmQ1LAorCTB4ZGUxOTdlMzgsIDB4OWNmZDk0MWYsIDB4N2E2M2Y2NWUsIDB4NDVmNzMxYTcsIDB4N2NjMzFmNTgsIDB4YWJkODYzNGEsCisJMHhiZDIwNjdmNywgMHg5ZjcxZDI5MiwgMHg1ZDJiYjY1MywgMHhiYzVlYTNmZSwgMHg2MWFmYWMxZCwgMHg0YWI0NWQxZCwKKwkweGVjYzdlZmU1LCAweDA0MWQ5MTM2LCAweDAxNjQ0ZjU5LCAweGFkNjcyY2Y3LCAweDcyMzQ2ODM4LCAweDg3MTJjNjNiLAorCTB4ZWVkYWZmMDksIDB4MWM3NjlmYmYsIDB4NmVlYWYxZWEsIDB4MjY4N2I4YTUsIDB4NTFlZjI3ZjEsIDB4ZmJmOGU5MTUsCisJMHg4NTNhODU3NCwgMHgyNjgxNTdlZSwgMHg5NzQ5N2JhMywgMHg3YjVmYjk1MywgMHg2NzlmOTUzYSwgMHhkMDc3NGEyOCwKKwkweGI1ZjI5Y2ZkLCAweDBjZjJjNzI2LCAweDdkZmI0ZmRlLCAweDk1ZGY1ODRmLCAweDY4NGI5YWViLCAweDI2ZjdmMzNmLAorCTB4YWU1NGFiOGEsIDB4NDU4NjczMDgsIDB4M2IxN2YzZjEsIDB4NmFmOWQwMDYsIDB4NTFmMDExYmQsIDB4ZTJmYWU3NjYsCisJMHhhNTZmOThiMiwgMHg3NDVkZDI3ZCwgMHg4ZWNmNDE5ZiwgMHhkY2JlYTFlOCwgMHg3OTYzZjVjMiwgMHg5MjNkZTAwYywKKwkweDE4NmU4YTMzLCAweGU4Yzc2N2JlLCAweDliZjYyNGRjLCAweDdjNjAyODM0LCAweDNmNDM5NDQ1LCAweGJmN2YyOGY2LAorCTB4ODM1NjNhNGQsIDB4ZGY2YzFiNzEsIDB4MzFlMjEwNzcsIDB4ODQ3NGRhNzYsIDB4ZTQ5NTE1ZWYsIDB4NzZiNDkwMTksCisJMHhhZjdkZmEwNCwgMHhkZWI4OTlhOCwgMHg2ZmI1NWEyZSwgMHhmOWRmZWExYywgMHg4ZGUzMDdkYiwgMHhlYWY0NTYwOSwKKwkweGU2M2Y2NDA3LCAweDg4YjdmYTBiLCAweDkwYzU2NzczLCAweDIyYjY3N2M3LCAweGI5M2NiOGQyLCAweDhhMmYxZTU1LAorCTB4ZWYzNDUzNDgsIDB4ZjJmYWM5MTAsIDB4YmYxZTA2NTUsIDB4OGE4ZjNkMDcsIDB4YzdkOTdjYTUsIDB4YTViOTZmZDQsCisJMHg2ZmY1MDEzOSwgMHgzMGMzNmVmOSwgMHg2OTUxZDNkNCwgMHg5NzhiMmU1YywgMHgwMTFmNjVhNSwgMHg0NDM2MmFiZSwKKwkweDY1ODNiYmQzLCAweGU2MjMwMjllLCAweGNhMTU2YWNiLCAweDRmOGJiZmZiLCAweGJmM2QzZTQ3LCAweGU0MjhiNWUyLAorCTB4YmU2MTEzOWYsIDB4NWE5NzY4OWUsIDB4ZTgzOTg0MTcsIDB4Yzc5NWExZGUsIDB4ZThhZmNlZWIsIDB4NjY5NWY3NDksCisJMHhmODJkOWI1OSwgMHg0NWFjYzE5ZSwgMHhiZmE4NmRkZCwgMHg0NjdkNWE4ZiwgMHg5NzVhM2ZhYywgMHhkM2JjYzNhMSwKKwkweGJjYzZjZDZhLCAweGU1MWI3ZjUzLCAweDJkZjM4YmNmLCAweGE1N2M4M2Y0LCAweDZkOTczYTcwLCAweGJmYzQ2N2RiLAorCTB4Y2M0NDMyNGYsIDB4MWYyYmUyZjcsIDB4NGZmOGMyZjQsIDB4MmY3MzdhNzksIDB4MDdjMDJiYjQsIDB4Y2YxMDUyYmQsCisJMHg5NzY0MjkyZiwgMHhmM2YxYjYyYiwgMHgyYTBmOTJlZSwgMHhlZTQwMGY5MCwgMHhhODNlMDllNiwgMHhmN2RhZjVkOCwKKwkweDkwMmExZTUxLCAweGYyM2E0M2ZlLCAweDdlZjNmMDExLCAweDcxYjFkZjJhLCAweGVmZGZlMzFjLCAweDc2OTEzZTQ3LAorCTB4MGMyYmYyMGMsIDB4ZjFkZjhjMzYsIDB4YTcxYTY2N2MsIDB4ZTE4Zjk0M2YsIDB4ZmMwMTllZTUsIDB4MzlmYjVkMWMsCisJMHg3NDFjOGQwNCwgMHgxYTU3NWY0NiwgMHhjYmM1ODdiNywgMHg1ZDZmYTQ0YywgMHg1YTFlNWM2OSwgMHg0MjhlZWQ1NiwKKwkweDY1N2M1ZGZhLCAweDY3ZGMwMWRmLCAweDU2MDFkZjI5LCAweDFlNDIxZWRhLCAweDcxMmEzZTA0LCAweDNmMDQ1MWZlLAorCTB4Mzg5NTE3ZjksIDB4ZmNmZjI4ZGYsIDB4Yzg1ZWY5ZGIsIDB4ZjNlMzI1NjEsIDB4ZDRhZGYzOTMsIDB4N2FjYmY5OGIsCisJMHhjMTI0ZmRmMSwgMHhlMDRjNjUyZiwgMHgyZTZmNTc2YiwgMHg1MGNlNDI3NywgMHgwZWJkZTk4ZSwgMHg0ZGI3M2YzMSwKKwkweGY3ZTUwZWZiLCAweDIyZGNmY2M1LCAweDI4YmFkNjY1LCAweDE3ZDIwZmM0LCAweDEwM2UwZmY1LCAweDA0ZmE5NDY5LAorCTB4YmVkYzVjOWEsIDB4NGJmMWNlOTEsIDB4NTdmODQ5N2EsIDB4ZGY0MDM4MDksIDB4N2U2YzYzMzksIDB4ZjI3NGI2M2EsCisJMHhlMDk1NjQ0ZSwgMHg3NzhmNjM5YiwgMHhmYzA3YWY0OSwgMHhjZjRhZGY5ZCwgMHhlYWJmMTE2YywgMHg3YzkzYzYwMywKKwkweDdkY2JjNzIzLCAweDM4ZGRkMjc5LCAweDg3ZGZlODZmLCAweDhmNzFjYmZkLCAweGQ4ZjQyMjdhLCAweGU1YzY1MWNmLAorCTB4ZTUyZmMyNDMsIDB4YTFmYWI3MzIsIDB4NjE0NzA3YmIsIDB4ZWU5NjhiYmIsIDB4OWNkZTcwMDMsIDB4YWNkMmFiOGUsCisJMHhmZDEzYmRmNCwgMHg1OWRlZjgwNSwgMHhmYWRjNTBhZiwgMHgxZmU3NTg5OCwgMHhhOGI1ZmM3YiwgMHg3ZTdlMDFlMiwKKwkweDI3N2M0MjdmLCAweDMwN2YwY2Y5LCAweDZkZTEyNjNlLCAweDcwMzhmMWIyLCAweDBmNTJkYzMwLCAweDlmNzNiODQ5LAorCTB4MmM2ZWVmYjgsIDB4YmVlM2YwOTcsIDB4NGE5ZjIwNTEsIDB4OTU3ZTRhM2MsIDB4Zjk4MmY1ZjcsIDB4ZGE0ZTc4OTYsCisJMHhmZTczYjU0ZiwgMHg0NjNkNGNhZSwgMHg5NDNhNzdlNywgMHhmYzI3ZjcwNywgMHg1Y2UyMTNhMiwgMHhlMzNjNmI3OSwKKwkweDg5MTVmZjcxLCAweDhhZjczNWZiLCAweGI0MGM4YjE4LCAweGMwOGVkMjNmLCAweDgwN2QxYWNmLCAweGE3YmY2OWZkLAorCTB4OGIzY2U3MTYsIDB4ZDY5MGJiNzQsIDB4YzczZmZhOGQsIDB4ZDAzOThjZWEsIDB4ZTY5OWQ5NmYsIDB4OWRjZWY4NzEsCisJMHhiOGVmNDNmNCwgMHgzMWEzNTNlYSwgMHg5ZjhiYjU1ZSwgMHg1MmZjOTM3NywgMHhjOTNmNjE3NiwgMHhmZmI4Yjk0MSwKKwkweDgzZWFiNDU0LCAweGVmYzhlMTgyLCAweGJlZDAzNWJmLCAweDYzZTNkMTRlLCAweGNmZGZlODhkLCAweDE4NzMzMmRkLAorCTB4NDFlZjAxYTIsIDB4YmIzZjVlYTAsIDB4YmYyNjY4NzksIDB4OTg0ZDYwNTksIDB4MzYyMWY3ODYsIDB4MDFlZDMzM2YsCisJMHhhZjU1OWYyOCwgMHhkODBkYmJkMiwgMHhkMTZmY2EwZiwgMHg1ZjE0OTlhMywgMHg1MmQ2MTEzZCwgMHhmOGZkMGEzMCwKKwkweGY0NTZhODFmLCAweDMyZGY2ZmUzLCAweDdmNmMzMWY0LCAweDBjNmJhNWJiLCAweDM5YjFiNjNkLCAweDdkNGVmMjk2LAorCTB4ZTkwN2Q5MzQsIDB4ODA3M2NhZjcsIDB4YzdkZWUyZDUsIDB4M2ZkZTg0NWYsIDB4ZTIyYTllZGMsIDB4MmY3NTVmZmMsCisJMHhkZDZmOGZkYywgMHhhY2VmNDYxOCwgMHg3NWVkMWExNCwgMHg0ZjZmMWMzZSwgMHg1NDY3NWExNywgMHgyM2VhZjExYSwKKwkweGJmMjU1YmRkLCAweDk5OTE4ZTZjLCAweGI5NTA4NjkzLCAweDBmY2EwOTM5LCAweDQ1MWY5YTFhLCAweDUxZjA3MjNiLAorCTB4M2Y3YzYwY2IsIDB4ODZkN2E5OTIsIDB4OWE3ZjczMTUsIDB4NmFjNjNiZWYsIDB4NzA5MTJkZGYsIDB4MGZjNjI0N2MsCisJMHhkZjdlNGZlZSwgMHgxYjA4ZWI4NCwgMHhlZmE0NGZkZCwgMHhlZGY4YWVjZiwgMHg2NzgzYjQzNCwgMHhlMWI0ZjZiNywKKwkweDA5ZWY0ZmJjLCAweGE3MDNmYmEzLCAweGNmNzdkYTBkLCAweDU3ZGVmNTZlLCAweDc5Mjk3ZGYwLCAweDlhNzRmNTZmLAorCTB4ZmM5MzhmZDYsIDB4Mzc3YmMzN2UsIDB4ODM5ZWQzN2YsIDB4YTViOWQxYmMsIDB4ZGQxOTRiMGIsIDB4OGQzOTdlZmIsCisJMHgyMjYzZjdkMSwgMHhlNzg5ZGFiZSwgMHg0ZDZhNGIwOCwgMHg3MzA3YmM1NiwgMHhmNzFlZjkxMiwgMHhmY2FiNzZiMywKKwkweGNiOTlhNWZlLCAweDk5ZGRjOWMxLCAweGU0YjdiZjc0LCAweDUyNWYzYzZmLCAweDNlZjE3OGE3LCAweDlmYTdmZWYyLAorCTB4YjMwYWYzYTAsIDB4YWJjNGNmYzEsIDB4ZjNmZWVkMDksIDB4YTFhN2E3YmEsIDB4Yjg3NjVjMzgsIDB4ZmU3ZGUyNTcsCisJMHhmOWY5NWJjYiwgMHgzMmVmMGU4YSwgMHgyMDc5ZGMxYywgMHhkZmI5ZGVjOSwgMHhjYmZiNWRmYywgMHg5ZjExMGUzMiwKKwkweDJmY2ZiZGFlLCAweDRmZDcyY2YxLCAweDhjM2YwMjZmLCAweGRiYzdlMjE4LCAweDkwZTc0YjY3LCAweGE5NjE3Y2JmLAorCTB4Y2E0YmQyOWIsIDB4MjNiN2I1YjEsIDB4ZTlhMjViMWYsIDB4ZWIxZmMwYmUsIDB4YmRmMTUxOWYsIDB4ODM1ZGYyYTgsCisJMHg3ODNhZTFhZiwgMHhiZDM0NjQ1NCwgMHhkMmQ5ZjI5MywgMHg3YThmYjQyNSwgMHhhNTE1Njk2MSwgMHgwZTMyZGU5MiwKKwkweDQ2YWVjNzc3LCAweGZhYjNlZWZhLCAweDlmYmMwNmNjLCAweGI0NjQ0NmZiLCAweDkwYjYwM2IwLCAweGRlZWNlZDc0LAorCTB4YjlkNzljYjEsIDB4NGFmYTcwMWYsIDB4OWQ2ZGNmYjgsIDB4NmFmMzg1MTksIDB4NjFiNjNlN2MsIDB4MjIzNWQyMjQsCisJMHg1ZjdlOGFkYSwgMHg3MjQ3MzhhOSwgMHhhYmY3M2Q2YSwgMHg3ZmEzOThjZiwgMHgzZGY0MGY5MywgMHgwMjRhNjFiMywKKwkweGJiMzczN2JlLCAweDU4NjlkZWYxLCAweGIxNDdiMjVlLCAweGIxYzA3YWUyLCAweGFlMTQ1MjY3LCAweGI3ZDUzZWRiLAorCTB4YThmZGUxNDQsIDB4N2JjYmQ3NGYsIDB4M2JmYTVlNTUsIDB4ZDhmMmEzNTQsIDB4Y2EzZjZjMTQsIDB4MGNmNjY3YTcsCisJMHg3YzhkNzViZSwgMHg5ZTgyZjIzMiwgMHg4NzllYmZlZSwgMHg1YzkzOGE3MiwgMHgwOTM4YTcwYiwgMHhiOWUyYzRmYywKKwkweGYzYWZkOTkxLCAweDNhZmI0YWY4LCAweDZlZjNhYzU3LCAweDM0N2VmMzE3LCAweDMxZjcyNmRkLCAweDA0NzczY2E4LAorCTB4NjFiZDNmMmYsIDB4ZWZlYzQ0ZTcsIDB4MTU4MzY2ZWMsIDB4YjM2Y2ZlZTEsIDB4MDc5ZmZhODEsIDB4YzAxZDMzZWIsCisJMHg1ZjJiNjY3YiwgMHhkNzFlNjBmNywgMHhmMmI3NjdjYiwgMHgzYWJjY2RmNSwgMHg1ZjI5YmViZSwgMHhmYmYyNzA2MCwKKwkweGNjN2U1YWEyLCAweGVmNDc2ODBkLCAweDVlZjI3NGZiLCAweDlmMjczY2M4LCAweDk3YjAzY2RmLCAweGJlNjBkZjM4LAorCTB4NzQ3NTYxOGQsIDB4OWU5YmVjOGYsIDB4ZGJlNjBkMTcsIDB4ODU1ZjkyZjksIDB4ZDdlNzY4N2UsIDB4ZTA0NGY4Y2UsCisJMHhmOTFkZTUxMywgMHhiY2MzZjI1NSwgMHhkZWRmN2NmNSwgMHgwNzM4Mzc1NiwgMHg0N2YyNGVmOSwgMHhkNTU5M2JmMCwKKwkweDU3ZGZjNjQ2LCAweDdiZDM4NWQ0LCAweGVkMjI5M2I4LCAweDUzMGZiNDA2LCAweDIwYzY1YWUyLCAweGU3NGUzZTVhLAorCTB4YWI5YTgwN2UsIDB4MzdiZGUyNzMsIDB4ZjkwYTZkNTYsIDB4NzQ4YWNlY2UsIDB4NzQ0NTU3ZWUsIDB4ZGVlZmM0NjUsCisJMHhjZjNmMmI3NCwgMHhjOTdmZWUyOSwgMHg4NjkyMjYxNCwgMHg4NDUyN2I3NiwgMHgzNDNiMGJlZCwgMHhhZWZkM2E3OSwKKwkweGNmYzBmNDdiLCAweDNkYjc2ZTkzLCAweGQ4YzFkZGRhLCAweGVlMGJkMzJmLCAweDI2N2NjM2QxLCAweDc3NzZkYTY1LAorCTB4YmZmM2ZjODMsIDB4YjdmM2MwOWEsIDB4MjAxYTg2ZDksIDB4Nzg5OTRjYmYsIDB4ZDdjODE4Y2YsIDB4NGE5ZjNiYTcsCisJMHhlY2U3MTgwZiwgMHgzODY5MmU5NiwgMHgxOWZmMjgzZiwgMHhiYmM1ZDc5NiwgMHhhNTY5OGU3ZiwgMHg0OTc2MGZiOCwKKwkweDI0YjQxZDY5LCAweGZkZmVkZmMzLCAweDdmYTM5NjNkLCAweDJkZjNmYmI0LCAweDE4ZWU5NjA2LCAweDdmMDk3OTgwLAorCTB4ZGQyNWI0ZTgsIDB4ZjhmNGFiZjksIDB4OGNjNWU1OGUsIDB4ZjVlNzRlM2QsIDB4MGUxZWZjM2MsIDB4MDljY2I4ZmMsCisJMHhmMzhhNGY3OCwgMHg5N2JjYjE1YiwgMHgyZjc0MTM1MywgMHg5ZmVmYzFjNywgMHhmMjUyZmJjOSwgMHhmZjVmNTQzZSwKKwkweGI3MGRiMjdkLCAweDkyZWM5ZjcyLCAweDJhMWRmZjgxLCAweDBmYmRhOWM1LCAweDg5ZmMzNGE2LCAweGY2YTlmOWRlLAorCTB4YTIzMDk2YjAsIDB4NGQ5ZWY2ODMsIDB4Nzc1M2JlMzksIDB4YTIwYmRkMWIsIDB4NmY0Yzg3ZmIsIDB4NTczMzdkMjcsCisJMHhhYzY4M2JmYSwgMHgyOWRmZjk4NywgMHhmY2ZjODk2MCwgMHgxZjgyYTNjMSwgMHgzZDY1MmY0ZiwgMHg5ZmU4ODA3YSwKKwkweGNhMzliNzdmLCAweDk4NWM3MDBlLCAweGZhODVlYmU4LCAweGZkZGMzMjIwLCAweGU5ZDdjNDI3LCAweDBiYTlkNTBkLAorCTB4YWExZWYwZTMsIDB4ZWQwZjkxYzksIDB4N2RmOTc4Y2YsIDB4YjdlMTMyY2UsIDB4NDJmMWNkYjIsIDB4M2JiZWE4MmYsCisJMHg0NjUzNWRhMSwgMHg4NzY4NGRkZiwgMHg3NTdjMTdkZSwgMHhmZTk3YzMyMSwgMHgxOTJiZDQyMywgMHhlZDA0OWQ3YywKKwkweGRlNWQzY2U4LCAweGIxZTJiYmYyLCAweDRmZWQ4NWRkLCAweDcwMGQ5OGY0LCAweGJjMDYwMDliLCAweGZhMWUzNWE3LAorCTB4ZjdhMzYxMWMsIDB4ZmI0YTk4YWEsIDB4N2VmZTVlY2YsIDB4YTI3OTllOTIsIDB4ZDVlZWY4NmMsIDB4M2VlMmU5MzMsCisJMHg5NDEzZGQxMSwgMHhlZmY4OTI3NCwgMHgxYTE4MTc0MCwgMHg5OTlkNTlmZCwgMHhiZWVlMTAxOSwgMHhmZGZkMDM2YywKKwkweGY5MWY0OTJmLCAweGRkYzJlMmNlLCAweDc3NDJmZTNjLCAweGUzMWU0NTI0LCAweGUyY2RhNzQ4LCAweGIwNzU5ZmVmLAorCTB4YmY5MTZmOGIsIDB4ZDFlOTYyMGEsIDB4MzMwZDlmZTgsIDB4MTFjOWRiNDMsIDB4ZjVkODhkMWIsIDB4ZmYyZjZkNzcsCisJMHg5MmZjMmU5ZCwgMHhlMDcwNmNjMSwgMHhhMmE1OTIzYiwgMHhkMGI1NThjZCwgMHgyZDViZWY4ZSwgMHg3YmQzMzc4YywKKwkweGU4NWYwYjI1LCAweDk2YzFmYzRlLCAweGI2MDU5MGZjLCAweDg5NjIxYjYzLCAweGE4NjY1NjVmLCAweGY1YjlmZjg0LAorCTB4MmExZGRlOGMsIDB4ZjNhNjRmYTgsIDB4MzZmNWY5OTQsIDB4MTJkYWEzNGEsIDB4NmZlY2ZjYTksIDB4N2FlMmM5ZGUsCisJMHhlMGE3ZDM4OSwgMHhhNjhjYmE3ZiwgMHhkM2ZmNGI3MywgMHhkOWQ2NTI5YiwgMHg2NjkxYTc3YiwgMHhmMGJiY2ZiYSwKKwkweDBiNmJiNzIwLCAweGM3YmZjYWE3LCAweGJiYWZlZmMyLCAweGM4YWUzODA0LCAweGI5MGI4YTFhLCAweGU3NTNkYzNhLAorCTB4ZjBiYTU3ZWYsIDB4ZTc3ZTAwYmUsIDB4Njc3ZDUwMzQsIDB4ZmM0YTU3ZWYsIDB4ODJkZDA0OWEsIDB4N2E5Y2IzZGYsCisJMHhkZTkxMzMzMCwgMHg1OWVmMTQ3ZiwgMHg5YWVkMTc0ZSwgMHhjZWIzYmRjNSwgMHg0ZmJjYjVkZSwgMHg2YTIyN2JiNCwKKwkweGRkZjIxMzVjLCAweGM4Njk2Nzc0LCAweDllZjUyZDc3LCAweGNmZmEwNzMwLCAweDdhNDhkNDg2LCAweDM3M2VlMTQ3LAorCTB4ZjU5YTk3ZjgsIDB4ZjExZThiNGMsIDB4YmY5YjJkMzAsIDB4YmE3NTM5NzMsIDB4ZmQ5MGRlYjYsIDB4NDM3M2U5MzksCisJMHg5Mjc3ODc3NiwgMHg0ZDhmYTgwYywgMHhlY2ZiNmQyZSwgMHhmNTBlYzJhZSwgMHhmNmJmN2Q2NSwgMHgyMzU0ZDE1ZCwKKwkweGJlM2Q0ZmQ5LCAweDY5ZjkwYjNiLCAweGY0NTE1ZGUyLCAweGJmZmZkMTBmLCAweGZmMTBiNGVjLCAweGI4M2JjNDliLAorCTB4MTEyYjJjY2QsIDB4YmVhZGMyZjUsIDB4ZGJmZmZiMjcsIDB4ZWZjMWIxZmIsIDB4MDNiZjA2YzQsIDB4NDJlYjdmZGIsCisJMHhkZDYwN2U0ZCwgMHg2ZmVkMzUwZiwgMHhhOWFlNWZhYiwgMHhhZDViZWMxZiwgMHhmYTZjY2ZhOSwgMHhiNDNmMjY5OSwKKwkweGZiNGQzOWY5LCAweDY5MzY0N2UxLCAweGJjYjY0N2VhLCAweGZkYmZhOWE0LCAweGZlNGQwZWNjLCAweDY4M2ZkNjhlLAorCTB4YjZkOWRmZGEsIDB4NjFjZjkzNTcsIDB4ZTdkYTY4ZWYsIDB4ZTRkMDNmOWEsIDB4NTdmZjVhYzcsIDB4YzRhZWZlZDMsCisJMHhmMWZhOWExMywgMHhmYTlhZjNmNiwgMHg2OGFlN2QwOSwgMHgyZjhlMDVmMiwgMHgzNzNmZWQzNSwgMHg0NTc3NTdiYSwKKwkweDBjZWEyMmJmLCAweDQzM2FhZGYxLCAweGY5NDRmODYxLCAweDY2MjlhNmU1LCAweGJhNmIwN2Q0LCAweGY4MjQ3ZDBhLAorCTB4ZDNiMGI5NmYsIDB4N2JhMzA3YWMsIDB4NmNkNTYzYWMsIDB4M2Q1ZmYxMWYsIDB4YzFhMGJiZmYsIDB4ZGU3ZjRmNzYsCisJMHgxZmY4YzRlNSwgMHg2YmRmOGQ3YiwgMHg1MjdmMDY4YiwgMHg4YzdlMzAxZiwgMHhmZjAyY2NkMywgMHg5ZTZjNWRlZSwKKwkweDc3OGY5MzU1LCAweDc3ZGE2YTI1LCAweGQ0ZDc2ZTk5LCAweDY4ZmJiOTI3LCAweDM4ZTY1M2VhLCAweGFhYjRmOTM0LAorCTB4NWRmNjlhMTEsIDB4ZjkzNTM4OTcsIDB4YTY5ZTRmMGMsIDB4OTcxYWY3N2QsIDB4NzZiM2RmMjYsIDB4ZWY3ZGE2YmEsCisJMHg3ZDRkNmVmNSwgMHg0ZDFjZWY1ZiwgMHg1NWFkZmY3ZCwgMHhiYWMwZmM5YSwgMHhiN2Y2OWEyNSwgMHhmNTM0N2JkNSwKKwkweDlhMzU3ZDgzLCAweDVhYTZjY2ZhLCAweGYzNjg3ZTRkLCAweGUxZmI0ZDdhLCAweGZhOWFiYzQ3LCAweDM1NWIyZDkxLAorCTB4YTk5ZmI3ZjUsIDB4NjhlZmU0ZDMsIDB4YmZiNGQ3YWQsIDB4YzlhN2NkYjMsIDB4OWE4M2IwZTcsIDB4ZjdlNmI5ZjYsCisJMHhkNmIxZjkzNSwgMHhlZmVkMzQ0ZiwgMHhhOWE2M2M0YSwgMHhhYjNmNmYxZiwgMHhjZTdlOTdhOSwgMHg2YjlmM2U4NCwKKwkweDUzZGY4NWNiLCAweGU2OTdmOGUwLCAweDZlZjdmNmZiLCAweDFmNzQyODc3LCAweDZlZDc1Y2VhLCAweDk2YzU3ZGYyLAorCTB4MjRmZDE1MzAsIDB4NmM5OWM1MTcsIDB4ZjUxMTEwNzgsIDB4YjcyN2RlMTUsIDB4ODUzOWYzZjEsIDB4MjM4YWFmMTQsCisJMHg5NDRjODg3ZiwgMHg4MTBiY2YxZCwgMHhhYjg1MTBkZiwgMHhmNDBjOGNiNiwgMHhmZWZjMjNhYiwgMHhjY2Y1ZWE1YiwKKwkweGRhZGZmNzliLCAweGQ1ZGNmZjg0LCAweGYyODhiZWVlLCAweGZiNmVhZjMxLCAweDk4OWY3YTM4LCAweDFjMjI1Njc5LAorCTB4NzdiZmZkZjIsIDB4OTU2ZGRlODMsIDB4MTlmMzc4ZTksIDB4MTdmMDBmYTYsIDB4YTZkNTg2MGYsIDB4Mzg5YWY5MGUsCisJMHgwNWYzNzhjMSwgMHhiNmMxZWY4NiwgMHgyMmUyMmJmNywgMHgxN2JkYzdmOCwgMHgxNmJmZjQwNiwgMHhmN2Y4MTdkNiwKKwkweDlhOTc2YjIzLCAweGZmYzc2ZmU5LCAweGYyOTVhOTZjLCAweDUyMjY5NmViLCAweDNhMDBmZmZlLCAweDAwNDdiZjI5LAorCTB4MDAwMDQ3YmYsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDU1NDc4MGIsIDB4ZWVkZDcwOTYsCisJMHg5ZDI0OGZkYiwgMHg3Nzc1NzlkMCwgMHg0OTNjZGM5ZSwgMHhmMDlkMDg0OCwgMHgzYTNlMDBkOCwgMHhjMDQwNjAyMSwKKwkweDQ5MDQzNWU2LCAweDQxYThjMWE0LCAweGY4ODFiYTQzLCAweGJiNzU3NDRmLCAweGIyMDIxMDMxLCAweDEwZDE5MWIzLAorCTB4MDE4NmMxOTUsIDB4MDk5ZDE5NjQsIDB4MDlkMWEzMmUsIDB4ZTA5YWYwOWEsIDB4MWM2MDRjM2EsIDB4MzcxOWQ5YzUsCisJMHg4ZWUyYTNhMCwgMHhjZmUzMWUxMCwgMHg3ZmMzOGZlZSwgMHg5MzdiYTljZSwgMHgzODBlOWRiZSwgMHhmN2ZmM2FmZSwKKwkweGI0ZmJmYTNmLCAweGFiNzU1NTM4LCAweDczOWQ1NTRlLCAweDJhYWEzY2VhLCAweDg5ODk1ZWFkLCAweGRlNmQ2MzIyLAorCTB4ZjM5ZjRhMWMsIDB4Yzk5ODk5ZGEsIDB4MzE2ZjM2ZDgsIDB4MGViZGRiYzEsIDB4NzJkZWZkODIsIDB4OWQ3YTc3NGEsCisJMHg1YmNiYmY5NCwgMHhhZjFlZjA0MSwgMHhkZWJkZDI4YiwgMHg3OWY3NGExYSwgMHg5MmZlNTQzZCwgMHg5ZmUwODFiNywKKwkweGI2OTQ3ZDdhLCAweGZmMjk5YjdiLCAweGMxMGI2ZjE1LCAweDA0NmRiYzA3LCAweDUzZjVlYWJmLCAweDRiZGRlMWRhLAorCTB4NzZkZTFiZTksIDB4NzZmNGVmMmEsIDB4YjdhNmZjMTAsIDB4NmYyZWUwOGIsIDB4YmM4N2MxMGYsIDB4ZjExZjA0YmQsCisJMHg5OGY4MjY5ZSwgMHgxZWQyOGZiNywgMHhiZTk0NjdlZiwgMHhmMmE3ZWRlZCwgMHgwOTU3YmM3NywgMHhkYmJmOGViZSwKKwkweGNkMmFmYzE5LCAweDI2MzFlNDlmLCAweDdhZTY5NzMwLCAweGM5Y2NjMjFlLCAweDAwZjYzMjI2LCAweGZmODI0YmZlLAorCTB4Y2M4ODQ2ZTIsIDB4OGNmZGQ4YzIsIDB4YjBkNzNlZmYsIDB4OTQxMzc2OWEsIDB4M2ZmMmZlNzcsIDB4NzRjNjAyODUsCisJMHgxZjhkOGNhNSwgMHhmNjYyNjkwZiwgMHhjNjM0YzZjZSwgMHhlNjc1YjAyNiwgMHhkMzE4NzI0ZiwgMHg2M2Q3NTc0MCwKKwkweDRlMDlmYjA3LCAweGQ2MTkxMzE5LCAweDJkNzVkZmMzLCAweDU4YzdkZmZlLCAweDk0YmZmYzNjLCAweDgzNGM3OGU1LAorCTB4MTQwOTUzNjksIDB4NTViZWZiNDIsIDB4MWE3NzdmODIsIDB4M2UyMGQ3NTUsIDB4YmYxYzhkYWIsIDB4OTUxMzVhNjksCisJMHhmODJjM2U1NywgMHg1NTYzMDIwZCwgMHg4YmU5ZjMyMiwgMHg1ODdkZmIxOCwgMHhjMTFiMDE1NCwgMHgyZThmMjVkOCwKKwkweDIxNzJjNDQ3LCAweDA0ODMwZWRjLCAweDQ0M2E4ZmY4LCAweDJjNWQ3ZTBlLCAweDlkYTViMThlLCAweGQyOWIxZDg2LAorCTB4ODRhYWYxMDYsIDB4ZmRmMDM1ZWYsIDB4MGMxYTU2MmIsIDB4M2EzZDY0YWIsIDB4MWRmMjAzYzQsIDB4OWVjNjE4ZGEsCisJMHg0YmE2YjhiNywgMHg4YTYwZmY5MCwgMHhmNjg3YTdjNiwgMHhlZDlmYzk5OSwgMHgyZGVjNjQ4YywgMHhlNjA2NmI4YiwKKwkweDc3ZGNmMjVmLCAweGMwN2YxYjBjLCAweDdlYzZjZjZjLCAweGUyYmExYjY2LCAweGZkZmY0MTE3LCAweDlkZjZiNWM3LAorCTB4ZTFmM2YwZDIsIDB4NmM2NzI5NmUsIDB4ZGZjYTBkZGMsIDB4MDJlYzk3M2MsIDB4YTJmZmNhM2MsIDB4OWZmY2UxNzUsCisJMHhmODU2NDVkMCwgMHg0OTJmMDFmMywgMHgxYTRhNzhlMCwgMHhlYWRiM2E1NSwgMHg3Y2Y4ODI1YSwgMHg0N2I5ZTkxOSwKKwkweGU1Zjg1MzAzLCAweGFjZjZhYjZkLCAweGFlNTUyMTgxLCAweDgyZTExYWNhLCAweDI1ODJlZWVmLCAweGNkOGMxOTYzLAorCTB4NDE4ZTkyNjUsIDB4MzhlNjdjZjksIDB4MmQ0ZDA2OWEsIDB4MTc4MjJlNjQsIDB4NmZhNTFmMzEsIDB4YjFhYWJiYzUsCisJMHg0ZmNjYzU5ZCwgMHgyMWIyNmJiMCwgMHg4MmI4ZDQzNSwgMHg3OGNiNzJmMSwgMHg5NDdjNjViOSwgMHhhYmFiNzFmNCwKKwkweDIwZTVlMzhlLCAweGJhNGM0ZWJjLCAweGE1YzcxYjIzLCAweDU1OTZmNWUwLCAweDU4NzM3YWEyLCAweGVmYzQ3NmZmLAorCTB4M2YxNzgzY2IsIDB4ZDI4NjMyMTEsIDB4MTc0MDc3YzcsIDB4ZWIxZTY4MjYsIDB4NzNhYzNkMzEsIDB4ZjdkMThlYTMsCisJMHg3ZTA4OGY4ZCwgMHgyZTg1NmJhNCwgMHhiNzkxOTkyYSwgMHgwYmU0MThmYiwgMHhmNDAyNzQ4MSwgMHhkMmZjODQ1MSwKKwkweDkyMzczYTlmLCAweDA5NDllNGU4LCAweDkyNzA3YzFhLCAweDBiMWZhN2Q2LCAweGIzZjhkNGUzLCAweDg3ZDEyZDA1LAorCTB4MWVmYzAwNWUsIDB4NDhmYTAzODgsIDB4ZWEwZTllMWYsIDB4ZTAwZDIxOWEsIDB4NjdhZmEwMWYsIDB4YWZmM2JkYjAsCisJMHhjZTBlNWRmZiwgMHg0OWNkZmI5NywgMHhhMzU3Y2UxMiwgMHhlODAxZDYwNiwgMHhkNmI2ZjdkOCwgMHg5OTkyNWJiZSwKKwkweDk0ZWQ2MDE0LCAweDZiYTQ3ZTMxLCAweDczZWRkYTI2LCAweGIxN2FlMGM3LCAweGRmYTg0ZWE1LCAweGZiMGQ2NWFkLAorCTB4ZmJmNjg3ZjMsIDB4YjQxN2FlMmEsIDB4MmJhNmMyN2YsIDB4OWNiYjUzZjcsIDB4OWZmMjk1Y2YsIDB4NjNjNWZhZTIsCisJMHg1ZWFkZWJjYSwgMHgxNmFkNjlmNSwgMHhlODcxM2ZmMCwgMHgxMzFhNWU5YywgMHg2ZjBkMWM2MiwgMHhlMDA2NjZlNywKKwkweDMzMzhlZWVmLCAweGU0NDI2MWRkLCAweDQ1ZTdmMmZhLCAweDk0OWZlNjBlLCAweDFmYTE0NGU5LCAweGI1ZDIzZWFkLAorCTB4MTc4ODE0YzMsIDB4ZjllODE3ZWYsIDB4ZDEzNzQ0ZTcsIDB4NDQxOWNmNDAsIDB4ZTBmODlmY2YsIDB4NjkwNjM5ZDMsCisJMHhmYjQ4MjJjNCwgMHgyMGJhNmE2MCwgMHhkNjYwYmQ3NSwgMHg2NzJjZGQyMywgMHg5OWFiNGE3NiwgMHg2MDA3ZDI5MywKKwkweDlkN2U5MWY5LCAweDM4ZjRhN2JlLCAweDc2YjIwZmVmLCAweGJlMmJhZmNhLCAweDdjZjQ4MmQ3LCAweDhhOTVjNmJmLAorCTB4YTVlYjJkNzAsIDB4MmZlYjM3N2MsIDB4MmRmY2MxYjMsIDB4ZDQ3YjVlNmMsIDB4NmZjZjU4MDYsIDB4MDI1YTZhNzksCisJMHhmZjNjZWZjYywgMHhjZTk4YTNiMiwgMHhlMjdjMjVkZCwgMHg3YTNmODg5MywgMHhjMTNlYWYxMCwgMHhmYTExM2ViMywKKwkweDkyYTVmYmJmLCAweDNmOTA0OWY1LCAweDg1ZDdjYjQ3LCAweDE3NWYyYmZkLCAweDhmMDQ3ZTQ1LCAweDk3YTFmODFiLAorCTB4ZTM0MWNiOGYsIDB4YWI5NTQ2ZDIsIDB4MDlmMmExZjgsIDB4OWRhMDEwZTYsIDB4ZmYwNjgzZmUsIDB4ZmUwMGI0Y2UsCisJMHhkZmU4N2UyOCwgMHg4OThlNTA5MywgMHg3YWUwZjdmZCwgMHhjNDM0ZGZiYiwgMHgwODNmN2FlMCwgMHgyOWM3MWJlMiwKKwkweDgwNmIxODM4LCAweDJhZDY5MGZlLCAweDg4MmE4ODYzLCAweGUxNjIxZmRlLCAweGI5ZjdhYzc2LCAweGE3OWZkZjRjLAorCTB4Y2ZlZmEyMzAsIDB4NDA2MGU2MDUsIDB4YTY3NDE3YmYsIDB4NWFlNTAxNjYsIDB4MDQ1NmNiYWEsIDB4YmU2MGFjZjgsCisJMHg2ZWU1MDYyNiwgMHgzODA1NGJjZCwgMHhkNzI1MjM0ZiwgMHgxZmQ3NDRhNywgMHhhNjE1MzdiNSwgMHhhN2Y3ZmNhMSwKKwkweGY3ZmYyODBhLCAweDY5OGRlYzE5LCAweDVkODRmZGFhLCAweGUzMjE0MDhmLCAweDNmOWYzODYxLCAweDBlYzc3NmMwLAorCTB4M2UyODRiYzUsIDB4MTQ0MjlmZjYsIDB4ZjMzZDA2NjMsIDB4YmY4ODhiMTksIDB4ZWJlNDQ0ZDksIDB4NTdmMTNkNDQsCisJMHgwNjZkNGUyMywgMHgzYzk0ZTNmNiwgMHg5ZmVkYTFhNiwgMHhmOWVkZjE5MCwgMHhlZjc0NGI0YSwgMHgxNmVjZjE4MywKKwkweGY3YzNmNTQyLCAweDYwZjg0MzJiLCAweDJjM2YyNDNmLCAweGE3ZDFmYThjLCAweGZhNTYzZTcxLCAweDY0YmVhNjYzLAorCTB4NmE3NWQwMjcsIDB4ODY5NzRiODQsIDB4YzcxNmMxODIsIDB4Y2I5OThiZTUsIDB4NGZiNDllOTcsIDB4ZTY3ZDcxMzMsCisJMHhjOGE4ZGU0YywgMHhkZDhmNmE2NSwgMHgwOWQxZTVjNiwgMHhmODQzZTQ5ZCwgMHgxZDlhNDk0NCwgMHg5YzgwZDcyNCwKKwkweDk3ZjhhYmJkLCAweGJiOGYxMWE3LCAweDJkMmVhNjhjLCAweGRkMTZlY2E0LCAweDdkOTRmYTlmLCAweGZmNzA3ZDMwLAorCTB4N2ZkOTRiYmQsIDB4ZWZmYmUxNmYsIDB4ZWZiNTk5MWMsIDB4ZjFiYWJiMTIsIDB4M2FlY2M2N2IsIDB4ZmQ5NzJmYzQsCisJMHg2ZDhmOTk1ZSwgMHhmMjJhZGZiOCwgMHgwYjdlYzg3MSwgMHhmOWM1ZWIwMywgMHg4MzJiMjUxMywgMHhjN2MwYjU3NCwKKwkweGRjMjUzYWJmLCAweDM2YzQ3YzhmLCAweGY0ZjhkMmU3LCAweGZlMGNmY2IyLCAweDU4YzE1YWRlLCAweDEzYzY1MWE2LAorCTB4MTk3MDRiZmUsIDB4MjBjZTY2NTksIDB4NTY2MzU0OWMsIDB4OWIxZTI5YzEsIDB4MDZjOGZlYWEsIDB4ZTY5ZTU1NDksCisJMHg2Nzk1NTFjYiwgMHg3MDU1ZGIzNCwgMHhhYWIxNGI1NiwgMHg4NzM2YThmZSwgMHg5N2Y1Y2UwYSwgMHhlZGU3ZWFhYiwKKwkweDMxZTBhYTc1LCAweGZhYWExNWVkLCAweGFhNWMzYjYzLCAweDFhYWVjMmYyLCAweDFlYjhmOTU1LCAweGQwOWUwYThmLAorCTB4ZmZhYWEwZGIsIDB4YWE3ZGE3NzcsIDB4Y2Q3ZDQ5ZjIsIDB4OWYyOWYyYWEsIDB4NWJlMGE4YjUsIDB4ZjU1NGRiZmIsCisJMHg1N2VhYmY2ZiwgMHg3ZmIwOTc5NSwgMHgzNTRmOTU1NiwgMHhkM2MxNTdlZSwgMHhlYWFiYWZjYywgMHgxNmZiODBiZiwKKwkweGI2MWRjZmYwLCAweDBjZmU1NTZlLCAweGJiZWFiOGU5LCAweGFhNGU3MzNiLCAweDc1ZTQxN2UwLCAweDI3MGUyZGY2LAorCTB4ZTcyZDY4YmUsIDB4ZmI2Y2QxZmIsIDB4NTg3NmFhMDcsIDB4ZmViZTY4ZTcsIDB4N2I2ZjNjNjEsIDB4NTEwYjFmY2YsCisJMHhmNGQ3NmU0ZSwgMHg0YWRkMjFhNywgMHhmMjIyNzM1YSwgMHhkY2YxNjY3MSwgMHgyYzY2NDA0MywgMHgxNGFhYjFkYiwKKwkweGY5NGU1YmM1LCAweDFkMzA4NzUzLCAweDhhNWZkY2VkLCAweDcxNWY5MjZjLCAweDA1YTYxMGYyLCAweGQwYTU4YmFlLAorCTB4NDRkN2IzMWMsIDB4YzhiNGM2MWYsIDB4OGFkNTM4NTMsIDB4M2RjYzM0YTgsIDB4ZGY0NGU5OGMsIDB4NTcyOGE5YWEsCisJMHgzZjVjNzg1ZiwgMHgyYTI4ZjkxYSwgMHgwNzRmYTE0NiwgMHg4MjdkNjdkMSwgMHg3ZWI5Zjg4NiwgMHhmMjhmYzliMSwKKwkweDI0YzUzMmM3LCAweDk2MTM5MDMyLCAweGIxZDY1YTFmLCAweDlhOGI0YzAyLCAweDFhZjY2ZDMxLCAweGZhMGY1Zjk5LAorCTB4YmE1MTk3ODAsIDB4ZmU2NjZiYzksIDB4YWY2NzIwNmMsIDB4OTNmYWUwOGQsIDB4NDNhNzk1ZjcsIDB4NDRhYjIzM2IsCisJMHhlNjk5YWEzMywgMHg0ODI1OGY1MSwgMHhlNWY1YmVkMCwgMHg3NjVkOWM5NiwgMHhiMGVkZDZjNiwgMHg0MmU1ZDdjZiwKKwkweGM1OWUxOWZmLCAweDRlMDFhMjNiLCAweDMwMDU4ZTYzLCAweDIzOTgxNjdmLCAweDI1YjE5OTM2LCAweGZhNzZkZjNiLAorCTB4OTdjMjg3ZjIsIDB4MjQ0ZDlkMzMsIDB4NWNmNmM0MTcsIDB4NzY5NGZmZDQsIDB4NmU3ZTk2MzcsIDB4ZGYyMTk4ZDcsCisJMHgxMWU3NGJmNywgMHhmMWFkZjc5OCwgMHhjMjFkZjRlMSwgMHhhNzVmOTkyNSwgMHhiNjBiNDc1ZCwgMHhmNjllZjkwYiwKKwkweDRjZmM3YzEwLCAweDk3N2ZkZjFhLCAweDBhN2Q3M2E0LCAweDY2ZWI4NDg3LCAweGFjYzZjYmU1LCAweDgwOGNhN2EwLAorCTB4YTkzYWRjYjksIDB4ZjBlYTBjZTEsIDB4YTAyN2Q5YTIsIDB4ZTBkNzYyN2MsIDB4ODkyYjkwN2IsIDB4ZTA4MzI5NTgsCisJMHg0ZTAxYzNkYiwgMHg2YzYyNTg0MCwgMHhjN2ViOTY3ZiwgMHhjNWQ1YWZkOCwgMHhmYTAwZDlkOCwgMHhjMzUxYTg0OSwKKwkweGNmOWU2MTViLCAweGEzZTIwZTY2LCAweDg5ZjFhYTViLCAweDhmZGQwNjMwLCAweGY0M2I3NjlkLCAweGM2MGFhZGIzLAorCTB4M2Q1NmYwMGIsIDB4N2E5NDM3ZDcsIDB4ZjY4YzM0YTMsIDB4ZjhkMzJmZjcsIDB4Y2RhZWNlN2UsIDB4ZjQ5ZWEzYjcsCisJMHhlNzllM2NhNSwgMHgzZThiZmRiYywgMHhlYjdiNDRjZSwgMHgzNTg5YTUyYSwgMHhmMjA1YzExZSwgMHhiNGU5NWFjZCwKKwkweGFlOWVhMGZiLCAweDg0MjNlNjExLCAweDM0OGJmMmRlLCAweDFkZDdiZTkxLCAweGEwOTA0NDdlLCAweDEyNjlhN2RlLAorCTB4N2U5NTg5YzEsIDB4MGQ1Mjc3MWEsIDB4YmY4MDFiYjQsIDB4NjYwOWY0NGQsIDB4ZTYzZGI3YzgsIDB4OWIzZjEwMTMsCisJMHhmMDY3NjlkOSwgMHg4ODVhMzMxZCwgMHgzY2M4ZDdmZSwgMHhjYmY4NmI2MSwgMHgwZjQxOGZhMiwgMHg3NjlkNzlkMywKKwkweDEzYmJhN2FjLCAweDI3MWYzM2U4LCAweGI4NjY2M2Q0LCAweDQ3ZTNjOTRlLCAweGEzZWIxMGIwLCAweDBkM2U4NmE0LAorCTB4OWY0MGRjNzMsIDB4ZDQ3ZDRhOGYsIDB4ZGRjNWZiNDMsIDB4ZTgwYjI5MjYsIDB4YTZjNTg1ZmIsIDB4ZGEyMTFkOGEsCisJMHg5ZjllNTRmYiwgMHhmZWVhMzEwZCwgMHgxZjNlNWEyZCwgMHg2Y2JlZGM4YSwgMHhmMGE4ZWJlNiwgMHhhNjY4OWFmMSwKKwkweDUyNmJlMzkyLCAweDg0NmY1YmM2LCAweGM4Y2RiNWFmLCAweDZlZjgwMTVjLCAweGQwY2M3ZTg1LCAweDU1YWJlMWJlLAorCTB4ZTgzZjFjNjYsIDB4NGZlYTRlZDAsIDB4Yzc2NGYyZTQsIDB4NmVjODcyOGYsIDB4MjFjNzVlMGEsIDB4M2Y5NDA4ZjQsCisJMHhhM2U5MDhhMiwgMHg3YzA4ZGZjZiwgMHhkYmQyYTg2OCwgMHhmZWIyNmY1MSwgMHg3YjgwOTM0MywgMHgxMTZiMjI3MywKKwkweDUzNThiZTUwLCAweGRjNDQ3YWNhLCAweGFlNTc0NGQ3LCAweDc5M2U4NDMzLCAweGQ2NTRiYTMzLCAweDgzOWZkOTRmLAorCTB4M2Q3NzRiZDcsIDB4OWMxMmZkZTMsIDB4MzFkNTdmZWYsIDB4MWY1NmM3ZDQsIDB4MDU3MThmOGYsIDB4M2E0YzUzZDAsCisJMHhkNjYyY2JhNywgMHg5OGZlNDVhMiwgMHhiZDI5ZGFjYywgMHg3YTUyZjU4NSwgMHhkNGE3ZWIxYiwgMHhhNjIyY2NjMSwKKwkweDY5NGVjY2E1LCAweDNhNTI3MzE5LCAweDJkMjg3OTlkLCAweGNlOTQyZDY3LCAweGNlOTRlZDY0LCAweDgyOTRiZDYyLAorCTB4OTNhOTQzM2QsIDB4OWFlZWM5OTksIDB4YTYzN2ZiMDcsIDB4ZDI5Mzk4MGIsIDB4YTUwZjMxZWYsIDB4N2U5Y2U5OTksCisJMHhjMTBiNTgyYiwgMHg0YTc2YjM3NywgMHgyNGVmODAzYiwgMHg4YzAxZmEzZCwgMHg5YzgyNzY5NCwgMHg5MDRkZjRjMywKKwkweDc5NzY5ODczLCAweGEzNjUyNjI1LCAweGQyODcyMDFmLCAweGE1M2I1ZTIzLCAweDk0YzViY2M3LCAweDU0MWQ3OGY2LAorCTB4Mzk2ZjZkZWYsIDB4OWQ3OGVmYTUsIDB4NTZmMDllOTQsIDB4NzVlYmRhNTAsIDB4ZGU1M2JkNTEsIDB4ZjVkZjRhMWEsCisJMHhjZjdkMjg3YSwgMHg2OWU5NDBkYiwgMHhkZmQyOGZhZiwgMHgxZDI5OWI3OSwgMHhjNjdlMDdhNSwgMHgyYmU5Y2RmOSwKKwkweGY1M2U3ZDQ0LCAweDAyNDNiZDIzLCAweGU1OTFlY2Y5LCAweGU2ODc2MWQyLCAweGI4ZjFkYzk5LCAweDQwNjYxYTZlLAorCTB4MjM1YjI4M2EsIDB4NzM1OWZkMjAsIDB4YTQzZjBlMzQsIDB4MGI1NjcyOWIsIDB4ZTFiYTQyZjcsIDB4MGNkZmQ3MDQsCisJMHgwZmQyNDhkNiwgMHg4MmY1NmRhZCwgMHgwODc2ZWQwNCwgMHg1ODA4ZGE3ZCwgMHhhOWU5ZTljYiwgMHg5ZjIwOGQ3MywKKwkweGJhZDkzYTRiLCAweDE5YzIzYjA4LCAweGVlODExOTRmLCAweGZkM2NlODc2LCAweDY0YmNhMDNiLCAweDA4ZDczNGE3LAorCTB4YzhlNGQ2N2IsIDB4OGZiMWZmNTMsIDB4ZTkzZTU0YzMsIDB4MDMzNDZiMDgsIDB4ZmIzZDJiM2MsIDB4ZTM4MTM4YTksCisJMHg3YmVmYzI4MSwgMHhhZWU2NzMzYiwgMHgyNTNjNDRjZCwgMHgzNGM1ZjNjMiwgMHhiZjUxMmMzMCwgMHhmYTQ0YzQ3ZSwKKwkweGQ5ZGI2MTc1LCAweDkzYzAwZDQyLCAweDY4NDU0YzFhLCAweGViZDQwNjE3LCAweGFlMWZiYTQyLCAweGYyYjk3MDVlLAorCTB4OTY1NWI2ZGQsIDB4MGQ4NzljNDYsIDB4MGU1YTgwOWYsIDB4N2QxOWE5NTksIDB4ZDVmM2FiODUsIDB4NWViZTZhZWQsCisJMHg4MzdiNGNmZiwgMHgwOWViMDNmZSwgMHg3ZjZmNjgzNywgMHg3ZDMyYTM5NiwgMHgzYTdlZmZjMiwgMHhkZDZmYTYwZiwKKwkweDZiZjY4ZmY1LCAweDhlNjQwZmM4LCAweDU3NzRmZGMxLCAweGZkMzM5NzM0LCAweDA0ZWU5ZmEwLCAweGM4YzU3N2JjLAorCTB4MWE0Y2M2ZjAsIDB4NWM0M2NhMTcsIDB4ZDI5YjBkYjcsIDB4Nzc4MDNlZmQsIDB4MWY1NzM5ODUsIDB4ZDQ3ZmYyYzcsCisJMHhkMTQyNzdkOCwgMHhhNmQ3NzBhZSwgMHhjOTMzODI1YywgMHhjNjIxYjEzZiwgMHg4ZjkzMTM5MywgMHg5N2RmM2NmYSwKKwkweDBkMWY5MzVhLCAweGJmZjgwMjkzLCAweGFmY2I5ZDM5LCAweGU5NWNiN2FkLCAweDQ0NzY4MWRkLCAweGMxNjU4NmIzLAorCTB4OTc5YjNiNzcsIDB4NzY4MWNjNmYsIDB4ZjQxOWJjN2UsIDB4ZGM0NzgwMDcsIDB4MGIzMWJkNWEsIDB4NmEzN2QzY2EsCisJMHgxOTY1NmEyNiwgMHg3OGZjNzg4NywgMHg0ZDllZjU3MywgMHg4ZjI1NWZhOCwgMHg3Njg2Yzk4ZSwgMHg5OTc5NjQzMywKKwkweGI4NTdkYjFhLCAweDU1YmNlODA2LCAweDk1YTdiNmFmLCAweDdlNjQ5ZmY0LCAweGNlNjY4NmE5LCAweDk1NGQ2YzgyLAorCTB4M2ExZGY0ZWQsIDB4ZGZiODExNTYsIDB4ZWZjNjRjZmQsIDB4ZDUzYzU5NTcsIDB4NTdmZGNlZGQsIDB4ZmVlMTkxODYsCisJMHgyNWZjNjAyNywgMHhjM2JmYjkyMywgMHhmZTQ4Y2ViMiwgMHg3ZmYyNGIwZSwgMHhjYTAzYmM5ZCwgMHg3NjM0ZGIyZCwKKwkweDZiNDRlOTU0LCAweGVhMWQ1YWVkLCAweDNiNTk4YmZiLCAweDgxMGVlM2YyLCAweGUxNGJlZjdmLCAweDBhMjgyMTdhLAorCTB4ZWMwMzczZTksIDB4ZDNkZWFkZjIsIDB4ZmMwMzMyOGIsIDB4OWYwYWI2ODQsIDB4Yzk3YmY2ODAsIDB4MGZhMTVhYzgsCisJMHgwN2U0OWZmNywgMHgyZGZiYjQwNSwgMHgxNWMxMmUxNSwgMHg4NzgxZjY4OSwgMHhiOTY1Y2ZjYSwgMHhmODBlOTI3ZSwKKwkweGZiZTEyYWQ5LCAweGI5OTJmZDQwLCAweGExNWQ3MDEyLCAweGQyNzY4YWRmLCAweDYwNTE1OGYzLCAweGY4YjNhNzdmLAorCTB4M2IwN2FjM2MsIDB4NzVkNWY0OTksIDB4NzgyYmMyN2EsIDB4OTc2NTRlYmUsIDB4OTVmNmMwMWUsIDB4ZmYyZTBjNzUsCisJMHhhYmI3MDY3ZSwgMHg1ZDAxM2Q3NywgMHhlMjRjMWYyMCwgMHhkZDg5ZjM3NiwgMHhjZTNmYTQ4OSwgMHhhMDc3MGQ2OSwKKwkweGE5ZTI3NGZkLCAweDZmMDQ2NWQxLCAweDNkNDBlYzk5LCAweGM5ZWVjNGYyLCAweGIzOWQzMWQzLCAweDNiZDUyNjY1LAorCTB4YjQxZWIwMjEsIDB4Yjk2Y2U3ODcsIDB4ZDRmY2M0NWIsIDB4ZGIwYmMwMGMsIDB4N2EyN2EzM2IsIDB4NDFlNWIzOWMsCisJMHhjYjQ3ZmJmOSwgMHhlMzU4YmNiMCwgMHg5MWRhMDlmYiwgMHgyMmZiOGRjNSwgMHgxYzllNGVkMCwgMHhhNjEyNGFmOSwKKwkweGY1N2QzNDI3LCAweDVkZmZkMGRkLCAweGRjMmJmNjY2LCAweGUzMWI5ZDllLCAweGZlMWNiMWZlLCAweDc0YTlmNzMxLAorCTB4YmZkN2VhMWQsIDB4ZjVhNzRmNGIsIDB4YzQxY2NmOWMsIDB4ZWM4MzUwMDcsIDB4ZjZmNjViYmEsIDB4OGE0ZDA2MWUsCisJMHgzZmRlZDZkZCwgMHhlNjVjY2MxNSwgMHhjMTFmMzBlOCwgMHg1ZWNiYjRiNCwgMHhkNjU3ZDM4NiwgMHhlOTgyM2NlMywKKwkweDE5NGY1ZWY0LCAweGE3ZTUyZmFhLCAweGJhNjA4ZTViLCAweDNiZjVkNzI0LCAweGZmMTc5ZjljLCAweGJjYWY3YmUxLAorCTB4YzdjOGYwMDgsIDB4MDdhOGNkZWIsIDB4MzdkMTNlNjUsIDB4ZWJmOTI3NjMsIDB4MjFmOTBjNzQsIDB4NDVhNzkyNmIsCisJMHg3NDZjMDQ4YiwgMHg3ODdjYTBjNiwgMHg4MzUxNjlmNiwgMHhhZDIxYjlmYiwgMHhjMzYxMGMyNSwgMHhiNDFhZTk3ZCwKKwkweGI3NDU3NzBiLCAweGIzYjhkMGQ0LCAweGUzY2UxOWMyLCAweDIxMGZiMGRiLCAweDNiNDU2NDVkLCAweDgwOWY5MDYzLAorCTB4M2UxZDY5MmYsIDB4MTBkM2U5OTMsIDB4NjM0NzMxZWQsIDB4MWZjZjE4N2UsIDB4ZTFjZTE3YTgsIDB4NWFmNTAzZjMsCisJMHgyN2VhMDRjMiwgMHgxM2ZiMjA0NiwgMHhiZmRjMDZkNCwgMHhkZGZlZjI2ZCwgMHgzODA5M2NjNiwgMHhjZjQ4ZDYxZiwKKwkweDY0ZWJmNDBlLCAweDY3ZmU3MDk1LCAweGIwMmU5YzkxLCAweGZhNDRkMzdhLCAweDk2Y2Q5Yzg0LCAweGI4OWRjZjE2LAorCTB4ZTg5NzU2MGUsIDB4M2JhNDBiZWIsIDB4ZjQwNzA2ZDgsIDB4MTk4Mjc0OTEsIDB4MDU1YmQ3ZGEsIDB4MjE5YzgzMGUsCisJMHg3ZTg3ZjBiYywgMHg0MmM5OGIwYywgMHhiZjgyOGQ3YSwgMHgwYmRhMDJiNSwgMHgxYzcwMzNkMCwgMHhkZjgzNGNmMywKKwkweDliMTc3NDI5LCAweDQyMzVjN2MxLCAweDY1YWNiZmE2LCAweGRmMDUzZGJjLCAweDlmMmUwY2I4LCAweDgzNDk2ZjAxLAorCTB4N2M2NTY4ZjgsIDB4MDA5YTFjNjAsIDB4ZDFlYTAyN2MsIDB4NjZmMDA2ZjgsIDB4MDVkMjFiNzYsIDB4YTc4MTdhNDgsCisJMHhjNzAzMTI0YywgMHg4NDcxYWQ1ZiwgMHg3YTY0NWRhMSwgMHg0ZmU4ZmJmNSwgMHgwMjM5NDI4OSwgMHhmNzUzZmU3OCwKKwkweDY5ZjIyMzI0LCAweDMyNzIzOGYwLCAweDQ2ZGYwOGQyLCAweDZmNTE4N2QwLCAweGZjZTJlOTlmLCAweDExZTk1OGRiLAorCTB4MTg0MjNlYzgsIDB4M2EyYzlmYzcsIDB4MzU2ODFmZDAsIDB4MDE3NDE2YWQsIDB4ZjMyNmI1ZTMsIDB4YTU2NjdhN2QsCisJMHhjYWU1MWJhNywgMHgzYjA4ZTJjYywgMHhhYzlkZjdkMiwgMHhmMzk5OWQ3ZCwgMHhjMDRjOTFmNywgMHhmODFiMTQ2ZiwKKwkweDQxYzRkODk5LCAweDRmNDdmMGJkLCAweDk3MTI3YmJmLCAweDk3YjU5OTM0LCAweGY5ZmVlMmU0LCAweDcwYjNmZGY4LAorCTB4M2EzZWI2ZmQsIDB4NGZmMTA3YjMsIDB4M2JhYTc5Y2MsIDB4NWU3NDFhMDYsIDB4MTk3ZGQ3OTQsIDB4NmNhNGViZjcsCisJMHgxYzBlM2YxMywgMHhlMDA3OTI0NywgMHg4ZDQ0YmY0MCwgMHg0MWU4MWNiYSwgMHg2NTc0MmIwNSwgMHg3MWEyMWExMywKKwkweGU0NDRkMWJmLCAweDdhODE5Y2NmLCAweGU0ODY5NDRhLCAweDYxMjljODNiLCAweDMzZmQ0ODQxLCAweGY5ZTRhZTg4LAorCTB4YWVlN2Q2NTcsIDB4Mzc1YTRjOGMsIDB4MDNhZjg5YWIsIDB4MTcxYmI3ZWIsIDB4NTU4M2NhNDYsIDB4NmRmYTA5ZDYsCisJMHgwMTFmMzYwNCwgMHhhNjU4ZGY3NCwgMHhkNzY4MGJmNSwgMHhhYzI4ZmQ2MiwgMHg5MTlkZTJjZiwgMHg4NzY5ZDc0MywKKwkweDAzMzk5YTRlLCAweDFhYzNmNGU1LCAweDc0MzY2ZWYzLCAweDdlZGM4MTVlLCAweGMzZWQ3YTRiLCAweGY5MGU1NDcxLAorCTB4N2RmYzkxYTIsIDB4NDM2YWY4MDEsIDB4YjhmNWVhYzEsIDB4YWM2ZGZkNTksIDB4YjQ4Y2VlNmIsIDB4Yzk4OWY5YTEsCisJMHgzZWUyNjYwYiwgMHg2OGNiNTg5YiwgMHg0N2NiODNmZCwgMHg1NzVlYTYzZCwgMHhhM2M3MzdiMiwgMHhiYmY5ODhmZiwKKwkweGNlN2FjMWJlLCAweDg2NTVkZTRjLCAweGJhZjA3Y2ZhLCAweDFhOTc3NDJhLCAweDEwNWY3YTFiLCAweGE2NWYzOTMzLAorCTB4OTU0ZmQ4NDYsIDB4OTIyMTVlOTMsIDB4MTE0Y2UwOWUsIDB4YTJlZDAzZTMsIDB4MWY3YzE5MGQsIDB4MTMzNWZkYmEsCisJMHgyM2VjNDNlZCwgMHg1Y2I3MWZhMywgMHg5M2VmNTc3YiwgMHhhNTBlYjBiOSwgMHhhZTY4MzQ1NywgMHgxY2VmYTNiMCwKKwkweDQ4NGNlMWZhLCAweGRkZWFmZGE3LCAweGY1MGFmZmQ1LCAweDFhNjU3ZGE2LCAweGIwNmZmOTg3LCAweDEwZTgxOWJlLAorCTB4OWQ4MGY1ZjEsIDB4MmZkYWYwMDEsIDB4YTNhMGI0ZjYsIDB4ZDk5MmIxYTQsIDB4ZmE1NWRmNzEsIDB4ZjNmNzIzZDksCisJMHg0OWRmOWQwYiwgMHg2NDU3MzVmMiwgMHg4MjBlNDkzYiwgMHgyZjQwMWU2NSwgMHg3ZTg5NjkwMCwgMHg1NjczMTk3OCwKKwkweDY4ZGQ5MGI2LCAweDU5MDdjY2NkLCAweGY2YmQ2ZThkLCAweGZlNWZiNDI1LCAweGVmZDBjZjQ5LCAweGQyNDJhZjM4LAorCTB4ZTdmOGMwOTUsIDB4NjViYTRhNTUsIDB4NTkxN2M3ZTgsIDB4ZjMxMWVhMzksIDB4M2Y5NGVjMmIsIDB4ZjNjZWQyYmYsCisJMHg0MTdmM2M4ZCwgMHgxN2YyODM4NSwgMHhiZTc4M2E1NCwgMHgzZTYxZjIwOSwgMHg3YmY4NTYxNiwgMHg0MmVlZDBiZCwKKwkweDQxYTQ4YzUzLCAweDkzYTU3ODNmLCAweDUwMzU1Zjk3LCAweDBmNjAzYmY5LCAweDg3YzkwMjY0LCAweGRlNDlmOTg3LAorCTB4ZTFhNjdjYjcsIDB4Yjg0ZjEyZjEsIDB4MGQ1YzAwNWYsIDB4MTIzZDQ1OTEsIDB4MWE3ZGRmY2UsIDB4ODYyNDE2N2IsCisJMHgwMTk5OTExNCwgMHhlOWMyYjY3ZSwgMHhmM2Y5NDJkNywgMHgxMzgwOWZjYywgMHg2YWY1NDZmOSwgMHhiZmU0MzY2NywKKwkweDcxOWEyYzkxLCAweGMwMzg2ZjdjLCAweGFiZjljNjZlLCAweGU5ZGU2OTE1LCAweDM1MWJmMDA3LCAweGQ4Y2YxNGM5LAorCTB4N2RhZGZiMjEsIDB4NjdlNDhjMmIsIDB4ZmM4NzVkMDUsIDB4YTI0NTZjYWMsIDB4ZjJmMGM3YWMsIDB4N2VjZGNiNmQsCisJMHgwZTQwYzdkNCwgMHhkZmY2M2FkMiwgMHgwMDFlOTIyNywgMHgxY2VkZjBmMiwgMHhjYTVlOGJkNCwgMHg0ODQ5ODdiNCwKKwkweGIzN2U2YWI3LCAweGExMmYyZjU0LCAweDE5OTkyYWY2LCAweDk1NTlmMmVkLCAweDk3YzZiZGJjLCAweGVhMGQ3ZTM0LAorCTB4MzM3OWE2NTUsIDB4ZjcxYTBlOTEsIDB4YWZkYTNiMzIsIDB4MmE5ZjU2Y2YsIDB4OWI3ODQ1OGIsIDB4ODdlNWNlZGQsCisJMHg1NjM0MmU1YSwgMHhlMTJlMzk2ZiwgMHg3MzFhM2M3OCwgMHg3ZWU3ZDUxNiwgMHhlOTRmNDZhZCwgMHhjODMwYWQyZSwKKwkweGQyZGViNGNmLCAweDJhMThmY2EwLCAweGQ4M2RlYzZmLCAweGE5NTU0MjRlLCAweGIzZDQxMzdkLCAweDhmZDEzOGMwLAorCTB4ZjNjZjRkYmQsIDB4MTQ4OGY3N2QsIDB4OGI1NGIwNjcsIDB4NDE4MmU2NWQsIDB4YTc5MTRlZmUsIDB4MTg3YzgyZDAsCisJMHhjNTQ1ZjI0NSwgMHg1MjVmYTM1ZiwgMHhmOTkyM2ZjMywgMHhjNDVkZjgxNCwgMHgzMTc2Zjk3MSwgMHg1ZDk1YzkzYiwKKwkweDI3MjA3YWVhLCAweDUyYWYyODM1LCAweDY3ZjlkNGRhLCAweDJmYzUwNGIyLCAweGUwODc5YWE1LCAweGI4N2FiNjc5LAorCTB4ZTcxZTBiZGMsIDB4YzJiYWI4ZTAsIDB4MzRiOGQxNDYsIDB4ZDcyODVjN2MsIDB4NzRkNzNmMjAsIDB4MmI3M2YyODgsCisJMHhhMTI0YmI0NSwgMHg4NTNmNmJiYywgMHg5MmY1MWZlMywgMHg5ZTAwYmFjOCwgMHgxMzM0NWQ1NSwgMHg2NmQ2NjllOSwKKwkweDY2NDNiOTBkLCAweDBiOTI1ZWIzLCAweGUyYjcxYjM3LCAweDY3MWUwOGRmLCAweDY0MzZmOGYwLCAweDFjZGY2OTY4LAorCTB4MWJkNzA3ZDAsIDB4N2Q2YzFmNDksIDB4YjhjMWE0YzQsIDB4ZTE1YmU4MjIsIDB4OTczODU3ZTgsIDB4MDk5ZTFhNTUsCisJMHg1MzIyMzBmMywgMHg2YmFmZDdkNiwgMHgzNDY5M2NiOSwgMHhhY2VhOWQxMSwgMHhmYTA0ZTU4ZiwgMHhhNWQxODQxZiwKKwkweGVlYmViMDIzLCAweDcyYmNlYzdhLCAweDY4ZTkxYjhhLCAweGFjNzJjMWRjLCAweDkzNjM5NjU4LCAweDJhN2M2MGZhLAorCTB4OTMzODczZmYsIDB4ZDZmN2U2MDIsIDB4N2MxNTE4ZmUsIDB4NTU0NGQ1ZmIsIDB4MmUxMDEyZmQsIDB4OGQ1M2U1ODEsCisJMHg2OWYyYWE3OSwgMHhmODJhNzFlNiwgMHg1NTE0ZGIwZSwgMHg1NGQyMTlmZCwgMHhjZTY3N2MxNSwgMHhiM2ZhYWE5ZCwKKwkweGYwNTVmM2VkLCAweDU0NGJjNTVkLCAweGVlM2FlN2Y1LCAweDJmY2Y5NTU1LCAweGJlNTU0ODdmLCAweDA1NDZiOWQwLAorCTB4N2JmOGFhMmYsIDB4YWVjNWZkNTUsIDB4OTJmOTU1NDYsIDB4ZTU1NTI3OWEsIDB4OTI5M2Y2YzEsIDB4M2Y3MjY2OTYsCisJMHhlNzliNTZjZiwgMHg4YmU0ODNhNCwgMHgwZTQ2NzA0YiwgMHgxNGE5NjdhZCwgMHgzZGQ3MDNmYiwgMHg1M2ViODIyYSwKKwkweGU1MWFmNWMxLCAweGUwNDE3OGY1LCAweDQ4ZmViMWZkLCAweGUyOWRmMjBkLCAweDkxZWQ2MzdmLCAweGQ3NWNmZjJhLAorCTB4M2VjNmM5ZTQsIDB4ZWM3MmZhMTMsIDB4YjJkZDIzZWYsIDB4YzUxZmRjMTMsIDB4YzUzYmZjZmMsIDB4MDRmZGQ1N2YsCisJMHg1NmY2ODNkNCwgMHg3MTViYTY0NywgMHhhYmJmNDNiZiwgMHhmOWZkMGY0YiwgMHhiN2JmZTQzNSwgMHhiNDBiZDczNiwKKwkweGU3YWU2ZTBmLCAweDdhYWI5NTdlLCAweGMwMGQ4YWU2LCAweDdlZjM4NTgzLCAweDgyOGU3OGU1LCAweDcwNDQ3MzI3LAorCTB4Y2YxODYwZmYsIDB4OTVmYjI2ZGYsIDB4NTJiZjQzOWUsIDB4YjAzZjYzMzYsIDB4MTc3ODdlMjgsIDB4YWM1MDliYjUsCisJMHg0NjdmYTFmNywgMHg3YTA4ZjZhOCwgMHg2NjJlNWI5NCwgMHgwNzI4NDgzNiwgMHg5N2ZmNTM5NywgMHg1ODIzZWMyYiwKKwkweGQyNTY3OTg4LCAweDM5OGRhZjU2LCAweGJkNWI3ZGEwLCAweGM2MWVhZDZmLCAweDY5Mzk5NzU2LCAweGJjZDBiM2NiLAorCTB4MWZjOGMzY2QsIDB4OTRlNjY4ZjMsIDB4ZTc4MTZiMmQsIDB4YTI1MzIxZmYsIDB4ZjkxMDQ5NzUsIDB4Zjc1ZjNmM2MsCisJMHhkMDNkYjljNiwgMHhhNTk1NmI1ZiwgMHg3MDZhZTUwOCwgMHhmM2JiOTI3OSwgMHg5NDFiYjFlMiwgMHhkNWYyYmYzZiwKKwkweGQxYmZlZTBmLCAweDY3MWQ3NWY3LCAweDg3Y2EwMjlhLCAweDI0NTY4YmY1LCAweDFkMDA0NzMyLCAweDdlZDA4NjQ4LAorCTB4NzRjODFmZjksIDB4MjdhYzllZTUsIDB4NWEzM2Q2M2YsIDB4Y2ZjODkzZDcsIDB4ZDdmZjI2MTcsIDB4ZGRmMGJkYzQsCisJMHgzZGNhZTk3OSwgMHhmZTQzYTdhOCwgMHhlYTFmMzAwZiwgMHhjZjllYmNkMSwgMHgyOWU3NDRiYywgMHhiZjQwZjM1MiwKKwkweDJjM2JmZDQ3LCAweDk0MWVkZDM0LCAweDk1YWQxN2RiLCAweDVhMDdlOGZkLCAweGQwOTdhOTFkLCAweDdlMzI0ZmNlLAorCTB4MGVlYTdlNDYsIDB4ODNhYmI3MWQsIDB4MDdlN2Y3ZWQsIDB4YjI3NmVkZWMsIDB4ZWRjYmY3YmYsIDB4YWQ1Mzk2ZWMsCisJMHg4Y2NmN2Y5OSwgMHhlNDVhMjYzZSwgMHhmOTg4NDBmOCwgMHgwOWI1NDZkMCwgMHhhYjEyYWYyOCwgMHhmOTAyNGZjNSwKKwkweDRmNTIzYmEyLCAweDQ5OGIwNDdlLCAweDZhOTgzYmY2LCAweGM1MDE3ZTU0LCAweDc5MWRkMDZmLCAweDZmNzQ4MGJmLAorCTB4N2U0MTVhZTksIDB4NjAxN2Y0N2EsIDB4NzVlNTA3N2IsIDB4MjQxN2Y2MDksIDB4ZThiNGZmMTksIDB4YjUxYmQ4ZTMsCisJMHgyM2YyMDZjZiwgMHgwNGZkMTA4NCwgMHgyN2Y4YTFlMSwgMHhhM2YxZmI4MiwgMHhjY2ZiODEzZSwgMHgyN2QyNzBjYSwKKwkweDM5N2RjNzgyLCAweDY2NTBlNGIzLCAweGZmNDhmMjNjLCAweDdlNTAzYmM5LCAweDdlZDFkMjlmLCAweDg0YmQxYzM4LAorCTB4MWZjY2UxNDksIDB4MjY2ZjdlZDAsIDB4NzIyM2VmYjcsIDB4OTFmOTU0NjIsIDB4MGZlNjQ0ZjYsIDB4NjRiMzVmZjQsCisJMHgzMjExMjdmMywgMHg0OGNjNWIwYywgMHg1MWM2ZGY3ZCwgMHhiY2RiZGZkOCwgMHhiYjNhMTNiZiwgMHhkODQxZjQ4ZCwKKwkweDdiZmVkMGY2LCAweGVlZTdlNjRmLCAweGFiNjk0NjVjLCAweDAxYjc5NzZjLCAweDljZmE2MzFmLCAweGQ5ZmE0Y2Q3LAorCTB4ODQzZmUwMzYsIDB4NGEyNTdiYjcsIDB4NGExY2RlZmQsIDB4NTRlZDdhNzcsIDB4NGM1YmNiYmUsIDB4ODNhZjFlZjAsCisJMHg3MmRlYmRlMCwgMHg5ZDc5Zjc0YSwgMHhiNzkyZmY5NCwgMHg3YTlmZTA4MiwgMHg3YmI2OTQ1ZCwgMHgxNWZmMjg2YiwKKwkweDAzZTA4N2FmLCAweDVmODIwNmRlLCAweDQ0NTA3ZDQ1LCAweGE1MzM3NTNmLCAweGE4NWI3ODZmLCAweDQ2ZGJkM2JjLAorCTB4M2Y1ZTliZjAsIDB4YmRkZTVkYTUsIDB4ZGJjODdmOTQsIDB4NmYxMWYwNGUsIDB4YmNjN2MxMDcsIDB4NzhmNzA0NWQsCisJMHhkYjdkMjg3YiwgMHhlZmY5NGJkYiwgMHhkYzEzNGY3OCwgMHhiMTkzOGYyYiwgMHhmYTJmNWVlNiwgMHg4NGEyNWMyYiwKKwkweGFlYjNkZGZhLCAweGQ3ZWEzMzZhLCAweDMzMWE2NWI2LCAweDk3MzZmMzhhLCAweDM5ZmEwNTY2LCAweDc4ZjI1NWI2LAorCTB4ODY5NTZkOWYsIDB4ODdhMDQwZmMsIDB4YjM5ZjUxZmEsIDB4ZjhmYTdiMmQsIDB4NDA1ZjJhMzQsIDB4NDliMTViZTUsCisJMHhhYmFjNGEzMCwgMHg1NmNhZmViOCwgMHgxNTllYTllYSwgMHg3N2MxMDIwZiwgMHhmZDJiNmFkYiwgMHhiMjViODA1YSwKKwkweGJhZGNhOWMzLCAweGVkYmIyNDRhLCAweDNhMjc4ZDc5LCAweDI0NWRlYjliLCAweGFlM2FhZGJmLCAweDEwNzQyODNmLAorCTB4MjJlOWZiMjEsIDB4OTc0YTQ0YjIsIDB4YTNmYzczNjUsIDB4MjNlZjQyMzIsIDB4ZmM0YTU5MTksIDB4YzcwN2I5YTQsCisJMHhmMTgyYWI2NywgMHhmNTU1YmUyMSwgMHg1YTVmOGM0NiwgMHg0OWYxODNlZiwgMHgzYWFlM2ZhNCwgMHhjMzI0NzgwNCwKKwkweGMwN2YxMTc4LCAweDZjYzJmYzg3LCAweGFkOTdkNzE5LCAweGFmMDhlYjU1LCAweDk0ZjM2NWU0LCAweGRhMzQ2Nzc4LAorCTB4ZmE5ZTZkZTksIDB4YTU2Zjg0YjksIDB4MzZjZDdlNDgsIDB4ZmJlOGExZDcsIDB4ZTdjYTRlNTAsIDB4ZTFmMWFjN2MsCisJMHg1MGZlN2Y0ZSwgMHhmMDgyMzI3YywgMHhkZGI4YzZkZiwgMHhkMmZhMGM5MCwgMHgwMGUzMTBmZSwgMHhjN2E5NDc4YiwKKwkweDE5OGY3OGZkLCAweDI2ZjFmYTQzLCAweGIyNjI3YWNiLCAweDNkOGZmOWMwLCAweDZkZmYxMjJjLCAweGMxZjdhMDY3LAorCTB4N2U4MWNmNzcsIDB4NTAzOTQzZTcsIDB4ZmExNTZmYmEsIDB4NzJjZDFlYWIsIDB4M2MwMmNjNGQsIDB4M2Y4ZDI0N2UsCisJMHg1MzFjMDIyNCwgMHhhZjRmZGJjZSwgMHgxZWEwZjcxNywgMHhhZTdkZWIwZCwgMHgzZTM3ZjIwOSwgMHhiNjg5ZDliOCwKKwkweDY5NjZlYzcxLCAweGRiNWJiMjJkLCAweGQwMTM1N2IyLCAweGE4MmM5NWZmLCAweGNiNDk0N2Q3LCAweDNiYjYzYzY1LAorCTB4ZDVjZjdiNzgsIDB4YjY0ZmU0OGIsIDB4NzY5MDNhYWUsIDB4ODY1YmY3ODQsIDB4ZmE4ZTI2ZmQsIDB4NjFiYTE4N2QsCisJMHgxYTQ4MTYzMiwgMHg1NWM5MTkxNCwgMHgyZmVjNDVlMiwgMHhlNWNkYTFlYywgMHg2NmZjNWZkOCwgMHgyMTVmZDI4NywKKwkweGU3NzVmN2Y2LCAweDY1ZTNlNDY5LCAweGJjMDg1NzU2LCAweDM3Mjc5Mzg2LCAweGIzOGIyMzkzLCAweDhlNDhlMzIyLAorCTB4OTQyNGIxMjQsIDB4YjhlYmNmMjMsIDB4ZTQ5ZGYyZGMsIDB4ODYxZDI0ZmEsIDB4MWZiNDM0OTksIDB4YzRhZTdlMjUsCisJMHhlOGUzODNkMywgMHgyNDNkMzIzNSwgMHg2MWM3NDIxOSwgMHhmZGU4MGQ1NywgMHhkZGI3YWEzZSwgMHhlNzQ5YzliMSwKKwkweDBiM2UzMDRiLCAweDZjNzVhYjQ1LCAweGVhZjNhZTA1LCAweGRhZjM3MDkyLCAweGE0YTBmNDEwLCAweDAxOGU1MDViLAorCTB4NDY4YmRmZGYsIDB4YjliM2I1MjMsIDB4ZTFhM2I3OWMsIDB4NTZjYWRjZWQsIDB4MzI2MjVjMTEsIDB4NmJjODQyZmIsCisJMHg2ZTVhN2QyNSwgMHg0ZTJjODFlNywgMHhiZTBmNDliNywgMHhhZTE4ZjFiNCwgMHgzYTNhZGJlZiwgMHhjNjljZjQxMywKKwkweDA0ZWQxMWJmLCAweGM5MmQwOWRmLCAweGZiNmQ0NGQ3LCAweDc4MDEzZDhlLCAweDc5ZTNjYjM1LCAweGI1Y2ZlZjRlLAorCTB4N2I0MGZmMjMsIDB4OTE1NzI4ZjksIDB4N2ZjOWYyNWYsIDB4Y2MwNTY2YzEsIDB4NWFkZGYyYmIsIDB4YTNmZDhmZDksCisJMHgyOWEyMWI2YiwgMHgyZWI1NWNiZSwgMHgzNmEzZjUwYywgMHhiMDdhMjQ2NiwgMHg4NWQxM2NlYSwgMHg0NTYwZjQwMSwKKwkweDFmNDEwY2JhLCAweDRhZjRiMmZiLCAweDMyNTRkNTNjLCAweDdjMzJlMzExLCAweDcyOGE5ZTVmLCAweDU4M2VmMDA5LAorCTB4ZTFmYjQ1MWQsIDB4ZGVlZjY1ZDQsIDB4NWJlMDE2MzksIDB4ZDQ3Njg4YWUsIDB4ZTVhYjllY2IsIDB4ZmQyNzEzZTcsCisJMHgyNmU3NDM1MSwgMHhkYjljN2NkZSwgMHhiN2ZkYjc3ZCwgMHg3YmY0MWViMiwgMHhiM2U5YzgyNywgMHg3YTQxZTc2OCwKKwkweDc3YjMzMzRiLCAweDUyZGNiYWMxLCAweGNkZmYyMjZkLCAweGIzYzU1N2FkLCAweGI5MWE3NjgxLCAweDdkYTNjN2E0LAorCTB4NTMzNWZkYzEsIDB4ODAzY2ExZmEsIDB4YTY3ZDI2ZmUsIDB4YWEzMzBmYWUsIDB4YTEyMzNkNDUsIDB4YWI2ZjlkNGYsCisJMHgxYTY2NzAzYSwgMHhjYjU2ZDNmNCwgMHhmNmJiNmUzZiwgMHg3ZDg0NzFmZSwgMHg5M2YyMWFmNSwgMHhmNDI5ZjUwMCwKKwkweDRkZmU0MDkzLCAweGU3ODA5N2QxLCAweDE5MWEzNzE2LCAweDMyZWI3M2M5LCAweDQxZTUxOWEzLCAweGU0OWMyNWI3LAorCTB4MTM2MmRiNWYsIDB4MzIxYmExZTksIDB4OWVhMTg3NTcsIDB4OGZhYWE4NmMsIDB4ZGVhNDc0YzYsIDB4YTc3ZDAzYjcsCisJMHg3ZGZmYmJkZCwgMHhlNDgxMmQ5ZSwgMHg4MTdmM2YyZCwgMHhmYTBjNTk4NCwgMHhhZTdhYmRjMCwgMHhiNmZhZjhlNCwKKwkweDc5NDRjYjRjLCAweGMzZjJhMWE5LCAweDhiN2RmZmJiLCAweGFjMDc3ZDBmLCAweDM0OTBmMDg1LCAweDdlMGY5MTJjLAorCTB4ZTI5YmJlMDAsIDB4MmZkZjAyZDQsIDB4NDQ0ZTY3NDAsIDB4YWJhZTc0ZjgsIDB4NDI0M2U1MDcsIDB4OGIxYmFmOWMsCisJMHg1NmNlOWFiNiwgMHhjYWUyZjlkMiwgMHg1ZDMzZTIzOCwgMHgzMWU5ODdiNSwgMHgxOGM4YjJiZiwgMHg5ZjBhZTdjOCwKKwkweGZmZmNiNWZjLCAweGJiZTcxY2I0LCAweDU5YjgxYzk5LCAweGY3ZTMzN2JiLCAweGJlNzNhNTlmLCAweDM2OWVjZTE5LAorCTB4MTU0ZjIzMGMsIDB4OWFjZjE4ZmIsIDB4NGI2YzhhNjMsIDB4N2Q1OWVhZmIsIDB4ZjZlYWZkNDgsIDB4YzU2N2NlNmMsCisJMHg2NDNlN2U3YSwgMHg3MmY0YzU0ZSwgMHhmYWY4YzM4YSwgMHg5NmM3M2M0NCwgMHhhOWY5Y2Q5MywgMHg3MTQ5MTJjZCwKKwkweGQ2NzRiNmUyLCAweGRmMDM3MTg1LCAweGY3ZjcwZDcyLCAweGRhZmZmMWM0LCAweDNmYzlkMzJhLCAweGEyNzgyYWQ0LAorCTB4M2U3ODE5N2QsIDB4ZWI4Njk1YzIsIDB4MTQ3MzA2ZDcsIDB4YTZiN2ZkMDksIDB4ZmNjZWI5NzIsIDB4YWJjNjMzMWUsCisJMHg0MDlhOWRhMSwgMHhmM2RlYzFmYywgMHg5MTk4ZTlhOSwgMHgwYmZlNGMzZSwgMHhhNDllZjEyZCwgMHhhM2I3ZjAwZiwKKwkweDE3ZmQxYzVmLCAweGRhZGRkZmMxLCAweGJmNmY4NmFmLCAweDk4NGI4NmFhLCAweDM1NGYwNTRlLCAweDY2NjllMWFhLAorCTB4ZTZjOTZjMzUsIDB4MzYxZGZhN2EsIDB4NDkwY2ZlNzUsIDB4MWNhNzI3MGQsIDB4NzNmMGQzMDksIDB4N2YwMWE2ZWQsCisJMHhiYmYwNDRiMywgMHhhMDdlMDE5OSwgMHgwMTc2OWEwZCwgMHhhZmE1MjVlNywgMHhhZGIyZmM5NiwgMHg5M2RmZGNhOSwKKwkweDczZjZhZjVjLCAweGI1OTZiMjI0LCAweDZkZjkwMjMxLCAweGZjYjZmOTU0LCAweDczZmEwMjU1LCAweDdjZWFkNTZjLAorCTB4OGMxNTA3OTgsIDB4YmZmNDhhY2IsIDB4OWY5NWQ3MjQsIDB4MDJlOTcxOGQsIDB4NGIzYWVlN2UsIDB4YzVjZGU5ZWIsCisJMHgyMzhiNjg3NSwgMHhjZjkzNGEzZSwgMHgxZmRkMGQwNSwgMHg5NWI4ZDBiNywgMHg3YzBmOTA3NiwgMHhmYTQ1ZTMwMSwKKwkweGU2MmY4NDBmLCAweGM3NjcyNmJhLCAweDA1ZjAzZTczLCAweDdkZjk5N2VlLCAweGE1MDNlNDNhLCAweDQxZjhlMWJmLAorCTB4Mzk2MmM3ZTEsIDB4YWI5Y2EyNmUsIDB4YTViNzIyYjksIDB4OTdhOWFiOWMsIDB4MDQ3NWM3Y2YsIDB4OTJiOWM3OWQsCisJMHg4MWU3NDY1YywgMHgwOWFlZjRhZSwgMHhjODc3YzUwZiwgMHhjZTZjYmU2NywgMHg5NDZlOTg3NywgMHhkZjIwZDdjZiwKKwkweGVmOWNmNGY5LCAweGQ1ZjBkZjMwLCAweGZkMjg2NzJhLCAweGFmYmNiY2YwLCAweGNjMzdiNDNjLCAweGY4YzA3MWZjLAorCTB4YWI0N2I2NTYsIDB4ODI0Nzc3NjAsIDB4ZDNiY2YwMzksIDB4NzQwZmY4NDMsIDB4M2EzMzM3YmEsIDB4MGYyYjVhNDcsCisJMHhiZjMzOGJlNywgMHhlOTA4ZDNkYiwgMHgwYjk3NWE1YiwgMHhkNjY1NjdkNywgMHgzMzhmM2Q1OSwgMHhmZTUxZWJmNSwKKwkweGRmZjc5NzllLCAweDM4ZGQ4MjBkLCAweGRiOTRjMDVhLCAweGJiNjY4ZGE1LCAweGNjYmRmZDExLCAweDU3ZjJhMTlmLAorCTB4ZDU4NzdlMjgsIDB4MzFhY2QyMmIsIDB4MDE4OGZmODAsIDB4NGNkMzgyM2YsIDB4MzNlMzRkZTcsIDB4MzUxMThmYzksCisJMHgyYjM3NzFkNSwgMHhjY2Y3M2MwNCwgMHhhMjA0NmY5OCwgMHg1NTRlODVkYywgMHg2NThmYzc5MCwgMHg5N2QwZmQ5NywKKwkweDAzNWUzODNjLCAweGNlMDJhYmZhLCAweDBmNDQxOTIzLCAweDM1NzNiOTIzLCAweGU3MDE0OTk1LCAweGZmNjU1YmNhLAorCTB4OWIxZjAwYzUsIDB4N2Y2MDk3OTYsIDB4Nzg5NmNjM2YsIDB4ZDY3OTg2M2MsIDB4ZGE5ZmZmNzIsIDB4NmFiODY2NWYsCisJMHhkODMzYjU1MywgMHhkZmFhYjI3ZSwgMHg3MjJmZDk1NiwgMHhmZWQ1ZjZmMywgMHhmNGQ1YzMzNywgMHgwZWNmZGE2MSwKKwkweGIyMWNkZjZhLCAweGQ1NzZjMWZkLCAweDExYWZiYzdlLCAweDNlNDM2ZjFmLCAweGI1ZmZjZTE4LCAweDFiYTc5NjVmLAorCTB4ZjQ1ZTllNmMsIDB4ZDgxOGU5N2YsIDB4MDYwNzE0OTUsIDB4NmE4ODk4ZmEsIDB4YzM2OWZmMjMsIDB4NWQ1Mzc5ZjksCisJMHhhNjBmZGFiMiwgMHgxZjkyN2U2MywgMHg5MGQ2NDdjZiwgMHgzZTYwNDhmYywgMHg5ODU5ZGY4YSwgMHg0N2Q3ZjI4NywKKwkweGJiZjFlNzRkLCAweDEzNzFiOTYwLCAweDg3OThjMTc5LCAweGZkMDBkZWExLCAweDNmNTdmMmE5LCAweDQ2ZDNmN2MyLAorCTB4M2M0MmVlYzEsIDB4ZmZmM2M3ODMsIDB4ODlhYmRkOGEsIDB4ZmE0YmRmMWMsIDB4NjRiODRhNzMsIDB4ZGJkZTgxYjgsCisJMHhlMzI1NzVlYSwgMHgzZGMyMWJmNywgMHhmZWViMTgzNSwgMHg3NjJlYmIzYywgMHgxYjNkZTgzZCwgMHg3YzA4YzYzMCwKKwkweDcxYmIzNTc2LCAweGZiODRjZmJlLCAweGY1OGZhNzI0LCAweDI3YTIxYTcxLCAweDFkOTZkZGNiLCAweGIyN2EwMGRhLAorCTB4YTg2OTVkZTgsIDB4ZjIzNDVhZjcsIDB4YTFmYzJmMzksIDB4NjViZDZjYmYsIDB4ZmQxMGE2ZTcsIDB4MDI5YmZhMmIsCisJMHg4ZjAwMmI1YiwgMHg5NTZkYmEwMCwgMHhmZTgxZTZmNSwgMHhkMGVlMjQ5NiwgMHgzMTYzYjQwNiwgMHgzZmE5MGFiOCwKKwkweGQyYTM1Y2U1LCAweGViMzdkMzVmLCAweGY3ZWNhYjZmLCAweGRlYjNmYTUyLCAweDU1OWYxZWEzLCAweDU5ZjFhMWVmLAorCTB4ZTk0N2ZkZTUsIDB4MmY4ZTJiNmYsIDB4YjRkZDVmMDQsIDB4MWU4ZWQ5M2YsIDB4N2FhOTZmZTgsIDB4ODc4MzU2N2MsCisJMHg3MmQ1NjdjNiwgMHg3ZjQwZTFmZiwgMHhiZmFjZGY0ZCwgMHg5MzFlZjkzNiwgMHhlMWQzZTY0ZCwgMHgwZTM3ZmRjZSwKKwkweDFhNzZhYjljLCAweDI5YjRhZTUxLCAweDdmNzk0MGZlLCAweGJmYjQxNGJiLCAweDM3Zjc5NmFkLCAweDcxNGJmYmU1LAorCTB4YmRkZmU0ZTksIDB4MThkZjMzZDQsIDB4ZmRjMzVmNmEsIDB4MjQ3YWM5OGMsIDB4MjY0OGY1OTMsIDB4Y2YwODkxZWIsCisJMHgzZWE2N2E5OSwgMHhmMGIwZTgxZSwgMHgyMmY5YjZjNSwgMHgxZTczZTNlYywgMHgxNTNlMzMzYSwgMHhmNjJmMTllMCwKKwkweDVmNjExN2NmLCAweDk5ZTJmMzlhLCAweGM5ZjA0OTAzLCAweGNjYmUyZmNiLCAweGU2Nzg3ZmNiLCAweDliOTQzMjRhLAorCTB4MmZjZGVmN2MsIDB4OTYyYTM4MDMsIDB4ZGUwYWM3ZWYsIDB4OGRiN2JmNGEsIDB4YmJhMzdhZTIsIDB4YmZlZTczZTEsCisJMHhmYjhhZjkwNCwgMHg4N2FhNjM1NiwgMHg0MmYxN2ZhMSwgMHgzMmQ0N2Y3MiwgMHhlOTRlZWZhOCwgMHgzMTBmMmNiNywKKwkweDZlZWE0YTJmLCAweDQ2N2U0ZjM4LCAweGZmMjg3OTE0LCAweDQwYmZlMWU2LCAweGVlNTNjZmI0LCAweGVmYWI5NDY3LAorCTB4NmQ0NTQ0NjcsIDB4OGMyZmZkMjIsIDB4ZWYyOGNkZjksIDB4YmEwZThjMjIsIDB4MjhkNmY4NGYsIDB4NjQyYzFmYmUsCisJMHgzNzZlMGFmNiwgMHgzOWYyNTk0OCwgMHgzMWNmYmEwZCwgMHhkNzZlNThiZiwgMHhiMWNmY2I3YywgMHhiMWM2YTE3YywKKwkweGRmZDllZDFlLCAweDQ3OGFhYTRlLCAweDE3Mzk1OGY1LCAweDdmNzgzNzk3LCAweDFiZjVkNzcyLCAweGJlMGUxZjljLAorCTB4MjNlNzM5M2YsIDB4MjNjMmViODEsIDB4M2JhNWJmYjgsIDB4YjlmN2UyNTcsIDB4YTg4NmZjMDIsIDB4OWYzNzBlZjcsCisJMHg3ZGI4YTNiNSwgMHgwZTlmMzgzZiwgMHgwZTMxOWYzZSwgMHhmZWU2OWYzZSwgMHhmZWIwYjVhOCwgMHhjYjdlZThlZSwKKwkweDVkOWZjNDEzLCAweGM4NmJlNzIxLCAweDVmY2QwNmJjLCAweGQ4YTYyOGZkLCAweGI3YTQ1YTc5LCAweDMyYjdjZDliLAorCTB4YzFmOWNhYWYsIDB4YTJjYTQxNDYsIDB4Nzk0ZmVhZmQsIDB4MzE4M2ZkMmEsIDB4OGUyYTE0YmIsIDB4YjgxOWY0ODMsCisJMHg0ZTZkZWFiZiwgMHg1ZDE5ZmU4NiwgMHhjZjA3M2Q5YywgMHg0NWZlMzc5NSwgMHhkZTVjZjIxYiwgMHhkNjNlNzk2ZSwKKwkweGI5ZDM4NTQ2LCAweDNkMjhjNmNlLCAweDUxZGRkYmQ5LCAweDk3ZmExOTMzLCAweDlhNzRkMzQ1LCAweDcyYThiMjk3LAorCTB4OGRhOTZmM2EsIDB4OGY2OGVkNjUsIDB4ZDcyMzlmMDYsIDB4Y2U5YmI4OGUsIDB4NjhhZDY5MDEsIDB4NzAzYTQwNDEsCisJMHhhNDYxZDkyZSwgMHhlOGI5ODlmOCwgMHhjNWM4ZTc4NiwgMHg4ZjIzOWQ5YiwgMHg5MWNmYzk5OSwgMHg3NDI1ZTk0NywKKwkweGVhNDViNDU5LCAweDdmMjM5ZTQzLCAweGY3ZGYxNDZjLCAweDcxM2M3MWJiLCAweDI3OGMzZjg4LCAweGEyMWM3MDZkLAorCTB4MzFkMWM3OTksIDB4ZjVmMjAyM2YsIDB4N2YyMzE3NjYsIDB4YzdkZTNjYmEsIDB4ZWE1MDc1ZTQsIDB4ODYxZWNjMWIsCisJMHhiN2FiNDBmMiwgMHg2OGE3YTg0YiwgMHg2MTNlZjljMywgMHg0ZTU4NjliMCwgMHhmN2M4YmYwOCwgMHhmYmU4ZTk0NywKKwkweDM0Y2Q3MjRmLCAweGQ3MjMxYWFmLCAweDVhZmNlN2NiLCAweDdhNGZlOTA4LCAweDRmZTI5NDc1LCAweGMzNjc0ZDBhLAorCTB4MGQzY2M5ZDEsIDB4ZjBhNzQ3M2YsIDB4OWU5MzAyZTEsIDB4MzAyZGY3Y2UsIDB4MGZkMTRhZDksIDB4ZWYwODAwYjIsCisJMHhmYTgwOThiMywgMHhmN2UyMmRiNywgMHgwZGJiNDU4MSwgMHg1MzM3ZTdlOSwgMHg2ZmY5ZmY2ZSwgMHhiOWY5YmExOCwKKwkweDQzMzUzZTdjLCAweDRlZTNmNzQ3LCAweDhmNjFjYzA5LCAweGQ1N2U3YTE5LCAweDg2OWU4Y2U5LCAweDY2YmI5YTZlLAorCTB4ZWM4NzU5OWQsIDB4ZWZmMmUyZjcsIDB4ODY3YjYxMTUsIDB4MTY3NTUzZTMsIDB4Nzc5ZmVjODksIDB4YTg1Y2ExNDYsCisJMHgwZjFmNWI0ZSwgMHg0MmNhYTJmMCwgMHg5NGRmZGQxZCwgMHgwOGVlNDRlMywgMHhkMTlmYzcyZSwgMHhhMjhlNGViYSwKKwkweDUxZTdkMTc4LCAweDYyNDc0OGE1LCAweGEzZTIyYTdmLCAweGVhMDI4OWM0LCAweDllMmEzN2JkLCAweGQ3ZTFjZGVhLAorCTB4MThkZWEwYzUsIDB4N2Y2N2QzOTQsIDB4MWViNDYyZWYsIDB4MTI3YTUwYjYsIDB4MzAyYzRmZGEsIDB4MDdjYjIzNmUsCisJMHhmMzAyYTNiNCwgMHgwMTYyN2VkMSwgMHgyZjJjMjdlYiwgMHg5MDg1ZjZiNiwgMHg2MDlhNGExNywgMHgwZDUyOTJkYiwKKwkweGQwOTA5ZTdjLCAweGZmOTJhOTQyLCAweGVlNWI0M2FjLCAweDU3YWViMTBmLCAweGM2ZmQ3NWU1LCAweDYwMWI0Yzc2LAorCTB4OGVkMDcxM2IsIDB4MmFlNWZiMDEsIDB4ZDUxN2RiY2UsIDB4NjFlMzJjYTcsIDB4MTc2NTc1NDgsIDB4ZTliMThlYzksCisJMHg4ODkzM2UxNSwgMHgxZTYxMDZiZiwgMHg0NWZiMDRhZiwgMHhkNWIwZGU3NSwgMHhmYmExNGJlYiwgMHg2ZDM4ZjJmZSwKKwkweGEzNDZkNjJiLCAweDFjNTUwMzFkLCAweGJjZGI5ZjQ4LCAweDk5NjUyOTZkLCAweGNlYzhlMzgzLCAweDhkMTNlOTkxLAorCTB4MTdhODg5YjYsIDB4NWM3MjVmZjMsIDB4OTdmNDBjY2IsIDB4NzQzNDliMjQsIDB4NTMyNjAxM2UsIDB4NmU2MTJmNzUsCisJMHgzOGI0ZjQ1OSwgMHhjY2RkNDUzNCwgMHgyZWQwOTI2ZSwgMHgzZjNkMjVlZiwgMHhmODk2YmFlMSwgMHg2MmYwZTEyMCwKKwkweGE0YWI3MTg2LCAweGVmMDE3NmI4LCAweDIzZjQwZDAzLCAweDk3YWU2ZmRmLCAweDVjNTdiOWUzLCAweDA0OGUzNDY1LAorCTB4Y2VmZWMwZWIsIDB4ZjM4ZDBlYzgsIDB4NzQ3OTQ1Y2QsIDB4NTE4ZTY5ZTUsIDB4ZTVkNThmYzIsIDB4ZGNmYzcxYzksCisJMHhlMWQ1ZmRjMiwgMHgzYWU4MDk3ZSwgMHg0MDU3YjZhOSwgMHgzODBjMDEzOCwgMHg1YzI3YzVmNCwgMHg0MjZiNGM2ZiwKKwkweDA0NWFmMjc5LCAweDZkYjU4YmY5LCAweGYyMDdjYzk5LCAweDQ1NzQ1NTI3LCAweGZiM2NlMGU1LCAweGM5YTZmZmE1LAorCTB4ZGYwYjA3OTAsIDB4OWMyMDdjYWQsIDB4YTEzNmIzZjQsIDB4MjVkOTA2NjUsIDB4Mjg1ODY5ZjcsIDB4MWM5OGNmM2YsCisJMHhjODI4YzdlZSwgMHg2MDlmZmNlMSwgMHgxZWE5NGQ2YiwgMHg0NGQzZTk4NywgMHhjZjk3NWYzNywgMHgxZGIzOTA2NywKKwkweDlmMTFkOWY0LCAweDFjNThmYTJkLCAweDc1OWE3YmQ0LCAweDliNzNlOWExLCAweDdlYzBlZmRjLCAweDE4NWZjZjIxLAorCTB4N2Y5MTE5NzMsIDB4M2I5MzgyYjUsIDB4ZGJlZWY3MzksIDB4Y2U4MmNmYjcsIDB4NTVlNzQ2MTMsIDB4OGQ3YWM5MzYsCisJMHg0ZTQ0NGVkMiwgMHhkODQ2MTUzYiwgMHg0NWNmMGMxZCwgMHhkZjA3NjYwYSwgMHg5YjNlY2MwNywgMHhmOWFiZDYwZiwKKwkweDdiNDg2ZDJiLCAweDc5MWNjMWViLCAweGIyNmI0OTFmLCAweDRjYjJmZDYxLCAweDk0ZmQwZGJiLCAweDFhNTVmN2MxLAorCTB4NzBkYTI2ZDMsIDB4MGM2NzFhN2QsIDB4NzAzMWE5ZDAsIDB4Y2I0ZWU4NWYsIDB4NTNjZjFmN2UsIDB4MmM3NDdhOTksCisJMHg3MDU5MWNmMCwgMHgyMTczYzdhYSwgMHg5NzI4MzdiMSwgMHgxZDM3OTdjZiwgMHg5YjQyZTdlMiwgMHg3OGJkNDU0YywKKwkweDE0YzlhMTBlLCAweGZlYzc0NDU3LCAweGE5OWNmYzRjLCAweDNhNjRkZjUyLCAweDY0ZGVmMjQ2LCAweDEzNTZmMWU3LAorCTB4YTIwMjBmZWUsIDB4M2JhMWU3YzcsIDB4ODNjZDE4ZWQsIDB4MGU1YTZmNTIsIDB4N2IyNmFiOTcsIDB4NWJmYmMzMTcsCisJMHhkNTNmNzZlMSwgMHgzZTlkMTMwYiwgMHgxNjFmZTAwZCwgMHg0ZmZlZThjNywgMHg1NWYzOTE5OCwgMHgzMThmYWMwNCwKKwkweDdlOTVlZjgwLCAweGQxZDFjYjZmLCAweDE3MjUzNWJjLCAweDdlMTA5NmY1LCAweDY3MDRkZTIyLCAweDFiMjJiNjRkLAorCTB4ZGYzOGRiZWQsIDB4YjQ2MzZmZDAsIDB4YWY5Y2RmNDIsIDB4NWJlNzk3MWYsIDB4M2U1MWE3NjksIDB4NDM0ZjdhZmYsCisJMHg1OGIyZmNjZSwgMHhkNzM5MTNmNCwgMHhhNmJiNjBlNCwgMHg4M2I0NDZlNSwgMHg2ZmUzOTFiNCwgMHg2MTg2ZGVkOCwKKwkweDI4NWU2YmRiLCAweGYyMzhmN2I3LCAweGM4YjIzNjg1LCAweDUwZTllZDhjLCAweGMzYTA4NDVlLCAweGZlNzZlNDY3LAorCTB4MzBlZGUzNTcsIDB4OTdkZjc0YjMsIDB4OWYzMDVhNjAsIDB4YTNkZTk0MmQsIDB4YTM4YzQ2YTQsIDB4ZGRmYTFiOGYsCisJMHhlYmJmOTYzNywgMHg5MDI0N2VkNCwgMHhmYzcxN2JiZiwgMHgxZWNmOTMyYiwgMHhlZTFjYTEyYiwgMHhkYjJlZGEzZiwKKwkweDYxOWQ4YTI3LCAweDJlZGVkYjkxLCAweDNlZTg3YmYwLCAweGVmNGVkYzIxLCAweDg3NzZjODM2LCAweDBmM2Q0YzI1LAorCTB4Zjk0MWY3ODMsIDB4ZTBhZTVjM2EsIDB4YzcyZWU2ZTcsIDB4MDQ2YjhhMzEsIDB4NzdlNWYzZjMsIDB4YjQwZThhM2UsCisJMHg3M2VmNTA0ZiwgMHgwNGJiNzM2NCwgMHgxYzRiYjQ1MywgMHg2MTBkOWZiMiwgMHg5ZGEwMWJmNCwgMHg4MGZkZjBhMiwKKwkweGZhNDJiNzVmLCAweDNmMDA1YmE3LCAweDBkNmZjODAzLCAweDdiMjQyYmI0LCAweGM5MGRiZTg4LCAweGU3Yzg2OTdkLAorCTB4MDUzYmYyYTksIDB4NWNkN2Y2NDMsIDB4NDc4NWE3MmUsIDB4ZmU0MzRiM2YsIDB4NGZlYjhiMmUsIDB4Zjk4MmVmYzAsCisJMHhhZTQ3ODVmYywgMHg1ZTc4ZTAyNiwgMHhjZTcwMzE5OCwgMHhhYjQzZTI4NiwgMHg3YmYzYTcxNywgMHgxY2ZmYzdkOSwKKwkweGZlZDEwYWVkLCAweDQ1N2ZlZWNkLCAweDg2YjRkZDlkLCAweDVjZTVjMGY0LCAweGRmNWJmYzBmLCAweDhjYmVkYjA3LAorCTB4ODIxZDlkZWIsIDB4Y2RhNGVmZGEsIDB4NWZlNzdhZTUsIDB4N2FjYzdkZTQsIDB4MmRmN2E0NTUsIDB4MmViOTY1Y2UsCisJMHgwYWI2MWYyMCwgMHg3ZjI4ZTVlNiwgMHhlN2UxMWY1MywgMHg1ZTNmNTZlNiwgMHgyMTAzZDlmZiwgMHhlZDE4NDFmOCwKKwkweDgwNGU3M2ZhLCAweGFjZGM1YzNkLCAweGEzNWEzZjI3LCAweDhkYzQ3ZDI5LCAweGFmYzMxY2UyLCAweDcxY2I4N2IzLAorCTB4MWU0YjdkNzksIDB4MjRmM2YyMzUsIDB4NWIxN2FlMmUsIDB4MzlkM2Y3NWMsIDB4MjNmM2UwOTUsIDB4MjQzYmQ1YzMsCisJMHhiZWE1M2RjYiwgMHg3OTQ3ZGIwMSwgMHhmZTQ3OWE2MiwgMHgyMzY4NGI4MCwgMHg5NjRkYmZhMCwgMHg3Njc4YzE3YiwKKwkweGYzYzg2NGUyLCAweDEyYjkwNDYzLCAweDE4NDU2ODc1LCAweGVkOTNhYmI2LCAweDNmOGFlZGIxLCAweGU4YzhhMmEzLAorCTB4Yjc1ZWY4MDgsIDB4MWE1OGM4YjgsIDB4OGM4ZDJmNDAsIDB4NmUwZGRmOWYsIDB4MDFkY2NlZmYsIDB4YWZhNTVhN2QsCisJMHg0NTlmNzBlOCwgMHhmODljNTBkZiwgMHg0MzM5MDFhNywgMHhjYWI4NjU4YSwgMHgwZmZhNTE4ZSwgMHg3MDE2M2YzZSwKKwkweGYzOGMyYzVlLCAweDVhNjdiNzI5LCAweGU4MThkY2YxLCAweDk2MmI2YmI3LCAweDZkZjljNDhmLCAweDU4MmY1ZDE1LAorCTB4M2ZmYTFlNjEsIDB4ZTczOWQwMzAsIDB4ZWNiZTY1MGYsIDB4Yjg3MmY5OTMsIDB4NDNiMWYzZjUsIDB4ZjYzMThjYTAsCisJMHg5NzgyM2IwNCwgMHhjNjRlODBkNiwgMHg2OGZlNDA4ZiwgMHhmYjk0ZDRjYywgMHg1Y2IzOGM0MywgMHhmZDA4NjcxZSwKKwkweGFmZGNkNmZhLCAweGU2OTc1ZmE3LCAweDUxYWZkMDg2LCAweGM1MDQ3NjdmLCAweGQ0NjEwMjFmLCAweGY0MjExZDliLAorCTB4ZWM4MjEzZWIsIDB4ZWRjZjkwMGYsIDB4MWQ0OWQwOWMsIDB4MjcwZjMwN2QsIDB4NmY2MTFkNmUsIDB4OTE5ZWU4OTQsCisJMHhmNjA0NWVjMywgMHgzMjY3OGJjMywgMHgyMzlmNmY1MSwgMHgyM2M3YmMwYywgMHg2MDhjMzFkYiwgMHgyMjE2MjNiMCwKKwkweDY3OTk3MzVlLCAweGM1MDIwM2RmLCAweDQ4ZWU1YTUxLCAweDVjMDRlZWEzLCAweGE3YWQ5YjhmLCAweDM3MTFmYjI0LAorCTB4ZGM2MTNhYzIsIDB4YjJkYWY1YTEsIDB4MGNlMmExMTksIDB4Mjc0MDM4ZmYsIDB4ZWYwMmJhMjgsIDB4MDQyYWMwMDcsCisJMHhjNDg2OTVjNCwgMHg2M2UyODJjYiwgMHgzODE5NGUxOCwgMHg1YTFkYWJmZiwgMHg3NTYyYWVmZiwgMHgzNWUzNmFmYywKKwkweGFjMzBiZmVlLCAweDA0MjdmZTYwLCAweDJlYWExZjNjLCAweDBiYWU1ZjlmLCAweGUyYTljZjhlLCAweGJhOWQwYjVhLAorCTB4ODg3YzdjNjAsIDB4NmY4Y2IyNmYsIDB4MjkwN2I2Y2EsIDB4NDUyZDNlMGUsIDB4NjRhY2ZkZTQsIDB4YzcwN2NmNjQsCisJMHhiZDg1MGNiZCwgMHhjM2VhMmQwZSwgMHhmN2Y0OGMxNSwgMHg5ZTM2M2Y2MCwgMHg1ZWZmMjUxNywgMHgwOWNmNjMwNSwKKwkweDdkNWFkZTc0LCAweDU5ZTllNGRmLCAweDFjZmJmOGU3LCAweDhmZDhlNTJkLCAweDUwYzM1MzJkLCAweGFmYmUwZTNmLAorCTB4ZjA5YmM0YTAsIDB4N2RlMDRjOTgsIDB4MjJkZGU1NjksIDB4ZTEwZDYyY2IsIDB4NTNiNzdjYzcsIDB4ODc5N2UyYjksCisJMHg0YjEyYTZmYSwgMHg1NWVlYjljMCwgMHhkZDNlYTA2YywgMHgxZTg1ZjJhMywgMHg1OWQ2ZDZmNywgMHgxYzRmZWYxNCwKKwkweDgyZWMyOWVmLCAweGEzM2IyNGEyLCAweDY2YWE0ODc5LCAweDNjYzAwNzY0LCAweDg2ZmFlMmE4LCAweGNlMzQ1ZDk0LAorCTB4YzU4YzM1NGIsIDB4YWFhMDM4ZjIsIDB4NzA3NjAxM2MsIDB4YmYxODRmYTQsIDB4ZTMwZmNlMmEsIDB4NzZjMWMxNTQsCisJMHg0ZGVjY2RlNywgMHgwZGU2NGE0MywgMHhmY2NkZjllNSwgMHg1ZTM5MDY4ZCwgMHg2NDZlNDZmOCwgMHg2MzNiZTkxYywKKwkweDc3ZDQxOGQ4LCAweGE2OWY4YjJjLCAweGViMDRiOGY1LCAweDM0NTk3ZTgxLCAweDAzYzU0Mjg0LCAweDY4ZmI0MzM3LAorCTB4NWY5MGJhMDcsIDB4YzRkZmQxZTIsIDB4MzBjYWVmNTQsIDB4YzlmNzQ4ODcsIDB4YjM4ZTYyODQsIDB4ZjFlNGViMTAsCisJMHhmYzQ2N2NlMSwgMHg5NTA3MDg2ZCwgMHg5ODU5ZjgwYiwgMHhiY2UwNzA2YywgMHhjMzAwMGMxYiwgMHgzMzNkMDU5MCwKKwkweDU2YmU0MDI2LCAweDE1YWYzN2Y2LCAweDMzMzA4ODk4LCAweDRmZGM4ZGRiLCAweGUzNmJiY2E4LCAweDg2NmQ3N2E3LAorCTB4ZmY3NDA3ZWIsIDB4Y2ZlYzMwYmUsIDB4ZmE1M2JmYzcsIDB4ZGI4ZWYyMTksIDB4ZmIyN2JlMGQsIDB4N2RmYzFjY2QsCisJMHg5NTFkZjkxOSwgMHhmZjliODdmZSwgMHhmYjZkZGVlMSwgMHgyNzc3ZDRjMywgMHgzMjY3YmY3MCwgMHgyMGU1NmJkMSwKKwkweDRjYmMxMmJkLCAweDFlZmM0N2E2LCAweDRhYmRjMmU1LCAweDBjNzdhZGIxLCAweGZiM2MzN2RlLCAweGZkMWQ4NDcwLAorCTB4ZjBlMzAzZTAsIDB4ZWZlNWE5ZGQsIDB4ZWQ3NWZkZDEsIDB4OTM2MWUwMGQsIDB4OGMwZmJlNDgsIDB4YWZlZjZlNGIsCisJMHgwMmZkMTcxZCwgMHhiYzA2ZGFlNCwgMHg0ZmU3ODQzNCwgMHgyNzlkMTkyYSwgMHhjZjRhYjhiMCwgMHgwMDBlNzQ4OSwKKwkweDEzOTJhMGM2LCAweDQwMTNlZjAxLCAweGYxMGUxYjdiLCAweGYxNWJhZjczLCAweGIwNzEwYjlkLCAweGQwMmJkNDVmLAorCTB4NDI1NWIwNmUsIDB4NDgzYjA4N2UsIDB4YmYxOWFiNDksIDB4ZDVlMGFjMWYsIDB4MWEzZDA3YTgsIDB4ZjVjMzUyZTksCisJMHgzZWE2ZDllOCwgMHhlOTM1Y2YxMSwgMHhlNDQ1ZmFlMiwgMHgyZTY4ZTcxZiwgMHgzN2U4MDdjNywgMHgwYmY5ZDE5ZSwKKwkweGNlN2M5MjZkLCAweGRmYzRhNDcxLCAweGZiZTRjYjRkLCAweDg0Y2ZkMjliLCAweGZlNTkxYWQxLCAweDQ3ZmJkMmY3LAorCTB4ZDU0ZTIzYjMsIDB4ZjJjNjc2NGIsIDB4NDQyZmM1ZjYsIDB4MTFlY2ZjZmYsIDB4MDBkM2VhYTcsIDB4ZTE2N2Q4MmUsCisJMHgyYmE5ZDI3MCwgMHhlY2M2NjY2OSwgMHhkMTBiYWNmYiwgMHhlZjNiM2Y5ZiwgMHg4MDc0OTVkNCwgMHg3OGQ5ZjY4YiwKKwkweDQ2NDYxNGY5LCAweDA5N2RmOGNlLCAweDMxOWZkMTBiLCAweGQ1NTliNDYxLCAweGQ3Mzg1YmZlLCAweGQ1M2NkZmYxLAorCTB4Y2YyMTM0MWEsIDB4NWEzNmRmNjMsIDB4ZThjOTRmMzksIDB4ZjNiM2FkM2UsIDB4MmUzMWE3OTcsIDB4NDdmNjU0ZTksCisJMHhkZjQ4MmU4NywgMHhkZTBiMjI4MSwgMHg3MTdmOTMyMywgMHg5ZDBmMTQ1MSwgMHg5ZGQ5ZDMyOSwgMHgxNDUyZWVmOCwKKwkweDY4YmIyZGZhLCAweGZhMGQ0NzdlLCAweDZiZmU5ZmU5LCAweDQzODJmNGZjLCAweGNjY2E5Nzc5LCAweDFiZmY4MTJhLAorCTB4MmMyYjk4MWIsIDB4OTllZTgwMjMsIDB4OWY5ZDczNDMsIDB4ODFiOGE2MDMsIDB4ZmZkMjhmODIsIDB4Njk2MGJjMTAsCisJMHhiYzQwOThjNSwgMHgwYTNiNTFiNiwgMHgwZDBhMTc1ZSwgMHhjNzA1ODdhNCwgMHhmZDA4MmU4NywgMHg1NDljZjFkYiwKKwkweDJmZDZjZmM0LCAweDEwYmE3NWMyLCAweDAwMmE5ZmQ5LCAweDllYjc5ZTFjLCAweDdjNDJlZGQ2LCAweDFlYzE3NmZmLAorCTB4M2FmOGViMDAsIDB4YTIyYmVmNTYsIDB4ZDZhM2ZjNzUsIDB4MDI3YTNkNTEsIDB4ZGZjNWRiYmUsIDB4ZTM5NjY4NmYsCisJMHhiYmM2NGY1MCwgMHgwMTlmNjg3YywgMHgzMmI5ZDFkZCwgMHhmYzllOGE1ZiwgMHgwNWUzNjU0OCwgMHhiMDNmYTA0NywKKwkweGNiZjczNDZlLCAweDY5ZDM5MjVjLCAweDQ5Y2YxNjg2LCAweDAxZjc0YmEwLCAweGZhODVhZDgxLCAweGY1OTc2YmVlLAorCTB4ZWVjYzlmYTgsIDB4M2Q0N2EzM2MsIDB4MTljMGVlYmEsIDB4YWQ0YmRlM2QsIDB4YTlkYTE4NDMsIDB4ODQ3N2E2ZGIsCisJMHgzMmZlZmZkMiwgMHg5N2YyYWI1YSwgMHhkMWQ3NzYyOSwgMHhlOGY1ZWM5NCwgMHgxNmFiYWI3NywgMHhlYWRlMWVlOCwKKwkweDZlMWZiOWQ3LCAweDI1MWMzMmY1LCAweGIyZGY3NzYzLCAweDU1YjhmYzlmLCAweDk4ZjVlZWNlLCAweDQ3N2Q2NTJlLAorCTB4YzU4OGRkZjEsIDB4ZGNlYWFkMmUsIDB4MDg5YTkyYzAsIDB4Y2FiZTNjNTUsIDB4OTc4MmFiMTMsIDB4YzBlYWMwYjYsCisJMHgyMWI0YmIzZSwgMHhjMzFkZjU0OSwgMHhlZjgyY2Y1ZCwgMHhkMGZlMGUyOCwgMHhkNzkwYWZmZSwgMHg3MzZkYjE3MSwKKwkweDE2YmJmYTJmLCAweGNjN2FkNGJiLCAweDYyYjVjZWVjLCAweDExZWRlMjBjLCAweGZlY2UxYWVjLCAweDg0Yjc3ZTEyLAorCTB4MDBkMjEwOGYsIDB4N2RlNjBhYmQsIDB4YTNkNzA3NWEsIDB4NjQ4YzJhZWEsIDB4MGMyMjU0OWYsIDB4YWI1OTVhZjMsCisJMHg3MzkzZTNmNSwgMHg1NGY0NTM0NywgMHhhODEwZWVlZSwgMHhiYjk3MmRkYywgMHg1NzZlMDQ2YiwgMHhhOTc1ZjJjYiwKKwkweDgzOTJlMzhjLCAweDc1ZDFhNzI3LCAweDM3YTM5ZjUyLCAweGE1ZGYwMDMzLCAweDg4ZTdlNTE1LCAweDQzN2Q2NTFlLAorCTB4YzQ4NTU3MTksIDB4MjkwZDhkZjUsIDB4ZGRiMGU5ZWYsIDB4NTgxN2RmYTUsIDB4NGI4ZDFhNmMsIDB4YTkyZDQ3YTUsCisJMHgxZTU1YzM1MSwgMHhkNTllOTA1ZCwgMHhiZGY5NDNhNywgMHhmZjlkNDFiNCwgMHhiZWYyZDFmMywgMHg5MGYyYzc5ZSwKKwkweDJkMThkZTlmLCAweDA3MTg5Zjg4LCAweGJjYTUzZmUxLCAweDgxZWYwMjc3LCAweDBmM2FkMjVkLCAweGVhZDY3ZDIyLAorCTB4ZGY3MDBhYmIsIDB4MTE3NWE0YmIsIDB4N2U0Mzk0YWMsIDB4YjhhZmRmMWQsIDB4Y2UwMWEyYmUsIDB4NzUxYmVmYzMsCisJMHhhN2RlMzMwZSwgMHg4ODE0YWRmNSwgMHgwMGIwOTc2ZSwgMHhiMDZkMjdiZCwgMHhhMWRhYzEzZSwgMHg3NzIyYmY3MCwKKwkweGU0ZjU5Y2MzLCAweDk4MjgzZDBmLCAweDEzMjg2ZjUxLCAweDgzZGUyMjFkLCAweDhmYzYxYzZmLCAweDgzZTY1MTdlLAorCTB4MWYyZmFjMTMsIDB4MjI0NmNhZjEsIDB4OWVjYTc1ODUsIDB4OTlmNjgyM2YsIDB4Zjk5NmI3ZWMsIDB4M2Q5NDhlMzAsCisJMHhjNGJmMjA0ZSwgMHg0MzcxODA5ZCwgMHhjOTIyYTYxMSwgMHgzN2IwMzk5MSwgMHhhZDlhNDE4NCwgMHhmOTIwYWY2ZCwKKwkweGU2NmY1NjNlLCAweDU4ZGE2MmVmLCAweGZjNzBiY2EwLCAweGJlNzAxMzMzLCAweDBiYjI3NTEwLCAweGZkZTg3YjkzLAorCTB4OWI2ZDM5YmQsIDB4Y2M1Y2EyMmYsIDB4M2QxNDcwY2MsIDB4MTkzZGY4MDUsIDB4ZjI3ZmZiYzYsIDB4MTZiZmMxNzUsCisJMHgzZmNiYTlkYSwgMHgwYWQzZjI0NiwgMHhkNmZkODFlNCwgMHhkYTM5NjRkOSwgMHg1YWNmZjZhMSwgMHhjMTIxYWU1MSwKKwkweDdlYTdjYWNjLCAweDMyZjg5NDEzLCAweGMzZWQxNWQwLCAweDlmYTRhNTVkLCAweDlmN2VlNTU4LCAweGRkYjg5NDJkLAorCTB4MmU3Y2EwZmMsIDB4ZTJkNmY5OGQsIDB4ZDFiZWZhZjksIDB4ZjQ5NWYyOGMsIDB4Y2FhYmZiMWIsIDB4NWUyODMxMDQsCisJMHhlNjFhMzc1MCwgMHg0ZmFkYTU3OSwgMHg1YmU5ZGU3NSwgMHhlOTAxYmY2YywgMHgxODdkYjgyYywgMHgzOTVlMmFiZSwKKwkweDhhMmQ3YjRkLCAweGNjMWQ3N2VlLCAweGZlZThkZWIwLCAweDNlYThkNjk0LCAweDg3MzNhNGI3LCAweDUzYmJkZDA3LAorCTB4ZjZkOTlmY2IsIDB4Nzc3YmEwYTQsIDB4ZWVmNzQxMTksIDB4ZGRlZTgyZjIsIDB4MmRmOWVmYTksIDB4YmEwOTRlNzQsCisJMHhlN2JlYTc3NywgMHg1NGNkYjA2NywgMHhlNjkzMGZkNSwgMHg5Yzg4ZTBhOSwgMHgyM2Y1NTViYiwgMHhlN2Q1Y2JlZCwKKwkweGJjZmY4ZWFlLCAweDc3Yzc0ODQyLCAweDJlN2Q3ZDA2LCAweGUwNjY4Nzk4LCAweGMxOThlMjhkLCAweDBhMmYyNDdkLAorCTB4M2UxYTQzMmEsIDB4Njk4NGNjMmUsIDB4MGJhMWExNzMsIDB4OTEzOWE0ZTksIDB4ZTM4NmU3ZGIsIDB4YTBiYWRiMGYsCisJMHg5Nzg4ZTMxZCwgMHhmYzZmZTg4YywgMHg0NTJmZTA4OSwgMHg5ZjI4YzRmYiwgMHgxOGZkMTk1MywgMHhhZjMzZWQ1MywKKwkweDUyYmU3MDE1LCAweDVjZjJkYmQyLCAweDdkNjFmM2IzLCAweDQ5NGFmN2YyLCAweGRlZTAxZGZjLCAweDQ2M2ViOGQxLAorCTB4ZjkwMzZjN2MsIDB4YWY3ZTU1ZTYsIDB4NDc2Y2FjNzgsIDB4NWYzY2VkMjgsIDB4MGYzNTMyNTgsIDB4Y2M3ZmNmYmUsCisJMHhlY2UyODMzMSwgMHhmMDdlZmMxZCwgMHhhNzhmM2Q0ZSwgMHhlN2U1NWVmOCwgMHhmYTNiZjM1YiwgMHhmZTAwOGUzNCwKKwkweGY1Yzc5OTNlLCAweGE1OWM2NzkwLCAweGViYTkxZjE0LCAweGY5MTY1ZDg0LCAweDFlYWNlZGE5LCAweDc1ZDQ2NWVmLAorCTB4N2VlMTQ3NzYsIDB4YWIzY2UwNTYsIDB4NjBjOWJmNDcsIDB4ODljZmJjYmUsIDB4YWY2OGUxZmQsIDB4NzQzZGFjZmYsCisJMHg5ZTZkNmQzYywgMHg5OGUzZjg5ZSwgMHgxZWFiZDcyYywgMHg5MWJiNzJkNiwgMHhiOWUxNjYzOSwgMHg1NzVlNDU3MSwKKwkweGFiZTNlN2VkLCAweGU3ZTdhODVhLCAweDFkMWEzMTYwLCAweDljODM2ZTQyLCAweGMzOTZhYjNlLCAweDcwN2VmNTBlLAorCTB4Y2EzZDdmOGIsIDB4YWFkZjkwMGUsIDB4NGMxNzRiN2EsIDB4MTJiN2JiMjcsIDB4MzFmMjM2ZTQsIDB4Nzk3NTczYzgsCisJMHgxN2M5MTM3MiwgMHg3Y2FhZTc5MCwgMHgzYzgwZGU3NywgMHhkZjBlYmZjZiwgMHg0MjZhNzY5ZCwgMHg4MTcwZjM4ZSwKKwkweGRhNzhmMzQ4LCAweGZmZTY5NTM1LCAweGY0NDc5ODE5LCAweDY0MzMzZGE3LCAweGRlN2NmOGRlLCAweGM2NWViZTZjLAorCTB4Yjc1ODBmYjUsIDB4MmViZjdhZTAsIDB4ZjJmNmViZTAsIDB4N2RmYWYyMzAsIDB4MGE3NzVkNzksIDB4NGMyODQ1YmQsCisJMHhhMjcwY2VkZCwgMHg2MzQ2MjVkYiwgMHgzODdiOWUwOSwgMHgxMzY1ZjI5NiwgMHg3ZWFhZTFjNiwgMHhmZDNkZDAyZSwKKwkweDZlM2VlYjdmLCAweGJmNWZmZDQxLCAweGZkMDVhOGZmLCAweGEzZjZlZTYxLCAweDU5NGRiMDE2LCAweDhiNWE0ZWFkLAorCTB4ODVkMDNjN2EsIDB4YmE5ZWY1MWQsIDB4N2ZjMjJlOGUsIDB4NmViOGZiNjUsIDB4MjFkOTVmY2MsIDB4ZWUzZGZiZDAsCisJMHhkM2E3MTcwMywgMHgxMzVmNTkzOCwgMHgwZTc3MGJjNiwgMHhmMjhmZDc4MywgMHgzN2JlZmViOCwgMHgzMDdlZTI0ZiwKKwkweGZiODlmNDE3LCAweGRmODMwMWZkLCAweDgwMWQyMDJmLCAweDVlYmM0MjVjLCAweDM1ZTVmMDE3LCAweGIxYTM3M2I2LAorCTB4ZjUxZTk0MjIsIDB4MWY3Y2YyNmYsIDB4ZTg2N2E4ZDksIDB4ZWY4NWFmYWYsIDB4NTJjNzFjNzEsIDB4NDg4ZGU5OGUsCisJMHhiMjA1ZmI0NywgMHgyN2VkZGRiNSwgMHhmYjYwNDYxNywgMHhmYTg2M2FmNSwgMHgxN2RmODI4NSwgMHhlMjFmYmQyOSwKKwkweGQ2YTgzZmY4LCAweDM1ODBhN2ExLCAweGJlNjk2YjU2LCAweDUyZDdhODNmLCAweDc0ZmJkYTNiLCAweGMxNWUyZjA0LAorCTB4YWUxYzU1Y2YsIDB4MDkyOWE4ZmUsIDB4NTZhMGZkZGEsIDB4NTMwYzdiYTAsIDB4MzFmM2ZiZWYsIDB4ZTBhZjE3ODQsCisJMHgzZDMwNWFmYSwgMHg0YzFhZjQyYiwgMHgzYmY0YzE5ZiwgMHhiZTZiNGU4NCwgMHhjOTFlOWQxOSwgMHhlNGQ1ZWY5MywKKwkweGU3ZGMwMmIxLCAweDU5YTdkZDYxLCAweGUxMWU3ZTkxLCAweGFlMmJlM2Y3LCAweDdmYTFkNjFkLCAweDZjYzliZDMzLAorCTB4MzFlMDAyN2YsIDB4MGI3YWZmNWEsIDB4YmNjMzg5Y2EsIDB4ODc3NmIwYmMsIDB4NzQ4ZGU1YzAsIDB4NTI2MWYyMzcsCisJMHhiZGExOWViMywgMHg5NzFlN2VmYiwgMHg3YWUzZWY0YiwgMHhmYWQwZTNjNSwgMHgzMWFmOGMwNSwgMHhlNTFkMzdiMSwKKwkweDRmMWM5YTUyLCAweDJhYzc0NTdhLCAweDkwNWM1M2Y2LCAweGFmMzE5YmNiLCAweDk2ZWY1NGQ5LCAweGJkNzFlNTM3LAorCTB4NDA4MzkxNDMsIDB4ZTRmZGFlZTYsIDB4YzQ0ZjZkOTcsIDB4Y2IyZjE0N2IsIDB4ZTU1MzQxZTcsIDB4ZmEzMmIyZjYsCisJMHhmNDg1Y2ZhNywgMHg2NzJmNGNhYSwgMHhmODE0M2M2NCwgMHg2Y2ZmNGNiMiwgMHgxZjY4Y2ZkYiwgMHg1OWM3MmQ5ZiwKKwkweGQxNzQzNjY2LCAweDgzM2NjYzc5LCAweDg3OTQ1M2ViLCAweGFiZGY1MmIzLCAweDM5YWU3ZGM1LCAweDNhN2NlZGZkLAorCTB4MjUzNzhkNjcsIDB4YzlmYmUyMjYsIDB4ZDI3ODc3ZmMsIDB4NjBkNmRiYTcsIDB4OWMzNzJmZGMsIDB4ZTBlYzMxZDYsCisJMHgzODFlNzQ1MywgMHgzNWJjNmIyYywgMHg0OTQzOWM1NCwgMHg3YTI1NTdkZCwgMHg2YWVlYjA4ZiwgMHgzYzBhYTUzYSwKKwkweDdkMzlkMGY3LCAweDE3MDFkOTFmLCAweDVjOWYxM2E3LCAweDJkZGVhOWI1LCAweDdiYzY1NGZjLCAweDVkM2VmMjhjLAorCTB4ODBmM2Y3MjcsIDB4OGI4YjE2OWMsIDB4ZjMyOWViMDYsIDB4MWM2NTllODAsIDB4MmVkNjU4NmYsIDB4YWIzNWFmNWEsCisJMHg3NWE5MjE1OCwgMHhjZWZlMjllYywgMHgwMTQ5ZWQ2NiwgMHhhNDU4YmRkZiwgMHgzMDRjZTg3MywgMHg2MDhkZWZkZiwKKwkweGZjOGIxZjI1LCAweDM2NTcyNDFkLCAweDc0OGM0ZGM2LCAweGQ3ODRmYjJmLCAweGQ3YWY3MDRjLCAweGFmMjlmMDQ2LAorCTB4NjFhZGU5NDQsIDB4Njg3Yzg4Y2UsIDB4NGYxMWUxNjcsIDB4ZTFkYmNlMTYsIDB4ZGUyNzU2OTQsIDB4OGVmMGJjNTcsCisJMHgzMzZiYTY0ZSwgMHhkMzJlMmZiZiwgMHgyZDRlZTVkYSwgMHhlYjljNjIzMywgMHhjMmUzZTgwMCwgMHg1Y2Y3ZmUyMCwKKwkweGRkZmJhNDRkLCAweGEwZmVjM2JmLCAweGJmMGQ5NTlmLCAweGFmNjc3OTIxLCAweGVkMWQzOGI5LCAweDMzZGFjMmEyLAorCTB4MWJiYjA4NGQsIDB4ZjUxZDNjZmUsIDB4ZmY2MTBmODksIDB4ZjQxZWJkMjAsIDB4NzI4MDliN2IsIDB4ZDNiZDI0ZTQsCisJMHg4NjM1Nzk1ZCwgMHhkMzU5NzlkYSwgMHhjYmY5MWQzZiwgMHhmNzQwYTZmNywgMHhiOGVjM2U2ZiwgMHhmZGYyYjdhOCwKKwkweDc4NzNkYzg5LCAweGYyZmQxYzJmLCAweGI5YTNmMmIzLCAweGQ0MmNlOTFjLCAweDI0M2FmYWQwLCAweGRkZWIzYmQ1LAorCTB4MGEyYmZmYTMsIDB4MjBkOGMzZDcsIDB4N2UwYTdhZmQsIDB4Yzg2NWEzZGYsIDB4ZmI0YTliYmYsIDB4ZTQyMWNjYTMsCisJMHhkZmY0NjllZiwgMHhiMDcxZjM2NSwgMHgxNWU1YTFlYywgMHg5ZTE2NWY3YSwgMHhlOTkwYWM5MywgMHgzY2JjYjgzOCwKKwkweGExM2ZjMDdmLCAweGViZWZjYTczLCAweGExZmUwMTA4LCAweDNmZGZjNjJhLCAweDJiYTdiYjA1LCAweGFhYjhmODFjLAorCTB4NjdmOTJhNzMsIDB4MGRjMjNjYWEsIDB4ZDFjMzMzZmQsIDB4ZWI0ZGQ3ZTEsIDB4MjhjZmY3MTgsIDB4ODE4ZGRhMzAsCisJMHgxYmI0NGQ3ZSwgMHgxZjdmYWE5OSwgMHgyNTJiMDc3ZiwgMHg3NGY3ODZmMywgMHgxNDg5N2RkYywgMHg2NjZiYWZjZiwKKwkweDc5NWFlZjE0LCAweGU3YTUzNDc1LCAweDIxMjBkZjVmLCAweGZiYzMxOGZmLCAweDZiN2VlOTViLCAweDhjZWM4NmI2LAorCTB4ZmViNTNlOTUsIDB4Y2I4MGE1MzMsIDB4N2MwNTI5ODUsIDB4NjBmOTVjZGUsIDB4MDFiMGU1MmYsIDB4YTJlYzA5N2IsCisJMHg1ZGI5ZjM3YiwgMHhhOTg4NzUxNCwgMHg3Y2UwYTVlYywgMHhmMjhjOTdiMiwgMHgxMzEwMWQzZCwgMHhlMDQyNTdhZSwKKwkweDY5NDE0NzdkLCAweGNhOTc3ZTBkLCAweGQ5Y2U4ODVhLCAweDcyZmVmYzNiLCAweGU0ZDczOGYwLCAweGY4NTUzZTczLAorCTB4MzVmMjMxN2EsIDB4ZTcwNzZmZDIsIDB4ZTc3NmUwZWIsIDB4NDFhYzk0MTUsIDB4NGMzOGRhM2UsIDB4ZTY1Y2FiN2MsCisJMHg4YzZkOTVmYiwgMHgxNmRkY2JlNiwgMHgwNWY0ZjM0MywgMHgwMjk2NzM2YiwgMHg3ODAxN2U1ZCwgMHgwYmQyM2RlMCwKKwkweDM0NDQ2NzRlLCAweGU1YzE3ZjdjLCAweDNkZjNjMDhjLCAweDZiYTgxYzhhLCAweDM2ZWZhNzBiLCAweGM1OGJjZTY2LAorCTB4NDhjZGEzNzMsIDB4ZjlkZWQwZjcsIDB4OWM0NmE5OGUsIDB4MzhkYTdiZTcsIDB4N2RmZDI5ZmYsIDB4MTYzOGI1ZDgsCisJMHhhZTgyNjlmOSwgMHhmMjg3NmY1ZiwgMHg1MTMzY2VlNCwgMHg3ODRkZjdhOCwgMHhmMjJjN2U3ZCwgMHhmZTc4NzBlMSwKKwkweGNmMTkxOGZkLCAweDFlMTJjNDg2LCAweDcwYmQ4Nzk3LCAweDAwNGY2Y2EyLCAweGJhMjdlZTdlLCAweDg3ZmE5ZGU4LAorCTB4NmZkMTE4MWEsIDB4NTZmZmFiZjcsIDB4YmU3YzdjODcsIDB4ZmI4Y2MyMzMsIDB4MjMwNzE3ZTYsIDB4MGJjYWJkZTgsCisJMHgzZGU4MWE2ZiwgMHg3ZGY5NWE5YSwgMHg3ZDc0MmZkNSwgMHg3Y2JmNDg3MywgMHgyMmY3NGI1ZCwgMHg0N2ZlNmZkZCwKKwkweGZiYTNmMjJiLCAweDNiOWQwMzU1LCAweGMzNzNhODdjLCAweDZhZjdkYzQ1LCAweGMzOWM2NzNiLCAweDVmNmI1Njc3LAorCTB4YzNmMmRiZmEsIDB4ZDI1NDg2Y2EsIDB4M2ZmODE0OGIsIDB4YmUyNzQ2YmMsIDB4ZTQ1ZTdiZjMsIDB4OGVhMWUyNzIsCisJMHhmNzdkMjE3ZiwgMHgwYjk3NmJhMSwgMHgxN2NhN2NmMCwgMHg0NGM3ZmYwNywgMHhiN2VlNmI5NCwgMHg3OTQ0NGYyZSwKKwkweGU1YzVmZWU2LCAweDdlZWU1ODg5LCAweDRhMTNjMjJkLCAweGMwNWViOTVmLCAweDdlY2EzZWZkLCAweGE4YWVmNjk5LAorCTB4OTBhZDBmZjIsIDB4NWQ2ZDIzZTksIDB4M2QwN2JkMGIsIDB4N2IwMmU0ZTEsIDB4MTMwZmJiZTAsIDB4YWM0ZTM0YjIsCisJMHg2NWI3ZTEzZiwgMHg3YzA1ZjdiMSwgMHhhNDU3YWViNywgMHg5M2Y4ZTMzOCwgMHgwMWQ1MTE2NSwgMHg4MTRmNzk3NCwKKwkweDdlMmZmMTRlLCAweDkzMGViZjIzLCAweGYwMTljN2RmLCAweDc3ZjJmNGUzLCAweDhhZjYzNjdmLCAweDFhYTM3ZGZjLAorCTB4ODNhMWVlODEsIDB4NWVlNDMyZmUsIDB4OGFmZmFkMWEsIDB4ODhkZjdhNTgsIDB4YzczYmNlODksIDB4OGIzODQ3OGMsCisJMHgzZTYyMDVkZSwgMHgwMGNjZDFlMywgMHhhZjcxNjkzZCwgMHg3NDAwY2JhNiwgMHhlODY5ZDE1NCwgMHg1N2JlZmQyMiwKKwkweGFjYjA0MzNjLCAweGYxNzNkZDNmLCAweDIxMzRjOGQzLCAweGU3MjY3Zjg0LCAweGUzOTQzNGQ0LCAweGY4MWE3ZWMxLAorCTB4OGFkZTIyNDUsIDB4NzFlOTU1YmUsIDB4YzFmZTIwYTUsIDB4MTVhNTliZmUsIDB4Mjg3ZjkwNzcsIDB4ZDY5MzdmZDgsCisJMHg4ZjY2NmEyYiwgMHhlOWRmZjdjNywgMHhmNzhjMmYzYSwgMHg4YmYyMjM2OSwgMHhmYWUyODdhMiwgMHhmZmMxMDgxZCwKKwkweDM5NzBjNjZiLCAweGJhZDVmMGE2LCAweDVkZmYxZTVlLCAweGNjNmE1YmQ3LCAweGU2NTZiNDg0LCAweDlkYjAwM2FiLAorCTB4NzVmZGEwZmEsIDB4YTM3N2YzOWQsIDB4YjVkZDYxMWYsIDB4NjA2MzExNDUsIDB4M2JiZGQ2YmUsIDB4ZmM4MTNkOGYsCisJMHg2NjM1MmU2ZiwgMHhlZWQ3NzdlMSwgMHgxZmNjMmUzMCwgMHhmZWUwOTdhNCwgMHhmMmUxOGNhNiwgMHgxODRmNDA3MiwKKwkweDk3Y2JkZjY2LCAweGVkNWJmYWYxLCAweGU0NjMzOTdmLCAweDg3ZmY2Y2YzLCAweDg3NjA3ZmVmLCAweGVkYzMxZDhmLAorCTB4NGZkYzI1ZjAsIDB4ZTBmMGVkYzIsIDB4Yzc5MTQzN2QsIDB4NzkyZWJiNGEsIDB4NjNjYTg3OWQsIDB4YzA0ODc3ZmUsCisJMHhlYzc5MjY1ZSwgMHhiZDUxMjMxYSwgMHhiMWI5Y2VlNCwgMHhiYmJmNDc2NCwgMHgwZDMyNTYyMCwgMHhiNDQzM2Y2ZCwKKwkweDg3ZjI2MjZiLCAweDcxZThhZmI2LCAweGE4ZTM5ZjZlLCAweDg3MWNlZDExLCAweDE3NDlmYjk2LCAweDk5YmVmNDA4LAorCTB4OWRiOWY3YTIsIDB4ZWVlM2U5MDIsIDB4ZWIxZjlkNGEsIDB4MmVmNTc4MjksIDB4ODVkNTdlZTAsIDB4NGMzZjlkMGUsCisJMHgxNTBmZDQxOCwgMHhkY2EwNzFmZCwgMHhhMmI5NTAyZSwgMHg2MzdhMmE0ZiwgMHg3MWZiOTNhZiwgMHhlNWU3OGMxNywKKwkweDE2Yjk4NmI3LCAweGQ4N2Q3Y2UxLCAweDEzZjk0NjE1LCAweGM2N2NmMTI2LCAweDAwOTM0NzljLCAweDgxM2RmNDVlLAorCTB4ZmFjYmZmMTEsIDB4YzFhNzQyYTQsIDB4Y2VhNWU2ZmEsIDB4ZDdiZTFiOGMsIDB4NGZhNjRkYjMsIDB4ODM1MmNmODUsCisJMHhiZmQ5NDNmOCwgMHhkZDM5ZjM5YSwgMHgxZGZlZTFkNywgMHg3ZmY3ZmI4YiwgMHhlMGYyZjRhYSwgMHg3ZWZmNjE3NiwKKwkweDQ2NmZmMTA4LCAweDFmYmUxMjFkLCAweDE5ZDE1YmZmLCAweDRhZmYzZWNhLCAweDVlZmUwYmQ2LCAweDIzZGViZjU5LAorCTB4NzJhZjg4MjUsIDB4N2RiODc2NGUsIDB4NmZkNjRlYjUsIDB4Y2U2ZjJiODYsIDB4YmNmYzdhZmYsIDB4ZGZkZjFlNDcsCisJMHg4ZTc3OWY4YSwgMHg5ZjQzYmZmOSwgMHhmNTBiZDAxZCwgMHg0Nzc5YzdhMSwgMHhjNjRmYzk0MSwgMHg2Yjg2YmNjMCwKKwkweDczOWU3NDNkLCAweDFlY2RmN2I4LCAweGIwNTVmNTk1LCAweDdjNzQ1NTczLCAweDQxYWY0NTM0LCAweGMzNWRjOGJiLAorCTB4ZDFjZDAzZmQsIDB4N2VjOWFmZDIsIDB4ZjdhNWFlMzksIDB4ZWY5MjFlNTcsIDB4ZDU3ODNlNzMsIDB4ZWEyZDY5NGMsCisJMHhkOTJlOTBjOSwgMHhkOWRlOTI3YiwgMHhjNmEzNTI1ZCwgMHhiNzdkMTliZiwgMHgzNGFhZmRmOCwgMHhiMTU3ZWI4YSwKKwkweDU1MmJmMjMyLCAweGYxOWI0Njc1LCAweDdjNzM3ZmJjLCAweDJiZTQzMWZiLCAweGI0YWQ2ZWRmLCAweGM2ZmViMDNiLAorCTB4MjM3ZDcyZDEsIDB4NDRkNWI3ZjcsIDB4NjE4ZmRmZDMsIDB4OTU0MDdhNDEsIDB4NTdkZjU4MjcsIDB4NjQ1MzA1ZWIsCisJMHhmYTcwZDEzZiwgMHhjM2JhMmZjMSwgMHhkMWU5NWNiOCwgMHgzOWQ3OWYxMiwgMHhkMDU1ZGZmOSwgMHhlMGI5NzI3NywKKwkweGJmMjMwODZlLCAweDg4NmJkYTA5LCAweDgyMGQ2N2Q3LCAweDVmM2RkZjFmLCAweDRjZmJkNzI5LCAweDEzZmYyNWVjLAorCTB4Y2FhMGQzYzUsIDB4MmNhN2NlYjksIDB4ZDRkZmIyMGUsIDB4YmI5NWEzZjEsIDB4MzM3MjRiN2UsIDB4NzMxNDhlMzgsCisJMHgwZDBiOGU0MCwgMHhkMjI2OGRjNCwgMHg2MDk1OTA3OSwgMHhiYzlmZTI0ZiwgMHg1ZGQyNGI3MiwgMHgxZjgwZmYzOCwKKwkweDcxZGM5M2YzLCAweDk3MzBmY2E4LCAweGZiMjIzZTdhLCAweDNjZWJjOTczLCAweDdlMjQzM2ZlLCAweGM3OTMzY2Q0LAorCTB4OTVkZGYwOGYsIDB4YTVjODdlMTAsIDB4YzUxZDhmMjMsIDB4YjM3NGEzYmYsIDB4Yzc1ZDUxYjgsIDB4MzI0N2JhNDksCisJMHhkMjA4ZmY0NCwgMHg1MThkYWUzYiwgMHg4YTQ3MTlmYiwgMHhiMjNiOGZkYywgMHg3ZmEzMzA1MywgMHg4ZjNjYTQ2YSwKKwkweDljMzFiNzdmLCAweDdmZTllYWY0LCAweDc5NDU4ZWE4LCAweGY5ZDNhY2EwLCAweGNmNWU3Y2I5LCAweDA0YTU3MDdmLAorCTB4MDdmODliYmYsIDB4ZTMwNjFjZDEsIDB4ZjUwN2M1ZmEsIDB4YjBlMjQ5YmYsIDB4YmJmMDk0NjQsIDB4NjNiNDA4ZmEsCisJMHg3NTYxZmZjZSwgMHgyZmViY2UwNCwgMHgyZmJmYzUyMCwgMHgzMTY5ZGFmMSwgMHgyYmQyM2ZhNCwgMHgwZmQ4MmRjYiwKKwkweGJmYzgwYmEzLCAweDQ1YTVmYjJjLCAweDA3MjMwZmQ4LCAweGRmYzEzOWZkLCAweDZiYmY5NzZkLCAweGZjODUzMzA2LAorCTB4ZjhmM2FmOTgsIDB4NmI4MjczN2UsIDB4YTZjZmMxMjYsIDB4YTYxZWZlMzMsIDB4ZmZjZWZjODMsIDB4ZmU4ZDc0MDIsCisJMHgyYzE4M2NhMiwgMHgxYTdmOWZjNiwgMHhiYzYxZDZjZSwgMHhmNWRlMzlhOCwgMHhiM2QxZjEzNiwgMHgwOGY5MDkxYSwKKwkweDkzMzhhN2JlLCAweGZiNDRiZjZmLCAweGM2MTk0ZTIzLCAweGZjZjQwYTczLCAweDBjZWE0NjVkLCAweGJjYjQ2YmQ2LAorCTB4Yzc2MDA5OGUsIDB4YjAwOTNjNjIsIDB4ZTZmMTgwNTksIDB4NTNhZTM5M2MsIDB4NmM0NGNlMTAsIDB4NmI5ZDQ5ZmYsCisJMHhmOTk3YmUxMywgMHg1ZjY4Yjc2NCwgMHg4ZjYwNGM0YiwgMHg4M2JmNzdjNSwgMHg4MzgyNGJlMywgMHgzODk1YzVjNywKKwkweDFmMWYxMjkzLCAweDYwMjRjZTJlLCAweGVlOWMwNTNmLCAweDg3MTViOWY4LCAweDI1NzM3MTgwLCAweGU3YmVjNDllLAorCTB4NjM1NzIwYTQsIDB4ZjdjZTg3YjEsIDB4NDhjODUzM2YsIDB4NzE4YjdmYWUsIDB4MjFmOTI1OWUsIDB4YzgzNTQ4ZTIsCisJMHhkNWNmMjQ2MywgMHgzOTRkYzU3MSwgMHhmZTlkMTBhZiwgMHgzZGM0ZjFiNSwgMHgxY2I3ZDg2MywgMHgxM2YzZTJmZiwKKwkweGU4ZjhmNzhjLCAweGI3YjIxNjRiLCAweDUxZWZmYWJlLCAweDVlNzZjZmI0LCAweDQyZjBmZGE2LCAweDhmYmU0MWJmLAorCTB4ZWNmZGM3ZDAsIDB4MmZmMjNhOWQsIDB4MmRiYjAwNWMsIDB4M2Q5ZjYwM2UsIDB4M2RkYmNmOWEsIDB4ZTg5NTM5ZDQsCisJMHg1OTZmNDBmZiwgMHgyZjNmZDYwNCwgMHg3NzdjNmZlNywgMHg0OGQ5ZmNjMSwgMHhiZDIyYmQ5NywgMHhlM2U3OGIwNywKKwkweGQwM2IwZWQwLCAweGJkNDA0ZTJiLCAweDk3NWM1YmU1LCAweGIxMDk4ZmVmLCAweGQwZjBjNjJlLCAweGNiZTQ0Y2VmLAorCTB4YzA1Zjk0N2MsIDB4MDdlYTYzZTksIDB4ZDc3MmZlZGMsIDB4NTk4YTM4ZjMsIDB4NzJlZTBiOTYsIDB4NjNjMWM5M2QsCisJMHhmMTQxMTYyOSwgMHhjNTQzNWI5ZiwgMHhhN2VmNWU1OSwgMHg4NTZhYTM3ZCwgMHhiZTFjZjc0MCwgMHhhM2E1OWM3MSwKKwkweDgyYjdkZTViLCAweGQzZTVkM2ZjLCAweGU3MGU2ZTQ5LCAweDliODgwZWI3LCAweDE1YjdjYWFiLCAweDIzODc5YzBjLAorCTB4ODE1NDc1ZmYsIDB4ZTMxZGM2OTksIDB4YjNjMTJjMjksIDB4YmZmOGNhODcsIDB4NzNiODc1YzUsIDB4ZmIzYTA4NmMsCisJMHg2OTVmZGIxNiwgMHg5ZmRiNmVmZiwgMHhiNmRkZjc5MiwgMHg2ZTNiZTZiZiwgMHg3N2RlNmQ3ZiwgMHhmMWRlZTcxYiwKKwkweGY1N2ZlMzFkLCAweGNjZmY2ZTNiLCAweGFmM2YzYzc3LCAweDczZmZmZmU1LCAweDcwNzAwMzAwLCAweDVjZjgzZjljLAorCTB4ZGZiYzcwNDAsIDB4MWYzZWZjNzAsIDB4MzYxMDZkOTYsIDB4NmE0MTc3ZjcsIDB4NDJiNTdhOGMsIDB4NDYyZDUxMDAsCisJMHgwODc3YTJlZiwgMHg3MWUyNGQ2NiwgMHg0NjY1OGRiMCwgMHhmMDYxMGVmZiwgMHg1ZjMyODA3YywgMHgxZGI5MGI0YiwKKwkweGU4YmZjZTYxLCAweDRlNzk4NThiLCAweGM1OTZmNDc1LCAweDEyNmM5ZmEyLCAweDgyZmQ4NzdmLCAweDEzMmFjZWZjLAorCTB4MThjZWY0Y2QsIDB4ZmJjMDRjZDQsIDB4YTE2MWNkZjEsIDB4NzI2MWFhZTMsIDB4MjNlZGMzN2IsIDB4ZGM5NjE3Y2YsCisJMHhmZTllMzYzMSwgMHhmYmM4NDM2YywgMHhmZWM4MmYxZCwgMHgyMzA3NzM0NywgMHhhNTEzMjRiZiwgMHhhZmQ0Nzk4NCwKKwkweGQwZmE4MDk0LCAweDNmM2MyMzg4LCAweDc2Mzk4YmFhLCAweGRhNTI1ZTEwLCAweGE1MDdiMjNjLCAweDhiNmZjNDM0LAorCTB4OTk4ZGVmMWMsIDB4ZmU4NjlkOTksIDB4MGJkMDE4ZTgsIDB4MTRmODFlMzEsIDB4OGUyOTA1YzYsIDB4NGE3YWE2NjUsCisJMHhlNThjMWY3ZiwgMHgzMWQxNmRmZCwgMHhlNTViZWU4MSwgMHhhYzRjZjNmMiwgMHg5ZTJhYTBmOSwgMHhlYmFlOGVmNywKKwkweGM1MDI2NWUzLCAweGZlMjM5NmYzLCAweGU1NzRkMmJmLCAweDg5OTM0Y2VmLCAweGZmMzdlNjE4LCAweDhjZTI5OTgwLAorCTB4NDhiZDI2MjcsIDB4ODk1Njc3N2YsIDB4ZjMzMWFkZWYsIDB4NmVkMTg3MmEsIDB4MWNkNjNjMDYsIDB4YmJmNDQ3MWMsCisJMHhmN2E0ZDBlNCwgMHg3NzMzZTlmMSwgMHg3NTBmNjhhNiwgMHgxN2YxNTE0ZiwgMHgxZGZkOTY5YywgMHg4OTQwYmY4YSwKKwkweGY2NWVmZDZiLCAweGZlODg3YzkzLCAweDIyMWZiYTE3LCAweGFiMWRlYTUxLCAweDI3ZjdiNmY5LCAweGZjMTBkOGVmLAorCTB4ZmVlMDQ1YmYsIDB4YjhhZmRmMjEsIDB4ZGU5YzY4N2YsIDB4NmU3ODExOWUsIDB4YWYzY2IzNzIsIDB4ZGM3OGJhY2IsCisJMHhlY2Y3ZjE0MiwgMHhlZTMzYzc5MywgMHgwMTk3NmQxMSwgMHg0ZDcxZDJmNiwgMHhjZmI4ZjQ2MywgMHgwOTRhNmI4ZiwKKwkweGUxYzBiNGM3LCAweGYwN2RlMGQ3LCAweDM1ZmJkNWM1LCAweGEyODVmYWNhLCAweGIyYjFkNmEzLCAweDlmYTdhMzFmLAorCTB4MTJmZjdhZTIsIDB4NjBmZmU3MTQsIDB4MzBiZjNmMmMsIDB4ZjFlMzkwYWYsIDB4MDgyNGQ4MDEsIDB4MWIxMmM5YWYsCisJMHg3MTFjN2Q1MSwgMHgyYTFiNTk4YiwgMHg3NjA1NTQ5ZSwgMHhhY2I5ZTIzMSwgMHhjY2FkZTM5OSwgMHgzNDk3NTU3NywKKwkweDczMzlmYjE1LCAweGQzMDliZmI0LCAweGE5YjQ5YWEyLCAweGJkYWY2ZmU0LCAweDliZmE4NGQ4LCAweDYzZTVkYWZiLAorCTB4NGNiZjkzYjcsIDB4NzEzZGExMmYsIDB4ZWZkYTlmNGYsIDB4YTVhMzBhYjYsIDB4ZmQyNzg0ZjEsIDB4MGNkZjVhOWQsCisJMHg3MWUzZWM5MSwgMHg5ZmEyNDQzMywgMHhiMjMwYWE5OCwgMHg0Yzc0NjM1ZiwgMHgyZTc4NDI2YiwgMHhjYThhOGJkNywKKwkweGNjMjJhNmUzLCAweDNlOTM0NDE2LCAweDQ1MjNkNDU4LCAweGU4M2Y5N2RmLCAweDUxOTk4YjA3LCAweDc0ZjM4ZjFmLAorCTB4ZTJhYWY4YjMsIDB4Y2MzNWJiNGYsIDB4ZTdhZTFhZjEsIDB4NWQ1ZjFiNWYsIDB4NzRiYmNlZjksIDB4OTcxOTU0YWUsCisJMHg5YzRhMmYzMiwgMHhhYWY4Yjg3NCwgMHg1ZGMxY2U3MiwgMHgyZTc1NDU3ZSwgMHg0ZmY2MmRjMywgMHhiOGUzZmY0NywKKwkweGYyZjQ2NzgzLCAweGZlMzM0YjM5LCAweGZlMjU2MTFkLCAweDhiZjVlZTNhLCAweGUyNTU3NzE0LCAweDQ1Y2Y2ZWFjLAorCTB4M2JlMWFiZDIsIDB4MGUzZjdlM2QsIDB4MDYyMTNmOTYsIDB4ZjFlMjE3ZGYsIDB4OWVmMTU3ZDcsIDB4ZmZlZjFlOTQsCisJMHhkNGJlZTk5OSwgMHhjNWZkZjIxYiwgMHhlNjNmMTg0ZSwgMHhhMWNkZTliZiwgMHhhNzZiY2JiNCwgMHg5OGI3OTBmNCwKKwkweDQ1ZTc3NzUyLCAweDM4N2VkNzhhLCAweDUzZWYxZDU2LCAweGI0OTc3OWUyLCAweGQ1NjMzM2NlLCAweDBlMDkyM2U3LAorCTB4YzM2OWY3OGUsIDB4ZGRjNmJmYjksIDB4OTdiZmEzYTMsIDB4NDhjNzdlZTEsIDB4NzNhNGJiZjIsIDB4ZmFlYmRkMTksCisJMHgyNDZiYTRmMiwgMHhmMTg3NWRlMiwgMHgzOGJhMDBiNiwgMHhlMTg3YjBlZiwgMHg5ZGU3NjEzYiwgMHhiMzhjMzBmNiwKKwkweGE3M2VlYjhkLCAweDc1MmZmM2M3LCAweGZkMWVhZjYyLCAweDEyNzE4MDYxLCAweDFmNzQ0ZDFlLCAweGY3Y2ZjOGI4LAorCTB4ZGZkMDk2NzYsIDB4NWM2OWJhZTMsIDB4MTM2ZmUzYWMsIDB4ZTU5ZmZiMTcsIDB4MDAyMTAxNDEsIDB4MDAwMDIxMDEsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgxN2I1ZmYwMCwgMHg2NzUzNGM1ZCwgMHhiN2I3N2NmNCwgMHgwYmRmOTZlNSwKKwkweDcyMjIzZjJhLCAweGEyOTg2MmMxLCAweGE3NDBjMmRjLCAweGFjNzQxNjMxLCAweDRhOGE1YzEzLCAweDY2YjUwMTAyLAorCTB4MmQwOTkyMmUsIDB4Y2JjMmNjZDksIDB4MDE4OTNhZDIsIDB4YjhiMmMzZGQsIDB4MjZhOWYzNjQsIDB4ODdiNmU4ODMsCisJMHg2ZWFkOTNmYSwgMHg4NDBiMGI1NSwgMHhjM2UyMmUyNSwgMHg1MmM5NzE5YywgMHhiYTMzMzMwZCwgMHhkOGRjNjI4MSwKKwkweGRmMzlkODVjLCAweGQ4YmRiNWJkLCAweGE0ZGEyY2JkLCAweGRmM2YzZDM5LCAweGZmZjlkZjM5LCAweDA3MzAwMDBhLAorCTB4Yjk1NmU3ZGEsIDB4Zjg0Y2U3MDYsIDB4ZmZjNmNmYTUsIDB4NGZhNDNkMGYsIDB4YmRkZGUzOGMsIDB4MTcyNmViNGIsCisJMHgzZWJiZjFjNCwgMHgwMzY5MzVjOSwgMHhjZTljNWRmOCwgMHhmNjAwMmI5NCwgMHgxYzVhY2U4NywgMHhhY2NmMWYwNCwKKwkweGVkZmMyMTc2LCAweDRhYjVkZmMyLCAweGQyZjc4MDNhLCAweGVlMjAyZDRjLCAweDk2YTY2NmZkLCAweGQyYWZkZWY4LAorCTB4NGZlOTAyN2EsIDB4OGVkNzdiZGIsIDB4NzAwNDVlOTcsIDB4MTA2YjQxOTYsIDB4YzEyZTU1ZjksIDB4YjhlMDgyNzEsCisJMHg0NTQ2ZmFjMywgMHgyNWMwNmU1YywgMHg4MGZjZTkzOCwgMHhlODliMzRhZCwgMHhkOWE1NWNjNywgMHhmNWY0MTM3YiwKKwkweDAwNjc0NTM5LCAweGRhYWYzOWU5LCAweDA5ZjQ4OWFjLCAweDA2YTAxOWJiLCAweGMxNWMwY2U5LCAweDU1NmJmNjI0LAorCTB4N2ZkZmRiODEsIDB4NGE0ZjJhZDIsIDB4ZGJmMTFjN2EsIDB4ZTAzNmNjMWQsIDB4M2M4MTUwZGUsIDB4ZjdjNzFlNTksCisJMHhmYzAyOGZkMywgMHhkNDIyNjY2ZSwgMHhiOWU5NzQwMiwgMHhkNzcyNjRiOCwgMHgzYmFmYThhYSwgMHg1MjgxNmEzZiwKKwkweDVjNWI0Y2EyLCAweGRmNWUzMGFiLCAweDEyYWNmZDRiLCAweGJlZmNmODYwLCAweDE3MDU2OGUyLCAweGEwMTcyMDk1LAorCTB4ZTAzNzNmNGQsIDB4YjE5YzViZGMsIDB4M2Q3ZmMwMTAsIDB4NDY5OGNhMDUsIDB4NGFkZjkxMTMsIDB4MmE4ZTE0M2YsCisJMHhhNzY5ZGEyMiwgMHhiNmU1Nzg1ZiwgMHg0YzI3ZjdmYywgMHhjZGJhMTFhYiwgMHhiZGMyNjhmZSwgMHhjMzgyOWRkYSwKKwkweDJlZWRjOTlhLCAweDc5MjBjZTZkLCAweDIxMmZjZTMxLCAweGI3NGJkM2E1LCAweDUxY2MyMmFkLCAweGY0MTNlNDI4LAorCTB4MDI1YWMyMTcsIDB4MzZhZGE4ZDIsIDB4MDQwNmVmNmUsIDB4N2NhMWIwN2UsIDB4YTQ4ODUzOWIsIDB4NzBkNjlkYTAsCisJMHg2ZjUwMDQ0YSwgMHhkZjA0NTM5NSwgMHhjZDdiMDg4YiwgMHg3YzQ2MTI4MSwgMHgyYmU3MjZmMSwgMHhiZjExMzY2ZiwKKwkweDA0MmFhZTRmLCAweGNiZTdlM2Y0LCAweDA5NDE3OTE2LCAweDM0NjRkZmJmLCAweGYzYWE4ZTIxLCAweDNjNTJmZWQzLAorCTB4OTUzMTc2YWYsIDB4MzRlZjZhZGMsIDB4NDE5M2YxZjIsIDB4ZTNkNmVlN2UsIDB4ZmMzNDMzYjIsIDB4NWZmNzIxNzIsCisJMHhjYjllMDEzNiwgMHg4ZTM4MDMxZCwgMHgxOGY2Nzc3NiwgMHg3NTZlZWRjZiwgMHgzZjc0NjFkZSwgMHgzMzdmYTBmOCwKKwkweDkwNGQ4MWNhLCAweDZiZGU4OTA3LCAweDNiM2FhMzk0LCAweDAwMWZmMThkLCAweDQzZDYyNjcwLCAweDBkNDFkNTM3LAorCTB4ZTdlMWM2NDEsIDB4NDVkNTEzZTgsIDB4NTgyYTA2MTUsIDB4YmYzNzNmMTEsIDB4Zjk3NDQ2N2UsIDB4ZjA2MmZhZjksCisJMHg1MTE3ZjEwYywgMHhkODBkNTY3ZCwgMHgwMjRkYmYyOCwgMHhmNWUxMDE5NCwgMHg5ZjQxMmQ5MiwgMHg5ZWI5MTU1ZiwKKwkweGZjMDE2NTBmLCAweGRlMTdkNzI4LCAweDdlMzBjODNlLCAweDkxNWY4ZjdkLCAweDRhNmU1MDVhLCAweGQyY2E5N2FlLAorCTB4MzJmN2I4ZTMsIDB4NDAxNjUzZDYsIDB4MDM2Y2YwZjUsIDB4OTg1OGZiYzUsIDB4Nzk0ZDE1ODEsIDB4MjhiZWYxZjMsCisJMHg2ZWIxN2Q1NywgMHhiYzRlYWQ5YywgMHgzMWRmZTZhNywgMHgzYTQ0ZjljYywgMHgwZDlhODFkNSwgMHg2MTIwNWY5YSwKKwkweDU4MTdmY2JjLCAweDU1ZWQxMDYwLCAweDQ5MWMzZDM1LCAweGIyYjlmOGEzLCAweGVjODUzMmQ1LCAweDIzYTUwZWQ4LAorCTB4NmIxMjZkZWUsIDB4M2MyZWUxMTgsIDB4MTYwZWY4NDAsIDB4ZjZlN2YwOTAsIDB4MDA1YjlkMmIsIDB4ZDhiNzU0ZWQsCisJMHg1YmRjNTJhZiwgMHgxNWFhY2MzYSwgMHg0MGRhZGU4OCwgMHg1MDU5NmJmNCwgMHhmZjEyMjkzNywgMHhjNGE5N2JjNCwKKwkweDU1YWE2NzJmLCAweDllYjNiZTIxLCAweDQ0NWY4ZGY4LCAweGFkZTdhYTQ0LCAweDc4NjVhNTE0LCAweDhkMjhjYmI3LAorCTB4ZWFjMWIzN2QsIDB4NTUxZjUwMGUsIDB4ZjQxMWEzMzcsIDB4MzU4NzQ3NmYsIDB4ODRiNWZlNDAsIDB4Y2U5MGNkOWIsCisJMHhiZWEwNDFlYiwgMHhlZGNmNWI3YiwgMHgzMjhmNDViNywgMHgwOTlmNDhhMywgMHg1ZjkxNjc1NywgMHgxNmQzY2MwYiwKKwkweGVhMzU2MTE1LCAweDc4NDFjODJlLCAweGIwMDViZWUxLCAweGI0ZTJiYzFmLCAweDczYjk0NjQ1LCAweDA1YWM0YzNlLAorCTB4YzQ5ZjRiZTAsIDB4ODMyN2M4NjEsIDB4ZDdjMDM5NjMsIDB4YzMwZTdjYmUsIDB4MmZkMzg1M2UsIDB4OGMzOWNhZmEsCisJMHg0NzBlNTRmOCwgMHhhODM1NmI3YywgMHg5NTllM2NjYSwgMHhkZDAyZmJlMSwgMHg3MDU5YTcyNywgMHg3ZTZmOWIyNSwKKwkweGY5NjIzZWJkLCAweDI5ZWYwYmFhLCAweGJhM2U3YmE2LCAweDkzOTYyZWVhLCAweDVhMjBjN2M4LCAweDZhZDYxNDJjLAorCTB4NjczMGM5ZmQsIDB4MDZjM2U3NWUsIDB4ZTg4MWUzYjIsIDB4NjBhNzNhNjEsIDB4NDYwZDYxYmUsIDB4ZWYzMDg0MjEsCisJMHhhYTZmZWJiZiwgMHhkOTZmOWI1MiwgMHhmMTkzYjgwMiwgMHgwNGZhZjQ2NywgMHgzY2QwMjI4NywgMHhmYWQyNGI3YSwKKwkweDVmYzU3ODdmLCAweDQ4NTI5ZTNjLCAweGYzMWViMmI5LCAweDQxMzcxOWU2LCAweGQ0OGZkMjBhLCAweGJlN2Y3MzZiLAorCTB4NGYxOGViOWUsIDB4YzBkZGI4YzAsIDB4Y2Y5YzEyNzgsIDB4Y2JmOGI1NmYsIDB4NzRhZDFmMjgsIDB4YTdlNzI0OGYsCisJMHgwYWM0ZmFmNCwgMHhiNDMyYmIzMCwgMHg0ZmJjMzI5YywgMHg2MDBlNmM0NywgMHg4ZjMwYjIyMCwgMHg0OTE2MjExZCwKKwkweDE5ZGYzZWM1LCAweDI0NDc3NGRlLCAweDk2ZTBjM2Q4LCAweGQ3M2M3ZTcxLCAweDQ2ZTZkODdkLCAweGI2ZjM4OWE1LAorCTB4ZjkyNjhkMzMsIDB4ZDU0YTVjMTMsIDB4MzQ1OTJjZTIsIDB4ZjZkNTZmZDgsIDB4OGI1ZDkzNWEsIDB4YjU2ZTBjNzMsCisJMHg5NDcxNzU2YiwgMHhmYmViMDU5YSwgMHgzODE2NzllOCwgMHhhOWU3ZmQ4OCwgMHg3MzRlYmIxOCwgMHhkMDAxY2YyYywKKwkweDkzYzdjMzhiLCAweGQxMzExZTlmLCAweGVmOTkwZjNjLCAweGQ4ZTM5OTNkLCAweDBjOGE3OTFmLCAweDM3OTQzOTFkLAorCTB4NDFmNjI2MGMsIDB4MjQwNzdlODEsIDB4NjM5NDZkYzAsIDB4NmU2MTFjOTEsIDB4MTkyZGNhMjUsIDB4OWY3ZDI1OWYsCisJMHgyZjZlMTVkOCwgMHgwMTkwNTc3NywgMHhmZTA0NTBiYSwgMHg0NjVmMzQ4MywgMHgxYTc3NTAyZCwgMHg2MzlkNzdlZCwKKwkweDNiZmE5MDcwLCAweGY3MDUwMmUwLCAweDFiZjFlOGZkLCAweGRkMjE0Zjg3LCAweGI0Yzk4ZTczLCAweDU3ODNiYThlLAorCTB4MTZlZjllZjksIDB4NzhmZjc4MjcsIDB4YmMyZDc3YzIsIDB4MzUzNzgzMWUsIDB4MDIzOTg4N2EsIDB4NDAzYWYyNDksCisJMHg2ZWVkMWRmYiwgMHg2ZTY4N2Y0NiwgMHgwNTMwMWY3NCwgMHhjMzZlZDA1MiwgMHhiZGFmYWQzOSwgMHg0MTQwNGIwZSwKKwkweDFkZThhYzdjLCAweGU3OWRmMDkxLCAweDFjZDFlNDE5LCAweGE1MTYyNjUzLCAweDE5ODBmZjExLCAweGFmZGMyNTAyLAorCTB4ZmQ4NGJhYTYsIDB4ZmM4NTVmODQsIDB4ZDhjZmVkOGUsIDB4ZjRjMGYxZmUsIDB4NmJkNTIxNTgsIDB4MGEyMzUzMjcsCisJMHg4Y2I3M2ZkZiwgMHg5MjJmMDVmYiwgMHhlZDJmZGYxYiwgMHhjZDMzNjFhMSwgMHgwNjQzZGMxYiwgMHg4NjhlZGRiOSwKKwkweDcxM2YzNDNiLCAweDRiZTkxOGNmLCAweGY5ZTdkZjBlLCAweDUzYWYyODgwLCAweDdlMDYyZmRjLCAweGUxNjMzZDhkLAorCTB4NTgwOTJjNmQsIDB4Mzg3MzE1MDksIDB4Y2E1NTM2Y2YsIDB4NmVhZGRmM2MsIDB4MWYxOGRjYzYsIDB4OTE3NTcwNDksCisJMHhjOTkxNzA5ZiwgMHhjN2U3NmYzNCwgMHhmNWFlZDFhYiwgMHg0MTlmYTM0MSwgMHhjODc3ZTYyZiwgMHhkMGM3ZDVhMiwKKwkweGEzZjAxNjNhLCAweDk0YTIyMzdjLCAweDdiOGJhMWY3LCAweDFjZmQwY2ZjLCAweDQwYWE2MmFhLCAweDhjMjEyMGYxLAorCTB4M2UzZDE2YzcsIDB4NmUxZjgwMmYsIDB4NzBhOWZjNGIsIDB4ZTAxYWFlNmMsIDB4MmI2MWFjMzUsIDB4NWVhMzUzZDYsCisJMHg2ZTAxMDAwZiwgMHhkNGUzZjlhNywgMHg4ZTIzYmQwOCwgMHgyYWY5ODM5YSwgMHhmOWY4OTc3ZiwgMHhlMDU1Njc3ZCwKKwkweGU4MTRkNGZjLCAweDZiYWZkNjQ5LCAweDZhYjM3NWVjLCAweGYzM2RjOTBkLCAweDdiMmVkM2Y3LCAweDQ3ZDNmNzkyLAorCTB4M2IyMjc2ZjgsIDB4MjQ0Y2VkN2IsIDB4MmJiZTMwYmYsIDB4MTVlZmJmYTksIDB4NDExY2NiNWQsIDB4YjVjOTgxZjQsCisJMHg1OTc1Y2U4ZiwgMHhiZWE5YWIyMiwgMHgxY2RjOTgxZiwgMHhlZTkxZjE4ZiwgMHg4YjgyZmRhMSwgMHg5MWY1MTZlZiwKKwkweDg3Y2Y4YzAwLCAweGNjNjdlNTIzLCAweGEyNzY5Nzk0LCAweDEyNWJlZWM3LCAweGU5YjhlMzk3LCAweDBhYTFmYzY5LAorCTB4YTFlZmRhY2YsIDB4ZmRhNzlhY2EsIDB4MTdmYTg2N2UsIDB4N2Y1N2NmYWIsIDB4MWRiY2IyNmUsIDB4YTQ5N2Y5YTIsCisJMHhlN2QyN2U3ZSwgMHg5OTEyYzAxZiwgMHgzODkzY2JmNywgMHg2NDg3YjY4MywgMHhhYTNjNzVlMCwgMHhhNjdlZjVlZiwKKwkweGM4N2I0OGZjLCAweDA2MTk5ZGZmLCAweGVkNWNmODk1LCAweDdmZjRkMGNmLCAweGMxOGJlYmE2LCAweDliZjYxZDUxLAorCTB4ZjZmOWI5MzUsIDB4ZmMzOWY0MjcsIDB4OGE3MWM5OGIsIDB4YTRmMmJkZWUsIDB4ZGY4MjRhMDAsIDB4YTBhOTgyYWIsCisJMHgxOTVkZjgyNCwgMHhmNmUwMzFjYSwgMHg3YzgzNjJjOCwgMHg4MWE5NzhmNSwgMHhjMmIxMzM1ZiwgMHhiZDczNWZjMCwKKwkweDE0YmY4MGNhLCAweDVmOTA2NzVkLCAweDAxYmQ2YmZmLCAweGM1YmQzMGRmLCAweGNmZjFiZjIwLCAweGQ2M2MwNjZkLAorCTB4Yjk1ODc1YmYsIDB4NDkzNmU3ODksIDB4MGFlNDFiYWYsIDB4MTU3ZThkM2IsIDB4MmFmZDE4ZjUsIDB4MTVmYTM1ZWUsCisJMHgzN2UyNWJkMywgMHhkZmFjYjdmYSwgMHhmNjRlNWZlOCwgMHhkZTg1NWM4MywgMHg5MWZjZmZhMSwgMHgyMDYwZmI0OSwKKwkweDM0ZjNjMzNjLCAweDEzMDI5ZDM1LCAweGE4YzQ0NzM0LCAweDY2YzIxZmI2LCAweGYwYTYxN2JlLCAweDg0YTJlMmZmLAorCTB4ZDdhNzJjM2MsIDB4MDkxOWRhM2YsIDB4YjlkMmIzMmYsIDB4MmIzNjlkMGYsIDB4NTEyZWRiYmQsIDB4ZmUzZTYwMGQsCisJMHgyZTc2ZDcwNSwgMHgwMDBlZTAxNywgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjc2VtX2ludF90YWJsZV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlNzMzZmYwMCwgMHg1MWY4NjA2MiwgMHgzOWZiYzEwZiwgMHg3MTZlMTgxOSwKLQkweDAxNDNmODIyLCAweGQ5NDMzMTE3LCAweDEwMTdmYTQwLCAweDYwNjQ2M2JmLCAweGJjNDhjZjc4LCAweDA0MGUzNTdlLAotCTB4MDMzYjJmN2IsIDB4M2UyMDBhYzMsIDB4ZmVmMDNlYzAsIDB4Yzk1YzQ4MWEsIDB4NGViYjNmNGQsIDB4NjIyZWQxZDAsCi0JMHgwNjdlMmVmMCwgMHgwYzAyM2Q4NiwgMHgxMDgyNTkwYywgMHg1NDQxN2ZmZSwgMHgwOGZjZGRmOSwgMHg2NTE4OThiNiwKLQkweGY1MDEyOTc2LCAweDkzMzIwMDAzLCAweDAzODAwOWQzLCAweDAwMDAwMzgwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlM2UzZmYwMCwgMHg1MWY4NjA2NiwgMHhiOGQzYzEwZiwgMHg3MjM2MTgxOCwKKwkweDAxNDNmODIxLCAweDY4NDMzM2I3LCAweDA2MDYxNjNlLCAweGM3N2UyMDAxLCAweDllZjBjMGM4LCAweDM4MzMwNDkxLAorCTB4MjA3ZWVjMTAsIDB4Mjc4ODBhYmIsIDB4N2RjZjUwNzEsIDB4ZTUyZjExNDMsIDB4NWY1ZDlmYTEsIDB4MTUzZDc2YTAsCisJMHg4MzdmNzgxOCwgMHgwMzEwODNiMCwgMHgwMzMwOWI4MywgMHg4NDA4YjQ4MywgMHg1NTA0NWZiZiwgMHhjMTA4NTFkZSwKKwkweDk5NDEyZTdlLCAweGZhODE5ZjVkLCAweGJiZWI4ZDAxLCAweDAwMDM4MDMxLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhlZWNkZGQ4ZiwKLQkweDIxMDc5YjI2LCAweDA4NmUzYzIxLCAweDRiYzYwYTIyLCAweDliYWRlMTAyLCAweDg4YjQ2MjA0LCAweDdkNjA4YTg5LAotCTB4ODQyMDE4MmQsIDB4OTZkMjIyNDcsIDB4ZWRmN2VkN2UsIDB4NWFiMTEwNjIsIDB4NjhkYjE1MWIsIDB4MzQxMDVkYjEsCi0JMHgwNjBiMjhkYSwgMHgyZGYwOTgwYywgMHhhYTU2OTRhMCwgMHhkMWY1OGRmMSwgMHg5MGNiYzhhMCwgMHhmODdlODc4NCwKLQkweGNlN2ZlYjY5LCAweDdiYmJiOTk5LCAweDdjNDg2ZWVmLCAweGZlZmRmYmY0LCAweDczMGVjZmU5LCAweDMzOTlkZWU3LAotCTB4OWNlNzM1ZTcsIDB4YzkyYjMzMzksIDB4MjEwY2IxMDIsIDB4YmJmODFiZTQsIDB4MjJhZDkwOWMsIDB4YTQ2YzY0MjEsCi0JMHhlNWEyMmFlYywgMHg3OWZjNDIxOCwgMHg4MTI2YzA4ZSwgMHhhZmFlZDA5MCwgMHg0MjM0OTA4ZSwgMHg1NGNkMzY0ZSwKLQkweGVjODRkOWFkLCAweDJlODQ3M2NlLCAweDAzMjdlZGE3LCAweDZkMmIwMTg1LCAweDc2ZjZkZTJmLCAweDRiZWI0NGEyLAotCTB4YjQxMjg5YjYsIDB4ZjFkOTc2NWIsIDB4NDI3NWNlZmIsIDB4ZDZkNWVhMDAsIDB4ZDEyNjA3YjYsIDB4OTEzNmY3N2EsCi0JMHg5MzVkYTA2YywgMHhkMjQyZDM5MCwgMHgyMzYyMzkwOSwgMHg2MTc1NGZlYywgMHg1NTlkYmU3ZCwgMHg3ZGRmYWM5NywKLQkweGQ5NTc4YzJiLCAweGZhNzYyNTZjLCAweGQxMjY5MWZkLCAweDliNjVmNTAzLCAweGUzYTEwMDg0LCAweDhmNzFkOTJkLAotCTB4YjdmNjgwMzIsIDB4ZWQwNDIwMjAsIDB4N2E2ZmFkMmEsIDB4ODQ1ZDUxNTAsIDB4ZmRlYmI1ZGMsIDB4MjEyNzc2YzQsCi0JMHhhMjM2N2MyNywgMHhjYThmMzgyYSwgMHhhYTQyMjhlMCwgMHgwNjRhNWIwMiwgMHgxYWFiZWZkMCwgMHhmYjQyY2QwNSwKLQkweGFhNzc1YWFmLCAweDZhYWJlMDEzLCAweDY5MTAyZjkyLCAweDFjMWE4YjdmLCAweGM2YzExZDQ0LCAweDc4YzA4NmZlLAotCTB4YmM3MDNiN2IsIDB4MTgzMGYyNmQsIDB4M2JlYmYyYWYsIDB4M2NjMjIyMTUsIDB4Yjc3YzBmNjUsIDB4ZjMwMWMyODQsCi0JMHhlMTNkYzdkNiwgMHg3NGYxYzdhYiwgMHg5YTc5MmU3YywgMHg1YmRmNDc4ZSwgMHhjMWEwOWNmYSwgMHg4ODVhOTcxNCwKLQkweGRjZThlMDE3LCAweDg0ZmQ5ZjYxLCAweDUyYjdlNjEzLCAweDllOGFlZTE5LCAweDMwZWQ5Y2M3LCAweDdhYzBhYThmLAotCTB4ZjAwOWM0YTUsIDB4OGZlNjU3YWQsIDB4YThiN2Y0OGEsIDB4Zjg0NmY3ZTEsIDB4N2JmYTczZWEsIDB4ZTVjZGRhYTMsCi0JMHhlOTQ1MWYwOSwgMHg4YWJkNDhmMCwgMHhmNjkwNGYxMCwgMHg1MjgwYTQ0YiwgMHhmOWU0NDk3ZSwgMHhkMjMyNDIwNywKLQkweDQ4ODM1MTdiLCAweDdmYTQ1YjU0LCAweGZhNDI3OTRhLCAweDliN2ZmZmQxLCAweGMxZTI5M2ZlLCAweDZjMGFlYWRmLAotCTB4NmRkMDhlY2EsIDB4MTY2ODFiOTksIDB4Mzc2OWRiYTEsIDB4NWRkNGEzYTcsIDB4NWViZmRkMTAsIDB4YTBmNDAwM2UsCi0JMHhkY2Y5ZDRmMCwgMHhjYmU0M2U1OCwgMHg0ZmFkNzJjMCwgMHhkNmZkYmM0NSwgMHg3YWNiMDIzNywgMHgxZmNmODY5ZiwKLQkweDcyYzc4ZGYzLCAweGU1ODNjZjlkLCAweDU4YTU3YzFmLCAweGY4NjU3YzA2LCAweDZjZGYwNmRlLCAweGJjZmEzNzJjLAotCTB4NWY0OWZjZjgsIDB4YmUwZDk2MjUsIDB4OGNmZTdjMWEsIDB4OGQ5NjA1NmYsIDB4N2YzZTNmM2UsIDB4Y2IwNmI3Y2UsCi0JMHhjYjBlYWZhMCwgMHg1YTJmNDBhZCwgMHhmODAyZjkzNiwgMHgwMzVmNzZkZSwgMHgyMGJlY2Q5NiwgMHg2YmU5ZGYzZSwKLQkweDhlN2VmMmM2LCAweGE0YzljNGM3LCAweDQ4NzhhMjUwLCAweDI1MzcxMGY0LCAweGVlOTk0OTNiLCAweDNkNjk5NDI5LAotCTB4ZDNkNThjYTUsIDB4MmExN2Y2NmYsIDB4YTVlZTllYjQsIDB4MDE5NzhhNzUsIDB4NTY4NTQzOGIsIDB4YzM1MDFmNWEsCi0JMHg5MmZmMDdkYSwgMHg3ZDY4ZDkxNCwgMHgwZmI1OWZiMCwgMHg2NDUzZGZiZCwgMHg3NWExZjVhNywgMHgzYWY4N2RhYywKLQkweGFkMDI1MTdmLCAweGY2YjAwZjBmLCAweDQ1NDMxYjhiLCAweDM4YmY1YTBlLCAweDViNzNkYWM4LCAweGQ2OTNiMTQ4LAotCTB4OWVhYzQzNzMsIDB4ZWM1M2MwNzcsIDB4MzZiY2Y1YTIsIDB4YzBmODJmNTYsIDB4ZWI0ODljNWYsIDB4ZmJlY2VkMDUsCi0JMHg1MTAxMWQ4OSwgMHg2MWQyYzY3NSwgMHg0ZWRlYWNhYiwgMHhmOWQ2YWQyOCwgMHgxMzQ4ZjRhZiwgMHhlZjUxNWQ2OCwKLQkweDhmYzUxYTI0LCAweDk0OGY1YWZmLCAweDdiMjFmMTQ5LCAweGJmZTQzZGIwLCAweDE0OWJkYjA5LCAweGUxYmZiNjBmLAotCTB4NzZmYWMwYWYsIDB4ODdlZDhiZDksIDB4NWQ1ODRiZmQsIDB4MTdmYjYyZjEsIDB4YmQ2MjlmZmUsIDB4YmI2M2Y2NTksCi0JMHhkNThmYTU2ZCwgMHgwZmI2M2YxNSwgMHhmYjA2Yjk1OCwgMHhiMDA3MjlkZiwgMHgwN2NhZDQ3ZCwgMHgxMmE3N2RiMSwKLQkweDU2ODdmNmMwLCAweDRhOTllNjNkLCAweGY3ODJiNWViLCAweGI0OGZjMGI3LCAweGMwMzkyNGFjLCAweDMyOGNjMTRmLAotCTB4MDVhYjRmY2EsIDB4ZjdmODFiMzIsIDB4MjhlOTgwYmYsIDB4NTRjZWFlNWYsIDB4ZmViNzBlNTAsIDB4OTAwOWUwYWQsCi0JMHg4MzRiZmM1ZiwgMHg3ZjI3ZmNmYSwgMHhmZmRmOGQ5NSwgMHg2OTkxZmIxMSwgMHhmZGVmNjIzZiwgMHhkZTNhYmRlNCwKLQkweGFiZGU0ZmQwLCAweDBkM2Y3YTk1LCAweGJkYWQ1ZWYwLCAweDdkNmNmZDZmLCAweDllMTFhMjc1LCAweDdlZjRhYjU3LAotCTB4YWUzYzIwYjYsIDB4ZWYyYmNkYmUsIDB4Nzg0NmM5YjUsIDB4ZjdhYzViNWUsIDB4NDllMTEzYjMsIDB4NGQzYzFiZWUsCi0JMHhkM2YxMWI2ZiwgMHgzZjE4NzZmNCwgMHg3ZTllMTE3YiwgMHhjYzY3ODM3ZCwgMHg4Y2ZjNDYzYiwgMHg5ZjhjMjc3OSwKLQkweDY2NGZkODAzLCAweDdhNjlmYWRmLCAweGE2OWY4OGM3LCAweDc5ZjhjMjc3LCAweGE4MzVlNzFiLCAweGYzMWFmMzZmLAotCTB4NjMzZjExYWUsIDB4ZTdlMzBkZGUsIDB4YmIyNzg0MjMsIDB4ZmY2Y2ZkNmYsIDB4ZWQ5Zjg4ZDAsIDB4NzNmMTg2MWYsCi0JMHhhMGI5ZmIxNCwgMHhmODJhZjM2ZiwgMHg4MjlmODhjOCwgMHhlOWY4YzI4ZiwgMHhlYTJlN2VjNiwgMHgzZmRiM2Y1YiwKLQkweGZiNjdlMjMyLCAweDdjZmM2MTQ3LCAweGQyNWNmZDg5LCAweGZjMTU3OWI3LCAweDgyOWY4OGMzLCAweDYzZjE4NDdmLAotCTB4ZDE5ZmEwMTEsIDB4ZjlhNzgzN2QsIDB4OWE3ZTIzNTMsIDB4YzdlMzBkM2YsIDB4ZWQ4Y2ZkODEsIDB4OGZlMzNjMWIsCi0JMHhmZTMzZjExOCwgMHg2OTNmMTg0OCwgMHg0MjdkZDAwMiwgMHgzZTY5ZmFkZiwgMHhmMzRmYzQ2MiwgMHgwNjdlMzA5MSwKLQkweGZhNTMzZjYxLCAweDQ3ZjFhZjM2LCAweDdmMTlmODhkLCAweGUxOWY4YzM0LCAweDJhNDJhZjM4LCAweGExMGYwMGY3LAotCTB4ZWU3YWI4ZmQsIDB4MjM0OWU3NjcsIDB4MGM5ZTc2N2UsIDB4ZWM1MmU3ZTMsIDB4MjdlZDFhNjcsIDB4MjY3ZWY3YTcsCi0JMHgzM2YxMWE3NiwgMHg5ZjhjMzNiMSwgMHg5NWNmZDhmMSwgMHg2NzY3ZWI3ZCwgMHgzYjNmMTFhNywgMHgyOWY4YzMzYiwKLQkweGRkNWNmYzQ0LCAweGVjNGQ3OWI3LCAweDYyNjdlMjMyLCAweGZlNGZjMzE3LCAweDg5YzUzNTViLCAweDg1YWU5ZGI0LAotCTB4OTkzZjQ4OWEsIDB4MDhmMWUxZDQsIDB4NTliYTJlYjQsIDB4MDQ2Yjc0NWQsIDB4Yjc1MTEyZWMsIDB4NDc5YjQ4MzcsCi0JMHgxYjNiZGZhNCwgMHg0NTdlZjM5MywgMHhhMjhlZWRhMiwgMHg4Yjk3OTg3MiwgMHg3NmQxNjM1YSwgMHgwNGY4ZDI0NywKLQkweGVjOTM5ZDgzLCAweDUzZDQzMTQ5LCAweGRlMTgwNzRiLCAweGQ0MzY1N2VmLCAweGY2N2ZkZWQwLCAweDRjZjY4NmM1LAotCTB4OWVhMTllNmYsIDB4ZjBkMTM5NTUsIDB4MjI5YWEwZmUsIDB4OGFjODdkNDMsIDB4NjdlZjBjYWIsIDB4ZDQzNWFmZmIsCi0JMHhkOGZjZDY3MywgMHg3NTA1ZmVmMCwgMHgxN2VkMGQ3MywgMHhkYTE5NTdkNiwgMHgzMzJjMGEyZiwgMHhmYzM2NDdkNCwKLQkweDRiZmRlMTg3LCAweGRhMTk3NzgyLCAweDk1ZmU2ZDJmLCAweGU4NzQ3ZGExLCAweDdmM2Q0MzIxLCAweGY3ODY2M2ZmLAotCTB4MzA2ZGI2YzcsIDB4ZjgzYjhmYjQsIDB4NDI3ZGExOGMsIDB4N2Q0MzU2ZmIsIDB4MjY5ZGIxZDIsIDB4M2VlOWNmM2IsCi0JMHg0NWQ3OTIzMiwgMHhlY2MyN2JlMCwgMHhlZDA1NGNmZSwgMHhjMTRiOTBiZCwgMHg4OWMwMzJiYSwgMHhkNzZlZmM3NiwKLQkweGE1MzBmNTdjLCAweDc2ZTdiMmFmLCAweDE3ZDI4ZDM1LCAweGJhZTg0YTY4LCAweGYyYTAzODVlLCAweGZjZmE3NmMyLAotCTB4MTdiZDEzYTcsIDB4OWZmM2U5YmEsIDB4ZGQ0YmRlMmEsIDB4Y2E1M2VjNzEsIDB4ODBjOTAyMGYsIDB4Njk0MGI1NTIsCi0JMHg2NjQ3YmY2ZSwgMHhmNTk0NThmYywgMHhmNDQzZjBmNSwgMHhmNzRiNmFmYiwgMHhiNzVhNjRmMCwgMHhjMGY1ODU4OCwKLQkweDJjMTA3ZmJmLCAweDIyMDlhN2M4LCAweDEyZjc4MWE5LCAweDgyZmQwNGFjLCAweDllMGJiMjdiLCAweGViZjE0N2YwLAotCTB4MGU1NDQxOWEsIDB4NmJiZjQ4ODUsIDB4ZDgwNjZmNjQsIDB4YmU1NjFiMTksIDB4NjQzYjA3ZWUsIDB4YWYzYTIwZjUsCi0JMHgyMTNjODQwMSwgMHgwZmYyMWViYywgMHg5YTBmZGZhMywgMHhmZGE1ZTE5ZiwgMHhhNzZhMTU1OSwgMHhkMGFmOGY0NywKLQkweGY4ZTE0N2YxLCAweDczZmUzMDBkLCAweDFkNmY4YzNkLCAweGJlMzBkZTNhLCAweDYxYTU3MDZkLCAweGM3NDI5YjdjLAotCTB4NjA3YjUzNzcsIDB4N2M3YzdiZTUsIDB4ODQ4OTg0NGEsIDB4ODdiYzJmM2MsIDB4NTcwNzViZTMsIDB4MjhmN2Y4ZTIsCi0JMHgxZTg5NWZkNCwgMHg3ZTNjMjEzZiwgMHgyZWNiYzgzMywgMHg5YzZjN2YxOCwgMHg2ODlkMGZmOSwgMHgyYWUwZmY5YywKLQkweDM2MTVmY2UzLCAweDBmMmIzZGZmLCAweDcwMTNmMWYxLCAweDQzODU3YmZlLCAweGFiODNmZTZjLCAweGFjYWRmY2Q4LAotCTB4ODlmOGYwZGYsIDB4ODdlZmZjNjEsIDB4ZDNkYWJmZjksIDB4MWIyNjczZmMsIDB4YjE2NDNmZTcsIDB4MzY1NmZlNzEsCi0JMHg4ZjJiMWJmZSwgMHgzODlkZjFmMywgMHg3MWMyOWJmZSwgMHg4YjIxZmYzNiwgMHhlYWM1N2M3MSwgMHg5NDdmODBkNSwKLQkweDAwOWE4NGFjLCAweGE0MGM5ZjFkLCAweGIwM2ZhOThhLCAweGNhMDcxZDBiLCAweGE5OTQyOTExLCAweDMwYjVmOTA5LAotCTB4NjlmOGUxMTQsIDB4MmZiN2UzMDIsIDB4YTFiZjI4MTIsIDB4NzNlM2YxYmUsIDB4YWQ5YWEwMTIsIDB4OWM1ZGZhODAsCi0JMHgxNjM1MTdkNywgMHhiMDk3YTAyYSwgMHhmMzJiZmE5ZCwgMHhjZDE1YTgzOCwgMHg1OTM3ZjIyMiwgMHg0MDVjMGQ2YiwKLQkweDE2NmNlZGUxLCAweDU4YWY1MGZkLCAweGZhMDAyNTNiLCAweDZlNGFkYWFmLCAweDI0ZWY4MzJiLCAweDlmZTc4MjEyLAotCTB4ODZjOTcyM2UsIDB4Y2I5OTc5ZTgsIDB4OTFmMjc1NzksIDB4MGI3OTI4ZjYsIDB4NjQ0NTUxZmIsIDB4NmY4NTBkNDQsCi0JMHhkOGMxMzAxYSwgMHhlYTYzZmQ0OCwgMHg1ZmVhMTEwNywgMHgwY2ZkNDA3YywgMHgxM2YyNTk0MiwgMHgxMWY3OGQ5OSwKLQkweGRlYTA5N2Y1LCAweDY4MjVmZDRlLCAweDdlMjU2NDI3LCAweDJiN2JiYjQ3LCAweGM2NWZjMjgzLCAweDYyNThmZmUxLAotCTB4Y2RmMWZhZjIsIDB4ZTU0ZmMwNDIsIDB4OGY5ZjhiZjMsIDB4YjZmNTNmNDYsIDB4ZjQ4YTBlMTUsIDB4ZmM3MzFjMDgsCi0JMHg5ZDNhODZhOSwgMHhkNGU4MWY5NywgMHhkODFhYzNiZCwgMHg1NTdlMjAyMCwgMHg4YTM5NTdjMCwgMHhhZmI3MjEyNiwKLQkweDhlYjhhMmM5LCAweDI1MmVmZmJjLCAweGZkNDUyNjdiLCAweGY3MjNjNDBkLCAweGIyZGZlZmE3LCAweGE2ZTQxODVjLAotCTB4NThmNGNlZTMsIDB4ZTEzYWQ4ZjMsIDB4NWNhMGIyYzksIDB4NzhjYjJjOTMsIDB4MWE2ZGFlNDIsIDB4NDgxZWQzMmQsCi0JMHhiOGZlNDdiOSwgMHhlYmRjNmEzZCwgMHg5OWY1OGQ0YSwgMHhhNzdhYzY2NSwgMHgxNDJkOTFlYywgMHg4MTcyY2VhZSwKLQkweGNlZmRhN2FjLCAweGQ3NmM2ZDlhLCAweDUyNWE3MWM3LCAweDc4Zjk5ZDE4LCAweGJlMGNlOTY1LCAweGMxZTY1MDU5LAotCTB4NzlkMjM3NjMsIDB4YWI3ZDliYjYsIDB4YmI3ZDUzYzMsIDB4YTA1ODVkNGMsIDB4MDExZmJmYTcsIDB4ZjBkM2ZhYmEsCi0JMHhkOWJiMWZiZCwgMHhjZWYwY2RiYywgMHgzMjllNmQ5NiwgMHg3M2Q5Y2YzYSwgMHhiN2YwMDBjNCwgMHhlZmJmZmUxOSwKLQkweGI5MmM3ODcyLCAweGIwZjM1Y2I0LCAweGYzYjEyYzRjLCAweGEzN2ZjMzMxLCAweGEwOWYzY2Q3LCAweDRkZjBlYjBjLAotCTB4OGNlN2U2OTUsIDB4ZmE3MDhlNmYsIDB4NDFmYzBjN2YsIDB4MWZjMGEzY2IsIDB4OWNjM2ZlMTQsIDB4OTU3YTIyM2YsCi0JMHhkNWI1NDdmMSwgMHhhMWY4MDMzYiwgMHgyMDkxNTFmYiwgMHhkY2JmMzk1ZCwgMHg1ZTY1ZjljMCwgMHgwODJmOTE5ZCwKLQkweGM3NDBjYWYxLCAweGJjODViMzA1LCAweGMxZjE0NTVmLCAweDBiMDdjZTJjLCAweDczN2M4ZGVhLCAweDk5Y2JmMTBiLAotCTB4ZTM3MmU4NzEsIDB4Njc3N2Y1ZGEsIDB4ZmJmM2IxYTgsIDB4NGRjZGYzOTAsIDB4ZmM0NmVmZjcsIDB4ZDE5M2NlYzQsCi0JMHhhNzRlNTZlOSwgMHhlZDhjNmE1YiwgMHhkZWJhNzAzNywgMHhiYjNhZTljMiwgMHhhOTk3YzFmZSwgMHg1NjNmMjBmYSwKLQkweDdiYzgzMjAzLCAweDdhNzQyZmY1LCAweGU5ZTgxYmI2LCAweGMzMzRmNGU1LCAweGU3YTcyYjc5LCAweGY0NjczZmFkLAotCTB4Y2VkYmMzMzQsIDB4N2Y1ZWQ5ZTksIDB4NjM0MzI2NDYsIDB4NzdjMzM1ZTEsIDB4Zjk5ODhhZGIsIDB4MzljZjQwMjgsCi0JMHhhY2Y0ZjhmZSwgMHgzZDRjMmU2ZSwgMHg0OTdjZjUxYywgMHhjM2Q0Y2FmMCwgMHhhOGI2NzI1MSwgMHg1ZjUwZGNhMSwKLQkweGYwZDFiODE4LCAweDM5ZmE4MmZlLCAweDc1NzlmNjg2LCAweGI3ZWQwZDBiLCAweDUwYzNiOWFmLCAweGI5ZmZlMzlmLAotCTB4NTZkYmZkZTEsIDB4ZGZiNDM0YWMsIDB4YTFhZjczNTIsIDB4MDdjYWE2ZmQsIDB4YmQxYmY1MGQsIDB4OWZkZTFhOGYsCi0JMHhhMWJkN2IzNSwgMHhkM2Q5NjY3ZCwgMHg0YWViZjY4NiwgMHhlNWVhMThiNywgMHhmNzg2MWQ5ZSwgMHg4NzBiNWQ4NSwKLQkweGVhYmFlM2I0LCAweDg4N2Y2M2ZkLCAweDQ1NjdiZTI3LCAweDNiZWIzNTNlLCAweGY2MWUyZjVkLCAweDg4ZmNmOGE5LAotCTB4Yzc5NjA0NmYsIDB4M2YzZTFhN2MsIDB4ZTU4ZjFiZTEsIDB4NzRkZmQwNGEsIDB4NjBlY2IwNWQsIDB4NzM0M2Y1NjUsCi0JMHhlMmEzYjg4NiwgMHhkYWM4OWYxZSwgMHhiZGIzZDA2MCwgMHg3ZGZkNDNlOSwgMHg3ZmEzZGViMywgMHgxNGVjZjE1OSwKLQkweDkwMmM1Y2JkLCAweGJiMDc1ODMyLCAweDNmYWQxZGI4LCAweDQ5ZDdjNTNmLCAweGI5NDJlZTQyLCAweGI5MzBhYzVjLAotCTB4YjMzNWJjNWQsIDB4M2Q0MjI0ODgsIDB4NGUyNmJjMzQsIDB4Y2YyYzI2N2MsIDB4MzNlNzAxNDEsIDB4MDBjNzJlYWYsCi0JMHg5MWZhODJlNywgMHhlMDM2ZjgyNiwgMHhmOTAzMGIzOCwgMHgxYThiZTc4NiwgMHhlYmJlMTkyNiwgMHg3YzIyMmRkOCwKLQkweDI3YzY0MTRiLCAweGI2NTY3MmMwLCAweDg1ZjAwMmM3LCAweGVlYmUwZWY2LCAweGIzZDc4MDEyLCAweDRiZWIwMmQ3LAotCTB4ZTdiNDNmNzMsIDB4YTlhNTdjM2EsIDB4NzNjMDI1ODcsIDB4N2NjNzk2MTksIDB4ZTIzY2IxYjMsIDB4ZDg3OTYyZjMsCi0JMHhjN2U1ODk1NywgMHhkYjJjMWFiZSwgMHhmY2IwMmI3ZCwgMHhmMmM3ZTdjOCwgMHgyYzFhZGYwMywgMHhjM2FiZWVmZiwKLQkweDFlYWZhMGYyLCAweDAxN2M3N2NiLCAweDM1ZjJkZjJjLCAweDJmODZmOTYwLCAweGFmOWI2NTg4LCAweDlmNGVjYjE5LAotCTB4NWU1ZDRiMDcsIDB4NDg2NWY4YTIsIDB4ZThiZjE0NjYsIDB4OGZkNzRmZmEsIDB4OWNiZjM4YzcsIDB4Yzc4OTdlMDAsCi0JMHg3YzhjMWIxNywgMHg0MWFlNTQ3MSwgMHg0M2ViMzBiZSwgMHhmYWNjMWQzMywgMHhjM2YyYmJlZiwgMHhkYmIzMGI1OCwKLQkweDQ0M2YyZmJlLCAweGEyNjU5ZGU4LCAweGY0NmY0ZTc3LCAweGJkMTQ2MjI2LCAweDBjZGM1YWM3LCAweGZiZWY0ZTFlLAotCTB4ZjYzOGRlMDAsIDB4YjhiMDI1ZmEsIDB4ODNiMjhiZjcsIDB4ZmYxNjBlM2MsIDB4NmE3YTcxZTUsIDB4MmZmOGIyMDEsCi0JMHhiZTk2YmIxZiwgMHg1MmY2ODZkYiwgMHhlM2U4MDQ2MCwgMHg3N2ZlMjNkMywgMHg0ZmI3YzQzOCwgMHg2NzUyYjQxZiwKLQkweDk5ZjllN2FhLCAweDFlMjNkN2U5LCAweDg2ZmQwNzg4LCAweDI4YmEwMWY5LCAweGRiYjZjN2U0LCAweGVkNWUxODEzLAotCTB4ZTg0YTUyMTYsIDB4MDVlZjcxN2EsIDB4NDc3MzZhNGYsIDB4MjkyMjVkNjEsIDB4MmI0MDdkZjAsIDB4OTdlOWM1NzcsCi0JMHhkZjgwYTBkYSwgMHhlYjVhZjBkZSwgMHhmYTE3MjJmYSwgMHg1N2Q4ZjIzYiwgMHhiNThlNTAwNSwgMHg2MTM0M2IzMCwKLQkweDMwZjY4OGFmLCAweDAxYTEzZDA5LCAweGRlZmFjMzdlLCAweGRjNDA2NWFhLCAweGM1MDJmYmI4LCAweGMwNzFlYjhkLAotCTB4OWY5ZmM0NjksIDB4ZjgyMjBiZDYsIDB4YThlMjk3YmIsIDB4YmFiM2Q3MGQsIDB4YjBkZmM0MGMsIDB4ZjY2Nzg2MmYsCi0JMHhlOWJkN2YwMSwgMHgzOWYwZGVjOSwgMHhkZmUwMzAzNywgMHhmNGRlY2Y4MiwgMHg4YjdhNmY1NywgMHg5YWU3ZDQ3OCwKLQkweDc2YmJmY2U5LCAweDJiZjc5MjVkLCAweDUwZDRmNDE1LCAweDgwZjRmZmU2LCAweGM3YmY3ZDZmLCAweGYwMjU0ZjBjLAotCTB4ZjNiZWQ4ZjEsIDB4Y2ViYTU3NzEsIDB4MDk4MzZkYzcsIDB4OTA2ZGU3MWQsIDB4ZTlmZmRhMTcsIDB4ODA5MzBiYTYsCi0JMHhiNDFmYjQyZSwgMHg3MWI3YmJiYiwgMHhiYTE3YjlmYiwgMHhmNjM2Y2M5ZSwgMHgyZmU1Y2Q1NywgMHg0MjkyNWZkYywKLQkweGI4ZTk0Yjg0LCAweDQ5MjE0NTJlLCAweGJkMTYxZDc0LCAweDFiZjQ0NDJiLCAweGY4M2Y3NmI0LCAweDVhMWNiYmUzLAotCTB4ZDhmZTBhYWQsIDB4MmE0MzU3ODksIDB4ZGJmNDY4ZjQsIDB4MjI3ZmVmNGYsIDB4NjU5YmZjMTEsIDB4ZTFmNzE2MTksCi0JMHhjYmQ0NzQzOCwgMHhiNzZjYzEyNSwgMHg2ODBmZGEzMywgMHhkNzRmZDYzNiwgMHhmNDQxYTUwOSwgMHhlYmE0ZDQ5MywKLQkweGMwNzU4MTJmLCAweDBjM2MzZWVkLCAweDk2MDY3MmY0LCAweDMyY2IzZjdhLCAweDU0ZTFmNzE0LCAweDIzZDMzZmE0LAotCTB4NjdhOGM5OGQsIDB4Zjg2Y2Y4NGUsIDB4NDcwZDBmZGUsIDB4ZTA0NGZkNGYsIDB4ZDA5ZjIyNjgsIDB4ZGYxNDgxZWYsCi0JMHg3ZWZjZjRlNCwgMHg5ZDIwNzI4ZiwgMHg0ODVlMjA1NSwgMHhjMDJmZTQ1YSwgMHhmZmQzYjM3ZiwgMHhmZDBhMTliZSwKLQkweGZiZDc1ODRhLCAweDdlOGEwZWFkLCAweGJjZjBhNWViLCAweGZkMWUzMGQxLCAweDMyZjdkNTRlLCAweGU1OWViYmUxLAotCTB4NzQ0NzIyNGQsIDB4ZGI3NGE3N2UsIDB4MTc1YmY3YzIsIDB4NDZkZGQ4MzUsIDB4NTBkOTMwYmIsIDB4NzRjZTZlYWYsCi0JMHhmODQ0ZWMxYiwgMHg5NWMyMTgwNywgMHhiNzdjMDQ4MiwgMHg5NzVkYjM5OCwgMHg3YzAzNWNlNCwgMHhlMzA0M2Y3NCwKLQkweGY2MDVkZjgwLCAweGJiNWIxMmRlLCAweDRjNTE1NWUyLCAweGU3MmY4MGRhLCAweDVlZjlkNzhlLCAweGQ1M2VmNTlkLAotCTB4OTE1ZmM3NGYsIDB4ZjkxN2M4MDksIDB4MTA1NTQyOWEsIDB4YTBhZThmZTksIDB4YjdlYjQyYzQsIDB4YTZkY2RhZjMsCi0JMHhiZDYxZDM0NSwgMHhmNjYxNmUzYSwgMHg0YjI5MDU3OCwgMHg5MmIzN2YwNCwgMHg3YzQwMTVkNCwgMHg5NGIxMjRmMiwKLQkweDI0OWU1YzgyLCAweDQ3ZTYyNDZmLCAweGEyZmJlMWM5LCAweGJlZGNmMDgyLCAweDUzMTc2OGM2LCAweDVmNTBkOTdmLAotCTB4Y2ZhYzZmNTAsIDB4YzNhNmQ3MjcsIDB4YjVmY2YyYmUsIDB4YTAwODA5MzIsIDB4YWZlZDhjMmYsIDB4MTY4ZTRjODgsCi0JMHhiMGQ1OWE5MCwgMHhkOTk1YWZiZSwgMHg0ZGQ3MzYzYSwgMHhkZjBhMmNhNCwgMHgyZjFlMTc5MiwgMHgxZmViNDM5OCwKLQkweGQzMWVjYzhiLCAweGE2MTc0NWY3LCAweDgyYWJmODMwLCAweDZkMGYxNWViLCAweGZmMjlhNGZmLCAweGU4NzlhYTA2LAotCTB4YjBkNTgxZjcsIDB4MDliN2Y5NWUsIDB4OTYzNTI2ZGEsIDB4N2UxNmRmN2UsIDB4ZmFmYWJjMzMsIDB4Y2IzZmIzMWYsCi0JMHgyMGQyNThlMSwgMHhlYzcxMDI3OCwgMHgwZWJlNmU4MCwgMHg0ZDJlN2FlYiwgMHgwOGUyMWI3MiwgMHhlMmEzZDQyYSwKLQkweDlmOTlkZjBjLCAweDlmODE4OGQyLCAweDM2YmQxN2VlLCAweDFmZTMxZmE5LCAweGE5MDRhN2YwLCAweDlmN2VmMTViLAotCTB4ZmE2MjMzZmUsIDB4ZmVjNjkzNGYsIDB4YTQwZmZkODAsIDB4ZmExODE3ZmQsIDB4Zjg1MDdmNTcsIDB4M2ZjMGM1ODcsCi0JMHg0YmZmNWUyYSwgMHhiYjc2Nzg1ZSwgMHhhYTkzZWE5ZiwgMHgxMjI0OGZjZCwgMHg5NzFlM2ViYSwgMHg0YTM1ZDJlYSwKLQkweGVlOWJjNWRmLCAweDFmM2EwNDRlLCAweGMwODlmYzkzLCAweDYyMDNjN2FmLCAweDdhY2UyMDY5LCAweGU5ZDI1NzM1LAotCTB4MTAwYTcxZWQsIDB4ZDI3ZjgyYzcsIDB4NzMzYzRmZmUsIDB4NWZmN2ZhMWYsIDB4MThkZDkyNmMsIDB4ODZiMDZhOWYsCi0JMHg5NzFlNTRhYywgMHg0ZTljMmQzNiwgMHg4ODdlYjE3MiwgMHgyNTM5ZWZkNSwgMHhjOGQ5YmQ0MiwgMHgzZDRmNTU3ZiwKLQkweDBhZjkwZTkyLCAweGJjNzg1Mzk0LCAweGVjZjY4NDI2LCAweDk2OWY4ZGQyLCAweGJhNDRiYWUwLCAweGRmY2M4ZTUxLAotCTB4NTJlN2Y4YzEsIDB4NTFjZGZmNTAsIDB4MjlkYjYyOTIsIDB4NTc3N2U4OWMsIDB4Mzc1NGJjNzMsIDB4NGM0YTc3ZGQsCi0JMHhhM2I1N2Y4NCwgMHhiZjdlNmMzZiwgMHhkN2E1ZGI5MiwgMHgyM2I0YWU0OSwgMHhlMzI3MDRkNCwgMHg4N2QwMzhjOCwKLQkweDgwNDgzZTNhLCAweDBiZTJhNWQ5LCAweDFjNDJlNzhmLCAweDJiZTM2M2IyLCAweDllMTQ0Mjg5LCAweDFkM2EzOTc0LAotCTB4M2I4ZmZkYmMsIDB4NmRmNTllZDUsIDB4NjhiMzk1MjcsIDB4YWY1ZjQ3ZmIsIDB4NGY2ZTY2ZDQsIDB4YjE3MmIwYjcsCi0JMHg0NDljNGExYywgMHhmNWUyZTBmNSwgMHg4ZmE3ZTZiMiwgMHhjNGZiM2YxNywgMHg1YzQxOGY5MywgMHg3NmFiM2RmMCwKLQkweGQxN2ZlZDAxLCAweDMzYmYyZmIzLCAweDZkMTdkNjkxLCAweGIzYTZkMzkxLCAweGY0ODUzODY5LCAweGU5YWE1ZDA4LAotCTB4MjJmMjJiN2YsIDB4ZmU3YWE4NzQsIDB4ODRiZDQ1NjUsIDB4NGE2NWZmM2QsIDB4YjY4YjFlODQsIDB4MjVjODU2ZWMsCi0JMHgwZTI4ZjhiMSwgMHg5ZGRhNTZlZSwgMHgzYzEyZTg3MSwgMHg4MWY2MDI1NCwgMHgxNTNmYzJmOCwgMHg1ZGYxZmJhMCwKLQkweDFkOWZlOTAyLCAweDVmZWI5ZjA3LCAweGYwMWZmNWM2LCAweDc0ZTQ3NDg0LCAweGY0Y2RkMzBhLCAweDBiYTUzNTdlLAotCTB4NGU5ZDZiZTgsIDB4NWNiMWY2ZTYsIDB4ZWE3ZjQwYmYsIDB4ZTdlN2U0MjgsIDB4NTRmYzUyNzYsIDB4YzFhYWRkZmUsCi0JMHhiYjlmMmJmYywgMHg3MWU2MTEzMywgMHg3YzYxYWE1NCwgMHhlOWRkZjhmZCwgMHhhNTZlM2ExZSwgMHg2Mzc3NGZlYywKLQkweGZlNTc5ZWM5LCAweDZmYzgyN2UxLCAweDQ5ZmY1ZTBiLCAweDg4NjdjNjNhLCAweDZiODJkMzI3LCAweGU2MTMzZjhmLAotCTB4NGNkZDZmMzcsIDB4ZTI3Y2RmOWMsIDB4N2NhYmJlNDUsIDB4ZmQwMzJjNWMsIDB4NGE0NGI5ZjcsIDB4OGI5MWM0YjcsCi0JMHhlM2IzMTI4MywgMHgwNmEwNmU4ZSwgMHg1MWRmOWQxOCwgMHg3ZTYwYWNiYSwgMHhlNjIyMWJjYSwgMHgwNzcyMTEyOSwKLQkweDA5ZmZmOTAxLCAweDEwYjUwYjlmLCAweDhkYjlmZWIwLCAweGE0YjM2OWQxLCAweGNhZDQ2MWZiLCAweDhkZDdlNjhjLAotCTB4N2QwMWI0ZjcsIDB4ZjRmMjBjNGUsIDB4NmE4YjdkODcsIDB4M2UzOWY5MjIsIDB4YmY2ODZmODQsIDB4ZmFkM2ViZTIsCi0JMHg1NTUwZmEzMywgMHhhM2JmYzA1YiwgMHgzYzMxN2NlYiwgMHg2NGRiZjc4NywgMHhmMGQ3M2Q4ZiwgMHgzYjI2ZjkxZCwKLQkweDNlNzJmZTMyLCAweDAxM2I4NTNlLCAweGU5YTNlN2Q2LCAweDQ5NTRlZGYxLCAweGRhZjg3NDE2LCAweDQ1N2YxNDQ4LAotCTB4Zjc5MzM3YzksIDB4ZjkzMmY3OGQsIDB4NTAzZGU1ZDYsIDB4NjdlZDBhNWUsIDB4MDNmMjYyZGYsIDB4NDdmYWMxZGYsCi0JMHhjN2Y1MGFlMSwgMHgwYmQ3ZGRmNiwgMHgyNGFjMGZhOCwgMHgzN2FlNGYxNCwgMHg4ZGFlNWNjYSwgMHg1MDlmM2FlZCwKLQkweDI5MjEyNWI4LCAweGZmYTA1ZjhhLCAweGVlM2ZjNDE0LCAweDRiNWZjYzU3LCAweDk3ZDI4YmJmLCAweDYyNWUzMGQ1LAotCTB4ZGNiYTdmNmMsIDB4ZmZmMmUwMmUsIDB4YzhmZmM4MjYsIDB4NzU5M2ZjODgsIDB4YjY3YmVlNGMsIDB4MTdhOGZjOWYsCi0JMHgyNzgxY2IxNywgMHhhNTc5MDMxZiwgMHg0MTU3ZTlmMiwgMHg5ODMyZTU1ZSwgMHg3YjhkNjdmNywgMHg5NTMxZjlkZiwKLQkweGJhODJjZjkzLCAweGE3ZjUxYTljLCAweGI3MmI0ZTU5LCAweGU0ZjEyNThlLCAweDQ2YTczM2Y0LCAweDdkMjljYWUyLAotCTB4OWQ0ZTU3MWUsIDB4ZmZjN2M4ZWQsIDB4Yzc1M2ZhNTcsIDB4ZmMyNjU3ZGYsIDB4MjdiMGZhZTksIDB4NjFmNTlhM2MsCi0JMHgzZTIyYTRiZCwgMHhmZTkwZmFjZCwgMHg2MjBhNDViZCwgMHgzYmU3NGZmOSwgMHhmZWFhZGY5ZCwgMHhlODA4NjRiNCwKLQkweGVhNWYzMDlkLCAweDRiZTYxNzdjLCAweGUyNjJlZjlkLCAweDk5ZmMwNmExLCAweDE4ODY1ZmRiLCAweDgxNmI4NTEwLAotCTB4ZjAzMmZlYWQsIDB4ODA5YTZjMjMsIDB4ODc2MTdlNzIsIDB4NmNlZWYzMDUsIDB4YmZmNDA0NjMsIDB4NTg0YmQ0NDYsCi0JMHgxZWUyZGQ3ZiwgMHg4Y2U4NzYwYiwgMHhmNjdjMmY0OSwgMHhlZGVkZjI3MywgMHhiZTVhZWZmZiwgMHgzMDdiNjNlMCwKLQkweDg2MWNhMDNiLCAweDc0ZDE0YmUwLCAweGUwYzJkNzFjLCAweDAyNDAzZWFjLCAweDc4MWY1MTQzLCAweDdmMjhiMmM0LAotCTB4Zjc5NzBlNzksIDB4OWFkODNlMTcsIDB4ZWMyYzc4MGYsIDB4OGVkNDk1MWEsIDB4ZmEzMDcyN2EsIDB4NmY1Y2Q1OTMsCi0JMHg0OWFiZjY5YywgMHhiNzRmNGZhMCwgMHg3OGJmYTBlNCwgMHg4YWU4YmY3YSwgMHgzNGY3ZmY5NywgMHgyMDlmZWZhNywKLQkweGFlY2I0NjNlLCAweGE0NGVhNDhkLCAweGJhNDVkNmZjLCAweDZmZjA2ZWQxLCAweDcxNGQ5MWI0LCAweGNiYTZhZmY2LAotCTB4NWY3ZTJmNGMsIDB4MDFmZDAwN2MsIDB4ZGJkYjRmMWYsIDB4ZDhlMmNhNGIsIDB4ZjlmMmI3YjEsIDB4MjVmM2Q4Y2UsCi0JMHhiNzE3OGZhZSwgMHhiZDgwYjdhYywgMHg4YjQ2ZjE3NCwgMHg0MWJmZWZjMSwgMHg0NzlkN2NlNiwgMHg2N2FmODBmMiwKLQkweGM2YmJiMWVjLCAweDhiZjcxZTAwLCAweDU2NDllNDFhLCAweGJjNTI5Y2I3LCAweGYzNDJmYzcxLCAweGIwN2ZhMWZjLAotCTB4ZGQ5M2VlYjcsIDB4Y2EyZjRmYzgsIDB4MGYwMWRiYzEsIDB4MTFiNDllMmYsIDB4YTFkYjJmZDgsIDB4MDc4YTJkZDQsCi0JMHg4MzBhOWRlNywgMHg0NjYxYzc3MywgMHgyZjBhMWY5NywgMHg1MGNlNWQ4NSwgMHgzNjczYzQxMSwgMHg1OGRiZTQxMiwKLQkweGYzZTQxMzNhLCAweGIwMjQwZGQzLCAweDJkZTgxYjMyLCAweGMxMjM3YWIyLCAweGNhMGE1N2JjLCAweDc3YzMyN2FmLAotCTB4YTM1ZWQzNWYsIDB4ZTZjMmYzZTQsIDB4ZTgxMjdmMmQsIDB4MDQ1YjRiN2IsIDB4MmZiNjg1YjcsIDB4ZTAxNWRhOTUsCi0JMHg2NGU2ZWE5NywgMHg2OGQ4ZjQxMSwgMHg3NGZmY2Y1NSwgMHgxNDdkNzI1ZiwgMHg0YjI3ZGRmZiwgMHgxM2JkOTc4OCwKLQkweGYwMDliYzVmLCAweDIxNDNhNjcyLCAweDc5ZWZjZmIwLCAweDY4ZjMxYmE5LCAweDIzZTRiNGNmLCAweGFmMzRmNWJmLAotCTB4YjJlNDdkZTcsIDB4NDNmNDEyYTksIDB4M2E2NjVmMTAsIDB4MzA0YzZhOGUsIDB4N2IxNTI3ZDQsIDB4MzM1YzAwMDcsCi0JMHhiNWNiZWRhYywgMHgyYmI3NzgzOCwgMHhhMWZkZWVjYywgMHhiMmI3YjNlNCwgMHg5NmZiZjJjZiwgMHhiMTVlYmYyZSwKLQkweGZlZWY4YTJjLCAweGZkYmYyYjFlLCAweGIyZWZjOWUzLCAweDk4N2Y2YTk1LCAweDljZDZiMmY3LCAweDY1Y2Y4MGZlLAotCTB4YzVmYjkxN2YsIDB4N2Q2N2FiZTMsIDB4Y2NkYzJmY2MsIDB4OWFiYjY1ZjMsIDB4MWE1ZWZjYTgsIDB4NTQ0ZGJmMjUsCi0JMHgwMWM0ZTM3ZSwgMHhlNTgxZmE1ZiwgMHhkZjkwNTlmNywgMHgyYmJkZjAzOCwgMHhmMmU4ZmEzMywgMHgwODcyZGI5YiwKLQkweGM5YjczN2U1LCAweDc5MzNjODYyLCAweDdkNzZlNjU1LCAweGY0MmJmMjhmLCAweGVhMGQzZWJiLCAweGEzODhlNmIyLAotCTB4MTAwZjAxYWYsIDB4ZTNjY2RjYzcsIDB4YzgwZTMwZmMsIDB4NzFiOGE0YjEsIDB4NjM5NTdkOWUsIDB4OGU1OWJmZGYsCi0JMHg5ODIzNmQ5NywgMHg2ZjRiMTMxNywgMHg3NmNiYzcyNiwgMHg4MDE2Mzk1MCwgMHg5NzhlNGNlZSwgMHhjZTM5NTJiNSwKLQkweDExZGY5NThlLCAweGJlY2JmMjMxLCAweGRmNjIxYTVmLCAweGZmNjczNzU3LCAweDVlM2E2NmVlLCAweDZjZDY0NzllLAotCTB4ODhiY2ZkZjQsIDB4OTY4ZDhmM2MsIDB4NzA5MTQ5NjcsIDB4YmNmMjMxYmUsIDB4YmNmMjZmYmYsIDB4OTUzM2NiOGQsCi0JMHgxYzVhYTFkMywgMHhjNjJkNmFiYSwgMHgyNzE3YWNmYywgMHgxZTdjNmQxYywgMHgyMjZmZjJmOCwgMHg1YmFmNDlmYSwKLQkweGVhZmI1ZDk4LCAweDgwNjNhMzg0LCAweDc4NzBhNjJmLCAweDc0M2E3MDg2LCAweDdmZDhmY2ZhLCAweGQzNDdjNGM5LAotCTB4NWY4YTRlNDEsIDB4ZTQyZGZiYWEsIDB4MjhkOTJmMzUsIDB4NGI4N2QwMTMsIDB4MWZhMTBlOWIsIDB4ZThhYjhlNmEsCi0JMHhiZTM5OTU3NiwgMHg3MzExZWJhMiwgMHg4MzUxNjU5YywgMHhjN2M3OWViMSwgMHgxMWRiMTcyZiwgMHhhODlhZjI1ZSwKLQkweDc3YzM4YTZkLCAweGI5YzEzZDc5LCAweGU3MWRlZWJmLCAweGJkOWMwODk4LCAweDc5ZjQ3ZGM1LCAweDNlOTcwNmY0LAotCTB4OTcwYTMxYWYsIDB4MWYyNGQxOTcsIDB4OGYxNDg5ZTIsIDB4YmZmZTJmMjgsIDB4MmE4NzE4OGEsIDB4OTBjMGJjMmIsCi0JMHhlYjkxM2ZlZiwgMHhjMmJhZmNjOSwgMHg5NDRiMDg2MiwgMHhmODBlM2U0MywgMHhlYzc3ZjU1MSwgMHhiMWIyN2Q4MywKLQkweDMwM2NkNTA3LCAweGI0NGQyN2E3LCAweDdhOWZjMTdhLCAweGYyOGRkZWRhLCAweDA5NjVkM2FjLCAweGJjMGRjYmE3LAotCTB4ZDQwNzE3OWYsIDB4NTViZjAxMTQsIDB4NTg2ZTBiMzcsIDB4NWY0M2FhNzcsIDB4YmQ4NmI5ZTIsIDB4MDI1MTdlOGYsCi0JMHg1NWIwYjQ3YywgMHgwZjkxNWI3MCwgMHhlN2UwMjk0ZiwgMHgxN2Y1ZDA5NSwgMHhlNWJmMjlmOCwgMHgwYmJkZGExNCwKLQkweGY4NDUwYjViLCAweDAxMGVlMTdlLCAweGMzN2JkMjEzLCAweGI2ZTk1ZjRmLCAweDU5ZTNkMzg4LCAweDcwMDlkZjgwLAotCTB4OGQ3NWIzNzYsIDB4NTdiN2E3YzMsIDB4ZmMwMzdlNGIsIDB4NWI5ZDhmYzUsIDB4NTZlMGM1OWQsIDB4ZGUwNDZhYWQsCi0JMHhlNzc4NjFiMSwgMHgzZWFmMzg4OCwgMHhiZGUzYWJjMiwgMHg5ODk3NzgzNywgMHhlNGRhZjhlOCwgMHgyMjBmMTgzMywKLQkweGYyN2RjOTJkLCAweDVjNmRiZTZiLCAweGExYjQ5YWFhLCAweGE3YzdhNjdmLCAweGYzYmQxN2VlLCAweDk1MWI4ODY0LAotCTB4OGUzMTkyMGEsIDB4ZWRmMThkZGIsIDB4OGZmZmEwMWYsIDB4ZjgzZmQ3Y2UsIDB4NmViYTIxMTcsIDB4MDlmMWI5ZmQsCi0JMHg2N2M5ZjdjNCwgMHhiYTAwY2QwZSwgMHgyNDUxN2EyYywgMHhjZTk3NGEzNiwgMHhlMTA5MTc0NiwgMHgwMTQwNDgzZSwKLQkweDg5MzU1NDNhLCAweDQ4Zjc4YzFlLCAweDVjZWI4MmExLCAweDY1YThmOGQxLCAweDQyZWNkOGY4LCAweGQ1YjU1ODNkLAotCTB4YmY0ZTk4MWEsIDB4NDlmZWRhYWYsIDB4OWQzM2Q4MmUsIDB4Y2JlZjc1NzcsIDB4MTlmZmJmMDIsIDB4Zjg5OGU1MDEsCi0JMHgxZjYxNzNkYiwgMHhmYjYyNGFhOCwgMHg2ZWZjNjYzYiwgMHhkOGZhZDg1NCwgMHgxYjMxYzNiMSwgMHg2MDY4NDFlNCwKLQkweDgyYWE4YmU3LCAweDk0NmI2NGIzLCAweDQ1N2JmYzNkLCAweDdiZTk3MWM2LCAweDdmZTZkNzk4LCAweDMwYmNjMDVhLAotCTB4NWNmYTJmODAsIDB4ZDM2ZjllOGIsIDB4NGJmMzM0ZjEsIDB4MDBlNTlhYWEsIDB4NmFhYTUzOWMsIDB4NzEwOWQyZDgsCi0JMHg1NjgzYWE5MiwgMHgxYmFhZDc1YywgMHhiNzVjNjE0ZSwgMHhhOGIzZjM3OCwgMHg0NTliYWI3ZiwgMHhlMzFjOWY4MywKLQkweDIxODgzNjlmLCAweDRkNTdmODJiLCAweDRlY2UzMDRiLCAweDFlYjA4N2ViLCAweGU5YTcxZjhjLCAweGI0NWE4ZmNkLAotCTB4MWZiYjc1YjksIDB4YTdmOWU0ZTQsIDB4NTI5Y2YxMTIsIDB4ZjQ0NGE2ZGIsIDB4MWZjZTFiNTMsIDB4NDdmMThhMWYsCi0JMHhkNzllZjc4MywgMHhmOWMxM2QxZiwgMHgzMThhNmZlMywgMHg1MjFhNDc5ZSwgMHhmMGE1NGZkMSwgMHhiMWM1OTQxNSwKLQkweGZmN2NjM2Q3LCAweDgwN2ZlN2VjLCAweGQ2Yzc2OTc4LCAweGYwMDBmZWNmLCAweDk5ZDdmZTJlLCAweGUyODJmYzNmLAotCTB4YmJiMmVjOTEsIDB4M2Y1NWZmNDEsIDB4OWJjNjM2ZjMsIDB4NzI4ZWVmZjQsIDB4ZjRmOWQ1YmQsIDB4ZWJhNzE4NTMsCi0JMHg0MWFhY2Y3YywgMHg0N2FkOWQ2ZiwgMHhhYWJjNDMwNywgMHhlOTk3Y2I3MywgMHg2ZjJjOWY2MCwgMHhkNmY2ODY5ZCwKLQkweGZkYzU2ZGYyLCAweDQwZmIxYzQ5LCAweDAzNmY4MTJmLCAweDlhMTM4ODdkLCAweDY5YjdiNWU5LCAweGYzODA2MGVmLAotCTB4NmMzN2E1MjQsIDB4MGJlMzg2MDksIDB4NWUyYzI1YzEsIDB4NDJiOGYyYTMsIDB4NmM3OGZjNjMsIDB4ZTlhMTFjNGMsCi0JMHg4Y2E2NmJiYSwgMHg1NGQ2NTI4MSwgMHhjMjc4ODdkMiwgMHg5NzhlOTQ1YiwgMHg4ZDdlODFmNiwgMHg4OWVmNmZjYywKLQkweDFmZTEyNzdlLCAweGQ1YjI0ZTk0LCAweDliY2ZiZjQ4LCAweDMxZjFmZGU2LCAweGVkNGE2YjY4LCAweGVhMTA5ZTMxLAotCTB4NzhmNGRlMDMsIDB4Yzc4YTFiZWYsIDB4ZGFmOTA1NmQsIDB4ZGY4YzI3ZmEsIDB4ZDNhNmRkMDAsIDB4ZmIzZTc2ODksCi0JMHg5Mzg4NjBmOSwgMHg2ZmJiOTMxZiwgMHg1NmQ1N2RjNSwgMHg1Nzk3ZWUyYiwgMHhmMjhiYmViNSwgMHg3NWVkYjlkMywKLQkweDhmMDkzN2I0LCAweGYwOTI3NmJiLCAweGYxOTM4YjFmLCAweDhkZWFkM2RjLCAweGUwODcxNjJlLCAweDg1Mzg4N2Y4LAotCTB4NzljZjg4OWEsIDB4YjFmMTgyM2MsIDB4MjllOGE3MWUsIDB4NzU4NTcxM2UsIDB4NjUyM2NmMjgsIDB4MWIyNTk0NzEsCi0JMHgyOTg4NTdkZiwgMHg4ZjhjMjNlZSwgMHhkMTNkZjNhYywgMHgxYjgzYzc0OSwgMHgzYTJlMzBmMCwgMHgwZTNmMTZkZSwKLQkweDcyY2I4ZTE0LCAweDIwZmQwMTdhLCAweGE3OGUxNmNlLCAweDg4NDBmYWQxLCAweDc3ODQwNGFmLCAweGQwN2QxYzQ5LAotCTB4ZTljNTllYjksIDB4ZmU2MzY1M2EsIDB4MmMzZTg0NDksIDB4YTI2NDU2ZmUsIDB4ZGVjZjNlYjMsIDB4ZTBkZWE3ZDYsCi0JMHhjOWY4YjZmZiwgMHg2Yzc5YzU4NywgMHhiZTNhOWUyYywgMHhlN2M3YWY4ZSwgMHhiN2VmODU1OSwgMHg5ODIxNWE1ZiwKLQkweDgwMmE2ZmY3LCAweDFkMzQ5NzFmLCAweDUxM2YyMDUyLCAweGY5ZjRjNzVmLCAweGJjM2I3MDc2LCAweGYzMTExOWUzLAotCTB4ZjcwNzU3NmIsIDB4ZWIzNzFlYTIsIDB4ZGU3MGE1OGIsIDB4M2ZiYzBlMjEsIDB4NmQyZWYwZTMsIDB4Yzc0NGViNjYsCi0JMHg0OWMwNTc1NiwgMHhiM2Q4ZTlmYiwgMHg2OTc5ZjkwMywgMHg0ZmM1MjFlMywgMHhmMGQ3ZGJmYiwgMHg0NmZjYzJiYywKLQkweDRlYjAzZjI2LCAweGVmZTBhMjA0LCAweDJlNzc2ZTc4LCAweGJiMzIyZjhiLCAweGRkY2UzY2RmLCAweGQzYTc5ZTU2LAotCTB4ZWE5YzdmMTIsIDB4NzE4NjUzYzYsIDB4MGE4M2Y5MTYsIDB4ZmYzZTk3Y2IsIDB4Y2YyNDI3NzgsIDB4NDRlZmU4MmMsCi0JMHg1ZjIwNGM5YiwgMHgyYzUwNDRmMiwgMHg1OTNmYjc4ZCwgMHhkYzc5OTU2OSwgMHg3NDk1OGViYSwgMHgyNWYzYzRiZCwKLQkweDQ0OWU3NjJlLCAweGRlMzA1MTRjLCAweGZlMzVkY2IxLCAweDk0MWE1MjYwLCAweDUwN2UwYThhLCAweDVmYjY0YWVkLAotCTB4NWE5ZmZiNWIsIDB4MzZiYmQwMDYsIDB4Yzc4YzA2ZjksIDB4ZWJmMDk5ZDYsIDB4YzIxNzczNGUsIDB4ZDRmNzEzMzksCi0JMHhhZWMwMzFiMiwgMHhlYzkzN2Q2NiwgMHg1ZmUwMThiMSwgMHhhZmVkMmFlZSwgMHhkMTU3Mzg1MiwgMHgyNzVjZTA3ZSwKLQkweGVmM2MzNDkxLCAweDk0OTYyNjIyLCAweGI3NDQ3Y2MyLCAweDEzOGY2ZGM1LCAweDY1OWQ5MzA3LCAweDE3ODUxYmM0LAotCTB4OWYzYzZkZDksIDB4NTdjZWJlNDIsIDB4OWY3ZDFmYTEsIDB4NmRhZGIxNzUsIDB4M2RiYTM2MWYsIDB4YzQ5NWYwMDIsCi0JMHhhZjBiZDVmNywgMHhiYmJjZTM3NywgMHg1ODBkMDUxYSwgMHhkNTYzYWE5YywgMHgwNWYyY2U5ZCwgMHhkYWU4ZGQ2MCwKLQkweDJlNGI5NDlhLCAweDg3ODkwZmM1LCAweGZlMGUyN2FlLCAweGJkZGM2ODVjLCAweGFhZDFmNDFiLCAweGE2NDllMjQ0LAotCTB4YWFiMTQ2NzIsIDB4NGU3MDM5OGEsIDB4Yzg0ZGI0NjcsIDB4ZjUzZDNlMDEsIDB4NWZiNDhiZWEsIDB4NjA0ODhiN2IsCi0JMHhhOWNiYmY4YiwgMHg5Mjc5MGJlNywgMHhlNDFjY2U0MSwgMHgwMTBiY2M3ZSwgMHgzNTI2ZmU1NiwgMHg1ZjM5YTcwMiwKLQkweGU5MmJjMDg0LCAweGQzYmM3MzkxLCAweDM5YzYyNzQ0LCAweGQxMTNhZjRlLCAweGM1YzkxNTlmLCAweGZjY2M5YmJmLAotCTB4ZjgwMDEyNzMsIDB4ODhiMjdhZjksIDB4NGExYTc5YzMsIDB4YzE0MmJmNzgsIDB4N2YwNWRhM2MsIDB4NDQyMGJlNzksCi0JMHhmMWEyMWQxOCwgMHhmNDZhNWE5NSwgMHg4OWVkZWIxNywgMHg0MzZmYjBiOSwgMHhjODM2OWVmYywgMHhmZGUwYWU0YiwKLQkweDllMzMyYmY1LCAweGU3ZTJhMWYzLCAweGNmNTJmYjA3LCAweDdlNmNmZmQzLCAweDdmZDA3ZWM5LCAweGE4ZjlkZTE1LAotCTB4MzZjZmZiZDcsIDB4ZGIzMjAzOWUsIDB4ZTQyZjA4ZWYsIDB4N2JiOTUwMGQsIDB4ZTdiNTg4NGMsIDB4NWMxZTViMmIsCi0JMHhiMWUwZjkwZCwgMHgwNDY0ZjNmYiwgMHg5MTU0MWJlNCwgMHhhMWYyMGQwNCwgMHgwNzdkZjZjZCwgMHhmMWM4NGRlOCwKLQkweGUwMjcxMjcxLCAweGQ5N2Q2N2IxLCAweDg3ZGI3ZTBiLCAweDk4ZjI2ZWZmLCAweDBiNTdlMmYzLCAweDJlOGRmYmMxLAotCTB4ZjA1OGRmZGMsIDB4M2Y1MWRiOTcsIDB4Zjg4YzMzNTksIDB4ZmM0NmFiYjUsIDB4ZjE5ODQ2M2EsIDB4NGJiM2M0NjgsCi0JMHhiMjhkZTIzMywgMHg3ODdjZTA3OSwgMHgzYzZmMWE0ZSwgMHhiM2M2NjU1ZiwgMHgwZTFkYTg0NCwgMHhkMDQwNGFmNiwKLQkweGY5MzFmZTgwLCAweDExZWJjZDBmLCAweGE2ZmNkZWVlLCAweDhmNWYxYjM0LCAweDVmZTk1ZTM4LCAweGE5OWQyZDk5LAotCTB4NTMzYjgwNmMsIDB4OTg1Y2ExMGEsIDB4MTljYjI4ZTUsIDB4ODNkZmUwMTIsIDB4ZjEyYjAyZDIsIDB4N2U4NWNkMmIsCi0JMHg4ZjlmMDY0OSwgMHg3M2JlYzE1MCwgMHgwMDg5MWM4MCwgMHgwNDcyODZhZiwgMHhjZjQwMjgyNywgMHg2ZTA3YzgzYiwKLQkweDdjODVhN2EwLCAweGQ5MTliZTQyLCAweDJjZWYzZDMzLCAweDVjZDBlOTdmLCAweGUwM2FkNWZhLCAweGFlNTE0YmRmLAotCTB4MTRhOTM5ZDgsIDB4MDZjZGE4MTIsIDB4YjBkY2Q1MzksIDB4MzY3ZDA3NmUsIDB4ZjM4MjQyYjUsIDB4MThhZDQ0ZTYsCi0JMHhkZGNjZTcwNiwgMHhjNzkwM2U1OCwgMHg0NTFhZWZkZSwgMHgxODJjNWYzMCwgMHhmYTBlOWIzYSwgMHgyOTFlN2FhOSwKLQkweDgwZjdmZDAzLCAweGZjMDMzZGQyLCAweGNjZWRmYmRiLCAweGFlYzhiOTRmLCAweGE1ZmYzZWEwLCAweDljYWZkZjVkLAotCTB4YTljYjk3ZmEsIDB4YzhiNTc2M2MsIDB4ZWJjMzljMmEsIDB4YmI2NGQ5NmEsIDB4MjJjZGVhMDAsIDB4NGVhZWY3OWUsCi0JMHhjNjA4YmJhZSwgMHgxOTkxNmNlZiwgMHhjMGI2MTU1YywgMHhiN2M3ZTAwNSwgMHg3NDFlYjhjYSwgMHhmM2M2NGM1NiwKLQkweGFkYmI2MTJjLCAweDc2MTNlZDg1LCAweDc4OTI3Y2I1LCAweGVmM2U5NDdiLCAweDIyZjg3ZTZjLCAweDZhM2MzMzg4LAotCTB4NzkzZmJmODksIDB4OWRmMmNkYmQsIDB4ZmFmMGQ0ZmMsIDB4M2Y5MzE0ZGIsIDB4ZTU4ZGJkNzEsIDB4OTQzMDNjNGYsCi0JMHhmOTY5NjNjZSwgMHgzMzBlYmU2OSwgMHhlOWM0OTg3OSwgMHhhYmZjZDJmYywgMHg1YWRiZmU3MCwgMHhlNzRmM2ZhOCwKLQkweGZjZGUyMjUxLCAweDNjZTg0YmEzLCAweDMxMmRiYzI3LCAweGQzM2M0YWZkLCAweGEzYjNhNGU3LCAweDBlZmVmMDNjLAotCTB4M2UwMDY1YTIsIDB4MDIyMTRjMjYsIDB4Zjc4NGYzYzgsIDB4OGZlYmVlMDgsIDB4N2U4Zjk5YTksIDB4OTQ4OThiZDUsCi0JMHg0YzVmMjljZiwgMHgwYjdjYTE2ZCwgMHg4OWMzYWU3YSwgMHgzNmQ4ZmJmNiwgMHhjOTk3YzBjOSwgMHhjMTdiYmQ1MywKLQkweDkwNzcxY2NmLCAweDc3MWRiZWEwLCAweDllM2VkOGQwLCAweGE3MWM0NDA0LCAweGQyN2NmOGRkLCAweGM2YmQ2MzMxLAotCTB4MTIzM2Y3YzYsIDB4ZjdmMDNhNDksIDB4ODQ0NWFmZGEsIDB4Njg5YmFiYWIsIDB4YmI3ZWQxNzcsIDB4ZmRlMDA2MmEsCi0JMHhlMTY3NWQwMiwgMHhiZjJkMTQ5NCwgMHhhZGUzNGIxNiwgMHg4YzZkMmJmMywgMHgwODU1MWUyZiwgMHhjZThmMmZhZSwKLQkweGMxM2VlMjc3LCAweDk4NTVmOTllLCAweGNmYzVmZDI3LCAweDlkZTI0M2JkLCAweDRiZDI4YmJiLCAweGRkZmY2YzQ5LAotCTB4YTc4MTQ0OTMsIDB4NjA0YWJkN2MsIDB4OGNjYmFlZjgsIDB4NGJkMjk3ZGUsIDB4YmU3NThmOWQsIDB4NzMzOWY5ZDYsCi0JMHg1ZTM3ODI3ZSwgMHhjZWMzOGFkZSwgMHhmOWEyOWRlYywgMHhmYzA1MDQyMywgMHgwMTAyNWRiMiwgMHhlNWRlNzZiYywKLQkweDliNWZlNDM1LCAweDJiYjkzZjRiLCAweDZlYTllMDBiLCAweGI2NzY4MzNlLCAweDFlN2UyNWFkLCAweDIyNWIwNmQ0LAotCTB4ZjJlZWZiZjMsIDB4OGQ3Yzg0YWYsIDB4MDRhMTUyOWYsIDB4YmY3M2Q4ZmQsIDB4NWFhZmQxNmIsIDB4ODg1MzQxMDMsCi0JMHhlNmVhZDllYiwgMHg3OWE3YjllMCwgMHhlMjAxYjIzNiwgMHhlNjVkNTJiMCwgMHhmYmUwMmViNSwgMHg1MzU3MmJlMiwKLQkweGIzMmIxZjc4LCAweDk1MWY5ZDIwLCAweGJmZGY4NDM1LCAweDJmOGMxMDg0LCAweDA3N2U0YzQ4LCAweGEzZWIyMGNlLAotCTB4ZGEzNTdmY2YsIDB4YjQ2ZDliMGEsIDB4MWI5YjY2ZGYsIDB4NmFmNTRmZmIsIDB4ZmRhZmMwMDIsIDB4YzExMjdmZjMsCi0JMHg2NzNhZTk5ZSwgMHhlMDBlM2E0NSwgMHhkZGZlOGZmZSwgMHhhZjY2MzY5YiwgMHg2Y2Y3NjJkZCwgMHg5NTI3ZmUwNSwKLQkweDlhMWYyODY5LCAweDQ4YWQ1MTM3LCAweDE0YTA3Mzg1LCAweDRmZTI3MWVmLCAweGUyOWE1ZGJhLCAweGMyOGRiYWE1LAotCTB4ZTBiNGUyOTMsIDB4NzhmMTEwYmUsIDB4OTc5ZWI3NTQsIDB4NTE3YmY4NDAsIDB4MDI0MjQwZjIsIDB4NWQwNWJjODEsCi0JMHg0MjJkMGE5ZiwgMHg3ZmY5NDVjOCwgMHgwMjE5Y2Q4YywgMHg5MmE1MjMzZiwgMHg2MDgyOWJjZSwgMHg1ZmQ2MzYyNywKLQkweDNlMTFkNDliLCAweDkwNzk4NmM3LCAweDIwMGIyZjk0LCAweGRlNjA5ZGY5LCAweDQxNWEyNDAzLCAweGQ1OWViYWZmLAotCTB4NjRhYWYzZjUsIDB4ZDU2NmZhODIsIDB4OTZhMDUyODMsIDB4NmE0ZWIzZjYsIDB4MjRmYzQzYjcsIDB4YzExNmEzZGIsCi0JMHhhNDhhNzM1NiwgMHg0MWJhZjllMiwgMHgxZDFlNGM5NSwgMHg4NzI3OGYzOSwgMHhlYzJhMTVlZCwgMHhkZTI1ZmZhMywKLQkweGVmOGUyZjE2LCAweDhiNzU3Y2U2LCAweGUwM2VmYmRkLCAweGY3N2Y3NzNiLCAweDM0NmIzMDFlLCAweDdiNGYxYjNiLAotCTB4NzlmNjg2ZDksIDB4M2I3MDZmNTgsIDB4YmJhZjg0YWMsIDB4ZmI2NTNlMTMsIDB4Mzk3NDI0YzYsIDB4NzFlODYzZTYsCi0JMHhhMGRlYjM3YSwgMHgwOGE2ZjA3MiwgMHg0NGE5ZjU3MiwgMHg4Nzk0M2NmMCwgMHg0ZjQwYWZmZSwgMHgxZmQyODhjOSwKLQkweDY4MmM5ZDdjLCAweGI2OGJkOWFlLCAweDJmNmEzODliLCAweDU3YTRlM2YwLCAweDhjNzNlY2YwLCAweGMwNzcxOTFlLAotCTB4N2VmMDBiNWIsIDB4ZTY2MWZkNTcsIDB4MmEyMWQxODcsIDB4YTMzZTljOGYsIDB4ZWMxNzM4NTQsIDB4ZmRhMWQ3MGUsCi0JMHg5MzdkMjY1ZiwgMHgzZmE2M2U1NiwgMHhjZjljYjVkYSwgMHhlNWQ1ZjhjYywgMHg3OWVmMmNkYSwgMHg1NmJkYjQyYiwKLQkweDQ4ODAzNWVjLCAweDg0NDM4ZjMwLCAweDBlNmExYzA4LCAweDIyMDNhM2U4LCAweDg1NWRmN2Q4LCAweDVjMjg1Zjk0LAotCTB4MjhlZTQxMWIsIDB4MGQ5ZjI2YmYsIDB4YjM3YzA5NWMsIDB4M2IwYWU1YjYsIDB4NWU3N2M3YzgsIDB4ZWJmNDQyM2YsCi0JMHg3ZmUzYjhhOCwgMHg3NjgxZGU4OCwgMHgwODk4M2Y5NiwgMHhmYmJhNTg3OCwgMHg0MjNmNWYyYywgMHg1ZDMwZTc0OCwKLQkweGM3NDQ3Y2E5LCAweDM3YmU3NDQzLCAweDE3MmViOWYzLCAweDM5NDA3MGI1LCAweDAwOWI5ZDg3LCAweDEwNDI4OGZhLAotCTB4ZWIyNTZiMDksIDB4ZThhNzYwZGMsIDB4ZDg2ZDc1ZjYsIDB4N2NjNjRkOWUsIDB4MzY2ZWU1ZWYsIDB4ZGJhY2FkNWUsCi0JMHhlNjBkOWFlNSwgMHhkNDU1ZGNiYiwgMHgyZWZiN2NmZiwgMHhmZmE4ZTdkNSwgMHg1ZDJmOTUxMiwgMHg3ZmEzNzUyZCwKLQkweDIxNGU3ZDU2LCAweDgxZWZkNDgxLCAweDdhM2ExNmFmLCAweDQ1NWYwMWJhLCAweGY4YjE3ZWY2LCAweGQ0NzIwODFhLAotCTB4ZjljYmZmZWYsIDB4Y2Y5ZTZjZGMsIDB4M2U2NDZhM2QsIDB4YzVmNzg4OTMsIDB4MGExN2FhNzYsIDB4NjRjZmFjZWUsCi0JMHhjYWRlNDE3YywgMHg3ZTBiZTY4OCwgMHhmOTI3YjFkZSwgMHgxYmU1NGYxZSwgMHg3OTE4YzdkYywgMHg4NGYxYzkzNiwKLQkweDk2YzcyYTE2LCAweGU0ZDYzOTU4LCAweDQ4MjdiYzMyLCAweGJlYTA3NTZiLCAweDU5ZjVjYjMzLCAweDA3NmFhZjNlLAotCTB4YTI0ZGZiYzMsIDB4OWYzMDY3ZjcsIDB4NjBmNzRiNmEsIDB4OTU1Y2JiZTAsIDB4YzBhNzRlYTQsIDB4ZTg4YjM2ZTYsCi0JMHg1NGI2OTAwNywgMHhiYjEyM2FjMywgMHhkYzU5ZmJiZSwgMHg3YTA3YWY4YSwgMHhhNjY4NTI5YywgMHhiM2U3NGQ3YywKLQkweDBiYmRlZWM5LCAweGNkZDZhNWU0LCAweDU4Mzg0YWZjLCAweGEzNzA3NjA0LCAweDNjMzc3YmNkLCAweDEyZDg1MDc3LAotCTB4ODhjNzVjZTAsIDB4ODM4YjM2NTAsIDB4ZDQ3MjBjODQsIDB4NGMzOGRjOTMsIDB4NDkwYzExNzIsIDB4ZTlmOTNlYjgsCi0JMHhkMDgxNzRmYSwgMHhmNmM1M2MzMywgMHhkNTJmMDY2NCwgMHgwYzdmNjAxNiwgMHhiMDZjMjAyYywgMHhmOWYzMDRhNSwKLQkweGYzYjJlNjA2LCAweGQ4ZjMwM2Y4LCAweGQ4NGY1OWZkLCAweDkxYjliYWQ5LCAweGQ5N2EwN2FmLCAweDA3NWIyYjY4LAotCTB4ZTIyNTkzNzgsIDB4Nzc3ZGU2YjcsIDB4ODg1NDAxYjgsIDB4N2JiMjZlMGIsIDB4NmNmZTgzMWUsIDB4NDc5YzFlYTUsCi0JMHgwMjY4OWI5NiwgMHgyOTJjYTNlNSwgMHg1M2ZlYzAyOCwgMHg2MDU1NjJjYSwgMHhkNmMyNDBmMSwgMHg3ZjY5MjgxMywKLQkweDQyZDVkMzU5LCAweDIwYjI4ZjU4LCAweDA3ZGUwMDk3LCAweDljOGUyNjNiLCAweGVmZTVkYWI0LCAweDhlNmFjNzE3LAotCTB4Yjk1YmEzYjEsIDB4ZTg1M2VjMWMsIDB4YjNhNzUzN2MsIDB4M2M3MGU0M2MsIDB4ZjgwZjgyODYsIDB4ODBkZDc0ZWQsCi0JMHg5Y2ZjZWQ5MywgMHg5M2Y4MzVlNSwgMHg3ZWNkOWUxOSwgMHhlNjBjMTAxNSwgMHhkZGZhZjEyNSwgMHgyOWVjOTEwYSwKLQkweDJkZjhmN2U4LCAweDg2YzU5ZGYwLCAweDY4ODM4ZjdlLCAweDA3OGJkMDQxLCAweGNlNWNlY2VkLCAweDAzNWI0MTZhLAotCTB4ZGQ0OGRmZjUsIDB4NDBiN2I4MzYsIDB4MjYwN2ViZTcsIDB4ZjQ0OWFiNWYsIDB4YTcyOWM0OTUsIDB4YTUxN2MxNzMsCi0JMHhmMDI2ZmU3YywgMHhkM2U0ZTc1YiwgMHgwY2UxNTdjMywgMHg3ZTMzMDdiYSwgMHhiYzg2ODhmMywgMHhjZDZlOWQ0NywKLQkweDc2NmU4MWIyLCAweGViNDQ3Mzg4LCAweDdlODI5NzYxLCAweGEwOTBhNzdiLCAweGI5ZDM5ZjgxLCAweDBhNzA2MDUwLAotCTB4MmExNzllMzYsIDB4NWMyZmUzMTksIDB4ZmRmYWU5Y2YsIDB4ZTliY2Q4MmIsIDB4OGZmMWYzMDcsIDB4NmM1NjdiYzYsCi0JMHhkMWUwMGQ5YSwgMHgxYjlmMGZlMSwgMHgzMWViOWQzMiwgMHhjOGM5ZmI5ZiwgMHgzMjYzYzcwOSwgMHg0Y2FiNGYzMSwKLQkweGM4NTJiYjgxLCAweGRhMDcxNmU5LCAweDRjODlkNTU1LCAweGQwZmNjZGFlLCAweDc5YzI5NDFmLCAweDdjNTBjYmNlLAotCTB4ZWRmNDA5N2QsIDB4ODMyNGQ3MmYsIDB4Y2I3ZmVkMWUsIDB4YWZhMDQ0ZTEsIDB4ODI1ZDBmMTksIDB4ZDgzZWY0N2YsCi0JMHgxYzliZmFiNywgMHgyZjViN2Y3NywgMHg5NDA2MzIzMywgMHg5MTk5OWQ4MywgMHhmZWE1ODE5OSwgMHhjNTI5ZGViYywKLQkweDI2YTVlZjhkLCAweDZiYjhjZjdjLCAweDQ2ZGJlNTgwLCAweDAyNmE2YmYxLCAweGY3YTRlZmVkLCAweDI4M2M3NzhkLAotCTB4ZjcxOGRkZWUsIDB4Zjg2MDRmYWUsIDB4M2M3NDU3YWUsIDB4NjcyMDQ5YWEsIDB4YzQ5NmJhOTEsIDB4YjMyNzc5Y2UsCi0JMHg4Y2RjMWM3YiwgMHhiNjdkNmI5ZSwgMHg3ZThhNDk3MiwgMHg0Njc2ODNjZiwgMHhmMmI5ZTIzZiwgMHg2YjAyNTA0NiwKLQkweGY5MDliMjY1LCAweGY0NjVjNTlhLCAweGU4YWE1YzdjLCAweDE5OTJmZDE4LCAweDhkZjViZjVjLCAweGZmN2Q4NzJlLAotCTB4OWM2NDg0ZGMsIDB4ZDNiNWQ5ZWYsIDB4NzI3NGJjNzAsIDB4YzUzODdkOTcsIDB4OGIzMmZjZWIsIDB4OTM5YWYxMDYsCi0JMHgwODllZmY3MywgMHg2NmU2ZmY0NywgMHgzYzEwMTViNSwgMHgxYWIzNWE2MiwgMHgxNmZmYWVmYywgMHg5NDA5YjliZCwKLQkweDU0ZjU2OTRlLCAweDNlMzJhNTExLCAweDc0YTNiOTAwLCAweDEzZjcxMmI5LCAweGU2ZTI1OGU3LCAweDYwNGQ4ZGRmLAotCTB4NzZhN2Y1N2UsIDB4OTE5YjhlMzcsIDB4MjJiY2I4MzEsIDB4MTAzZWJhM2YsIDB4MjNmM2E0ZTksIDB4OGFjY2MzOTUsCi0JMHg2MTczOTEzMSwgMHgyNGE2M2Y5NCwgMHgyZWE3OTFjNCwgMHg3ZWMzMzQ5OSwgMHhkMzBmYWU4MCwgMHg3ZDc1ZmUzOCwKLQkweDFhNDNjYmFjLCAweGVmZWMxOWM4LCAweGE4ZmQ1MTk1LCAweDdmMjg3M2QzLCAweDkwZTMxZDM1LCAweGZjYjQyN2Y4LAotCTB4ZjNiMDRiZjksIDB4YTExNGE3MTMsIDB4YmZmMmEzYmUsIDB4MDQ2NWU1MDYsIDB4ZDA3NmRmZDMsIDB4YzdmMTUxYTcsCi0JMHgwNzc3ZDZhZSwgMHg4N2RlYmVjMSwgMHgwNWM2NzlmZiwgMHg5MGZmM2JmYiwgMHgzZmEwNWRiYSwgMHg0ZGYyZmQ4ZiwKLQkweDdjMTFlNDE3LCAweDg3MTY0YmY4LCAweDFmZTRkNWI4LCAweDllOTgxMzc5LCAweGNkOTQyNjBmLCAweGU2ZGQ3OTgyLAotCTB4Mzc4MTY3ZmIsIDB4MGFjOTJmOGEsIDB4OTBiMTVmYjYsIDB4ZjNjNmJiMmUsIDB4YmNmM2M2ODMsIDB4ZjNlNjgyNGIsCi0JMHg3N2VjN2ViYiwgMHg4ZTNmMTQ4OSwgMHhjM2E3MDhmZSwgMHg0YWY1YzZjMiwgMHg3YmUzMGE5NiwgMHg4ZjNkMDIxNywKLQkweDU4ZWZmZjcxLCAweDQzNjdiYjEzLCAweGUzNmU2Nzg3LCAweGEyN2MwNTY4LCAweGY5NThiNDdmLCAweGNjOWI3NmJlLAotCTB4NzRjZjA1ZDYsIDB4NzJmMmE3ZDgsIDB4ZGNlMTk5YmMsIDB4ZmQ4MWNiYjcsIDB4NDQ0NDdiY2QsIDB4MWQwZTY0YmYsCi0JMHhhZmQ1MDU2YiwgMHg2Nzk2MTZkZSwgMHhiY2M3OWU2YiwgMHgzODEyZDUwZiwgMHg1ZWVmM2YyZiwgMHg3ODVkZmQwMSwKLQkweDlkNzQ5N2ZmLCAweDA3YjhhZWYyLCAweGYzY2NiM2Y3LCAweDYwM2ZkZjM0LCAweGZiYTRiNzNlLCAweGZkMzgwYjQ5LAotCTB4ZTUxNzg4MmIsIDB4YTIwZjI2MmYsIDB4OWIzYmVkODUsIDB4ZjdhNzdhZTMsIDB4ZmU2MDM4ZTcsIDB4M2Y3MDI1ZjcsCi0JMHg4MzhjODBhMywgMHhmYmFkODc3YywgMHgyZjlkMjY4NywgMHg5ZjgzYWFjZiwgMHhmM2MxM2VkNywgMHgwOGY5OGYzMywKLQkweDU0MTJiMzk2LCAweGU1YmEyZTc2LCAweGFiZTAxMmY1LCAweGYwNWJjZGE1LCAweGFiNmY5NmJlLCAweDFjYjQ5NjZmLAotCTB4ODkzMWZjNGYsIDB4MWY2YTFkZTgsIDB4MjFmZTA3YWUsIDB4Mzc2MGMxNWUsIDB4NDY3ZjVkMmUsIDB4YzMyYzdlNjEsCi0JMHhmOWZjY2RjMywgMHhkYzVmMzBjZCwgMHg3MmY3NjUyNywgMHgzZTU4YmNkYywgMHhjYjlmN2QxYiwgMHg3Y2M2MDlkMywKLQkweGY5ZjA4ZWViLCAweDI1OGYzNjczLCAweDlmNDgxZjdjLCAweDY3OWY5OTlmLCAweDVlNzhiMDI1LCAweGQ1ZjJjNmM1LAotCTB4NmI5NGU4MDMsIDB4ZTYwZThmNWIsIDB4ZGYzMDBhZTcsIDB4MzMxN2U3NWEsIDB4NjUyMDJjM2YsIDB4MTQ0Mjk5MjUsCi0JMHg4ZDdlNWJkZCwgMHhhOWY0ZWE3MCwgMHhlN2MzOWJhOCwgMHhmYmUwY2ZlMywgMHhlNzEwMTk2ZiwgMHhjYzBmOGRlOSwKLQkweGRiOTRlZWY0LCAweDlhN2M4MzA3LCAweGMzZDlkZGU5LCAweDA5YWRmMGY5LCAweDUwYWZkZDZjLCAweGZmYTAyNTNkLAotCTB4ZDViMjkxZTYsIDB4ZTNiYjI4ZWUsIDB4ZWZiNzU0OTgsIDB4MWIzNzIwMTcsIDB4YWQ0NmRmMTksIDB4N2IzOGNjYTcsCi0JMHg3OWY1YzY0NSwgMHgwZmVkNGI5OSwgMHgxZDIxMGNmNywgMHhiZGZlYzAyNiwgMHhlOWVmMGZkNSwgMHg3OWYxMWNlMywKLQkweGUwMTI2MWI0LCAweDEzY2IxNGI5LCAweGQ4NmQzMmJlLCAweGZjZmI0OGIwLCAweDQyMjRjZjQ3LCAweDA0NmJiNTNjLAotCTB4YTc0Yjc4YzEsIDB4YzdlZjA4Y2IsIDB4ZjNjMjIyMDksIDB4NjJjM2E3MzEsIDB4ZWY1ZmVkYTksIDB4ZDhkOWNlODMsCi0JMHg0NzA5Nzk4NiwgMHg5YWYxZTZiZSwgMHhmMWE1YWRhZiwgMHhiZTRmZjllNiwgMHg5ZjdlMTFmZSwgMHg2ZTVjYWRjYSwKLQkweDM2ZTFmZjc0LCAweDViNWJiNzRlLCAweGRjZjNiZWQ4LCAweDBmNDhlNTc1LCAweDA3MjBmZGYzLCAweDE2NDk3NzA0LAotCTB4MWMxYmNhZWQsIDB4Y2RmZDAwYWQsIDB4NWRhNzk5ZjQsIDB4NmJmNDFjNzEsIDB4ZmRjODlkMGMsIDB4OThiZDJmOWMsCi0JMHgyZjUxNTM0ZiwgMHg0Y2MyN2M2MiwgMHg5Yjg3MGFiZiwgMHgzNWFiY2RlNSwgMHhlYTJkNmZlOCwgMHhlNTVkY2Y0MSwKLQkweGFmYWU3YTYwLCAweDYzY2YzMWYzLCAweDdhODA5MzRlLCAweDgyZmYwY2NmLCAweDBmNTcyYjhkLCAweDM2N2YzMDIwLAotCTB4ODQ3OWQ4YmYsIDB4ZTE5ZWEyMDYsIDB4NTVlN2Q0ZjMsIDB4NDczYzM0NDEsIDB4ZDM4ZmIzMWEsIDB4Y2U4OTM5N2UsCi0JMHg3MmQ4NWNhYiwgMHgyZWMxZTYzYiwgMHgyYzI3ZjNhNSwgMHgxYmYxODNkZSwgMHg1ZTFkN2UxZCwgMHhjNDRhM2NmMywKLQkweGYxMDZkOTBlLCAweDA2ODIxNWQ2LCAweGRlZjYzNmZhLCAweDVlZTE4ZjE2LCAweGJiMGQzOWE4LCAweDhlZmQwMjA3LAotCTB4MjFhYmVkNDgsIDB4MmZjNDdiZmUsIDB4ZjVkNmZmYTAsIDB4YjQ0NWMxMDEsIDB4ZmI4MDhkNmIsIDB4YWZkMjNkNWUsCi0JMHhmNGVkZTU4NSwgMHgwNTFhYzc0YywgMHg1OGFhMzllZSwgMHhlM2E1YzQyNywgMHg2ZDQyZmE4MiwgMHg1OWRlOTQ1OCwKLQkweDFiNTJiODE4LCAweDg4Mzc4MDY2LCAweDFhOGIxYzc5LCAweGE3Y2YwZGNhLCAweGI4ZmE4YzM4LCAweDM1MjM3OTM3LAotCTB4NzRkMmYzZjEsIDB4NGRlNWQyZjksIDB4ODcwYWJmOTcsIDB4NTJmZmUyY2EsIDB4MzY1NjVmNjAsIDB4ZDEwN2U5ZTgsCi0JMHhmNjdhYTBjZiwgMHhjMzhiMDc2YSwgMHg3ZDIzNzAzYywgMHg2N2EzZTk2NSwgMHg3OWZjNzEwYywgMHhlNjdkMTllMywKLQkweDc5ZjFkMzg5LCAweGM1MDNlYjRmLCAweGNlZGY0MTgzLCAweGVkZjUxODcyLCAweDNlOGY5ZGY3LCAweGY0MmU1ZDBmLAotCTB4YzJlNTk5ZjksIDB4ZmUzZDdmOGMsIDB4MTk4M2E2NjUsIDB4ZDgxNzAwZmYsIDB4MWQ1YTA3ZmIsIDB4OTAwNGJiODEsCi0JMHhiZmE3MDY3NywgMHg3NjcwOGVkNSwgMHg3MDY5MTQ2NiwgMHg3YzAwZTU5ZSwgMHhkMmRjZjU0MCwgMHhmZDYzMWZjYywKLQkweGI5NmNiMTI2LCAweGVlMzRmZDAzLCAweGYzZjE2OTA3LCAweDBmZjZjMjZkLCAweGZlYzQ2M2I3LCAweDFlMzAxMTk2LAotCTB4YzgzNDEzMTEsIDB4MmNiMzE3MGIsIDB4YmNlOTViMzUsIDB4MWNiNDIxYzQsIDB4OWFjMWU5MDUsIDB4ZWI5ZmU3MDgsCi0JMHhlMTEzMmY4YSwgMHg3ZTVhODZkZSwgMHhjMmQ2YmEzZSwgMHhmZGU5NmRjZSwgMHg3NWIwNzFhZCwgMHgzOTc3MmY0OSwKLQkweDY4M2I1NmNhLCAweDZiNWYyN2ZmLCAweDc4YjA3MDJiLCAweDM4MTlmYTJmLCAweDkzZWUxMTRmLCAweGQ4MzE3ZWE0LAotCTB4Y2MxMzJmYjMsIDB4MjM0YmNkNGYsIDB4MGViZTgxN2IsIDB4ZjIwZjE5ZTIsIDB4ODUyMzhjZmQsIDB4ZmI2NTVmOWYsCi0JMHgwYjJmZjQ2YywgMHg3OTZhY2Q0YSwgMHhmOTA4ZDU1ZSwgMHhhNjA3N2RmZCwgMHg1YTcwM2RjMSwgMHg2Y2NlZTU5MiwKLQkweGYxYzI3ZjVhLCAweDU5NjdhYjNhLCAweGE5YmI2NGNlLCAweDgzNzhlZGZmLCAweGNlNWE0N2Q1LCAweGE3ZjVhNTBjLAotCTB4M2FiMjZmMWMsIDB4MDU1MTA4NmMsIDB4YWRlM2I0ZjMsIDB4MzA1MWZlNjksIDB4M2ZkZjliOGUsIDB4ZjIwOTE5ZTAsCi0JMHg1Zjk4NTkyMCwgMHgzMDUxZWQyYiwgMHhhM2VmYWNmZSwgMHgyYzA2YTJhZiwgMHgwMGNmYWZmOCwgMHhiYTlmODJmZiwKLQkweDBlNGZlOGIyLCAweDc5MTVlZjg4LCAweGJmMWZkODU0LCAweGZkYjY4MjFmLCAweGUzYTk3YmJlLCAweGYwNTg3NDU1LAotCTB4MDEyODBhNWUsIDB4M2UzODViZmYsIDB4MjY5MGJhNzUsIDB4MjNjODQ4Y2YsIDB4NDhjZjQxMjQsIDB4ZTVkODc3ZDgsCi0JMHhkZDAxMzZmMCwgMHg1ZGI0MGZmMywgMHhmNGQ0NzIwNiwgMHhmMDBiZGZjNiwgMHhhYzIxY2NmZSwgMHgyOGNhN2M5ZiwKLQkweGM5ZTZkZjcwLCAweDhmYWQwNjE3LCAweGU1ZGJiZmRlLCAweGY0MDFkYzI4LCAweDNiNDA2NGExLCAweGU0ZGQ1MDQxLAotCTB4ZDQxNzZhNjYsIDB4Yzk1ZTNmNTIsIDB4NjhjNDdmMDEsIDB4N2U3MTM3ODcsIDB4NmNhMTJkN2IsIDB4YzBkOWYyMzcsCi0JMHg4ZTFmZDMxMCwgMHg4ZmQwYmRiMiwgMHgyZGE0NTcyZSwgMHhhNzdjNGZhNSwgMHg0MTEwYWVlNCwgMHgzNTY0YTYzZiwKLQkweDcyMGI5YzFmLCAweDljZWNkZmY4LCAweDYwZjFlMGFjLCAweGYwZTZkYmZlLCAweDNmNmMyMGZkLCAweGU5ZmIwMWRkLAotCTB4OTIzNWFmYTAsIDB4NzFlNzRmZTEsIDB4MjM4ZjE2MDUsIDB4ZmU1MTA1NjksIDB4ZmQwNzlmMDUsIDB4MzdkYzJhN2UsCi0JMHhmNmMxY2UzMiwgMHg0NGJjZTk1YiwgMHgxMzQ2MWY1OCwgMHg4ODdjY2IxNSwgMHg2YTAwZTQxMywgMHg0OWRmNThiZCwKLQkweDQxN2YwNzgyLCAweGNlYzg3ZmZiLCAweDAzNWI3NGZjLCAweDJjNWRjNDMxLCAweDVmN2ViNjRlLCAweDdkZDk5MmU4LAotCTB4NWFmMDcyMmQsIDB4YTcwOWUzZDAsIDB4NzhmNDFiODgsIDB4ODQ4YWUzZDcsIDB4ZmI5MjE4ZjksIDB4YjA5ZmI4NDcsCi0JMHhkZTAwNDJjZiwgMHgxYjgwZTRhNywgMHgxN2RkZDllMiwgMHgxMjA2ZWE0OSwgMHhkMzhiYWZlOSwgMHgyMWY3ZWY1YiwKLQkweGUyMDhiZDQ1LCAweGNjNWNhMzFkLCAweDkwYWE3OGJlLCAweGY3NjhmZTYwLCAweGZiMDAyNTcxLCAweGI2NTkyOTRjLAotCTB4ZmFiZjY4OWEsIDB4ZWY3YjA3MmIsIDB4Y2ZhMmE0ZDYsIDB4ZDZjMTFlODEsIDB4OGZlMzAyMDQsIDB4NDQwZDQ1ZGIsCi0JMHgzNTNmODc0YSwgMHgxZjgxZDllNiwgMHgyODhlMDMzNiwgMHhlZWFjNTIxZSwgMHg5NGJmYTAzYiwgMHg2Y2RlMTQzMywKLQkweGZjNDFlZTdjLCAweDI0ZThlYTRhLCAweDU3ODlkZjhhLCAweGJmYjg1NTM5LCAweGYwN2IyOWUxLCAweDdiOWZjYzJhLAotCTB4MjRmNzgyZDYsIDB4NzJiNDU2NmQsIDB4YWQzZTZmYTgsIDB4ZjM1ZTIxYmEsIDB4MDEzMDc2NTQsIDB4MDVhY2YzZTcsCi0JMHhhMTM5YjNlNywgMHgxNDY1ZTJmYiwgMHg2MDhkNWZlZSwgMHgyMGU0YmY3ZSwgMHhlNDA1MmQ5MiwgMHg4M2JkNDhhOCwKLQkweDMyNzA0ZjNlLCAweGMyY2FiODdkLCAweDkzOGE2OGU0LCAweDAyNDNjZmM5LCAweGRlMGYzZjFkLCAweGQxZjk0NDJiLAotCTB4YmFiYTFiZjMsIDB4N2U4ODc5ZDksIDB4YzA4OWI3ZDcsIDB4YmFlNTA5YzcsIDB4YzExMjFlM2YsIDB4NDY1YzllOGYsCi0JMHhlYzljZmQ3MCwgMHgzYTJhMDM5NCwgMHgxY2U3MWU5ZiwgMHgwOGNiZmY0YSwgMHhmYjJlMWY1YiwgMHg1ZmM2MzE2MCwKLQkweDgyZGUwNTI5LCAweGViZDgwYmRmLCAweGYwNTJmN2U0LCAweDM5Y2I5ODdkLCAweGVkMjE0YzlmLCAweDUzZTdhYzIyLAotCTB4NDQyZDExY2UsIDB4OWNmY2JiYzcsIDB4OWYzZDc3MTQsIDB4NTI3ZGZiYzYsIDB4N2QxMjUyMjAsIDB4MmFhY2YwYWYsCi0JMHgxMjE1ZGYwMSwgMHhhZDNiN2FlMywgMHhjNDM4ZTRiZSwgMHhhNjZkOGI3YiwgMHgyMzVlYjBlNywgMHhmNDA5MWUzYywKLQkweGIxYjczNGQ3LCAweGFmOTNhNDdkLCAweGUwYzk4MzRmLCAweDNkMWFiY2U4LCAweDFjNGQzZTZlLCAweDBiZGEyOGY1LAotCTB4NzgwNjhhYTUsIDB4YmNmNGUyZDksIDB4N2U0NGZiMGIsIDB4MmY5ZTI2ZWEsIDB4OGZhNGYzM2UsIDB4Mzg4ZDNmZTUsCi0JMHg3MmYxODA5NywgMHhlMDRlOWZjYSwgMHhlYmViOGI4YiwgMHhlZjNhNzZmYywgMHhmZWIxODc4YiwgMHhhZjQxMGY4MSwKLQkweDVhNzhmODVjLCAweGY3ZjllODJhLCAweDRiZDFiZWI5LCAweGJmODBlZjlkLCAweGJmOGM0OWRjLCAweGU0NDY5N2RjLAotCTB4YzQ5MjE0YjMsIDB4MGRlNDQ2YzYsIDB4ZDlmYTBlZjgsIDB4OGE2ZTA3MjksIDB4YTkyZjdlN2IsIDB4MGZkOWQ0YTgsCi0JMHg0ZWQwNDFlNiwgMHgzNmQzMmZiZSwgMHgxZjRjZTQxYiwgMHhlMzI3MDFlNywgMHg3YWI5NzM2YiwgMHgxMGRkYjJlNSwKLQkweGNlN2ZmNzA3LCAweDAzYTk4YmQ2LCAweDVhMWU2MWNlLCAweDYyNDg4ZmQ4LCAweGQ2YWQ1NjdjLCAweGYyMDMzNzVkLAotCTB4YzYzMjljNjIsIDB4ZjlmOWQzYmIsIDB4Yzk3ZTY4YWIsIDB4OWQxN2UyOGMsIDB4Y2M5ZDNhZWYsIDB4YTdmOWQ2OGYsCi0JMHg5ODliYzc3OCwgMHgzOWZjNWZkZiwgMHgxMjZjZWUyMSwgMHhmZTc1MDdiNiwgMHhmOGNmY2NiOSwgMHg2Y2ZkYjJmMCwKLQkweDdmOGRlODlkLCAweGE5ZWVkZDNjLCAweGY4NjMxZWEwLCAweDliZTMzZjY2LCAweGY4MWZjYTIyLCAweGYwM2QxMGZiLAotCTB4OTY2Zjk5OGYsIDB4NWYzN2NhZjUsIDB4OTY3ZTAyMjcsIDB4Nzc5ZjE2YjcsIDB4NjdkOWE1OWYsIDB4OTczMzkzY2MsCi0JMHhmM2YxMWMxMywgMHg2MjRkOWYyOCwgMHhhOTQzYjFmYywgMHhlODJlNTFmYiwgMHgxYTJkYWI4YiwgMHgxNWNhMDNlOCwKLQkweDNlNTJkNzU5LCAweGRmYTA5MWRmLCAweDAzOTM1YTdiLCAweGQzMTIyZGY1LCAweGFjNWE1YjNmLCAweDM4YjY3ZmE4LAotCTB4Njc4YzVlYmQsIDB4NjhmM2IwNjUsIDB4NDNiNmYyNDQsIDB4YzAzNmI0MWUsIDB4ZjNkZjQ2YTYsIDB4OGQ5M2E1N2MsCi0JMHgxMzQzOTQxMywgMHhmNDFkODI4ZSwgMHhmMWZmNDYxNywgMHg4ZGMxZTc1NywgMHg4MmIzMjQzMCwgMHgzMWNjNjFkMSwKLQkweDBkOThiZDY1LCAweDhmODUzYmU5LCAweDAwYmQ3ZjAwLCAweDU3N2U4MzNhLCAweDczYzE1ODdkLCAweDJiMGY0YmZlLAotCTB4ZDg1ZjE3YTgsIDB4YzQwOTdhZjUsIDB4Y2I3Y2Y0OGQsIDB4MmY1ZjNiNzEsIDB4ZWYwNTFhMjksIDB4OWM3YjNlMzMsCi0JMHg4ZWJkNjNlYiwgMHgyN2EwZTdhOSwgMHg0ZWE2Zjc0ZCwgMHg5OTdmNGMyMCwgMHgwMzJkM2RlZiwgMHhiNDhkYzlmZSwKLQkweDlkMDNlZjliLCAweGQ2MWU0NTQ1LCAweGI1ZGI2YjlkLCAweGNjMTZhMDY5LCAweDBhY2U4MWY3LCAweGZmZjY4NTVkLAotCTB4Njk5ZTgzY2MsIDB4N2RjZTM1MmUsIDB4NmUxZjljYTAsIDB4YzFkYjZkMjAsIDB4NGZkZjM1MjUsIDB4NmRlN2Q3NDksCi0JMHhhZjkzZmYzMCwgMHgyZjg4MTQ4NCwgMHg5MTlhOTUwNiwgMHg5YWVlYmVlYywgMHhiYTNmZDAxYywgMHhjNTFmZTFkYywKLQkweDExYzNmMDViLCAweGJmNjhmYjg2LCAweDVmYmVmM2U0LCAweDA4YmRkODkzLCAweGJmZWUwYWVkLCAweGVmYjA5YWZjLAotCTB4N2FkZDdjODIsIDB4ZGRlMmM5ZDMsIDB4YmI5ZmNiNzksIDB4N2U2MWY0MDksIDB4YjlmNzA3YTUsIDB4OWY5ODkzNGEsCi0JMHhiMjEyMWJmYywgMHgzNGJkMDBlNSwgMHg0MWM4ZTMwOSwgMHgyYTNlMmQ1OSwgMHg1MjIzZGU0NCwgMHgwZjM4MDhkOSwKLQkweDQyNWZiM2I1LCAweGI5YWY4YzNlLCAweGMxMzhlZmJjLCAweGY3YmE5MGFlLCAweDI2ZTM3N2MzLCAweGRlODNlNWU2LAotCTB4OTU1ZThlNzYsIDB4MGU5OGViMGEsIDB4NzRhYjg1MzcsIDB4ODcwMjMzOTMsIDB4YmU1ZWQ3MGUsIDB4MzlhZTY4Y2UsCi0JMHhlMWZjYzBlZiwgMHhjZDQzZDAzYiwgMHhlMGQ4OGU4NywgMHg4MjBmOWQ3YiwgMHhmZDE4YTdhZCwgMHhlODAxZjhhMywKLQkweGUxMDdlMTFmLCAweDc4ZWJhODM2LCAweDg3ZTcwN2Y4LCAweGZjNmRmZjJmLCAweGYxNTlmZDQwLCAweGZlMDBmYzNjLAotCTB4ZTJmN2UyNjAsIDB4ZTY4OWZmODcsIDB4ZmRhZjZhMDcsIDB4YWY2NTE5ZDMsIDB4YTc5NjE1MDUsIDB4M2U3NWQ3YTUsCi0JMHhjNDI4ZTQ1OCwgMHg2MDg1MzRmNywgMHg2NWQ5MDViZSwgMHhlMmRmYmY2NywgMHhmMDM4YzY0ZCwgMHg0NjM2NmVmMywKLQkweDA2NDc4N2Q3LCAweDc2ZTIyZjgzLCAweGUzNzkzMGE1LCAweDBlOGY1ZGY3LCAweDhlNTc2ODA5LCAweDY2ZTEwYWE2LAotCTB4YTIwNmUzYjQsIDB4YmUzOGQ0M2UsIDB4ODA0MTExYzgsIDB4MTczMGFjN2IsIDB4Y2JlYzBiMzcsIDB4YzVjODJhNTAsCi0JMHgxMGY0ZWI2OCwgMHhjNzU2ZmZmMCwgMHgxZjYwNTk2NSwgMHhlNzI2MzllNiwgMHgxZjZkN2YwMCwgMHg1ODE1ZmNiMSwKLQkweGE4MGZiNmIyLCAweDFhYTM3ZTdjLCAweGJkNzQ5ZmIxLCAweGFiNzc5N2I3LCAweGM1YzQzZjhmLCAweDBmNzJlMWY4LAotCTB4N2EwMTRmM2IsIDB4NWQwZTFhM2IsIDB4MDA1OTAzZmYsIDB4Y2IzNDIxMGUsIDB4ZjUwMzhkZjIsIDB4ZTgzYjRiNzUsCi0JMHhlMjgzODA3MywgMHg5YTQwYjc3NSwgMHhiNDI4M2VjMCwgMHhjMThhZDI3OCwgMHg5MjE3ZWJjZSwgMHhkNmFlY2UwMCwKLQkweGJjNDMwNzJmLCAweDlmY2I3YTY4LCAweGQzYmMwMjBmLCAweGNkMjY3ZGY1LCAweGI2NjRjZmI4LCAweDQ3N2I3NWEzLAotCTB4N2I3NDJiZjcsIDB4ZDA4OGEyNDgsIDB4Yjc2ODI2ZWQsIDB4Yjg2ZWU3ZjAsIDB4YWZkNjFiMWYsIDB4NzFjZjBkOTAsCi0JMHhiZDVhNzQzZSwgMHg1N2U1YzNjOCwgMHhjZTk4ZjNhMiwgMHg2OTBkNzFlNywgMHhkN2M4Yjg0MywgMHg5OTMzN2NkZiwKLQkweGM3MDY2N2QyLCAweDI0ZmRmNGM3LCAweGVkMGI5MDk0LCAweGYxNGQ1Yzg0LCAweGZjNDRiNTcwLCAweGFiOWM3NDQ5LAotCTB4MWM3YzgxMzUsIDB4OGNkNzI3YzUsIDB4ZWZlMWQ2MzcsIDB4M2Y0OGY0YjIsIDB4NWU2ZmJkYmQsIDB4ZTI5OTI2MWYsCi0JMHhkY2I3ZGZmMSwgMHhhYmU3NjNlZiwgMHhlNzYzZWFmZiwgMHgxNTBlMjc2NywgMHhhODJjMTJmZCwgMHhiOWQ5MzNlMywKLQkweGMzYzMzNzU5LCAweDdhZmUyNTdlLCAweGM5OGI4OGY1LCAweDdiNGI0NGYxLCAweGRjMWI5YzJlLCAweDVjMmJmM2JkLAotCTB4ZmNlY2Y3MWYsIDB4MTNiMDFkZWEsIDB4MDg5NzFjMjcsIDB4M2M0ZTAxZTQsIDB4ZjcwOTI2M2UsIDB4ZTA2N2M3M2QsCi0JMHg2ZmRlOWQzZSwgMHgwZTRkYTdmNSwgMHhmZjIzOWVjMiwgMHhlZjgyZjdlOCwgMHgxNDc4ZjBhMywgMHhlNTg2Y2Y4MCwKLQkweDNkMGYxZDhiLCAweDNkOWRmZDBjLCAweDNjZTg5MTJjLCAweDNiYzUxMmYzLCAweDI1NjllMjBjLCAweDdkZjg3ZWZjLAotCTB4ZjQ5N2IzMDIsIDB4NWVmYzdkZjYsIDB4NTk3MmZmZTYsIDB4OWI2YjdlZjgsIDB4NjI1ZWZkYzQsIDB4ZDVmM2EyOGQsCi0JMHhlNTI0ZjM1NCwgMHhmNTdhZTg0NSwgMHg1MmUzZDJiMSwgMHhlMDdkMmM2ZSwgMHgwZjlkNjNlZiwgMHhkYzY3OTNjZiwKLQkweDU3OWZhOTViLCAweDIzZjhlM2FlLCAweGYzYzNkZjdiLCAweGRkMzQ1NzAwLCAweDdlN2Q4MTIxLCAweDNjNDg4NjQ1LAotCTB4YTk1ZWUzNTEsIDB4MmEzZTBmNTIsIDB4OGI4ZjcxZWUsIDB4NzZlYWU1ZTcsIDB4MWZhN2RlY2EsIDB4ZjcwNjkxOWUsCi0JMHg3YTk4ODg1OSwgMHhlNWIyZGQ1NSwgMHhiN2E4NWM5NSwgMHg3MWNmNzE4OSwgMHg0NTdiZjE5YiwgMHhmMDEyMWRjYiwKLQkweDI2MmUxN2ZmLCAweDNmOGRiZDFmLCAweDI3Y2E2MmYxLCAweDA5ZGQwMjk3LCAweDA0MGFmM2IzLCAweDdkMzMyMzk0LAotCTB4N2RmY2VjZjcsIDB4OWVhOGZiNmEsIDB4ZmQxM2RkZjEsIDB4YjE3ODc0Y2QsIDB4MmZmNzA4YTMsIDB4OTk4N2EzN2EsCi0JMHg3OWQxNzc2ZiwgMHg0MmZjZTlmYSwgMHg2YTdlOWU3NCwgMHhiOWYxZWQ4ZiwgMHgyZjkyZmViMSwgMHhiZjNhZWIwMywKLQkweDkxM2ViNzU2LCAweGNlOWNmNjBhLCAweDE5NTJkM2E3LCAweGYxZDg0Y2RmLCAweDQ2NzEyYTcwLCAweGRiYzY2NWU4LAotCTB4NjZmZDM5NWYsIDB4MGNlNjZkMTEsIDB4ODI2ZGNmZmEsIDB4ZTE3ZDQyZTYsIDB4Y2Y5MDZkMjcsIDB4OWM2MWM2NTIsCi0JMHhkYTA5NTZmNSwgMHhjZmU3ODQxZiwgMHg1OWIxZDc5YiwgMHhkN2JjMjhlMiwgMHhkOTdiZDdiYSwgMHhhMGNhMTU4NywKLQkweDE1ZWJjZDZlLCAweDdjMGUxN2RjLCAweDRhYTc1ZTZkLCAweDcwNDlkNDBmLCAweGI0ODk1OGFkLCAweDZlMzFlOTljLAotCTB4OTk3MGViYTcsIDB4MjkzNmZjZTksIDB4MDRmNDc5YzMsIDB4Y2MwZjk5YTcsIDB4YjlmNmVhZjAsIDB4YzUzOTRmN2UsCi0JMHhkYTE0YjRjNywgMHgyMTZhYjVkZiwgMHgxZDY2MmZjZSwgMHg2OWU5NzhlNiwgMHg1ZTY5ZWRmZCwgMHg3ZmZjNGQ0NywKLQkweGQ3ZDRkOGU2LCAweGM5M2RiZDAwLCAweGU2NmU5OTliLCAweDk0N2Y1ZDc2LCAweDU4NzkwMGMwLCAweGY5MWVjMWZhLAotCTB4ZjQ4ZTk1YzIsIDB4MTBhNzM5MmQsIDB4MGYxYmVjMGYsIDB4YTI0ZjkzYjQsIDB4N2QzMjIxZDYsIDB4OWRkYmYyMDgsCi0JMHgyN2FjZjY2ZSwgMHhjZTdhNWI3ZSwgMHgxMWE5YmM0MiwgMHgxZjliOTNiZSwgMHhlZGRmMDA3NCwgMHhiMDFjZWE5MCwKLQkweDU5YzUzM2FmLCAweGYxNDQ5YjVlLCAweGEyZDNmNTM1LCAweDc0YmNmMWViLCAweGM4NDA4NWJiLCAweGE5Y2I1YTZjLAotCTB4YTg0NzEwYmQsIDB4OWYzMDQ4M2UsIDB4Nzc2NWE4YmEsIDB4NGJlOWYwMzEsIDB4NTFmYTFiNTIsIDB4NzkwOTY3NWQsCi0JMHg2Y2NlY2EzMCwgMHg4MDc1YTk2ZSwgMHhjNjljZDYxZCwgMHg0YmVkMDNjZSwgMHhjZGJjODYyNiwgMHhiZjE5MTI0NywKLQkweDNkM2UxZjM2LCAweGZkYTcxM2MzLCAweDhlYmY2ZjAwLCAweDcxNzJkMjc4LCAweGZjNjE3NjVkLCAweDA1OGQ2NGEzLAotCTB4ZDA1NTNmZTcsIDB4YmIwMzRlNWUsIDB4MGY3NjQ2ZTUsIDB4YjhlYjU3NjMsIDB4YmMyOGQzOTcsIDB4YTMyNGI3OWQsCi0JMHg3Y2Q2OTk5ZSwgMHg0YTZlMWRjZiwgMHhmMzNmZTA4OCwgMHgxY2Y3NzlmMSwgMHhkZjQwZGI0MSwgMHhhYzM1NTEyYiwKLQkweGUzNjQ1NDk3LCAweDdmYjhmOGJlLCAweDFkMzc1ZWE1LCAweGQxOTRhZmRhLCAweDJlMjY5OWJmLCAweDc1MWUyMDk2LAotCTB4MDNjODQzMzIsIDB4ZDBhNzcxN2YsIDB4YTc3ZTEyYmUsIDB4YzZjZTVmY2QsIDB4MmE3ZjZlMjEsIDB4NGM2ZjlmZjgsCi0JMHhiZjhkMWQ0ZiwgMHhmNWVhYTI2ZCwgMHg2YmY3ZjAwYiwgMHg1YjRmYzk4OCwgMHg2ZWNjZWRiZSwgMHgzZTVmNmQyYiwKLQkweGM3N2NjMDUzLCAweGUyMmNlZTY5LCAweDkyOWZlMjhmLCAweGY5OWU5NDM1LCAweGZhNWIyZjk0LCAweDVmNWYwMTE3LAotCTB4NjczYzZhNTcsIDB4NDFjY2IzMzUsIDB4NjNmMWQxMDIsIDB4YzJjMzJkYzEsIDB4YjVlNzhmYjMsIDB4N2VmYzBiNzYsCi0JMHg1N2U3MmU1OSwgMHgzNTlmN2U3MSwgMHg1ZGYwZDUzYiwgMHg2Njc2NjEzOSwgMHhkZDkxMzZmNSwgMHg3ZWM4NTI1NywKLQkweGFmOTc1MTI3LCAweGJjMzk3MTFmLCAweDM3YzdmYjhhLCAweDcwMGNiMzdhLCAweDBkMjg4NzRjLCAweDY5MzMzNGZkLAotCTB4ZDc1ZGRhMjgsIDB4ZTVjNzZkOWMsIDB4ZTBmYzVjYjksIDB4NzhlODliYWQsIDB4ZjI2MTFhM2YsIDB4YWJjNWM1NmIsCi0JMHhkODMyMmY5MCwgMHhjODRjY2E3ZSwgMHg2ZjQxMTIyZSwgMHg2NmJiZGYxYSwgMHg0NzFlYjFiYywgMHgyN2FiY2Y4ZSwKLQkweGIzMzA3ZDc0LCAweDliZmRjNDU1LCAweGNmMTQ4NTk5LCAweGQzYjE4OTAyLCAweDE4YmVhZGJmLCAweDg2NWVkMTY3LAotCTB4ZTdiNWQwNzgsIDB4MDRiYmY4M2MsIDB4ODNlMmZhMzEsIDB4MmZhNGVmZDIsIDB4MzgzMmEwNWUsIDB4ZDJmNWNhOWUsCi0JMHgwZmRmZWU0NCwgMHg2ZjQwODMyMiwgMHgxZjFiMTM0YywgMHhhMmVhM2UwNiwgMHgwZTM1YTZlYiwgMHg4ZWViZTkxZiwKLQkweDUwOTdlZmVlLCAweDIxYmUwNjM5LCAweDhmMTg2OTFkLCAweDAzMmU3NjlkLCAweDdmNzQ0OWYzLCAweGE4NDdhYzNmLAotCTB4YjFjNWEyNWQsIDB4Y2M0YmVlOTcsIDB4MTMwN2RjMzEsIDB4NzY1MTJiZDYsIDB4ZmRmMDVjODksIDB4ZDQ2OTkyZWQsCi0JMHgwMGYyNTUxZSwgMHg5ZmM0ODFiZSwgMHhlMzBjZmE4ZiwgMHg3MDkwMjU5MiwgMHg4Y2MxZjEwMiwgMHhhOWU3MTg1MywKLQkweDhhZmZhODk2LCAweDRjMTNmM2ViLCAweDA5N2ZkMWNmLCAweDMwZjkxMTI5LCAweDljN2EyYmRiLCAweGRiYTQ5YWQ5LAotCTB4MDkzZTQ2NTMsIDB4OTdhZjFiYzcsIDB4ZjNhM2VlMzEsIDB4MTNlMDA5NDksIDB4MTE3YWZmZTQsIDB4ZjFiZDNhZTMsCi0JMHg2ZjdlM2U4ZCwgMHhmYWEyMTJmYywgMHgwZjM4NDkyOCwgMHhmYmY5NzBiZiwgMHhiY2YyZmNiNiwgMHhjOGMzMjdjZSwKLQkweDg5ZjBiZWIwLCAweGJmM2ExZmNlLCAweGE2MDlkOGM0LCAweGViNGY1MDc4LCAweGU5ODk0YmNkLCAweGQ2OWVkZjg4LAotCTB4Yzg0Nzk3OWIsIDB4YjM3YmQ3YTgsIDB4MzEyNjc2NmIsIDB4NzQ0YWVlM2QsIDB4NWQ1NzdmNjMsIDB4NzYwOWQzMzQsCi0JMHgxMWViOTU4ZCwgMHhjNzBhZGQ3ZCwgMHg5ZjE5ZWFiNSwgMHg1NzNlZGNiYywgMHg2YWEzZmQ4MiwgMHgxMWQ5MWZkMCwKLQkweDYwZjFlODNhLCAweGFlOTcyZjlkLCAweDljZmYxODIxLCAweDY3NTZmNWNlLCAweDU2MDc4YjJiLCAweDcwMDMxNTRmLAotCTB4ZTViOGEyODQsIDB4OWQ1OTg3YzEsIDB4ZDNhMmNiZGQsIDB4MjdjZTZhZjcsIDB4MDk2ZWQyODUsIDB4MWFmMzc3N2UsCi0JMHhiZTIwZDA0ZCwgMHhjNGYxZTFlNCwgMHg4MDk0ZTcxOSwgMHhhZmFiMWQ5YSwgMHhjNzVmYmE3NCwgMHgwYmJmMDdiZiwKLQkweDIzYzZiZmRlLCAweDFjNGJhODA0LCAweDNiYWVjZmEzLCAweDE4OGFlY2M3LCAweGNmYmMyYTdiLCAweDg5MWU2MmFiLAotCTB4ZWI0ZTVmOTksIDB4ODY0MjFmNzQsIDB4MGFlZDNiZmMsIDB4NzZmY2U5MjEsIDB4NmY3ZGZlODUsIDB4MWUwNjRlNzQsCi0JMHg2NWVlN2EwNiwgMHgxZDgwYWVmNywgMHhlMmJlNzQwZiwgMHgzYWZkODQ5YywgMHhjY2YxOGM5MywgMHhiZjc5MWRiMywKLQkweGJmOTNkZjQxLCAweGNkYWZiZTZmLCAweGM2ZGU5ZjNjLCAweDE3Zjc0NmZmLCAweDhmYTBmZmI4LCAweGNlYzQ5NTdiLAotCTB4MjdkNzliYzcsIDB4ZDc1ZTljN2QsIDB4OTliZGZlMjMsIDB4ZTI5M2MzN2UsIDB4M2ViYTdkZGIsIDB4ZDczZmMxOGUsCi0JMHhhZmQxM2RkNywgMHhlYmFkN2QzNywgMHhiZWI3N2ZjNSwgMHhkN2Q3ZmJkNiwgMHhiMzVjN2QxMywgMHg4ZmM5ZWYxZSwKLQkweGVhZjJmNWQ0LCAweGRmOGMxNmY1LCAweGZhZmVlMTRjLCAweDllMmYxZTE0LCAweDZjZTJjNDk5LCAweGVlZGViOGIzLAotCTB4MDE2NmRjZmEsIDB4YjMyODJlYmIsIDB4NmVmZjMwZmQsIDB4MzZhMWM2MjcsIDB4ZDBmNjYyZWYsIDB4NzI0ZTNjOWIsCi0JMHg5YzYyMjBiNywgMHgxNmIxZWVlNCwgMHgxN2Q0ZGJkNCwgMHg0Yjc5ODdjYSwgMHg4MDhjODQ0NSwgMHgyYzAxZGNmZCwKLQkweDg1MjhkZjRlLCAweDZiZWY1MGNhLCAweDZmNzM4MTEyLCAweGVmZGZlYWFmLCAweGZkMDRkZmYxLCAweDcwZjFmZGRmLAotCTB4YTNjNjJkNGIsIDB4YzdlMDZkNDMsIDB4NzA5M2NiOGYsIDB4YWFkOTJjNWYsIDB4YjNiYWZjNjIsIDB4MDNmNzhhZDUsCi0JMHhkOWY4ZWQ3NSwgMHhmOWZhMTk2ZSwgMHg1YWUwNjg5YywgMHgwZDZhZDRiZSwgMHgxZTgxNGJlZiwgMHgxMDFlMjY5OSwKLQkweGFiYTMzZjIxLCAweDU5ZmRlMDliLCAweDhhODc2NzkzLCAweDQyOWIzZmMxLCAweDBlMjE2YWRhLCAweGY5NjE1MTMwLAotCTB4M2QzYzY2ZTgsIDB4Y2MzMWY3Y2EsIDB4N2RlMTE0ZmIsIDB4OWY2NjU2ODksIDB4NzY0NGJiMTUsIDB4ZmI0ZjU4MGYsCi0JMHhlNjBhY2QxMiwgMHgyZmI2Zjc1NywgMHhhMDk2Nzg1MSwgMHgyZmIzMTY5ZCwgMHhkMmY0Y2NkMSwgMHg5ODk3ZGRiNywKLQkweGRmODdiODA4LCAweDlmZjlkMzY3LCAweGMzZDIyN2ViLCAweDg1NjZjNGZlLCAweGJmNzU2N2VkLCAweGJmYjAxMzJlLAotCTB4YjhiNGIxYzksIDB4ZjZkZWEzNzEsIDB4NGFlYzc2MjksIDB4MWQzZGMwZjAsIDB4NGRlZmY5OWIsIDB4YzAzNWQ4ZWMsCi0JMHhmY2Y2ZTZhMywgMHg3NzdiNmU3ZSwgMHhjZGE0YTgxMSwgMHg5ODRhZDc4ZCwgMHhiOWUzYzZmNywgMHgxOWEwYjhlMSwKLQkweDY2ZmYxY2FmLCAweGM4MTU2ZTdjLCAweDA3YzQwNzJhLCAweGUwYTliNDViLCAweGJmYjhmNTE3LCAweDcxYzFlZGQzLAotCTB4NWQ0NzhhZmEsIDB4NDkxZjM2NGUsIDB4NmY5ZjAwZjAsIDB4MDNjMDMyM2UsIDB4ZmMwMDNmZTMsIDB4YWI1OTcxMGEsCi0JMHg5M2YwMTVmYiwgMHg5ZDNlMWM3NywgMHg4YWJjZmI4MCwgMHhhNGJmMDU0NywgMHhiMWE2ZDkzYiwgMHhlZjhjODk3MywKLQkweDAzYzM5OTgzLCAweDlhYmQwZmIwLCAweDg0ZTZmOWYzLCAweDRjOGViZmVlLCAweDYxYWZkZThiLCAweDM5ZmEzM2ZiLAotCTB4NjA4NTVhZmYsIDB4YzJkZjg4M2UsIDB4NzhjYzQxZjIsIDB4ZWI2NmU0MWIsIDB4ZWJjNGU2YjUsIDB4YTY5Yzg5YzMsCi0JMHgzNWYyZjE4YSwgMHg3Zjk2NjJiNSwgMHg4MDdlN2U2MCwgMHhmMDM5NzdmMywgMHg3MTQ3ZWQwMSwgMHg4OTU2YjgzMywKLQkweGFlZmY4NDY1LCAweGNlZjU4MTI4LCAweGJmZTVhZjVjLCAweGM2N2I0Mzg3LCAweDFjZDU2NWRmLCAweGVkMmEzMzk2LAotCTB4NjdkMjc4ZTMsIDB4NDBlZmMwNTcsIDB4M2I5NmY5NmIsIDB4MmY3MGRjNzMsIDB4ZjJjYTUwODMsIDB4YjJmOTJjM2MsCi0JMHhjNDkzYzg0NiwgMHhkNjk1M2E1MiwgMHgwZWNiOTIyYiwgMHhiODgzZjUyNiwgMHhlNDBkNzNiMSwgMHg0NzllNDMzMywKLQkweDJmNDQ1YTVlLCAweDBhZDc0N2RjLCAweDJlMjQ1ZTViLCAweGJmMTJiMGViLCAweDNkNzBlYzFkLCAweDc5ZTc5ZmNmLAotCTB4ZmJlYmI1MmMsIDB4M2VlY2VkZDEsIDB4ODZmZThhZWEsIDB4ODUwZTRlNzMsIDB4YmZiZjQ3N2UsIDB4OWEzZGVhZGUsCi0JMHhhMTRjZjk4NCwgMHg3ZGQyOTU0NCwgMHg3ODY5OGVmOSwgMHg3NmUyOTA3ZiwgMHgzZTQ3N2NlMywgMHhmODAzMjkzZiwKLQkweGQ5ZjVjMjgxLCAweGZmNWMzMWZmLCAweGM4MmUwZjFiLCAweDNhNzE4MTZmLCAweDA2MmM4ZWI2LCAweDA4NzIzMWZkLAotCTB4ZDA4YjU5OWMsIDB4N2M0MWFhODcsIDB4YmMxMjBmNmUsIDB4MDFmZmYxMmYsIDB4NTEyODA5YzIsIDB4MDAwMDgwMDAsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YmI1ZmYwMCwgMHhkNTU0NzQwZCwgMHg3OWJmZmY5ZCwgMHhiZTRjZGVmMywKLQkweDIxMjY0Y2RmLCAweDAxMmYwODQyLCAweDFjNDI0MjQyLCAweDYxZjA4MDYyLCAweGM0NDQzZTFkLCAweDYwMmEwMzIwLAotCTB4NDNlMTk2ZWIsIDB4OWExYWY5MDksIDB4N2FiNzZlYmEsIDB4MjkwNDkzMGUsIDB4YjY5M2RiMDIsIDB4YjY1NGU1NmUsCi0JMHgyOGJiNTYwZSwgMHg4MjYwOWQ4OSwgMHgwNGVjMjY4MSwgMHg2ZWI1MDMxNCwgMHg1YjYwNDA0MCwgMHg2YTQ0NTQ3NywKLQkweGJiOGQzMjQzLCAweGIyOWVlYzU0LCAweGY3YmRmZmZmLCAweDYwYzMzMzI1LCAweDM5MmRkOWU5LCAweGRkZjczNzM5LAotCTB4N2ZmZGVlZmIsIDB4Zjc1ZmZlZmMsIDB4NTk1YzAwM2UsIDB4YzlhMDAzOTIsIDB4ZTdiNzNhYTYsIDB4MDAxYWE4MDIsCi0JMHg2ZGJjZGM2NCwgMHhhMDU1NjA1MiwgMHgzMjRlNDAxOCwgMHg2MzI0MGE2ZCwgMHhkNGRhNjY5YiwgMHg2NjhhNmQ4NiwKLQkweDlhYTllMzYyLCAweDcwODA1YWNlLCAweDZjMTRiMmNlLCAweGYyY2U3MGI0LCAweGM2ZWZiYzI5LCAweGMzNGI5NjU2LAotCTB4ZmRlYzMyYzEsIDB4NDVmMzhhNWQsIDB4ZTFkOTBhOWMsIDB4ZmVjNDllMGYsIDB4MzkxNDhmZmIsIDB4NDJmZjYzYjcsCi0JMHhhNDA5NmE2MiwgMHhlN2YyYWMwMSwgMHgzZmIwODUzNSwgMHgxYjFmZTJkNSwgMHg2OWNlYmE0NCwgMHgxYTZkMmM5ZSwKLQkweGZlMmRkN2MwLCAweDdiZTMyMDg5LCAweDY4NTI5YmM5LCAweGYwMDVjOTdkLCAweGJhYjYzYjFkLCAweDIyOTQ4ZjA2LAotCTB4ZDVkMDJlN2QsIDB4NjBhMzAwZjEsIDB4MDhhOTc2YjcsIDB4ZWI4MmE5MDAsIDB4MDVmNmYxZTksIDB4NTgwNzRjMmIsCi0JMHg4ZWZmMTMzOSwgMHhmMTkyMTdkOCwgMHg1M2QyMjY3OSwgMHg3NDFiOWZjZSwgMHhiNDA1ZmVlMCwgMHgzMGNmNDFiZiwKLQkweDVkYWQ5MDFkLCAweGVmZjYwMjRhLCAweDk2ZWZmNjNhLCAweDhmYjgxODUxLCAweGRmOTMxM2Y3LCAweGJmOGI2MTIyLAotCTB4YTJmZDdmZDQsIDB4YmZjM2VmYzksIDB4ZGI5ZjY4MDcsIDB4NzkyYmI2NjksIDB4YzQzNjc0Y2QsIDB4ZWJmOTk5ZjYsCi0JMHhlYjExOTk0NiwgMHgzZTdjMWZjMywgMHg2NTA5MmY4ZCwgMHg5MDE1ZDU5ZCwgMHhmMzNlZmQ4YSwgMHhkOGFiMjE0NywKLQkweGY0Njc3ZjA3LCAweGUzMjdlNjdhLCAweDQ1Y2UzMzdiLCAweDgxNzVjNzNmLCAweGQ2MmQ5ZmU4LCAweDBjYmYwNzJkLAotCTB4YTE5OThmMjgsIDB4NjFiMzc5ZTgsIDB4NWM2NDFmZTcsIDB4ZThlNWY2NzcsIDB4MTRiNDBiZTcsIDB4MzQ2N2UzMDcsCi0JMHhmOGNlYmU4YywgMHhiZDcwYWE0MywgMHg2ZjVmMmI3YSwgMHgzNGJjOWRlOCwgMHhjZDliZmQ0MCwgMHhiYjk0NTMyOCwKLQkweDhlNTBjYmFhLCAweDc3ZmE3NWVkLCAweDY2ZmI0MDE3LCAweDcwMGY5NzljLCAweGI1OTViMzYwLCAweGViNmI0ZTUzLAotCTB4Y2RjZWZlODgsIDB4ZTAxNTIwMDgsIDB4ZDYyY2U2ZDAsIDB4OThjNjlhYWEsIDB4NTYxYTcyOWMsIDB4M2VjNDQ5NDMsCi0JMHg5MGM3ZGYxYSwgMHgyZTM5ZDBlMywgMHg4MmExYTljNywgMHg1ZjYwZTZlNywgMHhhZmMwNTVlOSwgMHg0YjM5ZjA4ZiwKLQkweGI4MDg2OWM4LCAweDk1MzQ4NzljLCAweGYxZmE3OWM5LCAweGM0MTFkZDlmLCAweDEzMmM5NjQ3LCAweDI1ZmMxMWU4LAotCTB4MTdhMDg5ZTgsIDB4MGE5M2Y0OGMsIDB4ZDk3ZDUxZWMsIDB4ZDVjZjhmZDAsIDB4ZGZlYjg1OTcsIDB4NzE0ZmQ2MjEsCi0JMHgwNzVhOGU4ZSwgMHhhMTEzZjhmYywgMHg4NWY2NDNiZiwgMHg3MWYyMTJiZCwgMHgwNTY1NzI0NywgMHg5ZTU2OTNmMSwKLQkweGQ5NmViNTE3LCAweDQyN2FiMTNiLCAweGQzY2JlMWMxLCAweDIwOWZjODkwLCAweGM2OWZhNjllLCAweDMzZjk4OGYxLAotCTB4MDA5MjNlMWMsIDB4ZmEyNmZmOTQsIDB4NGNiMzQwMzksIDB4NjJlYjM0NzYsIDB4NmYyN2YzZjQsIDB4Yzk5YmI3YTYsCi0JMHg5YjllNGExMywgMHhlNWViZjhlMywgMHhjYjQ1NzM2OSwgMHhiNDUxN2QzMywgMHhkMWRjMzMzYywgMHgyYWI1MWNmMiwKLQkweDc5Yjc2ZTVhLCAweGE2MzJlNWEyLCAweGY4ZDQ3MjcyLCAweDUxYTU0ZGQ4LCAweDk5ZGY3MWZkLCAweGQ3M2YzNTE1LAotCTB4M2ZhYTJmMzcsIDB4YThlMmRiN2UsIDB4OTc5YjEzZjksIDB4ZWQyN2Y1NDcsIDB4ZmNkNDdhZmEsIDB4YThkYWZmNDIsCi0JMHg1NWJkYTJmMSwgMHgyOWZmYTRiNywgMHg3OWE4ZmE4MSwgMHg1N2QzNWUyNCwgMHhjZWY2ZmZlOCwgMHhmM2VkNDZlZiwKLQkweDJmZmZkNmI3LCAweDljN2ZmNDYzLCAweGQyMzRkOTdjLCAweGY0NDdmYTE3LCAweGYyNGE4MzhiLCAweGQ5OWYwOTM2LAotCTB4OTNmMjU2OTAsIDB4YWZiN2FlYjYsIDB4YmU5NzY4NDksIDB4ZTg4ZmJhNzksIDB4NjcwNjJkZjAsIDB4MmIzZDhlMTMsCi0JMHg2YmYyMjViYiwgMHgyNmQ0NTA2MywgMHg0YzViMWJmNCwgMHhmZWZlNDk1MCwgMHg2YWQzMjZmYiwgMHg5ZDg4ZjI3NywKLQkweGI2MjRkNzFmLCAweDk4MmFmM2ZlLCAweGYzZDFlYzEzLCAweGNjOGYxNzk2LCAweDE0ZDNkYTMzLCAweGY4OGRhNjFmLAotCTB4ZjQ1YmFmZDksIDB4M2RmMjEwYTYsIDB4MTQ3ZWU2NTUsIDB4ZjI2OWViZmQsIDB4YTdhNDE3YWYsIDB4OGE5OTcyMTQsCi0JMHg4YTc4YTdjMywgMHhlZDU5YmM1OSwgMHgwZTA2ZDZjNiwgMHhiNGRiMWVhOSwgMHg1ZmFlYmYxMSwgMHg1MDVjZTU0NywKLQkweDk4ZmYyZmZkLCAweDNiMjEzZmU4LCAweGRmZmE0NjVmLCAweDg2ZGM4MTI1LCAweDg5YmI1NmJmLCAweGMzNjFmM2VjLAotCTB4OWE3YWU5NmYsIDB4MjFhZTgyMmQsIDB4MDQ4ZmE1ZTQsIDB4ZDBkM2Q2NmMsIDB4ZmFkMGMzZTcsIDB4OWRhZmNjZjEsCi0JMHg0ODA1YTZmZiwgMHhjZTU1ZTdmZiwgMHhiMmZmMzE4ZiwgMHgwOTlmNmJmMCwgMHhmZTRmZDZiZiwgMHhiYzY0N2YyYywKLQkweDUyOGZjZjcyLCAweDdjZTc1Yzc0LCAweDQ0MGEyYzAxLCAweGU0MmMyOWM4LCAweDU4ZDA2NjA0LCAweDc1Y2Q5OWJjLAotCTB4ODc2YWExNzYsIDB4YmZhZTE4ZjIsIDB4NDRkODdkZjIsIDB4MTNmY2FjZmIsIDB4ZWY3YzhhNmMsIDB4ZGVjMjlhY2YsCi0JMHhiMzI2YjNmYiwgMHg1OTM2MDU3NiwgMHgxODE1ZTcyOCwgMHhhY2E1NmNjYiwgMHg1ZGIwOTQxZiwgMHhlNDBhMGJkYSwKLQkweGU0ZjMyYzAxLCAweGY3OTQyNDJhLCAweDAzYTY3OWMwLCAweGEyOTJiNGI3LCAweGMxMDdiZGYxLCAweDNmZmY5MGFkLAotCTB4MTRkYWNkZmIsIDB4Y2ViYzM3OWEsIDB4NGZkZDRmZGIsIDB4OGE4MTVkMzgsIDB4N2RmZjYxYjYsIDB4NDRjOTRmOWIsCi0JMHg1M2JlMTA3ZiwgMHhmNzExZjE2MiwgMHhmNzczZDJiMSwgMHhhNjllNjMyMywgMHgzYzE2NzMzOCwgMHhiZWEwY2U1NywKLQkweGFkOTM4Mzk2LCAweDYwMGJhYzY3LCAweDE3MzNmMjhmLCAweGUzYTYwODU0LCAweDE2MGJiZTNhLCAweDQ3NDhjYmZmLAotCTB4NDU2MWIyM2QsIDB4OGY3N2Q0ZmQsIDB4YjA2NDdlNjIsIDB4M2ZhZDhmZWEsIDB4YzdhYjc5YzYsIDB4OWM1MmM2ODQsCi0JMHhhN2Y1NTBiZSwgMHhjM2YzZDI3YywgMHgyMGFmZDBiYiwgMHgzZDEyNGI2ZiwgMHgxMThjYjYxOSwgMHhmZjVmOWMzOSwKLQkweDYzOGQwYTc5LCAweDg2N2E2NWJjLCAweGNiZTcxNjdkLCAweGQ4ZmI3ZTRjLCAweDcxYmNjNjdiLCAweDZkYTNiOWI2LAotCTB4NWM3MmU3MjQsIDB4Zjg4ZGU2NjQsIDB4YjAwYTVhMzMsIDB4YTk1NDlmOTQsIDB4MTc3ZTlmZmUsIDB4MGExMzg0ZTksCi0JMHhjYmMwY2Y1YiwgMHhmYTk3ODE0NiwgMHgyNDU0N2Q1YywgMHg4NjUzZWE1ZSwgMHhmMDhhMzJmMSwgMHhjY2IyZmY1MiwKLQkweDNiYmVhNmVjLCAweDk3MjgwZmMxLCAweGRlNzcwMjMzLCAweGZiNWVkNzdkLCAweDllMWQ0ZWFlLCAweGI4OGM3Y2VmLAotCTB4OWYyNzExZDEsIDB4OGM3NDZlMjAsIDB4NmUyMjlmN2IsIDB4ZDkwZGZmYTgsIDB4ZmRlODk1M2QsIDB4YTljN2U3NzgsCi0JMHhjMWY3NWExZSwgMHg1MDdiYTM1YiwgMHgwNmZkOWYwYSwgMHhjNzM4ZjdjOSwgMHg5ZDBjMTBmYiwgMHhiZGJhN2U2NSwKLQkweDFkMjFmNzUwLCAweDNiNWMwZmYzLCAweDVkNWNmOTRiLCAweDYwYjc0NWJiLCAweDc0MmQ4YWZmLCAweDdmOWE3OWVjLAotCTB4NWY5YTAyNTAsIDB4NGU2MDRjMTcsIDB4ZjI1ZGFlYWIsIDB4NTU3OGUwMjcsIDB4MzFkNmRiNjcsIDB4NTk2YWFmZDgsCi0JMHhjMzYxNDY1NiwgMHhiYmMxMGE5YiwgMHhlNGJmN2M2OCwgMHg0YmYxYzQ2ZiwgMHgxNzI1ODM5YiwgMHg4N2JhZTAyNywKLQkweDc1YTI1ZGFlLCAweDc1ZjEwZTA3LCAweGU2MGU2ZjJmLCAweGIwMzAwZTUzLCAweGI0MDdjZDdmLCAweDA1YmI0ZDVlLAotCTB4YjFiZjI4MTIsIDB4YjQzMWQ1MDUsIDB4YTAxNDliNWYsIDB4M2YwMzJhZmQsIDB4Y2FmZDY5NTAsIDB4YTA0ZDk2OTcsCi0JMHg2ZjdhYTZmNCwgMHgxMTA5YzRjZiwgMHhjMGUwNmI3ZSwgMHgzOTQ3NTU0OSwgMHg2MGZmYjY1NSwgMHhjNjU3OThhMSwKLQkweGUxOWY5N2MzLCAweGEzN2ZlMGQ3LCAweDFjZGYyN2JmLCAweDZmZjEzZmU5LCAweGYwOTNkOTFmLCAweGYyMTZiZmJmLAotCTB4YmUzNWQ1NWYsIDB4N2U4OWM0ODksIDB4ODk3OWUzYTUsIDB4ODRkNTk1ZjksIDB4NWI4NzBiYTcsIDB4ZGE0YmZiN2YsCi0JMHg0ZWJmZTBlZiwgMHhkOTQwZGMyNCwgMHhkYzFiYzlhZCwgMHhlYjE3MTYzZSwgMHhmOTcwM2VjNCwgMHg0MjlkZDUzZCwKLQkweDQ1MmU1M2YyLCAweGZmM2U3M2ZiLCAweDQzNWRjZDkwLCAweDJhOTg2MWZiLCAweGM0ODQ0NGQ4LCAweGQwZGI4N2U0LAotCTB4OTNlNDgwMWUsIDB4NDNlY2M4OWIsIDB4NmJhYjBlNGUsIDB4ZDFlZjllOTAsIDB4YWNjN2E0MDQsIDB4ZDhiNWQ1ODUsCi0JMHhmMzE3NjZkZiwgMHg5N2ZlYWNmMiwgMHhhZmE0NmY3MywgMHhmMjY2NjZjMywgMHgyNzgxZTZiMSwgMHhlZDE4NmZkMiwKLQkweDNhNDcxYTdlLCAweGE2N2RlNjhlLCAweDRlYmM3MDg2LCAweDZlMTJhY2JmLCAweDUzYmY4MmViLCAweGRiZGZhNDc1LAotCTB4NTc0MmUxZjksIDB4MzYwMmY3OWMsIDB4OTMxNGFmZWUsIDB4ZDk0ZjcyYmIsIDB4NGJkNDdkODgsIDB4ZjA4OTIxOGQsCi0JMHhjZTkyNzA3ZSwgMHgyZjliNThmMiwgMHg0OGViZThjNCwgMHhmOThmODlkMCwgMHgzZDM3N2UwNywgMHhlZmRlYjExNCwKLQkweDI2MTMxZjExLCAweDdlZWJmNDhjLCAweDQyODk2MWYxLCAweGMzZmQ3YjcyLCAweGM4Y2E3MzEyLCAweGU0Y2M4MWYzLAotCTB4M2E1YzdmNGEsIDB4M2E3OGJjNzgsIDB4ZjY5OTdkZDUsIDB4ZDE2MDNkYWQsIDB4MTNiZTE5MWIsIDB4NzdjMjQxOWMsCi0JMHgzZDEzOTI1NywgMHg2ZDViZTEzNSwgMHhmN2M0OGIyYywgMHhiYWVlOGNjMywgMHg0ODg5ZDkyZSwgMHg2NWNlYmE4NywKLQkweDNmMzYwNjllLCAweDkwNmE0OWM1LCAweDA4ZmFlNzNiLCAweDY2ZTZiMjY3LCAweGMxZmY4NDc4LCAweGE1NDcxMGZkLAotCTB4YTNmYTM3ZjQsIDB4Y2ZjZjM2OTUsIDB4ZTRlNjdmNDksIDB4YmM0OGM0ZTAsIDB4Mzk0Mjk5ZDUsIDB4Y2ZlOTEyOGQsCi0JMHhjMjM3M2NkMywgMHg5ZjY0ZTRmZSwgMHg3OTIwZThkZSwgMHg3ZDY1M2JhNiwgMHg4OThhN2Y0NCwgMHgwZjQwNjVlYiwKLQkweDhlMjlkYWE1LCAweDUwZjVjNjZkLCAweGRmYzEwMzFlLCAweGI3ZmM5MmE1LCAweDkyYjNhZTc2LCAweGE2Yzc3ZmRkLAotCTB4NTU1OTNkMzEsIDB4ZmY2MWFlOWYsIDB4YmU0N2Q0ZGIsIDB4NGFlZWE5YjcsIDB4OTk2ZGFiYjIsIDB4MGQ3NjQwODksCi0JMHhlZjg2NzZkOSwgMHgwMWQ3ODRiZiwgMHhiZDU0NTdiMiwgMHhiOGEwMWUwMiwgMHgzNmYwMjAzYSwgMHhmZjk4MTYzMCwKLQkweDcwOGZkY2E1LCAweDM3YmU1MzI2LCAweGEzYzhjYzllLCAweDY3NmYzY2QxLCAweDA4YzVjOTRmLCAweGFlMGUwNzdlLAotCTB4NGE3ZDEyNzQsIDB4MzIxZjdmMjIsIDB4Zjc2MzVlMzksIDB4YzM4MTRmZmQsIDB4OWI2YjRkYTcsIDB4ZTFjNDQ2ZTcsCi0JMHgxNWJmNzlkOCwgMHgwMGU0MzQ3OCwgMHhhYjE2NWY2NiwgMHg4Y2YxMzEwNywgMHhkYjNhZGY4NywgMHgxZmU0MzNiYywKLQkweDBiYmJiNjlmLCAweDg5OWIwZmM4LCAweGFlYTNjMjMwLCAweGU3MDNhNWM2LCAweGNkZTkwN2ZmLCAweGM4NWM3Zjk4LAotCTB4MWEzYzU1NTUsIDB4MjE0ZGY1YzksIDB4MzM3NTQ1NTcsIDB4ZWI2MWEzMzksIDB4ZmNjM2M3NjQsIDB4ZWQ3MWE5ZTUsCi0JMHhkZmMxMGJlYywgMHhiZDY4ZGNiNiwgMHgyYWJiY2VjNywgMHhiZTRjNTNmOCwgMHhlNzQ0YjVhYywgMHhjZGQ5OTk2MSwKLQkweGZhNjYxZWEwLCAweDA2MGRlNjM3LCAweDc3ZmQ3MWFmLCAweDhiYmY3ZTdkLCAweDA1NzczY2VjLCAweGFmNjdlN2MzLAotCTB4MTFjYTk2MTQsIDB4Y2RiMzhlZWIsIDB4ZmZlMjJmZmIsIDB4OGEwZjAzMTMsIDB4MGVlODhiMmYsIDB4ZGViMWYwYzUsCi0JMHhmODkyZmVlNiwgMHhjODNiZjIzNiwgMHg0ZTEyZGM3NiwgMHg0ZTA3ZDQ0MCwgMHgzZWIwZWYxMSwgMHhhYmUzMzAyOCwKLQkweDI0ZTg5MDgzLCAweGYyMjZkZWZmLCAweDE5YjgzMzYwLCAweGE5YzA5MjRlLCAweDA1ZDc3YWIzLCAweGZjOGQ5YWJmLAotCTB4NjA5OGY1MzUsIDB4OWI1Mzc2M2IsIDB4ODEzOWNhMjQsIDB4OWNjZDYwOGQsIDB4MjI4YzliMmEsIDB4NTJjNTY1YzIsCi0JMHgwYzhjODhhZiwgMHhmNmVkNTNjNywgMHhiZDIwYjc3YiwgMHhmMzI3YzEwNywgMHhmZWJhMzliYSwgMHg5MmU0OTcwNSwKLQkweDM3ZGVlYjIyLCAweGJkZDdlMmFiLCAweDY0NGQzZGJiLCAweGVlYTk3ZmQ3LCAweGFkMzQxOTlkLCAweGZhZmVkMzUxLAotCTB4MWQ4Mjc3ZmEsIDB4MTgyMmU4ZjMsIDB4ZGIyN2EzY2UsIDB4YTA1NDQ2NzUsIDB4MTAyZmUzODAsIDB4N2IzM2Y0NGMsCi0JMHhmMDlmNTRjNCwgMHgxYTdlNGZkYiwgMHg5MjJiZjllNSwgMHhhNTUzY2UyOSwgMHgwZGFiMDI4MSwgMHg3OGVlYzRhMCwKLQkweGRhMzY1YjY2LCAweDNmY2UwNGQ3LCAweGVmZTg5YmY1LCAweDBjNjc5ZTVlLCAweDRlNmZkM2Q3LCAweGZhMjc3OTY2LAotCTB4OTNkNTk5MjEsIDB4NDYyNWEwOWEsIDB4MWY5ODY1NmYsIDB4ZDg4ZDNhNDEsIDB4ZTBmMWVhYTMsIDB4Yzk1MzJmYjEsCi0JMHhmNWRhYjZlZiwgMHg4NGJkMjc3ZiwgMHhmOTQwY2I4ZiwgMHhhNDM5ODI1YiwgMHhkNWQ4ZTJkYSwgMHgzMTYzY2EwMSwKLQkweGNlZGM3OTBmLCAweDlkYWM2YmNmLCAweGZiOGZjYjkyLCAweDUwMTc3NTViLCAweGI0ZDA0ZjdjLCAweDdkODQ3MmE5LAotCTB4MzYyNWQ4MTUsIDB4ODVkOGY2YWYsIDB4YzdmMzE1MWMsIDB4NTI3N2E2MmIsIDB4OWFmZDcxOGIsIDB4NzRhOWZkOGUsCi0JMHhmZTdkNTNhYywgMHhlZDRhNzRkNCwgMHgwYTllY2Q4YiwgMHg0Y2ZiY2UzYiwgMHhhNTZmOTNkYSwgMHhiZjliNzBiYywKLQkweDA4MTNlNDg0LCAweGJjNTFhNWU2LCAweDlmMDY2MjlkLCAweDdhNDZmNGI5LCAweDU5NGFiYmJjLCAweGNiYjc1NTkxLAotCTB4NWQyOWRhY2UsIDB4YmNhMDZjNzcsIDB4ZmNlNDFiZDQsIDB4MGUwYTFlZDIsIDB4ZWIwMjc2MTUsIDB4ZDkzNjc0MGYsCi0JMHhiZmVmM2Q2OSwgMHhmZjI2OGY3NSwgMHg1NjAzMmZiNCwgMHhmNTc4ZmY5MSwgMHg3ZGZjYzk4YiwgMHhmZTY5OTgzMywKLQkweGUwNGRiYjFhLCAweGYzYTI2ZmRjLCAweGRjZTI3ZGE3LCAweDEzMGJlMDZhLCAweDNmZWM2NzliLCAweGFjYWU3M2E1LAotCTB4ODM4YTBlMjEsIDB4MGZjODQ3Y2QsIDB4NTg1OTc0MjQsIDB4MTJmMDk1MWUsIDB4NjE3NDc5NzAsIDB4MzhlNzQ3N2UsCi0JMHg4YTAxZWY4NywgMHg3MDM2ODM0MywgMHg5YWRlMzg0YSwgMHg0Zjc5NjYxOCwgMHhiZmEyZGJiOCwgMHg5YWRjOTEyOCwKLQkweDU1YmNlYzgxLCAweDIxNGFmNWU1LCAweGYyN2Y3MjAyLCAweGJmNjM3M2M4LCAweGU4ZTdhZTg0LCAweGUxNzA4OThjLAotCTB4NjA5N2I4YTIsIDB4OTMzYjg2NmUsIDB4YzI5ZGU1MjMsIDB4NzNiNDZlZTgsIDB4MDYyNmI1M2MsIDB4OTc5NGM5NGQsCi0JMHg5MTc4MDQ0ZiwgMHgyNzQyMzVkMSwgMHgzYTBkN2RiMCwgMHg2ZjdmOTkwYiwgMHg5ZTk3YzM1NSwgMHgzNGJhMzA3NCwKLQkweDcwMjE0MWMyLCAweDkyNmJhMTNhLCAweDQxMmRmZTRlLCAweDEyM2UzMTczLCAweDkzZTlkZDM0LCAweDViY2JhNDZlLAotCTB4ZGExNzg5ODIsIDB4NjExYmY3Y2QsIDB4YWVjOThlZDgsIDB4N2QyMzg5YmQsIDB4NmI0MmRhMmIsIDB4ZjgzNWM3MWUsCi0JMHgyMGIzM2UxNiwgMHgwZTRmYTIzYiwgMHhmZGU0N2NhNiwgMHgzZWY3ZWNlNywgMHg5ZDliMjViMywgMHg1NDY0ZjkxNywKLQkweDI5YjYxMjc1LCAweDY3NTNlMjc2LCAweDc0ZDdhMjdjLCAweDM5NzI5NDY1LCAweDQ5NGU1MTM4LCAweDNjM2UzZTU2LAotCTB4NGM5ZTcxMWYsIDB4Y2YzZTY0ZmQsIDB4MTY5MmQxNjksIDB4MDE3YjMyZTcsIDB4MmYyMzE3YjIsIDB4NWUwYTVjN2IsCi0JMHhiNWVkMGJiYSwgMHhiNGVlMDdmZiwgMHhkZmFiZTQ2MiwgMHgxNjg5ZTQ3NCwgMHgzNWZiZjc5YywgMHhmNjIwZmM4MSwKLQkweDE3OWVhOTRmLCAweGZjNmY5ZjA5LCAweDI5OGVlZDY2LCAweDE1NWI2ZmU0LCAweDlkZjkwNTY3LCAweDJjODdlZjkwLAotCTB4ZDE1NTdkZmYsIDB4MWRkODQ3YjcsIDB4MDkzMzg3NjQsIDB4NzhmYmIxYmYsIDB4OTBmZTM3Y2YsIDB4ODNjMWRiZjIsCi0JMHhjOWQ1NmU5MiwgMHg4ODczODZlZiwgMHg0ZmFlYmFlZSwgMHhkZWU3ZjI1NSwgMHg3Y2IyMWY4MywgMHhlN2JhNmU3NiwKLQkweGFmZWEzYjM1LCAweDNlNjFiM2JjLCAweDM0MjY3NWM5LCAweDJlYmY5MTM3LCAweDIwNDE3OTEyLCAweGExOTNmYjhiLAotCTB4MzYyZmY5ZDMsIDB4YjRlMWU4NDQsIDB4N2IwODM3YjAsIDB4ZWE3YzUxYzYsIDB4OTg3YWY2MTIsIDB4M2I2YzRlZWEsCi0JMHg0ZjFlMWU3YSwgMHhiYTg4NzdlYiwgMHgwMWFmNzhkOCwgMHhiOTIxOGM4ZSwgMHhhYzliYzIzNywgMHg3ZTM3OGUxZCwKLQkweDU5YzIyMmYzLCAweDZhZWI1OWQxLCAweDc3ZmNjNDU3LCAweDdhYmYzY2VkLCAweGJkZjNjZWQ3LCAweDM3OWVlOWY1LAotCTB4M2RkNTNlNDksIDB4YzRhOWE5MWYsIDB4MGU0MGM1ZTcsIDB4YWMwMTkzZDUsIDB4N2UzOGI1OGYsIDB4NjM3ZWQ4NjQsCi0JMHgwZTZiYzllYywgMHg3YmRmMzRhYiwgMHg0MTVmOTgxOSwgMHg0MzQ5NmY3ZCwgMHhkYjNiZWRmZCwgMHgzZTBkNzkzOSwKLQkweGE0OWQ0MGVmLCAweDllNzA5ZTUxLCAweDhhMWQ4N2Q3LCAweDZmY2QwYzdiLCAweDg0YjU3MzM4LCAweDIyMDFkOGZjLAotCTB4ZGFiOWU5MDIsIDB4ZTQ4ZTNkNWQsIDB4OTc5ZmY4ODYsIDB4MDZkNjc2NDgsIDB4NzYxOWFmY2MsIDB4OGE3NjRjNWEsCi0JMHhmZTEzMTdlZiwgMHhjODVmYThjYiwgMHhkYWFiNzJmYywgMHg2NWQ5OThiNywgMHgyZWM4MDk4NywgMHgxZWNjZmYxMSwKLQkweGM1MWFmZjEwLCAweGVkMGQ2MmUzLCAweDg5M2ZiZDgxLCAweDlmNmI3OWQ5LCAweDU4ZjJjNWM5LCAweDU5MTNlYmY0LAotCTB4ZDQwM2RlN2YsIDB4YTA1YmVkNmYsIDB4MjEzNzNiMzEsIDB4NWVjOTRiOWUsIDB4M2FkODQ3ODMsIDB4YTQ4OTgwMDEsCi0JMHg5MWRjMDkzYSwgMHhmNjA1MDNlNywgMHhjMzM3YTY1NCwgMHhmNjE3NGU1ZiwgMHhkM2QwMjgxYiwgMHg5MjQ3Yzg5YywKLQkweDQ3ZDk0NzJjLCAweDdkZTQ5YzQ0LCAweDNmNWQ0NzExLCAweDllNjdjN2ZhLCAweGZiNGY4MzlkLCAweDQ0ZDA5YzQ0LAotCTB4ZmRjNzNjN2MsIDB4YWM0NWI3ZmUsIDB4ZDY2YjdmYWEsIDB4YzdjYTE2ZDIsIDB4ZjFiMzJkN2YsIDB4MjI3Y2UyYzMsCi0JMHg0NDcyNzAyOCwgMHhkYzUwNGY5YywgMHg2ZjNmNTFkMCwgMHg2OWQ3NzM4YSwgMHgxZmExNzdkOCwgMHgzNGRhZWU5ZCwKLQkweGYyYWE3MjlmLCAweGE5NDdjZDQ1LCAweGNjMGVlNTlkLCAweGNlNzE1NGE3LCAweDBhYTNiZWFhLCAweGMyMjJmMzM3LAotCTB4N2I5MWZiNWYsIDB4ZjdlNGNjOGIsIDB4YWVmYWYzY2UsIDB4MDdmMGNiZmQsIDB4OWUxY2EyYWYsIDB4OGZmMjhjMzgsCi0JMHgxZDkwYTcxMywgMHhhZmNjM2Y4NiwgMHg4ZGQ2NDBjNiwgMHhlMTkyODNlMywgMHg0YmRlNzY0NywgMHg5NzY4MWM3OCwKLQkweDQ4NDhmYTQ3LCAweGZhOWIwMjFkLCAweDlmZGJlOTE5LCAweDlmZGY2MWYxLCAweDQ3NGFjYWVlLCAweDc4NzExZTc5LAotCTB4OWU1MWQyYjIsIDB4Y2NiZjI3ODMsIDB4MzhlY2IzMjQsIDB4OWJhYjExZmQsIDB4MTE1NzU1ZGIsIDB4MGYzZGE3ZTEsCi0JMHgzODM4Y2Q0YiwgMHg3M2YzYTczNSwgMHhmNDRiMzI5NCwgMHhjZWQxOGFmOSwgMHgzMDcxZTc0ZSwgMHgyNDNiMDdkZiwKLQkweDlhY2IxNzU2LCAweDc2ZTZlYTlmLCAweGZlNjJhNWQ5LCAweDJiN2MxOTczLCAweDExYmY5MzY2LCAweDgyOGY4MWU3LAotCTB4MWZjMmU3ZjgsIDB4YTI2M2NmZDQsIDB4MmJlNTI4ZmIsIDB4N2IxZWI3MTgsIDB4YWYzOTg5NTYsIDB4M2MyMjY0ZGIsCi0JMHhlMDkyZTg2ZCwgMHhlNTdiYzgyNywgMHgxNzcxZDhlZSwgMHhjNDZhNWJjYiwgMHhmNzNiMWIzYSwgMHhmYTgzMWIxYywKLQkweDdhMjk3YWFjLCAweDJiZTUwZDVlLCAweGMwM2M5Y2VjLCAweDE2OWFjZmVhLCAweDQ5OWYzYTI1LCAweDc4Y2I3OTE3LAotCTB4MGI3OTRmMTgsIDB4MDdmOTg5ZTIsIDB4MTZiZDBjYzUsIDB4ODc0NWVmYzQsIDB4NmI0YzkwYTcsIDB4MDljYjg5OWYsCi0JMHhjYmIzMmFmZCwgMHhiNGJmOTE0MiwgMHgyOGZlZTNjZSwgMHhjY2ZjMDU3YywgMHg4ZTA2ZjY2ZSwgMHhiM2RkMjJhNiwKLQkweGI0OWQ3MjVhLCAweDFmMzMyY2M3LCAweGNiOTlkNTlmLCAweGZkOTgwY2UyLCAweDQ0NTQzMmYyLCAweDkwYjNjYmI5LAotCTB4ZDczZWQzZTUsIDB4NDc5NDJjZTksIDB4YTA5M2YwYTUsIDB4OGRhZWYzZjEsIDB4OTE0YWFmODIsIDB4NDdmNDZkY2YsCi0JMHhmYzEzM2RkMywgMHg4NmNmYjQ0ZCwgMHhhODMzOTJiZCwgMHgxMjgwZjlkMywgMHg4YWYzYWYzNywgMHg5ZDc2NmE3NSwKLQkweDdiYzc0NjNjLCAweDc5ZTg4MWI1LCAweDZmMWYyMTVlLCAweGZkZjNmNDY3LCAweGQ1ODEzNmMwLCAweDM0N2NlMmU5LAotCTB4ZjlkODcyMDcsIDB4ZDVhZGVmNzgsIDB4Nzg1N2JmNTMsIDB4YWM0YTcxN2UsIDB4MTY2ZjhjNjMsIDB4ZjI0M2E5YjgsCi0JMHg3ZTM1YmY0OCwgMHhhOWI4NGZkOSwgMHgzY2E5N2M5NCwgMHgzNWU0ODViZiwgMHgwMzNhZjc0OCwgMHhhMGZlM2EyZiwKLQkweGY5MGJkNjNjLCAweDYxNzgxM2FjLCAweGI1ZmJlMTdjLCAweGRkM2YyNWJiLCAweDE5ZGZhZDJiLCAweDgxYTNmZjRkLAotCTB4MGYwOTBiMzUsIDB4NmNhYWI4YjEsIDB4NWI3ZTU4NTEsIDB4Y2E1NDliMDUsIDB4NTU3MTYzNmYsIDB4NjY5NzhjMzUsCi0JMHgyYzU4ZTI5NSwgMHhkMjNjZWE5ZSwgMHg3OWU2ZTg0ZCwgMHhlZTk1ZmZmOSwgMHhjZWM4MjU2YSwgMHg1OWZmYWE3ZCwKLQkweGZlODhmYTcyLCAweDc0YTk2ZmY2LCAweDdkYTM3OGZlLCAweDE5NTZmZDcwLCAweGZkN2MxMTM4LCAweDZmM2NmY2I1LAotCTB4NGMzMjdmZTAsIDB4OTQ1ZGZhNjYsIDB4NTA3NThiN2UsIDB4YTZkZDNlNzQsIDB4MzIxOGZiNzIsIDB4MDM2MmYzZjMsCi0JMHgyZmVmYjEzZiwgMHgzZGY4ZjkxNCwgMHg1N2I1ODBiYiwgMHhhNTRmM2YzYSwgMHhiZWMxZGZmMywgMHhhZDYwNTRhMSwKLQkweDNmYzUxMTY5LCAweGYwODg0ZmVhLCAweDc5ZDJmYjNiLCAweGViMzViODlkLCAweGJlNTNlZmUzLCAweGUyOWI0ZjdlLAotCTB4NmEwZTRjYzQsIDB4OGE2ZTJhYzYsIDB4ZGY2MzM1ZDMsIDB4MTExMDljY2EsIDB4NzlkMmRhNTcsIDB4ZGI0Zjc5ZmQsCi0JMHg3NDA5OGRhMywgMHhlNDhhZjBjZSwgMHhlYzFiZjMyNCwgMHhkNDIzZmJmYSwgMHhjZTQ4YjVmNywgMHhiMWZlZjg4OSwKLQkweDY3NzdhMWJlLCAweDkyYjIzZTkzLCAweGRlN2FkM2E2LCAweDVhOGJiYmVlLCAweGM1ZWM3ZmIxLCAweDc1OTE5YzNiLAotCTB4ZTczYjMxZTUsIDB4MGFiMTllZWYsIDB4YTNmZDliOGIsIDB4NDE1NjdlOTMsIDB4M2RhZTgwZTcsIDB4MGZmYjhlY2MsCi0JMHg5ZDkyYWViZCwgMHg5MDRhYjYwZiwgMHhjYjFkMWI4NSwgMHg4ZjlhZmEzYSwgMHgyNzAzOWNlYSwgMHhlN2M2NGE1NSwKLQkweDQzNTQ5ZmI3LCAweDVjMGY5MTVmLCAweGM4MmI3MmMxLCAweDU1OWI0OWNlLCAweDFkZGM2YmFhLCAweGNhMjFhODlmLAotCTB4OTBmYTVlOGYsIDB4NzU1NTNmOWQsIDB4NTQ4ZmNjNGEsIDB4M2FmZDk2ZWQsIDB4ZmJiNDc5ZmUsIDB4NTQ3MDk1MGQsCi0JMHhhOGMxMjJkNywgMHg4NTcxYzhkYywgMHhhM2JmOTM4ZCwgMHhkYzJkYTdmZSwgMHg1Y2Y4MWE3ZiwgMHhlMDY4ZjAyYiwKLQkweDVhZWJjMGQzLCAweDZkZDY2N2UxLCAweDYzZTNjNjhiLCAweDFhM2FkYWUwLCAweDY1YjQ3ZmRmLCAweGNkNzk0YThkLAotCTB4ZmRmMWNkYTMsIDB4MzZhZmUxOGMsIDB4ZmU4OGZkNTAsIDB4ZThhZWMzN2YsIDB4NzE4NzFiNzksIDB4Mzg3ZTYzZTgsCi0JMHgxYmY1OWZkNiwgMHg0Mjg0MmMzOCwgMHg3MDUwZTFjMiwgMHhlMjMzMzhlZCwgMHhhYWM5ZWFmZSwgMHg1ZWU3MTA3MSwKLQkweGI3MTExZGU0LCAweDMzNzliODhkLCAweDdlNzQwZWI5LCAweGYzYmM1MmFlLCAweDZlYWMyYjY2LCAweGI3ZmY2NmYwLAotCTB4YWI5Mzg5MWEsIDB4YmIwYjI3MDIsIDB4NTNmNGMwZmUsIDB4ODBiM2Q1ZDEsIDB4OWUwMjViZjYsIDB4OTJlZjkyMWEsCi0JMHhmMjhkMjRhZSwgMHhiNzEwOGFlMCwgMHgxNjVkYzVkYiwgMHhmYTIyNWZiZiwgMHgyZGNlMmM0YywgMHhkMjE2YzA4MSwKLQkweDBiNjFlMGZmLCAweDI0M2M3NzNmLCAweDg0MDg3Y2IxLCAweGU0MjBkYjFmLCAweDc3Yzg0MWJkLCAweDYzNTlkNjAzLAotCTB4ZTYyZjI5NGEsIDB4ODJjNmY0NzUsIDB4YTUyOGM3M2QsIDB4NmJjZjEzYWYsIDB4MjU0ZDFmOGUsIDB4ZWUwNjJmMzksCi0JMHhiODA3MTY2NywgMHg2NWY0MzE5ZiwgMHhlMzFiODljNCwgMHhhNDliZjg2MSwgMHgwYjJlZWFlZiwgMHhmNzA4ZjdkMCwKLQkweDVmNzMzZjA5LCAweGU5MTlmYTBiLCAweGJjMWZiYjQ2LCAweGM1ZTE4OTJkLCAweDhkZTljMWQ3LCAweGVkNzU4YjhkLAotCTB4MGU0ZGYzZDEsIDB4ODkwZTVmOWUsIDB4MTFjZjM2YmMsIDB4MzA4YWFmYWQsIDB4N2FlMzE1MjQsIDB4ZTlkOTc1OGIsCi0JMHg5OWY1NmY2NywgMHgxMmRlZmY2OSwgMHhmNWQzZGQ4OSwgMHgzY2QzZTNlYSwgMHg5YzM4ZjQ3MSwgMHhkZDdjOGI1NywKLQkweGYzYTUyZmU4LCAweGQwMWY5YzJkLCAweGViMjM5MzlhLCAweDllMGU5ZGYxLCAweDk0Y2Q1NzdmLCAweDg4ZmYyNDdkLAotCTB4Njk2OTY1ZmEsIDB4NjVmYWRjNmUsIDB4YmZlNzAzYTYsIDB4ZTc2ZWJkOWQsIDB4YzVmYWM4ZDQsIDB4NzA5ZjI3YjUsCi0JMHgxZmFjYmRmOCwgMHg3ZjkyOTQ1NSwgMHg2NGZlZTE2OCwgMHg0ZGQ3MWNhMCwgMHg1ODFjN2NhMywgMHhiMTZkZWI3ZSwKLQkweGYwY2VhOWY4LCAweGVmMjg4ZTIyLCAweDQyNzA4N2JhLCAweGRkMjVkOWY2LCAweGZjYzEzODRkLCAweGNkMTI2ZWZmLAotCTB4NDM3YWJhMzIsIDB4NjI3NTk3ZmUsIDB4OTdlNWM2M2MsIDB4YzMwM2Y4MmQsIDB4OWMwOWYxZGQsIDB4YThkYjk0NmYsCi0JMHg1MTgwZjU3OCwgMHhjMTdkZDQwNywgMHg3OWUzNGRmMywgMHhlYWM0Mzk5ZCwgMHg4OTJlYmE4MSwgMHhjOGZkYjZlMSwKLQkweGE0NWM5Y2I1LCAweDhmZmJiMDc3LCAweGZkYjA2YjM5LCAweGEzOGYwNzA3LCAweDFmMDJmM2VkLCAweDU3MjA3N2QxLAotCTB4ZjM3MWFkNWIsIDB4MmRiZjYxY2EsIDB4NTI3NjYxNmQsIDB4NTkzMjg0YTcsIDB4ZjMxMDcxZGUsIDB4M2Y1ODE5YmIsCi0JMHhkNThjZmE5YywgMHgxMjQ3ZWQwZiwgMHhmNmI5ZDM1NiwgMHgzOGNmNWFjMCwgMHhkNGY0MmJlZCwgMHgzZjJjOGQwMCwKLQkweGFjMmQ4NDZkLCAweDMyMjVmY2E1LCAweGYxYTBkYjlmLCAweDEzMWU0YWVmLCAweDRmZmE4ZWYxLCAweGMzMWZhZTIxLAotCTB4OGQyYjVmYjksIDB4NWI3YzE3ZTcsIDB4ZmEzNzRiNjcsIDB4ZDRhZmMzMDMsIDB4MTc1N2JjMGEsIDB4Mjk0YWQ5ZWYsCi0JMHg1MzllNmM1NywgMHgzMzA4ZWMyYiwgMHg2MmRmMTY3OCwgMHgwZTlkOWJmMywgMHg5YzA4YmY5MSwgMHg2NDRhOWMzNiwKLQkweDcxZTBlYWY5LCAweDVkMzNhMzU5LCAweDQ3NGZlYjk0LCAweDc5ODZmZTUzLCAweDczOWM1ZTdhLCAweDJlMDRjZmNjLAotCTB4NjVmZGM1ZmIsIDB4ZTRjY2I5NDMsIDB4NWJjOTlhNjYsIDB4Zjk0MjFmMjMsIDB4OWUwY2JjMzEsIDB4YmU1M2Y2NGMsCi0JMHg4ZGY4NzQ1ZiwgMHhmNTdmZDIzYywgMHg2OTE3OWM1ZSwgMHgwZjNmYTg3NywgMHhjZmM3YWVmYiwgMHg0ODFiNWM3MCwKLQkweGM2MzI3NzYyLCAweDZmYzNiZWY4LCAweDM1OWMyNjRjLCAweDlmMzJmYTljLCAweGJlNWFlNWViLCAweDdkMzliOGVhLAotCTB4YmM0OTJiNDYsIDB4YmM0OTM1OGUsIDB4ODczMGVkOGUsIDB4ZjI3ZWE5NTIsIDB4ZmVkZDk0MWUsIDB4N2ExYTdkMDgsCi0JMHg0NzYxMTdmZSwgMHhmYWY1ZTY2MCwgMHhmYWNlODcxZSwgMHgxNzFjNWQwZCwgMHhlMmRlNmVhNiwgMHg3OWY4MmJmZSwKLQkweGJmZjZjMjhkLCAweGUyMWU3YzYxLCAweDFhZTIyYmU1LCAweDdiYTg1ZDEwLCAweGI4NjYxMmFmLCAweDMxMzQ5ZWYzLAotCTB4ODcyN2JjN2EsIDB4YmJlMzIzMzIsIDB4NDUxZGQ2OGYsIDB4MDZhMWFmN2UsIDB4MDI0OTFmOTgsIDB4YzdlOGIzZjIsCi0JMHhkZWY3NTQ3YywgMHhlNTgxMmU3NywgMHg3NmYyYzc0YiwgMHg5NWJmMzA1NCwgMHhhZGY5MDMyNywgMHg0ZDU1NGUyNywKLQkweGY5MGY4YzhhLCAweDI3ZTc5OTBlLCAweGNhMmM4NzI0LCAweGZiZTU5ZTU2LCAweGMyMzQzOTBiLCAweDczZWY1MTcyLAotCTB4Y2U5MmJmMWMsIDB4NTI3NTgwZTUsIDB4NmM3MWQ5MzcsIDB4ZjlhYjc0OWQsIDB4MDViNzQzNmUsIDB4N2JkODFjZTgsCi0JMHgxM2JlYzJjMSwgMHg4MWJkZGFiOSwgMHg4NWYwZTFkNSwgMHgxOWY5MTI2NywgMHhhNzZlNzhmMCwgMHgxYmMzODlmNiwKLQkweGFiZjNkMTI2LCAweGNlZGUzNzg3LCAweGM2YTUyZmNlLCAweDIzZTVmOGE4LCAweDJmMjhiMmZhLCAweGUzYTk5MzNhLAotCTB4OTlmNzZkNzgsIDB4YzJhZDYwNGMsIDB4NjQ3ZWE3ZTgsIDB4YzFkNzdhZmMsIDB4NGY2MGQ3ZTMsIDB4OTBhNzNiMDIsCi0JMHgwMGUzOGYyMCwgMHg1YmFkNDQyNiwgMHhjYjE2ZmVkMywgMHg2NTNhNmEyMywgMHg4YzFlMjQ1NywgMHhmMDcwM2VmNywKLQkweGMyMjNlYWZjLCAweDkwMTNmMTAxLCAweDZkY2Y0YzVjLCAweDdjZTlhZGJjLCAweGFkNTNkMTlkLCAweDFiMWU5ODA0LAotCTB4ZGUzZTE0NWEsIDB4MmZjYzViY2EsIDB4YjAzZTFkMTksIDB4MzZmZTg4ZmIsIDB4ZjdlNmJmM2EsIDB4MDJiY2VjMWEsCi0JMHgxOGZiMzI2NywgMHg2ZmY0MjgyYSwgMHhlOGFmZmVjNywgMHhjODc1Y2ExMSwgMHhkY2ZlMDI2ZiwgMHg5YjgzZWVjMiwKLQkweDExYTdjNzdhLCAweDVmN2E4N2VlLCAweDE3OGJjNDc3LCAweDA4M2RkMGVmLCAweDk3MjI3YTkyLCAweGUzYjExN2Q3LAotCTB4MzlmODMyN2IsIDB4ZGNmMzg5YzIsIDB4ZWI5ODlkOGYsIDB4OWZjZjE0OTksIDB4YWYxZTYwZjksIDB4ZWYyMTI1YjcsCi0JMHhiYzUxNjU3NiwgMHgzMjE3YjRmYiwgMHhkZWNmMzlmOCwgMHhlMjA5ZGY2YywgMHg4MTJkYmZhNywgMHhkYmY1YTdkZCwKLQkweGZjZThiOWY4LCAweGU5Y2RjN2ZkLCAweGE1ZGI3NzE0LCAweGFhM2YxNDY5LCAweDQwNWZkZTBiLCAweDJmZDhmOGY3LAotCTB4NzgyYjdlNjMsIDB4ZDYxYmRkOTAsIDB4NzQyZGI0YjYsIDB4MmVhM2ExYzUsIDB4YzVmMWZiODMsIDB4YzhmYmZjNmEsCi0JMHg3YmY4YzVkYiwgMHhmNTEwY2NlMCwgMHhlZTEzMGVkMSwgMHhhMjg1NWVmNywgMHg4Njc5Njc2ZCwgMHhmNDM2ZjkyYiwKLQkweGZmMGJmN2JmLCAweDg1MTJjMGZiLCAweDgxZWYyNWU1LCAweDA3N2JmMGFlLCAweDU0YjAzZjdlLCAweDg1ZmJkMWY4LAotCTB4MWU1YTVlNWYsIDB4ZWQ5NzI3ZWQsIDB4N2VlOWE3ODYsIDB4YmUyYjk5NjAsIDB4YWM0ODdlMWYsIDB4NmM1YzFjYmYsCi0JMHg0NTE2MDdkZCwgMHhlNDQ4N2JjZiwgMHhhM2I5MGY3NywgMHgxMGNhNGY5ZiwgMHhmMjFmMzdmZSwgMHgzMDA2ZmZjOSwKLQkweGViYmU5MDFlLCAweDVjNTgxMzBiLCAweGM0Y2E2ZmJkLCAweGIxYzE3OWI4LCAweGZkZWVjMGNkLCAweGJmZmRjNTdiLAotCTB4YzI4NmY3YTEsIDB4M2FiYzU5ZjcsIDB4MzVmZTczZDEsIDB4MDlkYmYzMWIsIDB4NWVlNzE3OTAsIDB4MTk1ZTI0NmIsCi0JMHhkNzIwZmVmNiwgMHhhODJmYjhiNywgMHg4NjhkMzhkNSwgMHhlNTYwYWZkZSwgMHg2NTJlNzkxMywgMHg5MGIxN2RlOCwKLQkweDA0ZGVmNTdmLCAweGFmOWVmMjJkLCAweGVhOGI2MDM2LCAweGQzNmYzYjdiLCAweGY5Zjg0NjJlLCAweGY0NmY4MTZhLAotCTB4NzNjOGU2ZmQsIDB4NjdiMjlkOGEsIDB4MGJkZDA2NzEsIDB4M2U1OWZiNTgsIDB4YjhiMDFjOGQsIDB4MDhlNTdjODUsCi0JMHgxMTJjNzJiZSwgMHg2ZGNhZThmMSwgMHg3N2UyZTI2YiwgMHg4ZmJiM2Y4NCwgMHg2YjA3N2RmYiwgMHhjYzJkMGE3YiwKLQkweDkyMDM2YWVlLCAweDZhYTNlZTlmLCAweGFjOWViYzgzLCAweGM5ZWJjMDVkLCAweDU3OWU3NmZjLCAweGYyNTA3OGFlLAotCTB4YmVlNjI0YmIsIDB4MDY3ZDEzNGUsIDB4Nzk1YTk2N2UsIDB4MzI3MDM2ZmMsIDB4MWY4MTJmMmMsIDB4N2U3OGE3MWEsCi0JMHhiMWU3ODhiZiwgMHg3ZDA0OWEzOCwgMHg3NzljZTkwYiwgMHhkMjcyNGJhNSwgMHg3OGIxNzFmNywgMHhlYTZhYmU1YSwKLQkweDZmOWVlNDViLCAweDliYzQxZjg2LCAweDE2MzI3ZTQyLCAweGYwY2YzZjQ3LCAweDFhNjMyYjdjLCAweDRjNTcwYmFiLAotCTB4MTQ0Zjc1YzEsIDB4Yjg0MzlhN2UsIDB4ZGQ4OWJiYTksIDB4ZGI3YTE0ZWMsIDB4NDEzYmVjOWIsIDB4YmY2NmJlZjEsCi0JMHg1ZmRmMDdiOCwgMHg3OTIyMTlkOCwgMHhmN2NiMDJmNCwgMHg1YjdkNmRmYSwgMHhjYzFlNzllYiwgMHg4MzZiYzFlZSwKLQkweGRlZmE0ZTA5LCAweGM5MmJiNmI1LCAweGY2ZmQ0MDk5LCAweDU0YzljNDg2LCAweGNlYzk3NjFmLCAweGI0NTdlYzI0LAotCTB4ZjI0MDVjOWYsIDB4ZGZlMzI4YWMsIDB4NjFhOWQ0NjUsIDB4YjRhZTZmOTYsIDB4NWU5MmI2NzksIDB4YTI3YjM4OTcsCi0JMHgzYTBkYmZlZSwgMHg1OGYzODY2ZiwgMHgwOTAyZjZiZiwgMHhlNzZmZTMyNywgMHhlMGM4NWU2ZiwgMHhmOGZlYWVmMSwKLQkweDcxOTM5OWU3LCAweGNmMzZlOWFiLCAweGYwN2JhMjZlLCAweGJhNTU1N2FkLCAweDdlNGVmMzI2LCAweDRlYmE2MTYzLAotCTB4NmYzNjc0ZjMsIDB4MTZjZjRiNDksIDB4ZTgzNTdlM2EsIDB4ZWUzNDNiMGYsIDB4MzY3ZjE1NWYsIDB4NmY4YjIzY2IsCi0JMHg4NjkwN2JlZCwgMHg1MDk3NmY4MywgMHg3M2QwM2NkZSwgMHhjMDhkNDRiYywgMHhmYTNkN2Y3NywgMHg2YmZhMzhlNywKLQkweDViYjA5MzAwLCAweDY5MjU2YjMzLCAweGI4NmZjOGI5LCAweDhmYmI3YjFkLCAweDQxYjlkMjY2LCAweDMxNmZkOTNmLAotCTB4Mjk1MjY3YjUsIDB4YmRiNmQ2MmUsIDB4ZjI5MTNhOTcsIDB4MWFkZTBlOGMsIDB4OTJlOTVkZWIsIDB4ODczMDNjZDksCi0JMHg4OTRhMWZmMiwgMHg0NjY5ZWZhNCwgMHg1ZjAwOTVkZiwgMHhmZjk0MjAwNywgMHhmMWM4OTRjMCwgMHhmYjZmZmZhNiwKLQkweGFlMzg0MTNmLCAweGVjYTI4NmI1LCAweDU2MTM5MGRmLCAweDQ3NTYzZWVkLCAweDdiYjBiNjFlLCAweDg5MjdiYTc1LAotCTB4OTJlYTllZmMsIDB4MmMwY2Y1YzAsIDB4Njc0ZWM4NmUsIDB4NzhmMGJkZDIsIDB4ZjBjY2M1NGEsIDB4MTBjZGY1MDgsCi0JMHg5ZWU5ZGIzNCwgMHhlZmYzMjgzNiwgMHhmZjk5YjJjYywgMHg5ZmY2MmU5ZSwgMHhkMGY2MGU2MSwgMHhjNTMzOTZmNywKLQkweGU4MmNlMmJkLCAweDA2YmVmMzYzLCAweDQwYmFkNjYxLCAweDBmM2I1MzMzLCAweGI3MmRhYzljLCAweDMyYTNlZjA2LAotCTB4OTAxMDM4YWYsIDB4NGNjMWZmNDksIDB4OTU5MmVkYjMsIDB4ZjEwMDdmN2QsIDB4MzcyMjNkZjQsIDB4ZTQzMjVjMzMsCi0JMHgxM2ZkZDMyMSwgMHg5NjJmNWVmZiwgMHg4ZjAyZWI5ZiwgMHhlZmRjNWMzMywgMHhkZjQxMmE1MCwgMHg4MDQzOTY1OSwKLQkweDA5ZGY3N2RkLCAweDFkZWY3MTIxLCAweDU4ZDk4ZjlmLCAweGQ3N2RkMWE3LCAweDg5M2I2ODlkLCAweDM2N2UxZTRjLAotCTB4MjNmMTBlN2YsIDB4NzQyN2UzYzcsIDB4MmMzMzUzMWYsIDB4MjkzZTg4ZDAsIDB4OWViYTY5OTgsIDB4MGM3Y2ViNzQsCi0JMHgzNzViMDI2NiwgMHhlMDc4NWQ3NSwgMHhmYjkxYjJjOSwgMHhkYmQ3Njc0MiwgMHg1MGJiZThlNywgMHhkZjYyZTVjOSwKLQkweGM5YWQzYThkLCAweDA0OTc1NjQxLCAweDdlYzNmZGNkLCAweDM5MjAwZjJjLCAweDY2NjI2ZDczLCAweGY3NzdjOGM2LAotCTB4M2RmNjAxZTAsIDB4Zjc3N2VjNDUsIDB4Y2NlNWVlYzQsIDB4OGNiNGVmOTEsIDB4ZmFmNzNmZWYsIDB4YzQyNmViOTcsCi0JMHhkNTg3MmFjNywgMHg0YTNlMjMyOSwgMHhkMDc3MzlhZCwgMHhjZDM5ZTBmOSwgMHg4ZDM5OTg5MywgMHg5OTZkMDNiZSwKLQkweGZiMzExNmM4LCAweDUzYmNiMWE3LCAweDVjMDkyYWUwLCAweGU0YmZjNGU1LCAweDA3ZmJiZTMyLCAweDM4OWYxNzg2LAotCTB4ODI2NWY2YmYsIDB4OTI1MmFlOWYsIDB4OTE1ODdjMzAsIDB4NDM4ODFkYWUsIDB4NWZhMTlkYWIsIDB4ZTE1OWVmYTcsCi0JMHhlNTNhZjlhOSwgMHg1NjZkNWJiNywgMHgxNjZmZTUyNywgMHg4NDY5MzdhMiwgMHhmZjJiMjZkZSwgMHg3ZWY4YzFlZSwKLQkweDRkOGU1NjJiLCAweDY2M2U4MzI4LCAweGNiMmI0ZTdmLCAweDYyOGZkNzhiLCAweDZiOGYzNGY3LCAweGIyN2ZiZjljLAotCTB4ZmQxMGE2NzgsIDB4MWJjY2E3OGYsIDB4ZDE2ZWY5NDUsIDB4YjE2NGU2MmYsIDB4MzBlNTFiZmMsIDB4ZTk4MzkwYzcsCi0JMHg4MGU3ZmZjNiwgMHgzYzkxOTc3YywgMHg4MTdmZmY2MywgMHg4MDJhMmZjMSwgMHg3MjEzNDY4MSwgMHg0OGQ3ZjgzNCwKLQkweDVjNmYxNDNmLCAweGJmNDMxZmE4LCAweGQ5NzIyMzc5LCAweDU3ZjljODkxLCAweGYxOGY0YmU4LCAweGVjOWQ1ZGVjLAotCTB4ODM2Zjk2MzQsIDB4Y2YwNWZmYmYsIDB4MTA3ODUwNzMsIDB4MDAxMDc4NTAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzBiLCAweDczM2VmN2I1LCAweDk5OTMzMzFlLAorCTB4NDIwZjI2NGMsIDB4MDg0ZjAwNDIsIDB4MjE4NDJhMjAsIDB4Mzg4ODA4NDAsIDB4OGQwNjkwMDksIDB4ODgwODA4OWEsCisJMHg0MjAxMDBjYSwgMHhhOTExMzI0OCwgMHg2NzZkNWU5NywgMHg2YWQxMTQyMiwgMHhhMzZkMmQxYiwgMHg0MTAxZGE5NywKKwkweDE4MGQ0NWEzLCAweDFkMDM0MGU4LCAweDVhYmM0MTRjLCAweDViNGEwYThkLCAweDNjMzE0MWI1LCAweGU4Nzg0OTBhLAorCTB4ZWY1YmQ2YzUsIDB4MzNlZjZiNWUsIDB4NDI2NjczOTksIDB4ZmRkZmI2YTIsIDB4N2YxN2RmYmUsIDB4ZWNmYjM2ZmUsCisJMHg3YjVlZjY3MywgMHg3YjVhZmZhZCwgMHgyMzFmYjVlZCwgMHhkMzEzYzY1OSwgMHgwNTdjODQxNSwgMHg3MjEzZDc3ZiwKKwkweGY0ODQyNDQ4LCAweDBiM2I0ZWViLCAweDEwOGUzYTY4LCAweGIwMzk4ZTdmLCAweGI0MjQyMDU1LCAweDI0ZWRlZmVmLAorCTB4NGRiMzkwODUsIDB4MjY3MzU1YjMsIDB4OThjN2ZiMjEsIDB4ZjJkM2Q3NDMsIDB4ODBmYzgxYjMsIDB4ZGQ0Zjk2OTksCisJMHhkMTIxYzQ3OSwgMHg1MTRlZDU3YywgMHgzZWQzNzI4MiwgMHhiMWRmN2UyYiwgMHhkZTQwMDg1MSwgMHhmMWZkNmU2YiwKKwkweGI1ZGYzNGI1LCAweDY5OWIyNDUzLCAweDM3NjQyNGQ1LCAweGRhNDI1NDkxLCAweGE5ZmQ4NDJkLCAweDZhNWY5OGYxLAorCTB4NGRhYWQ5NjUsIDB4ZjY4MmVmZmIsIDB4NjI2NjgzY2EsIDB4MzdiN2RmYTUsIDB4YWZjODZlODksIDB4MDgwNDJhZGMsCisJMHhmNzZhYWY2ZCwgMHg1YTAwY2E4MywgMHhkMDgwYjJkZiwgMHg3ZTY5NTU2OCwgMHgxYThhNjNlYiwgMHhmYjAzYzg0ZiwKKwkweGIzNjhlY2ZlLCAweDY3ZGE3MjEzLCAweGZkODJhYTIxLCAweDQ5MWM2ZjI4LCAweDdiNjA0NTQ4LCAweDdkZmEwMGUxLAorCTB4NjVjMTM2YzUsIDB4NmM1N2Y1YTIsIDB4ZjQwMWQ3M2MsIDB4YzNjOTM0NTUsIDB4OGFkZjVhNDQsIDB4NDc1MTFiMDYsCisJMHgyMmJmYjZiMCwgMHgwN2NiNWVkMCwgMHg3OTRlZGVkOCwgMHhmZTU3YjQyOCwgMHgxMTBhM2RlNSwgMHgxYmIyOWZhMSwKKwkweDc0YTJhYmJlLCAweDc2YjViZjQwLCAweGIxZWFmYjRmLCAweDU1OWY4ZDNkLCAweGU4ZjZkMWNmLCAweDBhMmZkNTdiLAorCTB4YjU2MmU4MmUsIDB4OGU4MDc4ODksIDB4YjlkNmRkOGUsIDB4N2ZhMWRiNGYsIDB4ZjhmMGNhYjUsIDB4ZGMyYzdlYzgsCisJMHgwOGE4ZmQwNSwgMHhlZDBhNTI2YywgMHg2NTI2ZGY0MCwgMHhmYWVlYzhlOSwgMHg4N2ZjMzQ1NiwgMHhhY2ZhYmU5ZSwKKwkweDcyODg5ZWZlLCAweDQ3ZGE3YTYzLCAweDNiYmMzYTU5LCAweGJiODg0MTVmLCAweGE0NGJkNjkxLCAweGFhM2E1MjgwLAorCTB4NDIwN2Y5ZmIsIDB4YTFlMzIxMjIsIDB4OTZhODkxN2UsIDB4ZTRhOWZhZWUsIDB4MjNmZTA3MTEsIDB4MGY5NDlmZjQsCisJMHg4MWYxYmRmZSwgMHg3MmRkOTlhZCwgMHg5OTA0ZTk1YiwgMHhiY2VkY2I3NSwgMHhlYTUxY2I5MywgMHg1ZmFjOGRjYSwKKwkweGYyMGM3ZjRiLCAweGY5ZDRmNGEwLCAweGVlM2U5ODljLCAweDgzNzRjMzRiLCAweGZkYmU0NTRmLCAweGQzMDIzN2RjLAorCTB4OWYwYjlmN2EsIDB4YzNjYmU5M2YsIDB4OGRjZmEzNzQsIDB4MjJiZTUzZTksIDB4MTJiZTAzNGMsIDB4NmZiMzZmN2MsCisJMHg3YzViYTYyZSwgMHg4Y2ZlN2MxZSwgMHgwNmQzMWNhZiwgMHg3ZjNlMGQ1ZiwgMHhkMzFhYjdkZSwgMHgzZTNmM2U2ZCwKKwkweDFlYjdkMTdmLCAweDFkNWY0NmQzLCAweDVlNDAzYmE2LCAweDA1ZjI2ZDM0LCAweGJlNWRiZGYwLCAweGJlODM0YzA2LAorCTB4YzdiZTdjNDYsIDB4MTFmNGM0MTcsIDB4NjRjNzQ3Y2UsIDB4M2U1MTJmOTIsIDB4NDljNGRjMzgsIDB4OGE5MjRlYzUsCisJMHhjZDMyZjlkZCwgMHg3Y2IwOTUyNywgMHg3Y2ZlMWRlYSwgMHgzZDUzZTY4NSwgMHgzMmY5NGYzNCwgMHg2Zjk0MzJhMCwKKwkweDM1MDFmOWE2LCAweGZkZjA3Y2FjLCAweGYzNDJjMGE0LCAweDdjYWNmZDgzLCAweDAyZWUyM2M4LCAweGE5MGZjZDJiLAorCTB4MzdjM2U1NjMsIDB4NjhlMjBiZmEsIDB4OTU4MDc4N2UsIDB4NTQyZGJkNWYsIDB4YWJmOWEzNjAsIDB4NzY3OTU5MWIsCisJMHhhNzZhOTkzMywgMHhjYjEwZWNmOSwgMHg5ZWUxYmNlNywgMHgzOWYzNGYxYSwgMHhmYjlmMmNhZCwgMHg4M2FhN2Y4MSwKKwkweGQ4ZGI3M2U2LCAweDA0Y2U5M2Y3LCAweDJkMWVkNTQ0LCAweGJhYjIxZDg3LCAweDZkNTk1MDk4LCAweDRiNzBjZmY0LAorCTB4NTE1ZTY5MTMsIDB4Y2EyZTIxZWYsIDB4NmVhZGZmMWYsIDB4NDNmMjlkMjksIDB4Yzg3OTYzNzYsIDB4OWJjYjFmM2YsCisJMHhiZjk2MzcxNCwgMHhmY2MzMmZlMywgMHhlNTgzZDkyZSwgMHgyYzU1ZmRjNywgMHhmY2IwNzhhZiwgMHg5OGJkZmY3MywKKwkweDJjN2VjYTBmLCAweDU4ZmFkNGI3LCAweGY5NjNmMTVlLCAweDU4ZjVkYTgwLCAweDgwMzkxZWZmLCAweDFmNmIyM2U1LAorCTB4NGEzZGYyYzMsIDB4NWYxZmNiMDAsIDB4MWE3YmE0ZmIsIDB4M2MxMWFmY2QsIDB4ZDIzYzA3M2YsIDB4MDE2NDljYjQsCisJMHg0YWQzMWE5ZSwgMHgwOWQ2OWUyOCwgMHhmN2UwMmU2NCwgMHg4YTNhMDAwNywgMHgwYWU5NzVjYiwgMHgzZjhlZTFlYSwKKwkweGZhMGQzZWU0LCAweDkwMjk3ZjhiLCAweGMzY2NmYTVmLCAweGFmZmRmODk5LCAweGQ2OTkxZWIwLCAweDRmNWVmNjIzLAorCTB4YmE3OTliY2UsIDB4MmNkZTcyN2EsIDB4ODA2OWVhZDcsIDB4ZmI1OGQ2ZjcsIDB4Mzc4ZWNmNTYsIDB4NzllOWU5MjcsCisJMHg2N2FiNDJiMywgMHhkZjEzZDIzYiwgMHhiY2U1N2ViNywgMHhjZjRmNTkzNSwgMHgzZDVhOTU1YiwgMHhjNDllOTA3YiwKKwkweDc0ZDNkMWJlLCAweGE2OWZjZjQ0LCAweGI0ZmU2MTIzLCAweGZhZmQzZDIwLCAweGY3YjhjZjQ2LCAweGY3MTlmY2Y0LAorCTB4NmYzZjk4NWUsIDB4N2RlOTNkNjAsIDB4M2RlOWE3YWIsIDB4ZGU5YTdmM2QsIDB4MDhlN2YzMGIsIDB4ZGY1MDZiZjYsCisJMHg3ZGVlMzVmYSwgMHhiZGM2N2YzZCwgMHg0N2NmZTYxZiwgMHhkZjY2NGY0OCwgMHhhMWY1ZDllYSwgMHgzZWJiM2Y5ZSwKKwkweDA0ZTdmMzBjLCAweDZmYWMzM2Q2LCAweDQ4ZmRjYWZkLCAweDhmZGM5ZmNmLCAweGMyZTlmY2MyLCAweDViZWFhZTdhLAorCTB4ZDIzZWJiM2QsIDB4NDdkNzY3ZjMsIDB4ODE3Y2ZlNjEsIDB4NWJlYThjZjUsIDB4YTJmZjcyYmYsIDB4NWZlZTRmZTcsCisJMHgwOTMxZmNjMiwgMHhiZTk4Y2Y1MCwgMHg1NGZjMTNkMSwgMHhhN2UwOWZjZiwgMHhiMGQ4ZmU2MSwgMHhhMzdkZjE5ZSwKKwkweGNmNWRhZjI3LCAweDMwZjZiYzlmLCAweDkwMDQ1MjdmLCAweGQ1YmVjNGZiLCAweGYzZDc2YzEzLCAweGU2MWVkODI3LAorCTB4ZTdhYzIwY2YsIDB4MmJmNWJlYmEsIDB4M2Y5ZTg0ZWYsIDB4ZmNjMjI3NzksIDB4Y2FmZDhlMTksIDB4ZjQwZjdhYTcsCisJMHg3YzRmNWExMCwgMHgzOWVjZjVjZiwgMHg5ZWNmZTdhYiwgMHg4Y2ZlNjFiMywgMHhkM2E2N2FjNiwgMHhhZjdhYjI3YSwKKwkweDllODc1MjY3LCAweGMyM2E5MzNmLCAweDdhYzNjOWZjLCAweDllYWRmNDY2LCAweGZlN2ExZDNkLCAweGYzMDhlOWVjLAorCTB4NzNmOTFmMjcsIDB4MzVmYWRmNTMsIDB4OWZjZjUzYTksIDB4M2Y4YzlkNDksIDB4NGNkNzBmNjMsIDB4M2E3MmQwNzUsCisJMHhmYTQ0YmExNiwgMHhkYzY3YjVjOSwgMHg0NWU2ODE2ZSwgMHg0ZThiY2IyNywgMHg0NGJmMDExNywgMHhkMjBkZmNkNCwKKwkweGY3ZTkxNmVhLCAweDM5ODk2ZGY2LCAweGJmNDg5MzBmLCAweGZhMTRhMGEzLCAweGIxYmQ0ZjE1LCAweDIxMjNiZjQ4LAorCTB4ZTdlNzRlMmYsIDB4NzQ5M2JhMjQsIDB4MDFhMmU0ZjksIDB4OTVmYmY3YmEsIDB4Zjc5NWQxMGMsIDB4YWViNTdiOWYsCisJMHhhMzkzZGQzYywgMHg0Zjk0NjdjYiwgMHhhODNmYmRkMiwgMHhiZjk3NDBhNiwgMHhiYTBkZjU2MiwgMHhiN2ZkMzNmNywKKwkweGViNTlmMmVhLCAweDNmYmRkNzZmLCAweGFlOTE2ZWFjLCAweDBhZmFjYWZjLCAweDgxNTVmOTVkLCAweDM1ZmNiYTk1LAorCTB4N2JhZWZmMGQsIDB4MDNlMzU0N2YsIDB4YzFkMWYyYmEsIDB4NjNlNTc1ODcsIDB4ZjJlYjhmNDIsIDB4YTkzZDBmNjMsCisJMHhlYjdjN2Y3YiwgMHg4NGY5NWQ2NiwgMHhjYWViY2ZhMywgMHhkMGVkYjYyNywgMHhiOTNkYWZlNSwgMHhkOWU3ZTBjNywKKwkweGYwZDdlZDlkLCAweDI3YjgwOGJjLCAweDU3NGZlZmNjLCAweGM1MGJkZmQwLCAweDA2NTc5ODJiLCAweGRmOGZkMWQ4LAorCTB4M2Q1NGJmMWYsIDB4YmNhYmU1NGUsIDB4YTE0ZDU4YjIsIDB4MTI5OTA1ZjIsIDB4MGZlN2FlM2EsIDB4OGRiMmJmMjgsCisJMHg5Mjc3YmYzZSwgMHg3ZDI3NGFlNywgMHgxOWUyYWY3ZSwgMHg5ZmUxOGNlZCwgMHgyNDA4M2M1MiwgMHgwNGQ1NTIwZCwKKwkweDQxZmNiMWE5LCAweDIwYjFlMTk5LCAweGM3ZTFjYmUzLCAweDUzNWVmN2U4LCAweDlhNDRmMGQ3LCAweGQ3ZTYyZmVmLAorCTB4MTI5ZTVlMDMsIDB4MzhkMzg4NGMsIDB4N2JjMGQ0OTEsIDB4ZjM4MjY2NzEsIDB4NzMzMzA3ODIsIDB4ZTA0N2Y2OWYsCisJMHhhYTIwZmQ3NSwgMHhiZDc3NDI4NywgMHgxYTRmNjVlYiwgMHg2YjliMTlmOCwgMHgxZjgzZjZkZiwgMHhlZDEwNmViMiwKKwkweDllNDIwMGQ3LCAweGY5MGVkZTE2LCAweDA3ZWZkMjg3LCAweGQwZjM0ZDJkLCAweGY1MGFjY2ZhLCAweDU3ZGIyM2QzLAorCTB4YjEyM2ZiNjgsIDB4ZmY2ODA2ZmQsIDB4MzdkYTFlYzUsIDB4YjVkM2M5MGYsIDB4YWU1YzE5NmYsIDB4ZDBhMmRmNmIsCisJMHgxZmQ0OWRmNiwgMHg2ZjIzZmRhOCwgMHgxMjYxMGE5ZiwgMHg3ZjBiMmYyMSwgMHg4M2NkZjZjNCwgMHgwN2ZkYjFjYiwKKwkweDg5NWYzYTE1LCAweGRjMmUzZjZjLCAweDc3ZjQxMDdlLCAweDNlM2ZiNDFmLCAweDRjODdmZjQ2LCAweDcwN2ZmN2QyLAorCTB4MGFmZmJlODUsIDB4YjUyYmZmZWIsIDB4NzFmYjc4YzcsIDB4ZTExNmZmZDgsIDB4ZTBmZmViMTgsIDB4MzM3ZmQ2MGEsCisJMHhiZWRjMzdhYiwgMHg0M2ZmY2MyMywgMHg3YjM3ZmZkMCwgMHg2NGQ2N2ZlYSwgMHhhOGFmZmY3ZCwgMHhjY2RmZjdkNCwKKwkweGY2YTc3ZmRhLCAweDhlZGY2ZjE0LCAweDljMmJiZmVkLCAweGEyYmZmZDYyLCAweGNjNTdkYjEyLCAweDQ3ZTAxNzFlLAorCTB4MDlhYjg4YzksIDB4NDBjOWY2ZDAsIDB4MDNmYTk4NmEsIDB4OTAzYjY4NWMsIDB4YTBhMjQ4OGUsIDB4NjE1MWU0MjYsCisJMHg2ZjcxZDIwOCwgMHhlN2RiYzMxYywgMHg2ODZmMTQ3MSwgMHg5Y2Y4ZmM2ZiwgMHhjYjY1YTgwNCwgMHg4ZTJlZjNhNSwKKwkweGYyZGIxNWY1LCAweDU4NGJiMDE1LCAweDRiMmJlNzRlLCAweDQxNjVhOTM4LCAweDM2NGRmMTExLCAweDI4YzMwMzk4LAorCTB4ZDE0MTFkYmQsIDB4MGRiMmY5MGYsIDB4ZmVjMDA1ZDcsIDB4NDE2NGNkNzksIDB4OTEyNzdjMDksIDB4ZjRmZjNjMTAsCisJMHg0NzM2YTM2NywgMHgyZTk4Y2JmNiwgMHhkYmRiOTNhOSwgMHgzYzJkZjQyMiwgMHgyMzIwMmE4ZiwgMHhkMzdkMjg2YSwKKwkweGJiZTMwNDAxLCAweDc5ZDMxZmYzLCAweDhiZjNhMTEwLCAweDgzM2NlODBmLCAweDIyN2U0ODUwLCAweGEyM2VmNmIzLAorCTB4YjdjODI1ZjMsIDB4OTQxMmY5ZDEsIDB4ZGY4YjUyMTMsIDB4YTcwZWVhZDEsIDB4Mzg0YmZhNTEsIDB4NGM0YjFmZmQsCisJMHg0M2JlM2Y1ZiwgMHg3ZWE5ZjgwOCwgMHgzMWJkZmU3ZSwgMHhiMDVkNGYzOCwgMHhkZTk5NDZkYSwgMHg3ZjQyYzc0ZCwKKwkweGZiNGYyZWIyLCAweDc1MzkwN2U1LCAweDM2MDczNmVkLCAweDE1NWZjODBiLCAweGFhOGE1NWY4LCAweGY1ZTJjODQ5LAorCTB4ZGRkNzk0MTksIDB4YzU0ZmJmZWYsIDB4N2Y1OTRlOWUsIDB4ZmRjYjcxMWIsIDB4YWU3N2ZiZTksIDB4NjkzOTA2MTIsCisJMHhlNmRkYjNiYiwgMHhiODRlMzYxYywgMHhkN2E4NGMzMywgMHg0Nzk0YzMyNCwgMHg2MzRkYWRjOCwgMHgyOTAzNWE2NCwKKwkweGI3MWZjYjc1LCAweGIzM2JiNDQ1LCAweDVkOWY5ZjQ4LCAweGM4NzdjZmEyLCAweGU5NDRkOTZlLCAweGM4MTUyOGVhLAorCTB4OWNlZjVhMjYsIDB4YWQ3MmZhYjksIDB4ODkyOWJiMWQsIDB4NTdiNzk5YzksIDB4OWJlOGNhOTIsIDB4M2MwZTY5MDMsCisJMHhlNzljYTI3NiwgMHgxYWI3ZDkzYSwgMHgzMmM1ZGUzZCwgMHgzYzgyYzI5ZCwgMHhjODA4ZmRmZCwgMHhlZjgyOWZkNSwKKwkweGZkNjRlZWRkLCAweDU3M2JkMjM2LCAweDY4NGJiOGI2LCAweDE0MmVlNzNmLCAweDIzNmY4MDAzLCAweDY3ZGE3ZmZkLAorCTB4NjliMjliNzMsIDB4MzJhN2ZlYmEsIDB4YzdmNzQ1MzEsIDB4OGYzY2ZmNDgsIDB4MzI4ZDNmYjEsIDB4Y2JmM2MzOGMsCisJMHg2ZTE5Y2Y4ZCwgMHgzZmZjYjlkYSwgMHhmNGQwN2MwNiwgMHhkMjgzZTAwNCwgMHhhM2UzOWM3ZiwgMHg3YzMyYWVkYiwKKwkweDliOWVjZDc4LCAweDRmNWQwZjAxLCAweGNhZTUwNDg4LCAweGM3MWI3MmYxLCAweDNkM2E5MmNiLCAweGM4ZjEwODJlLAorCTB4NzM2NWM3MjAsIDB4MjM4NzljODUsIDB4ZTM4NzMwNzAsIDB4MWViZDU5NjAsIDB4YmYxMjc3MzcsIDB4MmU0MzFlOWMsCisJMHhmYTZjMzZmMywgMHhkZDFhOWE2MSwgMHg2ZTM5MGZiZiwgMHgxZmIyM2ZlNiwgMHg0ZmRkMTNmOSwgMHhiOGJiYTcyNiwKKwkweGQxYWNlZTljLCAweGU1YzZkZjk3LCAweGViOTcyNzdhLCAweDBlYzdmYWRjLCAweDZlNDFmMzUwLCAweGU4MzIwMzU3LAorCTB4NGQzZWY3YmIsIDB4NzkzYTZkOWUsIDB4OGQzY2I4N2EsIDB4ZTVjNWRlNzQsIDB4OThmN2Q3NzksIDB4YjZmNDhkM2MsCisJMHhkNWI2Nzk3MSwgMHg5MGM5OTA1ZiwgMHhmNDhkN2E2OCwgMHhkNTFkNTgyZCwgMHhiOWU0MDUxZiwgMHg5ZTViMWZkMCwKKwkweGYyN2U2MGRlLCAweDU1ZTc4OGYxLCAweDhmOTIzMzhkLCAweDhhZDllODQ3LCAweDdlNWQ1Mjg2LCAweGVlOWU2MDc5LAorCTB4MGJmNTY1ZmQsIDB4ZWE0YmU1NzUsIDB4MTdjYWViOTYsIDB4OTc1YmJmYWYsIDB4OWVmZmU4NWYsIDB4YWIwNWZkZWUsCisJMHg3N2U1NzU2YiwgMHgyYmE0M2NkNiwgMHg5OGZlNWY5ZiwgMHhmM2NmM2YyZSwgMHgzOWZkZWU4NCwgMHhjYWU5Mzc3MywKKwkweGE3M2M5NzY3LCAweGI0NTk5ZjJiLCAweDc1MmY5NzVkLCAweDZmYmRkNmVmLCAweDJkZDU3N2RhLCAweDhlMzdjZjgwLAorCTB4ODlmYzA0ODgsIDB4MzAyNzVjY2YsIDB4NGI5OWY4MmUsIDB4YzczYmMxNzYsIDB4YmFlMjJhN2QsIDB4ZDMwMjM3ZGQsCisJMHhlMjE3M2U5MywgMHgwZjJmYjRmZSwgMHg4YjYwOGVkMywgMHgzYTA5YzYxZCwgMHg4OTI1MmUyZSwgMHg2ZTliY2NkNCwKKwkweDEwM2Y1ZGFlLCAweGUzODI2OWM2LCAweGFjZDMxNmU5LCAweDQyNjRmZjVhLCAweDkxNTI2ZDdlLCAweDBhZjVjNWRmLAorCTB4NDQyNThkMDksIDB4ZDM4NmMxODAsIDB4OTQ0NjI1ZDEsIDB4NWU1MmY1YjcsIDB4NzI3ZjBkNGYsIDB4NWI3MTc5NzQsCisJMHhjN2RlZTdlYywgMHg4Y2UxNWUxNywgMHhkNmU5NzcxMSwgMHg3ZTAxOTI1MywgMHhiYmY3Mjc0ZiwgMHgwMjk1ZTU4ZCwKKwkweDRlN2M4OTI5LCAweGQ3YTgwM2M4LCAweDViYjhmOGU3LCAweGFmZmQzMGE5LCAweDQwNWU5MWRjLCAweDBkMGY5MDFjLAorCTB4N2I1Y2I5YWYsIDB4ZmRlNDE0OGQsIDB4M2E1OTI3MDEsIDB4N2Y1NjVlM2QsIDB4MTNiZWNlOGQsIDB4MDNmNmNhODgsCisJMHgzZGQ1OGRiYywgMHhhZDcwZDE1ZiwgMHhmYjMzYmJlZSwgMHgxYWJiYTQ0NSwgMHgxODQ0YzU2YywgMHgzNzVlNGIxNiwKKwkweGI1MGUxZDgxLCAweDBhMzk5ZTBjLCAweDYxYmY3NGU4LCAweGQ4MmE3MTgyLCAweDMzYzJmZDBmLCAweGUzZTRhMmJlLAorCTB4MDRhZmM4MTIsIDB4YjliZTkzZDMsIDB4M2NmYmI2OTgsIDB4OTVmNzFlOTgsIDB4YWZiMWZhNjMsIDB4ZGYzNmQzMDYsCisJMHhmMjNmNGM2YSwgMHhjMGZkMzFmOSwgMHgzZmQzMWViNywgMHgzZDMwZWFmOSwgMHhmNGM3YWJlYSwgMHhkMzAwNWYzZCwKKwkweDRjMDZiZWMzLCAweDYyMzVmMWRmLCAweDYyMGJlYWRhLCAweDYzNzNlMWRhLCAweDZmNWRlOWFhLCAweGM3YzkzYmI4LAorCTB4YmY4MGQzZTEsIDB4NzhlYjM4MTgsIDB4ZmFlZDU1NjAsIDB4M2IzOGRkYzksIDB4ZDZhZmJhNmYsIDB4Y2Y5YmIwM2YsCisJMHg4ZTY2ZjVjNSwgMHgxZTFkNTQ4NywgMHgzMzYwODBiZSwgMHhmMjk3YWNlMiwgMHhiMGUzOTk3YSwgMHg5NzYzZWZhNywKKwkweDZiZmYzNzdiLCAweGM0ZGUzNmYwLCAweDhhNmZjY2ZjLCAweDY1M2M2ZWI3LCAweGQ1OTRmMDE4LCAweDg5ZmE5ZTFiLAorCTB4MzRmMWJiZTMsIDB4N2U2NGU0ZGUsIDB4OGZkM2M3MGYsIDB4ZTYzMTFmYTAsIDB4ODRlMDA1MTUsIDB4ZDdmMDhiZjQsCisJMHhhNzE2MzZkYywgMHhkNDA5ZWJlNiwgMHg2YTcxNjU1MywgMHhmYTFhZjZkZSwgMHg3NWZhMmI2ZSwgMHg2ZTMwMTE4MSwKKwkweGI3ZjExZjljLCAweDNmODcxMGUxLCAweDI3NGNkNDdmLCAweGNmZjczZDdkLCAweGY5OWU5Mzg4LCAweGNkZjljNmVlLAorCTB4YmMxZDAwZDIsIDB4NWI5NzQ2YzYsIDB4YWQ1ZjE4ZTMsIDB4ZTg0NDUyMjYsIDB4YjBkMGY2YjgsIDB4NDY4YjVjNjcsCisJMHg0OTIyNWU2MiwgMHg1NWMwN2RmMCwgMHg1ZWEzMWYxYSwgMHg3ZjAzMmJlYSwgMHg5YWViZTM3YiwgMHhhMWIzY2ZmOCwKKwkweGZmMjdmNmJlLCAweDc4ZTkwYjllLCAweGUzOTdmMzEzLCAweGRiZjQ0NDVhLCAweDE3NjllODQ5LCAweDJlM2MzN2YwLAorCTB4MTA2OTVkOTksIDB4YTYxYWVlZGYsIDB4MDg2ZmQxMzgsIDB4ZjNmY2Y1ZDgsIDB4Mzc2ZTdjZDMsIDB4M2NhMjFlZmYsCisJMHhiNzcxYzU2YSwgMHgzN2Y5MGQyZSwgMHhlOWUxZjNmNCwgMHg2ZjVmZTA3ZCwgMHg3ZTM3YmRmNiwgMHhmODBjMGEyZSwKKwkweDM3YjNmMDk3LCAweDVkOWJkOGZiLCAweGM1ZjU2ZTI0LCAweGU3N2ZlZDIwLCAweDBmMzk1MWJlLCAweDg3MDc2MGFiLAorCTB4MGY1YTc5YjAsIDB4YTVkNmQ2ZmMsIDB4ZmY3Y2Y0OGMsIDB4MzNiOGUyNmIsIDB4ZWI3MWMzNTUsIDB4ZjlkYjQyNjAsCisJMHhmOWNiZWI4OCwgMHg0MDEzMmJhNiwgMHg5YzFlYjQyZSwgMHhlNGVkNzQxZiwgMHg3MjJmN2U3ZSwgMHhhZmE5OWIzZCwKKwkweDJmYWM2YmNmLCAweDY4YzIyMTQxLCAweGEyYmM2ZWRhLCAweDZhNDIwNDkwLCAweDIyYTNjZjQ0LCAweDZkNWM2ZmNlLAorCTB4ZWMxYjg4N2UsIDB4YThkNmI5YjMsIDB4ZmQzYzZmMzAsIDB4MWE4NTQ4NjYsIDB4ZjM4NWYxZjUsIDB4YzA3NjllODcsCisJMHg5YTY1NmMzYywgMHg4NjNjNzljOSwgMHhhYWI0YjUxYywgMHg4ZjY5ZDMzMSwgMHhmNTA0YWY5YywgMHg0Mjc1ZjNmOSwKKwkweGU3Y2UyMzUxLCAweGEzNTk4NGQ0LCAweDNhNzE5YzYwLCAweGJiMDUwZjhmLCAweDU2YTk4NjlmLCAweGM1MzRjYWNmLAorCTB4ZGRkYTljNzksIDB4MDk1OTBkZDMsIDB4NjAxN2ZlNmMsIDB4MjI1YjY0ZjYsIDB4M2VkMzliZGEsIDB4Y2ZmZmJlMGIsCisJMHg3YWE3YTdhNiwgMHg2OTA4N2EzNCwgMHhjMDU4OWYyMiwgMHhhY2IyZDM5ZSwgMHg1MWVmZGY5ZSwgMHgwYThiYTQxZiwKKwkweGIzNDkzN2M0LCAweDM3Y2MzOWZjLCAweGFmZmZmNGFkLCAweDEyYmQ0MDg2LCAweGJkN2FiNWU2LCAweDNjZGZhMjhkLAorCTB4ZDM2ZjllMWEsIDB4NTNiZjQ3YjUsIDB4Zjg1N2I1YjUsIDB4OTNiZDY3YWUsIDB4N2I4NmJiNDgsIDB4Zjk1N2JmMmEsCisJMHgwNjhhZjBmYSwgMHhjN2VmNTNhYiwgMHhkZWYyZWEyNiwgMHhlNzUzYmE2MCwgMHhjMDNmYzJkNywgMHgyNDExYWY3MSwKKwkweDg3MjU1ZmMwLCAweDVmNjRhNzVmLCAweDBjZGE3ODBmLCAweGJmOTg0M2MxLCAweDJhYmRlYzA4LCAweDUxZTI5YjRiLAorCTB4MDE1YTVkNTEsIDB4MzRmMjhiOWYsIDB4ZmU3M2FiZmMsIDB4YTlkNGVkNGMsIDB4N2EwMjY1ZDcsIDB4NTRhNGJlNDYsCisJMHgyMGE5ZjJlNSwgMHg0YzQ0Y2RlMiwgMHhiZjk4YmYzNCwgMHg0NTY5YThiZCwgMHhhNzViOGMzMSwgMHg1MGZlNmM0YywKKwkweDMwMWM0YTQ2LCAweDc1MjcyZTNmLCAweDNkNGYxMGI5LCAweGEwNDU0YzRiLCAweDNiYzk2NzlmLCAweGZhMTFiMThlLAorCTB4YjA1NDRlNzgsIDB4ZjVlYmM1ZDIsIDB4ZGY5ZDNjN2UsIDB4ZWFjYmYyZWIsIDB4ZTRhNWY5ZjUsIDB4MDc1ODU0ZDYsCisJMHgyNjQxYmE1ZiwgMHg4NmVjMDEwMSwgMHhlODk4ZmNiZSwgMHg5MTk3N2FjNCwgMHg2ZTMwNzU5YSwgMHhiYmM3OWNmZiwKKwkweDk0ODkzOTE2LCAweGZhYWJlOTQxLCAweDE3NzMyZmNkLCAweDg5MmUzYTUyLCAweGQ2ZDVmYzZjLCAweDMxMjc5NzcxLAorCTB4MDU2NjJiZmEsIDB4ZmY3ZDM3MTQsIDB4YjdiMWE2OTMsIDB4YmY0NDBiNTEsIDB4NzU4M2FjMGYsIDB4NzEyOTdmNmQsCisJMHhmMmQxMjU2ZCwgMHgxYmY0YmFmYiwgMHg4MWZjZDVlOSwgMHg0ZTY0ZjVhOCwgMHhlMDgzNGE0NywgMHg2M2IwYzQwZSwKKwkweDNkMzAyNDhhLCAweDZhZWVmNmUzLCAweDgzOGJhOWM5LCAweDIyM2U0MmU0LCAweGYxOGRmMjBlLCAweDc4NzQ0Mjk0LAorCTB4MDY3YTJjZGEsIDB4N2UxOWUzNGIsIDB4ZDQ4MjBmMDAsIDB4NGRiZTc4YTUsIDB4ZjU1MTY5ZmQsIDB4ZmJmNTJkNWYsCisJMHg5MDNmZDYyNywgMHhhYmFiOWZkNiwgMHg0YTlmZjczZiwgMHhmYTI4ZDBmZiwgMHg1ZmQ1NjIwYiwgMHg3NjE3OWJmNSwKKwkweGE5M2RhOWY5LCAweDBlNjdlOTc4LCAweDUzYzljNzQyLCAweDhiYWE1ZDUyLCAweGViNzJiNWNhLCAweDlhNmUxZDBmLAorCTB4MGVmYzk0OWUsIDB4ODBhOWViYzAsIDB4ZGU0YjE0NTgsIDB4NzZmMmMzYWIsIDB4YmI4ODA1ZGIsIDB4ZmQ2OTNmYzEsCisJMHgxMWZmOWZhNywgMHhkZjNlMjNjNiwgMHg5ZTMxM2IyYSwgMHg5OTBlNjBkNiwgMHgzNzU2M2VhOSwgMHhkOTI2MmYyZCwKKwkweGYyYzYzZjk4LCAweDIxMTM5ZTBmLCAweGFmZTNkNDFmLCAweGE1OWZkOWUyLCAweDhhMGFmZWMyLCAweDBhNWYxZTE0LAorCTB4YmQ1YjNmYTEsIDB4MWM0MmQzZTUsIDB4ZWExNzQ4OWYsIDB4NjgzYmYxOTEsIDB4ZGExMjUyZmYsIDB4NDI0YTg1YmYsCisJMHgxM2E1Mzk3NCwgMHhjZTVlMDRlMywgMHg4ZmQzNmYxNywgMHhmODBlODljZSwgMHhkZmNlMWI1NywgMHg3Mzk3ZWY4ZCwKKwkweDE0Yjk3NGZmLCAweGEzNmVkMjlmLCAweDI2NDA5ZWZmLCAweGY4ZDQzZDgwLCAweDNmY2MwMjQxLCAweDJmZGNmMzVkLAorCTB4N2E1MThmYjIsIDB4ZGQ3OTZjY2UsIDB4NDlmMDQ0MjEsIDB4OGRmM2EzZDMsIDB4NDdiNTdmOGIsIDB4NzZkZWQ5ZWQsCisJMHhmNDhiM2Q1MCwgMHg0YWYxYjQ4MywgMHhiYWJmNzIwZCwgMHg3Mjk1YTU5OSwgMHhkNTJkNzFjOCwgMHhiMjRkY2FmYiwKKwkweDU3MWY0ZmNiLCAweDMzZjRmMGJlLCAweGYzMWM0MjRmLCAweDMwZDc2NjhmLCAweDE3OGFmZjVhLCAweDg5MzdiYzBlLAorCTB4OTc2YzU3ZTYsIDB4Mzc1OThhNTMsIDB4Yjc2YTQyZWMsIDB4ZmZmNGJjNWMsIDB4NzJkZDM5ZDUsIDB4ODBmOTc4YTgsCisJMHhjZjYyOGVhMiwgMHg5NmVhNGZlZiwgMHhmYmVkOGFjNywgMHg5YTJhMzIxNSwgMHhmNzFiNTMxZiwgMHgxOGY2NmQyYiwKKwkweDU2M2M2OTcyLCAweDlhYzI3ZTA4LCAweDgxNGJmZWU3LCAweDdkYTllMmY4LCAweDE5OWZlOTAyLCAweDBlOWI5ZjgzLAorCTB4N2MwMDFmYTAsIDB4Mzk3MjM5NDIsIDB4Nzg2NmU1ODUsIDB4MDJlNTRiZGYsIDB4OTM5MzVhZjYsIDB4NmU0NmZjYjEsCisJMHg3NTNlYTA0ZiwgMHhjNWY5ZTIyNCwgMHhmMmZkYjQzZCwgMHhkMDVkOTkzZiwgMHhlZjE3ZjJmZiwgMHg0ZTNmNDA3MSwKKwkweGQ3MGMzNTQ4LCAweDJhNjFmY2JmLCAweGQ5NzJhZmQ4LCAweDk0YzRlYTlmLCAweGVhN2YyZjNkLCAweDY1Yjc4OGJiLAorCTB4MTUzNzdmNmYsIDB4OWRjNDQ5ZTMsIDB4YzdiMWMyNmUsIDB4NWJmZDBlOWYsIDB4ZjYzNjcxYjIsIDB4MjBmMTI5NmYsCisJMHgyOTdmY2FlZSwgMHhmYTY4MDQ5NiwgMHhiNjhhNDQ5OSwgMHgwZThiZDBjNywgMHgzNjI3MTdhZSwgMHhmNjhjNDc1MywKKwkweDFmY2MwNGVmLCAweDIzYmY1ZWMxLCAweDQyMmFiZWUyLCAweGZmYTAyNmVlLCAweGExN2RlNWRmLCAweDNmZTYwMjFlLAorCTB4MWQzOTMwYjMsIDB4YWY1YzRjOTAsIDB4ODkxOWI3YTgsIDB4YjYwZjJkZDcsIDB4MGY0ZTdjODIsIDB4NzU4N2Y3NzIsCisJMHhmYzkxMmYxNiwgMHg1N2MyMWY5YywgMHhlZGYxNWViNCwgMHg3Yzk5ZmRlOSwgMHhmMmU1MmE4OCwgMHgzZjM4ZThlZiwKKwkweGZiYzM5ZTE1LCAweDlhZGJiMmFkLCAweDdjOGVmYmFkLCAweGZlZGRkOTk1LCAweGE1M2VkZTJhLCAweGU3YzYwZTNiLAorCTB4ZmRiMWE5MTMsIDB4YTZiMjAxZDUsIDB4OGU5Yzc0ZjcsIDB4N2U4NDU3YzAsIDB4ZjJkZjdkMzMsIDB4NGQ2ZmQzMTAsCisJMHg0NWE1MDNkZiwgMHgzMGYxN2U1MCwgMHgwZWY4MWZkMywgMHg1NzRhM2ZjNiwgMHhlZjk2M2ZhOCwgMHgzZGEwMjU5ZiwKKwkweDU4ZTZmM2EwLCAweGU2NDViZDdhLCAweGQ3MmZhZDdhLCAweDk2ZTk0MjcwLCAweGJjMDg4NDg0LCAweGM4NDlmZDQwLAorCTB4NTk1ZjVjN2YsIDB4MTc3ZTgxYmEsIDB4ZDBiZDJmNjEsIDB4M2ViYTIzOWUsIDB4NzE5NzZmNGQsIDB4ZmEwNTNmZmQsCisJMHhmZWI3NGQ3ZiwgMHhlZjRjOGQ5MywgMHhmYzlmZjY3YiwgMHgwNzIzNmUyYywgMHhmNDEyNzk5ZSwgMHg1ZmE3ZWE5NSwKKwkweDRiOTU3ZDA1LCAweGRkN2ZkZmEwLCAweGVkZGVmMmQ2LCAweGRhZmY0ZjU0LCAweGRlYTllOWE4LCAweGI0ZjUxYTdlLAorCTB4MTI3OGM3N2MsIDB4NmFmZjRmNGIsIDB4N2E5ODkxNzcsIDB4ZDRjNzlmNGEsIDB4ZTIxYjdiNTMsIDB4ZmQ5NGZmZjgsCisJMHgyODk3ZjhkNCwgMHhkOWE3ZjllYiwgMHg2OGY4OWVjMywgMHg0YTJmODdiNCwgMHg2OGQzZjIyYSwgMHg2MWRmZTkwZiwKKwkweDNmOGQxYjkyLCAweGRlMWE3NzBkLCAweDc1NWQ3ZTJhLCAweDMwOWRkODA1LCAweDg1ZGMzNTJlLCAweDJlZTFhOTcxLAorCTB4ZTNhYjdlMmEsIDB4Y2ZmY2IxOWYsIDB4NzRhMjZiMTAsIDB4NGZkNGI3Y2QsIDB4YTU4NDc5ODEsIDB4MmJiY2UwOGIsCisJMHhlYjg4OTY3ZiwgMHgwNDhiOTZhNiwgMHhjODgwYmVmNSwgMHg3ZGYwNmZiOCwgMHhmMDc4Y2Q1MywgMHhmZGZjYTc0MywKKwkweDUyZjdiM2I2LCAweGJmMTNlNzdhLCAweGViZTVkNmNjLCAweGJmZWJmNDY0LCAweGM5YWJlYWZjLCAweDczYjczZmI0LAorCTB4ZWNhN2NlZmUsIDB4NjNjYTg5YmUsIDB4ZTI4NDI0YWUsIDB4MjRmMzlkMjgsIDB4ODI0ODRmZTIsIDB4M2U0MGFjZjgsCisJMHg3ZTYzYTA4ZSwgMHg3ZjBmM2ViOSwgMHhlYmJiNTI1MywgMHhhZmZkZWRlOSwgMHhhNmY5MGYzYiwgMHhiNjNlZGJlOSwKKwkweGE0MmVmNTc2LCAweDI5NzliMTQzLCAweDIwYTU0ZjEyLCAweGVmM2ZjYTU3LCAweDA0MzAyMTM4LCAweDU0OWI1MmVkLAorCTB4N2FhZjMxMTIsIDB4Yjc5ZGRiOWMsIDB4MGYxY2NkYTcsIDB4OWNmZTRiZmUsIDB4ZTcwYzA5NTEsIDB4ZWI3ZTcxODMsCisJMHhiY2ViZjZlNSwgMHhiYjAwNGQ1ZiwgMHgwYjM5YmU3ZSwgMHgwZmU3YWZlNywgMHhiNThmOGUyZCwgMHhlMzg1YjI2ZiwKKwkweDU3NWYwMGVjLCAweDc1MGJiNGU5LCAweDI3N2RjNTIyLCAweGM1ZmY0MmU5LCAweGFkOTJiNzZmLCAweGJlZmRkNjMxLAorCTB4ZTRmODliMmYsIDB4ZmU4ZGNiODMsIDB4NzM2ZTU0ODksIDB4ZDFlNzBlMzksIDB4MjI3MjEzNGYsIDB4YTZlYjM2ZTQsCisJMHg1YTIzOTI1MywgMHg3MWY3ZjAwZSwgMHhkYmViM2NjNCwgMHgwZDcwMTdmMiwgMHhiNmIxNmRmYywgMHg4OGM0OTYxNSwKKwkweGYzODRmZGQ3LCAweDVmMmJjYTZmLCAweDY5ZDVmZWUwLCAweGYwMTJmOWNkLCAweGQ0NWQ5YTcxLCAweGQ0MWUzOWM1LAorCTB4MTkyNDc1ZjQsIDB4Nzk0ZDc0MDksIDB4ZTNhM2Y5NjUsIDB4ODdiZDhlMjksIDB4NTdlYzE3NDQsIDB4NTM5ZjM2ZjUsCisJMHhiYmU2MzEzYywgMHhmZDQyN2U0NiwgMHg5MDFlNDdlMCwgMHgyM2FmYzg5ZCwgMHhlMDEyYzk3MiwgMHg1NmQ5OTFlYiwKKwkweGVmOTZlYjAyLCAweDU4YWFhZTJhLCAweGIzMzc0ZTc0LCAweDUyM2NjODc4LCAweGUxMzhkOWYyLCAweGU2ZmUzZWZmLAorCTB4MTUwZjg5Y2YsIDB4Yjc5YzdlNTAsIDB4ZDFjMGZkYjMsIDB4N2Y3YTYzZjgsIDB4NmEwNDI5ZGUsIDB4YzhhMWMwMDUsCisJMHgwMDQyMjlmMiwgMHhjNDg1NjRlMiwgMHgwMTY0ZThmMywgMHg0OGZhZmRmNSwgMHgyYzFmOTVmYiwgMHhkNWY2MDE3ZCwKKwkweDRlMGIzNzU0LCAweDk2YWYyZDEzLCAweGIxYzAxNGRhLCAweDAyNWRiODM3LCAweDk1NDZmY2ZmLCAweDIwZGUzMWI4LAorCTB4MTU5YThjZDUsIDB4MjAzYWQ3MTEsIDB4OTZhZmM4NGIsIDB4Mjc3ZWRkYmYsIDB4MmNjMmY3ZjAsIDB4ZGNiYTAxMzMsCisJMHg2MDM5Y2YyMywgMHgzY2QwYmZkYywgMHhhN2EwZjUxNiwgMHg0N2MxZmQ3ZSwgMHhhMDkzNGNhNiwgMHgzMGY4ODIxZSwKKwkweGM1MzBhMWUyLCAweDllY2ZjYmE2LCAweGE4YmEwNjRhLCAweGRiOThhNmRjLCAweDkwYzU3MWVlLCAweGUxODUzMmRmLAorCTB4Y2RmNmNmYWMsIDB4N2Q5OWZmZjIsIDB4MWJlZDRjOWIsIDB4NjkxY2I1YzMsIDB4NTEyYjQ2ZGYsIDB4MmM3ZmFkZjYsCisJMHg1NmIyYjZmYiwgMHg1OGI4MGZlZCwgMHgzZmFiMzdiOSwgMHg2YmU1NzVjOCwgMHhiMmM1ZmE0YiwgMHhkOGZhYWY2ZiwKKwkweGJlMzVmZGZjLCAweDIwNzNiYjBmLCAweDIzYTM2ZmI1LCAweDZhNDBkYmVjLCAweDZkYzQ2MmRmLCAweGZmY2QxNWQzLAorCTB4NTliZWM1ZWMsIDB4ZWZmNDc3ZmUsIDB4MzE2ZmIwNTUsIDB4ZDE1MjNiZmEsIDB4ZTZhMmI3ZGIsIDB4NDU2ZmI0NWEsCisJMHg3ZWRkNDUwMywgMHhjZjg1MmNhOCwgMHg2ZmI0N2FlNywgMHgxYjM2N2YwYiwgMHgxNmNiYjJmMywgMHg1N2MwM2YwMywKKwkweDcxYWY2ZmIwLCAweDgwZWQwNzNiLCAweDM4YTQ1YjlkLCAweGRhYmVmZGIxLCAweGRhYmVkMmI5LCAweDNlMjVmZmI5LAorCTB4ZTU2ZTc2NmIsIDB4MjM5ZTc2MjAsIDB4Y2VjYzg3MWEsIDB4NzY2NGNjYWQsIDB4NjY1ZWU1NmUsIDB4NjMwZTU2ZTcsCisJMHhkZjY4Y2U3NiwgMHgxYmVjYTIwYSwgMHgwNDdhYmVmYiwgMHg4YmU3MWVmZCwgMHg4M2I4YmY5OSwgMHg5NWNmMTc5NiwKKwkweDdlZmExNjVkLCAweDVmOWRhYWIxLCAweDY5MWYxOWE4LCAweDEyMjkxNmVmLCAweGRlY2EzOWYyLCAweDM5ZTFjZWI5LAorCTB4ZGRlY2RlOTAsIDB4ODZlZjYwNWIsIDB4MGExYjFkYTIsIDB4YzdjNDY0N2EsIDB4YmE2ZDQzMGQsIDB4YmU0NzcyZmQsCisJMHg0YmY1ZmY2OCwgMHgxMDdmMmZhMCwgMHhiZWZkOWU3MSwgMHhmNjhiY2Q4OSwgMHgxNjNlZDE3ZCwgMHhhNzM3NmVmNCwKKwkweGM5ODU1MWU3LCAweDQ3ZTdjM2IzLCAweDI0NzUzYTdiLCAweDQzYWFmN2QzLCAweDU0NGUzODcxLCAweGJmYWMwOTM3LAorCTB4MTUwMTBiZjcsIDB4NWRiZjgxYzYsIDB4OWRmMmY5YzIsIDB4Nzk3Y2Q5N2IsIDB4ODNmMTk5OGUsIDB4Y2VjODliZmMsCisJMHgyYzE2NTA1ZCwgMHhkY2MzYzA4YywgMHhkNzE4MTU0YiwgMHgwYjExMmI5YywgMHgwZTBiYWZmOCwgMHhmYzBhNzBkZCwKKwkweGQ2OTcwNWQ2LCAweDAwYmJiZmEzLCAweDg5YmVjMzllLCAweDMyZWI2ZGVkLCAweDJlNzdiYjY4LCAweGExZGU3MDE3LAorCTB4MTc5OGVmZWQsIDB4M2Y3YTk3YjYsIDB4ZWM3MzdlNzYsIDB4Mzg1MzFhN2QsIDB4MTNlZTUzM2QsIDB4YTcyZmIwMDIsCisJMHgyZjEwN2RiNywgMHgyMzliZmQ3MiwgMHhjOGJmMjFiNiwgMHhmOGNjNjI1YiwgMHg5ODVlZjZhNCwgMHg5N2M2MmU0ZiwKKwkweDZmY2M1NWFhLCAweGYyODlmMzBlLCAweGY5YTIxNTRkLCAweGJjNWQyNTQ0LCAweDJmOWJiNTMwLCAweGZkYTRlZTc3LAorCTB4YmZiOWU5NGQsIDB4ZjdhMmRmMWEsIDB4M2U3MWI4ZTEsIDB4ZDdiZjgwYjMsIDB4M2UzNDFmMTMsIDB4ZjM5ZmY1NDcsCisJMHhiOGE5ZmE5ZCwgMHg4ZmM4Yzc5ZiwgMHg1Y2NlY2Q0NiwgMHg1ZTgxNDY0MywgMHgzY2YyNmZiZSwgMHhmNDcwMWUzYSwKKwkweDk0MmY5NDlmLCAweDBkZTZkYmNlLCAweGQ5ZTc5ZGQzLCAweDkzNzJmOWM1LCAweDU0YjRkOGU3LCAweDZhNDhmODE1LAorCTB4OTdiNzY3MDAsIDB4NGE5MDNmNmYsIDB4M2I4Yjc3ZmIsIDB4ZTY0MjA3MzMsIDB4NzhhNmZmYjMsIDB4NjJkMGZlMjAsCisJMHhhODNiNDJlZCwgMHhjY2NkMzBlMSwgMHg4ZTU3Zjg3MCwgMHg5YzAzMjNjMywgMHgwOWJjNzBkMywgMHhhZmQ0NGUwYSwKKwkweGYxY2VjMTkwLCAweGNhNWU2NDdkLCAweDZmNWZkMDY3LCAweDE0NGY4ZjkwLCAweDg1OWZhMDlmLCAweDcyMDU3OGRhLAorCTB4YTliY2ZmYTEsIDB4NWJjNWM5OTksIDB4NmU1Y2EwMjMsIDB4ODEwNzVkMjYsIDB4ODIyOWQ1ZWYsIDB4MmFhYjQ0MmIsCisJMHgyMWZmNmUwYywgMHhkNTdhYjdlYywgMHg5ZTgzOWY0YSwgMHhjZGFlMGI5NywgMHhmNGY2MWQ4YywgMHg5NjM4OThkNCwKKwkweDM3MThlMTYyLCAweDliOGM0NjA5LCAweDI0YmRlMDBiLCAweGM2NjhiN2Q4LCAweDFlZmNlZmY2LCAweDNmNDY0N2IzLAorCTB4ZjViOThhNjUsIDB4ZTUzM2QwMDgsIDB4MDliMjY0ZGYsIDB4N2ZlODA2MWUsIDB4ZmEzMDM4MTEsIDB4ZjA3YTUxMzEsCisJMHhhNGZkZjczNSwgMHgyYWZkZmI3MiwgMHhmYzBlYzFjOCwgMHgxZmMwNTJlZSwgMHhmOGQ4ODZmMiwgMHgyNTdiOTVhMywKKwkweDRkZjIxYTc1LCAweDhlOTA0MzkzLCAweDFjOThlMzJmLCAweGM4ZGZhOTYwLCAweDNjYjQ1YmU3LCAweDZmZGUxZmUwLAorCTB4N2VmODY0MTYsIDB4MzI0Zjk1MDYsIDB4ZmE2YTlhMmQsIDB4Nzc4NmEwZTIsIDB4MmZjZDFhYjMsIDB4NDdhNDI3ODgsCisJMHg2ZmIwMGRkOCwgMHhkNTk2ZWI5MSwgMHg0ZjkxYjdjMSwgMHhlZWEyYWMzNywgMHgyN2NkMWE5OSwgMHgwNzYwM2U0ZCwKKwkweDI4YWZjNzJmLCAweDhmZWUwOWZkLCAweDliZWE3ZmI5LCAweDU5OWE0ZmVhLCAweGFjZmIzZmFmLCAweDg2OGZhZjVkLAorCTB4MDE1ZWRhMzgsIDB4NGU2OTBhZWQsIDB4ZjIwZmM1ZDQsIDB4ZDY1ZTZjY2MsIDB4Y2UyMGY1NjIsIDB4NWQ5MzVlYmIsCisJMHhmYjY4ZDU5YiwgMHgwYjk3MTU3MywgMHhjZjIyNTdjYywgMHgwZTg1NGRlZiwgMHhkM2IxYmFjMSwgMHhmYWQxM2U0YSwKKwkweDJjZTE4NDNkLCAweGQ1NzgzYzcyLCAweGY1Zjk0MWVhLCAweDVlMDRmZjU0LCAweDk4ZmU0ZjdmLCAweGI0MGVmZjk2LAorCTB4NTUxNmZiMDcsIDB4ZjFjNjdiN2QsIDB4ZjUyNzhiNDgsIDB4NjY2OWFmZDYsIDB4NjliZTNmNjYsIDB4YmU3NmI0YmYsCisJMHg5NzgzYmFlZSwgMHg0ZGZjNjJiNCwgMHgyY2Q4N2Y1YiwgMHhjMzJlN2U3YSwgMHhkMDQ4YjhmYywgMHhjYTUwNzNhZCwKKwkweDlmZjJmZDcxLCAweGU1NThmZjUwLCAweGZjNDNmNTMyLCAweGZjZjk0NDI4LCAweDMxYTdiNmVhLCAweGY5ZjY3ZDVlLAorCTB4ZmU4MzM3NjMsIDB4NDhhZGY4YWMsIDB4M2E5ZjU0MmMsIDB4MTA5M2M1YjYsIDB4ODBhMjA3ZGIsIDB4MjRkMTUwOWYsCisJMHg5MTE2N2FlMiwgMHgyMzMzYjk0MiwgMHhkNjQyMGNmYywgMHgxNGJjN2UzMCwgMHg2MmE3NzY4ZiwgMHg0YzUwMzk4NywKKwkweGY1ZDhhZmJmLCAweGRkYzQzNjQ5LCAweGY2NjAxZTNhLCAweGM3M2NmZmNmLCAweDFiMmRiZmEzLCAweDI0MmJmYmQ2LAorCTB4OTQ2ZjhlYjYsIDB4OWYxY2JkY2YsIDB4ZTZkYjc2NjcsIDB4MWExNmZkODIsIDB4OGFkNzc5ZDgsIDB4MzliMjM5YzYsCisJMHg2NTUwY2UyMiwgMHg3YjVjNTk5NiwgMHg1OWY3MGRiNywgMHg3MDEzOWZmYiwgMHgxN2QwMzI5ZiwgMHhkYjUyY2U3OSwKKwkweDM5ZTY3OWZmLCAweDgyMmI5NzY2LCAweGNkY2UwMDcyLCAweGVmNmMzNDU2LCAweGM1NzgzODgwLCAweGFmZmEzMzUxLAorCTB4MGE3Mzg2ZGUsIDB4NWY1M2E3ZjgsIDB4MjNmZDAxN2EsIDB4YzVkNDUwNmYsIDB4OGZlMmEzNDEsIDB4MGNjODYyMGQsCisJMHgyYWE2YjNmMSwgMHg3ZjM0MDNiNCwgMHhiMThkZjMwYywgMHhjNWJkZjBlMywgMHhiNGJjNTZjOSwgMHhiMjlmOTc3NywKKwkweGNmY2JjNTcwLCAweDZjZGNmMDNhLCAweGM2MDc1NmViLCAweDFmMmUxYjIxLCAweDM3OGE4ZmZmLCAweGQ5NzQzZTM2LAorCTB4OGU2OWUzNzgsIDB4ZjU5OTVmOGYsIDB4MjFhNDM1ZWIsIDB4OTQ5MGUzMTksIDB4MTg5MmRjYmUsIDB4ZWUzMDhiNzEsCisJMHgyOWVjZjg1ZiwgMHhiMzNiMGY1OCwgMHgwMTRmYWZlMywgMHhiOGZmOTViZCwgMHhlMDdkZDRmMCwgMHgzYWIzZWQ4ZiwKKwkweDNlZjZiYzYxLCAweDEzZDcwNDdmLCAweDczNzZlZmI0LCAweGVlNzhlZjNkLCAweGU5ODc1YzU5LCAweDA1ZDlhM2Y4LAorCTB4M2RlYzc1YjUsIDB4MjNkNjE4MzEsIDB4OTE3ZmI2M2EsIDB4NTVkYjcxMGEsIDB4M2NlM2E3N2IsIDB4YTljZWQ1NmQsCisJMHg3OThjNDlmZCwgMHg2ZTAyOTY4MCwgMHgwNzU4N2QwMywgMHhhNWFiY2EzMiwgMHhkMDMwNjVhOSwgMHgxYmNhOTY3OSwKKwkweGZjNzBiNjVjLCAweGM1OGFiMWI4LCAweDM3MWU1NWUzLCAweGJkN2IxNmRlLCAweGRjNGUyYTJkLCAweGViOTZmMzM0LAorCTB4OTI2ZWZjNjAsIDB4NDNlOTJhNWQsIDB4OTUzMGY4YmMsIDB4YzgzZWU4ZTMsIDB4OWE0M2RiNmYsIDB4YmYyOThmYmQsCisJMHgyYTBmZjBiMywgMHhmMjBkZjdhNywgMHhjOTY5YWNmYiwgMHhiMjg0OWVhZiwgMHhlMzFlZTRhNiwgMHhmMDNlYTFjNSwKKwkweGRiY2Y1YjRkLCAweDZjN2Y3NjYyLCAweGYxZDliZDA2LCAweDgzY2Y4YzZiLCAweDgzNWNlOGRjLCAweGQ5ZjBiYzc0LAorCTB4OWNiMzg4NjAsIDB4YzJlZWJiOTQsIDB4Y2Q3YjMzZmQsIDB4NjJhYTJmYjgsIDB4M2ZhOGZiZWYsIDB4YzZkZjNiMWQsCisJMHhkN2MyMzJmNSwgMHhmODQ4M2FkNSwgMHhmMDgzYWQ4ZiwgMHg0Yjc3OWMzOSwgMHg3MzMzOGIzYywgMHg1YTFjNDNmZSwKKwkweDFlNzNlMDc1LCAweGQ2Mzg2NjZmLCAweGM1M2RkMGUyLCAweDZjMmRkMzlmLCAweGNlYjY5MTNmLCAweGNmZTViNTU4LAorCTB4ZjVjNDMxMGEsIDB4ZDM5MDNjODUsIDB4OGJhZWNiYjEsIDB4MDI3MDdjNmEsIDB4YWU0NDI2MWYsIDB4ZjM4ZWM0YTcsCisJMHhiOGRkZDc4NywgMHhlMDdlNDBiYywgMHg0YmQ3ODU3ZiwgMHhjNDIwN2U2OCwgMHhmYmMyMDNjZiwgMHhlODNkODYyNCwKKwkweDYxZDZjNGQ4LCAweGZiZDhlNDNhLCAweDk1ZjViNTBmLCAweDRmNDE4YjE0LCAweDU3NWI3ZDAzLCAweGFmZmU4ZGU5LAorCTB4MjYxOTFmY2IsIDB4ZjlhM2UzOWIsIDB4ZDhjYmU2NzQsIDB4NDU4MjdjNzYsIDB4NjFmYjc2ZjgsIDB4ZjVhODg1MmEsCisJMHhjZmFjMGI3ZiwgMHg2MDUzMWQzNywgMHg2MzhkYTFmZSwgMHhmMGNmN2Y1YSwgMHhlNzk5ZjI3OSwgMHhiMWVmM2M0NSwKKwkweGVkMDViMWFlLCAweDU0NWVkMWI4LCAweDM0MWYxNjEzLCAweGQzODMzYmQyLCAweGUzNjQxZDViLCAweGYxMWQ5OWM0LAorCTB4ZTdhZDNiMDEsIDB4MTFiYjJiY2MsIDB4OGVkYmQ1Y2YsIDB4ZGY1YTdlMjksIDB4OTU5Nzg2YzEsIDB4NTJmZDg4YjYsCisJMHgyMjA0NGUzMCwgMHhlMmYzM2ZlOCwgMHg3ZWI2NmNmZSwgMHhjNmU1ZTZjNCwgMHg3NmYwZTY3NiwgMHhkYmIxY2RiYywKKwkweGE3M2I2ZWYxLCAweGJmODU2NzZiLCAweDc3ZTc2MTUxLCAweDY5ZGVkZjJlLCAweGVhMDczZGM5LCAweDEzMmFkZDNiLAorCTB4YmE3ZmJmZDgsIDB4YzQwYTJjNTEsIDB4NDU5MjdmNjgsIDB4NGNmMmUyZDYsIDB4ODk3OGU4NmYsIDB4ZDllMzFkZTcsCisJMHg0OTMxNDZmOSwgMHg1NTdhZmY0MSwgMHg4NGQxZGU3YywgMHgxNTE1NDgxNCwgMHg2YTZiMTRlMiwgMHgzNWQyZmVkOSwKKwkweDgxYTU3N2RmLCAweGRlMjRkN2JjLCAweDc1NmRlYjg2LCAweDUzM2FmZTA2LCAweGJmMTBmOTljLCAweDE5MmI0ZTcwLAorCTB4ZGEzNTcwMDcsIDB4NDliNzQ0OWIsIDB4ZjhhYWZmNDcsIDB4MWU3MGZlYTIsIDB4YzdmNzJkN2YsIDB4ZjNjMmU0ODgsCisJMHhiMGEzYTI5NywgMHgzYTIzZmEwOCwgMHg4YzZiNGU0ZCwgMHg1ZWQ5MDVmNSwgMHg3YzExM2M0MiwgMHhmM2ZhOWQ5MSwKKwkweGIxY2JlNDkyLCAweGVkYTNkNDJhLCAweGI0YjRhOWEzLCAweGE3NDJjNDFlLCAweDRiMGFiNzFiLCAweGZjZGRlYzc5LAorCTB4NzdlYzRlNTksIDB4NGYzZTM2ZTcsIDB4OTlkNTEzNzAsIDB4YzE4M2Y2Y2EsIDB4MjNiOWQxYjgsIDB4YzY4YzliMjEsCisJMHhlMjliODkwZiwgMHgwYjlmYzZkMSwgMHgwN2VmZjZkYiwgMHg0MWQ2YjQ3YiwgMHhjZjU0ODlkYywgMHgzMTU1NTcyOCwKKwkweDhlOGRjZTBiLCAweDgwNTkwOGIxLCAweGZlNmY3M2QzLCAweDZkNmJkNjk2LCAweGQwZmU3MTE2LCAweDg1ZjZkNzY5LAorCTB4Y2Y0MTEzYmEsIDB4ZGMxMWU0NmMsIDB4ZmU1MDA3ZmYsIDB4NGU5YmI5MmEsIDB4MDI0MGJlZTMsIDB4ZGY3NmE0YWYsCisJMHhiNDVkMzEyYiwgMHhmY2U3YmNlMywgMHgxMDA3MTY0NiwgMHg5OGJmZDVjOSwgMHgyNDcwZTJjYywgMHhmMWYzZjQwMCwKKwkweGYzYTcwNTY0LCAweDdlZjBhNDNjLCAweDNhZTc4Mjk5LCAweDcyZjZiZDk2LCAweDM5MzA4ODZlLCAweGI5MmJmMjQ0LAorCTB4YjRiZTdmNDgsIDB4ODZjOGVhZGUsIDB4NzdlMjc5NzUsIDB4OTkzOWMyYjcsIDB4YmY1ZjVlMzIsIDB4NTNiOWZkMTIsCisJMHhkMDdlN2VhYSwgMHg0ZjVjMjVkMywgMHhmMGI0YmFmZiwgMHgzMmJmZDgxMCwgMHhlYmI0NTJjZiwgMHhjZmVhZTdmZCwKKwkweDU5ZjcxYWE1LCAweDJmYjBiZDIxLCAweDkzZGRlYThjLCAweGFiYmVmNDQyLCAweGQ2YzdlNmYyLCAweDdhMzk3Y2MxLAorCTB4MDExOTE1ZmYsIDB4NDgyYWM5ZmIsIDB4ZTdjZTBiOWMsIDB4OTdkMDY4YWMsIDB4NzliYjAzZWYsIDB4ZDg5M2IwMTUsCisJMHhlYmVmMTcyZiwgMHhjMzZkYmY5NSwgMHhkYzc5MzE3ZiwgMHgwYWViZjk2NSwgMHhlMmRiZmJjMSwgMHhlY2IyYWUzMSwKKwkweDlmNjhjNWI1LCAweGZlN2E2OWNjLCAweDdmM2Q1NTVhLCAweDdjOGMyMzZkLCAweGRlMzlmM2Q0LCAweDM2OWJlN2E1LAorCTB4Y2Y4OWVjZmYsIDB4ZjNmYTc5MDksIDB4NGIzZTQ2YmUsIDB4MDIxYmM3ODQsIDB4YjUxMTBlMmMsIDB4MDliODJkYmYsCisJMHhkOWYyMzZlOSwgMHgwYjc2ZDdjOCwgMHg3Y2UyZjc1ZiwgMHg5NjI1N2ZhNSwgMHg4MWIyNjY1NCwgMHg4NDI5NzRlZSwKKwkweGEzZDQ2MTdhLCAweDgwNDg3YjBjLCAweDA5NGEwZjdmLCAweGFlNTdlMmQ0LCAweDY5ZWZiNDc4LCAweDE5NDIzZmJjLAorCTB4N2EwNmNlZmIsIDB4MmViZDAyMjQsIDB4ZDEzODIzZDQsIDB4NDZkZTc2MDcsIDB4NWJiNjcwM2UsIDB4OTA5ZjU4NDEsCisJMHg1OWU5YWVhZiwgMHhmZTk0Zjc5ZSwgMHhmYTIyZDhmZSwgMHhlZmMwNDZkNSwgMHg3NjJiZDQ2OCwgMHgwNDg5Mzc2ZSwKKwkweDllODI2NGQ2LCAweDZlMzA5Y2JhLCAweDZhMmNmYTM3LCAweDlmZjcwNDk5LCAweDI4NmNiNTEwLCAweGM0ZTI3YmRjLAorCTB4MWY3Y2M3ZjQsIDB4ODI0OGU3NGEsIDB4NDMxYjgyZmIsIDB4M2VjMTUzMTcsIDB4ZWJhNzM4ZmQsIDB4ZGU3YmIwNjYsCisJMHhlYzA0YTQyNSwgMHg2YzcxY2RlMCwgMHhhNzk4YjI5ZSwgMHhkYzJhYjc3ZiwgMHhlZDdiNGVhZSwgMHg1OWJlZjg3YSwKKwkweDc4NWNlMTU2LCAweGNiNTZmMzY3LCAweDQ1MDdjODMwLCAweDliYzQ3ZmJjLCAweGI0MTU3NzU4LCAweDMzMmNkMWRmLAorCTB4ODEyY2NhYmEsIDB4ZDhiZjEwNjEsIDB4MWRiYjYzMmIsIDB4N2NmMTkzNjUsIDB4NmI2ZmQ4NjUsIDB4M2E0MGZiNjYsCisJMHgyYzcxM2Y5YiwgMHgxZGU3YjA4ZSwgMHgwNTVlOWZjMSwgMHg0YzI3YWNmMSwgMHgwYzlmZjdiMSwgMHhmZGY4OWFiNywKKwkweGZjNzBkZjM1LCAweDdmZGE4YzZkLCAweGY2Y2FkYzM3LCAweDA4NzhmZGM3LCAweGU5NzU0N2VkLCAweDMzMGUzZTc5LAorCTB4Y2I5NmI4N2QsIDB4NmY0YmY3ZjksIDB4NmNlZmZlYzAsIDB4NDcxODU0MTYsIDB4NmUzYmM1MGEsIDB4MzlmYjQ1MWMsCisJMHhlM2M0ODhmMSwgMHgzOTJlMmMzMCwgMHg5YmJmYmY4ZSwgMHgxZjgwZDJiOCwgMHgwMjIzYWYxMywgMHgzZmM0ZjNlOCwKKwkweDM1YjdkYzEyLCAweGNlMjk2NmFlLCAweGEwZWI3ZWFiLCAweDc1ODZjZjM4LCAweGIwNWI4YTUyLCAweGU4ZWM2NzczLAorCTB4OTU2ZjhmYmYsIDB4OWM0Y2I4NzQsIDB4Nzk4MTY5ZTYsIDB4MDRhMzg0ZTYsIDB4YTM4NGVkZWQsIDB4MTIzY2YyZmEsCisJMHgzNjlkYjExMCwgMHg0ZjZiZjNmZCwgMHg1NjA1ZjNlYSwgMHg0OTA3NmY4ZSwgMHhmODZmN2MwNSwgMHgzYWJhNDQ1MiwKKwkweDAxZWI4OGJiLCAweGQ5Njc2ZjVhLCAweGE2ZWZiYzAwLCAweGRhOWMyMmYzLCAweDYyOTdlOWE1LCAweDdlNzFhYzUxLAorCTB4ZjI4MWUwMjYsIDB4ZTA4NTA5ZWIsIDB4NTJjNGYyZjgsIDB4NWZlZmM2M2IsIDB4MDU3MTVhNTksIDB4N2Y5ZmViOGMsCisJMHhhYzQ1NzNjZiwgMHg3NjExZTA3MywgMHhhZmVkODEyOSwgMHhlMjUwMjc3MiwgMHgwYWQ3YWUyOSwgMHhlOTc1ZGY4YywKKwkweGViZjYzMTI1LCAweDcwZDYzODZiLCAweDdkMzllMWFkLCAweGQ2Mjc5YzY5LCAweGFkMGZjNGJlLCAweDU4MjkwZmNjLAorCTB4NjA1MDQyM2EsIDB4MjA0ZmI2NWUsIDB4MDc4ZWQ3YzAsIDB4MzczZDk3M2MsIDB4NjQwZjI3ZTMsIDB4ZTBkZTNkMDAsCisJMHgyZGIzZjQwNSwgMHg5NjNiODJjZCwgMHhlYWNhYjE5ZiwgMHgwN2JlZjM2MCwgMHgxZmIwYjVmYywgMHg5NGFhNWVlZiwKKwkweGFlN2IxZjYwLCAweGFiY2UwMzc3LCAweDJiYTA4NzZlLCAweDViYTk2NzdjLCAweDk3NzBlNzg4LCAweDg4NjZjODU4LAorCTB4ZTk3NTRiNjcsIDB4ZWUwM2M2YjcsIDB4NDc1OGNlYTcsIDB4YzRiMjdkZTksIDB4NDI3ZTcyODQsIDB4ZmVmZDIxNzYsCisJMHhiZTMwNDIyYSwgMHgwM2I1ZTNjMCwgMHgyMjliMjY2ZiwgMHhjMGZmMjNjZiwgMHg5NWIwZmY5YSwgMHhkNWIwZmJkNiwKKwkweGY2NDk3Mjg5LCAweGRmYTAwNGI4LCAweGU1ZmZkZmY1LCAweGJjZWViZDAwLCAweDBlMzk0NjY0LCAweGVkMWZmM2UwLAorCTB4NGY5Y2FkYmIsIDB4NmJkY2UzYTMsIDB4M2NhNGZmMDEsIDB4ZTVjM2Y1MDUsIDB4Yzk2NWE4NzEsIDB4ZTUwMTJmNzAsCisJMHg1NDc1OGM3YiwgMHhmMjRkMmZjZCwgMHhlOTQ2ZGI1MCwgMHhmMDliYjI0OSwgMHg3NmUyMmU3ZSwgMHhkZjZkNGVhYiwKKwkweDQ1ZWZlMTE5LCAweDA5MDkwM2U4LCAweDY5YTVmNjA0LCAweDE2Njg1NGY2LCAweGZmMTRmMTQyLCAweDEwZjYyY2UzLAorCTB4Y2E5MjMzY2MsIDB4MDkyOWJmNjksIDB4ZjU2MTYyNTYsIDB4YzI2NzRhYjUsIDB4OWY3MWFhZTcsIDB4MmU2NWM1M2IsCisJMHhiODIyNmUxYywgMHhkMjM2MGRhZiwgMHg5ZDlhZmQ0MiwgMHhkYWYzZWNkNSwgMHg2NmY2ODI0NCwgMHg2MDUyNjNlZCwKKwkweGEzNjdhZDBkLCAweGY4ODU2NmQ0LCAweDJkNWJhNjQ5LCAweDQ5NDRhZDgwLCAweGJkZTc4YTkyLCAweDdkMzM5NTA3LAorCTB4MzJmZDY1YjQsIDB4NTBhZmVjMzEsIDB4MGZmMzFmNjUsIDB4ZjVhYzQxNzEsIDB4ZmNjMzhmYmEsIDB4ZmMwMGJjZjIsCisJMHhmNWQ0M2VjYSwgMHgyZTM1YjgwYSwgMHg3NWNmNmIyYiwgMHg3OWZlODJjMCwgMHgzZjcwNmVkOCwgMHhiYjhmOTBhYywKKwkweGIxMzUzZjEzLCAweGViYTEwMmZkLCAweGI2OWRiZjcxLCAweDFiYjQ2NjhlLCAweDE1ZGUwZjU0LCAweDk1M2VhZjQxLAorCTB4NzVjZjllMDgsIDB4YjU3MmZmZDMsIDB4ZjYxMTc3MmQsIDB4Yjk5MzhmODMsIDB4ZjQxNjlhYzEsIDB4MmQ5MWM0ZGQsCisJMHg1ZjZiYzc4MCwgMHhhMjM4YmJjNywgMHgzNzg0YzhlYywgMHhkZTgwNmIzYywgMHg4YzNmNmE2ZiwgMHhhMjEzMTg3OCwKKwkweDMzZTVjOGZhLCAweDJhN2I4NTUyLCAweDk0M2NlMTljLCAweGZjZjk1YWI3LCAweDk0OWJkYjhlLCAweGQxZmQ3MWQyLAorCTB4MzMzOGU1YWYsIDB4NmJkMzU3ZjIsIDB4YWNlN2JlYTMsIDB4YjE5OGI1NzYsIDB4YzEzMjAwZDYsIDB4YmExMTBlZDgsCisJMHhjMGIzNTBlOSwgMHg4MjIxYmQxZSwgMHg0Zjk5ZGY3ZiwgMHhiYWU5NDJmMSwgMHhmYzBlZjQxNywgMHgxOTgxOGJmMywKKwkweGNkMGQ5YjgwLCAweDdlODJiMWRmLCAweGEzZjFlMzdjLCAweGIxMWQ3ZTk5LCAweGEyMjdmYWJmLCAweGY2Y2FjM2E3LAorCTB4MGY4MDNiODcsIDB4ZjIyZmZiZDUsIDB4NzI4NDIzZjEsIDB4ZWE5NWNiMGUsIDB4NDQzYzY0NDcsIDB4ZTcxMWJkYzMsCisJMHg4MWFjNWU5YSwgMHhmMGIyMzMwYiwgMHhmOTAxMWM3YywgMHgwYTIzNDI4OCwgMHgzYTM2NGNkNiwgMHg3ZjlhYWY4MSwKKwkweGNmZWMyNmJkLCAweDllYjllMjI2LCAweGRlZDY0ZTU1LCAweGNiZjM1OTFhLCAweGVmZTgxNjVkLCAweGZlODJmOGFhLAorCTB4ZjUxNzViOTcsIDB4OTdmM2EyNWUsIDB4NWUzMGYzODgsIDB4NjdlNzBiYTksIDB4MDkwYTRiZGUsIDB4N2UwYjdmMjQsCisJMHhiOWViNjkwNSwgMHhjNGE1N2UzYSwgMHgwNzU3ZTBjNSwgMHhmZmY4ZDFlOCwgMHg2ZDkzZmIyNywgMHg2YTgzY2ZlYywKKwkweDI1YWU3Zjc3LCAweDUxYjZkZjllLCAweDRmN2I5MGJiLCAweDA1YzMzYTdkLCAweDg5MTY5YzM5LCAweGQ5NWViZTBiLAorCTB4NTFlNzdlOTMsIDB4MmRkNzA2ZmQsIDB4N2EwZDlmNGEsIDB4ZWE5OWIxM2MsIDB4OGY1YTI5YjEsIDB4ZGUwOTcyNWQsCisJMHg2YmRhZTc1YiwgMHhkNDY3N2I0MywgMHg1ZmJjOGJlYiwgMHg3YmUzMWI1ZSwgMHgxMTk5ZTg4ZCwgMHg1MzcxZjMwNywKKwkweDVkYzA2MGQ3LCAweDhiOTI0YWI2LCAweDQxZDliMTI5LCAweGI2YWZhZDkxLCAweDkxYzZlYjI2LCAweDhmZGRmMWU4LAorCTB4MmZmMzUyNzYsIDB4ZjhkMmJmMzUsIDB4ZTRhZmQ4NWUsIDB4Y2YxNjg2ZTMsIDB4ZmYxNDgyMTQsIDB4YzdmN2RmYjQsCisJMHg1ZjAxZTY3OSwgMHhmY2Q5MzhkNywgMHg4MjlhMGUxMywgMHhhYjAzZmNiZiwgMHhjZmEwMGVlNywgMHgwNzEwZmI0NiwKKwkweDQyMjMxYWViLCAweDEyNWUyYzk5LCAweDRmNWJlOWQyLCAweGU4MzM2NWZhLCAweGMyNDg2MzRmLCAweGM3NGZjYzcxLAorCTB4Y2Y0MjYxYjEsIDB4NGI4YmY0ZjQsIDB4YWI1MmY0NjQsIDB4YzBjYTdlMDIsIDB4YWIxYWMyNWMsIDB4N2JhZmI4MjYsCisJMHg0N2JiMzY2MCwgMHhiYjBlNjA2NiwgMHhlM2RmZjFmNywgMHg3ZGNjN2FkOCwgMHhkMGRjNmM3MSwgMHg0YjU4MWZkMiwKKwkweGM5N2U4MWVlLCAweDczOWJmMTEyLCAweDQwZGQzOWJlLCAweGVmMGZjNDJhLCAweDBkZGY3MzhmLCAweGI5MTRiMGZjLAorCTB4NGUxOTFmYjEsIDB4ZGUyODEyZTIsIDB4MDE0NmE0MzIsIDB4NTUyNDM3ZjYsIDB4MWI4YjAyYWEsIDB4NDBlZTM2MTIsCisJMHgyOGNiZWI0YSwgMHhkYzYxZjM1NiwgMHgxNmI2YTBjYSwgMHhjZDE5MjBlMiwgMHg2Y2Y1Y2ZiMSwgMHg1ZGJmOTM4OCwKKwkweGVhMjlhYmJjLCAweDM4ODZjYTNjLCAweDU0MWY2ZmU2LCAweDhiOTM3ZjY4LCAweDcwOTQ3OWQ5LCAweDBmOTI4NmRjLAorCTB4YmY4OGVkZmMsIDB4ZjFkYjNiMGQsIDB4ZjUwZjViMTksIDB4MWIzZTMyMjcsIDB4MzAyMDVmZTcsIDB4ZjNjNDk3ZTgsCisJMHg2NDg4NTQzZiwgMHg5MWY5YzI0ZCwgMHg5OWRmMDRkZiwgMHhiMjNmMzgyYywgMHhkODIzNTcxMSwgMHg1OGUyOTdjZiwKKwkweGUwOWQ3NTVjLCAweDlmZjkwZjVhLCAweGI4MTY1ZDQ4LCAweGZmYzM0NzZmLCAweGVhZGYyNzhmLCAweDhlMmJlODkyLAorCTB4YzM2N2NlZWIsIDB4YzNlYTk1OWMsIDB4OGVhZjIwZjMsIDB4YWY4N2U3YzksIDB4MGQ3NDFlYzUsIDB4OGI3Mzc4NjYsCisJMHg5YWVmZmRiYSwgMHg0ZWIyODJkYywgMHg4Nzg4NTY2ZSwgMHg3OGViZGE0NCwgMHgxZGY3ZTcwNSwgMHhlNjBiOWM0MiwKKwkweDA1Y2IxZDQzLCAweGUxNjBhNzQ2LCAweDdkMjQwM2U3LCAweDQzZGI4NjljLCAweDI3NzgxYzZkLCAweGI3ZTkxMzJlLAorCTB4YmMxOGZmMTEsIDB4YjJlMmNjMWYsIDB4ZmQxYTNkMDAsIDB4ODZhNDczZTEsIDB4NzNjNjllNzMsIDB4ZTE1OTY5YTAsCisJMHhlZTNhNGRiOCwgMHhlMDUxMmQ5MywgMHhiZTcyMmY4ZSwgMHg5N2ZlODZkOSwgMHhkZmY0YzFkNywgMHg2MGZlODc4OCwKKwkweDZlNzMyZTNjLCAweDE1YWJmMjkyLCAweGFlNWZkYmU0LCAweGRiN2IwNDQ5LCAweDBlZTNjZWZmLCAweDBmOTFhZjkwLAorCTB4Y2M3ZjgyOWQsIDB4ZmFkZjU4NDEsIDB4OWY3MzFjODMsIDB4YTVhNjk2ODgsIDB4N2YwNTI4MGQsIDB4MGQzZDJkMzQsCisJMHhiZDc5ZWQ1MywgMHgwNzE5OGE1ZCwgMHhlZWY1Y2QzYywgMHg5ZWI1ZTMxYiwgMHhjM2YzMGM1OCwgMHhiMzlmZDBkMywKKwkweDczZGU3NzllLCAweDYxNzdiYWEzLCAweDhlM2ViYzdjLCAweGQxNWViYmYxLCAweDgwMjZhOGY4LCAweDVkZTc3NTllLAorCTB4OTI3ZWVjMDksIDB4OTBmZjc2NDQsIDB4ODM3M2M5OTMsIDB4NDkyYTUyY2YsIDB4ZDFiOWVmOTEsIDB4ZGM0N2U5MWYsCisJMHgxMTgxZTYzMywgMHhhZDkzMjBkOCwgMHhiZjE2NmI4OCwgMHg1MDY1Y2VkMSwgMHg5N2U0Yzc0MywgMHhiOWZhZThjOCwKKwkweGVjMjk0YzZmLCAweGNjNmQ5MTlmLCAweDMwZGM1ZDJlLCAweDI1NGJkYjFkLCAweDUzODc1ODBmLCAweDMxMmQyZWJlLAorCTB4NzNhZTIwYjksIDB4MWM5ZmQxNzYsIDB4NTE3YzE0NzAsIDB4ZTAyZTZiNDYsIDB4OTFlODg4ZmQsIDB4ZDQzMWUzNmQsCisJMHg2NWI3ZjM4ZCwgMHg4ODQwOTU3MywgMHg5ZWE1MmE0MiwgMHg5NzI2MjQxYSwgMHhiOGVlYjgxOSwgMHhmZjczMTRkMCwKKwkweGU2YzZkZGIzLCAweDRlNzFjZGRmLCAweDA2ZDJkMzRjLCAweDhkOGQ5Njk3LCAweDM5NDQwZmNjLCAweDdhYTQ3ODY5LAorCTB4YWUzNjVlOTgsIDB4YzUzMDljZmIsIDB4NmZiNDBhNDcsIDB4OTk0ZWE3ZDQsIDB4NDBkZDYxMDQsIDB4OWMyOTg3YjMsCisJMHhkNjNkOWFmZiwgMHhmNDA1MjFmNCwgMHg0YjAxZDYwYywgMHhlNGQ0N2RhOCwgMHg5YWJmODQzOSwgMHhmYzRhZjE4YSwKKwkweGZkNWY5YTEzLCAweDhlMDNlNjAyLCAweGRlZDAwYWViLCAweDhmNWZmZDUxLCAweGQ5ODIzMmZhLCAweGQzZDgyYjZmLAorCTB4ZTc2NTM4ODgsIDB4YzEwN2Y3ZGUsIDB4ZGY4N2RmZmEsIDB4ZWIwZjEwYmYsIDB4YmE5MTdmNDAsIDB4OWU3ZWMxZTIsCisJMHg3OGRkZmZiYywgMHhlMWY0MzczOCwgMHg3MTVlMmNmZCwgMHgzNTFlNjE5NywgMHhmYWVjYzZjMSwgMHg2YzkyYjZhMywKKwkweGRmMDJkN2U4LCAweDIyN2FlNzdmLCAweGIzNTY0OTcwLCAweDAxZTU4ZDc1LCAweDVjOWU3MGQxLCAweDU1NGYyZjdmLAorCTB4OWVlMWIyNjMsIDB4NWJkNjNmMWUsIDB4MzJlN2VmYzUsIDB4Y2I5MmExY2EsIDB4NGRiNmY5NjEsIDB4ZWQwYTg2NGEsCisJMHg3ZWI2ZGM3YiwgMHhhMDhmNmU3MCwgMHgxNGQ5M2NiZCwgMHg4ZDExZjM4ZiwgMHhjNmRiNDU5ZSwgMHhmYTc3MzAyOCwKKwkweGFmOTliMzRiLCAweDZjY2FiNzdmLCAweGMzMTc3MDVjLCAweGYzODc5NjdhLCAweGMxZTc0OGNkLCAweDZmYWMzNjdkLAorCTB4ZmVkOGNmYzksIDB4YWRiNDg1OTQsIDB4N2FiZWQ0ZDUsIDB4MGI3OWQ5OWEsIDB4N2M5NjNmNjMsIDB4YTdmNjE2YTgsCisJMHg5MGYyNWJjMiwgMHg3ODYyZjM4MCwgMHg0ZTNhN2VmZiwgMHg4ODNmNTY3OSwgMHg3ZWM2NWVlYiwgMHgzMWNkZWYxYSwKKwkweGU2ZDU1ZjllLCAweGZjYjhjYjUzLCAweGY1MDc4OGNiLCAweDZiNWNlYTJmLCAweDM2OWY1YjMzLCAweDFmY2VmZmM2LAorCTB4ZmY2MWIyY2EsIDB4OTFmZTNjNmQsIDB4NzljMDI2NGIsIDB4ODY4NzFkZTgsIDB4M2VlZTVjMjQsIDB4MWVmYzMzZTUsCisJMHgxYTU3YjgyNiwgMHg4MjNlOTNkMiwgMHg2NTRkYjY2OSwgMHhiZjM0NjRmNywgMHhhYWUwMmY3ZCwgMHhlZjFkYjgzYSwKKwkweGY2YmFmYjE5LCAweDk0ZjlhYWE2LCAweDZiMzBmNjAzLCAweDkxZmE4Nzc2LCAweGE0M2YwMWFiLCAweDk3ZjlkMDRjLAorCTB4MjgyZTliZDUsIDB4ZjhjYmJlNmMsIDB4N2U3ZjA3NzAsIDB4MWIzN2Y0MDcsIDB4M2ZhYjU5ZjYsIDB4N2NlNTRjOWEsCisJMHgzMTdjYTU0NywgMHhiZjMyMWVmMiwgMHhhNmVlN2Y0ZCwgMHhmYWQ1ZmRhZiwgMHgyYjViZjVhOSwgMHhkMWZiZTJhZiwKKwkweGY4NjlkZjhjLCAweDJjNzhlNmNmLCAweDZlYmE1MmRiLCAweDlhZDE2NTAwLCAweGYzMDYyN2JkLCAweDRlNzg2OGYzLAorCTB4MTE5N2MzNDcsIDB4NDk0OGNiM2YsIDB4ODExMGJhNjEsIDB4YjE0N2U2OTMsIDB4Y2IzYzlhNWYsIDB4ZmVmMjE2ZWEsCisJMHhiYWY4ZDNmYiwgMHg4ZmM0MWE1ZSwgMHgxMThkYzM3YSwgMHhkYjcyMWQxZiwgMHgyMzY3ZDA2MCwgMHhiODdhM2EzZSwKKwkweDM2MjdlNDVmLCAweGE5OTQyN2U2LCAweDY3ODg0MmVlLCAweDlkNzYzNzUxLCAweDM5NGZjMjMzLCAweGJjMWRkNTI5LAorCTB4MGI2Y2Y0MGYsIDB4ZjhjNDc5YzMsIDB4ZDdiOTljY2IsIDB4NTdjZjFjNjUsIDB4ZTFmZGFiYzYsIDB4ZGI5NDNkM2UsCisJMHg2MDE3ZDg0NCwgMHg1YTdiYzNmNiwgMHhiNzNlZWQzYiwgMHg3YzA0YTg2YiwgMHhiNGY0YzIyZiwgMHg3NDM1YzRhZiwKKwkweGQyZjk3NzY4LCAweGMwMzgyZTI3LCAweDQxMWNlZThmLCAweDExZDM4ZTMwLCAweDc3ZjdhN2FmLCAweGY5ZTkxMTM2LAorCTB4YTU0Mzk3MWQsIDB4M2Y4ZmZhZDQsIDB4ZDJkYThkODMsIDB4ZGExZGZiOGEsIDB4YTA3MWU0YmYsIDB4YjE0NWNkMmYsCisJMHhmZTI3ZjlmYSwgMHg4NmY3ZTExZCwgMHg0Y2Y1YzVkZCwgMHhlMDJjOTc5YiwgMHg5OWFiYmI3MiwgMHhkYTJmNjdhZCwKKwkweDMwZjI4YTU4LCAweDQzN2FkN2VlLCAweGQwNjYxNjcwLCAweDYzOGQzY2FhLCAweDUxYmY5MDE0LCAweGRmNWM0YjNlLAorCTB4NTE2MDdkYzEsIDB4ZjA4ZjIyNzIsIDB4ZGMxZTAxN2QsIDB4MmY1NjUzYTcsIDB4MjhjM2RjNjIsIDB4OTNiYjdjYmYsCisJMHg2YjU3YTM5ZCwgMHg0MmI3MWU3MCwgMHg3OTBlYmQ4YSwgMHhiNWY0ZGRhNSwgMHhjN2VjNjNmYSwgMHhlZDAxMjZjMiwKKwkweDY1ZmU5MWE0LCAweDBkZDc2YTViLCAweGQ2N2ZkMDIwLCAweDg0N2VlOGJmLCAweGUyNWRhMjA2LCAweDU1ZmFkNGZkLAorCTB4ZmY3ODVjNDYsIDB4NTBmYWQ0NDAsIDB4NzIyNGY1ZGIsIDB4ZTZmMmY1M2YsIDB4YmYyZmI4YzUsIDB4YjA5ZmY2OWEsCisJMHg4NWM2MTIzOCwgMHg3YTM1ZmEzNCwgMHgxNDI4ZmQ4ZCwgMHg4ODE2YzhjZiwgMHg1YzE2YWVlMywgMHhlZmEzOWY2MCwKKwkweGVlZWI3MzI3LCAweGIwZDg1YzNmLCAweGFmYzgyMDdmLCAweDY2ZmI2MjVkLCAweGNlMDJmZGRiLCAweDIwM2YzYjBiLAorCTB4YmQ2MDdkNmMsIDB4M2Q2OWViODAsIDB4ZWQ5OWFmY2EsIDB4OGU1OWVhMDcsIDB4ZTdkYzBhMzUsIDB4ODg1MWI2NTcsCisJMHhmNTY1YzcyOSwgMHgxMWExYWVmOSwgMHg2MDc5NmE3NiwgMHg4ZWE4NmI4NiwgMHgxZmRjNDZkZSwgMHg1NGExYTJiMiwKKwkweDlkODA3Y2Y3LCAweGZkYjg5M2M3LCAweDQ4ZGY0ZGVlLCAweDM4Y2M2MjRkLCAweDlhNWZhNjkzLCAweDk3ZmE2OWJlLAorCTB4M2NkOTU3NmYsIDB4Y2MxYzBhNDcsIDB4ZmViYjA0YzgsIDB4YTg0YmNlMTgsIDB4Y2VkYWJlNWQsIDB4ZDFlNjA3ZDcsCisJMHhiODlmYWE1NywgMHg1ODFmNWJhMCwgMHhiM2U0Yzc5MiwgMHhlN2M2MmM0NCwgMHhjYTU3ZDkzZCwgMHgxZTdkOWQwNywKKwkweDdmZWZkNzY3LCAweGQxZmRiNmY4LCAweDg1ZTlhMWZhLCAweDVlYTMzZmQ2LCAweGM1YWZmOTE4LCAweDMwNzI4Y2Q1LAorCTB4ODJlODFmZjIsIDB4N2IxYmMxZjksIDB4MDQwNzgxNmQsIDB4YTc0Njc3ZDAsIDB4ZTkxNWFmN2YsIDB4NzAyYjQ4ZWMsCisJMHgzZmM4MzljMSwgMHhjZTk0MDdjMCwgMHgzMWRiZjRlYSwgMHg5NDk2MjM1ZiwgMHhjNzVlNzFkYSwgMHhmYWUzNGRlNywKKwkweGUxYzgzZjE2LCAweGFiNGVkNjdlLCAweDQ3M2IyYzdiLCAweGI4MGM5MjU0LCAweDM2ZGI1Mjk4LCAweGY4YTRlMmQzLAorCTB4MjE3NDY0N2MsIDB4ZTUzYTJiZGMsIDB4MTA5OWI2YjEsIDB4YzhmMjVlZmEsIDB4NWZiODQyOTgsIDB4YjZkNmNhN2UsCisJMHhlYTJlMmQ3NywgMHgyZDhlZDVkNywgMHg1N2U1ZmI4NCwgMHhmNjgwZGQ4MCwgMHgxMGRiOTYwNywgMHg4OWU1M2Q1NywKKwkweDk1NzlmMmU3LCAweDVjY2UzZmJkLCAweGNiZGQ5ZjMyLCAweDI5MmJjYWNjLCAweDNjNzQyZDhmLCAweGZjM2MzY2FiLAorCTB4OTU5ZmEwZjcsIDB4MTA0NWM1YWQsIDB4ODg4NGE5YjcsIDB4YWFjZjFkMzcsIDB4MmQ5MDhlZGMsIDB4OTNlNzhkOWIsCisJMHg2Y2RiN2JlOCwgMHhmMDc2NTU5ZSwgMHhjNWFkMmVlYiwgMHhiMGYyYWRmMSwgMHgwZTQ0ZmE4NCwgMHg0NGE4YjhiMSwKKwkweGRmYTU2YWZiLCAweDdlYTM4ZGFkLCAweGRhZWZlNTJmLCAweGU2MGI4YjI0LCAweDFmYjlmNGFmLCAweDkzNmJiNWU2LAorCTB4ZjExYWFhZGMsIDB4N2MxZjkzNWMsIDB4MzVhYzc0MDcsIDB4ZmRmYjc1YjEsIDB4Njg0ZjBkYWYsIDB4YmY3OGNjYmIsCisJMHhjMzI2NDdkZiwgMHg2N2M1YTQzYywgMHg5ZTU4ZDRjMSwgMHg3Y2YxMzhhZiwgMHhjNTg5YmU0NCwgMHhiZmU1OGMzNSwKKwkweDUxMmNlY2QyLCAweGQ1MTcwMDMzLCAweGFmMTYxNDg3LCAweDRmZTA3ZmE2LCAweDE3YTYxMTU2LCAweGViOWQ4NGQ1LAorCTB4ZjA0YzNhYWEsIDB4YTFmNTRiMWMsIDB4MDJjNzNjNDIsIDB4ZDYzZmZjZmIsIDB4NzM1ZmYwZTEsIDB4NTcxYmE1OGUsCisJMHg5MjA1NGY4YywgMHhjMDhhNTkzMCwgMHg1NWJiMzRmNSwgMHg5YmZiMTc5NywgMHg4ODdmNDA0NiwgMHg3MzgyZTcxOCwKKwkweGE5ODY2MjE4LCAweGJmZWQwNzY2LCAweDI5NGQwNTc4LCAweDRiYTcyNDNmLCAweGVhNWFmYjg0LCAweGUxMTE0ZWE2LAorCTB4MzIzNWE5YmUsIDB4NjI2MjNmZGYsIDB4ZjZiNWNjZTcsIDB4YjQ3ZjM4OWEsIDB4NjRiZGI0ZjQsIDB4ZWNmZGM4MDcsCisJMHgzNmI5YWQ1YiwgMHhmMzgxN2ViNiwgMHg2YmJmYWQ2MSwgMHg2MDExMzcwNCwgMHhlMDgwNzVkZSwgMHgxNDljODBmOSwKKwkweGIzZmMwMmQyLCAweGUwMWU3NzExLCAweDEyN2IzZGVkLCAweDM3NWIzN2U3LCAweDkwMTk3ZmE2LCAweDk3YTZjY2JhLAorCTB4NTdmNzhhNTUsIDB4ZmE4NDU5MWYsIDB4ZGQzMDRhZTAsIDB4NmZmMzQ5OTMsIDB4N2NiMTk3ZDksIDB4MjY0MmU5ODYsCisJMHhmNmRiZjA4NSwgMHhjNmJmOTY3MiwgMHhjZDA4NjE3NCwgMHhjZTVmNmJiZiwgMHg0OWMwYjBmMiwgMHhmNjIzYjYwNywKKwkweDQ4ZmY0MjhhLCAweDdkZTM4NzY4LCAweGMwMWFmYjliLCAweGYxNjI2NGI3LCAweDA1MTVlOTE3LCAweDdkYjQ1M2Q3LAorCTB4NDRlOTZiMjEsIDB4MWVmOGYwMGIsIDB4YTc4ODRkZDgsIDB4ZGFmYzE2ZDQsIDB4MDJlYWYxMDYsIDB4M2RmYjBhYjcsCisJMHg4MzdiZjMzNiwgMHhmMWFhNjliZSwgMHg3MDk5YjQ1NSwgMHhmMDI5MDNmZSwgMHg0ZmNlNDNmZiwgMHhjOWE0MmU0ZCwKKwkweDhiZWMwZDdkLCAweDZiZWU4ZDI1LCAweGI0ZWQxZDYwLCAweGY2MDZkM2RkLCAweGFkMWJlYzY2LCAweDM3N2VjMDUzLAorCTB4NWNhN2YzYmQsIDB4MGFmYzlmYmMsIDB4MzdkOGNmNTYsIDB4ZjY5MDljZTgsIDB4MDY2ZmVjZTcsIDB4OGY1YzhhNmQsCisJMHhmZmNmNmQzZSwgMHg2MmEzYmUxNCwgMHg1MDU0ZmY0MCwgMHhhYTBlZTQ5ZCwgMHg0NGRjNmI4NywgMHhiZTYwYjI1NSwKKwkweDM2MmY5ZmFjLCAweGI2OWY2NjExLCAweDgyY2U0YWQ5LCAweDEwYzBjOTVjLCAweGY2NDU1YjhlLCAweDZiYzg0ZTkyLAorCTB4MjZiNDljZjYsIDB4OWI1ZjY5ZjUsIDB4ODQ1YWJkOTIsIDB4MjMyOTM5NzEsIDB4ZDgxMTc0NzgsIDB4N2JiMWRmZmYsCisJMHgxYmI3MDQzZCwgMHgxNGJlNzNmNywgMHhlZDhjZDdiZSwgMHhmZWMxYjEwZiwgMHgxNzdmZDAxMCwgMHhmMmE3ZjM0OSwKKwkweDJmOGIxN2Y4LCAweDg4ZGM5NDkzLCAweDA3ZWYzMDc5LCAweGVjMWE3ZWZkLCAweDYzNjA5ZjM3LCAweGJmNjgwN2ZiLAorCTB4NjNhYmIwNDQsIDB4NThlOThhODgsIDB4ODE2NTY3ODgsIDB4ZGY5ODNkMjgsIDB4ZGU4ZjFhNDMsIDB4ZGM3ZmViNDcsCisJMHg5NjQ5ZTJjYSwgMHgwZjhiYTIwNiwgMHgzOGIzYzc2NiwgMHg4YjA3NGNjYiwgMHg4ZGM5YzYwZiwgMHgxMGZmODJiNywKKwkweGMxMzg4ZTc3LCAweGE1ZmNlODdmLCAweDIyZmVlMTIyLCAweGFlMjM3OWM5LCAweDExMzQxZDhmLCAweDM5NTlmN2EwLAorCTB4OTlmNTg0ZTAsIDB4NzUyNGFiYWUsIDB4YWZhZWU5MzMsIDB4YWI1YmNiOTMsIDB4YmQ0NTcxZjcsIDB4NzM3MmUyMGEsCisJMHg3ZDNmY2MxZCwgMHg3ZWUwOWYzNiwgMHg0YTUzYWVlOCwgMHg5MzRkZDYwMCwgMHg5MTM1MmMzMiwgMHhmOTJiOWZmMSwKKwkweDBiMzkwZjc3LCAweGZlMjFlMzMyLCAweDQwOGUzN2JjLCAweGM1ZjYxM2ZiLCAweGJmMGU0MDk5LCAweDA1NjM5NmRlLAorCTB4M2MwNGJjM2MsIDB4MzI0ODdjYTIsIDB4ZmE4NmVmM2IsIDB4N2E1MDJlOTIsIDB4ZGIzOWYxMzMsIDB4NjNhOTJmMjcsCisJMHgyNzdmMjgxMiwgMHhlMTU3NjBkZCwgMHhhZDY3YTliZSwgMHg3ZWUwMzc4ZCwgMHg3ODRjMTdkMCwgMHg4YTRiZWViZiwKKwkweDJmZjIxNGFiLCAweDYwOWQ1NzlkLCAweDZjY2Q5ZjdmLCAweGJjZmVjMzhjLCAweGJjZmVjMjYwLCAweGY1NzVkNzE0LAorCTB4YzNmNzRhNGEsIDB4NGE3YzU4MjMsIDB4ZWMwOTExYjIsIDB4NTAyYTY0YjIsIDB4NzNjZmE2ZWYsIDB4NDkzY2Q5ZTMsCisJMHhlM2NiZDNiMywgMHgyZTNjZmU5OSwgMHgyMDBmM2MxMCwgMHg3ZjUxZjI5OSwgMHg5ZDNhZmRiNCwgMHhlYmY3MDQ1ZCwKKwkweDJhZDU5YmY0LCAweDRhZTM4ZTAyLCAweDQ4NTFiOGI1LCAweGU0Y2Y3ODg0LCAweGRiN2U4MjEyLCAweGU3OGNiYjY0LAorCTB4MzA3ZjYwNzIsIDB4YzI5YjFiOWMsIDB4MGY5NGVmZWQsIDB4ODEzZDcxMmEsIDB4ZGMzMGUwNGEsIDB4ZTc2MmQ5N2YsCisJMHg3NWYxNjhmNywgMHg0ZTM5ZWJjNSwgMHgyMjZkMjNhZSwgMHg1ZGQ3OTFmOCwgMHgwNzg4MmUyMiwgMHg4YTQ5N2Y1ZCwKKwkweGU3NGU0N2U5LCAweDEwMjMzZWY1LCAweDk3YmU4MTI5LCAweDAwOTU1MTdmLCAweGVmNDRmOTc3LCAweDJmYWY0ZGU3LAorCTB4ZTBlMzA1M2MsIDB4MzllMThiNTQsIDB4OGY0ODg5ZjgsIDB4NGZmN2NmMWIsIDB4NGZlZTFhNzcsIDB4ZDZmM2U3OGUsCisJMHhlNDcwNjRjMSwgMHgxZDZkMzEzZSwgMHhmMjM4YmE2OCwgMHg4YjUzZjQwOSwgMHg2NWYwMTcxNCwgMHgzZWZkZGRiYiwKKwkweDViZmE3YmFjLCAweDM4Yjk3MjY1LCAweGI2M2UzM2UyLCAweGE1YzQ2ZjlmLCAweGExZmY1YzM4LCAweDJlMDNiNGY4LAorCTB4ZjNhZmFlYWUsIDB4YWZiZjY5NWIsIDB4MDdlYWNhMWUsIDB4Yjk1ZDgyMWMsIDB4YzkyOTk3ZjIsIDB4ZjFjZGU3NjAsCisJMHhhOTY4ZGVjYywgMHg5N2MwM2I4NiwgMHhjYmUxODEzMywgMHgzZjViYmEzOSwgMHhlMjY3YzU1NywgMHgwMWJlOWE3YiwKKwkweDNkOWVhMGVlLCAweGFjN2U2MDcyLCAweGQ3OGE2NTc1LCAweGVkZDc4MDU1LCAweGIzZjM4Mjc2LCAweGU2NWJhNTFmLAorCTB4ZWQ2OTllODIsIDB4Zjg2Nzg5ZWMsIDB4NmFlYmE2MzcsIDB4NzU4N2VlNTcsIDB4NmM2N2ZmMWQsIDB4ZTAzNjk4YmMsCisJMHhkZTM5MTI5MiwgMHgzODY0ZTg3ZiwgMHgzMzc1YWFmMywgMHhmM2ZkYTY2ZiwgMHhiZjVjNjVkYSwgMHg4YmU3ZTU0OSwKKwkweDFlOTJmMTIyLCAweDc3MGQxNzgxLCAweGVmMTY3NjFkLCAweDc1MzNmMGQxLCAweDNjMjJiYmY3LCAweDIxMTlmYTlmLAorCTB4OWUxMjRjY2UsIDB4OTlmODY4ODcsIDB4OWMzODY3ZTIsIDB4MTM4ZDg4NzIsIDB4ZGRjN2UxYmQsIDB4ZTYwNjljZTUsCisJMHg4NzM3MGEzMSwgMHgyODBhNmUxOCwgMHhiN2Y3ZjAzZSwgMHgxMThmYzA3YSwgMHg4YWY1NGYzNywgMHgzY2YxMmY5YiwKKwkweDUzYmRhYWZjLCAweDE4NmViYjJmLCAweDdkZjdlOWY0LCAweGI2ODlkMzFhLCAweDhmODJmYmQ4LCAweDU2ZWY3ZTcyLAorCTB4MDZjYzZlZWEsIDB4ODk5MzcxN2IsIDB4NDg5MzdmOWQsIDB4ZTcxNGFkYzYsIDB4N2JiNGUzYmIsIDB4MjBiMjZiZTUsCisJMHhmNjYyNWRiZiwgMHgxOWIzN2I2NywgMHhiYjc2Y2ZlZCwgMHhkNzcxODNjNywgMHhjYjllMGIzNCwgMHgwZGE3OTIyNiwKKwkweDA2YmJmNWY2LCAweGRmYzhkNDU4LCAweGM3MmVmOGQxLCAweDlhMWNhMzYxLCAweGVmZmMwMjc4LCAweGYzZmM5OGQ3LAorCTB4MWI4MWNhNmUsIDB4MTk3YTQ4ZWMsIDB4OTNiOGMzOTMsIDB4ZTIxMTI2Y2EsIDB4ZmRmYzhlNDIsIDB4ZTA0ZmFmODAsCisJMHhjM2MwMmQ0ZSwgMHgyNWVmMDU3MSwgMHhhMGFlM2VhYSwgMHhiZWNkZmM1ZCwgMHhiZTIxMGJiNywgMHg5ZTFmZWRhOSwKKwkweGMyZWRlN2IwLCAweDNlZjA5MTgyLCAweGRjNmJkOWMzLCAweDNjNzk2YWFlLCAweGQyNzYwMTRhLCAweGM0ZmQyZjcwLAorCTB4ZmQyNjc5ZjAsIDB4ODAyNWYyYmQsIDB4NzJlZWVjOWYsIDB4NzNlYjdkZTMsIDB4MWQxNzg0ZTAsIDB4NzM2ZDZlNzcsCisJMHg2MGIzMDc0ZCwgMHg0ZTdkNmZiYywgMHg5YjFmOWQ4OCwgMHgxZDNkZDQ3ZCwgMHg3ZGQ0NjU0YywgMHhiNzBmMWNlYiwKKwkweDcxNWRkNjkxLCAweGRmZmRmNDYyLCAweDE2M2U3Yzc0LCAweGQ3ZmJmMTBmLCAweGMxYzQwYTQzLCAweDZiOWE5NTFiLAorCTB4MjZhMjdjZDgsIDB4YTY4ZmVjMGIsIDB4Zjk0N2Y4NzcsIDB4MDhlMWY4ZDYsIDB4YzNmZjdkZGQsIDB4ODhmM2Y4ZjgsCisJMHgzOGY3NjI0YiwgMHg0ZWI4MjliNSwgMHhkZjYxMjhmOCwgMHhlYjcxZjIzNSwgMHgzOWY3YWUyYiwgMHgwZjljNWVhYiwKKwkweGI5NmM3MGY2LCAweDU3NmRkNzFiLCAweGZlN2M0NTM5LCAweDY0YjIxMjEzLCAweDEyNWNiYzgxLCAweGNhMzQ3N2FlLAorCTB4NDIxM2Q0ZWEsIDB4MmE0NDdiZjcsIDB4ZTVhNzYxMTksIDB4OGRjNWZhN2IsIDB4NzBlZmY2ODUsIDB4ZjAwZTRjNzgsCisJMHg0M2FlYTQyYiwgMHg0OTg0ZGRmMCwgMHg2ZWMxNjMzOSwgMHg0ZGFjYzdkYiwgMHhhMzRjNzE4NiwgMHhiNDU1ZDI5YiwKKwkweDg3NGRkZWQ1LCAweGM3Mjc1NzQ2LCAweDg1OGUxZGM5LCAweGY2NzhjNzI2LCAweGUwYTFkODFkLCAweDdjMGI3NmIxLAorCTB4NzFhMGUxYWYsIDB4ZmYyNjM5ZWYsIDB4ZmM4MDNjMDgsIDB4MmMyMGYxYmIsIDB4MDdjNmJjODAsIDB4ZmNiNTRmMWIsCisJMHhhMTBmMWYzZiwgMHgxZTlmMjA4MSwgMHgwODcxMDBmMSwgMHg0M2MyYjdjNywgMHhjMzU1ZjAxNiwgMHhhZWQ3ZjUwMywKKwkweGZlNjhmZTAyLCAweGY2YzJhMzVhLCAweDBkNzk2YTFkLCAweDdjZjY0NTA3LCAweDEwYTVjZjdjLCAweGY2NDQzZmRjLAorCTB4NmQzOWQ5NTksIDB4NTdhZTIyNGYsIDB4NmQ2NGVjYmMsIDB4M2VkODdlNzQsIDB4NjQ5OGJhOTgsIDB4ZWJmOTgzYjIsCisJMHg4Yzg5ZWZkYSwgMHg1N2U4MDkwOSwgMHhlMTA2YTE4ZSwgMHgwNmUzZjQwZSwgMHg3MTc0M2RhMiwgMHg0MTc2OTE3ZSwKKwkweDcxMzc3YjgwLCAweGY4MDY3OTZmLCAweGQwNjRhMTk3LCAweGUyZTYzMThiLCAweDg3N2ZlMDEwLCAweGY4MDY0YTZkLAorCTB4YzliNjM5ODcsIDB4NWRhZjgwNTksIDB4MGViZDU2MjMsIDB4MDFhZWQ2NDMsIDB4NTE2ZjJmZTUsIDB4Y2QyN2ZkYmIsCisJMHg2YWYwYjVlZSwgMHg3NDZmZjZiNSwgMHhiZDc0ZmIzMCwgMHgwMjBmOWQ5YiwgMHg4NzQ5MWRiYiwgMHgyYzQxZmY2NiwKKwkweDlhMTA4NzQwLCAweDg2Y2FmYTYzLCAweDBkYjliYWY2LCAweDQxZDAzOWVjLCAweDIwNWZiYWY5LCAweGU0MWZlMDRkLAorCTB4NTMyOWRjOWIsIDB4MTdlYmNmYzEsIDB4Y2VjZTgwOTIsIDB4ODYwYzVmYmQsIDB4ZjM3MTY1MzgsIDB4ZGU4MTQ3YWIsCisJMHhkNDNkNmQ2MiwgMHgzNTBmNWZhNSwgMHhiZjlhZDFmYSwgMHgzNDJiY2RhMywgMHhjZjliNDg3ZiwgMHhlNTA0ZGY4MiwKKwkweGQzYjlmY2Q5LCAweDI2YWRkNmNjLCAweDZlNzgyYzg3LCAweGVhZjNmMWY5LCAweGJmYWU2ZTU1LCAweDMxNDdlZDEyLAorCTB4YTQyZGM3ZWYsIDB4ZWVkMmU5MTUsIDB4ZjM5OWI5MWQsIDB4OWQxMGY4YTMsIDB4Mzk0MzY2ODcsIDB4M2U1MTM3MjEsCisJMHgxZGVmYzRkYywgMHhiZmE1YzliOSwgMHhiYzk2ZTE1NywgMHg2ODhlZjdkOCwgMHhiZWY2ZjRmNSwgMHhkNmI4N2M3MSwKKwkweDZkZjQ2ZWIwLCAweDc2M2U0M2QzLCAweGZhN2ZjOGNmLCAweGQyNzczY2Q4LCAweGMxMmZkMTEwLCAweGNlOTc5YTgwLAorCTB4MzI3MDY5ZWUsIDB4NjI1MjFjM2UsIDB4YjlmYjU3OGYsIDB4YjUzMjRlZmUsIDB4ZTViOWMzNjUsIDB4OGVmZTdiZmQsCisJMHg3YjJiZTNlMywgMHhmODFlZmVmZSwgMHg0OTRmMTM4OSwgMHg0ZWI1ZjYwNCwgMHgwMTJlMzUzYSwgMHhkMmYzZTdkNywKKwkweGFiNTkzZDcwLCAweDkzNjlmYmQ3LCAweDg4ZTdiMDhkLCAweDU3NzdlZDFmLCAweGRjN2E1MjBlLCAweGMxNjdkMDBhLAorCTB4MWU2N2I3ZjQsIDB4NzdkNDI5ZmYsIDB4MjI0NGI4ZjEsIDB4MmExNDRkY2YsIDB4YzcxMGExOWUsIDB4YmZiZmU0MmQsCisJMHhmZTYwNTA3MywgMHg5MDdlNTY5MiwgMHhmM2M1ZWVmZiwgMHgyMWIwYjcxYywgMHhjNDhmYmI0MiwgMHg5YmU3MjExYywKKwkweDlhMTkzZGY4LCAweDU5M2E2ZjVjLCAweDhlY2E0YTc0LCAweGZkZmMwZjk2LCAweDVhMGJlMjMzLCAweGYzOTlhMTVjLAorCTB4MTFmY2I0OGYsIDB4YTc3Y2I3Y2YsIDB4ZmMwOTZlZTksIDB4ODlhNGVmZjMsIDB4ZWVkMTFkYzQsIDB4ZTBjZTk1MGMsCisJMHgyZjFjZTIyMywgMHg0YTdlMGMzYiwgMHhiZDNmNzNjYiwgMHhkZTJiOGU5OSwgMHg0YWRjNDQzNywgMHhmZWRlNmRlOCwKKwkweDViZTQzNjdhLCAweDhmZjc5OGM1LCAweDlkZmJmOTE4LCAweGZlZjFiYmU2LCAweDJhMDkyMTkxLCAweGZiNWJkM2QyLAorCTB4MzhhNmFlOTMsIDB4Mjc3MjBkMTksIDB4NjVjYmNmY2MsIDB4ZTUxODc3ZjcsIDB4ZmY5ZWNhZmIsIDB4ZDkxYjZlNDgsCisJMHg5MjdiYmYzMywgMHhiZjBlNTFiZiwgMHhlYjgwNTMzZCwgMHhjM2M5YmQ0ZSwgMHhiNDdkZGI4OCwgMHhiZmRhN2U5ZiwKKwkweDlmYTdlZDEwLCAweGY4YWY2M2ZhLCAweGJkZmY5ODljLCAweDFhZjMwZDJmLCAweDlmN2JiZDVlLCAweDRlN2YwNjRlLAorCTB4NjRmNGU5YzMsIDB4YmI4OTliODYsIDB4ZWM0YzlhN2YsIDB4ZjIzMmYyZGQsIDB4ZjMwNzczZWQsIDB4ZDcxMGU2NmIsCisJMHgzZmU5OWJlYywgMHg3OGFlMGE3NywgMHhkMjdlMTdiNCwgMHg0YWIzZmIwYSwgMHgwZTczOGQzOCwgMHg0MWZmYTIxNywKKwkweGUzMTA3OWY4LCAweDFjNDczNjM4LCAweDdiZGVlNzg5LCAweGExOWJkZGZkLCAweDViOTgzMmY5LCAweGJmMDU3OGUzLAorCTB4MzZiODAyYzcsIDB4NmY0NTUzOGUsIDB4YjJlMDQ5ZDQsIDB4OThhYjRhMTUsIDB4YmE3ZWUzMWQsIDB4Y2U1MTk3NDYsCisJMHhmNjA5NDg0NywgMHg4ZDNhMjdhMywgMHhhYmQyMzAzOCwgMHhlZmRhZTdmOSwgMHg0YzdlNTBjMCwgMHhkZGY1YTI0ZiwKKwkweGZmNjNlNmFhLCAweGNlNjFjNmEyLCAweGRmYzY5ZTk3LCAweDljOTVmYTllLCAweDFjZGVlM2MwLCAweDRlNGUxN2ZmLAorCTB4ZGJkODBiN2IsIDB4ZTUxOWJlOTMsIDB4ZWNkNzJjNjYsIDB4OTAzNDIxNDcsIDB4ZmMxZmE5ODMsIDB4YTkwOTIxOTEsCisJMHg5Nzg1MGZhOCwgMHhlM2E2ZTIxNCwgMHgzZmE4MTkwYywgMHhhZjhhNGVmZiwgMHhlM2RkYmM0MCwgMHhjMjdhY2Y2NCwKKwkweDEzMjVmNTViLCAweGUzNzcyNGYxLCAweDY2M2UwZTRlLCAweDk2ZWRkYzAzLCAweDFmMTA2Y2VhLCAweGJhNWVjZWJkLAorCTB4ZGE2ZjU0MDYsIDB4ZjBiMzA1YTcsIDB4MTMzNjg3OWUsIDB4ZjRkOTkwODEsIDB4MTAyZDczZTYsIDB4MjUxZWYwNDcsCisJMHhhMGEwM2U3OCwgMHhjMDU0ZmY3OSwgMHg1NmE1ZWZlOSwgMHg1ZTc1NDc5YywgMHgwOGIxZTQyNCwgMHhiY2Q4MzMzZiwKKwkweDU4N2UwNmM2LCAweDZmOWQ4NTMwLCAweDc0NDg5ODNiLCAweDI3Zjc5MGZiLCAweDhmMDZiYzMwLCAweDFkZDliZjlmLAorCTB4MmYxMmZjYTMsIDB4MjlkYzQ5OWYsIDB4YzcyZTM4ZDksIDB4NzBhM2ZjNjMsIDB4M2ZmYjA5YmQsIDB4NDgxZDcwNGQsCisJMHg5ZTY1YmYwMSwgMHhjZTg1ZjM4MCwgMHhhNDBlMTNiZCwgMHhlZTNiN2E1MCwgMHgzMzNiNDQ0YywgMHhkZGUwZjgzZCwKKwkweGM2ODgyYTRlLCAweGNmOGIxZWZmLCAweDc4MGExNmJiLCAweGVhYTE0MGNmLCAweDU5NjE3Y2MyLCAweDk4ZGZlZTI2LAorCTB4OTllNDhmZjAsIDB4NDMzZTUwYzUsIDB4NzRjZGY5YzYsIDB4Nzg4MjUyYjEsIDB4MjEzNGQ5ZDQsIDB4N2I4YmU2MDcsCisJMHhmODVhYjY4NCwgMHgyOTdmNWMxZCwgMHhmZDM4ODc2YiwgMHg3Y2ZmMzBjOSwgMHgwYzc5MzhhNywgMHhhYTljNzZmZSwKKwkweGVmZTE4N2U1LCAweDNjYzMxMjAzLCAweDBiY2VkNTZkLCAweDdjYjRjZGZiLCAweGY3MDE2Y2Q1LCAweDY2Nzc0ZWVmLAorCTB4N2UwNDdmMTAsIDB4Nzk1M2Q3MGEsIDB4NmNiOGE1OGUsIDB4YjgwMDVmZWUsIDB4M2ZhNDU5OWUsIDB4YzRiYjM4MzcsCisJMHhlYjkxMDI0NiwgMHhlZjEzODIxNiwgMHhmN2M4M2IyMSwgMHhmYzA5Nzc2OSwgMHhlN2FlN2M1ZSwgMHhjZmJjNzAzNywKKwkweGZiYWM5Yjk5LCAweDNmMzA5NGFlLCAweDY0NTNiYmQzLCAweGIzZTQ3MWY3LCAweGY0ZDZhMWRmLCAweDg3YWU0NmViLAorCTB4ZjFmOWYwMzcsIDB4OGU4NjRmM2MsIDB4ZDI4ODYyOGUsIDB4NWIzZjQwODgsIDB4NjJlNWJlNDcsIDB4YTVjZjBlMWIsCisJMHhlNzg3MDdlMiwgMHgxYzZlZjZkMywgMHg4YWQ3OTg2MSwgMHgxNzExNmI5NSwgMHg2ZjFkNmM2OSwgMHgxMzgyZWMzNiwKKwkweGRmZWE2ZWMxLCAweDlmNGYyNWJiLCAweDk3YzdhMThmLCAweDNkOWExM2I1LCAweGM0NTdiZDk4LCAweGY5ZDljMzc1LAorCTB4ODkwMmNmOTQsIDB4YWViZmQzZjIsIDB4NzI2MDk4YmQsIDB4ZDA3ODgwMWQsIDB4NzhkYzk3YWQsIDB4YmQ5NDRlOGYsCisJMHgxYmU4YTBmOCwgMHg1MGRmOGJkOSwgMHg3YWEzY2MxZCwgMHgxZjAyNjRmZCwgMHg0MTkxMDczNywgMHg4YmE2Mzc2MCwKKwkweDM4MGE3ZWRiLCAweGE2ZTNhNGVhLCAweGI0OGUwNjM5LCAweGVmOWI0NzcxLCAweDA2M2Q1MjE3LCAweDZjMzM5MGRjLAorCTB4YTVmYTY1OWQsIDB4YTRlZmRjMzQsIDB4NzZjM2Y3Y2QsIDB4YWUyNWZhODQsIDB4NmZkMmZlMTgsIDB4Zjc3NGIyMTIsCisJMHg0YWVkODQ3YSwgMHhlNzIyNWY4NCwgMHg2NGJmN2I3ZSwgMHg5NTQ3ZjUzYSwgMHgyMDZmYTAxYywgMHg3YjQ1OGZmMSwKKwkweDQyYzk3MTg2LCAweGYxMDUxOGQ4LCAweDE4NzNiNGMxLCAweDc0NGFmMWU3LCAweGYzZTM4YWZlLCAweGIwMmY4OGQzLAorCTB4Yjc1MjQyN2YsIDB4MTVmZDE4N2UsIDB4ZDYzY2NlMmQsIDB4N2E1M2Y5YTksIDB4OGRlMzg0OWMsIDB4YTU3ZGQ4YjMsCisJMHg4MTBhNGUxYSwgMHhiM2ZmYTA5ZiwgMHhmNGViOGM0NCwgMHhmZGFkMWI4NiwgMHhhMjEyZjBkZSwgMHg1NjRjMDhmNiwKKwkweGZhZTE3ODhmLCAweGYyZjE3NWY3LCAweDE5N2M2ZDE3LCAweDA1ZjY4NjRhLCAweDM0M2UxYTI3LCAweDliYzcxOGJjLAorCTB4ODNjNDM0ZmYsIDB4YmE2ZjFhN2EsIDB4MGU2ZjE5N2EsIDB4YWVkMTkwOGMsIDB4N2NkN2U2ZjcsIDB4ZWFmM2U0ZWEsCisJMHgzN2E2MjcwNCwgMHg3ZjFiMzU1YywgMHhkODJjNjg5NywgMHhmOTM3ZjAxMSwgMHg2YjhlMTViOCwgMHgxYzljMzNkNSwKKwkweGMxMjQ1YjY4LCAweGVjMTc5MWZhLCAweDFjYjc2NjQ3LCAweGZmZjA3OGI0LCAweDgxYzRjNjAwLCAweDAwODAwMGQ1LAorCTB4MDAwMDAwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2NiZGZmMDAsIDB4ZDU1NDdjMGIsIDB4NjdiN2VmYjksCisJMHgzMzI0NzllZiwgMHg0OTkyNjY0OSwgMHgxZDg0M2MzMiwgMHgwOTIxMjEwOCwgMHgxMWJjMjEwZSwgMHgxMTA4NDkzNywKKwkweDg4YTgwY2EyLCAweDFmMDFkNjhmLCAweDRkMDkyMDYwLCAweDZmNTNkNWFkLCAweDUyODEyMTMzLCAweGJkNTgzZDZjLAorCTB4ZjRmNDdiZDYsIDB4NDFlZDU4MzcsIDB4MDEwODc1MGQsIDB4MjY3MDI3ODMsIDB4ZDBmMDk4YTAsIDB4N2FjMGY4MjAsCisJMHg0NTI5NjhkYSwgMHg1YTE4OTIxYiwgMHhmNWNmNmEwZiwgMHhmNmI3ZGY3YywgMHg4MzI2NjY0ZSwgMHg3M2RlZjdhNSwKKwkweGQ2MmU5Zjg3LCAweGY1YWY2YjVlLCAweDVmZjllZmFkLCAweDRhOWI1YWRmLCAweDUwMGE5ZmMwLCAweDk4MjAxNWIzLAorCTB4ZTFmOTUwMDYsIDB4MDY0ODRhODYsIDB4MDEyMDNiZTgsIDB4OTZkNDAzMTQsIDB4ZmUxYjQxYzksIDB4YjFmZGI0YjUsCisJMHgwY2RkNDVjNywgMHg1MWRmODk1NiwgMHhmNWMwMjY2MSwgMHg5NTBiN2UyMCwgMHgwNmU2YzUwZSwgMHhiYzk1ZTY1OCwKKwkweGQ2ODAxNjcyLCAweGUxYmZkZTJlLCAweDYyYTgyNTkyLCAweGY5YWY3YWZkLCAweGU4OWIxZWUzLCAweDVmZmYzNWZiLAorCTB4YjgwMGM4MDMsIDB4MTk3ZjdmNTEsIDB4MmZmYjBmZmQsIDB4MTg2MGE0ZDMsIDB4M2IzNjVkNWYsIDB4OTc4ZGZmYmEsCisJMHhhNjkxM2ZjYSwgMHg2MmQ3MmMwMiwgMHgzZTRmYzM5ZSwgMHgyMmYyYTc5MywgMHhhYzI0YmVjYywgMHg4ZmI3NDQ1NywKKwkweGNmYjkyNjczLCAweGUzMmZmMWQ5LCAweDMyZDdmYzYxLCAweDY1ZjNjNWMwLCAweGFmZjc1MTZmLCAweGM4ZWQ3N2U5LAorCTB4NTIzZDQ4ZjIsIDB4YWNlODAxNjYsIDB4ZGIxOTcxYjcsIDB4N2YwMTZlNWUsIDB4NGQyNTgxYzgsIDB4MDA2NWM0NTAsCisJMHg5ZDBhMDE1MiwgMHg1ODE5OThiOCwgMHgwZDAxNjRiZiwgMHgxMzYzMDhmOSwgMHgzYWI5ZjdlMCwgMHhkZjg2MTMxZCwKKwkweDA3ZTM4ODNmLCAweDhlMzBkYzcwLCAweDM4MDFjODFmLCAweGZhZTRlZjU0LCAweGFlMWVmNTZiLCAweDJmODI5MzVmLAorCTB4ODc3ZmUzYTQsIDB4YjhhOGIwYmYsIDB4ZGZlZGM1OWUsIDB4ZGYzOGZjNTEsIDB4OGYwYTRiZTIsIDB4OTNkNjliM2IsCisJMHg3MTgzMGI0ZiwgMHhmNzNmOWViNCwgMHgwZGUzZmQxNiwgMHhiNmJmZGMzMCwgMHhiZjhiMzNmZCwgMHhmOWViZjJmMCwKKwkweGE3ZTdmMzViLCAweGNkM2YzY2E4LCAweGNmMGMxNWFiLCAweDE4MDE0NGJiLCAweDlhNWNlYjgzLCAweDYzNWZjZDFiLAorCTB4YzZmOTU4OWUsIDB4ZmViOTZmY2EsIDB4NTZmY2FjN2UsIDB4OTBjN2FjYzQsIDB4MzJhMmY0MGYsIDB4ZmZjMzhhOGQsCisJMHhhNmQwMjY0YiwgMHg0MzdlNWU1ZiwgMHhiM2Y4YjFmMiwgMHhkYjIzMDViZCwgMHg3MmM5N2UwMSwgMHg5NzRmMWUxYSwKKwkweGJlMmI3NDE3LCAweDE5OTc0MTQyLCAweGI3NTJiYWY1LCAweDQwZWZkNDBiLCAweGIyYjljYTBhLCAweDQ4ODljMjEzLAorCTB4MmJlN2Y1ZDgsIDB4ZjRhODUxM2UsIDB4OTQ3MWYwNGEsIDB4NmM3YzAzM2UsIDB4MWUxZTViYzgsIDB4ZTQyNWQxN2YsCisJMHhiY2YwZGE2YiwgMHg3NzY0MTQ4YiwgMHgwYjFmM2QxMSwgMHhhOGViMzg4MSwgMHhlYTE0NzFhMSwgMHg2YzM5NjAxZiwKKwkweDE1NWE2MWQ5LCAweDYzNWM3NWMyLCAweDU0N2QzYjgxLCAweGUwMzI4YTI2LCAweDkzN2RiODk0LCAweGY2ZTNjNGQzLAorCTB4ODI2NmM1ZmYsIDB4M2U1ZTAxYWIsIDB4NDgwMjU5OTgsIDB4M2NlYWQ3OWYsIDB4NDIwMTEzMDYsIDB4YmZmN2UwNjYsCisJMHhkZmI5NTI0ZSwgMHgyNDA4MjRlNiwgMHg3NGEwZmNlMCwgMHg5NDVlYzhkYiwgMHhiNDVjODAxMiwgMHgyNWI0NjUzYiwKKwkweDM2NDM4OGQ4LCAweGQ5MWY2MTJiLCAweDgxNTdiZjYxLCAweDJmZGJiNDA2LCAweDA1MGVmNzhkLCAweGM5MTQwNzZlLAorCTB4NGM3MzhmZTYsIDB4N2VmNDU5OGQsIDB4ZjYxZTdiYjgsIDB4YThhNDU1OWIsIDB4Y2I4YmIwZGIsIDB4ZGE4NzdlYWEsCisJMHg5ZDU4MGVmYiwgMHhmZWZmNWVmNCwgMHg2OTk4NzdlZiwgMHgxNzgwYmY5YywgMHgwZWQ3ODQyOSwgMHhlN2RhODE1OCwKKwkweGYyNDFjYzNiLCAweGUzZTQ4YjFmLCAweGZkZWIwOWIyLCAweGVjNTYwMDAzLCAweGI4NTU3ZjNmLCAweGQ3NmU1MDE0LAorCTB4MTNhMzc3NDAsIDB4YzcyNGI5Y2IsIDB4OGQ3YmYyMzgsIDB4ZmVjZTliZDYsIDB4ZTUwYTMxYzMsIDB4ZDM5NzQwYjQsCisJMHg5NTZmZGQwMiwgMHg4ZmQ5OTAxZSwgMHg0MWM5MjY5NCwgMHg1M2Y2MWFjOCwgMHg1YTMyZWFkNywgMHgzYTI1NmM4MCwKKwkweDdhZTFiNDE2LCAweDRiZGFmZGIxLCAweGI0YmY1YzRhLCAweGUxNzcxZjQ4LCAweDkzMjE0MTlmLCAweDdhZDEwODVjLAorCTB4Zjg0ZGE4YmIsIDB4MTRkMDEyYTMsIDB4NmQ0YjI5YzAsIDB4OTdlNGVkMzEsIDB4Y2U0NTllOTAsIDB4Yzk3M2U3ZTgsCisJMHhlZjVlYTI3NywgMHhmODRiZjE4ZSwgMHhmN2JjZDEzMywgMHg4YmJjYzUzYiwgMHhmNzI2YmZlNCwgMHhiNjVmZmFlMCwKKwkweDQzY2RlZjY4LCAweDlhNGUwNzdhLCAweDBlN2M1OWUxLCAweDY3MzJiMWU3LCAweGQwZGE1ZjI0LCAweDk3Mzk4M2FlLAorCTB4MDdmZDhiYjcsIDB4ZTkxNTM1MTMsIDB4YzdmNDk5NzksIDB4OWFkMWY1NDEsIDB4ZmRmMmY1M2EsIDB4OTQwY2Y2YTcsCisJMHhiOTc4Nzc2MCwgMHgxMzAyODU3OSwgMHg3YjRmMWQ1OCwgMHgzZGY5ODYzMiwgMHhmZjNhYWY4MiwgMHgyMmQ5Zjk2MywKKwkweGY5MWQ5MzQxLCAweDViZGRiMGJjLCAweDA0NjVhZTQ2LCAweDhmOTEzYjFmLCAweDgwYzk1ZWY4LCAweDI5NWNmM2M2LAorCTB4NzhmYjBkMWYsIDB4NDZhMjVjZjksIDB4YjlmMmZlZmEsIDB4ZmZjZDFhZDEsIDB4ZmE2YmU5MmEsIDB4M2ZlZmZlYjAsCisJMHhmZTQ4OTgzYiwgMHgyYWE4ZjkxMywgMHgyZTAzMTdhOCwgMHhkNjU5Zjc5YiwgMHhhMWY3YTE1ZiwgMHg2ZGMxMzk1MSwKKwkweGY1ZDE2ZjU4LCAweDgxYzRlNWZjLCAweGVmYzRmOWEzLCAweDY3ZGU0ZGViLCAweGUzNjUxYTY5LCAweGU0ODUxNWM0LAorCTB4OWM5NmI3MzcsIDB4MGQyNDc3YzUsIDB4N2VkMTA3YTQsIDB4NzcwOWQ1MjQsIDB4ZmI0MDE5NjAsIDB4YTQwYjdkMjEsCisJMHgxOTkzZWIwMiwgMHgzNmYzNDA0MiwgMHg5NTM0ZjA2YSwgMHgyOWFiZTYwYiwgMHgxYzQxZWZjNCwgMHhlMzQxZGJiMywKKwkweGU3YTQyOWE5LCAweDMzOGJkN2YwLCAweGY5MjM4NTdkLCAweDBhOGY1MmRlLCAweGQ2YjRmMzg1LCAweDFiMjUzNGRiLAorCTB4OTNiZDVmNjAsIDB4MWVmNTZkZWIsIDB4NTdhZDVmMmUsIDB4MmM3NGRjYjksIDB4OGUyMGMxZjksIDB4MzQ1OWFiNTMsCisJMHg3ZGY4NmQyNSwgMHg4ZmIwYWE1NywgMHg4ODY3ZTgwNSwgMHgwNTIwMDVhZSwgMHgwYjczYTgwMywgMHg1ZWY1ZDYxZSwKKwkweDI0OWI4MjkxLCAweDI3YWUxMzkyLCAweDk3Mjg5ZjgyLCAweDA4ZGM5ZWMxLCAweDRkMjkzNmZlLCAweDM1YjI2NjkzLAorCTB4ZjI4YmJjYjAsIDB4MDYzZWZjNGQsIDB4NTlmM2UwZmYsIDB4ZGNhM2ZiMjMsIDB4NGJhYWVhYTMsIDB4YmFlNjdlNjIsCisJMHg5NjE3MjRiNCwgMHg1MmY4NzQzZiwgMHg2ZTkxNmNhOCwgMHhiODAxN2MzOSwgMHg1YmY1MTJlZSwgMHhmZTM4MGJlNSwKKwkweDc4NDJmMGY0LCAweDc0YzNlMzEwLCAweDE1ZjEwYzE0LCAweGZkMTNiNzdmLCAweDQwMmMzYTMzLCAweGNhODBjMWYyLAorCTB4ZDNhNDU5NzYsIDB4NDkyZTdkYTMsIDB4MzIzZTcwZTcsIDB4ZTBjN2FmOWQsIDB4MzBjYWQ2N2IsIDB4ZTgzZWQxZTksCisJMHgxN2JlMjM0OSwgMHhiNDc2N2NkYiwgMHhjODQzYTQyOCwgMHhmNjZlOTM1NSwgMHg5Y2RlMzg0OCwgMHgyNjU3OGI3NCwKKwkweGE2ZmEyNmQyLCAweDc1ZmU0NDZmLCAweGQ4ODRlM2E0LCAweDYzMjNhM2JmLCAweGE2ZjY4YWFjLCAweDRmYmM2ZjI5LAorCTB4MWNkOWFkNzYsIDB4Y2MyYjgxNjEsIDB4NzExMTNkYmQsIDB4NzE5ZTEzM2MsIDB4OWYyMmJjNTIsIDB4YmRmMjM1ZjYsCisJMHgwMWM5NzdmMywgMHg3Mzg4NmJmNiwgMHg5ZTc1OGZjOCwgMHg3MTg2ZjY0YSwgMHhkOTJlNmI5ZSwgMHg3ZmQyNTZiYywKKwkweGY1ZWQxMTdhLCAweDU0ZjI2MjYwLCAweDVkZDBjZmYyLCAweGQ2YjhlYmM2LCAweDZmOTFkNjI2LCAweGQ4YmIxN2Y2LAorCTB4OWYwZjg1OWYsIDB4NmRmZWY3YzAsIDB4ZTlmYzgwMTAsIDB4Y2ExZmRkMzUsIDB4OWE5NGY0ODAsIDB4OTA3YjMyZjIsCisJMHhlNGQyYzNjZSwgMHhmYzlmMmExNCwgMHg5NzAxNzI1ZCwgMHg4OTdiOTJhNywgMHg3NjRkMDczZiwgMHhhNzdkZTY5NSwKKwkweDQ2Y2UyZDVlLCAweDcyZGVkMTdkLCAweGQ2MWQwMDk4LCAweDBhMWNiNzgyLCAweGExZWEyNzk1LCAweGU1ZjUxYjM4LAorCTB4OTcxYjdhYWQsIDB4NWM5ZGViMjcsIDB4NzBmN2FhOWUsIDB4NDlkYjE4NzksIDB4NzZjNzVlOWYsIDB4YjAzN2I3ZDIsCisJMHhkODVkZWE5ZCwgMHgxYzMxZTU0ZSwgMHhkYmEyY2E5NywgMHg5NmJjNzg5MywgMHhiNDJjOTJkYiwgMHhkMGM5ODM4ZSwKKwkweGZhNGZjYzZjLCAweGI3MGM0ZTE0LCAweDNmZTAxNzgyLCAweGFiNmFmYjFlLCAweDk3OGMyYWVkLCAweDM0YTE3ZjU2LAorCTB4YjNmNGY5MGQsIDB4YWMxNDJhYWYsIDB4ZWUzYzViMWYsIDB4YmI2MGJmYTEsIDB4MWZhNjY3ZjksIDB4OWJkZTkwZGIsCisJMHg4ZjVhMzk0ZSwgMHhhYTllZGQ2MywgMHhmYTQxZDhmYywgMHg5ZDExMmM3OSwgMHhiOWI1OTkyMywgMHhhNjNhNDM0YiwKKwkweGNkMWM2ZjkzLCAweDM2NjBkNzZjLCAweDdhZjRkM2Q2LCAweGQ5NWQ3Y2MwLCAweGE1OTU4MDdjLCAweDQyZTBmOTNkLAorCTB4YWY1OTcxMjUsIDB4NTc3ZjIxYjMsIDB4YTNkZmZkZGEsIDB4YWJiMDI1YmEsIDB4YWEyYWVjYTIsIDB4N2IyNDg4NjMsCisJMHhiNjQxY2M5NywgMHg3YjkyYjFmNywgMHg5NWJiYzYwNSwgMHgxMjdmZmYwZSwgMHhkMTdiMGRiZiwgMHg5MWE0M2ZhNCwKKwkweDQ5YTk5ODdmLCAweGJjYjM3MmUwLCAweGUxYTQ5MzgzLCAweDk1YmY0NmU3LCAweDQ5ZmY0NThlLCAweDI1ZGViYWZhLAorCTB4OThjZDdkYjMsIDB4Yzc0MTY5MmYsIDB4ZmEzNWZiNDgsIDB4OTZhYjM4Y2QsIDB4OWU2NmZjOTEsIDB4NzJhMjZmMmYsCisJMHhlYjhiODU1OSwgMHg5YWIzNTViZSwgMHgxY2NiZmVjOCwgMHg5NGJmN2I5NywgMHg2NWQwN2ZkZiwgMHg1MTJkYmQ2NiwKKwkweDM4OWM1ZmIwLCAweDhlOWJmNDY4LCAweDdiYjg0NjRhLCAweGY4MzEyYmEwLCAweDY5ZjVlOTJjLCAweGQ2MTI2MzdmLAorCTB4OGFiMjc5MTcsIDB4MDMzN2RkNjQsIDB4YjYzYjVkZDcsIDB4ZWJlNTdiNTEsIDB4ZGU1NzZjYWQsIDB4ZjJlMTJmMjQsCisJMHg2OTkwYTg5OSwgMHgyMWQwYmVkOCwgMHgyYTY0YzM3OSwgMHg0YTZhM2ZmMywgMHhlNGE3NzZhMywgMHhkNDJkYjYyNSwKKwkweGE2Mjg5ZGE2LCAweGJiZDk2Y2Y2LCAweGQ1YTdlYTkwLCAweGE3NTEwYTMyLCAweDJlZjM4NTk0LCAweGI5YzViZjYwLAorCTB4YmUxYjVlMjksIDB4ZDBmYzJhNzcsIDB4ODVkZmQyNDUsIDB4MDRkZTQ5YjksIDB4ZjA0YWYzZjIsIDB4N2JhYTFhZTksCisJMHg5NTA2ZGVhZCwgMHg2OTU4ZjFkNiwgMHg0YWEzOGQzMiwgMHg1YmQ2MTM1ZSwgMHgxZmZkMjg2ZSwgMHgyZjg5NDc0NCwKKwkweGRhODkyNDA1LCAweGQ3ZTEwYTVkLCAweGMzZjc3ZjI3LCAweDZiZjYyNzMyLCAweGQ5MDEyNzE5LCAweGRlNzBhOWNmLAorCTB4ODVmZTg4OWYsIDB4MDI2YTg5OWQsIDB4YjM4YjY5ZjksIDB4YjE2YmRlOGMsIDB4NWM0ZGNlNDgsIDB4ZmY1Mjk1ZjcsCisJMHg3ZDU5OGU0MCwgMHg3ZTNkYzcxZSwgMHg0MWUzOWQ5YiwgMHg4YzA1NWJlNSwgMHgzNmRmOGU4MywgMHhlNTQyZTM4NiwKKwkweGE4NGJmMzViLCAweDc4MTI2ZTNjLCAweGNhYWRmMmJkLCAweDQxMzc2ZTBhLCAweGU1NGE5Yzk4LCAweGY3ZTJkZmVkLAorCTB4YjBmZTk3YjYsIDB4MWZlMzhkY2MsIDB4ZGY2MmVmMWIsIDB4NTYyYTcyODIsIDB4ZjYyNGZjMjIsIDB4YmZkZTg5MDcsCisJMHg3N2ZiOWFiZCwgMHg5ZDBmOTk0OCwgMHgwYjE3ZmVjNSwgMHgzOGFjOGE1MiwgMHgyMTNiYjk3ZiwgMHg1OGM1N2ZhYSwKKwkweDQ5N2Q1NDU3LCAweDI1NjJhOGY2LCAweDE2NTY0ZmMyLCAweDZmZDU0NTY0LCAweGIzOGE5NjI4LCAweGU2ZmJmYTIzLAorCTB4NTdkNTQ0MjcsIDB4YjM4YWI5OTQsIDB4NTRkZmZhMjMsIDB4YmVhYTJhMzksIDB4YThhY2E2ZjIsIDB4MWNkMzQyZmEsCisJMHg2MWVhM2ZlMSwgMHhmM2IwOTk3ZSwgMHgyMGQ5NjVmOSwgMHhhOWZjODk4YywgMHgwMzdkZjQ1MywgMHgzYjI2ZWZkYiwKKwkweGE5ZjgxMmVmLCAweDA5Zjg4NWM4LCAweDU1ZDY1MmU1LCAweGQ4Yjk3MWNjLCAweDAwYWZmYmFlLCAweDkyNjY3Yjc0LAorCTB4MmViZjE3ZmYsIDB4ODNkZThmMWMsIDB4NDk5OWZlMjAsIDB4MTZmYzQ4NzgsIDB4MjAxZTIzNzYsIDB4ZGM2MGE0N2MsCisJMHhjY2E3YTA4ZSwgMHgyYmM3MWQxMSwgMHhmZjI3Y2Q0MCwgMHg4NGI5ZDE1YiwgMHg2N2I5NTRmMSwgMHgzMTlhMTk3OSwKKwkweGJkZmEzMWYyLCAweDgxNjFmOTBhLCAweDJlZTg2MjQzLCAweGE1YzczMmVhLCAweGY0NmM2MmI3LCAweGFiYWUwNmZiLAorCTB4MzE2YmU5ZDAsIDB4MDk1MjliZjksIDB4NmViNDA1OGIsIDB4N2FjNjM1YzIsIDB4YjcyZTNhMGMsIDB4OGVmOTBhOWUsCisJMHhkZmZmMTQzMiwgMHhmZDJjNTc1YywgMHg3Zjc5MWIwMCwgMHhhMGQ3NGIxMSwgMHg4ODgxYzc0YiwgMHg3NjA3MThhNywKKwkweGM0M2UzMmE2LCAweDNlMWUzYjlmLCAweDI1NGY3MDMwLCAweGE0NTczN2ZhLCAweGVlNDg3MzdmLCAweGY3OTc4NWU1LAorCTB4OTdiOGM2NmYsIDB4YjhjNjdiYzMsIDB4MmNkMGZiYzYsIDB4ZmJjNmZjZjMsIDB4Mjk1NWNmNDMsIDB4ZDg5ZGYzZmUsCisJMHg3M2NlMjkzZiwgMHhmOWZmMTRiNywgMHgxN2ZkZDE3MywgMHgwM2EzNmEyOCwgMHg0ODI4ZjhlZCwgMHhmYmYxMDBkZSwKKwkweDI0MTBhYWI4LCAweDM1YWQzZDJiLCAweDQzZThiOTUxLCAweDc0Nzg0MmJmLCAweDEzNDBkOWYxLCAweDgzN2FmMzk1LAorCTB4ZmViOGFkYzcsIDB4OTU2NTcyZWIsIDB4MWUwNjBkZjIsIDB4OGNkNzVkOGEsIDB4M2E0ZmIxNTQsIDB4YWJiNTQ5N2EsCisJMHg1MDEyZGVkOCwgMHg2OGJmYjRlZCwgMHhkM2I1NTg3OSwgMHg4MzQ1YWEzZSwgMHg2YTJmZGEwYSwgMHg2OTFiNGQxMywKKwkweDYzZTVhMWJmLCAweDU0OWNmNTg5LCAweDUyZjNlN2UxLCAweGNhMzE4ZTA1LCAweDVlN2Y2NTY3LCAweGI2ZDU5NjJhLAorCTB4OGIwOTQ3OWUsIDB4NjAzMTdjZDQsIDB4OTQ3MDMwMjEsIDB4NDhjMTVlNzAsIDB4MDk1NDc3OWMsIDB4YTNiZTY4M2EsCisJMHhiZTFkMDcwZiwgMHhhNTdlM2YwOCwgMHgyOTE0NmYzOCwgMHhhN2U5M2E1YiwgMHg5MWZhNDVhNCwgMHgxNjgyNWI1MiwKKwkweDM5MTYzN2U5LCAweGFmZjU1MTVkLCAweGM3ZDhhYTljLCAweGJkNDU0NjdiLCAweDE1OWE5ZDc3LCAweDZiZjEwZmQ1LAorCTB4NDZhMGUxMmUsIDB4ZTQyYWU0MGIsIDB4NWU4OTRkNDcsIDB4N2NiMTc3YzIsIDB4ZmQ3ZDE3ZmMsIDB4ZTA5Mzg3NWUsCisJMHhhYWRkOTgxMywgMHg5NzEzOGZlYywgMHg3ZjgyYTViYywgMHhhNDU3Y2ZiMSwgMHg2ZmVhN2Q4YSwgMHg2ZTU4M2Q2OCwKKwkweDM1ZjQxNTRmLCAweGUyMDEzZWM5LCAweDNlOTMzNzEwLCAweDRmNzFkNmM0LCAweGMzYzY4YWJhLCAweDc3YTQzZDkxLAorCTB4MjJlOWJiNWUsIDB4NGVmODZmNDIsIDB4MjlkN2Q1ZWEsIDB4ZTlkZWNmYTgsIDB4YzQ0ZWVmYTYsIDB4OGJhOTIzZmEsCisJMHg2OTllN2Q0NCwgMHhmZmFjMDRjZiwgMHhkNDVjYjUzNCwgMHgzNzRkMzZhZiwgMHgwNTdlMDE3YiwgMHhjMzJiYWY4YiwKKwkweGU3ZGJiYTdhLCAweGZiNzljNTRmLCAweDEyYWQ4ZWNkLCAweDI0YzUxOWUyLCAweDc4N2I5MTQxLCAweDA1ODhmYmZmLAorCTB4MTYwYTI5ZTMsIDB4MjE3MzRjOTUsIDB4ZDhhYjc2YWQsIDB4YTAyNGQ3MmYsIDB4MjVmZWEzZmYsIDB4YWFmYzRhOWEsCisJMHhkY2U0MzA0OSwgMHgxZDcxNDE5MywgMHg5MTM0Y2VlZSwgMHg2ZmY2MzBiZiwgMHg4N2JlMGI3NiwgMHhmY2Q4ZTdlZiwKKwkweGMyNWY0MmI1LCAweGE1ZmEyYWM5LCAweGNhMmZmN2ZiLCAweDllZDhiZDI0LCAweGU3ZjVlNGVhLCAweDIxZTc5OWVmLAorCTB4N2Q3NDg1N2YsIDB4N2ZmZGZhOTcsIDB4M2M1MzZiYTQsIDB4NjJjYzlhYmEsIDB4ZmM5NmRlOWUsIDB4ZjliYjhhNTIsCisJMHhkMjFjNTFlMywgMHhiYjcwYmNiMCwgMHg0MjEzY2ZjZiwgMHhjYjhjMmJhOCwgMHhmNTg0OGYzNSwgMHg0YmM1OTc0NiwKKwkweDkwZmI3ZDM4LCAweDZjYWNhZjdjLCAweGIyMTNmM2Q0LCAweDljOGRlODVkLCAweDFiYjhkYTYyLCAweGZhZWI5ZmNiLAorCTB4M2JjZDE0ZjIsIDB4MTgxOWU2ODMsIDB4MDFmNTFjYjcsIDB4NTZlMzAzOWMsIDB4ZTkzYThhMTQsIDB4MGQxNzJjODMsCisJMHhmODFlZGUxMCwgMHhmNzk3OTI1NiwgMHg3ZTA3NjNjNywgMHhiZmFjMDNmYiwgMHg5N2JlNDc3NywgMHg4OTA3ZjQ3MCwKKwkweDgyYWIzZjgyLCAweGIwN2IxYTEzLCAweGJjMWFjZDNlLCAweDNlNzQ4YzJhLCAweDk2N2ZlNjk0LCAweDZiMzZlMGY0LAorCTB4OWJlYjEyNzAsIDB4OGQxMjYzNjMsIDB4ZmJjMDY5MmYsIDB4ODc3ZjYzMTAsIDB4MzJkNTM4ZmIsIDB4MWZlZTI0NzEsCisJMHg4OGQ4MmYzOSwgMHgxMWNjYjdjZiwgMHg0NWU2MzY3YywgMHhlZTI4ZGE5ZSwgMHgzYzViMzdiYywgMHhmOWMwZTgzNywKKwkweDA2ZmY4ODViLCAweGMwNzQ0MzNkLCAweDAzYzcyNzU4LCAweDQ1YTQ3OTEwLCAweDYxZTQ0M2IyLCAweGJjZTI2MGZmLAorCTB4MWYxOTJkNDksIDB4MzU5Y2Y3ZDYsIDB4Y2ZhZWJlZjEsIDB4ZTY4MDU3ZDgsIDB4OWI5MzNkNTgsIDB4MjczOTllNzgsCisJMHg2YzRjYzkzNiwgMHhkNGNjZmYwMCwgMHhiNmFmNDg1OSwgMHhmYTdkZTdhZCwgMHg3ZGU4ZWU4YywgMHg3ZjRlYWNmYSwKKwkweDliZGYwM2E5LCAweDdjZmM3ZWY1LCAweGRjN2QzY2M4LCAweDI5OTQxMGQ5LCAweDg5ZTljZjVlLCAweGRmNGYzN2VlLAorCTB4MWYzYmNmYTcsIDB4NTRjZGZjZmQsIDB4ODY4ZGJlM2QsIDB4OGU3OTkxZDEsIDB4MzNmZjdkM2EsIDB4MGE0MjdjNzgsCisJMHgzYWY5MjllOSwgMHg1MTZlZjkxOSwgMHgzYTlkOTg2NSwgMHhlYjVhMzdlYywgMHhmOTBlNWZiMSwgMHg4NTk3MWI0NywKKwkweDExNzc5ZGE3LCAweGE4ZjU2ZGZkLCAweDkzZjIxNmQwLCAweDdiMGQyZTFlLCAweDc3MGQzYzJhLCAweDc5ODhkNGMyLAorCTB4ZjgzN2JkNzQsIDB4ZTBiZWY4MzgsIDB4ZGM5ZWI0ZTMsIDB4YmFjN2NmOWYsIDB4NDEwY2QzYjksIDB4NzM5ZDc4NzUsCisJMHg4MjBkM2U3NSwgMHhkM2EwZjNlMCwgMHhkOTllN2NjMiwgMHg2MWU5Y2JmNSwgMHg5OGY1NjQ3YywgMHg1ZjU4OGQ0MCwKKwkweDZhMDg5YTgyLCAweGU3YjUzZjg0LCAweDY1ZDU0NmE2LCAweGNlM2EzZTQzLCAweDlmOGZhZTk4LCAweDM1MWQxZGU0LAorCTB4MGMzNzgxOGUsIDB4NWE5YWJkZjksIDB4NjQzODQ5ZGUsIDB4ZTMxZDYzYmEsIDB4MTNkOTk0OGUsIDB4M2UyZGM2YTIsCisJMHg2NDI3MmIxZSwgMHgyNDc2ZTExYywgMHhkNzA4OWZmMiwgMHg3MGEyNTY5ZiwgMHg4MDc3MmNjNiwgMHgzZmIzMDAzOCwKKwkweGM5NzA2MjU0LCAweDY4ZWM5OTc2LCAweGU3ZThkOWVlLCAweGM4Y2JiNGU2LCAweDg0ZmM3MmVkLCAweGVmOWYzZmE5LAorCTB4ZTlmOWZiZmUsIDB4OTlmOWEyZDIsIDB4Y2ZjZDExNTYsIDB4M2YzNDVmNzQsIDB4ZjM0NTU3MzMsIDB4OWEzZjk0NmQsCisJMHg0ZGQ2NjMyZiwgMHg2YWJmNmE4OSwgMHg3ZDU0NTE2MywgMHhhMzczODNmYywgMHgwMDYxNjdmYSwgMHhkYzRmYWM4YywKKwkweGZmYWEyNGJhLCAweGEyMmJlZGE0LCAweGJhOWY5M2VhLCAweDVlN2ZhYTJkLCAweDdiNTQ0ZDcwLCAweDJiYWFjZWZlLAorCTB4YTg2MTdmOTIsIDB4YjExZmFhMmUsIDB4ZjIwZGY0ZDcsIDB4MWZlZGJhYmYsIDB4ZWZmOWU2YTIsIDB4MzRhMmZmOTYsCisJMHhjYmFmMmYzZCwgMHg0MzhlOTk3ZiwgMHhjN2ZhMWE1YywgMHg0NTM4ZTFhMiwgMHg5M2YyMTVlOSwgMHhiZTM3ZjZhZSwKKwkweGEwNGJmY2EwLCAweDUzYmNlNTQ0LCAweDFiNzgwOTYwLCAweGQ5MDllZGIxLCAweDFiNWY5MTI3LCAweGExMzZhYzgzLAorCTB4YzEzMjY4ZGYsIDB4OGZmN2YyM2EsIDB4ODc5YzRjOWEsIDB4MmFiY2VjMzQsIDB4YWE4YmUwNGQsIDB4OWZmN2UxMzQsCisJMHhmOGE2OWI0NiwgMHhlY2NmZjA2NiwgMHg3ODQ0OWVkZSwgMHhhMDk5MzY0MywgMHhlMjlhZTI5YiwgMHhjNjcxYmY2NSwKKwkweDcxNmJlMTAxLCAweDcwMzQ3OTNlLCAweDc5MzRhYjVlLCAweGE4OTliMmY2LCAweDMyOWJmMjg3LCAweGQxZTUxZmVmLAorCTB4N2Q3MTUwN2UsIDB4M2YxZmM3OGQsIDB4OGI5ZmY5NDEsIDB4ZmE0YTliMGUsIDB4MDNmYWE3MmEsIDB4N2Q3MGI3MTQsCisJMHgyNDYxZTdhMSwgMHgzZWFmNzk1ZSwgMHg0OWY2ODkzYywgMHg2Nzk1N2Q0NiwgMHhiZmVhNjZlMywgMHg5Mzg1OGVlYSwKKwkweGY0M2FmZjY4LCAweDQ5OGU4ZWZjLCAweDg4NzIxMTY1LCAweDM4OGFkZjVjLCAweDY5N2JlOGY4LCAweGM0NjczZjIyLAorCTB4NmFhY2RiODcsIDB4NmJjYTBmNjMsIDB4M2ZmYzJjOWEsIDB4YTVlZjg1YzYsIDB4OTAzZmZhZTEsIDB4OWMwYjM2MWUsCisJMHhiYWQzMzAxNSwgMHhkZTcyNGUzMSwgMHhiYTgwODVkZiwgMHhlMTk0Y2IwZSwgMHg4ZDdlYTQ3OCwgMHg4NGMxZjU0YSwKKwkweDI2ZjlkYzY4LCAweDA4ZmI0NDExLCAweGZmYzcyYTViLCAweGJiN2YwZDViLCAweDM2Zjk4ZjJlLCAweDNmZWU4OGU4LAorCTB4YzE0NGY3NzgsIDB4ZDcyMzZmY2YsIDB4MmM2N2RmOTAsIDB4ZGQwNjFkNjIsIDB4ZmMzZjc1ZTcsIDB4N2I4N2VlYTksCisJMHhlNDQ2ZmZjOSwgMHg3OGVkZDc5YiwgMHhmNWYwODkzYywgMHhhNzgxNWM5OSwgMHhlOGNmZTc4ZCwgMHg0ZDI2N2Q3MiwKKwkweDNiZjVlOWUwLCAweDc5OTE5YzEzLCAweDJiOTBlYWM3LCAweDM2ZGI1ZWFhLCAweDQyMzY3OWNhLCAweGViMWJkNzBmLAorCTB4YWQwYTRiZjAsIDB4M2Y2ZTgzNjMsIDB4YzkzZDlkZDUsIDB4ZjFlMzAxYjcsIDB4ZGM3MGQzYTcsIDB4YmYxNzFkOWEsCisJMHgzN2RlOGZiZCwgMHgzODg4NjQwZCwgMHg2ZWY5ZTAxYSwgMHhkNzE4MGY3OSwgMHg0NDE1ZjJkZiwgMHhkMjk3ZDJlMSwKKwkweDI1ZTU3ZTQ0LCAweDk1Y2IwYmEyLCAweGRmNTEzODU4LCAweDc3NmM2MjU2LCAweGZjYzZmOTUxLCAweDdjM2JiMjcyLAorCTB4YmViMDk2MWUsIDB4ODRjYzEzYWMsIDB4YjNmYjk2ZDMsIDB4NTNmNGM0Y2MsIDB4MmY2NzdkZTAsIDB4OWE1ZjZkMmUsCisJMHgwNGRjZjNjYSwgMHhjNWM1MzMzZSwgMHg5ZDVkYmY3NywgMHhjNjg2ZmQ0NCwgMHg0MzE5YzYzMywgMHgyYmQ0NTliOSwKKwkweDQxOWNjMDU3LCAweDI0NmI5YWY5LCAweDlmMzgwZGM2LCAweGVlZmI5ZThkLCAweGUyOTliMzE4LCAweGJiZGYzMWFmLAorCTB4MGVmMGJmZTAsIDB4ZjAwYWM1ZWEsIDB4ZjhjNmI4ZjIsIDB4N2U1MWE5MDAsIDB4OTBjYjAzZjgsIDB4YmYyNGVkMWMsCisJMHg5ODUzMmViYSwgMHg2Nzc1MzlmMiwgMHhkMWZlN2NhYywgMHhlYmYwMzBkZiwgMHhkZmNlOTAwNywgMHg1N2IxN2Q1NSwKKwkweGJiN2ZiYTQyLCAweGZiNTdlMDdhLCAweDRmYWRmOWYwLCAweGI1YzVkZmExLCAweDg3ZmRkYjY2LCAweGMzY2UyMmQzLAorCTB4OTE3ZGRjY2UsIDB4YzhmMTBjZWQsIDB4MzM5MjRmZjMsIDB4MjVlYWM5N2EsIDB4ZWFhMGY4ZmIsIDB4YmM0ODljYTUsCisJMHg2MTZkMjI3ZiwgMHhiMzA3YmQyNywgMHg0NzllZTJkMywgMHhhYjJiZWVjNCwgMHg2ZWQ5M2Y0OCwgMHg4Njk5YzY1NSwKKwkweGViYTdkZTVlLCAweDkzMGJkZDY1LCAweGQyNWQ3OWY5LCAweGZkNDQ3YWQwLCAweDU3ZjM5OTc5LCAweGJjYWMwNzc1LAorCTB4ZDc0NzdmYmYsIDB4YmYxN2FhODcsIDB4OWY5OTE5OTgsIDB4NTRiZDQxNmIsIDB4NzI3NGE4NzMsIDB4MmE5Y2U3NDksCisJMHhmMWNmNjZmMiwgMHg2ZmQ0YTljMSwgMHgyMWVmZWNhMywgMHhlOTc4MzkzZCwgMHhlZmFhNjRlMywgMHg1ZTRiZjM3OSwKKwkweDY1NzRkYzBmLCAweGYzMjNmN2Y0LCAweDliNWNmOTIyLCAweGY5MmVmMDM0LCAweDU2N2RlYTkzLCAweGE1NTBmMjk1LAorCTB4ZGQ4ZWYyZmIsIDB4NGU5YWY1OGUsIDB4OWViODNiZjQsIDB4MjM5ZWFlMGIsIDB4NmE3ZWQzNGYsIDB4OTc5NDA0YmYsCisJMHhiMDI3MDlhYSwgMHg5NTY5YWY3MywgMHhhYWM3OTQ4MiwgMHg2NWJkZGI2YSwgMHg5YWFiZDYwYywgMHhiYTkzMTc5NywKKwkweDNmMGIyNmQ2LCAweDA1MjJkMzU2LCAweGE3ZjAzYzY5LCAweDc0OGE3ZjMxLCAweDM1N2QyOGRiLCAweGIwMGIxZmVmLAorCTB4MThhOGVmYmQsIDB4Nzg3ZDVjZmYsIDB4NGZmNDU5ZWEsIDB4OWQ5ZjJkN2QsIDB4YjQzNjNhMjMsIDB4NzYzZjM5NTksCisJMHgxOTZjMjkyZSwgMHhkODVlZjM4MywgMHhlYTAyODUyZCwgMHhiOWY2ZGRiMCwgMHg1ZDZhM2VjNCwgMHhjZDBiMzFlOCwKKwkweGU1YjllZWJiLCAweGZiMGYwNGQ5LCAweDkwYjQ5ZGY2LCAweGZhZDc1YzdmLCAweGJjZmViOTU4LCAweDIwZmI4NDU4LAorCTB4OWRmYWM1ZGIsIDB4ZjMyMjkzMWQsIDB4ZmMyMWY3NDksIDB4ODFmOGM4ODMsIDB4ZjcwODA1ZjQsIDB4MDllMzkwODIsCisJMHhkYWFiM2U1ZCwgMHhiYjEyMzYyNywgMHg3ZGVkYWZkMCwgMHhlNmJmNjI1YSwgMHgzYmRmOTM3NCwgMHhmZmRmZWJiOCwKKwkweGZmZGRlNjk1LCAweGZmOTg5MzJmLCAweDdmYzY1N2M1LCAweDRmMTgwNWYwLCAweGMwZjNlOGQ0LCAweGRhMTY1M2Y5LAorCTB4OWFiNGQ2MWYsIDB4MTczYmM1Y2YsIDB4NzdkYmJlZmEsIDB4ZjBjNjdiOTUsIDB4NTcxNjM2ZmUsIDB4Mzg4MGIxNmYsCisJMHhjMTAwOTliNywgMHgzODFlMjllNywgMHg5MWFiMmMwNiwgMHgwNzUxMWY5ZSwgMHgwZTcxNDdhNCwgMHhkZDYwZDY1OCwKKwkweDcxNDY3NjQ2LCAweGM2MDhlM2MyLCAweGI5ZDcxN2RiLCAweGY3MGY5ZTE1LCAweDlkZTMxYjA4LCAweGVkZWFkNjU3LAorCTB4ODU4ZjZhYTUsIDB4OWUzNTcwZjIsIDB4NzVlOTBiNWUsIDB4NzExM2Y4NGQsIDB4NTFmNmRmNWUsIDB4YmY2NzE2YjksCisJMHg3ZTE2ZWQ1YywgMHhjMzAzZDBkMywgMHhhN2QyZWJkZSwgMHg4Nzk4NWRiMCwgMHhjNmM4NjBlMiwgMHg2NmI4NWY3NiwKKwkweGRkNTNlMjgwLCAweGRhMGVkNDdlLCAweDAzZmNiODE3LCAweDZmNjA3NzQ0LCAweDJiZWI0YTgyLCAweGNjYzlmN2RkLAorCTB4ZmU3OTg4OWUsIDB4NTE4N2RiYTQsIDB4YTNmOTc5YWYsIDB4ZTdlMjY2YTksIDB4MmFhNjhmOWUsIDB4ZmJjZmMzNDksCisJMHhlMmViMWMzMiwgMHhkZGFhNTVlNSwgMHg0ZTZmNGUyMiwgMHhiNjhmOWRmNiwgMHgxODZmMDQ4MywgMHhiNzY5YWRlNywKKwkweGRhMDdmOWYzLCAweGUyOGU5NmMxLCAweDc1YjgzYjQ4LCAweGYzZDIwZWRkLCAweDE2OGJkOTc2LCAweGNiNmQzNTAxLAorCTB4M2ZkYzBkZmQsIDB4OTFlMjRiYzksIDB4NDgwNjE2ZGIsIDB4OGZhNzY1MGYsIDB4OGFmZTEzZjUsIDB4Y2ZkNGNkZjMsCisJMHhhZTUyMjY3ZCwgMHhlOTFiN2ZkYiwgMHg0ZjA4ZTI5MSwgMHhkNDZiY2M4YSwgMHhkMTdlN2E5OCwgMHhiNzVjOTEyMSwKKwkweGFmOWEyNjZiLCAweGM5NmZkODA4LCAweGVmMGY1ZjBlLCAweDU0MzM4YTlmLCAweDllMWVjN2RhLCAweGE3YzQwZTUxLAorCTB4Mzg5MDFlOWYsIDB4ZjU0ZTZiNWYsIDB4ZjkyMmNkNmYsIDB4YmZiOTk1MWUsIDB4MDEwYmYwZTUsIDB4OWJlZTk3M2EsCisJMHg5ZjQ0YzUwNiwgMHg0ZTlmZGViMSwgMHhlMzhjODMwYiwgMHgyZjA0MmU2YywgMHhmZjc5YmI0ZCwgMHhkZmQyMWUyZCwKKwkweDYxMWZhNjlmLCAweDg2Zjc2MTdjLCAweDIzNGFmYzgwLCAweGU3Y2EwNmUyLCAweDYxNDIwYmQ4LCAweGQ3MjEyNzFhLAorCTB4M2NlMzJjNTcsIDB4ZjMyNzZlNzksIDB4N2JmNTYyY2IsIDB4NGQ5NDFmMjksIDB4NGQ4NzVjNzUsIDB4ZmEyM2FkZjEsCisJMHhiMTQ0ZWU2YywgMHg2NTdiMWU5ZiwgMHhiMjNlYmE3OSwgMHgxYmNlODU3ZiwgMHhlOTJmOWNmZCwgMHhlZDNkMGIzMywKKwkweDVmMTgwYWJiLCAweDM5OWQxZGYzLCAweGJlMDlhNGQ0LCAweDZiMmU3NmMxLCAweDQ2YTYzYWRiLCAweGYwNDRkYmM2LAorCTB4ZGY3OWU4ZGIsIDB4NDRiYzViZmUsIDB4ZDc1MTM5YmYsIDB4YjY0NDhjZjcsIDB4ZmZmOWQ4OGIsIDB4ZTQ5OWY0OTksCisJMHgzNWIzNWE2ZSwgMHg3YzRjZjg4YiwgMHg3YmY2NDc1MywgMHhmMDY3ZWY1YSwgMHgyZTdmMTQwMywgMHhhYTkyMmJkOSwKKwkweDhkMGZjYmM1LCAweDRlM2M5Nzc3LCAweGVhOWNkZDcyLCAweGYwMTU3NWNiLCAweGMzMDBhY2YxLCAweDc2YjhjNDllLAorCTB4NTdmZmZkODcsIDB4ZTkxZmZmNjQsIDB4ZjhhMmRjZmMsIDB4NGRkZmM0NmQsIDB4ZjE2Y2RkN2EsIDB4N2ZiNjRlYTksCisJMHgwZmYzNGE5ZiwgMHhmYzc0NmZhZCwgMHhmNmU5YjVmNSwgMHhmZjgyNjViYSwgMHg0ZmI3ZDcxYiwgMHgxNTM5OWY1ZiwKKwkweDRiYzY4ZGY1LCAweDRlNjdlZTA2LCAweGZmNDgwNjBlLCAweDc4YTA5MjlhLCAweGVjM2UzZTEzLCAweGRkOTBmNzJhLAorCTB4YzVmNDM5NmQsIDB4YTZmN2IyMzgsIDB4MjgwN2FmMjQsIDB4ZDY2MDc1YWYsIDB4MmRmYmIyMmEsIDB4ZmQ2MzZmYTMsCisJMHhiYzg1ZjRmZiwgMHg5ZTYyMzkyMiwgMHhhZDI1NjkxMywgMHg2OTdlYmZlNCwgMHhjZmUyY2JhYywgMHg0MmZjNzVhNSwKKwkweDVkNjMyM2Q3LCAweGFiZGY2ZWU5LCAweDExYmM4OGVlLCAweDkxNWY3NThjLCAweDlmYmU4MGZlLCAweDE3ZjFlYWYzLAorCTB4ZmY5YzczZjcsIDB4MmY0NDg3ZWIsIDB4ZDZlZTI3OWQsIDB4M2UwMmI3NzEsIDB4NzgzYjFiZDYsIDB4MWE1NWM2NTUsCisJMHgxZjdiYTMxYywgMHhkODI2MWQ4ZCwgMHhlNGE2Y2I0NiwgMHg1ZDM5YzQ1NCwgMHgzNjMyNmNiMiwgMHhiNzBkOWE3ZCwKKwkweDRjNmM3NGU2LCAweGViYmE2ZmVkLCAweGJkMjEzNDk2LCAweDBiMjAyMWZiLCAweGFmOWQxNjdjLCAweGE0ZDI0ZDAwLAorCTB4NmJjNTNjYzgsIDB4MTRmM2YxNTUsIDB4YzkxYmY4Y2YsIDB4OWU1NmZmMmUsIDB4YjRkODRlNjIsIDB4ZjdmMjkyZGEsCisJMHhiYWNlMmJlNywgMHg5ZjNkZjdhMywgMHgyYTI2NTViYSwgMHgzMWY0MmI5NCwgMHg4YTBjNGUxNCwgMHhhNzRjMTdiYywKKwkweGYxMzM1MzdkLCAweDA2N2JmZjEyLCAweDJkZjZjYWQ3LCAweDVjZGFlNWY1LCAweGZiZWU0ZjY4LCAweDhiMWQ2ZGI3LAorCTB4ZDYyZDk3NzYsIDB4ZmE0NmY1NGYsIDB4M2RjMGE3N2IsIDB4ZDc4ZmY5NDMsIDB4NDZlZTMwYTYsIDB4ZmVmMzI3M2YsCisJMHgxMmQzYTlkZiwgMHhjNDYyYjcyMywgMHg4OGY3YzA2YiwgMHgyN2YyYTM1MiwgMHgyNjVmMjNlMSwgMHg0YWVkN2U5MywKKwkweGI5MjJkZjU1LCAweDdjYzk3NDBjLCAweGU5NDEyNDRmLCAweGQ4ZTJiOGIxLCAweDAzYzIzZWQ5LCAweGQzOGJmN2U4LAorCTB4ZDZjNDNlYzUsIDB4NmQxN2NlMjYsIDB4MzE3ZWM2YWEsIDB4MjY5Y2U5YzEsIDB4NzljNWQ4NDcsIDB4NTc5ZmM4YjcsCisJMHg5YzYwZjkxZiwgMHgwNWRjMzEwNSwgMHgwMmU0ZjFkMywgMHhkZWMzN2YxYywgMHhjMzRhNjQ5NiwgMHhmNmYzM2ZhZCwKKwkweDUzOTJiYTRjLCAweGU5MWRmOGEyLCAweGE1NGZmZWI4LCAweGMyMzYzOTFkLCAweDUzODM1YmE5LCAweGYwYTEzZjg5LAorCTB4OTNmMjE0ODQsIDB4OTQwNDBhODUsIDB4ZjFmMTM4YTIsIDB4MTRkZTIyYTksIDB4ODdjNTNjZDcsIDB4M2VkODUwZmYsCisJMHhlNWUxMmQ3ZCwgMHgyZjU4YjBkYSwgMHhhNmM2NjFjZCwgMHg3YWUwMzZiYywgMHgyYTYzNWI1ZiwgMHg2ZmZiNTc4ZCwKKwkweGJmOTM0NjA3LCAweGUwNWQyOTdhLCAweDRkMmYxNzlhLCAweGEwMmJlZjExLCAweDc0YWNmZjUwLCAweDQxZTdhZTk3LAorCTB4NWYwYmU1MTMsIDB4N2Q4Y2YzZDIsIDB4Y2ZkYzRjOTcsIDB4NmRiMGJmOTgsIDB4M2Q0NGVjYTEsIDB4M2Y2ZjA4MjgsCisJMHg3NmNkNzljNCwgMHg0ZGYyNGFhYiwgMHgzZjA0MGU3OCwgMHg3NzE4MTNkYSwgMHgwYzVjMWVkNiwgMHg1ZGZhZTcxNCwKKwkweDdkYjA5NWUwLCAweDZmYzBlMjU3LCAweDBlMDYxZjQ5LCAweDc3M2E1NTU4LCAweDg3NmU3MDRkLCAweDk3N2YxYzU0LAorCTB4MGYyYjRmN2UsIDB4MzFjNWIyMTUsIDB4MmY5OGRjZmMsIDB4OTRlN2ZkYTEsIDB4ZTBiZDI0MTMsIDB4NjUwNGRmZjMsCisJMHg4OGUzNWMzYiwgMHhkMzEyNzdlNCwgMHhkNWViYTI1ZCwgMHg4OWIwYzRhZSwgMHgyNjA2NDVjZSwgMHhlOTg3NWVlMSwKKwkweDc4MTNhNjFhLCAweDNjY2U4MzVlLCAweDJjYmJmYmY2LCAweGUwN2VlNzAzLCAweGE0OWNiYTY2LCAweGU4MjA3OTA3LAorCTB4MmFjOWY2ODQsIDB4YTcwNGQxZjksIDB4NzA0OGViYzYsIDB4MzQ4MGRlYWEsIDB4YTlkYWFlOTIsIDB4NmVkMGZjMDgsCisJMHgzNWU3MjUxZSwgMHg2YmFlZDg3NywgMHgzNmViODcxMywgMHgxMzVkODViNCwgMHhmZjhmM2Y0MCwgMHg4ZjNhMzZkNSwKKwkweDgzOTNhYTFmLCAweGZlZmMzZDk5LCAweDZjMmZlOTJkLCAweGY5Y2IxYTZiLCAweGEyOGM4MGJkLCAweDk0OTk2M2I2LAorCTB4Nzk1NGViNGEsIDB4YjU0NWU4N2QsIDB4MDdjMTIyZjQsIDB4Yjc2N2FmYmEsIDB4ZmVhMWY2ODksIDB4YWEwZWU3YTgsCisJMHhhZjNmNDQzYiwgMHg5MjVmNjlkNSwgMHg4NzQyZjZjNSwgMHhmMDc4NDNkNywgMHhlZTdjMjk3ZSwgMHhkZWQ3YjQ1YSwKKwkweDA1Mjk3Y2M3LCAweGQzNWVhZWI4LCAweGIxOWEwN2ExLCAweDg3NTY5ZmRmLCAweGU5M2VlODcyLCAweDFhZmY1NjczLAorCTB4M2U1N2NmZDIsIDB4MjE0OGYzNWMsIDB4NjY1ZGRiZjksIDB4OWRmOTI1NmYsIDB4MThjZmMwOWUsIDB4NTY2OGJmODcsCisJMHgxZGQ4NDViNywgMHhlMGM4MWQ4YywgMHhmMzMxODBmYiwgMHhmNGQ5OWVkNCwgMHhmZGQ3YzIzMywgMHhjZTk1MjVmYiwKKwkweDAzY2RmYmJkLCAweDlhZWU4OGUzLCAweGU4NWEzZmY2LCAweGZlZWQ2NGJlLCAweDRiNGYxODhmLCAweDlhMWFmZTE5LAorCTB4MDM1Yjc2NmYsIDB4MDM5YjZiZGYsIDB4MWI1ZWY5ZGIsIDB4OWZiZTQzZmEsIDB4N2YwOGYyMTgsIDB4ZTczYTc4MzIsCisJMHgzOTA4ODZkOSwgMHhlYzJlOTEzYywgMHhlM2ZjMDYwZCwgMHhlYmI1NWUyOSwgMHhmNjkwN2FmNiwgMHhlZGVlNThkZCwKKwkweDhkMjI3NWI4LCAweDA3Y2Y1N2JmLCAweGMwMzVlZjE4LCAweGY3YzQzMWExLCAweDk3MWFmMDRkLCAweGEwZmVmM2M2LAorCTB4OTY3YTQxNTIsIDB4NGVlZGFlZmYsIDB4YTNmZmEyMmQsIDB4M2RiZjAyZTksIDB4NjY3MDJlOWEsIDB4ODliZjg2NzYsCisJMHhmMWRmNWRlOCwgMHhkNjk5MjViMSwgMHg4ZTM0MzY3OSwgMHg0NTIxYjlmNiwgMHhmMWM2NzE0ZCwgMHgxYmY2NDMyMywKKwkweGNhYjU0ZjYzLCAweGQ3ZmE4NTgwLCAweDJiZjYwNzllLCAweDE0YTZlZjI4LCAweGVmNGJkZjk0LCAweDhkNTk0ZGI2LAorCTB4NGNhMmY3Y2YsIDB4ZTJhZTI4NTIsIDB4ZWZlMjk0ZmUsIDB4MGM2ZmIzNWUsIDB4ZTc3ODZmZjUsIDB4YzdlNGE5ZjMsCisJMHhlNzRmNDgxZSwgMHg2MDdlN2ZmNSwgMHgxYmUyNzhmZCwgMHgyMjQ5N2ZlYSwgMHg2MDZlZDlkOSwgMHg2OWQ4NjZiZiwKKwkweGJlMjlkOTAxLCAweDVmZmE0MDVmLCAweGY2M2NmNTRjLCAweGRkMmNiYmNiLCAweGY3MmVkODRiLCAweDEyZWM4MDlhLAorCTB4MDFlZDlmZjUsIDB4Zjg0OWRmZjUsIDB4ZjY4OWMwYWUsIDB4NjY0ZmVmYzAsIDB4NmRkNWRmM2IsIDB4YTMyNzE4ZDIsCisJMHhmNWM0OWY1ZiwgMHhiZWE5MWI5MiwgMHhjOWNjYmJhYiwgMHgwNWY3NGU3NiwgMHhjMzVlYzg4YSwgMHgxMDljNzg4NywKKwkweDlkMTIyNGMwLCAweGZjYThiZTA0LCAweGU5OTkzYjg4LCAweGU3ZTVmYzM2LCAweDg2ZTNkMDZlLCAweDc1YzVlMjlhLAorCTB4Y2EzOTY1ZDgsIDB4YTRlMjIyM2UsIDB4ZjQ3MTFiYTgsIDB4OWVkYjMzYzksIDB4ZWU4MTdiNDAsIDB4MGZkYzI4ZDQsCisJMHhmZmJmMGJlZiwgMHhkNTU2M2Q1ZCwgMHg1OTc3M2ViZCwgMHhlZWIzYWUzMywgMHgwN2VkY2M4NCwgMHg1ODVlN2RmNSwKKwkweDdhNDM5M2Q3LCAweDg2ZTI4NjdlLCAweGVmZGM1ZDNhLCAweGIwMzNlN2E1LCAweDY3NWRmNzRlLCAweDA5NGIxYjZhLAorCTB4ZDhhZWNkNjMsIDB4YjljYTk4N2UsIDB4NDEyOTUwYmUsIDB4YmFhYmY5YzgsIDB4OTk4NTliMGYsIDB4YjVmZTkzZTcsCisJMHg5ZjJlYmExZSwgMHg5ZmY1Y2RlZSwgMHg5MjAyNDJiMSwgMHhjMGU1ZmFkOCwgMHhiNWM0NWY2ZiwgMHhmOTEwNzAzZCwKKwkweGUxNGUyNzFmLCAweDEwZmY1ODcyLCAweGNmMDE4ZDZmLCAweGM5N2VmNmM4LCAweDRiYmQyM2YwLCAweDVhZmIxZjQ4LAorCTB4MTIzYWUxZTUsIDB4NGQ4YTgzNTIsIDB4M2ZkMjc3ZjUsIDB4YmFjMDE2ZGQsIDB4OWY3YjQzM2YsIDB4OTljN2UyNTQsCisJMHgzZjQ5ZjdmZSwgMHg5OTdlNGZmYiwgMHhmN2I5NjY0MSwgMHhiN2M3ZDhiNCwgMHhkMjdjYjQ1YSwgMHhiODA5ZDY5ZiwKKwkweGE3YTM4ZGI1LCAweDNjOGJhNWFmLCAweGUyMTViMTRmLCAweGE1N2U0YjllLCAweDAwOWNjMWM3LCAweGZlZjEyMjNjLAorCTB4NTEwNjc2NWMsIDB4NjU1YTE3ZWUsIDB4ZTdmODgyY2QsIDB4Y2U1NjA0M2MsIDB4ZTdhMzdmMjMsIDB4ZmQwMWVmNmYsCisJMHg5NDFmZTFhNywgMHhmNTdhYmRjZiwgMHgxODJiYzIxZSwgMHg2MjdkZWViNywgMHg4OWJmYjljNCwgMHhiYjZkNjlmNCwKKwkweDZiODRmZjA0LCAweGZjNGNmNzVmLCAweDVlNDYwOTdiLCAweDFkYjZiZWViLCAweDNjYTBjNjQ3LCAweGVlOGI5ZWFiLAorCTB4OWVlODYxYjcsIDB4YmRmNzg4N2IsIDB4ZWZhMzlhMWIsIDB4YWU5NTdjMWIsIDB4MzA4OTk2ZTMsIDB4ZWEwYjcwOTEsCisJMHhiMzA3ZmIxMywgMHhkNDU2OWQwMiwgMHhmZDMyNTdkZiwgMHg3ZTVlMTA5ZiwgMHg4NGY4MjRjOSwgMHhmMmVkOTU3ZSwKKwkweDY3MWViNzEzLCAweDFhM2Y4NDRhLCAweDhmN2MwMGI4LCAweGU4Njc2ZjI4LCAweDk5ZDdkZDMwLCAweGE1ZTU5Y2RiLAorCTB4YTIyYWU2MzksIDB4MTY1YjZlN2QsIDB4ODI1MDE5YzcsIDB4OTgzN2RkMzIsIDB4MTljYmY5YWQsIDB4ZDNiNDA3NWYsCisJMHg5ZDY0MmY3NCwgMHg4OWMxMjdlZSwgMHhhM2JmMjg3ZiwgMHg4ZTlkNmJhZiwgMHg0NjBiZWVlNywgMHg4MjA3M2RkMywKKwkweGRhY2YzNDhkLCAweGQxZmVlMjlkLCAweGJmZjE5ZGZhLCAweGM3ZDVhODEzLCAweGM5ZDRmMGQ5LCAweGFjMGU5NDIzLAorCTB4YWJmNzQ1MGUsIDB4ZGI1M2Y5ZDUsIDB4MDViY2ZkMTYsIDB4OWYxODEyNzgsIDB4ZmNjZjdkMTEsIDB4ZmM0M2VmNGEsCisJMHhjNWYwMmNjOSwgMHg0NjM4ZmFkYiwgMHhjMjE5YjVmYiwgMHg3OTIwZDY3ZiwgMHg0MTBkZGYyNCwgMHhiMzdhNDgzOSwKKwkweDBiMjQwYTRlLCAweGQ1OGUwYjdjLCAweDg2NWRmNzQ4LCAweDY1ZjdlOGJlLCAweDczZjlkNmVmLCAweGJjMmZhZTk3LAorCTB4ZmFiZjdjMmUsIDB4ZTc0ODI5MTksIDB4MjRmZjc3ODAsIDB4NDI3YmZlOWEsIDB4MWY0OWNiYWIsIDB4NWQ2YWY1NjIsCisJMHg2ZGYxOTliMywgMHgxMGI0NmMxNSwgMHhhYmQ1OGRiZSwgMHhkOTdkMjFhYSwgMHgxNjM4YTE2ZSwgMHg3ZTM1NGZhYiwKKwkweDBiNzQzMmU5LCAweDRiN2ZmZTVjLCAweDk4NzM3YWY3LCAweGZmZWI0Y2YzLCAweDNjYTVlNGE3LCAweGRmYWRiZGQ0LAorCTB4NzQ1ZTUwYjEsIDB4ZjkwODdkYTQsIDB4YTI3YTE5NTYsIDB4NWRlZmViYWYsIDB4N2M4NmVkY2YsIDB4OTYxNGMwYTcsCisJMHgxNWRhNDU2ZiwgMHhmMWEyODNlZSwgMHg1MGNiNmVmNCwgMHg3Y2YzOTI5ZSwgMHgzODEzOWQ4MywgMHg1MWU4NmUzZiwKKwkweDNhZTUzOGVjLCAweDE0ZmM1ZjJlLCAweGFkYTE3OTcwLCAweGEyZjg0ZWQ0LCAweDJiYzliOGZmLCAweDRjN2Y5Y2E5LAorCTB4NGMzZTQ0MmUsIDB4ZTEwMzIwM2YsIDB4ODlmNmZlOGQsIDB4ZmU5MDA3OGYsIDB4MzdjNTEzYTIsIDB4ZmE3Y2JlNTIsCisJMHhkODNmOGMwOSwgMHhmOGIzYTdiZSwgMHgxMTVmZTQ1NywgMHg3ZDkxYTRlMSwgMHg0ZWNhZWMyZiwgMHhjNzgzYmRmYiwKKwkweDdmZGRmOGUxLCAweDRhZjFlOGJjLCAweGNiYzdjM2YyLCAweDA5NWM2OThhLCAweDc4N2VlOWRiLCAweDFhODcxZTkxLAorCTB4N2JkOTE3OGUsIDB4ZmRkMWUyMjIsIDB4YmVkZjIyMTksIDB4NDdmYmYzYzUsIDB4NzhiMDVmNjksIDB4Zjk0YmQ5YjcsCisJMHhmZjY2YzU4ZSwgMHhhZmE0MDRhNiwgMHhkYmM5MDVlOCwgMHhlOTFkYjM4MCwgMHg4ZDI0ZjQzZSwgMHg1MmE0ZjY4YiwKKwkweGVlZjE2NmJlLCAweGY2YTIxZGVmLCAweGQzMTI1ZGRhLCAweDI4YmVkZmRmLCAweGM3YzUxNzdmLCAweGI4YTVlY2EwLAorCTB4NTc3ZWRmZDcsIDB4NzM4NGJkYzEsIDB4NzA1M2RjMGUsIDB4NDc3Y2M0NTcsIDB4NTk1Zjg1NTIsIDB4ZTM5OTk1N2MsCisJMHhmYjY4ZWY3MSwgMHhjZjI5MmIyZiwgMHhmZjYwZWRhOSwgMHgxZWVhZmJkMCwgMHhiMDU3N2YwYiwgMHhhZTBmMDI0YiwKKwkweGYwZTc4OGYzLCAweGJkMGY4OWFmLCAweDA4NWE0ZWZiLCAweDllYjY5N2U0LCAweGYxYzRmNGI0LCAweDAxNzk0NmNmLAorCTB4Y2U2MTcxYjcsIDB4ZjBiNzZlYmYsIDB4N2ZiZGNhM2QsIDB4NmI3YWQwYjAsIDB4ZjM4OGZiOWUsIDB4MTI2ZDU1NjksCisJMHg2N2FhYTdmYiwgMHg3OTRhYTBlNCwgMHg1OGFmMDM5ZSwgMHg5YTZiM2Y0OCwgMHg4YWNjYzgyNSwgMHgzYjczMzc2YywKKwkweGZmYWE1MWY5LCAweDY1Zjg1OWIxLCAweGU4ZDdlZjQzLCAweGJkZTg2ZTdhLCAweDc0NmIwNzYxLCAweGQ2ZDc3NWZmLAorCTB4MTdiZjNkNjgsIDB4ZjFhMzJkYjQsIDB4NTc5YTdiZmQsIDB4N2JhMDNkZjMsIDB4NWZmN2M3YjYsIDB4NGI1YzFmODYsCisJMHgyYjhjNTJmYiwgMHhlZThhOWY2YiwgMHg3ZTkwZGY3NywgMHhjN2JmZDgwNywgMHgzMjU3YzlmYSwgMHgzY2Q4ZjNmNCwKKwkweDFlZmQyM2M4LCAweGFmMTlhZjBjLCAweDdlN2QzZGEwLCAweGM0M2M2YWIyLCAweGQ3MWUzYmM5LCAweDhmMTE4MGYxLAorCTB4OGUyNmMzMDcsIDB4ZmFmZGIxNjcsIDB4Mjg1YTJlZGEsIDB4ZmU3NmQ2OGUsIDB4Nzk2YmYxOTksIDB4ODcyYzY3ZmIsCisJMHhiZTBlZjZjYSwgMHhmODNkN2FhZiwgMHhhZjFmMTAzNywgMHgwOTNiYjc2ZiwgMHgwOGY2NTc0NywgMHg2ZWQyNWZiYiwKKwkweDZhMjUwNjBkLCAweDdjOTEzNTBmLCAweGVmOGEwZmZiLCAweDRhYWYwMjNiLCAweGY3NDBhMzhjLCAweDdlNzU2YjdmLAorCTB4YjdmOWQ1YWUsIDB4NjM2N2Y3MTYsIDB4YmU4YWRlZTgsIDB4NzcyZmJlZmYsIDB4ZTJiYTExYzcsIDB4ZGYzZmEzNTEsCisJMHg5OTM4NzVkMCwgMHg4NDA0YjhmOCwgMHgxMjEyNWE3ZiwgMHg4NzkwYzlmZSwgMHhjNjQ2NWYxMSwgMHg5MzZmODFkMSwKKwkweDViYjdkNzNjLCAweDUyZjhiZWY5LCAweDZkMmQzZmRkLCAweGM1OTNkZjE2LCAweDUxZmU4YmZhLCAweGRkZmY5MTc2LAorCTB4OGQ4ZGU4MmIsIDB4ZDFhZDM1YTcsIDB4ZDIzMmJiZmQsIDB4ZWEwZmRmZDksIDB4YzMxM2Y4NzgsIDB4YThmMmU4ZGYsCisJMHhlNTNiMDAxYywgMHhiMmE4OTdlNywgMHg3NTZmYzgzNywgMHhlNzdmMzQyYiwgMHg2M2NmODk1NCwgMHgyOTg5ZDUzYiwKKwkweDE5NGJlZWYxLCAweGNlM2E5YmU1LCAweDI4Y2JlYTM3LCAweDQzZmQ4NjRmLCAweGM4OGVlZGNlLCAweDk5OGRmYzdkLAorCTB4Y2Q1NGFmMDIsIDB4Y2YyNDAzOTEsIDB4YjJjZjdkODgsIDB4ZmJiOGFjYTIsIDB4YmE0NGM4MWUsIDB4ZDc3YjE4ZGYsCisJMHhlZTQ1YTY0ZiwgMHgzOTFkYjQ3YiwgMHhmMjNmNjdhNCwgMHhmNzQ5NWUzYywgMHg4NTliNmE4YywgMHg4ZDliZTg3ZiwKKwkweDhlMTBhNmUzLCAweGI1YzVjNjA3LCAweGVkMjBkNmNkLCAweDRmNTE2YTRmLCAweGQyMzA3YmY4LCAweDc2YmZiMjBmLAorCTB4MDdlOTExNjksIDB4OTkxYzFiZWUsIDB4M2E3MmNmNDgsIDB4MmZmNWM0YWEsIDB4OGUzOGMzNmYsIDB4ZmIyZjJmYzMsCisJMHgyYmFhZjU4YywgMHhmOTFiYWM1YiwgMHgxZjZmMTk5NiwgMHg2YTFmZWM2MSwgMHg2YTljMDkyZSwgMHg3YTUxYWYzYywKKwkweGQzNTExZjc4LCAweGI3NDllZTJlLCAweDVjNjJmYTFlLCAweDdmZGJkMjE2LCAweGFkYzYzZmUwLCAweGE2NDE3MmM2LAorCTB4MjVhZGJmODgsIDB4YmVlOThmYTEsIDB4NmNiYmU3Y2YsIDB4OTBlOGYxNzEsIDB4ZDg5YTk3YmYsIDB4M2RjYzZhMGUsCisJMHhmNjU3OGMxOSwgMHg4NTljMmUyMywgMHg0ZmVkZjM3ZSwgMHg3YWQxZGY3OSwgMHhjYTRlZTEyOCwgMHhmMWFkZjVjNywKKwkweDgzN2U3NzhmLCAweDEzNjAxYTljLCAweGQwNGRkYWUzLCAweDllZTEyNWM0LCAweGQ2YjgxYzQ4LCAweGRkMGZlZTI5LAorCTB4YWE0OWM3YWIsIDB4N2Q3YThjM2YsIDB4NTA1ZGY2MmYsIDB4MDNlZWNmMTQsIDB4MjM0OWU2NWIsIDB4MWJmMGRkZWQsCisJMHhhZmJlYmFkNSwgMHg4NWIxZDgyZiwgMHhmMTYzZTA4ZSwgMHg0NzZlYjU1MSwgMHgyZTM5ZmM4OCwgMHgxYmEyZTJjNiwKKwkweGI0ZjVhMzMzLCAweGM2NDRlZGUxLCAweGIyNWRmZGI5LCAweGM4YzQ3MjkzLCAweDI2OGM1ZmQ3LCAweDdlZjg4N2RjLAorCTB4ZWIzYzljNDIsIDB4ZjY1ZWJhYTcsIDB4MGRiZWU3ZWEsIDB4OWJlNjY1YjMsIDB4MGQyODhlNjksIDB4NjNmYzg1MWMsCisJMHhlOTNmZTk3ZCwgMHhjYjFjNTIwOCwgMHgwNGNhZjgzZiwgMHg5ZGZhZmY5MiwgMHgyNDQ1ZTdkMSwgMHhkZmRmM2YzZiwKKwkweGFhZmNiMjBhLCAweDQzM2U3NjQzLCAweDNhNWZkYTMyLCAweGQyMTRjYWY4LCAweGJmYjc4NmIzLCAweGY5NzIxMWNjLAorCTB4YmVlMmM3MjIsIDB4Mjk0NjdkM2MsIDB4NmJmZjYyNDksIDB4NzdmZWM0OTIsIDB4NGM5M2QyYWYsIDB4ZmRkYWFlZmIsCisJMHhmZWYyMmZiMiwgMHhiYmU3MjFiYywgMHg0NTAxZmQ3NSwgMHg2NWQ3ZjNlYywgMHg2ODZmNWNhYSwgMHgzYTYxN2ExNywKKwkweDdmOWM0YTIwLCAweDk4ZjNjOGE1LCAweGVkMTFmZTc5LCAweGRmMmZhODI1LCAweGU4ODBiNzEwLCAweDlhZDdkOTQyLAorCTB4NmFlZjU4MDcsIDB4OWU5ODlhNGYsIDB4MTk4MzkzZGEsIDB4MDVlZjExZDksIDB4ZjI0Y2RjNjgsIDB4ODAxYjBkN2IsCisJMHhjODFkODhmZCwgMHhlZmE1MmViZiwgMHhmNGJlYjEwZiwgMHg1OWM2MDRmZCwgMHg1MjNjMjY0NywgMHg2NGFkY2UyOSwKKwkweGMwZjViZjIwLCAweDIzOTM1NWRiLCAweDNkMDVmZmZkLCAweGMxZjEwM2VlLCAweDA5ZTcyODQzLCAweDg3Y2ViZjMxLAorCTB4Y2Y0MmIwNGQsIDB4YWUzZDA4MTMsIDB4ZWUyYzcxZDIsIDB4OGVjODlhYWYsIDB4NTc1N2Y3NjMsIDB4MGUxYjkzOGEsCisJMHhjN2YyODE1OCwgMHhmOTU4MWZiNSwgMHgwN2U3ZDAzZSwgMHgxZGZlZjJkNiwgMHg5MzI3ZjkyZSwgMHhmZmJmMDE5ZiwKKwkweDM4MWYyYTZhLCAweDNkMzI3NmI4LCAweDdkZTBmY2ZmLCAweDUzZGU3MzU3LCAweGFmOTUxNGRhLCAweDFlN2QxMDA4LAorCTB4Nzk3ZjUxYzIsIDB4OTdjMjc2ZjcsIDB4OTBlMzBhNWQsIDB4ZWZkM2FlYTIsIDB4OWVlYWY5ZDIsIDB4OWI3ZjMzNTYsCisJMHhjNjc3YmQ1OSwgMHhjMjI0ODFlMywgMHhlOTRiNDU0ZiwgMHg5ZDNkOWRiYiwgMHhlMjFmZWIwYSwgMHhkOTQ3MDMyYSwKKwkweDI4OWQ0NzE5LCAweGUzODUxYzY2LCAweDE2NWM4MmY4LCAweDcxYTRhYjFmLCAweDUzMTQ5NDRmLCAweGM5ZGIwOTM3LAorCTB4MWMyNzRkOWYsIDB4NTVjNjE4ZTUsIDB4OWNmZjNkMDYsIDB4ZGZkOWY4MjksIDB4MTNmOWMwOTEsIDB4M2QwODI2MDksCisJMHhiYTI4ZWM4MywgMHhjZWJlYjQzNywgMHg5YjQzNjQzOCwgMHg4NmJkZjUxYywgMHg0Y2VlZGVmMSwgMHhkN2IwYWU3MSwKKwkweGE0OTBiM2QwLCAweDE2ZWQxZWIxLCAweDNkYjY4NmU1LCAweGY1OGViNDE5LCAweDQ5ZWIxMGU2LCAweGI0NTliMzQzLAorCTB4ZDAyNTEyZWYsIDB4ZmUwY2NkZjksIDB4ZmM0MDM4ZDgsIDB4NTA4ZjQ2MzksIDB4YzEyYzRiMmUsIDB4NzdkYjg0YjEsCisJMHhlYTA3OWQwZiwgMHhlMjgyMzlmNywgMHhlNzYzNWQ1ZSwgMHg2ODZlZmU0NCwgMHgzYjhmNzNiMCwgMHg0ZTM5ZmM1ZSwKKwkweGRhNDgzM2U3LCAweGNmYjEyY2QxLCAweGYzYWY2ZDg5LCAweGQxYzY3Yzg4LCAweDFlMmZjMjMzLCAweDFjOWZlODVkLAorCTB4YTAwNjNmY2YsIDB4MjVmYmVjNDQsIDB4ZTZhZDdlNWQsIDB4ODZlNzc4OGEsIDB4ZGYyMjNkMWIsIDB4ZTA2YzczYjQsCisJMHhlZjcxZTkyOCwgMHgzNzNlMDRlZSwgMHhmYzg5NzVlYywgMHg5NzRiNjk2YywgMHhhYzlmZGY0MiwgMHg1MDY2OTU2ZiwKKwkweGZiOWY1YTNjLCAweDgyOWY3ZjFlLCAweDgzZjY2MmY1LCAweDZlN2NmZGUxLCAweGJiYmNkZDVhLCAweGM3NDM4YjVjLAorCTB4MWYxMTFlYjUsIDB4MDFkZmU4OTcsIDB4YmQ1N2QwOGYsIDB4ZDM3ODE0ZmQsIDB4MjNkYTdkZjUsIDB4YWE3MzVlNzQsCisJMHhkZjE0ZWNkMiwgMHg0YWVmODk5OSwgMHhmOWZkZDA2ZiwgMHgxOTliZDc4ZCwgMHhkNTAyOWQzNywgMHhjNDNmY2UyYywKKwkweGRkMzJjNTM5LCAweGZiYTBkZjJmLCAweDNiZGYxMWY5LCAweGU5OWIwMzNmLCAweDdiZjYyMjljLCAweGRmYWZjMzY3LAorCTB4MDJiZjhmYWMsIDB4ZjYzNzFlMzQsIDB4NzU5YmY1YmIsIDB4MmZiMzc4M2MsIDB4NGNhNWY5ZmEsIDB4NDBlNjA3MWQsCisJMHgxMGYzZjkwZSwgMHgxZmJlMTdjNiwgMHg3MWMwOTc5MSwgMHhhNGUxNjk3YSwgMHhiZTgzMzhiOCwgMHhlZmY1NTcwMywKKwkweGU0MzRhOWMwLCAweDFlZjc5MGRlLCAweDFkYTNiZmM3LCAweGRmY2Q3ZTY3LCAweDgwNDk5YzEzLCAweGM1Y2U3MTA5LAorCTB4ZTE5ZmUzODYsIDB4ZjIxMjZlM2YsIDB4YWEyZGNmZDYsIDB4NDM0NjgyOWQsIDB4MDc3MDE3ZWUsIDB4MzMxZjk5MTYsCisJMHhlNzQ2M2VlNCwgMHgzZGYxZmZmZiwgMHgyMjUwNWNhMCwgMHhjYWNmMjVmMywgMHgzYTFlMzFmZSwgMHgzMmY1YjA5ZiwKKwkweDcwMTVjNmZlLCAweDhkNzVjNDFjLCAweGNlMzVkN2QzLCAweDJlZGYxMTFhLCAweDU3MWQ1YThjLCAweDk3ZDc4NzdmLAorCTB4YzQ3MTEwMWEsIDB4OWU0NzY1Y2QsIDB4NzU2MjcxOTUsIDB4ZmJlZmUyNDgsIDB4NWY2MmMzYWEsIDB4ZjYyNjVkNWIsCisJMHgwMmFkMzliNSwgMHg0OWJjYWVhNywgMHhiYjEyNmEwYSwgMHg5ZjQ0ZDNjMywgMHg2Y2NiM2ZhMSwgMHg3YTE4MGYwMiwKKwkweDVkMmZjNDMyLCAweGYwOWRhODdmLCAweDNlM2EwZGMxLCAweGM5YTNkNTg4LCAweGY5NGU1ZGQwLCAweGM5MzQ1YmU2LAorCTB4NDcyYWY3NGIsIDB4NmFiZjNmN2MsIDB4ZWVlNGViZGEsIDB4YTgzZmE3MmYsIDB4MjJlZmZjNmYsIDB4ZjdkMWVhYzQsCisJMHgwZjEyZmUzZCwgMHgwN2JhZDNlNSwgMHhiOGUyMTY1NywgMHgzOGZlZjM0NywgMHhlNmE2ZjQ4ZSwgMHgyZGYzNzYzMiwKKwkweDNiMTM4ODhmLCAweDdjYTM4MTFkLCAweDNmNDVhNGRmLCAweDZiYzk2ZmVmLCAweDc0N2UyMWViLCAweDVlYzdlMzAyLAorCTB4M2E5NmY3NTcsIDB4YmNmOWFiODEsIDB4YzA5YzNhYmYsIDB4Yjc1NjQzZGYsIDB4YjBiYmY5ZGIsIDB4YzQ4NmQ2ZWEsCisJMHhkYjdmZTQyOSwgMHhlYjFkYWY2NSwgMHhjYjI3YWQ5NSwgMHhjNTk1OWY4OCwgMHhhZDRhM2VlMiwgMHhiMzhiZGM1ZCwKKwkweDEwYjdmZGI5LCAweDNiN2JkNzdkLCAweDJkZjljZmEyLCAweGZiYThiZjNkLCAweGY1OGYzZDA2LCAweGEzMDkxYjZiLAorCTB4ZjlmN2ZmYTUsIDB4NWYzYThkOWIsIDB4NjYyZWJhZWEsIDB4ZmVhOWMxNGMsIDB4MjZhZmU2OTAsIDB4ZmQ3ZmVjN2QsCisJMHhkNzFkMGI0NSwgMHhhNTc5NGVkNSwgMHg2ZDg4YWU5YywgMHhlZmRjYThmNCwgMHgyNjhlZTZmYSwgMHhmNDFhZjM0YSwKKwkweGY5M2E2NDc3LCAweDcwNzM1MWY5LCAweDgyZDJlMzJjLCAweGQzMGZiYjJiLCAweGE5OGRmZmIwLCAweDNhZmFhNzE0LAorCTB4MjI1YWE2YmEsIDB4MGViN2JiZjQsIDB4ZjkxYzczZmQsIDB4Yjc0OTgwMzUsIDB4NDk0Yjg1NWIsIDB4MjVlM2ExNWEsCisJMHgwN2I1Yzc2MSwgMHgzZTUwNjcwZSwgMHhiN2VjOTdhMiwgMHg5Mjc3Y2E4MCwgMHhkZWFjYjFiMywgMHgxMjc5MmE3ZCwKKwkweGEyYmQ5NmUxLCAweGVkMTljMjFjLCAweGE1MDNmNzMyLCAweGE0ZTZlNzI3LCAweDMzMzZmYTQ4LCAweDYyNDIxNzdkLAorCTB4OWM5ZTgwMWMsIDB4ZGIyMzBiMWIsIDB4ZGI1ZmZmMWIsIDB4MjdhNGQzZmYsIDB4Mjg5ZWI2ZDUsIDB4ODRmODM3ZmIsCisJMHgzZWZlN2NiYiwgMHhjYWQwNzAzNywgMHhiY2U4MDhmNywgMHhjNzIxMTVjNiwgMHgzNDdmNzQ1NywgMHg2NDRiMzcwYiwKKwkweDdjZTg3M2E3LCAweDNiNDEyMjdhLCAweGJhYTBlZTA1LCAweDk1MjU2MTAyLCAweGIyYzM4YmNlLCAweDk2Mzc3ZmI4LAorCTB4N2Q0Y2Y3ZmQsIDB4Yjg0YTU5ZmUsIDB4Y2VlOWVlODMsIDB4ZTczN2NmZDEsIDB4NWJmNzM3NDIsIDB4NmE1YzAzMDAsCisJMHg4YmVmZTRlMCwgMHhlNWNiYzA0YiwgMHgyOTc4NWI2YywgMHg1MDgyZjFjMSwgMHgwOTlmYmY4OCwgMHg3M2FlMjg2NywKKwkweGU2M2JmZDM2LCAweGU2MWVmMjM4LCAweDBjZTcwMjliLCAweDBlNzRjODdlLCAweGM1MWJlZTI2LCAweGQ3NWJhN2FlLAorCTB4ZjA5YTU5YzcsIDB4ZTgxZDA0M2IsIDB4MDg2Y2VlN2UsIDB4MzVmYmI5ZjEsIDB4YmY5ZmEzZDAsIDB4M2NjNzVmYzcsCisJMHhiOWQxZjdkYywgMHgzYjY4MzVkYiwgMHgyMDhmY2M4OSwgMHhlYjRmOWZmNywgMHhhN2FkZTM5MSwgMHgxOThiMjk2NywKKwkweDlmNDQ5Y2NhLCAweDdkMzBjZTE0LCAweDc1ZjJiZjZkLCAweDRkNmRkM2Y0LCAweDM1ZGY1N2NhLCAweGUyODNmN2QwLAorCTB4NmY0YjczZTEsIDB4ZDNlZjFiZmIsIDB4ZDM0OTYyN2QsIDB4OTdiMWJlZjgsIDB4N2RhNmM3YmUsIDB4MWRlOTU4NGUsCisJMHgwMDEzNjNmMiwgMHhlNmIzZGRmZSwgMHhjNjZmNjQzNywgMHgwN2UwMWFmNywgMHhmYjExZTdiZSwgMHhmNzJkMDZiZCwKKwkweDNkZjBjNjdjLCAweGVkZmVlMzM1LCAweDk1MGFlMGNlLCAweDcyYWM2ZmVlLCAweGFkZGZmOGRiLCAweDliOGRiMjI5LAorCTB4ODdjYTc5NGUsIDB4MjFiZmZjZDIsIDB4NmE0MGZhYmQsIDB4Mjg4M2M0OWUsIDB4NjM4YzE5YzEsIDB4ODNiMmJkNzUsCisJMHgyZmQ2OWIzNiwgMHgyMmY3YzY2OSwgMHhmNDMyZmFjMCwgMHgwMDY0MDFlZiwgMHhiNzYzYjc3ZiwgMHgxZTY5ZWY4YSwKKwkweGE1YjQzZDQxLCAweDc0YWJmNmIyLCAweDJlMWUxYTBmLCAweDZmMmYwOTU1LCAweGY0YmNkOTcxLCAweGU4OTVhZTVkLAorCTB4ZGJkMzBmYjUsIDB4MmZmNzEzNjgsIDB4YjE2YmZiOGMsIDB4MTliNDZjN2MsIDB4OGRhZjRhNzksIDB4NzdjYzc2NzEsCisJMHhmY2RhNzczZSwgMHhiZmU4OWJmZiwgMHg5MzI0YTkzZiwgMHhjYmZlNjA3MCwgMHgzZjdjM2RmMywgMHg3NzU4YzEyOSwKKwkweGMzZWI4ZDg5LCAweDM3MTkxYWY3LCAweDZhN2RkMTM2LCAweDFkMzFhYmE0LCAweGUxZTIxZWY4LCAweGJhMTQ5Y2E0LAorCTB4MjVkOGQ1MWYsIDB4YTYzNzUzZWUsIDB4OWI3ZmQ4MDcsIDB4ZjNmYjEyZmQsIDB4NGVkMmNlYzYsIDB4MGU4MzA3OGEsCisJMHg2ZWFiZGYwYiwgMHhhYTM0Zjk3NCwgMHg0NDIxZDIwNywgMHgzZWY4OWZmZSwgMHg2OWJiZTBkZiwgMHhmZDIxZWY5OCwKKwkweGVkOTE1MDVlLCAweGRlNTE1N2Q3LCAweDRhMWI5YTdmLCAweDYxNjliZGU5LCAweGMwZjExMjZkLCAweGU1MDYxZWY4LAorCTB4NGU5NTE5ZTAsIDB4N2JlZmEzY2YsIDB4ZmJlNGUyODEsIDB4NTAxYzg2MTcsIDB4OWQ5OTU4MzEsIDB4YjkwZDdjYmEsCisJMHhmOGVmOGQzOCwgMHgzYmVhMjUzNSwgMHg4ZjVlNDM3ZSwgMHg5OGI5MGEyNCwgMHg0NGNjMjZlOSwgMHg3MWE1NTc3ZSwKKwkweGYwNjFlNTYzLCAweDhmMDBiZmZkLCAweDMwYjFhZTQwLCAweDAwMzBiMWFlCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHhzZW1faW50X3RhYmxlX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDk0ZjNmZjAwLCAweDUxZjg2MDY2LCAweDI1N2JjMDhmLCAweDc5OWMxODE5LAotCTB4ODk2OGM1NTAsIDB4MTgxOTM5MGIsIDB4MGJmMTAzMGUsIDB4ZGEwMDU2MjAsIDB4YzBjNWNhZWIsIDB4ZmRjNDA2ZTAsCi0JMHg4ODAxM2M0MCwgMHgzZWIxMDBiZiwgMHgwMTgzMDMzNywgMHhkOTAyYTcxMCwgMHg3MzZlNjg1MiwgMHgxN2JhMDI2NCwKLQkweGQ4ODE1ZDg4LCAweDMyYmY4ODFkLCAweDYzN2MzMDMwLCAweDc2N2VkZTIwLCAweDYyM2RhMDIxLCAweDIwMzlmZTA4LAotCTB4ZmQwNGIyZmIsIDB4ZjBkODNmZmMsIDB4ZGFmYTY1NWQsIDB4YzBjMmE4MTcsIDB4MmE4M2EzMTAsIDB4OGZjNjhiMTYsCi0JMHg0NjZmYzFkMywgMHgwMjdjOWEzYywgMHg4ZjExM2YxYSwgMHg1NDczNzE3ZSwgMHgyYTAxOWQ3ZSwgMHg4MTg4YzkzZiwKLQkweDlhOTIwZjYxLCAweDZlZmMwMzdhLCAweDgxYWZjNzQxLCAweDMxMDBkZjdhLCAweDc0NzY5YTAwLCAweDAwMDM2ODVkLAotCTB4MDAwMDAwMDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI0M2JmZjAwLCAweGEzZjBjMGMzLCAweDRhZWY4MTFlLCAweGYxMzAzMDMxLAorCTB4MTJkMThhYTIsIDB4NjA2NGUzZWYsIDB4NjA2MmUwMTAsIDB4ZmJlMjA1MzAsIDB4MzMwYzBjM2MsIDB4MjA0Y2Y0ODAsCisJMHg2MDY2ZTUxNiwgMHgxYWUyMDMxMCwgMHhjNDBkZGUyMCwgMHgxOWY4ODA3YiwgMHgxMDM5ZmM1MCwgMHgxYmUyMDBlZiwKKwkweGJlZmQxMDNjLCAweGZlMGMwYzRjLCAweGM0MDgxYzQwLCAweDk1ZmM0MGMxLCAweDFiZTE4MTgxLCAweDczZjZmMTAzLAorCTB4NGMzMDMzMGEsIDB4MmZmMDQ3MTUsIDB4MjQ5ZmQ5MDMsIDB4YzFmZmU3ZTksIDB4ZTkwYzQzODYsIDB4YTA3MWRmNmIsCisJMHgxMGFjZjM3ZCwgMHg3YjIwNDY3YywgMHg5YWFhMTViZSwgMHhjZGY4NTYwNSwgMHhiZjI2ODg1OCwgMHgxOGJmOGQwOCwKKwkweDAzNzJmZThmLCAweDRkNWFmZTU0LCAweDgxYjViMzM0LCAweGNkNDkwOWU5LCAweDZlZmM0ZDNhLCAweDQwYWFjNzQxLAorCTB4MzEwMWE5ZmYsIDB4NWZmMWFkMDAsIDB4MDAwMzY4Y2EsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweDQ1NTQ3ODA5LCAweGJlZGQ3MGI2LCAweDRlOWRlZjRiLAotCTB4NjI1ODU5MDgsIDB4ODE1MTEwMDcsIDB4MDVlNDJjZTksIDB4NjJkOWIxYzQsIDB4OTcwNjIxZjQsIDB4NjY4NTQ2MTEsCi0JMHg0NDc0OWVjYiwgMHhmOWQxYzFjNiwgMHgxNTM2MTBkMywgMHhjNzEzMzA5ZCwgMHg2MGVjNDRlMCwgMHg4MWEwZDA1MCwKLQkweDYwMjQxMDA5LCAweDNjYzBlYTAzLCAweDY0ZmZlMzFkLCAweGI4MzA2NmRjLCAweGM1YTRjNmIwLCAweGZjYjhkZjBkLAotCTB4NGRkNTRlNzUsIDB4MTFkMzdiZGYsIDB4N2ZlZjk5OWMsIDB4Y2EzZmJmZjMsIDB4ZmI1YmE5NTcsIDB4NTM5Y2VhZDksCi0JMHgyYzkyMmFhNywgMHg0MjIyZTkxMCwgMHhhYjlmODNiZSwgMHg0MDliZjkwOCwgMHg0ZDE3MTkwOCwgMHg2OWU1YTkwOSwKLQkweDI0ZTA1Mjk1LCAweGJmYTJlMDI0LCAweGUxNTIxMzY2LCAweGQzY2I0MjU0LCAweDQzYjI5OTA5LCAweDQ4OTU1ZjBlLAotCTB4Yzg0MjhkZjMsIDB4N2RhNmYzNGMsIDB4NmVlZjJjNTYsIDB4NTNiMGY5NjAsIDB4ZmU1YTExZjEsIDB4ZDNjZDEzNzEsCi0JMHg4ZWU2MDMzZSwgMHhlNWEwYWU4NywgMHhkOTIyMWQ5MSwgMHhiMjhlZGQwOCwgMHgyMTEyNDg5OSwgMHhmZDg0MmRjNywKLQkweDBlN2NkMzY0LCAweDk2NTY4NTIxLCAweDNmZGM2OGFkLCAweGI3MTdkYTA3LCAweGY2OTU4OTk5LCAweDY4YmJiMTU3LAotCTB4NWYzNDE1YzYsIDB4NTAyNjQ4NzQsIDB4MzJkMzYyYTUsIDB4OTdjZDEwNjUsIDB4YzgxNjg0ODQsIDB4ZjM2NjRjZjcsCi0JMHg0MzE0ZWUwYiwgMHgxZWZkNjg5YiwgMHhjZGQyNDc1NywgMHg1NzRlNDIwZSwgMHgyMTQ3ODg1YiwgMHg5MWQ5YzZhNCwKLQkweDQyNjhkMzc0LCAweGYyZGI0MzRhLCAweGIzNjk1ZGEwLCAweDU4MTEzNWUwLCAweDUzOTdhNmM3LCAweDA0NWI1ZDYxLAotCTB4NDg0M2Q5YWYsIDB4ZjEzYjY2ZDksIDB4Zjg3MzYyOGMsIDB4ZGUzYmZlOGUsIDB4YTJhZjg2MmEsIDB4M2FlOThiZTUsCi0JMHg4OGI3ZWQwOSwgMHgxMTExZTZkNCwgMHg3OGE3NWZjNiwgMHg5ZGY4NTE5YywgMHgzOGUzNzZhZSwgMHgwYjYyYmU2YSwKLQkweGFiYjY4NzFkLCAweGMyZjA1NjdjLCAweGM0NGQyYjEyLCAweGVmYzc0MmRmLCAweGY1OWQ2ZGRlLCAweGI3ZDYwMzg0LAotCTB4ODRlOTE5NGMsIDB4YTA1NmFkNzUsIDB4ZGU2ODUxNWUsIDB4ZTYwN2FiNGUsIDB4ZDFlNGE4ZDcsIDB4NDY4NmQyZjIsCi0JMHhiNDc0NzBhNSwgMHgwM2NkYjJiZiwgMHgxZmFhZjNmNCwgMHg5NGQ3ZWM5ZSwgMHhkNWQzZDMxYiwgMHg0NjQ2Nzg4NCwKLQkweGY4ODRhNWYzLCAweDQ0YmY2ODVhLCAweGM3MzMyOTBhLCAweDQwN2ZiZjQ0LCAweDA4MTkwOWUyLCAweDYzYzQ4YmZkLAotCTB4MjE0ZmY2ODksIDB4NDc4M2RmODksIDB4NWUxNGFmZTgsIDB4ODQ0ZWJkYzEsIDB4YzViNzhhYWIsIDB4MjdiYmZhNmUsCi0JMHg2ZWIzYjc4YSwgMHg5MjI5NDc4ZSwgMHg0ZDVmZWRhMywgMHhkMDNjMDIxZiwgMHg5YzAyZDRmOSwgMHhjZjk2YmE2OCwKLQkweDRjOTEzNWNmLCAweDJlZmY2ODkyLCAweGU5MDM3MTFmLCAweDM1MWViN2Y1LCAweDNjYzk5NWFkLCAweDE4NWFjNzQyLAotCTB4YzY5M2UzMWMsIDB4ZWU0MmJjZDMsIDB4N2U0MjVlMjAsIDB4MzdjNzIyYmQsIDB4MjQxZmU2OTUsIDB4NmYzMDM5ZmUsCi0JMHgwNjJmZTRkMSwgMHg5MmQyMTEzYywgMHg0YWJiZjQwMiwgMHhmZDYwYjMyMCwgMHhkMzQ5ODEzZiwgMHg5NGE5NTVmMiwKLQkweDZiZGMyOTNlLCAweDIxM2NlNWE3LCAweDg5ZWU3YzBhLCAweGYyN2MyZjkwLCAweGE3ZWM3NGZlLCAweDY4NTFmYjA4LAotCTB4ZGZjZmMzM2YsIDB4NTcyZjNiOGYsIDB4YWYzYjhmZDcsIDB4MGFhN2VkNTgsIDB4NTg1ZGIxZmIsIDB4MTM3OWI1M2YsCi0JMHgyYmM5ZjNmNCwgMHgxYmI5ZmI1NSwgMHhkODVkNzFmYiwgMHg0ZjU3ZGNiYSwgMHhlYWU3Y2ZkNCwgMHg3ZTI3ZWM3MiwKLQkweDY5Zjg5N2FhLCAweDA3YTU1MTdkLCAweDY5MTNlMWQyLCAweDNlMzlhM2I5LCAweGE1YTI3ZWYzLCAweDgxMmJjOThiLAotCTB4NGI5NDlkZmYsIDB4OTcxMTc0YjQsIDB4NjFkMWQzNmIsIDB4OTc0MTJmYmMsIDB4OGZiOTNkYTcsIDB4MzBmM2NlNWYsCi0JMHg3YzgyY2I4OCwgMHg1MDUyMGNhOSwgMHg2NDFhNGMyZSwgMHgzNWRjZjljMSwgMHhlMTcyODFjOCwgMHg0YmZlMDlhZSwKLQkweDMwMWU3NGRjLCAweDc5YTU0OTM2LCAweDc3MjNmZmM1LCAweGYzYTZiYTBjLCAweGE0MGE0ODE0LCAweGM2YTQxMzFlLAotCTB4ODMzMmQ1ZjIsIDB4NWZjMWU0YzMsIDB4ZGI0NjNjOGYsIDB4OTE5MTRjMDcsIDB4NGViZjM0ZjEsIDB4YWMzOGY0OTgsCi0JMHgyMTMxMTM2MywgMHhhOTIyNmM3YywgMHgzMzM2N2E4MiwgMHgzYWI0Zjk0MSwgMHhhMDg5ZTczZCwgMHg4NjZiNGUwNiwKLQkweGQxMGJmYzUyLCAweGZlYzhkNzdlLCAweDJkYWZhMDE0LCAweGQwMjBlNmU0LCAweDk0YTFhYWRiLCAweGYyMTEwN2M5LAotCTB4NzBhNmYwNzQsIDB4ODdlZGEyNTAsIDB4M2MwMGE2MTYsIDB4NmZlNTBhY2QsIDB4MWQwYWY4ZWQsIDB4ZmY4ZTM0N2YsCi0JMHgwM2JmOGMxYywgMHg3N2Q3MWZjNiwgMHg1Y2IwZjM3YywgMHhiNDk2ZjhkZCwgMHgxNmY4ZGQ2MiwgMHhlOTRmOGU4NSwKLQkweDlkYjkzNzdkLCAweDM3ZTE0ZjhmLCAweDgzZTc5MDgxLCAweGU2ZjhlMWI3LCAweDdmMWM2MmI0LCAweDc1OGE0MmI1LAotCTB4Yzc3YWRiZTMsIDB4ZmRkNjAxN2YsIDB4MWZlYjdmNTIsIDB4ZmViZjQxMzYsIDB4ZmFmZDUyYjQsIDB4YzNmZWI2MTUsCi0JMHhkZjFmMTE2NCwgMHg2M2ZmZWI4NiwgMHg3ZjViMjE3MCwgMHhiZjViMjk1YSwgMHgzYmRiZjU5OSwgMHhmZTE3YWJiZSwKLQkweDhmYmFjMWFmLCAweGUxZmViN2Y0LCAweGJmZWJmNTEzLCAweDdlYmY1Y2E4LCAweDZkZmYxYjMzLCAweDc3YzdjMTUyLAotCTB4MDRlZmY4ZTAsIDB4MmZmYWQ5Y2IsIDB4MTVmMWM3MmEsIDB4NzQwYmRmYjMsIDB4NTViNjBjYTQsIDB4NjRmOGU4ODUsCi0JMHg2NDg4NjUwOCwgMHg0YzNlNTE5NCwgMHg0MjEwMjU0NywgMHg2MTkxZDdkYiwgMHg2Y2JiODcwOCwgMHhiMGJlZWU4YywKLQkweDQ0NzM3YTUxLCAweDUxMDkxZGU1LCAweGFjZjJhMjhlLCAweDU5N2NkMzkyLCAweGU0MDUyNGYzLCAweGI5NTM5NjJjLAotCTB4NzU0Zjg4YjcsIDB4NzQ4ODliNjEsIDB4YTFjY2VhNGQsIDB4YmI3Y2U5OGIsIDB4ZTQyMGM0ZGIsIDB4MTk1ZGQ2MTcsCi0JMHgyM2JmNzExMiwgMHg5ZGEwMGI3MywgMHhmZGYwYzI0NCwgMHg2Y2M3ODdhMywgMHg5OGNiYWVkNCwgMHg4Zjk1YWEyZSwKLQkweDg4ZjhlYTc3LCAweDk5MzgyN2NkLCAweGYzYTJhYThjLCAweDMwNDQwNjliLCAweDRlM2Y5YTJlLCAweGYyYTEyOGU1LAotCTB4NDcyYTdkZjMsIDB4ZDMyMTNkMjEsIDB4MGZmN2U4ZjEsIDB4OGEyNTljYTksIDB4YjE5NjZmOTYsIDB4ZGU0ODNjN2QsCi0JMHg3MjA0OTUxOCwgMHg5NzFjZmQ4MiwgMHgyZjhmYmMxOCwgMHhmZjAwNDIxMSwgMHhhMWRkZDYyZiwgMHg1NDVhN2M4MCwKLQkweDhmNDBhNzZiLCAweGYxYzAyM2NlLCAweDBlNmRkOTE0LCAweDllMTAxNDZkLCAweDJkY2Y4MDFlLCAweGZjODQ4YWM4LAotCTB4OTUzNWEyOTUsIDB4N2VhOGI2ODIsIDB4NmRkZGFlODAsIDB4ODUzMmI0MjQsIDB4NzZiMDVmZDYsIDB4NWQzNzUwZGUsCi0JMHhjY2IzYWRmZiwgMHgxZmVjMjI5OSwgMHg4NGQ4MzdjNCwgMHg5YjA2NGM3YywgMHhkNTk5MDk3MiwgMHg0YzFlNGViYSwKLQkweDkyY2NiNzMzLCAweGI0ZDRlZmRmLCAweGU3ZDdlZDlmLCAweGU3ZDYyZDZmLCAweDZjOTBlNWJiLCAweDQ0YTM3ZDAyLAotCTB4ZGZiNDhkMjAsIDB4ZTVmNGFiZGIsIDB4NDJmMTM4ZWEsIDB4MWYyYmMzMDIsIDB4NmM0OTI3ZWYsIDB4OWE0M2I3YmUsCi0JMHg4OGRkOWYwOSwgMHhkNjZlMzlkNywgMHhlMDRmOWQ1NiwgMHg3MTg0OTkxZSwgMHg0ODFjZWNiZiwgMHhiMTAzZmYxMCwKLQkweGQ2Y2RkZjllLCAweDFjZWY5YzZkLCAweGEwMmJlMmQ5LCAweGI3NzM5OWYzLCAweGNlMzRmMDg4LCAweGRkOWY3M2JmLAotCTB4ZDM0YjFhNjcsIDB4MjA2NTRmZmEsIDB4OGM3YWUzNDEsIDB4ZDRiYjlmZjMsIDB4ZWEzNzFlYjgsIDB4YzY4MmYzNjEsCi0JMHg4YzRlOGNlZiwgMHg5YjY4MTRmNCwgMHg0ZDQzZTAzNCwgMHg2Yjk2OGFiZCwgMHhhMWE4N2MwNiwgMHgzM2NkYjJhZiwKLQkweGQwOTJmOTc1LCAweGEyZmQ1ZDZjLCAweGYyYmE3OWZhLCAweGJhMjViNTQ1LCAweGVlNmIwNWYyLCAweDA1ZTdlNWQwLAotCTB4OWZkNWQ2ZWYsIDB4YWU5OTc0YmIsIDB4ZmJhYWY2ZmMsIDB4MTZiN2U1NzQsIDB4NjdlNWQzYWYsIDB4ZWFlYmQ3ZmIsCi0JMHg1MWFiMzJkZiwgMHgyYmVjMmU1NywgMHhlNTEzYThiOSwgMHg1NGEyZmZhYSwgMHgzNmRmMmJkMCwgMHg5NTQ3YTAxMywKLQkweDM4N2U1NWRlLCAweGU5ODI5ZDU5LCAweGE2MGY2YWU5LCAweDI5NGY4MGNiLCAweGIzNzY5YmZmLCAweGRlNzFiMDM0LAotCTB4MmFlZmMwNDUsIDB4NTVjODRlOWMsIDB4NDY0ZmMwNjksIDB4ZDNjMjM3YmEsIDB4NjdmNGRmNDgsIDB4NDg3ZGFjNzAsCi0JMHg1MjA1Y2I0ZCwgMHg4N2FlNzIwMCwgMHhmN2VhY2ZlZiwgMHgxMjBlNWM3MywgMHg3MmQzMWNiMiwgMHhmOTZkZjE4NSwKLQkweGM0YzlkNGY2LCAweGM4ZjBmOTA1LCAweGZkZmY0NzJhLCAweGQ3MDExNjkyLCAweDFlOGI0MDQxLCAweGQ0YTM3ODA4LAotCTB4NzBlYmMzYWEsIDB4ZjZiYjNjZGQsIDB4MjU3ZTM4OGIsIDB4MDA3OGVlZjAsIDB4MDEzMmMxNTUsIDB4MzA3YzIxZjgsCi0JMHgzMDMxYzZlZCwgMHhjYzcyZGYxZiwgMHhmZGM0MGRiNywgMHg3ZjNhYWJiNywgMHhjMDEyODdjMCwgMHg5M2QzMDBhZiwKLQkweDNkMzBiM2Q1LCAweGY0YzdlZDVlLCAweDRjNjJlYWMzLCAweGMyYWVhZmRmLCAweDI5N2FiM2I0LCAweDgzYWI0N2E2LAotCTB4N2FhNWZlOTgsIDB4NTRlZmE2MGQsIDB4NTZmYTYyZDcsIDB4N2ZhNjNkNzUsIDB4ZGE2MTBlYWUsIDB4NTRjM2VkNWQsCi0JMHgzOTVlZGJhNSwgMHg0YWY1Yzg5OSwgMHgxZGQzZmZhZSwgMHhmOTY3ZjMwMiwgMHg3YmZhNDQ1YSwgMHgzN2EzZjIwNywKLQkweGFjZjFmODA1LCAweGEwOTE4YmUzLCAweGNiN2Q5ZjM3LCAweGVmMmY0MDRjLCAweDdhNDY1ZTBmLCAweGM0YWUxN2U4LAotCTB4NjE0NTdhODcsIDB4YWM4NzBhODgsIDB4MWI1NmU1YmUsIDB4NDRkNTkzYzMsIDB4MWI5NTA5ZjIsIDB4YTRmYzVkZjcsCi0JMHhjYzY4ZmU3NywgMHhkYTAxMjQ0YiwgMHg5ZDMzYmM4NywgMHg0MTFkZmEzMSwgMHhjM2U3NWYxMCwgMHhjNjQ1ZjExMywKLQkweDcxZjE0MGRlLCAweGU1YmZkMWZjLCAweGY4ZTdiZjQwLCAweDI4M2I2NTNlLCAweGMyNDk3ZWUyLCAweDVmMDE3ODRmLAotCTB4ZmVlMWI4MWEsIDB4ZTVjMWQ5MTMsIDB4ZjdlMDc5ZjIsIDB4N2UxNTQwZjEsIDB4YTY4NDY5MWQsIDB4ZDIzNzA0MTMsCi0JMHgzMzU2ZDlkZiwgMHhlZDhlMDA5MSwgMHhmZGExMTBmNiwgMHg4NGY0M2Q5YywgMHhjNWJiZjYwYiwgMHg4N2Y3MjYyOSwKLQkweGE2YTBlMDMxLCAweDZlZTkyZDE1LCAweDY4OWY3Njg3LCAweGQ2Y2ZlN2QzLCAweDI4MmRmOTBhLCAweDM3NzEzZDM3LAotCTB4NzJiYTAxOGQsIDB4MDExYzNmYmIsIDB4NTRjMTRmZjgsIDB4OGE3MTY3ZWQsIDB4MDA3MGZlZTIsIDB4NDVmMThmYzIsCi0JMHgyOWQyM2M3MywgMHhkZWIwZGJiNSwgMHhmZDFlN2IzZiwgMHg0NzlkMTNmNSwgMHhiNjgwZjkyYiwgMHhmODY0NWI0NywKLQkweDNlOTFlZGY5LCAweDUzM2U5NmY4LCAweGVkNGYwMDBhLCAweDlmYjAxN2YyLCAweGVmYmZlOGRiLCAweDEyYmY0MTg2LAotCTB4MDM3ZWQ1ZTYsIDB4ZmNkMDYyMmQsIDB4YWNkZWY4MjMsIDB4ZjNiNjhmMWIsIDB4YjQzMTM2YTgsIDB4MjU1ZTlmZWIsCi0JMHgyN2E1NWM3MiwgMHgwYmZlZGEyYSwgMHhjZTNiNDAzYSwgMHhmZGNiZDZlYSwgMHhkMDNlNWQ3OCwgMHhlZGQ2ZWE5NiwKLQkweGU1MGJmMDAzLCAweDQ4MmM1MjdiLCAweDljZTUyZjQwLCAweGM3MjQ3YTdhLCAweGVmY2U4MTFhLCAweGY0NjFlMDg4LAotCTB4MTU3YWIwMjYsIDB4ZWZjNTRlOTYsIDB4MDBlYzMyNDEsIDB4YWU3ZTYwM2QsIDB4NWI5ZTZmNGEsIDB4Zjk3MmE1ZGUsCi0JMHhlNGM4N2ZkNCwgMHg5YWZmMjg3ZSwgMHhkYTI3MmFjZSwgMHhjNGMwOTUxZiwgMHg3ODBiZjM0NCwgMHhkOTZiN2U2ZSwKLQkweGE3Nzc5MDc0LCAweDVlMWY2YzRjLCAweDYwNWMwYTQ4LCAweGRhOTMxNDk0LCAweDNlNDNkMDFjLCAweGEwN2NhNjI2LAotCTB4ZmZjOThmZmIsIDB4ZWM2OTY1NzYsIDB4MDUyNjExODEsIDB4OGQ2MGIzZTcsIDB4ZmFhNDFmN2UsIDB4NTQ1ZjJlOTMsCi0JMHg5MjE3Y2ZhZiwgMHhjZTgwOTIxYiwgMHgxMjY0ZWIwYiwgMHhmNTFmODAxMiwgMHhjNjI2ODllNSwgMHg2YWE0NDUwZiwKLQkweDJiMGZlYzE1LCAweGRmMzEzZGI4LCAweDc0YzFhNDRkLCAweDFlYmIxNTdlLCAweGU3NDc5OWNiLCAweGM5ODliOTcxLAotCTB4MmViZWQ1NmYsIDB4MmZmMzYwNDksIDB4N2M1NDY5NmQsIDB4ZDY4M2ZjYjQsIDB4NDE1YzlmYWMsIDB4MTU2ODdkYTAsCi0JMHgzYjgyMTlmOCwgMHg0ZjI2ZWYwNCwgMHhkMGZkZmM1ZiwgMHhhYmU3MWJmOSwgMHhlYzdkMWZlZSwgMHg4YThmM2U3YywKLQkweDE0MmY4MmNkLCAweDZmMTkxZjYzLCAweDEzZmVmODEyLCAweDAzNWUzODQ0LCAweDk5ZThkNmViLCAweGE4Mzg3MzM3LAotCTB4ZjI4Njc5ZjksIDB4ZWZmZTQzMGEsIDB4YTI0NGI3YTYsIDB4ODIyM2I3YTMsIDB4NDBkMzY2ZmYsIDB4NWZhMDVmNDYsCi0JMHhmMTQ0NTIwOSwgMHhhN2ZkMjNmZiwgMHg5ZTdmZTlmNCwgMHhiMTNmZGM2OSwgMHhmZmI0MjFmZiwgMHgxNWZmNWQxYywKLQkweDQ3ZmVkNGZmLCAweGRkZmY5OWY0LCAweGQ4YWZmYWIxLCAweDkwNjc3NWI1LCAweGU3ZDI5YmNhLCAweGJhMTE3NjFlLAotCTB4NmE5MjljZmYsIDB4ZmYxNGJjOTMsIDB4YmE1NjliZTUsIDB4NGE0ZTBlODAsIDB4ZjNkMDE3NDEsIDB4MWY5ODkwYTksCi0JMHgzZjU3NjE4YSwgMHgzZTBmNGJkNywgMHgwZjc2MDA4NywgMHgzZmZiNGFmYywgMHgzMzAzZjRmZCwgMHg2MmY5N2Y2MCwKLQkweDdiNDZlYzkzLCAweDZjMzliMzY2LCAweGQ5NWFmY2E2LCAweDhjOWQzMjVhLCAweDk2MzFmY2M1LCAweDA4ODlmZDVmLAotCTB4N2QzZDM2ZjksIDB4NzBmNTNlOTYsIDB4MjhjN2Y4MTIsIDB4M2Y3ZDcwYTUsIDB4NjU1MmZhOGMsIDB4YjA3OTQ3ZDMsCi0JMHgwNDQ4MDRmZiwgMHgwZWQ4Y2NmOSwgMHg4MDk3M2ZjNiwgMHgxMjllNzFmMiwgMHhjZTljYjdkNywgMHgwMGYwZjUxMywKLQkweGY1YTA0Yjg3LCAweGYwNDQ0ZjgxLCAweGU2NGU5MjRkLCAweDJmZDQzNGE3LCAweGM4NGY3YWU2LCAweDRlM2M0Y2U0LAotCTB4NmZmMjNjNTUsIDB4NWU0MGRmZTQsIDB4MjEyMGYwYWEsIDB4YmI4OGY3YTYsIDB4NzYwYjFiMWUsIDB4N2ZkMzU3NmIsCi0JMHg5YzBkMDRiOCwgMHhkYjNiM2U1NCwgMHhlN2YxZTBiMiwgMHhlM2NiZmQzZCwgMHg0NTg3NmU2ZSwgMHg5ZGIwODVkYiwKLQkweDZiZWI4ZGE3LCAweDk3MmQyY2VkLCAweDYzZjAyZWMzLCAweGRlY2EzNzk2LCAweGJlNWNmZDIwLCAweDFmMjc4OWY1LAotCTB4NmRmMjNiMDUsIDB4ZGE2MmY3YjMsIDB4OTdkNmQ5N2YsIDB4ZTY4MTNjZmUsIDB4ODljOWI2Y2IsIDB4MWMzMmQ5ZDMsCi0JMHgyZjE0NTI0MiwgMHg2OTZmZmEwMSwgMHhhNTBmMTQ2NiwgMHhmMTQ5N2ZiZiwgMHhlZmRmNjE4YywgMHhhM2UyODg0ZCwKLQkweDg1N2VkYjZjLCAweDhmMGJlOThjLCAweDk1ZmIyZDI5LCAweGJjMGM0NzRlLCAweDAzY2IxY2I0LCAweGY1ZGM0YWJkLAotCTB4M2Y3ODAyOGQsIDB4YzkyMDRmYjUsIDB4ZDllMDMxZTksIDB4MDdlYTEyZjgsIDB4MjNjNDI3MDAsIDB4ZGUyZjUzYzcsCi0JMHgxNDAzZjUwYywgMHg1NWNmMjAyZiwgMHg5N2NiMTkzYywgMHhmZDAzNzk3MywgMHgzZDIzNDY3OSwgMHhmODNjZmIzZiwKLQkweDdiMzFkZjdkLCAweGNmYzVmZDYxLCAweDc1ODJlOWRlLCAweDE4YWE5MDljLCAweDMyYjYzZjVkLCAweDJkYzc0N2M5LAotCTB4NmU0OTgzOTYsIDB4ZTJmN2Q5NGMsIDB4N2E0MzNmMGQsIDB4NjdmZDdhMmIsIDB4ZjM1ZWNjNDksIDB4NmY3MDlhYTUsCi0JMHhmYWMyYTYwYSwgMHg4Y2RjMzUxNiwgMHg3ZTI0MmJlYiwgMHhjN2UyYmJhNCwgMHg4ZjkwMDJjNCwgMHg3ZjI0NGI5ZiwKLQkweGI4YmUwYzViLCAweDcxN2M2NDU4LCAweGI0NTUyMzYyLCAweGQwNGVmYWU4LCAweGEwZmQwNzZkLCAweDZkMGM1YmZmLAotCTB4MWRjNTdmNDIsIDB4NjdmZmY4MDQsIDB4MmM5YWZmYWEsIDB4MTZlN2ZjYzYsIDB4NGRhZmE3ODYsIDB4YjU0ZjllYWEsCi0JMHgzNmJkMmQzYywgMHhmYzAwZWVhZCwgMHg0YmVhMWU5YywgMHg4MDU3M2YwNiwgMHgwZjBlNDE0OCwgMHhhZmRhM2JlMSwKLQkweDY0YjRmYWY4LCAweDkxZTIxZjg2LCAweGFhM2I3ODcyLCAweGVmODE0YzA3LCAweGY2NDNiZjUwLCAweGRhZWFjNzU5LAotCTB4YTNkMmVmOTEsIDB4ZTNlMTJmZTMsIDB4NjBkYjc5ZDMsIDB4NDQ5MTNlZmYsIDB4YWM2MjViOGEsIDB4ZjJhOGE2NmYsCi0JMHgzNWM3ZGQzZCwgMHg2ZmUxYTVmNCwgMHhmNzRkZWZjNiwgMHhmOTU2ZmUzMSwgMHgxZjMzMzQzZCwgMHg4MzdiM2ZjYSwKLQkweDgzYjQwZmYxLCAweDJiY2U5MWZkLCAweGZiZTU4YzljLCAweDFlNTAxMjZmLCAweDE2Mzg0OTk4LCAweDljYzkzNzVmLAotCTB4MmFlNWY1YWYsIDB4NGI3OWQwOWQsIDB4NWU4NjljNDIsIDB4ODQwNGZmYTAsIDB4MGFiN2ZhM2YsIDB4OGQzYjY4ZWIsCi0JMHg3OGMwMGNiYywgMHhhOWZkYmVhZSwgMHhmOWM0NWI3YywgMHhmOWVhMjNkZiwgMHhiZTMwMzQ5ZiwgMHgwYWJmNWZlZiwKLQkweDJlNTczZWUyLCAweDE0N2M5ZTg3LCAweDY3ZjI5NWY4LCAweDJhZmMwM2QwLCAweGNmYmFjMDE3LCAweGYzZmMxZjM0LAotCTB4OWM5ZjI5NGYsIDB4NTRmOTUxNjksIDB4N2M4ZDNmMmYsIDB4NWM3ZGJjNWEsIDB4YjMzZDNlNGMsIDB4OWYzNjIzMzYsCi0JMHhmOTMxZWZkMiwgMHhkM2UzMmQ3NCwgMHg1M2YyNWJmZiwgMHhjMDNlNWY4NSwgMHhmYzI4ZjJlZiwgMHgxZmQ4Nzk1NCwKLQkweGYwZjI4ZDFjLCAweGUxMDc5MzIzLCAweGY0ODc5NDY5LCAweGQzOTIwZGU3LCAweGJhNTRmZTk3LCAweGY0YWRlOTUzLAotCTB4NDA4YjhhOTksIDB4YTVkMmY0ZWUsIDB4NzRiZDc3NGEsIDB4MWY1ZGQyYTksIDB4N2UwZTg4ZmYsIDB4YTAwNGYyYzYsCi0JMHgwNTI3NGEwNSwgMHgwZGU0OGZiYiwgMHg2ZjJjZjhhNiwgMHhiNDQwZTc2NywgMHhhNzkwY2JkZCwgMHgzNmUxZjI3MCwKLQkweDFlNWY2YTQ2LCAweDg3Y2RhODljLCAweDQzMTZmOTBjLCAweDVmMjE5ZjdkLCAweDM3ZWZhODYwLCAweGY1MGNhYmU0LAotCTB4ZDAzZmNjNDMsIDB4NDgyMTUwNzYsIDB4N2Q1ZDYxMDcsIDB4M2EwOTM5NzksIDB4NTdiNzJmYzEsIDB4ODdhZmZiNDQsCi0JMHg2ZDE1NzljZSwgMHgxZTljZDNkZiwgMHhiMDc5NTIwYSwgMHhlYWVjY2FkMiwgMHgxNTY1NDBjOCwgMHg3NzFlYWZjOCwKLQkweDc5MDA5NWM0LCAweDdiNmJkMzJiLCAweDc4YWUyMjBhLCAweGFjNzg3ZThkLCAweGRiZjk0NDVkLCAweDVhZjkyMjE5LAotCTB4MWY5NDQ1N2YsIDB4OWQ3ZjEwNmEsIDB4ZTY3MmJmYTQsIDB4M2EyNjljNjcsIDB4M2Q4Mjk2ZDIsIDB4YzE3YTJiNTksCi0JMHhlY2I4NWQ0NCwgMHgzY2I4MTcxNiwgMHg1Zjg3ZGE3YSwgMHg1ZjdlOGIzZiwgMHhlM2M0NTg3NCwgMHg2YjliMWU4YiwKLQkweDA0OGJjYzJjLCAweGM2YWE1MjdkLCAweDgyNDkzODJlLCAweDdlMDg5ZGJmLCAweDFmNjY3NmMzLCAweGQwNmI1YzJjLAotCTB4YTQ1YWM4MmIsIDB4MTJjNzQyOGIsIDB4ZDUyMmU0MDUsIDB4ZmJkN2RmZTcsIDB4OTc3ZDE5NGQsIDB4MWI4YWZlZjIsCi0JMHg3YjZhZTVmNCwgMHgzYjAyMzkzOCwgMHg1ZjQ5YjRhZCwgMHhjZTc2ZTdlZSwgMHg2N2JkMmE5MywgMHgxNzk0MGM5MCwKLQkweDdkODBjMDYwLCAweDM0ZWJlNWNkLCAweGIzZjVmNDcxLCAweDBlN2JmYzI4LCAweGU1ZTgwNDg5LCAweGYwODhiYjZjLAotCTB4Y2VjY2RiM2YsIDB4MjA3MDQ5MDksIDB4ODkyNTRkZjIsIDB4ZTE1MzVjYTAsIDB4YTE3YzA1ZDQsIDB4YmE3NzJmZjQsCi0JMHhlNzM1ZmM3NiwgMHg3Y2E1NWExZSwgMHg3ZjYzYmJlNywgMHg5ZGFlZDM0NywgMHgwM2RjOGY2ZiwgMHhhNjZmNWRmOSwKLQkweGQ2ZmE0YmJkLCAweDhhY2ZiMjlmLCAweDdkOWVkOWZlLCAweGU5NGYzYzRlLCAweGRhNmFmYmQ5LCAweDZkZGY5MDNkLAotCTB4N2IzY2MyZjYsIDB4MTYzOTdkZjYsIDB4Yjk2N2E3ZTgsIDB4NTZlNDE4YjksIDB4N2Y4YTUwY2YsIDB4ZmRlY2Q2OWEsCi0JMHhlZTI3NmM3MiwgMHg2ZjEwMmI5MywgMHhkMzBhOGJhZiwgMHg3NmZmZGE3MywgMHg5NDg0NDg1NCwgMHhmZmY2MGFhZSwKLQkweDMzZjQ3NjdkLCAweGEyYjc5ZTA0LCAweGVmNjdhMDdmLCAweGM3N2UzOTk3LCAweDk1M2Q2ZjNmLCAweGM3YTRkY2ZjLAotCTB4ODc2ZDY2NDksIDB4N2YzM2M1ZjksIDB4ZjhjZjYwNzMsIDB4YjljMTk2MjcsIDB4NjU3ZWViNmYsIDB4ZjI5ZjJkMDEsCi0JMHg0MTYzMzdjMiwgMHg2NzZjZjYxZSwgMHhkY2I3NGQ3YSwgMHgwNWNlMDFiOSwgMHhlZWYzNTJmZSwgMHhiOWMyOTkzMiwKLQkweDEwNjI5ODFiLCAweDg2MmJiOTk1LCAweDYyM2EwZTRjLCAweGY0MWJlNWMxLCAweDNjMjg1YzdiLCAweDA2N2ZmZDNlLAotCTB4Zjc5ZTAyMWUsIDB4NDMzYmI3OTUsIDB4ZmRkNjAxMTYsIDB4NDE3N2QxZDUsIDB4MjMzM2VjMGUsIDB4M2RlYmFhNWQsCi0JMHhmNTBjYjJkMywgMHgzYmFkZjM4ZSwgMHhmNWY2NjI0MSwgMHgwYjc1OWNmZiwgMHg3NzU5MGJlMSwgMHg4ZGFmZjQ4NiwKLQkweDA3YTI1ZGVmLCAweDgzZTQ2MmYxLCAweGY3YmU3NGJlLCAweDc1NmZjYzJlLCAweDE3YmU3MTdhLCAweGZmMzNlZjQ4LAotCTB4ODNmZmQ3YzUsIDB4ZTI5ZGJlZjEsIDB4NzVmZTc1ZGQsIDB4YWY4YmZkNTcsIDB4MWZiYzdmYmIsIDB4ZWVmMWMzOWUsCi0JMHhjMGY1NzM4NiwgMHhmY2UwZGYwYiwgMHhhYjljYTg3ZSwgMHhmN2U3MTdmZCwgMHhlYWFmZDZmZSwgMHg3OTMwN2ZlNywKLQkweGY1YTBjOGRlLCAweDAzYWQ0OWYzLCAweDJhNmI4YjE0LCAweGEwY2UxYzBlLCAweDcyMTg3ZmE1LCAweDNiZTYxZTMwLAotCTB4MThjMzlmOTksIDB4MTI1ZmI3ZTcsIDB4YzE2NGZkYjAsIDB4ODkxZDc2ODQsIDB4Yzc1ZGI4MTcsIDB4NWNjMWExZWMsCi0JMHhhNGJjMTg3ZiwgMHhjMTkwZjUxMCwgMHg3YTY0MWU0MywgMHg4M2E5ZTQ4MywgMHhhNDNmYmU3MywgMHhjYzYyZjAyZCwKLQkweGNiN2NjOTAyLCAweDk1Zjc3OTBmLCAweDBiYjdhZjNjLCAweDFmMTAyNzdmLCAweDRlMGU0MTFjLCAweGEwNDNmN2ZiLAotCTB4MjIxOTBlOWYsIDB4NTM0YWZlYTIsIDB4NzQ1ZjViZDQsIDB4ZTVlZmIzZTUsIDB4Yjk3ZWNlOGEsIDB4NjdiN2EzYzYsCi0JMHg3NmY1MTJmMiwgMHhkZmRlNTRjZiwgMHgzZmU2YzIzNCwgMHg0Mjg0MjFjZCwgMHg4NzkzMGUxNCwgMHhmYzExMjZmZSwKLQkweDk2MmY5MzljLCAweDc5ZjM0MDg5LCAweGVjMDJiZmM0LCAweDdkMGVhOTg0LCAweDE5YzE4ZjdmLCAweDU4MGZjNjhjLAotCTB4MTZiYjY5NjQsIDB4YWYxNmRmZmMsIDB4ZDI1ZGZkODAsIDB4NjI3OTQyNjUsIDB4MGU5MDE2YzksIDB4OTg0YmQ1NDYsCi0JMHgxZWU0ZGQ3ZiwgMHg3MTllNzAwNywgMHg3NzMzYWVjNSwgMHhmYTk3ZjAxMywgMHg1MjhmMTYxNCwgMHg1ZmRlZmNjMCwKLQkweDQ0ZGRmNzdmLCAweGYwZTJlMzg4LCAweGFlZmZhMjJiLCAweDAzNmVmZjAzLCAweDdhZThkYjA5LCAweDE4MjQ0OTE3LAotCTB4NGVmZTAwOTcsIDB4ZjNhZmJjODEsIDB4ZjBmM2VhNzcsIDB4NjhhNGUzZjMsIDB4ZGZhYmU3M2YsIDB4YjNmZTFkMWYsCi0JMHhlZTk0NWRkMywgMHhkYmIwYTdkZiwgMHgxYzA4ZTkwZCwgMHg1M2RhZDI1ZSwgMHhlMGNlZDZmZiwgMHg4NDg1NzgxNSwKLQkweDZlZjNiMTg2LCAweDJlNzM0MGIxLCAweGVjY2NhOTc0LCAweGQ5N2Y1ZGVlLCAweGNjZjYwNTllLCAweDcxZDE5ZWE0LAotCTB4YTA0NzFmOGMsIDB4ZmFlMDE5N2UsIDB4ODllMjU5ZTUsIDB4MWY4MDNhZjMsIDB4NzllMWM3ODcsIDB4MTlkMTIxZDcsCi0JMHgwYjZiZGUyYiwgMHg4MTllYjNiNywgMHhmNjlhNTA3MywgMHgxMTVhOTEzNCwgMHg0MTEyN2RmNCwgMHhjOWIwNWRmZiwKLQkweDg4YzUzNjQyLCAweDRkOTQ0ODNiLCAweGUzOWM1Y2ZjLCAweDM5ODhmZThkLCAweGUzNjc4N2UwLCAweGUzNGRhMjJmLAotCTB4OWFlYjc4YjQsIDB4ZGIxYTRhN2UsIDB4ZjNmMDBmMTcsIDB4ZTIxY2U2YmUsIDB4ZDgyZjg1MWYsIDB4MmRkZjAwNzUsCi0JMHg4MmJjY2VkNiwgMHg5MjNiN2MxOCwgMHg4MWM2NmZjMywgMHhiZTllZDBhZiwgMHgwNGQxYmRhYywgMHg5MzU5N2U3YywKLQkweDk2OWU3NzQ5LCAweDNkZmQ3MzI2LCAweGJjYzI2NDkzLCAweDNhYjAxYzY2LCAweDg3MmYwMWIzLCAweGQ5YzQyZjQ0LAotCTB4NTEzZmRhMDUsIDB4ODNjZTMxZmMsIDB4ZmU4NGYwOGMsIDB4OWI3YThmYzEsIDB4ZWQ3ODQ2ZWMsIDB4MDAxNjViOTEsCi0JMHg2YzdjZjc1YywgMHhlZDY3NjAyMSwgMHg2MmNiNmE1NiwgMHgwYTRmZjNjZCwgMHhkMjIyZTc5YiwgMHhmNGQ4ZTc3MiwKLQkweDRlZjgzZDdmLCAweDI3ODQ3MWVhLCAweDQ0ZDJiZDgzLCAweGQyZmJhZjkwLCAweDNlM2E0MTFmLCAweDQwODQ5OWJiLAotCTB4MDM3ZDgzMWUsIDB4MzM2Y2UxNzIsIDB4ODI4MGZkYzEsIDB4ZDNiMDQxZTQsIDB4YTU1ZmJmMjgsIDB4NjkyZmRmYjUsCi0JMHhlYzBjZjZkYiwgMHg4MmVkOTUyMywgMHg5NWNiNWMxYiwgMHhmZTAyYTc1MiwgMHhiYzViNDBiOSwgMHhjMzNiNzIwOCwKLQkweGJhMjFjNmEzLCAweGUxYTRkY2M3LCAweDA5NjRkYjhiLCAweGMyNzA3YmUxLCAweGRjNjE1YjllLCAweDAyMTRiYjRmLAotCTB4YzVlZjlhZmIsIDB4ZmVlNDBiODgsIDB4Yzg1OWVkYTcsIDB4ZWJhZGZkMDcsIDB4ZGFlNGQ1ZjcsIDB4YzNmNDEyYTksCi0JMHgxZTkxOWFlNCwgMHg3NGRiMzc0NiwgMHhmZjQ0MmJmOSwgMHgxOWFmZTAyMCwgMHhkZTI1Y2VlNiwgMHg5NmZiZjgxOCwKLQkweGNiMDVkOWQzLCAweDY3ZmZkMGI3LCAweDU1MGRlZGYyLCAweDAyYzVmOWJlLCAweDJjYmQxZjBkLCAweDIzNTU3ZGIzLAotCTB4Yzk2MzkyZGYsIDB4Mjc4MmM1YjcsIDB4NzhiZWUwMTksIDB4YzA2NGYwZWYsIDB4ZjJjM2UyZWIsIDB4NmRmMjU4YzAsCi0JMHhkZjNiMzU2YiwgMHg4ZmM3OGU3YSwgMHhmOTUyYjRmNiwgMHg3YzhkMjNmNiwgMHgyZGYyYTU2YiwgMHg4YjdmZjljNiwKLQkweGNmNWZmYWFjLCAweGZmNDJkZjIzLCAweDE1YjdmYzNkLCAweGY1OGM1YmU0LCAweDUzZjBlNDFlLCAweGY2ZDhkYmU1LAotCTB4YzZkZjI4NjMsIDB4NzE3NDlhYjYsIDB4ZGNjYmNmOTYsIDB4N2NhZmQ5OWYsIDB4MDRkZTA2MTMsIDB4ZDkyMWQ0ZmEsCi0JMHgzZjQxOGY2YiwgMHhmNmZlYjk1YiwgMHg4MTlmOGYxYywgMHg3ZGNlNDA3MSwgMHhkY2U1MDNmNSwgMHhlNzJhMTczYiwKLQkweGFjZTA5YmZlLCAweDNiYzViOWNhLCAweGY2OWZjNjA4LCAweGU3MjY0M2E1LCAweDcyYTZlZjE2LCAweDY0N2EwMDRlLAotCTB4NWVmMTZlNzIsIDB4MDYzOGZjYzIsIDB4OGZhYTM2ZjksIDB4YmY1ODIzN2MsIDB4MDdkYWNjMzIsIDB4YjkxZmQyZGEsCi0JMHhlOTk3ZjY4ZCwgMHg1YTE2YmQ5MywgMHhlZjJhMzMzZiwgMHhkZGU1NjljNiwgMHhiYmM5ZmQ1NywgMHhlZjI2MTc0MywKLQkweDQ3Nzk3MDc2LCAweDkwMzBkOGU1LCAweGYwZmE0NmFmLCAweDc0ZTNlYmI2LCAweGQxM2Y4Y2Y3LCAweDk3ZTA3YmZjLAotCTB4NjczYzQ1NTcsIDB4Y2VjNGRkN2EsIDB4ZmUzNGZlMDUsIDB4NTdkMDM2NDQsIDB4MzNlNmMyODEsIDB4ZDdmNDYxNDIsCi0JMHhmZWM0MWQ1ZCwgMHhkNmM4YmNhNywgMHhmMTYwZTE1NywgMHg0Y2FkOTViYiwgMHgxNjZjYWMzZiwgMHg2YmZhMWU0MiwKLQkweGYwYWY4NGRlLCAweGFmNjRhOGJjLCAweDdlNjk5MjQwLCAweDI3ZDU5OWE2LCAweDI0ZTdhOTRmLCAweDg2ODY3YTY0LAotCTB4OTZlNjE2MWUsIDB4YTE3NzdmYTEsIDB4YmZlMDJjNDQsIDB4OWRlNDczMmQsIDB4MmNiNjNkMDIsIDB4Y2I3YmY5OTcsCi0JMHhjMzkyZjdmOCwgMHhkZmMwYWI5ZCwgMHhjMDVlYjI1OSwgMHhlZTM1MzI3MywgMHhlY2JmOGQ1MCwgMHhiZWRlNWU3MywKLQkweGM2ODFmZDBjLCAweDNjMTlmMzczLCAweDMzYzY2NjRlLCAweGM2MzFhODQyLCAweDY2ZDk3ZmI5LCAweGE3MWE3ZTdkLAotCTB4Mjc2Mjk5ZTcsIDB4MjZiYzhiYzIsIDB4ZTBjNTM3N2EsIDB4MmY1ZWI1MWYsIDB4Mzg3MTBlOWMsIDB4OWZiODg5MzUsCi0JMHhjMjg5YzJmNiwgMHgxN2RlOTNjZCwgMHhkM2QzMTQ0ZSwgMHg3MGEyOTIzMywgMHhhZTk1NzkyOSwgMHhmNWZmYmIzNywKLQkweGFlMzM3MGFhLCAweDk2NzdmNTViLCAweDgzZmE3ZWYxLCAweDNlZTcwYTgzLCAweDI3NzBlN2ViLCAweGQyNzI4NDI0LAotCTB4OTVhYjhmMDgsIDB4MTY2ODNmNWUsIDB4YmE1MGE3YzQsIDB4ZmMxMzM5NDEsIDB4MGQ3MTg4YTMsIDB4ZDYyZTkzMDUsCi0JMHg4ZWI4NDNkZCwgMHhlZDU2NGZkMywgMHg4YzcwMjlhNCwgMHg3ZGUyMTMzZCwgMHhmZWFkZGNlMSwgMHg2ZTIxOTc4ZSwKLQkweDllNWJkYzZmLCAweGFmNGVkODRjLCAweGMzZjY2MDk4LCAweDZiMTZkYmY5LCAweDRhYTBlNTA0LCAweDg3NDA4ZDg3LAotCTB4ZjBmN2FlMTQsIDB4YWEwY2Y2N2UsIDB4NjE3NjhjOWEsIDB4M2QwNmUwOWIsIDB4MjJiNjEwMjQsIDB4YWUxNDAzNWMsCi0JMHgyMDI0MmY3MCwgMHgyODA2ZmMzMSwgMHgxZGZmMDIzZCwgMHg4MzA1ZmY1YywgMHgwM2MxNWVlMywgMHg3NTNjODBmZSwKLQkweGQwYmMwMmJmLCAweDBjZWQ1OWZhLCAweDgwOTA4MTJmLCAweDExMjZjOTc4LCAweGQ2NTdiYmY0LCAweGMwMzBkZTBiLAotCTB4ZTExMWFkYWYsIDB4ZmE2N2NhYTcsIDB4NDllMmQwZTMsIDB4MmM1MmJmNDMsIDB4OWE0YWM1ZmEsIDB4ZDc4Y2IyZmQsCi0JMHhmZGFlNjE5YiwgMHg4Y2YzZDAzMywgMHg4OGQyNjRhNywgMHg3ZGZmYTZlMCwgMHgyNzlmM2QxZiwgMHhhNzg4YzNmZSwKLQkweGI2YmMzOWM3LCAweDAwMWQzYzAyLCAweGJiZDMwOGI3LCAweDNkZTE1ZmMyLCAweDIwM2NiNTE1LCAweDljZjA3NTA1LAotCTB4ZWZiOWU4ZjIsIDB4MTUzOGQ3ODUsIDB4MjBjNzQwNWUsIDB4ODllN2RhZGYsIDB4MTM2YzJmOTAsIDB4YmVmNDgwYzgsCi0JMHgzMDczODVlYiwgMHhlYzk3YmYyZCwgMHg3ZmZhYzYzZCwgMHgxODkyZjA0YywgMHhiYTYwYmVlYiwgMHg4YjllODdlZSwKLQkweDdmODJkZDI5LCAweDM2YmEzZmJkLCAweGUxNTFhOWMyLCAweGU3YTcyNmZiLCAweGFmMjM1OTNmLCAweGVmM2QwMTY0LAotCTB4NDljZjkwMTUsIDB4M2NlZWJjN2IsIDB4ZjRjMmJmNmIsIDB4NGE1NjJkODgsIDB4OTFkZDc0ZjcsIDB4YTM3N2IyYzMsCi0JMHhkODNjYWZhNywgMHhmNjBiZTFjZSwgMHhkMDFlZjY4MywgMHg4ODEwYjBhNSwgMHhjMTZjZGMwZiwgMHhjNzljMmYzOCwKLQkweDZhOWZhNjMwLCAweDJiNTZmM2U1LCAweDc2NTM3ODE5LCAweDc5ODdmZGZmLCAweDQ3ZTlmZGZmLCAweDhjMGM3ZTZhLAotCTB4NmRjZDcxMDcsIDB4ZDE1MWJjNzQsIDB4ODNmYjhjZjEsIDB4NmY5ZmY3NmEsIDB4Mzk3MmFmNWQsIDB4NGJhZWY3ZjcsCi0JMHhjNjg3ZTcxZCwgMHgwNzQ4MDRjMSwgMHg4NzhkNTVlMiwgMHhjN2Y4MjIzOSwgMHhlNWNmYTBjOCwgMHhhZTNlOTIwYiwKLQkweGQ2ZTVjMjJjLCAweDFmZmZkYzNmLCAweDkyN2ZhZmJmLCAweDRlN2JjNmUyLCAweGVmZDViYTc3LCAweDAyY2ZhNDZlLAotCTB4NDFlN2UxMzcsIDB4N2Q4NGRmMTMsIDB4M2IxZjUzZmYsIDB4OTEzNmNhZjcsIDB4ZmY2MTEzMjMsIDB4YTAxMzJjOTgsCi0JMHg5MTVmNGZhYiwgMHhlOWY5NmZkMSwgMHg3OTY3MTY1NCwgMHgyNTA3YWJmZCwgMHhjZjVjZGQ3MCwgMHhmNWM4YTE2MiwKLQkweGIzYjQwNGUzLCAweGM3YWU4NzVlLCAweDIxNmUxZTgzLCAweGJmMDg5MWJlLCAweDk1NGZiODJjLCAweGM1M2I1NGQxLAotCTB4NzMzYWY5NDMsIDB4NTIwNmE4NzMsIDB4ZTI0ODk0ZWYsIDB4OTM2ZjAwOWYsIDB4ZWI3ODAyNDQsIDB4ZTI5ODBkZjAsCi0JMHgzZjNiZjlhMCwgMHgzMmUwMTkyMiwgMHhiNjAxZmFhMywgMHgwNjQ0M2NjZiwgMHhiZTA5YmQ0MiwgMHg4Y2M2Njg4MSwKLQkweDhkZWNmZDZmLCAweGM2M2NlOTFiLCAweDNkN2EyMmJmLCAweDgzY2NkZWI0LCAweGZhYTEwNzBlLCAweDEzMDZhOGY0LAotCTB4MzVlMDZiZjEsIDB4YzA2YTg0ODEsIDB4NDNmZTM0NmYsIDB4ZWYzMDhkZGYsIDB4NDBlZmFhNjIsIDB4N2I3MTdlZmMsCi0JMHhmMjBiOGQ2MywgMHgwZmI2MDIwZCwgMHgyZTc5ZmQwNCwgMHhmNWFkOWViYSwgMHgwZTVkZTQ5ZiwgMHg4M2Q2ODE3MiwKLQkweGFjMGQwMjZlLCAweGYwNDlhMDVlLCAweDYxNmE0ODQyLCAweGU1MDUzYWZiLCAweDE3ODA5MzQ2LCAweDA0ODZiNmJkLAotCTB4ODZmZDYxNjIsIDB4YWRkZmI0MmMsIDB4MzY3ZGI0MGQsIDB4M2RiNDVmZWMsIDB4YzlmNGRiZjQsIDB4ZGM4MjM3MWIsCi0JMHhmNmM0ZjNhMSwgMHhiNjNjZWNjZCwgMHgwMGYzYjY5MCwgMHg4MWRkMzRiZiwgMHgwODM0OTVmZCwgMHgxNDE5ZWUwNCwKLQkweGE5N2RiMzM3LCAweDBiZDkxNWY4LCAweGQ3ZmJhZGU1LCAweDlkM2I3ZWUzLCAweDBlOWE5NzhlLCAweDJhNzg1MGZiLAotCTB4MTJjOGQ3ZGUsIDB4NmQ4Zjc4ZGMsIDB4NWZjNDUwZmEsIDB4MjNmODYxMGYsIDB4MWM5ODQzODksIDB4ZGI5ZTc4MTMsCi0JMHhmN2RlYWEzZCwgMHhlNDMwZjMyYiwgMHgzMmVmNDI4MywgMHhlN2VkMDA2NSwgMHhkMzAzYjk0ZiwgMHg5ZjU3NDg0ZCwKLQkweDdkYTdhMDI4LCAweGE3ZWRlMTQ4LCAweGM3OWQ3ZWYwLCAweGZkY2MxYzI5LCAweGVjZDRlOTQwLCAweGUxZTZjZDhiLAotCTB4ZGI2MTdlZDgsIDB4NWE3ZjhjMjQsIDB4ZmNmMDBhNDQsIDB4YTY3OGM2N2UsIDB4YTU3NmJlNmYsIDB4YmFmZTA0MzUsCi0JMHgxMGM4ZTRkNywgMHg0YWYwN2VmOCwgMHhkZWVmN2UzMywgMHhmNzcwZTRjYSwgMHhjZmY0NGVkMCwgMHgwOTkwNjg5ZSwKLQkweDY5YTgyZmRjLCAweDljNWU1MTEwLCAweGJjZjE5NjY4LCAweDQ2NGM3YzVhLCAweDk1YjQ1ZGI5LCAweDFiMDcxZmU5LAotCTB4NDAyN2JmNTgsIDB4MzkzZjAzNmYsIDB4ZDE3Y2QzOTQsIDB4ZmJkYjgxMTYsIDB4ZjZhYjRlNGMsIDB4OWQ5YmExNjcsCi0JMHhiNzcyYWJiYiwgMHhjZmJiYWY4MiwgMHg0Y2I3NTQzZSwgMHhjYTM1OTIwMSwgMHg4ZjJlMGFkYiwgMHgwMmE0YTk0YiwKLQkweGRkY2EzMzQyLCAweDc1NzczODBhLCAweGUzMWE1ZjAxLCAweDNiNTExYzgzLCAweGZjMjBlODA2LCAweGU1NzVkMjE1LAotCTB4M2IwMTMyMmIsIDB4MmJhMGY4NDYsIDB4NmE3ZGU2MGYsIDB4ZWU3ZTgwYWYsIDB4MGY4MmVkZjEsIDB4ZGY4YmJkY2UsCi0JMHhmZjUwODczMiwgMHhmYjliY2QwZSwgMHhkZTVmZDgwYiwgMHg1NTA4MTMzNiwgMHhhMDc4MGUzZCwgMHgxY2Q3MmE3MiwKLQkweGU4NmZjYmY5LCAweDViYWY1M2Y3LCAweGQyODQxMjIwLCAweGJiODQzY2NkLCAweGJkOTlkZjFhLCAweDY0NzFjNTg5LAotCTB4MDQ5NzVlYmYsIDB4ZDRjOTJjZjcsIDB4OGEwNzI4MDEsIDB4ZDdlMjQ1ZWEsIDB4ODI1Mzg5YzgsIDB4YjI5ZmM2ZWYsCi0JMHg4ZGFkYzFmZCwgMHg2YTU2Y2NlMywgMHgzZDdmNjEwYiwgMHhkMWYyNjY2YSwgMHhkODg2NDliMywgMHhjY2QyYjIwOCwKLQkweDBmYjUzNGU0LCAweDY0YjJmZTMwLCAweDQ1MjRiYWY3LCAweDdiMjUwNzQzLCAweGY0ODkyNWQ3LCAweDA3MWUyYWZiLAotCTB4MmJmYjAzNTEsIDB4YjBhMjU3NmQsIDB4MDlmNjRhNzEsIDB4MzhjZDQ2ZWUsIDB4YmY2YTNmNmEsIDB4NmVkNjZlY2EsCi0JMHhmNjk2NWVmOCwgMHhjYzA5N2ZkNywgMHhiOWY5ZDcwZiwgMHhkOGMyZjIwMiwgMHhmYmYxOWY0ZiwgMHgzZmY3MjdlOSwKLQkweDc0MDlkNWNmLCAweDg5YWZiOTVlLCAweGZiOWNhNDE4LCAweGRhZTFmNGMxLCAweDU1MzUwMDczLCAweGRlNzIxNWUzLAotCTB4MDY5ZjExMzAsIDB4YjE3ZmI5N2UsIDB4ZGYwNjlmMTEsIDB4ZGYyOGUzYWQsIDB4ZDc1ZGZjNTMsIDB4MDJhYzg0MjYsCi0JMHgxNTI5OGZlNCwgMHgwMzc3OThkOSwgMHhmZjcyNTc5ZiwgMHg3NjU0ZTU3MywgMHhmMTlhZDNiZSwgMHhmYmUwMGFmYSwKLQkweGQyMDJkOWU5LCAweDk1ZmEwOTAzLCAweGFmYTg4OTAxLCAweGI4Y2UyMDc5LCAweDJmYjU5YjI4LCAweDFmODFlZGEyLAotCTB4ZmUzM2Q3NWIsIDB4MDNjMjcyYTQsIDB4NjFiMmE0NzIsIDB4NmZkNjFlNWQsIDB4N2ZkMDNjMTIsIDB4ZDQzY2UzNmIsCi0JMHg0NTczOGE0NywgMHhjNzRkZTU4MiwgMHg2ZTJhM2Y1MCwgMHg3YzA4OTYzYiwgMHgwZWI2Zjk0YywgMHg4OWNhODFmNCwKLQkweDcxYzgzNzY2LCAweGZlNTUxZjk1LCAweDA1Yzc4ZDdlLCAweDBjN2I4YjEzLCAweDAwNjdlM2M0LCAweGNiZWMwZGYzLAotCTB4NGMyYmUyZDcsIDB4MTk5YTA3YWUsIDB4MTk3MjA2M2YsIDB4NTViNmJlYmYsIDB4MDg1ZTE1ODYsIDB4OWYzZjIzN2YsCi0JMHg1NWY4Y2NkOCwgMHgzY2U2ZWM3YywgMHhiNDVjYTdiOCwgMHgxY2E3YzU4OSwgMHg4MGEyOTg2YywgMHgyNDIyN2QzZSwKLQkweDk3ZDM3ZWUwLCAweDZhZGU5OWJmLCAweDgxMWFlZmU0LCAweDU0M2Y3YmVkLCAweDViZjk1NGJmLCAweDczZmE2M2U1LAotCTB4NGU1NzhjMWQsIDB4YjVlZTE0ZjksIDB4ODY3YWY5MTksIDB4M2JlN2YyZGMsIDB4N2ZhZjdjZTksIDB4Y2U4N2FlOTYsCi0JMHhlZjhmY2E3NywgMHhlNDZhNzU3NiwgMHg0MTI3Y2QyNCwgMHg3MTYyNTBiZSwgMHhhOTVjYWEzYywgMHhkN2JjNTg5MCwKLQkweDYxOWY5ZTBmLCAweDdhY2QxYmZjLCAweDczNGFjOGZmLCAweDZlNmI4YjNjLCAweGNmZWU5MTkyLCAweGY4N2Q5ZmM3LAotCTB4ZjNmOTAyZWMsIDB4N2NlYWY5NDIsIDB4MmY4ZWE5ZmMsIDB4YjNmN2Q1ZWUsIDB4YjE5YmQzOTIsIDB4ZDcwYTZlYmYsCi0JMHgxZmViODUzMCwgMHhiOGMwOWY5YSwgMHgzZTlmOGZiMSwgMHg1M2YwMDMzNiwgMHgzOWQyODdiNiwgMHg5M2IzNTdkMCwKLQkweDQ5Y2U0MTg0LCAweDRhYWZkYzIxLCAweGM2MWY0NTViLCAweDljZTE0YWJmLCAweDNlNWE5ZDFiLCAweDY1M2U3MTY2LAotCTB4OWU5MTM5Y2YsIDB4NDM5YmI3NGEsIDB4ZDJmYjY5ZDMsIDB4YzU4YzFmOWQsIDB4MTFlNThiYjgsIDB4M2UwYTQzOGMsCi0JMHg2MGU1ZjVjZCwgMHg4M2UwNThlNywgMHgxYmM1ODk1MiwgMHgwMGMyZTUxOSwgMHhlODY3M2IwYiwgMHgwNTlmNmRkYSwKLQkweGIzMzYxM2ViLCAweDJkYTVmZDdiLCAweGNkNjZjOGI3LCAweDIyY2Q4NGI5LCAweDFjZjBmNWFiLCAweDE4ZTk0ODMwLAotCTB4ZmNjMjU1ZWUsIDB4ZDVjOWY3YjQsIDB4MmRhZWEzMzgsIDB4YjY5NDRlNGMsIDB4OTYwNzY4YzksIDB4MGRkNmRlNmUsCi0JMHg2ZmE1YTM3MSwgMHgxNWRmZDE5OSwgMHhjNjA5ZmNkOCwgMHg2ZTc5NGZjMSwgMHgwMjUzZmEyYiwgMHhmY2VlYTI2ZCwKLQkweGRlYmM0ZmFjLCAweDg2NmMzMTY2LCAweDBhZDZiMzc4LCAweGY5YTNlZjNjLCAweDg5NmY5ODYzLCAweGJlN2FiNzFkLAotCTB4ZTdiMmIyYjgsIDB4NTIwY2VlZjYsIDB4ZmVmZDk2MTAsIDB4OTdjODE3MjksIDB4NWM5YjFkZDMsIDB4ZjliN2I3MTgsCi0JMHhmYjY1ZTNmYiwgMHhkY2I1ZTdjNCwgMHg3OWYxYmRmNywgMHhjYTE3ZTFhNywgMHg4NjJkMTMzOCwgMHgwM2NkYzZmOCwKLQkweGYzYTQ4ZjUwLCAweDcxODgyOWNiLCAweDk3YWJkMWNlLCAweDAzN2NmZDZmLCAweDZkNzc4ZmM0LCAweGU2MDFiMzNmLAotCTB4YTdlZGZlNWIsIDB4ODg3ZTIwMWIsIDB4N2VlMmIzZWMsIDB4MDhmYTc4MTcsIDB4ZWRhYWRmYzYsIDB4N2VlMTYyN2UsCi0JMHg2MTRmMmQ4ZiwgMHhkYmY3NzJkYywgMHhkNmY0MmY2NiwgMHgxYTQ0ZjdiZCwgMHg2Zjc1OGZjNCwgMHhmYzA5MmFmYiwKLQkweDRlZjY0Yjk2LCAweDkyZWViZjQzLCAweDQ5OTI1MzFkLCAweDRkNDJmZDhjLCAweDE3NDM2ZTgxLCAweGM0NmQzNzEwLAotCTB4ODNkNmMxZDcsIDB4MzFmNGU3MTgsIDB4YmZjODM3YzUsIDB4OTZjYjc4ZGUsIDB4ZWFiZjE2MGEsIDB4Y2Q5NjcxZTEsCi0JMHhmYmQzZTNiMSwgMHhkZWI2NTVjNCwgMHgyMDk1ZmQ3OCwgMHhmZTk5NWJmNywgMHhjYWY4ZGU3OCwgMHg3ZjFlMjgzNywKLQkweDZiZjgwMTc0LCAweGIxMDJmZDU2LCAweGZjMzFmN2YxLCAweDc2ZTIxZTMyLCAweGJjZmJmOGY1LCAweDhmZTNkMTc1LAotCTB4ODBlYjU5NDIsIDB4YzMyYmUzN2UsIDB4MzUzNzAwMTcsIDB4YzU5MjdkZmUsIDB4YmUwMTZkNTcsIDB4YzYwY2ZlZDksCi0JMHhhNmRlMDJiMywgMHhmOWZmNjA3YiwgMHgwZGVlMGQzYywgMHg3MzIzOTQ5YywgMHg1ZWQ5M2VmMCwgMHgwOWUyMWJiMywKLQkweDg5YmVmNzRiLCAweGUzYmRkM2ZjLCAweDEzNDNmNDc1LCAweDRkZGU4NzFlLCAweGRjNTg3ZjdhLCAweGQ5ZDdjMGIwLAotCTB4OTk3MTY0ZTQsIDB4YjcxMGZlMWMsIDB4NzdlMTcxZTksIDB4ZThjOTlmMWUsIDB4ZWNkYjhkNTgsIDB4YTc3MzVlMmYsCi0JMHg2YWQ5ZTk4NSwgMHhkMzQ1N2U1YywgMHgzMWZlM2NiYiwgMHgxNzIxMmY4YSwgMHg3YmVjNzRmMCwgMHg3MGE4MTFlZiwKLQkweDFjMzk3MzcwLCAweDFkOGUzZjhkLCAweGE3MWJkYjE3LCAweGY4MDVmMWNlLCAweDM3YTg3ZDgzLCAweDg3ZTY5OGJlLAotCTB4ZThkZmEyNjQsIDB4MWU0MzEyNGQsIDB4YjhiMjM3NzQsIDB4N2Y1OTZlZTUsIDB4MWY4YTMzZGYsIDB4Y2RiYzhmMTYsCi0JMHgwYmExYTdjOCwgMHhkZjNlNDM4YiwgMHg3YzI4N2ZmYywgMHgzM2YyODIzNiwgMHhiYTljMmZiMCwgMHhjNzJkOGViZSwKLQkweGZmN2NlMGRmLCAweDU5NjdkZjc3LCAweGIzZWYxODI4LCAweDYzZDAyN2ZjLCAweDA1MzFlYjQ1LCAweDNiNWVlMGVjLAotCTB4OGJiN2FmOWIsIDB4OWViYmQ1ZmIsIDB4NzU5ZTMxMTYsIDB4OTQ0MWNiNTUsIDB4NTE3OTQ2ZTMsIDB4YzQ1OGVmMDksCi0JMHgwYjcxZWY5OCwgMHhkOGRiYzNkNywgMHhkZGI1ZDEzZSwgMHg3ZWQwNzIxOSwgMHg0NmVjMGViYSwgMHgzZTZjYWU3YSwKLQkweGUwOWM0MGE2LCAweGFmN2Y5YmNiLCAweGM2MjlmM2IwLCAweDg0NGZiMDNmLCAweDdhZWZmMzM0LCAweDE2NThmZjc2LAotCTB4ZjhmY2NkNmYsIDB4ZTMzZTcxYzYsIDB4NjNkYTA0ZTMsIDB4ZmU2ODEzOGYsIDB4NTk0ZTM3NDQsIDB4M2I3MTQ1YjAsCi0JMHg2OWRlM2ZjZSwgMHhmNDBiNzdjOSwgMHhlOTgzYmE3NywgMHhjNDViYTc4MywgMHhiOWY3NThmYywgMHg2NmZiZTRkZSwKLQkweDc0M2Q3YmVmLCAweDQxNzdjNGJmLCAweDEwMWRlYzljLCAweGZkNDM2NWQxLCAweGY3MzM4OTcyLCAweDQ4NDRiOGFkLAotCTB4YTllZjhjMTUsIDB4ODFlM2M2NTksIDB4MDE0ZGU5N2UsIDB4YWYzOGQ3N2MsIDB4OTVkZjMwMjUsIDB4OWY4ZDVmMDAsCi0JMHgwOWZiNzY0NywgMHg0YTcyYTVlOCwgMHgxNWY4MzY0MSwgMHg0OTQ2ZjI4YywgMHgwNjkwOTEzNCwgMHhmOTljNGJmZiwKLQkweGVmM2MxZWM5LCAweDdjMDEwZjA4LCAweDIxMzhjZDFlLCAweDE5ZWZiZjQzLCAweDQ5ZWY1NGZjLCAweDlkMzI1NTY0LAotCTB4YzE0MTdiZGYsIDB4NGJmNjhjYmIsIDB4Njg2MGZlYmUsIDB4ZmY2ZmIzODEsIDB4YWY3ZmRlNmEsIDB4NTUyYmYzYTgsCi0JMHhjMTQ3MjM5YSwgMHg1ODJmMjEyZSwgMHhkYzQxYmUzMSwgMHgxN2Y3YzU2NywgMHhiOGFjMWIwMiwgMHhiZTNiODNkZSwKLQkweGViZjUxMjdjLCAweDlkODRjZGM3LCAweDg1ZWI1MGZiLCAweDliOTE1ZmQyLCAweGM3NjI3MWY1LCAweDA2ZmUxYjk3LAotCTB4YTYzNDMzZmEsIDB4YTA2ZDE3ZTMsIDB4Njg2ZWMxZjUsIDB4ZDM5ZGEzYjYsIDB4MmM2ZTNkYjMsIDB4NWU4YTQ1ZjgsCi0JMHhjODA2NjdiOCwgMHhhMzNiMjJiMywgMHg5MmU3YTJjNywgMHhiZmI0MzU0MywgMHhmZTU5MDNlMywgMHg3OGExZDZmOCwKLQkweGJiNmNiZmRmLCAweDBmMGNlMzEzLCAweDA5NTVkOGVlLCAweDczZjc1MmZiLCAweDUyZmIwMjc2LCAweGNmNWMwYmY3LAotCTB4MWZiZjg2N2YsIDB4YjQ3YjJmNTQsIDB4NDQyNWM2ZjEsIDB4NzFlZjY4ZjIsIDB4OTU5ZTQxOTQsIDB4ZmMxMDdkZTMsCi0JMHgwNDdjZTFjOSwgMHgzOGI2YWFmZSwgMHhmNTQxZmZiYywgMHgxZjNmNWQ1ZiwgMHhiY2JiOTFjYiwgMHg0MWMxYzc0OCwKLQkweDc4NGJkZWVjLCAweDYzMDNjODEwLCAweDRhZmNiNTNkLCAweDhmN2UzMGViLCAweDQ0NzNiNjk4LCAweDQ4OTQwN2ViLAotCTB4MGVkN2NiMjEsIDB4MDNhNGYyNjIsIDB4NjU2YjVmZWIsIDB4Zjc5NmFmZmMsIDB4Y2ZkNTk3ZWQsIDB4ZDVkMzBlYjcsCi0JMHhmMjU3ZGI1MywgMHhmNDhjNDFmNywgMHhlMDU1YjM3YiwgMHgyZTZmYzFmZSwgMHg0NWZlZjU4OSwgMHhmN2UzZjk4YywKLQkweDY4MjQwOTlmLCAweDliNjUzZDAyLCAweDgyMjVkZjE1LCAweGRmMTBmMzdiLCAweGU3NjE1M2JlLCAweDMwYWVlNTVhLAotCTB4ODdiMjNmYmUsIDB4NWI3MmUzY2IsIDB4MTk0M2RmMTgsIDB4ZjUwMWU3YzQsIDB4OWQyYzRmMjEsIDB4NTZiYmUyY2YsCi0JMHhkZTA0YWNiYiwgMHhjMTc4YTljNywgMHg1NzdjMDNlOSwgMHhmOGYyZmNlYywgMHg4ZTIxYjJlZiwgMHhkNDcxOGVjZCwKLQkweDFjZmMyZjE1LCAweDFjYzJhMGU5LCAweDEwZmMwMzllLCAweDFiMjY2NmQ5LCAweDFkYjdjZjgxLCAweGVkN2UwMzRlLAotCTB4MDk2OWMzOTIsIDB4NTc1ZTczZGYsIDB4YmMzNjYyZDEsIDB4NzFkNmMwMWYsIDB4MGFmZWJhYmEsIDB4ZGVhY2U3YjgsCi0JMHg0N2VkMmNhNywgMHg2NTZiM2NjZSwgMHg1ODVmZTg3ZSwgMHg3OGFkNGI3ZCwgMHg2NzdmYWRhZSwgMHhhY2Y1NzRlNywKLQkweGFmNTdiODJjLCAweGM0YjUyZmQ2LCAweGFkNmI4Yjk2LCAweDRmNzYzZmYyLCAweDVlZTdkMWQ4LCAweDQwZWI1YWUyLAotCTB4OTIzYTYzZDAsIDB4NDk1M2VmYzAsIDB4ZTc5MDZlZjUsIDB4ODdkMzliYTUsIDB4ODBlMDlmODAsIDB4ZWU3N2JkNTUsCi0JMHhlOGZkODM4OSwgMHg3YjQxZWM4MCwgMHgzZWVkNTIxYSwgMHg5YmRhYjI3MywgMHhmZjAwOGQyNSwgMHg4OTJjYThjZCwKLQkweGYxYTdhM2FlLCAweDA0NDFjMjkzLCAweGIzYWQwZWUyLCAweDBkYmRjOTYyLCAweGEzYzIzYjU2LCAweGM1ZjY2MmQ0LAotCTB4MGNmOGQ3YmEsIDB4YzEwN2Q3YTcsIDB4YzZjNzFmZTgsIDB4Yzc1MGZlMDMsIDB4NTA4NzIwM2QsIDB4NzliNzBmMGUsCi0JMHgyZWQ0M2Y1OCwgMHg5YjY1ZWY4MiwgMHhkZWU5Njc2NywgMHhiMTZhOTBjNSwgMHg4NDUzZTUxZSwgMHg1M2E5MDk2NywKLQkweDViZjIzNWIyLCAweDY5NjRhZjFkLCAweDA1OTQ5Njc2LCAweGVhZmZhNWRmLCAweDhhMzE1N2E1LCAweDQ0NGMxMjY3LAotCTB4MzBlMjUwYmQsIDB4YmFhOTc1MjYsIDB4NWM5MjA0ZmIsIDB4MjlmODAxNjAsIDB4ODkyZGMwYTQsIDB4YzhiNTJhNDAsCi0JMHg4MmQyMzZlZiwgMHg1YmFhODNhOSwgMHgyYWE4ZmRlYywgMHg2NGYyNzIwMiwgMHgwNDE3YmJlZiwgMHhlZWJjMjhkMywKLQkweDFjMWZiOTQ2LCAweGU5YzVjODRhLCAweDEzZGZmZjcwLCAweGFmYzBkNmU3LCAweGY5YzJlYWNkLCAweGMyMmFhNTk4LAotCTB4Mzc3NGM1ZTQsIDB4ZDA0MjIzZTgsIDB4ZjRhM2JlNGYsIDB4OWY5ZDUzNTQsIDB4N2Y0OGY0MDUsIDB4MGNmZjcwN2MsCi0JMHgzZjNhMGY0ZCwgMHhhZmU1ZmI5NywgMHg3NGEyMGY0MCwgMHhmYjU5ZGVjYSwgMHg1MGQ1MDkzMSwgMHgyOGY4NDMxMCwKLQkweDEzMjc1NWZhLCAweDlhZDgzZWY2LCAweGRlZDY4OGI3LCAweDZmZTcyYmY4LCAweDcyOGZkYzEyLCAweDNmYTI0MWNjLAotCTB4YjEwNzlhMTEsIDB4MjZiNmYyMGEsIDB4Mzg1Y2RiZWUsIDB4NDliODc0NDcsIDB4YmI0MmY0MTgsIDB4MzRlZDg0ODMsCi0JMHg0ZTk2OGM3NSwgMHg5NWRmZjk2YiwgMHgzYTFhZjM0ZCwgMHg5N2Q0NGY3NSwgMHhjYTgyZjkxYiwgMHgyZGI4YzMzNSwKLQkweGVmZGEzZjA4LCAweDNmN2U4NjY3LCAweGQ5ZmJmNDMzLCAweGMyYWJmNWY3LCAweGU4ZDk2MDI5LCAweDU2MDlmNzg1LAotCTB4Yjg3MDE3NTYsIDB4MWMyY2YxYjEsIDB4YTMzZTE0NmUsIDB4NjIzMzdkZTAsIDB4NzlmOTc5YjIsIDB4YzZkNWMyMzgsCi0JMHhmYTg2NjM2NywgMHg2YzgzYWYxNCwgMHgwN2E3MDhlOSwgMHgyMDQ1ZjZlMiwgMHhkNjI0OTY2ZSwgMHg1NzdiYjAxMywKLQkweGE2OWY2YzA4LCAweDRkMGUwNTNmLCAweDIwYjZlMjNiLCAweGM3YzdkZTFmLCAweGY0NjM2NDE5LCAweGVmNWJkZWFlLAotCTB4ZTc4YWRmNWIsIDB4NWJlYTdkMWEsIDB4OGI2ZmFiZmIsIDB4ZGZkOWRmNWQsIDB4ZTczMWVjN2MsIDB4NGNlNTQzZjMsCi0JMHhmZTZmMGJlNSwgMHg3YjYxY2UwOSwgMHg4MjliOGRlNSwgMHg2ZjI3NDczMiwgMHg5YzI4ZDkwNiwgMHg3ZjhmZTIyYSwKLQkweDk4NWY4OWRiLCAweGEyMTk2OGRlLCAweGU4MGQ5ZmM3LCAweDZkOGZkMjk1LCAweDExYmJmZTg0LCAweGNiZDFmZGVmLAotCTB4OWEwZWJlM2MsIDB4NzVkMmE0NzcsIDB4M2Y4Zjk0ZmQsIDB4NjM5ZDg5YjUsIDB4Zjk4NGI2ZGYsIDB4ZTdiOWE4ZGQsCi0JMHhmMmI3ZmE4MywgMHgxNGI1M2ZmYSwgMHgxOGUwZmZhMSwgMHhiNmU5MTc3ZiwgMHhkZTE3YTY3YSwgMHhlNzg4YWY3NiwKLQkweGZkZGU3ZGNkLCAweGZmMjg1ZjgxLCAweDA4NTRiZWRjLCAweGJkNjNkMzg1LCAweGUwOWE0NDYzLCAweDNlNWNkNDdlLAotCTB4MjA1ZGYxYmUsIDB4YWRlNGYxM2YsIDB4MGJiZDYzMTEsIDB4YmQ0Y2U4YzQsIDB4NmY3YzY1NTcsIDB4ZTAyOTIxNjAsCi0JMHhiZmU5M2RlZiwgMHg5MWJhYjI2ZiwgMHhkNjFlNDEwZSwgMHg0YmVlOGU4ZSwgMHg4ZTk0NzVjMSwgMHg3NGE0OWY0MSwKLQkweDcwZWNlNzBjLCAweDNjZTMwNjNkLCAweGYzOGIwYTVjLCAweGU3OGExOGU4LCAweDNiM2NhYTYzLCAweGUxYzRmMWViLAotCTB4ZDM0ZGVhZmUsIDB4NzhiODE3YmQsIDB4NWUzOTI3YmMsIDB4NzNhNWFmMjMsIDB4MmI3YmRkMzYsIDB4MDUzN2IyMzUsCi0JMHhlZTdjOTVlNCwgMHhhNmExZTIzMiwgMHgxZThkNDJhZiwgMHhlYTljYTY4ZiwgMHgxMGNjYzhhMSwgMHgyNzcyODRhNiwKLQkweDljODEwYTQ1LCAweGE0MDVkYzkzLCAweDk5NThmNDA4LCAweDVmNWFhN2QxLCAweDU3YWNiYzQ5LCAweGZlOGQ3YzZmLAotCTB4ODc4ODAxYmIsIDB4M2JlMmU1ZDIsIDB4ZDcyOGM5M2MsIDB4ZTAwYjA1ZWQsIDB4ZjVjYWU4OTMsIDB4ZTk3ZDFkZmEsCi0JMHhhZDk1YjgyMSwgMHg5ZGQ2MDZiYiwgMHgzNTNkNzdkZSwgMHhmYThiZDc4YSwgMHhmN2RlODRmMywgMHgzZjMwMmM2OSwKLQkweGQzNzllY2QxLCAweDBmZmJmMzAzLCAweGE1MWY4MDk5LCAweDI3YmM3YzJmLCAweDY3N2UxNDQzLCAweGRlMzE4MzQzLAotCTB4M2U5YjhjNDMsIDB4ZGY1N2M2MTIsIDB4OWQ1MzVjNDUsIDB4MmJhZGU3ODIsIDB4MmI4OTdiZjgsIDB4ZmU2MTQ3YWEsCi0JMHhlNTllZmU3ZSwgMHhhNjBmNmFhYSwgMHhkZTJjZmMyYSwgMHhjZmM3N2M1YSwgMHg2ZmY1ODIzMiwgMHgyNGZjNzM3MSwKLQkweGZjN2MzODlhLCAweDUyNTkyZmE4LCAweGQwMWNmMGFhLCAweGMzMGFhZWVhLCAweDA4NjQ1OWZiLCAweGRhNjAyN2RkLAotCTB4OWY4NDVhZWUsIDB4ODdlODI2ZTIsIDB4NmYzMWY1YTQsIDB4ZTU0ZDNjODYsIDB4MGY4OGQxZmEsIDB4OGE0NTVkYzksCi0JMHhkZGJlNzk2OCwgMHhjZGMwMjBmZiwgMHg3YmE0MTllYSwgMHgzMjljZDAxZiwgMHgwM2RmN2JlYywgMHhmNWE3YTVlYywKLQkweDcyMjYyZTRjLCAweDI3YzIzMjdhLCAweDY1ZWY2MTUxLCAweDlmZDQ3NGFhLCAweGUzYzM1NTVlLCAweGY2YWUxZjc0LAotCTB4ZGZjMzVhNjIsIDB4Nzc4MWFhODEsIDB4M2Q0ODE0N2YsIDB4ZWRjODFmOTgsIDB4NDcwYTFhYzQsIDB4ZGYwOGZlZjgsCi0JMHg3M2FhNmIzNywgMHg5NzJjZmNiMSwgMHhhYWE2ODk1NywgMHgyNWMwMzJmZCwgMHg2NmZmMzA4MSwgMHhjOTBjOTA2MiwKLQkweDE0MDQyYzIxLCAweGM0ODI1MjdlLCAweDljZjU3OTAzLCAweGU2YzY5ZGQwLCAweDc0NDFlOWNkLCAweGRjNzc4NjRiLAotCTB4NWUwMDhmM2MsIDB4MjZjYjBlZWEsIDB4NGI4YjkzZjAsIDB4NjgxZjI1YWYsIDB4ZTU5YzU5ZTgsIDB4OTliZjA3OGIsCi0JMHhiMDBiZjBlOCwgMHg3ODAwM2RmZiwgMHg0NzU5ZjNhNSwgMHg5NmVmODVlNywgMHhjOTU4N2E3MiwgMHhkMzlhYmVmMSwKLQkweDFmNDA3ZGMzLCAweGQzOTA3ZDM0LCAweGZhZThhZmM1LCAweDY1ZTM1ZjIxLCAweGU2ZDYwMWY3LCAweGM0Yjc3OGIzLAotCTB4Yzc3ZjEzMGMsIDB4ZjFiNDRjMmMsIDB4MTZkZWYxNjQsIDB4MjI3NWQwYTIsIDB4YzUzMDdhOGYsIDB4NWJjOGVhNzcsCi0JMHhmYjE3YTQ2NiwgMHhhMTEzZTI2OCwgMHg0M2JiYWRmYywgMHg4MmM5MWRlYywgMHhlMzM3ZDg1NCwgMHgyNzIzNzdkNSwKLQkweGUzNjdlMjdhLCAweGM0YjBkNTQ1LCAweDk5MTM3M2RmLCAweGYzMTFkMWRkLCAweGVmMWFjNjdkLCAweGVmZDgwYjAxLAotCTB4ZWVjN2NkZmQsIDB4YTRhZmE1ZjUsIDB4ZDllYmQ5ZTMsIDB4ZmUwMWM1YmQsIDB4Njg4YmQ5ODIsIDB4ZjU0ZjUxZGUsCi0JMHg4Y2U1MDI2ZiwgMHhkZTc0MWQyZSwgMHhjNjdkMWE0NSwgMHhiZmZkOGZkZSwgMHg1MWNkN2VkNCwgMHg3YmU3YzUxYiwKLQkweGU0NTE0MWIwLCAweGI4N2ViYWZmLCAweDYxNGJlMDE1LCAweGM3M2YwMWVkLCAweDJhNDE3MmMzLCAweGYxYzNmZmYwLAotCTB4ODczNWZkYjEsIDB4ODNkMjMyNmQsIDB4MWQzMmZiMmIsIDB4M2VjOWQ3M2QsIDB4OTg5ZWU3NmMsIDB4M2FmYmEzYTksCi0JMHhhNjEyNzcyZSwgMHg1NzdkZDA0ZSwgMHg2ZGVmY2NlNSwgMHhiMTJlZWY0YywgMHhiY2MyY2ZmYiwgMHhjNWQxY2U5MiwKLQkweGJjNGE3ZTUxLCAweGE5ZGNiNjIxLCAweGRjMjA5NTkxLCAweGMzMTlhZmRmLCAweGE2NzA1Y2U0LCAweDNlYWJmNGMyLAotCTB4YTdjOTg0NzIsIDB4NmYzMmU0YjMsIDB4NjQ1ZjQzNTAsIDB4ZjAzZDQxMTQsIDB4ZWU4YTk5OGIsIDB4YzAzNWMxZGQsCi0JMHg3ZTVlOTQxZiwgMHgwNTdlZTljZCwgMHhjNTRkMDFmMCwgMHg0ZGQyMGExMSwgMHhkYTEzNzRjMiwgMHg1ZjM4YWJhOSwKLQkweDY4ZjljZmRkLCAweDg3YTNlNzJkLCAweGMyNDY3ZjgwLCAweGRmOGNhZTNiLCAweDA1MWRlMjI0LCAweDhiOGQ0OGZiLAotCTB4YzAyNThmYmQsIDB4OGQ0OWI0ZmYsIDB4ZTg1Y2ZlNmQsIDB4YjMyZGU2YWYsIDB4MzUwZmU3MDAsIDB4MTE3NTJmOTIsCi0JMHg5NzdlMjllNCwgMHhlZjhmMzA3YiwgMHhlZGViMDZlYSwgMHhiYmYxNTg5ZSwgMHg5MjkzZWQ0YiwgMHhjOTVlMTRlYywKLQkweGRmYmY4Njc2LCAweGZlMjE2N2Q0LCAweDMxNmY2ZTJjLCAweGQ4NzI0YmFjLCAweDE5YWZhZWQwLCAweDY1OGUyOTY5LAotCTB4YmRlY2Q4MWYsIDB4NTNiNzRlZjAsIDB4OWZjODBmNzgsIDB4ODE3ZjZiZDAsIDB4NjY2ZWExN2IsIDB4MzdmZGMyMGUsCi0JMHgwNjM5OWY3MCwgMHgzM2IxOGNmZCwgMHgwNDg2NDA3OSwgMHhmZjBkMDhjOSwgMHhkY2Y3ZjFkNywgMHg0NjQ4Mjc4OCwKLQkweGYyYzBlNDY5LCAweGY4MDhmMzhiLCAweDdmZjJmYTc3LCAweDEzNmZmMjNmLCAweDAyMzU3ZjkzLCAweDc4MGM1N2RmLAotCTB4NTUzMWY3NTUsIDB4ZDc4MDQ5ZmUsIDB4YjllNzdkMDEsIDB4ZGQ1Y2EyZjIsIDB4Y2I5OTdiM2QsIDB4M2NiZDYzNmYsCi0JMHg0ZjlkOWRiYiwgMHgyZmM0NmYxMSwgMHg3MGE3MmRmNCwgMHhjZTZiYjNjYSwgMHgwOWM0OTQ5NSwgMHg1ZDk1ZWZiZCwKLQkweDQ2MWQ2MzE1LCAweGY2MTI3N2I5LCAweDkyMjU5MDNmLCAweDU5MDVkZjFmLCAweDE5MWU3OGE4LCAweDhmZTRmMjBmLAotCTB4M2ZhNWZlMmMsIDB4YWYxZDQwZmQsIDB4ZWUzMTVjZTgsIDB4NzJlNzg1ZjMsIDB4YWUyOTlmNzEsIDB4MjBmZTQ1Y2YsCi0JMHhkOGQ3OGRlMCwgMHg3ZTFhMjc0OSwgMHg5ZGJjMDJlNiwgMHhhM2U3ZTdhOCwgMHhlMjA4NzIwZCwgMHhiYzZmZjY1MiwKLQkweDE0ZDlhMWU3LCAweDg4MzcwYjllLCAweGQ3ZmVmZWVjLCAweDZhMjc3ZGRmLCAweGI2NDgxYmUyLCAweGY1M2FmNTA3LAotCTB4YTExM2I0M2QsIDB4NzNkYTVkM2IsIDB4NThkZmMyZWMsIDB4ZjYyZmEwN2QsIDB4MzYxNGNmYjcsIDB4NmJkZmI2YzQsCi0JMHg1M2QwNTdlMCwgMHgxZTgwMWYyOSwgMHg0ODgxZjU0YSwgMHg1Zjg1ZjQxOCwgMHgwOGJkZjE1YiwgMHg2OGRjMWYzNSwKLQkweDU0MGVmOThmLCAweDE5NWE3ZGJlLCAweGRkYmU2N2QwLCAweGM0YTQyNzc3LCAweGZhZmU4MDkxLCAweDhlYTFlNmZlLAotCTB4YTY3YzFjN2IsIDB4MjhmNjRlNzAsIDB4NzBhNWIzOGYsIDB4OWZmM2E5OWYsIDB4ZTNiMjczYjEsIDB4MmM0MjFmZGMsCi0JMHg3OGRiOTRmZCwgMHg3MjlmYTdiOSwgMHgyMTY3OGIxNywgMHhlYWU1ZDhlZSwgMHgzYjcxNGU3YywgMHg3YjQ2ZTE3MCwKLQkweGZkOGM3OTY4LCAweGVmYmYyMTdjLCAweDQ3OWY5MGI3LCAweGQ1M2ZmOGE4LCAweGJhMzEzN2FiLCAweDNmMmZmYjUxLAotCTB4ZGZlMThhMzcsIDB4NTNjMjY3NDAsIDB4M2VhZTkwNjMsIDB4N2ZhMzI0M2QsIDB4NGFlYTc4NGQsIDB4ZjJhNTJmN2MsCi0JMHg5N2ViMDU5YywgMHg0MTVmZGU4YiwgMHg0ZDc5MTYxYywgMHhmM2JiYmE0NCwgMHg4NzNjMzhmMCwgMHhjM2JjMzJlYSwKLQkweGI3ZjM4N2I4LCAweDJiOWUxNjlhLCAweDg1OTllOWQ1LCAweGVjMGEwNWExLCAweDJhZTc4NWNiLCAweGRlMjExZTkxLAotCTB4MTM5N2VlMTEsIDB4OTM0YmY2ZjIsIDB4MTM1NzRlMjQsIDB4Njk5MWZkYTAsIDB4YTJiZDY5Y2IsIDB4NjRiZjQ2NGUsCi0JMHhmZDEyYjA2MiwgMHhlZjc2OGQ4NCwgMHhkYWU0MzFmZCwgMHhlNzQ3YmIxZSwgMHgyY2VhMjgzNywgMHgyMzg5ZmVjNywKLQkweGU3MzUxMjQ4LCAweDdiZjkwYmY1LCAweGQ4ZTc0NWUxLCAweDFkYzQ4NDdiLCAweGNmNDAyOTI0LCAweGU5NDRkZTVjLAotCTB4NmM2ZWZmNTIsIDB4Y2JlMTg5OTcsIDB4Zjg1N2RlYjgsIDB4NWRlOTVmM2EsIDB4ZDY3ZTg0ZWYsIDB4NWViNjYzZmIsCi0JMHg3NTE3Y2ZiZSwgMHhmNWQ2MWFlNiwgMHhkNmIxZjFiYiwgMHg0NGNmNWQxNSwgMHhkZmNlNWY2YywgMHgzMTM3MmRmOSwKLQkweDlmZTVhYmJjLCAweGY0ZDVmMWYzLCAweGI4MmNmNTc4LCAweGY4NGE0MzYxLCAweGExODU5MDNiLCAweGZmNzgxNTNiLAotCTB4M2UyMWIwYTgsIDB4YjNhY2QwNDEsIDB4NWQ1NmZlYTgsIDB4ZmQ2MTQ5NWMsIDB4YWFmZjdjM2MsIDB4MzI5ZTYxYTgsCi0JMHg3YTQ3MjM1ZiwgMHhlY2ZjMTRmMSwgMHhhMjIzNDlhNSwgMHg4MWZjZmE3OCwgMHgxZGNiNjk5ZSwgMHgxYzE0YWZiMCwKLQkweGZlM2IzZTAzLCAweGU3OWNjNTY0LCAweGYwY2JmNDA5LCAweDhlMDk1Mjc2LCAweDcyYjk0MmFkLCAweDNkZDYyYmE3LAotCTB4Nzg4ZGNmOTQsIDB4MWI3OGU3YWIsIDB4MzVhMzI0MTEsIDB4OTdjNTQ2NzIsIDB4NGRmMWZkYjEsIDB4ZjljMTc3NjUsCi0JMHhlY2Y1ZjFmNCwgMHhlNWZlOGY3NSwgMHgxYTdjNmM0YywgMHgzMDc2ZThlMSwgMHg3MWU5YTlmOCwgMHgyZmZiMmZiYSwKLQkweGViOTc4ZTA4LCAweDg1ZmE5YmUyLCAweDBhYmZjNzIzLCAweGQ1M2JmNTI3LCAweDFjMGVhY2FiLCAweGEzN2JiMDk3LAotCTB4MDQxN2I5ZjUsIDB4OGNmOGU4YmYsIDB4YmUyYTRlM2UsIDB4N2U0MWViOTEsIDB4N2MwOTM5NTEsIDB4MDdjOWVhN2EsCi0JMHhlNWRiNmFjNiwgMHg4NDBkMjdkYiwgMHg4NWVkNDg3MSwgMHg2ZmRkOGY5ZCwgMHhmZDQxYTdmNywgMHgyMWVmNjRlMCwKLQkweGQxNWJjYTBmLCAweDVkZDc0MzViLCAweDc3NjhmNzEyLCAweGRmYWI1NzE4LCAweDkzNTY1NmJmLCAweDRhNWZjMTJiLAotCTB4YzEyYjg3ZWQsIDB4MDViNTQzNmYsIDB4ZTZhOGEzZDQsIDB4ODQ3ZDA1ZTAsIDB4N2FjNWYxNTYsIDB4ODM5MjZhMTcsCi0JMHg1NjU2YjNmOSwgMHg5NWJmYTE1NywgMHgwZGM0ODI1OCwgMHhmOGMyM2Q3ZSwgMHg0MmNjOWM5MiwgMHhkMGU0OTdmZiwKLQkweGVjOGEwMWViLCAweDRkYmY4Mzc3LCAweDY1OTFmN2UxLCAweDNkMjZiZmM5LCAweGM0ZDllYzFiLCAweGJlMDZhMDhjLAotCTB4YmM1ODM5NTcsIDB4YzU5NGRhYzQsIDB4Yjc0Mzg4NDEsIDB4Mzg3MTlmODAsIDB4ZWFjZTM3ZmEsIDB4YTUxN2ZiZWMsCi0JMHhkZDI4MDM4NSwgMHhkYTdkY2ZhOSwgMHhlNWNiZTg0NiwgMHhmZTgyMTZjNCwgMHhiYmY0ZDFiNCwgMHg3NDg5MWU3NiwKLQkweDRjN2RiYWRlLCAweGUyYzkxNzBmLCAweDg5MGY3M2MyLCAweDg3MTViZjcwLCAweDcyODJmZDA3LCAweGMzOTczNTc4LAotCTB4ZGMyZWVkY2IsIDB4NjQ1ZDU2N2YsIDB4OGVhMGZiNDIsIDB4MGI3ZWMzZmIsIDB4OGI4NDMwN2UsIDB4ODQzMjc2ODQsCi0JMHgyNTdkNDBkZCwgMHhiMGViODgyZSwgMHhkMDQ0N2FjMiwgMHg3Nzk4YzNkYiwgMHgyMjMyOGJjMiwgMHg0MDI1YjEzZSwKLQkweDA0Nzg5ZTNlLCAweGUxMjAwZmM4LCAweGY2ODdhMDU1LCAweDBiYmNlYTRjLCAweGZkNThhN2JlLCAweDVmYmYwMWIzLAotCTB4MTUxYzc2YTQsIDB4ZTA1YTBmYzAsIDB4NWNlMDA0YmYsIDB4M2MzMzA2MmYsIDB4NjJlM2ZlYjQsIDB4YTVlYTAzMjQsCi0JMHgxMmI3YTJkMSwgMHhjNDExN2E1OCwgMHhlNzM1ZmI0MSwgMHhjZTFkZWMyYiwgMHg5YmVjNWU2OCwgMHg2NGE5NjhiZiwKLQkweGZhZjg2ZjM4LCAweDJmZjk2ZDEyLCAweDA3NjJiZWFjLCAweGY2NTZmYmVjLCAweDA3ZTI0ZDdlLCAweDlhYjljYTAyLAotCTB4MDE3NzNmNWUsIDB4NzFhOWRiZGUsIDB4ZDIzZDdmMzAsIDB4MjFkNWQwMDUsIDB4OTU5ZjRmYjYsIDB4ZTgwOTcxM2MsCi0JMHhmNTk1MWIzZiwgMHg1ZTFlNmVhMiwgMHg3NmUyNWU1ZCwgMHg1M2E1MTM0ZCwgMHhmNGFiOGJmMCwgMHg5OWYyNDIzMSwKLQkweGFlMmU4ZTgwLCAweDc4YjVkZmE1LCAweGMxNWZhMThjLCAweDM5ZmEyMzM4LCAweDQ3ZTc1MDRmLCAweDE1N2E0NWM3LAotCTB4ZmRiMGU1Y2YsIDB4N2IwZjQwZDYsIDB4YTBmZjM2MDQsIDB4MGZlY2NlZDUsIDB4YWYwMTE0MTIsIDB4OTNjMjU1YjMsCi0JMHgzYzdjYjA1NiwgMHhkZGYwN2Y1MSwgMHgzZjU1YjdjZiwgMHhmMmMxNTkzNywgMHhjYzBiOTY2ZSwgMHhjNjZhZTc2NywKLQkweDVmNmVjY2Y5LCAweGU1ZmUwMWRkLCAweDBiYTllZGQ5LCAweGI2NjU5Y2UwLCAweDIwOGZmMmU1LCAweDBlNDcyM2RkLAotCTB4ZmM0ZTQxZDgsIDB4ZjlhM2JkOGMsIDB4Y2EyZjIzZDMsIDB4YmM3NzhhMjAsIDB4NDNlZjExYjEsIDB4NzFmOWNlM2YsCi0JMHg4MGM4ODkwZSwgMHgyYjcxM2Y3ZiwgMHhjMjFlNGZjYywgMHg1ZTI3Y2RmNSwgMHhjMTkxNmY5ZSwgMHgxYzJkYmQ3ZSwKLQkweDlhM2FmOWJhLCAweGQwYzVmZGJiLCAweGNkNWE2MDc1LCAweDA5NzkxNDM5LCAweDcxNmZlNmQwLCAweDVhMmZhMWU3LAotCTB4N2RlNmQ3NmQsIDB4YmI1OWU1OTksIDB4ZGZmODFjMjgsIDB4YjgyYzkwYzEsIDB4MmRiYWU4YWUsIDB4OWQ3NTA3MDgsCi0JMHhhM2UyMjZiNCwgMHhmZGZjNGUxNywgMHhiZDJlMTUyMCwgMHg3YWRmYjZlYiwgMHhmYjBiZjgyZCwgMHgyZGIzNmY5MywKLQkweDcxNjIzZTYzLCAweDQ2NWU2Y2I5LCAweDQ1MDY3ZDM4LCAweGMzOTE1ZWYwLCAweGYyZTgwN2I3LCAweDFkYWY4NzYxLAotCTB4MTJkY2E0ZjgsIDB4MjE4NjkzNDksIDB4NWYyMTg0ZGYsIDB4NGEyZmZhMjksIDB4NzhmODcwYTIsIDB4ODE5MmZmYTgsCi0JMHgwMThlOGYwMCwgMHhiZTY3YTQxNywgMHhkNWZjZTljYSwgMHg4M2Y3ZGVmNCwgMHhiZTk5ZDExMywgMHg2NmMxZjk4NiwKLQkweGI1NWI3YTcwLCAweDliOGM0ZGUzLCAweDdiMzBmOGZjLCAweGY0NDJhOTBmLCAweGZhMGY3ZjVjLCAweDRiMTI0NGJmLAotCTB4NTdkMzU1ZWYsIDB4MmRlNjFmYjksIDB4OWQxZjdhODcsIDB4YzQ4NjczYWQsIDB4ZDVhMzNkZTAsIDB4NjY3YWY3OGUsCi0JMHhmZDNhOGI2NCwgMHhjMGI2NDY3YiwgMHhjNjNhZDdlMywgMHg0YmQzYTRkZSwgMHhlZWJhNzA1NywgMHgxMWM0MGZkYiwKLQkweGIwNTlmYjE4LCAweDU1ZGEzMjc0LCAweDI0ZjcxNTNiLCAweDBkYzFmZjkwLCAweDRjMTZjZThjLCAweDY3MTA4OWY1LAotCTB4ODA4ZDYxM2MsIDB4MWZmMTg4ZmUsIDB4ODc5MDEyNzYsIDB4MDllMmVhMGIsIDB4YjgyZjgzOWMsIDB4YmMxNjcxN2IsCi0JMHhlMWQ5NTA5NywgMHgzOTA0ZWI2OSwgMHhlMGJjMTIxOSwgMHhlZjE2NGI0NywgMHg5ZDI1ZjhjOCwgMHhkODA3YzNkNywKLQkweDNiZjkwYzNlLCAweDlmMGU5ZTYwLCAweDJiZjFhMWM3LCAweDE5NTVjOTc3LCAweGRiZWJhMDZlLCAweDBiOTAzZTFkLAotCTB4YmRmMjZlZjMsIDB4OTIyZDc4MGQsIDB4NzZiNWZiYzIsIDB4M2NkYmJjYzgsIDB4ZjMxZjQwYjksIDB4NGMzZWFjNWEsCi0JMHg1MWIyNDQyZCwgMHgyMjRmMzZiOSwgMHgxNTkzNDgxNiwgMHhkZjIxNTkyMiwgMHhlY2U3ZDRmZSwgMHgzYmFkODZiMCwKLQkweGVjMmM0NmQ5LCAweDgwYWZlMWZiLCAweGFjZGYyZTRlLCAweGE2M2RkNmU4LCAweDUxZmY5ZjQ1LCAweDExOWYzZTliLAotCTB4MGViM2U3ZDYsIDB4ODBiN2YzZTksIDB4ODdkMWEzMWEsIDB4ZTc2NWVjMGUsIDB4ZDg2NzY1ZGMsIDB4MDVlN2MxM2QsCi0JMHg3ZmMwODNkOCwgMHgzN2I5NDY2YSwgMHgwNzNkYWNhNSwgMHgzY2NmNGRjZSwgMHhmOTQxMzRlYiwgMHhmZDk4NmY5ZSwKLQkweGM1NjJkOTE2LCAweGJmZjZjYmY3LCAweDQ0YjYyMzYzLCAweGJhZDRjNzc4LCAweGQ4Y2ZjYTExLCAweGZmYzA3MjVhLAotCTB4ZmM2M2ViNDQsIDB4NDczNWRkMDMsIDB4ZjNiMWZkODIsIDB4MGNjZWQ1MzIsIDB4Y2VjNDljNjEsIDB4N2I5YzU5NmYsCi0JMHgwNDM5OGI2NCwgMHg3NjY3YjFlNywgMHhkMDJjZjUzZiwgMHg4MzJkOTlkZCwgMHg1ZTc5ZWY1MSwgMHhkZmEwOWEwOCwKLQkweGFmMGM3ZGUwLCAweDlkMmU2YzEzLCAweGFjZGIyOWZjLCAweDM4NDZlYmI3LCAweDczZDUzZTk5LCAweGYxMGI5OTRhLAotCTB4ZWJkNDk3NGYsIDB4NDg2OTdkZDcsIDB4NjRlZDFmOWYsIDB4ZDEzZTY3ZjIsIDB4NzM4NzRmN2MsIDB4MTRhYWNmNjYsCi0JMHg0ODI3OGJhMCwgMHg1OTgzZmJjYywgMHg5ZjdmMjY0ZSwgMHhlZDUxNWE3ZSwgMHgzM2JmOTE2YywgMHhkMTQ5M2M0NiwKLQkweGEyN2I0ZjdiLCAweDA2NGIzZmU3LCAweGMwMDAxYzQzLCAweDdiZjQ1ODYyLCAweGI1NWM2MTk5LCAweDdjYjk2ZmZmLAotCTB4ZmE3ZWU0NGYsIDB4YzIyMmFiYzgsIDB4YjE3NTc0ZTcsIDB4NTdiODljZWUsIDB4YTZmNmFkM2YsIDB4MzNlY2Q1NGMsCi0JMHg5M2ZiZjU4NSwgMHhiODVlYTFlNiwgMHhkNmJlNjkzZiwgMHgzMDcyZGIyZSwgMHg3Mzg4NTZlOSwgMHhkZmUxMmNkOSwKLQkweGZkOWYyYTRmLCAweDEyMTM0M2U0LCAweDAyZDhiYmUxLCAweDFmNzI4NWYzLCAweDJmMmQxZmQ4LCAweGQ1MWVhMGI5LAotCTB4NzFiNTMzM2YsIDB4ZTNmNTQ1MjMsIDB4ZjY2YWE2NTIsIDB4OTc0YTFmZDcsIDB4YmI0YWVmYmQsIDB4ZTU3NjdjMTksCi0JMHgxZDc4ZGMxNiwgMHg4MzU5NzdjNSwgMHg2NTZhODVlOCwgMHhmYmZmMzcyZCwgMHg4MzdiODAxOCwgMHhjYjVjZjc4YywKLQkweGJlZjhjOWI3LCAweDBhZjFhMDc5LCAweDM1OTQxM2Y0LCAweGVmODc5ZWJmLCAweGU3OWZhZGU4LCAweDQ4ZTU3OTg1LAotCTB4NDRjYzQwYTQsIDB4OTA0ZGMwZDcsIDB4ODFkZjZjOWUsIDB4ZmQ5NWQ1ZWYsIDB4M2M5MTRlYjUsIDB4N2QzZDVmMzAsCi0JMHgzZjQzN2E1MCwgMHg3MjgwZDUxNywgMHhmMDFlMDA2ZSwgMHg1NGY4YzMyZCwgMHhhZTExYmJmNSwgMHg3YjdkMjEyNSwKLQkweDE3ZmViZTIzLCAweDMzZmEzN2E3LCAweDYzNzc4YjRhLCAweDgzZDMwMWJkLCAweGNhNDg3N2Y4LCAweGEzYjk1Mjk3LAotCTB4M2ZjYTJmYjEsIDB4MzhmOGM1YWMsIDB4NTQyODM4ZTMsIDB4YjBkMGU3MzUsIDB4MWY5MDc5N2YsIDB4MjcxZjdjYWQsCi0JMHhjNzg3MjU4MiwgMHg3OTY3MGU4ZiwgMHhlODBmMzc3YywgMHgxOTdmZDYwYiwgMHhmYjgxZWE5OSwgMHg3YzkwMzc4ZCwKLQkweGMyMTc5ZjQ4LCAweGUzMjI4OTBmLCAweDZjM2JmNDZiLCAweDc3NWYyM2I1LCAweGZjOWYzYmI5LCAweGYzNDNkMDFkLAotCTB4MThjNzNjMTgsIDB4NzY3YmVmYzQsIDB4ZGVmOGMyNzksIDB4MGZmN2ZhYTAsIDB4NWYyY2RjYmEsIDB4ZjhjNTZlZGEsCi0JMHgyYjFmMzM4YSwgMHg0MTk2Y2YyOCwgMHg3ZmQ0MTc1YywgMHhkMTMyNmFkNiwgMHhiNmNjZTY3ZCwgMHg0ZTIxOTMwMSwKLQkweGJkODVhYmIwLCAweDY1YmE3YjJmLCAweDdiZTU2NGMwLCAweGZmMjM0N2Y2LCAweDMxZDZmYmFhLCAweDZmZWU5NWY4LAotCTB4MWI3ZDM4NGYsIDB4MTVkZjAwOWMsIDB4NzkzMjhlMmMsIDB4NTU0NjU1NDAsIDB4ZWRhOTNjMGMsIDB4MGNhYTk1MTIsCi0JMHhiNzIyMWZiMCwgMHg5OTFiYmMzYiwgMHg3MjBlOTNiZSwgMHgwNTNmYWNmZiwgMHhkYzc5ZjllZCwgMHhhZTM3YjE3ZiwKLQkweGQ3ZTgxOWUwLCAweGU4ZmFlYjQ5LCAweGUyNDM4NGJmLCAweDBmYWZhMDQ2LCAweGVlNWRlZjQ0LCAweGI1ZjNkMWUxLAotCTB4YmM3ZWQ5ODUsIDB4MzA1NjRhNGYsIDB4NDQ4MTY2M2IsIDB4NGZkNTEyYzIsIDB4MWZiYzgwMTcsIDB4ODM5NDc5OGIsCi0JMHg4YzA0MWEwYiwgMHg1NmI4NWEyYiwgMHhlZjc4MWViZiwgMHgwMzc3ZmI1NCwgMHg1ZTJmZTE4YSwgMHg5MTM4ODcwZCwKLQkweDFiOGI0YzE2LCAweGIwMjVlNWY0LCAweGZlMzBiODdmLCAweDRiY2ZjZjAzLCAweDcwZTVmNDliLCAweGJkZjQxMDkzLAotCTB4Y2NlZmU2ZjIsIDB4MzlmNmUwYjEsIDB4N2JlN2Q3NTEsIDB4MWY5M2E5YzksIDB4OGY4ZmNhMzIsIDB4NWY1YzAyYzQsCi0JMHg5MDliNTgxOSwgMHg3MDJhZmRmMiwgMHg0MmNhNmU3NywgMHhhNTllZTIwYSwgMHg2NjE2NTIxMywgMHgwNDE4M2JlMSwKLQkweDE2NDVhN2Y2LCAweGIyNjU3NDEyLCAweDgwMDNiYzNjLCAweGM5ZmM4M2FjLCAweGY1ODI1YmRlLCAweDk0ODdlZjY5LAotCTB4YTFlMTI1NGQsIDB4NjEzYWU4YWUsIDB4ZjI3MmRhN2QsIDB4NTk2M2MzMDYsIDB4ZTMxZTEwYmIsIDB4ODIzN2RlOGEsCi0JMHg5NWViNmE3NSwgMHgzNzk3ZjVmMywgMHg4MzdlNzU5YiwgMHg4NGYzODgwYSwgMHhlZmQ2OTUzOCwgMHg3OTdlYmFjYywKLQkweDM3ZGQxY2ZjLCAweGU3ZTI5NTg5LCAweDFiYjk1ZWUxLCAweGZjNTYzNGJhLCAweGE3MGU1MWY5LCAweDRjMmU2Zjg3LAotCTB4MTVmY2JlMDUsIDB4Mzg4MzgxZTgsIDB4M2RhOTczMjAsIDB4MDI3MWMyMGEsIDB4OGU4NWI4MDMsIDB4Y2RlYWNiNjMsCi0JMHg3MmNlNzk2MywgMHhmOWQ0ZmY5NiwgMHgxMGZkNWU1NSwgMHg3ZWM5Mzc2YSwgMHgyMDU4NTczYywgMHhmNzBjYmMxNiwKLQkweGZkYmE2NjlhLCAweDE3ZmMwMjVmLCAweDEyNjk3Yzk4LCAweDI0NmZhN2YyLCAweDY1MmU0N2M2LCAweGIzMjQ3ZmViLAotCTB4MThhYWQyZWEsIDB4Yzc4YWE5ZjYsIDB4NzgyZDBhZGYsIDB4Y2RkYzE3YmUsIDB4NzY2NzNkZjYsIDB4M2JmYWQ2NDQsCi0JMHhlZTRjNWRlMywgMHhjNGU4MWRjNCwgMHgwZWM4ZmU3OCwgMHhhZTExZWYwMSwgMHgzZGUxOGUxNywgMHg3OGQ3ZjViYiwKLQkweDI5Y2ZkODA4LCAweDE3MjA2ZjE0LCAweDA1NjQwYmQ3LCAweGRkOTU2M2JjLCAweDk3OGVmMzNhLCAweDM2ZDk3ZjAwLAotCTB4NWEyYTc3ZDQsIDB4MGUxNTg5MjcsIDB4NzdkMzNmNWMsIDB4NzA4ZDU1ZWMsIDB4NzczYzk4Y2UsIDB4MzNkMDI2NTQsCi0JMHgxYmRjZjc1ZCwgMHg4M2NiYmJlMCwgMHgxODNhYTVlMywgMHgwZjJjYTQxZCwgMHgwZDFlMmZhNiwgMHhmMWRjMTdlMywKLQkweDE4ZGJmMDEyLCAweDRkM2ZkZTFiLCAweDI2NzJiMGE2LCAweGY0MDZiYTYwLCAweGIxOTIxNDk3LCAweGNhNzdlNDFmLAotCTB4ZjgyNjRmNzQsIDB4YjE3NjFmNWEsIDB4YzQ5YTA2NzEsIDB4Y2Y0MTMzYjksIDB4ODRmOTY0Y2EsIDB4NDZkZjA1N2IsCi0JMHhiODc1YWUyNCwgMHhjOTMzNjRmZSwgMHg3N2MyZjk4NywgMHg2MDJkMTNkMCwgMHg4ODc5NjNjZiwgMHg1NTRhNzllMSwKLQkweDNjOWY4YzA2LCAweDRhODlhNTljLCAweDVlODJlMzE4LCAweGNlZGVmMTUxLCAweGI4OTY3M2UyLCAweDI1ZTNjYTA5LAotCTB4NGU0YTRkNWYsIDB4ZTk1ZmVkYTAsIDB4OTUyZDg2YTIsIDB4NTEwY2FmNTMsIDB4MDNiMGUxZjUsIDB4NjIzMjEwZjQsCi0JMHhmNWNmYWIxNCwgMHgyYzE5MjVlMSwgMHg0ZDMxM2RlZSwgMHhiZDU4NTdkNSwgMHg5NzE3ZDkxZSwgMHg3NWYzZjIwNSwKLQkweGU2N2YxN2E2LCAweDljNDFjNWYwLCAweGVjNGExNWRhLCAweDFjNDlkYmI4LCAweDM2NzM4MTRmLCAweGZmZjhkMjEyLAotCTB4YzBiZWIzMDMsIDB4NzM4MTFjN2IsIDB4ZWNkMjEyMmUsIDB4OWIyZWYwMDcsIDB4YmNiMzdlMzYsIDB4MTdiZTAwZjgsCi0JMHgzMDNhNDE1YywgMHg0NWEyYjgwZSwgMHg4NTdhNmYxZiwgMHgyYWI4ZjYyZCwgMHg5OWNlMDc5ZCwgMHg0MmVkMTA0OCwKLQkweGMwMjcxZjBhLCAweGNlMGFiMjI3LCAweDA1N2I4MjcxLCAweGNlMDZhZmY0LCAweDE5YTgyNDI5LCAweDQxMmU3MDNmLAotCTB4Njc5ZGVmOWYsIDB4YWQxM2Y2MTIsIDB4ZGFmNWY0NDcsIDB4MjQ3YWM0YmUsIDB4ZTMwNWQzYjcsIDB4NzEzYmJiNzQsCi0JMHg5MzljMDhiZiwgMHhhZmJhOWRiMCwgMHg0MTRjODRmNCwgMHhkZDZmZWE5OSwgMHhjM2RlNTYxZSwgMHhlYjU1YTNkZiwKLQkweGNmNzVmZGFiLCAweDk3N2RmODUyLCAweDU1ZGJmNjA4LCAweDg1MTEwNTRkLCAweDlmZWRhM2NiLCAweGJjYjM5ZmEwLAotCTB4NDVjMjNmN2QsIDB4N2MyODg3YTUsIDB4ODFhODI0ZWMsIDB4NDc0ZDUyNGYsIDB4ZmI3OTQ0ZDgsIDB4NTg0ZDBmZTcsCi0JMHg0YTUyZmEzZCwgMHgxZjM4MDc1YSwgMHhmNmFlMjcwNywgMHhhMmU1YTQ0ZCwgMHhmNmQ3Yzc0OSwgMHg0NzNlNWVlYywKLQkweDQ5YjBmMmYxLCAweDJiYzhmZWU0LCAweGE4OWQ0ZjU3LCAweGJkZmFmM2M5LCAweGJlM2Y4M2VkLCAweDQ3YjNjYTFhLAotCTB4MWVjYmY2YjMsIDB4Y2IwZmVhYmEsIDB4YTI1Y2E4YTUsIDB4NzAyYjQ4ZWIsIDB4NDMxNmYyNmEsIDB4NjNmMzQxZGUsCi0JMHhhMWI3NzkzNCwgMHg5ZTUwZDEzYywgMHg2MTBmYzg2MiwgMHhlMTljYmJmNSwgMHhjODRiZDEzNCwgMHg1Y2E2ODdkYSwKLQkweDAzZGZjMTJkLCAweDgxY2YwZDRhLCAweGM1NmJmYjliLCAweGVmZTFhYmJjLCAweGIzNjQ1NjJiLCAweGQ5NTgxN2JmLAotCTB4Mzg1OTc4MmUsIDB4NjU1ZjgzMTMsIDB4YTc2Y2Y5ZWYsIDB4YzAzNDYwYjIsIDB4OTA2NWUzYTEsIDB4ODI2ZGU1MDMsCi0JMHg0NzcwZjQxYiwgMHhlNjMwYjZjYiwgMHhkMzQ3OWRhMSwgMHg3YmRkODVhZSwgMHg4NjM5NmYyYSwgMHg3ZmVkZmFlZCwKLQkweGY4ZjkwOTk0LCAweDYzZWY1MWZlLCAweDE1YzVmM2JkLCAweDc4ZmFlOTkxLCAweDE5ZTJmZWYzLCAweDI2ZmUwODhmLAotCTB4M2JlOGI4ZDcsIDB4ZGVkYjVkYmQsIDB4MzdiZGZlOGMsIDB4NTNiYTQ3MmEsIDB4OGU1MTA3N2QsIDB4MDY3ZmVlMWEsCi0JMHgyODhlM2U2MCwgMHhiYzcwYTg5ZiwgMHg3YzU5ZDQ3ZiwgMHgzMWRkZjBiNywgMHhkYjYwNDdlZCwgMHg2NGY5MmZiNywKLQkweDdmOTFlODE5LCAweDBlMzEzOGFkLCAweGZiNzgyYWY0LCAweGRmOGRmNjEwLCAweDYxNGJhMTBhLCAweGY4OTQ3YTFmLAotCTB4NmY3MTg1MmYsIDB4M2Y3OGI4YWYsIDB4NTQ3ZDkxM2MsIDB4ZGUwYzdjZWUsIDB4ODdjZmZkYjUsIDB4N2YwZDVlZTYsCi0JMHhiM2E4ZWVlZiwgMHhhOWZjMjg3MywgMHg1MmFlMjM5ZSwgMHg4MWQxYzdjNCwgMHg0MjkyZjg5ZCwgMHhjYjE5NWM2NiwKLQkweDZhMWNlZDBmLCAweDVkYjdmOWEyLCAweGUyZmU1OWViLCAweDJmMjBjN2NlLCAweGVkNjMyZGM0LCAweDE1MGU3NGM3LAotCTB4MmMzMjYwZGQsIDB4NzI2ZGZjNDcsIDB4M2ZmN2U2YzcsIDB4Y2VhMzM5NzIsIDB4YmVlMWVlZWYsIDB4YTQyZTAwOTcsCi0JMHg3MDM3ZWQ5YywgMHhlNTQyZDBiZCwgMHhkM2QyOWNlOSwgMHg3ODUxMzc1YiwgMHgxZDg1ZjljYywgMHhhZWE2ZGNlNSwKLQkweGZhNjVhZjFiLCAweGUyMDBiMDcwLCAweGJjMzk5MjhkLCAweGI5NDQzZjcxLCAweDkwZGVhMTJlLCAweDQyNjA3YjBhLAotCTB4YjRjZTlmMTQsIDB4MTdlZTBmMGUsIDB4MDM2ZDU1OTcsIDB4Y2U3OTIwN2QsIDB4MWEyZmRjNjgsIDB4YjhhY2JlOWMsCi0JMHg0Mzc0ZDE3MSwgMHhlMmIzNGIyMiwgMHg4YmFlNGNkYywgMHg5NjFmYmMyNiwgMHhmNTEzOGY3YywgMHg3N2YxNWZhNSwKLQkweDIxZGYyOWFlLCAweDVlMzgzODdkLCAweGJiMzE3M2RlLCAweGYzMTczZGVjLCAweDRlNzQxYzJiLCAweDExZGU3ZWMzLAotCTB4MjIyZGViN2MsIDB4MDU2ODI0YTQsIDB4NTBkODk2YmMsIDB4OTFiNWI5MGYsIDB4ZDcyYTE1Y2EsIDB4ZWJiY2Y4ZWIsCi0JMHhmZThhNWRkNiwgMHg1ZmMxNWI4MiwgMHhmYmJlMWEzYiwgMHg0NzQ2MTM1MiwgMHgwY2JhZmNmNSwgMHhlZDQ0Nzc5YSwKLQkweGJlOTliYWIwLCAweGRhN2JlZDU0LCAweDVjYWM4ZDc1LCAweGU5NzU1Yjk1LCAweDVmYmFiZGFjLCAweDcxYjBkNzI1LAotCTB4ZTk3NTdmOTIsIDB4NWQ4NzU4NDYsIDB4OGJmNWU3NjIsIDB4YjhkYzhkNjYsIDB4MWJmZmY3MGMsIDB4MWZjMGUyYjIsCi0JMHg4MmE1ZjNlMiwgMHhjOTYxZmNkZCwgMHg5ZmU4MTMzMCwgMHg4NjFhN2UyYSwgMHhkMTcyYmVmYiwgMHg3M2YyOWZmMiwKLQkweGJkNGYxNTE2LCAweDViMWM2NWY2LCAweGVhOTEwMmY3LCAweDNmYmQ3NDBmLCAweGZkNzFmYjcyLCAweGNiMTg5ZjU0LAotCTB4M2U5OWIzMGUsIDB4NGNkNzQ1OTEsIDB4NTIyNWYwMzQsIDB4ZmVmODM4ZTcsIDB4Njk0ZTA4M2YsIDB4MTQ3ZmVlYjAsCi0JMHhiYzc3N2Y0ZSwgMHhmNzNlZjRmNCwgMHhiZTYxMzI1ZSwgMHhlODRmNGIxNSwgMHhiODcwYmRlZiwgMHhjYjA4NTZmZiwKLQkweGY3OWFkOWM5LCAweGIwNzdlODQ4LCAweGZhNzZiZjMzLCAweGNlNjljN2M3LCAweDUzZGNlN2U3LCAweGJhYTc3YTgxLAotCTB4NzdjZmZiMWUsIDB4NjRkZmMzZTUsIDB4NTFhN2YyMzQsIDB4OGVmYTNjMmYsIDB4M2ZmODJkNjUsIDB4MjgyZDJhOGUsCi0JMHg0YjVlOGY4ZiwgMHg1MWM1ZmVmMCwgMHhhYTk0MWVmZSwgMHhhMmZjZTZkNywgMHhkM2IwMTVlYywgMHg0ODg5YzUzNiwKLQkweGJlMDlmNzFmLCAweDdkYzc4MDU0LCAweGZlZTAxZTk0LCAweGEyOGYxYWI2LCAweGYxNzVjN2VlLCAweDQwODVmNWExLAotCTB4YzY4ZjM3MGYsIDB4ODgxZWVmNzMsIDB4NGI3YTg0OGMsIDB4MmViOGRmOTksIDB4ZjBlZDEzYmUsIDB4MzcxZWYxYmEsCi0JMHgwN2QwMDk5ZCwgMHg1YjMyMzFlMiwgMHg1ZDRmZmY0MSwgMHhiYWIzYTMwNiwgMHgzZWYwY2I5MiwgMHgyMDk3YTUwNSwKLQkweGU4Y2Q5ZmI2LCAweDQxMjY2ZWFlLCAweDc2NmVhMWJiLCAweDk1OWJkMjBhLCAweDlmMzBhYzg0LCAweGE5MjdlOGZlLAotCTB4MTBhM2M1ODYsIDB4N2I1NjM3YzksIDB4NjM4YzFkNmUsIDB4NzY3YjExN2UsIDB4NDEzNzhlZTcsIDB4NDU2YjVkOGYsCi0JMHg4OTUwMTYzZCwgMHhjOWI1MWRlNywgMHgwNzRhNWYzOCwgMHhhYTU3NDhjNSwgMHhkNDliZjY3ZCwgMHgwZjY4ZmRkMCwKLQkweDVmZWVkMTdhLCAweGMzY2RmNGVkLCAweGVlZDJmZmY5LCAweDU4MzdmOTgxLCAweDI2NGIxYWM5LCAweDA1NjQzNTk4LAotCTB4MWYzZTQ5Y2EsIDB4YzYwOGZiNTIsIDB4N2FlNWNjMmYsIDB4NjdjNTdiZTEsIDB4ZmM3ZmEwOWQsIDB4ZmY1MDRlM2MsCi0JMHhlYzBmYTUyZSwgMHg5NTg0ZjlmMCwgMHg3ZWQ3YmZjZiwgMHhmOWE5ZWMwYywgMHg2Mjc3YjJmNywgMHgzZTY5OWFjOSwKLQkweDlkMDVmOWZkLCAweGI5ZjgxMjZiLCAweGM0N2Q0ZmY5LCAweDg3ZTM3NDA5LCAweGZmZTgyZTc2LCAweGZmNzA5Y2JmLAotCTB4YmIyZjdmYzYsIDB4YjQ4MjRhY2YsIDB4ZmI2OGE4ZmQsIDB4YzFkZjgxZmIsIDB4ZjliMjJlNWYsIDB4MjdiYjZhOTMsCi0JMHhmN2EwZmJkNiwgMHg0NGJmNzFjNywgMHhlZDNlMjNlZCwgMHhjNjM4ZWE3OCwgMHhmOGJkYTk3ZSwgMHhjMjhiYzAwMCwKLQkweDhjZjcwYzNkLCAweDdmNjRiZjIyLCAweGRmMzhjMDk3LCAweGEwZjIyNTQ0LCAweGE5Y2Y5Njk1LCAweGVmZTFlMzE2LAotCTB4M2E5N2ZiODgsIDB4N2NlYWJkNzEsIDB4YWU0NzI2ZTcsIDB4YTE4NDdmNDQsIDB4Y2FmNmUzZmYsIDB4YWI2N2YwMWMsCi0JMHg1N2I5MGZmNiwgMHg1YzIxZWY2MywgMHg4NDVlNjg5NCwgMHhiNDExZjg3YiwgMHhlNzdjZmFhMywgMHhlZWQxYjFmNiwKLQkweGIzNWJlNDI0LCAweGRjNmY1ZWI2LCAweGNjMzA0N2JlLCAweDQ3OTVkMzlmLCAweDdlNmYwMDkwLCAweDI4YWYxZTdlLAotCTB4NWVmODM5OTEsIDB4MmFkZTYxOTQsIDB4YmE3Mzc3M2MsIDB4MDhjMmU5NTMsIDB4YzBmZGRkZWYsIDB4MWNlOTUxM2IsCi0JMHg5N2ZhZmQwYSwgMHhjNjRlMTE5YSwgMHhmNGZkZDVmZSwgMHgxZmU1MmIxMSwgMHg4MmY1Nzc0YSwgMHg3ZjVhZjQ4MCwKLQkweGM3ZjcxZGI3LCAweDQ5ZTQ2YjFlLCAweGVmYjhkN2JjLCAweDc3NzdjNDZhLCAweDQxMDNjZDg5LCAweGI1NTI4ZjVhLAotCTB4ZjYzM2NmMWQsIDB4OWU4Y2YzYjEsIDB4ODEyMzlkOTEsIDB4OWFlOWJhOWYsIDB4ZGQzZjE0N2QsIDB4NDE4ZDhhYWYsCi0JMHhkNTA0OWQ0MSwgMHgzNzE1NWU4ZiwgMHhlZjc3ZmQwMiwgMHhiM2Y1ODZiZSwgMHg4OWRlY2VjYywgMHhiZGMzMDgwNiwKLQkweGFhZGZlMGM0LCAweDgxZjM5ZmMxLCAweDAwMmZiZDg5LCAweDZiNDU4ZjdmLCAweGQxYmRjMzc3LCAweGJjYThjY2UyLAotCTB4MTgwMjgxZTgsIDB4NTczZDRkYmYsIDB4MzhlMDk3ZjIsIDB4M2RmMGRhYjcsIDB4ZTA5MzRhODEsIDB4YjJhYmJkMDMsCi0JMHg2N2JjMzJmNCwgMHhkMWRmZjg0MCwgMHhhNTY4ZTU1MSwgMHg5OWEzZGE4OSwgMHgzNGFmYmU1MSwgMHgzMTcyM2ZiZCwKLQkweDQ5MTI5M2YzLCAweGY1YTM0N2UzLCAweGIwM2IwNDVlLCAweDAzYjZiMmRjLCAweDQ5YmI1MWVmLCAweDY4NDNlZmY0LAotCTB4NmI5NWE1ZmMsIDB4ZjMwMzdjY2YsIDB4ZjgzNTZjYWYsIDB4ODNmZTBjMTEsIDB4YTUzZDJkNTIsIDB4ZjUwNGU5NDcsCi0JMHg1MzFmOTA3ZSwgMHg3NzViZGUwOSwgMHhiZjNkYmNmMiwgMHgwMThlZmQwMywgMHhmMDMwY2U3ZSwgMHhkNmQ3N2IwMCwKLQkweGMwNDJkZDk5LCAweGM5MzgxYWFmLCAweGVkMDk5NmY0LCAweDBlYzEwNzhkLCAweDE4ZWZjZjhmLCAweDcwMGRjYjBhLAotCTB4OWVmMTlmM2YsIDB4NzVmNmY4YzksIDB4YWE5NWQ4MjIsIDB4NmJiMWEzYmUsIDB4OGM2MWJkMmYsIDB4NGRmNzY1MzYsCi0JMHhmMTg2NGVjMSwgMHhmMDEzZTEzYSwgMHhjOWY2YzQ4ZCwgMHhmNzQ4MDNmZiwgMHg4MDAwMjNhZCwgMHgwMDAwODAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDk5OTJiY2NlLAotCTB4OTI2NGNjZTQsIDB4MDkyN2RlNGMsIDB4MjcwMTAwODQsIDB4ZDQ1MDA0MjEsIDB4ZTZhMmJjMjEsIDB4YTJkMTAxZGEsCi0JMHgzYzI0MzhiNSwgMHhhMDk5MjExMiwgMHhmN2FkOGI5NSwgMHgyNDg0NDAzMiwgMHgxMTFhMDgwNCwgMHhhMjg0ZTAyOCwKLQkweDE3ZWRhZjYyLCAweDA0YzA2MjJjLCAweDE2YzQ1NDA3LCAweDZiNWVjNWZiLCAweDQ2ZjdmNmQ1LCAweDQ4NWNhMDA4LAotCTB4NmM1Y2IwNDYsIDB4YWQ3YmZjYjUsIDB4NjczMjRmYmQsIDB4ZGU5NTI4OTIsIDB4MWU5ZjdjZGUsIDB4ZWNmYmQ5ZjYsCi0JMHhhZjZiNWFjNywgMHhhNWIzZGVmNywgMHg5MGQ3NGIzMiwgMHg0NGI0NDg0OSwgMHhjODQ4NTQ4OCwgMHhiYjExYTZjMiwKLQkweGZlODQwOTU3LCAweDViNjY3M2I5LCAweDg2MmE3OTA5LCAweDgzYzllMDNjLCAweDMzYzhhYmIyLCAweDcyNTk5MDg2LAotCTB4OWUzYzhjNzEsIDB4YjE3MjIzOTAsIDB4Zjc4NzhlNTksIDB4ZGExZTkxODEsIDB4MDhlM2Y4OGUsIDB4NTVjODQ0OTksCi0JMHhlMDc1YmJmOCwgMHgyNDIwMzY5MywgMHg2MjVkYmZiZSwgMHg4ZDdlNGQ3NiwgMHgwZTc2ZTg2NSwgMHg4M2E3ZmQwMywKLQkweGQ4YjZkMDkwLCAweDhmOTg2ZWMwLCAweGQxNzk2MDI0LCAweDBkMmRmNDZmLCAweDYxM2EzZjM4LCAweDc2ODdkZjNhLAotCTB4ZmU2MDA2NjYsIDB4NDBjOWE0MTUsIDB4NGE1OTA5YjIsIDB4ZDIyMjA2MDIsIDB4OGZlMjI2NzYsIDB4ZGE0ZmEwMjksCi0JMHgxNzNlOTYyYywgMHgyNTEyMzU2ZiwgMHg1NWRmZTA5NywgMHg0MDY1NWZmYSwgMHg2Y2NkMjY1YiwgMHhlMGE1NGI1ZSwKLQkweDkwODYyMTExLCAweGZiMTNhNDI1LCAweGRiNTdiMjU5LCAweDEyMzRlOTZlLCAweDJhZmFkMmI0LCAweGMzNDYwOTEzLAotCTB4NWY1YjU1YjMsIDB4MGYzODQyNGQsIDB4YTM1NWRiNWYsIDB4NDRkMjdmYTYsIDB4MzZkYjg1MDgsIDB4M2I2NjIxMzMsCi0JMHhmOTlkYzljYywgMHhlODdmOWQzOCwgMHhiNzZiYmQ2ZCwgMHg2ODY5Yzg0MiwgMHg4NzBmZDQ5MiwgMHgzOGUyZDg4ZSwKLQkweGE4OTQ3MzgwLCAweDU2ODY3NWMzLCAweGQzNzYwNzQ1LCAweDQ4ZWI3Njc1LCAweGI3MGEzZWM1LCAweGMwZjIzNjRkLAotCTB4NTllY2ZhNmMsIDB4MGQ4NzM4YTksIDB4OWQ4YzcwNDMsIDB4M2MyMDY2M2QsIDB4MmI5OTBlMWIsIDB4NmU3ZjE0MDIsCi0JMHg1NTcwODc1OSwgMHhkNTg5NWZkZiwgMHg0MGNiYjk2MywgMHg3ZDY5NWEyYSwgMHg1ZmRhNmFkMSwgMHhmNTdkN2Y1ZSwKLQkweDdjMmYxNjNkLCAweDcwMTY1MzM3LCAweGJiZTc4MGRlLCAweDBkNjRjZjAwLCAweDNkZWQwNzdlLCAweDcxYThmYzc0LAotCTB4Nzc3ZWE5ZWMsIDB4Y2RmYjVmNjcsIDB4ZmUxNGRmMGMsIDB4OTUyZGZmMzAsIDB4Mjc4MDJkNTEsIDB4MDQ5M2I5MjIsCi0JMHgwNDc1OTQwNywgMHg2M2NmMmVlOSwgMHgwZmVmZDJmMCwgMHhmZDdlNzQwNSwgMHg1ODQ5ZjQwZCwgMHgzMWFkN2Y3YiwKLQkweDk3YjYyY2YwLCAweGU1YTBhZGU3LCAweGI5ZTY5ZjQzLCAweDQ4OWMyODFhLCAweGQwM2U3YmFlLCAweDUxNzNkMmMxLAotCTB4ZjFjMWQwMGEsIDB4ZmY1ZjNmNzMsIDB4ZjE3ZjVhNWIsIDB4YTQ2MjgzNTMsIDB4MzY4MDBiZjUsIDB4MDkwZjFlMjgsCi0JMHhlNzY4NGFkZSwgMHgzYzhhMzdiZiwgMHgzNTJkZGY0YiwgMHhiYjhjMzcxMCwgMHg4MDg4YzBmNCwgMHg4MDdiZjY5ZiwKLQkweGIwZmViMTk2LCAweDFhNTljNzE1LCAweDkwYjZkZGUzLCAweGE1ZjRiM2Y2LCAweDQwYTUxNzc4LCAweGYwM2VhYWYyLAotCTB4ZGY1MDczYzIsIDB4NGIzZDc2NjEsIDB4YzUxYTVkZmIsIDB4YTFlOTcxZTgsIDB4YmU3ZWZjMTQsIDB4ZjAxNGJiZDksCi0JMHhmYzBjNmM5MywgMHg3YmU5MmZjNywgMHhmNWQxOWFmMiwgMHgyNDVjN2QyYywgMHhmZjMwNDVjMSwgMHgwMTY2YWQ4YiwKLQkweDc1ODQ5ZGRhLCAweGFkMjdkMmM1LCAweGVkNWQ2MDEzLCAweGJmYjYzYzc0LCAweGVmZDIxNjkyLCAweGIyMjdkNTRlLAotCTB4OWQzODcxNzUsIDB4ZTkxYTMwZGEsIDB4OGQ5ZThiNzksIDB4NjAyODNmZTcsIDB4Y2Y3YTkzZmIsIDB4M2U1YTI0OGMsCi0JMHg2YmJlNzJmOSwgMHhmNWVhYWQxNSwgMHg0YTA2ODIxOCwgMHg0YjRkYmU3ZiwgMHg4NGIxOTA0ZSwgMHg1ZDk0ZWI5NCwKLQkweDM4NzIyNzAwLCAweGUyYWJlNzFhLCAweDcxNzFiN2MzLCAweDFlZmJkNDI5LCAweDEyNGVlYzdjLCAweGY0ZmVmNDMzLAotCTB4MzEwOTE5YjUsIDB4MGY2YmQzZjUsIDB4ZmQwM2E1MDksIDB4NmFjOGFmNmYsIDB4N2I3MWQyMGQsIDB4NDRiYTQ3ZGEsCi0JMHhlNDUyNzVhYywgMHg1OTkwZmE1MywgMHg4MzNkNmVkYiwgMHg4ZjQzYTg2YiwgMHhmYjVhZjRmYiwgMHhiNDRhZjU4NywKLQkweDViZmMxZjFmLCAweGYwZGQyNzg0LCAweGJjMDE3ZWVhLCAweGMxYzU5Nzg3LCAweDc0N2YxNGNhLCAweDg5NDNiZWJkLAotCTB4N2FjOGFmMDgsIDB4MGJiYmQ1YjMsIDB4MTNmNTUzZjgsIDB4MGFmMWYzZmYsIDB4ZjkwODZmODQsIDB4Yzc4YTY5MTksCi0JMHgxZGU3NDY3ZCwgMHhiYmVmZDEzNCwgMHg1ZjcxNTliNywgMHhiNGE2M2M2NSwgMHhmNzdlMDE3NSwgMHhiNjlkNzBkYiwKLQkweDBhZDE2ZTY5LCAweDU4OTkxZGU1LCAweDMxNDU3MWJlLCAweDg2YzcxNTM5LCAweGFmOTQwOTI1LCAweGE0ZmZhNDRjLAotCTB4NDkxMjJlZmQsIDB4ZGYwMGE5YWQsIDB4ZWRhMzZjZTcsIDB4ODY5Y2JjY2YsIDB4MjQ2NDVjZjgsIDB4Y2ZiYTI2NzUsCi0JMHhlYmMzMjM0OSwgMHhhN2NhMTY5OSwgMHg4ZGNhN2MyOCwgMHhjOTY3Yzg1ZCwgMHhlODA0MDg3ZiwgMHg4NWFiYjY4NSwKLQkweDIwZTk0Yjc2LCAweGUxMDMwNTQ5LCAweDAzNGI3YzA2LCAweDM5NTg0MGI3LCAweGI1YWJjZThiLCAweGZmNzQyNDQ1LAotCTB4ZmFhN2NhMTAsIDB4Y2ZkNTlmZDYsIDB4NjkzZjgwYzcsIDB4MzM3ZjI3YmUsIDB4NTdlOGUxNmEsIDB4NjNlZTJkZjksCi0JMHg1OWM0YThiYSwgMHg1MWY5ZmE2MywgMHgxOGU3YWM0NywgMHgxMmMzZjNlMywgMHg0NDY3N2UwMSwgMHhmMjk5NzJlZiwKLQkweDhmYzRjNWI3LCAweDA0OTJiMWZjLCAweDQ3OGVhOWYxLCAweGJiZTMyZGY5LCAweGUxNzdjNjI2LCAweGZjMGQ3NTE5LAotCTB4OGFkMjQxZjcsIDB4MzgwYWIzN2MsIDB4Zjc3YzYwZDIsIDB4Yzc3N2NhMzEsIDB4MDk3N2NkMGUsIDB4YjgwN2M5YTksCi0JMHhiOGI3ZWVmYSwgMHhmODAzY2UwMCwgMHgyYWVmZTcyZiwgMHg4YzBkMTMxZSwgMHg1OGY4ZGYwZiwgMHhmZDc5MjQ0MCwKLQkweGVhZGQ3ODcwLCAweGNmYTBlNzNlLCAweDA2ZTI0MmU4LCAweGMwZmJlN2ZlLCAweDgwNmU1MjY0LCAweDUxNjQ4N2IyLAotCTB4NGViMGVjZjgsIDB4YWQwMjdlZjksIDB4MGRjNDQ5ZjcsIDB4OTNiYTMzN2MsIDB4ZmJlODViYjgsIDB4ODdlMjY2OWQsCi0JMHgyODI2YTZmZSwgMHhjMGQzOGZkOCwgMHg3OTJmNDJlOCwgMHgyZmFkM2U0OCwgMHhlYTBjZWUyYSwgMHgxM2M0OWY2MCwKLQkweGI1YmRmODE5LCAweGQzYmZmNTkzLCAweDgwMmJiZjRhLCAweGFlZmMwNGVmLCAweGE5MTM3YmVmLCAweGJlZmIwYThkLAotCTB4ZTkxOTkwZjgsIDB4NmI0MWYyZTgsIDB4ZDBmMjg4YzAsIDB4ZmRhMzYxOWIsIDB4NDhkMWZjMjUsIDB4ODczZGJkNjAsCi0JMHg3YmU3YzhhYywgMHgyYjZlNjRmNCwgMHg0OTEwZWY2ZCwgMHg3M2UyMmI0ZCwgMHhkODI3ZjYyZCwgMHgyN2U5ZjEzMiwKLQkweDY4MDQyOWM1LCAweDA1M2RiODU3LCAweGFiMjEzMmI2LCAweDY1NTc1ZjkxLCAweGYyODNkZTc2LCAweDgxNTE5Zjc2LAotCTB4ZDZkOTdjN2QsIDB4NzRjYTFjYjUsIDB4ZTVhN2UyM2MsIDB4ZGIwNTY1MmYsIDB4Y2Q0ZmY2ZjksIDB4ZWY3ZDA5ZmYsCi0JMHgwYzVjNThmMywgMHhhMDdjZGViYSwgMHhhM2Y4YTMxNywgMHg2ZjE0NGM3YiwgMHg0MmM3YzQzMywgMHg1Njc5ZDI4ZiwKLQkweGUwNjQ1OWE1LCAweGZlMzJkM2M3LCAweGI0YmRmZWY0LCAweDNkN2VkOWZjLCAweDlmZGUwMjMxLCAweDY0OTczYTlkLAotCTB4MmEyN2NkMGQsIDB4NWQ5M2ZhMDMsIDB4NjRiYWY0NjEsIDB4ZDU1Y2I2YWYsIDB4ZGFmYjJkYWEsIDB4OWI1NGU1YjQsCi0JMHgxYTI2NzFkNSwgMHgyYWViYTZmNywgMHhiMWEzMjdhNSwgMHgzYTE2ZDNlNiwgMHg0NmFiZTM1ZiwgMHg5NjdmOWJlNCwKLQkweGUwMzY5OWJkLCAweDMxZDBiYTBiLCAweGUzMzFhMzgwLCAweGUwMmY1OGZjLCAweDAxNzNmZGI5LCAweDFiNGE0NjllLAotCTB4YmUwYzc5OWQsIDB4OWIyZWFmYjAsIDB4NzljODY3ZTcsIDB4ZmU5N2NmNDMsIDB4NDcwODc0OTksIDB4OTNjMTg5YjcsCi0JMHg5YjFmMDdmMSwgMHhlZTU3ZGQxMiwgMHhmNWQwOGVjZiwgMHgyNTFkOWEyZiwgMHhlZTM3YzZhZiwgMHhhMDQ1ZjFkMiwKLQkweDg5MWNlMGFmLCAweDlmNmRlYjZmLCAweDVkYjE2MzA5LCAweDU5ODlmMjI1LCAweDU3OWQxZGI0LCAweGI3YzY1NmM1LAotCTB4MThjZTkyOTcsIDB4NTRkNTBmZDgsIDB4MTQ1MTMxYWYsIDB4Nzg2MzZjM2UsIDB4MmExYjUyNTgsIDB4MzY3ZmQyMGEsCi0JMHhjMjQ2NGJkYiwgMHgyNWFmYTUzYywgMHgxZDdmZTAwZiwgMHg4N2E2MWJmNCwgMHhiMWQzNjZkZCwgMHg3MmNkN2JmNiwKLQkweDM2OGUwNmI3LCAweDk2ZDdkOTRkLCAweGVkODc3NzI0LCAweGZmN2MyNTk3LCAweDYwOTA0NTEzLCAweDdhZjk0YjNkLAotCTB4NmY3ODJmN2UsIDB4OTk1NWY4MDMsIDB4ZTg1MzBjYmEsIDB4ZmQ3ZWI3ZjgsIDB4YzVlZmNhMDUsIDB4NzVjNmNhMmIsCi0JMHhkYmQ3MGI4ZiwgMHgxNzU3Yzg4YywgMHhmN2M1ZWEzZiwgMHgzOTliNmZhZiwgMHhjZGI3ZDcxZiwgMHhjZmRjMDBhYywKLQkweDllOTAxNGVjLCAweDAyNWFhNzE3LCAweDViY2ZmYTI2LCAweDViOWY0YzZkLCAweDg0MTNiZjRjLCAweDg0OGM3MDgxLAotCTB4MzMxZGQ5ZGIsIDB4Njc0NzQwOWQsIDB4ZGZjZjFiMDksIDB4NTllNGU0Y2EsIDB4OWIyYmMyOTksIDB4Y2VmZTgxYjUsCi0JMHhlYmJlMzFiNiwgMHgzM2YzM2FkYiwgMHg3NzhiNGZlMCwgMHg2NzkwMmU4YSwgMHgxYWVhYzNhNCwgMHg3ZDNjYTA0ZSwKLQkweGY0MGI0MmU0LCAweDBhNmUyOTc3LCAweDZiYmNkZjZkLCAweDdiZTIyY2JhLCAweGZkODAxM2QxLCAweDZmM2JiOTIzLAotCTB4NWRhNWVmYTUsIDB4NzhkZjUwMTMsIDB4Y2Q5MWE3NjMsIDB4MGU3YTY2ZDMsIDB4ZDdlYjcxZDYsIDB4OTJjN2VhMjIsCi0JMHgyZjQxNzg4ZSwgMHg0N2I4MzY2YiwgMHg3NjU1N2VjMiwgMHhmMDAzM2IzYywgMHhiMjU2NzY3MiwgMHg0MmZmZGIwZSwKLQkweGMzYzAzMjIwLCAweGRlMDEyMmI2LCAweDBmMjQxNjJmLCAweGFkOGFjZmVjLCAweDcyZTFhNTk1LCAweDExMTM2Y2Q5LAotCTB4MWUzMjUzNWYsIDB4ZTBiMmU4NGIsIDB4ZTQwN2JhN2UsIDB4YmE0ZWQ1NTQsIDB4ZDlmYzYwN2YsIDB4YWY3ZmJkMWYsCi0JMHgzZDNmN2MyMywgMHg2MTc0NDQ1YywgMHhiZmM3NzY3MiwgMHg1ZmMxM2QyMCwgMHgzNGY4MDhiMCwgMHhlZWY1YzU4MywKLQkweGJhYjQ2MzJiLCAweDgwNzI2YTJmLCAweDVkNWUyZTVmLCAweGEyMGYyMzkzLCAweDhiZWRmN2JmLCAweDhlMWY3NDFkLAotCTB4NGQ4MzY0MjYsIDB4YjA3NTU3MjAsIDB4ZmQxYWVkMzEsIDB4ZGZiZDI4NzYsIDB4MDM3M2FiOTIsIDB4ZTIyZTRkZGMsCi0JMHgxMzNlOTY3ZSwgMHhhMGJmNTQ4ZCwgMHhhMDI1ZjA3YywgMHgxYTc4Nzg4ZiwgMHg5N2QyM2UxMCwgMHg4NzdkZWQwZiwKLQkweGNkOTI2YmFlLCAweGM3YTA1M2ZiLCAweDA3Y2VlMjBjLCAweGI5MjEyYmJjLCAweDAwNWJhYTk4LCAweGM4MGZkNDYyLAotCTB4YjdkMzIzMGUsIDB4NmRlZmE2MjQsIDB4ODFjZjI3ODksIDB4ZmI4ZWEwYmUsIDB4MWUyZmU4NGIsIDB4MWIxZWMyZjksCi0JMHhjM2U3YjdlZCwgMHg1YzAxOGVhZiwgMHg4ZmNmZDNhYiwgMHhiYmVjZjkwNSwgMHhhMTQxODVmMiwgMHgwYmI0YjVlYiwKLQkweDJlMmRhZmM4LCAweGYxN2EwMTBmLCAweDBiMjJjZmI1LCAweGFjZjlmYWYyLCAweDQwZTRjNWNmLCAweDZhZmViYWU0LAotCTB4Y2ZiNjdhNjMsIDB4NGU3ZWMyMTEsIDB4NmRmZWQ5ZGIsIDB4ZGNmYTMxYjYsIDB4MDAyYTIyYmUsIDB4MjNiYjc1ZmMsCi0JMHhmZjQ5ODY2MCwgMHg3Yzk0ZmJiZCwgMHhjNTM4YTU0NSwgMHhlMTg5YTU3MywgMHg1N2U3YjRkOSwgMHgzYmU4MTE2ZSwKLQkweGExYzNjODIwLCAweGQxZmRiMGFjLCAweDIwMmYzMTViLCAweGRiM2U3MWQyLCAweGYyYzdlZDkzLCAweDkxMmUyOWZlLAotCTB4ZmNmNjU5ZDYsIDB4ZTAwYjJlYWMsIDB4NDE3N2E2ZDQsIDB4MmJhYjhiN2IsIDB4ZDlmN2Q2MDYsIDB4YjAzMTUzOWUsCi0JMHgyMjNkOGFiZSwgMHhmMDIyYmJhZSwgMHhiY2MyYzI3OSwgMHhiYWYwYmU3ZSwgMHhjMDBkZmRlMCwgMHg0YjA0Mzg4YiwKLQkweDZjZjg3ZjM4LCAweDA1ODRhNWNmLCAweDk4Mzk1NDE2LCAweDFjMWMyYzdjLCAweDI5ZTQ0NzJlLCAweDViYjc4MDlkLAotCTB4Mzk3ODYxNmYsIDB4MDA2MzBiZjcsIDB4MzMzOWRlZjgsIDB4ZmM2MTVmOTUsIDB4Yzk5NTljZjYsIDB4MjYzNjkzYjMsCi0JMHg0ZDY5MDkxZiwgMHg1N2QzNzkwNywgMHgwNzU3M2ZiZSwgMHg2NjQ4ZmZlMywgMHg1YTE4NzdlYiwgMHhmZTNmNjFkMywKLQkweGU3ZWRhMGI3LCAweDA5MWQzYWMxLCAweDU5NWVkZTUwLCAweGY5NDM0MTQ3LCAweDVlMTdiOWQxLCAweGZmN2UwNzQ5LAotCTB4YTRhZmIzZDksIDB4MmZjZDg1OTcsIDB4NzlmNTNiZjIsIDB4OWFlZGM2ZGUsIDB4MjZkZGE3YTYsIDB4NTExOTVlM2EsCi0JMHhjMmE2MGJjNywgMHhlMzJlNjU3OCwgMHg0ODVmYzAyNywgMHhkZjc3NzRkZCwgMHhjZjYyYzliZSwgMHhhYjY0ZjZmMCwKLQkweGFmNjBmOTFiLCAweDFkMDBhOGNiLCAweDU2ZjVkZmFhLCAweDgwNGRiOTQ0LCAweGZlNDI2MjE3LCAweDA2MmVkNjU3LAotCTB4ZGI5ZmQwOGQsIDB4ZmEwMWNjM2QsIDB4NDQ3ZGZhYjYsIDB4NDYzOGFlZmYsIDB4ODA5YjQyNGYsIDB4NWU3NDY5NzYsCi0JMHg3N2YxZjkwOCwgMHgyZDRlZjdlNiwgMHg3ZjllMjkzZSwgMHgzMmFlNzgwMSwgMHgxMGE1OGU4NSwgMHhjMDAzMGZhNCwKLQkweDkxNmQ1MGNkLCAweGFjMjUzZTQwLCAweDdhMTVmNDYxLCAweGJmZmE4NzQ0LCAweDAxNjlkOTIxLCAweDRlNmI3NjdlLAotCTB4NmU4ZWFkNTQsIDB4Y2M1NDQ3NDQsIDB4YTdmNTQyNTgsIDB4NmM1Y2U0YjQsIDB4NzQ2NjJmZWYsIDB4ODEyMDRmZWYsCi0JMHg1OTBjMDIzNSwgMHg5NmJmMjAyMywgMHgzYTljNWU5OSwgMHhiNDBkYzg5MSwgMHhkMzNiM2RmOCwgMHhiNWM0OWM1NywKLQkweGJjNDZjYzU1LCAweDUwN2ZlMDBiLCAweDA1Y2FhMWUxLCAweDhmZTAxZmEwLCAweGQyMTMwNGU3LCAweGEwMmVkMDhmLAotCTB4NWFlYTI4OWUsIDB4NDNiZjQxZTcsIDB4NWQ5ZTUzZDEsIDB4M2QxOTUzYjUsIDB4NDlmZjk1ZjUsIDB4ZTc2NDU0ZjQsCi0JMHg5ZTgwM2JmNCwgMHg5M2QyMGFiYywgMHgzZDM4MzRkMywgMHhiYmY5MDIyOSwgMHgwN2JmMTNkYSwgMHgwZTQ0YWNlYywKLQkweGVmOWM0ZGFmLCAweDMxMzExZTg0LCAweDE5MDUwYWJmLCAweGY3OTRiN2FjLCAweDA0YjI2YTU3LCAweDJlMWY5MDQ1LAotCTB4MzBhZWY5ZmQsIDB4ZDUwNzYyN2IsIDB4NDk0ZWMxNmYsIDB4M2U5ZTdkMDIsIDB4NTdjY2Q2NTMsIDB4YjNhNDZmMTAsCi0JMHhlOGRhZWMwYiwgMHg4Zjk0MjYwOSwgMHg5OTlkNzVlYiwgMHg4ZTI0YWZhMCwgMHg3NDA3ZDlhYSwgMHhhZjJmMzg5MSwKLQkweDY3ZGEwZDYwLCAweDA3OTAzNmE5LCAweGJmZDE1YjIwLCAweGQzZDhhMmIwLCAweDJmYTYxNzFkLCAweDJmYTgwODc0LAotCTB4YzZlYTNmNTQsIDB4OTlkYjUzZjcsIDB4NjYxYmUwN2UsIDB4ZDdkNzdkNDAsIDB4Y2YwMWY4MjYsIDB4MDA0MzFlZDUsCi0JMHg4MTdhYTBmNCwgMHgxYmZjMDFmOSwgMHhlZmQ4MGFjYywgMHgxNTY1MzZjZCwgMHhiZmYzNGZkMCwgMHg1ZDNmMmUyOSwKLQkweGY5ODA2ZjQ3LCAweGQ3NDk3YTEzLCAweGJkMDA5ZmFlLCAweDNlZDA1ODU1LCAweGI2MDViNjZmLCAweDc3NzY4MjJkLAotCTB4MDNiYjYxZTcsIDB4ZjhkOTEzN2YsIDB4ZGY4ZTA5YzMsIDB4N2E4YWRmOWMsIDB4MGE2ZGYzN2EsIDB4ZmM3MDAzZjMsCi0JMHgyNzcyY2YzNSwgMHhhODFmNDBkOSwgMHhlNmU3ZWVkMywgMHg5ZDkyNzcxNiwgMHg1MmI1ZWZiZSwgMHhjYWYxZDBjMCwKLQkweDg3ODhjZDFhLCAweDk5YzE5MTY0LCAweGZjOTg5YWM0LCAweDRjMTdjODE5LCAweDg5ODRmNzAwLCAweDRmNGQzMTFjLAotCTB4YjdkM2JlYTMsIDB4ODBhNzI5Y2YsIDB4NmZhZjMyNzIsIDB4ZDBlM2E0Y2UsIDB4M2NmMzU4NzksIDB4OWY3OWEwOTksCi0JMHgzYzdlNWE2YSwgMHgwMjRmZDI4YSwgMHhjNDZlODdmOCwgMHhlYmQwN2UyNiwgMHg1NjRjNjFhMywgMHg0ZjcwYzM3NiwKLQkweDkyNDRlOGU5LCAweDg2Y2VmNmExLCAweGNhYzM5MzY5LCAweGY3ZmY3ZGJjLCAweDY5ZjZlZmZmLCAweGZiNzcyOGE5LAotCTB4NTRkYTYxZWEsIDB4Yjc2NWFiMWUsIDB4OWQ2YmNlOTksIDB4YTI1ZWJmYjUsIDB4NGRhOWFlZmEsIDB4ZDdmYmRmNjAsCi0JMHg4YTlkM2VkZiwgMHgxZDQxNWVlOCwgMHgzNzdhY2VmZiwgMHg0NGNjYTlmOCwgMHhmY2Y4NWUzMywgMHhmNWZlODhhNCwKLQkweGEyOGI3ZmI0LCAweDAyNTY1ZmI2LCAweGEwNTUzZGZkLCAweDczYWVkZjk2LCAweGQyNmRmOWQzLCAweDkwNDNmYjZiLAotCTB4YTBhMWVmZjIsIDB4NGY4YmU3OGUsIDB4ZGM5YzY4NmEsIDB4M2Q1MDE3YWYsIDB4ZGYxZjYwMjEsIDB4ZmJhYzFmYWYsCi0JMHgwNmU5YjRhOCwgMHg3Y2I0NTYzYSwgMHg1NzcyMDBjOSwgMHg4NzNlZjM5NSwgMHhlNDQ3ZmE4MCwgMHhlZjg5N2Q3ZSwKLQkweDU3Y2NlZmQ3LCAweGJhM2Q1MTg3LCAweGJmNDdhMzQ4LCAweGRhYmU0NzY0LCAweDI0YjYwMzM1LCAweDZmOTAzZmI1LAotCTB4MTBmMzFlZmIsIDB4M2VhOGU3ZDAsIDB4ZmE4ZWMwNzIsIDB4NDczM2Y5YzgsIDB4ZWNjZjdkNjgsIDB4NTE0YjFjYmYsCi0JMHg3OWIyZGRhMCwgMHhhZWZhZjdhMCwgMHhiZWI3NDg0OCwgMHhhMDQwNjJiZCwgMHhmYmUyNmI3NCwgMHhjMGYxY2E4NSwKLQkweDllOWZhMTcwLCAweDlkMzk5NDFlLCAweDA3NDRmY2RhLCAweDhjMjFkZjc0LCAweGQ1N2QyM2Y3LCAweDcxNGRkZmE0LAotCTB4M2VlNzEyOTksIDB4YjdlZjhmNjIsIDB4ZmRkNzIzMWIsIDB4MGZkOTlkOTEsIDB4NmRlMmRjYmUsIDB4MWVmZmQwMzksCi0JMHhkMDllODA4MSwgMHg2MTMyN2I5MCwgMHg5ZjRkZGEwMSwgMHhmYjBjMmMyNCwgMHgyOWVkYjJhZSwgMHg1ZWU1Njc4NCwKLQkweGZjNzBhMGZkLCAweDFjMjIyZWM4LCAweGVjYmUwZmFiLCAweDJlNzFiZTA2LCAweGE4NGYyMDIwLCAweDM3ZjUwMjkwLAotCTB4ODU0NTcyZDIsIDB4NTI0MTM0MGUsIDB4MmY3Zjk4MTgsIDB4MzVjYzhmYWMsIDB4N2Q3NGUxOTAsIDB4NDA5YmQwNDEsCi0JMHg5NzdiZGE4ZiwgMHgzNzU4NDZmZiwgMHhhZmEwNGZmZCwgMHhhMTE2N2JiNiwgMHhkNzNlZGQzYywgMHgzMDk5MjE2NCwKLQkweDA4NjViMmNmLCAweDBkY2EzOTA3LCAweDJkYzg2ODcwLCAweGFhNzE4MjRlLCAweDQ1OTBjZDY3LCAweDFjN2FhN2E4LAotCTB4N2EzZjU3ZDQsIDB4ZDMwYzQwNWYsIDB4ZjRkYTFiMDMsIDB4MTRlN2EwMjUsIDB4NTdlZTdkNTEsIDB4ZjY2OWRlNzQsCi0JMHg3NDVjNGJkYiwgMHhmYjg4YTcxZiwgMHhlNWE2MWZmMiwgMHhmMWYwNDMyZCwgMHg2ZTRjMWM0NywgMHhmZjFlMGFkNCwKLQkweDVmZDEwYWY3LCAweDZmZmRjMjQ3LCAweDZmNGM2ZDE5LCAweDY4Mzc2OGJjLCAweGVkMTdhZmZjLCAweGQ5Mzc3ZTEyLAotCTB4YzgxNTM5ZGYsIDB4MTVkNGIwZTcsIDB4OGZiNGZhMGQsIDB4ZmIwNzNmYjgsIDB4Y2EyYzc4OTksIDB4YzYyNzg4YjMsCi0JMHgxNTJiMWM4ZiwgMHgxYzk5MmJmNCwgMHg4MDZmZWI1ZCwgMHhkYTEyYzlmYSwgMHg3YWVhNDQyZiwgMHhhOWVkYzYxMiwKLQkweDA4MWFiODc3LCAweDdlNTAwN2RmLCAweDllZWQwZjM0LCAweGFiZGU3MWY5LCAweDVjNDU0NzQwLCAweDM4MzllZDRmLAotCTB4YWYyY2JmMzMsIDB4N2ZhYWVmNWYsIDB4MGQ1ODFhZDYsIDB4M2NhYWQ0ZmMsIDB4ZjRmYzAyNTEsIDB4MjRmOTA5NGIsCi0JMHhhNzNhODUzMSwgMHhmZjJhN2VkMiwgMHgxYjdlYzc2YSwgMHg3MTUxYmRhMiwgMHhlNmY1ZmU3NCwgMHg4MWQwM2Q0MCwKLQkweDc2YzQ0NWJmLCAweDIwYTZkOThlLCAweDczZDlmM2Y0LCAweDJmZDAxNmQ2LCAweDAyMjY4ZWY1LCAweDE1Y2Q0Yzc0LAotCTB4MWM5ODg3ZjQsIDB4ZjJkMGEyMWUsIDB4NDk3Y2ZmNTQsIDB4YTExMTc5MDAsIDB4YmYwNTRjY2YsIDB4MGUyYmRhMTEsCi0JMHhmMzE2MmJmNCwgMHg1MjljMzFmZCwgMHg2ZTEzMTljMSwgMHg3MWFiZGE4NSwgMHhmMWNkZmFmZCwgMHhmMDQ4ZTZhZiwKLQkweDc0N2JkNTUyLCAweDlkZTdlNjI2LCAweGMwOGEzNzM2LCAweGU4NmQ2NGY4LCAweGNhZmMwZTk4LCAweDdhMDI0ZThlLAotCTB4ODBhYjU1NzAsIDB4YmVlNTU0ZTMsIDB4NjViYjAwNjQsIDB4ZGZkYjJiNDksIDB4NTA2NzZlM2UsIDB4NWU4M2E1ZjgsCi0JMHhjZDE3MWQ5MSwgMHg0NjVhY2JmNSwgMHg1OGYzYTRlZiwgMHg0NWY5YzAwYSwgMHg2ODQyNGY4NiwgMHhiZGI4NmIzYiwKLQkweGQ1ZDk4YWIyLCAweGY3MDMzZmJjLCAweGJmNzE1Nzg3LCAweDU4ODQ5NTExLCAweGQ1NGUzNjNmLCAweDY3ZjM1NjMzLAotCTB4NzFmMjdiMTMsIDB4NmU5ZDA4YjcsIDB4MmY5OWUwMTEsIDB4ZWFiNmZjNjgsIDB4ZTMxYzdhNzMsIDB4NDM0N2IxM2IsCi0JMHg4NmZmNjAzMywgMHhmZjgxN2QyOCwgMHg2YjMwOWI2OCwgMHg3ZDc0OWJkOSwgMHg3MjhmYzZkYiwgMHhhNGU2MGE4MSwKLQkweGMwMTYyNGU0LCAweDE0OGE0YTdiLCAweDlmNmQ4NWVlLCAweDIxYmEwMGNmLCAweDZiZjcwNDI1LCAweGIxMTRkYjc1LAotCTB4NDAwZGM3OGEsIDB4YWU4YzQ4NWYsIDB4YzRmYTgxNjksIDB4M2U1MTcyMDcsIDB4ZmMxZjFmODMsIDB4Yjg3MDc3ZmYsCi0JMHhmZjk4NTkyNiwgMHg5ZmRhYjljZSwgMHg4YzFlNTBmOSwgMHgyNmY2NTllZiwgMHgwYTI2M2Y4YywgMHgxNDg5MTVlMywKLQkweDNlM2I1NjM3LCAweGU1N2ZjMGViLCAweDQwNDdmOTI0LCAweDk1NGIzYWZlLCAweDFhOGY5ODAyLCAweDg5ZDc4YTM3LAotCTB4NDNjYWNjMGYsIDB4YmI2NThlM2UsIDB4YTZlZjcwNGIsIDB4NmNlM2JiY2YsIDB4ZGY2YTJlYjgsIDB4ZTE3Y2MwOTUsCi0JMHgwZGRiODA3ZCwgMHg0ZTI3NDc2MCwgMHg3MTg3YzlhZCwgMHhjZjA0NGUyMSwgMHg4NGEwYTQ5ZSwgMHhjZjJhNjhmZSwKLQkweDZkM2EwNTlmLCAweGFmMDBjYTMzLCAweDNlYjdiNmQyLCAweDZhNWI3OTAwLCAweGU4MjJhZDIyLCAweDRiN2ExMTNmLAotCTB4ZjM1ZGNjNTYsIDB4MmY3YjZlODAsIDB4MzhmNWQ5OWMsIDB4MDNlZWViY2MsIDB4NDdlMjJmMmUsIDB4N2FkYzhmYWIsCi0JMHhjZmNiZDMwYiwgMHg4MGFkMWIzZCwgMHhmMzliYjkxZSwgMHhiMjNmYWE2ZCwgMHg5ODJmYzEzOCwgMHg0N2E5MTkxZCwKLQkweGI1YTcxMjNlLCAweGZmY2FmYTRiLCAweGNkOTIzZDcwLCAweGY3ZTc0ZmNmLCAweGY3N2YxODZjLCAweGI3YWZiYjcxLAotCTB4YzgwYzYyZTIsIDB4ZjQ3ZDU1YWYsIDB4NTE3ZmU1NDYsIDB4YjY1MjllYmYsIDB4ZDgxM2ZhMjcsIDB4NDU3NjdkNjcsCi0JMHhiNTIyM2U4NCwgMHg4NDA1MzhiMCwgMHhkYWVmOTBkOSwgMHhlMmZlM2MwYywgMHhmZjA3Y2U3NiwgMHhmOTA3MmQ4NywKLQkweGEyZTdmMWNmLCAweDE3Mzc0MGZkLCAweDk3YThjZDViLCAweDEwNDMzNjQ5LCAweGIyZmI1NWU2LCAweDgwMTNhMDMxLAotCTB4NzU3ODcyMGYsIDB4ODE4YWI4ZjAsIDB4MzllYzZiYzcsIDB4MDcxNDI4MGEsIDB4ZmJlNDFlMGMsIDB4MmNmNDk3ZmUsCi0JMHg3ODEzMTJhZSwgMHg1ZTVhMzllMSwgMHhjNzg5Mzg3YSwgMHhlZmY2MDg1ZCwgMHhmMDhkMTgzZiwgMHhjNGE1MWE1ZSwKLQkweDdmNGJmZjQyLCAweDllMjA0NzFkLCAweDAzYzc0YmQyLCAweDdiMzdjZjNjLCAweDRkNzgwYTdmLCAweGM5ZmViMjM2LAotCTB4YzU4NTQ2NmIsIDB4MzYzOTgyNzksIDB4MDA5Njg3MGEsIDB4ZTU0ZWZmZDMsIDB4YmEwNjgyZWEsIDB4MTdkMDE2ZWUsCi0JMHgzNTQ2ZGZhMCwgMHhkOWQ2YzJmZSwgMHhjNTg1MjFiYiwgMHgwMTE5NDAwZiwgMHhmYjllYWNiYiwgMHhjYWI4ZDVlOSwKLQkweDJiODdlNjYxLCAweDUzOTNmMWU3LCAweDAzM2QxN2IzLCAweGExNWFiNGExLCAweGI0ZWMwNGE2LCAweGQwNTMwZGNiLAotCTB4ODlmY2JkNmYsIDB4YWYyY2Y4NTksIDB4MTdkYmZhZDMsIDB4YWY3YzFhOTEsIDB4M2Y1NTI3YzYsIDB4MTk3MTE5NzcsCi0JMHhlZmRjZmU5OCwgMHg3ZDUxZDQzZiwgMHg4YTkzYTk0NiwgMHgxMjY2N2U0MSwgMHgwM2M4MzU3OSwgMHgzN2IxNGZjNSwKLQkweGU5NmIzZTgxLCAweDgxNzg5NDEzLCAweDkzYjY5OTQyLCAweDgwNTExZGVhLCAweDNhYjU3NWVmLCAweDVhZmU1Yjk0LAotCTB4YTlkYTFiOWQsIDB4MWM1NmYyZjQsIDB4NTdmZDIzZjMsIDB4NTA5N2YzMWMsIDB4MWM2MDA3NTAsIDB4ZTdhYjU5ZjUsCi0JMHhkZmRlN2VmZSwgMHhjMjBiYTIyYSwgMHhlN2IwMjc1MywgMHgxOTJhNTkzYSwgMHhmZGFiN2U0YywgMHg0YzZiZWFkNSwKLQkweDRlNmY0MDUzLCAweGZiM2ZhMWQzLCAweDE3M2RjMWIyLCAweDFjZjZjNWZkLCAweGI1YWQ1M2M0LCAweGQ1ODRhZWE2LAotCTB4NmNiYTVlZTMsIDB4ZmViMDc5MGUsIDB4OTYyOTg5NjYsIDB4M2YwM2IxNDQsIDB4ZmE2Mzg4ZWQsIDB4MTZkYzI0NDUsCi0JMHg5MWNiNjkzNiwgMHg4MGNhOTA3MSwgMHhiYzRlNWNiNiwgMHg1OWIyOTIyMywgMHg3ZGZjMjBkYywgMHg5NzY3ZTcwNywKLQkweGJjMzkzMjFiLCAweGJiZTAwNjVkLCAweGE1NTdmYWVhLCAweGQyZTliODMyLCAweGFkMmIzM2Q4LCAweDQxZDAyZTc4LAotCTB4MzI4NWY4MTYsIDB4YWFmY2M5ZTEsIDB4ZmYzODI1NzQsIDB4MDIxZDliYWMsIDB4N2NjNDQ3ZDIsIDB4OWU4YzZkNmIsCi0JMHgwZmNjZjVmYywgMHgzZmNlZjdmOSwgMHhlMzY3ZGU3MiwgMHg3NjNlZjgxMiwgMHg1NmJlMjEzYiwgMHg1ZTMwMWIyZSwKLQkweDEyZmVhZDdhLCAweGRmNmI0MzkzLCAweGYxZmY5NWY2LCAweGU3YjMyZGY2LCAweDJmYzY0NWViLCAweGE5N2M4Yzg4LAotCTB4Mzk2YjY2NGMsIDB4MGI5ZWI4MjUsIDB4ZDUwYjdiYzIsIDB4ZjUxZDYwMWIsIDB4OTFmMDAxNjIsIDB4NzA1OTc3YTksCi0JMHgyOTg3ZDUxZCwgMHg1NWY1YTExZiwgMHg4M2E1NzU4ZiwgMHhlZTJlYWY1YywgMHg4MGJjODFjYSwgMHg2Y2MyZjg0OCwKLQkweGQxOWY5NTI1LCAweDZhMGU2NTc2LCAweDUwZGU4MDhmLCAweDBkODc4ZGE3LCAweGQzYmEwMzhjLCAweGVlYzFlMzFjLAotCTB4MmRlZmI1MzksIDB4Y2NmYjVmOTAsIDB4YmZlOGJmMjgsIDB4ZmY2MTE4OGUsIDB4YmU0NGNjMWYsIDB4M2JjNTg5ZjYsCi0JMHhiZTNlZTIxYywgMHhlN2FlZTBhOCwgMHg2MThmNDEzMywgMHhiYjU1NTQ3YSwgMHhjNGY0MDViMSwgMHhmOGIwZGFiMiwKLQkweDUxYWZmYzFhLCAweDc1MjM2ZjFiLCAweDkzYmJmNDc2LCAweDhhZmJlZDY2LCAweDBkZGYxMTFkLCAweDIxMzViZjg4LAotCTB4YmMxOGI2NWUsIDB4NTNiZjYxMjMsIDB4ZjFmMTg0MzksIDB4MDIzYTk1MGIsIDB4NWQxNzJkZjgsIDB4NWQ0ODQwOGIsCi0JMHhmM2Y1NmIzMCwgMHhhZjg2NTYwYiwgMHhmZTU1MGU2OSwgMHhjZjAwNzJiOCwgMHg3ODAxZTU3ZCwgMHg5ZTAwZTU3NiwKLQkweDFiYzQ3NWNiLCAweGUwMTU0ZmRlLCAweDI5NzdlMjk5LCAweDk3ODVmM2M3LCAweDllMDBlNDI3LCAweDkwOWJlZmNmLAotCTB4YTJkZTc4MDMsIDB4YmVjMzcyNmYsIDB4NGI3YjI1OTksIDB4ZDNkZDhlMDAsIDB4NDE1ZmE4M2QsIDB4ZDFmNjEzYmMsCi0JMHg3ZGUzZDJiNSwgMHhmNDY0ZjM3ZCwgMHhmMzkwZGY3OCwgMHg1YmY4YzdmYywgMHg4YjhmOTI4NiwgMHg5NWExZTZmYSwKLQkweDkyODMwZThmLCAweGNjYTBmYzBhLCAweDM5NDZmYzY0LCAweGZhODM3ZjA5LCAweGY0NDY0Y2YzLCAweGVhZmUxYzdmLAotCTB4MWJjYzQ2ZDIsIDB4M2Y1MTE3NjgsIDB4MmMzYmZiNTEsIDB4M2Y0MWIzNzksIDB4ZDM4MWZjM2EsIDB4ZWU4NjE3ZTUsCi0JMHg4YWZjMGFkZiwgMHhlMGZjZmZjNSwgMHgwMmVkNTE2NywgMHhlNDhjYmY1NSwgMHhmYmU2M2ZjNywgMHhmZGMzYjM3YSwKLQkweGQ4M2JmZDk5LCAweGI4ZmZhYWE3LCAweDA1MzFiNzgyLCAweDc3YmQzMTJlLCAweGZlNjJlMDhmLCAweDI3ZjQ1NmUzLAotCTB4OTdjYzc3NTcsIDB4NjlmYzVmYzEsIDB4YWI4ZmY5ODAsIDB4ZmY0N2NlNWYsIDB4ZjVlMDY1NzEsIDB4ZGZjODBhNjAsCi0JMHg3YjA2NDE3NiwgMHgyN2NmNzJhNCwgMHhmZDJjOGIzMSwgMHg3M2I1MmY3NiwgMHg4ODZlODA5YiwgMHhmYTQ3MWI0OSwKLQkweGE2MmE3MDM0LCAweDNlZjM4MmRjLCAweDc2OGVmMzBkLCAweGY3NDAwYzg0LCAweDIzZmVkNGQ1LCAweDUyZDU0OTc0LAotCTB4NWJmNDE4ZTgsIDB4MTdhODIwZWQsIDB4ZWQ2OWI2MTQsIDB4YjgwNTRhNDEsIDB4MDMxZWVkZWUsIDB4ZWRlZGRkZjIsCi0JMHg3NWY4MDA0MiwgMHg5OTliYzE4MiwgMHhhNDhkNzIwYSwgMHhlNDA3MThjYSwgMHhjMzk3NmNmYiwgMHhlOGYzMDFkZCwKLQkweDAzYmI2YjhmLCAweGEzM2NiMDhlLCAweDQ4YjE2ZGFlLCAweGUyN2E1ZGJmLCAweDZkOWY4MTk2LCAweDI2N2U3MmIzLAotCTB4ZjNmYjdmMjEsIDB4MjFhMDViMGUsIDB4NzNmODZmNGMsIDB4OTUwOWU5ODAsIDB4NDQ5MWJlNmEsIDB4ZDdjNTEyODIsCi0JMHgwZmVlMzlhMiwgMHhlZmMwZGYwMSwgMHgzZWZjMTE4MywgMHhhM2M2YWNiYywgMHgzY2ZjNDA5NywgMHhkZTFkZWUyMiwKLQkweDFmOGUyZmFlLCAweGY0ZDZmNzE2LCAweDk1ZjI2YTQzLCAweDViZGM2ZDQyLCAweDc2NjdlZjViLCAweDJiMGZkZDMzLAotCTB4NTdlOWZhMGEsIDB4YmY0YTgzYzUsIDB4ZWQxZmRjZDUsIDB4MTZiOTM4YWIsIDB4MjZkN2Q3ZTgsIDB4MmY1ZjYwYzgsCi0JMHg1ZGZhMzE3NSwgMHhlMzJmZWQ0YSwgMHg5ZGZiODFkOCwgMHgwZGZhNTJiNCwgMHhlZDQzNzdlMywgMHhlNDIyOGZmZiwKLQkweDdiZmY0N2QxLCAweDNiNTA2OGYyLCAweGY4ZGY3NGZkLCAweGViYWJkZjZjLCAweDdkZjdmZDU3LCAweGQ4MTc2Y2ViLAotCTB4NTc1ODhjYmUsIDB4ZTkxYWRkYTQsIDB4Y2VlZDU3NzcsIDB4NWY4N2U1NmIsIDB4YWZjM2YwNDUsIDB4YTFmODhmZmUsCi0JMHg3ZTI4N2UyOSwgMHhmYzZiOGRhOCwgMHg3ZmYwZmNkZCwgMHg0Y2YxYmUzOSwgMHgzYTMxZDNjNywgMHgzMzJhMmFjYSwKLQkweGQ3YTY0ZWZkLCAweGUyZjEzNWI5LCAweGNkYzVhMjE5LCAweGNiMjJhNmUyLCAweGJiOGM4ODk3LCAweGRjNzgzMzJiLAotCTB4ZDdlN2VkOWQsIDB4NWYxMTE2NWYsIDB4NWMzZTNjNTUsIDB4NDE3NTYxZDUsIDB4NjJjYjBhZDMsIDB4YzY0NmNmOGMsCi0JMHhmYjI0MWY0ZiwgMHgyMjhhMDA2NiwgMHg2MTRiYThlMywgMHg3YjdmNjcxZiwgMHg5ZTNmMzUzYywgMHg1Y2U5NDdjNSwKLQkweGExNGYyMTMyLCAweGRmY2I1OGE4LCAweDhhNWNiNzVmLCAweGJiZTE4NmYzLCAweDAyMWE4ZjM4LCAweDQ5YjVkMDgzLAotCTB4ZDg3YjEzZjIsIDB4OTllMzViZmIsIDB4Y2YzYWZkM2UsIDB4NDgxYTcxZTcsIDB4NmNhMWU0MWQsIDB4YzFiYjQ2YjIsCi0JMHg1OGVhNzE4ZSwgMHg5YzRhNTFiZSwgMHg3OGZjNGE2NywgMHg5ZTFjZWZlMCwgMHg3NDRmYmYwNywgMHhlOGNmMmUxNCwKLQkweGY4OWY5MTViLCAweGUwMmUyY2FiLCAweDQ3MWZhYTdmLCAweGY3MDc3ZmVkLCAweDlkMmI1ZTgzLCAweGRkYWYxYmRmLAotCTB4N2ZlNTdkZjcsIDB4NTcyZmJlZDIsIDB4ZTM3YmZiYzcsIDB4NmMyOTViNzYsIDB4MjA4MWZiMzQsIDB4Mzg4MDllZmQsCi0JMHhiYTQwZTY1MywgMHhhMTlmYWExZCwgMHhiYzc5NzdlOCwgMHhlZTNjNTk2NywgMHhjYzU4ZjczYiwgMHhmZTQ2YmQ5ZiwKLQkweDNhMTg1ZDEyLCAweGIyMjJmZTA1LCAweDdmODBhOGRmLCAweDI4MjVmYzEzLCAweGI4OTMxYjE3LCAweDAyMmFlZWJkLAotCTB4MmViZTQzMzgsIDB4MGM3ZDZiZTQsIDB4YjQzNDljZmYsIDB4YjdkOGQ4ZmUsIDB4ZDhmZTk5ZmYsIDB4ZTkwN2ZlNTcsCi0JMHg5ZWM4Mzc4ZiwgMHhlZWNlYjA4ZCwgMHg5MDFjZWUyOSwgMHg3NGFjZWI2ZiwgMHhiZTE3NjBmZSwgMHg3NjhjZjJjMCwKLQkweGVlN2QxOTk4LCAweDkyNWQxODEwLCAweGU0ZDc3MTE1LCAweGFmMTNkOTc3LCAweDg2N2I5ZmU1LCAweDJlZmZmNzljLAotCTB4YTdmZDZjZmYsIDB4YzRiZmNmZjEsIDB4ZTg3NTFmODAsIDB4MmYyY2ZjN2UsIDB4Y2RkM2I4YjcsIDB4Nzc2NDY5ZTMsCi0JMHgwN2RiN2Y5OCwgMHhmYmY0NjZmOSwgMHhlYWJlN2MyMywgMHgyZTVjOWRmYiwgMHg0N2RjMTI1YSwgMHhmZjljMWY4MSwKLQkweGIxMjI2NGQwLCAweDY0MjllNTU0LCAweDYzZGFiMTdjLCAweDc1NDJmOGMxLCAweGE5N2JjYjJiLCAweGZmMjA4YzdlLAotCTB4NjlmZjA2YWUsIDB4NjcxNWY4MWUsIDB4MjZmN2QwMTEsIDB4MDAyN2JjZDksIDB4YjIzZWViY2YsIDB4ZjA1OGM1ZjgsCi0JMHhhMDI2Y2ZiYiwgMHhjODdjZjVkZiwgMHhiZDk2N2ZjYSwgMHg3YmVmNTA5ZCwgMHgxOWUzMGJhYywgMHg2MWNmYjNjZCwKLQkweGQ1ZDE1NWRlLCAweDBhNGI2YjRiLCAweDQ3ZThiZTcxLCAweDRkNDkxODcwLCAweDFhZmU5ZTM4LCAweGQ1OTZmMmNmLAotCTB4NzgzZTk1ZTcsIDB4N2ZhZmQxYmIsIDB4MTFlNTgyYmUsIDB4MTk2ZTFjZmIsIDB4NWZhYTExZmMsIDB4NDRlOTVhM2MsCi0JMHg3ZWY1NTMzZiwgMHg4OTE1YjRhNiwgMHgyN2U0M2Q2YywgMHhkNTRmNDhhOSwgMHg4M2U0YTdmYiwgMHg5YWI0OTRmZiwKLQkweDJkY2Y0MWYzLCAweGVkMDVhM2ZhLCAweDI2OGZmM2JkLCAweGZjYzQ5ZTYzLCAweDk4NTllZjM4LCAweDcwMzBiNWFmLAotCTB4MTlhNWU4MWIsIDB4NzdkMDFjNzQsIDB4MmRiYmVmY2YsIDB4ZjJhZGU2MWYsIDB4M2ZlMDJkYmYsIDB4NThiN2VkYTcsCi0JMHg2MjcxN2ViNSwgMHg5NWRkZjk2MiwgMHhmZWE4YTdjZiwgMHhiN2Y0MTBmMywgMHg2MjQzZWY4NSwgMHgzNTlhMmE2OSwKLQkweGY3NTdiZWM4LCAweGMzYThhMjdiLCAweDYwN2YxM2ZlLCAweGNhYjkzOGMyLCAweDg5ZThiNjBmLCAweGNmZGQ5NGQ3LAotCTB4Y2YxMGZlNDcsIDB4M2MxY2ZiZGUsIDB4MTY3ZGIxNWYsIDB4NjVlMTRmY2IsIDB4ZjBhYTdmMGIsIDB4ZmU5OGVjZGMsCi0JMHgxZmM3OTgwNywgMHhjYmViYTVlMiwgMHg0YjA1OTMwYiwgMHg3NWViM2M3OCwgMHg3ODg3ZmJjMSwgMHg4MDMyY2YxNiwKLQkweDhhMzE0ZTdkLCAweDJiZTg5NjdlLCAweDkyY2U3ZjRjLCAweDU2NDc0ODBkLCAweDNlMzBkZmJhLCAweGY0MDhlOTQzLAotCTB4Y2VhMWM5ZjgsIDB4OWQ3NGIxYTksIDB4OTM4MzlhYzMsIDB4YWY4N2JlMDEsIDB4ZDI0ZjEwZTgsIDB4OWYxODEzYWMsCi0JMHg3OGQ4MTU4OSwgMHhmNTVkOGRkOSwgMHgyMmZmYzAyMywgMHhhMDMzNzdiZiwgMHg4YjkyNjk1MiwgMHhjOTM3ZDQyMSwKLQkweDQwNGU0OWU2LCAweDJlNGQ3YTdmLCAweDdiZmM1NzhjLCAweGVjOTNjYjNkLCAweDQyYmY0Njg4LCAweGNjNTJmYTczLAotCTB4YzhmOWVjOTMsIDB4NDg5Y2ZlODgsIDB4ZmQzZWEwZjksIDB4NDVlNjM1NjQsIDB4MjdmZGI1NjYsIDB4ZmJhYzA5YzYsCi0JMHhkNGRjMGQwNSwgMHgwYjA0ZjhlNywgMHgzYmY5NWY4YiwgMHhjZDZlNjA2NywgMHg1N2YyMDc2NCwgMHgxODhmZTNhOSwKLQkweDI1ZWE5NjlmLCAweDU2YTQzY2UwLCAweDgxOTlkNmVmLCAweGU4MjJhZDdmLCAweDJjZGUxY2U3LCAweDE5NWYwMGViLAotCTB4ZjdhNjJmM2MsIDB4N2FjNzVmZjAsIDB4ZTM1MTRlZDEsIDB4ZDc5NjAxMDIsIDB4MGI1YWVmYTQsIDB4YWFiNDk3ZjYsCi0JMHhlMDNmMTZlYiwgMHg1NzRkYmY2MywgMHg4NWZkMDc5ZCwgMHhkMmNmZDFhYSwgMHhjZjgwNGQxMSwgMHhhZjY1YjQ2NywKLQkweDMzOTY4OWJlLCAweDgzOGM2NGVhLCAweDkyNWExZWY1LCAweGJhNTU3ZTgxLCAweGFjODNlMWNlLCAweGU1ODEzZDMzLAotCTB4MTgxMzM5MjEsIDB4ZDExZDQ4YmQsIDB4ZDI2NzkwM2EsIDB4ZDE4MmUyNjYsIDB4MzJkZDZiMzMsIDB4Y2I4Nzc5ZjgsCi0JMHgyNWI5ZDIxMiwgMHg3MDAyNWJjMSwgMHg4MDdjZTY4ZCwgMHhiOGMyODhhYywgMHg3ZTYyNTVhMiwgMHg4ZjhhZWIxMSwKLQkweDQ0ZTcwMTdlLCAweDAzZjNmMTc2LCAweDllOGYwZjQ3LCAweDdhYmRmZThkLCAweDVmYjgwMDQ5LCAweGM5YmNiMWI2LAotCTB4NzNkYTA5MzksIDB4M2VmMGZkMDcsIDB4NTlhN2Y5OGEsIDB4ZTRjOWZmMWQsIDB4ZmEwYjFkMTcsIDB4M2U4Y2Y0OTcsCi0JMHgwYjQ3N2FhNCwgMHg1ODc3MTFmOCwgMHg3YjZmOThiZCwgMHhjNDUwNmQ3MywgMHhmZGRjOTkzOCwgMHg2NjEyODk2NCwKLQkweGYyNjU2Y2NmLCAweGIzMmY3YWE0LCAweDk3ZWQyM2JmLCAweDU1MjM5MzZmLCAweGQyMzk1YTA5LCAweGU5MjdmZTU3LAotCTB4YWUxMjJiMjcsIDB4NWEyMTJlZDMsIDB4NGY1MjJlN2IsIDB4MDZkZmI0ODksIDB4ZmQxMWRiZTgsIDB4YThhZmE1MGQsCi0JMHhmZGM1Mjc3OSwgMHhkOWJkMzBlMywgMHg3ZTQzZWFhYSwgMHhiMTRlNWU0ZCwgMHg0YzRiOGQ4NSwgMHhkYjI3ZmVkYSwKLQkweGNjOGY5NjY1LCAweGQ2MTI3NGYzLCAweDkwMjRhYjI4LCAweGQwNDZmZjU3LCAweDBiZTZhNzJmLCAweDVlNTk4YmY5LAotCTB4Zjk0NzVmOGYsIDB4OTdjNDI2NWYsIDB4Mjg0ZjMwOWEsIDB4MDEwNTA0ODUsIDB4MDQ1ZDY2ZmQsIDB4N2M4NDRiYmUsCi0JMHhlM2RkZmEyMSwgMHhlZjM4NTkwOSwgMHgyNzU1YzQ5ZCwgMHgwNDU0N2YyMiwgMHhmMjE5Yjc5OCwgMHgzNTJmMzA0YywKLQkweDhjMTE2ZGIwLCAweGM3MDViNzczLCAweGM5OWU0MzMxLCAweDcwMTU0ODM4LCAweDNhN2UwMzZmLCAweDExYzU4MmI1LAotCTB4MDVkY2E5OTIsIDB4YzYxZTRkZmEsIDB4OTczY2QwZTgsIDB4ZjlhODliZTUsIDB4ODdmZTZhMjQsIDB4MGU2Mjg3MGEsCi0JMHg4YjExZTRkZiwgMHhkNWVmODEzMiwgMHg0MDE3ZGUwYiwgMHgxODE3YTljZiwgMHg5ODFiZmM3YywgMHg0NmQ5YTExZiwKLQkweDZlNWE2OGY1LCAweGY5ODUxY2FlLCAweGY1ODRiZDdlLCAweDIxZDBhZmVmLCAweDgwZjlhYTVkLCAweDc2MTVjM2NkLAotCTB4MjI2ZmU1M2UsIDB4ZjljZGVmZWEsIDB4NDA2NGJmMmMsIDB4NWMwNDRhMWUsIDB4NmU5NDNjZDUsIDB4ZjYwM2I3YWIsCi0JMHhlNGM4YjI2ZCwgMHhhMjM3OWFhOCwgMHhmZTE4NDlkMiwgMHhkZTNhNjZmYywgMHhiZmE2MGVmNiwgMHg3MDE4NTcxNywKLQkweGI3OTViZDFkLCAweGI3YjFmZmEzLCAweGNlNDA0NzUyLCAweDE5MWJiNzE3LCAweGI3OGM0NWRkLCAweDA0ODFhZTdkLAotCTB4NjAyOTVmYTEsIDB4OGU3OWZjYzYsIDB4NWZkMzZmZmYsIDB4YzE3MzVlMjksIDB4NjU3NDdiYmYsIDB4MGE2ZWI4YzksCi0JMHg3YTU2MzdlMywgMHgxNjZiZDlmMCwgMHhkN2M4NDU1YSwgMHgwMWU2ODczMSwgMHhmODljZGE0NywgMHg0OWE0M2JhMywKLQkweDRhMTM1NzkwLCAweGVjYzkyODE3LCAweDU0YTBmZTcwLCAweDM3YTA3MmEyLCAweDk0MzFmNDNlLCAweDljN2M0YzVmLAotCTB4NzY4Nzg3OTUsIDB4ZDFmZGI0MDksIDB4ZDhhNTFkYTcsIDB4OTkzMTY4MWUsIDB4OTgyNTNmOTAsIDB4ZWI5NmZkNGIsCi0JMHg0MDY0NmY5MCwgMHhjMGE3YzZiZSwgMHhkNzQ4YWE4NywgMHgwYmY0NGVkYSwgMHhjODU2Zjk3MSwgMHg2Njk5MjFmOCwKLQkweDk0YmYzMDBjLCAweDc3YjFmZTgyLCAweGVlNTEzMjkzLCAweGY2YjM3MjViLCAweGFhN2Q0Mjc3LCAweGI0NjlmZDExLAotCTB4ZGRmZGU5MWUsIDB4YmQ1ODUzZTEsIDB4NTI0ZWYwYzIsIDB4ODM2ZjJjYWQsIDB4OWY4MWY5NzQsIDB4MDUzOTliYmQsCi0JMHhiMDU1ZDJmZCwgMHhmNGZlYTgxZiwgMHgwNTdiYzVhNiwgMHhlODQxN2FmMCwgMHhlMGZiMGU1YywgMHg5YWZmZTlkZCwKLQkweGUxN2RmNDA3LCAweDAxODY0ZmMwLCAweGEwNjk5OWJmLCAweGZjMjBmOTdhLCAweGUzMjc3MWU1LCAweDRiN2FiZDJmLAotCTB4NzlmYjQwOWQsIDB4MTIxNWUyZGMsIDB4ZTg4M2Y5NjksIDB4OTUyMDMzNzksIDB4MTRkYzZlN2MsIDB4MjAwZDFjMDMsCi0JMHhlMDQ0MTdmZSwgMHg3ZjFjZjE3NywgMHg1ZjRjMzliNiwgMHgwOGYzNGRiNCwgMHhjNmI5Zjc5MCwgMHhlZjExZTZjYywKLQkweGJmYThkYzk1LCAweDc3MDhlNzc4LCAweDExYWZmNWQzLCAweDk0NDMzZWI4LCAweDE0M2JiNDU4LCAweDhlZWMxNjI1LAotCTB4YzIxZTJiYTUsIDB4ZWY5MTZmYmMsIDB4OWJhZDQ5ZTcsIDB4N2Y5N2QwNDUsIDB4NGRmOGYyYjcsIDB4ZTVhMWIwZDIsCi0JMHhmNjExNWRmMCwgMHgxMjU0ZmE4NSwgMHg4YjY2M2FkOSwgMHg4ZmEwMThjYSwgMHg2ZmUzNDJiNSwgMHgzZGUwOTM0YSwKLQkweDMxZTliM2EzLCAweDVmMjEwYTJiLCAweDRkNzQ2NjdhLCAweDIyY2RjNjIxLCAweGY3ZDJjN2RmLCAweDIzNjU2MTc5LAotCTB4MTRkNGI3NmIsIDB4M2QyODk3NGEsIDB4NjFkZWNkM2IsIDB4ZjNjYjk3MDAsIDB4ZmIwZTU5M2YsIDB4YmJmMjc5NzcsCi0JMHhjMmJlNDMxZiwgMHhkNmUyN2FiYiwgMHhlMjRkM2VjMywgMHgxZjJhNDM3MSwgMHgzMmM3YmYwMSwgMHgyODZlMmM2YywKLQkweDAzMWE5ZDZmLCAweGVmODY2Y2U1LCAweGUzMDA0OGRiLCAweGQ4NzNhNWQ0LCAweDQ4M2JjMTM5LCAweDZkMTc2ZDY3LAotCTB4NTdhOWQzMzcsIDB4ZWNlOGMyYmEsIDB4YmU1YjQ1MzYsIDB4MmU1YjU3MjMsIDB4ZmYxMTc5ZTUsIDB4YmZiZWQyZTIsCi0JMHhjMDI0ODQ5MywgMHg3ZTI2ZjdmZiwgMHhmZGZjMjIzZCwgMHgxYmVlY2Q4ZiwgMHgwYWFmZmU2MSwgMHgzZmQyOGYyYywKLQkweDg3YThjODg5LCAweGU4M2YwNDNhLCAweDQ5NWZhMzA1LCAweDU5MjZlN2U2LCAweGI5Y2ZkZmJlLCAweDQ0Y2FmMzFkLAotCTB4N2IwOWY1ODIsIDB4MGYyMWJiNGQsIDB4OGIwN2Y1NWYsIDB4OTNiNDdlYmMsIDB4YzhlYzMyOTgsIDB4ODRhZTUwOGYsCi0JMHhlODM3OWUwNCwgMHgzOTA5MThjMCwgMHg3ZTY2NGNiMCwgMHg0MGQ2ZGE1MSwgMHg1ZjMwMzlmYiwgMHg1ODI0Yjg0MSwKLQkweGEwMTZlNDc0LCAweGQyMTM0MmViLCAweDI5OGE1MTc1LCAweDI4ZTBlODBhLCAweDNmMWYyM2E3LCAweDU1ZDJhMzg3LAotCTB4OTAzYzQ0OTEsIDB4OWU4NzQwYmYsIDB4ZjU3N2NmMDMsIDB4ZmZmMDExZjIsIDB4NzgyMzNmZmEsIDB4Mjk5MDhhNGUsCi0JMHhmMjMxZTYxMiwgMHg4NTU5MDhiMSwgMHhiZDM5YTdlNSwgMHhlZGY5NTUxZSwgMHg2ZmM4NDliZiwgMHg3MDFhYjRkZiwKLQkweDE2YmY4OTVmLCAweDQzOWY4MDViLCAweDVmZDY5OTFiLCAweGYzODUxYzZjLCAweGRkMDNmNzUzLCAweDA5MWNjM2JkLAotCTB4ZmRlNjcyZTgsIDB4NDQ5ODNhNGEsIDB4MmFjYWNjYWUsIDB4MzhmODYyYmQsIDB4NDEwZmU0MDEsIDB4NzM4ZDUyM2QsCi0JMHhiZWZhOTlhNSwgMHg0OTc3YzM3MywgMHg3NGJiOWZiYywgMHg4YTRjZGUyYywgMHhkYzlkMWM3OCwgMHgzZjdjYzQ2NSwKLQkweGJmYjQyZjVlLCAweGY3ZTAyNWY1LCAweGRjNGNjNGYxLCAweGI3ODg3Yjc0LCAweDM0NDZlODBiLCAweDRiYTAxNGI4LAotCTB4ZGFlNWNlOTUsIDB4OWQyOWJmNDMsIDB4NzljOWViMDQsIDB4YmI3M2Q3MDQsIDB4ZTRmNTg2NTUsIDB4NmI5YzMyNTIsCi0JMHhhZTNiYTdjNywgMHhmNDYxZmEwMCwgMHhlZmIxNDYyZSwgMHhmYjc5MmFlZiwgMHgzZThjMjkyNiwgMHhlYzU1ZjdlOCwKLQkweGY3ZWQ2OGZiLCAweDNkYmRmYTRlLCAweGZhMThmYmVjLCAweGVmYzBkZTdkLCAweDcyMjIwOTA5LCAweGJmZjNlNzZlLAotCTB4ZWU4OWU3OWQsIDB4YmE4MjlhYjEsIDB4OTE3ZmQwYjEsIDB4MTNiZjQ1ZDIsIDB4YzNmN2Q4MTMsIDB4ZTA3YmU4NjIsCi0JMHg3Y2RhYjlmYiwgMHg2NWQxMzIwYywgMHg4OGRlM2NjMiwgMHhjMjk5OGJmYywgMHhkNzQwNDk2MywgMHhkYWFhOTliNywKLQkweDZmZmY2OGJiLCAweGQ0Y2NmYzcxLCAweGYzODBiZjc5LCAweGNiY2Q2ZjY2LCAweDU3ZmMwMzc5LCAweGJmYmEyNjI1LAotCTB4MDU1ZjYwYjIsIDB4N2FkMjAyZDcsIDB4YjE5Zjc4YTcsIDB4ZGRmZWUzNjUsIDB4MmQ1ZmY0MDEsIDB4NjlkODQ3N2EsCi0JMHg2OWJlODJmOSwgMHhkYzRjYjJkOCwgMHhlMzEzM2IxNywgMHhjNTVmY2UwNywgMHhhMDBlYmFiZiwgMHgzZWE3YTAwMywKLQkweGI3OTg4ODNhLCAweDY3NzIyZjhhLCAweGVkYWMyNjJiLCAweDNjMDg3YWE0LCAweDkwODRiZDU1LCAweGFjOWY5NjFhLAotCTB4OGJhZmY1YTQsIDB4NTMwY2NiMTIsIDB4MGJkMDMwY2QsIDB4ZTNmNGFhZGUsIDB4N2I2OTlkYmUsIDB4OWU5N2YzMTIsCi0JMHgwNGJlZjI0ZiwgMHhjMzdiOWRmMywgMHgzNDEyZTllNywgMHgwMTFmY2U3NiwgMHhkZjNhMjA3ZSwgMHhjZTVmZmQ1ZiwKLQkweDA2YmZkNTU3LCAweDY2N2VlN2U0LCAweDBlZTdlNGQwLCAweDcxZDQ3ZmI1LCAweDg5NTdhMDdkLCAweDgyZGJjNzkwLAotCTB4MzliZWI2ZjksIDB4YWI5YzE3MTYsIDB4NjhiZTQxZjAsIDB4NTA3OWM2MjEsIDB4MzAyNDNhYWYsIDB4OTgyZmQ1N2QsCi0JMHhhZDc0MWViOCwgMHhlOTg0YmM3OSwgMHhmYTdkNTU0YiwgMHhiZDBmMjY5MiwgMHhiYmNkOWYzOSwgMHhmYTgyOTk3OSwKLQkweDZiMDJhYmQ2LCAweDk4NGY5ZmVmLCAweGQ3OGIzNjNlLCAweDVlYjE5NDJmLCAweDZlNmY1N2NkLCAweGU2YjVmZTYxLAotCTB4ZDAyODQ3OTcsIDB4NTBhM2Q1MmYsIDB4YWU1ODkzMWUsIDB4ZmUzMjY1YTcsIDB4OTE0OTNjZGEsIDB4NDRkYzBjZmQsCi0JMHhhZmNmZTg0OCwgMHhmYTY3YTJkZSwgMHhhYjlkNzZkZiwgMHgwYzQxZjMwOCwgMHhmMTYyM2Y1NCwgMHg4NjlmYzY1YiwKLQkweGZkMjNmMWIzLCAweGFhMjc1ZjcwLCAweGMzZjMwMDc2LCAweDQxZmY5NWY1LCAweGIyNTliODdlLCAweDdmNjkzODk3LAotCTB4ZTlkY2YzMGIsIDB4MTc5ODJjZmEsIDB4ZmE1MWM3ZjMsIDB4MjA0OWQxZGMsIDB4MTg2NmFjNGQsIDB4OTFiN2NkZTgsCi0JMHhkOTc0Zjc5YSwgMHg2ODA2OWY0OCwgMHhhNTM0NzczZiwgMHg3ZDBkNmNjZiwgMHg4Y2YxOWQxYSwgMHgyMmJjYzIxZiwKLQkweDFkMjQ0MWY5LCAweDY1NzhjNTY2LCAweGQ2ZDlhN2U4LCAweGQwNmFjN2ZhLCAweDJlOGRkYjM3LCAweGYyY2E3Zjk2LAotCTB4NDBmOTIyZTksIDB4NDgxNjdjZDgsIDB4NTEwZTNlNmMsIDB4MDczOGY5YzQsIDB4ZWNiNWNmOWIsIDB4NGNmYTcwOTMsCi0JMHgwYzNmNmMyNCwgMHgyNTEyNWZiNSwgMHhmNDE2YjdlMiwgMHg5YjFmOTdlZiwgMHhiZDYwMjNiZCwgMHgyZDY2ZmI3ZCwKLQkweGNjMDYyZmIzLCAweDdkMjBiNDViLCAweDhiMmY3M2RkLCAweDk5YTJmODM3LCAweDQzYjg4MzVjLCAweDE2N2YxZDEyLAotCTB4N2E5ZWZmMWYsIDB4ZmNmNzg3NDYsIDB4NGI3NDgwZDAsIDB4Zjk4NDFmYTcsIDB4YjNmNWU2Y2YsIDB4ZGYzMGFiZGEsCi0JMHhmZDM0ZjY2OCwgMHhmZjBkMmVjOSwgMHhlN2JjMjM3NSwgMHgxYzczNzZmMiwgMHgwMmQ4N2FmOSwgMHg3MWI1NGE3MywKLQkweGIzZjdiOTg1LCAweGE0ZGRjNmI4LCAweGJkZjMwZjQ2LCAweDlmYjY4ZTY3LCAweDczZjFhNGI5LCAweDdiOWE5ZmM4LAotCTB4NTRmZGY2YmYsIDB4YzliOWRmNjcsIDB4Nzg4ZjEwMTEsIDB4YmRlMWRiODMsIDB4N2VjMGJmNzQsIDB4ZjE3ZTMzN2EsCi0JMHg3ZTk0NjU4ZSwgMHhhZjM0ZmM0NywgMHhkMzAzZmMwMCwgMHg2Y2Y3MmExMywgMHhiN2U3ZTVhNiwgMHg5YmYyYzI4ZiwKLQkweGQxZjgzZjA5LCAweDJiYmY1MGJiLCAweDIwZDNjYjA3LCAweDA4ZWMwYzE5LCAweDZmMjA4ZmQ4LCAweDNkYmRlZThhLAotCTB4ODZmYjhlOTMsIDB4OGNiYmY3OTksIDB4YTMzYmRiZTUsIDB4NjhiM2NkYmMsIDB4MmNkOGU3M2IsIDB4YzY5YzFiY2MsCi0JMHg0MmVmNGRmOSwgMHgwZGM3N2Y1NiwgMHhmYTFhOTY1NiwgMHhiOTdlODI4MCwgMHg3OWExNTE2OSwgMHhmMjI3ZmY0MCwKLQkweDc5MDA1MGZmLCAweDc4YjJkM2FjLCAweDUxZDVlMGI5LCAweGY4NDM3ZTUwLCAweDRkZDgxZTdjLCAweDA5MTY1NTNkLAotCTB4Y2M5ZDVmZTAsIDB4NzNhMzk5ZmMsIDB4MGE0OGUwODUsIDB4ZGU3NjY5OTcsIDB4NTc1YjE1N2YsIDB4YzkwYmMxNjksCi0JMHgxNWE2M2ZiMCwgMHhiYjQ2N2ViMywgMHg0MzY3ZDRhNiwgMHgyYzQ1ZGQzYiwgMHg2MjliMjRmNywgMHhmYmFhMWY4MCwKLQkweGZiOTM5OTZjLCAweGU0OWViODA3LCAweDE1ZmVmYmUxLCAweDcxYjUyN2Y3LCAweDQ5OGY1ZmI0LCAweDNkMTJjMTcwLAotCTB4ZmI0MTNmMTMsIDB4MzlkODU4OTQsIDB4NTMzYjhmMmMsIDB4NTRlODdmMDIsIDB4ZGM3M2NiMzcsIDB4MDJhYzhhYmEsCi0JMHhjZGViNjQ3ZCwgMHhhZDBkNjk2ZSwgMHg3YTIyNmE5ZiwgMHhjZTk0NmI5MCwgMHg5YjdhMDExZiwgMHhmNGYzZTEzYiwKLQkweDhiMmUyMDE4LCAweDNhNTVjZTk2LCAweGY3ZDJhNTlhLCAweGQzMWQyZDM0LCAweGU3MTNmOWZkLCAweGNmZTc2ZmY4LAotCTB4ZjczNjNhMWEsIDB4N2E1MGYxZDMsIDB4MWQ1NzlkMzksIDB4YjQ5YmJmZWUsIDB4OWM2ZmFhZjIsIDB4MzkxODdkODgsCi0JMHgwMWZjNTBlZSwgMHg2N2Y5YzJmZSwgMHg3MTVhZmNmZiwgMHhiNjQyYTViZiwgMHhjN2VjMzY1OCwgMHg2ZTNmNzUyNiwKLQkweDc0MThmODAzLCAweDI0ZmU3ODlkLCAweGMyOGQ3MDQzLCAweGU4NDM5YjAzLCAweGQyZmNlYTE1LCAweDMwNTkyN2MwLAotCTB4MjdmMDVlNzAsIDB4ZmIxZDdhYTksIDB4OWIxZDgwNzMsIDB4NzdlOWViY2EsIDB4OWZlZjYyNmUsIDB4MDVmZjFkMTcsCi0JMHhkOTZiN2ZlNCwgMHgzNTBhNzY3YywgMHhiZDcwOWY4YywgMHhhYjdmYjU1YSwgMHg2OWI2ZjVkNSwgMHhjNTE0NWJkNywKLQkweGMxM2I3YmNlLCAweGU5M2U4MTRmLCAweGYzN2Q1MWZjLCAweGE4M2MwNmJlLCAweDM5NzFmMWViLCAweGIxZTRjNzNkLAotCTB4ZWVkYWU4MWEsIDB4ZmQyMzk1YjYsIDB4NWZmODlmN2MsIDB4YTBlODdkMDYsIDB4ZTYxODdiYzUsIDB4ZWZlNzU0NzksCi0JMHgyMTYzZmIwMCwgMHg5MjVjNjM3MSwgMHhjZTZiYzdkMiwgMHg5ZDQyZmQzMCwgMHhhYTljMjQ2ZiwgMHg5MTlmZTA4NywKLQkweDRmODQ4OWViLCAweDUxM2FkZTNmLCAweDc3Y2Y1MzlmLCAweDFhZjdhZGY1LCAweDIxZWFhOWQ3LCAweDNmZDY4MzBlLAotCTB4MWNmZWU3NjQsIDB4MDBkZmY3M2IsIDB4MmUzYzgxNDUsIDB4ZDAyZTUxMjUsIDB4MDRiYWE3ZWIsIDB4ODk0YTI3ZDQsCi0JMHg2OTcwZjkwOSwgMHg3NmRmOTMwOSwgMHg1NDM3ZDMwYiwgMHhmZWQ0M2YzOSwgMHg4MjE2ZjViOCwgMHgyOTc0YTlmYywKLQkweGQ4YzllN2UxLCAweDMwZTkyMmJhLCAweDgyM2Q3NDkxLCAweGQ5NDk5ZTc2LCAweDM5ZjYwMGI2LCAweGZmNGEyNWU4LAotCTB4Y2MyZDRiZmMsIDB4YTljNTdiY2YsIDB4ZjFhZWY1Y2EsIDB4Y2FmYmQ3MjAsIDB4ZDc3YWU0MDMsIDB4ZjMzN2UwNzgsCi0JMHhhM2ZjNmQ0NCwgMHgyZmYzMGFmNCwgMHg3YzEwYWZkYSwgMHgxOTNlYmE5NiwgMHg1ZWRkNzIwZiwgMHhmODFlMzVkMiwKLQkweGVlYjFhZGQ2LCAweDFmOWYwMTJmLCAweDM2MWY5OGViLCAweDI0ZmE4ZTEyLCAweGJjNWZlYTlkLCAweGRjOGNmYTI2LAotCTB4ZTk1YzZhM2YsIDB4OTRkNzhiNGQsIDB4MWZkZmJlMzQsIDB4MmNlODQxNzEsIDB4MzhhZTQ2ODIsIDB4Y2RlZmY3OTksCi0JMHhmNGE2M2EwNCwgMHhmMjg5NzI4OCwgMHhjMTU3YWJjNywgMHg4MzdmODM5OCwgMHg1MzJjNzIxYywgMHgwOTJkOWJmOSwKLQkweDJlMDhkYmY4LCAweDhmOGMzZGM3LCAweGRiNzU4YjljLCAweDBkMWM1ODkzLCAweDg3MTBmMmUxLCAweDU3MmU3NGNiLAotCTB4ZDExMGVlMmYsIDB4OWRjZDNmOWYsIDB4ZGNiODM0ZmIsIDB4MjRmNWM3N2QsIDB4OGRkN2ZiODAsIDB4NWYwOTcxNzIsCi0JMHhhNTNhNDVkNywgMHhkMTdmYjQyMCwgMHhlMmM2N2E4YSwgMHgxZTMxY2JiNywgMHg4ZWFiNjIzMSwgMHg3MjcyNjEyOCwKLQkweDczNGEyMDY0LCAweGJkZThjNDdmLCAweDRjNzk0ZDc2LCAweGZkYTZiMjZiLCAweDlhNTk2ZDBkLCAweDI4ZTBmY2ZhLAotCTB4ZTNiOGZkNGQsIDB4ZjhmMjlhMDUsIDB4ZWQzNTFiY2UsIDB4YWM1MDdjMjcsIDB4YmFlYTRmMjksIDB4YTZmZWQzNWQsCi0JMHhjYTZiNjc0ZiwgMHhhYzEyMzAxNCwgMHgwMjgzYjlmYiwgMHg3ZGQ3NGVkOSwgMHhjZDNlZTg3MywgMHg3ZGJkZmZmNywKLQkweDBiODg3MWM2LCAweDMzZjZlMjllLCAweDczM2JiYmYxLCAweGE4MTYxYzI5LCAweDRjYTU3Yzc0LCAweDA4NTA1ZmRiLAotCTB4MDdjMDQ1MGEsIDB4NDY4MmRmZDgsIDB4ODUzY2Q3OTYsIDB4ZGZiYzJlNDIsIDB4N2Q1YTRkODUsIDB4NmQ1NmYxNjIsCi0JMHhmMzdkYTJiOSwgMHgwMzk1ZTA1YSwgMHg4YTZhMjFmMywgMHg2NDZjODhlMSwgMHg3OTM0YzQzZSwgMHg3NWU4MGViZSwKLQkweDJmZDUxMjc2LCAweDkxYzYzMDQwLCAweDFhYzdjODM4LCAweDFiN2ZkZjZhLCAweGIwYzg3M2ZlLCAweDZiM2ZjMzZmLAotCTB4N2E4MGQ1YmYsIDB4N2ZiN2UyZmQsIDB4YWZhNDE0NTUsIDB4ZmUyZDRlOGMsIDB4ZmYxNjhhY2QsIDB4ZmM1YWI5ZDEsCi0JMHhmYzVhNWQ1YiwgMHhlMmQ0NGVjNywgMHhlMmQ2ZTZkZiwgMHg4YjQ0YWUzZiwgMHgxNjhmNzhmZiwgMHhiNTczODlmZiwKLQkweDZhZjI0ZmY4LCAweGExNTI5ZmYxLCAweDhkNWE3ZmM1LCAweDJiMTlkZjE2LCAweGY0Y2NmOGI0LCAweGZmYmRhODNmLAotCTB4MmFmZjAyMjQsIDB4N2JhZWNjZmYsIDB4MTQ5ZWUyMjgsIDB4ZDE4NWQxMWQsIDB4MGI0NzRhODEsIDB4ZTc5ODE1M2MsCi0JMHhjN2U5YmMzMiwgMHhlOTIyNzE5YSwgMHgzYThkZGE4MSwgMHhkYThiODdiYywgMHg2Yjg1ZGI3MSwgMHhiZGNhMGZhNywKLQkweDQ5MWE1ZmQwLCAweGYxMjQ0ZjFmLCAweGIxM2IxODNjLCAweGVlZjk0NTVmLCAweDQwZjgxMjdlLCAweGYyYTE1ZWE0LAotCTB4MWUzOTcwYWQsIDB4YzUwZWZmNmUsIDB4MjdjODA2Y2YsIDB4MjkwZjBmNmUsIDB4MzYxZWMwOWYsIDB4NDNjM2RiZjcsCi0JMHg5MDg3ZTlkMSwgMHg1M2ZhODM4ZCwgMHhlZThiZmEyMywgMHgyZTNjZDk5NSwgMHhlMDQ5YWJjMSwgMHhmMjI1ZmQ1ZiwKLQkweDA0ZTkwZmJiLCAweDdlZjlkMjI3LCAweGUzYTFlYjA4LCAweDFhMzUxODdmLCAweDIwM2YxOGZkLCAweDdmY2ZkNDQxLAotCTB4NzQ4NzE5MDgsIDB4NzEyMDA3YjAsIDB4MTNlNzNlOTksIDB4NWNlNTlmMDUsIDB4N2VlNDJmNWUsIDB4ZGJkOWE3MGUsCi0JMHgxNmE5NzAwNiwgMHgzMDA5MTliZCwgMHg5ZTI3NmE2ZSwgMHhlMjI3MjIxZiwgMHg4NTVlZTlhZSwgMHg5NzZmZTA5MywKLQkweDdmMDZlOTA4LCAweDk4ZjY3ZDNiLCAweDUxOWM3ZDE5LCAweDI4OWI4N2Y5LCAweDk2NzgzMDhlLCAweDUxNzIxNTRkLAotCTB4MzBhMzE1N2YsIDB4ZmJlY2E4MGYsIDB4YjJhNWNhMDIsIDB4Y2VjZjYxZmYsIDB4NDcwN2E2MjQsIDB4NTBhY2Q3M2UsCi0JMHhmNWM0ZDllMSwgMHhmYzBmYTYwMCwgMHhlM2MyOTI3NywgMHg0MTZiYzQzMywgMHhlMDY0YjliOCwgMHhlNjNmYjRmYiwKLQkweGYzMTlmZWZmLCAweDQ5MjVkMTkzLCAweGVjNzhlYzU3LCAweGY4MGNmMTBhLCAweGEyNDFmMzg2LCAweDhjNzNjZDg5LAotCTB4ZTg1NzRjNDQsIDB4OGJjNGQxZmIsIDB4NDljN2RmZmEsIDB4N2FlZTM4NTksIDB4ZDYzMmIyODksIDB4YjdlODI4ZWYsCi0JMHhlZmEzYzYwYiwgMHgwNDVjNWJhNywgMHhkM2EyYmRmYywgMHhhYmZmZDA0NSwgMHhjMzJiMDk5NiwgMHhmNTViYWMxZiwKLQkweDdhNzJhNWViLCAweGNjMjU2M2Q4LCAweGU3ZTExNTdmLCAweDI3MjkxMTRiLCAweDNkMTU3Yzg1LCAweDk0ZWQwZjNiLAotCTB4ZjBiYjMyYjYsIDB4MThjZWFiOTgsIDB4NzkyYTJlYjYsIDB4ZWQ3ZTcwNmQsIDB4YzgxY2Y0ZGIsIDB4OTYxMzNkMmYsCi0JMHg1ZWUxNGUwZiwgMHgzZjFjOTgzMywgMHhhOGUyY2M5ZSwgMHg2ZTlhNTY2YiwgMHgwZjQ5Nzg4NiwgMHhiZTNkMDc4ZiwKLQkweGY4MGNkYzkyLCAweGU2MTcyNTE0LCAweDQxN2RjMTgxLCAweDBkZWZiMGI2LCAweGI2MWY1YTBlLCAweDQ5OGIyNGRmLAotCTB4M2M1YmQ2NTMsIDB4ZGFjNjU5NzgsIDB4MTc0ODM1OTUsIDB4ZDFhZjdlN2EsIDB4NjQ4N2Q0YmEsIDB4MjE3Zjk4NmYsCi0JMHg0YzRmOGY5YSwgMHgxMDI3MjI3ZSwgMHhiZmQyZjJhZSwgMHg1ODEyYTc0ZiwgMHg2NzRiMjhhZiwgMHg5ZmVhZjYzNCwKLQkweGRjMDE0NmFlLCAweGE5M2QzOGFhLCAweGU5M2EzNWYzLCAweGRlZWQ2MTM4LCAweDI1NTdmNGUxLCAweGZlNjAxYTc3LAotCTB4NzQxYzUwZWYsIDB4ZWE0MTNjNDIsIDB4NTZiZGUwNzQsIDB4ZmZiOGU5NzUsIDB4MzdmMGU0ZWYsIDB4OTA4MjE3ZWUsCi0JMHhlMDk0NmZmNywgMHhkMmY0MjY4YywgMHhkMjhlM2NkOSwgMHhmNDc3ZGFlOSwgMHg2YjI1ZTIwNCwgMHg3ZTQ0Y2ZjNywKLQkweGI4ZDdiMDY2LCAweDFlNGYwNWE4LCAweGVjYTE2NzdlLCAweGVhOWUwNDFkLCAweDJlOTRlOGQzLCAweDYxYTNmMzg3LAotCTB4OWUwZWRjYzksIDB4M2UwMDI2NDAsIDB4Y2EwZjk5MDYsIDB4ZjY2NTg3YTcsIDB4NTllM2MzY2QsIDB4M2ZjM2MxYmUsCi0JMHg0YzdmOTgyNCwgMHhhMmJmZDA1NiwgMHgxM2M0Zjg3ZSwgMHgxYjFiZjIxNywgMHhjNmNiZTEwOSwgMHg1MDAzNzQ5NSwKLQkweGE1NjFiNzFiLCAweGE4NzM3ODg5LCAweGE4MzUyMjFjLCAweDM3MTAyNTFmLCAweGZlNjM1MWQyLCAweGZkMzk1NzA5LAotCTB4ZWJmMDUyY2UsIDB4Mzc4N2IwNWMsIDB4MGQ1M2ZmOGMsIDB4MWY0NWFkOTQsIDB4NjFiOTQwNTUsIDB4OTBhZDhiZTQsCi0JMHhiOTgxNjQyYiwgMHgyM2JmMzAzOCwgMHhhMmI2NjcwMCwgMHhlZjdjZmQ0NiwgMHhlZjA3Njg2YSwgMHg0MjVmM2UyMSwKLQkweGFjZjlkM2RmLCAweDgyMWVkMzFmLCAweDBmNjNkMWY2LCAweDUxZjUwYTdkLCAweDliMjlhMDk2LCAweDNmNzUxNzdlLAotCTB4NDViMDQ5NzEsIDB4YjI1Mzg1NWMsIDB4NDg1NmQzZTksIDB4OGUyOGExN2IsIDB4NGY0N2RmZTYsIDB4YzY0NmZkNjQsCi0JMHhiYjJkMTIwMywgMHg5MzIxN2RkOSwgMHhiMTY3OGYwOSwgMHgxZmFhZWM3MywgMHhiYmIyZGUzZSwgMHhjNmY4MThhOSwKLQkweDUzZmQ2ZDMwLCAweDk2NzExZTFjLCAweDQxNjc4ZTk3LCAweGU3NjEyYTdkLCAweDkzZmQ3OTU3LCAweDc5NjZkZWJjLAotCTB4ZTU5OGIzYTksIDB4ZGZiZTY4MWMsIDB4YjU4ZmZiY2MsIDB4NTBiZjE4ZTgsIDB4YjFiNzhmMDgsIDB4ZGViYzRkZmEsCi0JMHgwOTNiZDZhYywgMHhmYWIxYTc4ZiwgMHhiNDZmNWU3YSwgMHhiYTEyZmNiMCwgMHhhZmRmMzVhZCwgMHhkYzI3ZTNlMywKLQkweDMwZGUyM2FmLCAweDg5Y2M3NGZhLCAweGZhMzBkZTIyLCAweDM1ZGE5N2IwLCAweDlkODViZDY1LCAweDI1YTc5NTIzLAotCTB4ZmI1M2JlNmIsIDB4MWI4ZjljN2QsIDB4ZjM0YjM5MzMsIDB4MjhkODY5OWQsIDB4MzRjZWZiNmQsIDB4NzEwZjIzOTQsCi0JMHgwYjUyMWIzOCwgMHhmOWVhZjUzNCwgMHhiM2E3MjI2YywgMHgyNzZiMzI3NiwgMHhmNGQ0NmUzOSwgMHg2MjUxNTE3YiwKLQkweDk5OWZmZjYxLCAweGNiYWRkMmE0LCAweDkwZmI3NDA0LCAweGUyMTEyYjM1LCAweGI5OTU4MWI0LCAweDFmMDE0NGEwLAotCTB4M2Y5OTRmZTEsIDB4NjY3NDc4OWQsIDB4Y2IwNTRhY2QsIDB4YjhiZmRjOTksIDB4MmM0NGU1NjYsIDB4MGI3NGE2ZWYsCi0JMHg3NGFjY2ZmNSwgMHgyZDI3Nzk2MSwgMHg1M2Y5ZjQyYiwgMHg1ODk1MGZkYSwgMHgwN2VkMWI2NCwgMHg3ZWQzNGZjYSwKLQkweGVkMTRmOWUwLCAweGQyNGY5ZTA3LCAweDMzN2VhMGYxLCAweDliY2EwZWZkLCAweGRlNTA3ZjY4LCAweGU1OGRkMmIwLAotCTB4YjA0YjJiZjUsIDB4ODNkMmJmNWMsIDB4ZTcyYjc1ZTUsIDB4OTVmMWYzZTIsIDB4NTlhZTdjNWUsIDB4YmJmNTgxNTksCi0JMHgzYmViODU5MywgMHgyMjQ4NWY3ZiwgMHg5M2JiYjllMywgMHhkZGU3ZjdjNywgMHgxNmRjZjFhYiwgMHhkNDc2ZTBjMywKLQkweDMyZmZjZTAxLCAweDg5ODhlNzg4LCAweGE1YzYzZmQxLCAweDhmNWIxYWQyLCAweGU3MTliZDgwLCAweDZhNDhmODYxLAotCTB4NWI3YWMxYWMsIDB4ZmQ0NzFiMDksIDB4MjRmYzM4OGUsIDB4MzMxZDg4YjUsIDB4NTk1MGZjNjQsIDB4MjMwZGY5OGQsCi0JMHg3MzE3Y2IwOSwgMHhjNDUyODlmYSwgMHg5ZmMyNWZjZiwgMHhiY2ZmNDIxNCwgMHhhYmU1YWI5NCwgMHg3MWY5MTE5OSwKLQkweDk5MjNiM2VhLCAweGIwZTI3OWQ5LCAweGM3MmMzNzFhLCAweDg0MTNkMTM0LCAweGNiOGI1ZTdjLCAweDMzYjFlNzhiLAotCTB4YTljZWQwYWUsIDB4ZTU3YjFjYmQsIDB4NWY4MGEyMTYsIDB4YmZhYjU0YmYsIDB4NjgxNWE3ZGEsIDB4NGFmMTQ0ZjQsCi0JMHhhNTMzYjYzNSwgMHg2NzY5YTdkZSwgMHhkYTY5OTQ3MCwgMHg1Y2M5MmQ5NSwgMHhhNDc4MDRlYiwgMHgxYjE4NzViMCwKLQkweGJkMTAxMTU3LCAweGUzMzc5YjBiLCAweDk5OTM2N2I4LCAweGViZDc0YmJkLCAweDNlZmJmZjQ3LCAweGViOTdhZDgxLAotCTB4N2NjYmNmNGQsIDB4ZTQ0NmE2YmQsIDB4YWM2YzIzYWIsIDB4ZDdlYjEzOTgsIDB4ZmYzYzNmMDEsIDB4YWZkYzU4YWIsCi0JMHg0M2EzM2RjZiwgMHgxMjQ4ZGZmZiwgMHg0NmJlMDFkMCwgMHhmNTBjZjE1MywgMHg5NjE3NDg2MywgMHg0YWVlMDA2ZiwKLQkweDExNDRmOWNiLCAweDg0OGUzY2ExLCAweDdhYTRiZWQwLCAweGIzMjU3ZmQzLCAweDY2MzNkMGI4LCAweDc5YTUwYjg4LAotCTB4MjNmOTY3OWYsIDB4MzkyYjk0NDEsIDB4YWEzOTFmMWMsIDB4OGE1NWI4ZmUsIDB4NGU5ZGE3ZjQsIDB4N2I1NmZiNDYsCi0JMHg1YjhkNDQ5ZSwgMHgyNTE2YjJhZSwgMHgzM2QxM2U4MiwgMHhiNDRmN2U0NCwgMHgxNjliYmVmMywgMHgyNzQ2Mzg1MCwKLQkweGZhYTdjNWNkLCAweDFiYTJiZDdlLCAweDU1ZTU3Y2Y0LCAweDRjZWZhZjBlLCAweDc3YzYwMWU3LCAweDZhZmNlOGMyLAotCTB4MGJiZmE1MzIsIDB4MGM4M2JmNzksIDB4MmMzZDUyMTksIDB4MWFmMGY2ODQsIDB4OTQxZmNhYmQsIDB4ZmQwZmUwNTgsCi0JMHhlNjJjNTc2NSwgMHgyMTI3YjQ3MywgMHhjMTk5NDQ3YywgMHhkZTk1YjllNywgMHg3ZmE5MjQ5YiwgMHhmOTk3ZTI5ZCwKLQkweGU0OWJlNDMyLCAweGJkYjY3Y2YwLCAweDM0ZGQ5NzJiLCAweGM3NWZlYTRkLCAweDVmYjYxNGU4LCAweGYyMmI0OTczLAotCTB4Y2U4NzVjZmIsIDB4YTczNWVjYzUsIDB4MGYzM2JlYzYsIDB4NzljMzcyNmIsIDB4NzExNDcxNWYsIDB4NDhjNDJlNDEsCi0JMHg1ZWU3ODRkMiwgMHhjODg5YmZjNSwgMHhiN2EzYzQ3ZiwgMHgxN2VhODUxMSwgMHg0MDgwNzI1MSwgMHgyZmRhODczZSwKLQkweDhmZTI3NmUxLCAweGMyZmNiZjM4LCAweDJkZTcwZDMyLCAweDk0ZjdhYmE2LCAweGY5YWY1MWI5LCAweDkwYzk3NjQyLAotCTB4YjM0NWYyY2YsIDB4NGYxMjNmMWUsIDB4NjU3M2ViNmEsIDB4NGE1ZTA3ZDcsIDB4NDdmNjhiOTcsIDB4NTE3YTYwYmIsCi0JMHg1Zjc4NGRiOSwgMHgyMDRiYjg5YiwgMHg4M2NlMDJhOSwgMHg5OWQ5YTdlNSwgMHg1YWRmYWE3ZSwgMHhlMGUzZmM0NCwKLQkweDJlMzdhZWQwLCAweGE1ZGFlMDA1LCAweGMyYTlkMDFjLCAweDhhYWJiNjllLCAweDNmMDZlYzMzLCAweDBiODAwOGQ0LAotCTB4MmU1ODczYzAsIDB4NWYyMTcxYzIsIDB4YWI5NWRlZWYsIDB4MTRlZTRlMTAsIDB4NjkzNWU3ODYsIDB4N2NmOWRjMmEsCi0JMHhmNzBkZGI4OCwgMHg1NjZhMmRiYiwgMHgzYWVkNWJlZCwgMHg3ZjE1ZTdkNywgMHgzYjZiZWEwZiwgMHg4YmQzY2M0NSwKLQkweDk4ODVlNzg0LCAweDI4NjI2M2Y3LCAweDMzNDZjYmEyLCAweGE3OWQwY2ZmLCAweGMxMjllNjFiLCAweGJlMDBlM2JjLAotCTB4NThiM2Q3MDQsIDB4NWNlMDA0MzYsIDB4NWFkMDhmNjYsIDB4MzFhOTcxODIsIDB4OTcxZTEyM2EsIDB4NTMzMzlmNTIsCi0JMHgyNzdhZmYxOCwgMHhiNDY3YzY1OSwgMHgwYjRkZGU3MywgMHhlZjk3ODVjNiwgMHhjMzFlYmE0NywgMHgxMjJjNGZkNywKLQkweGJiNzA5M2NiLCAweDVhYmY3MDk1LCAweGYwNjc2YTgzLCAweDNlMjhlYTNjLCAweGEwZmJiZWRmLCAweDJmM2NiMTQ2LAotCTB4MGFkY2U5MGIsIDB4ZDk0MzE3NzksIDB4NjE0YzNmMTEsIDB4M2I3ZWYyZjEsIDB4ZTgwNmEyODIsIDB4ZjMwOWJjNjcsCi0JMHg3Y2Q0MWExYiwgMHgwNTVkZTUxNCwgMHgxM2U5NmJmMywgMHg5YzRjNTFmMiwgMHhkOTU5ZDc0ZSwgMHhmYWVhMDQzZCwKLQkweGJlMzBhNjU2LCAweGEzZTM5MmI5LCAweDIyZWNjNGQ3LCAweDI3ZTRkYjg4LCAweDZmOWY5ZDg0LCAweDU4ZmI0NzJmLAotCTB4YjZmNGYzOGQsIDB4ZDU1MmZjYjMsIDB4NDljOTUwZmYsIDB4MDYwZGY3YTAsIDB4MjIxZGRlODcsIDB4ZGIyYTc3YzYsCi0JMHgwZWY3NjBlZiwgMHhmNzg5M2M3NiwgMHgxNGJlZDIzNSwgMHhkZTcyODdhMCwgMHg2YjRlYmNiZSwgMHhlM2Q4MmYwZiwKLQkweDBjYTUxYjU5LCAweGMxMTdiYmI0LCAweDAzZDlhYjdkLCAweDNiNDhlZGVkLCAweGFlMTRiMWZiLCAweDNlNDhiYWJmLAotCTB4MzU0ZTcxYzQsIDB4YTI4YjFmNjYsIDB4MTI2NDM1ZjMsIDB4MjI5N2JmM2MsIDB4NmVmNzg0YmUsIDB4MDliM2VkNTMsCi0JMHg3OTI0M2JlZSwgMHg0ODhmYmVlYywgMHg2YTkyYmZiYywgMHgxNWVmMzg0MCwgMHg1YTViOGYwOCwgMHg4ZWY3ZmU5MCwKLQkweGVmN2ZmYjY3LCAweDBlNzc4YjkxLCAweDkzZGNmZGE3LCAweDdlYTZlMGMxLCAweGNiMDY0Zjc3LCAweDA2MDdkZDMzLAotCTB4NGFkZjdkMTUsIDB4Zjk2MGM5NDgsIDB4ZGMzOGJiM2MsIDB4OWI5ZjMzYmYsIDB4NTU3M2U1YWMsIDB4YTJjNzVkNmQsCi0JMHgzYjc3ZTQxNSwgMHg4ZjdiZGU4MSwgMHgwZjI2MjVmZCwgMHhlZjA4NDdmNywgMHg4MzNmN2YyZCwgMHgwZGU2MDdjZCwKLQkweDc0ZmJmNDc5LCAweGE3MGJjZjlmLCAweDEyMjk3ZDgzLCAweGZhZWViNzlmLCAweGRhNjk4Y2Y0LCAweDdiYzg1ZDc5LAotCTB4MzY3NmUxMmYsIDB4NTc5ODU2YWYsIDB4NDI2NGYwNGYsIDB4M2FiNDdlNzgsIDB4ODNjNTdkYWYsIDB4ZmQ3Y2VmOWYsCi0JMHg5MTMzZTc3YSwgMHg1MDY4YTdjZSwgMHgyNmZkMWQzOCwgMHgwYzMzZWQzOCwgMHhmODBmOWYzZSwgMHgwZGUzZmU3YywKLQkweGMwYzBlZjc2LCAweGQzZDRlYmZhLCAweGVmYzA0NDc2LCAweDgwN2JjZWM1LCAweDdlZjlkMzVkLCAweDg0N2EwMjkwLAotCTB4NjMwMTNiYjMsIDB4YWQ3ZTFjNGMsIDB4MGIzZTljODUsIDB4YTE3MWRmMzksIDB4MWY3YzQ0NGQsIDB4YTRiY2MwNGQsCi0JMHhmYmQ1ODk1NiwgMHhhYjAyOGJlYywgMHg4ZWJhZmQyOCwgMHg3OTAwYzgyYywgMHg4OGQwZmQ2MCwgMHg4NmY4YzVmNywKLQkweDRiOGIzN2M4LCAweDk3ZDhlYjY1LCAweDg3MGEwYzJjLCAweGU0N2Y1ZTE4LCAweGI3ZjYxOTQ0LCAweDAxMjMwM2ZlLAotCTB4ZjVjYjUwN2UsIDB4YWI3MmY1ZjQsIDB4NTUwMWVlMDksIDB4MDJlNTA4ZTEsIDB4NDIxOWY0ZmEsIDB4MmU1MDVjOGIsCi0JMHg1OGE0YzJmYywgMHhjNzRmMTkwNiwgMHhiMTE0ZGJjNiwgMHhkNGYxZDQ2ZiwgMHg5NzM1MjlhNywgMHgzNzg1ZGRmOSwKLQkweGRlYTNjODQ0LCAweGJjM2RmOTM0LCAweGExNTM2N2FmLCAweDNiZjczYzg0LCAweDRiNTliZmMzLCAweGVmODIxNzJmLAotCTB4ZThjOWRjMjUsIDB4N2EwYTk0YzUsIDB4ZTYzYTcwOTQsIDB4MTNlY2I0N2IsIDB4MDNjZGJmNDIsIDB4YjhiYzE5ZjgsCi0JMHg0NjQ3ZGY3ZSwgMHg4NDBjMjJkMiwgMHgyZjRlMjVkMywgMHhmNWQ0ZmFlYSwgMHhkZWI2ZjNhYiwgMHhkNmYzMDBiYywKLQkweGYxMzAxZjAxLCAweDdhOWQ1NDk4LCAweGQ1ZjIxZTJmLCAweDYwZjcyZTU4LCAweDI2MjcyODVkLCAweDdkMGYyYzRiLAotCTB4ZGQ3ODg0YmMsIDB4M2M0NmYxMzQsIDB4Yzc4ZmIwMjcsIDB4MGM5MzQzOWIsIDB4N2U0M2RlODMsIDB4ZmQ3ZjFmMGIsCi0JMHgwNGVjZmY5NSwgMHhhZWRmZDVmYiwgMHg0NGQ5ZjNjNywgMHg0NWRlNzJlYSwgMHg4ZWY3YzhlOSwgMHg1MmJkZjc4NCwKLQkweGZiODEyYTdhLCAweGI4OWM4ZTY3LCAweGRkN2EwMzE4LCAweDg0N2FhOTRkLCAweDBmYzA0ZGYzLCAweDExNWMzZTQxLAotCTB4ZmY3ZjMwNGIsIDB4MThiMjE3YzQsIDB4NTM5M2ZmNDYsIDB4NzQ5N2FlNDUsIDB4ZmU1ZTQyNzYsIDB4OTc5NjAyYzYsCi0JMHg4MDdhZTE2YywgMHgwNTc3NDRlNSwgMHhmMTMyZGZjYywgMHg0YzIxNDZjNywgMHgxYWE1ZTZjZSwgMHg4NjhkYmJmMSwKLQkweGY2OGI4MjUwLCAweDQ5MTBlYmU3LCAweDJlODFmNTEwLCAweGVmYWI0N2JjLCAweGUwY2M5MWRjLCAweDA1NDg1ZDUwLAotCTB4NDdkYzFlNGMsIDB4OWFkN2VlY2EsIDB4M2UzMGFhOWMsIDB4ODA3ZGU3NGIsIDB4ZjkxYThmYmUsIDB4ZjUwZTVjODUsCi0JMHhhY2JjNzQ4NSwgMHgzMmFkZWZmZSwgMHg3OGQ0NjdjMywgMHhhNmM1OWY3NiwgMHhlMTkzYmZjOSwgMHg4MTU4YWVmZSwKLQkweGFmYjQzZGUwLCAweDc5MzVlYWE0LCAweGU4NjQ5ZmZhLCAweDlkOWRiZjc4LCAweDY1ZjliZmEwLCAweDViMDlmMzA5LAotCTB4NDA5OTBmODMsIDB4YzVmNzU3YWYsIDB4ODZkZDU0ZDMsIDB4ZmRmOGViNzYsIDB4ZTYyNmViYWEsIDB4ODA1Y2UwMDYsCi0JMHg0YTdmYzc0YSwgMHg2MTUyN2FmNSwgMHhiYzVmNzQ3ZCwgMHhhNzU3N2E4NCwgMHg0N2MyMmE2NywgMHhjOTdjODdjZSwKLQkweGVmMTNhNDMxLCAweDA2ODUyMTBkLCAweGFlNGJlNDE5LCAweDZmZDlhNzRlLCAweGVhNmYxYzJkLCAweGE4YTVlYTkzLAotCTB4NjljMjNjZWYsIDB4NjJmNzk1NTksIDB4MzllMDg5OGIsIDB4NjJiMzJiYTMsIDB4ZDMxNTJmNDEsIDB4MjVjZjNkNTQsCi0JMHg2Y2ZmMWMwMywgMHhlMWZhODM5OSwgMHg4ZDJkMzdkOSwgMHhmNTdjZjFlMSwgMHhiM2RhOWE3OSwgMHg3OTdmNDM0MSwKLQkweDAzMzNjYmExLCAweGRlMjIyZmRhLCAweDJlOGZhMGI1LCAweGU3MzUxNjZhLCAweDdkZjJjZmFlLCAweDE0NGFmMGJlLAotCTB4ZjVlOTg2MDksIDB4ODdkZTI3MGIsIDB4NWUxNjQ3ZTcsIDB4YWE0MTIxODksIDB4ZTdlNTlkMjcsIDB4M2NmMmNlN2QsCi0JMHg2NTRmN2Y5ZiwgMHhhZjgxYjJmMiwgMHg3NWVhNGI2NywgMHgwOGFlZmJlYSwgMHgwZmYzYjk3ZSwgMHg3ZTMxOTVjZiwKLQkweGY3MDBlZmY5LCAweDAwY2JhMTJhLCAweDhkZTM2ZTdjLCAweGZlM2NjMTdmLCAweDBmNGVkNGQzLCAweDNhZDM3Y2U2LAotCTB4NmMzMDQ4ZTMsIDB4NTc3NmJlOWMsIDB4N2U5ZWI4NGMsIDB4ZmYzODI4YmMsIDB4MTA1YWY1ZmUsIDB4ZmRhOWE3MGUsCi0JMHg0YzcwY2RmZiwgMHhiZmIxYzBkMSwgMHgxYzBkMmNmZiwgMHg4MzlmZjYwNywgMHg5OTVlOWZlMywgMHg4ZmZkMmRmYiwKLQkweDQ1N2ZhMjFlLCAweDdlZmVmZjMzLCAweDNkYjhlMTg3LCAweDhmOWVjYjQ3LCAweDY4ZTVmYmE2LCAweDU3ZjZmNTcwLAotCTB4YjBlZDVmMjEsIDB4MjcyZmVmMTEsIDB4NzhjNWFkNmQsIDB4MDQxN2U4OWUsIDB4M2YyZDk5Y2YsIDB4OTBjN2U1ZmMsCi0JMHhiNzdjYjY4NywgMHhmNDYzMDVjMSwgMHg1Y2YzNDNlYSwgMHg2MTg3Yzg4MywgMHg3ZGMzZjY0NCwgMHg2ZjczZWEzZSwKLQkweDI3YWUzNjZhLCAweDBhNDliZGYyLCAweDY2NmY5MGM4LCAweDU1ZTQ5NWNhLCAweDlkNjVlODBhLCAweDFmYjhkNTgxLAotCTB4NTQ5ZmM4NGMsIDB4NmZkYWI4M2YsIDB4OWVhODhhNmQsIDB4YWQ3ZGM1NjcsIDB4MTBkMGRiZGUsIDB4N2MwMGVkZWQsCi0JMHhlNmE1MTY3ZiwgMHg4MjM3ZjkxZCwgMHg2N2YyYWQxZiwgMHg4NWVlY2NhMiwgMHhhMjFkYTFiMywgMHhlMjI1YjFmYSwKLQkweDkxYTNiZjQ1LCAweGU1ZTQwODc4LCAweGRmNzg2NWU3LCAweDUzZmVmZTAwLCAweGFmYzAwNmNhLCAweGUzZDk4ZTJkLAotCTB4YjcyM2ZmNDUsIDB4M2I5ODM2ZjcsIDB4N2UzMGFlOWQsIDB4ZTk1NGZiZjcsIDB4ZDZmY2U0ZmEsIDB4ZmUzMzM5MDgsCi0JMHg0YzgyZTdmZCwgMHhlNjFlZmNjZSwgMHhmZTc2MjU1MSwgMHhmMjEzMmNiMiwgMHhiZGY4YmIwOCwgMHhlMzAxOGEzZCwKLQkweGYwYzc4NTA1LCAweGQ1MzJhZmJlLCAweDhjOGJhZjVlLCAweDQwZDlhNzVmLCAweGVlZmQ1NWZmLCAweDA0NGY5MDMxLAotCTB4OTY0NmMyM2EsIDB4Y2QxZTVkYmYsIDB4ODliZmU1Y2EsIDB4OTA3NTczYzMsIDB4ZjAwNzlmYzIsIDB4ZWM1ZDE1NmUsCi0JMHhlMTE5Mzc5ZSwgMHhhMWFmOTE3YSwgMHgxZDMxYjRkNywgMHhlMWNiZDllMCwgMHg3NWZkYjE3YSwgMHg2MmVlNTdiYywKLQkweDdmYzQ3MGRkLCAweGMxM2Y2YmY5LCAweDI1ZjZhMTdiLCAweDBlYTc3Y2YzLCAweDcyOWZjYTJiLCAweGVlMDhhYmEzLAotCTB4Y2M5N2RiMmQsIDB4Mjk1NmNjZjQsIDB4YTYxMDUzMTgsIDB4MmQ0YmFlNzcsIDB4YmU3YWJlNDYsIDB4ZjQwZWI4NmUsCi0JMHg3ZmFlMTU3MiwgMHhhMzYwZmNlNiwgMHg0MjkzZWZlYSwgMHgyZWJiZjA0NSwgMHhiZjgzMGJlNywgMHhkZmI3Zjk0NSwKLQkweGEyNjdiZjhjLCAweDExNjVmMDNiLCAweGQxYjc2ZmRlLCAweDE3ODJmNzg4LCAweDY1YjkxODFmLCAweGNhYWZhZDJlLAotCTB4YTU5ZTYxZDEsIDB4ZTcxOTgwZWUsIDB4ZGQ4MWExNzMsIDB4ODJkZjAzYWYsIDB4OTAzYWFlOWMsIDB4NTJjM2JmODIsCi0JMHgzY2MyMWQxZSwgMHg1NzI4YWFhOSwgMHhjYTQxYzQwZSwgMHhmNzg0ZGMwZiwgMHgzMGRhOWY3YSwgMHhlNWY4MWQzMiwKLQkweDFkMjU3OGM5LCAweDQwZGQzNWVmLCAweDdkZDc0ZTgxLCAweDdiMDQ2M2IyLCAweGNmMDEzZjVmLCAweDQ2Mzc1OWFkLAotCTB4NWZmMzA3N2IsIDB4ZjIyNDcyYTgsIDB4Yzk3ZDllZmUsIDB4MDA2ZDNkZjksIDB4ZDcyNjkxOWYsIDB4MmQzZTVhNmUsCi0JMHhlYjljNThiOCwgMHg4MmI2Njg3OCwgMHg5ZTE3MTY3MSwgMHg5Y2I3MmJkZiwgMHhkYmVmMWFmYiwgMHg3ZWU0ZmU2YSwKLQkweDQ4MWRlZjgyLCAweDE2MWRhYWI3LCAweDk3Mzk1ZTM5LCAweGExMGNmYjMzLCAweDM4N2JmMDc5LCAweGRjMzg2YmU1LAotCTB4YWI5ZjJjMGQsIDB4ODM5Zjk3NWMsIDB4OGRmNzBlNjUsIDB4ZTY1Y2Y3MTEsIDB4YWI3ODMxYTUsIDB4MjQyNzUzY2YsCi0JMHhjYThjMmZiYywgMHg2N2M4NzRmZiwgMHg4OGQ4NzUzZSwgMHhlMzZhNzY3NCwgMHhhYWFmM2M2OCwgMHg2MTRlNTc4ZSwKLQkweDc5N2RkMzIyLCAweDA1OGNhZWQyLCAweDYzNGI4ZWJjLCAweDBkN2NhYWZjLCAweGY3ZDUyZmIzLCAweDI1Y2RiYWU1LAotCTB4ODc1MGU3ODAsIDB4YmQyYmY5ODgsIDB4ZTIwNjI4NzIsIDB4YjUzYjZhMWMsIDB4NzY5ZWI3ZGMsIDB4NjVkNzdmMTEsCi0JMHhjNDExZjI1ZiwgMHgwMjI3YTUzNywgMHhjZDdiYTRmNCwgMHhmN2Q1ZjI4YSwgMHhlMDM3NzE5YSwgMHhmMTIxN2NmMywKLQkweGZlNWM4MzQ3LCAweGNlNGVmZDgwLCAweGVhMjMwZWQxLCAweDMyMWZiZGJkLCAweGZkYzA3NGJiLCAweDNhNTA5NjQ5LAotCTB4N2JlODFmZGMsIDB4NThmOTA1MmQsIDB4MTc2ODVhNmYsIDB4ZWNjZDkzZDMsIDB4YmQ3N2I1NWUsIDB4MmMzYzc4MTMsCi0JMHg5NjQ3ZGY4OSwgMHhlNWQ5ZmEwNCwgMHhmNDEwNzMwZSwgMHhmOGM0ZmEzMywgMHg3MWVjOWY4NiwgMHhkMWMzZmJlMiwKLQkweGY0MzZmYzA0LCAweDUzODU0MDE5LCAweGRmYzRlZmQ4LCAweGZjNGQyMDk1LCAweDdlZmM0ZWZiLCAweDA0NzdiYTc5LAotCTB4ZDllNWU1ZjAsIDB4N2MwYjdmYjQsIDB4MmVlZDhkZGYsIDB4ODA2Zjc5NjcsIDB4ZTY0YmZkMzIsIDB4YmY2MzI1ZTMsCi0JMHg3YzBjZGU2OSwgMHg2NGUxN2MyZiwgMHhjNGQwYTdiZiwgMHhkZWIxM2JlYiwgMHhjMDRlZjQ2NywgMHg0YWQxZmM3NSwKLQkweGU3NTkwNjVhLCAweDU1YmJkZWY1LCAweDc4ODcxNjljLCAweGUxNGRlNzU0LCAweDI0NWVmYThjLCAweDk4ZDI2YTVjLAotCTB4MjNjMmE0N2UsIDB4ZjBmYjJlOTIsIDB4MDNmMzJkZjksIDB4OTdjMDA5YmYsIDB4MzYzYzMzYjQsIDB4M2UzMDM0OGMsCi0JMHhmNTFhM2Y1MiwgMHhhNTFiNTI1YSwgMHhkNTVhMTNjOSwgMHhmNzYxY2VjMSwgMHg5ZTIyYjA2YywgMHhhN2VlZjU3YiwKLQkweGRlODUxZTQxLCAweGFmNzYxM2Q1LCAweGMwMDhkNTE1LCAweGYwNzEzMGJmLCAweGU3OGU3MmZkLCAweGIzZDY1NzA5LAotCTB4MmY3M2EyN2MsIDB4NmY5ZjRkOWMsIDB4Njc4YWYzODEsIDB4NTUxNWU3MzUsIDB4MjRlZDFmM2YsIDB4MTYyOGZjMDYsCi0JMHg5NjUzMTI5NywgMHgxMTZjZjRjNywgMHgzNzdlYzdlNywgMHhjMTVlYTM2NywgMHg2ZmYyMDdkZiwgMHg4NDdlODkxOCwKLQkweDAwZTUwNjUzLCAweGMzNTE4ZWZlLCAweDU1ZDAxZDE4LCAweDFlZjE4YmJkLCAweDlmNWIxMzdmLCAweDdhOGU1ZjdhLAotCTB4N2MyNDRkZWYsIDB4ZDliMmQzNWEsIDB4ZWYxMDkxZWYsIDB4ZjI4NzcwMDMsIDB4ZjAyNGEyNDksIDB4ZmZkZTFhNjAsCi0JMHhhMmZmMDE1NSwgMHhhNjE4YWZhMCwgMHgzZjkxOWI3MywgMHgxODVjYTBkNCwgMHhlMTk2Y2Y3OCwgMHhlODNmN2U1YiwKLQkweDNmYmNiNmZmLCAweGViM2FlMDlkLCAweDkwMThmZTVkLCAweGNjY2E5ZmFiLCAweDUzZDhhM2RlLCAweDZjOGJhZTUwLAotCTB4NjlhNzc4OWQsIDB4NGY2YmM4MTIsIDB4ZDYzYzVhNWIsIDB4NTRmYzNmMjMsIDB4OWYyYWY1NjAsIDB4YTA3ZWIwMWIsCi0JMHhkYTA3ZTgxNywgMHhhNzhlYmVkMSwgMHgzMjE5YmYzMSwgMHg4Y2E3YjgwOSwgMHg4ZjkwMGRmOCwgMHg5ZjI3Y2FhNiwKLQkweDNjZTBlOTIwLCAweDg5NGRiNzZkLCAweGFlZWM3YTAxLCAweGJkODNiNmNmLCAweDEyNTM2NjVjLCAweGMyZThjMjBhLAotCTB4NzNjMTA2ZjcsIDB4MzdkYzBhYTQsIDB4NWY3ZTAxM2MsIDB4ZmMxNjNkYzIsIDB4NWFlY2ZiNzUsIDB4N2NlNDQxN2YsCi0JMHgzNWQyOWE1ZSwgMHg3N2ZlYmMyZiwgMHhlZGZmNGM2OSwgMHg4YTI4ZmJlMiwgMHhkZjkwNjNjMywgMHgyZmJjNDI3OSwKLQkweDc3YWY3OGU2LCAweGZiNDE2Zjc5LCAweGUyZGRhMjMxLCAweDFlOWNiMWFkLCAweGJkMzdkZTIyLCAweGY3OThhZmZhLAotCTB4NGY3YjQzYjEsIDB4NzhmOGNmZGMsIDB4ZjgzNzFlOWYsIDB4MTllMDFiODUsIDB4MTViYWY5ODUsIDB4YWI5ZjE5OWIsCi0JMHhlNzM0YmI3OCwgMHhmM2M2NTY1MSwgMHgxZTVhNTNkNSwgMHg1OGUzZGZjNywgMHgwZTdhN2JiMCwgMHhmMTBiN2M2MSwKLQkweDgyZTNkMmEwLCAweGU4MGU3Nzc0LCAweGEyNmRhMTcxLCAweDYyYTJmYjBjLCAweGE5ZjM4OGFiLCAweGRiNGM5YTk3LAotCTB4NWIzM2ZiZTgsIDB4NTVkZmE4ZjUsIDB4NDk5Y2Y5ZjAsIDB4ZGUyMGM2ZjUsIDB4MjgxOTIyMjQsIDB4ZGU0OGNmZGMsCi0JMHhiNzVmZDQxOCwgMHg4OTFkZGZmMSwgMHhmNzZkMDc1OCwgMHgwODMwNTQ5ZSwgMHhjZjBjNGM3YywgMHg0MWVjOWYwOCwKLQkweDFkNWRlMGU4LCAweGZjMDE2OWUyLCAweGEzY2MxOTdlLCAweGU0YmY0MDQ1LCAweDAzZWYzNDk5LCAweDc2YTZlZTUwLAotCTB4ZGJmZmRlM2IsIDB4NTlmNzg5NTQsIDB4OGNmYmMyNDQsIDB4YjlmNDhiYzksIDB4ODU0N2FmOTgsIDB4MmEzOGU0NjcsCi0JMHg5ZTAxN2IzYywgMHhkZjFkMmZhMCwgMHhmN2NmNzI4ZSwgMHg0YjE0MDg5NCwgMHg0MjVmYjQ4ZSwgMHhjNzRhN2E3YiwKLQkweDgyNmY4ZmY0LCAweGRlYTk5YmY3LCAweGNkOWM4MGEyLCAweDQwMGZlZGZhLCAweGY4ODlkNWNlLCAweDFkNjUyNjdiLAotCTB4NDIyNDA5ZDksIDB4NThkZDgzNWUsIDB4MTg5Y2NlZjYsIDB4YWM5Yzk4NWQsIDB4N2UzMTE2NmYsIDB4NzY2YzNmNTIsCi0JMHg3ZjZjNDJjYywgMHhhZmEwNGVmMSwgMHhhMTJiOGE5MywgMHhlOGRkYWMyMCwgMHg4MTc4YmVmNCwgMHg5YmU1NWYwNiwKLQkweGUzMDMxYWZmLCAweDcxZWEzNDU0LCAweDdhNWUyYTVkLCAweGZmOTA5Y2U5LCAweGJmYTM0NTM2LCAweDg0MzUzN2E4LAotCTB4ZWE3OGFhZmQsIDB4ODNjMDZmYTMsIDB4ZGRiNDRmNGEsIDB4MWYzMmU5NWQsIDB4YThmYzhmYzcsIDB4ZTQ1YmQzM2IsCi0JMHgxNjRlODQxYSwgMHg4NWM3NDkzZCwgMHhmMTVhYjZmZSwgMHgxZDZiYzJmZSwgMHgxZjQ3ODU1NywgMHhjNmJlZjliZSwKLQkweDU3NzFlMDMyLCAweDc1YmZmYTI2LCAweDRjOTg0YWVmLCAweDY2NjliMjdkLCAweDcyZTNlYzNhLCAweGRmYzAyZjJhLAotCTB4M2U4NDJlNTAsIDB4M2IyNDdiYzYsIDB4NmIwZjc4OGMsIDB4MGYyNWU2ZjksIDB4MWZlNTc4YzAsIDB4ZGY1MDc1MWEsCi0JMHg1OGU2Nzg3ZCwgMHg1ZTA0NTc5YywgMHgwN2QyOWMyOSwgMHhjY2RlZjdhMywgMHgwYzJiYmE1MCwgMHhjMDlmNTQ3ZSwKLQkweDI3YWVhZGZkLCAweDBmMzhkZTZjLCAweDdkZTE0ZjZhLCAweDE0OTliZDI0LCAweDYwN2M2MTlmLCAweGJiZDMzYTc2LAotCTB4ODBkOTdiNjgsIDB4YzNlZWNkZjQsIDB4MWNhZjViZTksIDB4NjIzOTVlYjEsIDB4YTQxMWVmYmQsIDB4ZTJmMmUyNmYsCi0JMHg2NDdjMTY3YSwgMHgwNWZiYzFkNCwgMHgwMzkxZGM0ZiwgMHg4NmVlYjVmZSwgMHg2ZWFlYjhhOSwgMHhlYzJjN2JiYiwKLQkweGRhNzRlZWFmLCAweDcyZmMyMGZmLCAweDlkNzQxM2MxLCAweGNlYjBkZjc5LCAweDZiZTIzMzI2LCAweDQzZGE3NWM4LAotCTB4YWMzN2M4YmIsIDB4NTBlOWM3ZDMsIDB4NDk2OWU3NWQsIDB4MmJkZmMxODksIDB4ZjAxMjI4M2IsIDB4M2NkMmY4OTcsCi0JMHg2NTYyNmYxYiwgMHg5ZjI4OWRmYywgMHg2ZjgzZDE5ZSwgMHgzMWU2MzQ3MywgMHhmYmIzYjRmNiwgMHg0MDNlNTVjOSwKLQkweDdhNDZiYmM3LCAweDc0M2QyMWQwLCAweDI2NWIyYjE3LCAweDEwNmQ3ZDAyLCAweGVkOGJjODY1LCAweDViZjcxODZlLAotCTB4ZWVhZjFkZjgsIDB4N2EwY2EyOGQsIDB4ODMzMTc3NDIsIDB4MjgwN2U1MWYsIDB4M2RkM2JiYjcsIDB4YjBmOTYyNzcsCi0JMHhlYThmN2YxZSwgMHhkZjVmZDM1NCwgMHgxZGUxNzNjNywgMHhmYWUwODU3YSwgMHg0MmU3MWIzYywgMHhmODE3Y2U5OSwKLQkweDNkY2I4NTFhLCAweGUzZDU1ZjRjLCAweDllZWJlYmZhLCAweGZmN2E4M2FhLCAweGZjZjAxYmQ2LCAweGFjZjk0MGMzLAotCTB4YTM0NTczODUsIDB4NDQ4N2Q5YTgsIDB4ZGYzYzcwNTIsIDB4YWY3ODI5MTMsIDB4Y2E2NzBhODMsIDB4MWVjMDczNjEsCi0JMHhlNTAxZTE1MiwgMHhlMWZhNjMzOSwgMHhhMGU3ZTNlMiwgMHhmNzYwMmY0MSwgMHgwNjdlNzEyMCwgMHg3MjYyYzlmMCwKLQkweDAwODFjZTAyLCAweDI4ZjM4MzFmLCAweDQ4YWJjOTQzLCAweDQ3YTkxM2ZlLCAweGFmOGZiY2ZkLCAweDY1NzFmOTY4LAotCTB4M2UxOGVmYzQsIDB4MTI1ZTUxMTgsIDB4NDY5NjM3YzEsIDB4ZDQ0NTU3ZDQsIDB4ZTc3Y2Y5NTMsIDB4ZTRlN2ZlNjAsCi0JMHgyYjVmMmQwYywgMHhmZDU0NzBlMywgMHgwNDFiYmRhMCwgMHgyNGNiNDNiNCwgMHhjZmY2MDBjNSwgMHg3Yzk4NTM0YiwKLQkweGU5ODg5NzJlLCAweGVjOTdkYzE2LCAweDQ0OTk0YjdjLCAweGYwMDU4ZDZhLCAweGI3MDg2NWRlLCAweGI1N2Y2ODkzLAotCTB4NDcyZDNiNDYsIDB4ZGI0NDNlMzEsIDB4Y2FjMjE4OTUsIDB4ZTc1NWJmMmEsIDB4ODc4NzAxZjMsIDB4N2VjZWZjZmEsCi0JMHhlMzIxZDI4MSwgMHg4ZmE0MWYxNSwgMHgyOGFmMTgxZiwgMHg3NTdlYjMxMCwgMHg4M2FiZWMwMiwgMHhiZTk1ZGEyMiwKLQkweDIxZmM5OWI3LCAweGYyZGE1ZDVmLCAweDk3ZWUwM2EyLCAweDMwYmNjNmNkLCAweDcwOTFmZDc1LCAweDE0YmI2ZGVjLAotCTB4ZDdlYmJmMDMsIDB4ZTc4MGRjNzMsIDB4ZTNkYWNiOTMsIDB4YjJmZWQxOGEsIDB4N2I4NTA2ODcsIDB4ZGE5ZjVmMGYsCi0JMHgxNWQ0OGY1ZiwgMHg2ZjVjMmIzMywgMHhlMTMxNWQyNiwgMHhkNjVhYTNiZiwgMHhkODI1Njk3NiwgMHg3ZTdlMTRiMywKLQkweDlmOGY4YzMxLCAweDA2MmY4OGVhLCAweGQ3ZmNiMmJiLCAweDdlNzBjNWM5LCAweGRhYTE5NmQ2LCAweDFhY2ZjYWZkLAotCTB4MzQxY2RmNjEsIDB4ZTdhMjNmYTIsIDB4ZjgzYWI5ZWQsIDB4MGFlZGU3YmUsIDB4Zjc4ZTVjZmUsIDB4M2U5Y2Y1YjgsCi0JMHhjN2UzMGU5NSwgMHhmZWU3YjRlOCwgMHg1YjZmZGMwZCwgMHhkNzY0ZmJhZSwgMHgwZmZmYzBjZCwgMHgwOWFlNjYyNSwKLQkweGViOTczN2YzLCAweDdlMWVkMDBhLCAweDA3OWExZjUxLCAweDdlN2FhNmYzLCAweGFhNTdlNDFkLCAweDE0MzJkOGZkLAotCTB4ZjA3MWFmOTYsIDB4MGZlMDJlZWMsIDB4MTVhNjM2YTcsIDB4MzllOTViMDAsIDB4ZGZlZDAyMzgsIDB4ZTVjNzBmOWUsCi0JMHgyNDdmNjhjOCwgMHhiYzJmODBiOSwgMHgzMzk2NTdhOCwgMHhkYWVhYzU3YiwgMHgxZmRmZDk5ZCwgMHhjNjcxMDM4YywKLQkweDhhMTM4MzllLCAweGYzZDA1ZmMwLCAweDJkMmY5YjIxLCAweGI2ODBmZmEzLCAweGE1MWU0M2YzLCAweDRlOGM2ZmRhLAotCTB4ZGQ3OTA0ZDksIDB4YjQ3YWQ3ZTQsIDB4M2FmYTFlMjMsIDB4YjllZTExM2IsIDB4MWUwYzMxODgsIDB4NDFiYjAxOWYsCi0JMHgxYWJjZDc5YiwgMHhhYmRlYWRlNywgMHgyYzU3NjkxZCwgMHg0Zjk2MWUyMCwgMHhhOTdmNjExYiwgMHhkYTQ3NzNmNywKLQkweDY5YTQxNTg5LCAweGQwMzA5NzZkLCAweGI4OGFhNDVlLCAweGZiMDA5ZmM5LCAweDQ1NmJmZDVhLCAweGVmNjRiZjc5LAotCTB4YmVmNmEzNTUsIDB4OWZkZjNmNjIsIDB4NjVjN2U0MjYsIDB4YTAzNjNmNzQsIDB4ZmNjMDI5YmYsIDB4YTBlMjc1N2IsCi0JMHg2NWVmZDc3MSwgMHg5ZTNhZTI2NCwgMHhiY2RiZmU4ZSwgMHg5ZWJjMzBhZSwgMHg0OWM5MTFkNCwgMHg0MGQyN2FlMSwKLQkweGMxODJjZTRjLCAweGU5Y2JjNmVjLCAweGI0MGQ5ZjYwLCAweDFmYTJjZjE3LCAweGJlZmMzY2EzLCAweDZlZDAzMjMwLAotCTB4YzAxYzU5M2MsIDB4MGQ5M2JkYmMsIDB4YzA5ZWZlMjIsIDB4OTE4ZGRhZjUsIDB4OTdiZmFiZGYsIDB4MmMyMGM5ZTAsCi0JMHg2NzcyMTkxZiwgMHgzNzY0ZGZlZCwgMHhjMmFiZTc2YiwgMHhjNzdmY2NkMywgMHhlMmZkYjIyMiwgMHhjYTM3MTYwYywKLQkweDZlMjQ1YWZkLCAweDdhMWRmN2Q4LCAweGRkMTNiZjNjLCAweDFmOTZjNWYyLCAweGViYjY3ZDAwLCAweGUzMDU0Y2U1LAotCTB4MGI3YmY4MmIsIDB4Zjk4OGEwZTQsIDB4YTdlZGJkN2YsIDB4MzkwNDFlNjIsIDB4MWUxYzcwNzMsIDB4ZDc5M2ViMjMsCi0JMHg5MzhjNDUwNywgMHg0YTVkYjRmNCwgMHhlZDBhNzg4MCwgMHhiZWM2ZTMwNywgMHg0MDVjYTc4ZSwgMHhlM2NkNDNiZiwKLQkweGZhZjEwY2QxLCAweDA4ZWVmOWZjLCAweDFmOGYyOGJmLCAweGM5OWNiNGY3LCAweGY5NGVmZTAxLCAweGIwMTlhM2UwLAotCTB4ZTJiZTczM2YsIDB4MTU3NTZjZjcsIDB4ZjlkMWZkMDEsIDB4MWJkZWZlYTEsIDB4YTVmYThjYjgsIDB4ZjQxYzVkYTksCi0JMHgxOWY1YWFmZSwgMHhjZmUzZWI4NiwgMHg4YmYyMDMyNSwgMHhmN2M0NjdkNiwgMHgwOTVhYjNjZiwgMHg3ZWNlNDAxOSwKLQkweGI0YzUxZTViLCAweGMzNTcwYjgzLCAweDRkYmQzM2ZkLCAweGI3N2YwYjgyLCAweGI5NDQ1ZGI5LCAweDNhM2RhMGI1LAotCTB4NGNiYzUwYTAsIDB4NzJjMTYxMWIsIDB4ZWU3NjRlZjksIDB4ZjkzODg2NjMsIDB4MmU2ZmYwN2QsIDB4N2ZhMjIwZGUsCi0JMHhmMmNiNDhmMywgMHg2Nzk4ZjVmNywgMHhlNTgzMjdhMSwgMHg1ZGU3ZjQ2MSwgMHhjNjE0N2MzYywgMHhkYzE0ZmM1OSwKLQkweGM0ZmY0MzEyLCAweDZmZDAwZGZiLCAweDgxMDJkM2U1LCAweGNjODg0YTlmLCAweDc3OTgxOGJmLCAweDE0NGYzNWQxLAotCTB4YzA1ZGU2MDcsIDB4NjkwN2U1ZjksIDB4NDY2ZDE1YmYsIDB4M2MwZmFmZjQsIDB4MWJjODQwZWYsIDB4MjFmN2ZkMDksCi0JMHhiYzZmMGVlNSwgMHg5ZjZkMjhlZiwgMHhmOTYwNjJkYiwgMHgzZTM1NjY3ZiwgMHgwZWY2ODVkNSwgMHhkMGYzYjIwOSwKLQkweGE3NGYwNzNkLCAweDg3N2QxZTAzLCAweGIxZmQwN2ZlLCAweGQyMGZlZDQzLCAweDBlM2NmMmNlLCAweDU3ZGZiMDY2LAotCTB4ZDJmYWZkY2MsIDB4ZGE0MTllOWQsIDB4OGIzY2YyMzcsIDB4MzI3ZjdhYmQsIDB4NWI0N2IxZTgsIDB4ZTgzZjIzMmUsCi0JMHg2Y2ZjYzgzZCwgMHhmYzRmZjY0MywgMHgwYWVmZTY2NiwgMHg1NzBmZDE5YSwgMHgwZWRmMmFkOCwgMHg4M2VhODRmYiwKLQkweGVlZGY1ZWIwLCAweGQzNzdiM2I1LCAweGJkNTVmOWIyLCAweDZmOTVhYTAyLCAweDBiZjcwNWI4LCAweGRmZjA4ZmVjLAotCTB4YzlmNzUyMDMsIDB4NTNhNzFlNWUsIDB4NzkxYTQ3ZjMsIDB4M2Y5YThkYmUsIDB4NDQ5M2U2YTIsIDB4MjdjZDQzY2UsCi0JMHg3YzYxNGM2OSwgMHhmM2MzMmYyMywgMHg5NDViZDAwMSwgMHhlNzdlY2ZjZSwgMHg2OGNmMjIzMywgMHhjOGExYmNhOCwKLQkweDcxOTEwNzczLCAweDhhZTI0MTgyLCAweDQ2YzBhZjJjLCAweGM2YTA2ZTMwLCAweGJlNTQwZDE3LCAweDMxZDY0N2MzLAotCTB4ZDA2NTM3YjMsIDB4MjI3YmZkN2EsIDB4YzU0MzRmZGEsIDB4MWM3NWQ1MWIsIDB4Nzk4NjUxMzksIDB4OGIyZjU1NTYsCi0JMHhiMGJmYWZlOCwgMHhiY2UzY2Y1ZiwgMHhlOTQzOGMyMSwgMHhjODYxN2M0ZiwgMHg3ZWNlN2U0NCwgMHhjYjQ3Yzk1ZiwKLQkweDU5MzdkZWYwLCAweGQyOGVmY2QyLCAweGU3MWUxYzU3LCAweGQ5ZjA3MjMzLCAweDk3OGZiOTIzLCAweGU0N2I3ZWQyLAotCTB4ZjVlODAzMzIsIDB4NGEwYjEzZmEsIDB4OWRlOGRlNDAsIDB4ZDc5ODA2NjUsIDB4YTZjNTEzOTEsIDB4NGQ5YmMwNGMsCi0JMHhiNmIzN2RjMiwgMHg1M2I3MWQ1ZCwgMHgzZmZmZmU4NiwgMHgxZjAxMmE4MCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYjVmZjAwLCAweDU1OTQ1YzBiLCAweGU3NzlmOGRhLCAweDM4MGMyYjlkLCAweGE1MTE3MjgwLAotCTB4MzgwYTBlZTEsIDB4ZGI5NTkwMmEsIDB4OTc4NDI2OGUsIDB4NGQzMmQ0NWEsIDB4ZTU0NTA3NTcsIDB4ZGI2OTgwMzIsCi0JMHhjYmJhZWVlNywgMHg1YWNkNGQ3OCwgMHhiNWFjYThkZCwgMHhiY2MwYzFiZSwgMHgxYTE2M2I2MCwgMHgyNWEzYjYxNCwKLQkweGI2OGI5NTk5LCAweDNmOWI1Yjk5LCAweDAyODZmMzI4LCAweGZmYjlmNTYyLCAweGNmZmViZjZkLCAweDNhZjM5Y2YzLAotCTB4N2U5ODhlZjMsIDB4YmY2N2RmYmIsIDB4ZGU3Mzg3N2UsIDB4NzNjZTdkNzMsIDB4OTMzOWNmM2YsIDB4MTk2ZTM5YTYsCi0JMHg5ZWIxOWZkMywgMHhjYWRiMmQxYywgMHhjODdiM2IxOCwgMHg2MzBkODFiYywgMHhmN2ZjMDdlYywgMHhhY2YyYzY1MywKLQkweDE4MDM2MzEyLCAweDMxOWFiYWZiLCAweDNlNTdkZWFmLCAweDdjODFmYjNmLCAweDAyZDhjMTk2LCAweDMxNjM1OGU2LAotCTB4MzMyMzVhNDMsIDB4YmZkMTkxYWYsIDB4MWQxZmIwMWYsIDB4ZjI4MWVlOWIsIDB4OTg4MzU3ZjksIDB4NWRhZmMyMzcsCi0JMHhiNjNkMTRmNCwgMHg5NDM1N2Y5YiwgMHgzZDQyNDc3OSwgMHgzNjc3YWYxMywgMHg0ZjI4NTIwNCwgMHgxODcyZjFjMCwKLQkweDlkZTkxMmNiLCAweDZlZGYyZDIyLCAweGViZjY5Y2IyLCAweGE2MTNjMmJmLCAweGM1MzU1N2NhLCAweGY5YTc0ZTU4LAotCTB4NDdmOGU1ZjIsIDB4NjM2ZmZjMGMsIDB4OThjOTE2NDYsIDB4OTc2MjdmOTMsIDB4ZGI3NGZjNWUsIDB4OTEzZjQ4NWMsCi0JMHg1ODU2MDkxYywgMHg5ZWQ0ODU1NywgMHhiMTBjMGY3ZiwgMHhlZjU3YmEyNiwgMHgyZDNhZTMzMCwgMHg2M2YyOWJjYywKLQkweDVlNjA4Y2ViLCAweGQ1YWU3MWJmLCAweGY1YTQ2YWJiLCAweDI1NjZlMGY4LCAweDZiZDZmOWI4LCAweDVkN2MzODI2LAotCTB4MzgxMzdkMWQsIDB4ZThlMGFhYzYsIDB4MDU0MTNmZWIsIDB4NGZmYmViYzcsIDB4YWViZmYxYTEsIDB4ZmY0OWJiNGUsCi0JMHhiZmQwNmY0MywgMHg1ZjdmMzU1NSwgMHhlZTM0NDliZiwgMHgwYjBkMGNhYSwgMHhhNGY0ODZjZCwgMHg1ZTAwY2RjMSwKLQkweGNiMjM1NTAwLCAweDFkODBjYzY1LCAweDc5NTY1NGMxLCAweDY2YWQxOWM3LCAweDc1MjU3YjVmLCAweDZjYjE3MWIxLAotCTB4OTQ2ZjdjMTQsIDB4ZmRmMGRjMGIsIDB4MjVhZTY1OTIsIDB4OTg1ZDUyMTksIDB4YTFkYmIxODYsIDB4NzA1ZWNlYmQsCi0JMHgwODZiZjQxNywgMHg0MTcwOGYwYiwgMHg4OWFjMTMzZiwgMHhjMmVmYWViNCwgMHgyODMwMTUxNiwgMHgwOGYwNmVmZiwKLQkweDgzOGYxNWQ5LCAweGZjYzQyYTJjLCAweGYyYzU0MWFhLCAweGUzN2YxYzdhLCAweGI1ZjcwYzczLCAweDBmYzdjOGNhLAotCTB4ZmMzMzJmZDksIDB4YmEzMGVlY2UsIDB4Nzc3ZWExOTMsIDB4Nzk5NmM3Y2IsIDB4MDZkZmNlMzAsIDB4M2VlMGU2MzksCi0JMHhjOTA5ZjMyYiwgMHgzZWUxOTc3OSwgMHg2ZGM3MjZiMywgMHgzZDhjMjE4NSwgMHgwZGFjNjE2ZSwgMHg1MGY2ZGFmMywKLQkweDcyNWVhZjVjLCAweDQwNWRlN2ZjLCAweDA2YWZlYzBmLCAweDc3YzkwZjU2LCAweDI1YWE0NzI2LCAweGNhYmVkN2MzLAotCTB4MDFmOWE3YWEsIDB4NjhiMmM0MzUsIDB4YTUwZDVmNWMsIDB4MDg1NzRkNTUsIDB4ODkxNmQ2Y2UsIDB4YWY3Y2E1ZDYsCi0JMHg3NzA0M2Q2MiwgMHg4ODUxZTU4NiwgMHg3ZDJiNWE5MywgMHgxNmE0NzI2ZiwgMHg3MWU2ZmE2NiwgMHhjY2Y3ZmZhZCwKLQkweDlmZDAwZDJlLCAweDQzM2ZmZjYxLCAweGRhZGQ5ZTExLCAweDkwNmRmYjllLCAweDYwZTQ1YTdhLCAweDExYWVmODdmLAotCTB4ZjA3NjM5NzQsIDB4NTBlZDU5MzcsIDB4ZmFlZDg5NWUsIDB4ZGJkOGY2MzEsIDB4ZjMwY2E5ZTUsIDB4OWMyYzllODYsCi0JMHhmZmI3YzFmNywgMHhlOTBlZDU5MSwgMHg2ZmNiZmI3NywgMHg1MGVkZjJjMywgMHg2ZWY5MGFkZiwgMHhjZGE1NGY3ZCwKLQkweDY2MjRiZmFmLCAweGY5NDY2OTcxLCAweDBmYjE2YWQyLCAweGY3ZGJlNTgxLCAweGYzODgxY2FmLCAweGRjYzFkMDY4LAotCTB4YTU5YzYxYzMsIDB4NDc0ZjIzNjUsIDB4OWZkODNhMjAsIDB4YjViODQ3OGUsIDB4ZWMzZDU4ZTgsIDB4NTRkMzU3NDcsCi0JMHhlNTRhZjkxOSwgMHg0MzA1OGMyNywgMHhmNjE5YmIzZSwgMHg4M2Q5ZjIwNywgMHhmYjAzNWI5OSwgMHg5M2ZmYjk1MywKLQkweDk1NWZiOGU5LCAweDA2OGI3YTM5LCAweGJjMzQxMjk2LCAweGJlMDJiZGNkLCAweDJkMThlNTA3LCAweDJjNTNlMjEyLAotCTB4ZWNjZjVmMWYsIDB4ZmI2MjI1OGMsIDB4YjdkYzA4YmMsIDB4MmEzMTA2MzcsIDB4NDFmOTk3ZmYsIDB4NmJkYmM3MWQsCi0JMHhiYzdiYzBmYywgMHhhYmM2MDFiMiwgMHg0N2VmZGI5MCwgMHhhMTdjMDAzZSwgMHhmMmE1ZjExZSwgMHg2NjhlNmZhMywKLQkweDRmNDZiMTU4LCAweDc4Y2ZlZTI0LCAweGQwZjgxNzFjLCAweDM2OWZhMmM3LCAweGFjMGVlMTZiLCAweGZiZTBmZGQ3LAotCTB4MmRlOGIwNmIsIDB4ZjVjMGUxYzksIDB4YjY4YzYyYjgsIDB4NjhjZmM0N2EsIDB4YmYxNGMyNzcsIDB4YWFjZDdkN2QsCi0JMHg0ZmYwZjZhMSwgMHgyMjFkYmM0MiwgMHhhMDdiYmFlNiwgMHgyMjU4NzE2NywgMHg0NzBlZTVmZSwgMHgzMGQyYTg3YywKLQkweDM2NDNmMjA3LCAweDA3N2E4MDA5LCAweGU2NjE2NWUyLCAweGU5ZWJjYzk0LCAweGQ0MTViMThhLCAweDdiNTZkYmRmLAotCTB4NTdjNzM1YjMsIDB4MzM2OTkzZmYsIDB4ZDA3ZDFkMzMsIDB4YzEyYTYyMjEsIDB4MDQ3OWVmNTMsIDB4NjE1M2Q5ZTcsCi0JMHg3ZDg1NmRiNiwgMHg4MjdlMGJmOCwgMHgzMzRmMmY3NiwgMHg1ODUwZTU3OCwgMHg1NmJjY2U4ZiwgMHgxOTNhM2MwMiwKLQkweDAwNzViYjNjLCAweGQ5YjU3ZmFjLCAweDczYWUxZWYxLCAweGQ3ZTM0M2ZhLCAweDE4M2E1ZTYwLCAweDc4OGM1ZDYxLAotCTB4OGI5ZWQ0NTksIDB4NzI2ZDEyZmIsIDB4M2JlMzgwN2MsIDB4MjJkYjhlOGQsIDB4MDY5Nzg5NjEsIDB4YzFmYjUyM2IsCi0JMHgwOGMyYjM1NiwgMHg5ODU2NmYwZSwgMHhmY2U3ZDg1OSwgMHg3OTdjN2NmOSwgMHg1NGI4NDFhNiwgMHgzNmY0YjgwOCwKLQkweDdjNDNmNjI2LCAweDVmYWQ3YWVkLCAweDc0Zjk4MzE2LCAweGNhMDk1ODY5LCAweGRmMzEyZTg3LCAweDk4OGYyMDczLAotCTB4NzEyZTlmMWYsIDB4NDExN2QzMWYsIDB4NjNiYWQyZmQsIDB4ZWI3ZWI5ZmEsIDB4ZWVjYzYwYWYsIDB4ZmM3ZWI4YzksCi0JMHgzMDFmYjg4YiwgMHhmZmQ3ODVmZSwgMHhhMWFmZGRmOCwgMHhmNzZmY2VhYiwgMHhjMDA0YjBhNSwgMHhhZDIyZTkxMywKLQkweGM3MWRiYmViLCAweDlkZjU4YjY2LCAweGQ2M2ZmNWM1LCAweDg3YTcxM2RiLCAweDA3M2QzOTc1LCAweDg4N2Y5Y2Y0LAotCTB4NTI3YjY5ZjUsIDB4NWQ3ZDZjN2UsIDB4YzI3Y2I2OWEsIDB4YTU5MjdkOGIsIDB4YWVkN2RlM2UsIDB4N2U1OGYxYTIsCi0JMHg0OTdiZTAyYywgMHg5OTA4ZDg1ZCwgMHhlMjBhNTllMywgMHgwNjFiYTk1OSwgMHhhNTViYzNmMSwgMHg4YjNlMDUxZiwKLQkweDVkZWJiZjA1LCAweDE0MTNlMDJhLCAweDVhZjI4NTlhLCAweGZlMzI4ZjgxLCAweGNjZjgwMGE5LCAweGUxZTRmNmQ2LAotCTB4MGIyZjY2M2MsIDB4ZWE3ZTcwZDMsIDB4YmU1MWZjMjYsIDB4MWVhYTU5Y2YsIDB4MzBlMjI1NzcsIDB4MWJmNWNmY2MsCi0JMHg2NmYzNGRjOSwgMHgyYjg2ZmYzYywgMHhmMjFlYmRjYywgMHhiZjk1Y2QwNiwgMHgyMWJkNDU0YywgMHhiZDQzNjM1MywKLQkweGYwMTA0YjYxLCAweGZkOGMxMTgwLCAweDhiY2ZlYzU5LCAweGUxOGMxZmMwLCAweGNiMTZiZTU0LCAweGZiNzg4M2EzLAotCTB4ZWUzNTY3ZTgsIDB4NzBiZWQwOTUsIDB4ZTFlMTMzNmMsIDB4OWI2Njk1Y2IsIDB4MzExNTYzMGMsIDB4ODUzMGFjNjAsCi0JMHg0N2FlY2M3OSwgMHhlNjNkN2ZiOCwgMHg2MWRiZmIxZiwgMHgxZGUyODM5ZCwgMHhmZWIwZjE1MSwgMHhiODlhMTEzOSwKLQkweDFjM2NkMGJmLCAweDljMDMyNzQzLCAweGM3MGU2OGQ4LCAweGMyMDdiODQwLCAweGU4YjMwYTdmLCAweDM2YzY1ZmIwLAotCTB4YTdlZTkwNjgsIDB4ZTY1MmY4NTgsIDB4YTc4ZTljNGIsIDB4YzcwZWJiMzIsIDB4YTgzOTkwN2IsIDB4YmQyZWYxZGUsCi0JMHgxYzFkMDE5ZCwgMHgzMDYwZjQwNywgMHg4Yjk4ODdlZiwgMHgzNzMwNjdjYSwgMHg5Nzk5MzNhNSwgMHhiNTljZmZlYSwKLQkweDAzYTE1ZTUzLCAweGZkMzlmZmMwLCAweDhkOWZmZTM5LCAweGIyNmYwOTkyLCAweGM3YmUwMWUyLCAweDJmMDZiMzgyLAotCTB4N2U0Yzc1ODUsIDB4NjE5OTM1MmUsIDB4MDgwMzM1OWYsIDB4Zjc5YjM3M2UsIDB4YjFjMzg5NjQsIDB4MWRiOGVhY2QsCi0JMHhmMDViZGZkNywgMHhkMDM1NGJlZCwgMHgyNWU4YzY4ZiwgMHgyN2M2YmJmYywgMHg3ODEwMGRjNiwgMHhhMjdjZTNmOCwKLQkweDA5ZTM5N2FkLCAweDA2Mzk4MzkwLCAweGQ4YWY3MGUwLCAweGU1ZWQ3YmQyLCAweDhjYmQ3MDkzLCAweGZlOWU0ODU5LAotCTB4OWU1ZmQwNGMsIDB4YjNmZDY2NmMsIDB4NmRkOTdjNzEsIDB4YTVkOGI5YzAsIDB4YmU0MjQ2OGYsIDB4ZDZjYzhjNjAsCi0JMHg1YmRlM2NjMywgMHhiZWRlNDhjZSwgMHgxMzc2NWMzNywgMHg4NjlmMjBhZSwgMHg3ZThiZjdmNiwgMHhiYTk5OGQyNywKLQkweGNiZDQxZmFhLCAweGRiM2RiZWZmLCAweDIwYzE2OTBiLCAweDdlZWQ5N2RkLCAweDdmYmUzNWY4LCAweDQ4MzBhYWVkLAotCTB4Y2JhOTI0MjcsIDB4MmQzNmIyMjcsIDB4MDY1Mjc1YzIsIDB4ZjNmMWZiOTQsIDB4ZjVkNWIzZmIsIDB4ZTE5OGUwMGUsCi0JMHgyMzI4ZGI5OCwgMHgwZjhjY2RmZCwgMHgxODI2N2ZlOSwgMHg5MGQ4NDNiMiwgMHhiZDFmNjQxZiwgMHg5ZGU5ZWIyOCwKLQkweDBkZGY0NTc0LCAweGVmMTBkOGYzLCAweGIyZmI4Yjk4LCAweDY3YWZiZWY4LCAweDJkMzNiZDIzLCAweGNhMjQ2OGZiLAotCTB4NWQ3Y2EzYTksIDB4MDBkZDAyNWYsIDB4ZDVkM2IyMDYsIDB4N2U4MGQxMjAsIDB4ODgzZTgwY2UsIDB4YjdhMDczZjksCi0JMHhkYWExN2E2MSwgMHhkMDQ1ZTk0YSwgMHg1NzdiZjBiMywgMHg5ZWYyOGRiNSwgMHhlYzcyYzJmOCwgMHhjYmRhZWU3NywKLQkweDRlMDY0NzVhLCAweDZkZjA4NTJiLCAweDM2YjdjMDg5LCAweDhjMTM1NzhkLCAweGIyNTViNGY0LCAweDYyNWM3Y2ExLAotCTB4MGMxYjFiNmEsIDB4MWY1MjViZjAsIDB4NjcxZDgzNmYsIDB4NTY5ZTRkNjUsIDB4YjdiMTdlOWMsIDB4NzViNzFmMzAsCi0JMHhhZDQ1ZTFjMSwgMHgwNTVjNTY5OCwgMHg2Y2JkMDc4YywgMHgxZmY4NWNhZSwgMHg3ZjVkMDc4OCwgMHg3ZGRhNzJmOSwKLQkweDdhYjY3ZTUwLCAweGJlN2Y4ZDE0LCAweDc3ZTM0ZWRhLCAweGZhNTAxNzU2LCAweDM3ZTNiYzdlLCAweDRiN2IwZjM4LAotCTB4MTU4NDZiNDcsIDB4ZTEzMmU1NzcsIDB4MWQwZDdkY2IsIDB4ZTdjODU4ZGEsIDB4ZDIzYjI1ZDksIDB4ZTY3NmRkZTEsCi0JMHg2ZDNkMDM3NiwgMHhiNWI5NzFkNiwgMHhkMjE2ZTQxOSwgMHgyOWNjOThlNSwgMHg1MGNhM2UyZiwgMHhjNzFlMzhhZSwKLQkweDUwOWMxZWYxLCAweGRjZmQ4NzlhLCAweDhiNDhhYTNmLCAweDllZmExZWY1LCAweDFmNzg4OGIxLCAweDhmMGNkZGRlLAotCTB4YmY1ZjAwNTksIDB4Nzg0NGI2ZjQsIDB4ZmQ2MzQ5NzgsIDB4YWU1OWVhMTksIDB4MGJlOTMyMjMsIDB4MmE5ODVhYmQsCi0JMHg3MjdiZGZmNCwgMHg3YjA1ZGI4OCwgMHg2MjZmNzhiYiwgMHhjNWI3ZjIxNCwgMHhiODU0NmIzYSwgMHgwY2ViNWYxZiwKLQkweGJiOWQ2YmUwLCAweDk3ZjY4ZjZmLCAweDllZTE5ZDc3LCAweGJlNDMzZWVmLCAweDRiZTcwNWY0LCAweDVlNjczM2IwLAotCTB4OGU2NWJlNDAsIDB4NzZmZWUxYjYsIDB4ZjQwNGJiMDksIDB4Y2Y5NDYwYzksIDB4NDc0MTdhOTUsIDB4ZGYzMDU3YzAsCi0JMHgxNGU2YzQxOSwgMHhkNWY3M2U0MiwgMHgxNzQ4YjFkOCwgMHg3Y2FhMWUzOCwgMHg3OTQ5ZGYwYSwgMHg1Zjg0YjlmNSwKLQkweDZkZTM3ZDViLCAweGVjZmZjY2Y3LCAweDcyNWZjODA1LCAweDkwM2E1YzZiLCAweGE3OTg5NzUzLCAweDU3NWM0ZGViLAotCTB4ZmE4NmQ5OWQsIDB4MGRhNDlhNjMsIDB4ZWE3ODRhNWEsIDB4OTM0YzNhMjYsIDB4YzBhNWRhYWMsIDB4ZmFiYzc2NTcsCi0JMHgzMDNmYzBlMiwgMHgxYjE4MWJkNCwgMHhkYWRmZGYwNSwgMHhlNzdjNGMxNCwgMHhkNGVkOWQyZCwgMHgyMmZmNmM1MiwKLQkweDUzY2FmZjZmLCAweDA5YjJmY2JmLCAweDQ2MmIyN2QzLCAweDNlZjExMmZjLCAweDVhZTA5YzNlLCAweDIxZDJmYmZjLAotCTB4NjM0MzY3ODgsIDB4YmZhMDFiNjEsIDB4NWU0ODZmNWQsIDB4OTk2MzE2NTMsIDB4YzQ1NjA3MzUsIDB4NmQ4NjdjYzAsCi0JMHg4NDBjZDBlOSwgMHhiNDlkNzg3NCwgMHgyMWExZDMxMiwgMHhmODY1ODcwNSwgMHg5NWJjNWVmZSwgMHgyMWIyMzFlNiwKLQkweDcyNDU4ZTVlLCAweGVjZmVlODE5LCAweGE4N2ZhNGE3LCAweDlhOGM5MmY1LCAweDMyMDc2M2NiLCAweDQ0MzI3ZTlmLAotCTB4N2RjMDVjZjIsIDB4NjI3MjE5NTksIDB4YjYzZmM5MDQsIDB4ZGJkOWZhOTEsIDB4OTllM2Y1MzIsIDB4N2NkMDBlYjQsCi0JMHg3YTQ1ZGU3MCwgMHhiNzBiYzkxYiwgMHhlY2YxMTZhYiwgMHg0NmNkMjM5MiwgMHhlYmExN2FmYSwgMHg0YmRmZGM3OSwKLQkweGNhMWI0ODhlLCAweDU3MWE3ZDhmLCAweGZmNTg5ZGU4LCAweGY5ZDY5Njk0LCAweDUwYjFkZDQ2LCAweDM1ZmJlNDFkLAotCTB4YmUwOTk4ZWEsIDB4MjFlZjBjNTcsIDB4ZDgzMTU5YjksIDB4YzFkYzcwY2EsIDB4ODA1YmRkMmYsIDB4ZGM2Y2E5ZjAsCi0JMHgzOGZkNGI1YiwgMHhlYTA5MzY4ZCwgMHhkMmJkZWM5NSwgMHg4ZDk0NzI4YSwgMHhjNDY0YjY2NywgMHg3ZjllNDZhZiwKLQkweDg2ZGQ5YzYyLCAweGY2YTRiNTcyLCAweDJiNmY5ZTViLCAweDU4MjE3Y2E0LCAweDNmYWM1YTEzLCAweGNmNjllYjhmLAotCTB4ZGFjNTM5MDksIDB4MTE3Zjg4YjMsIDB4ZmI3ZDVhY2EsIDB4YzY3YzA0ZjUsIDB4NWRlMzliZWYsIDB4M2VjYzhiMzEsCi0JMHhlOTcyMDZmOSwgMHg4YzU5ZDIwMiwgMHgxYjZmYjc5ZSwgMHhlMDhlMzMzYiwgMHg0OTcyOGI3MiwgMHgzZDM5ZTdlOSwKLQkweDRlNTA5OTczLCAweGFjZmNiOWVhLCAweGY4ODE3ZTA3LCAweDE3ZmZmZDAxLCAweGQxYzhhZmY2LCAweDZjY2E1OTU4LAotCTB4M2VjNzc1ODQsIDB4YjRhZGIwNjcsIDB4ZDMzOGZhZGUsIDB4MzkyMWFkZmIsIDB4NTU3NWU4YWEsIDB4ODk1ODVmNDIsCi0JMHgzNmZkYTA1NSwgMHg4MDRlNDNiMywgMHhiOTBiZTY3MSwgMHgwY2Q2YjRjYiwgMHgzMTllNDNkNCwgMHhhNDA5YjVkYiwKLQkweGEzZGU4MWQ3LCAweDRjNjY3OTIxLCAweDA2NThiZDQwLCAweDRmZDEyZjNkLCAweGRmODczM2NmLCAweDM2NmIzYzkyLAotCTB4ZmRiMTQzZGIsIDB4MmZlZmQ2YWQsIDB4MzE1N2Y5ZTYsIDB4NDQ0YjQyNGYsIDB4MzFjODU3NDgsIDB4ZjIzZGUwM2IsCi0JMHhhMTI3NzY0ZSwgMHhlYjAzNTdhYSwgMHhlNzkwNzAxYiwgMHg2ZGZhMTIxMywgMHg3YWJhMDU1YSwgMHhmYTk1ODI1MiwKLQkweDdjMTFmODAxLCAweGNhMTllNzYxLCAweDI0M2NhNTA5LCAweGI4NDFlMzliLCAweDQ3ZmE0OGMzLCAweGUxYTJjNDU0LAotCTB4OWFmMGZjOGIsIDB4MTEyM2JkNjksIDB4NWJmZmViMGUsIDB4YmZhODRhZjYsIDB4MWJiMzNmZmQsIDB4YmU3MDI1ZjEsCi0JMHgzZmRjMDk0NSwgMHhiOTg5MGJmMSwgMHg5NzU3ODgzNCwgMHg0NWFmNTRmNSwgMHg4ZmViYmVkNywgMHgzNGE1YWVkMCwKLQkweGVkNzY4NmMzLCAweGQ4MjFlNDNlLCAweGY0OWVhODRmLCAweGU2MTA5NmE5LCAweDk5Njk3YTQyLCAweDdkNDZlOTFjLAotCTB4YTdiNDJkZWMsIDB4ODg2NjFlOTAsIDB4N2M0NjI2ZjYsIDB4NDBjNjY1YmEsIDB4MGQwMzg3ZTIsIDB4ZjM1YzE4MDAsCi0JMHhhZjZmMDM0YSwgMHgyNjQxZjQ1YiwgMHg5NjNjYmZmNiwgMHhjOTRhYzdlNCwgMHhmNDgxMzZiZCwgMHhjYmU0OTkzNSwKLQkweDZhOGZjMTQ5LCAweDY1MzNiY2MyLCAweDljYjlhZjI4LCAweDkzOWM3MGMyLCAweDYxNTY5NzYwLCAweGEyMjA5MmJkLAotCTB4N2IzMDlhYmIsIDB4N2RkN2YyMGMsIDB4ZGYxMzJkZmYsIDB4NzkwZTE5YWIsIDB4ZjIyNWYxMzMsIDB4YjY0Y2Q0YzcsCi0JMHhmZTQxODRjNywgMHgzNTFmYjE2MSwgMHg2N2ZhZWViNSwgMHg2OWM5YmZiMSwgMHgzMjgxYWViNCwgMHhlMmY1NDQ1YiwKLQkweGU5OWYzZjc5LCAweGZkYzczYjc4LCAweGRiZDQ1YWMxLCAweDIwYzUwMjQxLCAweDRlMjg1ZWZjLCAweDJhMDdjODY2LAotCTB4NDRjZWM2MTMsIDB4ZjdlYzUyYmMsIDB4MjhkZjgyZTksIDB4NjMwMzYzZmQsIDB4ZmM2M2VhMmUsIDB4ZjVmOThjZGYsCi0JMHgwN2FiYTQyNiwgMHgyMDFkNGM0YiwgMHg5MmM5ZDgzOSwgMHhiZjY4MjExNSwgMHhiZDkwZTgzZSwgMHgxZTViZDQwNiwKLQkweGQzNWZiM2M4LCAweDdmYjAxMjBiLCAweGIzYzI0Y2ZiLCAweGYyN2VjNTYyLCAweGJkYjg0M2NlLCAweGViNjQ2M2RkLAotCTB4N2Q4NDdmNDksIDB4ZGYxZWJjY2QsIDB4MjI2MzNjMmEsIDB4NTJjN2VkZmMsIDB4ZjM5N2E3MDMsIDB4ZDc0ODJmMzgsCi0JMHg3MTRhM2IwNywgMHhlMzRkNTVkZSwgMHhjYWVkZmMyMywgMHg4NzU3ZjMxOSwgMHhmMThiZGQxMiwgMHgyM2RiNTYyZSwKLQkweDVlYTEyNzRlLCAweDMyYTk0MDUwLCAweGMxNGUzMjllLCAweGVhNWRhMzE0LCAweDgxOGRmNjhmLCAweDQyMzlhYWY0LAotCTB4NzgzMmFkMGYsIDB4NGRmZDIxYTcsIDB4YTMxZTM5MzcsIDB4NjQyZWNhNzEsIDB4N2ZkOGJlYTEsIDB4OWMzZjVhNGEsCi0JMHgzMmZiZjc3ZiwgMHgyNTNkM2M0MywgMHgzMjE0ZjVmNiwgMHg0NWE3YzQ2YywgMHg0YzJmODQyMSwgMHg4ZWJmMWRlNCwKLQkweGY0MWNmZDIwLCAweGM3MzdjMjFhLCAweGRlNTI4NmVmLCAweGNjYzdiN2ExLCAweDFjNWNmYzQ3LCAweGNhNzFmODRjLAotCTB4NzI5ZmJmYzIsIDB4Y2Q3ZTExODYsIDB4ODdmOTVkZmEsIDB4YWE3YmUwMGMsIDB4Nzg3ODRmNTAsIDB4M2YyNjQ1YWEsCi0JMHhjYTk2ZGZjZiwgMHhiOWMwM2Q1ZSwgMHg2N2Q1Y2E2YiwgMHhkNzVkYTA1MywgMHgzNzcyYWZiMiwgMHhlMmJlZGE0MywKLQkweDNmOTQzOGYzLCAweDRjNTQ1NmIzLCAweGNhYjM3NmMyLCAweGZjOGZkZDk2LCAweDNkNzQ0NmY5LCAweDQ0MTA2OWNiLAotCTB4MzViNmUxY2MsIDB4ZDcxMWJlYzEsIDB4ZDVjYTdmZDksIDB4MDNjYmU0N2MsIDB4Y2ZjZjlkY2IsIDB4MDk4M2YyODcsCi0JMHhjZjg4Njc4ZSwgMHgxMTJiZGJlOCwgMHg3ZDZmOTUxZSwgMHg3M2ZhODcxMSwgMHg3YjJiZjM3NywgMHg2ZGZkMjE1YSwKLQkweGZhNzllMzg4LCAweGY4ZGVlMmJlLCAweGIwOTlkOGQ1LCAweGIwYjUyYWJmLCAweGI3M2Y4MDVmLCAweGM0NWUzYTI3LAotCTB4YmNlMzU1ZWYsIDB4YTJlZWQ4MjksIDB4ZTExZjJkYWUsIDB4OWFkZDk2YzYsIDB4YTVhMTdkZGUsIDB4NzY4NDlmN2UsCi0JMHgyNTRiNTA2MCwgMHgwYjNiYjJhNSwgMHg3OTI5ZDFlNywgMHg4NDQ0YTU0MywgMHhiMDBiZTgyMywgMHg2ZjE2OGJlZSwKLQkweGI5ZTIxODY4LCAweGI3Y2JjM2QwLCAweDUzNDdkN2FiLCAweDA3N2UxNDhiLCAweDkxZWU1NzY4LCAweGIzZDIyNmVkLAotCTB4NmY5YzdhZGQsIDB4Mjg3MmZkNjAsIDB4NThiNzdhYTcsIDB4YmMzY2M2NWUsIDB4YTllOWFjM2MsIDB4N2I3ZWY4YmIsCi0JMHgxNzlmYjBiZCwgMHhjNTZmMjQ3NiwgMHhmN2I0YmVmZCwgMHgzYjdmMTQ5NSwgMHg3ZWJkMzAzOCwgMHgxN2ZkN2NiZSwKLQkweDhlMDBiZjExLCAweDg3NDRhMTE3LCAweDUwNjBkNWY4LCAweDNiNWQ3ZmQ5LCAweGQ1Zjg1NDYyLCAweGJkZDUyM2I1LAotCTB4NzYyZjhmZGUsIDB4NmNjMWJlMDksIDB4ODhjOWRjOWUsIDB4MmU0Zjc2ZjcsIDB4OWYwYTU1ZWEsIDB4MTY0ZjQ2NjAsCi0JMHg5ZTY5NmZkOSwgMHgxNDU3YjQyYywgMHgzZDBhYzMzZSwgMHhmNmVlNTQyOSwgMHg3ZGZkNjBhNCwgMHg3ZDlhY2Y2OCwKLQkweDhhZWQ5NmUzLCAweGZkY2Y1ZGFkLCAweDM2NGQyZThlLCAweGM1NmU4N2U2LCAweGNkZWZkMmJjLCAweDU5YmE5N2Q2LAotCTB4YmJhN2NhYWYsIDB4MDlkM2Y5ZDUsIDB4NzNiNjlmZGMsIDB4ODNiMTVlYTcsIDB4MzA0NzYxNjUsIDB4NTY4ZmIyYWIsCi0JMHg1YzExYWZhZSwgMHhlMDU3YWFmZSwgMHgyZTZjNjhmMiwgMHhhZmUwMGRmYSwgMHhlNzM3OWEwNCwgMHhkZGI5M2JlMywKLQkweDIzYjg2ZmJjLCAweDYyYTlmOTE2LCAweDgzMGJlZjlmLCAweDUxY2EwNjdjLCAweGFmMjU2ZjNlLCAweGRlNzAyMWMwLAotCTB4MjBiYWZlMmIsIDB4OTY3YmZkMTYsIDB4NGU1MDhkNDQsIDB4M2Y4ODUxNmMsIDB4MmY5YzRkMmIsIDB4YmU4MWQ0YWQsCi0JMHg0OTc2ODE5YSwgMHg1YWQzYzhjOSwgMHhkMTZjNTdiNCwgMHgxYzFmNWFjNSwgMHg2ZTFlNmMxNiwgMHhiODVkM2E0NCwKLQkweDFmZDFiODY1LCAweDFmNmU1NjFmLCAweGYzMGFkODc5LCAweDZiNWRiOGJjLCAweGQ0YWYyOWMzLCAweDdkNDI5ZmJhLAotCTB4ZDk3NmU1NmMsIDB4ZGRmNDYyZTMsIDB4MTdmYTg3NjgsIDB4NjI4ZjA3Y2QsIDB4Yjg1YjA1YmQsIDB4YmY2OTQyOWYsCi0JMHg3NDRlNzM3MCwgMHg4NzNjZGZiMSwgMHgzM2MzNTc2ZSwgMHgwZmNlYTNkMywgMHgwN2U3NTI2YiwgMHhmMzkxYWVhMiwKLQkweGRjMzc2ZjNmLCAweDNjOGZjZWFiLCAweGZkOWZjZWFjLCAweDEwZDNhM2NiLCAweGQ3NjQ0YWVkLCAweDg3ZWEzMjUzLAotCTB4NDYxZmU3OWYsIDB4ZGY2ZTcxYjksIDB4ZGZlNGExMWIsIDB4MTViOGEyZjksIDB4OWI4NWRlZjUsIDB4N2Q4NjcwZDUsCi0JMHg3MDFmNTA5MywgMHgyZTQ4OTM2ZCwgMHhlOTAzYmE5NiwgMHg2NWJhNmZhMywgMHhkN2UyYjk2YywgMHg5M2M3ZjM0YiwKLQkweGQ1NmFlNjMyLCAweGJmNWY1ZmM2LCAweGQ5YTY3OTkzLCAweDc0YjQ4ZmQxLCAweDIzZDNjOGYxLCAweGUxZGVmZDdkLAotCTB4N2I0N2E0ZDksIDB4MWJkYzcwMjcsIDB4ZGIzMzI5ZDEsIDB4MTY1ZjY4YWQsIDB4ZWVkZmUyOGQsIDB4N2Q5NjNhNWMsCi0JMHg2ZDg4MjIwNSwgMHhmODhmOTYzOCwgMHg0NDg0ZjQ1NywgMHhmNWU4YjZmMiwgMHgyZjkxNzdkNCwgMHgzMTk5ZWM3NywKLQkweDA1NjlkMjgxLCAweGNmYzUwZjA0LCAweGYyNDViMGIyLCAweDMyZGU0MDg2LCAweGZjZWRlMzhhLCAweGMxOWI5MmNkLAotCTB4MzJhZWU3YmMsIDB4YzU0MWZjYTgsIDB4NThmM2Q0MWIsIDB4YmVmZWEzNTAsIDB4ZGZjMGU5YjAsIDB4YzRiZmU4MjUsCi0JMHhlNTFlOTJmOCwgMHg0MzE2Yzk1NiwgMHhmZGNiMWY4MCwgMHg2NWUxZWEwZSwgMHhkOWQ5MThlNywgMHgxODNmNzU2NSwKLQkweGNkNzNmMmZhLCAweGJhZTFkNjU3LCAweGI4ZmFlMTliLCAweDA3ZDNlNzhhLCAweGY4MDY2MzRmLCAweDg1N2VmZWY4LAotCTB4ZmVhMTEyMzMsIDB4MzJiNTM1OWQsIDB4Mzk4MmFkYzIsIDB4OTIyNGIzMWUsIDB4ODYwZGU5OWQsIDB4N2QwMDJjNzksCi0JMHg5MDY5ZjUwOSwgMHgyYmFlYjRiNywgMHgwZGI5ZmI5YiwgMHg0Y2NlNTRmMSwgMHhiNTg1N2U1MCwgMHhiZTFjYTJlNSwKLQkweGUzNjIxOGQyLCAweDVjYjZiMGZlLCAweDQyMTdlNDBiLCAweGMyNTZlMTFlLCAweDljN2MxMjM2LCAweDhlNjU3ZmM4LAotCTB4ZjliZjc2MmYsIDB4ZTdmOTNlZTIsIDB4OGZhZTQ2ZDksIDB4MDNkZWI1M2IsIDB4ZDY3Mjg3MDgsIDB4ZmY3MGVkNGUsCi0JMHg2MTM5ZWJmYywgMHg1MWMzMjc1ZCwgMHhjZjY4MDhkZiwgMHhhZjBmZTQ2YywgMHhkZjY5ZWIzMiwgMHgzMDdlOWFhYSwKLQkweGVjNTc3ZmY4LCAweDUxMmVjNTAwLCAweDU5ZmY2ZGZjLCAweGUyMTA3MGY2LCAweGZlYzk2YWY1LCAweGQ0YzY1MWJjLAotCTB4ZjExNWE3YmQsIDB4NzI0Y2Q0YjgsIDB4Y2U1YWUxZmUsIDB4ZDlkMDZiY2YsIDB4NmNkN2ZkMDIsIDB4ZjM3ZDI3NGEsCi0JMHg4MjllYzk2MSwgMHg0YzliNjVlYiwgMHgxZTgxMDc2NCwgMHhkYjNhYmYxOCwgMHgzZTgxZDdhNywgMHg5ZmExMzJlOCwKLQkweGJkYzgzNGI4LCAweGU3MGZiZjE1LCAweDhjY2Q3OWY2LCAweGRlMTdkMjE0LCAweGU0NWUzYzkyLCAweDM4NjdhZWMzLAotCTB4ZTY0Y2Q0YmQsIDB4NjRmMzUzZjgsIDB4MGNmZjdkMGMsIDB4ZmE4MzFhYTcsIDB4NmE0YmQ3MjIsIDB4M2Q3MmE1MzYsCi0JMHg2MGYzZTY1NiwgMHhmZTIxMGJiZiwgMHhlNjJmMTM1OCwgMHhmMzRhYzAzNSwgMHhjOWY1ZjQ1MiwgMHg4OTczYzcxNiwKLQkweDVlMmNlYjdlLCAweGY0MjQ3YTAxLCAweDk5NWJmYzVmLCAweDk1ODI5ZmExLCAweDNjOTJkYzQ0LCAweGFhNzIxN2FmLAotCTB4OGRjOTkzNjcsIDB4NTJkM2VlZmUsIDB4M2Y5ZTJiNjEsIDB4MTNkZmIzNWMsIDB4MWRjZmRmMzksIDB4ZWEyNmRmNmIsCi0JMHg1OGJjNWY5MSwgMHg0ZmZkNzkzMywgMHgzNTY3YmM3MSwgMHg3ZWYxOTVkNiwgMHg1M2RiYjdmMCwgMHhiZDNmY2Y1MCwKLQkweGY3MDIzNGM5LCAweGNlNzBkNGU5LCAweDcyYzc3M2I3LCAweDI1ZDgwMWJmLCAweGVlOTBhZGY2LCAweGZjYThkNDQ5LAotCTB4YjkxMjdiYWIsIDB4ZDEzZmIwOWQsIDB4M2NlOWU5NGEsIDB4YzkwYzQ3ZWUsIDB4MGNmZjI0MmUsIDB4ZjFmMTE1ZWMsCi0JMHgxN2VjNzVjMCwgMHg4NWY1OGFlZCwgMHhjN2QyN2U0NywgMHhiMGY4MTQ3YywgMHg0ZTdmN2M3MSwgMHg1YzkxMjIzZiwKLQkweDU4YTRmNTg0LCAweDdiZmI5ZjIwLCAweDRlNzVmOTEzLCAweGVjYTJmOTBiLCAweDBlNTFlMDBiLCAweGJmYzE1YmM5LAotCTB4NDlmYzQ1OWUsIDB4MjdmMDE0YzQsIDB4NTFmYzJmYmIsIDB4NjBjM2M3ZTMsIDB4N2YxMDk4ZWYsIDB4MWY2ODNmMDAsCi0JMHgzMjdhZmMxNSwgMHhmMDExZjY5MywgMHhlN2ExZjA4NywgMHhmMDBkZDM0OSwgMHgyODVmNmQ0NywgMHhlNWE5YWRlYiwKLQkweDVkYTA0N2Y2LCAweDMyNzBmODAxLCAweGEwYmNlZmQxLCAweDA0MjdhYzI2LCAweDNjMTRiN2NmLCAweDhlNzc1YTYwLAotCTB4MjA1YTM5ZmYsIDB4ZTZjOWU0MWUsIDB4NGJlZmU0MzQsIDB4ZWExYjIwYTQsIDB4N2Y4NDRiZGQsIDB4NDY3Y2M5N2IsCi0JMHg4YjY1OGRmMywgMHg2OGQ3YTQyNCwgMHgwZWM4OTVlNiwgMHhlYzI2NmQ2NiwgMHgwMDNkMjdlZiwgMHhmYzNhM2Y3MywKLQkweGYzMjM1NWU5LCAweDU4NjM3Yjk3LCAweDhmN2YyYTk4LCAweDNmNTU0NjMxLCAweGZhYWYxMmNmLCAweGJhNzQ2ZjdlLAotCTB4ZWI3OGZiZWEsIDB4NjI3ZTU1NzAsIDB4ZmFhYTFkZGEsIDB4YThjNmQ5ZjcsIDB4MzUxYjNmZjIsIDB4YjI3ZjU1NWUsCi0JMHg2ZjJhYjI3ZCwgMHhjZTJkMTY2NywgMHg2MGJhYTViZiwgMHg2ZjFmZGEyNCwgMHg1ZTkyMTc1NywgMHhkMTk3MDgxMCwKLQkweDViYWY4Mzg2LCAweGVhNDYyMDZkLCAweDAwYjQ1M2I0LCAweDBlZmRkMWJmLCAweDdjODc4OTJlLCAweDE0ZDMzYWZmLAotCTB4ZThjN2UwMmQsIDB4ZTI1NzgzZDgsIDB4ZDVhMjYwMmQsIDB4NDNlZmYxMDUsIDB4ODA0OTVlMGYsIDB4MzA1ZDc0N2MsCi0JMHhjOGM1ZGZjZiwgMHg2NzU4MWYxZSwgMHg5MzMyZTI5ZSwgMHgwOTM2MzBiZiwgMHhlYWVkM2NlMCwgMHhmNjY4NDNhMiwKLQkweGNhN2NiMjdkLCAweDc1YTQ3OGZjLCAweDNmZjMzMjY3LCAweDc1NjZkOGI3LCAweGU1M2Q2MTg0LCAweDU0N2Y1MmJiLAotCTB4ZWZiNTIxNTIsIDB4ZmNmOWNjYmUsIDB4MzkzZmI4MjcsIDB4NzYwYTdhZmYsIDB4YjE4ZmM5MTcsIDB4YWM2YzM0MWMsCi0JMHg1YmU3NGNkMSwgMHg3OGJiYThjYywgMHg3YzBjYWZjZCwgMHg4NjMzYjI1MywgMHg2YTk2YjlmZSwgMHhjMjJkNjdkOCwKLQkweGI3YTk0OGNiLCAweGMxZTk0MmRhLCAweGRmNGE2OGVhLCAweDYyYjJiNmFkLCAweDc1NmI2NzgwLCAweGFiODdhNTFhLAotCTB4YTQ3ZTU0NmQsIDB4MWZhNTE0N2EsIDB4M2QyOWRiNTYsIDB4Njk0MDVkNWEsIDB4YTUyMTc1NWIsIDB4YjM0ZjI4MTIsCi0JMHhiMzZjNmY5MCwgMHgzYzIxZDVhZCwgMHgzM2IwZGE1YywgMHhkOWZlM2UzMCwgMHhlMWYyZGYxNywgMHg1MTlkOTZhZCwKLQkweGZmMmExNWY2LCAweDRkY2Y2NGNhLCAweGIyMGQ3NWEyLCAweDk0NWI5ZjkwLCAweGE5ZmZkYTFmLCAweGU4ZDFmOTE1LAotCTB4ZjVlMTIzNmMsIDB4ZDU5YjczNjgsIDB4NDhmM2NkOTgsIDB4OTk5Nzc1NjcsIDB4ZWJjYTEzNTcsIDB4ZjVlYmZkNjksCi0JMHhmZTQ3MGNmNywgMHhhNjY5ZGEzMCwgMHg1MGJkNDk3YSwgMHhiZGViMGIyZiwgMHhmMmM1YTMxNywgMHhjYTFiN2E0NSwKLQkweDNmMDRlN2NiLCAweDkwMWNkMTBlLCAweDVlOTA5YzcxLCAweGM4MzQzNjdlLCAweDE0NGVmOWMwLCAweDVkZjg1ZmE4LAotCTB4ZjVkNWEzZjEsIDB4ODcwNmYxZjIsIDB4OWRmM2EyMmYsIDB4YzRjZGIzYzEsIDB4MTViOTE0N2YsIDB4YzE4ZGUxMWIsCi0JMHhkMTJlYzVmOSwgMHhlNjg4Nzk1MywgMHgyZWZkMTViOCwgMHgwOWRlZDU1ZCwgMHg4NGUzYWY4OCwgMHg2N2E3MWY5YywKLQkweGE2MGYzODY5LCAweDk0ZjkyMjA5LCAweDFhZGY3ZjI3LCAweGNkYzVmOTBiLCAweDM5OGM3MGQyLCAweGRjMjg2NzE4LAotCTB4OTZhMWY2NDIsIDB4NmZlYjMxZDMsIDB4YjZiOGZhZTIsIDB4YTgxNWY0YWQsIDB4ZDYzMjNjNzcsIDB4MTVhMTFlYjYsCi0JMHg4MTI1OGZiZCwgMHg1NTU3OTU5ZSwgMHhmMjcyODE5MCwgMHhmNDQ4ZGIzOCwgMHgzMWQ0M2YzZCwgMHg2YTZkZjEwZiwKLQkweDQ2YmRkMDA2LCAweDEzZjQwOTIwLCAweGZjNGMxMDVkLCAweDZhN2Y3YmIzLCAweDUzY2RlYTBlLCAweDBjYmRkNjBjLAotCTB4MjkyY2EyZTgsIDB4NGE3ZWYwODcsIDB4NjQ4ZTZiM2YsIDB4NDQ1ZGZjYzEsIDB4YWNhMjUzMjcsIDB4OWUxYjI1N2IsCi0JMHgxOTRjZTQ5ZSwgMHg3MWJmYzc3NywgMHhkMjQ5M2QyZSwgMHg3Y2E5YzdmYSwgMHhjMzFlMzkyMiwgMHg1YzE0NTVmOSwKLQkweGY1ZjlmM2QyLCAweGViZjg5ZTkwLCAweGIzZjEyYjI0LCAweGM5MTkwNzAxLCAweDIxZjE5ZWRmLCAweDdmZDE1ZmM0LAotCTB4NjFmOTE4YjUsIDB4ZWIwNzM1ODYsIDB4NDI3YWU5YzUsIDB4ZmJhMGVlMzEsIDB4NWRjNTJkN2IsIDB4MDdkMGNkNDAsCi0JMHgyZjFlZmNmYywgMHg4Yzc4ZjBiNSwgMHg5YTFiYmM0MCwgMHg1NTRkZTVjYywgMHhhYTAzOGYxMiwgMHgyOTFhMzY4YywKLQkweGNmOWNiOTZkLCAweDMwYTI0ZTI4LCAweGQwMzZlZDA5LCAweDU3OTRmYjFlLCAweGRjYjk5MzgzLCAweGU3YTM1ZjhiLAotCTB4NDk2NDNhZmUsIDB4MTA3YjY1MzAsIDB4OGMyZWYyNTMsIDB4MmM3ZGE5MDcsIDB4ZWNlZTUxNDgsIDB4YzdhNjRlMDAsCi0JMHhlODdmOTQ3NiwgMHg1NDkyZTNmNywgMHhkZjU4ZWRmNSwgMHgxMWQ5OWRmNywgMHg5ZGZiNGE5YywgMHhiZjdlOTM3NSwKLQkweDQzYzYyYjRhLCAweGRjYzA1OTdjLCAweDdlNDA4NGI4LCAweGI4NzI0NWZlLCAweGZiNDExZTcyLCAweDEzN2Y2MmZjLAotCTB4MzI0OTkzZDksIDB4NzFlMDM3ZTAsIDB4ZmM4N2IwNmMsIDB4OGUyNjc1N2YsIDB4OWUxYTQ5ZWYsIDB4NzdmODY5ZDYsCi0JMHg5M2U4MTA3ZCwgMHg3OTBjMWY5MCwgMHgzZWZhNzczYywgMHgxZTQ5ZTFkOSwgMHgwNTk5ZWQ0MCwgMHhhODdiY2JkYiwKLQkweGQwZjMwYzdkLCAweDI4ZjdjYTc4LCAweDlkNDM1ZWY0LCAweDMwNGYyMDQxLCAweGZhNmIyZDFkLCAweGU0OThkYjg0LAotCTB4N2QyMTFmMzEsIDB4ZjkxZjAxNzcsIDB4Nzc1ZjhmZGEsIDB4ZjUyZTg3MDUsIDB4NmM0YWE3ZGYsIDB4Mzc2ZmY2NmYsCi0JMHhlZDI5ZGE5NiwgMHhkODZhOTYyYiwgMHhmZmM0MTFkNywgMHg5MjJhNWYwOCwgMHhiNzM3NzYzNCwgMHg1MDk1ZGYzNywKLQkweDdhNmQ2MDRmLCAweGJiNGE2Yjk0LCAweGJlZWZjMDEzLCAweDA1ZmY3ODA2LCAweDI3YTYxZmY4LCAweGY4ZTFlZjgxLAotCTB4YzNkZjAxOWYsIDB4ZjdjMDZmZjQsIDB4ZjAxNGZjYjAsIDB4ODFkYjRjM2QsIDB4OTdmOTYxZWYsIDB4OWQzMGY3YzAsCi0JMHgxYjI0MzMzNiwgMHg2OWFhYTRlOSwgMHg4NTVhZmIwYywgMHhmZjg3M2FmNywgMHgzMTg5ZGRmOSwgMHhkOWNiZTM3ZCwKLQkweDllZDc2ZTI0LCAweGZiZmJlZjg4LCAweDdjNzEyNzdmLCAweGRmMzc3MTNhLCAweGQ3OTA2ZWI3LCAweGZlMDE5ZmE4LAotCTB4ZGY4NGIyYWQsIDB4ODc3NzZlNTgsIDB4ZWY5ZTczZjAsIDB4ZDc3ZWI4ZDIsIDB4NWZmM2MzMWQsIDB4M2ZhOGU5MjYsCi0JMHhjNjZkODZiYiwgMHhlOWE1ZGZmNiwgMHhlNjQ5ZWYyOSwgMHhmODViYTM3MiwgMHhhOGZmMDEyZiwgMHhjMzFlNjU3ZiwKLQkweDdhYWE0YTg2LCAweDgxNGQyNGVlLCAweGRlZjk4ZmJiLCAweDIzYzdjYzlkLCAweDFjM2Q0NGZjLCAweDBmZGUzMWYxLAotCTB4ODRhZDJiM2YsIDB4ZjE3ODgxOWYsIDB4MjQ5YmEwODUsIDB4NThiYmM3MDMsIDB4MjdjOGYxZTQsIDB4YmU3NDRjYTMsCi0JMHhlM2I1ZjMwYSwgMHhjNDlkNzQ3OSwgMHhmYzNhZjFmMSwgMHhlNzdiNzBkNCwgMHg3ZTg0ZmMzYSwgMHhlNzgwNGUwOCwKLQkweDA5M2ZhNDEyLCAweDM1MjUxZmMwLCAweDQ1Yjc3OTg4LCAweGUwODJmYzg2LCAweGEwYjNhMmRjLCAweDMyMjdlZmZmLAotCTB4NmJkYjE2MDAsIDB4ODRjZThmN2EsIDB4MTBjOGQ4ZjIsIDB4ZTQxZDllMmIsIDB4ZDQ1ZTZlM2QsIDB4ZWJiOGZmMTcsCi0JMHgzNWZmNWRkZiwgMHhmZmFmNTQ3YSwgMHg3MzhiNzViYSwgMHgzNzVkNWI5MywgMHg5N2U0MTNmMSwgMHhmMDdkM2Y4OCwKLQkweDFmYzgyMTg3LCAweDMzZjg3YzcyLCAweDg0OWVkOTI2LCAweDI2NGI3NGZkLCAweGJiODFmYTJkLCAweDAyMmYxYzRkLAotCTB4MWE1ZGZiZDcsIDB4M2YwNTVmYzcsIDB4MThmYzQwYmUsIDB4YmFjM2ZkODAsIDB4YjllYjdkMTIsIDB4ODBhMGZmMzYsCi0JMHgxNDY0MmRmNSwgMHg4ZmI4MTEwZiwgMHg1YmYxNWYwYSwgMHgzOWM5MWRkNywgMHgyNjAxYjgzZSwgMHgwNDFlZmM5MiwKLQkweDcxZmQxYmYyLCAweGM3MGI2NDllLCAweDY3NjcwMWYzLCAweDgxZjk0MjZmLCAweGZmZWEwMjcyLCAweGZhZmRjMzQxLAotCTB4NTZiZWRmMGEsIDB4MjY3M2M5MmUsIDB4MzlmOGE4NjcsIDB4NjdiMDdiNDMsIDB4Y2JlODgxYmYsIDB4YWYyNTYxYWIsCi0JMHg0MzgyNWRhMSwgMHg4ZjU5ZDlmOSwgMHhmNmY1ZjMyNSwgMHhhMGQ2NGY0ZSwgMHg5ZGY1ZDRkZSwgMHgyN2YxNDVkOSwKLQkweGExNGU3YjAzLCAweDU5YjVkNjdkLCAweDZkM2RiOGM3LCAweDNjODEyNDlmLCAweDA1N2U4ZjliLCAweDhkYzVmYTJiLAotCTB4YTE3YjZlNzQsIDB4ZDQzZDk5MWEsIDB4ODUzZTVjZjMsIDB4ZjNkNTYxNzYsIDB4ZTgwMjMzMzIsIDB4OWRiZmU3ZTQsCi0JMHg2MGIyZjg4NiwgMHg3YTgyY2ViZiwgMHg0ZmNkY2FjNywgMHgzYjdjNDYxZiwgMHg1MTU5MjhkMywgMHhjMjM1NzdkZSwKLQkweDQ1N2VhMWIyLCAweDA0ZGI4ODRkLCAweDhmMjFmM2Y1LCAweGY1OWExN2Y1LCAweDhmMWYyYjZlLCAweDE4YTc0Y2Y0LAotCTB4NjU1MzZiZWYsIDB4ZWZhNWZhMDIsIDB4NzA0NzVlNzksIDB4Yzc4M2IwNWUsIDB4NzliM2JjMzEsIDB4OWY2MzlkMDksCi0JMHgwYTJjNGI3MSwgMHhjYmNiZTVkYSwgMHg5ZmQwNjM1YSwgMHgzMzY0YTJmOCwgMHgzOWE3M2I0MCwgMHhlZmRhM2NmZiwKLQkweGNkOTgzYjY1LCAweDNkOGFmZThiLCAweGIyYmU3NDIxLCAweDdmMWQ0NmEwLCAweGE0ZGVlMjUwLCAweDY0YTI3ZDQ3LAotCTB4YWNiY2JhOGIsIDB4OWQ4NzlkNGUsIDB4NmNlYjdlMjEsIDB4M2MzM2M3NTAsIDB4MTVlMjJjOTIsIDB4ZjI3MGQ5ZDIsCi0JMHg5Mzg0ZDYzMywgMHhkM2YwYTAxZSwgMHhmNjMxZDkxYiwgMHgzMjRmOWNjNSwgMHhmYTI0NGRmNiwgMHhkZmZkZTU0OSwKLQkweGU2Njk3ZGM2LCAweGRmMjJjOWY5LCAweGRmNGJmOTAxLCAweGUwNTE3ZGYyLCAweGJmOWNhOTUyLCAweDRmNmNiMGM3LAotCTB4OTlkZmM2MzYsIDB4NTVjNzY4MmMsIDB4Y2ExNTdmMzYsIDB4YTgyY2VlMzAsIDB4Y2ZhMjdlZmQsIDB4NTM4YTY1MzcsCi0JMHhiYjI0ZDc1YSwgMHgyZDE1YmUxMCwgMHgzZTMxOTdhNiwgMHgzMWVmNzJhZiwgMHhlMTA0MzViZCwgMHgwMWU5MDhmZSwKLQkweDFhZDczMmY3LCAweDFhYmNiZmI0LCAweDNjMjM2YjBkLCAweDE1ZmYyMzZhLCAweDIwMmNmN2IzLCAweGM5YjM3MGJmLAotCTB4NmYzZGU3NDIsIDB4MTMzYWRhN2UsIDB4NjYyNTdiZjMsIDB4ZGMxYzdkYzIsIDB4ZTBiMjc4NGUsIDB4NzVjZTk5NzksCi0JMHhiOTNlNmExOSwgMHg3MTkxM2MzZSwgMHgzZDlmNzE1ZiwgMHgxNmJmNjhmZCwgMHgzZWUzYmVlMiwgMHgzZWUzYmVjMywKLQkweGQ4OWZiOGNiLCAweGU2ZWY0NDNlLCAweGNjZWRjMjc4LCAweGZlZjlkYjMzLCAweDJmOWVmYjJhLCAweGRmOTNkMDZmLAotCTB4ZjNlZjk2YjgsIDB4M2ZkN2NmM2QsIDB4YTA3ODQ0MWIsIDB4NjgwZjAyNjMsIDB4ZTE2Y2NmZGYsIDB4YmZkZmFlZmIsCi0JMHhmMTEwM2Y1YSwgMHgwZjAwMzZiNywgMHhmMGQ3MGQ5YSwgMHgxZDc3ZTcwMCwgMHg3ZmVjMDQxZSwgMHgwN2NiZjBhOSwKLQkweGZlZTA0MWUyLCAweDQ0ZjgyYmRmLCAweDEwZmEzYzllLCAweGZlMmNkOWM2LCAweGYxNTcxZjA1LCAweGVmMGVjZDczLAotCTB4YWEwNDc4YWMsIDB4MTFmZjFhOWMsIDB4MzkyY2RkOWEsIDB4MDQ5NjM1ZmEsIDB4YjQyMWJkNzIsIDB4YzBmOTA5YjAsCi0JMHg4NmJiMDlmMSwgMHhmYzA5OWM1MywgMHg5YzUyNDYzMywgMHhkZGVmYzExYiwgMHgwNTNkZmQ1ZiwgMHg3ZTNiYmZlOSwKLQkweGUyMzc5NmYyLCAweDcwM2FmZjY5LCAweGMxNjFkZDFkLCAweDk2ZWU3ZTVjLCAweDFiOTUxMmRjLCAweDUzODAwNmJjLAotCTB4YTQ1MWYwMWUsIDB4ODFiNmY2NDMsIDB4MDdiYTkxY2UsIDB4MzFlOGY0M2MsIDB4NjkzZjc3YzgsIDB4NDhmNmUxYjYsCi0JMHg5NTFmNmU3NiwgMHgxMjc3YmNiNywgMHgzMWFjODZmZCwgMHg5ZmIyYWVjZiwgMHg4ZTUzN2Q4NCwgMHg2ZjdlMTVmNiwKLQkweGVmY2FmYjAwLCAweDdjYjI0ZTNjLCAweDRmM2VlZDQ0LCAweGNhZjVhMDRlLCAweGIyNjZkYjFhLCAweDk1OThlYTgzLAotCTB4ZTNhZjYzY2UsIDB4YmRmODhjZjcsIDB4YTFiYTA3ZTIsIDB4ZjdjMDE2M2UsIDB4ZWI5ZWZjN2QsIDB4MjgzNWNjNjEsCi0JMHhiMTRiZTkwYywgMHhiNDdlMTRiMywgMHgwZjRiZjg1MCwgMHgxYjQ0NzYzZCwgMHgwM2FjZWI4MSwgMHhiNWJlZTNiOCwKLQkweDhmZWExZjAwLCAweGRiOWQzZDdlLCAweDhkZDFmOTJhLCAweGYxMTY3ZmE4LCAweGNlNzhlMDBhLCAweDQ2OWY2OGI1LAotCTB4ZDMzMmZjNDYsIDB4MGYwMjlkN2MsIDB4NjA1ZjExMmIsIDB4MDdkOTY1OWQsIDB4Nzc1ZjUxNDIsIDB4NmNlMWZlMGEsCi0JMHg0OTdmMjEwZSwgMHg4Zjk4ZGIxOSwgMHhlMzA2NTVmOCwgMHg5YmMwZmI3OSwgMHg0ODdiZWRiMiwgMHhkZTE5YmZjZiwKLQkweDY1NWJmYTI4LCAweDNmZGViYWEzLCAweDI1MGM5ZjkwLCAweDAzZjk5MjdlLCAweGZjNjlkZmUwLCAweDM3YzdjNzNiLAotCTB4N2U4Y2U0ZjIsIDB4Y2JkYzA3MTgsIDB4NmU5MGZkYWMsIDB4NTJkNzI0NmYsIDB4ZmIyOTAzMzcsIDB4MzZlZTliZjUsCi0JMHhjZmNhYWQzMiwgMHgzM2U1NTE2ZiwgMHhmYWFhZDEzZCwgMHhhYWFjOWFjMywgMHg2OWJkYzNlZiwgMHgwZjIzZWZhYSwKLQkweDljZjk1NGRiLCAweGZhYWE1MWI2LCAweGFiYjQ5ZmI3LCAweDE3YjQ3N2YyLCAweDc1ZGZlYWE4LCAweGVmOTU1MGFlLAotCTB4ZmNmNTgwY2QsIDB4YmRkNzM5YzgsIDB4ZmVhYTkyZDEsIDB4ZDU0OWFiNzgsIDB4MDQyYTY4M2YsIDB4NjE2OTg5OWYsCi0JMHgzMzVlZjJhYSwgMHhmYThkZDM4NywgMHhlZWE2Y2ZiZCwgMHg3ZjZmYjE1NywgMHhmZmRkNGEzNiwgMHhkZmJhYmI2NCwKLQkweDZkODdkZDViLCAweGEwYjUyNzIwLCAweGI5MDc2ZjZmLCAweGQwNGVlOTg5LCAweDZmYTBiNWNiLCAweDhlNWU4MDM3LAotCTB4MmY0MTU3ZjksIDB4N2EwM2Q0YzcsIDB4MDZiZjk2MzksIDB4MWJlNjM5N2EsIDB4ZmNjNzJmNDEsIDB4MzAyM2IwM2UsCi0JMHg0MDVkNTRkZiwgMHg4NWQ1OWJlOSwgMHg3ODMzN2U1NCwgMHgwZjcxOGFiNSwgMHg4ODhmNzE4YiwgMHhjNGRiMTk3MSwKLQkweGUwNGRmZWU1LCAweDdmNjhhMWYyLCAweGMzNmZiNDU0LCAweDNjM2U0OWY2LCAweGQ2NDgyOGFjLCAweDFkM2EwNTVjLAotCTB4OGY1ZTdlMTMsIDB4YzVmNjVhZTcsIDB4ZDc2OGY5ZWQsIDB4YjMyZmJjZjcsIDB4Y2MyNzQwYWQsIDB4ZGQ1YzNlZTEsCi0JMHgwNDUyZTUxZiwgMHhlYzJmYWYzZiwgMHgwZWZkMDBmOSwgMHgyZDEzN2I5NSwgMHhhZWIwNmU3OCwgMHhmOGEzZTNlOSwKLQkweGI2NTFhYmJkLCAweDZjMWRkZDIyLCAweGZiMTQyYWZhLCAweDE0MTU3OGI5LCAweDllNDI5MWJjLCAweDc3ZjlkZTQxLAotCTB4ZjBmNWY5NDYsIDB4YzdkNWUzMWQsIDB4OTY0NTAxZWYsIDB4ZTQ4Nzk0ZTQsIDB4MjUyNGM1ZDQsIDB4MGU3YmE2ZWYsCi0JMHhmNDdiMGQ4NSwgMHhiNmZlNzRlZCwgMHhlZmJmYmU4NywgMHg2ZmJmYTlkMSwgMHhiNzdkNTVhZiwgMHhmNzNjN2Q2MCwKLQkweGNlYzliYWQ1LCAweGY0YTRkMGJlLCAweGNlZmFhNWU3LCAweGZhOGVjOTI0LCAweGVmZWQ4NWYxLCAweGI3MzhjMWFjLAotCTB4MTE0NTNkOGEsIDB4ZGU1NjdlNzgsIDB4ZGU3MjJjNzAsIDB4ZDJmZmMwOGYsIDB4YzgxOTVkYmUsIDB4YTE5YTJiZDcsCi0JMHhiZmFmYjMzZiwgMHhjODlkNjY4YSwgMHg5MzNiZjlmMywgMHgyMzg3ZTRmNiwgMHgxODkwNmVkZiwgMHg2YzhiOTI4YSwKLQkweDk1MGRjNTIzLCAweDkxM2JkNTM3LCAweGNkYTc5NTJmLCAweDRlMzllMWQ0LCAweGY2MTY0N2I3LCAweDczYzM4ZjNmLAotCTB4YzdkNzE4NWEsIDB4ZTc0MjU3M2MsIDB4ZjI3ZmJmNDEsIDB4ZTMxZmJhMWMsIDB4ZGU1YmJhNjksIDB4YmI3MWM1MDksCi0JMHhkZjg2OWVmMSwgMHhjMjkxM2VmZSwgMHg1MjI3ZGFmNSwgMHg4Yjg3YmRmOCwgMHg2Mjg0ZWY4ZCwgMHhjZjNhYzVmYywKLQkweDVhZWUxYzNiLCAweGEwZmZhZDJmLCAweDRhNDM3N2M4LCAweDY5OTI2ZWYwLCAweDM1NTdhNWZkLCAweDdmNGEwZmI0LAotCTB4ZDRjOGE2Y2YsIDB4ZTRhNmY4Y2YsIDB4NzFkNzVjMTAsIDB4OGRjZjFmMGYsIDB4Y2UzMDA1YzEsIDB4NjJhMmE0ZjgsCi0JMHhlODkxZmY5YywgMHhlOTMyMzkxOSwgMHhkYzZmZGM3NSwgMHgzZDYyNjQzZCwgMHg4ZTc4MTNlYSwgMHhmNWRkOTdkZSwKLQkweDU1YjdlODlhLCAweDlmYmRmN2M0LCAweGYyMmI3YWY0LCAweDExMDUyM2RiLCAweDg4MDY0OWMzLCAweGI4NTMzYjdhLAotCTB4NzdhZjkxOWQsIDB4Mzg5Y2ExMjQsIDB4MWY5MmI2NmUsIDB4NjI0MTQ1NzksIDB4NDFlZmVlMDgsIDB4ZTBiY2IxNGMsCi0JMHg5N2NiZjI2NSwgMHg4ZWYxZjIzNSwgMHgxMTQyZGE1YiwgMHg4ZTM3OGVlZiwgMHg1MTZmNTE5NCwgMHg3MWMzYWJmYSwKLQkweDZmYWNmOGZkLCAweDRmYjQ1Y2RmLCAweDMzNWFlZTI1LCAweDNmZGJlM2Y2LCAweGIxNGVlZTVlLCAweGVlMjNiYjUwLAotCTB4M2Y1MGQzNjMsIDB4NGMxNjllM2EsIDB4OWVhYjQ1ZmEsIDB4Mzc5NzdiOWYsIDB4NzhmNmZkNzAsIDB4ZWNhZDZjNGIsCi0JMHgxNmUxNWU3NywgMHhhNjlkZDFmYiwgMHg2YWVkN2RhMSwgMHgzMzdhODlkMiwgMHg5ZWFhOTllYiwgMHg5ZDU3ZWY4ZSwKLQkweDc3MTYzZTdhLCAweDU3YTg1M2M3LCAweGU5OTQ1ZjNiLCAweGI3NTM4ZWVlLCAweDdmZDcxMjI4LCAweDdlN2E4Yjc2LAotCTB4NGVjZTAyMjUsIDB4ZDIzMjM3OWQsIDB4Y2Q5ZDVmMGYsIDB4NGNjNmU4ZDcsIDB4ZDBhY2RlNzgsIDB4NTNmNjk1ODksCi0JMHg2OWUzYzdkOSwgMHgxZTNiMmY1YywgMHgzOTBiZWZjZCwgMHg1ZTEzZDRmNywgMHg1YjdkZTRmYiwgMHhiMTFkZWEzYywKLQkweDRlZTNjMWZmLCAweDJhZDc2NjZmLCAweDVkOWY4MGZhLCAweGQzYWVkMGM0LCAweDY4ZTYyNDE1LCAweDNmNzI3YzEyLAotCTB4NzlmZWM1MmIsIDB4OTdiNDAwY2EsIDB4MDQwZWM5MGEsIDB4M2YyMTBmNjQsIDB4ZmRjM2VhMDgsIDB4ZWRmZWZmOTAsCi0JMHhiN2I3MWM1OSwgMHhkNDQwZjQxMSwgMHgxMzRkOGM4MywgMHhhZjRhZmVmMCwgMHhlNjA0MDgwZCwgMHhlNzQ1YmJkYiwKLQkweDE5OGJmNjE2LCAweDQyMDVkMmY1LCAweDc1NmIzZDJmLCAweGJlNzhjYWU0LCAweGViNDM1Y2I4LCAweDgxZGQ4MjcyLAotCTB4ODI1ZDhhNzEsIDB4MTNkYTVkZGYsIDB4MDdkMjMzZmYsIDB4YjQxNmNiMGUsIDB4NzBmMWVlNjcsIDB4YzBkOWQ2M2QsCi0JMHg0ZjRhZDJmNSwgMHhhMzQ2ZWZmYywgMHhiM2EwZGRkZSwgMHg1MzVhMDU1OSwgMHgyZmQwYWM1YywgMHhmNWJkMDhjZSwKLQkweDNkMWVmMmNjLCAweDI1ZmIyN2Q5LCAweDVmZjQzNGY2LCAweGNlODliNGQyLCAweDdlODQyYmFiLCAweDkwMzcyMTUxLAotCTB4YjM3MGIwOWUsIDB4YmQwMDJmNWEsIDB4ZGYyZjk1NDUsIDB4MDgzN2E4MWUsIDB4NWQ0NzkwN2YsIDB4NzI3N2Q4YWUsCi0JMHgyMWZkMzVlYSwgMHhkMDExZWQxZCwgMHgwZTkwYTM0YiwgMHhkY2FkNTNhMiwgMHg5M2VjMjY2ZiwgMHgyOGI2OTkyNSwKLQkweDVhNzVmN2E0LCAweDRmYzUwNGViLCAweGRhYWFmMDgwLCAweGNlMjk3YWZmLCAweGIyMGNlZGRiLCAweGY0YjBiZDkxLAotCTB4Zjc2YjgyNGQsIDB4ZTkwZWRjMzcsIDB4OGYwNDY2OGUsIDB4ZGJlMWM2NmUsIDB4YmJmMWM0ZGQsIDB4OGRiOTI3NGEsCi0JMHg5NWQwMWVkOCwgMHhlZTRhMzNmYSwgMHhiYTg3YThlNSwgMHgyZjg5NDM3YSwgMHhmNDgwNTYzMSwgMHhiNzA2NzhiMCwKLQkweDBiZThlZDM3LCAweDg1MGJmNDg1LCAweDI5ZjkxNDBlLCAweDViYmZiYTcxLCAweGY5ODcyZWRiLCAweDU0ZTQ4N2YxLAotCTB4MTM4ZTc3YWUsIDB4NDI0YjNiNzEsIDB4MDZiZjI0NmMsIDB4OWQ5ZWI5MWEsIDB4OGUxOWUyNTcsIDB4ZWMxMDMwZjgsCi0JMHg5ZjlmODM2OCwgMHgyZGQ5YTA3YSwgMHg1MmJhYmQ2MSwgMHhlNDU3MTdlZSwgMHg0NWFkNjRmMywgMHg3ZTJiZmQ4NywKLQkweDRjZmNlNTIyLCAweGI3ODk1ZmU5LCAweDE2ZmY2OWJmLCAweGViZWNkZmU4LCAweDBmZGRlMDFmLCAweGRiMjU3ZGUxLAotCTB4NmUzOWYyNDYsIDB4NmQyZjcyYjIsIDB4YjJhM2QxMTEsIDB4NmY4MDhiOWUsIDB4MWY0NTFmZTgsIDB4NzM5YmVlMGEsCi0JMHg3ZTdjODFjYiwgMHhmNzQ2ZGRmZSwgMHhmOTQzZjJjYywgMHg1YzQ1ZjIzYywgMHg0ZjEwN2U3MywgMHhiZjcyYTRjNywKLQkweDBlNTRjYWNjLCAweDJhOTE2NmI3LCAweDU0OWJlYjdjLCAweGM4NTRkOGZiLCAweGYyM2FhN2I3LCAweDQyZGNhOTUzLAotCTB4ZGFlNGI5ZjgsIDB4YTg4YzgwN2QsIDB4ZWVmODNlZjYsIDB4YmRmODhmZTIsIDB4MGY0MDJiYmIsIDB4YmU3ZTdmYzgsCi0JMHhhOTI2YjI0OCwgMHhlNzhlMjJmNCwgMHhlMzA4YmM1NSwgMHg0NjhjNGUxZiwgMHg2ZGVjYjgzOCwgMHhjZTc4OTE2OSwKLQkweGNlNmJlOWNlLCAweGM5MzU5MzUyLCAweGVjMmU0ZmRmLCAweGM0ZGIwYzJmLCAweGQxNTI5YzczLCAweDRhNTJjNGJlLAotCTB4NGIxYzE1ZjcsIDB4ZDdlOGFkMjMsIDB4NDg3YTQyYWYsIDB4MDdmZTM5YjgsIDB4ZGJmYzNkZTIsIDB4Yzk1NmY4ODIsCi0JMHhkZTdlMzYwYywgMHhhNmRkZjgxZSwgMHg0MTdiM2Q0NSwgMHgwOWM0NWQwMCwgMHg0ODc1YWQzYywgMHhmYjU5OGU3NCwKLQkweGI5ZmI5NmJkLCAweGQ3ZTQ0OTY2LCAweDc5MGExMDdhLCAweDU3YThiN2JjLCAweGEzZTI4NjMyLCAweDlkMmM4NDFlLAotCTB4MTdmNGQ1MDMsIDB4ZTlmZGFmZTcsIDB4YjEwMWVhN2MsIDB4ZGM0NTA3ZmUsIDB4Mjc5ZDIxYzAsIDB4ODczMGZkMWUsCi0JMHhjZGY5ZjgyYSwgMHg3M2ExZTYwYywgMHg4ZGFjNTllMiwgMHg5NWMxMTNkMiwgMHhiOWQ0YmQ3YiwgMHhkMWRhMzA2YiwKLQkweGU0MGMzYTlmLCAweGI1NWRhOWZmLCAweDZiZjkwNDM1LCAweGMxNjU1YjE2LCAweDkzMjAyMzczLCAweGJjOGMzZmVkLAotCTB4NzgxMTllYjEsIDB4YmRjNGE0YmUsIDB4OWVkY2ZiMmEsIDB4ZjExYWI4NWEsIDB4NTFlYzFjZTAsIDB4ZGJlYjg4ZjQsCi0JMHg5N2IyN2Y5NywgMHgxZjNhNjllMiwgMHg0M2RhN2Q3ZCwgMHgxZTliZWQwYywgMHg1YjI4Nzc4YSwgMHhlZTlhM2MzNCwKLQkweDViNThiODU1LCAweDdmNmZhZTVhLCAweGY2NTRmZDk1LCAweGFhYWNjYTBmLCAweDBjYjU4NTdkLCAweDY3NGNmODAyLAotCTB4ZTk1ZWI5M2QsIDB4YzBhOWZiZTYsIDB4MzNkNzRlMzksIDB4ZjIwOTQxMTUsIDB4ZTA1MGY4OGIsIDB4YWY3MDJiM2UsCi0JMHgzZGM0OGI2NCwgMHg2NzQ3NDVhMCwgMHg1Nzg3ZmQ0MCwgMHg0ZmE4YWM2OSwgMHgzN2VmYjc1ZSwgMHg4OWFmMWZkOSwKLQkweDQ4ODZmMjdmLCAweDY4ZGVhNzY0LCAweGZhN2Q5NGJmLCAweDc0MmZiOGI5LCAweDNiYjc4YzMyLCAweGZjOTk3M2Y5LAotCTB4ZmJkYmZmN2QsIDB4NjNhYTRkZjUsIDB4M2JjOTJhN2YsIDB4MWI3NDlmNGIsIDB4YTIzN2E3NDgsIDB4MDM0YjM5Y2IsCi0JMHg0ZTgwMzdlOCwgMHgwZGE1ZDFhZiwgMHgzZmRiZjNmZSwgMHhhMjUwZDJjNywgMHg5ZDdmNjU0NywgMHg1MTdmYjA1NiwKLQkweGQ4ODRiNWZlLCAweGZkZmFlY2RjLCAweGU3MTYzYjQ0LCAweGIxMjhkNjUzLCAweGExNWJhNDE3LCAweDdiYjI3NmQ3LAotCTB4NzAwYmY3MDMsIDB4ZTBmMjhlYzUsIDB4NTUzYTAwZjMsIDB4N2M0NmYxZjYsIDB4Mjc3YmUxNGIsIDB4YmI5ZTVjZjQsCi0JMHhmY2U5OTMxZSwgMHg3YmM5MGJmMCwgMHgyYzdjODJjOCwgMHhkN2RkMzhmZCwgMHhiMTdmZWE1MiwgMHgyM2YwNmRiYywKLQkweDYzMTdjZmQwLCAweGNmNDI3YTc4LCAweGJjOTRmOWUzLCAweGU1ZmI4ODNkLCAweGI4MzE4OGJlLCAweDQ4NWZmZDcwLAotCTB4OWU1MTYzZTksIDB4YzdmZDIxN2YsIDB4YTUxZjNjZmQsIDB4NDY3ZTYyYjcsIDB4ZTQwYjU4ZDQsIDB4M2YxNGU4NGYsCi0JMHg4N2MxMGFkZSwgMHgzYzdmZGNkZCwgMHg1NDcxZjZlMywgMHgzMmVmNjI0ZiwgMHgyZmY1YmY3ZiwgMHhjZjViZjIyNSwKLQkweGYzOGU5NjAxLCAweDVjZmIxZjhiLCAweDlmOTQwMjQxLCAweDcwZTI1NWZhLCAweGFjNWI1ZjNhLCAweDYyZTUwZmVlLAotCTB4YjhmZmY5M2MsIDB4ZDVmNzc2ZGQsIDB4ODY1MTVkMWUsIDB4ZjI2YjljNmYsIDB4NWU2NWRjNmMsIDB4ZjY0YzljNWUsCi0JMHhhZDgwODk0MSwgMHhkYjlkM2MzZCwgMHhjZjdlNmVhOSwgMHhiZDM3OTE1MCwgMHhmYjM3NWY4NywgMHgwYmNmMjdmYiwKLQkweDdjYjVlZTdmLCAweGZlNzE5M2ZhLCAweGI2YzBlYWYyLCAweDlmYjA1MjI3LCAweDBiMmJiZDEyLCAweGFiOWYxYmVmLAotCTB4Y2ExYzQzZmQsIDB4OGY2ZDkyZjUsIDB4Yjk5ZTkwYTcsIDB4ZGEwYTVkNmQsIDB4OWY1YjI1MGIsIDB4M2U1M2IxNDgsCi0JMHg4YWY2NDFkOCwgMHg3M2JiYWY5NiwgMHhhZjJmMWRmNywgMHhlYjZiZDNmNywgMHgzZjllYjlkMywgMHgwZjIwNzhjYiwKLQkweDQzMDljZGY1LCAweDNmNDZhZDJmLCAweDI0YWZmMjc4LCAweGQ2ZjQ0YzhiLCAweGUwZTUxYWI2LCAweGVmOGUzNGVjLAotCTB4N2M0OGM2YWMsIDB4YTJmZGUxOTksIDB4YmVmZWQ4ZmUsIDB4NDdjN2U0M2EsIDB4MTVkMmJlZDIsIDB4MzRlY2JkNDMsCi0JMHgzNjYzYzEyZCwgMHg4Mjg4NmY3MywgMHg2NGFkNmNlZiwgMHhmNWZlNjdhOSwgMHg2MTM5ZDMwNywgMHgxZjQ5MmFkMSwKLQkweDViZTUxZmRkLCAweGUzYjQ3MGQ4LCAweDY4YzJkM2IyLCAweDBlZDc3MzFlLCAweGQ5ZjJjNTZmLCAweDA0Zjk3OGNiLAotCTB4MzhmMWJiODMsIDB4OWU5Y2YzZjYsIDB4ODA0MDY3ZTIsIDB4OWJjN2Y4MjUsIDB4M2I3MWE3NjcsIDB4ODkwNmNlNmEsCi0JMHg5YzY1NmJmNCwgMHg2YjIzNjdlNCwgMHg5ZDk5ZDdmZCwgMHgzOWYzZTQyNiwgMHhlNTIxZjEzNywgMHg2NWE0ZGIxZSwKLQkweDg2OGRkZWM3LCAweDFkNmEwZjdlLCAweGY3YzFhNjc3LCAweDQ5OWNjZmEzLCAweDJlMzMzZTQyLCAweGRhMDY3Y2ZjLAotCTB4Yzc3YWM5MTksIDB4ZWViOGE1MGIsIDB4Y2I4YTA2YWQsIDB4OTU4YWNlY2EsIDB4ODhmZWEwYTMsIDB4OGQzY2M3NDcsCi0JMHg0NTY1OWNlOSwgMHgzZmEyOTQyZiwgMHgzODcxYjM3NSwgMHhmM2U1NmYwZiwgMHgzNTU5MmM1YiwgMHg1M2JlM2Y2OCwKLQkweDg0NWNkMGZiLCAweDhjNjdiOWRiLCAweGFlMmYxZmE0LCAweDNmNjI4ZDRkLCAweDAyYmZlZjYyLCAweDYxNGQ2ZmZiLAotCTB4ZmJkODA3NmMsIDB4N2IwMmVlOTgsIDB4ZWQ0YmVmMWYsIDB4ZmNhNjhlYWUsIDB4OTRhZGFiMWYsIDB4YmYxY2U5YjIsCi0JMHgxZjM4NWIxNiwgMHgyMzdmNTFiOSwgMHgwMmI3OGVjMSwgMHgwYjVlYzkxZiwgMHg3OGZlODFmZCwgMHgxMDdmNmY0NiwKLQkweGE0M2M5OWQ3LCAweGIxM2FlYjYyLCAweDNmNjg2NGFlLCAweDBmN2YxNWRjLCAweGRkN2IyMWMyLCAweDVhYThhZDIzLAotCTB4ZTdlMzQ5OGUsIDB4NWYxYzFmN2EsIDB4ZjFmYTQ3MWIsIDB4NGE5NzhlYjIsIDB4YjQ4NmZiZTEsIDB4ZGVkOGQ5YzIsCi0JMHhkOTMyZTViOCwgMHgzZjM0ZWZlZiwgMHg1ZGUxMWIzZSwgMHhkN2MwZDViMiwgMHhlZTdkZDYyNywgMHgxN2E4OTQ5OSwKLQkweGZiZDc3ZmEwLCAweGFiYTdiMjNhLCAweGI0YmM3NGI2LCAweDFiNzlkMjBlLCAweGUzZmJkMTFlLCAweDc3YWVhZGZiLAotCTB4Y2RjZjk4OTYsIDB4NzA0NmVhZTgsIDB4ZDVkMzlmZjgsIDB4M2Y0NDcxMTMsIDB4MzJhZTgxNWIsIDB4YWFiYTc1ZmUsCi0JMHhlMDljYjY1YSwgMHhlMTVhNWFmNywgMHg5ZmM4MzRlYSwgMHg5MGUyYjlkMywgMHhmZmE1Y2U5ZSwgMHhiNWRjZjA4NCwKLQkweDJiZjgyMjVmLCAweGJmNjk1NWZjLCAweDliZGI4ZDMyLCAweDA2Y2YxYWU1LCAweDdmMDRlZmQyLCAweDNhMmMxNmZkLAotCTB4ZTY4MWVmODQsIDB4ZGZhODI5YjMsIDB4ZTMzNGRiN2UsIDB4YWZiZGQ3NDcsIDB4ZDIzM2JmOWEsIDB4N2ZmNWYwMDQsCi0JMHg3MzQ5NDJjNywgMHgxYjQ0OGVmNSwgMHhjNDU3MmZhYywgMHhkZjdlMDdkZCwgMHhjZTUxYTY5ZCwgMHhlMDVlNDhmMSwKLQkweGFlMmZjOTNmLCAweGQ2MjYwMmEyLCAweDkyZTUxYzJmLCAweDdiNDIwZGU0LCAweGYzZGVlOWFhLCAweDM3OTQ1MGRhLAotCTB4YWQ1MmZiMTIsIDB4ZmQyZmIyMWYsIDB4ZTY4ZGVkZTQsIDB4MTJiNGIzN2IsIDB4ZjhmYWQxZmIsIDB4MzUyN2VkZWUsCi0JMHhlZTQzZjdhYSwgMHhiZDUyMGY2OCwgMHg4ZWNkNzFjNywgMHg5ZDNkMzI4MCwgMHgyYWQ0YzRhMywgMHhiZjE4ZjZmMSwKLQkweDRlOWNkNWQzLCAweGM1ZTdmZGYxLCAweDdkYWVhMjdkLCAweDNmNzEyZjYwLCAweGRlZmQ5MzA5LCAweGRjZGYzODM1LAotCTB4MzY3Yzg1OTksIDB4NmY5NWJkNzAsIDB4Mzg3ZTEyNzYsIDB4NGNiZjFlOWIsIDB4ZjhkMzY0ZjYsIDB4OWJhY2RhZjMsCi0JMHhiNmMwZmZhZiwgMHhlMjY3N2E0ZSwgMHgxNzNkYWViYywgMHg3ZDJlYTJlZCwgMHg0M2VlMTY3YiwgMHg5ZjljNWJlNSwKLQkweGEwZTE0ZmZmLCAweGQ1YWU5Nzk0LCAweDY0OWRiZjczLCAweDRmMmVmYjIxLCAweDc5ZjY0OGJlLCAweDlmNmU2MWQ3LAotCTB4NGNiZjM2NTcsIDB4ODViN2I0ZmMsIDB4MzRhYTQ3ZmIsIDB4ZTg1MWY5NmQsIDB4ZDFkNDU4NGYsIDB4MzdhY2ZjOGEsCi0JMHg5NTRiZGI5YSwgMHhlOGZmOWVlMiwgMHhiNTA3MjE0NCwgMHhmZjc4NzEzZCwgMHg5ZjM4OTJlMCwgMHg3YzM0ZWM1NSwKLQkweGI1ZTkwMDM3LCAweDUyNzFlMzRhLCAweDMwNTY1MGRjLCAweDBiOGY3M2MzLCAweDNlNTBjZjQ4LCAweDFhZmM2OTdiLAotCTB4ZWU3M2YzYzQsIDB4M2Y5MDIzMDEsIDB4OGZmNTkwN2UsIDB4ZmRhN2YyNGEsIDB4OTMyMmQ4MjksIDB4ZTJhYjI5N2UsCi0JMHhjM2FkYWY5YSwgMHgxNGMwZjMyZCwgMHhjMWFiZThhNiwgMHgyYWRlZjhhYSwgMHg2NDY3ZjViZCwgMHhlN2UxMWVlZiwKLQkweDM4NDM1NTVlLCAweDM5MzdiMTNkLCAweDNhYWM1NTNkLCAweGViZjY4ZmEwLCAweDllODJhZmVmLCAweGMyNmYzZDE0LAotCTB4NzQ0MWZlOWYsIDB4ZmI2NGNmZjksIDB4YTMzZjIxN2YsIDB4NWZkODZmZmIsIDB4MjRiNzNmNzQsIDB4YmViOTdhODksCi0JMHg4YjczM2U3MywgMHg2NDBiYWZiMCwgMHgyNGQ1NWVmYSwgMHg2MmVmM2MzMywgMHgxZTc0MjFkMSwgMHg1MjM2YzA1ZiwKLQkweGU2MDRlMDljLCAweGIxN2E0ZDE5LCAweDdjMjlmZGI2LCAweDlmZTI2NTg3LCAweDM3MTg5MWU0LCAweDlkMmU3YTA1LAotCTB4MzkwN2U3MWIsIDB4ZThhZTMwOTIsIDB4NzAxMjQ2ODQsIDB4ZjY0ZjY0ZjUsIDB4ZTkzOTY3OTMsIDB4OTY4ZDRlNWMsCi0JMHgzZDYzOTIyNSwgMHhhN2E0YzEzMSwgMHgzMTVlOWY4YywgMHhmYTdmNWZjYiwgMHg0ZmVkYzQ4NywgMHgyNmY0ODdlOCwKLQkweGY3ZTFlZWU2LCAweDU5M2RiYzQwLCAweDRjNjRlZmZlLCAweDIyZjA1M2ZiLCAweDkzY2M4YjkyLCAweDljNmZjZDNkLAotCTB4YTcxZTc0ZmMsIDB4OWRjZjA1NzEsIDB4ODk1NDlmODEsIDB4ZjkzY2NkZjMsIDB4MGVkMTY3ZmIsIDB4OWY5ZmJjNWEsCi0JMHhjNGQwOWRlYiwgMHhjOTcxNGE3ZiwgMHhjMjU4YWY3OCwgMHgxZWZjYmJmYiwgMHhiYjMwNzMzNywgMHg3MzI3ZTkxZCwKLQkweGE5NWZkZDAwLCAweDhjMzEyZGRhLCAweDM2NmNhYjJmLCAweDRkN2Y0NTZjLCAweDEyM2RhZWE1LCAweGQzNWQ3OWYxLAotCTB4ZTdjNDdhMjcsIDB4Y2NlZjNjMmEsIDB4Yjk3ZmY3ZTQsIDB4Zjc0MmRhZmYsIDB4OGMyY2FiYjksIDB4NTM0NTU3ZTQsCi0JMHg0N2U4YTdlYSwgMHhhNWNjMzhhYiwgMHgxOGY2ODU2OCwgMHhiN2M4ZTlkOSwgMHhjNmYyYmM3MSwgMHgzYjk3NjQzZCwKLQkweDcyZWM5Nzk5LCAweDZmMWE4MzY3LCAweGY2ZmJhMzdhLCAweDViYTdlN2EzLCAweDhjNjJlZjU1LCAweDYzZTljY2RmLAotCTB4OWFjM2M2MWEsIDB4NDNmOTM5YTksIDB4ZDU0NzQ3YzcsIDB4YzliYmRmZmEsIDB4YjVmMGU3NGYsIDB4NTFhYjlkY2IsCi0JMHg5MDRlZTk4ZiwgMHg0YThlZjg2YywgMHgxNTZiOTA3NywgMHgxNGFlNDdlYSwgMHhiZjc0ZDdhZSwgMHgwMTdiMmJiZCwKLQkweGY2NzcxN2YxLCAweDA3N2M0Y2Q0LCAweGUzYjFlYjg2LCAweGNhZDI2ZWQ3LCAweGRmMTlmMzdlLCAweGRkN2ZmZGMyLAotCTB4MWY2NGFjNDEsIDB4MTA2M2JiZWQsIDB4MjlmZGM3ZWUsIDB4MzllOTA1ODUsIDB4ZDFjYzdlZjQsIDB4MjM0ZmQwYmIsCi0JMHhhZTA0ZTllZSwgMHg5ZjBhNjhlMywgMHhkZmY0MTFjZiwgMHgzZGU2Zjg2NCwgMHhmMzk2MzYzMSwgMHgzYzI2ZTYzMywKLQkweDYyZjcxNTZhLCAweGE1MTZmODk0LCAweDU3ODExNmZkLCAweDg5MTdlY2Q3LCAweGM0NmU5ZGZiLCAweDA0YmNmMDVmLAotCTB4YmNmMTMyZTMsIDB4MjI5ZGQzMDQsIDB4NGJjZjEzN2UsIDB4ODhhYWZmMzAsIDB4MTJmM2M0ZGYsIDB4MTJmM2M3MmMsCi0JMHhmODhhMzdjYywgMHhjMTJmM2M0ZCwgMHg2MDk3OWUzYywgMHhkZjg4YTZmYSwgMHhhNTUzODIzYywgMHgxYWU2YjNiOCwKLQkweGE0NTY4YmM0LCAweGZjYmU4MWI1LCAweGZjODBmMDg5LCAweDEzZmQ3NTQwLCAweDNmM2E5MmUxLCAweDhiZmFhMjUwLAotCTB4NWM2YjliZDIsIDB4YjRhN2U4MTksIDB4ZmRjNTc5MDgsIDB4MWQ4M2ViOTQsIDB4MmFmODQwYmYsIDB4MTVjZjBlZjcsCi0JMHhlOTBmYmQzYywgMHg4Y2Y4NWM2OCwgMHhiZDVmNDg1OSwgMHhmOTBjMGRmZCwgMHhjNzc0YWVkMCwgMHhmODc3YWMzMiwKLQkweDliNDkzZGYwLCAweGU4OWEzZjg4LCAweGMzYzRmOGZjLCAweDA1Zjc1NTQzLCAweDVjOGRhNGM3LCAweDMxZjkwZDk1LAotCTB4NmJkYzQ5NjYsIDB4NTBhYzM4ZGUsIDB4NWNmMGZiYjEsIDB4NWIyOGE1YmMsIDB4MDU4MmY5Y2IsIDB4ZDkzY2U0ZjUsCi0JMHgyY2UzOGM1OSwgMHg0NDhkMzE4ZSwgMHhkNTNjM2JmZSwgMHgxZmJhNzhmMSwgMHhiODFmY2ViZiwgMHhhMWY1MDkzMCwKLQkweDUzZjU5ZDU2LCAweDNlYmE5N2Y0LCAweDliYjQzMWQyLCAweDUyOWFiZjE0LCAweGU2M2E5MGNmLCAweDNlMzc2YzE5LAotCTB4MDhkNTcxMmQsIDB4MGM4ODFmZWMsIDB4Y2Y1ZDljZjksIDB4NzY3ZTcwMWEsIDB4ZGZjNGIwNGQsIDB4OTE2YWIwOGQsCi0JMHhmNjIzM2MwZiwgMHhlYjk1YWM3YiwgMHg1NWJkNWVjNSwgMHg3Njc2OGUxYiwgMHg3OGZlOThkMCwgMHhmNjJhZGE3ZSwKLQkweGRmZDhiMGY3LCAweGYxN2Y2MjIzLCAweDk2OWM2OWJjLCAweDhhNjEzNzlmLCAweDJhOTg0ZGU3LCAweGQyYzc1YTcxLAotCTB4Mjc0YTVmMGEsIDB4MjFjNGY2ZjgsIDB4ZGRiZjE1N2MsIDB4MWEzZWU1MDQsIDB4OWVhMWM0ZjMsIDB4ZDdjMDk5ZjAsCi0JMHg5MTlmMDQwNywgMHg3OWViMGFkMiwgMHgyZmRkMGYzYiwgMHhiNGZlMTcyYywgMHhhMGJlNzE0ZSwgMHhlNzY5NTNhYywKLQkweDlkYzdjZjZiLCAweDY3ZjM4YzMyLCAweDEzZGM0ZmQ2LCAweDE4NWNjNDFiLCAweDhkZTUzYWY3LCAweDc1MDdmMjE4LAotCTB4Y2UzZGY5YjksIDB4YzhkYjQwMjksIDB4ZmMxYmQ4YmYsIDB4NzM0NTlkZmMsIDB4N2FmMjk5M2EsIDB4Mjk1YmQ1MTQsCi0JMHhlMTE1OWFmYywgMHgwNzE4Mjk2ZCwgMHg0OWU4MjVkZiwgMHg3NmY3MmJjOSwgMHhkZTQwNDYyYiwgMHhhZmFiOGJlYywKLQkweDgyOTZkMjk4LCAweDkyNWRmNTcxLCAweDU0Nzg4MzQ5LCAweDNmN2Y5NWIxLCAweDIyYWRlODJlLCAweGJjYTdmNDQxLAotCTB4YzRmNDYwODcsIDB4ZWY3NDNlZTEsIDB4ZWYwZTIzN2YsIDB4N2IzN2FkODksIDB4ZWY3ZTcwMTcsIDB4OThmMmY3ZTUsCi0JMHg4NGUzMDUzNywgMHgyOWNmMjUzYSwgMHhkZmFkODc4YywgMHg4YzQxZjkzOSwgMHg3OWQ0ZWQ4NywgMHg4ZWZjYzI1ZSwKLQkweGM0MWY1MzlkLCAweDY5NGVkODc4LCAweGZmOGIyOWNmLCAweDM4OWUwMWY3LCAweGRmYWQ5NzhjLCAweGY3ZTQ0NTM5LAotCTB4ZjM2NjE0YmMsIDB4M2I1ZWViY2IsIDB4MmJmNWRmODUsIDB4ZjE4ODNlYTYsIDB4ZWUwZDEzYjMsIDB4MmY4OGQ1YzMsCi0JMHg2NTc4ZTQ3ZiwgMHgwY2Y3YmRkYSwgMHg5OWJjYTdjMiwgMHg3NzYzZWJlYiwgMHgxYWY4YmRlZiwgMHgyMWJkZTNjYSwKLQkweDU1ZmY2ZTc0LCAweDdiYzEzYzdhLCAweDFiMmJmMzY1LCAweGY2YmFjZjEwLCAweGQ2MGU4OGU4LCAweGQyZjI3YzM3LAotCTB4ODE5ZWE5YWYsIDB4Njg5YjJiOWUsIDB4NmJhMzY0ZjAsIDB4OTc5ZGQ1ZTQsIDB4Mjc3MWMwMWYsIDB4YzFiZTdiMDYsCi0JMHhjYzg2OWZmYywgMHg4YzRjNzlhNiwgMHhlZWZjNzRlMCwgMHgzMTA3YTI5MCwgMHhlZjZiYmQ5ZSwgMHhlZTkwYzdlZSwKLQkweGZjNjNmNjI2LCAweDEzMmVmNWRlLCAweGViZDk0ZmVkLCAweGFlZDBlM2U5LCAweDliNjkwYWVmLCAweGVlNTdmZDhkLAotCTB4ZmRmM2YwMzQsIDB4YmRlOGEzZDcsIDB4ZWU3NDllODgsIDB4YjIxZDJlNmYsIDB4YWJlNTBlMzEsIDB4ZGIxZGNkZTYsCi0JMHhjNjdlOGQ3ZSwgMHg2ZjNhMjY5ZCwgMHhmYWU3MGFhOSwgMHg5YjVjOTk1ZCwgMHhkZmVkMDhmYiwgMHg4MGZlZGJjYiwKLQkweGEyNjFkZWYzLCAweGY0NTJjZmYzLCAweDc0YmU0MGFkLCAweDE3YmYzMjViLCAweDY2YWZjZmZlLCAweGM5ZTQzZWUzLAotCTB4Y2E3ZWU4NWIsIDB4MGQyNjc1MzcsIDB4ZGViOGUxYzIsIDB4ODNlZjBmZGUsIDB4YzhlYjhlYjgsIDB4ZjkxNTJjY2UsCi0JMHg3YzExMTNkMiwgMHhmOWVkYzEzZSwgMHgzN2ZkN2ZiNCwgMHgyZDdjYTFjNiwgMHhmZGU1Zjg4YiwgMHhmMjg5ZWYzOCwKLQkweGNlZDA5N2M2LCAweGY3ZjBhZjYxLCAweDAwZWZjZWNkLCAweGYzYmI0MWI4LCAweDBlOGEzYWY1LCAweDQyMTFkYWVkLAotCTB4YTUzYmI2ZjcsIDB4ZGRmMWIzOGQsIDB4YWYzZDU3MGMsIDB4NDhkYTY5ZDcsIDB4YTdkNTc0ZjAsIDB4NzZiZGY3ZjIsCi0JMHhiMGMzYTc0MCwgMHhmOTU1MjZkZSwgMHhiMjU3ZmFmOSwgMHhiMGJkMGVkMCwgMHhhM2Q5MjI3MywgMHhmNDJiOWUwYSwKLQkweDc4MTc1NjUyLCAweGFmZGY4YzJmLCAweDMzN2YxMzJjLCAweGZkOTk4YjhiLCAweGY2MTc0YWZjLCAweDAyZjVkZjNkLAotCTB4ZDBiZmI1ZjMsIDB4YzhmYmEzYTAsIDB4MGFiNjA2YTUsIDB4N2ExNTcxZTMsIDB4YjdiZDhiMjgsIDB4YTY1N2Q3MDAsCi0JMHg3ZDQxNGRhOSwgMHhmYjY0NzRhNSwgMHhmMzhiYTQ2YywgMHg4NjhjNjYyNiwgMHgzOTA4MWY3YSwgMHg3Y2I4ZDY1NSwKLQkweDM3YmRlYTMyLCAweDQzMWRjZjlhLCAweDU2ZmExZjM4LCAweDRkYjdlMWQwLCAweDc5ZmZiNzI2LCAweGI3ZmE2MDVmLAotCTB4NTBmZDY2NmEsIDB4N2NmZmNiZWIsIDB4ZGM5ZWZhOTEsIDB4MTM4ZjdhMDcsIDB4NzBjYWIzZWQsIDB4NDE0ZTNmY2UsCi0JMHg1ZmUwMDZmZCwgMHhmY2UxMGZiNywgMHg3NTUyY2U2MiwgMHgzYzIxOGNmZCwgMHhkZjUyYjEwZSwgMHg0ZWYyODI5ZSwKLQkweDg4N2QzZmU5LCAweGRhODNlYjg1LCAweDJhMjc3YTc2LCAweDU5NDRkZGIwLCAweGZjNWQ5YmYwLCAweGEzNTk2OWRlLAotCTB4MWRmNzQxZDQsIDB4M2U5MWE0MTAsIDB4NWQxOTk2NzgsIDB4ZTlkMzhjNmUsIDB4NzNhMjFmNmIsIDB4YmRlMDNlYzUsCi0JMHgzNGYxMjE4MiwgMHg4OTgzNTk1ZSwgMHgwNzk3MmRlZSwgMHg3ZWEyODdiNSwgMHgwZjY5MGNlNCwgMHhlYmE3YmQ0NSwKLQkweDhiZGU5OTRkLCAweGFmZWJlZGM0LCAweDFiZTA5ZmY0LCAweDk2MTdmMTRmLCAweDUzNzY3NDdhLCAweDcyYzFlMzVmLAotCTB4ODg1ZTJlZDAsIDB4M2UyODAzN2YsIDB4ZWI0MDkyMWIsIDB4ZTYwYTY5MmUsIDB4ZWQyZGE0ZjcsIDB4ZjAzODZmNzQsCi0JMHhkM2FlMjExZSwgMHg1ZDhmNDdlMiwgMHhmYTQ3MmY0ZCwgMHg4N2IzZTdkYiwgMHg1N2ZmMGJjNCwgMHhmNzRkZDEwNywKLQkweDQzOGNiZjNmLCAweGIwZDMyODNjLCAweDc4NWU3ODU1LCAweDE1ZjdlMjQxLCAweDE1Zjc0ZjIwLCAweGM3NzM4ODJlLAotCTB4NDFjY2VmYjIsIDB4YmUxNzNmODgsIDB4NzcxZDEyNzUsIDB4ZTdjNGVkNDksIDB4ODhhYWJiY2MsIDB4ZGFlOTc0M2YsCi0JMHg0MzQ5Y2Y4OSwgMHhhZTdjNDE3ZiwgMHgzNjdkYWMyYiwgMHhkMGYzMmRmMiwgMHg0YzdiZmMzNSwgMHg0ZmJjNmNmYiwKLQkweGM4ODg2MTczLCAweGY3MjQ2NjBmLCAweDQwZGFlZTA3LCAweGNjYTI2NGZjLCAweGNiZDgxOGUzLCAweDBiZjcwYjNhLAotCTB4MTQyZjc4NzEsIDB4ZWQ2YzYyNzAsIDB4M2JiMjZhODksIDB4OGZkNDU2NzQsIDB4NDI0YTg3NjIsIDB4ZDZmYmQ3ZmYsCi0JMHhhOWU4ZmIyZiwgMHgzNzc3NTk4YiwgMHhmMDk2N2QyMiwgMHg5ZjQwNjI3NywgMHhmNTBkNzg2YSwgMHhmNDkxMTliZSwKLQkweGRjMjA0ZGNlLCAweGZlYmU3Mzk0LCAweDgwNWY3ZmUxLCAweDcxMGE2NGZiLCAweGU3ODIxY2FjLCAweDY0ZWQxOWQ1LAotCTB4OTNiNjAwNTcsIDB4YjZmOTVlZmUsIDB4NmVjYmVjODEsIDB4ZTQzNmNmNWQsIDB4Yzc2NjFkNWYsIDB4YTljZjU4ZTMsCi0JMHgyZDkzNWI2ZiwgMHhmNmZhN2RlMSwgMHg5YmRmM2M1NiwgMHg3YmUzZGNhMCwgMHg1NzViZTM4NSwgMHg5ZWZjY2JjNiwKLQkweDdjMjczODgyLCAweGJlMDNlYzRlLCAweGY4OGI1ODgxLCAweDdlN2RmMTIxLCAweDBmZjVlOWE3LCAweGI1NzRkZjkxLAotCTB4MGU5ZjEyMjUsIDB4NGRmM2E3YTQsIDB4MGE3YmQzNGYsIDB4YmJhZTQxMjcsIDB4OTNmZmVjZmMsIDB4NzlkMGFmNDUsCi0JMHhjMzhjNzRmYywgMHgzZjdmNWYzMCwgMHhhOWZiZjdiNSwgMHgwZGIyMDc2NCwgMHg4Zjg4ZTU3ZSwgMHgyMDdjZWEzNSwKLQkweGJkMmYxMDVjLCAweDExNzAzYTJhLCAweDViYTc4ZmRjLCAweDYzYTNiYmY4LCAweDgyMWRlOGRiLCAweDkwMjlmOTZiLAotCTB4MDdmMmZkOTcsIDB4ZjUwMWYyMDMsIDB4ZWEzYjVlZjEsIDB4MmY1MWM3MGYsIDB4ZjYwZTM4NDAsIDB4N2RiYjIwOWUsCi0JMHg1ZDkzOGYzNywgMHhmMjhkNzIwOSwgMHg5Y2U5ODM3YiwgMHhlNDFiYjM1OCwgMHhiNzJlN2Y1NiwgMHg4Nzk0NWU1MCwKLQkweGFhYmY5MWI2LCAweGNlODFhZjZiLCAweDlmMzQ1NjM3LCAweDAzZjVjMzhkLCAweGE2NWY5MjNlLCAweDQ4OGRmOWJjLAotCTB4MTJiZmU3YjQsIDB4YzdjODAzNzYsIDB4ZDk0YjhhNDgsIDB4ZjY4OTFjZGIsIDB4ZDRlZTUyODcsIDB4N2M0NDUyNzgsCi0JMHgwZmYyMTY3YywgMHhmNjQyYmNhNSwgMHg1NTNkZDBhNiwgMHgzOWRlOGRhOSwgMHg0ZGU3MGFmOCwgMHg2MzJmMjFmNSwKLQkweDljM2FkMTllLCAweGQ2N2JhNzEyLCAweDBhNmJkZmNjLCAweDgyMTNiN2RjLCAweGEwN2YwMTlmLCAweGJjNTcyNzc3LAotCTB4MGEwNWZkYzksIDB4N2MxNTI4M2YsIDB4Njc5NjIwZTUsIDB4MjhiN2ZhNzAsIDB4ZGU3ODQzZTcsIDB4MDdkZjc0ODMsCi0JMHhlMTQwNzg5ZiwgMHhmOTExNmM3YiwgMHhiMTBmOGU3MywgMHhmNjhhYjg3MiwgMHgzN2Y3MmZkNCwgMHhiN2I4YjhmMSwKLQkweDMyMTJiMzNhLCAweGRhZjU5ZGIwLCAweGZjNmI4ZjdkLCAweDVmYzdkMTI4LCAweDEzNDQwZjkwLCAweDhiYTE1ODFmLAotCTB4YmQ5NTc1ODQsIDB4M2FiYmQxMjQsIDB4ZTc5NmIzYTUsIDB4NTBiNjc1NDMsIDB4ZTdiZDA4ZmIsIDB4YWU3MTgyNTksCi0JMHgxNWU3ZWJlNiwgMHg0MzE1NDc4OCwgMHgzNGNhOWMzOCwgMHhkYjJlZWVkYywgMHhjZjM5ZDEyNiwgMHgzZjNmMWQwNSwKLQkweDcxNDM3ZTAzLCAweDJkYzcwYmY0LCAweDliZmE0N2NmLCAweGVmNDJiZmRmLCAweGFjZGYxZjZmLCAweDViZWVlYmZmLAotCTB4MWY5ZTVhMmYsIDB4OTc5ZDA3ZDUsIDB4M2FkNGRkMmQsIDB4NWZkZjVkODAsIDB4M2YzNmEzYTksIDB4Yjk3ZDdhZDIsCi0JMHgyNjBiZWYzMiwgMHg3NTYzOWU2NSwgMHgzMWUxZmMwMywgMHhiZTNlNzk3ZCwgMHhmOGQwYjhmYiwgMHhhZjgzYzJhZiwKLQkweGMxYjM0MmZiLCAweGUwMTc3MjhiLCAweDc3YjVlNzRiLCAweGYyYTQ1ZDVmLCAweGJmYWNkZWFiLCAweDczYTZlNjUyLAotCTB4M2ZjZDFiOGYsIDB4ZGU0YTc1MzAsIDB4MGFkNzE0MTMsIDB4NzQ0ZjU1ZjQsIDB4MzdlMzc0MDYsIDB4MDI0MzYzZGUsCi0JMHg0NTI1MTFmYywgMHgxNTdiZDFiNywgMHhmY2RiYTI4ZSwgMHgyOTgxMTFmZCwgMHgxYTgxY2EzMCwgMHg1MTcwZDk4YSwKLQkweGRiMzg3NDBhLCAweDk0M2MwN2Q2LCAweGI5NDM4OWZhLCAweDgxMzFmNTVmLCAweDk2MjcwM2M3LCAweDIzMWFmZjNmLAotCTB4ZTg2ZDhlM2YsIDB4YzdkZjFiODAsIDB4ZmZmMDQzYjgsIDB4NzE4ZmJlNWIsIDB4YjdhZjMwNGYsIDB4NTc0MTY0ZGYsCi0JMHhiZmZlZjc0YiwgMHg3YmI4M2Y5MywgMHgzZjNhNzliNSwgMHgxOGIzMzA2NywgMHg5ZDFhZGVmOCwgMHhlZmRmZDViOSwKLQkweGI3Yjg4OWZiLCAweGU5OTZmNzgwLCAweGVlOWE3OWZlLCAweDE5NDlmZGM3LCAweDQ5ZmNkNzIxLCAweDA0NjQ2ZmE0LAotCTB4NTc0YWY5ZDMsIDB4NmY5MjE1ZDMsIDB4MTYzOTJkZGQsIDB4NmFlOTA3M2MsIDB4ZGU5MTliNzMsIDB4NWZmOWZlYWEsCi0JMHhiYjg3Mjg5MSwgMHhiOGE2YmU1YSwgMHhjZmVmYWViMCwgMHgzYWQ4YmM1MiwgMHhiMDc3YjcxMSwgMHhiNTViYzQ0OSwKLQkweGJjYjA0MzU5LCAweDdjYWJlMGJiLCAweGE0NWViN2FjLCAweGY3MDI3ZjNlLCAweGUyYTkyYmE3LCAweDlmN2JmMDJmLAotCTB4MWNkMGQ2NjcsIDB4ZGQ2YjNmN2MsIDB4M2UzMGQ5NTMsIDB4NDVjYzZlMzMsIDB4NzM3NjAwN2UsIDB4OWYwZGNhMzgsCi0JMHhmNTFhYzExZiwgMHhlODhiZjE2MywgMHg3MmQyNDg0NywgMHhlOGE2MDIzZiwgMHhlMjRhNDg0NywgMHhhM2NjMDQ3ZSwKLQkweGY0NTMwMTFmLCAweGZhMzk2MDIzLCAweDdlOGYzMDExLCAweDFmYTNjYzA0LCAweDQ3ZThmMzAxLCAweDA4ZmQxNGMwLAotCTB4Yjg4ZGZlNTgsIDB4OGMwZGQxMmYsIDB4Y2QzOWZiOGIsIDB4NjA5N2Y3YzQsIDB4NmZjMDMwZmMsIDB4NzhiZjc4ODksCi0JMHg3NzdmM2Q0OSwgMHhhMDRiZWYwNywgMHg3ZTJlYmJmYywgMHhjZmM0NTFhNiwgMHhmOWQxMzY3OCwgMHhkOTVlZDU1ZiwKLQkweGY3ODQ1Yjg2LCAweDE4Mjk1YzJhLCAweDA4NzNkMzQ3LCAweDdiNTUzZmZkLCAweDJiNzJkYjI0LCAweDc5YTc0Zjk2LAotCTB4ZjljOTZiYWMsIDB4ZDc5NjE2NzQsIDB4NWVmODZjZWIsIDB4ZGYxM2UwMTYsIDB4ZTI4OTVhY2YsIDB4ZWE1YWNhOTgsCi0JMHgyZTM1NWZjOSwgMHhjZGM1M2Y2YSwgMHgwYzQ4MzU1NywgMHgwY2QzYWNmZCwgMHg5MGFlNGVkYywgMHg5ZDA0NzRhMSwKLQkweDVkMWU5Mjk3LCAweGZiMjM2ODYxLCAweDY0YmI3Y2E1LCAweDVjOWZiZmY1LCAweGYxMzJlYTM1LCAweDc4ZGNlNTA5LAotCTB4MmFjNGZmMDEsIDB4YjE2YjI2M2MsIDB4NzlkYWNlNGEsIDB4NjlmZTEzZmMsIDB4OTEzN2M1ZjUsIDB4MTdhN2UyMWUsCi0JMHg2NGYzYzAyZCwgMHhhN2JmOTcyYywgMHg2MDE1MWI3YiwgMHgzNzQ4NDZlMCwgMHg2YjJhN2Y4ZiwgMHhlMzA2YjNkOSwKLQkweDBlMzU2ZWE2LCAweGUyYTFlNWVhLCAweGJmMzg3OGZjLCAweDRjZjA1MThmLCAweDMwYmRlZWYxLCAweDAzNDZlZjVlLAotCTB4ZDJiYjI5ZTksIDB4YmYxMTNiMWQsIDB4ZTRlY2U5MGUsIDB4ZGZiNDM5NmYsIDB4ZTlkNjc2NDQsIDB4N2YyYWE5NGQsCi0JMHg4ODNjOWU0YiwgMHg3NThiMWRmYywgMHhlMWVmYzkxMiwgMHhiNjBmMGVhOSwgMHgxZTYwYTdiYiwgMHg4OWVlNTlmOSwKLQkweDU2M2EyMTBlLCAweDVhOTBkMGYwLCAweDgxZjIxYWY4LCAweGYyNTY5OWM1LCAweGQ4MTllNTZmLCAweDExM2ZhODJmLAotCTB4NTNlY2E1NTcsIDB4ZGU4OTRhZGUsIDB4MzY2MjJlNGQsIDB4YzczMDVmYmEsIDB4NTM4OWRmY2UsIDB4YzM5Yjc1ZGUsCi0JMHg4MjgzOWM3OCwgMHg0OTM3OGI1NywgMHgzNjRlZGRmYywgMHg1YjNjZTA4OCwgMHhjYjRlNzNjMCwgMHhjNzRlZjQ3YiwKLQkweDU3Nzg4MzNjLCAweGJmY2ZjMzRlLCAweDc4ZjNkNzYzLCAweGMyZjhmOTg2LCAweDgxNzdiZTExLCAweDdjOTMyN2Q4LAotCTB4Y2ExZGJiN2QsIDB4ZTI4M2MxMWQsIDB4OGQ2ZjdlYjgsIDB4OGU4YmZlYzIsIDB4MzczZTI4ZTgsIDB4MTRiZWVhMmYsCi0JMHg3MWY5YzkwNywgMHg3OTIwYzcxNCwgMHgwYzNmY2E2NywgMHhhOWZlMzFmZCwgMHhhNDM4NjM4ZSwgMHhlYjg0MWMyYiwKLQkweDI1M2M0NTZlLCAweGQyODM4ZWZmLCAweDk0MjVkNTIzLCAweDI1MWM3ZTJhLCAweGZmN2JiMDZlLCAweGZjNzA3YjFiLAotCTB4NmVmZTJhYmMsIDB4YzVlZjBkZWMsIDB4M2Y3ZGY1MDUsIDB4ZjAyN2I5NGMsIDB4MGUyOWM2MTksIDB4MWYxZmY1YzAsCi0JMHhjNGRiZWY4OSwgMHhlMWI2Njc3ZSwgMHhmNmEyZjNmYSwgMHg0NGFhYmRkMywgMHg5MzNmZmZkMSwgMHhmZWUwY2YwYiwKLQkweDBiOTk0M2Q4LCAweGNjMzllMWRiLCAweDNlNjc4MDQ2LCAweDNmNDI0MDJlLCAweGY3OGVjN2I5LCAweDRiZjY3YTUzLAotCTB4YmU1ZjhhMTYsIDB4NWE2ZTZmOGUsIDB4NTUyMWYxOGQsIDB4NmJiZDEyNDksIDB4MzFiNDFmOWQsIDB4Y2ZmYTEyMmYsCi0JMHgyMWI3ODg0ZiwgMHhlMjZhYWVkZiwgMHg0ODJlZDY3ZSwgMHhlNWRmYmVmOSwgMHgxOGFhZjdhNiwgMHg4MjZhM2Y3ZiwKLQkweDUzZmJiN2Q4LCAweDNhMWY3ZjFjLCAweDUxM2U1N2MwLCAweGNiNzc1NWQwLCAweDdiYjcxZTE1LCAweDFkNmMzZjczLAotCTB4ZjhjNzNmYmQsIDB4MGZmNDFmN2IsIDB4ZTg3MTM1ZTYsIDB4MmFjN2YyNjAsIDB4MTBkYmQzNzgsIDB4MjZmMTE1YjUsCi0JMHg5YmI3ODMyNCwgMHgwZTk4ZWIzNSwgMHhjZDI5MDZmNSwgMHhmYzgwY2M2MSwgMHhhYmNiZTJlYywgMHg3ZDlkNjkyMywKLQkweGY4OTRjNWZiLCAweDk4YmY0MGY2LCAweGJmZmQ3ZjNmLCAweGIwZmY2Yjg4LCAweDQ3YTUxMTdhLCAweGRhNTI5N2FiLAotCTB4ZWZhMmVkNTYsIDB4Y2I2ZTE3MjAsIDB4NmE3ZjM1YjgsIDB4ZmUxZjQ2NGEsIDB4ZjZiNDY2NTQsIDB4ZjQwYWI5MjMsCi0JMHgwMWQ2ZmRjZCwgMHg2YmEwNTNmZSwgMHhkZjVkMWY4ZCwgMHg3NzM2MTJkMywgMHgzNTFkZWEyZCwgMHgxMjhmN2E3YSwKLQkweDk4OTc4Y2UzLCAweDMyZDgwZjg5LCAweDJhYTNmNGZhLCAweGRmOTMzMzcwLCAweDQ2OTk5N2I1LCAweGE2YzdmYzIwLAotCTB4ZjAzNTZhMjUsIDB4NDkwY2NlZmQsIDB4NzQ4NjVlNzUsIDB4M2E0M2ViODIsIDB4NDRlOTE0YzEsIDB4N2NlZmU3ZWIsCi0JMHg5YzI0MGY1MSwgMHgxNzAwZjVjZCwgMHhkYTI2MDFlOSwgMHg4MWNiMzVkNywgMHhlZWY4NDg3ZiwgMHgzZmM1NDU4ZiwKLQkweDBmZjAwNjJlLCAweGE2MWU1ODMwLCAweDA2MmQ1NWZiLCAweDg5NDY4NzdhLCAweGM5MGIxY2I3LCAweGYwN2QxMWQ1LAotCTB4MjdlNzBmMTMsIDB4M2IzYzgzODMsIDB4NjU3ZmJlZTgsIDB4MWVmM2M1MTAsIDB4M2FmYzcxZDIsIDB4YzljNzhlYjQsCi0JMHhmZTQyYjMxNSwgMHg3Y2Y1ZDBkZSwgMHhjY2NiZWU4NSwgMHhmNTM5ZTg4YiwgMHhlZjNmYTgwNywgMHgzM2U5MzMwOSwKLQkweGU0MTY2MjZiLCAweDI1N2MzYmZlLCAweGUwMTA2NTA3LCAweDRiMmM2YjlkLCAweDliZTBiOGMzLCAweDAzYmJjYWE1LAotCTB4ZDAyMWRlZDcsIDB4MjcxY2Y3OGIsIDB4YWE2YTc3ZjAsIDB4NTk1M2ZlODQsIDB4NTRmYTIxNmMsIDB4NmE1NjYxZWUsCi0JMHhiMDZiMWQzZCwgMHgxZTEwZmY1ZSwgMHhmNDY1YTFlZiwgMHhjZDcxYzhjZSwgMHhhOWVlZmU0MCwgMHgxM2UzYjNhMCwKLQkweDFiOWZjOTEyLCAweGM1ZTNkMmI5LCAweDkzZWU3YjdlLCAweDcxZGE3ZGU4LCAweDgzMWRmY2MxLCAweGYzYTE0ZDNjLAotCTB4YWVmZWY4MTUsIDB4N2Q0N2RmODYsIDB4OTAyOWRmMTEsIDB4NWZiOTVmNzEsIDB4OTNlZjc3YzQsIDB4MDViMTY5ZWIsCi0JMHg3ZmI5NWIyMSwgMHhiM2ZiYmY5OCwgMHgwMGZlMTI1MiwgMHhiNzRiNmVmMSwgMHgxZmRkZTAzYiwgMHgzNzRhZWVmMSwKLQkweDA4ZjU5YzJiLCAweGNhZTk4MWYyLCAweDI3ZDY4ZmZiLCAweGE2YTA3Y2YxLCAweGY3Nzg4ODc0LCAweGNmN2ZlMzg3LAotCTB4ZjkwZGEzNjQsIDB4M2U3MGNkNTksIDB4MDRkMjlhZmYsIDB4YWM5NDhmZWUsIDB4Yjk4ZTUxY2IsIDB4MWM2OGMzN2UsCi0JMHg4MzNmYmJkZiwgMHgxZmIyYmJlOSwgMHhhNzJlM2JjYSwgMHg0M2JmMWM0MywgMHg5ZWY4MTFiZSwgMHhlMTUyYjNjYiwKLQkweDRmZDhmOThjLCAweDI3YWY5ZjI2LCAweDQzZTNmMzk5LCAweGI5M2M4NjMzLCAweGM4MzhlMTBkLCAweGY4N2E4MzlhLAotCTB4Yjk2MTUxZGMsIDB4YWM0N2UwMTIsIDB4ODAwY2I5OTYsIDB4YTY5YmU4N2YsIDB4NjlkNjZlNzcsIDB4YmM2MDJiZGQsCi0JMHgyZjcxNWE0MSwgMHgzZGY4MmI1ZiwgMHg4MjM0MTk3NCwgMHg5MGY1ZGJlYSwgMHgyMTdhN2EyZiwgMHg4YWJjYTNiMywKLQkweDZjNWVmNDY1LCAweDg3OWY5MTkyLCAweDI5ODYzYjQzLCAweDk0NjQ2OWJhLCAweDg1ZmI4YzgzLCAweGZlZjFmYThhLAotCTB4N2I5OGEyOGIsIDB4ZDlmZDQ0ODUsIDB4NjczYzRhMzUsIDB4MDIwZWZlMmUsIDB4YjYxNzNmMjMsIDB4ZWQ0MTFkMGYsCi0JMHhkZWRlMWE1ZCwgMHhiNmY0ODVhZSwgMHg1MWRlZmU0NCwgMHg5ZDAzNmFjZiwgMHgzZTNkMTY4MywgMHhhNGUzZTQ5OCwKLQkweGVkZmJlYWIxLCAweDM4ZjA2N2RmLCAweDk4NWQyNTA1LCAweGY5ZDE1NTY5LCAweDc0ZTk1NWRjLCAweGQ1NzczODllLAotCTB4NDNkNDBhOGMsIDB4NzRjMTBkMWMsIDB4ODFmM2FmMWYsIDB4OWRmMGJiOTcsIDB4YmRkOTcyZjEsIDB4NmJiNDEzZTAsCi0JMHgyMTZmMWQzMiwgMHg1OTIwYjk1ZiwgMHgwYTg1ZWY2NywgMHg0NzdjMWY3MywgMHgwZTMxNzE4ZiwgMHg2ZjRiZTRjZiwKLQkweGVkNzBkY2EyLCAweGJhZWY4YTM5LCAweDRjODBmZmRkLCAweGZjNjdlZmVkLCAweDhhYjY2NDdkLCAweDlmNzkwM2JmLAotCTB4MWEzNmIyZWIsIDB4YjQ2ZmJmZmEsIDB4MGVmMjdlNDQsIDB4ZjUwZTI1OTMsIDB4NWZiMTIyYmEsIDB4MTRmZjgyYWQsCi0JMHg4MjljMTlhZCwgMHg3ODdkZjU3NiwgMHg5Yzg3ZGVjZSwgMHgzZDc5MzI5MSwgMHhmNzZkZmJlNSwgMHg2MzVkOTUzMCwKLQkweDk5MGRkZjEwLCAweDI1YjdiZDdjLCAweDZiYzVlZmYyLCAweGExODkxZDBkLCAweGE5YmNlYTk4LCAweDhkODZkYTkwLAotCTB4NjVmMTE4ZmQsIDB4ZGZjYjAyNTIsIDB4MjVmYzcwOGMsIDB4OTg3NjMzZjcsIDB4OTdjZTk3OTgsIDB4YWUwOTMzZWIsCi0JMHhmMWQzZDYwZSwgMHg2ZWEzYWUzOCwgMHg2M2EzYWQyOCwgMHhkZThlMjU4YywgMHg4YWVmMTBiZiwgMHhmZTcwYjdjZSwKLQkweDhmODYzMWQ0LCAweDFlZDJjYTczLCAweGU5YzE5ZTEyLCAweDlkMTdkZjA3LCAweGViZjRiNjI3LCAweGJhOWYyYmE1LAotCTB4NWJjZGVhMWQsIDB4OTI3YmE0NjYsIDB4NGE5OTlmZjMsIDB4MWFiY2NhNzYsIDB4YjI0N2VlOTksIDB4NDVmN2VhMGQsCi0JMHhlMjc0OWU0MSwgMHgwYmRmMDJmYywgMHgxNDE3N2MwZCwgMHhhMGYxMWNmNywgMHg3ODQ0ODM3OCwgMHg5YjRhZGI3NCwKLQkweDdiZGZjZjFlLCAweDAwOWU4MTM2LCAweGRlY2Q4YmRmLCAweDhhMGJkNDI0LCAweDBhZGIyNjZkLCAweDQzNzc4ZmE5LAotCTB4ZTViODA3YmYsIDB4OGNjYmJiZTIsIDB4NTkyMTI2ZmMsIDB4NmUzOGFiOGUsIDB4N2EyMmM2ZDEsIDB4YzMzODMzYTcsCi0JMHhkYmIwZmU0MSwgMHhmZDQ0MWVjMCwgMHg0ZTRjOGVlNywgMHhiYzAwOTMzZiwgMHhiNjgzY2VmNCwgMHg5ZmVkMDYzZCwKLQkweGFmMWMxOTNkLCAweDUyNWI4NTI2LCAweDI2OTc4NGNjLCAweDNiYmJmNzg2LCAweDljMTQ5Njc0LCAweDkzNmFjNzVmLAotCTB4NDk5ZWY1MDYsIDB4MDI3ZTM4MmIsIDB4MjNiNTE4ZGQsIDB4MDU5ZmJlMzAsIDB4MTExZWZkMjEsIDB4ZDcyZDY3ZWQsCi0JMHg3ZTQyZDYxNiwgMHg5MGVkODgxMCwgMHhlMTliYzQ3MCwgMHgwZThmOWY4NCwgMHhmMTE5ZmM3MywgMHhkODZmZGNlZiwKLQkweGYzOWZlNDI4LCAweGYzZTI2YzM2LCAweGI0Y2ZmYjEyLCAweDllZjBlMzZkLCAweGY4ZmFiOWU1LCAweGEwNTcxODExLAotCTB4YzNhM2MzZTAsIDB4ZmQzMjVhYzYsIDB4ODkwMWUwZjEsIDB4NzNkNjFmZjYsIDB4NmQ4ZGU1MTgsIDB4Y2NjOGRjZDgsCi0JMHgwMDdlNTQwMSwgMHg1OGQyNjNmMSwgMHhlNDIxYzUyZiwgMHhlNzg2NGVjOSwgMHg4Y2QxYmRmOCwgMHgxOTdiZTllMiwKLQkweGI1ZGVkN2E3LCAweDBhNmZlMjVhLCAweDAxZjg1MDlmLCAweGVmMWQ4M2UwLCAweGFkZmIyYWM3LCAweDJiZmY4NWYwLAotCTB4NDNlMDA0M2QsIDB4MWJlMTQ1N2MsIDB4ZjA1MTdmMGEsIDB4ODEzM2UxNGIsIDB4YzAxYjM1NzgsIDB4NmEwOGY3N2MsCi0JMHhlMTRjZmM0ZiwgMHhjZDBlYjg2MywgMHg1MTdmMWYwOCwgMHg3NmI3NTlmNiwgMHhhZGZjODY4YywgMHhlNGYzOWY2MiwKLQkweDQwZGZiYjhiLCAweDQ5OTg5NDM4LCAweDE3MDZiOTZmLCAweDEyZTA5MWIzLCAweGY4NGQ2N2E3LCAweDQ3Y2FlYTNlLAotCTB4NDAyY2Y3MGEsIDB4NDE2ZGZjN2MsIDB4MzMxZmVhM2MsIDB4MThmN2Q0NGIsIDB4N2Q0OGJlN2YsIDB4NTJjZTcxN2YsCi0JMHg1OWM1ZmRmNSwgMHg4NDNlM2Y0YiwgMHg1MDg2YTc3ZSwgMHhiZmRjMDRjNywgMHhmMzNkYmY1MywgMHhmZTUwYTdlMiwKLQkweDkwYmRiZjlmLCAweDhiZWNlZGNjLCAweGI4ZTFjZmY1LCAweDNjYzQ4MmNiLCAweDk2YmNmOWRhLCAweGRjYmU0OWU5LAotCTB4ZmMzMGY0MjYsIDB4OTczMmZiODcsIDB4OGEyZDNhNzEsIDB4ZjI4YTNiMGYsIDB4MjljMjJlNmYsIDB4NjExZmRmMGIsCi0JMHg4OWJmY2YwNCwgMHhmNjI1MzlmZCwgMHhmNzM1NjhhNywgMHgyNGI4NzQzYiwgMHg1ZGNjNDNmMiwgMHhhZDc0ZTgyNSwKLQkweDk3ZjI1ZWZhLCAweDM4M2RhYzMxLCAweGY5N2Y3N2QxLCAweGM0YTRkZmNiLCAweGY3MmI1ZDIxLCAweGY5NmIxZDk1LAotCTB4ZTk2OTY2N2QsIDB4MWM1ZmQyNjEsIDB4YWU1MGZiY2EsIDB4OTZhMWY3ODAsIDB4Y2Y3YmYyYjYsIDB4YzRmYmVhZWQsCi0JMHgzZDc2ZDljMSwgMHhiNzE4MjlmOSwgMHgxZGE2ZTZhMywgMHgxYjM1ZjFlNCwgMHhiMjhhMGIyNSwgMHhiYzVlNTE2MiwKLQkweDU3ZGQ1MjU2LCAweGRmOTMyNDdiLCAweGQwY2M2YjE3LCAweGZhMGJiZjcyLCAweDFmMzg5NDljLCAweDdjMDRiZTNmLAotCTB4MTVjZmVlODMsIDB4NWZhZTFjNmYsIDB4ZTc0N2M3ZTAsIDB4Njk3OWYyOGEsIDB4ZjI5NTRhMWEsIDB4NTcxZTBjYzYsCi0JMHgwMzQ0OGMxYSwgMHg0YjRmYWVmZCwgMHg3ZTI3Y2ZkMCwgMHhhOGJmMjU2NywgMHhkYTZlN2Y1MiwgMHgzN2U4MzU4OCwKLQkweDdmMDFiYjk4LCAweGZlZDdjNzlkLCAweDZhNWE5OTM3LCAweDI2ZjQyOGRmLCAweGZjZjgwZGU3LCAweGZjMmEzOGI1LAotCTB4Mzc5YTBlZjMsIDB4YWY2NWQzZDksIDB4ZGYxNTdhZWUsIDB4ZGNmYjJmYmQsIDB4NmNhNjcyNDAsIDB4Y2Y1ZjM4OTgsCi0JMHhhNTRlZTc3MCwgMHg5ZjdlNjNmMywgMHhmN2VjNTJhYSwgMHg4NDVmNWRiOCwgMHhkNTUwOWRhMiwgMHg4NjcxZGZjOCwKLQkweGNhZDMwM2I0LCAweGVmNjQyNTY1LCAweDFlODBkYTU3LCAweGY3OGZhZmMyLCAweGNmZDVmNzdlLCAweGQ5NWZiOTQzLAotCTB4OWY0MWFiMTUsIDB4YTU5ZGY4ODgsIDB4YzhhZmM2Y2EsIDB4ZGVmY2EwZWYsIDB4MmFiYjYwNTIsIDB4NmU1MGZiZTksCi0JMHhmZjk4NWFiZiwgMHhlZGU0MTFlZiwgMHg1NDlkMTFkNywgMHhiOTdiNzMzNSwgMHhmMjE1ZWY2YSwgMHg1ZmVkNTc5YiwKLQkweDYzZThlOTFkLCAweDEzZGZkN2ZkLCAweGU4ZTJhYmIxLCAweGNiODZkOGFiLCAweDA2ZmUwZjc0LCAweDRjOWVlYWYxLAotCTB4ZWRjM2VlZjEsIDB4NTM4YTc2ZWMsIDB4MmI4YTMyZDcsIDB4MmViYmY2YmEsIDB4OGQxZmU0ZWUsIDB4YWNkYWFjOGYsCi0JMHg1ZWEwNzhhMSwgMHg5ZTFmYjVhZCwgMHhmYjhiNzVjNywgMHhiZWY1ODE1MSwgMHhkNzc2ZTRjZCwgMHg3YzIzYTAyNSwKLQkweDQxYmJhMzc3LCAweGVlOWRmM2E2LCAweGFiYmZlZTA2LCAweDE1YmE3ODZjLCAweDgyNTZhNWVmLCAweDVlYzMwY2UxLAotCTB4ZDk1NDNmYmIsIDB4N2ZhMzMzMjgsIDB4MWZjNjFhZGMsIDB4OWU3OGRjNDUsIDB4ZTg0MmJiZTUsIDB4OGY1Mjk4MWQsCi0JMHhmOTg3YWY2NCwgMHgzNGJkODJmNCwgMHhjNzNlNmZjMCwgMHgxYjk1NWUwNSwgMHgyZmI0YjkzYywgMHgwMzg3ZmU2MiwKLQkweDk2ZDI5ZGY0LCAweDJiOWVlOWE3LCAweGZkMjJlYmQ0LCAweDhjYzE4ZmU0LCAweDFjZjU5MzlmLCAweDZlNzY3OWM1LAotCTB4NWFlNzQ5MTksIDB4OTUzZDllYTUsIDB4MDg2Yzc3ZTQsIDB4MGI5NTc4YTYsIDB4ZTliZGY1M2EsIDB4NTNiYzYyNTMsCi0JMHhhZmVlM2M5OSwgMHhiMTI0ZTMxMywgMHhlOTMyYWJmZCwgMHhhNDRmMzhhNywgMHgzYTkyMGJjNywgMHg2OGI0ZTM4ZSwKLQkweDZkYzA1YTc3LCAweGE1NGJhMDlkLCAweDIzYTdhOTdlLCAweDlmZWEwOTM0LCAweGQyOThmYTZkLCAweGQ0YmY1MTJlLAotCTB4NzI4NTk2ZGMsIDB4MzA2MzZjZjMsIDB4ZGIzZDYzZGQsIDB4YjdmYzg3ZjgsIDB4OWU0YmJjNjAsIDB4M2YyNWZkMzEsCi0JMHg3NGIyOTJmYSwgMHg4OGI2M2Y3YywgMHgwOGVlYjhmYiwgMHg0M2M0Y2Y3MSwgMHg4ODZjZTllYiwgMHhhY2JlZDA5NSwKLQkweDlkNWVmMTEwLCAweDZhODdhZjhkLCAweGZmNWQ3ZTg4LCAweDRkNWRlZmRlLCAweGIxNWRlZWJmLCAweGZlYTA0NmVmLAotCTB4YmQ1NzZjNjIsIDB4ZDViZmY2MmIsIDB4ZmYyOGE1N2YsIDB4ZTMxNDJhNDQsIDB4YjljNWU4ZjQsIDB4MTAxZGZmMzAsCi0JMHhlMTNiYTA4YiwgMHhjYzNkOWQ4ZiwgMHg3ZmRlMTBmYSwgMHhkZmYwMWY2NSwgMHhmZmJkMDMwZCwgMHg2NjhmYjQzOSwKLQkweGVjODIzOWZmLCAweDBmZmRmYzRmLCAweDIxZjM3ZmNjLCAweDNkOWIyZjNmLCAweGU4OTVmMDUyLCAweGQ3ZjQxY2Y2LAotCTB4ZmQ3M2M0NzcsIDB4MjgxNmI5YzEsIDB4MGU1YTQwMTEsIDB4ZjgwMmU1ZjgsIDB4ZTYxYWRkMzksIDB4MmNkMGZjODAsCi0JMHgwMjc1M2Y2ZSwgMHhlMTg3ZWJmZSwgMHhlNThlM2NjOCwgMHhmODc3ZDgxNCwgMHgzNWViOGM5ZSwgMHg0Y2VjOGU3ZSwKLQkweGJkZTBhNmYwLCAweDRmMTE0ZWJlLCAweGE2ZjcwY2UwLCAweDE3YmY0MDQ0LCAweGE3Mzg5ZTA1LCAweGRmZmM1Mzc4LAotCTB4ZjU2ZTc0YTksIDB4NDVjZDNjNTIsIDB4ZGY4NzNmMTEsIDB4MWNlNzlmZDEsIDB4YzQ3NWViYzEsIDB4ZGVlOGJhNWIsCi0JMHg4NjEwZGVjNiwgMHg4ZGU2YWFmYSwgMHg4YWMzYzIxMCwgMHgwZDViNGM1NywgMHhhOGQyNzY3ZSwgMHg1ZjBmYWUyYywKLQkweGFkNzdmM2Q0LCAweDdjZjhkYjVkLCAweDUyMzc0MzRhLCAweDdlMDUxNzNmLCAweGE0NmQwNjk3LCAweGY3MTI5ZGY5LAotCTB4M2NmNTRiODMsIDB4ZjQ2M2ExZGYsIDB4MGVjZjdjOWUsIDB4ODVjZjZlZmUsIDB4Mzg3ZGI2OTgsIDB4ZTkxZDg1Y2UsCi0JMHgxMWRhNjcxNCwgMHg0NGQwNWVlZiwgMHg0OTdjNzlkZiwgMHgxNzgzNGVkOSwgMHg0NzdlNzVlNywgMHgyYTAzZGQwOCwKLQkweDNhNjZlZGY4LCAweDMzYWRlYzVmLCAweGNlZmZjODQ4LCAweGNmNzQ2MDBmLCAweDAwZmQ3Y2UxLCAweDI1ZTdkNzkyLAotCTB4Y2YzN2Y5MmIsIDB4ZmQ0MTFmYmYsIDB4YTUyZjU1OTUsIDB4YzA2NTJjZmIsIDB4ODRlZjUwMjYsIDB4YjVmNTAwYjQsCi0JMHhjN2NmZjVmMywgMHg3ZTQyZmQyMSwgMHg2YzFkZTYyZCwgMHgyMTVmZWNlMywgMHgyNjBmNmU5ZCwgMHhjZWMyZjMzYiwKLQkweDlmZmJhNDdmLCAweGUwNjkyOGY3LCAweDlmYjI4OWI5LCAweDU5ZTlmN2NhLCAweDJlOTg2ZWRjLCAweGNiMmIzNGUwLAotCTB4ODMyZGNmYzIsIDB4ZDAyNmNmM2QsIDB4MDM3ZDM4ZmEsIDB4MDAyZWM5OWMsIDB4NzE3N2EyN2EsIDB4MjM5YTc5NGUsCi0JMHhlY2E3ZTgyNSwgMHhjYTNiMTA4ZCwgMHgzNzlkMGVmNywgMHg4NzA0MGZlNSwgMHgzMGJiZjE2MCwgMHhmM2MyZWM4YywKLQkweDJlYzgyMmRiLCAweGZhOWEyZDA3LCAweDkzMmRiZjM5LCAweDM4OTU0M2UyLCAweGFiYTg0OTkzLCAweDEyNjYzZWQxLAotCTB4MmRlNGYzN2MsIDB4NzA2ZWY0NTksIDB4ZTFjNTMwNWQsIDB4YmI3ZTNkOTQsIDB4NjQ0ZWUyODYsIDB4YmQ5Nzc3YWUsCi0JMHhjODkyNmYzYSwgMHhhNjljZjFkYiwgMHg1NmJmNTdlYywgMHg0OWZlNDVlMCwgMHgyOWQ0OGUyNSwgMHhlM2M1NjhmOCwKLQkweGI4YzNmNTc3LCAweDk5NjdmNjViLCAweDY4YWVlM2UyLCAweDIwNjM5Yzc5LCAweDA5NjQ3NjVjLCAweDQ1ZWZiYTNlLAotCTB4ZTAyNzViYTIsIDB4NTAyZWZlMzksIDB4MmYwMzg4YjksIDB4MmNmZGM5ZGYsIDB4N2FlZTZiZTUsIDB4NTFlM2Y4OGUsCi0JMHhkZjM4YzMxZCwgMHg0M2E3OWU4YiwgMHhiNGZlZTFmZCwgMHhkZWQ3YzdlOCwgMHhhMWNiZjU0NiwgMHg0MWZmNmYzZSwKLQkweDliNjdjZDI4LCAweDAzOTJlMjhlLCAweGRiOTZlYmY3LCAweGE1ZmY5NGVmLCAweGQwMWU2NWY2LCAweDA3MzhmYTAzLAotCTB4MWVkYWMyYmUsIDB4NDBmOTFjZmIsIDB4YTJlNmM5ODMsIDB4ZDdiNzFlNTIsIDB4ZTAyY2YzYTksIDB4YzQ0YzE5ZjcsCi0JMHhjNGMzM2ExZiwgMHhmMzU2ODllZiwgMHgzNWYyODFmOCwgMHg3MTQ3N2YxMywgMHhkMmE3YzcwYSwgMHhlZTg1YTYxZCwKLQkweDM2ZTljZmJlLCAweDExNWNmZTBiLCAweDc0ODdlYjYxLCAweDQxZmIwMTU4LCAweGJmMWYwOWY3LCAweGIzNzVlZThiLAotCTB4N2RhOGViM2YsIDB4MTMxZTdhZTAsIDB4ZTFkMWFlZWQsIDB4ZGNmZjFlNmUsIDB4NGJlZjkwMzksIDB4MjRhOWFiZTcsCi0JMHgzOGMyM2E3NywgMHhjOTdjYzM1ZSwgMHhlMzBjZWQ0ZSwgMHg2MDQ4MDUyOSwgMHhlMzg1OGRkYywgMHgwZjE4ZTc0MywKLQkweGQyOWRkZmQ5LCAweDc0M2I0YTFlLCAweDUyZDk1ZGJjLCAweDVlMTc3YmYxLCAweDQ0ZTIzNzFlLCAweDc3YzQ0ZDljLAotCTB4YTFiNDM2NzcsIDB4MzhmYzgxYmUsIDB4NWVhNTA0NzcsIDB4ZWZmNWY4NDMsIDB4OTMxZTAzODYsIDB4YzU5M2Q3N2QsCi0JMHg3ZjEyOWJlNSwgMHg5M2Q2ZWY0MywgMHg0N2EzZDM1ZiwgMHg3YTEwZWE3ZSwgMHhmYWUxYjM5ZiwgMHg3YmEwMzNkZiwKLQkweGM1MTIwZGVmLCAweGU5NTlmZjFkLCAweDk0ZmZjNDQ3LCAweGNhY2YwZTczLCAweGUzOWQxMjVkLCAweGE0N2FhZjk3LAotCTB4N2NiZWYxMTQsIDB4NDg5OWE2ZDEsIDB4Y2EzYWNhMGYsIDB4ZWQwMGFjYjUsIDB4YTY0OTBlYWYsIDB4M2Y1ZDgwZjksCi0JMHhmNWM2NGE2NywgMHhmZGYwMjllMywgMHg1MTNmZDA0YywgMHg4MDY3MjI4ZSwgMHg1OTY1NGVkNiwgMHg2ZDk1M2QxNSwKLQkweGFiOWNmZTg0LCAweDRlMzQwZGE0LCAweGYyNzc2MmJjLCAweGMyNzAyOWY1LCAweDYzOGMxZjczLCAweDM3MDFmYzU0LAotCTB4Y2YzMmJmNWEsIDB4NTdhN2NkMWIsIDB4Nzg4ZWExZjAsIDB4ZTM0NmVmZWIsIDB4MTMyNDdmN2UsIDB4ZmRmMmI5M2YsCi0JMHgzZmUxN2VjOCwgMHgyZmQxYjdhMiwgMHhlMWZkMmE1OSwgMHgxMWQ0MTI3ZCwgMHhjODgzOWZhMSwgMHgwNDZlMzBjZiwKLQkweDNjYzBiYjZmLCAweDgwODdlODUzLCAweGQ1YTZlMzdjLCAweDFhNDNmM2E5LCAweDQ2OGNmOWQ0LCAweDQ1YWIzZTc1LAotCTB4YWJiZGI3OWQsIDB4ZTMxNTlmY2UsIDB4M2I0MjcwMmEsIDB4NmMzZGVmMTgsIDB4ZDAxZmY3MTcsIDB4NGJmYmM2MGUsCi0JMHgxZTYzMDc2OCwgMHhkMTRjNjBlZCwgMHhiNDcyYzYwZSwgMHg3NjhmMzE4MywgMHgwZWQxZTYzMCwgMHgxZGI5ZWFiNiwKLQkweGMxZGEyOThjLCAweDhjMzU5ZTU4LCAweGNiNTljOWMzLCAweDBmYjA5MGZkLCAweDlmOGYzYTc2LCAweDAyNmVmY2ExLAotCTB4OGZhODg1ZDgsIDB4YmQyMjBlOTYsIDB4YThiZTdkMGUsIDB4ZWRmZmY0MzcsIDB4NDc4ODA1ZDUsIDB4ZDQ0NzEwYTYsCi0JMHhjMzhjMWNiMCwgMHg4MzEzNWI2YSwgMHg5M2UyMDNmNSwgMHg2NjRjMjM5YywgMHhhZmI0MzdmNCwgMHhkNTA2YmIzZSwKLQkweDYzYjMwZTkwLCAweGUyNTdkNjEwLCAweGJlOTYyYTk2LCAweGQ2ZWZiZjQzLCAweGU3ZmFkY2JlLCAweDIyN2RmMjlmLAotCTB4ZmJmMjg3YmYsIDB4YmVmODY1NDMsIDB4MmU3ZTRjYmIsIDB4MzkxZGZmMjMsIDB4ZjdhZmIxOWIsIDB4OGNlMzAzYTMsCi0JMHgyMmY4OTVmZSwgMHgzNjhlOGFiYiwgMHg1M2ZlNWMxMiwgMHg3YzgzMTNkNywgMHg0NjFkYWJmZSwgMHgyYmY1Njc3YSwKLQkweDRkOTMxZjcxLCAweGU3N2VhOGI3LCAweGRlNzlkYWYxLCAweGNiOWQxMjkzLCAweDljMmMzZGRjLCAweDA2MWVmN2RhLAotCTB4NzkwZmJiZmQsIDB4ZDBmM2E0YWEsIDB4OWY3N2VmNTksIDB4NDkwNmRlNzgsIDB4YTZkY2UzODMsIDB4Mjc2NDcwZTcsCi0JMHgxYzZmMTE2NCwgMHg0ZWE3N2ZjYSwgMHhmNTE1MzFjYywgMHhhN2Y5YmY3MywgMHhmODU0ODNiYiwgMHg3ODdiNzQzMywKLQkweDBjMzVlZmMwLCAweGQ2MWZkNTU0LCAweDdiZjAxMDk0LCAweGJmZDQ0MzBkLCAweGYyYzBmMDIzLCAweDRmNjc2ODAzLAotCTB4NTU1MjMwZGQsIDB4NmJkMjBhZWYsIDB4MjhkNWNhMzYsIDB4ODVjNTk3ZTIsIDB4MjdjNDA1NzcsIDB4NGY3ZWFhODYsCi0JMHhhN2FlODk2ZiwgMHhiZmE4NzFlMywgMHhjOTBjNmY2NCwgMHhiNzk4NjI4MywgMHhmMzg4YTQ3ZCwgMHg0OWM3YTU4MSwKLQkweGI3YzQzNWFlLCAweDNkZmEyNTZiLCAweGRlNDI3OWIyLCAweGY5NmFhNWIwLCAweGU3ZTVhMjViLCAweDM2NDZmODdhLAotCTB4YmRjZTgzZWEsIDB4ODRmZWY0NTEsIDB4MTYyNThmODIsIDB4ODExYjBmNjYsIDB4NTk2ZGJjZjEsIDB4ZGUxZmI0NWUsCi0JMHhmMTE3Mzk3ZiwgMHg4ZGFlNDJhYSwgMHg3ODFiZGZjMywgMHhjMzZmNzI1NCwgMHhjMjE3YTc4YiwgMHgwMWRlNDRmNywKLQkweDM4ZDYzZmRmLCAweDJmMGYxMTJhLCAweDNhMzljZTFlLCAweGIxN2NlMDBhLCAweDRiN2JhNjQxLCAweGU0NmYzYTcxLAotCTB4ZmYwZmIzMDgsIDB4MjA5Njc0ZTIsIDB4OGRkYWZmZGMsIDB4ZjQxYmZkZmMsIDB4M2VlMWM5NWIsIDB4MThkZGE4ZmMsCi0JMHhmNjY0OTQxMSwgMHg4N2MxNWJhZCwgMHg0MWRlZjRkYiwgMHhhZjVkNzA0YiwgMHgwMmFmNDg5OSwgMHhkM2U0OWEzZCwKLQkweGU5MzJjMzk1LCAweDI0NjMyNTZmLCAweDYyYjllOTE3LCAweDRiN2RjYTlkLCAweDg1YTczZDY1LCAweDc4ZDJjODNkLAotCTB4ZWY4YThmYmYsIDB4NjQwZmQzMTcsIDB4Y2UxZDYxNTksIDB4MTkzOGE2ZWEsIDB4NjFhNmI4ZjksIDB4NjNhNDBjNWIsCi0JMHhjMzc1OGU4YywgMHhhOGVmZTAwNiwgMHhlZjhhN2YyNSwgMHgyMjdkOTQ5NywgMHhmOGVmOGMzMywgMHhkMDllZTZiYSwKLQkweGRjY2Y1MDNiLCAweDgyNGRiM2FkLCAweDVmMWJlM2ZjLCAweDY1OTVmYmE2LCAweGVkMWViNzVhLCAweGI1MWQ5MmQyLAotCTB4NWVlNjhmNzQsIDB4ODJkMjZlZjEsIDB4OWY2NDQ1ZWQsIDB4Yzg4YjY0MmYsIDB4YzRhNzNjY2UsIDB4OTQ3ODBiOWQsCi0JMHg1OGI2OTU4YywgMHg4MjNkZGU2MCwgMHg3Nzg4OTQ2ZiwgMHhmMWY3OTQyYiwgMHhlZmU3NmNhZSwgMHhiODUwM2YzZSwKLQkweGY1ZTc3ZTg3LCAweDkwMmY1MTY1LCAweDljM2Y3YTVlLCAweGZkMDAzNzlhLCAweGY2YzkxZTRkLCAweDFmNGNmNzYzLAotCTB4YzAzZmEwYzQsIDB4YWQ1N2E5ODcsIDB4NzU3MDNlOTQsIDB4OWZiOWQ5MDgsIDB4YTE4NGFmZTAsIDB4YjAwOGM4YmMsCi0JMHhmMWU0M2Y3NywgMHhiYmY4YmQxOSwgMHhlZjc4ZjE0OCwgMHgyYTdmZGJkMiwgMHgzYWRiYzNlZSwgMHhjMDBhODdkYSwKLQkweDc4MjM1MTlmLCAweDkwOWRjMzNjLCAweGRmNTY4ZTE2LCAweDE3MWFhOWY3LCAweGU5ZjdjMmFjLCAweGEwOGU4ZmNjLAotCTB4N2MxODY5YmYsIDB4NjA3Zjk3ZWUsIDB4ZmVhYWEyNTIsIDB4MGQwYzBmNDMsIDB4YmUxMTg3YTAsIDB4NzQyZTc0ZWYsCi0JMHhiNDRlMmFhNywgMHg0YWNiOTk2MiwgMHhlNGYxZjRmNywgMHhkMjFjYmZjZSwgMHgxMzY3ODQ2NSwgMHhkODJiZWQ1NCwKLQkweDc4YmQ1ZjE0LCAweDQ1YmEzYmZlLCAweDdhNmQ3Zjg0LCAweDM0NGE5N2I0LCAweGJhN2Q2ZTNjLCAweGI3OTQ0M2EzLAotCTB4NDQyYzM5NTMsIDB4MjViNzk3NDUsIDB4NzJlNTNlZGEsIDB4ODNlM2M3NTEsIDB4M2E3YjFmODUsIDB4OTdkODlkZmUsCi0JMHgxNjhkODQ1YywgMHhjOWVmZTJlMywgMHhhMWMxZmZhMSwgMHg1NGRhM2JkNiwgMHgzZmMyMjI3MSwgMHhmZGM2OTE1NCwKLQkweDM2YWUxNTQzLCAweDAxZGY5ZTNkLCAweDAwYjFiNWZjLCAweGZjOGRjYTkyLCAweDZmYTgwODVkLCAweGY5ZTcwZDhjLAotCTB4N2ZhZTIzNjUsIDB4YzNmYjBmMmYsIDB4MGYyYWM4NzcsIDB4MmY0ODQ1Y2IsIDB4ZjEyYmRmODEsIDB4MGY5YzAyN2QsCi0JMHhlOTQyNzNmYSwgMHhiZmRlNzE5ZCwgMHhjZmMxNTdlOCwgMHhjMDk0MzhjMCwgMHhiNWYxYjI3ZSwgMHhkZjdhMWM5ZiwKLQkweDlhYTNkZThmLCAweDg5ZWZjODVhLCAweGY5OTMzZDNiLCAweDNjMDBmYmJkLCAweDE1ZmRmODUzLCAweGZkMTJjZjdjLAotCTB4NDNiZTFmZGIsIDB4NWRiYmQ2NzgsIDB4MDBiNzYzNjcsIDB4ZjczYjRhOGYsIDB4ZGZlMjA2NzcsIDB4YmUwZjU4MDIsCi0JMHg1MWEwYjg2ZiwgMHg1ZTI1YjliMiwgMHhmZmYyZTEwZiwgMHhmNDgyZGMwMSwgMHgwMDgwMDAzNiwgMHgwMDAwMDAwMCwKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDViY2RmZjAwLCAweDY1OTU1ODBkLCAweGYzYmU3ZTlhLCAweDcwMGUwMWM3LAotCTB4MDQyN2U1NDAsIDB4MDk0YTg4MGYsIDB4NDQxMDFkZjYsIDB4MTgyOTNiNTMsIDB4NTRkYTE1OTUsIDB4MDIxZjQ0YTIsCi0JMHg5YTI4MjRmZSwgMHgyZWRiNTJlZCwgMHg0YzczNTBjNywgMHg0YTk3Njg2NywgMHg1N2EzYWIxYiwgMHhiNWFjY2QzOSwKLQkweDhjY2U5YTk4LCAweDdlOTI3YmJiLCAweGE3NzJiMjY4LCAweGE5YWVhZTY5LCAweDY2YjY2M2I1LCAweDNiNDQ4ZGFlLAotCTB4YjViNGQ0NWQsIDB4ZGZiZWZkY2YsIDB4MjNiZWY5YzcsIDB4YjVjY2VkNGMsIDB4ZDcxNzVjM2YsIDB4ZmZmNzllNzMsCi0JMHhlN2RlZmU3ZCwgMHhiYmY3OWU3ZCwgMHhjODkxMzJhMywgMHgxYmVmZTI0ZCwgMHhmZmU1NmZmZSwgMHhkNWEyMTJlYywKLQkweDQ0MWY5ZDA3LCAweGFiZTVhMzBhLCAweGFlMGRlY2ZiLCAweDYwZmQ2NWNiLCAweGNiZjVjNWRhLCAweGMzMmE2M2YxLAotCTB4OWMyODRhMjMsIDB4ZDcwNzcwYzcsIDB4NGQ1ZGM2OWIsIDB4MjdiNTNlZGIsIDB4OTdmMWNhMDMsIDB4MzQ2M2ZjNjksCi0JMHgyODRhODNjMywgMHgxZTNjNWNhNCwgMHhjYThkOTA1NSwgMHgwYzYxZDY4OSwgMHhmMWMwZDExZiwgMHgzZjY4NWQzYiwKLQkweGFmMjE0YmIwLCAweGEwOWQ5YTIyLCAweGQ0MWViOTc0LCAweDYyYmJkZWI3LCAweGM4NjE0ZDNlLCAweGY1ZTZjYzYzLAotCTB4MTE3NDFjMmQsIDB4MWI4ZDEyOTUsIDB4ZTZlNWMyN2YsIDB4MTQ4N2ZkN2UsIDB4YmJmNzBmNzUsIDB4Y2EyMWQwNjUsCi0JMHgxMGU0MWQ1YiwgMHg2YTIxYWNmYiwgMHhmOWJkZjg2NywgMHg5ZGMxZDExNywgMHhlZmViMjY5ZCwgMHg2MGYzNzg2NSwKLQkweGJiMTdlOGJhLCAweGU4N2EyMWNlLCAweDZlODhiOWY0LCAweDc2NDVjMjc0LCAweDc5OGRmZWQzLCAweGEyMmZmMWY1LAotCTB4NzFmZjRjNTMsIDB4MWFmNmU5ZTMsIDB4MGEyNzUxMGYsIDB4N2YwY2I4YjIsIDB4OGZiOTAyNTcsIDB4ODY2ODhjYTgsCi0JMHhjY2ZhMzQ5YSwgMHhiMmVmYzI2NCwgMHhmMjFlNzg2ZiwgMHhhM2QzYTBmMCwgMHg1MTIxNjJlZCwgMHg4ZjBjNjg5MCwKLQkweGM3YWQyMmViLCAweGQyNTkzYzAzLCAweGI4ZTkyYmQ5LCAweDQ4Y2JlOWNlLCAweDk5ZGZlMjJkLCAweDNiZmE1NmM5LAotCTB4MzcyODI5N2MsIDB4NjFkODY5YzYsIDB4YTNkMzFmMjMsIDB4M2QzNjNlY2EsIDB4OGM2OGUzYzIsIDB4YzhiNDNlODMsCi0JMHgzNDVmMDM2YiwgMHgxYmNkYmM3ZCwgMHg0YzQ2ZTdjNywgMHhjZTRkYjRmZCwgMHhiOWY2ZTI3NCwgMHhkODA5NDYxYiwKLQkweDU3NGRlZjEwLCAweDgzNjFiZWI5LCAweGYwYzQyNmJkLCAweGE0NjdlZjgzLCAweDdkMWNiMDU3LCAweDdhMzljOWIwLAotCTB4YzFmMTBmM2UsIDB4YTk3MzUzZGQsIDB4ODA5NTc4MTgsIDB4NWI4YzFmYTcsIDB4YmM1Y2YyMTQsIDB4MjZkNTA2YWYsCi0JMHgzN2ZhZDFlOCwgMHhmOWRhZTRlZiwgMHhlM2I2MjdlNywgMHhmZTc4OGJjOSwgMHg5Mjg3NGQ5NiwgMHg1NTljNzgyYiwKLQkweGY3MmFkZTliLCAweDZkZGQxM2U2LCAweGRlNTRkYWQzLCAweGY3NjUzOWZmLCAweGU1ZTgyZjVlLCAweDg2YTUzZGRkLAotCTB4NTIwMTVkYzcsIDB4ZDhlZTVmMzAsIDB4ZGM0MTk1NTQsIDB4ZGVlYmU1YWUsIDB4NzllM2JkYzcsIDB4ZTk5YzFiYmQsCi0JMHg4ZjlmOTYzNiwgMHgzYjI3NmQ3ZiwgMHgyNzU5Y2ZjYiwgMHhlMjRjYmQwNSwgMHg3ZTUyZjFiMywgMHgxODk1M2VjZiwKLQkweDNmNzk2NGVhLCAweDllMjA1MGFiLCAweDVmZGE1N2NiLCAweDViNzE4Mjk4LCAweDc1ODg4ZTNhLCAweGJkMWRiMmFjLAotCTB4YjVmZmYzMDUsIDB4YzMyZGU3OWIsIDB4OTliZGExYmMsIDB4NGUwZDU3OTgsIDB4ODZkYWJjYzQsIDB4ZDE1YTI5MDksCi0JMHhiMzVhZmNjOCwgMHg3NWQwNDRhMywgMHg5OWY3MDc2ZiwgMHhhODgxNzQ0OCwgMHhiYTdiN2MxYSwgMHg5ZmYwMmRjMywKLQkweDU5YTEzMDc2LCAweDY0NzVmN2Q0LCAweDBlZDlmYzBhLCAweDFkM2Q4MDlmLCAweGJiYmNhMjg1LCAweGRkZjkyYmM4LAotCTB4Yzc1ZmVmZDksIDB4NTBlNzA0ZjMsIDB4N2MwNzliNjEsIDB4NzgzYTE0ZjMsIDB4MDkyYTc3ZmQsIDB4YTgwMjljNmEsCi0JMHhmN2MxNzg2NiwgMHhmZjA0YjMyNywgMHg1ZDg4NzkwYywgMHhhMjdlYWNjZiwgMHg1ZTdjOTMyNiwgMHgyNmE2ZTgzOSwKLQkweDQ1NWVmYzkzLCAweGFlN2MxNmE5LCAweGJlZDJjYjNiLCAweGE5Njc5YmNhLCAweDUyZjMzYWJmLCAweDNlMzVmZDRiLAotCTB4YWViZjA1YmYsIDB4ZmRhNWJhNzAsIDB4MTY1NWVhZjUsIDB4NmI4YWM2ZmMsIDB4MDQxN2VkMmMsIDB4OWJmMDU4MTYsCi0JMHhlZDJkNmJhYSwgMHhiMDY5YWU2ZiwgMHg2OGJhZGZkNCwgMHg1NmJlYTVhNSwgMHg5N2MxNmI1YiwgMHhkMmRiYjhhYywKLQkweDBkYjZiNmZlLCAweDc5MDBmYTk2LCAweDcyNzJjNDFkLCAweDYzZTNmOTk0LCAweGYzMTNmZmJhLCAweGQ3Y2VmMDA1LAotCTB4N2NjYzc4MjcsIDB4ZDZkNzM5OWQsIDB4ZGM4YzMzZDYsIDB4MzJkYzg2MWUsIDB4MDdmNWRlN2YsIDB4ZTQ3YzgzOWUsCi0JMHgzMjFjYTRkOCwgMHg1M2NiMTAwYywgMHhmNTEzZWFhZiwgMHgzMDU2MTRkOSwgMHgyY2JkOWIwZiwgMHhiYjZjNGRjOCwKLQkweDg5OTlmYWQ4LCAweDMxZjMzZWM3LCAweDdmZmQ3MzBmLCAweGY2YzFjOGIxLCAweDYzYjRlNjYwLCAweGJmMTllM2E1LAotCTB4OTE2ZmJmYzksIDB4Y2NjOGVkODMsIDB4MDY3ZDhlMmIsIDB4MTlmZjBkZmMsIDB4NWRjNGRmODksIDB4ZjZmZWYwNjcsCi0JMHhmMjBhMmMzNywgMHg5OTVlNjczYSwgMHgzZDY1NGRiZiwgMHhlYTlkMzdhNCwgMHg3Y2IyMzQ1MywgMHgwZTRkZGY2MiwKLQkweDMwYzA2ZmI5LCAweDMxZTAyM2NiLCAweDE3YzA0Nzk2LCAweDBhOWIxZTU5LCAweDc5NjY1ZTg4LCAweDUwZWJlYzA0LAotCTB4M2IyZmY5NDUsIDB4ZGUzYzA0MmEsIDB4OGRmMDEwMTEsIDB4NGYwMTZhOGUsIDB4ZjgwOGQ0NzQsIDB4MDI0NThlYWIsCi0JMHgxMzQzYmFmZSwgMHhiMWQzN2VmZCwgMHgzYTc3YzA0MiwgMHg2ZmY5NDRkYSwgMHg3YzA1ZGEzYiwgMHhjYTI4MjNhZiwKLQkweGExMTU1N2RmLCAweDgyMDJiY2ZmLCAweDAzMzljMmRkLCAweGY2ZWQ1ZGY5LCAweDJlN2NlZDg0LCAweGY5ZTcxMWQwLAotCTB4ZmFjYWJiMjEsIDB4ZWVkODA0YWQsIDB4ZGYxNGRkMzMsIDB4ZDg2M2FhNjgsIDB4NDQ5MTQ2ZDksIDB4OTFjNDY1ZTgsCi0JMHg4YmY5ODY3YSwgMHgzN2VkYzM5ZiwgMHg3NDFkNDc2YSwgMHgxYjhmMThjNiwgMHgzODFmMTNkZiwgMHgzNDQyYmIwNywKLQkweDMxMjY3YmQ2LCAweDFmYzA3ZTVhLCAweDAzZTUwNGY4LCAweDI1MzlmNTA1LCAweDNlYmQ5ZmNjLCAweGY5ZjA1M2VkLAotCTB4NGRjNjkyZTYsIDB4YWUzNzZjMjksIDB4MDljZGFhZmMsIDB4NDZkYjc5MzksIDB4OGY5Mzg2MmIsIDB4YjIzZTVkNWUsCi0JMHg2MzhjMTQxZCwgMHgyOWI4MTc3ZSwgMHhmMDI2OTI5OCwgMHgwZTYxOGI4MCwgMHg4OGVlYzM5NywgMHgwMTc3ZGUzZiwKLQkweDgxZTQzZTYwLCAweGI5NjNlNTA4LCAweGI2NzBjZGRlLCAweGYxMGE3OTNiLCAweGU1YzM5NGY5LCAweDE0MmYyMTc2LAotCTB4YzI3YWM4NzAsIDB4YjQxZTVjNzgsIDB4YTllNzQ1YTUsIDB4ZGY2MTI0MWEsIDB4ODQ3MTZkNjYsIDB4MWM5MjFmNjAsCi0JMHhjODk1YjYxNCwgMHg3MjI1YzlmNiwgMHhkY2IzZTA1ZSwgMHhlNTg1N2UzZCwgMHg0NzhiNTY2NCwgMHgzMjdlZjIwZCwKLQkweDIyNTVkZWI4LCAweDBjZWMwN2RhLCAweGY3M2RmYzlmLCAweDUxNGMyMjliLCAweGQ0NDRhMTMwLCAweGJkNzJmNThiLAotCTB4YTBkNTQ3NTgsIDB4Y2ZmNDAxNDYsIDB4ZWY0ZTM1MjQsIDB4NDFmNTk2ZWYsIDB4NmJjNTlmZjQsIDB4MzBjMTVmODAsCi0JMHg5Yzc5ZjE4NCwgMHg3Njg5ZDYwMCwgMHgxODVkYjI4OSwgMHhjZTdjMTRlMywgMHhmNDliMjRmMywgMHg5NjQyZmVjNSwKLQkweGRmNjVmYjgzLCAweDlmNjE1MmU5LCAweGU0NGVkMjczLCAweDNmMzFlZWMxLCAweGZlYjlmOWM2LCAweGRiZDlkNGE2LAotCTB4OWE5ZmNjMjMsIDB4MjZiZmVmMzgsIDB4ZjM0YTVmMzIsIDB4ZmY5NDAyYjQsIDB4YzEzZjE5NGEsIDB4NGMxN2U2MGYsCi0JMHhjNDkzNTMxOSwgMHhlN2M2YzRmNiwgMHgzOWY2MzBlNCwgMHgzZjA2MmY5NiwgMHhmNDFiYmEwYywgMHg0OGRiZTU4ZCwKLQkweDRmODkxYWZjLCAweDFhYTlmY2IxLCAweGY0MWJkMjhjLCAweDUxMmY5OTFhLCAweGZmOTUwNWZlLCAweDc1NGNiZTdiLAotCTB4N2FjNmVjZjQsIDB4MmFkYzVhZTIsIDB4N2M2ZGYzZDYsIDB4ZTY5ZmJkYmEsIDB4ODY5MzcwYTUsIDB4ODBjYmRmNDEsCi0JMHg1ZWI0ZjI2NywgMHg1ZDIzNTFlOCwgMHg5YTBiY2YzNSwgMHhlMGM1ZWQ3OSwgMHgwYmJiNmM0ZiwgMHgwM2UzYjQyMywKLQkweDc3OWM1NmY3LCAweDZkMjczZTdkLCAweDhiNWZmOWU1LCAweGEwYTczYTY3LCAweDMzZjFlMDNjLCAweGY2ZWFlNjFmLAotCTB4ODRkYThmYTIsIDB4MjkzNzY3M2QsIDB4ZWE1NGZlMDgsIDB4YjQ1YjlhYWMsIDB4OTU5N2Y4NWMsIDB4MzZiZmFiMWUsCi0JMHg4ZDlhYWJlZiwgMHhlOGRlNzc5OCwgMHhjZDk1ZmYxOCwgMHg2YmQxY2UzMiwgMHhhNmFmNzFmNSwgMHhmNTZlMzEyZSwKLQkweDZiYmI2YjU4LCAweGRhZjBiZjc1LCAweDVkZjk2YjAyLCAweGNiYWZkZDdlLCAweDkxZDgzY2EzLCAweGJhZTU1MjRhLAotCTB4Y2JmMDliNjgsIDB4ZGM3MmJkMmEsIDB4ZTNhZjlkNmMsIDB4MDk5YTc2N2QsIDB4ODBlNjkxYmUsIDB4NzdmMTdhZjEsCi0JMHg3YmQ2MDBhZSwgMHg3ZTA1MDUzNSwgMHhiYzA0ODUwZCwgMHg5YzYyYzI4ZSwgMHgwMWQwZDllYiwgMHgwOWM4OTFiZiwKLQkweDlmZGRjNWJjLCAweDVlOTE2MmViLCAweDg3ZGVkNzZkLCAweDhlNDlmM2RmLCAweGViODUyOTM2LCAweGZiYjVlMzMzLAotCTB4ODliZDE3YTEsIDB4ZTFhZGQ0MzcsIDB4Y2U5NmU2ZjksIDB4NjNiZjQwMmQsIDB4MmZlMTNlOTUsIDB4MTc4ZjczMWMsCi0JMHhkZmU0MGJmZSwgMHg4ZmQ1MTY5OSwgMHgxN2ZlZDk1NywgMHhmOTdhZGFmMCwgMHg4OTdjMDA3YywgMHgxNjAyODdjZiwKLQkweDdjZjg1N2Y2LCAweGUxNmQ3ZTAwLCAweDc5YmY0MjA2LCAweGE2MWM4NTNlLCAweGFmZmQxYjdkLCAweDQ3MjFjZWYzLAotCTB4ZjdmNmM4ZTksIDB4MWIzZjI5YmEsIDB4YmM5Y2IxYWIsIDB4OTJhOTNhOTYsIDB4NTVhNzAxOTIsIDB4YTVhZmJmNjIsCi0JMHg4YzI0ZDg2NiwgMHg3YzU4MDk3MywgMHhmZjM4NjBiOCwgMHhlOGJmOTBjYSwgMHgzMWM4ZjM3YywgMHgxYjNhNjQ2YSwKLQkweGE3YTU4ZDc0LCAweDgxM2ZlNzQxLCAweDQ3MGRjZmFlLCAweGM0OTU1ZWQ3LCAweDNlZTAzNjM5LCAweDMxM2Q5YWIwLAotCTB4ZjY5NDRkNmEsIDB4ODkzODcwMjAsIDB4ZDc3ZTU5MzIsIDB4YTA4N2IyMWQsIDB4ODk2MzFmOGYsIDB4ZDI1ZjE4NTksCi0JMHhiZmE1MGE4OSwgMHhlZjVmNWViZSwgMHgxNjM0MWQ0NywgMHg1M2E3YTZmNCwgMHhiYTVkZjk0NCwgMHhjZmI3MzZjYywKLQkweGQ2NWNmYjEwLCAweDdkZmEyMTVlLCAweDg4YmRhNzE5LCAweDA5MmY5Yzc1LCAweDgyMGY2NDRmLCAweDk5ZDVkYTNlLAotCTB4ZjllNzgzM2MsIDB4MGFiYjU5ZTQsIDB4ZWVjNWJiZmYsIDB4ZDc0MmE2ZGIsIDB4NGZhYmIzNWYsIDB4NTVmNGI4ZjEsCi0JMHhlODQyZWU2ZiwgMHg4NmEzOTNkMywgMHhiOGI0NjdiZCwgMHg3YjhkMWQyNSwgMHgzNTc5NTdjNiwgMHhjOGVmMzhiZCwKLQkweGY1Mjk5YTViLCAweDg1ZTgxNDkwLCAweDhkOGYzZTcxLCAweGYyYzJiYjYzLCAweGUxMjVjYmJiLCAweDc5NzVlNzQ4LAotCTB4MTJhN2RiMDIsIDB4NDlkODVlZDEsIDB4NGZkYzdmODMsIDB4NGUzY2Q5ZTAsIDB4MGZjOGVjMzksIDB4N2UzZjg0MTMsCi0JMHg5ZWYwMjUyZSwgMHg5MjU2ZjMxZiwgMHhiZjY1OWZjNSwgMHg4MWFkZDg1NywgMHhiMzhlOTJkMSwgMHgzMzIzZTI2OSwKLQkweDczZWNhZjE5LCAweDA3ZWI4ODUyLCAweDFiNWRhNTJhLCAweGRkODViOGYwLCAweGQxYjU3YWFjLCAweGE5ZGNmYjAxLAotCTB4NGNiODhiZGIsIDB4ZjQ5OGY3YmUsIDB4NDA5N2RlM2YsIDB4MjZmYzkzM2UsIDB4ZjA1OWE2MTYsIDB4NGIxMmY1MjQsCi0JMHg3YzhhOTRmYiwgMHhlMDZhN2Q0YiwgMHhhOGZkNGIzMiwgMHgzZTBiMTJlYSwgMHhhNTg2NjZhNiwgMHgzOWEyYzY3ZCwKLQkweGJiNGIzYzE2LCAweDdiM2VkMmQ2LCAweDZlMGI0MmM1LCAweDU5NmNhMWQ4LCAweDhiNmQzOTQ0LCAweGI1YzdmZDJkLAotCTB4Y2ZiNGI1MmYsIDB4YTk2MWRlMGIsIDB4NDRlMDYwYTcsIDB4ZDZhZmY3MjEsIDB4YjJkZjhmZmIsIDB4ZTRjZjVhY2UsCi0JMHgyZjQzOTViNSwgMHg5MjhmZGZlNCwgMHhlNjE0ZmJhYiwgMHhkOTY3YjU1ZiwgMHg4NGU1ZTg3YywgMHhlYmFjN2JhZSwKLQkweGM3NjU3ZmIxLCAweGEyOWQ5MDM5LCAweGZmYTYyOGQwLCAweGRkYWIzZWQ1LCAweGUyYjRjYWFiLCAweDhiZmY1ZTk1LAotCTB4YWY1Y2RkNjAsIDB4OWZiMmVlZDUsIDB4YjI5ZTQwYTcsIDB4ZjI5NjFjZGIsIDB4ZGRiYTI1YjEsIDB4YzQ1MzQyOWMsCi0JMHhmOGRiZjg3ZCwgMHhlMTY2NWRhZiwgMHgyZWJkMmM3ZiwgMHhmZTAzODc5NiwgMHhiNDliYjczMCwgMHg5NzA3MmFjMywKLQkweDMwNzJhYzg2LCAweDFjYWI2OWY5LCAweGU1NThmNzE0LCAweDU2MjNmMmUwLCAweGFkODdmMDM5LCAweDY3ZGE1MDcyLAotCTB4MTNiMjgzOTUsIDB4ZjY5ODM5NTYsIDB4MGMwZTU1OGUsIDB4ZDdlNThjZjksIDB4M2U1NTg4ZjQsIDB4ZTUzNDUzNDgsCi0JMHg4YWViZjA4ZiwgMHg4OWY5NTZiMywgMHhiZjUxMGZlNSwgMHg4ZjNjZGZlMCwgMHhmZGU2OGY0MiwgMHgxODVhZmNmOSwKLQkweGZlMjFhZmMzLCAweDc3ZTFiZDMwLCAweDRlNGYwZWNlLCAweDY3ZDU1ZTAxLCAweGY3Y2YxMGE3LCAweGFiY2ZiZTk4LAotCTB4ZjI3OWI3MjcsIDB4NzRlZTllZDksIDB4ZDAyNTc1NjgsIDB4M2FhZTVkNzMsIDB4MGQ1Y2E0YjMsIDB4ODc4ODFkZjQsCi0JMHgxOThmYWZkZCwgMHg1YTU5YzdmZiwgMHgxYTJmZGEwMywgMHgwYmFlNTlmNSwgMHg0ZGFmZDFmMiwgMHgzOWU5N2RjMiwKLQkweDFkZGQ4NDk1LCAweGU3YzcyMDk3LCAweDQ3NThiMjdiLCAweGE4N2IxZWYwLCAweGQyNzFkNzkzLCAweDNlYzBhNWQ2LAotCTB4MmI2YjI3MzcsIDB4YTJmNmZmZDEsIDB4MDc3MDg1MzYsIDB4ZmU4MmEwYTMsIDB4OTcxY2ZmZjUsIDB4MWM3ZWJjMGIsCi0JMHgxNTFlN2I4OSwgMHgyNDE2Y2E0NSwgMHg3ZDYyZWQ0NSwgMHg3YWYzOTczNiwgMHhmN2U4OTZkNiwgMHhiOWViOTUxNCwKLQkweDE5MTJmYWRmLCAweGJkNTI0OGI3LCAweDI5MGYxMTJlLCAweDIwZTIwMGEyLCAweGFkYzhiZDdjLCAweDhlM2QwNjJmLAotCTB4M2QwMjRmYzcsIDB4OWIyYTZkYmEsIDB4N2QzODhhMzgsIDB4ZjA2N2Q4MjksIDB4YTUzZDNiNTUsIDB4ZmUxMTNmNDgsCi0JMHg3ZmVlOGU1ZSwgMHg0ZWZmNTM2NSwgMHgwZWQyNzNhYywgMHg5N2FiOWNiMiwgMHgzMGU0ZGM4NiwgMHhkM2YyN2RkMSwKLQkweGRjNWUwYjVlLCAweDdmNjk2OTkzLCAweGE1OWYxMWY5LCAweGI0MmUxZmRlLCAweGE5ZjY5N2Q0LCAweDQ0ZWNiYzE2LAotCTB4YjRmZGE1ODUsIDB4N2MxNjAyNzcsIDB4ZDJkYWE0N2EsIDB4MzViMzhhZmUsIDB4MjI5YzdjMTYsIDB4NWY3ZmFmZWYsCi0JMHhlM2U5MmY5MiwgMHg3ZGU0NDU2MywgMHhiYTlmZGZkNiwgMHhmNzg4YWI3YiwgMHhlMWFkN2JjOSwgMHgyM2Q3NTM0ZiwKLQkweDRjZTIzNzAxLCAweGRlYzcxY2JhLCAweDQwNGM1Yzg3LCAweGZlYzVjZmYwLCAweGIxODNjZTJmLCAweDZiNDdlOTZlLAotCTB4Mjk0ZmJhZjcsIDB4ZGQzZjUxYzksIDB4ZmYwZGIzZjAsIDB4MDE1NTgyOTUsIDB4ZmRjM2I5ZjMsIDB4ZmJhMmY5ZTQsCi0JMHg2ZDdmODZmMywgMHg4YmQzY2RmOCwgMHg3MjFjZTI3ZCwgMHgyNmNhYmM2ZSwgMHhjOTExYzFlNCwgMHhjN2Q3OWM4MiwKLQkweGZkZjdiMGQxLCAweGJkZTQ0YmU3LCAweGM2ZmQ3NjIxLCAweDlmZTc2MmJhLCAweGVkOTVlYzVlLCAweDcyOWY3MWY1LAotCTB4YzMzNWVkZDMsIDB4NWNiYTMzZjksIDB4NzM1ZjFjMmQsIDB4YjhmOWYyMTQsIDB4Nzk2NzdkNTMsIDB4OWU3ZjdmZGUsCi0JMHhiM2NmYTRjZSwgMHgyZTVjZGU4NCwgMHhiMzY3NWZkNywgMHgzMWEzZjg4OSwgMHg1MmE5OTFjZiwgMHg3ZjM4MGQ1ZSwKLQkweDdlM2JmYjBlLCAweGUzN2RlZWEyLCAweDFmZDg3ODc2LCAweDIxZGRiYzc5LCAweDlmYzcwOGUyLCAweDJjMWI1MTViLAotCTB4MDE0NDNmODAsIDB4ZWY4ZTMzOGMsIDB4N2MwZmUwMDMsIDB4YWUxZmRjMGEsIDB4ZmQxNzZhOTksIDB4YmQ0ODk3Y2YsCi0JMHgxMjY1ZGE4YiwgMHgyNDgwNzk3NiwgMHg1ZGRhMDdmZiwgMHgwYzMxN2VlMiwgMHgxODFjODViZiwgMHhjYzdjNDFmYiwKLQkweDYyZTMyMDUxLCAweDM5OGI4ODgwLCAweDA2MmUzMjFjLCAweDQwMzE3MTFjLCAweGZlNTBjNWM0LCAweGYwMmE4NzVjLAotCTB4MDIxNTFkODMsIDB4MjAyM2JlN2YsIDB4ZDUxZDIzZjAsIDB4YTNiY2ZlMDIsIDB4NzIxYjk0NDYsIDB4ZTMyZjRiMTMsCi0JMHgxZmYwNjYzZSwgMHhhMzczODg2YSwgMHhlNzFlNDYyMCwgMHhlNWY5MjdkZiwgMHhkOWFjZWI1YiwgMHg2ZjljNWJjMywKLQkweDI0YTU2YWEzLCAweGE2ZGJjZjRhLCAweDJkYzg3OTRhLCAweDNiNDA3NDk1LCAweGVkNDhmZmU4LCAweDI5NDVlY2FhLAotCTB4OTAwZWE3ODgsIDB4NDdmYmM1MmYsIDB4NTNmZjg2ZTIsIDB4NmVlODMwZjQsIDB4ZmFhMzU3ZGMsIDB4MjQ2MWY1MjYsCi0JMHhiZmVlMzRiZCwgMHhkMGFjZmJhNiwgMHg4YzdkNThiYiwgMHhiYTU4ZGJkNSwgMHhiZGViM2Y4YiwgMHg4ZDdiZGU1OSwKLQkweGE3YWU4NWY4LCAweGJkMGM1ZjA2LCAweDE2YTQ1Mjc2LCAweDYwNTQyNWY2LCAweGVmN2QwNmFiLCAweGQxZWFiMjRmLAotCTB4YmU5MmE1ZjUsIDB4ODYyM2QwMDMsIDB4NzRkZTdjYTcsIDB4NzY4N2NlMWIsIDB4NTYwN2YwYWYsIDB4OTBjY2I2ZTgsCi0JMHhlYzg3ZTZkMywgMHhmM2UyN2NlMiwgMHhlZDM3ZTNkNiwgMHg3ZGI3NzliNywgMHg2ZWVmOWVhOCwgMHhlMjE1YmZiYywKLQkweDIwMWQ5ZDVjLCAweGRhNWYxZjcxLCAweDczNzY4NGE1LCAweGY1YTA4NmJmLCAweDI1MjExNDdjLCAweGZhZTQ2ZmFlLAotCTB4ZTM1ZmI4MTcsIDB4MzNmM2Q4OTYsIDB4ZjIyMWQ2MjAsIDB4ZTZiNWJjMmMsIDB4NzJmZDZiMmUsIDB4MzNjOTFlZmQsCi0JMHg2MzI3NjBiYSwgMHg5NjU3MGFmMywgMHg0YWEwZTdlYSwgMHg1ZjcyMzdlYSwgMHhkZDEwNWVlMiwgMHhhMTU3MmU5NywKLQkweDg3MzgyOWYxLCAweGNiYjRhZjcwLCAweGNlMzg0NmI4LCAweDIxZjNhZjc0LCAweDhhMmEzZmNlLCAweDBhMTMzZDMzLAotCTB4NzQ2ZTRlNzEsIDB4MTc3YzEzYTgsIDB4Y2Y0MWExY2IsIDB4OWU4MzNjYTEsIDB4ZWFlNzE4NGYsIDB4ZTIzZjc1M2YsCi0JMHg4YmM3Y2Y4YiwgMHg3ZmNmMDU3YiwgMHhiZTc2ZTgyMywgMHhmZjQwYWVjZiwgMHg3YTA4ZjI4NywgMHgzYjQxZjNmYiwKLQkweGU3M2U5OWQ5LCAweGJhMDljNjBmLCAweDdlM2I2MjdlLCAweDk0Y2ZiZTRiLCAweDVmMjhiODc3LCAweGIwMTVjOTQxLAotCTB4YThjNmZiMWYsIDB4NjVkNjYxYzEsIDB4ZmIyMjJkNDAsIDB4ZTFiZjU4OGYsIDB4OTllZTMyNTAsIDB4ZmNjOGNmMmQsCi0JMHhiZDMzY2I0NCwgMHg3YjI2MDVlOSwgMHgxMGVhNWNkOCwgMHhhNmRiYmJmYiwgMHhmZjIyOTRiNSwgMHg4YjlkZGY2MCwKLQkweDVmMWRkZTdiLCAweGNlMDBhNjg2LCAweGIxMmRlM2Q3LCAweDc3YjIxOWZiLCAweDQ3MjExNTMzLCAweDYxM2ZiYzAzLAotCTB4YjExNWFhZWYsIDB4MDQ5N2I2M2YsIDB4OTg5YjdiM2QsIDB4MDJjZTNjOWIsIDB4MzQwNjhmMGEsIDB4OTZkYTAwZjIsCi0JMHgyMzA3YzEwYSwgMHhhZTEwZDAwZiwgMHhiOWI4ZmIxMCwgMHg4MTMzYjk3MywgMHhkZTc2NDQ5YiwgMHg4YmUwOTU1YiwKLQkweDM5MjIwN2U2LCAweGM3ZmUwOGI0LCAweDliODI3OTQ4LCAweGRlMzE1NTA2LCAweDg4NjcwNmY3LCAweGNkMjgxZTcxLAotCTB4YzZkMGZlOTMsIDB4MWZlMTZiZWQsIDB4MzkzNGY2NWUsIDB4NTM4ODg3NDEsIDB4YTc0YjEzOGUsIDB4ZjNjYTk0M2YsCi0JMHgxZDNjMTMyMCwgMHhiYWRmZGQxMywgMHhlN2IwOGEwZCwgMHhjMDJiYTBlYiwgMHg5ZWMyMmJiNywgMHg1ZDY3ZjgxYiwKLQkweGYxMjU1ZTNhLCAweDNjNDkzNzNiLCAweDUxNmNmNGUyLCAweDExN2VlNDUyLCAweDAxM2VjMDJmLCAweDZiZGMxZmIxLAotCTB4MDVmMWU5ZjcsIDB4ZmIxMDAzZWMsIDB4MThlYzM5NDAsIDB4ZTAzMWQ4NzAsIDB4NjFjMDYzYjAsIDB4Yzc2MTAwYzcsCi0JMHg2YTk0YmU1MCwgMHg0M2U3MTE3MiwgMHhhY2QyYTMzZSwgMHhhYTZlODMyNywgMHhjODI1ZjkzNCwgMHhlNDcxOTg2NywKLQkweDkxZWRjYzMzLCAweDIzZDczMGNmLCAweDQ3YWU2MTlmLCAweDIzOGNjMzNlLCAweDhmNmU2MTlmLCAweDQ3MTk4NjdjLAotCTB4MWVkY2MzM2UsIDB4OGUzMzBjZjksIDB4M2RiOTg2N2MsIDB4N2FlNjE5ZjIsIDB4ZjVjYzMzZTQsIDB4NzE5ODY3YzgsCi0JMHhlZGNjMzNlNCwgMHhkNzMwY2Y5MSwgMHg1OGFlZGVkZiwgMHhiM2I3MWRmMiwgMHgzNWRjODZmOSwgMHhmMjEzNDhlZSwKLQkweGE2YWYzNjMxLCAweDdlZmU3MjBmLCAweDM5NzdkN2UyLCAweGEzZTdjMWYzLCAweGViYjcyMTJiLCAweGM5NTQxMzVhLAotCTB4Yzk2YWFlZTcsIDB4M2U0OTFiNzcsIDB4M2UwYWQ3ZjcsIDB4Nzg5MmViZGYsIDB4MWRlMTlhOTUsIDB4MWU0MjJmYzYsCi0JMHhlNjQwYjJhMSwgMHg0NzkxMDAxMSwgMHgwMTFlNDQwMCwgMHg0YTg0NzkxMCwgMHgwMDIzY2M4NywgMHg3MjgwOGYyMiwKLQkweDkxMDAxMWU0LCAweDFlNDQwMDQ3LCAweDA0NzkxMDAxLCAweDAwMTFlNDQwLCAweDNmNDA0NzkxLCAweDkxMDAxMWU0LAotCTB4ZjIzOTQwNDcsIDB4MjNjODgwMDgsIDB4YWYyNGZjYTAsIDB4NjMwNGY5MDMsIDB4MGJhM2YwNWQsIDB4OTYzY2Y3MmMsCi0JMHhjZjNkY2I0MywgMHg0N2UxYzE2YiwgMHg4ZmMzZGI5YiwgMHg4ZmMzZDczNiwgMHg4ZmMzZDczNiwgMHhhM2YwZTMzNiwKLQkweDQ3ZTFlZGNkLCAweGE5NTc3MTliLCAweGZjMTdlODRmLCAweGY4M2Y3MzY5LCAweGI4YmM2NmQzLCAweDYyMTJmODJiLAotCTB4ZmFlZmQ3NDQsIDB4OTE4MDhiZGQsIDB4YzU3MWU1MjQsIDB4NDFlYzY3Y2IsIDB4NGY3YzhjNWEsIDB4NGRjOTVlMjQsCi0JMHg1NDVjZjk1NSwgMHgxOTJiOGI1YywgMHg4NDRiMDZkNywgMHg3ZWExNGZkZSwgMHhmMjJkZjgxYiwgMHgyZDM3Y2NiNywKLQkweGNkZTQyMTRjLCAweDE0YzhiZjhiLCAweDUxM2U0NmY1LCAweGZkZGYzMWZjLCAweGU3Zjg0OTA3LCAweDVkNzI0NWRkLAotCTB4YmM5NTdmNDYsIDB4N2RhMzQwNzYsIDB4NWRiZTFmMTQsIDB4M2I0NmZjZWMsIDB4ZWI0ZDJmNjEsIDB4MWY5YjBiZTAsCi0JMHhiZGZmN2NmOSwgMHgyY2FkOTI5ZSwgMHg4YTZkN2I0ZiwgMHhiMmY3NGZmMCwgMHgxODcwYjU5ZiwgMHhmNzRiMzRiYiwKLQkweGY2ZGFmNjliLCAweDdlZTA0YjFmLCAweGJhOGEwZGZkLCAweGU4OWU4Nzg3LCAweDA5NjczZWEwLCAweDAyNTZkNGU4LAotCTB4ZDRjMjYyM2YsIDB4ZDQ3ZjNkNTQsIDB4NzE2MTYzMzYsIDB4M2M0NmRkNzQsIDB4MDA0NGVkOGYsIDB4ZmQ5OWU3NzksCi0JMHg3OWUyNmFlNCwgMHhiOTA3ZmQ2NiwgMHhiOWNmZTE5YSwgMHg3ZTgxMWZhNCwgMHgwZTRkY2ZiOCwgMHgyNjNkODEyYSwKLQkweGFhN2NiZWY5LCAweGUwYjRmZjNjLCAweDVjNGQxOWRhLCAweGRiNWY3OTNlLCAweDc3Zjg2NjhjLCAweDhmZGZiMjA5LAotCTB4NzQxNjQ4OWYsIDB4YjJhMzYxYmMsIDB4OTlmYmNlYzcsIDB4YmIwMjhmYjksIDB4YmU4NTVkYjksIDB4YmNmYmM5ZWUsCi0JMHhhZjMxMjZhZSwgMHhjZTZjZDVkNywgMHg3NWNhZWZiZiwgMHhhNDVmNzBmOSwgMHg4OGE2NjU0OCwgMHgzYzg0MmJjNSwKLQkweGRlMzc0MTlkLCAweDFmZDg4YmRmLCAweGM0M2VmODliLCAweDFkM2Q1NzY1LCAweDI0ZDBmZGVmLCAweGE5M2RhZDFmLAotCTB4OTFjZDdjMTYsIDB4MjY4N2VmMmMsIDB4MWY4NTViMzksIDB4ZWVjNDE3MmMsIDB4MTZhZGNlMjEsIDB4ZjVhYmU1OWQsCi0JMHg5YTk1YjdmMiwgMHg5ZTc4NGJjZiwgMHgwYmJmNzc1NiwgMHgzNTM1OWJmNCwgMHg2YzM0NmFiNSwgMHgyNzUyNTFmZiwKLQkweDM2YTZlZTQwLCAweGViYzMxYTZjLCAweGQ1MDE0MmQyLCAweGRhYmQwM2VlLCAweDkzZjgxMjVlLCAweGUyMTcwMjM1LAotCTB4MjdkNjJlNTMsIDB4NDE0OWMzY2UsIDB4YTRjODljMjUsIDB4ZGJiODIxYjgsIDB4ZWJmMTlhMzYsIDB4ZTk5YzFiODMsCi0JMHg1NDhmYmY2OCwgMHhmODkzMDNiOCwgMHg3NDQ5NzY3ZiwgMHhjMjc0NDU1ZiwgMHg1ZTQwYWYxNiwgMHg0OTk0NzdhOCwKLQkweDdjNzJkOGZlLCAweDU3ZTJmMjBmLCAweDU4ZjkwNDlkLCAweDYxM2FmMGUwLCAweDhkZmQ2MjZmLCAweGVjMGY3N2Q4LAotCTB4ZWMyYWRjN2YsIDB4MjFkMzlmNTQsIDB4M2ZkZDNhZmMsIDB4YjVjYWYwNmEsIDB4MjlkMWI2N2UsIDB4NDM4NjhmZmMsCi0JMHgzZWEwN2ZlYywgMHhkZTMwZGZjNiwgMHhhMWRmYjA0MywgMHgxZjhlNzE4NiwgMHg3MjBkNGViYywgMHhiN2RhY2I1NSwKLQkweDczODNiYmM1LCAweGE5YmRhMTc5LCAweGYyZTdkNzJjLCAweDAxNTJkZmY3LCAweDBhZWQ5MGJmLCAweDBkZmIyOWVjLAotCTB4Yjk2NTRlNzcsIDB4NTJmNGQ4NmIsIDB4OTE1ZGVlMzIsIDB4NmZlMTAxZTAsIDB4YTFmMWI2N2MsIDB4OTA1ZjE5NjQsCi0JMHg5ZDI2ODlmOSwgMHhhNmZjNDY0ZSwgMHg5MzQ3ZTc1OSwgMHgwM2U1ZWVmZSwgMHhhOTZjNWJiNiwgMHhmMTg2ZWU3MSwKLQkweDJiZDc4MTVlLCAweDNmNTg4YWZjLCAweDliZmJjODkxLCAweDgyYmY1Yzk5LCAweGIxOTViM2Y3LCAweDM2MWFkYmU1LAotCTB4ZmVjNWQyNjcsIDB4YWU2ZmUxYTIsIDB4Yjk1ZGU3ZDIsIDB4YjdkZTI5ZDEsIDB4Mzg5MGEwYWMsIDB4YWM4NjU2MGYsCi0JMHhmZWU5NTdlZCwgMHhhZGE3YWFlNywgMHhjYTk4M2ZlNSwgMHhhMWYyMjc3ZSwgMHhkZmE5ZGY4NiwgMHhkYmQ0ZWU5MywKLQkweDdiZGViYzM0LCAweGRhN2JmMGIzLCAweDUwNzVjODljLCAweDA3ZTkwNmRkLCAweDRkMGE3ZWQxLCAweGI1Y2Y4MDUwLAotCTB4Nzc1ZTMzYzUsIDB4YzMyYWEwMjgsIDB4YmE5YmNkYzgsIDB4OTMxZjM0M2YsIDB4MGMxNzNkMzIsIDB4YjIzYjA4MjYsCi0JMHg4MTEyZjA3MCwgMHgyOTk4MzJkZiwgMHg4NTgzYWRlMCwgMHgxOWIxMWNiMiwgMHg0YWE0NzNlNiwgMHhlM2M3ZGQwOSwKLQkweDQxZmJhNWJmLCAweDI2NWUwZjM3LCAweDE5ODIwN2VhLCAweDU4MDc4ZTQyLCAweDE0YzUzMThlLCAweDE2NWQzZWRkLAotCTB4ZDYxMTdhNTAsIDB4MzZkNGVmOWUsIDB4ZjlmYWUxOGQsIDB4OTVmODQ5YmIsIDB4ZTI1ZmMzZDcsIDB4OWZmMDQ1OGEsCi0JMHg3OTA3YTE0YSwgMHg2ZjlmMTg1NSwgMHgwZjIxMzQ2ZiwgMHg5NzU2YjA3YSwgMHgxMjAzZDY3YiwgMHhlYzIwMjM3NiwKLQkweDEwODJlNTU5LCAweGQyMmM5M2RlLCAweDZmYzBkYmY2LCAweGUwYjVmZTQzLCAweGViZjAwNzI5LCAweDU3Y2I4YTgzLAotCTB4ZTIxNWVlMjQsIDB4NzdjODZjZmUsIDB4MjdkNDFlYWMsIDB4OGYyNmYxZWEsIDB4YzUwZDI3OGMsIDB4NWU1OGIwOWIsCi0JMHhjNWI1MDUxYSwgMHg0N2FmYWUwMSwgMHg5ZDEyZjA2YywgMHhhNGFhNGNiMSwgMHg3N2RmNTkyMiwgMHg5MWJjNWI1MCwKLQkweDM1M2ZiZGNmLCAweGIzNjc1MTFlLCAweGIzZjU3ZTA5LCAweDhhMDdiNzlmLCAweDMyYWEyNzRhLCAweDk0ZGIyN2EwLAotCTB4ZThiZWFkOTIsIDB4OWYyODllN2EsIDB4YmE2NjUwMzMsIDB4ZjVkNTJmMjcsIDB4MDMyZWY1OGEsIDB4ZGY3NThlZjcsCi0JMHhjMzQxOTA5ZiwgMHg2YzA2MDVmOCwgMHhiZjQzM2E2NCwgMHg3NzIyNTNlYSwgMHhmZWVhNGMyOSwgMHg2NGE4MTRhOSwKLQkweGJlOTJkNmQ2LCAweDc5ZmUyNDRmLCAweDNjNzU4YjlkLCAweGRmZjZkMGY3LCAweGZhMDhmMTZlLCAweGQ0ZmNmYzA4LAotCTB4NDU4MzhiMzUsIDB4YWMxZDg2N2YsIDB4NzdkMDFjNTMsIDB4YWRiZTBlYzMsIDB4YjdhMGU3NjgsIDB4M2NjOGVlYWQsCi0JMHhhOGIxMzVmMCwgMHhjNWJlMDVkZiwgMHg2ZGI2ZTdkMiwgMHgzMTI3ZGIzZCwgMHgyNGNiNzIxZCwgMHg1ZDVjZWFmZiwKLQkweDgwYjhmMTRlLCAweGQzZGM0ZTQyLCAweGI5ZTQ4YjFhLCAweGVlNWYwZTQyLCAweGYxMWY5MTEyLCAweGIxOWZiODg5LAotCTB4NmZlMDBmZWYsIDB4ZjQ5NzQzMGYsIDB4YzM2ZmU5MzIsIDB4YTRiOWY2M2YsIDB4ZmYwODBjN2YsIDB4ZTA0ZmVmMTgsCi0JMHg3Zjg3MDMxZiwgMHgxOGZmMDgwYywgMHg4MThmZjBlNSwgMHgwZTA2M2ZjMywgMHhmYzM4MThmZiwgMHhjN2Y4NDA2MywKLQkweDE2ZDg3ZjI4LCAweGYzM2Y3NTM4LCAweDY4NWI1MWYzLCAweGQzOTY2MWZmLCAweGVlNmI0N2M3LCAweDUxZWY5ZTMyLAotCTB4MjM4ZjkyZWEsIDB4NjNmYjEzNDgsIDB4NjI3NjExYjksIDB4N2NiMTNlYzgsIDB4NzJhM2NiYjksIDB4ZjRmZGI0YjQsCi0JMHg1NDdlNWIyMSwgMHg3Y2I2OWE5ZSwgMHhkYzI5ZjNiYSwgMHg4NDFmZDk4MywgMHg5NDViNmIzZSwgMHg5MTk0ZGM3MCwKLQkweDNiODllY2U1LCAweDNjYmU4NDEyLCAweGQ4NGI4ZjcxLCAweDg5ZDczYWRkLCAweDUxNzlkYzk3LCAweGZlZGJiZTdhLAotCTB4Mjc2OTRlYjcsIDB4M2M3YzEzYzMsIDB4NzhiNmUyZWUsIDB4ODlmZjc2MTUsIDB4YWMxYzlhZjIsIDB4MTU0OGIxMzcsCi0JMHhkOWMwMTk3YywgMHhiMjU2Zjg4ZSwgMHhhNWYyODc5NiwgMHg0Y2U1ZTI3NCwgMHg1N2ZmNTc2ZSwgMHg3ZWEyZTdhZiwKLQkweDE3M2NkMWNkLCAweDExYzM2ZmVjLCAweDFmNGNlNmZmLCAweDIxMTM2YmZhLCAweGFmMWUwZGFmLCAweGVhYzVmZTBiLAotCTB4YmNlMmE5OGQsIDB4NzE5MGNmYWQsIDB4OTE0MDk2NWMsIDB4MzFmODMzMDcsIDB4ZGZjNjRjYmIsIDB4ODBlZjc5ZmEsCi0JMHgxMjdiZjQxNywgMHhjMGI5YzgxMywgMHgyZGYyNGVkMiwgMHhiODhjZGY1NiwgMHgyYjVjNmM2MiwgMHg3Mjc5NWYxYSwKLQkweDIyZTIzZTRiLCAweGY0ZWQ0OWEzLCAweGM0MmY0YzVkLCAweGQxMjU1YzNkLCAweGZjNmM0YWI4LCAweDVkNWY0ODYzLAotCTB4MTllNzg5NjQsIDB4N2U5OTRkNzAsIDB4YTllZmQ3NGYsIDB4ZDRmNzQzY2QsIDB4ZjAxOTc5YTIsIDB4YmM1NDFmZTcsCi0JMHg3OTM3M2Y4OCwgMHg2NzRlYjc3YywgMHg4OWNmYTliYywgMHgzZjM0ODgxNywgMHg2MmNhZTdjZCwgMHg4YWZiZmZiYywKLQkweGJkZjgwZjc3LCAweDU2ZWMyZmRlLCAweGViYzI3ODFkLCAweDIxNTFkYTY5LCAweGM0MjliNmY0LCAweGZhYzhkNDcwLAotCTB4ZGVjMWU0YmQsIDB4NWY2MTlmOWMsIDB4ZWIwYjgwZTEsIDB4NWMwNmYyNmMsIDB4YTc3ZjI2NjksIDB4OTgwOTRiYjEsCi0JMHhmODE5ZmRkZiwgMHg4ZTMyNjVlZCwgMHgwN2Q3Yzc1OCwgMHhmNWI2ZWZkMCwgMHg4OGE1YWU3OSwgMHg4M2RiYjI1YiwKLQkweDc0NmI2ZWY3LCAweDcxZmEzMTM5LCAweDYyNWVmMTNiLCAweDBjYmQzZTdlLCAweDdkZTdlYWI5LCAweGJlNjE2ZWMxLAotCTB4NGJmOGQzMTIsIDB4N2U2OWJlMzEsIDB4YjVmYzJmNmUsIDB4NjI0OTY1OTUsIDB4ZWYyZjA2YmMsIDB4MmJkMDBmM2IsCi0JMHgxMDc0YzlkNiwgMHhjZWRmZWE3NCwgMHgzY2M0ZjllMywgMHhlMThkZWU4MiwgMHg3YWM1NTM5MCwgMHhmMTgzNGVmMCwKLQkweDEzOTBkZWM1LCAweGU4ZGQyY2YzLCAweDZkN2VmMTE3LCAweGRiNDc5YzliLCAweDg2MmFlYTkyLCAweGJhZjBlNzNmLAotCTB4MWU3ZWNjNzIsIDB4YjJlNDFkY2IsIDB4ZDFmYTk3MGUsIDB4MGZjMmJkNjIsIDB4YTUzYTYyNmUsIDB4NjM0Y2ZmYzEsCi0JMHgzMTczZDdiZiwgMHhmNWY0MWFiZCwgMHg1YWE1NzUzNywgMHgwN2FlYzZmZCwgMHhhZDRmZTA5ZCwgMHhmMmM0YWU3ZSwKLQkweDhlNWQzMWUxLCAweGNhYmM2ZTk3LCAweDA4ZWZlODQ1LCAweDUzM2VmMGI4LCAweDZmZmRlOWQzLCAweDIyYjdlMzZiLAotCTB4ZmRkYjUyM2YsIDB4ZjE4ZjMzODgsIDB4NGZkMjY1ZWQsIDB4NDY3NDBjN2QsIDB4M2MzZjM4M2MsIDB4ZmE1M2VmMDEsCi0JMHhmNzhiYzZkNywgMHgyZWRlYjViNiwgMHg3YTIxZGZiMSwgMHg4MWY0YzQzZiwgMHgxMWFkZTI1ZiwgMHgwOTM5NjZmNCwKLQkweDUzNWFmZGUyLCAweGQxYmY5NWI3LCAweDcxODkyNGY1LCAweDg0MWJiYTliLCAweDY4NzMyZGZlLCAweDFkNzlhZjJlLAotCTB4YTA5ODVlM2IsIDB4NTk2YTVkMzAsIDB4M2Y5YzE1ZWYsIDB4ZjIxNzJkNWUsIDB4NWJhMWU2NzMsIDB4NzkzZWM1NzMsCi0JMHg5MjczYTA5ZCwgMHhkODg3OWJlYSwgMHg5MDhkY2IwNCwgMHhlYTdlNDM2YiwgMHgxYjNlYTU0YiwgMHg5MzJjMWRmMywKLQkweDY1ODM5Y2YxLCAweGJmZTljN2MzLCAweGI2OWI0ZjRkLCAweDcxMDA1MDM1LCAweDE1NTI0Y2JjLCAweGQ0ZjVkYmU1LAotCTB4NWY0MzRmZDAsIDB4NjUzOGY1NmIsIDB4YTQwNWI2ZTMsIDB4OWYwZGVjOTksIDB4MGRjZjZkZGYsIDB4ZGQwMTlmNDMsCi0JMHhmOWQ2MmM5ZSwgMHg5MTdjZjRjOSwgMHhmN2JhZjE0YywgMHhlNWQ2N2U3NCwgMHhlMzFlZjU1YiwgMHg3NTU3ZGM2MSwKLQkweDEzOWJhZmJkLCAweDI4YjZiMDllLCAweGI3OThkZWRhLCAweDgzZjY0ZDJlLCAweDVlY2U0M2ZjLCAweGY2ODJlOWQ1LAotCTB4ZGQ3YjQ0ZWIsIDB4YTM3NmU5OWUsIDB4ZWM2ZWM4NzEsIDB4YmIwZTk0ZGIsIDB4NzkxMTVmYjEsIDB4YTVkYjc1YWIsCi0JMHg5OWVlYjc1ZiwgMHhmYWRmMTEyNCwgMHhkZjg3NzVmNywgMHg5ZGRiODViOCwgMHgzZDc3Nzg3YiwgMHhhYmFjNmJmNiwKLQkweDQ0ZWQyYzI5LCAweGIwNTNmYjMzLCAweDczZjRjYjFiLCAweDdiNThiM2JmLCAweGM3YTRjY2E3LCAweGNjZjc3ZjRkLAotCTB4ZTJjNWU4NDQsIDB4ZGY5OWZmMWUsIDB4MTg3N2Q4OTIsIDB4NjdiZGU2ZjYsIDB4MGNmNmYxN2UsIDB4MzU3Y2Y0NWYsCi0JMHhjYjc0YjFmNiwgMHgzYzFiMzhiZiwgMHg3ZGM5YmE2NiwgMHgyYTVjMmQ2ZSwgMHg1ZjgxMzlkZSwgMHg2ZTM1N2ZiOCwKLQkweDgxZGU0NDU0LCAweGZmYzI1ZGRhLCAweDJiMWRmODM0LCAweGJmYWMwZDA3LCAweDFjYTg5ZThkLCAweGM5MWZmYzE4LAotCTB4ZTUwZDcyNmYsIDB4MGRmZjI0ZTcsIDB4NjA3MjFiN2UsIDB4MTNlMGRiZjAsIDB4ZjkzNTljZTEsIDB4ZmZiYWM2ZmQsCi0JMHhiMTdiYWZhMCwgMHhlYjVmYmYyZSwgMHg0NTc4Yjc3YSwgMHhkMDk5NmI5ZSwgMHgyMzU3M2NmNywgMHhhZmFmNWVlNCwKLQkweDBmOTZiMjZkLCAweDY0M2JjOWYxLCAweDJmNDMzN2RmLCAweDlmMjQ3YTA2LCAweDY1MzliNjA2LCAweDQ1ZGY3MjFjLAotCTB4YjljNWNhN2MsIDB4Yjk2M2FjNmYsIDB4ZDY2YzZmMWUsIDB4NzRjYjg2ZTMsIDB4OTRmOTk4M2YsIDB4NmE2NjVlNTQsCi0JMHg1M2U0ODRmNywgMHhmZmFmYjNlMywgMHg2MjdkY2ZlYiwgMHg2ZDhlZDI3ZiwgMHhlMmZlMTM4ZiwgMHg4MmZkOWVkMiwKLQkweDFlNWJiNTVmLCAweGJiNzFlNjc0LCAweDc3MTk3MjljLCAweDZkZjNiMjFjLCAweGU3ZTIyZjdlLCAweDc2ZWNiNzhiLAotCTB4Y2E3M2ZmNDIsIDB4ZTU2MmRkMjUsIDB4MDc3ZjRlYmQsIDB4ZTcxNWQwNmIsIDB4ZjczYTYyOGYsIDB4N2JiMGY2OGMsCi0JMHhmNTllNzlmYiwgMHhmMTkzZTM2YiwgMHg2Nzk4YzZhZSwgMHhlMzk0Yjk1ZSwgMHgzNGQ0YjZjNiwgMHhkNmQ4ZDdjYywKLQkweGFiZGMwM2YwLCAweGFiMWZiYjBjLCAweGE1ZTNhNzc3LCAweGYxZTUyYzNlLCAweGFmYTc5N2EwLCAweDE1ZDc3MzUyLAotCTB4MzMyZjljNWQsIDB4Yzk3MmFjZTAsIDB4NzkzMTFmYjcsIDB4M2IyNThlZjEsIDB4ZTIyN2U3YjEsIDB4MDQ5YWM0MWQsCi0JMHg4MmU1ZjkxNSwgMHhmMzA4NDg4MiwgMHg2ZWIxOGU0MiwgMHhiYzQ1ZGIxNywgMHg4OTY4Mjk4NywgMHgxNDc1OGE3YywKLQkweDAyZmY3YzkwLCAweGYzMjY5NDk4LCAweGVmOGNlOTFmLCAweDMwNTc2NWUxLCAweGQ4NGJiN2NjLCAweDIxMDdkM2E4LAotCTB4ZThkM2Q0MzQsIDB4MWZmNjE5NDgsIDB4ZjI0NmI3NmIsIDB4MzRmOTBjMmIsIDB4NTNiNTg5YzYsIDB4Yzk2ZmVkMjMsCi0JMHhlOWRmZGM3NywgMHg1MjVlM2QzYywgMHg3OWJhZTZhOCwgMHg0ZTFmZmFkZSwgMHhmYTNmMTE1MiwgMHgxMmJhN2RiNiwKLQkweDY4NjliZTY0LCAweDE1YWMyY2JmLCAweGI3ZWNjMzY5LCAweDQ2ODNkZTQwLCAweDU1Nzc2ZmRlLCAweGJkZmIzMGZhLAotCTB4ZWJhYzBmMjgsIDB4N2JkNmYxODksIDB4MjVkMjNmMjgsIDB4MTVhNzIzZjMsIDB4ZGZiOGI3M2UsIDB4ZTJmMWI1ZTksCi0JMHgyZmIxOTliZCwgMHg1ZGZmM2UyMywgMHg5NDc3ZTdkZiwgMHg4YjcxZTlhNywgMHhjOWZjMTI0OCwgMHhmZjVkMDRiYSwKLQkweGY5NDcxMmMzLCAweDcxYjk1MzAyLCAweDQ2ZjQ5ZmRlLCAweGY2NGNkMjkyLCAweGZkMzZjM2Y5LCAweDc2YzhhNDNjLAotCTB4MWY2ZjgzMTEsIDB4OWM3Mzg4NGYsIDB4NjQ5ZDNhZWMsIDB4Y2E3YzgyMmIsIDB4ZDZmZDE5ZjUsIDB4ZWQ5M2Q1M2IsCi0JMHhlMjliNzNiMCwgMHhmNjZlZmJjNCwgMHg4ZTIzMzY5YiwgMHgxNTRjMWNkNCwgMHhkYWRiOTlmMSwgMHhlMGVjY2Y0YiwKLQkweDk4ZGI2ZTcxLCAweDVlYmYwYWFkLCAweGU5OTdmM2Y3LCAweDdkNzEyZmY2LCAweDY4NjllNmMzLCAweDBiY2YyM2JmLAotCTB4NTNkOWJlM2YsIDB4MmRmYzQyZTMsIDB4MmI4MTdiYjEsIDB4ZjJiZGY4NWYsIDB4YWJlNDYwMWUsIDB4MDM1NDJiZDYsCi0JMHhmYjBlNWJmZCwgMHhiZGIyYmQwOCwgMHg2NmYzODA1MCwgMHhmZmU5MGVmOSwgMHgxNmQxYjdjZiwgMHg3NWM3M2JlNCwKLQkweDgyY2JjY2Q2LCAweGE4YTlkODdkLCAweDE3NjkyN2YwLCAweDdlZTM1MWRiLCAweDY5MjNiNmM2LCAweDcyY2VjZDRhLAotCTB4OTYyYmViZDAsIDB4MzJmZjFlM2IsIDB4ZWM3NmIxOWMsIDB4N2I4MDI3YTcsIDB4ODE3ZmIxMjcsIDB4YTAzZDYwZmQsCi0JMHhiNGI5NTY0YiwgMHg0ZmJiMjc4ZiwgMHhhMjhhZjkyNSwgMHhiZjUzZmNmNCwgMHhjMmU0MzE3ZiwgMHgyMzM1OWJjOCwKLQkweGYyMGEzM2VlLCAweGY5MGU5NzUxLCAweDYzZjNkMjY4LCAweDBhZTdiYjliLCAweDRkZjc3OWJjLCAweDRlOTczYmUyLAotCTB4NjQ3YmU2MzQsIDB4MGY1NTgzZDMsIDB4NzMzZTU5MDcsIDB4YjUzNDdhNzUsIDB4N2UwMWJkY2UsIDB4NzEzZDhhZDEsCi0JMHhlMzVlZTJhOSwgMHhmZDlhZTYwYywgMHhmN2RkYTZkMCwgMHhjZTVlZWY4YiwgMHhkZjE3OGVlZSwgMHgxNzdhNTRiZCwKLQkweDNlZjJhNjU0LCAweGY1NGFlZDk3LCAweGMyZTc0ZGRiLCAweGRkZmViYTJiLCAweGYyZDczYWQxLCAweDhmMzM0YWZkLAotCTB4N2ZmMWU1ZTksIDB4ZGUyODkzZGYsIDB4YTVkZjE5MmYsIDB4OGVkNmU1NWMsIDB4ZmJlMzRlYzEsIDB4ZjkzZWU5OTQsCi0JMHg2ODk2NGE1ZCwgMHgzZTM2MWJlZiwgMHgxZDMzYzA2ZiwgMHhkMzA3M2JmMiwgMHhkNDM3MzY3NywgMHhkNjk2ZmY3MiwKLQkweDY3MThjOTAzLCAweDk1NmY0M2Q1LCAweGQ3MTA4NTMzLCAweDFhN2MwMzdhLCAweDg3NjZjZWZhLCAweGY5YTZjZWZjLAotCTB4NzdiZmUxYTEsIDB4M2U0MzVjODEsIDB4NGIyMTFjNTcsIDB4NTBiNmYxN2UsIDB4YjU0M2YwOGEsIDB4ZWY5MGI5MzAsCi0JMHhmYzI0YmNkNiwgMHg2YTc2YjNkYywgMHhmODZlYjljNywgMHg0NDc5NDYyNSwgMHg5NGQ5YzNhNywgMHg3ZmYwNWNhZSwKLQkweDcyNDdkZWU1LCAweDljN2M2ZTcxLCAweGJkYmFmMTI0LCAweDc2MTJmZWI3LCAweDRlMzI3YjQ4LCAweDEyMGVkZmZhLAotCTB4NTA2MzZkZmUsIDB4ZjdjNmNiZmEsIDB4MWJhYTQ0NTMsIDB4ZTU3M2YwZjcsIDB4OTViYzYyODksIDB4YzYzODc3ZmEsCi0JMHgxMGJmZDhiYSwgMHhhODNiMWZlNSwgMHhmN2MwZWIxYSwgMHg3N2U3OTAzNSwgMHhmMDY2ZTExZCwgMHg0N2Y2NWRmMywKLQkweDQ1NzhlZjkxLCAweGJiNzdiZjk3LCAweDdiYzRmM2VjLCAweGY4MDQ1NjIyLCAweDFkNzZlZjE1LCAweGQxMWU0MjQ4LAotCTB4ZWNhYWMzZjAsIDB4ZjBlYzA1ZWYsIDB4N2UyOTBlOTcsIDB4NDU4OWMzOWMsIDB4ODYzZGM0MjcsIDB4NmFjOTc4ZjQsCi0JMHg3NWI3OTRhZiwgMHhjYmNlNzMzZiwgMHgyYWZjMmQxZSwgMHgwOGUyZDI1MSwgMHhkN2UzODZiYiwgMHgzNGRmYmExZCwKLQkweDJmZGMxZjg0LCAweGZiMmQ2NWVlLCAweGQyZDA1ZmE0LCAweDA1Zjg0YTczLCAweDdjNjE5Zjg2LCAweGRmNmFiNzQ3LAotCTB4MTgyN2UxMjksIDB4OTQxZjU2ZmQsIDB4MjgzZDY5NzQsIDB4NmQwYTFiY2IsIDB4YTAyNWJjNDYsIDB4YWNiZWUwMTQsCi0JMHhkOTcyN2MwOCwgMHgzODM2NGJmZCwgMHgyNWU2ZjhjYywgMHhiZDAwMGExYiwgMHg1ZmE0M2M3YSwgMHgwYjViZTVmOCwKLQkweDMzZWUyNTdmLCAweDcxZjUxYmFkLCAweGU2OWE3NzE5LCAweDQ2MzY5OTRiLCAweGU1YzVjNzdlLCAweGVmZTgzZGUzLAotCTB4NWFkZmRjYjMsIDB4NTBmYmNhMGYsIDB4OGI2MTM1YjgsIDB4ZGFiYjE3NzgsIDB4NmNlYzAwZTMsIDB4N2NmMzg4ZjUsCi0JMHgxMGFkOWI1NywgMHg0YTAzYzllZiwgMHg4ZWU3ZjA4MiwgMHhjNmI5ZWZlYSwgMHgzYzRkZmFhYywgMHhkNDU5MDRlMiwKLQkweDEzY2I2YmRmLCAweGE3ZjJiOGVmLCAweDE0MTkzY2YxLCAweDhjYmFlZjE0LCAweGZjMmU2N2VmLCAweDE4YTU0N2UzLAotCTB4ZTQ1Yzc2N2YsIDB4OTc4MDIyMDAsIDB4MDk2YzdiNGUsIDB4NTNiMzI1ZjIsIDB4ZjhhMGE1MjIsIDB4OTUxZjg3YTUsCi0JMHgwMGU0NDY3OCwgMHg2MGRlNTBlMiwgMHhlOWNhOTJmNywgMHg2OTVjNDY3ZiwgMHhhZjg5NjJiZSwgMHg2NTY4YWRiZiwKLQkweGUwZWI0MTIwLCAweDZiOGM5Nzc5LCAweGZlN2M4YmY0LCAweDhlNTI2OThjLCAweDdiZTMxY2M2LCAweDVmNTFlZTI0LAotCTB4MzAzZGM0NzgsIDB4Zjg5YjU0NjMsIDB4MjI4YThiYWUsIDB4MTQ3NzY4YTUsIDB4ODIzZTU4N2QsIDB4ZjA4NDI2NWYsCi0JMHhjOTNjOGMzZSwgMHg5ODNjY2YzMiwgMHhhOGVmMTIxZiwgMHgzMGRmMzJkYywgMHhmMDJlOWZkMCwgMHhiNDMxY2UzMCwKLQkweGRhMmRkNGZmLCAweDVkZDFjYWM3LCAweGEwZmRlNGQzLCAweDYzZTY0ZTI2LCAweDM5OWM1NDZmLCAweDliOTMwMGZmLAotCTB4ZmEwYjVkYTcsIDB4OGJkYmU0ZDUsIDB4ZGVmMWUzZmQsIDB4YmYwM2JlNGUsIDB4MGQ2ZGU3YTAsIDB4YmU4ZTc5N2YsCi0JMHg5ZWZkMWNhZiwgMHhkMzI0YmFlNywgMHgwMjUzZmQwMywgMHhlNWRkZjEwMSwgMHgxYWM3NDU3ZCwgMHhmZDAzZmYzMSwKLQkweGQwZmU0MjZlLCAweGE3MzhjNzc4LCAweGFiZGU0MTNmLCAweGU3MTZhOTJlLCAweDUwNzNlMmFiLCAweDU2M2ZiNzFkLAotCTB4MWRlMzBiNjQsIDB4MTZlNDAzZmYsIDB4Yzc3MjY1NzksIDB4NzhiNmQ5ZjgsIDB4Mzk1YjFlZjEsIDB4MzgxN2NhZmEsCi0JMHg5ZmVkYjI2NywgMHhmZWYwYTZmNiwgMHg1MTUyZmZiMywgMHgwN2ViODM2MSwgMHgyNmY2M2NjZSwgMHgzZGMxYmFjMywKLQkweDdkOGZiMWZiLCAweGY2MjM1YWM5LCAweGZhYTA3MjcxLCAweDdlMjRjNjk0LCAweDU2ZTNkYmMwLCAweGU2NDVmOWU1LAotCTB4ZmJiZDFmZjUsIDB4NWIzNGU0OGIsIDB4ZmExNzVkNzQsIDB4Nzg3MzNjY2YsIDB4YzQ1YmEwMmEsIDB4YjUxY2U3YTUsCi0JMHhjYzU2MzhjYiwgMHhmYTY0MmU3YSwgMHg2ZTcwYmJjNCwgMHhjMTdlZTgyNywgMHg1ZWUxMGI2MywgMHhlZjY4ZTczOCwKLQkweDFjZGY1ODNiLCAweDdkYzY3N2JjLCAweDZmM2NlZGMxLCAweDk3YzhlNzNlLCAweDFhZjc4YTkzLCAweDY0ZGY5ZDMwLAotCTB4MWFjMGVkNDcsIDB4ZWY0YTNjZmQsIDB4MDU3OWJkZjQsIDB4ZWQ1N2M5Y2UsIDB4NzMwMzc4ODQsIDB4OTYzZmYwNTIsCi0JMHgxZmMxNmY3ZiwgMHg2OTljZTNjMSwgMHgyYTM2ZGVmMiwgMHg0ZDM4MjZiZiwgMHgwNzI4NjNlOCwgMHgzZWQzMzhmYSwKLQkweGQwYjUzYmZjLCAweDYzOGY0NTM0LCAweGZjMWE3ZTQ5LCAweGYwNjNmODMyLCAweGRkMzNhMGMzLCAweDE0YTVlMjcwLAotCTB4ZjhiN2QwNDUsIDB4M2ZhZTkyODcsIDB4ZTJmZDc0MTAsIDB4NGI1NjI2ZjgsIDB4ZDcwZmU0YmEsIDB4N2ZmZWZhMGEsCi0JMHhmYmM4ZWJhMywgMHgwZDg1ZGY5MywgMHhkZTFlZWZlZCwgMHg3ZjY1OWU1ZiwgMHhkYTVmZmQzZiwgMHhlZmY3ZDA5ZiwKLQkweGQ2MTNiZmJjLCAweDg2NzdhNWZkLCAweDRlNDEyN2UzLCAweDdmMDliMjFlLCAweDI4YmRmNjJhLCAweDk3YjA5MjE1LAotCTB4MTEwNGY2ZjUsIDB4ZTQxMmQ1MzcsIDB4Mjc2YzA2ZjcsIDB4MzQ5ZDgyNWYsIDB4ZWFiOGUzZWMsIDB4OGFmYzMxNDgsCi0JMHg2MzhmNDQ5MywgMHg4ZjViMTE1ZCwgMHg1YTc4ZmYyOCwgMHhiMTkzOTBiZSwgMHg3YzRiMjI3NCwgMHg5NDg4ZTEzNywKLQkweDU0ZWQ2ZmMxLCAweDc2ZGQzYjAyLCAweDg3MzNjOGMwLCAweDdhNTY1ZjYxLCAweDQyZWRkZTQ0LCAweGYyNzQxNmM4LAotCTB4YTFhOWRkZjgsIDB4ZGU3OGNiOWQsIDB4NDQ4YjliZWUsIDB4ZDEwMmU1MWUsIDB4MWYzODIzOTQsIDB4N2YwODI0NTcsCi0JMHg4NDk1M2JiNCwgMHg5ZGFlZWFkZCwgMHhlNzk2ZmMyOCwgMHhjMmU3YjZiZiwgMHg0ZGFmZWQ1ZiwgMHg2ZWRiZjkxMCwKLQkweGZjM2I2NDdmLCAweDNlMDllZWNmLCAweDdmNGRjODM1LCAweGY4NDRkMGExLCAweDZlMDVjMWFiLCAweDAyZjc0ZjMxLAotCTB4YjdiYjA3NjksIDB4ODNmN2M4ZTcsIDB4ZjIwOWZhMTQsIDB4NDhhZThmNDgsIDB4ZWVjMTc5MTAsIDB4YzQyYzgxZGQsCi0JMHhkMjRjM2VjZiwgMHgyZTFmNDM0ZSwgMHhiODczY2JiMSwgMHgxOWNiOGYzYiwgMHhkNGQ0YWMzZSwgMHg2MmJjNjMzNiwKLQkweDZkNDhlZWI5LCAweDc5N2JiM2MyLCAweDM2MDJmODk0LCAweGIyN2U1Yzk5LCAweDZiZTQ0OTNkLCAweGUyMzE3ZDBkLAotCTB4YTc4MmUzZDUsIDB4YzY0ZTgyNzYsIDB4ZWJlZmI2NzcsIDB4NWRkMDY1ZjIsIDB4MGVlZmM4MDksIDB4NzIxYmZhMGQsCi0JMHhiYmE3NWEzNiwgMHhiNzk0YWY3MiwgMHhhYmM3ZjdhMSwgMHgxZTNmYmM0OSwgMHg3N2MwNGJjYiwgMHhhYTcxZjU2YSwKLQkweDMyYmU3NDBmLCAweGViMTJmYjQ1LCAweDdjY2I1Y2VlLCAweDkyZmQ2M2IxLCAweDFkZjEyN2ZlLCAweDk1ZmUzMGUxLAotCTB4ZDM4ZjQyYjMsIDB4ZDQ1ZmRmZTgsIDB4ZjUyM2I0OTMsIDB4ZWQxNmY3YzYsIDB4MjgyZGVmZDYsIDB4NzkxNTM2MzIsCi0JMHhkYzQ3MjEzYiwgMHg5YWJlZjdmZiwgMHg4ZGQ4MGFiOCwgMHhjMTI1ZGY4MiwgMHg0ZmZmMWM2ZSwgMHg4MGVmYjBmYiwKLQkweGJjZjIxNWJjLCAweDI5NmJjNGYwLCAweGZkZmViZGEyLCAweDFmNWZlMTg5LCAweDgzOTQ3ZmY3LCAweGRkZTRlMjczLAotCTB4ZmMwNThjYWYsIDB4YWQyNmE5MmEsIDB4NzBmNWQ3ODIsIDB4NzBmM2U3ZWQsIDB4MTU5ZmJkNzQsIDB4YmNjZGRmMTEsCi0JMHg4ZTY1ZmI1ZiwgMHhmYmRmYjc4OCwgMHhlZmY3OTA4YSwgMHgwMmZmY2ViYSwgMHhiMzhiN2E1ZiwgMHgwMDAwNDBkMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU5NDc4MDksIDB4ZTc3ZGYwZDUsIDB4OTkyNjY2NWQsCisJMHg2YzgxYmM5OSwgMHg0NGQ4NGVhYywgMHg0MjQyNzQwYiwgMHg2MWRiMTAxYSwgMHg4MzExNjg4YiwgMHg5ODE3MDU0YiwKKwkweDI2NGY2NDA4LCAweGRhYzdmNTIwLCAweDAwNDBjZmVmLCAweDhiNDM1MTUxLCAweDAzYjQ1YTM1LCAweDM0MWIwNTA0LAorCTB4MDI0MTgwZDgsIDB4MmQ4MmUwMGUsIDB4NWQ2YWQ4ZDUsIDB4YzhhMGQyZGEsIDB4MWI4MDkzMWEsIDB4Y2VmYzVkZmUsCisJMHhjOWJlZjczOSwgMHg4MjI2NGVmYiwgMHhmNWZmZmZiNSwgMHhmOGY4ZmVmYiwgMHhmNzdiZWU1YywgMHhjZTczZGRiMywKKwkweGUyOGVmNzNkLCAweDhiOTRjNzE4LCAweGZmMTJmYjE4LCAweGRkOThjN2JlLCAweGQ3MWIxOGM2LCAweDIzNTYzMjlkLAorCTB4Y2YyZDRhZDIsIDB4MDNkMDU4Y2QsIDB4YWM2MmNjZmYsIDB4OTc4NWFkZGMsIDB4NjUzNjMzYTcsIDB4NWVmOTFhODcsCisJMHg0ODM3ZTQxMiwgMHg2ZGU0M2I2MSwgMHhkZTU0OWQ3YiwgMHgyM2U3OWViZSwgMHhhMGNmY2Q2ZSwgMHhjODNhYTNmYywKKwkweGRlZGVkMDRiLCAweDUwNjVjMGYyLCAweDY2NDNiOWRlLCAweDkxZGJiMTFiLCAweGMyOTYzNjcxLCAweGUzMDczMWQ4LAorCTB4Y2Y5MDU5N2YsIDB4YzljMGFjNjYsIDB4ZjYxYmU1YjMsIDB4NDVmNmM1Y2QsIDB4ODRlNjc2NGQsIDB4MTU3N2NhZmUsCisJMHhmMjBjYmNjZSwgMHg4NjU1MDc4NSwgMHgyZjM3Y2E1NSwgMHhiZTQzZmFkMywgMHg2MDM1MmMzOCwgMHg5ZjMyNjNiZSwKKwkweDFjYTc2ODVmLCAweDNiZjUwY2RlLCAweDM3MjkyZDNjLCAweDU1M2IxOGI4LCAweDhkNWU2MGU1LCAweDRiNzc2YWIxLAorCTB4MThhM2Y1Y2EsIDB4Y2Y2ZjA5MmIsIDB4ZjUyNTc2YzUsIDB4M2E5NzBmOTIsIDB4OTdlNmM3NjUsIDB4YjZiYWUxZmIsCisJMHg5N2JiM2U0YSwgMHhmMTJkZDJiMSwgMHhjZjkyM2JjYywgMHhmZmY4NGJlMSwgMHhmOTFjYTM1OCwgMHg4NjJmOTQxZSwKKwkweGI3ZTgzMjc1LCAweDMyZTRkNTkwLCAweGFiNWZjNzE5LCAweGYwZGRkZDc5LCAweGQzYTU1NTNiLCAweDdjYmU0NjM4LAorCTB4ZWQwMzhjMmIsIDB4N2M5NjllMmEsIDB4MWIwYWM0YjgsIDB4ZjhjMDM0MGIsIDB4YjM5Y2JiZWQsIDB4N2Q3MGI5MzcsCisJMHg2ZTExYjRjYiwgMHgxYWRkZDc1YywgMHhlNzBjMmJkNiwgMHg3MTdhNzRlZiwgMHg1Y2I0MWI3ZSwgMHhiZjU5MmYyOCwKKwkweGQ1MTgyYjQxLCAweDk2ZTk1ZmRkLCAweGQ1NzlkNmJlLCAweDk4MGQ0ZDBlLCAweDUzZDNhM2NhLCAweDQ3Nzk4YzU1LAorCTB4MTg0YmU3NzQsIDB4YmY0MDM3ZjMsIDB4YjM2YjA5NGMsIDB4ZmY3Zjc3NDYsIDB4OTYzMjI1ODAsIDB4Y2NjYmZkOGMsCisJMHgxZmVlZThlYiwgMHg0M2RmNDkyMCwgMHgwMTNmYzE2ZiwgMHg2ZTNkYTE1ZSwgMHhiNzgxYWI4MiwgMHhkYmZjM2FjNSwKKwkweGIzYjc4ZGRiLCAweGQyYTNjMGJhLCAweGRmZWU2ZDk5LCAweDNjNDAxZjQ4LCAweDEwNmE3Y2MwLCAweDExYWU5MDRlLAorCTB4NjQ0Y2YzZjMsIDB4ZGZlODE0OTMsIDB4YzRiYTY3ZTMsIDB4OTE4ZjVmN2EsIDB4OWYyY2E4ZDYsIDB4NDIwYjU4YzEsCisJMHg3OGNhZmRhMywgMHgxMTZjNmJjOCwgMHg5M2Y2MzFmMywgMHhhOWZlZDkxNSwgMHgwNTlmYmY5MCwgMHg1N2JjZTJlNiwKKwkweGM0MjI4MTQ4LCAweDY5MGQ2MzEzLCAweDI0YWJiZjQ4LCAweGZmZDcxYjM2LCAweDk0MzQ5YzAzLCAweGY0MDdlYWFmLAorCTB4OTlhZjcwMDksIDB4OTY0OWJkOTYsIDB4MzA5M2RjYzQsIDB4YmRjNGYwNWYsIDB4MjE0ZmQ0ZTksIDB4M2Y0MmEzZjUsCisJMHg4ZmRmY2Y0MywgMHhlOTYzOWI5ZSwgMHgzMjJkY2Y0NywgMHg3ZWE0YTlmYSwgMHg0ZmQ2MTc5YywgMHhlYjA0ZWU0ZCwKKwkweDhjNGI3MjdjLCAweDdlYTRlZTdlLCAweDJlYjYxN2RjLCAweGQ2ODk4YWZkLCAweDQ2NTE1Y2Y5LCAweGY1NGUyNGZkLAorCTB4OTdkNDAwYjEsIDB4MmQ2MDdhMGQsIDB4NWRjYTE5N2UsIDB4ZWY2Mzg5ZjUsIDB4OThiYTY2NjUsIDB4ZGZmOTEyYmMsCisJMHhhNjYyNWMwZCwgMHgzODljODQ4YiwgMHhmYTI2MWQwYiwgMHhkMGYyNThmYiwgMHg1YmVjN2U5MywgMHg0NDgzMGYyMiwKKwkweDVmMWEzNTEyLCAweDVjOTFhZmViLCAweDQxZGZkNDk4LCAweGJiZmEzYmY5LCAweDMxZGMyZTQ4LCAweDBlYjE3MDIxLAorCTB4NTliMWMwZjMsIDB4ODE2YmM4M2YsIDB4ZTgzMWViNmYsIDB4YjEyOWU2MWEsIDB4MzZiZDRjMzQsIDB4ZWZjYmEzNGMsCisJMHgyNjFjMzk1NiwgMHg4OGRiZjgwZiwgMHg2ODNlZDAyMywgMHgwODkxMWNlYiwgMHhhNGQyZjVmOSwgMHgzNjVjMjA1ZiwKKwkweDI3YzExYjMzLCAweDU4OTU2NjRlLCAweDQ4Y2VjZTJmLCAweDllOWRkZDNlLCAweDgyNjQyOWJkLCAweDgwNDFlYWQzLAorCTB4ZGZiYmE5N2YsIDB4MGQyMDZhZDUsIDB4YmIyYjZiZTksIDB4YjZmNDg0MjEsIDB4YTdhYzEwNmEsIDB4ODU0ZjYzM2YsCisJMHgxNDg0OGZhZSwgMHgyMGE4M2Y2OCwgMHhkNzY5ZTEwZCwgMHhlM2NkYmY4MCwgMHgyOGZlMzA2YiwgMHgxYzE5ZmYxYSwKKwkweDNmOGUwNzc3LCAweGY2ZjhlN2FlLCAweGYxOTYzOTIxLCAweDJjOGI4MzFkLCAweDE4MzQzYmUzLCAweDE3N2RlODFmLAorCTB4MGY4YzU1YmIsIDB4ZDhjMDliZjAsIDB4Njg1YmExZjMsIDB4MjJlMGZiN2MsIDB4OGQ2ZWZmMWEsIDB4OGZjNjU5MTUsCisJMHgwNWZmMWFlYiwgMHhkZWE1ZjcxYywgMHg4MjY0M2ZkNiwgMHg0YjgzZmQ3NSwgMHhmOGQ3ZWJhYywgMHgwYjY1NWZmYSwKKwkweGI0NzFmOGM1LCAweDE2ODc1ZmZlLCAweDJlMGZmNWYwLCAweGYzYjdlYmUxLCAweGY3YzZiYjdlLCAweDc1ZmZjMTc0LAorCTB4ZGVhZGY3MWMsIDB4YTI3NDNmZDYsIDB4OTUxN2ZkNzUsIDB4ZTc2ZmQ3NTksIDB4Y2FjYmJmZTMsIDB4MWEyZWY4YzUsCisJMHgxOTUwYmRmZiwgMHg2NTQ1ZmY1ZiwgMHgwZjY2YmUzNCwgMHhiNDhlOTBmOCwgMHg2MTk1NzEwMSwgMHgwNDBkOWYxOCwKKwkweDE5MjU0ODg2LCAweDY0NzRhN2U1LCAweGZkYTBjNjFmLCAweGUwODQzNjNhLCAweGE3MWM0NzcwLCAweDgwZTJjZmJiLAorCTB4ZjJkZDVjZGUsIDB4YTM4MTg1OGUsIDB4MDg1NTllNDAsIDB4OWZhZDJmOWEsIDB4YTU5Y2ExYTQsIDB4MGI3YjkwNzIsCisJMHgzNDE3NTRjNSwgMHhiMGRmYjRjOSwgMHg3MGYwZjY3NSwgMHg5MzdiNmY5OCwgMHg4MmZjYzIxYywgMHg2NTg3OTc3NSwKKwkweGJjZDhlZmRhLCAweGIwYTc2YzNjLCAweGYwZmY3ZTA4LCAweGNkMWJkMWExLCAweDE3NGU4YWViLCAweDVhYzdhOGQ2LAorCTB4ZTdjNDdjMmQsIDB4NDZjYzlhMTMsIDB4YTZmY2MyNTYsIDB4ZWI4YzExMjEsIDB4MzkwMzFmY2UsIDB4YmU3ZTQwY2EsCisJMHhkMzE0NzIwZiwgMHgwNzhjMmFlMywgMHg5YzgyOGZkZiwgMHg2Zjk5OWE2NSwgMHgzYzdkZjE5NiwgMHg5OTFjZGVjNCwKKwkweGZmODI3MjgyLCAweGJjMzg1MzFkLCAweGMyOTEyZDhmLCAweGQ2Y2ZmZjA4LCAweDNlNTBkMjJlLCAweDA3ODlhYzJkLAorCTB4MjNjZjc3YTAsIDB4YjlkNGYwMjgsIDB4MjhkZTFlY2IsIDB4MDhiZDNjMTEsIDB4MTU4OTFiOWYsIDB4YTAzM2ZiMTksCisJMHhiNjgwMWZiNSwgMHhhNWFmYjZiMCwgMHhiYzJjMmRkZCwgMHhjZmVhMGQzMiwgMHg0ODNmOTM1ZiwgMHgzY2RmZjU4NywKKwkweGM2NTYzZWRiLCAweDA3Zjk4M2ZkLCAweGQ5OGY4OGQ4LCAweDYzMGU1YjAwLCAweGFhZDcxYmIzLCAweGUzNzMyMDAzLAorCTB4NTZmZGY1NmMsIDB4MDEzOWZiNTMsIDB4MjJlNmZlNmIsIDB4MGQ1ZGJlNmIsIDB4MzdkNDM2YWIsIDB4MDFiNjI1OGEsCisJMHhkMmI1YmRmYSwgMHg5MzhjNmU1YSwgMHg3OGUxZjUyOCwgMHgyMGZkZTMxNSwgMHg1NmY3Y2Y4NSwgMHg2N2UyYzc0YywKKwkweDU3M2FmMDlkLCAweGY5OGQ2ZGU3LCAweDU5NTJlZjA0LCAweGQ2Y2JmNjg0LCAweDRmZjg0NjY0LCAweDlkMDE3YWE2LAorCTB4YmU3YTNiYWYsIDB4M2Y4NzU1NzMsIDB4ZjczM2U2MGYsIDB4MTllMDk5NGUsIDB4YmRkNmZmM2QsIDB4MThkYjdlZjEsCisJMHg1NjNmNmI0OCwgMHhkN2EzMDQ5MSwgMHg3OWZmM2QxMywgMHhhM2Q3YTM0YiwgMHgxZjk2MWU5MywgMHhlOWNlZmU4YSwKKwkweDgyOWU5YTI0LCAweDFlZmE5MzRkLCAweDZmMmJkNTM1LCAweDUxZWZiMmI4LCAweDZlOTU3ZDEzLCAweDE3Yzk2NTk5LAorCTB4ZWE1OGU3ODcsIDB4NWJlNmQ2MTcsIDB4MTRkNjE3Y2EsIDB4YWZlN2NhNWIsIDB4ZTdjOTY0NWUsIDB4ZDRiNGVlODcsCisJMHg5OTc0Yjc5ZiwgMHhjYWQ2ZmNhNSwgMHgzN2U1MmM3YiwgMHhlNGI1YWQxNywgMHhiMTFlMDRlNywgMHhmNjcxYmZkNCwKKwkweDZkYjk0YjA2LCAweDIwZDcyNWVmLCAweDI1YmY1NTFmLCAweDNlMzdkYzMzLCAweDAwN2IxZDc1LCAweDVkNGZjMWY1LAorCTB4NzFmMTBmOGEsIDB4Zjg4ZDJhYTIsIDB4OTc5NTU0ZTAsIDB4NGNhNmY2ZDIsIDB4YzFjYjgwNDcsIDB4MTY3MTU0MDIsCisJMHhhZDA4NmIyZSwgMHg5OTcyODg5ZSwgMHg1ZTJjZmM5MSwgMHgxYTE0MzNiNiwgMHhlNGFkZGEwOCwgMHhiNWM5ZjgyNSwKKwkweDA5MDA4YjFhLCAweDE3NGZhYzRiLCAweGE2Y2E3NzFkLCAweDk0ZjNkNmYyLCAweDY3YTMwMmQ3LCAweDViOTcyY2Y2LAorCTB4NmUwZjdmNjMsIDB4ZTUwOGJmY2MsIDB4MDBmMjZmNGUsIDB4M2VlMDA2ZmUsIDB4ZjdmNjIxZDcsIDB4ODkzMmYyZTgsCisJMHgzM2JmOTllNSwgMHhmY2Y4OWNiNiwgMHg2NWIzOTA5YywgMHg2NTA3OTcxYSwgMHhjYzliZjZjZiwgMHg4YzhmOTgzYywKKwkweGYxYWFmY2E4LCAweDI4YTgwMDFhLCAweDRmM2I1MTI3LCAweDJlMDA3YTQ2LCAweDUwY2JkMGIwLCAweGVkYjc3ZjBiLAorCTB4MTU1ZTY5OTMsIDB4YTNjNjEzMjgsIDB4MjM1YmM5YzgsIDB4MWM4OTljYTEsIDB4NjhkZDdjMTgsIDB4N2VmZjg3OWMsCisJMHgyOWFlZjkwOSwgMHhiNmY1ZjY5OSwgMHg4ZjdkZTlhYSwgMHgzYzlmODgyYSwgMHhjZDU0NGY0YSwgMHg1NTU4ZjRhNiwKKwkweDU1YTNkMjgwLCAweDVmYmU5NDQ1LCAweDZiNjk0OTU1LCAweDBmNGE1MmQ1LCAweGZkMjg4NTU3LCAweDRhNmFkNTUzLAorCTB4YTFhYWFiZGYsIDB4NWFhYTlkZjQsIDB4MTU1MGZmNGEsIDB4Y2FiZGI0YTYsIDB4MGZjMWE5NGYsIDB4NDkzN2YyNWQsCisJMHhhZWMyYWJlOCwgMHhmMjg3OWQ4MCwgMHg1NjVhYzU2NywgMHhlMjE2ZGQ0MCwgMHhmMjFhNWY3MywgMHg2N2Q3NTlmOSwKKwkweDNmMWY1MDIzLCAweGExOWQ4ZWZiLCAweGJjMWJkZmJlLCAweDc3YWRlOWEyLCAweDVmNDlmYTNjLCAweGZlMDMwODI5LAorCTB4M2I5NjdiMzMsIDB4OWM5ZTM4ZTMsIDB4ODE5ZDM2MzYsIDB4Zjg2N2JhM2MsIDB4NDZkYmJlMTMsIDB4OTI0MTVlNTEsCisJMHgzN2M5MGQ4MSwgMHhkZmEzMWRjYiwgMHg3NWYwOGM2MSwgMHg3ZjMxM2MzZSwgMHgwMTZiOThlNywgMHhmZDFlYzcxZiwKKwkweDdiZjYzNjZiLCAweDcxN2ZlYzRlLCAweDg3ZGE2NDA3LCAweDBmOTM2NDU5LCAweDFiODI2NWYxLCAweDNiOWQ2YmVkLAorCTB4MGYzZmJjODQsIDB4ODJlYTNlZmMsIDB4MDY2MGNiNWYsIDB4Mjc0OTA0ZTksIDB4NjhkYjNiZmEsIDB4YjFjMjBhNjcsCisJMHhjNDBjM2UzOSwgMHhkYzFlY2VjZiwgMHg1YzdlNDFlNCwgMHg4ZmQzNjY5YywgMHg5MTgzODBjNiwgMHhlYmE0Mzc5NiwKKwkweGQzZmVmMzJlLCAweGFkOWZjZDY0LCAweDkwMzdhNjkxLCAweDVjMjZmNjNjLCAweDRhZTkxYTNmLCAweDQzMGU4ZmQ3LAorCTB4NmE1MWE3ZmMsIDB4NGQzOGIzZjQsIDB4YmYwMjhmZDMsIDB4MzQzMmRhOWUsIDB4NjFkZmVmODEsIDB4MjdkNjBmYmUsCisJMHg1ZDgyYmQxMiwgMHhkNWZmZjU0OCwgMHgxZmFkZTlmMywgMHgzNThjM2U2MywgMHgyODFjMGZiMiwgMHhlODZjYTAwZiwKKwkweDFlOWRlZGY5LCAweGQxM2U1Nzc4LCAweGNkNWYxMGYyLCAweDJmYTg2N2VhLCAweDVmZmZjMWM0LCAweDE1N2VjMTBlLAorCTB4MDZmZDFiY2EsIDB4ZmQ5MGU0MWIsIDB4ZGViZGY4ZGIsIDB4ZjNiNDFlMzIsIDB4YjYzNzM2MWEsIDB4MTU2ZTlkZWIsCisJMHgyYmEwY2M3NiwgMHgxYTFhNTc5MCwgMHgzYTI3NjRjYiwgMHg5MmJlZWI3NSwgMHg5YjA3Yzk2OCwgMHg3ZDk2ZTlmYSwKKwkweGZjMDFmZjA2LCAweDQxNTI4MjBmLCAweDU0MTMyOWJhLCAweDU2YjhhMWQ0LCAweDIzYmYzMDRiLCAweDJmMDEzZjI4LAorCTB4MmJkNzg5NDEsIDB4MDE2YWI0NzcsIDB4MGI2MzkxMmYsIDB4ZTViNzE5ZWEsIDB4YmRlNzc0MTgsIDB4ZWYyMDhmZjEsCisJMHg2NTQ2ZmU0ZiwgMHhkZmY5NjJmNywgMHhhZTUwNTY2MCwgMHhmNzIwYzUxYSwgMHgyZjlmOTA2YywgMHg5NjM1Yjc3MiwKKwkweDc3Yjk0MGNlLCAweGY5ZjdjNmQyLCAweDgzY2YyYzA1LCAweGFiMTE0ZjQ2LCAweGU3M2Q0NmM5LCAweDhlOWI2NjIzLAorCTB4ZmIxMWZmZjQsIDB4NjRkMzI3OWQsIDB4MWE2Y2Y4NmYsIDB4NmFmZTczYWQsIDB4ZmEwYjNlZWIsIDB4NTg1ZjI1OTksCisJMHhiMDE3Y2Q2YiwgMHhkZTkwNTM2YiwgMHgyY2E5ZDYwYiwgMHg1YTVmMjEyYywgMHg5ZDM2YmRjYiwgMHg5NTY0MmRmYSwKKwkweDQxZGVjOGFiLCAweGJkYzYwNTdiLCAweDAwY2E2NzRkLCAweDczZjk1Zjk4LCAweDQzZTc2NThmLCAweGFlMzYzYmZlLAorCTB4N2JmNjFiYTcsIDB4ZmYzZTFmNzEsIDB4ZTZiMGE0OTIsIDB4MWEwZmYyODcsIDB4MTk3MDdmMzMsIDB4NTVlMWY2YzMsCisJMHg2ZTQyYTcyOCwgMHg3YWNjZGJlNiwgMHhjZWViZWZlMiwgMHhjNmJlN2EzZiwgMHg4ZmMzZDI3ZSwgMHg2ZjIxZTYyMCwKKwkweDE4ZTFmYzkxLCAweDliMzRkYTc2LCAweDEwYWRmNDI0LCAweGJhZTAzN2E1LCAweGJlNmI3YTRkLCAweDJmOTE4MzgwLAorCTB4MTlkZmNhOGYsIDB4ZTlhN2ZmOTUsIDB4ZTg1OTg5MmQsIDB4YzgxNDg4ZWQsIDB4ZmE3MzI1YjcsIDB4NTI0MTdkNDIsCisJMHgzN2MwYjUzYSwgMHg0N2FkM2ZlOSwgMHhkMmZmZTVmZiwgMHhmZjQyMDdmZSwgMHhlZmZlOTZkOSwgMHgzZmY2OTdmYywKKwkweDU3ZmNjN2FjLCAweGZjYmZlYWM2LCAweDQzM2I2ZGI5LCAweDllNGE2ZjIwLCAweDYwYzNjODc5LCAweGQ0YTkzYTFmLAorCTB4ZWYwMGY4YTQsIDB4N2E1NzliNjUsIDB4Mjg0ZTBlOTAsIDB4ZjNkMjBmMjEsIDB4M2QzY2IwYzksIDB4NDZlYzNkMTYsCisJMHhhMjNmMjA3YSwgMHg1ZGExMjVkZiwgMHhmZTg0ZmY4NSwgMHhkZjc1M2Q0ZiwgMHgzZTY3ZGM0YywgMHg2NGVhYWNkYiwKKwkweDQ3YjE2ZDJmLCAweDE1YWZjMGVjLCAweGQ4MzNjNThkLCAweGUxMWZjYTE4LCAweGM4Y2ZiYmY5LCAweGQyYjI2Zjk4LAorCTB4MGY5M2M5NjcsIDB4MGRmZmEwYTUsIDB4MTNkODQ1MjgsIDB4MmE5N2QyMTEsIDB4YzVjYzNlZWEsIDB4M2FjODI4N2QsCisJMHhkYmEyY2Y4OSwgMHhmYWU3ZjhlMSwgMHhkN2NjN2M5MCwgMHhjMzk2N2ExMiwgMHgwZmNmNDkzYywgMHgxYjA0YjgwYSwKKwkweGEzMjMzYmVmLCAweDcyYjU5M2VmLCAweGZkNTQ2ODNmLCAweGQ0ZmZhMTIyLCAweGM3NDlkY2RiLCAweGRmNjI3NGMwLAorCTB4Nzk0MWRmNjEsIDB4ODU4M2MwNjksIDB4YmQ1M2ZlYjksIDB4NDczMWUxZjUsIDB4NzU2ZDNlNjAsIDB4MjY0OGYxYmYsCisJMHg3NjdjMTkzOCwgMHgyZmZlNjFiNiwgMHgyZWY2Zjc5ZSwgMHg5ZDg1ZGI4ZiwgMHg0YzJlZGRkNywgMHg0MjRkYmNlZCwKKwkweDY5ZTY2YjZmLCAweGEwZjExYTk5LCAweDQxYjY1YzVlLCAweDczZTA4NWY1LCAweDRmNGRiNmQ5LCAweGVhNzY4YTNjLAorCTB4NzBkZjc2YmIsIDB4ZGI3NGJmZTgsIDB4MDA5ODdmNGIsIDB4NmFlZGQyZjksIDB4MGNiZTBjZDIsIDB4OGRkMjk0OTcsCisJMHhiZmZjMjA5NywgMHgxZTM3NmM3NCwgMHg5MmY1N2U0YSwgMHhiZmNkMWRlNiwgMHgzNzRmYjhmZiwgMHhlZmI3NGEzZSwKKwkweDllZThkOGQzLCAweGIwZDI5OGYwLCAweGM1NzU2YjRmLCAweDkxYzM0YmMwLCAweGFhYWZkNDVjLCAweGExYWU3ZWI3LAorCTB4YWY3Mjc5M2QsIDB4NjNkMzUyYzQsIDB4NGJjMzczYzAsIDB4OWMyMDI3YTQsIDB4NGYwMjhmMDgsIDB4YWE4Yjc4NWQsCisJMHhhMGJjMDQxZiwgMHgxNGYwMzczYywgMHg5MDgwZmU1ZCwgMHg3NzlmZDgzZiwgMHhkM2YzZDExNCwgMHhmOTVmYTNjZiwKKwkweGQ3MGZiYjNkLCAweGVkZjRmNDVmLCAweDcxYzc1YzFlLCAweGY1ZDM5MmE1LCAweGZjNTMyYjYzLCAweDFhOTE2ZTMwLAorCTB4ZTUyOWQxNGEsIDB4ZmYxZThiZGYsIDB4ZTE1YmQxMjEsIDB4ZTE0YzNmMWIsIDB4OWZiZmEwZjYsIDB4NTBhNmY2OGQsCisJMHhjMmRmNWMzZiwgMHhmYWQwMzdmNSwgMHhlODgwNTgwYSwgMHgzOTMxZThhZSwgMHhhN2U5MGMyZiwgMHgzZGJlOWIwYSwKKwkweGM4NjQ1ZjA2LCAweDZmOGUyZjljLCAweGQ2MGI4NTA0LCAweDEyZWQxYzc3LCAweDRlZmViM2Y0LCAweDdmMjY2ZjBlLAorCTB4ZmM4NjIyYzgsIDB4M2ZjMzQzZmYsIDB4ZmU1MzE2Y2UsIDB4OTNjNzA3NTMsIDB4YmUwOWI2NDMsIDB4NGNjZjZkMDIsCisJMHhiNzc3NzVhZiwgMHgwZDRlN2UyMCwgMHgxZmEyYTdmMiwgMHg5MDk0YzgyZCwgMHgyNWY0ODc4MCwgMHgzMWJmMmJmNCwKKwkweDg3ZTM5NTJkLCAweGQxNmM5NTc5LCAweDI5ODBmNDBlLCAweGI3ZWIxZGY4LCAweDE4ZTc3ZWE4LCAweDY1ZjYzYjRiLAorCTB4NGJmOGY3N2EsIDB4ZWYzMGY4YzQsIDB4OGZiZmRjMzgsIDB4ODZhMmIwYTcsIDB4NTViYmViMTgsIDB4ZjYxZWY4MzYsCisJMHg5OTdkMTM3MSwgMHg3YmYzOWJmOCwgMHhiZjljM2RkZCwgMHhjZjBmN2UwZCwgMHg5ZmU1OGU5YSwgMHgwN2Y5YzliYywKKwkweDA4ZmVlMWRiLCAweDUyYTQ4YWYzLCAweDI1ZWJiZWY5LCAweDE2NzYwNzkyLCAweDc1ZDdjNTg5LCAweDZiNmJlMGFhLAorCTB4MzAyNzQxYjksIDB4MzA0YTQ1NmYsIDB4ZGZmNjBiZDEsIDB4ZmU0ZmUwODcsIDB4ZDA3NTgyYjMsIDB4ODMyZjI0Y2UsCisJMHg2N2E3OWUzOCwgMHgxNmRmMDY3ZiwgMHgyNTFmZmUwYSwgMHhhZDlmZjk1YiwgMHhiYmRmN2NlNywgMHg3ZGEyMTU3ZSwKKwkweDNmMGQ0Y2FlLCAweDJiZjIyOGYxLCAweDhiYzg2N2YwLCAweGUxZTZhYWZjLCAweDFmZDc0ZmJhLCAweGMwNGRjM2Y4LAorCTB4MGMxYmE3YTcsIDB4Y2ZjYWI1M2UsIDB4N2EyZDNlNjgsIDB4ZjQ4NGIzNzYsIDB4YTdhN2NkMTksIDB4ODkxYjQwOGIsCisJMHgzZGYwYTdjNSwgMHhiNTE2OWYyNiwgMHg5Zjk1M2ZmZSwgMHg4ZmFlZmMwNiwgMHgwZjIxOWY4MiwgMHhiNDYzODM3YiwKKwkweGYzNjMzYzNjLCAweGU1YTMzYzEyLCAweGM5YmRmYzIxLCAweDlmZDI3YmIyLCAweGJkMDY3NzQxLCAweGZjYjJmYzk1LAorCTB4MTgxN2YyMjIsIDB4NWRkMDY5NzQsIDB4NzQxYTVkMTcsIDB4NjJmZmMzZDcsIDB4Zjk3NDVmODEsIDB4YTAwNWE0NjAsCisJMHgyYTVkYmM5MywgMHhjZDY1NTVkOSwgMHhkYTBjM2NmYywgMHg4YjIwM2NiZCwgMHg2ZGE3ZTRlMCwgMHgzY2JjZDU4YywKKwkweDBmOWNjOTIwLCAweGEyMWJlNTQ3LCAweGYyYTNmYmVhLCAweDAzZjU1MTc5LCAweDRiNGFmOTUxLCAweDAzYTZiMmZkLAorCTB4NDdmYzIzMWEsIDB4NGJlY2Y1MmMsIDB4YzQxZjY1MWYsIDB4ZmQ4Yzg3YjAsIDB4NDY3OGQ4MjYsIDB4MGM1ZDIxMGIsCisJMHhkZTUwZDRlYywgMHgwNTQxY2JhOSwgMHgxZWUwZmY0NSwgMHgwZWM1ZWM5OSwgMHgxODJhZjE4MCwgMHgzZDNlYTNhNywKKwkweGIxYjkwMjFjLCAweGYwZWRjOWQyLCAweGQzZDNiZDBlLCAweDg5OTVkMjA3LCAweGFjOTlkZjNjLCAweDY3Yjk0MmFkLAorCTB4NzI3NGVmN2MsIDB4NWU0NzQ3M2YsIDB4ZTRkMTI3YTcsIDB4MmNkMjM4YTcsIDB4MGQ2ZWRjOTMsIDB4ZmNiMWU5YjMsCisJMHgxMGEzYjAyMCwgMHg2ZjU5NWJkZSwgMHgzOWZmZGNlNSwgMHg1ZTBkNzY0ZCwgMHg4ZDY4ZjY4YSwgMHg3NzEzNDNlYywKKwkweDNkMWJiMmMxLCAweDY4ZTkyYWU4LCAweDZjY2Q3YTFlLCAweDU1ZjBiZWY4LCAweDNhNTU4ZTk5LCAweDcwNjMzY2UyLAorCTB4NTdlNDJjNWUsIDB4ODllYzk5ZmEsIDB4YjNmNDJjMTMsIDB4NmNjZmU4ODksIDB4ODJjNTc2ZTYsIDB4MDhmYTUxMzUsCisJMHg1NGY0NDM1YiwgMHhhMWEyNWFlMCwgMHhlMDNiMDUzYywgMHg5NzNmYWI3ZCwgMHhlODg5NDVmMywgMHhiNWJkNjhhZiwKKwkweDI3OGY2OGRjLCAweDk1ZGY2ODVhLCAweDAzY2I1OWQ0LCAweDY1ZGEzZWMyLCAweGNiMDY0OWYwLCAweDg2ODMzOTIwLAorCTB4NDJlN2RhMGYsIDB4NDc5MzRmMmUsIDB4ZjAxYjMzNWQsIDB4NjY1MDcxZDEsIDB4YjY3OTllNzgsIDB4OWM3YzI2NTksCisJMHg5N2U3ZTdhZCwgMHhmYzRjOTQyYywgMHg0OTNhYzE1NiwgMHg2YTcwMWExZSwgMHg3YWQyN2U0MywgMHgzYjZkNTc5NywKKwkweDE3N2Q5Y2ZlLCAweDNmY2VjZGQyLCAweGE0MzlmOThlLCAweDFkZGYzYjZkLCAweGNmZjMxYmIxLCAweDhmZjgzZGJkLAorCTB4MjlmZDY3YWMsIDB4MzdlNDlkN2IsIDB4MjZlYmQ4ZWUsIDB4ZjNkOGVmN2EsIDB4NjE3N2MxZGIsIDB4ZmM5ZDk3N2UsCisJMHgzZjdiMWQ3NSwgMHhkN2Y0ODMxZiwgMHg4NDVlZGNiMSwgMHgxMDYzYWVmMiwgMHhmN2FhODdiNywgMHg5NWE2M2U3YywKKwkweDg0MTVkN2Y2LCAweGM2YjJhM2I3LCAweGJmZTZhM2Y1LCAweDMwOTI5NjFlLCAweGRlYTE1NTg1LCAweGY4OWUzN2IwLAorCTB4OTNiY2Y4MjksIDB4N2IxZDBiZmMsIDB4YjgwZWNmM2UsIDB4YTllYjc1ZmUsIDB4MWQzOWU3MTAsIDB4NTlmYjM2NmUsCisJMHhmNzIyNWY5YywgMHg4Zjc3MDc4MywgMHhjZjBjYjRkZiwgMHg2OWY3MWJhMywgMHhjYTdjYTFmMywgMHg4MzFmN2YwYiwKKwkweDU5ZTNiNDcyLCAweGFiYjUwZmFlLCAweDc5ZTM4ZmFkLCAweGUxZmM4NzQ1LCAweGRjZTAxNTMyLCAweDlmZDU0YzhlLAorCTB4MTE5NGZiYjEsIDB4NjJhMzQzOTMsIDB4ZTRlZmU1YzEsIDB4Nzg1MGI5MzcsIDB4NGZiNzBhNjgsIDB4MjFlMWZkZmYsCisJMHg3M2JjYjlmOSwgMHhhZTEyMWQ4NywgMHg3ZmMzOGJmYiwgMHhkN2IwYjk0NCwgMHhhYzY5NzQ0ZSwgMHgzMmMzNzRmNywKKwkweGI3Y2U1N2QyLCAweDdmY2FlMWVlLCAweGQwYjgzYTE3LCAweDBiOTE0Yjc1LCAweDdmZDRmNzU5LCAweDVhZmY3YzczLAorCTB4YTJmY2QyZjYsIDB4OWQyN2EwZjksIDB4ZjI4M2I5ZWYsIDB4OWEzZWRjZGIsIDB4ZmJkMjA1ZWYsIDB4Nzg2OWZmODIsCisJMHhlZWYwMTY3ZiwgMHhhYmJhZmYzOSwgMHhkZGQ3Y2RmZiwgMHg5ZDVmZGUzYiwgMHhlM2FlZjAyYiwgMHg4NWYwN2Y3OSwKKwkweGJlZmNkM2JmLCAweGY0ZGI5Y2FlLCAweDBkZWU5NGRmLCAweDliMTVmZWJkLCAweGE4MGNjZGY3LCAweGI4ZDU5ZDNmLAorCTB4YjJiOGIxNTAsIDB4MTlhYmZmN2MsIDB4YzBjYWZhNTAsIDB4ZGYzODg5MDMsIDB4MzdlNzUxYzksIDB4YzJhNmZhNDYsCisJMHg5MmM5YTZlZCwgMHg5NjQxZWM4ZCwgMHg5MDdiMDkyOCwgMHg4NDAzNTFkYiwgMHg0OTYwMzBmZSwgMHgwMzIxZTkwMSwKKwkweGY1Y2ZkZTA2LCAweDBlYmJjNTA2LCAweDE5NWYxZmNmLCAweGIxNDdkZjNjLCAweDNiZWM2YzE0LCAweDk3ZWJjYzAxLAorCTB4OWVkNWJjOGIsIDB4ZmNjNGI5ZmMsIDB4NjAzYTM0NzgsIDB4YTIwZmY3ZjAsIDB4YTA3MDNiNWUsIDB4YTQyZjdhNGMsCisJMHhlOGJlZWZhNCwgMHg5N2JmY2U5OSwgMHhlN2JiMTY2OSwgMHgwZWQ1YWY0YSwgMHhkYWIyNGRjYSwgMHg3ZjQ1NTM0YiwKKwkweGZmOWYxOGQzLCAweDBlMTQ5NzM0LCAweDBmMjYxYzAzLCAweGZhMTI2OWZhLCAweDU3MGYyNzQ3LCAweDVjZjkwNDk5LAorCTB4ZjY4MTU4MTYsIDB4YjU5NzU0YzUsIDB4YzMzYzA2YmYsIDB4ZTFjZGY3MTksIDB4MzgwZDU3NjgsIDB4ODc5NzU5MGUsCisJMHg5MzI0MWM3MCwgMHg3MGJjZjQ5ZiwgMHhkYzEzNzljNCwgMHgyZjE4YzIzMiwgMHg4NzFmMTRjMywgMHgxZjcyOWY2MywKKwkweGJkODU5ZGY5LCAweDkwNGQ0NzRkLCAweDVhYWI1YzU3LCAweGI0MTU5ZjkwLCAweGM4MWMzOTk3LCAweGU1ZWMzNmNlLAorCTB4ODRjZGUwZGUsIDB4MjE4OGFkZmQsIDB4MDMyYmY4MGQsIDB4ZGFkM2JmNjUsIDB4MDZkZmQ5MWYsIDB4M2UyZWJlNWUsCisJMHg1MzdlM2MwYywgMHg4NTFiYmNiYywgMHg0NWFlODE5NywgMHg3NGViZjIwYSwgMHg2MmZhMTdiNCwgMHgxZjllMGNmZCwKKwkweGRjZTg1MjE4LCAweDU3MGJkODRkLCAweGE0MjkxNzc4LCAweDUwY2MwY2Y3LCAweDhlODU1ZjEwLCAweDFjZjBhYmE2LAorCTB4Njg5M2UxYzQsIDB4ZDliNzE3MWUsIDB4NjQ3MDdmNjgsIDB4OTFmNzA0NDksIDB4ZGZlNTBhYjUsIDB4MTBlM2U5YjAsCisJMHg3YjJmMzNkZiwgMHgwYzlkZjRlZSwgMHg4ZDdlZTZmZCwgMHhmMWU1M2RjNywgMHg3ZGJmOGZmMywgMHg4YzQ0ZTVmOSwKKwkweDJjNzgxNDE3LCAweDQ2YWZmZjg0LCAweDE2N2FmZjNmLCAweDJkMzgwMzg5LCAweGExMjg1ODU0LCAweDI1YmRmYTBmLAorCTB4ZWZjNWJlZjYsIDB4ZGZlM2NkNmQsIDB4ZmJiYTUzNzcsIDB4ZGVmZDVmMzksIDB4M2FiZmNhZTQsIDB4ZDhlNDBlN2QsCisJMHg1ZGYzMDBmYiwgMHhlMWEzMGU5OCwgMHhmZDVkYjMxNSwgMHhhZjBlNjY5ZCwgMHgxZTE2MjFlMCwgMHhlNDJhZTNjMiwKKwkweGUxMzlkMzNjLCAweDlmZmU4MjFkLCAweDk5YjNkM2ZiLCAweGVhNGVkNzY4LCAweGU1YzA5NTE4LCAweDE3YjIzMGViLAorCTB4Mzg1ZWMyODIsIDB4M2UwOWJjY2IsIDB4YTFkN2NhMTcsIDB4NzlmZTc0MDksIDB4OGFjNzc2NTAsIDB4ZWMyYWRjMmIsCisJMHg3YzYyNWZlZCwgMHg3NTFkYTQwOSwgMHhmYjQ2NDZhYywgMHgxZjkyNzU4ZCwgMHg2MGU3NTQzNywgMHhiN2M0NjM5YiwKKwkweDlmODZhYmU0LCAweGZlMGRlMDRhLCAweDhmM2M2Y2U0LCAweDg0MmZlM2UxLCAweGJjNjYwOWE2LCAweGE5MzhjZGI1LAorCTB4MDc4OWU5OGMsIDB4NzRkZjdiZmMsIDB4ZTE0ZGY1MWUsIDB4YzIzZGY2OGIsIDB4MzViM2FiNzcsIDB4ZmM4NjJmMzcsCisJMHg2ZmMwNWRiOCwgMHhjODJmZmVlNiwgMHhmMzY5NzlmZiwgMHhlZmQyMWIwNiwgMHhjYjM2NzVhNSwgMHgyYWE5NmFmOSwKKwkweDZjYjFiMWVjLCAweGU2NmJjZTJjLCAweDBiM2JhNzdlLCAweGY2NTA3MmYxLCAweGIwNjczYzYxLCAweDg4MTY4Y2Y5LAorCTB4MGQxODJlNzEsIDB4ZmQxZmVjNGYsIDB4OWQ1NTViZTksIDB4ZGFiNzZiZjgsIDB4YmFlMTFmMzAsIDB4NDMwNzIzZmIsCisJMHg1Njk3N2EzYiwgMHg5ZTZiMWE1MywgMHg5ZTdjZWMwMywgMHhlZGMzNTkwYiwgMHhmZGZmZDI2MywgMHhjM2E5M2JlMCwKKwkweGY2OGM5OTE1LCAweDdlMTMxZDY3LCAweDYzZmE2ODhmLCAweGI3NjdjNzQ0LCAweGFmZWUzMGIwLCAweDVjYTJhZjY4LAorCTB4NjhjZjViMzgsIDB4ZGM5MDA3N2YsIDB4ZjAzNzc2OGYsIDB4N2VjY2Y3ZmIsIDB4YjY5YjhiOWMsIDB4ODJmNTEyZmYsCisJMHhjNzQ5NjY4YSwgMHhhNTBhODYyMywgMHg2ZDNmNDM1NSwgMHhjNjUxMjliMCwgMHg2YmMzMzg3ZCwgMHhhM2VhYmJjNCwKKwkweGM1ZjEzN2FmLCAweGY4MjE1NTU2LCAweGZiYjA5ODFlLCAweGUzZjcxYzY2LCAweDllYTE4ZDM2LCAweGQzYjE3ZmUyLAorCTB4YzdmOGZiODMsIDB4MDdjNDk5Y2QsIDB4NTdlYmFkYmQsIDB4YTlhYWVjNTUsIDB4OTcyYTM3NDgsIDB4MzBmNGQxODcsCisJMHg5MmNlM2VhYSwgMHhmNDBlNGNiZiwgMHg2OTlhZmU0NywgMHg4YmUyNWQ2ZiwgMHg2YmVmYmY4MSwgMHhiYzE3Mzg5MiwKKwkweGZlMTZmOTQwLCAweGJkYmU0Y2ZmLCAweDgwYjdjODY5LCAweGEzZTI2NzljLCAweGY5MGY1YWJlLCAweGJlNGIxYTk2LAorCTB4YTliYzk2MmQsIDB4N2JjNWY3MDgsIDB4NWUyMmE2ODYsIDB4MjZhYWJmMTcsIDB4ZGI2ZjkyYzcsIDB4ZTczOWY4YWEsCisJMHhiOTRlMjIzMywgMHhkYmU0MTFhMywgMHhhZGYyNGRiNywgMHg4YzViZTQxMSwgMHg1ZmJmOTA3OCwgMHhmZjBiN2NhOCwKKwkweDM2ZGZmMGQ3LCAweGQ2MzE2Zjk0LCAweGY5NTY2YmFiLCAweDA4ZjlhNjM2LCAweDhkMzFiN2M5LCAweGFmM2M0YjM2LAorCTB4N2M5ZjNiNWQsIDB4NDdhZjkyOTMsIDB4ZWFhMGY4ZmQsIDB4M2Y0MThmOGIsIDB4ZmUzZTg0ZGIsIDB4YzQ0Yjg4OGMsCisJMHhlNWNlNTA3MSwgMHg3ZjhkM2E2YSwgMHhlMmVlNzJhMSwgMHhmZjczOTUwYiwgMHhlNDM2NzA0NSwgMHg4YzFkZTJkYywKKwkweGQyN2I5Y2UyLCAweDhiNzM5NzIxLCAweDkzOWM4MTc3LCAweDljYjkxZTkwLCAweDcxODdiYzViLCAweDdjOTQ1Y2JmLAorCTB4YmU0M2Q5MWIsIDB4MTE1ZmFhMzEsIDB4NGQ4M2VkZTEsIDB4MDJkZjBmZTksIDB4YWJmNThkZmQsIDB4MWZkNDA3M2UsCisJMHhjNmVmMmRkYiwgMHhhZTVkZTU5OSwgMHg3YWRjMTBhNiwgMHgxNzgzYmJjOCwgMHgwODc2ZWYyNiwgMHg2YzcyMDc3OSwKKwkweDY4ZDdjYTA4LCAweDViMzVmMGZhLCAweDhmNzdjMWUzLCAweDJiZmY1ZTNmLCAweGNhZGY5N2U0LCAweDg2ZjhkZTc0LAorCTB4YmQwZjlmOGQsIDB4MTY3OGZlMzYsIDB4NjI2M2Q3ZDIsIDB4ZGM4NDhiM2UsIDB4NTEwYWFmNmIsIDB4ZTQ1ZTUzZmYsCisJMHhmMTc3MmJlYiwgMHg0NjhhZjEzOCwgMHhkNDU2MWZhZSwgMHhmYzJmNjE0YiwgMHgxN2MyNzczMywgMHg3OGJmY2UxYSwKKwkweDIxNTJjNDhmLCAweGViY2VjYjNmLCAweGYzOGQyN2IzLCAweGMzMjMzNjMyLCAweDcyMGIwZjQ0LCAweGJmY2ZjOTRhLAorCTB4ZjQwZTYxNDAsIDB4NzJiYTk3ZTMsIDB4NWJmZWEyNGYsIDB4ZmVmZGMzOWEsIDB4ZjE3YmUyYTUsIDB4ZDBhYmFkYWIsCisJMHg4OGZjNWRmZiwgMHg0NmE1ZTc0NCwgMHhlNzExYWI3YywgMHhhMjZlMjNkYiwgMHg3N2Y5MTk3OSwgMHg2NjI3ZTNhMywKKwkweDk5YTliODhhLCAweDFiYzI5NGJmLCAweDk0N2ZjNDYyLCAweDdmZTZiMTZlLCAweDk2NmZmODIyLCAweDYyZjA0YWRjLAorCTB4ZTMzMWNiYWYsIDB4NWQ3YThjMzgsIDB4ZTAyODNhNzAsIDB4N2VkMzI3NTQsIDB4ODAyNzA1ZGEsIDB4MjdiZDM3OWIsCisJMHgzM2QzMDA5YywgMHhlMWJhNTIzMiwgMHg1ODViZmM1MiwgMHhlYmVmNTY2ZiwgMHhiZDE2ZTAzNSwgMHg1ZDdmYzM2ZSwKKwkweDBkZTlmYTJhLCAweDdiOWMwNjBlLCAweDFkYzA1ZmFjLCAweDkzOTIwMmVjLCAweGE3NThmMGQxLCAweDMzYjVmOTc1LAorCTB4ZTgwOTRlMzEsIDB4ZTg0Y2U0ODYsIDB4MTgxNzAwZDcsIDB4NzBkMjZmMmYsIDB4NDc5NzdkY2IsIDB4ZDY2NGZkMDUsCisJMHhlMTgyOWE0YywgMHhhZTMwYjMwYywgMHg2YTBiY2ExYywgMHgwZmRjYmQxNywgMHgxZGVlMzFlMCwgMHg0ZWRjNThlZiwKKwkweDBmNjA5YjJmLCAweDU2ZWMzOWUwLCAweDQxYzkyNzY3LCAweDM1ZGIwZTgzLCAweDE0MWMwN2FlLCAweGJmZGRkZGYwLAorCTB4ZjlkOTMyNzIsIDB4N2E4ZTkyNGQsIDB4MjRlMjMwNDgsIDB4YWUwMTA2YjgsIDB4YTgyOGZmNzgsIDB4ODEwNmZjNzAsCisJMHgwZWZmOTExZSwgMHg4NzE5ZjIzYywgMHg4YmM5MWVlMywgMHg2MzVjOWRmZSwgMHg0MGJjNDJiZiwgMHg4ZTY2Y2NmZCwKKwkweDIyNTg2MDk3LCAweDRlYjE2NGJjLCAweGE4YTk3ZjNhLCAweDg0MTE3Yzk1LCAweDgyMDZkMzVmLCAweGUxOWYyMTlmLAorCTB4OTNjNjY1Y2YsIDB4NTg5NTdlODksIDB4NGM5NTRiZjQsIDB4YThhOTY1ZmIsIDB4ZjM1ZWQzMzcsIDB4OTllN2E0MDcsCisJMHgwMzZjYWE0ZiwgMHhmYmZlMWI4MSwgMHg0ZjNlN2EyYSwgMHg5ZTM0NTAxYywgMHhiNmJjMDRkYSwgMHgwODVkM2MyMSwKKwkweDc3YWU0ZWI3LCAweGZiYTBiZTQ1LCAweDUwNzk0NjUwLCAweDM5ZTA1OTA5LCAweDVmNzNkMWU1LCAweDA2NzFhZjA5LAorCTB4NTE4ZTkwYmMsIDB4Y2JlNzM1YmUsIDB4OTI2ODJmOTgsIDB4OWVmNGRmNTgsIDB4NTBmM2M1ZWIsIDB4ZWYxN2JmMzMsCisJMHg3ZmZiYzIzOSwgMHgxOGIxZjI0YywgMHhiYTYwYmVlYiwgMHg4YjllODVlZSwgMHhiY2YxNmU4MCwgMHg4ZWJhMzdhNCwKKwkweGQyM2I1Mzg2LCAweGU5YmFiN2YzLCAweGU3NjczNWY5LCAweGU3YTQ0Y2ExLCAweDQzZjcxMjNkLCAweGNlNWEyNzM0LAorCTB4MWU3NjNkMzUsIDB4MDlkNWI1ZjcsIDB4ZWVlYjBmNzQsIDB4NmRmNTU1N2MsIDB4Y2I5MGM2ZjQsIDB4N2VkMWVlODIsCisJMHhiYjM3ZGYzMCwgMHhmMTgyMTcwNCwgMHgxNDFjNWJhMiwgMHgxOGYzNDdlZiwgMHhiMzUzZjVjMiwgMHg2NGU2ZGU3YywKKwkweGY1NjdkN2M5LCAweDJlZGJiZmRlLCAweDM3Mjc4Y2M1LCAweDNmMjMyM2Y0LCAweGY4YzNjNzFhLCAweDZmMTgyNmY5LAorCTB4ZDE3OGY3NjQsIDB4MmZlMTgzZmIsIDB4ZmFiYWRmMzgsIDB4YmFkOWJmZGIsIDB4NmViZTcxOGMsIDB4YjU5MDU0M2MsCisJMHhiODhkNWUxMCwgMHhlMDUyMjNhOCwgMHg3M2VhMmE0NywgMHhmYzRiMjVkMywgMHhjODVjY2MxNSwgMHg3ZmRjNmZhZCwKKwkweDdiZGM5NmFhLCAweGE3NGQyY2ZmLCAweGViYjc3NGZiLCAweGU4OWQ3N2M2LCAweGUyNjc0ZjMzLCAweGRiZTI2ZjdjLAorCTB4ZWM3ZmVmYjgsIDB4NTk5OGU3ZTcsIDB4NDRkNmY2MzYsIDB4YWIyNjNmZGMsIDB4ZTNlYWU5MGMsIDB4YTFmOTJhNDMsCisJMHhlM2NhOWUzZiwgMHhlZGY5YWY2ZSwgMHgzZTVkMDUwMSwgMHgzODk4ZjBkNywgMHg4OTM4Y2Q3NiwgMHhiMDM3YWNlYywKKwkweDg3YThmMWViLCAweDA0N2Y5ODNiLCAweGVmMTMyZmMxLCAweGQ1ZDQ2NWVkLCAweDVmMDJmMTRjLCAweGFlMTJkZDhmLAorCTB4YTUzN2Q0YzYsIDB4YzQzNWU5MzMsIDB4MjE5OTI0ZGIsIDB4N2RmYzVhZGUsIDB4N2YyMGI4YTcsIDB4MDMyYzg3ZmIsCisJMHgxZmEwYTA1ZCwgMHgwN2IxZmI1MCwgMHg5YmQ2MzI1OSwgMHgzMzI2NGZlMCwgMHgyN2UzN2M2NiwgMHhmMzA3NWU2ZiwKKwkweGY2NDg3ZjE4LCAweGFjZGVhMTc5LCAweDAzMTcyZTAzLCAweDdhZTQ3YTdkLCAweGUwOTgwYjFiLCAweGFiODU4MTM1LAorCTB4ZmUzNGRmZDEsIDB4OWMzYWZmYTgsIDB4M2JlODExNzcsIDB4YThhNDRmNzgsIDB4MDdiNTQzNzksIDB4NmEyNWViZjMsCisJMHg3MjA1MGMxZiwgMHg2ZDllYjAzZCwgMHhiZjcyNjdiNSwgMHhlYTAxNzI4NSwgMHhmNWMxMzc2MSwgMHg0ZWIwNWViYywKKwkweDcyODg2MWYyLCAweDhhNWFmMzQxLCAweDkzYTgyYTJmLCAweGI2ZTE0MmU4LCAweGJjMWNjNGIwLCAweGZhMDNiMGRmLAorCTB4ZGExZWI2ZGQsIDB4MDVmZWUxNjcsIDB4YmFkZmIxZWQsIDB4ODc1ZTZmMzMsIDB4NDllNjA3NzIsIDB4YjlmOWViZWQsCisJMHhmM2I0MDE3YywgMHgyZGQ0YmYyMiwgMHhkNzhhZmVhMiwgMHhiM2VmMGM0YiwgMHg3ZGYzZDUxNCwgMHhlYTkwZThhOSwKKwkweDdkYzZmMmMzLCAweDNiN2VkMDhmLCAweDk3ZWJjNjAzLCAweDY0NTBmYjhlLCAweGNhMGJkZDJhLCAweDJmYmE3NDk0LAorCTB4Zjg0YzFhMTksIDB4N2YxYzYwZWIsIDB4ZjIyMGZhNmMsIDB4YWJiYzUyMGIsIDB4OThhMGMwOTcsIDB4NjRmZTYzZTMsCisJMHhiM2YyNDIxZiwgMHhlYjRjYjdjMCwgMHg5NmJjZmQwYiwgMHgyMzZlOWM5MywgMHhlNzQzM2FiYSwgMHhkZTAxNDdlZCwKKwkweDFiZjc4MDAxLCAweDQwZTU1ZTIyLCAweGFiNWEwN2NlLCAweGMyZmM1ZjY5LCAweDliOWY5NDNlLCAweDM4YTI0ZDM0LAorCTB4OGYyYzg1OGUsIDB4OGU2NjM4ZTIsIDB4ZWJlNmZhZTcsIDB4ZThjMzNiOTcsIDB4ZWQ1ZDdiZTcsIDB4MGZkZjg4MWMsCisJMHhlZmE3NmU1YywgMHgxY2I4ZGJlZCwgMHg0YWQ0MWY2ZSwgMHhlYmUzZjZmZSwgMHg1OGY3ODY1NSwgMHgyNGNiZDdhYSwKKwkweGFiZDc4ZTJmLCAweDdlNTYzZjc0LCAweDE0MzFjNzhjLCAweGM3ZmFlMzZlLCAweGRmYmNmNTgxLCAweGUxYjdhOGUzLAorCTB4NDM5NjA3YjksIDB4MTFhYjcwYmUsIDB4YjRlNWMwZTcsIDB4ZTgxNjdmNjEsIDB4OTBjMmZlM2MsIDB4ZGQ2MmU1YmIsCisJMHg3NWExZjYzZCwgMHhkOTI0MzRjYiwgMHgyZTViNzk2OCwgMHg4YjA5NzFlNCwgMHgyZDFjYmQ5MCwgMHgxY2YxY2I3NywKKwkweDE5N2M4M2RkLCAweGVhZTYyNzFkLCAweDBlOTA2M2I2LCAweDVkMTA1ZjIyLCAweDE5NTIxYzU3LCAweDA3ZDIzMWRhLAorCTB4OTcxNGI5NmQsIDB4NzNhMjQ3YjYsIDB4OTJjZGYxOGIsIDB4OGExYWUzMWYsIDB4NDk4N2IxZGUsIDB4Y2ZlNzBlZmYsCisJMHgyZmVlMTFmYiwgMHg4NjE5ZGFlZiwgMHgzYzQzMWYyYywgMHhiMWNhOWM4MCwgMHhhN2U5ZmU3NywgMHgxYmU0ZmRmMCwKKwkweDAyMDg4YzBlLCAweGI4MjdjOWJhLCAweDU5YmU3MTFiLCAweDRmM2M3OTliLCAweDUyZWIxYmQ2LCAweDliMmYzZWYwLAorCTB4NDBlNDk3ZGEsIDB4MDJjY2FkNjEsIDB4NTI3MTM5MjYsIDB4MTM3NzVmZjIsIDB4ZDQ3NDFmZGYsIDB4NjY3YzBjNzcsCisJMHhiODA1MzU2OSwgMHhjMWNiN2ViZiwgMHg2NmVmNTVmNywgMHhkODY0NjMxNSwgMHgwNDNkODRlZiwgMHhmNTFmODFmNiwKKwkweDZiNWRlMjliLCAweDFkMTMzNDUzLCAweDliNTllZjE0LCAweDU1ZjdjMzIyLCAweDFhYTYxZTIyLCAweDU3Njg1N2Y3LAorCTB4OGE3MWYxYWMsIDB4MDZmYTRhZjcsIDB4M2Y0NjM4ZDMsIDB4MmVkYWJmNDYsIDB4MWVlODZlZGUsIDB4N2ZkNmY2OWUsCisJMHhkNjhmY2UzMSwgMHhmMjg2YTlmOSwgMHgxZTlmYmEyMiwgMHg0ZmQyZjdlMywgMHhhZGNmZWZjZSwgMHgzOTVlNjA5MywKKwkweGFjMTRjYmFmLCAweDhjYzFmMzllLCAweDFkNzNlNmExLCAweGNhZmMzNTIzLCAweDk4ZGE2ZmQ5LCAweDljYmYwNGRmLAorCTB4YmYzMWM1M2YsIDB4ZTM4ZGRmMDksIDB4N2YwMWVmODAsIDB4NjE0OTM3NTcsIDB4MjNmOTg0YTcsIDB4ZTUxNjc5NWEsCisJMHgwYWYzZTQ3NSwgMHg5OGFlN2ZlMSwgMHgxYWViY2ZjYSwgMHg4MTU4ZGUzMywgMHg0YjIzM2Y3YywgMHhhMTYwN2EyMiwKKwkweDg5MzdkNjgwLCAweGZhMmYzNWY0LCAweDc4YjMwYmZkLCAweDhmNjg0MmZiLCAweDA4ZjhkOGZjLCAweDEzOTA0ZmU3LAorCTB4MTUyMzk0NWUsIDB4NTJlNmQ3ZWIsIDB4OGJjOTNhZmQsIDB4Yzg2ZTM3ZmQsIDB4MjhhNDdkMjcsIDB4NWU1NDY2NDcsCisJMHhhM2Y0ODQ3NywgMHg0OTIzYTZhMiwgMHhiN2MwYzdjOCwgMHhhODFmNTBlYiwgMHg1MWQ3Njg5OCwgMHg2OGZjMWI4ZSwKKwkweGUyZWJmN2YwLCAweGU4NzMyYjNlLCAweGM2N2VmMWEzLCAweDhiZTY0NmZmLCAweDIxZjJkN2MxLCAweGY1ODNkNzJlLAorCTB4Mzk4MzFmOWMsIDB4ZGY1ZjVmOWMsIDB4MmYwYWUyYTYsIDB4OWY4OWJmODQsIDB4ZmNlMTZmOGYsIDB4NDM3NjNmMmEsCisJMHgyZjg3ZGUyZSwgMHhjM2VmY2NkYywgMHg0NTNmNTgxZiwgMHg3OGZhN2Q0MywgMHhhNmZkYTI1OCwgMHhiZDczN2YyNywKKwkweGFiYmY5YTM1LCAweDdkZWZiZTI1LCAweGUwZDJmZDVkLCAweGUxOGY4MzZmLCAweGFmMWM2YWVmLCAweGVmMTRmODBjLAorCTB4ZjVmMzQ2NGYsIDB4MGZlMWI1NGMsIDB4YWY3Y2MzYjcsIDB4MDNkNjFhNzksIDB4ZGRmMjlkZjMsIDB4MjZhZDNkM2IsCisJMHgxNGY5MDkzOSwgMHgzYzI4MTdjYywgMHgyYjkwY2I5ZSwgMHhmYjhmMGFlNSwgMHg4YmYzZGFmYiwgMHhiNzZjM2YxYSwKKwkweDY3N2U0N2ZhLCAweGViZjFlNDRmLCAweGZkZDEyYTc1LCAweDA3YjNmOGY5LCAweDdmMjA1ZDlmLCAweDlkNWYyODVlLAorCTB4ZjE4ZDNmOGYsIDB4N2VkNjNkZTUsIDB4MmRlODI3N2UsIDB4ODA3NmJmYmEsIDB4ZmFlMDA0NmIsIDB4OGEyNmZkNGEsCisJMHhhOWU4ZmRmMywgMHgzZjExMzMyMywgMHhjZTgxYmJhNSwgMHhkZGVhYmU5MSwgMHg0ZTcyODIyYywgMHg1NTdlZDMwOSwKKwkweDNkZDMyOGQyLCAweGIyNDRhNjAxLCAweGY5OWI3M2FmLCAweDk1NmRjNzk4LCAweDdhMjZlMzNlLCAweDFlZDY3OTJhLAorCTB4NGJlZDAxOWUsIDB4ODYzMDdlNzYsIDB4Nzc5NjY4ZTIsIDB4ZTg1YTVjNTIsIDB4ODcyZmExMjksIDB4MWYyMGM3NWEsCisJMHg3ZTNjMjg5NCwgMHgwNDJlNWEyYywgMHhkNzBmZGMxYywgMHgzNjdlMmJiNiwgMHhjMmRhNGZhZSwgMHg2OTI4OGZkZiwKKwkweDliYjU1MWI4LCAweDc0NmUyNWNlLCAweDNhM2Q0NmE4LCAweDFkMDEwZGQ3LCAweDljNWRmZGUzLCAweDAyZGRmOTlmLAorCTB4NmRhYzZlMjMsIDB4MjUxMzk3MmIsIDB4ODFkOTJhNGQsIDB4YjdiNjViMjUsIDB4Yzk3MGZjNjMsIDB4NzdmMjc2M2IsCisJMHhhMTljYjcwNSwgMHg5ZTUzMTBmYiwgMHg5NGZlNDZkOSwgMHgzOTZjOTM2MCwgMHhiNzExZWI3ZiwgMHhkODhlNDViOSwKKwkweGIxYjBlZTMxLCAweDIxMWRjZTljLCAweDBkZjI4NDdmLCAweGNmOTdlM2IxLCAweGZhNTg1ZjE3LCAweDIxOWQ5ZWNjLAorCTB4YWZlOTYxMDAsIDB4N2NhMGY0OWUsIDB4ZDliMmQ1MzksIDB4N2U4NzcwODMsIDB4YmE2ZTMyYmYsIDB4YzM2NjljNDcsCisJMHhhNzE5NWYzZCwgMHgwMWZmMGE3OSwgMHg0MzhmNzM4YywgMHg5YzQ2MzVkOCwgMHhhNGJlOTZlYiwgMHhiMmZjYzI0NywKKwkweDczOWM2MmYzLCAweGRiZTVlOTc0LCAweGVmMWM3ZDNlLCAweDdiM2RiNDExLCAweDZmOWM3MWZhLCAweDdlM2UzZmQ5LAorCTB4ZDhjMWUzMWMsIDB4NzdlZDI3NWUsIDB4YTJkZWE3YzEsIDB4ZGRhMzZjMzgsIDB4YjVkZmIxMjYsIDB4ZTI5MjdkNmYsCisJMHhiNWRmZGJkNywgMHhmNmI3YjBmYiwgMHg2MzA3YzczZCwgMHhmNmZiNjAzYywgMHg2ZmQwNTIyZiwgMHgzNGNmNjRiOSwKKwkweGQ5MmVlYmYyLCAweGM1OTUyNTMxLCAweDE0OGMyZmQ4LCAweDAxN2MzNmU5LCAweGY4ZDFmM2YxLCAweDgwNzhkMDNhLAorCTB4MDIzZWQ2ZTIsIDB4ZWJmY2EzN2MsIDB4Mjg2ZGJiOGEsIDB4NWVjYzcxZTcsIDB4MWY1YjZmMTEsIDB4OGY0MjllZmIsCisJMHhlYmM2ZGFmOCwgMHhlNTFjYjlhZSwgMHgxZmQ3MjM3ZSwgMHhmYjY3MWJjZiwgMHhkYmYxZTAyNiwgMHg3YWJmODAxNywKKwkweDFiMTAyZmMzLCAweDNmZTExZjdmLCAweGEyZmI0ZjAwLCAweGUzNjlmN2YwLCAweDhhM2M1ZmMyLCAweDdiN2Q4ZDY1LAorCTB4NWM4ZGIzOGQsIDB4N2I4Y2RjMDAsIDB4ZmMzODBmMTAsIDB4ODhjOTFjODcsIDB4NWM1MjVmZTcsIDB4ODY2ZGUyMzMsCisJMHg0ZjlmZjcxNywgMHg5MWZkZTMwNywgMHg1Y2U3NmExMywgMHhjN2I4NWZiYSwgMHg2OGJjNjNhZSwgMHg4OWI3OWVjOSwKKwkweGJjNzdkYTdmLCAweDI2Njg3ZTQxLCAweGIzYjQyM2VlLCAweDNmMWUzZmFlLCAweGQ2NzU4OTJlLCAweGFlN2M3OWI5LAorCTB4ZWZjNjNmODAsIDB4NWRmNDNkN2EsIDB4M2E3MmU5YzQsIDB4N2I3N2UyMzYsIDB4OWQ5NWRiOGIsIDB4ZWUzNmNmNWMsCisJMHhmZGQ3OTQ2NywgMHg3NmMzYzQ1MSwgMHg0MWNhNGJlMywgMHhjYWY5MWQzYywgMHgwZTAzNjg3OCwgMHhkZGMzOTBiYSwKKwkweGUzYjFlODcxLCAweDJiZWViYmEzLCAweGZlMjE3YzA4LCAweDhhZWExZjcwLCAweGMwZmM4NzMzLCAweDdhMzdlNGIxLAorCTB4MDc5MGM1OWIsIDB4ZmM3ODFiZWQsIDB4ZmIxYWJiN2EsIDB4OTcxMWIwNWUsIDB4M2U2ODhmZmUsIDB4M2M1ODVmMGQsCisJMHhmZmU2ZjlmYSwgMHg4MWQzZTE3NSwgMHg0ZjcyNGZjYSwgMHgyZGZkYjUzOCwgMHg3NzRmMWNiNiwgMHg5ZWVjZGY0YSwKKwkweDdkMTQ5OTYxLCAweDFjZWJjYTZmLCAweDQ3M2I3MTg3LCAweGJiODNiNDM0LCAweGRlYjE2Y2VjLCAweDZmNTdlMTM2LAorCTB4NzhhNjRhN2IsIDB4MDcwZDU1ZTUsIDB4Y2I0NzhlNDgsIDB4MmY3YzBhOGIsIDB4MzM3Y2M2MjUsIDB4OWEyYjdjYzUsCisJMHhmNmQxM2VmOCwgMHg4MmVjM2JhYywgMHhlZmY2ZGE3ZSwgMHhhOGFlN2EyMiwgMHhkMmYxNDIzZiwgMHg5NWY5NmYyZiwKKwkweDhiOGE2YWQ2LCAweDZjMjI3ZGMwLCAweGQzZGI3ZjlhLCAweGRjOTBjNmZiLCAweDQ0YjJlZjE2LCAweDhjNDkzMzhmLAorCTB4M2Q4ZTZjMTMsIDB4OGNmZWIwNGUsIDB4NTBkMjljNjUsIDB4Y2ViYmE2ODMsIDB4YzUyOWRlM2YsIDB4NzdmNjIzN2YsCisJMHg4M2ViODVhYSwgMHhlOWU0MWFhNywgMHgwZmUzMThlMSwgMHg3N2Q2YWE3MywgMHhhNGJmNjBhMSwgMHhmY2RjNjdmNywKKwkweDEzZDkxOWJkLCAweDEyZTVmYTQ3LCAweDA5M2JjZTc3LCAweDE0NmE5ODQ5LCAweDRjYmQ1NWFmLCAweDg3ZmQ3N2M0LAorCTB4NWRmMTBkMmYsIDB4ZTE4YWJlZWQsIDB4N2MyMjU3N2MsIDB4NTUxZTdlNGQsIDB4NGJkNDMwMGYsIDB4MmNiY2I0ZDUsCisJMHhjYjQ0MmJmNCwgMHhjNmM5MmQxYiwgMHgyZmZjMjZjMiwgMHhmNTRmNGY3MSwgMHg2NDQ3NzlkMiwgMHg3MGYzZTIyMCwKKwkweGZiMTU3MWM2LCAweDlmOTQ0YmZkLCAweDViMGEyZmVhLCAweGZiZjMwYTk1LCAweDJkZjI0ODRiLCAweGRmZDk3ZTgzLAorCTB4ZTc5NDE4M2UsIDB4OTc3ZmQ5ZWUsIDB4ZDk2M2YxMWUsIDB4YjBhYTU3ZTIsIDB4YmI0NjFlNzcsIDB4YTRlMGJkODQsCisJMHhhZjc5MDZmOCwgMHgwOGY5ZGU5MywgMHhmNWE0ZWUzZSwgMHhmOWYxZDgxZSwgMHhmZjVmYTQxMywgMHhiOWY4Y2VjMiwKKwkweDIwMmY1ODBmLCAweGRlNzUwYWFmLCAweDlmMWRmMWM3LCAweGQ0NTdmZTNmLCAweDhjMzFiMTlmLCAweGQ0MzhmODVmLAorCTB4M2VhMWJiNDcsIDB4OGU5Y2VjOWUsIDB4YTBjNjEzNjcsIDB4ODVmMGE0NWYsIDB4M2NhMjY2YmIsIDB4ZjRlNzhjMmIsCisJMHg2YTRjZjg1OCwgMHgzYmZhMWFiOCwgMHhjN2YzY2M5NiwgMHg3N2EyMGRiNiwgMHg3NTlmNGEyNSwgMHg4MWU4ZGM1MywKKwkweGUwNTVjZjFkLCAweDRjZmVkNGJlLCAweGE5N2RjMzNjLCAweGU3YTEwNWZkLCAweDUzYmM1MmZmLCAweGNkN2FhYjU1LAorCTB4NGNjNWUzZjEsIDB4ZjNlZjlhZjEsIDB4MTJkZTYyOTQsIDB4MmZjOGM0YWYsIDB4ZmU4NDdjNDEsIDB4YmEwNGE2YWEsCisJMHhhZmZhMDQwNywgMHhkNDhmOWZhNSwgMHg0NDdjM2JjZSwgMHhmY2ZlYTFjNywgMHgzZmE0NTNmZSwgMHg3YWU4ODNjYSwKKwkweGNlYmRmOTQ2LCAweDM5NWVlMjIxLCAweGQ3NzU3M2I0LCAweDA1OWQ2YTBmLCAweDlmZDM1ZjNjLCAweGFhMTY5M2NiLAorCTB4Zjg1M2IwZmYsIDB4Y2Y3OTQ1OGYsIDB4ODdmZDc5N2UsIDB4ZWVlZWZjODQsIDB4MTBhZmI3ODcsIDB4ZDM0NGQwZWYsCisJMHg2ZmQxNDZlZiwgMHg1ZmJmOTZlOSwgMHg5NTlkZWIxYywgMHhlZmE3ZjMxOCwgMHhjODU4OTQzZiwgMHg3NmNhN2E4NiwKKwkweDg1N2ZiZDI3LCAweDdkZTAyOGVmLCAweDNmMWE5ZDg1LCAweDQ0ZjMyYWQ3LCAweGRkOWI5ZGU4LCAweGM1OTcxZTQyLAorCTB4OWRkZGU4NDUsIDB4NTgxZTYyZmUsIDB4ZDFjY2YzMWYsIDB4OWZiZDM0ZmEsIDB4NjE5MzljZjYsIDB4MGJmOTU5NWMsCisJMHhiYmUyM2Y2ZSwgMHhjN2U3ZTc3YywgMHg3MTg1OWU3ZSwgMHgxNzE0ZjE4OSwgMHhmZmMyZmU1ZiwgMHhiNzI4M2EyMiwKKwkweDNmMjJlNjQ3LCAweGIzYjc2ZTc0LCAweGRiZTdjODhkLCAweGZjOGMxZDVmLCAweDA2NDZhNmRhLCAweGYzOGFmOWY3LAorCTB4YmIwNmYyYmEsIDB4NThiZmZlZjUsIDB4ZGFhYWE5YzcsIDB4YmJiZWYwY2IsIDB4YTRiNmFmNzEsIDB4NTdmMzM5MTcsCisJMHg1ZmEzZDcyNywgMHg3MjVmZmE3MSwgMHhkZjViYmYxMiwgMHgzNTU1M2E3MywgMHg1OWRmMTMzYiwgMHgzODk3ZWEzMCwKKwkweDc3YzVjYjYyLCAweDEzN2M1ZTUxLCAweDcxZWFlZTM5LCAweDljNWRmNTNmLCAweDI1YWM0N2NmLCAweDE1M2VmZDA1LAorCTB4M2NhMzc3YTAsIDB4M2U5MmQ5MmYsIDB4ZmIwNGZkMTAsIDB4MDQzYmM2OWQsIDB4OGZkYzA0ZGUsIDB4YjI1ZWFiZjYsCisJMHhlZjM1MzFhNywgMHg3Y2FhMjczMywgMHhmNDMwY2E5OSwgMHg1NGNjOGNkZiwgMHgxYjFkMWQ2MCwgMHg2N2Y0MTRjZSwKKwkweDljZWE0NzE4LCAweDlkZWU0YjFkLCAweDNhZDNjNjc2LCAweDk4ZjYxYzRhLCAweDA5Y2Y5ZGY3LCAweDhkMGY3YWJhLAorCTB4MWUzZTY0ZmUsIDB4ZWUzMTg3ZjIsIDB4NzI0YzM1N2UsIDB4MmYzODhlZjgsIDB4YmIwMTJiZDUsIDB4NmU5N2JmMDgsCisJMHg3OTY5OTM5OSwgMHhhMWE5NDU3ZiwgMHgwNGE3YzA3YSwgMHg0ZWI2NjJjZiwgMHg2ZmM5MzJjYiwgMHhhNWUyYmM2MywKKwkweDI2NGE5OTU5LCAweDRmZmU1NzdlLCAweGRkY2FiZDE3LCAweDI0YTE2Njc4LCAweDAxMTUwYmQyLCAweDlmYWViNjYzLAorCTB4YTI4ODdlZTUsIDB4N2UxMDM5ZTYsIDB4MTVkM2NiMWEsIDB4ODZhNTQ5MTksIDB4MzU4ZTNkZjgsIDB4NzUwMmVhNTAsCisJMHg1NjUzYmY4YiwgMHg5ZTRlNTBjOSwgMHhlOGY2ZTcxMCwgMHgxYmI0YzJlZiwgMHhkYzkyNzc1ZSwgMHg2YzYyMGQwZiwKKwkweDA3YmUzYTc4LCAweDRkZDA0ZGUxLCAweDEwZjE1M2YwLCAweDU3NjNlNjFlLCAweDE3OTcxOTJhLCAweDkzYjQ3NDMzLAorCTB4N2Q4MDUwYTUsIDB4NWQ1NGY0MDksIDB4ZTkxMzNkMzUsIDB4MThmY2ZlMTEsIDB4MDdhNjQ5MDcsIDB4YmZhM2NmY2MsCisJMHg0MWVhMDVmYywgMHgzZGZjYTc0MCwgMHg3MGIyZWZiZiwgMHhjMzE4ODAzNSwgMHgzYWFmYzk4MSwgMHhlODc3ZjE5OSwKKwkweGNjYzNiZjU2LCAweDcxYTVjNmY2LCAweDY4ZTc3ODkyLCAweDE3MzFjOTFmLCAweDg0ZWJmZWViLCAweDk0NTU4YTNjLAorCTB4ZmYwOWQ1YjcsIDB4NDQ3M2MxYzgsIDB4YTgyMmNlOTcsIDB4NThiYmM2MTcsIDB4ZDc1MjFlMjQsIDB4OTk5NGU1MjgsCisJMHg5MDU5M2RmZiwgMHgzZWE5ZDEzNywgMHhjZDFlNWFkMSwgMHhhMmQ3MjAxNywgMHhmODIwNmRjNiwgMHg0NDlmYmY0MSwKKwkweDU0NDlmYmY1LCAweDU1N2M5ZmJmLCAweDgyOWMwNmJmLCAweDdjM2U4ZDhlLCAweDU1NjU2MmE3LCAweDFmMWI4MDllLAorCTB4MDZlMDIxY2YsIDB4ZWY4OTE5ZjAsIDB4OWM1YjMxZTgsIDB4MTM4NzljNGYsIDB4NmNjNGUzNWMsIDB4ZjAxZjU4ZWMsCisJMHg0ZTk3MWU1YSwgMHg2MTJmYjk3OCwgMHg0MWM2Mjc2ZiwgMHg4NjVhYTRiMywgMHg4OTBhZWY3NiwgMHg5N2YwZDNlZiwKKwkweDYzYjUzMmU3LCAweGYwZjg4M2JhLCAweGI5NGUzMTFlLCAweGMzMGFmMzgwLCAweGJlYTNkNTNmLCAweDFlYWZmNDkzLAorCTB4ZDViZDlkZjUsIDB4ZGY1ZDhiOGYsIDB4ZTI3Y2RiZGQsIDB4YjEyN2NmNjMsIDB4ZTI2YmZlOTcsIDB4NzVmZmY2NjMsCisJMHgwYmM1NTJlNSwgMHhlNzg2YmY2ZiwgMHg0OWYyNWRiNiwgMHhmNTViZDAwNywgMHhkNDM4ZjJjYywgMHhmZDhmMTMzMywKKwkweDcwYmU5NWEzLCAweGQwMzFkMzNkLCAweGE0MzhlZjhhLCAweGI4YjdhMDZmLCAweGQxZWZkNjYxLCAweDdkMWJkMjc0LAorCTB4NDA3NThiZTUsIDB4ZTAwZmQ1ZGUsIDB4N2YxODkzNzAsIDB4ZjczZjFkNmEsIDB4ZjcwOTY1YmUsIDB4ZTg3OTgxZDMsCisJMHg4YjM3ZmFjNywgMHgwYTM5MzdmYSwgMHhjNDcwZGZjOSwgMHhiYWJmZGZjNiwgMHg5MWViOTZhNSwgMHhhNjU4ZmNiNywKKwkweGVmMWVlOWYzLCAweDgwM2ZlMTUxLCAweDJhNWQ2ZWRmLCAweGIxZTkyMzg1LCAweDc1NjJkN2RlLCAweDllNmUzZjc4LAorCTB4YmRmYTNmMTgsIDB4ZTZmMzAwYWEsIDB4YmQ2Mzk2YWUsIDB4ZDJlOWM1NTcsIDB4ZmQxNzU3YjgsIDB4OTYwMmM1NGUsCisJMHhiMzIxZGUyNywgMHhkNGViM2Y3ZSwgMHhjZDY3ZTRiYiwgMHgyYzdkZWVhOCwgMHgxZWU4MTZiNCwgMHg3YmEwNGZmNSwKKwkweGViYzc5NzNjLCAweGUyMTcxNDYyLCAweDQ4NWM3OGQxLCAweDRmM2EyMGNiLCAweGQ5ZGZlNDMzLCAweGRjMDRkZTkxLAorCTB4MzA3Zjk5YWYsIDB4ZWZmM2FlZmYsIDB4YTZmNGFmOGIsIDB4MmExZGVmOWEsIDB4ZWYyY2UyZTcsIDB4YmVhYjU0ZjUsCisJMHhlYTZmOTQzNCwgMHhjMTVmZDAzOSwgMHgwZGNlZDY1NCwgMHgzOTUzNWU2MSwgMHhmY2M0YWRlOCwgMHg3MjQ5YmUxOCwKKwkweGEzMDk0ZDJhLCAweDNjZjQ1NDVjLCAweGFmN2E4ODU2LCAweGE4YzNlZjc4LCAweGQ1NWQyNWFmLCAweDBlYmU2N2E1LAorCTB4NGI4ZTZmZmYsIDB4YmM1Y2JlMjYsIDB4YjZmNzRiZDYsIDB4ZGJjZjhiM2YsIDB4N2IyNGY0ODksIDB4NTcwMTdjNzIsCisJMHhlZDA4N2E0ZiwgMHhjNmFlZWJlMCwgMHg1Y2Y3YTc3NSwgMHhmM2U2YjU0ZiwgMHgxNTdkYmU5MSwgMHg2ZmZjODA4MCwKKwkweDRmY2UwNzNlLCAweGY2ZGY3YmI2LCAweGEzN2VmY2UyLCAweGY0YmJmNDMyLCAweDQ0ZWY4Zjg0LCAweDg2Y2ZjYTE4LAorCTB4ODg3YzUwMDcsIDB4MDQ2MzMwOWMsIDB4YmM0NmJmOGUsIDB4NmFiYWJhNmYsIDB4YWEyYmE1MjQsIDB4YmM3OTQ4OTgsCisJMHhhZjJhOGFkYywgMHhlYTQ0NzM0OCwgMHhhYTc0ZTkxNywgMHgxYTU1NmY3NywgMHhmOTU1NTdlNSwgMHhlYmUwMzUyOCwKKwkweGZiZDBkNWYwLCAweDdjNjE4ZTkzLCAweGYwMmU4NzdjLCAweGYwMTM2NDk3LCAweGU1ZmU5MDBiLCAweDczYTRhYjQ4LAorCTB4MTk1ZWE3NDUsIDB4ZDhkZjc3YzEsIDB4NzA3N2Q4NDAsIDB4YzEwZDdhNTksIDB4ZjkxOWQzNTcsIDB4ZTUzZWExMzUsCisJMHg1NDg3OThlZCwgMHhmODQxOWRhZCwgMHg1NjRhZjQ1MiwgMHhjNTZmZTUwOCwgMHg1YzIyOGUwNywgMHgyZDRiZGU5ZCwKKwkweGQzZGE1YWVmLCAweDdmYmQ0NmM2LCAweDgzNmYwNTFhLCAweGI4NzFiNmRlLCAweDdhNzEyZmRmLCAweGZkZmI4NjhiLAorCTB4ZTMxNzhiNmEsIDB4YjJiZmVlMjIsIDB4ODIyOTVkZWIsIDB4MWM0Mzk4M2IsIDB4ZTdlNmJmZWUsIDB4ZGVlMTNkYjQsCisJMHgwOWJlN2IzMiwgMHhlOWVjZWVlZSwgMHgwNGZiZjcwNCwgMHg3MDE2ZWY5YywgMHhhODc4MTZhZCwgMHg0NmFjZjAxNiwKKwkweGE0N2U1M2I4LCAweDNhNDRmYmM4LCAweGM0N2JkMjlkLCAweDExMmJiN2ZiLCAweDA4Y2E5MDFmLCAweDdkODc4MDc3LAorCTB4MzBjOTg4NTQsIDB4ZjE3OWJhMWUsIDB4NzQxMmVlY2YsIDB4MWZjOGRiYWIsIDB4ZmNmMmJiMmEsIDB4MTI3Yjc3MDgsCisJMHgwNWMzYmI4NywgMHgwNmJhMjA3OCwgMHgzY2IxN2JiOCwgMHg1ZDU0ZjA0NCwgMHg5ZjUwY2UxYywgMHgxNWU0NDFlMywKKwkweDdlMjY3Yjg0LCAweGI4MDBmOGU3LCAweDg3MWY4ZGY3LCAweDA1ODI3MGYyLCAweGU0ZDI1YWNlLCAweDIzZmI4MzBiLAorCTB4MTI0YjdmN2MsIDB4YmYwZDFlN2MsIDB4YWZiZjhkMjQsIDB4NmY3N2YwNmIsIDB4ODhiNTcxZmEsIDB4ZWYxNmFlYjcsCisJMHg1MTFjMjIyNywgMHhlMDA4NzlhZiwgMHg0ZjBlMzRjMywgMHhjOGE0N2RmZSwgMHgxNjRkMjhmYiwgMHhlMDM1N2ZmNiwKKwkweDE2MWZjYjAxLCAweDE5YzIxMGZhLCAweDczYzUxZmQzLCAweDU2YzkzY2ZiLCAweDM4NDU0ZmI5LCAweGYyZWZlMWY1LAorCTB4MWIxMGE0YjAsIDB4Njg3OGNkOTgsIDB4ODVhNWZlMmYsIDB4YzZmMzE3OTgsIDB4NGFkN2FmZjksIDB4NDRhZWIyM2YsCisJMHg3ZGU5MDNiZCwgMHhkZDZkZTkxOCwgMHhjZjBkYWFhYiwgMHg1N2E1ZTQzZiwgMHhjYjY3ZWU1OSwgMHg1ZTg5ZmRiMywKKwkweDQyNDA3ZjgyLCAweGMxM2VlNmJkLCAweDVlOTE2Yjg3LCAweDFlZGM3ZTY4LCAweGUwZTgyOTVlLCAweGVlZmVmMTZlLAorCTB4ZWU3ZTgyM2QsIDB4YTBmY2ZjMTcsIDB4N2UzZTM3NDEsIDB4NzRjZDY0M2YsIDB4OTQ5OGM3MWUsIDB4MjBlZjEzNjEsCisJMHg0ZTM5OTg0NiwgMHhjMGQ3ZDEzMCwgMHhkOTE3OTgzNCwgMHhlOTRhNWUzNiwgMHg4ZWY2NGI5ZCwgMHg3ZTM2Zjg5ZCwKKwkweDdkMjNmMzE0LCAweDY3NzNiZTI1LCAweDliNDNiZjk4LCAweGExZjUwZmQ3LCAweGQ5ZGRlMzQ0LCAweDM5YzRkZTg5LAorCTB4YTIzZDMxNzQsIDB4NjUyMGY3ODgsIDB4YzRiNjRmNmUsIDB4ZGFiNWRmN2MsIDB4N2U4MWRmYjcsIDB4MTNlNmRlOTksCisJMHhhZmE3ZjNlZiwgMHg2YmUyZjE4NCwgMHhmNTQ3NjRkZCwgMHg1OWNkZTQwZCwgMHgyZDU3NzkwOCwgMHhjYjBjNTVkOCwKKwkweGMxNzA3Y2I5LCAweGY0NGQwYmJjLCAweDVmOGJkZjExLCAweDU5NWQ3NTQ3LCAweGY2NGFmNDgwLCAweGE5M2ZhNDM4LAorCTB4Zjg0NGVhMWQsIDB4ZThiZGFjMDIsIDB4Y2Q0ODdhYmYsIDB4YzFmYjg3ZWIsIDB4ZmRiMTg5NDMsIDB4YjllMmIzNzAsCisJMHg3NTkzYzRiZiwgMHhiMDlmYzVhOSwgMHgzYjUzZjU0ZSwgMHhkZTU1YTI3ZCwgMHg0M2ZiMTNhYywgMHhmZTU2YTk5ZiwKKwkweGNiODNmNjMwLCAweGM1OWY3ZjQ0LCAweDBmMTQ3ZTA3LCAweDZlNzI5Njc0LCAweGE0Y2ZjOTJhLCAweDBmZWY2MzZiLAorCTB4YzIxNmFhZDUsIDB4NDdhYTM5ZjcsIDB4ZTUwZWJlNzMsIDB4ZWU2ZjVjNmIsIDB4OWQxODc3MjEsIDB4OGMwZDljODMsCisJMHgyZmZlODhkOCwgMHgzMzk2YmU4MywgMHg4YzQyZTcyZSwgMHhiYWM2OTNlYiwgMHgzZWY0ODY3ZSwgMHg5ZDAxZjcwMiwKKwkweDAxZjcxZWU4LCAweDM0YzNjYmNjLCAweDViOTQ5YmEyLCAweDU4N2ZlNDZjLCAweDVlZWNmODI1LCAweDA0NmI1ZmMxLAorCTB4N2M4MDNkNWYsIDB4ODFkZjAyMzUsIDB4MTNmYTUxZjYsIDB4OTBlYjRmYzEsIDB4MTJkZDIwZmYsIDB4NzhmNWNlOWYsCisJMHg2MTk3YmVmMSwgMHg4Yzc3MmNjNywgMHhhYjFjZjdhNSwgMHgwZmRhMzY1ZCwgMHg2MWVkNzc5NCwgMHhmYjA1ZGExNywKKwkweGY3ZThlYmM2LCAweDdhNTlkZDkxLCAweDU5ZTU4ZGMwLCAweDQzYzAzZjBlLCAweDkxZDJjYzRhLCAweDJmNzMzZTVlLAorCTB4ZTJhYmU4YjgsIDB4ZjRmZDAxNWIsIDB4NzJhMmIwYWUsIDB4OTQ5ZWE0N2YsIDB4NDUxZmRlYzcsIDB4OWVmNDUzYTcsCisJMHhjYjVmYWE4MCwgMHg3MGZkM2ZkMCwgMHhlMTEzYTU1MiwgMHg4ZjNjNzBmYywgMHhjZmNkYWFkMywgMHgzZTAzYjgyNiwKKwkweGUyOWJjNWI2LCAweDVmNjc1MmE1LCAweDFmMWVmNWQ1LCAweDJmNzBmZjc2LCAweDEyZWMxMmVmLCAweDBjMGQ4MmYyLAorCTB4ZjkyNjYxYjEsIDB4N2JkZTJiNTAsIDB4MWIxMGRlNjQsIDB4Y2IxMzkyNjksIDB4ZjQzMmU3ODcsIDB4MGY5NGY1ZWIsCisJMHhjZGNiYzhiZCwgMHg5MGFlNWU1YywgMHg0MzRiY2I2MiwgMHg2NWU0Mzc3ZiwgMHhkMjMxNWNiNCwgMHhiNzRkMTc5NSwKKwkweDVkNTRhN2RjLCAweDY2ZjI0NjNlLCAweGMxZmY2YzY0LCAweGZjZWRlM2VmLCAweGYzZTY2YTFkLCAweDJjZjdhN2U1LAorCTB4ZGVmZDc4MDcsIDB4ODNkNDJmMGMsIDB4ZjdjNTdmMGMsIDB4NWEyN2FjNjIsIDB4Y2FiODllM2UsIDB4ZjQwMzU3ZDgsCisJMHhjZDAyZDAzZSwgMHhhZmY4ZjBmYiwgMHhmYmFkNTdkYywgMHhkNWI5ZTE0MSwgMHg5YzE0MGZhNCwgMHhhOGI0YTFjYiwKKwkweDExZjEzYTc2LCAweDkzMThkM2MzLCAweGZkN2M3YzlkLCAweGRmODgzZDBmLCAweDdjZTJiNWUzLCAweGM2MWFiZDdjLAorCTB4MWI3ZGE0YjgsIDB4MGU2MDdhZWYsIDB4ZTNjMTc1YzAsIDB4ZTM4ZjlkMzIsIDB4MTRkOTBkM2QsIDB4YmNiMmMyZGYsCisJMHhlZjFiYTdhNCwgMHhkZjBmMWUyMywgMHgzMWM3MzFlZSwgMHhlOWQ0ZmMxNCwgMHgzN2JmZmQ0NywgMHgxZjU4MmM3YSwKKwkweDhkNTM3ZmRiLCAweDgzYmI0NGZmLCAweDVkYTI0NmY5LCAweDY3NWRmYTAxLCAweDlmYmZmNTA0LCAweDE4ZGRlOTM4LAorCTB4MThkYTFmMjMsIDB4OGZjNzMzZWYsIDB4ZjE1YmU5MTgsIDB4ZGMyMWNlZDMsIDB4MzNmNzhhZGYsIDB4YWI5ZGQyMTcsCisJMHhmNGQ3OWQwZiwgMHhkYzdjMTdjZSwgMHhjNzMzZTg2MywgMHg0NTQ3ZDI3MywgMHg3ZGMwMzU5YywgMHhjYTdmYzU5NiwKKwkweDA5OGY0OWNmLCAweGY0NzMxODdmLCAweGNhMjcxZTUyLCAweDdiOTRiZGJkLCAweGQzMTMzYzc4LCAweGQzZmY5NzYzLAorCTB4M2Q1MWE0N2UsIDB4YjgyMWI0ZWMsIDB4ZDNkYWYyZmUsIDB4MmZhNWRlYWIsIDB4NjI4MGYzZDYsIDB4NjBiZGM3MTEsCisJMHg3OTc4N2M2MywgMHgyMDU5YmUwYywgMHgxMDJmMDdlZSwgMHg3ZDA2NWRlNywgMHhkMGRmN2YxNSwgMHg0NjVkMzliMywKKwkweGQ0ZjRhZGQzLCAweDFmYTc0NDI1LCAweDVmYzk1NDFmLCAweDg3ZjQwMTViLCAweGQ0ZjQ5ODdhLCAweDY5OGY3YTc4LAorCTB4M2Q5NzEzZDksIDB4ZjljMDBiNzgsIDB4OTUzMjQzOTMsIDB4MTA3MzlkOTcsIDB4ODdmZmI2NWQsIDB4M2JmY2UyOGYsCisJMHhlZmQyYWI3ZiwgMHg3MDcyN2MyNiwgMHhiN2ViYzUxYSwgMHhiYjllZjc4YiwgMHhlZGM1Y2VmOCwgMHg1YzVjMWJkYSwKKwkweGJiOWMxNGFlLCAweDhiYmJlODk3LCAweDM1ZjNjMmFlLCAweDczODJkYmU0LCAweDU2NWU5MDBmLCAweDRlYmRlZjgwLAorCTB4Nzg4Zjc1YzAsIDB4ZTgyMjkyNzksIDB4MWZiNjAyNzcsIDB4ZWExY2JiOTIsIDB4M2U3MmI2MTUsIDB4MTU0MzEzNjEsCisJMHgxMGRlOGZlNCwgMHgwNjM3YmJlZiwgMHhmMmUwZGYzZiwgMHgwYjQ1ZTI1YSwgMHhmZjUwZDc1YiwgMHgyNGMzZjQwYywKKwkweDAyYzg1YzUzLCAweDg1MDdmYmYxLCAweGU1ODRiODc4LCAweDIxYTU4ODdhLCAweGQ2ZjkwOGRmLCAweDc3ZDZmZjRkLAorCTB4ZDY5ZGRiYjAsIDB4YzJlOTFhNzUsIDB4YjA0ZTc1YWUsIDB4ZWJkZDYxZDgsIDB4NzNlNzJlZmMsIDB4YjYxNDZmYTEsCisJMHg3NTc5ZjBlNiwgMHhlM2U3ZTdhZCwgMHg3YmE3YWQ2MywgMHg3ZGE5MTMxZCwgMHhmMWVjNjI3YiwgMHgxZmUzMTdlZiwKKwkweDliYzIyYWFiLCAweGJjNDRhYzViLCAweGJlMTA1YmI3LCAweGQ1ZjdjMzVkLCAweGY2MjdkNjBhLCAweDJhZWI0YzkxLAorCTB4YzRiNTJkYWMsIDB4ZTZkNDE1MmIsIDB4ODU3YWZiZDMsIDB4ZGJiNWYzZWIsIDB4MTc1M2ZiNGMsIDB4OTdmZTQyNWUsCisJMHhjNmViMGQyNywgMHgyZTZiZmRjYiwgMHhhZWE4YmMyMywgMHg3ZTkxM2JiYywgMHg3YzU1M2Q4ZiwgMHhlYzVlN2JjNywKKwkweDg0ZTllMzk3LCAweDQ5NTMxYTE2LCAweDRmNzZlYWYyLCAweGY3NGRmYmFjLCAweDU2YTllMzQ3LCAweDgwZWMwOWUwLAorCTB4MGM5ZTEzMmMsIDB4M2ZiNzQ0ZmMsIDB4OGVmY2I5YjYsIDB4ZTIxY2YwZjcsIDB4NTA5YWZlMTEsIDB4MGEyYmYyZWYsCisJMHhlMWIxZTk3ZiwgMHhkN2EwYTRmNywgMHgwNDBmYTA2MywgMHhkZjdlMDgyZSwgMHhmNWNiYzRiMiwgMHg2ZjgxM2YwYSwKKwkweDc3YzYzZTAzLCAweDA4YzJlN2QwLCAweDM3OTEyN2I3LCAweDRlM2ZiMTkzLCAweDViODNlNzBmLCAweDFlODJmOGY3LAorCTB4Y2Y1ZWM1MjYsIDB4NTllYjVkNmIsIDB4YzdhMDQyY2EsIDB4M2ViOGQ0OWMsIDB4ZWU3YWZiZDEsIDB4MDVjNzIxNjIsCisJMHg0ZjhiYTdhYywgMHhmYTdjMmRmMywgMHgzODViOWFkYSwgMHg5ZmZjMGE5ZiwgMHhkMTBmN2ZkYywgMHhiYzcwYjFmNSwKKwkweDdhNTRlMzBmLCAweDQ4NmJjZjViLCAweGQwNjJlMzA3LCAweDFiMTBiMGMxLCAweDhmN2ZmZDk1LCAweGZlNjg0ZTBlLAorCTB4M2VlMDhmMTEsIDB4ZWUxNWZiMDIsIDB4ZGU0ZmM1ZDMsIDB4YmYzY2M2M2YsIDB4ZmQyN2UyYjcsIDB4OWFhNWY2OWUsCisJMHgwZWE3M2IwYiwgMHhmNDFkZjY0ZCwgMHhmYjI3N2VkMiwgMHg0MzQ5NjFhYSwgMHg2MzNmODE1ZCwgMHhhM2NmMTJmYiwKKwkweDZlOWZhMTlmLCAweGM2Y2ZlMjQ1LCAweDU3OGJkMmM0LCAweGM3MmUwNTU2LCAweGFhZWE4YmYzLCAweDhmZDFjYmEyLAorCTB4OTczZDBhYWEsIDB4Y2U5YjllYTEsIDB4ZDYyMzE3N2YsIDB4Y2RjYzdkN2IsIDB4YWFiMmJiZjEsIDB4OTgzZmNlOTIsCisJMHg5NGY0YzQyMywgMHhkODAwNzdlZSwgMHg0N2YyNGM4OSwgMHg3ZWFiMmUyYiwgMHgxZDAxYTlhNiwgMHg3ODlhZGZmZCwKKwkweDAyNTU0MGE3LCAweGQwYjNkM2FiLCAweDExOTQ5NDVmLCAweDFmZWZjMTMyLCAweGIyZWU3ZTJlLCAweDhlYmY2ZDI2LAorCTB4ZTg3NjFhZTcsIDB4OGU2MGZkMWYsIDB4OGI1OWNhODEsIDB4NjU0NWVjZmYsIDB4OTNjMDVmNDEsIDB4MWM3MzFjZjEsCisJMHgxMjRiZjA2YiwgMHg0NmNmMTNmOSwgMHg1YWNmMTNmOSwgMHhmMzA0OTFlNiwgMHg1YjNiMGFmZSwgMHgxY2U4Nzg3MSwKKwkweDhmYzI2MTUyLCAweDVmMDFlMDJjLCAweDViYmIxZjY4LCAweDFlNWNlYmU3LCAweDYwN2QyMWVmLCAweGIyMzY0NWQ1LAorCTB4ZmYwOWQ2ZWIsIDB4MmZkMGNmZjQsIDB4ZTg1MTcwNGQsIDB4ZTBjMzAxYmMsIDB4YzA5NmJlYjAsIDB4NzNjNGUxZDcsCisJMHhhZGVkMTkwYywgMHhmOGRkZTUwOCwgMHg0ZjRjOTc2MiwgMHg0Zjk4NGExZiwgMHhmMzA5NWU2NCwgMHgxNTY0NTk3ZCwKKwkweDkzMWQwZmRhLCAweDNmMjBlZjVhLCAweGU2OTAzM2EwLCAweGQ2N2ViYzA2LCAweDg0YjBlNWFmLCAweDgxNzkxMmU3LAorCTB4YjVjZTExOGIsIDB4MGJjMzI4NzIsIDB4NzcyMTdmZjUsIDB4YzFiZDYwNjYsIDB4MWY0ZWY0NTAsIDB4Zjc4NDVlOWUsCisJMHhmM2E2MDIxMiwgMHg4ZWI0MjFjZSwgMHgzM2RjYmNlZSwgMHgyNTUyZDE3ZiwgMHg2ZmVmZmNlYSwgMHg1ZmNiOWIxNywKKwkweGM2MmZmYTcxLCAweGY5M2I1NDc5LCAweDFmNDk2MGZiLCAweDU3YmU3NDQ4LCAweDk0ZWU3NWRkLCAweDY0ZjJmYjQ3LAorCTB4ZDEyM2M3MzcsIDB4NDFkNWQyMDUsIDB4NTU5ZDM3YWUsIDB4Yzg3ZDA5YmMsIDB4ZjMzMjNkOWYsIDB4N2MzY2NiNDUsCisJMHhlYzIyYmM5NiwgMHg1M2EwM2FkMSwgMHhlODMyYTczYywgMHhiN2UyOTg2MywgMHhhZjBkMWQyMSwgMHgzYzY2ZWY4MSwKKwkweGZiNzdkMGM2LCAweGYwNzllOGI4LCAweDMxYjlmYTk4LCAweGU4OTcxODNmLCAweGNiOTczZTU1LCAweDdhMjhlM2Y3LAorCTB4ZjlmMTJkZDgsIDB4ZGNlZDhhODcsIDB4MTkyMTY0NmUsIDB4MjBjNzNhZjEsIDB4Y2YwNTY1M2MsIDB4OGZlMzMyMjcsCisJMHg4ZDc3YjVlYywgMHg4MmI2Mjc3MywgMHgwYjllNzVlNywgMHhiOWNmYzZkZSwgMHhhNzMzZTdhMywgMHgzYzE2ZWVmOSwKKwkweGRjZDM5OWVmLCAweDdiOWUzZTZmLCAweGY4YmEyOWNlLCAweGFiNzc0YzQzLCAweDUxZTNmYjlkLCAweDIyNTBmYzVlLAorCTB4YjdhNmY2N2QsIDB4MjFlMzU0NWUsIDB4NDZlNmYxZGQsIDB4YWU2MDlmN2EsIDB4NzNiZmVmOWIsIDB4Zjg4YWE3NTksCisJMHhlMzVkMzAwZiwgMHg1YTYxNTZlNywgMHgyN2NjNmRkZiwgMHhmYTJhMGRmMiwgMHg4NDg5NmUxZCwgMHg3MjFhYjg2ZiwKKwkweGJlMThiZWI3LCAweGI5YmRkNTFhLCAweDQyNWYzYjA3LCAweGY0MWEwNWI0LCAweDMyMWIzYTVjLCAweDVlZjkzNWRhLAorCTB4YWVkZTc5ZTYsIDB4ZjE0ZTBlMGIsIDB4ODM4YTQ3ZmIsIDB4NmViZGQ1ZDYsIDB4NThjMWMxMDcsIDB4N2MyNGQ0MjcsCisJMHhiYzQ5YzE3NCwgMHhhNWMwNjZjZiwgMHgzN2YxZGQ2YiwgMHhmOGZlODU1ZiwgMHgxY2RjZTRkZSwgMHg3OTBmZThjNywKKwkweDU3OWYzYzljLCAweGMxM2U5YzM0LCAweDBiOTM5MDIyLCAweGI5MWZmZWRkLCAweGI3N2FmY2ExLCAweGNiNGMyZWZmLAorCTB4OTU4MzlkMWMsIDB4NTUzN2M0MjEsIDB4MDM5MGFmOTgsIDB4MWMwMGE1MTcsIDB4YjgxNDFhM2UsIDB4ZDFlMTE5MzgsCisJMHhmNDgyZjdkMiwgMHgyZTRlYzNmZSwgMHgxYmE3MGUwZiwgMHgxYmFiNmQ3YSwgMHhjOGJkOWJlOSwgMHhmN2UzNWFmNSwKKwkweDM4ZWQ1NjMyLCAweDAwOGRmZjdlLCAweGU1NWU4ZjlmLCAweGNiOTVjZGVmLCAweDIyZWU2YmRlLCAweDYyY2NiMmZmLAorCTB4N2E0NjIxZDksIDB4MWUwZGY4NTgsIDB4N2JjNGRiNzYsIDB4ZjM5ZDdjZDEsIDB4NzllZjBlMTQsIDB4Y2Y3NGYxOGQsCisJMHhkOTUyZGU2ZSwgMHhiY2ZkYmVmMiwgMHg5NTdlM2NhNSwgMHhhZTYzMmQyOSwgMHgyYjA5ZDhiNywgMHhlY2Y3NWQwNCwKKwkweGQxMWFmZDA3LCAweDNhNWZjY2ZkLCAweGQ5MmRkZTk5LCAweGM4OTNlOWE5LCAweGE3MzhmMWNmLCAweGZkNTNmOWIzLAorCTB4NGZmZGM2MzIsIDB4MWY5MTJkNTgsIDB4NmY1MWZjNjksIDB4ZTdlNDJiNTMsIDB4Yzg3ZDEzODcsIDB4NWNlZmYzYWUsCisJMHg5N2VmODk5YywgMHgzZjcwYjQ1NCwgMHgyOGJjYWE2NywgMHg3ZDIwM2ZlMywgMHhlZmRmM2Y2OCwgMHhlMTA4YmYzMSwKKwkweDVkN2JmMmU0LCAweDM2OWFmM2E2LCAweDQ3NDMzMmI1LCAweGU1ZDViZTdhLCAweDdmOTA3OTQ3LCAweGM0NWRmZmJkLAorCTB4MzBlN2UxYTcsIDB4NDBlN2RkZjYsIDB4Y2UzOGMwMGYsIDB4MzliYzViZmMsIDB4MGRmOTFmNDgsIDB4MGVhNTNmNGUsCisJMHg1YzgxYzRhNiwgMHgwMzk4NTdjYiwgMHgyOThkNTRkMywgMHg5OGUzNGM0ZSwgMHhlNWVjZDMwMywgMHg5ZGFhN2Y0MiwKKwkweDI3ODNmYTQ1LCAweGY3YzM0ZjI3LCAweDlmOWJmM2M0LCAweDE3ZGIxNGZjLCAweDkyN2Q5MTJhLCAweDliZjI5ZTg5LAorCTB4ZWU4MmZkNWYsIDB4MjhmM2Y5YzMsIDB4NWI1YmY3NGUsIDB4MzlkZDhiMzQsIDB4ZmY5YWMxYmEsIDB4OWYzNTkzNzYsCisJMHgzM2U2YjExMSwgMHgwM2YzNWEwZiwgMHg3ZDI2NmQ3MCwgMHgxZTFlZmY3MywgMHg5YTdhNTI5ZiwgMHgxZTdkZWZkZiwKKwkweDNjMjJhMDYwLCAweDNlNDlkOWI2LCAweGNlNmQyOTRlLCAweGQzODc3OGM2LCAweDU4NmRiYjRmLCAweGRjZWZmYmJlLAorCTB4ZWFkY2VlZWUsIDB4ZjcyNTc3YTQsIDB4ZTJjNzE3YmQsIDB4NmExZGYwOTIsIDB4M2YyYzQ2ZTcsIDB4OGQ5MGQ3MWQsCisJMHg0ZmE4NDVmZSwgMHhiYmIwNGI3MSwgMHg3MWJiNDA4ZSwgMHhiZDA2YTVlNywgMHg2OWJlMjk4NiwgMHhmZGY4M2ZlNywKKwkweGY2YWRjZTk0LCAweDljNTFjNjMwLCAweGQzZTRmNWRlLCAweGI3YTc5ZjQ4LCAweGVjN2QyMDBlLCAweGMzNjQyOTc5LAorCTB4NzBmNzQzN2UsIDB4ZjM4ODRmZmMsIDB4ZTk1NGU0NTgsIDB4N2UzZGFiMTYsIDB4MWQwMWU4NDIsIDB4ZTg3OWI1MjcsCisJMHhkNmI4YmExNywgMHhjMjRiZWViYSwgMHhhOGE3N2NkNiwgMHg3ZDMzMWI3ZiwgMHgxMGY4Yzc0ZiwgMHhkYzM0YWFlZiwKKwkweDdlYzUzNzY3LCAweGMxNzNmZGJmLCAweGE1M2Q0ZjE3LCAweDhiMmI3NDE5LCAweDM3OTkxZWY3LCAweGUyYmVmYmE1LAorCTB4ZGI3M2VlZWUsIDB4OGU4MDAzMjUsIDB4NDMxNjExNGEsIDB4NDY5N2JmYmEsIDB4MGY4NWRiOGQsIDB4Mzg5MjdmZDEsCisJMHhhZGZjZWIyZiwgMHg1NTM5ZjA0YywgMHhlZjg5NjQ1NSwgMHhhYWZiZDJlOCwgMHg0ZDUzNjk3YywgMHhlZDQxNTFmYiwKKwkweGQyN2M5NGJlLCAweGRjYTVmNzU3LCAweGNhNjdkYTY2LCAweGI5NDgxZWI2LCAweGRiNmJmYTE5LCAweGViZWZkMGEyLAorCTB4ZTI3OWNkOTUsIDB4Zjg0OTA5ODEsIDB4ZjljMDZlNWQsIDB4ZTdmYTM5NjIsIDB4ZjI1ZTFhZGEsIDB4OGJkMDNkNjAsCisJMHhiZGUzOWFjNywgMHhhNWM3NmIwYSwgMHhlOWYxMzU0ZCwgMHg4MzRiYTVkNywgMHgwZTc0Y2E5ZiwgMHg1YTcyZTc5ZiwKKwkweDQ2MWVmMTcyLCAweDFkZmYyZDY5LCAweDFiODZkMmJlLCAweGUxMWFiYmFlLCAweDRmZGY5ZWJlLCAweDllNTg1NmNmLAorCTB4YjY1M2ZjMGMsIDB4OGZlZjg2ZmQsIDB4YzdjMWVmODYsIDB4M2U3MGY5YzYsIDB4MmQyNGY4ZDksIDB4M2ZhZGJiZGUsCisJMHhlZTc2Zjc0MywgMHg0NGZmNzFiNSwgMHg3YjQ2NWMzNCwgMHhmZGVmN2UzOCwgMHhlNTA4YWI4MSwgMHhhMmY3ZjQxMiwKKwkweDNmYjUyYzZkLCAweGU0N2QwMzY4LCAweDZiZDBlNGM0LCAweGQzOTU0MzM3LCAweDU3MGZlMWFjLCAweDk1OTY1YzUzLAorCTB4MjUzZTgwOWUsIDB4MzczYWI3ZDQsIDB4ZjQ4ZGJlNGIsIDB4YjVmNjc5NzUsIDB4OTdmYjVhYTgsIDB4OTQzYTNjNTEsCisJMHg4YTM3YjRjNywgMHhhMjdlZDZjMywgMHg0N2E1N2NmMSwgMHg2OGY3N2UzMiwgMHhhMjVlOTlhNCwgMHgxMTlkZjVlYiwKKwkweDJhYjdkZmEyLCAweGNkNzIwYTViLCAweDFkOTdlZmE0LCAweGQ4NzhhMWFkLCAweDE5Yzg3MWU4LCAweGMxM2I4YTY4LAorCTB4N2M0YmQxZmQsIDB4MDI3YTE0ZWMsIDB4MjJkOTFjOTMsIDB4Y2YyODdjNWUsIDB4NDhhN2JiZDMsIDB4YTUxMDQwOTcsCisJMHg1ZWE5YjI5NywgMHg2Y2I1ZWI4NCwgMHg0YmNmYTYzYSwgMHg5OTY0MDc5MSwgMHgzM2YyMDNjYiwgMHg3OTI3OGI2ZCwKKwkweDNlYjdhNmQwLCAweGEzYTQ3M2YxLCAweDFlNzRkMWZhLCAweGVmZGM1ZmQ2LCAweGU4NDZmMzZlLCAweDc3ZTM1OGJkLAorCTB4OWU3NGRhNzEsIDB4NTI3NjY5MmYsIDB4OGZlOWQ1M2MsIDB4Y2I5NzkyMzQsIDB4ZWIxMzhlMzAsIDB4ZDliNGVkM2YsCisJMHhiZDNiNWY0MCwgMHg4YzY0ZWZiZCwgMHhlMDZiNmUwYiwgMHg2YTlmOGFlZiwgMHhmYjU5M2JlOCwgMHg5YTM3ZmQ4YSwKKwkweGYxN2Q4ZGVmLCAweGRmMTNmZTA4LCAweDhiZjhmNTRmLCAweGFjZGZiODNkLCAweGE5ZDM3MWUwLCAweDJhMzMyYjdkLAorCTB4NjhjOWUwNjMsIDB4NjY1NWE0OTcsIDB4NzlkMmJkYTAsIDB4OTFiN2NiYWIsIDB4MGFlOTUzZWIsIDB4YzhkM2RkZjksCisJMHhmYzJmOTJhZiwgMHg3OWU5Zjc0OSwgMHhiZWEwNzg3NywgMHhlMWZhZWExYiwgMHhlNTA3M2VmZiwgMHhmYzc3ZTg4ZCwKKwkweGExZGRmNjQwLCAweDFmM2VlZDBmLCAweGEwMTU5MDVmLCAweDAzZjRlM2ZiLCAweDdjZmUzMDM2LCAweGEwMTQ0NTg1LAorCTB4YWZiOGY5YjcsIDB4YzkzY2ExOGMsIDB4MjVlYmY5Y2YsIDB4YjA1YzIzOGEsIDB4N2MxZWJhYzYsIDB4MWZiY2RhZTcsCisJMHgyOTJmZTExNiwgMHhiMGI4YzUwZSwgMHhkNjhiNGEwNiwgMHg3MThiY2I1YiwgMHhiYzUwZjBmZiwgMHg5NGNiYzUxNywKKwkweDE5Y2I1OWQ0LCAweGFkMWY5MDhiLCAweDdiNGJmZWFjLCAweGNhN2RiODJjLCAweDZiZjlmNThjLCAweGEzYjkxNjNjLAorCTB4NTBmOWRjOTIsIDB4OTVmNWEzY2UsIDB4ZDIwMDM3YTIsIDB4MWNmZWM0OWIsIDB4NmQyNzMzYmMsIDB4NGIxZGE0MDEsCisJMHhjODJkYTQyNywgMHg3Y2VlN2JjNCwgMHg4ZWQzMjMxZiwgMHg4ZmJmOThmOCwgMHg0NTk1M2E1NywgMHg3MTc3ZjEwNiwKKwkweGE1OGZlZTE4LCAweDM0NjQ1MmNkLCAweGU0MmMxZGU2LCAweGUzYmZjYjE5LCAweDZlYjgyMGZiLCAweDYzMzEzZGYzLAorCTB4ZjM1ZWI4ZGQsIDB4YzcyNmY2NzcsIDB4MTBjZjcxYWIsIDB4MmYyZTZiZDcsIDB4YWIyODcwMTMsIDB4M2FmYzViYjcsCisJMHg5MGE1ZWExMywgMHg3Zjc4ZGJmYiwgMHg1NWRhOTVhOSwgMHhiNzY5N2UzNCwgMHg1ZmY2MmJmNCwgMHgxMzk5YjdkOCwKKwkweDY4YTEzNWYwLCAweDc5OGI4YzgzLCAweDg3OGU0YmE4LCAweDBmNzU4OTJmLCAweGRmODBiMGU1LCAweGY0MTQzNzQzLAorCTB4MTA3ZDdlNDMsIDB4MDJmZWNmZjUsIDB4OWYyNDM5YzAsIDB4NDU4MDlmODQsIDB4NWM1ZTMwMWMsIDB4Y2E5ZTU3NjYsCisJMHhmY2YzOTdiMywgMHg4YWUwNGYzZSwgMHhhZjYwODFkYSwgMHg4NzNhMDFhOSwgMHhiZGU3MmY5YSwgMHg0NzFiZjc4YywKKwkweDQyNWUwNjI2LCAweGY5YjdjY2JjLCAweGI3YzQyYjA3LCAweDE3ZTQxMWZlLCAweGYwZTFjYTVkLCAweDRiY2FkOGYwLAorCTB4YzVkOTYzMmEsIDB4OTMzZmJmMDIsIDB4M2U1Y2U4MWEsIDB4YTNlZjhiYjQsIDB4ZDU0ZWFjZWUsIDB4OGJmZWY3ZWMsCisJMHhmYjA5NDc5MCwgMHg0ZjVlZTk1YiwgMHhlZTg5MGVlNywgMHgxZDIyM2YxMywgMHg4ZmI2ZmJhMSwgMHg2ODY1ZTk1YywKKwkweDllMDFhN2M3LCAweDIyM2VlZTUwLCAweDVlZjgxNWIxLCAweGFjZTM1NjVlLCAweDllMjEyZjQ1LCAweDc4N2NlMmIzLAorCTB4MzhkZTVmZGUsIDB4ZDE3NzJlNDksIDB4MTViZWI5ZmEsIDB4Y2YwMWI5NWYsIDB4OGRlNzUyODMsIDB4MGU3NDhiMWMsCisJMHgyZDc3OWVlYiwgMHhlM2QwZmY3YywgMHhiOWZhZjFhNSwgMHg5NmQzZGUzOCwgMHg4ZjE3ZDI4NywgMHgxNmYzZjFjMiwKKwkweDM4N2M4NGJkLCAweGExZWU4ZTNhLCAweGRjYWMwMmE3LCAweDhkNWQyODdkLCAweGNiMWE1NDdhLCAweDYwZmE4N2Q4LAorCTB4NThlZjBjZGEsIDB4ZTQzZmI5ZjQsIDB4ZGIyNGUzZTEsIDB4NTBiMzc5ZTQsIDB4ZjNjYjFiY2YsIDB4ZjkyYzdlN2QsCisJMHhhZTExMTIzNywgMHhlZDUyNzFhNSwgMHgxN2NlM2E2YywgMHhlODVlYTNiZiwgMHhjYjgyM2Y0MCwgMHg5NTI5ZWY4NCwKKwkweGVhN2UzODE5LCAweDY5MjY5ZTUwLCAweDNjMGY4YTExLCAweDk5YmRlMDY0LCAweGQxMmRlOWM3LCAweDI1ZTljOTE5LAorCTB4NDU0YTRjNWYsIDB4MWI1MGVlM2IsIDB4YmYyMGQ0MTgsIDB4ZWMzNDBkMGUsIDB4ZjQ4Yjg4Y2MsIDB4NzkyMzYxZjAsCisJMHgyZGY3NjE3ZCwgMHg1ZmY3ZTBjOSwgMHhmYTFiMDY5MiwgMHhhMWQ3YWYwZiwgMHg1MTMyMTNmYSwgMHhmNWMxYmVhZSwKKwkweDdlNWM0ZmYxLCAweGE2NWY1N2YyLCAweDRmYmY4ZWM1LCAweDBhNzhlMDQ4LCAweDYxNjM4YjllLCAweDM4MzhmZjkzLAorCTB4MTNkMjMzZmIsIDB4MmMzY2U3ODMsIDB4ZjAyN2RhNmMsIDB4MWM3MzRkYmQsIDB4N2VkMTU5NzcsIDB4NzI4NDFkZmEsCisJMHgwMWY3NDJkNiwgMHg3MWFjMWJjYSwgMHhjNWM1OTdlNywgMHhmM2EwZDcxZSwgMHgwYjFiMzllMCwgMHgxZTMyMjVmNSwKKwkweDIxZDdmNjg4LCAweGMyZDU3M2E5LCAweDRiMTdiYTI0LCAweDczYzEzYmU3LCAweGM2OTkwYjFhLCAweDYzZWI5ZTBmLAorCTB4MzNjZDc3Y2QsIDB4YWVlOWZhODUsIDB4OWFmNWFjYzcsIDB4MmM3YWE3M2UsIDB4ZTM4M2Q1YTcsIDB4YjRhZGViYjQsCisJMHgyOWNmMDQ4ZiwgMHg2ZmQ4Y2VkNCwgMHg5MGI2YzIzYSwgMHhlZWRjZmMwYSwgMHhlMjFkZTVlNSwgMHg2ZmE4Y2YzYywKKwkweDViM2VkN2Y0LCAweGY4ZGVmNzEzLCAweDU1NmRlOGJiLCAweDJlMDA3ODIwLCAweDIxOWYzNjhmLCAweGYzNTk3NDdmLAorCTB4NDE4YjgyM2UsIDB4ODlmMGRkMGYsIDB4N2MxMzIxNjcsIDB4MjI1YmFhNTIsIDB4NjllZGUwMzYsIDB4N2JiODZlMGYsCisJMHhjOTkwZDgxNCwgMHg4NzFmMDVmYiwgMHg5ZmVkZGQzNiwgMHhiYmY4ZTUwOCwgMHg4ZWJlMjYwZiwgMHg3M2UyZWFjZiwKKwkweGQ5MGYzMzEyLCAweDQyMTcyZTY0LCAweDlkNGY3Nzc1LCAweGZhOGJjYTY4LCAweDliNDNlZDVkLCAweDM0MGE5OGFmLAorCTB4Yjc4YTM1OTUsIDB4MjdjMWU2YmYsIDB4NGU0ZTU5NWUsIDB4ZGYxMTFhOGIsIDB4Y2YzODM5ZGYsIDB4YTIzYmNhNmQsCisJMHg4ZmM4MmVmMiwgMHhhOGY1ZTUzNiwgMHhmMmE4YTRmMiwgMHg0MGZjYThiNCwgMHgxZGNkYmY1ZSwgMHg0MGZiMmMxOSwKKwkweGQ0ZjgzZmRlLCAweDllZmJmODE1LCAweDczMjJmZDZkLCAweDM1OGYwNWYxLCAweGYwMmJiNmYyLCAweGIzY2I3Y2Y3LAorCTB4NTZkM2VmZjgsIDB4YzkzZTRiMzQsIDB4YmEyYjNmMjQsIDB4YjU1YmYzY2UsIDB4MGUxMGEzZjksIDB4MWNhMzJmMmQsCisJMHg3NDkyNmIyOCwgMHgwZDVkZWJkNCwgMHhjNzk0MjNkYiwgMHhiYjUzNWU3NiwgMHg5NjNmNmUwNiwgMHg3NmExMWMzNSwKKwkweGQyM2ZmNmJkLCAweGVmN2M3YzQ2LCAweGRlYTlmN2M4LCAweGQ4OWZjZWY5LCAweDViZWZlYjBjLCAweDc1MWU3NmY1LAorCTB4NGUyYzBhNDQsIDB4N2Y3ZWVlNDgsIDB4ZGJmYjZkYmQsIDB4MGEyZmJmZGQsIDB4ZjlmYmRiZGYsIDB4OGQxYzkwMGYsCisJMHhjNDFlMDdiYSwgMHhmOWJhYjhmOSwgMHhiZGUzODBjNCwgMHg3YmQyY2YyMywgMHhkZDFjN2ZiNCwgMHgwM2FhMTZmYywKKwkweDJjY2U0YmYxLCAweDlmZGRhMDUzLCAweDQzOGY4ZmNiLCAweGI0ZGYwYjdkLCAweDY3ZTM3ZGM1LCAweGRjMTJmODUyLAorCTB4ODE2NTFlOGYsIDB4NWJkYzcwNGIsIDB4YzNlZjg3Y2IsIDB4YWMzODRjOWYsIDB4ZWY4NjNlYjYsIDB4ZjA3ODZmOTUsCisJMHg5ODE0MmJlNSwgMHhlYjc3NjFkZiwgMHhiNzA5ZmMyMCwgMHhmMDZmMDk0ZCwgMHg3ZjJiNzI3YywgMHgxZGZmNDU1MSwKKwkweGEwZjBlN2UxLCAweGM4MzY0MWQ2LCAweGE2YzA5OTNmLCAweGViNzg3ZTUzLCAweDNkN2Y5ODYzLCAweDNmYWYwNGUxLAorCTB4YWM5MDc1YmEsIDB4ZjI3MjA5YTMsIDB4ZGY5MGE5OGEsIDB4ZjdlNmM3YWMsIDB4MzdhZTA0ZGEsIDB4MzY5YmYzMWIsCisJMHg4NDUzZmZkYywgMHhmYmUzMmIwYiwgMHg3NjMzNWUwZCwgMHg1YjlkM2M4MCwgMHg2NmRiNmE3MiwgMHgxZmRjYzc4MCwKKwkweGRiOWM5M2M1LCAweDU1ZGQ3NmRjLCAweDUwODcwNDc5LCAweGE2MTFjNjFlLCAweDdlZDM3ODBhLCAweDIxNWQ3MjQ4LAorCTB4ZWUxZmEyN2QsIDB4ZjFiYTdkODEsIDB4ZTJkYzFlZTksIDB4ZDJlMmZkYTUsIDB4MzdhOGVkY2EsIDB4NDUxZGNlYTQsCisJMHhjN2ExNDVmYiwgMHhkZGM5ZTkyZiwgMHg1MjE5Mzg2OSwgMHgzYWU5MmZhOCwgMHg4ZGIyZWI5NywgMHhlZjUyMjNlMiwKKwkweGY1MWU5MzcyLCAweDAzM2RmOGEwLCAweDBmYTIzYmUwLCAweDM2Y2JjMDk3LCAweDA5NmQ5ZWIxLCAweDgwZjZiZmRjLAorCTB4ZjNmNTFhNjcsIDB4YzQ3ZmU0OWUsIDB4NDJjYTYzMjEsIDB4YzVhN2YyNGUsIDB4ZjM3MmJlOTEsIDB4MjAyYjkwMDYsCisJMHg3OTg5ZDdkNywgMHgwOTdiNWJhZiwgMHg0NjZlMjlmOSwgMHhmYzI4ZjEzZiwgMHg2N2Q3ZWZlZSwgMHhiZmZlYjc1NCwKKwkweGFlZjIwMzJlLCAweGRkNmViYjZlLCAweGYzM2Y3ZjJjLCAweDBkYmFmNmI5LCAweDViOTBkY2JjLCAweDdiNzlkMmViLAorCTB4YWQ0YWJmNjMsIDB4M2VhNGUzZTYsIDB4NWM0NmM5NzgsIDB4MjhjMmJjNDcsIDB4ZWNlMTdiN2UsIDB4ZDE5NzFiMTEsCisJMHhhZDJkN2ZmZSwgMHhmZGZkZjk5ZiwgMHg1YTNmMGVkMCwgMHg3YTg2YzQzYywgMHhjMjlmODFhOSwgMHgxMjU3ZmVlMSwKKwkweDg5MzczZDYwLCAweGYwMzVlZmRmLCAweGI3NGY4YzY0LCAweDkwN2Y1MWUyLCAweDNiNDA3ZjQxLCAweGViNDAzMTM1LAorCTB4MGM2MjdkMDcsIDB4ZmFlMDZlMGYsIDB4MzMxNmQyMDQsIDB4YWQyOTk3YzEsIDB4ZmZmYmYwZTMsIDB4ZmRiNTM4MjAsCisJMHg0ZmY0ZTAyYiwgMHhjOTQ3Nzc5ZiwgMHgwYzM3OTAyMSwgMHg3YTVmMmZmYiwgMHhlZGZmNzJkYywgMHgyM2QxMDEzZiwKKwkweDgwMDA3MDJhLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3ODBiLAorCTB4NzMzZWYwYjUsIDB4OTk5MmJjY2UsIDB4OTI0YzI2NjQsIDB4ODRlM2M4NDksIDB4NzExMDA4NDAsIDB4ZjA0NDQzMTIsCisJMHg1MTg4ODQzMSwgMHhkNDUwM2I2OSwgMHgyMDcxN2FkOCwgMHg5OTI2MDIzYywgMHg0YjYyZDVhOCwgMHg3OTEyMGNmZiwKKwkweDIyMzQxODA5LCAweDAyODFjMTUwLCAweDA2ZjU1YmM1LCAweDcwMWE4YzQ1LCAweGFmN2E4YTQ0LCAweGI3YWQ4ZWY2LAorCTB4ZmY3ZjZjNTcsIDB4NGE4Zjg4MDgsIDB4ZDJmNWEyMzIsIDB4NWFkN2ZkOTcsIDB4Y2U2NGVmN2IsIDB4YjZiNGE5MjQsCisJMHhkYzNlZjliZCwgMHhkOWNmYjNlZSwgMHhkN2I1ZWQ3YiwgMHhmNmI1YWY2YiwgMHg0Y2Y1YTYxZSwgMHhkOGMwNWMwYSwKKwkweGNlNmEyNTY2LCAweDdjMmM2NGFlLCAweDYxZWRmMTQ4LCAweDY3Y2YwN2YwLCAweGY3ZmIxOTNiLCAweDk1ZDVhMGI0LAorCTB4ZjE5ZmQ4YzksIDB4ZTZjNjBhZWYsIDB4MjcyOWJmN2UsIDB4OGRlZDA2NTgsIDB4NjFjYjE4MjMsIDB4Y2ZiYmY1MmMsCisJMHhkNTAwZGVkNCwgMHg3YTNmNGJiOSwgMHgzZjdjMGY3YywgMHg4Y2E5N2JmNywgMHg0M2VmMDNlOSwgMHhmN2MxOGM4ZiwKKwkweDViNmRiY2VmLCAweGQyODQyZWNmLCAweDc5MzUxOWQyLCAweGY5ODZiY2EwLCAweGVmN2JjMDU2LCAweDI3NDM1ODk4LAorCTB4YmUwZWY3ZjQsIDB4NTU2MzA5N2EsIDB4MzVlNWJiZGYsIDB4ZGJiMTkxMzYsIDB4OTM2MzJhNWQsIDB4ZjhhYjViMTgsCisJMHgyNThhOTg3MywgMHhiYmUwZGIwYiwgMHg2NDRiMmNmMCwgMHg3ZDYzMTE0ZiwgMHgwY2Q4NTMxMSwgMHgyM2I4NzVmZCwKKwkweGI4YzExNzViLCAweGY5OTVkNzFkLCAweDFmNWZkMGMyLCAweGVmODY3ZTYzLCAweGY3YTU0YjJkLCAweDRjM2RkYzNhLAorCTB4NzQ0YmY2YzMsIDB4MGVjMjQwMTcsIDB4MTlmYWExN2UsIDB4NWEzN2UzZDQsIDB4NzgxNGJiMjIsIDB4NzZjMmNlNWUsCisJMHgzZTMyNWY2YywgMHhmM2ZhODYxMiwgMHg3ZjdkMGUzMCwgMHgwZjY0NGE2MywgMHg4ZjgyY2ZiNiwgMHhhMzcxZGVhMCwKKwkweGZlODYxMjM3LCAweDQ3NjIyY2VjLCAweGZhNzYzYTc4LCAweDhjMWMzMjczLCAweDA1YWNhYWU1LCAweDgyMjhlZmUxLAorCTB4MmI1OTk0M2EsIDB4MDcwMWNkZDksIDB4NzEzZmNmZTIsIDB4MGYwMDczOTYsIDB4Njg5OTc3NWYsIDB4M2Q5NWE5M2UsCisJMHhmNDM3ZmY0ZiwgMHg3ZGRiZDZjNywgMHhlMWIwYTA2MywgMHhjZjZmNThhYiwgMHgzYjk5NzgyNiwgMHg2NmY4ODU1OCwKKwkweGI4MDNmYzFhLCAweDg5YzgxZmVhLCAweGNjZTdjM2FjLCAweGIxZWI4NTU3LCAweDQ3OWZlOWRhLCAweDU1MjBmZmYwLAorCTB4YjYxZmY4NDcsIDB4MGFiNjM1YjMsIDB4NjZkNjE1MjgsIDB4MGJmYzAwY2IsIDB4NDNmYjU4NzgsIDB4Mzc2MzBjMDAsCisJMHg5NzgwMDBlMywgMHhkNjcwZDdmZiwgMHgyYmYzYzNhOSwgMHgwN2FkMGE1ZCwgMHg1NTZkZjlmYywgMHhiYzY3Y2Q4YywKKwkweGQ0ZjJmZTdkLCAweDU4ODk5NTc3LCAweDFhNmI1MWFhLCAweGE1NzM1YjNjLCAweGVmNDZjN2JmLCAweGUyOGYzZmIxLAorCTB4MGJmYTBkYTUsIDB4MjViN2YxMzIsIDB4MDliYTQ0ZWUsIDB4ZDg2OTc3ZTIsIDB4YmE5ZGVmZmYsIDB4ZmRmMGViMDMsCisJMHhmODc2NWM0NCwgMHhmYmUwNzRiZSwgMHhmOWEzMTczYSwgMHhmYzM5NTVjZiwgMHg0NzU1MzVhYywgMHhjOGZjNGFmYywKKwkweGQ3YzI0ZWIyLCAweDcxM2Y5MGZlLCAweDcyNGUzOTNjLCAweGZjYmFmN2JmLCAweDAwYmUyMjM3LCAweDBmNzRkMWVmLAorCTB4NzVhNTQ1ZTIsIDB4NjNkNzg2NGQsIDB4NDNiMDZmODksIDB4ZDU1NmRjZmIsIDB4MzNlMDM3N2QsIDB4ZjM0OWNjYjgsCisJMHg5Y2RlZjA5NSwgMHgxNThjYmYxZCwgMHg3NGZmZWUwZiwgMHg4Njk1NzM2YSwgMHhlOWM2NWZmMywgMHgwMmI3MmQ5ZCwKKwkweDYyZjExMmUyLCAweDVkMDNhODE5LCAweDYzZjE2NDJjLCAweGU3ODg2NTI2LCAweDg0NDVmNDVhLCAweGMyNDc1MTdmLAorCTB4MmZkZmY0ZjcsIDB4NDllZjg5YWMsIDB4OTJiYTYxN2UsIDB4MmJhMGJmMDQsIDB4ZGQ3MGQxNWQsIDB4Mzc1ZjBhODIsCisJMHgzNzNlMjU4YiwgMHg2ZTE4MzY1MCwgMHg4MmQ1Y2Y4OSwgMHgyNDVkMjRlZSwgMHhlMjM1N2JlMywgMHg3YzYwZDI3YiwKKwkweGY5M2QyYzdiLCAweDk5NzA2ZmQ4LCAweGRjOTRmMDk1LCAweGZhMTE2MzNmLCAweGYwM2IyMWVlLCAweDE2ZGRkMDBmLAorCTB4ZGQ3YTIxNDUsIDB4NjQ2YTU3NzIsIDB4M2RhN2YyMjUsIDB4MTlmMTE3YmUsIDB4YWQxNTdjM2EsIDB4MTQ5MmVmNzcsCisJMHhkYjJiYzE5ZCwgMHg5NDQxMzAyYywgMHg5YzlkODczMywgMHg0YTdhNGI4ZiwgMHg2MTdhOWY5MCwgMHg5ZjU4N2VjZSwKKwkweDlkZDVkN2RlLCAweGMxMDI0NTYxLCAweGVhZWJmMzU4LCAweGRlZmZhNDJlLCAweGZkZTZhZjY3LCAweDE5ZDU0OGFjLAorCTB4NjE4ODQzZDQsIDB4ZmUxNDM3MTgsIDB4YmMwMzJiNDMsIDB4MmNjNTM0OWUsIDB4ZTAxNzVlMzQsIDB4ZmYwOWMyNTcsCisJMHg0MzVmZTE3YSwgMHhlOGJjODBjNSwgMHhiZjFjMDZjMywgMHg5ODA3Y2I4YiwgMHhlNzFhMTJlMSwgMHgxZDZjMjlkYiwKKwkweDUyNmNkYjhjLCAweDZmNjgyNmZjLCAweGIyM2UzYTVlLCAweDQzNjFjMzkyLCAweDIwMTQ2YTNlLCAweDliNTg5YjM1LAorCTB4ZjdjMDMxNTIsIDB4MjUxM2E2Y2QsIDB4MzZmMTk1YjcsIDB4ODViYmRlMGQsIDB4Zjc4MTc1ZjEsIDB4NWYwMDJhOGUsCisJMHg0YzdkNmRhMywgMHhmYTQ1YmE0NSwgMHhkOGE1ZjY4NywgMHhmZjgwMzQ1ZSwgMHhmOWJmZjVlNiwgMHg3Y2RmYzIxMywKKwkweDhkMTc0OGMwLCAweGIxZTcxOThmLCAweDhhOWU5MTM0LCAweGI1MjRlODA2LCAweGQ1ODllMzkyLCAweDgwMThjOGIwLAorCTB4YTllYTI5ZDcsIDB4OGE4OGIxYjUsIDB4Y2Q1NjVhNzgsIDB4NjZlOTAyNGUsIDB4ODE5OWU5MWUsIDB4ZWNhY2UzZjQsCisJMHgwY2ExZjM2NCwgMHgxMWZjYzA3ZCwgMHhmNzRhN2I4MCwgMHhjMjQ2OTdjZSwgMHg1OGRhZWVmYiwgMHhiNDM3NGUzZSwKKwkweDRlOGJiNmVjLCAweGJlYjAzNDVkLCAweGJhNGJjZTEyLCAweDQxY2NhOTM3LCAweDAwNzdkMWUzLCAweDgzYmY3ZjhhLAorCTB4ZmIzNzFiZGUsIDB4NmVmMmM0ODIsIDB4YTRkMzJlZmEsIDB4ZTBmNmJkMTIsIDB4Y2QxYmU0MjMsIDB4MzhjMGEzOWYsCisJMHgzMjhjOTc5YiwgMHg4MmE2N2FlMSwgMHhiY2I5NDM3YywgMHhhZWVjN2RiMCwgMHg3ZjY3ODQxNSwgMHgwN2I3Y2EwOSwKKwkweDA5Y2U4MGQzLCAweDk0MmFiZTlmLCAweGVhZWVhNTJmLCAweGJmYTBiYjVmLCAweGZmZDVkY2E3LCAweDEzOGUyNThkLAorCTB4NDdmNGUyNzAsIDB4YTY0OGJlOTAsIDB4MjNiZDY0ZTcsIDB4NmUyZWNiZGYsIDB4MGM3MTZmMjksIDB4MTdmMDFlZmYsCisJMHgzNWJlMmRlMSwgMHg0ZDBmY2I5ZCwgMHhmZmEyZmFhMSwgMHg0NzVjZWYzMCwgMHgzNzQ0NjlmMCwgMHgyMjJmNmRiNywKKwkweGRhYzBkYzc5LCAweDU5MWFkZTg5LCAweGJiZjQ4MmM0LCAweDY5YzJjNmM4LCAweGUwOGIxNzQwLCAweDE3Mjg3NGI1LAorCTB4M2QzMmIxNmYsIDB4NDQ5NmZkNjEsIDB4MjE0NmY1OGMsIDB4MzE2MTZlMGYsIDB4N2Q5NmZlZmEsIDB4MmMzNWVkNDksCisJMHgyNmY2ODRlYSwgMHg2MmE2OGIxYiwgMHg2ZjZjNjlkOSwgMHhlZjQxNzE2NiwgMHgzZTI2YjY3ZiwgMHhiZTdjMWQ2NywKKwkweDc3NzU4YjM3LCAweDIwZDQ0NGQ3LCAweDFkYWI3YmNjLCAweGJlMDY1Nzc0LCAweDMzZWI0ZWQwLCAweDVhNGVmOTY1LAorCTB4N2YwYWY0Y2YsIDB4NGZhODNkZDEsIDB4NzZmYjM1NWUsIDB4MjdiZWRkMDEsIDB4ZTdlMjRiZDYsIDB4YmJmNTU3NWUsCisJMHhkNTE0Zjc4OCwgMHhkZjhmZjM0NCwgMHg5Y2ZjMjU2MywgMHhlYjhkYmQwMiwgMHhkZDliOWY3ZiwgMHhkZWNhMWIzYywKKwkweDdhM2JkZDU2LCAweDU1YzlhMjM0LCAweDE4MzlkYjMwLCAweGIzOWVlYmNmLCAweGI4ZGQyMDM3LCAweGI3YzIyNmRkLAorCTB4NjVjYzdlN2MsIDB4ZGRkNTdhYTYsIDB4NTIyYmZmMDIsIDB4MDg4YWJiMjMsIDB4OWU5MTEzZGQsIDB4N2Q0OTQ2YWEsCisJMHg4MmNlMjZjYSwgMHg1NjY2YmJmYSwgMHhlNmY1MDlkNywgMHhlYzQxMWRlYiwgMHgwN2VkMDdhZiwgMHhiOWI4MTdhOCwKKwkweDViNzAyOGRlLCAweDJlYjI3ZTY4LCAweDA2ZTkyYmU3LCAweDUyZmVhMWM2LCAweDg0YTVlMjJlLCAweGM4NWI4YzYzLAorCTB4N2Y4OWI2NDEsIDB4ZTZlZmY0MjcsIDB4NDkzYjI5MjUsIDB4YWZkM2Y2ZmYsIDB4OTZmZDExODksIDB4ZDc4ODJjMDUsCisJMHg3OTVjODRlNywgMHgzNjk1Y2E0ZSwgMHg5YTJiOTcyYiwgMHhhODMyZWU2YiwgMHg5OTQxZjczZiwgMHg5NWUwMWQ2ZiwKKwkweDgzZGU4Mjk1LCAweDRhM2YxYmVmLCAweDVlOWU5MWQxLCAweGVmNWZlOGY5LCAweDlmYjQxOWZkLCAweDViYTJjMGZkLAorCTB4ZDIwMTdkYTEsIDB4NzNkYmFjMTgsIDB4NjA0Nzk3MGEsIDB4OGZkNDMwN2YsIDB4MzhmNmMwOGQsIDB4YjFjMWUzNmUsCisJMHhiNDFjN2Y2NCwgMHhjODQ2ZmIwOCwgMHhlMGI0YzZjZiwgMHg0ZmQwODVkNiwgMHgzZTk5OTNlMywgMHhiY2Y2NjRhMCwKKwkweDVlZThmMjM5LCAweGY3NjQzZjZjLCAweDFiN2U4MWVkLCAweDFiNWUzODUzLCAweGRmNDkxYjlmLCAweDRlMGY2MTNmLAorCTB4NzMzY2MzNzcsIDB4M2M5ZjkxYWQsIDB4MDVlMzcyODEsIDB4Njc3YmQ5MmIsIDB4YzIxMTc0NTksIDB4YWVkM2I2N2YsCisJMHg3MDI3N2JlMCwgMHg0MjUwZTk1ZSwgMHhlYWYzODI5YiwgMHgwNDNkOTI3NiwgMHgxMGIzOWE3YywgMHgzNmI5M2JiZSwKKwkweGUwNGJjZjliLCAweDA5ODZlNGU5LCAweGNkOWIxN2M0LCAweGIzZjBiYzdjLCAweGMyN2ZiZDBhLCAweDAzOTE5ODFjLAorCTB4OTc0ZjEzZjUsIDB4NTM0MDU2ZmIsIDB4YjUxMmMwNWYsIDB4ZWU4NzNkMDAsIDB4YmQ1ZTc2ZTMsIDB4Nzg4MWRmNDksCisJMHgwOTUzODc2MiwgMHhhMTFlYjk1ZSwgMHg2MjY3OGI4ZCwgMHhmMmU5Njg3YiwgMHgxYzdjYTNhZiwgMHhkZTUxY2Y4ZSwKKwkweGQ5YjkwNGIzLCAweGM4MDVlMmNiLCAweDQ2MWFkYjRmLCAweDlmNTE0Njc1LCAweDkxZjM4Zjc0LCAweDU4NWU2NTVhLAorCTB4MTcxYmEwN2MsIDB4OTk5NGY3N2YsIDB4Yzg3ZTM1ZTMsIDB4YmU3Y2Y0NGMsIDB4YjU3Y2UzZmQsIDB4NzA3ZmFlMmEsCisJMHg2NWM4MTA5YywgMHhlNDhmZjkyNiwgMHgxZDVkNDI3MiwgMHhmZWM4Y2VhYSwgMHgyZDk3M2QwYywgMHhmYjYzM2FlYywKKwkweDFkZTBjZWViLCAweGU2YmZhMDZlLCAweDlkZTdmZmZiLCAweDM4ZGY4NDY1LCAweDllZDY0NWM5LCAweGNhNzk3YzQ5LAorCTB4NzQ4YjlmZWMsIDB4NWE4OWFlZWIsIDB4ZjNlODI3ZTYsIDB4ZWFhZjgyMGQsIDB4NjNmZWMyYWQsIDB4MWYyMjRiNTEsCisJMHg2YWFhZjZjYSwgMHg3MmNiZGQyMywgMHg2NzdmYTBiZCwgMHhjMWY3Y2I4YywgMHgxZmMxMjZlZCwgMHgxZWEyYjRkZiwKKwkweDY2NDFjMjliLCAweDFjNDdhODg1LCAweGZkNGViZmQ4LCAweDZhMjBmOTRmLCAweGUxN2E4N2E5LCAweDkxNjVhOGYyLAorCTB4MDA0ZjkxMjgsIDB4Y2MxYjUxZGYsIDB4Mjc1NmQ0ZmIsIDB4MDM0MDZmZTcsIDB4MzI2OGIzZjYsIDB4NDhiOTdkMjMsCisJMHgwMmI1ZmIwNSwgMHgzZDVkZWI5ZiwgMHg5ZmE3MmViMCwgMHhmYWZhNzM3NiwgMHhmMDA1NjAyMywgMHhmNzg5OGYzZCwKKwkweDgyZWY2MGFjLCAweDRkYTY3YjFjLCAweDYwN2VlMjg5LCAweDJlZWIxNmRlLCAweGI1ZjIxMTdiLCAweDdhZTI3NTVmLAorCTB4OGU0ODU3NmUsIDB4NTY5YjZiY2QsIDB4NGJlYTE1YjIsIDB4ZWI0MDVjMGYsIDB4ZDM5OTM2OWYsIDB4OWI4OGQyZTUsCisJMHgyMTE0ZTJmNCwgMHgxMWFkZWIxZiwgMHgzZmRmZDkwYiwgMHgwMWYyMTg1MSwgMHg3NDc2NGZmNCwgMHg1Mzk0N2MyMywKKwkweDI4MGYxODMxLCAweDEwZjQwZGQ3LCAweDVkODNhODQ5LCAweGNiOTNhNTM0LCAweDljZjIwNjU1LCAweDUyNGJkODI1LAorCTB4NjcxY2EzZGUsIDB4OTE5ZmY2NDksIDB4MWY1MmMyM2UsIDB4ZjRjN2I5NzEsIDB4NTI3Yjk0NmMsIDB4MGFlYmRmMmUsCisJMHhhZTQ5Yjk3NCwgMHhmNWM2Y2U4ZCwgMHg3MmU0ZjU4NSwgMHg3ODQyYmY3MywgMHhhNDJkNjI2ZCwgMHhlODFlYTQ0ZiwKKwkweDkxZTg1NzFmLCAweGViOTg2YWQzLCAweDJhMjZlYjJiLCAweGQxMTc3NzVmLCAweDI3NTk0Yjc4LCAweDU3YTkxM2U5LAorCTB4ZDc4M2EzODYsIDB4N2UwZTg0YmYsIDB4ZWQwMDc0ODYsIDB4ZThiMDFmOGQsIDB4ZTM1ZTMwNjUsIDB4OWE2ZDE2NzIsCisJMHg0NGU3NGJjOCwgMHg0ZjVjOGZkMiwgMHhjNDllYjhkYSwgMHhmNDNjZTUzMiwgMHg0YzdlYjI2NSwgMHg3YWM5ODdkNiwKKwkweGY1YzJkYjMwLCAweDY5Njc1YzlkLCAweGU3NGY2NGNmLCAweGU1OTRjMDc2LCAweGZjYzE5NTExLCAweDNmZjlhNjM2LAorCTB4NjAzNDljY2UsIDB4YjJkZTg0ZDcsIDB4YjEwYmY0ZDksIDB4ZTBhMzYwMWUsIDB4ZDM2OWM1YmQsIDB4ZjY4NmNhNmUsCisJMHhjOGZjYzY5MCwgMHg5NzgwYTk1NywgMHhiYjdjZjA5ZCwgMHhiMzZiN2JiMCwgMHgyZDdiZGQzOSwgMHg1YWNkN2U5YywKKwkweDcwM2I5NTgwLCAweGNmYjQ2MjVkLCAweDE3MzI2NzhkLCAweGU3YzRhM2QyLCAweDU3N2MyNzc2LCAweGZkNzFkZjgxLAorCTB4OGRiZGZmZDQsIDB4N2MyNGE1YjUsIDB4OWQ5Y2ZkNWYsIDB4Y2ZlN2VhZTQsIDB4YjI1NjIzM2EsIDB4NmU4NTgyNDcsCisJMHg1N2ViMmZlOCwgMHg3YjUzYjI1NiwgMHgzZTkyNzM5ZiwgMHhkMGZhMTVlZCwgMHhkMTI4ZjY4MywgMHg1ZmFlMmFjYiwKKwkweDIxMjc1ZDcxLCAweDY0OGY1NTM1LCAweDM1Y2FmYjQ4LCAweDRhMDQ1MTIzLCAweGNkYzlhY2ZiLCAweGY2YzFhY2VkLAorCTB4OGEyZjY4OTAsIDB4Y2FlOWNmNWQsIDB4Y2ZjY2ZiNGEsIDB4NjI3NzNkZGQsIDB4Njg2MWUwMWQsIDB4NTg4ZmZmOWYsCisJMHhlOTgxZDBlNywgMHhlNzg3ZGZlNSwgMHhjN2MzODBhMSwgMHg0NzJjMWZiMSwgMHhkZmFhYjU3YSwgMHhmNDA2ZGViOSwKKwkweDFlNWQ0MzM1LCAweGQxZTYwYmJmLCAweGExNzBlZjk0LCAweGZjMjlhYjllLCAweDg0NmYyZmY1LCAweGNjMDc4N2ZhLAorCTB4YmNlYjhhY2MsIDB4MWIxZDdhNjcsIDB4NWRmY2JjMzUsIDB4ZTg5ZjMxMTIsIDB4NWI5N2UwNDksIDB4NGRlYjE5ZjYsCisJMHhhODdhYzY5ZCwgMHhjODJmNThjYiwgMHg0ZjRlN2E3MCwgMHhmYmUxZDkyMCwgMHhkNWI1ZDAzMywgMHg0ZWMxZjJkYSwKKwkweGJjZmFkNzgwLCAweGE3ZDFmNDk1LCAweDA2NzE2MGVlLCAweGZjNTM1YmNhLCAweDVhZDllMjE4LCAweGY0NDRmMWY4LAorCTB4M2ZiYTg0NmYsIDB4MDJiNGIwNTEsIDB4MzhjYWM0ZWQsIDB4M2ZhZjkxZmUsIDB4NzQyYmNmYjcsIDB4MDFiNzgxMGQsCisJMHg4OTliMzFmYywgMHgzYWQ2MGNmMCwgMHg4NWNlNDkyZiwgMHgyYzc4OWYwNCwgMHg4NDVmMGZmZSwgMHg5ZDlhMmZmOSwKKwkweDllOWJiYWUyLCAweGFhNGU2N2Y4LCAweDYwOTI3YjQyLCAweDU3MmRhMTY0LCAweDJkZmI4ODdmLCAweGFlMDk2Zjc4LAorCTB4ZjA1OWU5ZmYsIDB4YjBkNWMwMWUsIDB4NDZjM2ViODUsIDB4YmU0MzRiMTYsIDB4ZDNiYjA2NmQsIDB4NDc3YzRiMDYsCisJMHg1Yjg3NWYwNiwgMHg1MTU1ZTJkYSwgMHg4YzhlZGZmOCwgMHhhNzA4NzFkYSwgMHg4MDJkMjdmNiwgMHhmYjFhYjFmNCwKKwkweGFmOTNiMDRkLCAweGUwN2FlMGNkLCAweGQ3NzY3ZDk2LCAweGRkMWUwMzI5LCAweDJiYTg3YTg2LCAweDkxMmE3NWM3LAorCTB4NjFmYzg0ZmYsIDB4Yjg5NjhhNzksIDB4MDk1NzdhMWYsIDB4NmJmODhiNWUsIDB4YTY1OGY1YjIsIDB4ZmM1N2Y4YzEsCisJMHhmNzkyMzNlOSwgMHhhN2NkOTc4YiwgMHg1ZDgwYzQ3ZCwgMHhiNGY5MjU2ZCwgMHgzZDIwYWVmOCwgMHhkZjJiNjk3ZiwKKwkweDZhZGU5ZTE3LCAweGE3ZWYxMWQ3LCAweGUzZmRmM2I3LCAweGM0NDczY2UyLCAweDg1N2JmZjA2LCAweDhiZGJkYjliLAorCTB4MTk0NTNiZTEsIDB4YmM2NGM3OGMsIDB4NTVmMGZmYmQsIDB4ZjdhM2E0NWUsIDB4ZGMyZjFmMTksIDB4Zjc4ZmVkYzksCisJMHg2MmFmODA1ZCwgMHhmN2Y2MGVmZSwgMHhlZmQ4MTc3ZSwgMHhhYWY5ZTIwYSwgMHgyZTJlNTEwZiwgMHhkMGZhYWVkZSwKKwkweDljODc2MDRlLCAweGJjNTk4ZmU0LCAweDBiNzFjYWZkLCAweGE3ZGZkODFkLCAweDVmYTFhNjIzLCAweGU4OTVjNzY4LAorCTB4MDJmN2MyODksIDB4ODlkN2VlMTEsIDB4YjVjZjAxNWQsIDB4MWQ5MzE3MWQsIDB4OTViYjc0NzcsIDB4ZWRiNmU5YzMsCisJMHhmMTVjNzljNSwgMHg0YWY4OTUyNywgMHhkYTIwYjEzMywgMHhmZjE2MWRjNywgMHhmZDY3ZTQzOCwgMHg3MDMzM2RlMSwKKwkweDk1OWZkZTVkLCAweDFmZjdhMjZiLCAweGYxMGI5ODU3LCAweDg1OTY1ZWUxLCAweDVhMmIxN2NmLCAweDYxYjdmOTAwLAorCTB4ODk5OTkyY2IsIDB4ODY2YTRlZjYsIDB4YWQzNWViNGEsIDB4OGY1Njc5NzAsIDB4N2FlOWY4ODMsIDB4ZGI0ZGEzZDQsCisJMHhmYzcwN2Y4MSwgMHhmMmZmNmZkOSwgMHgzZjIyNGY0NiwgMHg0Y2M1NWVkZCwgMHhjM2NiZjYwOSwgMHhjMjdhMjM1ZiwKKwkweDZiZTAyOGJmLCAweDU3ZDdjMGIxLCAweGFhNmIyYmU1LCAweDEyOTY4YmU0LCAweGVmOGJhMzk0LCAweDBkNzEyOTZlLAorCTB4ZjNmNDU3NjEsIDB4MGY5Y2MzYzUsIDB4Yjg1MGNiZWYsIDB4YzMyZjIwZmYsIDB4NmUxOGNmYjAsIDB4MzUyOGU2NWYsCisJMHhmOWIxNWU5MSwgMHg5NDBmN2Y5OCwgMHhjNjJkYjBkOSwgMHgwYzgxZjdmZCwgMHg2NDBmZGE4ZCwgMHhmYjVmN2I3MCwKKwkweDVlZmI2ZGRkLCAweGNkNGQ3OTg3LCAweDgwY2Y2ZTA4LCAweDk3ZjMyMTdhLCAweDcxZWJiYWUzLCAweGIxOTgzNTU3LAorCTB4YmJiMjYyODgsIDB4NmU1NmMzZDgsIDB4OGVkYzZhYzcsIDB4ZjZjOTljZGUsIDB4OGZkODRiYWUsIDB4OTk3ZjYyNzcsCisJMHg2MmY2MTcyNCwgMHhmZmM3YmQzZiwgMHhkYWYxMGM3OCwgMHg0NGYxZjA1YywgMHhlNzQyMGZiNCwgMHgxZmEwYjMzZSwKKwkweDkwYWRkMWNkLCAweDAyZjg3NzNjLCAweGQ0MjVlOTBjLCAweDI4MmQ4YjNkLCAweDIxYzM5MDFiLCAweGM5MTNkNzFmLAorCTB4MDY1M2ZhZjMsIDB4M2M4NGVmZGYsIDB4ZmRlN2VhNzEsIDB4M2I3ZjljMTEsIDB4YjczZTljZGMsIDB4M2YyMTRiMmQsCisJMHhjNDRmMzZlNCwgMHhiNWZmNDA4ZSwgMHhhNWVkMmE3YywgMHg2N2VmYzIyNSwgMHg1Zjk0ZmRkYiwgMHgyODhlZmE0NSwKKwkweGQ3NTgzMWFlLCAweDM1ZjQ3ZjM5LCAweDMwYTg4ZGNjLCAweDhiYmI4N2NlLCAweDc3ZDlkZmM5LCAweDg1NGY5YTYwLAorCTB4MWZlZWM3MzYsIDB4Nzg4NTE5YWQsIDB4ZjBmYjMyZWEsIDB4MjdhZjg3N2QsIDB4ZTFmN2U3MGQsIDB4Mzg2OTkzZWUsCisJMHgyYWRkODZiZiwgMHhmMjIxYmJjZCwgMHhiMmMyZDY0OSwgMHgzM2YwYjkwMSwgMHhjYTNhZjgyNSwgMHgxYzUyZTYwMSwKKwkweDBmOTRiZTM4LCAweDM0ZmVlZTFmLCAweGZiODM4MTZiLCAweDU2N2Y0ODBiLCAweGE3OTc4ZDBlLCAweDhlN2VkM2RjLAorCTB4Mzk3MTVmZGYsIDB4MWU4Zjk3NWYsIDB4ZWU1MDQ2YjcsIDB4ZmQwNzY0N2QsIDB4M2Y2ZjIwOTYsIDB4Nzc3ZDcyNzIsCisJMHhlZmVlNDMyYSwgMHhkZjUwMGIzYSwgMHgyYTZmZDdmNCwgMHhmODljYTEzNSwgMHhkZmNmOGI4ZSwgMHg0MDJjZTk2MywKKwkweDYyOGRmYzdlLCAweDFhZTk2N2VjLCAweDZjODA4YjEzLCAweDUwMDZiMjVmLCAweGEzZThmMjAzLCAweDQwMjk5ZjQ3LAorCTB4OWVlMWZmNzksIDB4MjdlNjBhNjcsIDB4OWRmYzk3YzAsIDB4NzhlNTdiMmMsIDB4ZmQyNjZmYzIsIDB4MzQ0YjFlYTgsCisJMHhlZjliYzcwZiwgMHhlNTdmNzJiMywgMHhmOTU0N2UzMCwgMHhmZGMyZGIzZSwgMHhhYjNlN2RhMSwgMHhiZjI4NzQ4ZSwKKwkweGYxNDg2YmViLCAweGM3ZGI3ZGEzLCAweGU2ZmYyNDZjLCAweGFjYmYwYjc3LCAweDgzZGEzZmRmLCAweDdkZjkxOGZiLAorCTB4MWUxNWZmNTIsIDB4OTc0YTRmNGUsIDB4ZDQ4M2ZlNDIsIDB4ZTNjOTM4YjIsIDB4N2JkZTU5YmYsIDB4ZTQxMzNkNjAsCisJMHhiZmYzYWMzZCwgMHhkOTM0NWYyMSwgMHgzMjQ2YzdlMiwgMHhlMjBiMGZhMiwgMHhkMGVjZDJjZCwgMHhhZDY1M2Y1MCwKKwkweGJmMTVmNGU0LCAweDJhZmI0NGMzLCAweDgxZDdhZTRiLCAweDkyOGFlY2YyLCAweDMwMTMzNjk0LCAweDZkMjUyN2EyLAorCTB4ZjIwMWM2MjIsIDB4ZmRlOTRiNzMsIDB4ZmJhNzM1NzAsIDB4N2YyMzE2NzAsIDB4NTE2YjBlNWIsIDB4YjhiYjVlNDgsCisJMHgzMjZmM2VkZiwgMHhlYTgzYWQ3MywgMHg5ZWRjMTFhYywgMHgxNmRmMzJmMSwgMHg1ZGQ2OThiNSwgMHhjNDkwZmY0MSwKKwkweDQ4MGJkNDg3LCAweDNmMWYyODNmLCAweDNmNDQ2YzUyLCAweDc2NDJiNzRhLCAweDljZWE2YWE3LCAweDQ3MGVmZDhiLAorCTB4Yzg0NzEzNGYsIDB4YTdhNzNmZmQsIDB4ODkzZmZhZmUsIDB4MTg4ZjI2OWUsIDB4M2E4MjllOGUsIDB4MzZkNzkzZDEsCisJMHgzZjA5M2QzNCwgMHhjZmJmNzlmMSwgMHhiZmRjMDFjMiwgMHhkZDdjMGI2NiwgMHhmYzRlZTQyNywgMHg5YmY0OWIwZSwKKwkweDk5ZGYzODJiLCAweDM2OTliZmEyLCAweGZkNDU1NDQ3LCAweDljN2YzM2UxLCAweDE4N2RmZmU4LCAweDI3ZGM1ZmVjLAorCTB4MGVmZGEwZTUsIDB4ZjM5NWM4ZTUsIDB4MTYzNzVhNzQsIDB4NDE3ZjQxZWIsIDB4ZDIzNmM1ZWEsIDB4NjI5YWY3OGYsCisJMHg2NGFmNjg0NSwgMHg4ZmQ5NmY4ZiwgMHhiNzNkOTE3NCwgMHhlZDI1NjJhYywgMHhhOGRjZjJmZiwgMHg5MmI3NTAwZiwKKwkweDc1NTk3NDFmLCAweDA0ODhkNGUwLCAweGRmMTBlMTdiLCAweGU1ZGYzNGNmLCAweGJiZDNlN2E3LCAweDFhMTA3ZGI5LAorCTB4Mzg3YjIxNmQsIDB4NzE4NGE1ZDQsIDB4OTYwMzliOWQsIDB4NmI0MWRhMDgsIDB4MDk1ZmVlMTUsIDB4M2NlYmIwNmYsCisJMHhhMGFmYTNlZSwgMHg3NDBmY2ZiOCwgMHg0ODhhMTcxZSwgMHg4ZWNmNmZmZiwgMHgzNWJkMjNlZiwgMHg5MWVmYzgzOCwKKwkweGY4M2EzZjFjLCAweDFmYzdjYTg1LCAweDhlZmM2OGMzLCAweGVhYWYxZTcyLCAweGZlZTc1YWI4LCAweDFkN2ViMTE1LAorCTB4NmUzOWZjYjMsIDB4MThkNjA3YjQsIDB4ODVjNjU5ZjksIDB4MTg4MDljZmEsIDB4N2FmZTZmMTgsIDB4YWU0M2FkM2IsCisJMHhkMmNjZjFjYSwgMHgwY2ZmNWM2ZCwgMHg2N2U0MGI5NiwgMHgxNjJjOWFjZSwgMHhmYTZmYzQ0NiwgMHgwNTI0MWNmOSwKKwkweGJiNDU3M2Q2LCAweGNiMzkzNzhjLCAweDc5Njg0NTAyLCAweGI3ZTliYmJmLCAweGJkMDBhNGFmLCAweDhlOWZhMTY2LAorCTB4NjhjMmNhNmYsIDB4OTg3ZjkzZjcsIDB4ZmM3ZGM5ZDcsIDB4YzkwMDA5YTAsIDB4NWNmZmQ2YzUsIDB4NDI2OTczNTcsCisJMHhmMDNmYmM1ZCwgMHg2YjZiZGNmZCwgMHhmNmVmNDhmMiwgMHhhMGQ4MjNiNywgMHg2ZmRkNjU4ZiwgMHgzNTFlMzFkNywKKwkweGJkODFhZWQwLCAweGY4NTJlYjZiLCAweGI1Yzc2MWY3LCAweDNjMDY4ZTU3LCAweGZmZmM3MjI4LCAweDdmNDdlYjVjLAorCTB4YzYxOTlkYTEsIDB4NGI0Zjg0NGIsIDB4ZmQwY2RmZWEsIDB4N2VmOTc0M2IsIDB4Nzg0YWY2YmMsIDB4NTkwYWMxZTEsCisJMHgxZmFkNjZiZiwgMHg2Y2NmYmJlMCwgMHgyYTUwOGZlYywgMHgxYzhhYzdiZSwgMHg2ZGFjZDZlZiwgMHgwZGU3ZDZlYiwKKwkweDI3NjAwNWQ4LCAweDM5OTExYWVjLCAweDdlYWMxZjYwLCAweDg1ZmI2NjdiLCAweGViYWE1NjMwLCAweDVkZWEwYjUzLAorCTB4MWU0M2U3YTksIDB4NjQ4ZmVjODUsIDB4ZTQyMDNkN2UsIDB4NTcyY2RmYzMsIDB4ZjQ3NjQxZjUsIDB4NTcyNDExODEsCisJMHg0YjIwNjY3YiwgMHhlNDgzZmVjMiwgMHg4MDc5Njg3NiwgMHhmNjA3M2RhMSwgMHhkYmMyMTc0OCwgMHhkM2UzZmM3YiwKKwkweGVmN2I0MjJmLCAweDFiMWZkZmVjLCAweGI3N2JlM2E5LCAweDM3YmI0NWNlLCAweGJhMjM0ZTc0LCAweDIzNTNlZDBkLAorCTB4NGRhZGQwMGEsIDB4NzFlODBiZjAsIDB4N2E0ODBiOGEsIDB4NzQxMmVhNWEsIDB4OGMzMzBlZWEsIDB4NTIxYzc0NzMsCisJMHhiZTg5ODUyNiwgMHg4M2FlMGE1YSwgMHhmOGY3Y2NiNSwgMHhlNDM4NDI1ZiwgMHhkZTc5MzJiZSwgMHhmN2MxMWViZiwKKwkweGVhZDJhMTBmLCAweGZmZDgyNWFkLCAweDlkYTE4NTZlLCAweDQ0ZjRhZWIwLCAweDM3ZGEwMmQ2LCAweDMwYjU5YmJkLAorCTB4NWQyNWJiZTEsIDB4OTczZTEyMGYsIDB4ODkwZjMzZWMsIDB4ZTA4ZjVmYzcsIDB4NjdlNmRlNzEsIDB4ZGNhM2Y2OWYsCisJMHg5MGEyMjhmOCwgMHgyMmQwNjg0YywgMHhiZDQwYTc2YiwgMHg5Njg0YzFhMSwgMHhjYzhjYWIyMCwgMHgxY2UyOTFiYiwKKwkweDA2MzYxNjc1LCAweGVkMDQ3N2U2LCAweGRmNjM4NDI2LCAweDcwNTNjMzM3LCAweDgxNGZmMGRlLCAweDhiMDJkYjQ3LAorCTB4YWI2ZTlmNDgsIDB4NGUyODM5YjMsIDB4NTZmZjNhNTQsIDB4YzUyYjgzYzIsIDB4NTc1ODc4OGYsIDB4ZTM4MzlkNWEsCisJMHhlMTlhY2YzNCwgMHhkODA4ZjhhMiwgMHg3Y2RlZDg3MSwgMHgyZmM4YjdkNywgMHhkNzVhZTEyNCwgMHgzYjQ1YWU2NSwKKwkweGI5ZWMwYWE3LCAweGZjZWUwMGE3LCAweDdkNmE2YjhjLCAweGQ1MjNjN2MwLCAweDNiYjdlNWZkLCAweGI0M2U1ZTMwLAorCTB4MjY2ZWZmMWMsIDB4MjUzNjhiYTcsIDB4MjU0NmZlMTAsIDB4YTI1OTQxZjksIDB4OGJiMGIzNWYsIDB4OGQ5ZjhkZGIsCisJMHgyYmUyMThiMCwgMHhmNmUwOGQ5ZiwgMHhkOGUxYTVlYywgMHhjMzlmMjQ3NCwgMHhkYTJhNGY1YSwgMHhmZmU2MjFkMywKKwkweDJjY2ZmNzA0LCAweGQwZjdkMGUwLCAweGU0Nzk3MTNhLCAweDNmYzlkNTY5LCAweGRjZjRmMzY2LCAweDVmYjYyMTdiLAorCTB4ODVmZWQxYWEsIDB4ZTAwZjNkNjksIDB4M2Q2YmJkYjgsIDB4ZjA0Yzc1YmUsIDB4MmFlZmQ2MDEsIDB4YmQ0ZjdkYTMsCisJMHgzMjc4YTgyNywgMHg3ZDcwYmNmOSwgMHhhYWJkOWY3YiwgMHhkMjg4ZmQxYywgMHhhOGZiNWFlZSwgMHg1YWU2ZjQ5ZCwKKwkweDJkN2Y3ZWE3LCAweDY5ZGZkM2NhLCAweDE2YzAxZjNjLCAweDdlODc0ZDhmLCAweDgzM2VmZTk2LCAweDhmNmI1ZGM2LAorCTB4MGZmNWM1YWMsIDB4YmRhOTU0ZWYsIDB4NjA3NDExZDgsIDB4YjliZTRiYmYsIDB4MmJkMjIyNjUsIDB4NTA0YTQ0NzMsCisJMHhlZDNkOWE4ZiwgMHhiNjE4ZTkwYywgMHhiMTJmZTQyYiwgMHhlMzBjMDI3OSwgMHhmM2MzZDNjNCwgMHg0NWY1MDUzNCwKKwkweDFkMzMzZDkyLCAweDVmYjQ1NWZkLCAweGI2YmY5MGYxLCAweDE4YzdmMDVhLCAweDM2ZDM4MmEwLCAweDNmYjY4NTYyLAorCTB4NmZiMDE4OGYsIDB4MWNlM2Y5NWUsIDB4YmI0YTFmMGQsIDB4ZmVlMzY0YzcsIDB4MTRiYTlhZjMsIDB4NWIyZGY2ODYsCisJMHg0MjY2M2YxNSwgMHhjNjI3YmQ3ZiwgMHhlYTZlMGVkMCwgMHhhNjljNjg1NCwgMHhiODJkMjdkMiwgMHg5M2E1Yjk2ZiwKKwkweGVjNDg3N2YzLCAweDA1N2YwMDMzLCAweGYxOGM1NzY4LCAweGEwN2IwYWE0LCAweDU4MzlmYjhkLCAweGM0NDhkOGVjLAorCTB4M2Q3YzYzZjMsIDB4MTJmNzgzMTksIDB4YWQ4Y2FiZmMsIDB4ZjQ0MGYyZTAsIDB4ODY3MTExNjcsIDB4MDI1N2UxMjYsCisJMHgzZWVkNDg0ZCwgMHhlZjViYjQ4ZiwgMHhmM2I3ZmQxNiwgMHg1OWJiOGM1MiwgMHhjNDU1Zjk4OSwgMHhmMDYyYjk2YiwKKwkweDJhZjJjYjg3LCAweDkxZmE3ZGYxLCAweGRmZTQwY2Y4LCAweGZhMTdkMDM4LCAweGIzMmFiNjk3LCAweGNjMjlmZDZlLAorCTB4ZjFhNGViNmYsIDB4YmNjMTM0M2UsIDB4MDU2YTRlNDAsIDB4MDQ1MjA3M2UsIDB4N2Q3NjU3YmMsIDB4ODZlOTAzMzIsCisJMHhkN2UyMzJkNSwgMHg2YTY5YWVlNiwgMHg2ZmM3ODM5MywgMHg0ZWM4NWVkMCwgMHhlZDg5ZDk2ZCwgMHg5Mjk3MzdkOSwKKwkweGM4ZjhjNjdlLCAweDM1ZmU3ODZjLCAweDFjYjNlNzBmLCAweDc5ZDdmNzA3LCAweDYxMTcwZWVmLCAweDQ4ZmQzM2JjLAorCTB4ZTI5ZmQ2ZTAsIDB4OTBhNDE3ZjgsIDB4ZDYxYjM1YmYsIDB4ZTU0MTk5YzYsIDB4Nzk2ZmY0MWEsIDB4YTg4YmY5NTksCisJMHhmNTMzYmQ3ZiwgMHhjNjQ3ODQwYSwgMHgzODJlMzBmNSwgMHgzOGU0OGNhYiwgMHg4YTdjMzNkNSwgMHgzNzk0MTc3ZiwKKwkweDBlMzRkYzc4LCAweDExNmFlZmVjLCAweDcxMWU3YzVlLCAweGQxMTljNDBjLCAweDYyZTM4NzZmLCAweGRlY2IwZjFjLAorCTB4N2U0NmE4OWMsIDB4N2JlN2QwN2UsIDB4YWNiYjRlOTAsIDB4Y2NkN2M0MmUsIDB4NDJkZjk3YWUsIDB4YzZkMzNiN2QsCisJMHg5YWVlMjkzYSwgMHhkM2M0Yjc2NCwgMHgzYTQ0MTliZSwgMHg3YTczM2JlZCwgMHhkNzA4M2RjNywgMHg5NDdkMDc3NSwKKwkweDhmNjQ5MmNmLCAweGI3Mzk3MTVjLCAweDkzZGEzZmNiLCAweGVjM2YyM2FhLCAweGVjMWI3MjEyLCAweDc5N2YxZTQ3LAorCTB4OTMyM2VmOWMsIDB4ZjZlZmM4ZWQsIDB4MjNiNzJmYWYsIDB4Nzc3ZmViZmIsIDB4MTdjMzkyM2IsIDB4MjhmM2MzZGUsCisJMHg4OTBmN2NhNCwgMHhjMzVmNWY3ZCwgMHg1ZmQ0MzRkOSwgMHhhZWQyM2QyYiwgMHhkOGY3Y2E0ZCwgMHhiYTNkZjIyZCwKKwkweGQwZjdjZTg3LCAweDBmZjhmMjc2LCAweGVlNDk0MTg2LCAweGFlMjIyZGJhLCAweDQzY2VmN2U1LCAweDg0YmI4N2ZmLAorCTB4N2IyYmMwZTQsIDB4Mzc0OGMzNTMsIDB4NjRlZDNiNjcsIDB4NGI2ZTY5OTcsIDB4N2I2YWUxMTQsIDB4M2NjMTFhZGEsCisJMHhlMDQ1MzY4OCwgMHg1Nzg4OTBlYiwgMHgyYzFjNDQ1OSwgMHg4MzQ3NDRhMywgMHg0MDI1YTBlMiwgMHhhNGZjM2Y3MiwKKwkweGQyYWJjNzk5LCAweDg1ZWU4ZjIyLCAweDFjZTFlMzdhLCAweGQ0NjJjZjExLCAweDU0ZDlmODdmLCAweDhhNjM3N2MyLAorCTB4MzdmZDhlOWUsIDB4ODYwOGZiZmUsIDB4MTgzZWFhNzEsIDB4MDlmOWQ3MGYsIDB4ODdiYjcwN2IsIDB4N2ZiYzVhZTIsCisJMHhlNzU1ODJmNiwgMHg4OTY4YjNmMSwgMHgzM2IwZjAxYiwgMHg5M2JmZWRjMiwgMHgwNWE4YTZhNSwgMHg4OTkzYmRlNiwKKwkweDMyZjU5ZjNjLCAweGQ5ZTdjNWFlLCAweDhmMjQ2MWI3LCAweDgyMzFhMGNiLCAweGRjYjViMmZiLCAweGUzMmY1NDVmLAorCTB4MWZiOTg3NTUsIDB4YTVjNDVlYWUsIDB4ZjQ1ZWNlNGUsIDB4YjQ1OGE2MDgsIDB4YjhiNTJkMjksIDB4ZGQ3Y2ZiNGYsCisJMHhkZjlmZjIzNCwgMHgyYTJjZmY3OSwgMHhmZDE4ZDdlYiwgMHgzZmQwOGJmZCwgMHgzZjEwM2M1ZiwgMHhmOWY3N2U5NiwKKwkweGY2ZTE2N2NjLCAweGQwZmY4MGYzLCAweGJlOGNmNjA0LCAweGZkNDZhYjQ2LCAweDc3NWNjNDU5LCAweGMzZDAzZWEzLAorCTB4NDMxNzdhYjAsIDB4MWEyNTA2ZDksIDB4MTk2MDBhZjEsIDB4N2FkNmQzZGUsIDB4NTdiZDcwNTIsIDB4NmY0ODk5YjcsCisJMHg3ZTRjZGI4NSwgMHhjYmQyNGY3YywgMHg2N2FlMWVhYiwgMHhiZDcwZjVkZiwgMHhlMDhlYTgwMywgMHgzMzZjYjIzOCwKKwkweGU4ODM3ODhiLCAweDQ1MzMwNTZmLCAweGJjMjkzNGIxLCAweDZhZDJlZDVjLCAweGIyZGZkMjg3LCAweDhiNzMzNmJmLAorCTB4Y2RkYTFhNmQsIDB4NzdmMjI2ZjksIDB4ZDdmMTZlN2YsIDB4YTMzOGJmOTEsIDB4Y2RhOWQ2ODQsIDB4OTZhNmIyZDksCisJMHg3ZDJmMTNiNywgMHhhODA3OGY2ZSwgMHgxYjhkMzJmZCwgMHg0MGNmNGM5NiwgMHg4NzgyZmE3OSwgMHhmMTkyMTdjNywKKwkweDU4ZGRiMGI2LCAweDJjYzM4ZTRmLCAweGY1ZWIxODg5LCAweGE3MzYzODJjLCAweDEyMGRjNzk4LCAweGY0MjBiZjlmLAorCTB4OGFlYmU3YzQsIDB4MTY3ZGJlMDQsIDB4ZmU3MmJiOTQsIDB4ZGUzOGYyMmIsIDB4MWNiY2Y5NGMsIDB4ODc1ZDVmOTUsCisJMHhlMzBhMzA3NCwgMHg3MjU4NDVjYSwgMHg4NGNjMmFiZiwgMHg5OTc1MWZlMCwgMHg0OGZhMjE0NywgMHhjZGNkYjc4MiwKKwkweDk2YmMyOWU5LCAweDVhZmYyMWZiLCAweGZlZTE5M2Y4LCAweGY4MjU5M2QwLCAweGI4YzVlZmQ4LCAweDQyY2JiZDY1LAorCTB4ZjVmM2U4NzEsIDB4MWE2NGE0OTcsIDB4ZjVmZGI3ZjcsIDB4OTZmZWZmYmYsIDB4YWFkN2U3ZWYsIDB4NDVjNmJmMjIsCisJMHg4YmJlNjk3MiwgMHhlMmE0ZTVjZiwgMHhlN2M1MWJkYiwgMHg3MDFmYjAwZSwgMHgwYWQ1NmIxZSwgMHhiZmQzMjM5NCwKKwkweDM0NzlhMGU5LCAweDgyMzkwNjFmLCAweDNkZTVhYzcxLCAweDliZDdhODA1LCAweDMwNGE3YmFiLCAweDVmOGM5MzVlLAorCTB4ZjI5MzU2ODQsIDB4ZWY5YmRlMGMsIDB4ZGEwOGZkODEsIDB4ZjE4YzZiMGQsIDB4NTVmMWMxYjgsIDB4MjY2NjYxN2YsCisJMHhlZTRlN2JlZSwgMHhkN2Y1MTk3ZiwgMHgyZmU5M2I3ZSwgMHhhZDE3YmZmOCwgMHgxNmNmZmZjOCwgMHgzODhiNWM5MSwKKwkweDJlMzE2MzgzLCAweGVlODk0YTE0LCAweGRhMTE3MWY4LCAweDZhOGVkYzMxLCAweDQ0ZWViNmVhLCAweDViN2U3MTNiLAorCTB4ZmYwZjdjNDIsIDB4ZWYxOGRlYjMsIDB4YzgzMjZiNjMsIDB4OGMzYWNlZWYsIDB4NGUxZTFiY2YsIDB4ZmM1MDZlZmEsCisJMHg2NWQ2OWRhZiwgMHgwZTM4MjViMywgMHgxMGY0MWRmOSwgMHg1OTljMWRlNSwgMHhiZWI4NjI2MiwgMHgxMTZmYWFmNSwKKwkweDc2MzNhOTJhLCAweGM2N2U3ZGEzLCAweDQ2NmJkN2M5LCAweDNlM2ZkNGE2LCAweGViZmFiZmIyLCAweDU3ZDlkNjgzLAorCTB4NmY1Y2ViODIsIDB4N2VjNGMxNjIsIDB4NjE5ZDcwOWEsIDB4M2FjNTFiN2QsIDB4ZTJmYTc5OWYsIDB4OGZlNzVjMTIsCisJMHg4MjVjNWZmNywgMHhkY2Q5YmNlYiwgMHgyOWJlNDdlZSwgMHg0MWFmMDc3NSwgMHgzMmJhOWNmYywgMHhlNjE1ZjY0MCwKKwkweDlkMWYyMGVmLCAweDk0ZGUzZDJmLCAweGZkMzc4ZjQ0LCAweDJlYjFlOGUzLCAweDU5MzIxZjMxLCAweGUzZjQzNjNmLAorCTB4M2QxZmE4Y2IsIDB4ZTUwZjNkMTYsIDB4ZjU5YjdjYzEsIDB4ZmM0OWVhMmYsIDB4Njc5ZmQyMWIsIDB4ZTNmZjkyYjMsCisJMHhkZDNmMWZmMCwgMHhkZDE4Zjk0OCwgMHhiMjI3ZDkyYSwgMHhiMDVhYzNiZiwgMHhjM2EzZWQxOCwgMHg2MTdkNzk2ZiwKKwkweGQzZmVmODY1LCAweGI1ZTVmZDg1LCAweDU5ZmEzMGIxLCAweGRhNDBiZWU0LCAweDc4ZjJjOTk3LCAweDAzY2Y5OGI5LAorCTB4OGNkZmZlOTksIDB4M2NlMjFiZjgsIDB4MjBkYzdmZDIsIDB4M2U0NWIxZGUsIDB4NmVlZjc2ZTUsIDB4YzdmZGM3YzUsCisJMHg2ZTRmZTQ5ZCwgMHg4NWNmMzQzZSwgMHgyMjBmZTJmZSwgMHhmY2RjN2ZkYywgMHg4ZmY5Mzk3NCwgMHg4YTVlNDQ5NywKKwkweGViMTkzZTYyLCAweDFmYjg1YzU2LCAweGRkZmJiMjU5LCAweDkwMDNjYzM0LCAweGU3ZDg1ZWZiLCAweGY5NDk5ZmRlLAorCTB4ZWZmZGM2MzUsIDB4Njk5MzkxMDcsIDB4NzAwMDM3OTgsIDB4YTc3MDhmYmYsIDB4YTQxNmUyN2EsIDB4ZmZkODY2ZmIsCisJMHhiMzYwZGU2MSwgMHhmZDg2M2YxNiwgMHhkOTE4N2IzNiwgMHhjNjVkOTUwNSwgMHhlZjhjYTBmZCwgMHg0ODU4MGI2ZSwKKwkweDU2ZWI2ZWVlLCAweGIzYWYyODIyLCAweDNjYTJjMTJjLCAweGNmMmM2YmQ0LCAweDgwNzUzYTc1LCAweGZlOTkyMmNmLAorCTB4MDc3ZTkwMTcsIDB4NWRmZWVhZTIsIDB4YTdmZTk3NTgsIDB4NDRlOWFkOWUsIDB4ZTY2NjNkYmYsIDB4ZGIzY2ExNzcsCisJMHg0Y2YyMTRlYSwgMHhkYmY2ZjkyMywgMHg3NTkxZGQ4NywgMHg2ZmMzNzYwOSwgMHg1ODRlZGMyMywgMHgzNGMxZjMyMiwKKwkweGJkNjBkNTE2LCAweDFmZjFjZDE2LCAweDc5NDZmNWM3LCAweGY3OTI0ZDFmLCAweGFmMTk3NTg5LCAweDQ5NDU4NWJmLAorCTB4OWViMTM1MmYsIDB4YzRiMGJjZmUsIDB4ZjllMzkyZjcsIDB4ZjQzNzA3MTgsIDB4NzVjYTVhYzMsIDB4ZTRkZDkzZjQsCisJMHhhYjljNTFmMCwgMHg2MzU2Y2ZlYiwgMHg5YmVmOTg3YiwgMHg1NTk2MWY4MSwgMHg1Y2FmZDAwYywgMHhjZGJmNDkwNywKKwkweDZhMWQxZmMyLCAweGU5MGFiMTM4LCAweGI4YTVkNDM3LCAweGU4ZGQ3ZjcwLCAweDA4ZGJmNGUzLCAweDliY2MyZmZiLAorCTB4ZDY3N2U2NGQsIDB4MWQxM2NjNjksIDB4ZGQ3ZmZmOGUsIDB4ZmY5Yzc3Y2YsIDB4OWNhYzNkN2YsIDB4NWJmOGM3ZmEsCisJMHgzZjk3ZWZkZiwgMHhmY2U1ZWY5YywgMHg3ZmJlZmZhNSwgMHhlNzBhZGQ5ZSwgMHgyNTc5YTRjYiwgMHhmZDkzNWJlZiwKKwkweDc5ZGY3MmVlLCAweDhiZjBmMmJlLCAweGYxN2M3YzI0LCAweDcwYzdjNjBmLCAweDZiMjUzMGYyLCAweDcyNDJmZGU4LAorCTB4OTZhZmUzNWMsIDB4ZjhlMGZmODcsIDB4MWU4NzIzYzYsIDB4YTg4MTMzNGEsIDB4ZjYxNDUyNTgsIDB4NmZjZWJiNzIsCisJMHg1MGNmMTc4OCwgMHgzNzFlN2UxZCwgMHg0NTNlNzk1NSwgMHg5ZjVkZGM3MiwgMHg5Y2VlZTIyMSwgMHg1YTdhNWY5ZiwKKwkweDEyNmFmNWE1LCAweDQzYTZlMWYxLCAweGRhYmUxZjRlLCAweGYxNGM1OGUwLCAweGU5ZjhlNGQ5LCAweDA2N2ZiNjUyLAorCTB4MWM3MjUxMmUsIDB4YjhmOTExYjUsIDB4YTllM2NiZjgsIDB4M2QzOTY1MTcsIDB4NTY3NDlmMjQsIDB4YzkwYTc5ODQsCisJMHgzOTJmNWE3OSwgMHg0YzExMWQzZSwgMHgzMmVhZWY1OCwgMHg0MTBjMDhkOCwgMHhjYzJkMzZkNywgMHg0ZjllMTIzMiwKKwkweGY0ZjZlMmNiLCAweGM4OWYyMjRiLCAweDA1ZTdlMTZiLCAweGZhYTY3M2VlLCAweDM1ZTMxZjcxLCAweDdjYTc3Y2YxLAorCTB4ZDY3YTYwNGYsIDB4MDJlZjk0MjQsIDB4YzBkZWNmOWYsIDB4NDc5NzgwNGMsIDB4NGYyNDlkY2MsIDB4MWYwZTRkYzIsCisJMHhjN2U5M2ZjYSwgMHgxMGVmZmQ5MSwgMHhhNWYzOGI3MSwgMHgxOTY3NmZmMywgMHhmZWJmYmNlOSwgMHg4NWZiZTI0ZiwKKwkweGRhZmZiZTkyLCAweGMwMTZkZGI4LCAweDE4MWY4MThkLCAweDE4NmJlZmQxLCAweDRjMWEyYTY3LCAweDMzZjVjM2I3LAorCTB4Y2IyZWZkMWMsIDB4NDU5ZWRjMGEsIDB4YTQ0ZmYxNzgsIDB4OTRmM2U2ZmMsIDB4ZjE5NWE5MmYsIDB4NjIyZmU4OTMsCisJMHhmYTNhYWMwNywgMHhmY2UyNmQzNywgMHgyMzlmNWIwYiwgMHhhYWJlZWJmNiwgMHhjZDk3OTQ1OSwgMHg3M2M4OGZjZiwKKwkweDhmZDljMzM2LCAweDlmZjlmYjFiLCAweGY1ZmQ4ZmRiLCAweGM4ZmQ5M2JmLCAweDljNzY4MWRjLCAweDdlNjlhOWU3LAorCTB4ZWQ1ZmZiY2EsIDB4NWY3MWY4MDQsIDB4Yzg3NWE4ZjgsIDB4ZGNmMjJjZjMsIDB4NWRmOTk3YzUsIDB4Y2RjM2Y2ZjYsCisJMHhiMGVmNmFlOSwgMHhlNTYzZmY3MCwgMHgzNGZmOTNlNywgMHgzNGZiZjlmOSwgMHhkZjBlYTNmNCwgMHg3YmU0NTg0ZiwKKwkweDllMjJmY2M2LCAweGY4MjU3NmM2LCAweDllMzE0M2I3LCAweDgwOTJmN2FmLCAweDQ0N2YzZTU3LCAweDZjZjRjNWU4LAorCTB4YTc1YzUxZmYsIDB4NmNkYjhmOGYsIDB4OWU0YzFkMmMsIDB4OWIxNzJlNGEsIDB4MmY4YTBlMDMsIDB4YmNmMjc3MzQsCisJMHg4Y2U1ZTY5NywgMHhmYTMzNzdlNCwgMHhhZmQwY2I0ZiwgMHhiZGExOGIzOCwgMHhmODIzMzUzNywgMHhmNTdlZmMzMywKKwkweDlhYjA4ZWRiLCAweGQ5Zjc3ZThlLCAweGRlYmJlZDBjLCAweGE5ZmViY2UzLCAweDZjNzNmODNiLCAweGExZWYyZDBmLAorCTB4ZWNjNzQ2NzgsIDB4YWFlZjI4OGYsIDB4YWU5ZmNmZWEsIDB4NzgyNGFkYWEsIDB4YjFlMDhmYzksIDB4N2NhZGNmMWEsCisJMHgwZmUzYzU5MSwgMHhiZjQzZmNiMiwgMHg1ZjkzZjEzYywgMHg5ZTA2ZTNmZiwgMHhmOGYyMWQ5ZiwgMHg5MDhmZTg1ZCwKKwkweDNkNTRmMTdlLCAweGU2YTY3ZTQ2LCAweGFiNjhkYzAzLCAweGQ4N2NmOTUyLCAweDllODhmM2Y3LCAweDJiNGMwZjlhLAorCTB4ZWIyOWZmNDcsIDB4OWRhMzk3YjQsIDB4MDcyYmY1NWIsIDB4YmUzZWY3ZWQsIDB4MjRmMjk3MmIsIDB4MGZjMTNkZWEsCisJMHgyYjNhM2U1MSwgMHg1ZGEzNTcyMywgMHhhMGUzMDg1YSwgMHhmZWYxZmJiZCwgMHg2ZTExY2JhYiwgMHhhMzM2ZmYyOSwKKwkweGRmYzYxY2ZmLCAweGM3ZmEzNGVjLCAweGQ5ZTc4ZDk5LCAweDRmOWJkZDJmLCAweDQ3NjJjYmZiLCAweDZmZWM1M2YwLAorCTB4MTFjMzlkYjMsIDB4YTNjZTIzZGUsIDB4MzI3OWJmMDgsIDB4Y2ZiZTRiZmYsIDB4NGUzNDRkNTYsIDB4MTQ2ZGI3ZjYsCisJMHg2MTcyOTcyZiwgMHg2ZDA1OTliMywgMHhlNGYyMDNjNSwgMHhmMjJlOTY3OCwgMHg2MzVlNDQ0YywgMHhhNzllMmNmNywKKwkweDhmMGVlYTIyLCAweDgxZjNiZjMxLCAweDIzOGYyYmNjLCAweGI0YjNjNzNjLCAweGU2MWY5NmFmLCAweDQwMmY5NDE4LAorCTB4MTg3ZTYyZmQsIDB4OWM1ODA1YzUsIDB4ZTdhOTJkZmMsIDB4Y2EzZDFkYjgsIDB4NzI3YTIxNjUsIDB4OWM1MWRmMDIsCisJMHhlZDA5ZTgwNiwgMHhiMWUzNGJmOSwgMHg2YjllNzhlOSwgMHg1MmY0NDc3NCwgMHg3M2UxZjNjNCwgMHgzNjkzYzIyNiwKKwkweGQzOGEzNWViLCAweGJjN2MyYmE0LCAweDZiM2RmNWUyLCAweGM2MWZhMmM3LCAweGI4NjVlNmY1LCAweGFiYmI3YWE0LAorCTB4MzUzYTUxMWEsIDB4NGQ5ZjkwMjMsIDB4NTI5NjhjZmIsIDB4YmZmYWFmMWMsIDB4ZjI5ZjNjY2MsIDB4MTdmOTJhNTAsCisJMHgyOTFhMGEzYSwgMHg2ZGY3YjI5ZiwgMHg0ZTNjZTFhYiwgMHg3NzY2MTk3MiwgMHhhOGU0ZmU1MywgMHhiYzUwNWZhZSwKKwkweDE5NDA3OWMwLCAweDcyNzYyZjMyLCAweGQ2ZjA4M2I2LCAweGEwY2Q4ZTFjLCAweDNkNGI5YjFjLCAweDQzYjU2NzI0LAorCTB4YjUzOGEyYmYsIDB4MDk0MzU2YjYsIDB4N2VjY2RhYzQsIDB4MGI0MzllMTMsIDB4ZWZlNDYwYWYsIDB4MzJlMWQzMWMsCisJMHg4YTE1N2FlMSwgMHhjM2JlOThmYywgMHhhNDE4OTg3ZiwgMHgwZjhjOGFmZCwgMHg5MzdlNzg0NCwgMHhlZTE1NjdiOSwKKwkweDNkMTViNGMzLCAweDNkNzE4Nzk3LCAweGNkNGRiODBlLCAweGJjNWZkODY1LCAweDg3MmRmYzk5LCAweDRmZDIxOTUyLAorCTB4ZGRmMTU3NjEsIDB4Yjg1ZWExNTMsIDB4YjBmMTQ1YzYsIDB4Mjk2ZWU3YmUsIDB4Y2MyYWZmMjQsIDB4ZjMxMGNjNzMsCisJMHhmMzM2Y2EyYywgMHg5YWE1MGZmZSwgMHg5YjY5OWY1MCwgMHhkNTQ3MGY5OCwgMHgwNGQ1NTlkYywgMHg4NzUwODNmNywKKwkweDNjOGE0NjdlLCAweDQ1M2YxOTU1LCAweGE5ZWExNDNmLCAweGQ3ZTBlY2Y0LCAweGZmYjYzZjMwLCAweDE0YjJkMjFjLAorCTB4ZTM0OTBlN2UsIDB4YjJlNzEyZmUsIDB4ZjNjNzFmYjcsIDB4ZmMyYzNiM2QsIDB4YzM5MWU3OWMsIDB4ZGY5MzY2MTMsCisJMHhlMGE2YWQ2ZiwgMHhlNmVlN2MzYSwgMHg2NjM3OTRmOSwgMHg0MmU3MGM5YiwgMHg4NDdmZjAwNiwgMHgxZDQ3NTZmMiwKKwkweDZiZDcwNWZhLCAweGFmZjYxNjMwLCAweDY4YmQzOTk5LCAweGQxM2IzZDZiLCAweDJkMzhiOGJmLCAweDk3YmE3OTQ4LAorCTB4OGE1NTQ1YjUsIDB4M2Q0ZWI5OWYsIDB4ZWMyN2FiNTAsIDB4M2Q3MGI2NzMsIDB4ZWY4ZmJjZDMsIDB4MzVmNzkzY2IsCisJMHg2ZTVmYTY1ZiwgMHgyZGRhMzZjYiwgMHg5MjdmZjVmZCwgMHhmZTgzZjJkZCwgMHhmZGM2ZmZmMSwgMHhmM2VlMzMwYSwKKwkweGU0OTdlZDkyLCAweDNiMjBkZDdkLCAweGUxYmZhOTNjLCAweDhmOTkxOGVjLCAweDBlMzAzZDUyLCAweGQyOWRhN2I3LAorCTB4ZjIxYjBhNGUsIDB4ZTIxZGFhNzUsIDB4ZDhjZGExN2MsIDB4NWMyM2U1ZmYsIDB4YmY5OTVmMzQsIDB4NWY1MmI1OTMsCisJMHhmMWZhNzk4MSwgMHhkN2YyMzAxZiwgMHg3MGEyM2NjOSwgMHgwOWY3Y2YzNSwgMHhlZTc0NmM5YiwgMHgyOWRhY2JkMCwKKwkweDhiMjQ2ODdmLCAweGQzZjkwYTJhLCAweDZkN2NlODdhLCAweGMxMTFlNjM2LCAweDQ3YjJlYjc3LCAweDk5ZGJiZjUxLAorCTB4ZjI0YThkNmYsIDB4NmUxMDU3NTIsIDB4NTA5ZmU2M2IsIDB4ZWI2NDZhYmUsIDB4M2FlNzFjMjIsIDB4Yzc2MzhkMDcsCisJMHgzMDhiOTNmYywgMHgxNWJmYzA4NSwgMHgwNmY0ZWJlNSwgMHgwNWM4NWYxZSwgMHg5YmY0OGM3ZCwgMHhhMWQzOWEzYiwKKwkweGExZTc4ZWJkLCAweDk5MTMzY2M4LCAweDUwZjEyMjE3LCAweDNiOWJmMDJkLCAweGNhMTE1MTc2LCAweGYwNGFiNWMxLAorCTB4OTlhZTcxNTEsIDB4NGUwZGZmY2IsIDB4ZWMxOTVlNzEsIDB4NzljMGNmNmIsIDB4ZmJjNjNlZTQsIDB4Zjg5ODM3MGYsCisJMHhhZjM3NjQ3OSwgMHhmOWQxOGM3NywgMHhmODJmYTA3OSwgMHg3MjhlYmIzOSwgMHgyODMyNzc5ZSwgMHhhZjA5MjUzZiwKKwkweGM5ZTUzZjMyLCAweGU0MTFlMGI0LCAweGNiZjNlNDk3LCAweGQ2MTI0ZTkyLCAweDZmNDdjZThmLCAweGZhZWRjNDNiLAorCTB4Y2QwYjA2ZWEsIDB4MzVjOTZmYTMsIDB4NWJlYzk3ZTQsIDB4ZmZhODYyNjIsIDB4OWNhZGJiYWIsIDB4ZGJjNjkyZWUsCisJMHg1MTYxNjc1NiwgMHhkODhiNTdlYywgMHhmNWNhN2U1MSwgMHgxNmJiMzJmZiwgMHhmZDE0YjVkNiwgMHg2YjVhNDdiZSwKKwkweDM4MDUzYTJmLCAweGEwMWFkYTNlLCAweDc0YWVjZmIyLCAweGY5ZDIxN2FhLCAweGE5MjhiOWQyLCAweGY5ZjJkODllLAorCTB4ZTYwZTVhYjUsIDB4MTQwYmM0ZGIsIDB4YjdlNzk5MjAsIDB4ZWE5MzM0N2UsIDB4YjA3N2YxOTksIDB4Y2YxNmVhZmUsCisJMHhjMzkwMzRkNywgMHgzYmUyNjM3ZCwgMHhmZmZmNzgxNCwgMHhkYmM0N2Y3OSwgMHgxOTczMTY5MSwgMHg4N2ExZjc3YiwKKwkweDVmMWQ4NjY2LCAweDkxZmRkZjQxLCAweDljNzFlNzI1LCAweGM0ZDNiZDQxLCAweGM4YzU1NjdhLCAweDVkZjQyNDVmLAorCTB4NWU4Nzk3MjUsIDB4MjVlYzg1ODcsIDB4NjUzZmM4YWYsIDB4MTUxZjIyMzUsIDB4NWY1MDNiMjMsIDB4NzE0ZTUzOTksCisJMHgwZmQzMDc3YiwgMHg4ZjNkYjBjNCwgMHg3NjgyY2Y5ZiwgMHg2Mzk1ZmZhMiwgMHgyNmRhN2ZiOCwgMHg0OWU1ODJlOCwKKwkweDE4NGY1NGJmLCAweDIyY2FkYmU1LCAweDJmZGY3ZDM3LCAweDIzNTgwZjhmLCAweGM3YzYzZmRjLCAweDBiZTllMzdmLAorCTB4ZjMyNWJlMjgsIDB4ZTU3MzE5NmEsIDB4ZjI4MGI5Y2YsIDB4ZmJmNTBjNmMsIDB4YTYxY2UyZWMsIDB4NzNjN2NhZTYsCisJMHhjMmNkMmJlYywgMHgzNmY1MTVlZSwgMHg4YmM1MzA2NywgMHgwNDNlNDRmMywgMHgyYjhkZWU3YiwgMHg3Yzg2NWJiZiwKKwkweGY3ZTBlNjc0LCAweGJiNWNhMzQ3LCAweDgyZmIwMmNhLCAweGVlZDhlNDIxLCAweGZhYzcyZTFjLCAweDBhMzU4ZWNjLAorCTB4MGNlMzU3N2MsIDB4ZmFjMmYwOGUsIDB4NzczYTk1YmYsIDB4YTgyOTFlMDYsIDB4ODJjZDMxMWIsIDB4Zjg1ODE3NDcsCisJMHg5YWYxMTU1MSwgMHgzZGM0ZTgyOSwgMHhhZWU3YzM4NywgMHg3Nzk4MjgwOSwgMHhjN2NlZDJiYSwgMHg3ZTZhMGNjZCwKKwkweDljMTBmNzNhLCAweDcwMDc1Y2EzLCAweGJjYjg1NGFmLCAweGM5ZDI4Zjg2LCAweGQzZDUyYThlLCAweGEzNjExY2YxLAorCTB4MGFhYWQ3MzgsIDB4ZTc0OTcxYjksIDB4ZjVlZDE1MjYsIDB4MzViZWI3OWYsIDB4ZTAwNmQzNTUsIDB4ODc4ODg1ZmIsCisJMHg3OGM4YTJmZiwgMHhjYmRjYTIzZSwgMHhjZTU5NjJlZCwgMHg5MDBiZjU1NiwgMHhmMGFkNTZmZSwgMHgxMmYzMzZiYywKKwkweGY4ZTljZTdjLCAweDk1NjViNGNhLCAweDU1N2RhNzk4LCAweGZhMjU0YjZhLCAweDRmM2QwNzY5LCAweDA5NjVlNzg3LAorCTB4YWY3ZjJiNzUsIDB4YzAyZjE2ZDEsIDB4ZWQwYmU2NzMsIDB4OGY4ODQ5YzEsIDB4N2JiZGU3Y2YsIDB4M2I4N2NhMjcsCisJMHgwNzc4ZGY3MywgMHgzMGRlMjRmMywgMHhhZjkxMzkwYiwgMHg5OGVlZjU4OCwgMHg3OWViMDY5ZSwgMHhmMjJkZDhhYywKKwkweDBmNDQ2YzNjLCAweDNmNzJjNmM3LCAweGRiMWU3ZjY0LCAweGZhZjI4NTM4LCAweGU3ZTFjZTY2LCAweGIxNjVhZjQ5LAorCTB4OWVmODFlYjYsIDB4M2VkMDE1OWMsIDB4ZDkxMTcyNjMsIDB4ZGU0NTMzOTEsIDB4MDJiNzhjYzUsIDB4OTgxN2U4NjksCisJMHg0MzVjNDM3MSwgMHg1ZDljM2EzOSwgMHhhY2Q3OTU3NCwgMHhjM2YwMjRmNywgMHg3ZWIxYmFkNSwgMHhmZWIxYTk2ZCwKKwkweGZlYjE5ZjM1LCAweDFhN2ZjOThkLCAweGQ5N2Y1ODliLCAweGY0OGQ5ZmVlLCAweGYzYzJiY2Y0LCAweDMwOTdjMzNlLAorCTB4NDdiZGQxMTcsIDB4MzJmZGEzMDksIDB4NzE1Yzk5ZTEsIDB4MjdlNzk3MGUsIDB4NzdkOGFiZmUsIDB4NTE5OTMzM2QsCisJMHhkYjNlZDY3YiwgMHgyMDM3M2MyZSwgMHg2OGFhZDdmZCwgMHhiNjY1ZTA5ZiwgMHhlZjdlMGNjMiwgMHhiOGJiZWEwMywKKwkweDNkMWNmMjIyLCAweDA3NjFkMzE0LCAweDNmNzE3NTZmLCAweDgxNmJiYzJlLCAweGQzY2UwZTdlLCAweDQ2YWEzZjg5LAorCTB4NGU5MDUyZGEsIDB4NzYyNjFjYjIsIDB4YTU1MmYyMzksIDB4MjM5YWVjOGQsIDB4YjllNGVlODIsIDB4MDU4ZDJhZWEsCisJMHg4NjAyY2YzMCwgMHgxYmU1ODM5YywgMHhlODhiZDc2NiwgMHhjODdmMGVhNywgMHg2OWRiZTcxOCwgMHg4YTViZTUxYSwKKwkweDQxNWIxODMxLCAweDVkMDQ4N2Y1LCAweGZmZjI5MTFmLCAweDU3NTg5YTA3LCAweGVmMTg0MGUwLCAweDFlNWNmYWVjLAorCTB4NzQ2NTJlODcsIDB4NjU2Y2ZlNWUsIDB4ZGQyNWQ1MDksIDB4YWUwMWZlNGIsIDB4NDFhMThkMWUsIDB4ZTkyN2Y0NDUsCisJMHgwYjRlYTdmOSwgMHhiZjdhODNkMSwgMHgzNGJiZjg0OSwgMHhlYTU5MDIxMywgMHhiODgwNzA5MiwgMHhjOTNkNDJjOSwKKwkweDcxOTVmZWM4LCAweDZjOWI3Y2JhLCAweDdlZjhmY2Q3LCAweDdlNzU5MzBlLCAweGQ0NGIyYmRlLCAweGFhNmEyOWExLAorCTB4ZjJmY2ZkNDAsIDB4M2I3ZjQ4ZWYsIDB4ODc5YzQxN2MsIDB4ZTc0NmNkMjUsIDB4YTNlMzg2OTMsIDB4NzY3ZjgyNWQsCisJMHg0YjkxZjEyNSwgMHhlOGY4OWFiYiwgMHgzYjkyY2VhNywgMHg5YzZiZWUwOCwgMHhhNWFmZDQyZSwgMHgwY2JhOTczMCwKKwkweDJhMjNmZDJhLCAweDRmY2UzYmYwLCAweDQ3NGY4YTZhLCAweGVkNjZmOWJlLCAweDgyNWFhOWYxLCAweDliZWY4NjljLAorCTB4YzZhOWY3ZjgsIDB4N2RmMGJkZWYsIDB4NjlmN2MyNDYsIDB4ZTBkOTdkZjAsIDB4NmQzYjc3ZWYsIDB4ZWM0NGQzNTEsCisJMHgyMWVmNGFhNywgMHhjOWE1MTg3ZCwgMHhhZGU2MjM1ZSwgMHhhZWVmZjE2NiwgMHhhM2IxNzkxMSwgMHhkNDdkZTBkMywKKwkweDNjYzZhNTViLCAweDY3ZDkzNjEzLCAweGE0ZTRmY2EzLCAweDk0YWI5MmJjLCAweDU3YzgzOWU1LCAweGJhOWFkYjU3LAorCTB4OTdiZmEwN2IsIDB4NjU1ZTNhYzUsIDB4ODJlNjdlMGEsIDB4MmRjZjJmZTcsIDB4NTdmYzhhMzksIDB4OTg2ODhiNmIsCisJMHg4YjJkNzdkNywgMHhlZGM1YzJhZSwgMHhjNDdjMTY5YiwgMHhlMWYyNGM1ZCwgMHg2NjkzZTQ1OSwgMHgwMzM2MzgzNSwKKwkweGVkY2M2N2VhLCAweDIyMmQ2ZmEzLCAweDliY2U3OWZlLCAweDQ5NWUxODM5LCAweGE0NWUxMjI3LCAweDQ5M2ZhNDE3LAorCTB4Zjc3MGM5MmYsIDB4M2JkN2U3YWYsIDB4M2I2ZjExMjksIDB4NGE1ODUxZDgsIDB4MTZiMThhYmIsIDB4ZTdhZDc3OWUsCisJMHg4ODBiY2MwZiwgMHg2NWFkODY2OCwgMHgyZjM1ZGEzNCwgMHhkYzkzMDkyZiwgMHgwMGZkY2FiOCwgMHg5Y2JkNjVlNSwKKwkweDk0NGZmYzFiLCAweDdlMTc3NTY3LCAweGNiZTFhMDUyLCAweDcxNjM3OWRlLCAweGM2ZjAwMGRmLCAweDk1ZTEzN2ZlLAorCTB4YmNhMGUzZjYsIDB4ODYyZDBmZTMsIDB4ZjhlMWUzYmMsIDB4NDIxYjhlNGMsIDB4ZmNjNTUwYmIsIDB4NDc5NDlkZTQsCisJMHhmMGUzOWExYywgMHgxMDkxNzllMSwgMHg1MjU2YzFlNiwgMHhjMmVjOGFmYywgMHg2ZjZlMTRlNywgMHhiMDliMTU4NywKKwkweDNmMzdjZWUzLCAweGFmN2I3MTk5LCAweDMzZGVkZmE5LCAweDk0NzdkN2U0LCAweDZlM2JiODczLCAweDM1ZmRlNWQ1LAorCTB4Yzc5YzVlZGMsIDB4NGIzOTNkYjgsIDB4NTE3NDJmYjQsIDB4ZWZjM2NjYmIsIDB4ODZmZGM5ZDgsIDB4ZDU4ZjRmMWQsCisJMHgwM2IwNWZiMSwgMHhlOTYwN2VjOSwgMHgzMjJjY2VjMiwgMHg3ZjgzOWJkZSwgMHhkZTQwZDY0YSwgMHhiNzMzNjZmOCwKKwkweDdjOTliNzVmLCAweDYyZTc5NDU1LCAweDljZTJmN2UxLCAweDMxOGNmZTkxLCAweGZmNjRmYzdjLCAweDYyOGU2ZTYyLAorCTB4ZDdmNzRmODgsIDB4YzVmZTRlZmYsIDB4M2YzMDc3NTIsIDB4NTg1YmZhMDcsIDB4NGM1MDJmZTYsIDB4MzNmNzE3MDgsCisJMHgxYzNlN2QwMiwgMHhkNmZlOTg2MywgMHhmZWVkMWEzMiwgMHg5YmNiNTlhYiwgMHhjZmEyNjJhNiwgMHhjZmE0MWNlMiwKKwkweGM1OWY0MDA5LCAweDlkMWNmYTA2LCAweDI0ZTVjOTkzLCAweGIzZTkyNWMyLCAweDkzNGIyZTlmLCAweDE3ODJjYWYzLAorCTB4ZWUxZDNmNjAsIDB4YTMzNTVmY2UsIDB4ZjU2ZGRjYmQsIDB4OWU1YWJjZjEsIDB4MDcyYzk4MjcsIDB4YTA1OWUwMTIsCisJMHhhYTNjNzg3MSwgMHhjMjRjZjA0YSwgMHgzOWUxOTM3MSwgMHhhNDQ5M2UxZiwgMHhmOWM2NmNjZiwgMHhjOTdlMzg2MSwKKwkweDU5ZDg1OGQ2LCAweDJmMmZjMDMxLCAweDA4MzU4M2RiLCAweGFjZGYzZjdmLCAweDQxYTNmYmUyLCAweGEyMGVhYjcwLAorCTB4ZTQ2ZmViYWYsIDB4MmE1MDk0NzEsIDB4NGYxODQ3ZDcsIDB4NjdmMTgxYzksIDB4NWZhZmYxODksIDB4ZmFmMGU5Y2IsCisJMHhkZDEwYjE3ZiwgMHg4NDUxZjgwMiwgMHg5ZjY4YjY3ZiwgMHg3OTQ0ZGRkNSwgMHhjYzZiYjM1NCwgMHgwMGVkMTIyNywKKwkweDEzYTliNzE5LCAweDk0ZjFjZGVmLCAweGU2MDU5MTliLCAweDRiYzYzNGNjLCAweGYxZTI2ZWVhLCAweDhiNThlYjlhLAorCTB4N2ViZGUxMTksIDB4M2E5ZmIxOGUsIDB4Y2MxM2ZlYjYsIDB4YzliYmFiMGIsIDB4ZDM5ODNjZjgsIDB4OGIxOTY3MWYsCisJMHhjMmEzOTY3MSwgMHhmYzA3ZDA4ZiwgMHhkM2Y0ZmM4MiwgMHhkZjBmYzVjYywgMHhmNjNiZjQwYSwgMHhlODE1NjU4NywKKwkweDZiMzJiYTc3LCAweDUwNGRlZWM5LCAweGYxYjZmMWZmLCAweGQ2NjlmZjU0LCAweDA2ZjNiZmI3LCAweGExMjhlZmI2LAorCTB4YjkyNjBkN2EsIDB4ZjkwODNlZTEsIDB4ZDU0ZGY1MTEsIDB4YzExNGQ3OGQsIDB4YTJlZDQ3YjgsIDB4MzlmOTViZGYsCisJMHhiMDRhNmYwMiwgMHhlN2JjMTY2MywgMHhmMjhhMzg5ZCwgMHhiYzg0NmIyMSwgMHhkYmM4NWJlOSwgMHhjOWQwYmRhZiwKKwkweGQ2NmY1ZTUzLCAweDkzNThkZmM5LCAweDc5ZjVlZmMyLCAweDJiYmZmY2FkLCAweDY2YjczZjMwLCAweDNjNTdhODk0LAorCTB4NDdlYjFlM2YsIDB4MWVlODRmOTUsIDB4ODcyNmRlODAsIDB4Y2U2ZmY4ODYsIDB4MDlkYTdlZTUsIDB4MWM3NDRhYTUsCisJMHg0MzI2YTVlMCwgMHhlN2M0ZGZmNCwgMHhkMWUyYjMzNSwgMHg5YThmZTQ1YywgMHgwNGNmZGU2YSwgMHhjNWI1YjRkZiwKKwkweDJjZTk5ZWY4LCAweDZkNzM3YmQ1LCAweDI1MGYyODY5LCAweDcwZTdiNTlmLCAweGE5ZWQyY2ZkLCAweDY3ZmJlMDgwLAorCTB4OGRiNmVmZmMsIDB4MzYwMzdlODAsIDB4MGM1Mzg3YzUsIDB4ZGY5NzdlNGMsIDB4ZTdlMGU1NWYsIDB4MjJmZTAyY2IsCisJMHhkM2JjZmQwZCwgMHhiMzdmM2NmZCwgMHgwNzIyYjZkYSwgMHgwZjVmZTdmNywgMHg1ZTcxMmE1YSwgMHg1MWY5NWIyZSwKKwkweDI3ZDI2ZmI0LCAweGY5NDQ5YjRmLCAweDQ2NjYzNmJlLCAweGRmNzQwNzNkLCAweGYxNzg3YzQxLCAweDQ4NjkwNTI3LAorCTB4ZGQyMzBlNmMsIDB4MjU5YWJhNGIsIDB4NDhjNmJkZTksIDB4ZGJhZmMwZDcsIDB4NWNiZjMyNzIsIDB4ZGFlODFiNWUsCisJMHhjM2Q3NDAzZSwgMHhkNzAwYjlkOSwgMHhhOWFlMDk4ZiwgMHgzZmQ1ZmQ0NiwgMHgyNjVmMTI0ZSwgMHhiYzljM2I4ZiwKKwkweDc5NDRiZmMwLCAweDI3NWYwMDNhLCAweDY2MWU1ZmYxLCAweDdmMjMxNWM1LCAweGVjZmU0YmI2LCAweGE2MmMzODQyLAorCTB4MjliMzlkMTgsIDB4ZTllMzdjNTQsIDB4NzYzMGVhNjAsIDB4MWYyZjg0ODYsIDB4ODMxNWFlN2QsIDB4NGQzZmMyZTEsCisJMHhjZmZjN2ZkYSwgMHgzY2YyZmI4MywgMHhmOWRmMGVkMSwgMHg1YzAwYzY1OSwgMHgyNDJiZmUzMCwgMHg3ODcxNTcwZiwKKwkweDVjMmQyYmI2LCAweDVjN2IwOGJlLCAweGU1OWJlN2VlLCAweGYzOGNiYjdjLCAweGU3ZTE0YWFkLCAweDc3ZThiZGRlLAorCTB4Zjk3YmRmMjEsIDB4Y2ZiODdlZjgsIDB4N2NlNDFkNjMsIDB4Y2Y2ZjQyNDIsIDB4MTY5YzA1YjEsIDB4ZWU3NWRiOTgsCisJMHgxYjlmYTI3YSwgMHhiNDY5Zjg1OCwgMHg4MzM5OTY4ZiwgMHg3NGYxMTdmZiwgMHg4NDNlMTRjNCwgMHhjYzg1OWNmYiwKKwkweGEwNTdmMTRmLCAweDEyNzI3NzhmLCAweDZmMDkwZGVjLCAweDg3OWE5ZTMyLCAweGYzYzlhNzkxLCAweGMwY2ZjNjQ5LAorCTB4YmVjOGM1YmEsIDB4ZmFkOGU3OTMsIDB4ZjM5ZTdiZTcsIDB4Yzc4OTc2OTQsIDB4NjU3N2Y0NjIsIDB4ODY1NGZmMDgsCisJMHg0NTIxNDdmMCwgMHhjOTllN2VhMSwgMHgyZmI4N2M1MiwgMHhjODUzZWU5OCwgMHg2Y2M5OThiZSwgMHhkNjY3OTcyNCwKKwkweGUxOWU3ZDcyLCAweGQ0ODdmNmUwLCAweGM3ZjFjM2ZiLCAweDkyMzM5NzE1LCAweDk5MWIzMzU3LCAweGU3YzczNzM4LAorCTB4ZDk4NzRjOTUsIDB4MmMwZWU3YWMsIDB4YWRmNGRhNjcsIDB4ZDFlZjkwMGIsIDB4ZTAwN2QxNGUsIDB4N2VlMGU5OWYsCisJMHgyMTVjZWNlYywgMHgyNGNmNTgzZiwgMHhmNWZkZjNkNCwgMHg2N2JlN2E0MSwgMHhlNDlmY2ExMiwgMHg5ZTY2YzlmYiwKKwkweDhjZDJmZWUzLCAweDk5Y2E4YzczLCAweGExMjc3N2JlLCAweGVkYThjZjllLCAweGNjNzI4NDk5LCAweDczN2JmMmU5LAorCTB4MWZkYzBkMjcsIDB4ZDFjNzhjOTgsIDB4ODcxOTI2YjksIDB4NGNmYTJmM2IsIDB4M2YxOTFmZTYsIDB4YzcwNjczNmIsCisJMHhjZmQyMzhlMiwgMHg1NTg5NDY3MSwgMHgxZTE1NGJlMSwgMHg1ODNmZTg5NywgMHg3NmVjNzQ4NCwgMHhmZjQzNGQxNSwKKwkweGU4MWIxY2M1LCAweGNiYmExODIzLCAweDE3MzBiYzE1LCAweDAwOGZlZGU5LCAweGYxMGU2ZTBmLCAweDc1ZTNjMDU1LAorCTB4MzQ3YmMxMzUsIDB4ZTFlMTJjM2UsIDB4MmI4NzgxMzYsIDB4ZmIzZDVlODUsIDB4ODlmMTRhYjAsIDB4NDNlOTdmMWEsCisJMHhiZDA4NDIxOCwgMHhlMjExNjY2MiwgMHg0NWU5M2Y1NywgMHg1OWQ4YmY3OSwgMHhmOGEyYTAzMCwgMHhiMjRlNjNmZSwKKwkweDVhYmYxNjMzLCAweGIxOTVmMTRmLCAweDRmNGM0YzViLCAweDIyZTM5M2QwLCAweDMyN2I4NjI5LCAweDMwY2JlYzI2LAorCTB4Y2NlODJmZDQsIDB4NjE3ZmJjMzUsIDB4N2I0MzI4ZDcsIDB4YTFiYzc0NzksIDB4MmE1N2EyZmQsIDB4YjE0OWY1MGMsCisJMHgyZmY3ODYyOSwgMHg1MGRhYWI3ZSwgMHgxYWU3YTRiZiwgMHgzZjUzZmJjMywgMHg4M2E4NmQ5OCwgMHhkZTcwZDBjNiwKKwkweGQ4NTU5ZjdiLCAweDY1Zjc5ODM2LCAweGJlMTk2ZmYxLCAweDE5YjZjZGZmLCAweGYzYmM2MGFmLCAweGIyZjdkOGE0LAorCTB4MGE1NjNmYjAsIDB4ZTkyMDU4NzgsIDB4NjM3Y2RjZjYsIDB4YWEyNTUxN2YsIDB4ZjNkZjIxNTQsIDB4NzllYjA1YmYsCisJMHhjMDM0ZjZiZSwgMHgwYmJmNjI1YywgMHhjNGY2OGRkYiwgMHg3YWM2MmRlMiwgMHg1NWE2Zjc0MywgMHhlNzA3MWIyOCwKKwkweGUzNTRiNDc5LCAweDc5YzkzOTU1LCAweDc5YWUzNTFlLCAweDUwY2ZhNDI2LCAweGUzMTdkODJlLCAweDYyZWMxMTEwLAorCTB4OGUxYjMzY2MsIDB4ZmQ2Y2JmY2YsIDB4MmZlOGQ4NGIsIDB4ZmVmZTdmNWIsIDB4ZjVkOTBiMTYsIDB4YWE3ZDVmOGIsCisJMHhhYzhmMGEyYSwgMHhkYmZhZTM1ZSwgMHhhN2ZhZTM3NSwgMHhkZmQ3MWE5NiwgMHg3ZmFlMzNlOSwgMHhmYWUzNjRmYSwKKwkweGY1YzZmZGJiLCAweDVjNmI1MTFmLCAweDcxODBjY2ZmLCAweDhjZWJiM2ZkLCAweDM0MTM5ZmViLCAweDA2YzhmZmFlLAorCTB4YjdlN2ZhZTMsIDB4NzBiYmQ3MTgsIDB4OGIzZDcxOTksIDB4ZWQwZDRiYzIsIDB4ZTUyZmViYzksIDB4ZGI5YWYxNjUsCisJMHg3YTAxZWY4YywgMHgyMDc0MDk0ZCwgMHhhMDQxNjhlOSwgMHhjNjc3ZjI4MSwgMHgzMGNmN2ZiNCwgMHhjMDNkMzI0ZSwKKwkweGY3NDRkMWJlLCAweDZlM2VjMWJmLCAweGY0ZmU3MjliLCAweGZjOGFkMjAxLCAweGYxZjRjOWJkLCAweGVlYzJiOTZmLAorCTB4ZmEwMTc0MTQsIDB4MGFlNTEzYTgsIDB4NjE0ZjE3ZDgsIDB4ZDg1NjM3NTksIDB4ZWRhMTgxZmIsIDB4MTJiZjI5MGIsCisJMHhiZWUyNzlmNSwgMHgzNmI5Mzg3OCwgMHg3ZDg5NGY0OCwgMHgwYTdhYjBmMiwgMHg4MWY2YzlmNywgMHhmNDcwZjI3ZCwKKwkweDhmYjMxYzdiLCAweDRmNWE4ZWM4LCAweDVkMWJhNTdlLCAweGYxNGY4ZTFjLCAweGNmZTgyNWQxLCAweGYyZjQ4MjdkLAorCTB4MzI3MDAwNzEsIDB4ZTcxYzdiYzAsIDB4NGYxZmUzMDMsIDB4OGRmZTQwOTksIDB4ZDkyOGIzNmYsIDB4MTk4MmZmZWQsCisJMHhjZGQ4MzA5NiwgMHhlMmFkYTg5OCwgMHg5NTNhNGYzZCwgMHgyZjZmNDJmNSwgMHg4NThmZmUxNCwgMHhiOTViZTBmNiwKKwkweDk4NTFlZmRjLCAweGM1ZTZlMzg1LCAweDdiMTRiY2U4LCAweGRkNzljNDZkLCAweGUzMDI3MTIzLCAweDRmNzgyMDA4LAorCTB4Y2EwMTFjNjEsIDB4OWJhNzNiNWUsIDB4ZjhhZTUyZDMsIDB4YzA0OWVlOTksIDB4NGFlOWZjZTcsIDB4NmFiNWQ5MjksCisJMHhjZDNkZTUwYSwgMHhmZDIxNDFiZiwgMHg3ODdmZmYzNCwgMHgyY2ZhMTcxOSwgMHg0Y2I5NWNiOSwgMHhkODVkYjNlMiwKKwkweDQ4MmVkYzAzLCAweDE0OWFjM2M3LCAweDA3NDE2Mjc3LCAweGMyZTdjZGUxLCAweGI4ZmU4Njc1LCAweGZjNDdmZjFmLAorCTB4MGFlM2NkN2MsIDB4ZDA2NzI2ZDMsIDB4Njc1YTMzMzEsIDB4MGYzYzZmNWMsIDB4OWMzOGRhYTUsIDB4MGQ5OTliOGYsCisJMHgwNTgxMzlmMSwgMHg1N2JjMGVjOSwgMHhmYmM2ZDEwMywgMHg3YmZiY2YxYiwgMHhkM2ZhMTQ2MywgMHg3Y2ZmZjU1NCwKKwkweGNmZTMwNmFkLCAweDlmZmEyZTM4LCAweGZlODYzZTFkLCAweDYzZWJkNTY2LCAweGY0MWFiZmU4LCAweGJhMTRjMGZjLAorCTB4Y2ViZmEzMjQsIDB4ODdmODdiZjgsIDB4YzI3ZTkxNzgsIDB4YmIyZjQxM2MsIDB4YmRmYjhjOWQsIDB4MjM4NmZjOTIsCisJMHg5OGMwOTA1NSwgMHhlN2U2NjNiZiwgMHgxNmRhYmRjMywgMHhlNjNjOWZiZSwgMHg5ODRkNjM1YiwgMHgzNzY2NjMzNywKKwkweDMyZmJlNzllLCAweDZkZjMwODdiLCAweGM3ZTQyNzRmLCAweDc5MGNiYWMzLCAweDNjYjRlOThmLCAweGI2NTdlZmFlLAorCTB4NzE4NjVjMzYsIDB4MDcxMTVlYTIsIDB4NzgzNWE3YmIsIDB4YWFiN2FlMTksIDB4MGUyZjI4ZjksIDB4Mjc3MjU3ZWYsCisJMHg0MGYxNmY3YywgMHg2YTlmMDI3YiwgMHhkZDQzMDY4ZSwgMHg1ZTEwMDhlYywgMHgxMGI2YjU1NiwgMHgzZGM1OThkZCwKKwkweDZlZjNhYjUwLCAweGZjMTMwNTczLCAweDE0OGUxNzEyLCAweGNjMmQ4NmY2LCAweDk4NGM1OTVjLCAweGMxZjdmMGM2LAorCTB4NTVmMzg2NzQsIDB4YzRlOWRhNWQsIDB4MGJkNWE4N2QsIDB4MmJjYTI1ZmQsIDB4ZmEyNTkwYWQsIDB4YjZiNGQ3YWQsCisJMHg5NGFiZGMxMCwgMHhiMzNiMTA2MCwgMHgzYjUxNjY4ZSwgMHhlMWFhZGJlMCwgMHhiZTc4NTQ1OSwgMHg2NzkyMmFmNSwKKwkweDNlNmRlNzE2LCAweDM4NjdmN2JjLCAweGRhYmQ1OWZjLCAweGM4NzI4OWU3LCAweDg3MjhkMjNmLCAweDVkYjU2ZmVlLAorCTB4ZDk1YWY4OGUsIDB4OTNjNjhjYmEsIDB4NzU2ZjZiNzgsIDB4OGRmNThlNWQsIDB4YmVkMTVlYWQsIDB4YjU0ZGRhODIsCisJMHg3MWY0ODJiYSwgMHg4NjIxNjgxYSwgMHhjN2FkMTY3MSwgMHhiMDNkNzE4OSwgMHgwM2M2MTkzMywgMHgwNDViNWVjZCwKKwkweGUxZWFjODk5LCAweDA1YTNiMmYwLCAweDVkNzMxZjQ0LCAweDhkZjQwNjFjLCAweGJjN2QwM2U1LCAweGZiNGNjY2IzLAorCTB4MWRmM2RiZDMsIDB4YWZlZGZlZjQsIDB4MGZkMTc5OGYsIDB4MWUwMTYwN2MsIDB4Zjk4YWZmNTEsIDB4ZjAyMzhmZjQsCisJMHg4ODcyMTE2NywgMHhmMjAwYzE2OSwgMHgyMzU3MjU5NSwgMHg2Yjg2NzQ3ZiwgMHhkZmUzYWQzNiwgMHhiYmM0OWZkYSwKKwkweDFmMjhjZWM1LCAweDIwZWY5MmQ0LCAweGUxN2NlYmJiLCAweGY3MTQ4ZDBjLCAweDI3YmMwOTUwLCAweDQ0ZjAwZmUzLAorCTB4ODE3NmY0NzIsIDB4ZTJlZmRiYTcsIDB4ZWZkYmJlN2UsIDB4Y2VjNzk0NjAsIDB4ZDU1ZmMxOTYsIDB4MTQ4ZDVkMDAsCisJMHgwNTliMjVmMiwgMHgwNTZmNmNhOCwgMHhlYjgyNTJjMSwgMHgwYjQxNjM2NSwgMHg0OWQ2NzVlOCwgMHhiZmQxZGIyZiwKKwkweGNkN2VlZDgzLCAweDRkZWFhMThkLCAweDU4NTk5ZTM1LCAweGFhN2M5YzZlLCAweGJlZjFkOTFkLCAweDYxOGIzZjRiLAorCTB4YzQ3NGJlODksIDB4NDU4MWFiOTcsIDB4YzUxZmNjZjAsIDB4MWQ3ODNkOGUsIDB4ODlhN2FmMzUsIDB4NWUzYWI0ZjYsCisJMHhlOWVkMTc0ZiwgMHhmN2NmNWUwMSwgMHgyMGQ0YTkzZiwgMHg5N2YxNDk2MCwgMHhkNWM2NDc3YywgMHgyZGJlNTFhMywKKwkweGIyN2NmYzYwLCAweDNiNjBlN2I4LCAweDkxYzJmMjEzLCAweGRiMDZhYjMxLCAweGJlNzQ2MjZmLCAweDUwZmZiNjQwLAorCTB4NGUzOGU3YjQsIDB4Mzk0NjI5YWMsIDB4ZmRmOGM3M2MsIDB4NmM4NzgxNTYsIDB4ZTlmNjg5YzcsIDB4YjYzMTlmMTQsCisJMHhhNjRhZjhjYiwgMHhmNDJiZWNlMywgMHhmZGIxOTk3ZCwgMHhkM2JkZjE0MSwgMHgxZDM2MzY3MSwgMHhjNzFiNDdkYiwKKwkweDUzZGEyMGRmLCAweDA4ZWYzYzFkLCAweDQ3M2YyMWM0LCAweDE1ZWZkYTJmLCAweGM3NmM3NmVkLCAweGVkOGQ0YmYxLAorCTB4MmJmOGM1NmIsIDB4NDNhZDAwOTUsIDB4Zjg4OTlmM2YsIDB4OWQ1NjhlZTQsIDB4ZjY3Y2M5ZWEsIDB4N2UwY2M4ZWEsCisJMHg5OWYwNTk4ZSwgMHhmMjFiMTk2YiwgMHgyM2FiZmNkYywgMHg5YTRjYmU3OSwgMHgwZmY3ZTNkZSwgMHg3YjY1MGYyMSwKKwkweGI4YTM0Yjg2LCAweDEwYjVlYWFmLCAweDQyMWQ1OTFkLCAweGVjM2UwODhlLCAweDhiNGEyMzk3LCAweGY3MTcxMzhmLAorCTB4M2QxOTdmOTcsIDB4OGU3ZWUxMDMsIDB4ZmUwMGFjZjIsIDB4YmVmMzllOTAsIDB4MDRjMTYyNjMsIDB4OThkYjk2NzksCisJMHhlZjA5ODJjMiwgMHgxODY0MTc3YiwgMHhlNTM3NTllYSwgMHhjY2Y3ZGUxYSwgMHg3NzY4NjUxOSwgMHhiNDM3OGU1NCwKKwkweGYxM2U1OGIzLCAweGFlODI2ZGM3LCAweDBjMmFjYTUyLCAweDAyYmVmMmVkLCAweDkyM2U3M2E2LCAweGY0NzliNTc2LAorCTB4Njc3YmMzMTQsIDB4YTQ3NGY1NGIsIDB4Y2I1N2QzZWQsIDB4MzY3Y2FiZmIsIDB4MzliNzBiOTQsIDB4MWYyMzY1NDcsCisJMHgzMjc1YTRmZSwgMHhlZjIwZGYxYSwgMHg4OTc0YTI2YywgMHhjOTQ3NGJkMiwgMHhhMmVhYjY1NiwgMHhjN2Y1NGE1ZSwKKwkweDdhYWYzY2RjLCAweGQ3OGZhYjY1LCAweDZmOWQxODhiLCAweDRiNWFkOTVlLCAweDJmODFjN2Y1LCAweDU2ZDdmY2IxLAorCTB4YTA3Yjk1M2YsIDB4ZmIwZTE2MGUsIDB4NDNhZmY0MTEsIDB4N2ZhMTNiM2YsIDB4ZmQwMjNmYWMsIDB4ZmExZGI5NjMsCisJMHhkMDg3ZjJjNywgMHg4NTZmYjYzZiwgMHgxMGZlYjE3ZSwgMHg4M2U1ODVjMCwgMHg3ZjNlMGZkMCwgMHhmYWM3ZmEwMCwKKwkweGQ1MDBkNmE2LCAweGEzYWQ2YmVmLCAweDIwZDY4NmZhLCAweDM2YjZmNzk1LCAweGFkYjVmM2QwLCAweGRkNWY1NDJkLAorCTB4N2JjYThjYmEsIDB4YWU1NGMzNWEsIDB4ZWQ0MzVkNmMsIDB4MWYzN2ExMTYsIDB4MWYxZmU3MTMsIDB4N2RjZmM2OWIsCisJMHg0NjdmYWYyNywgMHhlZWQ1ZjI5ZSwgMHg0NTA0YThiYiwgMHg5M2M4NjU1ZSwgMHg3ZGMzYzhjOCwgMHgyZjMxYTc3NSwKKwkweDcwNDdmMTEwLCAweDkzMWUzOWQ4LCAweGUwMmIxOGUxLCAweDJiNjJjZjE4LCAweGEwZGNiOTUyLCAweDJlOThlYjM4LAorCTB4YzBhOWRkZGYsIDB4Zjg1YjIzYTcsIDB4YzU3NTE3YmEsIDB4ODFhNzNkYTksIDB4Y2M1NjM3OGYsIDB4MmNjMjc5OTMsCisJMHhlZjFmOGFhZiwgMHg5NTdhZjdjNSwgMHg4ZjJhNzU1OCwgMHg4MzFmOTMzNywgMHg1NTNmMDE3OSwgMHg5MTMzZGNlMiwKKwkweDcwODRjNDc5LCAweDdmNDE5MzY5LCAweDFmYjNjYzI3LCAweDI3MGU2ZTVmLCAweDc4Mjg2ZGUyLCAweDdjNzhmMjJiLAorCTB4ZTRlY2FkNDMsIDB4YjZkNDliZjcsIDB4NTJjZDkxNDcsIDB4YmY3NDJkZmMsIDB4MTAyZWFkODksIDB4MDRmNGEwZDUsCisJMHhjMjRmNzQ4MiwgMHg2MDMzNzNmOCwgMHhlZDcyMDU5MywgMHg4NzRjZTVkYywgMHhiOGQxYWYzMiwgMHg1MDVkY2FmZiwKKwkweGE4ZTdkODYxLCAweGZkMzIzNmU3LCAweGNjYjdlODIyLCAweDE5NGE0ZmI4LCAweDNiZTE5YjdkLCAweDBjZjdkZTViLAorCTB4ZGRjZjE2ZWQsIDB4YjdmOWY2ODYsIDB4MjJmMmFkMTQsIDB4OGEzMjQ3M2UsIDB4YWZkNzU5M2IsIDB4ZDcwMDM5NjAsCisJMHgwNDRkOGVjMiwgMHhiZGUwNTA1NywgMHhmZGY5ZDE1NywgMHhlZmM1ZmJlZCwgMHhmZmZiMDg0NCwgMHgyZjgxMmVjNywKKwkweGQ3ZGE3YWRiLCAweDZhZjM3NThlLCAweDg0ZDg3YTQ5LCAweGE3ZTNlN2ZhLCAweGVlOGU0OWQyLCAweGZlNDRjNDdkLAorCTB4NjIyYzcxZWQsIDB4MDEzMzc5NDIsIDB4YmY2YzQ4Y2MsIDB4NTY3MjZmMDAsIDB4MTUxY2NhZTksIDB4NTc0Y2U1ZWIsCisJMHg4YjExN2ViMSwgMHhlYzA4YmVkMywgMHgxN2E0M2FmZiwgMHhiMTFmZmZiMCwgMHg3ZTRjZmQ0MywgMHhiZjNjYzdmMCwKKwkweGJhN2E0YTJiLCAweDg5NjdhYzQ0LCAweGQxNmQwN2RjLCAweDczYzNmZDkyLCAweDYzNWZjOGYzLCAweDI2ZDYwNzNjLAorCTB4ZGMyYjAxZjYsIDB4ZWYxOGQ5NTUsIDB4ZmYyNjFkZWQsIDB4ZDZmZGU5Y2UsIDB4MWViMDA1ZDQsIDB4MmEzYTljY2UsCisJMHhiYTBkZjNlNSwgMHhkMTczYzg2OSwgMHhiZjJhYmVjYiwgMHg2MjNkMDE2YywgMHgwODY1OTdlNCwgMHg5ZmNhOTlmZiwKKwkweGFhYmJhMTY3LCAweGY4OWM3NDc5LCAweGU1MmNjZGE2LCAweDcyOGU5ZTk4LCAweDRiZWVhMDZjLCAweDNiYTJiYjI3LAorCTB4ODlhM2YwODcsIDB4MWFkYmQ5ZjUsIDB4MzkwMGZjYTQsIDB4ZDM3N2VkNGYsIDB4NTYwZjk4NWMsIDB4Zjc0ZmYyMjIsCisJMHhiNTNhZGViNSwgMHg2NjFmMjEyNiwgMHg1MmRmYTBiNywgMHgzZDQ1YWIxNiwgMHhmMjY2NWE1YSwgMHhhZjI3YTg0NSwKKwkweDFmNjE3ZmMxLCAweDczYzdlZWRkLCAweGYzMDU1YWZhLCAweGM3MWUxOGExLCAweGJhYmNlOWRhLCAweDc5NGE4NWY2LAorCTB4NGI5MWRhNDAsIDB4YjA3NjBlOTgsIDB4ZTE2NTExYzMsIDB4OTk3ZTgxYjIsIDB4NDc3YzgzZjAsIDB4NWNjZmY1YzgsCisJMHhhZDBmMzQzNSwgMHgzZTQ3ZGE0MCwgMHgzM2VjZGRkNCwgMHg3NDg2M2Y4NywgMHg5OTg3NTlmNywgMHg2MzA5ZTViMywKKwkweDkxODNhOTdiLCAweDZhNTQ1YjllLCAweGE2MGFlODg5LCAweDNkZDNiNDIzLCAweDg1MGVkYThiLCAweDFjMjExNWU1LAorCTB4NTBmM2JkZDMsIDB4MjU0YzFmOGYsIDB4NTJkZDRkYmEsIDB4N2JjMzU3NDUsIDB4NzlmNWMxNGMsIDB4MWU5OWM3MDAsCisJMHgxYTQ5YTBmZCwgMHhkMzVlZjA1NywgMHhiNDJlY2IwNCwgMHg1ZTIyYzcxYiwgMHhhNWQxOWM3MCwgMHg2Mjg1Yzc4NCwKKwkweDU3NWFmYmJlLCAweDE1OWU5ZTEwLCAweGVmY2I2OGYzLCAweDg3ODczYmM3LCAweGNmNzhmY2Y5LCAweGU5MGVhMmU5LAorCTB4NzNjZTMxYmYsIDB4MzdmNTY1NDMsIDB4OTVjNmRlZjAsIDB4NzRkODU1MzEsIDB4MzNhZTdjNDYsIDB4NTNjZTI2YzcsCisJMHgzODAyZTAwNiwgMHg1NTM4NDU5ZiwgMHhiZmZjOWI4NCwgMHg4ZjRkN2U3YywgMHhjODE5YmY3MCwgMHhiYjhhNWFiMSwKKwkweGM0YjEzMjRlLCAweGEzMmNhYmI4LCAweGM4Y2RmZTQyLCAweDRlYmMxMTczLCAweDBiYTlkY2VmLCAweGRmYWM0YTJlLAorCTB4YjhmZDc0NDQsIDB4NzYxZmU3YzIsIDB4Y2QyZjNjNmEsIDB4ZmQxM2Q3ZWYsIDB4N2VlNGViYzQsIDB4NDg3ZjljNTksCisJMHhkZmY2ZjAxMSwgMHhlNzllMzZlMywgMHg2YzU4M2E2MSwgMHgwZDJkZTYwYiwgMHgyNWZlMWZiNywgMHhjNGE0Y2EyZSwKKwkweDE4ZTgzMGZkLCAweDY0OWQ1NzE4LCAweDc1OWYzY2EzLCAweDdmNGI4ZjMyLCAweDMzN2NjNzQzLCAweDhhZmNmMTJjLAorCTB4NmFlOWQwNGQsIDB4ZTRhZjMxYTcsIDB4NzdiNzFlNWMsIDB4ZThmNTg5Y2UsIDB4YzZiZTcxYjMsIDB4NTY3OTY0YjgsCisJMHhkZDE3YmRjMiwgMHg5MWZmZTRmNSwgMHg2ZWJlY2M3MSwgMHhmZDJlMGY5ZSwgMHgwOTA0NGI2YiwgMHg3OGU1MWRmNCwKKwkweGE1NTg3YmU4LCAweGVlOTJlNWY4LCAweGExN2RmOTZiLCAweDdiYTAxZTg3LCAweDFkMmZhMTU2LCAweGJjNWVhMWU5LAorCTB4ZThjNmJmNWYsIDB4M2JiMDU5ZWYsIDB4MWY0NTJhYjAsIDB4YzQ1YTU3ZWMsIDB4NDhkN2U0YzIsIDB4ZmIyNTI3ZjYsCisJMHgyNzliN2U5MSwgMHg1NjNlNjlmNiwgMHg5M2NhNzE4ZSwgMHhhNThmOGJlYiwgMHg4OGE2N2VlMCwgMHg5MWRiYjlkMSwKKwkweDhmNzQ5M2VhLCAweGVkZmI1ODMxLCAweDJiMjk0Zjc4LCAweDI0ZjRmN2UzLCAweDA1MjVmYmFmLCAweDNlZjNjMjE2LAorCTB4MWM2M2FlYjksIDB4MzdkODY3ZTQsIDB4YmVmZmYzODksIDB4N2Q3ZWNmMTcsIDB4OTZmM2Y0MGMsIDB4ODFjZTE4YWUsCisJMHgwOTliYTViYywgMHhhZTgxZTM4ZiwgMHhhYzY0ZWNiMSwgMHhhMGZiYTg3NiwgMHg1ZjRkZjNiMiwgMHhhNWMwYmNlZCwKKwkweDY4ZDdkZmM2LCAweDk2MzllYWVhLCAweGNiYmM5M2FhLCAweGZhNzgwN2NhLCAweGFkM2VmZDhlLCAweDRlMjdmODhjLAorCTB4NTc1MTA3YmYsIDB4Yjg0MWUxYzQsIDB4N2VjYmZjZjEsIDB4MTM3MzI3ZDMsIDB4YmU3YzYwZTksIDB4N2M4M2VkYzYsCisJMHhiZjkzNTdkMywgMHhjZWI4NDYzNSwgMHg3NTk5YmQ5NCwgMHgxYzZiODcwZCwgMHgzZDFiZDVjMiwgMHhiNzY4OTU5MSwKKwkweDBmZjZiODQ4LCAweGE1ZmFiZjczLCAweDkzNGYxNTVmLCAweDAxMjBmYThkLCAweDEyZmY1MzRmLCAweDg2NWJmNjllLAorCTB4YzA5NjY3ODYsIDB4ZjI4ZTRmY2YsIDB4YjcwNjQyZmIsIDB4ZDVmZDQ1N2YsIDB4Y2NmNzg0NjEsIDB4NTFlYmIxNjMsCisJMHhiM2JjMDIzYywgMHg1M2RlN2YwOCwgMHgxNTMzMTQ1OSwgMHgxNGFjZWJmOCwgMHhlNDI5NTlmNCwgMHhhOGNlOGY4ZSwKKwkweDE3ZGJkMGIwLCAweGE3NWU3ZTUzLCAweDc3NDNkYmM2LCAweDc5ZTA4YTJlLCAweDBiOGJkZjAyLCAweGUwZGZkMTBhLAorCTB4N2JhNTZlM2MsIDB4Nzk0OTQyOWUsIDB4MmY1Y2IyMjIsIDB4NTczZmIxZTYsIDB4YWIwZjEyMTksIDB4NzhiY2I5ZjMsCisJMHhkNGY5YjVmMSwgMHg1OTZmYmRkZiwgMHhlZDgzY2ExOSwgMHg1ZWY1ZGYyMiwgMHhlZjBkYTc1NywgMHhjNDc4OTVlZiwKKwkweDIxOTQwNTdhLCAweDJhMTE3YzRiLCAweDNmMmI3YmJhLCAweDIxOGVlOWIzLCAweGYxZjEzM2M2LCAweDFiZTI0YmVlLAorCTB4NTcyYzllMzksIDB4YmI3Mjk3ZTQsIDB4ZTJhYTM5NTQsIDB4MmVmYjg3MzksIDB4ZDllZTkzN2QsIDB4MjM1MmFmYmEsCisJMHhlMzM3ZmI5OSwgMHhmZTEyN2Q3ZiwgMHg3ZDY2NmZhMywgMHg4YWNiZDM5ZCwgMHgyYWEzZjQ3YywgMHgwMzdkYTVlZiwKKwkweGZlMjUyMWVhLCAweDlmYzQzMmIzLCAweDBmZjM0ODI1LCAweDNiNjU2ZGJkLCAweDZhNzhjMTk1LCAweGU3MmJmNDE0LAorCTB4ZTEyZmU3MjcsIDB4ODBiNjVlNzYsIDB4N2FlMDk5Y2UsIDB4YzVhYmUwMjAsIDB4YTQ0ZjUyZmIsIDB4ZjM4N2JkMGIsCisJMHhhOTcxM2QyMiwgMHg0Yzg5Y2ZjNiwgMHhlZjVkNjhkMiwgMHhjZTg1M2M5YiwgMHhmOTE3ZWNmNSwgMHgyYzRiZjExNCwKKwkweGMzMmVmZTQzLCAweGY3NmYwMjMzLCAweDBjNDVmYjllLCAweDc3MGRhOWVmLCAweDA1NWVlOTliLCAweGJmNzhmNWE2LAorCTB4N2ExNDc0MDksIDB4OWE3YmEzNWQsIDB4ZjE2YTllODEsIDB4NWYxN2E4ZGUsIDB4ZmI4NjliM2IsIDB4NjZmOTAzZTgsCisJMHgzZTQwZmI4MiwgMHhlNzdkODc5NywgMHg2ZjNhNWFkNCwgMHgyZTY3ZGFmMywgMHg5ZmZlODEzNSwgMHg1ZDg1NTdjZSwKKwkweDM5ZTE4YjEyLCAweGZjMTU4ZDlhLCAweGQ4NDM4MGRjLCAweDRlZDc4ZTAxLCAweDhlZmMyMDM1LCAweDJhYjNkZmM5LAorCTB4NGY3NjdhMDksIDB4ZGJiZTk1YmUsIDB4Zjk2Nzg5NjgsIDB4NDg3NDBlMzAsIDB4ZGZlZTUxNjUsIDB4ZmFlZmZiYTEsCisJMHgzOGJhMGJjZiwgMHg4ZjJiOWExZSwgMHhlOGUwOWQ5MiwgMHgzZGUyZjdlNiwgMHg1YzEzYWY5ZCwgMHg3ODQxZjcwOCwKKwkweDMzZWUzMjllLCAweDU3YjYzZDU3LCAweDA2YTM3OGMyLCAweGY4YmE3N2JlLCAweGUyNGNhNjdhLCAweDc3ZGNkMGY3LAorCTB4Nzg1ZGNmZTksIDB4YzJiYTVlZWYsIDB4NGJlOGZlZTgsIDB4MzkwNmNjMGEsIDB4ZDdjNDVmNWUsIDB4MTYzMmIzYTEsCisJMHhlNWZjODUxYiwgMHhiNmFmMjhkMiwgMHgwZDliN2EzMywgMHgxN2M5N2FlZCwgMHhmNGE5NDdhMywgMHg5NzkxNmFkZCwKKwkweDI5NzI3YWJlLCAweGUzYTQ5OWYxLCAweDU3YzEwNWI5LCAweDAyMzY2ZTkxLCAweDc2NDkzYzVmLCAweDlkMzAyYzRlLAorCTB4YzcyYWUzZjAsIDB4OTVjN2UzZmMsIDB4M2ZiNzFkNTgsIDB4MmZkNDJlMmMsIDB4ODE5MzI2YTUsIDB4MzgwYjhhZGYsCisJMHhlYzEyYzhkZCwgMHhlZTc3YjI1MiwgMHhmNTJjYjQxMCwgMHhjNmM0NWI3ZCwgMHhiN2ZmYmYzMCwgMHhhM2E1NjZlNywKKwkweDI3OTZkYTVkLCAweDBkYmYzY2VkLCAweDA5NWRiNWYxLCAweDM4ZTExN2E0LCAweGJlZDJhNWZmLCAweDRlZDdjNWVmLAorCTB4NmRiOGUwMzQsIDB4ZGJlNDJmMzAsIDB4NThlYTdlN2IsIDB4OWI0OWY2OGYsIDB4MmE3YzRmY2IsIDB4MjZkY2Q3YzcsCisJMHg5ZmJjMWViMSwgMHgyYmZmMTZmZCwgMHhiYjhjNmZlOCwgMHg0NzQ0N2RmOSwgMHg0MzYzNWNhNiwgMHg0Y2Y3ODdmYSwKKwkweGFkN2JjZmQ4LCAweGQ4MWEwYmY4LCAweDA3ZjkwZDRmLCAweGNmNjZiYTE2LCAweGIxMTZlZmMwLCAweDZiYjQyYWUwLAorCTB4ODZhODc1MTcsIDB4MTFlZTE3N2IsIDB4YjllMTYyZjIsIDB4ZDg0ZDE2MTQsIDB4ZmM5YzJjMWYsIDB4YjYzNzNhMmQsCisJMHg4YjFhNWNmMCwgMHg4Zjc1YmQ4MiwgMHg4ZjdkMTczOCwgMHgwYWM0NTczOCwgMHg0NDNiM2QzOCwgMHhkZmU1MTVlOSwKKwkweDI0YmVmN2NjLCAweGNiZjk5NWJkLCAweGRmMzlmM2JkLCAweGI3ZTgwMmIzLCAweDE0YjFlOTQ5LCAweGE3MWIxMGMxLAorCTB4ZWJjZTllZmMsIDB4NjJlYWQ3YmMsIDB4NzgwNDkyZDEsIDB4MDQ3M2NkMDcsIDB4ZDM4YzI2OGIsIDB4MWIzOWRlZmYsCisJMHg3ZDYwNjdjZCwgMHhjYzBlZmQzOSwgMHg3ODc4NDFkNywgMHg3ODRiZDVhZiwgMHg5MWZmYmUxYywgMHhmNDBlM2MwNiwKKwkweGM3ODBjYTNmLCAweGQwOTdmZGMxLCAweDk2YjVlZmY4LCAweDEzZmY0OTdlLCAweDM3NWZlOTg2LCAweGVmZDAzZmMwLAorCTB4ZjdiNzFhNjgsIDB4YTcxZmZjYzgsIDB4ODkxZGRmMDIsIDB4ZjllZGJkZGUsIDB4MzMxZGZjNGEsIDB4MDE3ZWZkMmIsCisJMHhhNmFjZWFlYiwgMHgzMzhmODQ3MywgMHhlNzdhNjczYSwgMHg4M2JkZGZlMSwgMHhlZTc3OWFmOSwgMHg4YzcwZjhiMiwKKwkweGFlN2M3MzNlLCAweDMzM2QwODZmLCAweDc4YzJiOTlhLCAweGM3MmM5NzlmLCAweDdjZDMxNDE3LCAweGI0ZGI5ZjkyLAorCTB4MzJmMzBiODgsIDB4MGI5YWE1NmQsIDB4YzZkMTFmN2YsIDB4NzFiYjkxNjIsIDB4MjM2OTUyZGYsIDB4NDJlMzI3MzksCisJMHhlNTNmZGZiMiwgMHgzYjNjZjJhOSwgMHg2Zjc5MDdjOSwgMHg5NzkxMTJjYiwgMHg1ZTA4ZWM1NywgMHhkNGJlZWI4MSwKKwkweDEzZmNkZWQ0LCAweGQyODNmNmY4LCAweGNjMzczYTM2LCAweDMzZjY5Yjk4LCAweGUxYTM2ZTMyLCAweGEzMTViZjJmLAorCTB4ZjBjMDMwNWYsIDB4N2ExM2NkZmMsIDB4Zjc3ZTA2NzAsIDB4MTgyNzEwNDMsIDB4ZDgyZjUxYzcsIDB4YjViY2M0MWQsCisJMHhiOGRmNjIwZCwgMHhmYWYzMWVjMSwgMHgwZGU2ZTQxMiwgMHhiMzU3ZGEwNSwgMHhlODkzZGExNywgMHhmNzJmZDI3NiwKKwkweGRlZGQzOTQ2LCAweDIyN2U4MDUwLCAweGZjYzRmNjM1LCAweGVkYjdjYzIyLCAweGU5NzZmNzExLCAweDU1Nzc4YTE2LAorCTB4ZmVmYmEzMWUsIDB4ZmY3ZGNiZTYsIDB4OGViY2U0OWEsIDB4ZDFkYTM3N2MsIDB4ODY5NGNlMzIsIDB4NmI2ODc3NzksCisJMHhiZWY3ZTQ2YywgMHg3YWYyYTdkNSwgMHhhMDhjN2ZmZCwgMHhmZmIwMTA3MywgMHhmOTQzMmQ0OSwgMHhmZWU1NWZiMiwKKwkweDNhZGYxMTIwLCAweDY3ZDBlNjJiLCAweGY5NDA1OGRiLCAweGU0MWYyMmY3LCAweDc0NGJmNzZjLCAweDM1ZDllNGFmLAorCTB4ZWJmZDY4NjMsIDB4ZGQzZWY4NWYsIDB4OTczZmI3MGIsIDB4NDNiZWIxZWIsIDB4ZjU2M2QyNGUsIDB4ZGUxNTVmNTYsCisJMHg5NzNmYjg1YiwgMHg1YTlkYWJkYiwgMHhjMTIyYWQzNCwgMHg1NzlkNWQ3ZSwgMHhlM2Y5ZjI0ZCwgMHg4OTRjNjMzNSwKKwkweDBhZWY4ZmYxLCAweGZhNTFiMDc5LCAweDE1NzhiNTM3LCAweGI4Zjk2NzllLCAweGQyMzNmYTMyLCAweGY0ZWMwN2EzLAorCTB4ODNhNjUxM2IsIDB4ZmJhMmFiYmYsIDB4ZTk1YTM3MmQsIDB4MGZhYTAxNzcsIDB4ODc1Y2RiOGUsIDB4OGQzNGMzZmIsCisJMHgwNzRkOTFmMiwgMHg5OWNmMDRlZCwgMHgyZDdlZmM3NSwgMHg1ZGU1MTZmYywgMHhmNDkxYzFkMywgMHhhOWY1NTZmYiwKKwkweDZjMjdjYTcxLCAweDYwOTVmMTRhLCAweGUwZmVhZmRjLCAweGZmZDdiYTU0LCAweDA1NzE4NmU0LCAweDY0NGVmZjI4LAorCTB4YWY3NDA1ZWEsIDB4ZjQzYzA2ZjEsIDB4NjM0M2Y1MDksIDB4MTdiNWYzZjksIDB4ZTc1NTc5ZDMsIDB4NTBlMGQ0YzYsCisJMHg4ZmE5MTA3ZSwgMHhkYWVmZWY5MiwgMHhkYmRlNWI5ZiwgMHg2NzE5Zjg4NSwgMHg3ZGZjYTFmMywgMHhiOGYxZjE0ZiwKKwkweGQ5ZjEyYmVmLCAweGY5MTVjNTNhLCAweGQ3N2FkMmY5LCAweGJjN2RmYTY5LCAweDZmNzc4ZWZhLCAweDQzZGNmNDYyLAorCTB4NzNmNzJiNzQsIDB4MGJkNWUzYzksIDB4MTJkZmI1N2QsIDB4NGJiZjhiOWYsIDB4ZTA1MmJmNTYsIDB4NjI0ZWZjNWQsCisJMHg3ZTljYTliZCwgMHg3ZGUyNGZhZiwgMHhiNzNkZDI2MywgMHgyNGZkMDg0ZiwgMHg2OWFmOTNjYiwgMHhkODIwNWY3NCwKKwkweDFmZTgwNTExLCAweDRhZDg3OTNhLCAweGUzNzI3Njc0LCAweDJlYWYzYTA0LCAweDljMDdhYmM3LCAweDRmMmY4MGI4LAorCTB4NzExM2U4NjQsIDB4ZjIxNjlmNWQsIDB4ZGYyNTdlYWEsIDB4MzBlN2NhYTcsIDB4ZTc3ZjBjN2UsIDB4YTU0ODdlMzAsCisJMHg1NzNlYWViYywgMHg5MmUzMGQzYywgMHhlZjU5M2RmMiwgMHg0YWI3NGY5ZiwgMHgzZmI1OTdiZiwgMHg2ZjVhNDVmNywKKwkweGY0ODYyN2EwLCAweDQ5YzE3YTY0LCAweDgyZjQzYTdhLCAweGU3YWUxNzc1LCAweDhjMmM5NWM3LCAweDViZjBjZmZlLAorCTB4OGVjN2Y3ZmMsIDB4ZmQ5MmIyMWMsIDB4ZWY5Yzc3ZGMsIDB4OWZkZDA3NmYsIDB4ZTAxNzg4ZTYsIDB4MTdhMWExZmQsCisJMHhlYjFjOTI0NiwgMHhlMGVmOGZjYiwgMHhkZjlkYjZmNiwgMHhmMDQ2ZjhhYiwgMHhjZGZmMTE2MiwgMHhlNjExZjcxMSwKKwkweGY5Zjc5ZGEwLCAweGVkMTQ3YjIxLCAweDllMjkyODNjLCAweGJkYmI2NjEwLCAweDJhNzBmY2Y0LCAweDk0MGZmZjQzLAorCTB4Y2E2M2NmMTQsIDB4ZWVmZDJmMDEsIDB4ZGYxNzZiMGMsIDB4M2JmYmU4YzcsIDB4NTE2MzgyMGIsIDB4MGM1OWRmMmUsCisJMHhmYmYwM2JmZCwgMHhlN2RlZjQ1MywgMHg1MjE3ODJhMywgMHg1Y2IxOGEwYywgMHhmNTJlNWUzMSwgMHhhNDJjMWY5YiwKKwkweDVlNjdjYWU3LCAweGVkMmE3YmZlLCAweGVkNDYzZGEyLCAweDYyZjA2YjIxLCAweDljYWZjNzlhLCAweGYzMTBlNzZjLAorCTB4ZWVmN2FhZmMsIDB4NDExODJkMWQsIDB4MDZlMTI4ZWIsIDB4OThkZDkzM2MsIDB4MDViMzk3OGMsIDB4M2I3YmYxMjYsCisJMHg3NGM5MWYxYywgMHg1ZjllYmZkOSwgMHg1ZmZhMWYwMiwgMHgyMWY2YmNlOCwgMHhjNmViOGViZSwgMHg1OTFjYjg1OSwKKwkweDYzZWM4MTNiLCAweGM4NjI5NmQ2LCAweDg4NzE1YjlmLCAweGJiZDBjM2RmLCAweGRjZWI0OWMxLCAweDg0M2ZmNjY3LAorCTB4ODZmZTI4ZmEsIDB4ZWQ3YmYxOTksIDB4M2Y0MDIyYzAsIDB4ZjlhMWU0YzUsIDB4NGY5MTIzZTUsIDB4Y2YyZDY0YmYsCisJMHhkMWU4ZmJiMywgMHgzOWU2MGJmNywgMHhmYmYyNWNmMCwgMHhkMmM5NzM4NiwgMHhhNDlkMDg1ZiwgMHhlMWM2M2ZhMSwKKwkweDk3ZTZkM2QzLCAweDI1NWQ3YjcxLCAweDdhZWZmOGY4LCAweGY0ZWIzNDZkLCAweDBkZTE2YmJiLCAweDcxMWZjOGUzLAorCTB4YTQxZmEyZDIsIDB4Nzc1Yjg3ZGYsIDB4NGFlOTA5ODEsIDB4NzdmMjE3MmQsIDB4YmM5ZjlmMTMsIDB4N2JkZTRiMmYsCisJMHg4YTlmOGM5NSwgMHg3ZjkyNjJjMiwgMHgzMzc4MmM0ZCwgMHg4MjdlYTFkZSwgMHg2MWMyNTllOSwgMHg5MWZmZjc0NiwKKwkweDY5ODRkZjdiLCAweGUyOWY5YTg4LCAweGY0ODVhY2I2LCAweGY2N2JlMGMyLCAweGJiZjI1ZjJjLCAweGY1YmJmZjZjLAorCTB4ZjQyYjVjMmEsIDB4ZDM4Nzk1ZWYsIDB4ZTA3ZWFmNTAsIDB4M2E0NmZiZTIsIDB4NWQ3YThmN2QsIDB4YzM2Y2YzZTUsCisJMHg4M2FmMzAwZiwgMHg0ZTE0YTYwNSwgMHg4NzkyNzZhMiwgMHg1ZGJjMjgxZiwgMHhmMzQxYjljYSwgMHg3ZWMxN2E0NywKKwkweGViZTgzZGYwLCAweDdmZWU0MjlhLCAweDcxMGNhZTYzLCAweGMxNmMyYmM4LCAweDlmYTk0ZDNjLCAweGMyNjY4YTQyLAorCTB4ZGNhN2YzNzMsIDB4ZTNkMjFhN2EsIDB4MTljNWI1YTksIDB4YzYwZjMwMmIsIDB4ZGEyNTY3YWQsIDB4OGNhM2ExZDUsCisJMHg3OGViOGJjZSwgMHhmOGM1ZjhkZiwgMHg4OWZlMzJmYiwgMHg5ZmRiZjdlOCwgMHgyNDNiZjQ2MSwgMHhiNGU0ZjNjMywKKwkweGVkODliOTllLCAweDllYjkwYTczLCAweGY2Mjg1ZjliLCAweGU0NGM4NTk5LCAweDhkZTMyNjU3LCAweGIxNjJmYmFmLAorCTB4ZjA3OTZhZWUsIDB4MjY4N2RhNzIsIDB4NGI3OGI3YmQsIDB4YTQ4N2EwYmEsIDB4N2ZjZmVkZTcsIDB4MWVhMGYyOTcsCisJMHg0OTEzZGUzNiwgMHhlZjE4NWZiMSwgMHg2MTJjNTc4MywgMHg1MzJjNDJlNSwgMHg2MWJkYWYyOCwgMHgwZDczOTcxMywKKwkweGI5MmNjZWFmLCAweDVlZTlkNzhiLCAweGVmM2I2OTg1LCAweDU5ZTNkZmExLCAweDEyY2FlYmIwLCAweGFkMTZlNWM2LAorCTB4MDVjN2E0ODMsIDB4YjQxMmZlMDUsIDB4NTU1YmUyZTMsIDB4YzM0NWYyMTcsIDB4NTFlMDk1MTYsIDB4NTZkNzNlY2QsCisJMHg4YjdhN2U3OCwgMHgwNmJiZWM5OSwgMHhiY2U5Y2YwMSwgMHg5YmFkMWE2MCwgMHhlMDBiMzRjNiwgMHg0YzE2YjRmZCwKKwkweGFiNzVmYjIzLCAweGE0YTFkZGY4LCAweDZmN2JjMDc5LCAweGUwNDMxNTZhLCAweDk5ZDdjNmM3LCAweDA0M2M1M2YwLAorCTB4YTI2MWJjMWQsIDB4YmY4MDVhNzUsIDB4ZWM3MDg5MGIsIDB4NzliZmM4NTQsIDB4MzM3ODNmM2EsIDB4ZmVjMTRmZDYsCisJMHhhYmU5Y2YxZiwgMHg3ZGQwOTY5YiwgMHgzZWY4YzkzNiwgMHg3ZDEyMGI2ZCwgMHg5MWYzMTYyZSwgMHg0NzFlNGNmOCwKKwkweGYxMGZiM2UyLCAweDJiZDJmNjg5LCAweDg1ZWY0ODUzLCAweDYyOTE1NDFlLCAweDlmZGQ4YmQ5LCAweGRhN2NiZWQyLAorCTB4OTlkZjJiYTEsIDB4ODEzN2NmOGEsIDB4OWVhM2EyZGQsIDB4NmZiM2Y1MWQsIDB4YTM1YjllYTMsIDB4ZmU3YThjNTIsCisJMHg5NjJjZTJhMSwgMHhmZjcxYWZhNCwgMHgzOWY1ZmYzOSwgMHgzZDA0YTY2OSwgMHhmMWM4M2VhOSwgMHhhNGU3M2FhNCwKKwkweGNmZjdhNDJkLCAweGViZTkxZDdlLCAweGFhY2JlZTg0LCAweGYxZWY3ODQ4LCAweDgzYjhmZWMyLCAweDM3ZWFiZDYxLAorCTB4YzcwZDIxZmQsIDB4YTY2ZjU4NjksIDB4ZTk3NWM5NzksIDB4N2NhMDc5YzMsIDB4MjA4ZDRmNmIsIDB4YzVlNWY3ZmQsCisJMHg0ZWI5NWZhOSwgMHhlYjhkZjRmZCwgMHhkZTA5ZTkyMCwgMHg5NzQyYWZmYiwgMHhmMjRjMjcxOCwgMHhiMDUxNTRlOCwKKwkweDlkMDQzN2NhLCAweGM2MDA3YTJjLCAweDM4YjZmZWM1LCAweGYzZDJmZWU5LCAweGEzZTI1NzFkLCAweDVmMDViZDdmLAorCTB4NzFkNzFkNTMsIDB4ZDFmOTExNDcsIDB4NzQ2ODZmNGQsIDB4ZmI0NGUwYzgsIDB4YzdjODA1NTUsIDB4ZDAyZmEwZjUsCisJMHhjNGFmNTE2ZiwgMHg2NDdiYTFkZiwgMHgxZWU5NTkwZiwgMHhiNzRkZmFlNiwgMHhkNWUzOGNkYywgMHhiMDlhYjcxZiwKKwkweGFiZTFkNGZkLCAweDQ5NWMxMjI2LCAweDJhNzgwYWViLCAweGZiZGU4YTE4LCAweGJlMDVlMjhhLCAweDNkODFmYzA0LAorCTB4ZTcyZGZjNDEsIDB4YzEzNzAwOTMsIDB4YmEyOWZiMDEsIDB4MDhhZmE4OGYsIDB4MGU0MTMzZDYsIDB4ZWRjODU5YmMsCisJMHg2NWRmNzgyZSwgMHhmN2U2ZmEyMSwgMHhkN2NmZjU2MSwgMHg1NzVmMzQ5NSwgMHg2NGRmN2NkMiwgMHgxN2NjZGY0NCwKKwkweDc4MmNmOWE0LCAweGU3YzI2YWRiLCAweGI2YmZlZTBiLCAweGE3M2RmNzA0LCAweDc5YTc0ZGQ2LCAweDRmZjBjYTlkLAorCTB4NTUzYWZlNDQsIDB4MjEwZmZkMDAsIDB4MGZkYzE3MmYsIDB4MGJmYjJjZjMsIDB4ZDNiNzZjZjMsIDB4Y2YzYjBkN2EsCisJMHhmNjBlZjg4YywgMHg4OWY5ZTYxNywgMHhjZjM5NDNhMCwgMHgwZDNkMzRmNywgMHhjZjQzZjlmMywgMHgyZWZkMGNhYSwKKwkweGM2YzBmY2ExLCAweGJmNGViY2E5LCAweDczMzIxNzEzLCAweDRhNmQwODdhLCAweGRlZGY3Y2E1LCAweDA0ZmJmZTZlLAorCTB4NzhjMDBlNTIsIDB4MjYwZjQ5ZTcsIDB4ZDU1Mzg3YTIsIDB4ZDBjOWU2ZmEsIDB4M2YwN2ZmZGYsIDB4MDBiNzE3MzcsCisJMHgwMDAwYjcxNywgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGNkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZmZiNSwKKwkweDY0OTMyNjY2LCAweDA4MTI0YzkyLCAweDNjOTg0MDgxLCAweDQ5ODQ5MDA5LCAweDc2OGE4ODAyLCAweDAyZDEwNDc4LAorCTB4ODk3OTRmMGQsIDB4NDIxMDA3OTMsIDB4NjliNWEwNWUsIDB4MDI0MGNkNmIsIDB4MzUwZDQ1YTIsIDB4MDFkNDVhMmEsCisJMHgwZGEyYTI4MSwgMHhiYzE1MGEwYSwgMHg0NTYyMmEwMywgMHhiNjhiNTdjNSwgMHg1MTQwMjZlNSwgMHg1ZWEwYzY3OSwKKwkweGZmZDdiNWFlLCAweDRlN2RhZGZhLCAweDU0OTBjZTcyLCAweDdkZmJkZWRiLCAweGRmMWY3Y2ZmLCAweDVhZmQ5ZjY2LAorCTB4ZDdiNWVkN2IsIDB4ZTdiZGFmNWUsIDB4Y2JhYTNkYzIsIDB4ZTRlMjE2ZWYsIDB4ZmY2ZjA1ZGQsIDB4ZjdhNTE3YmMsCisJMHhmYzgxMmVhYSwgMHgwMmNkZGY1OCwgMHgyY2MzOGZmOSwgMHg5MzRhMTRmZSwgMHhmZTcwYTY4YiwgMHhhNTZiOWI2NSwKKwkweGE2ODljNDIyLCAweGExNDFmZGJmLCAweDM2N2Q4NWZjLCAweDBiZjJhMGI3LCAweGNlZjc0NTI5LCAweGVhOGY3ZTQ2LAorCTB4MmZlZDQxNWEsIDB4MjU5ZjY4MGMsIDB4ZDhiOTczODYsIDB4NWRlYWU1NDQsIDB4MmU1MDlhMjMsIDB4Y2FlNjFlMWUsCisJMHgwZGYyZjJhMCwgMHgwOTY0NDI2MSwgMHg2ODU2ZmJmZSwgMHgzYmU5MjM3ZiwgMHg2YmE1MGI1MiwgMHgzNDc4NmY1NSwKKwkweGZkMmY0ZGE1LCAweDZmYTVjOTQ0LCAweDU3OGYzNzU2LCAweGY3MjRhYmYzLCAweGI5N2UzNGRkLCAweGY5ZWQ1ODU1LAorCTB4Mzk5ZWRjYTgsIDB4ZjM4ODQ3MmQsIDB4MDMxMzZkN2IsIDB4MjMzZjMyZDksIDB4YjAzZmNiODcsIDB4NWQ4ZDc5NTIsCisJMHg3YmY4NWFmOCwgMHgwZTZhN2RhZCwgMHhkMmI2ZTI4ZiwgMHgwZmE5OGIzOCwgMHhmYWU5NGE5MSwgMHhlYTYwZWYxOCwKKwkweDkzOGQzMTdmLCAweDhiN2RlMzQyLCAweDBlNWMxZmJmLCAweGU3Y2IwZWRmLCAweDlmYTg4YTBiLCAweGY2NjI2ZDdiLAorCTB4ZjU1ZGQ5NzMsIDB4NGRkYjM0ZjQsIDB4NmQ0NmY2MWQsIDB4NTUzYjU3N2IsIDB4M2NjNjI1ODgsIDB4MjQyMmExZTEsCisJMHg0Nzc5MTRiZiwgMHhhNDMyYmU1NywgMHg3Y2E0MmFiYywgMHhhN2NmYmY0NywgMHgxZjJmMzkxNCwgMHgxZmM2MDM3ZiwKKwkweDEyYzc4NWQxLCAweDJjM2I4ZjBkLCAweDcyZWIxZGY0LCAweDQ0ZDgxMjhmLCAweGJhYjEyZGZmLCAweGZlMDljYmVkLAorCTB4OWI4OGM2ZTcsIDB4NTVhOTRmZDEsIDB4NDdjZGFlMzgsIDB4NWY5ZTBlYmQsIDB4ODYzNDU1ODksIDB4ODdiYmUzZTUsCisJMHhhNmYzZTllYiwgMHhlMmMzMWFmZSwgMHhjZWQxMWYyOCwgMHg4OWJkNTNlMywgMHhkYTllNDM3NiwgMHhhYjlhZTA5YiwKKwkweDRiYTdhM2MxLCAweDRlYmI4NWI3LCAweDdmYTBmM2VhLCAweGE2YjEyZDU1LCAweGJlZWVjZDdjLCAweDdjMDY5M2FlLAorCTB4ZmE3ZmM1MmYsIDB4MzQ0OWJmZDIsIDB4OGJjMDkxZmIsIDB4ZGRkYWFiZmMsIDB4ZTg5MjMwN2EsIDB4Y2RmMTRkYTcsCisJMHgxN2JmNTM3NSwgMHg5ZDFkN2UwZSwgMHgxZjc1ZTZlZCwgMHg5YmViNDQ1OSwgMHg3ZjNlYTZhZiwgMHhiZWRiZTY5OCwKKwkweDQyNmNmNTQ3LCAweGZkZDg2ZmJmLCAweGU3ZmQwYzRhLCAweDZlMGY4YjliLCAweDJmZDVlZmE3LCAweGRkYmI4OWE3LAorCTB4YzUwZmYzNWQsIDB4MTdkZDg1ZTMsIDB4ZmJlOTUzYTMsIDB4MDhmNjQzZjksIDB4YjllNjhjMzEsIDB4OWRhYzdlMzcsCisJMHg1YzQ3NjJlOCwgMHhhZjc4Yjc3YiwgMHhlZjVkZDZkNSwgMHgzNWI1YmNlZiwgMHhkZWExYWE3YSwgMHgzZDFhZDE3OSwKKwkweDI1MmY0MGNkLCAweDhiZDYyZmJiLCAweDVmOWZjNjVjLCAweGVmYzJlZmNkLCAweGM3YmQ3ZDg5LCAweGY0YmRmNGFhLAorCTB4NWFjNmZkZjcsIDB4YzM1ZmJkMjgsIDB4ZjczNmJkZGIsIDB4NmUwOTZiMTMsIDB4Y2YzMDllZmYsIDB4ZmNmYjgyMTYsCisJMHg2ODJkYjMxYiwgMHg3MjhkZmU3ZiwgMHhjYmNkYmQyZCwgMHgyNDRmNWZlOSwgMHg4YjY4ZmM2MywgMHhiYzdkNzdhNCwKKwkweGY3MGI2ZTM1LCAweDdiNjk2YTUzLCAweDhmZGExYWVjLCAweDkzZWJiZmE1LCAweDU1ZDI5MGQyLCAweGNmYzk2YTVlLAorCTB4Yjc2ZjNhYzQsIDB4ZGMwMDJmYjUsIDB4NDZiMTE1ZTcsIDB4ZTdlYWViODksIDB4ZGI5YmI3N2UsIDB4YzlmM2RmOWYsCisJMHgyNzBmZTA2MywgMHg0ZjkwMWRlZSwgMHg0MWY5NGQ2NCwgMHgzZjJhM2ViOSwgMHhhNjQxNTFmZiwgMHg3ZjNkZmE4YiwKKwkweGY4MGY1ZjRmLCAweGZiOWI3NmMyLCAweGJiYjdhNjM2LCAweGY3ZDgzY2EyLCAweGE3MTg3ZjdhLCAweGI5ZWZmZDE2LAorCTB4ZTkwZmE0NjIsIDB4Y2E1ZTEyNDcsIDB4YjhlNGZhZTcsIDB4YWJiZjI1N2UsIDB4ZmI4YjY4ZGYsIDB4MTdlMGQxYmUsCisJMHhiNjc5YjdiZiwgMHhlZmZjYjI1MCwgMHgzMTYyN2Q2OSwgMHg2ZWU3ZWMzZiwgMHg0ZDc0YTFkNiwgMHhmODliNzA5OCwKKwkweGJiODY0YWM5LCAweDIyZWM3ODQ0LCAweDAzMGI5NjRkLCAweDIyODk5NWJkLCAweGM5YjBiZWZlLCAweGYxMTE3ZGZjLAorCTB4YmM1ZjdjMDksIDB4NWNiZGZjZGUsIDB4YTU2ZWFkMzQsIDB4OTgwOTJkZjksIDB4M2ZkYTBiYmYsIDB4NmJlYzA0ZmUsCisJMHg1ZWM1YWZmZCwgMHhmZjdhMDUxNCwgMHg0ZjU0Y2MzNiwgMHg0MGZlMzVmOCwgMHgyNTVmMDkxZiwgMHhjN2MxMWZiNCwKKwkweDgxMDI1MTllLCAweGJiZGY1ODk1LCAweGU4Njc5ZTU0LCAweGE3NzVkZWJjLCAweDIyODdiYjcwLCAweGFiNDE2N2ZmLAorCTB4NWI4ZjVkNjEsIDB4ZjA5MTM1ODQsIDB4MWMyZWRjN2EsIDB4NDdlOGY5ODksIDB4ZjVmYTg1MDgsIDB4NmMwYjBiZWYsCisJMHgwZjc3MjZhMSwgMHgwNGI5MmFmZSwgMHhjMjMxYWY3YywgMHg1YmJlMDgyMiwgMHg0MjdjZTA1ZCwgMHg0OWY3ZDhhYywKKwkweDVkMjlmYTMyLCAweDM1NmRlODUzLCAweGU2YzE3N2MwLCAweGQ0ZTdlODdkLCAweGUyNWRmZGJlLCAweGY4ZWY1NGQ3LAorCTB4NThkMzQwZDgsIDB4ZGRmOGViODIsIDB4MWJhMWE3YWEsIDB4YjFhZjRlYjgsIDB4ZTEwMTQwODgsIDB4MDIyMTJlZTMsCisJMHhmMjdmOTRmMSwgMHg1YTYyZTQ5MywgMHg3Y2I2Y2Y5NywgMHhhNDYyNWM5MiwgMHgzNmNjNDU3ZiwgMHgxMjllYTNkMiwKKwkweGVmM2ViYzI0LCAweGZjZDJlZjYxLCAweDMwNWNkMzhlLCAweDVkN2FkMDlmLCAweDU3ODY2YmViLCAweDJhYjg2N2M3LAorCTB4ODdhM2JiNmEsIDB4NTRmNzQwY2YsIDB4NTU3N2Y1OWUsIDB4ZjdlZmIxNzgsIDB4Y2ZhMDAyZDksIDB4M2M1ZjhkYzgsCisJMHhiOWY0MGYzOCwgMHhhMTRhZTZkNywgMHhhOWY2NmJiMSwgMHgyZGU2OTU1ZSwgMHgwYzgxYThmNiwgMHg0ZjdiNjM5YywKKwkweDljZTA1NzQ0LCAweDUyZTA1M2Q5LCAweGQ5YWVmMzBkLCAweDdjZTExNmEzLCAweDYyZmJiZjM5LCAweGY3MzY2OTQyLAorCTB4NDRlZGM1MzMsIDB4YTAzYzA3ZmIsIDB4ZjhlMDllZGYsIDB4ZjdmZDViOWIsIDB4Y2NkNzlmZjgsIDB4N2Y2NWNlZmYsCisJMHhmODAzNzA5MCwgMHg5OTUzYzZjMCwgMHgwN2M0ZWZlMCwgMHg3OWE2ZTZmZiwgMHhjNmZjY2Y5ZSwgMHhhZDEwYmM4ZSwKKwkweDA0N2Y0MTIzLCAweGUwOWJiNDVmLCAweDJhZjgxMGJjLCAweDhlNWMxMDVhLCAweGQwMzdhYWJkLCAweGE1NDQzYWNkLAorCTB4ZmY0ZjE5ZDgsIDB4MDkxMzdjMzIsIDB4ZjgyZTg0YmUsIDB4OTRhODllMDgsIDB4NTY3MDVkMTEsIDB4MzhlZGRiYmIsCisJMHhhMjM4MmY2NywgMHg2OTRmYzE3MywgMHgxMmYyOTM0MiwgMHgwZGM5ZjNiNCwgMHg0OTNhNWFmZSwgMHhiZjFkN2YxMCwKKwkweDcwY2FlMTY3LCAweDhhNGQwYmM4LCAweDk3YmU4YzI3LCAweGRjZjk1NWVkLCAweDE5MWJkYjJhLCAweDNmMTgxNmMwLAorCTB4ZDJmOWM5YzgsIDB4MTg0MGQ1NDcsIDB4YTNhODI3ZTUsIDB4ZWE5YjMwZmYsIDB4ZjU0N2JlMmYsIDB4ZmIxNDhlZDAsCisJMHgwN2Y2ZGUzNywgMHg4Mzc1ZDYxYiwgMHg4ODFjYTA0ZCwgMHgzNDRiNWMwMywgMHhmZGVjOTZiOCwgMHg4ZDBhNjdlMSwKKwkweDJkZGY3OGIzLCAweGUyY2UzMDA3LCAweDE3MGYxNDA3LCAweGU4ZWRmM2E4LCAweDhhNDNjOTc3LCAweDY3NDA1Nzg4LAorCTB4M2E0NmUzYjYsIDB4Y2U2NGQ4NWIsIDB4MGJhZDEyMmYsIDB4YzFmYzE1NTQsIDB4OWVmMDlkZmMsIDB4OTZmZDQxNWMsCisJMHhkZDczMGVlZiwgMHhhMTAyZjE4ZCwgMHg0YWJjNDJlNSwgMHhmZjY4ZDRmMCwgMHgzYjU4Y2FjZiwgMHhjZmQ1MDBmNywKKwkweDNjNjc2OGRhLCAweGUyMTcwZjljLCAweGI1YWJmNjA4LCAweDBkMjA0MTM1LCAweDFkNjMyNmI2LCAweDZiZjllZmNmLAorCTB4ZTZiMWQ2MzIsIDB4Mjk5NWZmNzcsIDB4Y2ViZjU5YmEsIDB4YWEzN2I0ZmQsIDB4MjE0OGE5ZDcsIDB4YzQ1MTRlYWUsCisJMHhmYmEwYTliNywgMHhiYThhNTM4YiwgMHgyMDFiNmZhOSwgMHg5YjM2YzVmNywgMHhjYTg3OWZiZiwgMHg4YWZjNmMwZiwKKwkweDNkODVjMWY5LCAweDZlYWU4MWJlLCAweGJmNmJiN2U4LCAweDg5MmRjM2ZhLCAweDAyZTE4MzQ4LCAweGQ3MTZmMGU5LAorCTB4MjQyN2Q4MGQsIDB4MzViZTYyMGYsIDB4ZGI0ZjU2OWIsIDB4OTdmMGY5NDQsIDB4NDRiOTM4NmMsIDB4Zjc5Mzg2NGQsCisJMHg0MmM3ZjYwYiwgMHgzZWZhYmY0MywgMHg4MGJlMDZkOSwgMHgwZmU0ODQ3NCwgMHgxY2YyMDFiNiwgMHg3YjlkYWEzZCwKKwkweDRjNzdmNmRiLCAweDllMDZlOGM5LCAweGQ3MWI2ZWEzLCAweDVjMTAwZGIzLCAweGQxNzc1OWVmLCAweDg0NWJkMDVjLAorCTB4YmUwZDFmYzUsIDB4Nzc1ZWJjMmQsIDB4YTJiM2MyMmYsIDB4NWQ0MzU3ZDEsIDB4ODllZjgyYWQsIDB4ZmVkMzg5YTIsCisJMHg0N2QzODVhMiwgMHg1MTM5ZjA4NSwgMHhjMDVjNzg1ZiwgMHg2MjAzMTBiMywgMHhmM2RlM2Y4MSwgMHhjY2JlY2Y4YywKKwkweGFkYWM3ZjM3LCAweGU4MzU3ODIxLCAweDAyMmIxZmM0LCAweGVhZmZlODViLCAweDYzNTA4NzQ2LCAweDQ2YjVlZDIwLAorCTB4Y2U1NDUxYTMsIDB4NTIwNmZiYjQsIDB4ZDUwM2VkYjksIDB4MWRkZTQwYTIsIDB4YzdhN2FmYTAsIDB4YTVmN2ZkODUsCisJMHg3MThjNDY3MywgMHgyZTFmZjZmZCwgMHhhYWZlODg5OSwgMHg4YzIyYTk3NiwgMHhkM2I3M2JmYSwgMHhkNDRlODIyNiwKKwkweDdjMDJmZGE3LCAweDllYzJmZTFjLCAweDU3YjRiZTAyLCAweDZiOTc5MDExLCAweDM1ZWY4ZjI4LCAweDgwZGVhZGEzLAorCTB4YTQ3NzJmMDEsIDB4ZDUwZjE4ZDgsIDB4OWNmMjk5MjksIDB4NGQwZjdhYjYsIDB4YmJjZjdlYTIsIDB4ZWI5MGVjNGEsCisJMHgyNmNiODc2ZCwgMHgyNWIxYmNlMiwgMHhkNzAxZDg5NiwgMHgxZDYzYzNmZSwgMHg1OGI3NTgyOSwgMHhkNTliZWYyYiwKKwkweDhmNzFmNTdiLCAweDU0N2ZkMGI4LCAweDZmMGMwN2VjLCAweDQ0NDViNjYzLCAweGEzYzZiYjUzLCAweGE2NDYwMTYxLAorCTB4MzBhMWYyNDMsIDB4YzE4ZGFmMGQsIDB4Mzc3NzBlZjEsIDB4ZTMxN2UzZWIsIDB4MmEyOGM0OTMsIDB4MDQ0ZWE5ZGYsCisJMHgyNTVjZTc5YywgMHgyZGEzYWMyZSwgMHgwYWVlZTg5NiwgMHg0ZWYzNmY2YSwgMHgwZGZhOWFiYywgMHgwNzhiOGQ4YiwKKwkweGQyNTI2YjdjLCAweDhhYmYzZDc4LCAweGJmMzg2NWFkLCAweGNmYzJmMTIyLCAweDA4YjZiN2ZiLCAweDY1ZmVjNmY5LAorCTB4ZTliZWUzMmEsIDB4MzVjZmRlMjEsIDB4ZDQ3ZTM5MGUsIDB4NTFjZjk1M2UsIDB4ZTM0M2E1NzEsIDB4NGFiYmVmZGIsCisJMHhjOTA1OWM2OSwgMHgwZjQxNDdiZSwgMHhjNDZkZmM5ZCwgMHgzOWZjMDJhYiwgMHhmOTYxNjJjYiwgMHhlNzM1ZjFhYywKKwkweGJkMjFmMDVhLCAweGE0OGE2Y2ZjLCAweDU2M2Q3ZDM3LCAweGMwYmFiMmY1LCAweGU4ZDUxZTNmLCAweGM4YWI5NTczLAorCTB4YTc5ODZmOTEsIDB4YzM0NWI3YWQsIDB4NzgwMzkxNTcsIDB4M2EyZjYxZGEsIDB4OWRhNWYzODQsIDB4M2NkY2UzYmUsCisJMHgwMWNkMzg5MCwgMHg1OWVhODUzZCwgMHg3YWE5Y2ZkMCwgMHhmNDc2MzFkYSwgMHhmYzAxYzMzYiwgMHgzMjU1ZWEyZSwKKwkweDhiMTZlZDAxLCAweDZmZDhkNWRhLCAweDIyYWJkNzhiLCAweDhkYWJlMDY4LCAweGEyZWUzOTM2LCAweDE4MjIxMTRiLAorCTB4MjJlZTM1ZGYsIDB4N2Y2ZTNmNWEsIDB4ZTkwNDVhMjksIDB4OTcwYzZkZGMsIDB4ZTRhMzFhZjUsIDB4NDUyMzc5ZmUsCisJMHhiNTBmOWZlZSwgMHhmOTY5YjRmOSwgMHg3YmFmOTk3ZiwgMHg1Y2ZkN2NjYywgMHg5NmI2MWZlYywgMHg0NmZlZmU0OCwKKwkweGE1NWJmNTBhLCAweGExNDg0ZWI0LCAweGVjNGVhZGY5LCAweGE3YmYwM2IwLCAweDk4MjI1ZGVhLCAweGIyZjc4MDY5LAorCTB4YTA4YmM2NzksIDB4N2FjZWRjNjEsIDB4OWYzYzFjOTcsIDB4MzM3MGY1YWUsIDB4NzVmMzVkZmMsIDB4ZDU0ZTFlMzIsCisJMHg3YjFlMzIyNywgMHg4NGM5M2ZlZSwgMHg1M2ZlYWVjNywgMHhiY2JjNzg0ZCwgMHhmZjFlNGNmZiwgMHg3N2Q2N2Q1NCwKKwkweDg3YjQzZmY0LCAweGY4MjZkZGZlLCAweGU3NGRmYWJiLCAweGRmNmVjNTcxLCAweDNiOTdmMDQwLCAweDk4MGZjNDVkLAorCTB4NTA1Zjg4NmUsIDB4M2RmMTVkYjksIDB4ZGJlNDM1N2UsIDB4ZTQwNGMyOGYsIDB4N2RjMmFmYmUsIDB4ZmUwNjVjODMsCisJMHg2NWNlMGRmMCwgMHg0OTgyZTdkNiwgMHhkMTdlYjdlMCwgMHhlZWNkNjljYywgMHhkZWQwMTM4YiwgMHhmYjAxN2M0ZCwKKwkweDExYWYyZjQ5LCAweGY4MjcwY2VkLCAweDM1ODNlODg1LCAweDdjYjliYWI0LCAweGY0MTA2ZmI3LCAweDRlOGUxZDIyLAorCTB4YTc3NWU2NzksIDB4MjBmYjQyZGYsIDB4YTNkZmRmNmMsIDB4NTgyZjhmYjEsIDB4Mjg3OGE3ZGIsIDB4NDZhYmQ5NmQsCisJMHg3Yzc1ZjcxYSwgMHhiMWE3YTRhYSwgMHg2ZGM4YmUwMywgMHg2OGQ1ZWZhNSwgMHhiNmVmN2M0NywgMHgwMjBlOTc5NywKKwkweGRhYzNhYTdlLCAweDgxZjcwMTczLCAweDhiOTZmZjk3LCAweDdkYWJlNDczLCAweGZiZTIwNzRiLCAweGYyY2ZhYTM2LAorCTB4ZGFiZGJkODcsIDB4NWQyZmU4NjMsIDB4NTE5NmZjYjgsIDB4NTUzM2E5NWQsIDB4ZWZkMGZmZWUsIDB4ZjQzNWY2ZGIsCisJMHg4OWRiMWMwMywgMHgwYjkyMDliZCwgMHgwYTJhZWJhYiwgMHgwZDgzYzY0ZSwgMHhmZjA3ZWY3OSwgMHg1OGI3YzQxMiwKKwkweDVkM2RkYTFmLCAweGVlZjkwMzFkLCAweDI4Nzk5MjQzLCAweDk0OGY3YzNmLCAweDEwMGY4NjFiLCAweGU0MGE0YjAxLAorCTB4ODM2NzBmYmUsIDB4YjA4ZjU0NGYsIDB4NDcwYWEwYmIsIDB4Nzk2MTFkZTQsIDB4YzM4NDYyM2IsIDB4YmZmZDUwYTUsCisJMHhkYmUzOTdmNywgMHhhMWE0MmYyMSwgMHhlODNjNjE3ZCwgMHhmMTY0Y2FmOSwgMHgxYjZkYzllZiwgMHhmMDRmZjY0MiwKKwkweDM0ZWRlYWJkLCAweDNhZGE5NTVlLCAweGZiYzI5YzY1LCAweDdjMTUzZjI4LCAweGRlMmZhZGZiLCAweDA0ZDdmNGQ2LAorCTB4OWMwMWNmYWMsIDB4ZmJjZjA0NmIsIDB4YTk2NTNmNWEsIDB4Y2Y1MDJiYmUsIDB4ZTdiZDY4ZTcsIDB4NzMzN2FhMGEsCisJMHhlODY0ZGY1NiwgMHg3ZTlhYzU0NywgMHg1MjExMjYyNiwgMHg5NDdlNjRhZSwgMHhlNWM4M2IwMywgMHg4M2Q0YjZlNywKKwkweDNlN2M1MjVlLCAweGQ3ZGZjMWUwLCAweDM1ZjljMWUxLCAweGZhMzg0OTM0LCAweDYyNDU1ZTEyLCAweDhkMWE3NTIwLAorCTB4YTJkNTIxM2IsIDB4YzAxNDBmZGIsIDB4ZTM5YjQ0M2QsIDB4OTY1YWZkMzMsIDB4MTkzOWYyYzcsIDB4ZmQxZDAzODgsCisJMHg0YjRlZTNiMywgMHhmYzA2NGVmNSwgMHg2NzBmZmQ3YSwgMHg3NWYxY2JjZCwgMHhmMmU4NmU3MywgMHhiMmRlZGRiYywKKwkweDU3YjY3MDBjLCAweGZjN2Y1OTM5LCAweGVlZDQ0NTAwLCAweDQxNjE1OTg5LCAweDhhN2ExYTM1LCAweGY5ZjQwZDczLAorCTB4MGUwYjkxYTMsIDB4OGM3YzI2ZjYsIDB4NDNjZGYyOGYsIDB4YmM2ZmIzZmYsIDB4Y2FmMjM1N2UsIDB4NzJmNzc4ODEsCisJMHhlYjcxNzNkMCwgMHhjMmVmZDY0OCwgMHhiY2EzMzc3ZCwgMHg5ODFiZTFkMiwgMHgzNzNjNTM0MCwgMHgwNjI4MzdjMCwKKwkweGJjNTE3Yzg3LCAweDk0NTEyNzVjLCAweGZjMmRkNDUzLCAweDQ1NjI5ZTEyLCAweGU1MThkZjhlLCAweGM1M2Y0NzJiLAorCTB4NWQ4ZjIzOTYsIDB4MjNkNjZmODEsIDB4OGQxMDZmNmMsIDB4NzM5ZmI5YmQsIDB4OWRkZTUxNzYsIDB4ZTFlM2FmZmMsCisJMHhmZDhmMzY5OCwgMHgyNWVkNzEzNiwgMHg3NWZlZGY5YSwgMHg4MjA2OWUzMSwgMHgxYmNlZWNiNywgMHhiYTUwZDQxNywKKwkweDEwOTQ1MmQwLCAweGRmNzA0ZDU0LCAweDU3NWQ0YTk2LCAweGY2MDc4YmZhLCAweDljZWU3OTI1LCAweDRlYmI4MzRkLAorCTB4Y2FlYWRiODMsIDB4NTBlN2VlMzQsIDB4Nzk3NDFiYjgsIDB4ZWIwYTE3ZTUsIDB4Zjk0N2ZjODMsIDB4ODFiMWZkMTcsCisJMHg2NjFmMjliYiwgMHg3NGMxZjhiOSwgMHgxNjM5NWI5YywgMHg4ODZjOTNiNiwgMHg3YTQ1YmRhMCwgMHg5YzFhM2JlNCwKKwkweDczYmVkMjhmLCAweDM1ZjdmMWM0LCAweDIxMTg5ZWY4LCAweDY4M2UyN2RiLCAweDUwN2VjMDA5LCAweGFmMGY3NjM0LAorCTB4NGVkNTEzZDMsIDB4MTU2MzRhOGYsIDB4NzIxZGI3MGIsIDB4YjJmMGE5NTAsIDB4MzFkN2ZjZmUsIDB4NGFkN2RiN2YsCisJMHhmNTRlNmFmMywgMHhkZGJjMDdkZCwgMHhmZTQ5NmYxYywgMHgwZGYwZTE4MCwgMHg2Yjc5MGE5ZCwgMHgzZmM3OWNiNCwKKwkweDFlNzkzNzkwLCAweGM2Y2I4NGQzLCAweDZiNTg5OTQyLCAweGNkMzFmYzgxLCAweDUwYjJhNzI1LCAweGJhNjNmYjkxLAorCTB4ZGUzMGRhZjAsIDB4N2FlM2UxNGMsIDB4N2JiNzlkZWYsIDB4MDdiYzRmYTEsIDB4YmVlMDg4NWQsIDB4ZmJmOWY4NTEsCisJMHg3NGUwMTExYywgMHhmZDcyMDg5ZSwgMHhlNzJiNDQ5YiwgMHg3ZDEzN2M3NSwgMHhkMjRiZGNkYywgMHg1NDdkMjdjNywKKwkweGMwNTZmZmM2LCAweGVlNjQ2ZWZkLCAweGM3OWEzYTgwLCAweDY1MDY4N2Q0LCAweGRjZDU3ZWIwLCAweDVkZjNmMTliLAorCTB4ZThkNTRmNzAsIDB4NmZlZmY2ODYsIDB4YmZkODhlYjEsIDB4Njk5ZmE4MzMsIDB4ZGZlYzg0MzcsIDB4ZjVmNWJkZjEsCisJMHhmYjQ3ZjhjYywgMHhhNzQ3NDhlOCwgMHg0YmVjZTRmZSwgMHg1YjRlYjg3OCwgMHg0YmJjZWJkMiwgMHhjMjEyN2Y1OSwKKwkweDhmZDFmMmM1LCAweGE4NWI3ZGI0LCAweDVhMmY0NTNhLCAweGQyNmUyMzlmLCAweDg5OTYwODk3LCAweDYyMjU5NjYzLAorCTB4MTBhZmFmYmUsIDB4M2FkMDE1NmYsIDB4MTU0NjNlYmUsIDB4Y2JkMzVjMGQsIDB4ZmQ2OGE2ZWQsIDB4ZTEzZmU5NGQsCisJMHgwZjViZDgzMywgMHhlMWFmNjA4YiwgMHg5MmYwYWVkNCwgMHg4MjE4ZDVlZiwgMHhiZGJhOGE3YiwgMHgyN2NhOTYzMSwKKwkweGM2YmQyN2Y2LCAweGVmYWVlZmMwLCAweGZkMGFjM2I1LCAweGYzNzQ4NmVlLCAweDY2ZDk0OWY3LCAweDY4YjI2N2ZkLAorCTB4OTRmZTMxNTIsIDB4ZmI3YWU2ZTEsIDB4YjNhMjI3ODEsIDB4ZmVhNTUzZjcsIDB4MjE4ODg2MjIsIDB4MGI3YWYyZGYsCisJMHgxZDNlNzE4YiwgMHgyZmRhMmU5MywgMHg2OTExMWMxMCwgMHgyZWIxOGZiZSwgMHg3NWZmMjdjYiwgMHg1NjE1YzYwMSwKKwkweGI3ZWE5ZjM5LCAweDFkZWJiNjU1LCAweDI4OGI3OTI3LCAweGE3YWM5YzUwLCAweGNhNTMyMjkzLCAweDRhN2ZjODI1LAorCTB4ZDNkMjAzZjIsIDB4Y2Y0ZTZlZjUsIDB4ZjI4Zjc5ZDIsIDB4Y2UxZWY1ZjMsIDB4OWQxNWE0MTcsIDB4NmIyNWJmNDAsCisJMHg3ZDYyYjczZSwgMHhmODk3MGNlZSwgMHg5YTY5NmYyZSwgMHg3NjJhYjAwMCwgMHg1YTQ0MWNiNywgMHg4MDlhMmMxNiwKKwkweGExZDE3NjYzLCAweGVmNDg4M2RhLCAweDZhZGJkNGVjLCAweGUxZDNiZTU5LCAweGQzYTM0NWJlLCAweGZkYTZhMjViLAorCTB4ZTFkNjg3MzAsIDB4ODdhYTNkOTYsIDB4NGRhNjAzZjMsIDB4NzkwYmRjOWYsIDB4YTI3YmU3MWIsIDB4NDQ0YmFhYTMsCisJMHg1NDU3MjQzMywgMHgwMTJmZGVhYiwgMHhkYjZmNzc5NywgMHhkZjlhNzhjMSwgMHgxOGEzZjUyNywgMHhiZGVhY2ZlZSwKKwkweGZhOTlmNzBjLCAweDRhNGU5Yzg5LCAweGU4MWJmYTJiLCAweDY3M2UyYmNjLCAweGY2ZjI2Yzc5LCAweGQ1MTI2YjM2LAorCTB4NWUyYWY0MmYsIDB4YmQ2YmRiZWMsIDB4ZmRhMDEwMjIsIDB4Y2YyNmRlYjcsIDB4MGU3NGY1ODEsIDB4Yzk4ZjFmNjAsCisJMHhhZGU4ZjY5OSwgMHg2N2RhN2MwMiwgMHg2NjcxYTM0YiwgMHgxMGE0YjBkZSwgMHg1NTE5NGNlMywgMHgxYmJkNDU2YywKKwkweDIwMTkyMWJmLCAweGJmNGU4YmE1LCAweGY5ZjVlZThiLCAweDc2ZWI2OTU3LCAweGYxODU2NWVlLCAweDJkMzNiMWQ4LAorCTB4ZjJjMTcyMDYsIDB4OTA3ZDY5NWQsIDB4ZjVkNGJmMTIsIDB4YWRlMDQ4ZGQsIDB4ZTE4NTkyZTMsIDB4YzExYTM4ZWMsCisJMHg2ZWRlODZmYSwgMHhlNjQ4YWVmOSwgMHhkODA3Y2IzYiwgMHhiNzYwYzIwMywgMHgyY2ViNDMzYywgMHg5OWU2ZjIwYywKKwkweDM2ZTI3ZTY3LCAweGUyNjcyYjllLCAweDE4ZmFiZTVhLCAweDkyMmZlZGZjLCAweDczNjQ5MWJmLCAweGJmZjAxMWVhLAorCTB4YTAzY2ZkZmUsIDB4OWM5YWYzOTMsIDB4MjQ0NjdhNGQsIDB4Y2Q2YWJmY2UsIDB4ODRmZTA4YWUsIDB4NjkwODk5ZmMsCisJMHg2Y2Y5MWRjZiwgMHgyZmVjNThkMiwgMHg0ZTFjNDc4YywgMHhmMzJiZmNlOCwgMHg3ZjUyODdkOSwgMHg2ZjFhZWVlZSwKKwkweDhmYzJjYjViLCAweGI5ZmNhMTFmLCAweGEzNmZjNTgwLCAweDY4OWNlOWYzLCAweGYwM2JmZjM5LCAweGI2NGVjZGRmLAorCTB4MTBhOWRkZWIsIDB4Yjc3ZjM4M2MsIDB4OTY3Y2UzZjQsIDB4YzNhODhkNjIsIDB4YmMwMjJiZjksIDB4YjcxNGIzYmYsCisJMHg1NWY4OGViNSwgMHhmNzBmNzNlNSwgMHg0NGJkZmQwMywgMHhlNTQ1MTgzOCwgMHg2NDhiYWQyZiwgMHhjZDkyZjY3ZSwKKwkweGZkMGVhYzczLCAweGZiZmIyYTNkLCAweDNkM2ZiZGNkLCAweDNkZTkxYmJlLCAweGM1M2ZmOTU1LCAweDMxYzVhNGYyLAorCTB4YjU3ZWNiZmUsIDB4ZDNkYTA4NjQsIDB4NTJmYTJlZjksIDB4YThiZjRmN2YsIDB4M2Y2OWMzMDQsIDB4NWZlZjM0ZTcsCisJMHgxYmUwOTdkOSwgMHhkMmNkYTFiNiwgMHhjZGJjZDI4ZiwgMHhhMWQyMDM0YSwgMHgwNDM4NmUwMywgMHg2OTBkZjNiYiwKKwkweGIwNWY2ZTZlLCAweGMyNGQ0NTNkLCAweGY4MTdlYzM2LCAweGVlN2MwN2Y4LCAweGVjODFlNTliLCAweGY2YzdjZmU2LAorCTB4YzE3MjVkMTMsIDB4ZjRlNWE1MTAsIDB4MmMzNTgyNDYsIDB4OGZiZTY4ZjksIDB4ZjNjNGQ3ZjEsIDB4ZmE3N2I1ZDksCisJMHhlNjA0ZjNmYiwgMHhlMDA3MTI0MSwgMHhmODdiYjYyZSwgMHgzN2Y4MGExYywgMHhmOWNmM2Q2MiwgMHhkN2FjM2NiMiwKKwkweDA2MWZmOTE1LCAweDI1ZjM5ZDlkLCAweGJkMmU3MDc4LCAweDU1ZmM3YTQwLCAweGNhY2M3ZmE4LCAweGYzNzE3Y2YzLAorCTB4ZWJiMGQxYmIsIDB4MWM3ZTkwYzQsIDB4NWU0ODdmMGUsIDB4YWZkNDA0ZmIsIDB4N2UxNmUwMWEsIDB4YjFlMDNmNmEsCisJMHgzZjAyMjZlYiwgMHg2ZDc3M2JkNSwgMHgxZDJhN2VlNCwgMHhlNWI5ZTgxZSwgMHg0YzFlMmViYiwgMHhiZDc4OWM4MiwKKwkweDBlODA2NGYwLCAweDJmZmNjYTc3LCAweDJhM2Q3YmM3LCAweGUzN2NiNTRkLCAweGE0N2YzMjk3LCAweGE0NDVmMzg4LAorCTB4YmY1MTVhNzUsIDB4MGY0N2NhNTQsIDB4Njg5ZmU3NjksIDB4YzhmZTY1Y2QsIDB4NWFlZWVkYTQsIDB4MzE1MjVmYWYsCisJMHhmOGE3ZDdjYSwgMHhhZGFlYzJmYiwgMHhkZTc0OWI5ZiwgMHhhYjYxYTU1NSwgMHgyM2ZiNjVkOCwgMHgzMzI1ZTc2MywKKwkweDc5ZTdiZTVlLCAweDJkY2VkNzY3LCAweGVjODdiZmJkLCAweGZkNGUxZmMyLCAweDNiMDM2Y2MwLCAweDNjYmIwNmZhLAorCTB4N2YxMGI3YTcsIDB4ZTdlOGJkMDEsIDB4MGJmYjhkMzQsIDB4ZWY2YTVmZWMsIDB4NTI0ZDNmMDUsIDB4ODQ5ZDljOTUsCisJMHhjMjg3YTQ4ZiwgMHhiZWY4Y2U1OCwgMHg1OThlY2ZlMywgMHgyZWI2ZTdjZCwgMHg0ODQ0ZDU2NywgMHgwNTY3YzgzZSwKKwkweGU1MTg1ZmI1LCAweDViZjMwYmJiLCAweGMyZjM5ZGE4LCAweDFjODZjZWVhLCAweDdiY2EyMzMyLCAweDNhNTdiZTM3LAorCTB4MDczMTkzZGEsIDB4NDVlZjNmM2EsIDB4YjkyNTVhYmUsIDB4NzcyMGNkMmIsIDB4ZDdiZWUzMzksIDB4ZTUxNzU5ZjksCisJMHhiZTdjYzY2ZCwgMHg5MWIxZmQ2ZiwgMHg1MjBjNjcwNCwgMHhhZDIyY2Y1ZCwgMHg5YzdlNWJhMywgMHhmYzA1YmRiYSwKKwkweGM5MzA4MWY4LCAweDk4MGFhMzhmLCAweDBiZjNlOTFmLCAweGRhMTVmZmVkLCAweDMzZTIzZWY3LCAweGUyNzlkMWFmLAorCTB4NzM4ZmRjMjMsIDB4N2FmMmIxOGUsIDB4M2NhOTZhYmUsIDB4YTE3MGU3NDgsIDB4NmM4NDAxMWMsIDB4NzljZTFkOGQsCisJMHg2ZmUxMTQ2ZiwgMHhiZTE1NTNiYywgMHgzZDQ1ZjQ2ZSwgMHgxZTdhZjVhNSwgMHgyYmQwOTlmOCwgMHhiMGFmNTRkMiwKKwkweGZiMWRhYzU3LCAweDViY2VmYmY3LCAweDhkNDdkNmQ1LCAweGJiYTlmOWQwLCAweDM3NzY3MDk3LCAweDViY2YzOTZmLAorCTB4MDFmNDQ3YzIsIDB4ZGYyYWM2NWUsIDB4NWIwZWJlNmYsIDB4YzNhYzQxZDEsIDB4OWYxZTY3MzgsIDB4NTM5Y2UzOGIsCisJMHhjMzA0Zjk4ZiwgMHg0M2RmMTg3ZiwgMHgxZjNhMTllNywgMHhmMjdlZjhlMSwgMHhlMTE1OGZkMiwgMHg3ZGZmNjBiNywKKwkweGRhZmI2NzZlLCAweGQzZWI1YjVlLCAweGVlN2MyNWJmLCAweDgxZWQ5MjVkLCAweGYwMDVlODlkLCAweDY4Y2ZmMDVlLAorCTB4N2JiM2NiM2IsIDB4N2MxZjg0YTMsIDB4ODRkNGVmNjUsIDB4MmY0NWVjMDAsIDB4ZGYwNDRmNDEsIDB4Nzk2NDJkZTgsCisJMHg3N2JmYWNiOCwgMHg3ZjUzOTUwZSwgMHg1ZjY4YzJmZCwgMHgyZjM0NWVjMCwgMHgwNjlmZWI0MiwgMHg3ZDE1ZmI0NiwKKwkweDUyODM3ZGI4LCAweGRhMGU2NmZiLCAweGJlNjQ4OGFmLCAweGY5MjAzNDczLCAweDcwNmM3Mzc4LCAweDliZGY0YTllLAorCTB4YTgxNGNmM2YsIDB4ZDYwNDU0NzcsIDB4ZWRkZWEyYTQsIDB4ZTU0MzVmZDIsIDB4NmZkNDM1NDksIDB4MTIyMTkyZjMsCisJMHhmOTUxZmZjZSwgMHhmM2NlNjhkYywgMHgzMjczOGRmNiwgMHg0Y2ZiNjcxZiwgMHg1ZjZmNTRmMywgMHg2OTdhYWZmOCwKKwkweDUxYmNkNWViLCAweDNkODNmNzk2LCAweDk0MjllNTE0LCAweDliNjNmNGE3LCAweGFiNTczZmFjLCAweDk3NDY5MWY3LAorCTB4MGY5OWNmYjQsIDB4NWE0NGE2ZjgsIDB4ZDJmZGU3NDEsIDB4OTlkMmMyNGIsIDB4YzJmYjc5MjksIDB4NTk0OGYzZWYsCisJMHhlNzI4ZGIwNiwgMHhjMjlmNWM1NiwgMHhjYmQ5YTNmNCwgMHg1YjdjNmI2NiwgMHgxYzBkMGZlZiwgMHhjYjJmMjEyMywKKwkweGI3MGIzOWJmLCAweDY3OWU4Mzg0LCAweDQxYjc4Nzk2LCAweGJlNWEzYmVlLCAweGZiN2EwYTMyLCAweDBjMWE5ZjRjLAorCTB4YTMzOTVjODMsIDB4YWYyOWRiZDAsIDB4YWY1YzYyYTUsIDB4ZDc0Y2I3MWMsIDB4YzBhNTgyZmYsIDB4MGVlZGNiZWIsCisJMHhmN2NiMzc3MSwgMHgzZWEzMDJjMSwgMHg1NTZmYWZhNSwgMHhhMzc4OThjYiwgMHgyNzYxNWNkZSwgMHgyY2YwNDJmZSwKKwkweDlhNmRmNmQxLCAweDdkM2JkN2QzLCAweGViZTlmNDA0LCAweGY0ZmE4ZGUzLCAweGU0MGY2NWE3LCAweGM2ZDJmZWYyLAorCTB4OGRlZjViM2IsIDB4YjkwZTk5M2YsIDB4ZmFhNzIyNmQsIDB4MGY3YTlkNzgsIDB4NTdlNzRkZDYsIDB4MjVkYjk3YTAsCisJMHhmYjZiMDhiZCwgMHhkZjI5OGI0NywgMHgwNzg4N2IzMCwgMHhkMzg5ZWFmNiwgMHgxZDZmNGMxYywgMHgxZjJjZTEyZCwKKwkweGYwOGVjYzM3LCAweGIwZDc2ZWMyLCAweDA2ZWQ4YzJiLCAweDgzZmI2YjM3LCAweDFiYTYyOGY0LCAweGVlMjhiZWZmLAorCTB4ZjMyZWQyYTcsIDB4MzA2NWNmOTUsIDB4MGY2MGJjZGQsIDB4ZTUxNWI5M2MsIDB4N2ZiMzg3MmYsIDB4OGU1YTMyYjYsCisJMHgyNGJiZjk1YiwgMHgyOWJkMmU4ZCwgMHg1ZmIxN2FhYiwgMHgzMmE1ZTk4ZSwgMHhlNWMzMWRjMiwgMHg3YTY3OGZiZiwKKwkweDU3ZGMzNjdhLCAweDdkMTI3YzAwLCAweGQyYmM1ZGIyLCAweDI1OGNjYzFlLCAweGU4ZDMxZmZjLCAweGZiMjM3YTBmLAorCTB4OThhMzZhZjUsIDB4Zjc5Njg1NmUsIDB4ZjU5ZTNjZmQsIDB4Nzk3ZjkyMzgsIDB4NDM3ZGRmM2MsIDB4N2JiM2VmMzksCisJMHgzZWM0MmVmYiwgMHhmMGM5MWU1YSwgMHhmMmM5NzMxYywgMHhiY2IxOTU2MywgMHhiN2RmZTYwZiwgMHhjNWZjMzBmNCwKKwkweGJjZWM4YWM3LCAweDU1ZWQ4ZTVmLCAweDczZmFkZTU5LCAweDlmODQxYTlkLCAweDlhY2ZhNzViLCAweDg2ZGZjNzI1LAorCTB4ZTFiYWE4ZjksIDB4ZDRkZGU0YTMsIDB4NTU5NWZjY2YsIDB4N2U2ZWQwOTMsIDB4NzA1M2VkYzUsIDB4ZjY5YWY2ZGUsCisJMHg0MzY5ZmIyOSwgMHg0YWZjZjNmNywgMHg5N2Q0N2ZiMywgMHhmOThjOWRlZSwgMHg3NjA3NjRkNSwgMHgxZTdlYTQxYywKKwkweDExNmE3MzljLCAweGVlOWZkM2Q2LCAweDNlZjU4NjliLCAweGUxN2Q2ZjZmLCAweGViNzcwNDRmLCAweDVlYjIzZjhhLAorCTB4NmZiNDdkNzQsIDB4ZDg1ZmJlMjYsIDB4NWZhZTFiZjMsIDB4MTZiZmYyYmQsIDB4YjZhZmNlNDEsIDB4Y2ZkMTdhNGEsCisJMHg3ZThkMWFlMywgMHgxZTZmODY0NSwgMHg3Y2FlNTdlYSwgMHhjODgxZjU5ZCwgMHg3ZjkyMjNlYywgMHhmOGZkZmVkZSwKKwkweDViYmRlOWNlLCAweGRkYTg1MDVlLCAweGQ1YmQ4OGQyLCAweDVjODFhYTljLCAweDk0Njc2YjljLCAweDA2OTJiNDYwLAorCTB4ZWQzZDRhN2MsIDB4OGQxODJiYWMsIDB4YTQ1OWYxNzUsIDB4NWI3NGI4OWMsIDB4NGIxODFmODgsIDB4N2ZkOWEwOTEsCisJMHgxNmQyZGRhOCwgMHhmMjQyYmYxOSwgMHgxOWY0MWQ4MiwgMHg3ZDI5N2Y1YSwgMHhmM2RmN2FlNywgMHg5MTY4ODU3YiwKKwkweGRmNzc2M2RmLCAweGY3NWNiNTdiLCAweGZjMzg3MDYwLCAweGIwOWIxOWFlLCAweGZkNzZlN2VlLCAweDc3ZThkMzI2LAorCTB4ODcyZjRkMGQsIDB4YWNmZmNlNTcsIDB4ZWFjZTVmYjYsIDB4YmRiNjY1ZmIsIDB4YjkwMDVlZDMsIDB4N2QzM2ZjZWIsCisJMHhmZTc2NzQ0YywgMHgzZjljYzFjOSwgMHgxMTJiYjRhZCwgMHg1NzdmOTc0YSwgMHg3MjQ2NWE3OCwgMHg2NWI3OGQ3YywKKwkweDA3ZTdlNDI0LCAweGUzNGJlZmI1LCAweGFmODI0NjViLCAweDM4NGU3Y2U5LCAweGZmNTk3MjVhLCAweDg1Yzk2YWNmLAorCTB4NDdmM2FiYmUsIDB4Yzk5MmQ0NTEsIDB4OTkyZDAzZGYsIDB4NDU4MmZmNjgsIDB4OGZmODUzZGEsIDB4M2E3OGE4ZTAsCisJMHhkMmRkZTM2OSwgMHgwY2I3ZTEwZiwgMHgyNmU4N2U0NywgMHgxYTcxZjVlNCwgMHhlOTFmMjVjMiwgMHhhNThmYmU2OSwKKwkweGY5ZTYzYjRiLCAweGJkOWJmNjM5LCAweDdhZDA3ZjU0LCAweDcwN2NhOWJiLCAweDlhZGY5Y2MwLCAweDAzZTdlZDJlLAorCTB4ZmE2ZmUyNDMsIDB4YzNmYmVkYTksIDB4MjEzYzhlNzAsIDB4M2ZkN2Y1YmEsIDB4ZDRmMzhkYTMsIDB4M2M3MTlkNTMsCisJMHgwYWNmYTZhYSwgMHg2ZTFmNGViNywgMHg4MGRiZGYyOSwgMHhmMTNhOGZlZiwgMHhmMTEyNmI3ZCwgMHg2Mzk4YTVlNSwKKwkweDllNWZjZjJhLCAweGZiNDk0ZjY3LCAweGJlNzkwYmNkLCAweGU3MTc5YzI0LCAweGZmODIxNzgxLCAweDY3Y2E1ODg1LAorCTB4Nzg5MmJlNDMsIDB4M2UzYWYzZDUsIDB4ZjJiZmU3NDMsIDB4YjA0OTQ1YTMsIDB4YWU5NDdlZGYsIDB4N2QzY2Y5ZGIsCisJMHhkZTNhOTc0MCwgMHhlZmE0NmMxYSwgMHgyZTNmNDM2NCwgMHg4NTY5MzgyZiwgMHgyYzQ5ZWNkZSwgMHhkYWVjMWFiMywKKwkweGQ4MWNmM2ViLCAweGU0Mzc4YjU3LCAweGQ2NzQ4YzM5LCAweDEwZTBhZGIwLCAweGVjZTIxYzQ5LCAweDIwMDdhYjM2LAorCTB4ZjcwMzU4MzcsIDB4ZDg2ZjdlNDIsIDB4MDVmOGI2YTYsIDB4NTRiYzNiOTcsIDB4YzBmM2FjZmYsIDB4NjhiN2E4ZGIsCisJMHhlNDNlNmM0MywgMHhlMmZkYmQ2ZCwgMHhjYjEyMjNmNSwgMHhkZDBlNzAwYywgMHg5Yzg3NWU2NiwgMHhkODdlNzMxNiwKKwkweDA0ZmU3MzZlLCAweGZmZGU4MGNlLCAweGEwYmNiYjdjLCAweGM4NzA1ZjM5LCAweDgzZTRmZjljLCAweDljODE2NzViLAorCTB4YmRmZjU1Y2IsIDB4M2Y4OWY0MmEsIDB4ZjM4NDM4NGQsIDB4NWUxN2QzZjEsIDB4MmNmYWM2OGMsIDB4NDFkOTRiZmQsCisJMHg3MWExNDllOCwgMHgwYTZlYjQyMiwgMHg1NmZmMDhmNCwgMHhiMmUzZTk4NSwgMHhmODFlOTE3OCwgMHg4MTBmMWU4MSwKKwkweDkzYTQ2MTlkLCAweDY4M2ZlMTBhLCAweGZlYmNiOTRkLCAweGNiMzJkMTE5LCAweDU5NTU3NDRiLCAweDY0ZTBiY2I3LAorCTB4NTdiZjU3NDEsIDB4NDNiM2FjYjYsIDB4YjcxZDBiY2UsIDB4OWMyZmZkYTcsIDB4NmFlYzM3NWUsIDB4ZDk2NGEzYzUsCisJMHhjNTYzNzU1NSwgMHhkNjJkZjgwOSwgMHhmNDAxM2JiZSwgMHg4NTRiZmM1NywgMHhlN2UyOGFlNSwgMHhiZTBhYmQwNywKKwkweGNlNjNiNmRmLCAweDlhY2U5YzBkLCAweGVkZDBmOGM4LCAweDJhZjc4YjdkLCAweGJiY2EyOGMxLCAweDVkYmE0OTQ2LAorCTB4N2Q2MTVlYjgsIDB4MWNkMWE0YmQsIDB4MzZiNjU3NDcsIDB4ZDlhNmRlMjQsIDB4Zjc3OGJlNWMsIDB4OWY4NmZmZmUsCisJMHgxOGYxZGNiZSwgMHgxZTVjMzNjNywgMHgwNTc4MTgyNywgMHhhN2M1NWI3YSwgMHgxNTNkZWQ4MiwgMHgzMzBkYmY5YiwKKwkweDJkNzljYjk3LCAweGJmZTFlN2Q0LCAweGFlZTFlMzk2LCAweGNmM2E1NTkyLCAweGQwYzg5M2I3LCAweDU3NGJmMGY5LAorCTB4ZTEwNjZhNTEsIDB4OGRlNmFhZmQsIDB4YmQ5Yjk0YWEsIDB4NzU5N2VjYzUsIDB4YjBjZTM5ZGEsIDB4OTE4MjIxY2EsCisJMHgyOGExY2YwNCwgMHhkZjQ1ZDdiYiwgMHg2MjhmYWUyZiwgMHgxODUxNjE3OSwgMHg5Y2Y5OWZjOSwgMHg0MzhlNzA4YSwKKwkweGRkYTBjNGY0LCAweDk2NTQ3N2E5LCAweDI1ZTJhYTgzLCAweDU3MWVhYTFlLCAweDU2YzViMDAyLCAweGZjOGE0OGMxLAorCTB4MDRiZjMyMTMsIDB4ZDI1NTI2ZGUsIDB4M2YwMGQ3OGYsIDB4MTc5OGNkZDYsIDB4YWI2ZjUyNGQsIDB4MDNmNzA2YjQsCisJMHhjMGU3OWQyZiwgMHg0YWJkNzMzNiwgMHgzOGQxZTc5YSwgMHhlZmU2NTljOCwgMHhlYjlkYTJkNSwgMHgzNmZlZWNkNywKKwkweDYwZGRmOGNjLCAweDUyN2Q2NWRmLCAweGM4NTU2YmQ3LCAweDdhYTcwNDMzLCAweGIzY2IwNDQ3LCAweDQwMjM5OGM0LAorCTB4ZWYxNGFiNTcsIDB4MjkxNTBlYzMsIDB4ZWZhMGUzOWQsIDB4MmY5NjRlMjUsIDB4ZTc5NDZlZTYsIDB4ODM4YzMzNDcsCisJMHgwZGQ3ODM5MCwgMHhhZTY3Yjk2NiwgMHhiZTA0Y2RlMiwgMHhkNjcwYmFjNCwgMHgxZmRjYTlhNywgMHg2NGU1OGJkZSwKKwkweDRlNDg0Mzk2LCAweDdkYWEzOTY2LCAweDEyZTM5ZDhlLCAweDgyNWFmMzliLCAweDFmOWFjNzkwLCAweDBhZDBmMTQ4LAorCTB4ZjNlNDdmMzIsIDB4OTY3MDllZTgsIDB4NGFhNzlhN2IsIDB4NWQ3OWE3YjksIDB4MzFmZjZlMWYsIDB4MzkwYmViNDAsCisJMHhmOWI5ZTI1YSwgMHhiNzFlMWM5ZSwgMHg4OWRiMmE5ZiwgMHgyMDBmNTIzZSwgMHg3YTEzM2FiOSwgMHg0MWU1YzEwMiwKKwkweDY3NDcyZWI5LCAweGIwNGFmYWM1LCAweDliZmNmYWVlLCAweGUwYTNkYjYzLCAweGYxZTUxMmM3LCAweGQ4NmU0YmRmLAorCTB4ZWQ4NzlkYTIsIDB4ZjAwM2MyZWIsIDB4OGE1NDljNTMsIDB4ZjYwYzVhMGUsIDB4ZTQzMjViYTksIDB4YWM3MjMxZjksCisJMHg4ZjU2YWI3NywgMHg5NjY1MTlmZCwgMHg4MGZmNzdhOSwgMHhkMDdiMjllMCwgMHhlOTQ4NmVlMiwgMHhmNWUxMDc1YSwKKwkweDI3ZmU2MjY2LCAweDgzZTc4NWQ3LCAweDk1OGU0NmVlLCAweDc5NjNhN2Y2LCAweDBlNDc5ZjkyLCAweDczYmYxYzE3LAorCTB4ZWRlZmQ2YmIsIDB4OWE1MzE2MTksIDB4NDhmNDQxMTgsIDB4OTQyYzljZmQsIDB4ZTFhOGVkZjYsIDB4YTQwNzZjNDUsCisJMHhiYmI5YmEzNSwgMHgxOTM1OTAzOCwgMHhiMzJhOWNmMiwgMHg5YWZlZmQxNywgMHhhNGU5ZTA2ZSwgMHhkZTUyZjE4YiwKKwkweGQ5NGNiOTNkLCAweDcyZjJlMTI0LCAweDVmYzhkZmJjLCAweGYwZmRiMzg1LCAweGU4ZGU3NmE0LCAweDM0NzQ0MWViLAorCTB4OGQ3MWNmODIsIDB4ZThkM2FkOWYsIDB4NzRjZjVkNjYsIDB4Yjk4YmEyNjMsIDB4Mzc0MWI3OTAsIDB4ZDhiOWU0NzMsCisJMHhmYWRhNTc0OSwgMHg3YWYwZGQxMiwgMHg0ODVkMTNiNywgMHg2YmUyMTFiYSwgMHg0Yjc0MmZiNCwgMHhkZjQ0M2I3OSwKKwkweDdiYjdkNGVhLCAweDBlODhiN2QwLCAweDZkZThjODllLCAweDA3NDIxN2E4LCAweGYxMTgxYWMyLCAweDI1MmNmYzhmLAorCTB4MmE0NzYyYTMsIDB4NTY0OTA0YjQsIDB4MmNkYzQ3ZTEsIDB4ZDdjNjQ2Y2UsIDB4NGFjMGQ2NWQsIDB4NTViZmE3ODIsCisJMHhhYjAwY2JhZSwgMHg2NTNhM2JhNCwgMHg1Y2Y5MTFmYywgMHhkOWY4OGJkZiwgMHgwYjE3ZmJlMiwgMHg0ZTJmZDUyZiwKKwkweDRhYjc2YzEyLCAweDI2MjZmOTI3LCAweGE0MDlkYjhlLCAweGIwYWEwNzcwLCAweGY2OGE1MGU3LCAweGZmYjIzMWM1LAorCTB4YzQ2ZmEyNjIsIDB4NWU3ZjUxYjMsIDB4ZGNjNjljNGIsIDB4MmE3ZmMyNDYsIDB4ZmI0MDdlNTgsIDB4ZWY2ZTdjZTgsCisJMHg1ZWY2YzhiNywgMHhkMzAzYTUyYiwgMHg1ZjZhM2VlNCwgMHgyYmY4YzYxNSwgMHgyNjQwNzNiZSwgMHg1OGQyNjRlOCwKKwkweDY2MjQ5ZDMzLCAweDRmNDEzOTRhLCAweGJhZGQzMzFiLCAweDdlMDg5MGRjLCAweDk4MzhkMjUwLCAweGYwODY5OWNmLAorCTB4ZDg1ZGFhYTIsIDB4N2Q0OGNmYTcsIDB4NGRmNTc4YTMsIDB4YmUwMDQ3OTMsIDB4ZDgzZGUzNjcsIDB4ZWNhN2E3YzIsCisJMHg0OTRhZmY2MCwgMHg3ZjFmOWNlMywgMHg1YjY1M2QwOCwgMHg5OGRmN2YzOCwgMHg3ODBmN2JlOSwgMHgxN2I4YWQzZiwKKwkweDI1MGZhMmVjLCAweDI3YjE1ZjMzLCAweGNiNWY3YjUyLCAweGEzYmY3M2Q0LCAweGM3N2Y4YTc0LCAweGE2MjM5MGRiLAorCTB4ZmViOTUwY2MsIDB4YjllZDIxMTQsIDB4MzM4ZTUxYTIsIDB4MzViOWZmZDksIDB4M2M5YmZhOTEsIDB4OTRmMGUxNWEsCisJMHhmMjU3NzBiNiwgMHhiNDU1ZjgzMiwgMHhkMWE2M2RmNSwgMHg5OGI4NDM3NywgMHg3MDEzOWNmZCwgMHhjZDRjYzgwZCwKKwkweDI0ODIxZjg2LCAweGU0ZTQ2ZWQ0LCAweGZkNWE5OTAxLCAweGM4MDZjYTMxLCAweGM5YzcwMzQzLCAweDQ3ZDdhN2ZkLAorCTB4MmQzN2U4M2YsIDB4Y2ZiN2VlNTMsIDB4ZTdhNzdkYjQsIDB4YmY1Y2FmMDksIDB4NWI1ODRkNmMsIDB4NWI1MjM0NWEsCisJMHhmM2E1MTA3MCwgMHgwMzllYzZiMiwgMHgyYTk0OTk5ZiwgMHhkZTA3YWMyNiwgMHg0ZDhhYWE3ZiwgMHgzMTdiNmYwYywKKwkweDRjYTg4NWYzLCAweDhmODJmODM3LCAweGZiYTY1OTE0LCAweGVlOTk4MzZkLCAweGI3YjRjNmRiLCAweGI2Zjk0OWRkLAorCTB4N2VkMjM5MmQsIDB4MGJmM2U5YTcsIDB4ODJlNTgyNWQsIDB4ZWY5MjMxYjYsIDB4NjQ4OTZmYjUsIDB4ZDVjYzczZmUsCisJMHhlZDI3MTUxYSwgMHg5N2RmYWM1ZCwgMHhkN2YxMjQ2YSwgMHhlMTdiODZiYSwgMHhkYTc1MmUzNywgMHgyYzdlNzBkYiwKKwkweGZiM2E2MDdjLCAweDQ5OWI0YmZiLCAweGZkNWM0N2JmLCAweDRmN2ViMzVhLCAweDY2NTg3ODdhLCAweGE4N2FmYTM3LAorCTB4MDE5YTBlNWUsIDB4NTVhZDk1MWQsIDB4MzYwNzBlOTgsIDB4OTk3ZGVjNzgsIDB4Y2MyZTI5Y2YsIDB4NGMxOWNjYWYsCisJMHhmMzJmZmYwNywgMHhmMDVjNzM4NCwgMHgzN2ZiN2E2NSwgMHhiMDkxZjc4NCwgMHhiYTBlMGIxZiwgMHhkN2M4M2ExYSwKKwkweDM3MTZlMzBiLCAweDFhN2ViMzE1LCAweGZlNjNlZDk5LCAweGJjMjU1MDM1LCAweGQ0Y2YxZDEwLCAweGVjMTI2ZmU4LAorCTB4ZDY0YmUwYTAsIDB4OTdkOGJlZDYsIDB4ZGY2ODY1YWYsIDB4NGU5OTVjZTMsIDB4YmU3MGViYTYsIDB4NzM2NmQwNmYsCisJMHhiNmJlMDI2NSwgMHg5YzE2ZTE1NSwgMHg0YTU2OTNiNywgMHhlNzdkYTZmYSwgMHhiYjgwYmRjMCwgMHhmYzAyMjJhYywKKwkweDdlZDZiOGUwLCAweGQxNmIwYWZlLCAweDc3ZjdjYTQ2LCAweDFjNTQ2YjA4LCAweGU5OGYyYmU4LCAweGZiZTU5MDNiLAorCTB4ZTlmN2ViMGMsIDB4YzgyOGM0MmYsIDB4ZDc2YmE1MGQsIDB4ZmEzNGI4NDksIDB4ZTMyM2Q2MTAsIDB4NGY5YzY5ZTMsCisJMHhjM2U0YTRiNywgMHg1M2QzYTBhZSwgMHg3NjZjNmIyMCwgMHg1ZDAzMDhlNiwgMHgxZTk4NTBjYywgMHg2MDg3M2U2OCwKKwkweDU1OTc5ZDlmLCAweGZhNzI4ZjkyLCAweDMyZjQxZmJlLCAweDFkMzA2YzY5LCAweDZhODVkODcxLCAweDc2YWJjNzI1LAorCTB4ZTIwZjBhMjQsIDB4M2I0NDNhODcsIDB4MjQxZDIzY2IsIDB4ZWEzZjgwOGYsIDB4MjdlNzQ2N2MsIDB4NDc1ZTE3NDQsCisJMHhlYjdhZDc0MiwgMHgzZDZiNjU3YywgMHhkZTc4NDY4MSwgMHhmNGUwZWY1NiwgMHhiMDk3N2FhOSwgMHg1ZWQ4NGYxMiwKKwkweDY3ZjljODlmLCAweGI2OWNkZGViLCAweGY3ZjE2N2Q0LCAweDljM2RlYWU3LCAweDhhM2Y1OWRmLCAweDdiZDQyZmYzLAorCTB4N2ViYmJmMzksIDB4YWJiZmE3MjIsIDB4ODRlZmUyMmYsIDB4M2E0YmU2MWYsIDB4OTNmOWQxZGYsIDB4OWYzYTVmNGUsCisJMHgwNWFiYTUwYSwgMHgzM2RjNjY4NCwgMHgwZmNjZjZhMCwgMHg3OTg4M2U3NSwgMHhmOGJiZjI1OCwgMHhhOWNlYmU5MywKKwkweDExM2Y5MTRhLCAweGNlYjQ1MGZjLCAweDU0MjhmZjAxLCAweDIyZjMzZWNmLCAweGRjYTNiOWUxLCAweDFkYTFmMWM5LAorCTB4MGVjMWYyNDIsIDB4OGRjZjgzYTcsIDB4MGRkOGJiNjQsIDB4MzJjMzQwZmIsIDB4ODY5ZGRiNmYsIDB4Yjk1ZTc4NzMsCisJMHhiYTA2YWMyMiwgMHg1YzM2YTliZCwgMHg3ZDc0MGQ1OCwgMHgyOWFjNWQ3MywgMHhmZGVlYmYzZiwgMHhmZjUwZmFkNywKKwkweDJkZjE4YjNmLCAweGJiMWNmYWMyLCAweDdmYTNkNGUzLCAweGRmOGZlZmE0LCAweGViMDMzYTcxLCAweDc5NmM3MDRlLAorCTB4MWVkZWUzMDgsIDB4MmFkMWMxYTEsIDB4Y2VkZGJhZTEsIDB4MDhjMGQyZjIsIDB4Y2ZlMTRmYTksIDB4MmQ3Mzg4NjEsCisJMHhmYjdkODk0ZSwgMHgzMWU3MDQzNywgMHhkYTA2MWQ2ZCwgMHhjMTQ2YjM1ZCwgMHg3NTRhYjMyZSwgMHgxZjJhYTRhZCwKKwkweGZiZThiZDYzLCAweDJhZjViNTlmLCAweDdjNjMwYmE5LCAweGZiNmEzNDk2LCAweDRjZmYxOGQ0LCAweDU3ZGUzY2Y4LAorCTB4NzhhNzVjYjAsIDB4ZTkxZjgwODUsIDB4NDFlYzJmZjgsIDB4NzFjNDExOTIsIDB4Njg1MDExYzUsIDB4YWQ5NDg1MWMsCisJMHhhZTE3YjBmOSwgMHhlNDI4ZmQ3OSwgMHgxMGVlYTU3NCwgMHg4NzNlZDVjYiwgMHg4NDI4ZTM5MywgMHhkOGQ2NzZkZiwKKwkweDkwNzc1MjlmLCAweGZlZDY4OWViLCAweGM4YzgzOGE2LCAweGY4M2I1ZWUxLCAweGViMWI2ODA1LCAweDQwNzU5MjU2LAorCTB4MjY4YjlmNjAsIDB4OTRmMWVmODUsIDB4ZDZjYmRmNjksIDB4ZTJmOGE2MjgsIDB4ZTY1NTMzN2IsIDB4YWMzMjg3OGIsCisJMHgxNGNhMGU5YywgMHg4OWE1MTM5YSwgMHg1ZTlkMjljZiwgMHgzYzcwN2Y4OSwgMHg5ZTUzNTk2MywgMHgyZjgxOTE3ZCwKKwkweDRiZGY2ODk3LCAweDc4YTYyY2IzLCAweDMyMTk0M2M3LCAweDk4MTA2YTJlLCAweDY3NzdhNTA1LCAweDMyMTdkYWE1LAorCTB4ZGM3MzczZGYsIDB4MjRiZjVlYmQsIDB4ZWE3NTdmMmIsIDB4ZTg4M2Y0NzAsIDB4OGZmNmFlYTAsIDB4ZGRiOTVhNjQsCisJMHg4NDk3MGNhMSwgMHg1OWU3NDFjNywgMHg3NGU5YzcxNCwgMHg3MmU4MmU3YiwgMHhlZmY4YTdjYywgMHhlYjNmMGM5NSwKKwkweDNlY2YxNTU5LCAweDdiZmMyY2ZkLCAweGUzMGE3ZjE1LCAweDk4NjJhOWYzLCAweDBlYzhkZjY2LCAweGYyY2U5YzhjLAorCTB4OGNhOWQ3OGYsIDB4ZDcyZGZjODQsIDB4N2ZkM2ZjN2YsIDB4NTQ3YzQ2ODksIDB4NTc2OTRlY2QsIDB4NjkwZGI0YTUsCisJMHg2Y2U1ZWRmNSwgMHhkMGY2YWI1NywgMHg5ZjAzODhmZSwgMHg1ZmNkZmIzNSwgMHhkMTRmZjY3ZCwgMHhmODk3YWNhZCwKKwkweDViZjhiNDkzLCAweGRlYWFmNzhlLCAweGMwZTM4Mjc5LCAweGQwYWZiOGY0LCAweDM3Y2EzNTc2LCAweDcxZWFhN2FjLAorCTB4YjYzZmJhMDEsIDB4Zjc4ZDlmNzAsIDB4ODUxZWNkNGQsIDB4NWQ5YTk4ZjUsIDB4ZTdjMDEzMTcsIDB4NGFhZGY2NmEsCisJMHgyNzJlMmVlOCwgMHg1ZTNkNWZiNCwgMHhkNWJmYjc0MCwgMHhjMzlmYjU4OCwgMHhjMzg0NDg3ZiwgMHhmZmFkMGZmOCwKKwkweGFmNTQ2Njc2LCAweDYyMDU0MzUzLCAweDNiNjBhZWQ1LCAweDFjNzA1NTg4LCAweDhlMmQ3MmM3LCAweGMxOTAyM2IzLAorCTB4ZTQ5ZWUxN2UsIDB4YzRmNTlhZWQsIDB4ZWRiZjQ5ZjAsIDB4MTA2M2JhYjAsIDB4ODg0MTdjYWYsIDB4NTNhZGRkODksCisJMHg3ZTc5MjBmYywgMHgwNDdkYTM5ZiwgMHhlZDg1ZjBiZiwgMHgxNzkxY2IyYSwgMHg3ZWYxNDdiNiwgMHhmZjdlZGVhOCwKKwkweDU1ZGJjNDQxLCAweDhkZDg1NjZmLCAweDMwOGUyNTU3LCAweGFhNzdhYWRlLCAweDBmZTA2MWMyLCAweGM1MGJiMDM1LAorCTB4ZDJlNzBjZjcsIDB4NDE2YWEzYTcsIDB4MTQ1YTRiNWYsIDB4YWRmODE2ZWYsIDB4ZGU5OGVlMWQsIDB4MzVkYTc4MDYsCisJMHhkNjFhNWFmYSwgMHg0NWQ3OTIzMiwgMHhmODE0ZmY4MywgMHg1Y2NlNDE5YSwgMHg4ZTdlZjdiMiwgMHhlNzdhYTQxMywKKwkweDZkZjlhZTU5LCAweDUxYjNjNzI0LCAweGNlMDM2ZjBmLCAweGQ4MGExYjMzLCAweDY1YTRiZDRmLCAweDA1Y2IzNTQ3LAorCTB4MTA1ZDIzZGIsIDB4Y2NkYjRlNjksIDB4ZDFiZTI5ZjcsIDB4OTM0NmZiYzYsIDB4NGZjMGNlZDMsIDB4YWFjZmY2ODIsCisJMHg0ZTAzMGYyYywgMHg1YWQzY2JlYywgMHhjZWRlYWIzYywgMHhiM2I2NDgzMiwgMHgwZGZiNzg2OCwgMHhhZTg4ZTdmNiwKKwkweGRhNWE0YmZhLCAweGZlYTlkM2EyLCAweGU3ZGZiYjI3LCAweGVlNDgzOWQ0LCAweDIzY2UyNWUzLCAweDNmNDczOGI5LAorCTB4ZjdjOTE5ZDksIDB4ZjlkOTNlZWQsIDB4ZDEyZjA5ZWIsIDB4YzY1YWU3NzgsIDB4ZmIwYzUyZjQsIDB4MWIyMGUwNmMsCisJMHg0MWI3M2ZkNywgMHgyNWYzMDFjNiwgMHg1YTBmZDYxMSwgMHhiNjY3M2U3OCwgMHgyN2FjMjkyNywgMHg5Zjg0ZGYwMywKKwkweDhmOWYzYjMzLCAweGY2M2VmMGI2LCAweGFiNzE3YmZmLCAweGM4NmIxNWIzLCAweGIyZWI4NDdkLCAweDViZmU4MDQ3LAorCTB4ZWQxMWZiYjUsIDB4N2ZlNWZkOWEsIDB4ZWQ2YWZmYTcsIDB4YTQ1MjliN2IsIDB4M2JlZjIzOGQsIDB4YzIwZTNkMDgsCisJMHhkNTNiZWRhNSwgMHg3OTZlZmJjOSwgMHgyZmVmOWQ5NCwgMHhiZWU2MTgyYywgMHhlOGY4MWU3MSwgMHg1MThlMzI5YiwKKwkweDA0M2Y3N2Y0LCAweDNiYzE2ZmZkLCAweDU5NmY2Y2YxLCAweDQxZjc3MzZlLCAweDM2YzM4YmZlLCAweDI4MmMxM2Y2LAorCTB4YTFmNTFjZjAsIDB4ZWQ5ZDhjN2UsIDB4NzViMTIyNGEsIDB4NmRhZGVjMDQsIDB4YThiZTUyMjksIDB4OTMzYjQzNWMsCisJMHhlODhmZGM1MCwgMHhhY2Y4NGZjZCwgMHg4Zjg0NTgwYywgMHhhNTA3OTNmMiwgMHg1MjNlYmFmMiwgMHhkOWRhZjE2ZSwKKwkweGZiZTQxM2ZmLCAweGMyZWNjNzkyLCAweGZlMmY3YjhmLCAweDVkN2VhNGU3LCAweDBlZmQyYTk5LCAweDUxN2Y2MDhmLAorCTB4Y2MxNzE5NWEsIDB4NGVkZDg3OGMsIDB4NjljYTliYTMsIDB4OWZhMDZlNTQsIDB4NGNjMTRkY2EsIDB4ZWQ2NzRmYzgsCisJMHg3Mjg5MWVkMiwgMHhmOTk1NGRlOCwgMHg0NjgzNWViMiwgMHhmZDA3ZThhNywgMHhjZWI4YTViNiwgMHgyYmJiYmNiMywKKwkweGIwZWY0MDRhLCAweGVkMjUxOGJjLCAweGRmMDliZjIxLCAweGFmMzg2NjE0LCAweGU5MjQxYTZmLCAweDA3ZjM0MWI4LAorCTB4Zjg0OGI3ZmEsIDB4ZjhlNDE3MDAsIDB4NGNhNmY2MjUsIDB4YjhmYWI5YzgsIDB4Nzg5YmEyNGIsIDB4NzhkYWIzYmMsCisJMHhhNDlhMjI0YiwgMHhjNzhiNDRmZiwgMHhkZjFlN2Q0MywgMHhkM2JmZDgyNiwgMHhjYjE4NjRmZSwgMHgxZWZiYTdjYiwKKwkweDlmZTMwMTc5LCAweGM3MzA3MjdlLCAweDA0YTViNDExLCAweGYyZTZlZDE2LCAweGFlZTM4ZTcwLCAweDA4MmMyYTc4LAorCTB4MzI3YjNmNzgsIDB4OWY1OGVkOGEsIDB4ZjYxY2E0ZDksIDB4Y2IwMjU0NTksIDB4MWVhMjg3NjEsIDB4M2FmZTgwNWMsCisJMHhlMDI5ODczNiwgMHhjMjI5OWZhMywgMHgyZGYyODg5ZSwgMHhhODBlNTliZCwgMHgzZjYzYWZhOCwgMHgxN2IxMDU0OSwKKwkweDRlOTRhZmM4LCAweGQ5ZjdkYzg0LCAweDI3NmNjMTk2LCAweDk1MGRlY2ZhLCAweGY3ZDAyOTJmLCAweDEzZWVmODM1LAorCTB4YzY3ZTBiNGQsIDB4M2ZmNGJmZjIsIDB4NmZlYTdlOWUsIDB4YWZmM2JiODMsIDB4ZGIzNjZjNTQsIDB4ZDdmNWY0YzMsCisJMHgyNDE4ZWZjYiwgMHgwYzc3MDNlZCwgMHhjYWM5N2E5MiwgMHg3ZmU5MmU0MSwgMHgzMDc5NmM4YiwgMHhmOTI5ZTc5NSwKKwkweGViMDNhZDAzLCAweDEzMWZiNDdmLCAweGQ2M2Y2ZjYwLCAweDcxNDEyN2IyLCAweGNjYzFjZjAyLCAweGRiZWYwMzVmLAorCTB4N2E3NTllYTQsIDB4NDJmZDhkYmIsIDB4Nzk0NjJmMTUsIDB4ZTc3NGZlZDksIDB4YjBlZjdjMTUsIDB4Nzg3Mjk1NDIsCisJMHhkYmRlNDU4NSwgMHg5OWVlZDBhYiwgMHhiMjY3NDQ1NiwgMHhjZGYwOGI3ZCwgMHgxNmZiNmQ3YSwgMHg4ZTQ3MWI1NSwKKwkweDAxZDZkOWZiLCAweGQ0MTA5ZmQyLCAweGYwZTQyZmYyLCAweDcxNDliODNkLCAweDJjNjllNmUyLCAweDA1Yzg2ZDVmLAorCTB4OGU2ZTJmNWUsIDB4MWE3OWY4ZTQsIDB4ODdiODhiYzcsIDB4NWNmZDlmOGEsIDB4MTE2NjMzZTIsIDB4YWU3NDA3ZWIsCisJMHhkNGFlN2YzMSwgMHg5ZGQ1NzNmOCwgMHg1ZWUwYzc1NywgMHhlNTQ3Nzg4MSwgMHhhZDE3MTJmYiwgMHhiZmUwM2U5ZSwKKwkweDRmN2FmOGExLCAweDVmNGI2M2UzLCAweDQxZjk5NDc4LCAweGM0MTdlZDI1LCAweGZjZDUyZDU5LCAweDUyOWY0YmNiLAorCTB4YmE1YzllNTgsIDB4OTg4N2VhZmEsIDB4MTM2ZGJlZWYsIDB4YjY3MDVmYjgsIDB4ZTM2OGZlZTUsIDB4ZjhkNWVjN2EsCisJMHgwZjdiNTc2NywgMHhmNTRhNWZkNywgMHhhMzM3ZmI2NSwgMHgzNmFkOWUxOSwgMHg1ZDA5ZTAwZiwgMHhmZWRkZWZjNywKKwkweDZhNWZmNTI5LCAweGYyNDJkMTVmLCAweGYzZTVlZTQ1LCAweGRjOGUyOGJmLCAweDk1ZjAyN2Y2LCAweDY3NmNlMWVkLAorCTB4N2JlN2Y1YTMsIDB4MmQ2YzY3NDYsIDB4MzNmZjMwOGIsIDB4YmYzMzg0Y2YsIDB4ZjcyYjEzMzksIDB4OWU3NDI3ZmQsCisJMHhlNzgwZWRmYSwgMHg1ZGIxZjc4NywgMHgwMmU5YmRlZCwgMHg4MGUyZDBlNywgMHhhZTFkNWZiOSwgMHhhZmRmMWFmZCwKKwkweGMwYzRmNzhhLCAweGViNDU1MzRmLCAweDdkNjhmZTgxLCAweGRmZWRjNDdlLCAweGQwZmI3MWIxLCAweDc2OGUzY2Y5LAorCTB4ZjRmYjBjMjMsIDB4OWJhNjQ4OTksIDB4YmFlNGZkMzMsIDB4MTA3Njc5OWMsIDB4YjE2ZDY3OWYsIDB4ZGUwOWRlOTIsCisJMHg2NzRiZTg2NCwgMHgxYjhhNjU2MiwgMHgwYTg3YTAzZSwgMHgzMzg3YTQ5NywgMHgxZWQ4NWE2MywgMHhjMWQ5NDY3MCwKKwkweGI2NGQ5YjY5LCAweGZjZDNhOGFiLCAweDg5N2Y0NGRhLCAweDI2ZDAxZmEwLCAweGI1OGVhOWVjLCAweDgwYzcyMDQ3LAorCTB4ZTdjYzhmY2YsIDB4Y2VmYjg4MzQsIDB4ZDA3Mzc2YTEsIDB4YmViZmNlMjksIDB4ODRkY2YyNTksIDB4Y2YzZTA1NzgsCisJMHhlM2Y2MWI3ZSwgMHg3MzNkZjBiNCwgMHg1NjRmMjY5ZiwgMHg0ZmRjYmY2ZSwgMHhkY2FhNzU4OCwgMHhlYjNmYjBhZSwKKwkweDAyZmU3NjkyLCAweGRkYmE1ZWVhLCAweGE5NzJlODlmLCAweDZlMjJmMTVmLCAweGIyZTM2OTZiLCAweGE1ZmJhMDI1LAorCTB4ODFlNmViYjUsIDB4MmM3OWY1ZWUsIDB4Yjc1ZmVlZDUsIDB4ZDNjMzJhMjksIDB4MjdmYjRlMTYsIDB4NzRmMWYyZmIsCisJMHg4YTU5YWFmYywgMHg1YzI3OWYxZSwgMHg3YjQ1ZjlmYSwgMHgyZGNiMmMzOCwgMHg0ZGIyODhlOSwgMHhhMzY1NWZkNCwKKwkweDQ5Yzc5NmIyLCAweDM5NWJmNWQxLCAweGI4NGYxZDNmLCAweDVlZmIwMmNkLCAweGI5ZGY3NjliLCAweDcwZWJmOWE3LAorCTB4NTI0ZjA0ZjYsIDB4NmQ0ZmU0OTYsIDB4NmY5ZWYyMjksIDB4YmVmMjViZmIsIDB4MGE2ZmM1ZjYsIDB4ODFmZWUyNjIsCisJMHhmYTkxYzgzYywgMHg3ZjA0N2Y3YSwgMHg3MjEwNjgxNiwgMHg5NmU3YzY4ZiwgMHg3MDRlYWVjMiwgMHhmYjMwNmU2NiwKKwkweDliMzZiMjczLCAweDliYjY0M2YzLCAweGNkM2JkOWYzLCAweGU2YmRkY2Y5LCAweDczNTVlN2JjLCAweDdiNzE4NWRlLAorCTB4ZmEwOWUxNzcsIDB4YTEwM2UyMzYsIDB4YmU4NTIzNmYsIDB4ZmE5NGNlZWQsIDB4YjdkMGYyMzYsIDB4YzZkZjQyOTEsCisJMHhjOGRiZTg3NywgMHgxZTQ2ZGY0MywgMHhkMGYyMzZmYSwgMHhkZjQyOTFiNywgMHgxYTM5ZjdjNiwgMHg3YjM1MmE5ZSwKKwkweGUzODFkNjI5LCAweGViODRmNmQ0LCAweDVmYmMwMGYxLCAweDYwNDljYzJlLCAweDUyYWMyYTNlLCAweDI0YjBiZDFmLAorCTB4NGVjN2U1OWIsIDB4MDc1NGQzM2IsIDB4MzhmNDk5ZGIsIDB4N2NhMmI3YTcsIDB4YzM3YWIyZTMsIDB4NzU2NDdiN2YsCisJMHhjNzZlMTRkZiwgMHhkZjlhZTdmNiwgMHg2NTczZmI0OSwgMHhmNjEzYjg3ZSwgMHg5ZjU1ZDY4ZSwgMHgxM2Q4ODZhYywKKwkweDQ0NGRmMjg4LCAweGY2YjYwYmZkLCAweDU1NmZjMGFkLCAweDZmZWMyYmRkLCAweDdlZTE1ZDZmLCAweGZkNzIwN2U3LAorCTB4YzdhMmVlZDgsIDB4ZGNlMzE1MmQsIDB4N2QyNmRmMDMsIDB4N2I2ZmM2NDksIDB4NmEzYjQ2MWMsIDB4YWM0ODVmYTgsCisJMHgzZjIxZTQzNSwgMHhhMWYzOWIzNSwgMHgzNWYwMjA3ZSwgMHgzNTVmNjlhZiwgMHg2ZTNjMWQzMSwgMHhiZTBiZWY2YiwKKwkweDA3NDllMjdmLCAweGExM2FmM2RmLCAweDZjYzRlZGQ5LCAweGJhNjNjYjE3LCAweDhmMjlkZjNjLCAweGMyNmNhM2RkLAorCTB4MmIyNGJkZjksIDB4MWM3N2RiOGUsIDB4ZDNkZDMwY2EsIDB4MmY0YjRkMGIsIDB4ZGFiY2IzZTUsIDB4NThhYjVmOTksCisJMHg4Y2Q5NGUzMCwgMHhhZjU5ZmIxNSwgMHg3M2U2OGM0ZSwgMHhiNjBkMTZlOSwgMHgwZGZmOTA0MSwgMHg0NDBlMGY3MCwKKwkweGU4NjhlODk4LCAweGJmMTBiOGI2LCAweGZkNTMzZjY1LCAweDQzNTNiYjYxLCAweDRjNDM5NmZjLCAweDE2ZDdkM2U1LAorCTB4MTdiNWVmOTgsIDB4MWYyYTZkNWQsIDB4ODc4Y2VmNjgsIDB4OTZmZjQ4NzMsIDB4ZDY0YjlmMDYsIDB4ZTdjY2U4YjksCisJMHg0YmQ2ODZmOSwgMHg4NDdmM2M1NiwgMHgyNWJjNTZiZiwgMHg5YTMyZDNlNSwgMHg3YjQwYjc4NywgMHhmZTFmMjM5ZiwKKwkweGUwMTRlZjM5LCAweDE2YzViY2FmLCAweDU0YmVmMzhiLCAweDlkNDQ4NzNiLCAweGI3MmU1Y2Y5LCAweGFlMmJiZjBhLAorCTB4NWRjYWVlOGIsIDB4ZWQ0YjFiYzIsIDB4MjUzNmI0YmYsIDB4NzFkZDFkMzMsIDB4MTQyNTU5MzQsIDB4MjQ3MjE5MmQsCisJMHhlNTdkMDgzNywgMHg4MjQ2Mjc4ZCwgMHg4ZGQ0YWFhZSwgMHhiZjJhMmVjOSwgMHhjNTZjMDk1NSwgMHg3MWQzZWM0NSwKKwkweGE0YWUxMjNiLCAweGY4YjRmZmYyLCAweDc1YTJjOTFlLCAweGVmMDViNjRhLCAweGJhM2UwZjlkLCAweGJkZTA0ZDIzLAorCTB4OWY2YjEzOTEsIDB4M2NiOGU2OGYsIDB4NmQ5MmZlOGQsIDB4YzFkMDA4YWUsIDB4ZjU5NTI2YzYsIDB4ZDRjZGQ4MTQsCisJMHhkOTNhMmViOCwgMHgwMTFmMTRkOCwgMHg4YzdjYTZiZCwgMHg3MTcyOTdlMiwgMHgwYmRmNDliNCwgMHg5YWExNDdjNSwKKwkweGU2OWI4ZWZkLCAweDJhOTBmMTdiLCAweGYzNmE0MGVmLCAweGY1OTJlZTVjLCAweGFmNmNiYTQ1LCAweGU3ZDdiM2RmLAorCTB4NDdkMzUyN2IsIDB4OTZiZTM2MmIsIDB4M2Y3ZDBiNzksIDB4MmU3Zjc4M2IsIDB4ZDY1Nzg0YWUsIDB4MmY3OWU2ZWYsCisJMHhkYWRmNmNiNSwgMHgxZDdiZDI5NywgMHhkNzk4NWRiZSwgMHg0NWM2YjdmMiwgMHg3Y2UzNDk1ZiwgMHg4N2M2NWRiOSwKKwkweDg5ZjliNWZmLCAweDRmYzRmY2M3LCAweGMyN2E2Y2VmLCAweDg1NDFmYjBlLCAweDFlODc2MDM1LCAweDQ2ZTRmZTVjLAorCTB4YWUxOGUyM2IsIDB4YmY5MWI2ZGIsIDB4Y2M1NmRhMmYsIDB4YmVmZDAwZjYsIDB4N2M3YWE3ZGEsIDB4ZjI4Zjg2YjMsCisJMHgxNzA2Y2FiMSwgMHg2MGZmYjNjZCwgMHgyM2NhNGZjOSwgMHhhMTRiMWM2NCwgMHhkYzM1ZmEzYSwgMHg0ZGI4YjgxMywKKwkweDY2YmNjM2M5LCAweGUzYjBlZDE0LCAweDFhM2JmZjFlLCAweDM3ZGQwOWRmLCAweDE3YTc4NzFkLCAweGFiYmQ4NmY2LAorCTB4ZGYyMGYxNDUsIDB4ODk5OTNlZDMsIDB4MGY0NDcyY2IsIDB4MzliOTJmZDMsIDB4MDg2OTcxOWQsIDB4MGExZmQ1ZWIsCisJMHg4ZTcwYmVkMiwgMHhkN2U4ODc2NCwgMHhjZjY5NTU4NywgMHhhZDEyM2M0MywgMHhkODNkYjk3MywgMHg4NWU0M2E2YiwKKwkweDBmZmJlNTk3LCAweDhkMGU3NDU1LCAweDJlZGU4N2NhLCAweDE2OTQ1NWM0LCAweDc0NGQ1NjhkLCAweGQyM2UzMzVlLAorCTB4MGI2NjBmYjQsIDB4ZmVhMmJlYzMsIDB4YTY3ZTg5NjYsIDB4Njk0OThjZmMsIDB4Y2UzN2ZhYTYsIDB4NjdlMjFhMTgsCisJMHg2NzJhZWZjZSwgMHhlOTk1NzVmZSwgMHhkYmFhOTc1ZCwgMHhlMzg1NmVmZCwgMHhiZjlhYzY3YiwgMHhkMzNiN2E1MywKKwkweGY2YTYwZGQ5LCAweGU5OWE2MjU1LCAweDliMjU5NzVkLCAweDEzM2M2NWRmLCAweDhmYTFkOTk1LCAweDQxZjc2Yjk1LAorCTB4YjRkYWZiNjYsIDB4OWRmY2FkZWYsIDB4YWZkYTYyMjYsIDB4N2YzY2QzMDMsIDB4OGRhNWU3OTQsIDB4MWRiYTA4ZmQsCisJMHg5ZmZlMzY3ZCwgMHgxOTc5ZGRkNiwgMHg4OThmMTlkMSwgMHgzYmQ4NWJmOCwgMHhlNDc5NjY3YywgMHg0MmE5ZWIwOCwKKwkweDY2OTU0M2FlLCAweDkyY2FhYThmLCAweGZmMmFhOGY2LCAweDliZTIzYjExLCAweDI0ZDZmZjA5LCAweDkzNzU0OTQyLAorCTB4YWE0NmY2YzIsIDB4OTM4YTQ4ZWYsIDB4N2RmMWRiZjksIDB4MDc1ZWY5YTcsIDB4ZjI4NGJiZmEsIDB4ZjYzMTZhNDMsCisJMHgzNTc5Njg1NywgMHg0MmU3MWJjZCwgMHhiMDQ3ZWMzNSwgMHg2YmZkZTk4MywgMHgxOWY0ZWFmZCwgMHhiNDNlY2Y3YSwKKwkweDM3NjBkZjFmLCAweDZkOGFlN2VmLCAweDIzZjYwZTNiLCAweDhhMmY0Y2JjLCAweDQ5N2M0M2NkLCAweDViNTRjYjY1LAorCTB4NzRlNWY2NzEsIDB4OGJmZGYzYTYsIDB4N2ZiNjE2ZTUsIDB4ODU3ZTFjNzUsIDB4ZGNhM2FjZTksIDB4ZGRmMTkxZWEsCisJMHhkNTFmMThmZiwgMHgwZDZmNjk1ZSwgMHgzNDQ1YmZhNSwgMHgxNzk5ZjgxZiwgMHgwMTNjNTRlZCwgMHg1ZTAzZDY0NSwKKwkweDQzMmU4MWZhLCAweDBkZDQ5MmYwLCAweDc1M2M3NGJlLCAweDdjYTQyZGUyLCAweDFjMzNmZTMxLCAweDAwNGExMWYxLAorCTB4YmMzMmYyN2MsIDB4ZmFkNDc4ZTgsIDB4MmMxM2U0NWYsIDB4MDEzYzEyNjcsIDB4M2ZhNDI3ODYsIDB4ZmY3NDJhMzEsCisJMHgyMGVmYzJkZCwgMHg4NDUwNmM3NCwgMHgzYzZlZjk0YiwgMHhlZDI0YmI0YywgMHhlNGQzMDMzNiwgMHgyOTc3ZGJiYywKKwkweGIzZWJjODFlLCAweDdiZjk1OTJlLCAweGM5MTRiZDI3LCAweDkzMTlmNTM4LCAweDkzYjNmYmNjLCAweDdlZTQ4YTdlLAorCTB4ODEyOTc5OTksIDB4ZDM2ZmZkZGIsIDB4OGZkMTc3ZDEsIDB4OGQwOTlmZWUsIDB4NWRlZmQ2ZmYsIDB4ZGRhYzFhMmQsCisJMHg0NjIxMWE0YiwgMHhjNDRmZmI3YywgMHg0MDcyZWJhZiwgMHhlNzQ5ZTc0ZiwgMHhmMGQyZTM3OSwgMHhmNmVkNGNlZiwKKwkweDk1MWU1ZTFjLCAweDNlZGFmMWNhLCAweGYzYTg4ZWNkLCAweDRlZDY5ZjYzLCAweGNhOThiNzFmLCAweGVmYTAwNWRkLAorCTB4MTdiMDA5ZmUsIDB4NGI0YzZlYWYsIDB4ZTMxN2JlMzYsIDB4M2I2MzY1NWIsIDB4Nzg4YWYyNmYsIDB4NWRjMzhiNGUsCisJMHg4YTQ3MzgwOSwgMHg0ZDc3Yzg1NywgMHgyN2Q1ZGY4ZSwgMHhlMzg4ZmUwMSwgMHgyNmJkNmNhYiwgMHg3ZmM3ZDc1MSwKKwkweGU0NTkzYzNhLCAweGU5Yzg1ZjIwLCAweGIzNjE3NTg5LCAweDNkNzg3NjhkLCAweGVkMmMxYTZkLCAweDdlMzlmYTM1LAorCTB4N2EzODcyY2UsIDB4YWFkZmY2MzYsIDB4MDUwOGQxNWQsIDB4ZmRlYWJhNWEsIDB4Y2YzYTJlOTEsIDB4OGY3YzU5NTcsCisJMHhlZjdmNjYwZiwgMHg4NWNmM2U0NiwgMHhlYzJlNjM2YiwgMHg1MTNjYmE3MCwgMHgwZmIwYWFiMSwgMHhmZmNhZmRjZSwKKwkweDljMzFlNTc5LCAweGI2MTViZWZiLCAweDlmYTNjODA0LCAweDg0MGFhMDdkLCAweGM2NzlkMGNlLCAweGUxYTdjNDcyLAorCTB4ZGQzZmFlOTIsIDB4MTBmN2M5MTIsIDB4MTc4NDU1M2YsIDB4ZWEyNWE2ZmUsIDB4ZTk5NzVjZmUsIDB4MGIzYmRkNWMsCisJMHg0MWRlZmZlMywgMHhiOGMwOGVlMywgMHgxODg5YWQ4MSwgMHhjNGNmZTNkNywgMHgxOTE1YmViOCwgMHg1N2Q5ZGQzMSwKKwkweGJkNjZiNGY0LCAweGVhYjZmMzk0LCAweGVlY2Q2NGY2LCAweDc5MWVmOTBjLCAweDYyNzBmN2M4LCAweDFlNDdiZTQxLAorCTB4Yzg1MjNkZjIsIDB4NGRiZWY4ZjcsIDB4NmMwYzJmZjMsIDB4N2U4M2NmNjgsIDB4YjIyYjFmZWEsIDB4NzViY2Y5NmEsCisJMHhiZjdlNDE2NiwgMHg4MGYwODk0NSwgMHg3OGEyZGNmZiwgMHhjMWJjNzBmYSwgMHhjNGRlZjk2NiwgMHhkNTc1OTBmMiwKKwkweDQ5ZGE2YmQzLCAweGVkZDAzMzA2LCAweDg0MzkyZTBmLCAweDhjNmU2ZTMxLCAweGM3ZTUzNTg4LCAweGVhOWFmYTM5LAorCTB4NGM1MmJhMTcsIDB4MGUyNWQ3ZTUsIDB4ZWY1Zjk1MzYsIDB4N2ZlNTMzY2UsIDB4YTlhNTc1OTgsIDB4MThjZjY0ZmUsCisJMHhhMzQ3ZmU1MywgMHg5ZmQ1MzdhZSwgMHhjYTZhOWRlYSwgMHhjNzM4OWY0ZiwgMHg1MTY2N2Y1NCwgMHhjNmZjYTliMSwKKwkweGU1NGM0YmQ5LCAweDRjY2I3YzczLCAweDNmZTU3OWY5LCAweGE5YmZkNTM1LCAweGRjYTk4NTc2LCAweDljNTY1YzJiLAorCTB4NzdhMTdiNzcsIDB4ODY1ZmRlMTEsIDB4MmRlOTQ1ZGUsIDB4OGQzODY1NmYsIDB4OWM3YTNhZWIsIDB4Nzk3N2RiYTUsCisJMHg1MDcyNjk0ZSwgMHgzNmRlYTFiZiwgMHhkN2VlMjVkMCwgMHg2ODA3MGU4MCwgMHhjMGJlNjdmNywgMHg3ZTFiZDJiOSwKKwkweGY1MjJhMGM5LCAweDQxN2QyM2RlLCAweDQyZjVhMTM3LCAweDFlNDc0N2NiLCAweDM1YTZlOGI4LCAweDdhMmE3YTJjLAorCTB4YzRmODk1YTYsIDB4MTQwZTJiZTgsIDB4ZjU3ZTUxYTQsIDB4YWQzMzg1NTMsIDB4NWY0NjVmYzQsIDB4NTRmOWUwN2QsCisJMHhiNTNkMzdjYSwgMHgzYjBmOTY0YSwgMHg1MWU1MTE3MCwgMHhmMzIwZGY0ZiwgMHgxYThiMDVkMywgMHg3YWY5MGM4ZiwKKwkweDMxZTY5Zjg2LCAweDZiYTkwN2ZhLCAweGQyNmVkMjNkLCAweGE3NjliYzZkLCAweDgwZjA4ODNkLCAweDAxZTA0ZDc4LAorCTB4MTNlODkwNjksIDB4NGZhMjAxZTksIDB4N2QxMmFmYTQsIDB4NzEwYmE1OTYsIDB4ZTkxM2U4OTAsIDB4ZjEzZmQyMjEsCisJMHg3ZmE0ZjdmZCwgMHhmYTRjM2QyMiwgMHg0OWI3ZDIyNywgMHg4NDdhNDRmZiwgMHhlZmE0NGZmNCwgMHhmNGU2Y2ZkNSwKKwkweGI3MWY3YTgzLCAweDM5N2Q0M2ZiLCAweDZiZWI0N2E3LCAweGY1YzdmYmY5LCAweGI5ZmU5Yzc1LCAweDVkZGZjZmRlLAorCTB4NDMzYjc0NDMsIDB4YmEzMWVkOTAsIDB4N2UxYWFiZmYsIDB4NzZlZGQ4NDcsIDB4ZmQxYWNlZGIsIDB4OWU1NzhhYzIsCisJMHhiMmJmYmFhNywgMHg0NmI0NTZhMSwgMHg1YWI2OWY2MiwgMHhiYTM5NGY2MywgMHhmMzNkOTBmYywgMHg2NTM4YWI1YiwKKwkweDBmNWViZjkwLCAweGUxMGQyNmY3LCAweDk4YmJmYmYxLCAweDhmZGY2YjZmLCAweGYyMDNlOTg5LCAweDUyMGE5ZDY5LAorCTB4OWYyODI5N2QsIDB4MmFiYTVmOTksIDB4MGZjN2Y4ODYsIDB4ODFiNWE5YmUsIDB4NzRiNDNlNWUsIDB4MGJmYjdmN2YsCisJMHg4N2RhNGU4ZCwgMHg4Yzg3MzM3OCwgMHhlYmJiZjJlOCwgMHhmOGNlZWY3ZSwgMHgxZTVmODMxYSwgMHg4ZTNkNmNmZSwKKwkweGYzYzdmNzQ3LCAweDQ3M2UyMTlmLCAweGYxZWI5M2Y3LCAweGVmNmFkNzQxLCAweDcwN2VlOTIzLCAweGVmNDdmZTNkLAorCTB4NjA5MmYwYjcsIDB4MWFjZDc3YmUsIDB4NTEyZGNiMmIsIDB4MzhjNDExNTYsIDB4MzVjZjljN2EsIDB4YzQzYzk2OGUsCisJMHhlOTUzNWMzYiwgMHgzZWI3MzhlNCwgMHgyM2VmMWRmNCwgMHhkZTJmM2Q1MiwgMHgyNWZjZGI5OSwgMHhmMmVkY2ZkNSwKKwkweGU2ZDFmN2JiLCAweDhmM2NlNTQxLCAweGI2M2U0YmMyLCAweGM1YTM1ZWQ3LCAweDQzYmRhMDFkLCAweDc1M2JmMzk2LAorCTB4ZmM4MzExODgsIDB4ZTFkYjI5NDEsIDB4N2RhODU1MWUsIDB4MDAxYzU3N2UsIDB4ZmFjYTQ3ZWEsIDB4ZmU5N2Y0NDEsCisJMHhkZDE3OGQxNSwgMHhjNDA2OGZiNSwgMHg2ZTIxZTRiNSwgMHg5M2I1NDA2YywgMHg4YzM2YzZlMywgMHhiOWJkZjIwOSwKKwkweGRlZDdiMWU5LCAweDRlMjJhYWQzLCAweGQ4YzdlNjM4LCAweGZhYTc0ZjQ3LCAweGVmY2YwMjY2LCAweGYwMGY3M2VlLAorCTB4NWM1YTdlNTAsIDB4NTNhNDZmNWEsIDB4ZWJiNWRlNDMsIDB4NjJlNjdkNjYsIDB4ZTk3Yzc1NWQsIDB4NGJkN2Q3NzgsCisJMHg5ZTIxYjdjNywgMHg1ZGZjZjE4YSwgMHg2ZWJhMTdlYiwgMHhhZmE1ZWJhMSwgMHgyZWE1ZTE1MywgMHg5NzdmMDNmYywKKwkweGZhZDc0ZmFmLCAweGZmZmIzZWMxLCAweGI3MGNmYWNiLCAweGNjN2RmMGI2LCAweDA3ODc0YWIwLCAweDdhZDc3ZDcwLAorCTB4MjYyZWRjZGQsIDB4ZjE3ODNlZTAsIDB4YTQ0MWY3MjUsIDB4NWY3Y2QyNGIsIDB4OGE5NjdmODAsIDB4YzA1YzEzMzEsCisJMHg4MWNkNGI5MSwgMHhkZWI0Mjc5ZCwgMHhlZjU5ZWZmMiwgMHgwNzdhOTBlMSwgMHg3Y2Q2MGFlMiwgMHhiZDc5NzY5ZCwKKwkweDFhZjUyMWRkLCAweDdlZDYwYjYyLCAweDM3NGNlZDJkLCAweGU0M2Q3Y2UyLCAweGVkMWZiMWI2LCAweDFlM2Q3MGNkLAorCTB4YTNjY2ViYzMsIDB4ZjFhNzFjNzUsIDB4OTZhMjQzYTMsIDB4ZDcxMjBmY2YsIDB4ZjFkZjU4ZmMsIDB4Y2I4ZjUyZGEsCisJMHhlZTcyY2M1ZSwgMHg2ZTU5YTc3OCwgMHg1MTRkZjA5YywgMHhkMDlkYzYyMywgMHhkNjhlNDQyYiwgMHg2ODM3ZTFmYywKKwkweDlhMjc1ZWZkLCAweDdiZDBkZmI4LCAweGYyNjgzN2YyLCAweGY5M2RlODY5LCAweGYyNjg4NmU3LCAweDAxNDg4YTY1LAorCTB4M2MyZjFhOWYsIDB4YmRlZDJlMTIsIDB4ZDkyZWYxODMsIDB4MmY0NjkyNmYsIDB4OGM1NTZlNjksIDB4OWYwODNkMDYsCisJMHg1NWYxY2MxNSwgMHg4YjkwNzdiYywgMHhiZjljZmQ3MSwgMHhmZDM4MDQ1ZSwgMHgzZjcyMDhhMSwgMHgyMjkxODk5MywKKwkweDZjMjEyM2ZmLCAweDc5MDM5ZGYyLCAweGY1NWFiMzNmLCAweDJjZTQyN2ZkLCAweGMyZTY1ZWZkLCAweGQ4YWJkZjcwLAorCTB4NGU0NGFmNzcsIDB4MjhmNzhmOTksIDB4NGI4YzE1YzYsIDB4ZTMwM2JiNDcsIDB4MWM5ZjJjZGQsIDB4YmNiMWE0NzAsCisJMHg4YjY1N2Q4NCwgMHg2ZjdmZGFlYiwgMHg2ZTkyZjlkMCwgMHg5MTA2Zjc5NSwgMHgzYTYwZGVlMiwgMHhlOWQ3OTY2ZCwKKwkweDg2ZmU0MWZjLCAweGVkMDIxNWFjLCAweDcxY2RiODI2LCAweDFmZmI3YTM4LCAweDZiMGFjNmJhLCAweGZkZmNjZjQxLAorCTB4ZmE3YmI5ODcsIDB4NjZmM2FlYzMsIDB4YjBmMWEwZWMsIDB4N2IxOWJmODMsIDB4ZjdjYzc4YzUsIDB4MTYzZWQ4Y2QsCisJMHgzOWQ5ODY5OSwgMHhiZDMxNzljZCwgMHhhNzRlNzkzYiwgMHgyNmYxYWVlNywgMHhjZjdjNmIwOCwgMHgxYWYxZDY3OCwKKwkweGNmMWQ0ZjhhLCAweDJmNWUwMmZmLCAweDJmZDc4Nzc0LCAweDM3MjkwYjA2LCAweGEyM2U0YTQ3LCAweGFjMmFiN2UzLAorCTB4MWY2NzFlZjMsIDB4YTU0NDVjNjMsIDB4MzNlOWUyNDMsIDB4Yjg3YjhjODAsIDB4M2NmMTU3NzUsIDB4ZmQxN2E5M2UsCisJMHg3NTQ1ZWY4MSwgMHhkNDNjYjhhMywgMHhjNzM2MjUwZSwgMHhjNzdmNWU3MCwgMHhlZjgzY2NlYywgMHg3YzEyMjc0NiwKKwkweGVhN2MzOWQ3LCAweGQ5Y2JjMjUwLCAweDQ5MjY2MGZjLCAweDBkOTNlMjMwLCAweGZhZWY3YzBkLCAweDA3YWFiM2RjLAorCTB4ZWFhNTdmZjIsIDB4NGYwMWViNWUsIDB4M2Y2NTUzNzksIDB4OTVlNmY4YTAsIDB4YzUwOWY4NjQsIDB4YTNlM2VlZTYsCisJMHhhZjEyMWQyYiwgMHgzMmIzZmViYSwgMHhhN2Y3ODhhZCwgMHhjYTI0MTU3MCwgMHgzZGU0ZDVmNywgMHhlODFlNWQ3MiwKKwkweDhiZTMyNjFmLCAweDNkY2NmYmY1LCAweDIzMjMwN2M5LCAweDFmZWIxZjI0LCAweGJlYWVmOTI2LCAweGYzOGVkNDllLAorCTB4NDhjZmQ0NDksIDB4Zjc0OTUzZTIsIDB4YjAzZWIwNDUsIDB4MWE0ZGU1ZGIsIDB4NzhjYTdmMGEsIDB4NzVhNzkyNjEsCisJMHg5N2EzYmZiZCwgMHg1YWYwM2Y3YywgMHg2OGQwZjk5MSwgMHg2NDNmOGZjYSwgMHhlZjJhMDExMywgMHhmMTRjMmYxOCwKKwkweDk0NmY4NTY0LCAweGZhMTZiYmYyLCAweDQ0YjA5OGZkLCAweGZjMGNhZmQyLCAweDYxMWRkYzIwLCAweDMyMzQ2ZjdhLAorCTB4OGY5NGNlMmIsIDB4ZDUzM2Y0ZjIsIDB4NmE5NTE5OGYsIDB4MGVmNThmMmEsIDB4NGZjNzk1MzEsIDB4N2JlNTM3Y2MsCisJMHhhYTY1NWQxNywgMHg1OGY2NjdkZiwgMHhlZmFmYmU1MywgMHhhNGZkNTMwNiwgMHhiY2E2NjlmMiwgMHhlNDkyOTdjZSwKKwkweDc2YTAzMTI3LCAweGMwZmRhOWFlLCAweGZkNTMxMmJhLCAweGY5ODU3ZjE0LCAweGY3YmY1NGZkLCAweDllMDI1NjQ4LAorCTB4Njk3Zjk0NzcsIDB4YmM4Nzk2NmIsIDB4OTYxMTZhYWYsIDB4OTBlZjVkOTEsIDB4ZGU1YTNhZmMsIDB4NWNlODk5MDcsCisJMHg2NDkxZWZjNCwgMHgwY2NjZmQzNCwgMHg4YThkZmE4ZiwgMHg0NjI5MjY3MywgMHhhZTI0ZjdlMSwgMHg2MGY5OWI3MywKKwkweDNmMzlhMjYxLCAweDJhZjc5NWRlLCAweDJiOWM2ZTk2LCAweGE4MjhmZTM0LCAweDZhOTI5ZTgwLCAweGYzZWZhNmFkLAorCTB4MzQ3YzZhODYsIDB4OWViMmU0NTcsIDB4ZWZlYjVkZmUsIDB4ZmY1YTYyMWIsIDB4NGU1ZDdjNTAsIDB4MDVlN2NmMGYsCisJMHg2ZjllZDJkZCwgMHhmOWVjMTc5YywgMHg5ZWMwYmM0NiwgMHg5ZWMzY2M2ZiwgMHg3YjBmYWM2ZiwgMHhmNjFjYjFiZSwKKwkweGMxNzk2MzdjLCAweDhjMWQzMzIxLCAweDgzYTY2MjM4LCAweGU5OWE4ZTJiLCAweGQwY2ZhNzQwLCAweGQ1YjJiYWY1LAorCTB4YTdjMjFmNGMsIDB4YjA3Zjk0ZjgsIDB4NmE3ZjU3NWUsIDB4ZjVkMDlmYTYsIDB4ZDc4YjA5MjEsIDB4MTE1MzgyNmYsCisJMHhmYmZjYTQ4ZiwgMHg2NDJlYjVlYiwgMHg4N2Q3M2FiZCwgMHhmNmY5MGRmMCwgMHhiZTUwZTBkYSwgMHg0ODc4NWIyNywKKwkweGU0Yjc3ODE1LCAweGQ3OWU2ZDUxLCAweDI3ZTVhZDBkLCAweDdkNWJiNmMzLCAweGFlN2RlNmJmLCAweDVmNDM1NWQxLAorCTB4ODcxZDU3NDksIDB4MWYwNzBmOWUsIDB4ZmZhNDM0N2QsIDB4MDJmOWZiZDcsIDB4ZmUzYjNmYTgsIDB4ZjQxZGIyNjIsCisJMHg0NWRmMmVkMSwgMHhlZTFmMDM2YiwgMHg0OWI3MTVkZCwgMHg3N2JjYmE3YSwgMHhlMzk1MzNmMiwgMHg5YTU5OGUxOCwKKwkweDgyZWJmMDE0LCAweGYwMzZkZjE4LCAweDZiYjM5YmNiLCAweDEzNjdmODE1LCAweDQ1OGVkMTQ1LCAweDhmZjljYjg4LAorCTB4MTdlNDY0YjAsIDB4NzdmNzk0MGMsIDB4ZGYyYjc2NDUsIDB4ZTJmOWQwN2YsIDB4MTcxOTI0ODIsIDB4ZjM1NDMyZDgsCisJMHhkYzY0N2FmMywgMHhhNTQzZjNjZSwgMHhlM2NhMjRkZCwgMHhlMmUzMzhlMiwgMHg4M2JmNzk2YywgMHgwNWU0OTlkNCwKKwkweGUxYzdjMDM5LCAweDQ3YzA0MWYwLCAweDY5ZGY4NWIzLCAweDM5YjliNTZjLCAweDg2ZmZjNDZlLCAweDgzZjdlMDJhLAorCTB4NzJmOTBiMWMsIDB4MzVkZjI2ODAsIDB4MDA3MGU0N2MsIDB4ODVlYjQxZmUsIDB4MWMxZDljZTksIDB4NWJlMjk4NzAsCisJMHg5OTczNmU4NywgMHg4OTJkMzlmMiwgMHg3NmMzZmFhNiwgMHg3OWU1NGRiYiwgMHg3OTUzMmNjMSwgMHgyOThmMjFjMSwKKwkweDI4YzhlMjNmLCAweDhlMmJmZDUzLCAweDJiZjk0ZDdhLCAweGVhOWEyNzViLCAweDkxNjlmZDVmLCAweGRhMjQ5ZjI5LAorCTB4MDc3ZTA2MWYsIDB4M2U4ZjUyMmEsIDB4ZTI1NTM0MzMsIDB4N2UzODJkYzksIDB4YjE5ZGMxNmYsIDB4YTZhN2RlZjIsCisJMHhiYTcyZWI1ZiwgMHhkM2VjZjcxZSwgMHhkZTU0MzllOCwgMHg3MWY3NjgxZiwgMHg1ZjQzNzUxYywgMHgxODdiZTFlMSwKKwkweDEyOWY0ZDBlLCAweGE3YzAzZDY2LCAweGRlNzcyZGM1LCAweGUzOWJmMGEzLCAweGU1NzhmNTk2LCAweGQzNDE3ZDRlLAorCTB4ZGQzOTc0MGYsIDB4MzVlY2FmMTAsIDB4MDgyZjJiYzYsIDB4ZTAzZGZlZWIsIDB4M2RkNmQyZmYsIDB4NzY4MWZlMTQsCisJMHg5Zjg2ZGYzOSwgMHg4OGRlZjlkYSwgMHgzYzI4NTcwZSwgMHhkYTM4YjUzMywgMHhlZmVlOGUyZCwgMHgyNWIyZDhmNSwKKwkweDE0NjUyNTlkLCAweGZlZjQxZGZkLCAweGNhZDNjZDk4LCAweDM2NWZkZDZmLCAweDRmZDVhNzllLCAweDBiZjBkNWY0LAorCTB4ZmJhNTY3YmIsIDB4MzA1YmM3YmIsIDB4YmU2N2NlNGMsIDB4ZDRmMzcyYzUsIDB4MzJjZjhlNmMsIDB4M2JkZjgzYmQsCisJMHg1MWZkZWE1YiwgMHhmM2I3NGFiOSwgMHhlMzIzMTA1YiwgMHhkZDhjNDRhNywgMHg3OWVkZmEwZCwgMHg0NGNmODkzYywKKwkweGZiZTQ2OGJiLCAweGZmOWM1YTQ3LCAweGVlNWI2YjRkLCAweGYzNDU0NDE5LCAweDdiZGE0ZGVkLCAweGU4MWIwMTYwLAorCTB4OTI1OGQyNjEsIDB4ZDg4NGYyYzMsIDB4YjM1NzY1YjYsIDB4YzdhMmU0OTMsIDB4M2Y2Y2FjZWEsIDB4MzVkZGJmZTksCisJMHhjZWI4MjQ4YiwgMHg0OTAzMWJmYiwgMHg0MDdkMDFlZiwgMHhiNGJlODFiNiwgMHg3MWU1NDcyMSwgMHgxYjllYzFhZSwKKwkweDRkZjZmZDgxLCAweGZiM2Q5YzY3LCAweGNlZDA4NDA1LCAweDc1NGZhOTBiLCAweDg3NGM2ZjQzLCAweGFmZmUzY2ZhLAorCTB4ZjE0M2VkZTMsIDB4NDJhZGViYTQsIDB4ZDc0YzMzOGIsIDB4ZDdmMWQyZTAsIDB4ZjBkMDc3NjksIDB4NzA3ZmRmYTcsCisJMHg2ZDE1YjMyZiwgMHg4YTNkZjI3MiwgMHhkMmRiODg4OSwgMHg0NzI1YWZkNywgMHg4NmFkNjVkMiwgMHgzZjAzZDQwZiwKKwkweGExNWVhOWVhLCAweGZiMDMxZDlhLCAweGM3NzA4NzcyLCAweDQzYTFiYWI4LCAweGMyYmZmZDNkLCAweDllZmY4ZThiLAorCTB4YzRmNTU3ZWUsIDB4YzJmOTQyMWYsIDB4ZWFiN2RkNzcsIDB4ZDlmZjRlODksIDB4M2UwNjU3N2IsIDB4YjQ2OGUzMjEsCisJMHg1YmE0MDk3NSwgMHg2NzdkM2ZkOCwgMHg2ZjNmNzk5NCwgMHg4ZDc2OTZjYywgMHhhMmJlZGE3MSwgMHg2Nzk5ZGRmMywKKwkweGY2MDIxN2U2LCAweGFhNTU4NmYxLCAweDM5ZTQyZmM2LCAweGM0NTI5YzVlLCAweDNhOGIxMWVmLCAweGU1MzNjYjE3LAorCTB4Y2ZkNjJmMWEsIDB4YzgwZjg1ZDcsIDB4ZjVhZWUwZjcsIDB4NDU1YzI1MTYsIDB4OWI2NjkyZjksIDB4MTVhMDQ4ZDgsCisJMHhmMzhmYmJmYiwgMHgxYjkzYmY2NiwgMHg0NDllZmU3MSwgMHgzNzI2Y2RjMCwgMHg0OWI0YjcxYSwgMHhiOTRmZWMwOSwKKwkweGM1ZWNiZGZjLCAweDVjN2VmOTRlLCAweDhiZDliYmU4LCAweDJmMTdmZDM1LCAweDg2ZGY2MDJhLCAweGNmZWU2NWZhLAorCTB4OGY2YmNlZDYsIDB4ZTEyYjdjZjAsIDB4MGJhNWJkNjcsIDB4MDJkZThkN2UsIDB4ZTgzMTFkZjIsIDB4ZjNiNGFhYzMsCisJMHg4ZTk2OWM3MCwgMHgyNGZjMzczNywgMHhjMjc5NWRmMSwgMHhjZTE2NDQ2ZiwgMHhiNzZiNDZmMywgMHhmODlkNzQ3MSwKKwkweDlkMmFmZGQ1LCAweDFjYzNjMjdlLCAweDE3MWExZmFmLCAweDRhZmZkNjcwLCAweDFhN2U3Nzc0LCAweGQzZDM3ZmRkLAorCTB4ZGZmNGU4M2UsIDB4YTg1Zjg3N2MsIDB4MWU4OTY5YzMsIDB4ZmYwNDNlMDUsIDB4NTdlOGRiYmYsIDB4ODI0OGYzZjksCisJMHgzMTI3ZmQ5MCwgMHg2YWI0OGZmMCwgMHhiOThkODlmZCwgMHhmNDRmZGRkZCwgMHhmMWM1ZDhhZCwgMHhiZTJjYWIxMCwKKwkweGYyNWM0MGZmLCAweGVmMWZlYTE5LCAweDNjZTVkZWIwLCAweGY4ZmI4MDkwLCAweGQzYmIzNDkzLCAweGU0ZDZmM2U1LAorCTB4N2VmMmQxYjAsIDB4ZTU1Zjg3NDAsIDB4Mjg5OGVlZjUsIDB4MWYxMzczZWYsIDB4YmE3N2Q4MTUsIDB4MDhhYTdmMWYsCisJMHhmYmFhNDJmNiwgMHg0NjZiN2M0OSwgMHgzZjc1ZmUzMSwgMHgxNDcwNzE0OSwgMHg2MWIzMzljMywgMHg0ODRmMGRiMSwKKwkweDdiN2MzZWI2LCAweGNiYmI4NDYxLCAweDQwM2FkMjdmLCAweGU0ZjRlN2M2LCAweGM5N2U5OTQ3LCAweGI4Y2RmZGMzLAorCTB4NzNmNzE1NzQsIDB4Y2E0NTNiMmMsIDB4MmNmNzhkNmIsIDB4ZDkwZDlkMDMsIDB4Njc5ODZjMjYsIDB4ZGZmYmFkYWIsCisJMHgyMzkyOTgxOSwgMHhmODUyZDFmNywgMHhlMjFiN2JkMiwgMHhhYzI4NTY3ZSwgMHg4NDU3MmMwNywgMHg3Y2M0MDcxZSwKKwkweDZjNWZjZjVlLCAweDMyODVmMmQyLCAweDk5MmFjYjdmLCAweGM1ZGVkNTZmLCAweDNiZDlhYWRhLCAweDk4YTQ0ZjMwLAorCTB4ZWRmMGY0MGYsIDB4ZjMwNDNkOWEsIDB4ZTA3OThhNDAsIDB4ZjIxYWY4M2IsIDB4ODNjODZiZTAsIDB4YmUwZjIxYWYsCisJMHgwZDdjMTQ4NiwgMHg1MTQ0NGJkZiwgMHhmZDJhOWU3MiwgMHhmYjBkZTMzZCwgMHhmMTllZmUwMywgMHhmZTA5YjkwNiwKKwkweGZlMWU2MzFlLCAweGY4N2Q2MzFlLCAweGYwZTU4YzdiLCAweGUxY2IxOGY3LCAweGUxZTYzMWVmLCAweDg3ZDYzMWVmLAorCTB4ODc5OGM3YmYsIDB4MWY1OGM3YmYsIDB4MWU2MzFlZmUsIDB4N2Q2MzFlZmUsIDB4ZTU4YzdiZjgsIDB4Y2IxOGY3ZjAsCisJMHhlNjMxZWZlMSwgMHhkNjMxZWZlMSwgMHg1OGM3YmY4NywgMHg2MjlkNzM3ZSwgMHhhY2RkMDdmMiwgMHhiYTUwM2JiZCwKKwkweGEzZTk4ZTNlLCAweDI5MjhiNTM5LCAweDNmZjdkNjg3LCAweGM3ZTdmZjIzLCAweGYzYWM1NGI2LCAweDZlZmMyNWRlLAorCTB4NDc4NDU1NjAsIDB4NDRkMzczYWUsIDB4MjExNmVlYjksIDB4MGU3ZGI5ZDcsIDB4NzZlZGYzYWYsIDB4ZjE5NDJmOTksCisJMHgwM2Y0YTFjMiwgMHg3NGY4Y2FiZiwgMHgwYTQxNTdlOSwgMHhmODUyMGFiZiwgMHhhZmMyOTA1NSwgMHhmZDJhZGUzMiwKKwkweDU3ZTE0ODJhLCAweDU1Zjg3N2MxLCAweDgyYWZjMjkwLCAweGE0MTU3ZTE0LCAweDg1MjBhYmYwLCAweGZjMjkwNTVmLAorCTB4YmYwNzY4MmEsIDB4NTVmODUyMGEsIDB4MTU3ZTFkZjAsIDB4ZTBhYmYwYTQsIDB4MDM4MjMxZmIsIDB4MmUxZDE1ZmUsCisJMHgyNmU5ZjljOCwgMHhkMGU4OTQzZCwgMHg0Y2JhODdhNCwgMHhjNmY5Yzg3OSwgMHg4ZGYzOTBmYSwgMHg4ZGYzOTBlNSwKKwkweDhkZjM5MGU1LCAweGM2ZjljODc5LCAweDhkZjM5MGZhLCAweDg4ZjExYmY5LCAweGVmMjk2ZjcxLCAweGRlNDFkYjFiLAorCTB4OWE3M2U2MzcsIDB4ODZjMWFmZmMsIDB4ZjljMzc5MzUsIDB4NDZiNjkxNTcsIDB4MmUyOThmMjksIDB4OWU3MmViOTIsCisJMHg1OGZmMDU5YSwgMHgxYzkyYjg2YiwgMHg3NjM5MjFlYiwgMHg4ZDY3NmZjNSwgMHg4OWY4OTJiZiwgMHgyYjk3NmYxNiwKKwkweDZmNTgyZGRhLCAweGJhZDM3YmY2LCAweGUzODI4MmY5LCAweDNiZmU3MzgzLCAweDdmNzVjYjkxLCAweGJhZDFmZjJiLAorCTB4YWMxNGVkZTcsIDB4OTBjYjZjMzcsIDB4M2RlZGU5NzAsIDB4ZDUyMmE1YzIsIDB4YmJlNTc3ZWIsIDB4YmUzYTE3YWYsCisJMHhhNWY5OGY1ZSwgMHgyODUyMGUwMSwgMHg5MTA3MTBmMywgMHgxZjMzYmI3NywgMHgyZDViZWRmMSwgMHg1ZDBiOGM4YSwKKwkweDQzNzJlMzI5LCAweGUzNDlhYWU5LCAweDNiMmQ1YjRiLCAweGJiNTA0NDBlLCAweDgzYzU2MmY2LCAweDU2OTkwNzdiLAorCTB4MGY5NmM4NzEsIDB4NDNlNmQ1M2MsIDB4ODljYmE4OWUsIDB4NmI4M2UyZDUsIDB4OTAzYzQyYWYsIDB4N2Y2ZWI3MGUsCisJMHhmN2MxM2UyNCwgMHgwYmI3NDZkZCwgMHg3MzhkMTk3YiwgMHg4ZWMyMTdjZCwgMHg2NDk4NWJkZiwgMHhkYTA0ZjI5NywKKwkweGVhMWNkZjQxLCAweDBjOWJiYzU3LCAweDQ3MzJiZGY0LCAweGZmM2U3YjllLCAweGU4Y2FhYmIyLCAweGI1ZWRkMGZiLAorCTB4ZGQxZWUxNTcsIDB4ZWVkOTA4YTQsIDB4MzM0NzhmMzcsIDB4MmEzNGE3MWUsIDB4YzlmZWYwOWIsIDB4OGJjMmVkZTgsCisJMHhkNGJmYjFmYiwgMHhkZGJhMWVlMCwgMHg3MWUzMmY2NSwgMHg0ZWZmN2M1ZCwgMHg0Mzc4YjdlZiwgMHgyYzE3ZGYzMiwKKwkweDEzZTNhZDE2LCAweGYwYTEyN2Q5LCAweGRlM2FlNmZiLCAweDYyYWY3ZTY4LCAweDBmZTJjNDdlLCAweDJmZmM4ZWMxLAorCTB4NzEyMWMzZGYsIDB4YzNkY2ZiZjEsIDB4NmM3ODY2YjksIDB4YzRkYmUyMjEsIDB4ZTQwZWY5NWUsIDB4YWJjNWUxZTQsCisJMHhiZTVjMTM3YSwgMHhmMjA3N2M4MCwgMHg1ZjZhMmY5YSwgMHhmOTY2ZmNlMywgMHhjZjkzMjQwZSwgMHhjZjhmODY0OCwKKwkweDg1N2U0MWMzLCAweGUyOThmZmRmLCAweGU1ZTk2OGRmLCAweDE1ZTBiZGM2LCAweGRmZDQwNGI2LCAweDBiNTAzYzJlLAorCTB4YWY3OTA5MDYsIDB4YjY1NzlmNTUsIDB4NTcwOTYyMzgsIDB4OTVlMjJmNDAsIDB4MTFmZDAzNzgsIDB4N2EwMTk4ZTcsCisJMHhmOGQ4ZjNjOSwgMHg1NmE5OTA3ZCwgMHg0NmZjMGQ5NywgMHg1ZDhhNzM5NywgMHg3NTQyZWM3MiwgMHhmN2RmMGM3NCwKKwkweDJlMTM5MTBiLCAweGI4ZTZmNjM2LCAweDhlM2Q3ZjhkLCAweDkzZWY4M2E0LCAweGNlMTVkZjJmLCAweGY4OGY4NTcyLAorCTB4YjllNmY4MDcsIDB4NTk3NzE5M2MsIDB4OTFjM2VjYjksIDB4MzhhZWQ0OTYsIDB4ODEyOWQzOTIsIDB4ZjNkZjc4YWQsCisJMHhlODhlZWE3NCwgMHgxMWNiMGE1MSwgMHhkYjVmYzA4NywgMHg3YmU3OWYxYSwgMHg1ZWFiYzU4MiwgMHgxNzEwZmJlMywKKwkweDk2ODgxZjFiLCAweDdmYTRhYWY3LCAweDliYzM0Y2E1LCAweGE4NWE2ZjZlLCAweDE2OTk0ZmFkLCAweDVlYmM3NDNmLAorCTB4ZTc0YmNmYmUsIDB4NzFmN2JmMzAsIDB4NzJjNmQxYjEsIDB4MjhiY2E4NDYsIDB4ODgwZmViODQsIDB4YjQ2ZjJiNzMsCisJMHhjNWQzZGRmMSwgMHgyNzU3OGI2YiwgMHg3NzdlZWU4YSwgMHhjZmUzMmJjNSwgMHgzNDk3NzFiNSwgMHhhODRlMzhkYSwKKwkweDJiNDc3YjVjLCAweDk2NTg3N2Y0LCAweGQyZTg3MjZhLCAweDI3ZWZlNjZkLCAweDRmZTQ0MjcyLCAweGFkNDRmZGZkLAorCTB4YWY1YmYxNGUsIDB4YTgzOTY0Y2MsIDB4ZWU3MWM2ZDYsIDB4Yjk0ODU3ZjMsIDB4MDExMGVjNDgsIDB4YmY5ODY3ZGMsCisJMHhlZjA1OWM2MiwgMHhlNWRmY2M1OCwgMHhkMGRkMjhmNSwgMHg3YzlhM2JkMSwgMHgxMjgzMDkzNCwgMHg4YTVlYTdkZSwKKwkweGVkMzJiZTYwLCAweGNmY2UzZjUyLCAweGU5Yzg5NGJhLCAweGU0YjI5NzhkLCAweGQxMWRhYzc3LCAweGJjYTE2YjRiLAorCTB4MjZiZWZmNWYsIDB4MWM0NGNkMTcsIDB4YjJlNDAxNjUsIDB4MWRkNzRjM2UsIDB4MjIxOGQ3NDQsIDB4NDM1N2UzNTcsCisJMHgzMDJiY2FiYywgMHhmOWIyNGZjMywgMHg3MzRlMjE1NiwgMHhmN2MxNDZkMiwgMHg3ZTQzMjY5MSwgMHg5MGQ5ODJhMiwKKwkweDJmYjAwYWE3LCAweDNlZjkwYTUyLCAweGVmODU0NGM2LCAweGJlMWU0Y2I3LCAweGI0MDdkYjRjLCAweDExZjMwNDJmLAorCTB4MzdjM2Y3N2UsIDB4ZjEwMDZhN2UsIDB4M2I3ZGIzMzcsIDB4N2Q3NzU4MmMsIDB4NmRmY2Y4M2YsIDB4NjRlNjBlZmMsCisJMHg3YmM3NjJiZiwgMHhjZjRkM2U4MSwgMHg3NDNkZTlkNiwgMHhkNDg4MmM1ZiwgMHg2OTRlNjNlYywgMHg4ZmI0ZWFmZiwKKwkweDljN2U1ODAxLCAweGM0NDZmMjI3LCAweDJkODAyZWIzLCAweGIwYjY5ZmIzLCAweDZjYThhYTg0LCAweDFiOWM5ZTU5LAorCTB4OTQyMzYzNzksIDB4NmVkMzdmYWMsIDB4OTE2MmRmMzIsIDB4ZmU0ODlmZjcsIDB4NzE3NTc4ZTMsIDB4ZTUwZmIwYTQsCisJMHhmOTJhZDc4YiwgMHhlMWQ3OTc4OCwgMHhkOGQ4N2FmYSwgMHg3NzdhYzM0OSwgMHhlNzQ5NDFkMSwgMHgwM2VlY2NmZSwKKwkweDVkZjk2MGJkLCAweDRjZmYyNjE5LCAweGY4NGE1YTY4LCAweDEwNWEzZWM2LCAweGZjNjNmYWQzLCAweDVjODRkMGQyLAorCTB4ODg5ZjFkZTEsIDB4ZjlmNWM4NzcsIDB4MDJlMjIwOGEsIDB4ZGJmOTZhZTcsIDB4OGZmMmJkOWUsIDB4Mjc4YzljNmIsCisJMHhlZGNkOGZjZSwgMHgzZmUyMjM3NywgMHgzOGZlNjVmZSwgMHg3ZjFhYjE1ZiwgMHhmMTRkYWEzNywgMHgzZGU1NzM3OSwKKwkweGRmNTgwOWM4LCAweDdlNzZlY2M4LCAweGE2NjY2MGM3LCAweDIxMmY5ZTRiLCAweDcyZGI5Njc2LCAweDg0NWRmMmRkLAorCTB4Njk0YjdiMTAsIDB4ODQ2ZjNjYjYsIDB4OGYzYzlkZDUsIDB4YjY2ZTNhZmQsIDB4M2VmM2VhNTcsIDB4MzNkZjMzNmUsCisJMHg1Y2VhZDNkNSwgMHhiZmY4Mzc2OSwgMHhhMGYxMjdiYSwgMHg3ZmZiZGU0NSwgMHhmMWQ4MTJjNCwgMHhhMDZiZDEyMiwKKwkweGU2MDE2ZmI3LCAweGJkZTIwOGZiLCAweGNmMWY3ZTE5LCAweGEzNDc3ZjRmLCAweGVmNjk0ZjkzLCAweDc0ZjRlODY1LAorCTB4ZGYyMmVlYWMsIDB4ZGE3MTI4OTcsIDB4OWU4MWFhZGQsIDB4N2MyOGQ2Y2EsIDB4NGVhNGIxMWYsIDB4YWRmNjI3ZGUsCisJMHhmY2JkZTQ1MSwgMHg4ZjU3ZWMxZSwgMHhkZjlhZjljZiwgMHgxN2ZjN2E1MSwgMHhjMzUwYjIxMSwgMHg5MWZiN2NlZiwKKwkweDVkMjkxY2Q3LCAweGRkNTNmZGY4LCAweDdmOTI2Y2FmLCAweDZmMTAzMzA2LCAweDljMzZiNzNmLCAweDdhZmU0MWRmLAorCTB4MDE4ZmQxNTgsIDB4ODdiNjY0N2YsIDB4ZjExMjY5ZDcsIDB4MWE5ZmQ0MzQsIDB4YmUyOWZiZTMsIDB4MDcyMzg4OTcsCisJMHhmMDVjNmY2MSwgMHg3ZGY4YjdmMywgMHgyOWJkOWFlMSwgMHhmMTYxZWVmYywgMHg3OGQ1YmNlZSwgMHg2MWViZTU0NywKKwkweDg5NzIzYmJlLCAweDJlOWQ4YjdlLCAweGVhOTBlNDNiLCAweDk3M2U1OGM2LCAweGVlZDFmNDE3LCAweGY2NzY4YmE5LAorCTB4ZjNlYmU5ZTcsIDB4MDc5NGFlNjAsIDB4OWM3MjNjOGEsIDB4NDUzZTlhMGIsIDB4MzU0ZGIzMDgsIDB4N2ZlNzkzZDUsCisJMHhlZGQ0M2VlOCwgMHg5NWY2YTFhMiwgMHhiZTJhZjdkMCwgMHg3YjAyOWVjYiwgMHg1NzYwZGQ4OSwgMHhiNjMxZWRkNSwKKwkweDcwNzNlM2FjLCAweDc3YjdjZjllLCAweGFmOGRiYmZmLCAweDRkNDc3NmViLCAweGE5ZDg1ZDlmLCAweGU4NGY2NmNmLAorCTB4OWQ3ZmI5MDMsIDB4YmQxZDgyZTIsIDB4MTFiZWU5Y2MsIDB4ODc2NWY1ZjEsIDB4MTRmMDg4NmMsIDB4ZjJkY2UyOTMsCisJMHhlNGJiOTJkZCwgMHhiNzI1MjViYiwgMHg5YjNmMzFlNiwgMHhjN2M5MzU4ZiwgMHhiYzUxODdiZCwgMHg5NDAyY2I4ZiwKKwkweGRmYmNmN2M2LCAweDY1N2JhZGU3LCAweDUzZDAxZWMwLCAweGUwZjdjYmQwLCAweDdiNWU1Y2NiLCAweDJhMmU0MTljLAorCTB4ZWY0YzUyNmQsIDB4MTdmOWU4MTgsIDB4NzIxZGE1NzMsIDB4YzAxOWE5M2UsIDB4YTZiNzRkZGYsIDB4ZDA4NmYxZDgsCisJMHgxMDhmMTI3YywgMHg0NmJhZjgzNywgMHhhYTNiN2EyNywgMHg5MzI1NzFjNywgMHhmOTQxYzU1MiwgMHg5ZGMxMTRhZSwKKwkweGZlMzNjNzIyLCAweDkzNDk1MTRlLCAweGFhMDYzZGY5LCAweGZlZGQ3MmNmLCAweGFmZWUyOGRjLCAweDRlZjM0NWQ4LAorCTB4Mzg2MmVhNDEsIDB4YTc4YzBmMDksIDB4M2ZhODdiZjYsIDB4ZWJjMzhmMzcsIDB4ZDgwYzFhNTEsIDB4OGY5ODM3NjAsCisJMHhjZmNhMTY3OCwgMHgxODZjMDU3NSwgMHhiZTUxYTRhNywgMHgyYjViZTI4ZiwgMHg4OWFkZjFjNywgMHgyZTQwZTdiNSwKKwkweDAzZWNiYWIwLCAweGEzNjBmMjhjLCAweGJlNzhjZjdjLCAweDA0MTFmYmY2LCAweDY1Y2JjYjJmLCAweGYzZGMyNzg0LAorCTB4ODY3ZGVmZDIsIDB4ODM1OGFiZTIsIDB4ZDYyOWFjYmYsIDB4YWQzNjVmMmMsIDB4ZTY3ZDYxYjMsIDB4YzM1ZWYwZjQsCisJMHg5NzFkMWE5NywgMHhmYmUxOGUzNCwgMHgyZjU2NjVmNSwgMHg2OWYwOTdkZiwgMHhiMmViZmVmOCwgMHgyN2UxYmJmMCwKKwkweDkwZmNkMzk5LCAweDhkNzkwNTJkLCAweDNjMDk3ZDJmLCAweDgyOWUwNmY3LCAweGQyM2VmYzE5LCAweDY3OGU3MGIyLAorCTB4ZTI2YWUzOWUsIDB4ZmJlMjc2ZjksIDB4ZTQwZmMyMDEsIDB4ZTMxMTU3MTUsIDB4OGZjNGU4OWIsIDB4NjZiMmMwMzgsCisJMHhjMTc2ZmFmMywgMHg2NWRmMjUxMywgMHhmZGU2MmU2ZiwgMHhiM2VhYzhiNywgMHhhYzcwOGNiYiwgMHhmYjgxOWZkZiwKKwkweGRmNjg3MzViLCAweGUxMjdmZGUzLCAweGNjN2RmMWYyLCAweGM4ZGMwZjUzLCAweDM4MDZmYmJmLCAweDhmMjhlNzgxLAorCTB4M2JkZTAyN2IsIDB4YmE2MWJhMjIsIDB4NDE2N2U5ZDYsIDB4ZmFjZmRjODEsIDB4YWNjMzUxNzgsIDB4ZWMzZjBlZDIsCisJMHhmN2E5ZjZiYiwgMHgwNmYzZTQyMCwgMHhmZmQ4NmY1YSwgMHg3NmE3ZGE3YiwgMHg3MWE0MDA1YywgMHhkZGYyNjVlZCwKKwkweGFiN2RkMGJhLCAweDlmN2Q1N2VmLCAweGRmNTZmYmVhLCAweDhhZDk4ZmNmLCAweDE3NGE4OTgyLCAweGJkZjNhMWRmLAorCTB4ZjA2ZWI5ZjYsIDB4Nzc4MzQ5MzQsIDB4ODRhZWI2YWUsIDB4YzE4NTU3ZDcsIDB4OTg2MjM3YWUsIDB4NTNmM2RmZGMsCisJMHhmZDFmZmJjZCwgMHhiZDU0ZGZhMSwgMHgwMzMwNmM3YywgMHhmYWY1M2RmNywgMHhlM2YzYjhmYSwgMHgwM2VjM2I2NCwKKwkweDMwZWE1YmQwLCAweGU1ZmQ2NzRiLCAweGUyNjJkZjVjLCAweGZjOWRhNTFmLCAweDA0YWFmYjYzLCAweDBhMWQ4ZmYwLAorCTB4ZGY5NmUxZmIsIDB4ZTViZWU1MjMsIDB4ZTE3YmM4Y2YsIDB4ZjhiZjk2NjcsIDB4NzdhYTJjZjYsIDB4MGI4ZGMxZmEsCisJMHhjYTJmZjc4YywgMHgyYzVmOTI4MiwgMHhmYzBiNzkyNCwgMHgwZjI2OTE2MywgMHhlNWY0Y2M2YywgMHhlN2VjMzMwZCwKKwkweGM5OWZmYmIyLCAweGRiOThmZWM0LCAweDZmMGE3NzkyLCAweGY5YmNkMWE4LCAweDNmM2ZhM2JkLCAweDU3ODdkMmYzLAorCTB4NWRjZWJiYjksIDB4NmIyNTFlN2QsIDB4M2IxNWI1ZGUsIDB4ZjQ5Mzc4OGQsIDB4MDc1Njc3N2UsIDB4MzhhNTViOWYsCisJMHg2OTUzZThiNywgMHg2MWYzMzE2MywgMHg4ZjdhNDg5MSwgMHhhMWVlYjVkMiwgMHhhOGRjNTBmNCwgMHg1YTU3OWNiMCwKKwkweGZlYTAzMjM3LCAweGQyZWJmMjJmLCAweDhkZjk1M2I1LCAweGY0YmQ3ZDI4LCAweDczZjQ1Zjc3LCAweGE2N2Y4NzU3LAorCTB4MzU3MzRlYjYsIDB4NGMzZDllN2EsIDB4ZTViOWMzZWUsIDB4YmM0NWY2MjksIDB4ZjhlYzUzZmYsIDB4NWEzOWNkYmQsCisJMHhmMzMyOWNmOSwgMHg3MmY1Y2VmNywgMHhkNWZiZjI3NSwgMHg5ZmI4MjdkOCwgMHg1OGVhZjU4NCwgMHhjYmY2OTM2YiwKKwkweDU3YWQ5N2VkLCAweDFkMDJlNDMyLCAweDlkOWFjNThlLCAweDZmNjZhMTcyLCAweGNiYzlhNDVjLCAweDhkOGI1ZWI0LAorCTB4NzFmOGI1ZWIsIDB4Y2ZhNTVlYjksIDB4YmMxN2Y1YmUsIDB4ZDNmMzQ2NTMsIDB4ZWY5M2EzZGUsIDB4ZWNiNDk0MGEsCisJMHhiMzliNzVlMCwgMHg4NTJkOWQ2NiwgMHg1ODY0ZmRlYSwgMHhhOGZlMjk4YSwgMHgwNWNmMzZiNCwgMHgzNWRjZmQzYiwKKwkweDA3ZTA2ZDFiLCAweGYxMjYxOTNmLCAweGYzZjc0YTE2LCAweDFkNjJmOGI1LCAweDE0OGYzOGFmLCAweGFmNDczZjgzLAorCTB4ODNiODNlMGYsIDB4NTk3NWI5YzYsIDB4NzdmMWI0NzgsIDB4M2QxYTAyZWQsIDB4YzZjNmQ2OTcsIDB4ZGFkMmJjNjEsCisJMHg3ZmExN2JlMiwgMHhlODQwZTdlOSwgMHgyZTExM2JmZSwgMHhmNTA5NDVmNywgMHg2Mjc5ZmQ4NywgMHg1NWVmODc4YywKKwkweDM3N2VkN2NmLCAweDQzZmViNDJmLCAweGRhZmRkZDFhLCAweDRjYmZkZjI2LCAweDkyNzk2YzhhLCAweDIyNmEzYmUzLAorCTB4ZTkxM2UwM2MsIDB4OGMwMWFkZTksIDB4ZGMwNjdhMGIsIDB4MmY3YzhiNzYsIDB4ZjViMmJkMzMsIDB4YTI0MWMwNzMsCisJMHgyMGY1YzczYywgMHgxMDViN2JjNSwgMHhiZjI4MTNlZCwgMHg3OWVmMjJjOSwgMHhkZDMyYWFhNSwgMHhhNjA3ZTFhNywKKwkweDVlOGI5NDM3LCAweDVmMWVmY2FkLCAweDIxNTFiYmU3LCAweDliMTc2YWY0LCAweDFmZGRlMGQ3LCAweGVmYzEyZjdiLAorCTB4YTlmNGU5YTYsIDB4YTdkM2EzZjcsIDB4Y2QzZGJmNGUsIDB4OWNmN2Q3NmYsIDB4Y2QxNDg5ZGYsIDB4NDllNTkyY2UsCisJMHgwYmI4ZDA3NiwgMHhiZmM0MWJlZSwgMHhmMzVkZjE2YiwgMHgzNWVmNmJiNCwgMHg0YzM3Y2U3NiwgMHg2NWM3ZGVmZSwKKwkweGZhOTc0ZGYzLCAweDZkZjNjZjUyLCAweDY2ZTg0YzJlLCAweGQ0ZjNhMWJlLCAweDQzMWU4OWY3LCAweDY5NGZlOWRmLAorCTB4MTM5NGZlOTIsIDB4ZDQ2MzlkMGEsIDB4NzBiMmM0ZWUsIDB4ZTdkM2FiOGUsIDB4YmZmNWRiYTUsIDB4OGY4N2JkZWYsCisJMHhmNjY5YzU4NiwgMHhjODI4ZDZhYSwgMHhkZmI1ZjM5NywgMHg5OTQxMTE1MSwgMHg4NmE5ZjdjNywgMHhhZmY5ZmFlZiwKKwkweGYzYTc1ZmJmLCAweGRhYjU5M2U5LCAweGVmNWEyOGY5LCAweDc1MTY3ZWMxLCAweGY1MGY3YzY5LCAweDI4ODlkMzU4LAorCTB4NjI3MzEzYmMsIDB4NmY0Zjg0OGMsIDB4ZGU0ZGFiNzcsIDB4NzY1MTE2NzMsIDB4YmJjZmRlMzcsIDB4ZmUzY2Q2ZTksCisJMHg4ZDg1OTRiZCwgMHhiZDlmNTg3ZCwgMHhmOThkMmVhOSwgMHg1ODdlNGRjMiwgMHgxZWE3NDUxNywgMHg4M2UzNDhiMCwKKwkweGFmMTZiNzkxLCAweGQ3ZjUwMmJlLCAweGMyZWZmMGE3LCAweDRlN2E3NDJkLCAweDQzZjZlN2FkLCAweDIzMTM5MDNkLAorCTB4NTNkYWE3OWIsIDB4ZmE5NjFlNTksIDB4YmIxN2VlODIsIDB4N2M0NTExNTUsIDB4MTI3YzBkNGYsIDB4M2ZiMmNiZmIsCisJMHhlMmNmZTcxZCwgMHg5ODNmNTJmNSwgMHhlMDZiMTE2NCwgMHg1MGQ4MWQzZiwgMHhmODJmYTEzNCwgMHhmYzhhYzNjNCwKKwkweGU2MGQ5YTNkLCAweDBlODZiY2Y3LCAweDdjMDJmYTJhLCAweGJjNWRmNDI2LCAweDVlMmQ2ZDViLCAweGU0ODJhN2U4LAorCTB4MTZkMWQ4MGUsIDB4OWU1ODhiM2EsIDB4OTNlMzQ1YmYsIDB4ZjhkYjlhYzcsIDB4YWYxZDdlYmQsIDB4NzhiZmUwOGYsCisJMHg3ZWM0MmFhNywgMHgxYTI3NmExNCwgMHhmZjA3ZDlhOCwgMHg3YjhmYWYxZiwgMHgwMDgwMDAzZCwgMHgwMDAwMDAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYjVmZjAwLCAweDY1NTQ1YzBiLCAweGNlN2JmOGRhLCAweGMwY2MyYjk5LAorCTB4MTI0NWM4ODAsIDB4ODU4NDhiODcsIDB4ZDc4MGMwMzQsIDB4NTA4MTUxZGEsIDB4YjliYmEwYmIsIDB4NjU4ZTIxYmEsCisJMHg1MDA2NjVjYSwgMHhkNzc3NWRkYiwgMHhhNmExOGNmZSwgMHg0NWZhN2Q2NiwgMHg4MGVkNjVhNiwgMHg3NmMzNmE5NywKKwkweGE4MjgzNDQ4LCAweDU5OTkwYmM5LCAweDZhMzc2MjdmLCAweDViNjNiOTJmLCAweGJhNDAyZGU2LCAweDZkYmZlZGZjLAorCTB4YmNmM2NmN2QsIDB4NTExNzMwZTcsIDB4NmZiZWZkZGIsIDB4Nzk3YmY5ZmMsIDB4OWY1ZWYzZGYsIDB4Y2ZiY2YzZmIsCisJMHg4YzM0NjMzOSwgMHg2MzE4MWI3NSwgMHg0MThlOGIyYSwgMHg4OTQ4NjgzOSwgMHg4ZDhjOTk2NCwgMHg2MTVmNjkwOSwKKwkweGY2YzM4OTRjLCAweGM2NDVkYjI1LCAweDdjZmI0MDQ2LCAweDE5NjJjODkzLCAweGZhMzFkNzJiLCAweDFmYmY4ZjdkLAorCTB4M2MxZjc2MzEsIDB4NDJmM2MzMzcsIDB4MDdkNjM0YTksIDB4Y2MzN2Q3ZmQsIDB4ZDZjOTcyYTAsIDB4ZjFhZTZkYzIsCisJMHgyNTA5MjU4YywgMHg2MDYzOTNiMSwgMHhiNjZhZTNjMCwgMHhjZTI1OGEwNywgMHgyYjMwNzcxOSwgMHg4ZGE0ZDNjYywKKwkweDczYzMyNWQyLCAweGM3MjkyYmI1LCAweDQ5NmY5ZmUwLCAweDBjNDk0M2UzLCAweGQ0Njk5ZGM2LCAweDdiNDM3N2NmLAorCTB4NDE0ZTY5ODEsIDB4YmE1ZjhjMTQsIDB4MzI1YjJhMzMsIDB4NmY1ZGZiZmIsIDB4YzkxYjE4MTEsIDB4NDY3M2E1NTgsCisJMHhjYzYxNGIxYywgMHg2N2UxZGRmMSwgMHgxZmIwYTk0YywgMHhmMzA0ZDM5OCwgMHg3NzA5ZTU3ZiwgMHhhMzhiYTBiYiwKKwkweDgyNDkyZGFlLCAweGIzYWEzYzIzLCAweDdmYTA1OGE3LCAweDZmMzFkODk1LCAweDRlNzNjYzEyLCAweGEwNGRlZjcwLAorCTB4NTMzOGU2ZmUsIDB4ZTVhMWZhYzAsIDB4Y2NjNjNhZTksIDB4ZmYzOThjZTksIDB4Y2YzNDg3Y2YsIDB4M2I4OWUyZTcsCisJMHg4Nzc4YzAxNiwgMHhjZTA0N2Y3MywgMHgxZmY4ZjU1MywgMHg2YzMyMDFmMiwgMHhiMmNmNjg5ZCwgMHg4ZGJjZTFlNCwKKwkweDFjMTI0ZDdiLCAweDU2NjM3Yjc0LCAweGJlZTM5YzA5LCAweGRhNDZjN2M3LCAweGY3OWYyZjMzLCAweGE4YjY2OGI2LAorCTB4ZGJjYmRhMDQsIDB4Njk1N2MxMTgsIDB4ZDQ4ZWU4NWYsIDB4NWVlZGRjMjAsIDB4Njk2MTMxYTYsIDB4Mjg2ODlhNjIsCisJMHg5NTZjNDhjZiwgMHg1MmRiY2EwNywgMHgwNmI5YTJkOCwgMHhlMTBkYmI3ZiwgMHg4OTllZWIwMCwgMHgwMjU0OTJkYywKKwkweDlmN2IxNWVkLCAweDc5NDMzMjQ4LCAweGE1ZWJjOGQ2LCAweDljN2E3ZjdiLCAweGRkZmY0MDQ1LCAweGQ1ZTIwZDVhLAorCTB4MGIxYTYyYWUsIDB4MjVkN2JiOGMsIDB4YjI1MGRjZDgsIDB4MTJjNjY4ZjIsIDB4N2Q2ZWEzMTAsIDB4NTliMTkxOTksCisJMHhhZjlhNzA5NiwgMHg2MzBlN2I2MiwgMHhjMTdkZmViOSwgMHhhYjNmNmE3MywgMHg4ZmI4YzU2MiwgMHhkOTAzZjUzMSwKKwkweDhiZmNhMWNiLCAweGUyMWY3YmNhLCAweDdhYjUyZmYzLCAweGYxMTkyYjhiLCAweGZjYmMyNjYyLCAweDg0NTQ4YjY1LAorCTB4MDVmYmFlZWQsIDB4ZmFjMDU2MzYsIDB4YWMxYTYzN2UsIDB4NmFjOTE2NWYsIDB4ZjRhMTdjNzEsIDB4Y2YwNDliNTcsCisJMHhiMjEwMWM1NywgMHg3ODdiMzBiNSwgMHgxZWU2Yjc2NiwgMHhkMTE2OTEwMywgMHhkMzg5YjU1OSwgMHg3NTc2OGFkOSwKKwkweDdmZTAyMjUxLCAweDJkNDA4YjQ1LCAweDMzNTc5NTBlLCAweDJmMmFiZTFjLCAweDgwZTY2NjRkLCAweGI2YjY1NmZkLAorCTB4OGViMGNjNjgsIDB4MDljZTE5YTMsIDB4NTM5ZTFkZmQsIDB4NWU3OGE1OWEsIDB4N2NiMTg1YjYsIDB4ODlmZTI3YzAsCisJMHhhNTNlNmJmOCwgMHgzZjAwMzdiOSwgMHgyZTFjYWRkNSwgMHhiZWRlNTZjZSwgMHgzYjkwMDMzOCwgMHgxMzYyYjY5OSwKKwkweDI2ZGVhMGQyLCAweDZiM2ViZDUwLCAweGFhMzVmY2MyLCAweGZjZmU3YWMwLCAweDlhNTg2OTM1LCAweDM1NGM0ZTA4LAorCTB4ZjAwMjU0OTAsIDB4YTNkMTk0ZGMsIDB4ZDczYmZjNDEsIDB4NWQ0MmYzY2EsIDB4MGQ1ZWIwMWQsIDB4ZGU0OGU1MTIsCisJMHhmMWMwNmE5ZSwgMHgzY2FmMWE2NiwgMHhkMTQ2YjY3NywgMHg2YzMzYWY3OCwgMHgzNjA5YmIwMywgMHg2MTUwNmQ1MSwKKwkweDQ0MzRlZjU5LCAweDU2YjNiOTYwLCAweDcxNTk1MGNjLCAweDA5MTY2MTczLCAweDE2MTFkZmUwLCAweDYxMjJjNTkxLAorCTB4M2Q1ZWFhY2EsIDB4M2I1MDEyNDAsIDB4ZjY4NDU4NzAsIDB4ODNmYjQ4ZGMsIDB4MGM3MTlmNDgsIDB4MzNlODAyYjgsCisJMHgwNjA1Nzk5MSwgMHhmOWRmZGZmNCwgMHg3ZmNlMmU1OSwgMHgxN2RmMThjYiwgMHg1ZWFlYjYwYywgMHgwMTdlN2QzMywKKwkweDhiMjZjM2QwLCAweDVmNGM4ZTdjLCAweGM4ZjFkMjJlLCAweGIwYWY0MDQzLCAweDZjZDVhN2JmLCAweGNmMDczZTgzLAorCTB4NDJlNmMyNTcsIDB4MDhjMmNjM2IsIDB4Yjk4NGRmY2YsIDB4YWZkZmMwZjcsIDB4Y2UyMjZmMzEsIDB4NTRkZTc0Y2YsCisJMHhjYzlhZjcxYywgMHhjMzVhMjVhNywgMHhmNWY2MDEwNiwgMHg2M2ZiMTQ5YiwgMHgwNTNiOGZiOCwgMHgxMTZjZjhmNSwKKwkweGM1OGQyMDcxLCAweGZlNmFmZDdlLCAweGMyNzk2ZDljLCAweDRmZmMwM2E2LCAweGEzNjdlOGU3LCAweDQwNjJlNjQ1LAorCTB4ZjE1MTlhYTIsIDB4YzE2M2E0MDYsIDB4NjBhYjYzNjYsIDB4MGYzMzA3ZmQsIDB4MmU4MGNiZGQsIDB4MzFkMDFlMWUsCisJMHg1ZWFmOWMyZCwgMHg3ZDNkY2ZjZiwgMHgwMDk0ZWMyMCwgMHgyYThmNDZmZCwgMHhmNDE2NTkxNiwgMHgyOTU4YWIzNywKKwkweDI5OTQzZmY0LCAweDlmZDg1NTdhLCAweDlmZDhkY2U5LCAweGJlNmQwYWU5LCAweDgxOTY1OTBjLCAweDdhODhkMGZjLAorCTB4NzhlZmY1MWIsIDB4Y2EwMTFiZjMsIDB4ZTFlMmU5NDQsIDB4ZTI1NzM4NDgsIDB4M2Q0YjA1MmYsIDB4M2MxYjI5ZjQsCisJMHg4NWZmZjRmZCwgMHg1MzUyZjRiMiwgMHhmY2ExZWZjYiwgMHgxOWJkYTQ3NSwgMHhiMDcyNzc1MSwgMHg1MDFkOTRmOCwKKwkweGEzYzliMGY2LCAweGY5ZjI2NGIzLCAweGYxZGZmNzAyLCAweGEyMjI2ZmFiLCAweGZhYmVmZjQ1LCAweDdiZWY0ZTA3LAorCTB4Y2VhNThhZDksIDB4ZTliOGMwMjIsIDB4OWI1NzkyMWQsIDB4ZmE3ZWY5NzUsIDB4YTllMzYxZTMsIDB4MzllMThmZDQsCisJMHg1YmEyMGRmYiwgMHhlMWZmYjAxMCwgMHhkMzdmNzEwZiwgMHgxNGFmMDY3NSwgMHgxN2Q0ZTM4MSwgMHgzOGZmM2E3YywKKwkweDc1MWQxZTY2LCAweDI4NDY0NmZhLCAweGIxOTEzZWY4LCAweDhjM2NkYzU4LCAweDcwNjhiODFmLCAweDZmYjljMTM3LAorCTB4YTE0ZmY5OTEsIDB4NDg4YjFlYWYsIDB4ZjE5MWU5ZjgsIDB4ZTk5MWMwYTQsIDB4N2U5MTIyYjIsIDB4NWU4YWQ1ZWIsCisJMHg0Y2IzODVmMCwgMHhlOGQ2N2YzZiwgMHg1ZTBjZmYzOCwgMHhmZjM4NmQxMiwgMHhjZGQ2Yjk2MCwgMHg4ZWMxOGE2MCwKKwkweDU3MjdkMjU0LCAweDAwN2ZhNzkyLCAweGQ3NDBjYTc5LCAweGZiNmE5N2JjLCAweGY5MGZjMjMzLCAweDc4ZmMwNzRhLAorCTB4YzAyZjBjOTcsIDB4MjVmOWMzM2YsIDB4NjRiYmZlNzksIDB4MTA2NWRkYjgsIDB4MTI3ZTljMzksIDB4NmU5OTI3MDIsCisJMHhmNjUwYmExNCwgMHg1ODYzOTgyZiwgMHg5ZjFmYjQ2OSwgMHg0N2RkZDdlYywgMHg4ZjA5OTMyMywgMHhlMzgzZmZlMywKKwkweGRmYzIxM2VmLCAweDAxZDYyNzM3LCAweGZmNTFiMTFiLCAweGZjNzg0NTk4LCAweDU3OWZjMDVmLCAweGY4MGJmZWI0LAorCTB4OWZjNTBlZWIsIDB4ZTIzZDdmNTcsIDB4ZDJkMTcxZWYsIDB4MDg4MGZjODQsIDB4MjZkMmExYzgsIDB4MDY1OGY5YzIsCisJMHg5MzJmZmUyMywgMHhlMDliMmNjMiwgMHhmZmU0NzY3YywgMHg4ZmVmODg5YiwgMHhmYzJiZGYyMiwgMHgzN2Q4YTYzZSwKKwkweDQ5ZTRmNTFlLCAweDdkYzE5ZWM2LCAweGI1MGY0NGY5LCAweDEwYTc2NmE3LCAweGJhYzc1ZjlmLCAweGYwMWRiMDEzLAorCTB4ZjExNzM3OWMsIDB4ZTg3NmQ4MmUsIDB4ZmI3ZDJjMjQsIDB4NWRmNTg2NWUsIDB4MWVjYjA2MTUsIDB4NWJiZjZmMzgsCisJMHhmZTYxYTk3NCwgMHg4ZWY3Mjg4NiwgMHhjMzZlYjBhNSwgMHgxNzE2OTk1ZCwgMHhkNTk2MzNiNiwgMHgzY2EwNzI4NiwKKwkweGJlN2E4MmNjLCAweDg1Y2I4YTIxLCAweGE0ZTkwNTg2LCAweDI3N2UwZjg3LCAweDczYzJhZDI1LCAweDM0YjMwODJjLAorCTB4NmM4NmZmNDEsIDB4YTAxMzIzZGYsIDB4NmNkNjMwZGUsIDB4NTdkNzQxNzEsIDB4MWRiZTk2MDUsIDB4ZDFkMWNmYzcsCisJMHgzODczMGQzYSwgMHgzMjNjMzZkZCwgMHgwNTdhOGRkYSwgMHg3YWYzY2ZmNCwgMHgxZTU5M2ZhOCwgMHgwZDljZjBjNiwKKwkweDY4ODRiNjhkLCAweDIyOTdjYmEwLCAweDYxYjNhM2VjLCAweDRlMjRhM2ZmLCAweGQwYzkwZGQ3LCAweGExMzZlNTBlLAorCTB4Mzg3ZGMxNjQsIDB4NmZiZTc4ZGYsIDB4MTdiMDgyZGYsIDB4ZmEyY2MyZjcsIDB4ZDA1OTEwMzQsIDB4YjE5NTcyN2UsCisJMHg0MmE1ZTUwOSwgMHg3M2E1Nzc5NywgMHg3NWM2Mzc3OSwgMHhjOWMyMDc2YSwgMHhkNDY1OWQzNSwgMHg5MzdmZmNjMiwKKwkweGJiODE0YmU5LCAweDU1NmM2MzYwLCAweDBhZmUxZmI0LCAweDcwYzhjNTlkLCAweDdhNzM1NjE3LCAweGU1OTc0ZDczLAorCTB4ZDc3MzM1NjIsIDB4ZTY1ZjA4MGIsIDB4OTZmODA3MGIsIDB4NDI0MTQxNjksIDB4YWRkOTM0NjksIDB4ZTVmYWVmYjgsCisJMHhmNzA5MTc4MCwgMHg1MjdmZTFjZiwgMHg2MTllZTU2NCwgMHgyODQ3ZTdmOCwgMHg0Yzg4ZjMyYywgMHgzMjhmZTQwNCwKKwkweDBjYTNmOWM2LCAweDZmZTkwOGU5LCAweDAwNTFkMDE1LCAweDc1ZGYzMWZkLCAweDY1YzNhNzUxLCAweDZiZjE4MjNhLAorCTB4NzBkMzI1OGQsIDB4M2Y4NWNmYmQsIDB4ODllMzYzZTQsIDB4ODdmMzRhN2YsIDB4MzY1NjY3NWIsIDB4ZjQwYjAzOTcsCisJMHg5ZmQ4OTlmNiwgMHg1MTE0OGVlZCwgMHhmMTMwYWU1ZiwgMHg3ZjY0NGVmNSwgMHhjNWY1MWEzNiwgMHg3OWJkNWZjOSwKKwkweDIzYzc5NjFkLCAweDg2Y2I2ZTRhLCAweDdjMTZkYmZlLCAweGZjZTI4NDVkLCAweDM1M2UwOTZmLCAweDBiNmZlMzllLAorCTB4YjQ2OGZmZmUsIDB4YmY1NmNhNDMsIDB4NDNmZWY0NDksIDB4MTkyODU5ZjcsIDB4YWY0ZTUwMzIsIDB4MTVhNjdkMDQsCisJMHhiMDc0ZTRiMCwgMHg3NDQ2M2VmMiwgMHg4OTZhYzg5MCwgMHhmZDY1ZTM2ZSwgMHg0N2EzMGMwNSwgMHgwMGYzNzUzOSwKKwkweGJjY2E4ZWQ4LCAweDk3NDdmZmYwLCAweGNlODk2Yzc0LCAweGEyYzY5ZjVmLCAweDc0MzNlYTgyLCAweDBiZmQ0MTA5LAorCTB4Y2Y0MWM5NGQsIDB4MTcxZjhkNmYsIDB4MzlhNjdjZjQsIDB4M2IzZWE4M2IsIDB4ZmY1MDUyNjMsIDB4ODJkMzJkZGIsCisJMHg5YzRlNzdlYSwgMHg4ZTdmZDQxOSwgMHhkZDUwNGU2ZCwgMHgxZjI0NGNjNiwgMHg3MzhhZWEzYSwgMHhlMWJiMDEzZiwKKwkweGRjOTJiYWI1LCAweGUzOTc1NDRmLCAweGQwZjZhYTYzLCAweGU4MDViMzdlLCAweDVmM2JkYjI0LCAweDkxZWEwOTM1LAorCTB4NDMyNjU2ODcsIDB4MTFjYjUzN2QsIDB4ZjQzYzRmNWUsIDB4NjZlMDMyNDUsIDB4ZjlkMWNiNzMsIDB4NTNkYmQwMmEsCisJMHg0NWY0M2M2ZiwgMHg2ZDFmZDQwYSwgMHhhN2NmZTJlOSwgMHg0MGEzNjJjMCwgMHgzOWJjYjZhYywgMHg5YWY4MDVkZiwKKwkweDhhZGY2MjliLCAweGE5Nzc5YWY4LCAweGY5OGEyOGY2LCAweGJkY2NkN2Y3LCAweGI5NDI1OTJmLCAweDA2NzQ2NzMwLAorCTB4YzUzNzI3ZWMsIDB4YmYzZTEwZmUsIDB4NzU5ZWY2MmIsIDB4MWZmYjAwOTEsIDB4NDZhYjViN2QsIDB4NWQ5OGJmM2MsCisJMHhhMWU5MTViMiwgMHhmM2E3MjJmZiwgMHg5MTk3ODg1MywgMHg5NjA5N2VmZiwgMHg4YTYxZDkwMywgMHgzYzkyYmQ5YywKKwkweDAzYWRmODU0LCAweDE1MTJjNmY0LCAweGE1NDc0OWMyLCAweGU1NDRjZWI3LCAweDJhNzhiYWExLCAweGQ5OTlkNDhmLAorCTB4NTc2MzgwMTIsIDB4Yzc5NTA2NWQsIDB4N2VkNDJjZWEsIDB4OTUyMjZlYmMsIDB4NTQ2Y2VhMjcsIDB4NGM1NzViYmUsCisJMHgwOTVkNzc2NSwgMHhiMmZmMGE5NSwgMHg2YTBkOTZiZCwgMHgyYTk3NDIyNCwgMHg0ZmNlYjRlYSwgMHg2M2QyNTc4ZiwKKwkweDY5ZDkyODIwLCAweGY5ZDA5ZjA1LCAweDM5YWRiZDRkLCAweDlkNzVjZTliLCAweDY5NTllOTA5LCAweDgxZjlkYTNmLAorCTB4OWRmYTA0NTksIDB4M2QxMWQ1NmEsIDB4OWI3NDM1NGYsIDB4NDc1ZTU2NzUsIDB4MjJmYmI4YjksIDB4YmMxMThhZjMsCisJMHg1ZmIwMmE5ZiwgMHhmZDFiMjc4YywgMHgwMzBlYTk5OCwgMHg4NDFiNGJmNSwgMHhlZmQ4NTk3ZSwgMHhmNzk0MDRjZCwKKwkweDE2MzU2YjUzLCAweDUwOWU2M2I0LCAweGY2MWU5NzMzLCAweDkwZGYxNDZmLCAweDIwZTMxZDcwLCAweDA1ZDg2Y2NhLAorCTB4OTAzYWQ1MTgsIDB4NmJhMDcxNTcsIDB4NjNmNDM5ZjEsIDB4MGY3NzI4M2EsIDB4NDc0NmY1ZjIsIDB4Zjk0NzJlZDcsCisJMHg2MGNjYmEzNCwgMHg5NWYyZTdhOSwgMHgwOGUyNGJlNCwgMHgyZmVlMDI2ZiwgMHhkYTg2YTU3MSwgMHgxOThmNjI4ZCwKKwkweDlkNWY2MGU1LCAweDY5ZDIxNjc3LCAweDBhZTcyYzgxLCAweDMwZWY1YzM0LCAweDgwYmRlNDExLCAweDU3NmRmYjdjLAorCTB4ZWRmM2RhMjIsIDB4ZDAyZjllZGMsIDB4ZmE0NGVjOTYsIDB4ZmU3MTU2YWUsIDB4Zjc3YTMxNjUsIDB4ZDU0NzVjMWUsCisJMHhmNDJjZjE1ZCwgMHhiNDRkODllYiwgMHhjNTY4NDI2YywgMHg2MDY5NjQxZiwgMHgxNGQ2MTdiNywgMHhlZGRjYTI2NywKKwkweGFmODg1YjYxLCAweDEzZmQ1ZWMxLCAweDMzOGZkYmQyLCAweDk5NDVkZjgxLCAweGY4OWU2MDQ4LCAweDRkYTZmMGUyLAorCTB4ZDdhZGRhMDIsIDB4Y2U1ZDIxZTcsIDB4MzAwZjlhZDUsIDB4ZjY1ZjA3ZTAsIDB4ZGNmYmQxMDAsIDB4N2ExZTczNDgsCisJMHhhZmVjYmUwYSwgMHg3Y2NlM2Q3OSwgMHgyNmU3ODA0MCwgMHgwMGJmMzAzNiwgMHhlOWNmNTVlYSwgMHhmMDA0OWY0ZCwKKwkweDE1MTNkM2E5LCAweDRiNjlhZjU0LCAweGMwMTI3ZDMwLCAweDA3Zjg1NWE3LCAweDA5Yjc0N2ZhLCAweDBlYmI5NDJhLAorCTB4MDRhNzJiNzksIDB4YjdjNDA1ZmIsIDB4MGQ3M2Y4YjMsIDB4MDY4MGRmZGYsIDB4ZDk4YmQ4ZWQsIDB4YjA2ZmEyNjYsCisJMHgwZmVmNDk5NywgMHg5YmJhMzRjYywgMHgyMzcxYmY2MCwgMHhhMDU3YjM2YSwgMHhjZTY5OTRmZCwgMHhlYTQ5N2VjMywKKwkweDYzZjQwODgxLCAweDE1NTViZmZhLCAweDE5ZWZjOWJiLCAweDc4YzlmODg4LCAweGQzM2Q3ZDNmLCAweDI4N2I1MTIxLAorCTB4NzBlNmI1ZGQsIDB4Y2QyNmFmN2YsIDB4NTBmMTE5YjAsIDB4NTFkM2FmMWQsIDB4ODhiMTcxZDksIDB4OTI1NjlkOTEsCisJMHg0ZGI5NzY4NiwgMHhkMGNiZmRjMywgMHhiODczN2JmMSwgMHhhZjVlNDkxZSwgMHhhMjQwYjkyMSwgMHgwYjZjYjYwOCwKKwkweGM1ZGQ0YTYzLCAweGY4ZDYzMjI2LCAweGJmMjFiMDhiLCAweDM0YzljMDA3LCAweGM4M2Y2NTYzLCAweDQxNDc2MjM1LAorCTB4MWI3ZjUwNWEsIDB4OGU3YTFmZjYsIDB4OGZmMzFjZjYsIDB4YmI0OTc5NGYsIDB4NWU0YWFkNjMsIDB4Mjk2NWU5MGYsCisJMHgxODNmYTM3MywgMHg3MmFiYzcyYSwgMHhjMGI5NjVhMywgMHg4Yzc0ZmNmMSwgMHg5Y2YxMTFiZSwgMHhlNzdkMDEyNiwKKwkweDUwNGNjOTUwLCAweGIyMzM4NjI2LCAweGQ3NWYxMzM3LCAweDc3M2U5MWJiLCAweGE3ZmQzOWViLCAweDJkZGNiYzg5LAorCTB4MzA5YWZlZjIsIDB4NTc3YTQyZTYsIDB4Yjk0ZDg3ZmMsIDB4NzliOTI5ZjYsIDB4ZTY5NzhmMzQsIDB4OTFiMjVhOTEsCisJMHg4Nzk4MTNhZSwgMHgyNGVjNTdkNiwgMHg0M2Q4MWZhNSwgMHhhYTAyMTI3YSwgMHhkN2M0NzQ4MSwgMHgxNjFjNDk1NCwKKwkweGE2NzIyNzllLCAweDQ0OGNlNTE1LCAweDRmYjFiMGZlLCAweDVmNzdlNDAzLCAweDQwYWFjNDc4LCAweDc4ZTM1NWZjLAorCTB4ZTliOGUwNDMsIDB4ZWYxOTRlMzQsIDB4NGZiMjI1NWMsIDB4MjQ1YzkwNDcsIDB4ODlhNjcyM2EsIDB4NGI1NjJmZTQsCisJMHhmZTgwODhlYywgMHhhMGQ2ZWIxNiwgMHhmNWM2NTM5ZSwgMHgxNGZjMWM4MiwgMHg5MDQ3ZjBmMCwgMHgwODdlNTg4YiwKKwkweGZmZDcxMGYyLCAweDJjNDNjODMzLCAweDEwZjIwYWZmLCAweDNjODI0ZmRiLCAweGYyMDdkMmM0LCAweDA2M2ZkYjEwLAorCTB4YmNlNTg4NzksIDB4ZTQ1NjhkYmIsIDB4NjliNjlhOWYsIDB4N2UyMGQzZWMsIDB4MDE3ZGRiNTAsIDB4YzM2OWRlZjUsCisJMHhhNjQzOTFkMywgMHhlMWU0ZGVhMywgMHhlMWNiYWY5ZiwgMHgyZGVmNDU3ZSwgMHhhMGZkOWYxYywgMHgwMGZmZDFiZiwKKwkweDhhNmI1Y2JhLCAweGVmMWViMmJlLCAweDFlZjliMjM3LCAweDdjYjZkMzgwLCAweDI3ZjQ4NzZlLCAweDFjZDJmYWYwLAorCTB4MjI2ZGQ1MzUsIDB4YjdlMzhlZGIsIDB4ZmFmODZiZTUsIDB4M2UzOTYyMjksIDB4NzlmMzQ1YjcsIDB4YjI0NWQzN2IsCisJMHg5ZTRlYTY5ZiwgMHg5ZTA3MjRiNiwgMHgzZGExNjJkYiwgMHhiZGVmNWZjNywgMHg4ZGI3M2Y4MSwgMHg3YTQzZWRlMiwKKwkweDI1M2U3ZTU2LCAweGVmZjhhNGQ3LCAweDY1MmZkY2U5LCAweGJkMDEyNzY0LCAweGZmNGFmY2QzLCAweDNlNzIyNmY3LAorCTB4NGVlZmVkMGMsIDB4YzNkZDhiMTMsIDB4OTkyZGUzYzAsIDB4ZDAyZjg5NmYsIDB4NDgzZTQ2OWUsIDB4NmE4YmUwMGUsCisJMHg0Mjg1ZjEzMywgMHg1NWZkMGE4NywgMHhhNzM4NzJlNSwgMHgwNzNhNjU2OSwgMHg0M2YwNDJkZCwgMHgzYTcyODMxZCwKKwkweDI1ZjY0ZjRlLCAweGUwYzZjNWMwLCAweDk5MDViYjNjLCAweDAxZjk0MjVmLCAweDBhMDdkNDRhLCAweGEwN2MyODNmLAorCTB4ZjAyMjdiZDAsIDB4M2ZlZDEwOTksIDB4ZjQyMWNkYzcsIDB4Y2E4Zjk0YWEsIDB4MzU4ZWU4ZTcsIDB4ZGFmMDljZmUsCisJMHhkZmExMzZhMSwgMHg4N2NjMzM3NywgMHhjMWM1MTNlMywgMHhmZTQ2ZWY3NywgMHhkMTlhMzU4YywgMHhjODdjMmNmNSwKKwkweDFjOWMzYjUwLCAweGMyZWZmYWViLCAweDU3MGI5MTQzLCAweDcwNjVjNzgwLCAweDVmZjJmMGQwLCAweDM5YzkwMzg1LAorCTB4YmY0OGUzOTQsIDB4ZmRhZGM4YzMsIDB4NWRiMmQxMzksIDB4NDRmN2U5Y2UsIDB4ZDIxZjZkOGUsIDB4NTdhMGJmNTEsCisJMHhhZmQwZGZhMSwgMHhkOWRhYzM2NywgMHg3ZjM5ZjJkYiwgMHgwNTU0NzQyOCwgMHg4OWViMTAzYSwgMHhjYmQ0Y2U3OCwKKwkweDllNzI5ZWU1LCAweDYzMmU3M2ExLCAweGMyZDJmZjI0LCAweDllMjg3Yjc4LCAweGM4MDU3Mzk1LCAweDAxMzljM2JmLAorCTB4YjhjNjFmZjEsIDB4ZDgxZDcxN2QsIDB4NGQ0ZmU4MTcsIDB4M2VkMzM1YzksIDB4NTY3ZTQ3ZmEsIDB4Y2ZmOTk1YjYsCisJMHg2ZjBlNDc3ZiwgMHg4ODk0NGE3ZiwgMHgzMmZkMTQxZSwgMHg4YjQ4MmVkNCwgMHhlOTA2NjRlNiwgMHgzZjQyNjYxZCwKKwkweGZjNGI1M2FmLCAweGU2N2YwNWVlLCAweDNlODcxODI1LCAweDNmZTQ5YjIxLCAweDcxZTMyMGJmLCAweDExNThmZTcwLAorCTB4YWZiZWJiZWQsIDB4NjNkNDJlMGQsIDB4NGUwNmEzN2QsIDB4NmZiZTMwMGEsIDB4NjQzNjE4M2IsIDB4MTM2ZWQ4OTcsCisJMHgwN2RlZWY0MCwgMHhkNGY1MDYzYSwgMHgyYzdiOTAwNSwgMHg3MjczYjE5ZCwgMHg3M2NmYTExYywgMHg3M2ZhMjRmMSwKKwkweGE2MjQzYjM1LCAweDNiNGE1MDAzLCAweGY0ODc5YWJlLCAweDZkNTNiNGI0LCAweGY2ZDBiOGEyLCAweDNkMjE4ZWM3LAorCTB4Y2MxNTZlOWUsIDB4YjVmNDk3NjgsIDB4YmZhMWYxYzIsIDB4ZDZlOGMxYjMsIDB4YTgyMmZmNDMsIDB4MDY2NWZmNjMsCisJMHhkN2NjZGI4ZCwgMHg0MzgzZjhhMywgMHg3ZDUzZWY1ZSwgMHg4NWM2MGE3NSwgMHgxMzUwZWM2NiwgMHgyZjNlOTdkYywKKwkweDNiM2VkMWI5LCAweDBhYTU3ZGJjLCAweDAyZGRhN2ViLCAweDQ1NzE4MzhiLCAweDA0YWVlYWQyLCAweDJkM2U1N2E4LAorCTB4Y2UzMGI0NTgsIDB4OGIzYTI4NjEsIDB4ZTdjYTgyZjEsIDB4ZjMwYmM1OTksIDB4YzkxOGI2NTcsIDB4YTBkYTVkY2YsCisJMHg2MDE3ZDhmZSwgMHhiN2JiOTQ1ZiwgMHgyOWVlZDA2YSwgMHg1ZWRjMTlkZiwgMHgwZWI4M2JiOSwgMHhlZmY5MjJmOCwKKwkweDAwZjY4NjY4LCAweDhlNmRmY2Y5LCAweGNkZWM4NjMxLCAweGVkMWIyYzcxLCAweGUzYzBkNjRkLCAweGJmN2M4YWI5LAorCTB4NzE3NTZlZGMsIDB4Y2I4MmJhMzksIDB4OGNiZWM2NmQsIDB4ZWE1ZjdmNDUsIDB4NjNlOTJhZmMsIDB4OTFjZmFmMDMsCisJMHhmZWEwYTdlYiwgMHgyZjFjNTdmOSwgMHhlNWFhNWMwYSwgMHg2MDRmM2ZiNSwgMHhiNzljMGY1NiwgMHg0MjZmNTNiYSwKKwkweGZkYmFiZmZmLCAweGI3MTgxMWVmLCAweDUxZjMwOWFmLCAweDIyYmQ5ZjdjLCAweGRiZGVkMDk5LCAweDEwYjkyNmQ4LAorCTB4ZmQwZWNlYmUsIDB4NTZlMDExMmUsIDB4OGQzZGUwN2QsIDB4NWY3MDg4ZDksIDB4YWRjYWY2NGUsIDB4ZTMxZWI1Y2MsCisJMHg2NDUxNWVkYywgMHhkZDQ3NDRkZCwgMHhiNjY2YTcxNCwgMHg0ZjM4YTU4MSwgMHg4NGRlYmI1ZiwgMHgyYmY1NDA3NiwKKwkweDhkZGQ3NDFmLCAweGQzMDIwM2Y1LCAweGZiNDcxZTIzLCAweGVlOTY0ZTg4LCAweDJkYTU4NjQwLCAweGZiZTQyNmRkLAorCTB4YmM0MjQ0ZTksIDB4OTEzZDllMjIsIDB4ODg2NWFmODQsIDB4ZTAzM2M0NzcsIDB4MjEyY2YxMWQsIDB4NTFiYzcxM2UsCisJMHgyMjc0ZTZlMywgMHg3M2Y0ZmQ1MSwgMHhkZTBhYmYxYywgMHgxYWNkYTQ4YiwgMHhlNDZjYWY2YywgMHg2M2IxOWU3OCwKKwkweGEyMzBiNmNmLCAweGU5OTMzNTAzLCAweDdhN2VmMDgwLCAweGE2YmJjNzI3LCAweDE0NjY5ZDczLCAweDA4NjM2ZmQyLAorCTB4ODc2YmI0MWQsIDB4NzdmNzAwZTgsIDB4ZTA4NDFkMTksIDB4OGRmMDAyYmYsIDB4MGU5NDIwNzIsIDB4OTNkZmYxNDIsCisJMHhkODA2ZTVjMywgMHg0MjlmYTdkZiwgMHg3ZTA4ZGJmYiwgMHgyM2M3ZjMwMSwgMHgxZWY1NTY0NiwgMHhjYWY1ODE4ZCwKKwkweDk3M2JjZmEyLCAweGY4ZDhmYjQzLCAweDA4ZGE1ODk3LCAweGU0MTU3ZjhhLCAweGU2NmJmYzYyLCAweDVkMTBlYjNiLAorCTB4Yzg1ZWIzM2QsIDB4NTdhOTdhNDYsIDB4ODEzY2Y2ZmIsIDB4NzBhODhiNzEsIDB4MjdmNGUzOGEsIDB4MzJmOWQ5Y2YsCisJMHhmYTIwYmI5YywgMHhkODE2YTQ5YiwgMHg1YTZiY2Q3ZiwgMHhjOTI4ZGViYSwgMHgzNWVjODcxNSwgMHhmMTI5OTc4YywKKwkweGM1MzNjMDc0LCAweDVhMWQ5Y2M5LCAweDJkNmIxNzFlLCAweDczZmEwNWI0LCAweDVjZmMwOWZkLCAweGIyODE5YTg1LAorCTB4YzAxN2U4ZTUsIDB4NjA4ZWI4N2MsIDB4NTU1ZTdlZTMsIDB4MjgxNzhmMDcsIDB4MTI5NTU5N2UsIDB4OGUwZTY4MzcsCisJMHg3N2E2MDgxYiwgMHgyZTQ1NWZhOCwgMHhjNmE1NWY4ZiwgMHgzYjQ2NmNkZCwgMHhiMzAxN2ViYywgMHg0ZDVlYTU4NywKKwkweGNjNzhmMDNmLCAweDc0ZGZiMmQzLCAweDBhZjFmYjQ1LCAweDFiYjE0MjdhLCAweDZlMzgyYjk5LCAweDY1YTljOGExLAorCTB4OGYxZWY5MTMsIDB4NmFiOGUyZmUsIDB4NzZmZGM2MDQsIDB4OGE4Zjg0MGIsIDB4NzA0ZjkwMGUsIDB4ZGFiNzBhZGUsCisJMHhmODAyMTY2ZCwgMHgxOWZmZWU0OSwgMHhlZGMwMWJkMiwgMHhhMGY2YWI4YywgMHgxOWRkMjEyOCwgMHg5OTBlYmY2OCwKKwkweDhlOTFhYjNlLCAweGQ2OTViY2UwLCAweDljZjAyMjM3LCAweDM4YWU1OTBlLCAweDdmMTQ4ZGRhLCAweDhhNWI2NGFiLAorCTB4NjEyYWVlOTAsIDB4ZjQzMGVmM2QsIDB4MGI1Y2Y5NTQsIDB4YTJkNzI5ZjksIDB4YWNjZWM1MjcsIDB4YjdlZTBkNmUsCisJMHhjZTQ4NzczMSwgMHhlMDFlZmY4YywgMHgzOTY0MDFiYiwgMHg5OTJlN2JkNywgMHhmMTIzMzJmZSwgMHg5OTkwNmZkZSwKKwkweDg3OWY5MTIzLCAweGVkYzA5ZmY0LCAweDVjZmU0NTM3LCAweDNjNTgxZGJmLCAweDZlNzFkZTYwLCAweGFjMDU1MzFkLAorCTB4YTY3M2UzN2YsIDB4NGY3OGZhYTAsIDB4OWJmZjUwN2MsIDB4Y2Y0MWNjZGEsIDB4NDExOWJkYjMsIDB4NTk4ZjczY2YsCisJMHhkZDc5ZWE4MiwgMHg0ZmZhODMxMywgMHg1NDE2ZDBmOCwgMHgwZTJiZTQ5ZiwgMHg0Y2U1M2ZlYSwgMHgzMDdkNTA0OSwKKwkweDk1NzNjZTEzLCAweGUzNWJjMWZiLCAweDMzZmVhMDg1LCAweGY5YTBmYWNkLCAweDA1NDQ2NzY3LCAweDMyMGQwN2Q1LAorCTB4NTJiYjY0N2MsIDB4Y2U1Zjc3YjEsIDB4Njg2ZWY2ZTUsIDB4NzZmN2MwYTksIDB4OGEzYWYwNGIsIDB4YzRlNzdlYmYsCisJMHhkOGU2ZjVlMCwgMHhhMWZiZDc4MiwgMHhmYTBiZDk3OCwgMHhjMjdlMDU1NCwgMHhiMTVmYTA3MywgMHgxM2Y4MWRmYywKKwkweDlhMTNmMDJhLCAweGZhYzA5ZmMxLCAweDYwNGZlMDhiLCAweDAyN2YwMWU5LCAweDdmMDI1ZmRiLCAweGUwYWRlYjAyLAorCTB4MjBmZDYwNGYsIDB4NmY1ODNmZjgsIDB4ZjJhNjJiYWIsIDB4NmExMmJhOTUsIDB4YmFmYzE2YmYsIDB4Yzk4Zjc1ZTQsCisJMHhkNzk3MWVlYiwgMHg3NGUxNzdmZCwgMHg1ZGVmOWU0MiwgMHg5YzZlYmU3OSwgMHhkY2ZmY2QyZiwgMHhiYzU2M2M1OSwKKwkweDJkM2NmYzA0LCAweDg3YzZhY2ZhLCAweDVmMGFjMzdlLCAweDA2MmRjNjExLCAweGM2MTg5MmRlLCAweDdkZGQ5OWE1LAorCTB4ZjUwNjJlYWMsIDB4MzM4YTA4ZDksIDB4Yjc4MTkyYjMsIDB4N2Q1MmFlMzEsIDB4YzliNGQ1MjAsIDB4MGZlY2ZhOGMsCisJMHhiZWYzZTJlZiwgMHg3YzhjYzk1NiwgMHhlZmVkYTg3OSwgMHg4NWNmMzgxMSwgMHg1Zjc0NjE0YiwgMHhlZjEwN2E0YSwKKwkweDU0NjFiZjFiLCAweDMxY2YwNGRmLCAweDA1YjMzYTBlLCAweDM3ZTkwODA0LCAweDBiYjdlOTBmLCAweDRkZGQ0YTY5LAorCTB4Y2QyNWJkZjcsIDB4NTNjNDFhMmQsIDB4M2MyOWYyMTUsIDB4MGVhM2NiN2YsIDB4NjM1Y2ZlN2UsIDB4ZjYxMzczZDAsCisJMHhlNTRhYjI4NywgMHhiOWMyMzhhNiwgMHgyZjNlNjUzNiwgMHhmMWE0NzdmNSwgMHhjZjczY2Y3YiwgMHgwNTNmNWUxZCwKKwkweGUyY2I2ZmY1LCAweDVlN2Y3ODExLCAweGVjNWVmY2Q1LCAweGM3YzE1N2JkLCAweGM4NWYwN2U3LCAweDc2Y2FmYmE0LAorCTB4OWZlMGNmOTgsIDB4OTZhZWQ5Y2YsIDB4OGVmZjdjZWIsIDB4NjhhMjk2YjQsIDB4MDJjZDFjNTQsIDB4MDVjNTBiMWIsCisJMHg1ZmVlODViNiwgMHgzOGY2ZGFhYSwgMHg2NTU1NmU1MCwgMHgwMDY2YWRkYywgMHgyNDhmN2U5ZiwgMHhiZGY4MzdjNywKKwkweGI4YzRjMzkxLCAweDIyZjllNzFkLCAweDVmNTdlZjAyLCAweGMzYmQxY2Y3LCAweDM4ZWRmODg2LCAweGY2ZWI4MTFjLAorCTB4ZmU0MTRhYjcsIDB4YjcyYjY4ZDMsIDB4MzU1YjQ3OGYsIDB4YWQwYmJmODQsIDB4NWVmMDIzODcsIDB4MzBlN2EzNzcsCisJMHg0YmNhYmI4NywgMHhkNzI0M2ZlNywgMHg3ODI0YTFmYiwgMHhmZTc0NDliNywgMHhkMDYyNGI4YSwgMHg1NTg2NzYzZCwKKwkweGI2NjY3OWEyLCAweGI5ZTIzNThkLCAweGJkN2MzYzdhLCAweGI3OTlhYjFjLCAweDgyNWUyZGE3LCAweGJmMWUzZmZiLAorCTB4N2IyMjRmMjAsIDB4Y2EzNTA0MTAsIDB4ZWY2NjFiZjEsIDB4Y2FhNDNiNDEsIDB4ZjM4NmQ5MjMsIDB4NzllNDBhZWYsCisJMHg0ZTljZDRiYiwgMHhkZmRiNGFkZiwgMHg3OGY4ZjI4NSwgMHhkMjZjODhmMSwgMHg2OTlmOGExMSwgMHg5MTZmNzZlNSwKKwkweDdhODY5ZWM2LCAweDM2NjBjN2E0LCAweDU4M2Y5ZDIyLCAweGZjNDQ2YTljLCAweGRiMTJjMjFlLCAweGVjNjk3NzhiLAorCTB4ZTZjN2JjMDYsIDB4YmE5OGY1ZWIsIDB4N2FlZTkwMjMsIDB4YjQyNTczNWEsIDB4ZjJmOTk0NzcsIDB4ZTg4Nzc1ZTUsCisJMHgyZTZmMDg3YiwgMHhiYmI5NTNjMiwgMHhmOGYzODBkMSwgMHg3M2RiYzdmMSwgMHg3ZmVhMjZhYywgMHgzY2RlZmRkYywKKwkweDMyN2FhYmI0LCAweGU5MmVjOWMyLCAweGE3ZjIzMGQyLCAweDVkYjk5YWFiLCAweGQ4OTFkM2RjLCAweDkyNGY3ODE4LAorCTB4ZjJmZDk1NjMsIDB4ZGFmMDkxMGMsIDB4ZmI5NmE2ZDcsIDB4MDU4N2JkZGQsIDB4MzlkMzUzZjUsIDB4ZGUwZWVjMmYsCisJMHhlYTdkYzk4ZiwgMHgxZGM3YjQ1MSwgMHhmNTBjNGI0ZiwgMHgxYjVkNDNhMiwgMHg2Y2ZmZTc4YiwgMHhjYWZlZjA2NywKKwkweGQ0M2IzODY1LCAweDAwZDhkOGRlLCAweDBmYjQ3NTdhLCAweGU4ODE4ZGYxLCAweDEzZTE1ZGJjLCAweGMxNTNlMTMzLAorCTB4YjcwNjRmNjMsIDB4ZjllMjdhZTcsIDB4NjVhM2E0YmQsIDB4ZTVmNWQxMGYsIDB4NjRlZWE0ZjEsIDB4N2YxMjFmZjQsCisJMHhlNzc4YTNhOSwgMHhjNTY3ZmNiNSwgMHhhZmYwMDg2ZSwgMHhlYThiZmExOCwgMHgzMTNjZDRlMiwgMHhiYzFmNmZjNSwKKwkweGI2YWI2Yjk2LCAweGFiYmY0NDhlLCAweDFlY2FmYzg0LCAweGFjMmNmNjA2LCAweDNhN2I0NGU5LCAweGI2MWZmMjkyLAorCTB4YWQ4M2JhZTEsIDB4NzZiZmJhNmEsIDB4N2Q2NmRhZWEsIDB4YTBkOTc2MDIsIDB4ZjYwNTE4MDUsIDB4MmQ1M2I4M2QsCisJMHgwY2Q5N2JkZiwgMHg5NTJlZDc2OCwgMHhjY2NmZGFlZCwgMHhmNDA5N2NmNiwgMHg0ODhkNzNhZiwgMHg4NjY0NzNlNywKKwkweDI3ZDMxZjkxLCAweDViY2ZiZGNiLCAweGJiMjRlZjkyLCAweDQyNjQ5OGUxLCAweDg3ODY2ODdmLCAweDY2OGVjMWRiLAorCTB4N2I1NmQ3NmUsIDB4MmE2M2ZmOTIsIDB4NmFjZGVkZGEsIDB4OGE2MGQ0Y2MsIDB4ZWQ5NGUyMWQsIDB4ZGRiMmQzOTAsCisJMHg4MGNkN2E3YiwgMHg0ZTliZmM4NiwgMHg4Yzk2M2Q4MSwgMHhiYjViMmE3OSwgMHgzM2I5ZTExMiwgMHhiM2Q5MTY3MywKKwkweGVjOTlhOTRlLCAweDgzZGI2NTg5LCAweDZmYjAwN2VkLCAweGNmNTVlYTgyLCAweDcyMTdkYTg1LCAweGRjMTNjYjdjLAorCTB4ZGI4N2Y4YWUsIDB4YzY3NjQzYWMsIDB4MGE2N2Y0MzgsIDB4Yzg3MWE5YTUsIDB4NzhjODJmMGYsIDB4OTU5YmZjNTUsCisJMHhiNzk0MmRlMywgMHg5ZTY1NTFiMywgMHgxMDIxYzRhNSwgMHhmYjlkMzU1ZSwgMHg2ZWRmNzAyYiwgMHhmYzg1OTg0NywKKwkweDEwYWY1NThkLCAweGU0YmZmYjVjLCAweDNjN2Y0YzdlLCAweDMzZjQ3ODIzLCAweDM2ZmVkZjBlLCAweDZhMzVlNzRlLAorCTB4NDhmOThkYzEsIDB4MzRiNjQwMzUsIDB4YWY3MDRlOWYsIDB4NmJiMzM4YzEsIDB4MTNlNDgyMzAsIDB4MTdjOGM1NjMsCisJMHg3ZjcwMTYyYiwgMHg1ZjMxODZkNSwgMHg3ZTE1NmIyOCwgMHhiN2FiZDEwOCwgMHg1NDUyN2NhOCwgMHhiMzY4OWM4MCwKKwkweDAyYmY1MGE2LCAweDNlYTNiMzBkLCAweDkwYjQ2OTViLCAweGUzYTMxYjdlLCAweDZhZTE3YTc2LCAweGMzZDIzNjRmLAorCTB4YjVjN2YwMTgsIDB4MzFmOGYxMDEsIDB4ZmIwMTAxODYsIDB4Yzc4MDdlZWQsIDB4YzI3ODk1ZmYsIDB4MWQ0OTk1MWMsCisJMHgxOTFmYTAxNSwgMHg5NWZkNDM1YiwgMHhmMGEyNDFmOSwgMHhkZjlhZDdmMSwgMHhmYzFiZjMwNCwgMHgyM2JjMDNmMywKKwkweDU4NWZkZTExLCAweDkzYjdhNDJkLCAweGZmZjcyOGU2LCAweGNhOTdjNGI1LCAweGJkMDAyZTc5LCAweDYzMTgxYzYxLAorCTB4YzczNzg4MzQsIDB4OWZjODM3Y2UsIDB4ZjVlZWIyNzMsIDB4ODIyOGFlMzgsIDB4ZjcwOGEzZWYsIDB4NWUzMGY1ODMsCisJMHhlNzk2NTFmZSwgMHhiY2JjNzliMSwgMHhmOTE1MmU0ZCwgMHg3YjY3OTBkNSwgMHg5NWY1MGFkZiwgMHg1OTNmZjY3OSwKKwkweDg4OTlhZTQ5LCAweGI0Y2E1NzNlLCAweDljNGNmNjAyLCAweGJiZjkxODZmLCAweGYwODkxZGUyLCAweDAzZjAwNWZhLAorCTB4NWFjMmZiZjIsIDB4NjQxNjljYzEsIDB4YWYzYTcxMmYsIDB4M2NlYzRkZTEsIDB4NDU0ZWY0ZjMsIDB4ZGQ2Y2I4MzgsCisJMHhjNmQ3OTgxOSwgMHg1YTJkN2YzOCwgMHgwNWE3MzdhNSwgMHhiZDIwMDdkZSwgMHgwMjUxZmZhMywgMHgyZmQxZjJmZiwKKwkweDUzNzJiZmUzLCAweDU3OTQ2ZGM1LCAweDhjZDYyYWI1LCAweGM4MzUxN2Y3LCAweGE2ZDcyOTBmLCAweDg3YmE1MGZmLAorCTB4YjdhNDRlZGYsIDB4YTBiNWE2NmEsIDB4MGI2OWE5N2UsIDB4YTE1MTZlN2QsIDB4MDg0ZGZlM2QsIDB4NzRjOTI0NWYsCisJMHhlODE3NjhkYSwgMHg1YmYxYmQ3ZSwgMHg5NWEzOGYxNSwgMHhiYjM3MTQwYSwgMHg0ZTkxMWEwYiwgMHhjYWZkODdlOSwKKwkweDdlNzFiOWE3LCAweGZiYTBiM2NjLCAweDM5MTg4NmFlLCAweGVlODYyYmVmLCAweDlmMjI3ZWUxLCAweGY3OTUyZWZmLAorCTB4YTNlZmU0MGQsIDB4YzYzMjRmNmEsIDB4ZjkzYThlNzEsIDB4ZTYwMmQ1M2QsIDB4NTJkZDdiYTEsIDB4NmY2NTRkZDYsCisJMHgyZjAxZjU3OCwgMHg4ZDFhZWU0ZCwgMHg3NjA3Zjg3ZSwgMHgxYTkxYzUyZCwgMHg1MTE5MzZkNywgMHhiNWIxNjZjZSwKKwkweDAzMWZiYzI2LCAweGZiZWU3OTM2LCAweDFiZGIyYmRjLCAweDk0NjhmN2ExLCAweGM3ZTc5NTlmLCAweDkyYmNjYWYzLAorCTB4ODNhMDNjZjgsIDB4ZjhhMzgwMzMsIDB4NTdjN2NiOWMsIDB4MDIyMDdmYmQsIDB4ZmVmZTdlZTEsIDB4Y2E3ZWYzZmQsCisJMHhiOTAyMGZkMCwgMHhkNjU0ZjMwNSwgMHhiZGQwNjRiNiwgMHg2Nzc1OGI4YywgMHhhYmYxZmJlNCwgMHgxZmMxNTNlMCwKKwkweGYwODM5OWI0LCAweDBlYjk2NzBhLCAweDBkOWYzM2UwLCAweGQzNmU2M2U0LCAweGMwYTlmMGI1LCAweGYwM2Q0OTM5LAorCTB4ZTgyNTA0NjMsIDB4YTE0MzkyMzEsIDB4NWVlMDU2NzgsIDB4M2NkNTZhY2QsIDB4ZWVmYjU2ZmUsIDB4YjNmZmU4MDIsCisJMHhlZDE5YTJiNSwgMHg3ZWYwY2JjYSwgMHhmNTc4ZmMwZCwgMHgyOGQ3OTFmYywgMHgyNTdiM2Y5MCwgMHg1YTc4Mjk3YywKKwkweGZmNTRiY2M4LCAweGZiOGY4YTMwLCAweGYxNDRhMTcwLCAweDdjNjlmZmMzLCAweDRiZDllNDM1LCAweGI3YzJhZWYyLAorCTB4MjU3YTdjYTEsIDB4MmFiNDVjYmUsIDB4Zjg0MzdmODQsIDB4MmQyZjg4NzQsIDB4N2YwMDJmZjAsIDB4YzQxMTU1ZjYsCisJMHgxZDdlMGE4ZiwgMHg1MTkzZjA2NiwgMHgyZDE4NzVmZiwgMHgzZTM5NzY2ZSwgMHhmZGM1ZGZkMSwgMHhlYzBhYjY1NCwKKwkweGYwODdlMTQ5LCAweGUzZmM4ZmFiLCAweGFkMDE3YzUwLCAweDU0MWY1MGQ4LCAweGE5ZjMwNWU3LCAweGM5MmJjNzgyLAorCTB4N2RlZTQ1MmQsIDB4NGQ0N2JjYzQsIDB4NzA2N2RkMDIsIDB4OTY4NWZlM2UsIDB4ZmI5NGU5ZjIsIDB4ZTJkZWU1MGMsCisJMHg2ZmFlM2NkMSwgMHhjMDhmY2I0MiwgMHhhMjdiYzE2ZSwgMHgyMzNkMTk0ZCwgMHhkNWViZGVkMSwgMHg3YmYwZjMyOCwKKwkweDc0ZDY4ZmQ3LCAweGNkN2NjNjhmLCAweGIyZjFhNjhmLCAweDRjZjNjMzU3LCAweDhjMmRiYTk0LCAweDRhM2YwM2M3LAorCTB4NmUxMGJhZDAsIDB4YTZlMzA5MWYsIDB4OTFmMDFkYTMsIDB4NzgzYmNiZjAsIDB4YzY2MzRlM2QsIDB4ZTliODgyZmEsCisJMHhhYWY3YTgyNiwgMHg4M2UxZjg5NSwgMHg1Mzc2ZmNiMiwgMHgwOTgyZDFmOSwgMHg2MDRmZDQwNSwgMHg2NjFlMTA0NywKKwkweDNhZDA5NTgxLCAweDBjNWQxMDgyLCAweGU3ZThmOWZiLCAweDVlZjA3MzYzLCAweDAzZmYzOTQwLCAweGY0OGUzYzc5LAorCTB4NDMxY2Y5MWIsIDB4MDk1ZmY2ZjEsIDB4MDQ1ZjZmMTQsIDB4Zjc4NGMzYWEsIDB4Mjg5ZmQzMDIsIDB4OTNmNjgxNGUsCisJMHhhNmNkNGViZiwgMHhjMTE1Y2FmYiwgMHg0ZGZlYTNlYiwgMHg1NmU1MzhhNiwgMHg0Yjk2ZTc5YSwgMHg5OWM1ZWEwMywKKwkweGU5MGQ3ZGZlLCAweGJjOGI4MmNkLCAweGEwZDhjOTdkLCAweGY0NWI2NjdjLCAweGJiMjdlZTM4LCAweDhmNTEyMzUzLAorCTB4ZjA2ZDdhMjksIDB4NjA0MzdlZDgsIDB4MWNhY2Y1MWMsIDB4OGZhYTFlNzcsIDB4NTAyOTI0N2IsIDB4ZjdiMWJlMmYsCisJMHhhNzljNzRlMSwgMHhiMmNhZTM1YywgMHhmOThmMzAxOCwgMHgxZmI0MjRhOSwgMHg5NDNlZjdjYSwgMHhkZWVkNzY0ZSwKKwkweDlmZThlOThkLCAweDljM2QzNzk0LCAweGI4N2FhMzZlLCAweDE1MjNmYzlkLCAweDdkZjlmNzNmLCAweDBhNmQ3NjkzLAorCTB4OWQ2ZmEzYjAsIDB4NTJmYmVkYzAsIDB4Njg4NTFiZGQsIDB4ZjFiYWNlZGYsIDB4YjcxODc1ZjMsIDB4ODE2YmZiMWYsCisJMHg1OTBiNzBlMiwgMHhiN2Q0M2FmNywgMHhhZjljMTk2NSwgMHhlNDhlODM1OCwgMHhmNzQ3Y2MzZiwgMHhkZGM2N2JhNCwKKwkweGZlZTUxYmJlLCAweGFiYmY4Y2YxLCAweGNkZmVhMDk3LCAweDY1N2NkMTUzLCAweDBlMzliZGNjLCAweDA0MWI2ZmUzLAorCTB4ZmJmOWJmOGEsIDB4ZDc3YmE2OGYsIDB4NGQwNTZiYzUsIDB4NTFlYTBjN2MsIDB4YzdmZDc3OWUsIDB4ZTM4MjI4YmMsCisJMHhiYmIyMWIzZCwgMHgzNTZjYmRiMCwgMHg3NWE1OWY2ZiwgMHgzY2UwZjZiNywgMHhjZjI4Njg0ZiwgMHg0YTY1MTQwYSwKKwkweGY2M2RjMDQ5LCAweDNkZjhmMzFmLCAweDcyY2RhMmRkLCAweGNlYmNiMWJlLCAweDhkYjE2ZGQ4LCAweGEzZmNlNzgxLAorCTB4ZmU1NjdmOGMsIDB4M2I4M2M5MDEsIDB4YjZkY2JjNjUsIDB4ZjEyM2JkZmEsIDB4ZGFhNDZmMzAsIDB4MmI5NDY3ZmUsCisJMHgzYTdlM2VlZiwgMHg0MTU5ZTUwZCwgMHhhNDRjZDlmNCwgMHhmYjFhYjFmMywgMHhlZTc4MTU5MywgMHgyYmM1MmQyNiwKKwkweDUyODk1OWFkLCAweGI5Y2ZmNDFjLCAweDU4NjNkYTdmLCAweGY4YmQ1YTJlLCAweGZiOGMwYWM5LCAweDFmOTFkNzZlLAorCTB4ODU2ZmVjYTYsIDB4NWZkMTE2NjAsIDB4ZDNmOGRjM2QsIDB4Njc2ZTEwN2IsIDB4YTQ3OWU3MWUsIDB4OGZhZjFhMmIsCisJMHhlMmZlNWFiYiwgMHgxZjNjNzViMywgMHgxZDNhZjlmYywgMHg5OWQ0MmY5NSwgMHhiODhlMTk5OCwgMHhlYTllMmVhZiwKKwkweDUzMzNhZmJmLCAweGZhNzNlNmM5LCAweGFlYTZmMjUyLCAweGE1ZWU1ZjM0LCAweGI2NWJjYTMwLCAweDFlNTFkMDZlLAorCTB4ZjZkNmFlN2QsIDB4NmJjMDFlNTUsIDB4YTZjZTBkZWMsIDB4YzZiOWYyOGQsIDB4NTc2Y2Y4YzIsIDB4ODM4NDBjZjIsCisJMHgyZWYyZTM3NSwgMHhlNTRmNjEzNCwgMHhlZGVhZmY3MSwgMHg2NDQ5MGQ5ZSwgMHhmNTNlYWY4NywgMHhjZjNjMDU0YywKKwkweDBlZjkyZmNjLCAweDVlNzZlYmM3LCAweGUxYzE3OGE0LCAweDEwY2E4N2Y2LCAweDVhNGRlNWRlLCAweGRjZjkzZTdlLAorCTB4OGY0ZjFlNjcsIDB4YmNlMzEyN2IsIDB4N2ZjOWE5NmYsIDB4ZWE3OWQ5YWYsIDB4ZGU1MDhkOTksIDB4MjZiOTc5YmIsCisJMHhlODdmZGU5MCwgMHhmNzk1YmY3OSwgMHhiYWJlMmQ3MywgMHg3NWZlMWMxMiwgMHg4OTM4N2FiZSwgMHhmODA5YTdmOCwKKwkweGU3ZGZmMzJhLCAweDZiZDU5YWFiLCAweGYzNzM3ZTA4LCAweGMzZTZjNjRiLCAweDVkYThjZmZlLCAweDY3NGZjODQ5LAorCTB4NzQ0Y2RkYzYsIDB4MDgxNGVhZWUsIDB4NTcxYzhhZmUsIDB4ZjNlNmE3YzYsIDB4ZDEyYWU4ZmIsIDB4NDhlYzk5YjMsCisJMHgwNTdmOGU1OSwgMHhmN2MyMjM5ZSwgMHhkMmNmZjY4ZCwgMHhhYWZlOGVkMSwgMHhjZjU1YzE2ZCwgMHgzZDBlYjA3ZCwKKwkweGU5OWI4YzIyLCAweDllN2QwY2E4LCAweDYyYTdiMWFmLCAweGM4YmU3MTVlLCAweGU3ZDBlN2VkLCAweDcxMmJlN2I3LAorCTB4YzViNzFlNzgsIDB4YTc5MDEwOWYsIDB4NDU4ZDg0ZTIsIDB4MTNmZWEzNDYsIDB4OTcyMDYxYmMsIDB4OWViNzZkOWQsCisJMHgwNmZmYTE1NSwgMHhjMWM3ZTE3ZSwgMHgzOGZiMjg3NiwgMHg2OTVmYWY0MCwgMHhhYjJhZDdiZiwgMHg1Zjk1MWU3MSwKKwkweDUwZjg0ZWVlLCAweDNkMDBkZTY0LCAweGM2MTdjOTNlLCAweDBlZWIwMWJjLCAweGE2ZDAyYmY5LCAweDA0OWVmYmExLAorCTB4Mzc4ODBiOTIsIDB4NmJlYTg3Y2MsIDB4ZjU4NGQ3MWYsIDB4Yzc4ZTFhYjMsIDB4OTdlMDgzYmUsIDB4OTMwY2I4ZjEsCisJMHgzY2U3ZmRmMiwgMHgwYjNlN2VkYiwgMHg3OWU4NmNlNSwgMHg0ZjM5NWZhYiwgMHg3YjY4ZTFmNCwgMHhlNzQwYTJlOCwKKwkweDk1NTY3OTlmLCAweGJmZjNlZDc1LCAweDE2N2NmN2IxLCAweGRhYWNlZmUyLCAweDU3ZmU4Zjk3LCAweDg1OTdjNjlmLAorCTB4OTU3ZWE4NzgsIDB4MTU3ZmYzY2IsIDB4YzU3YjRhMGUsIDB4MTM4ZjBkMDYsIDB4MjNmMjI2MGEsIDB4MTQwYmE1MGIsCisJMHhjNjNiZTgwNywgMHhlZGQ1MDBlMywgMHgwZTllNDhiYiwgMHg0Yzc4ZjA3NiwgMHgxNDVkZDg4ZCwgMHhkYThiZjE4NywKKwkweGNmMjg1ZDUzLCAweDVmYjllMzA2LCAweDI4ZGJmMzA2LCAweGQ2NTUyMWNmLCAweGE0ODFhYTgzLCAweDFlZDcyMDM5LAorCTB4ZWUwN2EyMTksIDB4ZmU0MTllMGYsIDB4MWUzY2UwZDUsIDB4NjU2MWU1MDcsIDB4MmJiNDMzODUsIDB4NDMzZjIxY2UsCisJMHhlNGFhZDk3YiwgMHg2N2U3NDhmNSwgMHg1MDczMjNkYywgMHhmNTlkYmUzZSwgMHhkZjhhNmE4ZiwgMHg5MjZlMWViZCwKKwkweDMwOTU4ZWM4LCAweDRlMDg3OGM3LCAweDRiNzBlNzQzLCAweDI5ODdkMTNjLCAweGIzMzg3MTc2LCAweGQxYWJmNDA1LAorCTB4YmYyNGVmOTgsIDB4OWZiZjM4ZmEsIDB4ZjM4MWI5YWIsIDB4ZjM4NTdiMTMsIDB4MWJlZDczOTMsIDB4Zjk4MGY4OWEsCisJMHg5M2YzMjU3ZSwgMHg3YWNlNGY2MiwgMHg5N2M0MWZmZCwgMHg5ZWRhZTcwZiwgMHg0NzBjYmU0MCwgMHhjNWYzODg1OSwKKwkweGI1MWU1MjQ3LCAweDcyODcxZWYyLCAweDkwZTg2OTFmLCAweDg5NjJmOGZkLCAweDQ5YjRkNzllLCAweDU4ZTVlZjBjLAorCTB4MGFmMjkxYmMsIDB4Y2ExNmQ5OGEsIDB4M2NjNTljYjcsIDB4OGY1ZTc5NTMsIDB4ZjAyOWQxZWYsIDB4NTJlYmY2N2MsCisJMHg4MWExZTYyZSwgMHhkYmY3NGQzZCwgMHgzNGY2NjE0NSwgMHgxNWVhZDNjYywgMHgxZWFlMTkwNSwgMHg3ZDAwOWNlYiwKKwkweGY3M2U3ZWY2LCAweDAyNGFhNzU3LCAweDg0ODFiMWU5LCAweDY2NTNiMjcwLCAweGUyOTY3N2NlLCAweDVhN2U5NTdlLAorCTB4OTgzM2ViOTEsIDB4ZTYyY2VjODcsIDB4N2JjMmM4MWUsIDB4YzgxZGU2NTUsIDB4YTU1NmZiYzIsIDB4YzNkN2JjZGYsCisJMHgzMjJmNDk2YiwgMHhjMDVlNzU4ZiwgMHg3OWYzYTczYSwgMHhiYzBiZjNiYywgMHg1Mjc5MDcxZiwgMHgxNmMzZGYyMywKKwkweDQzNmVkZjRhLCAweDI3NDU2YjdmLCAweDE1ZWM3ZmJmLCAweDNjYzAzZjkzLCAweDE5YzAxNzMzLCAweGYwMWU3YWYxLAorCTB4NjNmZDQzNmEsIDB4ZjIxYjM2NjcsIDB4NmU5MWY4Y2YsIDB4N2Q5YTlmZTQsIDB4YmQ3Y2MzMDIsIDB4MTM2ZDc2ZWEsCisJMHhkNWFhODVjNiwgMHhlN2E0NThiZSwgMHg2YmVmNmQ4ZCwgMHhmMDZiOWU5MCwgMHg4ZTNjNzY1ZSwgMHhkY2JjNzI2NywKKwkweDM1YmY3OTQ0LCAweGY1ZWZjNjI2LCAweDAwZmZhZWRhLCAweDYzY2U3NmUzLCAweDU1M2E4YjVjLCAweDAwM2M1MWVmLAorCTB4NTdhZTM2ZTUsIDB4ZmU0MmRhZDUsIDB4Yzk3OTgzYmYsIDB4MDczNDc3ZmYsIDB4M2M2MGNkZDMsIDB4ZjI4N2U3OGYsCisJMHg3MzdjZTljOSwgMHhkY2NjN2YxMCwgMHgxZTYzZjljZSwgMHg2ODFiNzNlNiwgMHg2NzVmYzUzOCwgMHg1ZDkxYzdjNiwKKwkweGYxYzcxZmUyLCAweGFmY2U5MzYwLCAweDNmYTYzYjQzLCAweGZjN2NhMDQ1LCAweDVhZDczMGZlLCAweGU5NWM4ZmI0LAorCTB4N2ZlOWFlZGMsIDB4YmQyYjA1ZWQsIDB4NWI3M2EzZjcsIDB4M2NmOThjN2YsIDB4NzMzYmRkYjIsIDB4MTQ5NTU2YzMsCisJMHgxZDk5OWZiMCwgMHgxZmQ4ZGUzYywgMHgxMjBmY2FjNiwgMHgyMWQ3ZWRkZSwgMHgyNWI5N2MzZSwgMHhiZTMxZjI2NywKKwkweDc3NzgxOWEzLCAweDQ0ODNjNjBhLCAweDNkMGQxZjFlLCAweDZiOGU1ZDg3LCAweGZkZmM2NzFjLCAweGIzZGY2NTI4LAorCTB4M2NiOTEzMTMsIDB4YTNhMjZlNjMsIDB4NWJiZjM5MmUsIDB4YzY1MWQ3YzksIDB4NTA0MTMyZGYsIDB4OWZiOGQxZWUsCisJMHhmYWFlNTgyNCwgMHhkN2RlMWE1ZSwgMHhkZTJiOWU2MCwgMHgzYmY5NjBkNywgMHhlZjE2MWYzOSwgMHhhMmZlYjA2YiwKKwkweGY3OGIwZjljLCAweGY3OGVkODM1LCAweDk1NmY1ODM1LCAweGJlZjE2MWYzLCAweDVmNzhlYjA2LCAweDcyMmJlNTgzLAorCTB4ZGM3MWVjM2UsIDB4NmRmMWU1MmEsIDB4YTJlOTBhN2MsIDB4OTQ2ZDc5MGIsIDB4MWQxYmRlYmYsIDB4ZGMxNTFmNTIsCisJMHgwODVhMzdiZiwgMHhhODEyOGZhZSwgMHhjNmMyNjliZiwgMHg3OGZmMzBhNywgMHhjNTJmOTI5MywgMHhjM2I0NDZjYywKKwkweGZiZjljMjJhLCAweDdiMDZhOTFhLCAweGYzZjQwNGVjLCAweDQ1ZWQ3NzhiLCAweDliZjgxZTdmLCAweDg4MmI5ZmRlLAorCTB4ZWY0YTUwNWUsIDB4MTk2OGM0OTcsIDB4MjdkYmEzY2EsIDB4ODA0ZjQ3ZDgsIDB4Y2Q4ZWM3ZjEsIDB4NzI0YWRiNDgsCisJMHhlY2Y3NGY1MiwgMHgzMWJiM2ZiZCwgMHg2ZjdhZTI5MiwgMHgyNTgyNGM0OSwgMHhhZWU0NjVhNywgMHg5YTdkNDJiNSwKKwkweDg1ZmEyMDQxLCAweDUxMmE2ZWY5LCAweDY3OTg0Y2ZjLCAweGFiNjJjNzQ2LCAweDEzMDdjYjhhLCAweDkyODVjYmRhLAorCTB4YjNhZTA5NjMsIDB4OGI5ZjQxMjIsIDB4ZDU4OGY4NzIsIDB4NTFmYjgxOWUsIDB4NmEzNDVkZTAsIDB4NDVkYTFhNTksCisJMHgwN2YzNmE1ZCwgMHhiZDc1OWYxOCwgMHg1N2U4NjZhMywgMHhhNTNjNzEyOSwgMHg2OWQ2OTNkZiwgMHg5OWJmYjhmOSwKKwkweDczNmJhOTE5LCAweDM2NjA3ZTcwLCAweDBkMzY3Nzk0LCAweGQ5ZmRjNjZiLCAweDllYTE3MGM0LCAweDg1NTk5N2U0LAorCTB4MDI3ZjIwZjIsIDB4NjZlOTliYTcsIDB4MzU3YjFmNmUsIDB4ZmEzNDU1NjYsIDB4NjJkMzYxZjUsIDB4NGJiNzVlZjAsCisJMHgxOTMxZjNjNiwgMHgzYzY1YzdjZiwgMHg4MTU3M2RlMywgMHg2MTczZGY4YSwgMHg1ODVjZjc4OSwgMHgyZGEzZTY4NiwKKwkweDRkYjEyZmNmLCAweDI0MGY3ODIwLCAweGNkYjNlNjA1LCAweDAwOTdkZjkyLCAweGQ0ZjdhMTBhLCAweGYzMWM3MjljLAorCTB4MzRlZTU5NGIsIDB4Y2FkYzk1ZTYsIDB4OWU2ODc5YzcsIDB4Nzc4ZTM5MmEsIDB4NmY3YzFkNWUsIDB4OGZmMzhjYTgsCisJMHhiZGNlNTQ2NywgMHgxNjZiY2I4OSwgMHhiZjc5ZTFhOSwgMHhlNjE3MzFkNywgMHgzOTdkY2YxNSwgMHg3ZDUwZTI4MSwKKwkweDA2YTVkMTZlLCAweDVlMDVjZmJjLCAweDVlYzY3OTQ3LCAweDhiMmVmZWU2LCAweDc3MzM3Y2U3LCAweGFiZjUxYzdmLAorCTB4Y2VhOWUzOTcsIDB4N2M3NGVlZTgsIDB4ZTY0ZmEzYWYsIDB4ZjA3ZWE1MmYsIDB4ZTQ5NzllM2IsIDB4ODFiYTgxY2MsCisJMHhmM2ExMjNkZSwgMHhhNzc2ZTczOSwgMHg0ZmJkNDE0NywgMHg1ZjQ4OGJkMCwgMHhiY2ZlMjZjZSwgMHg2NzNmZTY0NywKKwkweDdjOWYzYzhhLCAweDI0ZjNhNjFlLCAweDNiZmEzZTIxLCAweGY3YzI0ZTVmLCAweGJjMTkzNzEwLCAweGY3ZmNiOTRiLAorCTB4NjZkYzkzYTYsIDB4NmZjYzc0ZGUsIDB4NGU3ODJmM2EsIDB4YWRmMWJlNjIsIDB4OThhNTI5NmQsIDB4ZWQ1ZTdmNmYsCisJMHhiM2ViMDY3OSwgMHg1ZDc4ZDJkYiwgMHgwYTY5Mzk2OCwgMHg5M2QyM2U3YywgMHhiN2M4Zjk4NCwgMHg2Mjk2YTViNiwKKwkweDkxZjlmMjNlLCAweDU5NDRjZjJkLCAweDk3ZWFlYTAyLCAweGNkNzNlMjRlLCAweDk4YTU2OTgzLCAweGViNWIzYzlmLAorCTB4NzQ4NzU2M2UsIDB4NWY0ZTdiZjMsIDB4NGUwNzdkZmEsIDB4ZGFhYTdjMjMsIDB4N2QzZWZkYjksIDB4MmYwYjgxZGYsCisJMHg2MDNlN2VhMSwgMHg3NTgyYmNhNCwgMHhkZjA5OTIxMywgMHg2ZWNmZWRmNSwgMHg2YmViN2E0NiwgMHg2YzNmMTM1MSwKKwkweDk5ZmY3ZTZhLCAweDJkM2Y1MGRmLCAweDZiNjY1OTg1LCAweGM5MGM1NjNkLCAweGJhMWRiNDk0LCAweDNiMzVmNzFiLAorCTB4ZDYyNWYzZGMsIDB4ODliYzRmMTcsIDB4MDQ3YjMxZjYsIDB4MTNhNWViZTcsIDB4NGY5MTRhNzMsIDB4ZmJlYzBlZmIsCisJMHhkOWIzZWEwNSwgMHhlMmQ4NjA5MSwgMHgxM2QwNWU3ZSwgMHg4ZmY3MmE3ZSwgMHg0MGI4YzAyYiwgMHgwY2JiYjE5ZiwKKwkweDlkZmVhZmU3LCAweGVjMWZlNzk2LCAweDcxOGU5YjhmLCAweGMwOWNmZjgyLCAweDZlMmEzMWYzLCAweGZhODQ5MmQ4LAorCTB4ZjllNTdjNTYsIDB4ZjhjMWJmYmQsIDB4NzRmNGVmZTYsIDB4Y2QxMzUzZGYsIDB4YTk0YWJkZWQsIDB4ZTEzOTdmMzEsCisJMHhjYzVlZDc2ZiwgMHg1ZTdiZTk1YiwgMHgxNWFmZjc0ZiwgMHhlMmIzOTMxOCwgMHgyOTYzYWM3YiwgMHgzZmVhZmYzZSwKKwkweDc4ODY1ZWZmLCAweGVlNzY5NDI4LCAweDc3MmZmNmM1LCAweDQzODQ0NWViLCAweDc5MTZjNjhmLCAweDhmNjFmMjMzLAorCTB4MGFjZWZjOWEsIDB4M2JkMTVlYjksIDB4ZGMyN2VmODIsIDB4OGJmODQ0NTcsIDB4ZmE4NDkyZDksIDB4YWZjNDcyYjYsCisJMHhjZjdkYzBlZSwgMHg4MzNjYjY5NiwgMHg1NjdiMGY3ZSwgMHg2NzBlNzc0YiwgMHhjMWI4MDc5ZiwgMHhkNDdiYjNiOCwKKwkweGZiMDM0OTk4LCAweDVlOTBhYTMwLCAweGNhNWIwYmNlLCAweGY3ZjljNDllLCAweGY1ZTc3ZWYwLCAweGFlOWUwODViLAorCTB4NWMzM2Q3M2QsIDB4ZDQzMWZhMGYsIDB4YWQ4NWU3YzcsIDB4Zjc2N2VkNDEsIDB4N2U4NTliM2MsIDB4Y2RkZmI5ZTksCisJMHhhMTU0ZmYyNiwgMHgyYTVmODU3MywgMHhmNDgzNmI3NywgMHg1ODgyNDkyMiwgMHgzZmNhNWI4YywgMHgwMjE5OGI5MywKKwkweDBlZTc1OWUyLCAweDkyN2JlOGVlLCAweDZiOWZjN2Y5LCAweDAwMzU3YjU2LCAweDViMmQwYWEzLCAweDBhY2RmOThiLAorCTB4ZGUyNjU0M2YsIDB4YWJlNzhjNWEsIDB4ZDFkMzFiMTQsIDB4ZjVjOGE5N2UsIDB4OWM1ZjIxOTUsIDB4M2M1ZDMzZDUsCisJMHhkNjViN2JmNCwgMHg2YmFkOTU1YiwgMHg3YzFkYTBlNiwgMHg0NWZjZmRhNSwgMHhjOTVmNDc5NiwgMHg5YjU1Zjg3YywKKwkweGRmNzgxZGRlLCAweGI1ZmU1YTE4LCAweGE4NGY5OThlLCAweGI1ODVmNWZjLCAweDk1ZTViMjVhLCAweDc4ZDZkZWY5LAorCTB4NTVhZmU4MWMsIDB4NzFmOTczNDcsIDB4ODMzN2ZhMTIsIDB4YWM5M2ZiMWMsIDB4MGFhZDE2ZWYsIDB4MDRlZWZmZWUsCisJMHhhZDU5NGY5ZSwgMHhmZWEzYTVmMSwgMHg3YjdmZTY1MywgMHg4N2RiODk4MiwgMHhjYTNhNWYyYSwgMHhiMzcxZDBhYiwKKwkweGJjZGU1OTI1LCAweGE5YmM5MDIwLCAweGQxNGUxNTZjLCAweGQyMDgyNGZiLCAweDJiM2MzZjU4LCAweGU2MzcyZTc1LAorCTB4ODc4NzBkMTMsIDB4MGYxOTdjZjgsIDB4NzBmMWU2MTIsIDB4ZDY2Y2FhYmUsIDB4NGYzMGY0ZGIsIDB4MDIyZjk4NTUsCisJMHhkMTg3MjVlZCwgMHg1MDc2ODExNywgMHg2YjEyMmJkZiwgMHhhMzE3ZDE5MiwgMHg1ZmUyOWZjYywgMHg1NjUzODk0ZiwKKwkweGZkMzZkNDc4LCAweDcxYzFlYjcwLCAweDg2NWU0ZmQwLCAweDU2MjgwMzdmLCAweDUzN2NlNDRmLCAweGViNGUxNmRlLAorCTB4MWYyZjkzMzEsIDB4Njc3Y2I2ZTksIDB4YTczYzM4ZjAsIDB4ZmIxZjgwMjksIDB4MDZjNTc2ZGEsIDB4ZjcwY2ViZmEsCisJMHhhNzUxZjc0ZCwgMHhmZmZhNmY4OCwgMHgwN2JkMzFmOSwgMHhiNWIyMjk1ZSwgMHg0ZTc5NGY3OCwgMHg0MDgzZWZlMCwKKwkweDM5MDdkZTlkLCAweDU2NzdkZjI3LCAweDQzMDg2ZDdlLCAweDk1ZjczOWZhLCAweDRmYjhmODgzLCAweDdiOWM5MWYwLAorCTB4NzI0NmNkYjEsIDB4MjNlZDRmYWMsIDB4NjI2YmI3MzksIDB4Zjk0N2FmMTEsIDB4YmQ2ZTUwY2EsIDB4MjRhN2YxMzgsCisJMHg3YzEyZmEzZiwgMHhkMjllZjg2NSwgMHgyZjhlYTU2NiwgMHhkMDFkODFjYywgMHhlNDkwYjZkMSwgMHhlNzg5NmNjOSwKKwkweDZhNWRiMDUxLCAweDcxMTM4ZjEzLCAweGUxOTMyZjc4LCAweGRlODZkOGM0LCAweGQ0NDNmMjNhLCAweDNhOTdiNDY2LAorCTB4NDJmNzJhMjcsIDB4MjVmOWZmMWEsIDB4MzFmNTNmM2YsIDB4ZTQ1NmJlZjMsIDB4YzUwMzcyY2YsIDB4NmFiZWMwN2QsCisJMHhjMGVkMDk3ZSwgMHg4YzE2YjEwNSwgMHg0ZGMyODdhNywgMHg4OThjNWZiOSwgMHhlMjI5NjZmZSwgMHg3ZGEzMWRlOSwKKwkweGJjM2NjNGVjLCAweDlmOTFmNGNmLCAweGY2NGVkNDAxLCAweDVhNmJmNTdjLCAweGQ1ZmIzN2YyLCAweDdlNTE3YjAzLAorCTB4NzFmNjhkYjksIDB4MGU5ZTAxMTMsIDB4NTQ3YWY3NGQsIDB4YmVkNDE3NzEsIDB4NjdlZDM0MmUsIDB4MWM5MWJkMjEsCisJMHg5N2Q2ZjRlMSwgMHgwN2JmOGJiOSwgMHg0ZTRmZGYyMiwgMHhmYTAwZjE5MiwgMHg3ZDIyMzU4YywgMHg4N2NmMWMwOCwKKwkweDQwOWZmNmRiLCAweDlkZDdkMzc5LCAweDk0M2E3MjRhLCAweDNkYjZjZTlmLCAweGUzNzI4MTE2LCAweGFlZWZkMDQzLAorCTB4ODdjMDc4ODAsIDB4N2NhNTlmOGIsIDB4MDc5OGY5ODAsIDB4NmIzZGU1MDIsIDB4ZjgzN2NmODMsIDB4MmZjOThmZWQsCisJMHhkYTAzOWI2NCwgMHg4MjFiMWU5MSwgMHg0MTcwYTFlYiwgMHhmMTA2ZjRiYSwgMHg3ZGY2OGI4MSwgMHhjMDFiZjIzZiwKKwkweDc3N2E2YWE3LCAweGE4NjFjMjM1LCAweDUyZWExNzNlLCAweDQ4NTBmZDQwLCAweDJiM2ZhNDNkLCAweGZkYzNmNmUxLAorCTB4ZWJjZDE4MTMsIDB4MjVlZGVkMTgsIDB4Y2YxZjdlM2YsIDB4YmQwN2FkZWYsIDB4ZTEwM2Y1NDYsIDB4ZWUyZDNmNzQsCisJMHhjMzE1YmQwMywgMHg4YmVhMTZmNSwgMHg4YTZlODhhYSwgMHhkMDFkZjU1ZiwgMHg4M2NhYmRkMiwgMHhlMTI1OWZlZCwKKwkweDI5MWU4MWY5LCAweGZlZDU1MzRlLCAweGY3ZmEyYzcyLCAweDY5OTgyNmViLCAweGIxOGZkMDdlLCAweGEwNzMxNzk0LAorCTB4MTFmZDE2M2QsIDB4N2EyMWRkYTUsIDB4MGNmN2U1ZDIsIDB4Mjg3ZTUwYjIsIDB4OWJjOTRlZWQsIDB4NDJlNTc5NGUsCisJMHg1ZjNlMTY3NywgMHg4NzE5Y2IyNywgMHhlYjA5NzUwOCwgMHgxMGUxY2U4YywgMHg3NmIzZGYzOCwgMHgyODdjZTQ4OSwKKwkweGY0Yzk1NmRlLCAweDhiMjFmMjBhLCAweGUxNWUzOWYyLCAweDFlNDUwM2YxLCAweGU1NzJjODU0LCAweDcyNjdiNjEwLAorCTB4ZjcyOTM3ZmUsIDB4ODRjZjc4NTIsIDB4OWM4YzNmN2MsIDB4MjM4MTVhZjgsIDB4Y2VmOGE1YWIsIDB4YmNjZDEzZmQsCisJMHg3OWE3OGYyZSwgMHhlNzg5ZmM3OSwgMHgzZTdhYmRlZCwgMHhjNzEzMjUyYiwgMHg0NWY3OTU5OSwgMHhkNTI4ZjJmZCwKKwkweDBlNTA1ZjJmLCAweDc4MWM5M2M0LCAweGU3MGIxZDUwLCAweGIwNDY3Y2FhLCAweDhhOTBjM2Q0LCAweGQwNDUzNWQyLAorCTB4MmQ1MzJkOWQsIDB4MWFiOGEyMmYsIDB4MmUxYWU3ZTYsIDB4MWQyODU3ZGYsIDB4ZjhlNDRlNDUsIDB4MWZiOTE0YWQsCisJMHhhMDU3Yjk1ZSwgMHg2YTczYTVmYiwgMHhmMjA3NmY3ZSwgMHg1ODBmZGU4NiwgMHgwOGE2YjA1NiwgMHgxOGJlZWZmOSwKKwkweDVmZDAyNmE3LCAweDRiZmNkNmJlLCAweGNiZWI4MjFiLCAweGM1MTRkNzZhLCAweDk1ZTdjMzBkLCAweDhkNzZiNmFiLAorCTB4NTdjZjk3NjQsIDB4OGEyYzZmNjEsIDB4YWVkZTVmMzUsIDB4NWU5Y2ZiZWMsIDB4ZjU3NGU3ZDksIDB4Y2M3ODQwYzgsCisJMHgxMjM0NTM1ZiwgMHg3ZmJhNjVjYSwgMHhkY2ZjMWUxNywgMHg1ZWI1ZGFlNywgMHg1ZDJkNTdjYSwgMHhiN2M0Zjc0MywKKwkweDhhMGRhYTVjLCAweGJlNmI1ZWIzLCAweDdiYTZlNjBhLCAweDNmZWQyYjkwLCAweGRlMDg3NGI0LCAweDMxMmI4YzVlLAorCTB4YzQzZGFmZTAsIDB4MDEzN2MwNjcsIDB4ZjRjYmM1ZWIsIDB4Mjg5ZjE0M2EsIDB4ZmQwNjNjNWYsIDB4M2M1ZjY2NTMsCisJMHgxMTNlMzAyNiwgMHgzMzliZTI1YSwgMHhiODhhZTUyMiwgMHgyYzNlMDRhOCwgMHgwZjAzMGNiMywgMHg4OWQxZmZhNSwKKwkweDNmMWFjZTNjLCAweGE4ZjFkMzkxLCAweDVlM2I1NWQ5LCAweGU5ZDcxNDYyLCAweGE1N2JmOTQxLCAweDIyZmU0Y2Y3LAorCTB4YmYwN2VmZWYsIDB4OWMyMzMyNjcsIDB4OWJkNGViZjcsIDB4ZGZkM2ZlMzAsIDB4ODdjNTBkZjksIDB4ZTYxOWQ3ZmIsCisJMHgwMzA3N2JmMywgMHg1ZGU3ODA0YiwgMHgwMjliZTNmMSwgMHgyNmFiYzBlMywgMHhkYzI0M2I3MSwgMHg5YTlkZWRjYSwKKwkweGUzZDVmNTBjLCAweGExYzY5OTRiLCAweDFiZDkxMmY4LCAweGRmNzRlMTk5LCAweDA1ZjZkN2QyLCAweDhlZmViN2U5LAorCTB4OGJkZTEzM2MsIDB4MGRiYjc1ZjQsIDB4ZmYzNTZmYzgsIDB4YThiMTdmZmMsIDB4M2UzYWZiODcsIDB4YmViNGJjYTUsCisJMHg3Y2EzM2Y2ZiwgMHhkZTcyOGRiNSwgMHgzOTM2YTFlMCwgMHg2Y2RiYWJkZiwgMHhlMmZlZjZjNCwgMHhiZjYxMTdiZiwKKwkweDhmZTk3MjRkLCAweDk4ZjhmMDJmLCAweDgzZjEyYTUyLCAweDNiZjlmZjAwLCAweDRjN2I1M2Q0LCAweDU0YzUxZjFiLAorCTB4MmRiMGNhOTksIDB4N2ZjMGJmMjQsIDB4ZTFiZDQ2OGUsIDB4ZTM5ODJiOGYsIDB4MDRjMzhiODYsIDB4NTRkMjE1YzYsCisJMHgyNTgwYWUzYywgMHhkMmQyMTVjNiwgMHhlYjAxNWM3OCwgMHgxMmMwNTcxOCwgMHg4ZWQ4MGFlMywgMHg2M2FjMDU3MSwKKwkweDE4ZWIwMTVjLCAweGM2M2FjMDU3LCAweGI4YzRiMDE1LCAweDI5N2ZiNjAyLCAweDBmZDFlN2JmLCAweDNkYzc4YjgyLAorCTB4NTdmNzI0MGQsIDB4YzAzMzdlNjIsIDB4YmYyNzY1NmYsIDB4NDdiOTVhYmYsIDB4N2M2MTdiYTIsIDB4ZGZmNTAzY2YsCisJMHhhZDNiNzk2NSwgMHg2NzhlZGU3MiwgMHhkNjA3ZGQyYiwgMHg4ODJjOTAxYywgMHhjNDFmN2MyMiwgMHgzYmY5OGU5NSwKKwkweDFlMzE0NzAzLCAweDU4MjJkMzU0LCAweDdkYjE5OGQ2LCAweDYzNjNlZDNlLCAweGE1MDdkZTQ3LCAweDZkNDdiZWQ4LAorCTB4NGY0NGNkMTEsIDB4ODI4ZDlmMWMsIDB4ZDU3YzhmNWIsIDB4NTdlMjg3YjEsIDB4OTQ5ZDcxMDUsIDB4MmNkMzVmZWYsCisJMHhjZWJiOGMzMCwgMHhkOTNmNzJkMywgMHgwZTZiNDEyOSwgMHgxZDkyYWJkZCwgMHg5Mzc2ZDRlZCwgMHg5Y2Y1NTJmZiwKKwkweGVmN2MwZTYwLCAweDQ1ZTI2NmJiLCAweDdkY2ExMzkyLCAweDg4ZmU1MmY1LCAweGYzN2EzZDM5LCAweDZiM2QyMDkyLAorCTB4Zjg1Nzc5ZTMsIDB4MjljN2VjMjcsIDB4MWQ5Mzc3ZTcsIDB4MmQxNzYwMTIsIDB4NmM2YzdiYzUsIDB4ZjdhNWJlOTcsCisJMHhlMGUwOWM0ZCwgMHg5ZGFlMTA4ZSwgMHhkMWQ5NTU3NywgMHhiNWYzMWViMiwgMHg1NWZlNjg3ZSwgMHhkZWY5MjRlMSwKKwkweDQ3YmY5YjNhLCAweDkyZjhmYzUyLCAweGJkNjAwNzdkLCAweGIyNWEyZGMxLCAweDYwOWY2ZTUzLCAweDFlNTI2ZGJmLAorCTB4MjhkODE5ZTYsIDB4NTNiNDcyZWUsIDB4MjdkNjdlNGYsIDB4OGEwZmFmNWIsIDB4ZDc0YTE0YmIsIDB4ODU2M2RjNTEsCisJMHg3ZGZkMjA1YSwgMHgzYjlmNmFjNCwgMHg0NjcyZTgwOSwgMHg2ZjE0YmRmMSwgMHgyNDZmMTE5OSwgMHhmMGU4NTYzZSwKKwkweDRmYzk2YjQ5LCAweGUzMTVkZTcwLCAweDBhOTg3N2Y5LCAweDM0ZTdlY2I1LCAweGE1Y2Y5YzlmLCAweDVlYjBhOWUwLAorCTB4MmNmN2UzNzAsIDB4YmQwYjMzMTYsIDB4YzAwOGIwM2YsIDB4ZTU1MTcxODcsIDB4MTg4YjFmZmIsIDB4ZTg1MGFmY2YsCisJMHg4MTU2YzU2YSwgMHhiY2JlOGFlOCwgMHg4NGJkZjAxMCwgMHgxMDNkZjg0NSwgMHg2YWY3N2ZkMCwgMHgyODliZmRiOSwKKwkweGM0ZjI3YmYyLCAweGUyOGYzYzRkLCAweGZjYTc2NjNlLCAweDdkNDg2NTkxLCAweGQ3ZDdlOTEyLCAweDBmNmVkMDdjLAorCTB4ZGI4OTJlYmYsIDB4OWMzOGU2ZjcsIDB4MzU3MWYxN2YsIDB4YzYxNzA3ZTUsIDB4Mjc2ZTllZGQsIDB4Zjk0MDVmM2QsCisJMHg2ZWY3ODIxMywgMHhhZjFiZmJlOSwgMHhmMzgzM2YyNiwgMHhiOWFhOGUyNywgMHg5Mjc4MDFkYywgMHhmNDg1ZDU5ZiwKKwkweDNiMWVmMTRhLCAweGNhZWJjNzk1LCAweGJmMjI5Y2E5LCAweDVlZmExNjFmLCAweGNiZTc3ZjQzLCAweGIwYmUzODJkLAorCTB4Zjg0MTYwYzYsIDB4YzAzZGYxNWYsIDB4ZmZiZmFiYjAsIDB4ZWJmMzk0ZTYsIDB4NWM5ZWM1MTIsIDB4NmJlM2MyMzMsCisJMHg1MWUxMDU4MywgMHhlZjQ5ZDcxOCwgMHhmM2NhYTU4OSwgMHhiMjViOWMzZiwgMHg4YjY5ZjEwOSwgMHgxZjVjMmU2MCwKKwkweDAwYjY2OWVmLCAweDQwZjA4YjdjLCAweDNkZDFjNjAyLCAweDY2Y2Y3YzM2LCAweDUxMzA1M2EwLCAweDcyNjVmNTNlLAorCTB4Y2MzYWViNzQsIDB4MTM0OWE5NTMsIDB4MmRhZjE4NGMsIDB4MTg1MmRiMGEsIDB4YTUxN2YzMGIsIDB4NzY3N2QzMjQsCisJMHgxYzc4ZGE2YSwgMHg0ZTRhMGZiNiwgMHg5MmRjNTMwNywgMHg2MmFhYzdjMCwgMHhmMWNmN2UzMSwgMHgzZmI1Y2JlOCwKKwkweGRmY2YyOTNkLCAweGIzZTY1YjNlLCAweDc4MmY4ZWZlLCAweGUzYjVmMTFlLCAweGZiZTliYmI0LCAweGVmNGY0YzFjLAorCTB4ZjYwZmQzYWYsIDB4ZDFjNmZiMzUsIDB4ZTg1NWFmMTQsIDB4YWUzOWIwNjgsIDB4NDVhOGU5MDksIDB4YTVhNTEzZDYsCisJMHg4ZWQxYTllZiwgMHgzN2IzY2M2OCwgMHg5NmNhMWMyMywgMHg0YjE3NWM1YywgMHg0ZTNlMWNlNywgMHg4N2RmZTRhNiwKKwkweGU1MDJjOWM2LCAweGRlNDZmZmVkLCAweDVhYmE4OWZkLCAweDViYWRkZjJhLCAweDlkNzc2NTQ1LCAweGU4MDc5ZThiLAorCTB4YmYwODIzOGIsIDB4N2Q2ZjEwMWYsIDB4ZjEzMGQyN2IsIDB4NDczM2E2NTYsIDB4YmUwNWJlOTIsIDB4OTBlZGYxZTcsCisJMHhiYmYwMmFmOCwgMHgzM2VmYzAxOCwgMHhkOWVlYTIzYSwgMHg4MzQ4ZjY4MCwgMHhjZGY3ODJjNiwgMHhkMmJjZmY5OCwKKwkweGZkZTFmMjQwLCAweDU5YzZjMzQ5LCAweDI4MTlmODE1LCAweGY0YzgzYjJlLCAweGU5ODc4ODM5LCAweDExMmFhOTE5LAorCTB4OTI2ZGZmOWUsIDB4NDRlNzE0MTAsIDB4MjI3M2MxYmUsIDB4N2M4OTYwZGYsIDB4ZjlmOTUyYTMsIDB4YTMwZDY5ZTYsCisJMHg3ZGExOTRlZiwgMHg0MGZiMjJlMCwgMHhiZjVkZjg0ZiwgMHhkNDBhZTQwNiwgMHgyMGE2NjVlZiwgMHg0NDIxNzJiOSwKKwkweGYzMjM4MGFlLCAweGFjNWY3YTMzLCAweDA5MzZjYjQzLCAweGU5Y2ZmY2ZlLCAweDE5Y2E1YzUwLCAweGI4NzhjZTQ2LAorCTB4ZTYxZDE5OWMsIDB4YjNiZTllNzksIDB4Zjk0NjFkNTAsIDB4NDRlZmMwYzUsIDB4ZjIzNzQ3NjcsIDB4YWMyNWJkYmMsCisJMHg0NjFkZDY4NCwgMHgzZTdiZDBkZSwgMHgzODE4OGVmNywgMHhiZmY0MTRmOSwgMHhkOTAzNjFmNywgMHg5NjEzZWIzOSwKKwkweGU0NzdmZmU2LCAweDcxMjc5ZmNkLCAweGRmODEzYzc4LCAweGVkNWQ1MDczLCAweDA1OWIwZTdiLCAweGIxNWQ4ZmJjLAorCTB4YmUyMzY1OTAsIDB4YzQzOWVmOTUsIDB4N2JmMjE4YzEsIDB4MzllZmY1ZmYsIDB4MTIzYzk4OGMsIDB4MGFlMGU3YmYsCisJMHhkYzQzOWVmYSwgMHgzMGU3YmUxNSwgMHg2MTcxYjI2YSwgMHg0NjFjZjdlMCwgMHgzMGIxMWU0ZCwgMHhjNjBlN2JmOCwKKwkweGIyOWRmODg1LCAweDM5ZWZjMWZmLCAweGJiY2U0ZmE0LCAweDM3MGU3YmZjLCAweGEwZmYzNjRlLCAweDNkODAzOWVmLAorCTB4NGZlMzg5OWIsIDB4NjNjNmQ4ZTQsIDB4M2I5ZjI4OTksIDB4ZTNlNWZkZjQsIDB4OTc2NDNkZjIsIDB4YjJjNTJmNjgsCisJMHhhMmE1YzIyOCwgMHhjNTZkZDE3NiwgMHg3M2QxNmRmMiwgMHg1ZjAzYjYzZiwgMHgxNTc4NDQ0YywgMHgwMzdkOTYzZCwKKwkweDUxMjU5NzdlLCAweGYyYmNhMWViLCAweDQ5YjZhZDI3LCAweGI5NmJmZjM4LCAweDNjZjhjOWI2LCAweDJmNWZkZTM0LAorCTB4NzNmNjBmOWYsIDB4Y2QwYmY2MGIsIDB4ZTJlODUzMWYsIDB4MGU1Y2M5YWUsIDB4YTljYjkzY2QsIDB4YzdiZmMzZjUsCisJMHhiZjMyNmYzZiwgMHhiZWQ2YmU0ZiwgMHhlMDc3YmY2MSwgMHhkOWZlY2E3YSwgMHhkYzU2YzU5NiwgMHg0ZWY3ZWMwZiwKKwkweGI3ZWMyN2RjLCAweDg4NjY0YjA0LCAweGY4MGY3YTBlLCAweGM5NzU3YTcyLCAweDJlNzQ2MmZiLCAweDNmYjM4ZjkwLAorCTB4OTUyOGY2ZTEsIDB4MTQ3NzJhZTksIDB4MWVhMzBkZGEsIDB4N2VlMTQ3NzAsIDB4ZTgwZTM1NDcsIDB4ZGY5MDdkZjEsCisJMHg2OGY0MDZiYSwgMHhmNTc2ZmMzZiwgMHg3ZmRiMWU4MCwgMHhkYWY5ZTM2YiwgMHg5ZjZmZjNhMSwgMHhmNDkxZmRjYywKKwkweDdlMzQwM2E5LCAweDRkZGRmYzBjLCAweDE0NDBjMWZlLCAweGU1ZTk2ZGRhLCAweDE0YWUzNDQ3LCAweGY2NmQ0ZjdhLAorCTB4OTM3NjQxMjcsIDB4OGM3YmY4OTksIDB4MDFlNjM2ZGMsIDB4OGMzZDIxOTEsIDB4MWU3OGMxZDksIDB4ZTkwYzQxNjMsCisJMHhlZjFkNGFiOSwgMHhmZGMwZjk1YSwgMHgzOGQxZDIyMiwgMHg4MDNiZWMzNywgMHhhZWRmYWVmZSwgMHhhZjdlMGMxYSwKKwkweGFhZTM0YmQ3LCAweDVlYzAyNWU0LCAweDY0ZWU3YTBiLCAweDk0NzRiZjNjLCAweDVlZDA4ZjJjLCAweDM5ZDllZmM0LAorCTB4NzdkMDhmY2IsIDB4MGI4ZWMwYTYsIDB4NzliZThmOTksIDB4NTk0Zjk0MzAsIDB4ZTZiZmIzYWQsIDB4NjJiZTUzMzMsCisJMHg3N2E1YmY1MCwgMHhmYTNkNjZmZiwgMHg1YmE1ZTViNSwgMHgyZjE3ZTQzNSwgMHhhNThmNTk2OSwgMHgyNjllZjFjMywKKwkweDE5N2Q5MThlLCAweGNiZWMxZmQ0LCAweGZiNjVmYWEwLCAweGY1NDdkOTBjLCAweGM3ZDcxN2ZkLCAweGQwMmViMzBkLAorCTB4MTNhNDU2YzEsIDB4YWE4ZTBlODUsIDB4NGZkMGUzM2QsIDB4YjMwY2VhM2QsIDB4M2MxZGY3ZjAsIDB4MjY5YTVkZjQsCisJMHg1ZGY0YmRmOSwgMHhjYWRkMzlmZiwgMHg1ZDM5NjVmMywgMHgzZjFkZjhjMCwgMHhhOWVhOGU4YywgMHhhZjFkZjJiZiwKKwkweDFjOGE5NTZiLCAweDhkY2VmYTFjLCAweDVlMjhiOTg2LCAweDcyNDhjYjM5LCAweGZmZjY0NmFlLCAweGM4OTg5N2FhLAorCTB4YmFmODUxMWUsIDB4YjUzOWU1NWEsIDB4MThjNWZiMWUsIDB4OGE5YmZlNzksIDB4N2FhYmY3ZDEsIDB4Y2Y5NDUxYzQsCisJMHhjZmFjM2Y0ZCwgMHhhY2ZiYTU0YSwgMHgxNzhmN2FkOCwgMHg1ZGI4MWRlNywgMHgxNWI5ZWZhMCwgMHg1YWI5NzM4NCwKKwkweDllMzg5NjI4LCAweDQ0NDdlNzg1LCAweGE3ODE1ZGZlLCAweDk4NDg3ZTUxLCAweDM3YmZjMTQ3LCAweGJmOTcyNTMwLAorCTB4ZjhjZjEwM2YsIDB4Y2E5OGRiNzcsIDB4MzY5ZGYyMWMsIDB4ZWQ3YTFlMzksIDB4ZWZmMWI0ZWYsIDB4ZjdlN2NkOTIsCisJMHgyNTUxMGQ3MiwgMHhmOWYxY2JhNSwgMHhmOWU4MWI4MiwgMHgxZjUyZWZjMSwgMHgyYWZlZTJiMSwgMHg3MWI0ZWY5NCwKKwkweDRlNjFiZjdiLCAweDU1N2YzZDA2LCAweDNkNDFhZjMwLCAweDVkODA3YWUxLCAweDdhNmQzYmU5LCAweGVmODBmYmU0LAorCTB4Zjg4N2JkYjMsIDB4ZDlmN2Q2YmEsIDB4MWMwZmVmOTQsIDB4MjNjMzcwNWQsIDB4YmQxYzM5N2IsIDB4MzM1NWVmNzgsCisJMHhhZmU0MThjYiwgMHgzYzMxMTdmZiwgMHg1NmMwZDI5ZSwgMHgwMDAwNTZjMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX2ludF90YWJsZV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MzNiM2FmOGEsIDB4MjE3MTY4MzAsCi0JMHg5ZjAxNDNmOCwgMHgzODYwNjY2NCwgMHg4MTY3YzQwZCwgMHg4MTg1OTc5OCwgMHg4MTg5OTdjMSwgMHg3ODg5OGZjMSwKLQkweDEwYzUzM2ZkLCAweDA2MTE0MTZjLCAweDVlMjAzYjA2LCAweGYwYzBjNDJlLCAweGNlMjEwNDRlLCAweDEwYzBjZTI4LAotCTB4MjBjMGNhMmQsIDB4YWZlMTBhMmIsIDB4NjI2NmQyMDQsIDB4NDBmZjcxZDQsIDB4NGMxOTQ2NjMsIDB4MDg5MjA3YjEsCi0JMHg3OTE2MTMzNiwgMHgyNjhjY2M2NCwgMHhjYTg1MjBlZiwgMHg3ZmEwMjE2NywgMHgyNTE3ZjFhMCwgMHgyMmFjYmU1NCwKLQkweDhhODQ2ZTg0LCAweDk3OTM0NTdmLCAweDQzMmJjYTgzLCAweDA5NGRmNWZkLCAweDUwMmFiOWJiLCAweDFhYTAwMDc5LAotCTB4MDM2MDVmODIsIDB4MDAwMDAzNjAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzNzAyNzhhLCAweDQ1ZTM5YzMwLAorCTB4ODM4MWU5ZjAsIDB4NWZkMzI5MTgsIDB4NTBjMGNlYzYsIDB4NDA1NWM0MDEsIDB4M2Y4ODBiYmMsIDB4N2MzMDMyYjEsCisJMHhmZjVlMjU2NiwgMHhkYjA0MjkzNSwgMHgyMTgxODI0OCwgMHg4OGQ3ODgxZSwgMHg0OWE4MzAzMSwgMHhhNDFkYzQyMiwKKwkweDAzMjYxODE5LCAweGIxNTBhMWY5LCAweDVmM2E0MDQ3LCAweDBmNzczMjhhLCAweDgwYTY5YzE2LCAweDg3MmFlNjI5LAorCTB4OTE2M2E3NjAsIDB4NjgxOWM2NDcsIDB4NTBlNTRiZjIsIDB4ZjQwNDk5ZjksIDB4YTJiZTM0MGYsIDB4YTJmZmNhOGUsCisJMHhhMDEzYTEwYSwgMHhlNGQxNTdlMiwgMHgzYmU1NDJiZiwgMHhhNmJhZmVhMCwgMHg0ZWRjZGQ4ZSwgMHhjMzVkZmQzMiwKKwkweGZjMDFhMTAyLCAweDk4NDdiMDk5LCAweDAwOTg0N2IwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHRzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGQsIDB4NzMzZWU4YjUsIDB4NDk5OTljY2UsCi0JMHgyMTI2NGNjZSwgMHg2MTAyMTMwOSwgMHg0MGEwMjA5MiwgMHgyMDBjN2UxOCwgMHhmN2YwOWQ3OCwgMHg4MDNhYTU2OCwKLQkweDA3NTE1YTU2LCAweDQzZjIxMDgxLCAweGJkMWY1MjAyLCAweDI0MjY2YmVkLCAweDFiZDU2OGMxLCAweGFiNDVhOGZhLAotCTB4NjhhOTAwNzYsIDB4NjIzNDhlZDEsIDB4YTgwNzQwYTgsIDB4MGRiNmE4NWMsIDB4YzdmNDJhZDYsIDB4YzQwNWFkMWIsCi0JMHg5NmFhNDQ5MCwgMHg2YmI5NGFiZSwgMHhlNjRmYmRhZCwgMHg0MDE5OTM5YywgMHg2ZjVmYjdiZCwgMHg2ZmQ2OTdiZiwKLQkweDY3ZDljZmIzLCAweGRmZDdiNWVmLCAweGI1ZWQ2YjVlLCAweDg5NzYyOGY3LCAweGVjNjUwZWU1LCAweGM3NWRmZTAyLAotCTB4MzE5OTAyZDgsIDB4ZjRhMjc1NzYsIDB4MGQwZWJiYzEsIDB4MDdmOGFkZmUsIDB4Y2NkZDI4MzIsIDB4Mjg2MmIxMmYsCi0JMHgyZjZlMmNmZCwgMHhmYzcwNzI4MSwgMHhkNjVlOTYxOCwgMHhmMzdlMThjOSwgMHg5NTk5MDVmMSwgMHgzMjcxZTYzMiwKLQkweGIwOTQxN2YxLCAweGRhZjJmNWVlLCAweDZkODdiMmI3LCAweGQ1YjI4NDI4LCAweDZjYzY1M2Y3LCAweDY3YWFlZDhjLAotCTB4NDRmNjYxODEsIDB4ZmY1Nzg3M2IsIDB4OTFjMTdlMmUsIDB4ZmE0ODcwY2IsIDB4ODc3NTYwY2IsIDB4YmI4N2MxODcsCi0JMHhiNmUyZTdhNCwgMHg4ZWY1OGM4OSwgMHg3ZTJkODE2MSwgMHg1ZGRlMDcxOCwgMHhjZmZkMDU5YiwgMHgzMTZkZWM2MSwKLQkweDcwNDYwNWU2LCAweDhhNTBiODVjLCAweDRiODIzMWRmLCAweGU3M2FmOGZiLCAweDBlZTc2ODQyLCAweDAwYzU1ZmFkLAotCTB4NzMzNGNmNWUsIDB4YjlhMjZkN2IsIDB4ZjUwZDE4ZWUsIDB4YTVmYTg5OTEsIDB4NmNhNjAzZGEsIDB4ODgxZGUwMGMsCi0JMHhlZDVjMDNmMCwgMHhkNzlhNGVmNSwgMHg4MWJkZWI4ZiwgMHhiNjMwNTc2MSwgMHhmNTQ3ZGVhNywgMHgyYTdlZjU3ZCwKLQkweGU5MjNmNWUzLCAweDAwZmE4MWY5LCAweGIwNTg3M2Q1LCAweGVhYzdmMDkwLCAweDY2Y2EyYzM2LCAweDg1MzZmMWFjLAotCTB4NzQxMmM3ZGQsIDB4OGMzZDY2ZjksIDB4ZmVhMjQ1NzcsIDB4MjIyY2QxYTcsIDB4YTRmZWU0YzMsIDB4MDA0MjNiYjAsCi0JMHgxMzJiYzM2YiwgMHhiY2ExM2EzMiwgMHg3ZjQxZGIxZiwgMHgyODAxOGQwZiwgMHgzZmRhMjZjNiwgMHhkY2U1ZjZiYywKLQkweGNiMTgxMzk5LCAweGRjOTFlYWZiLCAweGJkZTAwMzk5LCAweDQ2YzYxNmM0LCAweGQyYWQ3OGUzLCAweDlkZjAzMWJjLAotCTB4ZGJkMWZiY2EsIDB4ZWI2MzI1ZWIsIDB4ZWQ5YTBmODgsIDB4NjVhZmRmYzksIDB4ZjJjZjAyMTIsIDB4N2U2MGFjMGUsCi0JMHgwZjZiZjQzNywgMHgwNzAxM2JlNywgMHgwNGM2NDRiNywgMHhiOGMzMDY1YiwgMHgxODZiZWM0OCwgMHgxMTFiMzJmYiwKLQkweDM3MGUwMDg5LCAweDhjNzk5NzYxLCAweGYzNDJkMGVkLCAweDVmMWNiYmYwLCAweDkxMjMwYTQ4LCAweDI5OWM0MGMzLAotCTB4MmNhYjY1OGMsIDB4NDcwYTRiMWMsIDB4MmI3MWMxMDMsIDB4NGIwNzMzZmUsIDB4MGY0YmQ1M2YsIDB4N2VmNTcxZjIsCi0JMHhlNzExYjJmNCwgMHhjZWU0ZTUwNywgMHhkZTJjNWIzMCwgMHg3N2ZiZTE5NywgMHhlODYyZDI0MiwgMHhlN2M1ZDliZiwKLQkweDczNjMwMmYzLCAweDEyNDliYzcwLCAweDEyYjk2MTBiLCAweDJkZmExMjk5LCAweDMxMjczMmM3LCAweGU1YzYwYWVlLAotCTB4NjE3M2JhZTEsIDB4NTQ3ZTg0MTYsIDB4Yzc4NTk4NWYsIDB4ZmM4MzdlZjAsIDB4NmM4Y2E2ZmIsIDB4MWI3ZjliOWEsCi0JMHhkYTk0NDNmMSwgMHg0NzRkZGIxYiwgMHg4OGI2ZmNiOCwgMHhlZGM3MDMzZCwgMHgyM2VkODgzZCwgMHhmNmMzMTYzZSwKLQkweDM5YjY2ODJmLCAweDNiNDRiNDViLCAweDZlNDk5ZTFkLCAweDk2OGI2ODViLCAweDE2YzgyZmU4LCAweGU1ZDNmYTliLAotCTB4YmU3Mjc2NGQsIDB4ODFkZWY5ZDMsIDB4ZGE5YzgwOWYsIDB4YzIyOGZiZTEsIDB4MzcwNTk4M2IsIDB4YmRlYmMxMjcsCi0JMHgwN2E1YmU2MiwgMHgzYzA2NDE1ZCwgMHhhMzU0MmVhZCwgMHhhZmE5MjQyZSwgMHgzOWViMGNiNSwgMHgwNjQwNTk0YiwKLQkweGU1ZWI0ZTFhLCAweDA3MDNiOGYzLCAweDNiY2M0OWM5LCAweDM3YzAwM2U3LCAweGZlYzAxZDk0LCAweDA4ZTNlNjBjLAotCTB4ZGEwM2E4YjAsIDB4ODI2Yjc5YWIsIDB4MWY0ZjUwNjUsIDB4MWIwMmQ1Y2MsIDB4MzY3MjYzMWMsIDB4Y2RjNDczYzksCi0JMHg5N2ExYzNmYSwgMHhmYzEzYzdkYSwgMHgwMGRmMTc0OCwgMHgwNjA0ZWY1ZCwgMHg0MWRiYTgzMiwgMHg3ODAyMGNhMSwKLQkweGE4M2I4ZjFhLCAweGU1ZGM4ZmZmLCAweGZkMzNiMTQzLCAweGYxZjU1M2JiLCAweDNlNDE0YjcxLCAweGE2MWZkNzRlLAotCTB4ODNiZWFiYjIsIDB4NjNmYWVlY2EsIDB4MGYxYWE2NTQsIDB4MjZjNmQxMjQsIDB4NjBkZjhjMDMsIDB4NWRjYTI3NDEsCi0JMHgwNzVkMTJhMSwgMHhmZmVlMzdmZCwgMHgyMThmZjMyYSwgMHg4Nzg4MjNmOCwgMHgyZDE2Y2Q3NCwgMHg0ZTY2NWU0MiwKLQkweGY4MTVjZDU5LCAweGUxMmI3YzQ1LCAweDhlNmVmOWJjLCAweGJkYjNjNDVmLCAweDg2NmQwOTUwLCAweDJhZDljZjMyLAotCTB4Nzg2ZDFhYWQsIDB4ZmM0MDc0MGUsIDB4Yjg3YzFlOTcsIDB4MmVhNGYxMDEsIDB4ODU1Y2UzNjUsIDB4NGY5YzJmMjgsCi0JMHg5N2M4OWYxMSwgMHg1ZjM4MWFiYiwgMHgyODRlZmQ2MiwgMHgwMjk1MzlhZiwgMHhlZjFjNWRlZiwgMHg1M2E5ZGFkYSwKLQkweGMwNjA5OWRmLCAweDVjODJjMjlmLCAweDI4YmYzOWFlLCAweDc4Yzc3ZmYwLCAweDdiMzQzYTgwLCAweGJkZTgyNjQ1LAotCTB4YmMwNzdmYmMsIDB4OWU3ZDI2OGUsIDB4OTA2Yjk1YzEsIDB4OWUyYWRlYTEsIDB4MzBkZGViYWMsIDB4YWJkMjdlMjMsCi0JMHg1MDc5ZWRjMCwgMHg5N2NmYWMxZiwgMHhmODg5N2ZmOSwgMHhmYTA0ZGNkOCwgMHhkNTdlZWIwOSwgMHgyMWZiYzJhZiwKLQkweDcwZTBmNWEyLCAweGNhNTQ1Y2M1LCAweDFlZTdjYjViLCAweDYyYmM2MDkyLCAweGE4ZmRlM2Y5LCAweDI5ZDQ4N2RlLAotCTB4ZjQxYTc3NmYsIDB4NjA0MmMxNjUsIDB4ODZjNjIyYmMsIDB4MmYzZjM1YWUsIDB4MzBlYjk4OGMsIDB4ZjMwNDJkODAsCi0JMHgzZjMxNmUyZiwgMHhkOWRjY2UzZiwgMHgyZTE5ZDIyNywgMHg4MDkwNmU0OCwgMHhiZDVhZjM3ZSwgMHg4NDlhNDVlYywKLQkweGY1OGRkZTk1LCAweDBkZDlhZTJjLCAweGY0MjdhMTc1LCAweGRjOTllNGJhLCAweGFkZjk4MTE5LCAweDkwMDU5MmJlLAotCTB4NDQ5MjY5YzYsIDB4ZWZjNTZjNzgsIDB4MTQxZThmODAsIDB4N2U5NmZkZTUsIDB4YWM5OTUyZjQsIDB4MDJlZjUwZDksCi0JMHhmNGM5ODNkZSwgMHhkNjU0YmU1OCwgMHg1NmJjNzQ4YiwgMHhmZDhiZGU5YSwgMHhlNjMxMmJhNiwgMHg1NGJmOTBkNSwKLQkweGZiNmIxM2UyLCAweGYxYTE0OTM0LCAweGEwOGU5NGQzLCAweDE0ZGVlYjhjLCAweGI2YWRlZWJlLCAweDllNTFjNmY3LAotCTB4MDNmOTk3NTYsIDB4MDI4ZjVjMTEsIDB4NGNkZjkyNTEsIDB4NWU1MGIzNTgsIDB4MzYzYzAxM2YsIDB4OTM2M2MzODksCi0JMHhmNTE4OWM2OCwgMHhkYjJiZWIwMywgMHhiYzM4ZTEyMiwgMHhmYTU3ZDVkZiwgMHgwZDRhNDQ1OSwgMHgyZDE5MWZlNywKLQkweDE2OThlYzYyLCAweDNjZmVjNGNlLCAweDcwOWNhNDkyLCAweDU4ZDNlODI2LCAweGIzNmZmNDUxLCAweGMzNzJlYWExLAotCTB4NzUxM2FiZmIsIDB4N2M3MzlkZGYsIDB4NDM3OWM3YzgsIDB4NzcyYmY0Y2QsIDB4N2YyMDE1ZDYsIDB4YjM2Mjg2NTQsCi0JMHg3YTRlN2Y5MSwgMHgwZWRlYmE3ZSwgMHhmNjAyZGVmMywgMHg5ZmY4MDI4MiwgMHg2MWU1MGNlNCwgMHhlYThiMzUzZiwKLQkweGYzMGFhMzg2LCAweGUzMDNhMmUzLCAweDFlYjdiMjZlLCAweDM5ODI0YjA3LCAweDVmZjQ4ODU5LCAweDAxNzVjY2NiLAotCTB4NjdkYmRlMDUsIDB4ZjAzYjcxMmEsIDB4MDFmMjdkYTUsIDB4YWM1YzU3YjIsIDB4YzljN2ViOGUsIDB4MDdiNDMyOTEsCi0JMHhlZjgzMjM5YywgMHg0NTVlZjBjYSwgMHhkZWU3ODA3OSwgMHg3NWMzMmI2MCwgMHhiY2NjMzljNCwgMHg5YjNjODNjZSwKLQkweGI5YjY0YWVhLCAweDVjY2Y0YTllLCAweGY4Y2E1Y2FhLCAweDg0MDY5ZWZhLCAweGIyNjdmYzIyLCAweDk5NWZlMjI4LAotCTB4Zjg0MTI4MWMsIDB4ZjNlNmJjMWUsIDB4YWE2Nzg0N2UsIDB4ODRhNWQ3YzQsIDB4ZGU3MmUyZmUsIDB4YmZiNWVmNDcsCi0JMHgwMDM2MWRjOCwgMHhmOTcyYjc5ZiwgMHhlZTRhZmI1ZiwgMHg4Zjg4MDliMCwgMHg3Mzk3OWE1NiwgMHgwYjkyNmFjNiwKLQkweDczMjNmMTE1LCAweDEzYjkwZmY5LCAweGY4NzhlYmRmLCAweDk2MWJjZjdiLCAweGY0OTc5YTA1LCAweDUwMjdmMzkzLAotCTB4NmYzZTM2M2YsIDB4OWY5ZWEzZjcsIDB4N2UzZGJjZjEsIDB4MzY2YmQ0MWQsIDB4NmRmN2E0NGIsIDB4OWY4NDVjZmIsCi0JMHgzZDc5NDdlZSwgMHhkODgzNTZlZSwgMHg1MDEzY2NmZSwgMHgzYWQ1N2MwNywgMHg4YTljMWUzYSwgMHg2NjVlN2JmOCwKLQkweDBiM2QwODViLCAweDRlY2ZhODZkLCAweDNiNjhmNmU4LCAweDc4YmI5N2FmLCAweGZlZjM2NmI1LCAweDhhZmJmMWRiLAotCTB4N2Q0MzA3NzYsIDB4Zjk3YmIzNWMsIDB4YmVhMTUzMGQsIDB4NjE5ZGIwZmMsIDB4MGQ2ZDlhOTMsIDB4YWZhODIwZWEsCi0JMHhhYzMxNGE4OCwgMHhmNGU3NGNmNywgMHhhMzkyZWM4OSwgMHg4ZjdkYTBkYiwgMHg2NmY3MjNhNywgMHgyNzFkZDcwZCwKLQkweGI4MDA4ZmYzLCAweDM3YjkxZGRkLCAweDQ2NTcxZjAxLCAweGRmOGQ5YjlmLCAweDAyOTBlZTU1LCAweGM3OTgzMTQwLAotCTB4ZjA3OTQzYjYsIDB4NTI1M2NkNWQsIDB4NWM3YzAxYzAsIDB4Zjk5ZDNkYjUsIDB4ODllNWY2MGQsIDB4MWQ3ZTM5MzYsCi0JMHg5M2NjMTljYSwgMHg1OWNiYmY0MSwgMHg0ZmE0NmNlYiwgMHhhYTBkYjZjZCwgMHhkMzlmNDBkZiwgMHhkZjk5MjNmNSwKLQkweDNjZDdhODkxLCAweDc3YzBlMzA1LCAweDAyOTU5ZjJiLCAweDM2OTVjNTM4LCAweGVmNzUzZjZlLCAweGFhZGMyZDc2LAotCTB4ZDQxYWZjZTEsIDB4ZDc5YzZlZTEsIDB4NWJiNjJhM2QsIDB4Y2JiYzVkMWUsIDB4MzZmODQ3ZTUsIDB4N2RlMWIzYWIsCi0JMHhkNTliYTNlNSwgMHhhODVlODM3MiwgMHg2NDBhM2VkYSwgMHhhNmQ3MDBjOSwgMHgyNGUxODFlMiwgMHgwZjAxMjM3YSwKLQkweDg5NTNjMTMzLCAweGVkZDY4NjdhLCAweGE1NzY4YWE4LCAweDJkYWE3Y2ZlLCAweDZhYjFmODkzLCAweDVmZWE2Y2JiLAotCTB4ZDdlNDdiYTcsIDB4Yzg4N2VjOGMsIDB4NTVlMTM3NWUsIDB4MmY2YWRiYTcsIDB4YTA4ZWViZTMsIDB4YTBhZjU5ZGIsCi0JMHg2YTViZDJhMywgMHgxZjJmNWZlYywgMHg1MDM4M2E0NCwgMHhmY2E5N2I1ZiwgMHhjYThmYmQ1NiwgMHhhMjdlZjU4ZCwKLQkweGJmODg0M2NmLCAweGM2NGVkYzExLCAweDk3ZDc2MGU3LCAweDgyN2IyZjIxLCAweGMzZWMwYmNjLCAweGNiMDZlNmIyLAotCTB4MGFjZjUwZWMsIDB4YTJlZTdhZjEsIDB4YzhiZmU0YjAsIDB4ZWMxMmY1ZmMsIDB4MDRlMGM1ZGUsIDB4N2FmZGZhYzEsCi0JMHhmNjNiMDE1MCwgMHg4YWJjMzUyMSwgMHhhNmZjNjAwNSwgMHgwNGNlMDhmZiwgMHg1MjhmZjc3YiwgMHg0YWZhODYzOCwKLQkweGI4MmI4NWI2LCAweDI4N2NjNWRjLCAweGZhYzVlYjc3LCAweDEzZjI1ZGIzLCAweGE5ZTdkNjFlLCAweGJhMWY2ZmE0LAotCTB4MmNhYjc0YWQsIDB4NjM2NmI5ODksIDB4ZjdmYmZjYmQsIDB4YmIzZjUyMTUsIDB4ZmExNTFmYTksIDB4M2Y3NGJlMjksCi0JMHgzNjRmYjdiOSwgMHg3YjdiOTNmNSwgMHgwMWNmZGU4NSwgMHhmMmVkMjdlYSwgMHhmNmU4NzlmYSwgMHhkY2YwY2M2YiwKLQkweGYzZjdhOTVlLCAweGI5ZTNmNTMyLCAweGRlZTU3OWJjLCAweGNmMGNjZDMxLCAweGNmZDRkNTFkLCAweGQyMDE0NWMwLAotCTB4M2ZjZWIyYjcsIDB4YjQzYmQ2MGMsIDB4OGU2NDc3MTcsIDB4NTM0MWZhMzcsIDB4YzBkZmQzNmQsIDB4NTIwZGM1ZjUsCi0JMHg4Y2EzZTQ2NSwgMHg3OTI2NjljOSwgMHg5OTY2MGNjYSwgMHgwY2U2MDNlYSwgMHgwOWNmYjUzMiwgMHgwZmRlOTkxNSwKLQkweDg1OTU3ODVjLCAweDg5ZWYzNTJmLCAweDQwOGVhMjUxLCAweGY2OGI0M2ExLCAweGY0OTUyMGYxLCAweDI3MjBkOTRlLAotCTB4MjBmNzdmYzEsIDB4ZGRjZWY0OGQsIDB4ZTA0Nzg0ZDcsIDB4YTJiMDhlM2EsIDB4MWFiNzczN2YsIDB4ZWE0ZGViMWUsCi0JMHhjYzQ4NzRjNywgMHg4NmRmYTU4NywgMHgzZGZkZjVhNSwgMHg5ZTljMWVjMiwgMHhiN2YwZjFmZiwgMHg1YjVhZmJlMCwKLQkweGE4NGNmMGVmLCAweGZiMmI2YmJmLCAweGJjZjllMjMzLCAweDMyNjlmZmQwLCAweDY5NzZjM2FiLCAweGVmZmE0NjBlLAotCTB4YWRkMmMyOWUsIDB4NWI1ZTAzMTEsIDB4NDhiZjAwODYsIDB4ZWM1YjdlODksIDB4YTNmMjFmNjEsIDB4OTAxYTkzNjQsCi0JMHg1MTBmZDczZiwgMHhmYTA0MWIxOSwgMHgxZmRiMWQ3NCwgMHg5ZWU3MzU4MSwgMHhjNDNlZTUyMSwgMHgyZmZkMDNiZiwKLQkweDhjMmFmOGUzLCAweDc3YzY5YTNmLCAweGI3N2M2MGQ4LCAweDhlZjhmOTJkLCAweGYxYTZjOWEyLCAweGE2MTUwNTlkLAotCTB4OGMyYTlkZjEsIDB4Njk5MWYyMGYsIDB4OWRmMTg5NzMsIDB4YWQ2NjE3ZTQsIDB4OGVmOGQyNzMsIDB4ZmYxYTBhODIsCi0JMHg5ODU1OTUxZSwgMHgxYmViNGZjNiwgMHhjNjBkYTA3ZiwgMHhmZWUzNjIxZCwgMHgxN2Y5YmY0YSwgMHg3ZjllNjM1ZCwKLQkweGZlNzlhNTQxLCAweGExN2Y5ZjJhLCAweDlmOGM1MzJkLCAweDVhMmZmMzQ2LCAweDJmZjNlNWU3LCAweDc3ZjNlNGE4LAotCTB4YzZmYjdlZjAsIDB4N2ZlMWY0ZjcsIDB4MjYzZjhlMDQsIDB4ZTI4ZWY4YzUsIDB4MGZmOWU2NjksIDB4ZGZjZjM2YWQsCi0JMHg2NzFmYzdjMSwgMHg2YmUzMTNjYiwgMHg3NWY4ZmUzNCwgMHhhMWZmM2UzZSwgMHhlYWJlMzRkNSwgMHg4ZjkwMDcwOCwKLQkweGJhYjRmY2Q0LCAweDgzNDNkYTI4LCAweDI0MGRmYjQxLCAweDcyYTQxODFkLCAweGJiOTNmNzI0LCAweGUzODIyMmE0LAotCTB4NzdjZTM0ZWUsIDB4YmYwMWE1MWYsIDB4Y2E3ZDA5NjksIDB4OWUyOWViYTIsIDB4NzRmMDUyYjIsIDB4MzUzMjhlZDUsCi0JMHgwN2JjNWEzYywgMHgwMDk5N2Y3YiwgMHg0Y2JiNjk3NSwgMHgzYTM2Y2Q3YywgMHhiYzAwNTdhMiwgMHhmOTMyZWRkZCwKLQkweDVlMzc0YjNiLCAweDNkNjk5NTFiLCAweDE4MDhmZWU1LCAweGZlN2M3MTkwLCAweGQ5OGY2ZmM3LCAweGI1OTc5YzYyLAotCTB4M2Y2YWQ2NWMsIDB4YWI5MDY5ZDEsIDB4OWQzZWZkM2UsIDB4ZjgwM2FjOGQsIDB4NTM1ZTQ4MzYsIDB4NjllODA0ZmQsCi0JMHgwNmRlYTY3NCwgMHg0OWU1OGM3ZCwgMHhmM2MwMzM4YywgMHhiMzhmNDA3NywgMHg3ZmZkZmQxMSwgMHhkMWI1ZWVlOCwKLQkweDBhMmZhZjMwLCAweDFjMjg0ZmY4LCAweDQ4ZDYyN2RmLCAweDQ3ZmZjNDUxLCAweGE4YTk1NjFiLCAweGE2YjU5NmNmLAotCTB4MDdkM2QxYTMsIDB4NTNhMGFkNDcsIDB4ZDkwNzZlZWYsIDB4M2Y0ZjgwNTUsIDB4MTIxNmU3ZTIsIDB4YmY3ZWM2NDUsCi0JMHgyNDg3MGJlZiwgMHg2Zjk2N2JiMCwgMHg2ZWZhNjAxYSwgMHhmYjM2OGIxMSwgMHhmYjkyZmRhMCwgMHhjMmYxMGYxNywKLQkweGU4NWQ2ZmZjLCAweDFmOTMyZjE4LCAweDkxYjdjYzE4LCAweDFiN2NiMzFjLCAweGRiMGI0ZWY4LCAweGExZjNkODM2LAotCTB4YmI0MmNiNzIsIDB4NTJmOTRmYzksIDB4YjViZjVjZDgsIDB4YjZlZjVjYzIsIDB4Y2YxOGVkNDcsIDB4YjEyMTVlZWEsCi0JMHg2ZGVmZDBjZCwgMHhmZjhiNzY3NSwgMHg2MTU5YzdjMywgMHgwOGYxMTJjYiwgMHg4MTE3ZGUzZSwgMHhlOGYwNzk4NiwKLQkweGUzYzcyYzM2LCAweGY1ZDEyZjYzLCAweDU2ZmYyZjc2LCAweDZiZjZhNzg3LCAweDkwNTQ3MDc2LCAweGU4Mzk5ZDdlLAotCTB4MGU0OGIzNDcsIDB4MmY2MTc3ZjksIDB4ZGUxNWI3OWYsIDB4NjBjZWVkZGIsIDB4ZmRiOWUwMDgsIDB4ZDNlMTMyYWIsCi0JMHhiZWU3N2YwYSwgMHhlYzBkYTBmNCwgMHg3ZjRkY2VkMSwgMHg2ZTdkYTNiMiwgMHhmZTE1OGY5ZCwgMHhlNzVhZDYzYiwKLQkweDdkNzE1NWUzLCAweDNlYjExYzU4LCAweDVhZWM5ODhmLCAweDJmNmRhY2JkLCAweDgxOGVmYWRiLCAweDlmNjI2YTlmLAotCTB4ZTE4ZWZhZGIsIDB4ZjNlZGFhYmIsIDB4ZDExNWY1NGMsIDB4MmZkYTk5MmYsIDB4ZjRkOGI0ZGYsIDB4MGFlYjU5N2UsCi0JMHgyZDI1ZmJkMywgMHhjNWY1NGNhYiwgMHhkYTlhYWY5MSwgMHhjMWI2YjFkZiwgMHhiYWI2ZmVmNCwgMHg2ZmVmNGQ3YiwKLQkweGFhNjBkOGFkLCAweGIwZmMyOTdmLCAweDBiMmRmZGE5LCAweDRiZGU5YjM3LCAweGVkMGM1NmZiLCAweDFlMWFiZDI0LAotCTB4ZWI3Njg3OWEsIDB4NTlmOTA3NzEsIDB4ZjJlYmJmM2EsIDB4MTZlYzBhNzAsIDB4ZGQ4MzRmMmMsIDB4Y2EwMzY1ODIsCi0JMHg2ZGJmYzgyOSwgMHhiNzZiMmYzNywgMHgzNWVhMWUyYywgMHhlZDI3NjFmOCwgMHg0ZjI4MDU3NSwgMHhlMmI3YmU1NiwKLQkweGYwZGZjYWQzLCAweDFkNmM5Zjk3LCAweDhjNmFjYmQyLCAweDNkYmY0MTQzLCAweDI0MzkzZjE2LCAweDFmMWVhMGY0LAotCTB4ZGNiOTU2YWMsIDB4OWJjY2VmNTYsIDB4YjU3ZmZlOGUsIDB4OTc1ZTFmMWEsIDB4OTNlYzRmYzQsIDB4ZjM0NDk4ZTcsCi0JMHhlN2E1Njg2MCwgMHg1YjgwZGQyMCwgMHhkYWFiNzgwZCwgMHhiMzgyNmM1ZSwgMHhlMzRjYmY2YiwgMHgwNWQ5NDRhZiwKLQkweDBhNWYzN2ZkLCAweDg4ZjVjNzFkLCAweDJjMTYwZmM1LCAweDA0ZjA4MzE4LCAweGY2ZjU0MzdmLCAweGJiN2Y1YTFjLAotCTB4N2Q2Y2U3ZWEsIDB4MGJmODhlYzcsIDB4N2VhYTc5NTEsIDB4ZWEyNzk1MjEsIDB4NTNiZTU0YzMsIDB4ZGJlNTQxNWYsCi0JMHg3NjU0NzVmNSwgMHhmMmE1YWZkNiwgMHg5NTA4ZmFjZCwgMHhhMTZmYWJiZiwgMHhhZGY1MzdmMiwgMHhkZmFiMWU1NCwKLQkweGY1ZWJlNTQ0LCAweGViYmIyYTUxLCAweDdjZWE1NDgzLCAweDQzMjdhN2RiLCAweGZlMTU2ZWMyLCAweGI3MjI0ODA1LAotCTB4ZTQ1Y2M1NWIsIDB4OTZiOGJlZGMsIDB4YWNmMWU1MGYsIDB4YjQ3MGQxZjYsIDB4MDMxZWNmY2IsIDB4YzZhNjE3MjIsCi0JMHg1MjFmOTU5NywgMHhjOTA1OTVlMiwgMHgwMjhmMjhhZSwgMHg3ZmY0MDc5ZCwgMHg3NGUzNGFlZiwgMHgxY2Q4ZDk3MiwKLQkweGRlZTM3YTA2LCAweGMwMWZiZTJiLCAweDE1ZDQxMzM4LCAweDQ3ZGY4NTk2LCAweDQ5ZGNmMzAzLCAweDEwN2YwNWZhLAotCTB4M2EyOTc1ZTksIDB4Yzk2ZjYwYjEsIDB4ODljN2EwN2MsIDB4OGE1YWZlNDcsIDB4NDU2Yzg2ZmQsIDB4MjgzODVlZGMsCi0JMHhlMmM5N2FkMywgMHhhZjQ4MDM1YiwgMHhlOTM3OGE0ZiwgMHg0MDJmYmYyNywgMHhhMzkzMzliOSwgMHgwMGEzYWZlMywKLQkweGIyZGYwNGUzLCAweGIzOWZhOTc5LCAweDIwYTYwZTZkLCAweDQ3YTRmNzFlLCAweGY2N2QyNDMxLCAweGFlMGY1NmYwLAotCTB4NzI3ZGFiNzcsIDB4YjMxZjE4ZDQsIDB4YzJiMTM1OTYsIDB4NGY5ODY2YTgsIDB4N2ViOWJiNmQsIDB4YzM5YTU1YjYsCi0JMHg4Y2ZlNjllMywgMHg1ZjIwYzY5YiwgMHg1MGVmYTM3OSwgMHhhNTQ3ZDE1YywgMHg5ZjZhY2ZkZSwgMHhmZWU4ZTM0YSwKLQkweDQ5OTFkYjM4LCAweDIxN2UwYTdjLCAweDg2YWZmYmI1LCAweDA5M2Y1NTIzLCAweDFmZDhkYTM4LCAweDJlMjg3NzAwLAotCTB4YjkzZjhhMTcsIDB4MGY5NGNlNWYsIDB4YjFiYjhjNTQsIDB4NzA4ZmY2M2QsIDB4N2ZjMDc3M2QsIDB4NjU5MWQwMTcsCi0JMHg3ZWY1ZDUwYSwgMHhjNDcyNjM2YiwgMHhlZjlmMTYzMSwgMHhkZjA3OGQzMCwgMHhmYjlmNzVmOSwgMHhmOGM1ZDE0MiwKLQkweGY0Mjc2MTU1LCAweDliNmE4Mjc5LCAweDBlNDQzZThmLCAweDZhMmI5NWYyLCAweGE2OTlmYmQ2LCAweDVlN2I2ZDdhLAotCTB4ZTAwZWI0ZDQsIDB4NTllZTQwM2YsIDB4M2FlMGE0ODUsIDB4YThiODJkNTgsIDB4MjQ1YWQxNDcsIDB4ZWM4YzZmODAsCi0JMHhmMTI2ZmNlNywgMHg0ZWNlMzU3NiwgMHhiZTQ3ZWMzNSwgMHg1NGUyZmM2OSwgMHhhNTZjYjYzZiwgMHgzYmUxNWFmOSwKLQkweGFiZDg3ZjVkLCAweDVjN2UyNDVjLCAweDNiYmQ5ZjI1LCAweGZmYzhiZWQ5LCAweDQ4YmVmOTk2LCAweGQzZGI4ZGI1LAotCTB4YTBmMTE5Y2MsIDB4MTE3Y2NhYmYsIDB4ZTE4YmM2MGYsIDB4MGZjM2ViNGYsIDB4OGUzMDRkZjksIDB4YjNmN2FlYTEsCi0JMHg0ZGVmNmEyMiwgMHhkOTc2NGViNiwgMHgxZDZjOWRiOCwgMHg3YjhjNDViNywgMHhkY2FkZmMyOSwgMHhjZTM2NzQ3MSwKLQkweDk1Yzc4YWRiLCAweGI0YWJlZmVkLCAweGZmYzBhMzFmLCAweGQ0NzgxMzRhLCAweDBlNDYzYmYxLCAweGRmYzBjOGI1LAotCTB4MjJkZmRiOTUsIDB4M2Q5NGYyN2IsIDB4MTc2YmZjMzIsIDB4ZTFmZDViZDEsIDB4YjcxNDdjZDcsIDB4NjExZGU3ZDUsCi0JMHg5ZGNlMzgxZCwgMHhmZjY3ZjE3ZCwgMHg3NTg1YmYyZCwgMHhlZDk3ZGRmMSwgMHhmNjJjYmUzYywgMHg3MDM4NzQzNywKLQkweGY1MDZkMGQzLCAweDY3NzZhMjI1LCAweDliYzUxNTViLCAweDNkNzVkZGRmLCAweDU5NGI2ZmQ5LCAweDY0NGU4M2M4LAotCTB4NDUyZDZiMDUsIDB4YjMwY2YwM2IsIDB4OWQzYzQxY2QsIDB4MjY3YWFmNjEsIDB4NDNiNGU4MTgsIDB4OTc0ZTQ5NTYsCi0JMHgxMGVkOThiNCwgMHhmNTRkNWZiMCwgMHhmNWNjOWJlNSwgMHgxNzNmMzY3MiwgMHg0NmY5NGNmNSwgMHgzNDRhOGIzYiwKLQkweDQ3ZmJkMzNmLCAweDdmZTEyZjY1LCAweDhmNWJhYjM5LCAweDlkYTM3M2ViLCAweGU5ZGRiM2VmLCAweGU4M2U0YTY1LAotCTB4MWUxNzlhZGIsIDB4ZmYzOGM1MmIsIDB4N2ViZTY0OGYsIDB4MTU5M2YxZWEsIDB4YWI4ZWRjNTksIDB4MzE1NjZkOGMsCi0JMHhiNjg3ZmZiZSwgMHhjYTljNWYwOSwgMHg3YWU4ZmJmMCwgMHhjZjIyMWY1YywgMHhmZTZkODE0YiwgMHhhNGZkZjhmZSwKLQkweGQ1ZTE1YmYwLCAweDcxN2VlZmQ3LCAweGNkNDcwMTFjLCAweGJjNjkyOTc2LCAweDg5MmNiZjc3LCAweDYzZjM5ZmY1LAotCTB4YmFhNWUyODYsIDB4NWJlN2Q3NmUsIDB4MjJjOWFmZWEsIDB4MTkzMzJjMWUsIDB4ZWJjNjdlZTksIDB4ZTgzMmQ4OGMsCi0JMHhmMzhlMjA3ZCwgMHgzNDA4ZTlkYiwgMHg3MmMyZmNjMiwgMHhmNjRjOThlOCwgMHgxOTg0YmM0NCwgMHgzMGU1ODVkYSwKLQkweDVlOTJlZjNkLCAweDkzYmI0NzI5LCAweGI0MTJmMTI5LCAweDIxZWQ2MTIzLCAweDNmMDU1NTNlLCAweDEyOWU2OWM4LAotCTB4MzFiYjc3OGMsIDB4Njc3MThiYmUsIDB4ZDYwYjY3OTcsIDB4ZTYyYmJiZDcsIDB4MTZiNTFjNjIsIDB4ZjdmNDAxZjUsCi0JMHg2MWY2Njc4MCwgMHhiMjcwOWZkYywgMHhmODEwNzhkNiwgMHhlZjMzZTFkNywgMHhlNmZjYjgyZiwgMHg3NWVhM2E3YSwKLQkweDAwZjg3N2Q0LCAweDhjMDJmOWY3LCAweDIzZTk1NGUyLCAweDAxZGNlZGNkLCAweDFmNmNmZDczLCAweDVmN2NlMjllLAotCTB4ZjcxYzU4OWMsIDB4MGNiOGI1YzcsIDB4NGFjOWIzZTMsIDB4NTRiZjlmNTcsIDB4ODcxYWZlODQsIDB4NWE2NGVjMWYsCi0JMHg3OTc4ZDZmZiwgMHg3ZTIyOTVmYiwgMHhmNGY4ZTZiZiwgMHg4OTE3NTk4MSwgMHg5MzllZDU0NywgMHhjZWIwZDQ1OCwKLQkweDJhYmQyYWQ0LCAweDM5ZWQ2MWYyLCAweDZhN2Y5ZTg1LCAweGQ1ODdlYWJkLCAweGYzNTdhMGQ2LCAweDkyOWE3MGU1LAotCTB4YzIyOGY1YzMsIDB4NjEzOGMxMjcsIDB4ZTM4MDlmMDMsIDB4ZjljYTM1ZWEsIDB4N2MzZjBiMDgsIDB4OTliMjM4NmEsCi0JMHg5MThmYmY0OSwgMHhlMGM5ZjljMywgMHhmYmZkZDRmOCwgMHhlMjNmZjVmYSwgMHg2MWZmYjRiZiwgMHg5MDlmZmFmZCwKLQkweDE3OWFmZmFjLCAweDgxMTVkOTllLCAweDg3ZjJhMmY1LCAweDMzMDBmNmRmLCAweGQ2OTU3N2IzLCAweGJkZDAwMGRjLAotCTB4MDdiMzViN2EsIDB4MTI5NGYyZTUsIDB4ZGY1ZDIwZjEsIDB4YTI3M2NhOGQsIDB4NTJhMWY4NDksIDB4YTgyZWY5ZDEsCi0JMHgzZmM0YTU0OSwgMHg5ZmE3NDdjNCwgMHhlODBkZTZmZSwgMHhjZGI0N2ZjNywgMHg3ZWZmMjVlZSwgMHgwMGVlMjNiYiwKLQkweGI2ZDk1Y2E2LCAweDc2YzdjYjgyLCAweDdlYmM1YmM3LCAweDlmYzhmYmNmLCAweDdkNjZlZGI1LCAweGI3ZTRmOTUxLAotCTB4N2ViNGZkNzMsIDB4MWJmZjg0NDUsIDB4ZTU2MWZmMjcsIDB4OGQ5YzdmMTMsIDB4ZWIyZDU4ZjYsIDB4ZmQ2N2JkMjUsCi0JMHg5NzNmYzcwZSwgMHg2MmMyZjY0NSwgMHg3YmZmYTMzNSwgMHg1NmIyMWY3ZCwgMHhlZGI2YTVlMCwgMHgzZWUzZWY5YiwKLQkweGU3ZGI2ZDQ0LCAweGU5YTE3MjRlLCAweGZhZDFiZjI0LCAweDA3ZjA4NTVkLCAweGQ5ZGM1NTZlLCAweGM0OWJhZjE0LAotCTB4ZTliZjIxMjYsIDB4ZWU1MTYxNzgsIDB4M2MyZmM4MGYsIDB4OWNmMTgyNTYsIDB4ZjY1ZTI3YWUsIDB4N2M4ZGEzNDgsCi0JMHhkOWRmZjVjYSwgMHhmZGVmOTJkOCwgMHhhZTVhOWZkOCwgMHgxYTNmNDFiYSwgMHhjZWRkNmVlZCwgMHgzZjBiYjdmMywKLQkweGFiMmYwZjY2LCAweGVlMGY3MWVkLCAweGI2NmY1NDFmLCAweGY1NWNiZWQzLCAweGZmYmY1YjMzLCAweDhlNTdjNjA4LAotCTB4NDA1NzAyM2IsIDB4YmNjZjU1ZmYsIDB4NTAzNWZhZjQsIDB4OWVjZTdhYWYsIDB4NDM0Zjk3M2QsIDB4ZjQxMzcyOTMsCi0JMHhkNmZmODVhOSwgMHhhM2QwNGY4ZSwgMHhhOTJmNDdmMiwgMHhjZjhkMGZiOCwgMHhhMDk1OWViZiwgMHhmYjczZDU0YiwKLQkweDNmYTYzNjU1LCAweGY2YzQ2NjNlLCAweDEyNWE5ZGFiLCAweDlhZGVjNGZhLCAweGZjODZmZThkLCAweGU5MTU3OWMyLAotCTB4ODkzZWVlZmYsIDB4ODI0YzJjMGQsIDB4OTEyZmNkY2YsIDB4MjI3ODhjZGQsIDB4ZjU3YTBhN2EsIDB4YmVkMmNmZDEsCi0JMHg3YTQyZTgxNiwgMHg2YjJmNDJkMSwgMHhmZTQyNjliYiwgMHhhNzhjNWZiMSwgMHhmYjNmN2YwMywgMHhmOTc3ZGM2MywKLQkweDc4ODAyMzhkLCAweDJlZjY3OGE4LCAweGE0ZTdjZTBmLCAweGZjZjljNzUyLCAweGNjNWNlNmIxLCAweDQ3YjBhOGIzLAotCTB4ZjI1NGJkNzIsIDB4N2Y4ZjE1ZTcsIDB4Zjk2ZmY4ODUsIDB4NTJlNGFmZDEsIDB4ZjMwNTgzM2MsIDB4NDQzYjY0NmMsCi0JMHhjYjllNzBmMiwgMHhlNjk5YmQxZSwgMHhjNGMyY2U1OSwgMHhjOThmMTU4NywgMHhhMWYwZmY5NCwgMHg5NzNjZTZjMiwKLQkweDE2ZGU0ZTQ0LCAweDhiNzI3MjcyLCAweDRlODU5MjgzLCAweGZiODI0MmUyLCAweGQxY2FhZjEwLCAweDViY2YxNDZkLAotCTB4YWY5MmYxNDUsIDB4NmM0N2ZiZTgsIDB4NzQzZmQ1MzUsIDB4MmJiNTdhNzIsIDB4NGIwYzFmYmEsIDB4OWY3ZjkxODksCi0JMHhlOTAzYTdiOCwgMHg3MDQ4N2E3NCwgMHg2YjgxYzYyMCwgMHhmODExMTI5OSwgMHhiZjQwMmU5MCwgMHgwMzU5ZDFmMiwKLQkweDVmOTg5ZDM5LCAweDgxZGYxNTI5LCAweGNmODE5ZmZlLCAweDNkODc3ZGIxLCAweDdkMzEyYWU4LCAweDI2MTQyZWM3LAotCTB4YzYyMzVmYzYsIDB4ZDBkM2I4MDcsIDB4MGI5OTNkYmUsIDB4Zjk5MjYwZjYsIDB4M2QyNWQ4NjUsIDB4MGNjMWQ0NmUsCi0JMHg3NzkwNjY3YywgMHhkYzRmZmYyZSwgMHg5NzVkZTVjYiwgMHgzOWJjZThmZiwgMHhkNzgzZmVmOCwgMHg3N2UxMWNiOCwKLQkweDVjMDBiZjY4LCAweDdlZjQ4MWYxLCAweGU5MTI0ZGZmLCAweDI3OGIwNzA3LCAweGVjMjdmMzkzLCAweGVmY2RjZTQyLAotCTB4ZjAwMmZjYWQsIDB4ZjcxZWI4MmIsIDB4OTM4ZTBkZjEsIDB4ZmIyMDc0NDUsIDB4N2MyMzdjYjYsIDB4MzhhYmQ0NmYsCi0JMHhiZjdmYTdhZSwgMHgxNzJmMWNiYSwgMHg4YWY3ZTBmYSwgMHhmYTEwMGZjOCwgMHhmNWNhM2Q4MCwgMHgyNDNmNmE0MCwKLQkweDdiNzVlZGMyLCAweGEwOGZmYmY0LCAweDQ2YmM4MmZjLCAweGY2YmYyOGZjLCAweGJkZmZjZTEwLCAweGZmNWYwNzFkLAotCTB4N2JjZGM4MzIsIDB4Y2Q2ZTVkMzEsIDB4YjcyYWQ1N2EsIDB4NjZhZjNiMTUsIDB4M2RmNmU0YzksIDB4Y2E5MmMwMmQsCi0JMHgyYTRmM2MyZCwgMHhmMTI3NWFiNywgMHhhZjViZGZmMywgMHhlZDU0NzhlYSwgMHhlYmFhYmQ2NiwgMHhiNGY4NTRjOSwKLQkweDhhY2RjOWVhLCAweGQ1NmFmMDlmLCAweDFhZjdmMDkzLCAweDhmY2ZlZDJiLCAweGZjZWExZjNhLCAweDlhODNmOTU3LAotCTB4ZmE4ZmE4YTEsIDB4YzNlNzU0ZjgsIDB4ZjlkNTNlM2UsIDB4ZDEzYzVmYjAsIDB4ZmJlYjQ3ODQsIDB4MThkYzYwNWYsCi0JMHhmYmI0MjVmOCwgMHg4MWYzYjNkNywgMHhmODdiZDVhZSwgMHg3NzdjMmNiZSwgMHhhZjgwZWIwOCwgMHg1YWQzNzcyMCwKLQkweDFiNjdlNTBmLCAweDNkNGI1MWViLCAweGI0MWY2OTY2LCAweGY2OTY0M2Q0LCAweGNlYmQ0YjYxLCAweGUzY2EzZWQyLAotCTB4NTUwN2VkNjksIDB4MzcxMzlmOWUsIDB4NjNhZmI3YjUsIDB4YjFjNjM3MTEsIDB4YzcxNGNhZjcsIDB4ZDc5ODAxZWUsCi0JMHgzYjNkZjdjMywgMHhjMjkxYTMwYSwgMHg2ZjViNWU0NCwgMHhmNTFlYmE4ZSwgMHhkN2I3OGY1OSwgMHhhZjYyZjY4MywKLQkweDdhZWZjNzhiLCAweDRjOWViZDQyLCAweGQ2ZjY5ZDgzLCAweDcxZjQ5OTFlLCAweDQ5Y2Q5NDY3LCAweDA1ODI0ZmU2LAotCTB4NjRlYmY0NGQsIDB4YjhmM2RlYTksIDB4ZGRkYTBmN2MsIDB4NTkyY2RlMzAsIDB4NzE4YjU4MmIsIDB4ZjI5OTU2OTgsCi0JMHhkYzM2OTY2NywgMHg4Y2ZjYzFlMiwgMHgzN2M1M2Q5ZSwgMHhjYmU3ODQyZSwgMHg5YjdjYzg4ZSwgMHhmMjU0MTIzMCwKLQkweDI5ZGM3ZTBjLCAweDlhNjg3OTE2LCAweGY3YzdmYjg0LCAweGVjOTdmZDEzLCAweGQyZGQ3ZWUxLCAweDczZjM5M2ZiLAotCTB4NWNhZWY4YTUsIDB4ZGVhMmEzNWIsIDB4NmRlYzdmMDQsIDB4ZGU4M2JlZTMsIDB4OTZhM2M1NGYsIDB4MTdhZTdiZTcsCi0JMHhmZGZkY2Y3YywgMHhlZmNjMjdjYSwgMHhiMDNlMjJjMywgMHg3MWZiZTc0YywgMHhjZmY3MWM2YywgMHhhZTc3ZTUxOSwKLQkweDk2Nzc3YTE2LCAweDg1YzZmYTNjLCAweGMzOWU4NzQwLCAweDM5YmU0MzMyLCAweDNhMjY0N2JiLCAweGY3YzFkZDljLAotCTB4M2VjZTI5ZWYsIDB4OTdiNWY5MDUsIDB4YWY4ZTlkZjQsIDB4MTE4Zjk0MmUsIDB4ZDc1MGY1YTksIDB4ZmQyZmJmZjMsCi0JMHhkZWE5MzQxYSwgMHhlZjkyZGJmNSwgMHhlYmI1ZDk0MiwgMHhiMTE3ZjBmOCwgMHgwNTFiYzJmZSwgMHhkYmZkNjViZiwKLQkweGEyZTdkOGNmLCAweDdkOWU4ZDdkLCAweGVjODdkYTZlLCAweDgyZjNmYmQ5LCAweGI3N2Q2MWFmLCAweGY2NzA4MDIzLAotCTB4MDk3M2ZiZWMsIDB4M2FjZjUxZjIsIDB4YjFlYTA1NDcsIDB4MWZkYzIxOWUsIDB4ZTdmYmRjNmQsIDB4M2Y1YTRlOTIsCi0JMHg5MzdlNzg5YiwgMHg2N2MzZmI5ZCwgMHg0ZGY1ZmNmNywgMHg5ODRiMWIyOSwgMHhmYjA3ZGExNSwgMHhhODdmNjlkMiwKLQkweDhhMmVjN2Y2LCAweGZkZWNmNWFiLCAweGNlZDFhOTczLCAweDU5ZjNhY2ZmLCAweDdiMWJmNjI5LCAweDRlZTE2Y2RjLAotCTB4ZWY5MzJmODQsIDB4MzhiZWQ0ZDMsIDB4ZTYwMzZiNjUsIDB4NTdlZGI0NjMsIDB4MTlmYmMwOTcsIDB4ODI1ZjM5M2YsCi0JMHgyNzY3YjFmYSwgMHhlZGJhN2JiNywgMHg3ZWUzOGY5ZCwgMHgyZmVkNzdkYSwgMHhiZDAzYjNhZSwgMHgwNjM4NTFiYSwKLQkweDNmNTI5YTgxLCAweDkyZDExZTllLCAweGM1M2NlNWUxLCAweDFmMTcyZjBiLCAweGUwYzdmZjNiLCAweGY1N2RhMjQzLAotCTB4YThlZTNkZWEsIDB4ZmY3OWMyNTMsIDB4YTJkZmNkZTUsIDB4MjBlN2Q4M2UsIDB4ZmJlN2Q0YmUsIDB4ZWM4MWFjNWUsCi0JMHhmYmNkNGI5MSwgMHhiY2RkM2ZlOCwgMHhjY2U1ZjhhNSwgMHg3YzFmZjdiYiwgMHhmMjYzNzdkZSwgMHhlNWZkZDVkYiwKLQkweGVmOWYzZmEwLCAweGNmZWE5YmJkLCAweGVmMDQwM2I4LCAweDU3YmJmMjY1LCAweGZkMWM3OTU1LCAweDlmZmU3NDFmLAotCTB4ODEzYmVlOTgsIDB4Y2Y0YjllZWUsIDB4ZjgzZmVjN2IsIDB4ZmRkMzUzYmMsIDB4ZWU4MmVkYzgsIDB4YTk0N2NjNWUsCi0JMHg4Mjc5YzlmZCwgMHhiOWVhOTNlZiwgMHhjZTg3ZmYxYiwgMHhlZmQ3Yjc1ZiwgMHgzMTVhMDViMywgMHhiZDFkM2IyZiwKLQkweGUxZTczYzAxLCAweGUxODJkZjllLCAweGNlNDZmYmMxLCAweDI4ZGRhMmY3LCAweDJiNGJmZDhiLCAweGZiOTUxMTdjLAotCTB4ZjNjNGIyN2QsIDB4MWUxMGQ5ZDYsIDB4NGZjMjYzY2YsIDB4ZDcxMGYzNDIsIDB4MjcyYjQ1NGYsIDB4ZDZkMTU0YmIsCi0JMHg5NGNjZGQ5MywgMHhmMDEwNDc0MCwgMHg3NzU1ZGY3MiwgMHg4N2Q3MjgwNiwgMHhjNjE2M2Y4ZCwgMHgwMTY5ZTBmYSwKLQkweGZjNWI1NzhhLCAweDA1ODkyNmM1LCAweDk1NTdiMDI1LCAweDE4N2YzZWFiLCAweDQ4ZmIxNmZkLCAweDQyNTFkYzViLAotCTB4ZGU1ODViZTUsIDB4NzY5MGUyMjMsIDB4NjdmMjZhYWYsIDB4YmFlNmQxYjQsIDB4M2JhZTZmY2IsIDB4YzY0ZTdmNDQsCi0JMHg1OGZhNzdlMSwgMHhmMmQxZTMxNCwgMHg5OGJjMDc5NSwgMHg1MzhmMjZjZiwgMHhiYjJlYTYxOCwgMHhmZDA0NmI1OCwKLQkweGZjY2Y4NzA2LCAweDczZjQyMmZkLCAweGI0NWJmMTBkLCAweGIwNjBlM2RiLCAweGFkOGVmYmZkLCAweGYzMzgzZjE0LAotCTB4NjAzNzViZjQsIDB4Y2EyZjU1YmYsIDB4ZTk3ODA5Y2MsIDB4NzE2NmUxZGUsIDB4YWEyNTFiZTQsIDB4ZDk1MjNmYTIsCi0JMHhiZTI5MDcyNiwgMHgxNzRiYzRhMiwgMHg3NTBiZjYxOCwgMHg4N2VhYjE3YiwgMHg3MmFiODI2ZSwgMHgxNzNhMjNhNywKLQkweGY1ZGNhZmJlLCAweGI3NWExMjg3LCAweDNkOTJmNWQ3LCAweDBhNWE3OTFiLCAweDNiZTFhMzZjLCAweGIwM2Y3MDRiLAotCTB4YmU3ZTQ5NTIsIDB4ZTc5NTExZTQsIDB4NGVlZDc1MWIsIDB4YmM3ZTg4NWYsIDB4NmJlNzlkYjQsIDB4YjE2ZWM2NTYsCi0JMHgyODc5MGMzYiwgMHhkZWJiNTQxYiwgMHhmMjI4Zjg4ZSwgMHgyY2Y5NDQ5NCwgMHg0ZjMxOWYwOCwgMHhiYjU3Yjc1MCwKLQkweDdjMzg5MjllLCAweGU2MjhmNmVkLCAweDdmNmU1NjdkLCAweDExZTMxYmFlLCAweDAxMWNjNzk1LCAweGI3NmIxYjc0LAotCTB4ZWZmMTRmYmYsIDB4YzY3YzNmMTksIDB4OTc3ZTQ5ZDMsIDB4ZmI0M2YyNmMsIDB4NjVkYjdmZjksIDB4YjZjYWViYTIsCi0JMHhhMTViYjIxYSwgMHgxOTVkZjQ0ZSwgMHgyN2Q2ZmUxMywgMHg3ZWFhNGZmNCwgMHgxZTE3NzdiOCwgMHhkMWZhYTg5NCwKLQkweDc3OGMxZTkzLCAweGU2ZDhlZTljLCAweGZiNzAzZjIxLCAweGZkMzFlM2M1LCAweGJkZDhiZGZjLCAweGMyZmJkZmMyLAotCTB4NTRlM2U0NDksIDB4ZmM2OWRlZmUsIDB4M2Y1MWQ4MDcsIDB4ZjM3ZTJkNTUsIDB4Yzc2NDAxZjYsIDB4YzlhNTljMDIsCi0JMHhmZTc0YzdmNiwgMHhjM2U2N2FhOSwgMHhkOTVlMzFjNywgMHhjN2JkZjNiNSwgMHhiZmVhZWUxMSwgMHhiNDcxZTlmZCwKLQkweDk3M2VkOTQzLCAweDZhMmRmNzE3LCAweGM1MzVmZTlmLCAweGRlZWZmNDc3LCAweGEyNWM3OTU0LCAweDI5MjdhOWZiLAotCTB4ZmUwZGQ2M2UsIDB4YmRkNmY2MzYsIDB4ZmEwMTY0ZjcsIDB4ZmRjZmRkMjMsIDB4ZTdmZDE3MjUsIDB4ZDE2NzdiMzUsCi0JMHhjZjM1OGZmOSwgMHg5MmM4MThjZiwgMHgyMjVlYjFjOCwgMHgyMzJmNDZmZiwgMHhkYmE1NjczZSwgMHg2NDgzYjZjMSwKLQkweGJhMDE5ZjJmLCAweGU3ZDJiZmEzLCAweDc4NmFjN2M3LCAweGZjMmZjNDdjLCAweGUzYzkxZGY3LCAweGY1ZmNmZGExLAotCTB4NWUzNzA1YjYsIDB4NmRiOGY5OGIsIDB4ODNhYTAwZjYsIDB4YWZlZGZhNGIsIDB4NWVjNzNkMDEsIDB4ODg3NzFkMDYsCi0JMHgwYmVjNGNmOCwgMHhjZmRiZjUxNywgMHg1ZTgwM2ZlMCwgMHhmYzc0MmRlNywgMHhmN2Q5NmRiMCwgMHg2ZDc3YzExZSwKLQkweGVkZmE1MjAzLCAweDlmYzBjYmYxLCAweGEyM2Q2ZjFlLCAweDk0MGU5ZDA2LCAweGEwM2Y5ZGI3LCAweDZmZDIwOTc4LAotCTB4ZmJiODRjMmUsIDB4MzAwYjBmOTksIDB4ZGVjYTdkNWUsIDB4YjFlNTNiN2IsIDB4ZDE3ODc1ZWYsIDB4ZmJkY2FkNGYsCi0JMHhmNzUzYzkwNiwgMHg5ZTI5NDdmMywgMHhiM2RjNDRjOSwgMHhmMWZkZjU5YiwgMHhhMWM4OTRmOCwgMHhjZGMyN2RhYiwKLQkweDA3NDE3ZGZkLCAweDNkZjgwNzhjLCAweGZkZjg1Y2Y0LCAweDc4ZjVhZjljLCAweDQwMzhhYTQwLCAweGU0ZjNjMWQwLAotCTB4Y2Q3MDM4ZjQsIDB4N2UxNWJmMTMsIDB4ZDI2ZTgyNzUsIDB4NWJkN2E0NjQsIDB4ZWI1ZjhkMTcsIDB4MWUyMmYwNzgsCi0JMHg1Y2UzMTkyNiwgMHg3ZDJlZTNjOSwgMHhkZDBiMmU3MSwgMHg1ZjU2ZjhmNCwgMHg4M2VhMGIxYywgMHg5NTExOWUzMSwKLQkweDM3MTY0OGRlLCAweGUzY2NkZWVkLCAweDczNzZkZDYzLCAweDRlODI0ZGZlLCAweGQ1MzVlZTNjLCAweGU4ZDM4ZTYxLAotCTB4MmYyNTRkZjMsIDB4NmE1ZWRjYmEsIDB4NGYxNDlmMWUsIDB4YmIwOGQwYTMsIDB4YmFiZTNmYmEsIDB4ZGZhZTRlM2UsCi0JMHhkZTVjNzc2ZiwgMHhmZGNhNzU3ZSwgMHg3NTkyYTU5NCwgMHhjNzM2ZTUzZiwgMHhiYzNmNjhkNSwgMHg1N2NhMzJhNSwKLQkweDBjNzllNWU4LCAweGM4YjliZWZhLCAweDVhN2FlYzE3LCAweGZhYzk3OGE2LCAweGVmZDI0MWQ4LCAweGVmYTFmZDU2LAotCTB4YWRlMTU5YjcsIDB4NmNhZWYwMTMsIDB4ZDc0N2ViZTcsIDB4ODM1NDc3NGUsIDB4ZWMwZWJhN2UsIDB4Yjk1ZWJlMjYsCi0JMHhmZDE1MmRlMywgMHg3ZmRiNDNjZiwgMHg4YjNiNzJhNCwgMHgxZmFlMTFjYiwgMHhiYTdjYzM1MSwgMHhjMjVmZGQ5ZSwKLQkweGRmM2M3YWUzLCAweDM3Y2UzYWQ5LCAweGE5M2VkYzFjLCAweDljN2M5M2RkLCAweDliZWYxZGRhLCAweGM0OGFhOWM2LAotCTB4NzlmZjllNTQsIDB4MmI0ZWYxZjEsIDB4YmZiMDViYzEsIDB4M2E3NjFkZDMsIDB4MjYzYTczY2YsIDB4YmZiNjQ5Y2YsCi0JMHgxNzYxZDhiYiwgMHgyZjJiNDFmNiwgMHhiY2E1MWQ2MSwgMHhiY2ZjYTNlZSwgMHhkMzU3YzRjNSwgMHhjZDdhMGYyOCwKLQkweGM1YmYzOWQxLCAweDQwNmI4YzczLCAweDZjNGVkMWFjLCAweGRhN2NlMDZiLCAweGY5ODI3ZmY2LCAweGEzYjZlZjQ4LAotCTB4ZmQ3MTk2NWYsIDB4MzVmODg1ZGEsIDB4YWZhNThiZDgsIDB4ODM3MGNkZDUsIDB4NWRmZDI4N2UsIDB4YWJiMjIyNjgsCi0JMHgzYTRjZWY1NSwgMHgwZmMxMzM2NiwgMHg3NWM0MGNlMywgMHhjMWZhMDlhMSwgMHg5ZmNjN2RmYywgMHhjZjY0Nzg0MiwKLQkweDhmMDgzOWVjLCAweDVkNzliNWVjLCAweGVkNTJmMjQ5LCAweGNhZjI4ODVhLCAweDVlZWQ3ZWY1LCAweGMzMzhkZTczLAotCTB4NGZkMDg2ZjMsIDB4NWU3YTk1ZjcsIDB4ZjEwMzI4NTEsIDB4Y2RjNzYxZjQsIDB4MzI4Njc0YmMsIDB4Nzc1OTE3YmMsCi0JMHhkOWJkMDk0ZSwgMHhmMTYwMWY1NSwgMHgwODFjZmMxMSwgMHg3ZTQ1NmJkNiwgMHg4MzllYzU3MCwgMHg1NjBmNTFiMywKLQkweDJmZTYyNGM0LCAweGFkYTQ3M2M0LCAweDc2M2YzNzI0LCAweGE1NzNmMjY0LCAweDUxNWRiMzUxLCAweGQ0NTdlN2I5LAotCTB4Yjc4ZGIyYmUsIDB4NmEzMTYyYWYsIDB4OGM0NWU3OGYsIDB4NmM0ZDViZjYsIDB4ZTExZWM1ODIsIDB4ZjIyM2RkZmMsCi0JMHg5NWNmYWE0MiwgMHhmZjIxYjhiMiwgMHg5ZjgyNjdlYiwgMHgyNmJkZWFiYSwgMHhmMDhkNWYzZCwgMHhkNjFhZmI0MSwKLQkweGM0ZDRlMzQxLCAweGQxYzY5ODA2LCAweDliOWNkNWRiLCAweDQ2YWZlYTZhLCAweGFiN2UyMGU5LCAweGY0MmZmNzM5LAotCTB4ZWFiZTRmYmMsIDB4ZDQ4Nzg0N2QsIDB4ZTA5YmU3ZmQsIDB4ODUzZmY0NGUsIDB4ZWIyNDI3YzUsIDB4YjczZDFhN2YsCi0JMHhlNmZhODdlNiwgMHhkZTYzNzhmMywgMHg4ODJjYmQwMiwgMHhlODhjZmVhMiwgMHhkM2NhNzNlNywgMHhiZjgwOGRhMiwKLQkweDNmZjg1YTIzLCAweGRjZjgxZjUwLCAweDYyNWYwYjFiLCAweDMyNmNkZTc4LCAweDcwOWY1OWU1LCAweDBmMDQ3Yzg4LAotCTB4MDQ3Y2YwZjMsIDB4NzU4MzYyMmQsIDB4Y2I2ZDExZjgsIDB4ZjI4YzY5ODYsIDB4OGMzYjRlMGQsIDB4NWUyYzA2ZjksCi0JMHg2ZjQ0N2E4MiwgMHgyNWJkZWZkNywgMHg3ZTMwNjExZiwgMHgxNjUwYWEwMiwgMHhkZTYzMTY3MCwgMHg4ZDA3YWMzZiwKLQkweGIwNWIzY2YzLCAweDlmOWJhOGZlLCAweGJkNjAyYzkzLCAweDYwZmYzMWZiLCAweDBhMDNmMGFiLCAweGRjNThjZTMxLAotCTB4YTdlNGJjZmYsIDB4M2Q5OTI3M2QsIDB4ZDBkNTZjYTMsIDB4OWNiMzYzMDAsIDB4YTAyYTY3MjMsIDB4Mjk2ZmIzMmYsCi0JMHgwYmRmMmU3YiwgMHgzZDliMTk2NiwgMHhiM2QwZjMxMywgMHg5NzFiMmM5ZiwgMHg0YjU4ZjUwNywgMHhjYmZmN2YyNywKLQkweDUwMDU3MWIyLCAweGUyZWFlNjNmLCAweGNhMjRhYmVmLCAweGJlNWI1N2QzLCAweDdkYTIzMzNiLCAweDEzN2QzZDA2LAotCTB4YTRkNGE2NjAsIDB4NDA5Y2IzYTcsIDB4ZGZhMTMzY2YsIDB4MWY5OTcxN2QsIDB4NTU3YTFlZjMsIDB4YzIxNjY3OGUsCi0JMHg3MzI2NDM3NiwgMHg3ZWQ2MGRmYywgMHg3NWZhMWNmNywgMHgwZDlkNmQ0MywgMHhiN2JlNWZhOCwgMHg3NDk5Y2ZmNywKLQkweDIzZjMwZmRlLCAweDZiMWU5Y2YwLCAweGUxMWQyMmYyLCAweDE3MGJlNGQxLCAweGU2YjNhZmM5LCAweDc0ZmNlOTk5LAotCTB4ZWM1YzNiOTUsIDB4ZGYzNjNhMDQsIDB4MjNjZTkyMzksIDB4ZGUzMTUyM2UsIDB4MjZlMzdlODksIDB4NzBmM2I3OTEsCi0JMHgzZjIxYmU1ZiwgMHg5M2I1Nzg5NywgMHg0NGY5ZjdlZiwgMHgwZmQ5ZDc1ZSwgMHgyZWIyMzMwYSwgMHg3ZDZhMWZhMiwKLQkweDA2MjgyNzhiLCAweDVlOTQ3YWI4LCAweGY5ZWZiN2RhLCAweDMxZGJhZGY4LCAweDk5ZWIxMzBmLCAweGM0OTlkNjQ5LAotCTB4N2JlOTRiZjcsIDB4ZjMwNTNlNmIsIDB4MmQ5ZjEzNjYsIDB4Nzg4NjdjMTUsIDB4ZmFmMjFhNzMsIDB4OTUxMWNiOTcsCi0JMHhjNTViZGEwNywgMHg4YmQzMzdmYSwgMHhkNTIyOTdmMywgMHg5ZjUxODVmMiwgMHhiNGM3NGYxYywgMHhkM2M0NWNmMCwKLQkweGNmMjk5Y2U3LCAweDdhNDVjZTc1LCAweDY2NzVjZjVhLCAweGUwMzc0MzM5LCAweGU3ZTU3OTc3LCAweGZhZWU1MDBhLAotCTB4YWQ0YTY5Y2UsIDB4ZWIzZjQ4NzksIDB4ZjRhNjRmYjksIDB4MTlmOTkyZGEsIDB4Y2ZiOWM0NWIsIDB4NzEwZjcwNTQsCi0JMHg3MWMzNmY4NSwgMHhkZmUyN2U4YSwgMHg3ZmU0MTg3OSwgMHg4MDM1NTJlYywgMHhkNzYzYTRhOSwgMHhhNDI4MGM0ZSwKLQkweDQ1ZGU3ODlmLCAweDNjMmJlMGFkLCAweDFlZTc0ZWFlLCAweGNmYjQ2NmVlLCAweDgyOTBlM2RiLCAweGRjZjdkN2U4LAotCTB4NjBiYjI1ZTUsIDB4ZTRiOWQyZjAsIDB4MTdhNGY3NWYsIDB4YTkzZjMwYzYsIDB4ZGE3ZTZiZTcsIDB4NDI3YjA0MGYsCi0JMHhiMjFmMzk0MiwgMHhmMmVlMjMyNywgMHg2NDdlOWM5MCwgMHhjYzhmZDM5MSwgMHhiNzFlNjk3MiwgMHhiZGJmODJlNywKLQkweDhhZjNmYTkzLCAweGNmZDBjMGZlLCAweGVlOWY5YzRkLCAweGRmN2FmOTkxLCAweDM4MjdlZjUzLCAweDdlYzhiMDg2LAotCTB4NzcyZjFmYjQsIDB4ODUzYmFmYmMsIDB4MDNlODI4MWQsIDB4MTE4NmZmZjgsIDB4NjZjNzQwZmYsIDB4M2E0M2FmYWMsCi0JMHhjNzRhNGM4ZSwgMHhiNDc0NjRlNiwgMHhlNDlkYzc5ZSwgMHhmZDg3ZGYwYywgMHg0NDNmMmM5YywgMHhlN2FkNzJlNywKLQkweGM5MTI5OTcwLCAweGU5NTkzYzQzLCAweDNlYjRhYjViLCAweGI5ZDI1YjhjLCAweDNiMjdkZTdiLCAweGQ4ZGZhNzQ2LAotCTB4NGU4OGUzYjUsIDB4ODQzZTdhMDYsIDB4ZjNkZDhjNzAsIDB4ZDZlMTBkYmUsIDB4MjkxZGY4ZTksIDB4YzE0YzFkYjksCi0JMHg4ZmZiYWJjMCwgMHhkM2IwYmI5NywgMHhiZWQyNGUxNiwgMHhmNTI5NmQ2NCwgMHg4MmQ5ZjgwNywgMHhmM2YwMThlMywKLQkweDlmYmZkNjE0LCAweGUxNGYzZjFhLCAweDNmMDMyZmJjLCAweDdlMGU1ZWNmLCAweDRhYWYzZjc0LCAweGVlMTU3MWM4LAotCTB4ZmY5ZDAxNWIsIDB4NWI5ZjlmZTgsIDB4OTZjZWUzMDQsIDB4MTVkM2UyMzUsIDB4ZWY4YTY0ZGIsIDB4NzliOWZiNDIsCi0JMHg1ZmI5MDliOSwgMHgzZjZlYTUzMSwgMHhmMTVjNTc5ZSwgMHhiNGZjNDQ5OCwgMHg3ZmJmOWM1NCwgMHhiN2JmOWM0ZiwKLQkweDJmOTYwM2U2LCAweGJkOWU5MDhjLCAweDk0NjA1ZTc0LCAweDc2ZDU0NmY0LCAweDA5YzNmM2YzLCAweDNjYTAyYWZlLAotCTB4ODllZjcxNWYsIDB4MTU4MDVmN2UsIDB4MjEzNTY3ZmYsIDB4MzY1ZDRiZDcsIDB4ZmQwMmJkZTMsIDB4NjZjZWI3ZTQsCi0JMHg5YmNmMmJjYSwgMHhmOTBmZDdkMSwgMHhmZjliM2VmZCwgMHhmZGQzOGEwZCwgMHg2ZTMwY2VjYywgMHgyN2IyNTQxNCwKLQkweDEzMWYxMWM2LCAweDZmZDg5OWE1LCAweGJkMmY5MDk5LCAweGNkNmJhMWJmLCAweGM0NjE1ZTc2LCAweGI4YjAzZTdjLAotCTB4ZjAzZTdjYzUsIDB4ZjlmMzU2OGEsIDB4Y2M5YjExYzAsIDB4OGNhZjAzZTcsIDB4OGUwN2NmOWEsIDB4NTRkZTNlZGEsCi0JMHhjNmJiMTMxZiwgMHhmYjZjN2VkNCwgMHg1YzdkNTM3NCwgMHhmNmE2ZjNmYywgMHgzN2NmMGUxMywgMHhmOGVlYWZkNSwKLQkweGE0ZmRhOWIyLCAweGRlOWE3NzYzLCAweDM0YWNlOTRmLCAweDZhN2E5ZmJkLCAweDZkN2VhOWI1LCAweGRhOWFiZmVmLAotCTB4ZmQ3MTk3YzcsIDB4ZTQ3ZWEwNzUsIDB4ZmE5ZTYzNTQsIDB4Y2RhYTU1ODEsIDB4MGQ1N2NmOGIsIDB4OGM0Yjc5YjcsCi0JMHhmZTgzNzNjZiwgMHg4MzRiMmMxMiwgMHhkMmE3NjdlOCwgMHg1NzljMzNiMywgMHhmN2FlMzU0ZSwgMHhkMjZlY2M2NSwKLQkweGU2OWMzMzNmLCAweGUyMjVjN2JhLCAweDJmYzAwNTEwLCAweDJlMDFmYzQwLCAweGJjODE1Y2IzLCAweDFlNDBiYWU1LAotCTB4YjVhNmViZjIsIDB4ODNjNzg3MGMsIDB4NDBjYjBjNTYsIDB4Y2IzOTAyNzksIDB4OWM5ZTVkNzUsIDB4OTNiYjYzZTUsCi0JMHhiMWViZTMyYiwgMHgwMDNlZWM5ZSwgMHgyZWY5MTBiNSwgMHhiMjliZjk0MiwgMHhlMzJmZjczOCwgMHhmZTMyMTczZCwKLQkweGMyYTU0NDNmLCAweDVlNGExMTIyLCAweDdjODYwMTY3LCAweGY1Zjc1ZDZmLCAweDhmOGFkZWY1LCAweDI3Yzc4YjgwLAotCTB4MDRmMGZlMWQsIDB4ZGMzZjJjYzUsIDB4NGM1NWYwZGYsIDB4OTJmODBjNTAsIDB4NzZhNjc1YmQsIDB4NDk5Y2ZmMGUsCi0JMHhlZjg5ZjdjNiwgMHhkZmNjOTM0MiwgMHhhNWQ1MzQyZCwgMHg3ZjI5NzNlNSwgMHg3NjVjMTUyOCwgMHg0ZjUxOTJkZiwKLQkweGU3YjM3ZTgwLCAweDdmNTJhNjJkLCAweDk2ZDBiY2RlLCAweDA2ZjA1ZjM0LCAweGMzZjQ2N2Q3LCAweGM5ZmYzY2EzLAotCTB4ODBkZGRmNjAsIDB4ZmQ5MzM5NzQsIDB4Zjc5ODQzZWEsIDB4MmY1MTcyYjYsIDB4MGU3OWUzZjksIDB4ZDQ0ODdlYjMsCi0JMHgzYTJmM2RmOSwgMHhiM2Q2OGYzYywgMHhlYmRlYjhkMSwgMHg0MTk2ZGFlNywgMHg5YTZkZDYyMSwgMHhmM2UzYjJlZiwKLQkweDYxYWYzMTczLCAweGZkM2YwYTcwLCAweGM3OWYzMTAxLCAweDk2YTMyM2ViLCAweGE3MzA2MzIyLCAweDQxNzkzY2U5LAotCTB4ZGEzNjc2YmMsIDB4OWU0NTQzNjEsIDB4ZTRiNjQzZjYsIDB4MmU1NTUzZjksIDB4NDQwY2FlYmUsIDB4ODJmNjhkNDUsCi0JMHhjMTNlZDJhNiwgMHg3OWRmZjI5OSwgMHg1NWFiZjUzMCwgMHhmZjIxNTcwZSwgMHhhM2I2MzlkZSwgMHgwZWEzOWY5NCwKLQkweDNmN2U3OGY4LCAweDc3ZDc1Yjg3LCAweDIxZTg1YTA1LCAweDYwMDU1ZmQ0LCAweGZiMGJmOWI2LCAweDUxNzAzM2MzLAotCTB4YmMyMTRlNjgsIDB4MDViMmNhNmYsIDB4NGFmN2FhMzQsIDB4ZWJmOGRlNzQsIDB4YmVkMDMzMjAsIDB4YzEzMjZmZTksCi0JMHgwYTYwNzRkNywgMHg1YWE5MTVlNSwgMHgyNzQ2NDU5OCwgMHg3ZTQ0YzllNiwgMHhmMGVmYmU4MiwgMHhlNDRkZjY2MSwKLQkweGQ1NWQzNmJmLCAweDkxODhkZTc3LCAweDNhODVhYjNmLCAweDM3MGZkZmIwLCAweGE2ZGM2OWRhLCAweDdkZTk5MmU5LAotCTB4ZWFiYWQ2ODEsIDB4ZGU1MWMwMTAsIDB4NGJmMTRlOTYsIDB4ZTQwZGQzNjUsIDB4MGUzZWE5N2YsIDB4MTJlM2QzNGYsCi0JMHgzYzExMmMxYiwgMHhlMWVlY2UzYywgMHg3YzNjMDBmOCwgMHgyNjcwZjEwNSwgMHg0ZDkxZjg1OCwgMHhhZmJjMzQ5ZiwKLQkweGJjZTk1MGM5LCAweDcxMTQ5MGU4LCAweGZjM2E2ZDhlLCAweDNhMjY5MWMxLCAweGMzMzA4ZGU3LCAweGY2ZmM2ZjJkLAotCTB4M2Y5ODQzYWEsIDB4ODA3YTdjZjIsIDB4MmUzZWE0YTQsIDB4Nzc5ZTZhZTgsIDB4MWJmY2Y2NzMsIDB4MWFlZDA0YmYsCi0JMHgxZTE5OTM1ZiwgMHhjMjc3ZjBmOSwgMHg5MWYzNGYxYSwgMHg3ODI0ZDFhMywgMHhmMDA2ZTlkNywgMHg5NTdlNDM2ZiwKLQkweGY5YTZjZDM3LCAweDJmN2EwYTE2LCAweDNhZTM3YTA3LCAweGU2ODViM2UzLCAweDZkNzNmZDEwLCAweDlkNmJlNzBjLAotCTB4MDdhMTBlYzcsIDB4ODU3OTcxOWUsIDB4Zjk3Mzk2ZmMsIDB4ZjUxZDJkZjMsIDB4NzNkMjA0YzQsIDB4NzNmZmQ4NmQsCi0JMHg3M2Y2OTRhZSwgMHhkZDg5MmI5YiwgMHg1MTdiYTk3NSwgMHgxYzc2MTdhYSwgMHhjYTBlNTJjMiwgMHhkNDI3ZWUwMSwKLQkweGNmZGEzNzBkLCAweGUyN2YxZmEwLCAweDcyY2RmODMyLCAweGIwNGJkN2M2LCAweGUxZDk0YmRmLCAweDY1YTA0YWI1LAotCTB4ZWRhNWUxNzgsIDB4OTBjZmI0MzQsIDB4MGNmYjc1MGYsIDB4ZTcxNDc5ZTYsIDB4OWU4YjBiZjksIDB4YTNmNWU4MzcsCi0JMHg0NDk5ZTZjOSwgMHhlZDhlYmZhZiwgMHg5ZTM5N2U0ZSwgMHhiZDAyN2VkNCwgMHg4ZTY0NzY0ZSwgMHg2NWZmNWM5YSwKLQkweGQ0N2E3MWE0LCAweGY5NDY1NTdhLCAweDk3ZjYyOTg1LCAweGVkYzk2OTZjLCAweGRmZWI1NGM2LCAweGEyOTBmY2E1LAotCTB4YzA3ZWU2ODEsIDB4ODQ3ZjIxNmUsIDB4ZGZiNGFiOTUsIDB4Y2Q4M2Y2NzUsIDB4M2NjNzBlZjcsIDB4ZjI4OGFkMjEsCi0JMHg5M2Y1NTM4MywgMHgwNGM5NzZiZiwgMHgyMmJmY2Y4MSwgMHg5ZGZjNzQxZSwgMHhmMDE1ZTBiMywgMHhlYmE0ZDdmOSwKLQkweGQzZTAzNTY0LCAweDRiMjdjMjY2LCAweGY0N2IwY2JiLCAweDMyYmI5ZmQzLCAweDE2ZWExNzlmLCAweGUwNzU4Nzc4LAotCTB4MTYwNzVhMmQsIDB4ZjE4YTU5YmMsIDB4N2YzNzk1OTcsIDB4YTdjMGViNDQsIDB4MzlhMTY3MWUsIDB4MGZjN2EwOGUsCi0JMHgyMWRmOWM2MCwgMHhmYzE3YmE5ZSwgMHgzYjdkYzQ0ZCwgMHhmOGQ5NWUyOSwgMHgxN2JhMDhmYywgMHhhZWJhNjZhZiwKLQkweDc0OWNlYTRmLCAweDExNzA3MmVlLCAweDJlY2NlN2QxLCAweDNjZTExMDQ3LCAweDY2ZTNjNTkzLCAweDNhNGQ3NjY3LAotCTB4Zjc5OWYxODQsIDB4MTk2NzBmZWEsIDB4ZDllNjdjZTksIDB4ZTg3NmE1YTMsIDB4YTNjZWNjZWYsIDB4ZjdlOTBhYTUsCi0JMHg5ZGRlZTlhOCwgMHgyYWJmMGI5YSwgMHgzZjVlN2Y0NSwgMHg3N2M3ZDBkZiwgMHhkM2ViZTRjZSwgMHgzZjNmODI3NSwKLQkweDVlMzAxZTI5LCAweDBhNTFmYjRmLCAweGJiZWQxODdiLCAweDliNTRiYzNlLCAweDQ5OWMxNWNmLCAweGYxMTRiMzdmLAotCTB4MGViOTc4MDAsIDB4NDNkM2FlZTksIDB4MzMyYjg3OGYsIDB4ZGM2MDY2M2EsIDB4ZmMwYmY3YjYsIDB4MmU4ZGE5M2UsCi0JMHhlMzUyYTcxZSwgMHhjZDc2OTg3NSwgMHhlMzViODc5YywgMHhjNDc1YTY1OCwgMHgzYjUwZWYyOCwgMHhkMmM3MTFkNiwKLQkweGM0MWJkOWQzLCAweDc2NzZhN2VkLCAweDVmYjFlN2U3LCAweDdlZWYyOWVmLCAweDA2ZjU2N2FjLCAweGQwYzc4NzNlLAotCTB4MDZhZmU3NjUsIDB4YmI3YzAzYmQsIDB4NzFmYWRlNzEsIDB4ZjdlOTRmZTgsIDB4ZDk4YWY5NmIsIDB4ZTBiMWMyYzgsCi0JMHhlMjVlNjFiZiwgMHgyZGNiOGE1OCwgMHhlNjA3ZWZjMCwgMHg3MWM0MWVkYSwgMHhmMzczMjVhNSwgMHg2YzVjODE5NiwKLQkweDg3OTRhOGYyLCAweDFjMDhjY2E5LCAweGYzN2MyM2Y2LCAweGVjZWY4MjE0LCAweDE3ZGY5OTYxLCAweDg1YjljZjMyLAotCTB4ZmM2N2JmOWYsIDB4ZmQ5YjkyMWUsIDB4YTdkNGJlYjQsIDB4YzNlM2U3ZTksIDB4MmFmZWI4ODUsIDB4MWE1MTZjYWMsCi0JMHg4NWE3MDdkNCwgMHhkNzMyYzBlZiwgMHgxMGZjMzFkNiwgMHhmNjNhZTc3YywgMHg2MDljMDI5YiwgMHhkMGJmYzFlOSwKLQkweGNhYmIzYWJkLCAweDNmNzFmYjQyLCAweGU0Yjc3N2JhLCAweGM3ZmFjMmRmLCAweDdlODVlYmZkLCAweDQ4ZWZjYmQwLAotCTB4ZWYzMWM3NzUsIDB4ZWJiZWZlYWMsIDB4ZWM3YzYxNjYsIDB4YmEzYWFlM2IsIDB4ODJmZTA1ZjcsIDB4ZTdmNDFmNGUsCi0JMHgzMmNhZGYwYSwgMHg2YTY5MWM2MSwgMHhhMTZiOWNmMywgMHhlM2Y3ODc2ZSwgMHhjZDY5ZmJmMCwgMHg1NzdlZDA0ZCwKLQkweGFmMWYzODY2LCAweDUzNGI3MWMyLCAweGMxMGYwZjlhLCAweGI1YmNhMzNhLCAweGNkMjliNGZhLCAweGZlNjYzMDExLAotCTB4ZTNjYmNkMzUsIDB4MTBiODVhZWQsIDB4Zjc1N2Q0ZTksIDB4YTg2ZGRkNDIsIDB4ODU3NTJkM2IsIDB4ZDU3OWY1ZDcsCi0JMHhlNTBiZmMxYywgMHhjM2RjYWU5NSwgMHhkOWNhMmRlZiwgMHgxYmRmOGYzMywgMHhlZThmM2VkNywgMHgxMzRlNmI4ZCwKLQkweDlhNjM0NDdhLCAweDU4NTYzY2YxLCAweGY4OGJkZjBlLCAweDE5NWU5MmVhLCAweDhmNDhlNWNlLCAweDJmNzhhNjdiLAotCTB4NTljMzllZTIsIDB4MDZlM2M1MWQsIDB4NjJlZWMxZTEsIDB4YmM3OGNiYjQsIDB4NTJmNTgwYjMsIDB4OGFlYmM3YTksCi0JMHg2MWNhODA1OCwgMHg0OGU1NDQyYywgMHg1NWU1NGFkNiwgMHg2OGU1NDYyYywgMHgwOTY1NDFkNiwgMHhjMDMyYTVlYiwKLQkweGUzOTYzMmJjLCAweDZjY2E4MDU5LCAweDU5ZDFkZDViLCAweDY2N2Y0ZmE4LCAweDdjM2E3ZDI3LCAweDgzMDNhYWZiLAotCTB4NDRkZTkxMTgsIDB4Yzc4ZDY2YjcsIDB4NjU2YmQ2ZTksIDB4ZGNiYzFhZDksIDB4M2Y1MGY4MjgsIDB4MzQ4ZDU1NTcsCi0JMHhkYjYyYmUwMywgMHhlODdlYzhmMywgMHhkZWY2MzIxMiwgMHhmNzA0NWIyNiwgMHhmOWEzZDk2MywgMHg5YzVhYmNmNCwKLQkweDdlM2VhZTQ3LCAweGY3Y2RlYzgwLCAweDYwZjNjOTgyLCAweGJiOGJjMDVmLCAweDk2M2VkMzNlLCAweDNlZDY3ZjU5LAotCTB4NDFiZTExYWEsIDB4Mzk0MDVmN2UsIDB4NDE3MDg5NTksIDB4YTBlY2U2ZGQsIDB4NzVmNjk3NzMsIDB4M2VlOTA3YjEsCi0JMHhiNGVjNjdiOCwgMHgxODU1NWFiZiwgMHhiZDQzYjMyYSwgMHhhMDYxNzc2YSwgMHg3YTg3MjBjMSwgMHg2NjU1NzAzZSwKLQkweDk2YmM3NzJjLCAweGY1ODg4ZjM4LCAweGRmODI1YTcxLCAweDI4NmZiNjU3LCAweDc3ZmI3ZGMwLCAweGY1YTcxZmY3LAotCTB4ODVlOTg3ZmUsIDB4YjY5YTlmMzQsIDB4NGRkODZhYTMsIDB4Y2EyYTdlZmIsIDB4N2QzOWJiY2QsIDB4OTdkOTNhZjYsCi0JMHgwNjQwYWVjZCwgMHhmZGU5Nzc5ZSwgMHg0YjZmYmYzOSwgMHg5NGY3ZGZjNywgMHhkZjcxOTc1ZSwgMHgyODNkNzBlNCwKLQkweDVlZTliMDQyLCAweGY5NTFmN2E5LCAweDk1M2Y3YThiLCAweGIyZjdhYjNmLCAweDQ3MDBmODIwLCAweDA0ZGE5ZGVjLAotCTB4MzBjZTRmOWMsIDB4N2JmYmNhMmYsIDB4NDMyYmQ4ZGUsIDB4N2NiZTYyMjcsIDB4ZTYwMWJmOTEsIDB4Y2VmZDk4ZDcsCi0JMHhkZWQwMTNmZCwgMHg3NDAxYzgwYywgMHg3NWVlZWMwYiwgMHhmM2I0MjUxMywgMHhjZjI5ZjM3YywgMHhiYzZkMWVlNSwKLQkweDRmMDA4ZmYzLCAweGU2NzAxMmEzLCAweDZiMmZiOGMwLCAweGEwMmJiNTNiLCAweDI0ZmNmZWJjLCAweGU1ZmZjZTI3LAotCTB4MGZjZDM2ZWMsIDB4ZGRjNjFiZjUsIDB4MjQ3ZGM1ZWMsIDB4MDJlMzZmZTgsIDB4ZmEyZWNmZWEsIDB4ZjZjNGVmMWIsCi0JMHg1YTNmNjJmNywgMHhhMmZkOWZhMiwgMHg2NzdiYmQ3ZSwgMHg1NDNmYmUzNiwgMHhlYmVlMDhjZiwgMHhiMWIyZGE3MywKLQkweGJkMWY3ZmJmLCAweDEzZjE5NWVjLCAweGJhNDc3ZWU5LCAweDE3Y2FjYTJmLCAweDY2Y2I5ZmQ3LCAweGU2Y2JiMDQxLAotCTB4NDE2MDJiOWUsIDB4ZDM5M2M3YTAsIDB4Zjk0MmFlZWIsIDB4ZDFiZmQzNTcsIDB4YTBmZDA0ZWMsIDB4YTI1NWQ2MTQsCi0JMHhiN2E2ZjBiZSwgMHgxZjQxM2IzNCwgMHg5ZDAxYjA2YywgMHhhNTlmNTRiYywgMHhjYzcwMDk1ZCwgMHhiMTgxZmFlNCwKLQkweGE0MzJlNjk2LCAweGM2MmJiMDNiLCAweGFlOGZlMWUzLCAweGZhODIzOTliLCAweDdlZmUxYWUzLCAweGQ3OTE2MGU2LAotCTB4ZjdlM2VkMDAsIDB4ZWQwYjMxYmQsIDB4OTE4YTZhYjIsIDB4NjZlNmI2MzAsIDB4YTQ3OWY3NDYsIDB4Y2UyYTM3YjIsCi0JMHhjMWE4YjNhNSwgMHhiYTYxZmJhZSwgMHg0MmE3ZTQ5ZiwgMHg0YzNlZDA4OSwgMHhiZDBmMzljNSwgMHg1Y2ZlZmNiZiwKLQkweGZkODg3M2E2LCAweGZkZThkM2ZiLCAweDdlNzRhYmUxLCAweDY3OWM1MjBhLCAweGRmMjI3M2NkLCAweDg4MWMxNWMzLAotCTB4ZDc2M2JlZWQsIDB4YjhmNjBmZTcsIDB4NTdkNWYxMTMsIDB4Y2MzZTI4OGYsIDB4ZmZlN2QwNDMsIDB4NDlmZmNkMjgsCi0JMHhlZjFlZjEzNSwgMHhmN2Q4MWNmNSwgMHg3ZmQxMDU5ZSwgMHhlYTI2OTIzZSwgMHhiNzkyMjc5MSwgMHgyZmI0YjM0ZiwKLQkweDM0Y2ZlYmQyLCAweDFmZDY5Y2NmLCAweDEyYjhlZjllLCAweDU3YjQyNzc1LCAweGVhZmEzYmNlLCAweDliMDZkZjA4LAotCTB4N2QyY2JmYTUsIDB4ZmM2OWU3ZmMsIDB4YjQ1OTQyYWEsIDB4NTA1MmY3ZGYsIDB4NzIzYmQwMzEsIDB4YWJlZjE5YTgsCi0JMHg3OGVmNDU0ZCwgMHg5YjliMmZkYSwgMHhhZTIzZmJlMCwgMHg1ZmFkMTk1MCwgMHhiZjVhMzMzNywgMHgwNjAyZWU1MCwKLQkweGUzNGYxODNkLCAweGI5YzU1NWZlLCAweDI0N2EyNjUxLCAweDdhNjI1MGU4LCAweGQyZTQxMjdlLCAweDdjYmI0ZmI4LAotCTB4ZmU3NDVkYzcsIDB4ZTdlNjllMjQsIDB4M2YwOGIwZmQsIDB4YjE2OGY1NTcsIDB4ZmZmNjdmNjksIDB4ZTE2OWYxYzMsCi0JMHhjNzAxNGIyOCwgMHgxYzMzYmZjYywgMHgzZmU0OWE1NywgMHhkMzY4YzcwMSwgMHgzODdlZmZmMywgMHg2MzgwYTQ2NiwKLQkweDFjMTUzZmY2LCAweDJmNDU3YjU2LCAweDJiZGEyZmZmLCAweGNhYmRhMzU3LCAweDlkNmM0MWUzLCAweGY3ZmRjZThkLAotCTB4ZTUyYTJhNjQsIDB4Yzk5MzY5ZWYsIDB4ZTE5NTIwNGUsIDB4ZGY2OGVlYTcsIDB4Y2Q3NzlmMmYsIDB4OGIxYzdiZmMsCi0JMHg2MTVmOWRiMSwgMHhkNDc4Y2EyZCwgMHgxMTY3MTE1NywgMHg4NTdmODdlZSwgMHgwZmNmMDNmNywgMHg4NjgzYTAyYiwKLQkweDFmNjkzYTY0LCAweDU0MzRiZmRiLCAweGZlMDVmYjg1LCAweDU0MzVlNTg1LCAweDU0NmVlYjdhLCAweDU4N2E1ZjcwLAotCTB4ZWZiNDM4ZWYsIDB4NGZkOTZiMzYsIDB4ZGU5MzMzMzcsIDB4MmZiYWQwOGIsIDB4YjZiYjIyYWQsIDB4OWIyNzliZTMsCi0JMHg2MDc4ZGY3MSwgMHg2OGMzZGQ1YSwgMHg5MzkxNGIwNywgMHgyNGE3ODdjZCwgMHhkNmY1Y2Y3YiwgMHhkMTRmZDMyZiwKLQkweGNlOWQxNGJhLCAweDI5M2Y0MmFlLCAweDBlYzY4YWVhLCAweGI1OWEzZDIwLCAweGYwYTNkMjAwLCAweDIyOTZkMTliLAotCTB4ZGFmNzJiYTgsIDB4YWYwMDBkMDIsIDB4YmVkZDE5OTIsIDB4MWU1N2UwMDUsIDB4NGQ3NjRlMTgsIDB4YjYxZmY1MTQsCi0JMHg2ZTg5NDA3ZiwgMHhmYTlkZmNjMSwgMHgxYmI3YzUwMCwgMHhhNWI0N2Q4NSwgMHhmMzE3YWU2OSwgMHgzMDk5ZWQ5OCwKLQkweDdhZTUyMDRiLCAweGQwOTdkZDdiLCAweDc1MzRkNzVlLCAweGFlMGE3M2JkLCAweDAxOTY4MTA3LCAweDAxZjc1ZTVlLAotCTB4YjExNjRmNWMsIDB4NzhhNjY3MjIsIDB4YjQ2ZmViMGYsIDB4MWFmMjBkODEsIDB4NmZlOTdlZWEsIDB4YmFiNzlmMzIsCi0JMHhkNzBkMzgzZSwgMHg4Yzk1ZDVmOSwgMHhmNzA4N2Y3ZiwgMHhkMmNjOWU4OSwgMHhmYmRmYzJmMSwgMHg0ZjVjNzUwZCwKLQkweDdkNDQ4Njk0LCAweGViN2JjYzI2LCAweGY3ZGY1YzYzLCAweGQxZWJhYmE2LCAweDQ0Zjk4N2RlLCAweGMzMWI4ZWM4LAotCTB4NjMwZTkzZTcsIDB4ZjRmZTAwN2IsIDB4YmViNDQ1NzEsIDB4ZjE3ZDYxNDYsIDB4MGE3MWZiZTAsIDB4ZjdkMmY3OWQsCi0JMHg2YzYzOWM4MywgMHhlZDg0MWZiNCwgMHhjMmVhN2VlOSwgMHg3NDJmZGEyMiwgMHgzODgxNjNjZSwgMHg2OWU3MDNlNiwKLQkweDA5NTE3ZjdjLCAweDNiM2NjNGNlLCAweDA0YmYxZjc3LCAweDhhYTZjZTI5LCAweGEyNmQxMmZkLCAweGFkMjA1ZjM5LAotCTB4OTliNDViZTksIDB4ZmNkYTM2OWUsIDB4NWNjYzM5ZGMsIDB4OWRjMGIwNzcsIDB4NjBlYzhmNzQsIDB4MjY4MWJlNGIsCi0JMHhiMDA2ODdmNiwgMHgxNDU3ZTg0MSwgMHg2YzM2MjJkYiwgMHhjYTg1ZGEwNywgMHg3NmRmNzg1MSwgMHhlYzgxMWUzMSwKLQkweDBjNThmYWE0LCAweDMxZTMxNjkxLCAweDBjMWQzZjJiLCAweDMyODJjMDliLCAweDY0ODZhMzhmLCAweDY5OGUzYmY0LAotCTB4MDc5NDdjZTEsIDB4NjZlMjI2OWYsIDB4OGRiZjc4ODMsIDB4MzZmZjYxYTEsIDB4OGZmMTRmY2IsIDB4ZjVlZmI0N2MsCi0JMHhiMzc5YzZmYSwgMHg0YTkxZmUyOSwgMHg4ODlhMjJiZSwgMHhlYzM2ZGVlNywgMHhjZTlhZjdhMiwgMHgxOTEwMDczOCwKLQkweGM2OGU2ZmY0LCAweDZmNmI4MWYzLCAweGQ3NzlmN2UyLCAweDk0N2VlMWVlLCAweGU4YjI3ZWZlLCAweDljNDUzNmI3LAotCTB4MzI3YWU0MTMsIDB4ZDYzZGY5YzIsIDB4NDg1ZWRiMzksIDB4MGU3Y2FjZjcsIDB4NzVmMzU2ZTksIDB4NmI0ZmMzMWIsCi0JMHhkZmI5YzdlMiwgMHg1M2I3YjE2NiwgMHgxNThkYTFlNSwgMHg1ZjlmNGRmZSwgMHhmMjE4ZmMyMywgMHhjMmNlOTAyZCwKLQkweGQyZWE1OTdmLCAweDRmYmU2ZWU5LCAweGEyNDdiZjQyLCAweDRmNGRjODQ3LCAweGE4YzQ0YWI5LCAweGVhMDk4MzQ1LAotCTB4ZTk4NTM3MzksIDB4MzE3MjgyMWUsIDB4NjU0ZGYyOWYsIDB4MmMxZmU4YjksIDB4ODIyNWZmZGQsIDB4NzljNmQ5NzMsCi0JMHg1ZTRiZGUyYSwgMHhlMTMxNzFiZSwgMHg1MmViYzc0NSwgMHhhN2YwN2Y4YiwgMHg4ZDE3MDlkNiwgMHhiNGY2ZTlhNywKLQkweGZlZTgxZmVlLCAweDQ4NGZkNTgwLCAweDQ3ZTdmZGY1LCAweGNjM2EyN2VlLCAweDNlZDE5NWY2LCAweDNjMWFmZmVmLAotCTB4ZTA3NTg2Y2YsIDB4NjdkZTIwYjYsIDB4NDczZmZiYTUsIDB4Zjk4ZWVjZWMsIDB4NzM2NTVjZjgsIDB4MmVjM2Y5ZjAsCi0JMHg1NDU2MGY3ZSwgMHhkODc1ODNkYywgMHhkZjg1OWM1ZiwgMHg3ZjNlMjljZCwgMHgzYjJmOTYyNSwgMHhlZGVhMWE2MywKLQkweDdhM2UzZjk3LCAweDRhMGZmOTAzLCAweDhkM2NjMzRjLCAweGZmZjcwYTMzLCAweGU3NjMzYWY0LCAweDBiZjM4YTY0LAotCTB4N2VlZjVmYmMsIDB4Yjg2N2VlOTUsIDB4NzRmN2YwYmUsIDB4ZmRjNmJkM2UsIDB4M2Y2MzlkMmEsIDB4M2NhNzY2ZDMsCi0JMHhiMTVkZWJiYiwgMHgxZGZkZTM2YywgMHhjZGVlMTdkNywgMHg3NDdlMThiZSwgMHg4MDg4ZTFmZiwgMHg3YmQxNzBmNywKLQkweDU3MWE2MTA1LCAweGI3MDQ3M2U0LCAweDUzZDIxNzRhLCAweGU3Y2Q2ZjdmLCAweDNlOThlY2Q4LCAweGE2NjllNTEzLAotCTB4MmZmOWU5MjYsIDB4Y2Q5N2M4OGQsIDB4ZmM5Mzg3ZjMsIDB4ZTg5YmNmNjQsIDB4ZjM5YmZkZTQsIDB4Yzc5MWIyNGQsCi0JMHg0N2NmZWVhZSwgMHhlZjU5ZmYzYSwgMHhmMTIzNTkyNSwgMHhlMGE5ZWY3MywgMHgxOWI0MDVhYSwgMHgzZGM0ZDFkNywKLQkweGVmM2QyYTI1LCAweDBlODZmMTE2LCAweDU0ZjZmYjFmLCAweGFjNzk5NzkwLCAweDc1ZmI0ZWNlLCAweGZkMTc3ZWUyLAotCTB4NDE3OTk3NWUsIDB4MjI0MmZkY2IsIDB4ZDYyNDJhZmYsIDB4NWU0NDM3YzMsIDB4YTdlNjNjZDUsIDB4Mzc2ODE3ZWYsCi0JMHg3NWJmNTFkOSwgMHg2ZTYwZmI4OCwgMHhmMWJiNjE2MiwgMHg0MjVlYTY3YywgMHhiNmJkMjZiZiwgMHg3ZWI5OGU2MCwKLQkweGI3NWNjODczLCAweGU3YThhM2RlLCAweGRlYjRmY2NkLCAweDg5ZWYxNTNmLCAweDk5OWRmYmQzLCAweGQzZWMzZjQyLAotCTB4YjAzYzVkM2UsIDB4Njc1MDdlMmYsIDB4NzFlODFmOGUsIDB4NDNjYzFhYmYsIDB4MWUxOGZkYTYsIDB4ZTRlNTliZjcsCi0JMHhiYjhmNGZlMywgMHg1NmEzN2Y2OCwgMHgxNmUzMzc1MywgMHhjNWIzZWEwYywgMHhjNjk2N2NmMCwgMHg4YmM2MGRmNSwKLQkweDU5YTI5ZWYwLCAweDZmMWY3ZThhLCAweDgwZTdiZjU0LCAweGY5MDljYmJlLCAweDBkZGM2MzM2LCAweDVlZTkzMGYzLAotCTB4ZGYxZTcwYWIsIDB4YTA3MjExNTcsIDB4MGVjZTE5YzcsIDB4NWU2NDY3ZjMsIDB4NGRiNWJmODQsIDB4YmE5ZWU5YjIsCi0JMHgxM2I4OTVmYiwgMHgwMGZlZTBmOSwgMHhmMDRhYzNjZiwgMHg2ZjE0ZDQ3MSwgMHg0OWE5MzZkNSwgMHhlYmViYjdlZiwKLQkweDllMGFmNDA3LCAweDNlZTA3MjRmLCAweDAxZjdkMDJmLCAweGM2MzVlODI1LCAweDg4N2IzNDIzLCAweGY0Zjc3NmVhLAotCTB4ZjJmMjNmMGUsIDB4ZTM2NjFiMDMsIDB4OTg4ZDEwNTUsIDB4Y2E3NjBjMWYsIDB4Njk1N2RhM2IsIDB4MDNkYjc2N2QsCi0JMHg2MjFlZjE4NywgMHhjN2U2ZGJiNywgMHhiMzQxYjhmNSwgMHhhMzU3YmVkMSwgMHhlZmViNDljZiwgMHg4YmRhYTk3YSwKLQkweGViZjdhNGZjLCAweGFlMDg1NGVlLCAweDA2NTE1YWIzLCAweGFiZmYwOGJiLCAweGRhMzM0ZmUwLCAweDg3ZGYzMWFmLAotCTB4OWUzN2RmZjUsIDB4ZGRmYWVkNDYsIDB4MGE3MDc1YmYsIDB4MTMxZDU5YzUsIDB4MTdiYzAxNmQsIDB4YjFhYzFkNWMsCi0JMHhjZmM5MjQzZiwgMHg5MzZmMWJlYywgMHg1NDlmYjQ5MiwgMHg3NzQ5NGZmOCwgMHhmNTA3YTc3YiwgMHg3Yzk2Yjc0MywKLQkweDJkYzhiYTNmLCAweDNmYzJmYjg5LCAweGIyMmMzY2E1LCAweDVmMzNjM2M0LCAweGVmYzcxZTFmLCAweDhhMWJjZWE1LAotCTB4OGEzZTQ5MGIsIDB4MmI2ZjIwZGMsIDB4Y2NmNTlkYzcsIDB4ZTQ3YzkzZjAsIDB4MmUxYzdjZjIsIDB4YWJkYThkYjcsCi0JMHg2YzM3OWU0ZSwgMHgxNTJkYTdiZSwgMHg0OTc4ZWEzZiwgMHhjOGU1MDc4NSwgMHgzN2U3OGM1ZCwgMHg3ZjcxOTk4NiwKLQkweDQzYzUyZGNlLCAweDRlMzJkNzk0LCAweGI4YWZiYTQ5LCAweDUxYTFlMDU2LCAweGNhYmYxMDA5LCAweGI4OWM4NmQ3LAotCTB4NGY2NDM0MGUsIDB4N2ZmZWUyNzcsIDB4MjhjZmUyYjMsIDB4ODhmMGZiNDQsIDB4ZDY2ZTMwY2MsIDB4OGRjYjM1ZTQsCi0JMHhmYjg4YjY1ZSwgMHg2ZGJhZTc0NSwgMHg3NTU5ZWY0OSwgMHhlZWZmOTJkYSwgMHhiZTZlNWRjZSwgMHg5ZmVjYjQ0ZSwKLQkweDUyZGVlNzQyLCAweGQ0NjgwOWYxLCAweGE1YTVkOTEwLCAweGYzZWYxNzhhLCAweDVlMWNlZDk2LCAweDA0ZmM4YTU3LAotCTB4ZmM1NGRmYmQsIDB4MTc3ZWVmNzEsIDB4NjE5OTNkZmYsIDB4NjU5ZjNhNGUsIDB4OWM0OWFmMWQsIDB4NzgwMjZiYzMsCi0JMHgxYTZkY2VkMCwgMHg2Yzc4NDFkYywgMHhkMTc4YTg5YSwgMHhkM2Y5NzY4ZSwgMHg1ZWQwZDM5OCwgMHhlZjQ4OWNjOSwKLQkweDc4ZDk2YWNmLCAweGE1MzU5MDI2LCAweDRmMWQzYmUwLCAweDlmNmRiOWQ3LCAweDE2YzJmZjhkLCAweDBkZjljYmZlLAotCTB4ZmMwZGNiYzUsIDB4ZmYxOTNhYjcsIDB4OTgzYzg3NWQsIDB4ZGUzN2UxYzMsIDB4ZjI2NGE5YWIsIDB4YmMyYjNmZmQsCi0JMHhkZTNlN2U3YSwgMHg5ZmNjNmU4NywgMHg4NDVmMDUyYSwgMHgxYzhlOGRjNywgMHhlYzBjM2U5YSwgMHgzMDNhYmVkZCwKLQkweDg2ZDc4YzM4LCAweDczZmI4ZTdhLCAweGQxMzNhNzcxLCAweDY0N2RkMWJlLCAweDc1NDI5Mzc2LCAweGRmMDdkZjNhLAotCTB4NmNmN2YxMDUsIDB4MzlmZGM0ZGEsIDB4YzFmM2E4MzUsIDB4NDViZWFhOGYsIDB4OWY1ODVlNjMsIDB4YmIyY2NhZWYsCi0JMHhkYTUxZTcxNywgMHhhYjlmODA3MSwgMHhmOWExY2I2OSwgMHhhZGVmOGI1NywgMHg5YzNkYzZmMCwgMHgyZjFlZTM5ZiwKLQkweDgyYzcxOTk1LCAweDc3ZGZjMDNmLCAweGYzNDhlYjY4LCAweDJkYjcxYzYzLCAweGQ2MzlkYjhiLCAweGY1YmJjZWVmLAotCTB4YjE1Njg3M2MsIDB4ZmI0OWQxZGYsIDB4ZjgzMzM5MTIsIDB4M2JiYmQ0N2EsIDB4ZmVhM2ZjOWQsIDB4ZjdlMDY5ZjgsCi0JMHg4ZGVjNTg2OSwgMHg5NDM2N2JiZSwgMHhkNTFkZDkzOCwgMHhjN2QwZWVjMiwgMHg4MmM0NWQyZiwgMHgyZjRiYmJmOCwKLQkweDI3MTZiMWE1LCAweDg0M2I4N2Q4LCAweDJkZjYzMjFjLCAweDc4MGE1ZmIxLCAweDdjNmZiODA0LCAweDNmZWQxNDcxLAotCTB4MDRiZGZkZTksIDB4Y2ZiNjEyY2IsIDB4OTEyY2VkY2QsIDB4M2ZjMGNmZTQsIDB4NmZiYTY2MzEsIDB4MzlkOWM2YWQsCi0JMHhiZTQ3ZjUxYywgMHg0NmVkZGUxYywgMHg2NzU4ZTMzZiwgMHg1ZWRiZDYyZSwgMHhlMGY2NGQzZCwgMHg3M2YwZjBhNSwKLQkweDUxYzJiZjgxLCAweDU3MWU3ZGJhLCAweDM1ZDY3MThkLCAweGY0NWQ5NWNmLCAweGM2MzU1ZDdjLCAweDUwZmUwYzQzLAotCTB4ZTliMzZmMDIsIDB4YTE3ZWJmNzksIDB4MWZlOGJmM2YsIDB4OGQzOTJiZTMsIDB4YTA5YWU5YzksIDB4NGM4YjNlNGYsCi0JMHgwYTdkMThiOCwgMHgyNWQyM2RlOCwgMHgxZmQzOWEzYSwgMHhkZTYwZjlmNywgMHg2MDdmZDc2NCwgMHgwOWVmMjdkMSwKLQkweDlmNGZmZDdhLCAweGFlMjYzNjZmLCAweDQwZTUzZjAxLCAweGYxODhlNzg5LCAweDlmYmM1YmRlLCAweDZmYzc5NGY3LAotCTB4MTViMjdmNWEsIDB4Y2IzNTUzZjYsIDB4MmM2OTg3YzAsIDB4OGRmYTg0ZTIsIDB4ZDE2N2NlOGUsIDB4ZmFlYmQzZmUsCi0JMHhjN2MxMWJmYiwgMHgzOWZkOGM5YSwgMHhmMmU5MWNiOSwgMHhiOTI4YmQ1YiwgMHhlZGNiN2VkYywgMHgzYzBlZmMyMSwKLQkweGJlZTBmNzE2LCAweGZjNjI4YmM3LCAweGU4MWZkOGI2LCAweDc2YjZiM2JlLCAweDNkNGZlMTk5LCAweDk2MTQ1YzBjLAotCTB4NGU4MjVhYzMsIDB4ZWJlMWZiZmQsIDB4NjBmZjJlOGYsIDB4MGI3MjhlNGUsIDB4NGEzOTQ3ZjksIDB4NmJmZGNiNWYsCi0JMHhkZmU4Y2Y1ZCwgMHhjZmI0NzkxNSwgMHhlZThmMWY2NiwgMHhjOGFjNGU3NywgMHg3NTcyNDM5MywgMHgwNWY0NDMwOCwKLQkweDdiYmRmOTZiLCAweGEyZmYwYjZmLCAweGQzOWZkYzVhLCAweDE4YzdkZmE1LCAweGRlMzM2OTFjLCAweDVhNzZmNWJiLAotCTB4ODdmZDE0NDEsIDB4ZTVmNzg3YjcsIDB4ZWQxYWU2MDksIDB4ZjA1NzZhYWYsIDB4MWJiZWYwZGYsIDB4N2NhNjU0NzYsCi0JMHhjMWJjMGZkNSwgMHg5YTJmZWUwYywgMHg3MTJlYTdmZCwgMHgzZmVlOGVhZiwgMHhmZmRmOGIzNSwgMHg3ZjM5ODM2MiwKLQkweDFkZDI0YjM3LCAweDkxZmZiMGYzLCAweDcyYWY3NDlkLCAweGE3NWYyZTZlLCAweGNjN2Y3M2Y1LCAweGY2NDI1OWQ3LAotCTB4NTRhYmUwYjcsIDB4MGYzOWY3N2MsIDB4ODNkNDBmOTcsIDB4YWQ3Y2E0OTEsIDB4MGRiZjllOWEsIDB4NzBjNDYwZWIsCi0JMHg1M2NlZTg0ZSwgMHhjZjFjZThjMywgMHg3OGEwMTYxMiwgMHg3NDk2OTJlNiwgMHhiZGUwMzExNiwgMHhmOWU0ZjFlZCwKLQkweGJlODQ4YjM1LCAweDRlZjcxMzZmLCAweDVlN2NkMWIzLCAweGYzZTdiZTA5LCAweDFjOTc1YjY4LCAweGJlMGM5ZWVlLAotCTB4ZmI4OWI3MGUsIDB4NjA5NGRiYzUsIDB4ZDUyOWUyM2EsIDB4MDc4ZmExM2EsIDB4M2NhNzRiMDQsIDB4NmYwN2YzODcsCi0JMHhlNmZkNzFhMCwgMHhmYTI1N2Y3MSwgMHhiMjZmZjE3ZCwgMHhjMDAzN2RmOCwgMHhkODI3ZDBhMywgMHg5YjFlMWJmZSwKLQkweGUyYmViZTQ5LCAweGIzZmFhY2Y5LCAweDI0ZmViNGNjLCAweDllOTMzZWYwLCAweDkyN2Q3NjdmLCAweDkyN2QwOTc5LAotCTB4ZjI1MWVmNGQsIDB4M2E3OGNlZDAsIDB4N2I3NWVmYzYsIDB4Y2U2ZGIwZmEsIDB4ZGI3NDI0OTYsIDB4YWFmNGU0MjQsCi0JMHgzZmVlODUxYywgMHg3NmU3MTUxYiwgMHhiOTc2YWE0MCwgMHg2MzllZTI1OSwgMHg3YzJiNDc4MSwgMHhmOWM5YzVkOSwKLQkweGZlMGNhNWUzLCAweDdlNzRmNTdkLCAweDFiZGUzMzRmLCAweGIyODVmMzhmLCAweDc1ZmQwMDIwLCAweGY0MjJkNzRkLAotCTB4NmZlMjVmZmMsIDB4N2FiNDljNjIsIDB4YmY4ZmMzYTcsIDB4ZDNiNWQ3Y2YsIDB4YTI3YTgxNTUsIDB4NjJhM2E3NmIsCi0JMHg3ZTlmZDY4YiwgMHgzYjY2M2NiYiwgMHg0Y2NmOTlmNywgMHhmNThjN2ZiZiwgMHg3MDUxNzRhMCwgMHg1ZmQxY2ZjMiwKLQkweDNlZTk5NzY4LCAweDkyN2Y2YjQ5LCAweGVjZjM0ZGM3LCAweGVjMjllN2QzLCAweGI5YjlhZmIwLCAweGU3NGVjZDNlLAotCTB4ZjExN2IxNzQsIDB4NTcyYWQ0NzUsIDB4MWQzYzg1NDcsIDB4MmQ5MGYyMTUsIDB4NzU4NzZiZWUsIDB4OTJlYjg5YzksCi0JMHgwMjE3ZWVkZSwgMHgyY2MzOTNkZiwgMHhlN2MxN2RlOSwgMHhiMTJlMDJkZCwgMHg3NmJjM2MyZSwgMHgwNGMzZmIwNiwKLQkweDA4Y2U3ZGZjLCAweDdlZGExOWM1LCAweDdlYzAyZjEzLCAweGRjNzhjYWJiLCAweDE2ZmRmYWMwLCAweDk5OGM2N2MxLAotCTB4MzM0OWVhZWQsIDB4YjllNjEyZmQsIDB4YzVlNDk4YjAsIDB4ZmRiZDdjN2QsIDB4YjdiZjE4YTQsIDB4ZDNiOWZmZjgsCi0JMHhkYmM1ZWNmYiwgMHg4MDdiYmZjOCwgMHhmNDlhMmVmZiwgMHg4MWViOGE1MywgMHg2MWI0MTcwZCwgMHhjMThmZDE1ZSwKLQkweDVmZjgzMzhlLCAweDFkZThiMmJmLCAweDBiYWYzYzJiLCAweGVmYzRkYTc4LCAweGViOGQzMjg3LCAweGY1NWQyYjYxLAotCTB4Nzc5ZjRjNzUsIDB4MWNiMzAwZjYsIDB4ZDdmZjgyYzgsIDB4OTY0NzMyOGEsIDB4Yjk3NDNjNjgsIDB4N2Q3YzU5MWMsCi0JMHg1Y2M0ZjllNiwgMHg0OWQyZTI0ZiwgMHgxZTU4NTljZiwgMHhiY2FmNzAwMywgMHg5MGU2ZmM0MywgMHg5NWRjZWY4OCwKLQkweDMxZWYzZTE5LCAweGU5ZGEzZGYwLCAweGJiMDk3ZWI0LCAweDZmZGM0ZGJjLCAweGE4ODlkYmE5LCAweDQ2NmJjNzRmLAotCTB4MGUwMjIzYjgsIDB4NGFkN2Q3MWIsIDB4ZjMwZDdkNzIsIDB4ZTJhN2JmMTAsIDB4ZjYxMjdlYTYsIDB4MjYyYmI3MDYsCi0JMHgxNjZkZmMwYSwgMHhiMjVmNTFlNywgMHgzZmIyMjZiMSwgMHgzOTc0OWUwNCwgMHg5NjYxOTUxZCwgMHg3ZjhjYTJkMywKLQkweGFjZGQzOTBlLCAweGE0NzI3Y2YyLCAweDc4N2QzMjVmLCAweDk0MjdlZDFlLCAweDcxYzE2Mzg3LCAweDQ1NzJjNzk4LAotCTB4NWZhMDBiNDgsIDB4ZmYzMWRhNWEsIDB4MGNmMWU2MDAsIDB4OTQzZjgzZGYsIDB4ZTFlMzkwOTMsIDB4YmZiMTlmODIsCi0JMHgyZGZjMDY0NSwgMHhmMDliNzBjOCwgMHg3ZjhjZjlmNywgMHhmODc3YmIwZSwgMHhkZjM3ZDYzMSwgMHg3ZDdhMGNkYiwKLQkweGU1YzY4NjU1LCAweDk0MmZmYzAwLCAweDlhN2Y4YTgzLCAweGUwMGU4NmY5LCAweGEwNmFhZTM5LCAweDlkMGNhYTNiLAotCTB4OGI2MmRhM2YsIDB4M2VkMGI5ZDcsIDB4NjgwMmM2M2UsIDB4MTZjNzc3NWYsIDB4N2YwMGM2ZGIsIDB4ZjZlMjZmNzQsCi0JMHhkZjllOWY2MywgMHg3YTA1ZjFjOCwgMHhmOTdhODYzOSwgMHhmNGMxNjM4YSwgMHgyNzVmNTBkMSwgMHg0NThhZTNmOCwKLQkweDE0ZTdkZjhjLCAweGNmZDE0NzczLCAweGNlNDRmNWQ2LCAweDcwMzNiZDRkLCAweDdhNjU3N2RmLCAweGYwY2I4MzVkLAotCTB4M2I3ZGFmYmMsIDB4ZTg0YzJmYjQsIDB4MzdkNDZhOWIsIDB4N2RmNmQ0ZmUsIDB4OGQzYTQ2NmIsIDB4ZTIwOWViODcsCi0JMHg3MzNhNTY2NSwgMHg5NzllMDBiYSwgMHhlZTMyMjMwYSwgMHg0NTc0YmU2YiwgMHhlN2JjNzhlMSwgMHg3ODVhNTBmZCwKLQkweDdlZjg2YWY0LCAweDBlM2UxY2QyLCAweGFmNDQ3NzZiLCAweGQyZmYxMjQ4LCAweDg4YWU3NWY1LCAweDdjOGFlNTRmLAotCTB4NWUzNGRjZWYsIDB4NDVmNDJjN2UsIDB4YzFmMzk3ODMsIDB4OWViY2JkYWYsIDB4Y2YxZTQ5ZWIsIDB4MTdlZjExZWEsCi0JMHhkY2VmNWNjOCwgMHgyZWRjOTY1NywgMHhjNjdjNjU4OSwgMHhiMjQwNjNmOCwgMHgxOTYzZTNjNiwgMHg2ZjllZTIzOSwKLQkweGViNWY0MjViLCAweDdjNDI3M2ZjLCAweDJlZGY4ZmE3LCAweDljZmNiNWU2LCAweGU1OWZlMjY0LCAweGNkZjExZDRhLAotCTB4M2QwYTczZjIsIDB4MTUyMmU1ZDcsIDB4NzlmYmU5ZmYsIDB4NzhlMTFkOWIsIDB4YmU3YmQ0MDYsIDB4YzYwOTYxZmUsCi0JMHhlOWVmMGEwZCwgMHhmODQ4ZmJlMiwgMHg1MjUzNDA3YiwgMHgxZWJlODdjYiwgMHgzZDA2ZjRlOCwgMHgwZGYxODZkZiwKLQkweDI3MTNmM2QwLCAweDE4ZjQzYWQzLCAweDljODU5NzVmLCAweDFmZjRlYzFhLCAweGI2NTllZmUwLCAweGQ0NTU1Yzc1LAotCTB4ZGY2YmEwNjAsIDB4ZmVlMDE5N2EsIDB4ZDk1ZDc1OGMsIDB4NTdjNGM5ODAsIDB4ODlkNzllYTcsIDB4YTNlZjJjY2YsCi0JMHgyNWUxZDg1MiwgMHhiYzNiNTc3ZiwgMHhjOTNjNjNiNCwgMHg1NzgxMTJlZCwgMHhjN2E2ZGUzZCwgMHg1MDdiMThiNSwKLQkweDEzZjczMWY4LCAweGU0Y2QyNzdlLCAweGRmZjgwZGYyLCAweDlhM2ZmMDIxLCAweDdkYmJmZmUzLCAweGVjOTViZmY4LAotCTB4MmYyZTU2ODQsIDB4YTUyYjlkYjksIDB4ZmEyZjkyNjIsIDB4YTRkZGZmNGUsIDB4NTJhZmQzYzIsIDB4MmY3OGU3N2UsCi0JMHgxM2ZmZTdmNywgMHhjOTU1NTA4NCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGQ1ZmYwMCwKLQkweGQ1ZDQ3Yzc5LCAweGNlZmRmOGI1LCAweDMzMjRiNjc3LCAweDVmNjRjY2M5LCAweDI1ODQ5MzA4LCAweDIxMjYxMjZhLAotCTB4MjY1MDQxMDksIDB4YzUxMTYxMDksIDB4ZmIwOTQwNDksIDB4NTE1OTgzYjAsIDB4MmZiNTY5NmMsIDB4NGE0NDQxMDMsCi0JMHg1MDVkOGJkZiwgMHhkMTAxZGE5NCwgMHgxMDFhYzU1YSwgMHg4M2IwNjAzNCwgMHg2Nzk1NjIyYywgMHgwNWIwNTRhNCwKLQkweDIxMDhlZTNiLCAweGYxNmI0M2M5LCAweDNkZGU1YTU3LCAweDk5OWJkZWU3LCAweDAwNjY3N2VmLCAweDdlN2ViZTdkLAotCTB4ZGViOGZmMGYsIDB4ZGVmN2NiYjksIDB4ZmIzZGNlNzMsIDB4M2FiM2M5YmQsIDB4MjEwOTRiMjUsIDB4MGI2MmEyMWIsCi0JMHg5OTk0MWM0OCwgMHhjODRiMTI1ZSwgMHhiZDNlMDk4OCwgMHhlOTA4NDRkZCwgMHg5NTI0MjQ0OCwgMHhhNDIzYWVmZSwKLQkweDQ3NWFlYTBiLCAweDI0MjNjOTMyLCAweGJkMzg5ZWFkLCAweGJlZDE5ZWI0LCAweGZhZDJkMjVmLCAweDg2MzdmODY1LAotCTB4Yzk0YWQzMTAsIDB4ZmU5ZTMwYjksIDB4ZDNiNjk0YmUsIDB4M2ExNjZkZGYsIDB4OWVkMDMxMzAsIDB4MTYwOWViY2MsCi0JMHhkMDI1MjEzYiwgMHg4MjBkMjdjZiwgMHg5MzZmMzZmOSwgMHhiNGJlNzRiNCwgMHg2MjkwODk3NiwgMHgyZjEzMzY1YSwKLQkweDRiOGMwYWM5LCAweDk5ZWZiMDczLCAweDAxNjk1ZTFjLCAweGJiNDhkZmVkLCAweGFjODQ5MTkxLCAweDU5ZTc1NGQzLAotCTB4MTQ5OTY4MTIsIDB4YmZhNTY4ZTMsIDB4MDdiYWIwNmQsIDB4NGZlYTdlYzAsIDB4ZGE2NjdjZjksIDB4MmVhOWM0NjUsCi0JMHg3YjhlOWJhZCwgMHhiNGNjZWFjMiwgMHg2M2Y2MDYyNCwgMHgyNDY5MmQ5NywgMHg1Mzk4OTA4NywgMHgzNjZkOWQ2YywKLQkweGZiMDVkNzMyLCAweDE3NGNmZTIzLCAweGM2M2YyNDBjLCAweDE1YjIxMWY1LCAweDkzMjg5YmQ3LCAweGFiNDZjNDIzLAotCTB4MmY3ZTg3ZDAsIDB4ZDZlZTc1NjksIDB4N2Q2MDUyZjUsIDB4NmVlMjM2NDksIDB4NDk0OTZkYTcsIDB4ODRkM2JkYzQsCi0JMHgyMjkxZDdmZCwgMHg3MDQ4ZDdkYSwgMHg4N2FiNDkzZiwgMHgwNTlmNWQ2YywgMHhkZTcxNzlmMywgMHgzNmQ3MWNhYSwKLQkweGY5MmFiZGY4LCAweGZhNTZhMmJhLCAweDlmMDZjZTdiLCAweGI3MWQzZTc2LCAweDAyNjZiMzc3LCAweDJiY2M1M2VjLAotCTB4MDkxNmQxY2EsIDB4OGM3ZGQxYzcsIDB4N2Q4OWZkODAsIDB4OTI4OWZiYTgsIDB4NWJhZTBmMTAsIDB4YjM0NWQzZjQsCi0JMHg1YmY2ODVmZCwgMHg0Y2M2ZjM4NSwgMHg2ZDBkZjA2MCwgMHgyZjZjNzdmZiwgMHgwY2MyNjVmZiwgMHgxYWZkNmY1OCwKLQkweDAxNDgzMTNkLCAweDc1NjEzZmY4LCAweDRkNzAwMmRkLCAweDAxMjJkZjZiLCAweGE2OGMzZTZjLCAweGYwMmMzNDc0LAotCTB4MjlhMzBmZGQsIDB4NzZiMDE1M2QsIDB4ODdmMzg1M2IsIDB4Nzk0NzRhN2EsIDB4YjQ4YTNhMDEsIDB4YjI5NWZhZmUsCi0JMHhhMGYwZTE3MywgMHhlMjNkMWFmYSwgMHgyYzllOGI2OSwgMHg1ZTBiY2Y2ZCwgMHhkZjVjNmFkZiwgMHhjYjA2OGIyMiwKLQkweDJjZDc1NmEzLCAweGM3NjM0ZjgwLCAweGZiYzA3YWMzLCAweGU4MWY2ZGIyLCAweGNlZjg1N2RkLCAweGVlOTFjMmI1LAotCTB4ZTI5Njk1N2YsIDB4YjI1ZGFlYmQsIDB4NGFlOTI4MTgsIDB4ZTgxMzkyZWQsIDB4ZThkNmJlYTAsIDB4NmZkNDc4MDUsCi0JMHhkNjRiNzQ2NywgMHhhMTgzYmRlOCwgMHhhN2MzYmVkZSwgMHhmN2U5ZWRhMSwgMHhmZDMyMWQzYiwgMHgwZWZiNmViOSwKLQkweDdjMTA1MTY5LCAweDEyYmRlYmQzLCAweDU5YTg2YmFjLCAweDFlOWYyYjljLCAweGZlOGE5NWNmLCAweDQ1Nzg1MTBmLAotCTB4MWMzYmJhNTEsIDB4NWE0NjNjNDUsIDB4M2M5Yjk3NzYsIDB4Yjc2Zjg1MTIsIDB4ZmQwZjVkY2UsIDB4MWM2MzUzYmEsCi0JMHhmNWVmZGExZSwgMHg0ODhmZTMxZCwgMHg3NzlhZGNmNCwgMHhhZTUwN2MxYSwgMHgzMTRkNmNkMywgMHhkNzc1ZjZkMiwKLQkweDQxYWQxZGViLCAweGJhZDM2Nzc0LCAweDZiMzhjMTc2LCAweDhhYjFkOTgyLCAweDIwNmVjYTdlLCAweDljMTMxNjQ1LAotCTB4NDdmZTI1NzcsIDB4YzVjZWNmZGMsIDB4YTMyYzRiNmUsIDB4ZTA4YTQyMjMsIDB4MzE2ZTNjNWMsIDB4ODI4OTNkNjMsCi0JMHhmN2QyOGNiYiwgMHhkNzViMWQ2MSwgMHhlMWU4YzI0ZSwgMHg4MzZiOWM1MiwgMHgyM2UzYmYwNSwgMHgzYWRlM2EwZSwKLQkweDNhOTc5ZDgxLCAweDdlODkxZmJhLCAweDJlZjM2ZWFmLCAweDYyMzkyN2RjLCAweDZmYTdiODQzLCAweDc1YmJmMDk3LAotCTB4YjllMGI3ZGIsIDB4NzNiYjNhY2UsIDB4MmZmYTFlYmYsIDB4MjQ1MWE1MjUsIDB4MWI5Y2NlOTgsIDB4ZDVlZmNmODMsCi0JMHg0MjYyMzVmMCwgMHhhZGU4MWViYiwgMHhmMmExZjM4ZSwgMHgzZTkzNmU1ZiwgMHhhZmRmZGEwYSwgMHhhM2MyMzIyZCwKLQkweGZkYjZmMzZlLCAweDY0N2JmNDY5LCAweGI2MGNiMTI5LCAweDEzZmRiZjYzLCAweDA2YjVmN2Q5LCAweDYwN2ZjNDEyLAotCTB4OWQ2Yzc5OWQsIDB4OGZmODgyOGIsIDB4M2UxODdmZDgsIDB4YWY1ODViZjQsIDB4NDFkNzU0ZTksIDB4NDg3Yzg3YzYsCi0JMHg2YWZkNjI4ZiwgMHg3ZTcwNzZiYywgMHgzYzRmNGUzOCwgMHg5M2RlYmJmOCwgMHgxZGYzYTc2YiwgMHhmOWM2OGVjZSwKLQkweDczODA1ZjA0LCAweGE1ZjljMzVjLCAweDYyMTNkNjg2LCAweDVhMGViOWU4LCAweDllNmY1ODhmLCAweDgyZDNhMmI1LAotCTB4Mzg0MmU4NzAsIDB4ZTJkNjZjMzQsIDB4YWVmNGFiZmEsIDB4Y2U4M2NiNDEsIDB4YjlmOWVmYzMsIDB4ZmJkYTZkNzksCi0JMHhmZGZkM2Y3YSwgMHg4M2JmMmZlNywgMHg5MzY4NjlmOCwgMHg0OGNmYzA5YywgMHgzYmZhM2JkYiwgMHhiZmFjMDFmMiwKLQkweDIxMTI0OTkxLCAweGI3ZmIwODkzLCAweDdhM2JmNzcxLCAweGQyN2RmZDNiLCAweDg2YmY4NjJlLCAweDBiYjQzYjVkLAotCTB4Y2NmYTAxNGMsIDB4MWNkYWZiM2EsIDB4NzY4NmIzYTAsIDB4MDA5Mjg5MDMsIDB4NTgyZWVlN2YsIDB4MDU0ZTlhOGYsCi0JMHg4ZGRmMDQzYywgMHgwOTk4Y2Y4NCwgMHgwZjEyOGY4YywgMHhjZjQ4NWYzZCwgMHg3MzFhYWNlZSwgMHg4YTVmNmY4MCwKLQkweDM1M2EzMGQzLCAweDJkYmJkZmIxLCAweDFmYTAxZWFjLCAweDk3NDAwN2Y3LCAweGQ3OGVkMTU1LCAweDE1NTQ1Y2UwLAotCTB4MDI1NjhlNDksIDB4ZmI4NjNjZWIsIDB4NzA2NGE4NDgsIDB4NzU0ZjVlMGMsIDB4OTk3ZTY0N2UsIDB4ODVlNWNmMTgsCi0JMHg2MzU5OWZkNiwgMHg3ZWFmOWMwZSwgMHhmN2M3Y2ZiZSwgMHhmYzk5NWUwMiwgMHg0OWRmYjFmMCwgMHhiMDNmMmJiNiwKLQkweGQyZGUzNTZlLCAweDBmZjYxMmFkLCAweDAxMTc0ZjQzLCAweDI2Yjk2YTdlLCAweGUzZTgyZmQ2LCAweDBhYjU5YmQ3LAotCTB4ZWFiMDYxZjksIDB4NTU4MzNlNzEsIDB4MDhkYmViOGIsIDB4N2U3MmExZjgsIDB4Y2I5ZDhlYTMsIDB4NWU4Y2FiOGQsCi0JMHhjN2QzMWZlNCwgMHg5ZjI4OTExZCwgMHhmYmQwY2YzNiwgMHg5OWE0M2NhMCwgMHg4N2VkMGY1ZiwgMHhkN2Y3ZDhkMiwKLQkweDQzNzczNDY5LCAweDEzNmFkZDdkLCAweDNhN2M0NTY5LCAweGEwNDRkNjhkLCAweDRiYzQ1ODliLCAweDZiZGVhZDdkLAotCTB4ZmNmY2YzYTAsIDB4ZWFiZmM2NDUsIDB4MDEyZjI2M2QsIDB4YmE5ZWU4M2UsIDB4ODQ5MWM2MTAsIDB4ODA1M2M3MjgsCi0JMHhmZDQxZjczNywgMHg3YTUwZTYxZCwgMHg2ZjYzZDNiMiwgMHg2YTRmYmZhNywgMHhlMDRjZTc2NywgMHhhNDUxZjI4MSwKLQkweDA0YmYyMTJiLCAweGY0ZjAwMzVjLCAweGMwOGRjZTJhLCAweDBiMzhhNWM3LCAweDJjZWU1YmU3LCAweDMzZGQ3NzgwLAotCTB4NzM4ZmRlNTEsIDB4MTMyZWI3ZDksIDB4YTJhYjRiYTAsIDB4ZWE5MWQ0ZGUsIDB4YTgxOGQ4ZmQsIDB4MDBmZmMxZDcsCi0JMHg1MmE3NmMxZCwgMHg4M2FlOTRhZCwgMHg3NjVkMzNhZiwgMHg2ZWZiMDc1ZiwgMHhlYjBmZmEzMCwgMHg0ZjRiNmEyOCwKLQkweDhlYjllMWY2LCAweDJiNzViNzQ0LCAweDk4ZmI0Y2RmLCAweGE1Nzc0M2VhLCAweDM4YTU4MWJjLCAweGE1NmNiYWFmLAotCTB4NzhlNTJlM2MsIDB4OWJjYmMwMWYsIDB4ZDQxZjhjYWMsIDB4NzllM2I3MTUsIDB4MTliOGZiYWMsIDB4MDI2OWIxY2YsCi0JMHg1M2E2NjdlMywgMHhjODRkN2U0YSwgMHhiMmJlYjg0ZiwgMHhjNTU3YzcwMSwgMHgyOTkzOGZiNCwgMHgyNTdlYWJkYywKLQkweDY0NDk1YTU5LCAweDIyNDRiOTdlLCAweDlmYTc5MDJlLCAweDNiMTAzZTZkLCAweGU5N2JlMDBmLCAweDhkZmI4Y2IyLAotCTB4NmM5ZGZiNjIsIDB4ZmJhOGU3NjUsIDB4YTQ3MDBhMTksIDB4MDkzZDY2ZjcsIDB4OWQ2YmRmYjMsIDB4NGI4ZWY4OGYsCi0JMHgwZTNhZjc4MCwgMHg5NWVkZWVlYiwgMHhmNGExM2YyMywgMHhjZTI2NzllMiwgMHhkY2Y3ZmMwMSwgMHhmODNmMjlmNiwKLQkweDdiYmJhZTg0LCAweDliOTQxOGRiLCAweGE0MmVhZDA5LCAweDI4YzRiZTlmLCAweDNmNGE1NmM3LCAweDIwOTkzMjA5LAotCTB4NmFhZmJjNTEsIDB4OGEzYjEwM2YsIDB4YjlmY2ZiOGUsIDB4OGYyMDQ1NjEsIDB4OWU3NWYxMTcsIDB4MDk1ZTUxN2QsCi0JMHhlYmZkNTk3MCwgMHhmNjg2NmUxNywgMHgwZjE0YWYzYSwgMHg5OWZiYmM3YywgMHhmODEzZmQ1ZiwgMHg0ZDZkZDJmYywKLQkweGQ2OTE0OWEwLCAweGY3YTc3ZWU3LCAweGVmMWE3ZWQzLCAweDMzZmJmNjE2LCAweGY3ZTgxNjcxLCAweGRmMGY5M2Y5LAotCTB4NmQ2ZWYwMGMsIDB4YjNmNmM1NmYsIDB4ZmFjMTZlNGYsIDB4ZTE3ZWJmNmIsIDB4ZjIwN2ZmZDUsIDB4ODBlYjE1ZGUsCi0JMHhkYzVmNjc3ZSwgMHg3N2E5Nzg4ZiwgMHhkZmIwOWQ2YiwgMHg3MWJkNzQ0OCwgMHgyN2M2N2VjNywgMHgzOWMzYWU0MSwKLQkweDRiZmM2NWE4LCAweGRmYTBiNWQwLCAweDc3M2Q3ZmNmLCAweGE4N2NiMDY0LCAweDEyMTk1ZDk3LCAweDM4MzY0ZmY0LAotCTB4NWU1MDkyOWUsIDB4MTQzODljYTAsIDB4NzQ1MWI0NDUsIDB4ZDJkM2FmZmYsIDB4NzkyYWNiNDgsIDB4ZTAxZDdlZjksCi0JMHgzM2YxODczOSwgMHg3OTA5MjFhYSwgMHg3ZjQzMWJlZCwgMHhjYzRjN2RiZiwgMHgyZjNiZDQxNiwgMHhjZjA4MzNkZCwKLQkweDNiYTMwYzRkLCAweGNmOTE4ZjNhLCAweDg4Nzk4NDYzLCAweGYzM2VhMDk2LCAweGE4NzVlNjc2LCAweGNkMjk1MmQ3LAotCTB4Y2UxMjQ5ZmEsIDB4MWJhNmU4NzMsIDB4MTdiOWMyYjYsIDB4NmFmOTg1ZWIsIDB4M2FiZGExZjIsIDB4Zjg4OWU0MDMsCi0JMHhlNzVmMWQ3ZCwgMHhkZjI2NjhiYSwgMHg1MzdlNzFjZSwgMHgwNzVhNjE1NywgMHhhM2U3YjllNSwgMHg4ZDNmMDE2YSwKLQkweDJiMTBmZjdhLCAweGQxOGYyZmMwLCAweDI2NTY0M2YxLCAweDk3ZGJlYTg3LCAweDM4NGQxYWViLCAweDk3NzllNzFlLAotCTB4ZjMyODI5ZjIsIDB4OTRmYTc5ZTksIDB4NmJkYTU3OWUsIDB4ZjBlMWU1ZGIsIDB4M2UzMmRmYmQsIDB4NjBjYTRkMTksCi0JMHg3ZDY2ZDMxZiwgMHg2MmZjMDEyMCwgMHg3NTc1OWFmMiwgMHg1OGU3ZDcwOCwgMHg3MDUyYzUzYiwgMHg3NjBhZTk3YiwKLQkweGZiNzRkNDdlLCAweGNmYzRkNWE0LCAweDY5YjczYjBmLCAweGVjMzNhYWJiLCAweDhlMGNiN2M4LCAweDUzZmE0MWMxLAotCTB4YWI3NzUyZGEsIDB4Y2I3ZWZlOTksIDB4YTY0M2I3MGEsIDB4Y2NmN2I3NzQsIDB4YjRlOTcxYjEsIDB4Njk1Y2ViZmUsCi0JMHgyY2FiZDIzOCwgMHgzMWVjNzkzMSwgMHg1NjFhNzdlMSwgMHhlODhmOTI1NiwgMHhjZmM5ZGZiOSwgMHg2ODg1OTI3NSwKLQkweGUwMGEyYzZmLCAweGI0NGI0YWE5LCAweDFmN2Y4NDI2LCAweDc1ODZiNWYyLCAweDYzNmY1ZTVjLCAweGJlYzYyNGViLAotCTB4MWM2NjI5Y2MsIDB4MTZkMWJhNjcsIDB4NjcxZDA3NTgsIDB4MmZiZDYxMzIsIDB4OTA3Y2NlZjMsIDB4OTQ1YTllOGYsCi0JMHhhZTNkNzY4ZiwgMHg1ZmUwYWNmNywgMHgzYjMwNTNjNCwgMHhhODFmYzAzZiwgMHg3YTA2ZTZkZSwgMHg3YjMzZDI0ZCwKLQkweGI1NjNmODA1LCAweGYyZTZmNDE5LCAweDQwOTJkNjIzLCAweGRhY2QxNDk5LCAweDZkOTI3MGQ1LCAweDNiYWU5ZGI0LAotCTB4N2VjNGU2ZGYsIDB4ODU3ODk5ZTQsIDB4MDdjNDhhZmMsIDB4MzdmZTM5MWIsIDB4NDBjNWZlNGEsIDB4NTEzZDllNjcsCi0JMHhjNmViYTAxNiwgMHgxNDQzZmQ5YiwgMHg1Mzg3MDk3NiwgMHg5ZTliYTcwZiwgMHgwZTVlOGMzZCwgMHhkODFlMzQ2OSwKLQkweDM3YWRhMWRmLCAweDQyOTU2OTZjLCAweGFlNTBmMWU1LCAweDQ4NzVhNzlmLCAweGRhNGJjMDE2LCAweGZlMDUxYWU2LAotCTB4MGFiNzVlYTgsIDB4NWM4NmNhZjQsIDB4ZjdmNTE0YTksIDB4YmZiZmU1OGUsIDB4MjkxYmQ2OGUsIDB4YjhkZWEwZGUsCi0JMHhhYTRmOWY4YiwgMHhjNmZmNDJhNywgMHhmMDg1ZWE4ZSwgMHg4OTg0ZjRiZCwgMHhmZDQyNTkwZSwgMHhhZDNhNWM2OCwKLQkweDEyOTNkNjM3LCAweDA3MWJmZjM4LCAweGUzYTRmNzM4LCAweDk0ZjIyNDNlLCAweGQ1MjllNDFkLCAweDI2OWU0MWFiLAotCTB4ZGUzZWEzZTYsIDB4ZmE4NmRlZTgsIDB4NzNkNWM5MzcsIDB4ZjUxMGI3YjksIDB4OTk5NGM2ZjUsIDB4MjE1ZjM4MGUsCi0JMHgyYWNmNjI3YywgMHhlZDFhZjdkNCwgMHhkYTI4OGVkMSwgMHg3NDg3NTI3ZiwgMHg0Yzc3ZDMzNywgMHg3MjQ3YWQ4NCwKLQkweDc3OTI3ZDQyLCAweDczZDYxNzk0LCAweDk0NDdjMDVlLCAweGYwMzlhZWJhLCAweDA2ZGQ5ZWZkLCAweGFmZWRhMWUyLAotCTB4ZjI4ZjE5ZWYsIDB4Zjk4YmQwNWMsIDB4NzVjYTAzMjUsIDB4ODEyMmQ2OWIsIDB4YzVhZTdlNWUsIDB4NGMxYTNlNDksCi0JMHg5Y2I4MWZjOCwgMHhkYmFjZjAxMSwgMHg3MzgxYTU5ZSwgMHhjM2I3OWU3MiwgMHg5NzEyN2IzZiwgMHhjMzZiYjQ4NywKLQkweDY3ZDIxZjQyLCAweDEzZGJkNzNkLCAweDdiYzJjZTBjLCAweGY0MjdmMDgyLCAweDY0MWQzNTI4LCAweGQzNWUxOGRiLAotCTB4ZTA5NDFmMzYsIDB4NzNmMWFiMTAsIDB4NmJlMjUyY2IsIDB4NjViYmViYTIsIDB4YTYzN2M2YjMsIDB4MTlhYmY1MDAsCi0JMHhlOTU3ZjdjOCwgMHg3NDI5NTZjOSwgMHhjNjM2MjFiZSwgMHg1ZGUyYWEyZiwgMHhhYjI3YzA4NSwgMHhjMTFjOTlhNiwKLQkweGRhMmFhOWZjLCAweGQyMGE4OWE5LCAweDE1NzEwOGYzLCAweDI2NzYzZDgzLCAweGNmZjA4Y2M5LCAweGVhYzNkOWI3LAotCTB4NzlmNmExNjUsIDB4Yjc0ZmRhMTQsIDB4NDgwYTc5YjYsIDB4MTU1ZDZkMzYsIDB4OTJlNzBiNWQsIDB4ZjIxMzYzZjIsCi0JMHgwZjFkMGI0ZCwgMHg1MWQ2ZmRmNiwgMHhiZWZiMzI0ZiwgMHhiMTRkZTcxNSwgMHg4ZWY5ZDg1OSwgMHg4MzM3MTU3NywKLQkweGI1YzcyMDNmLCAweGIzMzFjOTgyLCAweDhlN2VkYzIzLCAweDNlMWU4NTVhLCAweDc0MDM1MGE3LCAweDAwZTRkNTMyLAotCTB4YWZlN2YyYmIsIDB4NmU5MWYzNDgsIDB4YzI2MDU0M2MsIDB4MzhhZjcxNzksIDB4MmJkOTkxMzYsIDB4ZTIzYmEwMGUsCi0JMHhkNWJlYTJkNiwgMHg4NmYyZWNkOCwgMHhjNzQ2MmJhNywgMHgwMmZmNTQ4ZCwgMHgxNWQyOWMzZCwgMHg4M2IxYWRlMiwKLQkweGY3NjExZmM5LCAweGQ2MDg5ZjAzLCAweDEyYjljNTc3LCAweDM1ZjgxNmU3LCAweDM3YTA4ZGQwLCAweGY1YWY2ZTcxLAotCTB4ZjNmMGY2N2MsIDB4MWZmNzQzZDEsIDB4YmRlNjlmNGMsIDB4YWZkNzJlOGMsIDB4ZmI0Mzk3YjIsIDB4MDk2MjJhZmEsCi0JMHg3NmQ1NTdiNiwgMHgxZjBlMWQ5MCwgMHg4YzlmZGJhZCwgMHg4MjNjYzJmMSwgMHhiYWIwNmRjZiwgMHhiZDYwZGE2NiwKLQkweGFiNThkZjViLCAweGQ0YmUwMTI1LCAweDIxYTFmN2I4LCAweDhjY2ZkMjU3LCAweGQxOWYzNjVhLCAweGE2MGRlMzFiLAotCTB4YjcwNTIzMWYsIDB4MGY0YjA4YjksIDB4OTU5OGU3ZjAsIDB4ZjcyM2ZkZTEsIDB4Y2Y0YzRjZGEsIDB4NjVmYWI2ZmIsCi0JMHg3YzA1YTQ5ZSwgMHg1ZjMyZmQwOSwgMHhlMzZiZGY3NiwgMHgwOGE1MjVmYSwgMHhlOTkyYjk5MiwgMHhlYmMwNDk5NywKLQkweDhkNmMxZjgxLCAweDExM2YwMmYxLCAweDdhZjUyNjdlLCAweDA5OWNmY2RjLCAweDIzM2IwYWJjLCAweDdmZjU5NjI5LAotCTB4MzU5YjlmOTgsIDB4YmM2M2RmYmMsIDB4ZjA1ZmIyMGMsIDB4ZWUzNWQ4M2MsIDB4NTkxYzg4MGYsIDB4ZGY3MTg4MGUsCi0JMHg3YzRiZGY5NSwgMHgzNTIzYzg0NywgMHg0MWZhYzBmZCwgMHhhYTdlYzE2ZSwgMHg2YmY3MjJmMywgMHgzOGVkY2ZkYiwKLQkweGUxZWYzZDE1LCAweGUwMTZhYmU3LCAweGJjNjI3YTA4LCAweGU3MDBlZmZiLCAweDE5YzQ3MTU5LCAweGViM2ZmMTRmLAotCTB4MjdhNDA2NzcsIDB4MDQzN2RiOTIsIDB4MmQzYWQwZWMsIDB4ODA2YzE4ZjEsIDB4MWZkNzlkNTcsIDB4NzhhNmI3ODQsCi0JMHg2Y2Q3YmUzNiwgMHgxY2Y0YzhmNCwgMHg2Zjc3OGE1YywgMHgxNTNjNzk4NywgMHgzZDAzZTFjNCwgMHg1Zjk0ODdmNiwKLQkweGJlMjRiOWMwLCAweDRkMjdlMDEyLCAweDcwMGIxZmM0LCAweGRiYmFjNWI0LCAweGFlZTUzZTkxLCAweDNiNTNhODRjLAotCTB4ZjNiZTAwYTYsIDB4OWZiMzBjNDgsIDB4YmQ5MGRlZmEsIDB4MmUzYzI5NDMsIDB4M2VmZmZkMTgsIDB4YzJlN2FlOGEsCi0JMHg4Nzg3MWM4YSwgMHhlZjdhNzNjZSwgMHg5OWZmNzc5ZiwgMHhmYmJmM2VmNiwgMHg3ZWMxMDFiMywgMHhlY2EzNDZhYywKLQkweGVhMDdjNmQyLCAweDZkYTkxMjNkLCAweGJiNzdjMzBmLCAweDk4NmZjYzZjLCAweGJiZjA4Mzc1LCAweGJhZGVhMWY1LAotCTB4MGM5OWNhMjIsIDB4ZmIxNTlmN2UsIDB4YTRhZjkzY2EsIDB4YWM1ZDM3Y2YsIDB4M2YyMGRlMjQsIDB4MGYxZDEzNWMsCi0JMHg4ZTJlOWFlMywgMHhlNjQzZGZjMywgMHg3YzgxZjNhNSwgMHg0ZTk4YmE2OCwgMHg3N2Q5YzMzYywgMHgzMGZjNmY4MCwKLQkweGMwZGJmMTllLCAweDNmNmM0Y2Y4LCAweGYzZmE1MWFkLCAweDNjNDVlNWZhLCAweDQyMmVkN2MzLCAweDFmNmI4NDI2LAotCTB4YjVmNmNmMWEsIDB4ZGY5ZDliMmIsIDB4MTc5MjRkYmUsIDB4MmJjNTgzZWMsIDB4ODI5OTNlY2MsIDB4MTlmZDMxNzQsCi0JMHgxNmM1YTVmNCwgMHgwYjEzNGY4ZiwgMHhiMWYyODdmYywgMHhhOWM2ODg2MSwgMHhjYzhmNmE0NiwgMHhmNjhjZjJlMywKLQkweDdhMDY4ZWQzLCAweDFjZjA1OGY1LCAweDljMzlmOWJhLCAweGQ3ZmFmMWQ3LCAweGFjNTg5ZmUwLCAweDc0ZDFjNjI1LAotCTB4Yzc0NmY5OWUsIDB4ZmJmYTc0ZTEsIDB4YjFiMWE2MjcsIDB4ZGUxNjI2MjAsIDB4ZTQwOTI1M2IsIDB4NjZhY2YyNTgsCi0JMHgzMjEyMmZmNCwgMHhhOWZhMDJkNiwgMHg5N2NiNDY0NCwgMHgwZmE0YWU2MywgMHg0NThmNTE2OSwgMHhmMDc0YTI3YSwKLQkweDJmYWVmMTZmLCAweDFkMDIxZDA0LCAweGYxODdiYWNjLCAweDQ5ZmZkMTM1LCAweDE3ZjM4NjliLCAweDFmYmUxZDI1LAotCTB4YzZlZmRmMDEsIDB4ZTgwYWZjNTcsIDB4ZDczOGMxZWMsIDB4N2JkZTcwM2YsIDB4NWZmODJiY2UsIDB4ZmE3ZmU0OGYsCi0JMHhlNWQzYTA3MSwgMHgyNDUzYzc2NiwgMHhjMzg5YmM3NCwgMHg0YmIwYjdiZCwgMHhkZWYxZmUwZiwgMHg0NGM4ZmZlNSwKLQkweGY1ZjNiNDdkLCAweDFiYTdjMDkzLCAweDBjOWYyNjhjLCAweDVkMmVjNTdhLCAweDAzZWM1ZmI3LCAweDMzOWM2MmU0LAotCTB4ZjM4ZTllM2EsIDB4ZmFkYTM4M2MsIDB4OTIwOWE1MjksIDB4ZmRjNzdmNGMsIDB4ZGUxNDRlZDIsIDB4YmMxOTFiNzcsCi0JMHg1Yjc3OGRkZiwgMHhlZTkxMTNlMywgMHg3NTdkODJlNywgMHhiMzhmNjhjMSwgMHhmYmU4YmQwMSwgMHgyNjMyZTNmMSwKLQkweDMyNDNmMDA1LCAweDc0YmM0YWNjLCAweDk5Nzg4MWJlLCAweDAxZWE3NDZmLCAweDJlOWMwYmZlLCAweDM4YWNlNzVjLAotCTB4ODE0NTg5NWYsIDB4ZjJmOTNjODcsIDB4MDc4ZWQ3MGQsIDB4ZDNlYjlmOTksIDB4NzMwZTVmZTAsIDB4Yjg3Mjg2MWUsCi0JMHhkMWZhMTBmYywgMHhhMzFhNzRmMiwgMHg2NDk5ZDNkYiwgMHhhZjI4NGVlOSwgMHg3NzFkMjVhNywgMHg4YmQ3OWIzYSwKLQkweGVmMDg3ZDc4LCAweDM3ZWFjNDk3LCAweDVkM2RiYTcyLCAweGJmYTlmYWMwLCAweGNlZmYyNzczLCAweDYyY2VmMWJiLAotCTB4ZTcxZDEzODAsIDB4NWViZTAzZDMsIDB4YmU4MmYyOGQsIDB4OGRkNmY5NGMsIDB4N2M1ZThjZjEsIDB4NTViZTYwZDYsCi0JMHhmODA0MzdkYywgMHhjNTA5NmY2MSwgMHhmYWNmZGQxYiwgMHgxM2NjYmVmMiwgMHgxOWY2NTdjMCwgMHg1N2VkNWIyYywKLQkweGJlNjRkZmM3LCAweGM3MmQ2ZmFlLCAweDk1OGU1NDFjLCAweGU0ZDhlNDJhLCAweDEwYzcyNjc4LCAweDdhMjU3NDRmLAotCTB4NDIwZDVmYTYsIDB4Yzg3ZDIwZmMsIDB4MWI5ZjhlZDcsIDB4ZTlkYzE5YTIsIDB4NDc4ZGE5NzksIDB4NzdjYmU1NzksCi0JMHg4NmY3ZjEwNSwgMHgwNDRlNzY3OCwgMHhhZDFkMzkzZiwgMHgzOGRmZTNjNCwgMHhmYmM3OWMxZiwgMHg2NjE2ZjFjOSwKLQkweDMyZmEzOWVmLCAweGI2ZDM5ZTYxLCAweGJiZmY3OGYwLCAweDhiMWYxZmFkLCAweDE5NjdiZTgxLCAweDUzYzRlNmZhLAotCTB4ZWE5M2JiN2EsIDB4YzQyMmZhMGQsIDB4MDllYjBjODcsIDB4N2NmMzRmYjEsIDB4ZGNmMzg1N2YsIDB4ODA5OWI3NzQsCi0JMHhlZjg2NmJmYywgMHg1ODllMjIyNSwgMHg3ZDk3Mjk3YywgMHgzZDRmNzI5NywgMHgxZjg2YWZkNCwgMHg1MmE3ZDVmMCwKLQkweGY0YzkyNDNlLCAweDU2M2MzNjQzLCAweDFhYTcxNjc2LCAweDE2ZjNjMTZkLCAweGVlNGZjZmQ1LCAweGZhOGY4NjBmLAotCTB4YmUzOGE3YmIsIDB4ZGE0YmM2ZDYsIDB4MGU4ZjAxNGYsIDB4NzM3MTgwZTIsIDB4M2NjMmY5ZGUsIDB4NzljOWQyOWIsCi0JMHhhMWEzZDE4YiwgMHhiYjJkY2Q3MiwgMHhiYjdlYzNkNywgMHhlYTA2ZjA3ZiwgMHhiZWY0YTdiZCwgMHgzMGE2NmQyMSwKLQkweDEzZGY3YWVkLCAweGY2ODE0ODhmLCAweDNkOTFiZmI5LCAweDc3OGU3YTdhLCAweDYyZmY3NTc1LCAweGJiYmZkZDFhLAotCTB4MzljMDc2NGIsIDB4ZDdmZmRmNzYsIDB4N2Y0MDIzYTMsIDB4YzAzOWQyZTksIDB4NzVmMmEwYWMsIDB4ZDFmNjE2ODMsCi0JMHg1M2I0ZjRjYywgMHhjZmZjMjUxYSwgMHg0NzY5NGY3ZCwgMHg0NmYxYzMzYywgMHgzM2E0MGFmNSwgMHhmMTRlMGZjMSwKLQkweDYyMTJlNWI4LCAweDE1OWZiYTQxLCAweGVhMTViYjFkLCAweDZlNGJlNWZlLCAweDdjZTYzODg1LCAweGE0ZWMzOGUyLAotCTB4ZWVlY2ZmZjAsIDB4NWU3N2U4ODksIDB4MmZjODljNDQsIDB4MWY3NDc5ZTYsIDB4MDVkM2YzMDYsIDB4NDVmNTk0ZWIsCi0JMHhmZDNhY2E2ZCwgMHg5MmVmZDIyMiwgMHg3M2JmZDU0NywgMHhmODY1NzA3ZiwgMHg3OGQxZGFmOCwgMHhkMzlkMjdhNiwKLQkweGNmZGY2Zjg3LCAweDdjYmRiZmRiLCAweDgzNzg4MWJlLCAweDdjODA4MGY0LCAweGQ1ZGZjMDJkLCAweDM5MDIxZWYzLAotCTB4ZDM5MDEyNWMsIDB4NWQzNzNlNDIsIDB4OGYzMDhhOGMsIDB4YjczZjdmMDksIDB4ZGZmYWZjMzgsIDB4ZTlhMzdjZTYsCi0JMHg3OWU1MTVhMiwgMHhmYzA0ZjhlOCwgMHhkODY2NmE5ZCwgMHhlOWI1ZTA0ZiwgMHhjNGYxMmE2MiwgMHgzZjQyZWEwNywKLQkweGMwY2I4YzBjLCAweDJjMDAyYTc2LCAweGY4MDRjNjlmLCAweDBiMDNmMDgwLCAweDIyNDBmZTNhLCAweGRmYjQ1NGM2LAotCTB4YWM3YWU2MWUsIDB4NTJmYzAwYTUsIDB4YTdiYzgwMWYsIDB4Mjc4Zjc2ZjgsIDB4MTJlOWZhYWYsIDB4M2E5N2RkZTcsCi0JMHhhMDFkOWI0NCwgMHgyODNlZjU3MywgMHgwN2Y1OWMzZCwgMHhlMjRmYjlmMSwgMHhhZTc4MDljZCwgMHhmMDYxOTE4NiwKLQkweDczYTc0MTVkLCAweDA3MTU1MDdlLCAweGY3MmZmZWYyLCAweGViMDcyNjU3LCAweDBlN2VmZDYzLCAweGE4OTdiMzNkLAotCTB4MmRjODU1MjQsIDB4ZjM2YjkyYTIsIDB4MmIxY2E4M2EsIDB4MDg2MmJkNDAsIDB4ZjY4ZjhkMzAsIDB4YjkzZTQ3NGQsCi0JMHg4MDkyMzg5MCwgMHgxOWY3N2I4ZSwgMHhmODFmZDEzMiwgMHg1ODk5ZTUyZCwgMHgzY2NmMTRjZiwgMHgxMzM3ZDMxZCwKLQkweGYwZDcwZTUwLCAweDY0ZTk0ZmVmLCAweGU4YzY4ZGZhLCAweGUyZmVhMWQ0LCAweDEyNGI3NjI0LCAweGVlNGM5ODlhLAotCTB4YTVhMmExNTIsIDB4MWQ0NDliZjUsIDB4NDdkNjg3ODgsIDB4MzA0OGNkZjMsIDB4MjZmZmFlOWUsIDB4ZWVmOTkyNWUsCi0JMHgwNjU3MzgxNCwgMHhlYzBjYWVmOCwgMHg2NTAyOWJjOCwgMHgxZDg3NDhlYiwgMHg0YjkyMzFjYSwgMHhmMGMxZDZjYiwKLQkweDY3MzQ4ZTNjLCAweGQxOGQ3ZjQwLCAweDg5ZmQzMzJmLCAweGM2MDkyMGFlLCAweGJhYjFlZjhiLCAweDRjZDdkNzk5LAotCTB4MTE2NzMwYmQsIDB4ZTMzMjZlZmMsIDB4NzVmM2Q3ZjksIDB4N2NhMDQ5MGMsIDB4MjQ2ZGY2MGMsIDB4YzFiN2Q4NDYsCi0JMHhlMzFjZmJlNCwgMHg1NGY0YmM0YiwgMHhmNTJlZDFkOCwgMHgwM2Y0MTM2NCwgMHgwMjc2OTM0NCwgMHhjZTk5MzVkZiwKLQkweDE2YjM2MDdiLCAweDFlYTA5MTYyLCAweGJiZTBiOTY1LCAweDMzN2YwMDhmLCAweDkwYzMzNDc5LCAweDAwOWY1ZGJmLAotCTB4YWRlOTZmN2UsIDB4MjhmZmMwYzUsIDB4ZjM4MDJkM2YsIDB4ZWI1ZGIxMWYsIDB4ZjA1ZTdkNDMsIDB4NWY1ZjFiMjcsCi0JMHhhOTRmZTcyYiwgMHhmZWMyNDA1NCwgMHg3ZTlmY2U2NSwgMHhmYzhjNWU2YSwgMHhmNmI4ODEyOSwgMHgxNGRhN2YwMywKLQkweDUzZjkwMTNiLCAweDdhZTM3MTMyLCAweDE1NjgyN2UyLCAweGE1ZDEyNjdjLCAweDZhZDcyN2FjLCAweDIzYzg3YzU1LAotCTB4ZGQ1MmZhYzEsIDB4ZTQ4ZGRmY2EsIDB4YzkwN2NhMTQsIDB4MWNiOTRhZTcsIDB4MmU0YTc2OGYsIDB4MTU3NDIzZjgsCi0JMHg0NGY1MWNlYywgMHhiNGZkNzhiMSwgMHg5YWNlYjY2OCwgMHhiZmYzMWIwNCwgMHhmZGI4YjE0NSwgMHgyMTAxZjRkNSwKLQkweDAxN2FkNWZmLCAweGI1ZGE1NjI5LCAweDQxM2QzNjhkLCAweGI1MTI1NTNmLCAweDdlYTE4N2E4LCAweGY0YzA5MzUwLAotCTB4ZDAzZGY3ODMsIDB4NWYyMWY3MmUsIDB4MGJmZGMxM2UsIDB4YWFiODI3NTMsIDB4NzdkZjE0YjQsIDB4NGVhMzkxZTYsCi0JMHg3MjRiMmU1YSwgMHhiYTUwMjZkNywgMHhiOWE0N2U5OSwgMHg2YmQ2OWVhMSwgMHgzZWY5MjJkZiwgMHhiMThlMTY1YSwKLQkweGY4YTc2ZGQ0LCAweGVjZGIzYjVkLCAweDZiZWI0ZDU4LCAweDNkZDQ4Y2NkLCAweDk3ZDQwNjg5LCAweGRhNjljODA4LAotCTB4ODI5MzQ1YmUsIDB4ZjAyNjkxZmUsIDB4YjQ3ZTUyYzcsIDB4NDAxMWUyMTYsIDB4ZGEwOTgzMTcsIDB4NTkzZjU0ZDMsCi0JMHhiNmUzYTQ2YiwgMHhkNjU4YjdhYywgMHhkNThmYzFkYiwgMHg4NWZjMGUzNywgMHg2NTg4OGI3ZCwgMHgzZTczMDkyYiwKLQkweDQ3NzNkMTJlLCAweGQ0MjRmY2YxLCAweDRlMjU1ZTI5LCAweDZkZjdlMjZmLCAweGFiMGU3YmYwLCAweDNiMDUyOThmLAotCTB4ZTljYmZkOTAsIDB4ZmMwYjBjYTQsIDB4NGYyY2I5MzcsIDB4NWNiM2E5YTAsIDB4MzllYjQ4OTcsIDB4NGZlODFkNjMsCi0JMHg4YzRmOWMyNiwgMHhlN2UxZGYxMCwgMHg1Y2UwNTQ3MCwgMHhhZjIxN2I2MCwgMHhiODdjZWEwZiwgMHhjYmU2MDkyYSwKLQkweGFlZWUwZTIzLCAweDU4MjM5YzBiLCAweDUwZmU4NWFjLCAweGUwZjFjY2NhLCAweDA5MjM3YzczLCAweDJhZjk4M2ZjLAotCTB4ZGUyM2YzMDMsIDB4NDNiNmYyYzYsIDB4NzZiYzU5YjMsIDB4MWZiN2Q2ODQsIDB4NWUyOGY5Y2UsIDB4ZDMzMmYyMTYsCi0JMHg0M2JlNTUyNSwgMHhlOGM4YmZlOSwgMHgwZWRiYjAzOCwgMHhiMGM5NzUyMCwgMHg0M2NiNTJlZiwgMHg5MWZkZjBhZCwKLQkweDgxZTI3N2FlLCAweDUyMzY4ZGFmLCAweGQ2Y2I0MGZlLCAweDkyYzM4NzMyLCAweDgwZDZmYjgzLCAweDI3NDdhOWZmLAotCTB4MGUzMzkzZTQsIDB4MTE2MDZiNzMsIDB4OWNkNWZiZjQsIDB4OTZkNmE2OTYsIDB4ZmIwYzVlZGYsIDB4ZWMwOTkyZWIsCi0JMHg1YzFjYTIyZiwgMHhjMTM1OTMyOSwgMHg4YmU3ODdmMiwgMHgwOWZiZmE4OCwgMHgyMDdmYmZjYywgMHgyMTM3OWM2MSwKLQkweDc0ZjgyZTI4LCAweDcyODNkNzAyLCAweDhmZjAyZTQ5LCAweDJjZmRmM2EwLCAweGY5Nzc1YmQwLCAweGJmY2U5MTliLAotCTB4ZmY5ZjlkYjIsIDB4NzVjMzljM2IsIDB4M2U3MmVmYTgsIDB4OGJhZGY4MjAsIDB4Mjc0Y2M1ZTcsIDB4YTdjMDFkNGUsCi0JMHgwMWYyOGEyYiwgMHhiZTU2M2Y1YSwgMHgzNGMwZjkwYywgMHhkZmRmYzZlMiwgMHhhNmYwNjBhYiwgMHg3Y2MxZDc4OCwKLQkweGY1MjgyNjUzLCAweGNhNWMzYjhkLCAweGI1NWFiNGZhLCAweDllYmY0MjNlLCAweDc0ZWVmODE0LCAweDQ2YmRiMmI3LAotCTB4OTQxMzk3ZTgsIDB4ZWZhY2U1ZmEsIDB4OWNhMmIyNWYsIDB4ZTFiYTdlNGQsIDB4OTdmMDQwZjIsIDB4ODIyNWQ1NGYsCi0JMHhlNzkzYjBkZiwgMHgxODRhNzRiYiwgMHhmOWUyNmExZiwgMHg5MjFkNGQyZSwgMHhhOWE1ZGYyMiwgMHg4OTAzZGU3MywKLQkweDhkMmVmOTQxLCAweDc3Y2I1NzFkLCAweDA5YzhmYTYxLCAweGY4M2Y3NzlkLCAweGEzMmM0ZmQ1LCAweDM5ZGZhNjNiLAotCTB4MGUyMmYzYzAsIDB4NTE0NDVlNDIsIDB4NzNjY2ZlODAsIDB4NTI5MDlmOTgsIDB4MzNkMWZhMzMsIDB4ZDAwZTMxMmMsCi0JMHg4YTY5ZDdhYiwgMHgyZWI4YWZkMCwgMHhmZmYwYWNkNiwgMHhhY2U1NWZhZSwgMHg5ZmMyN2U4MiwgMHhhNjVjZjIyOCwKLQkweDNiNzM0ODE5LCAweDY0MWQ1M2YzLCAweDhmY2M1Y2Y5LCAweGI0ZjZlNWU0LCAweDdlMTI0MTM3LCAweGM3ZTgzNWUxLAotCTB4YzRkZjlkNTIsIDB4MjRmMjgyNzgsIDB4ZmEyZTY2NzEsIDB4MGIzYjZiMGIsIDB4NGI1ZmMxOGIsIDB4YjFmYTEyZTUsCi0JMHgxYzc2MDliZCwgMHg0NDJlZWI1ZiwgMHhhNjJkZDczZiwgMHg2ODNmMThlOSwgMHg1ZGEyZGNlYSwgMHhjZmQwMGE2OCwKLQkweGM1ZGQwNTVmLCAweGJiYTAxODkwLCAweDRlZDFmZjdlLCAweGRjOGZmYTAzLCAweGEwNmJlYmIyLCAweGFmYmQ3YWFmLAotCTB4MTJlOTI4ODAsIDB4NzcyNDhmN2YsIDB4ZWJiYzcwOTYsIDB4MTdkMzVjMmEsIDB4MWVmNGI4NTEsIDB4ZmVjMDNiZDUsCi0JMHhlMjA1OGFhMywgMHg1NjNkYzVlYiwgMHgxYWRhODNlNCwgMHg0ZDdlZmM4MiwgMHhkOTdlNDEzOSwgMHg0ZmY5ODViYiwKLQkweGJkMmViMzNlLCAweDlhZmVmODE1LCAweGFhNzI4MjZhLCAweGUxMGUzNmM3LCAweDBmNzg4Y2JmLCAweGE1YjhlOTNiLAotCTB4MDUzZDI5OWIsIDB4YjZiYmZmZjEsIDB4YTRmNWViMjksIDB4ZmQ3OGY5MWQsIDB4NDRiYTEwZjYsIDB4NTZmODI0YmUsCi0JMHgzYWNiYjEwMywgMHg1MmVjNmI4OCwgMHg5ODgzMjc4ZSwgMHg3ODcwNzc3YywgMHgzYWJlNzIxNywgMHhhZGIxOGVmYywKLQkweGFlMWY2ZjEwLCAweDJjODVmYzYxLCAweGEwZDdhNDc0LCAweGYyY2IzNGZkLCAweGJhYjAxNDY5LCAweGU5MmJhNWE3LAotCTB4MzNlNmJkNDcsIDB4OGNjNzNiMzIsIDB4ZjlmMDk2N2YsIDB4ODRiZDdjZDUsIDB4NmIzNzQ1ZWIsIDB4MTQ1MGExYTksCi0JMHg3ZjY4NzNkMCwgMHg3NGQ0MWZhYywgMHhjMDlhMjljYSwgMHgzOGY5OGIzYSwgMHhiZTA5NWZhMSwgMHg1ZTU1ZjAyYSwKLQkweGE1MTk0ODQ2LCAweDM5MTM5YmIzLCAweDM2NDliM2JlLCAweDhmY2U5YmUwLCAweDQ2NDEyZTc0LCAweGY3ZTcwZDhiLAotCTB4OGEzNDNkODAsIDB4ODNkMjhmN2YsIDB4YTNjYWU4MDcsIDB4N2U4MTdhMzEsIDB4MjhjZDRhZDcsIDB4NDdhMDhjNGYsCi0JMHhlNGJkNzJkMywgMHhmMmZhZmU0NiwgMHhmNDBjOGY1MiwgMHg0ZjM0OTIzMSwgMHhmODBiMzViOSwgMHhmMDBjNTc2YywKLQkweDE1Mjc0YTFmLCAweGZhMDE4OTg5LCAweGNjYmUyNTY5LCAweDhlODI5MjFkLCAweGZhZGJiZGIwLCAweDEyM2E1ODY2LAotCTB4MWVmN2RmZmMsIDB4MTEyNjBiZDMsIDB4ZWZkMWJmYWEsIDB4ZjRjNGZmM2EsIDB4MTJkMjgzOTcsIDB4YzdhYTEzYTQsCi0JMHhlNWZkMDQxZCwgMHhhZmIzMGQ0ZCwgMHg0MDZkZDIyNiwgMHgxMjhiMmFiZiwgMHg5NDUzZTNmZiwgMHgxMGY2ODlmNSwKLQkweDAxM2NjMGZhLCAweGJkM2MzZjY3LCAweGE0Y2Y1ODVhLCAweGE3M2Y2NTVjLCAweGM5NDQ1ZmUwLCAweDI1YzhiMmJmLAotCTB4NzQzZjA3NjYsIDB4YmZiMDVlZjgsIDB4NWM5MjU2NjMsIDB4OGQ1MjA3ODgsIDB4NGMzODMxY2YsIDB4ZjEzZWE1YmMsCi0JMHhkN2RiZjczYiwgMHhkYmYxODYyNywgMHgzZGI4ZWFmNywgMHhjNmIzYTJhMCwgMHg2Y2U3NjdjMywgMHgxNDdhMDEyMCwKLQkweGQyNDZlMmU3LCAweGY4NTBhNzJjLCAweGYxNjNiZjQ5LCAweDBlODExYjkxLCAweDE5OTQ1ZDI5LCAweDNiZTgxZTQ5LAotCTB4YzNmOTk4YTQsIDB4NzQxMGY5YzQsIDB4MWI2YmNhNTcsIDB4MjQwZDlkMDQsIDB4NmVjZTgxMDMsIDB4N2Y0Mjg4ZWEsCi0JMHg2ZjQwOGRlOCwgMHhmOTBiN2U5NCwgMHgwYjllNDJiYywgMHgyY2I1YmRiZCwgMHhhNGIyYmU4NCwgMHgzOWViOTQxYywKLQkweGFlNDI0ZjQwLCAweDhmMWM5NzBmLCAweDdhMDU5N2RmLCAweGY2ZjUwN2JiLCAweDQzNmE3YTIwLCAweDNkMjg5MjdhLAotCTB4NDQyN2JmYTEsIDB4NTVkYjJhNWUsIDB4N2VmMDI2ZjQsIDB4ZTVhM2ViOWMsIDB4ODVlZDE5YTQsIDB4NGU0Y2QxYTksCi0JMHgzZDk5YWFmYSwgMHhkMjI0ZDk0ZiwgMHg4YzM1ZWJkYiwgMHgxMzg4YWFkZSwgMHgyODljYWRlOSwgMHhhOGQyYTRlOSwKLQkweDkxZTlhYmFjLCAweGE0YTM1MTdlLCAweDliZDIzNzM3LCAweGQxMjM0ZTlhLCAweDM3YTA0MGRiLCAweGFmZTMyZjIxLAotCTB4MTM3YjZmNGUsIDB4ZmYzM2ZmNGQsIDB4ZWRiZDI4NWEsIDB4NzZiOTJjNGQsIDB4NmM3YzEzN2EsIDB4ZDJhNTk0NDcsCi0JMHhhOTdjNzIwNCwgMHhmODYxNzI4NCwgMHg1MGFkNDFkMSwgMHg4NTkwZGExZiwgMHhhYjBlZTdmYSwgMHgzN2I2MDBlMywKLQkweDJlZTJmNmIzLCAweDBlZjkwY2E3LCAweDdiNzgyYjM5LCAweGVhMTJhYjk2LCAweDNiNjkyYjRkLCAweDM4ZTRiYTlkLAotCTB4NzQxODg3Y2IsIDB4NWMyZjZiM2YsIDB4MGNjMDdjZGQsIDB4MWIwZjJmN2UsIDB4YjVmM2Y3YmYsIDB4Zjc2ZDJjNzIsCi0JMHhjYmUzZTVhZSwgMHhkZWExMmFkYiwgMHhmZjhkOGViNCwgMHhjMzI4ZTIwYywgMHhkYmNhOGYyMCwgMHhiNzVmYmYwYSwKLQkweGNjYzFjYjIxLCAweDhlZjdhNjU3LCAweDIxZGRmYmUxLCAweGUzODAzY2VkLCAweDI1YjhkOGRhLCAweDA0ZDE4ZDg3LAotCTB4Y2ZhNjZjZWQsIDB4MzlmN2NjZGUsIDB4NjdkYjMzNjYsIDB4NGNiNzQ3YzIsIDB4YTdiZjgzYjAsIDB4ZDhmYTgzY2YsCi0JMHg1MmZhOWFhNywgMHhlYzExNzNlNCwgMHgyZGE5NzJkNCwgMHhjMGYxY2EwMywgMHhiYmMwNjRiZiwgMHhjZDljOWQ2MywKLQkweGU5NWI2OGUyLCAweDY0NGFiZTI3LCAweDdmMTEwZTdlLCAweDc1NzczODgyLCAweDU1ZjM3ZTkwLCAweDhhMTNmMzIyLAotCTB4ODIzNjQ5N2UsIDB4Y2M3OTEyZmEsIDB4ODg4ODc2OGMsIDB4MjExZWY5OGYsIDB4ZDg0ZjljMTIsIDB4MTQ4YjhjMjMsCi0JMHhkMzlmMWIyZiwgMHhmOGMzZmE4YywgMHhlNjRlMjI4MSwgMHhkZmE3Y2VkNywgMHhjNWZjYmMyZCwgMHg5ODdlNzBiOCwKLQkweGJkMzIyNDdmLCAweGRiOGYwY2U1LCAweDdhOTdkZjhiLCAweDA3N2YzYzU5LCAweGMwMWE0OTEwLCAweGQ2MjZmNzU1LAotCTB4MmIwODQ0YWQsIDB4YmMwMzI5MGYsIDB4NDZjYzdhYjIsIDB4YThlYmM3ZTksIDB4ZDM0NGJmOTEsIDB4NzA4MGY1YWMsCi0JMHhmZjMwOTRjYiwgMHhmMTE3NzI2OCwgMHhhZTg2YzVjNSwgMHhmODk2YmM3ZiwgMHgwODdmMmNmNCwgMHg1NWI4YmZkNywKLQkweDg0NDNmOThmLCAweDM4M2JiNWYzLCAweGMxZThjOGZlLCAweDcyYTdjZTc4LCAweDcxMjRhNTNjLCAweDE5Mzg3ZGJiLAotCTB4MGVlYTdjMGUsIDB4OGQzYmI3OGUsIDB4YTcyNjNhY2QsIDB4ZmUyYTc0ZGIsIDB4N2EwNDkxOTEsIDB4ZmE4OGE2Y2YsCi0JMHhjNTVkYjJiOCwgMHhlZmYyOTY1ZiwgMHhmODdhZTYyZSwgMHhmZTg3ZDIzMiwgMHgxZWI5NGZjMiwgMHhkMzEzNjY3ZSwKLQkweGVkMjJlZmMzLCAweDdkZWMyZmU4LCAweDBkOWRlOThjLCAweDJmNDA3Yjc0LCAweGJlNGFiY2NiLCAweGIyOGNmNzUwLAotCTB4YWNhZWQwZGUsIDB4MGViMTUyMzcsIDB4YTg3NTM3ZjMsIDB4ZjMxZTRlZjgsIDB4NmE2ZWY2YzMsIDB4ZGJmZjA1MjgsCi0JMHhhMjhmNDdkMiwgMHhlMGE5NzdkZiwgMHg5ZjI1NWUzMywgMHhjNjdlZTQyMSwgMHgxZWI5MWU2NywgMHg3YjZhM2ZmZCwKLQkweGQ0ZTlkODVkLCAweDA5MjliZTNlLCAweDk5OTY5MGUzLCAweGNjMzdhMGY1LCAweDBmNzk2MTg5LCAweGY5MWYyOWIyLAotCTB4ZjY4OGQ5ODIsIDB4YTBiZTI0NzIsIDB4NWU4NDgzYjYsIDB4N2YwZmFlNDIsIDB4MzIwNGE4NWUsIDB4ZTA4MjNlYzIsCi0JMHg1ZmVmODJlZiwgMHhiNjUyNWVjMSwgMHhlYzIzZjBhYiwgMHgzZjFjMTk5NSwgMHhlMWZlMjg1MywgMHg3NjEyN2YzYiwKLQkweDlmODYzMmQyLCAweDA4NzVjNGE5LCAweDVkZGVmM2YwLCAweDZlYzIzZjBjLCAweDkyNzZlNmZhLCAweDkzYjYwZTUzLAotCTB4YWQ3NWJkODQsIDB4ZWZkYTkyZjYsIDB4Y2Y1YmNlMmUsIDB4ZGFjZjYxMDAsIDB4MDI2ZDllZDEsIDB4ZGRmZTUzNDAsCi0JMHgxM2M0ZjdiMCwgMHhlZmQwMjQ1NSwgMHg2ODcxMGI1OCwgMHg3MmY1NDE3NSwgMHg2NmI1N2ZhNSwgMHhjODUyZTlkMiwKLQkweGFlODhjYzlmLCAweDQ2ZTAxN2I4LCAweGZmZDExMzNhLCAweGVjMmM5MGQ4LCAweDM0ZmYzNjI3LCAweGUxNzVjZjllLAotCTB4ZGIzOGFjY2IsIDB4MjljNGZjOTUsIDB4ODM2Yjg2ZjMsIDB4NmQ1ZWUzZWMsIDB4NDNkODJjNWYsIDB4ZmMyNDk3YmQsCi0JMHg2MWFkZDQyZSwgMHhmMTgxNTFlMiwgMHhlODdjNzEwYiwgMHhmN2JlYmJmNywgMHg0ZjczZTA2NywgMHhmMTNjNjBjNCwKLQkweDJlY2M5N2MyLCAweDI4NzliMGJjLCAweGUzOWYxNWU2LCAweDg3MDE1NzcxLCAweDc5OWY4NzI1LCAweDcwZTcwZmQ1LAotCTB4MTBlMTgyZTUsIDB4YmM5M2FlYmYsIDB4NmRhNmVkNWYsIDB4OWZlZThjMjMsIDB4ZDNhZGY5YzMsIDB4YmU4Y2Y0ZjgsCi0JMHhlYzQ0NWM1OCwgMHhkM2RmYjIzYiwgMHhmZjRmN2M4MywgMHg3ZGJmOTMxYSwgMHg4OWU2MzQ1MiwgMHgwNDg3ZGZkMiwKLQkweDI3MzY4N2M3LCAweGYwODFmOGIzLCAweGY5MzkwOWM3LCAweGU1NmY1ZTQ3LCAweGEzNWE5ZWY3LCAweDNmOThmZWM0LAotCTB4ZjNiYzUyZTIsIDB4MWZmZjgwMjksIDB4NTdlMGZkNjEsIDB4ZmM4NzQ3N2EsIDB4MTBlNmZjMWMsIDB4OTk1MmE0YjcsCi0JMHhkNzQyZGJhNCwgMHg2ZGY5ZjEwNSwgMHhkZjlmMTBkNywgMHhjNWU0YzQ5OSwgMHhiMDhiNGEzOSwgMHhlNzM2NDViZSwKLQkweDMzYmRmMDhiLCAweDg2NzkwZTNjLCAweGM0Y2ViMWM3LCAweGJlZDZiOGIyLCAweDdjYWNmZWZlLCAweDIyNjc5NzliLAotCTB4YmY0NWQxYzQsIDB4YWU4YzViOGYsIDB4M2VkZTk0MzUsIDB4MzVhZTIxNmMsIDB4MWZkODNlNTQsIDB4ZGU2MzM0MzEsCi0JMHhhZmI2MmNjZiwgMHhjYzU2M2RkZSwgMHhmZWUzMTUxMywgMHgwZTdlNTQ5NCwgMHhkNWFjZjFkNiwgMHg4NWNhMTg3NSwKLQkweDM0N2JjYTZkLCAweGQ0MWZiMGJkLCAweDdhYmVkODM3LCAweGJlMjk1OGEzLCAweGVhYTRhN2Y3LCAweGRlY2Y4MDczLAotCTB4NjdjNDdlZTksIDB4YThhNDdkN2YsIDB4ZGVmZTcwYmIsIDB4NWZjOGZjOWIsIDB4MzQ1YmY3MDksIDB4MjkxOGYzZjAsCi0JMHhmOGI1NzYwZSwgMHgzYzhlM2E5NywgMHgxZTZmOWM1YiwgMHhhNmM1OWU0NywgMHgxYzc5YjMyMiwgMHhhYzkxOGU3OSwKLQkweDczZWRhNzRkLCAweGZmZDE5MzNiLCAweDMzZDYzNGJlLCAweGY2NDcxMTQ0LCAweDc4YTM3Y2M0LCAweGRlYzdhMGJlLAotCTB4ZWMzODgxMDEsIDB4MGUyMGRmNjMsIDB4M2JlOTM5N2IsIDB4NGU1ZWMzOGYsIDB4NTU4NzEzMGEsIDB4MDI1ZmU5YzcsCi0JMHhjMDE3NDFiZCwgMHgwNjE2ZGRjMywgMHhiZWI5MmFiNywgMHgxN2EwZmMxMiwgMHg4ZmNjMTIxNiwgMHg4ZmQ5MjQyZSwKLQkweGVjM2QwNjhjLCAweDkxNzg4ZTg4LCAweGZhM2QzMjZmLCAweDc0NGI3ODZhLCAweGUxNWQ4ODY5LCAweGY2MjY4ZWJmLAotCTB4YmFhNGZkYTAsIDB4NmEzYThhNmQsIDB4ODc3OTQxZTYsIDB4MTRkMzRiZTksIDB4NjczNDA3ZTMsIDB4NWMwZmZhMmIsCi0JMHgzZGEyYmQ3OSwgMHhhOGE0NTNjYiwgMHg1MWJiYWNlNywgMHg1YjcwN2ZkMSwgMHhmNDNlYTI4NSwgMHhmZDE0NWJkMSwKLQkweDI4ZDZmM2FmLCAweDdmZTAxN2VhLCAweGM4YzlhZjkwLCAweDY2Nzg2ZWQ3LCAweDkyZmM2Mjg2LCAweGY1MmM1ZTM3LAotCTB4N2NiOWI2YzEsIDB4OGI3MmU1NmUsIDB4Nzk1ZDljNzgsIDB4MDJmZGNjYTUsIDB4OWY2ZmM4ZmIsIDB4Zjg5Nzk4YWYsCi0JMHgwYTU0OWYyNCwgMHhlZmY2NDk3MSwgMHg4N2JiMmM1YywgMHhjNThiYjBiMSwgMHhkYzc1ODYwNywgMHg2ODRlZjhhNSwKLQkweGEzMmVkMjVjLCAweDkxMjFkNWRlLCAweGY4ZDBhNGM3LCAweDg3Y2VkMmU0LCAweDhhZGU0MmQ3LCAweGZmYTE3ZjVhLAotCTB4YTBjNWI1NzIsIDB4M2U2MzQ0ZWYsIDB4YTk5ZjVhYTQsIDB4YTAyNzM2NGEsIDB4ZDI0NjkxZGUsIDB4ZTlhYjVkMTgsCi0JMHgwZjBmZDRjMiwgMHg0ODUxZjdiOCwgMHhiYTMyM2M4NiwgMHgwYTE3NDE1OCwgMHhhMWY4NTFmYywgMHg3NmMyZWI3ZiwKLQkweDJkMzVlNjMzLCAweGQyMDE2Mzc5LCAweDQ5NDUyMWEzLCAweDI1NzY1MTE3LCAweDJhZTRjNDVkLCAweDUwZWNjMmU5LAotCTB4OTk1YzQxZDIsIDB4ZjBkNDBlOTIsIDB4NzQ5NTNhYjYsIDB4YmZmNGZjNDEsIDB4N2UzYmMwMmIsIDB4ZDQ2ZTkyODIsCi0JMHg3ZDIyMmVmMCwgMHhkODBmMzE4NywgMHhkZjAwMzkyYiwgMHhlYjJmNzg2YSwgMHhiYWZiODJkOCwgMHgzY2I4YmU5YSwKLQkweDM5MTdjNzk5LCAweDc0MWY4NzdjLCAweDZlMTA5YWI2LCAweGY4NDkzZjJjLCAweGVlZGMwYzAzLCAweGJmNGEwOTI2LAotCTB4NTZhYmQwOTgsIDB4OGRiZDczMjUsIDB4ZjJmYzIzY2YsIDB4ZGEwZjI1NmIsIDB4Yjg3MWZkZjEsIDB4MmZhNjVmMzIsCi0JMHg2NmY5ZWMwYiwgMHhhZTQzZmNjMiwgMHhjMzEzOTIwNywgMHhmN2YxMTdmYSwgMHgwMTQ1ZmU0OCwgMHhmZjVjYTlkNywKLQkweGZmMmMyM2FjLCAweGYzMTQ3OGU2LCAweGJkNWM3ZDBiLCAweDhiNDJmZDBjLCAweGQxZWEzMzQ5LCAweDczYzY2YWU3LAotCTB4ZmIwN2ExZmYsIDB4MDIxOWUxYTksIDB4NTI5ZDM1M2YsIDB4ZjkwNDk1N2QsIDB4MWFhMmVmNWYsIDB4MTQyNzI2YjIsCi0JMHhlNGE3NTI5ZSwgMHg1MzNkYzMzMywgMHg4MWU0MjlkMiwgMHg1MDEzZGQ5YiwgMHg4NGU4NTdmYSwgMHgxMmJmMzA1MiwKLQkweDVmOThiMGZhLCAweDMxZjA0ZmMwLCAweGZjMDFhZjMxLCAweDU0MGU3MDMyLCAweDJhZTQ4ZDdjLCAweGM3ZjZhMmYxLAotCTB4OTYzMDMxYzAsIDB4ZWM1YmM3MDYsIDB4YTMzZTM4MjQsIDB4ZmMwNGMzZjYsIDB4ODRmZWQ0MmYsIDB4YWNjMGUxNzgsCi0JMHgzYTA3Yjg1NiwgMHgzZjQ0ZTJkYywgMHg5YWU5MDk1ZiwgMHhmZjBiYmYwOSwgMHhhZTIxZmEwYiwgMHg4ODdlZmQyMywKLQkweDJhZWE3Mjg4LCAweDFlMjlkZGYxLCAweDU2NzhmZmM5LCAweGM0NTc1YzY4LCAweDNlMTgyOTg5LCAweDNjMWQzM2ZhLAotCTB4ODAwZmIyNWEsIDB4MWRlY2Q0NzUsIDB4MTQ3NDA4OWEsIDB4OWM3NDk3ZWEsIDB4MjNjZTg1N2MsIDB4YTFlMmZhNmIsCi0JMHgyODI0MTU1ZiwgMHg1ZjdkYzUwNywgMHg5ZmI4ZmM5NywgMHg4MWYzODkzYiwgMHg4ZGRkZmJlMCwgMHg0Y2RjN2RhNCwKLQkweGY5NTMwN2Y0LCAweGYzMjUwYjE4LCAweGI1MGU5MTViLCAweDdmNDVhZGRlLCAweDA0ZWU4NmIxLCAweDA0OGViZGU4LAotCTB4MDJiMzNiYzUsIDB4NDM5NzU4ZWQsIDB4NDc5YWQ3ZWIsIDB4YzJjNTM5MzMsIDB4M2U1ODA5ZjMsIDB4NGZmY2UxMjgsCi0JMHhlZDkxOTFkOCwgMHgxNmZhZTUzNSwgMHg0OTY2MTY5OCwgMHhjMTA1ZjdmNCwgMHg3NTg2YjhlYiwgMHhiODA5N2M4YSwKLQkweDkwNzEwYTI3LCAweGQ3MDQyOTgxLCAweGM3NmM5NWQzLCAweDRmYTIxYmRmLCAweDZlODRlYmJkLCAweGMxOTk1ZGM1LAotCTB4OWU5MzZlN2EsIDB4Yjc2MDM2MWEsIDB4NzE2MDY0YmYsIDB4ZmVhNTc2Y2QsIDB4ZjRjMjlkMWMsIDB4ZTA3MGM4ZTAsCi0JMHhiYjJhNTlmOSwgMHg4ZjdhNmFlNiwgMHg0YWVhY2ZjOCwgMHhmN2Q2MjhiNiwgMHgzNjJiOWM2MCwgMHhjMDZmN2U4NSwKLQkweDkyYTdmZjQ5LCAweDRhYmUzMDI2LCAweGM0M2NjNmVlLCAweGRlMzIxZDBiLCAweDg5YmM2YWE3LCAweDNkYzY4N2YxLAotCTB4OWVhMTFlMzIsIDB4MTdkZTAzNGUsIDB4MDA3MWRhNWUsIDB4MTZlZWE1ZjUsIDB4N2VhODgwY2EsIDB4N2U4NWI2NzIsCi0JMHhlMDE1ZjA3OSwgMHgyNDZmZGFhZiwgMHgzMWU0NDE3YiwgMHg3ZWUxNDkwZCwgMHgxMDUyMDI4OCwgMHhmMTA1MDc5YywKLQkweGYxYjA5NGZkLCAweDI3ZmNmZWZmLCAweDkzZTczYjY1LCAweDFjNWU3MjU1LCAweGNmZWRhM2RjLCAweDY1ZjZkMTZiLAotCTB4NDdlMTA0ZDYsIDB4YjhhZjhmYmQsIDB4NzNhYTUyNWQsIDB4NzBhMTRmMGQsIDB4NjMyYmEwZmIsIDB4MjU1N2NjMjMsCi0JMHgwMzRlMWU3NywgMHgxYzkwYWNmOCwgMHg2MzFiN2YxMCwgMHgwZDFiZjc2MCwgMHg3MzQ3NzJmMiwgMHhmNDM3OWQ5MCwKLQkweDcxMDVkOTVlLCAweGVlMmJkM2NlLCAweDY5ZmRjMWIxLCAweDQ5NTBlZjMxLCAweGE4ZjBmNzgzLCAweDBmZmVmMTg1LAotCTB4MzZlZTIxOGIsIDB4ZDY5ZWIxY2IsIDB4OWQ5ODFiNjYsIDB4MThiZGY1OTksIDB4NWYzZDBlNWYsIDB4ZmJiM2QzYmYsCi0JMHg2NmVjYmE1ZiwgMHg2N2QwNTdiYywgMHg5NzZmZDE5NSwgMHg0MGIxOTMyMCwgMHhlMmJkNjIxNywgMHgxZGY4YTJkZSwKLQkweGZlNDM1M2VlLCAweDRjN2RmOGE2LCAweGJiZjBkZjZiLCAweGIxNGE2OTY5LCAweDE4N2JkZTJiLCAweGJjMzdkOTUzLAotCTB4YmI4MDE0ZDksIDB4NGM2YWQ3YzgsIDB4ZmQwNWFmZDQsIDB4ZWFjOGM3YTgsIDB4N2E4Yjk5YzQsIDB4M2IyMzBhZTQsCi0JMHgzZGI4YTc1ZiwgMHhiMGIwNmE3NiwgMHhlMGU2N2RhNywgMHgyOGM2YTgzYywgMHg5M2U2MWM2NywgMHhiMDEzMjNiZCwKLQkweDM4YjRiZjNiLCAweDVmYjhhY2UzLCAweGMyYzc5YjBiLCAweGY5ZTFlOWU2LCAweGFiZGUyYmMzLCAweGIxMmQ3YjQwLAotCTB4NTMxZTdjMzUsIDB4YmJkMzBhNDMsIDB4OGFjYTJmZWIsIDB4YWQ3YWE2M2MsIDB4ZWE5MWYzMGYsIDB4YmYxNWVhMmYsCi0JMHhlMmUxNDg3ZiwgMHhmM2VhMDQzMSwgMHgwNzFhMGNjZiwgMHgxYzQwNWJlYiwgMHg4MmZmYTE2YiwgMHgxM2M0MzE3NSwKLQkweDNjODg5N2E0LCAweDdjM2QzNTY2LCAweDY4ZGZmMWNkLCAweDMwZWQxMmQ1LCAweGJhZWMwZmJjLCAweGZlNTdiZjUyLAotCTB4NWZiZDg3MjksIDB4NDY4YTQ4ZjMsIDB4MWU2MWExZTQsIDB4MzAzN2I1MzEsIDB4ZjdlZWE3OWUsIDB4N2NlYTI5ZWYsCi0JMHhlN2RlM2YzMywgMHhkYjM3Y2ZlYywgMHg3N2M1N2U1MywgMHg5NjJmMWExOSwgMHgxYmMxZjIyYiwgMHhkNzE4NzhlOSwKLQkweDJhYWM3MTc4LCAweDRiY2Y5YzFmLCAweDAyOWJiM2U3LCAweGUwOTE2Njc5LCAweDViMzI3NWZmLCAweDkxZTQyMzU3LAotCTB4Y2VmZjA3YzUsIDB4OWRmMDI5ZTgsIDB4ZTYxNzllMDQsIDB4ZjhmMzg1OGYsIDB4Zjc4Yzg3NmMsIDB4YTIzZDlmOWQsCi0JMHhjYzM1YjA5OSwgMHg1YzM5M2JiYSwgMHhlMmQ0NGZhZSwgMHg0N2MxYjkzOSwgMHg3Y2MyNWI5YywgMHhmNzEzZjQ1ZiwKLQkweDNjN2RjNDE5LCAweDU1NzZmYWY1LCAweGZhYzBlN2Y4LCAweDdlNjU4YzQ3LCAweDJmM2NmNTYxLCAweDc1OGFmODcwLAotCTB4N2MzMWIyZWYsIDB4ZjE0YWJlMzQsIDB4MmMyOGY5ODEsIDB4Y2Q5Nzc3NGYsIDB4ODNmOTE4YmYsIDB4NGZlNzg5NDUsCi0JMHg3NjNhZDk5MiwgMHhjNGNmZTJkZCwgMHhjYzg5OWNmYywgMHgwZjQ0OGVhZSwgMHg3ZmRkNThmNywgMHg5YTZlM2Q0NSwKLQkweDQ4ZDU3MjA5LCAweGIyNTliNmE5LCAweGFiYjc5ZDA0LCAweGVlMDA0M2QxLCAweGExYWYwMmIyLCAweGJiNjNkNzcwLAotCTB4NjNmM2Y3OTgsIDB4N2U3ZWRjZWMsIDB4NjE1MzlkOGMsIDB4YThmZTdjMGYsIDB4ZjQwMWY5OGMsIDB4YTBhNDliNDAsCi0JMHgwOWNmZmIzYywgMHhkZTdjMGI4YiwgMHgzZmZlYTEyNiwgMHg0YWM4NGRkZiwgMHg2ZGU2NzdjYSwgMHhlMmZhNjNhYiwKLQkweDc1MzFjMzUzLCAweDlmYmY3ZTA3LCAweDU0Nzk5N2YyLCAweGNiNGNkZGRlLCAweGYxNTQ2YmY5LCAweDA4NTc2ZTYxLAotCTB4ODM3MGJjMzksIDB4MWIyMWRlY2EsIDB4M2NjNjRiZmUsIDB4Mjc5NDY2Y2YsIDB4MWNhZTdmOGIsIDB4YTRkYjc0YmYsCi0JMHhlYTdiZTBjZiwgMHg0YWZhMzYzOCwgMHg3MWZjZmRhOSwgMHg0YmNiZDcwYSwgMHg4M2M4Mjk0OSwgMHg0MmZhOWZiYiwKLQkweDdjOGY2YjFmLCAweDdlNTBjZTFlLCAweGYwMzA2ODNiLCAweGRkOTYyMzVkLCAweDJmMmMxNjJkLCAweDQxYmIzOGE2LAotCTB4ZGQ1M2U4M2UsIDB4N2JkN2MwYmQsIDB4YmFmMDYxZGYsIDB4Yzk4MTdmNTAsIDB4MzliY2I4MGIsIDB4ODRiOWY4MTIsCi0JMHg5MzMwY2VmMiwgMHg4NDFmNzljNSwgMHgyZTE0ZWM3YiwgMHhmYjkzMDMwNiwgMHgzNWZkZGM3MiwgMHg1ZTk1NzE5MywKLQkweDdlMTE4YmE0LCAweGNhMmIxY2NiLCAweGQwMGE0NzIzLCAweGUzNzNjMjdmLCAweDEzZmMwMDI3LCAweGMyNzE4YjlmLAotCTB4N2I5N2Q2YmUsIDB4YzM3ZjA2OWYsIDB4ZThkMTU1ZmEsIDB4NTgxYTM1ZmYsIDB4N2I2NzM5OWMsIDB4YzBlYzA2YjksCi0JMHhmYjQ5NzZlYiwgMHhkNGQxZGZjMSwgMHhkZTE3MmFiOSwgMHhhM2Q5MzAxNywgMHhhZTIxM2YzMSwgMHg5MzE2NWU3MywKLQkweDA5M2JlYzczLCAweDgwMWRhZWFkLCAweDU3YjgwNGNmLCAweDNlYjVkNzQ3LCAweGY4YzI5YmNiLCAweDFhODNkMzM4LAotCTB4MjU3YmNjMzksIDB4M2RjMDdmZmIsIDB4MzIxYmNmNmIsIDB4YTBiYzgzZGUsIDB4ZDdmY2Y5NjUsIDB4OTE1Zjg2MTMsCi0JMHgwZWRmMDUwZiwgMHgyOWJhZjdkNiwgMHg0MGQwYzhkYywgMHhjOTc2ZmFmZCwgMHg3N2M1OGJhNywgMHg1MTVlMzAyNCwKLQkweDM0OTdkYWJmLCAweDZmZDFlNDEzLCAweGU5ZWYxOGI0LCAweDUyZWZkNzVmLCAweDIzYWUyMDJiLCAweGM5NGNkMGU0LAotCTB4NWM0N2ZjYzIsIDB4YzQ0ZTlkOWYsIDB4YWExNzE2M2YsIDB4OWQzMjc0ZTUsIDB4NjMzM2IxZWIsIDB4MTNlNzdjMTgsCi0JMHg5YjhjMjY0NywgMHgxYWIxMjQ2MSwgMHg1NjY2OTQ3YSwgMHhmZWUwOTdiNiwgMHhkMDU2NzRlYSwgMHgyMzdjNDQwNywKLQkweGRlMTExZWIyLCAweGI0ZjhkM2VmLCAweDk0YzdkZDk5LCAweDI0YzA4NmZhLCAweDcyYTdjMTY3LCAweDNhMzdmMzg1LAotCTB4YzY5ZGM5OTUsIDB4NGI4ZmNjMjEsIDB4YzQyNzExMDYsIDB4MWQ1ZjFhZDMsIDB4NzJlYzA1YmEsIDB4ZGI4YjM0NDMsCi0JMHg4NDY0YmU1MiwgMHg4MTBlNTZmNywgMHg1ZWZiYTZiYywgMHg3YjE0NGFmNiwgMHhjN2RjNDMzZiwgMHhlMTBiMzhiNiwKLQkweDRkNTM2MzdlLCAweGI3ZGUxMTQ2LCAweGVmODdkOTNhLCAweGZjZThmNDIwLCAweDI5N2U3ODk5LCAweDRjYTg5MWJmLAotCTB4YjZkMzczYmMsIDB4Y2U5NGI1NWIsIDB4M2VhOGQzMWIsIDB4MzY2YmViNDYsIDB4MGI1NWJjZWQsIDB4ZmRiMmU0ZjcsCi0JMHhmZWI0MzU4YiwgMHg1OGI3YTZmYywgMHg0ZmZlZjVmYiwgMHhhNmYyZmVhMSwgMHhjOGJkYWMxMywgMHhmNWE2NThiZiwKLQkweDYxM2U5YjYzLCAweGE0ZDA2MGVkLCAweDRkOTdmMjExLCAweGU4N2FiN2RkLCAweDVjYWQ2N2ZjLCAweGYxZjg3MWRmLAotCTB4ZGVlMzZhMWUsIDB4N2Y2MDlhYTEsIDB4OGNhOTliZTIsIDB4NjI4ZDlkNWYsIDB4OTE2NmNlZmQsIDB4ZWYwMDM1YjksCi0JMHg1ZmZkZjBkYywgMHgyNGYwZDU0OCwgMHhjNTJjMzY4ZCwgMHg5Mjc4YzU3ZSwgMHgyMmRjN2UxMiwgMHhiZjE5NmUzZSwKLQkweDg2MjYzYTg3LCAweGYxNjI4YmFjLCAweGM1MmM0ZjI5LCAweGExY2VjMWMzLCAweDk4OWI1ZjE4LCAweGYzNzBlMzZhLAotCTB4NjIyNTNiZTMsIDB4MzE0ZjAxMWUsIDB4NWRlZWY4OWYsIDB4YmU1OTk3MjAsIDB4OWU3MDZkNWEsIDB4N2YxY2RkZmEsCi0JMHhmMDZiM2JmNCwgMHhlYzljODMzYiwgMHg0NjRkNjZmZSwgMHhlMjhmZTAyMSwgMHhhNmYxY2I0ZCwgMHg3Yjg5YmMwNSwKLQkweGI1YWYzMGRmLCAweDcwZmZmOTAwLCAweGJjMWY1YmYwLCAweDA1NjdmYjQ0LCAweDkzYTZhZGQ2LCAweGE3YzY1NDk2LAotCTB4YjhiMmI1OTcsIDB4MDczNTlmNjIsIDB4MGM0YzY5ZTksIDB4NThhMmY3N2YsIDB4MWM2MzhmYjksIDB4NWFhNjZmMGUsCi0JMHgwMTA3M2RmOSwgMHhiZjA5NjRhZiwgMHg5OGUxY2FkMywgMHg5MzUyMWZlMSwgMHhmZGY3Y2RmZiwgMHg3N2NmNWYzMCwKLQkweDdjMjBlZmJkLCAweDhhZmRlMTM5LCAweDZkZDcxZDgzLCAweGIxYjFmYjY1LCAweGNmNGE1NGJjLCAweDFlZjNkNDM2LAotCTB4NzY3N2NjNTYsIDB4MTk3YzZhOTUsIDB4NWZiMDkwM2QsIDB4N2Y4ZTBlNWIsIDB4MjA3N2JmOTAsIDB4NzE4MmYzZGUsCi0JMHgzZjRjMDU1OSwgMHhkYzU1YmQwNSwgMHg5YjllMjdkMywgMHhiNGZmYjA0OSwgMHgzYjdlM2VmZiwgMHhkODFiMzdiYiwKLQkweDdjYzVhZGU3LCAweDRmYmUxNjlmLCAweDU3YTdkYjBiLCAweDc4ZTRhZjQxLCAweDczNTRlNjVmLCAweGMzZjcxZDI4LAotCTB4YmNiZTdmYmYsIDB4ZTI5ZjNlMjIsIDB4MGY5Yjg3OWMsIDB4YmMyNDc1Y2UsIDB4ZjFhZWZjMWMsIDB4ODJhOWQ2MjIsCi0JMHg1NTljM2Y2NywgMHg4NGYwMTNlYiwgMHhmMmUzOGRmMywgMHhkNjI5NzQ5NCwgMHhmM2E0NzJmOSwgMHhiZjJkZjU5ZCwKLQkweDM1YzZjZTU3LCAweGY3ZTU4MGZjLCAweGFlOTJiYjEyLCAweDY5NjU3NjFiLCAweGM2MmU3ZTIwLCAweDJlY2YwM2U1LAotCTB4M2ViZGY4MDksIDB4NjA3NmU1NGIsIDB4OTA4OGM5MDYsIDB4MzUyZTc3OGYsIDB4N2YwY2JmYmMsIDB4YmQ4MWRiNTcsCi0JMHhhY2VmOTY1NiwgMHgyNmY0MDdmNiwgMHgxMDljYmEzYSwgMHhlZWNmM2E0NywgMHhmOTUyOGY2ZiwgMHhiMjllMjAyZiwKLQkweDE3MTgxNGQzLCAweGZhY2EyZjkwLCAweGJmMDYzNGM4LCAweDFmNGJmZjUwLCAweDM2MmQyZmRlLCAweDc3NjhiYzU0LAotCTB4MzFlZWJiNTAsIDB4YmZjMDZkY2QsIDB4ZWUyYWUzOGIsIDB4OThmNWEyYzksIDB4YzA2ZGRkMzQsIDB4MmJkMzhiYmYsCi0JMHhmY2EyYzhiZSwgMHg2N2E2OWNkYywgMHhiZTJhMWJmNSwgMHg2M2ZhODZjOCwgMHg4YzdmZDY3YSwgMHhmN2UwNDVmMywKLQkweDZkYmZhM2M0LCAweDhmNDA2YTZjLCAweGIzYjM0ZDg4LCAweDFhOTU1M2ZiLCAweDVmYWJmZjdjLCAweDAxOWRmOTdmLAotCTB4ZDcwMTE3ZjUsIDB4NDFiMTY1NDgsIDB4NGUyZTFjZDMsIDB4ZTgyNjljOTUsIDB4Y2ExM2M1ODEsIDB4OTBlZDdmZTAsCi0JMHg3Y2VkYzRmNywgMHhlNzYxNTZiZiwgMHhmYmIyYzZmNywgMHhmZWZiYmRiNywgMHhiMjI3Zjc4NiwgMHg2OTE5ZGNkMywKLQkweDMxNGQ1ZDc0LCAweDY4YjI3M2RkLCAweGZiY2M3NTdkLCAweDljOTJhZjE4LCAweDNmMDEwZjU0LCAweDY2NDJkZDg3LAotCTB4ZGQ0YWY1ZDEsIDB4MmZhMDVkZWIsIDB4NDYxY2JiOTEsIDB4ZmI5NWMyMmQsIDB4MzE0ZGUwN2QsIDB4NWU1N2JmMGEsCi0JMHhlOTdkY2RmZCwgMHg1ODJlMzNlYywgMHgwN2NlNDhjNywgMHhmYWZkNWU5YSwgMHgzNjczODgyYiwgMHhjMDM5MzU5ZCwKLQkweDczYjIzZTJkLCAweDZmYTAzZGQzLCAweGYzN2NlYzhkLCAweGQ5ODcyNjZiLCAweGVlYjEwZjdkLCAweGEzZDdlMDkxLAotCTB4MTg3NTk3YmYsIDB4M2IyM2ZkNzAsIDB4ZmQwNDViYWYsIDB4MzNhMWZkNDcsIDB4YTZlNGU4MDcsIDB4NjA1NmJlNTMsCi0JMHg1ZWZiYmQwYiwgMHgxZmRlNTc0ZSwgMHg3OThhZWNmZCwgMHg0ZGUzMTE4YywgMHhlODlmMWUwMiwgMHgxNDk5ZTgwOSwKLQkweDc4MzMzNzFlLCAweGFiN2NjMjVjLCAweDZiNjNjNDllLCAweDJiOTdhOGZkLCAweGJkNTBkM2VmLCAweDE3YTZlMzFkLAotCTB4ZmMwM2I0NDgsIDB4YjM1ZWUyZjgsIDB4YjI3ODVmZGEsIDB4ZmU4ZmVlOWEsIDB4NWQxZjUzN2UsIDB4M2NkZTkwNDEsCi0JMHgzMjkxYTJlNiwgMHg5Y2JkNDA5MiwgMHg0YWY1MTU1OCwgMHg3ZmEyYWE2MywgMHhkMTRiMjU5NSwgMHgzYWU1M2UzZSwKLQkweDdiNDRmYjQ1LCAweDI5M2VhMmExLCAweGZmYTJhNDc3LCAweDQ1NzI4ZTZkLCAweDg5YjJmNmZkLCAweGNlZDVmZThhLAotCTB4ZDBiZDQ1NmEsIDB4M2ZlOGFlZDcsIDB4YjI4NzQ4ZmMsIDB4MDE5MTM4ZmQsIDB4MWQyNzQ1MGYsIDB4ZjkyY2EwMDcsCi0JMHhjNzZlODlkOCwgMHgwN2NkMzNkMiwgMHgyNWY5MWNhMCwgMHg1ZmRhODcwMywgMHhmNmM1ZTM3YSwgMHhmMGJiZjAwMywKLQkweGM3ZWZhYTk3LCAweDM0ZTlmZjA4LCAweDg3ZDVlNGQ5LCAweDY4YTY5M2Y3LCAweGYyNWU3OTY5LCAweDM1OTEzZjIzLAotCTB4MmQ4YzdlZWMsIDB4ZTAyZjdkZDYsIDB4MTk4ZmRjNGQsIDB4OGE1MmZlMDMsIDB4ZTdiOWFhODQsIDB4NTlmMGJkZDksCi0JMHgxMjc2NWZjYywgMHg2OWZjMDMxMCwgMHg3Y2ZkMTliYSwgMHhjZmNkNzUyNywgMHhiZGM1OTlmZiwgMHhiYmRmMDAwNywKLQkweGIxNTZhZmE5LCAweGRkMTczMWVmLCAweDkzOTc3ZDhhLCAweDJkM2MyYTY1LCAweDJjYWJkNDU3LCAweDFmZjQ1MDNmLAotCTB4ZDE0YWIyOWYsIDB4OTBmZWQxM2UsIDB4MmIwZjRmMGEsIDB4MzYzOWI3ZWEsIDB4NDViNGYwYTksIDB4MjhkZmE3ODUsCi0JMHg3MGVkZmJkYSwgMHgxNTdhYmZlZSwgMHgxY2I0NGVmYywgMHgwNGFhZWZlZCwgMHhhNjdjZGMzYywgMHhkNjUxZjEwZiwKLQkweDc4MDk1NmQ1LCAweDNiNjRmMWJhLCAweGU3ZDhhYmUyLCAweDU5NzYwNGFhLCAweDAwZjlhNDdhLCAweDdmNmEzZTk0LAotCTB4NWFkN2I4YzEsIDB4ZDgzY2IwNTIsIDB4ZDVmZjQ3NjIsIDB4MmM1Yzk2ZTEsIDB4ZjAzOGI0OGYsIDB4OTRiN2RmZjcsCi0JMHg4YjU2Zjk2MSwgMHg2Y2ZmY2IxMywgMHg1NzY1ODA5OSwgMHhmNmNiMGI4YiwgMHhiZmVjNzY5NiwgMHhmOTgzYTViMywKLQkweGRmZmJlMmJmLCAweDdlMDAxODE1LCAweGJmOGQxZTgxLCAweDNjNTZlZTExLCAweGU0MzRkOGY3LCAweGZlZDEzZDlmLAotCTB4MjZhZmE4MWUsIDB4OTYzNmRlNzcsIDB4ODFlNzhkMzIsIDB4Y2M5ZDgwODksIDB4Y2VlOWEzY2IsIDB4YmY5NGU5ZDEsCi0JMHhhYzFjODVlZCwgMHg0MWZlNDA5MiwgMHgwODU5YzZiYiwgMHhiNGUxZjg3YSwgMHgwZWQxM2YwNSwgMHg1NTgxZTQyMCwKLQkweDk1OGIxNGFlLCAweDhlYjQ4ZGQ1LCAweDY0MzE4NmM4LCAweDE5OWM0ZmMxLCAweDI1MTA1ZTc0LCAweDcwNTg0YzE4LAotCTB4YTM3YmQ0MWIsIDB4YjRkZWZiNTgsIDB4ZjI3OWI3MDUsIDB4NjM3MTA3ZmUsIDB4ZTE3ZTQ4NjcsIDB4NzEzMGI0ZTEsCi0JMHhkOGNmZTdlMywgMHgzOWNmZTBjZCwgMHgxOWE4Njk3NiwgMHhmYjhjNzFlMCwgMHg1MGE0OWNiNSwgMHhlNTk2OGYzNywKLQkweGM4MWQ0MmRhLCAweGJkMmE5M2Q5LCAweGU0NTM5NDQ0LCAweGRlNjFiN2YyLCAweDBlZTM4ZDc2LCAweDQ1YmU2ZmNjLAotCTB4NmI3ZTgwNDcsIDB4OGFlZjY2MjQsIDB4OTlkM2RiN2UsIDB4OWI3YmQwYmQsIDB4ZTNhOWVkMDEsIDB4YmMyMmU3MWEsCi0JMHgzZGY1MjcxNywgMHg0OWVlNzAwMSwgMHhhOWNhM2VmYiwgMHgyNjVmNzM1ZSwgMHhlZDNiYWZjMCwgMHhkODllYWM3YiwKLQkweDA4ZTQ4NGY3LCAweDdjMThlYmFhLCAweGY3YmI0ZmRlLCAweGQ5Y2Y4NmJiLCAweGY4NTA5MmI0LCAweDU4NTlhNmY0LAotCTB4MWNlN2MwZGMsIDB4YWYwMDdhODAsIDB4MzY3NmFmMWYsIDB4ZGNhYzljNjAsIDB4NzFmNjE4MzksIDB4ZTc2MDY1Y2MsCi0JMHhmYmM2NjVkNywgMHgyY2ViNDQxMywgMHhiZmM4MjNiOSwgMHhjM2FlOTc1MywgMHhhMmUxNTM3MSwgMHg2NzM5ZjgxYiwKLQkweGQ1Y2U3OGM4LCAweDlkMjg3Y2YwLCAweDI3NDgxZmQ5LCAweDhmNGU2NzYwLCAweGI4ZTBiYjQxLCAweDU3MzdkZDg2LAotCTB4OWQyNjdmZjcsIDB4MTE3M2Q5YzksIDB4MGRmZDgzZGUsIDB4OTRjNTdiODcsIDB4ZDM3N2U3ODYsIDB4NDQ1NzdhZjksCi0JMHhhZWJkZDRlMSwgMHhmNThmYThhMSwgMHg5Zjc4NGIzNiwgMHhmMzRjZjdiNywgMHg3MDZlZDY3OSwgMHhkYzYwOTA3MCwKLQkweDFmZmMyNjcyLCAweGYzYmU3ZjZkLCAweDkxZmViZjllLCAweDQ1N2Y3ZmY2LCAweDg4NjUwMzhjLCAweGRmODQ3YWU1LAotCTB4NzY3OWRlMGMsIDB4YTdmNTExYmMsIDB4MmEwMzM1ZDksIDB4ZTRjZTJlNDAsIDB4NjYzOWIwNzEsIDB4YzM4NjEyNmQsCi0JMHgzYzNkNTZiNCwgMHg1NGQwYjg5ZCwgMHg5MDQyOTZiOCwgMHhkNmE4NGUyYywgMHg0YjQ1NTNjMywgMHg4NWFmOTYzMywKLQkweDBmNDFhZWYyLCAweDlmMDllMWViLCAweDZiMWRiY2ZhLCAweGEwNmQ4ZDQxLCAweGY5MDRiODQ3LCAweDBiNjhmZjlmLAotCTB4OTVkY2Q3NWQsIDB4NzNkOTlkYjIsIDB4ZWIzYWFlNWMsIDB4ODcxZTUxYmUsIDB4M2NlM2RmYTAsIDB4MDEwMjg2YWYsCi0JMHhkMzY3ZDVlZCwgMHhmYjdmODUyNSwgMHg2MWFmMGU1OSwgMHhjYzdmNWNlOSwgMHgxZWVjZjkyNywgMHg2MDljN2Y1MSwKLQkweGVlZmI5YzM4LCAweDQ0ODc0N2Q5LCAweGRiMjgyMzg4LCAweDJlZjhmZWI5LCAweGZkNTZlNzdmLCAweGVlZjg4M2VlLAotCTB4YzdlZjFjNzMsIDB4NDEzMjk0ZjUsIDB4ZTRjMTljOWYsIDB4MTdlZDQxNDAsIDB4ZmVlODRiYWIsIDB4MWEyZDNhMGIsCi0JMHg2ZGNmZDM4YywgMHhiODc4MGRkOCwgMHhhOGYxYzFkMCwgMHg5ZTcwMWQyMywgMHhiZGU2NzhhNiwgMHhhYTRkMzk4ZiwKLQkweDkzNTdhMTdiLCAweDRiMmU4ZTk3LCAweDJjYmNiMDY1LCAweDgzMmFiYmY2LCAweDVmNTk2NWU1LCAweDQ1YzgyNTViLAotCTB4MmQ3ZDFmMjEsIDB4NmUzZjM5NGIsIDB4YjA3YTNlNDYsIDB4MGZkNjI1NjUsIDB4M2NiMDc4YjcsIDB4ZjM4ZWIyZDIsCi0JMHg3ZjZjMzZlMywgMHhjZTUxZTVhYiwgMHgxZjljYmQ4ZiwgMHg3N2JmODMzZiwgMHhmOTYyZDRiNiwgMHhjYjFiOGI2YSwKLQkweDMzZGNlMzA3LCAweDNlMjI2ZTAwLCAweGM2ZThkNTM5LCAweDliNDNkMWJjLCAweDVmZTIwNDBjLCAweDk4MGQzYTE3LAotCTB4YzQ0ZjQwOTcsIDB4NDAyNzhmMTMsIDB4ZWYwMThkZGUsIDB4NmZmM2E5ZjUsIDB4OWZiZTdjZDQsIDB4YjdkZjQyMWUsCi0JMHgxODllOWM1OCwgMHhmYTAzMzc5NCwgMHhmNGM4YzBlMiwgMHhjZGQ4OGM3NCwgMHhlZGZlOTdjMCwgMHgwZjkwNTdmMSwKLQkweGNkZGJiMzFkLCAweGE0Yjc0ZmEwLCAweDM4YmNhMjc3LCAweDc1OWJiNGU2LCAweGJjNzllZWI0LCAweGVkYmJiNTkzLAotCTB4YWZhZDAzNjYsIDB4ZGFjN2RmNGEsIDB4MTQ3Mzc2M2QsIDB4N2M3ZWFmYWQsIDB4MTJmNzZiMWYsIDB4ZjgzZjIyMGMsCi0JMHhjN2M4NmJmOCwgMHgxMDc0ODljYSwgMHgzMWE1NDdjZSwgMHgxNzE1MmM2YiwgMHgxZjk3NWU1NCwgMHgzZTMxNzM4NCwKLQkweDM4NThkZTY1LCAweDNkNzI1ZjE3LCAweGQ1N2RhMjdkLCAweGNhNGZhODQxLCAweGFiODVhMmRkLCAweGUxNTM0ZWRmLAotCTB4OTE1NzE4MWEsIDB4NzE4NWFkNTAsIDB4YWY5NjMzNjMsIDB4MDZlMzcxODEsIDB4MWUwZGFjM2QsIDB4Yzc2ZjIxMzcsCi0JMHhlYWRmYTgxYSwgMHhmZDA1YTJkOCwgMHhjN2NlNGJmNCwgMHgyZWEyM2NjNCwgMHgxNjlmMDVkYSwgMHgzYWMzNjBmOSwKLQkweDBhMGYyODVkLCAweDBmMjg1YzNhLCAweGE2MmE1YzA0LCAweDdlMDAzZjU2LCAweGM5MGVhNmM3LCAweGE2M2FjMTIyLAotCTB4NzFjMWZkNGEsIDB4ODQ2YmE1YzgsIDB4YmYyOTIyZjcsIDB4OGVmZTk4ZGUsIDB4ZDcxZDE1NzksIDB4YjExYmY1MDQsCi0JMHhhNjU1OTNmZSwgMHg2ZjdmOTRlZiwgMHhkZjIzMGY0ZCwgMHgwZWYzZjA0ZSwgMHhiYmYyMWVmMiwgMHgzYmQ5ZTg0ZiwKLQkweDVjMDM1ZjFkLCAweDliOWVmMDRhLCAweDI0YjVkZjE5LCAweGUzZmEzMzZlLCAweDNkODMzNjQxLCAweGI2OWU3MjA0LAotCTB4MTk2NWU3MGYsIDB4NjQ1M2ZiOTcsIDB4Y2VmODc2ZTcsIDB4YzNmOTkxOGIsIDB4YWJmY2ZjY2IsIDB4Njg0NDRkZWUsCi0JMHg0ZjYxZmNlNywgMHg0YmQ5ODViYSwgMHgwNjg3NWRmYywgMHhkMDdlODZkMiwgMHhhOTk3ZTVhYiwgMHhmOWQ1YTFmMywKLQkweDU5ZmYyMjE2LCAweDRmNTE1ZjlkLCAweGExMzA3YmQ4LCAweGRlZWNjZTc5LCAweGIzOWU0ODZlLCAweDE5YTJhYmIwLAotCTB4NWUwNWFkM2YsIDB4NzhmOGU5NDMsIDB4MDk1N2NmM2EsIDB4YWJjOWMzODUsIDB4Mzg2NGUxYzAsIDB4ODdlYzg0MzgsCi0JMHgyZWVmMzE3OCwgMHg3NGM2ZmYyNCwgMHhkZWFjZjExYywgMHhiMjI3NzExNywgMHgzZjg5MzZmNywgMHg1ZDA0ZmVlYywKLQkweDhkYWZlZTg0LCAweGUwY2I1ZmMxLCAweGIzYmJmNTRmLCAweGI5YWFlNzgwLCAweGFiN2UwMjY2LCAweGM3ZjNmZTYwLAotCTB4MzUxZmYwMmIsIDB4ZjhhZWZiNWYsIDB4MGRiOWI0ZTUsIDB4NTA4MGZkZWMsIDB4MWMzOTc2M2UsIDB4YzJmNzEzMWYsCi0JMHg1M2QwYTVkNSwgMHhlNDFhM2VlMSwgMHgzNDNiYzIwMSwgMHg0YmVmZTc2MCwgMHg4MDY3NDc3NiwgMHhmN2QxNTY3ZSwKLQkweGQwZWMwNjk1LCAweGYzN2VmNjA0LCAweDljZGI5YjIyLCAweGU5MjJlMTQxLCAweGM4ODE3ZTU5LCAweGYxYTMzZGMzLAotCTB4YjZmNDE2ZmMsIDB4YzllNmNkYjQsIDB4YjA4MzJmYTgsIDB4NGFjNzY3YTAsIDB4N2UzZmUwZWIsIDB4ODc4YWVhZDYsCi0JMHhhZmQ3MjQ3MSwgMHgzYTA3N2UwZiwgMHg3YTY5OWU1MiwgMHhhMTdmOTMwNiwgMHg1ZmU0NTEyNSwgMHhmYWY5NmVmNiwKLQkweDhhMmZkZTlhLCAweDc5MmE4ZjA0LCAweDQxZWUxZmI0LCAweDQxOGIyODVjLCAweDExMmRkOWY5LCAweGRiM2ZiYzFmLAotCTB4N2E4NDllNWQsIDB4YmQwMGY3NGIsIDB4ZGFlZmNhMTYsIDB4MzAxZWVlMmUsIDB4ZGI1N2U3MDQsIDB4NjVhOWRkYzcsCi0JMHg3MWRkZjY0NiwgMHhkMGVjYTAxMywgMHgwNzlkMWZiYiwgMHgwNjkxZTBmZSwgMHhjZGJjOTM4YywgMHhjNzI3MGZmMywKLQkweGI3YzNmY2IwLCAweGM5ODBmZGY5LCAweDAwNGE1ZTFmLCAweGY2NTkzOGY5LCAweGExNDgxNTI1LCAweDFiZjc3Njc2LAotCTB4MDVlYzJhYjMsIDB4ZGQzNmY2YTEsIDB4ZWZkODU4ZWYsIDB4OTc2ZWVjZDUsIDB4NjAwNmNiYjEsIDB4ZjVkZmRiNTUsCi0JMHg5MDIyYmYyYiwgMHhlNTZhM2RlNywgMHhlM2Y5MDIyNSwgMHhiYzdiNzNmZiwgMHhhNGY1MTMyYiwgMHg5NTMzZTRhYiwKLQkweDQxNWI3OWY1LCAweDg5NzMxOGZmLCAweDIyOGUzOWU1LCAweDk1MjVjZTJjLCAweDliZjJjOWJkLCAweGRiYjZhOTc4LAotCTB4YmRhODY4ZTcsIDB4YTc2YTFkOWUsIDB4YTVmZDkyY2YsIDB4ZDQyMWVmNTAsIDB4ZDgwOWNmNWUsIDB4Mzc0ZWMyZWIsCi0JMHg0NWJmOTYxMCwgMHgzODA2ZjdlZCwgMHhkZGI5ZTcxNywgMHg4ZjEzMzE0ZSwgMHg3YzNmMjE3OSwgMHhjODdkY2U2ZiwKLQkweDlmMzBhMjE3LCAweDhmOGVmOWUzLCAweDdmYWQ2MTEyLCAweGM1ZmM0YWU5LCAweGJkMDBmNjJiLCAweDIyYmU1OTM3LAotCTB4ZjVmYTc5YzEsIDB4YzEyMGJmMmIsIDB4NzM3NWJjZWYsIDB4OGU5Yjc3M2YsIDB4ZmZhYTQzZGQsIDB4OGE3MjhjYTcsCi0JMHg4MDc1YjVjYSwgMHg5YWYyN2FhNywgMHg3OTIwZWVmZSwgMHhhYmZmZGE0YiwgMHgyOGMzZGUxZiwgMHgzNTg2YWJmZiwKLQkweGI0ZjViYzgxLCAweDdlZDI3NjRjLCAweDIyM2VkY2Q1LCAweGFjNzZmOTFlLCAweDMyOTI3YjczLCAweDI4OWVkNjQ2LAotCTB4ZWFjYmJmZmEsIDB4MTNmZjQ0MDMsIDB4YmJmNDlkOTMsIDB4OWRhMmE5ZDUsIDB4ZDc4ZWJmOGYsIDB4NmM3NmVlODksCi0JMHgwZGYzMTJjZiwgMHg2YjMzNzU2NSwgMHg3MmY4Y2I2ZiwgMHg4MjMxZTgzMiwgMHhlMGNjNmZiZiwgMHg0N2JmOTFmMiwKLQkweDYzZmRmOTQ0LCAweGNjNTc4OTE5LCAweDczYjY1MWJmLCAweDFmZGUyMDc5LCAweGM0ZTFmYWFhLCAweDZlNzBhMzk4LAotCTB4YjVjYzI1ZGIsIDB4ODc1ZmJmYWIsIDB4YjY3M2ZiZmUsIDB4ZjdlMDgyZjYsIDB4OGU5ZTQ1NGEsIDB4Nzk4Y2QyYWIsCi0JMHgwZDJmMGQ1MywgMHgyMjc0MGFkZCwgMHg4MTI3OGY5YiwgMHhlM2M1ZDJkZSwgMHgwOWIyNTVmMSwgMHgzNjE3MmVlMywKLQkweDQ5MWViZTMwLCAweGYyYmM1YmVmLCAweDQyYmUwNTE1LCAweGMwZmJmOWRhLCAweGRmYTQ5ODE4LCAweDY0OTNmZjNiLAotCTB4YTBmMzNlZjYsIDB4ZTgwYmNjMmUsIDB4ZGUwYzdjZTAsIDB4YzM3Yjg0N2IsIDB4MjEyYmZmMjIsIDB4NWVjMTM4ODcsCi0JMHg4YTM5Nzg0ZSwgMHg3MWY5NTNiZCwgMHhjNWRiZjIxNywgMHg3NjdmMzMyZiwgMHgyODAzYTZjMywgMHg3NmNiZTZkZiwKLQkweGM4OWQyN2Y0LCAweGYwMGFiZjc2LCAweDBkNzczMWU5LCAweGNhZjgzOGMxLCAweDNmNWQ3MTU3LCAweGRjNzg1YmIyLAotCTB4MTgyZjJmYWIsIDB4ZTE0Mzg3OWUsIDB4YzBhYmZiZmYsIDB4NGFmZmY3ZmYsIDB4ZmM4MmVmZjgsIDB4YmI3M2UwMzIsCi0JMHg0ZGJlZDBhMywgMHgwZWY1ZmFkNiwgMHg2NDllNmI4OCwgMHhlNzllNWNlZiwgMHhmYWVkMmI3MCwgMHhmODE1ZGYxMCwKLQkweGQzYjMwNjY3LCAweGRjNTgzYWUyLCAweDg5NjVlNDQ2LCAweGMzMzNmZWVmLCAweDFlNzRlY2NjLCAweDc5YTg2OTFmLAotCTB4NDdjNDM0NmIsIDB4YzRjNmZlMDQsIDB4NzdmMDc2OTAsIDB4MzgzODNjNTMsIDB4MDc4MDFjMWUsIDB4OWM0MGVmMDEsCi0JMHgwYWNiOGU4NCwgMHhiMGFlZDc5ZSwgMHgyM2RjMDUwZiwgMHg3ZDM1NjM5ZCwgMHhlM2FiNzU4OCwgMHgwZTk5NzcwNiwKLQkweGVmN2UwMDk2LCAweDg0Nzk4NmZhLCAweGIwYjRjZmRmLCAweGNjN2ViNGY5LCAweGYwMTFmYzEzLCAweDFlMDBjNGNhLAotCTB4ZWY5NDAzNzUsIDB4NDZiYzUxODAsIDB4MjJiOTI4MGQsIDB4ZmZlZDk1ZGUsIDB4YzM1Nzc4Y2IsIDB4ZjNkNjVkNGQsCi0JMHhmN2ZhOTgzOCwgMHhmZjM0MDNhMSwgMHhiZmZjNzBhYiwgMHhkZDlkNWZlNiwgMHgzZWQxNWZiYywgMHhkNzFiZTU3NywKLQkweDdlMTU3ZmU0LCAweDFmOTU3ZmQxLCAweGY1ZmY5MjM2LCAweDE2ZWU5OTJmLCAweDJmYzliYmEwLCAweGZjNDBkMTJlLAotCTB4ZmZiZGY2ZTYsIDB4OGIwMTNiYzgsIDB4NWUzMDNiZjcsIDB4Y2JkZjBmNzQsIDB4ZjZmZmEzMTcsIDB4OWU5NDdkZmUsCi0JMHg3ZTY2NjhiZSwgMHgzZmZiNTNhOSwgMHg0M2YzZDlkNywgMHg0NWY2NjNlOSwgMHhlODgzMzg5OSwgMHg3N2NhZjY2YSwKLQkweDY2OWYyMDc0LCAweDVjMjJjZDUzLCAweGE3MGQ2YTdjLCAweGExMjdjYzI3LCAweDQ4ZDZhMDdjLCAweGZjZjQwOTc0LAotCTB4ZjdiMmQ2ZDcsIDB4MTAyMTZiYTUsIDB4ZTdkMmMzNjMsIDB4YjU5M2VkYTYsIDB4YzdlZjA3YzQsIDB4M2ViNDliNTYsCi0JMHg5NDg3YzYwMywgMHhmYzBkNjFmNywgMHg2ODZhNTk3ZCwgMHhjYWM1ZWUyYSwgMHg5ZWYzMTk0ZSwgMHg3MTYzMjhlZSwKLQkweDc2YTYxOWE1LCAweGZkMzhkZmJjLCAweGY3ZjNlYWM4LCAweGUzNWRkOWMxLCAweGJhNzk2MTI5LCAweDlmZDI3ZWUyLAotCTB4NWUyNGRmMzQsIDB4MzdlNDA2YjQsIDB4MWUyNTlmZjgsIDB4YzNhZTVjODcsIDB4NWM3YWE0MzgsIDB4ZmU3NjAwZWQsCi0JMHhjYjEyY2IyNiwgMHhmMmMzZDgzNywgMHhhNDc5YzRkNywgMHgyODYyM2JmYiwgMHhmMGYzNzk2MiwgMHhiMzc1NmFjZSwKLQkweDAwYjQzN2NlLCAweGE4ZmQ4ZmY0LCAweGFkOTUzNDdmLCAweDM1M2MwMDJhLCAweDMwM2U5NThkLCAweGMwZjQwNDE0LAotCTB4YTI1Zjk1YTYsIDB4YzdlNmEzN2UsIDB4ZmQ1YWYyZWEsIDB4MWNiN2VmNTAsIDB4ZmExMTdhNDEsIDB4MWYxNmE5ZTIsCi0JMHhhOTdlZDVkNiwgMHg4YzdlNjM1OSwgMHg1ZjkxOWM3MSwgMHhkNDcwYmQzMiwgMHgxMTg5ZTcyNSwgMHg2ZjZmNmZmNiwKLQkweGQ4NGIzYjA5LCAweDRlM2I2YTVkLCAweDVlZjEwYmYwLCAweDBiMDBmYjVjLCAweDc3YzZiYjkzLCAweDVhOGZmYmQ4LAotCTB4NDAzNGJlNTYsIDB4NWYwNTc3MjksIDB4ZWY3NjdjYTUsIDB4NGE1ZmU0MDAsIDB4ODdjNDFiZmUsIDB4YzU1ZmZkYjEsCi0JMHhkZjc0MDM4NywgMHg0ZGZmMDBlYywgMHg2ZjdiMDY2ZCwgMHhmNWY3NGQ1ZCwgMHhhYTdlNGMyOSwgMHg5NGFlNWRlOSwKLQkweGQzNTE5ZjUxLCAweDNiZjNhMGJiLCAweDdmZDA1YjlkLCAweGQyYzYwYjM3LCAweDkyNmFjYzc1LCAweGM5ZDU5ZWYwLAotCTB4ZDdiYzFlOTcsIDB4ZGRkMDk3NDgsIDB4ZTI5ZDMzZmUsIDB4NDg2ZmJjM2QsIDB4ZTA3MmExZjcsIDB4YmUyM2I0NjMsCi0JMHg1ZDIwMWNiNSwgMHgzM2ZlZWNkMSwgMHhhODRmNDdjMywgMHhjMGEwYmQxYywgMHhiZDFjYTg0ZiwgMHg1ZmM0YWZmMCwKLQkweGY5Y2ZmZDk4LCAweGYwOTA3Mjc2LCAweGM4YmI3ZjNjLCAweDZiMjM5ZmYzLCAweDI2ZGNmN2Q4LCAweDc5MGEwNzk2LAotCTB4NzY1ZWJkNjgsIDB4NTY2OTZjMmYsIDB4NGQ3ZmJlMWIsIDB4ZTA1OGIyMGQsIDB4YzlmNmNiMjMsIDB4Nzc4YjNkNjQsCi0JMHhkZTgzNTM2OCwgMHhiZTI2ZWEyYiwgMHhlMDQ5NDc3NywgMHg5YmY5NjI0ZiwgMHhmN2IzNDY0YiwgMHg5YTc5ZDQzZSwKLQkweDkxYjNmZjIyLCAweGI0Y2JiYjhmLCAweDU0Nzg4ZjRiLCAweGU2MjQ0M2JkLCAweGQ0NDNiZjUxLCAweDY3ZmM3YTM4LAotCTB4ZjdlN2ZmMTgsIDB4MGZlZmQ1OGIsIDB4ZjllNGNhMGQsIDB4ODhhNDQ1OWYsIDB4Y2NhZmM3YzUsIDB4NWU0MDdhYTcsCi0JMHg3YjhkZjkwNiwgMHhiZGEwYjUyZSwgMHhmNDM5OTc5MywgMHgwMTE5M2MzZiwgMHg4NjY1MTc3YywgMHg5OWE1ZDdlOCwKLQkweDk0YjNkNjU3LCAweGZhNjJmZmVkLCAweGYwZGJjZDkwLCAweDRhNmY5MTNkLCAweGU3MmM4NjFmLCAweDM4Yjc1ODI0LAotCTB4ZjllN2ZkMjcsIDB4Njc5ZTAzMTUsIDB4ZWY3MTNlZjEsIDB4YmRmMWU3ZjIsIDB4MDlhZmRlOGYsIDB4ZTZhZTg3YzYsCi0JMHhjZGQzMTk5ZiwgMHhmNGRkMDNhZSwgMHg0Y2Q1YjdiMSwgMHg5NGVhM2VmMSwgMHgyMzA0ZmQwNywgMHhkZWYxYmI4ZiwKLQkweDljYjc4OGRjLCAweDBhNGM4MTkwLCAweDU4NjRiYTBmLCAweDg0MWJkMGI3LCAweDBiZTAxMTFlLCAweGNmMGI3ZWZjLAotCTB4ZmU1NmI4ZjcsIDB4ZGM0YmZmZjEsIDB4ZTliM2RjNDMsIDB4NGU0YWY5ZDEsIDB4MTNkZWZjODAsIDB4ZWYxZGY2MTUsCi0JMHgyYjlhOTlkNSwgMHg2MGY5ZmZiZSwgMHhlMDM1N2I5YywgMHhiZmU3MGE2OSwgMHgyYWQwMWRlMiwgMHg3YmRiYmQ5OSwKLQkweDNmNDY0YmExLCAweGZkMWY4YWM1LCAweGRiOGZiN2UxLCAweGViNTdlNzQzLCAweDJmOTY0ZDY3LCAweGQyNDdhZTUwLAotCTB4MmMzNDliZDcsIDB4ZDJhOGJlYWYsIDB4NjA1YWY5OGUsIDB4NDJkZjgwZmYsIDB4ZmRkNDMxZjgsIDB4N2UyYmQ5MGYsCi0JMHhmNzc2ODk5ZSwgMHhhYzI3MmVlOCwgMHg5ZWI2NTFlNywgMHg1YTZhZjg0OCwgMHhiZjBhNWZmOSwgMHgzN2VmYTQ0OSwKLQkweGNjYjEyYmVkLCAweDdmMWYzYTBmLCAweGZkMDQ5NGNjLCAweDA2MzUzZTViLCAweDc0YWQ3ZGYwLCAweDBlY2Q3ZmYxLAotCTB4OGYxMzJjOTgsIDB4YmU3MGU1NDQsIDB4MjU3YTY1ZTQsIDB4MmNlNWZhNjEsIDB4MWNlNTg1ZDIsIDB4OWJhNTg3ZDIsCi0JMHhmOWVhYmNiMCwgMHg0MmU1ODFjNCwgMHg2NWQzY2Y3ZSwgMHgwOTkxYmY3NywgMHgxZjVkNTVmZSwgMHhmZTdiNTNiZSwKLQkweGUxZTdiZmE1LCAweDhmMzc1MDNiLCAweGE5NWM4MzZhLCAweGFkOWZjYWVmLCAweDBiN2FhZmQ2LCAweDBkMzhmZWZiLAotCTB4YmZlZWM3ZjgsIDB4MGY1MWRhNjcsIDB4YjM3N2I2YjgsIDB4ZDNjZTcxYmQsIDB4ZGRmYzYxOTksIDB4YjMyZTU5ZmYsCi0JMHhlZTk3MTU3YiwgMHg1YTRkZWY2NSwgMHgzNjMyMThkOCwgMHgyNTc0ZmIxMSwgMHgwOWY5ZTE2NywgMHgyZGU0Y2RmMCwKLQkweDVjNDI2ZjgyLCAweDBkMDNmZjJiLCAweDkzMmZjYjhiLCAweDc1MDVlZmYwLCAweGM0NzgzNWY4LCAweDc5NjUxN2YyLAotCTB4NjJlZmE4NjUsIDB4NTYwZGY5ZWQsIDB4NzE3OTA0YWYsIDB4ZmI1OGEzMjMsIDB4NWRmZTJiNzIsIDB4OGZjNGQ5Y2YsCi0JMHgzYzJlNzJlNywgMHgzZGMzMmI2NSwgMHgwYjk2M2IwOSwgMHg1NGQ0ZmJmOCwgMHhlODk2Y2VlMywgMHg0NjlkNDVmOCwKLQkweGZjNGRjZjk2LCAweDA1YmY2MDgzLCAweGIxODQ5ZjYwLCAweGYyMDZjYjc3LCAweGUzMzY3NDM4LCAweDU0MmFjM2Y3LAotCTB4MGZjZTA1ZmUsIDB4MzMxNWVjMWEsIDB4ZTE3MmQyMDYsIDB4NDgxOTI3NDAsIDB4YWQ5ODdlZTksIDB4MjBjZmZkNmIsCi0JMHg4NmI3NjA2ZiwgMHhjZmFmYmRjMCwgMHhlMzAwZmU0NiwgMHgyZmRjNjIyYiwgMHhlODNhMTVlYywgMHhmMmM0ODJmNywKLQkweDBjZmIzZDhlLCAweGE0ZDRiZGUyLCAweGNiYmQzZjYwLCAweGZkMDMxOTVlLCAweGE4YjYxNDZjLCAweDJiODA0NTFmLAotCTB4NTcyYWJkZmMsIDB4ZTQ0YzdiMTgsIDB4MWQwMzBkYjEsIDB4MDQ4NWZkMTEsIDB4NDE3YTI1ZGYsIDB4ODE5Y2Y1NjIsCi0JMHg0ZDdkYmUzZiwgMHgzZDMwZmExZSwgMHhjMmZlODdhMCwgMHg3ZDgwY2VlZSwgMHg2MjEzZDMwYywgMHg5MmZmZjU4MiwKLQkweGNkMjFhZmRmLCAweDVmMGYxMDk5LCAweDAzNDE4NGYyLCAweDU0N2JjNjdhLCAweDgzM2RjMzFjLCAweDE2N2I1MzNmLAotCTB4MmVkNGQzY2EsIDB4ZDQyZmYyODUsIDB4MDNmMjg1MmUsIDB4Zjk0Mjk3NmEsIDB4YTE0YmI1MTEsIDB4MTBiMTc0NWMsCi0JMHhiZTIyMjRkZSwgMHhkODYyY2U4MSwgMHhhODNiODg4ZiwgMHg5MDNmOWJkNywgMHhiYjA2Y2RjOSwgMHgxZDYyODY3YiwKLQkweDhlYjhmNGZiLCAweDNmNWRhYzE3LCAweGM3NWQxOWZkLCAweDY5MDdiYjBiLCAweDI0NGJiZWUwLCAweGZiZWVmNDc4LAotCTB4ZmU5NWU2NWIsIDB4N2Y4ODhkM2UsIDB4ZjEwN2RiYTgsIDB4ZDJlYzE3ZWYsIDB4ZTgyZmRjYTIsIDB4MGUyZWM3ZjAsCi0JMHg1MDMxNTdlYSwgMHg3N2YzZTM4ZiwgMHhmMzBiMWM3ZiwgMHhlMWZhNThmNywgMHg1NmU4OTRlYSwgMHhiZDU4NmIyNywKLQkweDg0NWU1N2UyLCAweDM5ZGQ4MzZiLCAweGNmNGJmNjAzLCAweDRmZDgzOGY3LCAweDdlMWZjNzQxLCAweGU4M2FmNzBhLAotCTB4ZWRhNzE4ZmMsIDB4ODIzNmZhOTUsIDB4ODdkZWE2N2UsIDB4NWY2MmRmN2EsIDB4NjFlYmZmNzQsIDB4YjNiYjBiZmMsCi0JMHhkZjk0Mjc2MSwgMHhmNjVlNzYxMCwgMHg0Mzc5NzdiMSwgMHhmNzBhYmJmNywgMHhhZmExYmI3MywgMHhkYzJiZWUxOCwKLQkweDliMGU1OTdlLCAweDJmNjBkYTI3LCAweGM1N2Y3ODQ3LCAweDM4ZmVkMGY1LCAweDgxMmJhNzFjLCAweGFlN2I2ZmFmLAotCTB4ZjExMWYzZDUsIDB4NTBmMDAxZWUsIDB4NGJhM2M4M2IsIDB4NTYwZmEwYjEsIDB4Yzc2Njc4ZjMsIDB4ZTM2ZjQxYWUsCi0JMHgzMjIzOTdmZCwgMHgzODVmYmY4MSwgMHg3NzNjYTZjYywgMHgxMjc4ZTEzZiwgMHhiZDNlZmU2NSwgMHhjMmY1ZjAwYiwKLQkweGMxMDc0ZmJlLCAweDNmMTRhMDdiLCAweGM5ZWZlMDgzLCAweDYwZTA2OGZlLCAweGZlN2RmZTQ1LCAweDAzMWZhZmM4LAotCTB4ZjFmZGExZmEsIDB4Mjc0ZTE1ZWYsIDB4NmUyMGFhNWIsIDB4ZmZiOGQzM2YsIDB4YjY2OTZjMTAsIDB4ODgyYTgzZTUsCi0JMHg5MTRkY2ZkYiwgMHhjZjM5NDMwZSwgMHhlMjBlMzU5ZSwgMHg3OWRmMjJmNSwgMHg2MWY5NmU0MSwgMHgzYWI3NGEzOCwKLQkweDJiOGY1MWFhLCAweDI0MTJlNjA3LCAweDMxOGQyYTE3LCAweDIxNjA1MWZjLCAweGY1MTVlMjg3LCAweDhhZTkyOWYxLAotCTB4MzllZDEzZmUsIDB4Yjk0OWY2OGEsIDB4ZmJkYTI4MzcsIDB4ODYzOGExZWYsIDB4MDZjZjdlMDcsIDB4NDM2NWY0NzgsCi0JMHg4M2VlOGQxYywgMHhhN2I1N2RmZCwgMHhjYTc3Y2M2NCwgMHg5NmZjN2RkZiwgMHhmMjdkNjgxYiwgMHg3YmUwNzdkMywKLQkweGY2ZjAyZjZmLCAweGYxMmIzYmM5LCAweDUyZjU5YmVmLCAweDIyYTllYTc4LCAweGExZWNhNjc1LCAweGM5ODMzZjhkLAotCTB4ZmQ0MmY2NTQsIDB4YzMwZjI3YmUsIDB4ZDhkZmQwYmIsIDB4Mjc2MDg4NWUsIDB4OTdhNjExZDQsIDB4ZDQxN2IyNDYsCi0JMHg5YmU1MDI3NiwgMHgzOWJlMDUzZiwgMHgxNmE5YTVlYywgMHg2MTdmMGZjOCwgMHgyMDY5ZDdlNCwgMHhlNDBmYjY5NywKLQkweGZiNzA2NmVmLCAweGY0ZmQxMjIxLCAweGZlYzkxMzlmLCAweDI5ZmRmMDc2LCAweGJmODhmZDM1LCAweGM5Y2EyZDZmLAotCTB4YTEzZGQ4YzcsIDB4M2VkN2NhNmYsIDB4NzY4NmJlMDEsIDB4YWZkYjg3YjksIDB4Y2ZmOTU0YmMsIDB4NmYxZGU5ODYsCi0JMHg5ZWZlMDNkZiwgMHg5NGRjMzJhMywgMHhiNWJmYmZlOCwgMHgwZTVmZmUxOCwgMHhiODU5M2RkMCwgMHgwNGQ0ODFlNSwKLQkweGZhMDNkZGZjLCAweGE3ZjcyMzcwLCAweGViOTAzNjdkLCAweDFmZmJmNTUzLCAweGI0MGUyZDQ4LCAweDI4MWYxNTkzLAotCTB4YTVmYjkzZmEsIDB4OWFmYThhYjUsIDB4NDM3ZDY1MmMsIDB4ZjFlMGRhZjksIDB4YzViMWY0OTEsIDB4YmJkM2NlOGYsCi0JMHg5ZjllZTFmMywgMHgzYWVmZjYxNCwgMHg4MTI3YWZmNiwgMHg0YjdkODdmMywgMHhiYTdlZGY5MCwgMHhiZGZlMTk3ZiwKLQkweDQ2ZmY3NTU5LCAweDAxZjgxZjNhLCAweGIzOTA0NzE3LCAweDk3NGQ0ZjgyLCAweGVhYzIzYmQ5LCAweGVmOGFiZmY2LAotCTB4ZWZkYmJlMzksIDB4OGY2MTQ3YmQsIDB4MzMyZjVlNzksIDB4OWM1ZWZiZjksIDB4MTNhMGFmNWIsIDB4ZjllZWZiM2IsCi0JMHhlOGZmMGY0ZCwgMHhlZDJiODgyYiwgMHg3OWQ1NzY2MSwgMHgwNTFmOTMyYiwgMHhjMGQzM2ViYiwgMHgxNjFlOGJkZiwKLQkweGMwYWJlOGNkLCAweDNkYzBkN2UyLCAweDdlMDZmZjlhLCAweDAwMzM0YzJiLCAweDAwMDAzMzRjLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4MThhZGZmMDAsIDB4ZjUxNDcwN2IsIDB4N2JkYmRiZjksIDB4Nzk3MjRiOTIsIDB4NzEyMTEyNDAsCi0JMHhjMjIwNTcyZiwgMHg0ODQ5YWM5MSwgMHg5MmVhNDkwMywgMHhmMDNlYTQxMCwgMHhhMmEyMTkwMCwgMHg3OTllMGZhZSwKLQkweDJhOTNhODRhLCAweDAyOGQzNjFkLCAweGQ2ZDM2ZDUyLCAweDRmNGUyYTJhLCAweGQxOTU0YTJjLCAweDI1NjJiYzM0LAotCTB4NDA1Njk0NzgsIDB4MmYyYTdiMWQsIDB4NDE5Y2NhNjksIDB4ZWU0MjE5MjMsIDB4OGNjMzhhOGMsIDB4YmY3ZGZhMWQsCi0JMHg1ZWRkY2RkZCwgMHhjOWE3NTUwMiwgMHhmNmZiYmYxZiwgMHhjZmRlZjhmNywgMHgwNTA0OGFmMCwgMHg1NzFhMDE5MiwKLQkweDAyYTYyYTI2LCAweGM4ZGM4MjgwLCAweDAwYjVmYjcxLCAweGJiNGM2MTc2LCAweDk0ZTAwYjNkLCAweDE1NzAwNGM5LAotCTB4YTUwMjlmZDAsIDB4MzAyNzYxMDAsIDB4ZjBlZmRkMzgsIDB4YmRiZjQyM2QsIDB4MjI1ZjFjOTEsIDB4OWU1ZWVmN2UsCi0JMHg3N2RjMjMyMywgMHg0MDU1YTU2MCwgMHg1ZGZkMTJmOCwgMHgzNjFiNWQxNywgMHg3MDk1NjNkZiwgMHhkNDgwMTk3ZiwKLQkweDBmYjkxY2UxLCAweDFkMzAwYWQwLCAweGU3ZjAxNWRmLCAweDMyYTNhNDU4LCAweGU3ODRkYjkyLCAweGY3MTZmYWVlLAotCTB4MjQxMmZjNTUsIDB4ODI4ZjlkMjAsIDB4NzYwNDhmNGUsIDB4MTU3OThmODAsIDB4MDYyNDI3OWUsIDB4OGRmM2M0OWYsCi0JMHgyMmIwNzg0NywgMHgzODEwMDMzZiwgMHg4ZWM3MDc3ZSwgMHgwMDRhYjMzOSwgMHg4MTRmZDM5NiwgMHg4MTU4NzdiZSwKLQkweGMwMDViZjY3LCAweGVmYjQyYmVmLCAweGRmOTdjYmNiLCAweDZmMDg0OTA0LCAweGYyODZmNGIxLCAweDQ5NzBmYmQ4LAotCTB4OTBlMzAzNDMsIDB4YWFkY2VkN2UsIDB4OWQ1YmI3YmYsIDB4NzhjOWZlYjQsIDB4ZmYxZTAxYWUsIDB4YjVmYmM3ODIsCi0JMHhkN2VmNjQxMCwgMHg3YjdkYzBlZCwgMHhmNWY5N2VjYywgMHgwZGZiZDM5ZiwgMHgwYWY3OGNiYiwgMHhiZWY0YzQ4NSwKLQkweDBhMDNmNGE5LCAweGIzZWNmMTJmLCAweGI2YWRmMDg5LCAweGY5YWFmOGFiLCAweGIxYmMzZjZmLCAweDgzN2FmOTE4LAotCTB4NjlmODZkMTcsIDB4NjRjNGRmNjgsIDB4ZDk4ZmUyZjAsIDB4OTFhY2E0MjgsIDB4OGNkYzZjNzIsIDB4ZTE0NWE0OGYsCi0JMHg1Y2ZjN2RjMSwgMHg0NzM3OWQzZiwgMHgxYjRmZTY3MiwgMHg0NDkwNmYyOSwgMHhiNTYxYzkxMywgMHhiYWI3YzU0YiwKLQkweDgwMDU5YmUyLCAweDliNzc1NmY4LCAweGUwMmJiODAxLCAweDEwODNjOGQ5LCAweGRiYTBhNzgzLCAweGEzM2JmM2U2LAotCTB4MmE1ZDg3ZjQsIDB4NWZkZDA1OGYsIDB4YWFmMmNlYTcsIDB4MDFkMTJiNmIsIDB4NDA1ZTJhZWQsIDB4YTY3YTQxYmIsCi0JMHg0NzQ5NjA3MSwgMHgxMzlmMzA3YywgMHhhYzcyZTFiNywgMHhlNDkyYTMzYiwgMHg4MDgzOGM3NCwgMHhiODllYzg1MCwKLQkweDJkZjQ4ZWQ1LCAweGVmYTM5ZjU0LCAweDFmYzU0ODRlLCAweGMyNjY3OTk5LCAweGNiZDM0MGIzLCAweDJmNzdkMmMyLAotCTB4NTE2Zjc4NzIsIDB4NDg4OWEyZjcsIDB4NzVkZjFjMDEsIDB4MWNkNDMxZWYsIDB4MGMzYzE1MmMsIDB4MmM1MDYyZGYsCi0JMHgyOTYzOTdhNCwgMHhhNDY2ZWNiZSwgMHhkZGNmMWU3MywgMHgxYzEyZjNlZCwgMHhmZjEwZTAxOSwgMHhhZTA0OGFiMSwKLQkweDNmZWY2MzhkLCAweDdjZWJlZjQyLCAweGIyZjhiMzFkLCAweGIzNWYxODliLCAweDM3YTg3ZDVkLCAweDVmYzI5YTRlLAotCTB4OGYyOTE4NGEsIDB4ZDBjZDVjYTgsIDB4NTc5N2ViYTcsIDB4NTllYzg2ZGQsIDB4ZDdlNmFmZGYsIDB4MWQzMWJhY2UsCi0JMHg1YzA0YjhmNSwgMHgxNmZiYTQzNiwgMHg2MTBjMGQxZSwgMHhkZmU2Y2I3OCwgMHhlMDMxMjZlNiwgMHg1ZjI4MTllZiwKLQkweGY0NGE5ODJlLCAweDJkMDU4NGZhLCAweDY4Y2ZkZTAyLCAweGQzOTgzNWY5LCAweDU2NjdlNDYyLCAweDhmZDc0ZWZkLAotCTB4ZjQ5MWNmMmUsIDB4ZjlhYmY4YTgsIDB4N2M4NGEwZjIsIDB4OThlNzZkMGUsIDB4YWE4ODM1MWQsIDB4OWY5NDM2OWQsCi0JMHhjNDYyYzNmYiwgMHg0NWU0MTBkZiwgMHhlZmE5ZTkwZSwgMHhlNDkyNzAzYSwgMHgwM2FlYjFkOCwgMHhjZTgwMTZjYywKLQkweGFkNmM1ZDc1LCAweDdjMDMzYmI3LCAweGQ5OGZlMzNlLCAweDgzOGQwOWFmLCAweGMxYTU1YmY4LCAweDc0Nzc1ZjhjLAotCTB4MWM3ZmNhM2YsIDB4MzAzMmNiYmMsIDB4ZjgwMmU3MGMsIDB4MTNiZjdkOTMsIDB4YmYzNTlmOTAsIDB4NjJkOGYyZjgsCi0JMHg3OTQzNzZhMiwgMHhiMjA3ZjMwYSwgMHhmNGEzYWJiOSwgMHg5YzAxNTgxNywgMHg1YjY0N2Y0OCwgMHhjMzJiN2Y4MiwKLQkweGEyN2VhYTIzLCAweGZlZmY2ZGQ5LCAweDcxOWEyNzQ5LCAweDBiMWRmZmJmLCAweDE1ODNkYjMzLCAweDFjZmUwZjRmLAotCTB4MTJkYjM1ZTEsIDB4NTNmYjljOTgsIDB4ZmRhMmM5NDEsIDB4MGFmZDkzYWQsIDB4OGE2ZTU4MWUsIDB4ZGM5MzM0ZjQsCi0JMHg2ZGM1MTMzYiwgMHhmM2Y5ZmZiOCwgMHg4MWRkNWY5MywgMHgyNzU3Y2FmMCwgMHhmOTI2NDQ4YSwgMHhkZjg0NTA5MSwKLQkweGVmYTAxMWIzLCAweDNkZDhiMzNiLCAweGNiYmM1NTkwLCAweDVmZTRmZjM0LCAweDcyOWJmNjllLCAweDRkMzk3ZmRhLAotCTB4ZmViYTNjMjQsIDB4OTBlZjNlY2UsIDB4MzVmNWU1MDAsIDB4Njg1ZGYyMDQsIDB4YTUzOGU3ODIsIDB4ZDcwZjg0Y2YsCi0JMHhlNjljNzY5YSwgMHgzNmFkM2VkMCwgMHg3NWU5Mjc3OSwgMHgzOTdmYjNkNSwgMHg1NGZjODY1ZSwgMHhkM2YzN2NiZCwKLQkweDk1YmU5MDMzLCAweDdhMDU4ZDFmLCAweDExZDdhYTI3LCAweGU0MjkyMGYxLCAweDUxZTAzOGE1LCAweDlmMjY4MGUzLAotCTB4ZmYwZWVkZGEsIDB4YTU3MTMxYTcsIDB4MDBjNTIzYmUsIDB4Zjk2NTc2MzcsIDB4NDc4OThkM2YsIDB4MThjYWEwYjUsCi0JMHgxZjk4ZTdlZSwgMHgzNWZlNjlkNSwgMHgyMGRmOTc4ZCwgMHg0ODQzZDQ3ZCwgMHhiMTEwOTM4ZCwgMHhmMjE1NWQ5MiwKLQkweDIxNzE0NDljLCAweGM5OGQ4NGYyLCAweDNlY2VkZTNmLCAweDJlY2M0YzEwLCAweDUzMjA0Y2ViLCAweDAzNGMyZjdjLAotCTB4YWZmOTI2N2IsIDB4ZmMyZmNhYWMsIDB4OWJhZGU0YzQsIDB4NDJmZDM2NTAsIDB4OTNmZmVlYWEsIDB4YjU4YjRjMTYsCi0JMHgzNzg2OWVjZiwgMHhkYjM3M2VjOSwgMHgzODBlN2Q5OCwgMHgzYzY3Zjk4MCwgMHgyOTBiN2Y5ZSwgMHhmYjMyZmNlYywKLQkweDg2MWZjYzU3LCAweDQ1Y2I0YmYzLCAweGMwYzUxNzMwLCAweGVlMjg5MDVlLCAweDQ1MDliNjE1LCAweGFjZGFlMDBmLAotCTB4OTY0YTY1ZTksIDB4YWRmYzQ0MmYsIDB4OWVlZGY4ZWEsIDB4YjczYzk4ZjcsIDB4ZjA4YTc4M2MsIDB4ZmQzMjc2MWUsCi0JMHhkY2FhN2JjMSwgMHhjNGQ0MWNjMywgMHhmNjY1YTllNiwgMHg3YmZmMzQyZiwgMHg3ZGNmZTBjMSwgMHg5N2M4OWNjZiwKLQkweGRkYmVmZGYxLCAweGVkMDFmMzUzLCAweGQ4M2U1ZWY5LCAweDY3Y2ExY2Y3LCAweGZhNzgzMTMwLCAweDBmM2I1YzYxLAotCTB4ZjI4ZTM4N2YsIDB4NzViZDNjNjIsIDB4ZTAxYTVmMmQsIDB4NDc4ZDRlMDEsIDB4N2UwN2M0NzUsIDB4YmJlYjkxM2YsCi0JMHhlMTgxZjY0MCwgMHhkZTg3YzU4NCwgMHhmYzk4ZDM0ZCwgMHgzMjZmNzlhYSwgMHg2ZmRjM2ZlOSwgMHg0ZTllMmZhNCwKLQkweDNlOWQ3ZGZkLCAweDljZmQ3ZGZkLCAweGViZWFhZGQ5LCAweDlmOTgzNWJjLCAweGNjOWZkZjhhLCAweGVmYWMxODExLAotCTB4ZTYwYTRmOWYsIDB4YmJlOTM4YTcsIDB4OGE5NzNkNGIsIDB4ZDViZDhjNzAsIDB4NmZkNDRmZDAsIDB4MzdlMzFkOGQsCi0JMHhjMzUzNTdkMiwgMHhiZWMwNmQ4OSwgMHg3MTNmMTQyYiwgMHg1ZmI4YzgwZCwgMHgyNmE2Zjk5NywgMHhkMWQ5ZjAzNywKLQkweDc2NjkxNmNlLCAweDY2NjllOTA2LCAweDgyYjczYmNhLCAweGI0OGJkNzZhLCAweDc0M2I3ZGY4LCAweGU1ZmQwMDU4LAotCTB4NjdmNWE5YTQsIDB4M2EwNzVjNzYsIDB4NjM5MTZmN2UsIDB4Y2E3MmFmZTMsIDB4ZjdlYTY5NzQsIDB4MjU0YWJmOGYsCi0JMHgzZjFjNTFlNCwgMHgzYWIyNzJlZiwgMHgzMzliYTI2NywgMHg5MGQ5NzNiMywgMHg1ZjcwZTc0ZCwgMHgyODFkYTAwYywKLQkweDBkYjEzNjlkLCAweGRmNzk5MWU5LCAweDU3YmM2ZTM1LCAweDkzZTQwZDY3LCAweDY0ZjdlODFmLCAweDA3ZGY2NjVlLAotCTB4OTE5NmY3YjgsIDB4YzgxY2MxYmUsIDB4OGE0ZmY1NjcsIDB4M2JhYzM4MTUsIDB4YTBjNTYzYzIsIDB4YmU1MGYyODQsCi0JMHhlMjU3MTYwNiwgMHgwMmQ4NjVlMywgMHg0NzQ4OWQzNSwgMHhmZGQ3N2QwNSwgMHhiOGE0ZWQxMSwgMHhlOWQ0ZDRjYSwKLQkweGM2NWUyNTFjLCAweGJkMzQwN2MxLCAweDlhOTlhNzE1LCAweDhmZjE0NjNhLCAweGU5MWY2OGRiLCAweDVlMGU4MzZiLAotCTB4N2YzNTVmZjUsIDB4YzY3MjY5OTYsIDB4ZDZjN2NmODQsIDB4NWM1YTBkMzMsIDB4MTVkOTI3MGYsIDB4ZGIyZmU5MWUsCi0JMHhiODQwN2E4NywgMHg0MDM4MWNjYywgMHhiNDNkN2EyYiwgMHg0MjY3M2VhMCwgMHhjYmFmN2Q0MCwgMHg2NzI5YmYxOCwKLQkweDc4Zjk2MTJjLCAweDMzMjM4YjJhLCAweGU3YWVmNTM1LCAweDY4ZjQ4MDlhLCAweGViODU3Y2E3LCAweGQzYzgyZTI2LAotCTB4YjA4ODEzZmEsIDB4OTk5NzAyNTUsIDB4NWIzYjE0NTYsIDB4YWQ4ZjgzNjcsIDB4YWQ4OWEwNzMsIDB4YWQ5ZGExNzMsCi0JMHg1YjA3NDAzNywgMHg1YjIwODI2ZiwgMHgwZGEwNGE2MSwgMHhlYjVmZmM1OCwgMHgwYzNjYzNlYSwgMHhhMjZlNWQzZiwKLQkweDE4YmM1YzdjLCAweDg3ZjM0NjlhLCAweDJlYmM5YWI1LCAweGVhOGMwZjJmLCAweDFlNWMzZjI1LCAweDY0Y2U0MDczLAotCTB4MmU0ZTVkNzQsIDB4OWQ5OGYyMTMsIDB4OTFiMTcyZWIsIDB4MDczZGUyM2QsIDB4YWQ2OTMzZjgsIDB4ODc3YjEwODAsCi0JMHg5OWRlOTI1YywgMHhlMDk5ODIwNSwgMHg1YzE4OTAyYSwgMHg1MWU1MWRmZCwgMHhiMmNkOTIxYSwgMHg1NGI5MTQ3NywKLQkweDhmMjc2ZThkLCAweDkxNzE3MjZhLCAweGVhOGQ4ZjBkLCAweDYwNWJhZjZiLCAweGNjMzdhZWIwLCAweGZmMTQ5OWQwLAotCTB4NzIxM2VhNDcsIDB4ODRlMmNlODgsIDB4MGMwNTJmY2EsIDB4MjFmNzdlMTEsIDB4NmJlMzE5OWYsIDB4YjM2NTUxNzEsCi0JMHhmNzRlZTEwNywgMHhlMzE5OWY0OSwgMHg2NTU5NzE2OCwgMHg2YWM0NDU5MSwgMHhkZjYzZjViMywgMHg0NzY1ODQ2YywKLQkweDFmYTAzZTUyLCAweDNiYzgzMWQ5LCAweDg3YmMzZTUwLCAweGZhNTRkMjg3LCAweDdjYTdlMzllLCAweDEwMWZlMzY5LAotCTB4MDc2NTRmYzksIDB4YWRkNTkwNDAsIDB4MTdlNDU1NjgsIDB4YWVlZjM1N2UsIDB4YmE3YWE5NzEsIDB4NGIzZjI2ZDksCi0JMHgwZjZmNTg3ZSwgMHhjM2M4MDkyNCwgMHgwY2VhZDY5YSwgMHhhYzFiODdjYSwgMHg4YzlmYmJlYSwgMHg4OWJlYTYxNSwKLQkweDFlMjFiMTcyLCAweDJmOTQ2MTdiLCAweDA4MWM1N2RjLCAweGI5YTEzODg3LCAweDQ3YTUxZGM1LCAweGYwMWRmZmM3LAotCTB4Nzg0YWY5ZmUsIDB4YWZjYTY1MGYsIDB4MDliZjI5YjksIDB4YzYxYmViMjIsIDB4YjNiYjc5NmIsIDB4OTdjNDRjYjMsCi0JMHhhMzE3MGU5MCwgMHhhOTM4OTQyMywgMHgyNmRjODViOSwgMHhkZTk3YjdjYiwgMHhmNmFhMjcwYiwgMHg3YjZjOTdiNiwKLQkweDc1ZWQ3NDdhLCAweGQzZGRiYjRiLCAweGI3MGY3ZTQ3LCAweDgwMjdiMzdlLCAweDQzM2Y4NmVmLCAweDVkZWY3OGM0LAotCTB4Y2U4ZmJjYjcsIDB4Mzk0MjlhMzUsIDB4NWY5N2E4NDUsIDB4OTJiNjljMjYsIDB4Y2FmNmU4M2QsIDB4MjA5NjkyYTEsCi0JMHhmODEyNmRkZiwgMHhjYTBmY2NhZCwgMHg5Njc1YzM1ZCwgMHhlMWVmNmEyNywgMHhjYTFlZjhhNSwgMHhhYmU3ZDhhMywKLQkweDRhMGZiMmMyLCAweGQyMGU5YTZhLCAweDU3YjcyYTVhLCAweDM5ZTEwZWUxLCAweGYyMzZmNDQyLCAweGZmYTQ2NTkxLAotCTB4YWM4Zjk0YzEsIDB4OWM3ZjMxOWYsIDB4MTY5ZGRhYTAsIDB4MWZmN2JhYTcsIDB4MGFiYzc4NzksIDB4ZGZjNjIwZmEsCi0JMHhiYzVmZjcxYSwgMHg4ZjhjMmZmMCwgMHg5MTRlNDM4ZCwgMHg3YmVkOTc4ZSwgMHg3ZGVhOTlhNiwgMHhjYWIwY2ZkZCwKLQkweGRkMTFjNDMzLCAweGQ5NzY2NmVmLCAweDc3M2IzYzAyLCAweDVmM2E1MmNkLCAweDg3OGY1MWYxLCAweDNkNzVlZmUyLAotCTB4ODMyYTM2YTEsIDB4YzYyN2RkYzMsIDB4ZDdhZmY2YWIsIDB4M2Y3MGRmZTksIDB4NmU3YzRmMjQsIDB4YTY0ODdiNDcsCi0JMHhhN2NhOGIzYywgMHhlZjM3NjgzZSwgMHhhYjdmMjFiNywgMHg2MGQwN2VhOSwgMHhmNmFiZjE4NSwgMHg1OGZmN2E5NSwKLQkweDU2MWZlNDdmLCAweDE5ZjAzYmVhLCAweGE5NWRmODg1LCAweGNiNjJiZmQxLCAweDVkOTEzNzdkLCAweGZiMWJmNGFkLAotCTB4NmNhZmJkNDEsIDB4ZjZkNWNlZDQsIDB4MWYxM2Q3ZjgsIDB4ZTc4ZGRiYjUsIDB4Y2NhZmE5MWEsIDB4ZWIwY2ZhYTcsCi0JMHg3NWQ1MGYzMSwgMHhhYTViZmI3MSwgMHhkOGQ5NWY1OCwgMHgxZmZlZmM2NSwgMHgyNDk1ZjYzNywgMHg4MWJmMmQ2MCwKLQkweGQ3MmU0NzU2LCAweDRlN2YxMGNlLCAweGZkNTllN2Q2LCAweGY1NmRlNDM2LCAweDhiYTJjZGYzLCAweGM4YTc2Y2UwLAotCTB4ZjVkMWViZTIsIDB4YjYxZTdiMTAsIDB4ZDE1YjMxYTQsIDB4NDZlNTc1ZmQsIDB4YzNjN2Q1OGUsIDB4MzY0YmRmZmQsCi0JMHg3ODI4ZTg4OSwgMHhiZGQ1ODMyOSwgMHg3YWIzYWY1OCwgMHhkOTg4MWQwMywgMHg4NmNhMDE2YiwgMHgzZDdiZmI0MywKLQkweDQyNmI5MjI1LCAweGU3NzdhZjNjLCAweGZmNGY1NDg5LCAweDY3MDQ5ZDc1LCAweGY0ZmE1MTJjLCAweGRmOWFiZTdhLAotCTB4M2VhNTY1NTEsIDB4OTNlYzdlZTksIDB4ZWYyMTBlYzgsIDB4MzdiYzcyZTksIDB4ZmMwNWIwZmQsIDB4YWEwNDNmYjgsCi0JMHg5YWNlODYzZSwgMHhmMzNlNWQ1OCwgMHhlNDllNGVjOCwgMHhmZDUxOGZjZiwgMHgwMjY5OTZkOSwgMHgwZTFlNDYyMSwKLQkweGEzMDgwYzYxLCAweDRkMzZmNWY0LCAweGE5NzkwOTdmLCAweGYxNDRmZDg2LCAweGU0ZmRjMzJhLCAweDdlYzM1Y2QyLAotCTB4MmI2OTIzOWIsIDB4MGE0NTAxZTEsIDB4OGUyODRiN2EsIDB4NDhhNGVmYWIsIDB4MjBmNzBjNTMsIDB4NWZiOGZmODQsCi0JMHg0MzcxODlhZSwgMHg2NGMzOWNkMiwgMHgxNWNlMTVjZiwgMHgzNjkwZGU2YywgMHg5ZTc4ZDBiNywgMHg1ZjEzY2I1ZiwKLQkweDg3YjgzM2I2LCAweDY1N2Y5NTdjLCAweGU2NzVlODM2LCAweDdlOWUxMTgwLCAweDEwOTIxZGI0LCAweDM5YThlM2FmLAotCTB4MDBhMTZlNmUsIDB4YzEzNjI1ZDUsIDB4ZDVjYTVkZjgsIDB4NGMwMjYyZWMsIDB4ODYxYmNjMzAsIDB4OTYxY2VlZTUsCi0JMHgwOTQ1ZDkyYiwgMHhmNzIwYzhmYywgMHgxZWExYjk3OCwgMHgzNDM0ZGQ1OCwgMHg0MjJhMjljMSwgMHg3ZDYzMGY1NCwKLQkweGQ0NjdmOTQ2LCAweDI1OWZlNTE4LCAweDdlM2RlNTFiLCAweGQ5ZGU1MTg1LCAweDVmNzk0NjRkLCAweGFiOTQ2MmRkLAotCTB4Y2RjYTMxNWIsIDB4ZTFhNjcxYjMsIDB4NGFmNmM0ZmMsIDB4ZjM3OTNjMDMsIDB4ZDdmMzg2MGQsIDB4ZTAxODE3ZjgsCi0JMHgzNzZmZGJhOSwgMHg3MWQ2OWY5YywgMHhhMGJmNjFhZiwgMHg1ZjYxOTU2YiwgMHhkOWNiYjNiNywgMHhkNTgxYjVjMSwKLQkweDAyNjZmNjcxLCAweGEwZWMxNWQzLCAweDA2NDNmMGU4LCAweGZmN2FmMTdjLCAweDEyYWFmODMxLCAweDQ3YTVjZTUxLAotCTB4NDhjMmRlNTEsIDB4MTQ4NDcwM2IsIDB4NmYxODc4YTAsIDB4NTdmYWYxMDcsIDB4YWFkZmY0ZTIsIDB4OTNmNzkzZTUsCi0JMHhlZTRlM2VjZSwgMHg4ZjQxMmYzYSwgMHhhMGJjZGE3ZiwgMHhiMWZhYzJkYywgMHg1NTY5MGE3ZiwgMHhjYjU2NzQ4OSwKLQkweGFmMmQzZTZiLCAweDY0NGRmNmMxLCAweGE5NzNlMDI0LCAweDBmMTQxOGIwLCAweDNjMmIxYzUyLCAweGJiMjJhYmU5LAotCTB4MWQzNTBlMmMsIDB4ZTRhMGY2NDQsIDB4MzI1NTdiNmMsIDB4NzA0MDk3OWQsIDB4NGI0NzUzOGQsIDB4NTI5NmZlNzQsCi0JMHg3MmIxY2MwZSwgMHg4ZjM2Njc0MiwgMHhhMTcxY2E4YiwgMHhlMzI3Y2FkMiwgMHhmZDZmYjJlMSwgMHg1NGVjYzk2ZCwKLQkweGNmYTdjMzNhLCAweDM1NTJiODdkLCAweDFjOTdjYzZmLCAweDQ3OTE4ZTYwLCAweDRmOWVhOTQ1LCAweDVkNWU4Y2JjLAotCTB4MDg5Y2ZhZWUsIDB4NTJiMDdkZWIsIDB4ZmJiMjZmYmQsIDB4ZDVhM2RjZGIsIDB4OWU2NmUyMzcsIDB4YWIzMjVmZDUsCi0JMHgzMjcxMGVjNywgMHg2YWRkMWY5YiwgMHg3ZDkwZTYwZiwgMHg1ZjkwYzk5ZiwgMHgzMTdjYzVjOSwgMHg1NjA1MTI2OCwKLQkweDM2YTE3MWJmLCAweDhjNGMyYTYyLCAweDZlNTJmMjUxLCAweDlmNTEyZjliLCAweGNkMmFlZDg2LCAweDhiZjIxNzI3LAotCTB4NDY1ZTJiZTcsIDB4YTI1NDJiYmUsIDB4YjdmNGM1YjYsIDB4OTlkZTU3MjcsIDB4NzM5ZTc5NGIsIDB4YmJjMjJmYWQsCi0JMHg5NzNjY2ZlZiwgMHg5ZmNjNzk0MywgMHhmN2EyZWQyYywgMHgxOTIxZTc4NywgMHhkOWM2MTdjOCwgMHg0ODUwNDk5MCwKLQkweDFjNDNjYTA0LCAweGQxY2UyZmViLCAweGZjNjIzMzIzLCAweGU1ODVhMzc2LCAweGFkZmFkMDJiLCAweGU5MzkzNTNiLAotCTB4MGQxMmQ2ZmQsIDB4YjEzZTJmNmYsIDB4OWRmOGUzMDIsIDB4M2M5ODg3NWQsIDB4YjQwNzMzNmEsIDB4NzQ0OWFkM2UsCi0JMHg0ZGY3ZmJlMSwgMHhiZjUyMTY3MCwgMHhhODkxNTIwOSwgMHhmZjdhZTlmNiwgMHgzZWZmOWUzNSwgMHg1N2VmNTU3OSwKLQkweDM2YmU3NzJmLCAweDA3ZDBkZmIzLCAweDUxYjQ4ZWMzLCAweGYzZjE4ZGU3LCAweGVhZGYyOGFjLCAweDI1OGZiZGZiLAotCTB4ZmJkM2ZjYjAsIDB4MWY5YjM2NTgsIDB4NjQxZmRmNDYsIDB4OWIzYjgxNzMsIDB4YzdkODMwM2UsIDB4MWIxZjJkZGQsCi0JMHhlNTFlZWVlYywgMHgyODdlYzMxMywgMHg4ZjE5NjIzZCwgMHg2NGY2ODdmYywgMHhlNTAzYjljZCwgMHhhZGI3N2U3NywKLQkweGQ0NTBmYTg0LCAweDRjNmU3ZjU3LCAweDYyN2ExYzlmLCAweGY3YzI2Y2YyLCAweGM3M2NmOWJmLCAweDE3NTllOGU4LAotCTB4OWQzNGYzNjQsIDB4NGVlYmQzY2YsIDB4MmViNDM4MzIsIDB4M2U3OGQ2YzQsIDB4NWY1NWJlZjUsIDB4M2M4MzdmYWQsCi0JMHhjMjI3ZWEzMywgMHg5YjQ3MTE4ZCwgMHhkNDc5ZDRjMywgMHhkNjY3YmViYSwgMHhjM2NhNGFiOCwgMHhiMzU2ZDkzZCwKLQkweGUxNTI0ZWJhLCAweDBhYmI1MmFjLCAweDZiNGI5OWNmLCAweDQ4ZGNlMmQ4LCAweDA3MGY2YjdkLCAweGQwZjY4NzEyLAotCTB4OTc4NWQ1N2IsIDB4Nzc0NGY4YWMsIDB4NTBmNTZjODYsIDB4YjkxOTVhNWQsIDB4NDgyYjczNDAsIDB4ZTM3OWIxMGYsCi0JMHg0MWQ5NTRkMiwgMHgwNjJjMzlkZiwgMHg5ZDE5NTJiMywgMHgzODNmYTg5MywgMHgwMzVlNTI2YiwgMHgyZjI1MDE4YywKLQkweGY1M2U3MWZlLCAweGFhNDk4MzAxLCAweGY4YmUyN2RkLCAweGU5MDU3Y2RjLCAweDk3YzUyNTdlLCAweDBhNDBmNzRjLAotCTB4OTRlNzYzNTksIDB4ZmE4NTljZmEsIDB4YzI1M2VhNjIsIDB4ZjBjZDc1MGUsIDB4Y2M4ZjhjNzAsIDB4NDc4YTc1YjgsCi0JMHhkM2Q3NTc4ZCwgMHg5YWY1ZWY4YSwgMHhlNDcxMjZkYSwgMHg4MGRhY2YwZiwgMHgwN2U4YTdlNiwgMHg0MzE3ZDUxMiwKLQkweDFmYWE2Y2ZiLCAweDcwOTIwMTk4LCAweGRiNmVjY2ZmLCAweGUzY2Y2NDBiLCAweDVmYWE2NjkwLCAweDdkNjM1YWIwLAotCTB4YjY1YmUxNDEsIDB4N2QwOWM1MDAsIDB4MTFlZTkzM2UsIDB4ZmJjNWU1N2UsIDB4NmMyZDdiZTksIDB4Mjg5ODMwMGUsCi0JMHhkNzdmOTA5NCwgMHhmNTYwMWQyNywgMHg1OTVjODlkNywgMHgxNWY5YjBmMiwgMHg3YTNmMTQ0OCwgMHg2ZWI2ZDhmNywKLQkweDM5OTFlNzUyLCAweGFmZmYxMjBiLCAweDBmMTJiODczLCAweDZhNDIzM2ViLCAweGUxY2RhOTVkLCAweGY5YWJiZTc0LAotCTB4NDNkZjE5YzcsIDB4N2M0MDZkOWIsIDB4N2MxYTVmOWUsIDB4NGVlNmNiY2EsIDB4ZDlkMTBlNjIsIDB4ZDZlOTUyNmIsCi0JMHhkM2Y5ZDVlOSwgMHg3M2JlODhmOSwgMHhlN2Q1YmI2NSwgMHhkNzc5ZDE0OSwgMHgwN2U0NDk4NiwgMHhjZTc1NDcyOCwKLQkweDJmNzc3M2M3LCAweDdkZmVlNTE4LCAweDdjYjJiZWJhLCAweDU1OGY4OGYzLCAweDJkYmNlYTRkLCAweDA3ZjZmN2FhLAotCTB4OGVkZTkxNGYsIDB4YmIxYzU5MzgsIDB4M2U3OGZkZGMsIDB4NjExZmY3ZWIsIDB4ZWYzZTQwZjIsIDB4Zjg2MmZlMjIsCi0JMHg5OTg5ZTI1YywgMHgzZWVmOWUwYiwgMHhmODU3OTRmMSwgMHhiMzg1ZmNlMSwgMHhmODc4ZjlkNSwgMHgwMjM5OGI4NSwKLQkweDc3ZGZhZmRlLCAweGM5ZDkyNGU4LCAweDZlM2MxY2YwLCAweDgzMWI2ZDhlLCAweDY4ZWE2NTdkLCAweDBhY2M2YmYzLAotCTB4NGQ5MmY1MzEsIDB4NmNjMTNmYmYsIDB4OWYyMThmYmMsIDB4ZmM4YmFjZmMsIDB4NWQ4OWViMTEsIDB4Zjk0MjFmNWEsCi0JMHg5ZWI2ZTI5MiwgMHhiMWQ5NzcyZiwgMHhlMmRmNDU0ZiwgMHhiOGIzNmY0MiwgMHg4ZWM5Nzg0ZCwgMHhjYjBhNzNkNywKLQkweGExNWNmYTViLCAweDQ0YmNjMzhkLCAweDU5OWI5NjNhLCAweDc2YWZlNzNjLCAweGJiYTc2NDhhLCAweGQ0ODJmNmQwLAotCTB4MDRhNTlhZDcsIDB4ZWI4ZTNmMzYsIDB4ZTRkYmQ3NmYsIDB4ZDY1ZWM5NDcsIDB4NDE5OTUwN2MsIDB4M2JlNzZmZmQsCi0JMHg5NTdkNjgzNywgMHg2YmE2NGY5YSwgMHhmMDlkMzlmNiwgMHg2NGRlMWYxMywgMHgzNThhNTc5NiwgMHg0ZGVjNGFmYSwKLQkweDMzMjFkNTNjLCAweGY5ZDVlMTQwLCAweDc4OGYzNjgxLCAweDhmZDY2ZGVjLCAweDc3NTcxN2ZkLCAweDFjNzBlYTk5LAotCTB4MDAwMDFjNzAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDc5OTMzMzFlLAorCTB4MzFlNDI0ZTQsIDB4MWU0ZTEwODEsIDB4MDMwODY4MjAsIDB4Yjc4YTg4ODQsIDB4ZjYzMDEwMjcsIDB4ZDU3ODc2ZDIsCisJMHhhZjBlMmQ1OCwgMHg2Yjg2ZjIxMCwgMHg3ZmI2YmQyZCwgMHg3ODQ5MDgwNiwgMHgxMTFmYzFhOCwgMHgyOWUxZDVhZCwKKwkweDMxMWQ4MmY2LCAweDAzODhiNjIyLCAweGJkYWJkMjI4LCAweDU1N2M1ODM3LCAweDBiZDExZmViLCAweDJhNDQ5MDhhLAorCTB4ZTViNWVmNmEsIDB4M2VmNmI1ZWUsIDB4MDk5MzljYzksIDB4YWZkYjdiMDQsIDB4N2NmZGZmZmYsIDB4YzdlY2VlOWYsCisJMHhmNWVkN2JkOSwgMHhmZGFkNmJkYSwgMHg4MTMxYzkxOCwgMHhlNDIzMGRhNCwgMHgwNmZiZmMyMiwgMHgxMDlkOTIyMSwKKwkweDlkMzdhMTMyLCAweGQ3MjEyMGUzLCAweDY2OTI0MjE4LCAweDkyZGRmZDJmLCAweGJhZGM0MjE0LCAweGEzNDliZmUyLAorCTB4ZTRmZWJiYTksIDB4NWY1ZjlhMWEsIDB4YTRhZmYwZWMsIDB4NGQxZjViNGQsIDB4MmQwOTZhNzgsIDB4MmZhMWVmYmYsCisJMHg3Y2QwNGZjMywgMHhhZDc5ZWNmYSwgMHhjZTdlYjRjNSwgMHg1ZDBmYzkyNCwgMHgxMGFiMWExZCwgMHhkOGU3ZWQwMiwKKwkweDUyMDE3NmMyLCAweDkwOTdlNTgxLCAweDkyN2ZhMTMwLCAweDQ1ZjhlOGFmLCAweDlmZThiODg0LCAweDM3ZmU5NzI0LAorCTB4YTViMjFjODksIDB4ZDFlNDNlNjAsIDB4OTkwMjllYTAsIDB4MzEzNjQ4NDYsIDB4N2U2MDU1ZmUsIDB4ZjUwOWZjMzYsCisJMHhkMDY3Nzc0NCwgMHg3NzllNzVlZiwgMHg3ZmVjMTNlNSwgMHhkYjBhNWY4ZSwgMHhmMjczNDdlOSwgMHg0ZGM4NzIwMywKKwkweDZkMDhjNmQzLCAweGZiMWRjNzQ5LCAweGY5MDgzOTVkLCAweGU0OTkwY2MwLCAweGQ4YjY4NzYzLCAweDBmY2E2ZmZlLAorCTB4ZDIxNDc1NGMsIDB4MDgwYjY3ZmUsIDB4NDlkOWY5ZmYsIDB4Y2M4MmRhMzYsIDB4M2JlMWVkYTYsIDB4MWExZjRlMjIsCisJMHhkOTlmNjdjYywgMHhlMGRmYjhlOCwgMHg0MGRmZGRkZiwgMHg1ZmMwYTdmZiwgMHhlNWExMDk0YiwgMHg5ZTBjMWNjYiwKKwkweGM1ZDlkOWU0LCAweDE5ODljZTMwLCAweGJmNDMxNmQ3LCAweDMyMTNhNjczLCAweDlkNGQ1Njg4LCAweDQ0OTBmNjNkLAorCTB4ODkxYWViZjMsIDB4Y2RkYjRlZGYsIDB4Y2YxYzBkMjksIDB4Y2JmOGQ5ODEsIDB4ZTgwMjkzYTcsIDB4NjBlZThlOTcsCisJMHhmZmM0NWY3ZCwgMHg2NGVmMzhlYiwgMHhjYzNmZGUzZSwgMHhmYTEwMmIxZSwgMHg4YTk3ZjY0MSwgMHhhMDcyNWRhOSwKKwkweDRiZDE1M2Y5LCAweDJkMDU2YTQ4LCAweGVlNTMxOTFmLCAweGQwOWE3NjlmLCAweGU2ZTllNGYyLCAweDcyMTM0MGY2LAorCTB4YzQyNTIxMWQsIDB4MWFlYTcyOTMsIDB4YzkxNjc3ZmEsIDB4YWQ0MjI4YmEsIDB4ZWU4YzBiNmEsIDB4NGE2YjBmZTUsCisJMHgyMmY5ZmRmZiwgMHgxMmZhMDFkMCwgMHg2YTFmZDZmYiwgMHhhMGU5ZTk5YywgMHg3YjM3NWFmOCwgMHhmNGQwODc5NiwKKwkweDBmMmNjMGY1LCAweGQ5ZjVlZmUwLCAweGQ2OGYxMGIzLCAweDY3NjY3M2Y2LCAweGZiNWUwMjI3LCAweDA2ZmVlZjFiLAorCTB4ZmEwOGQwM2EsIDB4YjViM2M3M2QsIDB4ZWE0ODkwN2UsIDB4MzlmYmY0MjMsIDB4MzFjM2QxM2EsIDB4OTMwMWRmZmQsCisJMHgwOTY0MjU0ZCwgMHhiMzRkMWIzMCwgMHhkMmE2ZDUyNSwgMHhlODhkNmNmYSwgMHg5NWUzMzg5MSwgMHgzYjY5YjEwMiwKKwkweDI4OTk0OTkyLCAweDBmZjM1MmUzLCAweDI2MzdiYjYxLCAweDcxYzM0YWQ5LCAweGVmMDc3M2U2LCAweGI4MWE1NWM3LAorCTB4NmZhNTBlNjcsIDB4NzUxMjc0ZDYsIDB4MjkxMmJhNTEsIDB4NzVlMmM2YWEsIDB4MWE1NDhhNWQsIDB4ZGRjNzAzOGUsCisJMHg2ODQyNWUxYywgMHhlMWMwY2Y3YiwgMHgwMmQ4NjU3MSwgMHg0NzMyOWZkMCwgMHhmNWMyYzQwYywgMHg0MjY3ODAwMywKKwkweDRjYTI0YTZmLCAweDE4ZjhlNmVlLCAweGZiYmY3MmZkLCAweDMzOGY1MDZjLCAweDhlMDBiYjhmLCAweGVjYWE5MDA5LAorCTB4MGM4ZjBlM2IsIDB4YjIwMTkzN2MsIDB4NDNmYzgyOTYsIDB4ZTAyNDYzYzIsIDB4YjkxZWNjZmIsIDB4ZTUwNzAxMjQsCisJMHgxN2YwYTE4ZiwgMHhhNDJkYWUxNSwgMHgxNDEyZDQ3YiwgMHg0N2VjNTZiMiwgMHgwMzI0YTRmNCwgMHhkZTExNTdiZCwKKwkweDRmNTEyOTBmLCAweDQyMTU3ZTUxLCAweGQ3OGI4NGFiLCAweDEyOWU2YTVjLCAweDM1ZjA2NTM5LCAweDE5M2JhOWYwLAorCTB4NWUxY2JmYzcsIDB4ZTUxOGEwNDgsIDB4ODhkNDMxNTIsIDB4ZTMwN2MwNzgsIDB4ZWQ0ZGY5MmIsIDB4YmFjYmE1MDIsCisJMHg5NDdlZTVkMSwgMHg5MDIxOGE2ZiwgMHhlMTdlNDMzMywgMHgzYmY0NTdkZiwgMHhiZGNjZmYzNywgMHhjYTkxZDI5YywKKwkweGQzMzk2YjkxLCAweDJjZGY4YThmLCAweDhlOTJlYjY3LCAweGM4MjAwOGI1LCAweDBmNDliOTY0LCAweDQwMjQxMjEwLAorCTB4ZWI2ZjAzNzcsIDB4YmM3OGEyYmUsIDB4ZmI1YmJmMDQsIDB4ZTdjODZmZGQsIDB4Yzk5ODMyNjAsIDB4MDUzZjkzMjcsCisJMHg3OWJkMDdmYSwgMHhmMDA3N2VkMywgMHg1ZWRmM2FmNSwgMHg1ZDZiY2MwNywgMHg3YTgyNWVmZSwgMHhlOGM3ZDM4YSwKKwkweDVkYWY5NWQ3LCAweDgxZDZjZTUyLCAweGVlODA4ZDdjLCAweDllYTc0OGMzLCAweGM2YTdkMWYyLCAweGE2NzY3ZTAyLAorCTB4NzQ4YmY3MmEsIDB4MDg5MzNiN2UsIDB4NmI3NWQ5ZWEsIDB4ZDAyYjc4NDgsIDB4YjVlNTk0YjUsIDB4YjVlMTY5NmYsCisJMHg5ZDNiOGU3NCwgMHhkNjk4YmViYywgMHhlZDA2YmNkMywgMHgzYWRiYmVhOSwgMHg2ODg3MGI0OSwgMHg4ZDhiNmI3ZSwKKwkweDg1YWIxZmI1LCAweDMxMWY5YTQ1LCAweDhhMTQ4NDkxLCAweGMyYzU2ZDRmLCAweGJlNWE0ZTk1LCAweDE3ZWFhMzc1LAorCTB4MzRmZDVlYjUsIDB4MmQ2NzI1YTIsIDB4ZGViMmRmYjQsIDB4YmRmMDBhYTYsIDB4M2IyM2FkOGYsIDB4NDQzODQ5ZjMsCisJMHgzOWIxZGZjNywgMHg2OTIzOWJmOSwgMHhmOWIyMTQzZSwgMHhmMjRmZDM4NywgMHhkOTQ1ZmFmOCwgMHgwMjI4NDRhNSwKKwkweDljM2EzMWI0LCAweGFlNWM3OTIxLCAweGE5ZTUwMjA0LCAweDdlY2I3Y2JjLCAweGE0OGViZmZmLCAweDVkMzYzZGYwLAorCTB4NDVhMGFmZjIsIDB4NGNjZmQ2M2IsIDB4NzY5ZTI4ZDAsIDB4M2YwNDgxNjgsIDB4YzBmMDdmNGQsIDB4Y2NlZmNjN2MsCisJMHhkZDAwMjYwYywgMHg5ZjljNmU3NiwgMHhjMGYxNGMwMCwgMHg0NjFiOTllNiwgMHhkMjYxN2I0MSwgMHg2Y2U5MWQ2MSwKKwkweDFmNDdmZmQ2LCAweDAwZWMzYTI4LCAweDllOTk0YjM4LCAweDdlMGQ2YTRmLCAweGJjZjlhMjUzLCAweDg5YjkxMjQ5LAorCTB4YWRjZjIxNGUsIDB4MWZkYmRjMjEsIDB4NGY1ODExYjIsIDB4OGI2ZGU4ZmIsIDB4Y2RkNDRlYmUsIDB4YjRlYjU3NzksCisJMHg1ZDdmODE4ZiwgMHgyMDA5MTYwZiwgMHg4NjM1M2JkYSwgMHg5MjM3NDFlNywgMHhiZWVjOGFmMCwgMHhjODVjZWZlMywKKwkweDVkMjkxM2VhLCAweGJmMmUwZTgwLCAweDk2Njc1OTYyLCAweDQ3NTZmODVhLCAweDNjNzE3MDc5LCAweDFjNzU1YWI5LAorCTB4ODk3YTQ4OGYsIDB4NTc4YmQ2OTAsIDB4NjI0NjlmZmEsIDB4ZjA3YWU5ZjAsIDB4ZTlmNTgxMjgsIDB4ODE2M2U3OGEsCisJMHg3Y2EwNWQyNywgMHg5Y2FiODMwZiwgMHgxYzFlYjllZiwgMHg2MzU3Y2FmNywgMHgyMWIxZjFlMywgMHg3ZmEwMWVlZiwKKwkweDYxNzdjNTIyLCAweDUwZWIwNDI0LCAweDBhMjQ2MTdhLCAweDU3YzllMmZjLCAweDlhMGJiMDM0LCAweGM1YzkzMTA5LAorCTB4N2NmYmQxYTEsIDB4MTMzNzIwMWQsIDB4YWY1ODNlMjIsIDB4ODM3ZThkZDcsIDB4ODE1NjhmYzksIDB4NmZlNjMwZjgsCisJMHhiN2U0ZjdiNCwgMHhjMWZiNTg5MywgMHhmODcyODdhOCwgMHg2OTc4NTNjZSwgMHhjYjg3YmIzOSwgMHg4NDdmNGY1OSwKKwkweDczMjQ0N2FkLCAweDRmNzVjMjFjLCAweDVlNzU2MWUxLCAweGM4NGM3ZDFjLCAweDk3Y2I5NDBhLCAweDgxN2FlMDQ5LAorCTB4ZWRjZGRlYTYsIDB4NmMwNmE3NTEsIDB4NzkwMGRmYWUsIDB4OTEwMjQwYjcsIDB4MTM0ZGRmMzgsIDB4NDJkMjdhZDgsCisJMHhlOWEwNWQ3NCwgMHgxNjJmNDRhMywgMHg2NjRiOWQ3MCwgMHgyZWIyZDdmYSwgMHhiYzlmZDFmNSwgMHgxNmU5MTY1ZCwKKwkweGQ0NjhkZjQwLCAweDg3MzQ4MDNlLCAweDIzY2QzMWY4LCAweDkyNDc0YzAxLCAweDI2YWY0YzU2LCAweDQ5ZjM0YzExLAorCTB4YTQwNWE2M2IsIDB4YWY0MzUzMWIsIDB4NDIyYTg5ZjgsIDB4ZmFjNGM0N2UsIDB4YTRlNzIwYzksIDB4ZTU4YjYzZGEsCisJMHgzMjY0ZDBiYiwgMHgzY2NlM2ViMiwgMHg3Mzc4MmQ5YSwgMHhmOGViZjg5MCwgMHhlNzVmMDIxZCwgMHhmYzhhYTY0OCwKKwkweGYxN2FmODQzLCAweGU4MThiMDZlLCAweGZjMjg1NGM1LCAweGVmY2NkYmJiLCAweDBlYmUyNGUyLCAweDY5M2RlYTM4LAorCTB4ZGQzMzU3ODAsIDB4Y2Q1NDU0OGQsIDB4ZjA2ZDVhN2MsIDB4MWMyNDQ0YTksIDB4YzQxZjMyYzcsIDB4ZDZiOGNjNjMsCisJMHhmYjczNTZmZSwgMHg5YzlmOThjNiwgMHg0OTFmMjNhMiwgMHg1MGNmNjY2ZSwgMHg3MWJkZjQzOCwgMHgwODI4ZDFmMCwKKwkweGFiNDE5ZTdjLCAweDI5YjIzYWRjLCAweGI2NDk0YmJmLCAweDZiOWE1YWM4LCAweGU4NzY0Zjc0LCAweDg5M2YyZjM4LAorCTB4N2NlYjY3NDcsIDB4YmUyYWYwYWMsIDB4YTliM2MxODEsIDB4Y2IwYTllMDcsIDB4YzI5N2ZhM2EsIDB4ZmVhNjRmZjMsCisJMHgxZGIyNGNhNCwgMHg4NmEyMGJkNiwgMHhiYzU2ZGU3MCwgMHg0MmRlZjlmNiwgMHhkMmU0ZmU4ZiwgMHg1N2Q2Njk5MSwKKwkweDAyZDc4YTRhLCAweDA2OWY4NTg3LCAweGUzN2M3ZjY4LCAweGU0N2ZlYTRiLCAweDIxMWJmYWMzLCAweGE5ZWMyYTQxLAorCTB4ZTYwMTAxZjksIDB4MWE0MGFkN2YsIDB4Yzg1ZTI5MTMsIDB4YTBlZGEyNjgsIDB4NmFmNWNkNzAsIDB4Njk4YjhlY2MsCisJMHg5MWY0MTkzNywgMHg3NGM5MGI2NiwgMHhlZTkyY2ZiZSwgMHhlNDNlZDAyMywgMHhmNDFkOTEyNywgMHg2ZGYzNjdiMywKKwkweDdkNjk1YmE1LCAweDYzYjY5ZmFhLCAweDFlNDAwNWZkLCAweDBiNmQxZGFlLCAweDlmZDFiOTQwLCAweGY1MzI5ZTRlLAorCTB4MTEyZWZkNDcsIDB4ZTgzNmUxZjAsIDB4ZTRjM2YxNjMsIDB4MWZiNDM2YjEsIDB4NmZhMjdjOTUsIDB4Yzc1ZjIzODksCisJMHgxZDE1N2NiOSwgMHg5ZWIwZWE3MSwgMHhiMDk0Y2FiOCwgMHg4ZmZhMWIzMywgMHhiNTNlNDMxNCwgMHg1ZDYxZjg5YSwKKwkweGU2Y2RkNDlmLCAweDMwZTFjNjUxLCAweDU5ZmE5ZGU2LCAweDZhN2UwMDQwLCAweGMwM2IzMWY3LCAweDNmZDA0ODU1LAorCTB4NzRkYTMyNTQsIDB4YjRkZDFmZjAsIDB4N2U0MmY1MGUsIDB4NTA1MzE3NTQsIDB4ZDgzZmEyM2YsIDB4NWYzZDllMWYsCisJMHhkMDBiZWQzZCwgMHhiOWQ0N2Q3ZSwgMHg5MmJlMDc2YSwgMHg5ZmEwZTlmYywgMHhjODU2OGY1NywgMHhmOGJkZmE2MCwKKwkweGZmZjYzYjNiLCAweDE4NjJhN2I5LCAweDQ3Y2Y5OTg5LCAweDBiYjFkMTBkLCAweGE2NzBjMWE5LCAweDY3YTYxOGUxLAorCTB4ZWQzMWRhMWIsIDB4ZDMwYjc4NmMsIDB4NTk0YWU5ZmUsIDB4ZWJjZWRhOGUsIDB4YzBkN2UyN2UsIDB4M2YwZjEwMWUsCisJMHhjMDBmMzQ0NywgMHg1Yzc1ZDUxZCwgMHgxMmEyMWMxNywgMHg4MjgwMmViMywgMHhkMzZmZmYwNiwgMHhkYWYwYmNkOCwKKwkweDA4NmJjNDZjLCAweDY3ZDU0ZGU2LCAweGUwMzY3ODc4LCAweDllMDAwYTViLCAweGMyMjIzODg3LCAweDc3ODY3Y2QyLAorCTB4MDFkMDNmYzAsIDB4M2M4ZThiY2EsIDB4NWNmMTAyYjcsIDB4OWUwMmM2NGQsIDB4MGNhNGM5MzcsIDB4MTNlMDNjZjQsCisJMHg4MjdkODlkNiwgMHgwMzgwMGVlZCwgMHhmZTY5ZjNmMiwgMHhjMWZhOGZmYSwgMHhmNzg2NTlmYiwgMHg5ZTI5OTc4YywKKwkweDRiNDk0ZTAwLCAweDhlYWRjNjY0LCAweDkxM2I5NWYyLCAweDI3ZDcxMjBiLCAweGY5OTI3YWJkLCAweGJkZjZiZGQ5LAorCTB4Y2YwMGVmZjYsIDB4YWM4OTQ2OTYsIDB4NjhhNmJjODUsIDB4ZjdiNzExNGEsIDB4MTU4MjRhNDEsIDB4ZGNkZmMxZDMsCisJMHgyOGZkM2U1NiwgMHhlMmI5MGJkOCwgMHg1YTY0ODc1NywgMHgzYTVlYjQzZSwgMHg0ZjIzMTFkOSwgMHhmZDc0NjU1OSwKKwkweGIwYzI3NmE0LCAweGVjZjJlNmU1LCAweDA3NGYzOTkwLCAweGI3MzQ3ZjQwLCAweGM0M2U1Y2M1LCAweDg3YWVmNWM2LAorCTB4YWQxZTQwNzgsIDB4ZThiNjVhZjMsIDB4ZDNmZDcxNTcsIDB4ZWEyNDBkNTUsIDB4MDJmMjYzOTYsIDB4MTc5MWE3YzMsCisJMHg0MjNiMTNiYywgMHg0NmNiN2U3NCwgMHg0YzAzOGMxMSwgMHhiM2Y1YjFiNywgMHg3Y2EzYmUxNSwgMHhkNzRmMmY3MSwKKwkweDUyMzFmYTViLCAweDQ2ZGJhMjY5LCAweDE5M2QzMGM2LCAweGRkYmE3ZDZmLCAweDQ2Y2UzYzU2LCAweDRkYjA2YmZiLAorCTB4NzJhMzY3MWUsIDB4MDQyMjkyZTQsIDB4NWI5Nzc3ZWMsIDB4OTNmOWUzZDEsIDB4OGUxMjZkZDMsIDB4ZWJiNTIwOWYsCisJMHhmYmFiODUyMiwgMHg0YWRmZTIzYSwgMHhlZTRjYmVmMSwgMHgyYzdjODI4ZSwgMHgyMWZjZDYyYiwgMHgzMGZlNDc1MCwKKwkweGQ1MTI2M2NhLCAweDE1ZjY2MjYxLCAweDcwMDI1M2MxLCAweDZjNGE3ODUwLCAweGZiMDQ0ZTM4LCAweDA3MzhhNmU5LAorCTB4Y2M5OTdkZmIsIDB4NGEzNjVkZmEsIDB4ZjYzNzY4MjMsIDB4MzY1NWU3MDMsIDB4ZDgwY2UxMTksIDB4MzRmZDA5MDQsCisJMHgxNTU1OTc0ZSwgMHhhMzRkZjczOSwgMHg5ZjU1NGVkOSwgMHgyNjY3ZmQwNSwgMHg3OGMxNjcwNSwgMHg3ZTZmYjk0NiwKKwkweDE5NjNmYTI5LCAweDJiZjRjY2MzLCAweDAxNjdkNDc3LCAweDIyMDY1NDdmLCAweDRlN2Y4MGQzLCAweDkyNmM1ZjdiLAorCTB4MzZiN2JjZTksIDB4ZjE0NGJmMTAsIDB4NzAyYjllZmYsIDB4NzM1N2Y0MWIsIDB4YjAwOGZkN2IsIDB4NWUwNmRmN2YsCisJMHgzYjJhMDA5OCwgMHhhNWFjN2E4MCwgMHhhMjVmYTU2NCwgMHgxNDg5NzJlNSwgMHhjYTNmMjk5NSwgMHgyNWJmMGYxMywKKwkweDJhMWE0MDE3LCAweDkzOGIzODg2LCAweDQ3N2QzM2Q0LCAweDM1MjI0YmY1LCAweGY1MjMxY2JkLCAweGEyN2UyMThmLAorCTB4NzJkMDNjODAsIDB4NjAyNTZmNTUsIDB4ZGJhODM4MGYsIDB4ZWY4NjMyNzAsIDB4MWU3MzRjOTQsIDB4N2NkOGZhNmMsCisJMHg3MmUzN2E3ZiwgMHgyN2U3OTgyOSwgMHgwOWZlMDM4NywgMHg0OWRkZTlkYSwgMHgyNjkyN2ZjYywgMHhkZTAwMGJmYSwKKwkweGE2ZmZhZjdiLCAweGM0ZmNmMDA2LCAweDY3ZjkzMzY2LCAweDVhNGQ3ZjU2LCAweDc5Njk2ZmZlLCAweGZlZTI2ODEwLAorCTB4ZDVmY2I0YjYsIDB4ODBmMWJjYjQsIDB4OTc5YzU2OTcsIDB4OTQzMmNhNjMsIDB4MjRmMDA1MGIsIDB4YmYwN2Y5MzIsCisJMHhlNDFkNjdiZSwgMHhjZjViZjg3OCwgMHg1NzJmNThkYiwgMHhmODM1YmMzNywgMHhhNzIwZTFjMywgMHhhNDNmODMxZCwKKwkweDA1MmQ1OWM0LCAweDNlNDJmZjkxLCAweDFjMjhiNWYwLCAweDA5OGY5OTkyLCAweDYyMTM0Zjc4LCAweDE4MTc2ZTUyLAorCTB4NWE5YzliZjYsIDB4ZGM5NDc0ODgsIDB4OTg4ZWE5ZDIsIDB4OGZjMGRkZjUsIDB4YzFkZGZjYjIsIDB4ZjQ4NzhlMWYsCisJMHg3OGFkNGM2ZCwgMHgwMTIwYTQ1NSwgMHhkNzY4ZDAzZiwgMHhlMDE4YjcxMywgMHhlMjM0ZWZmYSwgMHgxZmM0NzlhOSwKKwkweGE0NzMzOGE1LCAweDdhNmE3OGIwLCAweGYzMGEyODVlLCAweDA5ZmQ1MjcyLCAweDIzM2RkM2ViLCAweGYwYzU2YjVmLAorCTB4M2IwZmM1ODEsIDB4M2YyMGFkOTQsIDB4NjFiNjhjYjQsIDB4Nzg2NWIzNWMsIDB4ZjkwMjkwZTQsIDB4ZDE0MDZhMGMsCisJMHg1ZGNhNjc3YSwgMHg0YzZkODgyMSwgMHhlMzdjNjNjZCwgMHhkNGY1YjNmNCwgMHg3ZThjM2MzNSwgMHhiZGJmYTE5OCwKKwkweGFkNWUxZjFjLCAweDY3YjNmNTFjLCAweDMxZGVkOWEyLCAweDJiMjcwMWQ2LCAweGRiMzZmNGEyLCAweGE2OTRjZTUxLAorCTB4YmU4MmM1NGYsIDB4OWI1MzlhN2UsIDB4NjllNTFhNzYsIDB4MjMzZmI5YTQsIDB4ZTM2ZWQxZGUsIDB4Yzk2YjhiZjEsCisJMHg1OTM3NjhiNSwgMHhlMWZkMTJlMiwgMHg3MWY4NmJjZCwgMHhkY2JjZDkxMywgMHhmYzE4NDlkMywgMHg1MTg5ZjRlNiwKKwkweGNmZDc5YmM0LCAweDliZDg2NmYwLCAweDliYmYzZTFlLCAweGZjMDQyMzRhLCAweGYzZjg5ZWJlLCAweGViNmYwY2NkLAorCTB4N2ZhMjhiYWYsIDB4MjllYzdlYjcsIDB4ODViZDY3YjQsIDB4Y2UzZjI2MWQsIDB4YTFjYTFlZjgsIDB4NzZjNGZjZmUsCisJMHgxOGY2YTFhOCwgMHgyMzcxMWJjYiwgMHgxOWU5YTc4YSwgMHg2MWViYmQ2OSwgMHhhZGRiYjcyYiwgMHg5MjI3NTM3NCwKKwkweDQ3NjNkMDYyLCAweDgzMTVhNzQ3LCAweDg0YjdiZWRlLCAweDNjYWI0ZWMyLCAweDYyOTc1ODdhLCAweDdlZjJhZGYwLAorCTB4ZGY4NjdjZDQsIDB4N2NkOGNiN2IsIDB4ZDNmNDdiNjksIDB4OTM5ODlkZWYsIDB4ZjI2NmUzMDQsIDB4N2YxMWIwZjgsCisJMHhlYmNiZjFlZSwgMHgyODRmNzhjZCwgMHgyZDg1YzRiNCwgMHg2N2VhYjc3ZSwgMHhjYzRiNTJmNCwgMHg1ZjM5YWJlNSwKKwkweDU3YTcyMjJiLCAweGU4Y2UxOTJhLCAweDRmM2UzMDM1LCAweDg0YmNmODMyLCAweGRmMzI3OWYxLCAweGQxMmY0ODM3LAorCTB4OTIxZDAxMGUsIDB4NGRmZjk5NGEsIDB4NGRmMzdlMmMsIDB4NWU4YzFkMjksIDB4MDBjODhmMzcsIDB4YTlmZWZjM2YsCisJMHg5NzY2M2VkZCwgMHg3MTI2YmEzMCwgMHhjNmVmYmM3ZSwgMHg3MWM4MDIxMSwgMHg0MDI2ODk3MiwgMHhjMzNlNzI3ZCwKKwkweDEzYzUzMjUzLCAweGE1Yzk3N2FjLCAweDRlZjZlZmNjLCAweDUyNWRiMGQ0LCAweDBiNWJhMzA5LCAweDVmZTE0YzdjLAorCTB4ODk4YTc0MDMsIDB4NWI0YjNiMWYsIDB4NmI3ZmEwNzUsIDB4NzQxZDRlZjEsIDB4ZTFjNTMyNTksIDB4ZDRjZjBhMjAsCisJMHhkODFiMGE1MiwgMHg4MDVmYjQ5ZCwgMHhjNTE4NTNkNywgMHg0OTUyNWFiOCwgMHhmY2E1ZDg3MCwgMHg4MmEyNDI3YSwKKwkweDEwZjg4N2NkLCAweGU5NGI2ODZjLCAweDdlNTgyNTNjLCAweDIwYjI2MjY4LCAweGE3ZWY3ZWQwLCAweDgwZjFjMDdjLAorCTB4OGYxNzNjNzEsIDB4Nzg1ZmRmYTMsIDB4ZmRkY2Y1MTIsIDB4YzgzNjRkZjAsIDB4MWNlYmY2YTksIDB4MzZhNTI3OWEsCisJMHhmNzA3ZjgzZiwgMHhmMTA4ZTY5NywgMHhiY2M2ZTdlMiwgMHgyYWNiODNmYiwgMHgzNWY4MTJjNywgMHg5NTcyZmMzMSwKKwkweDE2ZGVlM2M4LCAweDIyNDc1ZGZlLCAweDU3YzgyZTZhLCAweGE1Zjc2ZjQ4LCAweDgzMGZlYWY1LCAweDY1ZTQ3YWZmLAorCTB4ZmVjYmUzMTIsIDB4ODdhMTg5ZjQsIDB4YjIxODI0ZGQsIDB4MWZkNWY3NjUsIDB4ZGVmOGNlOTIsIDB4Nzk0MDE3OWUsCisJMHgyNGVmMDNlYiwgMHg4YTUyYWZjNiwgMHg5MTM2ZmNiOSwgMHg1ZTg2N2ZkYiwgMHgxNDA3OTJkMSwgMHgwMGExMjcyNywKKwkweGQ3MjI3N2FlLCAweDAyZGE0ZjRmLCAweGYwNTRjNTBiLCAweDRlYjhjM2JiLCAweGFlNzRjOGI4LCAweGNhOWYxOTM3LAorCTB4ZTZhNmZmOWMsIDB4NGFlMmJkMzMsIDB4OTc3NmIwODksIDB4OTAzYWE3OGQsIDB4YTgzNGQ2ZGYsIDB4YzY1YTFmYTgsCisJMHg0MzllZDVkZSwgMHg3ODY2YjBmMSwgMHg3M2JlMWY5MywgMHhiOTE5NmI4YywgMHgzY2RiZjY4ZCwgMHgyYjcwNzk3YywKKwkweDMwZmRjMDBjLCAweGFjMjJiZmQ0LCAweDhkNWY4YzgzLCAweDBlMDMzMDdkLCAweDYxZDIxOTkyLCAweDdlMDljYzlmLAorCTB4MjQ2N2UwMTEsIDB4MjQ5MDVmZGIsIDB4ZWI4ZmI1MTIsIDB4NDc5NWRmMWQsIDB4Njk2N2NkZTEsIDB4MGRjMTlmMjgsCisJMHhiNmViYzlmZSwgMHg2ZjljMmFlMCwgMHhhMjk0NmI3ZSwgMHhjOTliY2U5YiwgMHg0MjIxNmFjYiwgMHhlYmNjMjI1YywKKwkweGIyMWU3YzcyLCAweDlmOGViZTMxLCAweDAyNWRmN2Y2LCAweGUxYzRkM2VjLCAweGRiMjJkZGRmLCAweDQ3MmQ1OWE3LAorCTB4N2UwODUwODgsIDB4ZjI4OWVkMWIsIDB4NmE2Y2VhYzksIDB4YTM4MWM3OTcsIDB4ZDU2YmYzOTEsIDB4YzNmODY3MmUsCisJMHg4OWFiN2UxOCwgMHg3NWYyOTkyNCwgMHgxZmMyMzNmYiwgMHg3NzExZmFjNiwgMHg1MTRmYjgwYSwgMHg0MzU4ZDFjZCwKKwkweGNmMDBiMjNhLCAweGY2MWEyOWVmLCAweDQ4ZWI2YjU3LCAweGU5MTc3YzgzLCAweDc4MDI1YjRlLCAweDhiOGYwMzEwLAorCTB4NTI3N2ZkNzQsIDB4OTBiOGM0YmUsIDB4ZDZlYjYwN2IsIDB4ODFhN2YwZTUsIDB4NDA4NWQxMGMsIDB4MGZhOWU0Y2IsCisJMHgxNzhlOTg3OSwgMHg2OWUzMDdkYywgMHhkMmJmMmIyYSwgMHhmNWYwZTM3MSwgMHg0ZDdjYjEwYiwgMHg2YTU5NTdjNCwKKwkweDE0N2Y2YmU1LCAweDEyOWRkYWY5LCAweDlmYjc3YWM1LCAweDhmYzFiNWYxLCAweGFkMWY5Yzg5LCAweGJmOGM2ODdjLAorCTB4ZDZhZmM3OWUsIDB4MzM1ZjNlNzIsIDB4NzA4NTQ5YTEsIDB4OWI1MWRhZGYsIDB4MmNlNjllMzAsIDB4N2MwMTVjZGEsCisJMHgyNWFhMzJkZSwgMHg2NGRlN2MwYywgMHgxN2RmMzVmMCwgMHhkYjJlZmVhMSwgMHhhMzVhZDMxZiwgMHg3MjI2NGViMCwKKwkweGVlZDQ1NmJlLCAweGViN2I5MDA2LCAweDM4OTM1ZDdjLCAweGJlMDUzNGJjLCAweDVmMzliODA2LCAweDkzZjgwN2JmLAorCTB4YWUwOGRkZmQsIDB4MDc2YmQ3YzEsIDB4NDViYWQ3Y2MsIDB4ZmVkMzliNmYsIDB4YzJkOTI3ZmMsIDB4ZjE4OTFlZDcsCisJMHhkN2MwNjdlNywgMHhiMzBhNGYwMCwgMHg5NjNlZGM2MywgMHhkZmVhN2VjYSwgMHgwNmU3ZTljNywgMHg2Yjk5Zjk4OSwKKwkweGU1YWMxY2I5LCAweDFmYjZiMDcyLCAweDIyM2ZmODM5LCAweDlhZmUwM2YzLCAweGM5OGIzMDcyLCAweGU1YTI0MzgxLAorCTB4OGNhZTkzODksIDB4ZDNiMDI1MWYsIDB4OWU3YmM4ZTMsIDB4ZTFiNWZjMjQsIDB4YmM0MzM0ZGUsIDB4MjdmZTNjNzIsCisJMHhiZTg0Y2QzMCwgMHhjZmQyMzRmNCwgMHhlNGMwZTc0NCwgMHg3M2M5OGYzYiwgMHg3NmJlNzI3ZiwgMHhmZTM4N2M2OCwKKwkweGE3ZjQ2NDUzLCAweDI2OTIyZWY4LCAweGZmYmUzOTVjLCAweDcyMTU3MDVhLCAweDQzZjAzNjdlLCAweGI3MjhjNTgyLAorCTB4M2E2NjdhMzEsIDB4ODZhOTJiYzAsIDB4ZDMwNDc5OWUsIDB4MjhhZDc5YTksIDB4ODFiZTg2YTcsIDB4MmJmYTBhNTgsCisJMHgzYmM2MmI2YSwgMHg2OGFkOTk5YywgMHg5OGYzMzk5ZiwgMHgyNGZjMzFiZSwgMHhiODhkN2NlYiwgMHgzM2Q3MTM3OCwKKwkweDAyMjE3OTQ5LCAweDg1M2Q5ZmViLCAweDllYWEzZjcwLCAweGNjOTk1MWY5LCAweGQ1ZTIzMDFmLCAweDE4YThmZDg2LAorCTB4YmJkMGQ0N2UsIDB4NzlhNzlmNzAsIDB4OTdkYTNkNzgsIDB4M2JkNjM3Y2QsIDB4MzZjM2VkZTIsIDB4ZjA3N2VlZmIsCisJMHgzZWQzNWY0ZCwgMHgwZTVhMWFlYiwgMHhiYmM5YWVmZCwgMHhjM2IzYzQ5ZiwgMHhmYjE4Nzk4YywgMHg2ZTNlNGU0NiwKKwkweGE4YjUxZTczLCAweDMyZGY1YzYwLCAweGM3NmFkZWZjLCAweGZlYjI2NzM0LCAweDdhZTdiZTdhLCAweGJiZDFlZTU3LAorCTB4NTQ3NjhmMmMsIDB4NmY5ZjhjNmUsIDB4MDNlMGM3ZTksIDB4YTM0M2U4ODUsIDB4ZTQxODM3MTAsIDB4NGNlNzA5MWUsCisJMHgzZjA0ODQ5YSwgMHg5MjRkYzdkOCwgMHg5MDcyOWQyMCwgMHg1YWE5N2IxZSwgMHhmZjQwMTY4OSwgMHg5Y2JjNjYyNywKKwkweDNkYjJmNjg1LCAweGJjZTQwNmI4LCAweDAzODBhYmU5LCAweDUzYWJhOWUyLCAweDk2YzZmMzVlLCAweGU2ZjE5ZDlmLAorCTB4YTU2Y2MxYjcsIDB4N2VlMmQ1ZGYsIDB4YjE0ODgzOGUsIDB4ZGMyNzYzZmIsIDB4NGI3ZWQxZGIsIDB4ZTljNzM3YzgsCisJMHgwOWFlMTQ5YywgMHhjYzEzYzQwMiwgMHhiZjhmMGFlNSwgMHg3MmU2OTkyOCwgMHhhNDVmYzc5OSwgMHhlNzM5NGIxNCwKKwkweGJlMzRiOTBmLCAweGViOTM3OTVlLCAweDc2MDJkZjE1LCAweDFjYzRlNzRlLCAweDcxM2JkNzE2LCAweDMwNjc0ZjJiLAorCTB4ZGJjNzNlZmUsIDB4YzIzNGYzNzUsIDB4NTM1ZmVlZjUsIDB4ZjZlNTI1MWYsIDB4ZTI5YmVmYzIsIDB4OTkyMmY4YzcsCisJMHgzZWJiNDc2NSwgMHgyYjlkODUyYiwgMHgyNmU3YjEyMCwgMHhhMjZiNWZlMCwgMHhjY2ZjNjI0NCwgMHhmZjk3ODFhMSwKKwkweDYxZDRmMTA4LCAweDA2Y2FiZTBiLCAweGVhMTU2YjNjLCAweGRiNDY1ODYxLCAweGM3OWM2Y2E1LCAweDI4Zjc0MjYzLAorCTB4M2FlNmNmMTgsIDB4MDJmNWZiOGIsIDB4NmE3MmUzNDUsIDB4ZGJmNDBiMTIsIDB4ZWY4NTIxZGIsIDB4M2E1MmMwYmQsCisJMHg5MTA1N2I4ZiwgMHgzN2MwZWNiZiwgMHg4YzI5ZDAyMiwgMHhiMTQ0OGJhOSwgMHgzMDNhNDNkZSwgMHhlNjFiMDg5ZiwKKwkweDUxODdlMGI5LCAweDMzYzQ0YmJmLCAweGM2MWI2MTRjLCAweGY2Y2M3ZThkLCAweDc4ODhkNjQzLCAweDAzYTg4MzZlLAorCTB4ZWRjOWJmYjQsIDB4NDI5N2Y4MmEsIDB4MWFlNzdlODgsIDB4NDBiZTc3ZjgsIDB4YzRjODMxNmIsIDB4YzYwOGIyZTAsCisJMHg3Y2VkYWQ5MywgMHhhMDM5ZDg1MywgMHhhZmZiN2EzZSwgMHg1MjM3ZGY0ZiwgMHg1NDhmODE3MywgMHgxY2U4MzcyYywKKwkweDY5NGVmNTE0LCAweDVmZjJkZjQyLCAweDEyZjM4MTg5LCAweGRjNThhYmM2LCAweDJhNWY1YWNkLCAweGRlNDAxN2U5LAorCTB4MGJjMmU1YWMsIDB4N2UwNTNhN2YsIDB4NjQ2N2FhZjQsIDB4M2NhN2EzZjQsIDB4NDFiZjQ3MjMsIDB4MDQ1YjM1ZjMsCisJMHgwNzZkNTNmNCwgMHg3NzBmZTg5ZCwgMHg1MWYyYzIzZSwgMHhmYjQzYTI4ZiwgMHg4YzA1ZGI3MywgMHhkYmQ5ZDUwNywKKwkweGUyMDFiZGVmLCAweDA0ODhjZjhhLCAweDE5NzA4ZGZkLCAweGUyOWQ4YmVlLCAweDU5ZmIyNjczLCAweDgwMDc5Y2JlLAorCTB4OWExY2I2NmEsIDB4ZWM1N2RmMGIsIDB4NzdkODEzYjcsIDB4ZjE2ZTc5YTgsIDB4ZjlhMDZmYjcsIDB4ZjQ2NGM3YzUsCisJMHhhYzc2NmE1MSwgMHg2NTdmNjA1MCwgMHg0MDg4NTg0OSwgMHhjMTMyNmJiZSwgMHhjNGZiNDNmMSwgMHhiZWRhMGVmMCwKKwkweDM2OWVkYmNiLCAweDJiZmIwZGM3LCAweDQ1NWRhMjBlLCAweGE3YjRmNmUxLCAweGE5ZjRhNmNkLCAweDBkMzUzZjBjLAorCTB4MmRkY2FiYmUsIDB4OThmZmMxZjgsIDB4YTM4ZWNjZjIsIDB4OWFiYmY0MTksIDB4YTczYzA0MjcsIDB4NDVjYmI1NTAsCisJMHg5Y2JhMThiNCwgMHhkZmEzMTM2YSwgMHg5ZDMzZjg4MCwgMHg4YmM1ZjgyNywgMHhjMDM0ZWI0OSwgMHgwZDhlY2Q3YiwKKwkweGI3MTMxNjhhLCAweDkyMzBkMzNjLCAweDdjZGVmNjY4LCAweDFjNzQxM2NkLCAweDkzZWQ1ZGZhLCAweDU4YTYxZjgyLAorCTB4ZTA0MTIzNmIsIDB4OWNlN2NlOGYsIDB4MzBkY2RiNjUsIDB4MDhjYTE1YmYsIDB4NTlhYmNjMGYsIDB4YzM4Yjc2ODEsCisJMHg3ZWMxZjZmMywgMHg4Yjc4NjU3YSwgMHg1N2Q2OGQzMiwgMHgyOTQ1YjIzZSwgMHhhYWE3ZTE4ZiwgMHgyZDEwZDc1ZCwKKwkweDZkNGUzZjg2LCAweGQ0YmY0ZGNlLCAweGFlODY3YjdhLCAweDU0ZjBiMTViLCAweDg4YjdhNjEyLCAweGM0NjY1NjE0LAorCTB4Yzg3NjdiZWMsIDB4NDUzZjljNDksIDB4ZGYwNmZmNTMsIDB4MTgyNzVlODcsIDB4ZWYzZDBhYzcsIDB4NzQxYWJjNDEsCisJMHhiZDMyYTY1YiwgMHhiY2VkZDA2MCwgMHg3NTI4ZTljYSwgMHhiMzg4Y2QxNywgMHhkMDJmN2FhZiwgMHgyYWYxMGVjMSwKKwkweDFiZmJkMzE1LCAweDZjNmU5ODdjLCAweDliM2U5MGQwLCAweGUxNTc3ZjAwLCAweDdiOTYwNmJlLCAweDg4NjI5MTI3LAorCTB4YTI3NTc4OGIsIDB4M2M5ZjUyYzIsIDB4MjE5NjJmNWQsIDB4Zjk2MDEyNGUsIDB4ODI4M2RiYjQsIDB4MWJmOTg5NzYsCisJMHgzODM5MjZlOSwgMHhiNzVjODIwZiwgMHg5NjRjNGZjOSwgMHg0OWJlYmFlOCwgMHg3ZTI1MmUwOSwgMHg3N2I0YmUzYSwKKwkweDYwNzVjOTcyLCAweGM4ZTcwNWE3LCAweDFkOWZiMGE5LCAweGU4ZjE2MGFjLCAweGEyZTQwZjg4LCAweDdjY2JlZjg5LAorCTB4ZDZmMjY2NGIsIDB4N2M2MGExOTQsIDB4OGJmN2QzNjQsIDB4NDFlZGExYjYsIDB4N2QzNjVlMTgsIDB4ZWMyNzdjYmYsCisJMHhlNjdlZDFhYiwgMHgxYWFlNTRjYSwgMHhlZTRmZGE2NSwgMHg5YjQ5ZmJlNSwgMHg0ZmQ0ZDEzYiwgMHhhMzBhZGNkYSwKKwkweDhmZDhjNTlmLCAweDZjZmQ2MDczLCAweDE5YmQ3YjlhLCAweDQ2OTViOTllLCAweDhmZDhmNTNmLCAweDRhZjM2MDY3LAorCTB4MTk5MjYzYmIsIDB4YjFhYTNiOWUsIDB4ZmRkYmY0OWYsIDB4MDY4ODFmNjgsIDB4ZGM3NjkwZmYsIDB4NGVlZjc1MTcsCisJMHhjNDk2YjcxYSwgMHgxZmU0ZDFmMiwgMHgyYTFlNzhjMywgMHg5NDdjYjE1NSwgMHgyNGMxMzEzOCwgMHhiMjdhNDk0ZiwKKwkweDc0YTgzZjI5LCAweDZhN2RhOWIwLCAweDlmNTRjNzIwLCAweDg1YjU3NjVlLCAweGJmYThkZDJmLCAweDhhODE0ZjMxLAorCTB4YWIzOGIxMjYsIDB4YmQ0MTU4MzIsIDB4ODFkODNjNTMsIDB4YmIwNmJiZjksIDB4NzVkY2VmNTEsIDB4YjAyYWYwN2QsCisJMHhkMDU2MDBmNywgMHhjMTI5NzdmMywgMHhiZTFjNmEzMSwgMHgwODEyZjNhMSwgMHgxYjM0Y2ZjNiwgMHgzMmVjN2RhNCwKKwkweDc5MzllZmJlLCAweGRlMjM1N2M4LCAweGQ5ZDdkZmE3LCAweGQxMjQ0N2JhLCAweGYxNGE0M2ZjLCAweGFkZWYzMDIzLAorCTB4OGRlM2IzMzIsIDB4OWQ4MjQzMzgsIDB4Y2U2YmZlYTAsIDB4OGExNmRhMmUsIDB4NTBjYjZiYzEsIDB4NmY0MjJmY2EsCisJMHhkMDcyMmRiZiwgMHg3M2I4ZmMwNywgMHg0YTU3NmZmNSwgMHhhMWE2YmUxNCwgMHg3YTZlMWUwYSwgMHhlMWVkZmU1YywKKwkweDliOTliNTEwLCAweDAwZmI5Njg3LCAweGVhODU3NmZmLCAweDE1ZjFkODhmLCAweDhlM2U3ZTNhLCAweGRmYzYxYmJmLAorCTB4ZDkzYjMzMmIsIDB4NjczZGJlM2EsIDB4NDc3YzY5YTIsIDB4N2M2OTg1NTYsIDB4YTdjNzQyODcsIDB4ZjU2ZmIxZjIsCisJMHg4YTdjN2MzYiwgMHg3OTA5ZWJiZiwgMHhjNzA3N2U1NiwgMHhlMDU1NjdiNywgMHhhOTBhY2RmOCwgMHhkMDlmOGQzMCwKKwkweDkwMDFmZTMzLCAweGNkZmRjMzlmLCAweGYzN2FlNzNmLCAweGNkMmFiM2ZjLCAweGZjZDg1N2YzLCAweDgwZmVhZThmLAorCTB4ZjM4MDlmOGYsIDB4ODBmZTU5N2YsIDB4OTJhYjNmY2QsIDB4ZmFjZWRmY2QsIDB4ZGJkZjE5ZWQsIDB4NjE1N2ZmODMsCisJMHgzN2Y1YWZmZSwgMHhlNjQ5ZGNmZiwgMHgzNmFiMGZmOSwgMHhjNmNlZGZjZiwgMHgyN2Y1NjM3ZiwgMHg4ZTM3N2M3YywKKwkweDA5ZmNhNmZmLCAweDZhYjBmZjliLCAweDA3YjE1ZjFjLCAweGNhNDdjMGZkLCAweGYwN2E4NDkwLCAweGE0NjFhOTlmLAorCTB4YTM1ZDQwNjEsIDB4OTIzYTQwZTMsIDB4YzgzN2E5YzUsIDB4NWRjNzA4MzksIDB4M2VlZjhjMDksIDB4ZTZmY2EwNGYsCisJMHgyNGE3ZDVlZSwgMHhlYTkwMjU0YywgMHhkM2NlNWFjYiwgMHgxNThiYmI1NSwgMHhkMDg0MmZlNiwgMHg0MWM0NTg1ZiwKKwkweGM0NWZiODVkLCAweGI0NmM4Y2Y1LCAweDc4NTM4Nzg3LCAweDIxOGJmNzNiLCAweDc4ZGMyZmM4LCAweGFjNWI5ZTIzLAorCTB4NzdkYzEzYjMsIDB4ZmEzMDU2YTcsIDB4YzBmMWZmMWYsIDB4ZjNiMWFkZTgsIDB4NWE4YmE2YjIsIDB4MTNmZWNiNjUsCisJMHhlZjM4Yzc4MywgMHhhNmFiMjQ1NCwgMHhhNzg4MjlmYywgMHgxMjdjM2Q1MCwgMHg5ZTlhMWZmYywgMHhiNDc4ZTk5NiwKKwkweDgzZjA0M2ZjLCAweDFiOTU4YWFlLCAweDc2OGMyZTc2LCAweGNlOWYyMjc3LCAweGZlMWNiYmViLCAweGY3YzMxMjUzLAorCTB4ZGMwNTNiYTksIDB4YzM3Y2Y4NDcsIDB4ZDlmNDA1NTIsIDB4Yzk5NzU2YTIsIDB4NzRlM2E4NmYsIDB4OGVjZTdlZWEsCisJMHg3OWM2OGRmYiwgMHgxNDUwNWJiZSwgMHhjMWZkZjkwOSwgMHhiYjA1MWQ2ZiwgMHg0MWU2ZjE3MSwgMHgyNzZlZWZhNiwKKwkweDE0NzBkNWUxLCAweDc5ZmFjMTczLCAweGZmM2E1NTQzLCAweGUzZWNjYWRiLCAweGViNmI4YzQ0LCAweDljMWM1ODQzLAorCTB4NDliODgxMGMsIDB4NzkwNmRiNTksIDB4NTJkY2NkMDgsIDB4ZjllYzliMjYsIDB4ZmNlNjgzNWIsIDB4N2NlNjE1NmQsCisJMHg2ZDk2MWNhNywgMHgxMTJjY2Y2MCwgMHhlZmRhMTZjOCwgMHhjYjY1ZWJmNywgMHg4ZTM2MDBiOSwgMHg3NmU2NDk1NywKKwkweGJiZWYxYjI1LCAweGI0MTk4Njk0LCAweDhlOTBmYmU4LCAweGU5MTU2MjgzLCAweGRmNjU1NzNhLCAweGRkZDRmMDFhLAorCTB4YWUyODkzMmQsIDB4YjhhOTFkYzcsIDB4NDU0YTE0MGYsIDB4YjJhODJkYmYsIDB4OWRlMTViNzksIDB4MDBmNDNiMmIsCisJMHg4ZmVlNjc4NSwgMHgxNWE3YzQ0NCwgMHgyZTgzOGVmZSwgMHhmM2VkNDZkZCwgMHg5MDdmY2Q4ZSwgMHg5ZDZjN2UyMSwKKwkweDNiZmUxNThmLCAweGEzZTc1Yjk2LCAweGNjM2ViMDJhLCAweDE5Y2I1OTBiLCAweGE5Zjk1ODlmLCAweDM2ZjE3ZjZlLAorCTB4ZjM3YjNkYjMsIDB4YjVmYjU4YjYsIDB4NTMwY2Q3NmEsIDB4NTZmODQ5N2UsIDB4OWJjNWZiNTMsIDB4MTdlYTk5ZTcsCisJMHhkNTMxMmViNSwgMHg2YTU5NjgyZiwgMHhmZDBiY2ZjYSwgMHg4ZWZlZDRjOCwgMHhmNTRjMmJlNSwgMHg2MzVmYWZkZiwKKwkweDYyYWRiZmFhLCAweDZiN2YyOTgzLCAweGZiNTMyMWYwLCAweDk4YjZjYTViLCAweDQ3MDc2ZGVhLCAweDY4ZTQwNzdkLAorCTB4OWUyMmViZDUsIDB4M2VlMGJkZmQsIDB4OWJkODJmNzUsIDB4ZWUxMmRjMTcsIDB4ZWQ0NDdlNzMsIDB4MzM4MzkwMTUsCisJMHhiNDgxNWVkNCwgMHhmNDc4ZmY3MywgMHgyYzFlYTlhNywgMHhmOWEyNGQ4NywgMHgyZDU1OThjYSwgMHgwOTk3YTA5OSwKKwkweDY1NzJjZmVhLCAweDI0ZDBhYWMyLCAweGQ3YjAxNzhhLCAweDliODg3Y2E5LCAweDA0MWQxMjE1LCAweDBmNzI0Y2NlLAorCTB4MzE4Yjc3MWYsIDB4YTk5NzFkZjUsIDB4N2QwNTRjZGYsIDB4YjE3YWRmN2MsIDB4ZGQ3OTdlMjMsIDB4ZDRjMzc5ZDYsCisJMHhhZjZhN2UzOCwgMHhiMDIxOTJkYywgMHhjZTU5NzVjZSwgMHhiNTY5MTg5ZiwgMHhiMWE3M2NlNSwgMHhlYjgxN2RiZiwKKwkweGU5ODU2YWQ5LCAweDE5YmRlYTgzLCAweDg2NzM2MTkzLCAweGUyMjNlNWZhLCAweGY5ZWM5YjlkLCAweDBkYjAyMjNlLAorCTB4NTNmZWIwNDgsIDB4OTg4NjFmODEsIDB4NzZhYTZiZjYsIDB4ZmJlNDlhZTUsIDB4ZTExMTIxZWMsIDB4NDA5ZDA1YWEsCisJMHg1MjE3ZWFmNSwgMHg3MjAyOGQ2MCwgMHgzNTkyM2QxNiwgMHhhMWMwMzQ2YiwgMHhlZjQwNTVhZiwgMHg3NWM1NGZlYywKKwkweGU5NDM2Y2ZkLCAweDNmYWZkODM2LCAweGY0YzAxMGQzLCAweDRjMzI4NmEzLCAweDMxMDQzNTRmLCAweDAyYTFiMGZkLAorCTB4ZjUwZDkzZDMsIDB4MmMzNDc2OTgsIDB4ODZiZGY0YzcsIDB4MzZlZmE2MTAsIDB4YmJmYTYwYjQsIDB4ZGY0YzU2ODYsCisJMHhlOThjZDg2YSwgMHg0YzYxMGQxYiwgMHg0Yzc0MWIzYiwgMHhkMWU4NzkwZCwgMHgwZjZlMDFiZiwgMHg4NGQ3MWIxYiwKKwkweDJlN2NjM2RiLCAweGU3M2RhOThkLCAweGY3ZmY3MGMyLCAweDExZjNmYmJjLCAweDdmOWZlZjYwLCAweDZjZmI4ZWNiLAorCTB4Y2FjYmUxZmQsIDB4NTFkM2ZkNmYsIDB4M2NhNTdiNDcsIDB4NjM5ZDA4M2MsIDB4ODEzM2JkNmIsIDB4MjM2OWM5ZDEsCisJMHhlYzFjNjRhNSwgMHhjZmY0ZWNmZiwgMHhjNGJjYzdjZiwgMHhmZDg0ZjUyZSwgMHhmYTcxM2MzMywgMHhmYTVkNzg4NSwKKwkweGY0NDRlOWU1LCAweDk0OTk4MmVlLCAweGZlMWVhNzFlLCAweGY3ZTgyMmFmLCAweDYwN2ZhYzAyLCAweDcxMTExYzA3LAorCTB4NmRkMTI2MWQsIDB4OTVkN2EwN2UsIDB4ZTE3ODRkZTIsIDB4MmYxMDU5ZjcsIDB4YmY4M2Q3M2IsIDB4OGI4ODJjZjYsCisJMHhkOGE4YWI1ZCwgMHgzYjM2ZjlmZiwgMHhmOWQyZjg4MSwgMHhjZmJjMmUwMywgMHgzNmQ4ZmU3NSwgMHgzMmUzYzgyZiwKKwkweDNkOGUxODlmLCAweDZiNGQ2MTQ3LCAweGI3NjFkOTIyLCAweGU3MzZlZmM5LCAweGE1MGFiN2NmLCAweDY4OWExZTc4LAorCTB4MDM0N2IzODksIDB4Mzg2MWE5NWYsIDB4ZTBkOWQyMGYsIDB4NjdlOGQ0YzMsIDB4NzFjMTRmOTksIDB4NjVjYWVjY2UsCisJMHg1ZTdlMzM3MSwgMHg0MjRlZWM4MywgMHgyNzdlYTU3ZSwgMHg4NjlmZmZiNiwgMHgwYzdlYmZhNywgMHgyMzY5MDg3OCwKKwkweDVlMDgzODFmLCAweGRiOThiYjcxLCAweGY5N2VmYjdmLCAweDgxNGNmYTQ5LCAweDIwMzkyYWY4LCAweDgyZjYwZTdmLAorCTB4MTE3N2ZlOWQsIDB4NjEyMjY1MWMsIDB4MmViN2U4ZGUsIDB4NjNlYzg2MjIsIDB4NjliNzdjYTAsIDB4NjY5ZGZhM2MsCisJMHg3MzE3ZjRmOCwgMHhlNmI3YzUyZSwgMHgwNDIyMzRmYiwgMHg5YzQ2YmY2OCwgMHg4MGZlMGFhNCwgMHgwMmY1MzBmMywKKwkweDc4OGNhYmM2LCAweDZlZTQ5NzQ5LCAweGM2ZjRjNjExLCAweGJjNzhlYTRiLCAweGExZDFjNmI4LCAweGI5ZDE2OTA0LAorCTB4ZWU0YmRjYjYsIDB4Mzg2OTllOWYsIDB4YWYzOWMyYTYsIDB4MDJhYjQ3MGEsIDB4NjQ0NTRmY2UsIDB4YjllODA5NTQsCisJMHhkMmFiNmQ3MywgMHgxMmFjMWVjMCwgMHgyZjE1ZGZjZiwgMHg2NzY3OWI3ZSwgMHg2MTI1YmQ3MSwgMHg4ZWJjZGJiOSwKKwkweGI0MjBmZTcyLCAweDFkOWNhMzVmLCAweDhhOWY3NDcyLCAweDMxYjU5ZmM5LCAweGVmZGFkYjNiLCAweGY2YzBmYjA0LAorCTB4MWY3NzZhMmQsIDB4ZDY4Mzc2OWYsIDB4ZmJiNTRmMTcsIDB4M2UzMDU1M2YsIDB4NWM1MzExMmUsIDB4N2JkZmMwYzksCisJMHg5ZDgyNjA0YSwgMHhkNzcyYTllMiwgMHg3ZThmNjhmYiwgMHhkYzQ2ODcyNCwgMHhkNGZkMDk3ZCwgMHg5ZjZlN2U3NywKKwkweDg4NzI3Y2U5LCAweGYzMzhjM2I0LCAweDg4ODFmMjI3LCAweDc0M2JjYjc2LCAweDE1ZjhmZDNkLCAweGU0ZGI5ZDk5LAorCTB4ZjY3YjgwZTcsIDB4ZmViZWY5OTUsIDB4ZGY5YjllMDIsIDB4ODRlNzg1NTYsIDB4OGZmN2RlM2UsIDB4MjQyZGZmNjgsCisJMHg4MWQyMmYwMSwgMHgxZDgxMTZiNCwgMHg0YWQ4OGU3OSwgMHhjOGU3NGYwMSwgMHgzMWYxZGU2YiwgMHgzYTk1Yjg3NCwKKwkweDA1ZWY0MDRhLCAweDg2M2I2NjJkLCAweGZjYTZiZmRhLCAweDdjZTZjZGUyLCAweDA2OTk5OTM5LCAweGEzN2NhNGZhLAorCTB4Y2UwMmMyNGMsIDB4YjM3ZjU0Y2YsIDB4MTc3ZWM1NWQsIDB4NTgyNmZhOTMsIDB4OGZlZTI1NTcsIDB4MzQ4OTU3Y2MsCisJMHg5YWQ1ZWE4NCwgMHgzNDU2N2Y2NywgMHhiNDExYzI4ZiwgMHg4OGM4M2YzMywgMHg2NjQ5MmNiZiwgMHg0YTY1NjA3NiwKKwkweGMyN2Q4MTU4LCAweDdmYzZkYTBmLCAweDgzMjAwNmY3LCAweDcxMDRkYzNkLCAweGZjNDg5MjI4LCAweGZjNWY0ODNiLAorCTB4NTZmYzI5NWUsIDB4YmFmNThkNzgsIDB4YzM4ODFjNGYsIDB4ZTIxMmVlMjEsIDB4ZGFkNjAzZWUsIDB4ODZjZjZlMDUsCisJMHhlN2MwM2QzMCwgMHhjNzA1Zjg2ZCwgMHg3NjE1ZjkyYywgMHgyNDUyZGU3ZSwgMHg5Y2ZkZDAyMiwgMHgxMmQ5MDhlYSwKKwkweDg1MWZkZWIxLCAweGJiNWVkYzc4LCAweDcxMDY5NTdmLCAweDdiNmFjMGZjLCAweGRmZGM2ZjZhLCAweDBmNjQ5NzY4LAorCTB4ZTE1OWY5NjIsIDB4ZjczYzcyZDUsIDB4ZjAwYjQ1MjAsIDB4ZWY4ZjIxZGUsIDB4YzQxZjljMmIsIDB4OWMwMTZmMDQsCisJMHhkYzQwZjUyMywgMHgzYTc1Y2UxZSwgMHhkZjIxNWJiZCwgMHhmM2MwYTllNCwgMHhlZjIwNzUxZiwgMHhiYzdiYmZiNCwKKwkweDljNDE4ZWQzLCAweGEzNWE0MWRhLCAweGJiNWZlNTNhLCAweGEwMWZiMmNmLCAweDkwMmVmMzk5LCAweDUwNjdkMDRiLAorCTB4MDlhMmU3ODAsIDB4MjM1Y2I5YzYsIDB4N2UzY2VkY2QsIDB4MmUzMWZlNzMsIDB4NDM4MTc0OGYsIDB4ZGYzOWVlM2UsCisJMHhlMTQ3NzBlNiwgMHgyODk5MDkzYywgMHhiN2YxZWQ5ZCwgMHg2M2RmYzA3MiwgMHg1NmZkYzNmMCwgMHhjYWE3N2Y2OCwKKwkweDdkZjJkN2RhLCAweDllZGYzYmRkLCAweDA5N2M5ZTljLCAweGE1Zjc1NDdkLCAweGViMzFjMjQwLCAweGFkZDQ5ZDQ4LAorCTB4N2RkNjFmMDAsIDB4ZDdmOTYxMjksIDB4NWQxYTliZDYsIDB4ZTZmNDYzNTUsIDB4NTlmMDRhMmIsIDB4MjdhNjA0ZmIsCisJMHg4ZTgxM2UwMSwgMHg2NGRmYmIxMywgMHgwMjcwODdiZCwgMHgyZjQyNjFmOCwgMHgzODZkN2MzZiwgMHg3ZjQ5ODg1MiwKKwkweDhmMDRhN2JmLCAweDZiZTM4M2M1LCAweGQzZWJlZmY3LCAweGJiZTAwOWZmLCAweGYzZmViMWZmLCAweDExZGZmNGZhLAorCTB4Njc5YWZlMGYsIDB4ZDEwYmVjZjcsIDB4MTdmMmI1ZjUsIDB4MTBlMTc4MGYsIDB4NmI1MmM3ZDMsIDB4YWNlZjljMWEsCisJMHgwYmRhYjFkZSwgMHgxNDkxZjk3MiwgMHgzZjVkMDJmMiwgMHhlZjcxOGIwZSwgMHgwYzNiYTZlNywgMHg3MGRkZDNiZSwKKwkweGYzOTZiMDhmLCAweGFmOWY5OWRkLCAweDJmZjgzNmZiLCAweDU1OTBlZjlmLCAweGIyZWMwZjhjLCAweDI5OTRlZDQ3LAorCTB4MzA5NmRiNmIsIDB4N2Y2NWQ4ZjksIDB4ZjE5YmU1OWYsIDB4N2VkZDUzYmMsIDB4N2NhOGJlYjMsIDB4MGQzNDgxZmMsCisJMHhiODg1NTUwZiwgMHhmZjQ1MWNmZiwgMHg3ZmZiNzZhMCwgMHhhYmJiMDM0YywgMHhkZWEzNzQ4ZSwgMHhlMzA3N2ViMywKKwkweGY2OGM5OTdmLCAweGIxMjUzY2MwLCAweDBlNzFiZDZmLCAweGE1ZTM4ZWFiLCAweGRlMWQ2ZGFlLCAweGJiNmJhZjEzLAorCTB4OWExMzM0ZjksIDB4YWQzYmY0MGUsIDB4YmI3MDU1ZGYsIDB4OWYzMGUxZGYsIDB4NDJmMDM0ZGYsIDB4NWZlZWNjYzIsCisJMHgwNTgzYzRmNSwgMHhjZWI4NTNlZiwgMHgyYmM1N2Y2ZSwgMHgyOWYyYzdlNCwgMHgyM2U3N2ZkMywgMHhhNWZiMWUwYiwKKwkweDc1NWNiZmQ2LCAweDZiMThmZDUyLCAweGI0ZWIxYjVmLCAweDJiZmI5ZmI2LCAweDJkNWE1ODA3LCAweDBmZTBiZDQ3LAorCTB4ZjE5MTZmNTYsIDB4OWVmNTdiYmMsIDB4ODYxZjNiNmQsIDB4NzZkYmNjZjgsIDB4N2ZkYTcwZmYsIDB4ZGU5NzllZDUsCisJMHhhYmU2OWViOCwgMHhhNjUzOTI5ZSwgMHhlMWI4NjliMywgMHg5ZjQxYTI5ZSwgMHhmMmRmZmEzYSwgMHhhOGY0YmQ3MSwKKwkweDQ1MjVmYTdjLCAweDdmY2FjZDFiLCAweDk3NGJkYzljLCAweDI5MGVhN2FhLCAweDdjNWY3NDY0LCAweDUyMWM4OTRjLAorCTB4ODViNjdlZDgsIDB4YTdmNzkxM2UsIDB4ZWFiMTVmODEsIDB4ZDAxNDJmODksIDB4MTQxZjFmNWYsIDB4MWM3NjdhNDgsCisJMHgwOTc5NmU3YywgMHgxM2MwNjNlZCwgMHhhYmQzOTNkMiwgMHhmNjk2N2U4NywgMHhhODJlOTQ3NSwgMHhiMmY0MmQxNywKKwkweGFmOThmYmI2LCAweGM0MmZkMDA3LCAweDNmN2YyOWUzLCAweGI3ZDg0YmY5LCAweDBmZGQ5ZGY5LCAweGYyNzhhODc4LAorCTB4OWYzMGJjOWYsIDB4ZTMzZDUyZDMsIDB4NGVhZDlmZjMsIDB4MTUyMGZiODMsIDB4YzU0ZDI4NzIsIDB4M2M1Nzk1OTQsCisJMHhiZmU0MDNmYSwgMHg5MDdmYzdjNSwgMHhlYWM1Y2VjNiwgMHg1NzVjZmMxOSwgMHhkMTczY2MwNiwgMHg5ZTcwNzMyMywKKwkweDdjODgyNGU1LCAweDc2MzNmMTU4LCAweDQ0ODJmY2NmLCAweDIzOGE5ZjRhLCAweGQ4MzlmNzI3LCAweGFiN2E3NjNhLAorCTB4NGYxMTM3MWQsIDB4ZmIwMjQyYzMsIDB4ZTE4OWFmMTgsIDB4NjQwZjE4MWQsIDB4NjA3ZjBkZTcsIDB4NjU5MTNmZWMsCisJMHg2MGUwYmY5OCwgMHgzMGU0NWFmNCwgMHhhNWQxZjFlZSwgMHhiNzdmOTYyNCwgMHg5ZDAzYjczNywgMHhkM2Q1MGNjZSwKKwkweDQ3NWM4ZTIxLCAweDg3YzcxMGE0LCAweDJiZjY5MTcwLCAweGNlOWE5ZjFlLCAweDUyNjgxZGNmLCAweGVhOGVmZjExLAorCTB4MGU1MDI5ZmYsIDB4ZGQ2NWRiZWQsIDB4OGVmYTYwNTksIDB4MWRlZWNjNWMsIDB4M2UzZTRlZmYsIDB4ZWMwMTNiODUsCisJMHhkNDY5ZDNkNywgMHhiZjMzOGMxZSwgMHg5ZDYzMGUwMywgMHgwYzU2NzZhNiwgMHgzYmM4YzU5ZiwgMHg2YmVkZmY5MywKKwkweGYyMWJiYzk4LCAweDBhNTE5ZTFmLCAweDYwOWQ5ZmY1LCAweDgxZGYwNDcyLCAweDhhZTE0MmZkLCAweGExZmQ2M2E2LAorCTB4MDdlYTAyZDksIDB4OTNjNjg5M2IsIDB4OTczMmVkZjMsIDB4OTViZDczNzMsIDB4MTJmYzI4NWYsIDB4N2MzZGM3YWMsCisJMHgyMzI0ZTMwMywgMHgyZGJlZDAxZCwgMHg4ZmJmNDhkZiwgMHhhZTMwYWJkNSwgMHg4NmJmNmZiNywgMHhmYWU2MmYxYywKKwkweDFmNDVhZDYwLCAweDA3NTI0NzkwLCAweDJkNWI3ZmI0LCAweDBjM2U3Nzg3LCAweDM1ZTU0YmYyLCAweGNhZmM4MWE0LAorCTB4MjdjMTVlZjgsIDB4ZjFiYzhmYmIsIDB4OWZiNzJhM2QsIDB4MzViOTBjNDQsIDB4ZGNhYjU1ZWIsIDB4NDA5ZGVjNTYsCisJMHgyN2VkYzllMiwgMHgyYjg5M2Y2ZSwgMHhhZTNjYjRiNywgMHg5MDNiYmFkYywgMHg3YWQ2ZmY5ZiwgMHhkM2UzYzBkNSwKKwkweDdhMWEzYzE2LCAweDVhN2MzZmIyLCAweDFkYjdlNGY1LCAweDQ5M2Q1YzVhLCAweDQ1MjA5ZGZmLCAweGUwZDFmOTdkLAorCTB4MmFmZjgzNDMsIDB4Y2YwNmE1ZmYsIDB4YTlmMGY1MGIsIDB4N2MzZDg3YzEsIDB4OWY2MWYwNmEsIDB4OGYwOWE0NzgsCisJMHhlMWJiZmFkNiwgMHhjMDg1M2E2ZiwgMHhjZmM2MzI3MywgMHhmZGIwMGZhYiwgMHhkMWRkZmE2NywgMHgyZjg4ODUyMSwKKwkweGQyMzk5NzFkLCAweDRhNDg3NDdhLCAweGM5NmMzZTZjLCAweDc1ZWQyYzQ3LCAweDY5NjAzZTRiLCAweGViZTRiNDFmLAorCTB4ZjdhYmVkNGQsIDB4YjlkODUxMWYsIDB4OWRhOWE4OWUsIDB4ZTRhN2ZjYjgsIDB4MDFmMTM4ODMsIDB4NmJhYTFkNjMsCisJMHgwMTA5NTRmYiwgMHhmMWJiYjg3ZiwgMHgwOTI1Nzk3YiwgMHhmZTVlMjA3OSwgMHhmMmYxODhiYywgMHgyNmUzOGEyZSwKKwkweGVlZDc0ZTNhLCAweDYwOGY3YzZjLCAweDU3YzU5M2I1LCAweDJmNmVkNGJhLCAweDkzYWI5M2Q4LCAweDU1M2JiZTU4LAorCTB4NjgzZDAyNjksIDB4NTkzYjc3OTQsIDB4ZDAyYmFmZGMsIDB4YjE4YTRkZWQsIDB4MjAzZmRlZWYsIDB4MDhlZjFlYTIsCisJMHg3ZTc4ZDI5MywgMHhhMTQwZGUyOCwgMHhmZDIwZWRmOCwgMHg4MGZkYjNkNSwgMHg2MWQ3YjAyZSwgMHgzMGFjODRiYywKKwkweGQxNTRlM2YwLCAweGUyMWNiNTlkLCAweGRlMjJhZDM1LCAweGUyYjg1YjZiLCAweDIzOWMyZjE2LCAweGZiOTAzYWU5LAorCTB4YmU1YTMyOWQsIDB4ZGIyMmQ3ZTgsIDB4NTJlOTBjYTYsIDB4ZjgxZjhjNDYsIDB4OWE2ZDA5MTEsIDB4ZjVmZWMwMjQsCisJMHgwNTlmZTQ3YSwgMHhiODVmOTgwNywgMHg3OTdjN2Q3MCwgMHg5NWRmZTRhOCwgMHg0MDU0ZWZiYiwgMHhlZTdmNTJlZiwKKwkweDg3YmVlYzY0LCAweDIzYzU0ZmQxLCAweGZmMDNmMjk2LCAweDE1YTZlNWM4LCAweGRiOTUxZmUzLCAweDFlNDFmNWNkLAorCTB4ZTRlYzE4M2YsIDB4OTJjN2JlZTcsIDB4Yjc3ZmRjYjEsIDB4OWUwZmRlYzUsIDB4YTc3ZmU2MmEsIDB4ZWJhN2QyOGMsCisJMHgzY2UwNDg5OCwgMHgyMjAzZjljMSwgMHg2ZWZjZTdkMiwgMHhlMzAwN2U3NiwgMHhiZjAxZDdmYywgMHhlN2IxMmI3NywKKwkweDdjODJjZWE5LCAweDFlYmZkNTVkLCAweGVmY2NmYjNiLCAweDNlMDZlZThiLCAweGMxNGVmN2RhLCAweDc2N2E2OTRmLAorCTB4N2UyM2RiZGYsIDB4ZGY2N2Y5MDUsIDB4ZjQ4NzdhY2MsIDB4YTBlNTNmNmQsIDB4YmE1NWY3MTMsIDB4ZmY5MDdhMGUsCisJMHg0ZGZmOWViYiwgMHg3ZjkwZGRkNiwgMHhlY2YxOGVjZSwgMHgxNDVmODNhZSwgMHhhZDc1M2YwMCwgMHgxZTgwNTdiNCwKKwkweGVmZTdlMmVjLCAweDQ1ZmYzZDU2LCAweGJmYWUwNzQxLCAweGE5Yzc0ODhkLCAweDlmNGZlNjRlLCAweGVmNWZmMDNmLAorCTB4ZjM4MWZkYzEsIDB4YzBhY2U4MDcsIDB4NDJlODM4YmUsIDB4YTVmYmFhZjksIDB4NWQ2ZmUzMTMsIDB4MTQ1MTdmY2YsCisJMHhhNWZjMjdlYiwgMHhmYmU1YTlmMywgMHg1MjFlNWQ5ZCwgMHg0YmUwMTdiNiwgMHg3NTQ0ZmI2MiwgMHgxYjZlYmFiZiwKKwkweGQzNTEyZmJjLCAweDQwNTk0ODc2LCAweGYwYmNhN2ViLCAweGFmZDAwMmE3LCAweGRkOTk3YjVkLCAweDNjNzcyOWQ0LAorCTB4ODE3OWZiMGEsIDB4Y2EzNDBmMzUsIDB4MjA5ZDVlOTQsIDB4ZmY2OTgzNjQsIDB4MDEyOGRlNmIsIDB4OTc4YmVhMzksCisJMHg3MTVjNjEzZiwgMHhmYzU4ZjhhMCwgMHgwNDNlMGQ3ZiwgMHg0ZjNmZTk5ZCwgMHgyOTg1NGMxOCwgMHhkZWY4ZmYwNywKKwkweDBlMjdhMDNiLCAweDhkMmY5MWRhLCAweDU5MTI3ZWY5LCAweGU1Y2NmNjgxLCAweGZmZjRkZGU2LCAweGU4ODViY2RjLAorCTB4MDNiZGU2NDAsIDB4ZWZlMTNkZTYsIDB4YzBkN2RlNzcsIDB4YmVkNGExYTEsIDB4Y2Y5N2QwNzIsIDB4ZjMwYmJmOWYsCisJMHg4NDdlM2M3YiwgMHhmZWZjODA3NywgMHhmY2Y5ZGZkMiwgMHg3YmVlOThhZiwgMHg5N2JkZGQyOSwgMHg3Zjg3Zjc5ZiwKKwkweDlmZWVmM2U3LCAweGNiOWViZmVlLCAweDc5YzJhZWU5LCAweGZlMTdiYTk4LCAweGE5NWRmMDg0LCAweGZlMTI5MzllLAorCTB4YmZiZGU1YmUsIDB4ZmVmNjFiZjksIDB4MzViZjliNWEsIDB4OTNjZjFiMjcsIDB4NzBiMGMwM2EsIDB4NDBiNjY2N2IsCisJMHhjOGVkNzE3OCwgMHg5ZGQ4MmE5OSwgMHhkNWVmM2Y2MiwgMHg3ZTYwNDg0YywgMHhmN2IwMjg5NSwgMHgxNjUwYzgyMSwKKwkweGNmZGMyNDBmLCAweGY4MGQ2MzgyLCAweGRkOWI4ODBlLCAweDRkZGM5MzNiLCAweGM5MTM3NzY4LCAweGJjNTNhZWRmLAorCTB4YmU3YWJkYWMsIDB4OTExYWNmMWYsIDB4MjEwNTZmNzEsIDB4OGZjOTM5OWYsIDB4YmY4YjZlZjEsIDB4NWQxMDI4ZDksCisJMHg3NGFlZjZhMCwgMHg4MThmMzdmNSwgMHhiNDhmMjNkZiwgMHg5ODA1ZWQ0NSwgMHgzMzY5MGZiZSwgMHhhYWNhNjM4ZiwKKwkweGRjODdmMjYyLCAweDUzYmNlNmY5LCAweGJjZWRlNzMzLCAweGYwNjEwNzNmLCAweDBjMjQ3YzNiLCAweGQ0NzE2Y2YxLAorCTB4ZDNjZTE1NjEsIDB4MDIyNTYzODksIDB4NDkzOGE1NGYsIDB4MGVmYzA4NmIsIDB4N2RmY2NmYmIsIDB4N2VlMTAyNTIsCisJMHhjNzg2NWZlZiwgMHhhNzE2MDQ4YSwgMHhlZDcxODUxMiwgMHg5NDcxZTAzYSwgMHg3OGRjZTMwZCwgMHhlMmYxMWI0OCwKKwkweDA4YmFmN2M3LCAweGYxN2JhZmY3LCAweGY4MGVkNGRhLCAweDY2M2ZjMDk0LCAweGQ1ZmExN2Y2LCAweDEyZDNmYjg0LAorCTB4NjkxYTQyZWYsIDB4NzZlNjlkZDMsIDB4MmNiZThmZGMsIDB4YjI1ZDE4OWQsIDB4OTY5ZDM5YWEsIDB4ZDA2MmU4OTksCisJMHg0YzdkMGUyMSwgMHg3Y2YwMzE3NCwgMHhkMmIxZjRhNSwgMHhlYmZmOGFjNSwgMHhmNzVmMTgxMywgMHgyZTgzMmY0NywKKwkweGVmMWQ2ZTk5LCAweDdmZGNjOWQ3LCAweDEzM2YwMTI4LCAweDgyMDE5OWYyLCAweDdmZGNhYmZiLCAweGJjNzQ1MjkwLAorCTB4N2VhYTI0YTcsIDB4N2UwMDk3YmMsIDB4ZTAxYTk0NWMsIDB4ODZkZWVmMmYsIDB4M2Y3M2E0ZjEsIDB4MDBkYmZmN2YsCisJMHg0NGFmZDU0ZiwgMHhlYmY4YTBlMiwgMHg1MTIxZWRkYywgMHgyYjBhNWVmOCwgMHhiNjU2OWZlMCwgMHg0MDRmYjg4OSwKKwkweGFjZDE2OGE0LCAweGMzNjI3ZDk4LCAweDg1ZmFhODBmLCAweGI5NTNlNzA3LCAweDRlOWUxZWQ3LCAweGY3ZGNhZmJmLAorCTB4NjFkYTAxNDEsIDB4Y2ZkMWJiMmIsIDB4NjA1Y2ZkMDksIDB4MTQ3NTBmNzQsIDB4YTU3MDNlYzAsIDB4MmIxMWZjYzQsCisJMHg2MDQ5YWNiZiwgMHhjZmIzOTZmMSwgMHhhZTIwY2FiOSwgMHhlNzYyZWMyMywgMHhiNzIzMmI3ZiwgMHg3Mzk4ZjZjOCwKKwkweDk5MDRhMTRkLCAweDczOWU5YmM1LCAweDNkMDg1ZWExLCAweDI4ZjllMDIxLCAweGRjZjYyZjgwLCAweDljODdlMWE5LAorCTB4ZjA2MDQyN2QsIDB4OWRmMTk3ZWQsIDB4NGY1ZGNhOTgsIDB4YWE3YzQyNzUsIDB4MWZiYjJkZjIsIDB4NWRiYWY4Y2MsCisJMHhjODdlZTI5ZiwgMHhmMWVjNWY5NCwgMHgyZTFmYTA3NiwgMHg3ZDEyZTI5YSwgMHg0NGJiMDFlMiwgMHhiNmRhOGZlNCwKKwkweDY4NDNmNDFhLCAweDM2YTJmOTFlLCAweDJiZWZmZGMyLCAweDdlYWI1N2Y0LCAweGI4M2VmY2YxLCAweGY0ZjU1NjcwLAorCTB4N2Y4ODVlZTMsIDB4ZTFkZjY5OWQsIDB4YWVjMGI4YzUsIDB4ZmFlN2M3NGIsIDB4MzU5MWZmZjgsIDB4ZDZmZmZmZGMsCisJMHgzYjRmNzY2OSwgMHgwNjdmZmZiZSwgMHhmMTc2YTBmZSwgMHhmYjk2MDlkMywgMHhiMTA2YmJhYiwgMHhiNDQ5MTRmNywKKwkweDcxZWY1MmU4LCAweGYwYjllZDU1LCAweGNmYWZjNDI4LCAweDUxZTRmZGVlLCAweGNmZmFiYjgwLCAweGZjMTQ3ODdmLAorCTB4YTlkMDcyMGEsIDB4YmE4MjdkYzIsIDB4ZjE4ZWJmOWYsIDB4ZGZiYmUzM2UsIDB4ZjlkMDNkNzAsIDB4MmYxOGUzYzQsCisJMHhmYTliN2NlZCwgMHhlNzVmZjQxZiwgMHhjMGIzYTdmMywgMHhlYTdjZWNjZiwgMHg0ZjEwNjk4ZiwgMHhhOWY5ZjNiOSwKKwkweDlkY2U2ZWY4LCAweDI3NDk0Y2NmLCAweDkxODlmNDcxLCAweDA3ODZmZjAyLCAweGQyYjVhZjEwLCAweDExZGI0OGVkLAorCTB4NTFjZTdmZjQsIDB4ZDlmZjgzYmEsIDB4ZDQ4OWQ3MTMsIDB4YzY5OTc4YjAsIDB4ZTNiYjM5ZTMsIDB4YzRmYmM3YzcsCisJMHg3ZDY2ZGE2ZiwgMHg0ODQyYzZlNywgMHgwNjQ2YmY2NSwgMHg0MTM5YzcxMCwgMHgwMDY2MzllOSwgMHhlM2NkZGM3NCwKKwkweDVkNmY5MTc1LCAweDBlNzM4ZTMyLCAweDNhZjRhMGZlLCAweDg1ZTNhMTZiLCAweDNkOGY0NWI2LCAweDgzNmQ3NTBjLAorCTB4NDRlMzhkZmEsIDB4MjMzZjgwMDcsIDB4NDEzZmJlZmUsIDB4ZTQwMTIyZmYsIDB4NjBiZmVmNjgsIDB4MzdlODBjZmMsCisJMHg3M2I4NGU5ZCwgMHhkODJjODVjZiwgMHhlZTQ4ZjhiZiwgMHg4NWVmOGI5ZSwgMHgyMTU3NmYzYywgMHhmY2Y5NTExZSwKKwkweDlkNGYyODliLCAweGY4YzcxY2NmLCAweGYwNzFlMTM2LCAweDhmZjNkMjRlLCAweDk5ZjkyYmM1LCAweDFlZWRiYWNjLAorCTB4NzRlMWZmMTYsIDB4ZTY5MGY4ODAsIDB4MDcxZTcyYzUsIDB4YzQ2ZDdjNjIsIDB4MGI4YmZhODcsIDB4NzNiMTcxOGQsCisJMHg0MGJlYzYyNywgMHg3ODc3ZjZjZCwgMHg2ZTk3YTViYywgMHhkN2EwNDRjMiwgMHhjZmRjOTdmYiwgMHgwMmEwZjAzMCwKKwkweDhkOGRhZTFlLCAweGMzOGZjNjdiLCAweDJkM2RjNGY1LCAweDQyN2EwMzc0LCAweGFlMjdiM2JjLCAweDdiMTNkODQ5LAorCTB4Y2RlMTYxNzUsIDB4Y2VmNDcxNzgsIDB4ZGE1ZTJjMmQsIDB4OGYzZmM3MjksIDB4YWY0MWM0NjUsIDB4OWZlMjU5NzYsCisJMHgzZmM1ODFlMSwgMHgyYjhmMzcyZiwgMHg5NzYwZDNjNSwgMHhmMTVhZmQ4NiwgMHhmOGFiZjY3NSwgMHhhZTViZmRmYSwKKwkweGU4NWY5ZDgxLCAweGRhYWQ3Zjc3LCAweDNkZTYxZjdjLCAweDA1ZGQzODI1LCAweGVmNmQ2YmZiLCAweGE3Y2YwNDJiLAorCTB4MmI3M2IzNzQsIDB4Zjk2N2JlN2MsIDB4M2ZiM2QzZjksIDB4ZDYyZTMxMTcsIDB4ZmE4MjM5MTQsIDB4OGMzZmFhZGQsCisJMHhiYzJiNTdmZCwgMHg2Yjc4NzA3NywgMHhlM2Y1YjNmNywgMHhkODRmNWVlYywgMHg3YjM5ZmI0ZCwgMHhlYmU0MzlmOCwKKwkweDYzZWZkZGRhLCAweGFlZThlZTVjLCAweDk4OGU5NWE3LCAweDhmZDYxNmY1LCAweGNlN2NjYzcwLCAweDgwYTg3OTNlLAorCTB4ZGZlMzc5YzUsIDB4MzE3MWFiMWIsIDB4NDBlZWIzN2IsIDB4NzZlYTcxZmMsIDB4YTcxYTZhN2YsIDB4OTg1MTE0MmEsCisJMHhmMWU5NzAxZCwgMHgyZGZhNDhjZSwgMHg3Njk5ZGZkMCwgMHgzYTRkZGYxOSwgMHhiZWUzMTExMywgMHhjOTcwMWMxNywKKwkweDk1YTExZjdjLCAweDQ3NWQwZmM5LCAweDcxYzA5ZWYxLCAweGYwYTc3Zjc2LCAweDU3M2MwNGI1LCAweGQyZjFlNzdmLAorCTB4YjdmZGUwNzcsIDB4ODM1OGE5M2IsIDB4ODJiNmRmZGQsIDB4NGZkYjY5ZjEsIDB4ZWY0MDIxZjQsIDB4MTNkZmUzYjYsCisJMHgwN2RhZmQ2MSwgMHhmZmIxOGRmOCwgMHg0ZmQ0NGU4YiwgMHg1MGZkNTBmMSwgMHgxMGEwNmVmNCwgMHg3N2FhZDVkOCwKKwkweDY2Y2I3ZGFlLCAweDkzOGU5ZjgyLCAweDIzNDJlYjBlLCAweDgzZWUwN2VkLCAweGJjMzliOWMwLCAweDU2OWRlZTU3LAorCTB4YWE4OGYwMGEsIDB4N2QwYTc1NGQsIDB4ZjliYjIxZTcsIDB4YWZkZTU1N2QsIDB4MjFlZjlhYWMsIDB4NmJjNmFmOTAsCisJMHgyNjZmOGZkMCwgMHhjYzY2NGI4YiwgMHg5ZjE2NTIzMiwgMHg4N2Y3MTkwYywgMHhhYmMyMTNjYSwgMHhhZjdmN2NlOCwKKwkweDI4YmIzNzA2LCAweDhkOWU3YzVlLCAweDc4MTEyZmQ5LCAweDA2YTI2YTI3LCAweDJlNjNkM2Y2LCAweDRiYzFkZTdlLAorCTB4ODNiY2VjYmMsIDB4N2FhMzY0M2IsIDB4ZjZmZjYxZmQsIDB4OWUwODkzMGQsIDB4N2MwNmQ4NjcsIDB4ODE5ZTczZDksCisJMHgyZjgwMGI0NCwgMHhlYTdkNzY4ZCwgMHgzMjFkZTcyZCwgMHg1YTJhMTNlMSwgMHgxNzMzODcyMiwgMHhmZDUwMjVlZSwKKwkweDc3ODY2YWIyLCAweGYxMWZlNDJiLCAweGIyY2RmN2IwLCAweDM4MjFmNzQ4LCAweGRiOGRiMGRmLCAweDE1NjBkOWEzLAorCTB4ZTc3ZGY2ZTcsIDB4NmZiZWViZWMsIDB4NzhhNTMyOTYsIDB4ODUzZjMwZTksIDB4NTM1ZmY1ZDMsIDB4Y2E3YzVjZTEsCisJMHgwZDRmYzUyZCwgMHgyZDg1Njk1MSwgMHhhM2RjMWE2MywgMHg3OGJjNzk0OSwgMHhjZmNkMDY2YywgMHgzNGY0ZmY1ZiwKKwkweGUyZjdmZmFjLCAweGZmMzQ1OWIxLCAweGIyMGU3YjkzLCAweGNmMDEyYWZhLCAweGFlYjBiZWMxLCAweGVmZjAxYTc2LAorCTB4ZDlmYjk2ZDcsIDB4Yjk2NjMzMTQsIDB4NzdmMDA1N2YsIDB4NzdlZWYwMmUsIDB4YWU3MDY5MTcsIDB4ZWZlMTViYTIsCisJMHhkZGEwMDQ2NSwgMHg3ZjBjODlkMCwgMHg5Zjc3ZWU5OSwgMHg5ODY1N2YwMiwgMHhmMDA1NjNhZCwgMHg3ZmNmNjNlYiwKKwkweDE2Zjc4NDkxLCAweDJhYTFmYmY5LCAweGRjZTE1NDY5LCAweDc4OWEyZDE1LCAweGYzZTcxMmYxLCAweGNjZmJiY2ZhLAorCTB4NDk4ZGNiZjUsIDB4M2Y4MTc3YzEsIDB4YmM4ZGU3OWEsIDB4ZWYxZDFhNmYsIDB4MGU3MThhZTEsIDB4ZjJkMDBlNzYsCisJMHg4MjlhYTM0ZSwgMHhlOWM4NWQ3NCwgMHhjYjNkZjg0YSwgMHg4YjNlN2M0NSwgMHgwMmMyOTBjNSwgMHg3ZjVjYWRkZiwKKwkweDU3NTFlZjE5LCAweDFlZjQ1NzhiLCAweGRiYWI4NzM1LCAweDY3ZmJlZmQ1LCAweDMzNzgwMDdmLCAweDAwN2Y4MjkzLAorCTB4M2ZkZjU5ZmMsIDB4YjgxNWM1N2IsIDB4ZTUxOWY1MDAsIDB4NWM3ZGUyNWYsIDB4ZWIzMzNkZTMsIDB4ZWE0NDY4YmIsCisJMHhmYjNlZmI4ZSwgMHg1YTJlZmU1NiwgMHg5YmZlZjA3ZiwgMHg2OWJhMjgzYiwgMHg2ODJmMzlmZiwgMHgzOTUxOGY3YiwKKwkweGYxNTBiMzFiLCAweDMxY2ZkMWMzLCAweGQyZmQwYmNiLCAweDA0MjZjMjIwLCAweDFmYTcxMDc2LCAweGY3ODhjZjNjLAorCTB4YjgyMmVlMWYsIDB4MTc2NWRiNWYsIDB4YmJhZmYwNzQsIDB4N2Q0NTQ5ZmUsIDB4M2E3MGI5OWUsIDB4YWU1ZDVmZmEsCisJMHgzMzljMDhlYywgMHhjMzViYmFlYSwgMHgwMThhM2Q3ZCwgMHhlODY5ZTQwMSwgMHhmODI4YzQ4MSwgMHgzZTFlNTQ4NywKKwkweGU3YzNjOGI3LCAweDhmMzdmZTY2LCAweGRiNTE3NWRiLCAweGE5ZmQ4MWRmLCAweGEwNmEzZmJjLCAweGVkOGJkY2M1LAorCTB4ZWU5ZTk5MTIsIDB4OGUxMGQwNmEsIDB4MDg3NDI0YTEsIDB4OGU4MWZkZDYsIDB4ZWJlNmUzOTcsIDB4NDZjZmE3MzcsCisJMHg5ZWViOWU5YiwgMHhlZTFmZjg4MCwgMHgyOGZmYzE4ZSwgMHhjYzc0YmY3NywgMHhlNjNhMzM3NywgMHhkMWQwZTNiYiwKKwkweDdiZGQ2ZWZhLCAweDY4NThlMGFlLCAweDI4ZmNiYTc3LCAweDdkNjc1ZmJlLCAweGRmNGFjZWFmLCAweDIxZjVhOTNhLAorCTB4ZWQyYjNiNzgsIDB4ZmViOGE3YzAsIDB4YjMxYmY0MTgsIDB4MjlkMjJjN2MsIDB4MDA5MzllODYsIDB4M2UwNzMxOGUsCisJMHgwNmJjMDFiNSwgMHhlN2VjMWYxZCwgMHg5YmE5NzkzYywgMHhmMWQ2NzNhZCwgMHgwNjNhY2FkMiwgMHg5ZmI0ZTMwNywKKwkweGY3NGNkNmU1LCAweDQ1MWMwYTBlLCAweDY5Y2E4OTdlLCAweDg3YzU4ZGJhLCAweGI3ZWZiNmZhLCAweDlkNGI5Y2ZmLAorCTB4NTk1MDJjZjMsIDB4NzNmZjE0YmYsIDB4ZmUwNjRmMDAsIDB4ZmJmMzc1NmYsIDB4N2ZmMTdkZWEsIDB4ZjhhM2I0M2IsCisJMHgzZmU2MWRiZiwgMHhiYmNmZmMwMCwgMHhmYjBkZmUxNCwgMHg4N2ViOGFiZiwgMHhhMjlmZDgyYSwgMHhkYTFmZjQ3YywKKwkweDNhMWNiNGNjLCAweDhkZDEzNGVlLCAweDg3NjRiMDcyLCAweGQ5MzFmN2M4LCAweDNlODY1ZmZiLCAweGZkNWQ3MjU5LAorCTB4YjkxN2I4MjEsIDB4ZjIwMjY3ZTQsIDB4ZmVmZTQyZWIsIDB4ZmRmYzI3ZTUsIDB4YzFiOWViNGIsIDB4ZWExMGIyZjIsCisJMHgxZjlmY2JjYiwgMHhhYTNlYTMwYywgMHhmZjJlNjVkYSwgMHhiYmNmNzc2NywgMHhkZTc4NTk5NywgMHhhZDM1MjQxNywKKwkweDJiNGViZGY3LCAweGI5YmJjZmZlLCAweGI0ZTg1OGRlLCAweGQ3MmY3YmM1LCAweGRiZDY4NzQ4LCAweDMzY2NlNzRjLAorCTB4ODNmNGY0YTYsIDB4YTZjZmEwZmUsIDB4YjhmMTg5YmQsIDB4YzQwOTk1N2YsIDB4YTUyOTc0MTMsIDB4MjAxOWRlMTAsCisJMHhmNDA5NDI4NSwgMHhkN2U1Y2M1YiwgMHg3MmQ4NmZlOCwgMHgxZDlmZmFmMywgMHhjYzQzZGYzMiwgMHg0M2RmMzE2ZCwKKwkweGJlNmFkZTFjLCAweDY2ZDU3ODg3LCAweDUxYzQzZGYzLCAweGM0M2RmMzYxLCAweDMzOGQ3NjZiLCAweGFlNDc0N2U1LAorCTB4YjMxZmI1MzcsIDB4M2YyOWIyN2YsIDB4NTM0ZGZhMzYsIDB4NjZjN2YxZmIsIDB4ZGExM2YyOWEsIDB4N2Y2YTY3YmYsCisJMHg0ZGYzNWJlZCwgMHg1NDc1ZDdmNSwgMHhmODZmZWE5YSwgMHg3ZjI5OTk2OCwgMHg5YjNmZjc2MywgMHgzMTE3NDdkYSwKKwkweDYxYjg3OGZkLCAweDViZGMxMTc5LCAweDc4NzJmMDMwLCAweGExNTM2MmE5LCAweDliMDhlOTdjLCAweDllNWIxMDVhLAorCTB4OTAwNTZiYTYsIDB4N2ZlMGU5MTYsIDB4NTMyZjI3ZjUsIDB4OGEyYTNmMWMsIDB4ODk4YmE3NWQsIDB4NTM2ZmQyNmMsCisJMHhkNDdjZTYxYywgMHg4ZjdkZmU2ZCwgMHgzNTcyMmM5NywgMHhjYjUyN2VhNCwgMHhiYzFkOWEwOCwgMHg2M2NmMGYyNCwKKwkweGM2M2FmOTUzLCAweDAxYjFkYmY1LCAweGEwZGZiN2VhLCAweDliNDZkNTdjLCAweDJmOTU2ZjIwLCAweDlhMDFiZGUzLAorCTB4YWQ4ZmQ4ODYsIDB4MWY5Zjc3YjAsIDB4ZDRmOTlhNzIsIDB4Zjk1ZThmZDcsIDB4MDczOGRiOWQsIDB4NTNmYWNhZDQsCisJMHgyNjRiYzZjYiwgMHgzZmNhMzEzOSwgMHgxNzJkOGMyYSwgMHg3M2M3NGYxNiwgMHhhYmY1ZmQ0MCwgMHhiMzVjMTZmOCwKKwkweDNiYmMxMDdkLCAweGEzNTMwZjNjLCAweDE2Y2NhOWJjLCAweDY3ZGZkY2Y3LCAweDdmZDBiZmVlLCAweDhlYzdkY2RhLAorCTB4N2NmMDBjZmEsIDB4MjZkYWY3Y2UsIDB4N2I1NmJmMzgsIDB4NTFmYTM3N2IsIDB4NWUzMzc2MTksIDB4NWRlY2YzN2EsCisJMHg0NzllMDM2MywgMHhhYzNlNDgxYSwgMHhiNmZkYzZmNywgMHhlYmUxMzQ0NSwgMHhkMTc3Y2UzNiwgMHhlMGQzMzNkYiwKKwkweDNmNjY0MTljLCAweDg3YTE1NWZlLCAweDFiNDdlYmU5LCAweDA0MmNkNzQyLCAweGU5ODcxMWMyLCAweGI0NTY3OTVlLAorCTB4MzlmODFhNmUsIDB4ZWI3OWY4YzMsIDB4ZTdmOGI2NGQsIDB4MGMzYzkyYTAsIDB4NDhhMGU5MmYsIDB4ZGQ1MDVlYzEsCisJMHgyYjljMmY2OCwgMHg0ZjBiZDc3ZiwgMHgwZjY4ZGNjNywgMHgzOGU4NzkyNiwgMHgxN2I0YzdmMywgMHhiYWQ0ZmJiMSwKKwkweDVlZThlNjdmLCAweDk0N2QwZGI4LCAweDAyNmMwZWU1LCAweDkzZTU5MmZkLCAweDE3ZGQ5Njg4LCAweDgzZGJmNDllLAorCTB4Nzg4ZWYwMmQsIDB4ZWZjZGIyNjMsIDB4MDBiNzdjYzYsIDB4NGM3ZmQ5ZTMsIDB4NWUzYTIwYzgsIDB4ODQ0NTlmZTMsCisJMHg3NWYwZjFhZiwgMHhlZWM4M2U3OCwgMHhhYmI4YzdhZSwgMHhjZmMyNGYzMSwgMHhlNjcxMTgwOSwgMHg4OWQ5YmUwYiwKKwkweGFiYzZjZjgwLCAweGUxMDdlZTdiLCAweGRjMTc5MDdiLCAweGY3ZTg3NmMxLCAweGM3MTk0NmMyLCAweDk4MmM5YzZkLAorCTB4NGI3OThkZWEsIDB4Zjc4ZGJmOWIsIDB4NmNkY2IyYmUsIDB4ZGU3NGU1ZGUsIDB4OTMzZGI3MDAsIDB4YThmOGQ1YzEsCisJMHhhZTExMzI0MCwgMHgyOGY0YmRmZiwgMHg1Y2ZiMzVmOCwgMHhjNTA3ZGVmOCwgMHhjN2MwMTBjNywgMHg3M2ZiM2QzOSwKKwkweDNhNzkzMTliLCAweGVlNDE5YWFmLCAweDllZDE2YmFkLCAweDRlYTdlZjg5LCAweDhmYTFlNjM3LCAweGUzM2JkMTM0LAorCTB4ZTJmYzMzMmEsIDB4YzZmZDE5NDYsIDB4M2M2ZTQ5NDUsIDB4ODg2ZTEwZWYsIDB4ZTc5YWZhNzIsIDB4Zjk5YmU0ZGYsCisJMHg1YzI5NWI5ZCwgMHhmODg4NGVhYiwgMHhkMWQ2YjZkZSwgMHhmZDI4ZjRiYSwgMHhlNWNkYmNhZSwgMHhmMTdkNmIwZiwKKwkweGYwNjM0ZTdmLCAweDdiYTdmODUyLCAweDRmMzZkZTQwLCAweDc5ZTNmOWMzLCAweDMxZmY4MDZhLCAweDBkOWMzYzgxLAorCTB4NDUyYzE3ZmMsIDB4MjM2YzE4M2UsIDB4YzdkMzZmYjAsIDB4NzkzMGYwNGUsIDB4ZDk1MWVkOWUsIDB4NzJiZTM1N2IsCisJMHg4NWJlODcyNiwgMHhmZGE3NmNkNywgMHg1ZGZhNzk5NSwgMHhiMGYzNmZmNywgMHg0ZjM2ZmY3NSwgMHg3MmZmNzU5YywKKwkweDk3NTcwN2VmLCAweDU0ODUxZmI1LCAweDM3YjQ0NWQ0LCAweDExMWZhOTA4LCAweDNkNTM0NzZiLCAweDFiZmQwZTU2LAorCTB4YzdmMTMxNzksIDB4ZmY2ZmQwMDUsIDB4NjViZjlhNzYsIDB4ZWRlNWY2NDQsIDB4ODBjZmIwMzQsIDB4ZWNmYjBkMGYsCisJMHhhZWQ5OGY0ZSwgMHgzZmJiZDE4YywgMHhmYmJkMzBmNCwgMHhmNGMwY2Y0MywgMHhmZGExOGZlZSwgMHhlMzQ1ZWZlOSwKKwkweDRhYTkzNWRhLCAweGI0ZjdiZDdjLCAweGFjMWZkZDg3LCAweGU3ODIxNTUzLCAweDBmZDlmYjAzLCAweGRhZTVjOWQ4LAorCTB4ZDZmZWVmM2EsIDB4MWZmOWNiYTUsIDB4NGY4MzJlMzksIDB4ZmNmZWZhY2QsIDB4ZjQxMTJkMzEsIDB4NDIwN2NhNTQsCisJMHg4NmI3NzdkYywgMHgzYzZkYmYyYywgMHhhZDliNmJkMCwgMHhmN2NjMzM3OCwgMHg3OGZlMTY2NywgMHhmNTlmNGQ2OCwKKwkweDE4ZjFjYzJiLCAweDZhYzc4YjhlLCAweDA5OWI0NzhhLCAweDk3M2MzYjhmLCAweGI2YmYwZmIwLCAweGRmMzBhZmJlLAorCTB4ZjhlNGU5ZjMsIDB4MDliZjdhYTYsIDB4ZWIzNzNiYzYsIDB4NmI4ODIyYmQsIDB4MWNmOWNlZDQsIDB4MWVkN2ZlZjUsCisJMHhhZWJjY2NhNywgMHgxZDM5N2UxOCwgMHhhMWUwMDU2NywgMHg3OTlmZDY3MywgMHhlMzAzYWU3YywgMHhiOTllYWI0YSwKKwkweDU4ZTIxMTJhLCAweDdhMGQ5MzM1LCAweGFhN2RmMDQ0LCAweDQ4MzlmOWYzLCAweGVjZmI3Mzk3LCAweDJlNzljMDNhLAorCTB4M2QxMzlkOTksIDB4YTNkYWVmYjcsIDB4YTRmOGY3MTAsIDB4MmM3MjU4ZTEsIDB4NzkzZGNmN2QsIDB4ZmRhNjQ4YmMsCisJMHhiYzdiZGI5ZCwgMHg3NzAzYzI0OCwgMHhkNDNiZDM2MSwgMHg1YjdmMTczNSwgMHhkZWY3NzAxNCwgMHgzN2UxZTg0YiwKKwkweDM2OGY1YjA3LCAweGU1N2M1OTNhLCAweDM3MTczODQxLCAweDZhYmZkYTg2LCAweDdhNjVmMjEyLCAweDI4NWVlZDlhLAorCTB4MWRiZjFkMTcsIDB4Mzk1YzIxZmMsIDB4YTYyZmU2M2YsIDB4ZDA0YWIyNTksIDB4N2VjMTE2MzMsIDB4ZWUzNzNjZDMsCisJMHhjOTcyZjk2NywgMHg5ZGZhNmNjOCwgMHhlMzg3YWQxMiwgMHg2YWY5YzRjYywgMHgwNGVmYzA5OCwgMHhmMTQ0NGViOCwKKwkweGVmM2MwMmY3LCAweDNlZjg2MDc2LCAweDAyYjI0M2YxLCAweGJkZmZjMjllLCAweDc4MDkzYzFhLCAweDA5YWIzYTRmLAorCTB4NzdjNDFhODksIDB4NDcxZTZlOGEsIDB4ZDMwYTY5NTMsIDB4M2FiN2RkYmYsIDB4ODQ4Y2Y3ZjAsIDB4NTNhYWFmMDUsCisJMHgzY2RhZmVhOCwgMHhkZDhlZmQ5MywgMHg5MjBiNjNmOSwgMHg1NTY5MWZjMCwgMHgwZGYyZGU5OSwgMHhiNDYzZTFlYiwKKwkweDZiZTcwNzhiLCAweGU2MjMxNzM3LCAweDQwNTc3Yzc1LCAweDkyMWQxOTU1LCAweDhhNmI2YzMzLCAweGY5Yzc4YzM1LAorCTB4MjVmZTk4ZjMsIDB4M2RmZjFhNTIsIDB4MWViN2NhMjksIDB4MWM0M2E2Y2QsIDB4YzVjZWY4ZDgsIDB4ZmM1MjJiYmYsCisJMHg3ODAzY2ViZiwgMHhmMGZjZGI0NiwgMHhhYmZiOGY0ZSwgMHg5MmNhMzg2ZiwgMHgyOGNjZmI2OSwgMHg5NDVlNWZiZSwKKwkweGMzOWRlMWMwLCAweGZiZWYwN2RlLCAweGQzNDVlMzRlLCAweGQ0YjUxODdkLCAweDI3Yjc0ZWZjLCAweGUyMTRiNGQwLAorCTB4NmRlZmQwZmMsIDB4OGJjZWY4YzksIDB4MzhhMjllYjksIDB4MGJiYjk2OTEsIDB4MGFhZWU1Y2QsIDB4NDdlMThmOWEsCisJMHhmNmQ2NzdlYiwgMHhhZTkyNWY4NiwgMHgzN2Y2MzgzMiwgMHhiZjBmMTAzOCwgMHg3OWZkNTA2YywgMHgzNDBlOGY5NCwKKwkweGIwN2YzMGY4LCAweGRhMzRjMzQxLCAweDBmY2IxMjMwLCAweDJmMzFmODM3LCAweDk4NmNmNGRhLCAweDdmYWZmYTRmLAorCTB4ZWViYjE0OTAsIDB4OWQ1NGVmYzIsIDB4NzVjM2UxOGMsIDB4ZjlhZGU0NzIsIDB4ODhkZjhmODAsIDB4YWYxNWFmODgsCisJMHhkZWZlNDc4ZSwgMHgzYThlOWEzNCwgMHg3MzY3YmQ4NiwgMHhmZWZlYzYzMiwgMHhkMjU3ZjJlOSwgMHgwZDVmMjg0YSwKKwkweGQzYWZkMWY5LCAweGVmYzNjNjRhLCAweDE3ZjNiMDk2LCAweGY2M2E0MTcwLCAweDI1N2FlZTFlLCAweGUwOTNmOWEwLAorCTB4MzRjNjM0NzcsIDB4ZmJjMjg2M2IsIDB4Yzk1YmMxYTQsIDB4ZmQyMzk0NTgsIDB4YmJmMDg5YzUsIDB4NmMzMzdiMGIsCisJMHg5NDlhN2ViNCwgMHgwN2Y4ZWNkNywgMHg2NGRlYWI4MCwgMHhlN2U3YWZlNywgMHg2YzlmMWYzMywgMHhiY2UzYWZkNiwKKwkweDBhNjZmZjRjLCAweDcxYmNlM2M1LCAweDUzN2UwOWY4LCAweDM5YWNmZDAwLCAweDMzMDdiOWM2LCAweGJmNTQ4OTFlLAorCTB4ZWI4YTc2ZTEsIDB4ZGZiM2VmZTYsIDB4Yzc1NDQ4NWYsIDB4ZjdiZGUxZmIsIDB4Y2VjMzVlY2QsIDB4YmVjNWY3YTksCisJMHhmZjk5YmVlNywgMHhlMWUyNDQwZSwgMHgyOTE3NjgyNSwgMHgxMDNiZjYzZSwgMHgwZjdiMGEyOSwgMHg0ZDkzMDQ4OSwKKwkweGU1Y2RlZGVmLCAweDA2MDZjY2ZkLCAweDFmNTdkMDlhLCAweDE1ZmRlNmNmLCAweGZiMGU3OTFkLCAweDg4OTdkZjgzLAorCTB4ZjA4N2VmZjUsIDB4Y2NkOGMzZGYsIDB4MzU3NGQzZjUsIDB4ZWQ0ZGVjNTAsIDB4NWJkNDY3NmQsIDB4Nzc1OWViYmYsCisJMHgwYmQxMjE2ZCwgMHg4OTAxNDNmNiwgMHhlZDA0YmQ4MCwgMHhkNGJiNjk4YSwgMHhkYzAyMDMwZiwgMHhkN2NlMzNlZiwKKwkweGNkZjgwYjNlLCAweDkzZGRmZGVmLCAweGViYzMwMjdkLCAweDhhN2QzYzkzLCAweGQ0NDk0ZWZmLCAweGUzMDc5ODEzLAorCTB4MTIzYzE2ZmIsIDB4Y2E3NjAzZGEsIDB4NjIwNmJiM2UsIDB4OGZlNDc0NTIsIDB4Zjg5NDdlZjgsIDB4ZTcwMWM1M2IsCisJMHhiYzBmNTNmYywgMHhkOWU1ZWVjZiwgMHhiZjM4MTQzYSwgMHg3YzViZDJiOCwgMHg0NTUxYzQxMywgMHhmMzAzM2VhNSwKKwkweDgxNmY0ZWY3LCAweGZhOWU4M2ZjLCAweGRkYTNkODg3LCAweDFmMDEzN2M1LCAweDA2ZjdmM2E0LCAweDAxMDAwNDA4LAorCTB4ZTFhYTA4MGUsIDB4NDNmZDYzOGYsIDB4NjQ2NTRlYjMsIDB4MmJmMmNjOWYsIDB4ODczNjM3YmQsIDB4M2Y1ZjIxMzIsCisJMHhmMjA4ZjgwZiwgMHg3ZGJmYjQ4ZCwgMHhjMDIxYzE0OSwgMHg4NmUxNmU0NywgMHg0MjM3NjNlNiwgMHgwMzdmNjhkZSwKKwkweDU3ODlmZmI2LCAweDNiOGZmZTY1LCAweDRhZjYwZDk4LCAweDc5YTU1ZTRmLCAweDYyNWU0YzRmLCAweGE5NjBlMjc5LAorCTB4MjM5YWJmMzEsIDB4ZDA3M2M0N2YsIDB4M2JkODA3YjUsIDB4NjYwN2E5NWQsIDB4ZDRjZjMwMDgsIDB4ZmYxMDMzZmQsCisJMHhiY2I3ZDVlNywgMHg4NzhjMzQyYiwgMHgwNGViNjA4ZiwgMHhmNDFiOTc4YiwgMHhhNmUxZWUzMCwgMHg3OWY3ODNkOSwKKwkweDlkNjFmODYzLCAweGM0Yzc2Y2Q3LCAweDBmYmMyN2RjLCAweDFmZDNkZGYwLCAweDM2Y2JhZjhmLCAweGY3NGE5ZWY2LAorCTB4YzZlZmQ4OGYsIDB4NTQ3YjAzMGQsIDB4ODZiOWI4ODQsIDB4YTNkYzJlNjksIDB4NzBjMWZlYTcsIDB4OTgzOTVjMTIsCisJMHhjZGUzNWZkNiwgMHhiNTVlM2E0MSwgMHhhOWNkZmIzYiwgMHhhNzVmMmY1YSwgMHg4MDc3Mjk2NCwgMHhmOGI1NGUzZSwKKwkweDNmNWNkOTM1LCAweDdmOGI1MDhmLCAweDM3MmI0ODkzLCAweGYwYjVjMTBhLCAweDhmNjg2YzllLCAweDkzN2RlMmFjLAorCTB4NDcyODE5NWQsIDB4MjI4ZWI5NjcsIDB4NWYzMTgzZjUsIDB4Y2JiZmVmY2QsIDB4NDc2YjgzMmIsIDB4YzQ1OTFlODEsCisJMHg3NjU1NmVmNCwgMHhkZmE2NThhMCwgMHg4ZDk3M2Q1NywgMHhmMDY3MGJiZiwgMHgyNDUyNTU1ZCwgMHhmN2JiOWM2ZCwKKwkweDM3OTFiNzVjLCAweDIxZTQ0NzdlLCAweGVmMDlkNWI1LCAweDVhZmIxOGYyLCAweDY0MzdmYmI1LCAweGM3ZmQzZWMxLAorCTB4M2I0NmRlODcsIDB4MzY2MjQ5NzEsIDB4NzZkMzU5YzIsIDB4NjlkZjgxNWMsIDB4N2NhMzZkYTksIDB4ZDhmYmJmNDcsCisJMHhhM2M3NjNkOSwgMHhjODg3ZjI1ZiwgMHhiZTAyNmZhMCwgMHhjMzY4ZDBmZSwgMHhkOWZkZGRjYiwgMHhmZDUyMmY1NSwKKwkweGVhODVkM2E2LCAweGQzMDM4MzY4LCAweGQ1ZmQ3YTlkLCAweGYwOWMwYWUwLCAweDQ5YzliODJlLCAweDFjZjFlOWY5LAorCTB4ZWFmZTA1NWQsIDB4ZjUxZWI3YmMsIDB4M2E4YWUzZDgsIDB4ZDNhZmY4MGEsIDB4ZTA2NmMzZmIsIDB4OTEyNGFhZTcsCisJMHg1ZjBmZWJmMywgMHg3ZWY4ZjNkNiwgMHhiOWVmY2QzZCwgMHhiZmE2ZWRiNywgMHhhMTYwZGY2OCwgMHg3YmE5ZmVkOSwKKwkweDQxZmM4ZGM0LCAweDAyZGY5MmVkLCAweGI2NmVkNTFmLCAweGIzZmQ2MDg1LCAweGJlZjFkYTM5LCAweDFiZTgyNzczLAorCTB4ZmJlNjVmZDQsIDB4YTYwNTFiOTksIDB4NTg3MzQzMGYsIDB4Zjc3MmZhMWMsIDB4NzRiZTJiMzQsIDB4ZmQ4YzcwOTEsCisJMHhlOTkxMjRiZCwgMHg4NDI5MGFhYiwgMHg1ZjE1NzZmYiwgMHgyZmZlYjE3YSwgMHhiYTY5YzcxZiwgMHgxYzc3ZGEwZiwKKwkweGUzMWJkNjM3LCAweDgzOGVmNzU0LCAweGY2ZmQ1MjdjLCAweDVmY2ZmNDYxLCAweGFmYjBkYWJjLCAweDc3ZmZkNDc1LAorCTB4NjFjZmM1M2UsIDB4ZTg3NGY1MzgsIDB4ZDBkOTQxZTcsIDB4YTRjZmQ0MjcsIDB4MWVlNzg2NzgsIDB4ZjkyNDNlNzksCisJMHg0N2E5NzkwOCwgMHgyZTZkYWNmZiwgMHhmNmZhMDRjOSwgMHg3ZWIzMTNkNiwgMHhiNzRhMjVkMiwgMHgzZTc4MTI5NywKKwkweGM5NzM3Zjc0LCAweDEzZWQzOGE0LCAweDhjNzNlZDJjLCAweDdmYjE0ZmZjLCAweDNhMGYzYzJiLCAweGRhMGVmMzdiLAorCTB4YmQ5M2ZhNWUsIDB4NmRmMDBmMjcsIDB4NGJmYTU5YjAsIDB4ODZkZmM2MzYsIDB4YjdmYzE5ZmQsIDB4NjVmYmJiYzcsCisJMHhhNWU5ZWY3OCwgMHgxMGYxNDBhNCwgMHgyMDY4ZGY2NiwgMHgxNTI0NWI4NywgMHhjMGQxODc3ZiwgMHgzZWJlMWVmMywKKwkweDhkNzk3YzU1LCAweDc4YmRmZjA5LCAweDlmOTUzMDJmLCAweGZiNGNkMDZlLCAweDJlMTc4YmExLCAweDdiM2Y3YmMzLAorCTB4NDE1NjNhZjgsIDB4ZGIzZWVjNDIsIDB4N2RhNmI5MjMsIDB4YzcwZmZmZDAsIDB4YjhhMzg1ZDcsIDB4ZmU0YTM4MWYsCisJMHgzMjhjNzBjNiwgMHgzODVlODFlOSwgMHg1ZmU1NGRmMiwgMHg2OTMxMGUxNywgMHhlYzM2Njk3NiwgMHhhMWIxYWQ1MywKKwkweDBiNjY5MDlmLCAweDZlYzA3MjM5LCAweGY3ZWM1ZmZiLCAweDA3MzQyMDFhLCAweDYxYTg5OWU3LCAweGNlNTdkYTZjLAorCTB4MDc5ZjYwMzksIDB4NDQ4ZTc5YzYsIDB4NDBlMzQ5OGUsIDB4MDU2ZDc0OWUsIDB4OTEzZjUzYWMsIDB4ZTVhMWFmZDAsCisJMHg4NjE5MzkwZSwgMHhmZGUxZDU2ZSwgMHhkODk1MmEyYiwgMHhiMDc1NGU1ZiwgMHhlNmY1MTk4NiwgMHhhYjg3NjI3NywKKwkweGU1YTI1OGE0LCAweGI4NzlkNWUzLCAweGRkOTRlNWVlLCAweGZkZjYwNzU1LCAweGNmZTE3NzM2LCAweGJjOTMxMzU3LAorCTB4NWFiMjdkYTIsIDB4YzdmNjhhNTgsIDB4OWIxN2M0OWEsIDB4M2QzOGRmNjEsIDB4MDIzM2Q5ODEsIDB4NThmOWIxNzksCisJMHgyNjdhYmM0NiwgMHhiZGY3MmRhZiwgMHgzMWM0MTM3OCwgMHhhZWQ0YWViNiwgMHhhYjZlN2YwNiwgMHgwYzM5MWMzMywKKwkweDZlM2RmOWViLCAweGRjYWEzZGZjLCAweGY4MTZlMTc1LCAweDgzNzEwYWJkLCAweDMxNGJkNzBkLCAweDJiNmJiYzI5LAorCTB4NjA3ODE3OWMsIDB4OGJlYzFmODQsIDB4NDBkNzYwYWQsIDB4NWM2ZTM1ZmIsIDB4NDIxYTViZmYsIDB4ZTJhZjJmNjgsCisJMHhmNWY2YzBlYiwgMHhlNzM4NTQ5MywgMHg5Mjk2ZThkYywgMHg5MTZiYmQ2MSwgMHhiODA1NmZlYiwgMHg2NGVmYmE1ZSwKKwkweGQwM2FlM2IzLCAweDQxOTZmZTYzLCAweDgwY2JlZjNjLCAweDcxY2I0ZDc1LCAweDE0ZjVlNThjLCAweDY4NTc1YjE5LAorCTB4MzQ4NWMxODMsIDB4NDRmZmMzZjIsIDB4MzNkNDEyYWQsIDB4NmIwZWQxMjcsIDB4MDRhYjJmNzQsIDB4YmZkNjhlM2IsCisJMHg3YTc4YTBlYywgMHg4NWUzOTkzYywgMHhlOGY0ZTdkNywgMHhhMGNkOTNhNSwgMHhiZDE1YzUwNywgMHhlZjNhMTJmOSwKKwkweDdhNjMzZjFkLCAweDNmZGEwOWVhLCAweGU3NDUyYmJjLCAweDE4Nzc4MjEzLCAweGU4NDk0N2JiLCAweGMxMjQyNTg3LAorCTB4NzRkMGM3NmYsIDB4OWRmYjBlNzQsIDB4YmQxN2FhNWIsIDB4Mzg0OWM3ZTgsIDB4NDkxZjYzNWYsIDB4MGY3ZWM1MTksCisJMHg3YWMzZGExZCwgMHg4MzkxOTA5MywgMHgwY2NhOThmYiwgMHhlMjgzNWVmNiwgMHg2NmZkZTM3MSwgMHhkZDU2NzdlMywKKwkweGIzYTdmOGM0LCAweDY3ZGYyOTc4LCAweDQzZGU1OTcxLCAweDg5NWZhZTcwLCAweDc4NGVlOTliLCAweDRmODYyMTM3LAorCTB4MGI3YmNiMTUsIDB4MDdjYzA5MTIsIDB4Y2Q1NDRiN2IsIDB4ZTQ0OWJmZTUsIDB4ZDg4MzRhZmIsIDB4YjcwZWFkZWYsCisJMHhhMzJlZDA4NSwgMHgzNWU5ODQ1MiwgMHhkOWY2OGEyNCwgMHhmOTgxZDI2OCwgMHhlNjZkZTAzMSwgMHgwZDJjMzVjMiwKKwkweDI3OGQ4ZTJmLCAweGJiZTJjOGJhLCAweGM3ZWMxMTAxLCAweDc4OGQ1YmI0LCAweDQ0ZjVmMDRjLCAweDk2YmZkZWJhLAorCTB4ZmMzNmUzYzgsIDB4NjY1MzhjNzcsIDB4N2Q3ZWUyMTQsIDB4NWZhYjEyNjYsIDB4MGZiYmM4MTUsIDB4MzM4ZGJjZWMsCisJMHhjNjljNjFhNiwgMHhmNThjZWZiMCwgMHgxNmRmYjBkMiwgMHhhYjU3OTg3MiwgMHhjMTdiNWM0MiwgMHgzYTE2ZWJiMCwKKwkweGI2NzUzZTU5LCAweDg4NjhlMGZlLCAweDBiNTNiNjZiLCAweDJmZWUxYjM0LCAweGY5NmFmOGIzLCAweGIwMzRlMmU2LAorCTB4YmExZTE2Y2IsIDB4NGNlNGVkMTUsIDB4OGI2NWQ5OTUsIDB4ODI1MGNlMzYsIDB4ZGFkZWUxYTMsIDB4OGEwN2Y0M2MsCisJMHg4NDQ4NGMzNywgMHg0ZWQ1ODQ3ZCwgMHg4NTc1ZTI3ZiwgMHhmYmUyNjdlOCwgMHhjN2I1MDNiOSwgMHgzNTVkYTZiNiwKKwkweGFiNzFlNDE5LCAweGNhOTAxMjhkLCAweGVlYjI0YmZiLCAweGIxN2MwYjFlLCAweGNjZWQwZjIxLCAweGM2YzEwOWFkLAorCTB4ZDZlZmRhMjQsIDB4YWJmY2Q2N2YsIDB4NGVhN2ZlNjgsIDB4OGMzOGYwYmQsIDB4ZDU4MTNhYjMsIDB4YzA1MWJiYzMsCisJMHgxMmU3M2Q5YiwgMHhjOWJiZTFiNiwgMHgzZDZmOGRmZCwgMHgxMjUyZjA5NywgMHhhOGNhN2Y3YiwgMHg3ZTUzNmZmZiwKKwkweDgwMDA3ZDdjLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYmRmZjAwLCAweGQ1OTQ3YzBiLAorCTB4NjZmZGY4OTUsIDB4NjY2NTc5YmUsIDB4ZjI2M2M5OTIsIDB4YzIxMzA5MjIsIDB4OWU0ZTVlNGIsIDB4MTI0YzIyODAsCisJMHg0Y2I0NDNjMiwgMHhlODIwMmExMCwgMHhhNzkwMzRmMCwgMHhiYWRjNWQ0OCwgMHgzMDA0MGNmZiwgMHg1NzA2YjY1MCwKKwkweDg0ZWEyYjExLCAweGJiYWFjNTYyLCAweDM1MWJhMzQxLCAweGI4ODA4MGVhLCAweGRhNDQ2ZGQ2LCAweDhmZmQxNmQyLAorCTB4NDgxMDE1NGEsIDB4ZmVkMmI1OGEsIDB4MzljZjY1ZGQsIDB4N2NjY2RlZjcsIDB4YjVmMDE5OTMsIDB4M2VmZWI0ZmYsCisJMHhlN2RkZjdlZSwgMHhjZTczZGY3OSwgMHgxMmU5NzNiZCwgMHgyYzYxNGRmYywgMHg1NjMwYTQ5NCwgMHg1MWMxZDhjYSwKKwkweDYxOGNmNThjLCAweDI0ZGVhOThjLCAweDA2NGRjZjA2LCAweDM0ZTJkMjZmLCAweGEzN2VmYWM2LCAweGY1ZTFiYjY3LAorCTB4OTI2ZjY2MTcsIDB4MjVkOGM2YzMsIDB4NzlmYTJlZDEsIDB4YTBiMTk5YWEsIDB4Y2RiM2IxODksIDB4YzExYzE2NmUsCisJMHgzMzY2OTlkOCwgMHgxZjk2NmI5NSwgMHg5ZmEwYzY5OCwgMHhiOTg1MGU5YSwgMHhjNTViMTlmMiwgMHgzZjYzMzZkYSwKKwkweDY5OTIzYmFmLCAweDNkMDE1NWRjLCAweGY0NjQ4ZTBiLCAweDViZmUwOTc3LCAweGQ1MjhmY2JkLCAweGViYzlkZDVmLAorCTB4YWEwZWIyZDcsIDB4NGYzMTkyYmYsIDB4Zjc2YjNjMDcsIDB4MWNkMDU5NWEsIDB4NTFkZjVmYWUsIDB4NGExZjY5YWMsCisJMHhkN2JmNTFkMiwgMHgzYjA2ZmIyNSwgMHg1YmRkOGM5YywgMHgyYWJlZmMzZCwgMHg1ZDU2OWY3OCwgMHhmYWUxZjY2MiwKKwkweDEzZTM4ZTU4LCAweDg3YWZhOGFiLCAweGViZTYzYWY3LCAweDc3YWViMTg4LCAweDQ5ZGU1YzA0LCAweGFjNGU4YTgyLAorCTB4MzJiMWQwZWQsIDB4ZTAzYWQ2YzYsIDB4MWVjNjJlOWYsIDB4NmM3Y2Q4NTAsIDB4MTVmN2Y2YjcsIDB4YzI2MzI5MTksCisJMHg5ZTJhZDZlZCwgMHhmODk4YzcwYywgMHhhOGJjNmE3MCwgMHg4OGQ0ODE2NywgMHhjNDY3ZGFiMiwgMHgzNDVlMzVmNSwKKwkweDBlZjNmYmQyLCAweDYzMDc1ZmIzLCAweDNmZjRjOTFlLCAweDdmYWMyZDcwLCAweDE5NTNlYjI2LCAweDkwOWY1M2NjLAorCTB4Y2Q1ZDhlMzgsIDB4NzEyNThiNTgsIDB4YmE2NzNlMzcsIDB4MDhhMTdkMGMsIDB4NTMzMzMwMzgsIDB4ZjgzMzdlNzEsCisJMHhjNGViZjYyYiwgMHg3MTk0NDc2OSwgMHhlZDQwM2VkOCwgMHhhOThlZDk2NywgMHhjNDczNDAwYywgMHg4MzAzNzM1ZSwKKwkweDkwYjAzN2Y3LCAweGNlMDYwYWNhLCAweDI4ZmRmYTBmLCAweDIzNTlkZmIyLCAweGRkMWJlNWI1LCAweDA5ZWNmMmRhLAorCTB4N2U2MzMyZGEsIDB4OWE0ZmQ3ODIsIDB4MWE0ZWNhOWIsIDB4MDRmZWZkYzIsIDB4MDMxMWQ2YTYsIDB4NTgwMmI3MmUsCisJMHg1ZWVkN2ViMSwgMHgwNDY0ZTA0YiwgMHg5MjNiZWIxZSwgMHhhZWM2ZTUzNSwgMHg4OGM5YzBhYywgMHgxZmYxNmE3MSwKKwkweDEzNWZmMDU5LCAweDU4OWQ3NzVmLCAweGRmNDYwN2Y3LCAweDViYzAwZWFkLCAweDcxMTkwYjNkLCAweDQ2YzE0MGRkLAorCTB4YWNjNjU4ZWYsIDB4N2M0NWU2MTYsIDB4ZjE2ZmQ4MWQsIDB4Y2ZlODEyYjAsIDB4MDBiNzZlNjYsIDB4YWJiYjFiN2MsCisJMHhkZWYwMjU5NSwgMHgzMGVmODc2YSwgMHhlMTk2MjczZiwgMHhmYWYwMzU2OSwgMHgwZTg4MDU4YywgMHgzOWRhOGZlMCwKKwkweDViZWQ5OWJkLCAweGI3MTNlNDE1LCAweGNkZmVkYWFiLCAweGZmMDBkZGU3LCAweDRmMDI5M2RkLCAweDI0YWMzZDk1LAorCTB4MGVhM2FjNDYsIDB4NWUxZTkxZDYsIDB4MDdlYjM5YzcsIDB4NTgyZjg4NjUsIDB4YTVlYzZmY2YsIDB4YTY0NjE3NDgsCisJMHhmM2Q3ODUyNCwgMHg1Y2I1ZTFhZCwgMHg1ZGM2YWYwYiwgMHgxODM3YTIzNiwgMHgxODQ0YmRlNywgMHhjZWE3NjFhNywKKwkweGNlYjI4NDZmLCAweDdlNDQ2M2RjLCAweDNjZTkxN2I5LCAweDFjNzJkZTA2LCAweDZmM2M0YzRhLCAweGUwYzczYzQzLAorCTB4ZmNhY2VkYTcsIDB4MWNjN2U0M2UsIDB4YzcxODFmZTQsIDB4NjUyN2VlYjYsIDB4OGY4MThiMjcsIDB4ZmExNzM3YWEsCisJMHgwNTRkYmVhMCwgMHg1NDcxODZmZSwgMHgwOGE5YmZmOCwgMHg2ZDNiZDljOCwgMHhlOWQwMzI1NSwgMHhjM2U3M2IyOSwKKwkweDdhMmU4OTBkLCAweDBhYmM1MGVlLCAweGU3NWQzNWUyLCAweGQ1ZmE0N2M5LCAweGNjNDNiODI3LCAweDY2YTNmMWMxLAorCTB4Y2I2MDE5NDIsIDB4Zjk2MmMxYWUsIDB4ZWZlODFlYmQsIDB4Y2IxYjk4MjEsIDB4ZjAwOTg0MTYsIDB4Y2JjMmM4NzgsCisJMHhlZmNhMzkyZiwgMHg2ZWUzMDhkZCwgMHgwZGU1ZTY0YSwgMHhkNWI5YmQzZiwgMHgxNmNhMDkzZiwgMHhlNTQzOWU1OSwKKwkweDQxNmQwYzg3LCAweGZmZGRlMDNkLCAweDQ0ZjVjOTgyLCAweDI4ZjdiNTNlLCAweDMyMzA1ZTU4LCAweDRkNGMwNGYwLAorCTB4MjM2NTg0M2YsIDB4NDIyNmE2NWUsIDB4ZjRiNzIwZTcsIDB4OWI3NjlhMmYsIDB4ZWVkMDVlYTAsIDB4YTc4NDI3ZmIsCisJMHhmYjM5ZmY1YywgMHgyNjM2M2NmMSwgMHg0ZDdlN2Y2NiwgMHhhY2RmNzk3ZiwgMHg1M2JmMTgzZiwgMHhmYmY4NzU3NywKKwkweDQxOWRjNGQ0LCAweGMyZTc2ZjNkLCAweGU3YTcyYzc2LCAweDlmZjQzZjAzLCAweDZkODlhMmZlLCAweDA2MjNlMjg1LAorCTB4ZGExNzliNzYsIDB4NjMyYzVkZDUsIDB4ZDQzOTA4YzEsIDB4YjY3OWYwMjMsIDB4NWI3MjQxZDksIDB4Zjk0M2FmYmUsCisJMHhhOWY5MDYzZCwgMHg3ZDcwZTQ4NywgMHhmZTQ2YWE0NywgMHg3ZjVjYjk0YSwgMHg3ZjRkNWFmMSwgMHhjMjdjOGUzOSwKKwkweDQzZGFiZDU3LCAweGUyZmVhZGYyLCAweDEyMWVmYTY0LCAweDczNmNmNGYyLCAweGY4ODllOTI2LCAweGM4ZDIwY2UzLAorCTB4MTMzOGYwZjUsIDB4NzJmOGIwNTksIDB4ZWZhMjRjZTMsIDB4Y2JlNjFjNzIsIDB4MDZiZGI5MjIsIDB4YTQyNDBjZTcsCisJMHg4N2JjODIzNywgMHg3NTBjMmU3MSwgMHg0NjVmMjUyNSwgMHgwMjc2ZDk5ZiwgMHg2N2FjNDU5MSwgMHg2MzM0MWE5YiwKKwkweDA3ZGNkYmZmLCAweGZjMThiZTFjLCAweGI4NDRlNTIwLCAweDFlZGI1MWJkLCAweDgxMWIyM2Y0LCAweDQ4NjNlZGY0LAorCTB4N2FhY2ZmYjcsIDB4ZDRmYTkxY2MsIDB4NTAzOGYwNjYsIDB4OGFmNmE4NmYsIDB4MzQzNzJlMjMsIDB4ODY2NDdlNGQsCisJMHg1MTY5MjgwYSwgMHhkOTdmM2QzOSwgMHhkMWU4ODFiNiwgMHg0MTFmNzA2ZSwgMHgzYWVkZGFmYywgMHhhZmJlMWY5NywKKwkweDQ4M2NlOWI3LCAweDczMGUyZDI3LCAweDUxYmRmMTAwLCAweDcyODFjMWI5LCAweDA3NmJmNjQzLCAweGI4ZjM4ZjMxLAorCTB4N2E0MjFiNjAsIDB4ZDU3YWRlM2QsIDB4MGY1NDg5OGIsIDB4YTkxOTkyNjYsIDB4YzZmN2ZmMWYsIDB4MGYxN2M1ODMsCisJMHgzMWJkOGYxYywgMHhmYTBiODhmMSwgMHg2ZTc0NGI1NywgMHg5MTBiZTAwYiwgMHgxZDA0NzFmYSwgMHhkZjYzZjc0NCwKKwkweDc3OWNjNmE5LCAweGZmMDkzZDc0LCAweDg0MzZmOGI4LCAweGU3ZmUxMTEyLCAweDgxMTliYTZkLCAweDRkMmVmMzE4LAorCTB4OWU5YmJlNTYsIDB4ZGYyNTE0NWEsIDB4M2MzYjdmOTMsIDB4ZDA5NWVkODgsIDB4NDlmMjBhMGYsIDB4YTMyNjk2ZmUsCisJMHg5MGJjMmRmYywgMHgzOTIyZTk1OCwgMHg3M2I1ZWU5ZiwgMHhiNmUzODViMSwgMHg3ZDlhOGVkOCwgMHhlZDk4OGZhNCwKKwkweDNlYmZkOTEzLCAweGI4NDlmZDNlLCAweDY0YWFkZTE4LCAweDA0NjAxZjg4LCAweDRhZTM3YTg2LCAweDQxMmJiMDcwLAorCTB4MTU5N2UyMmYsIDB4ZDNlNTBjYWEsIDB4YTc2ZjNhNDAsIDB4NzdkN2Y0ZjksIDB4ZWIxMWU3NDMsIDB4MGVkZDUxNmYsCisJMHg3NWZkNmJhNCwgMHg5OWNhMzMxZSwgMHhlNjM5OGVmNSwgMHhhYTM3OTQxMCwgMHgyMGY5ZDlhZSwgMHgwMmRlZmE4NywKKwkweGI3ZDYxMjdiLCAweDFjYzhhZDI5LCAweGMxNWE4ZjhiLCAweDJkZjljNDZlLCAweGQ2NjlkNjRkLCAweDFkNjY5ZjIzLAorCTB4ZjdlOGRmZTcsIDB4OWViOTkyNWIsIDB4YjEzZmRkNjgsIDB4OWYxMjUzYzcsIDB4NzlkMjQwN2UsIDB4Y2I5YjhmNTEsCisJMHg1ODU2Yzc1NCwgMHhlN2MwZGU5ZiwgMHgwNzYzODk2YiwgMHhjMWUzN2VjYSwgMHgwYjdlY2I2YiwgMHhhODc1NjljOSwKKwkweDQ0ZjY4MDM5LCAweDU0OWI3OGY0LCAweGJlMDc4Zjc3LCAweGY4Zjk4MjZmLCAweGM3YzM5Y2IxLCAweDNhYTI1NGRmLAorCTB4MTZkNzQzNzYsIDB4NDczMzAyNTcsIDB4NGIzODM3ZDQsIDB4NmMxN2ZlMDgsIDB4ZGYwZjRjNjksIDB4YzYzZDIxMzcsCisJMHhkMzg0OTc5OCwgMHg2OGVmZTRiYywgMHhlOGEyZjkzZiwgMHhjM2I3ZjczMiwgMHg1ZDBkMTBkOSwgMHhjYmEyYzZiNiwKKwkweDRiMzdhODc5LCAweDM5OTlmY2Y5LCAweDkzNDNmZTcyLCAweDhjN2M4ZWJlLCAweDQ5YjI5YmE2LCAweDk3N2M4M2NjLAorCTB4NTg3NmNmMDEsIDB4NjZjYWE3NmYsIDB4ODA3ZDQzZWMsIDB4OTg0NGQ2YjYsIDB4ZTYzNmNkZGYsIDB4MzkzZTk5MDAsCisJMHgzMjY3N2NiNSwgMHhlN2FjYjdhYywgMHgzZjIxOTE4MCwgMHgxZDY5M2E3NCwgMHhmNDdkYTI3NSwgMHg4ZTE0YTZiOCwKKwkweDgzOGE1MzNmLCAweDNkYzc0OTllLCAweGY4MDE0ZjRmLCAweGI4MjRmNjc2LCAweDk5ZDRmODE0LCAweDA2MzBmYTAyLAorCTB4YmMwODhmN2MsIDB4OWZjNmQ2MzMsIDB4ZjIxYzY4NmEsIDB4YjY1ZmFjOGYsIDB4YzM3Njc5ODgsIDB4NmIwMjUwZjMsCisJMHhiMmJkODMzNSwgMHhjNjA3Yzg0ZiwgMHgxNTRmZTdlZSwgMHg5OWM2MTcxOCwgMHhkZGU4Y2FmZCwgMHhmNThhMmY2NCwKKwkweDgwYjUwMjFmLCAweDQzZDNkM2Y1LCAweDc3ZmQxNGUzLCAweDU4NWVkYmMwLCAweGVhZGUwNDdkLCAweGRiYzIyMWNkLAorCTB4NmJkZjQ2ZGIsIDB4ZTNjNjlmMDgsIDB4NzcyYzc0YTEsIDB4ODc5MzNkMWUsIDB4NzBiNjcwZjgsIDB4MjVlZmI1ZmIsCisJMHg2ZWU5MDA2YiwgMHhkM2Q2N2UyMCwgMHgwZTJlZWFmYywgMHg4MWUyZmU2MiwgMHg4MzUzYWI3OCwgMHgyZWViNWZhNCwKKwkweDU4NzdkMWU2LCAweDEyOWNkZmI3LCAweDZjMWIzZWZlLCAweDJlYjAwOTg2LCAweDQyNzBlNjY2LCAweDQ3YzJjNGY4LAorCTB4ODk2YmUwYmIsIDB4YTNlYjUwMGYsIDB4MDgxZjAyZWQsIDB4M2VjNDhmYTcsIDB4NGVlZjFmYTcsIDB4NzgwNjY2ZTMsCisJMHhlZmU2NmIzZiwgMHhkZjI0Njc5OSwgMHhmZTdkMDk4NywgMHgwMDVlNDI1MSwgMHgwZDFmMzNmNywgMHg3YTQ2Y2UwNywKKwkweDkxZTk1ZDUwLCAweGUyY2VhNzdhLCAweGFjM2U2ZmI5LCAweDY3YWJiZDliLCAweDU5NjNjMDRmLCAweGVkMTVhZGE1LAorCTB4NGYyNjY1YWIsIDB4Y2I1ZGRhMTIsIDB4ZWIyYmQzZGUsIDB4YzQ4NDA5ZjMsIDB4M2MwNDJiMDcsIDB4NWRmNzMyY2YsCisJMHgzNmZmM2Y4OCwgMHhjMjA5ZTM4YiwgMHg5N2ZmNzY5ZiwgMHhmOGJjYTNiZiwgMHhhMmJmNjgxZCwgMHg5MzQ2ZWY0YiwKKwkweGNkYTU2OTcxLCAweGY1OTZmZDhmLCAweDg3NmQzYzU0LCAweGFkNWIyYmY3LCAweDJlZmQwNjJlLCAweDA0ZmVlMjliLAorCTB4Zjc2NWJkZWQsIDB4ZjIxYjVjNTksIDB4YTQzOGJmNzEsIDB4NWRmYTBiM2MsIDB4MDNiZTYwZmIsIDB4OWQ3NTgxZTUsCisJMHgwNmVjZDMzNywgMHhlYjdlZTA5MywgMHg2ZGUwMmI0YywgMHg4OTY0YjI5MywgMHg3ZGFjMDg1MiwgMHgxNTE2Y2E3ZiwKKwkweDU3ZmVhY2YwLCAweDI4MTY2N2U1LCAweGMxN2Y3NTVmLCAweDhjNzVmMzE2LCAweDFjYjI4MmJkLCAweGQwZmY1OWVkLAorCTB4ZmVkZjY4OTksIDB4ZjY0NmE3MTIsIDB4N2Y2ZmI3MmUsIDB4Y2EyNzQ0NzksIDB4ODJhNjViYzUsIDB4ZWNlNTE4MGEsCisJMHhjZTYwZDlkNCwgMHhiNzhhNTMyYiwgMHhmNGZjNjE5OCwgMHgwZWExNGYxNCwgMHgzMjkzNWJjNiwgMHhiN2Y2MjY2MSwKKwkweDdmYjFiZWY0LCAweDc3ZGYwOWRkLCAweGE5OWFjY2E0LCAweDQ0ZGUxM2U2LCAweGNhY2NlZjdiLCAweDkyNmVkMGExLAorCTB4NTRiM2NmMmMsIDB4NTY2OTdmNDIsIDB4MjdhN2I2MTYsIDB4MDkwZmJmMDAsIDB4NzdmNjhmOGYsIDB4YmRmZGJmNjcsCisJMHgxY2Q0ZTY2MCwgMHg1MzQ1NGJjMCwgMHhiZmZkMGFhNSwgMHg5NmRiNzI5ZSwgMHgzNjMxNTczMSwgMHg4NzcyODFmZSwKKwkweDk4M2ZjNjA3LCAweDE1YTY2NGIyLCAweDk0NjlkZmYwLCAweGYxNmQ5N2Y1LCAweGNjOWQ1OGMwLCAweGJlMDE4NmY3LAorCTB4YmFmZWYxZmYsIDB4OWZhODY2OTksIDB4NzQyZGVhOTYsIDB4Y2Q1M2ZhYzAsIDB4OTE5OTZmZjcsIDB4NjVmODFkZmIsCisJMHg0ZmJkMTJhNCwgMHgxMjcxNDgyYywgMHg5MDQ2MWNkZiwgMHgzM2ViYWRlNiwgMHhmODJhZmQ3MiwgMHg3MWQzODczZCwKKwkweDk0MjQ3OTdmLCAweDRjZTUxMWVkLCAweDEwZGNlZTVlLCAweDRlOWM3ZTViLCAweDMzYjk3MmU1LCAweDhmNzdmNjIxLAorCTB4ZWYwMDRiOTAsIDB4YjNlOTBlYTAsIDB4OTYxODFhY2IsIDB4YzAyNzk2MWYsIDB4YzQwOWU2NGYsIDB4M2NiOWRiNWYsCisJMHg2MzlhYmUwMSwgMHhkOThlM2UyNywgMHg1ZmU1MzdkZiwgMHhkM2Y1M2I4MCwgMHhlOGFjN2FhOSwgMHgwZDcyOTBiZiwKKwkweDcxYzU2NjY2LCAweDY5NzY0Y2JlLCAweGNmNTk3NWU0LCAweGJmYjc5MjUyLCAweGViN2MxNTRhLCAweDU2NzFmMGUyLAorCTB4MzMwYWU1NmEsIDB4Yjg0NzBjZjcsIDB4YzU4Yjc2YzgsIDB4NGI0N2YzM2EsIDB4ODhkMDUyZmYsIDB4ZTJkNmI5ZmMsCisJMHhhY2Y5YzBjOSwgMHhjMTllNTdkZCwgMHhkNzg3NjMyZSwgMHhmOGQ3MmM1ZCwgMHg5OGViYzI0YiwgMHhmNDA3ZWY0YSwKKwkweDQ0YjlmZDBiLCAweDVmMzFlZWZmLCAweDU3Yzk1ZTA3LCAweDdkMWE1NzgwLCAweGMzM2FkMmJmLCAweDNiZmQ2OWZkLAorCTB4N2VlM2ZiMDMsIDB4YzU3YTAxOWUsIDB4MWI5ZTdiMTgsIDB4NDE1ZWI4NTMsIDB4ZTQyMmViZjgsIDB4NWYyMTRhZGEsCisJMHgzZDkxNmE0MSwgMHhhYmM1ZmU3ZSwgMHg4ZmNkNmY3NiwgMHhmNTAzNzcxYywgMHg3YTdkZjgwZiwgMHg0MTJmZWUwYSwKKwkweDJiMWNhMmJlLCAweGIwYjMzZDUzLCAweDhhNGY1OTdlLCAweGEwNzllZDAzLCAweGRlODI4ZGI3LCAweDg5MzdhNDU0LAorCTB4YTY5NGNlZTcsIDB4NzZlZjVhNzIsIDB4ODYzYmIxYzUsIDB4MzkxM2Y4MWQsIDB4ODNjNTM2YWYsIDB4MjJjNjQ5ZjYsCisJMHhjNDQ5N2U5ZiwgMHg4N2ZjYTRmYywgMHhmZjQ1M2JmZSwgMHgxZjllOWMyNSwgMHhjNWU3YTdlZCwgMHgyZmMyM2ZjOCwKKwkweGRmNDBkY2M0LCAweDVmY2UwNzYzLCAweDA4Y2UzNmMxLCAweDI1ODJmNWZkLCAweDcwOTFmMzgwLCAweDJmZjRiNmZiLAorCTB4YjhiYTg3ZWQsIDB4ZGE5MTJhN2EsIDB4MjYwZjFjNjUsIDB4MjE5ZWEwYmEsIDB4YjlmOWM1YzUsIDB4NmJjNGUzZTMsCisJMHhlOTc1NWY1MSwgMHhlYmUyZTI5OSwgMHgyNjUxYjk0NiwgMHhlN2JmYTRlNSwgMHg3NjRhODU0OCwgMHhiYjJlNTg0YywKKwkweDcyOTE5ZWM4LCAweDg3MzY2ODMzLCAweGJkYmZkZmViLCAweDk0NDZjNjY3LCAweDJmYmUyNmFiLCAweDE0ODNkMzRmLAorCTB4ZTNjZjBhMmYsIDB4MmZhZTE0ZTUsIDB4Mjc5OGY4MjcsIDB4MjQ3ODFkOTYsIDB4MDhlNTJlZDksIDB4NzVlMWUzYWQsCisJMHg1ODYzZWM5NSwgMHhkN2U4NWQ5ZiwgMHhmOTNmMjEwOSwgMHg2NjRjOWViMywgMHhmMGUxM2VjMiwgMHhiNjdiZmE5MCwKKwkweGRjYWZmNDI5LCAweDQ3YTVhNjRmLCAweGE1M2IwNjU5LCAweGVlMTA1NzQxLCAweDg5Y2ZiZjFmLCAweDgyNjNmYmEwLAorCTB4ZjNmMWEyMGUsIDB4YzAxM2U1NWQsIDB4NDg3MDhmYzEsIDB4Yzg3MmUxNGQsIDB4ZWQwNTY1MDksIDB4MTdmNDE1MGIsCisJMHhiNTVjZmZjMCwgMHgzZjM1YmRjZCwgMHgyZTM2ZGU2MiwgMHgxZDdhOWQ4ZiwgMHhlMDU3NjM5NywgMHhmZTU0YjQ4YiwKKwkweDNiMjVlZmJkLCAweDFlMTg3M2YxLCAweDJmZjk4ZWRjLCAweDFkNzZmNzAxLCAweGMxN2RjMWFiLCAweDA5ZjAxZDIxLAorCTB4YWY4ZGEyZDIsIDB4NTk4YmZjZjMsIDB4MjllN2VmZDQsIDB4ZWZmZWI5M2EsIDB4MWJiNzJlNDUsIDB4ZDdjZTNjNjEsCisJMHhiZmQ2M2Y2NCwgMHgzYjVkYTgzYywgMHhkY2RmZGU3ZiwgMHg2NThmNGU1NCwgMHg2ODg1M2RjNywgMHhkYWYzMGNjNywKKwkweDI4NWZiOGRjLCAweGMwNzM5OWViLCAweGRkZTFlNTAwLCAweDRiNmIwMzhhLCAweGMxZGUxZjNhLCAweDRiYTgxNGY5LAorCTB4NjdhZGU1YzAsIDB4YTViNWZiMjIsIDB4YmVmYTNhNzIsIDB4MzhmYzMxZDYsIDB4Y2JjNDU3YTcsIDB4Y2QzZTA4ZTIsCisJMHg3ODcxYjU0ZCwgMHgwODRjZmFjMSwgMHg0NzJiNTU0ZiwgMHg5YmZiZjNlNSwgMHgwMTgwZjc4NywgMHhmMDA3NWJkNiwKKwkweGUxMmRiMTQwLCAweDY0YjFkOWQ2LCAweGY4ZjkwNTgzLCAweDFmMjM3MzM4LCAweGEyNThlZjlmLCAweGRkNzg4YjFiLAorCTB4ZWJiZWM4YzksIDB4ZjAwZjBmOTcsIDB4MTQ3YjQ4NzUsIDB4ZTkwM2IyZTgsIDB4NWNkNGVhZjIsIDB4NzFkODZmMWEsCisJMHg3YzBjNzU4ZiwgMHgxMzc2ODYxZiwgMHhlYzNiOTVmYSwgMHg0YzU3ZGMwMSwgMHg0ZGNkZjU0ZSwgMHhlZGNlNzg0NSwKKwkweDRhMjA2NGFiLCAweGViNGRhYzFhLCAweGZiZWYxMTJkLCAweDdkNDE3N2ViLCAweDdlOWY2M2EyLCAweDM2ZjNjZTJjLAorCTB4YzJiYWI2YzYsIDB4ZmFhOTgxZWIsIDB4NmY1YTFmZDEsIDB4YTAyZDNlMDQsIDB4ZDZlMTEwNzIsIDB4ZmJmNWU0NjksCisJMHhjZjhhMzMxNiwgMHg4Y2ZiZTgzNCwgMHhmN2Y0MWRmOCwgMHhhM2NmYTIyYywgMHgyZmM0MTRiYSwgMHg2ZWQwOWJlZSwKKwkweDczN2JkM2FlLCAweDY3ZDdkYzE0LCAweDA3YThkYzk4LCAweGY0NDIxZjYwLCAweDU0YzJjODdlLCAweDI2ZmZmNDBiLAorCTB4NTc0ZTUxM2MsIDB4OGZkOGVmZTksIDB4NTAyYWFhZjAsIDB4YWUyNDJkZGMsIDB4NjBkYzg1ZGEsIDB4Y2QzN2RjNDEsCisJMHg3YTI1NjI5ZSwgMHgzOWRkNWY2NCwgMHhiZmY1MWFiNCwgMHhmYTA5ZTM5NSwgMHhjYzdlOGIzMSwgMHhmZjMwYTJlNiwKKwkweDJhZWYzYWZkLCAweGZkNDhmZmRhLCAweGE4NTE0ODc2LCAweDhkZDc0MzlmLCAweGIxMTJkZGRlLCAweDUwZmVjMjJmLAorCTB4YWE1MjFmZmUsIDB4ZmE0MGVlNzMsIDB4YjIzYWZiMTcsIDB4N2FjMmQzMGYsIDB4MjI5NWVkMTcsIDB4ZmRkZTI0NWIsCisJMHgzY2ExN2U2MiwgMHg3YjQ4YTNhNCwgMHg3ZWQzZWQxNCwgMHhiMWRmZDY3YiwgMHhkOWM4M2E2NSwgMHg4MjNhMzNmMSwKKwkweGQxNTIwNzNhLCAweDAxZmYzM2YzLCAweGY2MDU1MWQ2LCAweDcwZTAwNWFjLCAweDMzOTcyYTViLCAweGZhZmRmMjg3LAorCTB4MzBkZjljNDQsIDB4M2FiYzNmNTgsIDB4ZDMxYmUwOWMsIDB4OTM4ZjBiNjQsIDB4ZTkwZmZjMmUsIDB4NDgyZmVlNDYsCisJMHhiZmNmZTA0ZiwgMHhlNzNiNzJhNywgMHgxZTVjNjkyNywgMHg5NzhkMjFmZSwgMHhmYjYzMTNkMywgMHhmNTEwYmUyYiwKKwkweDFmOTcxMzU0LCAweGZjYjljYjViLCAweDQxYjdhZThmLCAweGVkYWRmYmY0LCAweDY2OGEzMWRlLCAweGVmNzYwZjdmLAorCTB4Zjc2ZTU0ODYsIDB4ODg1ZmI5MWEsIDB4MGE5NjEzYzcsIDB4ODczYjA2ZmEsIDB4YWJiNjE0ZjAsIDB4ZGE1MDNjNzgsCisJMHhjY2Y0NWZhMSwgMHhmMzcyZjJhMywgMHhiZmU4ZDk3YiwgMHhlNjlmZWRiZiwgMHhiNmY0ODdkZCwgMHhmMjdhMzdmMiwKKwkweGYxMTQ5YzU3LCAweGJlYzk5NTgyLCAweGJmZGM2NGY0LCAweGFiZjZjNDI3LCAweDc1ZDYyNzNjLCAweDFmOTE5OWJhLAorCTB4MWI4YzUzZjgsIDB4ODkzZGVjODIsIDB4YWYyODQzNzEsIDB4MzRlMGY5ZGEsIDB4MmNkNWJmZTQsIDB4ZTVlMGZlNDAsCisJMHg1YzUxMzczYiwgMHg2MTQwNzk3MCwgMHg2OWY3MDUyZSwgMHgxNjI3ZWU1ZSwgMHg0N2JkNThmOCwgMHhkZjRiZjFhZiwKKwkweDkzMTkzNmFlLCAweDc3ZTk4NGM3LCAweDZlMzY5YjQ1LCAweDU4YWJiMzU4LCAweGY2ZjZmZTUzLCAweDQ0MGIyNTY5LAorCTB4ZmNiMGExYzgsIDB4YTNlZjQ2OTksIDB4MWVmNDk1ZmIsIDB4ZDQ3ZWE3NmQsIDB4YzNmOGQyZWMsIDB4NDYxY2VlOTcsCisJMHg5N2Y1OTdlYiwgMHg3N2FkMzczMSwgMHg2NjgxNmI1OSwgMHhmMzk1YWNkZSwgMHg0OWY5YmM0OSwgMHhkNGJiNDViYSwKKwkweDQ2OWU3MzFmLCAweDAwOGZmYmNkLCAweGZmMDhmZWZlLCAweDQzNTNkMmZmLCAweGE5MmQxZTY5LCAweGJhNDBmZmJlLAorCTB4Y2FjM2NmMDksIDB4ZGFiZjFhZmMsIDB4YjAyN2M3MjQsIDB4N2VlMTY2NTYsIDB4ZmYyM2EwNDksIDB4NTA4MWVjZTUsCisJMHg2ZmZmYTcyYSwgMHg3MWQxZjcwZiwgMHhmZWUzMDVmNiwgMHhjYTBiZWViZiwgMHhjYzM5NzEyNiwgMHgwYzM2MTRkYSwKKwkweDZhYTdlMzFlLCAweGEwYmZiNGVkLCAweGE3YzUyYmJlLCAweDYxNmJlYjk1LCAweGE0NWYyZDQ3LCAweGQ0NTE3N2FkLAorCTB4NWRlYTI4YmIsIDB4NjkxMmJmYzksIDB4MjgwNTI5OWYsIDB4MGQ3Zjc4ZDcsIDB4Y2ZmMzhmODIsIDB4YTBiYTM1MWMsCisJMHg2ZTM0ZjhkZSwgMHgzZDM5MTZjNywgMHg2Y2VmNTA5NywgMHg0MzhlMjRiMywgMHg0YjM2Y2E3ZiwgMHg1MmY1MDA1ZSwKKwkweDM4YmFmYWZmLCAweDQ4MzM2ZDFkLCAweDAzM2I4YTNmLCAweDVmZmVkNmUxLCAweDg4YThiNjc3LCAweDBmYjA3ZGM3LAorCTB4ZmU1ODc5MDAsIDB4OGExNjQxZTgsIDB4YWUzNzUzOTAsIDB4MDFjYjNjNTMsIDB4ZWYyMTc2ZGUsIDB4N2Q3Y2RjZWEsCisJMHg3MWEwZWU3NSwgMHg1ZDkzZjQyOCwgMHhkMzk1ZTdjNywgMHgyMzUxNWZiMSwgMHgwOGQ0ZTVkYSwgMHg0MTlhNWY3ZiwKKwkweGMxY2NjZmIzLCAweDhkMjU0ZTMyLCAweDlhOWNlM2NiLCAweGVhMTQzMmEwLCAweGEzZGFlZjY1LCAweDg3NWZkOGE4LAorCTB4YmIzMzdhNDIsIDB4NDExMzAwMDksIDB4ZGMyNWQ5NTcsIDB4YTRiMWI5YmUsIDB4MjYzNjU5NWQsIDB4NWQ1Njg3MGMsCisJMHhlMDA3MThmNSwgMHhlYWRkMzVhNywgMHg4ZjczN2Q0NiwgMHgwZDI0MzdkMywgMHgxODIyNzllNywgMHhmOGZjZWRjNCwKKwkweGRhMmEzZDEzLCAweDdhNzUzZmVmLCAweDYxOWNkMjBhLCAweDhlZjRiODM4LCAweGQ2YTdkNDZjLCAweDZkOWU3YzEzLAorCTB4YWU2M2ZiZmQsIDB4NGRhMjI4NjcsIDB4ZGNkZGFiZmUsIDB4MjNiM2QxOWUsIDB4YTQ4N2RiOGMsIDB4OGMzN2QyYWYsCisJMHhlNzI3YmQyNCwgMHhmNDIyOWU5NywgMHgzZGYzM2E0NSwgMHhhZGZhYTM2NywgMHg2OGM5ZjA4YywgMHg4NjFiZTkzZCwKKwkweDJjZjZlNmVmLCAweDgxNTU3N2M3LCAweGFmYmUwZjc3LCAweGE4YWFiOGNhLCAweDZjMTdkZTA1LCAweGExNGJhYTBiLAorCTB4NjJiYmNiZGQsIDB4ODVjYjgzZmIsIDB4NGM3NTgxM2UsIDB4NzVjOWY1YzIsIDB4YzgyZTQ5NWMsIDB4N2UzODg2N2EsCisJMHhkNjBmYzkwYSwgMHgxZmY3YjExOSwgMHgyZjdkMjIzMCwgMHgyMTZkMzQ3ZiwgMHhhMzZlYjdjZSwgMHgzMDk0OTk5MSwKKwkweGY0ZWE3ZmZjLCAweDY0ZjljNmNlLCAweDA4MmJiNDc3LCAweDkzZGZlOTFiLCAweDFkZmY0YWUzLCAweGZjZmU0NzdlLAorCTB4OTZmOTI4YzgsIDB4ZmU1YzVmZDMsIDB4MmNmN2E3NWYsIDB4MWI2Nzk0OGYsIDB4NjkyNzg0OGQsIDB4YzdlNzg3M2YsCisJMHg2OWQ1ZmRlZCwgMHhlYWJlY2Y1YywgMHhmOWMxMmVmNCwgMHgyNzZkNzQzNCwgMHgzZGFhY2Y3ZiwgMHhmOTYzMWExZiwKKwkweGUyZjlhM2FiLCAweDZhNTQ3MDRhLCAweDZlYTBiZWY4LCAweGViODAzOWJlLCAweDI1NTQ3ZjJmLCAweDY4ZGRhODNhLAorCTB4ZGQ1OTM4YTQsIDB4OWZiOGZiMzMsIDB4NDZlNjFlZTcsIDB4YjFkNzUxMzksIDB4ZTMwZTU5NGYsIDB4NGZiMzNlZDYsCisJMHhkNzAxMTE1OSwgMHgwNTAxNzU0MSwgMHgyZWMyMzNlNywgMHhhZmNiOTBmOSwgMHgzZjQ3YmE2OCwgMHg4NzJkZGEzMiwKKwkweDljNGU1YzJkLCAweDE1ZjliNzJkLCAweDgzNTllYjgwLCAweDlkZWIwZWFmLCAweGZkYmFiMmNkLCAweGJjM2M2MWY5LAorCTB4MTFmYTZmYjksIDB4M2ZiMDM3Y2MsIDB4YjNlMjBhNjcsIDB4ZDMzYmI3NTUsIDB4NDc1YWY1MGMsIDB4NWY0OGRkMTksCisJMHgzNmZhNzUzZiwgMHg1NDUyNWMyMywgMHg0ZmI2Mjc2ZiwgMHhkN2JiYjM0ZSwgMHg4OTk3NWI0MywgMHhmYmJjYTExNSwKKwkweDFmMTg3MGJhLCAweGVmZTMyNzQ1LCAweDg1ZDNmY2UxLCAweDkxZGI4ODcyLCAweDgxM2ZjODQ1LCAweGE3YjRiYjM0LAorCTB4MzYxZGFlNDgsIDB4YzczYzc1ZjAsIDB4OWVmZjdjZjgsIDB4ZTg5MDc5ZWEsIDB4OGQwYTQ4ZjgsIDB4NTQxNzVkOWIsCisJMHg3ZjlkOWZkMCwgMHg2YjkyMzllNiwgMHg5ZDMwZmZiMiwgMHhlNDg5MWU3OSwgMHhiM2NmMmJkZiwgMHg1NmY0ODhjMywKKwkweGY5NTBlNDJiLCAweDhmOTQ3YmEzLCAweDRiZmRlNjIzLCAweDZlOTFmNDMwLCAweGJhMDE5ZmIyLCAweGZkZjdkMWI0LAorCTB4M2VhOGQzMzMsIDB4YmRmMGI5MzMsIDB4ZTE2YWVkNDIsIDB4NzkwODhhZmIsIDB4NDMxMWQ3MjMsIDB4ZjVjM2VjZWUsCisJMHgxY2Y0NGVkOCwgMHhjODI3NzJlNCwgMHhiZTYyOGRmZCwgMHgxNTdjZjhkMSwgMHg5YTdjMWZlNSwgMHhkZTk5ZWEwNiwKKwkweDMxMjNmZDFiLCAweDQ4Nzg3YTJlLCAweGU1MjdmNTAyLCAweGJlZGYzNDQwLCAweGU1MWNlODJhLCAweGZlNDZjZWE1LAorCTB4ZTUyYmIyNWEsIDB4MjJiZDY0ZmMsIDB4MzRmZWM1NjcsIDB4YzEwZjQzODIsIDB4NGE5NzdlYTEsIDB4N2EzMmE5ZWIsCisJMHhjMTExZGU4NywgMHhmZDE2YmYwZiwgMHgwM2Y5YjgxZCwgMHgwN2ZkY2EyMywgMHhhMjVkZmRmZSwgMHg4NTM2ZmFjNywKKwkweGVkYWNmMWUyLCAweGQ0M2NlMzVkLCAweGY0YTdmZTQ3LCAweGUyY2U2NzY4LCAweGYxZGIwMTI2LCAweGE3ODRiYmMyLAorCTB4MmU1YzlkNTksIDB4NTNlZTc3ZDcsIDB4NzRjMmQ5OTcsIDB4YzBlNjdmOWEsIDB4ZjU2NzQ4YWQsIDB4ZmI4NjI2MWQsCisJMHhkZmJmYTAyMiwgMHhlOWEyN2MyMCwgMHhjYTQ3YzI1NCwgMHhiNGY4NzhkZCwgMHg5NDcyZTBjZSwgMHg0N2U0OGRmOSwKKwkweDNlNTRmZDg1LCAweGRjYTQyOWZhLCAweDRlYWE3YmZlLCAweGZiZjgwOWY4LCAweDFjYmM2OTBiLCAweGE3ZGYxZmE2LAorCTB4ZGNiMDhmMDgsIDB4ZTQ1ZjEwYjUsIDB4NjAzYTI5OWYsIDB4NWJiODdkYzYsIDB4NWE3ZjNmMjEsIDB4ZTQ2Nzg3MjUsCisJMHhjNmM3YWFiYywgMHg1NGNlOWI5NywgMHg1MGQ0MzdhMSwgMHg1ODdiMWNkZSwgMHg3ZmNiZjdiZSwgMHg4MTBiZmVkMSwKKwkweGU0MWY3ODZmLCAweGQ0MTBkOWVmLCAweGQxZmU3MmYzLCAweDcyNzdjYmY4LCAweGNlODMxYjdkLCAweDExZDcxYmZlLAorCTB4M2RhNGRmYWQsIDB4YzllNmU5MjAsIDB4OGY0NmFhNWQsIDB4ZWE0NjlkZDgsIDB4NzMxYjBlY2YsIDB4NzI4ZWM3OWMsCisJMHg2MWQ4Y2YxZSwgMHhjNzZjZmFlMCwgMHhlNTAwNzM3YSwgMHg3ODBiOWJjOSwgMHhhMTdkOTk1ZSwgMHg0M2NmODgzMSwKKwkweGY4NzVhNWJhLCAweDFmMzY1MGZkLCAweDViYTc1NWJmLCAweDBkZDZlNTgzLCAweDc4NDJkNjM2LCAweDRiM2EyNGY1LAorCTB4MTkxMjdlOTEsIDB4MWU1YzhmOTcsIDB4OTczY2YwM2UsIDB4NWI3ZTc1NjcsIDB4ZWIzZmMxODAsIDB4NTM5NzczN2MsCisJMHhlMmNkMzlkYywgMHhmMzMzYjhjNiwgMHhiM2NlMzQxZCwgMHhkNzJiYTQwZiwgMHgyZThkZmI3MywgMHg4M2FiM2Y3OCwKKwkweDAzYzQ5ZmYzLCAweDJmYTI1M2M4LCAweGFlMTIwZmM5LCAweGI4NzI3ODYxLCAweGY4OTI3ZTRiLCAweDY3ZjRiYmY4LAorCTB4YTc3Y2JkMDMsIDB4ZGEzZGFhYmMsIDB4NDZkYmRjNzgsIDB4YmU0ZWQ1ZGYsIDB4NzA2YzNhY2YsIDB4Yzc4NjlmYTEsCisJMHg2ZmQxZTIxNywgMHhiM2I3YmFlZCwgMHhiNTFkODI0ZiwgMHg3YTJkZjMzYSwgMHhmZDg1YmU0YSwgMHgyN2JmODZhYywKKwkweDM4MTdiYzA5LCAweDc0YWZiZWI5LCAweDJkYTliYTcyLCAweGFjYmUyMGU5LCAweGZjNDRkOTNkLCAweGU1YzE5YjZjLAorCTB4NTY4NGVkOWEsIDB4Y2ZmNjMzMWUsIDB4YThkYmJkNjIsIDB4NjNiNTk1NWQsIDB4NTQ3N2U2MWEsIDB4NzAzOGFlM2QsCisJMHg2ZTRmMWZiZiwgMHhmY2YwYWVkZSwgMHhiZDc3NGZiOCwgMHg3MmY5ODg5MSwgMHhmMmIwMmJlYywgMHhlMTYyOWUzMSwKKwkweGU0ZWI5ZGViLCAweDVlZWNlMjcyLCAweDdiZDEzODAwLCAweGY2NzJmMTkzLCAweDYzZmE5NWZiLCAweGMyMGE2M2MxLAorCTB4ZmFjMDU2YjMsIDB4MTM5NTMzZWMsIDB4ZWM3ZTg0ZmYsIDB4NjFlZTQ5YmQsIDB4OWVjZmU0YjAsIDB4M2ZlZWU5YjksCisJMHhlZWNmYmNjMSwgMHhmNzQ2ZTI5OSwgMHg5NzhiNWE2NSwgMHg2OWNmYTdlOCwgMHgwMzdlZTM3MSwgMHhmNDBjZjdjNCwKKwkweDc4ZWZhZTE3LCAweDY4NWFmMTIzLCAweGFiZTlmYTc3LCAweGQ3NmU1MDhiLCAweDc5OWU3OThhLCAweGUxMGViZjVlLAorCTB4N2ZjOWUxYjIsIDB4NmJkZjhjOWIsIDB4MDlhYTRhMDMsIDB4ZjhmYmQ5YzcsIDB4YmU2MzY3N2YsIDB4ZjI0NjllZWEsCisJMHhmZDNjYjUxNywgMHgxN2YzMTFiYSwgMHhmZTc2ODE3NCwgMHgwMzkyNmY3ZSwgMHhmOWZlOWRlYiwgMHhlZjA4YzlmNiwKKwkweGZhMTY4ZTk2LCAweGVkZTdlNjdlLCAweGU0ZjAzZTU0LCAweDc3ZjZiZGJmLCAweDEzNzhlM2Y0LCAweGNjZWY1OGRkLAorCTB4MmYwOWZiZjMsIDB4ZjI5NTNlNzUsIDB4ZjVkMWUyZGIsIDB4YjlmYjdkOGUsIDB4OGYzZDQ0YmMsIDB4Y2I5ZjMwN2MsCisJMHg5MmQ3NDkzMSwgMHg3OTNmNGY3ZSwgMHhiZDQ4YzRkYiwgMHgwYWI3ZGYyMSwgMHgwMjZiNGU3ZiwgMHgwOTlmMjNkNywKKwkweGUwYWRhZGZlLCAweDllY2ZjZWYxLCAweGZkYTdjY2I1LCAweDFjMzQzMTgxLCAweDYzNzVjNWY3LCAweDJkZGM1ZDM4LAorCTB4NzFkNzUxZTAsIDB4NDZjMWExODcsIDB4ZGY5ZmE5ZWQsIDB4NzNlM2RmMDIsIDB4MjdlN2QwMmMsIDB4NjQ4NTI5MjMsCisJMHhkN2NhMjVjZiwgMHgwZmFhNTdmOSwgMHhiZmEwMjZmNSwgMHgxZjQ1ZTZlNywgMHhlYjFmMzgyYSwgMHgyZDQzMjY5OCwKKwkweGZlNjlmM2NkLCAweGY5MWQ1NjFkLCAweDZjNmQ2Y2JkLCAweDM4YmZmYjNmLCAweGUwMmVjMjZkLCAweDU5ZGQ5MDdjLAorCTB4MzkyMmUzOWQsIDB4OGIwZjcyNjAsIDB4NmJiMzg3YjAsIDB4MjcxODJkN2MsIDB4Y2ZhZDdlYmUsIDB4YmUzYzA3YWQsCisJMHhiNGU4ZWE3YywgMHg3MjdlNTA0MSwgMHhmODRjNTJhNCwgMHhjZjVjMmJkNywgMHg0ZTM0NmRmOSwgMHg4MWMxZmEzZCwKKwkweDNlMGI3NjhmLCAweGY1MzA3NzQ5LCAweGRjMDM5MjFhLCAweDMyYTU1MDFmLCAweGFhN2U0NmQ1LCAweGY1MTM5MjNlLAorCTB4ZWUwZjQyYWQsIDB4NzM2ZTdlMTEsIDB4NzY0ZGRlNWYsIDB4MjZiYjY3NmEsIDB4ZWQwNjFmNjIsIDB4ZjcyYTM2NmMsCisJMHhmMzEwZmRlNSwgMHhlN2Y4Njc0YSwgMHgxOTcxZGU5MywgMHhhNDY3YmU2OSwgMHhmMjdlNjAzYywgMHg4YjdlNGE3YiwKKwkweGJjYTExYmY2LCAweDU3ZDFmY2MxLCAweDI4NWRlNTlkLCAweDNkMzNlNTFmLCAweGVmZTRiZjhlLCAweDc0YjhmYmUyLAorCTB4MTVjYTE3NGYsIDB4YTM1NTM3YjYsIDB4OTVjOWUyMGYsIDB4ZTc5ZjM3MDMsIDB4MGY5NWZiN2EsIDB4OTAxYjBlODksCisJMHhkZjdjNzEwZSwgMHg1ZWRlOGQ0OSwgMHhlODE1YzI0ZSwgMHg4OTBmYTVmMCwgMHg3MTc3OTcwZSwgMHg1NWQwZGFmOSwKKwkweGQ0ZmRjNDZlLCAweDY5ZDdlMTBlLCAweDc0ODRmNDEwLCAweGJmZThmYjg0LCAweDljNjk5MzNhLCAweGUxYTFjOTg2LAorCTB4MGJjZWE3MjgsIDB4MTJmZjNiYmEsIDB4M2E0M2I3YTcsIDB4MGUwMWY5MWQsIDB4ZGVkZDFlZWQsIDB4OGZkNDBjYTIsCisJMHhmMDk3OGQ0YSwgMHhlNmY4MDBkZCwgMHhhM2RhZjM3NiwgMHhkN2Q1Njc2OCwgMHg2YmYyMzczMCwgMHgwN2UwYTc0MywKKwkweGJlMTE3YmIwLCAweGNiZDU1ZDBkLCAweDY5NDFiZmIxLCAweDBkZGZjOTMzLCAweDQxYjRjOTc2LCAweDYzYTg2ZTUwLAorCTB4ZDk2ZmM4YTUsIDB4NDI1ZTJhYmIsIDB4N2M1ZDYwYmEsIDB4MDM1ZDllM2YsIDB4NGRkMjJjZjYsIDB4OWY1YmJkNWEsCisJMHhkYjhmN2E4ZiwgMHgyYzhmZDdiZCwgMHg3MjNiZjZhMywgMHhmMmU3MTQ1ZCwgMHhmMzhhMzE1NywgMHgxOWZiNDBlZiwKKwkweDY4ZDY1ZGY1LCAweDM2ZmIzZjZlLCAweDVjYzVkZDkyLCAweDY1MzdlNDA5LCAweGQ2MGQ3NTNlLCAweDYyMmZmMDZmLAorCTB4Y2QxMWQ3OTQsIDB4YjQyOTJmYzcsIDB4NTgwODY4MGYsIDB4NTY2ODFmMjksIDB4MWE3ZmI3MTcsIDB4OWYxZjM4YmEsCisJMHg0ZjkxZjA5MywgMHhlNGFkY2Y0MywgMHhjNGMxN2Y4ZiwgMHhkMGZlMTFmYywgMHhjZTlhNWYzNywgMHgyNjhiZWNmNSwKKwkweDM1OWZiM2QyLCAweGIwYzdkODdiLCAweGJjODViN2EwLCAweDZkYWM3MDk3LCAweGRkMjFkN2NiLCAweDA5OTM3NjMyLAorCTB4Y2M0Y2IxZTcsIDB4ZjVjMGNkYTMsIDB4MDNkMGIyNDYsIDB4M2NmOGRiMDUsIDB4NzdlMTc0ZDQsIDB4YTc4OWQ3NGMsCisJMHhlMmU3OWI1MSwgMHhlMTdmOTNmMCwgMHhjODhmMTg5YywgMHgzOWU4NWQyMiwgMHg3OTdlYmExOCwgMHhlZWE0Zjg5MCwKKwkweDlhNWZkZTE5LCAweDY3Nzg1M2M5LCAweGZiNGFiZDA0LCAweDBiMWU5YTI4LCAweGJiZDliOGM0LCAweDRjMjgyYTBlLAorCTB4ZDFjZDc3YjIsIDB4MzVmNWY5ZjAsIDB4ZWIwOGQ4MmMsIDB4MmU5NzdlYmMsIDB4ZDkxYzY1MzgsIDB4OWU0OTBiNGQsCisJMHg1OGIyMzdhZiwgMHhkMjIzMmFmOSwgMHg5NTU2ZmRiOSwgMHhiZjQ0MmRlYSwgMHgzNmNkZDU3NiwgMHhiOTNmYTQ3NywKKwkweGIzYTNjMTJhLCAweDI0NTcxZGEwLCAweDEyZGVkOGZkLCAweDRhOWQxYjhjLCAweDZmMTFiYmI3LCAweGQyNWRkMmUzLAorCTB4NWJkOGQzMGUsIDB4ZGNkZmY3MDMsIDB4Y2RhMWJjMGUsIDB4MWZmNzBlM2YsIDB4ZjMwOWY1ODEsIDB4ZGEwOWFlMjksCisJMHgwZWRjZmM4ZCwgMHhmN2ZiOGY2OCwgMHg5Y2ZlZDdkZCwgMHhiODViZGZlZiwgMHgwNzA0MDJmZiwgMHg2ZjU0OTljOSwKKwkweDlkOGZmYTA5LCAweDVjYjVkZTA1LCAweGIxZGRkOTNmLCAweDkzYWFmM2Q2LCAweGNkYzBlN2FmLCAweDNlZTIxNmI3LAorCTB4OGRhZTYxYjEsIDB4NTc4MWUxZjgsIDB4ZGU5Y2E1OTQsIDB4YmVlMjExNDAsIDB4ODNmOWM3ZGEsIDB4ZTEzYzdmMDEsCisJMHgzYjI0N2EyMiwgMHgxYmM5YTFhYSwgMHg5YzhmNGQ4OCwgMHhhZWMwMWE1ZiwgMHhlODFiM2I0MiwgMHg5M2I3MGQ3MSwKKwkweDEzZjM4YzZkLCAweGJmYjk0YmE3LCAweDY5MTViOTQ3LCAweDhkM2U0YWNmLCAweGJmNDk3YmU2LCAweDM1ZmY3Y2ZkLAorCTB4ODFiY2ZkZjksIDB4ODA3OWUzZjMsIDB4M2Y3YmQyMDMsIDB4ZTljY2JmOWQsIDB4ZTA3YWViN2MsIDB4MTViZWY4NDcsCisJMHg0MjI1YjFmOCwgMHg3ZmVmNDdmZSwgMHgxZmI4OWU3MCwgMHgxZWY2ZjI5MCwgMHgzYTUxNzdhNywgMHg2ZmRkYTFjYSwKKwkweGFiNTBjNjZkLCAweDJmMGQ4Zjk0LCAweDM5N2UxOTZmLCAweDk1OGNjYmJiLCAweGYwMzM1ZmExLCAweDYwZmQyNDZiLAorCTB4NDQ1ZWQ2OGMsIDB4MDllYTNmNGYsIDB4ZmVkOGJhZWIsIDB4NmRkMmJiOGYsIDB4M2YzZmNkZGYsIDB4YWVlNTJmMzAsCisJMHg3OTgxZDJmNCwgMHg3M2E4ZTkyOSwgMHhhZGJiNmYxMCwgMHhhNThmYjQwMSwgMHgzZTdhMjkxZiwgMHg0OTlmMDQ0YiwKKwkweDAzZmRjYTdjLCAweGZlYjAyMWM2LCAweDM3ZWY4MmZkLCAweDg4OGY3YTg5LCAweDg0YmVjNDY3LCAweGYzYTVjMWY4LAorCTB4ZjY3OTQ4N2QsIDB4NmM5MWY0NzEsIDB4YjVmOTdkZjcsIDB4MmY1MjM4ZTQsIDB4OGM4ZGQzNDYsIDB4YWE3YWUwYTMsCisJMHhkN2FmYzRjNywgMHhjZmVjNWZiNiwgMHgyOWY4ZThhMiwgMHg4MDBiNWZjMSwgMHg2ZGRlNzAzNywgMHhjNDE3ZTA4NiwKKwkweDE5ZDg3NzhmLCAweDk5ZjgxM2U1LCAweDcxZTMxNTI3LCAweDdjZTA4ZGFmLCAweDM4NmZiMjM0LCAweGZhNjZiN2I2LAorCTB4OTJiYTQ0YmUsIDB4OGY3YzVkN2UsIDB4MTE1YWFhNzEsIDB4NmJkZGFjYmYsIDB4N2Y5ZTQ0MDgsIDB4ZDE4MzM3YjksCisJMHhiMzc2YmQzOCwgMHg5MWZjMGY1ZiwgMHg4N2RiZTk5YiwgMHhjYzE1ZmRlZCwgMHhmMzNkNDQxZCwgMHgyYjhhMTY4ZiwKKwkweDhhNWI4MTgxLCAweDg1OTFhNmYyLCAweGVmY2UxMTEyLCAweDIwNWVmYjI1LCAweDBjZjdkNWZhLCAweDM5ZTNiZjQ3LAorCTB4ZGYwZTM0MjUsIDB4ZGFmZTEwOWYsIDB4ZmI1ZmMyMTMsIDB4Y2Y3YmQ3N2UsIDB4MTdhZDAyYmUsIDB4ZjE2ZTcyYmYsCisJMHg1ZWNlOTE4ZiwgMHg3ZDIxZTRiNCwgMHhlN2Y0YjA5YywgMHhkZGExMjViZiwgMHg5MmI5ODE3ZCwgMHg2OTBlNzcyZSwKKwkweDU1ZWY1OTkxLCAweDI3NjdmYzIzLCAweDdmZmRiMWVjLCAweDM3M2MwYjZmLCAweDUzMmI3ODhhLCAweGI3YzNlZDE5LAorCTB4MTlmOTcwNjcsIDB4ZTNjNGJmM2UsIDB4YjRlYmVmYWQsIDB4MWNmOTM3ZmUsIDB4ZGZlMWMxOTMsIDB4NTAxY2U3MTksCisJMHhkN2RmMDY2MSwgMHhmY2UxMGU3NCwgMHg1MGFlZDdkOCwgMHhkZDY2YWZiYywgMHg0MWViM2ZmYSwgMHhiNWFjZDQyZSwKKwkweDlmMDllOTA3LCAweDcxYWI4ZWQxLCAweDI4M2E4M2Y4LCAweGI5NzAzMDlmLCAweGNkNzM3ZjA0LCAweDA3ZmQ2MTY1LAorCTB4Yzg0OWQ0ZjUsIDB4YzUwNzdlMzMsIDB4ZmQwYTk2YmYsIDB4Y2RlOWFjYjUsIDB4YTE1ZmExYmYsIDB4NDllNjY1NDYsCisJMHhmMmM3MTg0NSwgMHg5ZjA0MWUxZSwgMHg0ZjJkYjUzZSwgMHhmMmJmZjE0NCwgMHhhM2E2Nzc0NywgMHhkNDU4Y2E3ZSwKKwkweGE2YzFmMjI2LCAweDU1ZmVkMDNhLCAweDJmZTgzNzNjLCAweDZmNjcyZjU5LCAweDEzMjc2NGE5LCAweDFlZGUwMDFkLAorCTB4MjJmNmYwY2MsIDB4ZTI0YTJmMWYsIDB4Nzc0NWMxN2UsIDB4MDhmZTAzNWEsIDB4ZjA1N2I4NzksIDB4N2NmZDM0NjEsCisJMHhjZGJjZTcxMCwgMHgwMTE1MTk5NywgMHhhYTYxNmZlYywgMHhlZmQ0NmZmNywgMHg3MjM0ZTc5ZCwgMHhmYTEyYmNlZCwKKwkweDVmNDgyM2M1LCAweDRmZGRkODc3LCAweDIyZjJlZWYwLCAweDA1ZDI2M2YzLCAweDBlMzE2YmZjLCAweGI3YjFhMjA0LAorCTB4YmFmODY3YjAsIDB4YmVlM2E0N2MsIDB4NWZhMWRmYmMsIDB4ZjBlNGRiYWIsIDB4OTFiYmYwYmIsIDB4ZjE3NmNiYmUsCisJMHhlM2YxNDFlMiwgMHhkMjIzMmU0MCwgMHg4NTQ1YzM0NywgMHhmNzY5NjFlOCwgMHhhZTUxYzc5YiwgMHhhMjIxYTgzNywKKwkweDFiNjZhNTkzLCAweGEyZTFiMWUxLCAweGQ1YTllOWNhLCAweGRiMjQzNjcwLCAweGE0ZDdlZTAzLCAweDYwMzJkMjdhLAorCTB4Mjc3YmZlOWUsIDB4MDkzYzUzMjUsIDB4MTdjMzg5ZjgsIDB4ZTM5YzQ1MmEsIDB4MzdjMzMyZjgsIDB4ZjdlMDAzMjgsCisJMHgzNmYxMzU5MCwgMHgzMDVkN2ZkYywgMHg4ZjMwOTJiYiwgMHhmNDA4ZDFhZCwgMHhlNzc1MzU3MCwgMHg0M2Q4NDczNSwKKwkweGE1YWVjNzJjLCAweGZlYjdlZTgzLCAweDZlNWFmMzg2LCAweGFmNTExOWY2LCAweGQxMzRmMGFmLCAweDQ5NDViMTc5LAorCTB4OThjNzUyYzEsIDB4ZDI0ZmJjNDgsIDB4ZjVmZDFhNWYsIDB4Yzg0OTdlZjEsIDB4M2M4ZGY3OTcsIDB4OWQyMDY0NmYsCisJMHhjZjZjM2M3MywgMHgzOWIyZjUxMCwgMHhjNzlmYmNiZiwgMHhlN2MzOWU2YSwgMHhiYjQyNzgyOCwgMHg3Mjg4ODdmNywKKwkweDE3MGYyODkxLCAweDc5NzlkMmY1LCAweGY3OTdlMDlhLCAweGQxN2FmMWM3LCAweGUzMTUyY2UzLCAweDk5ZTE5OTdjLAorCTB4NzY4MjcwOGMsIDB4YzdkMjIzNDEsIDB4NjczYTE2NmIsIDB4ZmU0MDRhYzQsIDB4OTM1YmJjYTEsIDB4YzgyYzc2NGIsCisJMHg3NzA4NjliOSwgMHg0Yzk4MjcxOCwgMHg2N2E0NGNmNSwgMHg0MWM4MTM1OCwgMHhhOTZmNjdjMCwgMHhiNWIzZTA4YiwKKwkweGUzMDVlODFjLCAweDI4OWFhZjQxLCAweDJiZjEyNDFlLCAweGNmOGQxYWYxLCAweDc3Y2ExOTg1LCAweDE4MWY0ZmNiLAorCTB4NTE5ODVlYmYsIDB4Y2Q3ZTMwM2EsIDB4MTdjMjUwZDgsIDB4ZjM4YzRiZDEsIDB4ZjVmMGYxMWYsIDB4MDNjNzNiNmIsCisJMHgwY2YyZWJmMCwgMHhiMWMxODNkMiwgMHg0OWIzN2M5MSwgMHhiNWNhNTFjMCwgMHg3OGI0MTNmNywgMHhlMzlkM2NmZCwKKwkweGJiZDQ1ZWExLCAweGRhMWY3Njg0LCAweGUyM2VlZWQxLCAweDc4NTNmN2JmLCAweGFlMDJiNGZkLCAweGZlNWRhNDk3LAorCTB4NWYyZTAyNGYsIDB4NTI5ZjZiYTYsIDB4ZDFmYjQ0Y2YsIDB4ZTJmMjE0YmYsIDB4NDdlZTc0Y2IsIDB4OGRkZWJjMDcsCisJMHgwOWZhOTVmMywgMHgxOTMwNGNlNCwgMHhlYmQxNzhmOCwgMHg2YzMzOTIyNiwgMHhkNWU1MWY2MywgMHg4M2ZmYmQ0MCwKKwkweGVhNjQ1YWYwLCAweGY0MTUzNWJiLCAweGRlYzEwZmNhLCAweGJiNTExNjMxLCAweDA2NDcyODRiLCAweDQ4YzdlZmVjLAorCTB4ZDQzM2IwYmEsIDB4MGUxOWFkZGIsIDB4ZjQ5NDFmNmUsIDB4NDhkN2I4ZjEsIDB4MGNhNWFlYmUsIDB4NjU3Mjg3ZTQsCisJMHgyMTBjNjNmYywgMHg2YmYwZTQwYiwgMHhjMTQyYmYyMiwgMHg2MjE0YWViYywgMHgwN2Y2MTc2NywgMHg4Yzk3ZmY3MCwKKwkweGEzZGMzMGQyLCAweGU4MjEzYmM3LCAweDQ1MGNkMWUwLCAweGIyMTViYzI1LCAweGFkZGJjNDQyLCAweDVmNmU3ZWVmLAorCTB4MTM5ZTVkMGMsIDB4NGQ5MzY1ZTcsIDB4ZTdlYzc2YmUsIDB4OTE2ZmRkZWMsIDB4MThjMjdlOWQsIDB4OGI2NmRlMWMsCisJMHg3YzE4ZGRmMSwgMHhmYzI1MjFlYywgMHhmNGE3YjZmZCwgMHg5OGQ1ZTM3ZSwgMHhjMWY2N2U3ZiwgMHg0YmRkNjE5YiwKKwkweDFjNmVmNDdiLCAweDVmM2RlOTcyLCAweGVkMWUzM2JjLCAweGM1MDMxZWVjLCAweDZmZGY0MDZiLCAweDRkZGU3MTUzLAorCTB4YTEzY2FlZGMsIDB4NjdjMWQyZDMsIDB4M2RmNzY5NzcsIDB4OTA3YTBiYWYsIDB4ZGNhNTcyZTcsIDB4MTU3Y2ZhOTEsCisJMHg5Mzc5NzM3MywgMHhjYjFiYjg5MCwgMHgzYjcxZGQxZiwgMHhjZTVkY2I5ZCwgMHgwMDNkODdiYywgMHg2NjZiZDNmNywKKwkweDNiN2M1ZDkyLCAweGNmNWU1MWYzLCAweDM5ZWQ1NmIyLCAweGRhNmQxNWRiLCAweDA3M2JlZGYyLCAweDM5MjVjMzljLAorCTB4ZmQxMDJhYmMsIDB4MmJhNWY4NWUsIDB4ZjNmYmViNjMsIDB4MzMzZjJlODIsIDB4N2FmZGY4OGEsIDB4ZmRmOGNjNTMsCisJMHgwOWZjODVlZiwgMHhiNGZiZDljNywgMHgyZjU3ZmJmMSwgMHg4YzZmYmYxZiwgMHhlZDg3ZGY4YSwgMHgzZGY4ZTg4OCwKKwkweDYxMTNmN2VmLCAweDkxYmY2MDZmLCAweDJhY2ZmYzcxLCAweGEzZTNhZjYyLCAweDU4Yjc2OTBjLCAweDlmMTlmOTM1LAorCTB4MTI1YmIwMGMsIDB4NDVlMzdiZTksIDB4ZDhmOTljNGIsIDB4MmI2N2ZkZTgsIDB4ZDdkMzhmNjMsIDB4NWYzNjhlM2YsCisJMHhlNzllZGMyMCwgMHhiNWZkYzgwOSwgMHg4YmM2OTNhNCwgMHg2NTY3YTQ1OSwgMHhlMWM3ZGE1OSwgMHgzZGY0Mzk3NiwKKwkweGY0YmFiY2ZhLCAweGY4YmU0YjZmLCAweDJjZTY2MTU4LCAweDE3NmQ0N2YyLCAweGYyOWJiYzc2LCAweGJiNDYzZjMzLAorCTB4YmE3MmY5MDgsIDB4NGMxMGI1ZWIsIDB4Mjc4ZmQ5NzEsIDB4ODQ4NzU3MGUsIDB4MWQ3YTI2ZjksIDB4NDI2NzVmNDAsCisJMHg5OGQ4ZjIxMSwgMHhmZDIzNGY2OSwgMHgzYTZlNjZlYiwgMHhmZWU4Mjc5NywgMHhlOGFiYmJkNiwgMHhiZGZmY2Y3YywKKwkweDMyMjMzMmE3LCAweDUzZjcyYTZlLCAweDhmNjk0NjBkLCAweDk2ZmEzNGQ5LCAweDY1ZTNlOTQ1LCAweDFkOTE2ZjVkLAorCTB4NzBkN2Y2MDYsIDB4N2E3ZjNlMTQsIDB4YzNkMjZlZjUsIDB4MWQzNzk5MmIsIDB4ZDVmN2JkZTksIDB4ZTU2ZTc0MTEsCisJMHgzOTYxZWFkYiwgMHg0YmZjOWI5ZiwgMHgzNWJmM2MwYywgMHgzOTg3ZWM4ZCwgMHg3NTM3M2U2MiwgMHg2NzUwM2I3MywKKwkweDFjNjgxOGY2LCAweGQyMzk3MzBmLCAweGU3Y2Q4YjY5LCAweDg1NTQ0MjBiLCAweGYzZmQ3NWYyLCAweDYzMWRlNzQ3LAorCTB4MTVmY2M0OTMsIDB4YmRmMDBmNmMsIDB4NTJkOTNjNGUsIDB4ZGJjZTI2NWYsIDB4MzFlYWUzODQsIDB4ODk5MDI2MGQsCisJMHg2ZTg5OTZjZiwgMHgyOGE3M2UxNywgMHg4M2NmOTU1ZSwgMHg2YjFhNzllMywgMHgzYWZhYzFjYSwgMHhkN2NmNDg3MywKKwkweGM3NDgzMzA5LCAweGEyZjBmZGY2LCAweDM3OTQ1ZGIyLCAweGViNzBiZGNlLCAweGIzNmY3YzBhLCAweDhhMzEzYzkzLAorCTB4MDRjZjRjNzksIDB4NmRmYzg4YjksIDB4Yjc1YzY2NjYsIDB4NGQzYzE2YzksIDB4ZjRmMTMzZjEsIDB4OGY4OGI4NTcsCisJMHhmOTE4NDNmZCwgMHgwNzU4MTI0MSwgMHhkOWI1M2Y5ZCwgMHhiMTcxZjljZSwgMHhiMDUwZTYwZSwgMHgwODVjNzE2YywKKwkweDljZTI3ZWUyLCAweGYzYzdlNmMzLCAweDY3MmYyMGM0LCAweDVmM2ZhMjY1LCAweGM0NGFkNWY5LCAweGVlNjdjODBiLAorCTB4NWRmNzhhMTcsIDB4MTFmM2YyMGQsIDB4ODhhNWRlNDIsIDB4NzkwOGI1ZjksIDB4OGFkY2M1OTcsIDB4ZTQ4MGM3YjgsCisJMHg5NWY2ZmRkZCwgMHgyNjdlZTAzNywgMHhhM2Y3Nzk4ZCwgMHg3MTM4N2JiYywgMHgzMmZkYzUwNiwgMHg5M2U2OGY5OCwKKwkweGM4ZDU0MzNhLCAweDViNTdhNzJkLCAweDQ2YWY5OGNlLCAweGU3MDUzYmNiLCAweGJlZDNlNTk3LCAweDk0MTNiMzM3LAorCTB4YmQwNGE0OTcsIDB4Njk1Mjk3OTksIDB4ZmQxMjM2MWYsIDB4MzcyMTA2MzEsIDB4M2U3ODU5OGUsIDB4Y2YzMTY2YzIsCisJMHg4ODUzMzMzYiwgMHg3ODU5OGU2ZSwgMHhiNmI3YzI1ZSwgMHg3ZGRhZGM1YiwgMHgzZjBhNDM3ZCwgMHhkZDNlN2ZiZiwKKwkweGMwZjFjNjZjLCAweGUxMTNiOThlLCAweDA3Y2M3NjA3LCAweGRmY2UxNjdlLCAweDQxZDI5YzJjLCAweDZmOWIwMjc5LAorCTB4ZTAxYmRjNTQsIDB4NmJiYjY2ZmQsIDB4ZWJhNDBhYmQsIDB4N2Y3MGE5OWYsIDB4YzcyOGVhOGYsIDB4M2NmNjljN2MsCisJMHg0NGYzMWI4NywgMHhmN2JlNDUxYiwgMHhmNmEzOGI2NiwgMHg5YTYzZjIxOSwgMHhiN2Q2M2Q3OCwgMHhlZDk2ZTMxOSwKKwkweGFjMGUxZDViLCAweDM3ZDk1Njk3LCAweGFhZmI4OGNkLCAweDliYjFjYzE1LCAweGFmZjdhMGM1LCAweGJlNjA4ZjgwLAorCTB4ZTAzMmM3M2YsIDB4NjNmNDExNDksIDB4ODViYWUyM2QsIDB4ZWZiZTIwZDYsIDB4ZjAxNzdmYzEsIDB4ZGMzMjk0ZjIsCisJMHg4MmJmZjJiZiwgMHg3NzNhNDJlZSwgMHhkMjdhM2NjOSwgMHg4NWRkOGQ5NywgMHhiYzYwZDg2ZiwgMHhlNDg1Yjk4MiwKKwkweGYyNTZmN2FmLCAweDcyMTMyZmI4LCAweDU3MWNiYzYwLCAweDYxYjVkOWYwLCAweDg1ZWZhN2JhLCAweDViYjQzY2EyLAorCTB4NGNkMzdmZjgsIDB4ODBlYmFlM2MsIDB4OTFjNGNhMjEsIDB4YzY5ZmFjNDMsIDB4ZTRjZGMxZjksIDB4NmJkM2U3MWYsCisJMHhmYjBmZjg1OCwgMHg0ZmY3MGNhYiwgMHhmODZhNjk3MiwgMHg2MGVmOTg3MywgMHhiYmIzMjJhOCwgMHg4ZGVhMGVhNSwKKwkweDkxZmI4MzU3LCAweGNmMTVhZmFmLCAweDU0M2NmMTQyLCAweGU1ZTkyMzdlLCAweDY1Y2Q5ZDFlLCAweDM3M2U3MWQ0LAorCTB4YzNhYmEwMTcsIDB4OTRiODQ3YWIsIDB4NjBiNGI2MzksIDB4NDEyOWQ3M2YsIDB4ZDhjZGU2N2EsIDB4OWZkMzgyZGUsCisJMHhjOTRjZmMyMywgMHg5ZTAwYzY5OSwgMHgwMDk5NmIzNywgMHhjOGJmMjY3OCwgMHhmZmEzMGY5ZiwgMHhhYzJmZmY1YSwKKwkweGNjNzRmMTE4LCAweDI3OWVmNTIwLCAweGI5ZmZlNzg5LCAweDBlZDUzZDY4LCAweGNlOTc1OTNlLCAweGMyMmU3YjMzLAorCTB4Y2YzZjI4ZjksIDB4OGI3NGQwYzYsIDB4YTk5N2ZlZjgsIDB4ZDc5NzQ5NTUsIDB4MzAwZjNjYmIsIDB4ZTVjZjRiMjUsCisJMHg4NzFlMGNlMywgMHhhNjZmOWM2ZCwgMHg3MTQ2ZTViYywgMHg3ZDUzMDMwZiwgMHhmMDhjM2ZmOSwgMHhjNWI4YzhhZiwKKwkweDdmMzYwNmJiLCAweDQ2ZmQ4YzVmLCAweDA3YjcxNjRhLCAweGZkYzBkY2U2LCAweDFmMjI4ZGMyLCAweGNjNGY3ZTQ3LAorCTB4YmZiMjdlZTIsIDB4Mzc3YjRlNjQsIDB4MWUzZGVjOTMsIDB4OTQ5ZGZkNmYsIDB4NDhkOTIzNWYsIDB4ZjIxMTVmOTQsCisJMHg1ZjI0OGZlNSwgMHgyNzhlZGZjYSwgMHg4NWRmYjQ3ZiwgMHgyOWU3OTlmYywgMHg0MGJlZDAzNiwgMHhlZjI5MjFjOCwKKwkweDY4ZWYyMmJkLCAweDEwMThmMzAxLCAweDFlZTIzZDRmLCAweGFiZTVhMzk1LCAweGNjZGQwZTQ4LCAweGY3ZmVmNDdjLAorCTB4MDBmZjNjMTUsIDB4ZmQ4MGQzMDgsIDB4NmI0MzM0ZGQsIDB4NmFmM2NkM2YsIDB4OGZjZjM3Y2IsIDB4M2UzOGFmYjYsCisJMHg3YzBiYjhlNCwgMHhhNDczZWZkYSwgMHg2YjQzM2M5ZCwgMHg4N2ZhMmYyNywgMHhjZjQ5OTJhZiwgMHhmZWEyZmM2NywKKwkweDNlNzBlMGQyLCAweDNlNTQ2MzUxLCAweDI3Yzg4MzUxLCAweDNjMmFlYzZhLCAweDRmOTExNjk0LCAweGYzY2RkOGQ0LAorCTB4YWViYTFhODksIDB4ZWRjNDRmOTQsIDB4YjAyOWFmMjksIDB4ZGUyNGUzMWYsIDB4ZWM5NGQyNWEsIDB4NzI3ZjkxMGQsCisJMHg4YTRmZjMxMCwgMHhhZjZlNzRjMiwgMHgwYzNjZjNiMCwgMHhhMmJjYTFlNiwgMHhjZTk1ODcxYywgMHg4YWVhYjQ1ZCwKKwkweDlhZGI4ZmM4LCAweGRkZjhkNzY4LCAweDU1NzdhZWI3LCAweGJmZTkzZDYxLCAweDQ4NDNmOTk1LCAweGMzZjZiMTM3LAorCTB4NWY3YzU5ZDksIDB4N2VlMTQzYjMsIDB4MzMwMmZmNzQsIDB4MDU5ZDNiZWQsIDB4YzE1YzRkNWUsIDB4ZDFjNzY3YTksCisJMHhhNjZlZjhhZiwgMHgzZjI3ZDY0YiwgMHgyZjgzMGVjOSwgMHgwMTllMThhYiwgMHg4OTc5ZDE4NSwgMHhiNjdhZjZmZSwKKwkweDUxOTBmYzkxLCAweGVhOTljYTcyLCAweDMzODAzOGE2LCAweGY1ZjkyYzY5LCAweDkyMTc3NWU3LCAweDJjZDk5MjNmLAorCTB4Yjg0YTYxZWUsIDB4ZGI3Mzc5ZmYsIDB4NjllYmNjNTUsIDB4OTc1NzZlZWMsIDB4Mzc3NGMyZGIsIDB4NDNlYzRiMzYsCisJMHhmNDhhY2NhYywgMHg3YmQ3ZWZkYSwgMHhiZDdlNDRjZSwgMHgzMGI3OTM2NCwgMHgxOWQ3ZGEwYiwgMHg4YmJmZTQ4MywKKwkweDFmN2E1N2EwLCAweDJlZGU1ZjRmLCAweGUxNTBjNWU4LCAweGU2MDJiMDVkLCAweGQxOGVmYmQ3LCAweDBhNmJmYjhkLAorCTB4Y2ZmZjQxY2MsIDB4N2U0Yzk0YmYsIDB4MjMwZTc1NDksIDB4OWNiMWI1M2QsIDB4ZjQ1ZTkzY2IsIDB4M2UzYWMxOTMsCisJMHhmYWY3ZTY0ZCwgMHhhNDY2YWM2YywgMHg0Y2E3Y2Y1ZiwgMHhjNTVlM2EyMywgMHhlODNkODcwMiwgMHg3NDA1ZGI0NywKKwkweGQyY2Y3OTE4LCAweDhlYjk2ZDFlLCAweGE5ZmU5MDc1LCAweDNkMDA2NjdiLCAweGYyOTQ3YzkzLCAweGY0Yjk5ZWI4LAorCTB4NzQxYjhjMDYsIDB4YTFiM2RiNmEsIDB4Mjg1YzM5NWEsIDB4YmNmMTQ3ZjQsIDB4ZmY5ODJkYTksIDB4ZjJlM2FjNTAsCisJMHgwZjc3MmQ5MSwgMHhmNWZiNDM5YSwgMHgyYzRmOGU0NSwgMHhhMTdmNzIyOCwgMHhlYmFlY2U1YywgMHg3M2QyOWZiNSwKKwkweGExN2FlN2ZlLCAweGFkMWZmNDU0LCAweDNkODU0YWJmLCAweDE3ZTQxOTM3LCAweDdkYTU2ZmVlLCAweDdjYTlmNTA2LAorCTB4Y2ZhZGQ3NTAsIDB4NTllNzg1ZDQsIDB4YmI0OWRhMjIsIDB4ODkwYmVhNTAsIDB4OGMwOWYyYWYsIDB4YmJiNTc5ZTEsCisJMHgxYTdjODRiMiwgMHhiZTIwODZjMiwgMHgxM2UyN2ZhMSwgMHgyOTU4MzcwNSwgMHhmNzFmYmZkNCwgMHhmMThhZDc4NSwKKwkweGE4ZmMxZTgwLCAweDczM2FmZGJmLCAweGIzNmJlOTAwLCAweGQyZmE0NGQyLCAweDNjM2ZmNjhjLCAweGQyM2UyYWI3LAorCTB4ZTM1ZWZmMGIsIDB4NGM3ZDIzZDcsIDB4ZGQzNzRkNjQsIDB4OTkyNmY1MDAsIDB4YjcyOGFjN2IsIDB4MzFmZTRlODAsCisJMHg1ODVhN2U5MiwgMHhhMjlmNmYzMCwgMHg3ZWZhMjNhMSwgMHg5OGVkZjkzNiwgMHg1YWY1MjQ3NCwgMHg5ZWRjZjdmMCwKKwkweDc0YmNjNTk5LCAweDBmZTc5M2NmLCAweGE4M2FlZWRjLCAweGQ4MjY3ZGYwLCAweGVlZDEwNzlmLCAweDkzMzc1YjdhLAorCTB4MmMyNjY0ZTgsIDB4Mzk1NWViMDMsIDB4OWU5ZmY4YjQsIDB4ZGY0NzJkYTksIDB4NWFkMGM1MGYsIDB4NDg3NDQzMjgsCisJMHg5YzU0MDY3OCwgMHg1MWJkZjQ0ZiwgMHg5OGY3MjkxZSwgMHhiM2U1ZWU1NiwgMHhmOGRlNzhhZiwgMHg0MjNmYzM5NiwKKwkweDFkNzU4M2ZmLCAweDBlZjY4OTFiLCAweDhmYzRhYTU4LCAweDI3YjBmNGQxLCAweGI3OGY3YmViLCAweDExOGFjOWVjLAorCTB4N2UxNWU5NmYsIDB4Njg1ODZiZTUsIDB4NDBjYTMzZTUsIDB4Njg3ZjNiN2EsIDB4ODIzMzNlOWQsIDB4YmM3ZjI1MmUsCisJMHgxMzc5ZTA2YywgMHhhZTNjZWJjYSwgMHhjNmNjYzEzNSwgMHgyNTJlMTEwNCwgMHhmOTI4ZmZkYywgMHhkM2E0MWFlMywKKwkweDk1ZmQzMDk0LCAweGE0ODdmNzg5LCAweDA2Y2MxOTdjLCAweGQ3NWRiZDIzLCAweDAxZWEwOTY1LCAweGJmYTI4NTNmLAorCTB4OGFmZTkwNmIsIDB4ZGM4OWY2YzIsIDB4MTg0Y2I0NzcsIDB4OThmOTY3NDAsIDB4NGNmNjBlMTcsIDB4YjQ5NWQyMDEsCisJMHg4ZTk1OGE0ZiwgMHhmZGU3M2MxNiwgMHhiNmY3NGJmYywgMHhlODIzN2NlMCwgMHhjMzg0MmRlYSwgMHg4YWU4MDU1OSwKKwkweGY0MDM2YWZjLCAweDE0N2JmNmFkLCAweDRiZmM0OWRkLCAweDM1OWNiYTdiLCAweDZlNjc3ZWQxLCAweGMxYjNkNzAyLAorCTB4Y2Y0OWRiZWEsIDB4YmEyNGI4ODIsIDB4YTcwZTczN2IsIDB4MjFlNjJhYmIsIDB4NWE2NzJiYmEsIDB4NmIzNGE5N2EsCisJMHgwOTc0ZDFjYiwgMHg3NGI0ZWEyMywgMHg4YmJhMjNlNywgMHg3NDc4ZDdhNiwgMHg0ZWU5MTgzNywgMHgyYmQ0ZGJlYSwKKwkweDQ4ZTdkZGQzLCAweDhmYzVkZjc3LCAweDNlZWU5MDM5LCAweGE3YzY3MmNmLCAweDkzN2E2OGJiLCAweGM1OWY2Y2YyLAorCTB4NzU3Njg5NTEsIDB4ZmE0MjhkNjMsIDB4YTE5ZGY4YTEsIDB4NTExZTU4MmQsIDB4ZjY3NjRmOWYsIDB4ZDkzNzY0YmUsCisJMHhmYzRkOGRkZCwgMHg0NzhmNDk3YiwgMHgwNTMzNzk4ZiwgMHg3Y2Y3YzU2YiwgMHgxYjk2MjU2ZiwgMHhlODc3YzFkNywKKwkweGNmMThmNGJhLCAweDBmN2ExOWFiLCAweGExYjg1ZWZmLCAweGJmYmMwZGU5LCAweGRiY2ZkMWEwLCAweDMzN2E3Y2JmLAorCTB4NmMwYTg3OWQsIDB4ZGJjYmVkMTYsIDB4ZDhkY2IxMmEsIDB4OGE3ZmRiY2EsIDB4MzFhYmFlNzEsIDB4ODJkMDJkYmYsCisJMHg5NmRhYWZlZiwgMHg2ZmRiZTZlZiwgMHgxMTRmZDc2ZSwgMHgzY2E3ZGRlYiwgMHg2YmI1MDZmNywgMHgzZjZlZWRlMywKKwkweGU0NjA0ZTZjLCAweGZhZjZlMDI3LCAweDI5Y2ViMTY0LCAweGQzM2FmOGJiLCAweDg2N2ViZTNlLCAweDQ1NjNlODBiLAorCTB4YjllYzlmOWYsIDB4NjU3NTc0NGYsIDB4ZWNlMmVmMjQsIDB4YjY5NWNiYjMsIDB4NDc0ZTdjMWMsIDB4YmM0N2E2MzksCisJMHg0M2Y1NWJiYiwgMHgzNzc0MWM3OCwgMHgzNjc1NzEwYywgMHhmOGM4ZDNmNywgMHg1NDI5ZTYyMSwgMHg1NzE3ZDg0NywKKwkweDQ0M2I3MzY3LCAweDYxNGY0YmQ2LCAweGZkOGQ3ZTc0LCAweDcyZmU0ZWNjLCAweDNlMGNkZjE5LCAweDA3ZDQxNGM0LAorCTB4OTc2MTQ2YjgsIDB4NGU3NzhjYzQsIDB4YmIyMjY4MmYsIDB4MTk2MGZhNjIsIDB4NGJhOTBjZTcsIDB4NGJjMmRjNjEsCisJMHhlNThiNGY5ZiwgMHhlNmNiMmE0NywgMHg5MTI5ZjNmNiwgMHhkN2RmMjE3NywgMHg0ODc1ZjIwNCwgMHg0ODkwZmIxNywKKwkweDkwZjBmY2U4LCAweGRiOWVkMDc3LCAweGU3MzRjYzk3LCAweGYzZTVmNmRjLCAweGJjZWNkNGYyLCAweDAxY2Q2ZTdmLAorCTB4NTQ5YWVhZjgsIDB4ZTU4YmY3YmMsIDB4ZjJiNzk0MjksIDB4NGMxNjFlODMsIDB4ZmYzODFjNGEsIDB4MWEwYjJhZTksCisJMHhjZjhhMGYyOSwgMHg1MThiNjU3ZiwgMHhlNWMyNTdkYywgMHgzZjgxM2NkYSwgMHhkMTE4NjkzNiwgMHhhNzgxNWNlZiwKKwkweDE3YTE2Y2VhLCAweGNhMzE1OThiLCAweDZmMDI3OWE5LCAweDE5MzczNDNmLCAweDMzNmViZWI4LCAweDc5OGZjOTQ0LAorCTB4MWUzZjI4ZDksIDB4NmJjZjZiOGUsIDB4OTdjOTQ3YmYsIDB4NGFlZTMxMWEsIDB4NjJhZmM3NjEsIDB4ZmQzZmU0N2QsCisJMHhhN2YxZDg0NCwgMHhmYzc2ZTYxZSwgMHhmZTQxZDY2YSwgMHg3MTlmZGVkMywgMHg5NjFlYmUzYiwgMHhlZDEyZjQ4NywKKwkweGFiZGRhZDA3LCAweDY4NzdkNzJkLCAweGRlYTAwZGNiLCAweGFlYzZmZmIxLCAweDg2MzNiOTI4LCAweDFmN2JhNWZiLAorCTB4M2Y0MzJmYWUsIDB4NzdjZWNkNjQsIDB4MjM1ZGZmYzgsIDB4MmI0MDRjZTUsIDB4ZTc0MGMwNjcsIDB4NTFhMWU2NzIsCisJMHhkNmZhYmZlNCwgMHhkODE5ZTNmMiwgMHhmMjY5OTVkNSwgMHg3NmM5ZWY0YiwgMHg1ZTc3Zjg0NiwgMHgwZDJlNzllNCwKKwkweDdhMTFmYjhjLCAweGMxNmYyM2VkLCAweGQyOGIyYzdkLCAweGE1NzJkMTRmLCAweGU5MTVjODUwLCAweDViZjI5MGZmLAorCTB4YzY0MjliY2EsIDB4NzdlYzE0ZjUsIDB4OWI2MGYxZGYsIDB4ZTFlZjNiMjgsIDB4YzRhZmExNmMsIDB4NGRmYTRkZmUsCisJMHg4ODU0N2RhNCwgMHhkN2QyMTFmNiwgMHhiYTIyMjZhOCwgMHhiZjcyN2ViMCwgMHhlODQ3ZDI2ZCwgMHg2NjI1MDVhNSwKKwkweDE5OTE3YmM0LCAweGE2ZTExYmY4LCAweGQ5ZjU4ZGI3LCAweDY4ZjFmNDM0LCAweDgzZjdlNWY2LCAweGY0NTFlZmRhLAorCTB4MGI2M2Y3MjMsIDB4ODRkY2ZkMDUsIDB4ZmYxODE4OTEsIDB4YjgxZjcyMGYsIDB4NWNjZmQzOGEsIDB4ZjQ4NDNkZTYsCisJMHg5Y2Q1ZmJmMywgMHhmMGJlZTQ3ZSwgMHgzZDAzZWY5YiwgMHhhMDdkYzhmYSwgMHhkZDdlNGZkYywgMHhkZDNmNjBmZCwKKwkweDg2M2VjMDU4LCAweGU5NWNiMWU3LCAweGZkZjFlMDE3LCAweDQ1ZDM4NTQ2LCAweDNkZGY5Y2ZkLCAweGYyYzJjNTU2LAorCTB4NzMzMzY4ZTIsIDB4Yjk3MDg2YWIsIDB4OGNjOWE2NjUsIDB4MDMxNjk3N2UsIDB4OTljZDJmZGYsIDB4ZDJkOTdlZjUsCisJMHhiNDEzZjkwOCwgMHhiODQwMWY5NywgMHhmOTI3NmViMSwgMHhkYWFkZWI3NywgMHgzZDJiMzY3MSwgMHhmNzExZmQ3NywKKwkweGM5NWE4ZjU1LCAweDA4ZTE3NGFmLCAweGMyZTU5MzIzLCAweDBmOTQxMWFlLCAweGM3ODE5OWZlLCAweDZlN2NlNTViLAorCTB4YjVmN2JjM2YsIDB4Yjk1YmQ0MTAsIDB4Y2M2Mjk2ZWUsIDB4MDI1NWE4MmYsIDB4YjdjMWQ2MmYsIDB4NzdiZWFjMGYsCisJMHg3NTZiYmY5MSwgMHg2NzJmNzE0MSwgMHhlNDI3YzUwZiwgMHhiYWZkZjFiOCwgMHhjNmM3OTI3ZSwgMHhmNzNmNWMwMywKKwkweGRmOTQwOTI5LCAweDQ3ODdlZjBiLCAweDM4ZmVlOWM2LCAweGRjZWZjYjg4LCAweGI4MDdkZjRjLCAweDViNDdhOTFlLAorCTB4ZjgyN2YzZmEsIDB4MWIzMGI0MTMsIDB4YTdjZTEyOTQsIDB4NzA0ZGU3MDgsIDB4OTg1ZmNiN2YsIDB4MTM3OThhZTcsCisJMHgwNGUyMjMxYiwgMHhiZTY2M2VkMCwgMHhjZjIxNzlkYiwgMHgwMTcyNjE0NywgMHhiYTY1NjdjYywgMHg3ZmQ3MTdhNywKKwkweDRmODVjNDRhLCAweGE5ZTIzODg5LCAweGZjNTcxZTQ0LCAweGZlN2Q3ZjdiLCAweDdhZTIwZGI0LCAweDNiODg5NGU4LAorCTB4YzZkMTRhOWUsIDB4NDRiZDY0OWIsIDB4NmNkOTNjZjEsIDB4NjAzNDZlZjYsIDB4Mzc3OTllYmMsIDB4M2Q3MGZlODIsCisJMHg3Y2EyNmE2NCwgMHg1ZjFjNDU5NSwgMHg2YjI1MmZiZCwgMHgxYWM4MTFlZSwgMHgxMDZhM2U1NCwgMHhkMzk5ZmJiNCwKKwkweGUzMDQxZmFiLCAweDllZDM2ZjJjLCAweGY3MTVlYTgzLCAweGJhMGFmNmRiLCAweGE3ZjBiNWU5LCAweDUwNmIzNzFjLAorCTB4ZDc2YzI4ZjUsIDB4YjNkZjgwYmIsIDB4Mjg5ZTVmZGEsIDB4YmZlYTVlY2IsIDB4YzkxMGJhZjcsIDB4OGZmMmZlYTMsCisJMHgzYTljZTI0MiwgMHhmOGM4OTNmNywgMHg2MWY4YmM0MCwgMHhmYTMwYmM3NCwgMHhiYzc0Njk5YywgMHgzN2U0YjE3ZiwKKwkweDI0NWZlZjExLCAweDZlZTJkNGU0LCAweGQ1Yjg2ZjFlLCAweDgyMGYzNmNjLCAweDY3NzViN2VmLCAweDI2YjhmYzUwLAorCTB4MTM1YzNmZDEsIDB4YmY1YmY3ZWYsIDB4YTQ4NzllNTEsIDB4OWVkY2RlY2YsIDB4Y2ZmOGY4ZmUsIDB4ZjVlM2UyMjIsCisJMHgyZjVhM2UyMiwgMHg1ZGE5ZDdkNywgMHhjZjAxNjRkZiwgMHgzZTNlMzFlZiwgMHg2MDczOTA3OSwgMHg5ZjNhM2M3YywKKwkweDMzYjQ0NWUyLCAweGFjM2M2MTBjLCAweDU1Yjg3MDcxLCAweGQxMmFlYmU5LCAweDM5NjE3YzRmLCAweDM1ZjczY2EzLAorCTB4NDE2YjJkNmYsIDB4MmQ5YWYyM2YsIDB4NjE1NTk2ZTIsIDB4MzgwYmQ3NzcsIDB4ZDM5NzViYzcsIDB4OGQyZTYzYWIsCisJMHhiOTgxM2ViZiwgMHhlNTkzZDYyMiwgMHhjOTk0ZDE0YiwgMHgzM2M4OGY5MiwgMHhhZDkzNTQxZCwgMHgzNGRiOWY2OSwKKwkweGYwN2Y1MzQ0LCAweGVmOWE1MWJhLCAweDRkMjJmZWY5LCAweDFhZjVhMGI5LCAweDZkNjFmZDRkLCAweDg4ZjI5YTE1LAorCTB4ZWE2YmQ3OWQsIDB4NDkyMWIyMTcsIDB4YTIzYjZmZTQsIDB4YmIxMjVmNDcsIDB4ZjM0NzMwMmEsIDB4ODVkZWY0N2QsCisJMHhiMjlmZjY5YSwgMHhhMDkzMWRhNiwgMHg3YjQ1YTc1ZSwgMHg3YmYzMzMyZiwgMHg4NTk0YzY3YSwgMHg3NmM3YTlmMywKKwkweGMzZjRkNTJjLCAweDI5NTA0YTgyLCAweGY2MzNkZjBiLCAweDc5YTdiODk5LCAweDg3OGYwZjc5LCAweDVhYjVkZDVjLAorCTB4YmVhZDRlMzMsIDB4MWQxOGYwOGUsIDB4N2Q2MjJkZWYsIDB4MDg2ZTM3ZTQsIDB4MWIyMGVlMjgsIDB4ZDU1ZGZmMTgsCisJMHhhZWVkNGVkNSwgMHg3OGM4Zjc2NCwgMHgyMjQxYzZjOCwgMHhiMmNkOTdkZSwgMHhkMzQ3NWQzOSwgMHhjM2VjOGQ4NSwKKwkweGU0ZjRiYjBiLCAweGMzNjQyYzdmLCAweGYwNDQ5YTFmLCAweDZiODBiMDMyLCAweDMwMmVmZTIwLCAweGYwYmIxN2VlLAorCTB4Nzk4ZGRkOGMsIDB4YjViZmI3NDUsIDB4Y2E2M2U2OGMsIDB4ZGUwNWQyZDQsIDB4NWViOTE4MWYsIDB4NWQyZDQ4ZWIsCisJMHgzYTVhZGRkOCwgMHhhNWEwOWE0OCwgMHgyNzc4Njg4MywgMHhjMTc0YjQ3YiwgMHhjYmJmZjA0MiwgMHg4Njc1M2JjMCwKKwkweGI3ZmU2ZTk2LCAweGYwODFkY2UwLCAweDViZTE4NmI1LCAweDYyZDNkMDdjLCAweGJjZjFiODIzLCAweDk5OWY2OTM1LAorCTB4MWQxNDNkODQsIDB4NGU3NjkwZDcsIDB4YmJiMDkwNzAsIDB4MmUzMjNmNDUsIDB4OTNmMTU5YjEsIDB4NzcxZmQ1NWQsCisJMHgwYmNjMTA5YywgMHhkNTNkYTNlNiwgMHhjOTVmYjhjNCwgMHg2ZmU1MTA3YiwgMHhiZDI0YmYwYywgMHg5NDk3ZTc4ZiwKKwkweGMwOWI5ZDcwLCAweGYzMmQ2N2Y1LCAweDY2M2VmYzkyLCAweDkzYTRmZWUxLCAweDlmYzhhYmQ1LCAweDkxMzU5MmI0LAorCTB4OWNkOWZkZGQsIDB4ZThlZmMyZTksIDB4Y2E1NzdhYTcsIDB4OWY5MDE4NTMsIDB4OGIyOWY2MDAsIDB4MDZhZWQ3ZjAsCisJMHgxZmVmMWE4YiwgMHhkMmE3ODY4YSwgMHg3OGVkMDRhZCwgMHg0Yjc1OTg2ZSwgMHhmY2EzZTA3ZCwgMHhlZGRlMGYxNSwKKwkweDY4ZmY4OWE5LCAweDUxZTY1ZmVkLCAweGI0OTdlNTIyLCAweDEyNzhlNTg3LCAweGM5YWU1MjllLCAweDQ5YWM0YzcxLAorCTB4MTE3Yzg5OWYsIDB4YzhkOGU3MjUsIDB4ZDY5M2Y4ZTgsIDB4NDFmZDIzOWYsIDB4ZTMyMzhlMzIsIDB4OWJmZWQxNGMsCisJMHg1NWI4YmIwOCwgMHhjMWQyNzE4ZiwgMHhjZTc4MmRmOSwgMHgyMWUxZDhiNywgMHhlYjI5NjEzZiwgMHg0ZmRmMDViOSwKKwkweGE4YjQ3NzMwLCAweGI4YmZlMTJlLCAweDJmZmJmNThhLCAweDJiYWJlYWUyLCAweGYyNmZiNWM0LCAweGYyNDdhMTJiLAorCTB4NjViM2M2MDcsIDB4ZmY5NjFjN2MsIDB4ZjFhMTFmZjEsIDB4OGI5NWM1MjQsIDB4ZjJmMzk4ZjMsIDB4ZDNkMjI3MDgsCisJMHhmYmE2YmY0MCwgMHg4ZmQwMmJmOCwgMHg4YTk3ZDc1ZSwgMHgzMTMwYWFmNSwgMHhmZGRlMjIzZCwgMHhmNWEyMTJhNiwKKwkweDM2Nzk5MGZjLCAweDZmZGI5ZTQ1LCAweDZlZDMxZDYwLCAweGU4MzI3ZjIxLCAweGE3MjdiYzQ5LCAweDU4YmJmYjkzLAorCTB4YWMzZGI0NTcsIDB4MDc1OWJmOTIsIDB4YWZiYTQxMmIsIDB4ZGU3MTExNjUsIDB4MmE3N2YwZmMsIDB4NjU5NjA3ZWIsCisJMHhlYzk1ZDIxZSwgMHg4MmYxYTc4OSwgMHhlMGEzY2E3MiwgMHhjODRjNTNmOSwgMHg4Y2ZmYjk0MSwgMHhmOTkzY2ZiNywKKwkweDRmN2VmMjE4LCAweDk0NTQ3Nzk5LCAweDFjNzVmODIzLCAweDAzZmQ4NzFiLCAweDk0ZTU5NWJmLCAweGY4MDE3ZmEyLAorCTB4YzdlNDg5NTMsIDB4ZmEyNTNjZmUsIDB4YTMxZjgwM2UsIDB4MzFmMzJmZDYsIDB4ZjIxMmY2ZjQsIDB4NWM4YjJkMWIsCisJMHg4NzgwZDdlZiwgMHg5YzdlNWJiNCwgMHhjOGU5ZThjMywgMHgzZWIzZDE3MSwgMHgzZDZmYzRlMSwgMHg0N2E0YjlmOCwKKwkweDY4ZGEzZjkzLCAweGZhMGQwZDg0LCAweDc5MTQ1ZTEzLCAweGJiNWExZDgxLCAweDlkMWM5NmZkLCAweGY3ZGYxYjgwLAorCTB4ZjE1ZTA5NWMsIDB4ZjhmMjIxZjEsIDB4YWViZTNlMDQsIDB4ZjhmMzI2MWQsIDB4MGM5NzFjMjQsIDB4MGQwYWZiODQsCisJMHg4ZmY3ZmI1YywgMHgxMTVmNzBmZCwgMHgyZTEyZWUwYiwgMHg3ZTdiNGFlNywgMHhkYmQyZjg4MSwgMHhiYzIzYTU4ZiwKKwkweDU3N2FhNjE3LCAweGUzZGNmZDYzLCAweDVkMTQ0ZmExLCAweGZhNTU1ZTc4LCAweDdiODc5NGIzLCAweGU3NGY0YmExLAorCTB4ZTNhZTFhZmYsIDB4MjVlMWIwNzIsIDB4ZjM4Njg5M2QsIDB4YjM4YTI2ZGQsIDB4NDFiZDc0ZDYsIDB4NjZkOWUxNzYsCisJMHhmYzA2YjQxMCwgMHg3MjE4MGNiZCwgMHgwOGZjNjVkOCwgMHhiNzhlZjA1MSwgMHhkOWViOTI0ZiwgMHhlNWY2MjM5MCwKKwkweGVmMzJmZDYyLCAweDM5YjlkNjA3LCAweDQ3NWU2NjI3LCAweGRmYjQxYzNmLCAweGY0YWExYzA1LCAweDFjZjA5MjYzLAorCTB4OTJiZTdmNTksIDB4NzkxNzk3ZGEsIDB4M2FmNDVmNWYsIDB4ZmU3ODcyMmEsIDB4ZjdiMzI5ZGIsIDB4YzNlZmVjM2UsCisJMHhkODFkOWM5ZSwgMHhmYmJlOTU1ZiwgMHg2N2MyMzY3MCwgMHhiYmU3NDJhZCwgMHg3OWY4OThhNiwgMHg1ZTcxMmNkYywKKwkweGM5YTg0MjZmLCAweDMzOTllNzhkLCAweDY2N2RmODczLCAweGY3YTQ3ZTIzLCAweGZkZjkxYzYyLCAweGUwYTY3N2I1LAorCTB4ZmZkOTM0MzksIDB4ZTc0NzQ1MDgsIDB4ZWU3YjE5NDcsIDB4YzEyYzdmODMsIDB4MzcyMmU2ZjgsIDB4ZDhiZjZmZGUsCisJMHhiYTJmZWUyNCwgMHgwMDJjMWFjYiwgMHg5MWJhZjIzOSwgMHgxODY1NDdkZiwgMHg2NmU3NDRkMiwgMHhlNGY1OTJmYSwKKwkweGIzZDM0Y2Q3LCAweDcyNzc0OGE5LCAweGFkYmNmMmRlLCAweDAxZjc4ZjdjLCAweDdjYjE1ZTYwLCAweGFmYTVhNTNmLAorCTB4N2JmYTBkNzgsIDB4NzVjODNkMDQsIDB4MmJlY2E5NGYsIDB4ZTE4NWIyNmUsIDB4YTMzY2YzMmYsIDB4ZjgyNTUzZTEsCisJMHgxYjQzZWU0MywgMHhkMDViNWVmMCwgMHhiY2NkZTdiZiwgMHg2ZGFmN2QxYywgMHg1ODc0ZmVmZiwgMHhmNjM2M2RmZiwKKwkweDgzN2ViOGM4LCAweDFlMzQ5M2M1LCAweDZiZGM1MWY5LCAweDI3ODcxN2ZiLCAweGE0NzdkZjg5LCAweGJjZjZhN2JkLAorCTB4YmY5N2I3YzgsIDB4ZGVlZjEyNTMsIDB4NTFjY2ZmOWIsIDB4ODI3Yjk3YmUsIDB4Y2I4NWU1ZTIsIDB4NzA3OGZmYmMsCisJMHg5OTU2NDg2OSwgMHg3MzlkMzU3YSwgMHhkZWFlNWVmNywgMHg4ZmFkZmYyYiwgMHgyOGJlZGZiOSwgMHhkM2RmZjdiZSwKKwkweGJjZWM2YWY5LCAweGNlYjE1ZWM1LCAweDg4NjE3ZTcwLCAweGU3ZjcyOWNlLCAweDdlNTRiZTJkLCAweDFhNDc3YmQ5LAorCTB4MDhkMjNlZjAsIDB4ZjZiY2M4MzgsIDB4YjQ4ZmJjMDYsIDB4ZDBiZjQ2MzgsIDB4ZTU3NmNiOWYsIDB4YzRhYTg3N2IsCisJMHg4ZjMwMWFiYywgMHgzZGYyMzUzMCwgMHgzOGYwYjdhNywgMHgzMDJmMjI2OSwgMHhmYjdjODg5NCwgMHg5ZDNkMmVjYiwKKwkweDExZTVmZmUzLCAweDMxZGQ4Y2RkLCAweGNiOWI5ZGU2LCAweGE5Y2EzMmUxLCAweDBlOGQxZjEyLCAweGUzYjVmYmYyLAorCTB4NzllNzkzZDUsIDB4ZThkOGI5ZTQsIDB4ODQ1Njc1ZjksIDB4NjNmOWM1NmUsIDB4ZjFhYzcyOWUsIDB4M2Y3Y2I5MWMsCisJMHg5OWRkZTcyYiwgMHhmMGQxZjFjMiwgMHg5YmRmODk5YSwgMHhmMjdjZjJhYSwgMHg0YWQwOTRjZSwgMHgxNjg3MTNlMiwKKwkweDFlMDRjM2NmLCAweGU1MGZhZjNiLCAweDk5YjJiOWQxLCAweDhmMTBlZmRjLCAweGZhYTcyNjFlLCAweGM4YmU1MWNhLAorCTB4ZDRjYWVlN2IsIDB4YzExMWM1MjYsIDB4ODdhMjU3OGYsIDB4MWFmNWRjMzAsIDB4YmI4NDBlYmMsIDB4N2VjYmJlOTEsCisJMHg3YzE1MWY0ZiwgMHhkYzM2M2NjYiwgMHhmYTExMmRjZiwgMHg1YTllYzk2ZSwgMHg3ZWU1ODdiMiwgMHgzZDRlZjRlOSwKKwkweDY2OWM2ZmU1LCAweGJhNzJhZTNjLCAweGQwZmRhMTRkLCAweGViNjMxZjUyLCAweDdjYWQyZTQwLCAweGFhMzM3OGEyLAorCTB4YjA5OTI1YWUsIDB4MWVmZTE0OTYsIDB4ZTk2NjFmN2YsIDB4YmFmOGE4YzYsIDB4YmQ0OTVmZDgsIDB4YmU1ZmM3MmEsCisJMHhkNzE3NmI0ZCwgMHg0NjdmNmRiMCwgMHg1MWY0ZTlmYiwgMHhiMDU2M2YyZSwgMHgyYjNmZDIyNiwgMHg1N2Y2ZDAxZiwKKwkweGE3ZDY2N2IzLCAweGJjZThjZjM4LCAweDhmYzIxMTgwLCAweGVjNTcyZDM3LCAweDE5NThjYTU3LCAweDRmMzU4ZmVhLAorCTB4OWZjNDZlN2MsIDB4MTdjNzg5NjAsIDB4NDM0ZmZiZjgsIDB4N2RkZmYxODcsIDB4OGVmZTI3YzIsIDB4Yzk2ZjNlMDgsCisJMHgxNzIwZmNmNSwgMHhmMmVmM2VmZCwgMHhmNWNlYWVmOSwgMHg3ZjQ1YzljZCwgMHg3ZTdjYmJjOSwgMHg3MDJlZWExNywKKwkweDhkMmJiMzNkLCAweGZkOGI1YmY0LCAweGZhZmY5MjJlLCAweGRmZmU1Y2MxLCAweDAwMzVmNzhiLCAweDcxMjY0YzljLAorCTB4NDlhZWJhNmYsIDB4NGRmNjQ4OWYsIDB4NDNlY2U4ODAsIDB4N2U3MzFkZTcsIDB4MjY3NzY1NDAsIDB4ZDNkYTQzZjIsCisJMHhiZjYwNjdkMywgMHgxZWFkYTdjZSwgMHg3MmQ2ZGY1YywgMHgyZmZhMjE0ZiwgMHhmM2YzNTZiNiwgMHg4ZjEzNjZhMSwKKwkweDM5N2UwN2RmLCAweDUzODYwMGYxLCAweGFmNmM3Njg2LCAweGEzOWQxNzQwLCAweGZkMTA3ZjdiLCAweDNmYmFhZDQyLAorCTB4OThiY2M2MWYsIDB4NWYzY2M5ZDYsIDB4ZGExNzVkMzIsIDB4M2M2MjI4M2YsIDB4ODk5MDM1YTcsIDB4NjhlNzdkZjEsCisJMHg5YTRlNmY3ZSwgMHhjYjkwYmNiZSwgMHgzNjI3NmU3ZiwgMHhlODVjNWMwOCwgMHg2MjdmMjAyYSwgMHgxN2ZhNDFhZiwKKwkweDJlNzQyYzNiLCAweDJlZmY4ZWFiLCAweGYxYzYyOGM2LCAweDcwZWFmMzJmLCAweGYxNzY5MTBlLCAweGY5YTY2NmQ5LAorCTB4MWQ1MTg2OWQsIDB4NDg5MGQwNGEsIDB4M2M1MGE4ZjcsIDB4MzA0MzZlYTgsIDB4NjdkNDE2ZmQsIDB4NGYxNGE5NGYsCisJMHg3YjRiZjM5MywgMHhlMzAyYWIzZCwgMHhkZDhmNTI2NiwgMHhiZmI4MzhhMiwgMHgwYmZkZDg0ZCwgMHg3MWUzZmM5OCwKKwkweDllODJmOWI3LCAweGZmN2IwODE2LCAweGY3ODcyYjE2LCAweGMzY2VlNjUyLCAweDJjY2QwYjc2LCAweDc2YWMwNzUxLAorCTB4Mjk0NzY1NGIsIDB4OTBkNmIzYWQsIDB4OGM4NTc2OGMsIDB4NDdiN2M1MWYsIDB4MWFjOWZiNjIsIDB4ZTdlNzYxN2UsCisJMHhlMWJlOTU5ZSwgMHhmNDE5YzlkOCwgMHgzZjg2NWQ0MSwgMHg2OTNjODVkYiwgMHhmZmNmY2UxOCwgMHg4M2NjYTFiMSwKKwkweGQ3ODZjYWYxLCAweDMwZWZkMDQ2LCAweDNjNzgxMjk5LCAweDE5OTZlNDFjLCAweDg0M2ExMWVmLCAweGJkZDYxZWZhLAorCTB4Yzg4YjE1ZWEsIDB4NzM4ODBhNWIsIDB4ZDhkZWZjY2QsIDB4NDUzOTM5YzYsIDB4NzhmMTFlNzQsIDB4NzFmZmRkMWYsCisJMHgyM2NhMTBkZSwgMHg4NDc5MDZmZSwgMHg5MmJlYTYzNywgMHhlMDFmYmJmYiwgMHhkOTBkZWJiZCwgMHhmOTQxZDc2MCwKKwkweDc4OWZlZTc0LCAweDI1Njg0ODc5LCAweDkyOTkxYmRlLCAweDQ3OTc4OTc3LCAweDcyYzEzZTg1LCAweDZjYzI1ZTRlLAorCTB4NTY4NTE3MmEsIDB4M2UzY2ExZWEsIDB4NzE5NzkzMmYsIDB4MzYwNDBhMDMsIDB4NmNmMDZmMzUsIDB4YzkyZGRhM2YsCisJMHg4NzcwMmVjMiwgMHhjMzc3YmNlOCwgMHg5MTc0MjNjYiwgMHgxZTc3NThmZSwgMHg4NDY3Njc5NywgMHgzZTRjZjkzZiwKKwkweGMyMGU2ZGJiLCAweGZhZWM2NDdiLCAweGRlZDI3OTY5LCAweGM5ZjVhMzZlLCAweDJjZjZjYWY1LCAweGZmYmI3NjMzLAorCTB4OTU3ZTcyMTAsIDB4YzUzZGE3MzgsIDB4M2MyZDVhY2EsIDB4MDQ0ZmU3ZmUsIDB4MWVlYzFjM2MsIDB4N2ZjYmYxNDEsCisJMHhmZGUxNGRjZCwgMHg0Zjc0NDIzYiwgMHhmYTI3ZWM4ZiwgMHhiOGU0MWM3NywgMHg3YmZlMTVhYiwgMHhmMmEzZTc1OSwKKwkweGNiOTc3ZWJjLCAweGIzOGMyYmU1LCAweGVhMTljNjkxLCAweGU3OWJlN2UxLCAweGZlMjIxNGU0LCAweGMwYWE2ZjAwLAorCTB4YzlmN2NhOWIsIDB4ZDA3ZTdjZWQsIDB4MTNmZWZlMmYsIDB4ZjQ2Mjg3ZTgsIDB4MGFmYzFmZmIsIDB4ZTc4N2U3ZWEsCisJMHgyNzI3NGQxZCwgMHg1YWFiMzhjNSwgMHgyZmI2ZGM3OCwgMHg2OWU4ODBiOSwgMHhmN2RjNTU4YSwgMHhjNzVkYTI1MiwKKwkweDlmNmUzY2Y4LCAweGM1OTJmM2JhLCAweGFmMDkxZDc5LCAweDY5YzY4NTBjLCAweDA5Y2M3MDExLCAweGY2MzM5ZjBkLAorCTB4YWZmYmFmOWIsIDB4OGVlYjRiZmYsIDB4ZWYwNzk3YzAsIDB4YzVkODM5NmQsIDB4OWYxZTM3ZWYsIDB4ZjQ4NWYxYzcsCisJMHhlMDc2NDI5YywgMHg2NzdmNGQ3NiwgMHg5ZmI1NDdkNiwgMHhhZTVmMjhjMCwgMHhkYTgwYTUyMSwgMHg2ZmVlMmJkZiwKKwkweDYxZDlmNzk1LCAweGRjNzFmY2JiLCAweDU3YmI0NWJlLCAweGZjYzFhN2RlLCAweDFjNjQ1OTkzLCAweDhjZGVmZmIyLAorCTB4NzBiZjcxMGUsIDB4Mjg2ZjNhZmYsIDB4ODg3NGViMTEsIDB4ZWYyMjNhNzUsIDB4Y2ZlN2VjMzMsIDB4NzM3OTdkNjMsCisJMHhiOGU5MDNlZCwgMHhmZGZkZmUxZiwgMHhmZDEyMjk4ZCwgMHg1NjNjZjg2OSwgMHhmMWQ3Yzg3ZiwgMHgxZTU1NzJmMCwKKwkweDFiZGYyNzk3LCAweGEzM2NlNDVlLCAweGU3MGZkOWUwLCAweDc4NDlmOWE4LCAweGJiNTM3ZjIyLCAweDk0YmE1YTMxLAorCTB4ZjQxMWNjZjMsIDB4ZjNiZjgwMzksIDB4ZTI3OGU1YmYsIDB4YmJmYWQ5N2UsIDB4NzMzOGJlNzksIDB4YmViYWU5NjksCisJMHhmOTg3NWYzMywgMHgwN2RkYjIwOSwgMHgzNGEwYzA3OCwgMHgyMWJjMjdlYywgMHg3MzI3ZWM0ZiwgMHhiYzljNGU1OCwKKwkweDMzOWU2ZjQ3LCAweGRlOTE3ZmE2LCAweDdiMjdlZjQ3LCAweGQ5ZWZlNTkzLCAweGJkMWFmZDY5LCAweDM5N2JmZTRlLAorCTB4N2VmYzczZmUsIDB4ZmNhMzZiODMsIDB4N2E4ZjE4M2MsIDB4MTc2ZTE2Y2UsIDB4ZjJkYTJmZDYsIDB4MDM3ZTAyNjMsCisJMHg3OTdkNTRmZCwgMHg1MzEyYmYzOCwgMHgzYmY4ZjNjNSwgMHg0YWYzYWI1YiwgMHg3NzYwYWI2NywgMHhkYzU1MjQ5NCwKKwkweGE2ZTUwZjk5LCAweGZjOTNjNmM3LCAweGYxNTQxOTJlLCAweGYzYzgzZTc5LCAweGUwNGQ4ZjM1LCAweDdjNTc0N2RmLAorCTB4NzljYjA0M2UsIDB4OGE3OTc5MTMsIDB4Zjc5NDc5ZTcsIDB4OWVjY2I0NjAsIDB4MmJiNjE1OWEsIDB4ZDE3M2NjZWUsCisJMHgxZDRhZmFiOCwgMHg0MjY3NmJkZCwgMHg2M2Q2MDYyMywgMHhmOTQ0ZGQ3YSwgMHhmMWFlMTI4MCwgMHg1ZDI2MjU5ZSwKKwkweGJmZjNhYzUzLCAweDAzZDNmNGY3LCAweGMwNGNiZjhmLCAweDFmZDBiYTdmLCAweDIxMDVmYzI4LCAweGU4MmZlMzU1LAorCTB4Y2ZlN2U0NGQsIDB4OTJmZDVmN2IsIDB4OWJkY2Q3Y2UsIDB4MDc5ZjViZTcsIDB4NjdhZDFiZWQsIDB4ZjI4N2NkNmYsCisJMHgxNDA3ZWIwNiwgMHg2MDNjNTNlZiwgMHhjNjFmYTA4NywgMHg2MDhiNjBlNSwgMHhhZGQ5Y2FiZSwgMHhkODlmYjQ1ZSwKKwkweDI1NTliNzZhLCAweDE4ZmYwYWI4LCAweGYwMDdhOWRlLCAweGE3YjVlNTdiLCAweDBmODgzYzdlLCAweDRjNzljNWUzLAorCTB4ZjFhMDcyMTQsIDB4MTVmZGJmYjUsIDB4Njc4ZGM0ZTMsIDB4MWIzNDZlNmMsIDB4N2MzZjc2MjcsIDB4MTM1ZmRhMjcsCisJMHgxYmZlZGZiYiwgMHgzY2ZjYzNkNywgMHg0NGY3OWM5MCwgMHhmYmMyN2ZmNCwgMHg5YTI2NWQwOSwgMHhhYmVlYzRmZiwKKwkweDZiZmQ2MDU2LCAweDQwMmVlYmRmLCAweDQ0ZWViOTNhLCAweDQyYzUwNWIwLCAweDNlZmZhYmVmLCAweDg4MGU3MzQ4LAorCTB4N2NkOTdhN2QsIDB4MzlmMWI4ZDEsIDB4MDEzZjhmMDksIDB4MWUwODkzYTAsIDB4ZjhmMGU3M2YsIDB4Y2VkOWYyOGEsCisJMHgwZTZlOGYzYiwgMHg3YjU0OTM5MSwgMHg3OGVjMGFkZSwgMHg2MDVmM2I4YSwgMHg3YjhjNmUwOSwgMHhkMWZkNzNjOCwKKwkweGQ1ZTNkNTdlLCAweDdmNzgzZWIwLCAweDIwY2MxZjVkLCAweDcyOWU5ZWMyLCAweDI0ODIwY2QxLCAweGM5NjcyZTVjLAorCTB4MzlhNTcyOWEsIDB4Y2FiZjUzNGIsIDB4M2VmOWFmOTEsIDB4Y2QyYWYzM2QsIDB4NDJhZTk5ZjcsIDB4YzhkNjc5NGQsCisJMHgzN2ZhOWE4OSwgMHhlNTM1Y2JiYSwgMHg2YTY2MTNkOSwgMHhhYTdiNTdlYSwgMHg2MGMyZTUzNSwgMHhmMTdlYTY4NywKKwkweGY3ZWQyZTkxLCAweDc4OGY0YzYzLCAweDdlZWUzYTI4LCAweDI3YTU5ZjAzLCAweDJkOWVlNDNkLCAweDA2ZjRkNTNiLAorCTB4ODVmZTI3M2UsIDB4YWZkYTIzODMsIDB4OGVjNWNkN2MsIDB4ZjRiZGYwMzcsIDB4OWY5ZjQ3MmIsIDB4OWJlNjdlOTIsCisJMHgzMTgwYjZmNSwgMHg1MzM5M2ZiNiwgMHg4M2RmMDgyZCwgMHhmM2YxZDdhMCwgMHhmYjI1ZWY1MywgMHg5Mzc4ODBmZSwKKwkweGEwYTZhN2U3LCAweDUwOTAxOTVmLCAweDlmYjlkYjc1LCAweDVjMzJlZmUyLCAweDZlZmRjNDU4LCAweDk0MzExMWM3LAorCTB4N2YyNzZlNGYsIDB4ZDM0MzcxZTUsIDB4NzllNDdmYjMsIDB4ZjcyOGI5MDMsIDB4YWY5YmViYWUsIDB4OGI5NGY3NTksCisJMHhjYmJhY2QzZSwgMHgzYzI4YWFkOSwgMHg1NzI5YTFkZCwgMHhkNGQ2ZWUzOSwgMHg1ZWI5OWU5ZiwgMHg2YmE2N2RmMywKKwkweGI2OWUxNDRiLCAweGJhMzdjYTZiLCAweDUzYzI4ZTFmLCAweDllOWUxNDdiLCAweGY0OTc3Y2QyLCAweDVmZmMyZGRkLAorCTB4MGFkZmExYWYsIDB4M2Q0MjkzOWUsIDB4Yzk4Nzg4OTUsIDB4MWYwOGZhYTcsIDB4MmFkYTdhMTMsIDB4MWNkNzRmMTEsCisJMHg5NTdjMjBlZiwgMHgyODk1YmQwNCwgMHgzNDhlY2IyZSwgMHgyMGNmODFiZCwgMHhkZGIwY2JlYywgMHg3YTRjZTY4MSwKKwkweDkxNzY2YzFlLCAweGYzNzBlYmZmLCAweDY5MWU3YTQ4LCAweGZmZmJkMzc2LCAweGNmNDA5ZTY4LCAweGU4N2IzNTVmLAorCTB4MzNjZDlmZjksIDB4ZWNkM2Q5ZTgsIDB4NzM0NzY3YTUsIDB4YWU3ZmQ1MDcsIDB4Y2ZmYjhiYjksIDB4ZGRlZmZiNTIsCisJMHhjMWJmNDVjOCwgMHgwMWE4NWQ3OSwgMHhjMThlYzYyMywgMHg5ZTllNDk1YiwgMHhjNzlkMDg0ZiwgMHhlYjdmMDZmMiwKKwkweDM0MjBhOWVjLCAweDkwMWQ2N2YwLCAweDllMjA3ZjJmLCAweGZiNGYyZTQ1LCAweDFlMGU3ODYwLCAweDE5ZmRmOGNjLAorCTB4NDNhMzdmMjIsIDB4M2I0NDI5ZTcsIDB4MGZlM2Y0N2MsIDB4MzJlNmE3ZGUsIDB4MzdiZDY5YjYsIDB4MTgzYTdmMTMsCisJMHgxMzI4NjZjYiwgMHg5MGY3ZTliMiwgMHg5M2NmYmMxZSwgMHhhOGIzZDhjMywgMHhmN2JlZTg0YSwgMHhiOTYzNjcwNywKKwkweGU3OWVmYzU3LCAweDI0MWZjN2UwLCAweGM3NWJmYzNiLCAweGUyMDMzZGQ5LCAweGM3MDdhM2VjLCAweDdiM2ZiMzg4LAorCTB4N2Y0NzY1Y2EsIDB4NDZhZmQxY2YsIDB4NDcxZTExZDgsIDB4YzNjYmRmODUsIDB4M2JmODBkMGEsIDB4YTE2YWU1MWMsCisJMHhmMWVjZjUwMSwgMHg1NDIxZTczOCwgMHhlMGM5Nzk1MywgMHg3YmI3NWM1MiwgMHg1ZjkxZTUxZSwgMHhlMWRmYTA2ZiwKKwkweGZkZjBhMzliLCAweGVjOTdhY2FmLCAweGY3YTBmYWUyLCAweGE3ZWQxMzQ2LCAweDJiM2NlOThlLCAweDk1N2EzZjkwLAorCTB4Y2UxMGM3YmUsIDB4MTRmZTNkMzcsIDB4N2I1ZWE5ZTksIDB4YWZjMjFlNWYsIDB4YmNiZGYxZmEsIDB4NGM3YmVjZWMsCisJMHgwZDk0NDc3MSwgMHg4Zjk1M2UxYywgMHg2ZmRiMzkzZiwgMHgzM2UxNWVmYiwgMHgwZDExZDcxYiwgMHgxZDgzYjk5ZiwKKwkweGY0MTE1ZjdjLCAweDIwMWRhMmU0LCAweDNkYWFjN2NiLCAweDJjNTcxNGY1LCAweDc1YzMwY2Y3LCAweDM4OWFmNTFjLAorCTB4ODFlZDdhZmYsIDB4ZjIzN2U0NjEsIDB4ZjA4YmNlOTQsIDB4MzYwY2Y0ZmYsIDB4YTJlN2ZhZDAsIDB4ZTgzZjQ0ZGUsCisJMHhkNjIwN2Q0MiwgMHgxZjllMTVlZiwgMHhhMjNkZWRjYywgMHgyZTY3ZGMxMywgMHhlMGJlZDJiMCwgMHhhM2RmOGU5OCwKKwkweGVlZGY1ZDEwLCAweGNmYTNmYmUyLCAweDljODdkY2UyLCAweGRjNTdiZTI4LCAweDBiZWNmZjU0LCAweDVhZWY1ZmQwLAorCTB4ZWJkZDc1MGIsIDB4NThmNjQxMWQsIDB4MTc0MDEzNmYsIDB4NTRmN2JhNjgsIDB4ZGRmZTM5ZDMsIDB4YTEyMDE2ZTQsCisJMHhmODJkZWYzOCwgMHg2Y2ZlZjgyZiwgMHhmYzVmOWRmNywgMHhiMDdmZWEwNiwgMHgxZDI2ZWFkNiwgMHhmMDQ1MThlMiwKKwkweDJmMmEyODViLCAweGZkOTMzNTRlLCAweDZlNGU3OGI0LCAweDViYzVlYTA1LCAweDU2ZjBiYzQ0LCAweDYxNGU5YWJiLAorCTB4ZThkOTM1NDMsIDB4ZGI5NjdlODAsIDB4MDQwMzM3MGEsIDB4NmFiNGNhZDksIDB4NTM2NGZlMjMsIDB4OWIxZGNlNGQsCisJMHhlODdhYjlmMSwgMHg1OGYyMjM3NiwgMHg5YjdkOThkZCwgMHgwN2FkOGNkMSwgMHhmOTI1MmUxNiwgMHgxOWE3N2ExNywKKwkweDNhZGI3NWU2LCAweGU3ZWY4YmJkLCAweGRhZGFmOWU0LCAweDIyZjc5NDZmLCAweGM4OThmN2U5LCAweGQwMjAwMjRmLAorCTB4YTVjOTM1N2UsIDB4NDk0OWY2NjgsIDB4MTgxZjRlODIsIDB4NjMzMWUyMmMsIDB4ZGE0YmQ4ZDksIDB4ZTQ0ZWQ3NzgsCisJMHhkZjhiYjNhMywgMHgxZTI3MWUxOSwgMHhlYzJlZmRhMSwgMHg3YjhhZGZjNywgMHg0ZmVmYTM5ZSwgMHg1YzNhZTM5MSwKKwkweGNjNzVmZjdjLCAweGY2ODk5NDA4LCAweDA3YWU0MmU0LCAweDdjZmZjZGM2LCAweDdmYWMyOTQzLCAweDQ3NDNiNzVjLAorCTB4ZDViNzBkNzksIDB4Yjg3ODgwYmYsIDB4NjhmMDI1ZDAsIDB4NGZjODVkNjAsIDB4N2M5N2Y5MzcsIDB4NGM0MjFiZjAsCisJMHhmMGRjZTY5YSwgMHhiYmE1ZjQ5NSwgMHhhOTE5NTFjNywgMHhkZTQyNGIyZiwgMHgzOTdkNDhjYSwgMHgxMmFkYWZhMSwKKwkweDhmZDRhMmY1LCAweDIxMWFlNmMxLCAweDhlNDg5YjhmLCAweDQ3NWU2YzFlLCAweDdlY2RjM2U1LCAweDZlNjkxZTdhLAorCTB4OGRiOGYyMTUsIDB4NzlhYWZmYmUsIDB4MDFjNzkwYTcsIDB4ZDJmNzhmMjEsIDB4ZjllNmVlZmIsIDB4ZDlhZDdjZjQsCisJMHhhOTg1Y2Y0NywgMHg2ZTExZDdiZSwgMHhkNzNiOGUzMiwgMHhkY2JjYTNlYywgMHgxODliMGY0MywgMHg3NDJlZjFjNiwKKwkweDAzOGYyODliLCAweDQ3YjFlMjM4LCAweGM5NGYzMGQyLCAweGEzNDRlNzQ0LCAweGU1YTI5NWYzLCAweDc0M2QzZjdjLAorCTB4ZTViN2I4MGUsIDB4ZmVmN2U0NmQsIDB4MTdiNDIzM2MsIDB4YTdhN2M3MDcsIDB4NDc2NWNjYTMsIDB4ZTBmMWY0YjksCisJMHg4ZTg3MjRmMywgMHhiNDc2NWNiYSwgMHgyZTNlNGZhNywgMHhkZDk3MWVjYSwgMHgwZDNmZTUwMCwgMHg3MWZkMjVlZSwKKwkweDliYjJlN2Q0LCAweGUzYzlmY2EwLCAweGRmYmJmY2JkLCAweGY5NDBiNzY1LCAweGZjN2RjMWQzLCAweGQwNTE4MDdiLAorCTB4MmZlMGVjZmYsIDB4MzM5NThlNDgsIDB4NDdmMjIwZTUsIDB4MmE3ZjM5YTUsIDB4ZDdkMDBiYTgsIDB4MmY5MTA3ZTUsCisJMHg5OTJlNjdhNiwgMHg2MGIxN2M4YSwgMHg3MmU4OGJiMCwgMHg0MWZkNmJhNiwgMHhkOTFhY2YyYywgMHgxNTE1ZTJhZSwKKwkweDQ2ZTE1YjFlLCAweDU2OTE1NzZjLCAweGE5YmI2MmFkLCAweGM0NmM3NzM5LCAweDZlODZkMzc2LCAweGNkZGIyMzU3LAorCTB4MjM2ZmIzMTgsIDB4Yjc3MDZmOTYsIDB4MmU5ZjY4YWIsIDB4MWE1NjM5NDAsIDB4ZTU5NjQ3ZWUsIDB4NjVhNzI5NzcsCisJMHhkZGQ1ZGQzZSwgMHhlMzA3ZDI1ZSwgMHgwZmE0YmNiYSwgMHhlNjJhNWMyNCwgMHhmZjQyNmY1NiwgMHhlMjk3NjM2NywKKwkweGE5YTVkZmMwLCAweDI3ZjRhYjk4LCAweDYyZWU2MDMzLCAweDBhOTNkZTAzLCAweDNkZmZmYWYyLCAweDg3YWM3N2FlLAorCTB4Zjk2MjM2NzUsIDB4YWRiNzJhMWEsIDB4ZWRmYTA2ZmYsIDB4ZTJmNjAwN2YsIDB4ODAwMGU4MzEsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgzY2Q1ZmYwMCwgMHhlNTU0NzgwOSwgMHg5ZGNlZTdiNSwgMHg0YzkyNjQyZCwKKwkweGUyNDIwODM2LCAweDk2MjQ5OTY0LCAweDI2YjY0MzJjLCAweDBjNDg2NDEwLCAweGY5MDEzMGVlLCAweDEwMTk2NTQ0LAorCTB4MDQ0ODE2YzIsIDB4N2VhYjE3ZWIsIDB4ZTAxNzFhMTksIDB4ZDE2YjhkNjksIDB4YjVjNDZmYWEsIDB4NjFlNGI2YWYsCisJMHgxZDA5NThkNCwgMHg4N2QyNTJhYSwgMHhiNDEwNTUzYSwgMHg4OGE0NzQ3OSwgMHgxMTkwOTlmMCwgMHhjN2QyNzhkYywKKwkweGY3ZmNlNzNiLCAweDI0Y2VlNjY2LCAweGJlZmQxNDgwLCAweGZmOTM4NjA3LCAweGNmZDlmYmZlLCAweDAwNWZmZmY5LAorCTB4YjNmODUzODAsIDB4MzQ2MDdmMDIsIDB4M2QyNTM4ZmUsIDB4MDQ2ODA0OGMsIDB4ZDFiZjY3ZjEsIDB4MDM5NWIyNmQsCisJMHg4YzA3MzRhYywgMHg0MTJmYTNhMCwgMHg2MDEwYWJhMywgMHg3Njk2MGVhZiwgMHgyNGE0MDAxNCwgMHgwYjdhZmNjMywKKwkweDc0YjA4ZDk2LCAweDVkZTc5NjBiLCAweDA1NDgwMzY4LCAweDIwYmFkYTY4LCAweGRhODU4MTZlLCAweDYwNjZlM2JiLAorCTB4ZTIxNzQ1ZmIsIDB4NTJjZTM4YWYsIDB4ZTA1NDZlMDUsIDB4OWJkNDBhOTMsIDB4NGYzNDg5OWMsIDB4MWZkMjRkOWEsCisJMHg4NTZmYzdjYSwgMHgwNjRhNzg1MCwgMHgzZDlhYjdlOCwgMHg0NDgwMDRiYSwgMHgwZGFjN2I5MywgMHhmYjliZWRjNywKKwkweDg3NTg4MzRlLCAweDMxZDY4OGFmLCAweGViMWViZDZjLCAweDZjMzIwMGUzLCAweGNhMWYxZTU2LCAweDVlNTQxOTgyLAorCTB4Yzg0NmVkMDksIDB4Y2ZmNWI4NDYsIDB4ZGEyMmE0ZmIsIDB4MjMyN2M1OTcsIDB4NWY0MzRlODQsIDB4ZjllYzVmMjAsCisJMHg2M2ZlMTY1NCwgMHhlMDU0M2QwNiwgMHg2ZTAzZTk3YSwgMHg3MGQ3OTk2OSwgMHhlYTU2NjAyMCwgMHg3NDM5NjdmMSwKKwkweDIyNjY3MGVjLCAweDdlZDQ1ZWRlLCAweDE4YmYwNDZmLCAweDdkZmI0M2JmLCAweGJlOGRlMjE1LCAweGJmNjk3NTM3LAorCTB4MGY1YjU0MDMsIDB4MDIzMDQzOGQsIDB4ZDlkZmI4Y2IsIDB4ODU1ZWZlMTIsIDB4ODc4ZjBkZmYsIDB4YzNjMDY3NDksCisJMHgxMGYwYTFhNCwgMHgxYWYwMWZiNSwgMHhkN2RlOGU0MSwgMHhhNjZlY2IwYSwgMHhjMGJlZTQ3MywgMHhkMWZjY2E5ZCwKKwkweGY3MjE4MTA4LCAweGY0NDVmMmE3LCAweGZlMDVkYWZlLCAweDI1ZmYwMmY1LCAweDVhNzRlNzM2LCAweDM4ZmNkZDVmLAorCTB4OGUwMDUzOTAsIDB4NGQ3OTM1NmQsIDB4YTlmZmRjOTksIDB4MTc0NDI5M2QsIDB4MmQ4Mzc1OTMsIDB4NWI1YjNlOWEsCisJMHgwMGRlODM2NywgMHhjZGQ1YWRiMCwgMHgxNGJhZDdkMCwgMHgzZjgwNzZmNCwgMHhmOTczMzZiNSwgMHgyZTE2ZDZhZCwKKwkweDMwZjU2OGVmLCAweDhlYmFkOWRjLCAweGRiNWE1ZmUxLCAweGViNTc3ZWI5LCAweGRiYmYyZTQ2LCAweDZmZTg2NWVhLAorCTB4NWZiZjkxN2QsIDB4ODY2NTdmM2IsIDB4ZmY0ZDEyZGIsIDB4NDVjZWM5ZDUsIDB4N2I5ZThmYzQsIDB4M2U5OTEzYWEsCisJMHhjODUzZjdiOCwgMHhjODFhOWVhYiwgMHhjMzQ0YjY2ZiwgMHg5ZDY1ODMwMSwgMHg4ZjY1YzA5NCwgMHhkOWUxZjcxMSwKKwkweGMzNmRlMzE2LCAweDhjNzNmZDdkLCAweDE5YzY4OWJiLCAweGFkN2UwOWE4LCAweDRhNDM3YzQzLCAweDMwZDBmMTgwLAorCTB4YmU5YWJkZDIsIDB4M2ExYzQ2NGIsIDB4ZTRmNTY2ODksIDB4ZWIwZWZlMTIsIDB4NjQwN2JmM2MsIDB4ZDM5YjU2ZDksCisJMHgzODNlNDdhNSwgMHgxNzU1OGYxYSwgMHg2NTgyZGMwMCwgMHg3OGYzY2UwZiwgMHhmYTg1YWJhYSwgMHg0OGMwN2U0MSwKKwkweDNmYTI5Y2UzLCAweDA5N2M3MTkzLCAweDNhZjA3NzY2LCAweDBlMWNhMjEwLCAweGIxZTgwOGM0LCAweGQxOGYyYzQ5LAorCTB4NDBkZGM4NTAsIDB4NjBmOTlmYmEsIDB4MTkxM2U5ZTAsIDB4Y2IzMzgyYjYsIDB4YThmODcwYzUsIDB4OWUwM2FiOTMsCisJMHg2NTY3YTQzMiwgMHhkNTg0YzNhYywgMHhhNGY4MTI3ZCwgMHg0NjUzODQxMiwgMHhkMzhlMDBkNiwgMHgxM2Q0NmU5NywKKwkweDU2NDQxNDljLCAweDlmYzNjNzUwLCAweDYzMjJkZmM5LCAweDE0Y2JmMTg2LCAweDZiOTRkNDQ4LCAweGVkMzVhM2NkLAorCTB4OWE5OWFjZWIsIDB4NWNmNGJlZmEsIDB4YjRkMmZmMWUsIDB4ZmFlZDM0OGIsIDB4YzU5YTU3NDYsIDB4MjMyZjUzYmMsCisJMHg2Zjc0NjVkOCwgMHgwOTc0ODA1YywgMHg5YjFjOTk1NiwgMHg5OGJkZmViMCwgMHgwNjI4MjJmOCwgMHhiZjFiMTY5OCwKKwkweDMxN2JlMDg5LCAweDM3NmE1ZTE5LCAweDE0YzljMGVkLCAweDkzNGU3ZGMwLCAweDEwOGIyMzdkLCAweGM2ZGI5NzU1LAorCTB4OTllZGM3NmIsIDB4NzZjMzYzNTMsIDB4Njk1N2U2NTcsIDB4MjVjMTIxZDcsIDB4MWRhYmRmYjQsIDB4YTdkZjM0NTMsCisJMHhlOWFlNWU1NywgMHg5M2ZiMzJlZiwgMHhjZWY1YWQwOCwgMHhjNmY3Y2Q3YSwgMHg5ZjQxYWY5NiwgMHhlNWIxMzAwYywKKwkweDAxNGJlODI0LCAweDM0M2FmYmM2LCAweGVjZWU5NGUzLCAweGJmMWZiNGQyLCAweGViMTI2NDFiLCAweDM3OGU3ZDkyLAorCTB4NzQxZjk2MDksIDB4MTUyYWM0Y2EsIDB4MjRkZjliODcsIDB4M2ZhNWY1NTgsIDB4NGUwMWY2ODMsIDB4OWY1MTU5YjAsCisJMHg4M2RjOGE0YiwgMHg5NjNkMDI0NywgMHhjYWU1MjkyNywgMHg4MTJkYjdhMCwgMHhmMjEyNzBlOCwgMHg4OWJmNDhmNSwKKwkweDYzMjFjMjMwLCAweGJmZjJhOTYzLCAweDRjMWYxMDRlLCAweDMyMDAyMDUyLCAweDE2YWJmNjA3LCAweDNhNzk4MDRiLAorCTB4NDU5OGQ3OGIsIDB4MWJlNTA1NmEsIDB4YzkwNmMxZjUsIDB4Mzg0N2E2OTEsIDB4NTA1NDBlNDcsIDB4OGEwNDI4ZjksCisJMHg5NzNhY2EwOCwgMHgyYTZiZjg5ZSwgMHhiMmE1OGYzNCwgMHgwNDY5ZGMwOSwgMHhiZjc0NDgzZiwgMHgyZmRjN2M0ZiwKKwkweGUyYzRkYTA1LCAweGNmYzRjOTgyLCAweDY4ZmYzZjc1LCAweDE3YWM2ZGRlLCAweDVjMjYxYzYyLCAweGZlYmFlZmRmLAorCTB4ZmQ2YjRhOTEsIDB4OTFmNTNmYmIsIDB4N2UyMTZjMzcsIDB4Y2Q3ZWIyNmYsIDB4OGRjYjUyNzgsIDB4N2YxOWM3MmQsCisJMHgyZDZmYjk2YSwgMHg5MmUxNzdjYywgMHg5ZjY4MGRkYiwgMHhhZmZlMzYxMCwgMHhlZDBhNzZjYywgMHg1M2EyM2FkYSwKKwkweGI4YzlmYzIzLCAweDFlZDQyMGJhLCAweGM0MThiZTNhLCAweGJmZWEzMTc3LCAweDA0ZDM1YTdhLCAweDVkZGZkN2MyLAorCTB4NmY1NzZjNGUsIDB4OWUwODcyMTAsIDB4MWM0ZWY1NDUsIDB4Mjk0NjNlYTcsIDB4YTdkNDRmODMsIDB4YjJhMWVkMmEsCisJMHg2YWU5Y2I5ZSwgMHg2ZjY4OTU3ZCwgMHg1ODdiYzc1NywgMHg5NmFkMWZiNCwgMHg1MjJlZjE5NSwgMHg5Y2EyY2RjYiwKKwkweGEwZjdjZWE5LCAweGU1YWExNzI4LCAweDM5NzE3MGZmLCAweDYxM2ZiNDRlLCAweDI5ZWY1NTliLCAweDUzZmZlOTA4LAorCTB4MGYxOGRkYWEsIDB4YTA2ZWM5ZTMsIDB4YzkzMzkwM2QsIDB4MWFiYjQ4MWUsIDB4ZWRhMjFmOTgsIDB4YjE1ZWI2ODUsCisJMHgyMzdmZjMxNywgMHg0NGM1OGM3YiwgMHhkZjYzY2I4ZiwgMHg5MGVlYjkyMSwgMHhmMWJhZTQ4MCwgMHg4YmQzODM3NiwKKwkweGQ0OWU3ZmYzLCAweDEyYzZiNDUxLCAweGI3ZTdkZmMyLCAweDZhYmI3YzA4LCAweGI2MzI5Y2UzLCAweGRlNmFmOTVmLAorCTB4MzkyM2UyMjYsIDB4ODVjOGY3NmUsIDB4NTYzYWRkZjgsIDB4NGVhNzdhYzcsIDB4ZTg4MTM4YjYsIDB4ZmJkMGFmN2IsCisJMHhkODQ4ZmY2YSwgMHg4Njg2ZjJkMCwgMHhiMmY1NTE5ZSwgMHg2Y2MxZjNjNCwgMHhmYWY5YzFmYywgMHhmNGY1MWJlZiwKKwkweDhlNTljMjA2LCAweDkzNzA5NzNmLCAweGRjZjQyOTk5LCAweDk1YWRkNDQ4LCAweGVhMzZmM2Y4LCAweDNkZDIzMzU5LAorCTB4M2E5YzFiMjUsIDB4MWFmMjlmNmMsIDB4ZjFhMjY3ZWEsIDB4YzdkMGJmNDEsIDB4MjRmOGM1YWYsIDB4OGY5NTljMTQsCisJMHg2ZmY2YzliZCwgMHg4ZTUyOGNhMSwgMHhjZjJkN2JmOCwgMHg3Yzg5OTc5ZCwgMHg5ZmNlMzQ3YSwgMHhkMGRiN2M0YiwKKwkweDc1ZDc4ZGIyLCAweGUzY2FkZDhkLCAweDEwNTgzNTgzLCAweGNjZTJjZjhlLCAweDllOTdmYzI4LCAweDNmYTVmZjAxLAorCTB4ODI3MWZlMjYsIDB4NzVjZmE0MDMsIDB4YmViNDc0MjgsIDB4NzhiNzk2ZTUsIDB4ZWY5NWNiYmYsIDB4NDMzMjVmYWMsCisJMHg0NzJjYjhlZCwgMHgzOWM2OGY5NywgMHgwZTFmMDgzMiwgMHg3NDA3NGU4NSwgMHg1ZjA1MGFiNiwgMHhmYWJlMTM1NywKKwkweDEzNzNmYjE3LCAweGY5ZjBlY2IxLCAweDNlZDliYTQ3LCAweDg4OTcyYWVjLCAweDQwNzFjZGVlLCAweGY5MmEzZjc0LAorCTB4NDEwZWY2OGIsIDB4MGVkNjhlZmYsIDB4NWE1YmNiYjYsIDB4ODRiZTE4YmIsIDB4NTViYWQwNzMsIDB4OGQxMGRkN2MsCisJMHhjMDY3ZjlkZiwgMHgxMzFmZmNlZiwgMHgwMWY0YTNiZiwgMHhhZGZiMDNhMywgMHg0ZTNjMDdkYSwgMHgxMTgwZmY4NSwKKwkweDJiNGNmNGMyLCAweDI3ZTIyNWYxLCAweGZhZTI0YmExLCAweDIxMjBiOTNhLCAweDEzOGZhOWEwLCAweDczOGU1MmZlLAorCTB4Y2FlOWYxM2MsIDB4MzdhYWJiMTksIDB4OTg3OTIxNDgsIDB4MzExZDBiMWMsIDB4MGVkN2NjNDksIDB4YzQxZGFmODUsCisJMHgyMmZmMmFkNywgMHgxMWVhOTYzZiwgMHhjNDlkNmZjZiwgMHgzN2UwNDM3ZSwgMHhmM2MwYmZjNCwgMHgzYmJhNzhhOCwKKwkweDg4MWJhZjFhLCAweGFiYzFhNzhlLCAweGM2MDdmZWI2LCAweGM3ZmEyNzZiLCAweGFmODIzN2E0LCAweDY1Mzc3OGM0LAorCTB4NzdmOWUzNDYsIDB4N2M1NTVlMGEsIDB4N2ZlNDUzNmYsIDB4MjM2ZjNjMzgsIDB4N2Y5ZWE3M2MsIDB4YjRjYjZmM2MsCisJMHhmODkxYjhmMSwgMHg0NTNlY2UxZSwgMHhmNzVkNDdkMiwgMHg3ZTVhNzIxMCwgMHgyZDNhNzIyZSwgMHhkZmY4YWFkYiwKKwkweDQ2MTY3N2U4LCAweGEyNmRmZGQzLCAweGY3NDM1OWJiLCAweDUzYzgzMzllLCAweDRmMjk4ZmNmLCAweDg0OGI3ODkxLAorCTB4M2FiODEyOGQsIDB4M2ZkZmQxMmMsIDB4ZGY1NjFjY2IsIDB4NGUzYzE3OWQsIDB4ZjhkNmNlMGEsIDB4NzViZjkzNjcsCisJMHgyOWIzZmM2YiwgMHhmZDY5NjExOCwgMHhlNTM0OWJkOCwgMHg5YWFkZWIzYSwgMHhhZGE2OTdmNiwgMHg2ZTVmZDRkNSwKKwkweGJmYTlhZjViLCAweDRkMDFmZjMyLCAweDYzYzc2YWY5LCAweGQzZTY3ZTExLCAweGU3N2FmYTlhLCAweDczZjUzNDZmLAorCTB4ZWE2YmI3OWIsIDB4NjhmNGI3ZTcsIDB4ZmU3ODE3ZWEsIDB4NzhhYjI5YWEsIDB4MWMwYWRhZGMsIDB4MzU2YjZkMmYsCisJMHg2NWQzZjEyYiwgMHhmZTAzYWIwYywgMHg4YjgzMTI1YSwgMHhkZmQ5MDcwZiwgMHhkN2I3ZjRhYywgMHhhZmIyNGJiMiwKKwkweDMyZDFmZDgzLCAweGMyOTZhYjlmLCAweGNkOWQ4YWFhLCAweGI1ZjQxMjZmLCAweDJkNzg5NTVhLCAweGFkNWJlMThkLAorCTB4M2JlZmQ2MzYsIDB4ZWUxOWYzNWEsIDB4ZjEyODc1NmMsIDB4NWRjMzI1NWEsIDB4NGUyNTRlYWQsIDB4YjQ4YzMxNzMsCisJMHhiYjY2YWYwYiwgMHgzZDIxNjRhNywgMHg0NGJjYmRhNiwgMHhlOTgwYjgwNywgMHhjMTY3Zjg3ZiwgMHg3N2JjNWE1ZSwKKwkweGRjZTI4ZWJjLCAweDhlNWVjYTM1LCAweGZmYjM3ZjU3LCAweGUzYWZlNDM2LCAweDk1MDcyNmNkLCAweDMxMWZiNzdiLAorCTB4ZjlhMzBhZDgsIDB4MzJiN2VlNjUsIDB4NmNmOGMzMzgsIDB4MGQ1ZmNiNmUsIDB4NDVjZDY3ZTQsIDB4MDg2M2JhMGYsCisJMHhhNTlhOWQzOSwgMHhmNzIwN2U2MywgMHhjYzJmNTAwMywgMHgwNTIxODMzNiwgMHhkOWVjYzFmNSwgMHhmODBkYTM5MiwKKwkweDE4OTIwN2JiLCAweDNmNThkY2ZhLCAweDEzM2UwZjRkLCAweDdhMmRlYjk2LCAweDk3OWUyOTlmLCAweDNmYTMzMmU2LAorCTB4MTMyYzRiM2QsIDB4NTBmMDdhNGMsIDB4NzMyNGE0M2QsIDB4N2QwZDdlOWMsIDB4MzgzY2ExYjQsIDB4YmYxOGI4NjUsCisJMHgxYzNmMjJjZiwgMHhlOTZmNWRmYiwgMHhiZGRkOTAzMCwgMHhmYTJmZTc2ZSwgMHhiODdhYzM2ZiwgMHhmMWNlNTNkMywKKwkweDI1NjI1YzNkLCAweDNlNzkyZGZkLCAweDM3MWE5ZGQ2LCAweDM1MjBiY2JjLCAweDVmMTg1MGUxLCAweDRlMTkyNTRmLAorCTB4ZTFkMWY4YTUsIDB4N2FkYzUyNzcsIDB4OWNmMWMxOTMsIDB4MDVkZmJhMmQsIDB4YzlhNzdlY2EsIDB4YzE2ZmZiMTIsCisJMHg0ZGRlNGRkNywgMHg3MTNlNDg1MiwgMHhiODRkM2I3ZiwgMHgwMWUyMjZjZiwgMHhjMWIzNjdkYSwgMHg3ZTQ0NTc5NywKKwkweGIzZjY3NmY2LCAweDE2ZDcyYTliLCAweDJlOWE5ZDExLCAweDE1MzEzZTkxLCAweGE2OWRlMjg1LCAweDhmZDkyZjk2LAorCTB4OTFjZmQ0OGYsIDB4OTBmMTRjZjAsIDB4ZmU2NTZmYzMsIDB4OTNiYWRmZGIsIDB4OGI4ZDQ1ZjksIDB4NWM3ZDViN2EsCisJMHg2YWI4MGIyZSwgMHgzOWEzZTNjMywgMHhhNjRkZmY5MywgMHg0YmVhYTdiOCwgMHgzYzRjZmYxMSwgMHg1M2ZiZGNlOSwKKwkweGQ1YTA3N2RjLCAweDE3ZTUyZmZmLCAweDlhODJiY2Q0LCAweDViY2M4ODY3LCAweGRlNjQ3YWE4LCAweDZlMDk3NWFkLAorCTB4MmM5YWVmZGMsIDB4OTRmMzA2NTEsIDB4NWVhM2E2NzQsIDB4ZGVkZjU1NDAsIDB4OTc2NTE1OWEsIDB4YmQzYWM4ZWYsCisJMHhmZmQ2ZDY3ZSwgMHg2Y2Y5ZmFjMCwgMHg0ZDMxYmZmOSwgMHhiZTQ4ZDVkOCwgMHgwNWUzMzdkZiwgMHhlNTUzYWQwMywKKwkweDlmZmU0OGVmLCAweGZlNzA3ZDQzLCAweGQ3OTI0ZDM5LCAweGY2N2E3YTgzLCAweDQ0YzM3NjkyLCAweDdkZjlkY2U5LAorCTB4ODhhMGU1YjksIDB4YzJlZDIzOGIsIDB4MzYwN2I2ZjcsIDB4MmI1YzliYTYsIDB4OTI2MTdjNzMsIDB4MWU1MDcyNmYsCisJMHg0NzQzYTU0NCwgMHhjZjNhZGQzNCwgMHgxZmNlYjc0MCwgMHg3NmQxNmU5MywgMHg3M2JjZTBmMSwgMHhmMWEwOGJiMywKKwkweDhhY2JkZmNmLCAweGM4M2UyN2YyLCAweGE5MWZiZDNhLCAweGY3ODFmZmFkLCAweDYzNmIxZDZkLCAweGVmNDQ3MmI4LAorCTB4ZWEyNzU5M2MsIDB4MDE2MjdjNDUsIDB4ODBlZmYyMWQsIDB4NzRiOGU2NTcsIDB4M2M3YjY2NjksIDB4MTk1MDMzYzUsCisJMHhiNzdkMjc4YywgMHhmMjA2NWJhYywgMHhkNGVmNDEwZiwgMHg1Y2ZlNDY4ZiwgMHgxZjY3ZjBhMiwgMHg3ZTI0M2VmOCwKKwkweDdlZjcwNTVjLCAweDI1OTgwOTQxLCAweDIyYWU0YmQ1LCAweDA5ZjRiNzNkLCAweGZjNGYwODQzLCAweDI3ZjM5M2FmLAorCTB4Y2I3ZTk0YWIsIDB4ZGE0NjlkMmQsIDB4YjU2N2YyZWYsIDB4MWE3MWQ0ZWQsIDB4MWZjODhhNWYsIDB4MTlmYTVmNTcsCisJMHg3M2YwZGRiMCwgMHhhNzU1NmZkZSwgMHg1OTc3ZGZiNiwgMHg2Mjg3Mjk3MSwgMHgwODRiMTY1OSwgMHhhN2QyNjdlZiwKKwkweDFiYWVjOTQ3LCAweDViMjdjYWMyLCAweDNmMjBiZjM5LCAweDllMDNlMGYzLCAweGM0ZmEyMWIxLCAweDcxZjE0NzY0LAorCTB4ZjllOWY2NWMsIDB4MjNmZjViNTgsIDB4ZjcxY2IxZjMsIDB4ZjllODkxYWMsIDB4YmY3OGY5N2QsIDB4ZWI0NTk5ZGQsCisJMHhhMGYzZjU1NiwgMHhjNGMzNzlkZSwgMHhkY2EwNjc3YSwgMHgzN2E0ZjIyNiwgMHg5ZTJkYWVmZCwgMHgzODA0ZTRmOCwKKwkweDJhMTYxZDg4LCAweDZhODVkMmY5LCAweDM2OWQ3NGJlLCAweGNmYjkzYTVmLCAweDQ5Yjk3OWM3LCAweDcxNmRiZDA3LAorCTB4YmQ4OWY3NDgsIDB4NTVkYmNlMWUsIDB4NTliNzc2ZWQsIDB4NWRkM2ZjYjAsIDB4YTNmYzk5NGUsIDB4NjRiOTZmZjEsCisJMHhkZmVhYjc1YSwgMHg0ODRlZmVhOCwgMHhiZWIwZTU4ZiwgMHhmNjZiYmNlMywgMHhkNTNiZWJkOSwgMHgzMGY2YWEyZSwKKwkweDA2NTYwZWQyLCAweGZlYzk2YmRiLCAweGUzYjZmODRkLCAweDJiZTc4MjRkLCAweGY3NjkxZWFmLCAweDdhMTM4YmRlLAorCTB4NTdjMWE4ZTIsIDB4OGNmYzk3YmUsIDB4Y2YxYzYzZDcsIDB4YWZmYWY0NDEsIDB4YzY3ZTE2Y2IsIDB4MDMwMmNmNGMsCisJMHgxZjA5MWZjYiwgMHg0NTBjZGJjYSwgMHg3NjRmYWU2ZSwgMHhmNTRkOTc1ZiwgMHg5OWQwYmQ4YSwgMHhhM2IyMDY5ZCwKKwkweDIzZGY3Mjc1LCAweGY5NWYxMmQ3LCAweGRlMWJjZTY1LCAweGJmMDdjNzdjLCAweGNjZWRiNWZmLCAweGViMjY4NWY5LAorCTB4ODYzZmY2NzEsIDB4NzQ5YTMzOGIsIDB4YTJmOGE2ZTAsIDB4NGE1NmQ2YTQsIDB4NmRjNTBjN2UsIDB4ZjM1NDQ3OTQsCisJMHg5ZmVkOTE4YSwgMHhjOGFjZDdiMCwgMHhiNTU3M2NlNiwgMHhkOWViNDlkZiwgMHgxYzMzZDYyOCwgMHhiZTVhOWFiZCwKKwkweDg3MzFlNGQwLCAweGJiYTliZjliLCAweDRjMzBiYWRjLCAweDE2Y2E1ZTNlLCAweGRiZDIyZWYxLCAweGEyMWNjODdhLAorCTB4YzVmMmQ5ZjcsIDB4NjVmOGI3ZmYsIDB4MDkxZTBjOWEsIDB4ZTRhMTZjZWQsIDB4MDgyZmZlMTUsIDB4ZjgwZTc4M2YsCisJMHgyMDgzY2UxOSwgMHhmOTU4Mzc0MywgMHgzODIxNmE3YywgMHgxNzAyMmUxOCwgMHhkYmJiN2NjMywgMHg2MDMzN2M0YiwKKwkweGJlMjQ4ZTA4LCAweGJiZjU3ZmVhLCAweGZlOWJlMjAyLCAweDU3YjYyNzhiLCAweDVmM2JmOWMxLCAweDA2ZmZmNDhhLAorCTB4ZmU3OGRiYzYsIDB4ZGJiZTU3ODEsIDB4NzAzOWZjNDMsIDB4ZjRhY2UxODcsIDB4Njc2NGVhYzYsIDB4ZTQ1MWYxMjcsCisJMHg1M2JiY2I3OSwgMHgwMWQ3M2U2NCwgMHg4Yjk2N2FmZCwgMHgwM2U4YWI3YSwgMHgxYjcyYTQ5NywgMHhlNjRjZDhlYiwKKwkweDFjZGU5MDhiLCAweDM3YWFiNGY1LCAweGMyYmY2MDE3LCAweGQ3YWM3NDRmLCAweGI1ZTQ5OTYwLCAweDgwYWVkMzYzLAorCTB4NzBhYzQ1OGUsIDB4YTY1N2E2NzEsIDB4MmZhOGE3NzIsIDB4OTVlODk5NWMsIDB4MTU1ODVjYjAsIDB4NGE2ZmVhMjMsCisJMHhjNTI2NDJmNCwgMHhjYjk2MDE0MywgMHgwZmFjMDBmOSwgMHg4YmQwODAxNywgMHhmNzkzODIzNywgMHg5NjQxOTE4OSwKKwkweDZmMTdmZDg0LCAweDNlNzA5NzM1LCAweGE0MzkwMjE2LCAweDhlMjg4YmZmLCAweGI3NGUyMjFhLCAweDJmNzkwOGU2LAorCTB4YmVmYTEyY2UsIDB4MTc5YjQ2YjgsIDB4Yzk1YjMwZjksIDB4NGE2YmRiMWIsIDB4ZTc1NjEwNzIsIDB4MWQxMmY3MzgsCisJMHgxYmZjOTM4YiwgMHg3Y2EzMmExZSwgMHhhMTM2MGU5MCwgMHg3NTU2N2Q3YywgMHhhYTc3OWYyYiwgMHgzNWVkMWFmZCwKKwkweGNkYmY4NGJkLCAweGUyYmM3MDEyLCAweDlmNzkzNmU5LCAweDIzOGNlNzEzLCAweGYyY2RjZmMzLCAweGE4MDdiNWVkLAorCTB4N2I1YTExZGQsIDB4YzU3OGYwZjksIDB4NDdmNzFjN2UsIDB4ZDc4Nzk1Y2IsIDB4MWJiMTRjNTcsIDB4NDNmMWZiZTcsCisJMHhlNWNiY2YyNSwgMHhlYmU2NzlmZiwgMHhmODBiM2JmYSwgMHg3ZTQzYzE0YywgMHg3ZGRkYTM3MiwgMHgwNDZmZDc5YywKKwkweDlmZmFkMGIwLCAweDQwMTQ3MTE0LCAweDQ3ZTUwNjczLCAweGQyNjUzYzk3LCAweDExZjE5ZjkxLCAweDAzYzg2MzlhLAorCTB4ZGRjNjFiZjgsIDB4ZTMxYmZmMDQsIDB4Yzc3ZjgyNjcsIDB4MjdlMDk5ZjgsIDB4ZmMxMzNmMTgsIDB4MDRjZmM2MDcsCisJMHgxZTNiN2YxNywgMHg4ZDgwMjI4MywgMHg0ZTRiNGUzOSwgMHgzMDFjZTg3OSwgMHgxYzg2YmQ3MiwgMHhmOWMxY2Y4MSwKKwkweDdmM2M4ZGJiLCAweGY4Y2RkZDlkLCAweGViZjdhNDFkLCAweDk5NzNhNWUwLCAweDBiYzE4OWNkLCAweDZmYzM0ZTkyLAorCTB4ZjBkZmRkMDMsIDB4Nzg3MGU5ZjksIDB4MjMyNWNmNTEsIDB4ZTg1M2JmZWIsIDB4NjdhOWQ0NWEsIDB4MTVkNDVmZmIsCisJMHg2YjA4NmY4OCwgMHg5MThlNDE3NywgMHgzOTVmMGJlYiwgMHgxZmUzNGYxOCwgMHhkN2UyMGViNSwgMHhhNzk2ZTEyOSwKKwkweDgyZjk0NGU5LCAweDA4MzMyZDY3LCAweDY3NzY3NWJmLCAweGU1MWJlZDA5LCAweDUxZjY4MzNjLCAweDgzYzFmNWQ0LAorCTB4N2M3OGNiMTMsIDB4NzVhMzY0YWIsIDB4YjhlNTFmMDQsIDB4OTExZjYyMjEsIDB4YjVmNzUwNzgsIDB4ODFiZmQxMzksCisJMHgyNTdlNmZmYSwgMHg3YTgyNzY4YiwgMHgxMGRjODQwNywgMHhlZDQzNDkxZiwgMHhjZmYzMmQ3NywgMHhjY2IwNTM3NCwKKwkweDdlOWRlYjhhLCAweDBhMWU2ZTRhLCAweDI5ZjY3NWZmLCAweDU0NzdlNzhjLCAweGM3Y2Y1MzdlLCAweGU5NTJmZTE1LAorCTB4MWRmMmFlNzYsIDB4NmI5MDFlMzksIDB4NmFlNzdlODQsIDB4YjIzNmE1ZDIsIDB4YzllMzI3NGIsIDB4ZWU1N2FjMmYsCisJMHhlNjc1NzQxOSwgMHhmNGZiNDdiYywgMHg2ZWMxOTRlYywgMHhjOGQ2M2U2MywgMHg1Zjg1NjJkZiwgMHg2ZGQ4NTg1NCwKKwkweDM2YmQxMTc0LCAweDU5Y2ExZjc3LCAweGU0ZmE2MTY0LCAweGIzZjZjNjJjLCAweGJjOWFlYzcyLCAweDg5ZDU2MTY3LAorCTB4ZTE0YTFmYzcsIDB4ZWE5YTU2ZjYsIDB4Y2ViYTc4M2EsIDB4NjBkZmUzOGEsIDB4NmQzNmZlZGUsIDB4OTNmNWFlNjksCisJMHhjZjJjNDRiYSwgMHgxMDc2OTM0ZiwgMHg5Y2NiNjA1YywgMHhlNWEzNjQ5YSwgMHgzN2ZkNzk3YSwgMHg0MWQ5NGZlNiwKKwkweGEzOTU3NTIyLCAweDI5YjlmZDllLCAweGVjYzI2NGE0LCAweDk2MzlhZDQzLCAweGNiMDcxZjBlLCAweDRkNjRkNjc1LAorCTB4MzFiNGQyZjksIDB4ZGI5N2Y2OWEsIDB4NTdmNTM1YjIsIDB4ZDRkMzhmZTYsIDB4ZTU1ZWYzYWIsIDB4MmJiNGQ1MjgsCisJMHg1MTY2MGE0ZSwgMHg2MGZiODc1YywgMHg2NGU3ODBiOSwgMHg3ZGEyNWRhZiwgMHgxYzYyYmVlZiwgMHgzZjNkYTc5NiwKKwkweGNhNmU0MWNiLCAweGRhN2VhNTY2LCAweGQxMmY1YTk2LCAweDY5ZjEwMDYzLCAweDcwZWE4NzQ0LCAweDFmNDdmYWU1LAorCTB4ZTIyMmMxYTIsIDB4NjdlZWM2ODYsIDB4ZTc2ZDM4NzYsIDB4MTMwYzM3MTAsIDB4NzEwMGFjMmYsIDB4ZGM1YzNmOGUsCisJMHhhMDJmMTkxMCwgMHhmNDkwN2NmZSwgMHhkN2FiZjE2NywgMHhkYzcwZGI1OCwgMHgyZTI3NTVjZCwgMHhlZjNlZTFiMCwKKwkweDgyMzhjMWNjLCAweDQ3MTI4ZGVjLCAweDgzM2ZjNzBjLCAweDA0ZDkyMjcyLCAweGYwYzhmNGZmLCAweDAzZmMxMGRjLAorCTB4MWY4NTBiZjAsIDB4M2VmNjljMDUsIDB4ZGYwNTMzZmEsIDB4NGE3ZGJmNWYsIDB4MDdmMzhkZmEsIDB4NTdlZmM1MWUsCisJMHhhZmJlNDQ2MCwgMHg2Zjc4ZThkOCwgMHhkZWE3ZTUwZCwgMHhmOWNlODE5MSwgMHgwM2FlMjRlMSwgMHg3N2U4MWJlYiwKKwkweGIwZjdjNDM5LCAweDQ2YmJlOWU4LCAweDBmNzdmMGE3LCAweDk0YWJhNmI5LCAweDczMWZkZmZjLCAweDcxYWFiZjE0LAorCTB4Y2JhMzVkZmIsIDB4ZjM3MGY1NDIsIDB4NzBmNjlhMjcsIDB4YTZiNzc0YmIsIDB4YjZhNjY3N2MsIDB4YmI5NGVmN2MsCisJMHhlNzBmZmJjMywgMHg1YzZjMzU5NywgMHg5Y2EzNzQ2MCwgMHgzOTJjM2MzNiwgMHg4YmU4NDNiZCwgMHgyOGE0ZjVjMSwKKwkweDA5N2JhMWZhLCAweGRiNDNkYmViLCAweDcxNmQxOTk3LCAweGUxNTdlZGQxLCAweDZjYjc5NDc4LCAweGFhZGVjNjE4LAorCTB4MTkzYWVhN2EsIDB4N2ZhYTg3OWEsIDB4NzFjZjlkNDcsIDB4MDhmYmU3N2UsIDB4Y2RmNjRmNzEsIDB4YzNiMDlhZjMsCisJMHg4ZGI4MjUxZiwgMHgyZmIyN2NlMSwgMHhmNDdiOWM0NywgMHgxZGMwZjYzZiwgMHhlZTc5ZDM1ZiwgMHhlYWJlMjJlYiwKKwkweGEzZjYxNDRmLCAweDlkMzNmM2E4LCAweDA4ZjE2MTBlLCAweGQ2NDU1ZmMxLCAweGQyZWM4ZTgwLCAweDBmNThkMmMwLAorCTB4MmQzNTljYTAsIDB4OGFlOGYzOGIsIDB4N2UwODhmYzksIDB4NWU0ZjFlNjgsIDB4OWEwZjJkYzcsIDB4ZWIxZmNlOTEsCisJMHgzY2JiMWE3NCwgMHg5NjE2YzE0MCwgMHhkOWZkOWVmYiwgMHhmN2U5M2I4YywgMHhlOTJmNzEwMiwgMHgyZmIzZWQ3YywKKwkweGFkN2Q4NDA3LCAweDFlNjM3YTExLCAweGI3NjI5ZmYxLCAweGQzNTY1NTAwLCAweGM3NjgzMDVkLCAweDVlMTBjZjQ4LAorCTB4YmY2YjljYTgsIDB4Yzk4N2ZkZjUsIDB4N2ExMWVmY2YsIDB4MzcwYWYyODMsIDB4YjRlMDVmYjAsIDB4MWQwZGYzNjgsCisJMHhiYmY4ZTcyYywgMHhkNzNlZmMyZCwgMHhiNzhmZWI1OSwgMHhmMzk2OGRkYSwgMHhkODQ2NDdhOCwgMHgyMTg3NzliNSwKKwkweDU3ZmJjNWY0LCAweDVlOWIzZDIyLCAweGQwNWVmOTk3LCAweDA0ZjZhZGIxLCAweDkxMWZkMzA4LCAweDI4ZGE2Yzc4LAorCTB4ZTVhYjljYjMsIDB4Y2JlNTViYTMsIDB4ODMwZjZjYmMsIDB4ZDE4NWY1MTksIDB4ODNhNzA2ZjgsIDB4NTViNTdmZTUsCisJMHhkMjdhYjdjYywgMHg0ZWM4MzMzNywgMHg4YmQ2ZWVhZiwgMHhjZGMzMmY0YiwgMHg1YjA2NGViMywgMHhiNzliM2NkOCwKKwkweDVkOTI5Njk5LCAweDYwM2ZkNzUzLCAweGY3NDlmNDU1LCAweDBhNTM0OTU3LCAweDg0M2I1YzA0LCAweGMwYmY0NTdkLAorCTB4NDE3ZTQyOTAsIDB4ZWNmMWM0YmQsIDB4MzU1MWVlOWUsIDB4MTIzZGE3ODQsIDB4M2MyNTZjZjgsIDB4NWM2NjM1YzQsCisJMHgxYzMxNGNkZiwgMHg1ZTUwYjc3ZCwgMHhmOWYyZDIxNCwgMHhkNzFhYTU5ZSwgMHhhY2VjZjFhYSwgMHhmMjc2NTllZSwKKwkweDVjZWMzZjYzLCAweDA3MjkwN2I4LCAweGNjZDllYzkzLCAweDg3ODJkNzRmLCAweDg5M2RlZWZkLCAweDkzY2E3NGFlLAorCTB4M2ZlZTUzNGMsIDB4ZjYwYzQ5ZWMsIDB4NjdiZGJmOTEsIDB4Zjc0NGFjNTIsIDB4M2JmYzcwMTksIDB4NWY3NTdjNjksCisJMHhmNGFlMGM3YiwgMHg5Mjk3ZGU2NiwgMHg0NGZlNzUyZiwgMHhmNjdiMTUzZSwgMHg2N2FhYTI3MSwgMHhhN2RiZTRlYiwKKwkweGY3ZTc0OTVjLCAweGYxNGFjMDczLCAweGY4NTk3NGVjLCAweDIxNDdmMGQ1LCAweDZkNWVhYWNmLCAweDZjNDlmYzkyLAorCTB4YTYzM2VkYWEsIDB4YTM0ZjExZGIsIDB4ZTRhOTdlNWEsIDB4ZjczNWRiN2QsIDB4YWZkNmNmMDAsIDB4NWZhMzhjMWUsCisJMHg1NjdmOTg5NCwgMHhiMWJjNDQzOSwgMHg0N2YzZmFhYSwgMHg1N2Y5YzVhZSwgMHhmZTRmYmM2MSwgMHhlZGFlYzJkZCwKKwkweDkxN2YwOGZiLCAweDdjNjBmZGYxLCAweDdiZTYyZmY1LCAweGQ3MzNlM2EzLCAweGNkZGZkYTMyLCAweDczZGYxYzc3LAorCTB4NjljNzQ0MmQsIDB4ZWE4MTcxODMsIDB4Y2IxNzNlNWYsIDB4NThhOGQ2ZTcsIDB4ZmMyODdjODUsIDB4ZWU1YjY0N2EsCisJMHg3ZjU4MzVkZSwgMHg2NjA2MmZlNCwgMHhmZDI3MzdkNywgMHg1OGFkZThlYSwgMHg1OGI5ZjliZSwgMHgyNDkxZjNjNiwKKwkweDM5MWQ5MGYwLCAweGViY2YyOWIyLCAweDc0NGIwNmMxLCAweDZmYjI1ZWMxLCAweGNmOGUyNWIwLCAweDMyN2IzZTY5LAorCTB4NTEyZmI3ZWYsIDB4NzZiN2YyN2UsIDB4N2U0ODQzZjYsIDB4N2NjMmU4NmMsIDB4ZTg4ZmY3NDYsIDB4YjlhM2NiZmIsCisJMHhiY2M1YjgxZiwgMHhjYTVjOGEwZCwgMHg1ZmRlMTQyZiwgMHgyNDJmZjU0ZCwgMHhhNTQyN2U3MywgMHg2MzI3ZTFkZiwKKwkweDdkYWMxNDljLCAweDJiMjJiZTA1LCAweDkyZTdkZWIyLCAweDViZGQxMGU3LCAweDY5N2JhMTVjLCAweGY5N2M4NGJmLAorCTB4MDZmNzA4ZDUsIDB4YzdmMmY3ZGEsIDB4ODljM2YzZmYsIDB4MTdkYTlmYjgsIDB4MTU1NWZlYWUsIDB4MDdkOTZmYWUsCisJMHg4NGUzNDBhOSwgMHhkZmI0M2FlOCwgMHhiNjZiNmM3MCwgMHgzZjA1N2Y5MCwgMHhmMThjNWUyYiwgMHgyN2QzMGMxZSwKKwkweDM1MTIzYjJiLCAweGQxYWVhNmU1LCAweDdhNjE4M2RlLCAweDcyOWVmMDY4LCAweDA0ZTdjNGEzLCAweGVkNWM4YThkLAorCTB4ZWRkYmJhMzcsIDB4ZmJhNWQ3OTQsIDB4NzEzZjRjYTksIDB4Y2U4NGI1MWYsIDB4ZjdmZjA4YWIsIDB4OTFmZjE4OTksCisJMHg1ZGEyZjY3YywgMHhmMzU2NjczOSwgMHg0ZTYwYzkzYywgMHgwYjc1YjkyMywgMHg5N2RjMGRmYywgMHgzMWUyODliNywKKwkweGYxNDkzZDlmLCAweDMzYjk4MjNiLCAweGIzZjljMzBhLCAweDljMWJkNTc3LCAweDdiODkzMWU3LCAweDlmNDMzMThmLAorCTB4MTNkYTc3ZWIsIDB4Zjk4MzdkYjksIDB4Njk5ZTRkNGIsIDB4NGQwOWNiNTUsIDB4MDE1NTY3ZmUsIDB4ZDI1MDFmYjAsCisJMHg4OWJkMmI2NiwgMHhiYTE0ODdjZSwgMHg3YWVlOWZkYywgMHhmMWRlZjE4ZCwgMHgxOGJiYWJjMCwgMHhmMmRjNGY5ZiwKKwkweGQzYmJjZDMxLCAweDVkODNmNGMyLCAweDExMTYzYzRhLCAweGJmOTgzNTZmLCAweDY5ZWZlNDUwLCAweGU4N2U3ZjhkLAorCTB4OTQ0NWJkYjEsIDB4Y2FmNDM4ZmYsIDB4ZDNjYTIyYjgsIDB4ODdmZDk0MmUsIDB4ZjdjOTlkN2UsIDB4ODZkZmY2OWMsCisJMHhmN2NlY2I3MCwgMHhiOTFlMmYzOSwgMHgwYzdiYThkZSwgMHg4ZDQzZDA5MiwgMHhiYTY0OGZiNCwgMHhjNzdhZTNmZiwKKwkweGY0MmU3MmNlLCAweDg1MGQ4MWMzLCAweDFmMzUzZjhjLCAweGU4NjQ3MDNkLCAweGE3NWQ1MDc4LCAweDNlYmFiZTNhLAorCTB4ZGRiNTdjNzUsIDB4NWYyMmVjZGYsIDB4MTdmNDZmZDAsIDB4NDE1ZmZkOTEsIDB4ZmI2MTMwZTcsIDB4MTdmNzhmZWEsCisJMHhiYmU4NWEyNSwgMHg0OTEzZjg1NSwgMHhiN2UzMGU1OCwgMHgyYWJjZjU3ZiwgMHhmMDZhN2NmMiwgMHg0N2M5NTY1YywKKwkweGZkYWRkM2VkLCAweGFmZjkxMTk5LCAweDgzMjFlM2FmLCAweDdlZWY1YzNiLCAweDc1MmE3M2NmLCAweGRhZmRlYWJkLAorCTB4ZmQ4NWFiN2UsIDB4MjU3NjkzOWIsIDB4ZTkwZTlmMWYsIDB4MWRlYjBlZDQsIDB4YjdiZmYyM2UsIDB4YzdlNDFjOTgsCisJMHg5MDVjOWEyNywgMHgzNDY5Zjg4YiwgMHg5YWZlZjhmYSwgMHhlNGQxMmZkYSwgMHg3OTkxZWZlNiwgMHgyMzQ0ODFmOSwKKwkweDgxZTViZGQwLCAweGY3ZmNlNTU0LCAweDQyYmQ2MDJiLCAweDljMTZlODcxLCAweGQ3NTZhY2I3LCAweGQyMTJjNWJjLAorCTB4MmNmZWFhODcsIDB4MGJkZjg3MWIsIDB4M2VhOTFlZTgsIDB4ZGYyMDI3ZTQsIDB4ZGI2YjE1OTQsIDB4MmRhM2Y2ODcsCisJMHhhMGFlN2JmZiwgMHg2ZWIyNTk2MywgMHgyNGI5MzhjOCwgMHgxYjY1Yzg1NywgMHg5ZTQyYzg3NCwgMHhhODlkMWQ4NSwKKwkweGJmMGQxZGUwLCAweGFjZDdlZTFjLCAweDQwZmNmNDUyLCAweDA3NDNkOWJjLCAweDhhYjcxM2JiLCAweGY1MTNhYjdiLAorCTB4NTEwNGVkYmUsIDB4MTI0YjQwMGIsIDB4ODlmNDk5NWQsIDB4ZmFiNGJhZjEsIDB4MWNjODZjOWMsIDB4ZDhlM2NiYjYsCisJMHhjODUwNGYyZSwgMHhjY2Q0Yjc3ZCwgMHhmNzQzNWJmNywgMHhjMTMyZmQ1YywgMHhkMGM4MjE4YiwgMHg0MTNkNTYwOSwKKwkweDRiYzMwMzI0LCAweDJhNzBjNWMwLCAweDBjYmMzMzM0LCAweDAxNWUxOWRhLCAweDAyYWYwYzFkLCAweDg5Zjg0MzNmLAorCTB4MWVkODBkYWYsIDB4ZmY2NTZlZGMsIDB4M2EyNWYyZTksIDB4ZDc2NWNiYjIsIDB4Y2Y5N2VkMGUsIDB4M2MzNWYwNTIsCisJMHg1N2NiNTAzZSwgMHhhNjNlM2I5YywgMHg4NzcyZjcyYSwgMHg3Y2Q4Y2JjNSwgMHgyZjE1N2JlNiwgMHhlYzRmZTIyNiwKKwkweDM0ZGUwMzE3LCAweGMwMjA5MzgyLCAweDQ2MjY0Y2UzLCAweGRkNzhhNmNlLCAweDZiN2VmN2M2LCAweGJhZTVjOWMxLAorCTB4NjU0N2M0YjMsIDB4MTc3N2FkYzAsIDB4ZGE5NzgxMGMsIDB4OWU2NGY5YTEsIDB4YjkwMzI3YzIsIDB4ZTk1MWY4YzAsCisJMHg4ZGFlNDhmNSwgMHgzMGRkMmFjYiwgMHg3YjIzNGM1MCwgMHhjODRmNGQxMCwgMHhjNTk2NzVhMCwgMHhhN2E3MWNkNiwKKwkweDVmM2ZiNzIyLCAweDdhOGY1MzM2LCAweDY2YjRhY2I0LCAweDVmOTBhOTBkLCAweGU1MTU0ZWU2LCAweGQzMmYzNTg5LAorCTB4ZjNmYjdkNTEsIDB4NzE3MjhhOTcsIDB4ODFjMWE5NGQsIDB4Y2JkYWU4NWUsIDB4ZmE4MjVlNjYsIDB4MjdkY2FkZDksCisJMHhhMDExYTMzNywgMHhiNjcyNjM3YiwgMHgyYjc2MTczOCwgMHg3MjRkY2FmNywgMHgyZmJhNWFlNiwgMHg1ODBkYmE2NiwKKwkweDAwNjNiOGRmLCAweDIyZDdlY2ZjLCAweGI4YmM5MWI3LCAweGIzN2IxYzQ1LCAweDNhYWZkMDU1LCAweDJlNGI3ZGQ2LAorCTB4MmZiMzMzZDksIDB4Yjg3NDg2ZGUsIDB4MjhkZDZkNzksIDB4MThmNzliYjIsIDB4YTQ5ZmY4YzUsIDB4ODFiZGM2ZGEsCisJMHhjNDk5MzJmOCwgMHhiZjc1NTZiZCwgMHhjMTg5ZWY1OCwgMHhhZGIyNDA3MiwgMHhhZDBjYzk2OSwgMHg1OWM3NWQ0YiwKKwkweGU5ZDc3YmNjLCAweDc3NGZjZGU2LCAweDAyM2QyMDZmLCAweDE1YzcwNzM2LCAweGJlZmIxNDYzLCAweDM0YzRjYjY1LAorCTB4MWQ3MDMwZjQsIDB4MjA0NzVlNTYsIDB4MGI0ZDc3MmUsIDB4ZWU5MWRkNTYsIDB4MWJjNjg0N2EsIDB4Zjg3YzEzODgsCisJMHg3NTI5ZDEwOCwgMHg3NWNiZTg3OCwgMHhjNDNiOTQzZSwgMHhkZmI1ODFmNywgMHhiZDIzZWFiYywgMHgwNDJlMjlmNCwKKwkweGFlNGRmOWM3LCAweDQ3NWE3MWZiLCAweDUxOTAyZTkzLCAweDQ1ZmJmNDhhLCAweDA1MDA3YTJjLCAweDkwOTZiZTIxLAorCTB4MGYxMDczOTgsIDB4MWFmMDRlNmQsIDB4Nzc5NDVlNTksIDB4OTlmOWNhMzYsIDB4OGIwMzE3MmEsIDB4NGZjNDNjNzEsCisJMHg4YjU1Y2I5OSwgMHhjYzU0MjJlZSwgMHg2MDkzN2U2ZSwgMHgxNmJkYmJhNSwgMHgxNzllNjg2YiwgMHg3MjRkM2Q2OCwKKwkweGU0Zjg4MWIwLCAweGM2MDdlMjY4LCAweGM3NmU1OTRmLCAweGY0NTRmZTBhLCAweDllYjZmNzU5LCAweGEyODhjNmRiLAorCTB4YjJlNGMyMGIsIDB4YWY4OWRiNjksIDB4NmY3NDg2ZmYsIDB4NTA3MTY2M2EsIDB4M2UzYzkwZjMsIDB4ZTc5YzQ2YjYsCisJMHg0NmZhMzQ1YSwgMHg1ZDA5ZDM5NSwgMHg5YzM4M2UyNiwgMHhjNWEyZjViOCwgMHgwN2QyNmVkNCwgMHhiN2E0ZDliZCwKKwkweGRhMDZmNzI3LCAweGU4MWU3ZGM4LCAweGM4NDYzYmRlLCAweDdmZDdlYTg5LCAweDdkOGI5ZDIzLCAweGZjOGNjY2Y5LAorCTB4ZjkxMDQwOTEsIDB4ODM5YzVlMjMsIDB4OGFmNGZjNzMsIDB4YWQ1ZjA3MzgsIDB4ZWNhOTNkZTQsIDB4Nzg4YjdkZTEsCisJMHg1NzNiOGQ1NCwgMHhkZTJkYmNmNiwgMHg2ZmYwNzk4NSwgMHgxMjJiYmQwNSwgMHg3MTNlOTY3ZiwgMHg2ZmM0NTVlMywKKwkweGQ0OGJlZjkxLCAweDY5NDliNDc4LCAweDdiZDdhMmI3LCAweGYyMjdlZDM3LCAweGM1MTM1MWJkLCAweGJmYzM0NWEzLAorCTB4YTI3YTZhMzcsIDB4YzhkMWUzOTYsIDB4YjliZDQ2ZjcsIDB4YjE0YWZlNGEsIDB4YTFmOGEwOGYsIDB4YjQzNjk0NGIsCisJMHg4N2M3MGIzZiwgMHhmNzA5YWY0NiwgMHgzNWM5ZmFiNiwgMHhkMzk1MmIwZSwgMHhjN2Q2MGUyZCwgMHhlMTBlM2Q1NywKKwkweDY0ODllMWVkLCAweDllNTUxOWU2LCAweGQ4OTNhZDk3LCAweDVhZjE1NmJmLCAweDQ5YzliY2ZjLCAweDdlN2UyOGViLAorCTB4ZThjZGZiMTQsIDB4ZTk3YjhiZWYsIDB4ZGU5MTNlNGEsIDB4ODM3YmQwMTIsIDB4MmNjMTg5Y2QsIDB4YjliYTY3YmEsCisJMHhmZTQxZGYzYiwgMHg5ZDVhMWZmOCwgMHg2ODQzMGZmMCwgMHg1MDNjNmE3ZCwgMHg0YjU0YmYyNywgMHgyZDhlODdlZiwKKwkweDNmMGIzOGMyLCAweGE2NzllZWFkLCAweGQ1ZTU4Y2NkLCAweDEwNTVlOWViLCAweDEzZjM4NGE1LCAweGRmMmFhZmM4LAorCTB4YzY5NzgzMjksIDB4ZDU0M2VmMDEsIDB4MzkxNTNiMDgsIDB4YzBlOWE1MzcsIDB4MTg4Zjg2MTYsIDB4MGRiMDA4ZGIsCisJMHgyOTMwMGY5MSwgMHg0ZmNkOGJmNCwgMHgzOWM3ZDRkMiwgMHg0ZmY0ZDAyZSwgMHhkNGQyY2NhOCwgMHhmNzg4YzViNywKKwkweGZhNzFlMDMyLCAweGVmNDIyYTBiLCAweDNmOWQxMjQ4LCAweDAwODNmNGQxLCAweGJkMDhhZGZlLCAweDdlMjdiOTE3LAorCTB4NGY3ZTRlZWEsIDB4M2NlMDZmZTIsIDB4MjU2NWYyNDUsIDB4NzkyNmY2OWEsIDB4NWRmYzRjYWIsIDB4NDM1ZWE1ZmQsCisJMHhhNjUyOWZjZiwgMHhiOTU2ZjExYiwgMHg5YzFjZmQxYiwgMHhiNjlmNDI2NywgMHgwMWUwMjYzZSwgMHg1YmIzMTdlYSwKKwkweDk4NGJjOWFmLCAweDg1ZjJkYTZjLCAweDYyOWU0YTc5LCAweGU0ZDU4YzJjLCAweDJlZjEwNjI5LCAweDYxZDhmZWY4LAorCTB4MDU0NWYzMWQsIDB4YmFhYWZjZTQsIDB4MDA2Y2YwOGMsIDB4NmYxYTJkYWYsIDB4NWRmODQwYzcsIDB4MWM1YWM2YzcsCisJMHg0MjZhOTZmNCwgMHhjOTMyY2JjZiwgMHg4YjRiYWE0MSwgMHhiNWIzNTFmZiwgMHhkNmVkMWZmOCwgMHg1MmNjN2JlMiwKKwkweDliZDNiZTJkLCAweGIwYmVmOGI1LCAweDRjZDc4YjQ1LCAweGQ5NmYxNjhmLCAweGRhNjgyNmViLCAweDM0NmJkYmRiLAorCTB4NTc4ZGJjZTUsIDB4ZTQ1ZmRhNjgsIDB4OGYyOWExOWQsIDB4NGQ3YWYxN2IsIDB4ODU4ZWMyZmIsIDB4YWVlMmZhOWEsCisJMHg5NTdhOWFlNSwgMHg4M2UzODZjZiwgMHgxMWQ1YmVmMSwgMHhkZDAzYTZmYywgMHg3NGEwZjg2OSwgMHhmMzM1Y2ZlNywKKwkweDlmZjQ1MGZkLCAweDA1ZThhNzlmLCAweDJiZDdmZTg1LCAweGY4ZGRlNTc2LCAweGI4OTJmN2MzLCAweDdhMTU4YjRlLAorCTB4NTBkZjMwNzAsIDB4ZWU3OGUwNmQsIDB4NmQ3MjViM2QsIDB4YzUwNWU5MWMsIDB4N2IxNGI5ZGUsIDB4ODk0ZjM5MDcsCisJMHgxZDk0NTViMiwgMHhhMmJmNzE3ZSwgMHgzNmFiOWY2NCwgMHgyY2Y3NDZkZSwgMHg4YThhZmRjNCwgMHgwOWI1ZWRjMywKKwkweDFkZTIzZWQ0LCAweDQ5NGFmNGQ2LCAweGY5MWRkZTczLCAweDY3YTY2YjJlLCAweGQxMjA5Y2FkLCAweDNmNzE0NGJkLAorCTB4ODQxZWYyMzEsIDB4ZGVhYjNlZmEsIDB4MjczOWEzMTksIDB4OTZiZGVlMWYsIDB4NzhjMjVmOWEsIDB4MmYxNDhjMDEsCisJMHgzZWZjY2NlOCwgMHg3MjFmZGEzMSwgMHg1ZmQ5OTQ2YywgMHhmNmZmYjM3MywgMHg3OWNkYzk2NywgMHhmZWNjNmJhNywKKwkweGVjZWZlMjBjLCAweDc5ZjVlZWIxLCAweDNhYTNiNzg4LCAweDNkZmQ4ZDg3LCAweDAwZDZmZGU1LCAweDJmZGY4YzZkLAorCTB4M2NhNGNjZjUsIDB4YmI4NjAwZTksIDB4ZGZkNGQ3OTQsIDB4YmQyNjYzYjMsIDB4NWJlNWM0NWIsIDB4YWMyMjE1MDMsCisJMHhlNjhmM2ZhNiwgMHg3MWE0MWZiOSwgMHhiYmQ2NDgwZSwgMHhiYmVmYjE0YiwgMHgyMGNmM2UxMywgMHg3M2EyNjY3YiwKKwkweGZmM2UxMmZlLCAweGZjMmYzODdlLCAweGVlMTQ3YmZjLCAweDQwNmRmNTBmLCAweDc5ZjBmMzY3LCAweDhlMjVjZmVlLAorCTB4YzFhNzNlNTMsIDB4NzdlNGMyYWEsIDB4NGY3OTQxOWQsIDB4YjliNmUyMmEsIDB4YjhkNGJlMGEsIDB4ZmYzMjhlNmQsCisJMHgyOTYyMWMwMSwgMHg1ZGI5ZjNlYSwgMHhhY2JjNjY3ZiwgMHhlMjUzZWI0OCwgMHgxNTg3NjZiZCwgMHhhYzcxYmZjNywKKwkweDdiZWY4NGE1LCAweDIyMWQ0YjM5LCAweGI4ZTM1N2RlLCAweGIxZjdmMjMxLCAweDg3YmE2N2IzLCAweDg4ZWQyMmI1LAorCTB4OTc4NjllMjYsIDB4NTdjYzg3OTIsIDB4NDJjNWU2NDYsIDB4MWZlMzE2ZmIsIDB4NzZjYjFmNTgsIDB4NzRmYWMwZTgsCisJMHhjNjg2M2ZjZSwgMHg4NWY5Y2EzZiwgMHhmYmRhY2RiOSwgMHgzZTViZjNkZCwgMHgwMmRmZjBkMiwgMHhmYTlhMjdjZiwKKwkweDMwZDA0YTQwLCAweDc4MWZmNzA2LCAweDFiZDRmNDc1LCAweGFmZmQ3ZjEwLCAweDllMjgyYTk4LCAweGU0ZjViYTQ1LAorCTB4MGZjNjg3OTUsIDB4ODk3Nzk3ZGMsIDB4YjRjZTFiZjAsIDB4MWQ3OWNmY2YsIDB4NWFmZGNhYmQsIDB4NWJmYjlmNzUsCisJMHhkMDM5NzFmNywgMHhlZmI4ODgxYSwgMHhiZmM0ZDFlNCwgMHgwOWZlMzQyYSwgMHgwZThmYzlmMiwgMHg0MzFjMjM0YSwKKwkweGU3NjY3M2U1LCAweDU3YTkzODhiLCAweGFiZGE3Nzc5LCAweDU1ZWQzYmJjLCAweDJhZjY4OWRlLCAweDk1N2I0MmVmLAorCTB4YmJlYWExNzcsIDB4OWMwOTVlZGQsIDB4OGU2NGJmNzQsIDB4ODE2YTdhZTQsIDB4MGY3NmVmYzQsIDB4OTY5YjNlZDEsCisJMHg1ZGU4OGIwNywgMHg2MDcxNTM2MywgMHhiYmYzMjQ5ZSwgMHg3ZGY0MjNkZCwgMHg0NWJiNzc4OCwgMHg2OWY0OTU5MiwKKwkweDZlZjQzNWVhLCAweGNmMDhmMGY3LCAweGQ5ZDhiMjUxLCAweDUwZDc4OWY5LCAweDI4ZDg3MGJjLCAweGM1ZjRhM2U0LAorCTB4N2JkMjY2NmYsIDB4ZGQ1M2M3YmQsIDB4M2ZiZjg5YzcsIDB4ZjMxZjY0OTUsIDB4OWYxMmViZjMsIDB4NjAzMzgzMmIsCisJMHhlZjE2NzE5YywgMHgxM2NiYmY3YSwgMHhmMzI3MzRlNywgMHgwYTg5YjljNCwgMHhiZDBiZTY0NywgMHg5Y2IwNGE1NiwKKwkweDJlNmY3MmU4LCAweDY4ZGFiYmJmLCAweDM4NTc3N2UyLCAweDc2MTc1MzlmLCAweDdkZjIyMjFmLCAweDRkMWZjOTVjLAorCTB4NmExZmQyM2UsIDB4NWYyMTI3ZGUsIDB4YmJkMzM3OWMsIDB4Y2E2NzVhMzksIDB4NmVmMTI2ZmQsIDB4YTBjZmUwMmUsCisJMHgwZjc0NzY3NywgMHhiZGYyNDVjYSwgMHgxZGUyOWMxYiwgMHhmMGE2ZGU1ZSwgMHhmOTA5MzBmNywgMHg0NWJkM2RjYSwKKwkweGI3YTc3OWEwLCAweDdlYzBlN2IyLCAweGU1YWYyN2QyLCAweDUzZjM5M2I5LCAweDU2YzdlZjQzLCAweDdmNjc2ZmM2LAorCTB4YzZkZjIwYWYsIDB4Nzk3YWUyZjMsIDB4ZWUxN2E4ZmYsIDB4Yzc5Y2ZhMjQsIDB4N2U1NjYxN2MsIDB4ZDdmZmY0NzksCisJMHhmNWJjMzg2MCwgMHg1YTNmZjYyZiwgMHhmNzdhMTk5MCwgMHhhZGRlZjYxNiwgMHhhZjJjM2YyMCwgMHgzNDNmYWVhNywKKwkweDQyZTVlOWNlLCAweGU1YTk3YmNkLCAweDkzZGQ4ZjQzLCAweDc0ODY3MjRiLCAweDU5NDhmOTExLCAweDg4NjMzZjlhLAorCTB4MDVmM2QzZmUsIDB4Nzc0ZmVmZmQsIDB4OTdmOWEwNGQsIDB4NjBiYzhiMzcsIDB4NmZkYTZmODgsIDB4ZGNlODk4ZjksCisJMHgzZWYyMTk2MywgMHg3MjNmZGFiZiwgMHhmNWI3MmI5ZiwgMHg5ZjcwM2UzMCwgMHg2MTdmNjhmMywgMHhmMDhjYmNmYiwKKwkweGJmYjNlZWE1LCAweDA1YTNlZjdiLCAweGRmZGY3M2I2LCAweDZlNzc3ZGY3LCAweDZkNzE4MTFhLCAweDc2Nzk1MGQyLAorCTB4N2U2MTNlYjQsIDB4M2ZlZDQ5OTksIDB4OGZlZGFmNTYsIDB4YjFlNTM5MGUsIDB4ZDFkZTQ4YmIsIDB4ZTI1NGU5NmYsCisJMHhjNGNiYjIxZSwgMHhlZTVkYWExNywgMHgyOTIwZTI1NCwgMHgwMmVkODNiMCwgMHg3MTcyNGJjZCwgMHhmYjYxZTRiNywKKwkweGRhM2JlNmE4LCAweDk0N2ZiNDI0LCAweDYxYWY3MDU3LCAweDY4NWYyMTdiLCAweDc3NWYxMDcxLCAweDQ5ZjllZjIyLAorCTB4NThjZWY0MWUsIDB4YzQ0NzczY2UsIDB4NzU4YjNmZDcsIDB4YmM3ODQ0ZGYsIDB4YTMzNWFmZjksIDB4ZjJkZWZlMjgsCisJMHgzODk0MmI5NywgMHg3MmFiZDg0ZSwgMHg2OWNiM2Y4NSwgMHg0MTQ3ZGE3ZSwgMHg5OTZkZjMwMiwgMHg3MzBhYmViMiwKKwkweDU1YzlmYjMzLCAweDVlNDU5MWUwLCAweGFjOTNjOTQzLCAweGRmZjFjMWRmLCAweDE0MWEwMWZmLCAweDQzZDBhYWFmLAorCTB4MDAwMDQzZDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdXNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYTk4ZjhhLCAweDMyZThmNDMwLAotCTB4MzFlOGE0MzAsIDB4NDNkNGRjMzAsIDB4Y2YxMmQzODgsIDB4YmY0Y2EyZTEsIDB4ODMwMzBiMzAsIDB4MDM4YjEwMjgsCi0JMHg3ZjEwMjRiMSwgMHhmODYwNjQ2MywgMHg3ZWJjNDhjZSwgMHhiYjA0MTE1ZSwgMHg4MTgxODA0NSwgMHgwNzBmYzgwZiwKLQkweDE5MDVmZmQyLCAweDMzMGIzZTE4LCAweGY5MDNmMDMwLCAweDZkZmM4MGIzLCAweDg4MDg3YzQwLCAweDM3NjI4MGMzLAotCTB4MjA2N2Y0ODAsIDB4MDJjNDBmYmUsIDB4MTdjZGY4MjIsIDB4NDE3ZjIwMjQsIDB4MDdmZjk1MDgsIDB4MTA0MmZmOGQsCi0JMHg2MTYzN2ViZiwgMHgwNDk2ZjJmYywgMHg0ZGUxYjFlNCwgMHgwZjhjZGMwNCwgMHhlZjQwYTc3ZiwgMHg2YTg3ZTA0MCwKLQkweDU1N2Q3Y2E4LCAweGEwMmIwNjA2LCAweDg0M2E4NzU4LCAweDdlNDkwOGZmLCAweDQwY2M1MDE2LCAweDkzZTZjMjE1LAotCTB4MDU1MDYwNjcsIDB4NjFhYjFmZjIsIDB4MjgxZjk3MzcsIDB4NWY5NDA2YWYsIDB4MDAwNzM1MDYsIDB4MTVlNWFjNmYsCi0JMHgwMDAwMDM2OAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTg5NDczOGEsIDB4MTgzNTdhMTgsCisJMHgzMjZiMzYxOCwgMHgzMTY4NjgzMCwgMHgyMDMxODgzMCwgMHhhZjg1NjhlNCwgMHg5ZmE2NTM3MSwgMHg4MTgxOTU5YiwKKwkweDgxZjk4ODE3LCAweGQ3ODgxMDU4LCAweDZjMzAzMTMzLCAweGZmNWUyMjYwLCAweGZiMDQ1MTExLCAweGMzMDMyMDllLAorCTB4MTk3ZjIwNTEsIDB4NjYxNGVlOTAsIDB4NjQwNTU4NjAsIDB4MmZlMjAzMWYsIDB4MTA4MGJlNDAsIDB4MTAwYzgzMDMsCisJMHg2MDYxMTVmZiwgMHhjMWQyMDUzMCwgMHhjNDAzNmM0MCwgMHg5YmYxNDVjNywgMHg3YzgwODI3ZiwgMHhiZjJhMDhiYywKKwkweDI3OWY4ZDFiLCAweDI1ZmY1ZjhjLCAweDBmZjJmYzExLCAweGMzNjNjODA4LCAweGM3ZTQxNjMyLCAweDdhMDUyMjQ3LAorCTB4MjkzNzAyMDcsIDB4Y2E4ZmYyYTIsIDB4NTQzYzMwMzMsIDB4NTFkMDYwNjAsIDB4OTE5YmYwODIsIDB4NjI4MGVkZTQsCisJMHhlYzIxZTRjNywgMHhiOGMwOTIyOSwgMHgyOGI1Y2EwNywgMHgyYTc3Mzc2MiwgMHg1MDA0ZmU1MCwgMHgzNDg5NGJjZSwKKwkweDQxZDNkY2Y3LCAweDg0MzRhZmU1LCAweDNlYmMwMGQwLCAweDAzYThlNDE0LCAweDAwMDAwM2E4CiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDUxNDc4MDksIDB4ZjRmNTcwZGEsIDB4NzMyNjRjZjQsCi0JMHgxMDkwOTI2NCwgMHhhNzA5MzBhZSwgMHhlMTVjMzgwYSwgMHgxMDg0Y2EzMCwgMHhhOGVhMjQxNiwgMHgxMzg4YTg4OCwKLQkweDJlNDIxMDgxLCAweGY1NzE3NWQxLCAweDExYzNhN2ZiLCAweDllMzc1OTQxLCAweDFkNDdmYWNiLCAweGEyMmNkYzEwLAotCTB4NjAxODg4MDYsIDB4YjIwMGMxYzAsIDB4MTc2MWJiOGEsIDB4YzM2M2Q3MTUsIDB4MDE5MjFhMGQsIDB4ZTVjNThmMTUsCi0JMHhlYWFkZjdhYiwgMHg0NGNlZWU5OSwgMHhlZmYzZWJhMiwgMHhlM2ZkZmI3ZSwgMHg1NzU0NTNlMywgMHhlZjU1NWJmNSwKLQkweDVkYmQ2ZjVkLCAweDcxMDI0YTMxLCAweDAyZTQyNmY2LCAweGYyMTFjNmZjLCAweDQ5MDg0ODhjLCAweGUzNmQ5Njg5LAotCTB4MTc0OWM3YzMsIDB4OTJjZGU0NDIsIDB4ODg0MGFkNmIsIDB4MzQzZGJhZjAsIDB4ZmIyMTA0NmUsIDB4MzMwMTA5NTYsCi0JMHg1ODc2ODdhZCwgMHhkM2Y1YTEwOSwgMHhjYzA3ZDczNSwgMHhkNDNlYjQxOSwgMHg5YWZhYzFlYywgMHhiZWU3YWMxYywKLQkweDQ4YzNhZWZhLCAweDhhYWZhNWViLCAweDc2MWJhODQ2LCAweGRiMzQ3MjljLCAweDM3MzcyOTA4LCAweDdkMDU3MjNkLAotCTB4MjQ1NTdlMWUsIDB4YzQ1MGU5YWIsIDB4YjI0MGM1MzUsIDB4NDcxZTM5MDgsIDB4YWQxOTZmZDgsIDB4Njg1MjEyYTcsCi0JMHg1NWQyZDU2MSwgMHgzY2MyNjczYiwgMHhjNGNjMWE4YSwgMHg2ZTk0ZTE0MiwgMHgxNWVkN2I5OSwgMHhhZjc3M2ViNCwKLQkweGU5NGJhMDQ0LCAweDc3NTM0YWRhLCAweDEwMTc5ZjVhLCAweDY4YmVhMGVhLCAweDRlMzg4N2M3LCAweDU0NTI3OGRiLAotCTB4NGY5MDg4MzcsIDB4MzVjNDcxZmQsIDB4NGQxZGQ2ODAsIDB4ZTdkMTM3YTksIDB4MTMwZDgxYzUsIDB4N2FmMTdmYTEsCi0JMHhmZGEwNmRjMSwgMHg3ZTc2NmI4YiwgMHhlYjhiZjAwNCwgMHg4NTIyYmVhNSwgMHg0YWQ2YmYzZiwgMHhkOGQ5MDM1YywKLQkweDYzYWMwODE3LCAweGRmMzBiNWNlLCAweGM0NDgzZmQyLCAweGU3NDVlYjRjLCAweGMwMTEzNmVmLCAweGU0ZGFiMTkxLAotCTB4OGZmOGMzYjUsIDB4MTg3NjVjOWEsIDB4NTFjNzE2YTcsIDB4N2JmYTU5ZjAsIDB4YWY3ZDBlM2EsIDB4MGRjMTY1ZWMsCi0JMHgxMDMzMmI0YiwgMHg3NWE3Y2MxZiwgMHhmM2ZhNjU4YiwgMHhhNTU3NTgzNiwgMHhiZmJjM2ZhOSwgMHhmNDEzNDFlNSwKLQkweGQ4MjgxYjliLCAweGZjYzE3MTZjLCAweGMyMjY5OTU2LCAweDk5NTY2YjNjLCAweGUxNDUwNzBhLCAweDUxN2RhZmNkLAotCTB4MmJlM2FmMzMsIDB4YTlmNTc0ZmIsIDB4YTdlNWY1ZGEsIDB4NzM1YThhN2UsIDB4ODg0YzVlYjQsIDB4ZjMwNmNlYTcsCi0JMHgxZmFlOTgwZSwgMHg1NDdlN2QxYywgMHhjZjdhNDQ0OCwgMHgyYjg5MTVhZiwgMHg1MjlmMGEyZSwgMHhlZmNiOWYxZSwKLQkweDFmMDI3ZmQyLCAweGQ2MDdiNzZjLCAweGI1ZTk0NDY2LCAweDhlZmYwOWMwLCAweDkzYWNlYmQyLCAweGNlMThjZmQzLAotCTB4Y2E1N2MzNTIsIDB4NzQwZTgwNDcsIDB4Mjc3ZWQ1M2UsIDB4ZDNmOThmOTYsIDB4ZWZjMjdjYjAsIDB4ZTUzZGJjNDIsCi0JMHg0YWU1ODgxZiwgMHgzZjlmMWJiZiwgMHg2NThkMWZlZCwgMHhlNTgzZGY4ZCwgMHg1ODQ5ZmViMywgMHhlYzVlZmMwNiwKLQkweDFkM2ZkYWI3LCAweDFmN2UzNWNiLCAweDVmYzE3ZjNlLCAweGJmYWQ2NTg0LCAweGYzYWY5ZjAyLCAweGJkNzJjNDJmLAotCTB4MmZlN2M2NWYsIDB4NTk2MTk3ZmIsIDB4NzJjNmFmZTcsIDB4OTYyNTdmYTMsIDB4ZjYwMGZlZjUsIDB4ZDdlOWNjZGIsCi0JMHhlN2MzYWZlMCwgMHg1ODBkZmQ1YiwgMHgyYzIxZmQwNiwgMHg2MmY3Zjg3NywgMHhkNWUzODJiOSwgMHg4YzcyNGQ5MSwKLQkweDBmMGUyZjE0LCAweDIwNzE1MjcxLCAweDFjOWVmOTQ5LCAweGJjOTNkNjg5LCAweDQzM2E5ZWFjLCAweDdhZDEzMWNlLAotCTB4MjlkNjhmYWEsIDB4ODQ5N2JhOWUsIDB4ZGViNGNjNzIsIDB4YTdiNTgyYmQsIDB4YzdjNjQwM2YsIDB4Y2NiYTdhZDEsCi0JMHg3ODU3MzNkYSwgMHgzZDY4NWJjNiwgMHhmN2I1OWFiMywgMHhjN2M3OTFhZiwgMHgwMGZmN2FkMywgMHg3ZDc0YmY2YiwKLQkweGQ2OTViYzY4LCAweGVkNjNhZDJmLCAweGQ3MjQ4MjQzLCAweDQyNDNlYjQ2LCAweDlmNmMzZWFjLCAweGViNGVkNzI3LAotCTB4M2Q1ODlhYzMsIDB4ZDczOTIzZWIsIDB4Y2Q1OWViNDEsIDB4MmRiMWZkZWMsIDB4NWEwNGRjYTEsIDB4ZWQ2NjFiMWYsCi0JMHgxNjZmOWQ1NywgMHg2N2Y4MzE1ZCwgMHg0NTliZTRiMywgMHhmMjAzMmQyOCwgMHgxYmIxOGYxNCwgMHg3NzdjOWJhZCwKLQkweDk3YzUzNzEzLCAweDFjNjNkNTNjLCAweGM5MjNmMTQzLCAweGJlNGJiZWQ4LCAweDRjMWJkYjFkLCAweDI3YmZiNjMyLAotCTB4NTZmYjYyMTcsIDB4MjdlZDgwMjksIDB4ZGY2YzcyZTUsIDB4ZmI2MDBhNmEsIDB4YWM0MmYyYjcsIDB4YjYxMGE1MDcsCi0JMHhiMTJiMmFkYiwgMHhjMjE0ZDA3ZiwgMHg4N2NhZjRmNiwgMHhkNDg3N2RiMCwgMHhjYWVlZWQ4YywgMHg4NzdkYjFjNywKLQkweDFmZGIxOWE5LCAweDk5ZTM1MjViLCAweDBiMGZlYjQwLCAweDJmODFhN2JlLCAweDIyYmUwYjE3LCAweGFkZjgwN2QyLAotCTB4Zjk0YmNkMmUsIDB4ZDMyMDRhYWQsIDB4MDExN2JmODEsIDB4YWFmNmQyNTMsIDB4NDdkNDI2NmUsIDB4N2FjZTNmOWIsCi0JMHg2ZjM4MTQ1ZSwgMHhlMTdhODE3NiwgMHgyMDY1MGYwYiwgMHg4ZTExZTc5YywgMHgxNzg4ZTE0NCwgMHhjOWY1OTM4NywKLQkweGFjOWMwZDY4LCAweDM4MTQ4YTRmLCAweGE1OGUxMWViLCAweDdmMzY3MDczLCAweDlmM2I1NjMyLCAweDM4MTU4YTRmLAotCTB4MTQ5MTkyYWYsIDB4ZWI3M2JkOGUsIDB4YjY1YmZhY2EsIDB4MmI3ZjNlNzYsIDB4YzBlY2UwNTEsIDB4NmU3NjI0ZjksCi0JMHhiNGM3MGQzZSwgMHgxNjM4NjlmOCwgMHgzODliY2ZjMSwgMHhjZGNlOTQ5ZiwgMHgyZDcxZjQ2NywgMHg4ZjFmNDY3ZSwKLQkweGUxMDlhN2UwLCAweDljMWNlYjc0LCAweGZjNWFlMzg2LCAweGUwOGYxYzM0LCAweGQzODQwM2U3LCAweDFhZWI3M2FiLAotCTB4OWY4YjQyN2QsIDB4ZjgyMjI3ZDEsIDB4YzlmODhjMzksIDB4YWQ5YzFjZTgsIDB4ZDlmOGI1YTcsIDB4OWY4MjNhN2EsCi0JMHhiZjRlMTBjZiwgMHg2YzZiYWRjZSwgMHg2MzNmMTZhYiwgMHhmOWY4MjM1YiwgMHg0OTc1ZDcwMiwgMHg2ZDZjZTBlNywKLQkweDZiNjdlMmQ1LCAweGRmM2YwNDZiLCAweDlkYzE5YzIxLCAweDM2ZDhkNzViLCAweGI2YzY3ZTJkLCAweDEyNjNmMDQ1LAotCTB4Y2VkMGNlMDAsIDB4YTVmODI3Y2QsIDB4MmZjMTNmMTYsIDB4NDA0OWY4MjMsIDB4MzczYjIzMzgsIDB4NWE3M2VjOWYsCi0JMHg4YjlmNjRmYywgMHhlMTBkMjdlMCwgMHg5YzFjZTk4YywgMHg3ZTJkMzllMCwgMHhmODIyZTc4MiwgMHg1NzM4NDBjOSwKLQkweGQ5NWQ2ZTc2LCAweDkzZjE2OTVmLCAweDNmMDQ1NWZkLCAweGY3NDAwYTk3LCAweDQyMWYzZTFjLCAweDg2M2JkOGUxLAotCTB4MmQzYmUzYjMsIDB4MTc3Yzc2N2UsIDB4OWM3MGNmYzEsIDB4Y2Y5ZjFlNGYsIDB4ZjU1Y2UwNDUsIDB4YWU3ZTJkMGYsCi0JMHgzZjA0NDdmYSwgMHg3MjY3MDhkOSwgMHhmOGVjZTBlNywgMHgzYjNmMTY4NywgMHg0ZmMxMTFmZSwgMHg5YWViYWUxZSwKLQkweGFhZWJhZGNlLCAweDVjZmM1YTBiLCAweDY3ZTE4MTc1LCAweGRjYmFkMWQ0LCAweDZkNGVkYTA0LCAweGFmYTQ1YmEzLAotCTB4ZjFlZjNiOGMsIDB4M2EyZWI0MDgsIDB4YmE3NDVkNTksIDB4YTIyZGY4MDksIDB4MjY5MDhmZTIsIDB4YjdkZjQ4OGYsCi0JMHhmNjFjNGZhZCwgMHgyNWZiNTExMCwgMHg3NTgyNmZlMywgMHhhNjk3YTlkOSwgMHg0NjEyNGJmNiwgMHhhMGZjNmJjNywKLQkweGE2OTI0ZjQ0LCAweGJiYTkzYzllLCAweDM3OGE3ZmE2LCAweDc1ZGVkMzUzLCAweGY2OWFhNWZhLCAweDlhNjFiZTZlLAotCTB4YjFhMjhmN2EsIDB4MmFiZGZlOWEsIDB4YmRlYTZiYzYsIDB4ZTlhZDVlMTcsIDB4YTBkZjIxOWYsIDB4NzY1OWY3YTksCi0JMHhiZjdmYTZhYiwgMHhlZDM1M2JlYSwgMHg2YjE2NTYwMywgMHgyYzA5MmZkYSwgMHhhYjJmZDRkMCwgMHhmZmE2YTVmZCwKLQkweDlhNDViYWUwLCAweDFlMWJjYmY2LCAweDBkMGZiNGQyLCAweDBmYTlhNjNkLCAweGE2YjRmYmRmLCAweGQ1YTZjOGZmLAotCTB4MDc1MWY2OWEsIDB4YzdkYTY5ZDcsIDB4ZDRkNDZmMzQsIDB4NTViOTM4YWYsIDB4ZjBjYWZmZDMsIDB4YjhmYTlhMWIsCi0JMHhmNGQyZGZhZiwgMHgxZTczOTRhNywgMHg0NWQ3OGNiZiwgMHhmYjgyMGI5MCwgMHgwOTliYjkwMiwgMHhkZDkwYzVmZCwKLQkweDc3NTM3NTg0LCAweGQ4MjdkYjFiLCAweDI5NDc1ZDBiLCAweDlmMDY0ZGRkLCAweDgxMmQwYmFiLCAweGZkZGE4NGU2LAotCTB4MDM0NWVlOWMsIDB4ZGM1ZjI5OWEsIDB4YzAzN2Q2M2IsIDB4NmJkZjlmNDksIDB4OGNlZTVkZjIsIDB4N2U1MDlmZTEsCi0JMHg5NDFhNDgxMSwgMHhmYTk0MDMyZSwgMHhjNjI1MDdmNiwgMHg5YzdiZTNhZiwgMHhiZTg4N2ZlZiwgMHhmNzA4NmU1ZiwKLQkweGJmZjVhNDRmLCAweGMwMDI3MjFiLCAweGQ0MDgyZmRmLCAweDE1N2NhN2ViLCAweGU4MGE5MjJmLCAweDFlMjY2ZjE3LAotCTB4MzMwN2RmZTAsIDB4NTU5NzllYjIsIDB4MTdhY2JjZmMsIDB4MGEyMTUzOTUsIDB4NGJlNDk5NzcsIDB4NWQ2NDNmMDMsCi0JMHhmODMyYmJlNSwgMHhlOGJkNTUyOSwgMHhmMjEzYmFiYSwgMHg0ODZlZjBhMiwgMHhlZmRmNGJlZSwgMHhhM2U2OTg1NSwKLQkweGVhMjZjY2YwLCAweDM3YzdhYmU3LCAweGUxMDdmMWQxLCAweGNmYzA3NWY4LCAweDk0ZmM2MTliLCAweDMzOWJlM2Y2LAotCTB4OGZjNjZiNDcsIDB4OGNkMjJmNGIsIDB4ZTNhMjY3MWYsIDB4YWZiZWE5M2IsIDB4NGY4Zjk4ZmMsIDB4OTA5NjMyODksCi0JMHgzOGM3YzI2ZCwgMHgwOGJkMzliZSwgMHg0NGQwN2ZjNywgMHhmMWVhM2RmNywgMHg4N2UzMjNlMywgMHgzYTdiZmQ2MCwKLQkweDU4ZTY3ZjVhLCAweDhiZDNmYWVkLCAweGIxMzdlYmI1LCAweDc5NTViZmY1LCAweDhmMWY4ZjhjLCAweDM4NWI3ZmViLAotCTB4NWU5ZmQ2YzYsIDB4NjY2ZmQ2Y2MsIDB4M2JlMzIzNzAsIDB4ODI2ZmY4MjIsIDB4ZDFkN2JmZjUsIDB4NmI2NGZiZmEsCi0JMHg0NGJiZGZkNywgMHgxYjMzN2ViYiwgMHhhNzk1YWZmZiwgMHgxYzM2ZjhmOSwgMHgzNGUxNDNmZiwgMHgxMmVmN2Y1YiwKLQkweGY2NjRkZjFjLCAweDRjN2Y4MWI5LCAweDAyMmJlMjNkLCAweDkzZDI3Yzc0LCAweGMwYWVhZTJhLCAweDI4MWM3NDJlLAotCTB4YTY1MTI2MDcsIDB4MjE0OWU0MjcsIDB4NmY3MWU3MTMsIDB4NzNiN2UzM2MsIDB4NTBkZjk0ZjEsIDB4OWNmOGM5MWYsCi0JMHhhM2U2YTgwNCwgMHhjZTMyOWNmYiwgMHhlN2Q3ZjNmYiwgMHg2MTZmNDA5OCwgMHhjY2VmZGQzYiwgMHhkZDlkNTNlMSwKLQkweDkzN2YyMjIwLCAweDdlODFjYzI3LCAweDBkYWRiZTc0LCAweGQ5ZjUwY2EyLCAweDAwMTk1YzRmLCAweDI2NmU1OGZkLAotCTB4M2RlMTc4NzcsIDB4ZjNjMTA5MjMsIDB4NWUwZTRmNjMsIDB4YmU5NzVlYWQsIDB4MWQyZDUzOWMsIDB4MTdjOGQ2NmYsCi0JMHg5ZTNjOGY5YiwgMHhmM2EwYWMwYywgMHgxODI2MDNjYiwgMHhhNzFmYWQxOSwgMHg5OGQ4MjlmYiwgMHgxMmZiYTYxZSwKLQkweDc0NDg0ZjI4LCAweDI4ZmNmYTNjLCAweDAxOTE2ZmRkLCAweGM0YTliOTZhLCAweDc5ZWM4OGY3LCAweGZmOWQyZmI3LAotCTB4M2NmY2EyMzQsIDB4NTFkYmNlYjgsIDB4MjMzYzI4YTQsIDB4MWFmMWZmYzMsIDB4OThmNDAwMjEsIDB4ZjlmNzRkNTMsCi0JMHgzNzJmZjkyYSwgMHgxNzBlZjkzMywgMHgwMmQ1ODEwOCwgMHhmZjdkMmJjNywgMHg4MTNlZmU2NiwgMHgzM2Y4NTFmOSwKLQkweDhmOWRlYzlkLCAweDQ3YjM1Yzc3LCAweGVkZmRkMDcwLCAweDljMGQ2NGNhLCAweDY5NjA0ODViLCAweGI2ZmY3ZDFhLAotCTB4NjIyNTNiMTUsIDB4ZTgyOGJlMDAsIDB4ZTVmODAwYjUsIDB4NzA4NDg5N2UsIDB4NDI5Y2RhOWYsIDB4YTA2NjcxMDYsCi0JMHgwNjRlN2RmMCwgMHhkMmU5ZTZmZiwgMHg5YzE1NjZkMSwgMHhjNzljNTI5OSwgMHhmMzMzZTc0YiwgMHg3YmU3MTEzZSwKLQkweGRlZGI0ZjhiLCAweDMxZWFjM2JjLCAweGNhZTVhMTBjLCAweDQ5NDIyNWNmLCAweGI2OTE1YjdlLCAweDZkMGFmNmZkLAotCTB4ZGE4NThlZmQsIDB4ZWUwZjVkM2EsIDB4ZmQ2NDBiZjMsIDB4YmExY2JhNzMsIDB4ZWIyMzNiY2UsIDB4ZjVhNzBiYTYsCi0JMHhkNjZkYmM1OSwgMHhkMGQ2NDkzMiwgMHg0ZDczNmU5MSwgMHgxMzNkYmM1OSwgMHg0ZjEwNGVkMCwgMHhmNjlmN2VmOCwKLQkweDY4MWYyOWZkLCAweGVhNTc3M2VhLCAweGY4YmU3MWUwLCAweGRmZmZmNGZmLCAweDg2ZjJmZjRkLCAweDU1NDdjNTljLAotCTB4OWJhZDJhZjMsIDB4YWFhOGY4YmMsIDB4ZWJkYWZjZGYsIDB4ODE3OWY1MzUsIDB4ZTdmZDM0NWIsIDB4YjRkMDJjYWUsCi0JMHhhNzllYTljZiwgMHhlY2I1OWY2OSwgMHg0MGJkNGQyZSwgMHhmZmQzNGZiZSwgMHg5YTk1ODU4ZSwgMHg5NjJiZGJmNiwKLQkweDJiNmZkYTZiLCAweGJmNTM1NDdhLCAweDRkNWJmN2M1LCAweGFmYTc5YmZmLCAweDNiMGJiNGQyLCAweDQ2NmVmNWU2LAotCTB4ZGRlYmU5YmIsIDB4ZjRmZTkyOGQsIDB4N2MwMjY2MDcsIDB4YzJiM2YwYTYsIDB4NjlmZDI3ZWYsIDB4NzdlYTdlNTgsCi0JMHg3YTA5NTk2MSwgMHhjMzc3ZWE5OCwgMHhhZjk2NTYxNiwgMHhmYTBkZTgyZSwgMHgxM2ZmZTE1YywgMHhlODNhNDU1MiwKLQkweGViM2YzZDRiLCAweDRmOWVhZmY1LCAweDJjNDdhZmU5LCAweDRiMjk0MzNmLCAweDNiMDVlMjA0LCAweDY0ZmRjNmQ2LAotCTB4ZGMzN2Y5ZTUsIDB4MGNlNzgyY2UsIDB4Yzk4OTg5NjUsIDB4NmVjNmM5NjUsIDB4ZWEwMzg5ZTMsIDB4YjYxNWZlYTEsCi0JMHgzYTkyZTE4ZSwgMHgyMDQxZDcwMSwgMHg3NDAyOWE0YSwgMHg5NzZkNDFlYiwgMHgzNDdkYWU5YSwgMHgyOWQ5NmNmMywKLQkweDIwNjVmOGUyLCAweGRjYzA2MzkzLCAweDYwMTg3Nzc4LCAweGZhNjM1MGZjLCAweDNlNjE4MzhkLCAweGRlYjFkNzllLAotCTB4NTZmZTgyOTAsIDB4ZTJkMjdmOGIsIDB4N2YwMGZkYTMsIDB4ZmE0ZjJjNWUsIDB4ZGM3OTYzYTcsIDB4YThmMmMzZWYsCi0JMHhjM2NiMDhiZiwgMHg5YjJjMGFmZSwgMHhmY2IxMGJmZCwgMHhmOTYzMmZjNCwgMHg5NjE5N2Y5MSwgMHg2MzU3ZjU3ZiwKLQkweDEyYmZkMDc5LCAweDAxZmNmN2NiLCAweDFlZmQ1YjJjLCAweGZkM2UxNTJjLCAweDE4ZWJhMTRmLCAweGFlOWNiZmMzLAotCTB4M2FlOWE4ZGYsIDB4ZjM2NGUwYzYsIDB4MTg3ZDc0ZTEsIDB4NmZjMzFiZTYsIDB4YzhjZTBmZWUsIDB4ZTIzZjk1NDgsCi0JMHhkYjcxOGM5OSwgMHg0ZWNlM2MwNSwgMHhjNzE2MjRjOCwgMHhhNjJmNjNlNSwgMHg2ZmQwOWFlMCwgMHgzZDA0MGMwOSwKLQkweGI3ZTA3NjdjLCAweDdkNGUyMWZkLCAweDRhMjUyMGY2LCAweGQzZWJjNzQ2LCAweDNjNDNhZmQzLCAweGVmZmEwZjEwLAotCTB4OTc0YTAxODUsIDB4OTZlZGY2ZTQsIDB4OGI1Nzg2NzgsIDB4YzMyMjRjODEsIDB4ZWZkZTU5MDgsIDB4ODM5ZGY3MDUsCi0JMHg0OTI0NmViMCwgMHg3ZGMwN2VmMCwgMHg1YzA2M2RiZCwgMHg3ZTAyMGJlYSwgMHhjNWQ3ODYyZiwgMHgwMDQzNzNmNiwKLQkweGZmYTdmMWRlLCAweDE4ZTUwNTllLCAweGUzMDdmMzAzLCAweDRiZjQ0NTFiLCAweDM3NzllODQ5LCAweDY3YTIzN2UwLAotCTB4ODgzNGVlY2QsIDB4OTlmYjg2ZjcsIDB4OWFmNzY4OWMsIDB4NGZlMmQ2YWUsIDB4YmY4MzVhYmUsIDB4NTVmYzExZTUsCi0JMHhmYWZlMjFhNywgMHhjMjhmZmI5ZSwgMHg4Nzg0ZjExZiwgMHg4YTM4MzBkYywgMHhlZjg0NmZiZiwgMHgxZTcyOWZjNywKLQkweDM2ZWYxZmEzLCAweGY4ODNmOGQxLCAweGMxNTUyZGIyLCAweGExM2E1MzZiLCAweGY4MTFmY2UzLCAweDViM2ZjMjlmLAotCTB4ZjAwMTIwM2YsIDB4MTE3MzgxMWMsIDB4N2ZhZjA4ZmEsIDB4ZThmYTBlOWMsIDB4MTZjOWQwMzQsIDB4MGU5Zjc3ODUsCi0JMHhjZmJkZDlkZSwgMHg1ZmVmYzAzYiwgMHg0N2NhMjY5MCwgMHgyOTU5ZTA2MywgMHg2NDMyZWI0YiwgMHg2YTRmZGE5YiwKLQkweDU2Y2ZkNmQwLCAweGQwZWE5MzBiLCAweDRjMjU3MTlmLCAweGQ3ZmEwYzFkLCAweDQwOTUxZjI5LCAweGE5NjFhNjRmLAotCTB4NjY5MDU5YzAsIDB4N2QyODcxYzIsIDB4NGZhZjVjOTgsIDB4ZDRmZmI5NDQsIDB4N2VmZDg3MWYsIDB4MDQ3NDc5ZWEsCi0JMHg3YThmM2EyNywgMHgwZmJlODQ3MiwgMHg0ZmExN2YyYywgMHhlNDNiZmRjNywgMHgyNjE3ZTM1MywgMHhhMDkxYjM4OCwKLQkweDk3ZmMwZTc0LCAweDA1ZmZmYTM4LCAweDQ2MjM3ODM4LCAweGNiNzAyYmFjLCAweDdjZDk0NGViLCAweGFmNWYzYzM5LAotCTB4ZTdiZThmMTksIDB4MmYwNmNlNTIsIDB4M2M5ZjdlNjQsIDB4ODU3MWM5MTgsIDB4YThhOWE5NWYsIDB4NDhkNjE4ODEsCi0JMHhhYzhiNWJlMCwgMHgzNTEyOGZmNSwgMHg2ZTg2ZjJmNSwgMHg4MjVmYzZiMiwgMHg0YTNkNTA3ZiwgMHhmMDIzMDQ4YSwKLQkweDlmNjcwOTRiLCAweDk5NmRhMzM2LCAweDBiZjdlNzQwLCAweDNlODE2MjA4LCAweGQyYmY1ODEwLCAweGNmOTM2NmI4LAotCTB4NzhiMmZjMDUsIDB4ZTgyZTE1ZGEsIDB4ZDVlYjhkNTksIDB4MmZkMjhmY2YsIDB4M2M3NTI4YzMsIDB4ZDllMmY5ZmYsCi0JMHhlNDMxYmQ3YiwgMHhkYmQ3Mjc2MywgMHg1NzE2MDYyNSwgMHgwM2IyNzEyMCwgMHg5YTQ4ZDdjZSwgMHg4ZWMxYjhlYywKLQkweGYwNDViMzUzLCAweDNhM2I3MTgzLCAweDBhMGYwYThlLCAweDI5MDE3OTljLCAweDk5NWZmNWFjLCAweDU4MThiNjVjLAotCTB4ZWUzZjQwYmMsIDB4OTRkYzYxOWYsIDB4NmNhZmUzOGIsIDB4YjA4OWZlZmQsIDB4Y2IxZTNkNmUsIDB4N2M5OGNlMWEsCi0JMHhiZmY0NTcyOCwgMHgxNTFlMjhhYywgMHhmNDQyZmVmYywgMHhlYmE0NTlmZSwgMHg4NDNkYWUyYSwgMHg5MjkzZWFmYiwKLQkweGVmZmVmZmRjLCAweGU3ZWQ4YmQxLCAweDZlM2I0YjZmLCAweDI2NWJhZDU1LCAweDlkY2UzMDRkLCAweGM0NDBmOWEzLAotCTB4NTQ4N2YzNzUsIDB4NWI3YTlmNWYsIDB4NWQwMTBmMjIsIDB4YWE1ZWQzY2UsIDB4ODI4ZjUwNzksIDB4ZmVhMmIyMTgsCi0JMHhmM2Y1OWRmYSwgMHg5ZjdlYzFmMywgMHhmNzA1M2NkYSwgMHhkNzg5YjMyYiwgMHgyMmNhNDEwMSwgMHhmZTA1OWQ1MiwKLQkweDk4NjI2OWY5LCAweDRkM2E3ODA0LCAweGFlMThlY2ZlLCAweGQxMzlkM2EyLCAweGZlYTFmNDg0LCAweGZjZjU2MWZiLAotCTB4YTlhZWZmYTgsIDB4NTM1ZGZmNTMsIDB4YTQzNzI0MmYsIDB4ZTE3OGY5YzIsIDB4MDgwOTEyMTMsIDB4ZmI0ZDNlYjgsCi0JMHg3MDg5ZDE3MSwgMHgyYThhOTJlNywgMHg0YjE2NzdmMCwgMHhlOWRmYWVjYywgMHg1NDFlYzYyNCwgMHhmNmJlOTc5ZiwKLQkweGFkMDE1NjRjLCAweDdmMzIyNzdmLCAweDlkZWYzOTQ0LCAweDM3N2I3NTQ3LCAweGI3NWM1ZWRhLCAweGVkYTFlNGNhLAotCTB4NGY4N2VhNDcsIDB4ZmJjMDgyYmIsIDB4M2ZiMDJhODEsIDB4N2I4MmFiZjIsIDB4N2UzZGFiYWQsIDB4ZjVmY2U4N2YsCi0JMHhhMWZjNTVmMywgMHg3Y2NlZTc3NiwgMHg4MmI1YTUxZSwgMHhjZjgzMTAyNywgMHg2N2M2NDZhYywgMHgzMGY2M2YwYSwKLQkweDhkZjEzNTNhLCAweDcwZmFiYTAxLCAweGFlOWM3ZDVkLCAweGJkZTVhM2ZlLCAweGZiYzhkMTBiLCAweDAwZGY0NDJmLAotCTB4NmY5MzBhNjMsIDB4YzYwOWRmZDgsIDB4OGZmM2YyMzAsIDB4MGVkNjlmODYsIDB4MTQ5ZmYwZmUsIDB4OWNhZDRmN2UsCi0JMHg3ZWUzZjg1MSwgMHhkYjdkZjg1MiwgMHgyYzRhN2ZjZCwgMHhiZGFmYTVmOCwgMHhmYWE2NTliNCwgMHgyNzk1ZjhhOSwKLQkweGE3ZWE4NDFkLCAweDU0ZWFjNjUzLCAweGM5N2ZhNTM3LCAweGUwMGVhNWRhLCAweGQ5NDY5MzgzLCAweDJhN2NmYzAxLAotCTB4YzQwYTRlMjAsIDB4OGM4Yjc3ZDAsIDB4M2RhZmY3MDIsIDB4NmZlMjAxMzYsIDB4ZmYwYTRmZjAsIDB4NWYwZjc1ZDMsCi0JMHg3Mzg3NzEwYiwgMHhjNjI3MjU2YiwgMHgyMWNkNmFkNSwgMHhiMmQzOTUzMywgMHg2NGY5NzlmYSwgMHhiMTBmZDYwOCwKLQkweDQ0Njc4M2ZhLCAweGY5NjgzN2E4LCAweDRmNzdmOGIzLCAweDVmNTBiYWE2LCAweDE4MGMzZGNhLCAweGZmYTEwZTNmLAotCTB4ZDhlNmI2NWYsIDB4ZTVmYmIwNDQsIDB4YTY3MjhjMjQsIDB4ZmZjNjBmN2YsIDB4NTNlZDA5M2EsIDB4N2RhMTI5ODEsCi0JMHg1M2U0NmUzYiwgMHgyYmY2N2RlMSwgMHg4Y2Y4N2ZhZiwgMHhmMjcyODBlOCwgMHg3NDI3ZDAwOSwgMHgwM2YxODRlNywKLQkweGRjNDU3YmZkLCAweDY4ZGJiZjlmLCAweGYzZjE4MmVmLCAweGU4MTQ2NDUxLCAweDI0MmYwNTMxLCAweGYxNzlmY2MwLAotCTB4NDA4NjY3YjUsIDB4Y2Q2NWI1MWMsIDB4ODU0MTBlZGIsIDB4Y2VkZTQ1MmYsIDB4NmU3YWNkZDYsIDB4YmQ2M2FiYWIsCi0JMHg1MWU1NGFkOSwgMHg3ZTJhNDdlZCwgMHhlZjgxYWI4NSwgMHgyY2FjODI0MywgMHhjODBlNDI5MSwgMHgyNTU5MjlhYiwKLQkweGI4ZmE2NWI5LCAweDVmZTdhNWU0LCAweDlhZTIxYTc4LCAweGZkZGQ5ODFmLCAweDJmZjlmYzI4LCAweDJjNmY3ZWVkLAotCTB4MjBkZmNmYWQsIDB4Y2I2N2M5NzUsIDB4NTFhOTA5YjAsIDB4ZmZkMzk0ZmEsIDB4ZDI4YjBlMTcsIDB4NmVkMzc4YTMsCi0JMHg3YjMwNmI5MywgMHg5NDUyNDBmZSwgMHhlYzM3ZjMyZSwgMHhlZGMxOTEzNCwgMHhiNzViOTFmMSwgMHg4YjZjZDRkMywKLQkweDQzYmE5ZjQxLCAweDEzMGZjMTEzLCAweDA0Y2VmYjVmLCAweDQzYjUzZmY0LCAweDYyMzM1ZDIwLCAweDZlZDU3M2UwLAotCTB4NGYwMGQzZjQsIDB4YWY0ZTRmNDgsIDB4ZmQ3NGZkMDgsIDB4NDA1ZDI5Y2IsIDB4YTVlOWViYWYsIDB4ZjQxNTM3ZWYsCi0JMHgwYjgzMGE0YiwgMHhiZjk0MTJmOSwgMHhmOTBhZGU1ZiwgMHhiYjM1N2Y0OCwgMHgyZjQ1MGYwMSwgMHhmNTgwZWRkZiwKLQkweDMwNTYzMDljLCAweDY5NjY3ZjNlLCAweDVmOGU4N2FhLCAweDRlYTljOTI0LCAweGEyZjNkOTJjLCAweGZjOGU3ZjY3LAotCTB4Y2ZmZjc3MzcsIDB4Y2I1YzU5NTMsIDB4YjY4MGNkZDMsIDB4ZWIwNmVlNGEsIDB4MTM3MzUzOWMsIDB4Zjg5MGIzYWUsCi0JMHg5ZThiMGY5MCwgMHgyZmEwYmQxMSwgMHg0OTkyMzRiZiwgMHhjOWM4NjIxYiwgMHg0ZTRlNWNiNywgMHhhNWM0YTZhYywKLQkweGNkNDEzY2ViLCAweGZjZTllNjEwLCAweGM1YWMwYzU5LCAweDE4NWRmYTM4LCAweDVmMzlmYjM3LCAweGIwZThmNTBiLAotCTB4YTMxYzY1ZmUsIDB4YzBkMTkzNTcsIDB4ZWFmNTJlZjUsIDB4ZTZiYmZjZDUsIDB4ZDNhMDI2YzEsIDB4NWQzY2JkYTcsCi0JMHg5Y2E1ZmNlMSwgMHgwZjhlNjUxOCwgMHgyYjg1MDJlMSwgMHhjYWViY2ZlZSwgMHhjNjVjNDRlOCwgMHhmNTFlZmUyYywKLQkweDM5ZTE3MmNiLCAweDNjOTI2ZmY0LCAweGY3OWEyMTk2LCAweGU4OGM4NWM4LCAweGYxZjBmN2Y4LCAweGMxZTNiY2U5LAotCTB4MWE5MTNhOWYsIDB4NDAzMDVmN2IsIDB4YjUwMmVjNTIsIDB4NTMzZTJhZWIsIDB4ZmY5MzNiYzksIDB4YmM5OWNiMzUsCi0JMHhiODFmZjIyYiwgMHg3ZmI0MTI3ZSwgMHgxMWM5ODA3MSwgMHg5MmY2MDdiYywgMHgxNWQ0MmJjZSwgMHgxNTRlNzdkYiwKLQkweDQ5OTgzZjUwLCAweGFmOWM5NjI4LCAweDZiOWNiODkxLCAweDQyZmNmNWRiLCAweDEyMTQ2ZmU3LCAweGUzMDM3YzU0LAotCTB4ZDAxZDIxMjQsIDB4ODI3YzJhOWYsIDB4YTNkMmFmYmUsIDB4YTNhZTMwZTUsIDB4OGU0NTVjM2QsIDB4ZjA3ZDcyZTcsCi0JMHg2YjAzZTgyNSwgMHgxYTkwMWY1NCwgMHhmNjNhMDdhNiwgMHg1M2M0NjU3YiwgMHhlMTc4MTQ4OSwgMHgyYTVmOTA2OSwKLQkweGU0MGJiMmFmLCAweGZhYzJmMjU3LCAweGY4ZGY1YjNmLCAweDZlNTRhZGRlLCAweGU0NTNhYjNlLCAweGY1NTdhYjU2LAotCTB4ZjFiNDViNzIsIDB4NTRmODA0ZTcsIDB4ZjU5ZmI3MmYsIDB4ZTUzMTIwYWMsIDB4Mjk4ZjNlOTYsIDB4ZmY5YjNkYjcsCi0JMHhjMTU1N2EyNSwgMHhkNWE0YmE2MywgMHhlYzllOGFhYiwgMHgzZDdhOWYwOCwgMHg0MmU4YzViOSwgMHgyNGY1ZWFiYywKLQkweDU5MjAxZGZkLCAweGUxNTFmOWVkLCAweDhhZmY4NTQzLCAweDBkZWQyYzVmLCAweGE3YzIyOGZhLCAweGY4NDYxZjBhLAotCTB4ZmQ0M2UxNTQsIDB4ZDQ3OGI1YmEsIDB4OWU3YzYzYjcsIDB4Y2I3NzhiZjIsIDB4NTA3YjEzYmIsIDB4MDUwNDk2YmEsCi0JMHhlZjg1ZDliNywgMHhjNTNhODFlZCwgMHgwYjZkODc5NywgMHhlOGY0ZjdhYSwgMHg3NDA3YWVhMiwgMHg3ZjVkM2FmNSwKLQkweGQ1ZWVhZThmLCAweGVhZTlmN2Y1LCAweDAxZmViYTE1LCAweDY4Njk0ZmI2LCAweDg3ZTQxMTM0LCAweGI0YmZhNjkwLAotCTB4OWY5MGM4ODgsIDB4ZTIyZWRlMTYsIDB4OWQxYjQxYjksIDB4YmY3ZDE1NzMsIDB4NDA0NjdkNmQsIDB4YTk2MWZhYTYsCi0JMHhjM2RiZWQ4NSwgMHhkMDJhYTYyOSwgMHhiMGNlNmQ2NywgMHgxNmVhMDkyMywgMHhmMzZiN2YxNiwgMHgyYTg5MWQ4NiwKLQkweDUwNTBmMWZmLCAweDFjZGM3ZDQ0LCAweGVkNjI5MzIwLCAweDhiYzdhODVmLCAweDFkMjY2YmY0LCAweDkwZjNiM2I1LAotCTB4MTBjNzc4YjYsIDB4YjQ0ZjJmMTgsIDB4Zjg4NDJmYTUsIDB4ODZlOGI1NGMsIDB4OTVkOThlMjMsIDB4NWNlMDNiMzcsCi0JMHhlN2Q4MmRhMiwgMHhmOWY0ZTliYSwgMHgyYzg4M2Y5YywgMHgxOGY2NDIyZCwgMHgwZGY2YTliYiwgMHg1NGZjODkyNywKLQkweDk1ZjkwMGI2LCAweGIzZmU5MDJiLCAweDMxMWY2YzgyLCAweDdlNmM0NTdiLCAweDE1ZWZlNjJlLCAweDgxMzFlZWRhLAotCTB4ZmZmZWE0ZGUsIDB4NWY1Yzc1NjEsIDB4YTM1NDUzODEsIDB4YzI5YzFlN2IsIDB4MmZlZDllZjksIDB4ZGI2OGQ3OGIsCi0JMHhmYTNmN2M3ZCwgMHgwZmRmMGE1ZiwgMHg3ZWQ5NDMyNSwgMHgwODM4YjA5MCwgMHhlMjc5YmJkNywgMHg1M2E2ZWJhMCwKLQkweDE1ZWRiNDNhLCAweGQ5Y2RmMDA5LCAweDM4NzQ4OGEwLCAweDQwMDg1ZWJiLCAweDI5Yzg4YTVjLCAweDI0NjUzZjI4LAotCTB4YzE0ZWZhOGMsIDB4YzdjODBiNTcsIDB4NTBmNThlODAsIDB4NjcxZmFiY2IsIDB4OTRiYjRmZGQsIDB4Yzg3MGZlNmMsCi0JMHhjYjY1YTVmZiwgMHg2ZmZhMGZlNiwgMHhlZjZiZmE4MywgMHhkYTQ4N2ZhNywgMHg2MWRkY2ZmNywgMHhiNmRmNzNjMSwKLQkweDI3Y2M3NjFkLCAweDRlZmVkYjZlLCAweGRmNTBmZGZhLCAweDNjYzM3NjYyLCAweDM1N2M3NmRiLCAweDZkYThmODA0LAotCTB4ZjQwOGI5OTEsIDB4YjYyZjViNTgsIDB4ZmRiYzU5ZmYsIDB4NjhjZDIxYWIsIDB4ZmQyMDk3M2YsIDB4OGIxMzI1NmEsCi0JMHhmZWZmMDRkNywgMHg0YTA1ZDA4OSwgMHgwZmYwMmFiYSwgMHhmOTcyN2U3OCwgMHgyMDgwNGI1NiwgMHg3Y2IyYWZmYywKLQkweDNkNmU5ZmI2LCAweGJmOWNmYzY1LCAweDZmYTY0ZWNkLCAweGIyMjVmOTg0LCAweDZkZjJlYzczLCAweGE0YWY5ZTYzLAotCTB4ZWZkNjk3ZTMsIDB4ZWRhMmNkMzQsIDB4Mzc3ZmFmYjksIDB4Mzc5MWYzMDQsIDB4NTVhN2JmMzIsIDB4Y2UxNjdlNmEsCi0JMHg2ZjQ5MzdiMSwgMHg5ZTI4OTIyZSwgMHhiYTM4NDE1YiwgMHgyOTlkNzIxMywgMHhjNWI2NTcyZSwgMHgxODc3Y2JjMiwKLQkweDNlMmNlYTk3LCAweDdlZDg5MmRlLCAweDFmMWZkZmY0LCAweDk1MTFlNjAyLCAweDM4ODFlZDA0LCAweGNkZmRkNjAxLAotCTB4M2U4MjFmMjcsIDB4YmU0NjYxZDgsIDB4NTlmYmQ2NTQsIDB4MjNmYTI1NWQsIDB4YTlmNzViMTcsIDB4ZDA3YzMxZmYsCi0JMHhhMTBiNzVkOSwgMHhjZTNiYWNjZSwgMHhlZWJkZWZmNCwgMHhjZTE3MjQ0NywgMHhlZDA3MmY0ZiwgMHhiZGZiN2NmOSwKLQkweGVlYzk3ZjU4LCAweDkyNzZmOWM2LCAweGZlOWEwN2RmLCAweDIzN2RmOGMzLCAweGUyZTNiYmE1LCAweGJmZDlmZWViLAotCTB4YTYzYmJhZjksIDB4NzI2NjFmZmIsIDB4MWYyMTNiYmEsIDB4ZWZmNWZjYWMsIDB4NTQzZjdlNzAsIDB4MWZmZGNkY2YsCi0JMHhiZjhhZjdjYSwgMHg5Yjc4MzY2ZSwgMHhhNmZjZTg3MiwgMHgzODNiNmE5MywgMHg5Y2E0YjcxNiwgMHg3M2E5MDdkZCwKLQkweDc0NWY1ZWU2LCAweGZjNGFmOTgxLCAweGJmM2Y1MWZjLCAweGVmYjYyNjk1LCAweDk5N2NlMDkzLCAweDEyNmU0YjhlLAotCTB4ZWQ4ZjdlZjgsIDB4ZmVlNWFlOTMsIDB4MGIzZGI1YzUsIDB4ZDZiZDJmZDEsIDB4NjI3N2ZjYzMsIDB4NDY3MzdhZjQsCi0JMHg2Y2Q4OWU0MCwgMHhjOTQzYzYzNywgMHhhODNlODNiMCwgMHhhZjI1NzRkZiwgMHg3ZjhiZjc2YiwgMHhhMDQ3ODgxNCwKLQkweGU5YjVmOWZlLCAweDlmODJmNjkzLCAweDYzNGY1ZDdhLCAweDQzY2FjY2M4LCAweGUwZWJiZTUwLCAweGY3NmI0N2NmLAotCTB4YjRmOGI3MzMsIDB4NmJhNzliZjUsIDB4Nzg3MTM3ZWIsIDB4YTJiOWMwZDMsIDB4MGFmMzRmZTMsIDB4NGE3Zjg4MDEsCi0JMHg4MTQ4OWViZCwgMHg0NzM0YTg3OCwgMHhmOTAwODIyMiwgMHg2MTRiMTUyNCwgMHg1NzkzNzBkZiwgMHhiMDNkZmVmYiwKLQkweGM1MTkxZGNmLCAweDgyYjhiY2UzLCAweDExNGU3MGY5LCAweDdjNDA1MDM3LCAweDQ0NDJiNzVjLCAweDQ4MzcxMjdkLAotCTB4ZDFkZWY4NDAsIDB4MWUxZGU2MTIsIDB4MDBiMzc4MzMsIDB4NDdjM2Y5Y2YsIDB4ODE5MmZkOTUsIDB4ZTc3YWMzNzMsCi0JMHg5MjE1N2M3MSwgMHhjODc3ZjQwYSwgMHhiMjE3MGJmOSwgMHg0YmVlMjBiMywgMHhlNzlhNWZkMCwgMHhlYTFhZTQyMSwKLQkweDBiNjYxN2I3LCAweDYzYzg3OGExLCAweDYxMzkxMjMxLCAweDA1NDNjNDE4LCAweDBmMTM1ODcyLCAweDc3ZTFkNmQ1LAotCTB4Y2UxNDZhNTUsIDB4YzQ3N2ZhYzUsIDB4Zjk3NTNmOGYsIDB4ODdmZmNhMzcsIDB4NDMzZmVhMjUsIDB4MmNmM2U3ODksCi0JMHhiM2VjYTdhZSwgMHgzYzMyMDhlZSwgMHg4MTA4OTc5NiwgMHg5MGFiZTQ0YywgMHhiMGNmM2VhNCwgMHhmZGZmMTk5OSwKLQkweDI4ZTE4MWVkLCAweDFlYmYzOTU3LCAweDdmZjZjMDljLCAweGEwYmJmMDIzLCAweDllNjdlZTcyLCAweDEwMDk1ZDk1LAotCTB4ZWMxYjM4ZjcsIDB4NzJkMWNmYzMsIDB4ZmMxOGJlMWQsIDB4YmJlZjlmYmMsIDB4MDA3OTAyZmUsIDB4MjA5YjZjYjQsCi0JMHhmZmUwOGI1NCwgMHhmYmM2MzA5MywgMHhiMjE2MDllNCwgMHg1Y2JlNDYzNiwgMHg4NzM5NDk4YiwgMHgyMDdkYzBhZiwKLQkweGEwMmNjNGZjLCAweGE1Y2RmYjIzLCAweGE5MjQyNmFmLCAweDlhZTJiNmU4LCAweGVkMjFjNjUzLCAweGMzYmYwMGU5LAotCTB4N2U0YmNlMzEsIDB4M2NmYjA5NmMsIDB4NGI3ZWViYzAsIDB4OGM2ZjQ0ZjMsIDB4Y2I4M2ZlZjUsIDB4ZGYxYmZlNmYsCi0JMHgzNzYzNzdlMCwgMHhjMDI0MzMwNCwgMHg0NDEzMGRjYiwgMHgzOWVhZjljZCwgMHg4N2UzZjcxMywgMHhhZjMwZTE5MywKLQkweDNiMjYzN2ZjLCAweGY2NWQwMGM2LCAweDRlZjg2ZThhLCAweGM2NzgzY2FjLCAweGNlNzE4YmU0LCAweGMwMjdjN2E0LAotCTB4YzkwMDczYzcsIDB4M2NmODA4NWQsIDB4ODEwYjJiZjIsIDB4ZmMzYmQ2ZmQsIDB4ZTQxMDY3ZGMsIDB4YWRjMjBmNjEsCi0JMHg0Y2UyMDdiZCwgMHgwYjhiMzM2NiwgMHg3MTNiMzBjZCwgMHhlN2U2Mzc5ZSwgMHhkYzc0Mjk0OCwgMHhhMWNlZjU0MSwKLQkweDlkZDVmNDcwLCAweDQ2MDE5ZmY3LCAweDUxMjQyNDZiLCAweDdlOTRmN2IwLCAweGJmNTg0YmRkLCAweDU5NjcyNjQzLAotCTB4MTEzZmY1YWMsIDB4NzMzYWUyYzcsIDB4ZDFkZWZiODksIDB4ZGQxZmJmYzIsIDB4MGY2ZDdlNzIsIDB4MzI3YjA3OGQsCi0JMHhkOGU3N2Q4MSwgMHhjYTA5YWY5ZSwgMHg0MjQ5ZDljNywgMHhlYzNkZjQwMCwgMHgyZjllYjA5ZiwgMHhjNzc5YmRhMCwKLQkweDFiZTVkYWMwLCAweGY4NTY1ZTk4LCAweDExZTc4ZjVlLCAweGY4Y2FjZjFjLCAweDBjN2Q3OTUzLCAweGNmMDUyZjk3LAotCTB4ZjNmNTdlMGEsIDB4N2Q1M2ZhNTUsIDB4OGYxZDRlMzUsIDB4ZTg2MWFlYjgsIDB4Y2IwZjYwY2IsIDB4NDBkMzgyODIsCi0JMHg5YjE5OTU0MSwgMHhlNTg3MjA0ZCwgMHgxMDRhOGYwZCwgMHhjNWM1YmY4ZiwgMHgzMDdiNTJlMCwgMHgzYmZlN2Q0NCwKLQkweGUxY2VjY2MzLCAweDMxNWQ4NzFiLCAweGYzZTRmODEzLCAweGExMmZkNDE1LCAweDlmNjY3YmVmLCAweDdkZGQ4MDcxLAotCTB4MTNmZWUwYzcsIDB4ZmYyOTA3N2MsIDB4YmY2YjI0NTEsIDB4ZTg3ZDVmNDcsIDB4OTA0ZjE2NzcsIDB4NzAzMzcwZDQsCi0JMHhlNDk2Mzc5ZSwgMHhiOTNlMTA0OCwgMHhkNGE3NjRhZCwgMHgzMzRmYzU1NSwgMHhhZWQ4NDljYywgMHhlMjVlZWYzYywKLQkweGU5Y2YwNjFhLCAweGY5MGYzODc4LCAweDNjODEzMzExLCAweDRkNzU0MWYyLCAweDZkZGJmZGY4LCAweDBmOGM4OTE1LAotCTB4OWE3NmVhOGIsIDB4ZmQ4MTllYjAsIDB4NzE5NGYxOTUsIDB4MzUzNGYyZjQsIDB4MzQxZjliNWYsIDB4MjdiOWI3MmIsCi0JMHgxY2RmMjVlMCwgMHg4MzFkYzdiYSwgMHg5NTk4MmY0ZiwgMHg2ODFmODg3MywgMHg2Zjk0M2MyNywgMHhiMjJmZmM4NywKLQkweDc2MjhmNzEzLCAweGFhZjI1OWEyLCAweDM0ZGU0OWYyLCAweGQ5NTczOTMzLCAweGVjYjFhZTg5LCAweDU3NGE4MmM0LAotCTB4ODJjM2EwNTcsIDB4ODJiYTdkZWQsIDB4NDNmODJjOTAsIDB4M2IyYzZhNWUsIDB4OWQ5ZmFlZjEsIDB4YmZjZmJlMmIsCi0JMHg0YTliNmQyMywgMHgyYWU1YzRlZCwgMHg4MmQ1MzEzYiwgMHg2ZjdmYTI3YywgMHg3NjkzYjk4MywgMHhmZmRiYTE0MiwKLQkweDJlZjM3ZDYzLCAweGYyMTg4OWQ4LCAweDRmZTM4YmJkLCAweDgyZDMxM2IxLCAweGE2Mjc2ODA1LCAweGRmMzUxNTRkLAotCTB4ZjMzMzZjNWYsIDB4NzY4NzcxNzgsIDB4MTZmNTI3MjIsIDB4NmI2ZTRiYWMsIDB4OTc3OWZlMGMsIDB4ZjNlZmMzZmIsCi0JMHgwNzE4M2MzYywgMHg1Y2I3YzVlYywgMHg0NmVkZWJmZiwgMHgzNzFkN2E0NywgMHhhMTNiMjMzNSwgMHg3ODQ1ZmZkNywKLQkweDAyZmFmNDU2LCAweDMzOWIyZmVhLCAweDQxMjFmMTYyLCAweDBiNzA1ZTdlLCAweGYwMDJlYmQ1LCAweDBiZWJkMzIzLAotCTB4MzE3MWU3NmUsIDB4ODJmNTllOWQsIDB4ZDZhMTFkOWUsIDB4MzJmZGVjYjMsIDB4ZTUwYmIzMWYsIDB4OTliZjE5MGQsCi0JMHhhZDZmZGI0MSwgMHhiNDcxZGM5NiwgMHhiZDUxYWRmZiwgMHhiYmQ2YTU5YiwgMHg3N2E0NzZkZiwgMHhmZGRlOTg4YiwKLQkweGZkMWMzODNjLCAweGY3ZDY4ZWE3LCAweDU0YjdkNzMxLCAweGM3NzVmNTlmLCAweDMzZTk4ZmUwLCAweDc3ZWY5YWFjLAotCTB4NzM3ZDBjOGUsIDB4OTc5MDI2ZDAsIDB4ZDczYzQ0NzcsIDB4ODBmZGM2M2IsIDB4MWNkZjQzN2QsIDB4ZTllYWYxMDEsCi0JMHhiYmU0NDY3MSwgMHhhZDllOWNiZSwgMHg4MTNjNTI3ZSwgMHgzNjc3MmZlMiwgMHhkNzRiYTdmMywgMHhiMmJmODg4YiwKLQkweDY1ZmYyNjdhLCAweDQ1YzA0MmI1LCAweDdkODcxM2ViLCAweGZjZmE4MjYzLCAweDhlN2NlY2VkLCAweDQ3M2YyMGFlLAotCTB4ZWZmOWZmNDUsIDB4M2M0MTU3MzQsIDB4MDEyYWZlNzgsIDB4MWYyMTE3Y2YsIDB4OTczOWYwMWEsIDB4M2RkMGIzZTMsCi0JMHhmYTJiZjcxZiwgMHhmMWU1ODMzYywgMHg3MmU0ZDU4ZSwgMHhkM2YxODc4NCwgMHhkZjNmZGU1MiwgMHg3MmY4YzYxYywKLQkweGY3MDRlZmZlLCAweDFmM2VkMjJhLCAweGQ1ZWZiNGExLCAweDMxOWY2MGE3LCAweGRjZjc1NmJmLCAweDExY2YxY2JkLAotCTB4NzE4YjVmYTgsIDB4NmQzYWQyZDQsIDB4NGZmNzFlN2IsIDB4NDFhMTg4ZTYsIDB4ZjU3ZjYwOWIsIDB4Y2IxZGQxMjcsCi0JMHgyMmZkMjlkZSwgMHgyN2ZhMjlmOCwgMHhlMjlmYjNmMSwgMHg4NzRmYzQ2NywgMHg5ZGMxNzk5ZiwgMHhhMWZlNWYxOCwKLQkweGUzZTNkMTc4LCAweGJmNWM3MTY3LCAweDQwMjMyMzBjLCAweDNjMTk4ZjFlLCAweGI3ZTQ1ZmE4LCAweDk5MjNjYzQ0LAotCTB4Y2QzZjY4ZmQsIDB4NzEzNzA0M2QsIDB4ZTBjNzc5YmUsIDB4NWYzYzgyYWIsIDB4OWJlNThjYjksIDB4YjBkOWFkY2MsCi0JMHg2N2Q2OTUzYiwgMHgxMGExOTFkNCwgMHg1MmJiOWU5NiwgMHhmNjIzOGY2YiwgMHhmY2M1ZGViZiwgMHgwMjBkOGE4MiwKLQkweGUxY2UxNWU0LCAweDA1MTUwOWRmLCAweDFiN2JjNTFlLCAweGVkNDg1ZjZlLCAweDZiM2ZlZDNkLCAweGU3MDdkOTk4LAotCTB4NjEyZGZiYTMsIDB4ZmYwYTlmZDQsIDB4ZjI2Mzg5MmUsIDB4ZTNjZjg4YjQsIDB4MDRmMGY3NDgsIDB4ODIwZDUzYjQsCi0JMHg2NDMyZTUxMywgMHhkMjhiNzY2MSwgMHg2ODkzZWUwOSwgMHg0NGQ1ZjMxYywgMHg4ZjE2MTc0ZSwgMHgyYzc0NjA2OCwKLQkweGI5MDM3NGE3LCAweGY1ZTQxODllLCAweGRlMGZlNjNhLCAweGNlYzMzYzE2LCAweDI1M2I4MmI1LCAweDQwODUyZjc2LAotCTB4YjlkZjUxOTIsIDB4ZDhhY2ZmNzEsIDB4Y2I2NzM4NDcsIDB4NzdkMTU1NDksIDB4ZmZjNjIxZmIsIDB4M2UzNzA1NmIsCi0JMHhmZWZmZDAwOCwgMHg0MDc2ZmExOSwgMHhlOTlmYzU1NywgMHgzYzE1N2QyYywgMHg3OWQxZDEyZCwgMHg3ZjI5YTViZiwKLQkweDA4ZDc5ZTM4LCAweDIzYTdiYzZlLCAweDBiZTc4ODk4LCAweGJkZDlhYjQ3LCAweGZlNzE4ZjEzLCAweGVjMDVjYmQ3LAotCTB4NjBmN2Q0M2YsIDB4ODcxMzBmNWMsIDB4MTY0OWQzN2MsIDB4NzFjM2ViY2MsIDB4YTY3Zjk5MzMsIDB4ZDY1MDhlZmQsCi0JMHhkMGZkMDFlNCwgMHhkMjcyOTUzYywgMHgzNDU5N2U4NCwgMHgzNGU3Y2NiZiwgMHgyNDlmZGQ4MywgMHg1Zjc5YjUxOCwKLQkweDlmZmI5NDYxLCAweGRmZGJmZTAwLCAweGM1YTQ5ZjA3LCAweGRiYjk3ZGExLCAweGY2MzY5ZWM5LCAweGY0MTkxMTMyLAotCTB4ZjkwOTMyZmIsIDB4ZWI4MzY2ZTgsIDB4MmZkMDZjYmQsIDB4ZTQwNDQ5MGYsIDB4MjM3ZGYzZTMsIDB4MDVkMTlmZGYsCi0JMHg4ZmU0NDVkYSwgMHg5Nzg2Nzc4MiwgMHg4MGE0ODg0MSwgMHg4MjkxMjZlNSwgMHgzYTVkOThmYiwgMHgyYmZmYzdjMiwKLQkweDAxOWVkN2I1LCAweDgzZjA0ODdjLCAweGY4MDE4OWZkLCAweDdiYWE2Y2FlLCAweGUyMGI5ZTY3LCAweDJmZjYyMzI2LAotCTB4MWJiMWYzODUsIDB4YmRlZjlkNzMsIDB4Y2U1Yzc0MDcsIDB4YmMzOTViZWUsIDB4NjlmNzE3MmMsIDB4YTAyNWRmNzcsCi0JMHhmNGE0MWQ5YywgMHg0ZDM3MzgwMiwgMHgzZGVmNzhjZCwgMHg5N2RiYmYzYSwgMHhkNzM5ZTBhNSwgMHgzNGNhNGYwYywKLQkweGIxOWFmNzM4LCAweDY4YmI3NDRmLCAweGQ5ZDc1OWJmLCAweDM2NGU3MDZkLCAweDdjNDhhMDY1LCAweDRlZGNiYzJhLAotCTB4MzM0ZTMwOWEsIDB4OWJhZWUyYTMsIDB4YTg4YTRlNDAsIDB4NTQ3Yjg0M2QsIDB4ZjNmYjgyOGEsIDB4NDZiZDQyYmEsCi0JMHg2NWNiZjdjMCwgMHg5ZDJiYTk5ZiwgMHgzM2NhZDM1ZiwgMHhmYzc0MTFhNiwgMHhkMDBmZGE0MiwgMHhmYWMzNWU1ZCwKLQkweGRjMTFhZjk1LCAweDE4NWJhYTkwLCAweDY0ZjUxNDdjLCAweDJmMDExYWUxLCAweGZlYTI2OGFhLCAweDFiODMxYzZmLAotCTB4OWI3MGEzODgsIDB4YjRmYmU4NmEsIDB4MDdkZTE3M2UsIDB4YTcxMjZiYjgsIDB4Mzk1Njc5YzEsIDB4M2ZiZTI3OWQsCi0JMHgyNWNmMTJiYSwgMHhiNDdiZTkwYiwgMHhiOWFkMzQ5OSwgMHhhYmNkZTEwYiwgMHg2ZjdjMDgxMSwgMHhlMzNhMzQ1NCwKLQkweDZmMDBkMTkxLCAweGY2ODZlNDlmLCAweDE2ZmU3N2Y3LCAweGQyNjY0YWYzLCAweGY4NTFiYWYxLCAweDNjZTZjNGIzLAotCTB4MmZkZGFiOGMsIDB4OTNiZWYxMzgsIDB4ZWU1MTdkZDksIDB4OTFkY2I4ZGEsIDB4YjlkODdkODEsIDB4ZWY5NDQwYjQsCi0JMHhmY2VhOGM3ZSwgMHg5NjE2NDE4NCwgMHhiMGI4NWQwNywgMHhkNWQ2MGFiMiwgMHgxODY0YTcyYywgMHg5OGNlOWY5MCwKLQkweGE1MWY4ZWMwLCAweGZmNTFmNmY4LCAweGU1ODk4OGY1LCAweDQ3Y2EzNDNkLCAweGZkMmFjZDRjLCAweDA3ZDJkOTM5LAotCTB4NDM3NjcxZTUsIDB4Mzk5OWVhMGUsIDB4ZTdlNzhiYzQsIDB4OGZlNjRhYmUsIDB4MDk2YTVhMWMsIDB4NDk4N2UwMDgsCi0JMHhkZTc4NzRjZSwgMHhjZjhjZDRiOCwgMHg3NjYyNWY1YiwgMHgzMzU3YjVhNywgMHhkNDRmNDNjNiwgMHg4N2JlMDQ0OCwKLQkweGU3ZDM1YzVhLCAweDg5ZTNhMDI5LCAweDEzOWUxMmY1LCAweGE4NDhjZjhiLCAweGM0YmVlNmNmLCAweDM1OGQ2NGUyLAotCTB4NWE4OWVlMGMsIDB4OWY3MmRmYTYsIDB4ZTgyMjY5YjksIDB4OTU2YmI5ZWQsIDB4MWVhZDY1NzMsIDB4YTMxNTc0MmIsCi0JMHhjMmM2N2E5ZSwgMHg1ZjVlOTJmNCwgMHg1MTU0ZjVlOSwgMHg3NmQ4YWFmNSwgMHhiMTg5OWVlOCwgMHgyYWNmNTBlZCwKLQkweGMwZWNhZjE2LCAweDliMTM5NzNlLCAweDQxODZhN2EyLCAweDY5NDE0OTVlLCAweDgxMmI5OWFmLCAweDg5Njc2ZjlmLAotCTB4MmRhMTRkZGUsIDB4NzYwOTNlNWYsIDB4Zjc4ZWM0YjcsIDB4OWQxOTk1MDMsIDB4M2Y4YzA5NGYsIDB4MTlmZmU4MDgsCi0JMHg4MjVmMGRjMSwgMHhiMGNkMTQzYywgMHhjNzNmZmRlMCwgMHg0NzIwMWU4MSwgMHhkY2YxOTIyYiwgMHg4MDUwMzBiMywKLQkweDJlZjI1Nzc4LCAweGYyZDRhZWU3LCAweDdkY2U3MmJiLCAweDFlMjQ0ZjhiLCAweGIyMmFmZGI1LCAweGRmYWE4ZjEyLAotCTB4Zjk0NWZmZmIsIDB4NDc3MzhlOTYsIDB4MDhiMDEwODMsIDB4ZTdiNDNmNTAsIDB4ZWViMDIzZTcsIDB4ZTQyZDc5YzQsCi0JMHgzYjBhYzFmZSwgMHhmN2ZiZjVmMiwgMHg3YzBhNTk5ZCwgMHg4MTAxZjMzYiwgMHg2NDRlZGY4MCwgMHhjM2Q4MTU1ZiwKLQkweDBiODI5NWIyLCAweDFmNzNiM2UyLCAweGE1Y2ZlZjYwLCAweGRmYmNjM2VmLCAweDJmZTMyZGZmLCAweDkwMmVlN2NhLAotCTB4NDc5YWIyODMsIDB4MzVmZjYwZjcsIDB4YmZlMDBiODIsIDB4ZmQwMGFhYmYsIDB4MjQ1OTIyODksIDB4MTBlNmJlZDgsCi0JMHhiZGE4MjNlZSwgMHg0NmEzZmNjMiwgMHgzOTA1NGM1OSwgMHg3NjYyNWIyOCwgMHhjMmI3NzljMiwgMHgxZTdmMGE0ZiwKLQkweDkzNTFkZmUyLCAweDFiOTBmNzM4LCAweDAwZTc3YmU5LCAweDE0YmUwYzQ4LCAweDdiMTEwYmE3LCAweDJlNTNmYzBhLAotCTB4ZjQzYjdlMzMsIDB4MTEwNmU0OTIsIDB4YjI3ZjM4YjksIDB4ZmUxNTY3ZWYsIDB4NDZmZjgxMTMsIDB4YjFhZmY5NDQsCi0JMHhmYzA0ZDcyNiwgMHhlMDIwMjI3OCwgMHhmMDJlN2NiOSwgMHhlZmU3ZjAyZiwgMHhiMTBjZjg5NSwgMHg4YmE4ZmRhOSwKLQkweDBmOWVhN2YxLCAweGU1MWZmMWRiLCAweDBhZjNkMDNiLCAweGE4ZmMyYTdmLCAweDQ2YzNjM2U3LCAweDdkZTYwZDMyLAotCTB4YWUwYjUyZjcsIDB4Y2I2YWI3MjMsIDB4Y2U0Yzg1YjQsIDB4YjcyNzNjZjAsIDB4OTA1NGJlZWEsIDB4Y2IyMzQyZWIsCi0JMHg1YWYwNTBmYiwgMHg0Mjc5NjQ2YSwgMHg0NGY1ZTZlZCwgMHg2NzViYTlhNSwgMHg0NzliYTdlNiwgMHgyYTNkOGIzNywKLQkweDYzY2IyMjBmLCAweGRlNzFkMTA5LCAweGU2M2NmZjVjLCAweDc3NWU5ZGQzLCAweDZmZjQ1YWU4LCAweDAwM2U1MWI2LAotCTB4OTNiN2FmZmMsIDB4MDI0M2VlMTAsIDB4ZWI4YThmYTgsIDB4MWJlNjBmNDUsIDB4Mzc1OTQzMWEsIDB4NGFlZmY2YWEsCi0JMHg1N2ZjYzRmZSwgMHhlMmVmODhlYywgMHgzZTQwZTY4ZCwgMHhmMzc4YmY3ZCwgMHg4ZTc4MjE5MSwgMHhkZmY5ODhiZCwKLQkweGZkMDEzYWYyLCAweDBmMzcyMjYzLCAweDhhM2RlZjgxLCAweDQzOGYyYzhkLCAweDYxM2MxN2VmLCAweDk2ZjBmYjYxLAotCTB4ZTBlOWQ2MmQsIDB4ZWNiNTA5YjcsIDB4YmFlMmFmNWUsIDB4MmFiMzI1OWIsIDB4NDViMGZiYmUsIDB4YjllMWZhNTIsCi0JMHgwY2U5NGM4YSwgMHhmY2MzNTVkZiwgMHgyOTRhZjdkNCwgMHhiZjJkMWJmOSwgMHhkYzU3ZmM2NywgMHg1NzNmYTEyMCwKLQkweDE1YTFiYjVjLCAweDBmOGFmM2YyLCAweDViYmY3MTlhLCAweGYzMDY3YjVlLCAweDc5NWY3MzhmLCAweGQ2M2ZkZDg5LAotCTB4YjJmMjZhMjAsIDB4ZDU0M2U1ZGEsIDB4NTFjZTc4OGEsIDB4Nzk4YTVmNTYsIDB4ZTc4ZWI0MWMsIDB4M2M3NTY1MWQsCi0JMHhlNjA3ZThmZiwgMHg2NTdmY2NlYiwgMHhhMjk5NjZmYiwgMHhkZmE2ZmU3MCwgMHhiMDllZjAzOSwgMHhmYzBlYjVhNiwKLQkweGZiZjZhNTRlLCAweGU1ZGIxM2YzLCAweGU3MmRkNTNmLCAweDljZDc0ZmY5LCAweDYzMWZhODIwLCAweDBhN2QzZmU3LAotCTB4OTQ3YjgwZmYsIDB4MjdmY2RhMmMsIDB4MWJmNGNiNTIsIDB4YWM1NjY3OWQsIDB4N2UyMjEzZWYsIDB4M2U1ZjRiZDcsCi0JMHgyZGJiZjkwYiwgMHgxNjdiM2YxYiwgMHg4ZmYyNWRlNiwgMHhiYzg1OWZjZiwgMHgwOWQwMGEwYywgMHhiYWY5NGE3ZSwKLQkweDUxZGYzMTc3LCAweDg1YTBlZjc5LCAweGZmN2U4M2VmLCAweDZkMTdjYzNiLCAweDA2ZWNjMGZkLCAweDRmZGJhZDY4LAotCTB4ZDFmZjgzYTQsIDB4NTQ5YmUxYmEsIDB4NjdiZDAzYzgsIDB4NzdjNjFlN2IsIDB4YjczNTc5ZWUsIDB4NmYxNTg5MmIsCi0JMHg2ZmYwMjVlMywgMHhhYWY5MTNhMCwgMHhkNjM1YmE3YSwgMHhjOGZlNjIzNywgMHhkMDc3NGE2OSwgMHhiNmJjOTExMywKLQkweDJmOTY1MmJhLCAweDZjZjllMmU4LCAweDA3ZTc2M2ViLCAweGFiNWZjYmI3LCAweDJiYmFmMWJmLCAweDMzZDYzZjQxLAotCTB4NzlhMmUxM2YsIDB4M2QyODA3NmMsIDB4MWQwNGVmMmYsIDB4YzU3Y2YzZDcsIDB4MzdiZTZiYmEsIDB4ZmMzNGVkOGYsCi0JMHgyYmViZDI4MywgMHhmMDFmMzY4YiwgMHhjZjM5ZmFjYiwgMHhmNTZkMGQzZCwgMHhiMWU2MWRjOSwgMHgzZjgxM2E4NSwKLQkweGQxYjhmZjI1LCAweDgzYzQzMWUyLCAweDExN2M2ZDFjLCAweDdlODEwN2YzLCAweGQ3ZDAyZWY5LCAweGJjNDNhNjVmLAotCTB4YzYxNGE0ZjgsIDB4YmI3ODQ0YjgsIDB4MmI3YmJmMTksIDB4Y2EzZWZlZGUsIDB4ZmJhYmViNTMsIDB4ZjA5N2JmMzEsCi0JMHgxMjU2ZTAzYywgMHg0ZDdjYjFmOSwgMHg1ZjJhMDMxZSwgMHg2ZmY5Njc2MywgMHgxZjkwMGU5YywgMHg3M2UwNzJlNywKLQkweGY4YzcwNzllLCAweGViOGZjOTVhLCAweDZjNmUyZjI4LCAweGUzOGIyNjdjLCAweGQyZThiY2YxLCAweDNjZjIxZjM1LAotCTB4ODRkZDI4YjMsIDB4NDNhZjQwZDEsIDB4YTg3NzliZGYsIDB4NzgwOWMxZTAsIDB4ZmJjZWE1MTgsIDB4MTg4NzlkOGMsCi0JMHhkMWQ0ZmJjOSwgMHg3YTA5ZTgwZCwgMHg0OWQ3OTIzYywgMHhiZjIxM2RlYiwgMHgxZmJjMjAyZiwgMHg3NWI4OGYyYiwKLQkweDZkMTdjYjE1LCAweDkzZGZiNDk1LCAweGYyYzRlOTQ2LCAweGViYzY0NzQwLCAweGI5ZDAzNmU0LCAweGFkOGJjZmZjLAotCTB4YTllMjg3ZTMsIDB4YzM0YmJjNWYsIDB4NWFiZTBhMzcsIDB4ZWZkNmM3Y2UsIDB4N2Y4NWUzZDMsIDB4ZDlhYjdiZWUsCi0JMHg4MmZiZmU4MiwgMHhmYmUxZTM5YiwgMHgyNjQzZmE4MiwgMHhmMThiZGY4MiwgMHhkZGYyOTU3ZCwgMHhiNWI3OGYxMiwKLQkweDdmMzExM2FjLCAweDExYWVhYWIwLCAweDdmNWViYmY1LCAweDE0NzNmMTk0LCAweGUzOGI3Y2ZkLCAweDZiMmFkZTk5LAotCTB4NjVhM2Y2NjAsIDB4YTM2MDNkYTMsIDB4ZDhkZTVhNzAsIDB4YjY1ZDdjODIsIDB4ZjIwOTkwZmUsIDB4NmVkNGY2YjEsCi0JMHgwM2JjYjEzMiwgMHgzZjYwNDcyNiwgMHhiN2Y5YWEwMiwgMHgwODczYmNiYywgMHg5ZjdlNzNlYSwgMHg4NTljN2U5MSwKLQkweDYwZjI5YzdjLCAweGQ3Y2E3MWVjLCAweDMzOGNkMTlmLCAweDM5MzNhZTVmLCAweGVmMWYxNzZkLCAweDY2ZTdhMzUzLAotCTB4MTM2OWY3ODAsIDB4YWQzZWEzZjMsIDB4ZmFjNTI3MTMsIDB4NzhiNmU2YmUsIDB4YWJhYmVmODksIDB4M2I1MGZjOTksCi0JMHhkOTNhZjc4YSwgMHhhMjRlM2RkOSwgMHhiMmZkMWUyMywgMHgwZmEzZWM3YiwgMHhmNzgwZmRjMiwgMHg0Nzk4NGRkOCwKLQkweGU3OTJiOGIxLCAweDNiOTdmYzVkLCAweGQ4YmRlODBkLCAweGY5ODEzNTdlLCAweGFhZmMwNTJlLCAweGQzOTJmN2Y2LAotCTB4OTM5ZmMwNDcsIDB4ZDQyM2JjZDIsIDB4ZmNjYTMwZTcsIDB4MjQwYzVkNGQsIDB4YjdiZjNlYTAsIDB4ZmIwYWVhNGYsCi0JMHg3Yjk0NjI1MywgMHhjZGFlM2NjMiwgMHg3NjA4Y2FmYywgMHhlMmNmYzliMSwgMHg5MWZjZTRmYiwgMHhjOWJjZjBiZSwKLQkweDRjOWRkY2U4LCAweDEwNGQzNmUxLCAweDZkOWExMGRjLCAweDdlMGNmN2NmLCAweGQxZTBjZTI0LCAweDM5MDk1ZmRlLAotCTB4YjNiZWIwZjgsIDB4ODlmYTAzNmUsIDB4NDljODQzNzYsIDB4YTViYjEwYmIsIDB4YjgzNzBkMjksIDB4YTYzMmUyMmUsCi0JMHhlNjNjZWE2MiwgMHg4ZmU0M2ZhZiwgMHhlN2RmMGJlYiwgMHg1Yjc1MDgzOSwgMHhhOGRiOWZhMSwgMHg2MTIxNmZiOSwKLQkweGZmNzc1MWI0LCAweDk3ZDAzOTAyLCAweGU3MWIxZmRhLCAweDY3NWUyNTU3LCAweDcwYTZmZjY3LCAweDg3NWVmMTliLAotCTB4MTJhNDQxYzQsIDB4ZGQ4NTc3ZDgsIDB4ZTNjNGZlODcsIDB4NWY3ZTBmMGUsIDB4MjEwMzdmNDYsIDB4YzQ4OTIxZGYsCi0JMHhjMWY3ZDViYiwgMHhmNzM1NzFkMCwgMHgzNTcxZDA0YywgMHhiNjhmNDRmNSwgMHg3OGM5M2M5ZSwgMHg0OWJkOTYzNCwKLQkweDI4OThmM2U2LCAweDg5MGYxMGRhLCAweDJmZWUwNjc5LCAweGE1ZmJmMjdiLCAweDk4OWRlNzQ2LCAweDY4MjFkYzQyLAotCTB4Nzk4NmM2YmYsIDB4NjRiYzU0ZTMsIDB4MzY2YzNhZjUsIDB4ZmNlOWJjZWQsIDB4NjEyMjdhMzQsIDB4NjA2Y2IzNTAsCi0JMHg3NzNjZDRmMywgMHhlYjgwOTcxMiwgMHhkMzlmNjhmNywgMHg3ZmVhNmFmOSwgMHhjZGY2ZTc4OSwgMHhlZmEwOGM0OCwKLQkweDg0NGQ3MTZjLCAweDA2YWNmZmUzLCAweGRlOGM0YmRmLCAweDRjYzI1NGE0LCAweDRlOTNjYzI2LCAweDQ4M2ZiZTEzLAotCTB4ZTNhMGViZTAsIDB4MjEzYmZhNmIsIDB4ZDdjNmMwN2EsIDB4OWQzZDIxYzIsIDB4MmYwNmVmZWEsIDB4YzZiMDc2ZTcsCi0JMHhmYTBhM2RlYSwgMHgwNTc3YWIyNiwgMHhhNzY2ZmEyNiwgMHhjM2EzOWUwOSwgMHgwYmIwNWI2OSwgMHg4NWNjYTdlYSwKLQkweGFkMDhlNGI5LCAweGFmOGNkNTBiLCAweDI4MjBhZWZhLCAweDJjYzM3ZDM3LCAweDg5MmM4NThmLCAweDFjZDUzZjQ3LAotCTB4MzBjYjY0NDcsIDB4Yzg4YTFlZjgsIDB4MjUxODMwZDIsIDB4NWM5ZmNmYzAsIDB4OTQxNDBjOGIsIDB4MzVlNTE5NzEsCi0JMHgzYzMwNWVmYSwgMHgxMjg3MzBkZSwgMHgyODlhMGVhMSwgMHg5ZWYxNDNmYywgMHhhYWZjNjFjZiwgMHg4NjY5N2RlYiwKLQkweDc5M2NiMGExLCAweDk0NmNhZWU5LCAweDYyMjA0YmRhLCAweGVmZjRhODY4LCAweDRiMjU3YmRlLCAweDlmN2I4MWY5LAotCTB4MGRkZmVjODgsIDB4YTk1YWI4NzYsIDB4ZGYwZWM1NTMsIDB4NDdjNzU3NmIsIDB4YWEzODllZWEsIDB4NTkzM2FiZWYsCi0JMHhiZmQ4Nzg1ZCwgMHg0MjRmNTk3NCwgMHgwYWYwNGIxZSwgMHg3MTA3ZDA1NiwgMHgzY2YxNGJjZSwgMHhlYjg0OTQyYywKLQkweDUxN2Q5OGJmLCAweDRkNzAzOWU2LCAweDExZjhjNGYzLCAweGY3MGE5ZTJjLCAweDQ3YjNmNjhhLCAweDdiNDZjN2JlLAotCTB4ZDRhNmQ2YmMsIDB4ZjBiZmI4NDMsIDB4YmQ0N2VmZDYsIDB4MWZiNzVhNTYsIDB4YTc1MDBkZGIsIDB4ZTZlNGVmNjUsCi0JMHgyOTEyM2Q4OSwgMHg3OWQ1YWM1NiwgMHg1ZjgwOTc2OSwgMHhhMDY2OTA1YiwgMHg1YWM0YmNlYiwgMHhjMWE4ZGJiZCwKLQkweDNjMWExM2MzLCAweGE2M2QxNzE4LCAweDNmNjNjM2MzLCAweDNjOTcwZjA4LCAweGExZTIxOGZjLCAweDdjYTZlYmIzLAotCTB4ZTk0YWQwMzEsIDB4ODBjNzI1MzcsIDB4M2E4ZDM3ZjcsIDB4MGJmOGMzNjgsIDB4MWVkMDU5ZmQsIDB4M2FhYjM4NzEsCi0JMHhkOTU2OGVmOCwgMHg2ZTM4NTBhNywgMHg5N2YwYTM4MCwgMHg1N2MyOWVmMiwgMHgxZjRkZjExZCwgMHhkZDk0YmNlMiwKLQkweDlmZTVhN2ViLCAweDBjNjdhYjAyLCAweGY1NmIxYmMwLCAweGUwYTViMzFjLCAweGVlYmJmMWZhLCAweGVmMDJiZTI5LAotCTB4NWYyOGU0ODQsIDB4Mzg2ZjliMTMsIDB4NjM1YzI3N2MsIDB4NTViYzczYmQsIDB4OTI5ZGFmMTUsIDB4YTRjYzQwYjMsCi0JMHg1OTA1Y2RmMywgMHg0ZjVkMTkxOCwgMHhkMmQ5NDJjYSwgMHhjNTMzYWU5ZiwgMHhlYzNjYzA2MywgMHgxMjZmYWIxYSwKLQkweDFlOThlMzhjLCAweDQ4ZjU1MTBlLCAweDcwZGYwMDVkLCAweGEzOGU4YzQxLCAweDc2ZDU0N2M4LCAweDJhYWY4ZmI2LAotCTB4YjExNjA0MzAsIDB4ZTAwMTYwZjMsIDB4NTlhM2Y5NDUsIDB4YzY2MTFmYzcsIDB4OTA4NzBkMWYsIDB4ODc4MmNhM2YsCi0JMHg1NDM0N2YxOCwgMHhlN2U3OGY4ZSwgMHhhZThmYjA2YSwgMHg0MGExZTEyNiwgMHg1N2Q2OTlmNywgMHgyOGJkOGNmMiwKLQkweDU1YzM1OGRmLCAweDQ4NWYyODNkLCAweGZjYmNmYWYyLCAweDMzYWYxMDRiLCAweGNmODdkMjYyLCAweDQ3NTc1OTRiLAotCTB4OWJkZWFkZjQsIDB4ZDgyMGYwZjksIDB4ZTAzM2VlNjcsIDB4Mzc4Mjk4NzksIDB4MmI2MmRmYTUsIDB4NjYxY2IzY2IsCi0JMHhmYzAzY2RmNywgMHhkZTZlOGY5NSwgMHhiOGRiZTQwMywgMHhkNzk4Y2ZmNywgMHhjMzc3ZDhlMSwgMHgzMWRmNzg0ZSwKLQkweDE1Yzg1Mjk1LCAweGRmN2FiNzFkLCAweGI3YmZiYzIyLCAweDQwMDNhZTlhLCAweDBjYjA5MDI2LCAweDdjNjNiZDc2LAotCTB4ZTA4OWY5MzAsIDB4NDE5ZWZjMDMsIDB4Mjg0MzhmODAsIDB4NzdmOGViMmYsIDB4ZjBlZTU0NDUsIDB4NTZkZWRhM2IsCi0JMHgwM2MzYmY3NiwgMHg1MjA3OTY1NiwgMHhjOTc5MTU2ZCwgMHg3ZDk0YjBmYywgMHhmZmIwNGQ2NywgMHhjMDYyNWYyYSwKLQkweDBlNTAyOWZlLCAweDA5N2ZhZjUyLCAweDFhYjZhYmY2LCAweDBhNzRmOTM1LCAweGEyN2UxNTVkLCAweGY3MGFkNDlhLAotCTB4ZTg5NTVjNDQsIDB4OWZlNWFlNWIsIDB4MGFhNjZiMjQsIDB4MjNkZWYyOWUsIDB4NGQ5ZGUyN2UsIDB4YWVkNDY1MTksCi0JMHhiYjA2ZWYzYiwgMHhkMGE3Zjk0YSwgMHg1M2QzYjJhYSwgMHhjMDE2NGIwNiwgMHgyODdmODQ1YiwgMHgwZmEyYzY3ZiwKLQkweDMwMzdlZjdkLCAweGZlMDM4YzFlLCAweDBiNWQ4NmMyLCAweGU4NzczODQ0LCAweGUwYjM1ZDJjLCAweDNmZGEzYTFlLAotCTB4MzYyYTRhY2IsIDB4MTJiM2Y3ZDIsIDB4NjRmNTA5NjgsIDB4ZWJjYWVmNWUsIDB4ZTdkOTU4M2QsIDB4YTA0MWI3MjMsCi0JMHhiOGYxNTdjZiwgMHg5ZTU2MmJlYywgMHg1ZTc0NjAzNywgMHhiYzVjZjcwYSwgMHg5ZDlhZjFjMiwgMHhhMGJiNDU2NiwKLQkweGEyOTFhZGM4LCAweDhkYjVjZTBmLCAweDMzM2I3Y2ZjLCAweGJhMDA2OTljLCAweDBjNmM3MjI5LCAweDZhNzY0MjFiLAotCTB4MmU4ZDMyYjQsIDB4YmMzOWU0MDMsIDB4ZTE3OWY3ZTUsIDB4YmQyM2IwYmMsIDB4ZWMyNWY1NzMsIDB4ZjNmZDNmYmIsCi0JMHgxZjlmM2U0NiwgMHhkZDdmNWZlZCwgMHg0NmUwZmJlZSwgMHg1YzY5NmZjMCwgMHhkMDM3MjNmMywgMHg5ZjI1ZDk3YSwKLQkweDkxNzY5YzYzLCAweGY1MGFlY2I1LCAweGQ0YmU5ZTc5LCAweGYzYWRmZmNmLCAweDFmZTAxYzI3LCAweDllNmQ3ZWI2LAotCTB4ZmVjZmNiMTQsIDB4ZGZmY2NhY2EsIDB4ZjhlOWZlYmQsIDB4MjE3N2UyOWUsIDB4YWIyNzQwYTksIDB4NjMzNDJmYmYsCi0JMHg1NWQ1N2U4OSwgMHg4ZTgwZjJhOCwgMHhlYzA5MzFiMiwgMHg5OWM1OTVhYiwgMHgyYmJlZTljNiwgMHhhZWM3Y2U1NCwKLQkweDVmYjhiMTBhLCAweGU4MzNlODE2LCAweGRkODMzNWRmLCAweGYzMzVmZTU3LCAweDdmZThlMjhmLCAweGM3OTRlZTcwLAotCTB4MzJkZWM5Y2YsIDB4NjlkYjE2ZmEsIDB4M2IwOGI3YmYsIDB4YTg0YWNkNmYsIDB4OTNlZjg0NjgsIDB4Y2YwMzM5ODgsCi0JMHhmNjg4NzMyYiwgMHhlNGFjYWZiZSwgMHg4ZjM4MDllYSwgMHg0NzljMGM4NCwgMHhiZGFlOWM2ZSwgMHg0MDM0NmNhYiwKLQkweGNjMGM5ZjdiLCAweDJhMjNjYzU3LCAweDIzY2U4Y2JmLCAweDc4YzEwZmFiLCAweDI5NzAxOTE2LCAweDE5NGQ4NWU2LAotCTB4Yjc5ZmY5NDgsIDB4ZWNjYzBlN2YsIDB4NDI2NzExYjcsIDB4NzY0ZmVmNTQsIDB4YTA5ZGUyZGQsIDB4ZGRhYTViZjEsCi0JMHhmZWRmYzdhMCwgMHg1NjIzYmM0ZSwgMHgzNjc1YzVmZSwgMHhmZDdiOWZjNiwgMHgwM2U0MmY1ZSwgMHhkZTNjZjFlOCwKLQkweGJiYjEyYzI1LCAweDhmNWJlM2RhLCAweDE1ZmUzZDRmLCAweDk4ZjFlYWJjLCAweDQyN2I5MWYzLCAweGU5M2MwYzUyLAotCTB4YmYzZDEyZjEsIDB4YmEwMGFjMGMsIDB4ZDExNDBkZTQsIDB4ZDA3NDI5N2UsIDB4Y2JmNjg5ZTMsIDB4NWY2ZjdlODcsCi0JMHhmOWMxZmI0MiwgMHgwOGMyYjhhYiwgMHg0MzM3MmY3NiwgMHg0NTdmZGMyMCwgMHhjMjJmMzZmZiwgMHgyNTdmY2MxZiwKLQkweDM3NDhlZDVkLCAweGUzZGI1ZTNkLCAweDk3OWY5M2QxLCAweDFlZGY1ZDFhLCAweDM3ZTYxN2MwLCAweDNlNDAwZmI5LAotCTB4YzI0ZGEzNTksIDB4MWM2ODQ5NzEsIDB4YmM3YmU3NTEsIDB4MDRlNGYxMDIsIDB4YmJlZjFlMWMsIDB4YWE0MGM3MWIsCi0JMHg1NzYyYWVmOCwgMHhmZjI4ODhlMiwgMHhlYjVhZmI4YywgMHgyNzA1ZTZlNywgMHgzOWZmMDI5ZSwgMHgwNGI3YzEyYiwKLQkweGNjNDRhNmUyLCAweDhhM2EzY2MwLCAweDNlNWFjM2JmLCAweGNkNmJmY2UzLCAweGY4YTEzZTQwLCAweDBjNDNiNmQ0LAotCTB4NjY0ZmRlMDcsIDB4NWQ0ZTc5ZWQsIDB4ZjRjZjhlYmIsIDB4ZWNmODU3ZWIsIDB4YTYzMDc4MTUsIDB4M2UxNGJlM2QsCi0JMHg3ZWUzNjg5YiwgMHgxM2QyNzc3OSwgMHg1YjIxZTRmYywgMHhkZTgwMjQ0NiwgMHg5OGE0YzEyNiwgMHgwNzUxODhmMSwKLQkweDljMzgxMWJkLCAweDA1MWY5MTVmLCAweDc3M2M4YmUyLCAweGY0MjdmOWY2LCAweDhlYjUxMzU3LCAweDFjYzBmOGFhLAotCTB4MmQ5Yjc3ZDEsIDB4Zjg1MmZlODYsIDB4Yjc0ZTRhZTMsIDB4MTNiYzg5MmIsIDB4MTI1NzRiZTIsIDB4N2Q5MTE3ZTMsCi0JMHhmZDc0NDY0MCwgMHhkZTNjNmNiMywgMHg4MGY0ODNkMiwgMHhiYWIyZWU3NSwgMHhhZjk5N2VkOCwgMHhlYTZlYjIzMywKLQkweGIzZGQwMjU2LCAweDcxZDlmOGY5LCAweDgzNGVmYzM2LCAweDExMmQ4ZDg0LCAweGJkZTI2N2ZjLCAweDI5MjliMjM1LAotCTB4Zjc4OTBmM2EsIDB4ODQxNWU5MjcsIDB4ZjAzMzcxZjksIDB4MTc4YTVjYmUsIDB4OWQxYWMxNzIsIDB4NjA5YjQyYzcsCi0JMHhmODVjN2JjNCwgMHhjNmQ3NGUzYywgMHhiNmRmOTBjOSwgMHgwMDNkZjQ0ZSwgMHhmNjExNmNlYiwgMHgxOWY1YzEwZCwKLQkweGVlYzFmZDQzLCAweDZmM2ZkYmU5LCAweGVkMDY1NWQ4LCAweGY2MjE1ZmI0LCAweDJmOWZmM2UzLCAweDc4NDNiOGIyLAotCTB4M2FiMDM5YmIsIDB4OTRmZjYzYTMsIDB4MDdkYTM1OGEsIDB4ZTFiMjJlNDUsIDB4NDFjYmM4YmIsIDB4Y2MyMmMyY2UsCi0JMHg1M2NmYzgzYiwgMHhjMjI5OWM3NiwgMHgzODg3YTBmZCwgMHhlMTQ2NWM5NywgMHgxMTNiM2VlZCwgMHhhOTczZjlmMywKLQkweDdhN2U4MWJhLCAweGI3ZjNkN2JlLCAweDkwMjc5ZjllLCAweDRmNzg0Y2YwLCAweDM2M2ZjN2NmLCAweGRmZjE0MDBmLAotCTB4OTA3MzdjMjIsIDB4ZWVjYThkZjIsIDB4Zjk0MmZjMjksIDB4NWQxYjc5ZTcsIDB4NjM4OGRiNzcsIDB4ZmRiYjgxNGYsCi0JMHg1M2NmODhjZSwgMHhmZTI5ZWVjMSwgMHhmMTBmZDQ3OSwgMHgzYWZkMDBiYywgMHhmZjE1ZDNmMiwgMHhmN2NkOTM3YywKLQkweGMyMzNmNDEyLCAweDk5ZmJlODdhLCAweGY4MDY1ZDAzLCAweGNkOTBmZTdlLCAweDU3M2MzMmYzLCAweGVkOGI5NmZjLAotCTB4MjMyZWM4MzcsIDB4M2JlNzQ4MTksIDB4Y2VhMWQzOTMsIDB4NTkzZWYwNDAsIDB4ZjY4MDgxNzksIDB4OTYxMjc2ZWMsCi0JMHgyYmRiYmM2MCwgMHg3NmJlY2QyNCwgMHhjOWZjMjVhNiwgMHg1ODdlNzBmZCwgMHg5OWVkMDAzOSwgMHgxNGZhYmUwZiwKLQkweDhmOTY3ZGYxLCAweDEzYmZjNTVjLCAweDBmZWUxODE5LCAweDE2M2JiZWZiLCAweDQzYzdkZjZhLCAweGJkZThhY2MyLAotCTB4YmVkMDlmOWQsIDB4NmUwMDkyZGQsIDB4ODc3YzBhNzMsIDB4ZmI2YjIwNWIsIDB4ZDY1N2M3ZWIsIDB4N2ZhYjg3YTEsCi0JMHg2M2RmOWNhZiwgMHhiYjIyZjcwNCwgMHg5ZmMyZmU1NSwgMHg4ZDhmY2M2YywgMHg3ZTJkZjdjYywgMHgzN2M1MDE4ZiwKLQkweGMxYjNkNWQ4LCAweGM1MGYwMjRiLCAweGY0YTU1ZmUwLCAweDhjN2IyNWM1LCAweGU2ZjVhM2MzLCAweGIxZTllNmVkLAotCTB4YzY1MTE3ZWUsIDB4ODMzZGYwNTEsIDB4ZmNmODI5MzQsIDB4NjVmZjE2MzYsIDB4YzAxYzU4ZmIsIDB4NzM0ODQ0ZjAsCi0JMHg3ZDk0YWY0ZSwgMHhkZmQwMTNjMywgMHhhMDI3NWJlYiwgMHg5NzUyNWQ3ZiwgMHhmMWE1OTg2MywgMHhiODNlZDlmMywKLQkweGY3MGY5ZjlkLCAweGZhZmY0MDVkLCAweGFmY2ZjYzlkLCAweDQyZmRjNGFiLCAweGY3ZGIzZDQ5LCAweDVjZWY4MmFjLAotCTB4MGM4OWYzYmEsIDB4YjIzZmZmNDIsIDB4YTliYzg1OWYsIDB4OTA0N2I4NTIsIDB4NTNlMDg3YjUsIDB4YWNkNTNlZjUsCi0JMHg4OTdkYjI3ZiwgMHhmNjExYjk2OSwgMHhjOTM0YmVhMywgMHg1YWJmZWI0ZCwgMHhmNzQ3MTU1ZSwgMHhjNDE5NTU0ZCwKLQkweDI5YmVlODQyLCAweDI3Y2I1N2YxLCAweGI1NGQxOGFlLCAweDIwNDc5MjczLCAweGIyYWY1ODg5LCAweGZlZmNlOThkLAotCTB4Y2I1N2Y5MzksIDB4ZTM2NTk2YWEsIDB4YWVkZTJiYmUsIDB4MjQ3NmNmZGEsIDB4MmU2ZGU3MWYsIDB4ZmI0NzYzYzQsCi0JMHhiYzEyYzdkOCwgMHgzYzU1NzZjOSwgMHhiM2ZmNGY0MiwgMHhlMDA0YWU3MSwgMHg3ZjdjZTViZiwgMHg1OWMyZjU3ZCwKLQkweDBjYjA2ZmI4LCAweGY5MGU5ZjM4LCAweGVlOWNkOTYxLCAweGIzOGYzYjJlLCAweGRjZjdkOTVhLCAweDAwZjRkNmU1LAotCTB4NDU2YmE5ZTgsIDB4ZDllNjBiOWYsIDB4ZmVmOWM2ZjYsIDB4NmI3ZTQ3MTAsIDB4YjdkYzExZTAsIDB4OGViZGY5MDUsCi0JMHg1ZTQ1ZmNmYiwgMHg2NWZhYmU3NSwgMHg1ZjY3ZTY3NiwgMHgwM2EzNDk3ZCwgMHg4Y2Q3MWRmNiwgMHg2NzdlMGJmYywKLQkweGVlYzhkYTdlLCAweDZkMTk2YjRkLCAweDRmYjlmOGQyLCAweDAzMmVmMmRhLCAweGQxNDk0YWY4LCAweGNlN2U4MjI3LAotCTB4MjBlYmIxMWUsIDB4ZWM4ZWZiZDgsIDB4NzgwZWQ0NDQsIDB4ZTQwM2IwMDQsIDB4M2M1NGZlZmMsIDB4ZWRkZmFhMDcsCi0JMHgwYjY1ZDg4MCwgMHg3NGZkNmVmZiwgMHg5ZGVhNjM3ZCwgMHhmMGRkMmNiNCwgMHhiN2VjMDcxNywgMHhjZmNjZWRiMiwKLQkweGMyNmM2ZDNiLCAweDVlNGE3NDdiLCAweDA3OWVmMTE1LCAweDZkZWE2ZTNhLCAweDlmYWU1ZjEwLCAweDFiMTBmNTk1LAotCTB4MDc2ZDRlMjYsIDB4NDNhZmJmMDksIDB4OGNhZjA3ZjEsIDB4MmVkYzAzOTMsIDB4YmM0ZDcxMmEsIDB4YmQ1YzYzZGYsCi0JMHhkYTM4YjFlOCwgMHhmN2E3ODVmYiwgMHgwZjllM2U2NiwgMHgxYjkyMjE3NCwgMHhkOTIzMjVkZCwgMHgzZjIyN2U4NSwKLQkweDVkYmZhMWU3LCAweDBlZjBhZjcwLCAweGZlYmQ3OTVlLCAweDQwYWYxYmYzLCAweDQyNzZhMjY2LCAweGQ3YzkzZjAwLAotCTB4OThlZjA1ODUsIDB4YjdmYzU2M2UsIDB4ZTM2YjVmNzEsIDB4NTI3ZjdhOTcsIDB4ODNlMzNiYjEsIDB4MjBmNDk3NDMsCi0JMHg4ZGQ3MTc4MCwgMHg1ZWMyMWRmOCwgMHhlOTRkZTYyMywgMHhmMGJjY2RmZCwgMHhjYWZjMGVjNCwgMHgzNjNmOTE0NywKLQkweDAyYjFmN2Q2LCAweDE5ZDk4NzNkLCAweDdmZDc5NjVmLCAweDk0YWVmNzhlLCAweGI4MzRkMDkxLCAweDVlYWNhNmZmLAotCTB4ZjdjODg2NzQsIDB4NmYyNWU5ZTksIDB4NmFjMWRmYzMsIDB4ZTAyZTRhMGIsIDB4ZWVlMGI2ZGYsIDB4NmY1MDIxYjgsCi0JMHg1NjFlMzExMCwgMHg2NWY2NGVmZSwgMHg0MWFkNjdjMCwgMHgyOTFmZWYwOSwgMHgwMWNjN2VkZiwgMHhmM2IxNDBmYSwKLQkweDJmNzY0MWFkLCAweDA4ZjA1YjQ5LCAweGI2ZTA1NzNlLCAweDA2NWYyNDM2LCAweDgxODM2N2Y2LCAweGVkNzczZmVkLAotCTB4ZmEwYWQ2ZjksIDB4NjdmM2Y1ZTEsIDB4YWJkZjcxOTMsIDB4ZmY5ZDY5ZDgsIDB4NzM3N2M0YWIsIDB4YmUyNDYyZWQsCi0JMHg4OTZmZjZhYiwgMHhmMjAwN2Q5OCwgMHgyNDEyZjJhNywgMHg3ZjUxMGEyMiwgMHhmZTlkOWRiNSwgMHg5M2IxMmM4OCwKLQkweDgyM2FmNmY2LCAweDgyMzFlMjdmLCAweDc3ZWRlYjljLCAweGZiM2FkZjA0LCAweGZiOWQ4OGZkLCAweDMwYzhiZDhmLAotCTB4ZTFhZmM3YjgsIDB4ZmM3Y2YyN2MsIDB4NzU2ODMzZWUsIDB4MGNmOGMyMmUsIDB4NzZkYTRmZjMsIDB4MTRkOGZhN2QsCi0JMHg2NDRmYmU3OCwgMHgxNzlmZmRkZiwgMHhkOGRmZWY5MSwgMHhiMzc3YmYzMSwgMHgyYWY3OGQ0ZCwgMHg2ZWI5ZDdhNCwKLQkweGQxYjc1YTY3LCAweGM3NzZlN2ZlLCAweGQxYjU3OGIzLCAweGJiZmE5OTdkLCAweDAwZmY2ODgzLCAweDNiYTg1N2M3LAotCTB4YmI5MmY3M2IsIDB4M2YzYjdkYzMsIDB4YjcwY2ZmZGEsIDB4NDVlYWZmYmIsIDB4YjhkMmY3OTAsIDB4YzM1MDQ0ZjAsCi0JMHg5OTBlNmJmZCwgMHhiMzBjNWY0MCwgMHg3YTYyNWY3YiwgMHg3YTBhY2VhMCwgMHg3YmUzMjY0MCwgMHg1MTZlM2ExMCwKLQkweGZjMGYxOTNjLCAweDRlMjRhZTE1LCAweDc1N2JjM2M4LCAweDc0MDBjMWFmLCAweDAzMzZiMTE5LCAweGYxZDY2NGYzLAotCTB4NzU3OWMxNzMsIDB4OTUwY2E2ZDUsIDB4Y2ZjNzk5N2UsIDB4NzI0YTRlOTUsIDB4ZjllYTkyN2EsIDB4MDNkMzA3NzAsCi0JMHgzZjE3NzcyNywgMHgwM2YyZmE4NywgMHhjMzE3ZTkzMywgMHg5ODNiMjYzZSwgMHg5MjY0ZGJiZCwgMHg3ZTg3YWNhNywKLQkweGVmYjgwZDg3LCAweGViNjdiNWQ4LCAweDZlMGZiODFlLCAweDUwZDc0MWRlLCAweDQxYTczN2IwLCAweDg2YmMyODFlLAotCTB4MjBhYWViN2QsIDB4MjNlMWI2Y2YsIDB4YmY1NDE2YjAsIDB4MGQxMDI5YWYsIDB4YzQ2ZGRjNzQsIDB4MDc2NGUyYzUsCi0JMHg4ZGZmYjgwYywgMHgyNzg5MTdjNCwgMHgyOWY5ZDYxOSwgMHhmNmRiYmZkNywgMHg1MGU3MzQxYSwgMHhhNDNkZjhkYiwKLQkweDM5ZDlkYTFmLCAweDhiM2I3ZWQ0LCAweDNiZGM2ZDUzLCAweDk0NGVmOTNlLCAweGQwMDFkZjQzLCAweDliNDdlNWZmLAotCTB4NjhhZTFjYWIsIDB4OTdmMTRkNWMsIDB4MzhkODFjYzYsIDB4ZTdmZDMwNjUsIDB4MTM4MzE2OTgsIDB4YjAzYWVkYzgsCi0JMHhiYWY1ODQ1YSwgMHgyNWRiNTI0ZSwgMHgxM2ZlNzY5MCwgMHgxYTg5Zjc4NSwgMHgwNjE2YjZkZSwgMHgwZGUzY2U4ZiwKLQkweGZmMDU1MzkwLCAweDNjM2YwMmQ0LCAweDM1YjdkNjg4LCAweGJmMjA5MzE5LCAweGIyYmZjMTRhLCAweDU3N2M2NTBlLAotCTB4YjJhY2YxMWQsIDB4MzY3OTI4YTEsIDB4NTc3YzRmN2UsIDB4Yjg3Y2Y3YjksIDB4YTBmNzI4OTMsIDB4YjZjZTVmMjMsCi0JMHgzZjE5NWE3YiwgMHgzZjUwZTljOCwgMHhmZDFlM2JiOSwgMHg5ZWRjNGQ5MiwgMHhkZTgyYjQ5MSwgMHg0ZTg1M2Y4MCwKLQkweDdmNjYwZTA5LCAweDM0NzRmOTk0LCAweGJmYTczYzdlLCAweGJlNTBmZTUyLCAweDY0YjkyNzVlLCAweDFmN2UxYmU0LAotCTB4YzUwZTRiYTAsIDB4YWUzYzgxZjUsIDB4NzdmODNlODYsIDB4YWU3OTU0NWEsIDB4NDdjMDBlZjEsIDB4ZDQ3ZTM2OGIsCi0JMHhjMDMwNmNkMCwgMHhkYjY1NThmNywgMHg2NmJjNDQ4NSwgMHg2ZGZlOTNhNCwgMHg3NThjY2Y4NCwgMHgwNzBkN2ZjOCwKLQkweDcxNzFjYTA5LCAweGJlMmM1ZGVkLCAweGY4M2Q0MjQ3LCAweDVlNzg1OGJkLCAweGNmYzNmMjBkLCAweGI0MDliYmFkLAotCTB4YjU1YzEzMWMsIDB4MzdlMjA3YjgsIDB4OGFiOTAwZTQsIDB4MGRjYTg5ZTIsIDB4MjZkNTE1OTQsIDB4Zjc3OWQ3ZTAsCi0JMHgzZjJlNzJiMCwgMHhkMmI3OWRmZiwgMHg1ODU5ZjI4NywgMHhmYWZiZjJjMywgMHg3Y2Q4MzIzYSwgMHg0MzEyYmYzOCwKLQkweGZiYzg3NzdjLCAweDdmZGI4ZTc4LCAweDAyMmZkZTY1LCAweGE5ZmFkMmRmLCAweDYxMWJjN2ZhLCAweDk3NWZjYTVjLAotCTB4ZGVlZTIwM2EsIDB4MzA1M2U4ZjAsIDB4NGY1Zjg1NWQsIDB4NGUxMDkxYWQsIDB4N2NmNmJjNTEsIDB4ZDc0ZTcyZmMsCi0JMHg3ZTMwMGY1NywgMHgxYTQ2YjMxZiwgMHg4ZDMxZjcwZiwgMHhlMjEzODk5MSwgMHhhY2Q2ZGJjNSwgMHg2ZjdmNDExNSwKLQkweDYwY2U3ZTAzLCAweGZkNzYwZTcyLCAweGFjODdlZWU0LCAweDc3M2IwNGJmLCAweDJlMjA0MGM4LCAweDhhNDRjOWJkLAotCTB4NjJlNGE4MzYsIDB4MzRkN2FhZDcsIDB4NWI1YzViZjIsIDB4ZGZlMzA1MzksIDB4ZTgwMjQ5Y2QsIDB4MTU2ZTQ1NzksCi0JMHhiOTMyNmZiYywgMHg1ZmZjYTMyNywgMHgwOWZmOTNhYiwgMHgwZTM5ZmRlYywgMHhiOWM3OTc0NiwgMHg4OTNlM2ZmYywKLQkweDk0N2QzZmNhLCAweDAwNTEyNmI4LCAweGIxNGM5YjM4LCAweGY2OWFlOWVmLCAweGEyMmZmOTIzLCAweGQzYjY4ZjU3LAotCTB4NmMxY2QzYWIsIDB4NDNlOGVmNWYsIDB4ZTZiYjJmYzcsIDB4MjNlYmVlMmMsIDB4ZjM3Y2UzZjMsIDB4NmY4NTA0ZjgsCi0JMHg3ZmMwMDQzMiwgMHg1ZjYwYTUzNSwgMHgyYmM1MTdjMCwgMHhhZmZhMzNmMCwgMHgzMjczNmZhMCwgMHhmNmExYmVmMSwKLQkweDM5NDhiOGZjLCAweDZkYzhkMzk3LCAweGYyMjlhZjU0LCAweDdhMDIyYmViLCAweDU4YTg0ZDY3LCAweDcyNzY3ZTBjLAotCTB4N2E3YzhjYmUsIDB4NGVmNWYwNGEsIDB4MTRlZDc2YTIsIDB4YmQwYzczYzgsIDB4ZjRjMWQxMzAsIDB4YTdjOTM5YzgsCi0JMHhmZGJjYWZiOSwgMHhlMDc3NDgzYywgMHg2M2JhMjJlYiwgMHgxYTkxNzU4MywgMHg1MWY0MDljMSwgMHg2YzM1NWRkYSwKLQkweGMzOTRiMTVmLCAweGY1MmI5ZTUzLCAweDJmZjc4ZDFmLCAweDk3ODNjNWRhLCAweDMzM2Q5ODNhLCAweDdmYjA1NmMxLAotCTB4MjIzM2Q5ODAsIDB4MjBiOTQ3OGMsIDB4ODNiYmFiODYsIDB4NzZhM2NkYmMsIDB4MWQ5NTU2ZWMsIDB4MjM1NTI1M2IsCi0JMHhmODc4MmFiZiwgMHg3M2Y3ZTczNSwgMHg1N2RkNmM4OSwgMHg4Mjk2NzlmMSwgMHg2NzNhYTdlZiwgMHhhMzA0MWJhMiwKLQkweDE0NWFlNGMwLCAweDAwOGJiYzk4LCAweGIxZWVkNGZmLCAweGFmZWY5MTkzLCAweGYzZjdjZDg5LCAweGZlNDJhZmQ3LAotCTB4YzRlNDljNGMsIDB4MzcxZTQ4ZWYsIDB4ODM4OTJkYmEsIDB4MDBlM2U5NjIsIDB4ZmVkNmJiOTYsIDB4YzA1OWY3MDYsCi0JMHgxZGY3MjBjNywgMHhjODExNDFjOSwgMHhmZmMxODkwMSwgMHgyYWZmY2EwMSwgMHg0MDdjMjlmYSwgMHg4NzQ1ZTJmOSwKLQkweGY5ZTg0ZjRhLCAweDUzZGYzOTQyLCAweDc3NDliMmYwLCAweGViOGU3ODNlLCAweGJhNWU0NmY5LCAweDUxNTNjODNhLAotCTB4ZTlhM2YzZDYsIDB4Y2U4ZWQyZGMsIDB4NDczYTMwNmYsIDB4YWRlODBiZTUsIDB4ODFkZjg5ZTgsIDB4MmM3NGE1OWMsCi0JMHg5YzEyZmQ2NywgMHg4ZmFhOWYzOCwgMHg0ODVlNjE2NywgMHhhYTI3M2YzNSwgMHhmMzI5ZTNlMywgMHg0MmY1YzAzZSwKLQkweDM1M2NlNzQ3LCAweDFjNWZkZjU2LCAweGQ3NDhmM2JhLCAweGU0N2YyOGEwLCAweGMxNzZiZjcxLCAweGIzOWUzMzVhLAotCTB4OWU0YzIwNmYsIDB4MDFmMTVkZTUsIDB4NGU5ZTc3ZjUsIDB4Mjk0Yzc1MjMsIDB4M2U4MDhmYWEsIDB4Mzg1Njg5MWYsCi0JMHg0MmQ3NzUwNCwgMHhjNzRiZTkxMywgMHhiMDUxOTczZCwgMHg3ZTZkZjIwYiwgMHgwZmU3MjRkNiwgMHg2MGQ4ZWJhNiwKLQkweDgzNWVhNzkyLCAweDY0ZjcwMWZiLCAweGRmMzkzZjgwLCAweDZmNzg4NGUwLCAweDQwMjljN2EyLCAweDAzNDMwMjNjLAotCTB4ZDhmYjg3MjAsIDB4YjhmYmMzMzgsIDB4YWI3ZGMzMmYsIDB4ZjQxYzNkY2IsIDB4MmY0ZTY5YzEsIDB4MWUwYWJlODUsCi0JMHgxZDc3YjIzYSwgMHgwMjVmYjVkMSwgMHhlZGUzYTczZiwgMHgyNmYyM2Q3YSwgMHgzOGU3OWI5NywgMHg0N2FlMmYxZSwKLQkweGM5ZTQxMTY0LCAweDQ0OGI3YzQxLCAweGQzMzY3Zjk4LCAweDkyM2QxMTgzLCAweGQwMWNmMDRkLCAweDllNTVjN2MxLAotCTB4NTA5ZmY1MmIsIDB4NTIxMjM4OGYsIDB4NzQ2NDdhNTQsIDB4NDIzZDRjNzMsIDB4M2ZlNTMxN2YsIDB4ZjQxY2NkNjUsCi0JMHhkOGMxYzk2NywgMHgwMjdhNmNmZSwgMHg2MDI5YzdiMywgMHgxNGJmNjk0NywgMHhkMzNkZmQ5OSwgMHg1MDNlZGNkMywKLQkweGM1N2NjNDhlLCAweDhjNjYzNWVhLCAweGM4N2EyYmUzLCAweDg3OGM5NTMxLCAweDAwZWFjZmJmLCAweGE2YmQwYmJiLAotCTB4MDk1ZTBlZmEsIDB4MjY2OWIzZTcsIDB4OWYxNzljMTcsIDB4Zjc0OGMyOTIsIDB4NWNjMzc0NTMsIDB4MTVlMWZjOGQsCi0JMHhmNDMxZGU4MCwgMHg4NWY4ODExMSwgMHgyYzllZDdmYywgMHg1MTA2MmVmZSwgMHgxMWU0MTY0ZSwgMHhkNmJiYTNiNCwKLQkweDJhYmU0MjhlLCAweDgwMTRjZmNhLCAweDEzNmI4YjZmLCAweDlhNGY2ODA1LCAweGJlODAzNGUwLCAweDZhMzFkNjUyLAotCTB4NDlmYzg4YTEsIDB4ODI0NDYwZTUsIDB4ZTRhMzFlOGEsIDB4ZDVmMDExMGEsIDB4MjY5N2Q5M2IsIDB4ZDZmZGQyMjUsCi0JMHg0Y2ZkNTdhZiwgMHhkMGYxYmYxZCwgMHg2OGI0OGFmYSwgMHgxZmQ2ODZmYywgMHg3Y2ViNzViNCwgMHgyMTM3MjZmYywKLQkweDNmZTQyMGYwLCAweGU0ZjBlYWRjLCAweDU2MzViOGMwLCAweDU5OTQyZTZmLCAweGNlMzAyYjVkLCAweDg4YmNkOWRiLAotCTB4ZTUyZmNiMWYsIDB4MGU0NDRlM2MsIDB4Y2VjYjhiYjQsIDB4NWM2MTc1YWMsIDB4YTdjYzFhNzYsIDB4YTdmMWZiYWMsCi0JMHg3M2RlMWMwMCwgMHg2NmVmZDMxMSwgMHhmNWMyZThmMywgMHgyMDg4ZjkwMiwgMHgyYjc4YmEzZCwgMHgyODk3ODg0NCwKLQkweDM4NGVlNzdhLCAweGY2YTE0NTk0LCAweGExYWU3MDA4LCAweDJkZTgxYmM4LCAweDNjOTVhN2YwLCAweGQ5NWI4ODA4LAotCTB4NDAxZjZlMzEsIDB4YzI3YTgyM2UsIDB4NWEzZWE4YjAsIDB4Nzk4ODZmOTEsIDB4MDRjMmYxNWYsIDB4OWZhYTRmZGIsCi0JMHg5YmVmZjA0OSwgMHg0NzdjYTk3ZiwgMHgyZDNjYTIyOCwgMHhlYmU5NTA0YywgMHhhNzBmZjNjNywgMHg3NjA4ZjNiMiwKLQkweDdjZGRkZmFmLCAweGI5MTZlNzhjLCAweDRiYTAzNGZmLCAweGExODY3ZWY0LCAweGY5MGM5MzY2LCAweDVjNDNjNGE2LAotCTB4YjFmZTU1NGUsIDB4NzY0MjE0MTAsIDB4NTZmZDYzYzgsIDB4ODc0YTFlMjAsIDB4MmM0NTZmYjYsIDB4ZGUzZmZiOWYsCi0JMHhjZmUwMTk0OSwgMHhkNGRjMTgzNywgMHgwYmZjODIzMywgMHg2Zjc3MDc5NCwgMHhkNGE3ZGY4MiwgMHg3MzEyN2JmMSwKLQkweDA5MWU2ZDFhLCAweDFjNDIxZGUyLCAweGEzZGE4ZWZmLCAweDFkMThlNzNkLCAweGRiNGY1ZjRlLCAweGY4Y2QwNzE3LAotCTB4NzJkYWZkYjcsIDB4ZTBhZmJmOTQsIDB4MTU5OGVmYzYsIDB4ZTc3OTBlZmMsIDB4ZDc5ODgxZjEsIDB4ODM3NmFjNjksCi0JMHgzMGI2YWQ5YywgMHgyYzJkYWJmOCwgMHhhMmRhYjc2ZSwgMHgwMDRhZTdiYywgMHg3OWQxZGRiYiwgMHgxZWMyZjY3YiwKLQkweGUyNTNmZjE4LCAweDkwZTFkOThkLCAweDBjYzlmODA4LCAweGM5MmMwY2JiLCAweDBjNjc4ZDhkLCAweDcyYjc1YzEzLAotCTB4ZjFjNzVmMGUsIDB4NDZlZjY5YmYsIDB4ZDY3OWVjMTEsIDB4YjBjNWVhODQsIDB4Zjc2M2Q5ZWYsIDB4NmJmYTAwYmQsCi0JMHhkZmQ2YjY2YywgMHhmM2YwMjExYiwgMHhmNzA0YzllMSwgMHgyNDljOGE0YiwgMHhlMDlkOTMzNywgMHg2YzFlMjRkYSwKLQkweDFhMGE4MGY2LCAweDEzYjNkMjdiLCAweDVlMDk5NWY2LCAweDU1M2MwMDIyLCAweDgwMDZjZmZlLCAweDg0NzhiYTRiLAotCTB4ZGZjMGJhNmIsIDB4ZmI3ZmU1ZWIsIDB4YjRkOWMzOTAsIDB4NzIwMGJjNzcsIDB4ODI2OWE1ZGYsIDB4OWVkNDFhZTAsCi0JMHhmZWMyNTdjZiwgMHg1M2NiMDQ3YiwgMHhmYjJhZmEwMSwgMHg1ZTJmZGVjMiwgMHhhNWYwMDEzYSwgMHhmYWUyNmZmNCwKLQkweDJmOWYwYWZjLCAweDc0YzY0MjE3LCAweDc3MTgyMTNkLCAweDIzNDBmNGNjLCAweGFhMzU0OTVjLCAweGI5MzQ2ZTQ4LAotCTB4NDc5OWViNTQsIDB4NjY4ZjVlMTAsIDB4ZWRkMWQ3MTksIDB4Y2EwNzJmYTAsIDB4MWM0NGI2NjMsIDB4MTBjOWVjNzcsCi0JMHhhZDc0YjdlNiwgMHg0M2Y2OTAyMCwgMHg0MDFkMzU3YSwgMHg0NTU3YWEzZiwgMHhkY2Y0MDA5MywgMHg5YzBkZjdiNCwKLQkweDVkYTZjZjZmLCAweGI1ZjJlNGFjLCAweGNhMDVmYjkxLCAweDk4ZDk4ZWJjLCAweGNmYzYzY2RkLCAweDMzNGVhYmE5LAotCTB4YzEyMDc5YmIsIDB4Y2E0YmY5ODcsIDB4N2M3MmFhM2EsIDB4ZmUxNDE1NjksIDB4MTljYmM4NGEsIDB4Y2U1ZTcxZDEsCi0JMHhiMjkzMDQ5MSwgMHhkNjA4ZmZkZiwgMHg3OWJkM2U1NywgMHgzZWEwZjAwZiwgMHhlZmJhOTA3ZSwgMHg3NTIzZDIzMCwKLQkweGFmOTZkYjIxLCAweDAwNDBiN2RjLCAweDQ2NzJiMTdkLCAweGEyODFmOGVjLCAweGY4ZjI1NjM3LCAweGU1ZmYyYWFiLAotCTB4NGY0ZjVhOTQsIDB4NjZiMjQ4MjksIDB4ZjI5MmY0YWEsIDB4ZmNkMTUzZGUsIDB4ZmYzYzRkOTcsIDB4N2JjZDAzZTUsCi0JMHg4MDVhOTc4MywgMHg3OWIyZWU5ZiwgMHhlNTczYzBjZSwgMHhlM2FkMGJlZiwgMHhkOTQ3Yjc3ZiwgMHhiYWY4MmFjZiwKLQkweDgwZmNjOWMyLCAweDFmZDcwOTAzLCAweGMwMjQ3MzgzLCAweGYxZjI5MzkzLCAweDNjZWM0YjNhLCAweDA2OWRjYmYyLAotCTB4N2UzMDc3ZWUsIDB4NWY4YzRkMjEsIDB4ZmY2YTFkNjAsIDB4YjAwMWJmZWIsIDB4MDBkNzQzMmYsIDB4MDAwMGQ3NDMsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHhjOTMzMjY2NiwKLQkweGU0Y2M5OTI0LCAweDQwMjc1ZTQ5LCAweDIxYzQwYTMwLCAweGViMTQxMDIxLCAweGVmMGMwMTI0LCAweDAyNDE1MDQxLAotCTB4ODA0MjEyMGMsIDB4MmE5NDEzMjQsIDB4ODA2NWJkNmQsIDB4OGQ1MjAzMTgsIDB4OGJkNGI0NWUsIDB4ZDdhNTc4M2EsCi0JMHgyOTQxYjYyMiwgMHg4NGVjMWE4NiwgMHgzYTBiYzE1NywgMHg5NGI2MmEyOCwgMHhhYTU0MTQxYiwgMHhhNWFjNDA5MCwKLQkweGQ3Zjk3Yjk2LCAweDY2MWY3YjVhLCAweDk2MjI2NGNlLCAweGJmZWZiZjYyLCAweDc2N2U5ZmZmLCAweDY3ZDljZmIzLAotCTB4ZmJkN2I1OWYsIDB4NjQ5ZWNmYjEsIDB4MTI1OGM0YWIsIDB4ZGQzYjM3NjMsIDB4ZDhjNjdhNjUsIDB4YzFiNzU4YmUsCi0JMHg4OGQ4YzQ1YSwgMHg1OTZlZGY2MiwgMHhiOTc4NmM2MSwgMHhkYTFlYjc3NywgMHgzYmJmNTY0YywgMHg5NDA2MTEzNiwKLQkweDY4MjZjNzMzLCAweDNkYWMxZGVjLCAweGEzODRkYTBlLCAweGI4MzhjZTFkLCAweGEzNmFkZmRmLCAweGFjZmE2ZTc5LAotCTB4OGMyZGI5OGIsIDB4YWI5ODk1MGQsIDB4OTc2MzEwNjUsIDB4NjBkNmVmZjAsIDB4MzFkNTZhOWIsIDB4MDYyN2YzMDYsCi0JMHhlMzA2MjU0YSwgMHg2Y2I4YzQzNiwgMHhlOTYxYmVmOCwgMHg0MDAxYjJmNSwgMHhmMWQ2NjQ0OSwgMHgwMzYzMWZhYywKLQkweDJiOGQwYWFkLCAweDk2ZWU3NjJjLCAweGE3NTYzZGUxLCAweDhiNzljNjRiLCAweDllZjRhYzYzLCAweDZhNzcxY2M2LAotCTB4MWQzZTdmM2QsIDB4NGU4OTY3OWYsIDB4MzdjMDIyNjksIDB4NWIxOGJmZWMsIDB4ZmI2ZGRkMDMsIDB4MTA2NTI1NGIsCi0JMHg2ZjE0NjdiZSwgMHhjMGI2NzMxOSwgMHgwNTYwNTdmOCwgMHgxMTU5NzBhMSwgMHg5ZjdjMjQ5ZSwgMHgzOWViZWY0NCwKLQkweDRhY2YzYmJmLCAweDEyOWNlYWYwLCAweGE4ZmMzMjRjLCAweGU4NjBjN2M1LCAweDMyZjVhNWYwLCAweDAyYzg5ZmMyLAotCTB4NmQwMDAzMTIsIDB4MjMxMmQ2ZDUsIDB4YzZiZDM3YmMsIDB4ZmU2MWI5MjEsIDB4Zjk1YzYyOWIsIDB4MGU2MzVjZjgsCi0JMHg2ZDBhMWM1YywgMHgwYWI3Y2U4OSwgMHhlNzEwM2I5ZSwgMHhmOTgxNjUzYywgMHhmNjY4YmYxNywgMHhmYTMxMzQ5ZSwKLQkweGQ1ZmYwNGJiLCAweGZhNjgyNGI2LCAweGVmMzRkNjllLCAweDdmNjBiY2M5LCAweDBkMjNmZTMxLCAweDRjY2ZkYmZlLAotCTB4MzU2MzE4NmMsIDB4NDA3YjE2ZmMsIDB4ZWY4Y2RmNzYsIDB4M2M3NTM1YTksIDB4NzVmYTE3M2EsIDB4YzhjYWY4YmYsCi0JMHhhZTBhNDk2MCwgMHg2NTc4ZTAxNywgMHgzZGNjNDE3ZiwgMHhhNzdhZTA5NiwgMHg5OTc3YTRmNSwgMHhiZDI3YTkzNSwKLQkweGRlODI0YTg3LCAweDRhZGU4MTYzLCAweGIyOWY3YTRmLCAweDNiN2EwODI0LCAweGZhYzEwN2RiLCAweGMyNGM1ZGUyLAotCTB4MTM1ZjAxZTcsIDB4ODVkYzNkMzksIDB4Yjc4OGMxYWUsIDB4MzgwMzMyYTUsIDB4NTg3YTQ1NWUsIDB4NTM4ZjRjYWUsCi0JMHhhNzFmY2UxNiwgMHgyYTFlOWMyYywgMHgzOGM2ZTYxZCwgMHg3NWQyYjRlZiwgMHg5NmY1ZWY0NiwgMHhiZWJjM2NiMiwKLQkweGRjYWU4Mjc2LCAweDE2Y2Y4MTE3LCAweGVlMzQyZDU5LCAweDA1ZmNmMWFhLCAweDk5ZTI4N2QzLCAweGZiNmRmZGI1LAotCTB4YzFlZmExMGYsIDB4Zjc4NGNiN2YsIDB4YzAzNzg4NDUsIDB4NTgzZjVjN2IsIDB4Zjg0ZWJmZjcsIDB4NTNmOTE5MjgsCi0JMHgyMDNhZWE2NywgMHhkYjZhM2UwMSwgMHgyNTg2NDU2NCwgMHg5Yzk1NGMwYywgMHg1YjE5MGIyNywgMHg4OWNkYTBmNSwKLQkweDhiNWNmMDdjLCAweGYxODI4OGU0LCAweDZiMTRjOWNjLCAweDIyNTY0MzMyLCAweDc1ZmQ5ZDYyLCAweDExYmIzZTdjLAotCTB4ODM2MGI4NWEsIDB4YTMzNGRlNzEsIDB4Y2VmMjEzNmYsIDB4OGMzM2MwMWUsIDB4MzgwODI0ZjMsIDB4MDAxZmUwMWEsCi0JMHgwNTU1YTc0NywgMHgwZGY3NDljYywgMHg1NTlmZjJlYywgMHhmODUxZmI4MiwgMHg2YTRiOTgyZiwgMHg4MDk3NmY2OSwKLQkweDk5OGFhYjcwLCAweGVmNzAwMGRiLCAweDFmODk5MzZlLCAweGY2OGM2YjlmLCAweDJmZmNjMTQ1LCAweDYwN2YzOTZkLAotCTB4M2ZmYmY0MjYsIDB4YzE2NWMzYTgsIDB4MjdlYjA0ZGYsIDB4NTNhOGY4MzEsIDB4MWNhZDA0YmEsIDB4YzNkM2NhNjcsCi0JMHhlZDFjODc3ZCwgMHg0YjdjNjE5MCwgMHg4YjNlNWM3NCwgMHgzNzY0YWM2NywgMHg5NTViM2YzMSwgMHg3YmMwZjMwYiwKLQkweGQzNDdiNTU2LCAweDgyZTU1NmZhLCAweDFmMTBlNDdjLCAweGQ5Zjg4NjNjLCAweDY5NjQ2YjEzLCAweGU0MWJiZDcwLAotCTB4NjcwZGM3MDYsIDB4Y2M4Y2VmMWQsIDB4YmJhOWQyMDksIDB4YmJkOWNiZjUsIDB4MTg5ZWZkNjAsIDB4MjYyN2FmM2UsCi0JMHhkZTAwYzdjYiwgMHgwNzE3NWRjZSwgMHg1YjhmMWYyMCwgMHhjYTM1Y2YzNiwgMHhkOTI0ZDhjZSwgMHhhZmU5MWViZCwKLQkweGRlNjZmNzNlLCAweDZmODg3MWM3LCAweDVlMDgzMmM2LCAweDg0MWM5ZmEyLCAweGFjZGUzMmVmLCAweGFjNzJiZjFjLAotCTB4YzlkMWQ2OWUsIDB4ZWViODFkYTIsIDB4MjE5M2EzMTYsIDB4MzljN2JjOWQsIDB4YWQ3OGFiN2YsIDB4ZDlkMWJjMTMsCi0JMHgwZGQ0NzQ1NiwgMHg2OGVlN2JlYiwgMHhlZjlmMDM4NiwgMHhlYjM2ZWQ2YywgMHhlMmNiN2RlMCwgMHg3NWMwYmZkZCwKLQkweDcxNWQ5OWM5LCAweGNmODg0MWFlLCAweDA2M2JlYmVlLCAweDA5N2ExZTkxLCAweGZjMWY3N2FmLCAweDc0MWVlNmQ4LAotCTB4ODZkYmViNTUsIDB4N2Q2OTVmY2YsIDB4NDlhNWJkMWUsIDB4M2ZjOWVmOGEsIDB4YjUyMDdjZTEsIDB4Y2E1NWZmYjUsCi0JMHhhODYxMzkyNywgMHhjYzU5YmNiNywgMHhkZGQ2MGFiNywgMHg5MzQ4NzgzOCwgMHhjNjllODQ4YywgMHhjNjRmOTQxNCwKLQkweDBjOWZhYzJhLCAweDJhYmJkMjBjLCAweGYxMDdiNWRlLCAweDhjZDdjYWFjLCAweDg0M2VkNzc4LCAweDVlOTNkZjBiLAotCTB4OGZkY2ViNDAsIDB4ZjM0M2ZjZmQsIDB4YWJiYTBkMGEsIDB4YzhlMWU3NWEsIDB4ZmUxM2Y0ZWIsIDB4NmE3YWM1NmIsCi0JMHgwY2JmMTY0ZCwgMHg4NjZkYjNmMCwgMHhmOTU0M2EyZiwgMHg1ZTEzZGJlYywgMHgwZTMxYzdhMCwgMHgxYmE4ZTNhZiwKLQkweDhiN2JmOWU5LCAweDQzZTIxNTYzLCAweDYyYmFiMDFmLCAweGY4ZTNmZTA5LCAweDM3M2M1NjNlLCAweDIxYmJkNzE1LAotCTB4ODU4ZjY5YzYsIDB4MzA1NzliZjEsIDB4YjQ1MjBmY2UsIDB4ZGM1ODc5ZTMsIDB4NjhiNjNkZDYsIDB4ZjE1NTkzZDQsCi0JMHhkZjM4NTNlZSwgMHhiM2YzYmEwZCwgMHgwMmM3Njg1ZCwgMHhkYzNkZGQyZSwgMHhkNzg2N2MwZSwgMHg3YWRkZGQ2MSwKLQkweGM2NWVhMzgyLCAweGZkNjJhZmY5LCAweDcxZjMyMmU3LCAweGQ5ZmMzYTBmLCAweDU0ZTdhMjFhLCAweGY0MTQ4Y2ZjLAotCTB4NDFmODg5MWQsIDB4ZmZhNWRjODUsIDB4YzQxNGMzYTIsIDB4M2Q0YTA0OGYsIDB4M2U3M2Q2ZGQsIDB4MTBiMjNhYzYsCi0JMHg5ZjFkZjZkZSwgMHhmOTgwZTgwZSwgMHg3NGY4ZGVlYSwgMHhkZDZmY2EzNiwgMHhiODg4YTI2ZiwgMHg3ZDczN2VhMywKLQkweGQ5ZjFmMjNjLCAweGM1YmQzNjEyLCAweDdlOWY1M2QyLCAweGE1ZGViY2IxLCAweDFmZmFlNjA3LCAweGNiZDI1ZjZiLAotCTB4NDQ2MDJjMzUsIDB4YjJkYjVkM2IsIDB4ZDEwZmE1YzQsIDB4ZTkzMTAwYTcsIDB4YzA4NjgzZGQsIDB4NjBmZjljMDQsCi0JMHgwMDU2Y2M5MSwgMHg4NjNiNzVkZiwgMHg3YTA4YjBhNywgMHg1YWRmNmQ1YSwgMHhiOTk1NWNjZSwgMHhmNTEyZmQ4YywKLQkweDhlZDdmMjFjLCAweDk3ODRmMWExLCAweGUzZTkxYjM2LCAweDk3MDdmMWYwLCAweDE5NDZiYjU3LCAweGUwZWY5ZjdhLAotCTB4MWY3NGYzMTAsIDB4Y2MyMTNmM2MsIDB4ODEzMWI5MGYsIDB4YTIzMTk1ZGIsIDB4NDRlOTQ1MDUsIDB4OGY2Y2NmMzgsCi0JMHhkMmUxNzlmNSwgMHhlMmY3ODI5OSwgMHhjY2U5ZTAxOCwgMHhiZDBiNzdiNiwgMHg1ODY3MmZjMCwgMHg1MWQ3YmVlMCwKLQkweDMwYjRiZTdlLCAweDBjMjY3YmY0LCAweDQ1NzBhZjc5LCAweDZlZGU1MDZjLCAweGJmNmJlNjI5LCAweDcxNDNiNWU1LAotCTB4YjA5ZjhjMGEsIDB4MzdhMjc3NzUsIDB4MzBiNzdmMDQsIDB4Zjk5Nzk3ZmQsIDB4Y2JkZjA3MzcsIDB4MWRmNGM3ZDcsCi0JMHhlYzFlOTAwMywgMHgwYWM5ZDNmNSwgMHhlYzc2MTNiNCwgMHhhMDdjZTQ0ZCwgMHg0YmNlOTBlOCwgMHgxNWZhZGU4NSwKLQkweDljMTExYTVlLCAweDNhYjJjMjZmLCAweDYwYzJhOGQ3LCAweDk5ODJmNmJmLCAweGZhZmI0MmY5LCAweDVmNGQxMTgwLAotCTB4NWQwYjA1ZWQsIDB4MjZjNDI3YjcsIDB4YzNlOGZlOTIsIDB4ZjhmZWEwZmEsIDB4YmYwYjc4YjYsIDB4ZTBlZGUyYWUsCi0JMHg2ODU5ZDM5MCwgMHgyMzlhY2ZiZiwgMHg2MmVkYzlmMywgMHg0NDYzYjc1YywgMHgxMzQ3ZmEwYSwgMHhkNmZlZmU4YywKLQkweGYzMThlMzA4LCAweDc1ZjBiOGQxLCAweGVkZGNiOWJkLCAweDNiZGI5NTFhLCAweGNjOGRlMzdjLCAweDFjYWZjOTFkLAotCTB4OWFmZGMwOWYsIDB4Nzk5OTg3NmUsIDB4ZGJlZmFlNDEsIDB4NzQzYjIwNjgsIDB4ZDMwN2UyZTgsIDB4OWY3ZTgxMGEsCi0JMHg1NzU4MzA2ZSwgMHg5ZmFiM2UwMiwgMHhhZmYxOWRkOSwgMHg0ODdhYmY3MCwgMHhmZTgyNTU5NCwgMHgzZmJmOGFhNywKLQkweDY3ODJmMWYyLCAweGZiYWUxNzY0LCAweDI1ZjcwZGQzLCAweDczZjY4M2NmLCAweDgwMWFjN2UwLCAweDAzNDZjMTYzLAotCTB4ZjhkZWFmNWQsIDB4NWE3ZWJhN2QsIDB4Njc4MmU5ZjAsIDB4OWVhMjA2OTIsIDB4NGQ2N2I0M2YsIDB4ZmFiM2FlMzIsCi0JMHgxM2JlMWZiZiwgMHhhMzU2YzVmNSwgMHg2ODEwZTA3NSwgMHhhZTQ4YjY2YiwgMHhiMTcyMjE1MSwgMHhhNmIzMDVlOCwKLQkweGFhYzc1NWJmLCAweGJhZWExZDcxLCAweDdjYmVlNDk5LCAweGJjNzgwMTVmLCAweGJhMGZkYzA5LCAweDhmNjVmZjZhLAotCTB4N2YwMTdmZDYsIDB4ZmRjMDliYzUsIDB4NjE1MzQ5OTUsIDB4ZGQ0NTc1ZGQsIDB4ZGVlZTI3ZTQsIDB4ZmM3NjRkMTcsCi0JMHhmYzk5MTZiNywgMHhiZjkwZmYwMSwgMHhkMDhkZTdmYywgMHhiZDZmZmIyZiwgMHhjMTA4N2M4MywgMHg1ZTg1YTNlNywKLQkweGY0OGYyYzY2LCAweGY3ODk5NTUwLCAweGM5ZTg3NmNiLCAweDk1OGIyODlmLCAweGQwN2VkZjA5LCAweDA4YzhhMzEzLAotCTB4NjFhMzJkMzksIDB4ZTdkNGY3ZGMsIDB4NDZlYjkxZTQsIDB4ZjFkMWI4YzAsIDB4ZTI3ZTg2MDYsIDB4MjY4YmZjZjcsCi0JMHhiN2VmZDAzMCwgMHhkNDdmZDA1ZSwgMHg1MjllYjIxMSwgMHgyM2EzZDRlNiwgMHg5YTBjYzI1MiwgMHhlM2EzYWJlYiwKLQkweDA4ZmY0NzllLCAweDFlYTNkMzI2LCAweGVmNjkzMzJmLCAweGVlM2ZlZThmLCAweGQxYmJkYTM0LCAweDU1NzVlZDU2LAotCTB4Mzk0MzllN2UsIDB4ODM5NDE4MTgsIDB4ZjRmZWZiZGQsIDB4Njc1ODc4YzQsIDB4ZmI5OTQxZDUsIDB4MzNkMDU3NjMsCi0JMHg3MmJhZTE2ZiwgMHg1NjZmZGU5MSwgMHgwZWU3ODE2YywgMHhiYTFjZWMwOSwgMHgxYTQzNjlmOCwgMHhjNGIxNTdmMiwKLQkweGQzZmY0MjU2LCAweDkxZTU1MThiLCAweGQ1NDYyMmU0LCAweDljZTgwYzM3LCAweDQ0ZjNhNDE3LCAweDdkY2JjMmM3LAotCTB4YzVjOThiMTQsIDB4MTFmNzJlNGIsIDB4ZWZhZjZmZmUsIDB4ZWYyZTU5YmUsIDB4ZmJkMjMwNGUsIDB4Yjg2MWY1YzMsCi0JMHhmYTU3N2NmYywgMHhiZDkwYzI3MCwgMHg2YTU4ZGU1OSwgMHgxN2VkOGU3ZiwgMHgwOTllYjk1YiwgMHhmYWUxOGZkNywKLQkweDFjMmI4NTRmLCAweGIyMGJkYWRlLCAweDRmOGRlZjQ2LCAweDUwNWM2ODUwLCAweGZlZTkxOWZmLCAweDNlYjM4YzM1LAotCTB4NjcxMDg4NGIsIDB4N2MyNjdkODEsIDB4MjllOTg3NzksIDB4ZTFmZjAzYmUsIDB4NjQxYjhlMGMsIDB4MDAyNWVjNTEsCi0JMHg2ZmI1ODM1MiwgMHgyNWY1ZWEwYywgMHg1ZTE3NzcxNiwgMHg4NmU5N2VjZiwgMHgwYzE3ZTg1MSwgMHg0M2FjZDJkYywKLQkweDcxMjlkMWZkLCAweDg4MzY2ZDdhLCAweDgyODNmYjE2LCAweDA0NWZkMDcxLCAweGZhMTMxY2RmLCAweDUzYTBlMjAwLAotCTB4MmVmYjY4MTYsIDB4YzMxZjYzMmIsIDB4Y2M0Y2EyZmEsIDB4YmIyMDJlNmIsIDB4MDQxNDM1ZWYsIDB4N2UwMjNmZTcsCi0JMHg4ZDk5YzYwYywgMHg5ZmM3OGMyNSwgMHhlYmZmZGMwOSwgMHhhY2U4YTc5YiwgMHhjYmMzZmYzMCwgMHhjMDkzY2VhZCwKLQkweGE3OTdhYmNmLCAweGYyZjJjYjUyLCAweGZiYmY0ODc0LCAweDZmZDA2ZTA0LCAweGJiYmNlN2M0LCAweGE3NWQ2OWEyLAotCTB4Y2EzZTU3MjQsIDB4YmUwMmMzZTUsIDB4NjJkYzdhNzAsIDB4MzVkYmY5NTMsIDB4OWEyZmQ0MjAsIDB4NWY1OTFhNWYsCi0JMHhkM2QzNmY1ZiwgMHg2NmE3OTJmOCwgMHg3MWRmYTE2NCwgMHgyY2VlZmRhYSwgMHgwMGE3YTNkNCwgMHg0MWRhMDBkZSwKLQkweDliZmUyM2JkLCAweDg0Yzc4NWZjLCAweGVjMjIzZTNjLCAweDI3ODhiYzQ1LCAweDA0ZTQyMjdmLCAweGQ1YjljN2Q4LAotCTB4ZDE3NGViODIsIDB4YTdjYmQ1ZmQsIDB4ZjJmOGZiNTMsIDB4YzYzZjc0NjUsIDB4MTJmYzQzOTYsIDB4NDA5NWUyMzcsCi0JMHhjOWRmYTA1ZiwgMHg4M2Q5MzJiNSwgMHg4MGQ3NDZmOSwgMHg0OWVmNzgwNCwgMHhkMmUyOGU5MywgMHhlNTJkZWI4ZiwKLQkweDlkNzgyY2RiLCAweGZmMzM3YzUxLCAweDUwOWJmMWE5LCAweGI1Y2IyZTJlLCAweGViNmY0NzU4LCAweDc1NzZjNWJjLAotCTB4NzU5NmJjN2EsIDB4YmE1ZGExYzQsIDB4MDBjNzhmY2MsIDB4N2U0MWM5M2IsIDB4NmZiYjJmOWMsIDB4M2M2MTE1YjIsCi0JMHhlMzhjOTFkMywgMHhjMDYwNTIzYywgMHhiYTA2MGExNiwgMHhhYTNmNTBiMiwgMHhlMmQ1N2ZlZiwgMHg4NDk2YzViYywKLQkweDg4MWIwZWYxLCAweGNkMTJkMTcyLCAweDljMzg0ZWVkLCAweDFlZmQwNWEzLCAweGJlMDhhZTVlLCAweDg4ZDZhM2M4LAotCTB4ZGRjNjI0YmUsIDB4ZTgyMmFmNjgsIDB4YjllMjcxOTUsIDB4MzhlNzE2MTMsIDB4NDJkZmQxMWIsIDB4MDNhZDI3N2UsCi0JMHgzOGVlZTVmOCwgMHgwZWJjNDRlNywgMHg2YzY0YzM3MSwgMHgzY2YwYTU4NywgMHg1NThiMjljZiwgMHhlMjUzOGJmMCwKLQkweDlhNmJiOTdlLCAweGE3MWU0MjJkLCAweDM4NDFiY2I3LCAweDNjNmQ2NzFjLCAweDRmOWUxMzhmLCAweDlmMzU1YjUwLAotCTB4ZTdhYzQ3MzAsIDB4MjZhYjA0YWIsIDB4MzBiNGEzY2YsIDB4NDIzY2E0NjcsIDB4ZTM0OGNkOWIsIDB4Mzk0ZTlkNTIsCi0JMHhlZTVkZTk0NiwgMHhmMjNmYmE4NiwgMHg5OTJmOThjYSwgMHg0ZTI4MWNjZSwgMHhkYTViMjMyOSwgMHgzNjkyOGYzMSwKLQkweGYzMDJiN2NhLCAweGUxMDk4ZDJjLCAweDYzMzVlODcyLCAweDViYWZhNTdlLCAweDcxODVlYzk3LCAweDg5NzcwMWM5LAotCTB4MWVkOGUwMTEsIDB4YTVmMDRjOWYsIDB4NDgxNWZhYjAsIDB4MWQ2ZWExYWYsIDB4OWVlODdhMmQsIDB4MDZhNDlmNjgsCi0JMHg1MGE0MzA3YiwgMHg1MDkwNDdlOCwgMHg2NTViY2EzMywgMHhhNDQxZmJhYywgMHhmYWNhYjBmMywgMHhmMzA1NDY1NSwKLQkweGY1MTk1ZTUwLCAweDlkYzk2OWNiLCAweDM4ZmUwMzZkLCAweGEyM2EzN2JkLCAweDliMTNmNzVmLCAweDY5NTJmYmQwLAotCTB4ZWYwYTk2MWYsIDB4Nzg0MGMxNzksIDB4OTNjMmZhMTgsIDB4YTFkZTExYjMsIDB4OTdhNmRjMmYsIDB4NWZmNWUyNDIsCi0JMHhkZjA0MGNkOCwgMHhiMjhiYmRlOSwgMHgzMGZlN2UyOSwgMHhmNGU2ZTU4YSwgMHhlMGEzNzc5YywgMHhkZjAyMTU4YiwKLQkweGYzMjMxYWFmLCAweGRjNjIzM2RkLCAweDkzZTllYjU1LCAweDZiMjRlN2UwLCAweGI2MzNmNGY0LCAweDVkNGNiYzkwLAotCTB4ZDNkMjc5ZWQsIDB4ZjQyOWIwM2YsIDB4YjdkMzdmOWUsIDB4ZjgwM2ViZWMsIDB4ZTY0YWI3ZmMsIDB4N2EyZmJjNDAsCi0JMHhlYmU1MjM3MSwgMHg4Y2I2MzU1ZSwgMHhhOWViODJkZCwgMHgwN2NjMzFkMywgMHg5YmY3ZDllYywgMHg0ZmQwN2Q3ZCwKLQkweGEwODY1NGFjLCAweGY5Zjk3MDdmLCAweGYxMWI5YjgzLCAweGIzNTViZmZhLCAweDM0ZmY4ODIxLCAweGU2MTJlM2RmLAotCTB4MzczMmJlMDUsIDB4ZGFiZWJlMTMsIDB4YzA1NmM1MTQsIDB4NmUxZTE2OTIsIDB4ZTg0M2ZiMTksIDB4MzFkMWFmYWYsCi0JMHhlYmUxMmJkNCwgMHg3NDE5Mzc4NiwgMHgwZGZhZDhhOSwgMHg3ZjRlNjJiYSwgMHhkZDJhN2ZkNCwgMHg0ODhjYjE4MSwKLQkweDg4NmU5NTBmLCAweDdiNjdkNDNmLCAweGYwNDZiZDM2LCAweDhmNmQ3MGFiLCAweDdhMmQ3MGU3LCAweGU0NThlYjcxLAotCTB4MzYzNTNlOTMsIDB4MmEzNGYzMDksIDB4OWRhOGZmNWMsIDB4MzNmNjg2YjgsIDB4MjU3MmU4MjAsIDB4OGUxZWY5ZmIsCi0JMHhlMTlmYjcwYiwgMHhjNTg5NzM3NiwgMHg1ZGM3MTQ3OSwgMHgxNWNlN2VjOSwgMHhlODQ3YjVmYywgMHg4ZjI5ODU2MSwKLQkweDFkOTJiZTYwLCAweDI3ZGU1MWQ0LCAweDZjNzMyZTljLCAweDlmYTNmMjNkLCAweDNmMjJhZWRhLCAweDhiNjZjNTNhLAotCTB4NmNkZDFmOTgsIDB4ZDliNDdhZTQsIDB4ODk0Y2U2YzYsIDB4MDQxMzBmMjAsIDB4NWQ3NWJhYmMsIDB4ODk4YmI0NDYsCi0JMHhiZDQ0NTI2ZCwgMHhmNWMyY2E3NCwgMHhhZmNkZTgxMiwgMHgyM2QzZWU0OSwgMHhmODA4ZDVlYiwgMHhmZjcwZWM5NSwKLQkweDVkZmUyZGZhLCAweGExMjBhYTM4LCAweDVkYmEwYzdmLCAweDNkOWQ0ZjgwLCAweDhmMDI5ZjE0LCAweDdjNTU1ZTJhLAotCTB4ODg0YmUyZmEsIDB4M2YwYjM2NWYsIDB4YTRiYzdiNzMsIDB4YjNhZWUzODksIDB4MTY5Y2UzYWIsIDB4MmY2NjRmN2MsCi0JMHhjZWQxM2FmYSwgMHhlZGY4MDM5ZiwgMHhhNWM0ZGVmOCwgMHg1NzVmOTM0YywgMHhmNTg5ZWFmMywgMHgxNDM4Yzk1ZSwKLQkweDNjYTMwMmNkLCAweGJkZGRiNjVjLCAweGJhZTMwMGMyLCAweGYzYzczMDQ2LCAweGIwYWY4ZmQwLCAweGIzYmVhMDk2LAotCTB4MzFkYTNiNTUsIDB4ODY3OGRlZmYsIDB4OTcxYjM3ZTcsIDB4OWE0YWRmMzAsIDB4NzNmZmYxODcsIDB4MmE3Y2E1ZjcsCi0JMHhlOTY1ZGRlMiwgMHhmNWQ0MTc2OSwgMHg2N2VhYmQ4MSwgMHgyMmU1NzBlNywgMHhhYmQ5YmQ1YywgMHg4NTE3Mjg2YiwKLQkweDE3Mjc2ZmY2LCAweGQ2ZTg5MWM1LCAweDZiZjVjZjE1LCAweGViZGZmMTg0LCAweGUyYjdjZTg1LCAweGY5ZDEyYmY1LAotCTB4MzkwZjUxMGUsIDB4ZmM4NTNmMTIsIDB4NmIzZjk0NGQsIDB4ZTFlZTkwN2UsIDB4OTE4ZTJjZjQsIDB4N2I3Y2IxZmUsCi0JMHgxOWRjYmM0ZiwgMHgyNzZiMmYwOSwgMHhiOGY0ZjJlOCwgMHg4OGVkMTY0ZSwgMHhkYTE2Nzc2NCwgMHhmZmJjZjNiZiwKLQkweGNmNTI3YjQyLCAweDY5ZmMzZmJjLCAweDU2ZTdlN2ZjLCAweDBlYmVkZTNhLCAweGE2NGI3Y2UxLCAweDFmYjllOTM4LAotCTB4NWYzMTE4NzcsIDB4NTVhN2U2YWMsIDB4NGI1ZjNkNzgsIDB4YjlmYTA5Y2MsIDB4NWE5OTZiZjMsIDB4OWI1ZDdhZjUsCi0JMHg1NzcxODg1NCwgMHhlNDhiZWVjOSwgMHg3ZmI2NzcxZiwgMHg2NzcxZmU0ZCwgMHhiZWFjN2Y5OCwgMHg0ZjYwNWVmNywKLQkweGIyZDE4Zjk0LCAweGZjZmZmODg1LCAweGNiY2YxZTA2LCAweDQ4ZTlmOTRjLCAweGRmYjNjMzgwLCAweGYxMGE3Y2MwLAotCTB4YjQwZmY5MmYsIDB4Njc5ZmU4NWUsIDB4ZjFjN2UxY2MsIDB4MWVjOTYyNWIsIDB4OGYzMDM4MmUsIDB4YWM1ZjFjZjAsCi0JMHhiZTA4NGE2MywgMHg0Y2QxOWMxMiwgMHhiZDk3YzEwOSwgMHgyN2U5YTZkYywgMHhjNjY4ZmFiOSwgMHhhYmVmNGNhNywKLQkweGJlZTY5ZmI5LCAweGJkM2Y3MzQxLCAweGNmZDM0MGJhLCAweDMzNDliZmFjLCAweGE5NTk3YjNlLCAweDFkZTM5ZmE2LAotCTB4YWZkZjE5YTcsIDB4M2Y0ZDc2ZTksIDB4Y2Q2ZWY5YjcsIDB4YjhlNmNkZjgsIDB4ZTAwZWE5ZTcsIDB4YzNmYTA2NzUsCi0JMHg3YWM1MmI3YSwgMHg4ZjdmNWJhZiwgMHg5N2U2MzllNiwgMHg5OTJmNThmYywgMHhmOWZkYzgyZiwgMHhiMWZiMzFlNiwKLQkweGYyMjk1MjVlLCAweDE2ZmJkNzEzLCAweGRmOWRlNjY5LCAweGU4MmZjZGFjLCAweDc0YmVkNzU5LCAweDRmOWQ1ZmMwLAotCTB4YmZhMWY4NzIsIDB4ZmVmNmJkNjAsIDB4ODQ4ZGQ2YzIsIDB4ZWQzZTg1Y2YsIDB4NmEyZmM1ZjUsIDB4YTY4N2Y5ZmIsCi0JMHg0YzcxYzQwZSwgMHg3ZjQ0MmFlZiwgMHg2ZDc2ZDdlZSwgMHg3NDhhZTJiZSwgMHg1NTc3NWVmNiwgMHhkNTRhOGU3NCwKLQkweDY4YWNkOWQyLCAweGJmOGUxY2U5LCAweGQ4NWIzYzk4LCAweDM3ZGZmODdkLCAweGExZDYyZmUwLCAweDBhZWY4YmU1LAotCTB4NmJiMDdmN2YsIDB4NjIxYjljZjMsIDB4Y2Y1MWM3ZGMsIDB4OTUyZWI3NzUsIDB4Y2JlYmU2MTksIDB4YmJiMjNkNzksCi0JMHg4M2ZjY2JmNSwgMHg3ZDNjODQ0YSwgMHhmZDNjOGY2ZSwgMHhiYjEwZjYyNywgMHgzYmU5ZTZhNiwgMHgyMzcyZmViMSwKLQkweDk3ZjUxNmZiLCAweDNjNDU3ZmRkLCAweDMxZTU4MTQ0LCAweDhhY2RmZjgwLCAweGY1Y2JhNjFkLCAweDJmMzA3MzE2LAotCTB4ZDRiZmFlMWYsIDB4NWZmN2Y0MTYsIDB4ODNkN2E0ZWMsIDB4ZjA1NWFhNzUsIDB4ZjdmOGIwZjQsIDB4NWFhNzA4NWQsCi0JMHg5ZWVmMThjNywgMHg4OGRlZjA0YiwgMHhmZjgwOGM4MCwgMHhlYTlkN2MyYywgMHg0Yjg3ODAzYywgMHgxMmY4Y2YzOCwKLQkweDUxYzYwYzViLCAweDRiZGNmNzViLCAweDRiNmIwMTcxLCAweDQ4MGVmYWU0LCAweGM0M2UzYTFlLCAweGRhM2QyNTNmLAotCTB4MjM0Y2ZmODIsIDB4ZTQ0YzY4YmIsIDB4MTg5NGQxNzYsIDB4YmYzMWM3MTIsIDB4ZDg1N2JmOGQsIDB4NTFlNmRlYzUsCi0JMHhiNWJkMThlYiwgMHhlYTk5MmVkMiwgMHg4ZjU4NWQzMSwgMHhmYmQ3YTA4OSwgMHhmNjgzZmUyNiwgMHhmOTFlOGJlNSwKLQkweDQ1ODliZWQwLCAweGY3YzI3MTIxLCAweDdlYTFmN2JiLCAweDI2ZTdiYzA3LCAweDYzNjI3YmMyLCAweDQxNGE2ZWMxLAotCTB4OThkM2Y5YmIsIDB4YWViNzkyMzgsIDB4M2FlZmIyMDMsIDB4YTRkZTcwYjgsIDB4MDUwNmRiYzQsIDB4ZjBlMTJkZWIsCi0JMHg5ZGQ5MzQ4ZSwgMHhkZTdkMTBmYSwgMHg2NmVkNjkyNiwgMHg0M2Y3MDE2MywgMHg5ZGI5MTIwYSwgMHhmOGYwYjJhZCwKLQkweDdiZThhYzc1LCAweDRmNzZmY2MyLCAweDQxNGY4ZjEzLCAweDQyZGJhYTFhLCAweDg5YjFjMWZjLCAweDVjZmUzNGIxLAotCTB4NWM1OGM5NzQsIDB4ZGYxMTQ2Y2YsIDB4ZjQ0OGU2MzcsIDB4MjI0OTQ2YmUsIDB4NWYxZTVlZmIsIDB4NzVkNzE2M2EsCi0JMHg4ZTUyNWVjMSwgMHgzZTA0NGFlMywgMHgwNDZmYTJjNywgMHgwZTVmNzM2ZCwgMHgwZGY2MjI4ZiwgMHgxM2ViZjNhOCwKLQkweGI2MTI3YzYxLCAweDRkOGVkNGE1LCAweGM4M2YwYWI0LCAweGZiZDIwMzdhLCAweGRlOTNiNDQ0LCAweDhkNjU5NDZiLAotCTB4OTNiNmE1NWYsIDB4MmViYWY5MTIsIDB4MGEyYWNkYTIsIDB4MjE2OGM5Y2EsIDB4MWU4NDYzMzcsIDB4MTQ3MWZjYzMsCi0JMHhjMjczOTMwOSwgMHhkZTRkNjRlOCwgMHg1MTMxODhmOCwgMHg3YTI1OGRlNCwgMHhiYzc0ODlkYywgMHhiN2IxZDA1NSwKLQkweGNmMzNiMjNjLCAweDY5ZDUwN2JhLCAweGFkNzkxZTc4LCAweGQ1OTFlNzk5LCAweDNjOGY3MzNjLCAweGM0NGM2M2IyLAotCTB4MjFkMjMyM2MsIDB4ODc5NDE2YzYsIDB4ZjU5Nzg5ODUsIDB4OWJlYTA2NzMsIDB4Mjc4ZTljYzYsIDB4MWM3ZjIzYzYsCi0JMHgyM2NmMWQ5MiwgMHgzMWJjYzdlOCwgMHhlMmI3MDBmOSwgMHg5MWYwMzlkMCwgMHg0YWQ4MWIxMSwgMHg3ODE3ZjQzMywKLQkweDE5MzNjYTE1LCAweDJkOGIwZTIwLCAweGMzZWZjYTA4LCAweDlmODQzOTg5LCAweGE2ZmQ0N2MxLCAweGZjM2ZiODdjLAotCTB4ZjMxZGFiOTgsIDB4MzFhNjAzY2EsIDB4NjZmZmFhMWIsIDB4ODcxNjVjZDYsIDB4MTYwNmM0ZmUsIDB4Mjk1OTZlMzEsCi0JMHg2NGJlMzllOCwgMHg5ZTcyOGM5NywgMHgxMmZjMDVkNCwgMHgwNTJiMWU4MSwgMHg1NzhlNDAzZCwgMHg3Nzg3M2QyMCwKLQkweGVlYzliYmI5LCAweGFhNDAzZDA4LCAweDNkYTNlMzBjLCAweGMzOTdmMjNhLCAweDU3MTAzZjlmLCAweDdiZDIzMGY2LAotCTB4YmU3MjJmYjAsIDB4YzM4NWEyZTQsIDB4ZmQ3MThjNjEsIDB4YmMxZmU3MDQsIDB4ZmE4OGMzYWQsIDB4MzdhYTgxNjYsCi0JMHgwZjRjNzUyYiwgMHhlODJhOWRmNCwgMHhhZjAzNzUzNywgMHg5NzhiYjM1MywgMHg5ZmFhYzkyZSwgMHg4NjdlNjhjNSwKLQkweGI0YzE2MGZhLCAweDFmZTYxZjU4LCAweDc4ZTViNDE2LCAweDQ0OTcyZTA5LCAweGRiNGYxNWY5LCAweDE3ZjYxNzYxLAotCTB4YzU2YTFkMGMsIDB4N2JmOWQ3NzgsIDB4NDc5MjdkMjYsIDB4N2FlMzFhMmUsIDB4NTEzZWNmNDcsIDB4Y2ZkOTAwZjUsCi0JMHhkYzViYWE0NCwgMHhhMmVhZjgyZSwgMHg0MTM4MjE0NSwgMHgwMThkYWYzZiwgMHhiMGQ4MmMzYSwgMHg1M2VlMTc2MiwKLQkweDE5ZGZlZjc4LCAweGNhOGUyN2Q1LCAweGIyNzBjMzVkLCAweGNiMzkwMDNiLCAweGIzZDViMDBhLCAweDM4N2MwMjhhLAotCTB4MjY5OWU2OTUsIDB4MGQ3ZWYxZTYsIDB4ZGYwNTM1ZWYsIDB4MDFkYjQ3N2IsIDB4MDM1MWNmNWEsIDB4NWY4MDlhZjMsCi0JMHhhNWRlNzczYSwgMHg5OGRhYmZhMCwgMHhmZjEwNzI2NCwgMHg3MWQ3YmE4YSwgMHgxOTEwZmRkOSwgMHgxZDU3N2QwZiwKLQkweDJkYTMzNjgyLCAweGQ2MDZiYWM2LCAweGI4YzhjYWIxLCAweDc2OGJhYjdmLCAweDVhMjdmZTIwLCAweDJmYzRmNDNhLAotCTB4YzQ3YTVkODksIDB4Njc0MTU5ZTMsIDB4ZGZjOWYxZjQsIDB4Mjc0NDYyNGYsIDB4ZTljNzVkMzksIDB4N2RmMGFkOTYsCi0JMHg3OWI1ZmQyMywgMHg3NTEzNzdjMCwgMHgxOTAyZmU0MiwgMHhjYzYyN2Q3OCwgMHhlMDE1NGIzYiwgMHgyYWViMDNjYywKLQkweDdmNDFlOWM3LCAweDY3N2Y4YzRmLCAweDBmZjQwZTY5LCAweDRlM2Y5YmFlLCAweDMxM2RmYzBmLCAweDczMmY5ZGZkLAotCTB4NWFkZmQ0NDAsIDB4MGZlZmM1NTcsIDB4YmVjYmU3N2MsIDB4NWJhYzBmZDAsIDB4NGNkZmVmYzAsIDB4NTlkZWNmYmMsCi0JMHhmMzBlM2Q1NywgMHhkNjVlZWZmYiwgMHgwN2ZlN2MwYiwgMHg1N2VmMmU2NCwgMHhiYTUxY2FkYiwgMHhjNjcxNDhmYSwKLQkweGNmMzU0NGIxLCAweDFlZjgwY2NjLCAweDhlZWZkYjU3LCAweGE5NzU5ZGEyLCAweDQxYTc3MGY1LCAweDhlNDcwZjUzLAotCTB4OGRiZjAxMzEsIDB4MTJjNTdjMTcsIDB4OGMwZWM4ZTMsIDB4YWYxYmY0MTMsIDB4MThmZWQzZjcsIDB4Zjg0ZmM5OWQsCi0JMHg1ODM1OGViZCwgMHg1YjAwNmY5MSwgMHhmNjE1MmVlYiwgMHhhZWQwN2Y3YywgMHg3MjRiZjk2OSwgMHhlODBjYjYzMiwKLQkweGUyNTYyOTJkLCAweDk4Y2I1NTkzLCAweDNmNzY4Y2RiLCAweGYxZDc4NzU4LCAweGUxNzMzYzNhLCAweGQ0Nzg1NWZiLAotCTB4MGI4MGY3ZjcsIDB4ODViN2FiNDgsIDB4ZTY4MWI1YzIsIDB4MWNlYWUxNTEsIDB4Nzk0NWU1MTIsIDB4MGFhN2VkNTIsCi0JMHhmNWQ0YTc1NywgMHhiN2JmMjYyYywgMHgwMTNmYmRhNCwgMHhkYjE5ZDZlOSwgMHhmZjQxMjU5NSwgMHg0NDIzYTRjNSwKLQkweGFlYTRjZWM3LCAweDQ4NDcyNTY3LCAweGE4ZTljMGRmLCAweDM4YzU3MjdiLCAweDE5ZTdiYzJmLCAweDAyNGJhOWQ5LAotCTB4ZjkxOTQ2ZmMsIDB4OGMyNjkzM2UsIDB4OGYzZGUwNTcsIDB4NThiZGI5MjQsIDB4NzNiZTAzZGYsIDB4MzJlZjkxZjgsCi0JMHg0Njg3YTQ4ZCwgMHgyN2U2ZDUwZCwgMHhjZjljNDkyYywgMHgzYTNiNDU5YSwgMHgzMGZlYjlhYSwgMHg5YjY3YTVmMCwKLQkweDc4YzA1NmM0LCAweDIzNmVjNWNmLCAweDZkODk4OWRhLCAweDY4NGU4YzI3LCAweDMwOWRiNmViLCAweGMzYWFiZWEyLAotCTB4Yjc1M2NjM2UsIDB4NmY1MTE4YzEsIDB4Nzk5MjQ4NmQsIDB4MGZjYzMyOWUsIDB4ZTAzOTliZGUsIDB4YzdkYzQ0YTEsCi0JMHg0NTUxMjk1MCwgMHgwOTFkZGVlZSwgMHhlZjdmYjFhMywgMHhmODI1NWM1YywgMHg4ZWI3MjMyZCwgMHhiOTY2YzdjNiwKLQkweDc2YzIxZmRhLCAweDhiZDhlYjBlLCAweDJkYzMzNDJjLCAweDk5ZDJmYzZiLCAweGJmMWEzMWQ1LCAweDVkYmQ1Njc2LAotCTB4MGNkMzlmZDMsIDB4OWViOTAxZDQsIDB4MWI1ZDJjYjMsIDB4NWI4ODMwM2YsIDB4MmMxOTllMDEsIDB4NmRmYTg3ZjgsCi0JMHg4Y2UzYTBiYSwgMHhkYzAxYjVkNCwgMHg2ZGMzMzJjNywgMHhjYzg0NzZmMCwgMHg4NTZkYjEzNywgMHhkNzcwODZkZSwKLQkweGJmNTIwZTRiLCAweDczZTBhNjVlLCAweGExMGFmOTMzLCAweGViNDM3YmQ1LCAweDc5NWJhMzYyLCAweDg2YWVhMzMyLAotCTB4ZDgxNWZiZmIsIDB4NTQ1NmJjMDcsIDB4NDI0NTNlNGIsIDB4YmVlOTE4M2MsIDB4ZmJhMjU1YTcsIDB4NDdjN2Q2OWUsCi0JMHhjZjMyM2VlMSwgMHgyNmYyODk1MiwgMHgzYzQ0N2RjOSwgMHgxY2VmZWMyNCwgMHg1MWU4MmIwMSwgMHhmMzMzY2UwMywKLQkweGEzYjMxMmZiLCAweGJlZmUxMGRlLCAweGU5OWNmZjBhLCAweDNmODlhN2U1LCAweGFlYWY5Zjg1LCAweDc2MDJiYTczLAotCTB4YzljZmFlMTcsIDB4ZmU4MGM0ZmUsIDB4NjRlZmFjMzUsIDB4ZGE5ZjA2ODcsIDB4NmQ3YWFjZmUsIDB4NmQzMmNlN2YsCi0JMHhmMDkyNmE3ZiwgMHg4MWIyMDdkZiwgMHg5M2QzNGYyOCwgMHg1NWVhM2QyNCwgMHhlNjQ1ZmZiNSwgMHgwMWY5NmZmYiwKLQkweDZiYjJjZDllLCAweDhkNjdmMjI2LCAweGE4ZjU0ZmQxLCAweGZhOWJiMmNkLCAweDVlYjg3ZGVhLCAweGMwZWU0OGM3LAotCTB4OTYzOTIwMWYsIDB4MTk1NzNlNDgsIDB4ZjQxMmQ2OWMsIDB4ZTIyNTZiYTMsIDB4YzQyYzk5ZGIsIDB4OGUwOWM4NWYsCi0JMHhiM2RjYmVhNywgMHhkNzEyNjhmZiwgMHhhZWNjYWIzYiwgMHhkYjE3NTRhNSwgMHhjMTM3NTkyOSwgMHhhNzdhNTFhNSwKLQkweDU1YzBmZDFlLCAweGM4YmNlNDUyLCAweGRlZGM0OTYzLCAweDhhMjBjNWJlLCAweDIwMDZiODA3LCAweDlmNWRhMjkzLAotCTB4YzJmM2VmMWEsIDB4NzZmYzA3N2IsIDB4ZmJmZDE3YWUsIDB4MDdjMDg1MDEsIDB4YjczZGNhMGEsIDB4YmQ4NWUzMzcsCi0JMHgyNWZlMDQ5OSwgMHhlNDAzN2ZmYSwgMHhkZmE0ZTk5NiwgMHg0OTVhMzQ2ZiwgMHhhNDNiMGJiZiwgMHgyZmU3MGJlYSwKLQkweDdjNjg3NmI0LCAweDNmOGE3ZWM2LCAweDdiNWZhZDI2LCAweGZmNjJmNTBlLCAweGM3ODJjZTdlLCAweGNjNDdiZTAxLAotCTB4ZWM4ZmZkZmMsIDB4MmZiODdjOTAsIDB4M2VkMDZlYTcsIDB4YzAyOTlmZDIsIDB4YmFkZWY4MTYsIDB4NWI0N2ExNTQsCi0JMHg1MmFlZmJiNSwgMHgyZTYxYWY1MCwgMHg3YTIwYzI3ZiwgMHhlNTQ5OWE2ZiwgMHg0MWU5Mjc3NiwgMHhiYmFhNWZjOSwKLQkweDQ1MjlmYTA0LCAweDBjYTZmN2JjLCAweGJjOTVmMDg1LCAweDc1YzI0NWE4LCAweDBhZWYzMjY3LCAweDQ2M2ZlM2I0LAotCTB4YjYwYTRjMjEsIDB4OGZjZmVkNTcsIDB4NzlmZGMyOTIsIDB4NjVlNjEyNGIsIDB4MTQ4YzNiNTIsIDB4ZTMyZWIxZWYsCi0JMHhlYmE3OTQzZiwgMHhmMjMyN2YzOSwgMHhiMGZjZjg1OSwgMHgwNzU3YWE3YywgMHg3MThiZjJlMywgMHg3N2I5YWY5OCwKLQkweGRjNmZiZjY3LCAweGI0OWIyNGVmLCAweGFhYzFiNzcxLCAweGU3YzdiYjhkLCAweDQ0Y2ZmNTY5LCAweDRjZWY1Njg3LAotCTB4YjlhN2VlMmUsIDB4NTAzOWM1M2YsIDB4Nzk2YTdmNzMsIDB4ODc3ZmE2YTEsIDB4ZjhjZDY2ZWIsIDB4Njk5N2E2YmIsCi0JMHhlM2E5NTFmYSwgMHhkYTAwZjJjMiwgMHg5ZTRjNGFmYywgMHhlYjEyYmYzNiwgMHhhMjUxZTZkMCwgMHhiYTdhZmMwZSwKLQkweDlhMzE3ODA0LCAweGMwNmUxZGJjLCAweDQ2YzgxMzQzLCAweDQ3NjgyZGIxLCAweGE4OTljNjA2LCAweDY4NWQxYjQ4LAotCTB4MzRkYjYwYjYsIDB4N2M4ZmNhMjQsIDB4Yzc4N2Q0ZDIsIDB4YmUwNzUxZTEsIDB4Nzk4N2VhOWYsIDB4NGM1YmYxNGMsCi0JMHg0OTc4OGE1OCwgMHg4YTYyOTVmMiwgMHg3NTQ0ZDAxOCwgMHhkNDFlMWJkNSwgMHhkM2QzOWJmYSwgMHhlZGE5NWNiOCwKLQkweDk5ZjcyNGIxLCAweGJjMWJhYzY0LCAweDdmNzNhNGE4LCAweDg5ZjE0MDM2LCAweGJmNzE5YTI5LCAweGZjODliYjY4LAotCTB4YmU0ZTM1MjIsIDB4OTQ2NWE3MWMsIDB4MGViYTQwOWMsIDB4ZjU0OWQwN2EsIDB4YWNjYWQ2MTMsIDB4ZGU3YzU3OTgsCi0JMHhkYmE5ZjIyOCwgMHg0MWRjM2VmOSwgMHg2NzNhMWRhZCwgMHg0OTJmN2M4OCwgMHg0OWUwZmFlNiwgMHg5YzU4ZTk1NywKLQkweGFjMGRhZWJmLCAweGZhZDNjYTJjLCAweGE3NTg4YzhmLCAweDhmNmI2YmFjLCAweGVmOTY3YjQzLCAweDc5ODhjOGZhLAotCTB4NjE3NWUwYmIsIDB4ZDE1ZGY0ZTcsIDB4NTVmOTVmNTgsIDB4ZmY3MTFjOGIsIDB4ZjdjYzkyYjIsIDB4N2ExM2VjNmIsCi0JMHg4M2Y3ZDY3ZCwgMHhiMGM5NTFmMSwgMHhiNTllN2VhMCwgMHhjMzJmY2JiNSwgMHg1ZTgxNjdmYiwgMHg0YTZiZjJmMywKLQkweGZhMGQzZDI0LCAweDNjY2YxMzU5LCAweGE3ZWVhNjk5LCAweGMxZWM2YTcxLCAweDAzN2VjNWRkLCAweGVkNmE5ZmQ5LAotCTB4NzhkMzM5ZjgsIDB4NWM3YTA0NWMsIDB4OTFhMzNkN2IsIDB4MWQ2MzBiZjQsIDB4ODE1YmNjMDYsIDB4OGZkY2Q3NWUsCi0JMHhkMjcxMTY0YiwgMHgxMmU4MzY0MCwgMHhhZWEzODFlOCwgMHgyYmI1ZmJjOCwgMHhjNzQ0ZjRkMywgMHhhMjMyZWVhMywKLQkweDRmODA5M2MzLCAweGVjOWY5N2Y0LCAweGQ3OGUzZjgxLCAweDY1ZWRlMTJiLCAweGZhMTA4MWU0LCAweDRmYWI4Zjg1LAotCTB4Y2JmNDdlZTMsIDB4MDdlZGU4YmQsIDB4OTc5ZjdkMDQsIDB4NTRhODA1MDIsIDB4ZTI2OGFlM2QsIDB4YjlhNjk5ZGYsCi0JMHhmNzNmNzE4YiwgMHgxYWFmY2NiZSwgMHhlYjMxNWViMSwgMHg3YjQzMTJkNywgMHgwM2Y2ODdmYiwgMHhiOGNmOGZiNCwKLQkweGVlMzI2Zjc1LCAweGVjYjRmNGFmLCAweDdmYzA2NjRkLCAweDA1NjUwNjM1LCAweDFmYzBmM2ZhLCAweGVhN2ZmNDBlLAotCTB4N2YwNGZkNWEsIDB4M2I2MTRiNmQsIDB4OTU2ZGFmNWUsIDB4M2Q5MmE4MWMsIDB4YTE4ZGNlZGIsIDB4NDY4ZWIyNzUsCi0JMHhkZjNkZmZhYywgMHg5MzIzNWMwYiwgMHg1Yjc1NWZiOSwgMHgwNGYzYzJiMiwgMHhkYTI3Nzg2ZSwgMHgzZTUxNmRmZCwKLQkweDAwZmM4NDlmLCAweGRhZTEwOWZhLCAweGU4NjZiMTIxLCAweDE0ZGFiZjNmLCAweGEwZmJlZWIxLCAweGQ1OWVmN2MwLAotCTB4NmFiMzhhNDYsIDB4Yzc1Yzc5ZTAsIDB4NDY3ZGNjYmUsIDB4NTZkM2YyMTMsIDB4ZWI4NDk3NTgsIDB4MGM0NzdjMzgsCi0JMHhjMGQ0YmZjZSwgMHhlMTUwY2ZkMCwgMHgzODE5OTMzYiwgMHhiMGZmZWI4ZSwgMHhiODFkMDIxMiwgMHgyNjUyYWFiZSwKLQkweDU0Yjg3ZjdjLCAweDlmZTcyM2U0LCAweGI4Yzc0YzZhLCAweDc3ZWY5NmE2LCAweDRkZDk1ZGRmLCAweGFiMGZiZTc5LAotCTB4MzY1NjlmYjksIDB4Mzk3MjQwZGYsIDB4NTdmNzA5NjMsIDB4ZTU1YWY5YzIsIDB4OWYwNWE3ZGIsIDB4Mzg2ZmYzODYsCi0JMHhkN2UwZjZkZiwgMHhkN2UzYWJlYSwgMHhlNmJmMjBjYSwgMHhmYTA3ZGRhMywgMHgzZTQxNGU4ZiwgMHhlZWZmMDFmYSwKLQkweGRkYzVmYTY1LCAweGJiODAxNDg2LCAweDgxZDVhMzZmLCAweGNiMDZiZGZiLCAweDUxOTI4N2JlLCAweGY3ZTZlYzZmLAotCTB4OTQ2Y2Q0ODcsIDB4ZWU1MWZlYjgsIDB4MzdhNWY1YzYsIDB4MDkxYWQ5MTksIDB4ZWRkMzg5ZjksIDB4ODUzNzQxMDEsCi0JMHgxNDMxNDk3NSwgMHhhMmZhMDVmZiwgMHhiZjUxY2E5ZSwgMHhlOWIwMzA4NywgMHhhNzNmMzE1YiwgMHhmMDY3ZmFlNywKLQkweGQ3MWJhOTZiLCAweDZlNmZmMDg0LCAweDU1NWJlNzMyLCAweDMyMzQwZTJmLCAweDA3YWE1NmY3LCAweDAyOTlmNGI0LAotCTB4ZTA2Y2JjZjMsIDB4MzEyYzljZjUsIDB4YWViZjZlNWYsIDB4NWRhMDUzMzEsIDB4ZTRmNWNjOWYsIDB4ZGE4NzAxMGEsCi0JMHg4MGU0Mjc1ZiwgMHhmODRkZGM2NSwgMHhmOGUyNjg5YywgMHg1ZmNjYjcxZiwgMHg5OWY4ZWI4MSwgMHhlYTMwZmRkMSwKLQkweGVmNTkwOWQ1LCAweDZiZGRhMGQ3LCAweDIwZTZmYmVhLCAweDA3MzIxZmNhLCAweGJjNmFlMWY5LCAweGE3YzQ3YmJlLAotCTB4ZjU4M2VlMWIsIDB4MjY4ZmFmOWEsIDB4M2U3NzlhZmEsIDB4MzY3ZTQ1NmUsIDB4NzE0ZDBlZTcsIDB4YjUzZmUwNDcsCi0JMHg2MWM4NWNmNSwgMHhkNWYwM2I2ZSwgMHhhYWQ0N2U4NSwgMHg0ZWJiMjlmZCwgMHg3MjlmNjkxYiwgMHgyNDMxYjlkYiwKLQkweGU4ZDIxNzJmLCAweDUzNWNmYWJhLCAweGMxY2Y5NzFhLCAweDlhYTgzZjYyLCAweGFkYmQwNGNmLCAweDhlMDgyZTJmLAotCTB4NzBjMGYxNTMsIDB4YzIxMTVlNzcsIDB4ZWJkMTAyZjMsIDB4MDg2YzI1YmUsIDB4NGUzZmFiNGYsIDB4NzM1OTlmZWIsCi0JMHhmMzBiOWE1OCwgMHgxYTcwNjVkYywgMHhmN2VmODAyYywgMHhjNjJmYTdlMywgMHgyZTZmMmZmZCwgMHg4NTFkY2M2NywKLQkweGNjNGNlZmZiLCAweDAzZWUxZDdkLCAweGIwM2Y1MmI0LCAweGVmZmE5NTNjLCAweGRkYTg1NzJjLCAweDg0YmQ3MjYyLAotCTB4NGY2M2JhNzgsIDB4YWJlZDJlN2QsIDB4NTVjYTdjY2MsIDB4M2NlOWVmMGEsIDB4MDUzYjEwNjgsIDB4YTgyN2U0NGQsCi0JMHgzNmVlYTFmNSwgMHg3ZWUwOTk5OSwgMHhlYTg5MzZmNywgMHhiM2ZjMmE5ZCwgMHgzNzMzYTQyZiwgMHhlM2RmOTdlOCwKLQkweGRhYzFlMGZiLCAweGRlOTJlZjY1LCAweDFiOWY1NDczLCAweDkwZDI3MTgzLCAweGQ4OGQxMzlhLCAweGYzZmIyY2Y3LAotCTB4OGUyZmY0MTgsIDB4M2U0MTNkODMsIDB4YTU5ZmJmMDMsIDB4MGU0ZmE4NGEsIDB4NWRkZjcxMWIsIDB4Y2QzYjA1YzUsCi0JMHg2YmFlYjJmMywgMHhmNzlkY2EwYywgMHg1MGVhODkwZCwgMHgxOWNmNWJjNywgMHg2MmJkYjg1MywgMHg1ODA2Y2EwOCwKLQkweGZmZTAxMzlmLCAweGViODEzOTIyLCAweDNhMjFiNjkzLCAweGRjYTFkZjRlLCAweGQwZmMxMWFmLCAweDcxZDdjMzdlLAotCTB4MzJkMzBmNDgsIDB4ZjE5YmVkZTUsIDB4NDMzMmZkZjksIDB4ZGE1MzVlYjksIDB4YTA4ZDY3MTUsIDB4YmNjMjhmODcsCi0JMHg3NWMxNWM5OCwgMHg3ZjdlMWI2MCwgMHhlYjliZDFiYSwgMHhlYmE2ZTc4MCwgMHhmYTliZWYyMiwgMHhiZTcyZjkyYywKLQkweGZmMTRlNDgyLCAweDBhYjdlMDI0LCAweDYwYjM2ZmMxLCAweDhhMzZmMTQ5LCAweDIwZDFmYzgzLCAweGNhZGFiM2NmLAotCTB4YWRiMWViNGUsIDB4ZGE0N2Q4OTcsIDB4MTQ3ZDhjZjgsIDB4YzZmN2M3ZTIsIDB4YWRiNmRmODcsIDB4ODM3MmY5YzMsCi0JMHg1OTIzOGM3ZCwgMHg3MTg0NWY4OCwgMHhkZmJjZDMyNCwgMHg5OTRjZjNjYiwgMHgxMWRjNTNmZCwgMHgwZTU5NzlkNiwKLQkweDAzYmZjMDNhLCAweGUzODFkNTdhLCAweGRmOTFkOGE0LCAweDc2N2I1MjA3LCAweGNhMGFjM2M3LCAweGViYmEyOThmLAotCTB4NmMxN2I0MjksIDB4OGVlMjhlODAsIDB4MWZkNmFmNWEsIDB4ZTVjYTk2M2EsIDB4YzBhYTU4ZTEsIDB4N2UzNjhhNWIsCi0JMHg0ZTQ5Mzg4MiwgMHgxYzUyNzFlMSwgMHhlMjQzODQxNiwgMHgxNGViZjBhNywgMHhhZTUwOTkzZiwgMHg4MTAzYmRlMCwKLQkweGEyNDRhZjNlLCAweDI5YTk2YTRmLCAweGFiZTUwOTI1LCAweDAxOWNmODk5LCAweDg1N2YyMzlmLCAweDIyOWVkM2FmLAotCTB4YWU0MmQ5ZjIsIDB4MjM1Y2EwNjcsIDB4Yjk3MmI2ZmYsIDB4M2JiNzlmMGUsIDB4ZjM4ZWM0YjUsIDB4NWM3ZGM2YWUsCi0JMHg2OWM2ZjQxMSwgMHhmNWRhY2ViMSwgMHhiM2NiZTExMiwgMHgzYTc4NGVkZSwgMHg0YWJiZDZjMywgMHgwMGNmMmY4MSwKLQkweGEwMmZiODFjLCAweDQ5OGFlNWQzLCAweGRiOGQ3YWMwLCAweDA0YjM2MzE1LCAweGZhZGQ0MGY1LCAweDc1NmU3YTE4LAotCTB4NzNlZGRiZmYsIDB4YzI5NzlmYTEsIDB4NmI2Y2ZlZjksIDB4M2NmMTA5OTksIDB4M2Y5NzNkN2IsIDB4ZmRjNzdkZjUsCi0JMHg0ZjI4ZWMzMywgMHhhMzJlODY0NSwgMHhiNDY3ZWUwMywgMHgzZjQzODg5ZCwgMHg1NGM3NjhiMCwgMHg2ZjYxY2EzYiwKLQkweDcwYTg2NjcwLCAweGYxNmZiYjJlLCAweDA3ZTczYjQ5LCAweGY1YWE2ZmNjLCAweGJmNGFjZjM4LCAweDc4YmZmMTExLAotCTB4NmRmZTIzMTksIDB4M2E4N2ZlZGYsIDB4NmRiM2UzOTQsIDB4ODdiNDU2MzEsIDB4NzhjNjc2NjcsIDB4YmU3N2ZmNTEsCi0JMHg0OWQzZTUxMSwgMHhlMzc4ODcxNCwgMHgzMTlkYWY0MSwgMHg3ZjIyNGM3NCwgMHhjNTZjODc3MywgMHhjNmYzZDFmOCwKLQkweDNjYTE0ZmU3LCAweGExNDdiNjdhLCAweGI3MTZjN2U3LCAweGVkMGU3YzNkLCAweGQ4ZGI0ZDVlLCAweGRhN2NmYWQzLAotCTB4OTU0ZmZlODcsIDB4Zjc2NWRhODcsIDB4ZmVkNTdhZDMsIDB4MGE0ZGNiZTcsIDB4N2FiM2QxZWEsIDB4YjcxNjI3YWUsCi0JMHhlZmZlNGFiZSwgMHhmOWRkOGJlMiwgMHhiMzNmMGY1OCwgMHg1MGMzNmZmMywgMHhkYjdlNzlhZiwgMHg5OWY1MGMzZCwKLQkweDYxZWVmNWU3LCAweDVhZjNkZjc4LCAweGJmMjQ3ZDRjLCAweGYzYzY5N2M1LCAweGNjYmRhYTQwLCAweGU0ZDdhMjM5LAotCTB4NWQ4NWEyOGIsIDB4MmU2ODY5YzgsIDB4NDU5ZDdkYzcsIDB4MzAzOWE3ODcsIDB4MmZkZWFiOWYsIDB4N2VkMWQ1Y2EsCi0JMHg0NmY3YTJmZSwgMHgzYzg3ZTdkOSwgMHg5N2QwMTBkNywgMHg4N2ExZjVlMywgMHg4NjU0YzU0NywgMHg0MWFhNjVmMiwKLQkweDU1NWUzN2NkLCAweGVhZWYwNzllLCAweDc1ZTQ4NTg3LCAweDE5YTczYTAyLCAweGU4MGVhZGM2LCAweDZhZGFmZWY5LAotCTB4MDZmMTg3YzksIDB4Y2ZlMTJmZjgsIDB4YjlkNTNmOTEsIDB4NDM1YmVlZDAsIDB4ZmM2YjgyN2UsIDB4Y2ZkOGExZTAsCi0JMHg1MDUxYWM3NSwgMHhmNmY2OThhZCwgMHg2Njk3ZjEwZiwgMHgyOGZlNzQwNCwgMHg2ZGU5YTNlMCwgMHhmN2YyN2U1MSwKLQkweGQ0MTNmYTAzLCAweGVjZDQ3ZTE3LCAweGU2YzY5ZjczLCAweDM0ZjIxMTQ4LCAweDQ2OGNlZjc5LCAweGFmOWUxZTNkLAotCTB4ODQ1OGJmODEsIDB4ZGVhZmY1NWIsIDB4YTNmOWUzNGYsIDB4MGVhYjdhOGMsIDB4MzQ1NjY3ZjcsIDB4YjVlMjJiMzAsCi0JMHhmYTY3NWU0NywgMHgwYTJmOTQ2ZCwgMHg4MTI4ZWZjZiwgMHg0ZTdjMjY3NSwgMHgyMmIzYWZlOSwgMHg4YTVmYWFiYywKLQkweDQxMTZkYzc0LCAweDcyYTYyNDBmLCAweGFmOTU0NGJmLCAweGU4OGU4MDg2LCAweDM1MjgxMGQzLCAweDU2MzY4N2Y1LAotCTB4YWIzNmQ3YzgsIDB4NjhmN2JlOGUsIDB4MDliYTliNjgsIDB4MTcwZDBiZjMsIDB4MGMxOThhZWYsIDB4NzIzODY5ZWYsCi0JMHgzZGVmYzMzYiwgMHhhNmE1YWQzYSwgMHhlMmVlN2M1YywgMHgwNjNiYTY2ZCwgMHhmYzI2ZjkwNSwgMHhiODUyYzc3ZCwKLQkweDBiZmEwY2RlLCAweDIxZGZlZDkxLCAweDU5ZmVjZmExLCAweDhhNDBmMDc2LCAweGZmM2RlNDRlLCAweDEwODNiNmVmLAotCTB4Nzg1MjA3OWYsIDB4ZTc5MzNlN2MsIDB4MWU3Yzc4NGYsIDB4YmQ1NDNmNmUsIDB4MDkyYmNlYWMsIDB4Y2JkNGY3M2EsCi0JMHg4MWNmYzlhNywgMHhiMmY0OWEzOCwgMHhiOGQwYWE5NCwgMHg3NjI5YjY4YywgMHg0YzhmYWY4YSwgMHg5ZTk2MmJiMywKLQkweDNiZDNmN2YzLCAweDNkNDFiNjc0LCAweDM5ZmQ1N2U3LCAweGQ3YjlkNzhmLCAweDkzOGY3MTg0LCAweDRjZjMyM2VmLAotCTB4YWRkZjY4OTMsIDB4NWM3OWZmZWEsIDB4OWVlNWY5MTIsIDB4YzcwZjgzMGEsIDB4YTYwNTcwYTksIDB4MWRlYzdjZjEsCi0JMHgyY2NmODM0ZSwgMHhkNTQ0ZmQwNSwgMHhkZjdjYmM4ZiwgMHhkNTdkZDEyMSwgMHhjN2ZkNTRhZiwgMHg3N2U3OGI4MCwKLQkweGY3ZTUwZGE3LCAweDE3ZGM5OGI3LCAweGY3MWYyZWQwLCAweGQxN2FlOTliLCAweDMxOWQ3ZTA4LCAweGFiOGM1ZWQ3LAotCTB4NjI1M2JhZWUsIDB4NWY4NDA3YTQsIDB4Yjg2OWYyYTksIDB4YWRiZTc5ZGYsIDB4YTNlZTM3ZGYsIDB4NTNmODIwZGYsCi0JMHgzMGFjYjM5NSwgMHg1OGVkNTBmOSwgMHhjNzk3MGE1ZSwgMHg4NWUzYjQzYSwgMHhhYWZmYzc2OCwgMHhlN2MzY2ZmMSwKLQkweDQ5NmUzYjA1LCAweDNkMThlN2E1LCAweGJkM2RmNDNmLCAweGZlYmM1MjJiLCAweDBjYTc5MGFjLCAweDNkODE3ZTk1LAotCTB4MjY2ZjA4MjUsIDB4ZDgzZWQwMGIsIDB4N2M2YmVjZGUsIDB4ZGVkNzk3MWEsIDB4YjkwOWU3ZWUsIDB4ZGYzYzkyYjksCi0JMHgzZmNjZjQyNiwgMHg1MmNiOWU0YiwgMHhiNWY4NzdmZiwgMHg1ZWMzZmQ5NywgMHgyY2ZiYzdiZSwgMHgyYTQyNjRiNSwKLQkweGFlNWEzNWUwLCAweGZjYTA5NDBmLCAweDYyMjFhN2ZkLCAweGQ4NWQzYWRkLCAweDM1Nzc4ODZiLCAweDY5OWJkOWY0LAotCTB4ZTQ3YzYxZDQsIDB4ODNmOWU2YTksIDB4NmRlNTA0YTYsIDB4YzgwZTYzOGEsIDB4MzE3YjNmYjQsIDB4YzdlODgzYzQsCi0JMHg0MDkwYmEyZCwgMHhjYmZhMGQ2ZCwgMHhmMTdjY2VkMCwgMHg2NjIzZDUzMCwgMHg2ZmUxNmI1NiwgMHgzZTJlOWNjMiwKLQkweDg3YzcyNGJmLCAweDM2MmNmM2ZlLCAweGIzNGNmMjhhLCAweGI4YWMxMmRhLCAweGE5MjliOWRmLCAweDk1Y2ExZjY1LAotCTB4NmNhYzkzNzcsIDB4NTBiZjFkMGEsIDB4NzllMjZmMWQsIDB4YjQ2OTY1YjgsIDB4Zjk4NTkyYmYsIDB4YzNlYWIzMDMsCi0JMHg3ZmFkN2VmZCwgMHgxYmM4YjM3MCwgMHhiYzI3ZTZmNSwgMHg3YWU2NmVkZSwgMHg3MjRjYmY2NSwgMHhhNmY5ODc1ZSwKLQkweGI2MzMxOTFiLCAweDU5ZTBiZDcxLCAweDc1MjRmM2M2LCAweDdiZTgyYjZkLCAweGZmNzE1YWFjLCAweGYyODA3ZDMzLAotCTB4ODM1ZjU0NTAsIDB4MWVkYmE3YTEsIDB4NjQ3OTQ2NGYsIDB4YTkzZDZkNGUsIDB4NDhmNzg1ZjYsIDB4OTVkNzg2NWYsCi0JMHg1ZWI4ZGI2YywgMHhhMmM4ZDRmMiwgMHhjMjRjMzQ4ZSwgMHg5M2M0MmQ3ZSwgMHgyYTVmZTgyOSwgMHgzYmM0NjRjYSwKLQkweDU3ZDlhNWMwLCAweGNmMDVmYWE2LCAweGY5ZDJiYThiLCAweDFjNTMxZmZkLCAweDJmNDc3MzNhLCAweDcxYTZhNDc1LAotCTB4ZjYyNDhlYmMsIDB4MjNhY2Y0NmYsIDB4YWU5YmRiZWQsIDB4NTQ4ZWI5NWMsIDB4ODBkODdhZDcsIDB4ZWE5NWM1ZjEsCi0JMHg1ZWE0Y2Y0OSwgMHhkZTUxMjdhZSwgMHhmM2NmNWIzMSwgMHg5MjZkZDliYiwgMHhkOTU1ZjMxNSwgMHhjM2RkN2M2ZCwKLQkweDdmOTM0NzU3LCAweDk1OGZlNjNkLCAweDJhMDdkNDc2LCAweGUxNGVjZTlkLCAweGUxZmIzZGY4LCAweDc1YjQyNTk3LAotCTB4YWI3YThmZTAsIDB4ZmFmNWQ2MTksIDB4NGRkZjRiODcsIDB4YTRjNTdkZTcsIDB4NjM0YjczZTAsIDB4M2ZlOWJiZTgsCi0JMHhmODgzMWJkZSwgMHhhNDVhMWQ3ZCwgMHhmNTQ3NmJjZiwgMHhjMTkzZjM5MSwgMHhhOTJiZjU3YywgMHhmOTE2Nzc5NCwKLQkweGMzZDgzZDZhLCAweDI3NWU2MGQ4LCAweDg1NWJiOWZjLCAweDcwODI2YmJlLCAweDNiOWFmMjg1LCAweDI5YmZkZDc4LAotCTB4ZmE4ZTNkY2QsIDB4MzZjYmViM2YsIDB4YTRlODlmOTEsIDB4YzBhYmY0N2MsIDB4MWEzNzk4ZDcsIDB4YmFjNThiMDgsCi0JMHg1OWEzMmZmNCwgMHg5YTkxZDYwMywgMHg5MjZmZGM5MiwgMHhhNzRjZmQxYywgMHhmM2MxMWNhMCwgMHg2ZWYyN2Y1NCwKLQkweDYyM2VjODU1LCAweDNjZWIwYmVhLCAweDg1ODA0NmY5LCAweDdkZjAzYmY2LCAweDNhMDgzNzEzLCAweDhiM2M0MWE2LAotCTB4MzM0MDI1NzEsIDB4MDNkMGViMGQsIDB4M2YyN2JkNDUsIDB4ZmU3MWU5OWEsIDB4MzVlZTBjNDcsIDB4YTk3ZDYzZDcsCi0JMHg0MTU4ZWY1ZCwgMHg0ZmIwZTA0MiwgMHg3NzU5ZWQ4OSwgMHg1ZWJjOWM5MiwgMHhkNDlmZDZhZSwgMHhmNTZmNzliYSwKLQkweDkzZGYwOTI3LCAweGVhOGZmOWNmLCAweDljZmY2MjRkLCAweDc3NjI2NzVhLCAweGI1ZjhhOGJhLCAweDYxOWViOGFhLAotCTB4ODMyYzNhZmMsIDB4ZDJmYWViNWQsIDB4ZDQyMzkyZGYsIDB4NGMyOTRjN2YsIDB4N2FkYTY3ZjgsIDB4NTdiYzlhZTMsCi0JMHhkZWZmNGY4OCwgMHhhOTZkZTMzYSwgMHgxZWZiMWZlYywgMHgwYWRjMDdhNiwgMHgwYzMyMmVmZiwgMHhlNzA5YTFlZSwKLQkweGZhZWUyOTkzLCAweDkxYzRiZmVmLCAweDI2ZWI2ZDlkLCAweDE1ZDlkODdiLCAweDdmOTQwMmM1LCAweGY3NzllMGVjLAotCTB4NTAzZGZlMzYsIDB4NDk2ZmM0MjcsIDB4N2U3Njc2MjEsIDB4NTc3NzlmMGEsIDB4ZmZmMTE5NWIsIDB4MThhOGMwYjYsCi0JMHgwYTU4ZmYxYywgMHgyM2VhYzdhNywgMHhiZmEyYTZkMywgMHg2OWU4MGRlZiwgMHgzYzYzMGViZiwgMHhkMDE2ZGIxZSwKLQkweDcyZGZhMTE3LCAweDlhOTJlOTBkLCAweGQxMmU4OTFhLCAweGNiODUzZWRjLCAweDdmNjEyMWQxLCAweGJhNzJhNTBmLAotCTB4ZTNjODdkOTUsIDB4NWU1MmNmMzAsIDB4YmQwYWIxNWYsIDB4NzVlN2E5ZTAsIDB4Yzk5OTdkZjUsIDB4NGY0ZjlhOTIsCi0JMHhkOTdmNTQ4OSwgMHg2Mzc2NDVkMSwgMHhmNjg5NDJkNiwgMHhmYWRiN2VkNSwgMHg5MTY5MTNjYiwgMHg1YjMzZjFlYiwKLQkweGJmYWU0NDRmLCAweGZkMjE4Zjk0LCAweDNiM2U1YmQ5LCAweDRiN2Q4ZjNjLCAweDBmNjNjODlhLCAweDVmZWM3OWU2LAotCTB4YmQ2OTVhYTUsIDB4MjUyMWZhYjYsIDB4ZmFlYWIyYzgsIDB4YmUxZDIxYWYsIDB4ODc0MDhiNDgsIDB4NWM3ZjM4NmIsCi0JMHhkZjViNzdmYSwgMHg3ZDUyMzBmZCwgMHg2ZmNlMWFmNywgMHhlMTZlZmU0YiwgMHhhN2U5MjI1NywgMHhmM2JmMzg2YiwKLQkweGZkN2Y5ZTNiLCAweDhhZmYzYzc3LCAweDc3ZmYxOGVmLCAweGZmOTg0NGE1LCAweDAxZmRkNWZmLCAweGYwZmZmNWUxLAotCTB4ZmJlMTAyZmQsIDB4Y2MwZWEyMDAsIDB4ODdiZGUyZjcsIDB4N2U1ZGI1YTUsIDB4ZGI3MTRkNjgsIDB4MDdhMDRiYTcsCi0JMHg5ODJmMDlmNSwgMHgxODRlOGVkMCwgMHhhYjYxZWJjMSwgMHgxYjdjOTk0NywgMHgwMWJlZTBhNSwgMHg4MzJjNWYxNSwKLQkweDQxZDYxMWM3LCAweGMwNzZiY2U3LCAweDMwMzM5NjczLCAweGIyZjk4ZWNhLCAweGUwZTI4YzExLCAweDhiYWYzMzRlLAotCTB4NmQzNWJkMzEsIDB4YjdjM2VkMGEsIDB4N2UwZWRkYTYsIDB4ZGYyZjUzNDksIDB4MTc0ZTZkMzMsIDB4NzYyZjYxNzEsCi0JMHhjOTQ2NjQ2NCwgMHhhY2VmYTg2NywgMHhkNWE1ZmI2MSwgMHg2YWVhMjlkNiwgMHgwZmJlNTZkNiwgMHhiNDk1ZTk5NywKLQkweDRhYmRlOWRiLCAweGYxNDNmYTFhLCAweDM4ZjVmODdiLCAweDI0NmU3MzNmLCAweGRiOWM5NGI4LCAweDcyNTQxZTI5LAotCTB4NDQyN2JlMTAsIDB4NmUzNmQ3ZmQsIDB4YTVlNjBlNDAsIDB4NjIxN2UwNmQsIDB4YWM3MWYwNWQsIDB4NmIzYzUyMGYsCi0JMHhmYmVhNzFhNSwgMHhiZjg3ZDg3ZSwgMHg5MzAzMDllZiwgMHhiZGViOWViMCwgMHg2MjczZWY5ZSwgMHg1ZDRkNmE5NiwKLQkweDdmYzFhMGVmLCAweDc1NDRhZTcyLCAweDhjMGZiOTNkLCAweDBmZjNhNDNmLCAweDMwNDczZTdhLCAweGQwNzdlMDMxLAotCTB4MWJkNTJiMzYsIDB4MWZmMTFhZGYsIDB4MjZiYmZjNzksIDB4Y2ZiYmU3NWUsIDB4YzZlYzg3Y2EsIDB4YjhlMDE5YjgsCi0JMHhmMTIxNjc2ZiwgMHgyMzVkY2NlZiwgMHhmOGMwYTgzZSwgMHgyZjNmM2ZhMywgMHgyOTVjNDdhNCwgMHg0NTQ3MDVmMiwKLQkweDE3Y2Q0M2JlLCAweDYzYWRmNWE4LCAweDFjNzI0ZjIyLCAweDc2ZDAyZmYzLCAweDVhMDQzZTYwLCAweDVhZWU4ZmE1LAotCTB4NGZhNTI3ZGIsIDB4ODRmMmZkMDQsIDB4ZGU0M2YzYzQsIDB4NTQzZjNjNDMsIDB4MGJmNDc0NjgsIDB4YjgzOTRmZGQsCi0JMHhiOWFiZTcwZiwgMHg1MGJmNWU3ZSwgMHhjNTliM2RmMywgMHgyMDdmMGE3YSwgMHgyZmMwYTNmYiwgMHg2YzFjNmMyZCwKLQkweGQ4NWYzYjQ0LCAweDZkOGQxOTk4LCAweGMzYTdkM2JlLCAweGNhOGNlZjUyLCAweDdlOTUzYWFkLCAweGI4NjhmODkxLAotCTB4ZmRlYWU3NTgsIDB4N2JkZjU0NWQsIDB4ZmZlZWFjMzUsIDB4M2Y3YzNlYzMsIDB4YzdlMGI3NDMsIDB4ZDQ2MWY2MWYsCi0JMHhiZjU3MmZiZiwgMHhmOGM3ZGQwYSwgMHg1MjM5NTY5MSwgMHhjNDE2Njk1ZCwgMHhkY2U3MDhjNSwgMHg4YWI3MGUyNiwKLQkweGE1N2U1OWVmLCAweDYyNzNkZjBjLCAweGI2MjM1NzZmLCAweDY1MzlkNTA1LCAweDM5YWY3Nzk0LCAweDliZmU4OGQ3LAotCTB4YmVmNzYyZTcsIDB4NjY1ZjI5NWIsIDB4OTg5ZTMwNTQsIDB4YmJjZGExZGQsIDB4ZmU3ODMyZDksIDB4N2Y4OTU1ZmQsCi0JMHhhYjFkZTlhZiwgMHg3MGI4ZjhhNywgMHhjN2Y4OWVhYywgMHhmMTRjY2IzNiwgMHg2NGMwY2RhYiwgMHg3MGE3ZjYwYiwKLQkweDNjYTBhOGJmLCAweDZjZmIwY2IxLCAweDgzZjkwMjVhLCAweDg0OTVmYjA1LCAweDc5ODI4M2Y5LCAweGE1ZDhkYjMwLAotCTB4MmJhNzg4NDksIDB4N2NkNTU5ZDUsIDB4NzM5MzE2ZGEsIDB4ZWZmM2QyM2EsIDB4MWVkNmIzYWQsIDB4NGRmYjQyM2MsCi0JMHg3OGE5NzVkNSwgMHhiZGE1ZWI1MSwgMHg3ZGQ1NTlkNSwgMHgyZmYyOWUwZiwgMHgzYzM0ZmIzNSwgMHg5ODMxYWVmYSwKLQkweDc5ZGMyYzdmLCAweDVmZjYyOGMyLCAweDgyNzM1MzVhLCAweDFkYzJkODc1LCAweGFhZmVhOGU3LCAweGY1M2Q1YmQ2LAotCTB4ODZhZmM4ZTcsIDB4OTI5Y2U4ZTcsIDB4ZmQ3OWNiNmQsIDB4ODFjMDNiNzUsIDB4ZGJhYzJiNmQsIDB4MDZmY2YwMDksCi0JMHgxYjZkOGRkNiwgMHhiZmFmMWJhYywgMHg1YThmM2NiMSwgMHhiNTA3NzJmZiwgMHg1MzE3OTZiYiwgMHg5M2VjMDg1YiwKLQkweGVkYmFjMzY2LCAweDJlZGJhYTM5LCAweGRmNjNkM2VmLCAweDM2ZjVkNTI0LCAweDI4OTVhZWNiLCAweDNmNzUyMWVmLAotCTB4ZmRkNzg3ZWEsIDB4YWY5ZTY4ZTQsIDB4ZDAzN2VjZjEsIDB4ODM5ZTBjNzcsIDB4MjVkZmQyMjYsIDB4MzFiMzczNmQsCi0JMHhiMGVhZjgzZSwgMHhhZWUxMWIzYiwgMHgwODViYmFjMywgMHgzYTc1OWM1ZiwgMHhjNjZlNzhjYywgMHg4Y2MzOTc1OSwKLQkweGY2YzJiNmY1LCAweDBmZGM0NmQzLCAweDE4MGZhNzUzLCAweDkwMDYxZjMxLCAweDQ1OTZlM2E3LCAweDdjNzNiNmNmLAotCTB4ODk1YjZmZGYsIDB4YzU3YmYxMTksIDB4ZmZlYjU4ZmEsIDB4M2RmZDhmYWYsIDB4YTBhY2IxZjUsIDB4MjkxZTkyN2MsCi0JMHgxYjljZTk3MCwgMHgzNGVmZGRiMSwgMHgxM2QxMGZjZiwgMHg5ZWJjNWRhYiwgMHg1ZjdmYmFiMiwgMHhhZTc1YzM5MiwKLQkweDIxOTUwOWJlLCAweGYzOTQzNWYzLCAweDZjNmQ4NWZjLCAweGY1ZTg3MzdmLCAweDFlMDYxOTI1LCAweDQyMzllMDQ3LAotCTB4NDFmZmRlMTEsIDB4OGUzNWRkMWYsIDB4ZjQxZmRkNWYsIDB4OWQ1N2UwODksIDB4ZWZhMjY0M2QsIDB4MmM3N2RhNDksCi0JMHhjNDE4ZWVjOCwgMHgxZjM0M2YwNSwgMHgzMmJjYmFiNywgMHhmN2NmYmYxYiwgMHhiOTYyOGQxZSwgMHhjOWE3NWYzYywKLQkweGJhYjBiMWM3LCAweGI5Nzk2ZjVjLCAweGE3M2FlNTk5LCAweDc1MGJmNjk5LCAweDBlZGRhMTY1LCAweDdkMzE5ZmNmLAotCTB4ZWJiNzE2NTcsIDB4OWU3ZTc0Y2UsIDB4MTU5ZDM3ODMsIDB4YjlmNTFlYjMsIDB4N2JkZjMzZGYsIDB4OGNmYzYxZmQsCi0JMHgwYmQ5MWQ3MiwgMHg1MDU3NGViNSwgMHg4MWNiNjdhZSwgMHgxOTk2MGIzZiwgMHgyYjlmNTQ3YywgMHhmYmEwOWZkNywKLQkweGIwNmM2ZTIyLCAweDlmMjNhNDE2LCAweGI0NjgzZjFmLCAweDNjMmQ1ZTYyLCAweDdmMjhlNjNmLCAweDNjMmZhOWExLAotCTB4MWM5MWE4ZWYsIDB4ZDUyYmFjYjgsIDB4ZTA3ZGQ0ZjEsIDB4NDdkYjVhYjMsIDB4MDg2ZGJlNjMsIDB4MDUxYTZlNmIsCi0JMHhhZmU5MGZjZiwgMHhlOWZlZTJiMywgMHhiZTNjZjU5ZSwgMHhmODQwYmJmZiwgMHgzNjc5ZTEzOSwgMHg0YmY0MzNlNCwKLQkweDcxZjBmM2MyLCAweGUyMGY5Y2U5LCAweDljZmRiOWQyLCAweDBhMmRiNDgwLCAweDE3M2VhM2NlLCAweGQyZjMzZmNlLAotCTB4ZjBiZjc1YjUsIDB4ZmRjNTUzZmIsIDB4ZDU4MmYyODYsIDB4MTNiZTkxZmQsIDB4NDllZDBjNzQsIDB4YTlhOTc5NDMsCi0JMHgzOTdjYzg3ZiwgMHhkYjdmN2NlOSwgMHg0YzFmNTgxMywgMHhmMjBmYWQwYywgMHg1ZDc4NjAzYSwgMHg4NTczZDU1MCwKLQkweDgzMWQ3ZmVkLCAweGZhMDc1ZWY4LCAweDI3OThlZDFhLCAweDBhMGZkNzk1LCAweDhmZDkyOGRmLCAweGE3MDgyMzdhLAotCTB4N2E5NTNmZDgsIDB4MDRlYzdiZjksIDB4NzBjNWQ3YzYsIDB4YTc3NzljZmYsIDB4ODJiOWY5NDQsIDB4OGFlZTVmMDksCi0JMHg4MTczM2U4MSwgMHg3NmJkNDNkZCwgMHgwYjJhZmZiMCwgMHhmYTA5YTNlYSwgMHhjN2FlZmMyMiwgMHhkNzJlOTJlMywKLQkweDM0OWViMDk5LCAweDcxZWFlZGY1LCAweGUxNDE5ZGY4LCAweDIzMGU0MzFkLCAweDMwYThlZTVkLCAweGQ1NDBmZWQwLAotCTB4N2I3ZDRkZWUsIDB4N2Y3ZTE4ZmEsIDB4YmM2OGNhZTMsIDB4Y2MzOTI3OWYsIDB4MmYyZjVlMGEsIDB4YjdlM2ViYzUsCi0JMHhjZTkzMzFmOCwgMHhhMDc0MjIyNiwgMHg0ZjA3MDNjZiwgMHhiNjZlNTFlYSwgMHgxODI1ZGM5OCwgMHgxMTRlMTczZiwKLQkweDZlMGFhNjc1LCAweDliNjhlZmE3LCAweGU3ZTQ2MDYyLCAweGVlZTZlZDY5LCAweDFmMjhhZmNjLCAweDQ4NTZkZGQ0LAotCTB4ZWUzYjIzZjUsIDB4YjQxNDE4N2YsIDB4YzEzYjg1MzcsIDB4M2I1ZWM1OGUsIDB4ZGQyZjM2M2IsIDB4MTFiY2Y4NGEsCi0JMHg2M2MyMThlYywgMHhmNGViYzI5YiwgMHgxMWNmZjRlMSwgMHgyZWNkZWZmNCwgMHhkMTg3YTZmNSwgMHgyYjM5ZTBmZSwKLQkweDZhNTI5ZjI4LCAweDYwYWUzYjRmLCAweGZhMzg2N2RlLCAweGMyMWUxMmViLCAweDM1ZmYyYmQyLCAweGQwOTZmZDBiLAotCTB4NGViNzNmOGIsIDB4ZmJhZjdiZjAsIDB4MzlmZjVhYTcsIDB4ZjRlNmE2NzUsIDB4NjM3NTFkZmYsIDB4ZWI1MmZlMzUsCi0JMHg3NmJjNmE0ZCwgMHhkYTgxZjA0NiwgMHgzZmVkMTU5ZSwgMHgxYTAzN2RmYywgMHgzN2RmODhkNywgMHhkZjdmMjJkOCwKLQkweGNlODViYjMwLCAweDZmYmY1MTI5LCAweDI1NjQ2YmQ4LCAweDNmNzExMzViLCAweGM5ZGVmOGFkLCAweGE0ZmM4NTM3LAotCTB4YmVmZjRmYmQsIDB4Zjg4OTE3ZjEsIDB4Mjc4NDkzYmQsIDB4M2MzZDgwNmIsIDB4M2Q1ZTc2NGMsIDB4ZWRhZWFlYWYsCi0JMHg2ZDZmOWU3MywgMHg2YmMzZmJlMSwgMHhmYjlmMjM1YiwgMHg3N2RhMDM3MiwgMHgyNzI4ZWY3OCwgMHgyYjUxYmQyMywKLQkweGQ5OGVkYmY2LCAweDk3NDRlYTI2LCAweGViZjc5NmYzLCAweDFlOTZmMzQzLCAweGVlYTQ5MDI1LCAweGJjNTFmNWUzLAotCTB4ZjY2M2NkYTcsIDB4NTNhY2I3OTYsIDB4OTZhZmNmYmYsIDB4YWUxZjY4MWMsIDB4NTliNzBmYjQsIDB4MzVlZGQ3ZWMsCi0JMHhlNmZjZTk4ZiwgMHg3OWUxYjk3ZCwgMHhiNWQzZjdjYywgMHg2OTkzOWM3NSwgMHg3NGZmNWE1NiwgMHgzNmU3NDRiNywKLQkweDFhYWU3NDk5LCAweDg2ZmZiN2RhLCAweGNmYjQ4ZDY0LCAweDg3NjEwYmZiLCAweGM4M2E4YmM2LCAweDNmOWM4ZGNmLAotCTB4NDQ5MzdlN2UsIDB4NzdlMGRmZGYsIDB4OWZmNzQ4NzgsIDB4YzNiZmMxYmYsIDB4ZmYwMTc5ZjksIDB4N2JhZDQ3MGUsCi0JMHg1Y2Q3ZGZhOCwgMHhkMDdiYWMxZiwgMHg3N2VhNzdmNywgMHgzNjc3ZWEzOSwgMHg1MzlkNzdlYSwgMHhiOWQzNDdkNiwKLQkweDVhMTg4ZmM1LCAweGViZGZiOTUyLCAweDNhN2NiZTI1LCAweGU4ZmRkMTlkLCAweDQ5MWY1NjI4LCAweDk3YTY4ZjVlLAotCTB4ODQ1ZTlkM2MsIDB4ZGM3OWFlZTMsIDB4NDIzZDI5N2IsIDB4ZTMwYzNiZGMsIDB4MjE4Zjc4NDgsIDB4M2M4NWUyMDMsCi0JMHgzMDVlMjkxNiwgMHhlMjY5MTQ2NSwgMHhjNzg3ZWEwNSwgMHhlZWFhZDcwYiwgMHhjZmMwYTRmMSwgMHg2ZGY3NWMzNSwKLQkweDZiYzZmYzkxLCAweGRmZWJmZjM4LCAweDQ1YWZmY2YxLCAweDczMmFkYmEyLCAweDFmMTdmM2U0LCAweGJlODQ5MGNjLAotCTB4Y2UxNzllZDcsIDB4YzkyZjdjN2EsIDB4YTQ5MzdhZWQsIDB4ZDUzMzcwN2MsIDB4NGY1NDBkZDMsIDB4NTM2YWY1NTcsCi0JMHhiYzdmOWYyYywgMHg2ZGE5YTdjOCwgMHgwYzliNjg5NSwgMHg0YjY1ZjM5MSwgMHg2NDY3ZmRjNCwgMHg5M2U0MzhlNywKLQkweGYzNmEyZjgxLCAweGI0NWI4Mzk3LCAweDViMWJjYmY5LCAweDBjODhlN2I1LCAweDA5Y2Y2YmYxLCAweDNkYWZkYzI5LAotCTB4YTAyOGE2M2YsIDB4Zjg2NjNmM2QsIDB4MzFmOWVkNTEsIDB4ZTdiNDNhMjMsIDB4OTlmY2RjYzcsIDB4NWI5OGZjZjYsCi0JMHhjYmY5YjRiYSwgMHgxZWRjMmY1YiwgMHg4ZmE3MWRmNiwgMHg5YzA5NDc5ZiwgMHg5OTVjZmExYiwgMHhiOWQ4NWU2OSwKLQkweDczYjBiYTM1LCAweGNlYzNhMjZiLCAweDFmM2IwOWFkLCAweGUzOWJjYzQ1LCAweDdlNzYxM2VkLCAweDM2N2Q3NjhkLAotCTB4YmEwZGM3YWMsIDB4ZWZkYzdhZmEsIDB4MWVhMjI4ZmEsIDB4Y2Y4Y2NmZDcsIDB4ZGZkZTUxM2QsIDB4ZmE5YjdlOGMsCi0JMHgwOTdmZjUzZCwgMHhlMTkxM2IzZSwgMHg3MWY0ODE1ZSwgMHg4NzViMWNhZiwgMHgyMmIxZDU3YywgMHgyZWYzMGIyYSwKLQkweDcyNjk5NWVlLCAweGZiODNmMDIyLCAweGE3YmU4OTUxLCAweDQ2OTk1ZDJmLCAweDM1ZTY3YmZiLCAweGE5M2YyMTBjLAotCTB4NGZjOTM5ODAsIDB4MTE2NzY1OWEsIDB4OWNkODc5Y2YsIDB4M2RlY2Y1YzEsIDB4OGM2NjA2ZjUsIDB4NDYyOTk3YzcsCi0JMHgzM2QwYTgxZCwgMHhjMzViMTI0ZCwgMHgyMjY1OGRlZCwgMHhlMzM1NjFmMCwgMHhmYWJiNTg3YywgMHhiZGQ1MWM3MCwKLQkweGM4NTlkZDg1LCAweGViYWFjMTUxLCAweDBlNzlkMDE3LCAweGE4YmRlN2UxLCAweGM2MjNjNjc2LCAweDYzMTZiMGQ1LAotCTB4NjhiYmNjMWEsIDB4NDdjOTNiNmQsIDB4MWUzMDc5ZjgsIDB4ZWExY2Y2YjYsIDB4YjA5NmRhZTEsIDB4N2RiN2Y1ZWIsCi0JMHgxZmY3ZjhjYSwgMHgzYzhiZjQ0NiwgMHgyZmZiZGFhZCwgMHg5OWJhODg2NCwgMHg3ZTUwMzk4MywgMHg5YWM3ZjdkYywKLQkweDE1MmNjZmQwLCAweDU2YmI5OWY4LCAweDcwOWQ2MmIyLCAweGQyN2I0MzVlLCAweGI3OWZkMDVkLCAweDRiYjhhNjVmLAotCTB4NzFlYjBmYzUsIDB4M2EyMGNmNGUsIDB4ZmVmY2ZkNTcsIDB4Y2ZhM2YyNWMsIDB4OGUwYTRhMmIsIDB4YjhmMWM3NzMsCi0JMHg4N2JiZDI0MSwgMHg3NjU5ZjVlMywgMHhlNzNjNzBmNywgMHg1OGMzZWJhYywgMHg5ZDg3ZjZmYywgMHhkZjkzMjBiOCwKLQkweDNlNTBiZTAwLCAweDk2NTY2ZmY5LCAweDlkZWY5YTFmLCAweDYzMjZiMDZiLCAweGVlY2JjNWJlLCAweDUzNzhhNTRkLAotCTB4N2UyYWJmYzQsIDB4Njc4ODI2M2MsIDB4ZjEwZmIwZTMsIDB4NzQ5ZjVmMmEsIDB4OTFmYTIyNDksIDB4ZmYwMmViNjksCi0JMHg3ZTAzZGYwOCwgMHgyNmIzYzUxMCwgMHg3ZTgxNWE2NiwgMHgzOWE1NjlkMCwgMHhkNzYwNWQxOSwgMHgyZmYyMDY0MywKLQkweDQwOTJkOWVlLCAweDBkM2RjNWZlLCAweDFmM2M0NjY1LCAweDA5NmQ5ZWUxLCAweDc5OTY5ZmI0LCAweGJlMzA0NzlkLAotCTB4YTI3OWU5NTUsIDB4MmE1ZjcwYTEsIDB4NGI0ZjdiY2MsIDB4ZDJkNjQzOGUsIDB4ZDEzN2U0ZjEsIDB4MDlkMzUxNzEsCi0JMHg3YjI3N2U5NSwgMHg0OGM5ZGZhMSwgMHg2OWJhMDNmNCwgMHg0MzIxZmZhZSwgMHg2ZTgyMDlmOCwgMHg3ZDNiNDFlYywKLQkweDY0YjE1N2U3LCAweGZmZTYyZTZmLCAweGU5OWJkN2NlLCAweGM2N2EyYmY3LCAweDM3YWU1ZTA1LCAweGM0ZDI2ZjJiLAotCTB4MmU3ZGU1M2YsIDB4YmU3NDc1YzcsIDB4MjJkYWY3NzcsIDB4ZGQzODVmYTIsIDB4ZGU2N2ZmY2EsIDB4OGFmZWZjNzAsCi0JMHhhMTk2M2VmZCwgMHgxZmFiMzFmZiwgMHhjNjNiNzM5YiwgMHhiNzk3MTJjOSwgMHg5NmM2YWI1OSwgMHhhNWYzYmZhMywKLQkweDhiNmZjZmQwLCAweGM2MzBlOTM4LCAweGJmZDdlMDQ5LCAweGY0MTI3MThiLCAweGQyNzExM2RmLCAweDQxMjcxODA3LAotCTB4NDljNjIxZmIsIDB4ZTcxNDllZDAsIDB4MDc3MmFhMDUsIDB4ZmI3YzQwOGMsIDB4YWZiNzkwYjUsIDB4NjM3OGQ0MzMsCi0JMHhkN2U2MmE2OSwgMHhkZGU3ZmZjYSwgMHg1ZjE1OWQyMiwgMHhhMzQ5ZTNmNSwgMHhlYzliMTkzMywgMHhkM2Q3ZmFkNCwKLQkweGViZmQ2OWE3LCAweDRjNzU4MzBlLCAweGQ1ODFkYTJhLCAweDhmNzA1ZWJjLCAweDc4Y2Q2NmViLCAweDk4OGM1N2E2LAotCTB4ODU3OTYwZjcsIDB4OGY2NGViYzEsIDB4M2RlNjIzMTQsIDB4NmJiMDRjNjYsIDB4OTRkOWRmYzYsIDB4MzJkYmU5YWUsCi0JMHg5NGY3NWExNSwgMHhlYjlhN2VmMiwgMHhkNDBjNTc3NywgMHgwMDVlZTdmNCwgMHg1ZGY5MGNjNywgMHg1OWY5MjYyOSwKLQkweGM2MjZlMjJhLCAweGFjNWQzOThhLCAweGY1OTdlYzdjLCAweDAwMWU1M2MzLCAweDY4M2NiZjc4LCAweGY0ZTFmYmEwLAotCTB4Yjk1YWU5NTAsIDB4ZWU3Y2E2NWUsIDB4ZjMxMmY1YmMsIDB4OWIyNzg4MDIsIDB4N2Q3YzkxZTcsIDB4Y2U5NjM0N2UsCi0JMHg1MmRjNjk5MSwgMHhmNDMxNTZmOCwgMHhkMDMxNmM0ZiwgMHgwZDEzYjJmZSwgMHg3Y2YxNDdmNiwgMHg5MjViMTNlYiwKLQkweDNkYmJmMGUyLCAweGZjY2NhMzc3LCAweGE0YWQ3N2E0LCAweGNiNzlkNTc3LCAweGVmZDA1NjFhLCAweDQ1ZjVjYzI2LAotCTB4Y2MwZjUwMzksIDB4NTY3ZGUzZGQsIDB4NGRkZmEzZWQsIDB4NGU1MDY2NWIsIDB4YmYzZWM4OGUsIDB4MTI3M2Y0NDQsCi0JMHgyOTliMzc3ZSwgMHg4MTk5ZmU0ZiwgMHg5MmE3ZjE3OSwgMHhiODcwNzVlNiwgMHgwMzU4OTMzZSwgMHg4ZjliNGZmNiwKLQkweGUwMDA3ODBkLCAweGI5YjEzMzM4LCAweDk1N2U4NzRhLCAweGY0ODkzMDdjLCAweDQzMzIyYmU3LCAweDYyNThhZGJlLAotCTB4MTc4N2YzYTAsIDB4YzQ2ZjI3YmUsIDB4ZDIwYTkzM2UsIDB4ZmE2NWJkMzksIDB4MzliNjBmN2QsIDB4NWQ2N2U2OGEsCi0JMHg2ZTMwMjFjMCwgMHg5ZWEyMmZlOSwgMHg1ZWYyMjM1ZiwgMHg2MGY1ZmZkNCwgMHg5ZmMxMWFkZiwgMHgyNTlmNDdjOCwKLQkweDAxMDI2NzMwLCAweDdmMGZmM2NiLCAweDc1NDQ5YzNhLCAweDdkM2UyMDlmLCAweGZmZWViOGY5LCAweDY0YzZiYmQwLAotCTB4NTRmZWZkMDIsIDB4ZmQyN2NiZTUsIDB4YzkxMjYwZjYsIDB4NGZkZTM4NTUsIDB4ZjJmZWI5MWEsIDB4NDE0ODFjYTIsCi0JMHgzMzk0MTliZCwgMHgzY2Q1ZmRmZSwgMHg0MWQ5MjM4MywgMHgxYTY4NmI3YSwgMHg2YjkzYWRlYSwgMHg2NDY3OTQwZCwKLQkweGFmMWM2NzdhLCAweDdjNDJiZGNiLCAweGE0ZTdiZWFjLCAweGYwODMxOTVlLCAweGExY2E2YzlkLCAweDU5ZWYwY2VmLAotCTB4NDNmZDkzMmIsIDB4N2RlM2UzZmUsIDB4OTcxZmZmOWMsIDB4N2JiZjE4ZGQsIDB4YzYzNzI0OWIsIDB4NzM3Y2UxZWYsCi0JMHhmNGUxOTJkZiwgMHgxMWIzMDQ3YiwgMHhlYTdhMjMyNywgMHhiYzY5YjM4MSwgMHgxN2Y2YTEwZSwgMHgwN2JmZTRlZCwKLQkweGU4NzY4NmMwLCAweDVkMGUwZGE3LCAweDlmN2YwMzQ3LCAweDRlNzM1OGJiLCAweGRmZGY0ZDc5LCAweDljMjNjNzFkLAotCTB4MTdlZmVmY2UsIDB4OWNlOWRmOGYsIDB4OWYxMzIyM2UsIDB4M2NkYmVlOWQsIDB4ZjllODE1MmMsIDB4YjBkNzZlODUsCi0JMHhmOWZmYTAwNywgMHg3YTI3ZWY0NCwgMHhmYmI0NmZhNCwgMHg2MmViYzQzZSwgMHhmYzJjZGFkZCwgMHhlZGIzYmE2ZSwKLQkweDg2NmY0N2UzLCAweGIyZjRmZWU3LCAweGJlNjI0MWMxLCAweGM3ZjQ4OTJjLCAweGIzMGJjZGEyLCAweDIxYmJlOWJmLAotCTB4Nzg3ZGZjYzYsIDB4MjY5OWQxZGUsIDB4MmIxNzNlMDEsIDB4OWYzMDYzMmQsIDB4ODRiOTlmMzAsIDB4NTFmOGUyM2QsCi0JMHg4NmJjZjBiNiwgMHg3M2NmMWQ3NSwgMHhiYjE0NWM3YywgMHg3OWI0ZTMwNiwgMHg4ZjhjNzk2MSwgMHg4ZDgzZjdjNSwKLQkweDZmYzY5Mjk5LCAweGY1Yzk5ODM4LCAweGU3MWQzY2Q3LCAweDM4Yjc4ODZmLCAweGIxYTYzMWJmLCAweDVlZGVhYTAzLAotCTB4MjIwZmJmOGMsIDB4YWE4MGVkMDcsIDB4MzM1ODZiYjcsIDB4YjNmZDZiOWQsIDB4ZmYzNGJlY2MsIDB4YmY0N2M5NDIsCi0JMHgyNzg3NTIyMywgMHgyYWY4YzM1NCwgMHg2YjYzOGYyYiwgMHg1MWYyOGM1ZSwgMHhlNTgwYWE5YywgMHg4ZTBmZjEwYiwKLQkweGU3ODEzZWExLCAweDdlNWYxOTE2LCAweDAxNzdkOTBhLCAweDg2NzVmMDBiLCAweGMxOTNmYjhkLCAweGU5YzgxNTU3LAotCTB4YWNhYTdmNjksIDB4MzQ2YzFiMWIsIDB4ZmI4MWMxYmYsIDB4NzkwODE3MTksIDB4N2M5NjZkYWQsIDB4MjUwNzVlN2UsCi0JMHhjYzVmM2EzYiwgMHhkMWQ4NWYzMywgMHhjM2Q0ZmI3MCwgMHhhM2Q5ODUyZSwgMHg5Nzc2NjFmOSwgMHgyY2VkNmIzNSwKLQkweDc5ZTc0YmMwLCAweGMzODZmMGFiLCAweDI1ODk4YWU5LCAweGU2NmEyYzNjLCAweGRjYWIzZWZiLCAweDA4OTM3ZGJlLAotCTB4MTQwMWM5NmUsIDB4MDJjZjAxZWQsIDB4ODA5NTFhZTYsIDB4Yzc5MTc4ZWIsIDB4ODVmMGUxZTksIDB4YmMwN2FiYWYsCi0JMHg3MGUxOWQ2MiwgMHhkMWNlMzk1NywgMHg1YjM1ZTVmNywgMHhmODU3YzIyNCwgMHg4NDdhNTQzYSwgMHg1ZDJhNzFmYiwKLQkweGJmMWNiY2FhLCAweGQxMTI2ZDU1LCAweGZmNjVkNGYzLCAweDUwZmVkMTkwLCAweDBiNTg2Zjk1LCAweDc5ZTQyZmZjLAotCTB4NWQ2MDhmOTUsIDB4MmRiZjUwOTMsIDB4MzhmYTA3NTgsIDB4MmQzZjI3YTcsIDB4Yzg3MTJkNjIsIDB4ZGZjYzc1MzcsCi0JMHhkM2Y3MjU4OCwgMHg0NzNiOTZmZSwgMHg0ZTc5ZTBlNCwgMHhhOWRjZTk4NywgMHg1NzNmOWIwYSwgMHhlY2E4ODA5NywKLQkweDk2ZmNiNDdjLCAweGUzODc5ZjIwLCAweGJkZjQ0YWZiLCAweDUxMzFmYzVhLCAweDAwZTdhMDY3LCAweDkwNWZmMzVmLAotCTB4OTA5ZmZiZTksIDB4ZjYzZTIyNzEsIDB4N2I1NTdjOTIsIDB4M2ZhYzQ2YmQsIDB4YjlmOWViNTcsIDB4ZDM4MjU3NzIsCi0JMHhjYmJmZTdhMywgMHgwNTc4NDU3NCwgMHhkYzM1YWYzZSwgMHg3ZjVhNTlkMSwgMHhlNTc3ZTgzOSwgMHg1YmQyNDdjNiwKLQkweDA5OGYzYWVhLCAweDdiNDU3MzNkLCAweGM1ZGM3N2FmLCAweDQ5MjdkZWM4LCAweDRkZTlhZjk4LCAweDNiMDk1NzdmLAotCTB4M2VlZDFmM2YsIDB4N2ZhYzlmYjQsIDB4M2M2YmNlOTUsIDB4M2E1NWVlYjUsIDB4ZjJmOGQ1OWYsIDB4ZjBiN2RhN2MsCi0JMHg4Zjc5ZmFjOSwgMHg3YzRmZWZlMiwgMHhkOTFlNjViMiwgMHhhYjRmMDVmOSwgMHgwYzZkZGU3NiwgMHhkNmNhMWZmNSwKLQkweDVmZWU3ZGNmLCAweDM0NWY2ZjkwLCAweDZhYjk1ZDUzLCAweDQxYzQ1YjhmLCAweDljNjE1N2EwLCAweDUxZWI5ZWIyLAotCTB4ZDVlYjhlYjYsIDB4MDcwZjY4MDUsIDB4MGViYzNkOTEsIDB4ZTU1ZmRkYzcsIDB4M2ZmOTBlYmUsIDB4YzlkOTNhZTQsCi0JMHg3ZmI5ZTdmYiwgMHhiZGU2MTNiNSwgMHg4NzE4YTVmZiwgMHhmNTZjOTY5NywgMHhkNWI0YmNmMywgMHhmNmIwZjY4ZiwKLQkweGQzOGUwZmRlLCAweDA3Yzk0YmVmLCAweDZhODFmYmRmLCAweDEzOWUxOWZmLCAweDQyY2UyZWU1LCAweGJmNzYxMzM5LAotCTB4NjU5OGRlNTYsIDB4ZWMyMjNiNDUsIDB4ZGYxYjNmYzQsIDB4YzliZTIwZjcsIDB4ZmVmOGUyYmYsIDB4ZjllMzg5YTgsCi0JMHhlZjFjYjVlMywgMHg1MWZhNWI4ZCwgMHg1MzUxZmFmYywgMHgzZWFiZjIzZiwgMHhmODRiOTJkYSwgMHhmODAzNWNhZSwKLQkweGQxNWFiZjI2LCAweDgwNGQ1NWZhLCAweDEwMWY4YzZmLCAweDNkZDcwMGRmLCAweDZmODExNDdiLCAweDEzNzdjNzA3LAotCTB4Y2I1YjMzYzcsIDB4NzgxZWNhZGIsIDB4ZWJmOWQyZjUsIDB4OTQ3YmZmZjcsIDB4Y2Y4NGZkMDMsIDB4OWZmMjdlY2MsCi0JMHhkMzJhZGIzZSwgMHhkZmFhNjk1OSwgMHg3ZjNkZmFhNSwgMHhhMmNmY2Q2NiwgMHg3YmUyYTY3ZiwgMHgzZTQwODBlMSwKLQkweGM3OGE5N2VhLCAweDc4ODcxNzdmLCAweDI3OTViODVmLCAweDliZTA3YTRmLCAweGJjZTg1MzM5LCAweGJmZWZjYmZkLAotCTB4Y2UyZDI3ZWMsIDB4YmU5M2Y1MGEsIDB4OThlYTVkMjUsIDB4ZDcyYmY2OGIsIDB4Zjk2NjM5ZTEsIDB4ZDVhMmZiMjEsCi0JMHhkZjBiM2ZkZiwgMHg3Y2YwYWQwNywgMHg5ODczMTQ2NSwgMHg0NjRmMDg0YywgMHhiOWI4ZWZmOCwgMHhmZThiZWUxOSwKLQkweGVjZGNmNzJhLCAweGJiOGU0OTdiLCAweDMxYzdiZjM0LCAweDc4MGRmOTg5LCAweDkxNmIwMTllLCAweGVkNGJiZjY4LAotCTB4MjU3MTI1ZDIsIDB4YWQyZGNmMGMsIDB4NjczNjM4MjcsIDB4NjlkZjNiNzEsIDB4M2YyMmNhZWUsIDB4YzcxNDY3NmQsCi0JMHgzNTliYThmYiwgMHgwN2E0ZDFmMSwgMHg0MjNmZjExZCwgMHgzZjIwZTAzZiwgMHhkNzkyNzhkZiwgMHg0OWNlZjk0MSwKLQkweGFiNTI0M2M1LCAweGZmM2FlODQyLCAweGI4ZDczZjAyLCAweDljYzQ4MmVhLCAweGMwOWRmYzc2LCAweDYyMmZiNGIxLAotCTB4ZGExNGYzN2UsIDB4NmQwNTUwMDcsIDB4NWVmOGU4NTksIDB4OWNkYmNmYmUsIDB4YzdhMmYzYzUsIDB4NzgwNTRkNzEsCi0JMHgxZGY4OTM5ZSwgMHgxYTllNzEzYywgMHgzNzAxNzFkNSwgMHgzYTJlY2RjNywgMHg5Mjc4ZWY2ZiwgMHhjOGNmYzFjOSwKLQkweDA3ZGZhNzhiLCAweGMxZTg1YmI4LCAweGI0N2Q5Njk5LCAweGYxZTYxYzhmLCAweDdiOWUxYjMyLCAweDA1MDFhZWZmLAotCTB4ZjFkNGMyYWMsIDB4NzNjNjg2MzIsIDB4YmVmZTNmNTIsIDB4ZmY1Yjg3NDksIDB4ZGYyMmFjMWIsIDB4YmQ5MmVkYmIsCi0JMHgzYTQxM2MyNywgMHhmMzgxY2Y2YSwgMHg4ZmNlNDc0NCwgMHhmZGM1OWFiYywgMHhhNGU5YzkyOSwgMHhjYzE0NDQzYSwKLQkweGRmZWYwZDFkLCAweGViZjBhNTllLCAweGRiM2JmZjYyLCAweGVkOGNmNDAwLCAweDdhOWM5ZTc5LCAweDM5Zjk3OTlkLAotCTB4ZjBhNTM1YjIsIDB4NjcxODliZWYsIDB4YjIxYmQ0MjQsIDB4MzFhZmQzNGUsIDB4OWU4N2ZiZjIsIDB4NWQ3OTNkOWQsCi0JMHgzMGVmNjMwNiwgMHhmNDNmN2FjMCwgMHhmZjhmMTk1MywgMHg3MGZiYzZlNywgMHgzYzY0ZDdkZiwgMHhhZDg2Y2E2ZiwKLQkweDc2ZWFmODllLCAweDc4ZWFmMzNkLCAweDdhYzE2NGRiLCAweDZhNjczODg4LCAweDFkZGZjMDkyLCAweDBmMWZjY2M1LAotCTB4YTAzZmVmYmMsIDB4MmVmMTZmM2QsIDB4MWQ3ZmNlYmYsIDB4OWUzMjc1ZTAsIDB4ZTc4Zjk3NjcsIDB4MmIwNjI5ZDYsCi0JMHgyZTU1YzdiYywgMHg1MmJjNjAxNSwgMHhjMWRiZjJiMywgMHhjMmVjZjFkYiwgMHg0MjQ2ZWJjOSwgMHg3MGUzYTc1ZiwKLQkweDI5ZTc4MGZlLCAweDFlZmU2MjY2LCAweGNmNWIzMGYwLCAweDljMDVjOGY2LCAweDhmMTc4OGRlLCAweDIwN2RhMTRkLAotCTB4ZGEyNDRiNWQsIDB4ZWRlNmEyYWYsIDB4MDkwZjdhNTUsIDB4OGU4OWVkZTYsIDB4MzA3YzA1MzMsIDB4M2UxYzUzNGYsCi0JMHhhZjRjOGM2ZiwgMHhiOGQ0YjIyZiwgMHhlZGUyODViYSwgMHgxNzNlNDJjNSwgMHg0NWI5NzJhYiwgMHg2Yzk2OTcyYiwKLQkweDhmZjQ0NzQxLCAweDQ1MzM2ZjAxLCAweGY5YTRlYjBiLCAweGQ0N2JjNDZiLCAweGQ5Y2RkNzczLCAweDM2NzM3ZTdjLAotCTB4ZjJmZmUzOGYsIDB4NTk4ZmJlNzcsIDB4YWE4ZWY5ZjgsIDB4ZjE0NmQ2N2MsIDB4NGZmN2Q1ZjksIDB4YjY1NDZkMTYsCi0JMHhlMTU1ZTY4ZCwgMHg3ZmQ3Y2YwOSwgMHhmOTE1NjFiYSwgMHg2NzdmZDU0OSwgMHhkZjQ0M2ViZSwgMHgzMjRjNWQ1MCwKLQkweGVhMjI1NTc2LCAweDQ5OTllZmE1LCAweDViMWE2NmVlLCAweDNkMmRlYjcyLCAweDE1ZTdhOWM3LCAweDgxODBiMDU2LAotCTB4YmU0NDBmZDcsIDB4ZDFhM2Q4NGMsIDB4YmZjZTg1YjIsIDB4ZWZmODkwYWMsIDB4YzQ5Njc2NzQsIDB4ZTcyMDc1N2EsCi0JMHhiZjdjY2NjNywgMHgxZmYwNzllNywgMHhjMDE1M2RmMSwgMHhlZjMxZjgxNywgMHgyN2ZiZjhhYywgMHgxMTU4M2ZhMSwKLQkweDdiNjNkNDY3LCAweDczY2ZjY2NjLCAweGIxMDJjMzllLCAweGZkNDEzOTM5LCAweGQzMjI1OGRiLCAweGZiY2M4NzM5LAotCTB4YWZhYzY0ZjQsIDB4MjEzYWMyYWQsIDB4Y2NlNjNmZWYsIDB4ZTg5NGFjYTAsIDB4ZWEzNmY3M2YsIDB4ODExNzY5YTUsCi0JMHg5YmVmYTgwZiwgMHhhOTM4ODRlYywgMHhjZmI4YWY3MywgMHg5ZGYzZDIzNiwgMHhmNjdlMDkwZiwgMHgyN2ZkZTI2ZSwKLQkweDI3OWJmYmQ1LCAweGFiOWRmM2UzLCAweGU0YmZmYmQ1LCAweGYzYTg5ZmZkLCAweDYxZTNmZThiLCAweGRkODQ1N2Y3LAotCTB4ZGZlZjE5ZmYsIDB4MjcyZmRjZjQsIDB4MmQ4ZmQxN2IsIDB4NzE1ZGFjZTUsIDB4Y2ZiZjQ0OTMsIDB4MWJkNDIzZjEsCi0JMHg1NjJiMGZhMCwgMHgxNWNmMDlmYSwgMHgyZGJjNWRiYSwgMHhkMGRkN2U2NSwgMHhjYWFiOGYyYiwgMHhlZDA4ZmQ3NiwKLQkweDMyN2IxYzk1LCAweDkyZjVlZDE2LCAweDY3ZjUyNzFjLCAweDY3NDdiYTY2LCAweDhhNjhiYjQzLCAweGJhYzIzNWU0LAotCTB4ZDkxZjExZDksIDB4ZThiZDQ5OGYsIDB4YmQwOTFmZTUsIDB4ZjlmMGE1NWMsIDB4M2NjMzdjNTQsIDB4ZmU4YmIyOTMsCi0JMHg5Y2ZlNzlmZSwgMHhiYjllNjNkZCwgMHg1ZDllMDZhZSwgMHg2NjkxNGYwOCwgMHhjMGQ1ZjcxZSwgMHg3NjhlNWQ3MywKLQkweGRhMWZkNTFlLCAweDIzZjlkN2QzLCAweDJlZGMyYjg0LCAweDIzYjFmZTJlLCAweGVjNTNmMzFlLCAweGUyOWRmMTJkLAotCTB4NDJhYzk2Y2EsIDB4MmZmMTdmOTgsIDB4YTE1NTY0NzcsIDB4ODJmYzI1ZmYsIDB4NzY4YmI0M2EsIDB4ZGI4MzE3M2MsCi0JMHgzZmRiY2ZjNSwgMHhiNmU1ZmJlNCwgMHg2MGM3MWJiNSwgMHg1MGRhMDAxZCwgMHgwYmQzNThiYiwgMHhiNTZjZGU5YywKLQkweGFmMzhmZmNlLCAweGI0ZjJmZTFiLCAweDU4YjllOTFlLCAweGQzYzlmMmQ3LCAweDkyNmZlNzY4LCAweDU5Nzc3ZTIyLAotCTB4ZGUzYjllMmQsIDB4MzUyNWVmY2IsIDB4ZTAzZjczNjYsIDB4ODdjZWZlYTUsIDB4YjIwYjZmMTAsIDB4YjI5MWU5MTksCi0JMHg3OWNmOTE1NSwgMHhiMWU4NWI3ZSwgMHhlNmZmNjEwYSwgMHgyOTM1OGIwZCwgMHgyM2EyZTc4MCwgMHgwZmI4NTVlZSwKLQkweDRlNDM2YWFiLCAweDk3OGRlNjAxLCAweDk2M2U5NjY3LCAweGQ2Zjk4ZGZkLCAweDZkNmY5ZTJlLCAweDBhZDZmOWUzLAotCTB4MjgyOTYwNWIsIDB4ZjY2NmY2NzEsIDB4MzI5OThmNWIsIDB4YTlmZTBmYzEsIDB4YjIyMDY3MmEsIDB4OTQ3OTZjZjAsCi0JMHg3OTM1M2ZkYSwgMHgwZjllNDhkNCwgMHhjZmNiZmVjMywgMHhlNTBjN2YxZCwgMHg4M2MyM2Y2NiwgMHg4M2UxZjVmOSwKLQkweDc0M2Y1MWEzLCAweGFjZThjNGU0LCAweDI1ZmU0N2EwLCAweDA4OWJlZTYzLCAweGI3ZTFhY2M3LCAweDkyOWE3ZWQwLAotCTB4NzMwMWQ4YTgsIDB4Zjg5ZWZlNzksIDB4NWMzMjVmZTIsIDB4MzhkZDcwOWIsIDB4NmUyNGYzMWUsIDB4MmVlOTNmYTMsCi0JMHg0ZGZiODc1OCwgMHhiYWIzZjY5OSwgMHg5MWRjNjNmMywgMHgyZWZmZjNlYSwgMHhiNjY2ZjBmMCwgMHgzYWZkZGE5NSwKLQkweDA4MjBiMzgwLCAweGYwN2VmYTg3LCAweDYwMDY5N2Y3LCAweGQzMmI5M2JlLCAweDUwZjdlMDg2LCAweDBlNGEzMjI3LAotCTB4ZGYwNTE3NjQsIDB4YmRjMzIyN2YsIDB4ZGY1M2UxMWQsIDB4MDZjNzUyN2YsIDB4NmRmMWM4NjAsIDB4ZDA1NTc4ZTEsCi0JMHgwZGQyMDBmNywgMHhlMDQ4ZDc1YSwgMHhlZmI4OTBiNywgMHg5YTMxNTFmNiwgMHg3NjA5YjRmZSwgMHhlM2NkMGNlNiwKLQkweGY0ZDc0YjRlLCAweGQzZjQ1N2E3LCAweDcyYmJiZjhjLCAweGM0ZmVlNmEwLCAweGZhZDBjMGE4LCAweDc3YjdiZjEwLAotCTB4ZjdjYmM5N2YsIDB4NDZjNmM0ZWYsIDB4M2ZiZGZlZTMsIDB4N2RmOWZkYjYsIDB4Y2VlOWZkZmMsIDB4ZmEwNzY0MTcsCi0JMHg2ZTc3MGJiNiwgMHgxNjhmMWY3YSwgMHhiNWY0MGYzZSwgMHhhMTUyN2U1MywgMHhmNjlmZGE3YywgMHg4MzlmOGNjYiwKLQkweGQ2ODdkNGUxLCAweGMwYjBjZTkxLCAweDYwYTUyMzUzLCAweGViNmRmYjdjLCAweDdiYWQ4YjQ3LCAweGFlMDU3N2U4LAotCTB4ZjNlOGRkNTUsIDB4Mjg3ZjUxNmMsIDB4MWY2ODA1NjAsIDB4NDdiZmQ3Y2YsIDB4MGIzYWJkNzksIDB4MWQ5OWU3NWYsCi0JMHgzYzViOWNmYywgMHhmMDEyZmFlNywgMHgyMGY4NmRmZCwgMHg0MDE3OGJmYSwgMHg5N2ZjODNmMSwgMHg3YWEwOWViNSwKLQkweGFlNmM5YWRiLCAweDk2MzJlYmFmLCAweGY2NGZkMWU4LCAweDY1ZjY4YjQwLCAweDc4YWRlODBjLCAweDNiNDA5YmUwLAotCTB4ZjcwZGJjMWIsIDB4NzJjNGU1YmQsIDB4NTRjMmZkZmYsIDB4OGZlZjliY2EsIDB4ZmQ5ZmY5ZTYsIDB4ZmJmNDA5YzksCi0JMHhjNjliOGJjNywgMHgwYmJhZjVkMiwgMHhkYmZmMzQzMSwgMHhiNWY2ODA3MiwgMHhhODkzNWY3OSwgMHg3ZDMxMzE0ZSwKLQkweGNmNWM0YWQ2LCAweGRmNDQwMWZmLCAweDgwMDA2ZGEwLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAotCTB4N2RjZGZmMDAsIDB4ZDU1NDc4MGIsIDB4Mzk5ZWYwYjUsIDB4NjcwOTFlNjcsIDB4OTkyMTI3MjYsIDB4ZTRjMjEwMjQsCi0JMHg0ZTAxMDI0OSwgMHhhYWYwODA0MiwgMHg5ZTE4MDkwMywgMHg2ODMxMDA0ZSwgMHgwY2ZkZTFkMCwgMHhhZjRhODgwOSwKLQkweDA0ODE5YmY0LCAweGE4NmMxODA4LCAweDNiZDE1MDE0LCAweDZhZDQ4MGE0LCAweGE2YTNlYTZmLCAweGQwMDRjN2Q2LAotCTB4YTBkMjk0MWIsIDB4ZGVmNmI3ZmUsIDB4MjJjMDFiNWIsIDB4ZGEwNDZhMjgsIDB4ZmFkMmRlOWYsIDB4M2VmNmI1YWYsCi0JMHg4MjQ5OWNjOSwgMHhiZjdiN2I3MiwgMHhkYmUzZWY5ZiwgMHhiM2VmNjc1OSwgMHhkN2JkZWIxZiwgMHg2YjRjZmI1ZSwKLQkweDdlZWYyMDc0LCAweGZmOTliMTg1LCAweDFiMjk3YjcyLCAweDk3ZGFkOGM2LCAweDFlNjA5ZTRjLCAweDg1N2JkMmMwLAotCTB4ZDM1Y2EwZWIsIDB4YmViMTk1MzAsIDB4NTM1NmIzMDgsIDB4ZDczMTYzMWMsIDB4MDQ2YzYxZWYsIDB4MmMwMThjYzEsCi0JMHg2NGVjNzI4ZCwgMHg0MzVhNTAzMSwgMHhjM2M2NGZkOSwgMHgzYjQzYWIzMywgMHhlYWFjNjZlYywgMHgzN2JkMTQ3YSwKLQkweDMwMTFkOGJkLCAweGRiYmM3ZDQzLCAweGM2NDhkOGM0LCAweGU5NTNlZDJjLCAweGNiZDdjOWZkLCAweGZjNmJmZWE4LAotCTB4ZmQ2MzFiNzcsIDB4YWY1NGU5ZGMsIDB4NDM4NDk2YzMsIDB4ZGIwNTIyZjIsIDB4YjRmZGE4OWIsIDB4YWNhODQzZWIsCi0JMHhjYTg3M2ViYywgMHgxNDdlNzI3NywgMHg4NGZhYzNlZiwgMHgxN2ZhNTM2YiwgMHg1MjZmMWMwMiwgMHg2NGFjNGE3MSwKLQkweDYyOGQ5OTljLCAweGEzM2I3ZWVjLCAweDQ3YWI1NzdmLCAweGFiYTUzMGM3LCAweDcyZDJjOGRmLCAweGU4MWU2MjVkLAotCTB4NDRkZDc2Y2YsIDB4OGY3NGMwZTUsIDB4NmM2MDRlZTYsIDB4ZDk3NmE2ZDYsIDB4ZWM1MWViOGUsIDB4ODAzNGUxZWEsCi0JMHhjYmRkZjI4YiwgMHg5M2RlYmFmMiwgMHhiYWI3Y2Q4ZSwgMHg3YmZiYzI4NywgMHhkMDNkNThjZSwgMHhlMmNhMGRiZiwKLQkweGM2NGFmYWIwLCAweGRkNzk0ZDNjLCAweDM2ZTUxYmM3LCAweGRiMTkzYWQzLCAweDZjMmNlNTRjLCAweGNiYjNlZjA3LAotCTB4ZWYzODY1ZGYsIDB4NmYzZTU1N2IsIDB4OTEyNjExYjYsIDB4YjYwNjU4Y2MsIDB4YmY3YWU4NGYsIDB4NjBjMWQwMGQsCi0JMHg2ZDk3ODE1ZSwgMHg3N2YwYzNjMSwgMHhkNGFmYmE1MSwgMHg0ZGI0ZmQwZCwgMHg2MDJmZTU2NCwgMHg2YTViNzIzZiwKLQkweDM3MWZlMzk5LCAweDM4Yjc5OWZmLCAweGZlNjI3MWZmLCAweDQ2ZDg5NmJmLCAweGI3ZDdlZmVjLCAweDgxZTZkNmRkLAotCTB4M2MzY2I1NzksIDB4ZWVlNDg0NjIsIDB4Yjc1ZWY3ZWEsIDB4NzZhYmY3OTUsIDB4Y2Y0MDYwZGMsIDB4YjhmYTM3YWEsCi0JMHg2NmZhYzI3NywgMHhkYzIwOGYwMiwgMHhkODJkYmFmMSwgMHg5OWNmNDY5OCwgMHg1YjRiMWUyOSwgMHhhYmVhMDlhMywKLQkweDVlZDkxZDljLCAweGNkZjhiZjE4LCAweDZmZjIxMGE4LCAweDMyNTE5YmNiLCAweDlmN2U3MTgzLCAweGU5MTdiYmU5LAotCTB4YTBlNmZjNTgsIDB4MjYxMzkzMTIsIDB4NDY0ZDlhZjksIDB4ZDAzNjU4M2UsIDB4ZWYzZTFmNzMsIDB4ZjFiZGJlNmQsCi0JMHhkNjljNjAwOSwgMHg1MzVmYzkxMSwgMHgxODgxNGNjYSwgMHgxZDVmNmZlMCwgMHg4Mjg1OTM5NywgMHhlZjVkMTczZiwKLQkweGM4NGZiMDQzLCAweGM0ZWFkNWNmLCAweGFiYjc0ODI5LCAweGIwZDI2MDliLCAweDRjOWI0NThlLCAweDc1ODI1ZjQzLAotCTB4Y2I0M2I3MzEsIDB4ZWNjYzNjMDIsIDB4NzMwYjYwYmYsIDB4Njk5OTVjYTIsIDB4YzQ4NzMzYmQsIDB4ZTlhMDZiMDYsCi0JMHgwNmIxZWI5YSwgMHg5ZWJjYWJmOSwgMHhiZGFmZmQ0NiwgMHhlYjllOTdkZSwgMHhjODQ4YjY3MiwgMHgxOWY5MGQ4NywKLQkweDlmODIyNWUwLCAweDE5N2U0NWVmLCAweDFiODcyNWQzLCAweGUyOGY3ZGQzLCAweDgwZDY2N2ZhLCAweGJlNzhjM2JjLAotCTB4Mjg4NWM5MmQsIDB4NjJmYzVkNDcsIDB4ODBhZjkxNTUsIDB4ODU5NjkyNWYsIDB4Y2I0ZDRkYzksIDB4ZjQyYTk4N2MsCi0JMHg3ZTI1ZWYxZiwgMHg3MTY1MDI1OSwgMHhjMTUyZmQ1OCwgMHg3Yjc4OTEwNywgMHg2NWY5MTZlYywgMHg0OGJmNjhiMywKLQkweDAxOTk2NTA5LCAweDI4ZWE5NjBmLCAweGU3Y2MwYjZkLCAweDBhN2JiYzRhLCAweDBlZmQ2NWUyLCAweDE2ZjViZjhlLAotCTB4ZTYwM2IxNmYsIDB4OTM3MWZlYmIsIDB4OGI2MTk0MDYsIDB4YThlYzM5NDcsIDB4NTg3ZDQ2ODcsIDB4ZjE4NWY1NmQsCi0JMHhjM2ViZmNlZCwgMHgzMGYwMWI5OCwgMHg5NTI2N2FlNywgMHg4M2JlMDFmZSwgMHhkNzg1ZmViOCwgMHgwZDNhMDllNywKLQkweDhiYjk5MmEzLCAweGQ4YzVjY2NjLCAweDFiYWJhNDA2LCAweGU5YzQ1NDI3LCAweGFkNzdlNjJjLCAweDQzZTI3NDdhLAotCTB4NTNiNWZlMzAsIDB4ODhiZmFhMTYsIDB4YTk4MDJkNzgsIDB4ZTM0ZjAyN2EsIDB4OWI0MTJjYmMsIDB4NzVlNjEwNzYsCi0JMHgyYTAyYzJkMSwgMHg3ZWYxNjlkMCwgMHhkZmEwMDU4OSwgMHg0NmZhNTAyNSwgMHhkODNkNTJkMCwgMHgxNDgxZjZjZSwKLQkweGIxNzZjMTZjLCAweDgwNWIxM2NjLCAweGU2ZjU4NGY4LCAweDg2YmUzMWYwLCAweDZkNGM5N2ZmLCAweGZkNDEwZmQ5LAotCTB4OTYxYjMzZTcsIDB4ODFlMDMzOTksIDB4ODY0MTJhNzQsIDB4ODJmZTdlNzUsIDB4YmU3ODI0YzQsIDB4MmU1YmRkNzIsCi0JMHg5NGFiMWU1OCwgMHg1MGFhYTYwZSwgMHhjYzE0YzFiZiwgMHg3YmUyODBiNiwgMHg4NmJkZjY0NiwgMHhiYmQzZTA3YSwKLQkweDA4YWRmZTliLCAweGYwZGM3ZGRhLCAweGFhZTkxM2EyLCAweDBlNDliNWUzLCAweDRkM2Y2MTY1LCAweGNjMDBjZjgwLAotCTB4MmE1ZWE5YmQsIDB4NmMzNDJhMGQsIDB4NWRhMWIyOWYsIDB4NzNmM2FkZmMsIDB4YmFhZjlmMjQsIDB4YmE3ODQxOWUsCi0JMHhmYTFiNmQ1YSwgMHhmMDMxZjIxMiwgMHhmNWQ3M2UyZCwgMHhhZTNhZWFmMSwgMHhiZWZkNzVkNywgMHhjZWJmZjA1NiwKLQkweGQ3MzI5NWQ3LCAweDRjNGE5NTViLCAweDZlMTY5MDMwLCAweDEzYmNjYTZmLCAweDRjNzJlZjkxLCAweGI3MGIxNjVhLAotCTB4OGU4ZjhkMzcsIDB4MzJmODM5NDUsIDB4NWQ2MWFiNWUsIDB4ODM5NzQyZjYsIDB4ODA0OWZjNTcsIDB4YTQ3YjJlYmMsCi0JMHhjN2FlODFjYiwgMHhmM2FlYmQ3NSwgMHgyNmFmNmViZCwgMHgyZjJmZTRmZCwgMHg3OWZjM2JmZSwgMHg4MWQ3Y2QzMiwKLQkweGU2NGQzMDdjLCAweGVjOWE2Yjc2LCAweDFjOWEzZTIwLCAweGZmMjMyNjVmLCAweDc5ZmQ3YjdjLCAweGIzY2ZlODU2LAotCTB4YjZiOWZkMDYsIDB4YzdmOWZkMTcsIDB4ZjM4Nzk0NWIsIDB4ZGE5NjdmNDIsIDB4M2NkZTdkZDgsIDB4M2I2N2RmYWUsCi0JMHg0YTJiZmFiYSwgMHg4MzRiNjQ5ZiwgMHgxMzM0OTQ3ZSwgMHhjZDQ3ZmJiNSwgMHhmM2UzNDk1YiwgMHhmZWYzYjZmOCwKLQkweDZmY2ViMTJmLCAweGQzMDNmYmQyLCAweGE0NmZkNGFjLCAweDFmZDA2NzllLCAweDVmMmZmOWVhLCAweDFkYTIwZGNmLAotCTB4NWQ4MTg4ZjgsIDB4NWFmN2JiNDAsIDB4NjE2MWY3MWYsIDB4NDQ0ZWM4MDcsIDB4NjY2ZjA0YzcsIDB4Yjk5MjdlMDcsCi0JMHhhN2UyMjA3OCwgMHg0ZWUwM2IwNywgMHg4MGVjM2JmYiwgMHhiY2JhNTdjZSwgMHhjYmExZjJlOCwgMHhlOGZjYTQ0MywKLQkweDExZmQzMGYyLCAweGE0MjFlNjJkLCAweDMwZTYyMDBmLCAweDc4MWM4ZmNhLCAweGU5NTFkNzBlLCAweDcyOGY5M2VlLAotCTB4ZjgxMWNiYTksIDB4ZGQ2NzI0NjEsIDB4OWI5MDgzZWMsIDB4ZGEzMTM5MmUsIDB4NzQyZTVkMGIsIDB4YTZlNWQxMzksCi0JMHg1MmM1Yzg1MiwgMHgzY2JhMTcyMSwgMHgxZTlhOTcxYywgMHgzZGVmMGIxYiwgMHg0MzJiZTY5NywgMHhiMWYyZTg3YywKLQkweGJiNDg4NWU2LCAweDMxM2YyYmQwLCAweGYxYTVhN2U0LCAweGE5ZjkwY2Q1LCAweDdlNzBjYTEyLCAweDRmYzJmNWIyLAotCTB4OWY5MTZlZjMsIDB4OWRiZWQyNGEsIDB4OGQzMmIxMWYsIDB4NDBmZjExZmIsIDB4ZDY5OTVhN2UsIDB4MGFiMTVmYjMsCi0JMHhjYTdmZWNmOSwgMHhmZDVhYjhhZiwgMHhjYzM3NDI5YiwgMHhlODIxNmFlNywgMHg3ZTJlYjRkOSwgMHhlMzJlZmU5YiwKLQkweGY4MDY0MzdlLCAweDQ2YjQ1MGQ5LCAweDVhYjY3NWYzLCAweGIwNmIwNDA3LCAweDFhYWNkN2RkLCAweDAxZmJhOGYxLAotCTB4N2RlZTkxNGIsIDB4MjdmNGY4YmIsIDB4ZmU3MWZmNjAsIDB4YzE1YmZkM2EsIDB4ZWRmNzVmZmYsIDB4ZDlkMTFkZjQsCi0JMHhmNTY2ZGYxNiwgMHhkYmJkMjFlNCwgMHgzN2JmZjYwYywgMHg1YmIxZjE3ZiwgMHg2ZmU2ZjNhNCwgMHg0MjQzZTc0OSwKLQkweGZhMGZmYzZmLCAweGQxN2E4NzhiLCAweDFlZmY4NzEzLCAweDg2MmNjZWJhLCAweGZjMjFmYjNmLCAweDNjNjdhZjdiLAotCTB4MDJmYmU3ZDAsIDB4YTJmMzljMGUsIDB4ZDIyYmNjYmMsIDB4M2MxYmRiZWIsIDB4ZTAxZmE4OTksIDB4ODIzNGIxY2YsCi0JMHgwZjA5ZDk4NywgMHg1NmRiM2UwMiwgMHhmZTljZjMwMiwgMHgwMDdkNjc1OCwgMHg4ZjhmMjdlYiwgMHg4ZjMzZWYxMSwKLQkweDNmYjU3NTg5LCAweDViNTFmNjkxLCAweGQ2MGJkYTNkLCAweGFmOGRlZGMwLCAweDBkMGVmNjVkLCAweDc2MDEwYjgzLAotCTB4MTE0NWMxODQsIDB4ZGVkZTAxZjAsIDB4OTUzM2I3MjksIDB4OTcyMDg0ZmMsIDB4NTRkZmU4MmIsIDB4ZmQxNWYzNDAsCi0JMHg5ZTY1ZmUwOSwgMHhjZjAxNTcxMywgMHhkYjEzNTRiMywgMHg4YWFhNzQwOSwgMHg1NWQ2ZjgzZiwgMHgyNmNkNmJkNCwKLQkweGUxODc3MjY2LCAweGViYzk3MDIxLCAweGY2ZmQwMTQ5LCAweDlmYzA0OTlhLCAweDM3YzA3OWI3LCAweDBlMjVmYmI4LAotCTB4YWJmMDc2N2YsIDB4ZmEyYzgwODYsIDB4OGQ2YzdmMDUsIDB4YzlhNWI3NDAsIDB4YmZhMDkxZTQsIDB4NjBhNjQ1MzUsCi0JMHg3Yzc3NWE3YSwgMHg2N2M5ZDY3ZiwgMHg1NGMwN2NmYSwgMHhkNjY3ZGYxYSwgMHgxZjdiNWJmOCwgMHhhN2VmNGRlOSwKLQkweGRiMjFmYmQzLCAweGQ3N2Y4YzJkLCAweGY2MDllNjc4LCAweGQyOWIwZmUwLCAweDI5MmM1ZGI5LCAweDNlYjFlOThjLAotCTB4ZjhlMjVkMmEsIDB4M2ViMDAxYmYsIDB4ZDM5YTNjM2UsIDB4OTFlNWY3YzQsIDB4ZjlkMzYzZWQsIDB4YjM2NjZkYjgsCi0JMHgzNzYzYTdjMCwgMHg1NTliNTlmMiwgMHgxYmIyYjdjNywgMHhiMTk5M2RmMSwgMHhiZTQxM2U0ZSwgMHg0ZTA5ZjE4MSwKLQkweGVhY2E1NDY5LCAweDRmNWNiZTY0LCAweGI2NmViZTA0LCAweDc0ZDMyZmRlLCAweDVmMGJhNjNmLCAweGQ5N2EwODgxLAotCTB4YWJlZjgyNmUsIDB4NmRkYmUwM2QsIDB4MzM3NDNmN2MsIDB4ZGJiOWZkN2EsIDB4NTc2ZjgyZmIsIDB4MzFlYzdjZTgsCi0JMHhlYzhjN2JmMCwgMHg4OThjZmUyNSwgMHhlMDAxYTkzNywgMHhhOGRlYjVjNywgMHg3NDJmZGM3YSwgMHgxOTUyNjdjOSwKLQkweDg4Y2EyZGUxLCAweDRiZjkyZWE3LCAweGM4NTEyYjJlLCAweGZkZjUxMjNmLCAweDdhZmNhMzc3LCAweGI5ZWQ5ZGNkLAotCTB4MGQ3Y2VhM2MsIDB4NWUwMGU3ZWYsIDB4ZjdjNjk1ZDEsIDB4ZGJmN2E1NDcsIDB4YmUyM2M4MWQsIDB4ZTU4MjdhYTAsCi0JMHhjYTQ3NzliMCwgMHgzYzA0NTM2MywgMHg4NTdlNDIzZSwgMHg0MGZlOTFmYywgMHhjYTc4MDA3YiwgMHg3ZjE2ZmQ0MiwKLQkweGUzMGVlYWQ2LCAweDdmMDUzYjkzLCAweGU1NjI2ZTdjLCAweDI2ZGI0ZmE4LCAweDJkYjIzZjcxLCAweGE0MGY5NzlkLAotCTB4MDJjY2I4ZjMsIDB4NzU0Yjk3YzEsIDB4YzMwZThhN2UsIDB4NDI3ZjkxODMsIDB4NWIwOTVmYjgsIDB4N2U2OWUxMzcsCi0JMHg2M2NmMmViYywgMHhiYWMwNjZjYiwgMHg3ZDc4ZTJkYSwgMHhkZGE4ZTM1NSwgMHgzODJlOTQ4MSwgMHg4ZDc1YmZiMiwKLQkweDJmMTBjYjYzLCAweDhhMDdmZDlkLCAweDk5N2RhMGNlLCAweDQwZjZmMDJmLCAweDgxMzM5OGUzLCAweDE3Njc0MTNjLAotCTB4N2ZkYTE5ZDksIDB4NTAwNDdmMDEsIDB4N2YyMjU0MWYsIDB4YzdmM2JhOTgsIDB4ZmM2ZWY0ODQsIDB4ZGY3ODg4MTksCi0JMHhmYmM5Yjk2MywgMHhmN2RmZGRjNSwgMHgyY2NmYmM0NCwgMHhiZWYyYjdmMSwgMHgwODhjZGJhMCwgMHhkMDQ2OTZiYSwKLQkweGFlMDIyNGI1LCAweDQxYTBlMWQwLCAweDc5N2FlYWZmLCAweGFkZWVmMzUxLCAweGVhYzc5ODJlLCAweDU5NjdhMGEzLAotCTB4MmQ0ZjNmMzgsIDB4YWQ1ZmI5NDMsIDB4ZWQzYmZjZWEsIDB4MTc2YmYyMGMsIDB4M2MyNzRmM2YsIDB4ZjlkMjZlY2YsCi0JMHhkNDZlYzY3NSwgMHg4N2E4NjVjMywgMHg3M2MxNzZjNywgMHgzYzExMGY1MCwgMHgxMzEzY2NiMywgMHhlZDY2YWY2ZSwKLQkweDU3NzU3YjQ2LCAweDBlZmVkZTlkLCAweGFkNzc3ZjZhLCAweGVhOTc5ZmRlLCAweGNmNDIzYTc1LCAweDQyZDc0NDY1LAotCTB4M2VjZDVlZGQsIDB4NWVhYmY1ODMsIDB4NGQxZmVmZTMsIDB4OTAyNjczOWYsIDB4Njg3OTEzNzksIDB4ODFjYmMwODgsCi0JMHhkMTEwMzgwOCwgMHhkODM3Y2Y3ZSwgMHhmNzg4ZGFiNywgMHhkN2Q0NDUzNywgMHgyM2ZiYzA0NywgMHhmYmUzM2FlMCwKLQkweDQ4OTg5NzBiLCAweDNmMDIxNzBlLCAweGU1MjIyMTIwLCAweDlhM2Y5MjMyLCAweDljZmQzYmQzLCAweDUyNmU3YjRlLAotCTB4YzgzM2JmYzgsIDB4MGUxYWY0ZDUsIDB4OTVmNzRiMWYsIDB4NzA2MTI5ZDUsIDB4MmUzMmMyZTMsIDB4ZjAxYTMwMTcsCi0JMHg3ZmYxODVhNSwgMHgxMjAzNzNhMCwgMHgxN2E1ODNmMCwgMHgxYmQ0ZDliZCwgMHhkYTQ0ZTY1ZiwgMHg3YmZmNWU3YiwKLQkweGZkMTkzM2ZjLCAweDRiZjA2NjY1LCAweGI4NDY0YjhlLCAweDBlZjMxMjQ1LCAweDkwZDk5ZDU0LCAweDc4NzUwZjg3LAotCTB4YTdlZTE5NmQsIDB4YWUzM2VmYTcsIDB4YTJiM2Y2MGIsIDB4NDk1OTRkN2UsIDB4ZDZjNDVmYjgsIDB4ZDZjMjc5OTQsCi0JMHhmMjlmYjdhOSwgMHgxYzI1YWZkNywgMHhkNWM2YzNlZiwgMHhiZWEwODc2NSwgMHhhYjI4NTI2MiwgMHg1ZTM4Y2IxYSwKLQkweGQwOTRiZDgyLCAweGY4ODk1NzVlLCAweDI1ZDc5NGNkLCAweDhhY2JkYTJmLCAweGZhZDY1MGU4LCAweDM1ODgzZjcwLAotCTB4NWIzYWUzNjUsIDB4M2U4ODk2MWUsIDB4MGZhMDFhODEsIDB4NzMyMTY5ZTAsIDB4MmVjZWQxNWIsIDB4ODMyYjFlNjYsCi0JMHg0YzRiNWNhZCwgMHhmMDIzYzZjYywgMHhhNTg3ZjFkZSwgMHgzZmE3Njg4ZCwgMHg4NWQ3ZDhkYSwgMHgxOWQxYTFmYiwKLQkweDNjNzE3ZjdjLCAweDI5NmJhMDY2LCAweGVlN2QyZGMwLCAweGIyZGI3ZDIzLCAweGM3OTUzMjdkLCAweDBlYjZjZjI0LAotCTB4ZGJmZmIxOTUsIDB4OTI5OTcwZjgsIDB4ODQzMWY1OGIsIDB4MGZlOWFiYTcsIDB4ZjkwNjZkOTUsIDB4OWJiYTUzZjgsCi0JMHg1MzhiZWFmMCwgMHg2ZmU4Y2Q1ZCwgMHg4YzMwYjRlZiwgMHg1MWE2MzM5NywgMHgyZWUxNjkxYywgMHg5YzRlZmU1YiwKLQkweDJlMjFlNmNmLCAweGZkMTczZmY0LCAweDMyNGE2Y2IwLCAweGQ1YjQ1YmI0LCAweGQ1MWZhMWEyLCAweDcxNTM1NjZlLAotCTB4OTM5ZGJlN2UsIDB4YTRiZjU4YWQsIDB4ZGI4MTk0NTYsIDB4NmZmMzdjYTksIDB4NDI3MWFhM2YsIDB4NGNhNzhlZmIsCi0JMHg5ZmI0MjM1YSwgMHhkZGU5YWQ3MCwgMHhhZjJmMDA2MSwgMHg0NDkwZDBjYiwgMHgzMzM3NWM2ZiwgMHhiNzM5YzYxNSwKLQkweDAyNTA1MDdmLCAweDU1MWYzY2JlLCAweGRlMmNmNmZkLCAweGU1ZmI2MTllLCAweDY3YTdkYzM3LCAweDQ5N2I2MjE1LAotCTB4MmZlZDAyZGQsIDB4OWZmNDczYzAsIDB4MWE5MGVjMmYsIDB4YTcyZjM4NGQsIDB4NGIwNGRhMjMsIDB4NDY1N2YwYmEsCi0JMHg1YjBiOWNmMSwgMHhjZjhjNDE2ZCwgMHhmNzdjNTM5ZCwgMHhmNjcxYzdlZSwgMHg2N2QzZDA1YiwgMHhhNzZlNGMxNywKLQkweDlmMTBmMDA5LCAweDI5MmNiM2IxLCAweDA0ZGI5ZjE5LCAweDJlYzY3NzNkLCAweDY4NWYzOTA0LCAweGIyMWZlNGVlLAotCTB4Mzk2MmNiMjcsIDB4MWRhM2ZmMWMsIDB4MWQ2MTg3NjUsIDB4NDQxZjFlMTcsIDB4MTk1ZGFiZjEsIDB4YzAwYzg0OWUsCi0JMHgxZTk5MWRmNywgMHhhM2U3OTYxNywgMHhmMzdhZGRiOCwgMHhlODdkZDI2ZiwgMHhmMmYyZmZjNywgMHg5N2YyMTcyMiwKLQkweGQzY2I4MzNiLCAweGI5MTdkNzFiLCAweDU1Zjk4NTE2LCAweDg5OTczZWNiLCAweGJhYjRkZTBmLCAweGRmN2NlMDM3LAotCTB4YzI2MDFlOGMsIDB4NDFmMDM2N2QsIDB4MmY5MzhjNWYsIDB4ZTAxNmZiMTEsIDB4ZjYyZjhkZTcsIDB4OTdmZDVmZTAsCi0JMHgxZTVhYzdmMCwgMHgzNmVmMTg0OSwgMHhkMjdlZjVmMCwgMHgwMGRmYjQ5ZiwgMHg4N2UzM2YzOCwgMHhjN2MwMDNiYiwKLQkweGIyMzZkYjFmLCAweDliOGMyOGYzLCAweDc1ZGM1MmZhLCAweGUwN2ExMzA5LCAweGVlMjBhOGI5LCAweDUzNTI1OGFiLAotCTB4YTZmYzc4NzYsIDB4ZmI0NTBlNTMsIDB4ODQxYzA1ZGYsIDB4N2I0MWRmZDcsIDB4MmVmZGY3ZGMsIDB4ZjA4ZTFmZjAsCi0JMHhmZGJkMGJmMywgMHg4MDIzYTc3MiwgMHgwZTI3YzVjZSwgMHhmOGY0OGM4NywgMHhmODVmZjY0OCwgMHhlY2I3YmMyZSwKLQkweDgxZDkwYjI5LCAweDZjMjU0ZjY1LCAweDgxNzFjMGVhLCAweDE2YWUzMDZmLCAweDg2N2YyZWI5LCAweGFiZDVkNjg1LAotCTB4NjUyM2IyNWMsIDB4ZmJlMTI5MjUsIDB4YmZhNGMzOTUsIDB4ZTljYjkzN2IsIDB4MGVjYjg3MTksIDB4OTcyZWY1ZTUsCi0JMHg5ZmFlNTVjYiwgMHhmMTY1M2NhNiwgMHgxZjJkM2NhMiwgMHg3MGQ5OTBlOSwgMHhmNTNkMjZjNiwgMHhjZmM0NjFkNiwKLQkweDA1NTE3NWYyLCAweGYyZjg5ODM2LCAweGFmNDQ2Y2E3LCAweGEwMjM4Nzc2LCAweGU5Y2ZiZDQyLCAweDljYTE2MzkwLAotCTB4ZDZmNWMxOWYsIDB4M2YyZTBjYTYsIDB4ZWQ5MzEyYzUsIDB4NjJkNjU0MDUsIDB4Y2MwYWY1YmMsIDB4OTdjMDJmYTcsCi0JMHg3N2I2M2UzNiwgMHgyOWYzOGMzNCwgMHgwZDFiY2UwYiwgMHhlMWUyYmJmOCwgMHgyNWU1N2E3YywgMHg0YzhlZTI4OSwKLQkweDQxMzNjOGY2LCAweDVjNjBhZTVmLCAweDdjOWU1NDRmLCAweGZlMTEzYWQxLCAweDVmZjU2MmFjLCAweDVjMWZiMDQ5LAotCTB4MDY3Y2JkNTEsIDB4MDY1NzBiZWUsIDB4YzVkYWU3MmQsIDB4YjE2YmZjNWUsIDB4NTViM2Q0NWMsIDB4NWJkODExZmMsCi0JMHhmZWZlYmQ2MywgMHhmYTRlZDYxYSwgMHhhMjI5YjJhMywgMHg0ZmY2ZmFiZSwgMHhkNTUzN2UzMCwgMHgzZWJlN2M2YywKLQkweGExN2YxMWMzLCAweDcyNThjMzBmLCAweDVkOGE2MDAxLCAweDMzNjRiNmE5LCAweDA1NzJlYTU4LCAweDVkZDYwY2U0LAotCTB4ZjM0NGMwN2MsIDB4MGE1MWJlNWYsIDB4YzVmZTYwZGEsIDB4ZjhkYzc5N2QsIDB4YzFmMDNmNjMsIDB4NDA3ZjVhMjAsCi0JMHgxZWY5NzgwNSwgMHgzMzk2N2Y2ZSwgMHg3ZjBlZDA1MywgMHgxZDYwN2VkZSwgMHgwYTJmMzFjNSwgMHhjNGQwYjM3ZCwKLQkweGU3ZTdjOGJjLCAweGRjNTRiNGEzLCAweDJhN2IyZmVmLCAweGZjYmNmMDhhLCAweGY2ZmY5NWU5LCAweGJlZDdiYzM4LAotCTB4Zjg3YzY2NzksIDB4ZjkwZWJhZmUsIDB4ZDk5OWUzODMsIDB4ZjlmYWJhZTMsIDB4NTJmN2YzNjQsIDB4ZmY4YTBlNTEsCi0JMHhiMGM5ZjYxOSwgMHhlY2IxZTVkZSwgMHg5MGQzZjNhNywgMHg2ZWE5Yzk2ZSwgMHhmMmRkYWJhNSwgMHhmMzY3MGYyZCwKLQkweDg2Y2ZiMDc2LCAweDIxZGMyZjc1LCAweGNiZDgzYWQxLCAweDIwODdiMjM2LCAweDNlMzg2YWYzLCAweGI0OWVkNDk3LAotCTB4NjMzZGI5NWEsIDB4ZDlmODRiYWEsIDB4ZjVlN2Q0NmUsIDB4N2ZiYzEyNmQsIDB4ODUyNWVhMGUsIDB4MGY2ODE3ZjAsCi0JMHg4N2RmOTc4YiwgMHgzZTkzMjU3ZCwgMHgyYWZhZTFmMSwgMHg2NmZiYTZjYywgMHg1NjFkM2Y1MywgMHgzMzE3ZWY5NCwKLQkweGQ5ZjQ1Yzc4LCAweDJlZTdlZTBjLCAweGE1ZWVkNTRjLCAweDM2YTNmNDM4LCAweGVmMWE0YjZkLCAweGU2MjUxYTQ3LAotCTB4NGFiY2ZiMDEsIDB4M2EzMmRiNzMsIDB4OGRiOWZjYzcsIDB4YjU1NTJiZTIsIDB4MjcyODllNTEsIDB4MmYzYzRiZWQsCi0JMHgzMjU1YmY0MCwgMHhkODcxYWQ5MywgMHgxYWU3NWYyZiwgMHhmMDFmZDczNywgMHhjZjE5NDNmYywgMHgzZjVjMWM2NywKLQkweGJlMDJjNjU2LCAweDY2MzhjZTE1LCAweGZjNGJmZmU4LCAweDk3Zjc4MzJiLCAweGZkZWJhYzNjLCAweDVkNGRmMWNlLAotCTB4MTBjM2I5ZjUsIDB4OTVlNzdkNWYsIDB4OTc5ZTNjZTMsIDB4MTkwMTdlNDgsIDB4OWZhMTE2OGYsIDB4MDIzNGJjZjcsCi0JMHg3NzBiZDdmNywgMHhmYTgyOWYxYywgMHhmMmNmZjU3NiwgMHhlMTc1N2M1NSwgMHg3YjI3ZGY0ZiwgMHhiOWQwNWFiMSwKLQkweGI0N2RmZDFkLCAweDBjZmYwMDFmLCAweDdlNDI1M2NhLCAweDBmOGYxMjdjLCAweGQwZjgxMjlkLCAweDU3ZDdhZGU5LAotCTB4MzhmMGIwZWUsIDB4NTQ3NWU4M2QsIDB4N2Y5Yjk1MjQsIDB4M2E1NmZkNDMsIDB4NmZhODVjZGEsIDB4OGNiNjVmMmIsCi0JMHg2YmZjYmQ0MiwgMHg1ZmI0M2Y5YywgMHhmOGMwNzliNCwgMHgxNjdmODEwZiwgMHhiNDU0NjI1OSwgMHgzMzAyNmI0ZiwKLQkweDY5YWYwOGFkLCAweGY1ZGMxMTMwLCAweGYyMmE0MjVlLCAweGFmYjU2N2UzLCAweGNlNGY5MTM4LCAweGQwYjI4NTQ3LAotCTB4OGJhYzc1MGUsIDB4MDE3MTFhZDIsIDB4N2RjZjhmMmEsIDB4ODhkNTliNTYsIDB4NmEyNTljNzEsIDB4ZjUwNGMzOWIsCi0JMHhjNDY0MzY0YiwgMHg0OGZlYmVhMSwgMHhmZWIxNTkwZCwgMHgzMzM0YTZhMywgMHgxZDU1MWVjMiwgMHgxZTQ3YjA4ZiwKLQkweGEwNjdmMDRlLCAweGZmMDQ5YWJhLCAweDZiNTliZWEwLCAweGYzNWNmNGUyLCAweDNhNmI3MWRjLCAweGFjNTU3NzhjLAotCTB4ZGZlN2YzZjcsIDB4NGY3OGM2Y2YsIDB4MzY1YjZhNjUsIDB4NzdhMDExZGEsIDB4ZjNjNDdmNzYsIDB4YzNiMjI2YjMsCi0JMHgzYzkzOWY2YiwgMHhlOGJhYzM1MSwgMHgwZGU5MTZiZCwgMHhkMDRhYjVmMiwgMHhhZjRiZWQ3OSwgMHhiZjdjODQzYywKLQkweGQwNWRlOTE2LCAweDZmODA1ZjlkLCAweDE3ZjNkMDRmLCAweGZjNjE0ZTBlLCAweDE3YzgxM2ZkLCAweGI4MDJkZGJhLAotCTB4Mzc3MTgyZDYsIDB4MDlhZjg3MmIsIDB4MjVlNzgwM2UsIDB4OGYyMDc5ZmMsIDB4MTFlODI2ZjQsIDB4ZjkyMzM3ZjQsCi0JMHhjNmZhMzdiZCwgMHhiN2ZiNzI2NiwgMHhmNDhkYjM2OCwgMHhlNzI2NmM2YiwgMHgyZjFkZjZmYiwgMHg5ZjdlOTEzYiwKLQkweDZkZmM3ZjNmLCAweDdjYTk0ZjNjLCAweGJiYjJhYzAxLCAweGY4MTdiZTA3LCAweDNiZjVjMmE4LCAweDRmZTRmZTY5LAotCTB4OWQ3YWUxNTQsIDB4ZTRlZmViNWQsIDB4NTU2ZjIxNzMsIDB4NWY0ZmFmOGMsIDB4ZDYyYzk1NmYsIDB4Zjc4YmQ3YWYsCi0JMHhiYzg1MzJlMywgMHg5N2FmODEzMCwgMHgxMmY5NzEwNiwgMHg4YWYyODRmMiwgMHgzZWJlOTk3ZSwgMHg1ZjdmMWM1ZiwKLQkweDRjYTJjZmU3LCAweDYyNjk5ZmNlLCAweDcyNmQ0YzlkLCAweGJlOTA3ZTIyLCAweDdmODA2N2E4LCAweDQyNTFkNjNjLAotCTB4Y2Y5MzQwNmYsIDB4MGZmMzA2N2YsIDB4ZmYzZTk3YTMsIDB4ZDAwZjMxNTIsIDB4YjhkODllNmIsIDB4OWJiNjNhMmUsCi0JMHhjZTllOGFkOSwgMHgzOTMzZjMyZiwgMHg5YWRkOWNkZiwgMHhmODBjZGE5OCwgMHg1OWY2MGNmYiwgMHhmYzAwNjc5NCwKLQkweGE3OGQ4NzJhLCAweDVlM2U4ZGYzLCAweGE2Y2E0ZmYxLCAweGZmYTFiYWUxLCAweDhmYWZmNjEwLCAweDhmYTA1MWZiLAotCTB4YzQ3Y2ZkOGMsIDB4ZjNlODdjYjgsIDB4YjhiMmU1ZDcsIDB4N2NiNGMxNjYsIDB4ZGNmYmI2MjcsIDB4ZWI4NzkxOTEsCi0JMHg2Njk3ZTNlNiwgMHgwN2JlZjRhYSwgMHhkZjc4MDNmZCwgMHgzOGEyNmNkMywgMHhhZmIxNTlmNSwgMHgxNWY1YmIzZiwKLQkweDJlYmNhMmU3LCAweGRlMjI5ZjdlLCAweGFiYjI3ZmMzLCAweGZlNzUzY2ZiLCAweDlhNjdlMzBiLCAweGJiZjZmMTY3LAotCTB4Y2ZhYzIxYTYsIDB4NzUyZjkyMzcsIDB4YzlmY2U5YmMsIDB4ZGY5MDI1MzYsIDB4NTVhN2M5MTIsIDB4MzhhZDY3MjksCi0JMHhkZDczZTQ1ZSwgMHg3MThmMzk3ZiwgMHg1ZmZmOTQxNiwgMHhmZjI0ODI5OCwgMHg2NjQ0ZWNiNSwgMHg3Zjg2NWQ5OCwKLQkweDY1ZDUxYjBhLCAweGIzYWYzNjFmLCAweDUxY2I3YjUxLCAweGJkNzUwNzZlLCAweGFhZWJkYmFmLCAweGM0MjVjZjc4LAotCTB4NzkzMjhmZjcsIDB4ZjU2YWM5MWUsIDB4ZjQyNzM2YzQsIDB4MzZlM2U2MzMsIDB4ZmRkNjBmM2EsIDB4NDJkNzA5YzUsCi0JMHg5NWM2MGM1MiwgMHgwODJiNGE1ZSwgMHgyZTZiNzdiNywgMHhhZGZlMjA5ZiwgMHg3MGRiNmQ2NCwgMHhjNzcwYjNmZiwKLQkweDIzNDczM2ZiLCAweDQyZDhmZTlmLCAweGI3MGIyZmU3LCAweDFmYTJiNjRlLCAweGUyZjBmMmJlLCAweDczZmY0ODUxLAotCTB4NWQ5ZWRjNzUsIDB4MDQ3OTFkYWEsIDB4NzU3M2U4ZmQsIDB4ZTcxNmI5OGYsIDB4NTNjNTdiZTEsIDB4ODVmM2MyYzYsCi0JMHhiZTg5ZjNiYiwgMHg2NmRhYTNlNywgMHg4MGYxZGMyMiwgMHhiZGUxMWFjNCwgMHg2ZTQ3ODc3MSwgMHg3MWUwMWJiYSwKLQkweGI4YjE4MThlLCAweDQ5MGU4ZmNlLCAweGY4YzM2MzI1LCAweDM3NTMwOTYxLCAweDliN2U4ZGRkLCAweDdjYTJhMzFjLAotCTB4NWFmNDI0N2MsIDB4NmJkMzg1OGQsIDB4ZGFmZmUwOTcsIDB4NzljYjkyY2UsIDB4MzY0ZDRkNzEsIDB4MWM3Nzk3OWUsCi0JMHhmODBhN2QwNCwgMHg5YmJhYjBhOSwgMHhlYmVlMzg0MiwgMHhhODBmYjQ4OSwgMHg1MjRiNmQ4MiwgMHg5MzViOWQxYywKLQkweGNhYzJiNGRmLCAweGY0MDVjOWVjLCAweGNmMGM5ZWRjLCAweDFlZGE1YTRmLCAweDdjOWNmNWMwLCAweDE5YmY5MWMwLAotCTB4MThkZDJiNzEsIDB4YmJmYjg4YjUsIDB4ZTdlMDM3MjQsIDB4YmUzYWY4ZDIsIDB4MGJkNDc5ZjQsIDB4NGZlYzhiM2UsCi0JMHhmZDE1YmY3ZiwgMHg2MjdmZDQ3YywgMHg3ZjZhOTdmZSwgMHhkNmVkMGYzYywgMHg3MTU5YTNhNSwgMHg1ZTRmZmViOCwKLQkweDNmNDNhYThmLCAweGQ3MGIxM2U3LCAweGUwZmY3YTY3LCAweGVlMWM3ZDdmLCAweDY1YmY4MTI3LCAweDMyYmZjMTgwLAotCTB4MWY2N2MwYzAsIDB4MmRiNWZkMWIsIDB4MzNhN2FmMzQsIDB4Y2U5NWZlOGQsIDB4YjJlYjE1YWYsIDB4MDRmM2MyNjIsCi0JMHg5OWUzZjliYSwgMHg3NDQ3OTZiNywgMHgwMjg4MGZkOSwgMHgzMThjNWQxNiwgMHhmNmVmOGMwYywgMHg2ZDhiZWJmOSwKLQkweGQ4Mzc4ZmU4LCAweGYzYWMxYjU0LCAweDNjNzdlNDYzLCAweGUyNTk3YTZmLCAweGU3M2IwMGZiLCAweDFlNWY4ZmZmLAotCTB4ZGVmZGM0MTEsIDB4ZjBlNGZmYjIsIDB4MTA1MzI2YjIsIDB4ZWM0ZWE1NTMsIDB4ZmI2MTJlZGUsIDB4MjVmZmUwYTUsCi0JMHhkYmZjYzI5YSwgMHgwMWU3YmIzZCwgMHg5YTJiYjNkYiwgMHhiNDMyNWI2ZiwgMHhlNzk0NzJiZiwgMHgxMmI1NDAzZiwKLQkweDlkYmVkN2UxLCAweGY3ZGZmZWVjLCAweGMxNzhmNTY3LCAweDZiYmM3NGFmLCAweGViYmM0MzRjLCAweDM5ZjdkNmY4LAotCTB4MTQ1ZjAyNmYsIDB4ZWZlMTc0MTUsIDB4ZjIwYWZmMGIsIDB4N2RmYjJmNjcsIDB4M2E2OTdlNTQsIDB4ZTQzOGU4ZmIsCi0JMHg4NjhjNDc2NywgMHhlNmNiZjM3MiwgMHg0OGZlYTRjNywgMHg2ZmYyOTdmNywgMHhhYzc1N2VlMCwgMHhmY2EyYTMxMiwKLQkweDQ4ZGZlMTdlLCAweGZkOTc4Yzg3LCAweDc0ZWE1NGQ1LCAweDEzNjVlM2Q3LCAweGY3YTE2YTVlLCAweGYxMWU2OGJlLAotCTB4ZWY3ODM4ZGEsIDB4ZWI4NjI1MGQsIDB4ZjdjZjBmNmYsIDB4NjQ2ZmE0ODgsIDB4ZWJmZGM3ZGUsIDB4NzNlMjI3NDYsCi0JMHg3ZTlmNWQ3ZCwgMHg5ZjU5ZDM5NywgMHgxNzQ3YTdmNywgMHgyZDVkNzEzYiwgMHg2ZDdkZjY0ZiwgMHg0ZmI3ZDIwYywKLQkweGRhZmU4YThjLCAweDcxZjc5MTcyLCAweDEzZDczZjYxLCAweDQ3MzFlZDE3LCAweDJmOWQwMDY2LCAweDYyZTM5ODFlLAotCTB4YjY5NzM3YTAsIDB4Y2Y4NzlkY2MsIDB4NTI2ZWJkOTcsIDB4NWVkNzVmZDEsIDB4ZmVlMjczMmYsIDB4YmI3MjBmZWEsCi0JMHhkZTEyYzU1MywgMHhlNDdjZTEwYiwgMHg2OTdhODRhMCwgMHg4MzliMjk2YywgMHg2NDg2YzdlZCwgMHhjNjdlODZlNiwKLQkweDMyZmNlMGNjLCAweGM0MWNiMmU2LCAweGUwY2Y5ZjgzLCAweDZlMzNjNTM5LCAweDAzM2M1MzQ0LCAweGJjYzVmNWZlLAotCTB4ZTBiZmE1OGUsIDB4ZWYxZDEwNzEsIDB4OWM2YzdlZmEsIDB4MTAzMGY3NTgsIDB4ZjE3N2UyNDMsIDB4M2Y4OGI4YmMsCi0JMHg4YmMwZTRmZiwgMHg0YmJmYjBiMywgMHhjZTJhMmM4NywgMHgxNjQzOGJmYiwgMHhlYzE1N2ZlYSwgMHhkZTMwY2NhMywKLQkweDVmN2NhM2M1LCAweDFhNTQ3MDgyLCAweDdmZGYzM2NhLCAweGZiZTI2YWFjLCAweDE2NzVjYThmLCAweDNiYTYzNThmLAotCTB4YjU4NzE2NWYsIDB4M2MxZWZkYzMsIDB4MmJiOGUzNzMsIDB4ZmNlYTFmMDUsIDB4ZDdjM2NhYmEsIDB4MWNlYzBhYjcsCi0JMHhmODliZjdhZSwgMHg2ZDM1OTYzNywgMHhjNmY1YmM0MywgMHg3Zjk2ZGZjNywgMHhmYThjYjMzMywgMHg3YjZmOTNhMiwKLQkweDU3ODExN2UzLCAweDViZTQ3Zjk0LCAweGVkNTYyZjlkLCAweDcxZWNlN2U3LCAweDkxMTNmOTRkLCAweGQxM2U3NGZmLAotCTB4MTI2MDRiZjUsIDB4NWE3YjQxY2IsIDB4OTgzOTY1NjMsIDB4NDczMDEzOTcsIDB4Y2ExN2E4NmIsIDB4ZWQwNWI3MTQsCi0JMHhmNmY4OWNjMCwgMHgyM2NmNDQxMiwgMHg0YWJmNWM1OSwgMHgxOThmNjZjNSwgMHg4ZDhkNTFlZCwgMHg3OGI3NDdmNCwKLQkweGM3ZDcxNjc3LCAweDI4M2U2NDIxLCAweDc5NTJjY2VmLCAweGE2YWIyNWJlLCAweDgyNWU4NTdkLCAweGVkMDAzMmUzLAotCTB4Yjg5ZjU5NzYsIDB4NDlhMWJhM2YsIDB4ZDljNmUxZTksIDB4ZDk3NWYwMzIsIDB4MzIwN2I4YjgsIDB4ODdiY2M2MzQsCi0JMHg0NDc4NzI4ZiwgMHhkNDBiNDhkYywgMHhiMzMzZDJjYiwgMHhjY2FlMDA0YiwgMHgwYWM5NGNmMiwgMHhlMWQyZjdlYiwKLQkweDFlYjgwMWM0LCAweDlmMTUzZTc4LCAweDM3ZGUyOGZmLCAweGVhMjQ2YjIzLCAweGY5ZjQ4NTdmLCAweDYxOGVhNjk3LAotCTB4ZGFiYWQzMWIsIDB4ZjFkZDc5OWYsIDB4NWRkZDJmZDEsIDB4YTU4NWJiNzAsIDB4ZWIwODc5NmEsIDB4OWVlNWU1ZjMsCi0JMHhlYzFjY2YyYywgMHgyMmY5ZjIyNywgMHhkZTUyYjZjNiwgMHgzZjVmZTA1YywgMHhmZTA0ZmY0NCwgMHg4ZjQwZWQ3OSwKLQkweDJkNWYwNDNiLCAweGE0MjEyYmIyLCAweDVjYjNhYjMzLCAweGMwMzdmNGVlLCAweDhjNWE2MDE1LCAweDI1OWI3NDhjLAotCTB4MzkwZWU0ZjgsIDB4ZTdlZjgyZDQsIDB4ODJmNTVhYjIsIDB4MDNhMjVjOWQsIDB4NWRlZGY3NWYsIDB4ZDgwNjAzYWYsCi0JMHhlMDNmYmQwNSwgMHhiMDJkMmY4NywgMHgxMzZiZTAzZSwgMHgxMDQ2ZGZiMCwgMHhiMTIwMTMxZCwgMHhlOTk4ZjQwMiwKLQkweDMzZmQ3ZmI1LCAweDYwMTM1YmY2LCAweGU3ODQ1MWVkLCAweDEwYzJmNTBhLCAweGNjZmFjZTBjLCAweGQ5NTk0MzVmLAotCTB4ZTMwYzM5YzcsIDB4MWM1NzllMWQsIDB4YjhlODA1MjEsIDB4YzQzZWY5ZmUsIDB4MWY4NTJiZmYsIDB4YzQ0NTdjYzMsCi0JMHhiZTU0MWJjZiwgMHg0YjFiZTYxZSwgMHhlMDgwZjZmYywgMHhhY2ZjNGZiNywgMHhmMDQ0MTMzYSwgMHgwYmVjNzY3MywKLQkweDcwZjFlNjE5LCAweGM0NjFlZjk0LCAweGE5ZjMxYWZiLCAweDk0NmVmNWQ0LCAweGZhMjcxYWQ3LCAweDU0ZmY5ZjE5LAotCTB4YWMzNTUwZDIsIDB4M2IyNGZlMTEsIDB4NWVlNDIwOTQsIDB4ZjUwNmRkMGEsIDB4OGRiOTY5YWQsIDB4MGFiNjZmNjgsCi0JMHhjNjljYjk3ZSwgMHhkODFjM2Y2OCwgMHgzZmJjYTM2YywgMHhlYTc4ZTM3NiwgMHhhNjk3MDBjMywgMHgzZWUxYWVkZiwKLQkweGI2Y2ZmMmYzLCAweDNhMDUyZTY3LCAweDM4YmQ0MGQ5LCAweGExNTM5ZDYxLCAweGI3NTgyMmNmLCAweGNlODk2MDA1LAotCTB4NGY0NDgzODEsIDB4ZTEzODBmYTgsIDB4YzdiNGI2ZjksIDB4MzE5ZjM5NTIsIDB4NGViNWNhMmYsIDB4ZGRlZjFkMWYsCi0JMHhhMzQzMDFlOCwgMHgzM2I2NjlkZiwgMHg3MzJiZWUwYiwgMHhlNTE1MDFkOSwgMHgyN2NiYTc0ZiwgMHhlMDFiYzA3NiwKLQkweGZlNmUzMjdiLCAweDdmYWMxZjQxLCAweGViN2ZmYjk5LCAweGE2MTNhYzRkLCAweGZiMzc0ZWI4LCAweDlmZjkxNmY3LAotCTB4ODMwMTZlMjAsIDB4ZjhiMDM5N2UsIDB4YTJjM2Q5ZGIsIDB4ZTIxYzU2ODMsIDB4ODFlMmVkOTYsIDB4Y2FmNTFlZTIsCi0JMHgyNTdhZThiZiwgMHgxZjkzZTU5ZiwgMHhmMTg0NGI4MiwgMHg5MzM2OGI5NiwgMHg4Y2I3MGFhNSwgMHg2YmIwNDllYiwKLQkweDlmZWIxN2M4LCAweGMzYmIyMGNhLCAweDg1OTBmYzY2LCAweGZhMDc2M2I3LCAweDRiNmNiZjEyLCAweDJiMGU4ODkzLAotCTB4ZDc5NDRkOWIsIDB4M2ZiOWIzMzgsIDB4OGNkNTQzNzMsIDB4M2E1NGJlZTYsIDB4ZjNkMzI3YWYsIDB4MmRkZTQ3NGIsCi0JMHhkMzg3N2FlNCwgMHg4OTMzZTY2OSwgMHhlODhmMjg5MywgMHhlYTU0NDE5OSwgMHhmODJmNThmMywgMHgxNWYzYzc0ZSwKLQkweDFjYjNjNzJmLCAweDFlMzdkZGM4LCAweDJkNWExM2NmLCAweDNmMjZlODJjLCAweDM1Y2ZkNzg0LCAweGI0YWZkZTExLAotCTB4N2Y5MTk3OWUsIDB4YjEzMDRlZTYsIDB4ZDE0YjAwYmUsIDB4NDk2ZGNmOWMsIDB4MDFlZWU2NjYsIDB4OWY0MTM2YmYsCi0JMHg3MzM0NzcyOCwgMHg2YTBiZWQ4NywgMHhmODhkOWNhMiwgMHhkYTc4MGIxZSwgMHg5NzcwMWY3MCwgMHgyNzI3ZDc2OCwKLQkweGE3NGVkMGNlLCAweDhlODEzY2U3LCAweDMzMTU5NGJiLCAweDlkZGIxZDcwLCAweGJmOTE1YTUzLCAweGMzM2Y1YTFjLAotCTB4YjE0OTM2YjgsIDB4YWJjYzFmMjAsIDB4ZWU2M2QyMzAsIDB4MTk2YzIzNWMsIDB4NWJlOTE1ZmYsIDB4NzNlMzc4Y2IsCi0JMHg1ZjA4Yzc5YiwgMHhjYjk4ZTlkNCwgMHgxOGU5YzM3MiwgMHhmYTBmM2Y4NiwgMHgzNjNjNTdlMSwgMHhkZWU2M2Y4ZSwKLQkweDc5ZTAxZTM3LCAweDdjYzNmODYxLCAweDMyMjkyYjk2LCAweDE0N2I2ZmUxLCAweGFkZTAxN2M3LCAweGE2M2NmOTExLAotCTB4NThiNzg4YzgsIDB4N2Q0ZjExOGYsIDB4NDhmODhkNGIsIDB4OWJkNzFhZjAsIDB4YTg2ZTllNTgsIDB4MzYwZGY2NGYsCi0JMHg1MTVmZjdkNCwgMHg1NDA3ODA2MCwgMHgxZmI0MzU4ZiwgMHgwMTkyNzFiOCwgMHgzMzRjMGI0ZSwgMHg5YmE4Y2ZiNCwKLQkweDFhYjM4MDZkLCAweDFmYjQzNmVlLCAweGExOTE3ZmI0LCAweGNhYjgzNzNlLCAweGU4ZTQzZjUwLCAweGI0M2MwMzdhLAotCTB4ZWQwYzlmZTksIDB4MzE2ZjM3ODcsIDB4NzY4N2U3ZDQsIDB4YjQ0N2VhMWEsIDB4OGYwMGMwZmUsIDB4ZDBjMjdiNmMsCi0JMHg4ZDg3ZjQ3ZSwgMHhlZDMxZmE4NiwgMHhjN2VhMWFjZiwgMHgwMGMxN2M1ZCwgMHhkNTc4ZTg0ZiwgMHhlYmI2ZmVkMCwKLQkweDQ0ZjAwY2M3LCAweDdkYTFhZWY2LCAweDAzN2RmZGIxLCAweDBmZmQ1OTNjLCAweDkzZGJmYjQzLCAweGE3ZWExYmNlLAotCTB4ZDQzMzNmYmEsIDB4NmFiOWNmNGYsIDB4N2Y2YTY3ODAsIDB4YjZhZmI0MzEsIDB4YTM2NTQ2ZmEsIDB4MjY1ZDJhZmYsCi0JMHhjMDU5YWFiOSwgMHhlYjRhZWFlNSwgMHg3MWNhM2IxYywgMHhkZmYwMzY1MSwgMHg3ZmM5ZDYxMCwgMHhkMjllZDBlMywKLQkweDYyYTU4NTdlLCAweDM0YjI2NGZjLCAweGQ5ZjI0NDNlLCAweGRmNzBkMjZjLCAweGU0YWY2OTExLCAweDhjMWViY2NmLAotCTB4NGM1N2IxYWIsIDB4MDYyMzRmNzQsIDB4MzYxYzhlY2MsIDB4MGVjN2FjN2UsIDB4YjgyZWM0MWIsIDB4ODA2YWE5NmYsCi0JMHg4NjQ5YmMxMywgMHg2ZWU1ODlmNiwgMHgyZmIyN2Q0MywgMHg3ZmRmNTBjNywgMHgwNzgwNjY4NSwgMHhkYTE5MTc1NCwKLQkweDMxZThkYzBmLCAweDUyODE2OWMwLCAweDNhOGNmYjQzLCAweDZhY2UwMWFmLCAweDFmYjQzNzI4LCAweGE4NjdkZmI0LAotCTB4MzBhZTBkY2YsIDB4NWEzOTBmZDQsIDB4MzY4NzgwNmQsIDB4MWZiNDM0NmQsIDB4ZDQzMDFjZGUsIDB4MGNlYTg3ZTcsCi0JMHgxYjVhMjNmNSwgMHhiNmM4ZjAwYywgMHhhM2Y2ODZmZCwgMHhlYTFhMGMzZiwgMHgzNTFmYjRjNywgMHhkOGJiOGZkNCwKLQkweDc0Mjc4MDY0LCAweGRmZGExYjM0LCAweDgwNjQzZDc2LCAweDg2OTNiMjI3LCAweDMzZjZjNWY2LCAweGZhYjI3ODA2LAotCTB4ZGJmYjQzNWIsIDB4ZWExYWNlOTMsIDB4MTkyZmJhYTcsIDB4NjRmZjc1ZWEsIDB4YzY1N2NlN2EsIDB4OTk1ZmMyZTcsCi0JMHhmMGQ5ZmRhOSwgMHg4NzkyNjA3ZSwgMHg1ZTA0N2YyMSwgMHg2ZTM1NjkzMCwgMHhhNzY2ZjZjNiwgMHhkZTgxN2YxMywKLQkweGQwOTI4ZjZlLCAweDNlNTJmMWJmLCAweGY0MjYxYzUyLCAweDA0YzY1ZjAxLCAweGU4NTdjNDRjLCAweDVjNTA1N2VhLAotCTB4YWZlMjllMjgsIDB4OThkYzVhNjQsIDB4MWY3NjAzNzcsIDB4YjRlNjdmZTMsIDB4ZmI3N2Y0MzQsIDB4Mjk1ZGY5NzQsCi0JMHhmNmY4OGY1ZiwgMHg2Y2QxZDc3ZSwgMHhkYjZiZjY0NiwgMHhhN2JjYTk0NCwgMHhkOWEzYzMzYywgMHhlYmYyMGUzYywKLQkweGQ5NTNkZjZjLCAweGY4YmZiODA5LCAweGJiZjQxNGQ5LCAweDM2YzBiMjU3LCAweDI5NjRlNzljLCAweGRlMWRhNjJmLAotCTB4OGM2NTFkM2IsIDB4NTRlNWU4NjMsIDB4NmMyZGUwM2IsIDB4MWFhMzI3M2UsIDB4YjI2ZTBhNTIsIDB4YmY2YTlmZGYsCi0JMHhmYjNiZWQ0YywgMHgxMzBkZjExNSwgMHg1ODdkN2ZhYywgMHhiZWMyOGZmZiwgMHhhZGJmMDY0MCwgMHgwNTcyMGZjMSwKLQkweGZjMGZlY2JlLCAweGZjN2JjMTJhLCAweGY1ZWYwNDQ5LCAweGVmZGNhOWJiLCAweDA5ZjJhMWNmLCAweDA3ZjU0NmJmLAotCTB4M2YwNDQ1ZmMsIDB4MWMxMGY3ZWQsIDB4ZDk1Mjk3ZjQsIDB4ZjNkMmY3ZTgsIDB4ODI3MmZlNDMsIDB4MTk3ZWMwOGYsCi0JMHg3ZmIwYTNjYiwgMHhkODU5ZjJjNiwgMHg3M2ZkNjMwNywgMHhmODQ2MmZiMCwgMHg5NTAwZmVhNywgMHg3YTNhZmU0ZCwKLQkweDgxYmY4MmZlLCAweGZiZmM5N2UwLCAweDNmYjlmZTA5LCAweGZmYjM2NTQ4LCAweGZhYWY5NTI4LCAweDM1ZmVhODliLAotCTB4NmZjMTMzN2YsIDB4ODcwNDQzZjgsIDB4MWYwNGFkZmMsIDB4N2MxMWI3ZjMsIDB4YzEyMWZmYzIsIDB4YTlkYmZiNmYsCi0JMHhhNDVmZjU2YywgMHgwNzdmMWRmMiwgMHg1ZmYyOWZkNSwgMHg5ZThiYjgyNywgMHgxMjM4N2Y0NiwgMHhmODhhOWY5ZiwKLQkweGUzN2UxMzJiLCAweDJjM2ZjMTcyLCAweGNiOGJmYjllLCAweGU1YjAyYjM4LCAweDkzMmQ2ZjgyLCAweDc4YzEwZGMwLAotCTB4NDZlY2JmNjAsIDB4ODkxZDdiY2MsIDB4N2M0Mzk1N2MsIDB4ZmM1NmVhNzUsIDB4OThmZGM4ZjksIDB4ZjE5ZjAyNWUsCi0JMHgxMzNhZjRmZCwgMHg3NmU4ZDc4ZiwgMHhlODE3ZTQ1ZSwgMHgwM2M1NTI3ZSwgMHgwMGJiMWY3YywgMHgyNzNjNWZmYywKLQkweGVlMjhjZmY4LCAweGI2YTk1ZWFmLCAweDU3M2ZhMGU0LCAweGYwZDY4YTYxLCAweGY1NGFlNTFjLCAweDYxMGZjODFmLAotCTB4MjIwZGRlNzgsIDB4YjY2YmRmNzIsIDB4ZjZjMzNiODMsIDB4YmVmMDE1NzEsIDB4NGVhZmRlMTksIDB4NTRmOWEzNGQsCi0JMHg5ZDBiNTZiMCwgMHgyM2NjY2FhMywgMHgzM2RkNWM4MSwgMHhmODlkNzdjMCwgMHg0MDM5ODA3YSwgMHg5ODI1NmFmYiwKLQkweGZmMzhmYjhkLCAweGYwNWZkZjAwLCAweGE1ZWE5NWY5LCAweDU0N2UxMzZmLCAweDY3MGZjZThkLCAweDc3MDk0MmRhLAotCTB4YTRlNGZjNjEsIDB4ZGViZmYxNDQsIDB4ZjIyNTUxZjAsIDB4N2ZhZDdiYzgsIDB4ZmEwYTUyZTMsIDB4OTM3ZmE1ZTUsCi0JMHhkMzlmNDg3YywgMHhjNjM5NDcxNiwgMHhmODgzOWMxMywgMHhjODM5ZDRiZSwgMHg1MjYzMjg2YywgMHgzMDQxOGU3ZCwKLQkweGFhMzkzZjlmLCAweDBhMDMzNWVmLCAweDc1OWRmNGZmLCAweGViNGZlZTQ3LCAweDgxZGY0N2RhLCAweDliZjA1MTViLAotCTB4NDJkYjk4Y2IsIDB4ZjNjYzhkNzksIDB4Yjg1ZDVlMTYsIDB4YmUwOGY5OTMsIDB4ZmNhODA1OGIsIDB4MzVjZjhhNWUsCi0JMHgwZmU2MjQ2OCwgMHg4ZGY2MDkwNSwgMHhiNGY2YTViNSwgMHhhNTc5YzhhZSwgMHgyMDdhZTIwZCwgMHg1MGQ5OTA2ZCwKLQkweGI5ZjU0ODRlLCAweDM5M2ZiZmIxLCAweGQzYWYzNDNjLCAweGM2Y2Y2ZTYzLCAweGZhZjNlOTc1LCAweGRmOWJhYTVlLAotCTB4NGYxZDYwOWYsIDB4ZjRmZWZjZTMsIDB4NGMxNzU3ZmEsIDB4ZTNmOWRkMTksIDB4MGExN2MwMWYsIDB4Yzc2ODZmOWEsCi0JMHgwNmE0MWNmMCwgMHhhZmRmMDc2NCwgMHhmMjg5YWVmOSwgMHhhOGJlNzViOSwgMHhiZTIxODBjMCwgMHg3OTQ0YzliNywKLQkweDAyN2M1ZGZlLCAweGIwZmI4MWZjLCAweGY3YmEwZWY4LCAweDAxMzI3YzA3LCAweDhjNmFiOWQ3LCAweDVmODJiMDE0LAotCTB4Y2MxY2RhNzksIDB4ZjJiOWQxMzYsIDB4MTVjNjJiNTIsIDB4N2YwM2M3OTYsIDB4MDdjZWY3YTQsIDB4MDNmZGM1NmIsCi0JMHhkN2YwMzlmZCwgMHgyZmNmNDhlZCwgMHgwNzNhMzE3ZSwgMHhjNmY1NTVmMSwgMHhhYmUyMzcxOCwgMHhjMDc0MGNjNiwKLQkweDkyM2JlMzdkLCAweGI4NTdmM2M2LCAweDBkYzY5N2VhLCAweDkzMjY3OGE1LCAweDRmZTMwZDM1LCAweGViM2Q2ZDMzLAotCTB4N2Y4MmU1ZGIsIDB4NGE1OTI3NGUsIDB4ZjE5ZmQ0ODMsIDB4NDEzZWU1ZmMsIDB4M2QwNGZiYjcsIDB4NjRmYmFmZDcsCi0JMHgzZWYzMDQ4ZCwgMHhkZDEyZWM3ZCwgMHhmZjM2ZTk1ZiwgMHg5ODNjOGY4ZCwgMHg1NWM3YzYxOSwgMHg3OGE3NjdjZCwKLQkweDViZGZkMDdhLCAweGRmM2E3ZjQ0LCAweGVmODc1NjQ4LCAweGFmM2UxMmEwLCAweDQ2NWUzZTRlLCAweDdjMGIxMmZjLAotCTB4N2M3YzQxOWMsIDB4NjcxOWNmMDEsIDB4NzczMWRjZDksIDB4MjgwZWQ5NDEsIDB4ZmJlOTQxMDksIDB4ODFmNjk1NjcsCi0JMHhlNTQ2OTg4YiwgMHg3MmE1ZTYxMiwgMHhmOTFkOTAzOSwgMHg2ZGQ4MWJkNiwgMHg2MmFmN2M0NSwgMHg2ZDdjZjQ0ZCwKLQkweGYyMTc2MmQxLCAweDhmYjMzMmYxLCAweDMwNmJjOWY2LCAweDdkY2YxNzUzLCAweDEyNDk0NzU5LCAweDM2ZWE0YmM2LAotCTB4ZTgwNDk1YmYsIDB4N2JiMGQzOWIsIDB4Njc2ZmM2MzIsIDB4ODViZTE3MDcsIDB4ZDMyMWQ5NjUsIDB4MDU1YmNjMDUsCi0JMHhjZTJlZjhiOSwgMHhiZDU0ZGRhYiwgMHg3ZjhjMWZiNSwgMHhiNzEzNzNmNywgMHhiM2U3ODdmNiwgMHhmNjBmNGUyNCwKLQkweGFlODdhNzJlLCAweDBkZDcyMjM3LCAweGU0OTliMDcyLCAweGViNDNkNjMzLCAweDA2YTU5YzkyLCAweGMyZDhhODM5LAotCTB4YWVmOGE2M2MsIDB4Yjk0ZWY5ZmMsIDB4ZmJmZDVhMjgsIDB4ZTRiZmE4ZmUsIDB4NTQxNzhhMGUsIDB4NDM4YjYxYmQsCi0JMHhkYzYyYWYzYSwgMHhmNDc5MzAxZiwgMHgwN2VlODg3OCwgMHhkNWYzZTIzMCwgMHg3NmMzNWEyYywgMHhmZWJlMGE5ZiwKLQkweGJlMjMwMDc0LCAweDFiMDRkNGZlLCAweGZmMmU4MmMyLCAweDkyZmFhNTk0LCAweGVjYmEzMjBhLCAweGI5Zjk5NTc1LAotCTB4YjAyNzg4NjEsIDB4OWY4OWZiZTcsIDB4Y2I2ZDM3Y2YsIDB4MWZiZDQzNGYsIDB4YzRmZjQ1NGMsIDB4YWI0ZGFjZjIsCi0JMHgxNWQ4MzM0OSwgMHhhZTlmNzVmNiwgMHgxNmEzZDczOCwgMHg5YzhhODcxZSwgMHhlZGU4YTk5NywgMHg2MjNmYTMzZiwKLQkweDllMDBiMmIzLCAweGIzNWM4MDgzLCAweGZkY2YyODUxLCAweDM1NTcyNGFjLCAweDk3OGM1YTg4LCAweGY5YmFmMjRkLAotCTB4ZmZiMWFjMzksIDB4YWRiZTYyZDMsIDB4ZGQ3MWU1N2YsIDB4ZTMwN2FjMDAsIDB4ZTFjN2RkMjYsIDB4ZGQxNmNhNzYsCi0JMHgwZGU5MGUzNSwgMHg5YTcxYTMxNywgMHhlYWQxOTEwNywgMHhlZDI5OGYxYywgMHgzN2JmZTgyOSwgMHg4ZTdlZmI0NCwKLQkweDNmZTNkMWY0LCAweDM1YjJiZWZhLCAweGJhNGM5M2VkLCAweDUyZjYzNjk3LCAweDE4ZjdkZDA1LCAweDgwZmJhMzYzLAotCTB4ZDhiODg4NzcsIDB4MmUzYzQ1MWQsIDB4MDcxZTg3NzYsIDB4MDcxMTFmMWIsIDB4YjBjNzg4OGIsIDB4YzVjNzNkZjEsCi0JMHg5OGNjYmQ3NCwgMHhlNGY5YzE2NiwgMHhkN2Q0ZmZiMiwgMHg1ZDE4ZjE0ZiwgMHhhYmIzNzYwZiwgMHg4YTM2OTBiMCwKLQkweDZlMjliYjU3LCAweGM5OWYxOWQxLCAweDRjZjhmMmI3LCAweGQ1YzUzMjQ5LCAweGVlNGY0MmFkLCAweGE0ZmQ3MmYyLAotCTB4MGU1ODlmYmYsIDB4M2VjMzE4NWIsIDB4MGQzMmNlYzIsIDB4MDBkNTA4ZmIsIDB4MzI0ZWE4MGYsIDB4ZDFiODFmYjQsCi0JMHgwYjRmYTg2ZCwgMHgzM2VhMThlNCwgMHg5YzAzMzRlYSwgMHg2ODY0NTBkNSwgMHhjN2JmNjgzZiwgMHg0YjA2ZTcwMCwKLQkweDFjODdlZDBkLCAweGExZTAxYWY1LCAweGY2ODZlNTRkLCAweDg2N2Q5YmMzLCAweDBhZDBmY2ZhLCAweGQ2ODhmZDQzLAotCTB4YjIzYzAzNmEsIDB4ZmRhMWEzNmQsIDB4ODYwMzBmZTgsIDB4NzVlZDMxZmEsIDB4MTc3MWZhODYsIDB4ODRmMDBjMWIsCi0JMHhmNjg2ZmQ4ZSwgMHgxYTBmNWRiNywgMHgxZmIyMjdlYSwgMHhlZDhiZWExYiwgMHg5M2MwMzMzZiwgMHhkYTE4NWZkNSwKLQkweGQzZWMyNTNmLCAweDg2MmQ0OWVkLCAweDVjNDQwN2U3LCAweGE0ZmJhYTYyLCAweDM5ZTlmZGUxLCAweDUzZjAwYzY3LAotCTB4ODc5NDZmNDgsIDB4ODc5MjU2ZjksIDB4Zjc4M2Y1OTYsIDB4MDdmZDAwNTUsIDB4MTg2YjM3YWMsIDB4ZmRhOTk5ZjMsCi0JMHhhYjJmZDBkNiwgMHg2ZGZjNDdlZSwgMHg1MmNmZTI4ZCwgMHg5NDdjYjZhNCwgMHhlZGNjYTdkYiwgMHg2ZDNlNTg2OSwKLQkweDdkYzE2ZjcyLCAweDg5ZjhjNjZmLCAweDJhY2VmNjE0LCAweGNiMDViODU5LCAweDliMzYzMzQxLCAweDlmNDBkYzEzLAotCTB4YTBiNzA3YjksIDB4NjhhOTBjOTgsIDB4MWUwMGJiMzEsIDB4MTZlY2U0YmEsIDB4OGQ2MWQyMTcsIDB4ZmM0NDRhNDksCi0JMHhjMWFiNDg2ZiwgMHg4OWE2YzQ3MiwgMHg4ZmQ0MTI1MiwgMHg4MzU4NWRhYywgMHhmZDcxNzU3YSwgMHg2MWNiODU5OSwKLQkweGQ4MzdhMzVlLCAweGEwOWRjZDg5LCAweDNlMzBkYTBiLCAweDZmODg3YjI2LCAweGUyOWIwMDM3LCAweDhjOGMzNjNhLAotCTB4NWRiYmZjYTYsIDB4MzcxOTE1NjMsIDB4YmE3NmJiMzMsIDB4Yjg2ZTMxNmEsIDB4MWQ0MTY3NmIsIDB4YWZjMGRiOTYsCi0JMHhhYzYyMGUwZiwgMHgyYzdhZmMwZSwgMHgxZjVmODI3NywgMHgzODZlODU4NCwgMHg5NDU4ODdmMywgMHhhOWUwNzU1MywKLQkweGRmZDczYzI0LCAweGNkNTNlOTNlLCAweGZiMGFlMWFjLCAweGUzMDEzZGNkLCAweDhiNDQyN2Q2LCAweDczN2VjN2JjLAotCTB4N2Y0MjY2MjcsIDB4MGYwMGFiMjgsIDB4ZGNmYTcxZjgsIDB4YmUxZGQyODAsIDB4MmEzYmM0MzYsIDB4MzcyYTE3MDcsCi0JMHhkN2JmYTFhNCwgMHhjMGMwZGZhZCwgMHhjM2UyMjdiOSwgMHhhMjc4MDVmYSwgMHhmNWZhNmRmYywgMHg3ODVmYjA3OCwKLQkweGMzZGU2M2RlLCAweDlmNmUxY2U0LCAweGY1OWFlNDA3LCAweGQ3Y2EwMjNjLCAweDk0M2EyZWUyLCAweDgwYzQ5N2UwLAotCTB4ZDMxZmFiOWUsIDB4ZjgwZTViZWEsIDB4MTM2YWQ1OTUsIDB4ZjcxNjM3ZGQsIDB4NGRhNDMwNTYsIDB4NWYxYmUwNzEsCi0JMHg3MDBmMTZkZiwgMHg2NGVmNzg5MiwgMHg4ZTBlNmY5ZSwgMHg3MmUzODBhYiwgMHg5MjdmOGMyZSwgMHhjNjFjMDA5NiwKLQkweGJmMDBmYjFmLCAweGYzNWQyY2U3LCAweDBlNjdkY2IxLCAweDJjMmZhMGM4LCAweDA2OWE2NWM1LCAweDIwYjkzY2UzLAotCTB4ZmI5ZDM2OWEsIDB4MjJmZjQ2YWMsIDB4ZmM5ZGU0NGIsIDB4ZmJjYzQ3M2MsIDB4ZmQwZDFjYzYsIDB4ZjU4YjlmYTIsCi0JMHg4ZGY3ZWUzYywgMHhmZDgyZDhmZSwgMHg3OTMyYTBhZiwgMHg0MGY5ODg0OSwgMHg1NzlhMjljZiwgMHhjYjBhZDRjMywKLQkweDhjZGEzZmQ3LCAweDA3YzA0ZWY3LCAweDhhM2I0MjZhLCAweGY5ODczN2NmLCAweGI4NzMyYjFiLCAweDVhZjk2MjVmLAotCTB4YTViYWY4YTIsIDB4ODVjNWFiYzYsIDB4NGM5MTZmOGQsIDB4NGZlZDNkZDUsIDB4MTA2NWUyMzcsIDB4NTE4NmFmN2MsCi0JMHg0OWY4ZTViZCwgMHhhYzlmNGZiYSwgMHg1Mjk2OTgzNSwgMHhlNzg2MjEzZiwgMHgzZjg4NGEyMSwgMHg0ZDA1YTdlZiwKLQkweDkyM2UwMDRiLCAweGZmN2MzNmUzLCAweDk4MTJkZmExLCAweDRmYmM3ODdmLCAweGJlNjEzNmFlLCAweDZhYTZlMjQyLAotCTB4NTEyMWUyMTMsIDB4YmU3ODZhZjUsIDB4YzM1ZWRjYzgsIDB4YzZlMjc1ZjksIDB4MWUzZmEzYjUsIDB4NmFmNmYzODEsCi0JMHg5OTYxMDc5OCwgMHhjODdkZjNhZSwgMHg5Y2I1NDQ4ZSwgMHg3MDMyNjJkNywgMHhlYTVlZTJkZCwgMHgxMzE2Yjc1NSwKLQkweGY0M2FjM2RmLCAweGU3ZTc2OTUyLCAweDNiZDViZDViLCAweGE2YTlkZTBiLCAweGM1MDJkN2JjLCAweDRmNTg0NzhkLAotCTB4MDdlNTJiZTUsIDB4MjNiM2UwN2IsIDB4YTkyZmRjMzksIDB4YTNlNzFhNzcsIDB4YzIxN2U3ZTgsIDB4MTk1NTVjNmUsCi0JMHg2ZjQyNWJiNywgMHg2MWNiMWZkYywgMHhmM2ZiOWZiZCwgMHhjZGQ5MTIwYiwgMHg0NGRmYmJlNiwgMHg1YzNhYjFlNywKLQkweGRlMjBlMzBmLCAweGQ4YjQ2ZmVhLCAweDk4ZjU2ZjExLCAweDhiZjY0MTY3LCAweGZhN2FkZDkxLCAweDc3MDczOTg3LAotCTB4NGZmM2JhOWEsIDB4ODkwMDM5MzcsIDB4YmU0MDI5OGIsIDB4MDFhYzFiM2MsIDB4YWRmMjM5ZmMsIDB4Y2E2OWZhMWEsCi0JMHhlODRjY2I4MywgMHg2YWIxMjQwYiwgMHg0NjUyMTg0YSwgMHhjM2NhYjQ5NiwgMHg3MmJmMzI2ZSwgMHhmYTI3ZmYyMywKLQkweDY0YzFmMjhjLCAweDM3ZGQzMjVmLCAweGZkZDU3NDEwLCAweDc0NzRlZTgyLCAweGRlMjA2NjI3LCAweGU1NzllNWRmLAotCTB4ODlkY2QzZWIsIDB4NWY5ZDQ3NDgsIDB4NjNmYzlmZDcsIDB4MGU4YzJmOTQsIDB4MmU3ZTA4MWYsIDB4Y2ExMjBkNjIsCi0JMHg0NGQ2NThlYiwgMHg0NmQ2NzhlNSwgMHgwNzU4NzdlNSwgMHhjYWE2MWU5NSwgMHgxYTYyNGU1OCwgMHg0YmNjMjU5NSwKLQkweDRkNTYxNGU1LCAweGEwNmIyOTY1LCAweGEyNmIxYTcyLCAweGEzNmIwNjcyLCAweDU0NTNmNjEyLCAweGZiNGE5OTdhLAotCTB4NTdlMGQ5YmUsIDB4Nzk5NzM5NjAsIDB4YWFjNzljYTksIDB4N2M4MGJjYTksIDB4NjcyZGY4MGUsIDB4Y2RkZjA0MGQsCi0JMHgwNjZjYTg5YSwgMHg4NDFlZTAzZCwgMHg5NTNiMDk3MSwgMHhjNTllODFhZiwgMHgxMjdmMGRmMiwgMHg5YmJmMjE5NSwKLQkweDk3MTg2ZGI5LCAweDg0ZjJhMWM4LCAweDZkZjJhMzVmLCAweGFkOTUxMTdmLCAweDdiYjUwZjdlLCAweGU1NGE1ZmM3LAotCTB4Y2E5N2JmMjksIDB4MmE3MmZlZDMsIDB4NmEzZWZjZGIsIDB4MDU3ZjllZjcsIDB4YWJmODFmOTUsIDB4ZmYzN2ZjYTksCi0JMHhmNDNmMmE0NiwgMHg3N2ZjYTgwNywgMHg1OTk1MWQ3ZiwgMHgwNmZiNDY1NiwgMHg5ZmNhMTM5NiwgMHgzOTQ4ZjQwZCwKLQkweDgxYjhmNTZmLCAweDFjYjkwNWFlLCAweGU2M2RjNzhmLCAweGE0NzhkYzg0LCAweGZlMzBjY2E3LCAweDI3MWM5NGFhLAotCTB4NjZkYzUxMjYsIDB4ZTc1N2JmYmEsIDB4YTMxNmM2M2UsIDB4ZmRjZDNlM2UsIDB4ODNhMjQ3NDgsIDB4ZTFhNTU0ZmMsCi0JMHhjOGJjYzMwNCwgMHhkNGJiNTM2NiwgMHhjZjZiNjgwNywgMHhlN2I1Y2ZmNSwgMHg4ZDdmMWQ4MiwgMHgxMGQxZjZkNSwKLQkweDA3NjNkZGFlLCAweGE1YjRmNDdiLCAweDUwNDdmYWFkLCAweGYzNzhmZDJmLCAweGNlZDgzYjVjLCAweDNlZjc4ZWIxLAotCTB4NTRjMzk2N2IsIDB4YWIwNGU2M2YsIDB4ZTY3NjAxNTEsIDB4NTc4M2RmNmUsIDB4YTgxZTcwYjIsIDB4YmM3ZTkzZjcsCi0JMHg0Y2U2ZWU2MywgMHgyN2Q3Mjc5YywgMHg1MDBkNzdiMCwgMHg4NTNhZDVmZSwgMHgxYmYyYWZmMiwgMHhhMWEzZTU4ZSwKLQkweDE0YWQ1MzFkLCAweDZiMGJkZGEwLCAweGRlOGFmMTQ3LCAweGViZDY0NWRhLCAweGU5NTkzZGVmLCAweGY1MGYxMDkyLAotCTB4MDFlZGEwN2YsIDB4ZTUwOGM5NGIsIDB4YmMyYzVjNjMsIDB4MWJiN2YzNWYsIDB4MTkzNzQ5OWYsIDB4ZTk5ZGJjM2YsCi0JMHhjYzlkZmQyNiwgMHhmZWU2YTRmMywgMHg5MWU3YzA3ZiwgMHhmYWY5NmRmYywgMHgzYmU4Y2ZmOCwgMHgwYTIzYWMxZiwKLQkweDk2MzFiYmU1LCAweGYwMGU5ZmViLCAweDU1ZmY3MTliLCAweGNkZmFlMDJmLCAweDM3NDdlNGU5LCAweGRmNzM3OWVhLAotCTB4MzFiZWE5OTMsIDB4OGFkMmJiNWEsIDB4OGE0Y2U2ZjAsIDB4N2FjN2Q0ODcsIDB4ZmRiMTczYTIsIDB4NDNkMjc0ZDYsCi0JMHhlNTE4N2QyOSwgMHhkZWQyZWRiZCwgMHg3MjYxZGQ1NiwgMHhlYjk3MzUzZiwgMHgzNWMyNjU1ZCwgMHg4YmVhMzE3NSwKLQkweDhmMGNjOWVmLCAweGVmN2UwN2RhLCAweDAxZGJkNjgzLCAweDY2YWRlZTZmLCAweGNjNTI5ZWZhLCAweGQxNGEwZjg0LAotCTB4YzkzNzA0MmUsIDB4ZjNhMTI0YTMsIDB4M2EyZmQ1MTgsIDB4NWRiYWZiODIsIDB4MWIzYTM1OWEsIDB4NTExMDdhZTgsCi0JMHg5ZDVmZmU4NywgMHg0YTVmZmU0MiwgMHg3ZTNlNTBkZiwgMHhjY2FiNmE1NywgMHhmNTIyZDdmMywgMHhiZTMxNmVkZCwKLQkweDg2ZDg1MWQ5LCAweDZmOWZhZGVmLCAweGE0YmM2Mzc3LCAweGVmNThmZDM3LCAweGY5ZTNlNDBmLCAweGI3ZGEyYmI3LAotCTB4YWMzYzgxOTAsIDB4N2UzZTdkYzgsIDB4MmUxNTM4MmIsIDB4MWU2YmY3MjcsIDB4MTczNjNkY2MsIDB4OGJkNTQzZWYsCi0JMHhmMWFkZDhiYywgMHg4YWRlZmE2NiwgMHgyODNhZTA1MiwgMHg1OGFiZjU4NSwgMHhiM2IyNmU0MywgMHg2MmM3MjE2NiwKLQkweDUyM2JmNTNkLCAweGZiYjhlZjI4LCAweGQ3ZjY4ZDNjLCAweGMyM2NjMWExLCAweDg4YmQ3NGY0LCAweDM3OGU3NDViLAotCTB4Mjk0MWRmYTIsIDB4ZDhhN2FlMmMsIDB4YTc4ZDFhNDIsIDB4YmM3ZDMzZGIsIDB4ZjFiZGZmOWQsIDB4NGY3Yzg5NzYsCi0JMHgyOGM3M2M3ZCwgMHhkNjFjZmFlMywgMHg0MzlmNWEzNiwgMHg3OGZhNDFmOCwgMHgzZDdkNzBiYiwgMHhlMzdjOGRlNCwKLQkweGYwYmViODc4LCAweGQ3MWI0NmYxLCAweGQxYjViMGU3LCAweGY3MTIxY2ZhLCAweGRiYzczYTZiLCAweGJkNzhmM2Q5LAotCTB4MjIzN2IzOGQsIDB4ZjcyZjRmZmYsIDB4ZGMxM2ZmMGEsIDB4MTgwZTc2NDMsIDB4ZjljNmM1MzQsIDB4MzMwYjY5ZjksCi0JMHg5MmJjMDM5YywgMHgxZmYzZWRjYiwgMHg1OTVmMzhmMiwgMHhjOTdhZTM2ZSwgMHhmZGQyYjJlMiwgMHg4YmFlODlhNCwKLQkweDk1YWY5MWJiLCAweDE3M2E2NjNkLCAweDI2ZGZlMjUzLCAweDNjNGU0YjNmLCAweGE3ZGEyNGM1LCAweGZlN2MyNmIyLAotCTB4MTdiZjg5YjQsIDB4OThmNmIwNDgsIDB4NWZkN2IzNjcsIDB4MmMzMzNhMzQsIDB4NTVhODlkYWUsIDB4NmI2ZjMwOWIsCi0JMHhlMTk1YWJhMiwgMHg2ZjEyODAzOSwgMHhmMTJiZjVhNSwgMHhlYTE0NjBmNiwgMHhkODA5OGQ1ZiwgMHhmZTgzZWMxYSwKLQkweDhiZGY1MGM0LCAweDk3NGYzMGI5LCAweDE1YzVlNWM2LCAweGY5ODgzZDZmLCAweGQwZTU4OTU0LCAweDllM2UxODZmLAotCTB4ZTRjYzdjMTYsIDB4YjBiMmI0ZjYsIDB4NzkxZDQyZmIsIDB4NWNiYTFmMWMsIDB4YzM2ZmNlNDcsIDB4YzY4NzhlNjAsCi0JMHhlYTJhZjA0OSwgMHg4ZTNjMzFjZCwgMHgzZjcwZmE3MywgMHg3YWNjYzdkYSwgMHhmYjgzZGEzNCwgMHgwNjNiZDNmYywKLQkweDczYmMxMDk3LCAweDljMDFlNTJjLCAweDBhNzYzYzNlLCAweGVkNjY2YmVlLCAweGQ4MjY2NjljLCAweDNlMzE1YWM0LAotCTB4ZGRlNzZiMzMsIDB4OTI5ZTdjNjYsIDB4MWRmZTg4YzEsIDB4NWZhNGFkNjcsIDB4MjU1Y2VkNjcsIDB4MTRkM2ZmZGEsCi0JMHgwZTY0NWY2YywgMHgxYWUzMDRmYywgMHhlZDFkMGY0NSwgMHhiMTliNzE4MywgMHg2M2ZhMTc4ZSwgMHhiZWRjZGE3OSwKLQkweDc0NzdiZjAxLCAweDg1N2VjYTg3LCAweDczNzc5YmVlLCAweDdkNGQwMzljLCAweDBiNzQ4ZWQ5LCAweDk3N2VjNWM2LAotCTB4ZTY5N2NmY2IsIDB4ZTc4NThmMzAsIDB4ZWUyOTc4OGQsIDB4ZGI2OGZlMzAsIDB4ZmM4MmJjNzEsIDB4NjI4ZWE2OWQsCi0JMHgzNGY3NmUzYywgMHg5Y2IwMjdhYiwgMHhjODRhZDIxNCwgMHg5ZWY1NmMyZCwgMHg1YjRhNzJjMCwgMHhiYmJhMDk3NSwKLQkweDljMzYxZmE1LCAweGI4NjFiMmMwLCAweGRmODg3N2VmLCAweDJhOGUwZmMzLCAweDQ5YzYwNjc4LCAweDY4ZGNlZWZkLAotCTB4YjdkMjc3ZjQsIDB4YTQxZTRlODQsIDB4ZWU4NWIxYjgsIDB4ZjIyZGVkYjksIDB4ZGUzMDQ5ZDYsIDB4OGVkN2I3NWUsCi0JMHg3YzZmNjg3NiwgMHg2YmY0OTliYSwgMHg1YTBhZjU2YywgMHg4NjY4ODBlNywgMHhmYWFiZGNlYiwgMHg2ZmJmZDBhMiwKLQkweGVmNDZlNzE0LCAweDJjNDczMWY4LCAweDdmMzQ3OWVjLCAweGJmZTA5OWZlLCAweDFlZDdhYWFkLCAweDUyYTA3MjRiLAotCTB4ZmMyMjgzYmUsIDB4NDllNjdhYjQsIDB4M2IyODQzNDIsIDB4MWI4YzQxM2MsIDB4M2Q3MGY1ZWUsIDB4N2VmODUwMWUsCi0JMHgwMzZmOWIxOSwgMHg5OGFlOGViZiwgMHgyOWU4YmI5YSwgMHg3ZjMxYjI2YiwgMHhlYzFiZGMxYSwgMHg1MGVkMTY1NywKLQkweDg4M2ZhMjE3LCAweDA2MTE2ZWQ3LCAweDEzYmZjMWZiLCAweDc0M2RiOGM0LCAweDY3M2EyZTI4LCAweDE3MmZlN2QwLAotCTB4N2M2MTdmNDIsIDB4YWQ5ZmYzODYsIDB4OGZhN2JkNzQsIDB4ZjYxNjBlYWIsIDB4NWVkM2YwNDEsIDB4OWY0ZmVmMWYsCi0JMHhiNzYwZWM2ZiwgMHg3MzFiNWVmOCwgMHg5MjNlNzE5YiwgMHhjM2FjMGY5OCwgMHhiMDlmMzYxYywgMHhjZWJlYjQ3NiwKLQkweDg5MmQzMzc5LCAweDMwZjU5ZmRmLCAweGI5OTZhZjdlLCAweDNiZjViMGU1LCAweDQ0YmI1ZTZkLCAweDIyYWNkMDc2LAotCTB4MzMzNDNhZmYsIDB4Mjg3MDRiZGQsIDB4MDRmYmE3M2YsIDB4MWFjOGViOTEsIDB4ZGY2OWUzY2MsIDB4MDUxZjYxOTcsCi0JMHg3OWE2OTllYiwgMHhmN2U1Y2ExOCwgMHg1NWY5MGY1NSwgMHg3OGU1ODBiMiwgMHhlM2M5ODdlZSwgMHhkODRiMzEyNywKLQkweDQ5ZjhlNTdhLCAweGI0MWE2ZWQ0LCAweGI0ZTdmOGM3LCAweGYyMWEzZWEyLCAweDU0ZDY3NGViLCAweGMxN2RmMmFiLAotCTB4NWY5ODRjODksIDB4ZmM4NjYzMTYsIDB4NGZjMDU5NzQsIDB4OTY1MGJmOTYsIDB4NzFhYmM2ZTYsIDB4ZTgzOTJkMGQsCi0JMHg4Y2IwM2QxNywgMHhkNzZhOGNmMiwgMHhmOWM1NmI0ZiwgMHg2YmFjZTUyNiwgMHhlZjdhODM4OSwgMHgyY2VlOWM1NywKLQkweGZiMGRjNzlmLCAweDc5MGQ5MWVmLCAweDAwMmJjOWNiLCAweGY3NWYzZjBlLCAweDA3ZTA2MTE5LCAweGFmOWQ3YjQzLAotCTB4OGFhOTUzMTQsIDB4Y2ZiOTg0N2UsIDB4MzA1OWRkOGQsIDB4ZWRjOWQ5N2YsIDB4NmNiODc4MzcsIDB4ZjJmMTBmNmUsCi0JMHhmMDI1N2M2ZSwgMHhjNjY3ZDNhZiwgMHhhN2MyNGNlMCwgMHhiM2JjNzBhYywgMHgyNzdlY2QwZSwgMHgxYmYxMTNhNywKLQkweGQ1ZTMwOWZkLCAweDNlNjJkODgwLCAweDE0ODk0ZDdkLCAweDhlYTFmYmM0LCAweDAxMmNmNmNlLCAweGE3NDkxYWU5LAotCTB4ZWVjNzViNzQsIDB4OTU3ZjVjMmMsIDB4MjNkYmYyOTksIDB4YzQ3ZTBhZjEsIDB4NjdjODY5OWQsIDB4MWVhOWUyNmIsCi0JMHgzYWJlNTM5ZSwgMHhmNjc1MjI2NiwgMHgxYjA0ZjUyMywgMHhlZDRkZjFlOSwgMHhkZGMxNjA5ZiwgMHhmOGQ2NGYzYywKLQkweGUwYmUyOTNjLCAweDhhNDI5YzlkLCAweGNjOWM2ODQ3LCAweDBkYWNmYWM2LCAweDhjNjJiYTQ2LCAweGEyNzhmNTA5LAotCTB4YjRhMTgyYzYsIDB4YjRlN2E3NWIsIDB4YTYxMmM2ZjgsIDB4Y2VhYmE3NzQsIDB4N2I3ZDI5NzcsIDB4MTBmMmYzZDYsCi0JMHhlYTAzYjA5MywgMHhmM2Q0MWNiNCwgMHhmZmYyNjYwOSwgMHg4NGU2MDliYywgMHhkNmYwN2RmMCwgMHg3MjVmN2NjMSwKLQkweGU5MGEyYmRiLCAweDRlZGU3NjZmLCAweDUwYjRlZmY3LCAweDEzZjQxZjViLCAweDkzMzM1ZDI3LCAweGE5ZDZmZTdmLAotCTB4ODM0ZDhmNjMsIDB4OTZhZmYyNzIsIDB4YzliYjYxZDQsIDB4YmY0NmVkYjAsIDB4MzcyYmU4NjIsIDB4YmYyNjJjNDYsCi0JMHhlNTE3MmRhNSwgMHgzYTE2NTVmNSwgMHhiMWY2ODJkOSwgMHg4MjcxNDJkNSwgMHg1MzZmOWZjZCwgMHgzNWZkMjEyNywKLQkweDdkM2U3MTQ2LCAweGI5ODMyM2RjLCAweDI1YTVmYTlkLCAweDlhN2QyNWUwLCAweDdlNDZiMzI2LCAweDZiZTM3NjVlLAotCTB4M2UzYzRlOWQsIDB4YjJjNzc5NDQsIDB4YWJkZGFmODksIDB4YmQ5MzU3NTUsIDB4MzY2M2M5NGMsIDB4YWRiN2M3OGEsCi0JMHgyMWJjN2IyNCwgMHhjY2JjYTE5YSwgMHg0MWVlOWI1NiwgMHgxNzY1ZjY3OCwgMHhiMzdmNDMzMywgMHgyMTY1YjczNSwKLQkweDNmMDkxZjllLCAweDU5YWE4ZTczLCAweDY5YTk2MjI2LCAweDNmOWRiOWZjLCAweGU4N2FhYjlmLCAweGMzY2Q1Y2Y5LAotCTB4YmY3YzJiOWYsIDB4NjgxYWE3N2YsIDB4Nzc3ZjQzZjMsIDB4ZWM2ZTcxMmEsIDB4Y2JjZDRlZWYsIDB4YThkYmFmZWIsCi0JMHhmZmVjMTRmZSwgMHg0N2I0ZWZkMCwgMHhlYmQ0NTQwNSwgMHhmY2NkMTcwZCwgMHg0ZDE3Y2U3YywgMHgyOTU1YmVmYywKLQkweGZjZTM3NTY4LCAweDRmNzRjZDBhLCAweGJhMjRmYzBmLCAweGY1NGJiZDVmLCAweDdkZWFmZGQyLCAweDA4OGM5N2NjLAotCTB4MzY3MGI1N2UsIDB4YzZhZmQxZjksIDB4ZDVmZWU5OWIsIDB4ZTUzMzFlYWIsIDB4NjQyYTA1ODEsIDB4ZjA1MjFmN2UsCi0JMHgyOWU1YWJkMSwgMHg4ZTk2N2U3NCwgMHhkZDdhNDRjOCwgMHg2NDNmMjc2MywgMHg2MjQ0MWUyYiwgMHhkYzdlZjJmYiwKLQkweDdmZGNjODVlLCAweDllMmEzZmQ4LCAweDJjNmQzYmRhLCAweGUwZjkxNGFlLCAweGYyZjk0Y2IwLCAweGUzY2YxZmRmLAotCTB4ZjRhMWYyOTgsIDB4YWU2YmZhMjAsIDB4Y2JiY2EzMGEsIDB4M2YzODkzODUsIDB4Mzk0NTRjNjgsIDB4YzQ2OWExOTgsCi0JMHg5ODdiMzVmNywgMHhkYzkzNzY2NiwgMHg1NzQwZmJkMywgMHhjMmFlZTc1YSwgMHgyMmZhNGFmNywgMHgyNGQzNDZiYywKLQkweDdkMDYxODJlLCAweDFlZjg1MzUxLCAweDRjY2Y4M2M3LCAweDBhYmJlZmY5LCAweDQ5YmVmYmM1LCAweDVkN2M3MDg3LAotCTB4ZjkwYjA3Y2UsIDB4Nzc0YWY1ZDQsIDB4M2Y1MWE0M2QsIDB4ZGE0OWQ4OGUsIDB4YzMwNjgwNGUsIDB4ZmJmZjI4MDAsCi0JMHhmNTFjZjBhZCwgMHhmNzRjOWM0MiwgMHhjYTE3MDZjNiwgMHg5NzU4NzUyMSwgMHg3ZThiMjdkYywgMHg5NGY5MGIwNywKLQkweDJjZTUxYThmLCAweDdlMTE5MGViLCAweDdlZWZjODVjLCAweDYyZmI5MjE2LCAweGNlOGMwZGJmLCAweDE4MzdmYWNkLAotCTB4YzdjZWMxZGIsIDB4NTIyYzdhODQsIDB4M2YwYmFmOGUsIDB4ZGQwZjEyMzMsIDB4NzllYmVjZjAsIDB4MGFlYjVkOWQsCi0JMHhiYWQzNjU0NCwgMHg0MjVkN2NjYywgMHg1YjJhNjVkZiwgMHgyYWE2NzllOCwgMHgxNzljNmU2YiwgMHhkNzBmNzg2YiwKLQkweDBjOTBmZmRmLCAweGFiZDAyYTBlLCAweGUzMWIzY2QwLCAweDMyMDIzMzNjLCAweGFjOTliYmE5LCAweDM3YzVmNDhkLAotCTB4ODhhYjdiYWQsIDB4MzNhZTQ1NzMsIDB4MDZkYjdkNzIsIDB4NjRiZjVjNGIsIDB4MzdlNGJjZjgsIDB4MzdlNGNiMjUsCi0JMHg2MzAzZDY1OSwgMHhlNTZiYzcwYywgMHgyM2I3OWRkZSwgMHhlZWNlODc1ZCwgMHg1OWRhMDQzMywgMHg2MmE1NTgxZiwKLQkweDdhMTU1YTVjLCAweGM0YjVmMmM5LCAweDNiNjFlYmY5LCAweDcxMjVhYmYxLCAweDdkZjg0ZTQ2LCAweDI0ZGE5MTliLAotCTB4NTFjNTA4NzUsIDB4ODQxYzllYWYsIDB4MmQ3N2M3NzEsIDB4M2Q0OGZmODQsIDB4YzcwODY2MzcsIDB4NjM3Njk4ZjMsCi0JMHg4YmI4ZTQ1ZSwgMHg3Yzc5MTFkMSwgMHhkYmM4YmNjNiwgMHhjODhiZjdhZSwgMHhjODg4Y2JlMywgMHhhODYyMWJlMywKLQkweDg4OGVhYzlmLCAweDE3MWJlM2M4LCAweDZjNTdjNzkxLCAweDRjZTdhNzgwLCAweDliZTNjODhmLCAweDI4ZWY4MDYzLAotCTB4YmVkMGM3YmEsIDB4NTBkOGIzY2MsIDB4YjU3NGE3M2YsIDB4ZWY0ZWZlYTEsIDB4YWVmODA2ZmQsIDB4ZWQwZDg3ZjIsCi0JMHgwYzZhZmJlNywgMHg3OGFjZjdmNSwgMHhmYTBmNTBjNCwgMHg3M2I4YzdhMiwgMHg4N2FlMTBmMSwgMHg2ZDNjOTM2YiwKLQkweDEwMzA4MWY0LCAweGZlMGY2Zjc4LCAweDFkY2FhNDgwLCAweGQ5YzdmNmUxLCAweDU2YTJmZWNiLCAweDdkMjllM2QwLAotCTB4ZTI0ODEyN2YsIDB4OGYxMTY2NzEsIDB4MTBjNDc3MDUsIDB4OWQ4ZDBkYWYsIDB4NTE3ZGM3NjYsIDB4NDQ0YjRkOWEsCi0JMHhjZDdlY2ViYiwgMHg1ODU4MDZlZCwgMHhjNGU2ZjljMywgMHhkZGE5NGIwNywgMHgzYTc0ZDhmYSwgMHhmYzAyNzk4NywKLQkweGMwZTgxZjZjLCAweDc3Y2YyMGRhLCAweDZmMDAxN2U5LCAweGFiZjc5ZTFjLCAweGY1ZGExMjg1LCAweDc4YTU2ZWJiLAotCTB4NTgzY2U3NmUsIDB4NTU3N2Y1MjksIDB4ZjNlYTJmOWMsIDB4NDNmMThmZGMsIDB4ZWNkYmVlMWIsIDB4NTRjZjMyNTQsCi0JMHhlMjhlM2YxZSwgMHhlOTc1MWVlZCwgMHhjMzFhOTZlNywgMHhkNjQ1MWQ3ZSwgMHgxNjRiZTUwMCwgMHgzMGFjNWIwNiwKLQkweDhmZDA1YWRmLCAweDk3ODQ5YWY4LCAweDU1ZGRhMWVjLCAweDNkZTliYjQ1LCAweDEyN2YxYWIwLCAweDk2NTIwZmRkLAotCTB4ZTgxNjAyODQsIDB4YmYyN2VhYjIsIDB4ZjBlM2UxZjgsIDB4MTQ2M2UyYmUsIDB4MjdmODc4YTcsIDB4N2UyMWZjYmYsCi0JMHhjNDNmYzQwNywgMHhjODcxNzQ0ZCwgMHhlZWZiY2YxYywgMHg4NzRiYTdmZCwgMHhiYWM2NWY1MSwgMHg2NDYyNWVlOCwKLQkweDliN2RlMjdkLCAweDI2ZWI3YWJlLCAweDNjMTZmYmY1LCAweDM3YTVkYmY4LCAweDhkZGVmZjdiLCAweGQ1ODZiNzY3LAotCTB4NTk3ZjM2ZjcsIDB4NjEzY2M3ZTksIDB4MzU2YTkwN2MsIDB4Y2JkNWMzZGUsIDB4YWFiZTBiZWYsIDB4ZjhhNTZiMWEsCi0JMHg1N2M5MmNlNSwgMHhlNWZjZjI4ZiwgMHg3MDdhZmZkOCwgMHg0NWY3YmMzYiwgMHg3MTdiYjVjOSwgMHhiZmNmMDc3ZiwKLQkweDFkYTFjZjhmLCAweDk0OGJmNWUxLCAweDNjZjhhOTJiLCAweGZmZjgwODY1LCAweDU4YTM2NzY4LCAweDZmN2NmOThmLAotCTB4OGI3ZWUxMGMsIDB4NDFkMTU4OWMsIDB4MmIwNGYzZmIsIDB4ZjY1Yzg3YzUsIDB4ZWUzZmEzZjksIDB4NDQ3MzU4Y2IsCi0JMHhmNzFlYTBiYywgMHhmN2E3NjBlNSwgMHgxZTg4Zjg4YSwgMHhmNDQxN2YyZiwgMHg5Mjk0NDQ3MywgMHg0MWNlOWYzYSwKLQkweGY3NDAzZDk4LCAweGIxN2Y3NTYyLCAweDhiMzgzYzliLCAweDY1MWJlZTE4LCAweGFlMTBiZTQ1LCAweGFjMTI1YjE3LAotCTB4NTQ5MDFmMTQsIDB4NGI3N2U1MmIsIDB4MmVmYTI4ZWEsIDB4N2QxYjA0YTIsIDB4Mjg3MjQ3M2MsIDB4NjhjZmI0NmQsCi0JMHhmMTQ1MTg0OSwgMHg4NjM0MjkwMCwgMHgxMjhhMGNlMiwgMHg0MGRlZmVhMiwgMHg3ZWUwMjRiYSwgMHg3N2RmYjhjNiwKLQkweDVkNjgyYmQ5LCAweDNhY2ZmN2JkLCAweGViNDlmNzlmLCAweDc5ODg5YzYxLCAweDFmNTg3OGUwLCAweGZjNDFjZTM5LAotCTB4OWJkYTFjMmUsIDB4ZTMxZWY2NjUsIDB4NGM4NmQ3MWIsIDB4NGFmNDhlM2MsIDB4YmVlZmI1YjMsIDB4ZmRmNWU1MWQsCi0JMHg1ZWIyZjU5ZSwgMHgzMDdmOWU2MiwgMHg4NjY3M2YwYywgMHg2MDVmMTNhNCwgMHg2YzMwN2Y3ZSwgMHgwZmUzY2M1YywKLQkweGU4MDM4MTg3LCAweDYwYzEwNzllLCAweDQyZDgwNjZhLCAweGI5Zjg4MzUxLCAweDZmNTc4ZDA1LCAweDNmYzg5MmQ1LAotCTB4NzQ4N2YzMDQsIDB4ZTc5MDhkZmMsIDB4NjFhZjAyM2YsIDB4YzNlYzU3YjksIDB4NjM1YzgzZjcsIDB4MjU1Zjg0ZjksCi0JMHhjODAwZWQzZiwgMHhmYjRmYzIxZiwgMHhmZDA2NTRkZCwgMHhmYTM2NTQzOSwgMHhlNDNmYWEzNSwgMHg4OGY4MjIyZiwKLQkweDUxZjA0M2RmLCAweGNmOTUyOTdmLCAweGZjZjRiZGZhLCAweGMxMzk3ZjM5LCAweGE4ZmJmNTNmLCAweGEwYWZmMjZjLAotCTB4YWJmODJmZTcsIDB4YmZjOTdlMDksIDB4YTM5ZmUwOTEsIDB4ZTc4NTk4NWYsIDB4YmU1NDc1MTMsIDB4ZmFhMDZmZWEsCi0JMHgwOWZiZmNkNywgMHhhNDFmYzM3ZSwgMHg0YTNmZTQzMiwgMHg5YmY5OGZjZiwgMHg2ZmUxM2UwOCwgMHg3ZjZkZjgyNiwKLQkweDdmNTZlMDg4LCAweGY4ZWY5NTJiLCAweDI5ZjllOGRiLCAweGEzMDQ4N2ZmLCAweDQ1ZmVlMjNhLCAweGUwM2YxOWQyLAotCTB4ZDk4MTcxMjUsIDB4ZTI1ZTdlOGQsIDB4NGJiMzQ1ODIsIDB4MmU1N2RlMDAsIDB4ZDc2MTdkZDMsIDB4NDFkMmY5N2MsCi0JMHgzNDI3OGJlMCwgMHhmYjdiZjY5OSwgMHhlZTI5OTg1NiwgMHhmYjk1ZmJhMywgMHgxNmM3ZDYyYSwgMHhhYTVjZmQ1MywKLQkweDI2OGQ0ODZmLCAweDEyZmY2Y2JmLCAweDU3MWZkZDJiLCAweDk2N2Y3MjU2LCAweGJkYTg1NTJkLCAweGZkNTMyZjkyLAotCTB4OTJlNjJiMTMsIDB4NTM4ZjU4ZGYsIDB4ZDkyYWU3MDAsIDB4MTkzMWQ4MWMsIDB4OTMzMjJkZGIsIDB4MTExZmRlZmUsCi0JMHhlM2NhNGRkNywgMHg0ZjI5M2Y3NiwgMHg4ZmFmZjdlNiwgMHhjZmMyMDU0NiwgMHg2MjliMmIyOSwgMHg3MzU1NzAwZCwKLQkweDMwZTNlMDcyLCAweGM2MmQ1OWJlLCAweDFjOTkxYjYxLCAweGNmYzdkZGZlLCAweGFmMzA3ZmY3LCAweDkwZjlkNjA0LAotCTB4MDNjYTRiZTQsIDB4ZTA3MTdjN2MsIDB4OTlkODNjZGMsIDB4YzNiZGIzMzIsIDB4Y2NlNGYyOGEsIDB4OGQ0ZWQ5ZTgsCi0JMHhlYmNmZDNjZiwgMHhmZTIyNGU5MiwgMHhlMTMyNjlmNiwgMHg2MWI2OWY2ZiwgMHgyZmVlMjY1YSwgMHhkZGY0YzgxNiwKLQkweGYyMDVjNDhjLCAweGU5OWZiODU3LCAweGZiYTY1ZjM3LCAweDk5NGFjYWE0LCAweDgxNmM4MWUyLCAweDAzNjNlMDU5LAotCTB4ZmNkZmJiYWQsIDB4MGVhZjU0YjksIDB4NzQ3MTQ1M2MsIDB4NmQxM2NhZDcsIDB4MDE2ZmQxOTMsIDB4MWQxMTY1N2MsCi0JMHgzOWUyYzUwZSwgMHhiYjg4YjI2ZSwgMHhhNjhmOGZlZSwgMHhmOWM4YjZiYywgMHhmMTdiZmY4YywgMHgzM2YwMDliMywKLQkweDhjZmM0N2FhLCAweDRmM2YwOWVmLCAweGZkZTNmYjg4LCAweDIyMjI3N2M0LCAweDk3N2ZhNGYxLCAweDdkZjEwOWY1LAotCTB4MWUwNmMwZjIsIDB4Mzc2YzhmYmYsIDB4NzMxZmNjNDcsIDB4MmUzYmU4Y2UsIDB4OGZlOTMyOTUsIDB4MjNiODJjMDMsCi0JMHhmOTk4ZTMxYiwgMHg3ZTQzZGQzMiwgMHhiM2FhZDI3YywgMHgzZjNlNjEwNywgMHg5MWRkZjNjOCwgMHgyYzlmZWQwNywKLQkweDhlYTE4ZjkxLCAweGZkZTUyYjhkLCAweDFmMjM1YzBmLCAweDdlMDJiZTQxLCAweGRhMDQ3OTVkLCAweGU5M2JiZjZkLAotCTB4N2Q5NDM2NGMsIDB4OGMxNmVlMDMsIDB4MWY0NjNhYmYsIDB4Zjk4OWY2NDgsIDB4MTYxNzY0ZjYsIDB4ODBmYmJmMGEsCi0JMHgyYjRmYzQ0NywgMHg2NTFhM2RmOSwgMHgxM2RjOWVlNSwgMHgzODA1ZGM3YywgMHhiNWY1MmJhZSwgMHgwMzA5ZjhhOSwKLQkweDkzMGVkY2Y3LCAweGY5N2VjYTA1LCAweGNmMWMzYWYyLCAweDQ5ZDI0Zjc2LCAweGUwMjEyZjFjLCAweGM3Y2JjN2QxLAotCTB4OWUyZGJlZjEsIDB4OTI1YmJmNTIsIDB4ZjFiZGQzZDgsIDB4MzdlMWY0ZGUsIDB4NzlmNWMxZTksIDB4N2Y1MTNlZTIsCi0JMHhlMGY1MWZkNiwgMHg4YTc2OTZlMywgMHg3MGNlMDc1MywgMHgzOGI0YzgzZCwgMHgzOTE3YmZiYSwgMHgyN2Y5NmY0ZSwKLQkweDY0OWY4MTAxLCAweDg4NmYzZjFiLCAweGU3NDc2ZjdjLCAweGYwMjAyNWJlLCAweGYyOGNhZmQ4LCAweGUyY2IyNmI0LAotCTB4ZjY4Y2ZhYmIsIDB4NDYyN2ViZGIsIDB4NzI2ZjliYWIsIDB4ZDQwM2YzMWUsIDB4MWVhZmEwYmYsIDB4OWZhMjYzY2UsCi0JMHgxZmJjYTk5NCwgMHgwMjY3ZWYzMywgMHg0NGYwNDc1YiwgMHhlNGRjMGQ0NSwgMHhlODhmNjAxYywgMHgwMGZkOGZjNywKLQkweDdiYmYxZjdlLCAweDE4YWRlZWM1LCAweDQyZDc3Y2I3LCAweGM5MGU3NGI5LCAweGNlZjQ5YmI3LCAweDFmZGEyNWFmLAotCTB4MmIwZGNjYjksIDB4MTdmNTg3OGYsIDB4OWZhOTdjMTQsIDB4NDhkZTYwNDMsIDB4NzlkNzU2NWUsIDB4ZWMwNTUyNDQsCi0JMHhhZGYwYzI5MSwgMHg4OGI4ZjdiZiwgMHhlMzc5M2ZhMywgMHg5YmNhNThhMSwgMHg4NTEwZGZjOCwgMHg2NjNlZGZmZSwKLQkweDJjNTAzZTI3LCAweDBjM2YzNTIxLCAweDdmODk4YTdmLCAweGZlNzIyN2NmLCAweDdhYWNmMmM3LCAweDcxMzI4MDVlLAotCTB4MzIyMzllMTQsIDB4ZjUxOWNmN2UsIDB4NzVmYmNjMjgsIDB4Yjc3ZjkzOWYsIDB4ZDMwN2MxNjksIDB4ZmUzYzAzODcsCi0JMHgwZmU3NGM5YSwgMHhmY2QxYTVhZSwgMHhjYzFmZjZmZSwgMHg4NmY0Njc5NCwgMHg2NzdlMTc4OCwgMHg2M2RkMDk2ZCwKLQkweGY3MTJjMjRiLCAweDA1NGZiOGE3LCAweGE2MjZmYzc4LCAweDlmN2RmMDg1LCAweDA5YzFmYjQyLCAweGUxNzNlNWQ3LAotCTB4MGFiMjA5N2UsIDB4MjJlZTM3ZjYsIDB4YjhmMmY4YTMsIDB4NmY3MGQ5MGUsIDB4NjM0NWNjNmQsIDB4ODRiZmEwN2IsCi0JMHg3NmE0ZGFmYiwgMHhhMTQ0YmI2MywgMHgxNTIzNWRmZiwgMHg3ZThmZmVmYSwgMHhkN2Y1ZDA2ZiwgMHg2NGM1Yjk3ZCwKLQkweGZmNDlhMjI3LCAweDI0YzlhOTNmLCAweDJhMTY0ZmNmLCAweDc2ZGRiMTA3LCAweGZiODRiYjNiLCAweGJiN2NjNzQ0LAotCTB4YzVhMDdhOGEsIDB4NTU3YTRkMTUsIDB4ZmU0ZDExMTksIDB4NjM5NGY2ZjMsIDB4OWZjMDc2ZjYsIDB4MmEwN2U0NmQsCi0JMHg2YzAzMmJmYSwgMHhiYjE4ODNiZSwgMHhhYjczZWRmZSwgMHgyMThkMjVlNywgMHg1ZGY1ZGUzZCwgMHgzYmIwMjJlMywKLQkweGYyODJmOTc4LCAweDlkZWNkNjk5LCAweDE1Nzk4OTljLCAweGQ4ZWVmYTY2LCAweDdhYjczYzdmLCAweDIyNzdmODZmLAotCTB4MzA3NTI0ZDMsIDB4ODRlYzU3Y2YsIDB4ZTBkZmExNTcsIDB4NDE4ZmI5YzAsIDB4MzNlYTA2M2YsIDB4ZDdjNjFjZjAsCi0JMHgyOTIxN2E4ZSwgMHhmOTA1YmFiZSwgMHhiNjM5NWVhYSwgMHg4NWQwZTI4MiwgMHgyZDU3YTRmMSwgMHhlYTEwZWFiZSwKLQkweGMwYWQ3YTg5LCAweGJhZGYyZTFlLCAweGRjYWFkYzljLCAweGQ1Y2UyOTNmLCAweGJmZmU0OWJlLCAweGU0ZGVkZmE5LAotCTB4MmU1Yzk1ZmMsIDB4MDFjNWJkNzcsIDB4Yjc3ZTdkZjQsIDB4NWViZWM0ZmUsIDB4ZGZkZmMyMWUsIDB4ZTA3OWY0MmEsCi0JMHhiZDQ3YjVhYywgMHhkNzI4NjZiZiwgMHhlZjIyNDUxNywgMHgyOTdjNTY2MSwgMHg1NjdlN2Y3ZCwgMHgzY2M2NWRhMCwKLQkweDJlNTBjZjUwLCAweDFjMTJmYjQ3LCAweDJmYjBjZjk0LCAweDdlMzA4NThkLCAweGVkY2Y5ODFlLCAweGUyMGFkOTAzLAotCTB4NTM4YTc0YTcsIDB4ZDRkYTliZDUsIDB4MGE0M2QyMDAsIDB4MmUyZTkxYjksIDB4ZWZlMTg3ZDgsIDB4NmRkZmQ0NzgsCi0JMHhmOTc3ZDIwZSwgMHhmYzI4YmU4MiwgMHg2M2Y0MWUzZSwgMHg4NTI4MTdkOCwgMHhlNGQ1ZTJkZCwgMHg2ODcxZWJiZiwKLQkweDdlMDA4ZWZjLCAweDgyYjY4N2ZmLCAweGNhM2E4MmUwLCAweDliOWRmNGNkLCAweDc0MjZmN2M4LCAweGFlZGJlMTE4LAotCTB4Y2M4OWUxMWIsIDB4NjI5YWJkZjgsIDB4YWM5ZTExYmIsIDB4NDNhMWUxMWEsIDB4ZjZlMmJlZjksIDB4YTlmM2UzMjQsCi0JMHg2ZmRjMjM2ZSwgMHg5OTk0NjM3ZSwgMHg3OGEwZmZkZiwgMHgwYzE0N2U5NSwgMHhiOGMwM2VmZiwgMHg2NDAxN2Y1OCwKLQkweDYwZjdlMjBjLCAweDIxYWZiN2ZiLCAweGU4ZmY1MDdkLCAweDdlZmY5MjBjLCAweGNhZTIyMjZiLCAweDgxOTViMDBjLAotCTB4ZjNlMzZhNzEsIDB4MmQ4NTljYzQsIDB4YWFlZDdlOTgsIDB4ODdiZTIzOTAsIDB4MmNlNzQ2ZDIsIDB4NzNjMzBmODAsCi0JMHhmMjBiN2NmYywgMHg5ZTZjZTFmZiwgMHhkYzMwZDlmZiwgMHhjOGU4NzkzNywgMHhkZTFjNzlhZSwgMHhjZmNlOWIzMywKLQkweDAzNWY1NjJjLCAweDI4Yzc0ZWZkLCAweDM2ZDJlYzk5LCAweDliNzVkMzk5LCAweDM1YmE3MmE2LCAweDU3NzlkMzI3LAotCTB4NjBiNDRhYTIsIDB4NWQ1ZjM2NDUsIDB4NDcyM2M2MWEsIDB4YzkxZTI5OWEsIDB4M2RmOWUyMWEsIDB4ZDNmYWU3ZjQsCi0JMHgyYzYyNDFmOSwgMHhlNzczNDM5ZiwgMHhmYTQ3ZGJmZSwgMHg0MGQ4OWQ5NywgMHgyYWZiMDNlNywgMHg3ODhlZmE2NCwKLQkweGY5NDAzZGIyLCAweDJiY2ViMDUzLCAweGNlOTYzODg2LCAweDM5ZjlmM2I3LCAweDUwZDdhYzBhLCAweDYyYmNlYjBmLAotCTB4MTAxZjk3ZTQsIDB4YTJmNWY0OWQsIDB4ZjBjMjA2YmMsIDB4MDgxYTcyODAsIDB4YmU2OTliOGYsIDB4OTQwNzg4ZTUsCi0JMHg1MWU3ZjBkNywgMHhiYTE2ZWQ5OSwgMHhkM2Q2MmQ0ZiwgMHg3YWVhZGM5YiwgMHg1NzljNDhhMywgMHhkNzZjNzllYiwKLQkweDFlN2E5OGM0LCAweGZmOTEwNmRiLCAweGUyMzRlY2RhLCAweDI0Zjk1YWUxLCAweDZiNWMzMzhhLCAweGViZWQxMzliLAotCTB4MmY0MThlNDksIDB4MmY1YzZjMDQsIDB4ZGUxZGI5NjAsIDB4N2JkZmI5NDMsIDB4MWM1NGUxNjMsIDB4MjA0NGY1MGYsCi0JMHgxNjE0N2JlYywgMHg2ZGZmYTdjMSwgMHhjMjIxYjNiZiwgMHhlZmZiM2YyZiwgMHhmOTE4NmE0NywgMHg5ZTIwOGY5ZCwKLQkweGUzOWMwNzJhLCAweDc3YzVlZGY3LCAweGI2NzgyY2JjLCAweDNlYTVjZjA3LCAweGNiN2FhZjljLCAweGNhZTlhZjFiLAotCTB4YmFlM2I1YmYsIDB4YmZiYzg4YTUsIDB4NWFmODExMmIsIDB4YmZhNWYwMmYsIDB4Mjc0ZDQ1N2YsIDB4MmQ2OTVkM2MsCi0JMHgyNzg2ZjdiNiwgMHgxMzI3ZjQyNiwgMHgzMzJmMTNmYSwgMHhiYjNlMmFjZSwgMHhlYzYzNDEyMSwgMHg5ZmRmZTc5OSwKLQkweDY3MWQwMzI3LCAweDk4NWIzZWFkLCAweGNmOWJmMDBhLCAweGNmYzM5ZWZmLCAweDNmYTk3ZDljLCAweGVjMzYxZDM0LAotCTB4M2RmODc5ZjMsIDB4OWQ4ZjU5OGMsIDB4YTFhMjk2YmQsIDB4ODVkZTI2ZGMsIDB4OGE3MGMzZGYsIDB4YmU3ZDE5NzMsCi0JMHgwOTJmNzhmYSwgMHhmMWI1NTk3ZCwgMHg5MDY3MWUxZSwgMHgzNTc3MjRiZCwgMHgwMWM1MmYyZSwgMHg3MGVmOGNiZSwKLQkweDU1NDJmOWUyLCAweGQxNmI4NzQyLCAweGQ1N2VmNDRkLCAweGZiZjk3YmM2LCAweDBhMzUzZTk4LCAweDVjYjg4OWYzLAotCTB4ZmJmM2Q2Y2QsIDB4ZmRmOThkNGIsIDB4ZDIyYWU3NGUsIDB4NTAxNjM2N2IsIDB4ZDk0NDJmNTEsIDB4ZWViZTc0M2QsCi0JMHgzYTI2ZTYxOSwgMHg3MmI0YzlkYywgMHhjZWVlYmU3ZSwgMHg1YWNjZmE0MiwgMHgzZmQxZWE2ZCwgMHhlN2FhMWQ2YywKLQkweGQ1YmU4NmZiLCAweDJiZGM0Y2I4LCAweGRhMjQ1Mzk4LCAweGM2NWZlM2E5LCAweDdiMzRlZTcxLCAweGYwNWZhMmI2LAotCTB4NDgyY2M2N2YsIDB4Y2Y0MWI3NDAsIDB4NzVkMjFhN2YsIDB4YWRkMGVmNGYsIDB4NzU5Y2ZmZGMsIDB4NDk2ZGM0ZGUsCi0JMHhmZjI3OGYwYywgMHg1NzVmMzg3MSwgMHhlZDAwOWM3OCwgMHhmOTc0NmY0NiwgMHgzYzVkMWJhYywgMHg4OWFkMDcxNCwKLQkweGE4YmE3MGYzLCAweDQ4Y2RjZTFkLCAweGQ3MGVkODk3LCAweGQ3ZGViYzk2LCAweDExM2U4ZGRmLCAweGY4MmFiOGY4LAotCTB4ZTQyYmZkMWUsIDB4OWZjMjZmZDcsIDB4NGYzZDFmNGUsIDB4Y2VlNGM2YWMsIDB4NDBlNjdmMjIsIDB4MTQ3YzQzN2YsCi0JMHhhZjZlMDIzNiwgMHg3NmZlNjdhMywgMHhjODhmN2Q4NywgMHgzOGE1ZTQ5YSwgMHhjYjVlMjU5MywgMHg5YWU2N2NjMSwKLQkweGU2M2Q0OWJmLCAweGUzMGY2Nzc3LCAweDY3NjZmMzdlLCAweGFmMTdkZDM0LCAweGJlZTk1YTcxLCAweDI3NzM4YjVhLAotCTB4YWVjZDNmNDMsIDB4OTRiYzIzNmMsIDB4ZTYxOGViMzgsIDB4YjNhNmQ1ZDEsIDB4MDZlZGZlMjYsIDB4YWQ3MTVlNjMsCi0JMHhlZjVlNmVmMywgMHg5ZGFjYjNlMiwgMHgyZTMxZWJhNiwgMHhiNGU3YjVjZiwgMHg4MTAzYjQxOCwgMHhhZjJlZGZkMywKLQkweGJmZTc2ZTU4LCAweGJkNWJkMjViLCAweGNmMWE2ZTMzLCAweDI5NWE3NjJiLCAweGIxOGE1OGFmLCAweDU3OTRmNzU2LAotCTB4YzdjMTE3ZmMsIDB4NzhiZWI4MmQsIDB4YTc4ZjBmNWMsIDB4YmJiMmViZTksIDB4M2UyM2ZlNzksIDB4ZDU5YTc4YzcsCi0JMHhhZmRmYTNlZCwgMHg5N2ZmZDdkMSwgMHg3YTJlOWNhMSwgMHg5YWJiOWI3YiwgMHhhYzk3ZGVhMSwgMHhhY2Y1MWI5YSwKLQkweDg4NGZiZTI0LCAweDRjMjcyNDc2LCAweGZmZTNlYTVmLCAweGVmODVhODY5LCAweDRhOTUzNTk3LCAweDhkZGI5ZGIzLAotCTB4MzllZWJmNTksIDB4MzBmNDdjM2YsIDB4OWRjOTJkZDMsIDB4Y2RiMzM3Y2UsIDB4OTc0NjZmM2MsIDB4ZDU4YWI5ZWYsCi0JMHg1Y2MzN2U4MywgMHg3YWYyODkyNSwgMHgyZmVhMDJlNiwgMHhmZmI1ODVjNiwgMHgxZWZjNWRjZSwgMHgyMTI1YWNhYSwKLQkweGVlM2ZiZDNmLCAweDA3ZGY5N2I2LCAweDJlOTgzZGYwLCAweGE5YmRlOWUyLCAweGY1OWZiYTE2LCAweDcwNzk4OTllLAotCTB4Yjc5OTE5ZWIsIDB4NGVjNmY1ZTgsIDB4MWRlM2VkYzYsIDB4YTJkNmNlMzMsIDB4NjIwYzY2MzgsIDB4YjBlNDNmNzQsCi0JMHg3OGU3NjJiMywgMHhjY2MzZmU0NiwgMHhhZTYwZDA2MSwgMHhkZTMyNmNhZiwgMHg5ZTVkOThjNywgMHhhZmI2MTZmZiwKLQkweDhmNDA3NjEyLCAweDQ5ZjU1NzE3LCAweDkxZmU1MjBkLCAweDZjMzM5YmU0LCAweDNmOGRjNjI0LCAweDYyNDI1NTlkLAotCTB4ZGY0YTkxZGYsIDB4NGY2YWVjYmQsIDB4ZjZiMGUzNzEsIDB4ZDNmYjQ1ZjMsIDB4MWQ3MWM0NjksIDB4MmI4M2RkZjQsCi0JMHgzZThiYjFlYSwgMHhmMjg3ZDEzNywgMHg4YmYxMjIyMSwgMHg5ZGZmMGE3NCwgMHhhMDdmNWQzNSwgMHhmZTExNjdkZCwKLQkweDQ4ZmMzODc5LCAweDEzZGQzOTRjLCAweGJkNTdlZGQwLCAweGY1NzhlN2E1LCAweGJkMDk4NmFmLCAweDM4YWRjYmE5LAotCTB4MWYzM2IwODcsIDB4NGM5MTM0NWQsIDB4MWVhN2VlNWUsIDB4NjdkOWY2N2QsIDB4ZWE3ZTVkNWQsIDB4ZjQ5ZjYxMGUsCi0JMHg4MzMzYTI3ZSwgMHhmOThkMTk1NCwgMHg1NDlhNTAyYSwgMHhhY2EzZjEwZiwgMHg2MDA1Mjc1NiwgMHhkYWZmZGI5ZCwKLQkweDI3ZjdmZGYzLCAweGYwMWU3OTc1LCAweDJmYjYxMjYwLCAweGIwNzJmYjcxLCAweGRmMTdjYzhjLCAweDA3MmNiYTk2LAotCTB4MzRkYjcyZTUsIDB4OTQ2YWVlZGQsIDB4OWNlZGJlMzcsIDB4YmU3NDM3ZmIsIDB4MWJjZjBlZmEsIDB4OWQ5MDE5NmYsCi0JMHg0YTUxNzk4OCwgMHg1OWJlNDVhYiwgMHhlNDE1YTY1ZSwgMHgzZDEzN2RkNSwgMHgzZmY3MTU2ZSwgMHg2MzFiMWRiNywKLQkweDM2ZjRmOGM3LCAweGNmMGRhMGE1LCAweGYxMjliNzc3LCAweDUzNmRiNDA1LCAweGRlOTAxZTc4LCAweDVlNzg1MTVlLAotCTB4NzhmMWEyOWUsIDB4YmNmMGEyYjcsIDB4YTc3ZjNkMzksIDB4ODRkYmMwNjUsIDB4MDNkZGJkMGYsIDB4OGQxNWFmODIsCi0JMHhkMjg4ZTNkZiwgMHg1ZDlkYTgxYSwgMHhiMmY3ZDJmNiwgMHhlMjhjZjFlYywgMHhmZjk1NzY1MiwgMHhhNjc0NTBlZSwKLQkweDkwN2JkOTk5LCAweDJjYzNiNWQ3LCAweGU1YjYxZjY0LCAweGEyNGRiNDE1LCAweDE0NmVjOWY5LCAweDA1NDk2ZDkzLAotCTB4MTE0N2E0NDksIDB4OGQ3ZWYwZWYsIDB4MzE2ZjEzYTMsIDB4MGE5ZmM3ODgsIDB4ZDRmZGViYmMsIDB4ZGU3NWYwYjQsCi0JMHg0MTc3NzFiYiwgMHgyM2Y0NWY0OSwgMHg1ZjkwODdiZCwgMHhlYzhiMjliNywgMHg3MjQ2ZWY3OCwgMHhiZmI0ZGUxNCwKLQkweDQzMjY2MWU2LCAweDdmNTc2NjNlLCAweDdmNDUwYTk3LCAweDI0ZmVjNTNmLCAweGZkOGE4MTQ3LCAweGJmY2Y1ODU5LAotCTB4ZThiNmY4YmIsIDB4ZWYzZGVmZTcsIDB4ZmEzNjBjYzAsIDB4MjI2MzA4ZGUsIDB4ZDQ5NDI2OGYsIDB4Mjc2MWY5ZDMsCi0JMHg2MzFjZjBmZCwgMHhmZWY3Zjc0NCwgMHhiZDY3N2VkYiwgMHhmZTA5ZGUzMSwgMHhiZjUxNmZlNiwgMHg3YjlkZTY1NCwKLQkweGUxM2QxMjdiLCAweDY4ZDZlNmZlLCAweGJmNzQyZmFlLCAweGZiNzk1NjUxLCAweDBmN2U2NmFkLCAweDlhYmVmZjU1LAotCTB4YjFjYTQ3ZWUsIDB4ZGQ3NDNjNDYsIDB4Yjg3NGUzMDMsIDB4YzgzOGYyYWEsIDB4N2M1MTg1NTUsIDB4YWZhZTUyMjYsCi0JMHhiODZlM2E5ZSwgMHhkODc2ODE0NywgMHgyYzcxZmMyMywgMHgwY2Y0Y2ZkMSwgMHgyZTI5NzNjMiwgMHhhM2RjYmFkZiwKLQkweGViZmQ0NDRlLCAweDFmN2Y3NzI4LCAweGE4YTRhYmJmLCAweDMwYjdjYTY2LCAweDVmMTJmZjAxLCAweDkyNDNkZTc3LAotCTB4YzZjZmY0N2EsIDB4MzU3NGU3MGQsIDB4MjQ2ODU2MjUsIDB4YjcyODRhZTcsIDB4ZTAzZjM5MjcsIDB4NzI4Yjk1M2EsCi0JMHgxZWNiYTA3ZCwgMHgwM2FlYjhhYiwgMHgxMzg5ZGNlNywgMHhiZjVjZTRjMywgMHhiZmY3YTIxZiwgMHgzNTY0ZTRmZSwKLQkweDc0ZGY1ZDdjLCAweDZlNzljMmZmLCAweDhmNjRmZGU3LCAweGZmMWVkYzVkLCAweGQ4YzdkZjZmLCAweDQwYWViMmVhLAotCTB4MzI2Y2RmZmIsIDB4YzM5MWU1ZWEsIDB4ODZkNjNlYjksIDB4NzVlMGY4OGIsIDB4YjNiN2VlOTksIDB4ZTFiNGJlYTEsCi0JMHhkOThiM2Y4MCwgMHhmOTdhOGU1YiwgMHhkZmRmMzU0MCwgMHgxNDk5YjFjYSwgMHg3ZWIwMzk4NywgMHg4MjllNDQ1YSwKLQkweDMwZjBkMDZmLCAweGIzYWEyYzc5LCAweDg1YWJiZTkyLCAweDAzZWQwNzdkLCAweDQ5MWFlODIzLCAweDNhZmU5ZDJmLAotCTB4ZTdlNzI4ZWMsIDB4MjdiZDNhNzIsIDB4OTEyMTJhMjYsIDB4ODlmZTRjMDcsIDB4MDk5OTdlMmIsIDB4ZGNhYjlhZjUsCi0JMHhiMDM5ZjI2NywgMHg4MWQ5MWI3ZCwgMHgxMTVkZGFkZSwgMHhhZjZmNGZmYSwgMHhjZTBhZmY2MCwgMHg3M2UyODBhZiwKLQkweGEwZTc1MDU3LCAweGZjZjZhNDlmLCAweDUxOTc2Y2ZiLCAweGVjN2UwNDk4LCAweGIxZTcyZWIwLCAweDJiZjYyYWE5LAotCTB4YWI3OTNmMDksIDB4NTFhZjZmYzgsIDB4YjA5ZWVkMGIsIDB4NDJkOGE1ZjcsIDB4M2UzMGE0ZmIsIDB4ZGUyNWU5YTksCi0JMHhjN2FlMWZlNCwgMHhlZmI0NDM5YiwgMHg0ODEwZWZkNywgMHg5ZTYwZDdlOCwgMHhlZTVmMjJhMCwgMHg3ZWQwNDc4YywKLQkweDlkZjBkNGEyLCAweGRlZmM3ZDQ1LCAweDVmMzllZGNmLCAweDY5MGI1NTVmLCAweDAxOGYyODFmLCAweDBiZmMwMTdmLAotCTB4ODE5MmVjNTMsIDB4YmUyZDM3NjQsIDB4ZmNjNDRlN2YsIDB4MjhkYWRmOTUsIDB4MjEyM2Y3OWYsIDB4M2U0MmVkOWYsCi0JMHgwMTYzZDM3YiwgMHgyZDJlOGM3NiwgMHhmMDI3NjE2ZSwgMHg0OWYwMDhkMiwgMHg0OWYyMGM0MSwgMHg3MGQ5OGE0ZCwKLQkweDliOTdhM2FlLCAweGUyNmYzYWM0LCAweGJmMGY1NGU3LCAweGMxZTczZjM1LCAweDM5ZjgzZGUxLCAweDlmODRjN2U4LAotCTB4ZTJmZmEzY2YsIDB4ZTg5YmQzMDksIDB4ZjA3YTc4YmYsIDB4NjJjZGVhNzMsIDB4NTNjZTI3ZmYsIDB4Y2RkYzViNGYsCi0JMHhkMzk3ODBlZCwgMHgzYmU4NjIxMywgMHhmODdkMTkzZiwgMHhlOGQzZGYzZCwgMHg3ZjgwMTVmNywgMHg0Y2Q5Y2NmNywKLQkweDUzMmNkNjI0LCAweDg0M2E3N2U3LCAweDA2MDhjOTlmLCAweGNhMjc2ZjNmLCAweGFlZjMxOTQ1LCAweGQ1YmRkZmMyLAotCTB4ZGY4OTg4ZTUsIDB4M2EyNmY5YTMsIDB4ZTBkYzA2Y2YsIDB4M2RlM2I2YmMsIDB4ODdiYTNjYmMsIDB4MzlkM2RhNTcsCi0JMHhmZTRlYjFkZSwgMHhjN2E2MTMwMSwgMHg0MDFmMDhmYiwgMHg1YTM4YjA5ZCwgMHg0NDYwZjhiNywgMHgzMWMzMTAzYywKLQkweDE5YzVmOTlkLCAweGJmNmZkYmRkLCAweGY5ZjhhMjYxLCAweGUyMGIxZjJlLCAweDUxZGMwMmVmLCAweGJkZGY4YzY0LAotCTB4NzZkOWYyMjUsIDB4N2YyNDYxMmQsIDB4NDI5YTcyYmIsIDB4NmEyNDVmZTgsIDB4NjVmMWUyOGMsIDB4MzlmYjYzMWUsCi0JMHhiZGRmOTFhNSwgMHhlZWY5YzYzNiwgMHhlNzIyNWFmNCwgMHhlYmI1ZGY0YiwgMHg3ZmQ3ZDYyNywgMHhmZjhhMmFjZiwKLQkweDIyZmRjNjQ1LCAweDNlYjQ3ZGUzLCAweDNjODUyM2I0LCAweDE4NTRhZmVlLCAweGY1MWNiOGYzLCAweGQ4YmJlODMzLAotCTB4NzE0YWY4NjAsIDB4MzMxNGFlN2QsIDB4YTNhYzM4YzMsIDB4MmRjZjMyM2MsIDB4MjFlY2YwMjAsIDB4NTllM2E2NjUsCi0JMHg5Mjg5OWVmZiwgMHg2YmRmZTY2ZiwgMHhmNTQ2ZGMwZCwgMHg3ZTFkYmU3YSwgMHhhYmEyNzE3NywgMHgzYWNhNWQ2YiwKLQkweDExN2M5ZjMxLCAweGJjZjQwZGNmLCAweGQ3MTg1ZGFlLCAweGJjZThiY2M0LCAweGQwODRkMDM2LCAweGM2MDVjZTFmLAotCTB4ZjQ2MGFlNDksIDB4Yjc1ODU3YmQsIDB4ZjBlMjVjZTEsIDB4ZmEyNjJkOWUsIDB4YTMxZjBmMWQsIDB4MWUwMWExZWYsCi0JMHhjYzE2ZTc4YywgMHg1ODUwZjE0NywgMHgwMzljZTFiZiwgMHgyMzgwNjlkNiwgMHhlNGRmMDFmNywgMHg5M2RlMWZmZiwKLQkweGEyNzdlM2RlLCAweDI3OGY1MmY1LCAweDYxMzM4Yjc1LCAweDJmYTQ4MDA3LCAweGJkZjM4Yjg2LCAweGZhMjg2Y2ExLAotCTB4MDZmZTRhNDEsIDB4MTQ5NWMzYTIsIDB4NzJjYjVmOWUsIDB4ZGJkZjNlN2EsIDB4ZjdlMWZkMDksIDB4NzI4ODdlOTMsCi0JMHgwMTcxODA5MiwgMHgwNGRlZjg2NiwgMHgwZjc0YzhmMywgMHhlN2M0NTRjMCwgMHhlNWViZWE2YSwgMHg0OGM3OTc0MiwKLQkweGNjZDE2ZGJlLCAweGE2ODQ3OThlLCAweGVhMGY2ODgyLCAweDYwMGQ5YjEzLCAweGY4ODUyZWZjLCAweGVlMjRiNzRlLAotCTB4MjgzZmZkM2YsIDB4MDA4MTJiZDQsIDB4MDAwMDgxMmIsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4OTA5NWZmMDAsCi0JMHg1MGMzNGIzMSwgMHg5N2JmODUxNCwgMHg0YTM2YWM0NiwgMHgxMDU2ZGFjMSwgMHhhODUwOGEwOSwgMHg3NTVhNTA5NSwKLQkweDk3Mzc1NDMzLCAweDIyMWQwZThjLCAweDM4YmEzODNhLCAweGZjNWQyNTFiLCAweDA5ZjljZTAxLCAweGU2ZTI4NGZlLAotCTB4NDgyYWUwZTYsIDB4MjJiZjgyOTAsIDB4MjZhNjk3ZGUsIDB4Y2JiZDA4MjAsIDB4NzdkZGU3NzksIDB4ZGRmNzNkY2UsCi0JMHgyZThkY2MyYiwgMHg1ZWNhNzU1MCwgMHg3NTYxOTA0NywgMHg0NDQ1MDZkMiwgMHg5YWVhMTE1MiwgMHg0N2UxNzUzNiwKLQkweDNjZDZhNWE0LCAweDdjMjJjMTI4LCAweDRjMTIwOTJlLCAweGVjYmJhYTc1LCAweGZiZDQ1YWIyLCAweDVmZmVkMjQ2LAotCTB4NzNlNGVjNmYsIDB4NzU2OWZkNzMsIDB4MjdlN2NhZDIsIDB4MjJmZjhlYmEsIDB4YmE3N2U4OTgsIDB4MDA4MzlkMTIsCi0JMHhlNGUzZTFkNiwgMHg2NWY2OGZiZCwgMHhjODc3M2QxMywgMHg1Zjk0ZGNhYywgMHhkNTNkYTNlOCwgMHgzOTcwMDc5YiwKLQkweDNhZGYzNzZiLCAweGRiZTIwZDQ2LCAweDBhYThmMzhhLCAweGE1NjcwNDdiLCAweGZkMzk4Zjc0LCAweGVkMzQ3MzdlLAotCTB4YjBhNTZmMmQsIDB4ZWYzN2U2NTcsIDB4YmY4OTY5NWUsIDB4YzIxYjcxYTUsIDB4YzFlYzg0ODEsIDB4YzgxNDQ3YTgsCi0JMHhiZTBkYWFkMSwgMHhiOTQxN2RjZCwgMHgzZTk5Y2I4YiwgMHhiZjA1YzU5MywgMHg2N2ViODFmMCwgMHhmM2JhNzkzMSwKLQkweDg0MTZiZjBmLCAweGNiNjJiY2JmLCAweDVmMWRkN2ZmLCAweDdmNzRmNjhkLCAweDZiN2QyMzhjLCAweGJiOTJmNzJjLAotCTB4NTBhOGRjZTEsIDB4ZDlmNjk1ZjgsIDB4ZjQxMTJlZDUsIDB4NzM4ZGJjZjMsIDB4ZjNlNTY5ZjEsIDB4NzQyYjAwN2UsCi0JMHgwMjUwNTc0NywgMHgwMDAwMDI1MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4YzU1NDdjMGIsIDB4M2Q5Y2Y4YjksIDB4OTI2ZWVjZTcsCisJMHgyMTI2Y2RkZCwgMHgyNmMyYmMyMSwgMHhiODBkNDQwMSwgMHg0MWEwMGM0MCwgMHg5NDUyMGYzNywgMHhhMmExZTFhOCwKKwkweDI0Nzg2YzIyLCAweGY2MjJlZjIxLCAweGRkYmYxZjYyLCAweDUyYzQ4OGYwLCAweGQ0YzUxZjFiLCAweGIwNTE3NjhiLAorCTB4NDAzNjhiZDEsIDB4NWMxNzU4ZDAsIDB4NmQ4YjQ1OWUsIDB4ZDVhMDQ1ZTgsIDB4NWU0MDEzN2EsIDB4YTU0MGIyMDYsCisJMHhjZmZkNDViNiwgMHhkZDljY2RmNywgMHgyNjM2NGU3MywgMHhmNmZmZWY2YSwgMHg5ZmRiZmZmZSwgMHhjY2NjZTYxZCwKKwkweDdjZGYzMzM3LCAweDliZTZiZGYzLCAweDkxYmU2NDg5LCAweGYyMTM4N2Q4LCAweDI1NmVmYzI1LCAweDEwODk1MWU0LAorCTB4OWI0ZTE4OTIsIDB4OWZjNjkzM2MsIDB4ZWRiMTA5OTQsIDB4M2JlYTI0N2UsIDB4OWUwYzg0OTksIDB4ZDE0NjcwNmIsCisJMHg2NDA4NWZhMiwgMHgyMTA2NGI0ZSwgMHg3NThkNjVjOSwgMHg3OTNkZmE0NiwgMHhlOGJjN2Q5MSwgMHg5ODE5YzMwOCwKKwkweGJkYmFlNDdjLCAweDcyMGM4NDA5LCAweDgyNjZmNmQzLCAweDdmZTkyZmJmLCAweGM2MzdiNzNmLCAweDc5Yzg3NDkxLAorCTB4ZTEzMWEyODUsIDB4YmM5YTRhZmEsIDB4ODc3YmZhNDgsIDB4MTQ5YmJlYWEsIDB4NDhkZGE2NzUsIDB4ZmQ1MWZiZmIsCisJMHg5MDg1YjcyMCwgMHg0Njc4YzMxZiwgMHg0MGNiYTk0MiwgMHg3OGI4ZThiMiwgMHhmZDJlNmY1ZCwgMHhhZjBlM2EzZiwKKwkweDI5NWJlOGNkLCAweDFjMWEyMjEwLCAweDI0MjQ0NGIxLCAweGEwNDgyMzI2LCAweDY3OWZiZTlkLCAweDQ5ZDdlZDNjLAorCTB4YWEzNmE3MDgsIDB4NDllNzRhYzgsIDB4MDg5NmI0YzgsIDB4ODA4OTcyZjUsIDB4NzZjZDg4NzgsIDB4NzhlOTdiMjUsCisJMHhlMjJlN2Q1NywgMHgyMjBkNTdiYywgMHgyN2Q2OWRhNCwgMHg2ODRlZDM5MiwgMHg2MWM0OTUzYSwgMHgyMzJkYzdiZCwKKwkweGQ1N2U0MjA2LCAweDA3MTIzZmFlLCAweDE5OWIxYjg1LCAweGRjMTU1ZTI0LCAweDBlMjEwZjA2LCAweGM3YWZjNTEzLAorCTB4OGYyYWU5OGMsIDB4YzRjOWE3OWQsIDB4YWIyMTBkNzEsIDB4NTc0YzBlM2QsIDB4ZmE2MzQ2NzksIDB4ZGIyN2QwZDgsCisJMHhmOWQwMDY3MywgMHhlOWQ4MzIwYywgMHg2MzgzNDg0OCwgMHgxMTkxZGRhNiwgMHgyZGM3Mjc4NiwgMHgwOTM4ZTczMCwKKwkweGFlMjkyNmM5LCAweDJmNWE1NGM0LCAweDRkYzg0MGQxLCAweGYzNDJkYzg0LCAweDE5MDgyMzc1LCAweDUwODRlYzQ5LAorCTB4YmM5MzNkZmMsIDB4MDE5ZGNhMmMsIDB4NDVlNjA3NzksIDB4N2NjMzcxMDMsIDB4MmUwMzMyNjMsIDB4YzYyZGUyOTEsCisJMHgxYzk1Y2Y2OSwgMHgxYmY4ZWZlMSwgMHg3ODVmZGY4MCwgMHhjMWQ2MTUyYywgMHhlZmNjMWI3ZCwgMHhmMGVjZTIxOSwKKwkweDQ2ZGQ5ZTAyLCAweDdmNWEyNmU3LCAweDVlNGNlY2E1LCAweDQ2OGFlMTRhLCAweGFkODMyZWRhLCAweDFlMTA5NGJiLAorCTB4MWZjMDRjZGYsIDB4YzljYzhmZWQsIDB4MzBkN2FjZDUsIDB4YjQyMjQ3MTgsIDB4ZWIwNWRjNzMsIDB4NzViMjcxNjQsCisJMHgxNTc0MDk1YSwgMHhmMmU2MWQ2MSwgMHg3NzY1NTg3NSwgMHgzOGZkMTlkOSwgMHgxMWZhMjQ0OSwgMHhiMWZhNWFlZCwKKwkweDhmZTk2ODY0LCAweGJhOWZiMTdlLCAweGJmNjllNzllLCAweDNiZWQ0MjRkLCAweGJkM2NlOTUzLCAweDRkY2UwYzRiLAorCTB4YTE2MGRiZjQsIDB4MGFmODAwNTEsIDB4ODBjNDI1YmMsIDB4NDFmOTJhZmQsIDB4NjNhMDUyNjUsIDB4MTc5ZTFhYjQsCisJMHhmNmY3ZTljYiwgMHhlZmNmNzMwZSwgMHg1MmUyMDYyZCwgMHgyYTUzNzJlOCwgMHhjZWM0Nzc3YywgMHg2NjI2ZTNhMCwKKwkweDZiNGNlYzQ3LCAweGU5ODdmMWNmLCAweGM5MjVkOTI0LCAweDRjMGVlZjQwLCAweGFjNDcwNDFiLCAweDQ3N2NlMzAwLAorCTB4OWMwNDliMjQsIDB4ZjZhNDcyN2YsIDB4MDhlZGQzZmYsIDB4Mzc3YWUxZjEsIDB4ZGE1NDc1ZjAsIDB4M2QyMDNjNTEsCisJMHg0NjhiMWY3OSwgMHgzNDUwODgzYywgMHgxN2U3MGMzOSwgMHhhZDE3Y2YxYywgMHg0YTQzNGY0NSwgMHg1ODY4ZTM0OCwKKwkweDg3NWY5YTVmLCAweDc5YTY2M2Y0LCAweGIwOWJlNjJiLCAweDNmY2ExZWRjLCAweGFjYzllNThiLCAweGJhNWU1ZDNlLAorCTB4NTVlM2JkMTgsIDB4NmVkYTE3NTksIDB4NDI5MWMyMDMsIDB4Mzg0NDVlNzAsIDB4OWJiZjUwOTYsIDB4OTQyMDNmMzAsCisJMHgxZmQ2MjVmZiwgMHhiN2Y3ZWFjYSwgMHhjZWVkMjUxZiwgMHhmOWMyOWUwZCwgMHgwMDNiMmViZiwgMHhkNmRiYzI5ZiwKKwkweDJlOTRhZGMwLCAweDdjMTA2ZTBlLCAweGVjMGY5YTI2LCAweDc1ZmU0MThjLCAweDlmMGNmZDdlLCAweGQ3NjdlMjg5LAorCTB4ZWEwYjkzMzgsIDB4ODM5OGRmOWYsIDB4ZWZlZGJjZjksIDB4NWU1YTI0ZGIsIDB4MjA5NDVkYjUsIDB4ZDY3OWQ4NmYsCisJMHg1YmYxNDFkNiwgMHhmYzdmNmE2MywgMHhiODNkZmE2NiwgMHg2MDJmMjQ1ZCwgMHg5ZjcxZDM3NywgMHg0OGI0ZTI5ZCwKKwkweDkyZjk2MzNlLCAweGRhYWQ5NjI4LCAweGMwMWU2YmIwLCAweDkxMzM2YjJkLCAweGVhYTcwYTI4LCAweDZmM2JkMmNkLAorCTB4MDNkMmY5YTYsIDB4NTUyYTgxMzIsIDB4ODM4Y2VhOWIsIDB4NGY4OTdlNjksIDB4OGFmYzgxNjgsIDB4M2Y2MDFmOWQsCisJMHgwY2E0YjlkZCwgMHhlMDM5ZjdmNiwgMHg3NTJmOTQ1YiwgMHhlZTkzZGFkYiwgMHg3ZGNiZGZhNiwgMHg3ZWEwMGE1YiwKKwkweDA5YzE2NmY5LCAweDdlYmU1YzRiLCAweGJmMDA4N2Q3LCAweDIxMWU1NWJjLCAweGNkMTVmODUyLCAweGRhYTFjNDMxLAorCTB4MTdkYjc5MmYsIDB4YWRlMzA5ZGYsIDB4OTQyNjQ3N2EsIDB4YWJiMjkxZWQsIDB4MTg5MTE5MGYsIDB4ZTAyMzQ2YTQsCisJMHgxM2QzNmFiNSwgMHhlNzliZTA0NiwgMHgxZmIwMDczYywgMHgyZjU1OWYwNSwgMHhiYjY4N2VkMywgMHgyNzA0ZDdlYSwKKwkweGMwZGFhZDRjLCAweDM3ODVjZGY4LCAweDY4YmNlNmEzLCAweDE5ZDU3OTgxLCAweDM3ZmI0MTQ3LCAweGJkNDIzNTFmLAorCTB4ZWJmMTVmNTIsIDB4ZGYxODBlNTEsIDB4OGMwMTYzMDYsIDB4NjMwNmZkNzMsIDB4NTY2ZjhhODksIDB4MzM1NmZmMzQsCisJMHhlOTRkNTNhZSwgMHhiZDE5ZGQwMywgMHhjZTM5ZTdhZiwgMHgzOTdjOTViNywgMHhkZjQ4NDAxNSwgMHg0MzM4Y2Y5MiwKKwkweDMzOWU4N2M1LCAweDU3ZmQyMWM0LCAweDExYzQ4YjM0LCAweGRmNzgxZjgxLCAweDg3NjBmYmU3LCAweGJlMDNmMTk1LAorCTB4YzBlZDRiNWUsIDB4NzVlYmMyMWEsIDB4NGZkN2NlYzksIDB4ODhjZDY2MGEsIDB4ZTcxZWU3YzAsIDB4Y2I5MWEzZjIsCisJMHg3ZTQxMjc4ZiwgMHgyZTY5ZjRkMCwgMHhmOTcxZDYzZiwgMHhlMjcxZTRkMSwgMHg5MzNkNjdmNywgMHg3MWVmNWQzMCwKKwkweDY3YmNmYTYxLCAweDRmM2VhNjFhLCAweGMxN2JkNjExLCAweDhkZDMwNzMzLCAweDdmN2UzNzFlLCAweDY5ODY1M2M5LAorCTB4YmYxNmE3YjMsIDB4OGU1OWUyYmYsIDB4MTc4ZjY2ZTksIDB4NTllNmJmYmYsIDB4YTc4YjY5ODMsIDB4OWVhZGQzMTEsCisJMHgzZDViNGMyNiwgMHhiYWY3YWMzZSwgMHgzNmQzMTlhNywgMHhmZjdlMGI0ZiwgMHg1MzBkYTdiNSwgMHhlOTgwMjdiZiwKKwkweDlhNWY1ODRlLCAweDk4ZWQzYzA2LCAweGMzMWNmNmVlLCAweDAzYTdhZjc0LCAweDljZjdlZGRiLCAweGM3MmQ3NGMxLAorCTB4ZTQ5YjJkYmIsIDB4MzY2ZjE0NDgsIDB4MTgzOTQxMTcsIDB4OTFjYWU4NWYsIDB4ODhiZTNlNjksIDB4N2FlNjkzZTUsCisJMHg5ZjM0OGM3MywgMHg4YTc5YTZlNCwgMHg4MTk1YzFjNywgMHgwZmNkMTMxYywgMHgyOWU1NjVhZSwgMHg2NmI5MjQzZiwKKwkweGIyZjE0ZjlhLCAweGFlYjViNGYyLCAweDRmOWEyOGRjLCAweGEzZTU2NDZiLCAweGEzNzM3YmQ2LCAweDhmOTQ3ZTY5LAorCTB4MzliNzVmOTUsIDB4ZjM0MzFiOTAsIDB4ZjJiMGI1ZDcsIDB4Njc5MjdlYjEsIDB4MDFiMWY5YTEsIDB4ZDA3ZjFmOTYsCisJMHhmOWE1Njc5NSwgMHg5ZjJjZWRmMSwgMHhjZjM3YTFmNSwgMHgxZDU5ZjM0NiwgMHg1ZDRkZmRhYywgMHg5YTU4YmM4MSwKKwkweGNhYzgyOWJmLCAweGYyNGFiOTZmLCAweDJlNDAwM2VkLCAweGI1Y2Y5ODBiLCAweGQxYzdlNGU0LCAweGU1OWRhZTdjLAorCTB4NGIxNjg2MGIsIDB4YjdmNDA4OGUsIDB4MDg1OGVlNTMsIDB4YjA4NjdjMjIsIDB4N2U1MTI1ZDEsIDB4ZjFkOGQzYjMsCisJMHg2NDdkMTUxMCwgMHg0YmFhZjBhMSwgMHgyMDMzZmNhMiwgMHhmZTUwNDU5MywgMHg5NjNhZjBiMCwgMHgxOTY0OGMwNywKKwkweGJjMmEzZjk0LCAweDY1YmJlNThkLCAweDVjZmY5NjA3LCAweDQ2ZjJjMDM4LCAweDg3ZmY5NjA3LCAweDdiZjMwODcwLAorCTB4ZWY5NjE3NjUsIDB4ZjJjNGZlMTAsIDB4ZmY5NjE3NDYsIDB4Zjk4MTM4NWUsIDB4Y2IxYmIyZmQsIDB4OTYyZTg1M2IsCisJMHhmY2IxYmEzNywgMHg1NzUzZTk0OSwgMHhkZjJmZWQzZSwgMHhkYzJlOWVlMCwgMHg1ZGRiNzIwOCwgMHg2YTU5NzI4NiwKKwkweDU5N2UwNjQ5LCAweDA0ZmZmOWNmLCAweGFmMmQwNjQwLCAweDM5NDQ2NDFmLCAweGFjZjNmM2I4LCAweGQzODE0NTE3LAorCTB4OTdjODAwZjYsIDB4MDVmYTA0YmMsIDB4NDg1YjMzODUsIDB4YzI4MjdkMDQsIDB4NzM4NmZiMTEsIDB4MzQ5MzE3Y2IsCisJMHhhMmY5NmU3MCwgMHgyMGYzODE0YywgMHgxZmVhODljMiwgMHhkYzVmOWQ5YywgMHgxN2NmMWRhNCwgMHgxMjljMGFlNSwKKwkweDdmYjU5NzljLCAweGNiZTViYWYzLCAweGJlNzhlZDZjLCAweGQ0ZTA1NGFjLCAweGZlYjg5YzIwLCAweDRmMjAyNzhkLAorCTB4YzgwOWMwZDQsIDB4ZTU5YzBhYTUsIDB4N2ZiMTI3MDgsIDB4MjcxOTcxZTMsIDB4OGNiOGUwNmIsIDB4NzUzODE0NGIsCisJMHhmZjUwNjcwOCwgMHgzNzhjMDRlMCwgMHhhYzYzYzc2YiwgMHg4NjNjZTA1MCwgMHhiZmQ2MWU3OCwgMHg1MzRjYjk3OSwKKwkweDU1MzFlM2I0LCAweGMyOWU3MDI5LCAweDBmZjZhNGYxLCAweDE2YWI2ZWNlLCAweDIxYWRiYjNmLCAweDM4NDdhY2ZjLAorCTB4YWYzN2ZiMjMsIDB4M2YxNjliNWMsIDB4N2UxMGI2YjksIDB4NmI5YzIxMzYsIDB4Yjc2NzA3ZmIsIDB4ZGQ5ZjhiNGQsCisJMHg1ZTdlMTBiNiwgMHhlOThjZmM0MywgMHg2MzcyYmNkZiwgMHg4ZGM5ZjhiNSwgMHgwZGU3ZTEwZCwgMHhmZWI4Y2YxYywKKwkweGEyNmY2NzhkLCAweDEzN2IzZjE2LCAweDIwMDlmODQzLCAweDM3ZmIxYjljLCAweDJkMjRmYzllLCAweDQyOTNmMjdlLAorCTB4ZTEwNzc5ZjgsIDB4OWMxZmVlNGMsIDB4ZmM1YTQ5YmQsIDB4ZTEwYTRkZWMsIDB4NjcwODBmZTcsIDB4OTVlNmZmNGEsCisJMHg5ZjhiNTAzZiwgMHhmYzIxODFmYywgMHg3MjcwODA3YywgMHhhOTRjY2RkYywgMHhiZGFjNzBhNCwgMHg0YzNmZDljMywKKwkweGMzZmQ5ZjhiLCAweDg5MzlmODQyLCAweDM4NTJhNjcwLCAweDI5YzM3ZGU5LCAweGE3ZTJkMTQ4LCAweDlmODQyNTIwLAorCTB4YjZlNzA4ZjMsIDB4OWZkOWMxZmUsIDB4ZmVjZmM1YTIsIDB4YWU3ZTEwOTQsIDB4ZmEzYjljMjAsIDB4ZTE4MmFmMzcsCisJMHgwYzE0ZmM1YSwgMHg1NWI5Zjg2NywgMHg4NjcyODcxYSwgMHhkODI3NGVjYSwgMHg5YTE5ZGZlNywgMHhjMTMyMTJlMywKKwkweGQxNzk2MjRlLCAweGY3YTAyNGVlLCAweDQzM2U4YTg4LCAweGFkMjI1ZGRhLCAweDM3MWNkOTZmLCAweGQ2YTIzMWZlLAorCTB4MDY4ZDcyNmIsIDB4YWE1NmNmNGEsIDB4OWFmNWE5ZTUsIDB4MWFkMTQ5ZDgsIDB4MTVjZTJhM2QsIDB4NGMyN2M5YWYsCisJMHg5ZmE5YWMxYiwgMHgyOWE2OTQ1OCwgMHgzYWU3MzgxZiwgMHhmNzIwZjk0ZCwgMHg0ODdlNGQ3OCwgMHhmYTlhNGRkOSwKKwkweDM1NzM2YWMzLCAweDZmY2JlMWY5LCAweGY1NGZkNGQ3LCAweGQzZTRkNGNlLCAweGE5YWZkY2Q3LCAweDgxNzFiMjNmLAorCTB4YTY5YWZjYTYsIDB4YjVmOTRkNzIsIDB4ZmM5YWE1YmUsIDB4ZDdkZmNkZjUsIDB4YjJkMzFmZDQsIDB4NDM3ZTUzNDIsCisJMHhmMjlhNjNkYiwgMHgzNTI3ODE3MSwgMHg5ZTA3MDlmOSwgMHhiMWJmZDRkNSwgMHhmOTRkMDVmZCwgMHg2OGFmNjNjNCwKKwkweDZjNzcyN2NhLCAweDNlNmZlNGQ1LCAweGZkNGQ2YmYzLCAweDlhZGRjMTI5LCAweGJkOWZhZGZjLCAweDQzOWZhOWFiLAorCTB4NmZhYjUzZmUsIDB4ZDRkMDNmOWIsIDB4YTEzZjZhOWYsIDB4ZjI0ZWZmMjksIDB4NTUzZDNhMjcsIDB4Y2NhZjFmNmIsCisJMHgzMmFmY2MyMSwgMHgwMWFmZDk4OCwgMHhjNmYzMTFhYiwgMHhhNzY2MTZjMSwgMHgyNzFjNGI1OCwgMHg3NzE4ZmQyOSwKKwkweGEwMGM3NDJmLCAweDAzMzQwM2Y0LCAweGUwY2U1MTc2LCAweGU4M2E2YmIyLCAweGU0ZGRlZmY3LCAweGJmNGVjNmJlLAorCTB4YmVlOGNmN2YsIDB4YmY0MTFlYzEsIDB4OTAyNmY0YTEsIDB4MDYxZDQ4NjQsIDB4OGZlNWY1NDgsIDB4NzNkZThjY2EsCisJMHhkNTFkNWM4NywgMHgxOGQ3ZGI0OSwgMHg2OGUyYTM4MiwgMHhlNzMxMjNmZSwgMHhmOWM3YTAzZSwgMHg4M2VlMDMwNiwKKwkweDQyZDQ5MTY4LCAweDQxMTM2OGJkLCAweGQ0ZDFlOWJiLCAweGFhYmQxN2FjLCAweDE4NjZiMGZkLCAweDMwODQzM2Q1LAorCTB4M2JiMjM1ZGMsIDB4YzMyOGY1MTksIDB4OWJkMDNhZjgsIDB4NzlkMTg3ZWEsIDB4ZDE2NDI2MGQsIDB4YmNiYjcxOGEsCisJMHg2MWZiNjgyMywgMHg4ZmUwYzkyNSwgMHgzZjk5MTkzMCwgMHg5MWJmZDQyNCwgMHhmZDgxOWZmNiwgMHg2YmZlODEyZiwKKwkweDk0ZGZlOTdhLCAweGJmZDM0OTM2LCAweGQzNGNhNTM5LCAweGZiNDhkOWJmLCAweDkwZjIxM2I3LCAweGJmZGUyNmUxLAorCTB4Y2IzNmZkMTksIDB4ZmVjNjRjNTYsIDB4ZDg2NTI5NGQsIDB4NmE0NmEzZmYsIDB4OGZmYmE5NzcsIDB4ODhmZmY1MGUsCisJMHgzMWViZjY4MSwgMHhjN2I5YmIzMCwgMHhkMjZlZDNmYywgMHg1Y2E1M2ZjZSwgMHg5YjIzN2YzYiwgMHgyZTQzNGFmZiwKKwkweGU3MWEzZmVmLCAweDBlNDU2YWJmLCAweDM5NGE3ZjliLCAweGMxODliZjliLCAweDBiNmZmNTBkLCAweGZhMDFiZmUxLAorCTB4ZmQyZjY5ZmYsIDB4YjViM2QyOWIsIDB4YTk1ZTFmZjMsIDB4ZjU4OWJmOWQsIDB4NzZlMTk0ZmYsIDB4ZmIwNWJmZGUsCisJMHg2ZGM1N2E3ZiwgMHgyYmMzZmU2YywgMHhjOWEzN2ZiMSwgMHgzMWZhMDRlZCwgMHhmNWFlODkwZSwgMHg1MGM5ZmVkMSwKKwkweDA0MGQyNTZhLCAweDQwZmRhMTcyLCAweGZkMWUzYTNhLCAweGQyMWE3NzA4LCAweDhiZGYxYzcwLCAweDI1NzZmNDY2LAorCTB4ZjIxYmQyOWEsIDB4YzNiMzJmMzMsIDB4NTI3Mzk0N2QsIDB4ZDM5YWFhYmIsIDB4MWNlNmM1N2EsIDB4MmMzZGYwMjMsCisJMHgzMTY0MjI0ZiwgMHgzNmEyZWExZiwgMHgzYzliZTkxMSwgMHhhNDhkZjI2ZCwgMHgyNmQwYmRlMywgMHhlOGJmMjE3YSwKKwkweGUwM2UyOWU5LCAweDMyMjYzNWFmLCAweDQ5ZGEwOGJmLCAweDNmZGYwMDI0LCAweDE3OThkOWZlLCAweGE3ZDJmM2Q0LAorCTB4NTNlNTFiOGIsIDB4ZGU0NWZjOTEsIDB4OTZiYTMyNWMsIDB4MTAwMmVmOGUsIDB4OWM3ZjJhODEsIDB4MTg2MDcxZGEsCisJMHgxZWVkNDg3ZiwgMHgxMzlmZWQ0MiwgMHgyM2VmZWIzMiwgMHhiZTQxZWY2YSwgMHg2ODdiZGE4MywgMHhlNjNhOTMzOCwKKwkweGRlYmFmMzU3LCAweDVmYzc0MTFmLCAweDBiOWY5NDQ0LCAweDZlMmY3OWU3LCAweDYyNGYwYTI5LCAweDVhZjhmN2ZiLAorCTB4MzFlYjA3YzEsIDB4NDUwYzc5N2YsIDB4YzUzYzc4N2UsIDB4YmU0ZDA0ZGUsIDB4MDdlYWM0YzYsIDB4MmY3YzEzNmYsCisJMHgwZGMzMDgwOCwgMHhlMWMxOTlmOCwgMHhjZDJmMTgxMSwgMHgzNmIzYjFjZiwgMHhiMWRlNzc0NywgMHg3ZGQxYjA1ZiwKKwkweDVkMDg2NmI0LCAweDU5OWMzMDhiLCAweGE0MGYyNWM0LCAweDU2NWVlZmVkLCAweGE3NmI4MzJjLCAweDgxODYxMDVkLAorCTB4YTE2NmIwOWYsIDB4Mzc2ODAyNGMsIDB4MDY0OTEzN2IsIDB4ZGUzYTBlMjcsIDB4ZmUwY2VkZmIsIDB4NTI3Yzk3MGMsCisJMHgyMzliNDdlZCwgMHg3NDQ1NWQ5YiwgMHg0NThhNzMzYywgMHg2OWFjZmYxYywgMHhlZDNmZjJkYSwgMHhjNjE5NzE4YywKKwkweDUzY2Q3NGQyLCAweDQ1ZGRjZmQ4LCAweGU3N2JmMmRhLCAweGI5ZjdmMzY4LCAweDU3MmE3OWI1LCAweDBmYWI5MDY1LAorCTB4NTNiZmU5OTQsIDB4ZGY4MTI0YjQsIDB4MDAxYmY0MzEsIDB4ZTM5MDdjZTMsIDB4ZDk1YWMxZTEsIDB4NmE1NzU5YWIsCisJMHg3Mjk1MWI3NiwgMHgwOWI4ODQ3MCwgMHg4YmRiMGJjZSwgMHg1ZmNmZWIzZCwgMHg3YjE3Y2RhZSwgMHg2Yjg1ZjliNSwKKwkweGRkMzlmMDc0LCAweDdmZWJlMjljLCAweGE2ODNlODFjLCAweDI4M2U4MWE3LCAweGZhNzI0ZjNlLCAweDJkNTVmMzA4LAorCTB4OWExM2RjN2QsIDB4NjUwZmEzMDYsIDB4YjYyNGE3MWUsIDB4MzNkNmE3MDQsIDB4MThkYzU4ZmEsIDB4OGExZTk5MTMsCisJMHg1MmUwZjQ0MywgMHgwZjQyOTdkMywgMHhmYzNkMzhmMywgMHg2OTQzZDM5OSwgMHhlZWFlOTY5MywgMHhjOWQ1YmUyMywKKwkweDZiMDNmZGI0LCAweDFkM2FlMTc3LCAweDNkMTk4YTExLCAweDg3YTE0MGZjLCAweGI4M2QwZDBlLCAweGQ3ZTgzZDM5LAorCTB4ODdhNzFlNmYsIDB4N2EzMDhmNzksIDB4MDc2N2FmZDAsIDB4YTY4ZTg3YTcsIDB4ZWI0OTMyY2IsIDB4MWQ3NGFlYjksCisJMHgwZWJhNzkzNCwgMHhhM2I3NzViYSwgMHg0N2FlOGExZiwgMHgxMDU4N2E0NCwgMHgzODlkMzc5YSwgMHg2NWU0MmZjZCwKKwkweGQzOGJkNjNkLCAweDAxYTc5NjAzLCAweDA5ZTIwOWRhLCAweGFjZjdhN2RiLCAweDI2ODRmOTRmLCAweDc5MTRkYTVmLAorCTB4MzZkYTZiZmQsIDB4ZmFhOTNkYWMsIDB4ZjJmMmQ1NWUsIDB4YmI3ZmI1NWEsIDB4MjY4Yjc5YTIsIDB4YTZmN2M0YmYsCisJMHhkMzY5N2VhNiwgMHg3MTdlNGQyZSwgMHhmYTlhM2JlMywgMHhkMjFjZDcwYiwgMHg3ZmJkOGJlNCwgMHhiZjlmZDRkNCwKKwkweGZlNTM1M2JjLCAweDRkNTllZDYwLCAweDE3NjUwM2Y5LCAweGRjZmJmOTM1LCAweGJmZDRkMzdmLCAweDEzZjA4ZTc3LAorCTB4YTJlZWZlNzUsIDB4ZWJhODlmYTgsIDB4YTcxNjlhY2YsIDB4MGQ3MGNmYzksIDB4ZWMzN2Q0ZDIsIDB4YTAyZWY2YmMsCisJMHg4YmVmODNjNywgMHg0ZjhmZjQwNCwgMHhmZmQxYTc5ZCwgMHg3NjUzYTlmOSwgMHgxZTkzOWQ0MiwgMHg1MzgzZWUwNywKKwkweDllOThkMTllLCAweDlmNzEzOGYxLCAweGMyNGNmMzljLCAweDFlZGI0MmY0LCAweDJhMTVjODBiLCAweGM4ZTA0YjQ3LAorCTB4OTZlNTc0YTYsIDB4MjBkOTM1YmEsIDB4ZGZjYTA5ZDcsIDB4ZDQ2Zjk1OGEsIDB4YjIxMjg3NzksIDB4OGE2Mzk0MTQsCisJMHgyMzI2YzJlZiwgMHg0NDIwNGMwOSwgMHhjN2M0ZTEwMCwgMHhlNTU1MTQxNSwgMHgzNzk0N2QxZCwgMHhkMDkxNDE1MSwKKwkweDIzYjBiY2IzLCAweDI3OWFmN2YyLCAweDIzZGI4NzhiLCAweGY3ODQ3ZjljLCAweDdhMDIxOTM1LCAweGU3MmY3NzUyLAorCTB4MjkwMjk1MjQsIDB4NjQyNzdmNTIsIDB4YWQ4MWYyMDUsIDB4MzRhOTRmNWMsIDB4Yjk1MTdlMzIsIDB4YjEyZTUwNzUsCisJMHhhYTMwM2U0MSwgMHg2YmZhYWJmNiwgMHgyMDZjOWJhMSwgMHg2NmJhNDlkMCwgMHg1ZDM2OTczZiwgMHgwNGY3ZTFhZiwKKwkweDQwODljZmJjLCAweGRmMzQxMzZmLCAweGQ2NmY5YTJiLCAweDI1ZGFlYmI0LCAweDgxYWJiOGUyLCAweGZkYjk1MDk3LAorCTB4NTI3YTI5MmEsIDB4ZDgxNTNlMDQsIDB4MGM2YjMyOTMsIDB4MTRmNWQzOGMsIDB4NTExMmRiZTYsIDB4MzRmMmVjOGYsCisJMHhjN2YzODVhZiwgMHg0YzE2OWU3MywgMHgzMGRhNzhjZiwgMHhhYzA5ZTUzZCwgMHg5M2MwNzM4NSwgMHgxZTk4MDM5ZSwKKwkweGRhNjNiNGY3LCAweGU5ODYzOWUxLCAweDRjMGU5ZTQ3LCAweGMxOWNmNDNmLCAweDIwOWU0ZmY0LCAweDlmM2NjN2E2LAorCTB4NDNjNDdhNjEsIDB4MGU3MDAyN2UsIDB4ZmU5OGNjN2IsIDB4YjRjNzYzYzEsIDB4ZTk4YzkzZGQsIDB4ZmIwZjhmMDUsCisJMHg1ZjVkZjY1MSwgMHhjYjg2Nzc3NCwgMHg3ZjQwNzNlZCwgMHhiYjZjZTgxMSwgMHhjZDZlYWM3OCwgMHhiZDlkMzBkMCwKKwkweGE0MjNmMmI5LCAweDg1Y2YwNTMzLCAweDBmNGUyNjRkLCAweDA4N2ExYTQ5LCAweDIzNzdlZDgwLCAweGU1MWY0YmQwLAorCTB4YzNhNzMyNGQsIDB4MmU0N2RhZGUsIDB4YmZlMTc5YWYsIDB4N2NhZWRlODcsIDB4ZDMwYjdhNGIsIDB4M2QxZDEwZDMsCisJMHg0ZjQ1ZjdhNSwgMHhlOWU5YWExZiwgMHhlNGNlYzE4YSwgMHgxZmE3YTcyMCwgMHg3ZDZiNzNmMywgMHgzYjEyNTFiZiwKKwkweDc3ZTkwY2E3LCAweDgwMGNkYmFlLCAweGRjZmNhNWFhLCAweDk4Njk5MDg0LCAweDVlZmJjNGJmLCAweGEzYjVjMTQ5LAorCTB4MGQxYmU4MWUsIDB4ZThkMmViNzIsIDB4NzM4MjhmYmYsIDB4ZThjNzRiODcsIDB4M2VmNmE3ZTIsIDB4ZjQ5ZDNkM2YsCisJMHhkYTE3Nzc4ZSwgMHhiYTNlMjU0MywgMHhjNjExMDllOCwgMHgxYWYwY2QxYiwgMHhjOGQzMjA2NSwgMHg0NjFhNDI3OCwKKwkweDkwNWNlNGJlLCAweGM0ODk3OTgxLCAweDczOWY3YjQzLCAweDNhZjM4NDQ2LCAweGMwNmI3NTQyLCAweDVkNzg1ZjZmLAorCTB4MTYzMmJkNjksIDB4ZjY3YTlkZTAsIDB4NWU5MDU5MWYsIDB4ZjQ3NWZhZTEsIDB4N2NmNTExMWUsIDB4MDlkMTc4MTIsCisJMHgyNWM5MGRmOCwgMHhmYzE5MzM5MywgMHg0NjkxYzFmMywgMHg2NDA5ZWEzYiwgMHhkZTdmMTZiYSwgMHg2YmY4MzVkYiwKKwkweGNmY2U1NTQ4LCAweDdmMTE5MzFiLCAweDFhOGNhZTIzLCAweGY1ZmMwZmQ0LCAweGMyZmJkZmM1LCAweGY3OTgwMmU3LAorCTB4ZmIzZTAzN2YsIDB4ZjE3ZDhmZTIsIDB4YmM3MmUyNDUsIDB4ZGZlNzQ2ZDYsIDB4ZjhjYzczYmQsIDB4MDdjMDFjYzcsCisJMHhjYWRmMWFiZiwgMHgzYzdlOWM3OSwgMHhiNWY0OTJmOSwgMHg0OTNiYjhlOCwgMHgxNGY2ZTNhMSwgMHgyNGQ4NWI4OCwKKwkweGE1ZmUxMWRhLCAweDYxNjI2YmQ2LCAweGZhNzA0MjVkLCAweGVkZTE0ZjU4LCAweGJkODBhNzNmLCAweDBiNTUzZTdmLAorCTB4ZWYwNzRiMmYsIDB4NmQxNzgxZDIsIDB4NGQyZDc3NjAsIDB4MzI3MGQ4NWUsIDB4NjkyODNhYzIsIDB4ODM1ZDRiNTUsCisJMHhiNjg3YWQ0NSwgMHgxYTk3ZjM2OSwgMHgzODJkNjk4NSwgMHhlY2VjNDcyZSwgMHg2YTI3MjAzMSwgMHg1ZWRmMTgxYiwKKwkweDY3MDJhOThlLCAweGY2MDk3MjY5LCAweDNkMzlhZTczLCAweDNlN2JkOTk2LCAweGM3MzYwZmM2LCAweGU3MzhiZjIxLAorCTB4ZmZmYWMzMjksIDB4MDZmNGYxZWMsIDB4MjEwZjE5NDcsIDB4MTk4NGU0YWQsIDB4NGIyZDMxZjgsIDB4YWY3ZWJkZWYsCisJMHhjNWZkMmNmNCwgMHg3ZWRkZTc4OCwgMHg4OWU4MGFmOSwgMHg5N2RmZmE2NiwgMHgwOTEwNzc2MCwgMHg5YWRjMGFmMywKKwkweGJhNmJkMTE2LCAweGQ2NmZiZTAxLCAweDM5ZGI0N2Y0LCAweDJmZTIzMzk0LCAweGRmNmFiZWQzLCAweDQyOTRlNDQ4LAorCTB4ZDQ1ZTU0YjcsIDB4ZTc4MGJkODMsIDB4ZDQxYTRiOWIsIDB4Y2I1NTU5N2EsIDB4OWFmOTM1NzcsIDB4ZDQxYTQ3YjYsCisJMHhmYzA1NWM3YSwgMHg1MjVmZjI4MywgMHgzNzQwNDgyYiwgMHhiYThjOWM5NSwgMHg4MTFhY2IyNSwgMHg4MjE4YWY4ZSwKKwkweDA4OGY4MDRmLCAweGI5OTU1ZWFjLCAweDlmYTZlOGMzLCAweDc1YjJiN2NlLCAweGU3N2M2ZGViLCAweDg4NTRlNjNjLAorCTB4MzczMzI4M2IsIDB4NTk3MjM5ZTIsIDB4MjBmOWI1Y2IsIDB4YWViN2NlNjcsIDB4NWJmOTAyNGMsIDB4NWVmYTVlMjEsCisJMHhiZmY2ODQ1MSwgMHg1ZjJlMDQ5NCwgMHhjZjU2YTBlNCwgMHgyODQxZjRlNywgMHhlOWJjZDU1YywgMHgxN2MyMTJjZiwKKwkweDk4MTk3N2NkLCAweGI3MGY0NjVmLCAweGJlOTFjYjhkLCAweGY5YmQ1M2YwLCAweDhlY2RjMTUwLCAweDZlYWE3ODllLAorCTB4MjM3NDY4YmIsIDB4Y2JmZmE0NWYsIDB4YzE0OWUzMGEsIDB4ZDQ1NGIxNWYsIDB4OTc3MWQxMjYsIDB4ZmZhMjc3MzcsCisJMHgxZGVjOGNlMiwgMHhlMGFmODNmNSwgMHg2N2U3M2Q5NywgMHhhMzE1M2U0OSwgMHhiNDk3OTc5YSwgMHgyNjBiM2Y0MywKKwkweGUzODg4ZWYxLCAweDFmMjgwZmRlLCAweDk5NWJmYjNmLCAweDU3MjIxZjAwLCAweDc0MmNhZDY5LCAweGM3YmI3MGNkLAorCTB4NjE1OTBjNDAsIDB4NmI0MTY3YmIsIDB4ZmJlMDIxNDUsIDB4ZDFkM2ViZWMsIDB4OGE0NDViZWUsIDB4YTQwZWI4NmMsCisJMHg5Y2VjMGIzMSwgMHg3MTgwYzRmMywgMHgxZmM5ZTc1NSwgMHhlYjU0MTM2YywgMHhlNDY0YjFmMCwgMHgzMDVjYTY3OCwKKwkweDEwMzRiYjg5LCAweGQ4MTA3YmJlLCAweGY1MzlhNjVmLCAweGY4NThlMmVkLCAweDkwNzYyOTJlLCAweDE1Y2EyNWYwLAorCTB4MTdmMTgwYjcsIDB4MmY3N2Q4NzMsIDB4ZmQwMWQ3MzEsIDB4NjM0YTdiNTIsIDB4NGE3YjUxYWYsIDB4OTRmNmE3OTMsCisJMHg2NjQyNWYyNiwgMHg0NTNjNDEyNiwgMHhmMTMyZDNjOSwgMHg0ZDI3ODgwOSwgMHg4ZWM5NDFmOSwgMHhiNTI1MmJlMywKKwkweGZkMWZhMGY1LCAweDE2ZTFmYjljLCAweDg0MzQ4OWQ4LCAweDM3YWE4N2NhLCAweGE2MmFjYjllLCAweDk4OTJlOWYzLAorCTB4MGY4OTRiZmYsIDB4YzU2NTQyNTgsIDB4NWU1ZTVhMjAsIDB4MmNiYTMzZTYsIDB4YTI3N2U3M2QsIDB4OTQzZGMyNzUsCisJMHgxNjNjMDNmMywgMHhkMWJmNzAwNywgMHg4ODZiZTJjNywgMHhhYWUyY2E0MywgMHhmM2VmNWE0ZiwgMHhiYTJhZDgxZiwKKwkweDhmNTA2Y2EyLCAweDliYzY1NzdlLCAweGFmZTdmNWZhLCAweDRmMjEyZjlmLCAweDliY2EzY2UyLCAweDU2MWM2MDY3LAorCTB4M2UwNzc4OGYsIDB4NzA1OWI5MWYsIDB4MjdlYzIyZjksIDB4ZjEzNDE2NTEsIDB4YzMzMjA5MmUsIDB4MWFkN2UyOWYsCisJMHgwZjVmY2JhZSwgMHg2YmRmOTU3OSwgMHgxYmZjYWVhMiwgMHg0NDAxOTdmMywgMHgyNThhNWZjMywgMHg5MTM5NzBmNywKKwkweGJmYzAxM2YxLCAweDdmNzEwNTIwLCAweGM5Zjg2MzdkLCAweDJmNWZlMDNkLCAweDg0NGZmOGRmLCAweGVmYmI1NDNmLAorCTB4ZmY4OWZjMjksIDB4ZTg4ZmYxZDQsIDB4NDhiY2ZlMzEsIDB4NzhkZWFiZjAsIDB4Nzc4ODc1ZjUsIDB4Y2ZkNWZmMmMsCisJMHhiN2VlODQ2YywgMHg5MjYzNTJiMywgMHhlNTdiYWU5MywgMHgxNzM2ZDVhNiwgMHg2YmM5MWRmMCwgMHhkNjcxN2Q4MywKKwkweDQ0OGI0ZTI3LCAweDc5OTdkZjBmLCAweDU5NzExZmRjLCAweGMyYmJmMDA0LCAweDczZmMyOTNmLCAweDRlZjhmY2FmLAorCTB4NmNhZWEzYjAsIDB4NGZlOGVkOTIsIDB4NGMwNTM2NmQsIDB4NWJhYjllOTQsIDB4YjE5MjE0OTcsIDB4Zjk2NGVmOTgsCisJMHhmZDAyMmY0NywgMHhjN2M5YjRkNywgMHhmZTVhNzRkNSwgMHg0MTI1OWZjYiwgMHg5NGE1MTA3YywgMHg0ODY0ODYyMSwKKwkweDU0OWY2ODAzLCAweDAwYjhmYzZmLCAweDEyMWE4ZGY0LCAweDZmYWFmZGM0LCAweDE2N2ZmZDA3LCAweGQ4YjBmMjhmLAorCTB4MWNiM2RiMTgsIDB4ZDA0OTM0MWQsIDB4NWE2YWZkOWUsIDB4YjQ1MTdjN2YsIDB4NjlkYjdhNDEsIDB4YjJkNDZmZTAsCisJMHhiZTkwYmY0NCwgMHgzYmI3MTk1ZCwgMHgwMGViNjQyYSwgMHhjOTEzYWJlNCwgMHgwYWFiZTA0NCwgMHhkOThmODg1ZSwKKwkweDdlNWYyYjFkLCAweDFkMjc2YzY2LCAweGRmYzZkNzU3LCAweGJlMTUwNGRhLCAweDUyZTk3YjE0LCAweGZjNWZjMmNiLAorCTB4MWYzYmQxZGEsIDB4YTNmNzQwYmYsIDB4ZTQ1NWJmNWEsIDB4ZGI4ZGEzOTQsIDB4NTY5NjdlNGIsIDB4YzQxYjAxY2EsCisJMHg5MDZlNTU3MywgMHhiOWZhNWU5ZCwgMHg1ZjE3ZDVmMiwgMHhkOWZjMTY3YSwgMHg0NzM5MzQ3ZiwgMHhhZjE1Zjg1MiwKKwkweDEzNzIzYmVlLCAweDkxNmM1N2NkLCAweDY5YjIxNDA3LCAweGYwYTQ4NDU4LCAweGZmZDBkNGZhLCAweGFmMGY4Zjk2LAorCTB4N2RiNmY5NDcsIDB4ZjYxOGM3NDYsIDB4ZTFmMTg3ZmQsIDB4YjJkOGE5NzUsIDB4ZjRjNjQ4Y2IsIDB4Y2I1ZTQ3YzQsCisJMHgyNTg3NjMyZSwgMHg3NGI0ZmFjMiwgMHhiN2ZlODAxNiwgMHgxYWJmZTVmMiwgMHhkZDlkZWY4MSwgMHhhOTgxOTAyOSwKKwkweDYxYjlmMDExLCAweDgwODdlYTFmLCAweGJlNGY1YzI3LCAweGQzZjVhMTVlLCAweGViYTFhZmQ1LCAweGJmNDY3MjAyLAorCTB4ODU3YWZhNWUsIDB4NWMwMGJmOWMsIDB4ZjRhMWIzODgsIDB4MjFhZmRhZmQsIDB4MjY0ZmVlMGUsIDB4ZWNhMWUwMjcsCisJMHgzMDZjODdiNSwgMHgyZDUyZDM5ZiwgMHg1NmU3ZjNhMywgMHgyYmJmMDEyNywgMHg3NjQ5YmQ5MywgMHhiMmY3ZDk0YywKKwkweGZhNDYxZmU3LCAweDcwZjQzZDJiLCAweGJhNTdmMzEyLCAweDc2NTAxOTA2LCAweDNjYzEwNzdhLCAweDFiYmZhZjE3LAorCTB4ZGM0MjU5ZTcsIDB4Y2Y2NTg3NDgsIDB4OWEzZTQ1ODksIDB4Njk5MTJhN2UsIDB4OTNlYzIyNWIsIDB4OWM5ZjdjNGIsCisJMHgyZTJlODE3ZSwgMHg0NTY5ZTc5ZCwgMHhlNDQxZmMyZSwgMHhlOGJiZTE3MiwgMHhjZjk4N2QwZiwgMHg5ODkwNmE4NSwKKwkweGQ2Y2NkNGZmLCAweGQwNmM4MGViLCAweGZkMTBkMWM4LCAweGU1MTQ3YzZlLCAweGFlNjFiOWM3LCAweDU2ZWU3MDgxLAorCTB4MjgxNzk2MTMsIDB4NTM0M2M0NDcsIDB4NjI3NWIyMDcsIDB4NTFkYjA3NzIsIDB4ZGYwNzkzYjksIDB4ZWNiYjdlYTEsCisJMHg2OWFiMWE4YSwgMHhlOTQ2NzI4NywgMHg5ZmVmMTk3ZiwgMHhmNDFhM2I4ZSwgMHg5MTQ5ZDNiNywgMHg0NmUxOTFlZCwKKwkweDNkNTAwZjg1LCAweGFhNjc0NTQzLCAweGZmZjZjZWZkLCAweGRmYjYwNmM2LCAweDliZWZmZDk1LCAweGZmY2EwZDMxLAorCTB4MjNlZDk4NzIsIDB4OTc3MjA3NjgsIDB4MTAzMDJiOGUsIDB4MTZjZDc3Y2IsIDB4NDg5ODNmOTAsIDB4ZGYzZWQyMjAsCisJMHhhZTdkZjMyOCwgMHgwYmQzZDcyZCwgMHhjNDI0YmYxZCwgMHhmYTA2ZThhYSwgMHg0MDc1Yzc4OSwgMHgzNGYyNWY3OSwKKwkweGEzZTJhZjZkLCAweGFkYWZkMDM1LCAweDFmNjU1YzI3LCAweDcwN2U3Mjk3LCAweGY1YzFmODFlLCAweGQ2NDA3ZTYxLAorCTB4NWUyYmY2MjcsIDB4YmRmNjUyYjQsIDB4NWZlYzJjZjQsIDB4MGViZDVmYmEsIDB4MTE3MmJmZDgsIDB4Y2Q5M2ZmY2MsCisJMHg0ZmRjOGU3YiwgMHgyZDI3ZWRmNywgMHhmMmQ1YmVjYSwgMHgyZGJlZmQ1NSwgMHhjNjMwZmFkYiwgMHhlZGY3ZWI5ZiwKKwkweDQ5NmI0MzI3LCAweGJmNGI3ZGM0LCAweDQzYjdkYzQ3LCAweGY4NDdmZTNiLCAweDI0Yzc4MmFhLCAweDJhYWY5NmEzLAorCTB4N2MzN2IyN2MsIDB4MTZlNGY5ZWEsIDB4ZDU3ODgxZDksIDB4M2JmYTQ5ZjMsIDB4ZDI3YWIyNGMsIDB4MGE4NzQyYTMsCisJMHg0N2ZmOTVmZCwgMHg0N2UwNzBkNSwgMHhlODU1M2EyMSwgMHgwYWE3NDQzMCwgMHhhZGU3ZWExZCwgMHhmY2JlYTNjNSwKKwkweDUyMmRmMDIzLCAweDUzN2EyOTdhLCAweDRhOTVmM2M2LCAweGE2MDM4YjNmLCAweGM5MGZmNmVkLCAweDUwYjk3YzQ0LAorCTB4ZmRjNjkxY2MsIDB4ZjNhODA2NDMsIDB4NDViZTVkM2UsIDB4Y2JhNWRmNTcsIDB4YmJlYWU5MTcsIDB4NGQ1YWY5NzUsCisJMHgzZGI2Y2FmZCwgMHgxMDc0ODI0NiwgMHg5NzEzZDRkMCwgMHgzMTM5M2JmZiwgMHhmYWRkMTIyMSwgMHhmNWExYmY5OCwKKwkweDM5ZWUxMWEyLCAweGQ4ODI1OGQ0LCAweGJjNDE1ZTVlLCAweGRjMTkxZjEwLCAweDUxYjllMjIxLCAweDNkNzFjNTM3LAorCTB4YTczNjM3ZjgsIDB4OGY5NGJjZmEsIDB4N2U2MjhlYWMsIDB4ZDA3YjZlODUsIDB4ZDVkMzRmMTYsIDB4NGMxZjJjNzEsCisJMHgxZjAzZDYzNCwgMHhhMzA3YmU1NCwgMHhiYmIxZGY5OCwgMHg1MzhiNjgyOCwgMHg3ZTlkNWJkOSwgMHg4Nzc4ZjkxMSwKKwkweDBkYmRmMjJmLCAweGRkNzA2OTJhLCAweGQ3Yjk3YTNiLCAweDc1OGY5Y2ExLCAweDYyYzZkYjQ3LCAweDNlMjlkMTdmLAorCTB4YTJhOWM3YTAsIDB4ZjgzOTY1MjUsIDB4Mjc0NTFhYTEsIDB4ZWE4YmVjZTgsIDB4NzljMWI1ZWUsIDB4ZmQzZmI3NTUsCisJMHhmYmY0MzlhZSwgMHgxNjQ0NzdlMiwgMHg0OTc1ZTM4ZSwgMHhkMDc2NTQ4MywgMHg5NzVkZTIxOSwgMHhmMDVjNDAyZCwKKwkweDg1OWZhNDVhLCAweDJkMTc2NjdlLCAweDNmNzkxYjVhLCAweDI1NzZmMzk0LCAweGUwNDY2NTk2LCAweDM5MGVkNGJiLAorCTB4NTFlZjNlYWUsIDB4ZDdhZDk0ZTAsIDB4ZTc0ZmY3N2QsIDB4ZWQxMWE2ZmIsIDB4ZGE4ZGYyZmYsIDB4OWZiNzM3NzIsCisJMHhmY2U0NjQ3ZiwgMHhjNzE5MWM2NywgMHhiZmU2NTdlZCwgMHhhYTdiN2NlMSwgMHgxY2Q3NzE5OCwgMHgwN2RkM2ViYSwKKwkweGY5YTI2MjQ0LCAweGQ3MTE3ZTRiLCAweGMxNjZkMmU3LCAweGUyMzdmZTA3LCAweDU3ZmRjNDRkLCAweGY1NDY4MjRkLAorCTB4ZDgyZTg4N2QsIDB4Y2VmNGQ3NWYsIDB4ZmZiNmJhYzcsIDB4NDAwN2ViMzksIDB4MzA3ZmFmNDcsIDB4ZGE2OWRmZjYsCisJMHg0NzFmZmFmNSwgMHgzN2Y5MDViZCwgMHg0MDdjYTY4ZSwgMHhkYmNmZDY3YSwgMHgwMmYxODUxOSwgMHg0OGFkM2JkZCwKKwkweGRlM2JkZGZmLCAweGU0MDFmOTRiLCAweDYxMzkzNGRmLCAweGZmM2JkZDljLCAweGE5ZTgxNjNhLCAweDBjYTk4NTdiLAorCTB4MzBmNzYwZjgsIDB4Yjk1ZGJmZTYsIDB4M2I2M2FmZTMsIDB4YzJhZWZlNTAsIDB4MWEzNjZjNzUsIDB4ZmZjOTlmOTksCisJMHhkZWUwOGY4ZiwgMHg5ZDNmMjVjMiwgMHgzYzE3ZTgxNSwgMHhkN2U2YmVhZSwgMHhmMDgyM2U1MSwgMHhiZWE1OWFmZiwKKwkweGU3NmRmNDBmLCAweDQzZTNjZDUzLCAweGNlNjRhZGJhLCAweDFjNWYxODU2LCAweDc5YTg3ZjhiLCAweDc1OGJmMjZiLAorCTB4ZDZhYWZmYjQsIDB4YjQ4NWM2NWQsIDB4Y2ZlZGVmM2MsIDB4ZmQxYzYyYzcsIDB4NWQzN2E2NTYsIDB4ODc5ZTNiOTAsCisJMHhjNjZkODdmOCwgMHgyOTk0YWNlZiwgMHgyNmMwMmY5ZSwgMHg1ZGY2NDZhMywgMHhiMDc5MzVhNiwgMHhlNWUyN2E4ZiwKKwkweGY1YTdmNDczLCAweDFhZWYxZjE3LCAweGFmZmQ3ZDk5LCAweGM1YzEwZjhmLCAweDY3ZDU5ZmY4LCAweDdmZGU2MDE2LAorCTB4ZjQwM2U4ZmIsIDB4MmU5MDlhODMsIDB4ZDI3ZWY5OTUsIDB4NGNmYTg3NTIsIDB4ZmIzZWYzNWYsIDB4ZmEwZTg2YmYsCisJMHhkMDIxNmYzYiwgMHg0ZDliNzk5ZiwgMHhmZGViZGFmZiwgMHhlYjgxZDFiOCwgMHgzZDA3ZGZhMiwgMHhmN2M3N2NlOSwKKwkweGQ1YWFmZjMwLCAweDI3ZWRlMzg5LCAweGZkMzY4ZmJkLCAweDViZWViNjNmLCAweGZhZGJiYWU5LCAweGZlNzdmNzllLAorCTB4ZmJkZGU3YzUsIDB4OGYzM2JmYmEsIDB4Y2UxZGJiYWYsIDB4ZmVkZTZiNTMsIDB4NzVmN2M3MWMsIDB4ZmZlOTVjZjksCisJMHhmNDU3YmE1MiwgMHhhZDQzNzZmZCwgMHg2ZjhlOTMzZCwgMHg4MmI0NjkwZSwgMHhlMjVmNzE2MiwgMHgwM2E2NGIyNSwKKwkweDBmMmY3MGEyLCAweDM4M2JmOGMwLCAweDU3NjA4ZDVmLCAweGJmOTg5OTM1LCAweDU4MTgyNGNkLCAweDgyZGRkYWJjLAorCTB4M2I0NDQ3ZTIsIDB4NWZhZTRlZWIsIDB4MGNiNDM5ZGMsIDB4NWQzYjkwZjUsIDB4ODI3ZDQxM2YsIDB4MzllZGI1NDgsCisJMHhlZTdiN2ViNCwgMHg2YWM2Mjc0MiwgMHhkY2M3ZjE5MiwgMHg4NTNkOWY5MCwgMHhlNmY2YjVlNywgMHgxMmUyMDRlZiwKKwkweDY3N2Y3ZWE4LCAweGEwMDNmNGVlLCAweDEyZTVkZWU3LCAweDI5YTYwZjUxLCAweGE3ZWZiZmVhLCAweDkzZWZiMDE0LAorCTB4N2RkMGY2YjQsIDB4ZGVmZTZkNmUsIDB4ZGRmY2RhMzksIDB4ODQzZGRlMWMsIDB4MjI5ZWZmOGQsIDB4NTg3ZTA3YzEsCisJMHg4OTUzY2U1MywgMHgyZDM1OTdlMCwgMHgwYTkwODk5NiwgMHhhYmI1NDY3MSwgMHhiYmI4ZWVjMSwgMHgxOTdlZGI0OCwKKwkweDdmMmE2NzI4LCAweGUzYzUzN2UzLCAweDVjNzg0MzZmLCAweDM5MjE3ODhhLCAweGVkMDNkZTIyLCAweGRjN2M4ZjEzLAorCTB4ZjljN2IzZWQsIDB4NDg5YWNlMjAsIDB4N2JjNzg2NGUsIDB4MzdlODljYWEsIDB4Y2NiOGY2ZTcsIDB4MzU5NmNiZGIsCisJMHg2NTlmYjBlZCwgMHhkOGFlMWQ5ZCwgMHg5YmUxYmRkMywgMHhlMTFjZmI3MCwgMHgyZmYxODVhNCwgMHhjZmI0NDRiYiwKKwkweGFlN2Q5ZDY1LCAweDVkZDdjYmFjLCAweGJmMWQ2NTBmLCAweDA3M2NiYWVkLCAweDc4NjM3MmViLCAweDVjNWE4NjVkLAorCTB4Y2NhYmY2MDQsIDB4OGI3Yzg3ZWQsIDB4MTY4N2U1OTMsIDB4ZThhZTc2MTEsIDB4MDBkMmZhYzMsIDB4ODQ2NmYxMTcsCisJMHg5ODk3ZDFlMywgMHg5Y2UwMmI4YiwgMHg0MDVhM2NjYywgMHg2YjVkYzg3ZiwgMHhlNjBmOTQ0NSwgMHg1NWM3MDEwYywKKwkweGY4YzY0OTM0LCAweDQ1MGQ4ZmUzLCAweDg1ZGViMDU5LCAweDdmNTYyNjEzLCAweDA5YzMwZDlmLCAweGYxYzI1Y2Y4LAorCTB4NTE2YTQyNWUsIDB4YmY1NzI1N2YsIDB4MGIzYjMyZmMsIDB4ZWEwODI1Y2UsIDB4ODQ1YzRiYmYsIDB4YjhlZDQxZGMsCisJMHgxMDIxNmM5MiwgMHgxMjZhZjEwZCwgMHgwNzhlYzZmMSwgMHg4ZTQwYjkzZiwgMHhkYWU0ZmM2YiwgMHg0OTZlZmMzYywKKwkweGFiZTljMzBhLCAweGU1ZmM2ZjdlLCAweDE3ZmU5ZDlmLCAweDI5Yzc2N2U1LCAweDNhNDI3NDkxLCAweGQ0OTdiYjEyLAorCTB4M2Y3Y2Y3NzYsIDB4YTU0ZDYzYzMsIDB4YmE0MzRiZTAsIDB4ZmJlYWM4MGIsIDB4YjY2NjA1ZDMsIDB4ODdlYmZlMGYsCisJMHhlNjRmOTAxMywgMHgyYzRjNzRmYywgMHhlMjY0MDdmMywgMHg2ZTFhYzQ3ZCwgMHgzYWYyNWMzNywgMHg3NjBmYzE2MiwKKwkweGNmY2U5ZmM5LCAweDZhNmNmMzczLCAweDg3YTRhYWJlLCAweDlmZmUxZGI4LCAweGQzNDg5NzEwLCAweDUxYTE3Y2VlLAorCTB4MDQ4YjNiMDQsIDB4Y2RlYmZmZDEsIDB4YzU3YmMyOGYsIDB4Y2NhMzc2ZmEsIDB4NmJhZmJlMDYsIDB4M2YwMDJmZDEsCisJMHhmMmFmZWUxMSwgMHhhNmQyOTQ3OSwgMHg3NWFhZjFiMSwgMHg1OWM3N2I1YiwgMHg3NWNmNmM2OSwgMHhkNTcxZGY4MCwKKwkweGM1YjdkZGY5LCAweDgwZmRkODJmLCAweDFkNTE0M2Q3LCAweGU2MTE0NTA1LCAweGFmZTM4OTNiLCAweGYwZGZmNzcwLAorCTB4N2Y0Y2VhZmUsIDB4OTk3ODBjYWEsIDB4Y2U2YTJmOTksIDB4ZWU2NjlkZjksIDB4MjY0MDk4Y2YsIDB4NzcwYWI4YzAsCisJMHgwYzliNjZkZiwgMHg3NDQwNzJlYiwgMHgxYWQ1N2RjMiwgMHgzYmEzNDVmZiwgMHgxZWIxZjljMiwgMHhmYzFmMDA5ZiwKKwkweDY3NjQyN2YwLCAweGM0ZjNlMDA5LCAweGQ4MDhhMjRmLCAweDczZjFlZmQ1LCAweGNmYjgwY2M5LCAweDFlYWU4MTkxLAorCTB4NzMxZGY4MTcsIDB4Yjg0ZmNjY2MsIDB4NzRjNzZjY2UsIDB4OWM4ZTYxNTYsIDB4NjhjZGZiNDgsIDB4NTA4MzhmYjUsCisJMHhmZWJjYzFiNSwgMHhjYjAzYjMzYSwgMHg0YTc2ZjA4NywgMHhhYzk1YzFiZCwgMHg1ZWQxYTc1ZSwgMHhiZmZlNjkxZCwKKwkweDc5ZjgxMjhiLCAweDkzN2JmMzk5LCAweDc1YmQ3Zjg0LCAweDM1YTlmOWNiLCAweDQxZmEwYjkwLCAweGQxNjdlMmJlLAorCTB4ZmRjMTM1ZDMsIDB4ZTA5YTY5NzEsIDB4ZjYwZGY5MDMsIDB4MDUwYmU2MzAsIDB4NTNkZTFmZDQsIDB4NjRjZmFmZWUsCisJMHg3YmExNTY3MiwgMHhjZGFiOWUzZCwgMHgxZTAyZjdkYSwgMHg4ODdmNzhlNywgMHg2NzgyODdkMywgMHhmMWZhYmYwNSwKKwkweGJmMjlmNTJhLCAweDlmZWQ1NWJhLCAweGRjNmRhYmJhLCAweDU0ZGZhMDZiLCAweDgxYmIwNWZiLCAweDNhOTZhYTgyLAorCTB4NmIwZmIwOGMsIDB4ZTE5MDllZGEsIDB4MDczZWU2N2MsIDB4YTJhNDRiODMsIDB4ODNmOGVhYjEsIDB4MGYxNjY2NzUsCisJMHhjZGZjNjdiMiwgMHgyZTRlODBmMywgMHgyYzgxMzVhZiwgMHgxNzQ1YWUyNCwgMHhkZjg3YzA2ZCwgMHgwZjdmMzgzMywKKwkweGRmZGU2YzcxLCAweDU3ZDM2NDg5LCAweDNjMGZhYmYwLCAweDU5N2NmMmY2LCAweGU3MTUzNzBkLCAweDQ3MzJhYjMzLAorCTB4MDNkYTc3MDYsIDB4ODFlNGJiOTUsIDB4Njc1YTdhMmEsIDB4ZTU3MmM3OGUsIDB4MDc0YWUwZmIsIDB4ZmI0MjBmYmUsCisJMHgxZjc4NzFjMywgMHg0ZmI4MTEzNywgMHg4ZWQyZDE5MiwgMHhhODFmNmNmNywgMHg1ODc0NjM4ZCwgMHg4OGNiYjJkNiwKKwkweDdiY2Q1NGY5LCAweGZhM2Y0YTIyLCAweDUwYmIzNGZkLCAweDMwYmNhZjFiLCAweGUwMjg2M2FmLCAweDU4MTRkMGE1LAorCTB4YTc0MDhjZTYsIDB4NzM5NGEzOTMsIDB4MjcyOWFmY2EsIDB4Yzc2ZTk0NWMsIDB4MjcyNDdmZmUsIDB4YTI3MjI5OTYsCisJMHg5NWUzZTMwMywgMHhlN2RmMDJmNiwgMHgzMDMxMzkyYSwgMHg1YTU4OWM5MiwgMHhlYjA4MThlNywgMHhmYTQ3NzRiMCwKKwkweDRiMjRkODQwLCAweDE0OWE5OWRmLCAweGVmYmM0ZTQ5LCAweDQ3Y2NlNzYxLCAweGVlZjY3ZGY5LCAweGRjNGU1NGQ5LAorCTB4YjMxMzkyYTAsIDB4ZjQ0ZTkwYTMsIDB4ZjY1MTNlZWQsIDB4NDI3MjVmNDksIDB4Y2JmZmI3NTksIDB4OTA3ZGU2ZmMsCisJMHhmN2Y2MTExMywgMHg3MTM5M2ExNywgMHhlNTE4YmY4ZiwgMHg0NWIzM2RjNCwgMHg0ZmFjYmRjZCwgMHgzOTEzOTRmYiwKKwkweDVlNjFmNzQ5LCAweGEwNDRjNjc2LCAweDdkYjlmNzlmLCAweDBiZGY5NDczLCAweDVlNDA3ZTgwLCAweDExZDk0NjY0LAorCTB4ZDFiOTdhNmYsIDB4NTNmZjVmMWIsIDB4ZmZmYWY5N2YsIDB4YmUxNTllMTAsIDB4M2ZkYTk0YmUsIDB4NzQ0OGQ0YTYsCisJMHg5NzllOTA0OCwgMHhiYWY5NDdkZSwgMHhmOGM4ZjQwMCwgMHhiOTA3ZDJmYSwgMHg2N2M3NTM5ZiwgMHg2NmNmODA4YiwKKwkweDZiMmNmOWFhLCAweDcyNjZlZDVmLCAweGY1MmRhNmExLCAweGZjYjRiOTk5LCAweDA5ZDk0NmZlLCAweDMwZmVmMmEyLAorCTB4ZjM1MmNkZGYsIDB4NWVhOGNjZGQsIDB4ZTMxOTZlZjgsIDB4MTNmZDk3YmIsIDB4NmRlYTdmNTAsIDB4ZmNlNjdmN2UsCisJMHgxMWIzZjI5NiwgMHgzMWY0MDhjZSwgMHhlNjhjNmU2NywgMHg3MTg5ZGVkZSwgMHgwNmQ4YzliZiwgMHgxMTNkZTVmYiwKKwkweGU2M2Y3OWNmLCAweDcxYzFjMDdhLCAweDdkMDRjOWJmLCAweDllM2U0OWZhLCAweDJmM2Q3Yzc5LCAweDNlNzk0ODc4LAorCTB4MjJkZTVmYzUsIDB4NmQ1NzRmYTYsIDB4ZDU3ZjExMTYsIDB4NTdmZjZjYWQsIDB4MDczZTBiMzcsIDB4ZmY4YzE3Y2QsCisJMHg1NmQ3OWUxYiwgMHhiNWU3NjBlYywgMHgzOTg1MDY3NCwgMHg3OGFmZjVhYSwgMHhjZTFlYTNhZiwgMHgwODM2MmEwOSwKKwkweGY3MGNkZTc4LCAweGE1OWYwMDFlLCAweGNlMjU5ZjFjLCAweDI5NTczYzBhLCAweGMxZmFkMjZkLCAweDJmNmRhMjFiLAorCTB4MWUxMDFiOTAsIDB4NzhhYmMzZmEsIDB4MTA1MzQyZmQsIDB4N2YwYTFkY2YsIDB4MjAzNzM4MjksIDB4YWJiNmQ0OWYsCisJMHg1OWZiNzExYSwgMHg5YTJhNGZiMCwgMHgwZDlkZGY3NSwgMHgzNzA0YWU3OCwgMHhhZGFmNDFkNCwgMHg3Yjk2ZDE2YSwKKwkweDhiMTdiY2Y4LCAweDE0NmQ4YzgxLCAweGIzM2RmOTNlLCAweGY3NzhmNGYzLCAweGY2NTNmMWU4LCAweDg4NzNmMTJkLAorCTB4OWZmMzI3ZTIsIDB4ZmUyNTlmODcsIDB4ZjA1ZTc4NWQsIDB4YzdhMmYxNzUsIDB4M2YxNDVkNDcsIDB4MzI0ZjE4MWYsCisJMHg2YzdlM2Y2MSwgMHhmMTdmMjE3MCwgMHhiYmUyMmJiZSwgMHgxODllOGI0ZSwgMHhlNTBmNzlhOSwgMHhlZjJmMWNhNywKKwkweDgzZjVkYzE5LCAweDgwYjU1ZWEwLCAweDZmZDc0YWY1LCAweGYzNDQ5N2Q5LCAweDM4Yzg1YjczLCAweDZkMjg2NjM4LAorCTB4OTBlM2NhZDIsIDB4YTA3NTZmZmMsIDB4YmI1YjlmN2MsIDB4ZGFiODgwNDUsIDB4NjBiZWZjYzUsIDB4N2MwOWVmOTksCisJMHhlNWMxZTYzZiwgMHhmYWQzZGU1NCwgMHhkYzliYzcwYiwgMHgyODdlNWU3MCwgMHg1M2ZjODgyYSwgMHg0MDlkZGZhMSwKKwkweGZhNmY5NGJmLCAweDBjNGUzOGY5LCAweDljYTNlNjBlLCAweGI4ZWMxMzZhLCAweDRjNTEwMzJmLCAweDgyNzVkMTZlLAorCTB4NGNmNjZkNzcsIDB4NWYwMTZiZmUsIDB4NmE1ZmU2MTcsIDB4NDM1OGViNjMsIDB4NzVmNjBkZDcsIDB4NWJlNzlmODEsCisJMHg4MGY4M2U5OCwgMHhlNzNiMjJmZiwgMHhkOTkyZWZmNCwgMHg0OTAyMzhmYiwgMHg0NGU3N2U0MCwgMHg4ZjkxNWNmYiwKKwkweDkzOWFlZTcwLCAweDFkZGY1YWE0LCAweDM3ZmU4YzlkLCAweGUwZmM0ZTA5LCAweDM2ZmJmZmEzLCAweGJhY2JkYmViLAorCTB4N2Y0Y2ZhMmEsIDB4ZDNjMTU3ZDcsIDB4MWYzYWRkNGUsIDB4OWMyZjZhOGEsIDB4ODI3MmU3ODAsIDB4ZjIwYmRmMTMsCisJMHhkMTc5ZTFjNywgMHhmZWY2NDZjOSwgMHgxZmFlNDFjZCwgMHhkODA1ZjdlOSwgMHg3OGY3ZWExZiwgMHgyMWMwYzA2NiwKKwkweDE0NWE3YTJlLCAweGJmNjI5NWM2LCAweDUzM2Y0YzY5LCAweDNiZmQyOWYzLCAweDZlMzc1ZjQ4LCAweGEzYjQ4NmE5LAorCTB4N2Y4ZTE2NWUsIDB4MDY2ZWRmNzQsIDB4ZDA0ZDNmYjksIDB4MTlkMTQ5YzQsIDB4MjdmZmJlZTEsIDB4YmVhMzk3YzAsCisJMHgzNjQ5M2UwMiwgMHhjODc5N2NhMywgMHgxOWVlYmVjZSwgMHgxZWYwMjQ2NiwgMHgzMjM1ZTVkYSwgMHgwNmJkZDFkMiwKKwkweGUwNmM5MWM3LCAweDA0Yzk4ZjJmLCAweDgzZTVjN2Y2LCAweDNiOWQxZTM3LCAweGE0NDVjYTAwLCAweDI2ZjdlMjhmLAorCTB4YTU2YjgzNTQsIDB4OTFhYWM1OTgsIDB4NWM5ODQ3ZTIsIDB4ZmZmYmMxM2EsIDB4YWVkNzk1MTMsIDB4YTA5Nzc4NmIsCisJMHg3Y2UyN2IwNywgMHhiNjc0YmY3MCwgMHgwNzU0ZDc3MywgMHgwZjMyNWJmOCwgMHhjZjczODZhZCwgMHgyM2Y2Nzk1OSwKKwkweDFiMWQ2MDQ3LCAweGM3NGZiYmQ4LCAweDlkYTFlNGQ3LCAweDA1NzdkMGY2LCAweGU4Yzc2N2RjLCAweGJiOWMwMTdhLAorCTB4MzkxZWE3NjcsIDB4ZTBmN2M3NDIsIDB4YjczYzQ0OWEsIDB4YmM0YWViOWMsIDB4ZTczMWNlMDcsIDB4MGU5ZDE0MWUsCisJMHg1ZGUxNmY1YSwgMHg3ZjljMGI1NiwgMHgxMjJkMWY0ZSwgMHgwZjJmMGFiNywgMHhlZmY0NzY5MiwgMHhlZWZkYWRjYywKKwkweGNhNGZiMGRkLCAweGY3ODQzY2E4LCAweDg3ZmNjYTljLCAweGZjODQwZWE2LCAweGQ3ZGIwMTdhLCAweGI4NDZkZDc4LAorCTB4NzRkZWQ5ZTcsIDB4ZmI0OTk4ZDEsIDB4MDBmNWExMmYsIDB4NTllYjM1ZGQsIDB4MDI4ZDlhYmQsIDB4ZTI1ODE3YmUsCisJMHg2NGY5MDI3ZiwgMHgxZjAxNDZjOSwgMHhmYWE3NjljNCwgMHhmNWMxOTlhZiwgMHhiZWQxMjk4MSwgMHhmOWE3YjY5ZSwKKwkweDcwMGY2ODUyLCAweDAzZGRjNjM3LCAweDc0MzU5M2U3LCAweDUyN2VkODljLCAweDk3NTM5ZTFkLCAweDk4YjQ3NmQwLAorCTB4MmVmYzZmYjQsIDB4NWViMjViYzIsIDB4YjBhZjcwMjAsIDB4ZTNlYTUyNmMsIDB4NDFkZTAwOTMsIDB4NDdlNTA5ZDksCisJMHgwOGRjZmQ3NywgMHhmYjQ3OWVlMywgMHgyZmUxNDQxYiwgMHg0MmE2M2IxNCwgMHhjMTAzZjI3ZCwgMHgxNTJlZWY4ZSwKKwkweGJhZmI4YjVlLCAweDYyM2JlZjliLCAweDE0ZTJjZDFmLCAweGVmZGNhMjA0LCAweDJhZjFkNDkzLCAweGI4NjlkMTI1LAorCTB4ZDc5NjRhOWYsIDB4M2FiY2MzZDUsIDB4MDZhOTg5YmMsIDB4NDY4YmE3YTQsIDB4MjkyN2UzOTAsIDB4N2Y1NGRkYmUsCisJMHg3MTY0NjEzZCwgMHgyN2JjN2IzMCwgMHhmZTJhMWQ4YywgMHgxZDNhMzJiOSwgMHhjYjZhMmZkYiwgMHg5OGIzM2U0MSwKKwkweDg1M2M2MTE0LCAweDIzZTk4ZWJiLCAweDdjYTNhYjlkLCAweDk0ZWI1N2UwLCAweDdkZjAyOWVkLCAweDdlMTM2YWNmLAorCTB4OTMyYWYwYmYsIDB4NzU4NjE3M2IsIDB4ZjRmYjdmYTAsIDB4YmRjMDk5N2EsIDB4ZDNlYjk1YzcsIDB4OWUzYWMxZDcsCisJMHhlMTNiMmNkZSwgMHg4ZTdjNDBkYywgMHhiZTk0MTFjNSwgMHg3YjY0ZmNjYSwgMHhhN2I4MzNkNiwgMHhjYjdmMTk5YiwKKwkweDAyZWVlZTdiLCAweDk0YTVkYmUwLCAweDdlNzA5OTRmLCAweGUyNTYzZTVhLCAweGY1M2U0NzI4LCAweDRiZTMxNDVjLAorCTB4ZTdhNTdlN2EsIDB4MWI4ZDY1NTMsIDB4NjVhMWNiMjIsIDB4ZDBlNTkxMDUsIDB4MzdlZTdhZDAsIDB4NmI5ZjJjOGQsCisJMHhiYmU5ODU4OCwgMHhmMDc4YzllMywgMHgwZDU3MTY2MywgMHhmNDA0ZDc5YiwgMHg3MGJiMjBmYywgMHhmMzc4MWVkMCwKKwkweGRjODE5ZmQzLCAweDNiZTJiNGFkLCAweDdkOTJkNTY1LCAweDgzZThjMDlkLCAweGViOWZmZjAwLCAweGVjMjlmMmRmLAorCTB4NTFiOWIyODcsIDB4MjlkOTBlZjgsIDB4NDdkODBmNTgsIDB4MWNmMDEzNmIsIDB4OGM1N2M0YmIsIDB4NzllMjU3NzgsCisJMHhmNGI0OWI0YiwgMHhlZjIxZjhhZSwgMHhhNWM0OGI3MywgMHgzMTY1NWY5NiwgMHg3N2FhYTVjNCwgMHg2ZTk0NDdmNCwKKwkweGRiZjMzZjY5LCAweGNhYjAxZjA0LCAweGRjZWEzZmEzLCAweGU2MjY3MGZmLCAweGU1YWUzOGVkLCAweDZiNTgzZjVjLAorCTB4ZmEzZWJhNDUsIDB4NDBkNWM1YzgsIDB4Mjg3ZWYzYjcsIDB4ODlkYmQwMTAsIDB4ZjIwZjVkZDcsIDB4NzA0OWJhYjAsCisJMHhmNGI4OWY4MCwgMHgyOTdkYWM4NywgMHgzZWUzMGY2ZCwgMHg1ZjQ2NzNmYSwgMHhiMDFkY2U5NCwgMHgzZmQ3YWEwZiwKKwkweDZmZWIxZmIxLCAweGZmMDAxYzE0LCAweGQ0NjI4NmU4LCAweDIyYmNjYTI3LCAweDlkOGRmMmMxLCAweDc5NTA0NzY4LAorCTB4N2I2OGYxODUsIDB4ZWMxMjYyYmMsIDB4MjY1NWVhODMsIDB4MTU2MmI4M2IsIDB4YjNlODUyN2EsIDB4NDBhN2JmOTMsCisJMHhiM2IxY2VjYywgMHhiNDY3M2I2OCwgMHg5ZWIyZjkwMywgMHg0MjM5YzUyZSwgMHhmZDAyOWU0OCwgMHhiZDE5NzhkNCwKKwkweDNiMmFiZTc1LCAweDRkZjQ4YjYxLCAweGJkMWVlYzlmLCAweGQwMjI3ZjQyLCAweGZlOTg2NjVmLCAweDMzY2ZhY2Y2LAorCTB4ZjY5ZTNkMDIsIDB4OTE2NzE4MDksIDB4ZjQwYmY0MDcsIDB4OWZlMmIyZjksIDB4MWViNTE2MjEsIDB4ZWE3ZDE3ZDUsCisJMHhmZDA3YjBlOSwgMHhlOTU4Y2JjMSwgMHhlODU0ZmE2MSwgMHhjNzg3NGY1MSwgMHg4YzBmNzIyNSwgMHg1MWQ1YTFmYiwKKwkweGZhYmM4ZjM4LCAweGNlNTllZjM3LCAweGNmOWUxOWY2LCAweDkyM2ZkNWU1LCAweDQ0YmFmYjA0LCAweDBhNDA3MTYyLAorCTB4MTYyNGFiNWUsIDB4NWM2M2Q2MzcsIDB4MDcxOWQ3NGYsIDB4YmE3YzY3ZjUsIDB4MGU4YWNjNzEsIDB4MjBmMWVkYzksCisJMHg0YTNlYTliNywgMHhkZjlmYjQwMiwgMHhlMzExN2U2YywgMHhkMmJmY2YyYiwgMHgzN2VhMjc3OSwgMHgwMDNhNTE2ZiwKKwkweDkyYjY2ZmZjLCAweDNlMjFkYTAwLCAweGFkZTU0N2U0LCAweDEzNjljNjIyLCAweDRiMzU5MDI5LCAweDcxMmJiZjY1LAorCTB4YjJiZjE1MzEsIDB4YjdjYmJlMjIsIDB4YjQ4NTdjOWEsIDB4MjdlYmY5N2QsIDB4YzI1YzYyYzYsIDB4N2I3ZmE2MGEsCisJMHgzOWQ4MTE1ZiwgMHgyYzYzYjc4OCwgMHg5NzJhM2JkYywgMHg1ZThlN2M1OCwgMHgzNDVkZjgyZiwgMHhkZWJiYzNiMywKKwkweDdhMDM5OThjLCAweGRlY2NkMDliLCAweGI5NmYyYzE3LCAweGZjYTkzNjU3LCAweDY1YTJmYmJiLCAweDkzOWUxZWE1LAorCTB4YzMzYWU5NzksIDB4M2UzMDBhZmIsIDB4NGE3NmZiZjUsIDB4Y2JkNzRlNWMsIDB4ZGJjYWZlOGMsIDB4Y2FlN2Q0NjQsCisJMHg4MDVjYjc5YiwgMHg2M2YyY2Q3OCwgMHg2Yjc3YjQyNiwgMHhjMTFhMmY5YSwgMHhkNWZiY2Q5ZSwgMHhjNDFkZWNhYiwKKwkweGE3MTM1MTM2LCAweGFlM2UyM2Q3LCAweDIwOTgwYzU5LCAweDBhYjVhYmFlLCAweGJlNjg3MWNmLCAweDNjMmRmMzEzLAorCTB4YzY2YmVkMWUsIDB4NmFmYzU1NmYsIDB4OGE1ZWViYzcsIDB4YmY2ZDhhYzIsIDB4ODU3YmUxYjQsIDB4Nzg2YzliZWQsCisJMHhhYmY5YWE1ZiwgMHhjNDdiNTVlMywgMHhmMDM0YjVjMywgMHg0ZTNiYjg3OCwgMHg5MThmZTQxMywgMHhjMWNlZTFlMywKKwkweDdkMjEyODNmLCAweDg3OGRhZDE2LCAweGJmOGNjZDIzLCAweDQ1NjY3MWQxLCAweGE0MzUwZjdhLCAweGU5ZmFiZDc3LAorCTB4ZGRjZjEwZjMsIDB4ZTc5M2Y1YjUsIDB4NWY5NWRjNjEsIDB4ZTIxZTdlNWMsIDB4Njg4MmE4NmMsIDB4ZTZhNTNkMDcsCisJMHhmZTMxZjc5NSwgMHgxZjE3Njk1NSwgMHg5N2EwZWRjMywgMHhjM2YxODk3ZiwgMHg3MjY4ZmUxNywgMHgzYjBiYjQwMiwKKwkweGZlODBhNzRlLCAweGRmY2I2MTcxLCAweDc4MmUyMDkyLCAweGU4YTk4ZWQ5LCAweDNkYjY1OWRmLCAweGVkYmRkZjBmLAorCTB4ZmEwNTllY2QsIDB4N2UyM2Y1ZjUsIDB4N2I2ZWJmNTksIDB4M2M2MGY3NWEsIDB4ZWViYTc5ZDAsIDB4NzE0MjI3YzAsCisJMHgyYzU1MmQ4ZSwgMHhlM2MxZDQ3ZSwgMHg4ZTQ3MzcxYiwgMHhjZjExZWYxNywgMHhhZWViM2FkOCwgMHg1YjFmYzAyOSwKKwkweDY3ZDA5ZTk5LCAweGJhNjFlMzVjLCAweDYzZjQzNzllLCAweGY4ZjMzNzFkLCAweGJlM2I5NmQ1LCAweDNjZjFhZTMyLAorCTB4ZDdhZTgzZmMsIDB4N2M2ZDE4YjgsIDB4OGJhZGE3ZTgsIDB4OTQyY2YxN2YsIDB4MWFmNDI2YjUsIDB4MDdlODE4ZDcsCisJMHhmNDc4OTRmZSwgMHhkOTVkYTNjZiwgMHhkZWIwODkzMSwgMHhhNGYxODFmZiwgMHgwZTg1N2ViMCwgMHhhNjlmZDdlMCwKKwkweDhjZjhiZjgwLCAweDQ0YmY0NDFjLCAweGVmMDk4NzcwLCAweDM4ZWY5NjZiLCAweGMyZTlmYjhhLCAweGVmMTg0M2Y2LAorCTB4Zjg1Yzc4NGQsIDB4YjFmYTEyMDUsIDB4MDNlZTVkZjgsIDB4NjU2OGQ5YWEsIDB4MWQ3YzkwZjEsIDB4NjFkMjVlMjAsCisJMHgyZTNjZWZjMywgMHgxMmI1ZDE5MiwgMHg5YzViZDkyZiwgMHgzNDk4YjJlNCwgMHg4YjBiM2VmZSwgMHhmOGRhYWNlNywKKwkweDBjM2Y4ZjAxLCAweDA5MzA5YmFmLCAweDJiZjNhYmQ2LCAweDNjMTU1MGUzLCAweDEzMGYwMWQ4LCAweDkxYzA3MWQ1LAorCTB4NzE0MzUyZTMsIDB4ODM3NWJhYzAsIDB4MWUzZTA0ZjUsIDB4ZjlhNWYzOGEsIDB4ZTllZjEwYTEsIDB4OGE0NjhlMTMsCisJMHg4MWIwYmYyYiwgMHg5MDVmMGZjNSwgMHg1NjhmZGYyMywgMHg2MjZiODJlMiwgMHhkN2Q2ZmI3NCwgMHhiZWUwNzhiZiwKKwkweGYxNzVmMWU2LCAweGExYzYzZjM0LCAweDVmMDUxYmExLCAweGYzMjM1NzVkLCAweDg0NjMyN2Y3LCAweDg1Yjc2NDZmLAorCTB4MGE1NDliZWUsIDB4NGYyY2ZiZmEsIDB4OTk3ZGMwYzQsIDB4YmUyMzRlZDYsIDB4NTVkOGEyOTMsIDB4ZGM1ZGJlN2MsCisJMHg4YWY1ZDZkZiwgMHhmNWEyNzE4OCwgMHhiZjkwN2IyZCwgMHgzNTQ3ZjllYiwgMHg4ZmQxNDczZiwgMHg2ZjFmMjM3NywKKwkweDFmOTMxYjc1LCAweDNlYWQ1YjVkLCAweGI1ZDM4NTBiLCAweGViYTQ0ZGZiLCAweDE4OWRjZGVhLCAweDc5YmZiYWE3LAorCTB4NzU0M2IxOWIsIDB4YzNmMjBjZmUsIDB4ZDc3ZjFhYTcsIDB4MjJjNmJiNmIsIDB4YTJlZmU3M2YsIDB4Y2FkOWZiZTksCisJMHgzZjhkNjNmOSwgMHg5YjM1M2Y3MiwgMHhhOWZhNmEyZiwgMHhlZDE4YjZmMCwgMHgzYmZiYmU5NiwgMHgwNWVlYjkyNywKKwkweDk5ZGFlNzc4LCAweDQ1YWU3NTFlLCAweGQwOGJlNjljLCAweDY0NjJjZmZmLCAweDMyMzc1NzZlLCAweGEzOTUzODNmLAorCTB4OTU5YzNlZjgsIDB4ZGEyNzA3YmQsIDB4NWIyZjUxYTIsIDB4MGM3NDlkNjYsIDB4NjY1ZDIxZGUsIDB4Y2M1YzYyMzUsCisJMHg0NzFlM2FjYSwgMHgzMjY3MjNmMywgMHhlYjRhZjdhYywgMHhiYmM2MDRlZCwgMHhiMmFiZjAxYSwgMHg5YmJiNjVlZiwKKwkweDI3MjczZTgwLCAweGNmYWE2NTE3LCAweDFiZjE5NDYxLCAweDRmODgxODA3LCAweGQzYWQ4ZmJkLCAweDRhN2Q4MjA2LAorCTB4MTg1MGVmMjQsIDB4N2Y2OTlkYzcsIDB4YjYyZTQwOTUsIDB4OWY3Zjk4N2IsIDB4MDIzMTNkNWMsIDB4ZjY0YmI3YmUsCisJMHg2ZTE0MDk3ZCwgMHgwNGUwYmU3YiwgMHhiYTRmNmNkNywgMHg3ZTQzZjA2NywgMHgxZGY2OTcwNiwgMHg0NzUzYmM1ZCwKKwkweDY5Yzk3N2U3LCAweDZhZDEzZDQwLCAweDE1NjlkODA4LCAweDRmNmE4ZDYyLCAweDQxZDcwMzQ2LCAweDVlMTI1MjFjLAorCTB4ODk3OGMwYTUsIDB4MTFlNjNjYzcsIDB4NDZkNDNmNzAsIDB4ZjUwYWRhYTgsIDB4NWRlNjkyOWMsIDB4OTI0OWQ4OTUsCisJMHg3MjE1OWRlZSwgMHg1N2E1MDQ3OCwgMHhjNTU3YTcwYiwgMHhmZjY1Njc1ZiwgMHhmMDNiNzBhNiwgMHgwY2I4OTZmZCwKKwkweGJiZTQwNzUyLCAweDdkNDZlYWQ2LCAweDBiOWIyOWUyLCAweGRmZDIzZmVmLCAweDg4OTM4ODY4LCAweGY1NGVkMTI3LAorCTB4NWZiNDUwYmIsIDB4ZGEzYjdkY2QsIDB4ZTcxZjI2YWYsIDB4YTYxM2U2ZDIsIDB4YzkyMzI3NDksIDB4OGUzZTA0OWIsCisJMHg3ODgyZDEwMiwgMHhlMDZhOWI4OCwgMHg3MGFiYjJmYSwgMHhkYzc4NTI2NCwgMHgxOWM0ODk3MSwgMHgyYzNiZjI4MCwKKwkweDZlODA4Zjc4LCAweDFlN2FhZjJmLCAweGRjNzY4YjE2LCAweDNlMWE3Yzc0LCAweGUxZDE5YjExLCAweDZhNzFiMDM1LAorCTB4MDM4OWRiYmUsIDB4ZTNhNzQ3ZGYsIDB4YWYxYmFlM2QsIDB4NzBiNTZmMjYsIDB4MDkxMTI3N2UsIDB4ZGNjNTlkZjgsCisJMHgyZmZlMzg0ZSwgMHg0YWJkZjA2OSwgMHgyMjRmOGEyYSwgMHgzOGMyNjQ0YywgMHhkZTIxMzBlOSwgMHg4M2NmOTYyNSwKKwkweDZmYTlhZmY2LCAweGViMDFlZjA3LCAweDBjODcwYjVmLCAweGI1ZWZhYmI1LCAweGUwZTVjMGRlLCAweDhhNTE0YjExLAorCTB4YWM5M2VlODUsIDB4YjgxOGI1ZTEsIDB4YjgyYzlkOWQsIDB4NjVhMDRlNGUsIDB4OWZjODAxZmUsIDB4NjFlNzk2ZDIsCisJMHhjOGQwOGE1YywgMHg1YWM0NmFlOCwgMHg0NDY2ZmI4MiwgMHhhZDU1Yzc5MCwgMHhkNTNkNDY4YSwgMHhhOGRlMjY2NCwKKwkweDhlM2Y3MGYxLCAweGQwZjFlNTc4LCAweDNmOWY4ZjhiLCAweDI4MTg1NjM5LCAweGE1MGQ2OTI4LCAweDFmY2VkYTM1LAorCTB4YTYyYzM1Y2MsIDB4NDUwMmQwOGIsIDB4OGIxMGZlMTQsIDB4NWZmNDBjNmIsIDB4NmM5ZGMzM2YsIDB4MWJkMzA3MTgsCisJMHgyODc3YmY1NiwgMHhjMTZiZGFlZSwgMHgxYmE4Njg2MywgMHgxNGMwZmZiYSwgMHgyZWY4MjE2NCwgMHhkZDBlZjEwOCwKKwkweDUxYjg3MjBmLCAweDBlYzY1M2M5LCAweDQ2MzQwNmVmLCAweDMzMmVmMjg3LCAweDY5OGRmN2U1LCAweGRhZjM3ZjJjLAorCTB4N2VmMGY1YTEsIDB4ZThiZGE3NGQsIDB4Yzc4YzBiNjYsIDB4Y2YwZWJmNmMsIDB4OWFmMTAyYzMsIDB4OTM3YmQ1ZjcsCisJMHg0NzM4Y2EyZiwgMHhjMWU0MGM2ZiwgMHgwN2I3YzdmYiwgMHgyM2M1ZmJkOSwgMHhmYzdiYTFhZCwgMHg1OTM3OGYyOCwKKwkweGVkMDA3Yzk0LCAweDQzZDZhMjhiLCAweDVhYWFkN2M4LCAweDAxYjk2MTBlLCAweDllMWQzNGYyLCAweDQyMWJjODEwLAorCTB4NjViZjc5ZTcsIDB4YjVmMjQxNGMsIDB4NzE2YjVlMTQsIDB4YjFjMTNjMzIsIDB4YmY2NjMyZDAsIDB4YjhjM2MxYTQsCisJMHg2MWQ5YmRmYSwgMHg2ZTJiNDgzYywgMHg4NmUxZTFkMCwgMHg4NTg3ODVhZiwgMHg4N2E4NmY2YiwgMHgzYmZhNTVmNywKKwkweDBiMTc0YTZmLCAweDczZDM1ZjAwLCAweGRiOGVmODBjLCAweGY0MTY2M2M0LCAweDE0NWZkMGJmLCAweDY3MGUyM2NhLAorCTB4YmNmNzJmNDMsIDB4YzI4NTNiMTUsIDB4OTdkMzU3MjksIDB4YWJhMTRlZDIsIDB4OWQyNmU4ZGUsIDB4ZWY2M2FmZDgsCisJMHhlN2U5NmE4MywgMHg4N2FlMmRkZiwgMHg4YjMyZGUwMCwgMHg4ODk2ZGQyYiwgMHgwNTc3YzdmMywgMHg4YjhiYmJhNiwKKwkweDc0YzIxM2YyLCAweDA5ZWUyYzRkLCAweDExZmVhZWYwLCAweDVhMWY4MmNiLCAweGU5ZGFmZTU0LCAweDM0YzU0YjM5LAorCTB4MDExZmRlM2EsIDB4M2MzMWI4MjMsIDB4ZGVlNWM0OWYsIDB4OWU3NDUxYTgsIDB4YzYwMzJlODksIDB4YjhiMTFmZDUsCisJMHhkYjNiNDA1NywgMHg2MjAwNjA5YywgMHhmNzEyMjZjYiwgMHhmNzBjNDEwNCwgMHhmYThmZWNhMywgMHhhZjhlY2MxZCwKKwkweDU2ZjgzNjJmLCAweGZjNjBmM2IwLCAweGZhNjExZGJiLCAweDQ3ZDFkMGU4LCAweDViNDdkMTkwLCAweGI1NDdkMjI3LAorCTB4NDdkMTkzYmYsIDB4MzQ2ZTVkNWIsIDB4M2IwMzU3M2YsIDB4YzcwNDkxYmEsIDB4NTkzN2JhYzEsIDB4NjFhNDBiMGEsCisJMHg4MjYyNmU5NCwgMHhiMjM3NDBmNSwgMHhjMjgyYjZmNywgMHgzYWViYzQyOCwgMHhmNThmNWYxOCwgMHhlNjUyZTNlMSwKKwkweDM2ZmFkYmQ1LCAweDcxZmI0ODFlLCAweDA3OTlkODA2LCAweGE2MWU3ODBkLCAweGI3YTk0ZGUwLCAweDQ2ZTJjMmMzLAorCTB4N2VlNmNkZmYsIDB4OTlhOWZhMTEsIDB4OTYxZmIxZDQsIDB4M2Y4MWViNmYsIDB4ZWQ4NzVjNjAsIDB4ZDA1ZGNjZTAsCisJMHhhZTliMzZkZSwgMHg2ZmRjMjM5MCwgMHhmODE1YzFlMywgMHg3ZjIzNzg0ZSwgMHgwNDk2M2JkNywgMHg3YmQ3MjBiZCwKKwkweDNmZGIwN2M3LCAweGRlODA3YzIxLCAweGU4ZjgwMTkzLCAweDBhZjJmZGM0LCAweGRkOTY2N2JmLCAweGNlNDBiODI2LAorCTB4ZWY2MThmMGYsIDB4NjE2ZWJjOTAsIDB4MTZiYmY1NzYsIDB4YWY0Y2E3OTEsIDB4NWJiODNjNDksIDB4N2IyYmZiMDQsCisJMHgyN2ViMDE5NSwgMHg5ZWExOWE0MiwgMHg1ZjVlMmFmZiwgMHg5NWRkZjhkMiwgMHg4OWU4NTU3NSwgMHg3ODE4ZDI3MiwKKwkweDc4ZjllNGNmLCAweGZkMmQxZWY3LCAweGE5YTRjN2M0LCAweDFlZWQyOWUwLCAweDQ1YTI5MGY3LCAweGVlMjY1MDk0LAorCTB4YzgxMGYwNWQsIDB4M2UzZjRhNTUsIDB4NzIzMWJiNGQsIDB4NDQyZGUwMTQsIDB4MjMzZTk0M2YsIDB4Nzc2ZDBmYWQsCisJMHg3YzZiYWQ4OCwgMHg1YjBiZTgwYywgMHhmMTE1MmVmNiwgMHhhZTdlOGU1ZCwgMHg0N2JjMTY2YiwgMHhjNTY3ZWI0OSwKKwkweGI0YWRkYTkwLCAweDRkMmM1NjdkLCAweGYzYzA5ZjIxLCAweDA4N2U3OTAzLCAweDc0M2ZkMzRiLCAweDdkZmEwNDFhLAorCTB4OWVjYmY3MDMsIDB4OTIyNTc4ZTUsIDB4NjM5OWJhZmQsIDB4YjhmNGNmMjAsIDB4OTQxOGU0ZWMsIDB4ODViZWNhMGIsCisJMHg1Y2UwNTQ2NywgMHhkYmU3ZTI1YiwgMHgwMzM0YzE2OSwgMHg4ZmIyOWJhYywgMHg2MDIxYTBhNSwgMHg0ZDJiNDJhNSwKKwkweGNlMjAxODcyLCAweGJiOGY1ZGUxLCAweDdiMGJjZTA4LCAweDVmYjczYmUzLCAweGVhODFlZWNiLCAweGM3Y2U3ZmJmLAorCTB4ZWJmNThkZjMsIDB4MmZiOGY0YmYsIDB4YjdlMDM5ZmUsIDB4ZjhmMWRjY2EsIDB4YmVhZjlhNGMsIDB4NjlmYTMyZjYsCisJMHhkZjU0YzQ1NywgMHg2OGVmNTVmYywgMHhlZWZmYzdlOCwgMHgwMGM0ZGZkNSwgMHgzMzNmZmExZCwgMHgzNTNmYmM0NSwKKwkweGYxZThjYWNlLCAweGI2MGU2NzgwLCAweDA0ZWZlMmNiLCAweDFjNGE4MTkyLCAweDE1Y2UyYWIyLCAweDg2NWViOGNhLAorCTB4ZGY4Njk5NGIsIDB4MDViYWNmNTEsIDB4YTdhYzIwNTksIDB4ZjY4NzhhNTcsIDB4YWU3OGE5MzEsIDB4YWUyZWFiNzgsCisJMHhiYjJmMzk1NSwgMHg4MGZjYzAyNSwgMHg0MmJlYjE1OSwgMHg3NGZhZWZlYywgMHgzZTQ5ZjdmNiwgMHg5OTkyZmE2MywKKwkweGExY2UwZmZlLCAweDMzNzNmMmE2LCAweDVlZmIzMWQ3LCAweDA5NTk4NzEwLCAweDNmMDhmOThkLCAweDVhZmQxNTM2LAorCTB4ZmVmYjQ0MzksIDB4YWY0MGQ2NDEsIDB4ZjRmMjgwNjQsIDB4Njc5Nzg0NTQsIDB4MTNhNzk1ZDYsIDB4NmI5MTViZjQsCisJMHg0ZGY5YzNhZSwgMHgwY2ZkMmEyNSwgMHgxM2EzNDZlNSwgMHhkMWY0ZjFmOCwgMHhmN2Y5ZmU5NCwgMHhlMWJmZjRjYiwKKwkweDg2N2YzMjI2LCAweGNkYjhjZWNhLCAweGJlNTE1ZjcxLCAweGM0Njk2ZjQ2LCAweGZiN2U4NTc3LCAweDUyM2YzOGI5LAorCTB4MjE2M2M1ZmMsIDB4NDExNTE3M2MsIDB4OGYxZTgwM2MsIDB4OTU2MTBlYjksIDB4ZGYxM2QxZDUsIDB4ZjFlOWZjN2EsCisJMHg4ZjUxZTBhZCwgMHg5ZDBmOWNiNywgMHg5ZThlZjFmOSwgMHgyM2UzZDFmOCwgMHg1YmU5N2U3YywgMHg3NTMwZWIwYiwKKwkweDRiZjI4OGI0LCAweGZjNGY3YmMxLCAweGVkZmFmNWIwLCAweDAwOWViNGI1LCAweDBkZjE0MmY0LCAweDMwMTc0Y2Y4LAorCTB4ODYyYjI3YmUsIDB4M2E2YzRmZDMsIDB4MTQwYjM3ZTIsIDB4MGY0ODAxYzAsIDB4NTVlM2Q3OTgsIDB4MDRhY2M3OGYsCisJMHhkNTgxM2VkZSwgMHgxYWY4MGZkZiwgMHhlZDAwZmM4OSwgMHhiMmRkNjUyMSwgMHhjNmY3NmJkMiwgMHhlOGM0ZGU0MSwKKwkweGE3YWJkMTRjLCAweGJkNTBiYzcyLCAweGJjZTZmNTFhLCAweDliZmEyYjQ0LCAweDlhOWVhZjQwLCAweDVlNWJjNjE0LAorCTB4ZGU1NzFiMTUsIDB4NjAwYmNiNDgsIDB4ZmMwYWZlOWYsIDB4MDYwOGIxZDEsIDB4OTViY2M1ZGYsIDB4NTZlMDVmZjAsCisJMHhlMmNhNWYzYywgMHhiN2RmMDU1OSwgMHg5M2Q1YTY3ZSwgMHhjZTBiZmFhNywgMHhkYzNkZmU4MiwgMHgwNTY1NWVlNCwKKwkweDg3MTA4YzdmLCAweGZmMTQ3OWU3LCAweGQ3Zjg3NWM3LCAweGYzNmJiM2I2LCAweDBhZmM3YzdhLCAweDI3YjkzMWZlLAorCTB4YWI3YTE0ZGUsIDB4N2NmZDcyYjMsIDB4ZmEwYTE5MzAsIDB4MzMzN2Q4ZjIsIDB4MTM3ZjgxNjMsIDB4YmY0NDdjN2YsCisJMHg0NTYzYzRjNCwgMHg2ZTljMzgyMSwgMHhlMjA1OWU5MSwgMHhhN2I3N2QwZSwgMHg3NjNlMGI3ZiwgMHgxNTQ5NGE5MCwKKwkweDcyNTNiYjFmLCAweGQ4ZGViM2FmLCAweGViMjk4ZjkzLCAweGM3YWY4NTM1LCAweDA1ZGRlMjE0LCAweDQ0MjlhNjdlLAorCTB4MWVjODRiZmEsIDB4ZmZjZjBkNDgsIDB4YjNmNzJiNzksIDB4NjA0MzIxMGQsIDB4MWM1ODVmOWUsIDB4NzlmM2ZmOGMsCisJMHhkNTRkZTY4NiwgMHg5YjNmZTg0YiwgMHhiNjZkOWZmNywgMHgxMjFiZmRlMCwgMHg3ODQyYmE5NCwgMHg5M2Y3YzM0ZSwKKwkweGYwZjhjNmJjLCAweGJkNjU2NDM4LCAweGQzMDk2YTUzLCAweGZiZTJlNmU3LCAweGU0MmYxNGQ5LCAweDM4ZjA5OGNiLAorCTB4MDkwNTU5YjYsIDB4ZTNlMjBmZGYsIDB4ZjY2Y2RmMzgsIDB4ZDNkYjljNDIsIDB4MmIwZGZiOTIsIDB4ODM4NDNkZjgsCisJMHg1MjdlNzE2MywgMHgzZmM4MTQ2MCwgMHhiNmU1Zjk3ZCwgMHg0ZTUwZDViZCwgMHgzZDYwOTVlYiwgMHg5MTBhZmUzZSwKKwkweDNiODIxZmY5LCAweDUyMTdiZTRjLCAweGU5NTNkNzdiLCAweGExMzk0NmY2LCAweGRjMzY3MWQwLCAweGU4MDFiZDdiLAorCTB4YjhjMjI4M2UsIDB4NjU1Y2ZjZmQsIDB4Y2Y3NjQ1ZTcsIDB4YWJlYzQ1YzEsIDB4ZjZmMGE3YWUsIDB4MDJmNzYyNWQsCisJMHg4MWRiMjhmMiwgMHhlZGZhN2E3YSwgMHg0OWYzNGU4YiwgMHhkM2I0MWU3MCwgMHhjZjIyYWJkMywgMHg1YmZkZjgxYiwKKwkweDY4YmIzZjQ1LCAweGViMGZiZjc1LCAweGUzZWZjMGRlLCAweGJhOGUyZmZhLCAweDFiZTdkNjBlLCAweDJkNjFkNWQzLAorCTB4NDRmNDI5NWQsIDB4ZjQzOGViZTksIDB4ZjFmOTlkZDMsIDB4ZGZjYjUwM2EsIDB4MDQ5Y2JjY2IsIDB4ZTNkMTUxZjIsCisJMHhlYjhhZmFjMywgMHg5YmQ3YTg2MywgMHhlNmRjM2YzZSwgMHg4NTdlYjJlZSwgMHgzNWU4YWYzZSwgMHg2NDIzZDk3ZCwKKwkweGQzNDY0NGFmLCAweGViZTNjZTcxLCAweDJlZGNkNzMzLCAweDQxYzY4YmIzLCAweDg4NmZkMzhjLCAweDczY2JkZTU2LAorCTB4MzkzZTgzNDQsIDB4OTVlZDIxYWYsIDB4YWM1NzM4NjYsIDB4MDdmOTdlNjMsIDB4M2Q4ZDY1NmIsIDB4YmVkYjg2ZWMsCisJMHg2N2JkOWVkOCwgMHhiNmI5N2YzYiwgMHhlZjhhMjNmYywgMHhjZWY4ZjE0MSwgMHg4NjhlZDZhZCwgMHg3ZTE0OTFmZCwKKwkweGJmNjdiN2NmLCAweGM5YzgyZjA2LCAweDMxYTMyMzc5LCAweGFmZGY0ZTdlLCAweDdlZmE3ZTdlLCAweDcwMzVmZGY1LAorCTB4ZDhjMWFhZmIsIDB4ZDJhOWRhMzgsIDB4MTYzNmVjNGYsIDB4Y2Q2OTdkNDcsIDB4MTRmMGNkOTMsIDB4NzNmODZmNWUsCisJMHhkNGI4ODc5YiwgMHhhM2FlNmY3ZiwgMHhhNDRlN2EyMSwgMHg3ODE0NjhmNywgMHhjMmU3YmUwYSwgMHgwZmUwOThjYiwKKwkweDFlZmY5NWE4LCAweDZjZGQ5ZGU5LCAweGY0MTNmMzM3LCAweDYwODhlZmQ2LCAweDg2ODNlYTNlLCAweGU4MjIwM2E3LAorCTB4MDQ4MjIzZjUsIDB4YTBlY2YwZjUsIDB4NjM1MGIwY2IsIDB4Yjk3YjMwMGYsIDB4ZWYwMDNkODcsIDB4NjU3Y2QwYTQsCisJMHgwZjY2MmVlYiwgMHg1ZGExZDRiNCwgMHgwYWVkNDk1MSwgMHhlMDFiM2I5MCwgMHg3Y2MxOTAxZCwgMHgyNzY4MTk0MCwKKwkweDg4NWVlYzg0LCAweDc3ODZjYWFmLCAweDBjNWRiOTMyLCAweDM3YTVhNzRmLCAweDFmMzNmYWIyLCAweDhjMzUzNzRmLAorCTB4OWRkNWJiMDAsIDB4Y2U5MzJmMGMsIDB4YThmYjVkYjQsIDB4ZjU1N2RhOTksIDB4NTA4YTI0YTksIDB4NzZjOGFhZmIsCisJMHg0ZWQ2NzdlZCwgMHhkZTNiZGNhMiwgMHhhNGJiYzAyNSwgMHg2NWE4ZmYzNCwgMHhlY2VkZmY3MiwgMHg4ZmQxYjY5OSwKKwkweGRhODFiZjgyLCAweDU0ZDliNzY3LCAweGZiNmY2Zjc2LCAweDAzOWI2NmUzLCAweGZlZGJkOWYxLCAweGNkMTdiNGU4LAorCTB4ZGY4YTM4MDQsIDB4ZTQyMWYyODIsIDB4YmUyOGZlMDcsIDB4ZjQ0MmEzZmYsIDB4NTM3ODBiMTcsIDB4ZTVmNmU1ZTgsCisJMHg4OGNlZDEwYiwgMHgwYTZhZTZiYSwgMHg3MzY1OTNjNCwgMHhiOGRiNzAzYSwgMHhjMTg2MzY1ZiwgMHg3MDYxODlhOSwKKwkweDM3NmU0YTI2LCAweGZiYmRkM2Y0LCAweDNiZjAyOGVhLCAweDA0ZmEzYmJmLCAweDJiN2U3OWRhLCAweGY0MWZkYmYzLAorCTB4ZTNhOTE1OTQsIDB4MDI2ZDZiZGIsIDB4MTBjMDk3YTcsIDB4ZGM3NzdmZDgsIDB4ZWMwMTI3YjgsIDB4YzA1OTZjOTUsCisJMHhiMmZkNGVmNywgMHg5OWYxZTllZiwgMHhkYjY2OWZjMCwgMHg2NjI5ZDI1NywgMHhmZGUyMzY0ZiwgMHg2MDU0N2YzMiwKKwkweDNkMmFjM2M4LCAweDRkZGZjZmNlLCAweDNmZGM1ZmY1LCAweGRjZmYxZDQ0LCAweGI1YWJjZDZlLCAweGMwMjJmODMxLAorCTB4N2JkY2NlY2YsIDB4ZGU4MGY0MGMsIDB4YWU1ODRlZTQsIDB4MmI5MDA0YjgsIDB4MjRhMWVhZTQsIDB4ZGQ2YTVmM2MsCisJMHg2ODlmMDM2NywgMHhlMGU3N2YxNywgMHhhNDllZWI3YywgMHhkYWFkMzQwNSwgMHhiMDM2OWZmMiwgMHgzZTM4ZWFlMywKKwkweGY4ZWQ0YmNlLCAweDc2ZTU1MzVlLCAweGExMTNkZjExLCAweDAwM2QyNmZkLCAweDg1ZDZlYjdlLCAweDFmZGVlYzU5LAorCTB4YzhhNmFmYmIsIDB4ZWY5ZmYxZDUsIDB4OWNjNDUyMTksIDB4NGNmZjc4ODksIDB4OThhNzM3ZDEsIDB4OWYxODNlYmQsCisJMHgxZGZkOGViZiwgMHhmN2JhMjljYywgMHhlZmU1NmVjOSwgMHhjZmY1ZTk5MywgMHhlMmIyNmM2NywgMHhhOWY4YzMyZiwKKwkweDRmZDY3NjY1LCAweGZiMmJmYjZmLCAweDUzZTIwNGIzLCAweDI5NmNiZmVkLCAweGIzZjhjMjIwLCAweGVmYzI0YjNmLAorCTB4M2RhNDBmZTcsIDB4M2RmNjA4NTUsIDB4MDEyMzlkOTEsIDB4YTJmNjQ0YWMsIDB4YTdjZmNiN2UsIDB4YmMyZjZmZTgsCisJMHg2NzkzYmU3YiwgMHgzY2JkNmVkZSwgMHg2ZTI0NjZlYiwgMHhkMDA0ZDcyYSwgMHg5ODAzZGNjNywgMHgwN2M5OTFkMywKKwkweGY1YmJmZjQ1LCAweDU1ZGZhZDMzLCAweDcyMmIwN2FmLCAweDZlM2ZkNzMyLCAweDc4MDIxMGQ1LCAweGZiYzJjYzc3LAorCTB4OGMyNDA3MTMsIDB4YzllYmQyZjcsIDB4YmQwNTgzNTMsIDB4MjA0ZmMzZTgsIDB4NGQ2ZDZkN2QsIDB4ZmU3YjAxOGYsCisJMHgwMDlmNjBkZiwgMHhjNjVlYjZkZCwgMHg0OWFhODNmNywgMHhjNzc4MWVlMCwgMHhiNDU1YmFhOSwgMHgyNGZjNjAwNywKKwkweDY3ZDg3YWYzLCAweGUwYTEzZThhLCAweDFlZWFlZGE1LCAweDdmZGE1OGYzLCAweDdkODM0NWY2LCAweDc2ZjEwNTA1LAorCTB4NTc2ODJmZjAsIDB4YzFmZGY4NGYsIDB4ZmU2NzkwMDQsIDB4MDdlNzg0YTAsIDB4YzZmNzE3ZDksIDB4NDVmMTU0MmMsCisJMHg3ZTAzNTVmZiwgMHg2ZWVhZmI3ZiwgMHhmYzYwZjdlZCwgMHg4YjZlZDBmNSwgMHg3YmNiZDk4MSwgMHgwNjNkZmZmNywKKwkweDU3ZGJkNGY4LCAweDkwYmMyMTJmLCAweDZmNTNkMTNlLCAweGNmM2JmZDQ2LCAweGQxZmM4NjJhLCAweDg4OTliZDZhLAorCTB4ZGUyMTg3ZDksIDB4MTUyYzZhNmIsIDB4ZmFlZjQyNmIsIDB4NjQ4N2NlNzAsIDB4ZDRmNDk1OTUsIDB4Mjc3ODQyMmIsCisJMHhkMGYwMDkyZSwgMHhmMDU2MWY0MywgMHgzZTMzZDNhYywgMHg3NzNkNzFiMiwgMHhlZjBmMTkxOCwgMHg0ZDVkYjY1ZSwKKwkweGM3N2JjMGE4LCAweDBhZmIxOGZlLCAweDhmNGNjZjk0LCAweGVlN2JkZWVhLCAweGZkZjBlOWM5LCAweDlkZGVjOGEwLAorCTB4N2VlMjJhYjgsIDB4NjJiM2JkZGEsIDB4ZGY2YTg3NzgsIDB4ZWI4YTRlNTIsIDB4YzVkMDY1NzYsIDB4ZmFkMTZmMGIsCisJMHgzMzQ1ZjY1NywgMHhiY2U0YmFmZiwgMHgyMjRmN2Q1ZSwgMHhmMWM3ZGY1YywgMHhjZWNjMTgxNSwgMHhlMTgzYmNlOSwKKwkweGFjNmZhOGJkLCAweGIwZjU3NGNmLCAweDQzNjFmZmY3LCAweDAwNTgzOTNkLCAweGZhZDQ2MmUyLCAweGZmYWMyMzRlLAorCTB4M2U4YWQ5YmYsIDB4MjVhNWZjNjcsIDB4OTc4YmY4MDYsIDB4YjQyMTBlZTQsIDB4OTI2OGIyZGYsIDB4YWMxNTc0MGIsCisJMHgzM2IwNzYyMywgMHgxODMwMWZiNiwgMHgzNzMyNWQ2MCwgMHhjZjVjNjJhNSwgMHg3MzFjZmMyYiwgMHgzMWEzNGI0OSwKKwkweDRiMTc0NTU1LCAweDE5ZDgzOWY4LCAweGFmMTI5YmQ5LCAweDk2MzJiZWZhLCAweGZiMzM5N2YxLCAweDcxODE3ZmNhLAorCTB4OTEzNDdmMWQsIDB4ZDBmNDExOTEsIDB4ZmU0Y2IxODUsIDB4YTc3YTMzNmUsIDB4Yzc3YTg2NmYsIDB4NjhkZjc4MGQsCisJMHhlZjVmZmVlZiwgMHg5NzkzNzc4NywgMHgwMzhjNzMxYywgMHg1ODk0ZTBiZiwgMHgwZWRhMGZiNiwgMHg3MTBmNTJiZSwKKwkweDgyMWY2ZGMxLCAweDY2NzJhMmQ0LCAweGEwNjhiMTYzLCAweDFjNDViZWZkLCAweDk4NzdhZmNjLCAweDkwZDZiZGZkLAorCTB4MTJiODk0M2YsIDB4YzUzNzllNjAsIDB4ZDZmZGJlMzIsIDB4ZGNlNjgzMDEsIDB4YmVmZTJkZWMsIDB4OGNiMWY1ZWYsCisJMHgzMmM2YTUwZiwgMHgwM2Q2ZGFiZiwgMHg3MDBiMDliOSwgMHhjNDQ3YjlmZiwgMHg2NGYwMWY4MiwgMHg0NTZjM2Q0NywKKwkweGU4YTgwZmM1LCAweDZmMGY5MzZmLCAweGZlODYzZTlkLCAweGMxOTc3MjczLCAweDM4ZWRjYjBlLCAweGYzMDg4MmZjLAorCTB4MjQyMTljNzUsIDB4ZjQzZDIwNGUsIDB4YWM2ZjBhMzksIDB4NWQ1YmRlMWEsIDB4YzcxZDFlMGMsIDB4MGFhZmQ4NmUsCisJMHhmZTA0YTlmZSwgMHhiZmNkMDY3MSwgMHg0M2M1MmVkNSwgMHg3ZjgyOTgzYywgMHhmZjRhMWU2NSwgMHhkYWUyMTY4ZSwKKwkweGU0YWRjMTYwLCAweGZlMTVmYWRhLCAweDMxZWZlNTY4LCAweGU1MTNiMDRjLCAweDVkMjAzM2VmLCAweDZlYjliNzZlLAorCTB4NmY3MmM1ODksIDB4ZWNjZmU0MGEsIDB4MzZkMjdhNjMsIDB4NzI0OTRmMmUsIDB4OWZjMDcwZjEsIDB4NzlmMzRlYjIsCisJMHhiN2E3OGNhYSwgMHhlM2U3ZWZmZSwgMHg0YmFmZDI1NCwgMHgwZWM4YWZkNywgMHg3NmNkZDIyZiwgMHhmMGVlNGYxNiwKKwkweDEwZTljYzA2LCAweDhlOTZkNjc3LCAweDE1NGE5ZjdmLCAweDhlM2Y3Yjk3LCAweGZkZjY4Y2ZmLCAweDgzMGViNmMyLAorCTB4NTU4ZmVlMDEsIDB4NTBlMjEwZWYsIDB4YmVhN2VkZGQsIDB4YTkzM2EyMWQsIDB4ZWRhZmU5MDUsIDB4NWM3ZGMxMTgsCisJMHhlNjVkZmNkZSwgMHg5ZjcyYTQ4ZiwgMHhlNzg2ZWJiZiwgMHhmODdmYjBlYiwgMHg4MTIwZmIzOSwgMHgxYmZkOTNhNiwKKwkweGZjNDEwZTU2LCAweGFmYjA2YzA2LCAweGZiYTI3OGMyLCAweDQ2ZGFkMjA2LCAweDkyZWJkMDIzLCAweGU1MmQyYzY1LAorCTB4OWE0YmQ1ZTcsIDB4NGIzZmI4ZGMsIDB4YzQ3OGIzZDYsIDB4NGNhOWIxNjUsIDB4MjU3YTczM2UsIDB4ZjhjMWU4ODYsCisJMHg3YjRkYmFkZSwgMHg1YzFmZjA4ZiwgMHg3ZDZkOWU3ZSwgMHg0YmY0MGY2YSwgMHg4MGZiZWJlOSwgMHg5ZWRhOWI4ZiwKKwkweDU1YzMwNzU4LCAweDQ2ZWNmNWU4LCAweDQ1OTRlMTE5LCAweDNkZjNjZjZiLCAweGI4Y2ZjY2IxLCAweGY3YTMzMGZkLAorCTB4NWNlNTFiYzksIDB4YjI2YzRmNzgsIDB4YmZjMWQ4OTcsIDB4NGRjNmQ2ZmQsIDB4YjdlZmYwMjIsIDB4ZDk1MzllODAsCisJMHg3Yjc5MDczZSwgMHgzMTYzZGY2NiwgMHhkNmY5MDdkZiwgMHg0N2UwMjA2OSwgMHg2NTI0NjZkZiwgMHg2MmZiNTQ1YiwKKwkweDM0Mzc4NmVmLCAweGI5YmNiN2ZiLCAweGViZmEzYTZlLCAweGUwMDVlMjNiLCAweDU1YmVjYWYzLCAweGU4Y2RiZWYwLAorCTB4ZmZmNzBkYmMsIDB4OWZmZGJhOWQsIDB4YzJiN2RhY2YsIDB4NGY3YWQwYmEsIDB4ZDRmZmZkZjEsIDB4ZTlmZmJhMzQsCisJMHg3MThkYjhhNywgMHg2NmQ5YzAwMiwgMHhkY2NlZmM4YywgMHhmZTkwZGY0YiwgMHhhM2I1N2M0MiwgMHgyOTdkNWYwNywKKwkweDZjMWZmOTk2LCAweGVhZmZiNGU5LCAweGZmYTEyZTNiLCAweDRlM2UzNDIxLCAweDJiZTU0ZjM3LCAweDAwMmE5Mzc0LAorCTB4MGFlOTFiZmUsIDB4NTE3YzAwOGUsIDB4NTMzZDAyYmMsIDB4Y2NmZTdhM2QsIDB4MDc5NWRjMGMsIDB4ZTFmZjNjMjQsCisJMHgyZTNjNGJlNywgMHg2YTk0NzcwNCwgMHg5OWY5ODZiZiwgMHg2ZmRkNmZiMiwgMHhmMmIyMzhjMCwgMHg5ZTgyNTc2YiwKKwkweDQ1ZTg1MDlmLCAweGI4MmIzY2ZhLCAweDc5NTNjNzg3LCAweDcxZjYxNjc2LCAweDhlYjA3ZTA0LCAweGVjOGFlM2UzLAorCTB4ZmY3ZGViZWUsIDB4NjVjZjQwYzEsIDB4Zjk4NDYyZDQsIDB4MWQ4MmY1OTAsIDB4NzcyOTQ1ZDYsIDB4YmRlZjY3YWMsCisJMHg5NGYwZTYxZSwgMHgyZGJmODdlZiwgMHhkZTNkODNiZSwgMHhmMGNjM2QyMSwgMHg1YzQyMzQxZCwgMHg5MzFmMjhlYiwKKwkweGM1Yzg0NDYzLCAweGI3MGM0MGZkLCAweGI2N2Q4NjBmLCAweGZiYWZjYTg0LCAweGFjZWJmMjU1LCAweGFhNzQ4OGRjLAorCTB4Y2UyM2UxZTAsIDB4YjFjNGFlYjcsIDB4YzdjZTNmNzksIDB4NWQxZjA3ZTksIDB4ODJmZjBhYTIsIDB4M2Y2YzA5MjQsCisJMHhlN2RiMDI4YiwgMHhiYjNmYzAyMiwgMHg5MGRiYTZlZiwgMHg0Yzg4ZWZkZSwgMHhiN2IwNzZlZiwgMHg0N2VmZTFlMiwKKwkweDhjZmE0MDZkLCAweDdiYzc2NjliLCAweGNlNDk0ZjJmLCAweDdlOGQzOGE4LCAweGVmNzRjM2U0LCAweGNlZDA2N2E2LAorCTB4ZmQ4NWZhMDMsIDB4OTdmZDFiZGUsIDB4MDg5M2ZkMDEsIDB4NzRhM2VmNzQsIDB4ODUzZjVhYWYsIDB4ZmM1ZDI4MGUsCisJMHg3Y2E1ZjAxZCwgMHg3Mjg1ZDNkNywgMHg2NWUwYTkwZSwgMHg3MzFjZWU5YiwgMHhlOWUxOWRhYSwgMHg4ZDUyMDBmZiwKKwkweDgwMDBiNTZlLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkYmRmZjAwLCAweGQ1NTQ3YzA5LAorCTB4ZjM3ZGY4ZDUsIDB4MzMzMmM5NjYsIDB4YjI3NjRjOTksIDB4YTAwYzQ5MzAsIDB4ODA0OTBlMmMsIDB4MDg0ZWQ4YjAsCisJMHhjMzg4NGEyMCwgMHg5M2EwZDc1MiwgMHgzNjRiMDkwMCwgMHg5NDU2OTUxMCwgMHg4YjA2MjA4MSwgMHhiNjJkMTUxOCwKKwkweGVmODU4MzIwLCAweDEwNmQxYjQzLCAweDI2ODM1OGE4LCAweDYyMmQxMTEwLCAweGE1N2ZiMWRjLCAweDQxNDU5MDQxLAorCTB4ZWQxZmE4MjIsIDB4ZTczYmY1ODcsIDB4MzMzMzdiZGMsIDB4NmEwMjI2NmYsIDB4ZWZjN2UxZmYsIDB4ZGY3N2RlZTYsCisJMHhjZjdlY2U1ZCwgMHg2ZWM1ZjczOSwgMHg4NDM2MzFkMywgMHhhZTYzMDczMSwgMHg3ZDhjMDFlNiwgMHhmNGJmM2Y4ZiwKKwkweGExMmQ4Yzk3LCAweGNmMzc3M2U3LCAweDgyMjQ3MTVlLCAweGYwZjdjZmQxLCAweDVlNzliYWJmLCAweGM3NzZiZDUwLAorCTB4ZTkxYzU3YWYsIDB4YzVjZmFmZTcsIDB4ZmZlMDUyNWYsIDB4ODk2N2E2NzEsIDB4NDdmMTU1OGMsIDB4ODllZjRjYWMsCisJMHhmYmMwMjViNSwgMHg2Y2Q2OWQxMSwgMHhlMjY2YjQ5OCwgMHgwMzg0NjMxOSwgMHg4MzE5Nzg5ZiwgMHgxYzYzNmZmNiwKKwkweDZmYWEzZTU0LCAweDFmMmJkM2RlLCAweGU5Y2MzMWNhLCAweDliMzlhNjg1LCAweDk5OGYxNTMzLCAweDFiMzYwNWIxLAorCTB4MjdmOTY3YWQsIDB4YjBkZDkzZDMsIDB4YzZjNjQ2ZGUsIDB4YzU5YmJhZTMsIDB4ZDlkZDcyN2MsIDB4OTljNjg1MzYsCisJMHg4ZjczMjllMCwgMHg2NjY3ODM4OSwgMHhhMDdiOWU0ZiwgMHg2NjA3ZjlmZiwgMHg4ODZkOTY0ZiwgMHg3MGExM2ViZiwKKwkweDQwMThlYWJlLCAweDdlYzQ4YzRiLCAweDBjOTg1NTYzLCAweGM5YmY5ZmU2LCAweDMyNjUzM2U0LCAweGM0OWYwNWI2LAorCTB4YTNkYjJhYzMsIDB4ZmQzMjliN2MsIDB4Y2NmNGQ5ZWYsIDB4OTYzM2I3YTUsIDB4NzVhNGNiNmIsIDB4YjE1YWVhYzEsCisJMHg2NDY4NThlZSwgMHhkZmJjYzE5NywgMHg5YmI1OTY2NiwgMHgxZGQ1ZDFlMSwgMHhiMDgxZTJkZSwgMHhlZjQ2MmQ4ZiwKKwkweDM4OTk4OWQ0LCAweDFjMWFmMzk4LCAweDlkNjI5YWZmLCAweDZhNTgwMWVkLCAweDM4YTZjYmFjLCAweDY5OTJkMDA3LAorCTB4Y2Y4ZmI2NWUsIDB4ZWNlZDk3OTMsIDB4ZWVhMWIyY2YsIDB4MmRiOWU2NzAsIDB4ZjgxMjhkOGMsIDB4YzkzMGFkNjIsCisJMHg0MjFjM2Y3MCwgMHhkOWUxYzZmMSwgMHgyMDE3NWUxMywgMHgxNzUwODY3YywgMHhkNWUyN2U3YSwgMHg2NjdkMWJhOCwKKwkweDAxNDRmM2ZmLCAweDc4NjMyZmJmLCAweGQzYzFhZGY5LCAweDFkMGU2NmRiLCAweDU1M2U2MDI3LCAweGNhY2M2NjQ5LAorCTB4NWM1NTRiM2MsIDB4ZGI2NjI4ZmYsIDB4NzczZmYwZTQsIDB4MWMyZTYyOGMsIDB4NTcxODlhN2YsIDB4OGZmYWNiYjYsCisJMHgxMGFlYWZhNiwgMHg3ODg2OWFmYSwgMHgyMmU4OGVhZCwgMHhkMDUzZWFiYSwgMHhiY2MwNzQ2OSwgMHg4YmRkMTk0YywKKwkweGVlOThmYWMxLCAweDgwYWM1ZWRhLCAweGJkNzFlYWJhLCAweDI5NTU0ODAwLCAweGY2YzdlYmUwLCAweGQ3MzM4ZDg0LAorCTB4MDFkOTllMjMsIDB4MGNjOWNiMTMsIDB4Y2RiNTY3ZGQsIDB4ZDFiNmUxYzAsIDB4ZTg2NmZhMzAsIDB4Yjg2NWUwOTcsCisJMHg4MzhiYzAwMywgMHhkZTM1ODVlMywgMHhkYzZiZjg4YSwgMHhkNzg4NjI2OCwgMHhkYzM5NjM2ZiwgMHg2OGQ5NTNhYywKKwkweDQyYjdmNDAzLCAweGM2ZjcyNDdmLCAweDU3MDM5ZWE5LCAweGQ5MzFiZDQxLCAweDllNjA1MGU4LCAweGMyMmU4NjEzLAorCTB4YTBhYjg5ZmIsIDB4YWRjM2U4OGQsIDB4YmM0ZmJlMjAsIDB4ZGY5YWUyM2EsIDB4YTI3N2JiNDAsIDB4OGJjMGU1OGUsCisJMHgwNWIwOGQ1YiwgMHhhN2JmYzNhNCwgMHg0ODI5MzZmOSwgMHgyN2M0MmRhNywgMHhjMWIyYzdmMywgMHhiZWRlNzgyNiwKKwkweGQ1ZDExODY5LCAweDA1MmNlMmFjLCAweGU2Y2U3NmU5LCAweGRiOWYwNTU4LCAweDJhNzRkOGM3LCAweGQ4NjNlZmYzLAorCTB4MTNlODk1NDIsIDB4MTZkZWEwZjgsIDB4ZGU2MThmODAsIDB4ZDVlMTE1M2EsIDB4NmM5M2NlM2IsIDB4MTFlYzY1ODgsCisJMHgyM2UzMzVkYiwgMHgzMmNlODFkMiwgMHhjYzFiMjQ1OSwgMHg1ZjUwNDNkOCwgMHhiNDZiNzAwOSwgMHg0YjE2MTRiYiwKKwkweDBhNzMwNmY1LCAweDIzNjMyMWYxLCAweDBjYWRhZTA4LCAweGQ1MThkNGYwLCAweDYwNDU3NzVkLCAweDdmNWUyY2ZmLAorCTB4ODZlYWYxYTQsIDB4OWVjNjM0ODYsIDB4MjIzNTcxODksIDB4YmIzMDNlOWUsIDB4ODdmOWMxMWYsIDB4NDRhOWQ1MjYsCisJMHg3ZmFlODJlNywgMHgxMjdlY2U4MCwgMHgyYzJlZDRiZCwgMHhlMGYzODc2MiwgMHgwZTY2MGVmNywgMHg0NzkwMWJhNCwKKwkweGY4MDY2ZWI3LCAweDliM2RlODk1LCAweGJkMzU1ZDcwLCAweGMzOGUzZThlLCAweDY1N2NiNmQ1LCAweDdiYTE4NGY0LAorCTB4MjE3ODhlYjksIDB4OGNjN2Q4MTcsIDB4YWVlZjExZjAsIDB4N2VjZGNiNTMsIDB4NjZjNWIzYjksIDB4NTJlZDRjMTcsCisJMHhmY2ZjNWIyNiwgMHg3OWViNzI4NiwgMHg1OTNiOTczMywgMHg5ODIyOWE1MCwgMHg3ZWM3NjJkNywgMHhhYzIzYTIzZSwKKwkweGU1ZmFlNGM3LCAweGRkNjJjYWQxLCAweDNlMTg1Zjc4LCAweGViODkwZDdlLCAweGFjY2Y5NDY3LCAweGYyZmY3ZmU1LAorCTB4MWZkMGExOWIsIDB4OWY4OTU3N2YsIDB4YzRmY2UzNWUsIDB4YzVhM2Y1ZTUsIDB4M2MyMjI2OWYsIDB4YmRmMDkzOTAsCisJMHhlYjFjYzVkYiwgMHhlYWRmM2E5NywgMHg1ZmI5NzQ4YiwgMHgzZWEwOWI2NSwgMHgyYWY0NjRkOCwgMHhlNjZkYjgzMSwKKwkweGYxOGEyNWIwLCAweDk0NWIwZDkwLCAweGE4MjBjYjU2LCAweDJlNjE0YmZmLCAweDdmZTljM2MwLCAweGJmYWU1NGE5LAorCTB4MTMzZTNkZDcsIDB4YTFkOWFmZGUsIDB4N2U4NTJlNzMsIDB4ZjEwYTJkMzUsIDB4ZjMzN2IzODMsIDB4MzcxZDAwNDUsCisJMHgzMTA3NTk0NywgMHhiNzcwYWYxOCwgMHhmNjgwNjVkOSwgMHhjOTA0NGFkMywgMHhkNzAwOWM2NSwgMHgyZmViOTA2MSwKKwkweDgyNjhjYWU4LCAweGMwMmRmNWU3LCAweDVkM2Q1MDdmLCAweGY1YzZhODA4LCAweDZjMzE5ZGVhLCAweDgzYmUxZjgwLAorCTB4MWZiNDdjZGUsIDB4MWJkYTAwZWMsIDB4NGY2N2M4OWQsIDB4OWZmMWYyNDUsIDB4ODFmMGNjOGEsIDB4YmU1MjgzMTAsCisJMHg0YTAxODhlNywgMHg2ZTgyNTk2MSwgMHg2MmM2N2FmNCwgMHg3ODUwNGYwMCwgMHgzMGI1MWNiMSwgMHgzYzA3YTVkYiwKKwkweDM1ZTY3YTJiLCAweDc1NDZiZTAwLCAweDlmMDhhYWI1LCAweDhlODcyZWFjLCAweGU5ZjNmZDk5LCAweDNiZWQxOGJiLAorCTB4MzlkMGVmNGIsIDB4ZDZkNWY0MDMsIDB4N2FhYmNmYmQsIDB4MzFkMGViODAsIDB4OTQyYWY1OGQsIDB4NmY5ZTMxODksCisJMHg0NjIzZGUxMCwgMHg3YjYzZDVkNSwgMHhmNTU3YjE1YywgMHhhNTdjZmY0MCwgMHhlOTA1Yjc2ZSwgMHg0NGU2MWFlYywKKwkweDI0ZjkyYWI5LCAweGMxYjU5M2FlLCAweDgxZWM1OTcyLCAweGRhMTU5NzRlLCAweGI1NzcxYzQ3LCAweGM3ZmQ4MDBkLAorCTB4ZTM4Mjk5YjgsIDB4N2MwZGZkNDksIDB4MGU5MTYyYzYsIDB4NDRjYTVkZTMsIDB4M2ZlODY3MTgsIDB4OGU0N2MxMTgsCisJMHg2OGVmNzViMywgMHhiZTNlZjkwNSwgMHgxOGUyOGM2MywgMHg2YmU3NGExMCwgMHgzOGI3ZTM5OCwgMHhjZTlmNzdhZSwKKwkweDM0NzVmODg5LCAweDk0MDZkNzMzLCAweDYyYmE3ZjEzLCAweGY2NGJjMjBjLCAweGY1Y2IxZGVmLCAweGE3OGY0OGNhLAorCTB4ZWUxNTQ0MDgsIDB4MWRlNzA2MjcsIDB4Yjc2ZmEzN2UsIDB4NmMzM2Q2MDEsIDB4ZDFiNzc3OTYsIDB4ZDk5ZmIwMTEsCisJMHhlZDRiYzY4YywgMHg1MjNlZDJmNCwgMHhiMTBhNzgwZSwgMHhkMmM2YjZjYywgMHhiNzhlMjMzOCwgMHg3ZTgwMGRiNiwKKwkweDFmYjA3NTQ5LCAweDc4ZWY0ZjY4LCAweGE2Yjg0MTRmLCAweDg4Mjg3NWQ3LCAweDc3N2JhZGNmLCAweDNhZDM3YWQxLAorCTB4ZjgyOTc5ZGEsIDB4MTc2MTc5ZWIsIDB4NTYwM2RiNzQsIDB4ZGIyM2VkMWQsIDB4ZjJjZGY1Y2EsIDB4NjY2ZjVjNTMsCisJMHhhZGIyN2FjNywgMHgyYzdkZmUwOSwgMHhkNzI0ZjQyZiwgMHhmNjZiZjhjMSwgMHgxN2VmNzU2NiwgMHgyODk1ZWVlNSwKKwkweDUyZTQwM2U0LCAweGM2OTFhYzZlLCAweGU5ZWFjYmI5LCAweGJkYWJmYjhmLCAweGQyMGY3M2IxLCAweGRmN2JmM2UwLAorCTB4YjQ3ZjEyYjEsIDB4MTM3ZTEzYzQsIDB4Zjg0YTdkZjcsIDB4YmE0ODVjNDgsIDB4MzdkOWFkOTgsIDB4YjE3OTQxNWYsCisJMHhhNjcwMTRhNiwgMHhjYTU5YzI4NCwgMHg3ZWI4MzU4ZCwgMHhmNDViMWZhMiwgMHgyN2NmYTAyNCwgMHhkODgyOWVlZCwKKwkweGNjYTU3YjQwLCAweDIwMTU5ZDFlLCAweDhmN2JlNDk3LCAweDE5ZWU2NjJmLCAweGVkNjE5MGIwLCAweDE2NTk1YmU1LAorCTB4YjE3ZWY3YzksIDB4YzI3ZGYyMDEsIDB4OTEyMmZiYzAsIDB4MmUyYzlhOWUsIDB4NTY5ZmI2MTcsIDB4Y2YzODhkZDgsCisJMHhmYjQyNTgzMywgMHg5NzVlMDYzMywgMHhlMDQwN2FmMCwgMHg1Mjc2M2IzMywgMHg4NzA4NzViNiwgMHhmOGU4MGQ5MywKKwkweDRmZGU0ODk5LCAweDhkZWU4ZjJiLCAweDgzYmIwOWQ1LCAweGUwZWIwYmQzLCAweDA4ZmI4MmY0LCAweGM2NjZiZmI0LAorCTB4NzQ4YzNjNzIsIDB4OWNmNDhhNzksIDB4ZmVlMmE2NGUsIDB4NzZmODE3ODYsIDB4MWIwZWRkMjMsIDB4ZjQ4ZGRkZWYsCisJMHg5ZDA0Y2U5ZiwgMHhhMjc0ZTc4YywgMHg2M2RiZjdhNSwgMHg3MTFkN2NiOSwgMHhkYzIxOGJiYywgMHgwZWU2MTVmMywKKwkweGM2NTRlZjY3LCAweGJlMjliYjcyLCAweDBmZDEzNDYzLCAweGNlMTk0M2YwLCAweDRlYjUzNDM3LCAweDY2ZGNhMDM1LAorCTB4N2ZhODA5YjYsIDB4YTBlYjEzN2UsIDB4YWUwNTc5N2UsIDB4MzY2ZjQ4ZGQsIDB4NzlmODliOTcsIDB4ZTljNmQ5YmUsCisJMHgwN2QzOTMyNiwgMHgxYzI3M2ZiYywgMHgzZTQzNmQzZiwgMHhhM2U3ZTAxYSwgMHg3MzQ3YTQ3OCwgMHgyNmRlM2QyOCwKKwkweDAxMWJmNGUwLCAweDNkZjFkMGRmLCAweGYxZjhlMTc3LCAweDAyOTczYTFkLCAweDYwM2IwYzgzLCAweDNhZTgzMWY2LAorCTB4NDllODAxNmMsIDB4ZjQwNjUzZTQsIDB4Y2ZiNDBiMGYsIDB4OWYyMjE1YjIsIDB4MTUzOTU2YTUsIDB4YjMwMmViYzQsCisJMHhkN2RjMWVmYiwgMHhmOThkOTQ3MiwgMHg1ZjNhY2Y0OCwgMHg2Yzk3YmMzZCwgMHg3ZWZlMTE3MywgMHg2NzY4OWViNCwKKwkweDkwNjg2YzExLCAweDJjNDBmNTlkLCAweDk1NTdlM2I3LCAweGZhN2ViY2ExLCAweDUzY2EyMzViLCAweGJkYmZlNDg3LAorCTB4MDFlNWQxYjksIDB4NTBjN2YxZjQsIDB4MGUxMjNmN2MsIDB4YTczOTVhZGYsIDB4MmU1ZmI3YzUsIDB4ODAzOWNiMDQsCisJMHgwZjhlNWFkNywgMHg3N2M3ZTc2ZSwgMHg3Y2I5NTAyYywgMHgzZDZiOTYwOCwgMHgzZTQ0MjNlMSwgMHhjMWZjM2MwOCwKKwkweGViODRkYWVjLCAweDQwNDVjNmNjLCAweGZhY2QxZGU5LCAweGZhNGY3YjYxLCAweGYzNThjNWY4LCAweDJmNjdiMzRmLAorCTB4OGM1ZjhmYWMsIDB4YzdkNTA4NGQsIDB4ZDdhZTg4YmEsIDB4NzU0NzgwMTUsIDB4NjE1MGVhOGIsIDB4ZWM4YmY1MGIsCisJMHhmYWZmYzQyZSwgMHg3Njg5YzU2NiwgMHg5NTE2ZWVlMSwgMHhmMmZkNjFlOCwgMHg3MjliZDIyOCwgMHg4ZjZlNWZiZCwKKwkweDg0YWVjNDE5LCAweDZiM2ZmMDUyLCAweDVhN2QyNThmLCAweDVmZTYyYjFiLCAweGZjYzBiZjA2LCAweGJhYmM2ZGE3LAorCTB4M2Q3OWU2ZGQsIDB4NmZhZDBlNTAsIDB4ZTExMjI2ZjksIDB4NzE1OTNmZGMsIDB4NGFiYjQxMWQsIDB4ODU4MThmYWIsCisJMHg4NGRmNzgxNCwgMHhkNzA4MjliZiwgMHgzMjJhMGRjMSwgMHhhZDllZjVkNiwgMHhmNmYwOTUyNiwgMHg4YzM3OGUyZSwKKwkweDBhMzNiZTc1LCAweGE2YTdmNWQ2LCAweDdiNDBiYWQxLCAweGFmOGVlY2ViLCAweGViMDVkZDZmLCAweGZhZTY4ZGFmLAorCTB4ZWI5YTM2YjksIDB4Y2ViYmQzZTcsIDB4YmI3YTQxZjcsIDB4OTI3NGUxNzYsIDB4OWVmNGMzN2IsIDB4ZGNlNTAzOGYsCisJMHg3MzBlZmQxYiwgMHg2ZDRhY2MzOSwgMHhkNGUzZmI0NywgMHg2OGZiZTUyZSwgMHhhMjM1YTEwMCwgMHgwYWVkMWU5ZiwKKwkweDA2YTljYTM1LCAweDFjNDQxNWRiLCAweDFmMDAzOWY1LCAweDE0NWI1Zjg0LCAweDA3M2VhZmMxLCAweGQ2OTMyZWY4LAorCTB4ZDlkNzAyNzksIDB4MTRiMjMxNmUsIDB4ZmMwYjNmNjgsIDB4YmFlNGZkODgsIDB4Y2Y3YWM0N2YsIDB4OWE2ZjVmODQsCisJMHhhMGI0NjhlZCwgMHhiZWJmZDUwYiwgMHgxZTIwYmM2ZSwgMHhhMmQ1N2M2MCwgMHg2NjljN2RhNywgMHg2N2M0NGU1MSwKKwkweDEwYzVkMWIzLCAweGMyODNkZWZmLCAweGFiNzgxMDNlLCAweGJhNzczNDExLCAweDBmMDFjODY1LCAweDgxZmQ2ZmVjLAorCTB4N2ZiZTI3MzQsIDB4NDhkOWM3N2EsIDB4NDdlZDE5OWQsIDB4N2Q4NzZhOGYsIDB4NTY1ZGU5YTksIDB4NWJiYjg3ZDQsCisJMHgzOWRlNWVjZSwgMHhjMTliZTQ4MCwgMHhiYjNiZWIwZSwgMHgzM2RkYjBlZiwgMHhjZmVkNDdlMCwgMHhmZDg4YmY2YSwKKwkweDBkY2RlYWQ1LCAweGFhMjI3NjgxLCAweDFhOTQ1MjU5LCAweGRhNWE1MjNhLCAweDIyMGNhOWZlLCAweDBmMjg2M2ZlLAorCTB4NTdjYzE5YmQsIDB4M2U1ZWZiMGYsIDB4NTRkM2QwNTAsIDB4ZDdiZTQwZTYsIDB4Y2RiYjdiZTIsIDB4ZTAwZjYxOWQsCisJMHhiNzM2Y2RkYiwgMHhmMzg1ZDcwMywgMHgzZWQyZTZhNCwgMHhlODNlYjBiMywgMHgwNjc5ZTljZCwgMHgwYzZmZWUxZCwKKwkweGVkMjliZDQzLCAweGI0NGZiOTNkLCAweGZkNzMyM2M3LCAweDVlZjY5M2ZiLCAweGNlNzNmZWY3LCAweDY4YzdkYTBmLAorCTB4NzRlYzgzZGYsIDB4YzUyYzc0MGUsIDB4MjgyZDVhNzMsIDB4MDMzMjA3ODUsIDB4Nzg0YWRmZjcsIDB4YWNmYjE2YTksCisJMHhhYWI3MzA4ZSwgMHhjZGI2MmZiMCwgMHhjYTUzYjI3MCwgMHg3ZGQwYWM4MywgMHhmMzg2OWUwMCwgMHg3ODBmMzg3ZCwKKwkweDM3N2ZjZjEwLCAweDRlMTFlYjNiLCAweGRhMWIwZWZhLCAweDkxYWZiMGFmLCAweDUwNTYwZmI4LCAweGY4NzA4Yzk2LAorCTB4OGM5YWVjYzAsIDB4MjU5OWZlZjIsIDB4ZjRmYWU4OGMsIDB4MTRmN2NjYjMsIDB4YmI0YjdhNmMsIDB4MDM2NmU4OGUsCisJMHhmZmU4ODJiYiwgMHg1Yjk5ZGQwYSwgMHhlYmUyNjZkZCwgMHg3ZTdlZjhiMSwgMHhlNTBlYTM0NywgMHhhMWNmOGU2ZiwKKwkweDc5N2FiOTQzLCAweDQ3NGViMzQ3LCAweDJmMTllMGY0LCAweDBmNTY3NGUwLCAweDU0ZGZlYmViLCAweGJhNDhmZWE3LAorCTB4MmU5ZTE0OTgsIDB4YWJmNmYwNDIsIDB4Yjg0OWJjNDAsIDB4MzBmNDEyOGQsIDB4MzI4NmUxMGEsIDB4YjI3ZjRiYjksCisJMHgzNzBmYzIzMywgMHhiNTRiMGJjMCwgMHg1OGM3OGU4NywgMHhhOWMyMDY2NywgMHg3ZDYzYzVlZCwgMHg5YWJjNjEzYSwKKwkweDhhZGQ4Zjk3LCAweGFiZjlhOTcwLCAweGNjNjE4ODg5LCAweDQxOGYyZjVmLCAweDMwYjJmZmJhLCAweDcyNzM1ZGJjLAorCTB4MGY1YjlkNzEsIDB4M2RhYjc4YzQsIDB4MTU3YmU0OGIsIDB4YmRhMjMwZWIsIDB4YWRkZDcyMDAsIDB4ZDJlYjkwMGYsCisJMHhlODY3ZGI4ZSwgMHhmN2YxYzYyOCwgMHgxMmQ5NTEwZCwgMHhlNzU5ZjM4MCwgMHg0NjE2MjRiMCwgMHgzZjcyYzg1ZiwKKwkweDAwMzk2ZGRhLCAweGUxNTVmNDdmLCAweGZjYzVlNGY5LCAweGRhNDc2ZTE4LCAweGIyNWFmYzgzLCAweDk2NzhiN2RjLAorCTB4ZTdhMThjN2IsIDB4OGUwZGY2ZjEsIDB4YjE0ZTdmMjQsIDB4Yzg3YTFlYzYsIDB4YTc4ZGVkY2UsIDB4ODFjZjVjZWQsCisJMHgzYWUxNzY2MCwgMHhlMmM1ZmQ0ZiwgMHhhOWQzNDJmMywgMHgwY2FkZjdkYywgMHhkYjZhNzRlMCwgMHhhMDVlNzliYiwKKwkweGUzYWM1M2EzLCAweGRmOTA5N2Y2LCAweGI5ZDMzNmJlLCAweGZiZjA3OGFlLCAweDdlMmM0Yjc5LCAweGZiOGFiY2ZlLAorCTB4MmY1NWQ4NTIsIDB4NDA3NTY5YmMsIDB4YmIyZGUyZmYsIDB4ZjAwMWJkZTMsIDB4YmZlOThhYmIsIDB4NGNlYmE2ZWUsCisJMHg4ZmVmOTc5YywgMHgyMGZiM2JlOSwgMHgyNzRiZDgzZSwgMHgxNjUwMWQxMiwgMHgzYzZhZjhiZiwgMHgzNzM4MDNhNywKKwkweDE0ZmY0NTBkLCAweDYzM2Y4ZmU3LCAweDVkZGQ4MDUzLCAweDNkYzZiMGJjLCAweDFmYzAyZjI2LCAweGY5OTIyZTczLAorCTB4MGVmYWViMDIsIDB4YWI4OTFlMjMsIDB4ZmRhOTk5Y2YsIDB4OWUyNWJiNzYsIDB4ZDYyZjRkZTQsIDB4OGY0ZGU1MGIsCisJMHg3ODQ4YmFmMCwgMHgzYzI1ZGI2YSwgMHg5MTNlMGRmNywgMHg5N2M1ZjY4MSwgMHgwN2M1ZDgzZCwgMHhhZjdlYzFlYywKKwkweGRjN2IxNjM3LCAweGY1ZmM3MjYzLCAweGRlYTc3ZGJmLCAweDVlZjMwZWU2LCAweGFjZmYxODhiLCAweGRhMTI3ODczLAorCTB4ZDZjNmM1N2QsIDB4ZTFmOWMyY2IsIDB4MGI1MzM5ZTQsIDB4NTdjZTM3YTcsIDB4N2ZiOGUzNDYsIDB4MWYxYTY3MzksCisJMHhlZGRiNWQ2ZSwgMHgzZmU2OWZiYSwgMHgwYWFiMDdkOCwgMHhmNDRiMGJiMCwgMHhkY2VkMzc5ZSwgMHgzMjZhYjA1ZiwKKwkweDNmMmU2YmQ0LCAweGQ5Y2U4ZTNiLCAweGRjODQ1ZTkyLCAweGRiNzk4YWJiLCAweGY0YjU3ZjkwLCAweGJlZmRmMTIxLAorCTB4NGIyYTViYzQsIDB4NjkzZGJjNDUsIDB4MTFiYTcwNzcsIDB4NDNmOTIwZmMsIDB4Mzk2ZDQ3MGIsIDB4ZTEzY2M4YzEsCisJMHg3NWNmMDNjZSwgMHg3OTkyMzVjMywgMHhiZWRlMWU0MSwgMHhmZTdhNDBjMSwgMHg0ZTFmZjNjZCwgMHgzZjdhMDNjZCwKKwkweDViNjBkNmI2LCAweDVhY2U1MzBhLCAweDUxZWQzYmI3LCAweDM2MGRhN2Y0LCAweDFmYTgxNGQ5LCAweDg2NWViNDczLAorCTB4NGViOTVmN2MsIDB4MWMzZDIzNzUsIDB4ZTI3YjdiNWIsIDB4MDBiZjI4NzQsIDB4NzU4MmFkZmUsIDB4NTAzMDZlNTQsCisJMHg3NzBkYWNmYiwgMHhjMTA5ZmI1MCwgMHgxMmViOTVkNywgMHg3Y2JjYTNmYSwgMHg0NDgxZmRiMywgMHhlZmFjZTNjNCwKKwkweGYxMWViZmVlLCAweGViNjhjNWIyLCAweGFhY2ExODNmLCAweDI2M2RjNTI2LCAweDM2NzNkZTAwLCAweGI3ZDUwNjQ2LAorCTB4ZGMyY2Q4ZTgsIDB4NTMyYmM0ODcsIDB4MWRjZmRkM2MsIDB4ZGM2MzFlYjAsIDB4NmI2M2M0NGYsIDB4MThkNTFmODgsCisJMHg5MmNjZWRjNywgMHg5YWVmYjAyOSwgMHhiZWM5NjcyMSwgMHg4YTI3YmRkZiwgMHg2NjJiYzlmNCwgMHhkNmM4ZWM5NSwKKwkweGI3ZjNmZmMxLCAweGY0NWVhMTJiLCAweDM2NDlkZTlkLCAweDU4ZjNjMDllLCAweGNlODY2NzgxLCAweDhhOGZhMDQwLAorCTB4N2EyZjVlMDgsIDB4Njg3NjRmNTEsIDB4NzgyNTQ1OTEsIDB4MWQ1YzgyYjcsIDB4NjVkZTRhNDMsIDB4N2VmZDBiMWUsCisJMHg0NzUzZGYyMSwgMHhmZDBlMWVhZCwgMHgxODE4YzZjNiwgMHhiNDVmYTFlYSwgMHhhMDY2MjljZSwgMHg0ZTc5N2YyNywKKwkweGMwNjc2OWZmLCAweDk3MzM0NjdlLCAweDQyZTJlZDFlLCAweDVmNmEwODY2LCAweDBhN2Q2NTExLCAweDRjMTg1YWVkLAorCTB4MjhiMGZhOGYsIDB4ZDhmOWY4MjIsIDB4ODEzZGFlY2IsIDB4NWI1OGM0ZjYsIDB4YmZhNGJiNzAsIDB4YmZhMDM4OWMsCisJMHhiMWI5N2VmZSwgMHg4ZmU3Y2Y3YiwgMHg1NjdkODA0YywgMHg5ZWM5NTNlYywgMHhkZTVjOTBiZSwgMHg0MWNhZmI4ZiwKKwkweGRhNTFiZjdjLCAweDI5YmRlZjA0LCAweGY5ZTZmM2EwLCAweDkwNTJjYjYzLCAweDg2MTQwYWJlLCAweGU3NjNhZTdlLAorCTB4NWNlNWYzYzMsIDB4MDE4YzlmNDEsIDB4ZjFmOWZiOWUsIDB4YmIzOWQxM2MsIDB4N2Y2YzhlYmIsIDB4ZWViY2MxNWQsCisJMHhlMmZmYWUzYSwgMHhjYjBmZDllNSwgMHhmNzNiNGVhYiwgMHg4N2Y1Njg2ZiwgMHg1M2ZlN2Y5NiwgMHhmMDc4YTNmYSwKKwkweDBiNWUxOWFiLCAweGU1ODVmZjk1LCAweGZlNWMyZGM5LCAweDU2ODVlNTZhLCAweDY5NzVjODVmLCAweDRlN2Q1YmQ3LAorCTB4Y2YxM2QyMGQsIDB4ZDdlMjc5MDksIDB4ZmU3YTQ2MTcsIDB4NmI4ZjllMzMsIDB4OWU4NDg2ZTIsIDB4MjE5ZWMxOGYsCisJMHhlYTg3Nzk3OCwgMHg3NjBlNWNlOSwgMHg2ZmQ4ZWRkNywgMHg1NzExZDk4MCwgMHg2NjVhNGIwOCwgMHhiOTQ2OGFjYiwKKwkweGRjZjE2NGQ2LCAweDk3ZTAxNzE5LCAweGE4ZDRkZmVhLCAweGVkZDFmOTQzLCAweGZiMDQzMWFmLCAweGY1ZjllNDZkLAorCTB4ZmZiZTM4OWUsIDB4ODc1ZTM4ZjIsIDB4ZmI5ZDJiZjMsIDB4OTI3OTQ0MzcsIDB4MmY2ZjM4ZjUsIDB4N2UzMDMzYTMsCisJMHg4NWZiY2IyNSwgMHhhZjc2OTBmYywgMHg5ZGE1NzdiNCwgMHg3ZDU5ZWQyYiwgMHhiMzY3YjcwMywgMHg3ZTQxZGQ2MywKKwkweDVmYWZkNjMzLCAweGVkMTgzZjkwLCAweGVmNzNlNDc0LCAweGU3ZGEyOGFlLCAweDEwN2I4YTY3LCAweDczMTU2OWYyLAorCTB4YTAxNzE0M2QsIDB4N2MwZGViMDcsIDB4YmNmNWRhZmQsIDB4MTNlYzI3MTYsIDB4NDEzYjI2ZTYsIDB4MWQxY2NmYjYsCisJMHg4ZDZmOWU1ZSwgMHhjMmZmNTNkMywgMHg0MGNhNmZjNywgMHhiNmIzZWUzYiwgMHhjZTUwMzM5YiwgMHhmZmYxYTY3ZSwKKwkweDBmMGZjNGY2LCAweDUwN2Q3ZTBiLCAweGUxNTg5M2U4LCAweGY5MDg3ODI3LCAweGVkYzBlYTA4LCAweGZlZjAyZGFlLAorCTB4ZTI2ZWM1OGEsIDB4YmUyZWRmYWIsIDB4MTc0N2NhOTEsIDB4OGZlN2E0MmYsIDB4ZmNkMjY1YzUsIDB4ZGM3N2MyYjYsCisJMHgyM2E3MDBkOSwgMHgxN2QyNTUyYiwgMHgzZWVlOGQzMywgMHg5MWRlZjBiMSwgMHgxYmY5MWQwOCwgMHhjNzk5ZDcwZSwKKwkweDNiNjMzMzZmLCAweGNjZTVmM2EzLCAweGYyNmMyN2M3LCAweDFmMDFmODA2LCAweGU5MGM3ZGMzLCAweDA5YWY5Zjc5LAorCTB4OWQyYTVlYmMsIDB4MmI0ZWIzNTYsIDB4N2E2ZWFkZWEsIDB4YjdhMjEwM2QsIDB4YTcyZjExZGIsIDB4ZjYyMjY3NTksCisJMHhmYTNhNTVhYiwgMHhmM2ExMjkzNCwgMHhhZjVjYzgzZiwgMHgyMzY2YmY2MSwgMHhkMzdjOGZlYiwgMHg5MmY1YzUxYywKKwkweDAyOWJkZmI2LCAweDllZDBhYjdmLCAweGQ0MzNmMjg1LCAweGNjZTQ2MTVmLCAweDdiNWU4MjNiLCAweGM0ZWY1ZDViLAorCTB4OTMzM2JjOTEsIDB4NTZlYjRlZGQsIDB4M2VmNDRlMjksIDB4YjRlNzA3Y2UsIDB4YzYzOWYxMGYsIDB4OTc1ZmQwODksCisJMHhjNzc1YjU2ZCwgMHhjNzc5Zjg1NSwgMHgxODVjNzFmZCwgMHhmZTRmNWM3ZiwgMHhlZTNhZWQxZiwgMHhkNTcwZTc4OSwKKwkweDI5NjQ4NWZhLCAweGM0Yzc0MmZkLCAweGQ5YzUxNjdlLCAweGU4NDRmYzgyLCAweDBmZTcwZjBmLCAweDQ4ZGUzYWJhLAorCTB4ZDUxMGRiZmIsIDB4YThiOGM1ZTksIDB4M2U3ZTY2ZjcsIDB4NTVlNTFhNGYsIDB4NWE5NWRmZDAsIDB4ZmU4ODU4ZGMsCisJMHg3MWM2N2ZiMCwgMHhiYzdkYTYzZiwgMHhmMWNmMTkyNywgMHg0ZThkOTJiZCwgMHgyYzVjZTNmNCwgMHg3NjY4MGUzZiwKKwkweDQ3ODEzOGYxLCAweGQzNThlYjQ3LCAweDAzZWM4ZGUxLCAweGYwZWM0YWViLCAweDM0YTExYTE0LCAweGY4ZDIyNmM0LAorCTB4MDk2ZWFjNDksIDB4MTFmYTBkZTIsIDB4YTNkYmYyMzAsIDB4NzQzYzhhN2MsIDB4MjEzYzk3NDMsIDB4OTFhNTYxNDcsCisJMHhhZGRiNzdjOCwgMHhiYzNjNTMxZSwgMHg1ZDQ2NzQzNywgMHg1M2VkZmEzZCwgMHhlMjNjNzhhYiwgMHg2ZGU5ZTI4NCwKKwkweDFiOGQwZWNmLCAweDVlMzkzMmNiLCAweGJiODhhZmYwLCAweGQwMzQ2ZmU2LCAweDNlMzdmMmJhLCAweGZjZDFmMTQ2LAorCTB4OTVlYjU3OGQsIDB4MWY5NDM5MDAsIDB4MjdmZWEwNmYsIDB4OWJkMzlkNWUsIDB4ODUxZjE4ZmMsIDB4ODgwZWJmOGYsCisJMHg0NjYyZjRlNywgMHg4YTEwZTExZiwgMHhiZmE1ODY4NywgMHgzMTNmZjE3ZSwgMHhmNjA5ZGNhZSwgMHhlZjNjYjA1MCwKKwkweDIwMjQzZjE3LCAweDBjZmFhMTZmLCAweDNjN2Q3M2M5LCAweGMwN2YyM2Q3LCAweGQzNTgwNTdjLCAweDdjYzg2NjFmLAorCTB4OGZlNDBkODUsIDB4YmU2YzZhZGQsIDB4ZGU1MWUzMDYsIDB4YmM0MzFkMWEsIDB4MmJmOWVmYjcsIDB4Y2Q2NzZiYzUsCisJMHhiNmJjNTA3MCwgMHhjZjdkZmRmYiwgMHgzZmY2YzcyYywgMHgxMTgzNjJjYywgMHg4N2JlMjlmZSwgMHg3Y2NmZjQxNSwKKwkweGM5ZTNjOTFiLCAweGIxMzI2ZWRmLCAweGQ5YTViMDI1LCAweDNjNTMzNzZmLCAweDhlOTU0ZDc4LCAweGVlZDE3Y2ExLAorCTB4ZTgzMjY2MWIsIDB4YTBkYjVjNzgsIDB4NDdmOGUwMmIsIDB4MGVmMTI4MzksIDB4N2M0NDY0MDQsIDB4ZmMyMWJjNDgsCisJMHg2ZTMxOThiNiwgMHg1ZmFkMDJmYywgMHg3ZTgwY2JhZSwgMHhjN2RjMDRmMCwgMHg0ZTkwNmI5NiwgMHgxNWQ5NTU3YSwKKwkweDc1YzgxN2Y0LCAweDRjOWY0ODVkLCAweGZhNjlmZjhhLCAweGMzZDQ2N2U0LCAweDljNWZjNWI3LCAweDc0ODE5ZTFlLAorCTB4NWFjM2Q1YWUsIDB4NzE2NGRiZmQsIDB4MGJiZjYyNTUsIDB4NDIxM2UxZTksIDB4ZDc4OTRkZmUsIDB4N2UzMDQzYzQsCisJMHhjNzZmMDYxNiwgMHhmMDBjMWM4NCwgMHhmZjE5ZGY4ZiwgMHgxZmUzZmMyMywgMHhlMzA5MWNhMSwgMHhjOGM2N2YxZiwKKwkweDlkYTM2ZmU1LCAweDBjMjkzNmRkLCAweGU2MjdiY2JmLCAweDMyZWVhZGQ3LCAweDZmOGNmZWEyLCAweGIzY2FjMjUxLAorCTB4YzY1MWFiNmMsIDB4ZmFlMDU3MTMsIDB4MmI0NGZjNjQsIDB4YjdjMGMzOGYsIDB4ZGU1ZmZiMTEsIDB4N2IwYmJhZDQsCisJMHgxNjVlYzZlNSwgMHgxNWRiZTY4ZCwgMHgzN2I5YzNkZiwgMHgwNDZiM2NjYywgMHgzMDE2M2I5ZiwgMHhlYTNhYTM4YSwKKwkweGE4MmJjOTE4LCAweGIwOTNiOGZiLCAweDAwMjNmMjk1LCAweGI4ZTA0ZjFmLCAweDlkNjM4YTE3LCAweDFkOTIxNWI2LAorCTB4ODY1NmUzMjQsIDB4ZjhmM2UwZDgsIDB4Y2ZkOTc4OWUsIDB4NmZjNDQ3ZjUsIDB4ZTI3YTBmN2EsIDB4YjA1ZDYyNGYsCisJMHg1ZmIwNjdmZiwgMHgxNDE2MDJmYywgMHg5OTcxOTE5ZiwgMHg2MmFmM2FmOCwgMHhjNDc1NDdjYywgMHgzYmRhZGZjOCwKKwkweGYzMDRiM2NlLCAweDMzODZiYTNmLCAweDhmNTA1M2U3LCAweGEyMTViNTI5LCAweDcyY2ZiNTNjLCAweDY2ZmM2MWI2LAorCTB4OWZlZTI5ZjksIDB4Zjk4ZjNlNWYsIDB4NzkwMTJhOTYsIDB4Y2EyYzllMDUsIDB4MDViYzQyMDMsIDB4MGE3NjA3ZmEsCisJMHhhYzUzYjZmOSwgMHg1ZmU0ZjQxYiwgMHg1YWJhZjllMywgMHhhNGY0MDNlMiwgMHg3NTZlODdjNCwgMHhlZDc4NGFhYiwKKwkweDAyYTdhZjBhLCAweDQzZmVkYWYwLCAweGY5MTlmZDc4LCAweGU0OGI5ZGYyLCAweDg1MmYwZmNiLCAweDkxNzFmZTZlLAorCTB4OGM0YmYzNzQsIDB4M2IwOTBjNmYsIDB4NTc4ODY3ZGYsIDB4Njc0MDdjZWQsIDB4YmVmODgzNDcsIDB4NzhkYjNhMDcsCisJMHhmOWQyZjE4OSwgMHhhN2E4OWZlNiwgMHg1ZGZhZTE0MiwgMHg1YzI4NDI3YywgMHhmYWViMTY1NywgMHg1MTY2YmM5MSwKKwkweGQ1N2E3MGNlLCAweDRmZmU2MDk2LCAweDEyZDg5MWU3LCAweDFlN2E1Yzg2LCAweDNiN2JmYWM5LCAweDE5Njc4ODhkLAorCTB4ZDVlYjkxMDcsIDB4ZjZjODhmZTYsIDB4MGYyNTE2OWEsIDB4YmI4NTlmY2YsIDB4ZTAzOWQzY2YsIDB4ZThiZmRiNzQsCisJMHgwNzlhMTAxYywgMHgwZjlkZTdjMiwgMHgzOWZjOGRlNCwgMHhkY2QwMWQ1NiwgMHhhNjc3ZmMwYSwgMHg3NTI3NDhjOSwKKwkweDM3N2UzOTk1LCAweDdiZjdmZDBhLCAweGEwZTdjYzBkLCAweGZmZDgxMWZlLCAweDVmZmJjNjBhLCAweDAzYmNiNGQxLAorCTB4MzA1NzU3ZmQsIDB4NDc5YzU3YmQsIDB4MWRiOWVmOTUsIDB4N2M3YzgzMTUsIDB4ZjI5NTVlYzUsIDB4ZmU2NmQ4YmYsCisJMHgyYzQ1OGViYywgMHg0Yzc0ZmY0MSwgMHgwMjM5OGU4MSwgMHg4YWViMTllMCwgMHg3ODAwOGU2MiwgMHgwN2I3OGRjNiwKKwkweDc5MzllNWQ1LCAweGMxMzc5OGFlLCAweGZkZTgyYmRkLCAweDgyYjMxYmE0LCAweGFlNzhhN2ZhLCAweDNhOWU3YTA4LAorCTB4OWVhODM3MmIsIDB4YTgyMjM3NWUsIDB4YTM4NWVmN2YsIDB4ZGU5OWVhODMsIDB4NjdmYTgzNmIsIDB4YWEwZTRjMzcsCisJMHgxY2RlMzRlNywgMHhhYjE4ZmZkNCwgMHhlYzE0N2M3YiwgMHg1YmZhM2ZiMywgMHhlYmNjM2YwMCwgMHhkNjBjYjhlYSwKKwkweGI3YWM0MzNiLCAweGEwZjI5YWVmLCAweDVhZmQ4MWY3LCAweDUzMzgxZTMxLCAweGNmMTdjOTkwLCAweDAwYWJkZjhkLAorCTB4ZmYwODY3MWMsIDB4MzliZWU1Y2UsIDB4NTVjZmUzNDEsIDB4Njc3ZTg4YWIsIDB4MDQ4ZTFhMzYsIDB4YWNmNDY5ZmEsCisJMHhjMDJhNGY2YiwgMHgzOGE3YzZiOSwgMHhiOTVlYTE1YiwgMHhlY2Y5ZjgyNiwgMHhiZGU4MWIxZCwgMHhmNmUwYmVkOSwKKwkweGViODM5YmI5LCAweGQyOWNkZTgzLCAweGI5MDFlNzlmLCAweDQ2NzJiZjI5LCAweDg3ZGZiMDQyLCAweDk5ODlkMDg1LAorCTB4YjU5OWY0ZTQsIDB4N2FhNWZmZGMsIDB4MjRlODZhZmIsIDB4MjdlYzVmMTgsIDB4ZDA0MzhkZDIsIDB4OTgzOTI5OGQsCisJMHhjMTFkMjI2ZSwgMHhmYWY5NTM3NCwgMHgwNzA4YTFkNiwgMHhmYmEzZmMyZCwgMHgwYmM5ZTg2OSwgMHhmZTAwN2VmZiwKKwkweDdkMzA2NzE2LCAweGZiNGVlMTY5LCAweGVjNTY3NTgzLCAweDk1ZWZkODUwLCAweDZhY2ZiODUwLCAweDJhNzk3ODc5LAorCTB4NjMzYjg1MGIsIDB4MWZkNzIzM2UsIDB4Njg4ZmVkYzEsIDB4ZDk4MWZkZTAsIDB4ODljYTE4ZjMsIDB4YTgxNjNiYjMsCisJMHhlMzYzODcxOCwgMHhlY2ZmM2M3OSwgMHhlZDA3YWY4ZSwgMHgyZjg5ODQ3MywgMHg5N2M0ODRlNSwgMHhmODA0MjVkNiwKKwkweGU5N2M2NDdmLCAweGFmMTljNjM0LCAweDY3MTExNzY0LCAweDg0NGZmZGRjLCAweDhmMDBjODA3LCAweDBiMTFmMzAxLAorCTB4NzFkZDExOWMsIDB4M2M3ZjQ4YzUsIDB4NjUzZjJiNDksIDB4YjllM2ZhMDksIDB4ZmUyYmQyMDQsIDB4YmMzZDZjNzgsCisJMHgwM2U2MzQzZCwgMHhjNjUzYWUzNywgMHg4ZWJlNjRlNSwgMHg5MzBhMmJjYywgMHg4NDk3ZmM5ZiwgMHhiNDBmY2MwNCwKKwkweDc1ZjllMzQ3LCAweDNhN2NmYjRiLCAweDIyYmNjOTc3LCAweGMzMDJmMjI2LCAweDRmYTRmZmQ4LCAweDE0ZDdmMTlhLAorCTB4MjY3NjBiYjIsIDB4MGFmZWJkNzAsIDB4MTc2ZGQ3OGUsIDB4YTkyZmJjODgsIDB4NDcxYTdiZDcsIDB4MmE3YWRmYzYsCisJMHhjNTJhNWQ5NSwgMHgyODk0YmIxMywgMHhmNDYxNTNlNywgMHgzZjA5NDdjYSwgMHhlNjg1YmY1MSwgMHhhODE0N2Y4ZiwKKwkweDM4ZWU2YTQ3LCAweDBiZjUwN2JiLCAweDZjNjNmZGMwLCAweDZmNDA1OGI3LCAweGZkYmQ3ZTJiLCAweGQxMmI2OGJiLAorCTB4YWFlYmQ3NmIsIDB4OWMzNDJmYWYsIDB4ZDhjNDcwODksIDB4MjIyZDhlMDEsIDB4ZTQ0NWFmZGYsIDB4ZDZmNWM5ZmIsCisJMHhmNGJhYTQ0NSwgMHg5YzFlZDg3OSwgMHg4YWUzMjdmZiwgMHhjMjhkZmRkYSwgMHgzYWZlNzFmZSwgMHg5NzY0MTdiYywKKwkweDc2ZTVjZjJjLCAweDg3MDE2OWRiLCAweDI3NmUxNjBkLCAweDlkYjkxMzE4LCAweDFmMzlhYjUwLCAweGZiNzAzNmQ1LAorCTB4YWNkN2E0MGMsIDB4OGM3MTgwOTYsIDB4ZGZlYTE2ODksIDB4NGM2ODVjZGYsIDB4ZGY4NDcxYzQsIDB4NDJhNjc5NjUsCisJMHg0NTcyYzU3NiwgMHg3N2U0N2IyMSwgMHhmY2Y0ZDFiNiwgMHg4Njg1MDljZiwgMHg2ZmZmZTg0NCwgMHg2MDExYWYzMSwKKwkweDE2NjM2NTg4LCAweDkzNDM4ZjVmLCAweGU4OTJmZTE3LCAweDY4YzI1MmZmLCAweDM2ODk4ZDJhLCAweDVkYjY3ZmUxLAorCTB4NmE5MWY0ODEsIDB4NWRhOTE5NzYsIDB4OGFhNzFmMGQsIDB4MWFmYmU0NGUsIDB4YjQ2NGYyMjksIDB4NDI3MTgwNzEsCisJMHhkZmRmYTI2ZSwgMHhlMmQyZWRjNCwgMHhmZTQxODliMSwgMHhmMThjZjdmZSwgMHhkMGFmZGZjMiwgMHg1Mzk0MmVlYiwKKwkweGVmNzgxNGJmLCAweGVhZWZmZmM5LCAweGYxNDc2YjY3LCAweGFmZmZmNWFkLCAweDdmZmVlNDhjLCAweGYxMDgxZjE5LAorCTB4ODVjNzNiZmYsIDB4MWUyM2ZmZjUsIDB4ZmU3ZWVkYTIsIDB4MmRkODkzZTksIDB4M2U1MGQyOWYsIDB4ZWE3YTMwZWQsCisJMHhiNWQ1ZmNmMSwgMHg2ODc4ZWMxZCwgMHhhNGViZTdlZSwgMHg3ZGMwYzBiOCwgMHg2NzNjNGVkOSwgMHhiYjY0Y2YyZCwKKwkweDRiNmY0ODJjLCAweDdmM2I0MzE4LCAweDY5NmVhNzQ3LCAweGU5NWYzYzI0LCAweDNlN2MzNjY1LCAweGJmM2YyZDdjLAorCTB4Mzg3MWFlNTUsIDB4MGU1MjliNzEsIDB4ZmRjODlkNWMsIDB4MWYzODA2ODcsIDB4YmRmMTcyNWIsIDB4MjcxODZkYzksCisJMHhkOTk1Mzk1OCwgMHhiMjM1MGQ1MSwgMHhkYTJiMjJjNiwgMHhkODU5NmI0NSwgMHg0MTY4ZTNmMywgMHg3NzBhMTM0ZiwKKwkweDQyNzZmZTUxLCAweDBmYjdjZjE3LCAweDc2OTNhN2VkLCAweDczZTIyMTdlLCAweDJjZTc5NzU4LCAweDc5NzFjZjhmLAorCTB4Y2YxMTIyNDIsIDB4NWYzYWVkYTksIDB4YjI3ZDczYjgsIDB4YTQ2YWU4YWQsIDB4ZjBiZTgxYWYsIDB4YzI5MTg4ZTcsCisJMHhiYjMyZTY0ZiwgMHgwM2Y4ZTIyNywgMHhkODdjZjFiNywgMHg2NzdmMjk0YSwgMHhmMDFlOThlOCwgMHg3NWUwNDUzZSwKKwkweGQ3OWU1YWNhLCAweGZmN2ZjZWMxLCAweDQ1ZWQyYWJkLCAweDk0MzNlMzQ2LCAweDJkNTM5NTJiLCAweDU1MTNmNDNlLAorCTB4Njk3YTY0YjYsIDB4OTljNTZlNWQsIDB4ZTVhMmYyODMsIDB4MmJkNjM3NmQsIDB4ZTg2ZGYzZjMsIDB4OWRmZDcwOTcsCisJMHg5MWZiNDcyOSwgMHhmY2I4YzlhOSwgMHg1MmEzYjNkMiwgMHg4ZjFlOTA5ZSwgMHg2NGQ0MzhhNywgMHhmMTIzNmY0MSwKKwkweDcyNDA5Y2IwLCAweGMwMzQ2NTdlLCAweDkyZWQ3MmJiLCAweGYzZDc5ODVkLCAweGM1MTkxZmZlLCAweDVkYTgwZTliLAorCTB4NWZiMDcxNDMsIDB4ZTYxNjcwMDEsIDB4YTU2N2E5NjIsIDB4YTY0OGI3ZTQsIDB4NzE4YWE2NzEsIDB4Nzk4MmZmYmMsCisJMHhmZWYzZmMyMywgMHhkYTc1ZTVhYSwgMHhmMzAzMDFjZiwgMHg5ZDFkMDA0NiwgMHgwMzgzNzlkZSwgMHgwOWU1ZWVlZCwKKwkweDkzY2ZlNDExLCAweGFhODNkYTcxLCAweDQyNTIzZWU3LCAweDVjMWFhZWZhLCAweGQxMmQ0ZGRhLCAweDljODNmNDM2LAorCTB4M2E2MWY5ZGUsIDB4YjkzZTRkYzYsIDB4ZWQwNWFjZTcsIDB4YmJlODdmZDgsIDB4N2MyZjk4MmMsIDB4MTZiYmQxN2MsCisJMHg5M2YxYzAxNywgMHg5ZGU1MmE0NSwgMHg4NmY0MmFkZCwgMHg4OTdkZmI4NCwgMHgyNzFmZWUxYywgMHhkYzIxMTdiYSwKKwkweGRkZmM1YjZmLCAweDJhM2NjMGQwLCAweGU4ODEzMGI2LCAweGE1NGZiNjc5LCAweDljYjc1YzkwLCAweDE2OGQxY2RkLAorCTB4YmFiZDc3NGEsIDB4MmVhODJlMzksIDB4ODliNTQwZjUsIDB4YmYzYjg1ZDUsIDB4NjllODI0YmMsIDB4NjMwNmQzNzYsCisJMHhmN2U3MDNhYSwgMHgzOGZhNDJhYywgMHg3NDc0ZTdhZSwgMHhlN2M1OWI3YywgMHhhN2FmZjRjZCwgMHgxMWIwNjliYywKKwkweGI0N2Y4M2VkLCAweGVhMmI1ODk4LCAweDgxODc3ZDMzLCAweDhhYmI0OWU3LCAweDhmMGJhMDE1LCAweDlkNzZiZmMwLAorCTB4YTY4ZTVlN2IsIDB4YzYzZTY2ZjEsIDB4Y2MxOTQ3ZTUsIDB4ZWJlMDEwYjUsIDB4NzI0ZDk5NjksIDB4OTk4ZmJiNDEsCisJMHgyNWM2Mzg5ZiwgMHhhZTY3NWMwMSwgMHhlM2ZhMTg1MCwgMHhjMDIyZmZiMCwgMHhmZGUxNjc5ZiwgMHhhNWZkYTE1ZiwKKwkweDM3OTk2N2RkLCAweGY5NDgwZTU4LCAweDNjZjAyOTU1LCAweDc5ZjgyMWJkLCAweDY5NmZjYjY1LCAweDQzY2MxOTljLAorCTB4Mjc2MDIwNzksIDB4NzM1ZjllNjksIDB4ZDgwYWY1MGMsIDB4NjdlZDQxNDcsIDB4NTE5YjY2ZjYsIDB4MTQ0OTZmOGYsCisJMHg2Y2ExZWRmMSwgMHhmZWYwZjdkOCwgMHgxOGVjODhhZSwgMHg5MjdlMTg0ZiwgMHgzNmM1YzllNSwgMHgxN2NmZDYyMiwKKwkweDdjNzk1MDQ3LCAweDUxNzJhMzMxLCAweGFhZTNhNzIyLCAweDQ0ZWZiNzk2LCAweGM3NjZhOTdiLCAweDczOGUyMzE2LAorCTB4OTY4MWYxYzksIDB4OTk5YmQ2MTMsIDB4ZTg5NmVmNWYsIDB4MWUyMWFmM2QsIDB4MjgyNTJjZDksIDB4ZTFiMzUwNGUsCisJMHgzMmVjOTFhYywgMHhkMTUyOWYwMSwgMHgwMGYwOGE1ZSwgMHgxY2MyZGMzYywgMHg1MDNjZjFhYiwgMHhjN2YwNjU1YSwKKwkweDViZmZlMGU5LCAweDYwYzNiZjcyLCAweGQxZGE4MGJmLCAweGI1MTczOTkxLCAweGI5NGZiOTVmLCAweDVhYmNmOTZmLAorCTB4ZjMwYzdhMDUsIDB4NDU4M2U0YmUsIDB4ZDhjZDFmNDIsIDB4MmY3OTY5MzgsIDB4Y2VmZDUxMDAsIDB4ZmM5ZDE5NjMsCisJMHg3OGY2NDliYywgMHg1MTZiYzA5MSwgMHg4ZjY0ZmRjNCwgMHhlM2Q4ODUxNywgMHhiN2RjM2RlYywgMHhlNjRhYzdhNCwKKwkweGE1YTIzZDI0LCAweGNjMDc0OTNiLCAweDIzZjdhMDZjLCAweDRkZGViZDg0LCAweDEyMGYyZDZmLCAweGNjM2QyNDVjLAorCTB4ZTQ2ODVkNWMsIDB4YzhjNzliZTYsIDB4YjI2ZjRhZWQsIDB4YTMyNmQ3ZjAsIDB4MzBlODE2YmYsIDB4YmEwNjNlYzgsCisJMHhlZDZiYWEwYiwgMHg5ZDBkMmZmMSwgMHhiNDFmMjgxOSwgMHhlN2NjYjg3NiwgMHg2MGU3YzJkNCwgMHg5YTVmY2YyMiwKKwkweGIzOGQ3MGUxLCAweDgwNzNjMDBkLCAweDg1ZjkzOTdiLCAweDEwY2E0NmYxLCAweDNkYzZkYmU0LCAweDZlZGYyMzc3LAorCTB4MGZmMzdjZTQsIDB4OTJiMzBmNDEsIDB4ZjA0OTExM2MsIDB4OWFmNGIzZGMsIDB4ZTc3ZmM0MWEsIDB4ZjIwNjUzMTIsCisJMHg4YTY5NjdiMywgMHgzZGZkMGYxYSwgMHhjMzkyMTRhYiwgMHgxOGE2OTdhMywgMHg5N2QzY2UxMSwgMHg3Yzg3MWUwZCwKKwkweDM0NWNjYjlkLCAweDE2MzhiNGZlLCAweDljMTg2ZWQ2LCAweDc5NDdlNWM0LCAweDYzMTk4MTlkLCAweGY0NDYyOTA4LAorCTB4NTA2YTlmMGIsIDB4OWE4YzJmYzgsIDB4NmJlMDIyNjQsIDB4ZjU1N2MwOTYsIDB4YTRhZGI3OGEsIDB4NmZmMDFjYWYsCisJMHhlMDFmNWUyOCwgMHgyYWVhYjMzZiwgMHhlZTcwMWYwOSwgMHg1MmM3Y2IwOCwgMHg2NmIxNTRhZiwgMHgzYjhjMGE2MywKKwkweGQxMWI2NTY3LCAweDgyNDc5YzMxLCAweDk1YjJkN2ZhLCAweDY2ZWFhZjg0LCAweGQ1ZGQ3YjRkLCAweGI5ZDgzZjg0LAorCTB4YjU4OWNmMTEsIDB4Zjc5ZjgyM2IsIDB4ODI3NjEyNGYsIDB4YmU5MTM5OTMsIDB4MjI1YTc3M2QsIDB4YjQ3MWFmMzAsCisJMHg0YWQ5NGY4MCwgMHg2YjcyODZjNSwgMHg4NGI2YjJmYSwgMHg3ZDNlYTAxYiwgMHhlZDg0ZWFhZiwgMHg4NTg3YzM3NCwKKwkweDFmMjgyM2ZhLCAweDFjZGVjY2VkLCAweDcxOWM1N2YyLCAweDlmYjA5MjM4LCAweDUyZWRjYWM3LCAweDg2MTllZjQ1LAorCTB4M2NlMmQzZWQsIDB4ZDhjZmQwYzMsIDB4NjE4NTkxZjUsIDB4NzNhMWRmN2UsIDB4MTFlNDczMmEsIDB4ZmNhMjBmOTUsCisJMHgzNDFiMWIyYSwgMHgyZmJlYzAyOSwgMHgzMTEyZDgzMywgMHhmMzY1ZTkxZSwgMHhiODNkYzU5MywgMHhkNGY4NDA4OCwKKwkweDdlMjRhYzQ2LCAweDg4N2U0NWE4LCAweDM0YzNmM2YwLCAweGRkYTE3YjhjLCAweDc5NDJhMmYzLCAweDMwNDc2Yzg0LAorCTB4MzQ3MDlmYmQsIDB4OTA5MWMyMjYsIDB4OTAzM2VmYjksIDB4OGE2ZjJlOWMsIDB4Zjk3MWYzYTUsIDB4ZWEyMzIyYjIsCisJMHhiMTZkZjJkNSwgMHhmOWMxMWY2NCwgMHg4NmNiYmRmNCwgMHg2ODc5ZjFmYSwgMHg2NDllZGU1OSwgMHgzOWJjYjcxOCwKKwkweGUzMDZhOWQzLCAweDE5ZGNmNDMxLCAweDBkMzljZWIwLCAweDhlZmUyNDg3LCAweDIzYmY4MGY0LCAweDc4MDdmMGUxLAorCTB4NGYyZjZhMGIsIDB4ZTA0OTcyMTIsIDB4MjM4YTJkOGQsIDB4ZWYzYTVhYmQsIDB4NTgwODljZDUsIDB4NDhiYTk5ZDcsCisJMHhlOWVjOTNjYSwgMHg4YzY2YzQ3YywgMHhlOTAzZmNhMCwgMHhhYmRmMWFiZiwgMHg3OTQ0Y2ZkYiwgMHgwZTU3NjczZSwKKwkweGYxNjlmYzIxLCAweGQzZGZmZTM2LCAweGNiYmRhMTg3LCAweDY4NjE2ZWZlLCAweDY2Y2I0ZDY3LCAweGY2ODY0ZGI3LAorCTB4NmZjZTE0ZGIsIDB4MTlhZmVhZDMsIDB4ZGRjNDc2OGYsIDB4YmQ5ZTVjNDksIDB4ZDVkMDcyMDUsIDB4NDFiN2IxOTcsCisJMHgwZTQwYmEwZSwgMHgxMWYyMGJiZSwgMHg0ZTJmZWZlYiwgMHg4Yjg3ZmFhNiwgMHhiNDdlNTQxZCwgMHg0Nzk1MWZiOCwKKwkweGYyNWZiZjg0LCAweGQxMDIxMDFkLCAweDJlMjQ5MmVkLCAweGM5MjQ5NzE3LCAweDY0ODJmYWY4LCAweGZmYzY2OTM0LAorCTB4M2EyMWRkZmIsIDB4NmM2N2RlMWIsIDB4OWQzNjMwOWIsIDB4YzE1Y2ViYjEsIDB4YTljNmY3ZmEsIDB4ZDNiNWZhYzEsCisJMHg4Yzk3MWI2MCwgMHgwYTE1ZGJlNywgMHhlZWU1YTNkOSwgMHhlMWZkNDE5MSwgMHg3YmM0NjRkYywgMHg5ZTVmYWMyYiwKKwkweDg2ZjQ5ZGJmLCAweGU4MTkzOGMzLCAweGI4ZTJhNmYxLCAweDM3ZDdmZWEwLCAweDlmZDUwNmE0LCAweGZhZDA3MjQ4LAorCTB4MGVjZjhkMjYsIDB4YjRiOWJmNmEsIDB4ZWNiZDUwN2YsIDB4YTQzMTkxOWMsIDB4ZjEwMTQ3NzcsIDB4Njc5MTAyY2YsCisJMHg4ZTc3MDcwNCwgMHhmYmVmMWIxNywgMHhhNGIwZGQ3NSwgMHg1ZmJkNjBiYiwgMHg3M2QwMzNlZiwgMHg1ZTI0M2UyZCwKKwkweDk5NTFhYzY3LCAweGJlOWJjNjA3LCAweDJjMWZlNDA2LCAweDc0ZTM0OGYxLCAweDBlMmZhZmUyLCAweGIyNWNlODU4LAorCTB4N2Y2ZjI5YmMsIDB4MzUwZmQ0MDEsIDB4ZTgwZjI4MTksIDB4NTViOGIyZDAsIDB4NmExZGFmNjgsIDB4MjgzMmIwNGEsCisJMHg2MTU1Y2IzZCwgMHgyYzhjZDhkNywgMHgyZDE1ZGU0MCwgMHhhNmY5NDI1YiwgMHg5MzkzM2U2NSwgMHhlZjc2OTdlYywKKwkweGMwZWViMjkzLCAweDEyMmUyYWYzLCAweGQ1M2RlNGY5LCAweGZlMTBhYWQ3LCAweDY3ZGYwNDVjLCAweGUxNWVlOTIyLAorCTB4ZjEyN2IwNzEsIDB4NGVmNGUxMmEsIDB4MGFlM2FlYmUsIDB4MTNmNTg2NWIsIDB4YjlmNzFmOTEsIDB4NmE3MWQ2MGIsCisJMHgwZTg1NjM2MiwgMHhiZWVhMTVmZCwgMHhjZjlmOTIwNCwgMHhiNmU5MGNhYiwgMHhmMjgxOWU3NCwgMHhhZmJmNjYwYywKKwkweDUzM2FjMDZlLCAweGJlMzk1MzcyLCAweDY2YTNjYTU1LCAweDdjNjg5OGNmLCAweDAyMTQwNWQ2LCAweDZkM2MxNmZkLAorCTB4YWUwMWVhN2EsIDB4ZmI3ZDc4ZmYsIDB4ODIwM2RmNDAsIDB4OGU4ZTkxM2UsIDB4MmM1NzMyYzcsIDB4ZjVhMTU2MmQsCisJMHhjMjc2ZmU3ZSwgMHg4N2VlN2MwNiwgMHhlZTEwNmZhNywgMHhmZGMxYmQ3YiwgMHhlZmUwMTI2NiwgMHgyMGRmMGFmMywKKwkweDEyOGI2ZjkyLCAweDcwYjRhZjg4LCAweGYyZTQ2MjNmLCAweGEwN2M4YmNiLCAweDlmYTZlNWY4LCAweDdlOTI5NmNmLAorCTB4MjY3MDZlOTgsIDB4ZTU2ZTQ5M2EsIDB4M2FkY2EwYTcsIDB4NzY0MGQyYjIsIDB4YWNiYmQzMzAsIDB4M2U4ZjQ4OTMsCisJMHhlNzJjNzQ0ZiwgMHg4Yzc3YTIzOSwgMHg2OTFkZjVjMywgMHg1Zjk4NjRjOCwgMHhhNTUyYmU1MSwgMHgxZmQyMGFmMywKKwkweGU3ZTNlZmVmLCAweDBmNTU4N2Q0LCAweGRiY2MyNGQ4LCAweDUyNTg3OGEwLCAweDNlZGNkZDI4LCAweDVkZTUxODZmLAorCTB4NTk2ZGVkNmEsIDB4ZWFiYzA5N2UsIDB4ZTY0YmIwMDksIDB4ODE3OWU0ZWMsIDB4M2Y1M2JmMmMsIDB4M2VlMDYwNzUsCisJMHgzY2Y5ZjE5NiwgMHg0YWY5NDEwNSwgMHgxZGFmNTk1NSwgMHgyZWM4ZWIzNCwgMHhjMjczYzE4YywgMHhhMjU0Zjc4OSwKKwkweDhkNTkxM2IzLCAweDlmMDE5MzQzLCAweDg2YmI3NTI3LCAweDJmZjUwNWRlLCAweGVhOGY3YTI2LCAweGRhMjIzZWExLAorCTB4ZWI4NDJmZjMsIDB4MGNjYWRkNWMsIDB4ZmFmMzBiMjUsIDB4MDkxYWFmMGYsIDB4YWNmZTdkZWYsIDB4MmU2YzQ5YzEsCisJMHhjZjM5ZmNlYywgMHg0M2ZkZWVjYywgMHgxYmQ4MTVmNiwgMHhlMWRkYjhiZCwgMHhjZmZiYzE0YSwgMHgxYWNkMWQ3MywKKwkweGM3YzM4MDdiLCAweDAwMjA0OTgxLCAweDA1NmFkYjE3LCAweDc4NzYzNzZkLCAweDNjMDFlNTg4LCAweDMxZDc0ZjU3LAorCTB4ZTA3OWUwNGYsIDB4YjFlM2M4YjAsIDB4YTg3M2YzMjQsIDB4MjRhNjFiYjQsIDB4NWQzMzM5NzMsIDB4YmQ5YmU5YzcsCisJMHgwMzdhNzBhYywgMHgwZjUwMmFmYiwgMHgxNzNkYjk0OCwgMHhiZjU1YWFmMywgMHhiYjcyOTAxZSwgMHhmZTUyMzU4YSwKKwkweGRiOTkyMzhhLCAweDFmMTViMzJmLCAweDk4MzVkZGQ5LCAweDJiZmQwMjg5LCAweDU2NjgzYzZjLCAweGYzZTRkOWI1LAorCTB4YjY5OGQyNjUsIDB4N2E2MGZiNDAsIDB4NzMyNzk3MzIsIDB4OGUzZWNmOGMsIDB4M2FjOTViZTQsIDB4ZmQzNTNlZjgsCisJMHgyYWY4MzczZSwgMHhmNTQzMzIzYSwgMHhjMzZkODU0ZiwgMHg2ZjhkM2IzMiwgMHhiNzlmYTI3MCwgMHg3NTZiZjA1MiwKKwkweDI1NmJlMmEzLCAweDUxZWI4NTNiLCAweDI5OWQ1N2U5LCAweDNmNTZhOGY0LCAweDhkMjVlODg1LCAweGQxYTk5YTNlLAorCTB4NTgzMWFjYmIsIDB4ZTk3YWMyY2YsIDB4YWY1Y2IyZGUsIDB4NjhlZTlkNzYsIDB4MGU2MWMxMGIsIDB4NmZmNTBiYWMsCisJMHhhN2I3Yzc4NSwgMHgzOGFkZDY4NCwgMHhlYjIxYTMwMSwgMHgzMWVlNjRhOSwgMHg3ODBmYjhiMSwgMHg1ZDA4ZWFkZSwKKwkweDIxNWY3NjlmLCAweGQ0ZmIxNWViLCAweGY5YzJiYmFlLCAweGJiZTYyYjU1LCAweDA0MjkzNTU0LCAweDI0M2VlZDJmLAorCTB4OWM3NmI0M2UsIDB4OTc4NTRiYzQsIDB4NDVhMmI3YzMsIDB4ZDY3ZTdjMjEsIDB4ZjIzMjFmNmQsIDB4NjFiYTRiNmYsCisJMHhlMDJmZjBjZCwgMHhiMDQ3NDk3ZCwgMHg2Zjk0MTJhZiwgMHgxZTQxYWI5NSwgMHhkM2QyODY2NywgMHg0NTZjZDYxYywKKwkweGFkNjFhOWJhLCAweGRmOTA1M2NiLCAweDFmYWY5YjVhLCAweGI1ODY3ZThlLCAweGE5ZjlkMzZmLCAweGEzOWFkZWQ0LAorCTB4N2E1MDA1OGIsIDB4YmY4ZTU3NzMsIDB4MTdlNzRmY2EsIDB4NWNmYzI3OGEsIDB4ZTlkZGMzZjAsIDB4ZTAxZTlmYTUsCisJMHhlYWEzNzMzNSwgMHhkNDE0MWM4YSwgMHg3YTNmZTQ0ZiwgMHhiY2IzOGUwOSwgMHg2M2ZhMjM1ZSwgMHhlNTNmMDk2NywKKwkweGFiNTlkNjg1LCAweDJlNWZmN2U3LCAweGNmMDE1ZWI4LCAweDBmZGQ3YjlmLCAweDc3NjRmNzI3LCAweDc2MTczZjg1LAorCTB4M2QxYTViZGIsIDB4ZmI4MWIxZmYsIDB4ZmU3Y2E1NWIsIDB4ZmYyMmVmNWEsIDB4M2IwYmI0MmUsIDB4ZTNjNmNlYWMsCisJMHg5ZWI5MWE3ZCwgMHhiZDcyNGY5ZSwgMHgzOTc5ZTg0MiwgMHg1YjM1ZDFjZiwgMHgxMzMwNWUyOSwgMHhmNjgwODBlZCwKKwkweGE1NmY1NmNmLCAweGQ5ZjFhNTc4LCAweGNiYjQ1Njk5LCAweGJlOTlhZThmLCAweDhmNTJmMzBhLCAweGJkMjc0ZDM2LAorCTB4YTk3YmY5NWYsIDB4NDBjNjNkZjcsIDB4NGQ2OGEyN2IsIDB4OTA3YmZhZDksIDB4NTI0NzM3OGUsIDB4ZGRhMmIxNWMsCisJMHgyMDQ1Y2UyMywgMHg2MzlmYTE2NywgMHg2Y2FiOTcwZCwgMHg5NWIzOTczNSwgMHg5MDA3MWZhOCwgMHhmZDhiZWM3ZSwKKwkweGY0ZjBhY2VlLCAweDY4MDg3ZTQ1LCAweGU3NzliZDI3LCAweDc3OWZjZjc0LCAweGZlNzdiOGMyLCAweDI1ZTlkYTI5LAorCTB4NzU1YWQ4NTAsIDB4NWFkYmNmNjQsIDB4Y2Y1NjNmNTEsIDB4ZGUyMGYwZmYsIDB4ZTA3YjAxZDMsIDB4N2I0YjVmZmQsCisJMHgwNjQ1YWEwMCwgMHhlYTMyNWI0ZiwgMHg1NDA3NjEyMSwgMHg2YzMyMWJhYiwgMHhiZDA4Mzc2OCwgMHg3ZjgwMWZmMSwKKwkweGU3Zjg3ODQ0LCAweDExY2JmYzEyLCAweGRiZjEwMWZlLCAweDljMzgxYjRmLCAweDdmZTA2YmE3LCAweGNiYzcyNTc4LAorCTB4MmI2Y2E2ZjIsIDB4NmQzZjJmOWUsIDB4ZWJiYjI2YzgsIDB4ODIxY2E2ZDMsIDB4MDAwNzhjZmYsIDB4MWY1ZmRjZmUsCisJMHgwMDM1Nzc2YywgMHg4MTdjZjFmYywgMHg5NmY1ODdmMCwgMHhmYzA0M2JiNywgMHgwZGZlMWM5ZCwgMHgyNTZjZWUxYywKKwkweGMwODQ2NzJmLCAweDU3Zjk0YmQ5LCAweGU0ZDFmZTc3LCAweDc4ZTIzYjQ0LCAweDU3ZDkyYjY0LCAweGFjYThiN2M3LAorCTB4OTMyZWMwM2UsIDB4YWMzN2QxNzYsIDB4ZGZiNDQ5ZjEsIDB4Zjc2N2ZjMjQsIDB4ZjI4NDE4ZTksIDB4ZDdlMWY0YTcsCisJMHhkOTg3ODhhYywgMHgzMTUwNzg1YiwgMHg5NWNjZmUwNCwgMHhlZWM3ZjE0NCwgMHhhOGVkYmJmOSwgMHhkZDVmMTE2ZiwKKwkweGUyNDVkNDc2LCAweDE5Yjk4NmE5LCAweGQ3OTZjN2U5LCAweDQyMzllMDBlLCAweDQ1YmY3MTcxLCAweGI2NmZiYzhkLAorCTB4MTliZWY4MjMsIDB4ZGE5NTkyZTYsIDB4OGNlMmM1ZDEsIDB4YTRmNWMwODgsIDB4NzlkM2VmNjksIDB4YmViZGM2MTgsCisJMHhkNmVhZjljZCwgMHg1ZGU3YzRmOSwgMHgyNWI5Nzk0MSwgMHhmZTgwZDVhYywgMHhkMGFjZDYzNiwgMHgwNWVhZWQzZCwKKwkweDg2NDJkNjg1LCAweDVhM2FiNTcxLCAweDA5NDUzMzg3LCAweDU2YWVjYmNhLCAweDU2NGY2NDc1LCAweDQ0N2M0NTE5LAorCTB4ODkyNDU1ZTQsIDB4ZGMyOTQ5N2UsIDB4NjI5YzkwMmYsIDB4MjQ3NGYyYTMsIDB4ZGE3MDdkMjMsIDB4N2RlMWY0NjIsCisJMHgyNTVmMzgyYSwgMHg5ZGRlZmNlMywgMHg0MWRiYzIyNiwgMHg1ZmMwMTM1YywgMHgzMzNmMGEzNSwgMHhiN2E0NDJhOCwKKwkweGQzYTcxODViLCAweDI5N2JjYzViLCAweDk3MjcwN2FlLCAweGE3MWZhODc1LCAweGM5MzkzNDJkLCAweGExOGY4ZGNlLAorCTB4NDJjZGQyZjgsIDB4NWU2MmRkZGUsIDB4MzEzZDQ2ZWUsIDB4NjE3NDZjY2QsIDB4MzE3YWUzMDksIDB4MWEzMGQ3ZjksCisJMHgwZGY5ODdhNiwgMHhlZjc0OGNiZCwgMHhmM2EyMzRiMCwgMHhkZjEyM2M1OSwgMHg4ZWY4N2M5NiwgMHg5NWVhNTgwOCwKKwkweDFmYTM4ZTYwLCAweGY2ZGQ3ZTE4LCAweDVlMjg1YzdkLCAweGY2MDlmOGZjLCAweDg1NDZkNzRiLCAweDE3MGM4YmY3LAorCTB4MmU1YzUwNzAsIDB4NjA5YjNmZjIsIDB4Yzc1ODI4ZWMsIDB4NmYwNzE0YTgsIDB4M2ZiOGQ4NzcsIDB4YzllMDJkN2EsCisJMHhiNmFmYzdlMiwgMHhmYzc5Nzk5ZCwgMHhiMWYzMGFiMiwgMHhiYzU4ZjdmOSwgMHg1ZDU0MWYyNCwgMHhjOGNhYmQ1MCwKKwkweDYyNzk0ZjlmLCAweDM0ZWFmMTQzLCAweDhlNjFkZWM2LCAweDJhYjc4ODgxLCAweGVlNzgyMTk0LCAweDYxZjE4YjJmLAorCTB4ZjQzYWVmN2MsIDB4ZDRiMWRiODcsIDB4ZDY0Y2JkMTMsIDB4OTc4ZWFmMzMsIDB4MGUzYjY2MGQsIDB4MjVlM2ZkYzcsCisJMHgyYWJmOWUwMiwgMHgwMDMxYWQ2MCwgMHg4M2Q3ZDZmNywgMHhiNDM3ZjNmZCwgMHgwMmZiNWFlYSwgMHhiN2QzYWY3YywKKwkweGVhN2QyMWI2LCAweDFiMDYxYzIyLCAweGFmMWVlM2NjLCAweGE1MzllMmU0LCAweGFkYzVlOTZhLCAweGE2ODllMmI3LAorCTB4YTBhM2Q1ZTIsIDB4YWNmOWUzYWUsIDB4ZmVlNmJmNWQsIDB4NTk4MDViODksIDB4ZWFiNzZlMTEsIDB4Y2I5YWJiNTksCisJMHg1MmUxMDBlOSwgMHhhOTc4Nzc2YiwgMHhlMjg1M2NkZiwgMHgyMDJlMzIzNywgMHg4NjE4M2ZmMSwgMHgyZGUzYzQwZiwKKwkweDRlMzA3ZDYyLCAweDM3ZGYxNTgzLCAweDdjZDdjNzg2LCAweDhjY2MyZjgxLCAweDE1Y2ZiODQ2LCAweGYyNTczNzdjLAorCTB4YmYzMDUzNWIsIDB4MDQ3ODgyM2QsIDB4MmVkMDU1M2UsIDB4MjJkZGI4MDYsIDB4ZTJmODllY2EsIDB4NDc2ZTE0YTEsCisJMHhjZmMyOTQzZiwgMHhlMjVjZjdlZiwgMHg5NWRjY2M3YywgMHg4Mjc5Nzk0MSwgMHg3YzRkYWE1ZiwgMHg3NWZmMzk3YywKKwkweGM1MzA3Y2EyLCAweGY1Y2JlMzRlLCAweDhhN2ViZDAwLCAweDAyNDBlOGUzLCAweDY5MWViZDIwLCAweDY4ZmIyN2FjLAorCTB4YzM4ODBiMTYsIDB4NDlmYmZhNjUsIDB4NzdhZDBlYmEsIDB4ZjdkZDExY2IsIDB4NjZiYjFhNTgsIDB4NWY5NWU4MjAsCisJMHg4ZTUxM2E0NCwgMHhjZTZjNjJkZSwgMHhmNjg3MzNhOSwgMHg1MmU2NzE5MywgMHhlZmEwNjFkNiwgMHg5OTNmNDkwMywKKwkweDU1NjMzZmQwLCAweDk1MzVlNTMzLCAweGY0MWVmYzJhLCAweDU3OGI0MmU5LCAweGM3ZTI3NjA3LCAweDA2N2JiZTIyLAorCTB4YTc5YzQ2ZWMsIDB4ZmNhMTU2MzQsIDB4NzczMTY5YWYsIDB4OTc1ZjIwOTYsIDB4MmM3YThkNWEsIDB4ZGZmMTE2M2YsCisJMHg4ZDE3NTk1YiwgMHgyYjJkODlmZiwgMHhkZjg2MDZlNiwgMHhlNjMxNTA0ZCwgMHhhNGY4MGIwNywgMHhhZGZiMDVkOCwKKwkweGViYzNmOTQ3LCAweGU0Njk1ZDJiLCAweDRmZjUxMjhkLCAweDY2NWM2MWY3LCAweDAzYTA3OWVhLCAweDc2MmUxZmFhLAorCTB4NWZhN2JjYzEsIDB4OTFkOWNmMTUsIDB4ZmE3ZTdjNjIsIDB4ZGVjZjQxM2UsIDB4ZTlkZTM0ZTMsIDB4NTNmM2U0YzcsCisJMHhmOTBhZjlmYywgMHg3ZjVlMmJmYywgMHhlYTJmOGU1MCwgMHgyZjllNmIwZiwgMHg4MjdmM2NkMSwgMHhmODlmNWJkNywKKwkweGY2OGJkOGFhLCAweGRhNGU2OGViLCAweDkyMTQyM2E1LCAweDM3MjE0NjU3LCAweDEyYjY5NzRhLCAweGJiNzU0YjljLAorCTB4YjU5YTM5NzgsIDB4ZGMyZmYyZWEsIDB4ZGI4YTY0ZWYsIDB4Zjc4MDkyOTgsIDB4NTA1ODhmY2UsIDB4ZDUzM2ZmMGYsCisJMHg3ZTgxNGM2NSwgMHhmZTc5MjY5ZiwgMHg0OTljZTU4NiwgMHg3Mjg4ZDc4YSwgMHhlOTFmM2RmNywgMHhmMjFlOTI4NSwKKwkweGFlNDI4ZDI3LCAweGE2ZTVlYTlmLCAweDgzMWVhNWY3LCAweGYxYzNkZTcxLCAweGJiOWM3NTJmLCAweGU0ZjljNzQzLAorCTB4NGQ3MzhjYzcsIDB4NDczOGM4NmEsIDB4ZmViZWNjN2YsIDB4MjRlMWNhOWMsIDB4NTE3NjkxYzcsIDB4ZTk0YmJhNzEsCisJMHg2NjNhZmM4NSwgMHg3MGJmOTA2NCwgMHgxOGNlYmRlZSwgMHhjYzMxNGJmNCwgMHhjZmQwMDM3NywgMHg5MTljZGE1ZCwKKwkweDdkY2ZlMzA3LCAweDBhOGNjNWVlLCAweGJlODQ5YmI0LCAweDMyYTczOWFmLCAweGRhYTNjODE3LCAweDVmOTUwYTczLAorCTB4YzQ2NDdkYjQsIDB4ZGIzNWIzN2IsIDB4YTBlMzhjZGEsIDB4NDU5NDJkNWYsIDB4MTJhYWViMDEsIDB4YTc3ZDA0ZWIsCisJMHhhN2EwMWM5ZiwgMHg0Mjc0YmQ4ZCwgMHhmM2NjM2M2ZSwgMHhhMTNiOWUzMiwgMHhkNWNlN2M0NywgMHgzZGZkMWYzNSwKKwkweDRhMTFlZmVhLCAweDk3ZjJmOGQ4LCAweDdiMDc3ZjYyLCAweGVlNjExZmI4LCAweDYxNTFlNWM1LCAweGVlMzQ1NzZmLAorCTB4MzkwNjE0ZjMsIDB4ZmFhMmZjNjAsIDB4YmYwMmY5ZjAsIDB4MTUyOGViMTIsIDB4NTBmYTZmZmEsIDB4ZTAwMzg0NGIsCisJMHgxZTNkZTQzYywgMHg5YjU4YWY1ZiwgMHg2MmZlOGI5OSwgMHgwNGU4ZjI2MywgMHg3ZThmNWI4MiwgMHg2N2VlMmVkNiwKKwkweGQ2N2VlMTZkLCAweDAyYzc3YjUyLCAweGJiOTk0ZWZjLCAweGY4ODNlYzU3LCAweGJmMDliMmRkLCAweDJjMDY3YzkzLAorCTB4Mzc4ZWVmMGIsIDB4ODliZjdhYzksIDB4M2Y3MTQ2NjMsIDB4N2VmM2Q2MTgsIDB4ZjIyMGY5OWYsIDB4NmUyOGRlY2QsCisJMHgzNjFiNGVjZiwgMHg0M2U1MGEzMCwgMHhjZWI0NjY2NywgMHg0ZmFjZmMwNiwgMHg0YWY3NzMyYSwgMHhjNmFiZjZjMCwKKwkweGM5YTE3YjYxLCAweGUwOGNhN2QyLCAweGY0MmU4OGNiLCAweGI4ZmVlZTQ5LCAweGZlOGZlYzRlLCAweDM1YjE4ZjExLAorCTB4ODdkODA2ZTEsIDB4ZWU5NTBkZTcsIDB4NDUwNjc4MDMsIDB4Y2JjNWMyN2IsIDB4ZTVjNWVmMmYsIDB4OGQ5N2JiYjksCisJMHgwNzU3YjFlMCwgMHhhZmY1Y2NlYiwgMHg3NjBmY2U0MywgMHgxODBlODJmZCwgMHg5NGQyYzhlZiwgMHgzMDM4MGZjMSwKKwkweDVkNzg1MzFlLCAweGZjZmYwNGFmLCAweGEzM2M5MmIzLCAweGEyM2ZlNzAyLCAweDY4ZjA3ZDYzLCAweDE4ZWJiMTcxLAorCTB4MWQ3MWYwMmUsIDB4Zjc0YTA2YzIsIDB4ODBiN2EwMjgsIDB4MzFlNGRlZjMsIDB4YTlmNTQxZDEsIDB4MTVjYzcxYzUsCisJMHg5YTlkYmZlOCwgMHhiMWJmNTQxYSwgMHhmZmE4M2IzNCwgMHgwN2ZhMzNjZCwgMHhlYTY4OWYzZCwgMHhiMDBiYWZjOCwKKwkweDk3YjY3YjY3LCAweDVhOWYwNGJjLCAweGVkMGEyNThiLCAweGJlNWE0ZmJhLCAweGI0MTZlMGY5LCAweDRlYWEzNzAzLAorCTB4ZWY2NzU5YjQsIDB4NDhjMWY0ZGMsIDB4ZjAwNjc1ZTgsIDB4NDk3ZTQ3MWIsIDB4M2VkMWY5MDcsIDB4N2E3NDc5OTcsCisJMHg3ZTMwM2U5NywgMHg1MDc1OGE3NCwgMHhkNzNjYTJiZSwgMHg2OGRjNmM1ZSwgMHhmMjlkYWRhZSwgMHg3OGFlN2YwOSwKKwkweGUyNWViY2QxLCAweDcyY2I5YmZjLCAweGE5OWUzZjUxLCAweDc5ZmM5ZjdiLCAweGNmYmU2NjM1LCAweGUyMWUyZjUzLAorCTB4YmQ0NDJkZGYsIDB4MzU3Zjc0MDIsIDB4ZTJmNjg4YmUsIDB4YzBmYzEwMzksIDB4MGUzYjQ1ZmYsIDB4ODZjZDljNTEsCisJMHhmN2I0NGRjMSwgMHhmMWU5ZTZkMywgMHg5NDJkNjRmZSwgMHg4MWM2NWZhOCwgMHhiYTAxOGFkYywgMHgwMzYzNjhlOSwKKwkweDQ4ZGU2MWI3LCAweGU1ZGI4NWE2LCAweGJmOTBhNmU3LCAweGY3MTQ2ZjdjLCAweDhjNGRlY2ZiLCAweGNjNDhlZmE1LAorCTB4ZGE4NmI4NmQsIDB4ZDM0NWNlNmIsIDB4MWRhOTZmZjgsIDB4ZmEyZjI4ZTMsIDB4MTNlMjg1MDUsIDB4MmRhNzUzMTMsCisJMHg4ZGVjZmRjNSwgMHgxZGI4MGVmMiwgMHhlN2Y4OWRlNiwgMHhkYzIzYzdhYiwgMHg3YmYxYjY2YSwgMHg3N2Q1MTMwMiwKKwkweDU5NDFlN2YyLCAweGJkMGQ3OGQ1LCAweDdiNjU1MTNmLCAweDYyMWZiMDE1LCAweGUzNDJkZGNlLCAweDAwMWI0NDRlLAorCTB4Y2I1MGVhZWEsIDB4NTU5N2E4MDMsIDB4M2Y5ZjZiNjMsIDB4NWEzMWJjYTAsIDB4OWVkNGRlNDgsIDB4MjZmN2E0OGIsCisJMHhmZGZkNzExNCwgMHgwYzRmMjE3YiwgMHg2MzVkN2M5ZCwgMHhlN2EyNGRjZiwgMHhiZDdjMmU5MiwgMHhmN2YyODJiMiwKKwkweGY1MWIwOTBkLCAweDQzMjFiZGY4LCAweGFmZmQ0MmE3LCAweDRhOWZkNzNkLCAweGZhMzdkZmI5LCAweDJmYmU5MWZkLAorCTB4N2FmODQ4NjAsIDB4YmU4ZGU2MWMsIDB4YzhkOGFmMTEsIDB4ZTNjOGQxMmMsIDB4NjJjMzc1YjMsIDB4ZDU3OTE4NTgsCisJMHg5ZTM5Y2YzZCwgMHhjNzNhNmM2ZiwgMHgzYmZmOGZmMywgMHhlNDE3ZjVjZCwgMHg5ZDQ1OTJjMywgMHgzMTE3OGM3YSwKKwkweGUxMGQ4NDczLCAweGQ4MzA1MjU1LCAweDY3YzAxMTUxLCAweDhjOWJhZWVhLCAweGVhYzMxZjg4LCAweGFmYTg4ZGI3LAorCTB4MDUxNjUwNGQsIDB4ZjkxNmFmM2MsIDB4ZGQ3OTVhNTgsIDB4ZmM4M2U0MjIsIDB4M2ZkNDliOGUsIDB4ZDEwNjc5MmMsCisJMHg0MTM2YWRlNywgMHg5ZThmODJhMCwgMHhkZjJjN2MxNiwgMHgwZTMzYTBlZiwgMHhmNzNiNzFlMCwgMHg3OWE2YjdmMywKKwkweGQxMzk0MmRlLCAweDdjNmVjODUxLCAweDQ3NjdlNDllLCAweDdlNjljNjA2LCAweDllMDNmNWFlLCAweDFiYjIxNDIzLAorCTB4YmVhZjI5M2IsIDB4YzNhMWMwYTQsIDB4ZGQ3YmMwZjgsIDB4ZjNmMzg3N2EsIDB4MjZkMWY2ODUsIDB4Y2E5NmZkZjYsCisJMHg2ZmI4ZTIxNiwgMHgxZDk3ZjJmZCwgMHhlZGFmMTgyZSwgMHhkNDNjYmNlZSwgMHhjZmRlNzIwYiwgMHgwYjdiZjE3YSwKKwkweDFlNzVkNmNjLCAweDJmYjU4N2NmLCAweGVmOTAzYjQ3LCAweDBjZTFlMjI3LCAweDRkM2JhMmUzLCAweDc2ODE2ZTc0LAorCTB4YmVkNDc3OGEsIDB4ZWYwYTdhNmMsIDB4ZTE1YWQ1YmIsIDB4MTdmMzBhZmMsIDB4OGFkOTEyYmQsIDB4NGFmNmRjNzQsCisJMHhjN2Y1MWVhNCwgMHg5ZjNkYmQxZCwgMHg1ZThhN2MyMSwgMHhjZjA2M2JlOSwgMHg5MzE2YWU4YiwgMHhlM2ZkOTE5ZSwKKwkweGI2ZjI0YTNhLCAweDQ4NWVmNTg3LCAweDRjZTk2OTdlLCAweDgxYTdhN2YyLCAweGEwOTk0YmYzLCAweDdmYzE3MmQzLAorCTB4Njc0N2MxMWUsIDB4MGY4ODkyZWIsIDB4NDU4MjJlY2YsIDB4OTE3NTNjNjMsIDB4ZGExYjcwMzIsIDB4N2QwYjBlMGIsCisJMHhlNWYyNGU5NywgMHg0MTFmM2M0NCwgMHhiMWZlYzRmYiwgMHhlYWExOGY3NCwgMHgxZjEwNmM1YywgMHgxNGNiOWY1NiwKKwkweGVkNDcxZGZjLCAweDA1Y2FkZjkyLCAweDdkODQ5ODlmLCAweGI1ZDA0MzMxLCAweDNmMjQ1YmI0LCAweDYyNGY3NGIyLAorCTB4NjI2M2VjMmEsIDB4OTViZGYwM2QsIDB4YzhmOWZlZTIsIDB4MzFiYTdlNGYsIDB4ODBiZTkwZGEsIDB4MDIyYjkyNmUsCisJMHhlZGJlYTdmOCwgMHg4YTc2ODYyNiwgMHg3NDRkZGUyOSwgMHg0MGNhMDMzMywgMHhiNzY2NjUzYiwgMHg5NzFiNjI5ZCwKKwkweDU5MmZlYjA4LCAweDdiYzNhOTk2LCAweDZhNzlmMjliLCAweDdmZDFhNWVhLCAweDI3YzhhYTQ0LCAweGEwZTZiNzMwLAorCTB4OGJhODZiNWQsIDB4OWE3ZGUyNzQsIDB4MWUzY2YxMzMsIDB4ODcwNTdmMzQsIDB4YmI4MzdjZTMsIDB4Zjk4Y2VkMDgsCisJMHgzZmU0Mjg0ZiwgMHhlNTAzZmI0MywgMHg3NTAzZDBkMiwgMHhjYWJmNDBjNiwgMHg1MTA2ZTc0ZCwgMHhiOWNhN2QzYywKKwkweDI2MzRhOGNiLCAweDM4NDcyZTdiLCAweDVlYmI5ZDk0LCAweDhmZDA2YmUwLCAweDcxMGUzZjhhLCAweGMxOTJiZjcxLAorCTB4Yzg2ZTcyNjcsIDB4NDc5MmJmNDQsIDB4NGYxZjNjNDUsIDB4MDM0N2I2NjcsIDB4NTQ2YjdkZTMsIDB4YjhjOThmZjIsCisJMHg5OTMzZjRhNCwgMHg4MDRmZGVmMCwgMHhkZjQ2ZmQzZSwgMHhhM2RmNDE5OCwgMHgwYTlkZmFkMSwgMHhiOTNmZmViOSwKKwkweGJmZmE0MGQxLCAweGExOWRlZGFhLCAweDc5ZmU3ODNhLCAweGY1MDkyYmE2LCAweGE3ODM3YWM5LCAweDY3MzNmNzA4LAorCTB4MDMzOWVmYjIsIDB4YjgzZWU3ZDQsIDB4ZTFkYzNhZDUsIDB4YmViMzY3ODcsIDB4NjlmNTA3MzUsIDB4ZmQxMWMwMzMsCisJMHhkNTJiY2Q1ZiwgMHhmNzZlM2VmMSwgMHgxYTM4ZjM0NCwgMHhjZjQ5NmZhNywgMHg3MzlmM2E1YSwgMHg3M2UwOWIyZSwKKwkweDdhNDRjZWI2LCAweDJkZDAyY2U4LCAweDUyNDNkMDBiLCAweDJmMzk0OGVmLCAweGViYTQ4ZmY1LCAweDVmOTczZDZhLAorCTB4Y2ExOGU2ZDUsIDB4OWRlYmYzMjMsIDB4YTQ0MmVlNDksIDB4MWYzYzdlYmIsIDB4OWU3N2FmZDAsIDB4ZjkwMjM1NWEsCisJMHhlNTNjNzRlMCwgMHgyMWJkNGI1ZCwgMHhjNTg1ZTBmOSwgMHgyNDQ3OTRjOSwgMHgwM2U0OTJmNSwgMHg3Y2E1Y2YyOSwKKwkweGY1MmY3NDk3LCAweGZkM2ZlOGQ2LCAweGMzYmZkNmVmLCAweDNjZDI5M2FmLCAweDdkMDJhNTc3LCAweGZhZTdhYjVkLAorCTB4ODViZDVhZWIsIDB4ZmM2YzY3ZTgsIDB4Y2RkMjNkMjQsIDB4NDNkMWNiYzUsIDB4MGExZThlNDIsIDB4M2QzNWEzOTIsCisJMHhhOTQ1ODFlOCwgMHgxYzVlN2U1MiwgMHg3YzExY2MxZiwgMHhlZGM0ZGUzMywgMHg4MWYzOTQ0OCwgMHg4ZGE2YjVlMywKKwkweGIxZjcwODdlLCAweGQ5ZWI5NTNhLCAweDNkZGQ2YjlmLCAweGE5ZDVmZmM5LCAweDk3ZmYyNjk3LCAweGZjOWM1ZWE0LAorCTB4ZmU1NGVmZmYsIDB4YmNhZDBhOWQsIDB4YTM3MTBmYzcsIDB4ZjNiZDNmYmMsIDB4ODNlYTFmNzIsIDB4MDNmNDBjODMsCisJMHg2ODk2YzFlYSwgMHgwZmExMjZjNywgMHhjNTQ0NWY0OCwgMHgxZjQ4N2VmOCwgMHhmZTllZjYxNCwgMHhmNWUxYTlkZiwKKwkweGZmNmM2NmMxLCAweGQyNDBmYWIxLCAweGM5MWJlNDk3LCAweGI0MmY5MjI3LCAweDYyZjkyNDdjLCAweGJjZTE2ZmMyLAorCTB4OGI3YTc4ODgsIDB4ZDZhYThmZGYsIDB4MGUyODliN2IsIDB4OGMxZTg4ZTksIDB4Yzc2ZGQ5ZmMsIDB4ZGY4ODUzNmQsCisJMHhlMDg0ZjQ0MiwgMHgwNGJmM2YxZiwgMHgxZmM5MGRlYiwgMHhmZjI0NWY5MiwgMHg5OGZlMGI1NCwgMHhmMjQzZjgyOSwKKwkweGY5YjU2ZWM1LCAweDBhOTgxMWQxLCAweDA4ZjllNjkwLCAweDkzZTQ4OGU1LCAweGZhYjVlN2FhLCAweDQyYmE0N2ExLAorCTB4MTk5YjIzNGYsIDB4YWU5MGM3NWYsIDB4YTQwY2ExYWEsIDB4ZmMwZjUzMmIsIDB4ZjUxMmYwNzAsIDB4YTQ4YmJlYzIsCisJMHhmM2ZlYWZhNywgMHgwZjU1ZjRmNCwgMHhhN2U2NzRmNCwgMHgxZGE4NTNkMCwgMHgwM2JlNjFmYiwgMHgxZjM2NzNkNiwKKwkweDlmYTY2ZGU0LCAweDhkZmMyNmRlLCAweDliMjFmYjcxLCAweDQ2ZjYwNzlmLCAweDM1ZWU3ZGYxLCAweDY3ZmY5M2E2LAorCTB4Y2YzY2Y3YzIsIDB4MzMwM2RhNTcsIDB4ZDI0MWJmODUsIDB4MDFkODFlNjksIDB4ZjhmYzQzNjksIDB4YmNjMGYzYzcsCisJMHg4NDdiOTM4YiwgMHg4NzdjNTM2NywgMHgzMzI3Y2YxMSwgMHgwM2I0MGNhMSwgMHg1MzdmYjI3YSwgMHhlZTRkMmVkMywKKwkweDE3ZmU4YTQ1LCAweGI0ODBmM2MyLCAweDFjNmVkZDlmLCAweGFmMWUxNjkwLCAweDAyN2VkMzAzLCAweGEyNjIyNzVlLAorCTB4YjIyYmY5MmEsIDB4MDBhMzVjNGIsIDB4YmE4OTBmM2YsIDB4YzIwOTRmYjcsIDB4ZjkwMmZhZjEsIDB4MmU1NWIyZmMsCisJMHhkNjA3Y2EzZCwgMHhmNDc1ZGRmZCwgMHhjYWE1YmM3NywgMHgzMWZlY2U3YSwgMHg4ZjA5OWViMCwgMHgxZDFmYmYzMiwKKwkweDE1MWQ4ZjllLCAweDUxMWZlZGQzLCAweDcxN2ZiZjk4LCAweDk1ZmVkNjVhLCAweDQ1MWJlN2E0LCAweDllYTc0YWRlLAorCTB4M2Q0NDgzYzcsIDB4ODA5NmVhMWYsIDB4YmVhNjgxN2EsIDB4ZWFiN2Y3OTYsIDB4M2U2MDU5M2IsIDB4OTI4ZGQyMDksCisJMHgwZWVjZjFjYiwgMHhmYTYwMWZiMCwgMHgyZmE4YjNmNiwgMHhmZjQzMGE2YywgMHg4NmZjNmQ0NiwgMHg1Y2EyY2Y1NywKKwkweDZjNTBhMWRiLCAweGRlMGUxYmFhLCAweGZhMDcwNDgxLCAweDA3ZDUzODNlLCAweGM2NWQ3N2VmLCAweDc4ZGJjZGQ4LAorCTB4NDNiNWY2ZmQsIDB4MTMyZjc5NTYsIDB4MWJkYzA2ZTMsIDB4MmUyYjM0MzIsIDB4NTAyODQ3Y2EsIDB4YTE5OTU5N2MsCisJMHg0ZDNkYmVmMCwgMHgxZWI5MTNjYSwgMHgwMjE0Zjc0NiwgMHhhZjk4NjdkZSwgMHg3N2VmMjk3NywgMHhkMTY3NGRlNywKKwkweDRiYTZhZGZiLCAweDUxODZmZjk4LCAweGFjNmZlZmUxLCAweGU0YzZmZDEwLCAweGZlN2Q4NGM3LCAweGUxY2E5YTcwLAorCTB4MzQwNmZjMmYsIDB4Njk0ZDM0M2YsIDB4ZmY5ZjdmMGUsIDB4MWQyZmMxMDksIDB4NzgyMTNmMTgsIDB4ZmU4NTVhNGUsCisJMHg4NGEzMGVlZCwgMHhjMjE1N2JiNywgMHg0MTYzMmM3YiwgMHg5Zjk4MzQ3ZSwgMHhiYWQ3MWJlYSwgMHg3Y2Y0MWE0YiwKKwkweGJjMGQyZWJiLCAweDc3YmY2ODdlLCAweDAzZGIwNWE1LCAweDVmMDY5YmY0LCAweGY3ODAxZmE2LCAweDc3ZGU2MWRkLAorCTB4ZmFkZmJmMDQsIDB4MTI1YWY4NDMsIDB4ZGJhMGJlZjIsIDB4NWQ4ZTkyNTksIDB4YTMxZWY0NDEsIDB4YzY3ZDEzNzcsCisJMHhiNDM2MmJjNCwgMHg5MWRjNmJhMywgMHhlMGJjZjEyYiwgMHgxMmQyY2ZlNywgMHgxMzhjOWI4MiwgMHhiNGRmZjA4NCwKKwkweGM4MDMzMTkyLCAweDZmY2YxMjRlLCAweGViZmM4NTViLCAweGU3Zjc3NWQ2LCAweDFhZTkyOGZjLCAweDVjMDEzNmFmLAorCTB4ZWYwN2Y1YzksIDB4ZWI3NjljYmYsIDB4MDI0ZmY0MmEsIDB4YWE3M2QwNWQsIDB4YWRkNjAzZWIsIDB4NGQ2NmM3ZTUsCisJMHg3Zjg2OTQ3ZCwgMHhmYzkxZmYwNSwgMHg3MDAwN2Q0MCwgMHgxNmY5NDFjYSwgMHgwOGU4Yzg3ZiwgMHgwNDRmOTNhMCwKKwkweDdjODk0ZTljLCAweGRjZDE4ZWYyLCAweGUyYzhlYzllLCAweDNjNjk3N2U1LCAweGEwOTlmNTJlLCAweDllOTI1M2NiLAorCTB4OTBlMDAyYTIsIDB4ZjQzZjQ0MTYsIDB4ZjYwMjIxZjcsIDB4MjliYTcwNGQsIDB4YmRmM2YyNWUsIDB4YmZjMGM1MjUsCisJMHhmY2ZlNzYxZCwgMHg2NmZlZDY3ZiwgMHg1ZmNkMzc5NSwgMHhjZmY3OGVkNywgMHgyMDk2ZjdiNSwgMHhmN2M3YmE1YywKKwkweDc2OGZkYTJlLCAweDZlMDI0ZGM0LCAweDY3YmRhZGRmLCAweGMwODA3N2JmLCAweGJiZmZhMjczLCAweGY0MWY0MGFiLAorCTB4YTQ2YTllM2QsIDB4M2U5NDI1MGYsIDB4MmZhNTBkNWUsIDB4ZmE3ZGU2YWYsIDB4YmQzZDA0M2IsIDB4Nzk1MGI3ZmYsCisJMHhjZmJjZDJlMCwgMHgxNzEwN2JmMCwgMHg1YmMwYmVmZiwgMHhlM2FmMDZiMSwgMHhhMzFkNzgzNSwgMHhiYWNhOTdhOSwKKwkweDRhZmU0ODJmLCAweGUzYmU1Y2I5LCAweGUzMTJmYmUxLCAweGQwYTlhZmQxLCAweDNkM2YyNDc1LCAweDNjZjQ0ODNmLAorCTB4NzdlOTI2ZDcsIDB4NGZkNWMxMTUsIDB4NDdlZDBmY2YsIDB4MmNkYzlkZmEsIDB4ZjQ5MWI1ZTksIDB4YzM5NDI0Y2YsCisJMHgyOWY1ZmMyMywgMHhmZWE4ODcyOCwgMHhjNWM2MDk3MCwgMHg5MWVhZmFmYywgMHg2ZmI3Mjg1NSwgMHgxZmZkOTA2OCwKKwkweDJmMzdmZWE1LCAweGE2YWRlMzkzLCAweDhjOGYxMmU3LCAweGVlZmE0NjNkLCAweGFmYTk3Y2E2LCAweDNmYjkyNzFlLAorCTB4ZWZiZjg1YTcsIDB4ZmVkZGZmNGMsIDB4NDY4N2U0MWYsIDB4NmFkNjVjMGQsIDB4ZmY0ZDVlZWEsIDB4NmZkMDE3ZDUsCisJMHgyZmVmMzRjYiwgMHhhOTVmM2NkMiwgMHhkNGQxYWZhOSwgMHgyZmRmODIxYiwgMHgxZjEwYTE5YiwgMHgzOGYwMTU5NiwKKwkweGI1MmY5NmE1LCAweGVmNGFlMWY0LCAweGY1YmE3M2I2LCAweGZiMjY2MmI5LCAweDI2YWY4ODJlLCAweGI1ZmFmM2Q0LAorCTB4MWE0YjFiZTksIDB4NzVmNTAxY2MsIDB4NWYzODRhOWIsIDB4ZjcwMTZjYzAsIDB4N2FlNjQxOWYsIDB4NDMwN2EwNTUsCisJMHgyMGIzNzIwZiwgMHhkOWI5MDdiZCwgMHhmOWVmYWI0ZiwgMHhhZmUwN2ZmMywgMHgwYTM3MTQyOSwgMHhhYjc2NGJiMiwKKwkweDU1MzZmNWMxLCAweDc1YmJkYmFjLCAweDgxMDE4MmZmLCAweDRiZTdkNWYxLCAweDYzZGQ1Y2YwLCAweDVjZGJjNzFjLAorCTB4MmVkMDI2MzIsIDB4YWUyNWNkNjIsIDB4ZmVjYTdkODAsIDB4NWVmYmJlZTMsIDB4ZWIzY2Y5YzUsIDB4ZDFiMjVjZmUsCisJMHgxMTRmNzE4YywgMHgxMmYzYjRkZiwgMHhmYThhYTVmNCwgMHg2ZmY4NTZiYSwgMHgyZjFlNjFjNiwgMHg1YWEyOTNjNiwKKwkweDA4MGZlNjczLCAweGVlNmIyN2Q4LCAweGJiNmNmYjgzLCAweGI3ZGZlNTViLCAweDAwZmMwN2FiLCAweDgzOThjYTljLAorCTB4MzNhNzUwZjIsIDB4YjZhNWU1MTcsIDB4ZmMyY2M0YzUsIDB4Zjc2Zjc4MmYsIDB4ZDQ0MmVhZGQsIDB4YzYxNzA3ZDMsCisJMHgyYmQzNWU1MSwgMHhiMTdjZmNlOSwgMHhlMjc3YTYzYiwgMHg0NWI3YTg0YywgMHhiNmYyNDZkZiwgMHg1NGIxZmVlZCwKKwkweGNiNWQ1MmVlLCAweDJkOGM2Y2JiLCAweDg5NGFmNzVlLCAweDFlN2M3MmY5LCAweDNiYmE3MDQzLCAweDI1OTJhNWZkLAorCTB4YTZmN2VmNDAsIDB4OGY3ZGU4M2IsIDB4MDNiODk2ZGQsIDB4MGMwN2VkZWQsIDB4MGUwNDM3MTQsIDB4ZTdlODkyNzgsCisJMHgzYzYwZDM0MSwgMHhlOTJkOTc2ZiwgMHhmMmIxNzE0ZiwgMHhjMzhkMjZjNywgMHhmN2U1YTQ3YiwgMHhkMjVlMjgxOSwKKwkweDlmOTFiM2E5LCAweDU4YzBmM2M4LCAweGIxOWE5M2NhLCAweGFiZGU5NDRjLCAweGRmZTU3Y2E5LCAweDdiYzdhYzdmLAorCTB4MTRlYjVkYTYsIDB4NTVjZDRlZmEsIDB4NmRmZjM3NWYsIDB4MWIyYmQ0MTAsIDB4YzY3ZWU5YjIsIDB4OTQ3NGU3Y2IsCisJMHg5YWU5ZmUxNywgMHg1M2NjM2ViZSwgMHg0NzU5MWMzZSwgMHg5ZmQwYTVmOSwgMHg5ZTU2YmJlZSwgMHhjOTJmZWM3NywKKwkweDBkYWFmZWM3LCAweDQyOGUzODUzLCAweDQ3Y2ZkYTNiLCAweGUxNGZhODU3LCAweGFiMzJjZTNkLCAweGJiZjMwYTI1LAorCTB4YzhjNzdlOGYsIDB4M2VmNDczYWYsIDB4ZTZlZjdkMTMsIDB4ZDZlN2IzNTMsIDB4OGY3NGYxMzUsIDB4NzY3ZDJkMDksCisJMHgxNTU4NzE1NCwgMHhmNGRhYzM4MCwgMHgyOWM5MjVmZCwgMHhmODEyNmVkOCwgMHgwMzJkNmZkYywgMHg3NWQzMmYzZSwKKwkweDkzZTkwZmQzLCAweDVmNWU1ODhhLCAweDkyY2RlZWJiLCAweGEzOGZiMDRkLCAweDdjYTVmNDRmLCAweGQ3MGM4NGIxLAorCTB4ZDc4MDc0YmEsIDB4OTNkNzBjZTEsIDB4ZDlmYjhhNTQsIDB4Yzc5YmZjYWYsIDB4NTkzYTVmMjUsIDB4YjVmNDg4OWUsCisJMHhjYmY1ZDA1OSwgMHgwMzEzY2FlNywgMHhjNTQxNmVmZiwgMHhjMWQxM2QyOSwgMHgwMmM3NDYyYiwgMHg1NDY5ZWVmYSwKKwkweDZjZTc4MmJhLCAweGY0Mzg4M2EwLCAweGU3MTBjZjliLCAweDg1ZTdhMDE2LCAweDU3ZDhjMzViLCAweDNkYjlkMzRiLAorCTB4ODRkYmY2ZDYsIDB4YmEyMDhlNTEsIDB4MjllNDk4ZmUsIDB4ZmVhMDM3OWQsIDB4YTQ0N2ZhNjIsIDB4MTY5ODhlZTcsCisJMHg3Nzc1MmU2MiwgMHgxZGRiMjQzZSwgMHgzNDMyNzA0OSwgMHgzMzIyZmE0NSwgMHgxYWVhN2ZkMSwgMHg0ZmYzYTJlNywKKwkweDk2Yzk5ZjczLCAweGZkMTQzZTAwLCAweGZjZjJmMTNmLCAweDNmYTA0ZmRmLCAweGYxM2VmYjllLCAweDYwNGIzZmZlLAorCTB4YWZmNjQzM2MsIDB4NjhiYzVhYjQsIDB4NThiMzFjNWMsIDB4ODM4Zjg4ZjQsIDB4MzE0N2M1ZmEsIDB4OWQ2MmFkM2YsCisJMHhjNTQwZjQ4MSwgMHg1ZDQ1ODRiYSwgMHg2ZTgwN2YyOCwgMHhkZGE2YmZkMCwgMHhjMGMzMjk5NywgMHhjNjNkMThmZCwKKwkweDE5MmYzZjU3LCAweDVlNzgxNjkzLCAweGJiZjI0MTM5LCAweDM3N2NiZTI3LCAweGM2Yzk0NGZkLCAweDY1ZjMzZDAxLAorCTB4YTdjYjhkYTUsIDB4ZjdmOGViNzEsIDB4NTg4NzJiNzUsIDB4N2JiZjc0ZjQsIDB4ZTg5YmFiZGQsIDB4YzhiY2YwMWUsCisJMHg1MTU3YmM1YywgMHhmODQ0Y2ViOSwgMHhiYzU4YjRlYSwgMHhiZWYxMmJiNiwgMHgwYjFmNDU4MSwgMHhhZTc0YTFlNSwKKwkweDBlMTlmNTRmLCAweGNhOTE0N2MyLCAweDU0YjkxMWY0LCAweDE5MGEzZGQyLCAweGYwYjEzYzNmLCAweDFkMzFjN2QxLAorCTB4YmJlNjczZjMsIDB4ZWZjMDE4N2UsIDB4ZTlkMzhiOGMsIDB4ZjkyYTZkOTksIDB4YzRmMWI1MWYsIDB4MWFiN2Q3ZWEsCisJMHg4ODhmZDkwYiwgMHg0NzEwZjYyNywgMHhlMjlkNjJhYywgMHhlM2UxZTJiYiwgMHhlMjM4ZGE4OSwgMHhiZGM1ZDJiZiwKKwkweGEyMzhlZWIzLCAweDUxODdiZTgxLCAweDQ1ODhlMjI5LCAweDdmNWExNTZiLCAweGJkZmU0MmU1LCAweGVlMzhhMjkyLAorCTB4MThiMjNlM2YsIDB4ZWQyZmEwZTgsIDB4YzVjYjZiZGYsIDB4N2ZhZTY5M2MsIDB4OGJlMjk5MmEsIDB4NWVhZjVmODAsCisJMHg5OWZjOGYzYiwgMHg1ZTFjZTk3NSwgMHhiMDNiZTI2NSwgMHgxOTlkMjM4NywgMHg1OGFmZGU3OCwgMHhhZTcwNDkxNywKKwkweDA3ZjY3MjdjLCAweDdkZTNlNDRmLCAweDgxZjE4OWMwLCAweGEwOWI2YmU3LCAweGUxOWYxODBmLCAweGNlMzk2ODNkLAorCTB4ZDBmNzI1YjEsIDB4ZDY4YjY3NzcsIDB4ZjMxOTM5YzMsIDB4NzNkOTYzYjQsIDB4ZGUyMjY1MzcsIDB4ZGUzMDMyNTIsCisJMHgyZTU1ZmIyOSwgMHhlZjBmYmJiZCwgMHhkODZjZTcwNywgMHg5NTBhZDk3NywgMHhiYjZiMGY3ZiwgMHhmMDIxZjQ4OSwKKwkweGI4MGIzMjdjLCAweGQ5NjMzZTJmLCAweGQ3MjM0NmViLCAweGE4NzkyYzY3LCAweGZlMWRiM2IwLCAweGMyOWY2Y2ZiLAorCTB4NDEwNGZjNzMsIDB4MjZiN2I4YWQsIDB4NWJlZjI3ZTEsIDB4ZjdmOGU5OTUsIDB4MGE3NTRiMzYsIDB4ODkwMmMzZGQsCisJMHg3ZTk3Zjc0NiwgMHhhM2ZkYzE5MSwgMHhjZWRjMTk3OSwgMHhkMjcwY2IyZCwgMHg1NWVhOWUzZCwgMHg0Y2QyZTcyNiwKKwkweGJkZjc0ZTNlLCAweDU1ZTczODc1LCAweDI4MmEzYWViLCAweDEzMTdmOWFlLCAweDk3NmE1N2Y5LCAweGFkMjJiYTQ1LAorCTB4ZjllMzFmM2MsIDB4YWQ3Nzk0MDEsIDB4YWEzYzAyMzcsIDB4ZmM2ZTVjMWMsIDB4YWQ2M2QwNDIsIDB4OTRkNWQyNjMsCisJMHgwNzY3YWU5ZiwgMHg1NjA3ZWZmMCwgMHhhYzljYjg1YiwgMHg5YmI4MDU4ZSwgMHg4NmU5MDEzOSwgMHgxOTM5ZjdlMiwKKwkweGI4ZTI1M2U1LCAweGU2MDI4MzI5LCAweDhjM2I0NDU3LCAweGM3ZmFiMGUzLCAweDBkNjNhYmRkLCAweGZlYzFhN2U4LAorCTB4Mzg0MjBmOTcsIDB4MjM3ZjVkYzYsIDB4OTU1OWVmYWUsIDB4YjQ4MDFhZjgsIDB4YmZlZDAwYWEsIDB4M2MzY2Q1NjcsCisJMHhkOGFkOTc3NywgMHhmMGU1MGUzZCwgMHhmMTgzMmRkYywgMHg3YjJiMDU0NiwgMHgyM2QyNWRlZSwgMHgzYmZlMDU3MywKKwkweDM5NWEzZTQ1LCAweDgxYmJmMWQ0LCAweGI5NzA2NDM3LCAweGRmYjk1MWU5LCAweDJmMDEwNmU4LCAweDc5ZjIwNzQ5LAorCTB4ZjcwMzBhZjUsIDB4NDdiYzgzZTMsIDB4ZTRiZDUzMDEsIDB4ZGFiNzFhNDMsIDB4NzI4ODkxZDIsIDB4ODFiYjdhYjgsCisJMHg4Y2RmODdlZSwgMHg5NzM4MDZlYiwgMHg3NTFmNDkyZiwgMHhkY2FhZTgwMCwgMHg1MWRmNDMxMCwgMHgzNDRlZjJhZCwKKwkweDUxYWFiZDYyLCAweGJkZmZiYWExLCAweGQzYTQwYzg0LCAweDYwYmQ5NjJmLCAweDFjMzlmYTQ1LCAweGZhODM5YWQ5LAorCTB4YTQ1ZTZiYTksIDB4ZGEyOWVlOTMsIDB4OGJlZWRmYjgsIDB4YWY3NDM5NjUsIDB4YzNhZDg2NjksIDB4OTk2NWRmODIsCisJMHg4ZWRiMjBiMSwgMHhhZGEwZmM3MiwgMHgwZmNmODhkNSwgMHhiMGVhNjczNiwgMHg0NmQ5YjJlZSwgMHhiZmE1ZGQ2MSwKKwkweDg4NWZlYTkyLCAweDQxZmExNzdjLCAweDllMzg1MmJhLCAweDFiNzY5YWFiLCAweGRkMmZlZmYxLCAweGQ0ZTJlODJiLAorCTB4NDFmNmVmYjMsIDB4NDY3NTUwM2YsIDB4MmZkNDFmNDcsIDB4NTI3ZDA3NDAsIDB4MjhjZmNlMTEsIDB4OWE2YjlmYTQsCisJMHhhNGJjMWU3OCwgMHgwM2E0MWE4MywgMHg4MjM5YmJlMCwgMHhiZGI2NmEwZSwgMHg0M2YyMTc3MCwgMHgzNzNmZTIwZCwKKwkweDllODA4ZTk0LCAweGY5ZmRhOWRiLCAweDdmMThlMzBkLCAweDQ0ZTkxZGJmLCAweDJmYTgzM2VhLCAweGNlM2ZhMDMzLAorCTB4MDU4YmViYzgsIDB4MGM3ZGExZmUsIDB4ZTAwZWY3NmYsIDB4ZjlkZDc1ZjksIDB4ZDA3YzQxMDgsIDB4NjZkNzdlMTMsCisJMHg0YzNlMDRlOCwgMHg4YWQ3NzcyNCwgMHhkOGFlNzZmZCwgMHg5ZGZjNDU2ZSwgMHgxZWY3NzY3YSwgMHgzZjU0Yjc4YywKKwkweDExZGFkYTBmLCAweDNjMDQxZjg2LCAweDU2ZmY3MTZhLCAweDE5ZDkzZjVhLCAweGFiNWZiOGI1LCAweDc0ZGRmZjdmLAorCTB4OTZiMGY4MmYsIDB4ZmRjOWZkZjEsIDB4ZmVjNWVhZDYsIDB4ZmVmMTczZTUsIDB4MmFjZmIxM2EsIDB4YWRiNWUwMjYsCisJMHhjMTNiZTcyZiwgMHhmNGM3Yzg2NywgMHgzZmIxMjFkZCwgMHhiYmY4M2Q4ZiwgMHhmZWM1YmJiYSwgMHg2Y2M5NDQ5YSwKKwkweDBmODQ1NmNkLCAweDBmZTUxN2UyLCAweDI4Y2I4ZmQwLCAweDM5NzQwOWU1LCAweGU1MDM2NWI1LCAweGM5N2M0YmY3LAorCTB4ZDdlZmJmZjUsIDB4OTNmYzJlMmIsIDB4OWQ4ZjEyNTQsIDB4YjZmNzdjM2QsIDB4YTFjOWYwNDUsIDB4NzYzMjkyZmIsCisJMHhkOGJlZmMwMCwgMHgyNDBkOWY0YywgMHhjYzA3ZDU3YSwgMHhjZTQ2ZTkyNywgMHg0OWE3ZjQ1NywgMHg2MWJlZTJkNywKKwkweDVmMWM1NmZjLCAweDFiZDA3YmNlLCAweDBlNzFjN2FkLCAweDcyMWZjZTMyLCAweDhiMmY5MmZkLCAweDNiNWRhN2VhLAorCTB4NGVmZDhhZDgsIDB4NWVkMWIyNTksIDB4M2Y3Yzc4MTEsIDB4YmJlZjQ2YzMsIDB4Zjc4MDZlZDAsIDB4ZjIxNDNiNWQsCisJMHhlNzEyMWY1ZiwgMHhiZGY3NDNmZCwgMHhlMDFmMmQ2MCwgMHhjNTc3ZjdhNywgMHhlMTlkMjViYSwgMHhlNGM5ZmEwZiwKKwkweGI5ZGFmNzdhLCAweDZlYmI1ODNmLCAweGJhZTQ4NzI5LCAweGUxYmZlZThiLCAweGViOTc2YzVhLCAweDIwNTFmOGM3LAorCTB4NGEzODRhOWQsIDB4ZmFmNzk1N2EsIDB4MzQ0Yjc0YjQsIDB4ZGFhYWY1MjcsIDB4YTZkNzdkMzMsIDB4OWRmY2EyMWQsCisJMHg3OGVkNzY5MCwgMHgyYzNhM2VjMiwgMHg5ZWJiY2RmMiwgMHhlNzdkZjk1NiwgMHg0MWVkYzk2NSwgMHgzMzE4OGVmNywKKwkweDI1OWZlYTA3LCAweDE1YjZhZWYzLCAweDQ5YjczYzYyLCAweDUyMWU3YmExLCAweDRhY2ZjMGFmLCAweDkyM2U4MDdkLAorCTB4ZGVmMGMxZjYsIDB4MzZhNTdmM2MsIDB4ZjEwMjc1ZGUsIDB4NjNiYzc1NTksIDB4NDQ5MjdlMWMsIDB4N2Q1N2E1ZGEsCisJMHhhMGM2YWFkZCwgMHhjZjFiNmFmZiwgMHg1Mzc0OTM4MywgMHhmODlkYjI3NSwgMHg5M2RjNWFhMSwgMHhlZWYxNWIyYSwKKwkweGY3NDg2MWM0LCAweGNlMjgxYjRmLCAweDU4ZGY3NjUzLCAweGIzZmJkYTIzLCAweDhhMWY0ZDM3LCAweDEyN2JjMGUwLAorCTB4NmM0ZmRmMjgsIDB4ZTA0NzkyMWMsIDB4ZWJjNGI2NjEsIDB4YzZjNGJlZjEsIDB4YmZjN2FmNDcsIDB4ODc2MzNhNWYsCisJMHhjMWExZGY0YSwgMHhjYjhmOTA3MSwgMHg3ZjIzYzhlZSwgMHhjZWM4ZTFlYiwgMHhhZWQwMjM4OSwgMHg0MzZhYjVmZiwKKwkweGE2ZTQ3ZWJiLCAweGZmYjA4YjIxLCAweDU4ZWY0YjQ4LCAweGM2ZDA3OGZhLCAweGY0YmJhYTM4LCAweGE0MjdhNDMxLAorCTB4MDNmMzJjMWQsIDB4OTBiZGM1ZWIsIDB4YWY5Y2RlZWMsIDB4OGE5Nzc1N2EsIDB4ZWZhYzBiYzgsIDB4YWVmOWYxODMsCisJMHhkZGY0OTEwZCwgMHhhM2EzNTJhOCwgMHhkYmU3MTViOSwgMHg4ZWU3NDQ5OSwgMHgyNTI2Mzg1YSwgMHgyYjllZTlkYiwKKwkweDhjYjM2OWQ5LCAweDk3MjUyMjJjLCAweDQ1MzAyM2RhLCAweGM3NDM3NWY5LCAweDVlNGZhODFkLCAweDE4MzJjM2JmLAorCTB4ZDRjYjhiYmYsIDB4YjljYjQzZjMsIDB4OTBlM2NkN2QsIDB4NjFkZmMxNzEsIDB4ZWFjOGViOTIsIDB4M2I1N2U5Y2QsCisJMHgyZjdmN2M5ZSwgMHg3NGVjMmI5ZSwgMHgzZmRlOTE5ZiwgMHhlYmU5ZWNiMSwgMHhkODllMWY1MSwgMHg3ZGM3NjM5YywKKwkweDQ5MTlkYjFmLCAweDE5OGUwYmY3LCAweDc4ZTdiZjgyLCAweGI0YzJmN2E5LCAweDNkZTRhOWY3LCAweGMxZGVmY2Q3LAorCTB4ZmJhNDljZjYsIDB4YjljYmRlMGIsIDB4OThmMmQyZWMsIDB4NzQ2NjJlNGUsIDB4MDY1Y2ZjNGYsIDB4ZThlNGZlZTMsCisJMHg3ZTYyYjZlZiwgMHhjOWEzNDU2MSwgMHg4ZTY0Zjc4NiwgMHg3YzYzZmQyMCwgMHhkZjRhYmI2YiwgMHhkZmJiYTIwMSwKKwkweGRiMjNhZjgwLCAweDcwM2VlOGYzLCAweDVlYmNjN2M1LCAweGYwZjhhY2QxLCAweGMzZmI3MmZlLCAweGMyZmU1M2Y3LAorCTB4ZjEzN2IwNGMsIDB4M2RiNzc5NmEsIDB4ZWJlMWZhYmQsIDB4MzhjZTBkOTEsIDB4M2JmMWNiM2QsIDB4ZjMzNjY3MDAsCisJMHhlZjkwOGI3YywgMHg3NWJlYmMzYSwgMHhmZmUzOGE0ZiwgMHhmZDJjZmRiZiwgMHgwNzdiZDMxMywgMHhmMDkzNDdkZiwKKwkweDU3YWFlNzk2LCAweDcyMGEyZTgwLCAweDcyZmJmMGZkLCAweDlmYjIyY2YxLCAweDUwZjYyZTRmLCAweGI0Mzk1YTc5LAorCTB4YjNkMjI0NmEsIDB4MTVlZTg2MjUsIDB4NTFlM2I0YmMsIDB4NTM3M2JmMTUsIDB4NzlmMDZkYmQsIDB4MzA4ZjFmM2MsCisJMHg5ZmY3ZDBjNywgMHg5MGJjNWNiZSwgMHgxNzI3OWE4MiwgMHg4YTNmODlkNywgMHgxNWY4NTRiNiwgMHhiNTVlNTQ3YywKKwkweGZiZGU4ZGFkLCAweDBiNWU0NzcyLCAweGQ5N2RlYmRlLCAweDlhYzVjMzFjLCAweDNiZTgyMGFiLCAweDNkYmYxMjk5LAorCTB4ZmI5NjU3ZGQsIDB4MWNkN2ZjZmEsIDB4OWZkZDcyY2YsIDB4YzU2ZTllNmYsIDB4MjFmZGI1N2QsIDB4ZTIzODY1YWUsCisJMHg4NmM2M2EzNywgMHhjOGE1NjA3NiwgMHg4NmJhMzkyZiwgMHgyM2M3ZDlkYiwgMHgxOGFiZmU2MiwgMHhlZDdjN2NmMCwKKwkweDBlZmM0NDk0LCAweGE5YjZjY2QxLCAweGM1N2I2M2Q3LCAweGU3ODZjNTRlLCAweDQ5Y2VlNzAzLCAweDdkY2YzYzU2LAorCTB4ZTJiNGVmYTYsIDB4ZDZjZmFhM2QsIDB4M2U1N2ZiYzgsIDB4MjM3YmJiZmEsIDB4ZDgyOWIzYzYsIDB4OWVhYjQ0N2YsCisJMHg4NDI5MzIzOSwgMHhmYzMyZjQ0YywgMHhjYmVlOWVhNCwgMHhlNGVkMDE3ZSwgMHg0NTFmMzkzZiwgMHg4OWY4MTNmZSwKKwkweDk5OTI3Y2MzLCAweDRiYmY3MjJmLCAweDljNTdmOWY3LCAweDdkOGE0NmZmLCAweGNiYjZmN2I3LCAweDE3YjUwNmY4LAorCTB4NjNmNmYwMTUsIDB4ZDA5NmI3NmIsIDB4NjhkZTRmZGYsIDB4YmZiYWUxYjAsIDB4ZjFhMDY4ZGMsIDB4NGRiOWMwZTcsCisJMHhiZTNkZWIwNywgMHhiMDgzOWY5OSwgMHgxM2U4ZTc4ZSwgMHg2Nzc5Zjk5YiwgMHhlZjNmMzM0ZSwgMHhiODMzY2Y1NCwKKwkweDYwZDJmZGY4LCAweGU4MGEyY2JhLCAweGViMmRkZjQ3LCAweDczMjNiYmUxLCAweDczN2Y3YzVjLCAweDdlZTI3ZjQwLAorCTB4YjFiZjQ0MmYsIDB4OWZlZTk5YWMsIDB4YTkzZTZhNWQsIDB4YWFmZjdlOTYsIDB4NzRkZDE3OTEsIDB4MDhiZDEzZGIsCisJMHgyM2ZmMjJiOCwgMHg5OGJhNGFkZCwgMHhmNWM3ODZiMywgMHgwYjgzY2RlZCwgMHg5ZDI0ZmU5MSwgMHg1ODAzYmY2OCwKKwkweDNiZmM2NDZmLCAweGZhMjhiYWIyLCAweGIzMjRmN2VlLCAweDYyZmE4MGMzLCAweDE4ZTc3YzRhLCAweDA3NWY0ZjA0LAorCTB4OTE2YWFmOTcsIDB4ZTRmNzg1Y2UsIDB4ZWMyOWJkNTgsIDB4MTVkZWM0NzcsIDB4YmMxYTc4ZjIsIDB4N2FiYmY3NGIsCisJMHhjZmY3ZjhkYiwgMHg1OTMxN2RjNCwgMHg0NzRhYmU4MiwgMHhkYTI5M2U3ZCwgMHhiYTAzOGRmZSwgMHhmMmZmYWU3NCwKKwkweGY1ZDAzZDNhLCAweDNiZjY5MWE0LCAweGQ3ODA5ZGIyLCAweDdhZjM1ZmY1LCAweDE2N2I3ZDllLCAweDdkZWYzZmQ0LAorCTB4ZWMzZDNhZjYsIDB4ZjY5NWQyNmYsIDB4MmZhODA2MjEsIDB4NzVjZGYyNTksIDB4YzliOWUwNjMsIDB4M2JkODNhZTEsCisJMHg5YjEzOWU2MCwgMHg3ZjcxZDI5MiwgMHhkYjA4N2VkMCwgMHg4ZTdhMjdhNywgMHhlZTJiNTk2MCwgMHhiYTU2OWQ4ZiwKKwkweGY0Y2MyZDA2LCAweGE3N2I3ZmY3LCAweDBlNGJlMGU1LCAweGMwZDNiZDdmLCAweGE3M2JiYmU4LCAweDg3ZjVjYjdiLAorCTB4ZDcwZTlkMmYsIDB4YTEwOWRlYTksIDB4ZGQ4Y2U1ZWQsIDB4NWU3Y2Y5NDcsIDB4N2UwNzZmN2UsIDB4Nzg4OTExZGMsCisJMHg1ZGQzOGFhZiwgMHhkM2M3YmNiOSwgMHhlM2M3YjlhMCwgMHhlNGQ1ZjdlNCwgMHg3Zjc5MmFmZCwgMHhmZGZmNzJlYSwKKwkweDcyOTdiNWIzLCAweDAwZmZlY2ZmLCAweDRmYjJmMzY5LCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAorCTB4N2RlNWZmMDAsIDB4NTU1NDc0MGIsIDB4NTViOWU4OTYsIDB4MmE0OTNlYjcsIDB4NTQ4NDI1NDksIDB4YWE4NGE5MjUsCisJMHhjMDkwMmI3YywgMHgzMTBjN2MyNSwgMHgwNDAzZTU0OCwgMHg2YTI4NTg4OCwgMHhhMjA1YTBkNCwgMHgwMTE0ODI4MCwKKwkweDU1ZjQ3NDFkLCAweDlhN2MzMDYxLCAweDE3OWY4ZWU5LCAweDEwMmQ0NjIyLCAweGRkNzg3MTk1LCAweDg2NmRiMWQxLAorCTB4MzIyMDUzOGYsIDB4YjQwZTlhZmMsIDB4ZDM4Y2ViNjMsIDB4NjhkMWQwMWQsIDB4MzgzMTFiNjMsIDB4NmYzNjBjZjQsCisJMHg0ZGNlN2RlZiwgMHg4MDJhNTZlYSwgMHg2ZjdiZTdiZSwgMHhmNjVlOTdhZCwgMHhlZTczOWY2MSwgMHhmZmIzZWNmOSwKKwkweDVmNWJkZjY3LCAweGE1ZWIyYzE5LCAweDBmMjRjNjY0LCAweGExNTNhYjYzLCAweDYzNTk1YTc0LCAweGZmN2I5NDE5LAorCTB4NjhkMmNmZTksIDB4YWM4MzlhYzYsIDB4YzE4ZjJlM2IsIDB4ZDNmNWEzNWYsIDB4N2NjZjUwNTEsIDB4MmU1MDRiYmEsCisJMHhjZDFhNDg0YiwgMHgxMzk5NjBjNiwgMHg5OTZmZDA2MiwgMHgxMmFlYjE4OSwgMHg2ZDNiMjZlOCwgMHgxMmQ4YzJjYywKKwkweDAxOWRmZTA5LCAweDE5Y2FmOWZmLCAweDk1NmM2NzRiLCAweDQ0ZWRmZTE1LCAweGYwODc0MmI4LCAweDdmNDY2NjgzLAorCTB4M2Y5ODA1OWYsIDB4MWZkOGMwZGYsIDB4MzkyNTc0NGYsIDB4OWQ5ZDhjZjUsIDB4YmIwYzJlMWQsIDB4YmM2NWZiMTgsCisJMHgwMDljZTZjZiwgMHg4ZWNkMWRlZCwgMHhiZWM2MzRhNiwgMHhkNGE0YzM3YywgMHhkMDllZmY0MywgMHg2MGY5MjdkZiwKKwkweGU2N2FhNWZjLCAweDZkOTI4NGVmLCAweDI0ZDhjZTFmLCAweGMzZWEyZjI4LCAweDYxZGZhMDUzLCAweDhkYjZmMTU3LAorCTB4YTljYmJjZjAsIDB4M2Y5ZTBjNjMsIDB4ZmNlNzBhZWIsIDB4ODJjNjc4ZjUsIDB4MzJmMjkzMmUsIDB4MzI3NzdlYTMsCisJMHg5ZjFlZWI4MCwgMHg5ZGZiMWMzZSwgMHhmZTVkN2Q3ZCwgMHg5MzZlYjAzZCwgMHhlYzEyNThjYywgMHg1OThjMDY3YiwKKwkweDAwMzA3ODBlLCAweDA3YzMyZmFjLCAweGI0MGUzNDQyLCAweGJlYTA5MzA3LCAweDBlNzRmNWM1LCAweDJmMzA3YzIzLAorCTB4MGRkOGM4OWIsIDB4MDZlYmVmOGMsIDB4ZjExZmJjMzksIDB4MTk2NDk0YzUsIDB4NmY5YjM3ZjcsIDB4MzI4M2RiMGYsCisJMHgzMzMzYTM4YywgMHg5OGJiYWUwMywgMHg0ZDNmNTg3NSwgMHg4ZWIxOTgwMCwgMHg3ZjYwYzM0YiwgMHgzMjYzYzA2NiwKKwkweDI0Yzc4MDk2LCAweGExZWFhNmM2LCAweGU5YWZhYzEzLCAweDA5OTBmYTk3LCAweDc4ODRkN2Q2LCAweDg1ZDA3MDE0LAorCTB4ZDcyYzdhMjMsIDB4YzU4YmY4YzMsIDB4YmM4ZWNiYmMsIDB4NThjMWM0NmIsIDB4ZWIwN2ZlMTAsIDB4NWRlNjIyNTksCisJMHgzZDc3NzFkYywgMHg5MDkyY2I5ZSwgMHhjMGI3NGNlMSwgMHg3ZmZhMjVmNSwgMHg3MmM3OWQwZiwgMHhmMmZlZWZkMSwKKwkweGUyOWM0NmFkLCAweDdlZGExZGZlLCAweGFmYTZkOWNiLCAweDUyZmNmMGY1LCAweGZkYzQ2ZGQ2LCAweDZhOGNlYjJlLAorCTB4MGNmOWE4ZWYsIDB4OTc3Y2JiZDcsIDB4OTlkZWJlYjYsIDB4YzI3NDg2OTgsIDB4OTdiMWIyYzYsIDB4ZTc0ZDU0ZjQsCisJMHg5OWY0NDhiZCwgMHhjYTc0NmZhYSwgMHg2NmUxOWZiOCwgMHgzNzEzMDRjNSwgMHhmNDQ3OWYzZCwgMHhiMDBjZGVjMiwKKwkweDYzYWM3ZWM4LCAweDhiNGZkMTE4LCAweGIxZTc0ZjRiLCAweDljYzQ5NzY0LCAweDdlYmIxOGUzLCAweDQyNzMxNjU3LAorCTB4NjFhZWZkNTMsIDB4Yzg1ZDI2NTQsIDB4NWZjZmZhYTAsIDB4NTdkZTM2MzksIDB4ZDc1ZTcwMzIsIDB4YzZhYjZhYmYsCisJMHg2YWZmNWRmNSwgMHgzYWVhOTUxMSwgMHg0ZTFkMDQ5YSwgMHg4Njc0OTdkNSwgMHgyY2U3MWQ2MSwgMHg5YjgwMGViMCwKKwkweDgxNjJjMDhlLCAweGQ2NmU5YTdlLCAweDk5ZTExODg3LCAweDU3YmZiMTk5LCAweDU5NmJjNzJjLCAweDQyNGZhNWRmLAorCTB4ZmQ4YTBlNTgsIDB4M2EyNDk3NGEsIDB4MWYzYzY0ODQsIDB4NDMzZDYxZWYsIDB4MDMxZTYyN2EsIDB4Nzk5OTNiYjUsCisJMHhhMDVjYTVjZCwgMHgzOThlYmIxYiwgMHgyNGRmZTA2MywgMHgxOWNlMmZjZSwgMHg4MWVlOWNjZiwgMHhmYzU4Mzk3NiwKKwkweDg3NTg0YWIzLCAweDA5NDFhZTYxLCAweDVjNzM3YjQxLCAweDMzZTQzNmQyLCAweGU1NzRmNDE2LCAweGUyMGQ3M2MzLAorCTB4NGUzOGFlYjksIDB4NTRlZTA5MzcsIDB4MWQyYWYzY2QsIDB4YWRmYTJhZGMsIDB4MTg3NjlhNGIsIDB4YjNjMWIyZTksCisJMHg1MTIxZTg4OCwgMHhjN2FjZDRjOSwgMHg0MDZhNWZhNCwgMHg2N2Q1YjlmYSwgMHg2MjNiYTRmOCwgMHg1ODVmYTIxYywKKwkweDI5NWUwZGM3LCAweDczNzhmYzg0LCAweDUwZGRiNjgzLCAweDQ0YWQ3NWY5LCAweDhlNDdkNDI1LCAweGZiZjZkNWU3LAorCTB4ZDAwM2QyMjksIDB4NzE3ZTEwM2IsIDB4OWMwYzNkMjQsIDB4YzNhM2M1ODMsIDB4MTIyNGYwNzMsIDB4YjljY2NiYmQsCisJMHg1YmUwMTJiOSwgMHhlZTE4MWIwZSwgMHhmN2NmMTRkZiwgMHg5NzMxMGU3OSwgMHgwZjgwZmQ4NiwgMHg4ODc1ZTI2MCwKKwkweDJlNGZhODE3LCAweGM1MzdlMmQ3LCAweGIwZTdjNWEzLCAweDg2N2UyZDNhLCAweGI3ZmJiNTdiLCAweGRhNmFlNDM1LAorCTB4MzUyMzdjMzMsIDB4Y2I4YjU5ZWQsIDB4YmZiNjcwMzQsIDB4YzQ3ZmQzNDIsIDB4ZWMwZDZhZWEsIDB4ZjRkNGNlMGEsCisJMHhhMzdmNWJjZiwgMHhiZDY4MmUwNiwgMHhhOGJmZDM1ZCwgMHhiZGE2ODE3ZCwgMHhhNjlmNzQzOCwgMHgyNjhlZDQ3ZCwKKwkweGY5ZGE1YzBkLCAweDk4ZmZhNjg4LCAweGRhNmI4ZjVkLCAweDZhMzc4NmM3LCAweDdlMWRjN2RhLCAweGU4NGYwMzRhLAorCTB4N2ZlOWEyZGEsIDB4MzRkYjA3Y2QsIDB4NWZiYTkzZWQsIDB4ZGI1ZmI0ZDMsIDB4OWUwNjg2ZjMsIDB4ZDM1YmJiZGMsCisJMHgwMzg1Y2E3ZiwgMHgxZDhhYjgxYSwgMHgzMWFmZjRkMywgMHg0ZjAzNTZmZiwgMHhhNmFiZmViNSwgMHhjN2ZiNzRmZiwKKwkweGNlMTlmNjlhLCAweDY3ZGE2YTNmLCAweGQyZDFiZmI5LCAweDkzOTczYzZiLCAweGE1ZmYyYmQ3LCAweDkzNTllZTc5LAorCTB4NWY1MGRmZWYsIDB4ZGQ5NTRiMzQsIDB4ZWJmNDg2NDEsIDB4MzViYTNlMjQsIDB4MDE4NGE3NGQsIDB4OTcyYTgzZmUsCisJMHgxYzllMWQwNCwgMHhjMTM5MjU2MSwgMHhiNzhlNTlmMiwgMHgzMmIwZTkxNCwgMHg2ZTdjN2M4YywgMHhlMGYyNDQ5NywKKwkweDI4YmQyOGFiLCAweDkxZWJkMWZmLCAweDRhZmQ5ZGEwLCAweDIyNzY1ZTUyLCAweGM0NWQ0MWRkLCAweDMzMWUyOWZjLAorCTB4MzlkNjIzOTMsIDB4ODFhYWNlYWMsIDB4OWFlZDdiODcsIDB4YTcwNmI2ZmUsIDB4ZTdjMzNkYTYsIDB4MmQ2N2I0ZDYsCisJMHhiNjcwMzQ1NiwgMHg3ZmQzNWNiZiwgMHgwNjhmNmFjNCwgMHgzNGViMDU3NiwgMHg3YmQ2ZjNmZCwgMHg2YjQxNzAzNSwKKwkweDUxN2ZhNjgzLCAweDVlZDM0ZmJiLCAweDY5YWM1YTFjLCAweGFmYzNiNTFmLCAweDU3M2I0YjgxLCAweGQ5OGZmYTZiLAorCTB4OGZiNGQ0MTUsIDB4YjRkN2FmMGQsIDB4YWFkYzNiOGYsIDB4YjU3NDI3ODEsIDB4ZjM1ZmZhNmIsIDB4M2VkMzQ4NDEsCisJMHhhNjg3N2JhOSwgMHg0ZTllZGFmZCwgMHg3N2I5M2MwZCwgMHg5NGZmYTY5NywgMHg1YzBkNjEwYiwgMHhmYTY4OGVjNSwKKwkweDZhNGY5OGQ3LCAweDBmZDZhOWUwLCAweGRiYTdmZDM1LCAweDY3ZGE2YjRmLCAweGI0ZDczZjM4LCAweDJjZDA3NmFiLAorCTB4N2FkYWQ3ZjcsIDB4YWY1ZDE3NjEsIDB4N2NmMzU5ZmMsIDB4OTBjM2RhYjAsIDB4NDg2ZjgyM2UsIDB4ZDYxM2IzNGEsCisJMHgzZmUxMDJlYiwgMHg3NzdjZTQ5YywgMHgyOGVkMWU5YywgMHg4YzE0MTgyZiwgMHg0MWFkMjkwMSwgMHg0MjBjOTJmZCwKKwkweDQ4MGFlOTBjLCAweGUyYTYzNThjLCAweDIwYWM0MDI4LCAweGMxNTU0OWI3LCAweDRmNjhjOWYzLCAweDczYWE5MDAwLAorCTB4MWZhMGZjYjksIDB4ZWI1YWQ4MTMsIDB4MWJiMjY2YTcsIDB4ZGY0MDk3MWMsIDB4MjliZmMyNWQsIDB4YTA5NDRiODMsCisJMHg4NWViYWE5ZiwgMHg0ZWExNjZmOSwgMHg3MjZmM2EwMiwgMHg1ODJlM2NmOSwgMHhhZjlkN2RjZiwgMHg2ODYyY2I0ZiwKKwkweDcwNWIwNDI3LCAweDkzMDdhMDFkLCAweDllNmY0MWJiLCAweDc5Nzc2Mzg4LCAweDM3OGYwNjRiLCAweDg5NzgwY2MzLAorCTB4NWM0OGVmOTgsIDB4MzJjY2EzYWIsIDB4Y2MzM2ZjZjQsIDB4ZmY3ZmE5NjcsIDB4YWUzZTA2YjgsIDB4OGE2YmZiMDQsCisJMHhhMGE3ZmYxOCwgMHhmYmIwNjVlZSwgMHgzN2MwMDM1YSwgMHgxNTNkOGMwNSwgMHg0Y2ZjMTJiMCwgMHg1YjcwNGVjMCwKKwkweDdiNjU0OWMwLCAweDk2ZTU0ZGMwLCAweDFkZWQ0MjgwLCAweDVmODI3MjgxLCAweDBlMDg3ODA4LCAweGRjYThlYTA1LAorCTB4ZmQ1MmYwMTYsIDB4YzEwMzQwZjYsIDB4NTQ3YzA0YWYsIDB4YTYyYzA4ZWUsIDB4OWY4MGI1ZjIsIDB4NTYwNjc3ZGEsCisJMHg0MGYzZmMxMywgMHhjMGNlY2E5MCwgMHgyMzdmYWE3YSwgMHg5YmYwNGFkMCwgMHhkZjgyNzY4MSwgMHhkY2E4ODQwYSwKKwkweGU1NDFkODE1LCAweGI1Mjc0MGVlLCAweDIyZWMwZGVmLCAweDk4NDBlZGY4LCAweDMwZTA3MGUwLCAweDVkMDIwN2MxLAorCTB4N2MwYzFmMDQsIDB4NDBhMWYwNDAsIDB4MDM4Nzk1MzcsIDB4MGQxZTU0M2QsIDB4ZjFmYjUyZjQsIDB4MDc4MjA1YzAsCisJMHg1NzZiNGJjZSwgMHgyZTU3NjEzMywgMHhkMmMwNzQxMiwgMHgyZjc5M2RiOCwgMHg4NWY2NTIzZiwgMHhiYjQ2MmQ4ZSwKKwkweDQzYTA5MTc3LCAweDg3OTgzNTQzLCAweGNjODY3NzQwLCAweDJlY2Q2ZGMyLCAweDEzYTA2YTNjLCAweDcxYzlkMTM3LAorCTB4OTZhZjJmYjQsIDB4NDA3MGQwNGUsIDB4MzM1NjBkN2EsIDB4NWE5YmQyMzcsIDB4YzllOTU0YjYsIDB4OTBhZTBjZmUsCisJMHhiYjczMmY0MiwgMHgzMzZmZWI4OCwgMHhiNTM3ZjU1MywgMHg4NTI4M2UzNywgMHgwNzliOWVkMCwgMHhmODExYjI3NiwKKwkweDlmNjEyM2U2LCAweGU1YzcxNDdjLCAweGMxYmYzOWY1LCAweGEzNWY3NjhkLCAweDY2YzBhZjE0LCAweGIyNzdmZTAxLAorCTB4OGMyZmUwM2IsIDB4NWVkNzdmYTQsIDB4OWZiNDU2ZDMsIDB4YzIzNWY1ZDQsIDB4ZTcxODNhMzgsIDB4NWEyZWVjYmYsCisJMHg2YzNiMjM1NywgMHhiZDQwZjVjMCwgMHg3MmZjMGY0NywgMHhlMmRiZTZjNiwgMHgyZmJlYmEwMiwgMHgyMjM0MTc1YiwKKwkweDg1NDI1OTEzLCAweDhjYzY0NGRlLCAweDQ4ZjNkZjc2LCAweGY3ZmNlN2U3LCAweDE3YzFjMjFjLCAweDljNDI5NTU5LAorCTB4Nzg1MzdhZTcsIDB4N2YzMGFkZjgsIDB4YjJiZDExZWYsIDB4NWUzNDM5Y2QsIDB4MDBjZWI3OTYsIDB4ZjY5OTdkZTEsCisJMHhhMDc3M2ZiNywgMHgxN2Y3NWYxZCwgMHhlMWNmMGZiZCwgMHgyMWIxMjE4NCwgMHhlOWRkNzQwNCwgMHgzYWNmODg5MiwKKwkweGQ5NGQzYTVkLCAweDAyZmRmNzY2LCAweGEyNmRmOWQ3LCAweGEwMWQ0ZWZmLCAweDU2ZWJkYmYyLCAweGI2MTJiMmJjLAorCTB4MjBhMmI4ZDQsIDB4ZjA1NWVkMTksIDB4NWY2ODBjMGYsIDB4MDM0ZTYxY2YsIDB4OTg5Yjg3Y2EsIDB4ZWExYzVkZTcsCisJMHhmODIzZTY2NiwgMHg1MmE0MTY1NiwgMHhlMTc2ZjliNiwgMHgyMTYzNmViZSwgMHhhNjE1N2Q4MiwgMHg4YWZiNTg5YywKKwkweDM4M2JkNzVlLCAweDc1MmM3MGQ4LCAweGRkOTBmMjlhLCAweGZiYzcwMDc3LCAweGViNDNkMTM2LCAweDdhNjkzMTNhLAorCTB4NWQ0YmVlMjEsIDB4NDljMzM5OTcsIDB4ZGViMzY2ZmQsIDB4ZGY3ZDcwMTcsIDB4NTNmYWZiZWUsIDB4OWQzMDZmMjksCisJMHg2MWY0ODhmYywgMHgzZmIwNjk4MSwgMHgzNzc5YzIzMywgMHgzOGUwZWYwMywgMHgyMTRiMGZjZCwgMHgzZTk1NzNhNCwKKwkweGE3NGNjMTFhLCAweDdhODUxZmYxLCAweDgwNWU5MjI5LCAweDRiN2ZkMDRlLCAweDkzOTljZGViLCAweDRkZDJmNDQ4LAorCTB4M2U5MjZmZjIsIDB4ZmE3YjA0NjgsIDB4Mjg1NDJlODQsIDB4OGM0ZTg5ZTksIDB4NTE3M2FjMTIsIDB4ZWU0OWQwMWEsCisJMHhjMGYwZjRkMCwgMHhlNDIzMjg3YSwgMHgxN2Q5ZDAyMCwgMHhmZTlmZGUzOCwgMHhlMjM3MWFlMSwgMHg5M2RiZjk2ZCwKKwkweDY2Yjc4ODljLCAweGQwMDc5YzFkLCAweDllYThmMDczLCAweDQ0MjYwNGVjLCAweGQyZGFmZWJiLCAweGIyMDdmOTEwLAorCTB4YzUyOWNjYTIsIDB4NzE3MmUzNzMsIDB4N2VhZDllYmYsIDB4NGRkYzg2M2QsIDB4NzRmNGU1YzgsIDB4MGJhODZlYzIsCisJMHhlZjljYjhkMSwgMHgyZTdkNzZkNSwgMHgyZTdkNDczZiwgMHgxNWE2ZGYzZiwgMHhjM2Q1MmQ5ZiwgMHhmODFjNGZmYSwKKwkweDhkMmNlOGRjLCAweDNmZDU4ZmIxLCAweDgyM2YyODc5LCAweDNhZWY5N2FlLCAweDdlODNjZDNkLCAweGI5MmVlYjE3LAorCTB4YmVhMDcxMzEsIDB4ZDJhYmNjNTAsIDB4ZTg5OGRlOTEsIDB4NWM4OTZhZGIsIDB4Yzc1ZDNmNTcsIDB4YTc1ZDIyZTcsCisJMHgxMWU3NWQwMCwgMHg3NjhhN2Y1ZCwgMHgzMzkzNmNmOSwgMHhiYjI4NTZmOSwgMHgyODYxMzUwMSwgMHhjOTVhMmY3ZCwKKwkweDE0YzA1YzdmLCAweDJmMzIxNzJhLCAweDBjODA4Yjk1LCAweGMxYmQ4ZTkwLCAweGY3ODg4ZDI3LCAweGQ1Mjc1OGZiLAorCTB4Nzc3ZTUwM2YsIDB4YmRmNWQyM2EsIDB4ZDlmOTFmM2EsIDB4ZDUxNzU5NGIsIDB4YjViZDY3MmYsIDB4YWYzN2I0NzgsCisJMHgxZGFlZjM1ZiwgMHhlYjUzN2Q1NiwgMHg0NDkxNTM5MywgMHg3ZmNkMGM2ZiwgMHhkYjM5Y2IxNywgMHg0ZTgzNGZhNSwKKwkweDVjZWM5M2UyLCAweGU0Yjc0N2MwLCAweGU2MTMyMjdmLCAweGQ1Njc3ZGJmLCAweDNmNTA1OTEzLCAweDg1Y2ZjZjViLAorCTB4YTJlN2UzMWQsIDB4N2RlODkxY2EsIDB4ZTAxNDVmMDMsIDB4NzhhNmRmZjMsIDB4YTRmYTVmNjgsIDB4MzQ1ZjBkM2EsCisJMHgxMjNjY2UzZSwgMHhjZmJiZDM4YywgMHg4YWU2ZGExNCwgMHhmYmYyOTNlMCwgMHhmMjg1OTBmZiwgMHgxM2JkZWU0YywKKwkweGRiZjk3YmNmLCAweGVmM2M1NGE2LCAweGZiZDcxOGZiLCAweGFmOGQ0NzkyLCAweDExOWVmYWE4LCAweGUyY2ZkZmJkLAorCTB4ODVmN2VjMTUsIDB4YjIyZmVmYTAsIDB4MTdmN2QxMTksIDB4NjU4YTM4MTIsIDB4Y2IyODc2MDMsIDB4ZjJjYmQ5ZjEsCisJMHg3MmY2ZjQwNiwgMHg4OGQxY2VkZCwgMHg5NWViZDAyNywgMHg3ZGY3MGU3OCwgMHhkNjMyZDlkYywgMHg5NDIwZmE4NSwKKwkweGUxODg3NjgzLCAweGVjZDI5MzM1LCAweDc2MTdlOGQyLCAweDhkODUwMTI5LCAweDdmM2UyMTlmLCAweDE5OGVlMzhhLAorCTB4ZmNhOTJlYmMsIDB4ZWVkMTlmZDAsIDB4ZDA1OTE5MzAsIDB4Y2U3YzQ2NWMsIDB4Njc3ZjIyMjYsIDB4OWFiZjg5MWEsCisJMHgzODc5YjUxMSwgMHhiN2U5ZDc4ZiwgMHg4NGZmMWUwYywgMHhlZmUxZWY1OCwgMHg4NDFkM2ZiOCwgMHhjNTJjYmNmZCwKKwkweDJmZWI4NzlhLCAweDNjYzBmYzUzLCAweDE5ZDI0NzI0LCAweDJlNDc3M2NkLCAweDNlNzU2M2U3LCAweGEwNzZlOTY2LAorCTB4YzEzNDdlOWQsIDB4OGY5ZTNiNzcsIDB4ZmQ1MjQ3MWEsIDB4Y2ZhZWMzYzgsIDB4NjY3Y2YxZjIsIDB4ZTU1MDZjNTcsCisJMHhhZWM3OGQzMywgMHg4NGU5NzJlMywgMHhmODQ0MTljMSwgMHgwMTRiOTU0NCwgMHg2ZjJmZDYwOSwgMHhhN2ZmMjg2ZiwKKwkweDM3MWQ3MDBmLCAweDhjNjEyZDk4LCAweGMzNGFiMDc3LCAweDM1ZmY3ZWQ5LCAweGRmMWY0MDc3LCAweGNhZTNlYWEwLAorCTB4MWE4ZWY4YTgsIDB4MDE4YTYxZjcsIDB4M2VjYzU3ZDcsIDB4ZjE0MWYxNTIsIDB4MGU0ZTU1MWQsIDB4YjFiMGJmZDIsCisJMHg4ODlmYzQyZSwgMHg3OWM3ZjU5NywgMHhjZTNmYjlmZSwgMHg4ZDc5YzNhMywgMHhlNjMyOGU0MiwgMHhmODIzN2I3NywKKwkweGFlMDBkNmQ0LCAweDMwN2ZjNjhiLCAweGZmOGQ3Y2IzLCAweGQ5YzBkNTYwLCAweGZmYTZiYjdlLCAweDRkNGVkNTg4LAorCTB4ZDZlODJiYmIsIDB4NTdhZGU3YjQsIDB4NmI0MTcwMzQsIDB4NTE3ZmE2YjksIDB4MTcwMzQ3YmIsIDB4ZmQzNGVhODcsCisJMHg2YWYwZWQ0NywgMHgwNmNlZDJlMCwgMHhiYjMxZmY0ZCwgMHhiMWY2OWE3YywgMHhmNjlhYzVlMSwgMHgxYWZkODc3MSwKKwkweDZhZDc0Mjc4LCAweDNlNmJmZjRkLCAweDI3ZGE2YTA4LCAweGI0ZDdhZjc1LCAweGFhZDNkYjVmLCAweGI2ZjcyNzgxLAorCTB4Yjk0ZmZhNmIsIDB4NTdiNGQyMTAsIDB4YjRkNWJmYjEsIDB4ZDc1Zjk4ZDcsIDB4ZjFjNjJmYzAsIDB4ZWI1NGU3NzgsCisJMHg5YjllNjgzZiwgMHg4MWFmZGY2ZSwgMHhmMWU3ODg1ZiwgMHgyM2NlMTk5YSwgMHhmOWM1ZTdkYSwgMHgyNzhiNmYwNiwKKwkweDNlZTU5ODdlLCAweGZmZGY2OWE5LCAweDhkY2RjOGM4LCAweDQ3YTEyZmMwLCAweGI2N2ZlNDc0LCAweGM1M2Q3MWQ1LAorCTB4MWQzOWFhMWEsIDB4ZDdiZWYxYzQsIDB4ZTY2YTFmMmIsIDB4YmFmN2QxY2IsIDB4N2E5ZDhlOTAsIDB4NzVmMjI2NmIsCisJMHgwMzljZjk3ZSwgMHhkMGFjNzY0MCwgMHhjNTFhYTJiMywgMHhjOWVlYmI5ZCwgMHhmNDhlNTgwMywgMHg2YzhkNWViZSwKKwkweGYyNzBkMjUzLCAweDdkYTM5NjAwLCAweDE5MDM1NzVmLCAweGNhNzE2NTMzLCAweGY5OTY1ODNiLCAweDcwZDhkNmM3LAorCTB4YmNlN2FiODksIDB4ZTBjNGU1ODMsIDB4YjM5NDFhOGEsIDB4YjE3ZTI2NjAsIDB4M2U3ZGQ2MDgsIDB4ODQ2ZDkyMzgsCisJMHhhYTY1MjU3NSwgMHhkMTBmNWU3MSwgMHgxZDBjYWFlZCwgMHhkYmFhZjlmMSwgMHg0YjM3MTQyYywgMHhhMzIyZDZiZiwKKwkweGU4MWNkZjNlLCAweGVjMTA3OTFhLCAweGQzYTdmNGRjLCAweDY5ZGM2MmQ3LCAweGExZjlkODNkLCAweGMwMTdiMDIyLAorCTB4NTlmMmM3ZWUsIDB4ZTA0M2ViYjAsIDB4YmIwNDZkMWMsIDB4NjA0ZGNiMWYsIDB4NzNmZDYzZjcsIDB4OWMyM2Y3NjAsCisJMHg3YWQ5NzRmZSwgMHhjOWQ1NmU3YywgMHg2MTcyZWE3YiwgMHhjYTBmMTFmYywgMHhkNzUzMzQ1NiwgMHgwZTJiNzUzOSwKKwkweDBmZWM3YWMwLCAweDRiMjhhZDFhLCAweGUyNjdhZThjLCAweGVjOGViMDljLCAweDBhOGViMDY1LCAweDUxMDc4YjQyLAorCTB4MzA1MmVjZmQsIDB4MWMzOTMyMWMsIDB4MmJlY2ZkMDcsIDB4MWRiODFhNzQsIDB4MmViMDQ1ZmYsIDB4OTdjZjhiNTgsCisJMHhhZWRlZTkzZSwgMHhiNmY5ZjYzMCwgMHg4YTE5MzdiMywgMHg1ZDc5OWY2MSwgMHgwMTRkNmRiNywgMHhlNjc5OTczOCwKKwkweGYxZDNiZTAyLCAweDkzZmM2MDJjLCAweDA5Y2Q4Zjc5LCAweDk3ODYwYzk2LCAweDQ4ZmY3YTE0LCAweDJjZWU0OTcyLAorCTB4MTZiNTNlNDYsIDB4ZWI4MTk0N2QsIDB4ODVmZDUwZGEsIDB4M2NlMmIzYTIsIDB4MDgzOWNjOGYsIDB4Nzg3ZTdlZWIsCisJMHgyM2U3NThiYywgMHhhZmYyYWE3MywgMHg3OWNmNWM2NiwgMHhlZjUwZWY5NCwgMHg0NzIxOGNlZiwgMHhmZmU4NTNmZSwKKwkweDJmNWM3OTkzLCAweGU1MTU5ZmMzLCAweDA4OTM4ZDkzLCAweDk0OWQ4MWIzLCAweGYzNzZmMjBjLCAweGQxYTdkNWE0LAorCTB4NDFhZDkwYTcsIDB4YmIyM2U1MDksIDB4MTQ0ZmNmMDgsIDB4NzgyM2M4MjgsIDB4MWU0NGZjNGEsIDB4NTM3OTQ3YjIsCisJMHhlNzMzZTQ1NCwgMHgxZjM2NzhjMSwgMHhmMTkxNGVkOCwgMHg3ODVhYzViMSwgMHgxOWU3OWMzMywgMHgwYzdhYzBjMywKKwkweDMyODJlOTc3LCAweDkyZjBjMWVjLCAweDllNjA1MTU3LCAweDVmYjA3OThlLCAweGI1MWIzNzgwLCAweDhlOTE2NWZlLAorCTB4OWY3MTdkOTEsIDB4Mzc4YmVlYmEsIDB4ZGRhNzY4MjksIDB4ZjBmNWM3OTcsIDB4ZWNiYjgwOTYsIDB4N2ZmYTAzMTMsCisJMHg0MDI3ZDk0YSwgMHhmZDhiOTk0NywgMHhhYmU0MGY5MiwgMHgwNGFiZDFhZCwgMHhkMmUxOWZhMSwgMHgyMjM3ZWZkZiwKKwkweDNhYzVkZjYxLCAweGZkNjM5ZjUxLCAweDI3YmIwODlhLCAweGI4NmI4YzQ3LCAweDE5YmMyN2E0LCAweDZhNGFiZDlhLAorCTB4YmQwNmZjYzQsIDB4NjE4Y2VmZTQsIDB4YzllNjk1NzcsIDB4NDY2NmI5ZmMsIDB4MWU3Nzg2ZWQsIDB4NWYzMDljOTYsCisJMHhiYTQ4NjM2NiwgMHg0YmYxYzY4NywgMHhjMmRiZDQwYSwgMHhiMWFiM2ViYywgMHhmMDA4NWE1MywgMHgzYTRlNzkxZCwKKwkweGFjOWM3NTA3LCAweDA4ZmViMGM1LCAweGEwZTVkOTNjLCAweGVkZTc4NTY0LCAweGM0MjUwNjhmLCAweDU1ZWFkZDgzLAorCTB4ZGFlMjIyNTgsIDB4NTJiZGZjNGIsIDB4ZjU3ZGI0ZjAsIDB4ODY0ZmIyYzQsIDB4OGFiZGJhZTEsIDB4YTU5YmU3MTcsCisJMHhjYWRmOWJmMiwgMHgyYjFmM2Q3MCwgMHhiZDQyYTliZiwgMHhjMzNkMWJmNiwgMHg5YzZmOGNmYiwgMHg4YzVhNzI0YSwKKwkweGE5YTVhODdkLCAweDk3M2NjZjViLCAweDcyOTI2N2YxLCAweDllOTNmMTFlLCAweDJjZTJkZGJjLCAweGYxN2RmZTAwLAorCTB4ZDZjMzRiMzYsIDB4NDc3Njc0MTgsIDB4NzViM2E3MWUsIDB4ZTJkZWFhOTksIDB4NzNkNzQ5ZWIsIDB4ZWFmYWE5M2MsCisJMHgxZmE3MmIxYiwgMHg0Y2FkNmU1NSwgMHhjZTNhYjBlMSwgMHgyNGYxZWNjYSwgMHg4ZjVhODYzNywgMHhmOThlM2RhZCwKKwkweDE5YmJkNjIyLCAweGZkZTJiMWU2LCAweGFjMmI3N2NjLCAweDIxZjAzNzg4LCAweGNjOWYzNGJjLCAweGU3ZDZlOWU1LAorCTB4NDYzN2U0ZGQsIDB4M2UyMGNmZDMsIDB4NWM5YmQxMDAsIDB4MWRkOTc0ODYsIDB4MzFiYTA2NmEsIDB4NjgyYTMzY2QsCisJMHg1YmZlZGEyZiwgMHgyNDcyODQ4YiwgMHgyODRhYjU5MywgMHhiNWQ5NmQ0NywgMHhlN2Q0NjU4NywgMHgxYmQ4YWZiMiwKKwkweDEyYmU4ZWMzLCAweGE5ZTdhODNmLCAweGNmODMyNWRhLCAweDJhYmJmOWNmLCAweDBjMGQ0M2IyLCAweGU1YzliNmU5LAorCTB4YTlmOWUxYjQsIDB4NjQ3NGRhNzQsIDB4ZTIyZmFhNzgsIDB4M2EwYmQ3M2MsIDB4N2FhZDY3MmUsIDB4ZDYwYWQzZTQsCisJMHhlYjI1NjU0OSwgMHhkNjNhZjJhMiwgMHg1OTg3YTU0YiwgMHg5OWFiMmM2NSwgMHhmMzJkNjU0MiwgMHhmOThkMzk1MiwKKwkweGFkNjNhY2E5LCAweDlkNjRjZTU0LCAweDJlYjNkNjU0LCAweGEzYmZjMTJhLCAweGU0YWNjYmQyLCAweDc2MDhkZTg3LAorCTB4OTk3Mzk2MGMsIDB4OTg1YmNhOTcsIDB4NDgyZGNhOWYsIDB4ZmVmMDEzZGYsIDB4ZGJlMDk1YTEsIDB4YmI5NTI3NTksCisJMHg0NTlkZmY4MCwgMHg1MzMxMWYxOCwgMHgzOWU0MTdiOSwgMHgzYzgzNmY5NiwgMHhmMjBjMzJjNywgMHhmOGMyNjlkYywKKwkweDgzY2E5Yjg4LCAweDQzY2E4NTAxLCAweDBmMmE3MjgxLCAweGVmZDQzYzA3LCAweGNhOGVhMDY4LCAweDk1MmYwMWUzLAorCTB4NTQwZDAyMjcsIDB4ZDQ3YzA1NzYsIDB4MzE2MDU0ZWYsIDB4ZmMwNWVmOTUsIDB4NTgxZmJlNTQsIDB4ODEwN2U1NGQsCisJMHgxMmZmOTUyMCwgMHg5MTY1NGY1OCwgMHhlMjBhZTQxMSwgMHgxNjNkZGRkYiwgMHg4ZjljOWFmZCwgMHhlODI3MWU4ZCwKKwkweDg0ZjM0ZmEzLCAweGZkZDFlYmZmLCAweDc4ZjFlMmY3LCAweDgzYmEzYThlLCAweDk0YWVkNWIxLCAweDZlNmQxZTkwLAorCTB4ZTUwNDI3OWQsIDB4NzQ5Mzc3NDYsIDB4NGVlYjk0MzcsIDB4NjRkNjNiNzAsIDB4ZDkzYjI0NGIsIDB4NzI0YWJlZDYsCisJMHhhNGJiYjhjMiwgMHg5YzAyN2Q2ZSwgMHgwZmJjZGVlZCwgMHg0ZjQxOThlNywgMHg2YjY1ZWQ1NCwgMHg3Zjg0MTQxMywKKwkweGU4MTlhNGZmLCAweGRmYzFhYjcwLCAweDdmZGExNWJiLCAweGNlYmZkMmY1LCAweGFlY2U4MzMxLCAweGM3ZjUzYzQ4LAorCTB4ZWQ0YzM4ZDcsIDB4NjZiMjBlOTMsIDB4ZjIwN2MwMmIsIDB4MjY5OTNmNGUsIDB4MTBhMDc1ZjEsIDB4YzdkMmZlM2UsCisJMHhlM2U0ZDY3MywgMHg3OTFjYjkzYSwgMHgzNjhlMDVkNSwgMHg1YjBmMTlmYSwgMHhkYjE4Y2ZjOCwgMHgwZWFjNjY3ZSwKKwkweDJkYWI0OWUwLCAweDQ3MWZlODY1LCAweGY1YjhhM2Y0LCAweGRiYTJmZDUwLCAweDU2M2FlN2Q1LCAweDFlMjMzN2E0LAorCTB4ZWUwYTdkZDYsIDB4NjVlNTEzODksIDB4Y2Y4YzU4ZjcsIDB4YmJhYjhlNDUsIDB4ZmU5OWY5YmEsIDB4ZjY0N2YzMzIsCisJMHg1ZTMzMmU5MywgMHg1NGU3OTE1MSwgMHg3NDAzZmZkZSwgMHg4NmRmNGQxZSwgMHhhZWJmMWY0YiwgMHgzNTk4ZjhhMywKKwkweGY2ZmFmNTE1LCAweDdhNzcyZTE0LCAweGRiNDNlM2IzLCAweDUzZGJkZDYwLCAweDlmMjFiYzA1LCAweDYxMGViNWY2LAorCTB4OGRiYWQ3ZDgsIDB4NmZjNzY0YjksIDB4MWQzNmYzOGYsIDB4ZDFiZmY2YzEsIDB4NjlhMGRiMjksIDB4NjM2ZmJjN2IsCisJMHgxNGY5YzEzMSwgMHhlYTk3NTlhZiwgMHhjYTVlYTM3NywgMHhiMWZhZTA0OSwgMHg5YzQ4ZjFjZCwgMHhmZmZmODIzMywKKwkweGU2ZWVlNDIyLCAweGFkYWViZWNhLCAweGQ3YWQ0ZmU4LCAweDZlNzgwMmIxLCAweDFiMDVmYWRiLCAweDRiY2UzMGRjLAorCTB4MDIyZWMwOWIsIDB4YzJmMjc5MzgsIDB4OWVkMDA1MGQsIDB4NTEzNzQxYmIsIDB4YWUxZTY0MmYsIDB4MGI0ZGE1ZTMsCisJMHhlMTI4ZDk1ZiwgMHgwYjUzMjNiOCwgMHgyMTNjZGM2MSwgMHg3NTg2NzMzZiwgMHg3NDA5NWQ4ZiwgMHhjNmQ0NjZkZSwKKwkweDYzZjVmYTE1LCAweDg1OTdlNzNlLCAweGQwMTljYzMwLCAweDVlMjIzOWJmLCAweDFhYzBkNWIxLCAweDQxNjZmNTIyLAorCTB4MzViNzk3M2UsIDB4NGMzNGJjNDUsIDB4ZDMzY2YxZTEsIDB4ZTNkMGY4ODgsIDB4MTFhYWZmYjAsIDB4YmU5M2ZlM2MsCisJMHg5ZmYxNGNkNiwgMHg5ZTdmYzc3NCwgMHhlOWVkMGU5YywgMHg0ZDA1M2ExZCwgMHg3NGI2ZDk1YSwgMHg5ZWZkMDE4ZCwKKwkweGYyMjc1OGRiLCAweDNmODk1NmUzLCAweDc2ZTZjYzFmLCAweGI5MmMxODMyLCAweDFlZmMyMjczLCAweGYyY2EzN2IwLAorCTB4ZjZhN2UyMjMsIDB4NzE4NGEwODYsIDB4NGIxMWFhOGMsIDB4YTczNzhjMjUsIDB4MzA5M2VlM2IsIDB4ZTBkZTkxZmUsCisJMHhlODg5N2M5MywgMHhmZGE5ZjkyNywgMHgyYjlmMjJhZSwgMHg2ZjY3ZDYxZiwgMHhmNzM1ZTc4NCwgMHgzYzBjYmViMSwKKwkweDgxYjc5ODU3LCAweDU2NjQwOWYyLCAweGVjZGYzOTE2LCAweDI3ODc4ZTIyLCAweGI0M2QyMDY0LCAweDY5MWFkN2RmLAorCTB4OWFmOGQxNWQsIDB4OTkxZWFlZTUsIDB4MWNlMDdjM2YsIDB4Y2NiZmRiYTMsIDB4ZmRiOGU3ZTcsIDB4ZjkwMjk4NzEsCisJMHgxZjhmMTI2MCwgMHg5MzM5Nzg5YywgMHg2ZGQ5ZTVlYywgMHgyM2Y0MWVmMSwgMHhiMjM5M2M0ZiwgMHgyYWE3ZTA5NiwKKwkweDllZmY2ODNjLCAweDFhNjJiOTc4LCAweDlhOWZiMzk2LCAweDQ4NGVmZDQ5LCAweDA1YzYzMGVjLCAweGJiNzUzZjY2LAorCTB4NzkzOWY1OGMsIDB4ZWYxYzJlYjAsIDB4NzFlODkxYjQsIDB4ODlmNzUzZjYsIDB4YzVhOTFmZTcsIDB4ZjA1ZDcyZjYsCisJMHgyZTlmZDBlZiwgMHgwMTJkN2U2ZiwgMHg4OTE1MDVlMywgMHg3OTYxNjQ2ZiwgMHg2YWJkZDc0MiwgMHg4MzdmY2MzZiwKKwkweGQ1MWFmZDk1LCAweGRhNDM3N2I1LCAweDNmYzFkNGRmLCAweDZiOTkzY2U2LCAweDM3OGM3OGMwLCAweGYzY2U5NzNmLAorCTB4ZjAzMWU2MjYsIDB4ZjkyZjA3N2MsIDB4YmEzYjk1YjcsIDB4OGU4YjAxZGUsIDB4NWJkOWQ3NWQsIDB4OWViYWQ3ODMsCisJMHg1ODgzZDY1ZCwgMHgzNDE1ODc1NiwgMHg2MWVkNTlhMywgMHhhNzJjNDFlZiwgMHhkMTZiZjk3NSwgMHhhMGZiYTliYywKKwkweGRkOTYyMGY1LCAweGM0NWU3ZDIzLCAweGVkZmZhYmZmLCAweDA1NWUzNzk2LCAweGFiNjNjNDc4LCAweGU2ODc2OGFjLAorCTB4NjMzZGRlM2YsIDB4MGQyZmM1MWIsIDB4NjBhMWY5MGMsIDB4OGY1NWJmOTIsIDB4YTZmNjZjMDQsIDB4ZjY3ODdjYTIsCisJMHhmYTg3NTkxOSwgMHg4ZDZhZTRkZCwgMHg0Zjc0ZDg0MywgMHg0Y2UzMGVhZSwgMHgxNzVhNTNkYiwgMHhlMjBiYmVkMywKKwkweDI4ZjFlMjE5LCAweDhiYTQyMWU4LCAweDJhNmYxNDgyLCAweDI1ZjAxM2YyLCAweDgyOWRjMzlkLCAweDdlMjk0ZDNlLAorCTB4OGJkNjBhNmIsIDB4N2VmZThlN2IsIDB4ZDg1ZTFjZjEsIDB4NGUzNWFmZGYsIDB4YTU1Mjc5YTIsIDB4MDhjZGM0YTAsCisJMHg0MmVjMjNiNCwgMHg3ZjMzYjc5ZiwgMHg5NmMzZTIwNiwgMHhmMThhZGZlOCwgMHhjZTJhODJhZCwgMHhkMzkxMmNmZiwKKwkweDk5NmY3NjA1LCAweDEwNTA4ZjQ4LCAweDNmZDViZDNlLCAweGU2YzFjZjBiLCAweGUwMWJjZmViLCAweGIwNmEwNzc0LAorCTB4MjVjOTNlZGYsIDB4MzY3ZmVlOTgsIDB4MzkwNjFjNGIsIDB4M2ZjMmViNDMsIDB4NWJhNGU3OGMsIDB4NTFjZWM5ZDIsCisJMHg4MDZiNmZkNywgMHgwZWVjMjJmMSwgMHg5NjhkYzdkYywgMHhiYTU0ZTc4MSwgMHhmNWY2MjBkYiwgMHhlNjBiMjg4NCwKKwkweGY1ZDRmMWYzLCAweDdhZTdjYzZlLCAweGQ0ZWRkNjFkLCAweDYyZjQ3YWUxLCAweDVkMGZiMDNkLCAweGZhMjI3YWM0LAorCTB4ZDdmYWZlZDEsIDB4ZDIzYjE0Y2QsIDB4ODk3ZTYzMDUsIDB4NDcyOWNjOTcsIDB4Y2VhMTdmZWUsIDB4ZDcxYTM3MTMsCisJMHg2MTVmZDZmZiwgMHhlNTA5Mjk1YywgMHg2N2YzYWMwOCwgMHg5MTk5MjdmYiwgMHhmMWY3YTM0ZiwgMHhmYjg4YmU0MiwKKwkweGZlOGNiZDgwLCAweGU3MWY0Y2MzLCAweGJmNDZlNmRmLCAweDBkOTRmZTg0LCAweDQzYmZkYzYxLCAweGQ0NWM2MGY2LAorCTB4MGM5MjY5NjYsIDB4MzliNWZiMTEsIDB4ZDk5ZTllYjgsIDB4NzI4ZmRmZTgsIDB4ODI3OTY2NjUsIDB4OGIzZGY0ODIsCisJMHg3MmI1YWU3NSwgMHgwZjk4M2VmZSwgMHhmZDYyMmJlYiwgMHg3MTM2MTY3ZiwgMHhmZTdjNGVjMCwgMHhlMjRlZjc5OSwKKwkweDY3NTgzYTkxLCAweGNmZWEzMTU1LCAweGJjYTVlZWM3LCAweGNjOGZjZDg5LCAweGNmZWI4YzNjLCAweDNmYjkzZjc0LAorCTB4N2VmNDA2MTUsIDB4M2U3ZGNlMmQsIDB4Nzc2NTZmOGYsIDB4ODdiYzlhYzgsIDB4YzlhY2JmMmMsIDB4YWM1OGM4OGIsCisJMHhkMDdhMDc2ZCwgMHhkOTVkMmFjMCwgMHhhODI5ZDVhNSwgMHgyNTA5NzQ2ZiwgMHg5ZGEwNjczMywgMHhmOTIzYTQ5MiwKKwkweDlhNGE3MjBlLCAweDhkMWVkMzFiLCAweDdmODEyYmEyLCAweGNkZGU3Y2Y1LCAweGIzNzNhN2NmLCAweGIwMzlmODU5LAorCTB4NzM3Y2M1NWUsIDB4N2FhY2Q4YTIsIDB4MzM2ZjMwNGUsIDB4ZDAzMjc5YjAsIDB4M2VhZDczN2QsIDB4OGYxZmExMjQsCisJMHhiMjMyZjFmZCwgMHgyNmY3MGQ5NywgMHhhZGE3M2UwZSwgMHgxOWNjZTcwNiwgMHhkNDFmYTcyOCwgMHgyYWFmMjk1OSwKKwkweDY3YTBhZjBhLCAweDk0ZmM5OWZlLCAweDFkYThkMzA3LCAweGM1MzM2NWVhLCAweGFiZDYyMzNkLCAweGNmNmIwNThmLAorCTB4M2JmZDRhZTMsIDB4MGNjZTc4NTgsIDB4NGNmYWUwZDcsIDB4YTg5OWRjYzcsIDB4MzI5NzMzNjcsIDB4ZjZlOGZmM2EsCisJMHhlN2I1NDdhMiwgMHg3OGVmN2U0YSwgMHg1MGIxYTM4YywgMHhlNzljMDdmOCwgMHg1YWY2Yzc0YywgMHhjZmEzZWZiNCwKKwkweDljYmJhNTU1LCAweGMyZjViMTYxLCAweDJmNWMwNTIzLCAweGE3MjgyNGU0LCAweDkwYWVjOGVhLCAweDY2ZjA0ZWM5LAorCTB4ZmQyM2MzY2IsIDB4YjlmMmVmYTQsIDB4NTdlNTMwMWYsIDB4ZWM0M2QyMTYsIDB4MWYwODczNjMsIDB4M2Y1ZGMyNTUsCisJMHhhODczODYyOSwgMHhmYmExZDNlZSwgMHg3ZTNkZGVjMiwgMHg1MDk5ZTllMCwgMHg3YmY1ZmQ0ZSwgMHhkZmEwYzc0ZCwKKwkweGUzMmNlZmQ0LCAweGViMzc3ZWIwLCAweGEwODE4MTllLCAweGY5MDM2MWUwLCAweDdjYmU2YjhkLCAweDQ0MDMxNWE1LAorCTB4NDE0YzhkY2QsIDB4ZTNjZWFiYmQsIDB4NmVmYWUwMjgsIDB4MjVlNDIxOGYsIDB4YjMyYzVhZjksIDB4ZDkwNzI0NmQsCisJMHhmNDExNGJjNSwgMHhlODllOTAwMiwgMHg2ZjMxYjc4NywgMHg5MWY5MmI2MywgMHg4NjEyZmNiNiwgMHhhY2NkM2M3OSwKKwkweDk3ZDIwZWYzLCAweGUzMGM4ZDY3LCAweDM4MzYzN2FmLCAweGZmYjA1NTBkLCAweDg2OWQxYjFiLCAweDIxOWY3OGY5LAorCTB4MjNiNDNhYjMsIDB4YTg1MDZhNmUsIDB4ODU0NmE2ZmUsIDB4ZmQ3OTliZDcsIDB4ZDUwZjA2ZGMsIDB4ZjBmNDZkY2YsCisJMHg1YmQ0MGI3YSwgMHhkNDI5MGYzMCwgMHg2ZjcxODAxNSwgMHg3NTNhYTRiNiwgMHhlOGQwMWY3OCwgMHg0YzE3ZWRlNSwKKwkweGZjMWM3ZWQ0LCAweDhjMjdjYzAxLCAweGJjOTEwYjhmLCAweGYxZDFlZDZmLCAweDdjN2YyMzdiLCAweDlhYjU4MjQ4LAorCTB4M2IwZWNiMTIsIDB4ZThmNzdmMTEsIDB4Y2MxNzUwMTQsIDB4MmIzMzJkOTQsIDB4NzgzNmNmYzAsIDB4N2Y2ODdhNDMsCisJMHgxMDMyODU4ZSwgMHgzNjE3YmI5MSwgMHg3ZWExMGI3OSwgMHhlMmI2NDNiNywgMHg3YjgzNzZmZSwgMHhjMTQ3Zjk4YiwKKwkweDlkZTEzMmE1LCAweGJkZGUwMGZlLCAweDNhZjc0MWQ4LCAweDNlZmM0NTViLCAweGYxNGNjNGI4LCAweDI4NzViMDY2LAorCTB4NjQ5NmNjZGUsIDB4Yjc4NjNiMGEsIDB4ODZiMDJjNzcsIDB4MzkwMzFlZDAsIDB4N2JkOGU3NDgsIDB4MDA3NjRjOGYsCisJMHg2ZWEzYzNjOCwgMHhlNjc2OGJiNCwgMHhjYTlmMTgyYiwgMHhiN2U1YWE1YywgMHhhYTBiODVmNCwgMHg2NjQ2YmM2OCwKKwkweGJlYmQzZjQ1LCAweGJjZDc4ZjkxLCAweGExZDIxNzUzLCAweDcxYjk2NTVkLCAweGYzNDFkMjI2LCAweDNmYTBhNjBlLAorCTB4NTNjMmVjZmIsIDB4ZWUxMGMzYjUsIDB4M2YyZTE0NTAsIDB4NzlhMTcyYjQsIDB4OWM0NzUzZTEsIDB4Y2ViZjFmYjgsCisJMHg3OWZkNDA1YSwgMHg1ZmQ5YWYxYywgMHgwZDJmNWRiZCwgMHhiNzlkMzNmMCwgMHgwYzdlNDA3MywgMHg2MWNhMzc5NiwKKwkweDVlNjMyNzFjLCAweGMxZjE4MmI1LCAweGM2MjdkODc0LCAweGJjOGMzYmYzLCAweDRjYTc3ODNlLCAweDBiZTkyZGY3LAorCTB4ZjQ3NWIwZTUsIDB4MGI2NzdmMDAsIDB4MWYyM2E2MTQsIDB4ZDE3YzkxMjYsIDB4OWRjOGQ3ZjAsIDB4YzE3OWY4NWEsCisJMHgzMmVmYzBhNywgMHg5ZGI4MmJlZSwgMHhkMTY3M2U1MSwgMHg5MDNmNmQ3NiwgMHg1Nzk0M2E5MywgMHhmYWRhZWRkOSwKKwkweGUzZmE4YjViLCAweDQ0M2MxYTAyLCAweGU3ZTZkOWUzLCAweDlmN2EyZjcyLCAweGM3MGFmYjAzLCAweDc0YmVkMTE1LAorCTB4ZDcyODVmN2MsIDB4NzJkOGJlYTAsIDB4MWI4YmVhODAsIDB4NDRlOWM1NjUsIDB4MGE3OWQ3NzksIDB4NTNiNDVmZjcsCisJMHhlYjgwNjE2NiwgMHg0NGNkOTYxNywgMHhhNGRmYWE3YSwgMHhmNWM4ZjBhMywgMHhjMmU0OGJhYywgMHhjNmFkZjY5NSwKKwkweDE5ZjdhMjNiLCAweGYyZWZiZmJkLCAweGE4OGU1Y2Y1LCAweDY2MTNlMGY2LCAweDFlZGIwN2IyLCAweDllZjBlOGI2LAorCTB4NzhhZGVjMTUsIDB4NTVkYzJiOGMsIDB4NDAyYzFkNTQsIDB4MWRjODQwN2IsIDB4OTczZDI1YzMsIDB4YTIxNmNkMjcsCisJMHg1MWVkODM1MywgMHhhMWZjNjQ3NywgMHgxM2Y1NTQ2NSwgMHhkODZmZDQwNSwgMHg2ZTNjNzU4ZCwgMHg5NjhlZmI0MSwKKwkweGUzMTczZjYzLCAweGU2ZDZlYTRkLCAweDEzZGI1ZGUzLCAweGE2M2Y5NTFmLCAweDcyOWJjN2NkLCAweDdmMmEzMzIxLAorCTB4N2YyYTJmMmMsIDB4N2RhNjk0NmMsIDB4NTQ1Yzc1YWEsIDB4NTFiNWQ4ZmUsIDB4MWEzNTYzZjksIDB4OTY3Yjk2NzgsCisJMHhjYWY1ZmZhNiwgMHg4NmY4MWE0ZCwgMHhmZDM0M2JmMiwgMHhkNmVlNzhlNywgMHg3NzU0ZGZiNCwgMHg2NmZkYTZiZiwKKwkweDdjMGQ0YWVmLCAweDZiNWZjMzZiLCAweDZiZTZkZmZhLCAweGIxZGZiNGQ2LCAweGY2OWEyN2Y4LCAweDJkNDlmZjY4LAorCTB4Zjk3MDE1NzcsIDB4M2ZlZWQ5YmUsIDB4ZDA2YzAxNDksIDB4M2RmNzkxZjcsIDB4MjhkZTk5NmEsIDB4N2I5ZTQ2ZjcsCisJMHhhN2I3MDI1MiwgMHhiOWZkZmJhMiwgMHg4YmZiZDM4MCwgMHgwNThmOWYxMiwgMHgxYzc4OWFlZCwgMHhmMTM1ZDhmMywKKwkweDg1NDU3MGJhLCAweDcxYzYxYmI5LCAweDIxZGY5NTFhLCAweDBlZTI2MmRkLCAweDZiYjZiZmJmLCAweDNmZjZkOWVlLAorCTB4YmM2MGZkMGUsIDB4MWI1Y2M0YTYsIDB4ZmY4YzNiZWEsIDB4MzdiOTQwZmEsIDB4NWY3NDc0ODcsIDB4NGFiZjViNjEsCisJMHg2OWI4M2QyMiwgMHg1Y2FiOGYxNSwgMHhhZjNjNTIzMCwgMHg4ZWFjMWQ3ZiwgMHhkYzQ2ZmJjNiwgMHhlY2ViYTk2YiwKKwkweDJkYTQ3MTEwLCAweDg1NDI0NzE4LCAweGZkNDE5OWU0LCAweDdlZjFjNjU2LCAweGUzNTc0ZDNmLCAweDM3MWEzZThlLAorCTB4YTQxOGRjYTMsIDB4N2U4NWJjZmMsIDB4Y2RjMGUzMDksIDB4N2JjNTY2M2UsIDB4MDJjYjc0OTMsIDB4MDY5YmZmOWEsCisJMHgyNjVkOTkyNSwgMHhiMDE2ZGEyZSwgMHg2N2NjMGYzMywgMHg2MzVjMTU1ZiwgMHg1MjdkYmQ4NCwgMHhiM2Q0ZjdkMCwKKwkweGNmZGRiY2YwLCAweDViZDMxZTI4LCAweDE4NTNlZGYwLCAweGUxNDNlOThmLCAweDIxOWQ3NDA4LCAweGY3M2YzYzczLAorCTB4NWZjZmVlYzAsIDB4ZTZkYWY5ODEsIDB4NWNhMTk3YTUsIDB4NWFjZjZlOGQsIDB4NDNlYmY3YmUsIDB4NmU3ZjY5OTcsCisJMHhkZTFmNWJkOSwgMHgxZmU3Yjk3YiwgMHgyNWJhNzVkOCwgMHgzOGM4N2RhMiwgMHhmMzI2NDM2OSwgMHhlMDAxZDA0NCwKKwkweDgwZmRlNjJjLCAweGY5ZjVjODVjLCAweGM1MjMwYWYyLCAweGZjMDFhZWIxLCAweGJmYmUwMjE1LCAweDg5Y2ZmOGFhLAorCTB4M2ZiOWUwM2IsIDB4NDRlZWZiMzksIDB4NjVlYTFkM2IsIDB4ODQ3ZTg3YWMsIDB4OWZlNTNmZDcsIDB4OWM5MmZjYTMsCisJMHhhM2RmNjA1MSwgMHg5YjE3MWRmZCwgMHg3MjE1Yzc2ZSwgMHg4ZDZkOTViYSwgMHg2YTA3MThiZCwgMHhkMTNhMzQ0YSwKKwkweGJiMzJjZmNmLCAweDA3MTkzZWNhLCAweDdlZTA2ZDc0LCAweGZlZmZiNDc1LCAweGRkYmZiZjVjLCAweDkxNzdmZTQ5LAorCTB4OTQ0YjI3MTgsIDB4OWU3ZjJiN2EsIDB4NGU0YzgzOTksIDB4MzExNGY3MTcsIDB4NmE0ZmExZjAsIDB4NjU1ZTUwOTcsCisJMHg4ZDNmOTQyZSwgMHg4OWZkOGJlNCwgMHhhNDIzOGE0NiwgMHhjMWRjNDQ1YiwgMHgxNzEzNThiMiwgMHhmYjA2ZTM1MCwKKwkweDkwOTVlZjEzLCAweDRiYzNkM2VlLCAweGYxOGY5ZTI4LCAweDVjNmYxYzAyLCAweDExZDY5M2ExLCAweDMyYzgyZjFkLAorCTB4ODZiYWQzZTcsIDB4ZDdmNTlmMWUsIDB4ZTYzMTQ4MjcsIDB4MWE4NzVhODksIDB4Mjc5ZTg4OWYsIDB4ZWEwNGY2ODQsCisJMHg2NGYxNjU5OSwgMHg3YmVmNDQ0ZiwgMHg3OTU1NjE0OSwgMHhkN2U0NzBlMSwgMHg1MWQzOTNkZSwgMHg5MDMyOWY3ZSwKKwkweDVlOGExYzNlLCAweDE0M2NjZjMwLCAweDQyYjRmZTMxLCAweGZlNjNkZmVlLCAweGU2M2Q2NDc4LCAweGUzMjI4Nzg3LAorCTB4ZWY0MWNjZDksIDB4MmEwYzEwMmIsIDB4N2JiMTg0NjYsIDB4NzdjZTExNDMsIDB4YzI3N2NmOTQsIDB4MWVjOWQ4YTAsCisJMHhmZTg3YjUwNCwgMHhkNzIxN2Q1ZiwgMHg5NzMwZDMwMywgMHgxOWYyMzg2ZCwgMHg4MWRiY2JmNywgMHgxMmRjYjFhZiwKKwkweGQ2N2Q5MmIwLCAweGYwODdmYzAxLCAweDk1MjcwMTBiLCAweGNhOWI4MGExLCAweGRhODUwMTZkLCAweDA5Y2EwN2I3LAorCTB4MjFlMDI1N2UsIDB4OGVhMDQ3NzgsIDB4NWUwMmQ3Y2EsIDB4NjgxOWRmYWEsIDB4MDFlN2Y4MjAsIDB4ODE5ZDk1MWYsCisJMHg0NmZmNTRjNSwgMHg5YmYwNGZjMCwgMHhiZjA0ZDU4MSwgMHgwMTYwZjY4NSwgMHg1M2Q3YTljNiwgMHg0YWQwM2JiOSwKKwkweGVkMDM3YmVkLCAweDA4MWRiZjA0LCAweGVjMGUxOTUxLCAweDgxMDNmYWEwLCAweDA2MGY4MjRlLCAweDI4N2MxMTc2LAorCTB4NzBmODI2MTAsIDB4NDc5NTMwZTAsIDB4N2Y1NDVkMDMsIDB4YzEwMWYwM2MsIDB4YzkzZWUzMzcsIDB4MTVkZjU4YWUsCisJMHg0Zjg1NzhjMCwgMHhmNzdkYTI3NiwgMHgxNWExNmZhYywgMHg3Y2ZiNmJlZCwgMHg3OWM1MTU5ZCwgMHgwNGI3NGZiYiwKKwkweDhkMWQxY2UzLCAweGVmMTMxZWZjLCAweDA0MGUzMTIzLCAweGVkMDg2ODc2LCAweDY3ZmNmYjM5LCAweGY2YTU0YzhlLAorCTB4MTliZWQ0YjksIDB4YzRhNzA0ODcsIDB4YWZkYjgyYjYsIDB4ZmE5MTk5NmMsIDB4MGEyMTMwZDksIDB4ZGE1OGViOWUsCisJMHhkYzAzZDIxOCwgMHhlZDRmMTg1YSwgMHhmOTMyMTViNiwgMHhmY2U5Y2Y2ZCwgMHhlZWRjODUyOSwgMHgzMzZkZjkyMiwKKwkweGE1NDFmYjcwLCAweDVjODUzNTgzLCAweGU0MjlhZWRlLCAweDE2MWY1Y2Y3LCAweGNhNGE3M2YxLCAweDllNDdhZDhiLAorCTB4YTZlZDU0MmQsIDB4N2Y3MTg3ZjUsIDB4M2ZiMDc5ZjYsIDB4NTViY2VmNWMsIDB4YjU5N2JjNjYsIDB4NzJiM2EzZGQsCisJMHhjYmRmOTM3YiwgMHhiOGJmNjAzYSwgMHhjNTBmNTg3ZSwgMHg2ZTdjZDk4NSwgMHhhZGU2ZGIyZiwgMHhlNjM5NzVhNSwKKwkweGQ2ZWQ0OGRmLCAweGQwNTM0N2EyLCAweGFmZjc2ZjRmLCAweDZkZWI0MzlhLCAweGQ5YWUyOTk0LCAweDgyOTAzYmVlLAorCTB4ODljZjZjZjcsIDB4ZjBkYjI3N2MsIDB4NjRhODZmNzgsIDB4OGQ5ZTdhZjAsIDB4ZTMwNzdmNWEsIDB4ZWMwMzgzN2UsCisJMHhlYzYzZDdhNSwgMHg0OTZlZDMwMywgMHhjNzExMzBjZiwgMHgzMzFjZDQ3YiwgMHhlODI5ZDc4ZSwgMHhmZTcxMjFkNywKKwkweGM0Y2EwZjYzLCAweGIwMzAyZjdmLCAweDJkYjllMGZiLCAweDUxMDVkZjYwLCAweGI2YmY1NDBlLCAweGJkNTVlMzAyLAorCTB4Mjg5ZGJlODUsIDB4OGU3NzlmMzcsIDB4OWMwMzIwM2YsIDB4Y2ZjN2M3NWEsIDB4ODJiZjI1NWQsIDB4Zjc5YzM0NzYsCisJMHhiZjUwMmRlNywgMHg1ZTRkYmVlMSwgMHg0ZGIwZWE1YywgMHg2ZWM4MzVjZSwgMHhjYWRmZjNlZCwgMHg0Mzk3ZjhjMCwKKwkweDVhOGY5ZWQyLCAweGY5ZjYyZGJlLCAweGI3OGY4NzgyLCAweGYxNGM5NTY1LCAweDM3OGFkYjY0LCAweGJjZjkwNzVkLAorCTB4MzNmZjkxYmIsIDB4YzM4YTNlOGIsIDB4NWNkZTRjMzAsIDB4ODY0NTBlYTcsIDB4MzVmYzllNjMsIDB4ZmY3NzE3Y2UsCisJMHhjZDQyM2FhNiwgMHhkZjNhOGYyNiwgMHg2YWVmOWM1OCwgMHhiMWUyMzRmMSwgMHhjNjJmOWI1YSwgMHgyNzkyODZiYSwKKwkweGJmMjM5MjU3LCAweDgxZWYxNDI5LCAweDk0MmNiMTY0LCAweGI4MTljZjIzLCAweGU0OWUwYWRjLCAweDA1MjUyNGY2LAorCTB4OGYzYzFhNGQsIDB4ZTZhMDJmOWEsIDB4MGJlNzQ0MGYsIDB4MjllMDVlZmMsIDB4ZGU2MmM0Y2IsIDB4NGZkNjdlZTcsCisJMHhkNzNhNDFiZiwgMHhiZDFiM2MxNywgMHg5MmUzNjc5NCwgMHgzNTg3NDkzMSwgMHg3YTEyZDgxOSwgMHhkZTJhYTdlZiwKKwkweDNkMDYyNmJhLCAweDI4NTNlNWE4LCAweDFmYzEwMGM3LCAweDJlNzEzMjE2LCAweDM4ZjhlYTliLCAweDY0Y2UzZTNhLAorCTB4MmFlMDgyYjYsIDB4NDMxODM1OGIsIDB4MzNlNWFiNWUsIDB4MmI3ZjljNjIsIDB4NzU5Yjc0ZTQsIDB4ODcwZGNlZGYsCisJMHgxYThmN2NmMCwgMHg4YjZhMzcyOCwgMHhmZDAxYjQyZSwgMHgzZDA5ZTA4NCwgMHg3ZDRjZDdjOSwgMHgyMjU3ZDZlNywKKwkweDQxMTdmNWQ2LCAweGExOGM1YjlmLCAweDZlODdiYzYyLCAweDUwNGFmMTg3LCAweDk0YmYyMmFlLCAweGQ1ODJmYzUwLAorCTB4N2Q1ZGUwNDcsIDB4MWQ4NDNmZWUsIDB4NzVjNWZjZjAsIDB4M2NmZjc0MjksIDB4ZGExYzZkNmYsIDB4NGNjY2VkNDcsCisJMHhmODMzNjBmNCwgMHhkMDQ2YzY1MywgMHgzMmU5MGQ4MywgMHg4YjM4N2QwNiwgMHhmYzBlMzQ4YywgMHhlMjI2YWE1OSwKKwkweGNiZDcwY2JkLCAweDYwOTcyODM1LCAweDI2MTZmYmRkLCAweDk5YWMzZTkxLCAweDMxYWNkZWZmLCAweGM5ZjY1NzAwLAorCTB4NjViMmNmOTQsIDB4OWNkM2NmMjksIDB4Y2EzYWVmZjQsIDB4MzFmYjc5MTMsIDB4Zjc1ZGY3ZWUsIDB4OWZiZDJkNTAsCisJMHg2N2NhMjE5NCwgMHhiMjgzY2ZkMSwgMHhjMjUzM2Q3MiwgMHgwYjk1MmU3MCwgMHg5OWJmMTQyZCwgMHgxMzNlNDE3YywKKwkweDQ4NTFhN2U5LCAweDE3ZmEzYzdhLCAweDZkNzM1ZTNjLCAweDBmNzlhY2FmLCAweGI2OGY1MjZkLCAweDhmNTQ2MDNmLAorCTB4Yjc0NjQ2NzYsIDB4ZWYzZWRlYjYsIDB4NjE1M2QzY2QsIDB4ZmNhNWY2OWUsIDB4YmY4YmY2ZTEsIDB4NzA3MDgyM2IsCisJMHgyNGUyOGU5NSwgMHg1MDY0ZmJlYSwgMHg0ZGYxNDE5MywgMHhmOTgxOTgzOSwgMHg4Y2NjMWI5YiwgMHhiZTZkYjllNCwKKwkweDYwZjI4YWQ5LCAweGM5M2M3YTdmLCAweDJjZGJmNmJmLCAweGNiYWU4NzY0LCAweDNiNDM4YTZmLCAweDU1NmYzNGQ5LAorCTB4OGMyMzk2MGEsIDB4M2IxOGFkYzEsIDB4MmRkNWU2YmQsIDB4OTEyN2Q5MzcsIDB4NTVmMzU1YmMsIDB4ZWMxY2FjODIsCisJMHhkYzhkYmI4MSwgMHhmNzNlMDljOCwgMHhlNTE5NTRmNCwgMHg5OTY3Y2YyNSwgMHhhNzk2ZWFmNCwgMHhhZGQ4Zjk4MywKKwkweGQ0ZTFkNjk1LCAweGY5YmU0Y2IxLCAweGJhNzZmODdlLCAweGJlYjg5NmI3LCAweDFkYTExYTcwLCAweDdjYTM3OWUwLAorCTB4N2I0MTE1ZDcsIDB4M2Y3MDVhNDYsIDB4OWNiNjZkMzYsIDB4NmI3Y2E0NjksIDB4Zjk4MjMyNGMsIDB4Y2NmZDBiMGQsCisJMHg2NThkZjU4OCwgMHg1NzNlNDhlNiwgMHhmMmZiZTRmOSwgMHg4N2M2M2M3ZiwgMHgwZTU5NWY4NywgMHgyYmRjNjk1YywKKwkweDNlNDE3YmYxLCAweGZjYTE5YmU3LCAweGYyMTBkMzY5LCAweDFmOGZmNTU0LCAweDhiZmNlMDI5LCAweGY1N2E0YjZjLAorCTB4N2RhNjMxOGMsIDB4Y2UyMmFiZjUsIDB4OWU0NmU1NjcsIDB4NjFiYjMyYTcsIDB4YzNkZDFkNWEsIDB4Y2M2NWJiMDQsCisJMHhkYzUxN2JlNywgMHgyN2E3YjUwYiwgMHg3YjcxM2RkMiwgMHhiZGUzMGIyZSwgMHg4ZTgxNzA0MSwgMHhmOGQyN2JjNywKKwkweGI5OGRlZDdmLCAweDkzNmExZjE0LCAweDNjYzEyOWZjLCAweGI5ZjA5N2NjLCAweDAxZGFmY2YwLCAweDdmMzA4OTQ3LAorCTB4ZWI5NzBlNWIsIDB4ZTJiN2U0MmMsIDB4YjM4YzM1N2QsIDB4ZTBmZDcyMzgsIDB4NzRiNTA1ZWYsIDB4YTYxZWM4Y2MsCisJMHg3ODllODVmOCwgMHg4ODhjNjljZiwgMHgxYzVjNjNiNywgMHhjZmQxMTdlMywgMHhjMmQ1ZWU0ZCwgMHhlMTY4MmU1MywKKwkweGMwZDA2NjJhLCAweDNjMmQ2NjM1LCAweDM3ODVhYWQ1LCAweDdkM2I3MTE1LCAweDNmNWI1ZGJhLCAweDFkODVhOWMzLAorCTB4NzRlMzA3ZDksIDB4YzJkZmNmM2MsIDB4ZjA0OWUyMjIsIDB4NDQ3ZTVlZjcsIDB4NjhkZDY4MWMsIDB4NzY1ZjNlZmUsCisJMHhjYjhhNTJmNywgMHg3OGYwZTViNiwgMHgzNjk1NjM4ZiwgMHg0MmM1OTFjZSwgMHg3MzJmZTIxMiwgMHhkNjNjNTQ2OSwKKwkweDg2M2Y2NmJkLCAweGEzMGJlZDk3LCAweDVlZmM0MWUzLCAweGE5YTFmMDAyLCAweDdjOGEzMTQ3LCAweDllNjhlYWYwLAorCTB4ZDIzZGRlODcsIDB4Y2UwOGJkYjcsIDB4NWYwYzYwYjMsIDB4NGQxZGFiYzcsIDB4ZGFjNTNmNzQsIDB4NWNhZjg4ZDMsCisJMHhiMDY5NWYyMiwgMHhlODhhN2NiZSwgMHhmOTBmMWQ0MCwgMHg3ZmIxMTgyMiwgMHhmODQ4ODdlNCwgMHgzN2JlNTFhMSwKKwkweDhiZTQxZTcwLCAweDJjZmVhNDYwLCAweGZiZDAzNmU5LCAweGExYmU2MmFiLCAweGNmZTU0M2Y4LCAweGEyOGY3MTcyLAorCTB4ODlmNGRkZTYsIDB4OWJiY2Q0YjEsIDB4NzA1ZjIyNTUsIDB4NGViZTU0NTcsIDB4MTkzNmEzOWYsIDB4YWViZWU3ZmQsCisJMHhmOGIxZjE5NSwgMHg2ODJlZjkxMCwgMHhlNTg4N2NlMiwgMHg4MzdmOTEwNiwgMHhlMjJjMTg3YywgMHhhNmY1ODg3YywKKwkweDYzNzg1NmVmLCAweDA1MGI4YmQ5LCAweDYzYmZkYzVkLCAweDIyNGY4NmM5LCAweDczYWNiN2Y2LCAweGJlNWUwNjg1LAorCTB4OTEwZGUxZWIsIDB4ZTNmNzUxZjksIDB4YmYwODMwM2YsIDB4ZWQ3ZTUxOWUsIDB4MmY5ZGIxNTIsIDB4MmJjYmZmNGYsCisJMHg0OGNkMGNjZCwgMHhjZjI4MDdkZiwgMHgzMTljMTU5NiwgMHg1ZWE3N2JmMiwgMHg0MmViOWUyMywgMHhjYzk5ZmY2MSwKKwkweDJmZDFmMmIzLCAweGYyZTIxMWRiLCAweDM3ODg5ZDZjLCAweDMzMTU1YjM0LCAweDNiOTk4MWM2LCAweDUwYzcxMzU1LAorCTB4NGI0ZDExZTMsIDB4ZDg1NGI2NWMsIDB4N2M3ZjcyNDcsIDB4N2NhNTZiYzEsIDB4MTRmOWUxZGMsIDB4ZjFhYTQ4ZGYsCisJMHgzMmM2Y2VkYywgMHg5YzY0NTNkNiwgMHhkZDYyMDY2YiwgMHhjMDU2YzE4ZSwgMHhkOTU3ZjllOSwgMHhjMGM3NDEzMywKKwkweGY4MTc0ZGJlLCAweGIwZmRjOTdiLCAweDhmMjQ2N2VjLCAweGVhNjhlNDJlLCAweGEzOWM0NGRiLCAweDBiMmRiZjlmLAorCTB4OGIzZTcwYWEsIDB4YjBmYjQ5ZGIsIDB4MWUxYWZmMzEsIDB4ZDFjNmQ0MTcsIDB4ZTczZGUyNGMsIDB4MzQzYmUzYzEsCisJMHg3ZTIyNmRmNSwgMHhiNWYxZTU3MiwgMHg4NWQzMzk3MSwgMHgyZmM2MjFiYywgMHgxYWRmMWE4YywgMHg3MTgxZmM3MywKKwkweGFiYmRmMWI1LCAweDcxNGYzN2I4LCAweDJlM2ExODRmLCAweGU5Y2RkMjM2LCAweGRmZGQ5ZDY5LCAweDgzMzE3MTg1LAorCTB4MDY2NjdmZTAsIDB4ZjI4ODk5M2EsIDB4ZTNlOWZmODAsIDB4YzFhZTdlNzksIDB4MTk4ZjhkYTEsIDB4ZmEwYmFmMzAsCisJMHg5OGI4OTczZiwgMHgzZWZhOGFlNCwgMHgwNTk5ZmRiNSwgMHgyN2NiY2ExMiwgMHhhNGU4ZmRmMCwgMHg1YTI0ZjJjMSwKKwkweGRlNDRkODhlLCAweDgxMWNiNDdjLCAweGQzNzAzNGY5LCAweDM2Y2Y1Y2MzLCAweGU1MGY4YTRiLCAweGZlN2VmNDczLAorCTB4NzU4N2YxN2YsIDB4YzhiYmUzODksIDB4Nzc4ZWNlYWUsIDB4MGY2MzJlOWEsIDB4NjM4MjA1YjcsIDB4ZjE3NWI5ZjEsCisJMHgwNzc4YzVmZSwgMHg5MThlZjc3ZSwgMHhlMzk0NGY2OSwgMHhmODhjZWI3YiwgMHgyOThlYzU2YywgMHhiNjBmMzE3MywKKwkweDEzZWJmMDRkLCAweGE3YTIzYTY5LCAweGI3ZDNkYmY0LCAweDI5ZTgyM2VhLCAweGExNzNlOGRkLCAweDEzYWU5YzNkLAorCTB4ODdmODVmZjksIDB4ZDIyN2I0NzEsIDB4MzE4YzZkYjcsIDB4YTlkNzZhYmYsIDB4ZDYwMWFkYjAsIDB4NmQ4ZTcxMTEsCisJMHg5ZmVlOWVjMiwgMHhhZGNjOGVlZiwgMHhkMjcxODhmYSwgMHgzNGIxYmU0ZCwgMHhhM2ZlN2Y1ZiwgMHg4N2U1YWY5OCwKKwkweGM0NTliN2NkLCAweDZjZjlkNGMzLCAweDY3Zjc2YTc3LCAweDdmNjlmYTMzLCAweGQ0ODdhMTM2LCAweGZlZTMzNmY5LAorCTB4MTVkNWYwNjIsIDB4NzVmZTEzZTcsIDB4Njk3NzdjZmYsIDB4ZjkzMzY3ZjcsIDB4ZjUzNjdmNjksIDB4N2NlYTFiM2IsCisJMHgzZTZjM2YyZCwgMHg3NmNmZTBiYiwgMHgzZDk3ZGVmMSwgMHg2NDM3N2Y5ZSwgMHg5YTIzZjdhOCwgMHhiZGNjZjNmYiwKKwkweGVkMmY5NDY2LCAweGU4NTBiYzZhLCAweGZhNTE3M2JiLCAweDNiZTg0OWFlLCAweDY5NzNmOWY1LCAweDNkZmYxNGI5LAorCTB4NzMyNmY4NzcsIDB4ZmE4NzNkMmMsIDB4OTMzYjA5OGQsIDB4MDk5MzNiMDksIDB4ZDllMTEzM2IsIDB4MGQ1N2E3MzUsCisJMHhiYmZjN2EwNywgMHg5NWNmMzcxZCwgMHhiZWNmYWY0MSwgMHgxY2Y4ZjRmZiwgMHhmMWQ5ZGY4MCwgMHhlODMyYjk4YiwKKwkweDllYWZkOWE5LCAweDFlMGIzMzdlLCAweGZiZGJmZTI5LCAweGU5ZjRmYzM4LCAweDViYjQwNzNlLCAweGFkY2NjZjgyLAorCTB4MTg2OTM4MDUsIDB4YmFlYWNmZDcsIDB4Yjk3Nzc5ZDUsIDB4N2NiOTVkYjksIDB4NmY4ZjFlNzUsIDB4M2Q0NTljODIsCisJMHg2N2UzOWNkNiwgMHhjYWZjN2YxOCwgMHgxZjM0OWJkMSwgMHhlZWNmMmZmYSwgMHgwMzEwNWY0ZCwgMHg3Y2I5NmEyZiwKKwkweDFlN2YyMTc1LCAweDk4ODljMGFkLCAweGFmNDhjNmNmLCAweGM3YmVhOGRkLCAweDhmN2RhNzUyLCAweDIzNjkyOTI1LAorCTB4MmM3MTg3ZDksIDB4OTYzOTQ1NjQsIDB4ZmJkMGY2NjAsIDB4NzMxNmQ3OTcsIDB4NTMzMzcwYmQsIDB4ZTE1ZmI4MWEsCisJMHgxYzc5MTAyYywgMHg0ZGNiZGVmNCwgMHg2YjVjNjJlNSwgMHhmZGIxMmZlNSwgMHgwOWU3OWQ2NiwgMHg3OWZmNzdmNCwKKwkweDY4ZTFiY2QyLCAweDczNzlhYjNlLCAweDNiZGUwNmEzLCAweGRlN2RmZWRkLCAweGIxZmQ5ZTRmLCAweDY0ZTU2ZGM0LAorCTB4MzY5OThmMWUsIDB4N2JkZmM5Y2EsIDB4YTIyYjg4OGIsIDB4M2UxNDNjNWQsIDB4ZmY3Mzc1M2YsIDB4MWU5ZjAwN2UsCisJMHgwZjU0Y2Y4ZSwgMHgzN2I1YTdjNywgMHhmZjljMGQ2OSwgMHhmNGRlOTRmMiwgMHhjMzRmODljNywgMHgwODM1ZjEzMSwKKwkweGZiZjg1MWFmLCAweDdlYTk5YjkzLCAweDg4ZWQxZWEwLCAweGM1NWJlMTJiLCAweGQ4NWY5YWFiLCAweGM4MGIzOTJjLAorCTB4OWExOTY3NWUsIDB4MTRjNjYwZmMsIDB4MWU3YmFjNjcsIDB4M2Q0OGNmYTQsIDB4MTk3YmI0NmIsIDB4MzQ4NmEzZGEsCisJMHhlZmY5OGRjNSwgMHhjN2QxN2ZjZCwgMHgxNTczZGJjYywgMHg1MjVlZjg4YiwgMHgzNjdkZTUzYywgMHgxZmM5MTkyNywKKwkweDkzMzQ5ZmRmLCAweGI2NTlmYzYxLCAweGQ0YmMyMzRjLCAweDNlNTFkNTI2LCAweGViMTg3ZWE2LCAweDNhMzU3ZjQ0LAorCTB4N2M5ZjVkMGYsIDB4ZTkwOWU1M2IsIDB4NDA2MWU4NmQsIDB4ZWNjNzlmZDksIDB4ZTk1ZjIzMzEsIDB4NWQ5MjU2M2YsCisJMHg5OTU3MDA0OCwgMHgyOTVmMmU4NywgMHgyNjc1M2QwZiwgMHgzMjRmNDNjZiwgMHhkODVlMzEzYSwgMHg5OThjNjg5ZSwKKwkweDliYWRmZTg3LCAweDcxZmI1ZGZiLCAweDFmYjg2OTdmLCAweDg4NmVmZjIzLCAweGU1NmM5N2Q4LCAweDlmNThlZWY3LAorCTB4YWI0NmY1MDAsIDB4NWRmYzUxOGYsIDB4NjE1YmZmZWMsIDB4NGRmZGE5MDcsIDB4Zjk0MzNmNTYsIDB4NGUyYTM3YTAsCisJMHhhOWY0NWZiNCwgMHg3N2UwN2Y1YywgMHhlMjMxZGM1YiwgMHgwZGJiNWYyOCwgMHhhM2ZkZmNmNCwgMHg5OWNmNWNhYywKKwkweGZiM2VkZGI5LCAweDI3ZGZiMTM3LCAweDQ0OTYyYjI4LCAweGRkMzYyNGJjLCAweDM3Mzc0NTBkLCAweDlkZGU3OGVhLAorCTB4MmQ3Mzk3Y2EsIDB4OWMwN2NhNDYsIDB4ZjdkM2IxNmIsIDB4MjEwMmU2NmMsIDB4ZjQ0NmE0ZjYsIDB4ZmU1NmVlYmYsCisJMHhkOGFjYjUzZSwgMHg3YjdlOWU5MSwgMHhmZTVmOTRlZCwgMHgwMGI1ZTE5NiwgMHg2NmE3ZGI5NywgMHhjMmJkZTgxOCwKKwkweDI4ZjMxMjUzLCAweDVkZjM4M2E5LCAweGE5OTRkZWJkLCAweGVhMWJjY2I4LCAweDc2NDVhZjRmLCAweGM4YzMxODJjLAorCTB4YzE3NTdhNGUsIDB4NGU5NWFkNDMsIDB4OGFlYThmZjIsIDB4NzM3ZDllOTEsIDB4NzcwZmEyYTYsIDB4NzdkOGMzNjMsCisJMHgwNGYyZmZiMSwgMHhmYmQ1Y2YyZSwgMHhmYzA5ZTVhNSwgMHg2NDZiZGU3ZCwgMHhmZmVjNmNkZiwgMHg0OTE3YzU1NSwKKwkweDcyNWY0OGQ1LCAweDJiYWUwZTZmLCAweDMzZGQzZmEyLCAweDViOWZmNDQ1LCAweGNmZmE4MTNjLCAweGY1ZGRhZmU2LAorCTB4Y2UzOTc3ZDIsIDB4YzhmOTlkYTUsIDB4ZWM3Y2U4YzcsIDB4ZjQyOWVjYjEsIDB4YmRlNDU4YjcsIDB4ZTgxZjkwODYsCisJMHhhM2Q2NDU3NywgMHhjZTIyYzViZiwgMHg2ZTUwNWE1MywgMHg0ZjIxOGVlYiwgMHgzZWMzMzJkNCwgMHhhMDQyZTQ2ZSwKKwkweGIxOGM4Y2Q3LCAweGNmZjVhYTU0LCAweGExNzVmNDdhLCAweDkwZmNlNzE4LCAweGVjMWZlNzM4LCAweDZhYzNiNGY3LAorCTB4M2RmODBlMjcsIDB4ODQzY2VmZTAsIDB4ZTE3MmY4ZjgsIDB4YjBmMWY0YTksIDB4YmY2YTA3YTUsIDB4NmVjN2JmMjYsCisJMHgxNmNlZmZlYywgMHhiMDAzNzFmOSwgMHgyZGIzYmVmNiwgMHhkZjhjNWJkMCwgMHg4Nzg4NjAxOSwgMHg4YmY5MTE4OSwKKwkweDI1ZjZiZjYyLCAweGVmZDA1MjZiLCAweDIwZjRiMzgxLCAweGJjMDQ3NmRkLCAweDAzMGQ2YjIzLCAweGU0MmNiZmNmLAorCTB4ZDIxNjBiMDgsIDB4MmViMTA2ZjMsIDB4MGNlYjVhNDcsIDB4MmMzOGJiOGMsIDB4NjA3M2NhM2EsIDB4Njc5MWFhY2MsCisJMHhhNjUzNmE3MywgMHhiYjBiYTFhNiwgMHgyNzE2Mjk5YywgMHhlNDVkZjdmYSwgMHhmYmUwNjQxNywgMHg3YzlmMTgwZCwKKwkweGY3ODYzNmU3LCAweDlkNjk1OTVmLCAweGZkNzVkYTEyLCAweGM2Zjc4OGYzLCAweGUxN2I4OTU3LCAweGVkMmQ1ZjNlLAorCTB4ZWZkNmMzMjcsIDB4NWZmMjMxOTcsIDB4NTA3MzgyZDMsIDB4YzMzZGY1NmUsIDB4OTJmMTk0NTcsIDB4YzY5MWRkYjYsCisJMHg1ZGVlMWZmMywgMHgwMjcyMWYxOCwgMHhlZDJkNjdiZCwgMHhiMDRmNGZjMiwgMHgzMGY4NzAwYywgMHhhOTcxOWZhNiwKKwkweDcyODJkNWQ5LCAweDE0MDk1N2U2LCAweGU3YjdkNjc3LCAweGZiYzgyMGIzLCAweDFiZmJlY2IwLCAweGY5Yzg3N2MyLAorCTB4NmM0ZjJlOTAsIDB4YjY1YjllMTYsIDB4YjllYzllMjgsIDB4MDY3NWE5NzYsIDB4ZThmNzMxZjksIDB4ZDE3OGFjNTgsCisJMHhhN2VlNjJjZSwgMHgyYjYyOGZmYywgMHg0ZmI1Y2ZiZiwgMHgxZjYzZjRlNCwgMHhiOGUxNzIzZiwgMHg3N2ZmZTdhYiwKKwkweDQ5Zjk5ZTg0LCAweDdmZGU5M2IyLCAweDRkYTNlZDUyLCAweDhlNDdmODQzLCAweDVmMjEzYTkxLCAweGY4MTE1ZTg0LAorCTB4MTk5ZjMzMzMsIDB4NzkyZjQ1ZjksIDB4Yzc3NGIwNzksIDB4OTZiZGFmNmIsIDB4NWI1M2U4Y2UsIDB4ODQxYjQ3NDgsCisJMHgxMzhlYTNmZCwgMHhjNmEyMWY5ZiwgMHhmMjQzYzU3OCwgMHhiODdhYjI1MiwgMHhlZGZhYjBiZSwgMHg3NWFmMzg0MSwKKwkweGNlNjNlOWRmLCAweGZiYTA4NWZmLCAweGQ5MGZkOTM1LCAweGQzYWQ3ZmIxLCAweGZhMzJjNmU3LCAweDljOTY5ODNkLAorCTB4M2U3OGRkN2IsIDB4ZTlmYjMzMmQsIDB4OTZiYWVjOTUsIDB4NjFkZmNlMzMsIDB4MjhmMDU2M2UsIDB4OWZkODM3Y2YsCisJMHhlZmMzNjg1ZCwgMHgxYjBlNTk0MSwgMHhlMjY1ZDM2NCwgMHgyN2QwNDZmMSwgMHgxOWQ4Y2JjZSwgMHhkZWFmOTE0NiwKKwkweDk5ZTc4MDcyLCAweGJhY2E1OGI2LCAweGM1YTFhZjMwLCAweDZhNDY1NjkyLCAweDU2ZjNjMmQ4LCAweGNiMTZmZWQ1LAorCTB4MTYwN2QyMjEsIDB4NWFkZmRmODUsIDB4Yjg0ODdmNTAsIDB4MDk0N2MwNGMsIDB4ZTExMGViYWUsIDB4NTA3N2VkNDMsCisJMHgxMjhiNWRjOCwgMHg1YTVlZjg2NiwgMHhmZDRhZDI5YywgMHg4M2Q3YjJjYywgMHgzNGU2Y2E3OSwgMHg2NjQ0Zjc0NiwKKwkweGUyMTdmMDJiLCAweGNjYzc1ZjM1LCAweGJlYzlmNDMxLCAweDVhNGZhZTYyLCAweGFhYmFjYTRhLCAweDdlMzI3ZDY5LAorCTB4ZDhiNThlYjksIDB4ZTdhNGVjY2IsIDB4N2NmMGVmMTEsIDB4Y2Y5Njg2NzMsIDB4NTc3ODEzYmYsIDB4ZjkxNjY5YzcsCisJMHg0ZWFlNzdiNCwgMHhjMzhlZDYwOSwgMHgxYmY3OTMzOCwgMHhjYjE2ZTdhNCwgMHhmNTEwNzMwMiwgMHhjYmY4ZTI1YSwKKwkweDM5MWE2NzhlLCAweGQ3ZmI3OGQ0LCAweDQzYmVmMThhLCAweDJjNGZhZTc5LCAweDA2NzhlMmIzLCAweDhkMTVmN2M2LAorCTB4OWM2MmUxZjcsIDB4N2JmYmQ1ZmYsIDB4NDdiZDJjYzAsIDB4NTgxZDMwNGQsIDB4N2RlYjFlZDgsIDB4MTNmM2ZlYWMsCisJMHhjZmQxZjJmNywgMHhiYzc5NjBmZCwgMHgwMjg3MWI1NiwgMHgwOTFlZWM3OSwgMHg3MjU2NWFmYiwgMHhkNTM1NTBlNiwKKwkweDBiZDNmOGYwLCAweGZkNTE5ZmMyLCAweGY2MzE3NDkyLCAweGJmN2YxMjBiLCAweDJiYzUyODNmLCAweGUxMGM1ZGY0LAorCTB4NjljN2E0YTcsIDB4M2VmMDMwZjEsIDB4NmY4NzNmMmQsIDB4ZGUxZTc4MWEsIDB4N2M0YzY5MzcsIDB4ZDdjYjRlODcsCisJMHgzOGZmMWNkZiwgMHgwNTlmOTM0NSwgMHg3MTMxZWM3YywgMHhkZTIzYzYzZiwgMHgzODg4ZjVhNywgMHg2ZjE4YzIxZCwKKwkweDA0OWQxN2EwLCAweDg5YzdmN2ZmLCAweGMzM2Y5YzFiLCAweDQwOTlhY2VmLCAweDVjNjBlYjhlLCAweGZhMjdlMWM5LAorCTB4NWRiYTM5MzYsIDB4ZTIzOWVmYzgsIDB4NzhkMTBmZmIsIDB4MmU0OGM5ZmUsIDB4N2E0N2E1YWYsIDB4NTFhZjc4NWMsCisJMHgxMTliZDY5YiwgMHg3YzVmZGY4YiwgMHhlZTA2NDJmOCwgMHhmZDE5YzVlNywgMHhkZjc0M2I3OSwgMHhlNzY5ZTJmNCwKKwkweGNiYzQwMmU2LCAweDZmZmJlZDExLCAweDQ3NGRmOGVhLCAweDIyZjhhN2NlLCAweGU1YzBhNWZkLCAweDNhNGIyZmRmLAorCTB4ZDkyNTcxYjMsIDB4ZGRiODBiOGQsIDB4N2RmYTdmZjgsIDB4NzNlNjE3YjMsIDB4YTQ5Nzc1M2IsIDB4MDg0ZmNmOTUsCisJMHhmYzE0MWNiOSwgMHhkMzIwYmI2MCwgMHgyYWVlNDNmNywgMHgzYTQwYWRmMiwgMHgwYmFjOTM2YSwgMHgzY2U3MmU1MCwKKwkweDlhZjJmM2NjLCAweGIzZDU1YjFlLCAweGI0N2YwNjI4LCAweGQ1ZmRmMjhjLCAweGJhYmYwOGM4LCAweGU0OTFiZDdjLAorCTB4MzcyNWIzNWUsIDB4MjhmNzcyZjksIDB4OWZiYjlmNDMsIDB4ZGU3YTk0ZTQsIDB4Nzk5ODhmNTUsIDB4ZGI4ZjhhYmUsCisJMHg3YmJlZTlkMSwgMHgzYTI2MGYyOSwgMHg3ZWE4NjUzZiwgMHg0NDlkMjNkNSwgMHgxMzdmNmEwZiwgMHhjNWYyOGY4ZSwKKwkweDE1YzUyMzcyLCAweDgxOGZhMWNlLCAweGI3MmIzYjcxLCAweDU5ZDdhMjMzLCAweGMwOThjODg5LCAweDdkMDY2M2YxLAorCTB4NDk2MDc0OTksIDB4MTA2YjhlMWMsIDB4NmEwYmRjZmUsIDB4Y2NhMWE0NWMsIDB4ZGU3ODg5ZWMsIDB4Yjk5OTViNzAsCisJMHg5YTRlODIzYSwgMHg4ZTBmY2YxOSwgMHgyMzM3ZmYxZSwgMHhhYzIyZmI1NSwgMHhhODBjNjNiMSwgMHg5NGM2MzE3ZiwKKwkweDk3ZWQ5ZjI2LCAweGYyNzg2NDNiLCAweDAzOTViNGZjLCAweDBlZTNjYzdjLCAweGM1YTNlNzQzLCAweDIzMmRiZTcxLAorCTB4ZjMwZGFjN2IsIDB4NWUwZWMwZDIsIDB4MDQ2MGIwZDMsIDB4ZjY0ZGI3ZTIsIDB4M2MwMzY4YmQsIDB4YTI2ODdlZjQsCisJMHgwYmRmZWEzYywgMHg3YzE2ZWQzZSwgMHgwNWY5ZDQzYSwgMHhkMjMwMDFkOSwgMHgxZDljN2IxOCwgMHg4MGUyOTdjNCwKKwkweDIzMjdjNjRlLCAweGViZTczNDVmLCAweGY2MzE0MmVhLCAweGYzZWM1Yzc5LCAweDc4NzhmNjMyLCAweGM3YjNmN2U0LAorCTB4MWFmZTg5MGYsIDB4NmRlZDFjN2IsIDB4NDZmZGQ0NGYsIDB4YjY3NjhjMjQsIDB4N2UzZDg2MjcsIDB4MDVmMTEyNDIsCisJMHhjMjc0Mjc5MSwgMHgwZGQ1ZGNlMCwgMHgzOTMxMzk3OCwgMHg1Njk3YmU5OSwgMHg1ZGVmYzA5MCwgMHg1MjdmYTA0ZSwKKwkweGFiYzg3ZTA2LCAweDdlZDFmM2E3LCAweDdmZjUyZDk5LCAweDQzZjg0OTE3LCAweDQ3ZjA2MDhjLCAweDYyZjkwNWZlLAorCTB4YjZiZmYzMGUsIDB4ZTIzZTIyNDgsIDB4MWI3ODM1ZjcsIDB4NzNlNTdlOWYsIDB4ZDE5MjM2ZGUsIDB4ZjljMDM2YmEsCisJMHhkYjQ2ZmRlMSwgMHg2MjMzZjljNSwgMHg4ZWE0NjdkZCwgMHg1MDM3ZmQ1MiwgMHgxM2VmMTE2NSwgMHg4ODlkM2MzMywKKwkweGY3NDFhY2ZiLCAweDcyZjc1MTc0LCAweDlmZDM2ZDc4LCAweGRjMWZhYzc3LCAweGVkNzI4NmZmLCAweDhiODZkOWJkLAorCTB4NWE2MjJlM2MsIDB4NGI4ZjQyYzIsIDB4NmRhYTk3OTgsIDB4MTBjZWE5YmYsIDB4YjlhODJmN2QsIDB4NmJkOWJiNGYsCisJMHg3ZDBmNWU4OCwgMHhkNjIxZDQxNywgMHgxZjcxZGQ5YiwgMHhjZDRmYmZkZCwgMHhhNjQ0ZjllNiwgMHgwNGUyOGM2NSwKKwkweGE2NmRmN2QxLCAweDNkMWU1ZGIxLCAweDhjMGRjZmRhLCAweDM4ZThmZGVjLCAweDUyYTllNjM5LCAweGIxODFiMGZjLAorCTB4NzllNTEyMmQsIDB4Nzk3M2RmNmIsIDB4ZmU3M2ZlYTYsIDB4M2FkNjk0N2QsIDB4NzYwZWM3OWMsIDB4ZDFkM2RhMTAsCisJMHhmN2E4NDllZiwgMHg1MWY3ZWE1YSwgMHhkZmFiM2M1NSwgMHg0ZGJmNGE4ZiwgMHhjMTYzZWI0NywgMHhjNmFlZDQyOSwKKwkweGI4N2JmMWZkLCAweGY5MTFlOTU1LCAweDdmNTgyYmU0LCAweDJiN2Y3YTdmLCAweDliZGY3YjE4LCAweGNmMjllYWRiLAorCTB4N2ZiYzczMjAsIDB4YjI5YTE4NmMsIDB4Yzg3ODQ2MTQsIDB4NmZjOGM4NWEsIDB4ZjI2ODNjMDAsIDB4ZGJkOTRjMDksCisJMHgxNmU3OWY2OSwgMHgyMjRjMzYzMywgMHgzM2RhNjgzYywgMHhmZGQzZDM0MCwgMHg3ZTZkNDJjMCwgMHgwMzUzZWMwMSwKKwkweDU3YWJmYjQ3LCAweGQ5NGQ1M2YyLCAweGYzOTU5N2Y5LCAweDlhNjM4YTU3LCAweDk0ZTRiZGM0LCAweDk3ZmJlMjUxLAorCTB4ZWQxNGFjYTUsIDB4OWVkYmY0YTIsIDB4MDczOGYzYTEsIDB4NWY3MTgxZTcsIDB4ZGQ2MjljNzQsIDB4ZjE4MjZlM2IsCisJMHg3N2ZjOGZkMSwgMHhlMmNkMmZjMSwgMHhhZWZkNWI2ZSwgMHhmNGM4ZjMwZiwgMHhjZTU0OWIxZSwgMHhmMzBkMmNkNywKKwkweDEyZTk3YmYyLCAweDhhNmU3YzQ2LCAweDhmY2M2NjY3LCAweDFlNGMyYTk3LCAweDA0YzliYmM0LCAweDMyNTk2YzMwLAorCTB4ZDQwNjczMzIsIDB4N2IzYzQ1ZWIsIDB4ODQ2NGM0OGQsIDB4ZjMzMTU1OTksIDB4NWRmYWEzZjgsIDB4NTc3ZDEwYTEsCisJMHhkNDc5YTg2OCwgMHgyMGIyMmJlZiwgMHg2NzlkNGU3ZiwgMHgyZWY1NzdkMCwgMHg3YmY5M2NmMywgMHg2YmU3ZThkNiwKKwkweGNlYTk5ZTI5LCAweDg3ZmUxNDNmLCAweGJmZGU4ZWZhLCAweDgxMzdiY2Q1LCAweDQ0MWQ1M2M3LCAweGY0MDM4ZGFmLAorCTB4NDE3Y2YwNGEsIDB4Y2EzY2Y4OGYsIDB4NjZkNWJiODUsIDB4ZmEyOTU3N2IsIDB4NGMxZTY3MGYsIDB4MTE0YTM2NTAsCisJMHhkMmNlMDhmYiwgMHg3ZTAzZWZmMywgMHhkN2ZhZjFiZiwgMHhiYzkyNzc2MSwgMHgxODk3ZGZlZiwgMHg4YmVlZmJlZiwKKwkweGRhZTQyMmZlLCAweDA5NTk3YzNhLCAweDE5MWE1ZWYzLCAweGZiYTQzMWU1LCAweDI5OTczZmFhLCAweGEwZjYwMGZmLAorCTB4ZGYxMTEzOTEsIDB4ZDZmMTgwNDksIDB4MWZlZmNlM2QsIDB4M2U3N2UzMzYsIDB4YzBlN2ZlZjAsIDB4MTNlZGZlNDAsCisJMHhkMWY3NmMxNiwgMHhiY2Q0MzY3NywgMHg1ZGEzY2M1YywgMHgzZWYwMzI1YiwgMHg4MzdkZjQ3MiwgMHg4OWM2MTFiZCwKKwkweDk5YjI2Zjk4LCAweDlmNDAxMzA1LCAweDA1MzFmNGE0LCAweGI5ZWNmM2JmLCAweDAzYTY1NDY4LCAweGEwN2Q2YzdlLAorCTB4OTNiZjAxNTAsIDB4YTVlZTg5OTksIDB4MzM3ZWFkMmEsIDB4MGFlMTBlZmYsIDB4ZWY2NzY5MTYsIDB4ZWZhNTZlOTcsCisJMHg2NGJmODZiZCwgMHgzZTE0YmY5NCwgMHhjM2VlODhjZiwgMHg3MGM0YzM5ZiwgMHhkZGY4ZmYyZSwgMHhjYmU0N2FmYiwKKwkweDdhNWQ3ZGE5LCAweGZiOTNmM2Q0LCAweGY2N2ZhNGZjLCAweGVkM2Q0ZmQ5LCAweDk5NjJlN2UyLCAweDc1MWY5MTExLAorCTB4Y2Y1NDViMWQsIDB4OTc5ZjhhZTksIDB4NWYyN2VhMmMsIDB4ZmRmODZhMzAsIDB4NDZhMzVlZGEsIDB4NWIxN2M4MWUsCisJMHg2NWZkNDZiZSwgMHg2N2FhODllYSwgMHhlM2UzM2ZkMywgMHgyZGRlMjhmOSwgMHg1M2VkYjVkYiwgMHhkYmQwM2U0NCwKKwkweGMzNWZkZjJhLCAweGJjNzNhMWFlLCAweGNmMzMxNjk4LCAweGQ1ZGNlMDZlLCAweDcxZTI2ZTczLCAweDc5YzdjNjc0LAorCTB4OWZmNzk0NmUsIDB4ZmY0MDRkNDYsIDB4ZTg3MTQ3YzAsIDB4ZDgyZmM0NjQsIDB4ZGQ5NTI5MTcsIDB4NTg3OThlY2MsCisJMHg4ZTk5NGNlNSwgMHhmM2IyYmQ3MiwgMHhlNDg3YTQxZCwgMHgzYzBmM2NiMywgMHg1ZmZkZmM3YSwgMHg3ZTg1OTViZSwKKwkweDlkYzk5ZWMzLCAweGVkMmY2ODU5LCAweDNkMTVmMmY5LCAweGQzZDU1NzhlLCAweDE5M2ViMGNiLCAweDU4YTQxZTRhLAorCTB4MTBhYTc4NGMsIDB4Y2Y1MDMzYjQsIDB4ZjU5MTQ0ZTMsIDB4ZTc0YTllYjQsIDB4Y2ZlNGU1NjUsIDB4ODcxYTRlNTAsCisJMHhkOTMzZGY2ZSwgMHg4N2U0YzJjMiwgMHgzZGEwMjY3NSwgMHhmZTdjN2NjNywgMHg1N2NhYjM2NCwgMHg3MDk3MmZlYywKKwkweDlmODE4NDVlLCAweDUyZWE1NGY2LCAweDdiOWY2MTZhLCAweDZjMTU5MTllLCAweDQ2ZjNkM2RjLCAweGU3YmZjZTAyLAorCTB4N2FjZDM5ZWMsIDB4ZjMyMmZlOTgsIDB4NWFmYmFjNDUsIDB4MmI1M2VlNzEsIDB4N2VmZWM5N2IsIDB4ZjkyYmFjNGEsCisJMHhhMWM1MmY2YywgMHgzMGRlOTU1MywgMHhjM2Q0ZGJlYSwgMHgzN2ZlZmE3YSwgMHhjOGJjZjBiMywgMHgzOGExNGM2MSwKKwkweGZjNWViYTlhLCAweGQ3M2UyYTZlLCAweDg4ZGU3MjgyLCAweDU2MzJiM2ZiLCAweDI4N2VlYzI4LCAweDU1ODMyYTMzLAorCTB4Y2M5YThmOTgsIDB4NmI0ODRhNzYsIDB4NDE3ZDJiNTMsIDB4YTVlNGU3YTQsIDB4YWQ5MzllOWMsIDB4YmYxOGMzZmUsCisJMHhhM2FmNWU0ZiwgMHg1OWYyNDUzOCwgMHhjYmY0MDZkZiwgMHgwNTY1Y2I5MiwgMHhmODRhZTRjOSwgMHhiN2YzMTBlYywKKwkweGY5ZDRmOThhLCAweGE4OGNmNWQ1LCAweDdlZTg0YmY0LCAweDYyZTNiMzI0LCAweDEzMmFhZWZlLCAweGNjNWFiZjhlLAorCTB4NTllYjE0ZWYsIDB4MmMzYmU4YzUsIDB4NTVhZDY3YzksIDB4ODMyNzJmZTgsIDB4MzNkZjQxOWQsIDB4OWE3OWUyYjgsCisJMHhiNzQ1ZjMzNSwgMHg5OWQ5NGYyNywgMHhiMWUwZTc0NSwgMHhlMzBhZDkxZSwgMHgzNjViNjRhNSwgMHhjZWI5NDE1NCwKKwkweDMyZmYyM2ExLCAweDNjNTE4N2E5LCAweDlkMjdhOTNkLCAweDRmNTI3ZGU0LCAweDhhMjcyOGExLCAweDBmNDI2OWZhLAorCTB4ZDQ5MzM5NzAsIDB4YWYyZDUwZjMsIDB4YTRkMmExNmYsIDB4M2Y4NzE3Y2EsIDB4ZGE5OGZiOGMsIDB4NzE3Y2I4Y2IsCisJMHg5OGJlNDk3OCwgMHg1MTdjYjhkMiwgMHg5NTU2YjhlOSwgMHgzMjVhY2MyYiwgMHgwZmY3ZWExZiwgMHgwNmI1YWNmZiwKKwkweDczZjc3YjllLCAweGJiZTVmZWZlLCAweGJjYmU1Y2Q5LCAweGZiZjcyNWZiLCAweGQzYmY2OTRkLCAweDQyYWE1Y2EzLAorCTB4NGRmYTA1YzMsIDB4MzNlZGMwYmIsIDB4YmFhYjFmOTUsIDB4NDgxMTM2MjUsIDB4ZTc4MzlhNjMsIDB4YzhiYTFmODcsCisJMHhkOTg0M2I5ZiwgMHg2M2FmMDBkNSwgMHg5NTI5YzkxMiwgMHhkZDA1NmI2ZSwgMHg4M2VhYjNhZSwgMHg4MWZlZDg0OSwKKwkweDM0NzdkZTg5LCAweDk4ZTVjZTM5LCAweDgzZmUxZWMxLCAweDdjNDFmN2FlLCAweDMzZjdmOGVmLCAweDQxNWRlZjdhLAorCTB4NDM3ZTgyZjUsIDB4OWEyZTQ5NGIsIDB4ZTQzOTZjODQsIDB4M2U0MTYwNTgsIDB4YWU0ODc5ODQsIDB4ZTkxODcyMWUsCisJMHgzYTA4MGViYywgMHhlOWFmNjczZSwgMHg1YjNmYzMwOCwgMHg2OWZjZGZjYywgMHhjMWZmZDQzZSwgMHg5MzQwZWI5ZSwKKwkweDFlOTczZDRjLCAweDg4NWYyZjQxLCAweGU4MmIzYmYzLCAweDdiZGQyOWE2LCAweGZjMDRjOTUzLCAweGNkMWU2MmZlLAorCTB4MGRmZWNlN2IsIDB4ZGNiMjdmYmQsIDB4YzY5ZjFmZjYsIDB4M2FhNzJlZmEsIDB4NGY3Y2ZhOGUsIDB4Y2YxOWE1NjgsCisJMHgxZjliZDBmNSwgMHhhYmI0NDA5ZiwgMHg3YjIzNWZlMywgMHg3ZWUzZTRlZiwgMHhkMGY4OWEzMywgMHg3OGNmM2IxMiwKKwkweGFkZjNmYzkwLCAweDhiN2Y5Njg4LCAweGM4MGY4NjRhLCAweDkxNjY3YWJmLCAweGU3MTIxZTc5LCAweDFlNDI1OWViLAorCTB4ZGRiODU1NGQsIDB4ZTdlNTZmNWUsIDB4NWZiMjVmNTUsIDB4OGI4YWZlYTYsIDB4ZDJhZjU1ZjYsIDB4NWFlNGYyOGQsCisJMHhmMjliN2ZlNCwgMHg3ZDRiZDEyNCwgMHhiZDk3YTczZSwgMHgwYTBmOWU4MiwgMHg2M2VjY2U3YywgMHhlZDk3ZTg5ZCwKKwkweDE5NmU5ODJmLCAweGUyM2VmODBiLCAweDFjZmYxM2QyLCAweDUyYzZiYjE5LCAweDI5MWRjZjA2LCAweDAyNGJmMDk1LAorCTB4ZDZjOTdhNmMsIDB4Y2YwMGE5YjUsIDB4YTdhMjI0NTIsIDB4MWRhZDkyZmEsIDB4OTY3ZmQwNGQsIDB4MDNhOTQxMzUsCisJMHhiM2Y5ZThmOCwgMHgwZWFmMzQxNiwgMHg5Nzg0YmMwNSwgMHhlM2Y4NzJlOSwgMHgxYjllMTc1NCwgMHhjYWNjZDNjNywKKwkweDRmZmU4Y2IwLCAweDhjYmY2M2JkLCAweGM0NmRmNmZhLCAweDJlZTMxMWFiLCAweDc1NjdjMTFlLCAweDZhNTcxZjA0LAorCTB4MjM4ZmI4MmMsIDB4MmYyMTI2YTUsIDB4NWU1MWUzM2QsIDB4ZDUzN2NhY2UsIDB4N2M3NWExOGYsIDB4MWE0YzZjN2QsCisJMHg1MDZmNzdiZSwgMHhhNzNjOTVmOCwgMHg3ZTgyYzlmZiwgMHg2YjI3Y2NlYSwgMHhjY2RmYTA1MywgMHhkNzE5NjY5MiwKKwkweDkxMmNkNDdiLCAweGQ3ZGEzY2ZjLCAweGM3OTNmOTQ0LCAweGQyYWMzOTNiLCAweDc0MDczZDJkLCAweDViNmZiYzc5LAorCTB4NmZiNjEyNzMsIDB4ZDUzZTQ4OTcsIDB4ZTIxZDJmMmIsIDB4YTdkMzhmZWEsIDB4MGIwZjdlM2EsIDB4MzA3N2UxYjYsCisJMHhiN2FmMjljZiwgMHhiMWY1M2U2MCwgMHhjY2NmMDViZSwgMHg3ZjFjM2MwMSwgMHhiOGM0M2Y1MywgMHhjMGFkMWY0ZCwKKwkweDI0NGNkZjcxLCAweDM1NmQ5ZTNhLCAweDhjYjFmNDY5LCAweDVlODQ2OTRlLCAweGQzNmYxZWFkLCAweDBkNGFmNWMwLAorCTB4MjljZmQzYzUsIDB4NzgwNmU1OTIsIDB4YWQ1ZGYzZGUsIDB4ZDE5MTM5N2IsIDB4YmQ3N2RhNTIsIDB4ZTE0YzdiZTgsCisJMHhhMWNjNzk3YywgMHhkNjNjYmUyMywgMHg4YTljYjhmNywgMHhmYjQ2NTlmMCwgMHhkZTc2OTk5MSwgMHhiMjFhOTJmYSwKKwkweDViMjljZWFmLCAweDgyNjc0NGY1LCAweDU0ZjFkNTBmLCAweDRmOGEzZTNhLCAweDljZWQxZTIzLCAweDZkZjY4ZmZmLAorCTB4MWRiZDIwYjMsIDB4ZTMyM2JmNzUsIDB4ODk2NzVkMzksIDB4YTFkMDU3MWEsIDB4NWRmMGRmYWEsIDB4ZGE5ZmE0NzEsCisJMHg3ZWYzZmI1MSwgMHgzODUxZWI4NiwgMHhkNzk0NmJmZSwgMHhkNTdkMjM4ZiwgMHhhN2EyNjQzYiwgMHg5YWZlY2FhMywKKwkweDI3YmY4NjE0LCAweGZmZWNkMjYyLCAweDlhYzkxZGZlLCAweGRhNzU5N2YxLCAweDVkYjQ3MDM0LCAweGRiZmRjZmI1LAorCTB4MGVjNGNiYTcsIDB4ZDg0N2E0NjYsIDB4M2VjMmY5NDcsIDB4ZTA3NzFmZDIsIDB4MTc2OGFlZmEsIDB4ZjdlOGViMjksCisJMHg0NWQ5MDY0OSwgMHg4YTJlZGNmOSwgMHhiZTU0ODdiNiwgMHhiODg5ZDY2ZSwgMHg2NWM3OGVhYywgMHg1OGRmZjlhMywKKwkweGYxZWVjM2ZhLCAweDhlNDkyYWQ4LCAweGM2NWJiZmJjLCAweGJlOTA3M2JhLCAweDg2MTJhM2U2LCAweDc1ZDAxZWYxLAorCTB4MTVmYzIzYTcsIDB4MDc4YjZkZWIsIDB4Y2NhZDdjMzksIDB4YmZiZjY5NzYsIDB4M2YzN2JmY2EsIDB4MWU3N2Q0YmUsCisJMHgzNjc0OTVlNSwgMHg2NTYxZGY0YywgMHgwN2U1MThhYiwgMHg5ZTc4NmJlOCwgMHhhZDY2NWUxMSwgMHgyNThiZDQ4OCwKKwkweDhkMmRmMWZkLCAweGQ4NGJhNDVkLCAweGFjNzg4NTliLCAweGYxZTQ2YjM4LCAweDM4ZTg5ZThmLCAweDg1MWZlYTk3LAorCTB4YWUyYmYyMjUsIDB4OTNlYTJlNTIsIDB4ZTY3YmI4ZjksIDB4N2Y2Nzc4ZjAsIDB4OTM4ZjMzNzksIDB4ZTVmYzA5MTUsCisJMHg1ZDY5MWE5NCwgMHhkY2Y3ODA4YSwgMHhiNTllZmIxNiwgMHg0MWZhNTRhNCwgMHgwN2RmYTJmOSwgMHhlZjgwMjlkZiwKKwkweDYxZTY5MGFmLCAweGIxNTUzZDllLCAweGNhNTI5MWQ3LCAweDk3NzdiNWUzLCAweGExNGFmMjc4LCAweDE1ZjEyYTJjLAorCTB4M2Q1ZTIyOTYsIDB4NzdkMzVmNjAsIDB4OWY2NDNkYzUsIDB4MzNiY2UzYTksIDB4ZmQxNmUzY2EsIDB4YmNjOTYxNDYsCisJMHhlZThmMGVkYywgMHg2ODYzZWQwNywgMHhlM2Q4ODY5YywgMHg3YTM4ZmI0MCwgMHhmNmVjNmU3ZSwgMHhmYzM5Yjg0MywKKwkweDMwZmIyMzdkLCAweDBjMDY0M2QyLCAweDUyZjJhNjY0LCAweDE2ZTVlMzJhLCAweDg4NDZhZWZhLCAweDFlMGRlN2ZiLAorCTB4OTE0NmYzZDIsIDB4MTAzNzg4YWYsIDB4ZjRjN2ZjOTEsIDB4MWNiZTM0ZjUsIDB4NThmNzQxOWUsIDB4ODMyNWQ4MmQsCisJMHg3NjkxZjlmYiwgMHg2YTg0YWM5NCwgMHg2YWFkZTMyMiwgMHhkZjk0YThiOSwgMHgxNTI4Y2U3MywgMHg2MDRjZjNlZiwKKwkweGE4YWZjODEzLCAweGVhM2NmY2JjLCAweGMzY2Q0M2YzLCAweGM4NTc2NWVjLCAweDYzZjM1ZTdiLCAweGMzZmE0OWQzLAorCTB4YTU1ZjI3ZTQsIDB4NGEwZTYwN2QsIDB4MWYzOWRmOTEsIDB4NGE4OWJmNmEsIDB4YzI4YTFjOTQsIDB4NWNmMzUwZDMsCisJMHgyMmRjNzllZCwgMHhkNzZhZjZlOCwgMHhjYzdhNjU1ZCwgMHgyZWQxZjk0ZSwgMHgwNTZiMDdjZSwgMHhkNWRiZjU3ZCwKKwkweGJlM2YxZTNmLCAweGZlODYxZjNmLCAweGZlZmJkOWNhLCAweDRhN2VmODkzLCAweDM3YTU2ODQyLCAweDE0NWU3ZWM2LAorCTB4ZTUzMWY5ZmIsIDB4Y2U3MGQzYzEsIDB4ZmJhMThjMWIsIDB4MDc5OWRlZDEsIDB4ZDIwMjYzYTcsIDB4ZjFmMmM3N2IsCisJMHg5ZWIwMDVmMCwgMHgyZGZjYzUzNywgMHg2ZmViOTU5NiwgMHgxYzViNDc4NSwgMHgxZWY5OThiYSwgMHg3YTc4ZmU2ZiwKKwkweGQ5M2YwZGEyLCAweGRjZTM5NWZmLCAweGE3MjA2ZGZiLCAweGQwN2QxZTViLCAweDc1ODFiMGFjLCAweDE1ZDk2YjMwLAorCTB4ZTM0N2Y5Y2UsIDB4NmQ1ZDc1MTMsIDB4NjI1ZTMwNWIsIDB4ZjdhYWJkNGQsIDB4YWY1YzVhMTQsIDB4Njk3ZGUwMjQsCisJMHg3NjRkZTdlZCwgMHhiNDQ2MGVmYywgMHg0M2M2YTAzZCwgMHhjNmE1YmQ1NCwgMHhhNGJiNTQ0ZCwgMHgxZmUzYzFjMiwKKwkweDdiZmNlZDMzLCAweDY5ZjYxNTNkLCAweGIyMGZkZmE0LCAweGFmZjIxYWFlLCAweDIyNmQzYjMwLCAweDE5ZmQwYWIxLAorCTB4ZTRmYjVhZGQsIDB4NDY1N2JmM2EsIDB4OWVkYTJhM2IsIDB4NDUzMzRkYTgsIDB4N2FiZDA3ZDksIDB4MTcxNWRmOTQsCisJMHhmZTU0ZmRiNSwgMHhjNDU0YWNmOCwgMHgxNzc5NTQ1MSwgMHhjZjlhNDc2NSwgMHhiYjQwNDk5ZiwgMHg2NzBiZWRlYiwKKwkweDhkMTQyZTI4LCAweDVjMmVlYjlmLCAweGFlYmQ5ZmRlLCAweDgzZjc0ZjVkLCAweGI3YWQ3MWQxLCAweGZkZDJlNDJmLAorCTB4MWJhZjExYTAsIDB4Y2NjYWQ0YzEsIDB4ODA4Y2M0M2YsIDB4NmI3YjRjOTcsIDB4MThlYzExOTUsIDB4ZjgyOTgzYTMsCisJMHg1OGZjMzZkZCwgMHg4ZDBkYzYzMywgMHg3YzljNzgxNywgMHhkN2ZiOWQ4NCwgMHgyZmMxOGI4OSwgMHg5NTMzNTE4NSwKKwkweDc4YzE3ZGEwLCAweGVmNDhjZTdjLCAweGVmNWQ5OWQzLCAweDA5YmRiZDkxLCAweDllMjE4NmVhLCAweGE2MTk5ZWM3LAorCTB4NTMwNzExOGIsIDB4YzA4YTYzY2YsIDB4YjdlNjZlZWYsIDB4NGQ4MWVmZTMsIDB4ZjdmNzhiYjEsIDB4NTlkYjQ2MmUsCisJMHhhMjJkM2NmYywgMHgyZDYyZTI3ZiwgMHgzY2UyMmQzZSwgMHg0MzViODMyNywgMHhkM2VjNzlkZiwgMHhlNzExNmYzZSwKKwkweGZiMWE1OTZiLCAweDYzYTNlYzFjLCAweDdhYTI0MzlmLCAweGM1YjYxMzBlLCAweDU5NmMzOWUxLCAweDc1OGE0ZGJjLAorCTB4MmY4Yjk5MGUsIDB4ODQ1YjBlN2YsIDB4ZWZkMmE5NWYsIDB4YjIwNGFjYjQsIDB4ZThhNmY3YWYsIDB4N2I0MWZiZTgsCisJMHhjYjU5YzMxMywgMHhiMmZkZmUzMSwgMHhhY2NmZGU5OSwgMHhiNDM2NzExMCwgMHg2YjlmMTBhNCwgMHg4NGJmOTdiNywKKwkweGEzNzFkYjcxLCAweDdiOGU3NGY1LCAweGJjZmZkMTI1LCAweDYwZmVmZjhlLCAweDFmZWE3OGNmLCAweGY4ODNiMzI3LAorCTB4ZmIwNzgwYmIsIDB4MWJiYmU5YWEsIDB4ZDNiYmZjZDEsIDB4MzNkZDAwN2EsIDB4M2RiOWNlYjYsIDB4ODM5YzAxNmIsCisJMHg5OTgwZmIyNSwgMHhjZjgzOWJmYiwgMHg0YTNmZWYwNywgMHg3YjRiYmUwNSwgMHhhNjU0YjlmOCwgMHhiZGEzZDQ5ZCwKKwkweGVjNjZmMjVlLCAweDhmZTM1MWYzLCAweDNhOWRhNDdiLCAweGFhMzYyYjIwLCAweDk4ZmM4YmFmLCAweGVjYTMzYjkxLAorCTB4NjQyZGIzZTksIDB4NDdjNjViNjcsIDB4MzljMGY3ZDUsIDB4OWY4ZWJkZDEsIDB4YTFkOTE2ZWMsIDB4ODdlYmFmM2QsCisJMHgxMTRhYTczOCwgMHg3ZDdmMzA4NywgMHhmYjY1ZTI4YSwgMHg3ZTcxNGVmYSwgMHgyNWM2ZDFlOSwgMHhmZTVkZjcyNywKKwkweGU3MTM1ZTljLCAweGExYzQ1M2I0LCAweDAwZTIyZTdlLCAweDdlN2ZjMjlkLCAweGYyYTRlMDIzLCAweGVhOWI4MGNkLAorCTB4MDQyODBhZGYsIDB4MGI5NDBhZWYsIDB4NzdjZmMxNjEsIDB4NDdjYjNlNTYsIDB4ODRhYWFmMTcsIDB4Y2Y0N2VkZmIsCisJMHg3ZjdkYmY3MywgMHhiZTgzYTg2MiwgMHg0MmRlNzRlZiwgMHhiZGE0MTdkZiwgMHhkYmJmMTQ0ZCwgMHgyYzcyN2MwNywKKwkweDFmYmY0OWNlLCAweDRjZGIzNDc4LCAweGE1YTNiM2YxLCAweDhhN2JmYmJmLCAweGQxNmI3Y2JiLCAweGM3MGJiOGYxLAorCTB4ZWI0ZTdhYjMsIDB4NmYxODRlNzAsIDB4ZWU4Yjg1NWQsIDB4NDdlMDM2YTUsIDB4ZWVmZmExMTQsIDB4ZmZiZTg5MzIsCisJMHgwNDBlMWIzNCwgMHgzYTU0NDVlZiwgMHhmMTY5ZjUzNywgMHg2NWZmMGY1OSwgMHgxZGRmZjE5NSwgMHg2MTdmNDJjOCwKKwkweGE0ZTg4YjhjLCAweDIyNzNlZjQyLCAweDRmYmEzNzNlLCAweDU3MWU1ZjkxLCAweDg3MWJlZWQ4LCAweDdhZjE4MDcxLAorCTB4MTRmYmJlMjYsIDB4M2JhYzQ1MzQsIDB4ZTA0MjZmMGUsIDB4NDQ4OTUzNzksIDB4MGExYTczZGYsIDB4ODZlNWQxYmYsCisJMHhhMzJmYWU1NCwgMHgzNDc1ZmZlYiwgMHhkZDFiODNkNywgMHg3NzNjZThkYiwgMHg1MGIyYmEzYiwgMHhmOTEzZWZhZiwKKwkweDI5NjRiMzEwLCAweDI4NWZiZjQ4LCAweDFjYjFkZDc3LCAweDY1OTE1YmY2LCAweGMwMTFiYjFmLCAweDY4NTNhMzJkLAorCTB4NGY0YWZiZmQsIDB4ZDhmODFjNTMsIDB4MjFjNjU3ODUsIDB4NzZiMzFkZmQsIDB4NzljZTMwNWEsIDB4NTNkZmM5Y2MsCisJMHhmOTk1MTM4NywgMHhmMjlkYjc3YiwgMHhhNGYyMzEyZCwgMHhlOTU4ZjJkNSwgMHg5NWZkZmEyMiwgMHhlZjdjZmM3ZiwKKwkweGRmN2NkMWRhLCAweDBhZjU1MjRjLCAweGZiODE1YjhjLCAweGRlZjk0MjRkLCAweGMzZjkwMmIyLCAweGZjODNiOTk4LAorCTB4YWE3M2U4Y2MsIDB4ODhiMzVmNzAsIDB4ZmM2NGYzZGUsIDB4YjZiZjRmN2IsIDB4M2Y3ODJjODYsIDB4MDI2N2VkMWMsCisJMHhmZjQyNmM3ZCwgMHgzZDA0Zjc3OCwgMHg1ZWFkYWY3ZCwgMHhlNzgyZTdlNiwgMHgxZmE0ZTc4OCwgMHg5OTdlMTNhMywKKwkweDY1NjY3Yzc2LCAweGMwZmE2MzNlLCAweGRlMWQ2MDc5LCAweGYxM2FkMGQ3LCAweGFkZWZhYTNlLCAweGY4NjI5MmJmLAorCTB4YzlkNjgzYjUsIDB4Zjk1ODllZmMsIDB4Y2RjZmQxYjAsIDB4OWEyMGIyNzYsIDB4MTYxNWIzODYsIDB4NzA5ZmExNzYsCisJMHg5OWM2OWYzMCwgMHhjY2UzZTU2ZCwgMHg5YjdjNzExMiwgMHgxNzU5ZmZhMCwgMHg4MWRmOTQ3NSwgMHhjZjgwZDZmNCwKKwkweDc5MjdjYzk1LCAweDUwZjVjYzcyLCAweGI3YWMxZDU3LCAweDQxYzZjZTFlLCAweDU2OTM0NmZlLCAweDViMzkwOTBlLAorCTB4Zjc0NTUyNWYsIDB4MDdkY2M3YmQsIDB4YmZiZWEzYzYsIDB4ZTFlNTc0YmUsIDB4OWZjMjI3MzIsIDB4Yjc0MTU0ZDQsCisJMHhkNTJmYTUyOSwgMHg5NDVhNWQyMCwgMHg0YzJmOGEyZSwgMHg1ZDc0Y2I3NiwgMHgzNmI5N2Q3OCwgMHgxN2FmZDE0ZSwKKwkweGI0NGJmNGEzLCAweDkyOGZhOGJlLCAweDU0ZjcxMTNiLCAweGY5YzQ0MzRlLCAweDRiOWY3MmNmLCAweGFiODNhNDg4LAorCTB4MmYxY2NiYzcsIDB4ZDY3YmFmN2UsIDB4MWRhNzFlMDUsIDB4ZTlmNzk3OGMsIDB4NzgwM2E1NzMsIDB4ZDhlZjNlODksCisJMHhhNzNlODk3OCwgMHhlYWFkM2MwMSwgMHg4YzFkY2JhYSwgMHhiZjZmMTU1ZiwgMHgxYWM5NzkyZSwgMHg4ZDFiZTc5OSwKKwkweGFmOGExZmI3LCAweDQxNTZkMWU2LCAweDU3OWU1Y2FmLCAweDNiN2RiZTA4LCAweGI3NzE0NDNiLCAweGVmZjk0YmI3LAorCTB4ZmY3MzFkNGIsIDB4YjNiZmUyOTYsIDB4MGQ2M2E4NTgsIDB4Y2JlMDQ1Y2EsIDB4ZThmOTQyMzksIDB4MzQ0Y2U0MjMsCisJMHhmNGY4MDYxZSwgMHhiZjJlMjgzZiwgMHgyOGI3ZjNmYiwgMHgyMWNhYWEyZSwgMHhlYTI1ZjIxMywgMHhlYTFmYzExMywKKwkweDFmOTA5OWI5LCAweGYwMmY2ZjkxLCAweDJkNWU4N2VmLCAweDQ1N2NhODdmLCAweDM4M2YyMWViLCAweDFmY2M4ZmE0LAorCTB4NWZjNWRmZmMsIDB4MThjZDcxN2IsIDB4NTIxNjc2MTcsIDB4ZDFjYWI4M2MsIDB4YWM3YmM3YTUsIDB4M2RkMjUwYzksCisJMHhkMjdmODg5MiwgMHhmNTkxOWMzYSwgMHg1OTFjNmUzYywgMHhhMTJmNzE0ZiwgMHhhNmI4ZDRmNywgMHhiYjNlYmVkYSwKKwkweDU1MTg0MTJiLCAweGMyNGQ0N2E0LCAweGM0ZmQ1MWRlLCAweDY0NTM4ZTdkLCAweDU0ZmFhYTdmLCAweDU3ZmVmNzE2LAorCTB4MDhmNzRmYWIsIDB4ZmI1NDNhN2QsIDB4NzliYjczZGUsIDB4NDNjYmU3ZGMsIDB4MWM4MDBmM2QsIDB4YTQ2ZjljOWYsCisJMHgwZTRjYjhlZiwgMHhhM2RmY2MzZiwgMHhmZTQ5ODQ3MCwgMHg5MTM3NzQ2ZiwgMHg2OWZiMGMxZiwgMHhlNjA0YTM0NiwKKwkweGYzZTY0NDc1LCAweGYzYmVlNWE5LCAweGVmZDYwYTZkLCAweDBhZjRiYjk1LCAweDE2ZmYwN2Y1LCAweDU2ODYwM2UwLAorCTB4MGQ4NjlkZmEsIDB4MTM3ZDczOGYsIDB4ZDY1MWY0NTcsIDB4YmE4M2RlZTUsIDB4ZTY5OTRmYjMsIDB4NjFlZmMyNGEsCisJMHhkZjgzNWY2ZiwgMHg4YzJhMGIwMSwgMHhiNTk4ZWJiZSwgMHhlZTQ1OGJiNCwgMHhkYzMxYTVmNywgMHhmZjljOWRhZiwKKwkweDY4MDcxZGQ2LCAweDY5ZWExZmRkLCAweDAzNTc2OGRkLCAweDlkOTY0ZjlkLCAweGNmZTcwNTBlLCAweGZkMjNkYmY2LAorCTB4ZjdkOTdkZWMsIDB4YjcwMDlkZGEsIDB4MDg2YzY5N2MsIDB4YTNjMzdhZDEsIDB4ZWNmMzAxN2UsIDB4MDc4ZDU3MzMsCisJMHg3M2VkOGQ0YiwgMHgwYmY1MTgxZiwgMHg3MzQ2YzdjMCwgMHhhM2NjMDRkNSwgMHhkYmRmYjZhYywgMHhkYWU1MWYzZSwKKwkweDYwMjY1YmQ5LCAweGJjZWMxYmZjLCAweDgzYjdkNDU2LCAweGNkYjdkZmY2LCAweDVkM2JiZjhjLCAweGQ2OWY3OGVkLAorCTB4YWJhZmEyMzEsIDB4NWFiZmJmMDYsIDB4NDhmN2UwZWQsIDB4ODdiZWQxYmUsIDB4N2I0MDRjYzYsIDB4NzNjMWVjMzksCisJMHgwYzlmMzQ0ZiwgMHgxNjRjZGQyMiwgMHgyZjE3NjVlYiwgMHhiZDQxZmM1MSwgMHg5ZTczZDk5NywgMHhmOGZmNDdkMywKKwkweDhmYjgwZjQwLCAweDQ1NWNiZjZiLCAweDdkYjkyMmY3LCAweGEwMjZmOWJhLCAweDNjN2Q3NWQ1LCAweGYxZGIwYzdmLAorCTB4YmY1OGUwN2IsIDB4MDAxZDg2MjgsIDB4NGJlNzVjZjMsIDB4Y2FlYmYzYzYsIDB4ZGU4NjM3YmEsIDB4MzZmYmVkY2QsCisJMHhmNmU3ODNlMCwgMHg0NGJjNzA2NCwgMHhjMzFlNmZiNywgMHhhZmI4ODJlZCwgMHg5MjcyY2ZkZSwgMHg3ZmY1YzAzZCwKKwkweGYzMTJjMGIwLCAweGE5Yjc1NTNiLCAweDNiMWFkMmZhLCAweDU1MmQ0NTBmLCAweDIzZGFhNTc5LCAweDIxYjM1ZjgwLAorCTB4YzY5YmJmMDIsIDB4N2NmZGZmNzAsIDB4ZjEwM2E3YTksIDB4N2ZlNzdkZjcsIDB4ZTUwYjcxMGEsIDB4ZjZjZjUyZjEsCisJMHhhZTkxYzMzMSwgMHg5N2FkNWYwNCwgMHhlZTAxYzY2MywgMHhjNWEzZjMxYywgMHgxMzQxNmUyYiwgMHg3M2JlYWJlZiwKKwkweDg2ZTk2ZmU5LCAweDc0NDFkYmE2LCAweGY4ZTk1MDY1LCAweGZmZTNhMjIxLCAweGUyN2JmNDhiLCAweDIwZWZkMGZiLAorCTB4MTRmZTc0NzksIDB4ZDM0N2MzZGQsIDB4MDNiZjRhYjEsIDB4OWJlNmM4NzQsIDB4NzllODA2OTIsIDB4N2VjMWJhMjgsCisJMHhlODA2OTI4YiwgMHhmYjdlYTg3YSwgMHg5MzFmYmZjZSwgMHhlOWM2MDdkZSwgMHhhYmRkMmNiZCwgMHhkMDU5YjdmNCwKKwkweDU0MGY3YTkxLCAweGZkNzljZTI5LCAweGZlZWM4Y2Q3LCAweGY1NDYzZGEzLCAweDdlMzVjNjc3LCAweGNhM2ZlODExLAorCTB4NzJiMGFlYTMsIDB4MzdiNDdmYjksIDB4M2QxOWZiOTcsIDB4OWE5ZmJhNjYsIDB4YmUyOTVlZTksIDB4MjM1ZDBkYmIsCisJMHhmMjExYWRjNiwgMHg3NWRiYTY3ZSwgMHhlYWFmMzk1OSwgMHhmZGRmNTUwYiwgMHg0Mzc3N2M0ZiwgMHgwMDgwMDA5OCwKKwkweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGM3NTQ3NDBiLCAweGVlYmQ2MDk1LAorCTB4OTFhOTNmZDcsIDB4MTY4ODNlOWUsIDB4YzA4NWEwOTIsIDB4ZWI0MDQ2MTYsIDB4N2QzZDA1ZmYsIDB4YTcxZjMyMTAsCisJMHg5MDBiMThjMSwgMHgwNGUwOGI0YywgMHg2MGRkNDkxYiwgMHg5ZTNkOTBlMiwgMHgxMjMyMzFhMSwgMHgxZjYyY2Q5ZiwKKwkweGJkNjY3OGNjLCAweDhjMDMwZDM5LCAweGMwNzdiMTlkLCAweDBiNjExYzU2LCAweDM4MzdlMmRjLCAweDcxYzZlYzRiLAorCTB4M2M0YzljMTgsIDB4NmMwODQzYzIsIDB4YzcxOGQzNmMsIDB4YmM0YWIyNDMsIDB4MGY3YWRlZjcsIDB4MGI3NTZiZjUsCisJMHhjY2ViNDNkYiwgMHg0MGU3NTc2NCwgMHhhYWJkNWVhOSwgMHhmZWViNzViYSwgMHg3YWQzZDU2ZiwgMHhjZWNjNjMzMywKKwkweDUzZjgxN2Q4LCAweDA4YWNiYzNkLCAweDY1Y2IxOTFhLCAweGZjMDVmM2Y0LCAweGViZjJlMmRiLCAweGRmNjMyYjI1LAorCTB4YjRjYmVlYjksIDB4MmM5M2Y5NDMsIDB4MWU2NzBhZGYsIDB4MzU1ZmFmNjMsIDB4YjE4OGFjY2EsIDB4ZjZlM2E5YWUsCisJMHhmYTg3YjNlYSwgMHg4YzA4NzU4ZiwgMHgxMjdiNDMxNSwgMHhlZjc2ODY3NCwgMHgwMDc3YzE1NCwgMHgyN2QxMzExZSwKKwkweDdkMWU5ZDJlLCAweGZkNGM5ZmRlLCAweDg3OTVjZGFlLCAweDlkMzJmYWIzLCAweGFmN2E2ODYzLCAweDU5YjE4ZDNlLAorCTB4Y2EwZTliZjgsIDB4MzMyZDkzMjAsIDB4NWFlZGNjYTAsIDB4Y2NhMDEyYzcsIDB4OTYzNmY5MmMsIDB4YjEyZTYyNGMsCisJMHhmMjkzMzE4NCwgMHg2YmNhZTk5ZSwgMHgzOWYwMTVkZiwgMHhmZTgzMTk5MywgMHg1NmY1OTVlYiwgMHgwZDVkN2YzMCwKKwkweGNjY2YzMWMwLCAweDM4ODlmMWJjLCAweGM5YzlkMzdhLCAweDk3Y2Q1ZWQwLCAweGQ3NjllMzBhLCAweGZlOWZkZTFkLAorCTB4ZTRmMzI5YTUsIDB4NTcyZTM2MzAsIDB4ZmJjZGY1YTAsIDB4ZjA0Y2Y5OGMsIDB4ZWI2ZTc1NmIsIDB4ZTcwMzM2MDIsCisJMHhkMWNjNzE4NywgMHgxZTYwYTljNywgMHgxZDAxZTk5OSwgMHgyYWRiNWVlNSwgMHhhYTZiM2ZlOCwgMHhhZmU1ZTFjOSwKKwkweDZjZGVmODRiLCAweDNlMWJkZmM2LCAweDRhYzY3YWNlLCAweGUyZDljNjg2LCAweDU0ZmFjODA5LCAweDRjNDk4ZWM2LAorCTB4NmY1YjJmZTksIDB4ZjhlNzY3YzEsIDB4YjI4NTdhYzMsIDB4Y2Q2ZTUzM2UsIDB4ZWJjYmM0NTUsIDB4MDdlMWM3OTIsCisJMHg4NjBmNjc3OCwgMHhjYjFkNmY4ZCwgMHg1NTYzM2E1OCwgMHg4YjlmNjk5ZiwgMHgzODdkNmQwZSwgMHg1OGZiMzA1YywKKwkweDVmNGZlNWZhLCAweDMzNDY3Y2MwLCAweDVkMzk4ZmM3LCAweDVkNzlmODQ3LCAweDNlOTBmYTMyLCAweGVlZDRhZTJhLAorCTB4NGIxODkzNjIsIDB4ZmM4N2VjOTYsIDB4OTkyYWRjZjAsIDB4MzYwNTNlMWQsIDB4N2U1M2Y2MzMsIDB4MDQwMmI4YWYsCisJMHhjMjlmZWQwNCwgMHg3MzgwMTRiZiwgMHg1YWVmNmU5YiwgMHgxNmRkZDAyNywgMHhhMjFmNGM2YywgMHg0YzBiMjU5NywKKwkweDJlOTYzODFhLCAweDliZDRkNDQ5LCAweGVhNjljNzlhLCAweGQ0NGY1N2NiLCAweGRiNzM2ZmVjLCAweDQzZmE5YWRkLAorCTB4ZWE2YTY2MWIsIDB4MzU0YTI3YWUsIDB4ZDU5ZDU1ZjUsIDB4ZWY1NmYxOWEsIDB4ZmY2OWFiOWMsIDB4Njg2ZmVlZDYsCisJMHg3ZjllNmJlYSwgMHg3NDdmNTM1MCwgMHhlOTExY2FmZiwgMHg4ODVmMWEyMiwgMHg4OWU5OTFiNiwgMHhkMjNiMDU3OSwKKwkweDNhNGQ4OGJmLCAweDljYzVjZmZjLCAweGY3ZjdhM2QzLCAweDdlYzI3ZjIxLCAweGI3YWY2ZWJkLCAweGQ1ZmU4MmFkLAorCTB4ZTc4ZDNmNTcsIDB4YzVmNGI0ZmQsIDB4ZjkwMDcyYmMsIDB4MTdkOTU2YTMsIDB4NDAyYmM3OTgsIDB4YWQ1MjhkN2IsCisJMHhmNDQ1YmU5NSwgMHg0NTM2NjM1ZSwgMHhlZTk1MWJlNCwgMHgxMTU2MGFiNiwgMHhkYTY2YWZjNywgMHg2ZGIwYWFmZCwKKwkweDdlNDdhZWJkLCAweGViZDAxYTJlLCAweDM3NTliZTYxLCAweDIxNTdmY2I1LCAweGM3MDZmYzM1LCAweGM3YWZjYzY3LAorCTB4YTVjYjg0ZjUsIDB4OTMxOGVlZmYsIDB4NjA5ZTM5N2EsIDB4ZmMwMTdmYjUsIDB4OGNjOWFjYzQsIDB4YTNjNzQ3OTUsCisJMHg1ZGI3YTc0YSwgMHg2ZjVmNjMzNywgMHhlYWZjY2FkZCwgMHhhMDU4MmI3YSwgMHhkYTNlZTkwZSwgMHhmYzNiNjdiYSwKKwkweDUxNmI5MjdhLCAweDVlYmUxZGQ2LCAweDZmZWZmZTE1LCAweGVmODE1Zjg2LCAweGYzMjNmZjVmLCAweGRiMTAxM2VkLAorCTB4ZTZmYzg4YjIsIDB4Y2ZlYjVkZGYsIDB4MDI0MDJiYjUsIDB4N2ExNTI3YmMsIDB4Mjc4MjkxYTgsIDB4MGU5MDhiMTIsCisJMHg4MzY1MDM5OCwgMHg1MWY5OTA3MSwgMHhjMTMzZDQwZSwgMHg5NjUyODQ2ZiwgMHgzOGFmMDQxYywgMHgzMDM0ZWY2OCwKKwkweDdlNzFlYjJhLCAweGE2ODYxMDcxLCAweDM1ZWI0NWQyLCAweDI4OGRjYTBlLCAweGE5MmM0NTZmLCAweGViYzc5Y2VlLAorCTB4ODc1ZTA2OGUsIDB4ZDUyZWE4ZjcsIDB4M2VlN2JhZjIsIDB4ZWE5Mjg3NWUsIDB4NDNhZjI3NWUsIDB4NWFlZmFhM2YsCisJMHhiOGNlZjU4YywgMHgwMTQ0ODljMCwgMHg1ODI1YmVlYiwgMHg1YTFlMGUzNywgMHgwNWZmNGJjYSwgMHhlNDk5NGE4MSwKKwkweDVkZTgzODk2LCAweGVjN2VhN2E3LCAweDM3MDdhZjIyLCAweGYyZDBmYTcxLCAweGY2NWUzMTgzLCAweDVmMTliM2Y5LAorCTB4ODEzZjNjM2QsIDB4ZmRjMjRkYmYsIDB4MDA2ZmQ3NWMsIDB4ODI4YWQ0M2MsIDB4ZDVlZjBlYzMsIDB4M2Y4NzMyMGMsCisJMHhlNGQ1ZjcxNSwgMHhlMDk3ZDk5MCwgMHgzMTMzYTAzMywgMHg4Y2NmODg2ZCwgMHg0YWIxOTgyYywgMHgwZjc5M2UyMCwKKwkweGVkY2FhZGYxLCAweGU5NjhlM2UxLCAweDVhZjUxZWFiLCAweGZjM2JlYzAxLCAweGU1MTkzMWJlLCAweGZhYTdhNzMwLAorCTB4MmMxMmUwYjIsIDB4ZDAxM2Y5ZjEsIDB4ZmMzMjdiM2UsIDB4MWY0ZTFlNGIsIDB4MzJhMjVjMmEsIDB4NWZiNWE1NWYsCisJMHgzMmI2YWE4ZiwgMHg1OWI3MjYxOCwgMHg4NTU5ZDExNywgMHhkOTJjOWQ3OSwgMHg3MTZkY2I4NywgMHgyZTJmZTU1MCwKKwkweDU2ZTFjMjJmLCAweDFmMzlhZGU1LCAweGZiMWE2Y2Y4LCAweGI5OTY3YzNhLCAweGFlYjM2YTBhLCAweGQ5ZjBhYmJlLAorCTB4OTMzZTMwYmEsIDB4ODQ5NmY3YWQsIDB4MzIxMDE5ZjAsIDB4YjdkOWYwZDMsIDB4Mjc2ZTllODksIDB4ODMwOTRlNWYsCisJMHg0ZjE4MjY3NSwgMHgyM2U4MGNmNiwgMHhjMDU0OTljYSwgMHgzZTI0NDI0MywgMHhiMjFiZmI5YiwgMHg5N2M4YTIxZiwKKwkweDU4MTdmMDM3LCAweDk4N2U2ZTY3LCAweDVjZjQ1MTljLCAweGZlZTdhYWI1LCAweGRkYTJiM2E4LCAweDExN2E2N2UyLAorCTB4Yzg3YzcwY2IsIDB4ZDIzMTNiMmMsIDB4YmUzY2I1NzMsIDB4NmJiYTA2MDksIDB4OTBmODBlYTgsIDB4NjNiZTgxMGYsCisJMHgwNmRjMTUxZiwgMHhjZWM5OWJjZiwgMHg4MDVhYjg2MiwgMHgzMWUyYWFjNywgMHg3MWFkNmU4YywgMHhlYzkwOWQyZiwKKwkweGVjZjUwNWJjLCAweDRlNmU4NTE4LCAweGRmMTFhNzY2LCAweGM3YmQ3NmMzLCAweGI1OWRlNDQyLCAweDAxZjFjYmU4LAorCTB4YzcwOTM3Y2QsIDB4YmYyMjY2NzMsIDB4YzZkYjQwZDUsIDB4MzNmZGUxODIsIDB4OTlmMDBmYjEsIDB4M2U3Y2M4MzUsCisJMHgwOGVhY2Y3OCwgMHg0NmFmNTgwOCwgMHhmNDhkOWVmZCwgMHhmZTUxZWFjZiwgMHhlODA5NWY1NywgMHhlNWE1ZWEyNSwKKwkweDAwNzQ1Yjk3LCAweGE0MDEzZmJmLCAweDUxN2M4YjU3LCAweDY0MmU5YzMwLCAweDdlZTNkM2U2LCAweGFmZmRkNTdjLAorCTB4OTAzNDFmYjYsIDB4ZmZkYjBlYmMsIDB4Y2ZiMDQxOWEsIDB4ZDUzOTRlMDAsIDB4MWFmYTIwZTQsIDB4YzhjZjY0NjQsCisJMHg0OGM3YzE0ZSwgMHhiYzIxYWNiZSwgMHhhZGUzZjZhOCwgMHgxNzY4MjZmNiwgMHg2MjJlOTFlOCwgMHhmNjQwYjM3YiwKKwkweGIzNmNhN2QwLCAweGYzMDVmMzgxLCAweDg2N2E1NWZhLCAweDMwYWZjYmU3LCAweDM0ZWQxMTM5LCAweDdlZDRmM2NiLAorCTB4ZmEyMzEzNmMsIDB4M2M5N2I2YTgsIDB4Yjg0NzY3NTUsIDB4NDRjYzc2MDYsIDB4MGFiZDI0YjgsIDB4YzcxNTNmOTcsCisJMHg3MGUyNjBiZCwgMHg3ZjA4ZGFmOSwgMHhlNGZlMGFkNSwgMHg0MzMzMWQ0MSwgMHg2OTRmYmZiYiwgMHhmZjVmYTMwZiwKKwkweGZjZDNiNzIwLCAweDcwMmJjNDRmLCAweDQzZjBjOGRkLCAweDRlZDAwN2JmLCAweGU1Njg5MzA2LCAweDQzZmYwM2RkLAorCTB4NjlkY2Y3ODQsIDB4MDFkZjNmNzcsIDB4ZjAyOGFlNWQsIDB4NmU4NTZmZmMsIDB4NTEyNGRhM2YsIDB4ZjVjZDNlYjksCisJMHhjN2EwN2NmZCwgMHg3YzZlOTE3ZiwgMHgwZmM4NjZlMiwgMHhkNWY3NDQzOSwgMHg5MDI3Y2ZmNiwgMHhkOWYxNTIxZSwKKwkweDEwZjQ4NjM3LCAweGU4Zjg0ZGMyLCAweGRiODM0NGIzLCAweDM4NzUxMGFhLCAweGU1YmYwYWJjLCAweDJhNTdjODhjLAorCTB4NTc3YzJhOWMsIDB4MGJhYjdhN2MsIDB4ZTdiMzdiYzYsIDB4ZjYxYzEzNWYsIDB4NDU0YmY4MjEsIDB4ZmI4NDdlZTcsCisJMHg2NzRmYzFjZCwgMHg5MmVmODhiOCwgMHgzNDY2NzYzNSwgMHhmYzUyNjZmOSwgMHg5NjRjYTQ4OCwgMHgzZWEyYTYyYiwKKwkweDg1Y2M3Mzg4LCAweDc0Y2I4Yzc1LCAweDM2NGNiYWQxLCAweDAyZmQxZGEzLCAweGYzOTMyNzRiLCAweDgyNzM0ODYwLAorCTB4ZjdmMDhjY2YsIDB4ZDJlYzM3YTcsIDB4YTlkNmZiNDMsIDB4ZmJjMTMzMjIsIDB4MzZiY2IzNWIsIDB4MDlmZWE3NWEsCisJMHg5Mzk5ZWI4NiwgMHhkNjAzNjFlOSwgMHg2NTc3ZjNlOCwgMHg5YzExMjkzZSwgMHhiZjQ3NTA4MywgMHhhMmYxYzZjNywKKwkweGY4ZjQ2ODlmLCAweGM3NWZiOWUwLCAweGMxMGExY2Q2LCAweGVlMDJjMWNiLCAweGU3Y2Q5ZDhmLCAweDFlMTdkYWU1LAorCTB4ODQyOTc2ZDksIDB4YWQwZmRhM2YsIDB4YmRkZGQ0ZDMsIDB4Mjk3NmRiZGYsIDB4MTA2ZWRlNTQsIDB4MzY5N2RjNDQsCisJMHhkOWRiOGU4NSwgMHg1ZmY0MDRjMCwgMHhlMTNiNDU1YSwgMHg5MDM3NDNhMSwgMHgyYzZiZjU4NiwgMHhhZTBhN2U3OCwKKwkweDAwOGZlNzBmLCAweDViZTczZmZmLCAweGQyZmYzZDYyLCAweDhmZjY1MGE5LCAweGZmNjlmZWUxLCAweDBkZjkxZjI0LAorCTB4MmIxZmZjZWEsIDB4NWYzOGZmZWIsIDB4YTYzODczMTcsIDB4YjNiYTFlMDEsIDB4OWY3MGM1YmYsIDB4M2Y3YzZjNmEsCisJMHg3YTcyNTA0ZCwgMHhmNTQzNzJlNiwgMHg3MzllODY3NywgMHgzZWE1NTE3OSwgMHg3M2RlM2EwZiwgMHgxY2U5MWQxMiwKKwkweDk5NGM3NmE4LCAweDdkZTkxMWY2LCAweDcxYmJkMjI3LCAweDQ4YjViZWE4LCAweGYwOGJlOGQ3LCAweDIyMDU3M2ZlLAorCTB4MTZjMDdiYzEsIDB4YTE1YjNkYjksIDB4NWMxMzlkOTcsIDB4ZGZlOGQ5ZGQsIDB4NmM3M2FiM2YsIDB4Y2JjZTI1ODYsCisJMHhlNTFlM2FkYywgMHg3YWRiNTZmZCwgMHhlMmU2NTNhMiwgMHgzOGMwNThlYiwgMHhmNGNiY2ViZiwgMHhkMWU4MTk3OCwKKwkweDgyYjdmZTc5LCAweDhkZDYyYTQyLCAweGY4ODZjMmNjLCAweGU3MGJmNTU3LCAweDAxZDEzZTg5LCAweGQ3ZjJiYmZkLAorCTB4NWRkZDcxOTksIDB4MWM2NmY1YjYsIDB4ODJkNjg0Y2YsIDB4ZWEzYzM4NmUsIDB4ZTZlYzBmYmEsIDB4ZjRjYmNlZjMsCisJMHhiMmU5ZTA4OSwgMHhjNTdiYjliOSwgMHhhMzNmYTgwMSwgMHhlZTVlN2JhYywgMHg2YWFmNmEzYSwgMHgwOTE0OWZmNCwKKwkweDQzNjdlMDdmLCAweGY1NjhlOGRkLCAweDg3MjYzY2UyLCAweDNhYzI0NmJkLCAweGIyYzY2YzczLCAweGVjODk3ODRmLAorCTB4MGRiZjU1MTMsIDB4OWRhZDRmZTksIDB4OTFiYWZhNzIsIDB4MTVkNzYzZTQsIDB4ZjI0NGNmOWQsIDB4MDczMDVlNTMsCisJMHhiY2FmOWZkZSwgMHg3YjcyMGQ2ZCwgMHhhM2JmNmJiZSwgMHgxY2Y3YzQ1ZiwgMHhmM2UzZjkwMiwgMHg3NjRkYmY3MywKKwkweDJlNzczNTlkLCAweDU2YjNlN2I3LCAweDk4NTQ5MTc5LCAweDNmYTFmMDRmLCAweDViYzU0ZjMxLCAweDE5NWY1NjllLAorCTB4YTBiNzE3MWQsIDB4ZDRkZTMwZmEsIDB4MmM1OWQxZWEsIDB4MmFiZTkwYzAsIDB4NzBmM2ZjYzIsIDB4NDBiYjNiN2QsCisJMHg1OTcyZDdiMSwgMHgyZDJiZGEzMSwgMHhjODYzZGYyNiwgMHg0MjBkOTYwZiwgMHhlMmExYzIzYSwgMHg4ZTgxNDU3NSwKKwkweDdjODYyMGU4LCAweDk0MjY2N2IwLCAweGI0NjVkOTVkLCAweGQzY2NmYWFmLCAweDVmOTgwNDE3LCAweDQzNjZkZjE3LAorCTB4OGNkYmQwYmUsIDB4YjMxYmM0N2UsIDB4YTgwZDFmOGEsIDB4ZmZjMjRkZjMsIDB4YjdiMjI1MzMsIDB4MmY4NDhlYjAsCisJMHhmYzc5Mzk3ZCwgMHg4NmM3OTY2ZSwgMHhiMDMyZWNlYiwgMHhhN2YyNDhhNiwgMHhmZGYzODBiNiwgMHg5MjdlNTkwNywKKwkweDhkZGFkMTBmLCAweDdiZDIwNDFiLCAweDY2Mzc3Y2FhLCAweGMyMzdkOTMyLCAweDVjOGNkYjc4LCAweGQyNWY4MGNlLAorCTB4M2ViZjQwMmIsIDB4ZmZhMDE3YTQsIDB4ZjdiMzVhMTcsIDB4N2JhMjA1ZTksIDB4YWRmMWU1MTksIDB4MTJlZmIxNTIsCisJMHhmZTFmYjkwYiwgMHhjYTg5ODE2NiwgMHg1NDdlY2E5MywgMHhjMzM2NzE3ZiwgMHhhZmZjODIzNSwgMHg4NDMwZjJhYSwKKwkweGM3Y2E5NGRmLCAweGYxZjI2NTMzLCAweDczMmYyMjRjLCAweDJlM2Y3MTk1LCAweDVjZGM3Y2UyLCAweDVmYjk3YjE0LAorCTB4ZmI3YTMzOWEsIDB4OGQ3YTRiMWMsIDB4OTAyODUyODcsIDB4OThkZDc5ZTgsIDB4YzUyZTQ5ODcsIDB4YTMzOTZmMTIsCisJMHg1ZGEzMzc4OCwgMHhhNzA3M2ZhMSwgMHg3M2ZkYjUxMywgMHhhYWZmZGU0NSwgMHhiMjc0ZTYyMCwgMHhlNTE0NzJiNCwKKwkweGE0ZTkyYzQxLCAweGRlODNjZmUyLCAweDc5ZmY5N2NmLCAweDY4ZGE0N2VjLCAweDk5YTNlM2FlLCAweGUwNDJkNGYyLAorCTB4MmU5Y2JmOTMsIDB4OTZlNTgzZGYsIDB4YmJkYjIzZDcsIDB4NzcyZjYzZjMsIDB4NzI4MDFlZDMsIDB4MzdkZjA0ZjEsCisJMHg3OWIzZTkyMywgMHhmYjk3YjE4NSwgMHg0OGJlZDE0YiwgMHhmODQ1ZjZlMSwgMHgzZDE1Y2JmYywgMHhkMjc5NGIxNCwKKwkweDExYjM2NTA0LCAweGZmMDExZmQ2LCAweGZjYzI4ZThmLCAweGVmNTA3M2NiLCAweGU1ODE3YjcyLCAweDBmYTRiOTllLAorCTB4NjdlMWRmYjEsIDB4M2VjNDJlYjIsIDB4MWMxNDdiMDYsIDB4MDU0M2I0NDEsIDB4ZWRkZDkyMzksIDB4MmQ3ZWZkOGQsCisJMHg2NDNmNDg3ZCwgMHg1YzYxY2NhZiwgMHgyZmYzYTgxZiwgMHg3YWY4ZTEyYywgMHhiMGUwMTQ3YSwgMHgyNWVhZGUwMCwKKwkweGMyOWJhZjZlLCAweGJmY2I1MGUwLCAweDdkYmQ4YzJkLCAweGUwNDNlOTJhLCAweDFmYmIwNTQ4LCAweDQ0NDIwNWNiLAorCTB4ZDBhN2FmN2IsIDB4MWE3ZTczMTgsIDB4ZTJkOTc4MGIsIDB4ZTQ5MThkNjAsIDB4ZWZkOGM5YzksIDB4Y2EwZDlhNGIsCisJMHhkM2NlZTlhYSwgMHg0Yjk2ZDcyOCwgMHg1YzYwZTc4NywgMHgxZmY4ZmJmOSwgMHg3OWQyMWJlNiwgMHhjMWE1NjFiZSwKKwkweGFlZmY0NWU1LCAweGJjM2JiMjRiLCAweGFjNDc4Yzc2LCAweDdjY2FmYWEyLCAweDUyYWY0M2JiLCAweDk0ZGZiNjNlLAorCTB4NmMwNWRiN2MsIDB4ZTU3ZDUxZDcsIDB4ZGExZjI0ZWYsIDB4ZDYxN2RmYzMsIDB4ZjFjNmM5OWQsIDB4ZmIxZGViMzYsCisJMHg5NTlkYzYxOCwgMHhlNzhkODM3YywgMHg5ZTM2YWMxYiwgMHgzYzZkMTA5ZiwgMHgyOWI1NjBlZiwgMHhjZjFiMDc3OSwKKwkweDRhNmQ1ODNiLCAweGYzYzZjMWRlLCAweDkyOWI1NjBlLCAweGJjZjFiMDc3LCAweGU0YTZkNTgzLCAweGVmM2M2YzFkLAorCTB4NzkyOWI1NjAsIDB4M2JjZjFiMDcsIDB4ZGU2YTZkNTgsIDB4MTUzOGQzYzEsIDB4OWUzNjkxZTMsIDB4NzhkYWIwNzcsCisJMHhlMzZhYzFkZSwgMHg5Nzk4MDc3OSwgMHgzYzZjMWRlNywgMHhmMTcwMDBlZiwgMHg3MjJkODNiYywgMHg5NDNhYzFkZSwKKwkweGYxZmYyMDc3LCAweDY3YTQ5NjE4LCAweDU0N2Y1ZmI4LCAweDdiMDZjZmE5LCAweDc4NjMzNGRkLCAweGU3NmFiNTVlLAorCTB4MTcxODJkZmUsIDB4ZmM3MjA5YWIsIDB4NWU3ODM5NTUsIDB4NzdiNDE0ZDksIDB4NDU3ZTMwMGEsIDB4MDRkZmIwNjYsCisJMHgxMTQ1NjVmZSwgMHhiMGQ1ZjBjMywgMHgxM2YzYzNmOSwgMHhiZGU3ZDlkZCwgMHhiMGEzZmEwMiwgMHgwM2JjMjk5NywKKwkweDE4ZWEyOWU1LCAweGZlN2MzZjdmLCAweDNiNTc3MTYxLCAweDY1ZDZlNzhmLCAweDNiZjA4YjdlLCAweDc4NDgyY2JiLAorCTB4ODcxOGU3YzMsIDB4MTNmMjUzYWQsIDB4ZmZhZDU2YjUsIDB4YjJlNjdmMmEsIDB4OTk1ZjcxZjksIDB4ZjgwODk5ZDQsCisJMHhiYjZkNDU5MCwgMHg4YzJmZjk4OCwgMHhkN2YxNWViYiwgMHg2YWI3ZGM2MSwgMHgxNTc3MWI1MCwgMHhiOGQ0MWIzMywKKwkweDg0NGJjZjNjLCAweGUxZGYzOWMxLCAweDZiMDQ1ZjFjLCAweDJhN2YwMTZhLCAweGMxY2ZlNjAxLCAweDUzYWUxNWE0LAorCTB4YTQ1ZTdjMTIsIDB4ODgxYmRkYjcsIDB4NDUzYmJjYmUsIDB4YWE2ODE0YzcsIDB4OWU2MDY0MDQsIDB4NmEyMDEyYTUsCisJMHhjNjU0ZDI4NiwgMHhmMjRjZDJhYywgMHhmZTlkMzg5YiwgMHhmMWJkZDRkNywgMHgwMzBmMjhkOSwgMHg2YzA0NDY3YSwKKwkweGY5YTgzYzIzLCAweGJmNTgwNDg1LCAweDJiZmM4MzM0LCAweDMzMmFlZmYyLCAweDNhNDdiZmZkLCAweGNjODJlYjUwLAorCTB4NWQ4MjM4ZjMsIDB4MmY4MGNkNjIsIDB4NWMyNjZlZjksIDB4Y2VhYjkzMzYsIDB4NDVlYjZmOTAsIDB4NzNjMzM1ZTYsCisJMHg5YjM3ZTk0MSwgMHgyZDRlMjkwNSwgMHg3NmYyODkzMywgMHg2NTQxY2NiNSwgMHg2OTU3NzRkMSwgMHhjZWEzZjAxMSwKKwkweDdhZTE3NWVjLCAweDA5NjZlY2FhLCAweGVlM2Q4NWY5LCAweGYxNDhkYjNjLCAweDMyZTk3YWU0LCAweGY2MDA0OWUwLAorCTB4NDhkYTYyZjgsIDB4MmVjODhhNzYsIDB4NDUxY2Y4YWIsIDB4MmYxZjQ4YmIsIDB4YWRjOTIyNzgsIDB4NjFlYmQ4OGEsCisJMHgwYTJhODNiMiwgMHgyZGM3YzkxOSwgMHg3Y2ZjYjIyYywgMHhjZmNiODRhYywgMHhkZjVkNGIzNywgMHhmYmQ3M2M0NCwKKwkweDg3OGZkNTE2LCAweGQwYmU4ZjJlLCAweDZkOWI3OTRhLCAweDViYzJmMTYxLCAweDZmNjI4YWZkLCAweDkwZTcyNDQ3LAorCTB4ZTkwMWI5M2QsIDB4OGYwNGYxN2EsIDB4MTY4OGUxMGQsIDB4ZjYyYTc4YzcsIDB4MWI0OWVjZjAsIDB4NzY3YmFlYzEsCisJMHhkNDVhZWMxNCwgMHgyYWVjYjc0MywgMHhmYTkzOTlmYiwgMHhiMWNhM2I1MCwgMHhkMGJhNGYwZSwgMHg5MDkyYmFlZiwKKwkweGMzZGRhYTM4LCAweDhkNjcxNDNjLCAweDY5NzlhZjFjLCAweDk5MjBlMjE0LCAweGZlMTNiZmE4LCAweGVhNjM5ZDBiLAorCTB4ODdmYjAyM2EsIDB4NTRiY2ZiZTUsIDB4NDI4ZWY4ZTEsIDB4NjM0YmUzODcsIDB4YTBkMzE3Y2YsIDB4NjEzZTI3ZDQsCisJMHg3NzFiOGQwYiwgMHg5NzBlMDQ1OSwgMHhmNWMwZDA0MSwgMHhmZGZmNjJiOSwgMHg3OGY2MjRhMCwgMHg3ZDcyODEyYSwKKwkweGYyMmVmY2E5LCAweGY5NzRkNTYxLCAweDdjYWE1ODY3LCAweGJhZTFkZjNiLCAweDJkMjlmYzQwLCAweGY5MDI0ZmFhLAorCTB4NzY3ZjY2YmMsIDB4MDY4OWVhMDEsIDB4MmFlMzVlZGIsIDB4NTJkNWY3ODAsIDB4M2EyMmZkZjksIDB4NWIxZmY0NmYsCisJMHgxZWIxNmUxZSwgMHhmN2JjNDc4ZiwgMHhhM2NiMjJiOSwgMHhjNTA5MTFiYiwgMHgyOGRlNGZlNCwgMHg2N2U0ZmVlMiwKKwkweGZlMjg4Nzg0LCAweDYzOGJhZmU0LCAweGVhN2IyZmJlLCAweGM5ZmM4NjczLCAweDViMWZmZTcwLCAweDYzOWRlM2NjLAorCTB4MDY4ZTAxNDcsIDB4ZjE0NjU3MjgsIDB4YzI4Y2E2ZWIsIDB4YmY1YThkZmMsIDB4NDQzZWJmNmUsIDB4ODU0MTEwY2UsCisJMHhkYzZjNjllNiwgMHhmYzExNjNhZiwgMHhiYTM1OTczZCwgMHgxNDdiMzdiZiwgMHhmMzEwYjFkNiwgMHhmNTkxYjU3MSwKKwkweDMxYzU3ZGRhLCAweDdlOTZhZmY3LCAweDMzMDdjYTAzLCAweGQwYTlmZDViLCAweDZmMzBiY2M0LCAweGIyYmU1MGRhLAorCTB4MGZhZmQ1YzksIDB4MzgzZjczOGQsIDB4ZTUzN2UwZTEsIDB4YjM3ZTcwMDgsIDB4ZjI3MmU2MzgsIDB4ZjkxZTljN2MsCisJMHhlMTE5YmQ3NSwgMHg3ZTA2NmFlOSwgMHgyNTVmYjA4ZCwgMHg5YmZmZGMyNSwgMHg5NjExZTEzYiwgMHgzYTYzNzY4OCwKKwkweGU0MTFmNzQzLCAweDM2MzdjZjA5LCAweDgzNjM3ZTI5LCAweDJhNzY3ZmEyLCAweDJjNTNkNDcyLCAweGU1MmNlOTUyLAorCTB4ZTg1MWI5ZjUsIDB4ZmJjYWQ3ZmEsIDB4YjY5YzRhOGQsIDB4MmJmMjYyNTEsIDB4ZWM3ZmY0OTEsIDB4MzhmY2U2ZTksCisJMHg3MWM2ZTcyOCwgMHhmMzBkZWYzOCwgMHhmNDUzZGZjZiwgMHhkM2Q4OWVjNCwgMHhhMDBjOWVjZiwgMHg5MWI1Yjk5MywKKwkweGY2MzA3NWYxLCAweDAyNzRiMTc0LCAweGY2ZDRiZmNjLCAweGY4OTAxY2Y0LCAweDBkOWIyZmIwLCAweDJlOWM1Zjk0LAorCTB4ZWYwYzU4YmYsIDB4NTdjMjhiNmQsIDB4Njk3ODJiOWYsIDB4YjAzYTNlODYsIDB4MzRhMDViZmIsIDB4OTAxMGY5NDIsCisJMHhmYTQwNTQ4MSwgMHg2ZmVjNTVlZCwgMHgxNDMwOGUwMSwgMHhmMWRlMDQyMCwgMHgzYWY0ZTdlOCwgMHhjZTdjMWVlNCwKKwkweDdmZTQ2ZDVjLCAweGNhMWJjODg0LCAweDM5OTk1NjlmLCAweDgzYTc3NGRmLCAweDBlZmU4OGZmLCAweDkzMzlkMzMzLAorCTB4OWZjZjIwYWUsIDB4ZmNmMjY1NzYsIDB4NmEzYzM4NjgsIDB4NDU2ZmY0ZmUsIDB4NzFjZjE5OGYsIDB4YzQxNjY1NzcsCisJMHhlYmRkZjI4NSwgMHg2ZjI2OTg5YiwgMHhlNzg1NzVkYywgMHg4YTRmYzE4NSwgMHhjOTQ5ZmFkMywgMHg4Zjg1MjdlNCwKKwkweDc0Yjk5MDlmLCAweDI0N2ZhODVlLCAweDAyMWZkY2M4LCAweDVjNTAyNjdmLCAweGE5MTdlNDNjLCAweDdjOThjZmZlLAorCTB4N2ZmMTVjZjksIDB4Y2QxZGZkMDIsIDB4NDk0NzExOWYsIDB4MDczMDhiMGYsIDB4NzRkZGZmM2UsIDB4OGYxMGRmZjksCisJMHgxZmQzZDAyMywgMHg5ZmQzZDBhMywgMHgzNDdmZGZiMCwgMHgxMWNjNjI3YSwgMHhmMGNjNjhiNywgMHgxZWIyYmI3MSwKKwkweDcwOGViNWI3LCAweGQzMjEyMDNmLCAweDU0Y2U5MTE5LCAweDliN2EwMmZhLCAweGU4NzYzMjUwLCAweGI0ZjMyMTdkLAorCTB4NGIxMzZmNGEsIDB4YmQzZWJmOGEsIDB4ZjBiZWMwNWQsIDB4YWZlMWFjZWYsIDB4ZDE0OWQ2ZWMsIDB4N2FiNTlkZmIsCisJMHhmYTBmMjhjYywgMHhmMTliZDczMiwgMHg5OWQ0YzQ5ZSwgMHg2YmNlMDcyZSwgMHgwMDZjOTkxMSwgMHgzZTVjYmIzOCwKKwkweDAwN2I5ZTMzLCAweDY0YmYyZjNiLCAweGNkYzFiYzg0LCAweDdlM2YyZTIyLCAweGRjZmZlY2FkLCAweDJhZmY5YzA5LAorCTB4N2RiZTBiOTYsIDB4NmM0ZDdmYzAsIDB4NGRmNzAxOTcsIDB4NDk1OGZmN2QsIDB4N2I4OGZkZWMsIDB4MzVlZTQ4NzIsCisJMHhmNzIwOGM5NiwgMHhlMmY4NTY1ZSwgMHgyYjVmMDU3MywgMHhlNzI5ZDZkYSwgMHhmYjQ0NTg5OSwgMHhmZGVjNTU2NywKKwkweDk0MmIzNDhjLCAweDQ1ZDc1MjczLCAweDc0NWJlM2E0LCAweDIyODVlNzg3LCAweGUyMTQ2N2FjLCAweGU0YzdlN2UwLAorCTB4Y2Q0YzNjZTAsIDB4ZmM0MDZkMmIsIDB4ZjFjNDU2M2UsIDB4N2RmZWNkMTcsIDB4YjNmYzE0NmEsIDB4NGFkNzAwODksCisJMHhmZDAxOTlmNiwgMHhjN2ZmNTk2OSwgMHgxMWU3NDhhYywgMHgzOWQ5MTU4ZSwgMHgwMzkwMDY5YywgMHg1OTk1ZGY4MCwKKwkweGZjMzFiN2JhLCAweGI1YTQ5NWQ5LCAweDY3ZjdkNDg3LCAweDY3YWVmZTJiLCAweDUyNjdlNDE0LCAweGYxYzNjZTBlLAorCTB4NGMwZTdlMWEsIDB4M2VjNWNmMmQsIDB4ODhiNGIwMWUsIDB4ODBmZmI5ZmIsIDB4NzNmYzBlZmMsIDB4ZTM1OGE0YTgsCisJMHg2NGE4ZmVlNywgMHhiNWY3M2Y2NCwgMHgxYWRjOGY3ZiwgMHhjYmE4ZTg1MCwgMHg3ZDllZDkxMSwgMHg0MGZiZjYyMSwKKwkweGRkNjBlMGU3LCAweGI5MTU3Y2VmLCAweGFhNmY2ZTExLCAweGRiZDg5ZWU1LCAweDdhNTk2OTdiLCAweGQxYzM4NzljLAorCTB4MjRlN2I0YzgsIDB4MjhkZmYxNmUsIDB4OGY1ZDJkZTAsIDB4NzdlOTY4ZjMsIDB4NWZmYWUzMjUsIDB4MWE1OGMzODUsCisJMHhlNzhjNzNmMywgMHhmZjMxZTg2NywgMHg3ZDc5ZjljMywgMHg5NGJlMmJhOSwgMHgxOThmMzZlYywgMHgwN2Q4MzdmNSwKKwkweGI5NWY2NzE0LCAweGNkMWYyNTM5LCAweDZiNjdkODJhLCAweDkzYmU5NmE5LCAweGVmYTY0NzRhLCAweDQwM2JkMmU0LAorCTB4ZmM5Y2FhZGYsIDB4NTM0YzYxMTcsIDB4YTg5OWJjYTgsIDB4YTU2OTliYzgsIDB4MjlhZmRmYjEsIDB4OGU0OGFmMTgsCisJMHg2MzJiYWYyYywgMHg3M2RiZTcxZiwgMHg3OTc0NGU3NywgMHhmYjM3OWVhYywgMHg0ZjFiNDE0NywgMHg4ZjI1YmQ2ZSwKKwkweDY5NDc0ZTYzLCAweDc5MjFmYWE5LCAweDcwODdlYWFjLCAweDVlODY4ZDNjLCAweDBiZDEwYzQ4LCAweGNjZTQ1MTBkLAorCTB4MzYzMWMwNjgsIDB4OWRiNTFmMDQsIDB4OThhZmU1MDIsIDB4YzBhNmY5OGQsIDB4MzlkODlkYWYsIDB4OTZjN2RlZTQsCisJMHg0ZjEzODg1MSwgMHhjODdmOGQwZiwgMHhhMDQ3YWY2MCwgMHhiMWE1ZGRlMywgMHhiY2EzN2ZjZiwgMHhkYjdjMzdlOSwKKwkweDQ3ZjlkMjM2LCAweDI4YzVkNWEzLCAweDMxNzM2MjNmLCAweGIxOWZlYzNiLCAweGY2ZjI5NWIzLCAweDk0YWQwNWM2LAorCTB4MDI5ZDY2ODcsIDB4ZjQ5OGZkZTUsIDB4YWI3OWY5MmUsIDB4MzBhN2RlNmMsIDB4OWU1YzM2N2QsIDB4NWUzOThkNmMsCisJMHg5N2Q4NzI4YiwgMHgyOGM1MzdmNiwgMHhmOGViY2Q3ZSwgMHgzN2Y5M2E0YSwgMHgxNTNjYTNhZiwgMHhiMzQ3ZWUyNCwKKwkweGY3NGVjYzBkLCAweGI5N2NhZmE0LCAweDIwMmY1OGZiLCAweDlhMmYzMDEyLCAweDc2M2VlOGM0LCAweDdhYzdlMWE3LAorCTB4MDUxYjQ3Y2MsIDB4ZTY1Y2ZlM2UsIDB4OTc0ZmY5ZTcsIDB4ZjBhM2ZjNzcsIDB4MzFhMGU1OWUsIDB4N2Y1NDNiN2YsCisJMHhmYjRkOWE1MSwgMHhjZmU1NjlkZSwgMHhmMzliZjZiYiwgMHg5ZWE1ODQ5ZiwgMHhjMTllMTViNiwgMHhhNzUzZTFmMywKKwkweGVjMWM1MzI3LCAweDZiOGYwM2M1LCAweGJjNWFlY2VjLCAweGRmN2U4MGM3LCAweDdlODYxZTBiLCAweDM1ZDMyOWEyLAorCTB4OWMzYjI0NzEsIDB4YWU5MjdmMzEsIDB4YTg5YTUwOGMsIDB4ZmE1ZTdhOTQsIDB4Zjg2ZDlkMDUsIDB4ZjdmNzNiZmIsCisJMHhiZDY3ZTg0OCwgMHg3MjRjYzA3OCwgMHg5ZTgxZWE3ZiwgMHhlMzIxNTVmOCwgMHgzZTcxOTYyNywgMHhmZTNkMDZiNiwKKwkweDM1YWYwMDE5LCAweDA5MzI3M2QzLCAweGY5MmIxZGVmLCAweGNlNzk5MTczLCAweDYzMmJjMmQ0LCAweDBmOWQwMGE0LAorCTB4NmI1NzkxZGYsIDB4MmViYmE1MGUsIDB4Nzk0Y2Q2YTksIDB4NjM5ZDVjZTQsIDB4ZmNlYjFkOGEsIDB4ZjRmYzQzMWMsCisJMHg0MDgyZmRkYSwgMHgxMTJlZGQ3ZSwgMHhlMTlhZWY1MCwgMHhlYzdhODZiYSwgMHhjM2ViODkwZCwgMHg0OTZiNTNhOSwKKwkweGU3MmE3NWFiLCAweDJkZTQ3NjFlLCAweGM3ZWY4MDM5LCAweGYxYTdhZjRmLCAweDdiNjQ1OTNiLCAweGU1YzY1OGNjLAorCTB4OTkwNjhiZjAsIDB4ODBmMTdkZTYsIDB4NTVjOGU3NDgsIDB4N2M2OWRlYmMsIDB4MGYzMGNiZDYsIDB4YTZkZWEzZTAsCisJMHhhN2Q4N2JhNywgMHhlNTExNGU4ZCwgMHg4MTM0ZTlkMCwgMHhkZjJkODJlZCwgMHhlZTg1NzhlOSwgMHgwMjg4ZWM5OSwKKwkweGI5NGEyZmVmLCAweGE5NmNjYTlmLCAweGY3YTc3ZjQ0LCAweDc0OGYyZTc3LCAweGJmYTU1ZjdlLCAweGE5NjQzM2M5LAorCTB4NDljMGVkMGMsIDB4ZmY5NDI2OWUsIDB4MzZlNGI2Y2MsIDB4ZGYyNGYxN2MsIDB4ZTY4NzQzYmYsIDB4Y2ZmYzAzY2YsCisJMHgyMjdmYzE3ZCwgMHg2YjIxZjcwZSwgMHhmNzVjNzhjZiwgMHg2YTc2YTUwNywgMHgxZjBmNDViZiwgMHhiMGY0NDJiZCwKKwkweGUzZWZjOGM1LCAweDhlNzE3NTc4LCAweDg1OGViMDAzLCAweGNmMTEwMWQ2LCAweDgzNTIxODRmLCAweDJhNmRlNzk0LAorCTB4OGI3NGYyZTMsIDB4ODE2MzBmY2EsIDB4N2QzZGUwMWYsIDB4YzUwN2JmMDYsIDB4Y2VhOWRhMjYsIDB4ODQyNzA3MjYsCisJMHg1NTllYTNkZSwgMHgwNTk3YWNhNiwgMHhjMmY5ZjEzMiwgMHhkODM3NzdmOCwgMHhmNjE1OGMxZCwgMHhiMDhiMzdhNiwKKwkweGVmODk4NWZlLCAweDdhODZjODZlLCAweDVlNzhlZjQ5LCAweGIzZjc3OGNmLCAweGIyYjE4OTZjLCAweDlmNWUwY2RlLAorCTB4OTM2N2VlZjYsIDB4OWJkMTVlYTAsIDB4MzA5NWViYzksIDB4OWJiMDc4ZDQsIDB4YmQ5YWIzN2EsIDB4YTRiZTM4NzksCisJMHgwZjE1YmYxOSwgMHhmZDdmMTQ3MiwgMHg0NWQyNmY1MiwgMHgyODM1NWY4YywgMHgwMzFmODdlYiwgMHhmYmVjZTNjZSwKKwkweGUyZWYzYTQ3LCAweDc4ZmQ1YjM0LCAweDg2Yzk4MzJlLCAweDM0MTlmOGIwLCAweDYwNzdkYzg1LCAweGZmMjQwOWE5LAorCTB4ZjMwYmZiZDQsIDB4ZjYzZjdmNDUsIDB4ODRmZDk5ZDcsIDB4Mjc1OWJiZGYsIDB4YWQ4MDczZDksIDB4N2UxNDVmZGQsCisJMHg1YzJlN2I3OSwgMHhjOGQ5NmRlZSwgMHg4YzRlNzg1YywgMHhlZjA5NjZiMSwgMHhkNjRjMDgzMywgMHg3OGUzYzE3ZCwKKwkweDg1NWY5YzRlLCAweDE4N2Y5ZDQ3LCAweGM4YjViMDVjLCAweDNkNzA0MzlmLCAweDcwYThlMzRmLCAweDc5MzdjYjVkLAorCTB4NmI3YWRlNTEsIDB4MDQyN2FlNTksIDB4ZTA4NGQ3NGYsIDB4NDU2YzE4MGYsIDB4MGYxZGFjZGEsIDB4MWI1ZDNlZTEsCisJMHg0MDIwOWMxMywgMHgxYjdjYjkzZCwgMHhiMWI1ZGJlZCwgMHg4ZTA4MWZjMSwgMHhlZjgxYmE5MCwgMHgwOTZmNWI2MywKKwkweDI4OTc2M2VkLCAweDliOWQyMWI3LCAweDIxNmVkNjhjLCAweGI4ZWViMTkxLCAweGU2MGMxOTg0LCAweGU1ZDYzMWQ5LAorCTB4NDA2ZTdiYzUsIDB4ZDhlZjc0NzcsIDB4MWM3NDY1OWIsIDB4OGJlYjM4MDAsIDB4YzdhMWY5YjQsIDB4ODNmYjNhMTUsCisJMHg5OGU2MGYyMiwgMHgwMWNlNzk3NiwgMHgwNDdiYmE1ZCwgMHhkYzcwZjc4NiwgMHhhODhjMzc4MywgMHg1ZGY2MTZmZiwKKwkweGE0YmU2MjM0LCAweDExYTJlN2EzLCAweGViMDNiZWU5LCAweGYzYzc0ZTMwLCAweDZmZjk4OGM2LCAweGJkNWViOTYzLAorCTB4OTFlNzRhMmYsIDB4NGYxYzRiZDYsIDB4N2FlZWIyYTcsIDB4ZTllMDE1MmEsIDB4YmRkMDJkNTgsIDB4OTI0N2Y1YmMsCisJMHg3ZDdkNjBlNiwgMHhiMTkyYWUyYiwgMHhlNzg3NTVlNSwgMHgzOGI0YjkyMCwgMHg3MmMyOWZmYiwgMHg5NTM4MWIyNSwKKwkweGNjYjQyNDBhLCAweDEwZjY2N2E1LCAweDRkNjJiOTNkLCAweGU4ODdiMzNjLCAweDhhNGYxNmM5LCAweDE3NzJiZWE2LAorCTB4MjgwY2NlZWMsIDB4ZmE2ODY2MzcsIDB4ZWFmZWU1MzEsIDB4ODNmNDM2MzIsIDB4OTQ5YTk4ZTcsIDB4ZGI2NjVjN2QsCisJMHhlZWI4YzAxOSwgMHgzYmMxOTczMiwgMHhjMmRlMzIxMCwgMHgzMjYyY2RiZSwgMHgxYzExZWRjMiwgMHhjYmQyOGQ3NCwKKwkweGUwYWQzZmNmLCAweDFjNTI4NDJiLCAweGY3Y2YxZjdhLCAweGVmYzQwYWY0LCAweGJhN2E2ZDFkLCAweGNiZGNkM2M3LAorCTB4MzVlNmFlZWQsIDB4MjAyZWNmODIsIDB4MGRiZGY4MWUsIDB4ZWQ0MGFmNzcsIDB4ZWJhN2RlZWUsIDB4MWJlZjExOTMsCisJMHg0NzAwMGYwMCwgMHg3ZDg0ZjhkYSwgMHg5MzQ3MTEyYywgMHg0YWQ1ZGNlOSwgMHhkZjc3NTYwNSwgMHhiMzhlMDMzOSwKKwkweGRkMDIzYmUyLCAweDliYmY1NTY3LCAweGIyYmZjMmEwLCAweDkxY2U5MWE5LCAweGE0NWU3YzAxLCAweDRkOWQ3NTRmLAorCTB4NWNlOTQ3ZjYsIDB4OTc4OWNhZDUsIDB4NjE4N2E4MGQsIDB4MzQwNjk3N2QsIDB4NWJkNmQ0ZjgsIDB4Y2FmYWRhM2MsCisJMHhkMWZhZGE4ZCwgMHhmMjllZTUzMiwgMHhmOTBkMzYzNCwgMHgyMDk5NzhlOSwgMHhiNTI0MzllMiwgMHhmOWQ2NTFmZSwKKwkweGU3NWVmMWI3LCAweDBhNzlkMTZlLCAweGU4Y2RiM2U5LCAweDdlZmE4MTlmLCAweGJhYTJlOGI3LCAweDNiY2YwZWRhLAorCTB4Zjg5ZGYxMTgsIDB4YjFmMTAwZTEsIDB4YzViOWZjNDAsIDB4ZjgzNTRiMjAsIDB4ODE3Njk3M2QsIDB4YjYwNTc2ZTgsCisJMHgwZjY3ZjNhYiwgMHhmZDc1NGZiZCwgMHg1NTRkZmFmMCwgMHgxYjljNWFlZSwgMHg0NzMwYmJlOCwgMHg5MGVkMDkwNSwKKwkweDkzMTY1MTdhLCAweDIyMmY4OGYzLCAweGJkZjk3NzllLCAweGEzNmYwN2MyLCAweGVlYjgwM2Y2LCAweDdkODUyMjQyLAorCTB4NDRmZWViYmEsIDB4YmRlNjE3OWYsIDB4M2E1NmNkZWIsIDB4MjE1Nzc2ZTcsIDB4ZjkxZDgxZDAsIDB4ZDZlNzQ3NWUsCisJMHgyZjc5ZTNlNiwgMHg3OTAzZWYyOCwgMHgyZWYyODE2OCwgMHg5MjI2YTFmZCwgMHgxMjhkMzNlZiwgMHg5Y2U1NzdjOSwKKwkweGU0MmYyYTk3LCAweGI2ZTdiNTE3LCAweDIxOWU2N2U2LCAweGU3YmVlYjNiLCAweGI1NzlkMjc2LCAweGMxNzIzOWM5LAorCTB4MmQwZmE4ZDMsIDB4NDcxZGZlN2MsIDB4MTg2NmRmMDQsIDB4MzRlZjIzYTcsIDB4MzI3MWNmYzksIDB4NjFkNzJmM2YsCisJMHgyZjY4ZTQ1MywgMHhmZDc1NTFjOCwgMHg1MGUzYmZiMCwgMHg2OTIyNjFhZSwgMHg5YmNkMWU0MSwgMHg1ZGE5NTY2ZSwKKwkweGY4MjgzOTI2LCAweGZmZTg3NTZiLCAweGRkZTY1MzhlLCAweDc1YTc2ZDVmLCAweDQ4N2EzZGE3LCAweDMxNjc3NWMwLAorCTB4ZTYwMTY2ZWYsIDB4N2MzYTgyYmIsIDB4NTVmOTUwZWMsIDB4ZjhiNWQ3ZWQsIDB4NTY1ZGU4MGIsIDB4NWI2M2I1YWYsCisJMHg2NWUzZDc0NSwgMHg2ZGJiNWYzMCwgMHgyZGNmYzhjMCwgMHgxZmE4OGQwNiwgMHhkZWY4ZTBlZSwgMHhmMmMzZTM0OCwKKwkweDUwZWU3NDc1LCAweDQ3MzBmYmUyLCAweDc2ODA5ODNmLCAweDM5YTNmYWNlLCAweGY2MDhkOGUzLCAweGQzYWNkZThkLAorCTB4MTQ4MzExYzgsIDB4ZjMzNzkxYTcsIDB4NjdmMmI1NzMsIDB4NzcyYjQzYTEsIDB4YTM5NjUxYmUsIDB4NGYyNDVmNjksCisJMHhkZmRmYjRkMywgMHgzZmE5YTg1OCwgMHhiY2Q0YWNlMCwgMHg5ZDUzNjBmZiwgMHhjZGIyNmVhNiwgMHhiMTZmYmNkMywKKwkweGUzZDRkNjJmLCAweGRlNmI5NzczLCAweGE1NThlMzFmLCAweGY1YmQzNzY5LCAweGVkMDEyNmEzLCAweGMwNzdiMzcxLAorCTB4MDZlODc4MDUsIDB4MWU0YjI4ZGUsIDB4MTJkMzIzZDIsIDB4ZTMyODY1ZTAsIDB4MmM1NjJkMGEsIDB4NzQ0ZGYzYmIsCisJMHgzYzdiYjY0ZSwgMHhlYzQ0OTdlOCwgMHg3NzNhMWRmZiwgMHhjOTdjNGU2OSwgMHhkZmU1MDM1YywgMHhmYzVhYmUwYiwKKwkweGM5YTAwZTdlLCAweDNkZGJmNjg1LCAweGYwZTM2ODRmLCAweDVmMzhhYmM3LCAweGI5NDM2NWE5LCAweDI4MGFjMWViLAorCTB4NjdiMDVlZjMsIDB4ODFlOTdiZjAsIDB4Y2M3ZjcwN2IsIDB4NDVkYjhjNzEsIDB4MmVjOTk5YWYsIDB4NTM3Njg5OWEsCisJMHhiMDcxYmY4OCwgMHgzOTdlNjZiYSwgMHhiZTQyN2JmNiwgMHhmNTgyZjkxNywgMHhiYzBhNjkzMiwgMHgzYjA4Y2ZiNywKKwkweDM1ZWU3YThiLCAweGViY2JmNTIzLCAweGU2ODVkMDFkLCAweGNlNTk3ZmY3LCAweGNlYjNjMWU1LCAweGZjNzE3YmRhLAorCTB4YjJkMDNlOGUsIDB4N2RjZjRmYzgsIDB4YWViZjQ0NjgsIDB4MDEzZmFmYTMsIDB4ZTcwY2Q5ZjUsIDB4Y2ZiNDQ2ODcsCisJMHg3YTJiOWU4NywgMHg2MWM2MGM0ZSwgMHgwZTFmZTM5YywgMHg2M2RlMjNlOSwgMHhhNDZlNWVkZCwgMHg3MjJiNGZmMSwKKwkweDdhM2JlNWJkLCAweGY3OGI0ZjNhLCAweDg2NGE2YjM3LCAweGUxY2I3M2U0LCAweDYzZWYxZmEwLCAweDdiZjNiNGI3LAorCTB4MzY4ZTc4OWIsIDB4ZjkwNjljOTIsIDB4YmNhODYxZmMsIDB4ZjQxZDM2N2QsIDB4NGYxYTRjYzEsIDB4OTc5NjBmYTMsCisJMHgzZWRlZTlmOSwgMHhmYmNkNmZjOCwgMHg1YzM0OTcyYiwgMHhjODI1N2NjNSwgMHg0Y2YzZWQ3MSwgMHhiMTk2MWU3ZSwKKwkweDczZmEwMzAxLCAweGVkMzVkNzIwLCAweGZiOTVjYjFiLCAweGRlNThkMzljLCAweDJlMDcyMDE3LCAweGRiZGYyMzM4LAorCTB4OWY4YWJiN2QsIDB4YWFlMGI4MzMsIDB4MTY3ODdkYTMsIDB4NDdlNzg5ZjAsIDB4M2Y4NjFkOWYsIDB4ZTFkYmQ3OGUsCisJMHg4MWE0NjVlZCwgMHg2NjFiZmQ5MCwgMHhmZjcxNTdmZiwgMHg3MjI4ZTVlYSwgMHhiZmIyYTJmYiwgMHgwMTQwODRmYiwKKwkweDMzYjc1NTBhLCAweDg1NzdlODhlLCAweGE1ZWQ3NWI5LCAweGNmOTdkYzQyLCAweGRlYmZhMmI3LCAweGVlODEyM2YyLAorCTB4ZmZiMmZmYzEsIDB4YWMzYjM0YWQsIDB4NTRmODc4ZGYsIDB4NzY5N2RlMWEsIDB4ODY5NTNhMWYsIDB4MGNkYjg5ZjcsCisJMHhjZjY4Y2RmNiwgMHgzZGQwN2QwMywgMHgzZjVlOGVlNCwgMHhhODdlZGZjMSwgMHhiNzlmMWZiMCwgMHgxNDBlMGFmNywKKwkweGViOWVlZWM5LCAweDM2NGViNDBkLCAweGEzZmQxNWIwLCAweDNhZTA1MTdkLCAweGFiZWRjZTU4LCAweDJhNzZlNWMzLAorCTB4MTM5ODJlZGQsIDB4Yzk4ZjdlZjUsIDB4MWU5MDEzZTcsIDB4NWMyMTNlNDAsIDB4ODIwZmMwNDcsIDB4ZTY2ZGJlZmEsCisJMHhkNGY2NDhhNiwgMHgyN2RmMDU2NSwgMHhkZTE5MTliNywgMHhmZTgzNmRmYiwgMHg1OWQzOGViOCwgMHhiZGY4OGRhNywKKwkweGIwYzM5Njg1LCAweDcxZDcwMTJlLCAweDFjNzg4MWVlLCAweGExODE4MzdmLCAweGY3YzJhMTlkLCAweDAzZTA1NjcxLAorCTB4YWJmYmZmNWMsIDB4MmRjZjBjMGQsIDB4MjdhZDU5NmYsIDB4ODFiZmJmN2MsIDB4ODdmYTI3ZGIsIDB4MDMzNWJkN2YsCisJMHgyZTgwY2JlYSwgMHgyNzBmM2JmMSwgMHg5ZDM4ZGY1NiwgMHhiZmJlZTMwMSwgMHg3NTY5ZGI4NiwgMHgyZjg4MWIwZiwKKwkweDZlMTNhZDk3LCAweGE1MGU0YmRkLCAweGZmNmU5NTZiLCAweDcwZDNhMTQ2LCAweGRiYTcwZGZhLCAweGU2YmFmNDYxLAorCTB4ZGJlYmQxZWIsIDB4OTBlY2I3ZTUsIDB4NjFmN2E4MTksIDB4NDM4Y2U3ZmYsIDB4NzMxZWZhM2EsIDB4MWE3ZTQwMWMsCisJMHgwNzE4NjEzYywgMHgyYWRhNGY3MCwgMHg2M2MzYzAzOSwgMHhhN2JlZjVkMywgMHg5YzZlNTBkMiwgMHg2ZGY5ZWRlMCwKKwkweDdmMmUwNTdiLCAweDdkNzFjYmVjLCAweDg2NDZkZDE5LCAweDJhMmUwOGY3LCAweGQ5NTE3NmZiLCAweDBhMGIzYjM3LAorCTB4NjJjZmM4ZjEsIDB4YTljYTEyNjAsIDB4ZjljZTI1NmMsIDB4MWQzNTgxOGEsIDB4ZTQ1MmZmNDYsIDB4OGZmYTY3ZjIsCisJMHg4N2I3N2I2ZCwgMHgyYjdmZWZkMCwgMHhjYWFiNzRlNywgMHhlNjQ2NjljNSwgMHhmN2M1NmMzYSwgMHgwNDVmOGQwZiwKKwkweGUwNmNiY2UzLCAweDI4MjczNWU3LCAweDA5Yzk0ZGUzLCAweDUyODIyYzM2LCAweGU0ZTVjMTU3LCAweGQ0MzgxNTZmLAorCTB4M2UxNDlmZmEsIDB4NDM3ZjI3NjAsIDB4ZTY2ODVjZjgsIDB4ZDFiNzlmZjgsIDB4ZjhlYjhjZGYsIDB4YmQ3NWM5OTksCisJMHgzMDVmZGUxYywgMHhlYTFiN2NlMSwgMHgzZjQ5ZWViZCwgMHhiOWRmZTNjOSwgMHhlZTFkOTA3MywgMHhhMjdmZjA1NiwKKwkweDYzY2YzN2ZjLCAweDM1MzJjZmVlLCAweDcyZDdmNjhlLCAweGU5MDk2OWY0LCAweDY4YTUzMmQ5LCAweDMwZjE0OGRjLAorCTB4ZTY2Y2NkZjcsIDB4YmFiYTAxNGEsIDB4NWFhNTQzOTksIDB4YWFmYzc0NWYsIDB4ODJmYzgwNzEsIDB4MmZjNDBkZWIsCisJMHhiOWU5ZDMzNywgMHgwNTUzZWZkYSwgMHg4ZTQ2ZTllZSwgMHg0YTk3ZDYwNywgMHhiNmU0MWI3YSwgMHg2NzkyMTY1OCwKKwkweGZhYTBmMTUwLCAweGZiMjk5NmUzLCAweDViMWViZjY5LCAweGNmZWUyOGM3LCAweDhmODRkM2Q4LCAweDg0ZTc2ZDE1LAorCTB4NDFlNzE4NTYsIDB4MDJiMDZjODMsIDB4MzYyN2NmYmUsIDB4ODUzNGJkYWQsIDB4NjI2YzlmYjEsIDB4M2EwYjA1Y2MsCisJMHg1Y2NjYzliYiwgMHg2YzdkMDM3NywgMHhkODFlYTg5MiwgMHhiYmZhYTM2NCwgMHg1ZTU0ZWM5YiwgMHhhMmM3MzhiNiwKKwkweGE0ZTA3OWZlLCAweGVkZTIwYTY3LCAweDY3MWVkNjQ0LCAweGVkNzNjYzJkLCAweDQxZjA4MWFjLCAweGZkZjQwNjNiLAorCTB4Mzc2YjQyOTgsIDB4MGNjY2Y0ZmEsIDB4OTQ3YTM3ZWQsIDB4ZjAyOGFkZWYsIDB4ODMzMzc0M2YsIDB4ZmNiZTQwYjksCisJMHg4ZTgzZTcwMiwgMHg0NjdmMWJlZCwgMHhlNmIxY2Y3MiwgMHg0OWZhMDM3YSwgMHhiNzE3NmRmOSwgMHhmMWJkZGQ2MiwKKwkweDVmNjgwZDc3LCAweDA0ZmEwMDdjLCAweDdlZWMwY2U5LCAweDllNTAxMzY2LCAweDgxZGEzMzljLCAweGE2NmY5YTBlLAorCTB4ZWIyZjM4ZDAsIDB4NzdjODBkODIsIDB4NDMwMjYzZGUsIDB4ZjdhMGZjZmEsIDB4ZDcxYzcxYmEsIDB4ZTEyZDc0NTcsCisJMHhlNjc0NGRmOSwgMHg0OGFkMmQ5ZiwgMHhmYmI4ZmMyMiwgMHg3ZjdjNzVmMiwgMHhmN2ExNzQ4YiwgMHhmOWVmZmEyOSwKKwkweDg3ZWUwMjQzLCAweDlkZmRhMzc5LCAweDQ2N2ZlYzRhLCAweGI3YWY5MGNmLCAweGE0MTMwNmQ3LCAweDAyZjg3MjA4LAorCTB4YTM5NzhiOGMsIDB4ODY1ODFkNzAsIDB4YmQxOTM3YjcsIDB4NDEzY2YwNTMsIDB4ZTFjNzQyOTMsIDB4ZmExNThiZWQsCisJMHg5NDFiNGMwNCwgMHgyMTMyMjllZiwgMHhjMTIzOWY4ZCwgMHg1MjU4MTY5ZiwgMHg0MWY5MzI2MiwgMHhlN2UwMzhmZSwKKwkweGFiYmFiZTk2LCAweDgxMWU5NjIyLCAweGNmZjVhODdkLCAweDc2MjE4N2Q4LCAweGZjM2EzNDdjLCAweDQzN2UyNWIyLAorCTB4NDMyOWMzZTYsIDB4NDMyM2Y0NzUsIDB4MWZhMDdmZWYsIDB4ODJmYmU5MTksIDB4ZTNjOWFjYTYsIDB4Yjk3NzhhNDYsCisJMHg4M2JlYzAwNywgMHhjMzAwZWFmZCwgMHhmNDgyOWVjOSwgMHg0ZmNhOGQzZSwgMHg5MWQ5NzQ4ZSwgMHhjMTcxY2M3ZiwKKwkweGQ4MmZhODNkLCAweDNiZjIzYTVkLCAweDdiNWFiZGRhLCAweDg3ZTE0MWE4LCAweDdhMWVjNTA2LCAweDNmZWI0MmI0LAorCTB4NWVkNDlmODEsIDB4ODRhNGZkYzEsIDB4M2ZlMzRjZTMsIDB4ZmYyNzNmODUsIDB4MDU3YzhjYzksIDB4ZmQ4MzRlZjMsCisJMHhmZWQyMjU3OSwgMHhjN2FlZDU1NCwgMHgyZWQ4MTM3ZSwgMHg3NDA2NzNhMiwgMHhiZTE1ZjQ4ZSwgMHhlMGE4YmZjZSwKKwkweGViZTU1NDdhLCAweDQ4ZDdjODY1LCAweGFmOWNiZGJmLCAweGE5NmRjN2MzLCAweDFjMGJmOWFhLCAweDdiOTQ1Yjc3LAorCTB4ZjE1N2Y3MTAsIDB4MTM5ZmRhZjEsIDB4ZTdlZTVmMDgsIDB4MWY0ZjA4NTIsIDB4YjU5Y2U3YjMsIDB4MDMxZjk3NDAsCisJMHgyZTgwZmIxYywgMHhmMTlkMzlhZiwgMHg5YWZmZDA0OSwgMHg2YzlmMTljYiwgMHgxZDAzOTIxZCwgMHhiZjUzYzVjZiwKKwkweGE3MTc5MzZkLCAweDE5ZmQ0MmI0LCAweGVmMTg3YmE0LCAweDhhM2FkZTkzLCAweDFjZjQzZTZmLCAweGJlNzUzZmU3LAorCTB4NTJjYmZjMGYsIDB4MGQ4YTlmOTAsIDB4ZGEwM2EzNDEsIDB4MjYyZWZiMzMsIDB4N2M1ODFkYTAsIDB4ZTQxNGZlZTQsCisJMHg2ZTcwNjhjMywgMHhkY2UwNTRhZCwgMHg0YmRhZDhmOCwgMHhmMDFlOWMyOSwgMHg0NTVhZWUxYywgMHhmNDlmYjliZiwKKwkweDZiZmYxMTFiLCAweGRmYTIzMjM3LCAweGQ5N2VkN2ZlLCAweDQ5ZmM3YzgxLCAweGZhODRiYzVmLCAweGYxYTNlM2YwLAorCTB4ZDdmZjk0NWUsIDB4M2E3Yzk5OGUsIDB4NmYxMGZjODEsIDB4OGZiNWM4MjIsIDB4OTFmNzAzMGQsIDB4MmY0NDc5YmQsCisJMHgzZWU4ZmZhMSwgMHhjODNkZGJmNiwgMHg0Y2Q3ZWU4ZiwgMHhiNWIxZjk2OCwgMHg1MWQ3NWQ3ZCwgMHhkZGY1YjVlZiwKKwkweGYyYzQ1NTdiLCAweDg3ZTVkMWE1LCAweGQzOGY4ZGY2LCAweDZmZmFkNTdhLCAweDI4ZWQ5OTM3LCAweGI5MTEzZjQ3LAorCTB4ZmJkYjU4OWMsIDB4NmJiZmQ5MmEsIDB4YzBjYzZmMDcsIDB4NDdjN2VhMzgsIDB4Y2EwOTRmZmYsIDB4Mzc5YmY3MzUsCisJMHhiOTllNTA0YSwgMHg4MjUxYjhkZiwgMHhjNzFmZWVlZCwgMHgyZGQ5MjI3YiwgMHg4NGY0YjM3MSwgMHg2NjVmNTU1NywKKwkweGUyNmEyN2JmLCAweGZhMTQxYjQ1LCAweGQ1ZGNlZWM4LCAweDU3ZjAwOTM4LCAweDAzODk2ZTdjLCAweDdiNmFiNmYzLAorCTB4MTM5ZDE0ZjEsIDB4NzlmZTJmZGYsIDB4MjFjM2NhN2QsIDB4MjIwMzNhZmQsIDB4Y2U4YThkZTUsIDB4MGVhZmM3ZDUsCisJMHhhYTQ3Y2JhMSwgMHg5NGVmOWEwYywgMHgwZjM4ZDU3ZCwgMHgyZGY3ZTJiNiwgMHgwMjc1YzU2ZiwgMHhlYzBlZmEzYSwKKwkweGJmYzg4MGI2LCAweGYwNDZiYjJmLCAweGY2MDFiZmExLCAweGIyM2Y3ODRiLCAweDkyM2RhZWE3LCAweDk5MTBmNzQyLAorCTB4YmQzZjljZTgsIDB4MWM1M2ViMDgsIDB4NTYyOGVkZGIsIDB4ODcyNmE3Y2MsIDB4MDJjYjRiZDgsIDB4ZTgwOWJmM2EsCisJMHhlNGNmYTlhOCwgMHgyMDNmN2IyNywgMHg2MmJhYTQ1ZSwgMHhmZDc0M2Q0NywgMHg4NWIyNjMzNywgMHhkYzlhNzEwOCwKKwkweDFjYTBlNzc3LCAweGMwZDc4ZjBmLCAweDViODQxOGNmLCAweGE3Y2VhZmI1LCAweGE2NTFmOGYzLCAweDA0MmRkMjQ3LAorCTB4OTkzYjlhYjgsIDB4MTYxZDc4ODQsIDB4NGI5YTY5ZDcsIDB4ZjhmMGEyZjEsIDB4ZGJiMDNkOGUsIDB4OTNlY2ZkOGMsCisJMHhhYmMyMTI3NSwgMHg4ZmI4YTVkYSwgMHhjMGU0MTEzZCwgMHg3OTcyNTY1ZiwgMHg2NzU3ZjJhNiwgMHgzYWY1ZTc4MCwKKwkweGM5ZTZiNTAzLCAweDY5NTc3ZTUwLCAweGNjNzQ5MWVmLCAweGVjZTk3ODBiLCAweGM2MDBmZmJiLCAweDFmMDczYTE3LAorCTB4ZjMwZTlmOGMsIDB4OThiN2JlNzQsIDB4OWFlNzllNjEsIDB4ODI5ZTZiNTQsIDB4OWFlNzA2ZmQsIDB4YTIxYmM4MWYsCisJMHgxYWY5ZjA5YiwgMHgzNDVkYjkyYSwgMHhkNjQ0MmY2NCwgMHg1ZjBhYTU3ZiwgMHgyYzFlOTY4ZiwgMHhkMGYzZmNhYywKKwkweDU3OWZlMDgzLCAweDdjZmY3MjU0LCAweDcwOWY4ZjA1LCAweDdmNWMzY2ZmLCAweDFkNTk3MmE4LCAweGVmODJhZDc3LAorCTB4MmFmOTcyZTEsIDB4NDdlMDM5ZDksIDB4NWI1ZTVjOTMsIDB4MzJmN2E3NjksIDB4OTBhNTE2ZmIsIDB4OTJkZWZkN2YsCisJMHhmODc1YmIxNCwgMHg0M2EyMzlmOCwgMHg3YzM3OWM5NywgMHg3MzllZDU3YywgMHg2NjUzZTU3YiwgMHgzZDY0N2JmNCwKKwkweDg5N2JhN2YxLCAweDk3ZmNjM2UwLCAweDlkYjlmZjZhLCAweGVlZTVkOTAyLCAweGRmMGY4MzY2LCAweDJjMGFlMTUzLAorCTB4MDdkOGYxZTEsIDB4MjJjZjgzNjQsIDB4YWE4OWQ5MGMsIDB4ZGRhYjc5MWQsIDB4NmFiYjUwMjEsIDB4NjNmNmFhNTcsCisJMHhiYmUzYzljMCwgMHhmYjc4OGE0YiwgMHg1NTZiOGI2NSwgMHhhNzVjNThlNSwgMHg5NzE3OWU4NSwgMHgzOThjZTdmMywKKwkweGY1NWZhMTRmLCAweDkxODE1MmUwLCAweDRhZWM1MDFjLCAweGVkYzM0ZTk1LCAweDcyZmI0ZmNlLCAweDQzOGE0NzEyLAorCTB4YTdkMGFmM2QsIDB4YzIxMzY3Y2EsIDB4NjNkNTQzZjgsIDB4N2U3MDU0Y2YsIDB4NWUzZDQwZWIsIDB4ZjdmYzdhODgsCisJMHg3YzNjZmIxYSwgMHg4ZmUzZDA1YywgMHg0NjNmNTI1NywgMHgyZTdlOGJmZCwgMHhlYmY5MjMzYSwgMHhhZGZjNjU2NiwKKwkweDRlMDVmZWVhLCAweDU5YmMyMGQ2LCAweGZkMTliMDJjLCAweGY1ZmE2OGNjLCAweDEzOWQ4YTdiLCAweGM1MTlmZGFkLAorCTB4M2YxZGJjN2UsIDB4YzhlNDU2MWYsIDB4Y2JmM2YxNjgsIDB4NzBmMmI3OTUsIDB4ZjlmOWE5ZmYsIDB4OGM2ODdkOTYsCisJMHhkNTU3YmY2MiwgMHgxZmZiODZiYywgMHg2YTA0ZjdhNywgMHg5N2ZlZmY5MCwgMHhlMWVlZTI4MSwgMHhmYWE1M2RlZiwKKwkweGVjZDMyMjlmLCAweGEzMmNhOWNmLCAweGY3MjNmZDBlLCAweGU4M2YxZTFhLCAweDQzYmZiMjRlLCAweDdhNWJjYzdlLAorCTB4MDVhY2UzODYsIDB4YjhlZDEwN2YsIDB4NTEyNjZmNDcsIDB4MzJmNjg2ZDksIDB4Mzg1ZTJiOTQsIDB4MTU4OGY5NDcsCisJMHg3N2YwYjQ2YiwgMHhmYjE3NGM2MywgMHhmM2E2Y2JhZiwgMHg5ZWFjMmQwMywgMHg3ZDJkNGNlMiwgMHg1MDE2ZDI0OSwKKwkweDBmNjNkZDBhLCAweGYyYmU0NjlkLCAweDBmZGJkMDFlLCAweDg4ZmZiZTg0LCAweGM3OTliZWZhLCAweGZiYTYzNmUxLAorCTB4NjYxYWY3MjgsIDB4YzI3OGI0MGYsIDB4N2RhZDdlZWQsIDB4OGRjNGE5NTAsIDB4NmYwOWQ5YTIsIDB4NWNiODViZjQsCisJMHgzZTI3YTMzOSwgMHhkMzc4YzBlZiwgMHg3ZDhjYzY0YywgMHgzN2I4MmU1YywgMHg0NzQ5MzhmMiwgMHhmYzA0ZTZkZiwKKwkweGQyYmI2YTA4LCAweDUwMGM0NTdlLCAweDZiZjI4YTFjLCAweGJlZDVlYWYwLCAweDNlZThkM2E3LCAweDI3Y2RhYzk3LAorCTB4MzlmZmVmYjUsIDB4YmNmMGNiYzksIDB4OTcwZjcyNTIsIDB4YmQzNmVlNGIsIDB4YTEyYTQ3OTIsIDB4ODNiNzk3ZWYsCisJMHhlZDBlMzkzZiwgMHgxYmZkYmI0YiwgMHg4YjgwNzc4OCwgMHhjOGRlNDhmOSwgMHgzZWNiYjg5YSwgMHhlOWY0YWYyNSwKKwkweDNmMjU3Zjk5LCAweDI4OTFjNTc0LCAweDc5ZWVhNDc5LCAweDdjYTQ4ZjNjLCAweDFlNzg3NzI3LCAweDBjYTlmNGU5LAorCTB4NDhmM2VkZmIsIDB4ZThlN2JkMWQsIDB4ZjJlZGNiMWUsIDB4NWJhYWE2NDksIDB4M2I4YTFjNzEsIDB4N2M3OTE0NGUsCisJMHgyMDlmNjI3NywgMHg2MjZhYmM2MSwgMHhlOTc3NWYxZiwgMHhhZmIyMzhiNiwgMHgzYWI1N2UxYiwgMHhiYTgxZTUwNSwKKwkweGUyMmM5ZjRmLCAweGZkZTRmZGY4LCAweDVmYjA2YWNmLCAweGM5NDRhZmM5LCAweGUzN2FlYjAyLCAweGNiM2YwZGZkLAorCTB4ZDliYjc1ZTAsIDB4YzQzNmZkOGUsIDB4YzlmMzNmYTMsIDB4MjNjN2Q2YWYsIDB4MTI4MGRmN2UsIDB4MTdjN2U3ZjcsCisJMHhjOWYxYzhjNCwgMHg2Njc1NzhhMSwgMHg5NTlkYzUxNSwgMHhmYTA4YjU3OCwgMHg1YzUwY2M3MCwgMHg4YmRmYmMyNywKKwkweDc0NmU1YzU1LCAweDcxNDJiYjgzLCAweGVmM2MyM2NkLCAweDlhZWU5ZGRmLCAweDllYmZmNTQ3LCAweDI5ZGZmOGM0LAorCTB4ZmQxZTI5OTAsIDB4YzYzNWQwMmEsIDB4NjJjMWE2OGQsIDB4M2ZmZDJmMzEsIDB4ZTYyNzU4ZTMsIDB4YmFjN2JhOTEsCisJMHhmNDdjNDI3ZSwgMHhmMjNiM2FkNywgMHhmY2E3ZjQxMSwgMHg5ZGIwZjc5MywgMHg2YTg2MjNmNCwgMHgwMzMzY2YzMSwKKwkweGY3NDA1YjNmLCAweGRmMjk1MjMxLCAweDhmYjI4ZjczLCAweGEyY2ZlMGU5LCAweDJjZDAwOTVmLCAweDM0ZjQzY2MxLAorCTB4MjMzM2RmMjUsIDB4ZmUzODg5OGUsIDB4ZmI2YjgzMGUsIDB4ZjUyZmNjNTQsIDB4YzRjZDhlOGIsIDB4M2MxNDhlMDQsCisJMHg3NzllMTk2ZiwgMHgyZjllNjQxMiwgMHg2YTRmZjM1NywgMHhmZTVhM2NkZSwgMHg5NDc5YzA0OSwgMHhmM2YwNTZlZiwKKwkweGY5ODBiMjk2LCAweGM0Y2YzNTc0LCAweGY5MjkzYTk2LCAweDQzY2NhNWI1LCAweDgwN2M0MmY3LCAweGRlNzNhZmIzLAorCTB4Y2ZmYzg0NmIsIDB4ZjIxMTE1YzMsIDB4OTgyYmViM2YsIDB4ZjM2OTlmNjIsIDB4NWY3M2RiOGQsIDB4YWFmZDNhMjEsCisJMHg3OGMzYzY3OSwgMHhlNjhlZTJhZSwgMHgwZmRjZWNjNSwgMHgyOGJiODMwZCwgMHhmMjM0ZDNlOSwgMHg2ZmY4ZmViYiwKKwkweGZiNjdhNDA5LCAweGJjM2U5MDZlLCAweDAwYjEzNDE2LCAweDc4MDcxZmM1LCAweDQwY2ZiZGRjLCAweGUwNmI4NjcxLAorCTB4ZDEwZDhkYmYsIDB4ZjA1NGVmYjMsIDB4ZDVmNzhmNzEsIDB4MDRmN2ZkMTEsIDB4ZmRmMWUzZWEsIDB4YjdjZjJiZGYsCisJMHg3ZWU0YjdiZCwgMHgwMWJkZjdiNCwgMHhjNjBiMWRmZSwgMHgxM2Q2M2ZiOCwgMHg2ZWQxOGIxMCwgMHhmMmZiODNiOSwKKwkweGY1ODQ2NTY0LCAweDdlYjhlMzk5LCAweDUyYTNlNzBhLCAweGFiNGFmZjg1LCAweGRlZWI5ZTM4LCAweDdiOTg3ZWU3LAorCTB4NDhhZmNmMDMsIDB4N2I3MDVjOGEsIDB4NzRmZDVlNzgsIDB4YzZhMDlhNTYsIDB4Y2E0NWM3ZDMsIDB4OTIwOTFjYmYsCisJMHg0NDc5NjhkZSwgMHg3Y2M5ZWZhMCwgMHgzM2NiZmNkOSwgMHhmMWYzOTFlOSwgMHg0NjJmN2EyYiwgMHgzNjM0YmZjZSwKKwkweDE2OGNmYzkwLCAweDYzOGYwZWNmLCAweGZmMmE5ZGZmLCAweDc2MzhmM2E2LCAweGViNDQ5NTdhLCAweGQ3ZTRmNjRlLAorCTB4ZWI0MzYzOGMsIDB4YjBmYjgzYmYsIDB4N2Q4NDU2NzQsIDB4NmZlMzgzYjgsIDB4ZjFkYjFkOWMsIDB4M2I2M2NhZWIsCisJMHgxZTMxMTNmZSwgMHhjNzhjN2I3ZiwgMHg2Yzc5NjFmZiwgMHg4YWJhZWJmMywgMHhkYmZmYzJkOCwgMHgxZmRmYzMxOCwKKwkweDU3ZmZmZTA5LCAweGU3ODQwN2NmLCAweDBiY2ZjM2ZmLCAweDMwMDM5Zjg0LCAweDE3YjBmNWJkLCAweDlkODRiYWRiLAorCTB4ZWZjMzNmNDEsIDB4MjRkNmJmOGQsIDB4OTMxNDFjODAsIDB4Y2U3ZGQzZjYsIDB4MWYzY2U1MDUsIDB4ZWNkZWFkYjYsCisJMHg5ZDBjMmJkYiwgMHhmNWYxNTAxYiwgMHgyM2Y3MzU2OCwgMHg1ZWViYmNhNSwgMHgwNGQ0NWVmYywgMHg4MjlmNTAzOSwKKwkweGZlNzJiMmYxLCAweDU5YWU0Mzc3LCAweDg5OGM1ZTc4LCAweGM5ZTYzYTUyLCAweGM1ZjRjZGUwLCAweDViNzQ5NzYwLAorCTB4NTM1OWU3MjIsIDB4ZTlhMmYxOTUsIDB4MzVkNTgzOTEsIDB4ZTMxNTY3OGIsIDB4N2M4YTNkMWYsIDB4NGE4N2ZmMGUsCisJMHhlNWVhNTIxYywgMHg2ODk5ZTlmNywgMHhmMzRjNWY0ZiwgMHgxZWQxZDNkYSwgMHg5ZmM5M2M0YSwgMHhiYzk5ZjgyNywKKwkweDY3YjJlMDk3LCAweGRjN2ZlNjJmLCAweDdiZTExYjIwLCAweDI2ZmZjOTQ2LCAweDFiMmJiYmNmLCAweDYwYzlkMmUzLAorCTB4ZjA1ZTYyMTcsIDB4OTIwZmNjNjksIDB4N2JkMTJiM2YsIDB4NjY5NzdjZWEsIDB4MTllYTNmNzEsIDB4OWYzMDEzMDMsCisJMHhjZmNhOWRlYiwgMHhkZjllYjEzOSwgMHhlNmE2ZmQ5MSwgMHhmYzFhY2VmNSwgMHhjYTA1NWE5NywgMHhmYzIzYjVlYiwKKwkweGYzZjlkNTNmLCAweDQ0MmI2NWY2LCAweGViY2RmODBjLCAweGY4ZGYyODkxLCAweGU1ZGZmOTc2LCAweDllMWU2OGJhLAorCTB4ZTI0YzdiZTcsIDB4YmY0MDljYWYsIDB4ZWM3OGUwMTksIDB4ZWZkMTIxNjgsIDB4ZmZlNWUzOGEsIDB4YzdmZThjZDQsCisJMHgzY2YwOTE2NCwgMHhlMjU0YWZjYywgMHg3ODk0MTcwNSwgMHg1MDJmMWE4NywgMHhhY2ZmNWJmMywgMHhjMDNlNDljNCwKKwkweDAzOTQwYmY4LCAweDcyODEwZjE4LCAweDlkZGQyY2ZiLCAweDY3ZGI0ZmQ2LCAweDY3ZmZlMDQ1LCAweGYyMWYxZTA0LAorCTB4ODdjNzk0ZmUsIDB4OWM4ZThkMGEsIDB4N2Y5NGYzZDAsIDB4NjNlZjhiMzUsIDB4MmZlNzlmYWIsIDB4MGZjZjc4ZDQsCisJMHg3ZTE0ZjU5NSwgMHhlZmM3ZWY0ZiwgMHg5ZDZlMTVhMSwgMHg1ZjNkNDQ2ZSwgMHgwZTJiMzViOCwgMHg0ZmIyMTljYiwKKwkweDVlZjgwNjk3LCAweDRlYjBmYWI2LCAweDc0NDhiZmRkLCAweGU3NTk1N2I0LCAweGNhNDEzM2I2LCAweDk2MWFiZGVmLAorCTB4OGIzNGJmZjcsIDB4YTk2ODY3OWYsIDB4MDk3YmZiZTYsIDB4ZDQxOGEwZmYsIDB4NmUyMjliMWYsIDB4YjEzMWYzNDEsCisJMHhjYTQ3ZDI0YSwgMHg1ZjgwYjUyYiwgMHg3NmI2NzA4YywgMHg3YzU1Yjg3MywgMHg3NWVkZjhiNywgMHg1M2M1Y2YzOCwKKwkweDE2NThhZGMxLCAweGEzYWVjOWFjLCAweGY1ZGI3YmI4LCAweGI5YmY2OGFkLCAweGFlOWM2ZjA3LCAweGQxOTk3OGE2LAorCTB4NDNjNGZlOGUsIDB4ZGJiOGRhMDMsIDB4ZmUzY2Q1MTMsIDB4ZTAxYTJhZmUsIDB4NDU3YmI3ODgsIDB4ZWYwYjhmZjIsCisJMHg5MjdlODkxNSwgMHhiZmU0MmM1YiwgMHhkZTk4MWIyNiwgMHhkYzQ1ZjU4YSwgMHg0YzY4MmEyZSwgMHg1YjNhYzNhZCwKKwkweDYwZjY0NDkyLCAweGQyN2IxOWMxLCAweDcxNDM3OWMzLCAweDM3N2JlNGIwLCAweGRkM2M0NThjLCAweGM2YWFjZjJlLAorCTB4ZTQ1YjJlZDMsIDB4NWY5ZmI4ZTMsIDB4N2VkYWNmMzUsIDB4NmYzYTNkZjYsIDB4YzU0YmFlYWEsIDB4OGQyZjlhOGIsCisJMHhjZjU1Njc5NiwgMHgzZjFiYjgzZCwgMHg3MGQzOWNkMywgMHg4YzA2YzE4YiwgMHhiZDFlMTYzZiwgMHg1ZmNlNTQ2OCwKKwkweGExZWNiNjRhLCAweDkxZTE2YzNjLCAweDU1N2Y5NGViLCAweGNmNmVhZGYzLCAweGExYWJiMjc1LCAweGY3ZmIxMTlmLAorCTB4ZDdmOWUyNmMsIDB4MmMwZTAwZDcsIDB4YjJkZDYxN2IsIDB4ZGJhMWVmMDksIDB4NzU4M2VjYTgsIDB4OWI2M2YzZTMsCisJMHg2ZmY0YTk3MiwgMHg3Yzc5NTA3MiwgMHhmODk1MTk1MywgMHg2NGY0Yzk5OSwgMHhhNzVlZGJjYywgMHg1OWQ1ZWRiYywKKwkweDUyNGRjZWMzLCAweGU4Yjc2ZjVlLCAweDE1ZjEwOGZjLCAweDdhYTNmNzkyLCAweDFmNGZkZTc4LCAweGVlMzVlM2M3LAorCTB4YmVmYTA2MzMsIDB4OTlhY2ZiYTEsIDB4NWY0ZDc3ZTQsIDB4MGZmNDQ0ZWIsIDB4OWFlNzNmM2UsIDB4NjA3NzcwODgsCisJMHgyZTg0MmRkZSwgMHg5NjFkOTEzZSwgMHg5ZDgzZjQyNCwgMHhkYmU2MGIwZSwgMHgxYWFmZmIwYSwgMHg4NzRjM2NmMSwKKwkweDNjNjIzMDE4LCAweGMwY2YyMDBjLCAweDllZWU4YjIzLCAweDZmZGNmY2ViLCAweGYxMDU4ZDVmLCAweDU4ZmNkYjdiLAorCTB4OGZjZmZmZWYsIDB4NThmYzk1N2QsIDB4MjczZjM1NzcsIDB4MDI5MWNhYWQsIDB4OGJkZTRlYTcsIDB4ZjJkOTE5ZTUsCisJMHhkODljODg3MCwgMHg5NGY5ZTRlNiwgMHgxMTI3OTM2ZCwgMHg0ZTc2ZWUxZiwgMHgzMjFkNWE0YSwgMHg4ZjIzNjc1ZSwKKwkweDNiZGYyNDVmLCAweGZjZmExMmQ5LCAweDFmM2NkNTk3LCAweDY3MzAyYzk2LCAweDMzNTY3OTI0LCAweGM3ZGRlYmZiLAorCTB4ZDc2ZTQxMWIsIDB4M2ZmYmIyNDQsIDB4ZTVkMDI5ZjksIDB4MjM4YmEwNGMsIDB4OTAzODllZGYsIDB4MzQzZjE5YzcsCisJMHg3MWFkYjcxZSwgMHgyODMxYzRmNSwgMHhkODk4MmU5ZiwgMHhkM2FmMWUxNCwgMHg1ODU4ZTNjNCwgMHg1YzVhMmU1ZSwKKwkweDRlYTM0NTZlLCAweGExNzlkMGI2LCAweGRiZDQwNGUwLCAweDI2MzNmMWUxLCAweGJkNzAyNzA2LCAweGJkZTA2NzJlLAorCTB4ODMzMTk4MTQsIDB4Zjk2MWIxOTUsIDB4ZGYzMDVmYjksIDB4ZmJjMzI3Y2YsIDB4YTQ3NTFhY2IsIDB4NWQzY2Q0MmYsCisJMHgzNmM4YTM0MSwgMHg2YzE2N2QwMSwgMHgzZjI4ZjgzNCwgMHhhNDVlMjhkNywgMHhlYzZmYzU3NiwgMHg5MDMyMGE5NCwKKwkweDZiMzgzZmNlLCAweDE2YWUzMDk0LCAweDM0NzMxZjFlLCAweDA0OWVlZmVlLCAweDAyNmQxZGZkLCAweDVkYmEwYmRkLAorCTB4MDczZDRmMWUsIDB4M2ZkYmQyZGUsIDB4Zjk2ZGUzMDcsIDB4M2Q3NzU3NmMsIDB4YWM5ZmNmZjQsIDB4ZjRmY2YwOTMsCisJMHgzZjFlN2NmMCwgMHhkOGEwNWRmZiwgMHgzNjcxZTEzOSwgMHg0YmI0MzNhNCwgMHgxYmYwZTNjMiwgMHgzOGQ4M2ExNSwKKwkweGQ3YWRlYjliLCAweDFkNTM3ZjE0LCAweDRlMTdlZDQ3LCAweGNkOWQzZjNmLCAweGI4YjQ2ZGY1LCAweGJjNjU1MWZlLAorCTB4NmQ4MmM2Y2UsIDB4MTc3ZjcxOTMsIDB4OTNlYTE4ZTgsIDB4ZjM1YWM2Y2UsIDB4NzZmMTkwZTQsIDB4ZGJlN2U2Y2MsCisJMHg2MGZjYzE5ZSwgMHg5MDdlNjg2YSwgMHhmM2MzMDFlNywgMHgyYjljYWE4MiwgMHgwMzdkZmZlYywgMHhjODM3N2JlMiwKKwkweDZlNjNkNDZiLCAweDE0MWZjZjFiLCAweDgzMzlhYjFlLCAweDRlMDg2MzcyLCAweGMzNzdiN2FlLCAweGJlYzgwNzllLAorCTB4YmUzMTI0NzMsIDB4NDU3YmZhMmUsIDB4YzUwMmEzZGUsIDB4N2MxNjBhZTcsIDB4ZWExZTNjNzYsIDB4Zjc0NDk5Y2MsCisJMHgyNzY3ZGNiMCwgMHgzY2EyYjE2ZiwgMHhlMzE2MjA1YSwgMHg1M2I3MWViZCwgMHhjMjY3OTViOCwgMHhlZmZkZDI3YywKKwkweGJjZWZhMWFjLCAweDdmOTAzZTE2LCAweDgxZTVmNzBlLCAweDBmOWQwMzY2LCAweGZkZGVmNTU0LCAweGYwMzUzNGVmLAorCTB4YzY0ZmJkZjYsIDB4ZTBhZTdiNjEsIDB4NzlmMWQ4YjAsIDB4NzYzZjdkMjMsIDB4ZmE3ZTRiZmUsIDB4MTEwYjU4YmIsCisJMHg4MWU3OTAzYSwgMHhlNDQ0OTdiMywgMHhkNzE2Y2I5YiwgMHgxNTFmMjNkZiwgMHg0Y2YyNTIyZSwgMHgzZjRmNWNjZCwKKwkweGMwYzhiN2QwLCAweGVhZDNjZWM4LCAweDlmNTkxM2NkLCAweDQ2ZTgzYzUzLCAweDhmZTUyMTVmLCAweDQzZmNmMDUyLAorCTB4MjliZTkwZGUsIDB4NmM3YTBhM2MsIDB4NjNkMzlkY2MsIDB4MTEyZDlkM2YsIDB4MWU4MjY3M2UsIDB4MTc5Mjc4NDMsCisJMHhmODdkM2NmMSwgMHhmNjUwZWZmZSwgMHg4YTVlOWEzZiwgMHhmZjUxODcyNiwgMHhkZTYzZmJmMCwgMHg1YzM2YzEwYywKKwkweGVlMzFkYjhmLCAweDNhZjY4YTUzLCAweGQzYTJlMzk0LCAweDcxNjYxZmRmLCAweDYyOGE0ZWJhLCAweGExNDlmZGNmLAorCTB4YTdlN2E4ZGYsIDB4Y2YyNzQ3N2EsIDB4N2ZkOTg3ZjQsIDB4ZDU2Mzc5MWUsIDB4NGRmMzUyZmYsIDB4YTBmNmJmYWEsCisJMHg2NWFiMGY2MiwgMHhiYmZlNTI5MywgMHg3MmEwMzdlZiwgMHgyMWJmNzg4ZCwgMHg4NmZkZjIzOSwgMHg2ODA5MGU4NywKKwkweDFiZjdhOGE3LCAweGNkNTkxOTRlLCAweDRmM2M1NGUxLCAweGYyNzdkY2FiLCAweGU5M2IyMjJkLCAweDYyZmNkZmQ0LAorCTB4NzhhOThiZWIsIDB4NTA5MDQ5ZGYsIDB4M2ExZmI1MWQsIDB4MWRiZTdhNDcsIDB4YTdiMjIzZWMsIDB4ZTNjYjdlZmEsCisJMHhmOWY4ODdhZCwgMHhjOGRlZjZmMCwgMHhhZGRiZGRkZiwgMHgzMmY1ZGZkOCwgMHhhZWQxYjkyMywgMHhlODZkYjc5YywKKwkweGI3NDRmMjUxLCAweDhiOGY5NmUyLCAweGI3NGI3MWExLCAweDNkNTYzMDNkLCAweDdmMjNlYmM3LCAweDhjYzcxYjRmLAorCTB4NjBlY2I3MTYsIDB4ZGJiNzNhNDEsIDB4YTA3MDQ2YjEsIDB4MzlkZGI4N2UsIDB4NzljYTVkZGMsIDB4NGM3MWE4ZGQsCisJMHhiOTczZTQ3OSwgMHhiOTRjNzFlMSwgMHhiOWM3OWI1YSwgMHhmN2M0OTY2ZiwgMHg2ODA4MjVkYiwgMHhjZTc1OWFlZiwKKwkweDdmYjczYTM2LCAweDlkMjI5MDRjLCAweGNkNWE1ZWYzLCAweDI1N2NmNGU1LCAweGM4ZDA3MjBmLCAweDg1NjBlM2U5LAorCTB4ZjA2ZmY3NDAsIDB4ZmJlZTFlMWUsIDB4MWVmYzYzYzEsIDB4N2UwMmMxY2UsIDB4N2JjZDQ3MGYsIDB4YTY2YmY3YTgsCisJMHhlODNkZTUwZSwgMHgyZjdhOWRmZSwgMHhjMzY3YmQ0NywgMHg1YWUwOGY5OCwgMHg3ZDFjNWNmNCwgMHhlMTg3NmJjNywKKwkweGJkZGI4ZDkwLCAweDFhM2Y3ZTVlLCAweDQzZTYxMDY1LCAweDg5MTNjYzRkLCAweDZiYWI2YjVmLCAweGVmN2E2YWM0LAorCTB4OGY0ZmRiOGUsIDB4N2JmMDQ3NTQsIDB4ZTkxZjhhN2QsIDB4MmZlYThlYWUsIDB4ZmFkNmFmYWMsIDB4ZjcwZjU0MGIsCisJMHhkZTU0ZWUxNywgMHhlY2Q5OGJlMywgMHg4N2ZiZmI0ZSwgMHg5ZThmMWM2MywgMHhmMWI2M2IzMiwgMHhmYjQ4ZWNjNCwKKwkweGZkYTJjNWI2LCAweDVlNWFhZjFlLCAweGIwZGZlNDU2LCAweGJiMGRjNWVmLCAweDdhZjVjOTJmLCAweGE3ZmY2MGI3LAorCTB4MWJhN2NhNGEsIDB4Y2FhZTlmMjgsIDB4N2MzMWVlZDUsIDB4ZTMyOTFmZmMsIDB4Mjk0MDY1YTksIDB4ZDc3Y2EzYmIsCisJMHhiYzRhOTdmOSwgMHg3Yjk0NGJhYywgMHgyZjY5ZWUxMCwgMHhkMzk3ZTM2OCwgMHg5N2UzNjkwZiwgMHgzNTkzN2IzMywKKwkweDc4ZmY3Y2Y1LCAweDY3ODVmYmNkLCAweDhiZGE2OTI2LCAweGRhNjhmNzAzLCAweDY4MTQyZjRiLCAweDE1MDNlNWVhLAorCTB4YWYyYmY3OWEsIDB4YjNlYTZhZDQsIDB4NjVmOGRhODIsIDB4NjFjNWNkZjUsIDB4YjQ3ZDM4ZjcsIDB4ZGNhMDFhYmUsCisJMHhlNjc1N2VkMCwgMHhjYmRlNmE2ZiwgMHg1NzVkYTM1OCwgMHhhZWJiNDc5NiwgMHhlYmI1MWI4OSwgMHhmNmNkYzc1MiwKKwkweGQzOTdkNzZhLCAweDMyNWY1ZGFkLCAweGJlZjJlM2U2LCAweDdmMmUzZTdlLCAweGM3Yzk1ZGI2LCAweGRmYjA1OGU1LAorCTB4MmQ5MzhkMzMsIDB4ZjdhOWI3NjgsIDB4ZmVmN2Q1YTksIDB4NTg2NjM3MmYsIDB4MDA3ZjQwZGYsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGUyNGJmZjAwLCAweDUxZjg2MDYyLCAweDM4Y2ZjMTBmLCAweDkwOTgxODE5LAotCTB4NzcwMTQzZjgsIDB4MDE2ODQzMzEsIDB4MjEwNjA2MTYsIDB4NjI2MzY2MjAsIDB4MjI2NzYwNjAsIDB4MDcyYmJmNWUsCi0JMHg5ZDg3N2Q4MiwgMHgxMDM4ZTE4MSwgMHg3ODFmNjdkZiwgMHg1ZTI0MGQ3ZiwgMHhiYjNmNGRjZCwgMHgyZWQxZDM3ZSwKLQkweDdlMjdmMDYyLCAweDAyYWY4NjA2LCAweDA1OGIwYzBjLCAweDIxMGI3YzIxLCAweGZjY2ZmOTU0LCAweDE4YTQ3NjA4LAotCTB4MDJhNTc2NjUsIDB4MTUwMDAzZjUsIDB4ODA1MWI3N2IsIDB4MDA4MDUxYjcKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweGU0YjNmZjAwLCAweDUxZjg2MDY2LCAweGI5N2JjMTBmLCAweDcyNmUxODE4LAorCTB4MDE0M2Y4MjEsIDB4ZDA4NjY3Y2YsIDB4MGMwYzJjNmEsIDB4YzZjYzQwMWEsIDB4Y2VjMGMwYzQsIDB4NzE3ZWJjNDQsCisJMHgxZDdiMDQ0ZSwgMHg0Y2MzMDMwNywgMHgzMWM4ZGUyMCwgMHg0ODFhZmVmMCwgMHg3ZTg3OWQ3YywgMHg0MmYzYTk3NiwKKwkweDgxYzE1OTY4LCAweDU3MDgzN2Y3LCAweGI0MzAzMTBhLCAweGM0MzAzMzBhLCAweDBjZjg0MDg4LCAweDU1ZjJhOGEyLAorCTB4YTliNjA4NDIsIDB4Mzk3NjY1MjQsIDB4MDAwM2Y1MDIsIDB4MzQ3MWNjMjQsIDB4MDAwMDAzODAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGRkZmYwMCwgMHg0NTU0N2M3OSwgMHhiZWRkNzBiNiwgMHg5N2E3Nzc0YiwKLQkweDQyYzg0Mjc0LCAweDQwMTBkYzIwLCAweDgwNGQ4ODU0LCAweDAyNGRlM2IwLCAweDEwNjAyYTMxLCAweDY2YjcxYzExLAotCTB4MDQ0ODRiMGYsIDB4ZDNjZTdjZGUsIDB4MDgzMWJhZjksIDB4NTQ0ZTM4ZTgsIDB4Mzg3YzA2NjYsIDB4YThkMDQxYWYsCi0JMHgxYTBjMWE1MSwgMHgxNjZiYzNiMCwgMHgyNjY2NTQxOSwgMHhiOGMzOGUzYSwgMHg2YzhhODliYywgMHhmZDAxMTI0MiwKLQkweDVmMjgzNzk4LCAweDNiNzU1MzlkLCAweDRkYmE2ZjdkLCAweGUzZmJlNjVjLCAweDQ1YTdlZmNiLCAweGVhYjdiYWRkLAotCTB4OWNlYWQ5ZDQsIDB4MjVhYWE3NTMsIDB4ZDdhOTIwNTksIDB4ZmUxOTcyMTIsIDB4NDhhNmY5NjgsIDB4NTFkMTE5MDgsCi0JMHgxZmI3MTViNiwgMHgwNDg0NjkyNywgMHg2ZGQ1OTE1ZSwgMHg3ZmMyMjEwMiwgMHgwZWQ3MjJiOSwgMHgxNmM4ZTQyNywKLQkweGY1YTU2ODIxLCAweDIxMDc1ZWM4LCAweGQzNzY3ZWI0LCAweDk3MzVhMGI0LCAweDBlMDU3ZDkwLCAweGJiM2ZkZTBkLAotCTB4MjVlYjA4YjUsIDB4OTZlMmZlYmIsIDB4MmVlNTdiNjgsIDB4NjViYTgyNTEsIDB4OGI3NzI5ZWYsIDB4NmIyYTkwOTMsCi0JMHhlOTYzYTNmMywgMHgyMjVkZjZmMywgMHgyMjg3NDJkOSwgMHg0OTBiMTI4MSwgMHg4ZGI4ZTQyNywgMHhhYzhiYmZiMCwKLQkweGFhY2VjMGJlLCAweGRkZjc5Yjk1LCAweDM0NTZmZDA1LCAweGY2OWQ4OTVhLCAweGUxN2JiOTUzLCAweGJlYjRiMWQ0LAotCTB4ZTA0Y2IwZjAsIDB4YWI2ZGNhOTUsIDB4YmViNDVlOTQsIDB4YTA4NDI4MjgsIDB4MGZkZWMwZmUsIDB4NjJiNjljNzAsCi0JMHg0YzFhMTE1MiwgMHg4ZGJmNjljOCwgMHhiYWQwNTdhOCwgMHgwNjdkMzliYiwgMHhiODM4YmU3ZCwgMHg1ZmRlMTRhMywKLQkweDJkNzgyZjVjLCAweDliYzVmZGY0LCAweGZlODE5ZGY2LCAweGZkYzgzNzE3LCAweDkyZmZkYTQ1LCAweDA3NTEwNzNhLAotCTB4MTMyZmIxYjEsIDB4YTlmY2M3OTgsIDB4MWJlNTZmMDAsIDB4N2FkMmIxMzIsIDB4MGExNWE1YzUsIDB4YjU0OTFjMDEsCi0JMHhjNjBiYjk0YSwgMHg1ZDUxNGM3ZiwgMHgxYzYxY2UzMCwgMHhlNTY3Yzc0NywgMHhmYTFjNzQ3MywgMHgwNDk3YjJkZCwKLQkweDk5NmQ0YzJmLCAweDllMDBmODg1LCAweDU5ZjZkZGQ2LCAweDVlNjEzYjRmLCAweGYwODE5NGFiLCAweDBhYjVlZWZkLAotCTB4MzgzMGI3YmMsIDB4MGFiYjE1ZmIsIDB4NGE1NjZkZjAsIDB4OWI0ZGNlMDEsIDB4M2I4MzA1OTUsIDB4Zjc1MjViZmEsCi0JMHhlM2FlMDE5NiwgMHg3YzMyZjIxYiwgMHhmMmU2ZWQzMSwgMHhkNTEwOWZiNCwgMHg0YzVmNTFkYSwgMHgwMjcyMTY4OCwKLQkweGRhNjU0MWRjLCAweDE3ZTc4ZTkwLCAweGY3YTQxNDg0LCAweGE4OTEzYTkyLCAweDI5ZmU4ZWI2LCAweDQ5ZTkwODYxLAotCTB4ZmExN2ZmZmYsIDB4MjY4M2UwNGYsIDB4NmU1YjcwNTcsIDB4N2I5NmJkMDcsIDB4MGVkNWJmZTgsIDB4NzBmMzlkN2EsCi0JMHg4NWVkNDlmYSwgMHhlNWViZmRiMSwgMHgwYTA3NDBhMywgMHg4M2RmYWQ0ZiwgMHg0Y2ZlZTNlNSwgMHg1NWZiZDcyYywKLQkweGZjNmZkYmM0LCAweGUwZGNiMDgzLCAweDI3ZjNlMmY3LCAweGRjYjBhM2ZkLCAweGZjYjBkN2U0LCAweGNiMGNiZjlkLAotCTB4ZGYxY2JmYTAsIDB4ODU5ZmUyZGIsIDB4MGZiZjU2ZTUsIDB4YWZlMzNmOWYsIDB4NWZjZWIyYzAsIDB4Zjc5ZmNmOGQsCi0JMHhiZDY1OGJkZiwgMHg1ZmNmODAzZiwgMHgzMmMzYWZmMiwgMHg3MmM1YWZlNCwgMHg5NjAzN2ZhNywgMHhiZTIwZmUwZCwKLQkweDBlYmY4YWY3LCAweDA4N2Y0NmNiLCAweDM3ZjFlZjlmLCAweDQ3ZjYxOTYyLCAweGY0MGJkY2IwLCAweGRmYzQ2NWE1LAotCTB4ZmY3ZWU1OGMsIDB4ZmEwZjJjNTEsIDB4NDNiYmYwNWIsIDB4M2U1ODkzZmUsIDB4MWVlZWYxYzIsIDB4OGEyNDhhNDcsCi0JMHgzYzQ2YjczNywgMHhlYTQ4NWM1NCwgMHhhNjQ4YWQ2NCwgMHg1NjcyZDRmNSwgMHg1MDIzYmY0ZiwgMHhiYTdhZDBhNCwKLQkweDFlMjlkNjhmLCAweDE0OGQyZDdiLCAweDU3YmQ2OTU5LCAweGI5Y2Y2YjM1LCAweDY4ZGIxNDlmLCAweGRhYzAyNzNkLAotCTB4MTVhMjNkZmIsIDB4NWZiZDY5ZGIsIDB4YjgxZjZiMmQsIDB4NDQ5YzUwMjksIDB4YWM4MzAzZWIsIDB4NDhmYWFhZmQsCi0JMHhhZmQ2ODNiMSwgMHhmY2Y2YjEwYSwgMHhkMjcxMjkzMCwgMHhkNTg0N2U3YSwgMHgyNTY4OGUwYiwgMHg2ODJmNWEyZSwKLQkweDBmYzJmNTY2LCAweDVhNmUyNTAzLCAweGRmNjE2YzJmLCAweDI5MTMzOThmLCAweDMxZjVhNjQ5LCAweGMyN2RhY2VkLAotCTB4NDNkMTMyMjUsIDB4ODA4ODEzZWIsIDB4ZDE2NzYyZjUsIDB4MmY1YTE0YzQsIDB4Njk3YWIwZjYsIDB4MWE5MmQ5ZWYsCi0JMHhjYWY2ZmY4NywgMHhlNTA5NzMyZCwgMHg0ZGMwYmE4NSwgMHhlYjQ1OTQ5YSwgMHhlMjBhY2I0YSwgMHhjYzBjZjhhNSwKLQkweDI2NDQ3YWMyLCAweDQ4ZmRhMGYzLCAweDhkMjZiNjYwLCAweGFjODU3NWE2LCAweDBlZmZmNjg0LCAweGZkZjZjNjJjLAotCTB4ZWRlZDhhYjIsIDB4YmVkODE1ODEsIDB4ZGRiMTUxNWYsIDB4YWM3ZWVhYjIsIDB4NmMzNTk0MWYsIDB4MjBmNTViNGYsCi0JMHhkMTUwN2ZiZSwgMHhhYWUwN2RiMCwgMHg0ODdlYjE0NywgMHhhOGZiNjFmNiwgMHhmN2M1YmY1NSwgMHg2YzNlMjkwZiwKLQkweDUwNzU3YzdmLCAweGZmZWI0ODliLCAweDAwYjZmODIxLCAweGJlMDhkNzVmLCAweGZjMDc5MjBhLCAweGE3MmNjYTFhLAotCTB4MjA0NmJhZmMsIDB4MWUzZTQwYjMsIDB4ZjJhNmE2MDYsIDB4ZDE0YjI2YjAsIDB4ZmRlZGJmNDAsIDB4NTE2OWYwYmEsCi0JMHgwNjlkYmNlMCwgMHgzY2NmMDVmNSwgMHhiY2ZkOGI5YywgMHhiNGM4ZmQ4MCwgMHg3ZWViYjExZiwgMHhjYTMzN2MyNiwKLQkweDZmODRjZmQwLCAweDFhN2VmNDJhLCAweDdiMWFiZGUwLCAweGZiZDlmYWY3LCAweDNjMjMxOGNkLCAweGZiZDYyY2RmLAotCTB4NWM3ZWMyNjksIDB4ODRkNzliZGQsIDB4ZjA4Y2UzY2IsIDB4ZjdhYTVlNWMsIDB4NDlmYjA4NzMsIDB4MTEzYzFlZTksCi0JMHg5ZmExYTQ3OSwgMHhlZjUwYmM4OCwgMHg0ZmQ4NGZlNywgMHhhM2MxZWVjZiwgMHhmZDBkYTMyOSwgMHhiZDIyY2E2OCwKLQkweDRmZDhhMzlmLCAweDg5ZmFmNzU2LCAweGYwOGQ2MzI4LCAweDdlZjQ0YjI4LCAweGZhN2VjNjNlLCAweDlhNWU2Zjc0LAotCTB4MWUxMWJjNzUsIDB4Y2ZkZWE1NmIsIDB4NmU3YmE0NjksIDB4ZWZkOWZhZjcsIDB4YmY2N2UyMzIsIDB4ZjM5ZjhhMmIsCi0JMHhlZTgwY2YwOCwgMHg2ZGQ4YWJjZCwgMHgzYmIxNGZjNCwgMHhkODRiOWY4YSwgMHhlYmRkOTVjZiwgMHg4OGRiYmY2NywKLQkweDI4ZWVmZDlmLCAweGU2MDE2NDdlLCAweGYzN2JhNDM1LCAweGUyMzY0ZTJhLCAweDhhMzkzOGE3LCAweGYwMDBiNzFmLAotCTB4M2MxZWVkMGMsIDB4ZjExYTdiMDcsIDB4MTQ2N2IwNzMsIDB4Y2YwODE5M2YsIDB4MzNjMWVlODgsIDB4OWY4OGRkMzEsCi0JMHhmYzUxZTk4OSwgMHhlOGNmMDhhOCwgMHgzMDczZjVlZSwgMHg4MzlmODhkZCwgMHg1Y2ZjNTFlOSwgMHhlZjhjZmQ4OSwKLQkweDY2MjZiY2RlLCAweDMxMzNmMTE4LCAweDAyOWY4YTIzLCAweDU3YzhhN2VjLCAweGRhMTBmMDg3LCAweDNmNzEyYjhmLAotCTB4ZjExOGZhODcsIDB4MTQ0ZmE4NzMsIDB4OWZiMTYzM2YsIDB4YmM5ZmI0NDksIDB4Y2QyOWZiYWUsIDB4MzRhN2UyMzEsCi0JMHg4OTlmOGEyNywgMHhiYmViZTc4OCwgMHgxY2ExY2ZkNywgMHhlNTBlN2UyMywgMHgwNTMzZjE0NCwgMHhiZGQyOTlmYiwKLQkweDM1ZjY5NTc5LCAweDJmYjRhN2UyLCAweGQyYjVjZmMzLCAweGU4Njc1YzUwLCAweGU5MTVlOWRhLCAweDJlZjVkNzI3LAotCTB4YmVmYTA0ZDIsIDB4ZDE3NTYxZTgsIDB4Zjc2MDI1ZTMsIDB4NDMzZGJhODgsIDB4YmU5MTM1OWEsIDB4Mjk0ZmFjZWYsCi0JMHhkYWM0OTg3OCwgMHgwMjc3YzUzNSwgMHhjYWQ0NWM3ZSwgMHg5MjZiYjU4YiwgMHhlYzE5MjU0NywgMHhkNTJkMTRhOCwKLQkweGQ2NTFlZjUwLCAweGNmN2VmMGNiLCAweGY2ODY3ZWYyLCAweDE5NTc1OThjLCAweDA1N2NiM2RhLCAweGM1NzY3YTg2LAotCTB4N2RmYmMzMTgsIDB4ZjUwZDhiYWEsIDB4NjBkZWY3YmUsIDB4NzAzNzNmNzgsIDB4Yjc5ZWExYjMsIDB4Zjc4NjI3ZWUsCi0JMHgzMWNlZDQwNywgMHg2MWIxNWZiNCwgMHhjYWZkYTFiMSwgMHhmZDQzNzJlMCwgMHgzNzdmYmFlYSwgMHhmNDI0M2ZiYywKLQkweDlhZmRhMTgwLCAweGVkMGQ4N2M2LCAweDFiOGYyMzQzLCAweDNmMGVjM2VhLCAweDQ0N2Y3ODY5LCAweGZiNDMxNmYzLAotCTB4MWJjZmEzYzgsIDB4ZWNiNzQ3ZGEsIDB4OWVjN2Q0MzQsIDB4N2Y3ODYzZGMsIDB4NDM3ZWZiN2MsIDB4NmY4YmRhZmQsCi0JMHgyMjJmZGUxYSwgMHhkYmRhMzY3ZiwgMHhlZjBjMGZiNiwgMHg2YTdjZjI0ZiwgMHhmMzJlYmY2OCwgMHhlYTlkOTM3MywKLQkweDlhYmYxY2Y0LCAweDJiOTA0NWQ3LCAweDIwNDk3ZTgyLCAweDM1N2I0MTRiLCAweGFlYjA1MmUyLCAweDNmMzI3MmY0LAotCTB4M2Q0MGI1YzUsIDB4ZDk0N2Y5NDYsIDB4NDM0ZDU3M2YsIDB4ZDQ3ZmE0YmUsIDB4NTVlYTI4NmUsIDB4N2QwYjQ1NzEsCi0JMHhiZTMxZDNmZSwgMHhmOWY0M2MyYiwgMHgzNWRmMTU0ZiwgMHgwZGY2Mzg5ZSwgMHg2NDgxMzdlNSwgMHhhMDVhYTk0MiwKLQkweDk1YWZiNzM0LCAweDY3MTdiZjE5LCAweDMxZjgxYTVmLCAweGQyY2FiZWZkLCAweGQ2ODUzMDNlLCAweDIxNDU4OTdiLAotCTB4MDQ1NzhmOTAsIDB4NDlkNWRhMGIsIDB4Zjc4NmE5MjIsIDB4ZmQwNGFjOTIsIDB4ODViOWI1YTYsIDB4ZTQ2MjA3NGYsCi0JMHg2YTFmNWQ2MSwgMHhmZDFkMDg2NywgMHg5OTdkOTNhZSwgMHhmYWFkNDc2OCwgMHhjZTc2MDAyOCwgMHg1ZTc0M2U5YSwKLQkweDRkNzkwOGJkLCAweGU4MTIyOGY4LCAweGIzZWZiZjRmLCAweGZiNDdkMzIwLCAweGNmZDQyYWIzLCAweGExNWYxZDg4LAotCTB4ZjFjNjBmZTMsIDB4ODcwZjIwMjMsIDB4OWQxMWZjNjAsIDB4MWJmNmI3YzcsIDB4OTZkZjE4NjUsIDB4ZGYxODYxNTMsCi0JMHgzZGYxZDBhNiwgMHhmNTVjM2ZkNCwgMHgxMjlmMWYxOSwgMHg2ZjIxMGM2MSwgMHhmOGUxOWYwOSwgMHgxYzBhOWNkNiwKLQkweGZkNDJhZDdmLCAweDkzZjFkOGFlLCAweGMzMzdlM2EyLCAweDM0NGJkZmZjLCAweDhjNjM3ZWZmLCAweDZjNTljZmYzLAotCTB4ZTZjMmJmOWMsIDB4YjNhYWZlZmYsIDB4OWMyNGZjN2MsIDB4NTljMjA3ZmYsIDB4YzU5Y2ZmMzYsIDB4ZDY1NmZlNmMsCi0JMHg3NzdjNzQ2ZiwgMHgzMDJkZmYxNCwgMHhlMzA0ZjFmZSwgMHgxOWM2ZjM1YiwgMHhhOTc3ZGZlNywgMHgzNjU2ZmU3MSwKLQkweDVmNTVlOWZlLCAweDM4OWRmMWYyLCAweDk3YzJlN2ZlLCAweDk3N2RmZTZjLCAweGQ1OGFmOGUyLCAweDUxZmUwNWU3LAotCTB4ODNhYTkzYjIsIDB4OWJkMjdjNzQsIDB4NjAwY2JlMmEsIDB4OTQwZTNhMTcsIDB4ZDBhOTUyODMsIDB4ZTg0ZGIyMTAsCi0JMHgzNGZjNzA4NywgMHg1N2RiZjE4OSwgMHg1MGRmOTQ0OSwgMHgzOWYwMDU5ZiwgMHg1OWNkNTIwOSwgMHhjZTQ2ZmQ0OCwKLQkweDhiZWE0YmViLCAweGQ4N2JkMDE0LCAweGY5YWRmZDRlLCAweDhkNzlkNDFjLCAweDU5MzdmMjIyLCAweGEwMGUwZDZmLAotCTB4OGEzNmI2ZjAsIDB4NWJjZmE4MDEsIDB4ZmEwODNlM2YsIDB4ZWU0YWNhYjUsIDB4MjRlZjg3MmUsIDB4OWZlNzgxMTIsCi0JMHg5NmM4N2FmZCwgMHhjYjk5NzlkOCwgMHhmMWYyYjVmOSwgMHg4Yjc5MTg5NiwgMHg2NGM1ODFmYSwgMHg2Zjg1MzU1MCwKLQkweDg4YzEzMDEyLCAweGQ0MjdmYThlLCAweGY4YzcwMzhmLCAweDEwZjdlYTQzLCAweDJhN2NmZmVhLCAweDliZmVmMWIzLAotCTB4NmY1MDdiZmEsIDB4M2ExZWZlYTEsIDB4N2UxNTY0Y2UsIDB4Mzc3YmJiNDcsIDB4Y2U1ZmMyOTMsIDB4NjI0NGZmZTEsCi0JMHgxZGM5ZmFmMiwgMHhlNTQwMzA0MiwgMHgwZDlmYWJmMywgMHhlZWZhZmY0NSwgMHhlOTE0MWQ3YiwgMHgwZWNjNzAxZCwKLQkweGU5ZDQzMGY0LCAweGE3NDAwMmJjLCAweGUwZDZkZGY2LCAweGFiZjEwMTE2LCAweGExYTZiZTAyLCAweDc3MzIxMjY4LAotCTB4NzVjNTM2NWQsIDB4ZGQ3ZmZiYzcsIDB4ZTA5MGU1M2IsIDB4YTI1NmU0MjYsIDB4ZmRmNDE5YzksIDB4N2QwYTU3M2IsCi0JMHgxOWRjNzQzYywgMHhhZDgwYjU5YSwgMHgwNWI2NWE0MywgMHg1YjY0OWFlNSwgMHg3MzcyMTE0NiwgMHhmNjk5NTBjMywKLQkweGYyNjlhNjQwLCAweGUzMzEyZDI3LCAweGQ2MzMyZjRlLCAweGViMWI5NDY3LCAweDViMjZiMmFkLCAweGQzYWQ1YzI4LAotCTB4ZjY5OWIyMDQsIDB4YjE5NjczM2IsIDB4YmZhNzFmNWQsIDB4OTlkMTk1MjUsIDB4NzE0ZTU3OGYsIDB4Y2QxZjQ1OTIsCi0JMHgxZTAwYjI4NCwgMHhiM2NlOTA3YiwgMHgxZDViZWMzYywgMHgzMmI5YWE5ZSwgMHgxZjFmYTA4OSwgMHhhZTgwNDllOCwKLQkweGVmN2MzNDgxLCAweDZmMzYxZTI3LCAweDY0YjNiYzMzLCAweGU3NGU1NjliLCAweDE4YjY2YjM5LCAweGMzMzZmZTA0LAotCTB4ODc1ZWZlZmYsIDB4ZTVhN2M5NjYsIDB4NjI2NDI3YmEsIDB4MzMxZjNjZTksIDB4Y2NmOWI3ZmMsIDB4YjBjOTA5ZjMsCi0JMHg2MTVlZGZjZSwgMHhlNmY4Y2U3ZSwgMHgyN2ZmYTczOCwgMHgzY2I0MWZjMCwgMHhlMTQxZmMwMSwgMHhhM2Y5YzYzZiwKLQkweGZlMzJhZjQzLCAweGE2ZmFiMmE4LCAweDZmYjQzZjAyLCAweDk1ZDIwOTE0LCAweDljYWRjYmYzLCAweDFhZDdlNjVmLAotCTB4OWYxMDgyZjksIDB4Mzg1Yzc0MGMsIDB4Mzg3ODI4NGIsIDB4NzI2NjBmODYsIDB4YzFiODU4M2UsIDB4OTI3NzM3YzgsCi0JMHg4NzE1OWM4MCwgMHhkZmFkYjcyZSwgMHhkYWE2NjBmYywgMHg3MTFmN2U3OSwgMHg5MWZkYjliZSwgMHhjZTlmODg3ZCwKLQkweGJhNzQ2NGYzLCAweGNlZTlkMzhiLCAweGFkZmI2MzZhLCAweDcyNzdhZTljLCAweGYwZGFjZWJhLCAweDdkNTRlYmQ4LAotCTB4NDFhODlmOTAsIDB4ZWFiZGU0MTksIDB4MmQ5ZTlkM2UsIDB4MzhmYTdhMDYsIDB4ZGU3MGNkM2QsIDB4ZDc3OWU5YzUsCi0JMHhjZDNkMThjZiwgMHg3YTcwYjZmMCwgMHgyZjM4NmNiNiwgMHhlMTlkN2U5MywgMHhmNzc3YzMzNSwgMHg4M2U2OWRiZCwKLQkweDgxZDlhZDcxLCAweDZhYWNmNGY4LCAweDJjNzE1YTJjLCAweGU4NjU3OWU2LCAweDYyYzcxNWZhLCAweGRkNDk2Y2U0LAotCTB4NTE3ZDQzMzQsIDB4ZmJjMzM2ZjAsIDB4MzZjYzM3MGIsIDB4NWRhZmNmYjQsIDB4YmI5ZjY4NjQsIDB4N2Q0MzFlZWUsCi0JMHg4NjY3ZTA3NiwgMHg3N2JlZWZmNywgMHhjZWZkYTE5NSwgMHhlZDBjODdlYSwgMHg2NjNjNTdiNywgMHhkYmU2ZGZhOCwKLQkweGU2N2Y3ODY4LCAweGY2ODZjZGFjLCAweDE5Y2ZlNTE5LCAweGVkOTdhN2RhLCAweDY5YTdkNDMwLCAweDBiZWYwZGJiLAotCTB4NmRmNTE3N2IsIDB4ZjdkNTc1YzEsIDB4ZWYxMDE5OWYsIDB4ZjkxNTliZmMsIDB4NzRlZmFjZDQsIDB4YWZjYzc4YmQsCi0JMHhmZWUzZjNlMiwgMHhmNDllNTg0MSwgMHg2OWY5ZjE3YiwgMHg1NzJjMjhmZiwgMHhlYmE2ZmU4MSwgMHgyYjM3NjU4MiwKLQkweGRkOWYxZWFiLCAweDk3NDJmODE3LCAweDZmNjU0ZjhiLCAweGFlZDllODBlLCAweGJlZmVhMWY0LCAweGJmZDFlZjU5LAotCTB4OGE3Njc4ZWMsIDB4NDgxNTJlNWUsIDB4NmQ4M2FjMzksIDB4OWZkNzRlZGMsIDB4NGVjYzJkZGIsIDB4MmMwMWU0MjAsCi0JMHg2ZTRjMmE5NywgMHgyYWNjZWU5NywgMHg0N2E4NmUyNiwgMHgxMzNiNTYwNiwgMHgwMjQyNGJmNywgMHg2ZDdlNjdjZSwKLQkweDg1Y2UwMTllLCAweGMxMzZhZTFiLCAweDZhZjkwNWI3LCAweGUxOTg3MDUxLCAweGIxYmE5MmY5LCAweGVjY2VlZjg2LAotCTB4NjViZTExMTMsIDB4NjFhM2UzMjAsIDB4ZGY3ZjJiMzksIDB4NzIzM2ZhMDIsIDB4MTBmYTY3MjAsIDB4MDBmYjU3ODAsCi0JMHhkMTNkOGRlYiwgMHgyZmUzM2I5ZSwgMHgwMDZjNzE1YiwgMHhjYjFjYjllMCwgMHg1ODU5ZmU5MywgMHhiMGZiZjcxZSwKLQkweGMwYWZlNjNjLCAweDM1N2YxM2YyLCAweDdiZmUyZDk2LCAweDdmNmZmY2IxLCAweGZkMGZjYjAwLCAweGRmN2NiMGViLAotCTB4NTFlNThiNWYsIDB4ZGYyYzA2ZmYsIDB4N2NiMTA3ZjMsIDB4ZTU4NzVmZDcsIDB4OTYxMGZlM2IsIDB4MmM0NmZlY2QsCi0JMHg5NjFhZmQ1YiwgMHhmMGM0YmNiYSwgMHgxOGFjZGY0YiwgMHg5ZmY1ZDE3ZSwgMHg3MjRmMWZhZSwgMHhmYzBkMzk3ZSwKLQkweGI2MmY4ZjEyLCAweDg0ZTJmOTE4LCAweDYxN2M4ZDVjLCAweDNhNjY4N2Q2LCAweGY3ZGZmNTk4LCAweDNmMjk4N2U1LAotCTB4ZDA3NDNmMTIsIDB4ZWY0NGRiM2IsIDB4OWRlOGFlYmMsIDB4N2JkMGM2MjksIDB4ZTBjM2M1OGEsIDB4MDVmZWY0ZTEsCi0JMHg1ZWM3MWJjMCwgMHhmYjhiMDQ5ZiwgMHg0ODNiMTg4OCwgMHhmYWMwYjIyYiwgMHgyZmVmOWNiMCwgMHgzZjU4MDdkMCwKLQkweGExYWVjN2M3LCAweGJkYTMzNWRkLCAweGZhMDQxYzE0LCAweGZmYTBkY2Y4LCAweGY5ZjEwODE5LCAweDUxMjk0NzczLAotCTB4Y2ZjZjEzNzIsIDB4Nzg4NGJmNGMsIDB4YWJlOGYxODAsIDB4MmU5NDgyMGIsIDB4ZGJiNzNhM2QsIDB4ZWQ1ZTE4OTMsCi0JMHhlODQ2NTIxNiwgMHg4MGQwZjE3YSwgMHgwNjczYmM2NywgMHhhOTIyNWQ2MywgMHgzYmQwN2RmMCwgMHg1ZmE3MTVjZCwKLQkweDdlMDI4MzZhLCAweDhkNmJjMmJiLCAweGU4N2NhYmViLCAweGZmOTNmOGVmLCAweDhhNzI4NDJjLCAweDQ5YTFkOTg1LAotCTB4ODdiNDQ0MDcsIDB4MmY2OWU0NDksIDB4ZWZhYTM3ZTAsIDB4ODg0Y2RlYWQsIDB4NTAwZmI3NjMsIDB4OTMxZWI4M2MsCi0JMHgwMmZlMjMxMiwgMHgzZGZjMDZjNSwgMHg4Y2Q0NzE0NCwgMHgyNjZkNTllYiwgMHg1N2ZmYWZlMiwgMHg4MWJhYjMwMywKLQkweDY0ZjRhZWJmLCAweDAzOWNmODU3LCAweGUwMTdmZWYzLCAweGQ1ZmQyYmIzLCAweDlhMjJkZTk1LCAweDlkMjM1MmZhLAotCTB4MjFkZWRiN2YsIDB4MzBhYjBmMDUsIDB4NWJlM2I3ZWUsIDB4YzMzMmI3ZGYsIDB4N2M4ZWY4MTMsIDB4ZjNhZTk2ZGMsCi0JMHhhMTBlNzM3MSwgMHhmMmU1OWNlMywgMHg4YWUxYWU3MiwgMHhiNDRiYTA2NCwgMHgyOWU4MmU5ZiwgMHgzOTQ3ZDdmYywKLQkweGU2Y2ViZmEwLCAweDZiNWJmYjFhLCAweDIxNTkyZmVlLCAweDVjNzQzNWMyLCAweDY0OTBhMjk3LCAweGJlODg1NjQyLAotCTB4MDZmZDExNWEsIDB4ZmMwMDRiNmYsIDB4NmYwZWJkZjEsIDB4ZDhmZTBhOGQsIDB4NTQ0NjNmZTksIDB4YjdlOGQ5ZTgsCi0JMHhiNGZjM2I5ZiwgMHhlNTliZmMxYiwgMHhiMWY1NjI5OSwgMHhjYmQ0NzQzOCwgMHhiNTZlNTBjYSwgMHg2ODBmZDYzMywKLQkweGQ1Y2ZkNjM0LCAweDljMjE2NTBhLCAweGNiN2M5YTk3LCAweDNjMDc1ODEwLCAweGQwNjRjN2Q1LCAweGVhNTg5OWNiLAotCTB4NTRjZjJjZmQsIDB4N2Y0YTFjNzAsIDB4NTNlYTQ3YTYsIDB4ZjY5Y2NmNTAsIDB4MWZiZGYwZGIsIDB4ZmQ0NDhlMWIsCi0JMHg0MGQxYzA3NCwgMHg4M2RmYTUzZSwgMHg0YmNlNWQ4OCwgMHgzOTQyN2VmYywgMHgxMDI4MmU5MCwgMHhmOTYxMjQ4ZiwKLQkweGVjZGZmMDJiLCAweGZkY2JiZmY0LCAweGViMDk1ZmEwLCAweDIxNTViZjdhLCAweDA2YmQ2MDMxLCAweGM2MWJkNzllLAotCTB4ZmFhOWRmYTMsIDB4OTc3YzJjMWUsIDB4NzIyNGRlNTgsIDB4NGE3N2U3NWMsIDB4N2VmODM3YjcsIDB4N2IzYTkyZjEsCi0JMHg0YzJlZDFiNSwgMHgxYWFiZDQzMSwgMHg3NjBkYWFiMywgMHgwYzAzZmMyMiwgMHgwMjQxMGFlMSwgMHg2NzI5Nzc3YiwKLQkweGI5YzkzNmJmLCAweDJiNjhmODBlLCAweGRmODBmYjA0LCAweGE1NWVmNjA1LCAweGE5ZjE0NWFkLCAweGMwY2QyNjI4LAotCTB4ZTk0NjczOWYsIDB4ZmNjZWFmN2MsIDB4NTNhN2VhODAsIDB4ZTQwNGM5NmYsIDB4NTBhMjVjOGIsIDB4NDdmNDc2MTUsCi0JMHhhMTYyNTA1NywgMHgzNmJjYjlmNSwgMHg2NGM5NjFhNywgMHhiZDRlYWY1OCwgMHhmNWRhMjM3MiwgMHgxYmI5NDhmMywKLQkweDUyMGFjZGZjLCAweGNmZjEwODViLCAweDA2NTJjNGIzLCAweGJjOTY3OTcyLCAweDIzMTYxZWUzLCAweDA1NDVlNzg3LAotCTB4Y2ViYjk5ZTEsIDB4N2Y1MzE3NjgsIDB4Yjg1ZjUwZDksIDB4NDA1ZjU4YzEsIDB4N2Q4NzRlNmUsIDB4NjVlYjA1ZjAsCi0JMHg1ZjQwMTQxMiwgMHgxNTNmZGIxOCwgMHgyNDJkMWM5OSwgMHg3ZDYwNmJkNSwgMHg3NWIzMmY1ZiwgMHg0ODg3OGU2YywKLQkweDU1NWY1NGQ5LCAweGUxNTRmYWJlLCAweDFmZmY1YTZjLCAweGY0MmRjNTkxLCAweGE5NDVkZDdkLCAweDFjNTg5ZmNjLAotCTB4YjQ2OGFjZGEsIDB4NjE4NmQzZmQsIDB4NDNjZDUyYjcsIDB4ODFhZTBmYmYsIDB4NGJiMDJhZjUsIDB4M2I1MzZlZjAsCi0JMHhjMmJiZWZkMywgMHg1ZjU3ODY2ZiwgMHgyZmVkM2JmZiwgMHhlYjJhMzg3MywgMHhjNzE4MmQwNCwgMHgwMjQ5YjAwZSwKLQkweDU4MDM3N2Y3LCAweDg2M2M5NjBlLCAweDUzMjhjMmI4LCAweDUzZjM3YmZkLCAweGQzZjAzMTFhLCAweDRhYTdkMTU2LAotCTB4ODBmZjE5M2QsIDB4ZWQ0ODI1M2YsIDB4ZjQ4N2VmOGEsIDB4ZmZhOWQ5OWYsIDB4ZmY2YTNmYzEsIDB4ODVmZjY5YmQsCi0JMHhmZDQ3ZmU4NiwgMHhlZmY3ZmRhOCwgMHg2OTQ0ZmYwNCwgMHgyYmZlZTc0NCwgMHg5NWYxN2Q1ZiwgMHg4YjI3ZDUwMCwKLQkweDRkZGFmZmI3LCAweDRhNzhmYWU4LCAweDUyZjc0ZGFhLCAweGY2ZGQyZWZhLCAweDdjZTgxYmEwLCAweDgxYjgwYTUyLAotCTB4YzUwNTRmNWYsIDB4ZjU5YzYwYjIsIDB4ZTA0OTNlZWEsIDB4MTRlNmEyZjYsIDB4ZmYwNThlMjAsIDB4N2U5ZmZkYTQsCi0JMHhkZmU4MTdmZSwgMHhmNjRkYjU3ZiwgMHhjZWFhN2M2MCwgMHgzOTUyYjExYSwgMHg2OGIwZDY1YywgMHhmYWM3YzkzMiwKLQkweGY2YmVhY2M3LCAweDhkZWExMTBiLCAweGZjNWJmZTQ2LCAweDIxZDNhZmVjLCAweDBhNzI4MmRmLCAweGQwNDRkNzhmLAotCTB4ZjViNjVkOWUsIDB4OTc1ODUyYjMsIDB4Y2EzYjQ4YWEsIDB4MTgzYmY5OTEsIDB4ZWEyYTYyZmYsIDB4NzI0YWQ5YmYsCi0JMHgyNzBhNzZlNywgMHgxYzU1ZGRmYSwgMHhiZjBkNTUyZiwgMHg0Mzc0NDJmOCwgMHhkMDA5ZmQ3OSwgMHg0MDQzZDQxNywKLQkweDVkZmNkOGJmLCAweDk3NGZiNzA1LCAweGUzYjRhZTRhLCAweDIzMjcxNGQ0LCAweDhiZDA0OGM5LCAweDkwNDg1ZTNhLAotCTB4YWJlMmE3ZDksIDB4M2M0M2U1NGYsIDB4YjdkNmNjZjIsIDB4YmUwYzQyZGMsIDB4MTczYTc5NzQsIDB4N2I5ZmZiOWEsCi0JMHhiNzdhYzRkNCwgMHhhYzViY2E5NSwgMHg1YmFmYTQxZCwgMHhhYmI3MjM2YSwgMHgyYTVjYWNjMywgMHgxZjkwZGM0NywKLQkweGVjYjM3NGIzLCAweDRiYzdkMDBkLCAweDk5ZmE3YzVmLCAweGY4M2UyMTI3LCAweDAwNzdhYjM3LCAweDhiYzk3ZmVkLAotCTB4ODYzN2JmYWYsIDB4OTBlYzk3ZDYsIDB4NjliMzI2ZDMsIDB4MGVmNDg1MzgsIDB4ZmZkMTU0ZmEsIDB4YTBlODJkZWUsCi0JMHg1Zjk3ZTJjNywgMHhlYzIxZDQ1NywgMHgxZGE5ZmRmOSwgMHg2M2IyNTk3NCwgMHg3NDg2NDI5ZiwgMHg2ODQ5NDdjNiwKLQkweDhjZTJkMjlmLCAweGM3ZDA5ZjQzLCAweDg4Mjc2MGE1LCAweDAwYWQ3ZWFmLCAweDE1ZWQ0ZmZkLCAweDFjNmU0NjQ4LAotCTB4MWQ3ZTZlN2MsIDB4MTNjMDAwZWQsIDB4MmJkMzkzZDIsIDB4ZmJkMzNmNGEsIDB4YTAyZTk0NTUsIDB4MzJmNGNkYjcsCi0JMHhmNDA1MzdiZiwgMHgyZmQ2MDhjYiwgMHhmZTUwMmRlNCwgMHhlNDBmNjk3ZSwgMHhmNTZmYmQxNSwgMHg1ZTJhMWUwMiwKLQkweGY5ODZlMTVhLCAweDE5YWE5MDljLCAweDYwZjUzZjlmLCAweGFmYzc0NmJhLCAweDFlZTkwMzkwLCAweDhhZjNkOTJjLAotCTB4ZjIxYmZkZGYsIDB4ZmZiN2MyZGYsIDB4MzVlMzFkMmQsIDB4ZTBiMmNiNDQsIDB4ODJjODE0NWEsIDB4MzRkZmNlNzksCi0JMHg4MGI5ZTcwMywgMHgyYjBmOTBmOCwgMHg0MWNiMTI5ZSwgMHg5MTI5N2UxZiwgMHhlNDcxMWRiMiwgMHg5Mzk3M2NlNCwKLQkweDcxMjg1YjEzLCAweGQwNGYzY2U5LCAweDZkZjMwNjY1LCAweGRiODMxMWRlLCAweDg3YmVkZWQwLCAweDM3ZjgzZTgwLAotCTB4MzE2YTE3M2UsIDB4MWI0YmZkNjAsIDB4OTIxYmQ3YTMsIDB4YWI1MTk3ZWUsIDB4Yjc3Zjk2MzMsIDB4M2EwNjZkYWUsCi0JMHg2NWEzZWU5ZCwgMHgxNTQ2M2VjMCwgMHgxZjFjMDI5MSwgMHhhZmRhNjVjMiwgMHgwY2E0ZjZmOCwgMHg0YWEyMjc0NiwKLQkweGJhM2JmYzg1LCAweDczYzA5N2VlLCAweGQ2NTliZjc4LCAweGVmODZmOWVjLCAweDhlZGNlNWM4LCAweGYxZjI1N2YxLAotCTB4YjA0OWRjMjksIDB4OGY0ODlmNWUsIDB4YjJhYWI3NmYsIDB4YmFlODA3YWUsIDB4MzE2N2MzMWQsIDB4N2ZlNGNlZjIsCi0JMHhkZTRjNDNlYiwgMHg0ZTBmZjk3NSwgMHgwYmY2ODMyYiwgMHg4MjM5MzJlZiwgMHhhNDNkNjBlZiwgMHhiMDMyNDU3MCwKLQkweDAyMmRkZjdkLCAweDg5MmIwN2VhLCAweGFkZjM5M2M0LCAweDYzNzM5NzMyLCAweDI4NWY5OWJiLCAweDFjOTA5MmZjLAotCTB4NGUzMDM3YzMsIDB4ZjcwMWQyMmEsIDB4YTdhYzE2MzEsIDB4ZDFlOGM3ZGYsIDB4ZGRkNzE4MmEsIDB4OGU1ZDVmYjksCi0JMHhkMDdkNzIxNywgMHg2NDA3ZDI2YSwgMHg4OTAzZDMxMywgMHhhZTAwYWFlZCwgMHhlMGU1NGI3ZiwgMHhmYzgyNGYzMywKLQkweGE4MGQ3OTUyLCAweDM5NzJiZjIwLCAweGZhZjNmZmNjLCAweDg0ZmRlZjAzLCAweDIxZTdjZGNhLCAweDdhOGQ2ZTVkLAotCTB4MTViNzJjZDUsIDB4Nzg5MDQ3M2IsIDB4ZDNiOWZiNzIsIDB4MmRjYWUyNGIsIDB4NmU1NzFlN2QsIDB4Y2ZjODJkOWQsCi0JMHhhYWY1YWZmZiwgMHg5OTBjYzc4ZSwgMHgwZWVhZjFlMiwgMHgzMjdhZWEzYywgMHg3YWNkM2UxMSwgMHhjNmE0YTc3MiwKLQkweGVmZjQ5M2Q1LCAweDk5ZDg1MjVkLCAweGQ0M2U3NTFmLCAweDBiZjE2ZmY5LCAweDFmNDE3ZDk1LCAweGU3NTRmOTQ1LAotCTB4ZWE5ZjI4YzMsIDB4NWUyOWQ4N2MsIDB4YjlhM2MwNmEsIDB4ZWZiMGVmZmQsIDB4ZGI2MmZjMDEsIDB4NzUxOGY1MzgsCi0JMHgwMTVlNmQyMSwgMHgzMzhhZmVlNSwgMHhiNGFmY2MxNiwgMHg1ZjcwMTcwZCwgMHgwOTA2ZDA2NCwgMHgzYzViNmZlYiwKLQkweDlkNGVjMDIzLCAweGNmZDVmNjNhLCAweGJiYmU0NjdmLCAweGNiN2RmMDdmLCAweDNmM2UyOTU3LCAweDZlYzg0MDE5LAotCTB4NWYwNDY1MjgsIDB4YzhlN2E1OGEsIDB4ZWFiMzgzMzAsIDB4NDNmNjA5MDgsIDB4ZTU4OWEwZmQsIDB4Y2ZmNGZlMzEsCi0JMHhiZGY3NjY2NSwgMHg2MWNlZTFmYSwgMHhiNmEyYzc4MCwgMHhhODJkYzljMSwgMHg5ZmEyMDczNywgMHhjOGY1YzU1OSwKLQkweDBjOWE4MGI5LCAweDM4NWNmNWZhLCAweDczYzlmZDBmLCAweGJjNTc0NTg3LCAweDM4ZTdjNmZjLCAweGY4ODA1ZjdkLAotCTB4YjZkYjJkMTksIDB4ZjI5MTVhOTIsIDB4NDc2OTFiNWQsIDB4ZDViMDIyYmIsIDB4ZDljNWI2NDYsIDB4OTk5MGFhZGYsCi0JMHhmOGExZmM5ZSwgMHgzZTAzZmEwMCwgMHg5NGI3YjM5ZSwgMHg3M2IxYzc5NiwgMHhiYmViOWRmZiwgMHg4MWZmZmJhOSwKLQkweGUxNTVlNmViLCAweGE3YjAxNmNkLCAweDMxNmFkYWFlLCAweGViOTYwNWM0LCAweDBhNDA1ZDdjLCAweGVlYTdhZjgwLAotCTB4MDM4NmJiYjcsIDB4NWU4YjBmMWUsIDB4MGFhZDAzYzgsIDB4ZTJmOGExN2YsIDB4ZjllNjhkZjgsIDB4OGY2MGZmNDMsCi0JMHg3MDdiMmIzZCwgMHhkMGU0ZDdkYywgMHg2YmMzYzA1YywgMHhmNjA0NmQ2NywgMHhiNTJiNzZkMywgMHhmOWMxZTI0YiwKLQkweGI5YzE4NTJiLCAweGNiYTMxOGZiLCAweGEyOTc4NThmLCAweDE4YTQ2NzM2LCAweDA5NWIzZGUyLCAweDNhNjc2ZGYyLAotCTB4NzNmM2U0MTMsIDB4MmFiODI0NzUsIDB4YjIyZGU4MTcsIDB4NjgzNTNkN2EsIDB4OTQxNGZiZTgsIDB4ZWY4MzhlNWYsCi0JMHg2MzVlZDEyZSwgMHhjNjhhZjNlNCwgMHhmNDA4MmYxZCwgMHhjMTYxNjViZCwgMHhjYmVkYTE2MywgMHhmODA1MTZhNCwKLQkweDQ1MzFhYWE1LCAweDU0MzY3ZDA0LCAweDNkNWJmM2Q1LCAweGUxODk2ZTQzLCAweDA5NjU2N2JmLCAweGNjNjA3OWU3LAotCTB4NWUwM2I3NmIsIDB4MDg1MTlmY2UsIDB4MDc2ODAxZTQsIDB4Zjg0ZjMxZGIsIDB4ZjIxODc4N2MsIDB4YmQ3OWEyNWIsCi0JMHgyNzUzMjdlYywgMHg0MTBmZDBjYSwgMHg3MWQzMzYzZSwgMHhhMTkyN2Q3MCwgMHhkN2M0YjYzZSwgMHg2YTlhZTAwYiwKLQkweDhkZTk1OTZkLCAweDFjMDFmNzgzLCAweDdjOTYzZmVmLCAweDViNzY1NTc2LCAweGU1ZDVkZjdlLCAweGM3OTYyN2Q3LAotCTB4OWQ1N2RkZjAsIDB4OWUyMzM3ZTUsIDB4YTU1ZjJlZmMsIDB4OTdiY2MwNjYsIDB4MDA2NWU1MzcsIDB4MjFiZjk3M2UsCi0JMHg1N2M3OGNmNywgMHhkZjk5ZmEyZiwgMHgwM2U3OWRiOCwgMHhmOTUwMzViNywgMHg3ZTQ2MjZiZCwgMHhjNmZjYTgxYiwKLQkweGZjYjYxMzg5LCAweDIyZmJmMmM4LCAweDdiM2M2ZmM4LCAweDk3NTdjZjhjLCAweGM3ZjBmY2RmLCAweDBkZjliZjI4LAotCTB4Y2ExZTQzMTYsIDB4ZWZhZjk5NjksIDB4ZTg1N2U1MDksIDB4ZDQxYTRiNzksIDB4OGUyM2FmNjUsIDB4NDAzYzA2YmUsCi0JMHhkZjNiNzM5YywgMHg0MDcxODAwNywgMHhiYmU1NTU4ZSwgMHhmYzdmZjFjOSwgMHhmOTc4ZTU4YiwgMHgzMzc5ODIyZSwKLQkweGU0Y2RlOTlkLCAweDJhNmVmOTc4LCAweDlkZDAwMmM3LCAweDI2ZjJmMWM5LCAweDlkYjljNzJhLCAweDI3NTA3N2U1LAotCTB4MmZkZjY1ZjksIDB4YWJlZmIwOGIsIDB4N2I3ZjczMWEsIDB4NDBhZjFkMDcsIDB4ZmEzNmJkOTMsIDB4M2M4NzQxN2UsCi0JMHg2Nzk1ODg4ZiwgMHhjZjIwNDk1NSwgMHhjZjI3YmI4NywgMHg1MzNjYjhiYiwgMHg4ZGU3ZWQzOSwgMHhkODZmNTc0MywKLQkweGRhZjYxZjk4LCAweDJmZjUxM2U4LCAweDQxZmU1ZjAzLCAweDZkZTlmZjQ0LCAweGZmNzNiMzBiLCAweDcwYzRmYTM4LAotCTB4MDBkYjhiZTAsIDB4NjMyZmNhMWUsIDB4ZmQ1YTFkMzksIDB4NzRiZmVjMDEsIDB4OTA3NGM2Y2MsIDB4YjU4MzkyOTMsCi0JMHhlYzNjODFiZiwgMHgwMTMyYWRjYSwgMHhlMWFjYjg3ZCwgMHhjZDUzZjQ2MywgMHhiZWRkMTc3MSwgMHg3NDVmYzczMiwKLQkweGMzOGU2MjNkLCAweGJkMzNhOTJjLCAweDlkYmUzMGE3LCAweGJjMjBiNjI2LCAweDc3YTI0ZmU0LCAweGQzYmUxYzViLAotCTB4ZTcwNGViZGYsIDB4OWNmN2RhZTEsIDB4ZWNlMDNiYzMsIDB4Y2ZhNDJlMmEsIDB4ZjRiODJiYTMsIDB4N2MyYjk1NzksCi0JMHg4NjRhMWJiZCwgMHhlMjkxYmM0MSwgMHhmMDI1ZTUxMSwgMHhhYTcxODhhNiwgMHg4NjAxYTJmMiwgMHg3MmI3MGNmMywKLQkweDE2ZDU4NzM4LCAweDYyZDg0MDk1LCAweDgwZWJlNDFhLCAweDllZTFiNTVmLCAweDM2OGZiMDQzLCAweDAwNWFhOGUyLAotCTB4MzFkOGY1NjYsIDB4NTdmODFmNTYsIDB4NTFkYmQ5Y2YsIDB4M2NiYTc1OWUsIDB4Mzk2NGY5YzQsIDB4NWViNWU3ZWYsCi0JMHg2ZmMwYzVkNSwgMHgwNzgyOGQ1NSwgMHhjOGFhOWRkNiwgMHhjNmRjZjAzZiwgMHg5NTVmOGQ4MSwgMHg2YTJkMWYwMiwKLQkweGU0NTYzYzEyLCAweGYwMTQyZmMzLCAweGZhZTk0YWZiLCAweDJjMzRmYzBiLCAweGJmZGEwNWZjLCAweDQ0OGE5YThiLAotCTB4NmVkMTdlZjgsIDB4YmJlNDEzMDEsIDB4ZTk3NzRmYzIsIDB4ZjdjMzk2YjYsIDB4MDRlZmMwMjIsIDB4YmFkOWRiMzgsCi0JMHhkYmQzZTFjNiwgMHgwMTgwYTRhYiwgMHgyZjI3OTJmZSwgMHg3MDY2YzlhZSwgMHgwM2I1NTZhYiwgMHg3ODUxMTFkZSwKLQkweGFmMzg4YjY3LCAweGUzYWJjMjZlLCAweDFmNzgyYmJkLCAweGUzZGViODUyLCAweGI4ZDNmYzc0LCAweDIyMmYxOGYzLAotCTB4Zjk2ZTk0ZTEsIDB4NmUzNWRmMzcsIDB4ZDE5YTQ1NTUsIDB4NTdlM2QzNWYsIDB4MmFkZjQ1NWIsIDB4NjU4OGUyMTksCi0JMHhmMzhjNjQ4MiwgMHhmYmZjNjNiNiwgMHg3ZmZmZTg0NywgMHhmMDdmYWRiZSwgMHhkZDc0MjIyZiwgMHhkM2ZkN2RmYSwKLQkweGNmYjNlZjg4LCAweGU4MTUzYzdmLCAweDkxMzVlNGIyLCAweDVhNWQyOGQ4LCAweDgyMjQ1ZGViLCAweDA1NDEyNGZiLAotCTB4NDFiOGIwZTgsIDB4MjQwZTMwZDQsIDB4YmJhNzBhNDUsIDB4YzM1MWYxNjIsIDB4ODVkZGIxZjAsIDB4NGVmMTcwN2EsCi0JMHhmZDMyNzA2YiwgMHg5ZjJiZjE3ZSwgMHhkMzNkODNlNiwgMHhhMWZiNDBmYSwgMHgzYzAzODg2YywgMHg5MzFjYTAyZiwKLQkweGVjM2U0YjQwLCAweGQ4OTYyZDEzLCAweGJmMTk4ZGJlLCAweDg3YzU4NTExLCAweGNjNzZlY2NmLCAweGVhMTA3OTAyLAotCTB4YzVhOWI5ZDgsIDB4MzViMjk5YTEsIDB4NTU3ZTFlYzYsIDB4NjQxYzU5OTEsIDB4MTVhZjNiMzcsIDB4YmNjMDRlNzgsCi0JMHhmNjJmODAzMSwgMHg4ZjllOGVkYywgMHhlNjM5ZTY3MywgMHg5NDZlMmM5NywgMHg2YWZlNzA4MywgMHg1NjhlZGQ3MSwKLQkweDNlMmM5Yjg4LCAweGFkNzVjNTZhLCAweDhjMGJlZWFhLCAweDdmNmM5NmZiLCAweDZhZWY5ZDkxLCAweDcyZmUwZDE0LAotCTB4NGViNTNmMjcsIDB4YmZjMTU4OGMsIDB4MzhjNGE4NmEsIDB4OGM3ZmFkM2MsIDB4MGJmNzEwZjUsIDB4YjUxZmEzYmYsCi0JMHgyYmQzN2I2NCwgMHgyNWMyOGEwMSwgMHhjNmViM2YyZiwgMHhkYmNkNTg3MywgMHhkNmFmZThkYywgMHhhOGRjN2I3ZCwKLQkweDdhMWE1ZjkzLCAweDUzYTVmYjg4LCAweDk3ZGY4MDRlLCAweGNkM2QyZmM4LCAweDYyYjRlNGY5LCAweDdhZWJlZmYyLAotCTB4ZTE0YWJmYTAsIDB4NjM4ZjJjMmMsIDB4ZmZmOTQ3YjcsIDB4MDc3ZjJmYzUsIDB4M2IzM2Q1NzEsIDB4YzAxZGZmM2YsCi0JMHhmMzliZjRiZCwgMHhlMjhmYmJiZiwgMHg3YmI1ZWM5MywgMHgzZDU2MGY0MCwgMHg0MzhjMTdmZiwgMHg1NjQ5ZGZlOSwKLQkweDdiOWZhZmFlLCAweGFkNzhlMzE2LCAweGExN2FiMzdmLCAweDEzYTZkNmI3LCAweDZhYzcxMDM5LCAweDc0OGZmMWRkLAotCTB4MzY1NjUzYjAsIDB4NmJiYjQyNGQsIDB4MGM5MmFlZTUsIDB4ZDA0ZWM3MTIsIDB4NjBkZmUwNGIsIDB4NjY4OGUyMzcsCi0JMHgzODY4MWRiYSwgMHg5ZTcwMDM5MCwgMHg3NDg3NzRhNSwgMHgyMWJjNjhiZSwgMHgzOGUyYzk1NCwgMHhkNDMzOGYyYSwKLQkweDc2ZGI4ZmM3LCAweDRjMzQyYjhhLCAweDcwZmM2OWJmLCAweDRhYWY2NTI4LCAweDc4NWYxMWJhLCAweDlhZjNkMjk3LAotCTB4OWViMWQwNmUsIDB4NTM0MjkxYzcsIDB4NzBiZTM1YmUsIDB4ZTk0MWZlMTYsIDB4YzYzNTY3OTUsIDB4OTg2Y2JlMTcsCi0JMHg0MjRmOWZmZiwgMHg4NDhmNDM1YiwgMHgzNzQ4ODVmMSwgMHg4NWM3YTdmMCwgMHhkZjJkMTRkYiwgMHhmM2I5NzIwYSwKLQkweDAwZWI4YzA1LCAweDA5ZDMyNmZkLCAweDY1ZjhiZWI3LCAweDRmZDVjNDBlLCAweDYxNzdlZGNhLCAweDE1OTM1YmJlLAotCTB4MzcxN2Q3ZjcsIDB4YTllNTE1ZmQsIDB4NjhkYmQ3NzUsIDB4OWYxZTEyN2YsIDB4M2ZkMTI1NmQsIDB4YjllMzQ3MTYsCi0JMHg1ZDViNTVhYSwgMHhlOWMxMmUyYywgMHhkNTBiNzEwMCwgMHg3Yzc5Y2Y4ZCwgMHgxZWI1ZjE4MiwgMHhhZjE0NDhiNywKLQkweGM3ZWQ2MDU4LCAweDVjNTk0ZWYzLCAweDA3ZWI3MmE1LCAweDgzYzUzMTBhLCAweGViMWQ1MTg0LCAweGU5N2EyMjdlLAotCTB4MWUwMGYwNzgsIDB4ZTNjNmM2NDYsIDB4YTI4N2M3ZTIsIDB4ZGQxMzM4ZjEsIDB4ODcxMDllODAsIDB4NjhkYmM2OGIsCi0JMHg1ZGM0MzdiZCwgMHhlMzVmYzI4MiwgMHgzNzViNzdjNSwgMHhhYjVlMzhiMywgMHhlOTViY2M2YywgMHhjZjhiMTNhMCwKLQkweDViZDEzNmNkLCAweGViNTc2ZjlmLCAweGY4ZjM1NzU2LCAweDA2OWE3OGFlLCAweGNlY2Y3NjhiLCAweDI5NzMzYWY4LAotCTB4NmQ1ZjdlYmUsIDB4M2VkODdlMTUsIDB4YmNjMTNjZWIsIDB4N2MwMzUzZWYsIDB4YjFmMGQ5NTksIDB4ZmE4ZDc5MDIsCi0JMHhmN2NmYTZmYSwgMHhjZmNmYjcwYywgMHg1ZTYyMmYzYywgMHgwMWQwOWFlZSwgMHhmZDY2ZWZkNCwgMHg2MWNlMGNiMSwKLQkweDM3Zjc4MWM0LCAweDhkNjVkZTFjLCAweGIzMzhmZDZjLCAweGQyNzQxNWQzLCAweGRmZWNjZTdlLCAweGFjYmQ3YzhkLAotCTB4NDAyNTYzZmUsIDB4Zjc1NDNiZmIsIDB4NDlmY2MyYjIsIDB4N2ViMDQ3MjYsIDB4M2ZlMDYzMDQsIDB4N2NiZWQyZjMsCi0JMHhmZTY0N2YxNiwgMHhhZDljNzk4MCwgMHg4NTU2M2Y1YywgMHg1NTUzOGZlMywgMHg5YzYxODVmZiwgMHhjMjkwODEyNSwKLQkweDdkYmZhY2YyLCAweDM2OTJkM2JjLCAweGRkM2JmYTEzLCAweGIzYzgxMzJjLCAweGNiMTIxZDNjLCAweGFlNmJlZGUyLAotCTB4NWY3Y2NhYjUsIDB4YjljNTk2YjMsIDB4ZTc4YTNhZTksIDB4OWNlYzVjNWUsIDB4NjBhYTk4OGIsIDB4NmJhNTY0MWMsCi0JMHg1ZjM4NTFkNCwgMHhhOGE1ZDJiOSwgMHhhY2Q1MWZlMCwgMHgzNWJjZmI2MiwgMHgwMjY2ZjczZiwgMHg2ZTUyNmJiZCwKLQkweGFkNmQ3OGM1LCAweDM0OWViZjA5LCAweDdmOWMxMTRmLCAweDFmMmM0Y2YxLCAweGQ2NmFlYzBlLCAweGM1OWEyOTNiLAotCTB4NTc0YWZmMDAsIDB4ZTE0YTg2NTksIDB4ODFmYjRkNWMsIDB4ZjI0NGE4ZjMsIDB4ZDExYzM5ZTIsIDB4ZjMwNjVhNWQsCi0JMHg4ZjE2M2QxMSwgMHg0YzdjNGUzZCwgMHg1ZjEzOTY3NiwgMHg4ZjY0NWUwYywgMHhiOTBjZGNmMSwgMHg3ZTg1NGMzNCwKLQkweGE1ZDlmZGY0LCAweGQ4NDNlNmI2LCAweGUwMDRkMWU4LCAweGM3ZWY4OTJiLCAweGMxZTJkZDE3LCAweDBiZDViNzc5LAotCTB4YWE3MTYwNWUsIDB4M2E0ZjU1OWUsIDB4NzU4MDMzY2IsIDB4NzI2NzZkYTQsIDB4M2YwNmI5M2UsIDB4NWY1ZDFhMjQsCi0JMHg1MGI5ZmMxYywgMHhlODFmNmZiZiwgMHhhMjZlZDVhNSwgMHhhMzM5NTBhNSwgMHgzY2M1NTU1OCwgMHhkNDM0M2YzOCwKLQkweDlmMDFlNDI2LCAweGQ3YzdmMTdlLCAweGIwZjZiZjY4LCAweGEwMzUyMDQ4LCAweDE5ZTdhOWNkLCAweDY3MjAyOTY5LAotCTB4ZTYwOGYyMGUsIDB4NWYyYjAwOTMsIDB4YTcwMWQxZWUsIDB4YzA4NGNmMzksIDB4OTdlNzMxMmIsIDB4OGM0ZTg5MjcsCi0JMHgyNGRiOWM3ZiwgMHg5MjJiOWZhMiwgMHg4ZTNiN2VhYiwgMHgwODI0ZWRmOSwgMHg2NWY1ZjNmMCwgMHgxY2YzODcwOSwKLQkweGYwMjMxMTc1LCAweGUzMGJiZDdlLCAweDk4ZGYwYmYzLCAweDc0MDNmMjhiLCAweDhmNTdjNTg4LCAweGI5MWZhMzMyLAotCTB4ODdjZWVlYzEsIDB4NzY4ZDlkZmQsIDB4NDkyODE2ZjcsIDB4YmM4NjZiNDAsIDB4ZGZiYzc5ZTYsIDB4NzNjNmU1OWUsCi0JMHgwMzBjNTQ0OCwgMHhlN2NlN2Y2MCwgMHg4MmY5ZmFmMiwgMHhhZjk4YzNkMiwgMHg3YTgwNWJlMCwgMHhmMTk2NjMzZSwKLQkweGJlZDk5MjljLCAweDFmYjUwODk3LCAweDBhMGQ3ZDYxLCAweGIzODkwOGRlLCAweDE5YjhkZmFmLCAweGRlY2FlZWUxLAotCTB4YjBlOGYxZDcsIDB4MzkwOWJkNTEsIDB4MDRlMjRlNDIsIDB4OTdkNjI2M2MsIDB4NjViN2UwNWQsIDB4MGRjNzZmZTAsCi0JMHhiNWY4ZWVmZiwgMHg2YmYxMWE2NiwgMHg3NWY4OGQ1NywgMHhjZmUzMzIwYywgMHhkNzk3NWY4OCwgMHhlNmNhMmY4OCwKLQkweDZmYzM2ZmMxLCAweGI5ZTMyOGYyLCAweDdlMTU3ZmFmLCAweDFkYjhkOTg3LCAweGZmNGFmMWM5LCAweDRjZTk2ZGNhLAotCTB4NTlkYzAzNjUsIDB4YzJlNTA0NTIsIDB4Y2VkOTQ3MmMsIDB4ZWVmZjAwODgsIDB4ODU1YzE2OTMsIDB4ZTg1ZDc5NWYsCi0JMHhmOWYyNjRhZiwgMHg3N2Q4ZjMwOCwgMHgxMTIzOTAwZSwgMHgxY2EyZjVlMCwgMHhkMDBiYzljMSwgMHhhMWYyMGVmMywKLQkweDIxNjllODA3LCAweDU3Y2I5MjlmLCAweDhhZTdhNjI3LCAweDllM2YwNzY5LCAweDA0ZGFiZjQzLCAweGYyMGQ3YmZjLAotCTB4OTU1ZjNiMDMsIDB4YjkzNTgyNGEsIDB4MGY1ZWE3MjAsIDB4YmYyMWRmYWMsIDB4ODY0ZjNiY2QsIDB4M2JjNGY2NzMsCi0JMHhhZjljMDA2ZiwgMHg2OGY5NjBmNywgMHg2ZGJmN2IwMSwgMHgxYTczYzEzMCwgMHg3NDg1YzhhMSwgMHhmMzU1NGZkMCwKLQkweGJmZTgzOTQ5LCAweGE5ZjY5NTQ3LCAweDZjYmVmN2UwLCAweDFiYmRmMTY3LCAweGQzZWEwYWVjLCAweGFlMTZlZGE3LAotCTB4NzFiZTI3NTcsIDB4YjZjNzk1MmQsIDB4ZjljMmFjYjAsIDB4MzZmMGI2YzAsIDB4MzdhODAwZGIsIDB4YmQ2ZTc4OGEsCi0JMHg0YWY2YTUyYSwgMHgyYzM1YmYxOCwgMHhkOWU2YjgzMywgMHhiZmMwMDM4MiwgMHgzZDcxOTI2ZiwgMHgwZTM3OWQ2OCwKLQkweGVkNDRjMWNmLCAweDRmZGIzMGI3LCAweGVhN2YwYjZjLCAweGNmYTMxYjllLCAweGI4OWYxYjViLCAweDFiMGZlMjEyLAotCTB4MzFmN2YxMmQsIDB4ZGYyY2Q4NTcsIDB4YWU4ZDdmY2IsIDB4ZjI5ZDBkYmYsIDB4NThkODU2MmUsIDB4ZmRhM2M3NWUsCi0JMHg0ZDk2M2NlOCwgMHg2MWQ3YzczYiwgMHgzOTYzMGYyNiwgMHhiODJlMGY5ZCwgMHgyYmJmZTcwMSwgMHgzYTdjZmQ0YywKLQkweDhlZjE1MjhmLCAweDc5ZDA4NzFiLCAweGM0OGJmZThlLCAweDI2ZDEyYmY0LCAweDQ3Njc0ZWNmLCAweDFhZmRlMDgwLAotCTB4NWZhODJmZDAsIDB4MGUyY2ZmNmIsIDB4NDRhMGI4ODcsIDB4ZjBjNDVjZTAsIDB4NmZlODA1ZWEsIDB4N2NhNmU2YmQsCi0JMHg1MGEyZjk0ZSwgMHhiZTAzMGQwYiwgMHhjMTRlMTg5ZCwgMHgzZWFhMGE3YiwgMHg4ZmQ3NjgyNCwgMHhmYzBjOTY2OCwKLQkweGQ1ZDdjODU5LCAweDlmMTYxNmMyLCAweGQ4ZDQ3OTFmLCAweDMyNDViYTNlLCAweDhjNDE0MWQ5LCAweDY5M2Q4ZjFmLAotCTB4ZjNhYjVlN2MsIDB4MDNhNDliYjksIDB4MjRiZmFmOWYsIDB4ZDUxNzkwMGEsIDB4MGZiYzRlZDYsIDB4ZTZkYmI4NTAsCi0JMHhkYTM4NDJmNSwgMHgyYjI5YzAyZSwgMHhjYjEyNWU1YSwgMHg5YmY3YWRlMiwgMHg2YjBmMmM2ZCwgMHg5ZDcwNDJhMywKLQkweDg5YzBiOGQ5LCAweDE3ZmIwOGZiLCAweGViM2NjNjJjLCAweGViZTY3ZWFmLCAweDVlZGNlZjFiLCAweDY2NGE3ZThjLAotCTB4MzI1YWY1ZmIsIDB4YmRmYzA1MTksIDB4YWY3ODYwNWEsIDB4YjdkZDhhY2QsIDB4OWY5ZDRiZDIsIDB4ZjlkNmZlNzUsCi0JMHg5MjQxNmIzYSwgMHhjYmRlNWUyZiwgMHg3YmIzM2I2MCwgMHgxMjBjMTc4YSwgMHhmNmQ3ZjAxNCwgMHhhOWZjNzgwYSwKLQkweDIxOWYwMWY1LCAweDA2NWNkYjdmLCAweDAwZDkwM2M4LCAweDc5ZTM1NTRmLCAweGUxNmRiYmI0LCAweGZiNTQ3OWY4LAotCTB4MGZlNjZlNmQsIDB4MDU1ODEwM2UsIDB4YTUzZjFlNzksIDB4MzI3YTA5YzIsIDB4ZDFlYmJmNzEsIDB4YTA4M2FhZGYsCi0JMHhhYjY3N2MyYSwgMHhhNmU3OGQ5ZCwgMHgxNmM4ZGJlNiwgMHhiNTRhZDM4OCwgMHg4MGJiMzc1OSwgMHg1ZmFlNGJmZiwKLQkweGIyN2RlMTQzLCAweGViZWI4MmRjLCAweGYwOGJkOTQ2LCAweGMxMDkyYTA3LCAweGE3M2YwM2Y4LCAweGQ5MmE3YmQ1LAotCTB4ZWM3ZTdiMWMsIDB4YThlOGFkODgsIDB4YThmN2NlOGQsIDB4ZWVmMzgzY2QsIDB4MDAwYWYzZTEsIDB4ZmZlYmY3YmYsCi0JMHhhNmJiMDZlMywgMHhlOTE1YTJlZCwgMHg0M2ZiOGJkOCwgMHg2ZGU3NzdmYSwgMHhkODBmNGYwYywgMHg3YmUwNzdiNSwKLQkweDcyODY5MTUyLCAweGJkYjlmNWUyLCAweDM5YzE4NmYzLCAweDE4Zjc4YTU1LCAweDVmYTBlYTM5LCAweGVhOTFlNzAwLAotCTB4YzI4ZTNhYTMsIDB4MjBiNGVhOTMsIDB4NTM0ZDEyNWYsIDB4MDMxZTdhM2QsIDB4YzhjNWVmZTEsIDB4MDQwODg5MDUsCi0JMHhiZDc0MWNmMiwgMHg4ODg1ODQyYSwgMHg3MGMxY2E4YiwgMHg3ZTAyMzM5YiwgMHg5ZDA1NmE0NywgMHg0ZWMxMDUzNywKLQkweDY2YmZhYzZjLCAweDFjZjQ0Y2U5LCAweDUyNTFlNjFjLCAweGU0ODQyY2JlLCAweDEyNzk4Mjc5LCAweGZkMDVhODkwLAotCTB4ZDc1NmZhZWIsIDB4MDg1M2FiZDMsIDB4YzdlYWNiY2EsIDB4ZWQwZDYwYTQsIDB4NjJkNDkzNjcsIDB4YWU0YWY4ODcsCi0JMHg1NmMzMTZhNiwgMHhlMmE0YWE3NCwgMHgxNTNlYmNmOSwgMHgxYzczZjMwNCwgMHg0NGE1NGY3OSwgMHhmNDJhMTZlZCwKLQkweGVmMTFiZjQzLCAweDFmZTcxNzhlLCAweGU1ZjFkNzZhLCAweDJiZTAyN2ZiLCAweDdlZmI3MGZmLCAweDc2YmM2ZjMwLAotCTB4NzVmNzllMzYsIDB4NTFlOWRhMWIsIDB4YjFlZGMxZmQsIDB4OGVmZWJlNTIsIDB4MmJlZDhjZmUsIDB4MjRiNWM4OTMsCi0JMHhkNjZmOGUzNiwgMHgzMjdkYmExZiwgMHgwM2NiN2M3YSwgMHg2ZmVlZjgwZSwgMHhhZGRhNGUwYywgMHhlMDhkZGYwNiwKLQkweDEzZWE4ZGYzLCAweDBjOGU2ZWJlLCAweGJmNDI3ZDUzLCAweDNiMGYwODJmLCAweDgyZWVmMTAwLCAweDc3MWM5OTBmLAotCTB4MDM4NzI3ZDIsIDB4ZmJlZmUwMjIsIDB4NWYzMzExZWEsIDB4Yjk1MDhkMGMsIDB4NTU4M2VkZTQsIDB4ODllY2JmMzgsCi0JMHhhZmJkYTFkNiwgMHhkMjc3YThkZCwgMHg0MGNmMGRhNiwgMHg5YmYzOTczYiwgMHg3Y2JhY2YxOSwgMHhlMGJlZTU5YiwKLQkweDJiMDFlZjVlLCAweDYwOTEwYjgzLCAweDFkMDg4NzFlLCAweGEwNzlhODcwLCAweDYwODg4ZTk3LCAweDUxMTViN2VmLAotCTB4MGViODUwM2MsIDB4Yjk0YmY5NzIsIDB4ZTYxZWJjMTAsIDB4OWQ3YzNlYmYsIDB4N2JlNGU0MWQsIDB4ZmExMTI3YWYsCi0JMHhmMjdjNGM3NSwgMHhkZTM3ZDE3MSwgMHhkY2Y4ZjJjZSwgMHhmYjY1ODc4MCwgMHgyNGY1ZjAyZSwgMHhjYThlZjQ4MiwKLQkweGQ4OTM5NTAxLCAweGZmY2U4OTc4LCAweGU1ZDc3ZTY2LCAweDNhMGUwNmEzLCAweDBiZjllMWU3LCAweDI4YWNlYjAyLAotCTB4YmRmMGYwODQsIDB4MDBmMjZjOTUsIDB4YmI3Yjc1NWUsIDB4MjRiN2RiODYsIDB4ZGZmNjg1OTAsIDB4ZWJlMTBmNGEsCi0JMHhmODEwNGU1MSwgMHhlZGQ2NDZhNCwgMHgzNjJkYWY3NSwgMHg1NWQyYjUzZSwgMHhmYjZkZjE5YywgMHhhOTE3NTUzNSwKLQkweDg3OTMxNjdmLCAweGEzYjUyNTVkLCAweDUxNzU1NmZmLCAweDFiZGZlN2MxLCAweDQ1MGE2MTdmLCAweGYzN2YwMWJhLAotCTB4ZTMzYjNkZWQsIDB4NTdjODNjNmYsIDB4ZTYyZmZmY2YsIDB4YmYzY2NhYjcsIDB4ZmNjNzZhYjUsIDB4NmJkZjEyYzYsCi0JMHgxNDdmNTQyZCwgMHhlMzU3NThhZSwgMHg3NzkzZjE1MCwgMHhlYjNiMGIzMywgMHg2NTdjZmQwNSwgMHg5NjYwM2QyMiwKLQkweDZiNGI5MWY3LCAweGI0OTg2MDBmLCAweDcyYWY3OTBiLCAweDMyMTJmYzcwLCAweDk4ZDlmNDFkLCAweDcyNWJiNTA4LAotCTB4MDVmZmNiM2IsIDB4MDcyYWJmM2UsIDB4YWRkYjdiYzMsIDB4OWU0MTAzZWQsIDB4ZGZiZTg4NTYsIDB4MTZhODExZDksCi0JMHg4YWVjMDU4YiwgMHgxZWVkMDRkZCwgMHg2ZTYzYmVlZiwgMHgxZWU2Zjc5NCwgMHhiM2E3ZjU4NiwgMHhmNjYwMTA1ZCwKLQkweGY0NDc1ZjI2LCAweDQ4ZDBhN2I4LCAweDczOGU4MGU1LCAweDBlN2JlZWM0LCAweDMwZjFhZmZhLCAweDM0MGUxNGJmLAotCTB4NjIzYTdlODEsIDB4NWUwM2Q1ZjMsIDB4MjRjNjE0MWQsIDB4MjgzMjRmMzgsIDB4MjhlMmNiOTIsIDB4MjVkYzgzMTEsCi0JMHg0OTg3MzM5MiwgMHhkZTc0NDI4ZSwgMHhlODA1YWViMCwgMHg0ODQwMzZiYSwgMHg3YjAyY2YwYywgMHhkNTAyMjMwYSwKLQkweGY0Yjc2MDJlLCAweGIwNmMyNDJlLCAweDA2ZjMwNDY1LCAweDdiYjNlNzdiLCAweGIwMTc3YTAwLCAweGI0ZGVjNzdiLAotCTB4NWJjOTM4YjMsIDB4Y2JkMTFkN2MsIDB4MDNmMmI2MjMsIDB4OTEyY2JmMDAsIDB4ZmJlMGI1ODAsIDB4NDJhMDBkYzMsCi0JMHg1ZDg4ZjE3YywgMHhiMjc4MDdkYiwgMHg4ZjM4Njk5NSwgMHgwYWYxMGY2YywgMHg1MmQ5OGU5NCwgMHhhZDdkODA0OCwKLQkweGMwYWFhNWQ0LCAweGFkODQ4YWUyLCAweGZlZDI1MDQzLCAweDQ1YWIyN2IyLCAweGZlZWNmNzQwLCAweDY1MDljZjA0LAotCTB4NDcxM2ZkODMsIDB4ZTVkOThlNmUsIDB4NmIwNzE2MWYsIDB4MWY4NzY0ZWMsIDB4NDg3MTcyZTMsIDB4MzFlZGYzYTEsCi0JMHg0NzNmZTU5OSwgMHg3YzE0MzllMywgMHhlYmFiNmZjMCwgMHhlYjZjOWM1NiwgMHgyMjVmMmM5NywgMHg2Y2YwYzI5MCwKLQkweDYwODBjYmY2LCAweGQ3ODkyZjMwLCAweDY0ODg1NDFmLCAweDI5YmY0NTRmLCAweGIwMTk3YzAwLCAweDcyNmZkMGQ4LAotCTB4ZWYwODZmMTAsIDB4YzdlYTQ5NDksIDB4YmMxMTQ1ZWUsIDB4MmJmZWEwZWIsIDB4ZjcwNmRkYTksIDB4YTBmMmU4MjUsCi0JMHhlM2EzZjlmMywgMHhmNDRhZjY2ZSwgMHg3M2Y4Zjc1NSwgMHg1MmQzZTBmOSwgMHhlMDI3ZmY3ZSwgMHhiOWRjNzViOSwKLQkweDI2NzFhYjgxLCAweGVmOGMzOWVkLCAweDY3OTBkMTM0LCAweDUxYWZkM2E5LCAweDBlY2ZkMDM2LCAweGZkNTg5MmYxLAotCTB4ODEwNjUyZWQsIDB4MjQyYWRlM2QsIDB4NmE1ZmMxNzksIDB4NzgzMDI0NWQsIDB4NDNjZjFiMDUsIDB4Y2NmMzBjOTUsCi0JMHhhMzNmMzA3NCwgMHhmZWM1ZWI4ZCwgMHgwZjM4Yjk0OSwgMHhmM2EwOWQ3ZCwgMHg1ZDcxODc1YiwgMHhlN2EyM2NkMywKLQkweDhjZTc0YzhlLCAweDMyOTBlN2NjLCAweDlkZjFhMmYzLCAweDJiMDdjYzJjLCAweDE4NGVlMDU3LCAweDQwZWMyZTcyLAotCTB4ZGRjYWFjZmIsIDB4OWNlMjQzOWUsIDB4YjE2OGM5OTMsIDB4YTYwNzNkYzcsIDB4ZmQ2ZjE0OTcsIDB4NWU0MjdhOTIsCi0JMHhlODBhNzU2MSwgMHg5OTNiOGNkOSwgMHhhM2UzMzA3ZSwgMHgzZDBjMDg0ZCwgMHg3ZjYzZmIwNCwgMHhhM2VlZTM5MCwKLQkweGU2NjY2NWViLCAweGU4ZjMyOThkLCAweGQ3NTk5OWZiLCAweGRmM2ZhOTYzLCAweGM2ZTI5NGUwLCAweDA5MjVjNzBiLAotCTB4MGM4ZmNjM2YsIDB4MThkZjNjYjIsIDB4ZjMwNzFkZmUsIDB4ZTc3YmViMzksIDB4YmZjNTBkM2QsIDB4MWJlOWUzMWQsCi0JMHgzN2RlMTg5MiwgMHg2ZmJjMzEyNCwgMHhhYTdjNzQ1MCwgMHgxZDdmMjBjOSwgMHg1ZjIxYWY3NSwgMHg5NmRmYmQ2MiwKLQkweDUwOWU0MTIyLCAweDczZTUwYjIwLCAweGJiZDE4N2JlLCAweGVkMGQ3ZGUzLCAweGJiNDQ5ZTk2LCAweDEyNTAzNmZlLAotCTB4MGRiMjY1ZWIsIDB4N2RjNTllZjksIDB4ZGZlMGJjZjQsIDB4OTk0YjlmZjgsIDB4ZGJhN2VkNDgsIDB4OGQ1MDVmMzgsCi0JMHhjMjliZThjMCwgMHg3ZWIwYmVlMCwgMHg0ZTliOGUxMiwgMHgxNDgxZGEyZCwgMHgyZGNhMGJjZiwgMHg5ZDA3ODg1ZSwKLQkweDFiYmVmMzlkLCAweGM5Y2RjODhlLCAweDc4MjQyZTZlLCAweDBkN2FiNWY0LCAweDE1N2Y3M2Y4LCAweGQxMjViNzdkLAotCTB4NTAzNmQyN2UsIDB4ZjE4M2Q1NDUsIDB4YTUyNWM4MDUsIDB4OGZiOGY1ZDMsIDB4MzcxMmRiMzksIDB4YzQ5N2NmZWYsCi0JMHg5MjU3NzZmYywgMHhjY2M4ZTEwNywgMHhlYTc0OGE5YywgMHgwMTRlNGZhOCwgMHhhN2NjYzM3ZiwgMHhlNmIzNWU1NCwKLQkweGI3MzhlZjBkLCAweDExNjZmOTQ2LCAweDZmMmNkOWUwLCAweDE0NjkzMjZkLCAweDIwOGFkZDcwLCAweDc2NzRkMmJlLAotCTB4OTc1YjdhZTYsIDB4NDM5MDM0OTcsIDB4YTcyYThmZDgsIDB4NzNhNzU0N2EsIDB4M2E2YWZlM2YsIDB4NGZmMTNiYzYsCi0JMHgxZmZlZmYwOCwgMHhjN2I4NDdlMCwgMHhkNDVlYTMxNywgMHg2MjBjODhlNSwgMHg3YTBlZGU3YSwgMHhkOWNlMjYzNywKLQkweDNlZDdmNGQ2LCAweGQxZjg5ZmIwLCAweDYwYmJjZmNmLCAweDUyZWZlOTNmLCAweGVjZjQwYmJiLCAweGVjZmZmYmM5LAotCTB4OGY4NjNjODIsIDB4OGVmMTY3ZWUsIDB4ZDdmZTRjYmIsIDB4ZmY0YzQ5MjMsIDB4NWU1NDk0N2YsIDB4ZGJiYWYzMDMsCi0JMHgyZmExNzVmZiwgMHhiZGM5NWY4NiwgMHg1MTY0NWY2YywgMHg2ZjlkMzQ1MCwgMHhhZTM3OWUzNCwgMHgxN2NmOTkwYywKLQkweDk1ZGYxMDA3LCAweGZkNzhmYzUyLCAweGU3MTYyNGZlLCAweDU5YmY1NDU5LCAweDdjNjE1NmM5LCAweGFlODFhZmRmLAotCTB4Nzk3ZmI5MjcsIDB4MDNkZDgxYjIsIDB4YTczM2MzYTIsIDB4M2UwMmE4N2UsIDB4NTZjM2RmZDcsIDB4MmNkZWFmYmUsCi0JMHg5YjQzZjViMywgMHgzZTYyZmIwYywgMHg5YzMzMzc4ZSwgMHhhNGZkZjg4NywgMHhhMjJkN2ZmMywgMHg4ZTliMzNkZiwKLQkweGMzZDUyZjc1LCAweGYzY2IzMGJlLCAweGZlNjNjZjM1LCAweDljMjk2YTQ3LCAweDkwZmY5ZmU3LCAweGJjMzRmZTgwLAotCTB4Y2Y1ZDNmN2YsIDB4YzVhZWY3N2MsIDB4M2NmMzMzZmQsIDB4YTA4ZmRmM2IsIDB4OTBiNWRmYTEsIDB4Y2U3Y2RiZDMsCi0JMHhlZDk4NjE2YSwgMHgzZTIzY2Y2ZiwgMHhmOTRlY2Y5NCwgMHgwZjk2NjExOCwgMHg5ZTIzOGU2ZCwgMHgwMGU3OWMzYiwKLQkweGYxMjYzNDNjLCAweDMyNDJhYjdkLCAweDc2MmVmMjEyLCAweGZjOTdlZTFlLCAweDY3NWVmOTZkLCAweGQzZjJiOWY4LAotCTB4YTRmNDRmM2MsIDB4OTM1OTYwOWYsIDB4ZGJmM2IyYTQsIDB4ODE0YmI3ZTEsIDB4ZWUzNTk2YmYsIDB4YmU2NTdiYzAsCi0JMHgwY2FhM2VhYiwgMHg4NGZmNzI5ZiwgMHg2YTI1ZTg3NCwgMHhlODExZmU1ZiwgMHhjMTgyN2M0OCwgMHhmOWI2NWNlZSwKLQkweDY1ZmNjMmJjLCAweGY4M2I5Zjg2LCAweDFmMDAzYmYzLCAweGVlY2VjZmI4LCAweGE5NjNiOTBmLCAweGRlZjYyMTdjLAotCTB4OGM5MmY3OTksIDB4YTI2N2ViZmIsIDB4M2NkOWU0ZTcsIDB4OTNiZWY5MmEsIDB4NWYzMzNmM2UsIDB4OWIzZTcwZDcsCi0JMHg5YWRhNzViNywgMHgzNWNhNzQ1ZSwgMHhmODcyMjc0ZCwgMHhmYmNjMDc3OSwgMHgyMTY2ZjlkNiwgMHg4YWNkMmYyOSwKLQkweGJkM2ExZmMzLCAweGZlMTA3Y2EyLCAweGQzYWJjMjI1LCAweDZjZWQ1ZTY5LCAweDI2NDBhZjNlLCAweDg0Y2JmN2RmLAotCTB4MmY5OTkyYjgsIDB4ZDc2ZjNhYmEsIDB4ODBlNGI3MmEsIDB4ZGVlOTlhYmMsIDB4ZmIzY2UwOWEsIDB4M2VkODkzZGYsCi0JMHgyYjU1M2NlZCwgMHg5ZjM4YmQwNSwgMHhjNGYxYWY5NCwgMHhhNTI3MmJkOCwgMHg4MWY3NDNkYSwgMHg3YzY1NmQxYywKLQkweGUwNmJkNTFjLCAweDdlYmU4MmJjLCAweDdjZjVjNjRiLCAweDgwY2Q0YmI5LCAweDFlOTA5MTdiLCAweDg3NjE1ZTcwLAotCTB4ZTllZjAwMzUsIDB4NmJmNzFjZTMsIDB4ZjAxOTdmNWEsIDB4NjllNTg2NWQsIDB4N2ZkNmI5N2YsIDB4ODJmYjQ3NDAsCi0JMHgxMGRkZTc4ZCwgMHg0NDFiNmRjNywgMHhlYWQzYmUzMCwgMHg3MWViYzIzMiwgMHhjNzhmMDg4OCwgMHhhNWJiZDZjMSwKLQkweDFmMzdmMzUyLCAweGRhZGEwZTgwLCAweGM3MTFmOThjLCAweGQwZjhmMTJmLCAweGJjNTk2YjI1LCAweDEwZWQ1ZTc5LAotCTB4ZGQwNWY3MGMsIDB4Zjc0YWU1YzUsIDB4ZjRlNmVlM2YsIDB4ZjZjYzJiYmIsIDB4OWE2Y2U3YmQsIDB4ZGYzMGY0ODYsCi0JMHhmYjg0NzI2NywgMHgwNDFiYjMyZCwgMHhmYTY2MjNkNCwgMHg3NzVlZjdjYywgMHhkY2VkZjQwYSwgMHhkZjdlMTE2MCwKLQkweDExZTQ1ZTg5LCAweDZlOTliYmE0LCAweDc2MWUxZGViLCAweGFkNTQ4ZGJmLCAweGM3M2Y3ZGMwLCAweDRmYjgwOTM3LAotCTB4ZGU4MTI0YjgsIDB4OGYwNzc3ZmIsIDB4M2U3Mzc3NjcsIDB4ODIyNDc5ZTYsIDB4NTVkNmUxN2YsIDB4OTgxMTdhNmIsCi0JMHhmODA1NTBmZiwgMHgzZWJmMGNkYywgMHg2MzQ0ZjlmZiwgMHgzN2NmODc3YSwgMHhjYjQ4YmNkMSwgMHg4MjlmMmNiNSwKLQkweGMyOGJlM2FmLCAweDY1YTk3ZWVjLCAweGFmMmM4ODhmLCAweDc0OGJjNzkzLCAweGNkNzg3NWY4LCAweDk3MTUyOGYzLAotCTB4ZGI2ZjNlNjIsIDB4MDlmMzExMDYsIDB4ZDcwNDBhZWYsIDB4NzdjYmJkYzAsIDB4M2Q3MDE2YWQsIDB4NWQyNzQ0NGQsCi0JMHgzMmZiZTg0ZiwgMHg2MzY3MWFjYiwgMHhmNjhmOTU3ZSwgMHhkYjY5NzYwMywgMHhkOTE3MDQ4NywgMHhkZTAyNzViNiwKLQkweDllOTA5MzdmLCAweDk0NTc5NjYxLCAweDMwODQ5ZTg4LCAweDc0YTNjZGJhLCAweDdlNmUzODdiLCAweDNmZDY5MTVjLAotCTB4NzgyNzNmNzYsIDB4NzYzZmQ2YmQsIDB4MzA4NDg5N2YsIDB4ZGQ0OTY0YWYsIDB4NGFmM2MzMzQsIDB4Nzc0ZjUxODcsCi0JMHgzYWE0N2YyNSwgMHgyZTljZGU3ZSwgMHhlOWZjYmE2ZiwgMHg5YzFlYjhmMiwgMHhhNTFmYjA3MywgMHg1Y2VjYTFlMCwKLQkweGU4NjNjZmMwLCAweGZiZmQ1MGFmLCAweGZmOGIwNzczLCAweDdkMWI3YTNjLCAweGYzYzZkOTY1LCAweGY5ODRmZDg2LAotCTB4ZTZiZDE4YTMsIDB4NzlmMTkzOGIsIDB4ZTI4Mzc1YTIsIDB4ZDc4N2EwYzEsIDB4Zjg3YThjM2EsIDB4OWY0N2NlODcsCi0JMHhmYTI3MmU4NywgMHg2MjcyY2NmYywgMHgwZjRjZGVmZSwgMHhhNjY3MGUzZCwgMHgwMDFlOTk4YiwgMHg0NzBkZjgyNywKLQkweDA3YzExYzlhLCAweDA0NDc5YzI4LCAweGM5YTA3NzA2LCAweDY2Yjc3MDhlLCAweGZlNzA2ODk2LCAweGVkZDY1OTY2LAotCTB4MGY4MTFlNTgsIDB4NTdiZDgzNDcsIDB4ZWQwMzhjZmUsIDB4Nzk1N2VlNTYsIDB4NDUwM2U3ZTMsIDB4Zjc2ZTI1ZWQsCi0JMHg0MTk2MTk4OCwgMHg5MzExMWUzMCwgMHgyZWM3OTBiYywgMHg3N2FhNWI2NiwgMHg3ZDhhNzlkMiwgMHhkMjE4Mzk2OSwKLQkweDljMjJiZDk5LCAweDk5MmRhZWU3LCAweDE0M2RjMjIwLCAweDc3YmNmYzM1LCAweDM3OWQ4NThkLCAweGMzZGJmYmQzLAotCTB4ZWQ5N2EwZjEsIDB4ODA0NmYyOGUsIDB4OWE5ZmVjZTcsIDB4ZmUyYzFkMGIsIDB4Y2UwYWZlOGMsIDB4MTQzZGVlMTMsCi0JMHg3NjBkYmZhOCwgMHhmMzA0ZWJmMCwgMHhjOGQyMGI2OSwgMHg4M2I3YTAwMSwgMHhlZTQwYTM2OCwgMHg3MmE0NzQzZiwKLQkweGZmZWQ5YzNiLCAweDI4NmNiZmQxLCAweGNiY2I1NmJkLCAweDNmOTA5N2FhLCAweDQ5YjNlMmZjLCAweDM3YjI1ZjcwLAotCTB4OTcyMmIyZDksIDB4MzhlMmZmZDYsIDB4YjllZTA5M2QsIDB4Y2U1YjY2ZjMsIDB4ZmRhODdhZTcsIDB4ZDU5Y2Y4ZWQsCi0JMHhlZjljYjZhZiwgMHg3MzdmZWI0NywgMHhkODc1NjE5YywgMHhmODdiODJhOCwgMHgwNTI3NjcxYywgMHgxZTM4YzMwNiwKLQkweGI1ZWFlN2E2LCAweDI0M2U0MWFiLCAweGE1OTdmMzBiLCAweGMzYzYwYWZkLCAweGQ1ZmRmZGY1LCAweDE3ZTBlNjk0LAotCTB4NzlmOWM4N2YsIDB4MTdlMmFhY2QsIDB4MmM2NzEwMWMsIDB4NmZkODU0ZDYsIDB4NzFiZTBhZGUsIDB4ZWE1ZmVmY2YsCi0JMHgxNjFkMTU3OCwgMHg0YTAzNjdiYywgMHgxY2E3ZmZjMCwgMHg0ODVkM2E5ZiwgMHhlNDM1NzY4MywgMHg3NjkwOTIzZCwKLQkweGI0ODNlYzM1LCAweDFkYzc3YzNiLCAweDkxZDg3ZGI0LCAweDU3MjAwOWU2LCAweDVmYmNlZjBkLCAweGY2OGRmNzg4LAotCTB4YTMwY2ZkNjUsIDB4ZjNhNmUyMGMsIDB4OWY2YWZiMzksIDB4OGFmYmIxY2QsIDB4Y2ZhMjhlZWQsIDB4MGM5NDNlODEsCi0JMHhhYTA4NDc2OCwgMHhlZDQxZGM4NywgMHhhODhkMWE4NiwgMHgzMWY4MWU0YSwgMHg4MWJkYmI0NiwgMHg0OWQ3ZDlmMywKLQkweGNmOTFlN2U1LCAweDlmNTA0NzdhLCAweDdkZjBlNTNjLCAweGZkOWJlMzA1LCAweGRhOWNkMjExLCAweGYyNTNmZTJkLAotCTB4N2FmOGM1ZWYsIDB4ZDFlMzc2NmEsIDB4ZmY5ZjIwMzksIDB4MGFmZGNlYzUsIDB4N2FmOTg2OWEsIDB4OWVmN2EzZGIsCi0JMHgxZGY3ZjQxMCwgMHg3MTBiYzkyNCwgMHg5OTI1ZTIzNiwgMHhiNzFlNzQ4MSwgMHg0YWJlMzBiMCwgMHg0YmYxOGMyYiwKLQkweGY3ZTg3Y2Y4LCAweDk1MWVlMTEzLCAweDFmYjYwZTkxLCAweDgyMjdlNzRjLCAweGE4OTQzNjlmLCAweGY4ODMwZTU4LAotCTB4OWFiMDFlNDMsIDB4NDg3YmViMGYsIDB4YjQ3ZGU4ZTgsIDB4Y2NlZGM3ZmYsIDB4MTFkNWI3ZWYsIDB4ODQ2NzVjNDMsCi0JMHg3NzA3ZDk5MywgMHgyNzVjNThiOSwgMHgwY2RkMGU0OSwgMHgwYmU5M2RmYSwgMHhkZWZkMDFlMiwgMHhlMTIyOTRmNiwKLQkweGI5ZTRhNjdlLCAweDBlMzlmNzExLCAweGY4MmUzMDU5LCAweDQwZjQxY2FjLCAweDRhZmRiZDdjLCAweDNhNDJkZDQ5LAotCTB4NzRlMzZiZmEsIDB4NWM3ZGZiZDcsIDB4Nzg4NGFmNTEsIDB4YjMxNzVjY2EsIDB4MjIyZDllMjcsIDB4N2VkYWY3OTgsCi0JMHhmZWMyMDk0YSwgMHhhZGI2NmE1NywgMHhjZjRmZDYzYSwgMHg0ZmFkZGZlNywgMHhhNGU0MWUyZSwgMHg4OTI5YTg2NSwKLQkweGY3MjNmOGMwLCAweGQyOTI4MzUyLCAweDAyZmE4NWUzLCAweDc2YzVmMDNiLCAweDQzYzUxMWMwLCAweDBmNzNkNWFhLAotCTB4OWU3YTk3ZjQsIDB4Y2Y4YjliYzIsIDB4YTRhZmM0MzUsIDB4ZjhhNjRkMGUsIDB4NTM4MzczMWQsIDB4OWUyOTdiODUsCi0JMHhjMDZlODdiNSwgMHgyZDE3YmYzYywgMHg3NmQzZmY3OCwgMHhlYTBkM2JjNSwgMHgxZWE5Y2ZkYiwgMHg5YjNkMDc4OCwKLQkweGY5YzI0YTFiLCAweGY5YzE2OGJjLCAweGJmNmE0ZjZjLCAweGZiODUzOTZhLCAweDhlMmM0MWUxLCAweDY0ODgzOTIwLAotCTB4MmE3OTA1NGIsIDB4Y2ZhMWVmNTYsIDB4N2Q5OTNiYzcsIDB4ZTRjMmRhYmIsIDB4NjJhOWRhYTksIDB4OGU4MTcxZmQsCi0JMHgxNWVmMDA1ZiwgMHhmOWU5MWNhMSwgMHhlY2VkNmQxNywgMHg1YmNmNDcxYywgMHhlN2UwNDU5YSwgMHgzZmJhNjlhNCwKLQkweDBmYzExMTFmLCAweDcwNGU1NzFmLCAweDk0ZTcxZDVkLCAweGFkM2EyYTgzLCAweDIxNzY3MzlhLCAweGQ2Y2VmZmRjLAotCTB4MmUxZjA5OGQsIDB4MjlmMmNjOWQsIDB4ZWZjMmVmYmQsIDB4ZjI3MDFjMjEsIDB4YmVmODM2ZmIsIDB4NGY5Y2I1ZDAsCi0JMHhkMTE2OTNjNiwgMHg1ZmM3ZGI0NiwgMHgyZTQ4ZGUyNCwgMHg4YzZhZjdkYywgMHg1YTYzM2VkZiwgMHhmZWYxMjdlNywKLQkweDQ0Y2Y3NmI1LCAweDhjNDQ1Yzc4LCAweDBkYTRmMGViLCAweGFlMjBhN2E1LCAweDA5MzQ0YzVjLCAweDY2YzRhOWY4LAotCTB4ZGNmNTg3NmEsIDB4OWFjNGY3MGQsIDB4ZjI3M2M5ZWUsIDB4ZTQ4NzJiNzUsIDB4ZThmZGU2YzQsIDB4ZTI0OWZiNzEsCi0JMHg0NzY4OGRlMCwgMHhjMDVlMjk5NCwgMHhmNmE3MGVjYiwgMHgwZDRmZDg1NywgMHhkYmYyZjc1MCwgMHhmOGNmM2RlMiwKLQkweGEwZDY3ZTU5LCAweDU3MDIwZThiLCAweDc0ZmU1MGZmLCAweGRhYWU3Y2MyLCAweGQzYjAxYjUwLCAweDlmZDU1Zjc5LAotCTB4MDg3YzBmZjUsIDB4YTc4YWU1ZmEsIDB4YmU4MDdhZDIsIDB4ZTk3YTczNzcsIDB4YzA3N2NlYTUsIDB4YzY2NDllNWYsCi0JMHgzYTZiOWU1ZiwgMHgyNzNlZjNlNCwgMHhmMmU4OWI4YiwgMHhmZDA3N2MwNiwgMHhiNzgzOTFlYywgMHhhNDFmZGJjNywKLQkweGYwMWY3YWZjLCAweDQxMjcwZWViLCAweDU5MTdmYTdiLCAweDY3MjA1OWI2LCAweDlkZmIzOGZhLCAweGU1Y2RmZjhjLAotCTB4ZjdjYjU1OWEsIDB4MDQxMmVmYzEsIDB4YzZlYjY0YmUsIDB4MzExNzVlYzQsIDB4NmViYTJlNGYsIDB4YWI3ODMzMjcsCi0JMHg1M2U5ZGFkNCwgMHgyOWM3NmYyMSwgMHgzYTRlNWU2MywgMHhjYjE2MzczZiwgMHhmYzMxNTkyZiwgMHhhYjVkZjNhMiwKLQkweDNhZGZmOTkzLCAweGZlZWM5NGZmLCAweDI4NGI5ZTMzLCAweDA2ZmE5MmY5LCAweDM3NmEyNGI5LCAweDIxMzNmY2VhLAotCTB4YjM3ZGMxMTAsIDB4ODlkOTg0MDksIDB4OTlkOWZlNjYsIDB4MmU4YTdmODAsIDB4YWRlODEyYTgsIDB4OTg3M2ZjNGUsCi0JMHhiZTIyNGZmMSwgMHhiMDQ4ZmRhMSwgMHhlN2Y5OWEwZSwgMHhlM2I3MjcxOSwgMHgyNWNmZjIxMiwgMHg2NTY5ZTAzNywKLQkweGVlYjdjOTUzLCAweDhkZmEzNGVmLCAweDcyZTY3Y2Y5LCAweGJlN2UyM2I0LCAweGVmMWM2N2U3LCAweDFiZGE5NWJiLAotCTB4NGM2ZjQxZjMsIDB4MmY0MTc4YjEsIDB4YmVjOGVlNTAsIDB4M2JiYmMyOTksIDB4YjVkN2JmNDksIDB4M2JlYTBmM2EsCi0JMHg3Njg3YTYyNCwgMHg4N2E4YWQ4NCwgMHgzZTdkMzg3NiwgMHhiMjY1OGI4YywgMHhmMjQ0NzRmMywgMHhiNmZlNDBiNSwKLQkweDhkNGQ5N2I3LCAweDdlZmIyN2JkLCAweDM5MjE4ZmNlLCAweGQ4MDRmYTMyLCAweDNlMzA2ZjQ1LCAweDAwYTUzNTE4LAotCTB4NTkyMWJjNmUsIDB4MTg1ZTk4ZjMsIDB4MGNkOTUyN2UsIDB4ZDBiMjhmYmYsIDB4OTM4NmY0NTUsIDB4NzQwNjdmYmUsCi0JMHhjNzUzYWMwNywgMHg2MGI3YmMxNCwgMHhmNTA1MzFkOSwgMHhkZjdiYWJlMywgMHg5M2I4ODUyZSwgMHg3MjNhMTc5ZSwKLQkweGM1YTVkYmNmLCAweGM2N2RlMTgzLCAweGZkNzM2ZjZmLCAweDY1MzFkN2FhLCAweGU5YTVmNDFlLCAweDg0ZDFkODVlLAotCTB4YmRmMzMxZTksIDB4NDdjMGU1YWUsIDB4ZTZlZDFkZjksIDB4NDk0MzRlZmIsIDB4OTMzZDJlMmMsIDB4MGU5YmIyYTgsCi0JMHhmOTU4ZmQzMSwgMHg4ODVkNzA4MywgMHg5OWQzZGVmOSwgMHg0ZmQwMWI5MSwgMHg1ZjVkZTViOCwgMHgzOTRmN2JmYywKLQkweGRmZWY5ODdmLCAweDc3YzkzYWZjLCAweGY5NWZlNjFhLCAweDk4NWVmMzQyLCAweGJhZDk1MTAyLCAweGFmYWE1MjFkLAotCTB4NTc5ZWY3NjYsIDB4ZTkzZjAxZTcsIDB4MTQ3Zjg4NzIsIDB4MDY4ZmExN2YsIDB4ZjVkZGVlMTksIDB4MTFlOGY1ZjIsCi0JMHg3YmVlYzRhZiwgMHhiZjcwNTE2OCwgMHg3ZDg0OTdlNywgMHg5OGViZTIxNywgMHg0MGY0YzVjZCwgMHg2ZTk3Y2FjMSwKLQkweDU1ODczODA3LCAweDJlODAwNzY4LCAweGY5OTkzYmZmLCAweDExMjJiZmQ3LCAweGNkZDAxZTViLCAweDNhOWM2MTJiLAotCTB4MjcyNWFiMjQsIDB4ODhmNzhlODQsIDB4Y2UwODNlNTQsIDB4OTllOWVkNzUsIDB4NWZjNjBjMzQsIDB4NWMzOWYyZTgsCi0JMHhlZDQ4NmY2MCwgMHg5MWJiZTE4NywgMHg4MTg2MGE2MywgMHg1ZDBlNzcxZSwgMHgzNWQ2MDNkZCwgMHg1NzBhNmUxZCwKLQkweDA3NjczNmQ5LCAweDE3NWMzYTFjLCAweDc0MmNiZjM5LCAweDdhYjg3NmNkLCAweDJmNDBlZmIyLCAweGRjN2M3ZTM1LAotCTB4ZmNlYmRmMDYsIDB4ODJmYTZhMTAsIDB4NWYwYzQxZjEsIDB4ZjA3NDFmMDAsIDB4ZDQzNzcwODUsIDB4ZjFhNDNjNzUsCi0JMHhkOGZmYWY1MiwgMHg5N2ZiYTE3YywgMHhmODA1ZjI1ZCwgMHhjNWVmZWU4ZiwgMHg3MTVjNDMxNywgMHg3M2RhODJmOCwKLQkweGQ5YjllMWMzLCAweDJjMjkwYjllLCAweGZjZmNjY2NmLCAweGJlMTE0NzI5LCAweGU2MDg1NWVmLCAweDc2YmQ5MDg5LAotCTB4YmUzYmJiZjYsIDB4YmYyZjhjMTQsIDB4YjY2MzYxZWMsIDB4MDczYzc0N2QsIDB4NWNlYjk1N2MsIDB4ZjkwZTRjYTksCi0JMHgyMzQzZGYzZCwgMHg0MzlmZGEwMiwgMHgwM2I4YTJhOSwgMHhhOGRlYmNlZCwgMHg3ZjFjYmQyNywgMHhjMDIwYjhlNCwKLQkweDRiOTg1ZGZkLCAweDY4NzYwZDljLCAweDZiZDgwN2E0LCAweDIzOTNhZDQzLCAweDFkM2IwZjIwLCAweDdlYzFiMjEzLAotCTB4Y2I4YzcwMmMsIDB4MzJiZmY5ODMsIDB4YjA1YmU1NjgsIDB4YWJkMmJkYTQsIDB4NmFhZGU1ZTIsIDB4ZWJhNTdkODcsCi0JMHg1YmJjMDNjMywgMHg1ZDViZmM3ZCwgMHhkNWFlM2Y4YywgMHhkMDEwZjlkOCwgMHhlODcwYjFlYiwgMHgwOTkwMDNlYiwKLQkweDMzMjIxMGUwLCAweGE4MWQ5NzJkLCAweDE0MmRjM2M3LCAweDFjMDJkNzZmLCAweDA0ZmIwZjE0LCAweDQzZjYwMGQyLAotCTB4MmI0YjQ1OTEsIDB4NjdiMDNiMDEsIDB4ZGIzODAyNDQsIDB4MDM5MWZlOWEsIDB4ZTFjOWE3NzEsIDB4NzgwNTFmZGYsCi0JMHg1YmZiZWIyNywgMHg5NmZlZTM1ZSwgMHhlZGQ2ZGVkOSwgMHhkMGZmZGQyMSwgMHgyMjg5MjVlZCwgMHhhMGFiYjc0MiwKLQkweGE3M2MwNDdkLCAweGJkYzBmNGY4LCAweDQ1YmViMGUwLCAweGY1M2U3ODZjLCAweDk1ZWE3M2YxLCAweDg5Njc5NzFhLAotCTB4OWYzMjYzY2UsIDB4MTlhNDRkYzcsIDB4MmU5NzIyZTEsIDB4ZTk0NzFlNWYsIDB4NjNlMzk1MzMsIDB4NDkxMjYxZjIsCi0JMHg0Mjc2ODdjYSwgMHhmZGMwMTRhNiwgMHg0YzkwMjQzMywgMHgxNWUyOTljNywgMHg3YzMxMjdjOCwgMHg2MzI4ZDM3MywKLQkweGE0MjZmZTFkLCAweGQ1ZDNmNDc3LCAweDYzNzVlNmZiLCAweGZmY2UyOWFjLCAweDdlYzNjYjQzLCAweDRkZmM2ZTc2LAotCTB4M2MxNzNiM2YsIDB4OTAxODlmYTYsIDB4OTUxZGZkNjAsIDB4N2IwM2NlY2IsIDB4MmIwZTFlMTgsIDB4MjNiMWQ3ZjEsCi0JMHg1OGM3OWU1YywgMHgzY2UxZjI1YSwgMHhmZjNkYmVlNCwgMHhmZjczNzVjNCwgMHgwN2JlN2Y5ZSwgMHg1M2U4ZTQ3NiwKLQkweGM2M2M4MTEyLCAweDI3ODZhNzMxLCAweDI4ZWJiZWUzLCAweGVmNGFmOTE1LCAweDA2YjNlYWI3LCAweDQ5Y2Y2MTA3LAotCTB4ODdlODdkZWMsIDB4MTVkYTNjMjgsIDB4Y2IwZDlmMDAsIDB4ZmUzY2NlZDcsIDB4ZTE3N2Y0MDQsIDB4ZjM2MjQ0OTgsCi0JMHg1ZjE1NGJlNCwgMHg5NjhmODg3ZiwgMHgwZmYxN2JmMiwgMHhkMjllY2MwOSwgMHhmYmYxMGZkYiwgMHg3OGI5NzdhOCwKLQkweDkzZDI4ZTdjLCAweDFhYzRjN2ZiLCAweDU0MjllNzQzLCAweDc0MTcyNTEzLCAweGM5Y2E3NWQwLCAweDdlNTI1M2IyLAotCTB4ZGZjMGZhNjcsIDB4N2UxZjNhMjcsIDB4NTc3NDllNGIsIDB4ZmIwZTdlYTUsIDB4NWViNjJlZjcsIDB4YzM3ZjAzOTIsCi0JMHgzNWQ3MGNmMywgMHhmZDgxMjNkYywgMHg0OGE2NWQ3ZSwgMHhhZjcxOThiNCwgMHgxZmE3YTk1NywgMHhlYmQ4ZjcxMywKLQkweDA3YmZkOTMyLCAweDJhNjI3YjllLCAweDExMWU3OWU0LCAweDJhYWM2NTMxLCAweDdjYWRlM2JjLCAweDcxOGIzN2E4LAotCTB4ZjE5YmE3Y2YsIDB4MWVmODVkN2IsIDB4ODg3ZmY4MDksIDB4NTc0ZGM5OWIsIDB4OGFiOThmZTMsIDB4NDAzNWM5ZjIsCi0JMHhjMGVjYzI3NywgMHhjOGU1MDE0MiwgMHg3YmZkZGY0YywgMHhjYjQ3YTNmZSwgMHg0ZWY4YzRlMCwgMHgxZDMzN2Y0NCwKLQkweDhjNTMzYjVlLCAweGQxNWQyMWZiLCAweDdiYjdjY2MzLCAweDU3MDMzY2U5LCAweGQ5N2FlZmMwLCAweGQ3N2YwMDQ4LAotCTB4ODNmNTgzY2IsIDB4ZWJhYzRjZmUsIDB4ZjRkNTVhZmMsIDB4ZjNiMDBmNzQsIDB4ZDQ5ZDNlNzQsIDB4ZThjZGYxODMsCi0JMHgyMGY0NGZkZCwgMHg5OTdhMGVjZSwgMHgxOWI4MjZmMSwgMHg3NWQ5NzZmZCwgMHg2MzNiYzRiYiwgMHg2N2Y0N2QyYSwKLQkweGEzMjEwZWJhLCAweGU0MzM0ODA2LCAweDU4NzM5NGQ5LCAweDhhNWJiZTY3LCAweGY5ZTEwOTc2LCAweDZkZjVlNmZmLAotCTB4MjRjNzc4YTYsIDB4ZGQ1ZGE3NTAsIDB4M2E4YjdmNGIsIDB4YjlmNzViYmIsIDB4OTVhOTFkOTcsIDB4OTUyYzFkNjAsCi0JMHhjNjNkMzI1NiwgMHgxZTFkNzhlZCwgMHg0MmZmOWQzMywgMHg0NGZlMTFjYSwgMHhjMGY5OTlmMCwgMHg2OGFlZTcwYywKLQkweGViODZiMjdlLCAweGZiNGY3ZTgxLCAweDcyYjlmZWY0LCAweGU4Nzk5YzZhLCAweGQwODViOGY4LCAweGZiYWYzOGY1LAotCTB4ZGI4ZTcxZWIsIDB4NGZlN2ZmYzgsIDB4YTAxM2ZjNGUsIDB4OTliYzkxMzUsIDB4ZDc2ZTY2ZTksIDB4MGMyOTQ3ZjUsCi0JMHgwMDY1ODA1MCwgMHhlZTIxOTNlYywgMHhkMjg3OTQ3NCwgMHg2MGQxMGE4YiwgMHg5ZGI3YmE1ZiwgMHgzNzliMWE3YywKLQkweGU0MGFmOTNhLCAweGY2MWUxNWI3LCAweDJkYmYxMTJjLCAweGRmMTIyOGJiLCAweDkzYmUwZWIwLCAweDAwNzMxZjFiLAotCTB4NmE5NmVkZGYsIDB4ZjdmNDVlMWQsIDB4NTMyNGQ1YTcsIDB4YWNmYzRkM2MsIDB4MDczYzE2ZjgsIDB4MTAyMTYyZGUsCi0JMHhmZTE0OWI1YSwgMHgxOWM0MDBlMiwgMHhjYzEyOGVhYSwgMHhlZjBlMmYwNywgMHgzZDNlMDEyYiwgMHg5ZmEzMzUyOCwKLQkweDkwODE3NmQ1LCAweGNlZWM2MmM3LCAweDAzOGQ3MGM2LCAweDM0YzZiMmVjLCAweDUwZTk5ZTc2LCAweDliZTQzMTBhLAotCTB4N2QzMzcxMWUsIDB4ZGNlYzc4ZGQsIDB4YmI0ZTJkNTQsIDB4NzlmOGNjOTgsIDB4ZjJkMmQxM2EsIDB4ZDc0YjNmZTksCi0JMHgzZjAwZmU1MSwgMHhlMzBiYTdiOCwgMHhlZjA1MTMyNCwgMHhiNzYwNjllYiwgMHg5ZmVlYzZkYywgMHhmOTFhNmI2YywKLQkweGI3ODUxYTdhLCAweGQ0MTRjZWY1LCAweGQ3MWE5MzMzLCAweDg0YTFlM2RlLCAweDBjM2Q3ZDA4LCAweDE2Y2ZiNzlmLAotCTB4N2JlODViYmMsIDB4ZWIxN2FhYTUsIDB4ZDE3MmYzYTUsIDB4NGRmOTFiZWYsIDB4YTE5M2U5OGYsIDB4ZmQxOTdhZmQsCi0JMHg1MmUyNDk5ZSwgMHg2NzU1ZTIwOSwgMHhmMDAyODUzMywgMHgyZDA4ZjcyNywgMHhmMmY3ZTBhYiwgMHgzOGQ4ZDMwMiwKLQkweDAxZTgxM2M0LCAweDkzM2JlOWZlLCAweGRmYzUwYzdiLCAweGZhZjU1MTc0LCAweDIwNWRmYzAwLCAweDU2ZGZmMjYyLAotCTB4Y2ZiZjNhZWUsIDB4Y2U1N2RiNGEsIDB4NzMzZjMwMTAsIDB4MDQ5YjI3OTIsIDB4NzRhN2Y4NjIsIDB4YmFmMzgyOWQsCi0JMHgwYzUxOWMzOSwgMHhjY2JkM2Q3YywgMHhjMjJjNGU3OCwgMHhlNTE5YzllZCwgMHhkZDhjMTIwZSwgMHgyODNjMTUyNywKLQkweGVkZWM4N2Q3LCAweDVjZWZlMmI3LCAweGU2MDRjOTM2LCAweDBkZjljYmE3LCAweGNlNjdkZjljLCAweDZlZjg2MWVhLAotCTB4YTc3NjYxMWEsIDB4NzIzNzU3MmUsIDB4ZmI4MWJiZjksIDB4YjJmOWI3Y2QsIDB4MTM5N2UzMGQsIDB4ODFmZDBmNjYsCi0JMHg5MjA0NGZiNCwgMHgzY2IzMjc5NCwgMHhjZGVkYTlhMiwgMHgyZjBlZGVlZiwgMHg4MDQ3YmQ4OSwgMHg5MDcxYmMzZSwKLQkweDk3MTVlZmM5LCAweGM4YmU0NmFlLCAweGM3ODBiYzE0LCAweGZiNjM1ZTI5LCAweGU3NGNhMzRkLCAweDZiZjI0ZDE0LAotCTB4MjAzMzBmZDYsIDB4YWNlYzRhM2IsIDB4MzA3ZDc0MjcsIDB4MjE5NDQ5YTMsIDB4ODhhMzM0MWUsIDB4NjJlZDE5ZTIsCi0JMHg5NWRlZGRhMywgMHg5NDk5MThiZSwgMHg1MjVjNWY0MCwgMHhhNDMzMDQxZiwgMHhiMGY4YmU5MywgMHg4YmU5N2JlYywKLQkweDMyZGJhOTU3LCAweDM2ZjVjYThhLCAweDIxZjQ2ZjVkLCAweDRjNmY0MDdkLCAweDAwOWZlYjEyLCAweGViYTM2YTNlLAotCTB4MWYwZTM1YTYsIDB4MWU4ZWViZTksIDB4NzJhNTI4MDcsIDB4MGNlMDdhOGMsIDB4NzQ5ZTJmY2IsIDB4ODYwNDhiMzEsCi0JMHhhMjAxYzQ3NSwgMHgyNWRhODQ3YSwgMHhkMmY2MzhkZSwgMHg2MTllNzc3ZSwgMHg1N2FhMjNmZiwgMHhiOTEyZWM2MiwKLQkweDI1ZGI4N2YwLCAweGFhM2RhODkzLCAweGJkN2MwMDE0LCAweGMyNTJiZTExLCAweDkwYTU5NmUyLCAweGMzZjEwMmM4LAotCTB4MGUzMDJmY2MsIDB4N2Y1MTI1NTQsIDB4YTdlN2Q3MTYsIDB4ZmZhMzllOTksIDB4ZTQzYjUyMTIsIDB4ZThhZjZjYzMsCi0JMHgzYzA5ZTg3MSwgMHg5N2U2NjE3ZSwgMHgxNmYyM2M2OCwgMHgzYTQyZTMxOSwgMHgzZTAyOTQ5ZiwgMHgxMTZmZmU0MSwKLQkweDJiYTA5ZjcxLCAweDM3YzdkMWJlLCAweDE0YzQ0YmYzLCAweDVmOTJlYTFmLCAweDU3N2RkY2I4LCAweGU2ZWQzOTdlLAotCTB4YTRmZWExZjEsIDB4NDRmODc3N2YsIDB4NWY5ZDBmZTcsIDB4OWJjZGViY2MsIDB4YTI1MTM4YTYsIDB4YjA5ZmU2ZjUsCi0JMHhiYzRjZjRkZSwgMHg0ODNlYmNkZSwgMHg5NWRlYmQ0NiwgMHg5OTJlNzM1ZCwgMHg2ZTg5ZjllOSwgMHg3NTc3M2IwZiwKLQkweGQ4MjcwY2U1LCAweDU5OTIxMzM1LCAweDZlYmU4MTdlLCAweDFiNWRlMzQ1LCAweGRlYmM5ZjE4LCAweDdkODI0NzMyLAotCTB4MWZkMDJhYTYsIDB4ZDA3NDFkYjksIDB4NWYzYWM1ZTMsIDB4NjAyNzViMmUsIDB4ZDczMjc0N2MsIDB4MmM0ZGFkNWYsCi0JMHg1MTM1NTg1ZSwgMHg4ZmQxYzIwYywgMHg0ZjYzZjA5MiwgMHg2ZmJiM2FiMCwgMHgxNGVmYTc0NiwgMHhkMjQ1MjdjZSwKLQkweGZmN2UwOTNlLCAweGUwYWYyNmY0LCAweGM2OTNiODg1LCAweDM1NTM4ZGUzLCAweDY2OGRlMzAxLCAweDQ0ZDdiNWJkLAotCTB4MWZiY2U5ZjcsIDB4YmJlMGJmZjAsIDB4MjA4NGNhOWIsIDB4ZmQ2NjkzZjgsIDB4YjMyMmZkMzYsIDB4NTNkOTNhMmYsCi0JMHhjY2Q4OWY3YywgMHg3MzI2NTcyZiwgMHhmNDk3ZDBmZCwgMHgxNWRhNTdmZCwgMHhkZGJmOTJhMywgMHhlZmJmZDBhZSwKLQkweGIwNjVjZThhLCAweGMwZmZhMGE2LCAweDNiMDE5M2VlLCAweGRkN2NlODFlLCAweDJkZmIwOTQ1LCAweDQ5ZGEzNjQ5LAotCTB4ZmMxNGNlMTcsIDB4ZmU0ZjdkMGEsIDB4M2ExZWY5YmUsIDB4MWFiYTdjZjMsIDB4MTdmNzUwYmYsIDB4OGZhMGZmYjgsCi0JMHhjZWM0ODM3YiwgMHhhN2Q3OWJmNywgMHhmZTIzZDcyZSwgMHg3NzVlOTk5ZCwgMHhiNWUzMWIyNCwgMHgzZDc0NWQzYSwKLQkweDVjZWYwOWRjLCAweDViYTIyNzRmLCAweGQ3NWE3YTU3LCAweDNkNmFmZjg3LCAweGFmYWZmN2FkLCAweDY2YjhmYTIzLAotCTB4N2ZjODlkZmQsIDB4OWFmMWY1ZDQsIDB4ZGI4YzE2Y2QsIDB4ZmE3ZWU3OGMsIDB4ZmUzZjFlNzgsIDB4N2VlN2I3MDUsCi0JMHhkZmZjY2M5OSwgMHgxNjZkMmZiNiwgMHgzMjQzNmY1OCwgMHhlYzBiMjdkYiwgMHg2OWZjNjI3MywgMHgwNzY2NWVmYiwKLQkweGJlMmE1Y2Q5LCAweDYyMjBhMGY3LCAweDExYzFlNDdjLCAweGQ0ZDdkNDE2LCAweGYzMDYxYTA3LCAweDE5MDk4YTk2LAotCTB4YmRiZGZiMDQsIDB4YmQ2ZjdlZDgsIDB4N2Q0NzI5MTQsIDB4OWMwODk1ZWYsIDB4OGM1ZDEzZDMsIDB4MWZkYzFlMWYsCi0JMHg3ZmZhMWRiOCwgMHg5NjgxOTNmMCwgMHg0NzRmOGMxYSwgMHgxYTVlYzE5YSwgMHg3ZWUxMjA1OSwgMHhjNTU1OGE1OSwKLQkweDkzNmI3Njc4LCAweDZhM2JlZjE1LCAweGY2YmZmZGRiLCAweDk3Y2ZkMGM5LCAweGU1MmUwYmM0LCAweDc0NmIyNmMxLAotCTB4YzdmNDBhYmYsIDB4MDg4OGYxMjQsIDB4ZWQ2ZDFjZjksIDB4MWIwM2VmMDQsIDB4MDI1MjJiMzcsIDB4ZDI3OGQ5N2UsCi0JMHhmZmZlMDM1YywgMHhjMWU1ODUxOCwgMHg2Y2Q0ZjE5YiwgMHhmYmNjYTc1YSwgMHgyYzRkMjU1ZCwgMHhjNWM0YTVmZiwKLQkweGVkM2E1ZmYzLCAweGVmZTMzNDU3LCAweDA0OTA0ZjI2LCAweGJjZTkwZDZmLCAweGM5OTJmMTVmLCAweGVmZDhlOWRmLAotCTB4ZDE1ZmIwNGEsIDB4NzdkMWY0YzgsIDB4MDMxOGFmZGQsIDB4ZGU3Y2EwMzQsIDB4ZDcwMWNiYTQsIDB4YmVjMTI0NGYsCi0JMHhlZDg1NzZjNSwgMHhjZGJmYjU3NywgMHg2OTkzZDNlZCwgMHg1ZDQ2ZTM3MSwgMHhkZWVjNWZlZCwgMHg3ZGMxYTQ5YiwKLQkweGVmZjlkYjIzLCAweGRiZGVlYzZjLCAweDEzZjM1MzRiLCAweGQyZGY5ZmJmLCAweGQ4ZDMwYzVlLCAweDg0YjM3ZjVlLAotCTB4YmUzYzczZjksIDB4OWEwYjhkMWIsIDB4OTBlOWNiZjEsIDB4NmI0ODFmNjgsIDB4ZjUwNDFjZjQsIDB4ZTdkZjcwOTUsCi0JMHhhYWUxOGE4MiwgMHg1ZDRmOGFlZiwgMHg0ZjFmYjY2ZSwgMHhiN2VmODBkMiwgMHgwMWE1ZWYxZiwgMHhkYzc5ZmIxYywKLQkweGJjZjU2YmQwLCAweGVlYzJmNjA1LCAweDcwOTJlNzYzLCAweDU0ZDE1ODNmLCAweDUzZGE0ZmYwLCAweGFlNzY1ZTZjLAotCTB4Mjg0MWM5OTIsIDB4ZjYxMDYwNmIsIDB4ZWZmMGY3YWIsIDB4YmZiNTI3YjYsIDB4ZWM1YTc1NzksIDB4YmZkYjBlN2UsCi0JMHhkN2Q5Y2ZkMSwgMHg0N2YzMDQyOCwgMHgzZjk2MTYwMiwgMHgwY2RmYzY2MiwgMHgzYjkzOGYwZiwgMHgyMjc0ZmFmMSwKLQkweGJjNjJhOWE3LCAweDA5NmY1MDNjLCAweDNmMzA1N2NiLCAweGNlNGMzYzk3LCAweGZkZmUyZmZmLCAweDgwMDA2Njg0LAotCTB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWJiZGZmMDAsIDB4ZDU1NDc4MGQsIDB4ZGNlZWZlOTksCi0JMHhmMjY2NzdiOSwgMHhmYzk5OTkzMywgMHg0ZGMyZmUxMCwgMHgwMDkwODEwMiwgMHg3ZTEwMDg0MywgMHg1MDIwMjFkNCwKLQkweDQ1NDA2NDdlLCAweDA0M2FiYWVjLCAweGExYmY5MDg1LCAweDU2ZDNlYmIxLCAweDQxMjZlMWY3LCAweDI3ZDNlMDhhLAotCTB4Njc5NmRkNmQsIDB4NTcwNjdkYjUsIDB4M2IxMjU0YjYsIDB4NzcwNzA0YzEsIDB4MDhhMDBlYzIsIDB4ODBhMGRiNTQsCi0JMHgxMWRhZTNjMiwgMHgyNDg2YTIyOSwgMHhlYzU2YmIwZCwgMHgzYmVmZGQ2ZSwgMHg2NjY0ZGNlNywgMHhlY2ZhNWMxOCwKLQkweGY4NzI4Mzc2LCAweDljZjczOWVlLCAweGZiZGY3Y2VmLCAweGIzNzM5ZGZkLCAweDMzMDAwMWQzLCAweDY4Nzc2ZTAxLAotCTB4ZGIwMGQ5MDAsIDB4OGM4MDJmNjQsIDB4ZGUwODIwY2YsIDB4MTZlOTFiZjQsIDB4ZDMwNWQ2MDksIDB4N2FlNzc2ODgsCi0JMHhhOWRmZTBhNywgMHhjZTFhNmJhNiwgMHgyY2IwZWY5MSwgMHg3YTQ0OGYzNSwgMHg0MmQxZTk4NiwgMHhjNjM5ZTdhNCwKLQkweDY5OWU3YTcyLCAweGY4MDZlMjg2LCAweGJhNWJjODY3LCAweGNmYzAwZTY4LCAweDAzODc1ZTljLCAweGQyNTdlOWQ3LAotCTB4MDAxOTQ4NzYsIDB4NjUwNDkzNjYsIDB4NTI4ZWQ4NTksIDB4ZWMzNzM4MDMsIDB4NjVhYzAxNTIsIDB4M2MxZGFlYjgsCi0JMHhhYTQwMTc0ZSwgMHhkMjFiNzQwNSwgMHg1NGZiMzYwZCwgMHgxZTk1ZjFhMCwgMHhkMTFhNGI2ZCwgMHg4N2M0M2QwMCwKLQkweGE1MDM5YTM5LCAweGQzMzZiZWQ4LCAweGJlMDBiMzA0LCAweGFkYzFmYjRkLCAweDFlZjhhYWE0LCAweGM1YThmZmJlLAotCTB4ZmI4MWNlMzcsIDB4ZWM0NmI3YWIsIDB4MWZmNjAxNWEsIDB4YTQwNDczYmEsIDB4NmMxZDdlZDEsIDB4Y2YyZjI1YmYsCi0JMHhjNjAyODVjYiwgMHgzM2ZmZTE1NywgMHhmOGM5NjU1ZiwgMHg3NWYwYTZkYSwgMHgyYzk0MGY3YSwgMHg2NGJmNWMwNCwKLQkweDFhNWY4YTFjLCAweDU5OTk0ZmQ2LCAweDQxNmRjZjYzLCAweGY0OWYzZDAwLCAweDkwOTVjOWUwLCAweGVlYWE3MTZlLAotCTB4Y2UzNGY5OWQsIDB4YjZmMjY3ZDAsIDB4MjFmZDQxNDUsIDB4NjlhYTcyNWYsIDB4Y2U1MWU5MGIsIDB4YzBlOTZkMzAsCi0JMHg4OTg3NGVmNiwgMHhhYzU4YmZjZCwgMHhiNzkwMzAwMywgMHg4ZTBkZjUxYSwgMHg1MzM1YmM4MSwgMHg5NmZhNGQzOCwKLQkweDQ4ODFiMmU1LCAweDliN2Y1MjM5LCAweDg3MWU3ZWVlLCAweDBmODE5OGMyLCAweGRkZmE0NzFlLCAweDNiZGM0YTA3LAotCTB4YzI5MGJlOTEsIDB4NTAyZWIxZTUsIDB4N2E0NTEyZDAsIDB4MzYzMDI1YmEsIDB4OWQzOTdjODIsIDB4ZjdjOTJmM2UsCi0JMHgwNGMwOTY5YiwgMHgyZGI0YTc4NiwgMHhlNGJmMzRlOSwgMHhjYTBlZjgwMSwgMHgzZDEwNDI0MywgMHhmMTZlZmI4MCwKLQkweDAyMTZhNjgwLCAweDFjZTc4MDhjLCAweDkwMDA0Yjk3LCAweDMzMmFmODJiLCAweDI1NjBiYWQ5LCAweDg3MzdkZWI5LAotCTB4MTc1OGQ1Y2IsIDB4MWM4NTY4NjUsIDB4M2Y4MmE3ZTQsIDB4ZjVjMGY4MzcsIDB4YzFiZWI0N2QsIDB4MzAxZjEwY2YsCi0JMHgxNTM5NzFjNiwgMHg0ODU3Y2ZkOCwgMHhkMzNjZDFmNywgMHgwYTMyMWU1MCwgMHhmZmYzZDcwNSwgMHhhMGIwMTRkZSwKLQkweDNmZjhmZGZjLCAweDMyNWYyZmQxLCAweGM5ODk3NDA1LCAweDJjZmQ2ZDNkLCAweDMzYWQ4OGY2LCAweDk5NjZhZGU3LAotCTB4OWZlM2FiMzEsIDB4ZWNkNDRjNTksIDB4YmI1NDNjYTcsIDB4Zjc0OGVjMDIsIDB4YWQ0NjJmOTgsIDB4MzdmNjFkNjIsCi0JMHg5Y2Y5MWM2ZSwgMHg3ZDlmZGUyNywgMHg4ZDMwYjdjMiwgMHhjN2UyZjdkYSwgMHhmZmE3ODNjZCwgMHgxNWZiZTMyMCwKLQkweGU1MDE5MDEwLCAweGQwOWEyNzMyLCAweDMxZmU1YTFmLCAweDRhZWYzZmNkLCAweDc3YmZmM2ZjLCAweDdkYjE2N2E0LAotCTB4NWY1MTgyOGQsIDB4NzcyMjdkYjEsIDB4OTVhMzVlYjgsIDB4NjZmODM3YWYsIDB4ZDNlMTA2NDEsIDB4YTJkOTQ2NmMsCi0JMHg4NjRkNTVmYywgMHhhMmJmNmMwYSwgMHgzYTAwM2I5ZiwgMHgwYjM4ZTJiNywgMHg1NmFkYzFjMCwgMHhlMzM5NGVkNiwKLQkweDg0ZWI0MGQ4LCAweDI2OTAyMmI2LCAweDM1YmFiYzAyLCAweDFkODZiNTk3LCAweDBmMDMzOTRkLCAweDc1OThkNGMxLAotCTB4MzkwZGRlMDQsIDB4ZTVjN2JlMGUsIDB4ZTkzYTNkMzgsIDB4NTY5MWYzYTcsIDB4ZDAxMDI4NGUsIDB4NTczMGU1ODYsCi0JMHg1ZDEwNmJjOCwgMHhmMDc5ZTkwNiwgMHg0NzViOWE0YSwgMHhiYmM5ZDY3YSwgMHg0YjRmYjI2NSwgMHg5OGI0MDlhZSwKLQkweDE0YjRkOWZkLCAweGQzMGQyNmQwLCAweDcxNWM5M2E5LCAweGI4ZjQyY2I0LCAweDllN2Y2NmNkLCAweGY0Zjc0MmUxLAotCTB4MzMzYWUyZTQsIDB4ZWVlOTNhYzQsIDB4NDFmMzcxNTEsIDB4ZThjNGZmMDAsIDB4ZTJkNzU1ZjMsIDB4NjdlZTEyMTMsCi0JMHgwYWY1NWE0NiwgMHg0NTQ2NTdkYSwgMHhlNWZjZGM0MSwgMHhiYmNiYzY2ZiwgMHgwOTFlYmMwYywgMHg4ZmJmNzY1ZiwKLQkweGIzZmJlM2ZjLCAweGNjN2Y2MGNlLCAweDJiNDg4YWY4LCAweGZiYzU0N2MzLCAweDVlZTdjZmYxLCAweDZmM2JhNzhhLAotCTB4Yzk5YmI3YTYsIDB4NzRmZWE2MTMsIDB4MmU1ZmQ2N2UsIDB4NWUyN2E3NGYsIDB4ZTM0Yjk5OWUsIDB4OGRlZDk5ZTUsCi0JMHg3NTg4ZTc5NywgMHhlOTFhZjJmMSwgMHhlOGM3OTc4YiwgMHhmZDcxYzllYSwgMHhjNTk0Yjc2MywgMHgzM2JlZTNkMSwKLQkweGJlN2M2ZTM3LCAweDE3NDcxOTVlLCAweDM3MTY1OGVlLCAweDlhZWI0MjdlLCAweGVlZTI3YTM4LCAweDJmOGRjNjZmLAotCTB4ZjVjNTU0MGUsIDB4ZjlhYmVjOTcsIDB4MjUzZmY0OGIsIDB4OWUzNzE4ZDgsIDB4MWFmYTZjYzQsIDB4N2QwYjRmZmQsCi0JMHhiZmJkNmUyZiwgMHg5ZGZmZmU5NiwgMHhjZjdlOGZmNCwgMHg3YTQ0YmZkMCwgMHg0MmZhNDk5ZiwgMHgxYzM2NTkzZiwKLQkweDA2Yjg5YzlmLCAweGY4Njc0YmY5LCAweGRhMTJlYjhkLCAweGU5YTk1ZWE1LCAweDBjYmViY2M0LCAweGY3ZDgyZGRjLAotCTB4Yzg5NWVjOGMsIDB4NTE0NjhkYmYsIDB4NmM2ZmQwOWIsIDB4ZjkzNTQxMzMsIDB4NGM5ODFmZmQsIDB4ODZkMzc5MGYsCi0JMHg5NGU0ZGNlZCwgMHhhYWNmZmNkOCwgMHgxNGI4YTY2MCwgMHhlOTRkNmUzYiwgMHg0ZGEzMzhmMCwgMHg3OGQ4OWE3NywKLQkweGQzN2VkZmMzLCAweGQxNDRiNWEyLCAweGI5OTc0ZTlmLCAweDliM2Y0NTNmLCAweDcwN2Y0NGVlLCAweDIxNDI3YTQxLAotCTB4ZTk2NGE5MzcsIDB4YzU5NGFmOGEsIDB4ZDhiYzg3OWQsIDB4NmE0YjIxM2EsIDB4ZDg2MzM2YzQsIDB4YTE1ZjZiYmYsCi0JMHg4MWE4MmU1MiwgMHhmZTIxM2ZiZCwgMHhiZGVlYzk0ZiwgMHg0ODZmZmZjOCwgMHgxNzQ5MjMyMCwgMHhlZjNmMTY2ZSwKLQkweGE2OTZmYzM3LCAweGY4NjMzODY1LCAweGUyMzM0YzFhLCAweGYxNDE5NmFkLCAweDQyZTFmMDczLCAweDNmY2VkN2U2LAotCTB4ZjUwYjRlODgsIDB4ZmJlNTVlN2YsIDB4MTE1ZmM2MzEsIDB4ZTE1M2VkN2UsIDB4OWZjOTdhZDcsIDB4YWJmYjg2NTksCi0JMHg1ZDM4ZmNmNywgMHg0ZmNlNzljMywgMHgxOGMxYTU4MiwgMHgzOTBiMTUzOSwgMHgyYzFjMTk4MSwgMHgzYWUzY2NlZSwKLQkweDRiYjM1MGJiLCAweGRmZjM4OGQ5LCAweGExNmMyZWY3LCAweDEzZmJlZTc1LCAweDZmN2Q4OTZjLCAweGZlNjE1M2I2LAotCTB4NjY1M2I2NzEsIDB4NzI2YzVhZWQsIDB4MzE2YmNlNTEsIDB4MThjYjM5YTYsIDB4NWRiMDkxMWQsIDB4YjIxNDAyNzUsCi0JMHg3Y2JlZDVjYiwgMHgwZWYyODQ4NSwgMHhlMTc2Y2ZiOCwgMHhkMTQ4MGI5MiwgMHhlMDNkZGVmOCwgMHg5ZmZmYzg1NSwKLQkweDlkM2ViMDdiLCAweGYzY2QwZGM2LCAweDExNzcxM2M2LCAweGEyYTJkNzNlLCAweGQ3NzkyZjI5LCAweGU4MzkyYmE5LAotCTB4OTM2ZTA2MGYsIDB4NzVjNDljNTgsIDB4ZmJkY2Y0YWMsIDB4MjkyN2U4YzAsIDB4ZGYwMzljYmUsIDB4YWZhOGIzZDUsCi0JMHhmMzY2ZTAzNSwgMHg3MjIyZjMxOSwgMHgwNWNjZmNlMywgMHgzODk5MjIxNSwgMHgxMmMxN2U4ZiwgMHgzNDdjOGJkOCwKLQkweGZhODI1ZTUyLCAweGMxMWVlYzY5LCAweGNkN2Y1ZmUyLCAweDgyN2ZkYjFmLCAweDFkMWExZWUzLCAweGZhZjE0YjFkLAotCTB4OGE5ZmNkNDIsIDB4ZWZmN2NmNDgsIDB4N2Q0MzQxOTYsIDB4NzdjNTM3N2UsIDB4OTBjMGUxMTcsIDB4YWY4N2Y5YzMsCi0JMHhjNjNmNTNhNSwgMHhkODY3YTY1ZCwgMHg2NWVmNzE2ZiwgMHhkZWNmZGJmMiwgMHg3M2FkYzYzMywgMHhkZTliYjgyZSwKLQkweGQwMTQwYTgzLCAweDY3ZjExYjljLCAweDQ5NjgxNGI0LCAweGUwNmEzNTJlLCAweDNlNDNkZmU3LCAweGU2YzI5NGUxLAotCTB4NTliMmYwMzMsIDB4NWYzMWE1ZTAsIDB4OTc4YjExMWIsIDB4YmMyMWY0YzYsIDB4NzFhYjdjYjAsIDB4YTZlY2NjYWYsCi0JMHgwMDE2ZGJiMSwgMHg4MTU5Y2I5NCwgMHhlYmZlZmYzYiwgMHgyMzRmN2QyZiwgMHgxZjNkZTc4MiwgMHhjNDM0NmUyMSwKLQkweDM3MTFlZmM5LCAweDhmYmRjNjFhLCAweDNmNDQzNzExLCAweDg4NmI3YjJhLCAweGZlOWU4ZmRmLCAweDc5YTNlZWM4LAotCTB4YmUzNWI5ZWYsIDB4NzM4MWE1ZmIsIDB4M2RmMjQzN2YsIDB4MDgzZWYxYzksIDB4NWY5OGU3ODMsIDB4MjhkNjJjZWYsCi0JMHhmMDc4NWJhZiwgMHhlYmNhMzlmYSwgMHg5YTJkM2ExYSwgMHhjZWFiZTkwNSwgMHg2OTY3ZjFlOCwgMHg2ODA5MjFmYywKLQkweGM2YzQ0MzdjLCAweGE3NDM1NTljLCAweDdmNjFiMDE0LCAweGZiNjNhODRkLCAweGRhNmJhNDY4LCAweGQ4NTM5NzU2LAotCTB4NzIyMWRiZjAsIDB4OTAxZmY1MDcsIDB4N2ZkOGNkMDIsIDB4N2I1ZWFiNzksIDB4ZjBiODc1MDksIDB4Njk5N2ViZDUsCi0JMHhmOTU3YmVkZSwgMHhlYWI2NTdiYywgMHg5MDEzY2MxYiwgMHgwM2ZlYjAzZSwgMHhkM2FlYWY5YSwgMHg2ZmQ0MzYwMiwKLQkweDhlYTIzMzlmLCAweGE0M2FmNWE2LCAweDFkNTdhZDIwLCAweGYzNGFhMWZjLCAweDdhYjBiZjU3LCAweGI1MzlhNTNjLAotCTB4YzZhYTlhZmIsIDB4YmViZmY4YzcsIDB4MGQ1NWE3ODMsIDB4ZjlkZDU0ZTUsIDB4NWM2MmM1YzMsIDB4MDE1ZjBmMzksCi0JMHhmZWM2Mzc2NiwgMHgzNjlhMDczNywgMHgyZWUzNjM5OCwgMHg3YjI3NWJmZSwgMHgyZGY3N2UxMiwgMHhlMTc1ZmYyMSwKLQkweDI3MTIxNmMyLCAweDY3YWU5NWZhLCAweDc2NTdlNjI1LCAweGI4NzJiZjMzLCAweDg1ZmVkZmZkLCAweDhiZjQzYmQ2LAotCTB4MjgxYjg0MDksIDB4ODM3OTM1YmYsIDB4YjE3MTY3NTcsIDB4NTcwM2FjNDEsIDB4OWVhOTUxZGUsIDB4MmU1NGU4NjksCi0JMHg3YzY1ZTdjNywgMHg3N2E3MzVmYywgMHhmOTI2NzNhZiwgMHg4NWI0OTg1NSwgMHg3OWYxM2JkNSwgMHgyNTk0MGVlMiwKLQkweDdlN2FlMWU1LCAweDM5MGZiMzBhLCAweDhmNWQ0MDZkLCAweDA2OWY3Y2ZjLCAweGM3NjYzZjIwLCAweGY0ODU1YTgwLAotCTB4NTcxODk3MGUsIDB4Y2RlYzBkNjAsIDB4M2ViZjkxYmYsIDB4NjdhZDk5YTcsIDB4YWM1ZjAwMmQsIDB4Y2ZkYTMwZGYsCi0JMHg4MmIxZmY0NCwgMHhkNTI4ZDU0ZiwgMHg5NTE1ZGExNywgMHhmOTEwZGI3MCwgMHg3ZjkwZDU0NCwgMHhjNWMzZTg3ZiwKLQkweDdkZWYyNDllLCAweDYyOTVmYzIyLCAweDI5ZWY1NmYyLCAweDQ2OGZiNjFmLCAweDcxNGEzOWE5LCAweDQ0ZDBmMWFhLAotCTB4ZDY3YTY3NGQsIDB4MmViZjhjYTMsIDB4NThmYjQ2OWIsIDB4NTk5M2YwNzgsIDB4M2VmOTk4ZDEsIDB4NTc4YzdjNDMsCi0JMHg1Zjg2ZTk4NiwgMHgyMTU1Mzg3ZCwgMHhlMWZjYmRiOSwgMHhjYzdhNzM1NCwgMHhhYWQyNzIzZSwgMHhlMGY5NDkwMywKLQkweGJiNDllMmYxLCAweDViYWQwYWY3LCAweDM1YTJkMDdmLCAweGRjZGI3YzMzLCAweDM4NzdjMjExLCAweDQ0NjY4ZGQ1LAotCTB4Y2I5YjU2ZjgsIDB4M2Y3ZGYxNjMsIDB4MmMyMWJiZTMsIDB4ZDBlOTExYmIsIDB4NmJlZDVhMTAsIDB4ZGRkM2UzNjIsCi0JMHhiNDM5MDZhNCwgMHhjOTljMjc0MCwgMHgyM2MzMmYwZSwgMHgzN2FlMjdmYywgMHhmZTMwZTI4YiwgMHg3NTZhM2ZhMCwKLQkweDc4NDc3ZWZhLCAweDU1ZTlhNzMxLCAweGRhZjg5OGU2LCAweDM1ZTY4YTYwLCAweDVmM2ZhNDRiLCAweGZiMTg4MmViLAotCTB4YWQ3NGQzOTMsIDB4OTllNDhiMzksIDB4NjFiNTk2ZTksIDB4YWUyNjI5ZmQsIDB4NmEyZDNlOTcsIDB4ZGIxYzUxNzcsCi0JMHhiZDkxZjM4YSwgMHg5M2IxM2U0NCwgMHgzNjg3YjdmYywgMHgzYmVlYzk1OCwgMHg0N2FlMGU5YywgMHg0ODFjZDc1NSwKLQkweDg3N2EwOWI3LCAweGJiMjZhZGVhLCAweGMyOTM5MWRhLCAweDJlMzFiNWViLCAweDA5ZmZlZjg2LCAweGFmNjQ3ZGFmLAotCTB4M2UwMjhlYjgsIDB4MDlmNzdmNTYsIDB4MDU4ZGY1YmMsIDB4ZjcyOTdmZTYsIDB4OTRjOTljMjMsIDB4MTk5MjE1ZWYsCi0JMHhjZTM0MWNmOSwgMHhiZGFhNmExZiwgMHg4Nzk3NmIxNCwgMHg3ZjEzNzNlZSwgMHgxZjdmMGE0YSwgMHgxMzVlMzg3MiwKLQkweDcxNzVjZGQ3LCAweGFhNjkzZDljLCAweDEzMTA1ZDZhLCAweGU1YzcxMzg3LCAweGMzOTliOGQwLCAweGNlYjMwMDcyLAotCTB4Njk3MDAxY2UsIDB4ZmVmYzMyNGYsIDB4Nzc2OTU5YzIsIDB4ZGU1ZGZlOTEsIDB4Y2Q4N2U0NDksIDB4NTFlMTE4YzQsCi0JMHg4MWYyOTM1MywgMHhkOTVjYjNlMywgMHgyZTRkZTNjMywgMHg1NTRmNWIwNywgMHhlYjkyMGU3YywgMHhhZDM5Mzk3ZiwKLQkweDY3MjY1ZWE4LCAweGVjOGQ2YzM0LCAweDA1N2Y2ODc4LCAweDliM2I1MjZhLCAweDkxZGVmODJlLCAweGM0ZjdhZjFmLAotCTB4MzhjNGQzNzEsIDB4NTZlN2E0YzUsIDB4NjU4NzlmMTEsIDB4ZGFmZDM3NjYsIDB4MzFiZmQzMDAsIDB4OWQ3MjNmYWUsCi0JMHhlZDdjM2ZlYiwgMHg3OWQ5MGYyZSwgMHhjZjg2NWFmZSwgMHg1YzU5N2Y0ZiwgMHhiYmNjYzcyNiwgMHg4NTM5NTljZSwKLQkweDEyZTc5M2Y2LCAweDVjZjQ1MDc4LCAweDJiYTQ3YmUyLCAweDczM2YxZjdlLCAweDYyYjg2NzdhLCAweDRjNjAxZmNlLAotCTB4MDRlMTJkZDYsIDB4MTZlMDdkNDQsIDB4ODNlYjBlZjEsIDB4YjU3YzY2NDksIDB4ZTRkYzUyMWYsIDB4MWU0NDNiZGYsCi0JMHhjMzJmMDY2YywgMHgzNWI4MmE0OSwgMHhlMDdhZjc1NiwgMHg3ZjcwZjNkNywgMHhiMDRjNDcyZCwgMHgxZDNiNDkxMywKLQkweGYzNjI4YzcyLCAweDA0ZDhiMDc5LCAweDhhMzI2Y2JiLCAweDRiMTU4ZjA4LCAweDMyMzIxMmJkLCAweDlhZTI1ZmVjLAotCTB4Yzg2ZDhkZjYsIDB4NjVkMDIxZWYsIDB4ZDdjNzNmNWUsIDB4M2M5MWUwYzEsIDB4ZmJmZDZjNTIsIDB4ZDVhZGNkNWEsCi0JMHg1YWY5Y2ZiZiwgMHhlYjEzY2VjOCwgMHhkMzExMzlkZiwgMHgxNmUzMzU3YSwgMHg5NmQ3ZTBlYSwgMHgxZjgzYWQyNSwKLQkweDUzZDdjNTc0LCAweGM2MzRiYjBmLCAweGM3MTI3MDVjLCAweDEyOTIzMDYxLCAweDMwMjhlN2UwLCAweDg0NWM3MDgzLAotCTB4ZWRmYTg0ZTEsIDB4YTU1NWJjMzksIDB4Mjc1NjQ5YmUsIDB4ZjRkNzMzYzYsIDB4NDE4Yzc2YTcsIDB4ZTVjZjFiM2IsCi0JMHhmZDBiNzQ0MCwgMHg4ZGYzY2EzYiwgMHhiNWZhYmFhMSwgMHg0NGZmMmNjOSwgMHg3YWIzMjQ3ZiwgMHg0OTc4MjFkMiwKLQkweGU2Mzk1ZmQwLCAweDcxMThiYzQ5LCAweDkxZTVkNWM3LCAweGM5ZGE1ZmUzLCAweGI0YmJiNmZmLCAweDA2N2U5MmRmLAotCTB4Nzk0MGNhNGUsIDB4NTUxY2NkOWMsIDB4ZWJlYzQ5OWQsIDB4OThiM2U1MjAsIDB4ZTJlNGJjOGYsIDB4OTIxYWQ2N2UsCi0JMHhkZjVjMDEzYywgMHhlMjgwNzlhYSwgMHg5OGUxY2RiYywgMHg1OWQ4YzcyZSwgMHg4NWM3OGI5NSwgMHhmMjE3ZTNmYSwKLQkweGFmMjNjYzU0LCAweDk3YjRkZTlhLCAweDVkNzVmY2UyLCAweGNjNzRlYzA3LCAweGVkZmU3YjUzLCAweGI0MTQ3NDU5LAotCTB4NGVkYmVjYzgsIDB4YjRhOWZiNzYsIDB4Zjk0YWM4YTcsIDB4NTRjMDhlZTEsIDB4NTIzMDRmOTIsIDB4Nzc3MTQxOTAsCi0JMHg3Mzc0MTk4YSwgMHhmOGZjOGRkOSwgMHg1MGE2ZTM3NywgMHgzM2JiMGQ4NiwgMHgzYzI1M2I1OSwgMHhhN2U1MTM2MywKLQkweDJmZGYwOGZlLCAweDBiYTBhMWFkLCAweDhjNDkwZTJjLCAweGI4YjUwYmVlLCAweGJmZmYzZTY4LCAweDNmMjI4Zjc2LAotCTB4OWY5YjNmYjUsIDB4NDVmOGJlMmYsIDB4MGNkZjdmMDksIDB4YWNmZjFhNjYsIDB4MWVmMDI5Y2IsIDB4ZDQ3OWQxMzAsCi0JMHhkNThlNzE3ZSwgMHhjNmNjODVmNywgMHgwOTRmZWIxOSwgMHg4ODFkOTAyZCwgMHhlYjQ4ZDI4MywgMHgxNjRlNzY1MSwKLQkweGNhN2NiMGI2LCAweDc5NzAwMmY2LCAweGEzY2YzMTg0LCAweDRiYzM5Y2YzLCAweGJmNTFlMjgwLCAweGY2MTJkYzEzLAotCTB4YjAwY2E3YjcsIDB4ZGJhMDY3ZmMsIDB4OTEyZjNkYTIsIDB4ZWM4MTVhZGMsIDB4NzVlNTVkYmQsIDB4ZjYwMjMxNGIsCi0JMHg3M2YwZGE0MCwgMHhmODViM2Q2MywgMHg0NGU2NzRhNywgMHhmYzUwZjBiOCwgMHhlMTViOTliMywgMHg3OTU4YjRiNiwKLQkweDg3NzkzM2E3LCAweGE2YzgwZjI5LCAweDM0YTYyMjc1LCAweDc3ZDFjZmNhLCAweDFhZjhjZjNlLCAweGJhZDgxM2U2LAotCTB4Y2NjNTlmMDYsIDB4MDNhYmI3Y2YsIDB4NjJjZjFmOTcsIDB4MDcwODM5N2MsIDB4ODRmOWMwYzUsIDB4ZmM4ZDQ0ZjAsCi0JMHg2MWUxY2Q5YywgMHgzNDM5YjBmYiwgMHhjOGRkMmViNywgMHgyNjJhN2Y5NywgMHgzZjNmNjg2MCwgMHg3YjIxODY2OCwKLQkweGE3ZjZmYjI2LCAweGI0NTZkMzBjLCAweDhlMDJmNjg1LCAweDNjMzdkMDZiLCAweDBjN2U2OGI1LCAweDYyYTY4ZTRkLAotCTB4YWVkM2ZkZjgsIDB4MWI2ZDRmOGQsIDB4NzQ4ZGNlYzMsIDB4OGE5ZmY1MTksIDB4ZjY4YmJhNmQsIDB4YmQwYWVkYzksCi0JMHg4Y2JiMjdhNywgMHg3MjhkYzFjYiwgMHhmZWYyYjU0YSwgMHhmMzg4ZjFhMSwgMHhmOGQzYTIzNCwgMHg5MWM1YjczOCwKLQkweGQ5OWYyY2JhLCAweDE4YmQ5MDBiLCAweGE1YjdkOWY5LCAweDUwM2JlNWM4LCAweGY0M2ZiZGI1LCAweGJlZTI5NDY2LAotCTB4MWY0NzRkN2EsIDB4OWY3MWMzNmIsIDB4NDUxNjBmYWQsIDB4N2Q1MGZlYTgsIDB4NWYzZTEzZWYsIDB4ZDc2YWJmNzksCi0JMHhlZGJiZjIxNCwgMHhmOTA1N2I4YSwgMHgyM2ZlYTg5ZiwgMHhhOGJmMDc5NiwgMHhlYzYzM2I2OCwgMHhlNDBjYzYwZSwKLQkweGQ3MTM3ZTEwLCAweGZlNmY5ZmYxLCAweGZkYjllNTExLCAweGFhY2QyNDg3LCAweGM4MWRmZjkxLCAweGMyMWJiZTIzLAotCTB4ZDdlNGFiMWYsIDB4NjQzZTg3ZmQsIDB4OTkxM2VkNzksIDB4NWViNDJiYmUsIDB4MjE2OWE4NDUsIDB4YjQwZTc1YzksCi0JMHgyZWRmOTBiNiwgMHgzMDQxZjkxMSwgMHhjMTkzZmI5NywgMHgzN2NmNDUzMywgMHg5ZWMxZThjNSwgMHgwZWRjNzEyOSwKLQkweDljNTFjNmY4LCAweDNkN2IwYjBhLCAweGI2MjdmNTRjLCAweDJmZWU0NzVkLCAweDQ0YmJmOWE0LCAweGQ3YmM2YzdkLAotCTB4OTM0NzQ3MDQsIDB4MzVlMTliZGMsIDB4OWRjNTBlZDYsIDB4ZTEyOTc5ODAsIDB4ZjU5Y2U0YWMsIDB4NzhjYzRmMjEsCi0JMHhiZjNmMjY2YiwgMHgwMmY1OGFiNSwgMHgxMzNmYmU5OSwgMHgyZTQ3YjViZiwgMHhlN2RhNzZhYSwgMHhkNTFlNjBhNSwKLQkweDkzYWM0MTk1LCAweGM4ZmM0OTFkLCAweGQ4MjZmZDkwLCAweGEwM2NkZjkzLCAweDE1ZmY3OGQyLCAweGY1MDU3ZTYwLAotCTB4ZjUwMzJkYmQsIDB4Njg1Y2ZmYjcsIDB4ZGU3YzdhZjIsIDB4YTBjOTNhODUsIDB4YWYzY2UxN2MsIDB4ZWYxNGJiMTMsCi0JMHg3NGRmMWE2OCwgMHhlNGE5ZjNmNiwgMHhhODI4MDZjNywgMHg3NzlmN2ZlMSwgMHhiOTIzOGVkNywgMHg1MzJiZmUyMSwKLQkweDgwM2FjZWM4LCAweDRlYzMzNWY5LCAweGYxNGVjOTRiLCAweDdmYzI1MmZkLCAweGNjYzVkMTM5LCAweDNkYWJiNzJmLAotCTB4NzY1ZDk4Y2IsIDB4MTJlYzgwOTksIDB4MDFlY2NmZjEsIDB4YjhhMGVmZjEsIDB4N2I0MGVhNWMsIDB4NjQ0ZmVmNjAsCi0JMHg2M2RlZGU3NiwgMHgxNjdjYjBmMiwgMHg0NjA0ZmFmZCwgMHg3NDRkZGU1NywgMHgwNzIyY2Y3YiwgMHhlMjEzNzNiMywKLQkweDM1ZWM4Y2I5LCAweDEzY2Q5NDcyLCAweGE2MzRhMDA0LCAweGVjNmYwMjVjLCAweGNiOTU0MTM5LCAweGY4NmNmMGNlLAotCTB4N2VjMjJkY2IsIDB4MGNiNDkzODMsIDB4NTUyM2VlMzcsIDB4MjNlY2UzOTYsIDB4NWE3MjVlMjYsIDB4N2ZjN2QzYzQsCi0JMHg5ZWE3OTNmYywgMHhhNzhmNGY5OSwgMHgxMGUxMzhmMywgMHhjZTliNTI3MSwgMHgyMmEzZmVmYywgMHgzZWJlMzU1NiwKLQkweGU1MWI1NTc3LCAweGFjYzk2ZmU1LCAweGE3MzhiMGZmLCAweDFjOWMwODg4LCAweDE0MTRlNzE1LCAweGNmZDQzNDM3LAotCTB4NzVmY2UyNmIsIDB4ZjQxZWQyMjYsIDB4NWIzY2IzYTMsIDB4NTU2ZTUyMTYsIDB4MThmNWI0YjEsIDB4YzFiZDczYjUsCi0JMHhjZTMyOTQ4NSwgMHg0YzczZDc1ZiwgMHg0MjVlNjZlMSwgMHhmYTNjZWJmOCwgMHhmOTMzMTI4ZCwgMHhjZWJjZjNiZCwKLQkweGUwNzJmY2ViLCAweDBlNTExNzgzLCAweGY5NDYxZDhmLCAweGI4NTM4OTI3LCAweGNjM2Y4NjFkLCAweGVlNDM0NmIzLAotCTB4OTJmZGZkOGQsIDB4Zjk3ZTQ3ZTEsIDB4ZmE0M2FhMGQsIDB4MWE2MWU1M2EsIDB4MDIwMzYzZTMsIDB4OTk1NWU4OWIsCi0JMHg0NzRhNzhiZiwgMHhmNGM4M2VjNiwgMHg3OTQ0YzlhYywgMHgzNWJlZDljYSwgMHg5Y2VmOTQ5OSwgMHhjYzg3MzJmZSwKLQkweDQ1Y2NlYmIyLCAweGFhNzczZjU2LCAweDRmYzIxMjllLCAweDljOTYwMTY3LCAweDdiN2E3MDQ5LCAweDUxZjRjMmE2LAotCTB4NjczZjg5NmUsIDB4ODRjN2RhMzEsIDB4YjBlOTE0MWQsIDB4YjFmNTYyNGIsIDB4ZmQ1MDA4ZWMsIDB4NTQ3YjI5ZGMsCi0JMHg4MGFlODNjYywgMHhmOTFlNzZiZSwgMHhmODFlNzExYiwgMHgwZjFmODgwOCwgMHg2Y2ZkNDFmZSwgMHg5NDIzZTQxNCwKLQkweGRhZGM2MGI3LCAweDc3MTI4Y2Y4LCAweDJkZTQ2NzNlLCAweGIwN2JjNjc1LCAweGRhZjg0NGM1LCAweDFmZTA5NjE0LAotCTB4Y2ZkNTE2NTEsIDB4YTNhZjhmYzUsIDB4ZDllNzA1YmMsIDB4N2M3M2RhMWMsIDB4ZTZiNWVhMzQsIDB4Y2E3ZTg0ODUsCi0JMHg3OWI5ZDg1YiwgMHg3NWEzZDU5MCwgMHhmZTVjNGE2ZCwgMHgzOGE2NThmMiwgMHg0Mjg0MmMwZiwgMHg1NzEwNWZjYSwKLQkweDY2Mjg0ZmNjLCAweDFjNDE2MTM4LCAweDZkZjZjODRmLCAweDZmZGYzYjIwLCAweGZmNDJmMmUyLCAweDAzNzNlY2NhLAotCTB4Yjc5ZjE1ZTEsIDB4MzRiZjcyNTcsIDB4Y2MwMjE1NzAsIDB4OGYwNWY2N2UsIDB4YjlkZjkxZDksIDB4NWE2ZWY5NmQsCi0JMHhmNzk5YWU2MywgMHhmM2U1MGRjZiwgMHg0MDczMGQ3YiwgMHhhOTBhOGQ1ZSwgMHhiMzE2ZjhmMCwgMHg5Y2Y3NWFmYywKLQkweDU0Yjk0NWM5LCAweDBlMDk3ZjBiLCAweDU5YjVmZTdlLCAweGU0NWFiZWVjLCAweDRhMDM5Yjc3LCAweDJmY2VmY2QyLAotCTB4NDA4MWNkYzYsIDB4NjliYmFkMGIsIDB4NDdjZWM0OWYsIDB4OGZjNWY3NmIsIDB4ZDUzOTBiZjcsIDB4OWM3ZDNlZWQsCi0JMHg4M2VhZmQ4ZSwgMHg0ZTQyZmQwOSwgMHhmM2ZjNTBmZSwgMHg3ODcyN2MwMywgMHgxZTUzOTBkNiwgMHhmMzczYjFlNCwKLQkweDY3NTZiNzEzLCAweDdjZjBhNjdkLCAweDhmMzE2ZGUzLCAweDM4MTYxZmQxLCAweDkwNmRjMDZhLCAweDcyMDJlYjdlLAotCTB4MmQ1NDcwODAsIDB4Zjc5ZTc2ZTksIDB4ZGM3YWRhNDIsIDB4MDYwMzA2ZGYsIDB4Yjk0MWZlMWEsIDB4YjRlNDJjM2MsCi0JMHhlZDg3ZTA0MSwgMHg3ZmFmZGYxZiwgMHhiZGQwMGE0ZSwgMHhjNzRmYzNkMywgMHg1ZTAzNWZmMywgMHhkZjNlMzQ3NSwKLQkweDk1MmRmOWQ4LCAweGYxMTJmNWNlLCAweGIwYTZkZDU2LCAweGM4NDZiN2ZjLCAweDM1NWYxMTI3LCAweDU1NjlmODQzLAotCTB4ZTIyNWJlMjksIDB4ZGQyN2MxYWIsIDB4Yjc5ZTdmODQsIDB4MzdmOTZmZmYsIDB4YTYyMzVjZjQsIDB4ZWMyMjU1YTksCi0JMHgxZmY2YTg5YywgMHhkZGFlYjcyNCwgMHhmYjQzNWY3YywgMHg0YmZiZmIxMSwgMHhkMGRlNzVmNywgMHhjYzk4NjRmNywKLQkweGYzMzRiZGY0LCAweGY4YTVlYjE2LCAweGU1NDNiYjdjLCAweGU2NjgzMzc2LCAweDllMDZjYWU3LCAweDJjNWZkZjEyLAotCTB4YmIyNWY1ZjIsIDB4MzU3YWRlNzksIDB4ZTc0ZWNkNzQsIDB4ODMzZGZkYzQsIDB4NjlhZDYwNzYsIDB4YTI0N2M1MjksCi0JMHhhNWY4YzdjNywgMHg1ZDc5MzI0ZiwgMHhhM2Y3M2RiZCwgMHhiZjNlNTAxZiwgMHg2MzcxNDNhNCwgMHg2Mzc1MDdhNiwKLQkweGYxYzUyZjE1LCAweGU3YWZiMWJhLCAweDJiYWQ4ZjhjLCAweDFkMjVmOGM1LCAweGU4ZGIzNDhmLCAweDkyOTdlMjNjLAotCTB4M2ZiMmNjOWIsIDB4ODk0Nzc3ZmMsIDB4ZjcyNGRiZDYsIDB4NzhmZjdjMDQsIDB4ZTY2ZmUwY2YsIDB4NTM3MjVlOTEsCi0JMHhmZTdjZDE2NywgMHhkYTRiM2JlZSwgMHhmY2ZlM2U5MSwgMHhmZDZjNzcwYywgMHhmN2M1ZGM3OSwgMHhjMmFjNjRiNywKLQkweGE4ZWY2YWUyLCAweDQxNWE3ZmQ0LCAweDNkOWU4NWU3LCAweDVmN2JiZWNjLCAweGZiMjU1OTdkLCAweDIwOTc2ZmVmLAotCTB4OWUzYTE3MTcsIDB4MWQyNWVjN2IsIDB4ZjA3YmRkZTUsIDB4ZmFjOTRhYjQsIDB4NmFkM2NlYzIsIDB4ODVmMjZiZjQsCi0JMHg0NThlNThhYiwgMHhhYjZhNzlkOCwgMHhiNzhmNzU0YSwgMHg5NDZhZjdlYiwgMHgzZTE3YTdmMiwgMHgzNTU0ZTc2NCwKLQkweDNlNTNlNzk0LCAweGQwMWM5Y2Y2LCAweGJhYzc5ZmYwLCAweDRmMDk1MTVmLCAweDhjMTI2ZDBkLCAweDU3ZWQ4ZmM4LAotCTB4NDFmOTNmNTgsIDB4ZTM2ZTNmYTIsIDB4NjljMGQ0ZmUsIDB4ODFhNWMwOTUsIDB4NTViNzAzNTMsIDB4ZDg2Y2ZmYzIsCi0JMHg4Njk3MWM5MSwgMHg5ZTA4ZGE5ZiwgMHhiZTcwYTNlZCwgMHhhYmQ2ZGE0NywgMHhkMjNkMDc5NCwgMHgxMzdlM2YxYSwKLQkweDY4ZDM5OWQ1LCAweGE2ZTVjNzNjLCAweDliZmRmMWRkLCAweDMzYThmMDg3LCAweGVmZTg5ZDNmLCAweDFlMDRiMjRhLAotCTB4ZjA5OGExOGIsIDB4MWFhOTE4MzgsIDB4N2ZkYzQ2NjcsIDB4MWM2NmJhN2UsIDB4Nzk0N2I5MjQsIDB4MjM3N2M0NTMsCi0JMHhiZTRjZGViZSwgMHgyYTZiYTE3ZCwgMHgxOGZmNDVjNSwgMHhmZTE3ZDU4NSwgMHhjNmExZmYzMSwgMHgxNjY2NjVlMiwKLQkweGYwZTJjYmM3LCAweDU2OWU5ODFmLCAweGEyMmM4Zjg0LCAweGFmODI1NmY1LCAweDMyYmNlNDhlLCAweDdjYTBlYTljLAotCTB4ZGI5NDQ1NzksIDB4MjViMGIyZjEsIDB4M2Y4ODkwMTAsIDB4MmI4NzhiMTMsIDB4NzA4ZGI4MjEsIDB4YzJkODdmZDAsCi0JMHg5NTVmMjljZiwgMHhjMjA0ZGU1OCwgMHg3MjEyNmRiZiwgMHhiY2U0MjRkZiwgMHhkMWIxZWIwOSwgMHhhODgzZGRmNCwKLQkweGRkNDQxYmM3LCAweDllZDI3OWJkLCAweDM0MDI1NGUzLCAweDkzYmFmZTg4LCAweGU3MjRlY2M3LCAweGNmZmRjMDY1LAotCTB4M2ZmNzIwYjIsIDB4Nzg4Y2ZlODYsIDB4MThmNzY4OTIsIDB4ZmQyNDFlYTksIDB4NDAyZDg2ZDcsIDB4MTcyYzMzZGYsCi0JMHgxYjc5NjdmZSwgMHg0NmU5MWZmYSwgMHgzMjNmZDAzZiwgMHhlZjQ3ZTE5NSwgMHhjNjI3N2NlMiwgMHhmOGNlODZjZiwKLQkweDc4YjIwYmYxLCAweGYyMjgzYTNlLCAweDcxMmNhYWUwLCAweGI2ZjQyMDNlLCAweDRiNTIwMDYyLCAweDlhNjViZTcxLAotCTB4YjdiMDBlZWMsIDB4ZmViNGNjN2EsIDB4NDc4OGE5ODksIDB4NTY4NGZmOWMsIDB4YTI0YmUxOTgsIDB4OGRmZGEzNGYsCi0JMHg3YTBkZWZjOCwgMHhlMThiOWQxNSwgMHgzNWEzYTBmOCwgMHg3ZjdlYjYyZCwgMHhlYmQ3OGIyYiwgMHg5ZDY0NzMzNSwKLQkweGVmNTMxMGY0LCAweDRmY2IyYWFjLCAweDM3N2NlZjVhLCAweDMxYmZjNzBiLCAweGQzZDNjMzY2LCAweGNmMWRlYjYzLAotCTB4ZTNjMjIyOWUsIDB4YmM3ZjczZjcsIDB4ZjE1N2JlODIsIDB4ZDJmZjcxYjcsIDB4NjZmMzgxNTcsIDB4MmMwZWZlNTAsCi0JMHg1OWI3ZjYxZiwgMHhmODk3NTQwMiwgMHgzNzU0NGYxMSwgMHg5MGJjMjEyYywgMHgzYmE1ODZiZCwgMHgyZjU4MmYwOSwKLQkweGFmZjM0OTNjLCAweGRjM2IyYmE2LCAweGM2MTBlYWZmLCAweGY1N2U5YzY5LCAweGZjMzAzZmEyLCAweGY3Y2YxYzlkLAotCTB4OTExYjcyOGQsIDB4ZWEzMDdlYWMsIDB4NzgyZjg2ODYsIDB4NmYzYzZhN2UsIDB4ZmQ1OTQ3MzAsIDB4MTg5NjEwZDAsCi0JMHg1ZThmM2I3ZSwgMHg3ZTQ3Y2JjZiwgMHg5OGZmYmJmYiwgMHg1MGRiMWViNywgMHg5ZGIzOGYxNiwgMHhmNDhiYzE5NSwKLQkweGVkZTdjOTFkLCAweGU4NzlhNGQ2LCAweGI2OTcxZjkwLCAweDUwNjk3YjMxLCAweDNmMmMzOWEyLCAweGUwZjk4NDM5LAotCTB4ZGUzN2FjNmMsIDB4MWJkNTk0ZmUsIDB4MGY2ZDQ3OWQsIDB4Y2FiNDNjYjEsIDB4MzVmMWNlMzcsIDB4NjY4MjZhN2EsCi0JMHhjMzM2Y2Y5NiwgMHg5ZTUyZDYzNiwgMHg2ZGZmOWIxMywgMHg1MmVmZjA3MiwgMHg0ODM4OGEzNiwgMHhlYjg4MTNmNCwKLQkweGY2ZjYzODhkLCAweDgzZmQxYmIyLCAweDA1ZWE2ZmUxLCAweGJlODMzN2FlLCAweGEzNzQ5ZTdkLCAweDc2MTdhODlmLAotCTB4NjdiYTViNTMsIDB4ODk2OGE1M2IsIDB4YjBiZDUwNzksIDB4NTlmY2NjMjcsIDB4ODNjYzRiZGMsIDB4NmJjMDRhZGUsCi0JMHgyYzI5ZGJkMywgMHgyOTNmZWRjZiwgMHgxODRjZTgzYiwgMHg1MWYzZmJlNSwgMHg3ZTYxZWY5NCwgMHgxY2U0OTA1ZiwKLQkweGNmODE1M2Y0LCAweGQ5ZmY3MTVlLCAweGY5MzMyMTU0LCAweGQ2ZjBlNjk5LCAweDhlNTA5YmM4LCAweGE3ZmQzNzBjLAotCTB4Mjc1NDAyZDMsIDB4YTU3ZTFjOTQsIDB4YmI1MDcwODAsIDB4ZGFjNWM3MGYsIDB4YzdkMWVhMWYsIDB4ZjAwYTBmYmUsCi0JMHgyYTYwYTU3MywgMHhmYTMxZDNiYiwgMHg2NTdlMWZmNywgMHhlOWFkZTEzMiwgMHhiODhiMmZlZCwgMHhhOTE3YWU3ZSwKLQkweGNmZTczNzU5LCAweGQ3ODkyNTY4LCAweGQ3ODkyNmJmLCAweGE4ZTY1ZGJmLCAweGZmMmVlYTlkLCAweDg4MWJkOTIxLAotCTB4ZWZhMWFiZDEsIDB4YzA4ZTA0MGYsIDB4OGJmY2ViY2MsIDB4OWJhMzFhNTksIDB4YTYxZjFjYzIsIDB4ZmFlMmRlNmUsCi0JMHg4ZjM5Zjk2YiwgMHhhMWJmZDZjMiwgMHhmMzcxMTJiZiwgMHg4ODBlZjEzNSwgMHg1ZjgwYzQyZiwgMHhmM2Y4NjAxOSwKLQkweDdlMzEzNjlmLCAweDczMDdhN2ZjLCAweDRlYmVlMzYyLCAweGZmMjA4ZWYzLCAweGNjMDc1NGQ3LCAweGY5MDJhNDlmLAotCTB4M2E2N2Y0NWQsIDB4ZGZjYmNiZDUsIDB4ZWE3Y2IxYjMsIDB4MTVhZWMxNzgsIDB4YzgxNTdmY2MsIDB4YjFlYmZlNDAsCi0JMHhjNjI2NmJiNywgMHg1OThkOGJjNiwgMHgyNTRjM2YzMiwgMHgxNjUyZTQzOSwgMHg1ZjVmMGNmMywgMHhkNjE5YTFjOCwKLQkweDhlMDI3Mzg4LCAweGI5MzM4ZmU3LCAweGVhZmFjMTVmLCAweDg5Y2Y2NGNmLCAweGU2YWRkNWY1LCAweDE2ZGQ0ZGM1LAotCTB4ZmY2NDczYTAsIDB4Y2VmYjBiMDUsIDB4NGRlZWYzZTQsIDB4MmY4NzdlYWMsIDB4ZGZjOTEzN2MsIDB4OGQzN2NmODAsCi0JMHg2ZjBlYzdkYSwgMHgzZmNmNDg5YSwgMHgxYTc5YmMzZiwgMHg5YTk0ZjczYiwgMHg0ZTk5ZTJlMywgMHhiZTUyZTVmYywKLQkweGMzNDczNjc0LCAweGIzZWVmYWZlLCAweGZhYjhiYmVjLCAweDRmZjE4NTZlLCAweGNiM2M2Yzc0LCAweGVmZTdlNmM4LAotCTB4ZWM2YzQ3ZmQsIDB4MDI4MjQzN2MsIDB4MWYxODAzOGUsIDB4ZTc1ZDZmMzcsIDB4YThiZjJjZWIsIDB4NTg5ZWM5MGIsCi0JMHg4ZGVmMTgzYywgMHhiMTcxZTZjYiwgMHgyMGUwNWIzMCwgMHg5ZTk4NzkyOCwgMHgxNzViNzgzYiwgMHg1M2YxOTk3YSwKLQkweDFlOTkwNGFiLCAweGRlMTRkYTliLCAweGNjNWJjZWRmLCAweDNhMWYxOTNiLCAweGJmZTI3NGI4LCAweGY5YmZjZTgzLAotCTB4ZTczYjA4YmQsIDB4M2VjYzkxYzAsIDB4MDcxNTI3MDYsIDB4NmJmZDIyNzYsIDB4MWQ3Mjg0N2EsIDB4M2Y4MDk4MGMsCi0JMHhlNGZiYjBiNywgMHgxOTg1MTM5NiwgMHgxM2MxZmI4NCwgMHg4YjI1NjcyZiwgMHgzZGQyNmYxYiwgMHg1NGU1NDIwYSwKLQkweDEyNDNhZjNlLCAweGYzNjUyZmZiLCAweGU3NTM4N2YzLCAweGI1M2IzZmI5LCAweDk5MzEzN2MwLCAweDkyYTFkMzVmLAotCTB4OTA5MmU5ZDcsIDB4MzRiMmE3NzcsIDB4NDVkYzdkZDksIDB4MzFiZWRmMzEsIDB4NGZkYTI5ZmEsIDB4ZGQ4ZDg3NmYsCi0JMHhmOTNhZjVjNywgMHgwM2MyZWE3OSwgMHgxNDk5Y2QyNywgMHg5OWE1M2I3ZiwgMHgyNzZhNDcxNCwgMHhiZTg4YmJiZCwKLQkweDljYmE0MDAzLCAweGU0NmQ1YWZjLCAweGFjNzdiYjEwLCAweGVjNThlYjZmLCAweDQ3NDdjMjQ5LCAweDMyZGZjNzM2LAotCTB4ZTY3ZGY5MzUsIDB4M2JmZjQ0YjcsIDB4NzUxNmNlZTAsIDB4YWUxMzJlZDQsIDB4YzUwYWNlZjcsIDB4MWRlNTkzYjEsCi0JMHhlODkxYjQ5ZSwgMHg3ZTEyZWY4NywgMHgwYTk1ZWVmOCwgMHgwMWRlNTNjYiwgMHgxNmY3ZTE0ZCwgMHg5NTYxN2VmYywKLQkweDA5NzdiM2YwLCAweDIyYWFiY2ZmLCAweDU3YmUzZmI5LCAweDM5ZmFiM2NjLCAweDE3ZWU5Mjc4LCAweGM3ZTI3YjU2LAotCTB4YmRmMjJiZGQsIDB4ZjM2MWUwMzUsIDB4YTEzNGJkZGYsIDB4Zjc3ZGU0NWYsIDB4YzFmMjEzN2EsIDB4OGI4N2UxNmMsCi0JMHg3MGZjODhhMCwgMHhlOTAzZTMxMCwgMHhjNmQ4YjFiZCwgMHgyOWYyZWNlMiwgMHgwOWU2OTIxMywgMHhkMmZmZDFjNywKLQkweGM0MjcwM2Y3LCAweGZlODYwNDc3LCAweDY1ZGY4YTliLCAweDkxZDRlYmYxLCAweDk5MzkyZmYzLCAweDQxNDFiNmZmLAotCTB4ZTFiMWZiOTIsIDB4ZmRkODY1ZjgsIDB4ZTJlZjVjM2QsIDB4YzFkZWExYmUsIDB4N2ZmNDM0NzksIDB4ZDhhMzJiMTUsCi0JMHhmZjQzMmQ3MywgMHg3ZjczNjc0ZiwgMHhiNmNmYmI1OSwgMHhiMGJlZjYyNSwgMHhhMzhjZTgzZSwgMHg1YjkxYTFmZCwKLQkweGZiZjhjNTJlLCAweDhjNzM4MTVhLCAweDczZDhlNjAxLCAweGRmNjQxNzkwLCAweGY0ZDlkOWQzLCAweGNiMmY2YjNkLAotCTB4MmMwNzcxYWYsIDB4ZjJiZWUxN2UsIDB4MmNmMmJlYzQsIDB4ZWFlOTcxMzEsIDB4NzE0OWY1YzgsIDB4OTczZmJjM2MsCi0JMHgxNjdmZmRjZSwgMHg1YjE0OGY2YiwgMHgwN2Q1ZmQ5OCwgMHg2YmRkMDBhNSwgMHgzZGI4NDdkNSwgMHhiMTIzZGZkNiwKLQkweGNlYTJjMjczLCAweDg1N2JlYzIzLCAweGI3MjQ4YmI1LCAweDMzYjFiYjg3LCAweGEzODE5ZmM0LCAweGNmMWU1NjU1LAotCTB4YzkwY2JjMGQsIDB4ZmE4OGUwNGIsIDB4MjVkZmJlMjksIDB4OWUyMjdiZTIsIDB4NjJjZjQyMjYsIDB4OGYzZWZmOWEsCi0JMHhlY2VmYTZlNCwgMHg3NWEzOGE2ZSwgMHgzMGE3NWZkMywgMHgyMTFjMzM3NCwgMHg5YmYyMTUyZSwgMHgyNGZhNzg4OSwKLQkweGYyNDlkN2RiLCAweGVkNzFmYWMzLCAweDU0ZmY5YzE0LCAweDg0NzljN2YxLCAweGQ4OWI4NjlmLCAweDFkODU2ZmQxLAotCTB4NGZkMzRiZWQsIDB4M2JhZmZjNTEsIDB4MGZkNWVlMjAsIDB4MjRhMjg3MTQsIDB4ZjJjMDEzOTcsIDB4Y2Y2NzVlYzAsCi0JMHgxZjllNDZmNiwgMHhmYWY1N2JiMywgMHgwZjdkOGQ4OCwgMHg3NTRlMWY1OCwgMHg2Y2VlODhkYiwgMHg3NTRjOTk0YSwKLQkweGE3NzY1ODY0LCAweGYzYTJiZDIyLCAweGRmYWEyMmY0LCAweGVmZjM5NDU3LCAweDAxZDQxYTNjLCAweDNhYjY4Nzk2LAotCTB4YmY4OTI3N2QsIDB4YjhhNmVlOTUsIDB4Y2Y4Mzc0ZmIsIDB4ZDEzZGUxOWIsIDB4ZTEyNDVkY2YsIDB4ZmNmNWZmNjQsCi0JMHg5NzIxNDVjZiwgMHg3MmQ3OTNjNiwgMHg5ZDdlMTMyNiwgMHg1MzY1ZGZiZSwgMHg0NWZkNzkzYywgMHhmY2Y2YWU5NSwKLQkweDljNTk1ZjkzLCAweDhkMzhkMWE5LCAweDc2ZDk1YjhkLCAweGUzMWQxYjY0LCAweGNmNGZmYzFhLCAweDRlZmUzMDc2LAotCTB4MmMzMTgxMjksIDB4YjViZDJjYmYsIDB4MGU5YTRiZWYsIDB4ZjI5NTMxYmQsIDB4MjcyM2JlZTksIDB4MzgzMWFhYTcsCi0JMHg3ZjQ0NmRlZiwgMHg0ZDdmNDQ5ZCwgMHg2YmY2MTI2MCwgMHhhZDI0YWQ2NiwgMHhiNzBlZjkxMSwgMHhiMWY3N2Y2NywKLQkweGU4NWYzYTFjLCAweGE1MmUzYjI1LCAweGUyOWRhY2Y2LCAweDNiYzc3ZDY0LCAweDc3OTQwOWY2LCAweDk4ZDZmMTc0LAotCTB4NjY1ODZhZWYsIDB4MmQxY2MwZTMsIDB4OTYzZDM3YmEsIDB4N2YxOTI3YmYsIDB4MWU3YzgzNTcsIDB4ZGRkMTY4ODAsCi0JMHg1YmZiNjI1MywgMHg0MGZkYWZmZSwgMHgwM2YzMGU3YSwgMHg2MDNmMzhkMSwgMHg3YmFiMDljOCwgMHg4Nzk5ZDU5ZCwKLQkweDllOWVlYzJkLCAweGJmNjI1YmVlLCAweGUxY2UyYWNmLCAweDE2MzY2OTdlLCAweDczYWY2NDNkLCAweDkwYjk5ZWU4LAotCTB4M2MzMzMzNTIsIDB4MjIxOWI0NDAsIDB4MDdkZDE3NjYsIDB4ZGRmZTY0NDcsIDB4ZTdlNjE4ZGEsIDB4NjdmNTg5NjcsCi0JMHhlODQ3MjM5YiwgMHhlMjM5Y2RiYiwgMHhmNDJlNzI3ZSwgMHhjM2I3NzFiMCwgMHhlMDNkNmIwMCwgMHgwOTViNTMzMCwKLQkweDU4NTZkNjZlLCAweDZjYTljYjIzLCAweDY1MDYwZDJmLCAweGM3MjQ3ZmQyLCAweGU1NmNiY2VjLCAweDRjOTBmMmJmLAotCTB4MzM3MmMzZGYsIDB4MWU0MzY1YzMsIDB4ZjE2M2RkMzIsIDB4ZjcxMmZmZWYsIDB4ZjFjMzk5NTMsIDB4ZmRjM2RiMzgsCi0JMHhmNDE2YTUwZiwgMHgwNDA1NjZkZCwgMHg2ZGY5ZmRkOSwgMHhlOGY3MTUxMCwgMHgwZjMxZjdjOSwgMHgzN2JhMzdlYiwKLQkweDk5ZDMwZGJiLCAweDAwOGYyNjE0LCAweGY2OWYzZjFiLCAweDRmZGIyNzIzLCAweDMzNTMzOTc0LCAweDdmMTA3MjJjLAotCTB4ZjRjNzI0NTIsIDB4ZWZhZGVhNTUsIDB4ZDgwNzNmYTMsIDB4MDMwZGY2YmMsIDB4MGY5NzhmN2QsIDB4YzNiYTNiZGYsCi0JMHhkZjQ3YmM2ZiwgMHgwZjFlNGE5OSwgMHg2ZGQ1MGVmYiwgMHgxZDUwOGI0ZCwgMHgxZGU4ZGE4MywgMHhlODA1NjNmMiwKLQkweDU2YWE3MzM3LCAweGZlMWNjY2U2LCAweGMwN2MxZjllLCAweGZjNDhjZmJlLCAweDdiYjY5ZjllLCAweGJiZjg2NzI1LAotCTB4ZDI3YmUzMmYsIDB4OWEzNTgxN2QsIDB4MmViMWYxMDksIDB4MTE5NmVhY2IsIDB4YmNkNjY1MWYsIDB4NjU3YmVjMTksCi0JMHhlMTI1NmZhNywgMHgzNmQ0ODJlYSwgMHgwZTYyNGQ4MSwgMHhhODc5NjRjYywgMHg3ODJhNTVjMCwgMHg5MmZmNjgyYSwKLQkweDAyN2RmOGM3LCAweGM1ZDE3ODYwLCAweDAzOWViN2Y5LCAweDUyMzhmN2VjLCAweDJiZjdmYzJkLCAweGFkMGUyMTc2LAotCTB4OGQ3ZTg2MmUsIDB4Mjc4NThmYmUsIDB4ZWY5NDZhMTYsIDB4ZGQ1YTc3NmUsIDB4ODg1OWNmOTQsIDB4N2U2MWQ0ZGYsCi0JMHgzYmZjYWM1YiwgMHg1ZTZiMTY4YSwgMHhmMWI4ZmM4MCwgMHgzY2EyNTg1ZCwgMHgzZDE2NTA1YiwgMHg1NmRkMGVjYywKLQkweGZjMjcyZjk2LCAweGM1OWI0N2ZlLCAweGNmOTIyZGY3LCAweDQ3MmJkM2I3LCAweGYyNWMxZTUwLCAweDJjYjlmOWFiLAotCTB4Y2M3OTQ3MmYsIDB4YmE2MWU0MzcsIDB4NzAyOGY3ZjEsIDB4ZmRhMWRmZmYsIDB4ODJmZWZlMjcsIDB4MDQ1NDZmYjEsCi0JMHhjODQzOGYwMywgMHg4MzgzOTBkMywgMHhjNzcxNDRmNCwgMHhmNDMyN2E4MywgMHg5ZjJjMzA1YywgMHgwZTVjMjk1ZCwKLQkweDUyNDE3ZDBhLCAweGM4ZDVkZWM4LCAweDZmZjcxMzVlLCAweDAxYmZlZmVjLCAweDhmMWEzZWMzLCAweDAwMDAzNDMwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHg3OTkzMzMxZSwKKwkweDBmMjBmMjY0LCAweDAwODRmMTAyLCAweDAyMTg0MmEyLCAweDI3MDg4Nzg0LCAweDAxYThjNDIxLCAweDU0YmM4MDgzLAorCTB4NDg0MzNjMjYsIDB4YmZhODExMzIsIDB4MjY3N2JkNmQsIDB4YjVhZDExMDQsIDB4YmMxYjY5NTEsIDB4MTQxMDFkZTgsCisJMHhkMWEwNzUxNSwgMHg0MGU4MWMwNiwgMHhkYmRhYjExNCwgMHhkNWE4ZjhhOCwgMHg0MDQ0NTA3NiwgMHg4YmNiYzI0OCwKKwkweGFmN2ZkNTJkLCAweGU2NDljZmI1LCAweGQ0NDg0YzljLCAweGZmZmZiZmY2LCAweGRiZjNmMWZkLCAweGQ5Y2ZiM2VjLAorCTB4ZGFmNWVkN2IsIDB4ZjZiZGFkNmIsIDB4OWEzMmMxMWUsIDB4ZTQyMjRlMjQsIDB4NjVhM2Y4NWIsIDB4ZjQ4NDI3ODQsCisJMHgwYWRiMmNlOSwgMHg2NDkxOGZkYSwgMHg4YjJmZmM0MiwgMHgxMDhlMzZmMiwgMHhmMDhlNzdlZSwgMHhiYzg0NTFhNCwKKwkweDk4MGI5OWI1LCAweGNmYmMzZDY5LCAweDlmYWQwODQ2LCAweDYwM2QzNGRlLCAweGZmNjQyMmNlLCAweGVmMDJiMzA4LAorCTB4OGY5YWRlOWYsIDB4YmQyZmM5ZjUsIDB4N2I2ODE0ZTcsIDB4MDBiYzRiZDUsIDB4MTNiZWQzNzUsIDB4MTA5ZDg4Y2UsCisJMHhhMWU1YjlhZiwgMHhmNmYzZTk2YiwgMHg4NWIyNzg5NywgMHg5M2ZjNDUwZSwgMHg5MDg1MjQ0ZCwgMHhmZWMyMTY2MywKKwkweDUyZmFiMjJlLCAweDZkNTZhYjJiLCAweGY0MDc3ZmRlLCAweDI2NjRkZTViLCAweGQ1NGZkYTU2LCAweGFlZDM2NWVlLAorCTB4ODc2NWY1YTUsIDB4NTRhZjAyNDQsIDB4ZmE5NWFiNmQsIDB4MDBmMmZhZDIsIDB4OWFmYTg0MTcsIDB4NzFjNjdmN2QsCisJMHg3OTQ4MGFkYSwgMHgyNzIxMjg3MCwgMHg1ZjIyMTY3ZCwgMHg5NmNlZWI0OSwgMHg3OWY0NTk5NCwgMHgxMTY3NjA0NSwKKwkweDgzYjE1ZmJjLCAweGZiZTg5YjczLCAweDdmZjY5YjE1LCAweDM0NTdmZDBjLCAweGRhNzkwMzhhLCAweDM2ZWQ4YWZmLAorCTB4NjM2MTBmMjIsIDB4MWU2MDRiN2YsIDB4YmMwMWE2NGIsIDB4YzQ4ODZmNTUsIDB4OTdlNWViNGMsIDB4NzAwNDQ5NTYsCisJMHhhNTRiZDQyNCwgMHg2MWZmMTgwZSwgMHgzOGMwNzY0OSwgMHgwZDFjNzA4NywgMHhkMGNmNTU5ZiwgMHhkNTc3ZTg3MSwKKwkweDk4NmU3MDJmLCAweDc4ODliNTVhLCAweGRkZDY5ZTAwLCAweGRhNGYzOWQ2LCAweGQyYjU1ZTYxLCAweGY3N2VmODYwLAorCTB4YjdiYzEyN2QsIDB4YjJmNjUwMmMsIDB4MzZmODA2NTUsIDB4ZTcwMDQ1NGIsIDB4ZDJkMmNkYTYsIDB4YWRmZDlkYTEsCisJMHgwZWE2ZmVkOCwgMHhkOTBkNjNhZSwgMHg3NmE4OWVhOSwgMHg0N2QyNzk2MywgMHhhY2VlNmM4OCwgMHgwNGEyMTA1NywKKwkweDQwNzcwMGVkLCAweGYzYWMzZTlhLCAweDgxMmU3OWY5LCAweDNmZDBkMTkwLCAweDY3NGI2NDRmLCAweGM4MzA5NGZmLAorCTB4ZThmN2ZlMDcsIDB4ZjYwZjgxM2YsIDB4YjJkYjAyM2EsIDB4ZDJiNWU5M2EsIDB4NzcyZGZmNDUsIDB4NGJhY2ViZDIsCisJMHg5ZWQwOWZhNSwgMHg1NmJmZGQxNywgMHhhMDc0MDQzZSwgMHg1Y2ZiZDRmMCwgMHg0YmUyM2U1OCwgMHg0ZjgzNzJjMywKKwkweGNhZmRiYzQ2LCAweDA2Y2IwNDM3LCAweDNmOWYxYjlmLCAweGU1OGIxYmU2LCAweGU1ODI5ZjI2LCAweDJjNjJiZTEzLAorCTB4N2M1MmJlMDMsIDB4MGU2ZjhiNmYsIDB4MWU3ZDViOTYsIDB4YWY5NGZlN2MsIDB4YmVlZGNiMWMsIDB4YWNmZTdjMWEsCisJMHg3NzJjNmVlZiwgMHhmY2Y4ZmNmOCwgMHgyYzdhZGYwNSwgMHgyYzdhYmU4MywgMHhiMDFhZjk3NywgMHhmMDA1ZjQ2YywKKwkweGRiN2Q5N2JkLCAweDA1ZjI2Y2IxLCAweDVmMWVmOWYxLCAweDVmMjE5NjEzLCAweDQwN2RjYjE4LCAweDdkODY1YTVmLAorCTB4ZjAxZTU4MmQsIDB4YWJlNTg4N2QsIDB4Nzc3ZTA4YmUsIDB4Y2IxYzc3ZDAsIDB4M2JiYzU1MDcsIDB4ODE3YzkwMjcsCisJMHgxMGE5Y2RlMiwgMHg5MjE3MTUxNywgMHg4YmU0YTI1OCwgMHhjYTU4OWViNCwgMHhmOWI3MjllYSwgMHg0ZjVhMjVmMywKKwkweGM1M2FkMGYxLCAweDcwY2FkZjYzLCAweGZiZDY5OWJlLCAweGNjZjZiMGQ2LCAweDg1ODE0ODdiLCAweGFjZmQzM2Q2LAorCTB4NGE4M2MwN2QsIDB4MDdkNjk1ODEsIDB4YzFmNmIzZDQsIDB4NzEwNWZjOWIsIDB4YzAzODNlYjQsIDB4MTFkZWFmZGEsCisJMHhmYWQxYjAyZSwgMHg5ZWQ2NDFkNSwgMHhlZDkzMjIxMywgMHg2NjEzOWViNCwgMHg5NGI3ZGNmNSwgMHhjZjVhMGVjOSwKKwkweGJjZjU2MTZkLCAweDlkOTNmZDhmLCAweDYxMTc5ZWI0LCAweDE1M2Y4ZmRmLCAweGViNGYxYzllLCAweGZiNTlkYmUzLAorCTB4ZDBhNDRiYzQsIDB4MDkxM2ViNDUsIDB4N2IwMmY1ODcsIDB4YWQwMjYxN2UsIDB4YmQ1OGI4MTcsIDB4MjA5OTVmYTgsCisJMHg3ZGJmZTBjNywgMHhhMTExNjQ2MiwgMHg3ZmRkYjBiYywgMHhkM2E0MjJiMywgMHg0NTU5MTRiYSwgMHhmZTlmMTRkYywKKwkweDhiMGY1ODM5LCAweGJmYjQzMTY0LCAweDg0NTMyZmU1LCAweDkxMmViNDcxLCAweDE3ZmVkMGQ1LCAweDFmYjYwNTdmLAorCTB4NmY2YzY1MTAsIDB4ZjZjMmFmZjcsIDB4ZWQ4YzkyMDMsIDB4YjA3YmRhYTYsIDB4NjBhOGFhZmUsIDB4YmRlZDcyN2IsCisJMHg5MmFiZmVmOCwgMHg2YjgzZWQ4MiwgMHg0MWZhYzIxZiwgMHg2M2VkODNkMSwgMHhlZjhkN2Y2YiwgMHhkODNjOTQxZiwKKwkweDgwZGFjOGZlLCAweGZmZWI0ODUyLCAweDAwYjY3OWMxLCAweDllNzFkNzVmLCAweGZjMGQ5MjcyLCAweGE1MmI0YzFhLAorCTB4MjM4ZWJhZmMsIDB4MWUzZTQwNzMsIDB4ZjJhNmE2MDAsIDB4NTI1ZDJlYjAsIDB4ZmJlZGJmNDAsIDB4M2M5M2RlNDcsCisJMHgzMjc2ZjJhNywgMHhmNTNlOTdkNCwgMHhmM2Y2MTY0MCwgMHhkMjIzZjYxYywgMHhmYjllZjg3ZSwgMHg1OGNkZjg5OSwKKwkweGJmMTMzZjVkLCAweDY5ZmFkNzI5LCAweGFjZWFmNzg0LCAweGRmNjdlYmJkLCAweGYwZjVlMzM3LCAweGY1YTE1MzdjLAorCTB4NzFmYjE3YjMsIDB4MTM1ZTZlZjQsIDB4ODdhMDlkYmYsIDB4YWQ0YWRiZTcsIDB4NGZkODgzOWYsIDB4MDllMGVmNDIsCisJMHhmZDc0NjM4YiwgMHg1YTY1YzU4NCwgMHg3ZWM0N2YzZiwgMHgxZTBlZjRmYSwgMHhlYmE3MWE0NSwgMHg2Yjk2OTE0NywKKwkweGZkODg3Y2ZkLCAweDlmYWVmN2E0LCAweDFlYWQ3NGIwLCAweGQ2ODU2OTFlLCAweGE3ZWMxMWNmLCAweGE1ZTZlZjdmLAorCTB4YzNkM2FmOTgsIDB4ZmFkMmFlNjMsIDB4Y2Y3NDg5MzksIDB4MDczZjVkZWEsIDB4MWNmYzdhMWMsIDB4ZTdlMDc0NzAsCisJMHhhODMzYzIxYywgMHg3MDJhZjM3NywgMHhlMDUzZjFlYSwgMHgyNWNmYzBlYywgMHhkZWFhZTdlYywgMHhhOWMwNzNmNSwKKwkweDY3MDFjZmM3LCAweDBlNDQ3ZTA3LCAweDc3YWMzNWU2LCAweGQ3ODgyYWYzLCAweGJlMjBhN2UzLCAweDBlNGUzZjAzLAorCTB4M2JkMTE5ZTAsIDB4YTNlZDVlNzgsIDB4N2RhYmNmYzcsIDB4OGE5M2YwM2EsIDB4MWRlZThjZjAsIDB4N2EyOTg1M2MsCisJMHg3NGE2MTRmYywgMHg3ODQ2NDdlMCwgMHg5ZmFlZjVjNiwgMHhmOGY0NTM1NywgMHgwM2E1MzU3OSwgMHgzZjYxNTczZiwKKwkweDVlNmVmNWQ3LCAweGZjN2FhOTg1LCAweGUwNzZhNjE0LCAweGM5ZmIxNzI3LCAweDc4NDc2Y2Y3LCAweGQxYzdlZDA4LAorCTB4ZmIwNzNmN2QsIDB4YjA3M2YxZWIsIDB4YWU3ZTA3N2YsIDB4ZDBhNjdlYzUsIDB4ZWU3YmIyN2UsIDB4OGY1MzI4YTcsCisJMHgwZWNjYTI5ZiwgMHg5ZTIyMTRmYywgMHgzZjVkZTg2ZiwgMHhmOGY1MzMwNywgMHg4MWQ5OTgzOSwgMHhjZmQ4YTk5ZiwKKwkweGFiY2RkZWQ0LCAweDdlM2QwYWU4LCAweGY4NjBhZThhLCAweGMwOGMyNDk5LCAweDlkYWU4Njc1LCAweDcyN2U5ZTZlLAorCTB4ODU3Y2JmN2QsIDB4MmVmM2VmYTMsIDB4NmU1ZGU3NTYsIDB4YWYwZjc2MDIsIDB4NDVhNDMzZDksIDB4ZjZmYmU5ZTEsCisJMHgwZmI5MDkxZCwgMHhhNmJiNjg5MCwgMHg4ZmMwNzZlMCwgMHhkMTc5NWE4MywgMHhkOGZjNGQ3NiwgMHg5NTFkOWQzOCwKKwkweGVhZWEyNGEwLCAweDc1N2RjNTQ5LCAweDFkMjlmN2VmLCAweDlkNGY2YmEwLCAweDNkYWViNTczLCAweGFiYWI5M2RkLAorCTB4ZDc4Zjk0NjcsIDB4YTZiZmRmYmQsIDB4ZTJiZjU3NDAsIDB4ZWY3NTFiZWUsIDB4ZDE2ZmY5NjcsIDB4Y2ZkN2IzZDUsCisJMHhhODNmYmRkMywgMHhmZGFlYTE3ZSwgMHg1ZDBhODZjYSwgMHg5NTgxNTVmYiwgMHhkYjM1ZmFiYSwgMHg3ZjdiYTI3ZiwKKwkweGFlOGQ3MDU4LCAweDAzZDM3ODdkLCAweGUxMTFmNmJhLCAweDkxZjU3NDQ3LCAweGJkZDMxZTg3LCAweDhiNjViYTNmLAorCTB4ODdjYzdkYWUsIDB4YzdkYWVhY2YsIDB4ZWFlOTc2NDUsIDB4YTNkZjFlZDcsIDB4ZjZiYWZmN2IsIDB4YTRmYWJhMDMsCisJMHhiZGQ3YmY4YiwgMHhkNWRlNGY5ZiwgMHgzZjk2ZGJkYiwgMHhlMjlmZGVlYiwgMHg3ZWQ3NGNmYSwgMHgwNjk3ZGE3ZCwKKwkweDNhZWVkNTNiLCAweGU3NWE4ZDc2LCAweGZhMDhhZTQxLCAweDA5NzRmZTI1LCAweDQzYjBkNWVkLCAweGQ3ZDRiYWMyLAorCTB4YzcxNGZjY2UsIDB4ZTUyOGY5NTIsIDB4MjJjMGU5MWYsIDB4OTJmOTE5MzksIDB4MjFiYjUxZmUsIDB4OTVmOTZmYmYsCisJMHhhZWZjZmExMSwgMHg1ZDJiOWVmMSwgMHg5MjVkZjlmNCwgMHg4NjJiYjg2NywgMHg4ZGY5NDM3ZCwgMHhjYTUwNjkyMywKKwkweGVkOGQyODI2LCAweGRmOGM4OWY3LCAweDBkMmUzMjBiLCAweGY3YmY0MjNlLCAweDI3MDdkYTlhLCAweDNlNzBmYWQwLAorCTB4ZjFmMjA4M2YsIDB4YmI0MjY3MzIsIDB4MzUyNzhlM2EsIDB4OTk5YzVlZjAsIDB4NWY3NGRmYTAsIDB4ZmU5M2RlNTYsCisJMHhkZjU4NzkyOCwgMHg1YzE5ZGE5ZiwgMHg0NWViYmY2NywgMHg1MWRhMWE0ZiwgMHhjMWY4OWZiNSwgMHg5ZmQ3NTljZSwKKwkweDIxMmZhYmNlLCAweDg0OWY3MGFmLCAweGY3ZTkwM2ZkLCAweDc5YTY5N2ZkLCAweDg5NjY3ZjY4LCAweGUzZDExOWZhLAorCTB4YTFmYzc0NGIsIDB4ZTQxODdlMzgsIDB4M2Y4YzIwZTEsIDB4ZTZmOGViYmEsIDB4ZTM3NTYzMDEsIDB4NzVjYjMyNWIsCisJMHgzYTI0NWJlMywgMHhkZjkwOGJiZSwgMHg4ZWFlN2VkNywgMHg5ZTMwODk0ZiwgMHhjZmI5Mzc5MCwgMHg2NjczN2M3MSwKKwkweDlmN2Y4ZTM5LCAweGU4YWVmZDQ0LCAweGM2M2FlM2YxLCAweGJmZjk4MTZmLCAweDA3ZmNkZGRmLCAweDNmY2ZkNzhjLAorCTB4N2YzZjQyYjMsIDB4YTNmZmNkODksIDB4ZjhlYWQzZGEsIDB4M2ZmZjM4NzEsIDB4ZmNkOWE3NzMsIDB4ZmNkODJiMzMsCisJMHg4ZWRmYWNjZCwgMHhmODFkOWRmMSwgMHhjN2Y4YzA4ZiwgMHg5Y2RmMTliYSwgMHhmZjNmNDEzZCwgMHhmM2Y1MmEyYiwKKwkweDRmZjFiMzM3LCAweGM3NTA1ZWQ2LCAweDVmZjhlM2I3LCAweGZjZDgxNzcyLCAweGYxYzRhOGFmLCAweDBkYzdiMzI1LAorCTB4YzQ2NTIzZmMsIDB4ZjhlODA0ZDUsIDB4N2M1NTFmYTQsIDB4NzQyZWMwYTksIDB4MjQ4NzI4MWMsIDB4NjQyMWExNTIsCisJMHhlMTAwMzcxYiwgMHhmMThlMmJiOCwgMHg5NDcxNTdkYiwgMHhmOTlmNTBkZiwgMHg1MDA5MzlmMSwgMHhmZDQ3OTljZCwKKwkweDU3ZDc5NTQ2LCAweDQwOTdjOGVjLCAweGY1M2I2MWVmLCAweGEwYTg5NmI3LCAweDkxZTI2ZTJlLCAweDczMDZjOWJmLAorCTB4Yjc4NTEwNjAsIDB4NDNmNzg5YjUsIDB4ZWI4NmYxN2QsIDB4YmQ1ZmEwMDIsIDB4MTRhMGIyNjYsIDB4MTg0ODEzYmUsCisJMHhjYmZlN2Y5ZSwgMHhlN2EyNWI2MSwgMHhkNDk3MmM2NSwgMHg1MTIyYzc4YiwgMHgwN2UxZDZmMiwgMHgzNTIxOTAxNiwKKwkweGMwMjliZTE0LCAweGViM2JhMzA0LCAweDBlM2Y1MjlmLCAweGE5OGZlMzFjLCAweGZmYTg0M2RmLCAweGM2Yzg5OWYzLAorCTB4ZjdmNTBiZmIsIDB4ZmVhMTFlYTAsIDB4YTRjZTNhMWUsIDB4ZGRhM2JmMTYsIDB4ZjBhMzRlMWQsIDB4N2ZmMGFhOTcsCisJMHhmZDc5MzAyYSwgMHhlMDJlMzZmNCwgMHhkNWY5ZjJhNywgMHg3ZmEwNDc4ZiwgMHgxYjZlZTBiZCwgMHgxYzI3N2E0NSwKKwkweDVkMjRmZTY1LCAweDBmY2JjZTlkLCAweDZkZGY2YTc0LCAweDEwZTE2YzBlLCAweDZiZTAzMmJmLCAweDIxMjY4YTNhLAorCTB4NTA2N2Q2OGIsIDB4ZmZiZTc3NWMsIDB4MDdhOWJlYzEsIDB4YjcyMTI3MzksIDB4YTU0YzQ1MTIsIDB4OWFiZWRmZWYsCisJMHhlM2EyZWZlYiwgMHhiOWNjNTJjZSwgMHgzMjUyMWQ2YywgMHgyNGQ3Mjg0YywgMHg5MDk2MzRjMywgMHg4ODQ3MWE1YiwKKwkweDVkMzIwN2I0LCAweDQ0OGQzZjExLCAweDU4YTMzYjhkLCAweGFhNTU5ZjVmLCAweDhhOGFiN2FmLCAweGI1NzBhMjY4LAorCTB4NjZjOGU3NGUsIDB4MzllY2VmZGEsIDB4OWM2ZDc2ZmEsIDB4NDY0NGE2ODEsIDB4NTJiYzc1NjcsIDB4ZmE3NDkzOGEsCisJMHhiOTk0MzY2OCwgMHg3NDg1ZDhmMCwgMHhkZjYyZTM5ZSwgMHgxNzc4ZjA2YSwgMHg3ZThjMjQ4OSwgMHgwMTBmYmZiYywKKwkweGYxOTNmYWJhLCAweDM2MmU3OWJkLCAweDczYmMyMzZmLCAweDRhNTI4YjQ0LCAweDhjYTczOWU3LCAweDFiN2YwMDBmLAorCTB4OWY2OGZmZTEsIDB4ZDBlNTMxNGQsIDB4MjJhM2ZkNzIsIDB4OGY5ZDc1MzEsIDB4MWViOWZlMTEsIDB4MjI4MjdjZTMsCisJMHhjYmYzZjNhYywgMHhkZjE5Y2Y4ZCwgMHhmZmU5NTMxYywgMHgyZDA3ZjAyOSwgMHhhMGZlMDBiZiwgMHhmOTU1MWZmMCwKKwkweDMyYWY1M2EzLCAweDNkOWFmMGZlLCAweGRhMWY4MGQzLCAweGU5MDRmMjM3LCAweGFkY2JmMmFhLCAweGE5MmNiZjJhLAorCTB4MjEwNWYzZDcsIDB4YjhlODExMWUsIDB4ZmI5NzBlNmMsIDB4Y2MxZjE0NDAsIDB4NTk2MGY5NTYsIDB4NmU2ZjllODMsCisJMHgzZDMxN2UyNywgMHg2ZWU2NWQwNiwgMHg5YTZmN2NkOCwgMHg5ZjdlNzVkYywgMHhmZjMzN2NhOCwgMHg5Zjg4ZmRjMSwKKwkweDc0NjRmM2FlLCAweGQzYTU0M2JhLCAweGY2ZmEzNWVkLCAweGRlYmE1NTViLCAweDRlNzVkMmFlLCAweDUxYWZjM2MzLAorCTB4YzllNjQxZjUsIDB4ZGRlNDExMDEsIDB4OWU4ZDUzZmIsIDB4M2QzZDFkMTEsIDB4NzA4ZDNkMmEsIDB4ZjNkMmExZGUsCisJMHg3YTMzMWY4ZSwgMHhhODhkZTExYSwgMHg5YzM0OGNmNCwgMHhhZTgwYzkxMywgMHg1YmUxMWFmMCwgMHhmOTk3Nzc3MCwKKwkweGNjYWI1YzYwLCAweGRlOWU5YjFmLCAweDQ3NTVmY2E2LCAweDA1NTc5ZWEzLCAweDM0NzU1ODZmLCAweDZjNTZjZTRhLAorCTB4MmZhYmFlOWYsIDB4YmRkNWNjMGYsIDB4NGNhMWFjYmYsIDB4N2VhNGJlZDcsIDB4ZDE3ZGFlYjksIDB4ZjU3NTNiZmEsCisJMHg3NThmZmYzMiwgMHhiYmI4MmZlZiwgMHg3YjdlZDc1NiwgMHhmNmJhZmRjZCwgMHhlYjBmZTVmOSwgMHgxYjNkNzNlYSwKKwkweDllY2ZlZjc1LCAweDNlZDc1OWIzLCAweDVkMTlmNGFiLCAweDlkZTI4Y2ZiLCAweDY1NzRmYWJhLCAweGQzN2RlZWI3LAorCTB4MDY2ZWFiYmUsIDB4M2RlYjdjZmUsIDB4NzEzZDgwOWUsIDB4YzYwNWZkYzEsIDB4NDViODJmMzMsIDB4ZDQ3M2JjMzcsCisJMHgxZjVmMjMyNywgMHhmMmMxMGRmMywgMHg3YzhkY2ZiOCwgMHgxNjM3ZDI3ZiwgMHg2NmE2ZDZjYiwgMHg3NDEzYWMzYiwKKwkweDEyNGE1YzVkLCAweGNkMzI2OTA4LCAweDBmZGY1ZGFiLCAweGViODI2OWQ2LCAweGE5ZTRjODY5LCAweGIzN2FkM2Y1LAorCTB4Mjg3OTQ2NDksIDB4Nzg0ODkwNjksIDB4MmMxYzIxMjQsIDB4ZWQxYzJhMzYsIDB4YTQ3YjU0N2MsIDB4YWEwNmY2ODcsCisJMHhiNmJhOTNmOCwgMHgzZjYyNDQ5NywgMHg3NjUyM2VmNywgMHg3NzY1ZjAwNSwgMHhjYmZkMDNlYiwgMHg0ZGE3YmIwMCwKKwkweGVkOGRlYmI1LCAweDhkMjkxYzk1LCAweDFhYzg0ZTdlLCAweDYyNmFjMzg0LCAweGM0YTU0Nzc2LCAweDU3NzJiZmU0LAorCTB4NDI3MTAxN2EsIDB4ZTZiODNjM2QsIDB4MjkwNWUzNzIsIDB4OWYwMmE3OTMsIDB4NzhlNGViNjQsIDB4M2EzNWMzNTksCisJMHg5YTIwNGVmZCwgMHg2ZGY4MDdkYywgMHg4YWY5ZWVhNCwgMHhiZWVhZDdlZCwgMHg0NzlmYjUzYiwgMHg1NzQxYWJiOCwKKwkweGIxNjU4MzhjLCAweGU4MTMzM2Y0LCAweGU2NzM3MGUxLCAweGE3MDA2MThjLCAweDRkZWIxNDcyLCAweDNjMmVkMDdkLAorCTB4NzU1ZTJiZTUsIDB4YWZkMDEwNzQsIDB4YmVlM2NiMTQsIDB4ZjMxZTU4MzksIDB4ZWEzY2IwNzksIDB4NTNmMmM3MmIsCisJMHgxMTk2MGQ1ZiwgMHhmZTU4ZGRkZiwgMHhmMmM3ZTdjNSwgMHgyYzdhZGY2MywgMHg2M2Q1ZjIzZiwgMHgwMWFmYTFmOSwKKwkweDAxN2RmN2NiLCAweGI2ZmIwZjJjLCAweDJmOGVmOTYzLCAweGFmOGI2NTg4LCAweDlmNTZjYjA5LCAweDc3MjZhNTgyLAorCTB4NzFkZGYxM2QsIDB4MDkzZTFkNzUsIDB4Y2Y4MzE3ZmMsIDB4ZWQ3ZjNhYTQsIDB4N2M5ZDA5ZmEsIDB4ODdkZmM3MTYsCisJMHhiOWUxYTY3YywgMHhmMmFjYzFhNCwgMHgxZjhlOGE0MywgMHg0Mzk3YzAxMiwgMHhiZGExZWIzZSwgMHhiMGY5NTQ0MSwKKwkweGI3NjNlZmJiLCAweDZiZmNiNzdiLCAweDBmZWE2ZGY4LCAweDdlNGViN2U0LCAweDUzZjAzMGNhLCAweDM0ZmM0Zjc2LAorCTB4YTdlMjhmOGMsIDB4YjMxNzI2YTksIDB4ZmE3ZTU0N2IsIDB4ODYyM2NjMTksIDB4OGMwZjMxNWYsIDB4ZjY1MTNlOTAsCisJMHg4MjZmOTI5YSwgMHhiYWE1NmM3NSwgMHg2MDFmNDIwZiwgMHg3NjNhYWNmZCwgMHgwNWI3N2QxZCwgMHgxMGMwYmFlZCwKKwkweDBlY2UzNzU4LCAweGQ4NjBkYmY5LCAweDIxZmIzODQ3LCAweGY3NTY3ZTI1LCAweDQ5ZjIzM2YzLCAweGQwNTc3OGY3LAorCTB4YTAxYTU5YmYsIDB4ZGFlYTRmNDQsIDB4Nzg2MzhkNmUsIDB4MzE0ODlhYjUsIDB4ZmRkYWViYTEsIDB4MmY3MjllODMsCisJMHg4MTc1OGExYywgMHgwMWY3YzIyNCwgMHg4YzQ3NzRmNywgMHgwY2FkYTk3ZSwgMHhhZjA5ZWRmOCwgMHg3MmFmOGU3NSwKKwkweDhmNjNiZmEwLCAweGNhMGYzZGZkLCAweDJmNjYyNmE5LCAweDY4ZjMzNWM3LCAweDkzZjA5M2I3LCAweGM3NmZjMDZlLAorCTB4YTc3NjY0YmEsIDB4N2RiZGJjNDEsIDB4YmI0MmU0OTAsIDB4ZTNkNjRjODEsIDB4YzNhMDVmY2YsIDB4NDcxNGZkZGYsCisJMHhkNmVlYjgyZCwgMHgwNmZlMjFhNywgMHhiZDM4MzU3ZSwgMHg0OWViZjgxNywgMHhjZjg0ZjdiZiwgMHg3ZmVmMzA4NSwKKwkweGQyN2IzZTAxLCAweDQ1ZTkzZDhmLCAweDM0MmZjOGEyLCAweGVkYjdmOWQxLCAweDgwZmI5NjFiLCAweDFlNWVlMzBjLAorCTB4OWFmZWRhZGYsIDB4N2U1ZjllMTEsIDB4NGI2ZTNlNDcsIDB4MjViOGY4ZDEsIDB4YTQxZjgwOTMsIDB4YzZkOWNiY2EsCisJMHgyZTgxZTMyYiwgMHg0MGY0ZmQxZCwgMHg5Zjc3ZWU0ZiwgMHg3ZWZmODI2NCwgMHhkZmRmNGIzYSwgMHhlMmZlYzY3ZCwKKwkweGE3MGRjMjI1LCAweDg5MjQzYWUzLCAweDkyYmY1M2M0LCAweGQxZTM2Y2Y3LCAweGZjNDc3MTlmLCAweDY3ZDgzNzEwLAorCTB4ZTBjOWQ3NzMsIDB4YWZmYzllMzcsIDB4ZWIzZDBjYjAsIDB4MGY2NzBiZTMsIDB4M2YwNGU5M2QsIDB4NWYxYTY1NmMsCisJMHgxZDA2MzQ3MywgMHg5ODJhYjJiNSwgMHhmNjhmNjM1NSwgMHhmNWY0OWE1NywgMHg3MTVjZjViMywgMHhjNzI1ZTcxMCwKKwkweGViMDYxY2NmLCAweGE4ZTZhYjhjLCAweDBkM2Y3YTA4LCAweDk1OWZhZDRiLCAweDczOGUxMjY5LCAweDNjNzY3YjcyLAorCTB4NGMwMmZmZjMsIDB4NDA0OGVjOWYsIDB4NjdkMjczN2QsIDB4ZDlmZmY3YzEsIDB4OGZkNzc0ZjAsIDB4OGQyMTBmMDYsCisJMHhlODBiMzNlNCwgMHhkZDk2ZGE3MywgMHhjYWRkZmJmZCwgMHg4MjVlNzA4MywgMHg4OTA5MjlmOCwgMHg2OWJmODE1ZiwKKwkweDNiN2ZmZmE1LCAweGIwMTVmYTAwLCAweDBkZWJmNWFlLCAweDcwZjM3ZWYyLCAweDM3NDNiZTc4LCAweGQ2NGVmZDFlLAorCTB4YmJlMThjZjYsIDB4MjA0ZWU1ZWUsIDB4YTdiZTM0YzcsIDB4YmFhYmZiZjQsIDB4YmI2MmJkYmYsIDB4Yzc2ZjQ2YjUsCisJMHhkZWVhZTgyNiwgMHg5ZDFhZjRhNiwgMHgwMGZmMGI1ZCwgMHgxMzg2YmRjMywgMHg1NGFiMDk2MCwgMHhiMDRkYjBkOSwKKwkweGRhN2UwN2FmLCAweGYwNDljMTAzLCAweDVlZjYzODVmLCAweDc5MjIyNTk1LCAweDE2OTcxNDY0LCAweDYzODVkM2UwLAorCTB4Njc5N2ZlMzUsIDB4YTllYTk5ZmYsIDB4MDQ4YTZmMTMsIDB4YTI1YzhjZTQsIDB4YWVhOWU1NTAsIDB4ODk5YmYyMjAsCisJMHg5MTdkNjg5OCwgMHhjNmMyZjZmYSwgMHg2ZWIwMjUxNSwgMHgyNmY5Nzg5ZCwgMHg5MzE2NDNmNCwgMHhjN2Y4Mjc1MiwKKwkweDBmM2VhNGU1LCAweDg5YTdiNWUyLCAweGYzZTQxOGE5LCAweDM5Yzc3OTM0LCAweGFkMWU0YTMyLCAweDJlOWQ4NDgyLAorCTB4ZTNiN2FmNWEsIDB4YWJhZjdmYTksIDB4ZDdkMDZiMmYsIDB4NTI1YjkyOTcsIDB4ZTk3ZWRmNjAsIDB4MzgwNDkxMDYsCisJMHhmNmZhMWJkMCwgMHhmNjE3NzlhZiwgMHhhY2Q0OGNiYiwgMHg1N2ZiNzU4MywgMHhhMTZiYmM2YSwgMHg1NDE5MDg4YiwKKwkweGY2ZmQ1NTZmLCAweDBhMzJiY2YxLCAweDcxNjA0Yjg3LCAweDdhMWY2ZDE2LCAweDdmZjMyMjc5LCAweDI0MDY2NjJhLAorCTB4NTlmZmJlODUsIDB4YTk1YmM4ZTMsIDB4MDdkZmEyMDYsIDB4YmM3ZWMxZDYsIDB4NmY3MTNhN2YsIDB4ZjdlOTVkMjMsCisJMHhjMjM3ZTE1ZCwgMHg1ZDAzZDlhYiwgMHgzODU1YzNmNiwgMHg0YTczYjc5MiwgMHhjYjFlODYyMCwgMHg2NzI2MzgxNCwKKwkweDEwMmJiZWFhLCAweGM3YjhiYTVjLCAweDdiZmQ0MzM0LCAweGQxMzI1M2YzLCAweGRlMWVkM2YxLCAweDY2OGMyNzkzLAorCTB4YzBmYzAzZmMsIDB4ZTc5MmVkMDksIDB4ZDY5ZmY0ODcsIDB4N2Y4MmZmYTUsIDB4NjhmZGZmNmEsIDB4ZmViYTc5ZmYsCisJMHhmYjUzZmRhNywgMHhmZTA1ZDgxZiwgMHhhZmZhYjE3OSwgMHgyZmYzZWRmYSwgMHhhOTNlYTlmYiwgMHg0ZTk3ZjE3OCwKKwkweDEzYzlkNzQyLCAweDliOGE3ZDQyLCAweGRiNzJiNWQyLCAweDk2ODU0ZWJkLCAweDEzYmYwNWM3LCAweDgwNDRmNWY4LAorCTB4ZWY0NThlMmYsIDB4MTU0ZTA1ODcsIDB4NDFjZWM1NDIsIDB4NDlmZTBkZGMsIDB4ZWNmOTNmZmIsIDB4ZjExZTMwY2YsCisJMHg4NWQxMzZkNSwgMHhlNmVkYjRmMSwgMHg2MWNhOTliMCwgMHgxMmYyZTM3NSwgMHgyM2Y1ODM5MiwgMHgxOWRmN2VhYywKKwkweDdhNGRlYTFlLCAweGZhNzhhYmZlLCAweDFmOTAyOTk3LCAweDhkNDUzOTQyLCAweDllZDE4NTJmLCAweDc5ZmFkZWFkLAorCTB4NWU0ZmFjMTEsIDB4NjQ3MjhlZDIsIDB4YmZjNjBlZmMsIDB4YWZmYTg4OTgsIDB4ZGFlZjhhNGMsIDB4MzhjNGUxNGUsCisJMHg4YmM1NTc4MSwgMHg2NzY3ZjFiNywgMHgzNzk0Mjc3OCwgMHg4MmZhMDE3YywgMHhjN2U4MjI3YSwgMHg1NzJiYmYxYiwKKwkweDgyMzVkNGVkLCAweDhkOThmOTIzLCAweDE5MGM3YmZlLCAweGMzNTE3YTAzLCAweDNiMzAwOTBiLCAweDVmOTllZWI1LAorCTB4NzBhMTFjZTcsIDB4YTZmYWRhOWQsIDB4OTdjMjhiOTMsIDB4ODM2NzRmMjYsIDB4OGY3M2ZlOGIsIDB4NmRkZWJkZGMsCisJMHg2ZDE2ZjJhNSwgMHg5NmViNjkwZiwgMHhkN2RhYTRkYywgMHg4YTU2NTYyMSwgMHhmM2U0Mjc2MSwgMHhkZDE2NmU1NCwKKwkweGYyYjhmYTdlLCAweDdhOWYyN2Y5LCAweDdmOTllMjBjLCAweGQxMDdiYjMyLCAweGZmM2M1N2ZlLCAweDY5ZTNmYmRhLAorCTB4MzE0ZWM1N2QsIDB4YzM0ZDg0YjksIDB4ZDI3NGE1Y2UsIDB4YmZmZjRiYzcsIDB4MWU5M2I3M2IsIDB4NGQ3OWJmMTUsCisJMHhlN2IxODc5MiwgMHhkMjc2MjRmNywgMHhmZGNlYzU2NSwgMHgxNWQ2MTkxMiwgMHhmYjgzOTMxZiwgMHgwNjNkODhhNSwKKwkweDhhNDc4MjdkLCAweDdiYTg1ZWMwLCAweDg4MjViZmU2LCAweGM3ZDg5ZTMzLCAweDE4YWNkNDkxLCAweDFhZmNkY2Y4LAorCTB4Mjc4MDAzZGEsIDB4YWY0YWE3YTQsIDB4ZGUxOWZhMGUsIDB4ODBiYTUyZjcsIDB4Y2JkMjM2ZGUsIDB4NTUyMmRlZjgsCisJMHg5MGJmNDBiZiwgMHhmYmY5NDE2NywgMHgwNzkwM2Q4NSwgMHgwZGQ5OTFmNSwgMHg2MTdmMjg3OCwgMHhmM2U2MTM5NSwKKwkweGY4YzM1MDg1LCAweDUzN2JmMWZjLCAweDhiOTU5ZjQwLCAweDk2MTcxNGZlLCAweDEzZjk3OWVjLCAweDViZmU0MjNmLAorCTB4NTI4ZmY2ZjYsIDB4OTQ0NGJlMzAsIDB4NDVhZTEzNzQsIDB4ZTc5ODc0ZmUsIDB4NzBiMzRkOTIsIDB4MDc4OTRiOWUsCisJMHg3MWZjYjBmOSwgMHhjYjQwMzRiZSwgMHhkZTI5MDIwYiwgMHhhYzRlNDMxOSwgMHgyZjkzOTMyMiwgMHhkMmUyNTBiNiwKKwkweGZlMDE3ZTc5LCAweDc3ZWZlODI0LCAweGI0MzZjMGY4LCAweGEwMjRlZmJiLCAweGNlYTQ3ZTBmLCAweDU4MGM1YTg1LAorCTB4ZjQ2MTYwYmYsIDB4MmViYWFiZmEsIDB4YTMzZWIwMTAsIDB4N2RlYjc3ZjksIDB4OTNhNzQwMmQsIDB4ZDg1NDk1ZmQsCisJMHhjMTEyZjE3NywgMHhmYjgzZTJhZiwgMHhiZmNiZjY5NiwgMHhkMTk1MjUzZCwgMHg5ZTQyYzg4OSwgMHhmNzVkMWRmYSwKKwkweDc4NzNjMzI3LCAweGFjNTQ0NWJmLCAweGM4ZWZiYTM5LCAweGUzOWQ1OWI3LCAweGE3Yzc1NmFmLCAweDdhYzFjNzcwLAorCTB4NmM0YTQ1ZmQsIDB4ZDQ0ZjM1ZmIsIDB4Yjc1ZDAwZjQsIDB4NGEyY2Y4YTMsIDB4NmZmYzk5ZGUsIDB4YmJjOTlmYmQsCisJMHhlOTgxZmYyNiwgMHhmZTdlZDBjNSwgMHhmODIzOTMzMCwgMHgwYTQzZDYwZSwgMHhkYjE1Mzg1NywgMHg1MGU0Y2ZmNywKKwkweDNhM2Y1MDNmLCAweDE1NmY5Yzk2LCAweGI3ZDczOTU1LCAweGMyODVmOTFiLCAweDUxZjE3MDJmLCAweDI0ZTMwMzdjLAorCTB4ZGY3MDFkMjIsIDB4ZmEwNmU5NjUsIDB4ZjUxZTk0N2QsIDB4YWVjZWI4YzIsIDB4YmM3MjZhZmQsIDB4NDU1YmYzNGMsCisJMHg5YjIwM2ViZCwgMHhkZWU4MWU5OCwgMHg5ZTIzZjJhZSwgMHg1M2MwYzUyYSwgMHg1MmZjODE4ZiwgMHgyMGNiZjU3OSwKKwkweGNjMjk2MmJmLCAweGNkMWRjYmZmLCAweDcyYTNjZmVmLCAweDkzNTA2NWZiLCAweDM1NWViZDViLCAweGFlZjk2ZGNhLAorCTB4ZGM5NjI0ZDEsIDB4OTM3NzY5N2UsIDB4OWY0YjcyOTgsIDB4N2I1Yjk0YzcsIDB4ZmZmOWY5MDQsIDB4ZjBkNTVlYjQsCisJMHg3OGYwMGMzOCwgMHgzNTFlMjc0ZCwgMHgzZTFkZDkzZCwgMHg5MGYyN2E4ZCwgMHg4ZDVlMjMyMCwgMHgxZGZlOTI3YSwKKwkweGY5NWQ3OTI2LCAweDhkNDNlMzUxLCAweGFiOWUyYWZmLCAweDUxZjQwMmJhLCAweDdjNmE5ZjA3LCAweDFhYTdjMWQ4LAorCTB4ZWY4OTc2MWYsIDB4NmM2OGYwZWEsIDB4MzRmYjAwYmYsIDB4OTZmOWFlMTQsIDB4NTI4ZWQzOGQsIDB4NGVkMmQyNTcsCisJMHg3ZjI2ZGY3MCwgMHhhYWZiOGYyNiwgMHhlNTg0ZjM5NiwgMHhmMzExMTA4MSwgMHhkNTMwM2Y0MywgMHg3NTNiMDY4YywKKwkweDNkNmZkZmUyLCAweDc3ODUxNzdkLCAweDJjOGJmMTNlLCAweDQ0NWVhMDJmLCAweGI3ZDJmZmJiLCAweGYzYTA0ZWRmLAorCTB4NzllMmE3OTksIDB4NTRmYjQ1M2UsIDB4MDIzOTk3NGEsIDB4NzBhMzhlMTcsIDB4M2Y4ODE1Y2UsIDB4YjdlMjExM2UsCisJMHgwYTM0ZjkxYywgMHhmYWU1Zjk4ZSwgMHg0YzRkZmMzYSwgMHhhN2E3ZWNlOSwgMHg5ZmFiYmZmNywgMHhiN2NiN2RmMiwKKwkweDFkM2Y1ZDI5LCAweDUwYmJjODQ0LCAweDEwYmMzODhhLCAweDgxZDM1N2NkLCAweGRlN2YxNGFlLCAweDAwNjA1YzUxLAorCTB4NTA4OGE5ZWEsIDB4YmQ3N2U1MWEsIDB4ZjNmYjMyMjAsIDB4YTMxOWMyZWQsIDB4OWZjOWJlYzEsIDB4ZjE5ZTJjM2QsCisJMHg3YmY0NjBmYiwgMHgzYjNlYWFiZCwgMHg0MWUzOTdlYiwgMHg2NTBkOWZjZiwgMHhmNjdiN2ZhMywgMHhhYzQ3MjJkMCwKKwkweDk1NjZkMGJjLCAweGY3NTM1ZWNmLCAweDVjZWNkYTVkLCAweGJmZjk0ZjNkLCAweDdkYTNiNDhkLCAweGM5NWJiN2UzLAorCTB4ODJmYjE4YjYsIDB4NWY0ZDQ1MWIsIDB4N2ZhMzc0YWIsIDB4OGU3ZjFkM2MsIDB4ZTk3Mzg3Y2EsIDB4NTFiOWYxYTcsCisJMHhmNTM5OWI3NCwgMHg0YWVjZTA4NCwgMHgzNGZiZjgwNywgMHhhMWZiMGZjYSwgMHgwNmJlMDVmOCwgMHgyMzViMzZmYywKKwkweGUyMzFhNTQ1LCAweGY4YTljZjc5LCAweDZiZTA3ODliLCAweDBjMmRjZmNjLCAweGM3ODAwYmU1LCAweDhiYWYzYjQyLAorCTB4YzlhOTNjODMsIDB4MTQzMjUwZWIsIDB4NjA3ODlhZTAsIDB4NTM0N2NmZjksIDB4ZTIxZWY2M2UsIDB4ZWI4ZjkwZGQsCisJMHgzYzkxOWQwZCwgMHgyMzYxZmMzMSwgMHhiMDdmYTEzZSwgMHgyZTg4OGYzMywgMHg2MjdiZDdjNCwgMHhlYmMwMTJlOSwKKwkweDA0YWNiMzdiLCAweDk1ZGYzNWY2LCAweGUwYjE1NWRjLCAweGY1YjMzMzJjLCAweGJkMjkyZTY2LCAweGJmZmI4YTMwLAorCTB4YjNmOWJmMGYsIDB4OGEwMmUxMWQsIDB4OTY3NmIzOGYsIDB4ZmY5NWRkZjcsIDB4NzU5ZmRjOTgsIDB4MGU1YTgxNzEsCisJMHhmNTY3OTBmOCwgMHg3MTAwMmU2NCwgMHhmOWUyMjJiNCwgMHhlNTBlMDRmOSwgMHhmZWI0NTI3ZCwgMHhmZTlhNmZjYSwKKwkweDU0ZjVlNDNjLCAweDg5OTczODg3LCAweDExMGI1N2I2LCAweGRiZDhmODA5LCAweGZiMDA1M2I0LCAweDI4OTkyNmZkLAorCTB4NmExMDhmMTgsIDB4OGE4Y2NkODYsIDB4MDUxMTFkN2IsIDB4ZGZmMzU3YzQsIDB4ZjgwZWRkZTYsIDB4NGNkMzM3M2QsCisJMHhlODY1MmUwMCwgMHgwMWQ4MjcxOSwgMHg1MTIzNDJlNywgMHhkNzliYmEwZSwgMHg1YTY0N2MxZiwgMHgxMGZkMDhhMSwKKwkweDNmMjMwZmU0LCAweDc0ZGIyNTE0LCAweDQ5OTM1OWY1LCAweGRiYTUzNzNmLCAweDk1NjQ3MzQ0LCAweGVhZmQwNjNiLAorCTB4YmQ2N2M2MjQsIDB4ZmY5NjZmZDYsIDB4MDRkYmY0Y2YsIDB4NWYxOGRmYWEsIDB4ZWRmYWQxOGIsIDB4N2RmMTg5MjYsCisJMHg4ZDRiN2U5NCwgMHhkNjU2ZGZhNSwgMHgxN2MwYTljYSwgMHhhNzY2ZjcyYiwgMHhiZTU3NWQwMiwgMHgyYzRmYTRiMSwKKwkweDhmYmFmNmZkLCAweGE4NmZmN2Y5LCAweGZkNmRlNjc5LCAweDFlMWI3ZWE4LCAweDUxZmFkZmE1LCAweGFlMjMxNmZkLAorCTB4YTVlYTVhM2IsIDB4Y2ZmY2IzN2UsIDB4YTBlYmRmYzgsIDB4YjdjYzYyZGYsIDB4YTY5ZmM1NTgsIDB4YjU0MzhhZGYsCisJMHhmYjhhZGZhOCwgMHhhOTdjYmFmMSwgMHhmYTRmNTI0OSwgMHhiMzk3ZWNhZCwgMHg2ZGJhMmViMCwgMHhmMDA3ZjgzMSwKKwkweDBkZWRmYTBhLCAweDM4YzFjZjU1LCAweDVkZmVlN2EwLCAweDNkMjc3ZDcyLCAweDNkNWJkNTU3LCAweDY3ODQzZmY3LAorCTB4ZWNhZGNmNGQsIDB4ZDMzZGExY2YsIDB4OWU5OTBmOTUsIDB4ZjRjNTk5NWIsIDB4NGNiZGNhZGMsIDB4YzQxY2FkY2YsCisJMHhiZjUxOWNmNCwgMHg2ZmQxNzQxNSwgMHgyMWVhZmJlYywgMHgyM2Y0N2JmNCwgMHgxYjdkN2ViMywgMHgyMzk5MmY2ZCwKKwkweGZkZjQyZGJhLCAweDlmM2I1OTEyLCAweDVhM2EzMzUxLCAweGQ0YmJmZGRmLCAweDlmNzNiZThkLCAweDNkMmU3M2MxLAorCTB4ODIzZmJiZTksIDB4N2E4NDFiYmUsIDB4OTFjODIwNmMsIDB4MWM2ZTNmOTEsIDB4ZDNlNWQzNjgsIDB4YjFmNWY3YmQsCisJMHg3OTA0NWVlNywgMHhmZThmMDNmOSwgMHhlNjI2MDdmNywgMHhmYWZiZWQyNywgMHhiYjkwNDhkOCwgMHhhYTFlMDBmNywKKwkweGY5NTE5ZWVmLCAweDQ3ZTdkNWFmLCAweDI4NzkzYTdkLCAweDdiYWFmNzkzLCAweDFiYWFmZTE4LCAweGQ1ZGYzNjM5LAorCTB4NzU4NjQwN2MsIDB4ZDExNzZmZTAsIDB4MmY3ZGJlOGYsIDB4OWI2N2EzZjMsIDB4YzBkOGZhNWIsIDB4MjI1ZmZmY2YsCisJMHgyYmZkMjVjYSwgMHg4N2UyOGIyOSwgMHgzMDJiMTczOSwgMHhjZTJiYjllZSwgMHhjY2ZjMDViOSwgMHg4MGIxMDIzOSwKKwkweGQwZTBiYjFkLCAweDdlYzAyNzhkLCAweDNkNzE3MDVkLCAweGUwMGJiZGRhLCAweGM4ZTkyMjc5LCAweGExZGI5OGZiLAorCTB4ZWJmNmY1MjcsIDB4YWY5ZGE2YmMsIDB4ZjlhZTkwNjUsIDB4OGNjZDEzMTAsIDB4NzE1NzEzMmUsIDB4NWQ1OWNkODEsCisJMHg1ZGE4MjNmMywgMHhjNjJkZjk4NiwgMHhhYmRmODkzYywgMHg0N2NkOWZmMywgMHg4ZmU0NWYxMCwgMHhlNWY4Y2M3YywKKwkweDcyNzg4ZGVmLCAweGFkNTRiYzMzLCAweGFhNzhmNWU2LCAweDg5ZTI2MmUxLCAweDJjYTRiYTUyLCAweGI3MmYxM2E1LAorCTB4OTc1OTE0YmYsIDB4MzljYmVkMDEsIDB4ZjM4Y2I3ZjQsIDB4OWM2NmYwZDYsIDB4Y2Q0Nzg2YmYsIDB4YmVhMDU5YmYsCisJMHgyNDc0M2YzZiwgMHg4Njg4OWU2NiwgMHgyMmY5MmVlNywgMHhmODBkZGUxYSwgMHgzM2QzNGI3OCwgMHgyMDYxOTBkNywKKwkweDNjOTgxZjk3LCAweDdjMGQxZjNmLCAweDE3OGE3YmY0LCAweDczYWRlNzBhLCAweDJiY2VlOTA3LCAweDY1ZTJhM2JkLAorCTB4NjE0OGU3YWEsIDB4MjQ3ODBjOGEsIDB4ZjM2N2MwMzUsIDB4OTZiZTc3Y2EsIDB4YjM3N2U3NDIsIDB4MjEwYjk1OTIsCisJMHg5MzdmNTlmNSwgMHg2ODhmMTAzYywgMHgxZWEzYjZiNiwgMHg5NDcwZjhkNCwgMHg1OTg1Yzk5OSwgMHhmNWVmMmJkNSwKKwkweDdhZTIxNTc1LCAweDUwYjljNGQzLCAweDNkMDZjMmJlLCAweDc5OTllNmE3LCAweGQ3ZjI2MWVmLCAweGJhZjdmZGNjLAorCTB4Njc4ODUxOGMsIDB4OTE0ODJlNTgsIDB4NWQwMTVlYjYsIDB4ODZhNzNmZTgsIDB4NDBiYzVkMTgsIDB4NjljZmZhMTcsCisJMHhlMDIwZmRhNCwgMHg3Mzk5M2FiZCwgMHhhNmZkZTE4NywgMHgzZjAyZjc5ZCwgMHhjZmE1NmViZCwgMHgzOWNiY2U0MSwKKwkweDBlODYxNmY3LCAweDY1Y2E3YTdiLCAweGM1ODg1OGY5LCAweGM4Y2MxOGM3LCAweDE3M2Y1Y2ViLCAweDVkODk3YmMwLAorCTB4ZTY4OTkzZWQsIDB4OGUwMGY3OTYsIDB4MzY2ZTU0ODksIDB4ZmQwMGMzYzMsIDB4NDZmZThhMmYsIDB4MDdjOGM1ZmIsCisJMHg3NTAzZTUzZCwgMHgyYWI5ZWZjNywgMHgzYTA3NWY5ZSwgMHhlZGRmMDFkOCwgMHhkZTQzZDgxMiwgMHhiNDdmNWIzMCwKKwkweDE3MjBhZjc2LCAweDNhMzRkZTIyLCAweDY1ZjVkMTM0LCAweDI5ODNhMzE0LCAweGQ2NmY5ZTA2LCAweGJkOWUyYWVhLAorCTB4ZWY4NDRlMjEsIDB4NmZmZWEwNmYsIDB4N2ViYjA3MTIsIDB4ZjhkNDFmNWYsIDB4YzU3NzJjZGQsIDB4ZDIxNWM0MTMsCisJMHhlODA2ZjRhMywgMHhjZDdkZThiNywgMHgxMWI3YTZlYSwgMHhhNmFlMzc1ZiwgMHgxNWRjOTllNiwgMHg0MDdkMWE1ZiwKKwkweDZmMGU1ZTBmLCAweGQzNGZjYWRkLCAweDYxNzk5ODkxLCAweDQ2N2U1NWRmLCAweGIzZjJmNTk5LCAweGU2ZmVkYWNmLAorCTB4ZWRhYjg4NzAsIDB4OTBhZjUwZTUsIDB4N2UyZTgyNTAsIDB4ZWNjY2QzMzAsIDB4MDdhYjY2OTYsIDB4MGRmZGJjZjksCisJMHhlZTQ1YmRkMSwgMHhhOGE2N2ZhYSwgMHgyNTdmMDE3NCwgMHg2NGUyN2NmYSwgMHg0ZGU4MDg5OCwgMHhhNjdjOTU5NywKKwkweGUzMDA3YmNkLCAweGUwZjVlOGI3LCAweGU5MDdhYjc1LCAweDMzZmY1ZGQ3LCAweGVkZmVjY2NjLCAweGVhZDMxZWNlLAorCTB4OTA3OGMzZDcsIDB4YzdlYjI4ZDcsIDB4NWE0N2FlMzMsIDB4NzlhN2E5NWMsIDB4YmY3MWQ0NzksIDB4NzFiNGJjZWYsCisJMHg4NGJlZWJiZSwgMHgzYzYwYjQ5NywgMHhkODlmZGI0ZSwgMHg4OTc2N2JjMywgMHg3MzE2M2Y2MCwgMHgwYTEwN2RiYSwKKwkweGZlNmZlZTM5LCAweDU5YmZmYTEzLCAweGZmN2RkZDFhLCAweDUzMGEzZjEwLCAweGUzYmViZjNjLCAweDlmNjM4YzQ5LAorCTB4MzRjOGY2N2UsIDB4YWYxNTlmOTAsIDB4ZTU0MmM0ZjAsIDB4ODM4Nzc1YWYsIDB4ODg5ZTU5ODQsIDB4NDU0Mjc2MDQsCisJMHg1ZGZiOGYyMywgMHhjZGU3MDg0NCwgMHhhODMzYjI4OCwgMHhmMWYwYzMyNywgMHg1ZWY1MDNhMiwgMHhhMDczMmVjNSwKKwkweGYxNWY3ZTg0LCAweDEwMzk2N2YyLCAweGMzNWQ2YjdmLCAweDU5ZmY5ZmY0LCAweDkxZmQxZjk1LCAweGE4MDdjODFjLAorCTB4YmNmZWQ4MTAsIDB4YTg4ZjNlOTEsIDB4Yjc2YTc5ZmMsIDB4NmZlODBlNmQsIDB4YzczYjNiNmUsIDB4MmQ5YzExNWIsCisJMHgwY2UyYTM5YSwgMHgxNjQ1OWJmNywgMHhjMzZkZGVlNywgMHgzM2ZmNmMzYywgMHgwMzMxZTYxYywgMHg0OGU3ZDE3YywKKwkweDUzZDBmY2I1LCAweDVjYmQzMGNmLCAweGUwMDYyNGQxLCAweGY2YzU3MDNjLCAweDE3MTBhZDlkLCAweDhjZDBmOGFmLAorCTB4ZmI3N2FiZjYsIDB4ZDNlYzA5MTksIDB4Y2YzZTJmYzksIDB4ZjEzNzFiY2UsIDB4OTc2ODc4YmEsIDB4M2U3NmU0MzgsCisJMHg1OWY4ODY2YywgMHgwMWVhMTU2MywgMHhmNTgyM2Y1YSwgMHhmYmY3MWFhMCwgMHgxNWIyNzE4ZSwgMHhkOTdkZWUyZiwKKwkweGUyYjg1MTRmLCAweGYxM2I0ZjM3LCAweDM2Y2I3MDVjLCAweGI3MjNjNjI3LCAweGEwNWY3ZTVmLCAweDc4MzFkYzRiLAorCTB4OWM3NzFhYmYsIDB4ZjVjMTA1ZmEsIDB4ZjFkYzc2MjEsIDB4MjEyN2NhYTQsIDB4NDhlZTNlYjMsIDB4M2M2MTI3YjYsCisJMHg1Nzk5YzI5MiwgMHhkMTdlMjMxYSwgMHg1ZmNmZmZjMSwgMHhjZGY2MDI3OCwgMHhmMmZhZWQ0ZSwgMHhmMmJiODAwOSwKKwkweGZjNGY3MzliLCAweDJhOTNlMjk0LCAweGRiYWMxNzIwLCAweGMzZGY2N2RlLCAweGJiZWQwNjdkLCAweGQyN2Q1NWY3LAorCTB4YjhkM2NjZmEsIDB4MjdmYWQzNGYsIDB4NmI3YTFiYjMsIDB4MjY0NWZiZGQsIDB4ZWViNDUzZWMsIDB4ZTIwNTNhZmMsCisJMHg0ZWY3YWJiOCwgMHhmNTZkN2Y0MSwgMHg0OTUzOTM0YiwgMHgyYjQwN2YwYywgMHhiZDAzN2Y4MSwgMHhkMjMyMjdkOCwKKwkweDM5YjFiOWFkLCAweDRkM2NlMDEzLCAweDc3ZWIwZWU5LCAweDU4MzkzYzQ3LCAweGIyZjRlMmM1LCAweDExZGU0NzFhLAorCTB4NGJhZTVmN2IsIDB4YzY3MWI4ZGMsIDB4M2FjMWQ3Y2QsIDB4NjViYTI4ZGUsIDB4ZjFmODhiZDIsIDB4ZTFjZjRhNjEsCisJMHgwZWUzYTBiZCwgMHgzODIwOWY3NSwgMHhlM2YxYjJmNSwgMHg0YTBmZjBkMywgMHg3ZDY2MGJhZiwgMHhlMzQyZmUxYywKKwkweDBjN2NmZjkyLCAweGJhOTMxYWRhLCAweDdiODcxZjhkLCAweGRmNmQzZjgxLCAweDIxNTliZjZmLCAweDVkYTM5MDE2LAorCTB4MWVkYzYxY2YsIDB4MGY3ZDQ3ZTgsIDB4ODVmY2ZhZDIsIDB4MWNiYjg4NGMsIDB4YzBlZmRiMTcsIDB4NjZiZGViZmMsCisJMHhkOGFhYTNjYywgMHg1M2NhMDFmYiwgMHhlMzZmNGJlYiwgMHhmNzUxMWFiZSwgMHhjNzQ5NWFkZiwgMHg1MTI3ZGIxZiwKKwkweDU2ZWYzYTdkLCAweGFiM2I4YjA3LCAweGI0Yjg4MDc0LCAweDZhZTdjNGVjLCAweGI1ZjE5OWZjLCAweDJlZWU5NzE2LAorCTB4MzJkNjNkMWUsIDB4YWJiZmVkODAsIDB4NWI1NTkxZmIsIDB4NDMxMTJjZmYsIDB4MGIxYjlmYmMsIDB4ZDk3MjNhZjQsCisJMHgwZjBkNTQ3ZCwgMHg5OGMzYzAyZSwgMHhkODk2ZmRlOCwgMHhmZDhlZmZmMSwgMHg4MGRkMDMxNiwgMHg3NThmNjA5ZSwKKwkweDdhZDBhN2VjLCAweDA3YWI4ODNmLCAweGVkNjIwZmI4LCAweDY2NmViNWRmLCAweDYyYWQzNGZiLCAweDZkNDViY2VjLAorCTB4YzVhNDY1ZmYsIDB4ZTgxMmVmYjAsIDB4NGY0YmJlZGQsIDB4NzhhZWY4ZjMsIDB4YjQyNzA2Y2EsIDB4OWQ3YzU3NGYsCisJMHhiZjViMTRiYSwgMHhkNGUxNmFkZiwgMHhlN2JlMDM3YiwgMHg2NzI1N2ViZSwgMHgwNTk4MWJjYywgMHg3OGQ1NTk3YywKKwkweDRhN2IwMjQ0LCAweGY5YjRkZjViLCAweGU3ZmQ1MjllLCAweDc4ZjJjZjUzLCAweGIwNWQ2NDRlLCAweDUxYmJmNTE5LAorCTB4MTYxMzU0N2YsIDB4NWJjMjM0MzcsIDB4YWI3YTYxNmUsIDB4MWZhZDg5YmEsIDB4MDIzOTc2YTcsIDB4YTljZmRhNzYsCisJMHhhZjkxYmIwMywgMHg5MTFjNzdhYiwgMHg4M2JmYjRmYywgMHg0NTIzN2ZkYiwgMHg2MGFjZjJhMiwgMHhjMTQ0MDhmZCwKKwkweGZkODVlYTdmLCAweDg5N2Y2YzM5LCAweDcxYzZlYmY5LCAweGYxYzc1MmVlLCAweGUzOGY2Mjg2LCAweDM3NDY3MWRkLAorCTB4NTA3ZjBhY2UsIDB4MmU3ZWU3NjIsIDB4NDE0OWRlM2YsIDB4OWRmZDBkOTksIDB4ZTQwOTExNmMsIDB4ZjIwYzlmZmQsCisJMHhlMzE4ODFjNSwgMHg1YTg4YjVjZiwgMHgwZmM5OGIzYywgMHgxY2YxNDc1ZCwgMHhiYjlkODNhNiwgMHhiNDI1MTNlNCwKKwkweGM2M2I1N2JiLCAweGZkZTcwODdlLCAweDE5MjQzYjU3LCAweGI1NzUxN2UyLCAweGVlYjUyZjJjLCAweDQwNjlkY2RmLAorCTB4NWI4NGJhZWYsIDB4ZGVhZTNmNzEsIDB4YjI1NzVmODAsIDB4MWFlMjFmMmIsIDB4NTFkMmMyYWUsIDB4YmQ0NmFlYzAsCisJMHg3NDk4YTA5MywgMHgxNDc2YWZmMCwgMHhjZTE0Y2FhNywgMHg0NjlkYWFiNSwgMHgwYjllMzcwNCwgMHhjNTQ1OWRlNSwKKwkweDY1ZGUxZjMwLCAweGVjNjM1OTcyLCAweDUyZjY4ODNiLCAweDhiYzI4OWUyLCAweGUzOWZkMmU4LCAweGNhNDY5NzI0LAorCTB4N2Y5NjhmZDAsIDB4Mzk2OTY5NTMsIDB4MDUyZThkODgsIDB4YjE4NThjNTMsIDB4OTlmY2RkZWMsIDB4ZGI3NzljMmUsCisJMHg1MDdmZDUwZSwgMHg2MTRhZWM4OCwgMHg4ZWIwNjQ3OSwgMHhjZjhhZWRiNCwgMHg0M2YxYzMyMSwgMHhiNDdlNTBhMiwKKwkweDFkYjljZmE5LCAweDVlODNmN2ZiLCAweDRhMjRlYjVhLCAweDhhMzM5NTAyLCAweDg2Y2Y5OTU1LCAweDJjMjNhY2YzLAorCTB4ZTlmMDM2NWMsIDB4ODU3YWZmOTksIDB4ZjEwZDZiZjYsIDB4ZDliNDU3ZTgsIDB4MjU1MjdjYjUsIDB4NDZjY2U0MDEsCisJMHg0MWJjYzQxZSwgMHg5MzZmZTU2MCwgMHhlNjM0ZTEzYSwgMHgyNTc4MTIxMywgMHgyOThkM2VlYSwgMHhhMWZkMWRiYywKKwkweDdjNTg5YmIzLCAweGZmNTcyNzgwLCAweGNmOGIwMjdhLCAweGFmYzAwMDkxLCAweDU0MmIyZmFlLCAweGUyMTJjZjM4LAorCTB4M2JmYmMzMGUsIDB4NTgwZjE4MWMsIDB4OTQyMmM2ZjYsIDB4MzQ0M2EwMWYsIDB4ZjU4YTkyYmUsIDB4YWMxYjVlZTcsCisJMHg2N2YwMWNjZSwgMHhiZjU1NWEzNiwgMHhjMGI0YWZjNiwgMHg2YWM1OWIzOSwgMHhmNTRhN2RiZiwgMHgxOGE5NjJlNywKKwkweDk3NWU0MWZhLCAweGU1ZmFmMmE4LCAweDk4NDNhMmQyLCAweDhhNTllNjhmLCAweDhlNzUzZTdhLCAweDMxYWNkY2ZlLAorCTB4YWEyMDRiNGYsIDB4ZmU2MDFjOWYsIDB4YWRiYzk3NzMsIDB4YjcwOGNkYTYsIDB4YzU2YjdmMzEsIDB4YzM1ZDdkNzYsCisJMHgzN2EwMjdlMywgMHgxMjc0MDJhZiwgMHg4MGUyZTVmYiwgMHgzMjM3ZTIzZCwgMHg0NjEzZDdmOCwgMHg5YWZjNzc3ZCwKKwkweGI1ZjhmNGQzLCAweGRhZmM3YWNhLCAweGE3ZjExODg2LCAweGFkYzNhZmM3LCAweDk3ZTY5N2M3LCAweGY4ZGY4Nzc2LAorCTB4Yzg3M2ZhYjEsIDB4OGFmYzJhZmYsIDB4NTQ4ZWQ1NTYsIDB4NGFmZjRhZjEsIDB4NjU0YzI5MmQsIDB4NDJlOWRjMDMsCisJMHgyOGMyZTUxOCwgMHgzMGY2MTk0NywgMHg5ZmVlZmYwNywgMHhhZmM1YTgxYywgMHhlZmQ0MGVkYywgMHhiODdjZWE2OSwKKwkweDFiM2JlY2M1LCAweGYwMGYxMWM4LCAweGUwOGU1MWJhLCAweDc5ZTgyMDI0LCAweDc1ZDhmOTFiLCAweGZhYzQwYWNjLAorCTB4NGQ3YjdjOGMsIDB4MzU1Y2Y0ZjcsIDB4MGIyM2Q1ZmQsIDB4ODA5YjU3ZTksIDB4M2YyMzg3N2YsIDB4ODliZWYzYjAsCisJMHgwNTk3NTAyNCwgMHhjMTc2ZWE3MiwgMHg1OWY0MWRmYSwgMHhiODQ1OGJkYywgMHgxN2I4ODVmNywgMHg1ZWZiODIwZiwKKwkweGE0M2U1ODVjLCAweDBkYjRhYmU2LCAweDMwNmU3ODI1LCAweDAyOWYzZTE4LCAweGRjYTFlOWZhLCAweGY3YTA2OWY2LAorCTB4Mjk0ODRiYmMsIDB4YzUxZmMxZTgsIDB4MGYwM2YzYjEsIDB4MzhiZjY1YTgsIDB4ODVhYmQ1NDksIDB4ZWY4MjRjNmYsCisJMHhlNzBjYTI0MywgMHhkYjQyZGJkNSwgMHhkZWEwODMyYywgMHgyYTNkZTNjNCwgMHhhYmZhODRkZSwgMHg5MGQ2ZmM2MCwKKwkweDZjNWFlMGM4LCAweDM4ODIwYzA5LCAweGM3MTE1ZWM4LCAweDAxM2M1ZDZkLCAweGQ4NzY2NWNmLCAweDJmOTYyMTZmLAorCTB4Y2NmYTE2ZDIsIDB4OWY0YTI4YjksIDB4N2EzZDM2YjcsIDB4MzZiOWM0MTUsIDB4YTllNzYyOWEsIDB4N2U5YWIxNGMsCisJMHhlYzFiZmFkOCwgMHhjNTM3Yjc5MiwgMHgxZWVhZjJjYSwgMHg1MWU3NDAxYSwgMHhiYWFjZmQzZCwgMHhiODc5MzMwZSwKKwkweGFiZjNhNTU2LCAweGY5YzQ2ZjRiLCAweDY0ZTIxNGJmLCAweGY4OGE0NzU4LCAweDQ2MWE2ZWRiLCAweDNkZWUzOWU3LAorCTB4YjBjZjhkNDEsIDB4ZjUyOGU1NzgsIDB4MmZkMDNhZmQsIDB4ZGZlYjVmYTgsIDB4ZGRjM2U5ZTUsIDB4ZTcwMjA1NDcsCisJMHgyY2Q1NDZmNCwgMHgxNWViN2Y0NSwgMHhjYTczZTUyNywgMHg3MDRhNzkxNywgMHg2MTZkZjAyNCwgMHhjZGVmMDEyOCwKKwkweGQwNGM3ZWYxLCAweDIyZGQxZmFlLCAweDRmMzNmOGU4LCAweDIyZjM1NzVkLCAweDQ0YzA1ZTU0LCAweDNlZGY1MGY5LAorCTB4ZWMxODIyMmUsIDB4ZmMwZjAwYTAsIDB4ZmQ3MWVkNzUsIDB4ZDU1Njg1ZjMsIDB4MTQ5MjcyZWUsIDB4OTcwZGYzZTAsCisJMHg1ZWYyMGU3OCwgMHg3Yjg5ZGFkYiwgMHg2ZGJiODUwZCwgMHhhMzg0NWY3MSwgMHhmYTljM2NlZCwgMHhiZTI1ZTVhNSwKKwkweGJmN2FkNjM4LCAweDYyZjhjYWNhLCAweDlkNzA0NGEzLCAweDhlZDRiOGQ5LCAweDRiMDNjNWYxLCAweGY1ODBhZTJiLAorCTB4N2IxZmFiZmQsIDB4OGU3NTg4YWUsIDB4YzUzZjRhM2MsIDB4MjUyYzdjYjMsIDB4ZmUwNThjOWUsIDB4YmMzMWNiNWUsCisJMHhjNjk3YTdkNywgMHhmOGQ3ZjdjOCwgMHg4ZDZmZTM1OSwgMHhjNjk3ZDNhZiwgMHgzNWU1NjI3OSwgMHg3NjY1NjM3ZSwKKwkweDIxZDJjMTVhLCAweGRhZmUwNDljLCAweGUzOGYwZTNlLCAweDVjZjFhZWI2LCAweDlmOGRkY2Y2LCAweDc4MDBjOWFjLAorCTB4ZDBlNzRkYmMsIDB4Mzg4NGI2ZWUsIDB4YjFiZDk2MjUsIDB4ZmVjNGVhYzEsIDB4NmJmOGQ3NWIsIDB4MmVlZjhmMjEsCisJMHgyN2EwOWMyYSwgMHgwMzc3ZWZiYiwgMHg4MTNmNWJmYSwgMHg2NzdjMmNhMCwgMHg3M2MzMmZhOSwgMHg2NDJjNGJiYywKKwkweDg1YmJjNDBiLCAweDFjNWJmNGZhLCAweDZmOTNmZmMwLCAweDdkZTE0NzU4LCAweGViODRkNGFjLCAweDhkZDE0NmViLAorCTB4MDhhYmZiZjAsIDB4MWE4M2Y4YzEsIDB4OGQzN2VkY2YsIDB4Y2YzZThlNmMsIDB4ZmYzNTg0ZmMsIDB4YzdhNTJiNTksCisJMHhkMjE3NTZiMywgMHhlNmUzYzkyNSwgMHgzZmY3N2UwMCwgMHhmMjA5ZGJmZSwgMHg4Y2QxNzZkZCwgMHhmYWFiZWM3NCwKKwkweGFmNzdkYTQzLCAweDM2ZGQ5OTU5LCAweDBhZDk0ZTMzLCAweDY0ZjI5M2RmLCAweGM3YjcxMzk0LCAweDEyM2M1ZWU5LAorCTB4NzhhMDRkZWUsIDB4NGVhMzkyOGYsIDB4YmJmMWY5ZmEsIDB4NzFkNTBmNDQsIDB4YmI0NDllMTQsIDB4Mjg5MmY5MDksCisJMHhjNWQyZWM4YSwgMHg0NzI4ZmQyOSwgMHgzMDkwNWM5YSwgMHg0ZDhmMjA0NywgMHg4ODVjYWJkMywgMHgxY2E4M2IwYiwKKwkweGMzZDhiMjhjLCAweDk2MjQ3N2UwLCAweDEwNTM3OWQzLCAweGZhYzJjNGFjLCAweDc1NGUxMTZiLCAweDNjYzZjYjljLAorCTB4Nzk5N2NhNzksIDB4NjA4YTM4NzAsIDB4NzExMjE0NDgsIDB4ZGY0ZDdmYTEsIDB4NmQ3YTdhNmEsIDB4NTk3OTQxMDIsCisJMHhhODEwYjBmYiwgMHgxMjZjZmRhMywgMHhhZjg4NTYyMiwgMHgwMTcyMjk2NCwgMHgwYTI1MWFhNCwgMHhlZjE3OWUzMiwKKwkweGZmMzA0ZTVmLCAweDc4ZmQ5NmQyLCAweDQyZGQ4NzQyLCAweDM3YzQ3ZTg1LCAweGZiNTg4MmZjLCAweDg2OWM3Yzc5LAorCTB4NDAxZmNmMmYsIDB4NmExY2U0NmYsIDB4OGRlNjAwM2YsIDB4NzNjNmNhZGIsIDB4M2I0MTY2YmYsIDB4YTg3ZjQzYmQsCisJMHhiYTkxNThmNiwgMHhkY2ZiOGVmZSwgMHhjMjA5ZjJjNCwgMHgzZWY0NDg5MywgMHg2ODdmNTE5YiwgMHhlYmI4YzlmNiwKKwkweGJmNjA2YjIyLCAweDE4OWZkYzY4LCAweDA1NWJiNDljLCAweGNlYWQxYmJlLCAweGE4OWY0M2I3LCAweDEwOThlNmViLAorCTB4ZmJmNDI3ZDUsIDB4NjZjOGQwZGMsIDB4ZjcyYjA3YjgsIDB4NWRjNzI2NjMsIDB4M2YyMWM5ZjQsIDB4YmVmYmY4MGYsCisJMHgxN2M4YzQ3YSwgMHgyZTU0YzIyMywgMHgzMmExZjZkNSwgMHhlYWUxYTdkYywgMHgxOWZiNDNhOCwgMHg5ZTQ5ZGU4MywKKwkweGVkMTUyYTNlLCAweDhjZGY5NTVjLCAweGRiZTRkNjc4LCAweDc3YjlmNzI4LCAweDBjY2Q5YmJiLCAweDFhNDdlNjJlLAorCTB4Mjc1YzIxYzYsIDB4ZTgzNjcyMWMsIDB4YjA3OGI3YTUsIDB4MjlmMmRiZjcsIDB4YmY1YzI4MWUsIDB4ZjRhM2Y5MDIsCisJMHhiODFmMzg0YiwgMHgyMWJmZTYwMSwgMHhlNDE1YmQ3NCwgMHgyN2FmN2JlNCwgMHg1NDc1ZmEyMSwgMHhiY2QzZjY5ZSwKKwkweDBmYWUzZTI3LCAweGMwNGUyN2FlLCAweGYzZmVmNTQzLCAweDQ2MTI3YWVhLCAweDAxYzg3NzdhLCAweDc4ZTg5Mzk1LAorCTB4NDZmZmM2ODksIDB4YTNlNGQ3N2UsIDB4YzhkZTJlMGUsIDB4MDQ3NjczYzYsIDB4MGI5ZTU5ZDYsIDB4NjYzMDY1ZTIsCisJMHg3ODA1YzliMiwgMHgzYWVkZWNkNSwgMHhmZTI1YmVkNSwgMHg1NmZmYjQ3NCwgMHgxZWJhODhiYiwgMHg0ZjgwMDY2NSwKKwkweDVlY2Q0NGVhLCAweGUzYTI1Yjc3LCAweDA1MWRhYjUzLCAweDRmZGI5N2E5LCAweGZlYTQ1ZWY1LCAweDFiMzlkNDU5LAorCTB4ZmU4ZWQwYWYsIDB4ODRhMmY3OWIsIDB4ZmUzN2JmY2YsIDB4NzkxNDI4OWEsIDB4ODk4ZGZjM2EsIDB4N2YxNWRkMWIsCisJMHhiMDg0NzFmMSwgMHg5ZmZlYzJmYiwgMHgyMzBjZGY5ZiwgMHg3NzI3ZGM3ZiwgMHhlMjVhZWZjZSwgMHhmNTQyMjU3OSwKKwkweGY1YWFkZTQ3LCAweDNmMTkzNjc1LCAweGQ3OTY5YzM5LCAweGZiNjgyZjU1LCAweDAxZTlkZDlmLCAweGE5OGZiY2EzLAorCTB4NzBjNjZmYWMsIDB4ZWVmMjBmNGIsIDB4MjVmOGE5YjUsIDB4YjNlODA2NjQsIDB4Yjc2YTYxZjEsIDB4ZmY5NTc1NjQsCisJMHhiY2ZjZWFmMywgMHhiNmY3ODYzNiwgMHg4MzA3ZGI1YiwgMHgzZGU3YWQzYywgMHgyZjY4NzEzNSwgMHhiMDI2NGM0NiwKKwkweGI0MTM3NjJiLCAweDhmZmJkYzdiLCAweDViZGU1MTNhLCAweDRmZWI3NDkyLCAweDhmYzBiYjU3LCAweGE3ZDlhOWYyLAorCTB4N2M2YTVkOWEsIDB4NTUyZWMzYWYsIDB4M2UyZDFiZDcsIDB4Nzk1MTM1Y2EsIDB4MTkzY2YwYTEsIDB4MWMwM2YxZTcsCisJMHhiZmU2MmU3NSwgMHhkMDU3MDFjMiwgMHgzZDU4NGY2MywgMHgzNjVmYzA3NSwgMHhkODM4OTczYSwgMHhjZTEyMTkyZiwKKwkweGIwOTZmMTYyLCAweDkzYmIzZTRlLCAweGRlNDE5YjQ3LCAweGIwM2YxNDgyLCAweGZhZTlmOWZlLCAweDFlZWI4ODM3LAorCTB4MDk3MWIxOWUsIDB4ODVhYTVlMGMsIDB4OTdlOWJlYzAsIDB4ZDU2MGQ4NDcsIDB4ZmJjN2YzMDQsIDB4NmJmYmIwZTUsCisJMHhmYmIyZTVmYSwgMHgzMWM3MzczMiwgMHhhMThiNjVmYiwgMHhmYTVhYzI3YywgMHgxNDRiY2MxOCwgMHhmYjljZGY4OCwKKwkweDUwMDZlMWZkLCAweDY0ZjkwZTIxLCAweGY4MDBkMjljLCAweDM4MmIxNGIwLCAweDcxMTcwYzhmLCAweDE5ZGU5NDczLAorCTB4YmM4MzkwNDIsIDB4OTk0YWM0ODksIDB4ZDI0N2YxNjMsIDB4ZmI0OGZmYjksIDB4ZjM5MTI4Y2IsIDB4MDYzMjNmODEsCisJMHg5YTM3M2MxMiwgMHg5ZTdkOGExMSwgMHhmMTM4OTVlOCwgMHg4ZGViZDk4NywgMHhiY2MxY2U1ZCwgMHg0MWNmY2FhMiwKKwkweGE5MzdjZTg5LCAweGU5ODM5ZDg0LCAweGYwNTBmYjg4LCAweDhlYWRiZjAxLCAweGFkYjI3MTViLCAweGFiM2VkODE3LAorCTB4ZDllMTgxM2YsIDB4YzEwMWJmZTgsIDB4NWE4MjVlNjAsIDB4ODIyMjU3YmYsIDB4MmJmZDExMzUsIDB4ZGZhZmYwM2YsCisJMHhjYWZmNDE2NCwgMHhkMDQxZGM0NiwgMHhiMWM0MWZiNywgMHhjZTNhZWNmOCwgMHhiZmVhMWViZCwgMHg3MDJkZGExMCwKKwkweDM3MjY4ZmNmLCAweDM0M2MzYzlhLCAweDQwYjcxNmUxLCAweDc3NWU3NTVmLCAweDVmN2MwNzM2LCAweDAwZWYxNzJhLAorCTB4OWMyNzViOWUsIDB4NjcxNmJjMWQsIDB4ZjhjOTllZDIsIDB4Zjk3NWUxNGUsIDB4OWFmZDFhZjYsIDB4YWNmZDFkNDQsCisJMHhkNjg5NTcxMCwgMHgwODY5MGVmMywgMHg1Y2FkZWRkOCwgMHhhYWZjMWI5YywgMHg4MzFjZTVkNiwgMHhlN2E4YjM5NywKKwkweDNjZGQwNDExLCAweDFmY2M2Y2QzLCAweGU3ZjU1MzY5LCAweDkwYjJlM2RmLCAweDg0ZjViNTFmLCAweGM2M2Q2ZmNlLAorCTB4ZThmMzBkN2YsIDB4Mzg2YTg3MzgsIDB4OTczYzZhNzcsIDB4MTFkZDk2OWEsIDB4N2NjNzRhMDcsIDB4ZWUwOTUyZGMsCisJMHg0MzY3MjMzMiwgMHhiY2UzYjQzNiwgMHgxMjRjZjZjZSwgMHg2YTY0YmNlMywgMHg1Y2YzMWFjNCwgMHhiYzUyNTZiMCwKKwkweDRiNzgwZDdkLCAweDQwMTI2YjE1LCAweGNlZGVhNzFmLCAweDFmMTE4OGY0LCAweGM0N2Y5YzZkLCAweGZiNDdkODQxLAorCTB4MWYzMzE4ODMsIDB4ZDJkMzJiNDUsIDB4NGM1ODRhNmUsIDB4YmY0YjRmZGYsIDB4NzllZDRiMDEsIDB4MTk4ODVkODMsCisJMHg3MWIyNGM1NywgMHg2NGRjZWMzZiwgMHhmYzE4YjEwMywgMHhlZDFiMjRjZCwgMHg5ZGU3YjRlZiwgMHhmZjE0MTVmNywKKwkweDM3YmI4Yzc2LCAweDM3YmMzMWM0LCAweDM3YmMzMWM0LCAweGU1M2UxYTQ4LCAweGNlYmY5MDc4LCAweGY3OTc1YmJhLAorCTB4NDk2N2MxYjQsIDB4ZDEwZjIwMTAsIDB4YjlmMjhlOWYsIDB4ZGRlOGM1YzQsIDB4ZjY4MmJlZjksIDB4ZGNhMjFmNGQsCisJMHhjNDk0MTczMCwgMHg0MzZjOTEwNiwgMHgyMWYxNjdiZSwgMHhhZmM4N2NlZCwgMHg0MDI0Y2Y3YywgMHg5NmRiOTRiZSwKKwkweDE2ZmJmYWE1LCAweDA2MDRkZjQ2LCAweDUzMGRmOWY3LCAweGIyMTRkYzcwLCAweGUyOTgzYWM2LCAweGM5YTk2OTc5LAorCTB4ZDNhMzcxMGQsIDB4YzI3MjNmMGIsIDB4MTk4NWU5OTEsIDB4MGYyMDc5MmQsIDB4MWI4Zjc5YTcsIDB4OTg0YTk3ZTYsCisJMHg4ZTZjYjg1ZiwgMHgyZWQzMDgxNCwgMHhjMmE4MWI5MywgMHgwMWJhNzQ2MiwgMHg0Y2NiM2JmNywgMHhjN2FlZjMzMSwKKwkweGU5ZmVkOGQ4LCAweDk2MTczOGQxLCAweDkwZDM2OTY5LCAweDkyZjU5ZDRlLCAweDhjNGJmMDA0LCAweDM1ZTU0YTdjLAorCTB4Y2VhOGYxN2QsIDB4NmY5NGNjNzMsIDB4NzkwYzViMTQsIDB4MTM0OTEzNmIsIDB4MTg1YmViODcsIDB4YjFhYzk1ZjEsCisJMHgzNWI3YWFiMywgMHgzOTA2NDk3OSwgMHg1MmFiN2Q4NCwgMHgzYTM1NDdhYSwgMHg0ZDVmNTAwZiwgMHhmZTI4YjhjMSwKKwkweGJmZDdhMTcxLCAweDc5YzM3ZjA2LCAweDQ1ZWEwMTVkLCAweDEwYzg4ZTRkLCAweGEwYWRlN2E2LCAweGExZTJhMzc3LAorCTB4ZTgzZjdiNmQsIDB4OWY4ZWZiMGYsIDB4MDczOWRiZmMsIDB4NTVmZDNiZWMsIDB4OWU4MDc3NjgsIDB4YmJjZjdlM2QsCisJMHhmNGM3MzgwZSwgMHgyZTJjM2RjOSwgMHg0ZmMxODc3MiwgMHhmYTYzNjQ1YiwgMHg3NGFkOGY3ZiwgMHg4MTc3ZTAxZSwKKwkweDllNzkxZmVmLCAweDc3MjU3ZTI4LCAweGU1OTNmZGIzLCAweGRlNzBkZTAxLCAweDUwNmY3ZjVkLCAweDcwYzkzMDU1LAorCTB4ZjExZjkwOGYsIDB4MWZkZWE1NWEsIDB4NDZjN2E0NjYsIDB4MmNiNzhiMWIsIDB4Y2E1OWIxZGYsIDB4NGY3YzYxOTAsCisJMHg1YzdmOGMyNSwgMHgzNzhmNDNmNSwgMHhkMWRmZDAzYSwgMHg2M2I4NTllMCwgMHhkOWJlMDQ4NCwgMHg3NTY2NDM1ZiwKKwkweDY0NDViZGZmLCAweDAyNTI4N2ViLCAweDE1MWU2N2ZiLCAweDBmMzg0NjZmLCAweDJmNmFmN2FhLCAweDhmY2IyNWY5LAorCTB4ZGQ2M2EzMjksIDB4MjdiMGY1NGQsIDB4MTg3YmNlYzQsIDB4MTNlNGIxZTcsIDB4MTI5NTI4YjksIDB4MWNmZGM5NmYsCisJMHhmZWYwZGRmYSwgMHhmMzNkNzQzZCwgMHhlZTFmN2RkYywgMHhkOWU3MTliMywgMHgwNTFmNWVmNSwgMHgyYTY1YjNmZCwKKwkweDZkZTc4ZGJkLCAweDNlZDg4NTk3LCAweDQxZTI2MmY4LCAweGZlNzJlY2Y5LCAweGM1Y2VjNDM2LCAweDY3OGRlMzE4LAorCTB4MDBkYjY1MGYsIDB4YTliMGJmMGYsIDB4MzIzY2M0ZjEsIDB4ZWY2ZGNlMDYsIDB4ZmUyMDM0M2EsIDB4OWY1NmY3NzIsCisJMHg4MjhiZWY1MiwgMHgzY2ExYmI3YiwgMHhjZTU4MjNlZSwgMHhlMjkwMjMwMywgMHhmNmY0MzJiZiwgMHhkNTVmYzA1ZCwKKwkweDNlZjEzYjRkLCAweDhmYWFlZmI0LCAweDljMjc0MmFhLCAweGU5YWQ0YjkwLCAweDZlODc2YTI1LCAweDhiMjBmOTAzLAorCTB4NWE3ZDlkMzksIDB4YzQ5Y2Y5YmQsIDB4OWY4NjZhZmMsIDB4YjdlN2Q0ZGIsIDB4MjA3MjNlMDEsIDB4ZDlmZTViZGYsCisJMHhkYmVmNGEwNCwgMHhkMWYzYzUyYSwgMHg2ZjNkYTVmNywgMHhmN2MzZWZkMywgMHgzY2RhYmU3NiwgMHhlZDZiNzliNSwKKwkweDljNWU2YTU1LCAweDBlNGQzYmYxLCAweGI5N2NhOWU2LCAweDc1ZjRlYjc4LCAweGVhOGEyOTdkLCAweGE5OTE3ZWY2LAorCTB4ZjNjMzkzOWUsIDB4MmQ5ZjFhNDIsIDB4ZTk0NWE1MjMsIDB4YTM0OWY4MzEsIDB4ODRkZjA3NmYsIDB4ZDNmMzhlN2UsCisJMHhiZWI4YmFlOCwgMHgzZjgzYzU0YywgMHg0YzRmZGQ0ZCwgMHg5MTk1Nzg4MywgMHhhNzNhN2E4ZiwgMHgzMjQ2MmFkZCwKKwkweDdjOGRiZTQxLCAweDdkY2RkYWQyLCAweGIzMWIyMTI4LCAweDRhY2IxNjJmLCAweGE4Y2ZjNDExLCAweDE1Y2ViYmY5LAorCTB4MTcxY2RmNjUsIDB4MTRmZTBmZWEsIDB4ZTMyYjZlZTQsIDB4MDgzZDBlZmIsIDB4ZjdlODMxNGUsIDB4ZmY1YzQ1MzcsCisJMHg1NGU0M2E1NywgMHhlOTBmZmZiOCwgMHgxM2YyMGUzNywgMHg0Zjc4N2VjYywgMHg0Zjk4ZTcxYiwgMHg4MDhhMDY1MSwKKwkweDRmMmM2MmZmLCAweDgxOTU0YWZhLCAweDk3ZGIzYTgzLCAweDA0ZTczYzZlLCAweDA4NmRiYmZiLCAweGFiNTFiOGMxLAorCTB4NjllZjBmNDMsIDB4ZTM3YThmMWIsIDB4NGE4ZjRhYjQsIDB4M2Y5YmU1YTEsIDB4ZGFkYWNlODMsIDB4YzcxNzc5ODIsCisJMHhhNzcxYTkyZSwgMHg1OGUyZTY0YiwgMHgzOWQ4YjRmMywgMHg3Nzc4YmRkZCwgMHhmOWE4NzJhOCwgMHhmYTU0MGIzNSwKKwkweGZiNjIxMWRkLCAweDRkMzcwYmU5LCAweGM5NzQ3YTQ3LCAweGExZmQ1NGJmLCAweGY1MGU0NmIyLCAweDRiM2U5MThlLAorCTB4M2U2M2Q3ZGMsIDB4M2U0MGEyZGEsIDB4NWU4NWRmN2UsIDB4YmJhNDQxZTQsIDB4ZGE3NzZlOTEsIDB4MzcxZWVjNWQsCisJMHg3YjgyNDZhMSwgMHhlMjZkOGVlZCwgMHg4NTcxZmY3MCwgMHg3M2ZmN2IxMCwgMHg5ZGY0ZGRiNiwgMHg0NzljNjNlNiwKKwkweGRiMmZmMDc3LCAweDJmYWViYjVhLCAweDkwOGZmOTgxLCAweGYwOGRjZjgwLCAweDQyNWZmMzZiLCAweGQ0YTdhNjE0LAorCTB4MmYzNzc2ZjksIDB4ZjJjNDk5MTIsIDB4N2Y3NWQ0MzQsIDB4ODE1YjljMzksIDB4NzkwNzkzZmQsIDB4YzZhZGNmOTYsCisJMHgzNWY4MzRhMSwgMHgyOGYzOGQ3OCwgMHg3Y2YxMmJlMiwgMHg4ZjAzNWI0MSwgMHhmODc3ZDk3OSwgMHg3NzA2N2RkOSwKKwkweGZkNzBlNWFjLCAweDlhNGU4ZWVkLCAweDdiZjZkMTVlLCAweDMwY2E5YmFhLCAweGZiNDNjYjZmLCAweGVkYjYzYjAxLAorCTB4MjlmNmMyNjMsIDB4Y2Y3ODczZDYsIDB4MGNmNGI3NWIsIDB4ZWVhNTdjYjEsIDB4YTMwODQ5ZTgsIDB4Mzc0YTYyZGIsCisJMHhkZWJiM2ZmMCwgMHgwY2FmOTA5ZiwgMHgwYTI3ZGU4YywgMHg4YzBjYTBkYywgMHg0MTIyYjdkZSwgMHhiMTU5NTdjYywKKwkweGY5ZWViYTdkLCAweDhlMzU3NjhkLCAweDllZjVlYWE1LCAweDI0ZDQ4ZmU0LCAweDY5NmY4Y2M0LCAweDlmYzlhNmYyLAorCTB4ZGE3NzhmMjYsIDB4MGE2ZjY2NjUsIDB4NTkxOTgzODEsIDB4ZDE4NzlmODAsIDB4N2FmYWExYmYsIDB4M2RmOTlkOWUsCisJMHhhZmE1Y2QwZiwgMHhhNzNjNmY1NCwgMHgzMjU4YTdkYiwgMHgwOTZiZDE5NiwgMHhiYmNmODI1ZiwgMHgwZjE0YmJkMywKKwkweGQ4YmRiZDNhLCAweGY4YzNjZmFlLCAweGU2ZDFmM2ExLCAweDM2ODljOWExLCAweDE4OWNhMzNmLCAweDQzZDIzN2JmLAorCTB4ZTkxOWVmOGIsIDB4YzAwN2E0NjIsIDB4NWJjNjdlMDksIDB4MzU4MTZkN2IsIDB4MzhiN2NlMTQsIDB4YWY3ZmI3MDYsCisJMHg0ZDZlZTExNSwgMHhiOWMwYWM5YiwgMHhmOWY0ZWFjZCwgMHgzZTAxZmU1OCwgMHhiMGZiMDc0YywgMHg3NjhlY2ViNCwKKwkweDhkODdlYWFlLCAweDIyNWM1ZGVhLCAweDVlY2JiNTU3LCAweGQ5MjMyYWIyLCAweDI0ZDJhN2I5LCAweGI1ODk5M2UwLAorCTB4MTcxNjE5OTEsIDB4NTgzZThmMjEsIDB4YTRmNzA0NWMsIDB4MzIzODdjNGUsIDB4YmZmMTQyMDMsIDB4NTY0NmYwN2UsCisJMHhkNzc5MTZkZiwgMHhmY2ZiODZlMiwgMHg2OTBhOGE0YiwgMHgyZmQwNzFmZCwgMHg5NWZhMmZhMCwgMHg2ZWZiZTBkYiwKKwkweGY5NzNjNGViLCAweDFmZGVjY2JhLCAweGNmOWQyZTY1LCAweGVkNjZiMWVlLCAweGIzM2VkNDk1LCAweGYyYWVmNWQwLAorCTB4NDE1N2UwZjAsIDB4NGE1YjJiN2UsIDB4NTQyZTIxOGEsIDB4YmE3ODExMDksIDB4Y2UyOTU1ZGUsIDB4YWQ4NzJkYjAsCisJMHg3YmU5ZTNmYiwgMHg0ZjNjZDkxZiwgMHg3NmVlMjFkOSwgMHg4YmFlMmQ3MSwgMHg5NDA1ODc5NSwgMHhjNTg4NzIyZiwKKwkweDU3M2EwNTY3LCAweDZkNmVmZDJiLCAweDI5OTNiNTFjLCAweDVhMjZkNzdlLCAweGQzMTdlMGRjLCAweDk3ZjA3ZWU3LAorCTB4YjIyYTI2ZDcsIDB4YTM1Y2Y1MWMsIDB4NzAwNzdjMWYsIDB4N2NiMTM1YWMsIDB4MGM2ZmZkODIsIDB4YzY1YzhmOGUsCisJMHgyM2VmZDgyZSwgMHgzNGNmZTAyNSwgMHgxYTU4MmNmYiwgMHgxNzI1ZjNkYiwgMHgzN2M4ZTc5ZSwgMHhiMTg5NzhiMSwKKwkweDc2YmI2ZGZkLCAweDAwY2U0OWFlLCAweDI0M2VhOGJlLCAweDFmYzNmY2ExLCAweDg0NTU5ZmQ4LCAweDYxMzU0OWM5LAorCTB4MGVhYWQwZTcsIDB4NTM3NzNjMTMsIDB4Y2YwOGE4N2QsIDB4ODRiOWMwZGQsIDB4ZTA3YTc1NGYsIDB4YTZlZTczNWYsCisJMHg5ZTE4YWY5MywgMHg0NGFlMDQwYSwgMHhkMGI3MWE4OCwgMHhmOWQ1ZDU2ZSwgMHg5ODEwZDM1NCwgMHhkY2UzZTEwZiwKKwkweGNmODQ2ZTcwLCAweGEyZWNkNTMwLCAweGEwYWZlN2YzLCAweGUwODdjNTI1LCAweGZmNzBmMzcyLCAweDg5ZTRmZDRjLAorCTB4NTU5ZmRjM2MsIDB4MmQ3OWFhMjcsIDB4YmUzZTc2MjYsIDB4ZTU1N2RkNjMsIDB4MzlmYjJiNGYsIDB4ZGQwMjhmNGEsCisJMHgyNWIxZmY0ZiwgMHg1M2Y2YzZjZiwgMHhlNmQ2YWZkMCwgMHg4NDI5Yzc1YiwgMHgzNWVkN2YwMywgMHg3MjE5ZTc4MiwKKwkweGUwMzM0OTkzLCAweGIxOTQ0NmNmLCAweDQ3MTY2ZmMwLCAweDZjOTdjYWEyLCAweDY1ZmU5YjNmLCAweDliMzZlOTQwLAorCTB4N2U1MzIzN2UsIDB4OWZjMWZhZmYsIDB4ZTNiYmZmMjIsIDB4NjhiMmFiNGQsIDB4NTlmODczOWQsIDB4MmU3NGMzM2QsCisJMHhlZjMwYjI4YiwgMHg2YmY1NjVhOCwgMHhkMDA2ZTc0YywgMHhjMzU4ZThiYSwgMHg0YWYxYjBlYSwgMHhhM2IzM2UxNywKKwkweDE0M2ZjOGFlLCAweGJhMzE3MWM2LCAweDAxYWU1MGVlLCAweDJjNGMxNmZlLCAweDkwMWMyM2FlLCAweGNiNDc3ZjcwLAorCTB4Nzk0YjU5NTcsIDB4ZTJkMWY4MDYsIDB4NWQ3NDdhNjAsIDB4MzY3M2MxNmQsIDB4MjgxNzliODgsIDB4ZWM0ZmU0MzIsCisJMHhmYTQxZWY1MSwgMHg1Nzg2YTViZSwgMHg3ZjQyNjZkZSwgMHg3ZmMwNGEwOSwgMHg1M2UxODNiYywgMHg1NDY5MGJhMywKKwkweDVlM2M4MWFlLCAweDgxYWU1NDEyLCAweDBlN2ViZDdkLCAweDdlODNhMjRmLCAweDk2YWRmMjNmLCAweDFiY2ZhMDg5LAorCTB4MGYyOGY5ZGYsIDB4ODJiZjczZWYsIDB4MmRmMjMzZjUsIDB4ZjlkMjQzZWEsIDB4ZmY2ZGZlOWMsIDB4ZTRmYmQxY2QsCisJMHhhOWY5MWNmZCwgMHgwMzI1MWRmMCwgMHhlYzljYWZkYSwgMHgzOTUxYjcyMiwgMHgyYzg4NTNhYywgMHhhZDlmODM2NSwKKwkweDA5MWIyZmY3LCAweGQ5MWY0ZmQzLCAweGEwNzBhZjRhLCAweDNhZTMwOTNlLCAweDY3YmIxM2Y2LCAweDdlOGRkNDAwLAorCTB4ZWM0OTY5MzMsIDB4OTQ5ZGRlNTUsIDB4MTdlZTM3NzMsIDB4N2QzNDY2MjUsIDB4ODVkNjEwYjgsIDB4NGE3YmIxZGYsCisJMHhmY2MxNDUzOCwgMHhlZTNiMTdkMywgMHg5NzE4MjM2YiwgMHgzNzM4OTFiMiwgMHg5Yjg5OGRjNCwgMHhkNDUzZjlhNCwKKwkweGYxODk5YWY4LCAweDk0NWU3MjU1LCAweDg3Y2VhY2ZmLCAweDc5MDg1ZjdlLCAweDJjNmM2M2YyLCAweDhmY2U4MWJmLAorCTB4ODIzYWZkMDcsIDB4ODQ4ZTU4YzgsIDB4YTAzNjU5MzgsIDB4M2RmNTgzZDgsIDB4NGZlMWY4MjQsIDB4NTg4ZmZmNjksCisJMHhiMmNhN2M1OSwgMHg4ZmUyZTg5ZCwgMHhiNzE2MGU2NSwgMHhlMmM5YzA3OSwgMHhmMDYyNzE4ZiwgMHhlMjJiYjAxNiwKKwkweGQ4MTcxMGNlLCAweDRiOGY2ZDE1LCAweDBiY2ZlZTAyLCAweGRmNzA5YmFlLCAweGUzMDlhMGVlLCAweDAxOGI0ZmRjLAorCTB4YjUxN2VjMTcsIDB4NWJjODI1NWYsIDB4NmQ3ZjY3NDgsIDB4N2ViNWRkMmEsIDB4YWJlNDkxMWYsIDB4MGJmN2VlMjAsCisJMHg5ZDNmYWIyNywgMHhiYjhmMzA0ZiwgMHg4MDE0ODRmZCwgMHgwY2M0ZGNmZCwgMHgzYzc0NGQ0YiwgMHhkOTgzOWU2OSwKKwkweDE1NzNiZmJiLCAweDA0M2EwNGNjLCAweDE4MTFjNmY3LCAweDM4YmVjYzdmLCAweGI5ZTNkMDEzLCAweGUwNTZiOTFkLAorCTB4NDcwMTE3OGIsIDB4NjY4OTBmMTQsIDB4NWZkMDlkZDcsIDB4NmYwYTM5ZTIsIDB4Zjk2NzNlMTYsIDB4MjIzYzgyZmQsCisJMHhmYzc3ZTI5ZSwgMHhlZTE5NzY4ZCwgMHgxYWRhN2FkMSwgMHg1NmYzMTFiYywgMHhiZGUxMzc5ZiwgMHhlZTRhMmZjMSwKKwkweGYxN2Y1MGU5LCAweDNkMDJlY2FjLCAweDMwNTY3NGZjLCAweGJjZjNlNzBlLCAweDYyZjNlNzA5LCAweDJiZDVmYjVjLAorCTB4MGMwZmRjMjksIDB4YzEyZWYxNjEsIDB4Y2ZkMDA0NDYsIDB4YmU0MGE5ODIsIDB4YWU1ZjNlOTMsIDB4YWZhNmIxZjIsCisJMHhkMTFjODEzNywgMHhjMTFjMjNmYSwgMHgyOTgyMGM3MywgMHhjYjQ4ZTUxZiwgMHgyNzZiNmEyNywgMHg2N2Q0NGY5OCwKKwkweGZjMGYwYjY2LCAweDhiNWQzNzFjLCAweDg4Nzk4NTNiLCAweDI1Mjg0ZDE3LCAweGIwNGRjZjY4LCAweDA1Y2U3ODhiLAorCTB4YmNlMTk5ZjIsIDB4MGY1NTQ0ZGIsIDB4YjJiOGZjNGYsIDB4YmIwN2U1ODQsIDB4OWViZGMzMGYsIDB4N2VmNTc2Y2QsCisJMHg3MzlmNzUzMCwgMHhkNzI3Y2E5MiwgMHhhMTZmMDg5MSwgMHgyNDVkZDdlZCwgMHg0ZDI3ODg2ZSwgMHg4ZmRmYThiYSwKKwkweDVmNjBjYTc4LCAweDU3ZmI1MTRlLCAweGYwODU1ZGRhLCAweGVkZTg5ZjM4LCAweDQ1MGQyOWJmLCAweDJjM2Q2MDI3LAorCTB4ZmMwMDhhMjAsIDB4Njg2MmQ5MzQsIDB4MDlkMjNiMDcsIDB4OWZlYmYwZjcsIDB4ZmQ1MGUwM2YsIDB4MTk5MjRjZGMsCisJMHhlZGE2Yzc5ZCwgMHg4N2UxNGQ0MywgMHhiNWZiNDQ2ZSwgMHg1ZTAzNzI1OCwgMHgwZjk1ZGE3NiwgMHhkZmMwM2YyMCwKKwkweGM1Y2I5MjIyLCAweGIxZjI5ZjI1LCAweDE3MjFjMzdjLCAweDJjYWUwNDZkLCAweDg3NjlmY2E0LCAweDUwZGQ1Y2Y5LAorCTB4NzlkMmI3ZWYsIDB4ZjU5MDNkNWYsIDB4ZmEwODdjMGYsIDB4OTNjN2NhZTUsIDB4OGZkZjQwOTMsIDB4OTVhNWU5NTcsCisJMHg3ZjAxZGYxYSwgMHg3ZjE5ZTJiOSwgMHhjYTc3ODZiOSwgMHgyYzhlZDNlNywgMHgzNzkzNGY3YywgMHg2N2U4M2JlMCwKKwkweDFmOTgxODhmLCAweGYyOWJiZjZiLCAweGFmYzBkM2ViLCAweGZkMDRlZDNiLCAweDViYTU5ZmI4LCAweDY5OWM4MGU2LAorCTB4N2NhYWI0ZTMsIDB4ZDVkNzJjNmQsIDB4YmYwZmRjYWUsIDB4YzBiZmU0ZmIsIDB4YmVjMjhkZDYsIDB4NzVlOGE1MTcsCisJMHg4MzAyNGZiZiwgMHhjZmQ3MmJkNywgMHg2ODc5MDY5OCwgMHhjY2YzMTE3NiwgMHg1MTczZDQ1MiwgMHgxZTkyZmNkMSwKKwkweGRmMWEyZmM1LCAweDljNTlkYWI1LCAweGM5OWZlMzQ4LCAweGUxZTVkZmJiLCAweDg0MGJlNGY5LCAweDg3NDhiMmI4LAorCTB4Y2ZmMWEyYmYsIDB4ZjcxODdmNDQsIDB4ZTYxMjI3ODEsIDB4NjdmOTE4OWYsIDB4OTNmYzM3NTcsIDB4NDAxNjVlN2YsCisJMHg5ZmUxNzU2ZiwgMHhiYTdmOGM0MywgMHgwZmRhMWJlMywgMHhlNDYxNmJkZSwgMHhhYTFjNzc5ZiwgMHhmZjJkZGRiZCwKKwkweGZjZjNjMjVjLCAweGJlNGVmN2FiLCAweDkzNjU3ZWVjLCAweDZhOWY5ZjRmLCAweDYyZDljNzJjLCAweDU0YmIyZmU3LAorCTB4ZWE5NmVmYmMsIDB4YmQwMWNhNmYsIDB4Y2VjNGQ1MzEsIDB4ZTMyNDA5ZWYsIDB4ZWVlZjBhMTYsIDB4ZmNkZWVkMzgsCisJMHhlZmE4NmM5YSwgMHhkYTFlOTgxNCwgMHgxZWEzMzIxOSwgMHg3OGY3NjlkYSwgMHg2NjliN2UzMCwgMHgwNTU3ZTc2MSwKKwkweDIzY2UwNDRmLCAweGU0NWFmYmI4LCAweGQ5MjFkZmU4LCAweDU4NzY2MGVlLCAweGZiOGYwYzUwLCAweDM3ZjFlYzAyLAorCTB4OWQ4YzFmMTgsIDB4MmE0M2NiOWEsIDB4YTY2MmZhNWEsIDB4OTcxZDQ2MTcsIDB4Y2ZlZmMzMzYsIDB4YmZjY2VhM2QsCisJMHgwNjk2N2MwMCwgMHg3OWRmYTNiOCwgMHhjZjc4NGE4ZiwgMHgwOTUxZjU1MiwgMHhmNzZmZTNmNSwgMHhmMTA0NWRiZCwKKwkweDc5Y2YyZDUxLCAweDhiYjc5ZWNjLCAweGZiYzI4NjBhLCAweGExZmVkZjhjLCAweDhlYWQ2NWVhLCAweDVmNDA0MDQ3LAorCTB4MWZkZGVlMWEsIDB4NGIxZTcxZDcsIDB4Mjk3ZTZmN2YsIDB4Njc0ZTUxZjAsIDB4ZjkzZWYxYmIsIDB4M2ZkYjFjNjAsCisJMHgxMTY0NGQ5OSwgMHhiNDcxOTg4NiwgMHhkZWI4NWVmNCwgMHhmY2FmNzhjYywgMHhmZjNiMzBlYywgMHgyN2IwZjMzNiwKKwkweDJhZjJiZGY2LCAweDM3ZWYxODdmLCAweDhhNzdmNmE3LCAweGU3ZWZlYzEzLCAweDY4NDFmNjVhLCAweGRkNmNjODg0LAorCTB4ZDczNTRhMGUsIDB4MjZhMzNmMzAsIDB4OTM0OWY4MWIsIDB4ZjhhM2ZjNDMsIDB4NDQzMjdlMGIsIDB4YjcwNmJiZjcsCisJMHhkMDdmZjNhOSwgMHhhOWZiYjAyZCwgMHg0YmVlMTIyMiwgMHhlZmIwOWNmZSwgMHgzNjNhZWE4MiwgMHg0MGY0YzljYSwKKwkweGU2MTdlYWVlLCAweGNiMjM5YzAzLCAweGNiYTA2Njk1LCAweGQ3MTYyZWIzLCAweDViMDkwNWY5LCAweDZlNmU4MWIyLAorCTB4ODI1M2Y3MDEsIDB4MGJmOTNjYTIsIDB4MjIzZGYzYWUsIDB4ZDNiMTBlOTQsIDB4ZTI3ZDNkZjYsIDB4OGZmOGMyNDYsCisJMHg5YzYzM2QzYSwgMHhlZDA5OWY2MCwgMHgzMWJiZTA4NywgMHg4MjQ3NzNlMywgMHg1ODhmYjcxZSwgMHg5YWViMDQ5YiwKKwkweGFiODUzNzA2LCAweDEzYmQ5Yjc4LCAweDgxYWUwZDBlLCAweDhmOTdjNjRlLCAweDAwYzZjYjNhLCAweGQwM2JlMDFlLAorCTB4OGU0NzRkNGIsIDB4OGQ3YmUwNTksIDB4Y2Y3YjgyMWYsIDB4ZTI4ODNlMzAsIDB4NGU4M2UwMGIsIDB4NDAxNmUwYmUsCisJMHhhMjgzYzM1ZCwgMHhmZGI3Y2ZhZSwgMHg4YjQyZjg4YiwgMHgxN2M4ZjQ2YiwgMHg3ZTcwYjcxMCwgMHgwYjk4YmUyZiwKKwkweDA1ZjIzNTc4LCAweGNlM2NlN2I1LCAweDUwNWNmNjE4LCAweGM2OTM3OTYyLCAweGU3YjEzZmU3LCAweDg5NmVmYmUzLAorCTB4ZDkxM2RlNjAsIDB4NmJiZjY1NjcsIDB4N2RjMDQ5ZTgsIDB4ZDhiOGRmOTAsIDB4MWM5ZjZkOTgsIDB4MjhhNmE0Y2IsCisJMHg3NjY0ZTU1OSwgMHgyYTNiZjZiZCwgMHhkYTFjYzIyMywgMHhhMmE4MjM5ZiwgMHhiY2VkMGRiOCwgMHhkZDI3YTg3ZSwKKwkweDMxYzhmZTJhLCAweDQ2ZmI4MzhlLCAweDAzM2UzNzMxLCAweDEyNzBkMGVjLCAweGNjMjM2YmQ4LCAweDg3OTA2MTI1LAorCTB4MTk4OWI2NWQsIDB4ZGFlNjNmNjAsIDB4ZmNjMzY0MjYsIDB4ZmFiMjFlNWYsIDB4NWVkMjU4NGQsIDB4OWJmZTViZWUsCisJMHg3ZGE3NzJhZCwgMHg2NmMzZTlhNSwgMHhmYzZkNWJiNSwgMHg0YzdmMmEzNSwgMHgyNzc5ZDg1MiwgMHg3MGQxZWJkMCwKKwkweDkwMDNlYjY4LCAweGMyZTBlMDA5LCAweGRhZGY0ZGIzLCAweDIyODc4ZjUwLCAweDAwOTM2ZjE0LCAweGZkODc4YTBlLAorCTB4ZmIwNDY5MWMsIDB4MjRhNGRmMjEsIDB4YjAzYjA2NGYsIDB4MzgwMDU4NGYsIDB4OWQ3ZWY2ZGIsIDB4OTJjZWYxMDksCisJMHgwMjFmZWJkMCwgMHgzZWRhMjViYywgMHgwZmJmNWJhYywgMHgzNWI3YjQ2YiwgMHgzZmYzNDg3YiwgMHhmMzQ5N2IzNCwKKwkweDgyYWVjMTdiLCAweDFmZDUzMmY2LCAweGJlZDk5OTcxLCAweDA1YjA4NGQ4LCAweGU0Nzg1M2VmLCAweGEyOTU3Y2FjLAorCTB4ZTc0MGIzY2EsIDB4ZTNjZWEyNTEsIDB4NzA4MmQyNjYsIDB4NGNhOWY3NjksIDB4NzI1MWYxNTMsIDB4MzlhYmZhODgsCisJMHg1NGM4NGVkMCwgMHhlYWE5ODc4YSwgMHhkZDUzMmE3ZCwgMHg2ZTIyZmJmYSwgMHgzZWZiMWIxZSwgMHg5ZTlmYWQxNSwKKwkweDFiYWUzN2RlLCAweGEzZjYxYWQ3LCAweGM4Nzk2ODdlLCAweGY5NGZlZWM3LCAweGMzZjk4ZmJkLCAweDdlZjAwN2UzLAorCTB4YjFkZmQ2MDEsIDB4MDlmZWVjNTksIDB4MjFjM2MzMTcsIDB4NzYzYWY2MjksIDB4ZjFlYjk1NTEsIDB4OWMwZTQ4YTYsCisJMHhlN2JmZGVjNywgMHgxZTZlYjhlZiwgMHhmN2Y3ZjNkOCwgMHg3NzFjOGVjMSwgMHg5NzkwMjA0MiwgMHhhOGM0ZmUzYiwKKwkweDE4MGZjYzc4LCAweDY5NWYyMzJiLCAweDZmM2Y3YWZkLCAweDljZjYxMWI0LCAweGNjZGVmZjQ0LCAweDcyOGYwYTQxLAorCTB4YzE2N2MwMjUsIDB4OGY1Mzk1ZjIsIDB4OWRmZDBhM2MsIDB4ZTg5MDJhM2YsIDB4OTI0NTFmNzMsIDB4ZTVjNDIwNjcsCisJMHgxZGRmZDQ4YiwgMHg3YjMxYzgzYSwgMHhhODNmNmI0YSwgMHgxMWM3ZGVmZSwgMHgyMTIxNmY5NSwgMHhjNTY3YmI0MywKKwkweGE5ZTc0NTFjLCAweDFhMWZmZGVhLCAweDJmMWVhNzVkLCAweDc0ZTQyMTNlLCAweGZkZmMwZmE1LCAweDVhMTBlMjMzLAorCTB4YWE5Y2UxZmMsIDB4OWZmMzQ5MGYsIDB4ZjVjZTdjZjAsIDB4NjAwYTc3OGQsIDB4YzY5ZjVmYmYsIDB4ZGM2YTI1MTMsCisJMHhlOWVhNjQxYiwgMHg0ZTIxYzU0NywgMHg2ZmY2MGQzYSwgMHg0ZThmMzNmMywgMHhiN2U1YmM4MywgMHhmNDgxNGM3OCwKKwkweDk5YmU3Njg2LCAweDNlMTZmNTAzLCAweDQ2MmFiZGU2LCAweGJhMWY1ZWZjLCAweDk5NTVlZjEzLCAweGEzZTRjZjFiLAorCTB4NWZjN2YxYTcsIDB4Mzg2NGY5NGQsIDB4M2IzMDlkZDAsIDB4NGJkZDhmMzAsIDB4ODFlZmE0NjIsIDB4MTQ5MWZmM2QsCisJMHhiZTNkZGExOSwgMHg5MWJmYTNiYiwgMHgyYTljYWYwZSwgMHg5ZWFjN2RjMCwgMHhkYmU0NjFlOCwgMHhmZTllNzQ3ZCwKKwkweDUzNzdlMTJiLCAweGJmOGZjNDJkLCAweGZhYzJlYTliLCAweGFjMzRiZWFiLCAweGRkZWFmYzZiLCAweGQ4MTI2NGZiLAorCTB4NGU5ZjFhNzksIDB4MzM3YzYyNDksIDB4NDlhM2Y3NmUsIDB4MmY0OWRlYzQsIDB4YzU4NmRlMjMsIDB4Yzk3ZmZlMzMsCisJMHhlZTI1ZDlhYSwgMHhhM2U4ZDM1OSwgMHg4NDNhZTk3NywgMHgyZDI3ZWE4YywgMHhhYTU2Mzc5MCwgMHg3MGZiM2FjMiwKKwkweDQ0MjVkYTExLCAweDVjNjJjZjNkLCAweGI3ZjM2NmRmLCAweGRhNzUwMTRkLCAweGNjZmVlZmQzLCAweGY1N2FjYjk0LAorCTB4NmZjNTM5N2IsIDB4MGViMDBiZDUsIDB4OTlhYjA5MTYsIDB4NzhlZDUzMWUsIDB4OWQyMzFlMGQsIDB4MDhhNTIzZGYsCisJMHgxOWYwNzc3ZiwgMHhlNzA4YzBmOSwgMHhmNmY5MWQ0YiwgMHhkYTA3YWUwYSwgMHgxOGNjZTBlZiwgMHhjNjI2MjU5OCwKKwkweDhmODY4Nzk4LCAweGM3YWU4NDk5LCAweDhmNWZiZGQ5LCAweGRiZDc4YzZmLCAweDE3OGVlN2VmLCAweGRhZDAxMWZlLAorCTB4ZTkxOWJjOWQsIDB4ZjRkNzZjNjYsIDB4OTAwYzExNDcsIDB4ZWMxZmE1OGIsIDB4MjlmMWI5OTMsIDB4OGJhMmRmNDgsCisJMHgzYWU4NTExMiwgMHhjZmU5ZmE0MywgMHgyYjkyOTNmNSwgMHhiOTU2ZGY5MSwgMHhmOGVlYjNkOCwgMHg0ZjIyZmFhZCwKKwkweGY5M2IyMzNjLCAweGQ4N2E2YzRlLCAweDViYjc3YzA2LCAweDFjNDFiN2E4LCAweGY0ZmIzYWY1LCAweGMyYmQxMDNhLAorCTB4ZTI2NjBiY2YsIDB4MTMxMTE1ZmQsIDB4OTRkYWQwODEsIDB4ODg2Njk5ZDAsIDB4MjQzZjc4MzMsIDB4MjBhMWJlNzgsCisJMHhmMDMyN2ZiNCwgMHgwYjQyYWJlOSwgMHhlNzZkNTlmYSwgMHhjYTM4NzkwOSwgMHhkNTBhNmNlZSwgMHg2YjJlYzBkOSwKKwkweGYzZTc2NjRhLCAweDVkMTAyNjBlLCAweDc4YzVmNGZlLCAweDhlOWE2ZmE2LCAweGM0YTY5ZDllLCAweDYyZWUxZjY4LAorCTB4Mjg4MzNjZmMsIDB4OWZmNDM5YzksIDB4N2YyOWViNDUsIDB4YzdkYzFmODAsIDB4NDI5MjcxODEsIDB4MzI1YWZkY2UsCisJMHgzOTczMmRkOCwgMHhmNmRhMjNmNCwgMHg5OTJkNzk4ZSwgMHg3YjdhZGJjMiwgMHgyOTk5ZWEwMiwgMHhlOWRkZjc0ZCwKKwkweGZlMDg4NGEyLCAweDZmM2UyNDYzLCAweGZlZjBlMzJmLCAweDhkZDkyMjg0LCAweDU5YzVhMmY1LCAweGY5OGRmN2U4LAorCTB4MDk0NjY5MjYsIDB4YTIyMGRmYjQsIDB4YWY4NTMzZGYsIDB4NzU1ZTIwMTQsIDB4YWJjMzhkM2EsIDB4OTE3MGY2M2MsCisJMHg2MjNkZjg1YSwgMHgwZTM2NzRmZiwgMHhjMDkzZjk3MSwgMHgyNGE3N2QzZiwgMHg2NmZlMDQ2OSwgMHgwN2Q1YWM5ZSwKKwkweDEyMmVlZmUxLCAweGZhYjZmZjgzLCAweGNkZmI3M2E1LCAweDJjZjU3ZGI0LCAweGE3OGRmMzBlLCAweDNmODgzMmI4LAorCTB4ZDY4YTdmOGEsIDB4NWJhZjM4NGIsIDB4YzAwNWE5NDIsIDB4ZjU4YTMzZDcsIDB4YWFjMzFlZTcsIDB4ZDRhYjM5M2QsCisJMHhmYmQxMDI0NiwgMHhlNTBiOWNmOSwgMHhmZGI1YTBmYSwgMHhmMTFkZmM1NiwgMHhmOTgxMjJiZCwgMHhhMzdlNzI2OSwKKwkweGU3YjNlZmNhLCAweDliYmVlOTI0LCAweGE5ZGQ5ODRlLCAweGFhNGRkNWM5LCAweGZhYThkZGZjLCAweDE5M2Q3M2NkLAorCTB4MDk0YmYxYmEsIDB4NDBmZTg3YjMsIDB4NjQ4MTBiZGEsIDB4N2VkOGI4ZjcsIDB4OTZmNmI0ZjQsIDB4MjVlMWYzYzMsCisJMHhkMDY4ZGZiZSwgMHgzMTBkMzc4NywgMHhlNTdjYmRmOCwgMHgzNDhiZTQ1YSwgMHhjOGY3OGRjZSwgMHgzN2VkZjViOCwKKwkweDhkZDdkNThmLCAweDBmZDQ2YmYyLCAweDhmOGIyMGIzLCAweDM0MjdhYWVmLCAweDJmNmIzMDdkLCAweDY4M2M0MjJmLAorCTB4MzNjNTNlNTYsIDB4YmI3YWM1ZGEsIDB4MzE3ZDI3YmQsIDB4N2QxYmFlMjYsIDB4MTdiZTQ5NzEsIDB4ZmEyZTkwY2MsCisJMHhlZmUyZTNlMiwgMHg0YjdlMmZhNSwgMHg1NGIxOTZkZCwgMHg1NzhlZGZhZSwgMHhhNGZlY2RkNywgMHgyOThkZTgzZiwKKwkweDgxNDc4ZWZjLCAweGJhZThkYThmLCAweDQ3YzE4ZTY5LCAweGM1YTNiYWRhLCAweDFjYTg4YTAxLCAweGM1MzgxZWEzLAorCTB4NWNhNjYzZjYsIDB4OTFmZTI3NGMsIDB4MGU4MDcxOWQsIDB4MTJlZDQyM2QsIDB4YTk3YjBjNzcsIDB4ZTUxYjNlMzUsCisJMHg2OGVmNDNhYiwgMHgyZWNhMjU3YSwgMHhiODdlZjMxMSwgMHhkYTg1MzI1ZCwgMHhjMDJlNTJhMywgMHgyYmUxMGZkNywKKwkweDI5MjVlZjUyLCAweDg4MmI4NDgyLCAweGMxOWRhNjFmLCAweGEwNTc5MDM4LCAweGNmYWUyY2ZlLCAweDgxN2YyMjRmLAorCTB4M2IxMmUzZmUsIDB4YWY2OGMzZTUsIDB4MGFlODcxNjgsIDB4ZTk0ZjY2OTcsIDB4MWUyM2E1ZjksIDB4YzNkZDkzMzksCisJMHgxMTQ5ZjFhYSwgMHg3ZmU0MTNlMCwgMHgwNGZiOGYyNiwgMHg3ZmQ0MWJmZiwgMHg4MDAwYjMwMywgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYzVmZjAwLCAweDU1NTQ3ODA5LCAweGY1NzlmMDk2LCAweDU1NDkyZDVlLAorCTB4MTQ2Y2FhOTIsIDB4YjYxMmYwOGIsIDB4ODQ1ODI0ODQsIDB4NTkxNmVjODAsIDB4YTAxNGEzNTgsIDB4ODE2OGNiODAsCisJMHg5YTEyNmIwYiwgMHg2OWVlOWM3MSwgMHgwMjQyYTZmZiwgMHg4M2I3NDM0MywgMHhlOGNlZGFkMiwgMHgzYWQ4NTdmNCwKKwkweDA4YjQxYTgzLCAweGQwOWQwMzAxLCAweDU4NGM1MDE1LCAweGY4MmUwODM0LCAweDFhNmQxYWQ5LCAweDg0NDkwZWQxLAorCTB4YmZiYjQ2ZDYsIDB4NzM5Y2ZmY2YsIDB4MmFhYTRiZWYsIDB4ZmZmZjRkODUsIDB4YjQ5ZmRmM2YsIDB4ZGVlZmI5N2QsCisJMHg2N2I5ZWY3NywgMHg5NzllZTczZiwgMHhiMzU1OWJkYiwgMHhmNmUwMDhhZCwgMHgxNDA3OGE5OSwgMHg3N2YxZDAwMCwKKwkweGUwNDJjMDIyLCAweGFkYWNjMzdmLCAweGM3OGVmMDE2LCAweDY5ZmNkN2JlLCAweGU3ZjgwZDg3LCAweDljMmZmYzNiLAorCTB4YTQyY2ZjOTAsIDB4OTAwYmNmNTAsIDB4Y2U1NGIwMDksIDB4N2Q1N2ZjNWYsIDB4M2M1ZTNkMzMsIDB4NTJmZTdhMjcsCisJMHg5MmI5ZmQ5OCwgMHhmODFiNzAwYywgMHhmNzFjMzBjZCwgMHhmZjhlYzVmMywgMHhjNzE1NGJlYywgMHg3ZThiMmU5NywKKwkweDRhNGNlOTllLCAweGZmODc5MGJmLCAweGJlMjMwMTE4LCAweGQ0Y2EwMTUzLCAweDIyYjc5ZGJhLCAweDU1MjdkZGJjLAorCTB4MzM0YzU1OGYsIDB4MzkwZmZlZDEsIDB4MzUwZmZlYzUsIDB4N2M4MDBjOTcsIDB4MTY3NGRmODAsIDB4M2RiMWY4YTcsCisJMHgxYzIxMTFiNiwgMHhkMWJhZDAwZCwgMHhlYzcxZWRjNiwgMHhlZmM1ZjEwNywgMHgzYzY2ZTdlOCwgMHgyMWZjMDU5ZiwKKwkweDUyYjRiNjA3LCAweDQ4MDFiNzIxLCAweGM0ZWQxODA1LCAweGZmNjAyNzQ1LCAweDBkM2Y5ZTJhLCAweGMwMjQ4NmM3LAorCTB4NWMyNDczZWYsIDB4ZTdhZjAwZDksIDB4ZjEwNGU3OTgsIDB4NWViOGMzYmQsIDB4ZTMwZGQ3MDAsIDB4Zjc1YzAxZmEsCisJMHhmNzI3NDZjOCwgMHhlNmU4ZGI1ZiwgMHg0NDJlMGRmZSwgMHhmYWMwMDY2YSwgMHgzN2FmMjcxNCwgMHg4Nzc2ZjcyZiwKKwkweGUzNWJkZjFmLCAweDUwZTdlNmNjLCAweGY4NDRkYTNlLCAweDdiMmZlMDM2LCAweDEwMDQwODZhLCAweGFjNzdhZmRmLAorCTB4ODA3NDk0ZDAsIDB4YjFlMmI3MmEsIDB4MDFkMWY1NjYsIDB4OGU1OGUzNGYsIDB4YmUyNWNiZjMsIDB4MTAyYWI3MmIsCisJMHgxZmU1ZTdjNCwgMHhjNDA3MmJhZSwgMHhlZTMzNTc1ZiwgMHgyYWE5Zjg4NywgMHhmYzM2ODM1NSwgMHg2M2QzNDk2NywKKwkweDBjZGY0NTNiLCAweGRlZmEwOGQ2LCAweDMzMDI4ZTIyLCAweDg2Y2QxNmI1LCAweDI4ZjAyY2ZiLCAweGYxZjcxNTFlLAorCTB4NmZmNzg5MzYsIDB4MWQ0MTJhZjUsIDB4Mjc4Yjc5ZmYsIDB4NjM4NzFlOWEsIDB4YWU1OGJlZTgsIDB4MGZmZTgwYjMsCisJMHg0NzMwNWJkZiwgMHg5ZDcxODYwOSwgMHhkZmEyOTMwNSwgMHhkNjc1N2M1YiwgMHhmZWQ4Y2FlNywgMHhlODk4YjQ3YywKKwkweGJmM2ZiNjNlLCAweGI3NzQ0ZWRjLCAweGMxODYzZmUzLCAweDk1ZmJhMjMwLCAweDhkNmZhNThiLCAweGM1YmEzZTg1LAorCTB4OGU3NGIxYjYsIDB4OWQxNmJmMWQsIDB4NjczYTI3ZWYsIDB4YzZjZTliNWMsIDB4Y2U4YjdmZmIsIDB4OTA0ZTExMGYsCisJMHgxYmY0NzBiZSwgMHgzMDA0OWU4YiwgMHgxYTA3ZTliYiwgMHg1NWY2NzlkMSwgMHgzMmFkZDc4ZCwgMHg4NjE0MzNjZSwKKwkweGQ0ZmU3OWQyLCAweGI3NmZmODU5LCAweGFhZmNkZjQyLCAweGZlMmQyZmE2LCAweGU3OWY2YjgyLCAweDIyYmZlZDZmLAorCTB4NjlmZGU3NDUsIDB4ZGY3ZTZmNWYsIDB4ODAzNGYzYmUsIDB4ZjljZTc4YzEsIDB4OGRmOGQxMzksIDB4YmQyYzZiYTUsCisJMHg2MmY3Y2ExNiwgMHhlNjM1YjVlOSwgMHhhMDVkMDYxYywgMHg2MDY4OTkxMywgMHg1NTVmYmMxYywgMHhkMTZiOGUxOSwKKwkweDE2MmU5N2FkLCAweDdlNGYwOGZmLCAweDVmODA3MWZmLCAweGQ2ZmFiOWYzLCAweDc2ODI3NDkzLCAweGUwMjA1N2NkLAorCTB4MDNjODQ3MzIsIDB4MDUyMDc1ZjIsIDB4MGFkZTViZTksIDB4ZWMwNDQ0ZTEsIDB4M2U3MzhiOTYsIDB4MjhmNWE4ZDcsCisJMHgzOWM0NjlmMCwgMHg4MzUzZTdlOCwgMHhmYWRmNmFjZSwgMHhiMjA3NTc2NSwgMHg5NmZiMTlmYywgMHgxNGIwMTA2OSwKKwkweDk3MjE3M2QyLCAweGQyNTVmMGIxLCAweDdlNjkyMzNhLCAweGNiNjhmOTgwLCAweDEwYjJkMzJlLCAweDA1YmE2MzllLAorCTB4OWI1MWY1ZWUsIDB4NGUwM2RhMjgsIDB4OWQxYTA3YTEsIDB4ZmJiNzVlMjYsIDB4NmUwOTliMmIsIDB4ZjBlNTc4MDQsCisJMHhmODQwNjI4MCwgMHgwOWU3NTYzYywgMHgzMzIxOGJkMiwgMHhjOTQ1ZmJmMCwgMHg5Y2RmY2YzYSwgMHhkYzA0ODEwNCwKKwkweDliNzZiNDFmLCAweDJiNDRmOTBmLCAweDM5NDFjODA2LCAweDgyNTkwNmQzLCAweDlkNjRiODM1LCAweGRjOTFmNjE2LAorCTB4YTgzNDdiNzUsIDB4ZDFiYmI5NDYsIDB4ZTA0OGVmNzgsIDB4NmM5MjQwMmUsIDB4YTk5NDc0ZmUsIDB4MGZkZThiMjYsCisJMHg3OWM1NGZiNywgMHhmYTZhMTUzNywgMHhiMmUyOWMzNiwgMHhmMWEwM2ZlYSwgMHg5M2FiNjZhZSwgMHhmODNlZWJkZSwKKwkweDVhNjYyZGNmLCAweDIwZjAyYmU3LCAweDMzNWFmMDg0LCAweDRmOGUxNTMyLCAweGE0ODM5ODczLCAweDkzZDRjYTM3LAorCTB4ZGRmYjA5YWEsIDB4OGZhNDAwM2QsIDB4OTcwYjJkYTYsIDB4M2E2ZGQyMDAsIDB4YjEzOGQ3YjQsIDB4OGM3NDQyOWQsCisJMHhkMGJmYmY0MywgMHhkZTg0MzM3OSwgMHg5YTc0ODgxYSwgMHg0MzM0ZTkyMSwgMHg2NjkyYWJlYSwgMHg0OTQ2ZjU5NSwKKwkweGFjODQxYTkyLCAweGIzNzRmZDNlLCAweDQwOGNkMWE0LCAweGVlMGE0OTdiLCAweDNjNTM0MzNiLCAweGY5YmZkODM1LAorCTB4OGZjNTE2YWEsIDB4YmEzZTkzMmYsIDB4OTUxZjRmYjEsIDB4M2RiZGY1YzksIDB4MDE5Njg2YmEsIDB4ZmYzNDQyNjYsCisJMHgzZDBhMzU5NiwgMHg3OThiNjI1NCwgMHhiZTBmZWQyZSwgMHhlNjU1N2NjOSwgMHg0MjlmMWU4YywgMHhmYmY5MTNiYSwKKwkweDgyNWU4YzYyLCAweGE2NTNmYjE4LCAweDAzYjkzNWZlLCAweGM1OGFmMGYxLCAweDg0NTRkZWZiLCAweDE5YjRlN2JiLAorCTB4NzBlN2M1OWUsIDB4ZmI5MzNiMTEsIDB4YzYzMWE3ZTMsIDB4MDdiNmM1MWUsIDB4NzU3YTI3MGYsIDB4ZTIxNWViODQsCisJMHgwN2Y1MDcyMywgMHhkN2IxZjU3OSwgMHhhM2I2M2Y5ZSwgMHhmMThlOThhNywgMHgwZDIyZGQ0YSwgMHhjZjJkOTliMiwKKwkweGYwZmIzM2JhLCAweDkyYmYwZmRlLCAweGFkNzhiMTBlLCAweGRiZGU3YTk3LCAweDhlOGQ3Y2U4LCAweGFkOGYwZmRiLAorCTB4OTc5ZWQ4YjMsIDB4NDhkNzQ5ZmMsIDB4ZjhiZGZkZjUsIDB4OTVlNWU0MzQsIDB4ZTI1ZTg5MGIsIDB4MGMyZTU3ZmYsCisJMHg0YWZkYjJmMiwgMHgwYzNlNTlkMiwgMHhmZTc4Mzg3OSwgMHg1MWU5MjI3MiwgMHgyMWFlYTdjNCwgMHg2Y2I4ZjQ5ZiwKKwkweDlmOTk2NzllLCAweDA2ODQxYzg1LCAweGMzNmUwYThlLCAweGMxMjQ4NWZlLCAweGY2MjRhZmY3LCAweGJjMjNjZjFjLAorCTB4M2NmMjYyZGYsIDB4ZWI2OGRiNGIsIDB4MjAyYTJmODcsIDB4ZDE3NWI5ZmQsIDB4ZTI4MDMzNzksIDB4Mjg4N2U1MDUsCisJMHg4NGVlOGE0ZiwgMHhhMDBkYjFiYiwgMHgwNWZmMTEzYywgMHg3MjQ4MjE1MiwgMHhkMDEwODY2MiwgMHg3ODVlMzViZSwKKwkweGQzMTlkYTlhLCAweGZiYzIxNGY0LCAweGRkYjM1YzY1LCAweDI5ZTllYjQxLCAweGQ3ZjBmN2M0LCAweDA1N2QxMzJiLAorCTB4YmY1ZmYxZmQsIDB4ZWUxYTdjMTEsIDB4ZTZkMWIwZDMsIDB4MWMyZjUwZDMsIDB4N2VlNGU4ZDgsIDB4YjczNzQ2ZTMsCisJMHhkY2VhMzY4NywgMHhmYzkxM2E2ZSwgMHhhYTFmZjI0MywgMHgxNjlmMTZiYywgMHhhNWU2NTdhMSwgMHgwMzMwZmQwYSwKKwkweDM1YzEwZWY1LCAweDAwNjA5NDAzLCAweDIzYzY2Zjc5LCAweDcyODhmMmMwLCAweDEwYTRkYzEwLCAweDM5M2NmMGJkLAorCTB4ZmE0NGY4N2QsIDB4ZTg4OGVlNWMsIDB4M2I1NmFkNDMsIDB4ODJhNTkzMjEsIDB4Njc5ODVlZTksIDB4MDlkMWY3ZTIsCisJMHhkNTlmM2UwOCwgMHgzZmQyM2U3ZiwgMHhmYzhjYmZhYSwgMHhlZmMzODQxNiwgMHhiMGI5OTZmMiwgMHhiMzdjMzkwZCwKKwkweDdhZGY4ODVkLCAweDRiZDFlOTY1LCAweGY0YjlmZGMwLCAweDQzYjk1ZWJjLCAweDhmZWI4NGJkLCAweDFmODRjZjBmLAorCTB4OGYxOGJkYTIsIDB4ZTJiYzIxODQsIDB4ZmYwNDVkY2YsIDB4MTAwYjE2ODQsIDB4YjJiMGQwN2QsIDB4ZjIxYTE2N2MsCisJMHg1Y2EyYjVmOSwgMHg4NDQ4ZmRjMCwgMHhlZjhjMWJiZSwgMHhjNGMzY2I1OSwgMHgyM2EwMDc0ZiwgMHg2NDVlZjA4ZCwKKwkweDdlNDlkOWYzLCAweDNmMDRiOTk3LCAweGRkZGI5NTc4LCAweDM5MzdhZTBhLCAweDA5NTFlMmMzLCAweGYxYmVlMWI0LAorCTB4MmQ3ZjExZWIsIDB4Y2UyMWI4MTksIDB4MWNjOTY5NmYsIDB4YjcxM2U3YTIsIDB4YzkzZWYxYmQsIDB4MDhlNmQ3YjcsCisJMHhjYzk4NmNhYiwgMHhmNjExMWQ5ZCwgMHhlMzNjMDA3YywgMHg3NDkyN2YyNCwgMHg0NzY4NzdkYywgMHgwZTRlM2Y1YSwKKwkweDZhYmI5ZWIwLCAweDZiNWU5MjA5LCAweDA5ZWM5MzNkLCAweGFmZDMzZWUzLCAweGFjYmZkOGRhLCAweDZlNTExN2E3LAorCTB4OGYyNjI3MGYsIDB4NDIxMzNkNjUsIDB4NjNmMjQzMGQsIDB4NmQ5OGU3MTMsIDB4M2MyM2FmZjYsIDB4N2EzZTY1YTAsCisJMHhlZGZiZGYwYSwgMHhhZmQyMDA2NSwgMHg1NDNmZGJkMywgMHgzMTJkMGZjOSwgMHg0MGU4MGVlNSwgMHhhMzJhOGYzOCwKKwkweGYyN2RhODUzLCAweDZlN2NlNGUzLCAweDEyNzcyNGNmLCAweGVjOWIwZTdlLCAweGNlZmJlZDNhLCAweDA0NzRiZDQ2LAorCTB4OGRhOWNiZjIsIDB4ZjkwMjNhNTAsIDB4MzY4ZGFkZTMsIDB4NzQ2ZjRmNmUsIDB4YTM2NjdiNzIsIDB4MzhhM2RiOWIsCisJMHgzYWYzZmM0ZSwgMHhiZDdmMTM4ZSwgMHg2ZmQ0ZTM4MSwgMHg0ZjZhNzFjMywgMHg3YWQ0M2FlMCwgMHg0ODk4NzJkZiwKKwkweGU1YmM2NzdlLCAweGJjMmRhOGQwLCAweGZhZGI4OTJiLCAweDc0MmM5MzNiLCAweDUwYzljMzhlLCAweGZjNGZlYzY3LAorCTB4MzcwYzRlMTQsIDB4MmVlNTA3ODAsIDB4ZGI1M2ZkZDUsIDB4YWQzZjY4MGQsIDB4MWM2NTAyZmUsIDB4Zjc1NGQ0YzAsCisJMHhhZTNhNmQ1YywgMHg4ZmU4N2IzYiwgMHgxOWYxYzJiZSwgMHg2YTdlYzNhOSwgMHgzYjZmNzg0MywgMHg4OTM4NjhlMywKKwkweGY1YzdkMmZkLCAweDNmODgzYTlmLCAweDkyYTIyNDRmLCAweGI3NjQzYzI0LCAweGM3MzY1MTc5LCAweGM0MThkMjkzLAorCTB4MjRjMmY3NjgsIDB4ZmQxOWE3ZWMsIDB4YzhhNWI5ZWMsIDB4M2E0YTRiMGEsIDB4YjAwNWMwZjIsIDB4NzNlMWIxZjMsCisJMHgyNWRmODg2ZCwgMHg1MTNmZmY3NiwgMHg5YjY4MTJkZiwgMHhmYTlkM2E1MywgMHhiYzkyNzAxMCwgMHhjYjIwZTYyYiwKKwkweDdkMjUxMGZiLCAweGFkYmZkYTExLCAweGQ0YzRmZjBlLCAweGFiYzA3ZjA4LCAweGY0OGQyMWZjLCAweDAyYWY0NGMzLAorCTB4NzdhNjc0YWUsIDB4ZjdkMmE0NzAsIDB4ZDViNzk4ZGMsIDB4MTUzMTM2NTEsIDB4MmVkN2Y3ZjksIDB4YzI2OWY5OTUsCisJMHg3NDFiYzUzNCwgMHg2MzVmOTdmNCwgMHg3YWYzODRkZSwgMHhlMjZmZDEyOSwgMHhkNGI1NTljNSwgMHhlMmUzOTgyZSwKKwkweDRkZDk2ZmJlLCAweGE1ZmYyNGI1LCAweDVmYmQ2YjhlLCAweDVjODdlZmMyLCAweGM1NDdkNjY2LCAweDYzOGJjZTFhLAorCTB4ZTM3OThkMTcsIDB4ZmZjOGM5OTEsIDB4MGM0YjY5ZWUsIDB4N2Q3YzRiM2UsIDB4ODQ5MzVmZDYsIDB4NTY3NzMyZmQsCisJMHgzNDc1MmFhMSwgMHg2YmI1ZGY3MCwgMHhiZjk3OGQxYiwgMHhlNTcyYzBkZSwgMHg1OWU4ZjI0OSwgMHhhNWVkOGFjNCwKKwkweGQzM2UzODY5LCAweDI0YzI3OGExLCAweGE5M2VkMzJhLCAweGE3NzFhMzRkLCAweGNkYjQyMWUyLCAweDU1M2I4ZWY0LAorCTB4NTQyM2UzNDQsIDB4OWZlYTRjY2YsIDB4ZDg5ZDRiZDUsIDB4NGU2NmQxOWUsIDB4NjZmMzg0YmQsIDB4NmM3OGE0ZTcsCisJMHhmMDk5ZGVmOCwgMHhmZjEwYWU4ZiwgMHhmMjQ5Y2NjZSwgMHgxNzE0ZTgyNCwgMHhhNGFlOWYwNCwgMHhhOWVhYzdiZSwKKwkweDhmMWNlOWQ2LCAweDNhZDMyNDk1LCAweDYxMzFlMmJhLCAweDkyZDZmZWJmLCAweDE0NzA0NWZmLCAweDUxNDA1MmZiLAorCTB4OTFhNWRjNjgsIDB4YzdlNGZiMWYsIDB4ZTI3NTI5M2YsIDB4MGFhMWZhYmMsIDB4MDk5Y2ZjOTAsIDB4ZTA5MWZlZTcsCisJMHhhODlhZDk5ZiwgMHhmNTQwMjAyNywgMHhiZDI5NjcxNiwgMHg5YzUxNmY1NywgMHgyYmVmYjg5YiwgMHg1MTgxZjlhMSwKKwkweDVjNzlmZDY2LCAweDc2OWRlNGY3LCAweDZmZTUwN2I2LCAweDc0NWZiM2U1LCAweDZjYzFjZWYyLCAweDlhZGZjYTE3LAorCTB4NDllZDRjNTYsIDB4Y2JkYmYwOTMsIDB4YzM5ZjJhZGYsIDB4OTMwODI2ZTMsIDB4ZWJiZjI5NTIsIDB4MWRiZGY4MWYsCisJMHg0ZDI5M2YyNSwgMHgwYzRmZjVjNywgMHg0MTZlYjE3MywgMHgxMTZhOTUzYSwgMHg4M2U3MGQ3YSwgMHg1NWRmZWY0MiwKKwkweDk0NWJmM2MxLCAweDhmM2EzZjAxLCAweGE3ZTRhZmYzLCAweGZmNzE1YTE0LCAweDUxMDllOTU5LCAweDcxMGNlN2YzLAorCTB4OGRlN2Y1NDUsIDB4NDVhYTU4MTgsIDB4ZmNmMmIxZDgsIDB4YWRmZWE4YWMsIDB4ODhlOTRhNDUsIDB4NjliZWY5ODgsCisJMHg0NWZkNTEwOSwgMHgxMWQyYWVhNSwgMHgyYjZmZjMxMSwgMHg1ZmQ1MTgxZiwgMHg1NDU2NWI3MiwgMHhiMjY5YTY3ZiwKKwkweGExMWIxZmQwLCAweDdkYzg1NGJjLCAweDliZmIyOTc5LCAweDBhODdhY2Q5LCAweDFiZWU2MjlkLCAweDhlM2Y3ZTM4LAorCTB4N2YwOWI2MTcsIDB4ZmU4NWQwYWEsIDB4YjRhNWQyMTQsIDB4ODBmZDg4YWQsIDB4YzY4ZjdjMzYsIDB4OGY1MmVjOGIsCisJMHgzZGRkYTAwNSwgMHhmYzgwZWM5MSwgMHhmNjJmZTIwOSwgMHg2Njc3NjU4YiwgMHg2MzA1ZmEzYiwgMHhiNzY4YWU4OSwKKwkweDc1MmZlMDIzLCAweGZhZjFkYjQ0LCAweGNjMjdlMTQ0LCAweDBiYWQ3ZjAxLCAweDc1YTczOWU5LCAweDY1NTdmYjFlLAorCTB4NjE0NWQ1ZTksIDB4YmY0NjdjMjAsIDB4MmEzNzBiMWYsIDB4MTM3NzlkZDEsIDB4YWM2YWI2MWYsIDB4ODkwY2U3MzcsCisJMHhkNGFkYWZkOSwgMHhmNDhjN2VjMSwgMHhiN2M4ZTZlZiwgMHhlMDIxN2Q4YywgMHhjNmZmMjc2ZCwgMHhmZmIxODczOCwKKwkweDQ3MzNjZWI1LCAweGUxN2VjNjlkLCAweGFjZDczYWRmLCAweGE5YTU4NTljLCAweGNmNWZlMTcxLCAweDljMmM0Y2ZlLAorCTB4NGYzMmE5NzksIDB4ZmIxNWZlODEsIDB4ZWNhOWFkODUsIDB4N2E0ZmUyMmYsIDB4ZjBjMTNmM2MsIDB4Y2Y1MWNhN2YsCisJMHg5Y2Y1MjJiOSwgMHg1ODVmNDk0MywgMHg2NzNkNmQ3MCwgMHhmZjJkN2JhYywgMHg3OGQ3NThjZiwgMHhkZTU0ZWExZiwKKwkweGY3YmY3OGRmLCAweDdmYzRhZWI5LCAweDI3ZTcxYmJlLCAweGFlOWU3OWM1LCAweDVjZmU3ZmM0LCAweDlhMTlmY2Y0LAorCTB4Nzk0MGUzNWUsIDB4Mjc4YTBlM2UsIDB4YTkzZjc4NDAsIDB4OTU5YWU0NmIsIDB4NTJkNmY1OWMsIDB4NWZhMWY2NWIsCisJMHhmNjcwYjcyMywgMHhiNTJkNDBmOSwgMHgyNzgzM2I1MywgMHhiOWZlNzhhZCwgMHhmOTRlYWEzOSwgMHhlYTJmYzMwNywKKwkweDBhYTU2NzE3LCAweDU1ZjhlNDdmLCAweDc4ZTNhZWRkLCAweDUzYjc0MDdkLCAweDg4ZmY1MWRjLCAweGFhZjhhNzZlLAorCTB4Mjg3MzBiZGUsIDB4MzcwZWY0OGUsIDB4YzQzOGE3YWQsIDB4ZjYyZDg3OWIsIDB4ZmExNTRkZWYsIDB4ZGY3Yzg1N2UsCisJMHhmZWE5MGY2OCwgMHg4NTdmMDQxNSwgMHhmMjUxZTNhZCwgMHhlOWJmMmE0OSwgMHgxYzVmMTBiMSwgMHhiZjJmN2YyNywKKwkweDVjNzdiZmJmLCAweGJmNjgzYTBiLCAweDFkMDQ4ZmUzLCAweDdlN2QwOGJlLCAweDIyZGVmZWJkLCAweGUyMGNhNjYyLAorCTB4YTkxN2M1NTMsIDB4MDk2YzRhNGYsIDB4NTFmZDQ4YmUsIDB4ZjU0NTc0ZTYsIDB4ODNmZjkzYzcsIDB4MGY3NmNkZWYsCisJMHhhZTZmN2E4YywgMHgwZjM1MTU5ZSwgMHhmMjFjZDhmZCwgMHg5MDJjNmE4NywgMHgzNTNlOTFhMywgMHhjZmM4N2EyNSwKKwkweGVmZTNjNThiLCAweDBlM2RmOWU1LCAweDYwNTFiOTI3LCAweDdmNTVkNzRlLCAweDI5ZTRmYjFjLCAweDdkOGJmODExLAorCTB4YzQ1NTNkYmUsIDB4OWVjODgzNzMsIDB4NTIyNzNhZTMsIDB4NTU2YjZlNzUsIDB4ZDBlNjcwOWYsIDB4ODg3ZTI2N2YsCisJMHhiYWFjNjNlZCwgMHg5NWMzZDY4YywgMHgxZTc3YzRkZCwgMHhiYTBhZTliYiwgMHhlM2QyZjBlMCwgMHg2ODZhZTdmMywKKwkweDRkZTMzZGZmLCAweGZiMWMzOGZmLCAweDIxNWYxZWM3LCAweGZiNGQ1M2ZhLCAweGZhZGZiMWIyLCAweDdmYTI3ZGY4LAorCTB4ZDliYzY5YTMsIDB4YjgxOWVjODMsIDB4ZjkyOTZlN2YsIDB4N2ZiZWU5MGIsIDB4OWI3NWZhMjcsIDB4ZDQxNTViMWQsCisJMHhhODA5OTUwMywgMHg0Y2Q1YjBkNywgMHhmN2E2MTQwYSwgMHgyZGRiYzdjNSwgMHhjMDkxNWY2OCwgMHgxNzVlNmNjOCwKKwkweDE1NmVjMGQyLCAweGMyNjU3NGYxLCAweDEzZDkyMGQwLCAweDEzYWJkOGFkLCAweDBjMTMyYWRlLCAweDkyNjQ3NzdhLAorCTB4MDlkYTg3OWQsIDB4ZGQ5ZDcxNTEsIDB4ZmJlMWVmODIsIDB4MGJmZjM2NjUsIDB4YzljMjZmODIsIDB4ODdhNWVhM2EsCisJMHgyMDBkOTYwZSwgMHhlYTkxMzhmZSwgMHhlZGU0M2M2NCwgMHg3ZDI2ZWE5YiwgMHgyMWVkZjA4NSwgMHgwMWZmZmVmYiwKKwkweGYwNzhlNmJlLCAweDNlYzU5YWQ1LCAweDI1NzlmNTlkLCAweDg2ZjM4ZjY0LCAweDNlOTQ3OTIxLCAweDNhNmExNWZhLAorCTB4MjEwODRmM2YsIDB4ZWViZmIwZWYsIDB4YjFmZTUzNzUsIDB4OTBmMTY1YzYsIDB4ZjI0MjdlZmYsIDB4MzViNmY1ZWYsCisJMHhkYWExOGYzMiwgMHgyOWE5MWYwNSwgMHhiMTdiZjVhNiwgMHhjZmYyNWI3ZCwgMHg2YTJmYjkxOSwgMHg5MTBiYTFiZSwKKwkweDMzZDljMDNmLCAweGU4ODE1MTc0LCAweDZhYTg3ZjEzLCAweGUxZjkwZjYxLCAweGU0OTBmZjNkLCAweDgzZjlmOGExLAorCTB4MTgzZjgxNDQsIDB4OGZkMWYzZDIsIDB4Nzc3YmY5ZjEsIDB4ZjFiNjc5ZTcsIDB4NjVhNzgxNzMsIDB4MGU5YWVjYzEsCisJMHgwNmIzOGZlYywgMHhlM2ZjYTA2ZiwgMHg0N2ZmMzRhMSwgMHhhZDNiODc4NCwgMHg4N2NjOTFjMSwgMHhiNDQ5ZjU4ZSwKKwkweDhlMDVlMjhmLCAweDBmZjg4YzUzLCAweDMyZGQzY2UzLCAweDcwNWM3ZmJjLCAweDQ2YzFmZGVkLCAweDY0ZTk2NTc2LAorCTB4N2Y2Mzc3ODEsIDB4ZTg4ZGIxYzQsIDB4ZjEyNGRlZjEsIDB4ZTEwNzgwZGMsIDB4MzAzZTI2ZTgsIDB4MDc4NWVhZTAsCisJMHg4ZjM5Mzg4NiwgMHhkNGZmMjIwMCwgMHgyZThiZTMyNSwgMHhhN2VjOGY1YSwgMHhkYzc5MTBlYSwgMHhmZjM4OTgzZiwKKwkweDhhYzI0NTUyLCAweDRkZTc3ZGZkLCAweDc5MWEwZjFjLCAweGZiMTAyMmUwLCAweDQ5YjUzZTRkLCAweGY4MDNlMDY1LAorCTB4OTZhMjUxM2IsIDB4Y2I1YzY5NWUsIDB4NzY4NGZkZjEsIDB4ZjZmZTI2MmQsIDB4MmE5ZDNkYjIsIDB4ZDVhOWJmZGYsCisJMHhmNmEwZTI1ZiwgMHg1Mzc5ZThmZCwgMHgwOTNmMWM2NSwgMHg1OWM1MmE4MiwgMHhjNjYyM2I5MywgMHg0NjdmZTcxYiwKKwkweDE4YmQ0ZmViLCAweDRkMjkzY2ZkLCAweDMwNDFjM2RhLCAweGIyNGYzMjI4LCAweDk3NGRjNjQxLCAweDEwYTc2NjRmLAorCTB4MmIxODZiMWYsIDB4OGIwZjQ4YTgsIDB4ZDRhNGMyYWUsIDB4YjBkMzNkM2UsIDB4NDk1OWU3MTEsIDB4MmRiOGRhOWYsCisJMHg4ZmJjZWIzOCwgMHg4OGRjNjlmNiwgMHhmNDlhM2YwYywgMHg0MzViOWJhYSwgMHhjMmNlMGFlZSwgMHg2MjM2MzBiZCwKKwkweDA2MTcyOTFmLCAweDJmYmYyZjFlLCAweDIzYWUzOGYwLCAweGIwZDM5N2U3LCAweDQzMzU2ZTZmLCAweGMzYzNlZjUwLAorCTB4MGMyZjg5MTQsIDB4YmJmZTM4ZGYsIDB4ZjZjMWQxN2MsIDB4NjJkYjYyNmIsIDB4ZWFkOWU0OTUsIDB4NzExZTgxMzYsCisJMHgxMTNkMDRiZSwgMHg2YzdkMDhmNCwgMHhlYThkNDljZiwgMHhiNTllOTJhYiwgMHhjYTdlZDEwOSwgMHg5MjRmYjk3OCwKKwkweDdhZDQ1MDY3LCAweGQwNjJiZjg2LCAweGFjZWE1MGYzLCAweGM2NjNmMjU2LCAweGRmYjE1NjNiLCAweDNiMjkzMjkyLAorCTB4OTNhMmZkNmEsIDB4MDQyZWY4ZDEsIDB4NjNlMjk3OWYsIDB4NzFjMDg3Y2YsIDB4NWFiM2M0YzAsIDB4MjkzMjdmOTQsCisJMHg2M2Y5ODNiYywgMHhjZmQxODdkMiwgMHhlZThmOWNhNywgMHhmY2M5YTY5NywgMHhhZWRkMmM1NiwgMHhmYjE4NGY4NSwKKwkweDdmZTk2OWNiLCAweGRlNWQzZTNmLCAweGNkYTY3YzY4LCAweDg2NjdjNjg5LCAweDAzOWYxYTJmLCAweDZiZTM0NTk2LAorCTB4MWYxYTNmYTAsIDB4ODk4ZDU3ODMsIDB4N2Q2MWJmMWEsIDB4ZDg3ZjU0NjEsIDB4Y2Q0NGE3MGYsIDB4MTk4MzQyY2YsCisJMHg3NWJlMWZkOSwgMHg5MWZjZDQ1ZSwgMHhmNTQ1MTYzYiwgMHg2Nzc1M2Y0NywgMHhlMGRjZmNkNCwgMHhiY2YxYTg4YSwKKwkweDJlZmU2YmRkLCAweDM2ODQxN2ZhLCAweDM0MjdjZDQ0LCAweGZlODdiZTliLCAweDRiZmUzNjM3LCAweDUzZmY3ZWQ0LAorCTB4YTE4ZGFmZjQsIDB4ZTdkMjU2ZmYsIDB4YTg1ZTg4MTMsIDB4ZWNmYjBiMzcsIDB4YTQyNWI5MTksIDB4NmY0ZDVkM2YsCisJMHg5Yjc5NDM3YywgMHhmOWNlYjE0MCwgMHhmMDNjYzBhYSwgMHgyZmQ4ZTBkNCwgMHg3YTQyOWY1NCwgMHhkYWEyMzA2ZSwKKwkweGQ2YTM3YTg0LCAweDFlYzhhYjA0LCAweDcxMzI2YTNjLCAweGYzOTBkMzFlLCAweDNmODRkMzE3LCAweGM4OWE2MmYyLAorCTB4N2I3ODE5N2IsIDB4ZDkyMmVkMWEsIDB4NDNlYTU1NDEsIDB4MjQ4ZWZhNzMsIDB4OTM1NDUzZjIsIDB4ZmVjOWRhMDksCisJMHgxZmQ2MWU2OSwgMHhiZTEwMWNlNywgMHgwNzU1ZjcxOSwgMHg0YWM1ZTcwMSwgMHg5ODJkMjc5MiwgMHhiZWE4ZmM4OCwKKwkweGE5ZmM3MmE5LCAweDhlODNmMjBlLCAweGU0ZTZhNGY2LCAweDlmODQ1M2NlLCAweDRlOWIwZTJiLCAweGZhYTZhYjdjLAorCTB4ZjBkZjY0MDMsIDB4YTFlN2ExOWMsIDB4ZGVmMzlmYmYsIDB4ZjE0OTU4NDYsIDB4ZTY1ZmQxOTYsIDB4ZTY5OWJmNWUsCisJMHhlNjdiYmIyZiwgMHg3YjdmOGE0OCwgMHhhY2FkZGY5ZiwgMHg0M2EwOGQyYywgMHhjNTE3MzllNCwgMHhhNDBlYWJmMSwKKwkweGQ4NjdmYjA5LCAweGRjN2VjMzEzLCAweDNhNmJkNTY5LCAweDUzOGMzZWQwLCAweGJiNDA3ZDg1LCAweGYxMGQyMDcxLAorCTB4ODhmMjgxZjEsIDB4MDE2OWY4NTksIDB4ZWQxZjlkMzMsIDB4YjgyN2RmMmEsIDB4ODBkZjIxZDAsIDB4ZGQ5ZjRhNmQsCisJMHhlNjQzYmZkMiwgMHhkYTNiMjBmYSwgMHgwMDkzN2Q2ZiwgMHhmNzQ0MzhhMywgMHgxZGUzM2RmMCwgMHg5NTVkZmU4NiwKKwkweGVjYmJmOGNiLCAweGY5N2Y5ZTg4LCAweGFmMDJlMWZlLCAweDkwZjYyMGY3LCAweGUyMmNlNzBlLCAweDE3ZmMwNjNjLAorCTB4NDJmZTVlYTUsIDB4ZDI0ZWU1ZWEsIDB4ZWJmOTExYzcsIDB4MjY3NmJiNTUsIDB4MmU3ZTdmOTEsIDB4YzZlM2Y4NDcsCisJMHgzYTQ5ZGZmMywgMHhlNTRkMmVmZiwgMHg5ZGRkYWZmMywgMHgwNDdjZmViMCwgMHhhZTQyMmFkZSwgMHhlMzU1N2VhOCwKKwkweGY5OTFmNWMwLCAweDM5YzZiNWNkLCAweGU3NDY4YWZjLCAweGE4ZTUyNzU4LCAweGY5MjNiNWEyLCAweGZlN2Y2MDRlLAorCTB4Yjc1YzM0YzMsIDB4N2I5NWQ3NzIsIDB4YTZmYmQwMGUsIDB4Njc2MTRjOWUsIDB4ZDJkZmJjMDMsIDB4ODJlMzgwZjcsCisJMHgyODgxN2ZhNSwgMHhjZDMzYjZiZiwgMHhhNjc1NzBjYywgMHgwOTYxMzg4OSwgMHhiYmU0NGUzNiwgMHhiODAzZTgyNSwKKwkweGRhNjM3ZGE4LCAweDdjM2ZlMjJjLCAweGJmYjA1NjFlLCAweGE0Y2MxNWEwLCAweGIzZmExNmJmLCAweDMzZjQ4NGNjLAorCTB4M2Y2Nzc5ZTAsIDB4NjljZmVkMWUsIDB4MWI3M2VmM2EsIDB4ZmI3ZWY4ZjgsIDB4OTIyYTdiZGQsIDB4ZDYzNDBmZDgsCisJMHg4MTQxZDYzMywgMHgzZGVmM2YyMCwgMHg0OTljYzA1NywgMHgwYWU5OWY3OSwgMHg5ZmI4MTdmYiwgMHhlZWZiOWU4ZCwKKwkweGVjOTliYzFlLCAweGJiZGZiMWIwLCAweDBlZjRiZmUwLCAweGYwMjJjNWYyLCAweGZhYzZiYWYwLCAweDExMzRkNzQwLAorCTB4NGIwM2Y5N2EsIDB4NDRlZDFkMmYsIDB4YTY2ZDBkYmYsIDB4MzY4NWU1MzAsIDB4YmRmMmIzOWMsIDB4Y2Y3NTc3NGEsCisJMHg5YzIzMGZjYiwgMHg2NmY5YWYxZiwgMHg3ZjcwODJiZiwgMHhiZmU3YmNiNCwgMHgzYmYzZTAwZSwgMHg0NzQxNTI5ZSwKKwkweGZkZDlmMWJlLCAweGJjNDQ3YTVhLCAweDJiZmVlZTc5LCAweGFmZTg2ZjJjLCAweDI5MjRmZjNjLCAweDFlYWM5N2E1LAorCTB4ZDYwZjkzOTIsIDB4MzIyYTM0YmMsIDB4OWY0ZTQ4NWUsIDB4Zjc0ZTkwOTksIDB4ZTJkMjkzM2IsIDB4YzZjNDZmZGUsCisJMHgzZjg4NmJhNSwgMHhmNjc1N2U1OSwgMHg1Y2JlMGQ0YiwgMHhjMzcyZjkyZCwgMHhmOWY5YTMwYiwgMHhmM2RlYTQ4NiwKKwkweDJhZjNmZTg4LCAweDM0MzZjMWU3LCAweGYxYWYzOTViLCAweDM1ODdlNDhlLCAweDMxMzM3ZTJmLCAweDhmNTdjZjMyLAorCTB4YTk1YmE5N2MsIDB4Zjc0YjcyNzUsIDB4MDlmYTNhYTYsIDB4MWU1ZTRlZmIsIDB4ZWFhYjcxY2IsIDB4MWU3M2EyY2YsCisJMHgzMjY5ZmFiZSwgMHhmOWJkZjdmNSwgMHg2ZTA3OWYyZCwgMHhiYmY4M2ViYiwgMHg3ODkxNzkxMSwgMHg3OWVhNGFhZSwKKwkweGM1NGFmNDk3LCAweGY5NGVhYjAxLCAweGI5MDM5MmFjLCAweDdlYzJlZTI3LCAweDFmZWEyYjY1LCAweDU3MjVjZjNjLAorCTB4MjlhN2IxYzcsIDB4MDBhODNiMWUsIDB4YzMyYWI3ZTUsIDB4MmJlNGFjMDksIDB4ZTUyMDk0MWIsIDB4ZWUzNGQ2YzMsCisJMHhmYjE4MzJkZCwgMHgxNjE2ZWE2YiwgMHgyNTU2YmIxMSwgMHg1OTU2N2QwYiwgMHhiMTM3MDRhZiwgMHhlOTg3M2UxZiwKKwkweGEzNjUyODVjLCAweGJmZWU1MGU0LCAweGQ3NzhlM2U1LCAweDg1ZmViMTcxLCAweDNjZjZiMDhkLCAweGY1NWQ5ZGM2LAorCTB4MzgyMDVlNWYsIDB4Mzk1YTM1ZDYsIDB4MjkyMTc2Y2YsIDB4ZmI4YzE5NmMsIDB4ODRhYmRhNWUsIDB4ZGM5ZjdhMDIsCisJMHgxYzQ0Yjk3NiwgMHg5OGY0MmFiNiwgMHhmNTVkZjY4NSwgMHhlNDExYzJkYywgMHgzODFkNzYzNiwgMHhiOTNkMjE2ZCwKKwkweDU5YjFlMWFhLCAweDMwOTE3OWYyLCAweDhiOTY0MWZmLCAweDk1OTViYmI1LCAweGQ1YWM3OTkxLCAweGE0NDIwZWU4LAorCTB4MDJmODQyZmQsIDB4NDBlYWZiMTMsIDB4MmNmYTQ5NGUsIDB4NDM1ZTFhNmIsIDB4YjZiZDQyZTgsIDB4ZjU4NTY5ZmYsCisJMHg5N2UyNDJkYSwgMHhmOWVmMGUwZiwgMHhkZjY4NmZkZCwgMHg5MjNkZmY4MywgMHg3ZDc0NWZmMSwgMHg4MDVmMDdmOCwKKwkweGI5NGE4YmZkLCAweDYzM2M1YzBmLCAweGIyYjJmOGExLCAweGRlMjE3Y2MxLCAweGJhNjM1MmZkLCAweGNmZGExZWVmLAorCTB4ZmQ2MzhmODgsIDB4MTAxNjJkZWUsIDB4MTBkOTNmZjcsIDB4ODJlYzllN2MsIDB4MWNiMmM3YTMsIDB4OWE1N2Y5ZTEsCisJMHhjZTY4ZjA4MCwgMHhlYzBhY2IxZSwgMHhjOGNlNDhkYiwgMHhjMTFkYjg1ZSwgMHhiZWY1NzE3OCwgMHg4NGYxOGQ3NCwKKwkweDc4ZmFjNGIxLCAweDM5MjFhMGY3LCAweDU4NzdhMjVlLCAweGU5NTc5ZjI4LCAweDVmMTBiNGVlLCAweDE3M2Y4NjU3LAorCTB4OWY4ZGZmZjcsIDB4ODljNmYyY2MsIDB4NTc0ZTVmYjcsIDB4MjczZjMzYTQsIDB4NjQzN2RlNGEsIDB4MzBiOTYxOGMsCisJMHg5MGMzZGFmNywgMHg2MGJlZTU4ZCwgMHhhOWQ5MGY0NSwgMHgzYjkxMDcwZCwgMHhiZmI3YTIxNCwgMHhlYzBlZTA4NywKKwkweDdjZTlkMDRmLCAweDlmM2UwNzI1LCAweGNmYjExMWQ4LCAweGY0N2NhNTFmLCAweGY5NWU1OWU2LCAweGYwOTlhYzY0LAorCTB4YjE5M2VmYjksIDB4ZjNkZjUyNWEsIDB4YWFjNzRjYWUsIDB4OTc5OTc5NzgsIDB4ZGVkZDg1ZDMsIDB4MThiYmVjOWMsCisJMHg5ZTA5MDcyZCwgMHhkOTViZWUzMCwgMHgxNDdiZTc2NCwgMHgyZDJkODM5NCwgMHg3MDcyOTE0NSwgMHhjNDVkYWFjNywKKwkweDA3YWE0ZGU3LCAweDFiMmEwMjI1LCAweDc5YWJmYTE3LCAweGM4ODc5MjdlLCAweDBjY2UzNmEzLCAweDRlYWExZjEwLAorCTB4ZmMyN2YzMWYsIDB4Mjg5YmY3MTUsIDB4ZmY1MDhmZWYsIDB4M2ZmNzRkY2QsIDB4MzlhYzcyNGQsIDB4MWU2NDY1NjAsCisJMHhmMWQ0ZDJhNCwgMHhlODg1MTZhYiwgMHhhMjZiYzNiYSwgMHhmNTgxMGFmZCwgMHg3NWYwZWE5NiwgMHg5NDU1M2M3MCwKKwkweDdiZGM1M2E5LCAweDIwMmNjMjc0LCAweDU5YmNmZDNjLCAweDM5YWZiY2UxLCAweDhiMzViZmQ1LCAweGU1NWM3YmU4LAorCTB4MmZhMzk2ZjksIDB4YmJiZWU4MDQsIDB4MTExNDFjNmIsIDB4N2Y3OWM2N2MsIDB4MmEwYzJlM2UsIDB4MDBiOWIzYWUsCisJMHhlNmVkYjQzYywgMHhjNGRkNGI4MywgMHgzOGNmM2ZiZiwgMHhkZDg2N2VjNiwgMHgyYmQyMDIxMywgMHg1MDNmZTgzNSwKKwkweDFmOWVjN2RlLCAweDA5M2FkMzBhLCAweDE1MjJiZTM5LCAweGVlOTM1OWY3LCAweDU4YjRiZTY0LCAweDI3Y2ExZWZkLAorCTB4MzZmYjIwM2QsIDB4ZTA4YWI3Y2QsIDB4OGEyN2E1YjMsIDB4ZjVjODdiZjgsIDB4NDhiYWY5ZTUsIDB4NmY3NGNkZmUsCisJMHg0YjdjZTdlOSwgMHg2OWYwNTk5NywgMHg3MWMwMGRkNywgMHg0Y2ZjZDcyMiwgMHhlMzJmMjFhNiwgMHhiODNiMDZjZCwKKwkweGQ2NTQ2YWFkLCAweDQ0ZDdkYTQ2LCAweDc5ZThkYmYwLCAweDFlYTVjMWQ3LCAweDJkOWNkZjgyLCAweDkxMzMzZGY5LAorCTB4ZmY3NjIyZTUsIDB4YTk5Zjg4OGYsIDB4NjJiNGMwY2UsIDB4OTllMTE2NmIsIDB4OWZmN2E2ZjAsIDB4N2JlNGExZjcsCisJMHhmOWEwMWYwMywgMHgxMTVlNDg3MywgMHhmY2JjNmY1NCwgMHhmOGJkM2Y5MiwgMHg3Mzc1ZDEyYywgMHg5NWM3MmZhYSwKKwkweGMyYmNkN2NmLCAweGM2Mjc3NjI5LCAweGZmOWMzYjk1LCAweDMxYjdjOTAxLCAweDg5ZjA5NWJmLCAweGZjZDE2ZmVmLAorCTB4NTFlZmMyMzYsIDB4YzViMzVmODksIDB4ZmU1OTNiYTcsIDB4ZGZlZDNhN2QsIDB4ZjE0MWJlN2IsIDB4M2M4ZGY3Y2YsCisJMHhmZjZjOTZkZiwgMHhjZmVmOWVmNywgMHg1NGU2N2NmMiwgMHgyZjVhMzdlNCwgMHgzOTllNzgxOSwgMHhmZTIwMTgzOSwKKwkweGEyODI0ZGFiLCAweGE4ZjhmODRkLCAweGU0OWI5NjZiLCAweDZmOTFjYjZlLCAweGQ3YmM5Mjg2LCAweDQwZGM3OTI2LAorCTB4OWJlNmIxNzksIDB4NmZkYzkxOTYsIDB4ZjMyNzc0MTksIDB4ZTQyZjE3ZmYsIDB4ZmIxMWFhMTYsIDB4N2YxN2E3MjQsCisJMHgyZjNiZTc0NSwgMHhlMmM1YjFjZiwgMHg3YzczYTFjZiwgMHg5YzY5Y2YyYywgMHhlZmJhNDk2YiwgMHhmOTExZTkyZiwKKwkweDdlOTIxODI2LCAweGQ3YjNmYzVkLCAweDcxOTRkN2I4LCAweDYxZGE0NzllLCAweDhmMzhmMzhjLCAweDVjODkwZGQ4LAorCTB4ZmE1N2I2N2YsIDB4OThmODFhZTEsIDB4ZDFlMGVjN2YsIDB4YzJmMmJmZDksIDB4YTkyYmFhMDksIDB4MzZjMTMxNjksCisJMHhiNTI1M2UzYSwgMHg5MmZkZWUyMiwgMHgwYzExOTM1NSwgMHhiMjE4NmQ3YSwgMHg4ZDM0MzVkMywgMHgzOWQ4OWYzYiwKKwkweDNlZTExNmFmLCAweGY4NTUwMTA4LCAweDBjZjlkMTY5LCAweDI1NWUyYWYwLCAweGRhZjE4ZjMyLCAweDYzY2JlYjlhLAorCTB4MjFhZmUzM2MsIDB4NjNjZDhkNzksIDB4OTY5YjBlNGMsIDB4MjNhZTUyNWIsIDB4YmNkYWYxOWYsIDB4ZDE4Y2Y5YjgsCisJMHg1MTcxZDExOSwgMHhjMGNlODY0MSwgMHg3ZjA0NzI4NSwgMHg0MTg5YzI4NiwgMHhmMTgzMzc5MSwgMHgyNmVhYmY5NCwKKwkweDlmZTM4NTViLCAweGRlNTk5OWUzLCAweDliMWNhZTk1LCAweDEzZTBlZDBiLCAweDNhZGI2YzRmLCAweDg0NzBlNTBkLAorCTB4NmJmNTAzYzAsIDB4ZjFmNWM5ODgsIDB4ZTZmNTA3ZWMsIDB4YzMxYjVlNDcsIDB4M2RlYTM4N2UsIDB4NGUwMmYzOTUsCisJMHgxZDBjNGIwOSwgMHgxMzdmZDA4YiwgMHgyYTI3YTU0MSwgMHhmNjNlMTJiZiwgMHhkYmYxMzI2ZCwgMHgyZGZkNTQ5ZSwKKwkweDliNGY0ZmEyLCAweDA5Mjg3NWNhLCAweDE1YzU4NzVhLCAweDkwMGVlZTQ3LCAweGUwNzY4MDdmLCAweDNlODQzMzlmLAorCTB4N2I4YTM1YjcsIDB4NjVlZTliNGIsIDB4NzRlMDk5M2QsIDB4ZTQyMzUzOGUsIDB4ZDg0MzJmMjQsIDB4MWY2MzhhYTUsCisJMHgyY2EwYjUwYywgMHg0YzlkMzI1ZCwgMHhkN2Y1YzdjZSwgMHhhNjRmYWZlZCwgMHg3M2RhZGUzNCwgMHhkMmE0NGY2ZiwKKwkweGZmMzUzYjlmLCAweGZmM2MwYzgyLCAweDUxYWVjYTE3LCAweGI3NWJmMjM2LCAweDdlMTJjNzA2LCAweGFlNmNlMTQyLAorCTB4MjBkMDJjY2YsIDB4ODdmNjE1YTAsIDB4M2MyOWVhYTcsIDB4OTUwNGJhMTQsIDB4NWI3MWE1NGYsIDB4MjU3ZTM0ZDAsCisJMHg1ODU1NWZmMSwgMHgzMGY2OTc5YywgMHg2ZGNjOGFhMywgMHhkNWRmYjg1NCwgMHhlYjRhOTM1OCwgMHg3OWI2ZmQ1NSwKKwkweDk3YWZlOTEwLCAweGYzOWY4NDMyLCAweGYxM2NkNWUyLCAweGNkMWEwNmJlLCAweDI1YzMzZmJmLCAweGEyNjgyYTk5LAorCTB4MzI0YmUzN2MsIDB4NTU3NWQ5NGYsIDB4ZmVjNjc5ZTUsIDB4NTUzMzhkMDUsIDB4N2U0MWYyMjcsIDB4Y2UxMWM3NzgsCisJMHg3NTU5MzY4YiwgMHg3M2MyNmZhMiwgMHg5NGQxZjAyMCwgMHhkNTY4N2VjMCwgMHg3NjQwZDllMSwgMHgxZTA1ZGJhZiwKKwkweDI0ZjdjNzA1LCAweGZjNDQ3Y2Y2LCAweGQ1NmNkM2QwLCAweGMxMzczZWU5LCAweDcxNTIwM2I5LCAweDFlYjIzZGZkLAorCTB4YjYxOTE3MmMsIDB4ZGNmN2QxZGUsIDB4ZTlhMTJmZDgsIDB4MjQ0Mzk0OTcsIDB4ZTU3YmUwYmUsIDB4NGMwNzZkMDQsCisJMHgzYmUyNDQ3NywgMHhjOTU5ZDg0OSwgMHhjMzEyN2I1NywgMHhlOTY3YmEyNiwgMHg1OWVmZGY0MSwgMHg0ZTBmYWI4NiwKKwkweDM4MGQ3ZGUwLCAweGVjMGVkOTczLCAweGY4NWNmNGIxLCAweGU1YzMzYTcxLCAweDA1YzgzZTI0LCAweDhkMzQyNzAxLAorCTB4MjZhZjQ5ZDYsIDB4OGU3Y2JkMzgsIDB4MDllZWE3MDQsIDB4YWFlMWZkMjgsIDB4MjA4ZThiMWEsIDB4YTRhM2NmY2EsCisJMHhjOWY0YTZjYywgMHg1ZjYyNTU3NywgMHhiMGIyODZkZiwgMHhmY2E0MWIyNywgMHg5ZDJiNmViNywgMHg4NTQ3ZDkxNiwKKwkweGZkZWZhOTMzLCAweGY4ZTI3OGZmLCAweDljMjFkYWI2LCAweDQ4YTgwYmZmLCAweDQ5YjYzYjdmLCAweDIxNGU3NGE5LAorCTB4ZGUxMjI4NTcsIDB4MDc4MTQyOGMsIDB4ZGJiNDBiYWEsIDB4N2NlZjc4YzQsIDB4MmE0NzczZTQsIDB4ZTc5ZTdmZGIsCisJMHhmM2VkM2FiMSwgMHhmODVlNThiMiwgMHgwZmYwZDE3ZSwgMHgxN2MyNTIxZiwgMHg3NmQyNDY2ZSwgMHhjOTRiZTYzZSwKKwkweDlhNzU3M2M3LCAweDg3NWMzYzhlLCAweDNjYjhmZWYzLCAweGZkOGMyYTM0LCAweDc5ZmZhYjE2LCAweDNmNTdjZmUyLAorCTB4ODBiZGIxNWMsIDB4YjMxZWVmZjQsIDB4NGZmNDljYTcsIDB4ZjY3MWUwNDcsIDB4ZWIzNDVmY2IsIDB4MGVlNDIyZGIsCisJMHg3MjY0ZjQ4NiwgMHgzZWNjNjFkZCwgMHgzZDM2ZTc1NSwgMHhmNzc2ZmU0ZSwgMHhmYmE3NDU0MSwgMHhjZjczNmVmNCwKKwkweGIyYmI4MjUwLCAweGQ1MGIzM2U5LCAweGZjMWQ1NjYzLCAweGIyZWJmZDg0LCAweGRhNWVmZjRjLCAweDM1NjM1MjZmLAorCTB4ODY0ZGNmZDcsIDB4ODczZjVjMWQsIDB4MjBlYjkxN2EsIDB4NGZhMTZlNDMsIDB4ZjUxZDlmMmUsIDB4MWQwNDc1NmMsCisJMHgwNmYyOTNkZSwgMHg2NDYxZmUzZCwgMHhiY2E0OWFiZiwgMHgxYzM4YTYxZSwgMHg3NzJkZmRkYiwgMHhmN2Y1YTcwYywKKwkweGYxODBmY2NiLCAweDE5MWMzNTVlLCAweDA0ZGY3ODRjLCAweDNjNmI3MWFmLCAweDVjNmEwZWVmLCAweGFlZjc5Y2JmLAorCTB4YzQ2ZjVlZWQsIDB4ZmU1MmQzZmMsIDB4NTZmZGNiNGYsIDB4MjBkZmZhNjcsIDB4N2NiNmQ3NzgsIDB4YzJkMmExNmEsCisJMHhhMWExZjNhYSwgMHgzNDg2ZjcxNCwgMHg0NzE5YzUzZCwgMHg2ZmNhZjQ4ZiwgMHg2OTU1M2M4YywgMHg1ZjlhMTYzZCwKKwkweGFmNTgxMTc1LCAweDUzNmJiZDIwLCAweGJkMmY3ZTkwLCAweDM5NjYzOGRiLCAweDM0OGZkZjNlLCAweDhiM2IyMTQ5LAorCTB4ZTNkOTJhZjEsIDB4NjBkZjY2ZmQsIDB4Y2VmZDVmOWEsIDB4OGY0OTYzZDcsIDB4ZjAyMDI0MWQsIDB4YWYzNzVmN2YsCisJMHg0Mzc4NDYxZCwgMHgyNDRlMmZmZSwgMHhhYzBiZGIzOSwgMHhjZDM5MGNkNywgMHhmN2M1MzkyNywgMHg4YmZmODlmMywKKwkweDdhY2I5ZmE4LCAweDdkYTU4Zjc5LCAweDdlZTVjYjFlLCAweDIyNWM5MDEzLCAweDIwM2NiM2ZmLCAweGRmYzkzYmZmLAorCTB4M2NhMjc3Y2IsIDB4NTlhM2ZiZjAsIDB4OWJiNGY3Y2UsIDB4YTMzN2VjYmMsIDB4ZmRjOTFmNWUsIDB4ZGZkNGM1ZTIsCisJMHg2NGVhNWVkMywgMHg4NDNhYTczOSwgMHhmMGQ3OTI0MiwgMHgwNDI3NWUxMSwgMHg0NWYyZDc0MCwgMHhmZDIyZjgwYSwKKwkweDY0OGNiY2ZmLCAweGYxMjQyZjcxLCAweGQ4NDMzOTM5LCAweDllOGU1MDgzLCAweGQ4NzNjMWUyLCAweDNlNGEzNTU1LAorCTB4ZThhNWVjMjIsIDB4OWE1YTdiNGIsIDB4YmY2ZDk3ZjksIDB4MjY1MjQ2OTgsIDB4ZGE1Mzg0ZWQsIDB4ZDY3OGZmNDksCisJMHg2ZDI4ZmZmYiwgMHhhN2Q3ODZkNSwgMHg3M2MzYTgyYywgMHhmMmE1Mzg2ZSwgMHhmNzE5NjFmOCwgMHgxYzlmMjU4NSwKKwkweGIyMWFmOTkxLCAweGE4OWE3YTFiLCAweDEzZTdhNjFmLCAweGU1ZjU0ZmIwLCAweDRiZWJiZDEzLCAweDlhNGQxY2M4LAorCTB4YjUyOGUzYjMsIDB4MTJhMTdjNTMsIDB4MmRhNmRiNzIsIDB4MTY2YTNmNmIsIDB4ZmM0NzllNjIsIDB4NmU2NDcwZDcsCisJMHg3NWUzZDUxZSwgMHgwMjQyYjM5ZiwgMHg2ZGYwZDg4MiwgMHgyMjJmNDdjZiwgMHg4YzNlMWUxZSwgMHhhNzYzOGZmOCwKKwkweDdmY2MzOGYwLCAweDA2MGQ3ZmU4LCAweDZlZjFmZjc3LCAweDQwOTFlYTQ1LCAweGM3ZTI3Y2QyLCAweGFmYjUwNmFlLAorCTB4MjI1NDgwOGYsIDB4ZmRkZjUzNjMsIDB4MDA3YjdkYTQsIDB4Njc3ZmU3NmQsIDB4MjI2NzA3N2EsIDB4ZjAwY2NmM2UsCisJMHhmYTdkZGI3MywgMHhjYjEyNGNkYiwgMHg1YzQ1NjdmZCwgMHhlNmYxNjBkZiwgMHg2NDM0ZmYxMSwgMHg4NzFiYTg2MywKKwkweDIyOTlhZDRmLCAweDg1NjQ1M2VmLCAweDM3OWNmN2I4LCAweDE4MzkwYTY3LCAweDBhZWQ4MDE1LCAweDMzYWFlYmM3LAorCTB4ZDRiZjc0ODgsIDB4ZTgyZDdhYTAsIDB4YzA4NDVkMmYsIDB4NmZhNGE5OTIsIDB4MDFmNzVlNjQsIDB4ZmM1ZTNmOTAsCisJMHgyODNjZmE0NSwgMHhkZjkwMGZiYiwgMHhjMWViNzY4MiwgMHgxMWQ2YzQ1ZiwgMHgzMTZmZDk3OCwgMHhlYjAwNThmMiwKKwkweDJiNWZjNDRkLCAweDBmZjgxNDliLCAweDY3YWFjNWM0LCAweDkzYWZlN2EyLCAweDFiYWJmMjc1LCAweDhjMWIxZDc3LAorCTB4NWNmMzVkNzQsIDB4MmRmOTM4Y2MsIDB4ZTIxMWZmN2MsIDB4NWQ1ZDc4NzgsIDB4Y2RjMzNkNzQsIDB4MTk3ZmQyOTksCisJMHg3ZmM5YzMwZSwgMHgzZDYyYmU0MSwgMHhkNWEwZDY2MSwgMHg2MGFjN2M4YSwgMHhmNjIyNDMxNCwgMHgwYmUwNDk5MiwKKwkweDY3Y2IyYmY1LCAweDhhNmY2MWJlLCAweGI5ZWE1ZTg1LCAweDk0YTc1YzA0LCAweDk0NzQzYmJiLCAweGQ0YTY4MWVhLAorCTB4OGY2ODc5NjUsIDB4OWYxODlhMjksIDB4ZWUyNTk4ZDIsIDB4NGFhMGI0YTcsIDB4YmM5MzBjNzUsIDB4NzdlYzU5ZmUsCisJMHhhOTY3YmMwNywgMHhkNDk1NjRkZSwgMHg1ZmM0ZTA5NywgMHhkM2M4ZmJjYSwgMHhkZGZlOTJhZiwgMHg5ZDZjNjBlYSwKKwkweDk1NTNjMGE4LCAweDgyMTkzNzljLCAweGNhZWZiNDM1LCAweDY5ZGVhMmRkLCAweGY5ZThlZWVkLCAweGViNGYxMjU1LAorCTB4OGM3ZDNhOWUsIDB4YTExNTg1ZDIsIDB4YTc4OTcxOTgsIDB4M2E5OGM2YWEsIDB4ZGMzOGIxMTYsIDB4YWRlZjI5OWYsCisJMHhmNWZiN2Q2NCwgMHhkMWZjNWJkNiwgMHhiNzhkZmMyYywgMHhmOGM2M2FlNSwgMHhlZjkxNGNlNiwgMHgxMDYzYzRhZCwKKwkweGQ1MDVkNzdkLCAweDJhZDFmMTIwLCAweGZjMmM5MDI1LCAweGM3MmM3MDVlLCAweGIwNjdkZGYzLCAweGJkY2ZhYzgxLAorCTB4M2VlOWUyNWYsIDB4N2U3YzNmYzksIDB4MTllMmJmN2MsIDB4ZmRjNTdkZjEsIDB4N2Y4NjhiM2YsIDB4ODMyY2Y4MGQsCisJMHgwZDgzZjlmMSwgMHhkZTUwYjAzZiwgMHg1NmRmOTYzMSwgMHhmZmQ5OTlkNSwgMHgxM2YxMjM1ZCwgMHg3YTZiNWZjYiwKKwkweDg1ODc2N2Y5LCAweDdmMmM1YmVjLCAweDZiOTVmYTU1LCAweGY2ZmMyZmMwLCAweDBkZjg1YmZmLCAweGNiOTFhZjNhLAorCTB4Mzk4NzM1YWMsIDB4MDlmNmI1M2YsIDB4YWJmOTQzYzUsIDB4ZjdhYjlkNmIsIDB4N2Y3Y2YyM2MsIDB4MzU5ZWI5ZWYsCisJMHhjNjA2M2RlOCwgMHhhNGU3YmQzMCwgMHg2M2JkMTc1ZCwgMHg5NmJkZWRmZCwgMHhlNzI2YmNkZSwgMHg2NmI3MmYwNSwKKwkweGUwZGQzZTczLCAweDY2NzVkOGFiLCAweGY2N2RiZjQ5LCAweGJkN2ZjMjUzLCAweDI3NjI1OGQ0LCAweGE0ZmJhM2ZmLAorCTB4OWNlOGEzYzksIDB4YzAyZTRjYWYsIDB4NTY2ZjhmZjMsIDB4ZWU5MWZjODEsIDB4MDMzYmUxYTYsIDB4YTllMTdmMDgsCisJMHg1Zjk0YzVhMiwgMHhlZDBhN2YxZiwgMHhiNzA3ZGQxMywgMHgwMjU3ZmQxNiwgMHhkMjdiMDdkZiwgMHhiNjY3ZWU0OCwKKwkweGJkZmI0ODhkLCAweGZiNjFkNzgzLCAweDcwYjI3ZGRlLCAweGU5ZTkzOTY3LCAweGI0NDVhNTkzLCAweDU0ZTM4MmFlLAorCTB4ZWQyODVlOWYsIDB4NDJjOWY1NTQsIDB4YmQ4NDQ3N2IsIDB4YzhhNjRkZmEsIDB4ZmY3MTZmY2YsIDB4MWI4YTUxZmUsCisJMHg3YjM1ZWY2NiwgMHhkYjMyM2YyOCwgMHg4MDk0ZGZlYywgMHhhMGJlMTVmMCwgMHhiNzcxYWE3OCwgMHg5ZTQ3ZWQ2MywKKwkweGJlNTE3NWE0LCAweGYzOGFjZDI4LCAweDhkMDhlOWZlLCAweDE4NTFlZDU3LCAweGIyYTZlZWZlLCAweDNmNjQzZGJjLAorCTB4ZWM4N2FhODMsIDB4N2RkMzc3NjIsIDB4MWY5MjBmZjksIDB4ZmU0MGZjZDQsIDB4MWRmYjExN2QsIDB4NjZmYTE1NGIsCisJMHhiNjY2MGRmNiwgMHhlYzgzOWRkNywgMHhiY2E3MmViZiwgMHhlYjE3NzdhOCwgMHhmYjQzY2U4ZCwgMHhjMzdkZmMyYywKKwkweDc4ZGMwNTFlLCAweGEzZWU2M2NlLCAweDNhMWUxMzJmLCAweDUwYjY5YzBmLCAweDcwZDI1MDEwLCAweDQ3MTFkMmRhLAorCTB4MjVlZDFiN2YsIDB4OWNjMmYzMGMsIDB4ZTE2MWRkYWYsIDB4N2ZmZGNkZmEsIDB4MmI3OWQwYjAsIDB4ZjM4NGZiOWYsCisJMHg3ZTI4NmI2ZiwgMHgxOWVmM2YyMCwgMHgzYTc3YmY5NSwgMHg4NWFhZmNkYSwgMHg0ZWIyYjRmOCwgMHg5MTU5MDE4MSwKKwkweDI3MWU2NmUzLCAweGNmZmQ0YWZkLCAweDM2OWU4NGVhLCAweGU0ODU3ZmY4LCAweDBkZmY4Mzc3LCAweGY1MjE1ODc5LAorCTB4ZTM1YjdkZGEsIDB4ZmZhMWJiZjMsIDB4OTZlZjA0MWUsIDB4MDNkZWI4NDEsIDB4MGViOWNiNzUsIDB4ZDExZDgxZTksCisJMHhmYzUyNTdmMywgMHgxN2NkMjM3YSwgMHhhOWYyYmVmYywgMHhiZGQ1ZjFlOCwgMHhmZDYwMWU3YywgMHhiZjQ3YWIxZiwKKwkweDJlN2ZmNDMzLCAweDVmOWYxMmU0LCAweGE2MThhZjBlLCAweDdkN2QzY2ExLCAweDg4MzBjZDdhLCAweDI5M2NhZjkzLAorCTB4NmVjMzA2ZmQsIDB4ZDg5YjBlNWYsIDB4ZWJjZWM1ZWUsIDB4MjE2MmJjNmEsIDB4ZmFkNTViN2IsIDB4Njc3M2Y2MjcsCisJMHhmNGM5N2QzNSwgMHhlMTZhNmYyOCwgMHhjMDViZDk3YSwgMHg3OWYwOGViZiwgMHg0OWRkOTM0YiwgMHg4Nzc5NzZmZSwKKwkweDlhZjMwM2QwLCAweDQyYTBjMWFjLCAweGEyNWFhMWUzLCAweGYxNjFmNzczLCAweDkwZTA0OWJkLCAweDQ4MTZmZWMyLAorCTB4ZTI1MmI4YmQsIDB4ZTNjNGE1NzUsIDB4MDZlMzhjNGEsIDB4OGM4YzdkNTMsIDB4YmM2NTJiZTMsIDB4ZDc2NzNhYmUsCisJMHhhOTI5MmEzMSwgMHhkYWViZTM5NCwgMHgxZTEzMjY4ZSwgMHg1YmQwODFlNywgMHg2ZjQyNDJmMywgMHhlYzMxZjQxOSwKKwkweDQwYmVhYzUwLCAweGQxMGY3NzBiLCAweDk1OTM2ZDc3LCAweDRiZTdkNmViLCAweDBlYmYzNWJkLCAweDVmZDI5NmY1LAorCTB4YjQwZjc0N2YsIDB4N2VmMWZjOGIsIDB4ZGRhYzc3MDEsIDB4OWU4ODZjYWQsIDB4ZmMyMDFhZWYsIDB4N2ZkMmNiZDgsCisJMHg0ZDEwMWMyZSwgMHhiMDFlZjI5NywgMHg5ZTdmN2U1MywgMHhmYzgyN2FhZSwgMHhmYjQ2YmI1NiwgMHg3ZTQ1OGViNywKKwkweGY1NWJmNWMzLCAweGVhZjEyOWUxLCAweDRkZjY4Y2I1LCAweGZkMTgxNzE5LCAweGMzNjc5NDA1LCAweDBlZTcyMWY5LAorCTB4ZmZkYzY0NDcsIDB4N2Y4NDAzOWYsIDB4MWFiMjY2YjMsIDB4YzQ0NmJhMjAsIDB4YjMwYTBiNDksIDB4NzM0OWM2ZTIsCisJMHg4NjM3ZjQwOSwgMHg3MWIzZjdkYywgMHg3NzkyNzE5MSwgMHhiN2UyMjhkNywgMHgyY2VmNzU3ZiwgMHhhYWE2YmFhNywKKwkweGJhMmZhMTNhLCAweDI5YmFlMTI2LCAweGZiMDNmN2U0LCAweGQ2NzU1NWQxLCAweDU1MzNjNTIwLCAweDdkZmMyZmM4LAorCTB4YzkwOWYxMWEsIDB4NDY1MjkzNjMsIDB4YzY3MTgyN2MsIDB4NDJmZWI0ZWQsIDB4ZjNjNGVhYmEsIDB4ZmI0NDZjMmYsCisJMHgyYzJmY2I4ZSwgMHhhYmY5OTJmZCwgMHgzNzM4ODQ2ZCwgMHhiYzQwNmRlMiwgMHgzNzg4YzNiOCwgMHhiZjBhYWYyYSwKKwkweGE5NWU3OGQ2LCAweDUxZGM3MDc1LCAweGI1ZWEyNGQ5LCAweDMzN2M4ZTFiLCAweGVkZTEwYjM0LCAweGQwZjNmZTZlLAorCTB4M2U0ZjU0ZTUsIDB4ODZlN2Q4NDAsIDB4NTRhN2QwZTIsIDB4MWVmNWY0NTcsIDB4YjVmZjVjNWIsIDB4YjUyYmZmNTcsCisJMHhlNjk1MGYyYywgMHg2YmY2NGM4ZSwgMHg3OTFmYTIwZSwgMHhiN2QxZWExMywgMHhhNTM4ZTBiZiwgMHhiZGMyNDhlMSwKKwkweDVhZWJjZjk0LCAweGZjZTYxZmUxLCAweGMzNTUzYTFlLCAweDM3ODNmNjI2LCAweGU0YjcyZDQxLCAweDhkZmE0NTFmLAorCTB4NGVhMjlkMmIsIDB4M2Y2OTQxZTksIDB4ZjIwOGZmYTksIDB4NzczODgzZjUsIDB4Zjk3ZjYxNDYsIDB4ODU0OWY0MzcsCisJMHgxMGQ1ZWJlNCwgMHhlOTU1MzJkOCwgMHhhNDJhMDdhZiwgMHhkZmNkYWNkYywgMHhmNmFlODViNSwgMHgwYWE3ZmQ2MywKKwkweDMxMTg0ZjI5LCAweGY1OGNiZGIwLCAweDg2MzNmZTlmLCAweDRlZGZhYjVmLCAweGJiYjhmZjY0LCAweGFlNTI3NTRkLAorCTB4YWJmYmYxMTksIDB4NjIyN2U0NDEsIDB4MjcxZDkwNWMsIDB4ZTQ4NWZiNWYsIDB4N2Y3OTRlY2YsIDB4NjU0OTNkNWMsCisJMHg4YjI2OTlmYywgMHgxMGI3ZjBkNiwgMHhkZDM3Y2M4ZiwgMHhiMjQxMWRhNywgMHg1Zjg3Nzk2ZiwgMHg1ODNlMjZjZCwKKwkweGRlZmEzYmJiLCAweGU3ZThlODg5LCAweGM4YTBiMWJhLCAweDdjZWM4NTQ3LCAweGJmOGM2NTE3LCAweDMxZDVmODc0LAorCTB4NmZkNTZmYzQsIDB4ZDA0YTNiN2YsIDB4OTY1MTliZTcsIDB4NjdjMzZiZjQsIDB4ZTIyMjhhYjQsIDB4ZTIyMjkzNjYsCisJMHg0NzVhZmRlNiwgMHg1NTZiYzUzMiwgMHg2NDVmNTUwNywgMHhlZjQxYmYzZCwgMHg4MTNjYTU5NywgMHhmNTAzZjIyNiwKKwkweGFiZTY3NDAzLCAweDFmYzEyNmVhLCAweGUyZDE2NmE2LCAweDdlNDQ0YmZlLCAweGY3ZmJjY2M4LCAweGJlNDYyZjFiLAorCTB4MDY3YjFlZjksIDB4NDBmMjE3MDQsIDB4Zjk4N2I5OTUsIDB4ODliNGVhYWYsIDB4N2QzYWE5ZTEsIDB4YzQ0NDczMzksCisJMHg3NzVhMDE3YiwgMHhlYWJmZTkwMCwgMHhjNGZhYzA3NSwgMHhlNzZmYTQwZSwgMHhkODkxZjdkMywgMHgwMjdlZmY5ZiwKKwkweGIyYzc2MWZiLCAweGZiOGI5N2I3LCAweDdmNDgxNTJmLCAweDlhZjZmYzNkLCAweDYwZjY5MWQxLCAweDJmNzEwMGUyLAorCTB4MzcwNzg0MGUsIDB4MTBiZjNmNzksIDB4NmMzYzRiZmIsIDB4YmYzMjQ1ODIsIDB4YWY3OWY4MjAsIDB4MmUzMDliOGMsCisJMHg5YzQwNzM3YiwgMHhmZDdhZWNiOCwgMHgyYjY2ZWFlOSwgMHhlYWI5ZmU1MCwgMHgxOWQ3MmIwMywgMHg5MmJjZGQ3ZCwKKwkweGVhYjg3ZWUzLCAweDA2ZmE0ZDFmLCAweGE5MWJmZWZjLCAweGNhZjBmODdkLCAweGViZmNmNGQxLCAweGU0NmZhYmMzLAorCTB4MjliMmE5N2MsIDB4MjAxMWNmMmEsIDB4NWZlNGRjZjgsIDB4NWRlZWY1N2QsIDB4NjliNjdmZTQsIDB4YjYxNDlmZWMsCisJMHhlZTk3N2Q5ZCwgMHg5ODM1Zjc2OSwgMHg4YWQxZGJmOSwgMHgwNjc2MTNmZCwgMHgyYWFmYzg5MiwgMHgxMWRmNGY5YywKKwkweDk4ZDU2YmVkLCAweDMyZGZkMGZmLCAweGZiM2IyYmZjLCAweGQ4OGFhNzU3LCAweDdjNzVjMmJmLCAweDRlOGI2ZTQxLAorCTB4YTdiYWQzOTQsIDB4OWE2ODhiOGEsIDB4ZDdhNGUzODIsIDB4ZTU3ZjkzYzYsIDB4MGNiN2YzZTgsIDB4Zjg5MzNlNzgsCisJMHhlMDQ5NmVlYywgMHhkOTAyOGJiYywgMHg0NDYwY2Y4MiwgMHgxYWViZGMxNCwgMHg2NGZmNjc1ZSwgMHhmNTFhYTM1ZCwKKwkweGRlZjE4OGZkLCAweDdiODgwNjVmLCAweDNlMGNlZjg3LCAweGU2NWUyOTBiLCAweDVkYTJiZGEzLCAweDkzMmZiOGQ3LAorCTB4MWNkNmIxY2UsIDB4YWVhOTNlNjIsIDB4M2RmMThiMzMsIDB4MDdiYTA1YTIsIDB4NDExZmMwOWEsIDB4MjczZjA4MDcsCisJMHg2NWQyMTFlOCwgMHg4NDM4MjU5ZSwgMHhiZGJkZmFmYywgMHgyZWIyOGFmNywgMHhmNWVhMjgyNCwgMHhmMzg3NWE2YSwKKwkweDViOTc0Yzc3LCAweGIzYzdhNWY3LCAweDllZTkyNzQzLCAweGUzYmUxZDA3LCAweDhhMWUyMjU5LCAweDViYWRmZjFkLAorCTB4OWY4ZTQxZTQsIDB4ZjhmMWZhMTMsIDB4NzhlOGZmNGMsIDB4YzUwMDMyN2EsIDB4NDhhMDVmMjIsIDB4ZWY4ODM1ZmEsCisJMHgzNWU3NjNlZCwgMHhmZTc4N2FkMywgMHhjNzAyNDNkZCwgMHhmNzNiOGY4OSwgMHg2M2ZkZjAyNiwgMHg3NWU0NGJhNywKKwkweDM0ZGJlYTRiLCAweDZkNjYxZWZhLCAweGVjODEzMjgzLCAweGY3OWNkYWQyLCAweGVjMTk3YmY4LCAweDVjOWU5MTE3LAorCTB4ZjdjODNlMWIsIDB4N2I3NTE1YWYsIDB4YzBlMzc5NjcsIDB4ZWMyZGRkYjEsIDB4OWRmOTNjYzMsIDB4N2NmOGVjNzIsCisJMHgzYzA2N2UzOSwgMHhkYjllMzIxOSwgMHg2NzNlZjc0ZSwgMHhmMTRlY2RjYSwgMHhlZWY4OWJkZCwgMHhkN2E5NTZmNSwKKwkweDY2NjJkZjE3LCAweGU4MGNlYTNmLCAweDIyN2Y3MTY2LCAweDQ4MTYzOWVlLCAweGQ0YWI3ZGJkLCAweDYzZGZiMWY3LAorCTB4NzZmZGZhMWIsIDB4NjdjMmNlYjksIDB4NzNkZDMzNjAsIDB4N2Q5ZjdlYzQsIDB4MTcwZmY0YmIsIDB4ZWZkNzk3ODEsCisJMHhmNGJkNWRmNywgMHhmZWZmNjMxMywgMHhlYTViODk0MiwgMHg4YTMwNTFmNSwgMHhlZDA4N2FmNCwgMHhlNDViZDcwZCwKKwkweDllZGRiMDI2LCAweGFlMzIzMDVmLCAweGE5ZGY0MWRmLCAweDc1M2JmMmViLCAweDU3ZmEwZDZhLCAweGY2YzdiZWU3LAorCTB4YjljYjc4ZjAsIDB4ODZmYmY5OTcsIDB4MWQ5MDA5NzMsIDB4Y2ZhZDllZTcsIDB4ZTQ3YTFhMWUsIDB4Nzk3NzQxMzYsCisJMHgxNGUxNTFlZiwgMHhiZmY0MWEzMCwgMHg2NDVhMTE4NCwgMHhmZmEwY2Q3ZSwgMHhmZjBlOTI4MywgMHgzOTQ1NzVjNywKKwkweDYzZTY0NWEwLCAweDA3ZmVhOTBlLCAweDQ3NTQxOWRkLCAweDM4ZmVjOWRkLCAweDIxZWQ4MDllLCAweDNjYTg2YjllLAorCTB4ODQ2YjUwZDcsIDB4NzAzNGJiOWQsIDB4ZWUzZTVjNzksIDB4NDA2YTVmM2IsIDB4NmU3NDkzZDgsIDB4ZWNhZDcyNWIsCisJMHgxNDg0NTYzNywgMHgyMmIwZWVmZSwgMHg5YjdmYTIwYywgMHg1MWNhZjljMiwgMHhiZjVjMmQwZCwgMHhmMTU0YTRiMSwKKwkweDNjNWE4NTc4LCAweDdjMTlmMDRiLCAweGZjMjZjMGI0LCAweDdhNWY4MzAzLCAweDg4ZjkyNWYxLCAweGI4NWZjOWM2LAorCTB4YjEwYmZhNTUsIDB4ZGExYTM0ZmMsIDB4NGJmYWQxNjcsIDB4ZWE4NzhhYmQsIDB4NDdjOWFmMzYsIDB4NGViZGM2Y2IsCisJMHhmOGI1ZWVlMSwgMHg0Y2QyZjkwOCwgMHg5Zjk2MzE3YSwgMHgxZmZiNzM1ZSwgMHhiNzc1ZmMyNSwgMHg4MDUyNWU1ZiwKKwkweGZkY2YxZmViLCAweDRmZjEyODZjLCAweGU4ZTQzNWU1LCAweGRkYmY0OTQ1LCAweGFlNzFjMDhlLCAweDc1OTdhOTYzLAorCTB4OGRiOWY1MDQsIDB4NTY5Nzg0MWQsIDB4ZDNiMmJmNjAsIDB4ODM2NWJlZDUsIDB4OGViOWI3ZjAsIDB4YzA5YzIyYTAsCisJMHg0ZDE1YTVmNSwgMHhhZDZlZmU3NiwgMHg3MTNhYTFhMiwgMHgyNmUzZTkwYywgMHg3ZWM3NjNkNSwgMHg1MmU5YzM3OSwKKwkweDE3OTQyM2NhLCAweDJhOTczYTg5LCAweGFiYmJhOGJiLCAweGJiYmE4YmIyLCAweGU3ZmVlOWI5LCAweGVmZjgxM2RjLAorCTB4MTFkNzQ0MDMsIDB4YjU3ZTNhNTgsIDB4M2VmODdiZTEsIDB4OTMzNWRmNTYsIDB4N2ZlMTM3MGYsIDB4NGIzNTBmNGUsCisJMHhiYjY4NmNmYywgMHhjNDg2Mzk5MiwgMHg4ODdmZGQzNCwgMHhmZDdlZWVlMCwgMHg4YTdkMGI0NSwgMHhkNWU2MzU1MSwKKwkweGQ2ODI1NDU5LCAweGRlNzlkNmVjLCAweGI1MmQ3NTJkLCAweGUwMzY1Njk0LCAweDQyOWRiYmI3LCAweDQzODM5YWVmLAorCTB4YmZjZDZmZDgsIDB4ZWE5YjdhYmUsIDB4MjU4YzZmODMsIDB4ZDJkNWQ1ZmIsIDB4YzExMmQ2MzYsIDB4NTAxYjlkZWYsCisJMHg2M2ExYzc2ZiwgMHgxY2E0OTgzNSwgMHhjYTJhZGM2YiwgMHgwOTQ3ZTkyMiwgMHgzZTZhYWViOSwgMHg4YmY5NDk5YSwKKwkweDdjZTc5MjRlLCAweDFlNDlkZjZhLCAweGRlYzU2ZDgxLCAweGM5MjNjOTMzLCAweDVhMmZkOTlmLCAweDRkNGJiZDYzLAorCTB4YWQwM2NmMmEsIDB4NDllZGQ0NjMsIDB4NjY2ZGYwOTEsIDB4YzQ4NTJlZjgsIDB4YTMxZDAwM2EsIDB4OGU0NDE3MTYsCisJMHhkNmJmZmNkNywgMHgzZTg1MTcwNywgMHgwN2QyODhlOCwgMHgxNjQyOWUwNiwgMHgwMzg4ZWZlMCwgMHhhNzVjYWQ4NywKKwkweGFlM2ZmNzQwLCAweDAzNmEzYTA4LCAweGMyNmVmZDA1LCAweDc2ZTQ4YTYwLCAweDBmN2JkZDMyLCAweDgzNGY5NzI3LAorCTB4NDFhZmE5YmIsIDB4ZmJhNTRiNTgsIDB4ZWEyYWIwZTksIDB4YmViMDg2ZmIsIDB4YmZmNzI4OWYsIDB4NTBiNzBiNDksCisJMHg3OTY0ZjAzZCwgMHhkYTA1M2E1ZiwgMHhlODBjZGU3OSwgMHg0ZTBiZDZlMSwgMHgxOGJhMGVmZSwgMHhiMjRlZGMzYywKKwkweDVhNTNlNzg1LCAweGUyMTQzZjJiLCAweDk5YzI3YmVmLCAweDRkODJlYjlhLCAweDg3MWQ2ZjdlLCAweGQzNzg3ZGRlLAorCTB4MGY4MTgyZTAsIDB4NDRkNWVlOTUsIDB4NzllYzUzM2QsIDB4ZmMyODE4NmUsIDB4NDJiYzliYmMsIDB4NDE0YjkxMGYsCisJMHgyMDkzYzBmNSwgMHhkM2Y5ZjdjNCwgMHhlYmRlNDNhMSwgMHg1NGM3M2ZjNywgMHgxZWU5MGI4YywgMHgzMWJhM2E2ZiwKKwkweDIwOGY4Yzg5LCAweGU3NDY5ZmNmLCAweGE3OWRlMzUxLCAweDE5OTMzZTYzLCAweDlmMDQ5ZDRhLCAweDdkMzRjZTEyLAorCTB4NzNmZWJmNjcsIDB4MjgzNTUzNzQsIDB4ZWJlZmJkZTUsIDB4NTE3MWZhZTksIDB4YTdhODNkZGYsIDB4YTlmNzhkZTksCisJMHg3YWYxNTk3ZSwgMHg0M2Q5YmViOSwgMHhmYzUzOGRkZiwgMHg3YjNhZDYxMywgMHhjMDM2NTlmNSwgMHg3MjJiODE5OCwKKwkweGZiZTg0ZTA2LCAweGMwZmMwNDZlLCAweGRmYjEyNDc1LCAweDI3N2M0NDhkLCAweGZlMjMxNzAyLCAweGU3NTE5MjJlLAorCTB4NDhiODNiYmIsIDB4NjU5MTNhYTcsIDB4N2JmZTM2ZTksIDB4YTFiNjg1M2IsIDB4NzlhZjI5ZTMsIDB4MzM5ZmNkMjgsCisJMHg3ZGVhODMzMCwgMHg2MmYyNDZlYiwgMHhmYjAyNzA1YSwgMHhlY2JmOTJiOSwgMHg3ODQ0OWRlMCwgMHhmN2M2YmM1MCwKKwkweGQzN2NjMDJiLCAweDMyMGJmN2ZiLCAweGIyMjdiZjgxLCAweDNlNzdjNTViLCAweDZkMWY5MWRiLCAweDNhMDUyY2E5LAorCTB4MjNjMzVmZDUsIDB4ZDNmOTNhMjUsIDB4MGYzNjVjNWIsIDB4MjU2YzQ3N2QsIDB4NzA3ZGVkYjgsIDB4MWQ0NGQ4ZDcsCisJMHhkNDRkOGQ0OCwgMHg3MmY1MTg3OSwgMHhiMWFkNzhiMSwgMHg4ZjRlNzkxOSwgMHg5OGYxZmQ4ZCwgMHg2MjdlOTBlZiwKKwkweDc4NDJkZmYzLCAweDk4YTkyODdhLCAweGRlNTMwZWZmLCAweDVjZGNkMzJiLCAweDdmYmYyNTBmLCAweGYwMzA0OWFhLAorCTB4ZTdlMzZjNTAsIDB4ZWM5NGY1N2QsIDB4M2Q1MmQ2NjcsIDB4OTM1OWMyMzcsIDB4NzhmZjVjMDEsIDB4MGE1NDY5MzQsCisJMHhiNGQ1NjVkNSwgMHg5YWVlN2E4OSwgMHg3N2ViMDA4YywgMHg3ZDYxNWZiMywgMHhkMjVhZDM1ZiwgMHhiMmUyZjY0YSwKKwkweGRkNzVjMmMzLCAweDA3NTEyZTM1LCAweGQwODBjODFmLCAweDNkMzQ3YWYzLCAweGEwZjQxOWE2LCAweDhmNTk0YmZiLAorCTB4NWM2NWQwNjQsIDB4N2JkMDk0M2EsIDB4OTFkZWMyZTMsIDB4ZGI0MjkzODQsIDB4ZmRkMDM3Y2IsIDB4NzQ3MGI4YzIsCisJMHg2OWQyMTk3ZCwgMHhmN2E5ZDEzNSwgMHhjOWNkMWUzYiwgMHg3ZDA2MWVmNSwgMHhkOTk4NzE5MCwgMHgwNmVlOTI5ZCwKKwkweGRmYzY5Y2JkLCAweDUxNmFmMDIzLCAweGEwYzA4ZjdmLCAweDQxNDRmNmUzLCAweGUwNTUzMzJmLCAweDc1NzdlNzBjLAorCTB4NGU5NjM3NWEsIDB4MTRlMTFiZmYsIDB4NGJiMGJhYzEsIDB4MDAwMDRiYjAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDI3N2JmZjAwLCAweGEzZjBjMGNkLCAweGE1ZmQ4MTFlLCAweDc5YmExODE4LAotCTB4ODk2OGM1NTAsIDB4MzAzMjcxMzcsIDB4MzAzMTcwYjAsIDB4MDY3MTAyNjgsIDB4MjAzNmRlZDAsIDB4MTdjNDBlZGQsCi0JMHgxMDIyZjg4MCwgMHgzMDMzNzE5YiwgMHgxMTcxMDIxNCwgMHhmMjAzMmYxMCwgMHg1NmRjZDA5MywgMHg1MGMwYzRjMSwKLQkweDQwMzVjNDA1LCAweDNhYzQwNzVjLCAweGJhMGMwYzhjLCAweDFmZGJjNDhjLCAweGYwYzBjNDJmLCAweGQ3YzEwYzQyLAotCTB4NDg2MDY3MTAsIDB4ZmY5ZmE0OTEsIDB4NTRlZTFiMDcsIDB4YzI3ZGFmYTEsIDB4ODYwYzBjYWEsIDB4NDY2MmE4YmEsCi0JMHg1ZDYzN2M2OCwgMHhhMDk4NjZmYywgMHhmMWEyOWJjOSwgMHgxN2U4ZjBjZCwgMHg4N2U1NDBiNCwgMHhlM2YyYTIxOSwKLQkweDc2MTgxOThjLCAweDM3MDlhOTIyLCAweDc0MTZlZmM0LCAweGY3YTgwMmZjLCAweDAwMDMxMDI1LCAweDIyMDM3YmViLAotCTB4MDAwMDAzNjgKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDkzY2JmZjAwLCAweDUxZjg2MDY1LCAweGQyZjljMDhmLCAweGJjZGUwYzBjLAorCTB4YzRiNDYyYTgsIDB4MGMwYzVjMGMsIDB4MGU1YzQwNDEsIDB4N2I0MDFhYzQsIDB4ZGJlOTAxNmYsIDB4Y2RjZTFjNDAsCisJMHhjNDAxMTBjMCwgMHgxZmY4ODFmYiwgMHg2MjA3ZmYxMCwgMHgwNGQ2MjAwZCwgMHg3OTQwNWZlMiwgMHg1YjFiYTg0NSwKKwkweGRhMTgxODk4LCAweDg4MDNiODgwLCAweDg3NTg4MGJiLCAweDk3NDE4MTkxLCAweDkzZmI3ODkxLCAweGRlMTgxOTg0LAorCTB4N2FmODIzODksIDB4Y2QwYzBjMTIsIDB4ZmZmM2Y0NTIsIDB4NTYzMWMzNjAsIDB4MjllZmI1ZjQsIDB4MTc0ZTNlZDAsCisJMHgxOWM3M2YwNCwgMHg1MDVjMjQ5OCwgMHhlMGJiNzBkNSwgMHg0ZDA3ODMzNywgMHhjZjhkMTc5ZSwgMHg5ZTdmNDc4NywKKwkweDVjYmYyYTIxLCAweDRkM2Y5NTBiLCAweDIzZTE4MTg3LCAweDJkMGE5YTkyLCAweGM3NDE2ZWZjLCAweDBjMGM0NjhhLAorCTB4YWJjNDQ2NGEsIDB4Y2E4YzYwZGYsIDB4ZDA4MTMwMGYsIDB4YjFhZGY5MDAsIDB4MDAwM2E4MDksIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgeHNlbV9wcmFtX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0N2MwOSwgMHg3M2I5ZjhiOSwgMHhjOTk5ZGVlNywKLQkweGFjODQ5OTJjLCAweDVkODZmMTJjLCAweDQ4NDA5YzA0LCAweDU4NzZjNDQzLCAweDA2MjJiNGE0LCAweDMwYTIwYTk3LAotCTB4OTAzN2Q5NmMsIDB4ZmY2OWYwZmEsIDB4YTVhYjA4MTksIDB4NjhkMDZhMWEsIDB4NjgzMDRlYzEsIDB4MWEwNzQxYjAsCi0JMHgwMWMwNDgzMCwgMHg2YTJiZTJkNCwgMHg2ZDhhZDNlYywgMHgyYzM0ODBjNSwgMHgwZGM0NjQ4NiwgMHgzZmYyZDNkZSwKLQkweGNkY2U3N2RmLCAweDExMzM3YmRjLCAweGJmZmJmYjZjLCAweDRmMTY5ZmU1LCAweGI3ZmIzZGNlLCAweGU3N2NlZjlkLAotCTB4OTJjYzVmM2IsIDB4NDA3ZTEyNDAsIDB4YTFmODY1YzgsIDB4MjExMzE4ZTksIDB4NWQyNDVjNjQsIDB4ODhmZGZkNmMsCi0JMHhlNTIyN2Q1MywgMHhhY2M4OTU3ZiwgMHg0NjVhNDhlMCwgMHg0NmRiZTQyYSwgMHhiMjEzYmU0NSwgMHhiMTZmZWIxMiwKLQkweDU4OTM0NmI5LCAweGM0MDJkMzQ4LCAweDkzZGYzZjQ1LCAweDg0NTkyMjY4LCAweGY4MjZlN2RjLCAweDliY2UyNWIzLAotCTB4MTIxMjY0MjYsIDB4NmY3MTY4ZGUsIDB4MjVkZmE3NGQsIDB4ZDAyNDI1YzUsIDB4YjcyMGZkNzQsIDB4NGE3NjgwNWYsCi0JMHhlYmMzZTQxMiwgMHg5YTU2ZjcyNSwgMHgxNjVmNWYyNywgMHhjYWQ5YmRhMSwgMHgyN2U4MTNkYSwgMHhmODdjOTA4OSwKLQkweGQyMjExMDdkLCAweGU4Zjg5MTQ1LCAweDAyNGJhNGZjLCAweDMyMjQ1YmE2LCAweDRmY2U5NzJmLCAweDI2NDZkZjcyLAotCTB4NzNmMzIyM2EsIDB4OTM5MmU0MjcsIDB4OTk0ZWZiZjQsIDB4NTJlZmQzOTYsIDB4MzdkNWFlNDIsIDB4MmQ3ZTUyMzIsCi0JMHhlNGZlNzAxMSwgMHg1ZmVjNGFlYiwgMHhmYmI1NmYxZCwgMHhkNzE3YWIzNiwgMHhkZmI1MTdlYiwgMHg1YzE3ZGNiYiwKLQkweGNiNzU3ZGYwLCAweDJkMGZkOGVkLCAweGMzOTY3NWMxLCAweDllNWExNGZjLCAweGE2MjY1MjcwLCAweDM4MTFmZjQ4LAotCTB4MzUxYzcwMDUsIDB4NzFkMGI0YWYsIDB4ZjA4ODQ3YmYsIDB4ODRlZDM3Y2EsIDB4Yjc2YWJiYWUsIDB4NWMyODU4YTQsCi0JMHg0Mjk2ZWYyNiwgMHhkMmY5YTAzZiwgMHg3OTAwMjEzYSwgMHgyMTFiMDFkMywgMHg5YjlkNmUxNCwgMHg5NGU0M2U1OSwKLQkweDdjZmY1MGJkLCAweDJlZDNjZDNkLCAweDhmYWQyZGNhLCAweGRkNzAwMGRjLCAweDM4YWQ5MjJkLCAweGU2MDlhZTRjLAotCTB4YWRjMmFlZGIsIDB4NmNmM2U1OTksIDB4Nzc1YTViMmMsIDB4MmZiNDJlNzAsIDB4MWIxMGI2NjgsIDB4NmY3NGFmZWQsCi0JMHg2ODFiOGNmZSwgMHg0NDg4ZmYzZSwgMHhiNmU5NGFhMCwgMHg5YTVmNzIxNSwgMHg0MTA4MGMyZiwgMHgyMjRkNzdjOCwKLQkweDhmN2ZiZTM4LCAweGViNDZkODE4LCAweDkzNWFiOTc3LCAweDNjNzBhNGVlLCAweGNhMjU2OTU3LCAweDY3NmYzYTMwLAotCTB4MTQxZGQyNmIsIDB4OWQ4MTQ1MGUsIDB4NTE1ZGExNTMsIDB4MTIwMWUwYTMsIDB4ZGI3YmJjOWEsIDB4NWRiNGE5ZWIsCi0JMHg2M2MxNzZlOSwgMHg2ZTI5NzBhMSwgMHgzODY1MTNiMCwgMHhmYTY1YzM5YiwgMHgwYzQ5YmRhZiwgMHgyZjk2ODBmZCwKLQkweGU5MjRlYmE1LCAweGE5ZWFkNzgwLCAweDM3ZjE4NDQ0LCAweDAyMzM4YWNhLCAweGMzOTU3M2E3LCAweGU0ODk2Mjg5LAotCTB4NzFkM2I3NGIsIDB4MTdiMmJiNjgsIDB4YjEyYzBmMDQsIDB4NDA3YzQ0Y2MsIDB4NmQ3YjlkOTcsIDB4YzA3MTllYjMsCi0JMHg0M2M4NTZmYSwgMHhiNWFlYjA5ZCwgMHgwZmNiZDQzMiwgMHg1MzYzZGZjYywgMHhmMjc1N2U2MCwgMHhiNDVlNWE1NCwKLQkweGQzY2U0ZWI5LCAweGUxYjhiZmUwLCAweDM1NThhMjNhLCAweDk0MWRhYWYzLCAweDYzMGZhNWFjLCAweDg5OTI4ZTdhLAotCTB4ODQ0NTNlNzYsIDB4MjAwZTgzNzgsIDB4NTMzYzgwODMsIDB4ODU3ZDE3YzMsIDB4NzE3N2M0MzgsIDB4OWZlYmE4ODMsCi0JMHg0NDkwOTI0MiwgMHhlOGY3ZGZmYSwgMHhmZTVlMTRhZiwgMHhhYjg0NGVmZCwgMHg5Y2E1Yjc4YSwgMHg1ZGJjNTQ4ZSwKLQkweGNjNDNmY2UwLCAweGZmNmQyY2UxLCAweGUwMDhmYTZhLCAweGJhYTdjZTgxLCAweDJmZTk4ZGQyLCAweGFkMzA1MzJiLAotCTB4M2YxMDU0YTksIDB4NjhmYzAzOGYsIDB4ZGJjZjgxYmEsIDB4MzQ0YzgxMzUsIDB4NWU1ZDcxZDMsIDB4OGIzNjA2ZTIsCi0JMHgyODlkZWU5ZiwgMHgyZTdjN2NkMSwgMHhlM2RkMjdjYiwgMHg1OTZmOTQxMywgMHgyZTNlOWFiZiwgMHg0ZjAzZTZmOSwKLQkweGJkNTMyMjZlLCAweDk3OWE1NGU2LCAweDg3ODg0YjdkLCAweGQ1YmU2ZjhlLCAweDIxM2M2NTNiLCAweGEzZGYxMmFmLAotCTB4ZTRkMTdlYjAsIDB4MTJiYzAwMmIsIDB4YTVjOTRjMTIsIDB4NTAyMzU5NzgsIDB4YjVlMTQyMzksIDB4ZTE0OTE2MTYsCi0JMHhkMjk1MjZiMCwgMHhlM2QzYzUzMywgMHgyMzNkNjZmNywgMHgwOWFkN2MwYSwgMHhmNjdiY2Y5MCwgMHhhN2VjNzRlMSwKLQkweDY5OTFmYjE2LCAweGRjYWU4MzNmLCAweDZjZGNkMjRmLCAweDczNDkzZjVkLCAweGVhN2VkNDBiLCAweGFiOTg5ZmIwLAotCTB4YjlmMWU3ZWIsIDB4Y2NmOWZhMzksIDB4NzlmYjUyMmQsIDB4YWU4OWVhMWUsIDB4ZDI1NzViYWIsIDB4ZjlmYTA5YmMsCi0JMHg3ZWMxMmJjYywgMHgxMGYxZWY5MiwgMHhhYTJmYWQxZiwgMHhiZDVhNDNmNCwgMHgzNDc3MmQyMiwgMHg5ODc5OGRjNiwKLQkweGQyNjhlOTY4LCAweDQ5Y2ZlODFlLCAweDQ3NGI0YWI5LCAweDNhMzFkOWIxLCAweGM2ZjM4YTdlLCAweGE2N2RmMmViLAotCTB4NGZkNWQ1ZjUsIDB4MmJhODFkY2MsIDB4YzIzNTllNGYsIDB4NzcwZTk3NDAsIDB4MGYzYzc1ZmIsIDB4OTE1OTcyOTMsCi0JMHgzMmJlZTVlZiwgMHg3ZDg5OWRjYSwgMHhmYmZmMzhhZCwgMHhlZTUwM2FmYiwgMHgxYmUzOWZkYywgMHg4NmYzYTZlNiwKLQkweGZmOGExMmI5LCAweGY1ZGY2NWZiLCAweDQzNzQyOGVlLCAweDE0OTAyNWQ3LCAweGE0MTMxNTQ4LCAweDEyYjVmMmM2LAotCTB4N2VhNGRiODMsIDB4NDEzZDBmNWYsIDB4YzI5Yjk3ZGIsIDB4ZmU2OGUzNDMsIDB4OGZmMTMwODgsIDB4ODBiZmVlYjAsCi0JMHg4Yjc4YTUzMCwgMHhkNDA1NDkxMSwgMHg5NDEwYjE4YiwgMHhiM2QzNmI3ZiwgMHhlMDZiZjE5ZSwgMHhhNTAwNmViYSwKLQkweGVmZDIyMTE3LCAweDAyOTdjOTNhLCAweGFmZTZkOGY0LCAweGFlN2QwM2YwLCAweDYwNTMyMDE5LCAweDU0ODI3MjEyLAotCTB4Njk4M2ZjODQsIDB4Mjk3OTAxZmIsIDB4NGM4YjdmMDAsIDB4N2M3Njg3ZTUsIDB4MTIzZjhlOTksIDB4ZjE4NzZmYzcsCi0JMHhkZjE5N2EzYiwgMHgzNzViMzAzMiwgMHg0MGFkMzViZSwgMHhhNjU1YmUzNywgMHgwOGZlNTNlMywgMHhmMWYzOTdmYiwKLQkweDA4NzJmYzI5LCAweGM3MmM5NGY5LCAweDA1NjkyZGYxLCAweDk5NWFmZTM4LCAweDhmYzZlODE0LCAweDRiZmYxZWU5LAotCTB4MTg2YmY3MTgsIDB4ZmFjYTMxM2YsIDB4ZDdlOGU2MDcsIDB4NWZhNDU2OWYsIDB4NGZkNmNjYmYsIDB4ZjhmOWY4NTYsCi0JMHg0MTdlYjgzMSwgMHhhN2Y1YjNmMCwgMHg1YmY1YjExNSwgMHhlM2RkYmY1OCwgMHgyZmUxYmFiYiwgMHg4NzVjNzQwYiwKLQkweDA3ZmFjYmQwLCAweGZmYWZkMDRkLCAweGZhZmQxMjlhLCAweGY3N2M2YzJkLCAweDdjN2M3NThhLCAweDI3MWY4ZTA3LAotCTB4YmZlYjYzYWMsIDB4OTdjNzA0YTYsIDB4ZDAwZjNlMmQsIDB4YTYyZmRjOTEsIDB4NjlmYjAwMjIsIDB4Yzk0MGNhN2YsCi0JMHg5OGJkMDMyOCwgMHg4NDI3OGYwZSwgMHg5M2RmOTNjYSwgMHhmYjg3MDg4MSwgMHg3ZGRkMTg2MywgMHhjZGU5NDMxOSwKLQkweDI0YTc5MTExLCAweGVlOTAzOTQwLCAweGE2OWM2NWMzLCAweGNhMjcxYjhiLCAweGUzZjY3ZjZjLCAweDRmOThiZWJlLAotCTB4ODhiMzUxNzUsIDB4MmM2YTRkNzQsIDB4YmU3NDIxODEsIDB4MWZhMmNkOWQsIDB4NmU2YThiZjIsIDB4OWZiODg4MGMsCi0JMHg5ODgyM2QzMiwgMHhmZmJlMDg0OSwgMHhhZGE4ZDM3NSwgMHhkMzE5NzVkYSwgMHg3YjUyZDVjNSwgMHhiYWFmODY5YiwKLQkweDMyMjRmYmU1LCAweGFmY2U4MmJjLCAweDVjNjA4ODAyLCAweGU1NGVkZjI0LCAweGY4NzJhMTM0LCAweDkwYzc5NTI0LAotCTB4NWU5ODk2OWUsIDB4NzFjYThhNzIsIDB4MzdjYjRjMzIsIDB4ZTI1ZTk4MmIsIDB4YTcwZWVmMjcsIDB4OWYwOWZmZjMsCi0JMHhjMTk5YmI3ZiwgMHgxMDk5N2RiYiwgMHhiOTdmZjgwMCwgMHhmMjBjODk3MSwgMHg5ZGI1NzE2YywgMHg4ZjMyM2QwMiwKLQkweGYwYTc4ZTcyLCAweGY1MDA0YjVlLCAweDAwMWRiYTI5LCAweDU2NDJlZTdjLCAweDAzYzNlNDI0LCAweDUwMmViY2I3LAotCTB4YjZiZjJkM2QsIDB4M2RkZGFlOGYsIDB4ODUzYWIwMjQsIDB4NjFiODVmZDYsIDB4NWQzNzAwZmUsIDB4OTY1OTljZmYsCi0JMHg0ZmVjMjIzMSwgMHg4NGNmZGJjNCwgMHg5OWZhNGM3YywgMHhkNTk5MDliMiwgMHg0N2VhNTFiNCwgMHg5MmNkNzczMywKLQkweGRhNjliNjRlLCAweGYzZTlmNmNmLCAweGY5ZjQwYTczLCAweDk5MjAyOTRlLCAweDE0Mjk5ZjQwLCAweGY3ZWQxZDQ4LAotCTB4Yjk3ZDBhZGUsIDB4MjEzNGNlM2EsIDB4OGY5NWUxOWUsIDB4ODMwYTEzZjcsIDB4NWVlOWZhNTQsIDB4NjdjMGM3NDgsCi0JMHhhZTc1ZTIzNywgMHhlNzU1YjU5YiwgMHg0NGEwZmU1MywgMHhiNzFmYjg0MiwgMHg3ZmM0MTIyNSwgMHhiOWYzZDYyMiwKLQkweGYzOGRiYWQ5LCAweGJkNTkyYjlkLCAweDczM2U3NGI5LCAweDllMTExMDFmLCAweDFkYjdmOWM2LCAweGEzNGQ3YmIwLAotCTB4OTlmYjVhNjksIDB4NWM2ODI0MDQsIDB4ZjNmZTcxOGYsIDB4ZTNkNzFiOTYsIDB4OTg3ZjYxOTYsIDB4Njc3ZTM3ZWYsCi0JMHhhN2E0NjI3NCwgMHg4Zjg5ZTZmMiwgMHg1M2QwZDI5ZCwgMHg4ZjQ3ZjA2OSwgMHgyYmI0ZDI5ZCwgMHhjYmE5OTg2ZSwKLQkweGViNjYwNjE3LCAweGNlZDdlN2VhLCAweGFlMmY5NWQ3LCAweDJmOTVkNDJlLCAweDk3NDRiNzVjLCAweDQwN2ZlZjlmLAotCTB4ZjJkZTdmNTcsIDB4N2JmMmJhMTUsIDB4Y2FlYmQ2MmIsIDB4ZDQ2YzE0ZTcsIDB4OWVmYjY3ZTUsIDB4NmJiZmQ1ZDQsCi0JMHg1Y2FlOWQ1NiwgMHg0ZDc4NTAzOCwgMHhkZjU1Y2ExYiwgMHhiN2EwYTkzNSwgMHg0MDIxNjA3ZSwgMHhhYmJkMmE4ZiwKLQkweGVhODY3MGZjLCAweGEzOWU5MDJkLCAweDJiYTQwYjdhLCAweGZmMjk0ZjgwLCAweGI0YjJmNjliLCAweDZiZmNlYjdjLAotCTB4ZmViZDFhZGMsIDB4MDY5MTU0YjQsIDB4N2JhNDY0ZmMsIDB4ZjQ4ZDNjMjMsIDB4NDVmYTdmNGQsIDB4YjRkNDg3ZGIsCi0JMHgyMGI5MjA0NCwgMHg3ZWY4YmFlNywgMHg1ZWJmN2VhZSwgMHg2NDdhNzEzMCwgMHg3ZTEyOWRlNywgMHg5NWQ5Mjg5ZSwKLQkweDNiY2UwOTNhLCAweDY4Njg3MjI1LCAweDdlZjdhMzg1LCAweDc1YzA1MDQ5LCAweDEzZDJkMDEwLCAweDVhOTQ2ZjAxLAotCTB4NmUyYjcwMzUsIDB4Njc5YmE0MTgsIDB4YzcxMTQxYzcsIDB4YTVkZTAzMmYsIDB4ZTQ4MzJmZjIsIDB4MGYyMDBiMzYsCi0JMHg2ZWQzODc0MiwgMHhmMWYzMDUxZiwgMHg0Y2Y5MDVlZSwgMHhmZjcxMTM5YSwgMHhmNjljYThlZCwgMHhlMDA5MjlkOCwKLQkweDk5ZTk4Yjk3LCAweGI2OTg1OWNhLCAweDNkMzBmYTU3LCAweGU5ODA1OTU1LCAweDRjMGFjYWM5LCAweDYzOTcyYWRiLAotCTB4OGZkMmJjN2EsIDB4ZDcyYTVmZTksIDB4Y2FhN2ZhNjEsIDB4NTU4ZjRjNmEsIDB4YzdmYTYyZDYsIDB4OWRhNjAwY2EsCi0JMHg1NTRjNWU5NSwgMHg5Mzk2ZWRiYSwgMHhlNTZmNWNiOSwgMHg4MWZhMGJlNywgMHgyZDdjYWRlOSwgMHgxNWJkZmQyMiwKLQkweDAyOTNkMWY5LCAweGYxYzE3OGZjLCAweGNiZDA1MGU1LCAweDQ4YTMxYzJmLCAweDVlMWRlZjRlLCAweDE1ZTg3YTQ2LAotCTB4N2E4YmM0YWUsIDB4ZTI4MDVlNDUsIDB4NzJjZjRmYjksIDB4OTNjMzBjNWIsIDB4MTFhNjQ0Y2QsIDB4MGZkNjM3MmEsCi0JMHg2MGIzZDY3OSwgMHgyNGNkZTYyNCwgMHgzYzA3ZGExZSwgMHhmYTUxOWQzMywgMHhlMDE0N2JhNSwgMHgyMjc4NGFlYiwKLQkweDM4NjhmMGRlLCAweGY1M2ZiNzBmLCAweGVmZDA1OTlmLCAweGI2NDBjMmY1LCAweDcxMTYxZTVmLCAweDY3YTEyNGJmLAotCTB4ZWZhZjgwM2MsIDB4OTVlMTM3MGEsIDB4NmY4MGQzMGYsIDB4ZjBhYTI3Y2UsIDB4MzQyMzRkNmIsIDB4YjFiODIyNWQsCi0JMHgxNjRkMGJmZiwgMHhiNjM4MDY2MiwgMHg4NDcwMDNkOCwgMHgxOWU0NzBiZCwgMHg0Yjc3ZWMxNywgMHg1M2VhYzQ1MywKLQkweDU3ODc3YjYzLCAweGRhYmQzMDY5LCAweDc5NGY1OWExLCAweGExN2YzZWIzLCAweGNlYzY5ODVhLCAweDFkZWM0YWY5LAotCTB4ZGNhZTgwYTMsIDB4MDA4NmE3ZDUsIDB4NTUzMDUzZmUsIDB4MjI5YTU5ZmIsIDB4YjllYTM4ZTMsIDB4MjFjNjM0OTYsCi0JMHgyMTczZDI5ZCwgMHhjZjY3ZmJkNiwgMHgyMjdlYjdhMywgMHgxZjIyNjhmMywgMHhiYjAxZDg1MywgMHhlNTc0MWU1YywKLQkweDdjMGY0YmYzLCAweDczOTczZjliLCAweGQyMmQ0ZjAxLCAweGM3OWZiMDk3LCAweDA3OTc3ZmQwLCAweGNjNjZiZjQyLAotCTB4MDc5NmZkYWIsIDB4N2FlNWJmNDUsIDB4MWJhOGRlZjgsIDB4ZDQ1M2I2OGYsIDB4ZWJiNDM3MzMsIDB4YTRjZDVlOWQsCi0JMHgxNTI3NWQ1ZCwgMHhkZWRjMTk2ZCwgMHhhYjYwZGM1MiwgMHgzOGZkY2JkNiwgMHgzOWJjYmU1ZCwgMHgwZmI3NWFiNSwKLQkweGVmOTQyZmMwLCAweDA2NjA4MTQ5LCAweDU0ZTEyOWJhLCAweGFjNzY2NWQ0LCAweDFjZmNlODEzLCAweDJkZmIwNTI2LAotCTB4NTJiZDU4MTcsIDB4NTNlYzliNmIsIDB4NDE1YjBjOTAsIDB4YWQ5MDU4MGYsIDB4ZDc3MjlkZDIsIDB4M2U1Y2E5OWYsCi0JMHgzYzg5N2JmYiwgMHhlZWRjZTUwYywgMHgyNTQ3ZjZhMiwgMHhmY2QxMzEzMCwgMHhkMDViOWU0MiwgMHhlNDFkM2M1NCwKLQkweDM3M2RkOWRkLCAweDg4YjBmZWEzLCAweDEwZTBiYWU0LCAweGIzYWE0MDUzLCAweDRmMzkwZjQwLCAweGVlODBkMzRjLAotCTB4YjgzZjkzY2YsIDB4MDNjZTZhYzYsIDB4Y2UzMjRjNzMsIDB4ZmQzYWUxNjcsIDB4MjdmNTQ4M2UsIDB4NTZiZjNlNWQsCi0JMHhiNzIzY2Y5ZiwgMHhlNzlkMDEyNSwgMHgyMDI0NDhkNSwgMHhjYmVhM2YwMCwgMHg3ZTMxMzY2ZiwgMHg2YjE1MjdjOCwKLQkweGM1NTg3ZjYwLCAweGRjMGIxM2NmLCAweGYyOGZkY2M0LCAweDViNGJlOTdiLCAweDc5ZDNlNmIyLCAweGY5MzEzMDJjLAotCTB4MGJkZjllYWQsIDB4NTExZTk5ZTMsIDB4YzE5M2FjMTQsIDB4ZDM3MWYzOWUsIDB4NDBkYzlmZDgsIDB4MGQ2MDdkYTAsCi0JMHhiYmZjMzFkOCwgMHhhNTM2Y2YwNSwgMHhlYmJlZmUyNywgMHg1NWYzOGRmYywgMHg3NjFlOGZmNywgMHhkMjhmM2UwNCwKLQkweDg4MWJjMTA2LCAweDk4NTQ4ZmIyLCAweGY4ZmZiZTA0LCAweGViMDk3ZTk5LCAweDFiOTllOGQ2LCAweDQzNWFmOTBjLAotCTB4ZmY5MGRlYmUsIDB4ODEyZGU5YmIsIDB4NjFjZGU4ZTgsIDB4MjUzMDZkZjIsIDB4ZmQwMmZhMzIsIDB4NjU4NzMwNGEsCi0JMHg3ZmQyM2ZkZiwgMHg2YmZlOGY0YSwgMHhmN2ZkYTlmZiwgMHhlOTY3ZmRhNywgMHhhN2ZmYWZmYSwgMHhjN2I4M2ZmNiwKLQkweGZhZDE4M2ZjLCAweGM3Njk3ZDJmLCAweDM3OTUzZjFlLCAweDcyNmUyZjQ1LCAweDljZmZiYTExLCAweDc5Mjc1NzM1LAotCTB4YjY0YmZlMjgsIDB4ZTJmYjQ2YWQsIDB4MDVkZmIzMTksIDB4MjAzNjdjZjQsIDB4Mzk0NDBiNGUsIDB4NzEzNjlmNTcsCi0JMHgzYWYxMjViYiwgMHhjMGY3MzgwNCwgMHg3M2ZmYjRhZiwgMHgwNjdjZmZjZiwgMHhkY2JlNWI5YywgMHgzY2YxYjkyNiwKLQkweDU5MDk2MGQzLCAweDM1OTY5ZjI4LCAweGEzMjc0ZTE1LCAweGU1ODI3ZjMxLCAweDQyMmE3ZWQ3LCAweDlmNGY1OWJlLAotCTB4NGE2ZGNmNDUsIDB4YTUxYmZiMDIsIDB4ODdlZmFlMTQsIDB4YWIyYTVmNTAsIDB4ZDg1NGViZmYsIDB4MTg0OWNhN2YsCi0JMHgwZWQ4Y2NmOSwgMHg4ZjE4YmZjNiwgMHgxY2JlNzFmMiwgMHhjZTljYjNkYiwgMHg3MmYwZjUxMywgMHhhNmYyOTcwZSwKLQkweGJhMmE3ZjlmLCAweDY5ZDFmZDIwLCAweDM2OTMxN2I0LCAweGVkOGQ5M2Q0LCAweDczZmViODBhLCAweDY4NGNlNGNjLAotCTB4ZjkxZWFhYTcsIDB4YzgxZWY5MWUsIDB4MjQyZTE1NGQsIDB4ZjExZmY0YzAsIDB4ZTFhMzJkYTUsIDB4ZmY1MWRhZmMsCi0JMHg4MWEwOTc3YiwgMHgxNzZmY2E5NywgMHhmZDdmMGI4MiwgMHg1Y2JiZDJiMiwgMHhiMWU3ZTRlZSwgMHhiNjAwYmI0OCwKLQkweGRlYjk5YTUzLCAweDEyZDJjMmQ2LCAweDdiMDJlNDI5LCAweGU0OWQ0OTY5LCAweDI1Y2ZkM2YxLCAweGY2Nzk5ZTNiLAotCTB4N2U0ZjM4MjksIDB4YTEwY2YxNjAsIDB4NzhlZjE3ZmQsIDB4MzQzOThmZWQsIDB4NGE1M2JjNWYsIDB4NDA0OWNlOTgsCi0JMHhhN2UwOGE0OCwgMHgzZTViZmU5YywgMHhhMjhmODIyNiwgMHgyYjI2YmVkZiwgMHg4N2Y3ZDhhMywgMHgyOTc4MjNlMiwKLQkweDI2NTA3OWRlLCAweDYzYzI3YWEzLCAweGRjYTBmMDcyLCAweDlmODI4OGU2LCAweGEwYTk4OWUwLCAweDdkMmY4OTVmLAotCTB4Y2ZmZTAzMjMsIDB4NzI0ODEwMWUsIDB4ZDY3ODE0N2EsIDB4MDI3YTg2YmQsIDB4YzlmMTA5YzAsIDB4M2Y4ZGQ1ZjEsCi0JMHg4YTcyZmQ0MywgMHg0NmViOTAxNywgMHhlZGViMTk3YywgMHhmYTA1ZjJlNSwgMHhhNTIxZmIwNSwgMHgwNjVlMTdlZiwKLQkweDJjOWZmMzNiLCAweGMxNDM4MDFlLCAweDYwYjlmNzBiLCAweDE1Y2RhNzNkLCAweGFjYjdjZThjLCAweGYxZDJmMjRlLAotCTB4OTI3ZjI0MGIsIDB4YmRmNjUzMWIsIDB4MjI5ZmU5ZTAsIDB4ZjNiZmU1ZmQsIDB4N2U3NjI0ZDMsIDB4NzA5YWE2ZjMsCi0JMHhjMmE3ZjJhZiwgMHhiZTZmMTczYSwgMHg0Nzk5ZDcxMywgMHgwNTg3NDg3YywgMHg5MDVjYzQ1YiwgMHhjOTk4NWY5NywKLQkweGY4NTE5ZGI0LCAweGU0Yzg5ZTY0LCAweDE0YWRlOWU2LCAweGE3OWQ3NGI5LCAweDc2ODQzNmU5LCAweDgxODgzZmQ3LAotCTB4NThiZjY4NmQsIDB4ZmMxZTQwNDIsIDB4OTM5N2I1NTQsIDB4YzJmZjk4YTUsIDB4NGUzNWYwY2EsIDB4YWE3ZWY1NTQsCi0JMHhiN2U5NjlmNSwgMHhlMDJiNmQ3ZSwgMHg2ZjAwZGNlOSwgMHhjYWJkZDgzMiwgMHhlMWNmZDk4OSwgMHhmZGE2NWMyMSwKLQkweDk0ZGNlZjhhLCAweDE0NDRmMGNjLCAweDQ3NmYxNjczLCAweGYwYzk4MmY1LCAweDRhYjdlYTFkLCAweDVkNjhkYjVlLAotCTB4M2QzOTcyM2IsIDB4M2UzMmZlMzIsIDB4MGM3NzlkM2UsIDB4OTNhN2U3ZWMsIDB4Y2EzMDQxNDgsIDB4YWE4ODM2ZmEsCi0JMHhiYWZiYTAxYywgMHhmYzM0Y2U4NiwgMHg3ZWJmZjhjZSwgMHg5NTc3ZTMzZCwgMHhhNzMzMDNmZiwgMHhlZmU3Zjk0MSwKLQkweDc2ODIzZTMyLCAweDc5ZDI1ZmIwLCAweGZjYjE5Mjg1LCAweGNhMDIxZGUwLCAweDQ1MDkwYjA3LCAweDg5N2FmM2UzLAotCTB4ZGNiZWI5ZjMsIDB4ZmU3NDJmNDgsIDB4NDM1NjIxNjYsIDB4M2M0ZTMwMzcsIDB4NWVlZDAxZTIsIDB4YmRiNDM1NzksCi0JMHhiOGMyYWU1NiwgMHhhYWZkOWVhZSwgMHhlNWNmOWM3YywgMHg5NTIyZGRjMSwgMHhlNDQ1ZDcwNywgMHhlNGNjZDkwMSwKLQkweDk3N2FlZjQwLCAweDIyNThmMTFmLCAweDBhN2Q5ZTA1LCAweGFiZjI5N2Y4LCAweDk1ZmUwMTVmLCAweDlmZmQ2MTcyLAotCTB4ZTNmZTFlMzQsIDB4M2U2Zjk0ZGQsIDB4YWI3Y2FhMDksIDB4YmU0NmFiOTcsIDB4MmUzNWQ4MmQsIDB4YjI3ZWRmMmEsCi0JMHhkZjNhMjMyMSwgMHhmOTUxZWZkMiwgMHhkYmUzMDM3NiwgMHg1NTcyZDdmZiwgMHhhODk1NjM4NSwgMHg5Y2FhYWI5NywKLQkweDQ2OWUwZGVjLCAweDJhMjY5OTM5LCAweDljYTM1NzA4LCAweDkyZWYzZmE0LCAweGE4ZjQ5ZWFjLCAweDdmNGFhMWQyLAotCTB4YmQyOWJmNDUsIDB4Mzc1MWU0MDYsIDB4ZDg3NGFhOWQsIDB4MWQyYWE3NGQsIDB4ZTg5ZmIwZjYsIDB4YmYyYzY4ZTAsCi0JMHhkMjgyNjgxOSwgMHhmN2RlZWU0YiwgMHg3OGEzZjZhNiwgMHhmNzYxNjkyZCwgMHhlYmRkYjQ1MCwgMHhmMmYwYTc5MCwKLQkweGFhNDczNmUyLCAweGEwOTdlZjVmLCAweGY5MGMwN2NkLCAweGQ3YmVhMWEwLCAweGQ0MzVjZjkwLCAweDE1ZjIxOWY3LAotCTB4NjYwMWZhODYsIDB4MmMzZTY4M2YsIDB4OTA4N2E0MTMsIDB4OTJiNGJlYWUsIDB4Yjc2MDlkZjgsIDB4ZGRhMjJmZGIsCi0JMHg3OWNlOGJhZSwgMHhkNWRmNmQwZCwgMHg1M2YwMWU5OCwgMHhjNmRhYjBmOSwgMHg0NGUxOGZjZSwgMHhiM2M4MGQ3OSwKLQkweDE1ZDg3NzJlLCAweGQzMWI3OTBmLCAweGMzNzJiYjdiLCAweGZlOGQzOGFlLCAweDQ0NDVhMjc4LCAweDIwMTZkYzc5LAotCTB4OGNmNmI0ZDMsIDB4MjE1NDVmMDgsIDB4NmY0OGRhZmUsIDB4ZDkwZWNjZTUsIDB4NzdlZWMzMTUsIDB4NjkxZDEyNmYsCi0JMHg1OWRjZTFjYiwgMHgxOTI4N2EyZCwgMHhlZTJiNDU5MCwgMHhiYTg5ODE3MiwgMHhhZGQwNjVhYiwgMHhjNWY3ZThiMywKLQkweDVhZWM4ODZmLCAweGE3MzVlZmM0LCAweDY3MGRjZTZhLCAweDA5ZjFmZjg4LCAweDZkOTdkYzAyLCAweDZjMmZmYzQwLAotCTB4NDU4OGU3NjEsIDB4NzNkM2EyMWIsIDB4ZTc5NzZmMTEsIDB4ZGM4MzI2NTgsIDB4NDlmZmZhYTQsIDB4ZWQ1NTlkYWQsCi0JMHhlMWIzNjBhNywgMHg5Y2NkY2I3YiwgMHgzY2YxYWJlZSwgMHgyZmFmNTQ1NywgMHhkMGYzZjFmNywgMHg2NDdlNTU0OSwKLQkweDFmOTQwYzkwLCAweGYzODFkMDcwLCAweDM3YmI5NzM4LCAweDlkNmYyMzg5LCAweDc1ZDBmMTQ1LCAweDM3NDAyNDQ0LAotCTB4YzQ0NDVhMTcsIDB4NzY0Njg1YzMsIDB4ODlmYzQ5NWYsIDB4MjQ2NTNmYzgsIDB4ODU0ZWYyOGMsIDB4YzdmMDA3NTcsCi0JMHg1MGU1ZGViMCwgMHhiMzBmZWVjNywgMHg0YTU1YTQxZSwgMHhmNDc5ZmNmNiwgMHhiMWRhNjhhZiwgMHhmYmExODNlNywKLQkweGZiZDJmZjIwLCAweDNkMjY3ZjY5LCAweDYwM2U0ZmViLCAweGQ3NmUzYjQzLCAweGJiZGUyNzAxLCAweDMzN2ZlZDc0LAotCTB4ZWZjODQxZWQsIDB4YmVmMDc4YjUsIDB4YTM1N2MwZjksIDB4NTZiYThlODEsIDB4OGU0MDBhNWEsIDB4Zjc2MDBkNzUsCi0JMHhiZmZiNTVmNCwgMHhmYjg2ZGQxYSwgMHg5ZmM0MmFlNywgMHg1ZmNlY2NkMywgMHhmM2ZlNWExNywgMHg1ZmIzZGMzOCwKLQkweDAyYWJhMTY4LCAweDFkODBlMGZkLCAweDJmZTVlMWVkLCAweGQwOGVkMGRiLCAweDJjYWJmZmI1LCAweGI3OWZlMzlmLAotCTB4YmY3ZTMyOWUsIDB4YjMyNGU1ZDIsIDB4ZTJmY2MxNzYsIDB4N2NiYTVkOTgsIDB4NTY2N2Y4ZGYsIDB4ZDM3M2ZkYzAsCi0JMHgyZDIxNzk0MSwgMHgzN2NhZmM5ZiwgMHg3NjNlNDFhMywgMHg0ZjdhNjJlZCwgMHgzNGY2ZDRhNywgMHhhY2E0MWZkYywKLQkweGEyNDJiNGJhLCAweGU2MDRlZTcwLCAweGY5NGY0YmU4LCAweGY5MjY3MmFiLCAweGNiODM0NjQ3LCAweGI5MWY2ODM3LAotCTB4ZmY1Yzc4NWEsIDB4MDIxZTA2M2YsIDB4YjQ5NjIzZGUsIDB4MDE1NjAzMzgsIDB4ZjhlOTdkZDYsIDB4MWMxZTQxOWYsCi0JMHhhYTVkMjBiMCwgMHhiODI0ZmRlYiwgMHgyYjkxZjUwMiwgMHhhYzA2N2JhZCwgMHhkMzdmZjEzYiwgMHhkNWQwODViYSwKLQkweGJmZjRiYmFjLCAweGUzM2ZiZTM5LCAweDBmOTFhOGZiLCAweGZlZjlkMjdhLCAweGMzYmYzMWZiLCAweDVlZjljMWU5LAotCTB4ZTJmZmJkMjUsIDB4NzdkZTFiN2YsIDB4YWViYmJjNTEsIDB4ZmZjNmVlYmMsIDB4MWRlZWViZTYsIDB4ZTVjYzZmZWYsCi0JMHhmZGMzNzc3OCwgMHhkZjJiZjk3YiwgMHhhYmJlZmNlMCwgMHgzZmZhM2I5YywgMHhiZWFhZmQ3NCwgMHhmMjkzM2JmZSwKLQkweDNmYWQwNjZlLCAweDQwM2I1NDhkLCAweGU5NTFmOGIxLCAweDY4MzIzN2ExLCAweDFmZmFlZmU5LCAweDRlZjk4MzhlLAotCTB4YzYzNWY3ZTIsIDB4NjY2MzdkZjksIDB4NzA0OWJlZTcsIDB4MjVjNzQzNmYsIDB4ZWYzZjAyNzEsIDB4M2Y1MjczYjEsCi0JMHg1YmY0NWZhZSwgMHg0ODdhODc5NiwgMHg0MGJmZmViZiwgMHg5NTk4ODI3ZCwgMHhmYzBmYjgxYSwgMHgwZjQyZGE1ZCwKLQkweDMxOTAzNmZhLCAweDc3OTA3Y2M3LCAweGZhZjNjOGRmLCAweDA0YWZlMmYzLCAweGNhYWI4NWUyLCAweDFmMzc2OTdlLAotCTB4N2ZiNTNkMDEsIDB4NThmNTExN2YsIDB4ZmFmZWEyOWEsIDB4ZmIxYTZiYWEsIDB4Y2VlYjIyNWUsIDB4ZjQ1MjNmMzMsCi0JMHgwOWE5OWJlNywgMHgxNGQwNzNmYSwgMHg4NDRkZGZkZSwgMHg4NzI2ZmZjZCwgMHgzODUwMDgxMCwgMHg1OGYwMWE0YywKLQkweDI3NDNkODAyLCAweDQwODg5MTBkLCAweDZmODk1M2YzLCAweGE2MWI5YzE1LCAweDdkZmRmNDM4LCAweGUzYzRmNzAwLAotCTB4YjdjYzcwMjIsIDB4N2YwMjJkZWUsIDB4YzA0N2FiM2UsIDB4OTg3NTg2ZmUsIDB4MzM1ODllNTAsIDB4ZTE4M2E0MDUsCi0JMHhiZmNjNjZiNSwgMHgwMzhmNzI2MywgMHhlMWI4Y2YzOCwgMHgyMDFlNGZhNSwgMHhjYWY1NTc2MCwgMHg2NWNiYTE0YywKLQkweDJmYWZmMWY2LCAweDA1OTA5ZTVmLCAweDAzZjY2ZmU3LCAweDUwYjc3OGZlLCAweDY2ZDE3ZDdkLCAweGViYTE4YTEyLAotCTB4ZmUyNjZjNWQsIDB4OGJiMDc4ZDgsIDB4Y2VhNGU0MGEsIDB4YzNjZmFhMmUsIDB4MjI5M2Y3Y2YsIDB4N2VhOTVjZmQsCi0JMHhjZmY4NzQ2ZiwgMHg3NGEyNWY0ZSwgMHgyMTA4NzI3ZiwgMHhmYmM1MjE3YiwgMHg1M2NmNjYyZSwgMHg2YmRmNTdjZiwKLQkweDNmMmFmMDYxLCAweGQ5MDMwMjRhLCAweGFiOThiOGJkLCAweDJjNWEzZmI5LCAweGU5N2JiYTMxLCAweGMyYzZiYjJmLAotCTB4ZDc2MjY2YjksIDB4OGZjNjU4YzgsIDB4OTA0ZmNjOTksIDB4ODgxNzk3ZWIsIDB4MDA3MWViMTIsIDB4YzU4YTBlM2YsCi0JMHhhMjIzYjE3YiwgMHhkOWRmOWEzMywgMHhmYWRlN2U3NiwgMHhkMjk3ZGMwZCwgMHg1NDllYWJiNCwgMHg5M2Y3YTA4YiwKLQkweGZjZjlkYTMwLCAweDJkYjI1NmY1LCAweGFlNDI3ZjhhLCAweDM4MmRkYWE0LCAweDk4OGZlOGRlLCAweDM2N2FmNjA1LAotCTB4MzRkYTYyZmUsIDB4OGViNzhiNTYsIDB4YTNjZDY3ZTksIDB4N2UwMWUyN2IsIDB4MmJlZTZhNGUsIDB4YzJmODUxZmUsCi0JMHhiYmUwMGVmOSwgMHgzNTM2ZDZkZCwgMHgyZWRmMGEzNywgMHg2MzNkOTg5MCwgMHg3ODRiYTFjNiwgMHg1MmQxMWViZSwKLQkweDFmM2UwMjY3LCAweGRkZDI2ZjUxLCAweDcxMmRkZGJiLCAweDE5MGM3ZGZkLCAweDcxOWFmMzAzLCAweDA0Y2NlNmM4LAotCTB4M2QxMTFjYmMsIDB4ZGU1N2VmZTAsIDB4OGJlY2E5ZjIsIDB4ODQ2NDZmNzIsIDB4ZjYwZmY0MjcsIDB4OGRjOTVhZDYsCi0JMHg4MjkzZWVlMywgMHhmYmFlMDEwYiwgMHg5YzA5NWJjZSwgMHhkNWNhZjZiNywgMHhlOWU2ZDFjNSwgMHgyZTc5YjBiMCwKLQkweDQ2ZmJjMTI2LCAweDgzZjdmZmE3LCAweDQ3MmVjNGVmLCAweDU3OWMxMjY4LCAweDc1ZjIwOWVhLCAweDQ4MjNmYTRmLAotCTB4NDgxYTE3YzcsIDB4OWMzMWU0MDAsIDB4NWMyZTQwNmYsIDB4MWZiODI0NjgsIDB4MDJmYzkwNTAsIDB4ZGY5NDZiY2UsCi0JMHhjNzNkYTA3ZiwgMHhmOWRlNmIwZiwgMHhjYTQ3ZDgxYiwgMHg5ODM3MDQ1YSwgMHg2ZGNjY2JhMCwgMHhjYWVkZDgzMiwKLQkweDkwNDRlMzliLCAweGVhOGExOWRiLCAweDc1MWVlOTBmLCAweDZhMmY4Njg3LCAweGViYzIzMzI1LCAweDM5YmVjZTcwLAotCTB4MWQ2N2VlMzAsIDB4Y2Q3ZDgxMzIsIDB4MDVkODZhZmIsIDB4OTZiM2ZmNzIsIDB4YmQwN2M4YjEsIDB4OTViN2ViYWQsCi0JMHgwNDhhNjhhNCwgMHg2YmE0MTBmZCwgMHg2YzhjM2QyMywgMHg2ZmU1ZDE4YywgMHg4MTdkN2QxMCwgMHhkYTU4NjZiZiwKLQkweGUwYTI3OTk2LCAweDdjNjY0NzJmLCAweDJkZjJkNTdhLCAweDdjOTlmZmYwLCAweDZmOTU1NzdiLCAweGMzNTczMTNlLAotCTB4ZDE5OTI2NDcsIDB4MjViZTQ2YmQsIDB4NGI2ZjkzNDcsIDB4ZTAxOTI1MDUsIDB4YTBmZjc0YmUsIDB4ZDJlYmMwNjQsCi0JMHg2OGM0YTQzNywgMHgyNTQ3NmRmMiwgMHg5MTdiMDdiYiwgMHgzNTc2YjFmYiwgMHhiZDc2Zjk1MSwgMHg1MTM1YmU0NiwKLQkweDRmYzUxNmY5LCAweGYxMzI0M2EwLCAweGYyMGFlZGZkLCAweGMzNWZmMDJkLCAweGJlNDAzYjdmLCAweGJlNjdhMzQ1LAotCTB4NmRmMmE4M2YsIDB4OTQwOWNiNzQsIDB4NGM5YmEzNmYsIDB4MmZjY2ZmM2EsIDB4ODRkZjI4YWYsIDB4OWY0MDNiYzQsCi0JMHhlYzc5MjIzYSwgMHgwNzY3ZTg1MSwgMHhlNDVlZGZkNywgMHgwZTMwMzY3ZSwgMHhiMjcxYjljOCwgMHg1YWJmYzcxYiwKLQkweGI1NzI5NzM5LCAweDA4YmZlZTcyLCAweDViOWNhYWNlLCAweDlmYTA5YmJhLCAweDY0M2E0ZjZhLCAweDVlZTk2ZTcyLAotCTB4YTAwNGU3MmEsIDB4OTZlNzI2NDcsIDB4OGVjYzI3ZWUsIDB4YzM2ZjkwNjMsIDB4ODIzN2M4N2IsIDB4YWM0MmNiZjUsCi0JMHhmYTczNzk3ZCwgMHhmZWQwZjcxMywgMHg4ZjI1NzhjNiwgMHgxMzFmZDY5NSwgMHhiNGUzNzc5MSwgMHg2YzljNmVmMiwKLQkweDkwZjczODQ2LCAweDRlYWU0Nzc3LCAweGYyZTZlZGRlLCAweDgxYjFjYThlLCAweGY0OGQ1ZjIwLCAweGZiZDE2OWUxLAotCTB4N2YxYmVlZmYsIDB4YzBiN2YxYmEsIDB4Nzg4YTZmMmYsIDB4ODk4ZWY1MGYsIDB4MzViYzE3ZGQsIDB4ZDAyNjc0ZmUsCi0JMHhjOTk5MDZkNywgMHg3Yjk3MWY1ZiwgMHhlYzdlOTU5ZCwgMHg2Y2FiZjI3ZiwgMHhlYzhkYTU3ZCwgMHgxMzU5NDEzZCwKLQkweGVhY2IwZmQzLCAweDdmNDI4MGM1LCAweDA5NzM5YTlkLCAweGY3MGE5M2VmLCAweGU2OTkyNDBiLCAweDFmYWE1YTY3LAotCTB4ZmQzZTgwNzcsIDB4M2ViODQ0OWMsIDB4NDM0MzNkM2QsIDB4OGJiMjhiMGYsIDB4NjU1YmNlZDEsIDB4OTQyNTZkNzMsCi0JMHg4OTk5MTc4ZiwgMHhjNWI5ZWMxNSwgMHg0MTY3YTk4ZSwgMHg2NmNlMmQ5ZiwgMHhmZTYyZGZmNiwgMHg1NDRiZjU1ZCwKLQkweGY3OGQzM2ZkLCAweDRiY2Q3OWU5LCAweDdhNDdlZjVlLCAweGIwY2ZhYmRlLCAweDc4Y2ViYzMwLCAweDFmODAwODQ2LAotCTB4ZjY3YmNmNjEsIDB4ZTI4NWNhMDAsIDB4MTVmN2ZkMDYsIDB4YzUzM2ZkN2MsIDB4NzkxNzg0MzYsIDB4OGI2Y2Y0NWIsCi0JMHg4YzJiM2ZjMiwgMHhlMWMyM2E3MCwgMHg4M2EyZTE0NCwgMHgwYTg4NDA1MywgMHhlOWU5OGEyNywgMHhiODExNDkxOSwKLQkweGI2ZDliZTE0LCAweDg1YzBlYzA2LCAweDZmNzgwYTRmLCAweDBhYjc1YzY4LCAweDU1ZmFlMzM3LCAweGQxNzZhYTM4LAotCTB4N2U1ZmRlNjIsIDB4MzNiZTFkNGIsIDB4ODU0NWMyMzEsIDB4ZGQxZTExYjMsIDB4YTNjMDM3NzAsIDB4ZmZmNmU2NGEsCi0JMHhmYzE2MzIwYywgMHhhMGRkMjg1OCwgMHg5YmZmZjE5YywgMHhiOTBmZmU4OCwgMHhkZWU4ODcxMywgMHhmMmU3YWM0MywKLQkweGM0ZjU2YzdmLCAweDNkZGQ3MGM5LCAweGUxODJmYzEzLCAweGM5NzZhZTNlLCAweDM3ZGZlMGViLCAweDA2MzI5OGVlLAotCTB4NzIxYmQzYjYsIDB4OTdiODNlMmMsIDB4YTMwYjZlZGIsIDB4ZjBlOTU0MWMsIDB4Y2Q4NzRlMjMsIDB4ZmFmYmJlMWMsCi0JMHg3M2MyNGM1NiwgMHgwNmUwYjM2MSwgMHg2NDNjYTQzZCwgMHg1Mzk2Yjg0MywgMHgyYWQxYjQ3YSwgMHg3MmZjOWY4NywKLQkweDFiYWI4NzJhLCAweGYzMzRiYmRmLCAweGMxZTI4OWZkLCAweDc1MWZlNzA0LCAweGY3YjAwYWJmLCAweDE4NWI2MzMxLAotCTB4MTgxYmNhNWUsIDB4MTg0OTMyNWUsIDB4YjU2NWVmZWQsIDB4ZDc0NDI3ODIsIDB4MDRiY2Q2NTMsIDB4Zjk1NTgyZmQsCi0JMHg1YTFjN2Y0YywgMHg1ZmExNDUzYywgMHgyNWZhMzQ3MywgMHg4YWNjOWM2MCwgMHhiY2M1OWJlYywgMHhmNTRiMGNkZSwKLQkweDNmOWVjMTFmLCAweDFkNDdmMjgzLCAweGRmZmQyMTkyLCAweDk1ZjdkMGI3LCAweGY4OGM0NWZjLCAweDZkYzM5MGZhLAotCTB4MDFkNWMwMDcsIDB4ZmQzMzBiZjAsIDB4ZGYwOTc0MmIsIDB4ZTVlNWE4Y2QsIDB4YWUwZWJmNjYsIDB4YzhiYTlmOTMsCi0JMHhhMGJmNmZlOCwgMHgxYmE1MWQ4MCwgMHhiNGNmNDA2ZSwgMHgzNzBhOWM3YywgMHg0M2MwNjdhMCwgMHhmMjExN2NjYiwKLQkweDdkZGUxNDc5LCAweDE3YWU3YmQyLCAweDdjYjRjN2VlLCAweDA0ZmZiODVmLCAweGUwOGI3ZmViLCAweGZkZDY1MTIxLAotCTB4M2JmYmU5OWQsIDB4ZmM2Zjc1ZDIsIDB4YmU4MTkxZmUsIDB4OGY4NWIyZGYsIDB4ZGVmYTA1OGUsIDB4OTNkZjIwMmYsCi0JMHgzZGZkMzg5NiwgMHg0ZGNlY2M5NywgMHgwZjk0NmRkYiwgMHgwZGU2MWVlMCwgMHhlOTU1YjNjOSwgMHgxY2MyMWYyOSwKLQkweDUwOWU3MGNlLCAweDZiOTI3NjM0LCAweDU3ZTAyMTYxLCAweGZmNDU2MGQ4LCAweDQwYzc5YzMwLCAweGU1NmFhZmE2LAotCTB4NDkxYjBlZjUsIDB4ZjdiMzIzYmMsIDB4ZjljNmZmZmUsIDB4NDk3ZDM3YWMsIDB4ZjE4MjhmY2QsIDB4ZDMzNjhlNDAsCi0JMHhjNjQ3ODZmMSwgMHhhYTE3ZWUzMywgMHhlYjRhZTAxZCwgMHhiMWZlNWJiMiwgMHg3Y2UzYTk3NSwgMHg3Mjk5ZmY1NywKLQkweDI4Zjc4YWQyLCAweGMzOGQxZmFhLCAweGUwOTQyYmU0LCAweDMwNGQzYWZjLCAweGMyZDFmZGViLCAweDcwZmZjZjFjLAotCTB4MmRmY2IyZmYsIDB4YWIxNDkzZmQsIDB4NGRlMmZkZWUsIDB4MjlmODgzYTIsIDB4NGFmMzNlZGMsIDB4Y2I1NDJmYzgsCi0JMHhlYzAyNmY3OCwgMHgzZWU4OTMxZiwgMHg4ZWNmOTM0OCwgMHgxZWZmN2I4ZSwgMHg1ZWYxMTcyYywgMHhmYjM3ZDZlNiwKLQkweGQ1YmRjMjk0LCAweDhhNjdjY2FkLCAweGEwMjE5YWRjLCAweDc0MGVmMGZlLCAweDcwZjQxZTM2LCAweGY4NWFmMTJiLAotCTB4ZmIzY2I0OTAsIDB4NzgwMTcxN2IsIDB4NWY1MTkwNjcsIDB4N2NhMTU5M2QsIDB4NTAyMWE2M2QsIDB4NzI2N2E5MDUsCi0JMHhjMDJkZTEzOCwgMHgwMDkxNDRkNywgMHg3ZGJkNWFiZSwgMHg3YmZlYzMyNiwgMHgwNjQ5NWZkZiwgMHg5ZWE4Y2U5OCwKLQkweDM5OGNmZDgwLCAweDVlYTExMjQyLCAweDhmMTEzNzhlLCAweDNlOWJlMzMzLCAweDNhNzZmNzdmLCAweDQ1NDdmMWJmLAotCTB4Y2RlYjQyOGYsIDB4MDA3MGVjM2MsIDB4NmNkZjBkOWYsIDB4NWMwZDNlMjIsIDB4MGFhMDQ4NzIsIDB4NGZlMzQ3ZWMsCi0JMHg3OTA3NmY3OSwgMHgxZWY1NDA1MCwgMHg2ODJmZjdmMCwgMHg0MTcyYWJhOSwgMHhlZDgwYjM3ZSwgMHhhOWJlZmRjYiwKLQkweDFkYmYzYTJlLCAweGJkNGU5ZmI1LCAweGFkMDJlNDBlLCAweDZmOTRkZDA3LCAweGViY2FmNTY2LCAweGIyYjgwZjA1LAotCTB4OTQ2Y2I1ZTYsIDB4MGJkNDZlNTEsIDB4NDc2Y2EwZjgsIDB4ZDY1NjIwNDAsIDB4ZmI0YWMwNmYsIDB4YjY5OWIxZGQsCi0JMHg4YmZkODRjZiwgMHhlYjdlODdiNiwgMHg3NmY3N2QzZiwgMHg5ZTc0M2I5MCwgMHhkZDkxYmVkOCwgMHg3NmQxZTZjZiwKLQkweGZkNDlmMDBhLCAweDcwYWZlYzEyLCAweDVkZTA0MGIzLCAweGRiMjM0MTQyLCAweDRhOGUwYTlmLCAweDNhNmYyODFlLAotCTB4YmJlZTI0ZjgsIDB4YTk3OGU5ZDMsIDB4ODUxZmIwZTksIDB4OGVmYmUwYTYsIDB4ZGYxYjgyYjEsIDB4NDM0OTRkZDUsCi0JMHgwYjA1ZDViOSwgMHgwMWQ2MDY4NiwgMHhlMDVjYmVlYywgMHg1MWZlN2U3OSwgMHgyZDM3YmZmNSwgMHhjZjM3N2ZjYywKLQkweDQzZWU0MmIzLCAweDNiMmI3OWZiLCAweGY0ODRkZDMxLCAweGZhMGNhOWY0LCAweDZmMGEyOWRhLCAweDNiZjc4NTFmLAotCTB4NzBlMTdmZGMsIDB4OWI3MmM3ZjYsIDB4NjczYzdmNjYsIDB4YmZmNDg0MTksIDB4ZmEyMjc5YTgsIDB4YjkyNjJkNGIsCi0JMHg2MzNmYWY3OCwgMHhkZjNiZDMzYywgMHgwMDE2ZDFiZSwgMHg1MmRiZGRiYiwgMHgzZjdjM2ZiOCwgMHhiZjA1YTM3YywKLQkweDcyNjBlZTc3LCAweDFiNDA3M2I4LCAweDZmNGY2OWRhLCAweDQ3YmMwODk2LCAweGEyMmNkYWE4LCAweDI4ZGQzODljLAotCTB4YjhiNWZkZTEsIDB4OWRiOTQyNDUsIDB4MjFlOTgzYmYsIDB4N2ViMzM3ODcsIDB4ZmQzMDM3NGYsIDB4M2I5NmYyNmQsCi0JMHg5YzNlYzJhNywgMHhlZmJkNGRiZiwgMHgzZDVhNzI2NiwgMHgwYmI5ZTY4NywgMHg1MTliZmI3NSwgMHhiODcyYWFjZSwKLQkweGEwYTNjMzk0LCAweDVmZWYwZWJhLCAweDU0Yjc3MjhkLCAweGYyMGQwZmRkLCAweDY1ZWUxNGI2LCAweDg0MzVmZWYxLAotCTB4MzQxYTU0N2MsIDB4OTgzOTEzZmEsIDB4MGQ3Mzg2M2MsIDB4MTJlODQzZDAsIDB4NTFkOTc3ZDIsIDB4NDZiOWMwODksCi0JMHgyYTYzYjhmOCwgMHhlYzJjZTdhYywgMHg3YzdjYjRmNywgMHhmYjg1ZTA4YiwgMHg5NjYzODJmMCwgMHg4MWUzZWEwMCwKLQkweDE1ZmVmM2Y5LCAweDJjMGY5OWY2LCAweGJmYzA1MDQ0LCAweGNhODNlMjlkLCAweGY4NGI2Y2E5LCAweGVmZDE4ZjJmLAotCTB4ODJiMWRmNjcsIDB4OWZhNTA4YTcsIDB4ZDU3ZjA4ZjksIDB4MWI3MzM0MmYsIDB4N2NjOGYzZjMsIDB4ZGUwOTI2YTcsCi0JMHg3ZDI5OTI3ZiwgMHhkN2U0MGU1MCwgMHg5MWE3YzQ4YSwgMHhlZjA1NjcxYiwgMHhmZGIzNzdlZCwgMHhmZmY1YWRjMSwKLQkweGYzYWI5NGNjLCAweDZmZWQ5ZjYwLCAweGQ5NTFmMjY1LCAweGRkZmJlMTI2LCAweDQ0N2NmY2MzLCAweGI3ZTgwYmNmLAotCTB4NjM3N2I4NTksIDB4ODdhMWFjOTIsIDB4OTMxYmZkYzIsIDB4NmIyMGU4YTgsIDB4MTU0NDdmYjgsIDB4Mjg1YmY3N2YsCi0JMHgwZjBhNzFiMywgMHhjZDNhZWUwOCwgMHg2YTNmNmEzOCwgMHhkNjVlZjJiZiwgMHg5NjdlZDA2ZSwgMHgyMTdmZDZmNiwKLQkweGY5ZDcwZmNjLCAweGMzNzIwYzg1LCAweGYxOGY0ZmQ4LCAweGZiMjdlOTdiLCAweGMwZDYyZmRmLCAweGI3ZWNlZDNiLAotCTB4Y2U2ZTc0NDUsIDB4MjBmYTc4ZmUsIDB4OWE4MGJkZWQsIDB4NTkwYzdlYWEsIDB4NTc4ODlhZWYsIDB4YmZlY2JmMDMsCi0JMHgwNmFmMTBjNCwgMHgyOGUzNGRkZiwgMHhkZGZjNTNmZiwgMHhiOWY0Y2NkMiwgMHhlNDI3NzFhNiwgMHhiYmNjNGNkMiwKLQkweGI4Y2JkZjgxLCAweDBhNmNiYTNkLCAweGNhNjllZmJiLCAweGYwMTU2Nzc4LCAweDAxNGNmNGZmLCAweDdkZjg4MWU5LAotCTB4ZDQwNDlmNzIsIDB4NGZmMDE0ZGYsIDB4ZWQ2NGNmY2UsIDB4ZTA3YjY5ZjMsIDB4MTkyN2E2Y2IsIDB4YTE3OTUyOWYsCi0JMHhkYjI5M2M4MCwgMHhkNjJhNzFiYywgMHhlODE0MTdhZiwgMHgzZTZlYTliZiwgMHhkOTA1MjVlYSwgMHhmYWYyYzEyMiwKLQkweDE1MjdhODEzLCAweDAwNDg5ZjM0LCAweDViZmNhNjdlLCAweGQ5NDBmYTAzLCAweGM0MWI4YjA0LCAweDJhOTdjYWIxLAotCTB4ZmRjZGJmOWYsIDB4M2RkNTg5ODksIDB4Y2JmOGZjMGEsIDB4ZjBhMmE5ODAsIDB4NzA5NDc4YjcsIDB4NjVmMTk1YmQsCi0JMHhkYmUzMzY3OSwgMHhiMDQ4NzdiNywgMHg3M2UxYWJjMiwgMHg4Zjk1NmJlNCwgMHhjY2UzZTA0NSwgMHhkZTFmMWYwOCwKLQkweGJlMDY1OTNjLCAweGQwMTAxZDNlLCAweGM4MzI2MmVmLCAweGVkZjNlMDAxLCAweDMxZWZiNzAyLCAweGY5NmFmNjNkLAotCTB4NjY3YTRhZmMsIDB4ZDg1ZmU1MjksIDB4NTczZTU1MmYsIDB4Y2ZjOGRhZjksIDB4M2JiNmU2YWQsIDB4ZGRmNzFlNjAsCi0JMHg0Yzc1YzM2OCwgMHgzZmRlZmVmZSwgMHgxNWU0YzdkZSwgMHhmZTRkZDdkZSwgMHgyMDQ5MDNmZSwgMHhjY2NjZjMxZiwKLQkweDZiODU0N2FmLCAweDgxZjk5OWE5LCAweGNkNTc5OGY1LCAweDZhZjUzOTBhLCAweGM3OTg2N2U2LCAweDVlZGU4YjQ2LAotCTB4YzcxMmQ4NzIsIDB4MjVlYjlkZmMsIDB4ZjEyYmZiYTQsIDB4YmIzZTBmNjcsIDB4NWFiY2ZlNGEsIDB4N2YxMmJhYmUsCi0JMHhmYjhiZTNhYSwgMHgwNjFjZmRmNSwgMHhkOWViOGUyMCwgMHg2Mzg1Mjc1ZiwgMHg3N2YxYzI4OCwgMHg1ZmEwY2Y4ZCwKLQkweDRmZTdmOWQ5LCAweDE0M2MwMGNjLCAweDBlNzRhM2VmLCAweDI0ZThkNWY0LCAweGU2NzM5MDIxLCAweDQ1NWJlZTAwLAotCTB4ZmQxN2EyNGQsIDB4YWNhMWNkNjUsIDB4M2U1YTlkZGIsIDB4YzUzZmZlNjYsIDB4OWU5MTNhMmYsIDB4MDI1OTc2OGEsCi0JMHhhMmZiNjlkMywgMHg0NjhmMWYzZCwgMHg2MTk1OGMzZiwgMHgzZmYyNGZmNCwgMHg3ZjY1ZjVjZiwgMHg4M2UwNjhkYiwKLQkweDQzZjMzMzIyLCAweDk5ODVjYTMyLCAweDc3M2ZhNjU2LCAweDgyY2ZiNWVjLCAweDJjMGQwOWY1LCAweGYwNTE0MGRlLAotCTB4YjlhMmM5MmUsIDB4OTU2Njk4YTcsIDB4MmY3ODdhZDQsIDB4MGM3NGE3ZTgsIDB4N2U2MTMxZWYsIDB4YWFlZTc3ZGEsCi0JMHg3NmM3NTFmZiwgMHg5YThhMjcyNiwgMHgyZGM0MDBhNSwgMHhkOWQ4NmEyOCwgMHg0NWE1ZmUwOSwgMHhmZjY4MmNjNywKLQkweDE0Zjg2ZjJhLCAweGJmMjdlN2ZkLCAweDJiZWQwM2I4LCAweGVlYTJjZGU1LCAweDNmODdhZDNlLCAweGIyMTg4MzVmLAotCTB4NTM1YTFmODAsIDB4ZDFmZmRlMjksIDB4MDdjYzA5ZmMsIDB4NzdkY2ZmYjksIDB4N2UyYjM3ZjQsIDB4M2YxZWZmNzEsCi0JMHg2ZmYxNjEwNSwgMHg3YzgxNzM5ZiwgMHhjZGJhZDczOSwgMHgwZDdkN2U4NSwgMHhkYjVmZWVkZiwgMHhiODJmN2ZjMywKLQkweGRkZWZmYjllLCAweGI5ZTA5YTcyLCAweGRlZmZiYTI2LCAweDMyODVmODM5LCAweGJkNTY4M2NhLCAweGU4NjkxZWZmLAotCTB4OWQyNWZhODMsIDB4OTQ2ZTU2NjcsIDB4ZmQ2ZThmZmIsIDB4NGYxN2M3N2MsIDB4Yzc3OWZmODMsIDB4ODY5ZTRmYWUsCi0JMHhlZGZjOTc3OSwgMHhhZmMxYTdiMywgMHhlMWIwMWM4OCwgMHhmY2ZlNTdiZSwgMHhhYmFmZTg3YiwgMHg2NTY0ZGJiNiwKLQkweGZkYjlkYTc0LCAweGVlNzdmNDM5LCAweDgxZTJjMGZjLCAweDlmZjczYWRlLCAweGIyZmYwMzRlLCAweDkyOTc5ZGNlLAotCTB4NmNiOTllYzAsIDB4ZWY2ODRkZmYsIDB4NzI3YmI2NWQsIDB4NmZiMjg5MzIsIDB4NmZkMDI5YTgsIDB4YWRmYzJhZTAsCi0JMHhkYzNiNzg4ZCwgMHg5ZmZkMTg3NCwgMHg4M2JjNTNjZSwgMHhjYmY2ZWMxYywgMHg3ZjMyOTYwYywgMHg2M2ZiODU1NywKLQkweDZmZjc0NjM2LCAweGQ5N2ZlMWVmLCAweDM3YWRmYjc0LCAweDYyNmZmYzgyLCAweGZkMTVlNGZhLCAweGY4YTVkZjMwLAotCTB4ZjAyYWZlYmMsIDB4NmRmZGM4ZDgsIDB4YWI3Y2I3ODMsIDB4Zjg3OWU2MWYsIDB4YzlhYmUyODUsIDB4OWEyZmM3ODAsCi0JMHgyOWZhZmYxNiwgMHhkM2VhNmIyOCwgMHhlODY2MWZhYiwgMHhmYWE3ZTAyYSwgMHhkZWFkZmJjZiwgMHg2ZmMwYWM1NywKLQkweGZlODM3ZWJiLCAweGU5YmY4MGFmLCAweDVmNDdlYzBhLCAweDgzZmJjMWE0LCAweDJlNzg1MjMzLCAweGZkZTEzZmVjLAotCTB4NTJiZjhjMTYsIDB4ZTQ3ZGZmYjQsIDB4ZWZkZGNlYTcsIDB4NzA5YTlkYTAsIDB4ZDI0ZWY2M2YsIDB4OGRmY2MzZmQsCi0JMHg3YWRlYmUwNSwgMHhlNGRmZjMyNywgMHg0ZWZmMDA3OCwgMHhiOWRmODVjNSwgMHg2YmEzMjcxZiwgMHgzN2IzYmZkNSwKLQkweGFjYWZjZWJmLCAweGZkNTZmZjRjLCAweGZmZWI0YmZhLCAweDIzMjRmZGNjLCAweDAxYjIxMzc4LCAweGY1YmUyNzVmLAotCTB4MDcwYTgyM2QsIDB4MTFjYjk3MzcsIDB4N2VlOGU1YmYsIDB4Y2I3ZWRkYjQsIDB4M2UwMWJjMDYsIDB4ZjZlYTlmNjEsCi0JMHhmZWY5YTY0YiwgMHhmMjRlZDA2MywgMHhmODNmMzQ3ZSwgMHhlZmU2M2FjZSwgMHhkZmU5MjlkYywgMHhjNGYwNDY4ZiwKLQkweDBkNTgyM2RmLCAweGFiODFjYmZlLCAweGQyYmU1ZmYzLCAweDljMmJiZTNhLCAweDM0NTI4MjRlLCAweDNhYmMyN2FlLAotCTB4ZGYyZThlYmUsIDB4M2ZjMjZkMTMsIDB4OTE2ZDVlZjYsIDB4OTMxZjdjNjAsIDB4N2YwNDRiNjAsIDB4Y2Y2ODEzOTAsCi0JMHhmMzdmM2VlYywgMHhmYjcwNzZmNSwgMHgyMmYzYzc3YiwgMHgwOWFlYmZmYSwgMHg2ZWY5NDYxZSwgMHgxMDY1MWY5NCwKLQkweDdjY2EyMzQ3LCAweGJlOThkOTg3LCAweGY2Y2NkNjVlLCAweGNlNWQ4ZThmLCAweGQzZjY4MzgwLCAweGQyMmY2ODcxLAotCTB4MDllMzU5NzUsIDB4N2JmYjRmZDksIDB4MzJiN2UxYmQsIDB4N2M2MmM3YmIsIDB4NDA0N2ZiMDQsIDB4MTc4ZTllYjMsCi0JMHg3ZTY2OGUwZSwgMHg2ZmRlY2NkYSwgMHgxZjFjNjcxYywgMHhmYTI1YmNhNywgMHg5ZjhkZTUzOCwgMHhmNjI5YzZlYSwKLQkweGUzYjc2NTA3LCAweDMzOWRlM2NhLCAweGZlODJlZjdiLCAweDNkMzJiNWNlLCAweDljNTA1Y2YxLCAweDU4N2RlZDE2LAotCTB4ZjdlMjRkOGEsIDB4YTUyY2Q1NjEsIDB4MjVjNjI4ZmIsIDB4MjQzOGIyNzEsIDB4ZjUwNjJiYTIsIDB4ZWNjZTY1Y2UsCi0JMHg5MDA5YjE2MywgMHg1NDA3ZThjYSwgMHgwZGZiODJiNSwgMHgwMjkzY2NmZCwgMHhmZTcyYWVmOCwgMHg1NzdjYzA5OCwKLQkweGY2MzU3YzAzLCAweDIzZWRjOTFmLCAweDI5NGFhZmEwLCAweDc3NjA5OWI5LCAweDM5MWRjYTMwLCAweDFhMDI0NGMxLAotCTB4NGU3MzJmN2MsIDB4NWVmMDU2NGIsIDB4ZjAxZmQ0MjQsIDB4YjRlMzNjNzksIDB4NjQ3ZWZkMDQsIDB4NjQ3ZDVmYjAsCi0JMHhlOTkyNmIyNiwgMHgwYmYyM2VmYywgMHg1ZmI0MTU5ZSwgMHgwM2M3ZjVmMiwgMHhmYjNkOWQ3MiwgMHg4N2JlZjM1NywKLQkweGE5YmQ5ZDQ0LCAweDBlM2UxMmNjLCAweDhhZjIxNWU3LCAweGM0MjNlZjBkLCAweGU3OGMzNjAzLCAweDBkYjRmZTUwLAotCTB4Zjc3ODdiZDcsIDB4ZGVhMmNmNTcsIDB4NjEwYjZiZmQsIDB4NTRmNDQzZjcsIDB4ZGNhNDcxMDMsIDB4YmJkMzhmYWMsCi0JMHgzZmZhN2FiZiwgMHhjNjg2YWY0MSwgMHhhN2ZjZmM3NCwgMHg0ZjM4N2Q2OSwgMHhmY2YxZGEzNCwgMHg3NjJiYjVkMywKLQkweGFmY2ZlYTM0LCAweGU0MDMzODNjLCAweGQxOWRiZTVhLCAweGM5OGJmZTYzLCAweDVmZGEyYTgxLCAweGI3Y2IyMjdiLAotCTB4ZjE4MDE4ZWYsIDB4Mzk3NzhhMDMsIDB4ZjBmMTFmZDEsIDB4NjBjYTk3ZWUsIDB4ZDE3Y2VhOWYsIDB4YTQwNjZlMGUsCi0JMHhmZmFlMTVmMywgMHgzYmM3ODZmZiwgMHhhZDE0OTVhYSwgMHgzMTIxNzI1ZiwgMHgyMDc3ZGEyYiwgMHhlNTY3OTBjNSwKLQkweDdmMDQ5ZWY4LCAweDgxMWYzOGIyLCAweDE2MzlhYjFkLCAweGJkNTA4ZmRmLCAweDc5Y2ZkNzU4LCAweDA3YmY3YzI5LAotCTB4OTdkZmQ4ZTksIDB4ZjUwOTliYmQsIDB4YWM2MDc5MDUsIDB4MWZmZjk2YTcsIDB4ZTViNzkzMWIsIDB4MTFjZWRhMTYsCi0JMHg4NzJlNWZhOSwgMHhiYWJlNThmMywgMHhhZDI3OTMyZiwgMHgyYWU3ZmY1OCwgMHg5ZWYyZjM5ZCwgMHhlYmZhYjJmZCwKLQkweGY1NzUwMzZkLCAweDNjNjVmNmQ0LCAweDdlOTE4OGRlLCAweDE2ZmRlNzFmLCAweDJjMzM3YzM3LCAweDI4OGQzYzVhLAotCTB4M2ZlZmM3ZjMsIDB4MDRkZjg4MTUsIDB4MWI0ZWNiN2EsIDB4Nzc4MjUxYzYsIDB4YmYwZmUwZjgsIDB4NWZmNzY2NDcsCi0JMHhjNjEwYWUyNSwgMHhlNWM3ZDkzMywgMHgwODRjNDk3MSwgMHhlNWY0YWJlMywgMHg5MGZhODBmMywgMHgxN2I2ZDYyNywKLQkweDJmYTVlZjAwLCAweGU3YzQwOGQ5LCAweGU5YzU3ZDI5LCAweGVlOTc3YzA1LCAweDU3ZmRhYWY5LCAweDY2ZWZlMDk5LAotCTB4ZTk1ZWJiNDcsIDB4NzQ4MmZmMmIsIDB4Y2QwOTZhNTAsIDB4M2I2NTc4YzUsIDB4OTllMjA0MmQsIDB4MjM3Y2VjNzUsCi0JMHg0M2I1ZjgwZCwgMHg3ZmM1YTUwYSwgMHg2OTVlYmRjYiwgMHg0Nzg4NjJkMCwgMHg1MmVmZTdlMCwgMHg3ZGUxODMwMywKLQkweGIzM2VmYWJkLCAweGQzMzkxN2E4LCAweGRlZjc2MzY1LCAweGJkZGU2Y2ZiLCAweDdkNzdlNDM2LCAweDk1NzM5ZWRjLAotCTB4ZWZiNDgzY2QsIDB4ZTg5NDhiYjQsIDB4OWI0ZGYxNzIsIDB4NjlkOTc3ZjQsIDB4YTNiOGU1YmIsIDB4MzdjNzNiYzcsCi0JMHg0OWU3M2U2MSwgMHgyMDE4MTI2YiwgMHgwZTNlYThjYiwgMHgyMWE4YmNmMiwgMHgwZmQ4M2ZiZCwgMHg3N2Q0ZDkwZSwKLQkweGVjMmM0YWVjLCAweDA1MjQ4NzQ3LCAweDA2ODdkOWNmLCAweGZiYjVmZDI4LCAweGFiNGE5OWNjLCAweGFlZDA5NjYyLAotCTB4ZGQ1NzY5ODMsIDB4MDk3ZDc5YTcsIDB4NjZkYTI3ZjgsIDB4MWY3YjkzNDUsIDB4OGYwOGVjZDksIDB4MWJjNWFiMjIsCi0JMHgwNzY0OWRlZCwgMHgwMmRlYWZkZiwgMHgxYjIyNDA2MywgMHgxZDQzZjgxNywgMHg0MDE0OTBmNywgMHg0NjI4YmMzOSwKLQkweDBmZjRmZDYxLCAweGI4YmRmMGM4LCAweDJkMjBlZjYxLCAweGQ1Y2QwYTFjLCAweDI5ZjI4ZjU4LCAweGQ0OTBiM2MyLAotCTB4ZjkxYTk5YzgsIDB4Yjg1NzhlYWQsIDB4ZjE5OGExZGMsIDB4M2ZmOWJhM2QsIDB4OGM1NWU5YmEsIDB4Yzg4ZDE5ZTAsCi0JMHg3NDcyNzg5YSwgMHhiMzNiNDVjNywgMHgyY2MwZWVmYSwgMHg3ZTAxNWFlNSwgMHg5Yjc1YzkzMiwgMHg2YTk1MjA0NSwKLQkweDEyMThmN2U0LCAweGQ1NDFkNGM0LCAweGFhYmYxNjJlLCAweDNjOWM4MDgyLCAweDgzNDcxZGQzLCAweGQ3ODExYTYwLAotCTB4ZmRmNzI4MDMsIDB4OTIxOTA4MDMsIDB4MTI4NmZhMGUsIDB4ZWZjMGQ2ZWIsIDB4ZjM4NWNkOTIsIDB4MDgyYjk4YjEsCi0JMHhkZGQzMTc5MywgMHg3ZTBhN2ZhMCwgMHhlOTRjYjkxZiwgMHg2MWIyYWFhOSwgMHg0MGY3OGIxMCwgMHgwZDdlZjBiYywKLQkweDNmM2E1ODU1LCAweDRiZjVmYjk3LCAweGQ1ZjkwN2EwLCAweDI3ZGY3MGI4LCAweDYyMGEyYTgxLCAweGJiNDUzMzcwLAotCTB4ZTJjMjI0ZWIsIDB4NDYzYmFkOTksIDB4YjQ4ZmU3YjQsIDB4ZmZhZjgxMTgsIDB4MDczMWNhMjAsIDB4Njk4NGZjODksCi0JMHhjODJhYzQxZSwgMHhiZmQ4YWFkYiwgMHg5Y2ZkYzM2NSwgMHhhMDQyNGRjMywgMHgyNDFkZGExZiwgMHg2M2E5YTc2NCwKLQkweDk2OWNmOWE0LCAweDM0OTk1ZGZmLCAweGY3NGJhMWFmLCAweDkxYjk3ZDA0LCAweDMzNWNhODJmLCAweGY4NDQxYjhjLAotCTB4MzczZjdlZDEsIDB4YTFiOWZiZjQsIDB4YWRiZmNmZGYsIDB4ZTU0ZTE1NWYsIDB4MTBlOTQxZDYsIDB4NjU3NTYwODcsCi0JMHg4ZDhkYzM5MCwgMHhhMzcwZTU2NywgMHg3MTBlMTlmMCwgMHhjNjI5ODhkNywgMHgxMWNkZWZjMywgMHgzNjdjMzFhZSwKLQkweGYxNGZhODE2LCAweDFkMjYyNzNhLCAweGQ4ZjNmNGUxLCAweGFmZjA2MTAzLCAweDA0YjUwOTI1LCAweDA0YWJjM2NlLAotCTB4YzkyMmZlMzUsIDB4MTFkYTY4NzUsIDB4NzBmOTE1YjcsIDB4NGU2NzFmM2QsIDB4ZjU3N2EzMGMsIDB4ZmFjZjdjMWQsCi0JMHhlOGVmYmMzNiwgMHg1YmQ2ZGY1MSwgMHhmNWU4OThmZCwgMHhjN2NkYmQ5ZCwgMHhkZjNlNzUxZSwgMHhiZDk0Y2U1NSwKLQkweDcwNWJmZWYyLCAweDZmMmRkYjVmLCAweGZhOTQxNGRjLCAweDYyNzNkYjc3LCAweDcxYTViZjY4LCAweGMzNmI3ZmVkLAotCTB4YjQ2ZjRjMmYsIDB4MmZlM2Q3ZjYsIDB4ZDI5NWU4MDYsIDB4ZmQ2MGNjNGYsIDB4N2JkZTIzNzcsIDB4N2NmOTk3YTMsCi0JMHg0OGVmMzQxZCwgMHg5YmJhZWJhNSwgMHg5ZWE1M2Y4ZiwgMHhiM2RmNzdkZCwgMHhlOGUzZDk4YywgMHhmNTBiY2ZmMSwKLQkweDc3ZmFmMGU3LCAweGFlZDFmMzViLCAweDg3ZTYyMjcwLCAweDllZTEyNzE4LCAweGRlMTdhNjVhLCAweGY3ODg5MGYzLAotCTB4MDhlMjNkYWIsIDB4N2Y5NDJmYzEsIDB4MDQyZTVkZWUsIDB4ZTJkMWU5NDIsIDB4ZTM3NzkxMjIsIDB4ZjhmM2ZmNjgsCi0JMHg0MzM4YzZmOCwgMHg1ZDRjYTIzZSwgMHgzMzhiNDYyNywgMHg3ZDRjZThjNCwgMHg1ZjhjNjU4NywgMHhmMmU0ODhiMCwKLQkweGVmZmE1MWY4LCAweDkzMzczNmVkLCAweDVjODBlNjg3LCAweDJmYjIzMjNkLCAweDNhNTIzN2Y5LCAweGQyOTI3ZDA2LAotCTB4ODk2N2RjMzEsIDB4NzEyZDNkZmMsIDB4ZmFiZmNjYzksIDB4M2M5ZDc4OGUsIDB4YjEyOGEwYmIsIDB4YzUzNmJmYjgsCi0JMHgyZTFiZTJlYiwgMHhjNzI0YWYxZCwgMHhmOWI1ZTQ2OSwgMHhiZjE3NWRhMiwgMHhhNGYyNGFhNSwgMHgyZTkyYmM4MCwKLQkweGNhMTQ0NzVlLCAweDNlYzVmMjU3LCAweDUzOTRkMTQ0LCAweDE5OTkxNDNkLCAweGVlNTEzNmRjLCAweDIwMDM5OGE0LAotCTB4NWNlZWNjZTcsIDB4NmM3YTBmOTIsIDB4YjU0ZmEzMWMsIDB4YTIzMDljYmUsIDB4OWI3YzZmNWIsIDB4MjYyYzdiZmUsCi0JMHhlOTZjZjkxMSwgMHhjNjE5MjUxMiwgMHhlYjczZGEwOSwgMHhjYWU4OTNlMSwgMHgzZDFjZjhmNiwgMHg4M2JmYzFlOSwKLQkweGQ2MGFiYmFkLCAweDNkNzNkZTlkLCAweDgzYzdiMjU1LCAweDc3NGU3M2ZhLCAweGNjMmIxYmJjLCAweGVmMjhiNDRmLAotCTB4ZGZiZjMwMmIsIDB4MmFlYzA0NGIsIDB4MzllM2UxM2QsIDB4YmJmMGEwMTMsIDB4N2U4N2U4MTAsIDB4ZjRlYzYyMjEsCi0JMHhjM2FmZThhMSwgMHgxMDc1ZTRmNSwgMHhmNWNhOTFjZiwgMHhlM2JlM2M1NSwgMHhmMWNmMWUyYSwgMHg3MzdmMWU2MSwKLQkweGE4ZjM4ZjBkLCAweGE5ZWFjZmMyLCAweGQ2ODIzOGM2LCAweGFiN2ZhY2MxLCAweGMxMjdlMzliLCAweDQzZTNlMWM0LAotCTB4NTI5YWM5N2QsIDB4MzY4NGY3ODEsIDB4ZTIwODQ1NzcsIDB4NzRmZTkxNzEsIDB4YmI2OTgwOWYsIDB4YjI3ZTExYWIsCi0JMHg5MjdkYTA5YiwgMHgwNWJjYzdkNiwgMHg2YTk1MzRmMiwgMHhjYzFlMjI0NywgMHg0ZjkyMGFlZSwgMHhmYmI2MWZjYiwKLQkweGQ5YjgwMmRlLCAweDQxYmM3ZDE0LCAweGMzNDBjYTRiLCAweDllMDFiMGJkLCAweGM5M2QzZDJhLCAweGE3MDI2MmU0LAotCTB4MTI3YzIzMjcsIDB4NTNkZjE2NjQsIDB4ZjRkZWEzYTUsIDB4Y2ZlZTJhYWEsIDB4ODNkMmE5YmIsIDB4MmI4ZjE1NjksCi0JMHg4NDcxMDU1NSwgMHg4ZjI5NGUyMCwgMHhjZmM4OTQyMywgMHg4ZTE0NTU4OSwgMHhiZTA5ZmRmMCwgMHg2NjU1NTY2ZiwKLQkweDlkYTY3OTYzLCAweGE2MDk1M2VkLCAweGMwMTI4MzhhLCAweGJiMzA5ZTI1LCAweGY0OWY4MjY3LCAweDU1Y2MyMmNmLAotCTB4ZmM1MjdlMTQsIDB4N2FiYzgxNDQsIDB4ZTdjMzU4OGYsIDB4NzQ0MWU5Y2QsIDB4ZTE3MTBkOWIsIDB4MmYwMDI3OTQsCi0JMHgyNjQ4NmYzNSwgMHg5NzE1ZTdiOCwgMHhkNjNlNGNkZiwgMHhjYjM4YjNkMCwgMHgzNDc2MDcxYiwgMHg2MDEzZTFkMSwKLQkweGUwMzlmYmZmLCAweDIzNjdjZTk1LCAweDU5YzYxNzlkLCAweDlhYjBmNGU1LCAweGE3MmQ3ZGUzLCAweGRlM2NmNTg3LAotCTB4NWQzODJmZTcsIDB4MGZkNzRhM2MsIDB4N2IwZjJhZjksIDB4MWE2MWIwMzcsIDB4Yzg0YjhiZjMsIDB4NjhiOGYxMzAsCi0JMHgzYmY1YTIyMSwgMHg4OTA0ZjM4YiwgMHgzYzg5ZDc0YywgMHg3MThhNjBhYSwgMHgwYjMxYzhlZiwgMHgyNDdkOGJkMiwKLQkweDdlNTA4YWYxLCAweDhiMDA4MWVjLCAweDBhOWI5OTYzLCAweDFhOWM2NmZiLCAweDEyODI3MmI3LCAweGI2MWYxYjM3LAotCTB4M2UzY2NjODYsIDB4MWRjZWM4OWMsIDB4M2RlMzUxYWQsIDB4NTkwZTc5NTYsIDB4ZGJkZWZjZTEsIDB4ZGNjZTBlN2MsCi0JMHhmNmJjNjA0MywgMHhkMjBlODg1MSwgMHg3YjNiOTdjNywgMHg2YTNiY2QzMSwgMHg3ZjRkZmVhOSwgMHhkYTVmMWVlYywKLQkweDVhZTdhMDZhLCAweDM3M2YwMTBiLCAweGJlN2Y5ZDA3LCAweGY3YjFhZjQ2LCAweGQ5MDgwNzYyLCAweGE5ZDhhNDdmLAotCTB4NDUwNzRiM2MsIDB4OTdmN2UyODMsIDB4MDA2YzgzYjUsIDB4MDU3MzBhNjcsIDB4YTQ5YjFkZWMsIDB4MDM5MDU0ZGMsCi0JMHhkYmEyZTI5YiwgMHg0Y2VjNjI2ZCwgMHg4ZTY1NzY1ZiwgMHg4ZDc1ZDFkMCwgMHhlZTc2YzVlNCwgMHhmNDc0NjMwOSwKLQkweDRmZTVjMzVmLCAweGRkMWM5NGZjLCAweDdjZGU1NTc3LCAweDBiZmFjMzFlLCAweDMwOTk3ZGRhLCAweDk5OGJhNGFmLAotCTB4YjcwOWJmYzgsIDB4NTUzZjk3NDUsIDB4Mzg4N2VjOTIsIDB4OThhMzU1MDAsIDB4OTRjZmYzYmMsIDB4NDNkNTllOTksCi0JMHg3NTM5MzA5ZSwgMHhmOGYwOGM4MSwgMHg4NjQ2NzQzNSwgMHhiZjA3ZDQxMywgMHhlMmViMjk5YywgMHgzZTAzYWUxOSwKLQkweDYzNzEwNjE5LCAweDAyYWZmZDE5LCAweDM4YTlhMDdlLCAweDg5ZmE0NjU4LCAweGYzYzI2ZTlmLCAweDVmY2UxYWVhLAotCTB4ZGE3ZTczMGYsIDB4MTFlOWY5YzAsIDB4YzQwYjIzZTAsIDB4Njc3YzY1OWYsIDB4YjBlMTllMjYsIDB4NThiOTU0OWYsCi0JMHhmZTAxMmRkYywgMHhjNTU0OWI0ZiwgMHg3MTg3OTgyYywgMHgwNDU5OGY4ZSwgMHgzMmE4OWZiOCwgMHg0MzE3NTM3YiwKLQkweDU5ZTJkNmJlLCAweGUzMWU2MGE5LCAweGVkNmJmYjAxLCAweGRmN2YzNDRhLCAweDJjZTI3ZDkwLCAweDZjZDc4NTNiLAotCTB4NmFjN2JmOGUsIDB4YWNmZTIyYzcsIDB4YWMwMTRmNmUsIDB4YzE4OGVjY2IsIDB4NTBkNTdkZjMsIDB4NzNiNDQxNmIsCi0JMHhiMzNiNzRjMiwgMHgyZjc4NTA4ZiwgMHg0Y2ZhN2U4NCwgMHg4NzNlZTljYiwgMHg2NmExOTk4MSwgMHhmZGMyMTY2NiwKLQkweDFkMDc3ODMxLCAweGVkY2E3ZTg1LCAweGZkMjE4ZjRjLCAweDQ2YjA2NGZkLCAweDM4ZjBkNDBlLCAweDkzZjE0NDcxLAotCTB4YjA3OTFhZTEsIDB4MDI1NGM4NzIsIDB4NzI5ZTllNzYsIDB4YjgzOTE3YTAsIDB4MmFjMWM5OGQsIDB4MDYyZmVmODEsCi0JMHhmOGYxNTZiYywgMHgzNDFjYWFkYiwgMHhjNGEzNWUwMywgMHg0ZDdkNWFkNywgMHhiZTdkZWViNiwgMHhiMWI4ZTVjNCwKLQkweDNiM2IzYWRlLCAweDllMjFhZDM3LCAweDU5ZTg0ZmIwLCAweDBlYjRlMTRlLCAweDNmZDkxNGUwLCAweGEwZTNiYTczLAotCTB4M2FjYTIwZmQsIDB4MGNlZmYyOGMsIDB4NTMyMDgzZWMsIDB4MzM4YzNlY2MsIDB4OWU1NjQ4YjIsIDB4ZTU3MjBmMTgsCi0JMHg0Y2JmOThkZiwgMHgzYTgyN2E2ZiwgMHg0MmM1ZmU1ZSwgMHgyZWYyNjdkYywgMHhiZmZkYzc4ZSwgMHgyMTNjNzZhMCwKLQkweDJiMDJhZTcwLCAweGY2OWRlNmJkLCAweDc1M2ZjZGU5LCAweGQ3NGVkZTAxLCAweGNkZDNmYmYyLCAweDU3ZmMwMDUyLAotCTB4MmVhZWQ3NGUsIDB4NGRiNTdjYzMsIDB4ZmM0YzljMDEsIDB4ODgyZTAzZTUsIDB4NjllOGIyY2IsIDB4Y2Y1M2VmMTEsCi0JMHhkMGQzZjhjNCwgMHhjYmViZWZmZiwgMHg3ZjhkNDU5NywgMHhiNWJhOGFjNCwgMHgxNjlmMjA2OSwgMHhlZjhiNWQ2ZCwKLQkweDdiYzRjZWVjLCAweGYyNmFlNjg3LCAweGJkNDE1MzI0LCAweDk2ZDM4ZDUwLCAweDBiYzU4Y2Y3LCAweGZiNmY1ZGZhLAotCTB4ZThlNmRlNTIsIDB4ZjgyYWZkZTcsIDB4Y2E1YWY0MTUsIDB4MWViN2EwMmYsIDB4NDM4NGU1NzQsIDB4N2U2N2ZmMTQsCi0JMHhiMjdkNDM2OSwgMHg0Mjc3ZjY0YSwgMHgxZGFiNmFiZSwgMHhmOGFhOTA1YSwgMHgxZTNmZjFlOCwgMHgwYmI0ZGZiNiwKLQkweDc2YzNjN2U0LCAweDg5NDgzZWVmLCAweGVkNGJjNTgzLCAweGY4ZWEzZTZkLCAweDg1NmI2MGVkLCAweDc4YTdiNzdiLAotCTB4YTc4YTE0MWMsIDB4MWJiYjNhOTksIDB4ZTc2Yjc3YmIsIDB4ZWQ2MjE0NzYsIDB4OTc4NjNjYTUsIDB4YmI5NGJkMmIsCi0JMHg3MTBjOWY5OCwgMHhlNzU3MmY0NywgMHgxZjlmOTY3MywgMHgwN2I1NmQxNywgMHgwM2QxNDY1NiwgMHg4NGY3ZjExNiwKLQkweDg2N2RmODhiLCAweGJiNjcyZjRhLCAweDY3NDYyZGY1LCAweDE3MjVmZjZhLCAweDYyZjQ2NWFmLCAweGI5ZTE0YmEwLAotCTB4OWY4NzQ4NTEsIDB4N2Y3MDkxMWQsIDB4MTFiYjllMTEsIDB4NWQ5NGI0ZTMsIDB4MTJmZDYxYjQsIDB4ZjgyOGYzZDEsCi0JMHg0NWI3OTM3NywgMHhkZWZiZDNhNCwgMHg1OWY3ODcxOCwgMHg5MDc4ODYxZCwgMHgwOWU5ODNhMiwgMHhiMTc3OWE2YSwKLQkweGU2OWZhNzU4LCAweGIwY2ExNjA1LCAweDJjNWRlNzlmLCAweGY2MGM3NDYzLCAweDkzOTgzODY3LCAweDY4OWI1ZTZmLAotCTB4MDM5NmY0ZTYsIDB4YjRkZDJmZWQsIDB4NmZjYmQ2OTIsIDB4MjY0ZWY0NjMsIDB4YmVkMGNiZjgsIDB4M2NmNzY3NTgsCi0JMHg4YTBlNDUxYywgMHgzNzE3NDUwZSwgMHg4NGFkYmYzNCwgMHg0OWY4NzNiNSwgMHg3ZmZlZTY4MiwgMHg5ZThiOGYxMSwKLQkweDQ1YzU5MTdmLCAweDQ5M2Y2ZTI0LCAweGYyZTczYTAxLCAweGZhOWY0MjI5LCAweDI2MWRiNWY4LCAweDdhZTMyZjg2LAotCTB4MTMzYWY4MTMsIDB4NDM3YmQ3YmEsIDB4M2VmZGViMmYsIDB4MGZkNzJmNWIsIDB4MWJjNmRiZjIsIDB4ZjFhYmY1ZDYsCi0JMHg1OTE1ZDZkMSwgMHg1ZmFjMDRjZiwgMHg5NzBkZTNjMiwgMHhkNWRlMTg5OCwgMHg0YzFkMWJmMiwgMHg3YjY5YWIwZSwKLQkweGE1ZTIyY2U1LCAweDhmMjE1MWZiLCAweGI4MTc5OGFiLCAweGNmM2UwNjRmLCAweDJmMTcxY2RiLCAweDVmOTlkNjY4LAotCTB4YTdlNzQ3M2IsIDB4MWYzYjU3OTIsIDB4NmZlNTcwZTMsIDB4ZDAyZjJmOWUsIDB4OWUzNzU1ZjAsIDB4NmJhZjI5ZmMsCi0JMHg4NmUzNzRmMSwgMHgzYTU3NTMzZSwgMHhiZGNhMWY2MCwgMHgzZWUzMDFkNiwgMHg2NWY3M2E1YiwgMHhiYzMyZmQwMiwKLQkweGEzZmQ5MTlkLCAweGRkMGU1MDJiLCAweGNlZjY4YWU3LCAweGRiYzA0NmU1LCAweDM4N2NlZDM4LCAweGM5ZmIwNmRlLAotCTB4YTM3YmVkNDgsIDB4NThlM2QxOGIsIDB4YmUyYjZmYjYsIDB4ZGJiYmVlMWYsIDB4NDQ1MTY0OWYsIDB4ZDEzNzk3N2EsCi0JMHhlMzg0NjlmMSwgMHg1OWJmMGUyYywgMHg4ZTFjNzBkZCwgMHg4NjU3NTQ3ZSwgMHg3ZjNhNzVlMywgMHhjOGUxNWVhOSwKLQkweDQ5YzJhZmYxLCAweGIwZjU0ZWZkLCAweDE4NDQ4ZTk5LCAweDU3ZjdiMDk3LCAweDBhYWZlM2I1LCAweDI3ZjE5MTdlLAotCTB4YTFkZWZhZjAsIDB4YTJmYzgyNGYsIDB4ZjRmODEyZjIsIDB4MWYzZmIzZWMsIDB4YjBmNzZkYWQsIDB4MzBiZGUyN2QsCi0JMHhiYWJlYTkwZSwgMHhkODNmYjU3YiwgMHhkZjUwNzk3ZCwgMHgwNDczYzkzZiwgMHhhZGZlNmJjZSwgMHhhZThhYTdhMiwKLQkweGE5ZjYzMGJiLCAweDU2YWUxMGNlLCAweGFlYWRkZmJmLCAweDc2MGUxODZjLCAweDIwY2FhYWQ2LCAweDQwYmI1NGE2LAotCTB4OGE2YThiYmQsIDB4Njg1ZmQwMWUsIDB4NzhiNDZmMTUsIDB4YmMzOWViNTQsIDB4MzJiNjU3NTcsIDB4NGZkNTkxM2IsCi0JMHgyNDBmNjBkYywgMHg5OWM5MmY4YywgMHgzMzM3NjhiMSwgMHg4MzdhZjQzYiwgMHg2MGRjZjkyYywgMHg3YmY5OTNhNywKLQkweDViZWNjOTY3LCAweGU3MDk5ZTk3LCAweGJmMGM4NGUwLCAweDFkNmJiZTA2LCAweDQzNjJmZmNjLCAweGY4M2Y1MmNhLAotCTB4M2VjMTU5ZWQsIDB4MjJlZDA4MzksIDB4ODE3Njc0MTcsIDB4OWM4YmNkNTcsIDB4ZjBkNGVlOTQsIDB4ZjU4MzMxYTMsCi0JMHg5MDQyNTJlNSwgMHgyNDZlMWRhMCwgMHg0NzlkYWVmZCwgMHgyZWNlYWI0MiwgMHhkOThiODQ2YSwgMHgxMmZiYzJlYSwKLQkweDJlZjZlMTMzLCAweGVmZjUwZjBlLCAweDcyZTVhYzY0LCAweGNkZGI4NmI4LCAweDE5N2IwNzFlLCAweGJiNGFkZjg1LAotCTB4MzVhM2Y3MGIsIDB4MzlkODk4ZDcsIDB4ZjNjNjZhYzMsIDB4NDBmMWI4MzUsIDB4OGZkNjM5N2QsIDB4N2FjMWIwZWIsCi0JMHg0M2YzZDA0NCwgMHhlNDQyNzc5OCwgMHg3YjQzMTExYSwgMHgyMzhmOTAwOSwgMHgzZWY5MDA4YSwgMHhmNDA2YjQyNCwKLQkweDZkODlhZWQ2LCAweGQ5ZjdjM2Y3LCAweGUwMWQ1ZjM2LCAweGQ2ZDRjYmY3LCAweDRmZDgwMmUzLCAweDAwYzM3ZDczLAotCTB4M2ZhMmI1Y2UsIDB4N2ZmNWExNDMsIDB4YTAzMzg2MmQsIDB4M2EyZDFhNWUsIDB4NmJkMmNmMTYsIDB4YTdkYWFmYzAsCi0JMHhmMTYxOTdiOSwgMHhiMTc5MjM0MCwgMHhlNTlhZmU2NywgMHhjNTNkYzM2NiwgMHhlNWI0YzNkNywgMHgyZDk0NmNmYiwKLQkweDdiZmNmNWM2LCAweDBiMWYwOTI5LCAweDc0YjZlZjI4LCAweGYxNzNjOWRiLCAweDhlNTFkMDdkLCAweGEwMGZhNDRmLAotCTB4YmY2YzIzYWYsIDB4NjI1NjYwYmUsIDB4NGRmZDk5ZTMsIDB4Njc2NzU1NzksIDB4NmFhZjJhYjYsIDB4ZjNmMzMzYzYsCi0JMHg1N2E1M2Q1MCwgMHg3NGFiYTdiMCwgMHgzNWVjZDgzMiwgMHhhOTBkM2QwMSwgMHg3NGI1ZGZhNiwgMHg4MzJmNDUxMSwKLQkweDcyZjcwNjcxLCAweDBmY2VhMTFmLCAweDNjMDAwN2RlLCAweDZjNTk4YmM1LCAweGM1ZDAzMWJmLCAweDI1ZmI2ZWJlLAotCTB4YjMyYTdiZmIsIDB4YWYzM2MyNTUsIDB4YTIzOGY5NjIsIDB4ZDFmYzYwZmUsIDB4ZTNlZGJhMGYsIDB4Y2RkZTU4YWIsCi0JMHhkODBiZTU3MiwgMHgwNWExZGM3ZCwgMHhhNmQ3ZThiMSwgMHhjYjc2NjNjZSwgMHhjM2QwNTZkYSwgMHgyZWE0Yjc2NiwKLQkweGQ5OTlmYjg0LCAweDBhZmVlYmQ2LCAweDdjMjkzZWU5LCAweGUyNzIwZWM4LCAweGU3OWUyY2E3LCAweDJhYmRlZmRkLAotCTB4ZmJiYTY5ZDksIDB4ZGVmOGFkZGQsIDB4Y2ZkZjM0ZmEsIDB4MDRiMDkyZTYsIDB4YjcxMWY3ZjgsIDB4MDFlYmVjY2MsCi0JMHhjNDA1ZDNlNCwgMHgwOTQxZjNjMywgMHg4NGY3YmRjZSwgMHg0MmRlNzcwMiwgMHgxYWJlZjc3MywgMHg2MjhlMDViOCwKLQkweDVmODQ4ZjczLCAweDgyZjk3NDAzLCAweGMzNjhhOWVlLCAweDdiMzVkYjU2LCAweGQ2Nzk2NzVlLCAweDY2ZmQ3YmFlLAotCTB4YjIyN2FlMmIsIDB4NWZhZTJiNWUsIDB4ZjY0NDFmNWQsIDB4YjhlZWYyYzQsIDB4OTEyZTJjYzAsIDB4MGI0OThmMGEsCi0JMHhkYjY3YmFkOSwgMHg3Yzk4ZmNlNywgMHhkYjM5ZGU4YiwgMHhjY2FmZWEzYSwgMHhjN2NkODg3ZiwgMHhhMWNmOWYwOCwKLQkweDRlYzVjYTg4LCAweGE0ZTRkNzg3LCAweGUxZDBmZmViLCAweDVlYjQ5ZDE1LCAweDY2OWMzNTg5LCAweDYyZmM4ODFlLAotCTB4ZTg5OTdjODEsIDB4YWU4OTI2YmIsIDB4ZGYwMGZjZmYsIDB4NDM4MDQ0YjAsIDB4ZDJhYjlmNmIsIDB4ZjRlNGRmMmYsCi0JMHhlZmE3MjZmZCwgMHhlM2JiZDMzNywgMHgxZWEwMjcxOCwgMHhhZTAyNGY3ZCwgMHhiM2E3MDY2YiwgMHg0N2RmYmIzNSwKLQkweDZmZjNjYzNmLCAweGE1NGI3OGIwLCAweDgzZWI3MmEyLCAweDQ5MTMzNzY4LCAweDZhYWMzOGI0LCAweGRmYjcyNmZhLAotCTB4MGU5NTRlMjgsIDB4MGRjZTNjMDMsIDB4NGQxOTk3ZTMsIDB4OWZiYmY0NzYsIDB4ZjRlYTI5OTEsIDB4MDI5OTE5ZjAsCi0JMHgxZDZiODdmNywgMHgyZjRlODc3ZCwgMHhkMmY1YzU1ZCwgMHhmZjgwZmQ5ZSwgMHg4NTlmYjE4MSwgMHgzOWUzMjdjYiwKLQkweDllZWM4ZjZjLCAweGZmZGZmMjA4LCAweDg1YjNhMzM0LCAweDI5M2MyODUzLCAweDEzYWNlNWRkLCAweGZjNzBkZWYwLAotCTB4ZjIwMjM2YTksIDB4MWM0ZDYxNzAsIDB4ODVmM2ZiODEsIDB4MjBmYmZjMGYsIDB4ZDY1MGM3ODgsIDB4ODFiNzM0YWEsCi0JMHgxZTA4MGM5YywgMHg4YjI1YmZiMCwgMHg0NjdlMzI0YiwgMHgxMGU5YjVlNywgMHhiZjIxODdkYiwgMHhmMGU5ZTYwNCwKLQkweDNkOGQwZTJhLCAweGM4YWE0M2JhLCAweGRmNWQwMzcwLCAweDNjODJmMGViLCAweGY3ODc3Zjk4LCAweDZmZTc4YzAzLAotCTB4N2IwNDFkMGUsIDB4Zjk5ZWJhYjcsIDB4MDBkOTI4ZjcsIDB4OWI0MWY5ZmYsIDB4MzEyYjUzMTcsIDB4MzZiOTUwYzcsCi0JMHg5MGFjNGNkZiwgMHg2Y2M0Y2IyNiwgMHg3M2NiN2M4MywgMHgxZTRiYjA1ZiwgMHgxOGU0ZWViNiwgMHhkZmRmNjU2MiwKLQkweDcyZjQwNGI4LCAweDViYWM4MzVkLCAweDNlYTBhOGY3LCAweDNlYjM3ZDdmLCAweGU3ZDIxMTlmLCAweGU3ZDExZWM3LAotCTB4NDMxYTgzYjcsIDB4ZmZjMzk1ZjEsIDB4ZmRhMWQ0Y2UsIDB4ODc3ZjAyMTYsIDB4MGI0NWY4YTYsIDB4MGNiZWIzZmEsCi0JMHgwNWZhMDA3YiwgMHg0ZGRlNTBkYSwgMHg4MmM5NmUyZSwgMHg1ZTRmZDZmYiwgMHg5Y2UwOWE3MCwgMHhkZjliZWZiZiwKLQkweDc4NmQ3ZGUyLCAweGM5ZTMxZDg3LCAweDBjNTNmYzFmLCAweGMwN2YwMTg5LCAweGExNWI2ZDE3LCAweDA0ZTI5OGJjLAotCTB4MmZjNTc3ZWMsIDB4MGVjMGVhZGEsIDB4N2E4NDY3YjIsIDB4NWZhMDBkMWUsIDB4MzFiZjllYzUsIDB4NzZmMGY5YmYsCi0JMHg2ZmVlMDA0YiwgMHhkY2ZiZDkzZiwgMHg5ZjZmNDAwYiwgMHhmYTg3ZWY2YywgMHhkZjgyY2JjZSwgMHhkN2Y5ZmQwNCwKLQkweGM0ZTY3YzMzLCAweDI3MmQ3ZGIwLCAweGRlMzNkMjg2LCAweDc1Y2ZlYmJiLCAweDFjOTkzYmY3LCAweDFlNmNhZjY5LAotCTB4NGU1OWZiMDEsIDB4YjQ3ZmIzM2MsIDB4MDExYzFlNTcsIDB4OGYwZTVjZmIsIDB4NDllYWFlNDMsIDB4YmM3ZTNjMzksCi0JMHgyNzRmZWE5YiwgMHhlNTE0MzlkOSwgMHgwZmNlNzBjMiwgMHhiMjA1ODE3OSwgMHhkNWZhMDFkNywgMHg1MzkwMTg4YSwKLQkweDc5ZTU2NzVkLCAweGFjMzU4ZmUwLCAweDE1NDcwZjU2LCAweGY0MDZkN2NmLCAweDdjZjkyYmRmLCAweGY3Y2QxMDE2LAotCTB4NTZmN2I4NzQsIDB4YmQwMGE0ZDYsIDB4YmVhMjQzM2QsIDB4ZjljMzVjN2IsIDB4NjVlN2Y5ZTgsIDB4ZjIyZmJjZjUsCi0JMHhkMTQ0NjhmOCwgMHhjODhhY2ZiYywgMHgxZmFjYjI3MywgMHhiZTAwMjVmOCwgMHgxN2JlNDYwNiwgMHhmYjU1YzYxYiwKLQkweGZmZmJjYTlmLCAweDkyZmNjYWNjLCAweGNlMWMzODEzLCAweDdkNDExZTU1LCAweGFkZGY1YmEwLCAweDY4YTc3YWY0LAotCTB4MDdiNTc5ZjIsIDB4ZmMyM2U2OTMsIDB4ZDAyZDI2MGUsIDB4MWZiNmYzOWUsIDB4ZmUwMzlhNGUsIDB4ZmM2NjBkMzYsCi0JMHhiMzI1NTNiYiwgMHgyNzI0N2Q5ZiwgMHg0MThiYmUwMSwgMHgwMzk0Mjc5OCwgMHhhZjgyM2IxYywgMHhkNTFlYTBiOSwKLQkweGZkNjhjNzY3LCAweDZmNmJmMjU3LCAweGVjZDE0ZWYyLCAweGNlOTVkZmQ3LCAweGJiNjVlM2JiLCAweGNhNWU1YzE5LAotCTB4MTZmZGJkY2UsIDB4YTJjZGJiYTAsIDB4MDcxNWFhMDcsIDB4MTQ3OWJjZWYsIDB4ODRiMzdiYzAsIDB4NzY0YjcyZWYsCi0JMHhiZGI3MTg0YSwgMHhiNDA2ZWViYywgMHhiZTM3MTQ1MywgMHhmZmUzMTUzMywgMHgwM2RmMzkzZCwgMHg5MzMyY2FmMywKLQkweDlhMGM3MTVjLCAweGY0ODBlZTE4LCAweDhjNmVjYjRjLCAweDYxZmM1N2FmLCAweDYwNTY2YzhkLCAweGEzYmE3YWJlLAotCTB4YTNmMDhjNzQsIDB4NmRkNjU0MWEsIDB4MTVkZTUzYzAsIDB4N2VhYjNmZTgsIDB4MzBiN2UyMzcsIDB4YzQ2ZjZmYTAsCi0JMHgxYmE3MmI1MywgMHg4YjVjMzNmYSwgMHgzZWJkNjM2ZiwgMHg4ZWY4ZmRkMywgMHg5NTM5NjRiMiwgMHg1NDNiMWE2MywKLQkweGY0NmFhOWM5LCAweDAzOGUzM2Q3LCAweGEzNDRkYTM3LCAweDc3MDNlY2E3LCAweDFkYWZlMDFiLCAweGZlODM2ZmNjLAotCTB4ZWUyY2Q2MDgsIDB4ZTU4ODNhZDcsIDB4ZDAyMDBlMzEsIDB4MDQ3ZmFjMTUsIDB4M2JjMGEyOTksIDB4MzRjOGRiY2MsCi0JMHhkMWI5NTU0OCwgMHgwZDFjMWQ5MSwgMHhkYTE2NWZmNSwgMHhmNjE1ZmQ5ZSwgMHhlZDdlNDRlNywgMHgyZTMwODc3MCwKLQkweDNlZmU1ZjYyLCAweDc5NjE0M2I1LCAweGE4M2FlZmY1LCAweDM2MmQ0NWU1LCAweGU0ZjhmM2Y0LCAweDcxZjI4Y2JjLAotCTB4NDE5N2Y4MDUsIDB4MjY2YzE3ZmQsIDB4M2ViZmRkMTMsIDB4MTI2N2Q5ZDksIDB4MDQ3NjJkZjgsIDB4NzNkY2JjNTksCi0JMHhlNDkzM2VjMSwgMHg4ZDc3ZDk2ZiwgMHgwZmRkNDE3MiwgMHg3NGFmYzA0ZiwgMHhlOWMyZmNkZiwgMHg0YjdlYzMwZCwKLQkweGNlYmYzMTU2LCAweDE5MTUzZWU0LCAweGE0ZjA1MTE1LCAweDJiOTA0YmI2LCAweDEyM2NlMDMyLCAweGQ5ZTFkN2JlLAotCTB4YTdmMjcwOGEsIDB4YzE3MjNlYzMsIDB4ODFmNjgyOTcsIDB4MTIxZWRjZjksIDB4MDZmZGNlZWYsIDB4YmFkMjc1ZmEsCi0JMHhmZTJmZmE1ZSwgMHhlODE1Yjg4OCwgMHg3M2QxNjNlYiwgMHhlNDUwN2JiZiwgMHhhNjUxNmY5ZSwgMHg5MGYzZGYwZiwKLQkweGI0NWNlYzU1LCAweDY2NDI0Y2QwLCAweDg0MmVlZmFhLCAweGU2MzQ2M2ZkLCAweGI4NWJiZjcxLCAweGE2ZmY0MDU5LAotCTB4ZWJmNDFiNDUsIDB4ZGFhZDc4ODEsIDB4NDA1MDg3YmYsIDB4MjJkZmIxYWEsIDB4NjBiNGM0MTIsIDB4MTBiY2JlYjMsCi0JMHhmODE3MjNmNiwgMHhmYzdiYjA2NywgMHhiOTdkN2FhMiwgMHhhNGE4NGVmYSwgMHgxYTI1YjJmMSwgMHhlYTIwYmVkYywKLQkweDJlYzliY2ZhLCAweGIzNmUxNzlhLCAweGRiZWVmY2UyLCAweDM1ZWVjYjE0LCAweDdkODVlMjY0LCAweDg5YzliYzMwLAotCTB4Zjg5OGJjNzIsIDB4YmUzZjNiZDgsIDB4MzAzZjk2MGYsIDB4ZDI4OGJiZGYsIDB4ODVmMmQ3NjcsIDB4MzA3ZDQ1ZGUsCi0JMHg3ZDgxMDc3ZSwgMHhmODk1YjE2ZiwgMHgxZTU4NjM1ZCwgMHgwYjIwMTdlMiwgMHgzOGIyOWYyMSwgMHhlZDRlYjA1MSwKLQkweDI5ZTI5NjNiLCAweDE1YzAzNDI0LCAweDUzYWMyZjU5LCAweDY1ZGU0ZTViLCAweDExNmUyY2Y4LCAweGJkNjBhMzQyLAotCTB4NjQ0MjdlZjAsIDB4MmJkNmQ1ZWIsIDB4NjkyODcwZTEsIDB4MTFlY2U4YjQsIDB4MGE3ZmUwYTUsIDB4OTc0ZDMzN2UsCi0JMHhiOTdlYmEyZCwgMHg4ZmRkMWYzZiwgMHg2OWUyOGQ4OSwgMHgwZGRjYjc1MywgMHg0ZmNkMWI1YywgMHhkNzg3MzhmZSwKLQkweDUyZjMzYmE2LCAweDA1MWYzZjgxLCAweDA3MmZiMzNkLCAweDE3M2QzNjY4LCAweDYxY2M5MDgzLCAweDcxZDJiNzgwLAotCTB4ZTc3NmM2NjIsIDB4MjU2YjNjYjEsIDB4NjQ3ZDRmY2IsIDB4NTFlOTBmZTAsIDB4MWJjZWZlMWIsIDB4MTQyYzZmZGUsCi0JMHhmNzg3NWY3MywgMHg3ZGI5Y2Y1NywgMHg3MWQxNzYzZiwgMHg2OWJjOWExNiwgMHhlZjUzZTQ2NiwgMHg1Y2Q3ZjQ1MCwKLQkweGM0ZmZkNmNlLCAweDJiNmI4YTk4LCAweDU1N2I5Y2EyLCAweDA0MmUzZTdjLCAweGJmZDFiZWYxLCAweGNlYWJlZDk3LAotCTB4N2RhNGIwY2MsIDB4YzVjOGI0NWYsIDB4YTFlYzRmZTQsIDB4MTA3NzdjMzYsIDB4YmJlMDJkZGUsIDB4MTM4NTI3YzcsCi0JMHhjOWYwMmVmOCwgMHhjZTA0MjkxZiwgMHg2ZjE0MjllNSwgMHgxNDlmMWYyMCwgMHhiZjg4MmFjOCwgMHg3MzM0ZDk5NSwKLQkweGJmODA2YmM5LCAweGEzZDQxOGNjLCAweDhhMjY5YjRhLCAweDNmNWMwZWE1LCAweDE1ZWNhM2QzLCAweDk5ZWY3MDc1LAotCTB4MThmODZmM2MsIDB4ZWViYTZiYTAsIDB4ZmYwMWI3NzksIDB4NWI4NDE0YmIsIDB4NDFkMTgzYWEsIDB4ZmE3ZjRhY2EsCi0JMHg3ZTMwOTFkMiwgMHg4MGQ3OTJlZSwgMHhlMGM1NDZlZiwgMHgwYTY0ZDkzYiwgMHhhNjNjNjcyYiwgMHg0YTJmNDBlYiwKLQkweDQxMDcxOTIxLCAweDU3NGNhNzhlLCAweDc3MmQ4MGM2LCAweDkzOGQ4YjkzLCAweGNkZTcxMjY4LCAweDBjNmRmZDA0LAotCTB4MjQzZmM3Y2IsIDB4NzEyMmI3NzgsIDB4MjU3NWM0NmQsIDB4MzY5ZmQ4NWIsIDB4N2ZhMGVmODIsIDB4ODA0ZWMxNWEsCi0JMHhlNzg2MDFlNSwgMHgzMDE5MTVjOSwgMHg5NjIwZjI3ZSwgMHhmNDIxYzgyNiwgMHg4ZGRhM2E1MywgMHhjZGVhMWY3NywKLQkweGU1MDRkY2NiLCAweDEzNGJiMmYyLCAweGZiNjllMzkzLCAweGMwZjQxZGEzLCAweGQxZDVlNTRjLCAweDFkOWVhYWZlLAotCTB4NDM5ZTgwNzIsIDB4ZjU2NzBmMDYsIDB4MmNiMTVlYjksIDB4MjdlNWY5ODMsIDB4MTBmYWE5YTQsIDB4NzkyNWQ3YWIsCi0JMHhmYzgyYzc2MywgMHhkYmU5ODc3YywgMHhiMWJjM2I5ZiwgMHg4Mzc3MzdlMCwgMHhiODBmZGQxYywgMHhmY2E5ZTM4NiwKLQkweDM0MDQ5ZGEyLCAweGQ2N2NiZmYyLCAweGE0ZGVmODk3LCAweGY3NGJhMmZjLCAweDY5YzllMjFkLCAweDBhNGI0OWZkLAotCTB4ZTNkYzYxMGUsIDB4N2U4YWQyNTIsIDB4YmQ0MWE1YzksIDB4MzEwZGViZmYsIDB4ZTk1NWM3ZDEsIDB4NDhhMmZjYmMsCi0JMHg5NWM3NTFmYywgMHhmNjJmZGZmNSwgMHhkMTNlZmUyMSwgMHhiZmU5MjVlYSwgMHhmOWY0MTQ1ZiwgMHgzZDc4YWZlNiwKLQkweGQ5Mjc3ZTMzLCAweGM3MzgyZTZkLCAweDA3N2Q4NzRkLCAweGU0YzA0OWU0LCAweGUwOGZhZTk3LCAweGE2ZGRkM2E1LAotCTB4MTUzYTZmZGIsIDB4NzFlMmVmOTYsIDB4YjU3MmQ1NzUsIDB4MzI1OWNlZmYsIDB4YzYxMzlmN2YsIDB4YTkyYTNhNzEsCi0JMHg3OWYwYTI0MCwgMHhiNDUzZTVhYSwgMHgxY2I0OTZhMywgMHg3NGE4Zjg0NCwgMHg5ZDkzODExMSwgMHg0YTcwMzVmOCwKLQkweDk5MGQ2YWFhLCAweGZlZmY4ZjI4LCAweDQ3NmI0NTkxLCAweDcyNTE0YjVlLCAweDNmYjNmMzg4LCAweGYyOTdhZDZmLAotCTB4MmZjNDEyNmYsIDB4M2RiN2YwZDcsIDB4NTFkZjliYjMsIDB4ODkzMjZjY2MsIDB4YmY5OWRlZGMsIDB4NGQwNGNhNzYsCi0JMHg2ZWVmZDc5ZSwgMHgyMWY4MmZlZiwgMHg2NDhlNjc5NCwgMHhhNDdiZGZlZCwgMHgwNzJiNzdmMCwgMHg1ZDEzZTQ0NywKLQkweDUzYWU1YTQ3LCAweGYyMWFiNzkzLCAweGE1MWY5YTBlLCAweGU1MGRiYmM5LCAweDE0ZjI4NjA5LCAweGFiM2ZiZTQzLAotCTB4YTUwY2UxZGYsIDB4ZGE0MjFlODksIDB4MjFmZDI5MWUsIDB4OGViOTVkZmMsIDB4ODg1Y2QwZDQsIDB4YWM0MWIwMzgsCi0JMHhkZGZjMjFmOCwgMHhmNjRjZDJjOSwgMHg1YWNiMTQ3NywgMHhiMzczMGYwNCwgMHhmMzJiZjA2MiwgMHg4NzMwN2JiMCwKLQkweDM4NWU0ZGE3LCAweGZhZDBlMDEyLCAweDkyODNjODNhLCAweGZhMGRjMTY2LCAweDMzYjgyM2JlLCAweGE3Njg3OTg0LAotCTB4ZDkwNWRhNjgsIDB4ZTA5MmFkM2IsIDB4NmJkNzZjMDksIDB4Yzg0ZGMzZmYsIDB4M2YwZjBmY2YsIDB4ZTRhZWY1ODksCi0JMHhlYmE2NDRlZiwgMHhmMzdiZTBmZCwgMHg3Yzk4NzRiMywgMHg1M2RmNjExNywgMHhlYzc3MGNlMywgMHg3N2YyM2Y3YywKLQkweGNlZjdlOGVkLCAweDk0NjFlZjU0LCAweGFhZjc4NmE3LCAweDQ3MWYzMGU1LCAweDM4NTQ1Zjg0LCAweDAyZmMzYzNlLAotCTB4ZjNmYzVkYzYsIDB4NDBmNzk2YTgsIDB4ZmIyZmIwMGQsIDB4OTVlODA1NzQsIDB4MWU5ZTk2MWYsIDB4YzQxNjdhMDcsCi0JMHhlM2ZkODQ2ZSwgMHgyZDcwMjE3MSwgMHgxMTRmNDdlYywgMHhlZTMwYjVkZiwgMHgwZTQzYTViZCwgMHgzOTk0OWZjMiwKLQkweDgxNmRiNTJlLCAweDFlYzMxMDUwLCAweDNmZjA4ZjVkLCAweDAwMWI2Y2VlLCAweGRhZTg5MjdmLCAweDRmOTYxYWQ4LAotCTB4MTAwOGMzNmMsIDB4ZmQzNzYyNmIsIDB4MzlmYjRjZDAsIDB4ODA2ZGEwM2UsIDB4YzU0N2U2ODksIDB4NDNlNTY2MWUsCi0JMHhmZTQwYjZkYSwgMHhiMGRmZDhjZSwgMHgwMzZkNTFmMiwgMHgxZDFjMzc0NCwgMHhkYjdmMTExYSwgMHgzZWY5ZDFkYywKLQkweDFiYzk5NjJkLCAweDA2NDM3ZTc1LCAweDQxNjM1MzdiLCAweGZiNjEyYThmLCAweGI0ODczYzBlLCAweGI3M2FiOTUyLAotCTB4NmQ4ZWRjZTgsIDB4ZmY3MzFlMTQsIDB4NmVmMjhlZDUsIDB4M2ZlZGM3NWIsIDB4M2ZiMWZhNjYsIDB4OTJhMGZjMTcsCi0JMHg1ZjcxYmMzOSwgMHg0NjZlZjk0NCwgMHhmNjE1MjFiZCwgMHgzZTA4ZjhjMiwgMHgwYWFkNjk5ZCwgMHgyYTIzMWJlZSwKLQkweDkwNWU4Mjc2LCAweGVlMjQ3NzNjLCAweGVmNGU5ZDFiLCAweDkxNzFkOGRhLCAweDlhMDQ4YmY0LCAweDhkYWM3OWQyLAotCTB4MmVmOTMzNzUsIDB4NWIzZGYwOWEsIDB4ZDQ0ZTgzZjIsIDB4ZjFlNTFlOWYsIDB4MjFkZjI5YmEsIDB4NWUzODM4N2QsCi0JMHg4Y2Y1ZjJjNiwgMHhhMWU3NjU4ZCwgMHhkODRkZDc0NCwgMHhhZjVjZGRjZiwgMHhkODFmNTlhZCwgMHhmZmYwYTM2ZSwKLQkweGRlMGU3YTkzLCAweDM5ZTRmNGM4LCAweGM0ZWU1NDc1LCAweDM3ODE3ZjgyLCAweDFjYzllNDE1LCAweDhjOGYwN2IwLAotCTB4YmZiZDU1ZTQsIDB4MWRlNjgzMjYsIDB4Y2Q1OGYzOTEsIDB4MzZhYTZmNGMsIDB4MWQ0ZDc4MmUsIDB4NTVlNTU3MmIsCi0JMHhhZjZiM2E0ZCwgMHg1NWM5NWJlZSwgMHg4ZmM5M2UwYywgMHhkNjE1YmI1ZSwgMHhmZjMzMzc2MSwgMHg4NmIzYzU4MSwKLQkweDdhODE1ZDZlLCAweDVmMzg2ZGMwLCAweGMyYTZmNWUyLCAweGUxNTRmY2I5LCAweGEzZTgxMzQwLCAweDBkYTY3ZTJhLAotCTB4ZWI4MmRlZjYsIDB4MmEzOGY3ZTEsIDB4ZDdmMWQ0OWUsIDB4MTQyZjc1ZjIsIDB4ZjYwMTFlYTksIDB4ZTEwZmI3NzQsCi0JMHhkMThhZjU0OSwgMHhlOTlkNzJlYywgMHg1YWU5NmIxNSwgMHg3YzJhMWYwMSwgMHgxYzZkYjk4OSwgMHgwNDVmZmY3YywKLQkweDBjZmZhNWE3LCAweDdlZGRmZDM4LCAweGJjN2JkM2RjLCAweGZkMDM1OWM3LCAweGFkM2YyZTk3LCAweGUxYzM4ZjdmLAotCTB4OTIxMGI4ZmUsIDB4ZjEzNTMzOTIsIDB4Mzg3N2U4NTMsIDB4ZjJlYWRlNzcsIDB4NzM1NjIyZmQsIDB4YzFmNzM1YmYsCi0JMHhkNTNmZDQ1MiwgMHhlNWZmZDhmNSwgMHg5MTc3NjlhNSwgMHhkNDY5ZmM5ZSwgMHhjOWZmOGYwZiwgMHgwMmVjMDFiYSwKLQkweGNhMjBlNWM3LCAweDI2M2ZlM2UzLCAweDM4ZTQyZWY4LCAweGVhYTU2NzhmLCAweDVhZmY1OWI3LCAweDZkY2UxNDdjLAotCTB4MjIyYjExZmYsIDB4N2E1NGQ4N2QsIDB4ZTY3NzcyMTAsIDB4YTdhZWY4NTEsIDB4M2JiYzM5ZGIsIDB4ZDQ2NGZkNTcsCi0JMHhjNzg2YmFmZCwgMHhlMDc5YWRhMSwgMHhkMWFmN2MzYSwgMHgzY2YwZGE0NSwgMHgyODI2Y2ZlZSwgMHg2N2NiYmIzZiwKLQkweDRhNzJjNTBmLCAweGM4MWI3ZTI3LCAweDhjMThjMjg5LCAweDQxOTM1ZmM3LCAweGNkNDk3ZGYwLCAweDBlNTgxMWVjLAotCTB4YzdmNDU4ZTcsIDB4NzFjNTZkOTksIDB4M2EzMjY2NmEsIDB4NDc4YzI5YWMsIDB4NWRjODIxN2IsIDB4NzQ2ZjViODAsCi0JMHhlY2M1NTQ5NCwgMHgxZGVjYzQxZiwgMHg3ZjFmYmRhZCwgMHhmOWY5OTYyZiwgMHg3NmRiMzNkYiwgMHhlZDdhMGZiZiwKLQkweGI1ZWExYjA2LCAweDU3YmM0MjgwLCAweGYxYzY0ZWE5LCAweDhmZWMzZDI4LCAweGNkOTdmZGM1LCAweGE5NjNlMTYzLAotCTB4NWM3MTg3ODEsIDB4ZDYwM2RhMGYsIDB4NTFmM2JkM2EsIDB4YWVjY2ZkY2UsIDB4ZGIzN2ZjYzAsIDB4MThlYjNhYzgsCi0JMHg1NTkwZTYzOCwgMHg3Y2Y5MmYyOCwgMHhlODEzZjU0OCwgMHhlYjhmMzE1NywgMHg1YzE1MWY4OSwgMHg3MjFlODI3MCwKLQkweDFlZGJiNjM0LCAweGY5ZjM4NWUwLCAweDE3Y2FjMjAyLCAweDAxM2Y2NDNjLCAweDBmMDVhYmU3LCAweDY0Yjc3OGIxLAotCTB4ZmQ1ZTRkZGQsIDB4NmI5ZDA5M2QsIDB4ZjlkM2Q4MTIsIDB4MDlkODZkNGYsIDB4M2I0MWYwNzAsIDB4MWZmZmY0MTcsCi0JMHhlNDFmNzg0ZSwgMHhjM2JkODg3YiwgMHg3ZWRhN2UyNSwgMHg0N2ZkYTQ3OCwgMHg5NzYwZjdjMCwgMHg0OWZjZDkxNywKLQkweDE2ODk1ZGE1LCAweDU4YTNmNGU3LCAweGZkNTM5N2VlLCAweDllM2I1Nzg0LCAweDVmYjE4ZTNhLCAweDAzNmM4ZTdhLAotCTB4MGY3MGEzN2UsIDB4ZjBhODNiYzEsIDB4NTlkZmQ4Y2YsIDB4NDEzN2NlMzAsIDB4NDZjMmZmMGUsIDB4OGE1NmU3Y2IsCi0JMHgzYzI5MmI3MSwgMHhiODlkY2I3ZCwgMHhmM2JlNzU1ZSwgMHhhMjM3YzM5MiwgMHg3ZmQwYzI5ZCwgMHgwYjJjYmRiYiwKLQkweDc5ZWFlN2VjLCAweDM5YTQzYzg4LCAweGU0NWMyMWZmLCAweGY4ODQ1ZTQ4LCAweDU3M2M2MTAxLCAweGNmY2VmOGY1LAotCTB4Mjg3M2M2Y2QsIDB4NjhiMzdmMjEsIDB4MmJiZjc1ZWIsIDB4ZmNjMzA0NTAsIDB4ODIyOTVkMzksIDB4ZTNlNmYwMTksCi0JMHgxY2IyZmVmNywgMHhlYjcyMGI5ZSwgMHg1MGViMDJmZiwgMHg4MDAwNTg5ZSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkYzVmZjAwLCAweGQ1NTQ3YzBiLCAweDczYjlmODk5LCAweDMzMzJiY2VmLCAweDQ5MzI0Y2M5LAotCTB4OWI4ZjIxMjYsIDB4ODA0MDIxMDcsIDB4NTIwMjRjNDksIDB4MTg3ODQzMWYsIDB4YTQwNzZiMzUsIDB4NDM4YjViMTYsCi0JMHg5MjExMjNjMiwgMHhiMTc1YjY4OSwgMHg1MTAwY2I2NSwgMHg4ZDA0MjIwOCwgMHg0MTM4MGFiYywgMHhiYjZiYmE1MCwKLQkweDA2MDIyMmMxLCAweGI2YTJkMTFhLCAweDZlYjQyZmVhLCAweGZkZmVlZDU3LCAweDU4Zjg4ODQ1LCAweDE2NTQ0NjQ5LAotCTB4ZWZmZmFkNWIsIDB4OTliOWNlZmIsIDB4NTE0NDkzYjksIDB4NjdmNGRkYmIsIDB4NzM5ZWU3MmYsIDB4NzdjZWY5Y2YsCi0JMHhjZWY5ZjdiZSwgMHhlOTlhMTYxOSwgMHhmNDY2MmRlYiwgMHhmYzNlNzlmNywgMHgzMzU3N2Y4NywgMHgzMDM0ZTg5NiwKLQkweDdjZDhjYTk2LCAweDk2NzczNTk5LCAweGViNDdkZjQ0LCAweDZkNjdhYTI1LCAweDM0OTY3ZDViLCAweDBiYmMwMmM2LAotCTB4NjZmNTM2ZTYsIDB4NjA3ZGExZmIsIDB4Njk0ZGY5YjksIDB4ZWI4OGJjMjIsIDB4NjMzMGIxOWYsIDB4YjU2ZDhjMTUsCi0JMHg5OTM1OTBiMiwgMHhmNDEyNmRiMSwgMHhiYmNmMGU1MywgMHg3OTM1ZTE2YywgMHgyMzU4MGQ4YywgMHhjNjAyYjA4ZiwKLQkweDU5YWZjNzgyLCAweDFiZmJlZjgwLCAweDRkMDY1NDEyLCAweDA4NTg5ODc2LCAweDhlZTNhMWNiLCAweDU3NmMzZWYwLAotCTB4NjRjNDViZDQsIDB4N2MxODA3YTgsIDB4MjRiZTc4NmUsIDB4MGQyNDg0NzcsIDB4NWU5YWM2MDgsIDB4ODdhY2Y3OTIsCi0JMHhhZTQ3ZmQ3NiwgMHhiMmFjZmRlNSwgMHg0MWNhMGNhOSwgMHhiOGMxMzZhOCwgMHg1NzVmZDBjMSwgMHhhNGM2NDRiMiwKLQkweGZmMWExNjM5LCAweDZjMjkyMWNjLCAweDY2YzNmYWM2LCAweDg1ZTBkM2U2LCAweGJmZTFmYWZmLCAweDJmMTgzMmZhLAotCTB4MjcxOTA4NmMsIDB4MTAyYjEzYzEsIDB4ODIzNmMzOGUsIDB4NDBkYTY2MDMsIDB4ODEzZjdkZTMsIDB4OWJmMTg3YWQsCi0JMHgwMGNmOTIwYywgMHg4ZGI3NGRmNSwgMHhmMGUxYWYwYiwgMHg2N2UwMTg1OCwgMHhjOWFkMDA5OSwgMHhlODI0NWFjMCwKLQkweGI1ZTA1MzJmLCAweGU4YmE3MGM5LCAweGE3NWUxMjhlLCAweGY4YTViYjQwLCAweDNkZGE5NTBmLCAweGNiOWMwMTJiLAotCTB4NjQ3YTFiMmMsIDB4ZTEzOTkzODAsIDB4MGRiZmE4M2YsIDB4ZWJhMmYzZWIsIDB4YmZlMWI0ZDAsIDB4MzQ3OWMzM2YsCi0JMHgyZGI4MDQxZCwgMHgzZDk3Yjg1MSwgMHg2ZGM3OWZhNiwgMHgyN2FkMTRjYywgMHg3ZWI0NDNiOCwgMHgyZjhlNzJiNiwKLQkweDQ3ODU4MzM2LCAweDUxMGViYzAzLCAweDg0Zjc1NWI2LCAweGYyYzdjNDY1LCAweDY1Y2NlY2U5LCAweGVmNDRmNGQwLAotCTB4ZWIxZGJmMmMsIDB4M2MyZDU5M2IsIDB4NWYzMGVmODMsIDB4ZGE5ZWUwMTgsIDB4MjhjY2YxZDUsIDB4ZWVhYWVmNjgsCi0JMHgwNmU5YzZjOSwgMHhhMGIxZmY5NywgMHgzYWU4YjJlZiwgMHhkZTVlNzA2YiwgMHg3NjY2NTliNSwgMHgwM2JlOGYxYSwKLQkweGVjMDc3YzUwLCAweDljZWM2ZWQ0LCAweGQ1Y2ZiMTA5LCAweDQxYWE1ZGY0LCAweGViYzcxNWJlLCAweDg4MTk1N2M1LAotCTB4MDQ4NjVmMWMsIDB4Yzg2OTZjZTMsIDB4ZGFiYWUwMzcsIDB4YjAwNTc4MTQsIDB4YjMxYjZhMmUsIDB4ZDllMTE1NjcsCi0JMHhjMWM3MzQ1NywgMHhlYzg5ODNkOCwgMHhkM2UxM2Y1NiwgMHhmZTg3ZTk1YiwgMHgyZDU2NzUxZSwgMHhlOTdmNDI3NCwKLQkweDlkNWJhYWFlLCAweGJmMWM3Y2E5LCAweDAyOWZhNzAzLCAweDZiYTUwZDQwLCAweDQ3ZTFhOWVkLCAweGQwNWU5NzZiLAotCTB4MWY2Y2RhNWMsIDB4YzRkYjlkYjksIDB4OWVkOTE2ZjEsIDB4ZjA4M2RlMTQsIDB4MTc5NTEyMjgsIDB4YjFkOGRlZmYsCi0JMHg4ODUzZTA5ZSwgMHg5NWQ4ZWU2ZSwgMHhlYmY4NDYxNywgMHhlOTA5OWI1OSwgMHg5YjBiMTk3YywgMHg1YjE3OGU5MCwKLQkweGU4MTEyODU4LCAweDRiMzQzMTYyLCAweDZkOTJlNzgyLCAweGFjYzZhNjY2LCAweDVmNTg0MzVmLCAweGFlMWNlZDY2LAotCTB4ZDNmNzRhNjUsIDB4NGRkMjIyNTIsIDB4NzRiM2Y1MGYsIDB4YjJkZGJlYmYsIDB4MDFkYmFjMTksIDB4ZDYxNjhkZjUsCi0JMHhhNzY3YzM2ZCwgMHg0NTg5YmViZSwgMHhlMWUwOGUwOCwgMHhmZWJhY2RjZiwgMHhjM2FkMWI1OSwgMHhjODYzMmI3NiwKLQkweGJlNjU0OWE3LCAweGZlMDFiYmJjLCAweGVmNDYwYmM4LCAweGI3Y2ZhMDFlLCAweDc4NjhiYWM0LCAweDM1NTY3NjQ4LAotCTB4NjQxMzllMjAsIDB4YjIzM2NkMDMsIDB4MDNkZTE2Y2EsIDB4YjAzM2VjZjMsIDB4NGRlNzVjN2EsIDB4MWNlYjc2MmUsCi0JMHg2NGFmZjY3OCwgMHhhMTIzNDJiZSwgMHg3N2FlMjI2MywgMHgxZmQ3M2UzYywgMHg3ZDIzZDZiNSwgMHgxM2Y5NDE2YywKLQkweDM4MzczZjQzLCAweDVlZTc4NDhkLCAweGJlNDdhYjEzLCAweGZkMGQ1Y2E5LCAweGE2YTVjOGM1LCAweGZjMDFlYzliLAotCTB4OTcyNjk3NmUsIDB4YzQ2ZjlkNjAsIDB4YTg2YjY2NzUsIDB4OWU5MWVkOGMsIDB4NGZlMzJlMTIsIDB4ODNiZGJiZWQsCi0JMHhhN2YzMzdlZCwgMHg0YjdiZjljMiwgMHhhZTA3NDI0MywgMHgwY2VlOTQ1MywgMHhjNGFlZTg4YywgMHhmN2MwMGE2ZiwKLQkweDU4M2M4NTQ3LCAweDM4ZmRmOTYwLCAweDQwYTNmN2E0LCAweGExZjdjODA4LCAweDBiOTcyYjRlLCAweDcyZmU3MzhhLAotCTB4YTc3ZDFmMjgsIDB4NDU1ZWJiYzQsIDB4ZTI3MmUwZmEsIDB4ZDgxMmY3ZTgsIDB4ZjlmMjE4NmEsIDB4ZGVmNWZlZjcsCi0JMHhmY2ZlYTE5NywgMHgwY2Q1MjYzYiwgMHg0NjkxMGJmNSwgMHg0YThmM2Q2MCwgMHg4NWUzODdjYywgMHhmNzg3MzA5ZSwKLQkweGMwNjViYmMxLCAweGIyY2YwOGI2LCAweDI4YzIxM2UzLCAweDAyOTkwZWRmLCAweDM4ZTExN2RiLCAweGZiYmQxYjhmLAotCTB4ODk2NWJiZTAsIDB4NDIzYzVmZTEsIDB4YTA1ZTE5ZjUsIDB4OTE5NGY2NDQsIDB4ODhlODYxZDMsIDB4MTA5ZjdmOGQsCi0JMHhiOTVmYjdmZSwgMHgxYmRkM2ViMSwgMHhhYzdiZjY4MiwgMHgwN2M4MTM4MSwgMHgwOTM1NjY5OSwgMHg5N2JmNjVmYiwKLQkweGJiYTcxZjE5LCAweDNiZjgwNWM4LCAweDgyNGFmMzhkLCAweDM4NDk1NDI3LCAweGZhODM5NzRlLCAweDU4Y2FmZTAxLAotCTB4Njk5Y2ZkMDQsIDB4ODBmOWE3NGQsIDB4MzhlMWY0ZGMsIDB4Zjc5YTM2NjcsIDB4MzJkY2RjYTAsIDB4ZWQ0NGFlMzgsCi0JMHhiM2ZkMWI0ZiwgMHhmYTdjYTAzMiwgMHgyYWVmNTI4OSwgMHg5YmYwMWFhOCwgMHg3ZjQwNGRiYSwgMHg1ZjRiNGRjMSwKLQkweGVhMTdhMDY0LCAweGM0NmVlYTBjLCAweGEzNmUzYjBmLCAweDExZWI2ODc5LCAweDA2YTRiOGRjLCAweGFkYjc4M2ViLAotCTB4ZGFlNTAxYjgsIDB4NzI4OWZjNDgsIDB4YmJjOGM1OWEsIDB4NDFjOTE2N2UsIDB4OWY1MWRmZmEsIDB4ZmE4ZGQ5ZGYsCi0JMHg1N2FjNmJhMCwgMHgyYzBmNWFhNiwgMHg5Mzg3ZDAzZSwgMHg3MjMzZWRiNywgMHgxOThlNDZmYywgMHhiNTJmNGY4OSwKLQkweGE1MGJhNDdmLCAweDFjMGZlYjkyLCAweDk0ZjIwODI3LCAweGYyNDJmYzY5LCAweDBmMmNhNjM0LCAweDE4ZWJlNjU3LAotCTB4ZmM0ZTlhM2MsIDB4ZGIzZjVmMWYsIDB4ZjkwOGY4MTEsIDB4ZmZmZWU5YTcsIDB4OGFiOTYzNzksIDB4OWU0ODQ1ZTMsCi0JMHhlMjU0YjZiMSwgMHhkYmJiODAzMywgMHg2ZGY3ZGYwMiwgMHhlNTVmMTA3NywgMHhmNzBmNTBhZSwgMHg3NDFlYmFlMiwKLQkweDMzNWQzY2QxLCAweGNiMDNiMjdjLCAweDNjYThmMzNiLCAweDFjNmRjODU1LCAweGUyYzZmNTE2LCAweGNhZjQ4YzI5LAotCTB4NThiNTk5NjIsIDB4ZDE3ZGU4Y2EsIDB4ZjY3ZjY4NzYsIDB4Y2Y1YTZjODksIDB4Y2ViNjY2YzUsIDB4MzZjZTdjMDIsCi0JMHhkYjNmZmE3MCwgMHhmMDBhNzIwMSwgMHgyNWVlNjc1MywgMHg0ZGZlY2IzOSwgMHhiNTE4ZmI2MiwgMHhjYjc2YzE2YiwKLQkweGIyOGM5MDYwLCAweGI5NDM3OGExLCAweDM4NWJjM2E1LCAweDdmZmEwY2E2LCAweGU5MDc2NzZhLCAweDhhNzIwNjAxLAotCTB4OWEwNWQ4YzUsIDB4YTRmOTQzMWMsIDB4Y2RmZDllZmIsIDB4NDg2M2M3YWMsIDB4YzdjNGI3OTMsIDB4ZDlmNGE5MzAsCi0JMHgyOGYyYTIxMywgMHg3MmNmZTlkOSwgMHgzMGExNjA1NSwgMHg1Njc3ZjExZCwgMHgwNGU5ZGMwZSwgMHg4NTg0YjZmOSwKLQkweGIwMzYzZTQ4LCAweGUzNmE3YTZlLCAweDcyZTViYzgxLCAweDJlZTVjMmQ3LCAweDQxMmUxMzNlLCAweDNhYzZkZWZlLAotCTB4YTIzNjZlNDksIDB4ZWU0ZTFhNDQsIDB4M2JiOTAwYWUsIDB4Y2JiOTY0NzEsIDB4ZTIyOTczNTgsIDB4ZGQ4Yjc4MzUsCi0JMHgyMjFlNzg4YiwgMHhkNzdjODU3ZiwgMHhjNGRkMzFkNiwgMHgxNWQ0ZjBlNSwgMHg0NDk1OTk2MSwgMHhlODlhOTBmMSwKLQkweDExNWE5NjliLCAweDU3YzFhYmQ1LCAweDEyNzUxNjJkLCAweDFmMmNmZDk2LCAweGRhNjNhZGU1LCAweDdkNDFhN2JmLAotCTB4OTQzZTYxNTAsIDB4ZTYxZWI2OWIsIDB4YmJmNzgwZWIsIDB4ZjNmNWZkODQsIDB4ZjFmYTk1MzQsIDB4MTg1ZDM4OTgsCi0JMHg4NTJiM2YxNSwgMHg5ZWFhY2FmYSwgMHg0OWYyMDM2ZSwgMHhiY2EyNzMyYSwgMHhmZWYwZjQ3NywgMHhiYmUwMzk3NywKLQkweGNiOGVmYzMyLCAweDJkZWZjMWNkLCAweGU2MjEyNWFjLCAweDU2YTNhYWZiLCAweDQ3MGJhM2EyLCAweGU5MzM2MTFjLAotCTB4MGJhZTQwYzMsIDB4YjNmYjRiZmEsIDB4ZmVhNGVjOTksIDB4ZjM5MjBlYTMsIDB4YWYzNjQ2ZmQsIDB4ZDFiYmRhMTMsCi0JMHhiY2Y1YTIxZSwgMHhhZWZiZmE4NywgMHgyMTllOGYyYiwgMHgyMThhMzU1NiwgMHg4ZGQ3NGFlZCwgMHhlY2Q2NTY0MiwKLQkweDllYmNjNjgzLCAweDFlZGY0ODliLCAweGM3YzhhYjMwLCAweDc3YmQ1YzE3LCAweDYzYzYxOTYyLCAweGVkYmYyNzI4LAotCTB4ZjA1ZGE5NTIsIDB4OWZkMmY0ZTAsIDB4ZGZhMGZiYzIsIDB4MGRkOGU1ZWUsIDB4OThiZDIyOTQsIDB4NjRkZDFmZTUsCi0JMHgyNTliNzU4MSwgMHgwNWRjODhhZiwgMHhkYjY2MzY3MCwgMHg2Nzg3Mjg5ZCwgMHg5ZmQ3ZmVlNCwgMHhiYmYyODY2ZSwKLQkweDhjY2M4ZDA3LCAweGZhNmZiZWViLCAweGIyM2Y5NjNjLCAweDFiMDg2ODljLCAweGQwYzZmNzRmLCAweGZhZmRkMmViLAotCTB4YmVhNzYzNzIsIDB4MmZhYzNjMWMsIDB4Yjg3MmUxZGYsIDB4ZGUyNzhlY2YsIDB4ZjQwZTdlZjQsIDB4YmYzNzM2NjQsCi0JMHg5YWYwMDFkMywgMHhkYzkzMzI5ZiwgMHhmODE1ZGViYywgMHgyNmU3YTQ2NywgMHhlMjI0ZTQ0MywgMHhmZWZiOWNkMSwKLQkweDczYWUwMGM0LCAweDNlMTIwN2Q3LCAweDNkMjY0MGNkLCAweGM4YmYxYzI1LCAweDBiYWMxNzU3LCAweGQ4YzM5ZDcyLAotCTB4ODU3YjUxZWIsIDB4NDc4NDBjNTksIDB4NTEzZDA2YjAsIDB4MjBlNDEwZjksIDB4ZGVmOTVmMDEsIDB4YmZlNjFhN2QsCi0JMHg3MzgyNGU3OCwgMHhkNWYxYmQzNSwgMHhiZGEyNTQ1NCwgMHhlMGIyMzA0MiwgMHg0NWRmNmJiNiwgMHgzNWRhMWViYiwKLQkweDBkOTg5YzkwLCAweGZhYWUwMGVkLCAweDJmNmU1YzZkLCAweGM4ODkzZDYzLCAweGQ3NjA0ZDBmLCAweDdmMDk2MDU4LAotCTB4YjFmNGUyZTcsIDB4ZDk1MjI1YjQsIDB4NGY2Y2ZmMGQsIDB4NzA4YjFlYWUsIDB4N2UyOTlmMmEsIDB4ZDhiNWZmNWMsCi0JMHhmNjFkOGM2ZiwgMHgxZGZiOGI5MCwgMHhkYjViZjc0YiwgMHhhMWY4NjJmYSwgMHgyYmE1ZDNiMSwgMHhiNDY3MGYwNywKLQkweDVkZTJjNWY1LCAweDI1NTMzZmYwLCAweGI2ZGVkNjI1LCAweGI5MGYwMjFiLCAweDdiMGY5MTUyLCAweGZjNjBkMzRkLAotCTB4ODhmYjNmYWIsIDB4ZTU5MmY3ZjQsIDB4MGE5ZDkwY2YsIDB4ZWRjMDU4ZjMsIDB4NzI4YWFiMzYsIDB4NGY1ZGM5NzUsCi0JMHgyZmNkN2JkMywgMHgyNzZkOWIzOCwgMHhlZDk5ZTBiZiwgMHg5OTc2NWU2NiwgMHgxNzc2N2NhOCwgMHg3NDk2NWJmNywKLQkweGE3OWM2MTRhLCAweGNhNjJlNzM0LCAweGJiYTc5NDM0LCAweDFiMzM0ZThjLCAweDNjNzhkNzhhLCAweDNmZjNiZGJlLAotCTB4ZjU0YzE5MTMsIDB4ZmEzYTQyNmQsIDB4MWJiNzEyMTMsIDB4NjQ4OWNkOWMsIDB4ODljZGFhOWYsIDB4YjcwNTFmNjgsCi0JMHhjYTJlZjM1ZCwgMHg2NGJiMjVhOSwgMHg3NjM1ZWEyZiwgMHhjZDFkZTFjYywgMHhlYzczM2NiMCwgMHhmM2Y2M2IyMiwKLQkweDgwMzRjYTYxLCAweDRjZjc3ZGEzLCAweDY1ZWY0Y2E3LCAweDQ4ZjkxODdmLCAweDBkNWNmNWYxLCAweDkzZGQ5NWVmLAotCTB4NjdiN2U0NTUsIDB4OTdmODcxNzcsIDB4MjA4ZjJjYjgsIDB4OTlmZDVkMWQsIDB4NjJiMjc2NGMsIDB4Y2ZiNDAxNjAsCi0JMHhiMWJlNGRkYSwgMHhjZWVhYjdjOCwgMHg3ZDcwYjM3ZCwgMHg2OTlkOWVkZSwgMHg5NGJmZjZhMCwgMHhlMmYxMTM5OCwKLQkweGVmODY5ZTVhLCAweDFmOGE0ODk3LCAweDViN2ViNGY5LCAweDdlYWM0ZDQzLCAweDEzMjVkNWJlLCAweDVkY2I0ZGJmLAotCTB4Mjc2YmQ2OTEsIDB4ZjUwOWJhYmUsIDB4ZTAyZWUzNTUsIDB4Y2U3ZjFjMjMsIDB4ZDliYTdmZWIsIDB4NjkyYmU1MWQsCi0JMHhhNjFiYjZjZSwgMHgxYThmZmY2MiwgMHg4Mzc3YzhiZCwgMHgzZmU3Nzc3YSwgMHg1ZmUxN2QxMSwgMHg2ZGNhMjU3NywKLQkweGNhNmZhZjhlLCAweGM2OWI2NjY3LCAweDI4NDVjZDI3LCAweDZlYWM5NzNmLCAweDYzMGU3MjJlLCAweGM5ZjIwZmNmLAotCTB4NmY5N2NlNGUsIDB4YjdlZTI0YjksIDB4ZWNlYjI1NjYsIDB4MDBmYzkxZGQsIDB4ODdjMWIxN2IsIDB4OTk3OGI3ZjgsCi0JMHhkMzNjMWY2ZiwgMHg3ZjQzMGRjMSwgMHhhMTU5MjEyZiwgMHgxMzY0ODRmYSwgMHhlNGY5NDllMSwgMHhhOTJmZmQ4ZSwKLQkweDNlMDcxNzY4LCAweDY1Y2NmYTQ0LCAweDI3ZDQ1MmJlLCAweDk1NTljNDZhLCAweGVjMmI3NDg0LCAweGRiOTNiNjA1LAotCTB4OTA3ZjYwODEsIDB4OTUyNWI1YmQsIDB4YzYzZWIyM2QsIDB4ZmU4OTMzZmYsIDB4OGE3YzRlNDAsIDB4YjVmZmEyNzIsCi0JMHg3ZTIyNGY0ZiwgMHg5ZmRlNzI5YiwgMHg3ODNhZmE4OCwgMHgwYTkzMjNmMSwgMHg0OTc3YjVmMywgMHg1ZWVkYmYyNCwKLQkweDA5YmE0MzNmLCAweDBiNjZjZDc2LCAweDM3NzJhMjRiLCAweDIxN2FlNWU4LCAweDI2Mzc1ZTdlLCAweDc1MWNiOTFiLAotCTB4YWI5ZmE4NDcsIDB4YjczZjM4NTIsIDB4ZDNkMTE4YmIsIDB4NjQwOWU1OGUsIDB4ODc3MGVlOTcsIDB4NTdmNDA4YWQsCi0JMHgyOWY2NWJlNSwgMHhlNzU4NzU2OCwgMHg2NzVmMGIwNiwgMHhmYjVmZGVjYiwgMHhiMGYzYTQ2NCwgMHg2NThkMWNlNCwKLQkweDQwYzdmMzk1LCAweDBjYjBmY2ZkLCAweGI3YmJiY2UzLCAweDgzZTU0NDIwLCAweGQ0MzJiY2QzLCAweGJjM2VmN2Q5LAotCTB4NzRmMTFmMmUsIDB4ZjZjNWU4ZDgsIDB4MjI2ZjZmNzYsIDB4YmRkZGVmY2UsIDB4N2U3MTEyNjcsIDB4OWE2NTdiZjUsCi0JMHg4M2Y4N2Q3NywgMHg1MTI1NDViNCwgMHgyOTE3ZjEzOSwgMHg3NjhjOTA1MCwgMHhjN2IyNWI4MiwgMHhmNzc3OGJjYSwKLQkweGQwYjY5ODdlLCAweGQyNTNmZGNlLCAweGUzYzNlNTk3LCAweGFkMzVkZDI1LCAweGZhYmZiZjE4LCAweGVmMmViZTJhLAotCTB4NDYxY2QyZmQsIDB4MTU5ZWY4MzksIDB4ZmM4YzU5ZjQsIDB4ZjVjMWNmN2QsIDB4Y2Q2NGQ0ZGIsIDB4NDFjY2U4Y2YsCi0JMHg1NjU4MzNmZCwgMHhmYzcwMWFjNiwgMHhmY2Y5MzkxZiwgMHgxY2NlYTZkZCwgMHg5NmZmY2JlNCwgMHhiNmRjZmRmNCwKLQkweDkwNjE2NjRlLCAweDI0ZWIwZDRiLCAweGZmOTkwNjE2LCAweGNjOWUyZmRlLCAweGVlZmZmOTQxLCAweDZhNzMyN2JlLAotCTB4ZmY4YmUwNjMsIDB4ZDBjZTdiNGUsIDB4OWFmMTEzYzYsIDB4ZDc4ZGE2NWEsIDB4ZDVlMzg1OWQsIDB4YTI2ZmNkN2EsCi0JMHg2NmViNjE5YywgMHgyNmY5MDZmYSwgMHhkYjYzM2Y5ZiwgMHg4YTNlNmRiMywgMHhkNzAwMGNhNywgMHhkZjZhMWQyMiwKLQkweGY4MjdkNDBkLCAweGNjMmViODJjLCAweDRlOTBjNjEyLCAweDZkZGM5NzZkLCAweGJlN2NmZWM2LCAweGRmZGEzNzQyLAotCTB4ZmQ3MWY3ZGEsIDB4OTI3YTBhYjcsIDB4YTdlNDRiMGUsIDB4MjQyMjRhZGEsIDB4ZmNiNmJmOWYsIDB4MTNkN2U4ZjcsCi0JMHg0Yzk4ZDlkNiwgMHg3MjcyM2ZmMiwgMHgzMGZhMjMxNCwgMHg0ZDRjZGUyMSwgMHg1NWY1MDU3NiwgMHg1ZjRlMWFkYSwKLQkweGM4MWIxZjkxLCAweDI0Mjc3MDFmLCAweDNmNjA2NDRlLCAweDc2M2QzMjk5LCAweDE3NTc2Zjk0LCAweDkyMThiNDI1LAotCTB4MTg0ZTdkZjAsIDB4MTY2NzY3ZGIsIDB4MmFhMTc3ZDMsIDB4MzRhMWZmNGUsIDB4MGM5ZTcxNDYsIDB4ZmYyMTJjZDYsCi0JMHg5N2I3MjczMiwgMHhlNzMwYTZiMywgMHg0ZmVlMjg3YSwgMHg4NzhjNzZlNiwgMHgwNWM5Yjc3OSwgMHhjNjEyZmViNCwKLQkweDY4YmMzNDI1LCAweDA4ZTkwMWZhLCAweDkyN2JlNWU1LCAweGVhNDhlODg1LCAweDk0N2VjODkyLCAweGIxZjM5ZDBkLAotCTB4ZWFlODkxZGYsIDB4OGFkNzVjNmUsIDB4OTYwZDVkMjgsIDB4YjU3NDQxZmYsIDB4MDg2ZjFiNDksIDB4YTI1NDA1NWQsCi0JMHg3ODY1OGYyYiwgMHhmNjI1NTJiYSwgMHg5MGIzZGE5NSwgMHg3NGFmZmQxZiwgMHg0MjRkYWY4MSwgMHg2YzdlNDRmZSwKLQkweDQwMTZmMWUxLCAweDQ2YjdjZTE5LCAweGIxNjM1N2Y0LCAweDQ3YThjYjc3LCAweDYzZjdjNmJjLCAweGMxM2I4ZmUzLAotCTB4MjVmZjQ1ZWUsIDB4Nzg3Y2VkMDMsIDB4NDBiMzVhOGUsIDB4M2Q2Mzc1YTUsIDB4ZGFlZmU4YmQsIDB4NWY0ODViMjYsCi0JMHhjOWU4NmJkZSwgMHg3ZDI2M2I0MywgMHhhNDAxZjM1YywgMHgyNWY5ZjQ4ZiwgMHg2ZmM4NmI2NSwgMHg1ZWExNzJjYiwKLQkweDcxNGI1ZDQwLCAweGZkZDNlNTg3LCAweDdlODA4ZWRjLCAweDliNjY4ZTkxLCAweGJhNmIzZmM4LCAweGRiOWY5YTZiLAotCTB4MmZjNGQ1MTEsIDB4MTU1NjBkYzEsIDB4YWVmNGUwZjUsIDB4Zjc2NDU1YmMsIDB4MzM1ZTYwYWYsIDB4ZjZjNzcxZDEsCi0JMHg5YzJmMThjNSwgMHhhY2EyZjc2YiwgMHgyMTNjNjJiMywgMHhlN2FmZTcwNSwgMHg5M2E5NTZiYiwgMHhiNWQwZjFlYywKLQkweDVkNzI4YmNjLCAweGJiYjY0NzhiLCAweDE0ZmY3NzdhLCAweDA5NDM3ZmY1LCAweGYxODNmN2Y5LCAweDdhNDY0MmM5LAotCTB4Y2JlNWRkYTMsIDB4MWViYzA2NDgsIDB4YTc4ZjFiZmEsIDB4MTk0Mjk3YjUsIDB4ZjU4OTRmOWUsIDB4Y2JlZDlmNmMsCi0JMHg3NmI5NDE3MCwgMHhkZWYwOTU4MywgMHgwN2ViYzFkZSwgMHg0OWEwODAxYywgMHhmZWE0YTcxNCwgMHhlYjg1OTI1OCwKLQkweDgxZjJhMWExLCAweDUzNjk5YmUyLCAweDBkYjdmNjk4LCAweGI5NWE5OWNiLCAweDQxZDkyYjZkLCAweGU3YjdmZjFhLAotCTB4MjUxYzc4NzEsIDB4YzhiNDNjZmUsIDB4ZjFkY2RmMmYsIDB4NDdmMDAyN2MsIDB4YTY4ZGM2MWEsIDB4YjQyMTE3ZDIsCi0JMHhjOTJlMjlmNywgMHg3Y2I2MTRjYiwgMHg2NDgwMDBkMCwgMHhlYjI3ZjE2MiwgMHg1YjExNWM2NywgMHhkZmEzZWRlNiwKLQkweDdhYzdhZjViLCAweGY1ODNiZmQwLCAweDY1ZTgzNjA4LCAweDAyYjNlY2FkLCAweGQxMWQ2YjFjLCAweDYwZWMwNTdhLAotCTB4N2M0OTYxY2IsIDB4MzM3NWU0ZmYsIDB4OTJmZTYxMGIsIDB4OTNmNDNmMTgsIDB4YWZjNjFmNTYsIDB4NWUzNzRjYWMsCi0JMHg1YzRhN2MyYywgMHhkZmU4NDZmZiwgMHg3N2VkNmFhZSwgMHgwNjg0Y2Y1NiwgMHhlNTY5OTYwZiwgMHhiMmY5ZDc4ZiwKLQkweGJlYTMzZmEwLCAweGY4YTk0MjNmLCAweDc4ZGEwYjFlLCAweDYzMzgzZGNmLCAweGE4YWM4NmZkLCAweGMyZjYwMDdkLAotCTB4MzRjZjI4MjcsIDB4ZWJlZDYxM2IsIDB4NjA5MzZkMzUsIDB4NDNmMzliMmMsIDB4NGQ1ZmVhMTMsIDB4MTJkZDA3ZGYsCi0JMHhmY2YxMjFkOSwgMHhiZTkxNGI2YSwgMHgwODVkN2Q5OSwgMHhjZWE1NzVmNiwgMHg3MGE1YjZiZSwgMHhiMjE2N2FmYiwKLQkweDI0MjVmODI0LCAweGZjMmI4M2JmLCAweGIwNWJlZDBjLCAweGJlYjA5MjRiLCAweGNmZjdiNWZmLCAweGZkZjUwZDNlLAotCTB4NzI3MmZlNzMsIDB4NmVlZDhhOTQsIDB4NTU3ZThmOWYsIDB4ZjI0MmEyZjAsIDB4MGU1ZmI4MzcsIDB4OTYzN2MwNGIsCi0JMHg4MzU3NmUyZSwgMHhiNDc4YTczZSwgMHgzOWI3M2Y0NiwgMHg0MmI4ZmQwNSwgMHhlZDZjZTMwYywgMHhhNDBhYTRjNywKLQkweDczYTNmMDc3LCAweGY5NmIwM2JlLCAweDY2NWYxNGEzLCAweDlmZDQ0NTRhLCAweDY1Zjc5ZjhjLCAweDE4OWUzYzI5LAotCTB4NWVkYWFlMmMsIDB4OTVlZmZkODQsIDB4ZWIwYmRhMTgsIDB4MmRhNzRmOGIsIDB4Y2RlYTdmMjQsIDB4ZGYzMTQ1YjQsCi0JMHg5MDdlMWMzNSwgMHhkZmIwZDlmMCwgMHgyZjFlMmMzOCwgMHg4ZjA5OTE0YiwgMHhmMDllNDc0ZCwgMHgyZjc4ZGNhMSwKLQkweGE4NGM5MTJjLCAweDY4YWRjMjU3LCAweDFiZDdkNmQ3LCAweGU1NjQyMmQwLCAweDUzMzcwNWUxLCAweDg5OWU3ZDdjLAotCTB4NjVmOTg2OGQsIDB4ZGMxNzdkMDgsIDB4MmE2ODYzN2YsIDB4OTNmZTFiY2UsIDB4ZmYwZWQ1ZTAsIDB4M2IxMzkyNjIsCi0JMHhiNGVjNTllNiwgMHg3YjVjNTE0ZiwgMHg5OWMxZTEzYiwgMHhhYzNjNDNlMCwgMHhjMGNhYWUyZiwgMHhjZjY2OWE3MSwKLQkweDFlNWM1MjcyLCAweDZmYWMzOWVjLCAweDE0N2JlYmJhLCAweDVhZTBkN2E3LCAweDhkNThkODdmLCAweGQ4MjU0ZWY2LAotCTB4YjgwNmJmNzUsIDB4YWJhZjkzYjMsIDB4OGY1ZjAyZjYsIDB4ZmU5NDBmOTIsIDB4NDY1YmNhMTAsIDB4YmEyZmUzOTAsCi0JMHg0OGI0NWQzOSwgMHhjYmI3ZDBmZSwgMHg2MmM3OGUyOSwgMHg4N2I5NzJlMywgMHg3ZDc4ZmRiOSwgMHg2OWRhODk4YSwKLQkweDUxNGZhZmVmLCAweDg0NTdhZjA4LCAweGI5MjNhNjdhLCAweDZkN2E1NzFjLCAweDk5MDc1NzY4LCAweGFiZjQwM2VmLAotCTB4ZWVhZWRmOTksIDB4ZjJlMjc1YTMsIDB4YTU1MmJkY2IsIDB4ZGRjNTkzNzgsIDB4YWMyNGVmN2IsIDB4N2YyMTQyYmYsCi0JMHgwZmJkMjk4NiwgMHhhZGZkYjhlMCwgMHgyNjdhZWY2ZSwgMHg3N2NiMDBmOCwgMHhlYTFjNTA5NSwgMHgxZTYwNGE2OCwKLQkweGIwYTU2ZmFlLCAweDVjOGZmYjU3LCAweDEyNWI1YTUzLCAweGY3NWFiZmI1LCAweDAxYWJjMjM5LCAweGY1MGVhZDBmLAotCTB4OTM5NDZhZmUsIDB4MjcyNDI4OWYsIDB4MzNkMjI1OTksIDB4Zjg2OWZhMWQsIDB4ZmJmNTMyNmIsIDB4MGVhMDViMDcsCi0JMHg4NmI1NjlmYiwgMHg0MjBlOTE1YiwgMHg3M2I1MzIxZCwgMHg2Mzc0YjFjZiwgMHhlMjNlZWYzZiwgMHhkMzNiNDBlOCwKLQkweDQ4NjM2ZWU4LCAweDUwYmVlMGM3LCAweGY2ZTJjNDljLCAweGQzY2ExNTMzLCAweDA5MTQwYjQzLCAweDVkOWM0NWY1LAotCTB4NDllMzFkMzMsIDB4MjliOGI3ZTQsIDB4ZjgyNTU4ZGUsIDB4YzE1MDM0NjMsIDB4NDJiMTBiNTksIDB4NTEyOWU3Y2IsCi0JMHg0ZmY5ZTczYiwgMHg1MmY4MmFlNywgMHgxNjBjN2ZiMywgMHgzMTllMWYxZSwgMHhmOGUxODEyZiwgMHg0OWM4OWVlYywKLQkweGRkOWJjNjAzLCAweGUxZWQwYzNkLCAweGM2ODk0ZWM2LCAweGRjN2UyYzY5LCAweGQyY2JmZTg0LCAweDQxZGZjZTRlLAotCTB4ZmUwMDZmZTEsIDB4NThhZWQwNzIsIDB4NzYxMzYyOTEsIDB4NzdhNzBiNjYsIDB4MTQ3MjczZDYsIDB4YmUzMWY5ZTIsCi0JMHgzYjQxOGM5ZSwgMHhiMmRmYWM0NywgMHhmZDY5ZGE4YSwgMHhiYzljNDQ5OSwgMHg0MDkzYzQ1MSwgMHhkYWZkNTIxMywKLQkweDU4Y2VjZDE0LCAweGMyNmQ5ZTJkLCAweDZlZTNlMGNlLCAweDMyN2M3YTkxLCAweGQyNTRiM2UyLCAweGU3YjU3M2M1LAotCTB4OTI3NzIxNmUsIDB4MjE2NjQ0NGUsIDB4YmU4MDQ2ZmYsIDB4NWRiNGFlMzAsIDB4NmZmYjdkOWEsIDB4MmJkYjdlNjEsCi0JMHgxNGQxNzljNiwgMHhjOTM5MDBmMywgMHg0ODFlZjg2NSwgMHg3ZTVlZjAxMSwgMHg0ODU5ODNmOCwgMHgxMTlhYWMzNywKLQkweDllMWQzNmJmLCAweGZkOGEzNzI2LCAweGQyMTdiNDA0LCAweDU4MWRjZDZkLCAweDMxNmI3ZTlmLCAweGVmOGM2N2U5LAotCTB4NWVjMGJlZTMsIDB4M2IwY2Q3ODEsIDB4NTY3OWViOGYsIDB4OWY3MGYyODcsIDB4ZmY4NGU5MmQsIDB4ZjhlMmRmZjYsCi0JMHgxZjY4MTIxMywgMHhjNmQ2MWQyMywgMHg3NWNmNGM5MSwgMHhiMGYyZDcxOCwgMHgzZjUxYTdkMiwgMHgzMmQ0NmE3YiwKLQkweDRmZGI0Nzg0LCAweGQ5YThmZGMyLCAweGE5YzcyNDI1LCAweDdjOTVlYzljLCAweGFiZjllMDdiLCAweDAxZTExNzE0LAotCTB4ODQ2YWJjZmMsIDB4ZWQ4N2RmMTcsIDB4ZjRhZGZkZDEsIDB4MzhhNWNkZTksIDB4ZTExZmVlMmUsIDB4NWJhMzNmYjMsCi0JMHhlYjM1MzhhMSwgMHhmYzhmYmRkZCwgMHhmMTEzYjM3ZSwgMHhiOWY4NzM1NSwgMHhkNmZmNTE1NywgMHhlZDI3NTg1OCwKLQkweDJkZDljNWY3LCAweGYxYmM0ZTNmLCAweDAzYTM5NDQ5LCAweGJlZWVjZWU3LCAweGNlZmFlMTFiLCAweGQ2ODA2ZjIxLAotCTB4NWM4ZjZmNDcsIDB4Y2ZiNzE1N2QsIDB4NTM2N2RiZGYsIDB4MjNkYzhlZDEsIDB4OGZkODM2ZTQsIDB4NWZhMTI3YzQsCi0JMHhkZTMyN2Y3MiwgMHg0NTM5N2M4ZSwgMHg5NjBjOWZlZiwgMHgyNDc2ZWVmZiwgMHhmMDA0MmY4NywgMHhlZjkxOGJlZCwKLQkweDBkZmZlMTQxLCAweDQ0NGY5ZmQ0LCAweDIwZmFmNWZkLCAweDJiZmZhMDNjLCAweGVkNTA3NmEzLCAweDJiZWQxYjVlLAotCTB4NzExN2ZhMGYsIDB4OGZmM2M4ZjYsIDB4MGY0ODQyZDgsIDB4MTRhZDNiZTcsIDB4ZmVjNDU0NzcsIDB4ZTQ0NzM5Y2MsCi0JMHg4YjUyNDQ0ZSwgMHgyODRkZTRlYiwgMHhiZGI3ODM2ZiwgMHhmMDAzMmJmNywgMHhmN2MxZDI5ZiwgMHhlYzQ5MTQzYiwKLQkweDMzMjBiYzg3LCAweDczZTM3ZmJlLCAweDI5NGZlZWM2LCAweDVmMWU1OWFlLCAweDNlNDdjYTA5LCAweDZlMjI2NWVmLAotCTB4NDhiOTJjYjQsIDB4N2MzMmZiZTUsIDB4NjI1OTZhNWYsIDB4NTNkYTExNzcsIDB4YjQzZDA5NGYsIDB4YWJlZjgxMmMsCi0JMHhkZDRjYjgwYywgMHhhYzdiYWViOCwgMHhiNDI5ZjM4MSwgMHg2N2JmYzJmZiwgMHhiMWFiMzFiZiwgMHg2MTFkMmZmYiwKLQkweDI5OWRkNzZlLCAweDYwOWI3NDM2LCAweDFmNjgxZDllLCAweGUwNmRiYWUwLCAweGZiODMzMGZiLCAweDFkY2RjN2Q1LAotCTB4NTE5MzgyNjYsIDB4YzQ1NWEwNzksIDB4OTVmZGI1ZWIsIDB4NTcxZTNjZTMsIDB4Y2U1MWY2MjcsIDB4MTBmYzU5Y2MsCi0JMHg0OGI1YTk2ZSwgMHg5ZmU4ZDVjZCwgMHg4ZDNmNTg1ZCwgMHhkZTc3ZDdlMiwgMHg3NTllOWIzZiwgMHhmNzcxZjRlYiwKLQkweGRlOTlhY2M1LCAweDVhOTRmYjZiLCAweDc5OTZiYmJjLCAweDhlNWVkYzRkLCAweDYwMGQxMWM2LCAweDk0ZWJhOGJmLAotCTB4Nzk5N2Q0MmEsIDB4ZTUxYWI5Y2MsIDB4ZDU4MjFhYmYsIDB4MTZjZjBjOWEsIDB4MmVkMWEyNzgsIDB4NzNiNDI0MTksCi0JMHgwMjc3NTY5NCwgMHgxNmRhZWZhZSwgMHg1MGE5ZTkwMywgMHhlZDg3YzE4YiwgMHhiOGU3M2MzNCwgMHhkMmE5MWM3OSwKLQkweGIwMWFlM2NkLCAweDQ3MWM2MTU0LCAweDQ1MThiNjdiLCAweGI3ZjQ1ZmRjLCAweGYxYmExOThhLCAweDczZjg5MDY5LAotCTB4MWVhOTUzYWQsIDB4ZmQ2YjVmNGUsIDB4MmQ5YjE4YjUsIDB4NjQ4YmE3MTgsIDB4N2RhZTI4MWIsIDB4NDc5YmU0YzEsCi0JMHgyMmU0ZTM3MSwgMHhiNjdjMDIxNiwgMHg1NWQ3OWEzOCwgMHg5ZGUyN2FmMywgMHg5Zjg4ZDYwYiwgMHhiODU0YWZlYSwKLQkweDY0ZDRjOTIxLCAweDM3NmU5Zjk0LCAweGUzYzY1MzhmLCAweGJlOWI1MTZkLCAweGQyMWZiZjFjLCAweGViOTdkNjEwLAotCTB4NDY0YzYwNTgsIDB4ODgzZmRmMDEsIDB4NzM3NmVmN2QsIDB4N2Q2MTc1ZjksIDB4ZDdiN2MwOWUsIDB4OWI1NjcyODQsCi0JMHg4ZTJjYWFmZiwgMHg3ZjM2NDMzNywgMHhjZDU3NjdlNiwgMHg3N2M4M2E0MywgMHgyMDNmMjg5OSwgMHhhYmUzYzVkZiwKLQkweDNmODIxMzMwLCAweDQ0Yjc0YWZmLCAweDZmMDcxMWY0LCAweDQ4NmQxYTBiLCAweGRmN2NhZDVmLCAweDFmYzJhYmVlLAotCTB4ZWU1NWY3MGYsIDB4N2MxZmExMzQsIDB4YWI2N2RjMWUsIDB4ZGY2ODlhNzMsIDB4MjRlMzUyZjQsIDB4NzJmNWJhYjcsCi0JMHhmN2ZjYjA2OCwgMHg5ZmI5NjdmNywgMHgzYzhiMmFkNCwgMHhhMWM5MjcwZSwgMHhjYjlmMjc1YSwgMHg0OGZiYzkxOSwKLQkweDgzYjdiZTM3LCAweDY4ZjM4MDlkLCAweDZlZDBjYjk1LCAweDlkYTM3ZTk5LCAweGRjNzRkMWU2LCAweGM2ZTA3MTRhLAotCTB4YTgzOWJkMTUsIDB4N2FhYTliYzcsIDB4MjAzZjMwOGIsIDB4YWQwOGJmMWUsIDB4NjgyZmM5YTIsIDB4ZmYwNmViNTcsCi0JMHhkODg0ZWQwMywgMHhjNTQ3ZTQ3NiwgMHg3ZWZhMDdlZiwgMHgzZjQ1NGVlNCwgMHhlNzgxY2NlNywgMHhiMDFkNWY1MCwKLQkweDdmODJiZTkyLCAweDM4YzY2ZDNkLCAweGIyM2M5MWNiLCAweDAyM2FjNmEzLCAweDMwNWRiMDJiLCAweGEzZjc3YmExLAotCTB4NzBiNzY4NzksIDB4Y2JiMWE5YmIsIDB4NjE3NjgxZGMsIDB4M2VjYzRiNmQsIDB4MDZkZmZlMWIsIDB4NWIxYmJlZmQsCi0JMHg3N2YxNGM5NywgMHg1ZjdmYWVkNiwgMHhiYmVlMzNiZiwgMHg2ZDcwZmIyMSwgMHg0YzViY2ViNCwgMHhlZmM4YjE4MSwKLQkweDlmNjg3N2EwLCAweDgxODM1Y2ZjLCAweDY0ZWJiN2Y2LCAweGI3OTQ2MmVmLCAweDdiN2FhY2U3LCAweGFmODM5Y2ZjLAotCTB4OWFkZGNmZDcsIDB4YzIyZGUxM2QsIDB4MGYyYzFlNzUsIDB4MTE2ZjY3NTksIDB4ODE5ZDczYWUsIDB4NjlmYjYyMDUsCi0JMHhmNTg2NzVjNCwgMHhmOWQ2MjY1ZCwgMHg4YjkzMTNkYywgMHgzZmRmOWQ3MCwgMHhkNzA4YjkzMCwgMHhjZGIxOGI3OSwKLQkweGE4ZjM3Yzg3LCAweDFiOTBmMDMzLCAweGU5OWJlZGZhLCAweGY3MGE3YjI3LCAweDJlOGY5MTNkLCAweGM0MGYxZTk1LAotCTB4ZmY4MWUzZDEsIDB4ZWZhNDdhM2QsIDB4Yzc4N2QyNDYsIDB4ZWJkMGUxMDYsIDB4Y2Q0OWI3NDMsIDB4NmI1MDc5NDIsCi0JMHg1ZWExN2YzMSwgMHhlMzYxYmZjNCwgMHhjNTMzMTY3OCwgMHhmYTdmOGUzYiwgMHg1MDQ3YzZlMSwgMHg2NGM5NzQwZSwKLQkweDFkZmQ2ODhmLCAweDY4MDUwMjU3LCAweGQ1N2YxZDBmLCAweDIzNDkwZGUzLCAweGVkMThiZmY3LCAweDA3ZGEwYWFkLAotCTB4NDU1YzYxMGMsIDB4N2IzNDAzZjMsIDB4OWYxZTVlMzIsIDB4Yzc3OWYzMTIsIDB4N2I0MmFiZWQsIDB4OGRjNmViZmMsCi0JMHg0YjNiYzVlYiwgMHhlNzZlNDNmOCwgMHgzY2JjOTVlZSwgMHg3MTQ5ZGM2ZSwgMHgwYjYzYTZlNCwgMHg3ZTI3MTg5YywKLQkweGM2ZTNjYzI3LCAweDUyOTQ0ZjRkLCAweGZjMjFiOGRjLCAweDJkZTYzNzRjLCAweDg5YzkyZWIxLCAweGRlYzM0N2ZlLAotCTB4ZGIxNzEzMzcsIDB4ZjgyZTdlYTMsIDB4NWYyMzZmYjUsIDB4M2Y3ZThiMzEsIDB4OTlmMDlkZTksIDB4YzEzYjNhYzQsCi0JMHg3MWVhMTU3ZCwgMHg0MjYyM2I5YiwgMHg3ZjAyNmZiYSwgMHg5YWQ0ZjMwZiwgMHhlYzQ5Yzg5NCwgMHgyOGNkYzliNywKLQkweGIwZmNhMzFmLCAweGYyZDNmZmRlLCAweDRkZjg3NmEyLCAweDc0Nzc3NzI0LCAweGQ3OTQ2MTQ5LCAweDVlNDBhNjY5LAotCTB4OTYzNWVhMTYsIDB4OGI2YjNjZTUsIDB4NmVjN2Q5ZjIsIDB4NzdmNzFiOWYsIDB4YmVkYmZiYTMsIDB4ZTRjNzcxZmYsCi0JMHg0ZjZlZjUxYiwgMHgzNWVkZmEyMiwgMHhlNTEzOWYzMiwgMHg5MDg3NzZkOSwgMHhiN2M5MGE2NywgMHhjMmJhNzc4ZiwKLQkweGI3ODhmZjNjLCAweGVkY2MzOGZmLCAweGVmMmQwNjg0LCAweDBhZGQ2MTQ4LCAweGI5ZTJkN2FjLCAweGJkNzBkN2JlLAotCTB4Yzc3N2RlNTEsIDB4YjJkOGZiYzksIDB4MTRiZDJmYjYsIDB4ZjZlM2QxZjcsIDB4MGRkYjYzYmYsIDB4ZWNjN2U3ZWUsCi0JMHg2MWZhZWI3ZiwgMHhiOTZhYTVjZCwgMHg1ZjViZmY3ZSwgMHgzMjdlZTIxZiwgMHhiMmYyYzNmMCwgMHhlYjZhZmQyOCwKLQkweDkzNmZkMWEwLCAweGViMDc0Mzg4LCAweGY0ODNkZjRmLCAweDM5MmMzYzFiLCAweGU2NWJiZWQxLCAweDBjYmJmNGU1LAotCTB4YzRmMzJkZmMsIDB4M2FjZWZjYTEsIDB4MjM4OTc5ZjUsIDB4YWE2OTdmZjEsIDB4Y2IwN2ZmOWUsIDB4ZWFmOGEwZmYsCi0JMHg5YzlhYTkxNSwgMHhjZGFmN2NlNCwgMHgwZmRiOGI1ZiwgMHhlMjRiYjNjZSwgMHhhZjM3MTk3YywgMHgzZTM1M2Y3OCwKLQkweDk5ZjlhZWRlLCAweDZmMGYyYTk3LCAweGUzODc4NDFjLCAweDBmZmNiMDYzLCAweGM2Yjc4Nzk2LCAweGZkYTQ2NWUxLAotCTB4MGYyY2FmOGMsIDB4MzVmNzk3ZmYsIDB4MzViNjNhMWUsIDB4YjQwZWZkMTEsIDB4NTk0ZmQxZTMsIDB4ZjNjOGNmYjcsCi0JMHhiMWZkMDAyMywgMHg2NGIzYzVmYiwgMHg5ZmVmOGZiYiwgMHg3ZWJkNWFjYSwgMHgyNTlkNWUxZiwgMHg1ZjM5ZTFmNiwKLQkweDRjODRmMzNmLCAweGY2MjhkNmViLCAweDM5OGYxYjg5LCAweGRlYjRkOGJjLCAweDY5ZjY4NGJlLCAweDZmNGZmN2UzLAotCTB4ZTE2NjA3NjMsIDB4YTNlZmM1NTIsIDB4MmU3ZTQzMmUsIDB4ZDRmZGYyZjgsIDB4YmNjMWQ0ZDYsIDB4NWJjYzNjODUsCi0JMHhjYmQyYWNhOCwgMHgxZmVjNjdmOSwgMHhkNjYyMDRhNiwgMHgxYzA0YWFiZCwgMHhkYmU4NjE4MiwgMHg3MjU4ODRhMiwKLQkweGE5YWRmYmNjLCAweDQ2N2VhZWRjLCAweDRjNzhmN2U0LCAweGE1ZTYxZDZjLCAweDdjZDg3MjZjLCAweDBjNzhjZmU4LAotCTB4NDdlOGZmM2MsIDB4MjhlZGZlMjksIDB4YzBhYTJkMTcsIDB4MzJlZjkxZWIsIDB4MjFlNWUwMDMsIDB4OTVjOTI3NjMsCi0JMHg4YmRkYTM1MCwgMHhkZjhiNTA3MiwgMHgyYzdmZmQ2OCwgMHg1OTJlYzFmNiwgMHhmYmQxYzdmZiwgMHg3YTY1ZmY4MSwKLQkweDUzY2ZjNzhmLCAweDc1NWY3OGRhLCAweGUwMWI2ZWRmLCAweDhjMTdjNzQ2LCAweGRjNDVmOGU4LCAweDRhMWJjYTVmLAotCTB4MzNmNTIzYmYsIDB4OWNiZjFkMTIsIDB4OTUyMTdmZWEsIDB4MjI2ZmEyZTQsIDB4YTI1YzJiZTUsIDB4NDc5NWIxOWMsCi0JMHg4ODljNjBjZSwgMHgxOGFiMzQxZCwgMHgwOTM4YzRkNywgMHgxOTBkYzdlOSwgMHg1YmQyNmYyMiwgMHg4MGYyOWIzOSwKLQkweGJmOTg5NWJkLCAweGYzZmUwNmY1LCAweGM4ZWQ5MWYyLCAweGUxZjVjMWJlLCAweDg4ZGY2NDc2LCAweGVjZjVmM2ViLAotCTB4ZmU5ZGJiYzgsIDB4N2Q2NzQ4YjMsIDB4NmY5NDdjZDMsIDB4ZjAwMWQ2YmUsIDB4MGJmODdmYTMsIDB4ZDNiNDc3OWUsCi0JMHhhNzczZTljYSwgMHgyZDkyZTljNCwgMHg3OGE0Yjk0ZiwgMHg3NDcxYTdjYiwgMHg5MWZmZTlmNSwgMHg4ZGE0YjUxYywKLQkweGJkZmU1NzY0LCAweDEyNWZlOGU1LCAweDcyM2E3ZTMxLCAweGE3OWUyMTNmLCAweDc4NDNkNTViLCAweGQ4OTMxYzhiLAotCTB4NzZiODk4OWUsIDB4ZTBjZmYzMTAsIDB4YWYwMTBjZmIsIDB4ZTEyM2ZlZjYsIDB4ZjM0YzJjMzcsIDB4ZmJjMWE2NjUsCi0JMHg1OGIzNWZmNywgMHgzZTk4MTI1OCwgMHgzNjJlNWNlNSwgMHhhZmI0ZWRmOSwgMHhmM2M5ZDRkMCwgMHgzMDU2OWE1ZiwKLQkweDE4NGRlMzkyLCAweDc4YzEyZDM3LCAweDk4YjY2Y2UyLCAweDQyODE4OWUyLCAweGZiNWI5M2NjLCAweDI3MjQzZGJhLAotCTB4MGU3ZGJjNjEsIDB4ZmZhZjNiNDMsIDB4ZGViZTVlMzUsIDB4ZmVjNjI4MTUsIDB4Njk3YTJiODMsIDB4Y2U3ZGEzMWYsCi0JMHg1NTg3OTQ3YiwgMHhmNzg3ZjlmOSwgMHhiYzEzOTc1NCwgMHg5YjcwNGYxNCwgMHg2ZTI1ZTdmNSwgMHgwZWZiZTM0YywKLQkweGE2OWZkM2RhLCAweGUyOGZiYmFkLCAweGYzZDdlZmY5LCAweGRiYTBlMmJjLCAweDg0YjhjNGU3LCAweGE5YjcwZjE2LAotCTB4ZDBhZmI0M2QsIDB4NmYxYjkwNzQsIDB4MGY5ZjMyOTUsIDB4ZDExNjY5ZmIsIDB4NjljMWQzNTMsIDB4NjUzNzE4YTUsCi0JMHhiNDUyZDY5ZCwgMHg2Y2ZmMmI3NywgMHhmZGVmYmYyNywgMHg0ZjI5MzJiYiwgMHhlMDRhNjhlMiwgMHg1MWQ3ODQ2YSwKLQkweGVkMTZiZTFlLCAweDA3MTg1Y2QzLCAweDBmZjdkZWVkLCAweDcwOGE1YjVjLCAweDBiNmZmMjZiLCAweGZkYTFjZGM2LAotCTB4MWUzZTg3MTYsIDB4ZGYzYzJjY2UsIDB4NTFkMWUxYmIsIDB4MWFiY2RjNWEsIDB4ZjA0NWIzZjEsIDB4NTViN2IzMjEsCi0JMHhlZjg2MWVjZSwgMHg5NzRmN2UzNSwgMHhmYTdmZDQwZCwgMHgzZmI0MmRmNywgMHgyZDgzYzlhZSwgMHgxNGIwMTY0NiwKLQkweDI0YzhlNTQ0LCAweDc0MTgzZjkxLCAweGFlYzVmYzhiLCAweDQ1M2YzY2Q5LCAweGE5ZTJlZDk0LCAweGY3MWRmM2UxLAotCTB4YWYzODQ5Y2MsIDB4MzdjYTY5NDksIDB4NGE3MmM3ZGIsIDB4YWM3ZGQ4ZjYsIDB4ZWEwMTQ4YmYsIDB4ZDBjNGYzMTcsCi0JMHhhNTE1ODc0ZiwgMHgyMmVkOGI3OCwgMHg5ZGYzYTNiNywgMHhjNzIzYTIyNiwgMHhhN2Y3YzYzYSwgMHg5ZWQwOGU4MCwKLQkweDMzZDIyMmJmLCAweDU5ZTYwOTNkLCAweDA1N2RkZWQ4LCAweDQ1ZjhmN2UyLCAweDMyOTNhZDAzLCAweDk3ZGE0NWZiLAotCTB4NzhmODkyNDksIDB4NWI3YTFiMDUsIDB4YzYxYzYwYzcsIDB4Yjg5NWNhZjksIDB4YjM5YjZhOTQsIDB4MzZmOGI3MGEsCi0JMHhhNDc3ZmNiOSwgMHgxNzM3ZGYxMSwgMHhmZjU1NzhlMywgMHg5Mzc5ZTQ2MSwgMHg1ZjE0NmNjNywgMHg0NjU5Y2Y2OCwKLQkweGFmZmQ5Mzc5LCAweDNlZTc3NTliLCAweGI2MjE5ZmUyLCAweGYzMjRmMjlhLCAweGY2OTFmZjBmLCAweDI1MDcxYzA3LAotCTB4ZTdiNGRlMWQsIDB4YmU3NjY5N2QsIDB4OTllYTE1NmYsIDB4NTczNWI5NDUsIDB4MmFiZTQ5YjgsIDB4NDIxY2ZlYzcsCi0JMHg1NTY5NDM3YiwgMHgxNmIwZjI1MCwgMHg0NTYwY2ZhMywgMHg1MThhYjVmOSwgMHhiYjc0N2YzYywgMHg5NWViODBkMywKLQkweDA2NjJmMjJiLCAweDYyNzVmZjhlLCAweDZkMTVmYzgwLCAweGYzY2MyMDNmLCAweGY3YmQ4YzlhLCAweGFjYTYxZmEwLAotCTB4ODQyYWJkZWEsIDB4NjVkMDcxZWIsIDB4YTliOGMyNjgsIDB4ZjE0NGQyMzEsIDB4OGEzNjYzOTYsIDB4MmUxZWU2YWYsCi0JMHgyODJkZmQ1OCwgMHhkMjczYWVlNywgMHhkMWMwZDdmZSwgMHg2Zjk0YjlhNSwgMHgzZDFjZjMwZSwgMHg0Y2VmM2NjYywKLQkweGNkNDg3OWUzLCAweDYzOTQ1ZTgyLCAweDMzZWEwMzM2LCAweGUyZjMzMzY1LCAweDNlMmQ3OWU4LCAweDdlZjgwMmU3LAotCTB4M2EyMTUzYjQsIDB4MDgxNjk4NWYsIDB4OWUwZTdhZTMsIDB4YzA5ZTU5NmYsIDB4M2MyOGI3Y2YsIDB4ZmU1OGUyM2UsCi0JMHhkY2YxMmZmYSwgMHhiNzExNmVjOCwgMHhmYzdjNzEzZCwgMHhiNWYzOGExYywgMHhmZGUyMTIyYSwgMHg1MWU3OGI4MiwKLQkweDNmYTY5NjNlLCAweGY3YzUxMDg3LCAweGNkNDdjYTA5LCAweGFlNDdmNjNmLCAweGY2MGRhMGJmLCAweDdkMzkxOGFmLAotCTB4MGVlZWFkMjgsIDB4M2JmNjI3OGMsIDB4N2I3Zjk0MDIsIDB4NGNiNzRiNjUsIDB4YmVjZTYzZmIsIDB4MThkNWFhMDcsCi0JMHhkNzFiNjZiZiwgMHhiOWZiNGQyNywgMHhjN2VmMWUxZiwgMHhmOTFlOTk3YywgMHhlMTNjYTBlZCwgMHhmY2IwNjQ3YSwKLQkweDdhNGZiMjBmLCAweDU3YzdmNGUyLCAweGRlOTg0ZmY2LCAweDUzYjc4YmFmLCAweDIxYjhmZGUyLCAweDdmNWM3Nzc2LAotCTB4NWEyYmQ5MjMsIDB4NzQ1NTQ5YmUsIDB4M2IzNzZlMWMsIDB4YTQyODdiMzQsIDB4YjJhOWM3Y2IsIDB4MTY2YmYzOGIsCi0JMHgyNjBmZmY3ZCwgMHgyMmZmNzkzYiwgMHg4ZDZkMjczZiwgMHg3ZDQxNGFiYSwgMHhlMjhjMmZmNSwgMHg5MGZlNWE3MywKLQkweGFhMTQyZjk2LCAweDIxM2Q3OWUyLCAweGI3Y2U4NTgzLCAweGU1MWI1ODc5LCAweGRkNjI4ZDA5LCAweGI0NzE0NDkyLAotCTB4YTdkZjg2NWUsIDB4N2MxMGJlNjMsIDB4ZjJkMmZmZmYsIDB4Y2M1ZGZmYTksIDB4MzkyNjRlYmIsIDB4YmYwODRhYTksCi0JMHg1MjRjZjMxNSwgMHhmNmYwZWUxMCwgMHg3N2RlMzhjNSwgMHgxNTllMzRlYywgMHhjODUyNGNmMywgMHhjZGZlMjA5ZiwKLQkweGQ0ZmNmM2Y0LCAweDdmN2NmNWU5LCAweDMwZjQxMzIxLCAweDM5MGIzMzk2LCAweDk5ZTc1YTVkLCAweGNiNTU1ZjI4LAotCTB4NGNmMmQxMWYsIDB4MDk1NGJjMzQsIDB4NTk4ZTY3N2MsIDB4NTA3Mjg3OWMsIDB4OTJkOTQ3Y2IsIDB4ZmI0NGFkZTAsCi0JMHg3YjAyNTVhNywgMHg5MGQzZTcxYSwgMHg3ODRiZjIyMCwgMHhmOTBkZWRiZiwgMHhhZmY3YTQ2MSwgMHg4ZjEyN2Y5YiwKLQkweDY1MGYyZDY3LCAweDNkMjA2MjcyLCAweDVlN2EyMmJkLCAweGQxMWZjYjRlLCAweDNkNjYyNmU4LCAweGM3MWRhZTA5LAotCTB4NTU1ZjNkYjgsIDB4MGM3OWEyNmYsIDB4NzE0NzVjMzQsIDB4MDMwNjgxYzksIDB4ZDU1ZmJkNDMsIDB4MTg3NGU2NjUsCi0JMHg3OThlZGUzNywgMHhmZDhkZDYyNiwgMHhlNTJiNjEyYSwgMHhmODdhMGJkNywgMHhkNjE2N2IzMiwgMHhiZWUzMThiNywKLQkweDJmZWU1NjI3LCAweDdmZGUwM2U4LCAweDNkMjc2NTc2LCAweGE3NTJhYzA3LCAweDMzY2U4OTNjLCAweDk1MDk0N2NlLAotCTB4NWViOGU5ZTMsIDB4NmFmMzFjYjksIDB4OTAxMjM5MjIsIDB4MGZlZDg0ZDAsIDB4MzUzOTUwZDcsIDB4YTc5NjA2ZjIsCi0JMHg1MWFlNWU3YSwgMHg4YzBjNGY0MCwgMHhhMDk2ZWM4ZSwgMHgyZGRiN2ZiZCwgMHg5OWI0OGNiYywgMHg3ZDNkZmEwOSwKLQkweGU0YTg0ZDc2LCAweDM2M2JlODFiLCAweDJhYTM2ZjI0LCAweDM3ZTI5NTNkLCAweGJjNTBmNGY3LCAweDcyYmJlODQ4LAotCTB4MGNkOTFmMmUsIDB4YWJjNzk4NzMsIDB4OWQ5YjhhNTQsIDB4M2IyM2M4Y2EsIDB4N2Y5YzVlYzAsIDB4YjNlYjA3YjAsCi0JMHg4MzY3MTRjYywgMHg1M2ZmYTI3YSwgMHg3YWYxYTdhMywgMHhjYjNmYWY5NSwgMHgwZGZjZjA3MiwgMHhmOTQyMWJkNiwKLQkweDFhNmYyYTc2LCAweDkxMWJhYmM1LCAweGIyOWVjMDNmLCAweDcwNzMwMjNiLCAweDNkNDljZjVkLCAweDljM2YyMjc3LAotCTB4MjVjZmY5OWEsIDB4MGVlN2U3NDgsIDB4ZTUxMGI0ZmQsIDB4YjAyNjM1Y2YsIDB4Mzc5MTg3ZDMsIDB4ZGU1YzE5NjksCi0JMHhlYmVkMTgwYywgMHg2NWU3ZTgyNCwgMHhkOGZiZTA3YiwgMHhmOWI2YWJjZiwgMHg3Y2Q1MzBiMywgMHgxMzM0Y2E1ZSwKLQkweGExNjAxZDFlLCAweGZmMjhjODVmLCAweGI5ZmFjNTUyLCAweGQxZmI3MmU2LCAweDYxMmZjMzM1LCAweDJiMWFlODFlLAotCTB4YTAzNTIzODcsIDB4MDk5ZWM4ZjgsIDB4MDNiZTk1Y2MsIDB4MDkyMzVmZjMsIDB4NDlhOTg2ZmIsIDB4NmFhODg3ZTQsCi0JMHhjYjIxZmExMiwgMHg1OTQ2YjljNCwgMHhmODJjYjdmMCwgMHg3YjJiMGZmYiwgMHhkODMwMTUwYSwgMHgyY2RjZWYyZSwKLQkweGRlZGZlNzBmLCAweDY4NmZlNzE4LCAweDVjZTk0ZGNmLCAweGQ1OTFjZjRlLCAweDZlMWY0ODA5LCAweGQ3ZGY5MWUzLAotCTB4MjZjOTNhYzAsIDB4YmRmMTE4NmYsIDB4ZmI0MWRiMjYsIDB4MmEzYjRmYjcsIDB4YWZkMGJkM2QsIDB4ZTUyZmZiOTQsCi0JMHgyNmJkNTc5OCwgMHg3MWNhNWZmYiwgMHhmNjRlNGQ5ZiwgMHhlNTMxZmM3YSwgMHhmNTJhZTk0ZCwgMHgyMWRiMDMzNywKLQkweGU1Y2Q2Y2ZlLCAweGJiZmQ3ZjE4LCAweGZkMDQ5N2Y1LCAweGZlZmQ3Yzk1LCAweDczMzFmYjA2LCAweDIyNTk5NmI4LAotCTB4ZGRmMDBhMzksIDB4MDNjMGQ2Y2QsIDB4MTYxNzdlYjgsIDB4YjNmYjQ5YmMsIDB4N2E5ZTY2NzcsIDB4NGUyYmYzMDMsCi0JMHg4OGNmOTkxOSwgMHg5YzQzMjQ3MiwgMHg4ZWJkMDMzZiwgMHg3NWNjOWVlMywgMHhjZTUzZjNmMSwgMHhiMTEzZDM2ZCwKLQkweGYyZTljMDVjLCAweDdkYTYxNjVhLCAweGZjYjk5YWY1LCAweGFjZjVlM2JjLCAweGRhMTdhNWE3LCAweGFhMzFlMzVkLAotCTB4NzFmYzMxYmQsIDB4NWYyZmFhYWQsIDB4ZDcyZmFjNWYsIDB4N2Y4ZTNjODgsIDB4ZGZkZmVhZjIsIDB4ZDIwYTIyYzAsCi0JMHg3Y2E3YjdlOSwgMHhmZGY2MjYzNiwgMHgyZmRmNTY1MywgMHg5MjllOGY5MCwgMHhlODY3ZGU3OCwgMHhmYjI0ZTY3MiwKLQkweGQwODUyZGQ5LCAweDY0ZmYxOTllLCAweGM5ZmYzOGE2LCAweDU1ZmYxM2YzLCAweDRlNGY1ZmY4LCAweGI2OWY1NDYxLAotCTB4ODJjN2IyZGYsIDB4MmQ5ZTIyZjUsIDB4MWVmMWZhOGIsIDB4MjY0ZGM5NjYsIDB4MzBmYTQ5YjksIDB4NDczYzg5MjIsCi0JMHhiMGYxZWQzNywgMHg3OTNiYjc0MywgMHg5YWRhMTc1YywgMHgwYjQzOWZhMCwgMHg5YTRiYzI1NCwgMHg0MmFlYzBkZCwKLQkweDEwYjcyYmZlLCAweGJlNzQ2OWZmLCAweDBhZjQwYWM2LCAweDY1MWNhOTc4LCAweDVkZmE0MDQ5LCAweGMzNmVmNDYzLAotCTB4YjMwNGU0YmUsIDB4NWE2ZmZhOGEsIDB4OTZmYTg1YTIsIDB4ZmU5MGE2N2YsIDB4MzMzNTY1NTgsIDB4ZGM0Zjk0MjcsCi0JMHg2ODY1NDA5NywgMHg0NGUwNzI0NywgMHg3MThjMjk4NSwgMHhlZTQyMzVlZSwgMHg0ODFiZjdjYiwgMHhjYzJhNTY3ZiwKLQkweGQwMWI3OThmLCAweDlmZGYxYmFlLCAweDNiNTBiMGM4LCAweDdjNWNkMjk4LCAweGYxYThjYTdmLCAweGYyODUzNGQ1LAotCTB4MWFlYzA1MzgsIDB4ZjQ4OGMxM2YsIDB4NTdlMGFiN2UsIDB4YjNjZGYwNTksIDB4ZmI4ZDA3MDAsIDB4NzE0MWRjODIsCi0JMHgwNWJkNTUzMCwgMHg2MzJkZTdjYiwgMHg3MDUxMWNlOCwgMHg2MjliOWNmMCwgMHg5ZDhhYzFjMCwgMHhmOGJiZGY4MiwKLQkweDNmOGQzMzM5LCAweGQyMDE3OTM1LCAweDI4YjcxMGFkLCAweDZkMGUzMTI1LCAweDNlYTFhN2FmLCAweDZiNWY2NDY2LAotCTB4MDdlZGFhZmMsIDB4NzZiNDViNjYsIDB4Y2ZmYjBmOGEsIDB4M2NkOWRmMTAsIDB4ZGNiODQyNzksIDB4NDdmY2E2NjgsCi0JMHg3YWVhNWVmMSwgMHgxZmE0MTNlZSwgMHhhZjc3YWY4ZCwgMHgzZDdjNDBiZCwgMHgzZmM1ZGYxNCwgMHgwZTc1ZjJhNiwKLQkweDk4ZjdjNzI3LCAweDM5MWZlNDJjLCAweGVhMTY0YzYxLCAweGFmMmUzNTlmLCAweDE3Mjk4ZmVhLCAweDRiY2ZmOTAzLAotCTB4M2I0MDdjNDYsIDB4N2Q1OGRmMjgsIDB4OTE4OTUwYWEsIDB4ZTcwZjM2ZjMsIDB4NGJlNzY4NTcsIDB4YjA5ZjdjMDEsCi0JMHg2N2M4NTlhYSwgMHhjOGRiOGNjMywgMHg3ZGZkYjVjNywgMHhiOGMwZjVjNywgMHgwMzg0ZWVkMCwgMHg3Yjc2ODVjNiwKLQkweDQzNmVlNmFkLCAweDRmZTM3MGUyLCAweDJmYmM3MTUxLCAweDZlYjE5NzFiLCAweDA0ZWI5ZTIyLCAweDQyMGU4MTVlLAotCTB4ZTEzYTM3MTgsIDB4NWUzZDEwMzAsIDB4NGY3YmYyMjcsIDB4NThmMWYyYTQsIDB4YTY1ZjNlYjEsIDB4NDBkMGU4MTAsCi0JMHhmY2ZhNThmOSwgMHg5ZGE0NmI5OCwgMHhiNmVmYTgyZCwgMHgyMGY3MTM1YSwgMHhlODI3M2RkZCwgMHg2N2VkYTRlMiwKLQkweDNjZWY2ODg1LCAweDU5ZThiZjM3LCAweDkyYjNlYjk0LCAweDkxMjBiNTU2LCAweDg5M2FjNzVjLCAweDc1NzkzNWVmLAotCTB4NGFjZGUzMjEsIDB4MWFkYzgzMmMsIDB4YmZmNTgxZTcsIDB4N2NkNGZmMzMsIDB4ZDc1OWZjZWMsIDB4NWZkNDQyZDYsCi0JMHg3YmM2MGYyMCwgMHhhZmMyODc1MiwgMHgzNzA2OWZkMSwgMHhmYmQyMjFkMiwgMHhjMWM2MWQyMCwgMHhiYjExZDFhZiwKLQkweDBiMTI5M2ExLCAweDg4YmQ4MTc3LCAweDA0N2VjZDRmLCAweDkxZTc4ODRmLCAweGY5ZDFkOWFiLCAweGIyY2YxMTAxLAotCTB4MzQ3OWYzMzQsIDB4NmJlZTA4ODQsIDB4OWU1MDBmNWMsIDB4MDE5OWU1ZDksIDB4NjlkNjA3OWYsIDB4NzIwZmE0ZGUsCi0JMHg1OWVjNmMxNCwgMHg3NmUzMDYzMCwgMHhmZmI0ZWYwMCwgMHhlZGUzNzg0YiwgMHhhN2NiMmZlNSwgMHhiNThmODkxZSwKLQkweGZiMzlhNWYxLCAweDM4M2E5ZjI5LCAweGQ1Zjk0ZWQ3LCAweDY5M2U0NWQzLCAweDcxNDBkZWIwLCAweGM4YWJmMDc0LAotCTB4OTY2MjZmMWUsIDB4YTlkZGNhMzAsIDB4ZjJkNWJlYzIsIDB4M2M0YThmZmMsIDB4YzI3YTE5M2UsIDB4YjE4YmVlYWMsCi0JMHg1OWU2ODc5MywgMHgxZGM3OTRhYiwgMHhiMWYzYzE1YSwgMHg0NmUwZWQwNywgMHg5MDYwZWM5NSwgMHgwNTczYmFkYiwKLQkweDc2NWNhNWVkLCAweGQyYWVkZmI3LCAweDI0YTc5OTc5LCAweDgwYjQzZWRlLCAweDdkYjNkYzUxLCAweGU0NWZhOGI2LAotCTB4NThmNzZiMGMsIDB4N2NkMTY5NDgsIDB4NDYwZWY2ZjcsIDB4YzhlZWRmZjQsIDB4NTk0Y2ZhYTcsIDB4MTZmZGNiOWMsCi0JMHg3OWVkMzdkNywgMHhiZjZjNGZkYywgMHhiN2VhODhiOSwgMHg1MmM3ODQyNCwgMHg4N2Q4OGY1ZSwgMHhmNWZiODFkZiwKLQkweDdmMWZiMDVmLCAweGUzZjM0NzlmLCAweGIwNzUxYzc4LCAweGEzOGE3N2ZjLCAweGI0MGNlYTNlLCAweDJhMmRmZDIxLAotCTB4ODExOGU1ZjEsIDB4M2M0Y2VhNWUsIDB4YmFmNDBhOWUsIDB4N2E2MTg3YjMsIDB4ZmEyMTczNWYsIDB4ZTZiMmQ3M2IsCi0JMHg0NDA1MGM1NywgMHgyZTkwNWJhZiwgMHg3YTA3OGRlNywgMHhlYmQxZDAyZCwgMHg5NzA1NGY1NiwgMHg0Njk3MDhkYiwKLQkweDVhNzQ4M2FmLCAweDE3Mzc5ZjFjLCAweDc2ZmI2MzA4LCAweDliOWZlNzU3LCAweDMyZTgzZmQwLCAweDMwZGU3OTdiLAotCTB4OTc4YzgzY2YsIDB4MmNmMDMxMGYsIDB4NmUzYzM4NTQsIDB4ZjY3ODI2NTksIDB4YzFjNGZmMTMsIDB4MTM3YzI5NzMsCi0JMHg4Y2U5YTc0YiwgMHhmYzQ4YzdmMywgMHg5MGIwYWU5MywgMHgzZmNhMmNhMywgMHg0ZjAzNTk0ZiwgMHg3YzgzYjhlMiwKLQkweDBiZjcwZjc0LCAweGRiMmRjMDg3LCAweGJhNmU5ZTg5LCAweDA1MTdlZjk5LCAweGUzZWY1YzZkLCAweDhjMDY1MWJlLAotCTB4N2Y4YzViM2YsIDB4ODY3ZmFiNTMsIDB4OTZjZGRiMGIsIDB4ZTFiYTFlMzgsIDB4MWNmZjAwN2YsIDB4YWJiYjNmNTEsCi0JMHhlNmM2ZjI5MSwgMHg4ZTllMzBjYywgMHg3OTM0NzNiNSwgMHhjZDUzZWRhOSwgMHg3NDZmZWQxMywgMHgxZTYyMzZjZSwKLQkweGZkMWFkY2Y3LCAweDViYmNkMGZlLCAweDRkZDRmZWY4LCAweGNjZmRmNTczLCAweGEwM2UxYjYzLCAweDZjZDY0NmZjLAotCTB4YmJjZGZjNDQsIDB4OGFmZjVmNDUsIDB4Njk1ZjcwNjcsIDB4M2QyYmVlMGMsIDB4MDMyOWUyMmIsIDB4NDdjODI3YzAsCi0JMHhiMjVkNGRiZiwgMHhmM2EwNzZmMywgMHgyOTJmM2YzMSwgMHhjY2NmMzhjMywgMHg5YmJkODZiNCwgMHg4ZWU4ZmNhMSwKLQkweDZkZmU1NDcxLCAweDc0N2ZmN2RhLCAweDE3NzdlYjBhLCAweDQxODY3OTUxLCAweDkwYzdlN2UyLCAweDhhY2Y4MTBmLAotCTB4MmViZTZmMmIsIDB4ODlmNTExMmYsIDB4NDY3NmY3ZTgsIDB4ODEwOTNkZWYsIDB4Y2VkMGQ5ZjYsIDB4ZjI5ZjMxMzMsCi0JMHhmODg4NjczZSwgMHg1ZTIyYzBjMCwgMHgwNzI0ZmQ3ZiwgMHg1NWJkZWQ0ZiwgMHg4Y2VhZjhhNSwgMHhlNDdjYzg4NCwKLQkweGZmNGIxNzgzLCAweDkwZjMwY2IzLCAweDcyOGJlNDY3LCAweGIwZTM1M2Q5LCAweGMxZjRhY2ZjLCAweGZkNjdkNDdjLAotCTB4ZDcwNTc2OGQsIDB4Yzc5MzI5YTEsIDB4NGIxN2M3YTUsIDB4ZTIyNzYzZGQsIDB4N2ZkMTJjNzksIDB4NGQ1NzlmMjMsCi0JMHg5MTMyMmZkOSwgMHhmMTU0NjY0ZiwgMHhhNzdiYzY3ZSwgMHgzYjYwMTZiNSwgMHhmNzJhNzljMywgMHgxMTEyNWE2NywKLQkweDE5YmYxYWZmLCAweGQ5YTQxZjg0LCAweDI3MjE3ZThkLCAweGQ5YmRmNDllLCAweGZhZmQwMjkyLCAweGE3MTc5MjJkLAotCTB4MjZmMjlmZTgsIDB4OWQ5ODE3YzUsIDB4ZmJmM2E3OWYsIDB4NmI4YzE0ZjIsIDB4M2NmMWY3NGYsIDB4ZDhhYjZkZDUsCi0JMHhiNmYzYjQyYSwgMHhkNjUzZTk1ZCwgMHgwYjc0ZmQ0MCwgMHg3YTA0ZjVhMywgMHhiZDIwNjUzNywgMHgyNzIwZmU0ZiwKLQkweGFlY2M4OTExLCAweDllOGQ3N2E3LCAweDNlNzQ2YjY2LCAweGMwY2Y0ZjQzLCAweGZlZmM3NmE3LCAweDhlYjVlNGNiLAotCTB4N2E1MWFkOWUsIDB4MDljZTI5MWUsIDB4YTA2NDY1NzAsIDB4NWU5NmY4NWMsIDB4MTM4ZTBkOGYsIDB4ZTNmMThmYzcsCi0JMHhmMDI3MjQ4ZSwgMHg0NmRlNTYyZiwgMHhiZTI0ZWJlMSwgMHhiZmVjYzJjYiwgMHgzNmNiZTQwMiwgMHhlMWM3MmY4ZCwKLQkweDFlODY0Y2ZjLCAweDJiOTQzZjNhLCAweDAxZDFjNzc5LCAweDBiNWUyOWRjLCAweGZlMzhiOWU5LCAweGM2Y2JlMGQ0LAotCTB4NTBkOTcyZDgsIDB4ZDE0ZmYwYjgsIDB4ZTdmZTUwZWMsIDB4OTY0M2Y4YzYsIDB4N2NlZjg3YTgsIDB4MTcwYTM5MmMsCi0JMHhmMTE1M2Y4YywgMHhmMGUxZWVjMCwgMHhiOTlhOTJlYywgMHg4NjdlMTE1YywgMHhkMjY4YjcxNiwgMHgzZjU4N2JlNiwKLQkweDdlMDRjYWRmLCAweDcxODNkZjhlLCAweDI4NWJkYTI2LCAweGY3MDgzNzFkLCAweDM2ODNhYzI1LCAweGRmZDBhMDlmLAotCTB4ODc3ZTJkNzMsIDB4MWRmNmU2MDksIDB4Y2ZkMTFkNTcsIDB4YmE4MzQxNzcsIDB4ODExZDVkNzAsIDB4Mjc5YzIzNmYsCi0JMHhlODYzYTEwYywgMHgzZTYyMmQ4ZiwgMHhmYTA2NWZkYSwgMHg0NDU0NjdmMCwgMHgzNzgzNGJkNywgMHgyMzRkNGYxZSwKLQkweGY5ZjhkMWM4LCAweGJhMjdlM2M0LCAweGY4MTkzZDZlLCAweDBkZTdjZWQ0LCAweGU3MTJmN2NlLCAweGI4OWY2ZjE5LAotCTB4NWY3OGZhNGQsIDB4MjVjYjg4YjIsIDB4YzU3MGUzNDcsIDB4MTJjMzVmNTgsIDB4ZjM4NzE0YmMsIDB4ZDViZmU0NGEsCi0JMHg3MjgxYmQ4MCwgMHg1MTlhYTZiOSwgMHg2ZWQ5MjQzYywgMHg2NjljMzhhMCwgMHgyN2M0OGM3NywgMHg0OGM1NWY1NywKLQkweDYzMmNkNTRlLCAweDlmMjA1Y2UyLCAweGE2M2QzYzVmLCAweDkzMWZkZWIzLCAweGI3NTE2YmZmLCAweGFmN2U0NDJmLAotCTB4ZjBmMmViYjcsIDB4NmUzY2VjNmIsIDB4MWI5MzVlYmYsIDB4ZjUwMmI3YWMsIDB4ODg3OTYwZmMsIDB4NDBhZGVmOWUsCi0JMHhmZjdmMTNiOSwgMHgxZTQ1Y2Q1NywgMHgyOGJlNGUyZiwgMHhmYmM2YjNkMSwgMHhmOWVhMDU2NiwgMHgwYWRlZWFlNCwKLQkweDI0MGY1Zjk0LCAweDc1YzVlZWY5LCAweGUzYzBjMzdkLCAweGRjZjhmMWVhLCAweGUyZDA2MTlhLCAweGE3NDQ5N2M1LAotCTB4NzgzNDdjZjEsIDB4ZDgxMWRhY2UsIDB4ZjE2OGUzODEsIDB4MGY1MjczYTQsIDB4MzhhNjRmOGYsIDB4M2M4MWZmNDUsCi0JMHg0YmEwNjdhNCwgMHgyMDY2OWEyMywgMHgxY2ZmM2YyNywgMHgzN2ZjNTE5ZCwgMHhmNzI2ZWRlMCwgMHg3YjljOWFlZCwKLQkweDE4ZGNlNDk4LCAweDVjZmRkN2ExLCAweGJlOWNmODllLCAweDRlMWMxOWJkLCAweDAyMWRjYmMyLCAweDllODUzMzJmLAotCTB4MjY1M2JmM2QsIDB4YWY4NjY0M2YsIDB4YTE2ZTJiNzgsIDB4YjIzNzlmMDQsIDB4OGZiMWYxMzAsIDB4OGY3NmEzZjQsCi0JMHhhODMwNzlkNywgMHg2M2ZkYjFiYSwgMHg0YmI3ZDIwZSwgMHhmZGEzYTg1ZSwgMHgwY2RiMzFhNSwgMHg5N2QxOGQ0YywKLQkweGJhMDljMzYzLCAweGVmYzY0MWZiLCAweDI3OTVkNjRmLCAweGRhZWE2Njc0LCAweGFmOWMzYTRmLCAweDFlZWQyZmFiLAotCTB4ZWNiZmFiYTcsIDB4Yjk1ZDMyZjksIDB4YWVhYTY3YTIsIDB4YWI1N2U0ZmQsIDB4N2JjYmU1NzQsIDB4N2ZiNWQzYWYsCi0JMHhlMDNkZjUwNCwgMHhjY2VmNWJmNSwgMHhlZmZmYmRkMSwgMHhjNzllYjMxZCwgMHgyMzJiZGNmZCwgMHg3ZjdkZDNkZiwKLQkweDU4MTljNDQ2LCAweDBjNTNkN2M4LCAweGQxYTg1ZmYzLCAweGRkNWFjNWVmLCAweDc0ZDY2MGY3LCAweDA3Mjg5NTRiLAotCTB4MGRjMmRmZjgsIDB4MWE3ZDRmM2MsIDB4YmZiNjJjNjAsIDB4N2I3YTZkNDUsIDB4NTA4YjI2NjIsIDB4NTg1MzVmN2UsCi0JMHhjYzMzNzZmMiwgMHgzN2Q3ZDM1MywgMHhiYzIwZWUxYywgMHgwMTNkZDk3ZSwgMHgwYzBiZGM2MywgMHgxOTdkMGY0OCwKLQkweDg1OGM2NzYwLCAweDE0YjBhNDdmLCAweDg5MWJiM2NjLCAweGZkNmNiZmZmLCAweGQ3ZTE1ODhiLCAweDQ3YjM3ZjVhLAotCTB4NTU1NmZlYmYsIDB4NjJiNmZlYmYsIDB4YmMzYmZhZmQsIDB4OWE0ZmY1ZmEsIDB4OTc3ZjVmYTIsIDB4MjlmZWJmNGYsCi0JMHg0ZmY1ZmFkNSwgMHgzZmQ3ZWJmNSwgMHhmZDdlOWU3ZCwgMHhmNWZhMDIzMywgMHg1ZmFmNTUxZiwgMHhmZDY2ZWNmNywKLQkweGQ3MmVlNzdhLCAweGU4NWU2YmFmLCAweDM2ZmRmZDM2LCAweGQxYTA3NDcxLCAweDBiNGYyNjkzLCAweDc3MTFkZGQ2LAotCTB4MTk4MThlMWYsIDB4YTM0MmU4NjIsIDB4N2FmZTg1YjMsIDB4ZGQxYTVmY2EsIDB4NzhkZDEzZjYsIDB4ODYzMWY0ZjEsCi0JMHg2ZmNiYmM4OSwgMHg5OTg1MWY0OCwgMHg3Zjk4MTc0MCwgMHgzZjkyY2M5OSwgMHgxYmVmM2QyNywgMHhkNDNhOTk5ZCwKLQkweDU2ZTRkMGJlLCAweGY1OGYzZWFjLCAweDY3OTI0NzhmLCAweGYwOTRmNDQzLCAweDUzZDQ0Nzk3LCAweGEzNWIyZmU4LAotCTB4NzQ0OGYyZmUsIDB4ZmQwMzFhZmEsIDB4YTA2ZjgzNGEsIDB4NGVjZGQ4MzgsIDB4MDQ4OWM3MGUsIDB4ODg3ZmI3NmUsCi0JMHgzYjQzOTc1NSwgMHhlMDA1MzM2OCwgMHgwM2U3MGQ3ZCwgMHgzMDk2YmZlMywgMHhkZjFkZTI5ZSwgMHgxYzQ2OWQ2MywKLQkweDQzZDYxNmY3LCAweDQyMmNmOWNmLCAweGVhNzMwMGNmLCAweDY0MmM3ZGNlLCAweDdmODg5MzdlLCAweDgxNTk5NzVjLAotCTB4NGFkZTkxNzEsIDB4MTYxN2EzOTQsIDB4ZjY4MzdhOWMsIDB4Yjk0YzVlYjMsIDB4NGUzMjdiYTQsIDB4NjhjOTdlZTMsCi0JMHhiOTBhY2VjNiwgMHgyNmZiODdkMSwgMHg4YWI3ZWU1MCwgMHhhOThmYTA3OCwgMHg5ZTdjMThlZSwgMHhkYWNiZjExNSwKLQkweDU3ZTkxMmU5LCAweDdlNTAyNzI2LCAweDI1NzdlZDU3LCAweGZmYjU0ZmQyLCAweDk5NzU5ZmMzLCAweGZmMWVhZTNjLAotCTB4YzM1Y2IzNWMsIDB4MGJiMDliNmIsIDB4NWY3MDdkYjgsIDB4YmJmNTRhYTYsIDB4YjI3NmFhNjAsIDB4OTQ0ZWJkNDMsCi0JMHhkZjFmZDBmZiwgMHg0NGQ4NzhjNywgMHhjMmM3YjlmZSwgMHhhMjk1MDRlMSwgMHhlM2E2NGM1YywgMHhiOGVlYjQ3NCwKLQkweGNiZWU3OGZlLCAweDRkZjBlMTYzLCAweDIyZTU5ODUwLCAweDAyY2YxZmJjLCAweDk1ZGUxNzY0LCAweGRmZmQ0Zjk5LAotCTB4ZTM4ODgwYWIsIDB4ZmVjMzhmZmQsIDB4MTU2ODRhM2QsIDB4YzA3ZmQxYzUsIDB4NWJmNDcxZjQsIDB4YTM4YTI1OWEsCi0JMHg4NWUwMDBmZiwgMHhmNWU5YzdhNywgMHhjYWQ2MWVhMCwgMHgzM2JjMDVhYiwgMHg0ZmJjMWRiMCwgMHgxODRiMzRmNywKLQkweGZkYmFmYWZmLCAweDc4YzNmNjBkLCAweDc4ODdmODNmLCAweDU5YTFlMmQ3LCAweDU4NjY4NzQwLCAweDYwM2ZiZGQ3LAotCTB4OGY4YmNmMTQsIDB4NDE5MjhlOGIsIDB4OTNmZTYzYTIsIDB4ZjdhYjlmOTEsIDB4OWZiOGRiMjgsIDB4ZDRlYmQyN2EsCi0JMHhkMTk4N2RjNSwgMHhiZjIwZTc4NSwgMHhiY2MyZGVjYywgMHhlNzMxYjNlNSwgMHg4N2JkNjAwYywgMHhlOTc0N2ZiZCwKLQkweGJmMmZiZTI4LCAweDMxNjc2NTY2LCAweDRmZDg4ZGQxLCAweDdlZTU3YmJjLCAweDk3OGFjYjJhLCAweDNlZjEwYWYyLAotCTB4ZjdjYzU3MmEsIDB4YzdkNDM3MjYsIDB4ODc2MmJiZjAsIDB4OTBlNDYzZWYsIDB4Y2JhN2VlZDEsIDB4ZDk1OWVlNTcsCi0JMHg0Njc4ZmI0MywgMHhkYWQ2NmY3MSwgMHg4MTljM2JhYywgMHgyZmM3Nzg5OCwgMHg2MzFkODUzMywgMHgxYTY3MzEwOSwKLQkweGZjMzdhNjEzLCAweGUxOWQzM2JkLCAweGU1NGVjYWZhLCAweGNiNWZhYzZjLCAweDg4NmM5NzllLCAweGNmNDE0NmI3LAotCTB4ZDdiYTA5MmYsIDB4NjA3YjM2ZTAsIDB4NWViODE4YmMsIDB4ZThkZWY0MTIsIDB4M2NlMTMxZWMsIDB4ZThiNTgyNWUsCi0JMHhkMmI0YjhjMSwgMHhkM2ZiYTZlMywgMHgxYzkzNzE2ZSwgMHg4M2FjNDFiYSwgMHg4ZGQ0YTBmOSwgMHgwYWNjNGFlNywKLQkweDVlYzVmOTllLCAweDgzMmZkYTdhLCAweDY0YmNmNzI2LCAweDc2ZWZiODY0LCAweDI0MzVjNTRmLCAweGNkYzk0ZDRmLAotCTB4OGZhMDZlZGUsIDB4YzhiNGJlMWYsIDB4YWYwNjE4MTksIDB4NTFlY2QzZGEsIDB4YzVjYWM0MmUsIDB4NWY4NTMyZTcsCi0JMHhjNjRkOTkzZSwgMHgxZTA2MTk3NSwgMHg3NDNmOTNkMiwgMHg1ODdlNmZmMiwgMHg3ZTU4ZjNjMSwgMHhmOTQ2MDNmOCwKLQkweGZjMzk2Y2VkLCAweDk0ZjE0NjU1LCAweGY3MjRiY2NhLCAweDJmNDIyYzVjLCAweDA2MDRhYzM3LCAweGU4ZjYwMzFjLAotCTB4OTgwYjBiNGEsIDB4NjZiMjFmNDEsIDB4OThkMmQzYjIsIDB4NDM2OWU4OGYsIDB4M2FkZThiZTksIDB4ZjY1ZWNlZjgsCi0JMHhjZmY0NjJiYiwgMHhhZmY4YWJlZiwgMHgyYTNiMmM2NiwgMHhmMmM3YWY1ZiwgMHg3NThmYjFmYSwgMHgxZDlhMGU2MiwKLQkweGRlNTM3MTYxLCAweGUwYWYxODUwLCAweGFmZjcxODRjLCAweDNiNjM1N2ZiLCAweDFmNzk4ZjdjLCAweGUwMWVmMGQ1LAotCTB4NTc0Mjc3YjksIDB4MjZkYmRiMDQsIDB4ZWIwNzdkMWUsIDB4OTZkZGVjMTMsIDB4ZTEyZWY4MDIsIDB4MDA1NWU2MTYsCi0JMHhmMmRlYTk1ZiwgMHg3NGYwMDU2OSwgMHhiMDJmNDM5NSwgMHhiZGYxMzZkNCwgMHgzN2VmMGE2ZCwgMHhkZDI2YmY3ZSwKLQkweDQzZGY4N2JlLCAweGZiMTMwNTczLCAweDA0NWVmY2EyLCAweGQ1MjMzZjZkLCAweDBhYWRhN2JlLCAweGJlYTE1NmU1LAotCTB4OGY4MTQxZmUsIDB4Y2ZlM2ZiMTQsIDB4MzAzZDYzZTcsIDB4YWQxNjY4ZGMsIDB4YmJkNDQwN2YsIDB4NTRmNzhmZWMsCi0JMHhkZDE2NWNmMSwgMHhmZjQ1OWJmNywgMHg5NzAzNzY0OSwgMHhmYjEzMmE1NywgMHg5MzdlYmNiNiwgMHhmNTZhYjdhOCwKLQkweDY1ZjYyNjFlLCAweGE4YWI3ZDc5LCAweGRlNzlkYjM3LCAweGVlYjdiMDEyLCAweGZjNjJiNWZiLCAweDJjMGM1YmI0LAotCTB4ZWVjZjQzMTAsIDB4MTAyYzA5YjksIDB4MzVjOTFmNDMsIDB4ZDFiMmJhYzksIDB4M2IyNWNmY2UsIDB4YmVlYTY0NjcsCi0JMHg1YmJkZmFkMywgMHg0NTc4OWI4YywgMHg0YjNiZWViZSwgMHhmYjdkMzhlMSwgMHhjZmE0YzliOSwgMHgzNjc4MTBlZSwKLQkweGVhZTk5NTY1LCAweGFjZmVmM2I1LCAweGYyNzNiNDVkLCAweGFhN2I4YTc2LCAweGFhZjNkZmFlLCAweGUwNzI4NDlhLAotCTB4ZGQxYWU1ZWMsIDB4Yjc0ODJkN2EsIDB4ZDNmMjM4NzcsIDB4YmMyMWJmNzEsIDB4YTMzNTNhMTIsIDB4YTc4OGIxM2MsCi0JMHg2ODNkM2M1MywgMHhhNTUzYzA1YywgMHg3Yjg4OWU3MiwgMHg4NTM5NTlhZSwgMHg2ZTgwN2JjYSwgMHg5NWExZmViMSwKLQkweDgyZWYyYTVlLCAweDlmY2YwYWIyLCAweGJjMmEzZjQzLCAweDYwZmQwZWRmLCAweDgzZjQyYjc5LCAweDFmYTEwN2NmLAotCTB4ZTMwMDNlN2MsIDB4Zjg2NmZkNjEsIDB4YTA5YmNiMGUsIDB4YjdkZjJjM2YsIDB4N2JlNTQ3ZDIsIDB4Yjk1MzU2NTcsCi0JMHhjYTlmYTU3NSwgMHhhM2NlNTc2YiwgMHgwMzJiZGRlNywgMHhiMmIzNWNmNCwgMHg4ZTY3ZWE5ZSwgMHg2YmVkZmFlMiwKLQkweGIzOTQwNWU3LCAweDk5ODBiY2Y4LCAweGU3YTIyYWEzLCAweDgwYmNiNDNhLCAweGZlZjBkMzBlLCAweGI4YTNjZGRjLAotCTB4ZmU2NWNjMWMsIDB4ZmU5YzJkYTcsIDB4ZWNjODllZTksIDB4YTM0ZjlkMGQsIDB4ZTdlMjliZGYsIDB4YTFiMTkxZWIsCi0JMHhkNTVkZWE5OSwgMHgzYmVkMWM3YywgMHhhY2IxMGVlNiwgMHgxNThjN2U0YSwgMHhlYTRiZjVkYiwgMHgxOTk3Y2E2YSwKLQkweGNjZWFlM2NiLCAweDI1NmE2MjEzLCAweGZlOTc0ZWJmLCAweDEzZTkwODk0LCAweDVmMmY1OGE1LCAweGRmYzNjY2YzLAotCTB4ZTMxMDFkNTMsIDB4M2VjZDg1YzgsIDB4OGE2NThlOWMsIDB4YzRmMzFiYmYsIDB4OWQwMGRlZWQsIDB4MDhiZGNmZWYsCi0JMHg5YjFmODM5ZCwgMHhhNjJhZjE3NCwgMHhhZWUyZTk4MiwgMHhjOWQxZGJkMSwgMHg3Njc0Y2EzMywgMHg4OWIxN2NhYSwKLQkweGJlYjI1OWRhLCAweDcyNjc2YmE3LCAweGQ1ZGFlYWQ3LCAweGM3YmJjZDJlLCAweGM1MThmODgzLCAweGIwZGU2MWU3LAotCTB4YjhjMDY1OGEsIDB4ZDMzN2RhOGIsIDB4YmFjNWViYjgsIDB4YmRmOTdjYzEsIDB4M2UyNDA3ZDYsIDB4M2RiZjYxNWYsCi0JMHhiNWYzMTRlYSwgMHgzYWI5MjA2YywgMHg0NThiYzVjNiwgMHhjYTAzMjE0OSwgMHg5ZDdmZjdjMywgMHhjOGZhZmM0NCwKLQkweDQ3OGEwNjQzLCAweDAzNjE2NThlLCAweDUwNzhkN2FlLCAweDgxM2Y1OGQzLCAweDEyNzk1MmY1LCAweDk3Mjg1NzRhLAotCTB4ZjJjNjU1MzIsIDB4N2U0MjJjNjUsIDB4YWI2ZmQ4MmUsIDB4ZTQ5YjlkNzEsIDB4Mjg1NjQzYzAsIDB4M2MwZWNiOWYsCi0JMHhiYTkxZjNjYSwgMHg4OTE0YWY0OSwgMHhlY2QyMjhmNSwgMHg3YzRhNmRkOCwgMHgyOGRkNmY3YywgMHhlN2Y1OGZmMiwKLQkweDliZjdlMjk1LCAweGQzMmEzOTU3LCAweDFmZThmZWQxLCAweGU2Y2M3ZjIxLCAweDQyZGNmMzM5LCAweGUzMmRiZmMwLAotCTB4ZWY2YTdhNGQsIDB4YzMwZDU1ZWYsIDB4Nzg3ZGUzOWUsIDB4ZjJjZGY0OTQsIDB4ZmJmYWMzM2UsIDB4MWZkZTgxYjgsCi0JMHgyYjljNzljNiwgMHg1ZTY2MDNmOSwgMHgwOGMyYTZiMSwgMHg4YzZiMDlmOSwgMHg5MzUwOWM5YSwgMHhlY2I2M2Q5OCwKLQkweGYzMzE2MjRkLCAweGFiZTU2NDc4LCAweGVjMDkwYTA1LCAweDc2NGRlMTAwLCAweGU3Y2M3NDZhLCAweGVhNTI3ZjJiLAotCTB4MjJhNjNjYzQsIDB4N2ZiOTM3OTEsIDB4OGNlMTQ2NjUsIDB4N2JlZmQxZDEsIDB4YjMxNDFkMDQsIDB4YzVmZjkyNGUsCi0JMHhmYzk3ODM2ZSwgMHhlNzUzOWY0OCwgMHhkYjBiNWE3NywgMHg0NDVlNzg3YywgMHg5OGJjYzcxZSwgMHhiNTk2MzM2MywKLQkweGY5NmIzOWQxLCAweDIzYzkzMjZmLCAweDRjYjVjNGY5LCAweGMxMjNiYjA1LCAweDdiMjE2NjE5LCAweGZjMjY1ZmI0LAotCTB4ZjkwOTFmZDcsIDB4MDY3ZDkxZjksIDB4NjhlNzJmYzEsIDB4YzhmOWUxZjcsIDB4ZTljOGY5ZGUsIDB4ZDQ5ZTYyNzUsCi0JMHhmYTQ2ZWQ0NywgMHhhZmFkM2U0OCwgMHg1ZjdhNzYyZiwgMHgyZTlkMDAwZCwgMHgyMmYzNjgzZSwgMHg2ZGM1MDk3OCwKLQkweGJjYTAzZjc0LCAweDEyNTk2MjViLCAweDIwZjNjMWMxLCAweDZjYmRiOTkzLCAweDQyYzk1NmRjLCAweDFiNTc5ZWIwLAotCTB4YmYwOTg3MDIsIDB4ODMyMWVhYmQsIDB4NWRhMWZjYTYsIDB4ZWU4OThhNjMsIDB4Nzg4MzFmNjcsIDB4NmU1ZTIzYjEsCi0JMHg0MzgxOWMyZSwgMHgxZTEzMTYxNywgMHhiZjc5ODkxNywgMHgyNmIxZTYyNSwgMHg4MGJmYzM1YiwgMHg3ODdjZjk4NywKLQkweDc2ZTJlMDlmLCAweGNmZDZlZmNkLCAweGFhOTJkZWYzLCAweDRiN2Q2MzZmLCAweGEwZjk0YzhmLCAweDk3M2NmOGYxLAotCTB4NDRjNGE3ZjgsIDB4ZjFkYWYwNTgsIDB4NzAwNDZlM2MsIDB4YTBmYzg1YmUsIDB4ODgyOWRjMjAsIDB4YjY5ZmJlNWYsCi0JMHhlMzBhNjljNCwgMHhhOTdlZTAzOSwgMHgzMGYyOWFiMywgMHg3ZjI4MTgyNywgMHhkZjJlOWUzNSwgMHhmMzY4ZjYxNywKLQkweDZkM2QyNzI4LCAweGNmNDRiMzllLCAweDczZGY3MmQxLCAweDdmYzg1MzBiLCAweGFlZDY3YWUwLCAweDlmMTZiY2YwLAotCTB4Zjc4ZDhkNGYsIDB4MjhlMmQ3YWQsIDB4NDEzZjVmMjIsIDB4ZGY3ODNiYzAsIDB4NDc5ZTM4ZDgsIDB4ZGIzZDY3NjgsCi0JMHgyNDY2NGYzMCwgMHg5NTkwYzZiZiwgMHhjMGQ3ZTcxNywgMHg1NGZkMjBkMiwgMHg2NTFmMjg1OCwgMHhhNGU3OTZiZCwKLQkweDhmMjk1MjllLCAweGU3OTg5ZTFiLCAweGJhNzQxMTY0LCAweGI5ZWZjMWQ2LCAweDNhMzdlNmQwLCAweGQxZDFjYjhiLAotCTB4MDZmZjljNTksIDB4ODZkZTVhMmMsIDB4MjYzNGE2YWYsIDB4YWJiNmJmZmYsIDB4NmQ3NWZjOGUsIDB4YzQ0MDZhM2YsCi0JMHhmNDEyMDY0OSwgMHg4MjBkNDdmYiwgMHg2ZDllMDYxNCwgMHg3ZGMwNGFhYiwgMHgxZmJlMzY5MCwgMHgzZDc1ZDBkNSwKLQkweGQ4ZjJlZmJmLCAweDI4NWY3NDAzLCAweDNkMjJhOWY0LCAweDc1ZjY4OWQ0LCAweGZhZmVmNGViLCAweGUyMDFmZGEyLAotCTB4NDA3OGY4ZDcsIDB4OTgwZmZmYmMsIDB4MWU1ZGExMzMsIDB4NjdlN2ZmZWYsIDB4Y2JkZjdmMDksIDB4ZTliZjcxNGEsCi0JMHg5MzgyODZjYywgMHgyOWI3MDAwOSwgMHhkMWI5ZDE4ZiwgMHg3NGUzZjI1MSwgMHhhNTU4M2JlZiwgMHgyNmNmNzg2ZCwKLQkweGNhZjdlMTJiLCAweDBmZmZhZmM0LCAweDk3ODQ0ZGIyLCAweGRmNWYxMmZkLCAweGYxM2I2OGQwLCAweDJlMGFmZWMxLAotCTB4N2QzZmY2MDcsIDB4MjhkMTg2ZmUsIDB4N2QyNTcyY2YsIDB4OTFhZTcxM2UsIDB4ODE4Yjc3ZGYsIDB4YzlkZjc4N2UsCi0JMHhmOTcwZjU1OCwgMHgwY2IyMzM2MiwgMHg1ZmNmNGNkZiwgMHg4ZDdiOTdhMSwgMHhkYTRmN2I4NywgMHhkMzdmOTI1NCwKLQkweDRmM2Q3MGIzLCAweDg0YjEyNWZlLCAweGY3NDIyOGY4LCAweDgzYjlhM2U2LCAweDc4ZGMyMWUzLCAweGUxODBlMzZlLAotCTB4ZjRiMWY5ODMsIDB4NDUyY2RkZjAsIDB4NjZmODZkYzAsIDB4MWU4Njc4ZjIsIDB4YWYyNTczYWUsIDB4ZTFjNzVkYTQsCi0JMHhmNTBiMjliYSwgMHhiNGU5Zjc2MywgMHgwZDdjN2NkOCwgMHhjMzU1MDNhZSwgMHhmODZlMmI5ZiwgMHgwMjlhNzhhNiwKLQkweDhiMGU1NGYwLCAweGMyMmZmYWE3LCAweGYwZDMwMWQzLCAweGMwNGNmY2YwLCAweGYyY2Y2ZmYzLCAweGQ2ODYyZWZiLAotCTB4NmRmYjQzN2YsIDB4MWVmZTFjNjcsIDB4YzUwOWI5ZWIsIDB4MzNmYmMwMzYsIDB4MmZhNzlmYzIsIDB4MDRjMmY2OGQsCi0JMHgwNWNiM2FmZSwgMHhmOTBiOTY3ZCwgMHg4OTVmMjVlMywgMHg0YzlmNWYwNSwgMHgwYTlkNjRmOSwgMHg3MmMxYTk0YiwKLQkweDJhZWY0MmU1LCAweDRhN2Y3YTM1LCAweGZjYTAxMGQwLCAweDc5YmFmNjdjLCAweDQ0NzdmOTU4LCAweDk5MDM4NWM4LAotCTB4Mzg3OGIwZDIsIDB4ZjRmOWU2MjgsIDB4YThiOWI1OGIsIDB4ZDU3ZGVlNjcsIDB4YjQyZTUwY2MsIDB4NWVmZGZiMDgsCi0JMHhlZjA1YTc2NywgMHg4OGYwZDU5ZiwgMHgwNjc4MzJlNSwgMHg1ZWM1OTE0ZCwgMHg2NDdmOTcyYywgMHg4Y2MzZWQ1MSwKLQkweDZkZTNlMDY3LCAweDZkMWJlMzhhLCAweGFiZjllZDNjLCAweDBmYWU2MmFjLCAweGNjNjU2N2E1LCAweGM1NzRkZmRiLAotCTB4ZDQyZjc0MmIsIDB4NjQ4NTcyYTYsIDB4N2ZjNmQ3ZWYsIDB4Y2U1ZTllYmIsIDB4NzY5MmJmNzUsIDB4NWY5N2E3MDMsCi0JMHg0OTM0YmQyMSwgMHgxYjdlMjU2ZiwgMHhmMjI5NDFjYSwgMHhjYmVlMDk3MiwgMHhmZjM0MDI5YiwgMHg0M2IxZTAyMCwKLQkweGVkYTc4YTFhLCAweGY5YjQ1ZTgyLCAweGUwZDdmMzY5LCAweDkwYjk1Yzc2LCAweDlhZjFjMWQ2LCAweDQxYzY5NDk5LAotCTB4MTdkMzVlZDEsIDB4ZTFmZjQyNDksIDB4NWM1ZjQ4YmMsIDB4MGY3M2YwYTEsIDB4ZmJhZDBhMTUsIDB4ZTk1MzI5YTYsCi0JMHhiMTAxY2E1YywgMHhkY2I5MWUyZiwgMHhmODNkZWMzNCwgMHhmNzZmMDI3ZCwgMHgwZjYzZmM1ZSwgMHgyZWExYjVmYSwKLQkweGMwMGJkZDIzLCAweDhkY2Y1ZTk0LCAweDRiZjEyZjc4LCAweDBjMzNkZDBhLCAweGY3OGQ1NGY0LCAweGUyZmQzZDFjLAotCTB4ZjNiNDQ0ZjksIDB4ZjJlMmNjZGUsIDB4MmUyY2NkZWMsIDB4Y2EyZTA3MGYsIDB4ZTQ1ZTc0ZDUsIDB4NzI5YzhmYzUsCi0JMHhjZTlmZmQwYywgMHg0ZDNlYzU5MiwgMHgwMzllMGY0ZiwgMHhmM2M2NThkOSwgMHgxZWMyZWRkZiwgMHg1N2Q4YmZiMCwKLQkweGE3ZGJmMDhmLCAweGM1MmNjNGZjLCAweGIyMWZkYmQwLCAweDQ2ZDcwNGNjLCAweDBiY2QyNDUzLCAweGM5OGYwNWZkLAotCTB4ODJlYzliYWMsIDB4NmRhZmJhNWUsIDB4OTM5YjljZjAsIDB4ZmNhOWExZTMsIDB4OGVmNjg2NTksIDB4ZTNkZjhiYmQsCi0JMHhlNTRiM2E3NiwgMHgzZWUwMTY3MiwgMHhjNjEzZWYwNCwgMHhjM2FjZTQ3ZSwgMHgyZjE4NzJmYSwgMHhjM2JkZmEzZiwKLQkweGExMzNkN2M5LCAweGIyYTNkZjgyLCAweDM4M2Y4YWU5LCAweDI0Yjg5ZWYxLCAweGM3ZmRkMTg5LCAweGVhMzZjODNmLAotCTB4NTdhZGExY2UsIDB4MmNlYzFjYjksIDB4M2I0MWU5ZWYsIDB4Mjg1NGU0MmUsIDB4ZmJiM2E3MmYsIDB4ZmJkYTBiMGUsCi0JMHhmMmY4NWYxYSwgMHg4YWQ3YmNmOCwgMHg0ZWQ3N2NmYiwgMHgzOWUzMGUyOSwgMHhkNzhlOGQxNCwgMHgyMDJlMDc2NCwKLQkweGJlMDQ2ZWRmLCAweGFmZWM5Yzc4LCAweGMyNzRmZjFlLCAweGYzMTRiMzhmLCAweDFlYjAyNzVjLCAweDk1ODZhZmJhLAotCTB4ODdjODljOWIsIDB4OGU4MzA2YzUsIDB4ZTZjOWFlZGYsIDB4NDEzZGEzNzQsIDB4ZjNkZDkzZmQsIDB4OWFiYjQxNjMsCi0JMHgyYzNiOTdkZSwgMHg3ZGI1Y2YwYywgMHgxMjc2NzE3YywgMHhiNjcyYTdkYSwgMHg5ZDc5ZWY2NiwgMHhlZDhmYzc4OCwKLQkweDdjNGVjOTczLCAweDBkZjZiN2ZiLCAweGRhMDc3OWIxLCAweDczZjAyZGYzLCAweGNiNDRjN2JiLCAweDU5ZmViYzhiLAotCTB4MGIzMTdlZDgsIDB4ZTk3NjgzZGMsIDB4Nzc1OTc2ZTIsIDB4YzE2ZGZmZGUsIDB4ZGEyZThiZTcsIDB4OWQ4Yzc3NTgsCi0JMHhmN2NhNjhiZiwgMHhhMmQyYmNlOCwgMHhmZWY0ODk4YiwgMHhmNDlmOTE2ZCwgMHgyYTRiYzhiNiwgMHg4YWYwZjMxNCwKLQkweGRmZDkxNWU3LCAweGM2ZjdmZWQwLCAweGZmNWRjYmM5LCAweDk3MmQ0OGY5LCAweGQwZDk4NTk3LCAweDZiZDRhMzZmLAotCTB4ZTM2YTdmNDIsIDB4YjlkMGJmZDQsIDB4N2ZjMGI3OTEsIDB4ZDE3ZjM2ZWYsIDB4Nzc1ODUzM2MsIDB4ZWQ4M2I4Y2MsCi0JMHg3NzU5NWEyZSwgMHhhOGJhZWM0YSwgMHhiZTc0NzcwNCwgMHg2YjdmYWE3NiwgMHhmMDRiZTdhNSwgMHhjNzg3NGEzOCwKLQkweDNhMDVmZjY4LCAweGJmZWQwZTNjLCAweDVhZGZlYTg4LCAweGZkMjVmYzU5LCAweGZmYTExZjhmLCAweGQxZmMxZDNjLAotCTB4N2RlOTBiN2UsIDB4NDdkYTg5ZmYsIDB4MjcyZmMwNmQsIDB4NzhlZjU3YmEsIDB4OGVlYmYzMGEsIDB4N2NmZWU5OWIsCi0JMHg4YWIzYjg3NiwgMHg5MmZkYWZjZSwgMHgzYmM2YjlkMSwgMHgwNmYyN2Y4ZiwgMHhiOWRkY2RlNiwgMHgzMWM1ZTRjNywKLQkweGY5OTE4YzA2LCAweDQzZjQ2MWRlLCAweGYwODY3MzIxLCAweDc5ZWQyOTFlLCAweGNkMDE3NjQzLCAweDQ1YmRmZTI3LAotCTB4MGYzMTNiMDksIDB4MzhhYzUyY2UsIDB4NTg1OTNmNTEsIDB4ZjEzNTc4NGYsIDB4OTNlNDg1ODMsIDB4ZmFkNzk3MTYsCi0JMHgyNjcyODcxZCwgMHhmNzZhM2U0NiwgMHhmNjJiYmM4NSwgMHgwYjYwZmY4ZCwgMHhjMGFlY2MyYywgMHg4MTU3ZjczMiwKLQkweDljNjIzNzczLCAweGQ5NjFlMWFkLCAweDc0MjFlZmM5LCAweGM1YTIzZjkxLCAweGYzZjQxNWJiLCAweGUzZDQzMDBhLAotCTB4ZTNmZTc4NjcsIDB4NGIwMzcyM2YsIDB4MGU3ZTZlOTEsIDB4ZGZlMzAwZTIsIDB4MDFiZDg0ZjIsIDB4ZmYwYTRmOGEsCi0JMHg4ZjZiM2VlZiwgMHhmNzIzMWJjNywgMHhkZjJiNjQ1NiwgMHg4YjZmZGY0YywgMHg3ZjE1MzdkMywgMHhlYjliYTQ3YSwKLQkweDhmMzgxNTliLCAweDU3ZTdiOTQ2LCAweDhlNzg3OWI1LCAweDFiZGM1N2E5LCAweDViZGQ5MmE1LCAweGVlOTI3ZTViLAotCTB4ZmNkNWFiOTcsIDB4ZmJmMTc1ZjksIDB4YjQyZWQ5ZWMsIDB4N2NmOGI1ODMsIDB4YTEzZmU2MjIsIDB4ZjNjOGRmYmUsCi0JMHhiYzZjZWJlZiwgMHgxNGZiZjc1YywgMHg0Nzg5Y2YzYSwgMHhlZjEwNGE0NSwgMHhkZjk3YjI5ZCwgMHhmYzI0ZTgyYiwKLQkweDBmMzAxNzllLCAweDIwZTYzNjU4LCAweDllMDQwNzdlLCAweDQzM2Q3N2NmLCAweDVmOWUxOGY3LCAweGEwZTg5YTM3LAotCTB4YTUzZjM3ZWUsIDB4NjQwZWM5N2IsIDB4NjNhY2ZjOGEsIDB4NzU0M2QyMGUsIDB4ZGUyNTZmNjYsIDB4OTMyMDc3OTMsCi0JMHg0YTlkOWJkYiwgMHg4YzU5NjI3NywgMHhhYjM2YjlmZCwgMHhmYmViZTQ4YSwgMHhkMDFiNDZlYiwgMHhiYWYwZDczZSwKLQkweDhkODVjODUzLCAweDg5NTAzYzVhLCAweDZkZmRlMjU0LCAweGJmNzc5N2VmLCAweGEwZjA3YTRjLCAweGM2ZTc3ZTk1LAotCTB4NGE5M2U4NzAsIDB4YTM3MTRmYmEsIDB4YWZhNWVlOTksIDB4Y2I3NjM0M2EsIDB4MmM2ZmE4M2MsIDB4YThiZTUwMzIsCi0JMHhlMDk1OTBlMSwgMHhkZjllYjczOSwgMHhhMmRmODRlZiwgMHgzNDNjNmViZSwgMHhhODBmN2U4YSwgMHhiY2ExMTZjZSwKLQkweDZmMDRjNmFlLCAweGQ0OTdlZTExLCAweGRkMTZmYTFkLCAweGJlZTY3ZjI3LCAweDM3MjgzOWIxLCAweDM5YWFhNzRmLAotCTB4N2RlZTdmNzQsIDB4Zjc5ODc0ODAsIDB4Zjg2MzYzZTksIDB4NzRjOWQ2ZmIsIDB4ZDFiMWQyNWUsIDB4YWUyZTE4MTYsCi0JMHhmODkzZTlhMSwgMHg2NDBlYTNmYiwgMHg0NjFmZjY5NiwgMHg3OGI1OGNmYywgMHg5MTc5NDBmNywgMHhiOGIwM2Y3NiwKLQkweGY5ZWVhYzBmLCAweGYzMTUxY2M4LCAweDU1N2Y4NWFjLCAweDMzZWY3ZjY3LCAweGZkYWRmN2JhLCAweDNkMzg1YmNkLAotCTB4Y2QwMjdkZjMsIDB4YjcxZjhiM2YsIDB4MDM5ZGU4NGUsIDB4ZmM3Y2M4YTYsIDB4MzViYWE2N2QsIDB4OWUyNmZmMDIsCi0JMHgyODY3NTY4NywgMHhkMzI3ZGZhNSwgMHhlZTMxYmZmMCwgMHgwNDU3ZDU3ZSwgMHg5OWU3YjVkZSwgMHhiN2JhMTUxNywKLQkweDFjODFlYzBlLCAweDczM2E1N2RjLCAweDc2ZjQ0Y2RjLCAweDNhNzhlMzY2LCAweDU3OGRhZDJmLCAweDAyNzFiODA3LAotCTB4NTY0ZTllOWYsIDB4ZmVmYWUyMjcsIDB4YmFhZmM4NTksIDB4ZDRlZmRjMzUsIDB4MzYxOWQ3ZGUsIDB4NDc3YWUzNTcsCi0JMHg2Zjk0Yzk4ZSwgMHgyNDhjZTAzMywgMHhkNjg4N2VlMiwgMHhjZTBmMmI0ZSwgMHhkZmE2NGJhNywgMHhmOTkwM2ExOSwKLQkweGQwM2JhZDM0LCAweDMyYmE0MzE1LCAweGZhNDFjNmZjLCAweGZlMWJmODM2LCAweDk3ZWY0NTdiLCAweGY1MGQ5MGIzLAotCTB4ZjI2NmFiZjQsIDB4MzMxYzRlZDMsIDB4ZjAzYzFkOTMsIDB4M2I3NzNmMWEsIDB4N2IyZjFlZTQsIDB4YWRlZjA3MjQsCi0JMHgxNDY2ZmUwYywgMHhlYzgxYjVjOSwgMHgzNzZlNmVjOCwgMHhiOGRlZTk1YiwgMHhjOTgxNTM4MSwgMHg0MzJjZmY2MiwKLQkweDgxOTc4YmRjLCAweDYzODVkYWY2LCAweGQ3YjQ2ZWQ2LCAweDIwZmI0OWUwLCAweDQzZDdiNjIxLCAweGU4ZGI4ZmVmLAotCTB4ZDI3ODBmZmUsIDB4MWQyNjA5MzksIDB4OWNlZmQwZjQsIDB4N2RmMTM2YjAsIDB4Njc3ZjdkMGYsIDB4Y2EwYzYwNGUsCi0JMHhhMDBiM2JlOSwgMHhkZjdlM2I3ZiwgMHhlNDJlZWQ0NywgMHgxOTYxMjYwNywgMHg3OGM1MzJmZSwgMHg3NjZmZDQ5OSwKLQkweDRiZGU5NzIwLCAweGVmZjg3OTFmLCAweGZhODliNDdiLCAweDlhMGZhYTFlLCAweDFlNjk5MzAzLCAweDhlYjA3NjdmLAotCTB4NGRmOWU2NjEsIDB4MmY3YjdmZWYsIDB4OWJlNDg1M2IsIDB4OTllMDM3MDYsIDB4YmM3OGJmZWMsIDB4ZTIwYzcyNzgsCi0JMHgzZTM4NWRmNywgMHg3MDcyZTllMiwgMHgzZTA0YmYzZCwgMHg1ZjkwYTc4YywgMHg3MWQ3YzVkMiwgMHg5NzEzNThmZCwKLQkweGM5ZTNhZDI3LCAweDQzMWJhNWNlLCAweDU2OWFmMjYyLCAweGU4OWI3YjFkLCAweGRiZThjMDcyLCAweDcyMjk3YThhLAotCTB4YmRmOGM4Y2EsIDB4NjAxOTYwNmEsIDB4NmYwYTYxOWMsIDB4ZmNlMzY3NTcsIDB4OWVmMWMxYTQsIDB4Njg2ZTZmYzgsCi0JMHhlZjRmNzllNSwgMHg5Y2VkZTJmZCwgMHgyNzNjNzYwNSwgMHg5Y2VlYjZmYiwgMHg4M2Y3MTZhYywgMHhhZTMxMTI0ZSwKLQkweDg5YWFmNzYyLCAweGRlZGMyNWI1LCAweGZlMmUwOTk2LCAweDhkMWI0ZGZiLCAweDU1NGVmZDJhLCAweDE0YjFiZWU4LAotCTB4NTI2MzM4NGYsIDB4OGViZGQxMGYsIDB4OTAxODI3ZWIsIDB4NWNiZDVhOWUsIDB4ZjhkYTg0ZjYsIDB4OWFmYmI0YmMsCi0JMHhlMjk3N2JiNCwgMHg5Y2RkZjJmMSwgMHgzOGJiZmUwMiwgMHhkZTJiNzAyYywgMHhhOTlhN2RkOSwgMHg4ZGIzNjI2OSwKLQkweGM3YWI5ZmVlLCAweGViY2EwMTdmLCAweDJiM2UwZDBiLCAweGJkMjViZmNmLCAweDM3OWVmNDMwLCAweDhlZmM5N2QzLAotCTB4Zjk2ZGZmZDUsIDB4ZTY4Y2I5MDcsIDB4MjUwZGVhZDksIDB4Yzc3ZDVlYTIsIDB4NTgzZWZkYzksIDB4YmJmNDk1M2QsCi0JMHg3NzQ5ZTdjYywgMHhiZWEwNjZlOCwgMHg5MzlhZGZmNiwgMHgwNzI0ZjU0YSwgMHg3ZDc4OTFkZiwgMHhmMjY5OWQzYywKLQkweDkwM2UwODZlLCAweGZjNWZiMDZlLCAweDNkYmVmYTBlLCAweDQ4ZDVjNzg3LCAweDc5YmRlMDU4LCAweDdiYTI2NDJjLAotCTB4MGFiZTg0NjEsIDB4Y2YwMThhNGEsIDB4ZDRiOWY3NzUsIDB4YmVjYmE0NDQsIDB4NTVlNDgyZDYsIDB4NTJlMGE3OTgsCi0JMHhlODYyY2FkMywgMHhhMzJjZjgyNCwgMHg5ZTJhY2NmMywgMHhiZjhjOTg0ZiwgMHg4ODliZTI3MywgMHhjOTAzYmNmMSwKLQkweDNjNDIzOGZhLCAweGViNGY4ZjNjLCAweGZmNWIxZjlkLCAweDc3MmUxY2QzLCAweDFmYjg3MzViLCAweDI2MWNlYmY4LAotCTB4M2M3OGZlZWMsIDB4MjI1ODNhNzIsIDB4MWJkNWEwZTgsIDB4Y2FmYzhhYjgsIDB4YjY0Yjc2YjgsIDB4ODhmYTA5MjUsCi0JMHhkNGY2ZGY3YiwgMHhjYWJlNTMzZiwgMHg4NWJkZmQ0ZSwgMHhkZTNkNjIzNSwgMHg5MjE0ZGU3OSwgMHg4MTMzZTEyNiwKLQkweDM3ZWI4ZGYyLCAweGZmNTc3OTczLCAweDVkZDE0ZDQyLCAweGZjZTc0Y2JjLCAweDRkZGM3NWE3LCAweDcwYjMwZmJmLAotCTB4YzYyMmNjY2YsIDB4OGJhZDE3ZTUsIDB4NzMwYjlmNDYsIDB4ZGY2ODQ1N2MsIDB4NGVjYmI2NDUsIDB4NmRmYTkzZTQsCi0JMHhhYWQzYzEzMiwgMHhjM2I2NTliNCwgMHg4Y2RiYjNmYiwgMHgwYmQ1Zjc2NCwgMHgwNTY2Y2U3OCwgMHgxNGRkNjkxMiwKLQkweGVmMDA5OGE2LCAweDIyNDA5NTY3LCAweGM1ZGJiNWQ5LCAweGNkYzRlMGVmLCAweGEyYmRkYTAzLCAweDFmODMwZDk0LAotCTB4YzI2NzVmMGIsIDB4NzQzMGMxNGYsIDB4ZWI0MGNhNzAsIDB4ODk4MTMwYjQsIDB4ZTg5MzQ3ZGYsIDB4ZWNkOWM3OWMsCi0JMHhlZTU4YWRjMCwgMHhlZTllN2YwMywgMHhhMDZiNmU5ZiwgMHhmMWUyNTU3YiwgMHgyMDEyZDY3ZCwgMHhlNjIyNWQ3YSwKLQkweDdlMzNlMWEzLCAweDAzOWYwZDFjLCAweDlmYjQ0Zjg4LCAweGZhNDFkZjllLCAweDhjYTBmODJmLCAweGVlOWVjYzE0LAotCTB4ZWNmYzkwZmEsIDB4YmU2NmM3NjksIDB4YmY3YzJkZjEsIDB4MTUxOGVjMTksIDB4Y2JmZTZkZjUsIDB4MDc3ZDQ3ZGYsCi0JMHg5OGVkMGE3MiwgMHg2OTA1NjNkYSwgMHhhMzZmNGUyYywgMHhkMmZiNTkzZiwgMHg4YzQzNDRkYywgMHg5NzZkNmNiZSwKLQkweGI1YTU5ZjY5LCAweDIyZTI0ZTcwLCAweDA2ZmU3ZjZhLCAweGFhZDNhZmE0LCAweGE2MmNhZDM3LCAweDlhMzkyYmRkLAotCTB4YWY1ZmE5M2YsIDB4NGQ3ZmNkYmEsIDB4MzdlYTcxYzQsIDB4ZGE1ZTY5MTgsIDB4NGMwMDBjYmEsIDB4NmNkYjg3MjQsCi0JMHg4MWZmYTQ2MSwgMHhhYmY1MDhhYywgMHg3ZDIwZDNhZCwgMHhmNDY4M2FlMywgMHhjZDNlZWQwNCwgMHg3ODcxOGE3MSwKLQkweDJmMmZiNmJjLCAweDg2MWRlOTUwLCAweDAwM2YxNjRlLCAweGRiN2Y2MmUzLCAweGU2OWY3NDFjLCAweGUxYWI4ZWE1LAotCTB4MDViZDcwNjMsIDB4ZDcxOTUzNWYsIDB4YzUxZTc3NzEsIDB4MTRhNzBkYzcsIDB4ZGQzZjA2NGEsIDB4ZjIwZTRkNzYsCi0JMHgwN2Q4MWQ3MSwgMHg5M2E4ODcxOCwgMHhiZGQwNmYyMiwgMHg3NGNjYzdhNiwgMHhlNmRkNmZlZiwgMHg3OGUyYjdhNSwKLQkweDBkOTlhZjc1LCAweGZjNzdkZjU4LCAweDU3MDQ4OTlhLCAweDllMDJiYWRjLCAweGY3YTM4NjcyLCAweDhlNDhiYzgxLAotCTB4NjA3ZjA2MzcsIDB4NmI3ZjEwNTcsIDB4OWI4MTg5ZjMsIDB4OGIzZjAwZTAsIDB4YzgxOWM1ZWUsIDB4OTE4Y2Y1ODMsCi0JMHhlMWNkN2YwMywgMHhlZjY4MWFmMSwgMHhmMzdkMTEzNCwgMHhlNzA2OTk3YiwgMHhhZjliOGNlYiwgMHhhZmJlNmUzMywKLQkweGU2NmZhMjMwLCAweDE2N2NkMDBkLCAweGUwMzY2ZWJlLCAweDVmZjc4NWZiLCAweGI3NzE4NDVmLCAweDY5ZDNmNWJlLAotCTB4YmVjOTdkNWUsIDB4N2Q1ZmM4ODksIDB4MzBmZmQwMzksIDB4ZmRlMTcyZjIsIDB4MmY5MmNmMzAsIDB4OTU5YjY3OTgsCi0JMHg3OWM0NmJkNiwgMHhiMzc2NDcyNiwgMHgyN2E3OTgyZiwgMHhiN2NmM2Y1NywgMHg3ZTkxMzUxNCwgMHhjYzg4ZTM0ZiwKLQkweGNjMTI4ZTMwLCAweDE2ZmM2ZmY2LCAweDk3ZWZkMzJmLCAweDFlOWM4ZDA1LCAweDc0NmQ5YjgyLCAweDhiYmZhYTJlLAotCTB4YzlhZjhmZGYsIDB4MTJlZjE4MDEsIDB4ZjQ0MGMxZTksIDB4NmVhNTU3ZDAsIDB4NzVmNDgyOTksIDB4ZmRjNGVjOWYsCi0JMHg5N2Y1YmU4YSwgMHgyZmJmOGNiZCwgMHg3NjUxYjdkNywgMHg1N2QwZGRhMiwgMHhmMjA3ZjFjNSwgMHg1Zjc4ZjQ4MCwKLQkweDJhMDZmZjhlLCAweGVmZDIzNzFmLCAweGZiNjk5ZGE0LCAweDNlZTg5ZmViLCAweGZhNDY2MzgyLCAweDNjODFlMjNkLAotCTB4NTg3OWM2ZmYsIDB4YWU1MTc4MDYsIDB4ZTI2ZTVlMDEsIDB4ZTY5MWFiNzYsIDB4YzFlZWJhZGYsIDB4ZGExZjU4NzUsCi0JMHg2ZmNlODkzNiwgMHg3YWQ3ZDUwYywgMHg5MDZmZDczYywgMHgxNGM4N2M3NSwgMHhkZTBiYzY5NSwgMHgxN2VlOGEzZiwKLQkweDEyMGNmMGQxLCAweDIzZmQwOGI2LCAweDllNTgxZjBkLCAweDk3OGEyMTNiLCAweDhmN2YzOGEwLCAweDhmYmYwMjc2LAotCTB4YzQzM2M4NGIsIDB4MTNkNzNlNGYsIDB4ZTUwNThlNzgsIDB4MTlhNzllMTgsIDB4Y2JjNTVmNDksIDB4N2JiZDc4OWYsCi0JMHg0ZmI2YWU2MywgMHgwZGM3OTdhOSwgMHg3OWFmYmY3MSwgMHg2OTc5NWM1YiwgMHgxNjU4ZGM5YywgMHg1NzE4ZGY1NywKLQkweDg2ZjlmYTBmLCAweGNmZDJlMmUxLCAweGEyY2Y4ZTBjLCAweDFhMjE5MjdlLCAweDRmYjgxZDFmLCAweDU2YjRiZjIyLAotCTB4MDdlODRkNTEsIDB4ZWI4ZDNlM2QsIDB4NTk4NTNhZTcsIDB4ZTRiZTIyYWUsIDB4MTU2YTczZTcsIDB4YzMyZTYyZDYsCi0JMHhhYzUzNWVmNywgMHhiNWZkMDRiZiwgMHg5Y2ExOTM5OCwgMHhiNDEwZTVjMCwgMHg5NGM1MzZhYiwgMHhjMWFiNzkzNSwKLQkweGEzYzA0YWIzLCAweDljNzZiZjNkLCAweDdkYzQ2NmEwLCAweDE1Yjk1NThjLCAweGNhMzFmNzQzLCAweGJmNWZmY2U0LAotCTB4MTFkNjdlODgsIDB4ZTBjY2ZjOTksIDB4YjBmZjVjMGIsIDB4ZjJkYzNmNGYsIDB4M2JlZjFiOTgsIDB4MzIzY2EwMmUsCi0JMHg3OGYxZmU2ZCwgMHg2MWZjMzgxYywgMHhlNGRlZmQyMiwgMHg1ZjNhMjZmMywgMHg1Mjk1ZGI1ZSwgMHg3MjU4N2U0NSwKLQkweDZmYmM1ODY0LCAweDQ0ZmFlNWNkLCAweGU5NWZhZmViLCAweDZiMWQ5YzRkLCAweGM0ZGViMzQ3LCAweGFkZjdkZmQ4LAotCTB4NGFlMWZjM2QsIDB4N2YwMTZiZjQsIDB4OGU0NjM5MjEsIDB4NWE5NjM5OWYsIDB4ZGQ2NWZlODUsIDB4ZjBhYjMyZWYsCi0JMHg1Y2QxZWZiYywgMHgzZWEwMGUyZCwgMHhlNmY5MDFiYywgMHgxM2UyOTk4OCwgMHgzM2NjMmZmZCwgMHgyZmZkZjdlMCwKLQkweDlkZTc4YmQ0LCAweGZmNjA5Zjc0LCAweDcwNzI2NzViLCAweGZlODM0NGZjLCAweGNmN2Y4OWJlLCAweDlkNTRmNmU1LAotCTB4NTdkZGNkZTEsIDB4OWEzZmZjYTIsIDB4MjYyNmI3OWUsIDB4Mjg2NzVkMGUsIDB4MzFmOGJmMjMsIDB4YzIzZTY0NjMsCi0JMHgzYWZmNzYwZCwgMHhmYWQ1MDNjYywgMHgxMmFiOWEzOSwgMHhkZTQ3ZmQxYywgMHhlMWYyOGRkZSwgMHgzMmVjYzZjYywKLQkweDQ3ZmQyYjE0LCAweGRjMWY5MGM2LCAweDQ1NjVkYWZmLCAweGZmNmI1Zjc4LCAweDk0NWUxOTdkLCAweGQ1MTk4ZjBiLAotCTB4ZTJkZmI5M2IsIDB4OGJjOWVlZjAsIDB4ZTBlMzg3ZjYsIDB4OTFmZjYzZmUsIDB4M2YxODk1YzksIDB4YzM4ZDdmZTgsCi0JMHgyNzhhNjUwYiwgMHhlNjEwYmI0MCwgMHgyNmZkNmE1ZiwgMHg5ODRkZDQxYSwgMHg2NzdlY2U4ZiwgMHg4ZWUyYmYyNCwKLQkweGYxZDIwYWNmLCAweGQzNDQ5NTdlLCAweGEwNTBmN2YwLCAweGMzY2ZhMTFmLCAweGQ2ZjM0ZDVlLCAweGZkZTM3ZGYyLAotCTB4MzdmZjJkMGMsIDB4ZWVkMzBmZGUsIDB4MTdmNzhmOGIsIDB4M2RkYjU5ZWIsIDB4ZWYxYzk3OTgsIDB4NmU2MTgyMzcsCi0JMHhkZjg5YTUwOSwgMHg0ZWJmYTczMywgMHhmNzRiZjdkMiwgMHhkZmQ2NmU3ZiwgMHhmNjEyMWQ5ZiwgMHg3MWU0ODU4MCwKLQkweDdhZTNmMDJkLCAweDc5ODUzZjhhLCAweDNjOWQ2ZmRjLCAweGM1ZWM3ZWVjLCAweDZmYTc2ZTVjLCAweDdlNmRmZGI1LAotCTB4OWViYWNjNmYsIDB4MDNjNTMwMzYsIDB4NjI2ZDNkNzgsIDB4NzBkOTRmMTYsIDB4OWM4NWUzZmUsIDB4YzM3YjkyNWEsCi0JMHhiMTc1OGRmYiwgMHhhMWIxZDZmNywgMHhhYWU5ZTQ3ZSwgMHg5ZGY5ZTUzMCwgMHhlZmQzMmY1ZSwgMHhmNWMzYzQ1OSwKLQkweGY4YzhmZDU1LCAweGViZGZiNWVmLCAweGM0ZWQwNGY4LCAweDAwOTM4YzU0LCAweGU0NWZjOWE0LCAweGQ1ZTFlYjNmLAotCTB4YmYxNTY5ZjAsIDB4MDFmZmYyYTMsIDB4OTQ5MTEzZGQsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsCi0JMHg3ZGI1ZmYwMCwgMHhjNTU0N2MwYiwgMHhiZGRjZjhkNSwgMHhjMzc2NGNmYiwgMHgwODNjODQyNiwgMHg4MTNiY2Q4NCwKLQkweDQ0OTAyYzI0LCAweDhmMmVkNGFjLCAweDAzMTBmMGM0LCAweDU4NTA4MjJhLCAweDg5ZGU0MDIwLCAweGM1YjBmZDYwLAotCTB4NDA4MDIxNjYsIDB4MTUxYTg2ZDEsIDB4MjYwZGRhMmIsIDB4MjJlYzEyMDgsIDB4NzYwZDEyMDEsIDB4NGE4ODg5NDEsCi0JMHhhZGI0NTUwMywgMHgyMDJhMjVmMiwgMHhkNDEwOTIwNCwgMHhlYjZiZmU4ZiwgMHg3MzMzOWNmZiwgMHhkMDgyMGZiMywKLQkweGNmZThmYmY2LCAweDk5ZGVlNjRlLCAweDdkZTczM2I5LCAweGZkOTk5Y2NlLCAweGY3Zjg3YmZlLCAweDE3YmVjNjEzLAotCTB4NjJhMmQ5YTUsIDB4Yzk2MzEwNmMsIDB4MmQ5OTkwZmYsIDB4NDNiMmIxOTQsIDB4ODkxYWU3MWEsIDB4YWZkYWMwYjEsCi0JMHhmNTBiOTk5ZiwgMHgzOThkMTZlZSwgMHhmOTU4YzJjNiwgMHg2NzI2ZDkyMSwgMHg2NTlhYzYzMCwgMHgzZTBjNDI2NywKLQkweDA4YTgyMmZmLCAweDhmMzc5N2RlLCAweDMzY2NjYjMxLCAweDljYjM3OTVlLCAweGFjNjU0Y2U3LCAweGQ4NmFlOWFiLAotCTB4NjcxYTU0ZTIsIDB4ZmQ4OGM1YmEsIDB4YTFkYWI2OWYsIDB4YzJhY2M4MzQsIDB4NTdiNGY0NjUsIDB4NGM4YjU4Y2EsCi0JMHg2OWRlMjhmMywgMHg5OTMyZmVhOCwgMHhlMWVmYmZkMSwgMHhiMDU3NTJiZiwgMHgyOWJjYmQ0ZiwgMHhiZDRiZmFiMiwKLQkweDdmOGM1ZWE3LCAweDM2N2ZjMjQ0LCAweDhjNTk2N2E2LCAweGVjNTdmMDk1LCAweDYxODdlYTcyLCAweDVkZGU2MDUzLAotCTB4MTkxMmU3YjUsIDB4YjJhOGQxMmMsIDB4YTEzMjVhYzcsIDB4MTY5ZGY4OWUsIDB4NjdiNThjZWIsIDB4N2U2ODk5ZTUsCi0JMHg2Nzk4MTY0MSwgMHgyMGRiZjNiNywgMHhiN2QyZjMwNiwgMHhiZjljMzZjOCwgMHgyYzMyZmNmZiwgMHhmZjMyYzY1YSwKLQkweGMyZTVmOTgzLCAweGYzM2NjMmZjLCAweDU4NjRmOTgzLCAweDU5ZTY3OTA2LCAweGIyZDFlOTY2LCAweDNlODc5ODU4LAotCTB4YzQ4ZDlkMjgsIDB4YTM2OWI2MTYsIDB4ZmMyMmZkYTAsIDB4NmEyZmRlMTMsIDB4MDU4ZDNjNTksIDB4NzlhOTM2MzEsCi0JMHhlMDAzMWFjOSwgMHhiMjVhYmJhMSwgMHg3ZTc5ZTBlYSwgMHhmMDBkYzAwYiwgMHg3NjRkYmY5MCwgMHg5MzJmMDA1YSwKLQkweDMxMWQ1NjkyLCAweGQzZjE3ZDQwLCAweGU2YmExZWYwLCAweGNmNGVlM2M4LCAweDllY2JmNjg2LCAweGI4N2VhOTkwLAotCTB4MWFkMzkxZjYsIDB4MGQzNmViYzQsIDB4MDMxZTIxZDMsIDB4ZWY4YmI2ODIsIDB4YTE1ZjljMzEsIDB4Y2I2MTVmOTgsCi0JMHg3YzEyMGJkNCwgMHhkOTIxZDk2ZiwgMHhmNWZlYzZlYSwgMHg1ZjNlMmIyNiwgMHg3OWYzNDFiYywgMHg5NmZhZDdiYiwKLQkweGRlMzAxZmUwLCAweGQzOTJhZDkyLCAweGE5MmRlMzBkLCAweDk1ZGY3ZGY2LCAweDM4YjJkMGU5LCAweGVmZDViZmU4LAotCTB4OTlmYWVkNzksIDB4NTRiMTQyNDcsIDB4NTFkNjA5MzMsIDB4OGY3ZGY0ZTgsIDB4Zjk4NmRlZmYsIDB4NzdiZjhiOTQsCi0JMHg4YzFlNmMyNiwgMHgzMDMyZTlmOCwgMHg2MWY4MDZkNiwgMHg4NjMwZjZlYSwgMHgxYTNkYmJhNSwgMHg3Y2Q1ZDhmMSwKLQkweDU4ZjExYTM2LCAweDI0ZmZmYWZlLCAweGE3ZjA3ZWIyLCAweDE0YzVhYzk0LCAweGUwMTAyZTdhLCAweGY3ZDg5MTY5LAotCTB4YWJmYmE0MmEsIDB4NjlmYWYzZDMsIDB4ZTcwODdhM2YsIDB4YzcxYTlkOGIsIDB4M2ZiYzJiNjAsIDB4NzQ2ZGZiNTIsCi0JMHhiMzQ5ZDIzYiwgMHgxZmI5OTg3ZCwgMHg5ZjFiZWRmYSwgMHgwOGFhMGMzOSwgMHg4NjA2ZGQyYywgMHgzY2NiODY2NSwKLQkweDRkZTRmOTA1LCAweGQyMTM3OThkLCAweDMzZjVmNmM3LCAweGYwZGQ0M2I3LCAweDAwNjYwNjg2LCAweGYxMjMwNGY1LAotCTB4MTJjN2YyMGIsIDB4M2UxNTcxYWYsIDB4ZDliMTI5ZDksIDB4OTk0MjY2NTQsIDB4Njg5MmYzOGEsIDB4OTMwZmRmNWUsCi0JMHgxZTc3MWU4OCwgMHhkMDllOWRlZSwgMHg2OTg2N2NkZiwgMHgyMWU4ZGRhOCwgMHgzNDdkZGE4YywgMHhkMjM1NmYyYywKLQkweDExY2E4MDViLCAweDM2NjBmODg0LCAweGUwMTQyNTliLCAweGFhZmEwOTJiLCAweGUxMjE1OTVhLCAweDRkNTYwOGYzLAotCTB4YTJlNjEwZTUsIDB4ZWNjNjA1ZjIsIDB4YWNjZjZjNDYsIDB4NjMzMzg0NjYsIDB4N2UxMTgzNDMsIDB4NWViNGYzYzQsCi0JMHhlNmU5MGFiYiwgMHg5Yjc3MDI2NywgMHg4ZTBmNGUyNCwgMHg4N2FjZTY2MCwgMHgzZDVhZTViZiwgMHhhNjMwMDc5MywKLQkweGQ4NDFlZDY1LCAweGYzMzY5NGM5LCAweGJkZTBjM2Q3LCAweDI1NTk0M2U2LCAweDQzYzhiZDAxLCAweGNkNWE3YzE1LAotCTB4OGM2ZmRmODgsIDB4YzZmMDBkZjcsIDB4MTdmN2UxZGYsIDB4YTU3OGUyZTUsIDB4ODNhNjY1ZmIsIDB4NmEzNzJlZjEsCi0JMHhlZDg4ZGI5OCwgMHg5ZGEwNWY4MSwgMHhiNWFmZmRlNiwgMHg1YTk3MjgzMSwgMHhlYjAwOTYyNCwgMHgzZTNhODcyOCwKLQkweGI2YTcxZjJmLCAweDUyZTBiZDM5LCAweDc4ZjBlMTZmLCAweGYwNDg5MmRhLCAweDhlZGI1MmU4LCAweDMzZmE0MzRkLAotCTB4MmMzYWQyMmYsIDB4MmU3ZTRlMzgsIDB4MTEzNDcxODMsIDB4YWYzOGI0OGIsIDB4ZDA0ZmVmYzMsIDB4ODJkZTIwYzcsCi0JMHhlYjM3YzRkNSwgMHhiNmVmOTQ1YiwgMHg2NGZjNzE5OSwgMHg3OGYzMjlkNSwgMHhhOTkzZGY3OCwgMHhmMWUxZGI2NiwKLQkweGNkYzZhM2Y5LCAweGY3Y2E0N2M4LCAweDNmMWMyY2JhLCAweDEyODEyYjY3LCAweDk3Y2YzYzkyLCAweDgzOTdkYzY0LAotCTB4ZmIzMjk3ZmQsIDB4YTVhM2E0N2EsIDB4N2I3MzMyMzUsIDB4MGQ3OWZkZDEsIDB4NmI5MmY3YzcsIDB4YzYzZGNjODEsCi0JMHg0Y2M0NWZhYiwgMHg2YjkyZDc1YSwgMHhiY2ZjZjQ0MSwgMHg2ZjNiYjc4MSwgMHg5ZWYxNzRlMiwgMHhjN2M1ZDM4NSwKLQkweDg4NWZiYmUyLCAweGFmMmRiZmZhLCAweGVhZjJiZWFjLCAweGVmMWYwYmYyLCAweGQ2ZTVjNDU4LCAweGE1NDc0ODdiLAotCTB4NDRjZTdiNTIsIDB4ODhmYWM0ZjgsIDB4ZjVjYTJkNWUsIDB4ZTY2Njk1YjMsIDB4M2FkMGZkZDYsIDB4ZDdiNzMyMDcsCi0JMHg1ZGRhZmI3NywgMHg0MGY3MzAzMywgMHg2ODU5Yjg2ZiwgMHgxYWY1OWVmZSwgMHhjYWQ5ZmRlOSwgMHgzMWMwOWI4OCwKLQkweDllOGUwN2NhLCAweGUwN2NlM2YxLCAweDg5ZjhmZDc4LCAweDY1NmNmZWY0LCAweDFmYzY0ZGYyLCAweDYzZjE4MzcxLAotCTB4MTllZmU2N2MsIDB4YWY5ZTllMzcsIDB4MjBiMTU1NGQsIDB4OWZiNWFiYTAsIDB4NmNjNDljZTgsIDB4NzRhN2FlN2EsCi0JMHhiYWQ2ZWY4MiwgMHhmZDJkZTkyNywgMHg0ZDgzYWZmMCwgMHhlMTYzNjI4YSwgMHg4YjljYTM3ZCwgMHhiY2Q5N2M3NCwKLQkweGFlN2M4Y2M4LCAweDc0YjkwNjA5LCAweGQ4ZDdmNDFiLCAweDcxODBlZjcyLCAweDAzMjFjMTc1LCAweDVhYWY3ZTkxLAotCTB4ZGY1ZDY4ZTIsIDB4MWQxMDU3MDYsIDB4YjQ3NDNiN2YsIDB4OGZjMTg4ZWMsIDB4N2Q2MWU0NTQsIDB4OTk3YzkwZWQsCi0JMHg1OWZhYjM3OCwgMHg3YWU1ZjM5MiwgMHgyMWQzN2RmZSwgMHg5ZmU0NGE2MCwgMHhhZjQyZjVkYiwgMHgxOGJjYzlmZiwKLQkweGQ0MzU1M2JlLCAweGY0Yzk4ZmFlLCAweGY5OTRjN2NjLCAweGIzM2M0MzM2LCAweDk0MzBmYjI2LCAweDgxOWI4ZjAzLAotCTB4ODAxZjg5NmYsIDB4NWFiZDYxYWYsIDB4M2JiYmZlYzksIDB4OWZkODFmODAsIDB4OGExZWFjNzUsIDB4MjRmNjBkNmYsCi0JMHg0NzFmMTdiMywgMHgwOWZkNzBjNCwgMHg3Mjg1MTBkYywgMHhhODZhYzFkMSwgMHg0YWJhNmYyYywgMHhmZjAwYjY3MCwKLQkweGY3OTRiYWUyLCAweGUwODdhY2U1LCAweGMyY2Q3YzhlLCAweDE2ZDUyNjkxLCAweDRmNjRkZjdhLCAweGNjZjM0YmNhLAotCTB4NzhlZWNmYTMsIDB4MDE1MGU4YzcsIDB4ZmQwZWU5ZmYsIDB4ZDllMTA4MjMsIDB4NmU5OWVlYWQsIDB4MjJkNWQyODUsCi0JMHg3N2MzN2EwNywgMHg4ZmU3MGM2NCwgMHg0ZWJmNDMwOSwgMHg2NWU3ODc2ZiwgMHhkM2U0MGZkOCwgMHgyNzE2NmYyMywKLQkweGQzMjlmY2ExLCAweGJjZTNhNGY1LCAweGY3ZjliYzhmLCAweGRmZjc5NDc0LCAweDg2MWUyYTFlLCAweDdiNDI3N2NmLAotCTB4M2RiNDEzYjIsIDB4ZjFhZjU2NjUsIDB4YTFkOTk5ZTIsIDB4OTMyOWViMWEsIDB4ZWY4OGUyNjMsIDB4M2NlZjlmZmMsCi0JMHhlNzE4MzU1NCwgMHg4ODYyMDBkMSwgMHg1Njc3YzA4NSwgMHhlNWY3MTdiZSwgMHhkYjA3MjQ0MCwgMHgxODY3Mjg1MywKLQkweDBiN2E5N2M4LCAweGNhZjc0ZGRhLCAweDNlY2E1NzI4LCAweGVhMDRkYjAyLCAweGJmNWNjZDE5LCAweDRlNjUwYzY3LAotCTB4NjdkYTBjNTUsIDB4N2M0NmNkMWYsIDB4Y2Q2YTY1OTUsIDB4YzA0YTU4MmEsIDB4MWFlNzM2YTgsIDB4YTk5MDFmNzgsCi0JMHgxZDFlYTMzNywgMHg1ZjdmODQzZSwgMHgwZTNjZmE4YiwgMHg0NDBmNjdmYiwgMHhlNDE0ZmRiYywgMHgwZjI0N2ZlYywKLQkweDJiZWNmY2VhLCAweDA2YjJhOWY3LCAweGRjYTk1ZWY4LCAweDAwZTUxZDNlLCAweDMxZTk4NWM4LCAweDA3ZDk3ZTMwLAotCTB4YjU0ODlmNWYsIDB4MzA5ZThiNjAsIDB4ZDBiNzRmYzQsIDB4ZTMxMjdmM2YsIDB4Mzc5MzFhM2MsIDB4ZmJhYWU5MTMsCi0JMHhlM2Q3NzdmZSwgMHhiYjI0MzdhMywgMHg4OGUzZDcxZCwgMHg1ZjUxNWJkNCwgMHhlYzY3MDhiMCwgMHhjZWJjMmY0YywKLQkweGJhMDk1MThkLCAweGJhMDFlZTAxLCAweGI2ZTYyZTFkLCAweDc5NmJiMDY3LCAweDY3MjVlOTMwLCAweGI5NDNkMjA4LAotCTB4MWU1MWQ5OGEsIDB4ZDQwMDY5YjIsIDB4ZjMyZTkxZGIsIDB4ZjVhNjY2ZDIsIDB4ZDBkNzlmYTcsIDB4NmM2MmNiNzgsCi0JMHg0YWJlNzA4YiwgMHhjZDY2OGZmYiwgMHhjM2Y3YjM0ZCwgMHgwNGE5NDg4NywgMHgyMWViYWQ0ZiwgMHhhOTRmNjc5YywKLQkweGYwMWRiYWQxLCAweDgyYmUyMWYwLCAweGQyY2QyZjdlLCAweDkzYjA2NWI5LCAweDBkYzYzNWJhLCAweDI3ZDFkMDEyLAotCTB4MDc1YmYzODEsIDB4MTg0ZmZhYzEsIDB4Y2ViODE1ZWQsIDB4NWU0YzBmZDksIDB4YzhlOTc1OGYsIDB4YTQ3MmNiNDAsCi0JMHg1OWVkODVjYiwgMHgwNjM5OTc4OCwgMHhiZWY4YzNmYiwgMHgxNjFmNmY0NCwgMHgzY2JjNGIwNiwgMHgwMDM0OWVkNCwKLQkweDQwZGU2YTk1LCAweDk3OTY2ZjBlLCAweGZjZWZkNzk2LCAweDc1M2M3Y2Y5LCAweDU0YjdmYTQ2LCAweDMxYjdhNWMwLAotCTB4NDlkOTAwNmUsIDB4Njc0ODBkYWYsIDB4MTUyZTlmMzAsIDB4ZDBmZDQwMmIsIDB4MTVmYmU2MjUsIDB4MjVlNjIzZTgsCi0JMHgyNzljMGJhNywgMHg3ZGExMGJiNSwgMHhlZDQ5ZGQ2MSwgMHg5N2Y1YWYyMiwgMHhlYWUwODU4MiwgMHgzYTdhMmVjNywKLQkweDE3NDVkYjg2LCAweGRiZmVmZGY3LCAweDlkNTBjMDVmLCAweDQ0NDgxY2RmLCAweGJhNThiNWJiLCAweDc2ZmFlYjQ0LAotCTB4NjJmOWM5ZDcsIDB4YmViOGQ1N2QsIDB4YTI3YjdhNDcsIDB4MTJhZWIwYjUsIDB4OTcyZDYxZDcsIDB4ZWE3ZDYyMWYsCi0JMHg1YTFmYzQ5ZSwgMHgyZGFhOTc1ZiwgMHg4MGUyZTg4NywgMHhmMThmYWU2NCwgMHgzYzZkMmJmNCwgMHhmNDA1MTM5OSwKLQkweDNjMTc1MDVlLCAweDk2NzRlNjVhLCAweGU4NTY3NDg4LCAweGQxNzg4Zjg0LCAweDAyOGUzMmIxLCAweGRlNDJlNTlmLAotCTB4ZjAxNGFlZjUsIDB4YjY3NmUwMDksIDB4ZmJlNTFmMDIsIDB4MzNlMGZjNjcsIDB4OGQ5M2RkNWYsIDB4MmFiZjk4ZjMsCi0JMHhhOWU1YzU1OCwgMHg3OTQ3ZTg5MywgMHhlZmE1NjBiZiwgMHhmYjE0YWI3NywgMHg0OWM5MzFlNywgMHg3ZWJjNjZmMywKLQkweGRjZWMxMWQwLCAweGVhOWQ3NTA0LCAweGEyZjc4N2VhLCAweGIyYTY5MGRkLCAweDJkYjBkZGEyLCAweDY4YzA2NDAwLAotCTB4ZjAyOGZlYzYsIDB4MDdjODAyZjMsIDB4ZGYzZDA4N2QsIDB4MDIyM2NmODAsIDB4Njc4OGZmNzgsIDB4ZTgyYWNlNTQsCi0JMHg5OWExMzc5ZiwgMHgzMmE1ZjBlOCwgMHg2Zjg2NTVhMywgMHg5OGUwNjQyZCwgMHgzMzE2MTRjMCwgMHg2N2Q5ZDkxYiwKLQkweDUwZmRmZmM3LCAweDY4ZjNhYzNiLCAweGYwOGRkZDhjLCAweDE1NTAzMDVmLCAweGMzY2QyMWZkLCAweGRhMDY2MjNlLAotCTB4MWMzOGUzNmYsIDB4ZmQxN2IzYWYsIDB4OTk5MzNmZTAsIDB4YjFlNDY0MzUsIDB4ZmJlNDJhY2QsIDB4OTRiZTY2OTksCi0JMHhlM2U3MTIyNSwgMHg4MzRkOTk3YiwgMHhkOTlmYmJkZiwgMHgyZWE5ZGRhOSwgMHg5M2ZkMGRhZCwgMHhjMTViZTg1MywKLQkweDBlNjAxZmJjLCAweDM5ODczZTdhLCAweGRjY2I5Y2E5LCAweGFjYTdmZWQ0LCAweDFmMGFlYTlkLCAweDA4MmZmZDAwLAotCTB4M2U3ZmY0ZTUsIDB4ZjliYTI2NWMsIDB4MzI3ZGU3MTgsIDB4NGFlODdkMzAsIDB4Njc4Y2M3NTgsIDB4NWZjODEyOTMsCi0JMHhmMDQ0MTlhYiwgMHg2N2JjZDliOSwgMHg4ZjhlMWM0OCwgMHg3MWRiZDhjNiwgMHg2ZmRjZGU5YywgMHg3MTgxYWM1ZSwKLQkweGQxMzc3YTU0LCAweDk4OWM5ZjVmLCAweGUxZDA0ODM0LCAweGI2ODljYjBmLCAweGNjN2YzZWRlLCAweGI4NzAwOTE4LAotCTB4MmVmNGEwNGIsIDB4NjNmOTMxNWIsIDB4Mzk5MWIyZDksIDB4ZTM2ZDNmMDAsIDB4NTNmYTI3NjQsIDB4NDNhYjZjYzcsCi0JMHg5M2FhNjU0MywgMHhjYWIzNmQ1ZSwgMHg1OWRmZjdhNCwgMHg1MDE5NGNjZCwgMHhjNjk0Njc3ZiwgMHg2Yjc0NDU1YSwKLQkweDVkM2MzZDIzLCAweGNkN2Q5NzhjLCAweDc4MDBmNmZlLCAweDU4NmU1ZDNlLCAweGRjZjUwYzFiLCAweDc5MGZlMDIxLAotCTB4ZDBlNGQ1ZDEsIDB4YjNlNDZhYmQsIDB4Y2ZiZWYxMjksIDB4ZmFmYWE1YTcsIDB4NmFiMzc3NGQsIDB4M2QzYmUxMTksCi0JMHg2MWRkYjdjMywgMHg5NWQwMGI4NCwgMHgzZmZiOTYyYSwgMHhmZTFiMzg2YywgMHg4ZmUxZWNiZCwgMHgzMWY5MTQ3YiwKLQkweDFiYjZhYWVkLCAweGQ2MjYzMWU2LCAweGY1ODU4ODZlLCAweGVjZmJiZjJmLCAweDUzMmVmYzdjLCAweGEwYzYwZmIzLAotCTB4YjMyMTNhNWUsIDB4NzNmZWYwNGQsIDB4ZDgxYjEzZTAsIDB4ODI1NjVmNGIsIDB4Mzk3ZTAzMDYsIDB4ZDYxZmY2MDcsCi0JMHgwZDNiMDJiZiwgMHgxNjk1OGJjYiwgMHg1ZDgxMmYyYSwgMHgyYWJiZWY4NSwgMHgyMDdmNTRhZCwgMHgxNjI0MmYzNiwKLQkweGMzNjhiZjQwLCAweGVkMWRiNTE1LCAweGZhMmNlYWZlLCAweDVmNDEwYWZlLCAweDJhYjcyYTZkLCAweGJiNjdmOTEwLAotCTB4Yjg3ZDQ1NjQsIDB4MjEzNmQwYzIsIDB4YTJiNmUwMTAsIDB4MTgwYWM2M2UsIDB4YWU0ZDQ1NjYsIDB4YmU3ZTljNTYsCi0JMHhkMTA3MmYzYiwgMHg0NTU4ZjRiOCwgMHhkN2E1OTYyYiwgMHhkMjA3NjYyNCwgMHg4YmNlNDE3ZSwgMHgzZWJiZjFjNiwKLQkweGRkZDY3Y2ZjLCAweGU1N2NmY2YwLCAweDg1ZmVmYTU4LCAweGJmN2QxYjRhLCAweGNhOTczMmIzLCAweDNjN2I1ODhhLAotCTB4NzRiNWIzYjYsIDB4MjBiNDBlYjQsIDB4N2QxMGFlMzYsIDB4YTFkMGRkZGMsIDB4YjY3YTgyOGUsIDB4ZGYyMWIyNGQsCi0JMHg0ZTYzNjlkZCwgMHhhYjc1ZTAyNywgMHhhZGE5ZWI4NiwgMHgwZjkwYTdhMCwgMHg3Y2NkYTdjNywgMHg3YTg2NjFlMSwKLQkweGUzOGU5ZWM0LCAweDMwYTUzZmRjLCAweDNlOTljNzFiLCAweGRiMWFhMTc2LCAweDYzMWRmMDNkLCAweDc0M2M2MzAzLAotCTB4NjViYTMzNzYsIDB4ZjJmYzcyN2UsIDB4ZGRkMTEyOWIsIDB4MWVlNTk1NjUsIDB4YzcxY2FiYjQsIDB4N2EwZmIyNjUsCi0JMHgxODU1MzBkNSwgMHhlMTkzZjdiZiwgMHg3NGUwMDc0ZSwgMHg3MGI4ZmVmOSwgMHgzNWNiNjc5NCwgMHgyZjEwZjA5NiwKLQkweDI3ZTlkNjM5LCAweGRjZjczYWM3LCAweGRmYWRlMTE2LCAweGRmNWM0MzNhLCAweGQwZTUwNWZlLCAweDgxMGU1YzY3LAotCTB4YjdlZTc0YTUsIDB4MTE4Y2E3MjgsIDB4OTc2ZmM0NTYsIDB4NTIwMDQzZjAsIDB4Y2I4ZmE4ODEsIDB4NDA2ZjgyYjQsCi0JMHgzM2JkNjA4ZSwgMHg4M2M4MmQ4MCwgMHg1MWFiZDY3YSwgMHhmMDBmOTAxMywgMHg4ZjI0OTY3YiwgMHhmNTdjNDk5YywKLQkweDU4NWZkOGQ5LCAweGU5ZGJkZjNjLCAweGRmOTdmMjVhLCAweDUzYjJmZDQyLCAweDVlODBkMGU1LCAweDVkNWNjY2JhLAotCTB4ZWFiYWUzYWYsIDB4MTdiNDU2OGMsIDB4YzA3NTI1OTMsIDB4ZWZlYzEwY2EsIDB4OTY0YmJlMjQsIDB4MjA5NWVhMmMsCi0JMHhmYWJkNzY0NywgMHgxOWU3ZTBjMiwgMHg4ZDhjMDlkYSwgMHg2YzZmZjc4NSwgMHhmMzM5MjQwOSwgMHg2NjdhYzY4NiwKLQkweDgxN2ZmNjI1LCAweGM5Zjk3ZmY3LCAweGMyNmYzZjQ3LCAweGQxZDI4OWYyLCAweDEwNTk0MjhmLCAweGNkNzA0MjFiLAotCTB4NzBlMTRkZmYsIDB4NTExMWIzYTQsIDB4NmYxODA2ODAsIDB4NmRjOTQxZjcsIDB4YWQyYzY3NDgsIDB4NDg5YWYwZTYsCi0JMHg2ZGM4Y2Y5OCwgMHg1MGMxYWExZCwgMHhhYTkzYWE4ZSwgMHhjYTYxMWNiMCwgMHhmYmMzMjYzZCwgMHhjZDBiNThiMiwKLQkweDhjNDM0YzYzLCAweDMyZWM4NTFjLCAweDlmOTdmOWQ4LCAweDZiZTFiZDkwLCAweDVjZDZhNDg3LCAweDc5OTgzMDk5LAotCTB4OTJlMTkxZWMsIDB4YTVlMjIyZWIsIDB4MzQ3YTc0Y2EsIDB4NGQ1NjNiZTksIDB4Yjk2ZmVjZTMsIDB4Njk3MzRmZjcsCi0JMHhlMGU5NjAxZCwgMHhhZDZhMTdiYywgMHg4ZTljMWZhNCwgMHhjYmIzYTQ1YSwgMHhkOTJiNjRmNiwgMHhlNzhlNzllNywKLQkweGVkOTdiZjEwLCAweDE3ZDQ1NjYxLCAweGZmNWZjMDA3LCAweGEzM2ZiNjExLCAweGFjMWU3NWE2LCAweGYxODQxOTNiLAotCTB4MDdlMDAxOWIsIDB4ZTk3ZGUwMWIsIDB4OTNkMjFlYTgsIDB4MGMyZDQzYTUsIDB4YzVmNDNiYmYsIDB4M2UxMTcyYmIsCi0JMHg2YmZiOGQ2NSwgMHhiZDEyOWM2OSwgMHg4MmQ5ZmQxNSwgMHg1MTViNTdmZCwgMHhjY2M5YjI2ZiwgMHhkNWY0ODA5YSwKLQkweDlhYmZlYmM4LCAweDFlYTJiMzY0LCAweDg2ZmRhODJkLCAweGE4ZjJkYmQ3LCAweDgzZGUwNzllLCAweGU2MmZkYjFhLAotCTB4NDJiM2Q5NzYsIDB4NzRmNmIxMmYsIDB4YjI0NDViOTIsIDB4N2ViZTBmMTYsIDB4ZmRmMWFmMDUsIDB4NjQ0NzE4ZDYsCi0JMHhjZmEzZDE4NSwgMHg0MTZkMGY0MCwgMHhmMmQ0ODhmZSwgMHhlNjEzNmRmZSwgMHg2ZTVjMTM0NiwgMHhlMzI5MGY1MSwKLQkweDBlNjVhYjNjLCAweDJkNDVlYTAzLCAweDIwZjU5N2Q3LCAweDYwM2U5MDJmLCAweDdjNzExN2ZjLCAweGM5NDY2ZjQ1LAotCTB4YWMyMzVhNTIsIDB4MWQ1OWVhM2IsIDB4ZjhiN2IzOTcsIDB4ZDYwM2Q5OWQsIDB4ZWM1NGRlOTMsIDB4MWY2MTcyYjgsCi0JMHhlODEzNjE1NCwgMHhiZmI0NjVkZiwgMHg4OTcwZjI4MiwgMHg2ZDRjYjNkMCwgMHhlM2JiNDU0OSwgMHg3NzZkYTMzMywKLQkweDYwNzFkOTJjLCAweDdmNDhhOGU3LCAweDY1ZWIxZWZkLCAweDcxNzVkODMyLCAweDMxOWQ3NjVlLCAweDE3ZjQ5NmU0LAotCTB4ZTNmNmQ5MzMsIDB4N2RiNTZlN2EsIDB4OWZlNzk4YTgsIDB4MDM0MzNjYzUsIDB4MWQyYzlkYTIsIDB4ODdmODBhZmQsCi0JMHg3ODU4ZTk4NCwgMHg1ODcxODZkMiwgMHg0NDdlZjFmNCwgMHhjMTU2ZWIyNCwgMHhlMTFkMDczYSwgMHg4YmIxZTNmNSwKLQkweDFiMDVhY2I3LCAweDc3YTQ3ZGZkLCAweDMzODI0NzBlLCAweGZiNDMwMDUwLCAweGNhNmU3OTRjLCAweDYyMTBmNGUwLAotCTB4MTFkZDkzZDcsIDB4NTQ2MmIwM2UsIDB4MzM3ZDE3ODUsIDB4YzIwYzdiYjUsIDB4NjUzZmQzNjMsIDB4ZGI3Njg0YjcsCi0JMHhmYzUyMzNmZiwgMHg4NmRlN2ZjNywgMHhmZDdmZWUzOCwgMHgxNTBlNjI0YywgMHgyZDE1ZDdkMiwgMHhiNGQxNmJiNSwKLQkweGY0M2RmZWVmLCAweGI1NGMyOTZiLCAweDAwN2IzZmEyLCAweDcxYzdhZGYwLCAweDhlYzk2YTY2LCAweDA1ZGI0MTZhLAotCTB4MDljY2I3ZGEsIDB4ODZmN2I5MjMsIDB4Yzc0MWNiODYsIDB4ZGZkZTAwOWMsIDB4ZjdjMTAwMDAsIDB4Njg5ZGMzYWIsCi0JMHg1NWQ2MGRhNywgMHhlMzg2OTdiYywgMHhkZjEyMDU1NywgMHgxYjljNjhiNCwgMHhjN2ZjNzE2MiwgMHhiMmY4ZDIwNiwKLQkweGU4ZTFiZGZlLCAweGU0MjI3ZDdmLCAweDllZTQ5NTUxLCAweGM3NmRmMThiLCAweGVmYzMyZDE1LCAweGEzYmIwNGQ1LAotCTB4NTM1ZWExY2EsIDB4N2ZkYTljMzgsIDB4ZWQxOTJhMDIsIDB4NWI2MDlhYzQsIDB4MDNkOWNhMjQsIDB4ZmU0OTk0ZmYsCi0JMHhiYTgyOGNkNSwgMHhjNTEzZTQ5MSwgMHhkODY2NmE2MSwgMHhmZWExODMyMiwgMHg0ZDRiYzBhMCwgMHg5OWZlYjNhZCwKLQkweDRjOWU3YzUwLCAweGI4YzYwY2UzLCAweGUxOGJiNjFlLCAweGMzNDVmY2UzLCAweDA3YTdkOWZiLCAweDA3NWVkMWFhLAotCTB4ZjA4OTE0NGQsIDB4MDI3ZTZkZmIsIDB4ZTNjMmQyYzUsIDB4MDg3MWM4MjYsIDB4Y2ZiN2UxNWYsIDB4MTk0NzcyMTYsCi0JMHhiM2U4M2IxZiwgMHhmZmUzMGVkMCwgMHgzN2E5MmNlNiwgMHg1ZmRkN2YyMCwgMHgwZDAwZTg2MCwgMHg1ODI5M2VjMiwKLQkweGY1YmY0MjYzLCAweGQ2ZWNiYjdlLCAweGY3NjA1YzgxLCAweGVjZmFkYjY1LCAweGRmMWM1ODgyLCAweGJkMjFjNzI2LAotCTB4OTM3ZTJiZTUsIDB4ZjVjMjMxN2IsIDB4ZGIzZDFlY2QsIDB4ZTAyMzc2NDQsIDB4YmE3YWVkMzUsIDB4MWZkZjgwYmIsCi0JMHhmOGUzZmU4MCwgMHhjN2ZkYmNhNywgMHg5ZmU3MWQ0MiwgMHg2ODg3NDgwYiwgMHg0M2RhMDYwZiwgMHg0ZGU1ZmU3MCwKLQkweGY2ZjI5ZjkzLCAweDU5MmNlNzJiLCAweDQwNzI0NDE3LCAweGE1NTJmNzdjLCAweDEzMmZhOWVkLCAweGE1Yzg0ZWQwLAotCTB4ZjJhZWY5NTIsIDB4N2E5OWRjYmQsIDB4ZmU4YTE0OWIsIDB4NzE4OWNlOGQsIDB4MGVjMjA1YzAsIDB4NjdiOWQ3MmQsCi0JMHg2NzNlM2YyMSwgMHhlZmEzMGZiMCwgMHg0NzRjNWQxNCwgMHg2Njc0MzE3YiwgMHg0NzVjMDBmMiwgMHgwZTYwYmJmNywKLQkweDAyMzNkYjQxLCAweDgwNTA2N2NmLCAweDRjMmI5ZTIzLCAweGQ0NGMzNzQ0LCAweDQ4MThiZmVkLCAweGRmMDRiOWY2LAotCTB4NjJmYTNhNDEsIDB4ZGEzYjY5OGQsIDB4MmRhZDc2NzMsIDB4ZDFkMjA5NzIsIDB4NDdiMjQwZjIsIDB4YzFkYzgwY2UsCi0JMHgwNDk0Y2Y3MSwgMHhmYmNlMWQxMywgMHhjOGZiZjE3NSwgMHhiNGYyNjc2ZiwgMHg1YTY3OWY0NCwgMHhlOWY3YmRiOCwKLQkweDg1YWRkOTRhLCAweGJjY2Q3N2Y1LCAweGY0MjI0Y2Y2LCAweDQ1ZjU1YWViLCAweGRiMjg1NmQ2LCAweDFhMzVmY2Q3LAotCTB4MzViY2QxZjUsIDB4ZGZiMGQzYTUsIDB4ZDM1NWEyYmMsIDB4ZTIzNzRlMTEsIDB4M2EyNTc5ZjMsIDB4NmUxY2NjYzEsCi0JMHhiNzZjZTM1MywgMHg2NzQyYmUyMywgMHgzOTQxY2I1ZSwgMHhlNGI4YjgzZCwgMHgxN2MxOGMzOSwgMHhjNGVmZDljNywKLQkweGRiNjk5N2Y1LCAweDY1MWUxMGNiLCAweDhkMTY3YzZmLCAweGYzNzc3M2Y2LCAweGExNWI3YmNiLCAweDI3ZDkzMzZjLAotCTB4MzViMmJmNjAsIDB4YzNhY2M1NzcsIDB4NTVmZjg0YzEsIDB4MDE3YzA2YTYsIDB4NjcxZTdkMWQsIDB4ZTVmN2MxY2YsCi0JMHhkODg5ZGM5MywgMHgyZGE2OTJlZiwgMHg1NmM2ZTEwNywgMHg3ZGRkOWFkZCwgMHg4MGZlYTViMSwgMHg0MDYwN2U4NCwKLQkweGIyOTUxOTRiLCAweGQxZTcxZDMzLCAweGE0ODNiOTI5LCAweGQ4MjM4NDM4LCAweDRiZWViMDBmLCAweDcwNTA3NzY2LAotCTB4Yzk4ZDQ1MmEsIDB4ZTlkZTI4OWUsIDB4NWE5YTNlYmIsIDB4NDAzYjg4OTgsIDB4NmM5NzYyYmYsIDB4MzJkZDIwMzMsCi0JMHhlYmU3MTZhNywgMHg5ZTE4YmVkZiwgMHg3YzViYmI1MywgMHhmYzVjYzQ1ZSwgMHg5M2QzNzA3OSwgMHhhYjdkMjA3NywKLQkweDM3ZjcxYjk5LCAweGQ4NGFlZTJlLCAweGJjYmZmODhlLCAweDZmNDRlNWZmLCAweGJjYmZkODNmLCAweGZkN2NiZTdlLAotCTB4MDBiZTkwOTcsIDB4ODllMDk3OGUsIDB4NDFhYmU5MDYsIDB4NzVmZmUzZTcsIDB4ZmEyNDhhZWQsIDB4ZmQxMWVmODIsCi0JMHg3MjRhZWQ3NCwgMHg4ZjkyZjI2ZSwgMHgzMDdlNDI1ZCwgMHgwNjZiMmJhYiwgMHg5NWNkYmRkMiwgMHgyMjk2NzY4NSwKLQkweDk1ZGU5ODJmLCAweGIyNWJmZTRlLCAweDE1ZmQxZDJiLCAweDNjYjBkZTQ1LCAweDc3M2QyMjU3LCAweGZkYjExMmJhLAotCTB4OGQ2N2Y0MDEsIDB4ZWQxNmVmOWUsIDB4YzRkZGFhOGUsIDB4NTUwZThlZTMsIDB4NmM0N2Q2MDYsIDB4ZWUzMmJhYzcsCi0JMHhiNDk3ZDZjZCwgMHg0ZjUzZWI1NSwgMHg5ZmQ2ZmE3MSwgMHg5NWZjZjIxMCwgMHgxZjhhYjQ1NywgMHg4MmJmMGIyYywKLQkweDVhM2MxNDU5LCAweDcwNDZmZGI4LCAweDgxNTZiM2Y5LCAweDU5NTFjM2NiLCAweGJmODAzNzE4LCAweGRjZGU2OTYyLAotCTB4ZmI4NTdlNmYsIDB4ZDk0NjA3Y2QsIDB4MmFhZTUwYTMsIDB4NjA4MWY5ZmUsIDB4NWVhMmE3YTgsIDB4ZWE1NmYzZTUsCi0JMHhlN2ZjMWMwYSwgMHg0YmNmZTZiZCwgMHhmN2JlMzBhMywgMHgxZjhmMWM0NiwgMHhiY2I4MTk1NSwgMHhiOTcwMzJhYSwKLQkweDE1OTRkYWI0LCAweDM0YWJlZjhlLCAweGEyYTZjNzYwLCAweGVlMmM3MmJmLCAweDBlMDc4ZDRiLCAweDM2NmQyYWU3LAotCTB4ZjU3ZGMxMTAsIDB4ZTk0NzViYTUsIDB4NmQ5NzZmOTEsIDB4YTZmN2E1MWIsIDB4NjM5ZGFhOGYsIDB4ZGU2MDU5OGUsCi0JMHhhZGFhNzY5NywgMHhiNTJhODRiOCwgMHhkN2I0NDlmMywgMHgyZWNhNzZhYSwgMHg3YWY3YTMwNywgMHg2NGJmYjQxYiwKLQkweGRiMDI3MjNjLCAweGUzYzZkZDJkLCAweDY1ZmY0YTE2LCAweGY5NmRiMzViLCAweGIxMWVmMzVlLCAweDY5YmUxN2QzLAotCTB4YzhmYWRmMmUsIDB4NTFmYWRmMjYsIDB4ZmQwNjQ1YjQsIDB4Yjk0NmZkZWIsIDB4OGU2M2ViN2QsIDB4N2ZjZmQ2ZjksCi0JMHgyNDJjZjBmOCwgMHhmMWQ5MDJjMywgMHhlM2Y2OGNhNCwgMHhhMThlNzM1ZiwgMHhjMGVhZjkzZSwgMHhmNzhhMjBjMSwKLQkweDhhZGY5NjdjLCAweGFkYjJmMTc2LCAweDNjMDc3MGJlLCAweDM4Mjc2ODRhLCAweDc3YTQ0ODc2LCAweGZjZmU5ZDBiLAotCTB4MDMxZjNmZDIsIDB4NWYzODk0NDYsIDB4MTRkZDM3YjIsIDB4M2FhYjQ3MzEsIDB4OWRmNmZhZTYsIDB4ODZjYjM1Y2MsCi0JMHg3Zjk1YTU3MSwgMHg4YzcyZmI4YSwgMHg1ZGRiZGM2NywgMHgwZmU4YjQ1YiwgMHg0NmY3N2ZmOSwgMHgzNjhjY2I3YywKLQkweDE2MzdjNjBiLCAweDdlZWZlNThlLCAweGZiMjI3MmI0LCAweDdjZGJjNzAyLCAweDcxZTkwNzMyLCAweGQyMjRhZmUxLAotCTB4MjVmNzBiYzMsIDB4ZDM3NDhkYmQsIDB4MTRjZTc3YjEsIDB4MTJlNTY3MmEsIDB4Y2JiODk0M2MsIDB4NmRjOTE2YjIsCi0JMHgyYzc5YmE4MiwgMHg2NTBmZGJlYiwgMHg2YjQ1ZWYzMCwgMHhhMWYxM2U3NSwgMHhmM2JlY2RmYywgMHhmYmUzNWE1OCwKLQkweGUxZDM1OTdlLCAweDZiYmVlMWJmLCAweGRhNDVmZTgxLCAweGE2ZDgyZWE3LCAweDM5NmI4YmYzLCAweGJkM2I0MmRmLAotCTB4N2U0NjJiZTgsIDB4ZjdkZDUxNzgsIDB4NWVlMmZlYmEsIDB4MTQzYWM0NGIsIDB4ZWUzOTkwZmIsIDB4NmU0ZWI4NjQsCi0JMHg4ZWRmODIwMiwgMHgzZDcyMDdmZiwgMHhjNGQ3NmNjNCwgMHg4ZGQ4ZjIwZiwgMHg5NWE5YWEzZiwgMHhjY2E1N2UxMSwKLQkweDhlMzk4OGZlLCAweDIwNzc1MWZjLCAweDBlYTk2N2NjLCAweGE0ZDFiMWVjLCAweDU3N2Q2OTg3LCAweDc4YTAwZWI3LAotCTB4MDY2NzNjMDcsIDB4YjU5NTdlNzgsIDB4YmU3ZWExNjUsIDB4ZjJiMjY4ZGEsIDB4OTY1YjU5MzgsIDB4YTBjYmVhMTksCi0JMHg2MDJiZjA4ZSwgMHgxMmE3MDRkNSwgMHhhNzMyY2I5NCwgMHhkZGI3OWIxYiwgMHhiM2FkZjRlMCwgMHg5N2I3NmU2YSwKLQkweDExODdkZGE4LCAweDlkYWNjNTFlLCAweGJkMWUyMWZhLCAweGJhYzA5NWRiLCAweDNiNDEwOTNlLCAweGIzM2ZhZmM0LAotCTB4ZGNiYzljNTIsIDB4OTVmYzI1YTgsIDB4ZjNhZjdkMzcsIDB4MGJmOGFmN2UsIDB4YzRhMmZmOGEsIDB4ZjQ1NzdlZTEsCi0JMHhiN2QyMDA2MCwgMHgzNTg3ZDg0NiwgMHg1YjdiOWQxYiwgMHg5NGViM2Q2MSwgMHgwMzE2ZGViOCwgMHg2YjA3YTdjOSwKLQkweDdiMDdiY2I5LCAweDU5ZDcxMTMwLCAweGQ2ODUyNWIzLCAweDhiNjRhMGZkLCAweGY2YjY4NzU5LCAweDdmZDEzZDBjLAotCTB4ZDNkODMwNGQsIDB4OTI0NzY0YTEsIDB4MjM3NjAwYmQsIDB4NzMzZGFkZDksIDB4MTJlZGNlYjQsIDB4MzcyZThmZGEsCi0JMHg0ZjM1YzFkYSwgMHhjYTA2ZjhmMywgMHg5ZjZiYjI0OSwgMHg1MjdkOTAzMCwgMHgyN2RiODMzMywgMHhhOWMyNWIzNSwKLQkweGNhNzA1ZmZmLCAweGYyNTc2ODkxLCAweDkxM2NkNGY5LCAweDk5NWRlZGM2LCAweDhjZTE2M2Y3LCAweDY1ZjYwN2U2LAotCTB4NWU2YmRlYTIsIDB4YjJmZjVkOGEsIDB4ZjExMTNlZDksIDB4MjZiN2FjYWQsIDB4ZmI4NGM3YjgsIDB4ZTA2MGFjMWQsCi0JMHg3YWY5ZTkyZCwgMHgwMDdhYmZhMSwgMHhmZjA3MTgwZSwgMHhjNTZiY2E1MiwgMHhkZGE1MDk3ZCwgMHgxZjVjZjE3ZCwKLQkweGVkYjA0ZDY0LCAweDVlMjhlZDEwLCAweGIxOWFhZjllLCAweGE3OTgyN2U5LCAweDUyY2E4Y2YwLCAweDdmMDVlMzE1LAotCTB4ZDcxMTJkOWIsIDB4YzMxNmU1ZmYsIDB4OTlkM2M0NjgsIDB4Njc5ZTVjNTEsIDB4MDVmMWUwNGQsIDB4ZGI2YzViZjAsCi0JMHg1ZTIyZmY3MSwgMHhmZDc3MTNlNSwgMHg2MTRlZjhhOSwgMHhmNWU2ODViYywgMHgyZjhmMzY2NSwgMHgyOGYyMzI5YSwKLQkweGRhYjYwMzhlLCAweGY1ZjZmZTgyLCAweGJlZjllMzBiLCAweGVmMzZiZTY4LCAweDk5ZmI4ZmY4LCAweDM2MTcwMjhmLAotCTB4NWYxN2ZiODksIDB4YmU5MTI0M2UsIDB4OWEyNGY1ODQsIDB4MWJmNTllYTEsIDB4YmU3ZmM1MDMsIDB4YzE0NzdhMTQsCi0JMHgyNjUxZDAwNywgMHhjNzIxNjFlOSwgMHhjNjdlOTBjMiwgMHgxOWU3ZTg3OCwgMHhhNDBlMTc0MSwgMHhmZDM3OGIwYiwKLQkweDgzYzdkMmY4LCAweDA5ZWNmZjAyLCAweDA0ZDY5ZjZlLCAweDEzY2Q3YWYzLCAweDlmYTAzNzI5LCAweDY1MGZmZGZlLAotCTB4ZmNiNTM1YmQsIDB4MDFkZmJmYmQsIDB4ZGUzNmIwNzQsIDB4NzRmZTllMGIsIDB4NGNjZWQ0YzAsIDB4N2YzNWZkZWYsCi0JMHg4ZDk2YzgzYSwgMHg1N2U3MjhjOSwgMHhiNDU2MDE0OCwgMHhmZTA4NTdjNywgMHgxMTg0YjE1OCwgMHgwYWIxNDYzZCwKLQkweDgyMzVmOTA5LCAweDAwOGYyOWI5LCAweGM3MDE4MWU0LCAweGMwMGY3MWZiLCAweDdmMGY4YmRjLCAweGJjY2Y0ZDcyLAotCTB4MTY3OGRmZjUsIDB4YTg5ZjUzZWMsIDB4OWY2OWY0OGYsIDB4NzlmMThlNmQsIDB4OGE0NDU3N2YsIDB4OTZjOWZiY2YsCi0JMHhhOWY1M2U1MSwgMHhiNGZiYjdjOSwgMHhkZTNhZGJiZiwgMHhkOGNmN2VhNywgMHg2N2VkM2VjOSwgMHhkNGY4NjZkOCwKLQkweGM2YWNjYzZkLCAweGVlNTRiN2Y5LCAweGNkZTBmYjI0LCAweDk3ZGM1NzRhLCAweDY1YzNkNzA5LCAweDNlYzhlZTljLAotCTB4YTZiMTk1OGIsIDB4YWE2NzA3YmEsIDB4MGRjNjFlODEsIDB4MDYyMmIyMzgsIDB4ZWRlMzg3ZWEsIDB4ZTQ3NTFlYmMsCi0JMHhiMTk5OGM2YSwgMHhmMjE3ZTJiNywgMHg1NzIzODhmYSwgMHgzNDdlYTE2MywgMHhkZmFmMTE3ZSwgMHg3ZjVmYzhjMSwKLQkweDRjZjE3ZTI3LCAweDE1YzUyYTQ3LCAweDY2N2UyMThmLCAweDhhMzhhYjVkLCAweGFiNDdlMTZlLCAweDQxODkyZTY3LAotCTB4MjRjOTJmMWUsIDB4NjdlY2FlMzksIDB4M2Y2MzEzZGMsIDB4YmNhY2ZjODQsIDB4OGQ5ZmRhNTcsIDB4YWZiYmZkZTcsCi0JMHg3ZGRmZjk3MCwgMHgyMzc3Y2I4NSwgMHhmZTgzMjkxYSwgMHgzMmZjMTJmZCwgMHgwZTA0ZmVmYSwgMHg2ZjQxMzYyMiwKLQkweGE2MmZmZGE0LCAweDhiZWE1Y2Q3LCAweDk0ZmM4MzQzLCAweDNjNjE4YzZjLCAweGYwMTJhNWFmLCAweGQzNzA4MDlkLAotCTB4MzRhZWU5NTMsIDB4MzJhNDc5NTMsIDB4MmJiN2NhODIsIDB4ZTAxZjJjMmQsIDB4NGM5OTVhZGEsIDB4MmI0YWIxZTUsCi0JMHgzOTVlM2YzZCwgMHgyYmY3Y2E5NiwgMHhhODllNTQ2ZCwgMHhhZGIyYTVjYywgMHgwOTRhOGYzMiwgMHgyODc5YTk4YywKLQkweDM3NTg3NjNmLCAweDBlMmUxMDY4LCAweGJkMzlmMDc1LCAweGM2ZTUyZjI3LCAweGNlY2Q0YzcyLCAweGM2ODVmODI5LAotCTB4NWY2YzE4NmYsIDB4MzFkZDkzYzQsIDB4NzE3MTRjYzQsIDB4ZDM1YmJjZjEsIDB4NzNkMjIyZjMsIDB4YzE2NjE1ZDUsCi0JMHhhNmMzYjg3YywgMHg5ZmI0MTZkMywgMHg0NGY1MzJhYiwgMHg5YjRmNTJlZiwgMHhiOGViZTUwNSwgMHhiYWFmNWUwYywKLQkweDY3NTE2NmQyLCAweGZkZWEzYWYwLCAweDI4ZDc2MGVlLCAweGE1NTUwYmQ0LCAweDE4OWFlYjQ2LCAweDQ0OGVlZjdjLAotCTB4YTE1NzE5N2UsIDB4Mzg3ZmEyYjUsIDB4M2U2N2E3YTksIDB4YTMzOGYxZjIsIDB4ZjQ3YTgyZDYsIDB4MmRmNWE5YjAsCi0JMHg3M2NhM2RmMSwgMHhkY2MyYmJhOSwgMHgzNDU3ZGMyYSwgMHhlMmNjNTliNCwgMHg3YzBlMzgzYiwgMHhjMWY1MDYzNywKLQkweGJiZTE4N2I4LCAweGVkMDU2ZTM0LCAweDY3OWI4ZDA3LCAweGU0YWVmYmVjLCAweDBmZmQ1ZGY3LCAweGU0YTI3NzdmLAotCTB4NWVmOGRkZjUsIDB4ZmYzYTZlZjgsIDB4YmJlN2M1YWUsIDB4ZTVlYzk5NmUsIDB4MGZiMjZlMmIsIDB4MTFhZDgzYmEsCi0JMHhmYTk1NWYyOCwgMHg0YTlmN2MyNCwgMHgzM2QyNDI3MSwgMHgxOTZlMmNlMywgMHhlODg3ZWZmNywgMHgwNzBkM2NiOCwKLQkweGE1ZTBkMmYzLCAweDYyNzg5NTZmLCAweDY3NWYyZjVkLCAweDA4YmJhNTU3LCAweGIwOTI2YWY5LCAweDU5NjkyNjU3LAotCTB4YTk5M2MyMzIsIDB4OThmZTI4MDIsIDB4MWFkNzdmMmQsIDB4Y2RlNWY1MDUsIDB4OWRjYzI4ZDIsIDB4ZGJjYmE0OTgsCi0JMHg5YWFlN2U0NiwgMHhjYTE2MWRjYiwgMHhiNzUzMzJmNSwgMHhlZDBjYmUxNSwgMHg1OTQ1ODU0ZSwgMHg0ODZhZGYzMSwKLQkweDBmMTYwMWM0LCAweDNjYmIzODcyLCAweGZhZjUxNTM3LCAweGQ0ZGY5MTI5LCAweDQ4NGY2NDFjLCAweDliZGM3OTgwLAotCTB4MjU0YTcyMGEsIDB4ZDlmNzE5ODgsIDB4ZGU0OTAzNzIsIDB4Y2E0YTFmNzcsIDB4YTY3ZjdiNDQsIDB4MDE5ZmIyY2UsCi0JMHgzYzI2YTcxZiwgMHg3MjBkNTMzMywgMHg0YjAwZTY3MSwgMHhmYWM2NjRhNiwgMHhiNzBmNWUzNiwgMHhiZGUwOTdlYywKLQkweDczMzMzZDk5LCAweGMxZmZlZGQyLCAweDQ5MzRmYWZlLCAweDM4MWY5N2VkLCAweGFkZjgwMTM2LCAweGM4YjJmNzM0LAotCTB4ZmIyMWVjNTcsIDB4ZTQ5OGM3ZjYsIDB4NzdlMjg4MzQsIDB4OWVjN2E0NmUsIDB4MDNkMjI2YzksIDB4OGU1YjhmMTgsCi0JMHg5MmQ1M2JmMiwgMHgzNWEyZWQ4OSwgMHhmZjA4NDEzZCwgMHg5NGQ0ZWZlZSwgMHg4MzJkMDIzZiwgMHhlMzhhZjNlZSwKLQkweGYzYzJkOGJjLCAweGUzZjlmYzRhLCAweGFiZDcwMjcyLCAweDlmM2NmMWU1LCAweGFmNDIyY2E5LCAweDRhZTViMmE3LAotCTB4OGY3Y2EzMGUsIDB4M2ZmNDc4YmMsIDB4NTdlZGVhYzEsIDB4MDI3N2ZlYmYsIDB4NTk4ZTFmZGYsIDB4NDdmMWU1YWYsCi0JMHg2NTMwYTExNCwgMHhlYTUzMDA1YiwgMHhhOTZiY2MwZSwgMHgzMTQwMjQ3ZCwgMHg0ZTAwNmQ0NiwgMHg1NDdlYzVhNiwKLQkweDI0Y2RmYTZmLCAweDFiN2I0ZmI1LCAweDY3YmNmN2I2LCAweGQyOWYwNDM2LCAweGNmN2VhNGJmLCAweDhiYzZkNjZmLAotCTB4MmNiZDIxZWYsIDB4ODI1YzRlNjUsIDB4NGRhOWZlYmYsIDB4MGJmYzUxMGMsIDB4YTEwYmYzYzIsIDB4ZTM4YmYyMDYsCi0JMHhhMDU3YTA2NSwgMHgxNzQwYThjZiwgMHgwY2ViMzNjNSwgMHhkY2MxN2U5YywgMHhjNTRlYjJhMCwgMHhjMDAzNmJkZiwKLQkweDUwZmE4NWZlLCAweDlhM2VlM2E4LCAweDIyYmVkMTNiLCAweDY3ZjUxMDcxLCAweGVmMmZlYzY2LCAweDIyOTFmZWE1LAotCTB4MWY3OTRlNmYsIDB4MTk3OTUxOGUsIDB4MGNkYWU5ZjMsIDB4NTU5MzhlNTgsIDB4NGU0ZGMyZmQsIDB4YzQ2YmZmMWMsCi0JMHg4M2E1NTc3NywgMHgyZmQyZjU5ZCwgMHgyYjQxODE1ZCwgMHg4NjU0ZjFiZCwgMHhmZGRlOGRmZCwgMHhhNTNmNTAyNiwKLQkweGZkZDgyOTdmLCAweDljOTIwNzY3LCAweDhkMjk3YTI2LCAweDJiM2U1MTU3LCAweDRiNmZjZGY4LCAweDM2YjBkNzY4LAotCTB4YTU2MWVhMmQsIDB4YWI5MDY5ZGYsIDB4NDEwZmJkZjgsIDB4MDlmOTYyY2UsIDB4YzBiM2Q3YzgsIDB4OWNhOTdmOWIsCi0JMHg5NWE3ZTU0ZCwgMHhhNjdlN2E3NiwgMHhmNmNhODBiMiwgMHhmZTdhMGFjYSwgMHgyYTRhZTU3OSwgMHg2NTM1Y2Q2NywKLQkweDM3OTQ5ZjIwLCAweGJkNjc2NmFkLCAweGE1ZDRiYWU4LCAweDRiZWY3YmIxLCAweDNmZGYxZTllLCAweGUwNGFlY2JkLAotCTB4OThlOWRkNzYsIDB4OTViYmRmZmUsIDB4YmM3Mjc3ZjcsIDB4ODE3ZDgzNzUsIDB4ZGZkMDI0ZjYsIDB4OGRjODczNWEsCi0JMHgxMzZlOGNlZCwgMHgzNzdhYmZkZiwgMHg3NzczZDM4NSwgMHgyNWQ3YWYyNCwgMHg1MzZlYTg2OCwgMHhmZmQ4YWRiMSwKLQkweGQxMmQxNGRkLCAweGM2NDQ4YWViLCAweDJjNzg4OWRiLCAweGRmOGQxZmQwLCAweDNlNTRlNzA3LCAweDE5Y2VkMjhlLAotCTB4MmZlZGNhYWYsIDB4ZjIyNTk4NGYsIDB4ZTg5ZjQ0NzYsIDB4YzYzZDIwMmYsIDB4OTk2N2QxNzgsIDB4OWZkM2U4ODUsCi0JMHgzOTEzNmEyZSwgMHgzOGViYzRkZiwgMHgyZWExNDVkZCwgMHg3MDhjN2RjMiwgMHgwYTczMTM4MywgMHhkYzM2YmU2MCwKLQkweDM4OTNhZjU3LCAweDlmNDc1ZTNkLCAweDVkOWZlZTJhLCAweDBlMzA5ZjQ3LCAweDVjZTgwOWMxLCAweDdlYzdmMjgyLAotCTB4ZWY5NGEzZjQsIDB4MGI2ZmJlMGEsIDB4ZTA4Y2ZkMzMsIDB4YTMzMWEyZGMsIDB4MGNiMWY4YmUsIDB4YWFmZWM1ODAsCi0JMHgwZjk4MTNkZSwgMHhiMjY2MTUxZSwgMHhmNjQ4OWVlMCwgMHhmZThhYzZlMywgMHgxMjNmYzdlNCwgMHg2ZmZkN2RiOCwKLQkweDFmOGZiZmFmLCAweGRkN2ZkNzdkLCAweGQwN2VjNWJhLCAweGU0OWJhZWFkLCAweGE0NGJjYTA5LCAweGMzZTQ3ZTlmLAotCTB4M2U0NTA0YTUsIDB4MTM5MWZhNzAsIDB4M2Y1MGU3NmQsIDB4MzUwNjRiNzQsIDB4MGRiYmIzYzYsIDB4ODNhZTJlOWMsCi0JMHg0ZmE3MGE1YiwgMHgwNTZhM2U4NSwgMHhiYWUxNDQ3ZCwgMHhlOWViM2NlMiwgMHhkZjgwN2Y5YiwgMHhjYTMxOTZmYSwKLQkweGEzYzdmMGViLCAweGQ2YmM1NzIyLCAweDJmMDRmN2Y1LCAweGQ4MThjMjc5LCAweDQ4N2ZkMDE3LCAweDA5ZjY5MTg5LAotCTB4MDk5YTI0NTcsIDB4Y2U4M2RkN2UsIDB4NmYwMmRmY2YsIDB4ZTI3YTE1OWYsIDB4YTdkZjE1NzksIDB4ZGY3NmU0NTAsCi0JMHgzMDVlNDk3MywgMHg5ZTQ3ZDUyMywgMHg3YTMzYjQzMywgMHhiZjg4ZTkwZSwgMHhmMDU2MmFkYywgMHhmODUxZmExYSwKLQkweDcwYmYyZjI5LCAweGVmNTNjMGFjLCAweGVlMTU0Y2VjLCAweDZiN2Q3NWJmLCAweGNkMWU1MDc0LCAweDY4MzM5ZWUwLAotCTB4MDU2ZDc0NDcsIDB4N2ZmYzgwMDMsIDB4ZjQwOTM0ZGIsIDB4ODc4YzEyZDksIDB4YWZiZTMwNTgsIDB4OGJlOGZkYTcsCi0JMHgyNGIyMGY2MCwgMHg3MmJhZTc2OCwgMHhmMjk4ZWQwNiwgMHgwN2E2NjRlNywgMHg3ZGNmYzlkMCwgMHg2NWU5MGIzMywKLQkweDk5OGQyMWU5LCAweDRmYWQ5YWVjLCAweDNiN2E0MzFkLCAweDUwNTkyOGQ3LCAweGMyMzU3N2RmLCAweGIzOWY3MWIyLAotCTB4NDAzNGU0YzYsIDB4NjNhODFjZmIsIDB4NjUzYjY1ZmIsIDB4MDM1MjI1MjcsIDB4MTRmZTkwN2IsIDB4Mjg2YjNiZGYsCi0JMHg3NzdiNDU4YiwgMHhhMzNmNzNlMiwgMHhiNWE1ZjhmZCwgMHg3MTg3MGIxMiwgMHhhMmJhZGFkZiwgMHhlN2VhMTIzNSwKLQkweGY5ZmNmMWI2LCAweDdmY2YwMzJhLCAweDZiMzc5MWNmLCAweGI0N2M2MzA3LCAweDMxMmYzZjk2LCAweDdiZmU1MGU2LAotCTB4NzU2NjJlZDEsIDB4YWY2NWJjNjMsIDB4YTVmM2ZjODksIDB4MTU3OWJlMzUsIDB4ZWI3Y2RiMDUsIDB4NWNiZTIyODUsCi0JMHhiY2ZiZTc1NCwgMHg0ZjM3YzFhNCwgMHhjOGEyNGM2MywgMHhhMzYxNDhjMywgMHgxMzVhNWUyOCwgMHgyMjgwNzY0MiwKLQkweDc3ZTQ2ZjRmLCAweDM5NzM5NmQ5LCAweDYxZDdkOGM5LCAweDBmOTVlZjE4LCAweGI5ZmQxMzdkLCAweDg4NjdkNzkxLAotCTB4MmZkNDA3N2EsIDB4YTJmMWMzN2YsIDB4Yzk0Y2E1YzAsIDB4MTk2NDg4MmIsIDB4MjNjYzBjYWUsIDB4M2Y3MTk4MzQsCi0JMHg4YmY5YWNhYSwgMHg3M2Y5ODYyMCwgMHg4OWQzZWQwMSwgMHgyOTk3NWYzZiwgMHg5MzYzNmFkZiwgMHhhNTY5ZmI0YywKLQkweDMwOTc4NjJkLCAweGZmNmNiMGNmLCAweDg0YzVhZDQ5LCAweGVjODg3ZjcwLCAweDYzOThiYjgwLCAweDZlOGJmYTNkLAotCTB4NmZlNDRhOTUsIDB4OGRkYzUxYjcsIDB4NTI5NjdhZDksIDB4NjBkOWJiN2MsIDB4ZjY1YWZkNDYsIDB4NzNhZGM3ZmEsCi0JMHg2MjVmYmViMSwgMHhkMGUzYzQwNiwgMHhhNTkzYTI3NiwgMHg1ZmI0YzljZiwgMHhjOWYyZDBjZCwgMHg4Yzg5ZDBmMiwKLQkweGJiM2M0NTc4LCAweGNmM2VkMDA2LCAweGUyM2JjNDMyLCAweGU3OGVmMDE5LCAweDM0ZTdlNDFiLCAweGJiYTVmNzg0LAotCTB4YjU1ZjdhNjQsIDB4ZWQ4YjRhYjUsIDB4N2UzOTM5Y2YsIDB4YzhlN2JjMTUsIDB4NDVjZjA4YWIsIDB4NGU3YzcwMmYsCi0JMHg5OWZlYWU3YywgMHg1ZDgzYTQwMCwgMHhkZjczYjIxYSwgMHg3OTgzN2U4MiwgMHhkMDNhMWYzZiwgMHg3N2UzZTIxZSwKLQkweGRmMTQ0YmQ1LCAweDY2ODNhM2VhLCAweGUwMWQxZjVkLCAweDA3NDY2ZjNjLCAweDY3YTQ5ZmMwLCAweDA2MDc0NjZmLAotCTB4NGZlNDE3OTQsIDB4OGExYTNiOGYsIDB4ZjhjZmVkZjYsIDB4OWRiODk0N2MsIDB4MWY5Yjk3MTIsIDB4MTBmYTU5ZDIsCi0JMHhkODg4NGQzNCwgMHgxYjJjZjY0NywgMHgwODk1NWY2MCwgMHhlNGNjZTY3MiwgMHg3NGRjMjgwZiwgMHg1MWVlY2E2YSwKLQkweGZmMDM0Zjk0LCAweGJmOTQ2MWY0LCAweGZiN2NmMDQ3LCAweDQ0NGI3ZmU3LCAweDMzMWRkMDc5LCAweDE4YzFkYjYzLAotCTB4YWUwNzY3YzIsIDB4OTAzODNiYTcsIDB4OTIzZGQzZWIsIDB4M2FlN2EyNTMsIDB4OTNiZTBlYjcsIDB4ZjkxNTcyMGQsCi0JMHhhM2E5YmQ5MiwgMHhhMGY3NDNmOCwgMHg4OTNlMWUwNywgMHgxODRmNjhmYiwgMHhjOTJlODhhZCwgMHhlMmJhZmRjNiwKLQkweGMxM2U3Nzk2LCAweGNjNmIyN2Y4LCAweDdkZjhmOWI2LCAweDQ2MmIyZmMyLCAweDM3ZGYxMGJmLCAweGI1ZTg1ZjgwLAotCTB4M2Y5OTI4ZGYsIDB4NGJiZjdlYTAsIDB4Y2I3NWE1OGMsIDB4ZjI1NmViMmEsIDB4MDU5OGVhZGYsIDB4ZTVlYjk1ZWQsCi0JMHhhZmY5MjMzZiwgMHg2ODZlYWZjNCwgMHgwMWU5Zjk5ZiwgMHg3NmU3ZmM4ZiwgMHhmMTBjNzMxOSwgMHhlNWMwYjczYiwKLQkweGY3MTEzMmQzLCAweDcxYzhmYTNkLCAweDY3NWM0MGY1LCAweDUzMzczZjFkLCAweDI5NzIwMmQ4LCAweGY4YTVjZTk0LAotCTB4ZDEzMjk3YzgsIDB4MTlkMjNjZmUsIDB4NDcyYmYxYzAsIDB4ZWM5NTAxYzUsIDB4OWQzZTQ3MmQsIDB4ZWM5NGUzODQsCi0JMHgyMTk0ZTNlMiwgMHg5ODFjMjBmZCwgMHhkYzAwOTlmYiwgMHgyODY5NzAyNywgMHg4NGM0NTkxZSwgMHg1OTMyNjk1YywKLQkweGU0N2U5NmRkLCAweDdhZWQ1ZDQ4LCAweGU5ZmQ3ZjM0LCAweDM3ZWMxOGE3LCAweDFkM2Y4NDVjLCAweGI2ZmEzNTk1LAotCTB4OTdjYTAzZmIsIDB4ZDI1ZjI0MTEsIDB4MDc3ZjQ3YmUsIDB4MjNkMzIzNjksIDB4ZDRlNWIyNDcsIDB4ZjVhZmU4MDEsCi0JMHhlNDAwY2IzMiwgMHhiOWU5MWJlMywgMHhkYWMwYWRhNCwgMHgzOGE2ZTM1ZSwgMHhiM2VkNGNmNSwgMHhhOWY2NjE1ZiwKLQkweDdjMjJiOWE3LCAweGIyNmM4ZmRhLCAweGU1MWZiY2Y4LCAweDNmNzlmNjRlLCAweGE3ZDU5OGU2LCAweGQ2MzZkOTllLAotCTB4OWY2ZGZkYTcsIDB4YjdlYTdjZDgsIDB4YjRmYWU3YjcsIDB4M2NhYmUzYmYsIDB4MmE2ZjdhOWYsIDB4ZjYwN2U3YWMsCi0JMHg5MDhhZWVlZiwgMHhiNjRmZGE3YywgMHgwN2M2N2MxOCwgMHg5OWYwNGUwZCwgMHhmM2VjMWM5YSwgMHhlMWM4ZDdiYywKLQkweGVmNzFhMzc0LCAweGFiOGVmYWI2LCAweDhjZjdiOWY4LCAweDg2N2YxZGY1LCAweDViZGM3N2NkLCAweGQwMGVjM2M1LAotCTB4NGQxMDZhOWIsIDB4NjI4ZjQxM2IsIDB4YzAyNTRhZjksIDB4ODZmMWVjMWQsIDB4YmZhYTA4Y2EsIDB4ZDJhMTY5NWEsCi0JMHhjZjRjOTk1NSwgMHg1MmI0YWI1ZiwgMHgyYzcyYjFiZCwgMHg3ZDgwMGZkNSwgMHhiMDI2ZjU4ZiwgMHgxZDdjYjFmNywKLQkweDdlN2M3Y2VjLCAweDhhYjU3ODMzLCAweGRmMTMxZWVmLCAweGNiYmUyZTNkLCAweDA3NmUxNmQ4LCAweGVmMmUwNGRjLAotCTB4NDQyN2ZlOGIsIDB4YWZlYzM2ZmYsIDB4Njk2MWQwZjEsIDB4MWFlYWE2NmUsIDB4OTBmOGVkZjAsIDB4MmY4YzVhMGIsCi0JMHhlN2I3OTZkOCwgMHhmM2RmOWZhMCwgMHgwM2I2Y2NhZSwgMHhmM2JiMzA1ZiwgMHhlYTI4NjU1OCwgMHgxZjNjODFhOSwKLQkweDNkZTdhZjIxLCAweGVkOTcxNzhjLCAweGZlZTMzMzhmLCAweDNmYTZjNmM3LCAweDVkZjdjMDlkLCAweDMzYzUzMjhkLAotCTB4MTE3ZDM0OGUsIDB4YmE1Y2UzODQsIDB4NTAzZWNjMDYsIDB4OTdhODM3ZTgsIDB4ZmFhMjRkZmMsIDB4Nzk4Zjc4MjYsCi0JMHg4MmY3OTNmOCwgMHhjYjdhNGI2MSwgMHg1MmViN2E0NSwgMHhkMjc3NTJiYywgMHg4NmJjOGRmOSwgMHhkYTc2ZGFiZCwKLQkweGVmNGJkYzU3LCAweGY1YmUwNWRmLCAweGQ2YjNiZjc5LCAweGRiMTliZGU3LCAweGRhYjY3ZWUzLCAweGM1Zjc3ZTQ5LAotCTB4MzczYzY1MjYsIDB4OTc4OTJmYjUsIDB4YzVkMjNjZTgsIDB4YzdhZDZmOWQsIDB4YmRkMmJlN2MsIDB4M2VlMjA3MGIsCi0JMHhjOWMzNzE2MCwgMHgwMDNmYzViMCwgMHg3NjA3Y2JmZiwgMHgyZjVjYTJhNywgMHhmOWM1OTY2ZCwgMHg2OTVlM2UyMywKLQkweDg5MWU3MmIzLCAweDdlMjRiZmNmLCAweGNhMDg0ZTZmLCAweDIxODkwNmVkLCAweDZhYjEyZTdhLCAweDZlMmE4ZmNhLAotCTB4Mzk0MTJmYWEsIDB4NTczYzljNWEsIDB4OTcyMWYxNDMsIDB4M2MwMWUyMmMsIDB4Y2NjNGIwZGYsIDB4YmFlNjdkYjgsCi0JMHgzNWU3ODQxYSwgMHgzYTNhZTBmZiwgMHhiYTg1ZjMxZCwgMHhjMjBhZGU1YiwgMHhmOWUzNzZlZiwgMHhkZWZjMmYxMywKLQkweGRjZWRjNDkzLCAweGRmYjg5MjdiLCAweDJkZjFhOTc0LCAweGQxYjkzZjNhLCAweGJiODcxNmY1LCAweDNmZWI0ZGRhLAotCTB4NTBkZGVhMjIsIDB4NjQ5YmJjMTIsIDB4MzVlMTdmNWEsIDB4OGNhMGYwOTksIDB4NGM5MjYwZjcsIDB4NGE2ZTRkZTMsCi0JMHg0ZWJhZTEzMCwgMHhmMmY3ZjhiOSwgMHg3OWZjMmM5MywgMHg5YzdjYzJmYywgMHgzOTg4ZjFmZiwgMHg5NWQ5MzI5OSwKLQkweDNkZGYyZTNjLCAweGNhM2Q2YTdjLCAweGU4MGZjYzUxLCAweDA0N2IwZmNmLCAweGI1Zjk4NWM3LCAweDc3YzYzYzhhLAotCTB4MGViNWY3ZTMsIDB4Y2YxZmI4MDYsIDB4NzQ4YTM4MWQsIDB4Mjc0ZmUyODAsIDB4NDczZGZiNzEsIDB4M2Q0NzhmNmIsCi0JMHhhMTY4Y2E3MSwgMHhkYzlhZjgzOCwgMHhmN2UyMTMzOCwgMHgzY2Y4OTYwOCwgMHg1N2RhMjVmNywgMHhkZmU0NmEyOCwKLQkweDBiNmU2NTNiLCAweGQ1M2JiYTQyLCAweDNiNDY0NjM4LCAweDQwYWYxOTQ2LCAweGJlOGZiNzdjLCAweDIwZTZmMGZiLAotCTB4NmIzODE1M2MsIDB4MDc4ZTM4OGQsIDB4N2U3OWZjN2YsIDB4NzFlNjk5OTIsIDB4MTY3Mjc5ZGMsIDB4OTJhNzRiZGEsCi0JMHg2OGNlYzkwMywgMHhmY2ZkZjJkNSwgMHhlZjZlMDZlMiwgMHhhYTg5NmE5ZSwgMHg1YmY2YmQ5NSwgMHhiYTNlMDVmMiwKLQkweGQ3ODQ1NTkzLCAweDY4OGQyNmFlLCAweGY5OWViNzM3LCAweDdjNzBkM2I0LCAweGM3Y2VmOWQ1LCAweDEyNzhlY2VjLAotCTB4MTc5MmVjZWQsIDB4NTQ5MzNhNjQsIDB4YzMwOGE5YTIsIDB4ZTZkZjlmZjUsIDB4MDEwMmJmM2IsIDB4M2I4ZDEyZTcsCi0JMHg1ZThiY2MyYywgMHhmOGZiOWE0YiwgMHhkZTc0NDhjNiwgMHg4NTg5ZjBhYywgMHhmMWUwYTlmMCwgMHhjNzNmMzI1NCwKLQkweDlmODIyYTcyLCAweDViZDkyYTgzLCAweGQxZWQ3NDRmLCAweDE5YWUzY2Y3LCAweGJmM2M1ZmY1LCAweGFlN2U2NmY2LAotCTB4Zjk3ODBmNjIsIDB4M2NmZDBjNDksIDB4YTY1YzZlNGQsIDB4ZjdhM2Q2MmEsIDB4YmY2ZDEzN2IsIDB4ZmU4NDFhNGIsCi0JMHg4NWY5MWU1MywgMHg4YTI2ZWM0MCwgMHgzYzdkYTA4YiwgMHhhN2VmZTUwMCwgMHg3Yjc3ZTBjZiwgMHhkODc5ZjkxYiwKLQkweDExNzM3ZDUyLCAweDVhZjVmYmVlLCAweGJlNjA0MTgxLCAweDRlMzRkYmJkLCAweGQxMThjZmUxLCAweGVjMmE1ZDRlLAotCTB4N2IxNmYzZDQsIDB4YTNmYjhjOTYsIDB4YWViNDU1YWIsIDB4ODlkOTA2OTIsIDB4NDI1ZDk4ZjksIDB4MWJkZTVkZGUsCi0JMHg2OWQyMGY3MywgMHg4Y2Q5MzFjOSwgMHg1NzQ0Y2RmZSwgMHg2NWM3YWZjYywgMHhmYjI2ZGU5MCwgMHhlZGM1Y2NhZSwKLQkweDEyOWRiMmRjLCAweDdkOGFiNWQ5LCAweDhiZWMyYTUxLCAweDNkOGVjMjczLCAweGRiODdiYWI3LCAweGY2MjQ4N2I3LAotCTB4Y2VjNzhjNTQsIDB4NDU3NjE1MjgsIDB4M2Q3OWJjYTksIDB4OWZmYjJiZTYsIDB4Mzk2YzJkYWYsIDB4ZmQ4OWU3NGMsCi0JMHhlZjE2ZDVjZiwgMHhiYTk3YWRmNCwgMHhiZjhhZWI3YywgMHg5ZjUyNGVmNywgMHhmZTgyOTI3ZiwgMHg5NGE3ZDgwOSwKLQkweGMwYTlmMTJmLCAweGFjYWZlMmE3LCAweDIzODZiMzQ4LCAweDViNTQ2ZmJmLCAweDAzNzEyOGE2LCAweGExZjk1Nzg0LAotCTB4NmYzODg1N2QsIDB4OTU4MDQ5NjcsIDB4NmY5NTg3ZmMsIDB4YmZiYjVjMTAsIDB4Nzc0OTdlZTYsIDB4NzdmNWEzMDQsCi0JMHhlZWRmMGUzMywgMHhlNWRmNGUyNiwgMHhjN2E5YzkxYSwgMHg3MDIzYThmZSwgMHg1Y2U0YmQzYywgMHhhM2E4NzY4ZCwKLQkweDEyZTQ4ODM3LCAweGY3YzFlMWU2LCAweGZlZTFjZjk2LCAweGEzNjMwZGE3LCAweDg1NWE5NTMwLCAweDI5ZmQxNDBmLAotCTB4YTlkZWNkY2UsIDB4YmQ4Mzk3NmUsIDB4MjQ5NWMzZTQsIDB4MTI0ZTc3NmUsIDB4NGMyYjQ4ZjksIDB4ODM1ZmQyNTYsCi0JMHhjMWViYjljNSwgMHgwZjZmNmU3YSwgMHg1MzU3M2I1NiwgMHg2NjMxZmUzYywgMHhmMjcxNDM1OSwgMHg0ZTkwYTMwMywKLQkweGYxNGVhZTMwLCAweDEyM2Q1NWZmLCAweGViMWZjM2M1LCAweDA2M2Y5MDkxLCAweDc5MTFhZDliLCAweGY4NDlmNTVlLAotCTB4MDc2M2Q1M2UsIDB4NDhmNjMzMGMsIDB4YzdiYTlkZjgsIDB4ZDczYWY4OTQsIDB4NjZkNDMzZWYsIDB4ODk0ZmNlMGQsCi0JMHg4N2ZiMjkzYiwgMHg3Mzk0ZmNjYSwgMHhmM2U3ZmYwOCwgMHg4Y2ZjYzMzMywgMHhiZTAxZjk5ZSwgMHhhYmZmNjAwNywKLQkweDBmYjI1NjE5LCAweGU3Mjg2N2EyLCAweDFlNDgyYWZkLCAweDA0YmNmMDI4LCAweDcwMDkzZWY0LCAweGE0MWQzMTg1LAotCTB4ODc2ZDkyOWIsIDB4NDBmZTc4NzMsIDB4Y2JkZjlkMWIsIDB4YzhlYmUyMDksIDB4MzllM2Y5MTEsIDB4OTQxY2JjMDEsCi0JMHgyYjM1ZjFjYywgMHg5ZThiYzc5OSwgMHgzNzIyYTUxMCwgMHg4NWI2NDlkZiwgMHgyZmI5NDMyNSwgMHgzOTMyMmYzOSwKLQkweDYyY2U3M2QzLCAweDljZmMwN2Y5LCAweDg3YmNiZjg1LCAweDU3NGY0NGU3LCAweGVlNTEwZjgxLCAweDMyNDJiNGZkLAotCTB4NjNkOGZiYzcsIDB4ZjljYWJmOWMsIDB4MmEzZTNlYTMsIDB4ZTIyNWUwZmUsIDB4YjViMGU2MTMsIDB4OWU2MTg3MjUsCi0JMHgwNWVmZTcwMiwgMHg3OGU2MGQyYiwgMHgxNzI4YmUyZiwgMHhjNWE2MjA3ZSwgMHg3Mjk3ZmVlMiwgMHg1Y2MwYmU0ZSwKLQkweGVjNDBlNzQ4LCAweGU4Y2NjMzJiLCAweDk3Y2I5NTk3LCAweGFmZmY1ZTI4LCAweDkzNzk1ZGYyLCAweGUwNmRkZDZmLAotCTB4NDkzNmVmZjQsIDB4OWVkY2ZmZTQsIDB4MTNjZjY3ZGMsIDB4ZmUwYjQ2M2YsIDB4YjQ0YmI1YTgsIDB4OWRmYjVjMmYsCi0JMHhlNmRiYzc5YSwgMHhiYjVmMTQ0OSwgMHg3Y2YyMWUxZiwgMHg2MGFlZDE3YSwgMHhkZDliZTUzYywgMHgzN2RhNTUwZiwKLQkweGZiMTUwOWFiLCAweDlmYjRhMWQ2LCAweGY3NTg5Zjc3LCAweGUyZGYyMmZkLCAweDgzMTVjNmE4LCAweGE1YTNhMGYxLAotCTB4M2Y4ZTJiN2EsIDB4N2Y2OGI5ODcsIDB4YTM2YjFlN2QsIDB4ZDk2MDc0ZjIsIDB4ZWUwZDM3N2UsIDB4ZmNmZThhMTgsCi0JMHhjNTFkNzZjNywgMHg2ZWQ3NmFhMSwgMHg0ZjVjYTEzNywgMHhiOGNkNmI2NywgMHhkOGEwMDZjZiwgMHg1Yjk4ZmRmOSwKLQkweGYyNTM4ZmRmLCAweDBlMmVjMTg5LCAweGZjMDRmYTQ3LCAweDdmZmM0NmNmLCAweDE4ODliODA1LCAweGUyZmY3ZDdkLAotCTB4M2U1M2Y2OGYsIDB4ZmJjM2U3NTIsIDB4ZDBjMDNkNjYsIDB4ZmYyMWVhYWYsIDB4YjU2MmE4YTgsIDB4MWM0ZGY2ODYsCi0JMHhjYjM5MmRhYywgMHhlZjA1NTc4MywgMHhmMGZhZGUwYSwgMHgxZjE2NjE2YSwgMHg4NjlhYzJiYywgMHg0YmU0OWMyMCwKLQkweGZkMmU0ODMzLCAweDc3YTg2NjRlLCAweDA1NTc4NjZmLCAweGY4MTEzZmVlLCAweGU1Y2NkNjU5LCAweDE1YmUzZjk3LAotCTB4ZTc4MDNjM2MsIDB4ZGY0OGUyYTMsIDB4MzEzYzIzNmUsIDB4N2Y0YmM5MWQsIDB4YmUxOWI4N2EsIDB4ZTFlNzMwODAsCi0JMHgzYWExODlhYiwgMHg1NGEzMmZmMiwgMHgyZDQ2OWU1YywgMHgzOGJlMjg5NSwgMHhiNTBmZDk5NywgMHhmMDJiMzk0MywKLQkweGJiZDEwZDUzLCAweDgxM2NkYmMwLCAweGYzOTk4ZmI3LCAweGZmOThlNGVlLCAweDkzYmRiYzNkLCAweDNjOWQ1NzljLAotCTB4ZjViZTdhZTgsIDB4ZjExYmQzZTcsIDB4ZmFjNTg5NjUsIDB4M2E1ZjQ1NDcsIDB4MWZhM2YyMTksIDB4NmJmMWZiM2YsCi0JMHhmMGFkMWUxZiwgMHhkYTNjMmYzZiwgMHg1ZjExMDY1NywgMHg2ZTViZTFmNiwgMHg4OGJkMzViOCwgMHhhYTFjNjA3ZiwKLQkweDcxNmJkZjg5LCAweDYwOTU3ZTUzLCAweDU3Y2Y4MDIxLCAweGE2ZjU3ZDkzLCAweDJlMDUzNzgyLCAweDlkZWI4YTM3LAotCTB4YzIzYjcyZDYsIDB4ZmI0Yzg4ZjEsIDB4ZWU0OTlmOTgsIDB4NjM5NDY2YTMsIDB4ZmNlOGE3MjksIDB4YjNmZWQyOWIsCi0JMHgxZjQzNmRkNSwgMHgxYjNlNzE4MiwgMHg1YWQzY2JjZiwgMHhkNGE5MWY5ZSwgMHgzZTNjMDE2ZCwgMHhjZWE0NTlmOCwKLQkweDRjZmRlYjgxLCAweGZhODA5OTRhLCAweGJmZTkzM2UyLCAweGI4N2FmM2E2LCAweDM5ZjU4MmQ2LCAweDUwY2MxM2UxLAotCTB4ZTI1MWFkM2YsIDB4N2M0NDZiODksIDB4NjdlNTQ5YzAsIDB4NDQ5YjZlNzMsIDB4MzZmNjI0ZWQsIDB4M2Y5ZjhlZjMsCi0JMHg3Y2ZjNTEyYSwgMHg5YzcyODgwMSwgMHg2Nzg0Y2M1ZiwgMHhmZWFmMzE3MywgMHg0NmUzY2ZjYywgMHg3MmRmM2VkMSwKLQkweDFmNTBmMWRmLCAweDkyMWM1MGM3LCAweDVlNzc4YmZiLCAweGY0MmNkMWViLCAweDdhN2QzYmQyLCAweGZlMTVkMjcwLAotCTB4Y2U5MzNmM2MsIDB4ZDgwODE2MWIsIDB4Yjg1MjQyZGEsIDB4ZTdlNGVjN2YsIDB4ZDMzZDE1MzYsIDB4ZDE5ZjZjN2IsCi0JMHg0MTdhNGUzYiwgMHhlYWZiOTVjNCwgMHg3YjQ0NGYyOSwgMHgzYmMzYTllYiwgMHhlMzg4OTU3ZSwgMHhlOTFkNjgxNCwKLQkweGFiZmI3ZTc4LCAweGQxYTNlN2RhLCAweGYxZDgyODllLCAweGI3ZDkyMjc4LCAweGEyMjYzNjNiLCAweGZkYjA1MjlmLAotCTB4YWEzNjg5NTcsIDB4NGZjOWRhMDcsIDB4Nzc3NWYzNTIsIDB4YTVmZGI5ZWUsIDB4ZTc3YTVlNGQsIDB4NmZkY2UxZDEsCi0JMHg5YzNmYTc5OSwgMHg5NGVlNzY4ZCwgMHg2MWQ3OTcxMSwgMHhlN2UxM2UzYywgMHhmMzg3ZGQxMiwgMHgwZWI2ZDY1MywKLQkweDY0ZmNkZmY1LCAweDQ2YWNlZjRlLCAweGUxOTk3MjRmLCAweDczYzAyZGY5LCAweDc1ZGRjYTdkLCAweDkzYzdhN2M4LAotCTB4NDNlNGQwYmYsIDB4OWE4YTVkM2IsIDB4Mzk5ZjMzZTAsIDB4N2VlMzg3MzcsIDB4NWNjOTA2ZjYsIDB4MGZkYmJjY2YsCi0JMHg4NWNhZmRhNSwgMHg0NDZkMjU2YiwgMHhlMGI3ZWEyOCwgMHhlYTNmZTg1MSwgMHgxZTY5ODI1MiwgMHg2YThjMzY4YiwKLQkweDU3ZjNlN2M1LCAweDc0NTNlN2YxLCAweDM4NTNjNmNlLCAweGNhNWFiM2NlLCAweDEwZjkwMjM3LCAweGFmYzc5ZGViLAotCTB4ZjFlN2UxNGIsIDB4Yzg5NjZjMTcsIDB4OTNiZTU3YWUsIDB4YWQ1ODRjZjAsIDB4Mjk3NTNhZjcsIDB4ZDQ2NzJmNDIsCi0JMHhjZTUxZGM5MSwgMHg3NTViNGUwOSwgMHgxODA4ZWRmMiwgMHhiYjZhOWZmNywgMHgzOWM2MDUyOSwgMHg3OGI5ZjRmMSwKLQkweDE0OWYzYzM3LCAweGZkMTUyMTcyLCAweGZkYWQwNDliLCAweGVlYjg4NWI3LCAweDgzY2EzYWVkLCAweDkyOGY0OGNiLAotCTB4ZThmZGExYzMsIDB4ODUzZmM3ODcsIDB4MGI1NTgyZTUsIDB4ZjI4ODViN2YsIDB4MTQ3ZWFiNzEsIDB4ZjNlNjE3NGYsCi0JMHg1NTU5MmU1YiwgMHhhYWRmM2YyOCwgMHhjMjExNjA3ZCwgMHhmNWE3YWJlZCwgMHhhZjJmOTc2NCwgMHhmZDY3MGE0ZCwKLQkweGJlNTI4ZmYwLCAweDhkYzdmODBjLCAweDdhOTU1ZDgyLCAweDlhNTc3NzJhLCAweDllZGEzY2U5LCAweGZmYWEwOGNhLAotCTB4MjU0MmQyYmUsIDB4NmJlOWNkOWIsIDB4OGRjYjk5YjksIDB4ZTYzNzhkMWIsIDB4ODBiMzIwNWEsIDB4YzFiMTlhYmQsCi0JMHg3MDYzMmNjMCwgMHg5Yzk2Y2U1ZiwgMHgxODQ4NzAwMiwgMHhhMzdkYmE1ZSwgMHhhNTZlMTc1OCwgMHg0Y2M0NzI4YywKLQkweDZjNjQzODQ0LCAweDRkMTVhODdjLCAweGVlMTRkMGRhLCAweDZhNzdiZDY3LCAweGVkZjIzNDQzLCAweDJmMWQ1NWIyLAotCTB4NTM3YWUyMTYsIDB4N2Y2MTQ2ZjIsIDB4MTQyYmI2ZmQsIDB4ZjlhYjc4MzcsIDB4ZWYwOGY5ZjEsIDB4YmUzYWVkODIsCi0JMHhhZmVlYjEzZSwgMHhmZjBjNGU5ZSwgMHg3OGVmOGMyZCwgMHg3YzdlNDM1NywgMHgxNzhlYjZmOSwgMHg3OGI5NDIzNywKLQkweDZmNWE0M2YzLCAweGY1ZDViZjdhLCAweGZiZTE0YzhlLCAweGFiZTMzNzlkLCAweDVmZTFjMTFiLCAweDQ1NWZhYmU3LAotCTB4N2Y2Y2ZmMTMsIDB4ZjllMWVlOWMsIDB4N2NhYWY5NzcsIDB4ZGY4MjZhZDUsIDB4ZDliYzk0YmEsIDB4Njk1ZjVmNDgsCi0JMHg0ZmM4ZDExYywgMHg5OGZjYTU1ZiwgMHg0ODcxZGNlOCwgMHhmMjJiZjgyMiwgMHg0YjNmZTk1NSwgMHhlNTU4YmZjMCwKLQkweGM2MmUzY2RhLCAweDYxYmY1ZjIzLCAweGMzZGYwNDE5LCAweGQxMTNlN2NkLCAweDY5YTZmZGFlLCAweGZiYWUwZmNlLAotCTB4YjdiZjI1NDAsIDB4ZWJlMDA5YTUsIDB4NTI4ODJmN2QsIDB4NzFlZDY5NjYsIDB4OTY1ZjU4NTYsIDB4ZmZlMGM3MzgsCi0JMHgxMmEyOTFkZSwgMHg2ZmRmMmNmNiwgMHg1NzkyN2ZjNywgMHgxN2U4MDc3ZSwgMHg0Zjk4MDBjNywgMHgwZWU0OGI0OSwKLQkweGU5YWUzZjQwLCAweDIwZWEwYmFlLCAweGZiMTIzM2Q0LCAweGM5MWUyN2RjLCAweDdhNWVlN2Q4LCAweGJkZjM0NmY2LAotCTB4ZTM4NjU5NTksIDB4ZWVlNDc4MjQsIDB4N2NhODlmNmQsIDB4YmRiOTYzZWUsIDB4N2VlN2MwM2QsIDB4MDNmZjNlOTMsCi0JMHgzZjY5Njk5ZSwgMHgzOTU2YjIyNywgMHg0Yzc5ODBiZiwgMHg3NDI5Y2Q1ZCwgMHg5NjgyZTI1ZSwgMHgwMGViYjFlMywKLQkweDNlM2MzOWQ4LCAweDdiYWY2NGMzLCAweDc3MzQyZTIyLCAweGY1OWNhM2E2LCAweGViZDk2ZjVmLCAweDI1MWY0NDlkLAotCTB4MjE1ZjhmNGQsIDB4ZjI2OWI2M2YsIDB4Y2RmYTc1MDUsIDB4NDc3ODdmZDcsIDB4NzFkYmRkMjcsIDB4ODU5ZWQzNDEsCi0JMHhiNjk3NTRmZSwgMHg1MGYxMWQzZCwgMHhlNzk3MDZmNiwgMHg5NDFjMmFmZiwgMHg2MDFiODVlNywgMHg2NWU3YzAyMSwKLQkweDI0ZTg5ZTkyLCAweDcxNDRiZTViLCAweDNjNjNhZTgxLCAweGZjZDY1MDJlLCAweGRlZDNjOTEyLCAweDI5OTcxZTE2LAotCTB4ODRlNWI1NTcsIDB4YTJhMzFjNjMsIDB4NTllNTE1YTMsIDB4OTNmNzA0NmYsIDB4MDliZGM0Y2EsIDB4MWU4NGUyZTMsCi0JMHhlMzQ0Zjc1NCwgMHhkOGI3MGU3OSwgMHgzYmZjNTYyNywgMHhmOTAxODdiYywgMHgyYWU1NWNiNSwgMHhmNGE1ZmNhMSwKLQkweDJkZmI4NjQwLCAweGUxOWY5MTE3LCAweDMxOTVmY2Y5LCAweGJmY2U5MWViLCAweDhkMWEwZTcyLCAweGY0YmRmMWYyLAotCTB4MWM1MTk3YmYsIDB4NjY4MTBmZWYsIDB4ZDkxMWVjOTksIDB4NmZiYzJmMjcsIDB4Mjc5OTRlMWQsIDB4YWVjNTMwYzgsCi0JMHg4YmM5ZjQwOSwgMHhlZTVhZDcyZSwgMHgzOGY2N2IyMSwgMHgxZjJiN2ZkZiwgMHhiZDg5ZjljZSwgMHg3NGE5ZjljZSwKLQkweDg0NmQ2MWVkLCAweDgyMGQ3OGQ3LCAweDZlZmIxNDlmLCAweDRlZmUxZmNhLCAweGQxMzg3OTdjLCAweDkyZjkxYzc2LAotCTB4NzhlMjE1Y2UsIDB4OTI5YzAzMTEsIDB4Nzk2NWRhMjQsIDB4MmQ4ZDFiZjYsIDB4OTVjZmFmYzIsIDB4OTM3OTdkZTksCi0JMHg4ZTVmNzBjYywgMHgyZjI4OTg0NSwgMHg1MzU1OTcyMCwgMHhlNjE0ZTU3ZSwgMHgzMzliNDcxYSwgMHhmMTI3ZjZlYSwKLQkweDdmYTk5YjVlLCAweGZlNjBjNzkwLCAweGI0NDFmODE2LCAweDYwMTM5ZDdmLCAweGE2ZmNjNzhmLCAweGMwNDkyYWQzLAotCTB4YzMzMTk1ZDUsIDB4ODdlOTlmNGIsIDB4NGUzNTNkNzMsIDB4ZjU4ZjQ4OTYsIDB4OWQ5MjA2NDQsIDB4ZTk3Njc5MzIsCi0JMHg2OWZiNmYzYywgMHg4M2I3OGFiNCwgMHg2MjZlYzg3MSwgMHhhZTdlMWVjZSwgMHhlZTkzZGRjNiwgMHhhY2M4ZWY3ZCwKLQkweDkwNTYwNDNmLCAweDhjYWU2NDVlLCAweDg5ZGY1ZTU5LCAweGU2ZjVjZTFjLCAweDA2ZmZkYzU1LCAweGZiMTcyOTNhLAotCTB4NzdmMmQ5YWMsIDB4YmQzZGEwY2YsIDB4NWZkZjEwZmMsIDB4Zjk4YWFkM2MsIDB4ZThiM2YzMTgsIDB4ZTc4NGI2ZGMsCi0JMHg3OTM5ZjlhMywgMHhiYzM2Njc2NiwgMHg2ZDJiYWY2NywgMHgyYTA3OWQxMCwgMHhjYzMxMjNkZiwgMHhkNjZiMmI3MywKLQkweDUxMzhjNzZkLCAweDBjM2RhNjk5LCAweGQzNjM3OWU5LCAweGU3YTQ1YTQ3LCAweDRkNzdkYzcyLCAweDc5YWJlN2UzLAotCTB4NzI0ZjVjZGMsIDB4NDhjY2RjYmMsIDB4MjUzNjk1N2YsIDB4YmJmMThjN2QsIDB4OGI1YzYzZDIsIDB4OTI0ZmFhOTYsCi0JMHgxYjcyOGU3ZiwgMHhiOGRjNTdiZiwgMHgxMmYxZmM5NywgMHhiYzdmMjZlNiwgMHg2ZTk3YzFhNCwgMHg4ZmZhMjM3YSwKLQkweGI3MGU0N2RmLCAweDMyMzNkY2Y4LCAweDhmZTcyYjc5LCAweDMyNWVlMjU5LCAweDkzYjBlMjI2LCAweGJkNmJjMjIzLAotCTB4MGE0NTMxY2YsIDB4Y2VlNGQ4M2MsIDB4NzRjNzY4NzUsIDB4YmM1NjRhYzcsIDB4YzAzYmE2OTcsIDB4MjNlZDE2YjEsCi0JMHg2YmI3MjI0NywgMHg5ZGRjZGZiYSwgMHg4YmU0OTRiMSwgMHgzNGRlZTMzMywgMHhkYjg3NTdiYywgMHg2YzM3OTNiMSwKLQkweGYzNWVjYjUxLCAweGUzZWUyYzk5LCAweDA1NjAwZWViLCAweGY2ZWYwODA3LCAweDkwOGY4ODIxLCAweGUxYThiY2E0LAotCTB4OWUzZWU4ODMsIDB4N2M2MDc3MTMsIDB4ZjI3YjljNDgsIDB4NDQ2ZmM3NWYsIDB4MzhiOGU4NWMsIDB4N2JjY2E5YmYsCi0JMHg5NzE0NTQ2YSwgMHg3NDQ5Y2M2NywgMHgxOWNlMmFkNCwgMHg0YTM2NzkyOSwgMHgxZWIxMGFmZiwgMHgzZDA3N2VjNSwKLQkweGZiNDNmZTFkLCAweDkzNGZiODI1LCAweGYyNjlmNjJmLCAweGJlNGQzZWM1LCAweDE3YzlhN2Q4LCAweDYyZjkzNGZiLAotCTB4ZWM1ZjI2OWYsIDB4N2Q4YmU0ZDMsIDB4NGZiMTdjOWEsIDB4NjlmNjJmOTMsIDB4MGQzZWM1ZjIsIDB4NTRlMmMzZTUsCi0JMHgxMWNkZmYzMSwgMHhkMWVhMzRmYiwgMHhjMWI1ZTQ1NiwgMHgxMGU5ZmE5ZSwgMHhkZjYwZmFiZiwgMHgyNDQzYTdmNiwKLQkweDg5NjBmYWRmLCAweDI1N2M0ZmRhLCAweDExODc2OWY2LCAweDIxNjZhM2UzLCAweDU0N2M3ODlmLCAweDJhNzlkZjM5LAotCTB4ZTExOTNlZDAsIDB4ZmNlNzljYWMsIDB4MDNhOWY3MmEsIDB4NDI5MzRmYzgsIDB4ZDliZjkwZTYsIDB4Y2EyNmZlMGIsCi0JMHhmNmUxY2FhMywgMHhlYzc3NmMzYywgMHgyZGY4YzRkOCwgMHgxNDBkMjcyNCwgMHhlMGZkM2NlNywgMHg5ODczOWYwOCwKLQkweGFjYzc5M2UzLCAweGM2MzA3YmM1LCAweDdlNzEyNTFiLCAweDllNjQ3YWJjLCAweDM4YzFmZmUyLCAweDY2MTY1YjEzLAotCTB4MzA3Y2I5YTgsIDB4MmQ5Y2JkYTMsIDB4NzdlM2U0OTcsIDB4YzYxYTQ3OTYsIDB4MjRkNjFjYTAsIDB4ZjcwZWU3ZGIsCi0JMHg4MzM5ZGI5MiwgMHg1ZGEzYzU5NywgMHg3Y2IxYWFkNCwgMHhjNzVhZjE4YywgMHhiZjNhMWEwNywgMHg5NGY1YzRhYiwKLQkweDhkMjVlZjc2LCAweDkzN2VjNDJmLCAweDhlZDZlMzkzLCAweGZjZjVmMWM2LCAweDk2OWIzOGJlLCAweDZjZmNlMDM1LAotCTB4ZWU4OTQwYWEsIDB4MzUxNjYxNmUsIDB4ZTFjMjgzY2EsIDB4NTgyNjZlOWMsIDB4ZDZlYzdkYjgsIDB4MTgyMWQ0NWEsCi0JMHgxZjE4MDk4ZiwgMHhhZDEzNzk4YSwgMHgwNGM3Y2YwMiwgMHgzYzBiOGY5ZSwgMHhhNGQ3N2VlMywgMHg4NWRmYmUwNCwKLQkweDYxNzdlZTI1LCAweGQ1OGRlNGE5LCAweDFmMmRlNGE1LCAweDI3YjRmMjRlLCAweGM0YWNlMTFhLCAweGU3MjhhNmZkLAotCTB4ZWU4Yjk4ZmMsIDB4ZDA1MTdjMzMsIDB4YmU3MGQyNmQsIDB4NzI2MWYyY2YsIDB4MDljM2EzZGUsIDB4YjczYTJlM2YsCi0JMHg2OWUyMmM1OSwgMHg0MzdmNjI5ZCwgMHhjZmQyYTc1OSwgMHhmYmYxOWZkMywgMHgwNzMyNDY1YywgMHg4M2IzNjdlZSwKLQkweDA4NzY0ZjIyLCAweDlmNTAyM2Q4LCAweGU0OWMzMDc5LCAweDdhMWU3MjkwLCAweDA3ZWUxOGU2LCAweGZjZTI3ZGIwLAotCTB4MTMyNTg0NjIsIDB4YzQ0YWEzZjksIDB4ZmM5Y2JiNTMsIDB4NDg2OTZkMWMsIDB4MjM5ZTIyNWIsIDB4YTU3YzEyZTgsCi0JMHhkMTczOTVkNCwgMHg2ZWExYTNhNSwgMHgyODRiOWNmNCwgMHg4ODk2ZDk5ZCwgMHgyNGJhMTJlNywgMHgwZGNlOGE4MywKLQkweDRmZWZlNzZmLCAweDhkMmJiZTA5LCAweGY3MjllMzE1LCAweGQxNWRlODRlLCAweDQzZWU4Nzg4LCAweGJjZjFhMzA3LAotCTB4N2JhMzI2ZGQsIDB4NmVmYjk3MjksIDB4MjgxMWRlN2UsIDB4M2E5NmYzMTYsIDB4Y2MxOWQ3MjUsIDB4Zjc3NDdkY2YsCi0JMHgxZTYzZjcxYiwgMHhmNWM2YTc3ZCwgMHhkYjFmZDYyMiwgMHhjYzdlZTg3ZCwgMHhmNjk0ZWRjZiwgMHhiZjdiMzE5ZSwKLQkweGM2OGFlNDFmLCAweDc3NDdkZGZjLCAweDgzZjdmMGI3LCAweDZjMThiZWY2LCAweDVlNmJhYWY1LCAweGI1ZWY4MzNiLAotCTB4OGZkZDBlNmIsIDB4NzU1M2JjZjksIDB4NDg5NTYzY2UsIDB4NzRlN2JmMmYsIDB4ZmZiM2Q4NjUsIDB4YjhhZGMyMWMsCi0JMHgxM2VkZGI5OSwgMHhmNGJmZWNmNiwgMHhmZGU1ZWExYSwgMHgzZmVmZGEyNiwgMHhlMDg2M2MzOCwgMHhmMmZjZDU1ZCwKLQkweGFlYjNhNDY2LCAweGJmZGUzY2JkLCAweDE3YTNlMWE5LCAweDc0ZWQ0MTdmLCAweDU0ZGMwZDc0LCAweGMxODMyYjlkLAotCTB4OWVlY2Q2NzcsIDB4MWE5YWYzNGIsIDB4ZWIxYWZhZTgsIDB4NDYzODhkNGYsIDB4OTAzYTk4ZjMsIDB4MTFkNmYzZjMsCi0JMHhlNzhmZGRlZiwgMHhlZmY2YmEwMSwgMHg2ZWY5MDQ3OSwgMHg2ODMwMDBlYSwgMHhmOWJiM2U3MSwgMHg3ZGEyYTBmOSwKLQkweGJmZDA5MzI5LCAweGNkYjUzMmVmLCAweDVlY2JmMWM3LCAweGYzMzlkMWQxLCAweDc0ZTE3ZGEyLCAweGMzZGJjNzJmLAotCTB4OTkzOWY5NjMsIDB4YThkMWQ1ZTEsIDB4ZWZhZjU1NjcsIDB4NTA4YmYxZGEsIDB4ZmRhMDY3NmMsIDB4NmUxMGYyOWUsCi0JMHhiNWM5MTVlNywgMHhmZTExMGY1OSwgMHgzY2YxZGE1ZSwgMHg4MTk3N2JjZSwgMHgzMTBiNWZmNiwgMHhjMmY1MDJhNiwKLQkweGE3MTQwOTFkLCAweDVmMWZlMzdmLCAweDY0M2M0N2NjLCAweDdjZThkYmNiLCAweDA2NzVkN2NmLCAweDk0ZTFjMjE1LAotCTB4Y2YwMDM2ZDYsIDB4Njk0ZTM4ZDMsIDB4MTQyY2RmYzgsIDB4ZmNkM2MyZjUsIDB4NjA1MTdkYmMsIDB4MmZlMTBlN2IsCi0JMHhmNTFhM2FiNCwgMHg0N2MwZDE2YywgMHhhN2JjZTNhNywgMHhhMjJmZDVjYSwgMHhlNjVlYzNiZiwgMHhkODVkYzZmNywKLQkweDdlODM3MDA1LCAweDk0MzVlYTE3LCAweGNiYjVkYWFkLCAweDNiZTJlNzQ0LCAweDc4ZjllYWE1LCAweDllYTM4OTNmLAotCTB4NTQzNGViYjcsIDB4ZjUxZDNjMTMsIDB4YjRkZWZjNDksIDB4NDhlODMwNWQsIDB4ZTdjNWI3NmMsIDB4OTdmYTg1ZjksCi0JMHhiZDFmZDFkMywgMHhmMjU0Y2FmOCwgMHg1NWZhMTU0YiwgMHhjZWE4YTVmOCwgMHgzZjFkN2NmZiwgMHhmZTI0NWFiNywKLQkweDMzMDc2NjY2LCAweDJlOTNjNTdhLCAweGViYWU3ODFlLCAweGZmZDNjY2I3LCAweGNlODY4MzYyLCAweGQ4ZWExNzc5LAotCTB4NTYwZmNjNWEsIDB4ZWEyOGExZjgsIDB4NWY1YzVjYWUsIDB4MTEzNmFhOTEsIDB4MzFjMjk2ZWQsIDB4MmY5MWYzZWQsCi0JMHgzZTk4MTgyZSwgMHgyN2JkZGEwMiwgMHhlMzUxNTVmNCwgMHhmZjY4MTllYSwgMHhhNjNlNjhkZSwgMHhiZjhmOWMxMSwKLQkweGViN2FlMDg5LCAweGQzODMyNjliLCAweGJmZDFiZjdiLCAweDk5OTJiNGZjLCAweGQ0ZjA0ZmRmLCAweDdiZTE1YTdmLAotCTB4YWQzZGYwZGUsIDB4YjRmZDA0YWIsIDB4M2YyZTEwYjIsIDB4YmM3YjQwY2UsIDB4N2M1MDJlOTMsIDB4YmY0YWMxNjcsCi0JMHg3ODIzOTI3MywgMHhiNjk5NjQ1ZSwgMHg5ZWY1MTEzZCwgMHg4NjNmZmUzMiwgMHhhODVkYjk5YiwgMHhiN2ZiYTc2ZSwKLQkweDQ1NGRmYmZjLCAweGM4ZTUwNDczLCAweGI3OWU3ZTZlLCAweGEwZWE1MWE4LCAweDUyMDgyMjczLCAweDhiNjY3YmFmLAotCTB4ZTYyNzBlZjQsIDB4ODc4N2Y1MDksIDB4MDc4MTJjODgsIDB4MTFiOWViMTgsIDB4YTI4ZjM0MzEsIDB4MDc5ZDAzMDYsCi0JMHgwZjY4MGUyZiwgMHhjNGE5M2I0MiwgMHhmNjg0MWVkNCwgMHgzMmViZDc0ZiwgMHhlODg5YzNkZCwgMHg4ZmM2NTUwYiwKLQkweDg5NGY3Y2Y1LCAweDM0YmExNjEzLCAweGRmN2Y0MzM2LCAweDFjNjBlNTgzLCAweDBkZmUxOTcyLCAweDA0NzU3OGEwLAotCTB4NjgyYTI3ZGYsIDB4Y2ZlN2U0MGEsIDB4MWU3NGVkY2QsIDB4MjYzY2ZmZGIsIDB4YzVlY2QzYWUsIDB4MmY0ZDVkOGYsCi0JMHhlOWZiNzk4NSwgMHg3OTcwNDdhMywgMHgxMDc1MmRkMCwgMHhlM2ZmNzRkZiwgMHg4M2E0NjhmMywgMHg4YjViMTUyMiwKLQkweDI1MTc5NWZiLCAweGVhMDIyZTdlLCAweGEyZTIxZTc0LCAweGZhMmNmN2Q4LCAweGY0ODAxOGQ2LCAweDEyOWJmMTczLAotCTB4YTkyZWUzZTIsIDB4ZmI1Y2U0OWQsIDB4N2M5MzNmZWUsIDB4OTNiNGQyZTgsIDB4YzQ2OGZiOWMsIDB4ZThmYzkzN2YsCi0JMHg4ZjlmNmUwYSwgMHg0NDdkYWI3MiwgMHhkOTFmN2YwZiwgMHgyM2NmMWYzZSwgMHg3Yzc1ODliZCwgMHg4MWZmZjc4ZiwKLQkweGZkZGFlZmZlLCAweGVmYThmZGVkLCAweDhmM2NjYWE3LCAweDMxYTRiZDgyLCAweDg3MTBmOGYzLCAweDI3MDEzMmY3LAotCTB4YWU5YzM2YzYsIDB4NjM0M2ZmMjQsIDB4MmRkMGZkNDEsIDB4MTY2ZjAzZTgsIDB4OThmZTVlNjQsIDB4Y2M1ZDRmYzIsCi0JMHhmOTExYTdiMiwgMHhjN2RmODBiMywgMHhjMzU1NzYwMywgMHhjZGZmNjg2YiwgMHg4NGZiYTMwOSwgMHhlY2E2ZTFmYywKLQkweGZjODY4NjMzLCAweDY5ZTIyOTZkLCAweGMwZmVjOTg2LCAweDY5NTM4MDA4LCAweDE3ZjkzYjZhLCAweDg3YTRlZDQwLAotCTB4OTFkNGRlY2EsIDB4ZTlhZGQ5OWYsIDB4MmJmMjgxZDksIDB4OGI5ZjY0YzUsIDB4NmRiNDRhZWQsIDB4YmMyNDMzZWIsCi0JMHgxNWJkYTBhNywgMHhjYTI5ZmE0ZCwgMHgzOTk3YzdmOSwgMHhiZWE1NzViZCwgMHg4ODRkY2ZjNCwgMHg4MTYyY2E3ZCwKLQkweGIyNWJiYzA3LCAweGUyNDNlOTE2LCAweDY5YWI3ZTc4LCAweDZmMjhmYmRmLCAweDQ4ZTJkYWJhLCAweGQzZjNmYjRlLAotCTB4ZThhN2E2ODUsIDB4NDA0ZjhhOWUsIDB4ZTJiYzNiYWYsIDB4N2MyYzlmMDAsIDB4NjYwMWYyOTksIDB4ZjE4ODFlNjMsCi0JMHhiZGJlNzNmYSwgMHhmZTRiZGRkZiwgMHhmNWVjZGIyMCwgMHhjNmIxZTkxYywgMHgxNzBmZWViNywgMHgwZmI3NGJhNCwKLQkweGRlNjgzODFmLCAweDAwZGY5MDNiLCAweGRhMTNjNWZlLCAweGJlODc3ZWU4LCAweGNiYTg0Y2ZhLCAweDdlMjNmNTVlLAotCTB4NzhmNmJmNzUsIDB4MGZkYTAwNWYsIDB4NTA1ZDg0M2IsIDB4OWE3ZGQ0MzIsIDB4M2MzZGY3ZmMsIDB4ZjQwYWI3NmYsCi0JMHgwN2Y3ZDUxYSwgMHg2YWE1N2U1MiwgMHg1MGFkZTgwZiwgMHg1ZjUwYjdhZSwgMHg1MWI1MDcxNCwgMHhiZjZiYWFkYywKLQkweGQ3NzlmNjhlLCAweGM2OGY5ZjM0LCAweDUyM2QwM2Y1LCAweGY5YjhhNjdjLCAweDdjY2JkZDIwLCAweDRjODdmZDEwLAotCTB4OTQ2MThmZDIsIDB4MzliZmIzMTcsIDB4ZTUxMGZkMGMsIDB4OTVjYTg5NzksIDB4ZDNmNWYyMjgsIDB4Y2YyODdlNTEsCi0JMHgyMjc3NjU0YiwgMHhkYTk1ZjM5ZCwgMHg4Mzg4ZmVlOCwgMHgyYTI1ZGU2MiwgMHgxNzU4Y2JhOCwgMHhkZjM4OTZmMywKLQkweDJmN2U2NmIzLCAweDVlZGUzZjk2LCAweDc2ZWRjMTE5LCAweDlmNzQwZjkwLCAweDc5ZDc5YWU3LCAweDA3OTE0MGRjLAotCTB4MWNhZTQyODUsIDB4OWNhOWU3YzEsIDB4M2VjYWNkZmYsIDB4NDQyZDc0MTEsIDB4NGU0N2VmYmUsIDB4MGIzMDhmMjQsCi0JMHhlMjgyYjg3ZiwgMHg1ODQ2M2IzYSwgMHhhN2Y0NWQ3OCwgMHg4OWRjNzk3MSwgMHhkMWJkOTdkZSwgMHg4YTliMWU5OSwKLQkweDNkY2EyY2ZkLCAweDE0NzkxZTVmLCAweDI4MmY5MWU3LCAweDBlNDgyMjA3LCAweGMxODRkMWFjLCAweDk0NWU4YWJhLAotCTB4YzJhMmZlZTgsIDB4YTA3M2FiNzksIDB4N2VhNjViMzksIDB4MmQ0OWVlODgsIDB4ZTM1YmJjYzAsIDB4YTdmMmYzZjUsCi0JMHg1N2I4ZjFhMywgMHhlYzUyZjI4OCwgMHhlMGVkMTUwMywgMHgzNTE3NDBmYiwgMHhlNDBkMWY3YywgMHgyZmY1ZTUwZCwKLQkweDA3M2FiNDliLCAweDY4NDk2ZmY5LCAweDRmZGJkNmE5LCAweGQ3ZjhkOWJlLCAweDU4YWY1YjlkLCAweDBmZGUxMzlkLAotCTB4ZGNhZDE3OWYsIDB4NWQ4ODNhZDIsIDB4YmRhMTVlM2YsIDB4NzJjYzI3MzYsIDB4ZGU2NTczZmQsIDB4M2NjYTBkMTcsCi0JMHg3OTA2NjgyNywgMHhlYWY2NjNjMywgMHg3MzRmYmMxYywgMHg4NWRmZmU5OSwgMHhjNWY3NWYwNywgMHhmNTFiOWQ2NiwKLQkweGY2OTdjMDJlLCAweDU2YmNlZTgzLCAweGJkNWYxM2UxLCAweGNjODU3OGQ5LCAweDM3MWZmYjQ5LCAweDU5N2ZiZjlhLAotCTB4NTM0ZmI5MjIsIDB4NTdmMDJkNWUsIDB4ZjlkOWYxM2QsIDB4YTBmZGVmNjgsIDB4ZjZiZTQyMjksIDB4MTYwYTI1YzUsCi0JMHg0MDdiYTMwZSwgMHg3OTg3MGJlYywgMHg0YmZjMjVjNywgMHg1NTgzOTQxMCwgMHhhMGUyMzM5NCwgMHhiZTcwZjgxMiwKLQkweDI4NzgxZmI1LCAweDA0NjdmZmVkLCAweDMyOWE0ZmNmLCAweGUwZDVmMzgyLCAweGJkY2ZjNWE5LCAweGEzOWUyOGM2LAotCTB4ZTM3NDFkNGUsIDB4NTRhNjIxZjMsIDB4N2NiNzRmY2UsIDB4MjA2MjY0M2UsIDB4NjBjODc3NmYsIDB4Zjc0ZmI4YzYsCi0JMHg1YzUxYmZhMSwgMHg3MTlkN2JiOCwgMHgzMDZmZGYzNiwgMHhkZjc4NDhiMiwgMHhkZGI2OTExYSwgMHg4YWZiZmUzYiwKLQkweGU3ODE0NzM4LCAweDdlZmNlOWJlLCAweGUzODdlNmIyLCAweGJlYTZhOTRhLCAweDFiZDkxMmI4LCAweGNmYjQ4MWE5LAotCTB4OTU3NGQ1ZDIsIDB4NGI3NzViZjQsIDB4NDNmNzE5YTYsIDB4NDY5Y2RhYmEsIDB4N2ZmMmI3ZTQsIDB4ZWExODRmZmMsCi0JMHhiMzk2YWVlMSwgMHhmNWQ2OTc5NCwgMHg1N2NhNzlkZCwgMHgwNmYyMjhkYiwgMHg3Yzg5MzQ4ZiwgMHgwOThiMzZhZiwKLQkweDdlZTc3NzlmLCAweDM2ZWQ4MzkxLCAweDU3MTNkMjg5LCAweGE1MzE3MWUwLCAweDI1NjVmYzU0LCAweGZmNzVlMDdlLAotCTB4NmI4NDI4ZDEsIDB4OTNlMzc5YmQsIDB4YTYwZjMwMTksIDB4MWRkZmE2YWYsIDB4MDQzOWZmMDAsIDB4YWUyNzg3ZjUsCi0JMHhhMWZmMDk2MCwgMHgyYjhjNGEzYywgMHhiOGYwMjdjNCwgMHg1NzE4OTYwMiwgMHhiOGYwZDc4OCwgMHhhZTMxZDYwMiwKLQkweDE1YzYyNTgwLCAweDE1YzYzOWYwLCAweDA1NzE4ZWIwLCAweDAxNWM2M2FjLCAweGMwNTcxOGViLCAweGY4MGFlMzEyLAotCTB4OGU3MTZiZmMsIDB4Mzc4YzFiYTMsIDB4OTIzNGY3MWUsIDB4Y2Y1MTVmZmMsIDB4ODg1NzZiZjcsIDB4ZDQ1N2ExZmIsCi0JMHg4NWI3OTQ0YSwgMHgwZjUwMzhlNywgMHhkM2M3OTc1ZSwgMHg1Yzc4ZjIyOCwgMHhiMDNmNjg1YiwgMHg0NTZjYmY3YywKLQkweDBmNzllMTU0LCAweDc5ZjMwZTg3LCAweDNjNjI4ZTdhLCAweDY0YWY3Y2E4LCAweGU3YzE2ZDVkLCAweDFiMWU2OWIzLAotCTB4OWUzZjMyNWIsIDB4MzVlYmNmODcsIDB4YWM5N2JjNTYsIDB4MzA5YmU1YmIsIDB4YjUxNTc3OGMsIDB4NmFkYzUzZDQsCi0JMHgyZDIxZjg1MiwgMHg2MjQxYjllMSwgMHhhNTlkNmYxOCwgMHhhOTcyN2VlMywgMHhkMzQ3NGYwYywgMHhkMWQ5MjliZSwKLQkweGYyMzZiYWE1LCAweDRhNzc4YTVmLCAweGRkZjNlZjY2LCAweDkwYWY2M2U1LCAweDliY2JlODljLCAweGY5Y2MxOTcyLAotCTB4YzZkNWZhM2UsIDB4NGZmMGFlZjMsIDB4NTdkODhmYzQsIDB4ZjQ5YmNhNWUsIDB4M2Q5MTU5ZTUsIDB4MmQxZjY1ZTIsCi0JMHg3YzY0ZmRjNSwgMHhlNzQ3N2YyZSwgMHhkMWMxNGE0YiwgMHg5M2Y1MjgxZCwgMHhjZmI3ZTU4NywgMHg3N2IyZDQ1YywKLQkweGUyOWJkZTNkLCAweDc3ZGNkZmJmLCAweDlmNmZjZjVlLCAweGQ4YWE2NTc5LCAweGNmYzUxZTRmLCAweDlkM2VlNDg5LAotCTB4N2MzZjY3YmYsIDB4NDc1YWI3YWYsIDB4NzBlNTRhZjYsIDB4MjY2YTY1N2IsIDB4MjhkODZiZTYsIDB4OTBmNDcyZWUsCi0JMHgyZmFkZmM4MSwgMHhjNGY5MjRiNywgMHgyMWU1YjI1ZCwgMHhhZTU4ZjcxNCwgMHg2YjhmNDg5MSwgMHhiMGViZWQ5MiwKLQkweGM1ZGNjNGRmLCAweDE4OTk2ZjE0LCAweDU2N2UyMjYxLCAweGE0YmRmMGU4LCAweGZkZjFjN2JjLCAweGM1MGIzNGYyLAotCTB4ZWM3NWIyYmIsIDB4Yzg5ZTM0NjcsIDB4Zjg5MjgyZWYsIDB4YTI0YWJiMmQsIDB4MzIxN2E5N2IsIDB4NTk3YjlkMmIsCi0JMHhmMmY3ZTM2MCwgMHgyZGU4ZjcyOSwgMHg0MWNmM2M2MCwgMHg1YmU1YWJhMSwgMHgyODJiYjIyNCwgMHhmYjg2MTEwMCwKLQkweDBiOWUxYzlkLCAweDdiYTFkZTVhLCAweGM0ZWIxNjRmLCAweGJlMmE3ZTNkLCAweDg5YjUxZTFmLCAweGMxMmNiZmU3LAotCTB4ZGVmMGE0MWIsIDB4NThhYmQwMTAsIDB4YjM3ZDllODIsIDB4MDNkYjllMWQsIDB4M2I3MzQ0ODcsIDB4ZTM4ZTEyZGYsCi0JMHhhMWFlM2MyZiwgMHhmMGVjZTEzYywgMHhhNGVkMTNiYiwgMHgzZTUxMjdlZiwgMHhmNmVmNWUwMywgMHg5MjFmODhmZCwKLQkweDBjZjliZWEzLCAweDQzNzkzNTQ3LCAweDQ4YWRkZDcwLCAweGIxZTcxNGE3LCAweGIyYmM3OTUzLCAweDllMjU0YTgwLAotCTB4NzYyZmU0YTMsIDB4MTdiODNhMWYsIDB4Y2U1ZDlmYmYsIDB4ZTFiZGU1ZWYsIDB4ZmU4MGJkNzksIDB4ZTcyOWFkY2YsCi0JMHhmOTE0NWUxNSwgMHg1M2FhNTE3NSwgMHg3NWZjZjA2MywgMHgyYjQ2YjdkNCwgMHhmYzNiM2ZhZSwgMHg4YWY3OWQxMCwKLQkweDRlMWZlMzEzLCAweGU1MDM3YmNjLCAweDM5ODgyZDhhLCAweGNiZWUxZmIwLCAweDczM2MwMzU0LCAweGM2MTIwMTcwLAotCTB4M2MzNjVkY2QsIDB4NDg3M2QzMzcsIDB4ZjUxZTUzMzIsIDB4Y2I3M2YyNzUsIDB4MjllZmNjM2EsIDB4ZGVlODk3OGYsCi0JMHhlYTgwOWNmMCwgMHgzZjE4MzBlYywgMHg4YWM2MzYyNywgMHg4OWJjYmJmMiwgMHhhMGJiNWRjNywgMHhjM2JmNzhlNCwKLQkweDMxODFmNzQ5LCAweDE0ZDczZjdlLCAweDI0OTBiNzgxLCAweDRjZDQ4OWZiLCAweDgyYTlmM2NmLCAweGFlNWJiYTZmLAotCTB4OWJlMWZjZjIsIDB4ZThlYjY1YzcsIDB4YjA2NjEzYmUsIDB4MjFiMWY3MmEsIDB4MTg4ZWE3ZGUsIDB4ODU1OWYxNGEsCi0JMHhjMjFiN2E2ZSwgMHg3Y2RkMjNiNywgMHhiY2MzZjQyZSwgMHg2ODM1Mjc3OSwgMHg2Yzk4N2MzZiwgMHgzMGUxMGNmZiwKLQkweGJhY2FmZjNmLCAweGZmNjc1YTMwLCAweGNmMjUzMWYxLCAweGE2M2UzZmRlLCAweGFiZmZlZGM4LCAweDJiZjdmYWZjLAotCTB4NTEzY2E4MmIsIDB4YjZjYTkyYjksIDB4MDdiZDA3NGEsIDB4ZWE3NWYwYmQsIDB4ZmY1NWM1YWQsIDB4OGZmNWYwOGUsCi0JMHg2NWJkMzJhYiwgMHhlMDU3ZTkwMCwgMHhmNmM3MWU2ZiwgMHg1ZjAyYTM4YiwgMHg3YWY4YmNhYiwgMHhhMmYwNGI2MiwKLQkweGQ0N2Y2ODBkLCAweDRmZmVlOTY4LCAweDYxNWU3N2NjLCAweDQ5YTAzOTI0LCAweGFhOWUzN2ViLCAweGYxNDhjZGMwLAotCTB4MTg2NjVlZDcsIDB4OTA5ZmYwOGQsIDB4YzE1NmE3MWMsIDB4OTI2OTAxZmIsIDB4ZjIwMGZlY2YsIDB4ZjkwZmFlMDksCi0JMHgxM2U0NGIwNCwgMHhmM2RjNTdiNSwgMHg3MGIwMmQwNSwgMHgxYzA3YjcwNiwgMHgwODE4MGY2NCwgMHg4MzU3ZWJhZiwKLQkweDFlZjA5MGZjLCAweGZjOGZiMzI1LCAweDNmMjdlNGI4LCAweDkwNzk3MWMwLCAweGYwYjU3ZGNlLCAweGVmMjUyNmZjLAotCTB4ZDcxNDAyNzMsIDB4NGYyM2Y3NDYsIDB4MGM5ZTVjNWMsIDB4YzJlZDcwMGQsIDB4MGIyZDBjZWYsIDB4YTNlMmJjYTAsCi0JMHg0NzVmNGUxYSwgMHhiOWJjZjIzNywgMHhlZmM3OTY3YywgMHhhZTVlYmE2ZiwgMHgxNjNlMjEwNCwgMHhmMzM5ZWMwZiwKLQkweGZjNWZiNDNjLCAweDM1ZDkyMzJiLCAweDY2OTcyM2ViLCAweDI1NzIyN2ZkLCAweGMzYzM4ZDIwLCAweDYzMjU4MTMxLAotCTB4Y2FjZGYyN2UsIDB4ZTA0NWVlN2UsIDB4MzE0ZTY2ZjcsIDB4MmU1YjlmOTEsIDB4N2NiMmEwZWMsIDB4NzJhN2YxMzMsCi0JMHhlZDRjYjQzZSwgMHhlZDhmNThlYSwgMHhmZjNjNGQ0MiwgMHhiZWU4Y2Q0MywgMHhjMWFhNTM5NiwgMHhjMTU5OWVmYywKLQkweGM0YTZhNzY3LCAweDU4NjA1ZTUxLCAweGE4ODdiZjE1LCAweGVlODk2ZWU3LCAweGM4MTQ5ZTAzLCAweDU2Yzg1N2VmLAotCTB4MGNiYzk1ZTUsIDB4Yjk1NmRmZWYsIDB4NTRjMWVmYzUsIDB4MTIyYmY4ZDMsIDB4NzNkMTVjNzksIDB4NmJkYjk1MWUsCi0JMHhiYTI2Yjk1MSwgMHhiYWY2NDEzZiwgMHhjNjMxYTkzZiwgMHgzOWY0NWVlYiwgMHg2ZWNmYmVmYywgMHg0ZGZmNzJhNywKLQkweGEwODdiY2RlLCAweDdlMWNjZDVmLCAweGIzMzc2NmNmLCAweDAzZmI4MTNjLCAweDcxMDA4MjhlLCAweGI1ZTgxMjdmLAotCTB4OTlmZGNmMGMsIDB4ZWRjOWZlMDcsIDB4MTU0MjllYmMsIDB4MTlhZDUzOWQsIDB4ZWI4ZDU5NjUsIDB4NDJjYzc5YWEsCi0JMHgyN2Y3M2RlZiwgMHhlOGRjZjg3MSwgMHg4MmRiOWMzZSwgMHg4MzY5ZjllYywgMHhlNzE3YmZhZSwgMHhjZTZmMjkxOSwKLQkweDY2OWZlYzEyLCAweGUzNGZmN2U0LCAweGVlZDA4ZGU1LCAweDRmZTE5Y2U4LCAweDBlMzg0MGVjLCAweDNkYTI2NGIxLAotCTB4NzA2YzY4YmUsIDB4MTFmNDA0OTYsIDB4MDZmMzA2YTUsIDB4ZDQ2MzBmZTgsIDB4NDZkMDVmNzQsIDB4NzFmMzEzYjUsCi0JMHg3ZGM1YTg4NywgMHhlZjIxNmEwMSwgMHhkMTgwYzg2MSwgMHg4NWE2ZGVkNCwgMHg5NmE3YzJmYSwgMHhhYmVhMWIzMSwKLQkweGYzZjc0NjI4LCAweGZlZjllYmM2LCAweDU4NjNmNDM4LCAweDQ2NDZiODYyLCAweDdjNzhjODNkLCAweDNlMDBlMTY4LAotCTB4NDY3MGMyZmUsIDB4NDVhNWNmYmYsIDB4M2JmMjUwMTYsIDB4MjY3N2YwYjMsIDB4YjBiYmM1MTgsIDB4ZWE2OGQwN2YsCi0JMHhmZWYxNTBlZiwgMHhjMzk0MzUzNiwgMHg1MjNkZjhlMiwgMHhiNDc0ZWIzZCwgMHhmMWYwYmEyZiwgMHhhNzFmYTRhMSwKLQkweDc3M2RmMDRkLCAweGU3OGQzMjdmLCAweGI4ZTUyODJkLCAweDlmMGY4Yjc0LCAweDQyOWI1YTJmLCAweGQ2OGI4YmZiLAotCTB4M2I0NTI5Y2UsIDB4NDgxMGRlYzQsIDB4ZWYzYjAyZTcsIDB4ZWYwYmE5N2IsIDB4OWQ5NjJmNzEsIDB4ZjU4MjNmNGIsCi0JMHg1N2I3NGVjYywgMHg0YTJmN2MyMywgMHhhMWZiZjk5NiwgMHhkZmZiYTJjMSwgMHg4YzllNjJkMiwgMHhmMmUzMzVkZCwKLQkweDc3NGU1MGViLCAweGY3ODEzZGVjLCAweDRmYmY0ZGU0LCAweDE5ZDNmZWE2LCAweGFkOWE4ZmJmLCAweGRlNmNmN2U1LAotCTB4OGVhMmI4ZWQsIDB4MWVlZmYxODAsIDB4YmNiYzUxMjcsIDB4NDY4ZTYwYzMsIDB4YzBhMTZlZmIsIDB4NWM2OWYzZDcsCi0JMHgzZjVjMmY3ZSwgMHhlYmZkMTEzNCwgMHhiZGRmNzFiYiwgMHg1YTczM2QxZiwgMHgwZmRlNTNiNCwgMHhmYzdjYzg5YiwKLQkweGZiYzU0ZjliLCAweGZlZjhkMzRmLCAweGZlMzhiMGZjLCAweGFlODM3ZjNlLCAweDRiMDgyZTIzLCAweDRhMDkzYjhkLAotCTB4NGVjMjc1OGQsIDB4NThiNGNmNWMsIDB4ZTExNWIzOTYsIDB4Mzc4ZjI4ZjgsIDB4OWI5ODE4NzYsIDB4OGQzZWIxZTgsCi0JMHgzZDY3NmFlMCwgMHgzYWUzOGYxZCwgMHgzYWQwNDZlYSwgMHhhMzliYzYzYSwgMHg3MTBlNWVlOSwgMHgzMzEyZWI3ZiwKLQkweGUzMWQ0Zjk3LCAweDk4Y2U3N2Y5LCAweGE5MjE0ZGRiLCAweDFlZjA3ZjljLCAweGE1MDJjNWQ3LCAweDNkNTY1NzY3LAotCTB4NWJiNDFiNzksIDB4ZTc0ZjRhYmMsIDB4N2QzYzk3MzUsIDB4OGIyYmY5MmYsIDB4YTczYTY0NmIsIDB4ZGVmYjM2YzksCi0JMHhjNGZhMGFlMywgMHhiZmYzZjM4ZCwgMHhkZWZmZDU4ZiwgMHhkMjM5YzQ1NSwgMHg4OTY2ZmU0MSwgMHg5NTU4NjhlOCwKLQkweGYxZmI4YjU1LCAweDRlYzA1YjNkLCAweDQ2ZjlmNzgwLCAweDA1ZGEzYzc3LCAweDc1ODM1NmY5LCAweGJkY2ZkNDhkLAotCTB4ZGMwMWRmYWMsIDB4NmI5ZWYwYjIsIDB4Y2Y5M2YxNDYsIDB4ZTAxZmVkZDMsIDB4MmY1NjE3NzcsIDB4MDM1MDdiYTQsCi0JMHgxNzE0ZWQ1MywgMHgyMTdlMDYxYiwgMHg0ODQxM2ZkYSwgMHg2OWQ3MDAzZiwgMHg3ZmJhNWUwMCwgMHg4OTFlZGQ0MiwKLQkweDM0ZmFjZmZlLCAweDljYzQzY2YxLCAweDM0YmEyNDY4LCAweDBlZTdlNDMwLCAweGU3MTEzOThkLCAweGEwY2ViMWQ3LAotCTB4NmQzMTk5NDIsIDB4ZTA0ZmE3MGQsIDB4MzQ3YWJkMWIsIDB4MDE2MDMzOWUsIDB4NGJiZmJmYzgsIDB4NmYzOTc0ZTMsCi0JMHgxNmFmM2FiNSwgMHg2ZDQwNDNlYSwgMHg2ZTkwNDI5YiwgMHg0ZTdkMTE0NiwgMHg1MGViZGFiNiwgMHgxOGY1N2RhZiwKLQkweDczNzI4YjFiLCAweDdjMmRlNmYxLCAweDRjZmYwMjVlLCAweDM0ZTc0NmRkLCAweDE5OGZhYWJmLCAweDBhMDY3OThkLAotCTB4NGViNjRjM2QsIDB4NGRlNjliMzgsIDB4ODQ0OWY3MDcsIDB4MzFjZjU4N2YsIDB4ZWIxYTM3ZDQsIDB4MmY1YzRlYTIsCi0JMHhmNDhjM2YzYywgMHg5YjgyNmQzMSwgMHhlNWIyMTJmMiwgMHhiY2ZkZmExMiwgMHhmNzQ2MDhkZSwgMHhjZTMyZjRmMiwKLQkweGQ0MWJiZGFmLCAweDM5MTQ2N2E0LCAweGEwMDNjOGExLCAweGQzOWUxYjA3LCAweDdmZmRmMDU1LCAweGYyMjg3ZjY1LAotCTB4NzI0M2UwMDYsIDB4OGExYjkxNDUsIDB4NGJlODUxN2MsIDB4NzRmZTMzOTEsIDB4N2NjMDFmMzUsIDB4NGZlYTY4ZTcsCi0JMHg2MzkxNGNmMiwgMHg2OGQ1MGViOCwgMHhmMDUxN2M4ZiwgMHg1ZTMwZDlhYywgMHg4MTU3NzE0NSwgMHhkMmY5NmNlNywKLQkweDg3MDg4MzllLCAweDJkZDkyMzAyLCAweGVhMzE3MDdkLCAweDVhZDEyZTA5LCAweGNmZjc4NGQ2LCAweGI3OTQzZDU2LAotCTB4ZTNkMjI5NzcsIDB4ZDA2MzczMmYsIDB4ZTA1Yjk4ZmUsIDB4YTdmMjllN2IsIDB4MjhlN2JlMTUsIDB4M2RmNGFjMTcsCi0JMHhlNTZmMzk0NywgMHhmYzYyOGU5ZiwgMHgwZmIwMGQ4OSwgMHg5Y2ZjMDc0YiwgMHgxN2I5ZTVmOSwgMHhlZmVhODYzZSwKLQkweDgxMzE3OTdlLCAweGVhOTdkOWZiLCAweGFlZWZjNTlmLCAweDY4ZjMxMDBhLCAweGE1NWFmM2U3LCAweDRjMzFiZDI1LAotCTB4MGZmODgxZDgsIDB4NzE4OGIyZjEsIDB4MTMxODVkM2UsIDB4ZGZmNTAyN2MsIDB4MDkzZjEwNWYsIDB4ZjFjMWZmYjgsCi0JMHg2N2UwNDY3MywgMHhlODBmYzIxMSwgMHhhZTNhZTE3ZSwgMHgxMjFjM2E5NywgMHhhZDE2MjNjNSwgMHhjMWJhN2MxNSwKLQkweGU3ZjQ3Y2Y3LCAweDMwM2RhYzkxLCAweGZhOGU3M2NlLCAweGEzMTJjN2YzLCAweDczOTVhZjkxLCAweGZjMGRmNmQzLAotCTB4ZjJiNGI1NWMsIDB4NzYyZmQ5MTgsIDB4ODcyZDdlZTUsIDB4MmI1YWZkZGYsIDB4ZWJmOWY5NWIsIDB4Y2Q3M2RmNzYsCi0JMHgyZDM2MTk4MSwgMHhmNzE4MmJjNSwgMHgxZjI1MTZhMywgMHhkNTM2ZjllMSwgMHhiYmY3MTk5MiwgMHhmY2YzYzVmMywKLQkweGI5Y2Y5MjBkLCAweDFlNzQ5Y2I5LCAweGE2OThkYTE3LCAweGEzYjYzYzI2LCAweGNhZjE0MjlkLCAweDBhMmZkMjZhLAotCTB4YTBkYzgyOWQsIDB4ZDVmOTdjNzMsIDB4YmQ0YmI0YTMsIDB4ZjEyMmU4ZTQsIDB4Y2FiMjcxN2MsIDB4MzZkNzc3ZTcsCi0JMHhlYmZkZjFhNiwgMHgxODFhNjQ3NiwgMHhhYzcyNTM3NywgMHgzYmM5MDk3NiwgMHg5NTQ3YzUwYiwgMHg0NzkyOGJmNiwKLQkweGMxYjhjN2FmLCAweGViZjhjZGEyLCAweDMzZmU5ZTQ3LCAweDM2N2NmOWQzLCAweGRjOTRmOThhLCAweGU1ZjdjZTQwLAotCTB4Yjc5ZmUxNTUsIDB4OWZjOWJjZDMsIDB4Zjc3NTdhMmUsIDB4MDMzYmY4YWIsIDB4OTFkNTdmNDUsIDB4MjkxYTI5OWUsCi0JMHg5ZDUzZDlmNiwgMHgzZWQyZjc1OSwgMHg1NWQ3M2YzMiwgMHg2OTNkZjAyNiwgMHhlODQxNjdmNywgMHhmMjM3OTQyNywKLQkweGVjYTFiMmZiLCAweDU1NmNiMmMwLCAweDY1ZmJmOTAxLCAweDkwODdlMDU2LCAweGRmYmZmM2ViLCAweDQxYWZmNTdlLAotCTB4ODhlY2JlM2MsIDB4NDdmZmJmMTIsIDB4ZDY1NTYzYmYsIDB4MWZjNTA1ZjgsIDB4NjQ3NzJlZDAsIDB4NGY5NDc4ZDAsCi0JMHg1Y2JmZGZlZSwgMHhmYjg4MmVmYSwgMHg5NzA0ZWRiMSwgMHg4NGRmNDNlYywgMHg1ZmY2M2NkMSwgMHhmOTc5YjhhNSwKLQkweGY2NjE3NWExLCAweGRkN2RkNjdlLCAweGNmMTEwMTM5LCAweDJhZjgxNzI4LCAweGUwYWY5YjY3LCAweGFhZjk1YWZlLAotCTB4YzgyY2YzZGMsIDB4YmY3ZmJlMzMsIDB4Y2UyMmU5NzUsIDB4OGRiYjFiNzAsIDB4NGNkNWQ2ZjIsIDB4NWNjZjdkZTUsCi0JMHgwN2UxMzNhZiwgMHhiN2NiMjVmMywgMHhiZDlkNzNmMiwgMHhkYzAwY2I2YSwgMHhlNzE2ZWI5NywgMHgxZGRiZmNiNCwKLQkweGMzN2VlNzRmLCAweDBjMjdlMDY1LCAweGM4Mzc3NDQ0LCAweGRkZDNjZmI0LCAweDY1NzhlM2MwLCAweGUyYjU0ZjBkLAotCTB4NzAzMmQ4ZjksIDB4OTU5ZDkxOWMsIDB4OGQ2NTQ0NzMsIDB4ZWI3YmQzMzIsIDB4MWE0N2NjMzUsIDB4MTY3OWUzNzgsCi0JMHhmZGQxMzZlZiwgMHhjOTJlODUzNCwgMHhlOWYzMGY1NiwgMHg5MDY5N2YwNSwgMHgxNjVlN2NkNywgMHg3M2FjNTU3NCwKLQkweGNhZjhlMTY1LCAweDcyMTA1ZmZjLCAweGQ4NTc2OTRjLCAweGI3OWQxNGYyLCAweDY0NWQ3Njg1LCAweDkwM2VmYzlmLAotCTB4OWViMmZkZjEsIDB4Y2VjZjM4MTMsIDB4N2Y2ODYzNmQsIDB4YjdiNWQwYWIsIDB4MGQ4ZmUyOGMsIDB4NzJiNzk0ODEsCi0JMHg3ZTdiZTM1MSwgMHhkZWY4OWY3YiwgMHg2NzZlNzRiZSwgMHgyNGRlNjI3NCwgMHhhNjU1N2ZmNiwgMHgxM2NlMTliOCwKLQkweGU0YTJmMWY5LCAweDJjZDFjZjliLCAweDczYTczNWZhLCAweDNhN2U2NTNiLCAweDdkYTUwM2U3LCAweDI4MjNhYmExLAotCTB4NmY5ZmRhMWUsIDB4NmY5NTEzZmEsIDB4NmY3YzdiNjEsIDB4YmQ0NzRiNmMsIDB4OTAzMWJlNzksIDB4NmY5ZWQzY2UsCi0JMHgwZGU3M2U3YywgMHhkNzY1ZGVmOCwgMHg4YmM5NTBmOCwgMHhmM2E3NGViZiwgMHg2ZGU1ZTVmOCwgMHg3M2IwNWNlMiwKLQkweGUyNjczOGEwLCAweDM2NzRmNWEyLCAweDVmZTg0OTQ0LCAweGFmZmM4YTk2LCAweDQxN2RjNmNlLCAweGM3NWZlMjJhLAotCTB4NjI3YmY2N2YsIDB4ZWZiYmFmYjMsIDB4MjY0Yzc3YWMsIDB4Zjc2Y2JmOWUsIDB4N2ZlY2VmYjksIDB4ZjEzMmZjNmIsCi0JMHgxM2NhYThkYywgMHhiN2JmZTFkZiwgMHg1ZGRmOTRjYSwgMHg0YTc2ZjMzMSwgMHg0OGZlNzYzYywgMHgwZTc4MDNjYiwKLQkweDdmYzdiZDk3LCAweGZlZWMwZDk3LCAweDlhM2ZkMTY3LCAweGU0ODFjN2ZmLCAweGFkZWZlMjdmLCAweGY3ZWJmZDYwLAotCTB4ZmNkOWJlZjksIDB4NDRhZTQyMzEsIDB4NGNiZTUzYjQsIDB4MWZiNzBjNDcsIDB4Y2M0ODM2NGEsIDB4MDYyYjcwMDYsCi0JMHg2ODAwNzJmYSwgMHhiMzMyOWM0YiwgMHgyMzFkZmRlMywgMHgyNzcyZmVmOSwgMHgyNDc2YmZkMCwgMHg2N2NhMGJjOSwKLQkweDFkZmUwMzM5LCAweDZiYzEwZWZkLCAweDI0YjkzZjdjLCAweGU3ODg5ZGQ2LCAweDVlNDUzYjAzLCAweDNiODg0OTQxLAotCTB4N2I4YzIwNzEsIDB4Yzk0OWQwNDksIDB4YjdhMjc3NGMsIDB4ZGRiMjUzN2YsIDB4OTczNTc5NGQsIDB4YmUxZDNlNDQsCi0JMHhjOTVlNzhjNywgMHgyM2FlZGU2OCwgMHhlNzQ1ZGNjNiwgMHgxODliZjYzOCwgMHg4M2FhYWJkYSwgMHhkMmMzYTIyNiwKLQkweGJkZGIwZDk3LCAweDQ2OTlkNWNmLCAweDkyZmZmYjcyLCAweGVlMWJkZjk2LCAweDUzZTdjMWQ4LCAweGUzNGQ1NDE4LAotCTB4NWRmNDEyNWMsIDB4ZjM0ZDUwMTgsIDB4MjljZTIzM2IsIDB4YmQ3OTZhMTcsIDB4YmVlOGMzNDMsIDB4ZmM1ZDllZmUsCi0JMHg5MThiYTEzZSwgMHgzYmYwMDc2ZCwgMHg1MGE1NzcxNywgMHg4YzQ3NjlkZSwgMHhiZDEzNjk3MywgMHg0NTI2NzllNywKLQkweDM4ZGNlOGFmLCAweDRjYmIwYmFmLCAweGY3MjgyZTc0LCAweDlmNjk1Yjk3LCAweDI3NGViN2IxLCAweGMyZTFkYzYxLAotCTB4MWVlNzQ2MjAsIDB4MjIwZmQ0MmUsIDB4YjI0MTdkN2QsIDB4YzJmMzdjNTAsIDB4YmM2OTAzYmIsIDB4NzQ5NWNhYTIsCi0JMHhjNDA4YTViZSwgMHg1MDlkZGEwNCwgMHg3NmJkYTJlNiwgMHg2OGI5ZmVhMSwgMHg2ZmE4NWZlNCwgMHg1NTlkYmFjMCwKLQkweGYyMzlmZmNmLCAweGJiZmU0ZWU5LCAweGY5NWYxNzEwLCAweGJlZjc4YTdiLCAweGVmZmE1MjhmLCAweDU0ZjgyODlmLAotCTB4ZTQ4ZGE3ZGUsIDB4OTIzNjk4ZmMsIDB4OTFhOGYzZjMsIDB4M2JkZTdlNjYsIDB4MmM0Y2Y1ZDAsIDB4MzdmMzhmYWQsCi0JMHgwMmZjOTljMCwgMHhhZmJhMjdlMCwgMHgzOWFiOGNlNywgMHg4YTcxODI0YywgMHhhODZjOWEwZSwgMHhlZTM0M2JkZiwKLQkweDBlMDllN2M0LCAweDc4NzdlMjgxLCAweDE3ODVmOTE4LCAweGJmMjQwYzc2LCAweDFhNjhhYzFjLCAweDM0OGVjMmU3LAotCTB4ZjI1MmQzY2EsIDB4YWRhMWE2NGQsIDB4MjM0Yzc4NDYsIDB4ZGJjYjY2ZjgsIDB4ZTVmZWU5ZDIsIDB4YzdjYTQwYmEsCi0JMHgzNmZjN2EyOSwgMHhjODlmZTUxNSwgMHg3YTJlZWVkYywgMHg1MTM0ZjE3NSwgMHg0ZDdlZTFiNywgMHhhMTdmY2ZkMSwKLQkweDkzZTI4YmMwLCAweDg5Njk1ZTRhLCAweDhmYTVhMzkwLCAweGYzMDAzMWRmLCAweDY1MWZkOTcwLCAweGFhYmI5M2NhLAotCTB4ZmU4Zjc5ZTYsIDB4NDhlNWY5NzAsIDB4YmMwZjQ3MjEsIDB4MDI1YjdjNDAsIDB4YzNiZjhlNzQsIDB4YzJmMjJjNTQsCi0JMHg3MWUxNWY4YiwgMHg3N2Y1ZTI5NiwgMHhmMWYyNGIzYywgMHhkZTYxODY4NCwgMHg1M2Q3MjVlZiwgMHgyZjcwZGU0MSwKLQkweDk2ZTVjOTE4LCAweGRhOTViZmE3LCAweGRlN2I0MzE3LCAweDlhMjBiZGZmLCAweGU1MGQwZWNmLCAweGViZTNmYjI5LAotCTB4MjJiZmZiOTYsIDB4OGJmZDViZmYsIDB4ZjQwNzYwNWMsIDB4OTU3YzFmYjMsIDB4NTdmMjNkYjUsIDB4MDYwZDAzOTQsCi0JMHhmMjllODNhYiwgMHg4ZDRlYmRmYywgMHhkZjNmMjk2YiwgMHhkMGY5MjA2MCwgMHhhZjdlMmMxOSwgMHgxMWU3OTJiNSwKLQkweGZhOWZhZjE0LCAweDM4NTdjYTZiLCAweDY5OWQyZjc1LCAweDdmZWNlNjVhLCAweGE0NzRhZWJmLCAweDBmOGJlZjg2LAotCTB4M2U0MDBlYjQsIDB4ZTA3YzA1MmMsIDB4M2ExZjgwNzgsIDB4YThmZWNlNWYsIDB4ZWJmZWZlYTEsIDB4Y2I5MjNhOTksCi0JMHhkYzNlM2VmNSwgMHgzYmExZjNjMywgMHg3NGJjNzMwNywgMHg3YTQ0OWFiZSwgMHhkMzk4MjNhNywgMHhmYzk3Y2MzNSwKLQkweDVlNjBjZWQ0LCAweGU2MDRhMjUyLCAweDNkMzk5OGRmLCAweDkxNzc4ZTc0LCAweGVkMjlkZGZmLCAweGMzNDNiMmE1LAotCTB4MTRhZDE1ZmIsIDB4ZTZlMjJiYmYsIDB4NDgyNTIzZjksIDB4ZmY3ODcxYjMsIDB4YjQzNmU2Y2YsIDB4NjcxZTUwM2IsCi0JMHhhZGQyYTY4ZCwgMHgxZWZlYjkwYiwgMHhmMjYzYTA3NiwgMHg3ZTBhOGVlZiwgMHhlODcwZjI1MiwgMHhhZTI4MDE3NywKLQkweDNjYTJkMmU5LCAweGFmYmIwYmI1LCAweGRmZmFlMWE0LCAweGVmZTdlMDhiLCAweGFlNDNjYTI1LCAweGZiMjkyOTFiLAotCTB4NTQwNzk0ZWMsIDB4MmIzYzI1Y2MsIDB4OWZiNDQ4NzYsIDB4YTFmNmJjNWYsIDB4ZTJmYmE0NDIsIDB4OTE3MzJkOGEsCi0JMHgxNDc1OTQxZiwgMHhmYTJlNTlhYiwgMHg0YzkyMWQ0OSwgMHg3ZWJmMDFmMywgMHhlYmQ0Y2NjMSwgMHhmN2MwYTdiZiwKLQkweDE5N2NjYWY3LCAweDNkMjdjZmRmLCAweDZmYjZiYzAzLCAweDUzYjE0NWE0LCAweDU3OGMzNTU5LCAweDRjZGE1NmIyLAotCTB4ZmM1MTg5ZGYsIDB4MDUzZWJlNGUsIDB4ODNlZmI4NGUsIDB4M2M0YThjZjksIDB4NTdlYjQ2ZTAsIDB4ZjlhMzc5ZTYsCi0JMHg3NWU0MjNiYywgMHhkN2U1OGM0NywgMHgxZmRmMTBlMywgMHhhZTRmMjRjOCwgMHg0MDY2Mzc3ZSwgMHg2ZGQ4MGZjOCwKLQkweGNhYTE0YmY0LCAweDBmZmYzMDc4LCAweDM4YzExNzUxLCAweDU2NzkwYWNmLCAweDc5YzNmMzBjLCAweGZkZjM2ZTI2LAotCTB4M2FlNDgwN2QsIDB4MDZmMGZhZGYsIDB4YTM2YTdhZGYsIDB4YzViZDNkNmYsIDB4ZGI3ZDZlYjcsIDB4ZGY4MmRlYjcsCi0JMHgwOWMwZjRjZCwgMHgwNzNjNjFmZCwgMHg4NzljNTNiMSwgMHhjZjE4N2Y0MCwgMHg4YzNmYTEzMywgMHhiMTg3ZjQ3NSwKLQkweDlmMTg3ZjQ0LCAweDc1OGMzZmEzLCAweDhlYjE4N2Y0LCAweDg5MjViMGZlLCAweGEyNThjM2ZiLCAweDY1Y2Y4YzNmLAotCTB4NDk1Mzg3MmIsIDB4MDIzZjhmMmQsIDB4MmZiNDZjMWUsIDB4NWRmOTQ3M2YsIDB4ZDEwYmYwMGEsIDB4NDIxYzJkMWUsCi0JMHg3Y2M2MWQ3NiwgMHg3ZTk1NzdlOSwgMHhkMjI5NmQ3OSwgMHhmZDkzMGNkMSwgMHhjYzRjYzhkMiwgMHgxZjViNmFjNywKLQkweGYyZmRlZDg5LCAweDFiNDY0YTk0LCAweDY4NmYxODhjLCAweDNkN2U3NzVmLCAweDI2MjkyMTlhLCAweGFmNmMxNWZiLAotCTB4YWU5NTJmZTQsIDB4NGY3ZThiN2MsIDB4ZTViNTdkYWYsIDB4NzhlMTNmOGYsIDB4ZjI4N2I4YTIsIDB4Nzg0NTRmN2IsCi0JMHg3MTRjYmU0ZiwgMHhmOGEzM2QyZSwgMHhkZmRmNTU5ZSwgMHhmOWZlZGMzZCwgMHg2NzlhYjc0NiwgMHg1ODAxZmZmNCwKLQkweDAwZGI4YmJiLCAweDAwMDBkYjhiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjY2RmZjAwLCAweGQ1OTQ3NDBiLAotCTB4ZTZmZWVmYmQsIDB4NDkzMjQ5OTUsIDB4NDFlNDIxMjYsIDB4MjFlNGNjMjAsIDB4NDkzODkzMTEsIDB4NDcxMTRiYzgsCi0JMHhhOGQ1MzA0OCwgMHg2ODRkNDNjMywgMHg0MDkyMTM4YywgMHhhM2MzMDQ4MCwgMHg3Yjk2YzRlYiwgMHhhNDQwMTgzMywKLQkweDUxYjc4ZDcwLCAweGExM2EzOTUxLCAweGU4NWRlOTRhLCAweGI2OTUwYTA5LCAweDEwMDY3MzljLCAweDRlNmQ4YWM1LAotCTB4YjZhYmFkNWIsIDB4YTkwNzg4MzgsIDB4NjgzNDk2ODcsIDB4NjllZGVjNTcsIDB4ZGZmN2ZmZWYsIDB4YmVmOTk3ZGYsCi0JMHhiYzdiNTI0OSwgMHhhY2RkNzdhYiwgMHg3YmZlN2JhNSwgMHhmZTNmNmZlZiwgMHhlZmZmZmRlZiwgMHhmYzQyMTA4ZCwKLQkweGZiNWJmZTg1LCAweGRhZjA4YzdjLCAweDg1ZmRmZjA1LCAweDQ0MmZkZmZmLCAweDU5Y2YxMGI5LCAweDBlOWQzMjQ3LAotCTB4ZDc3YzJlMjEsIDB4NGY1YzViYmUsIDB4MTg2OGFjNjUsIDB4MDZlNmE0MmEsIDB4MDlhNDQ5YmIsIDB4YjhkZjExYjEsCi0JMHg1MzM1YTg4NCwgMHhlZjA0NzlhNywgMHgyOGM3ZjY1MSwgMHhhNGYzNGM0MiwgMHg4ODVkMzEwOCwgMHg0OWY5MzNkMSwKLQkweDA1ZmZmYTgyLCAweDJjNGYzNzdmLCAweGE4Y2FjNzViLCAweGFkZGUwZWIzLCAweDZjY2YzMDk4LCAweDU0OGFmMDliLAotCTB4NzM1ZGZiMWEsIDB4NGYxYTA1ZjAsIDB4YTI0ZDc5ZDQsIDB4ZWE0ZDg4NDIsIDB4MzVlY2U3MWEsIDB4NTkxMDUxMDksCi0JMHgzOGMxYjVlZiwgMHhiZmViNzQyMSwgMHgwMThhNjBlZSwgMHg2MTlhMWEyZSwgMHhiMWZkN2ZlOCwgMHg0OTdiNDMxYywKLQkweGJkYTFhZTY4LCAweDEzZDZmOTZkLCAweDk2MjE0NGU2LCAweGY0MzMyZWVkLCAweGJjMTE2YWJiLCAweGE3Y2ZhYmNmLAotCTB4ZWE2ZTAzMDcsIDB4ZjBkMWJiZTcsIDB4M2FlYTEwOWQsIDB4OTM2ZWIyOWQsIDB4YzNmY2U0NzUsIDB4ZDFkMzdmZDQsCi0JMHhlMzAwNGY0YywgMHgyZjBiMzVlZSwgMHg4ZDAzYjdlZCwgMHgyYjY0NDJhNSwgMHg0ZjE4MWQ4MSwgMHgxNzllMmEwYywKLQkweDZhNTZiYzY4LCAweGU4YmI1M2Y3LCAweDlkMzhmM2IxLCAweDJjM2I3ZTJhLCAweDJkYTRlMDIyLCAweDliZjM0NDdkLAotCTB4ZDFlNzdmYTksIDB4YzI1NmUwZjQsIDB4YzljNjFmNGIsIDB4ZjBhNzc2YTQsIDB4NmI3OGQzMjYsIDB4ODcxNzBlZTYsCi0JMHg2ZjM1OWM2OCwgMHhkMDQyYmI3ZSwgMHg4M2NjYmIxNiwgMHgyMTVjY2VkOSwgMHgwM2MxMmIzNiwgMHg5ZjEwYjM0ZSwKLQkweGFiNGUxY2E0LCAweGQ5ODc3NmE2LCAweGY0NDNjOGJmLCAweGZjYTY3Y2I5LCAweGU3ODQ1NWM3LCAweDFlY2M4N2NiLAotCTB4MGQ2ZDkzY2MsIDB4MjkxMjk1YTUsIDB4YWIyNjgzODUsIDB4MDM4Y2VjMDYsIDB4Y2RmYjA3ZmQsIDB4NjNhMjQxNzUsCi0JMHg5Y2MzYWQxNiwgMHhjMThmZTExMiwgMHg3OTcxNjlmZSwgMHgzNWJlYzg4ZSwgMHgwYjZkOTg3ZSwgMHg3ZDg0ZGNjZCwKLQkweDc5ZWIxY2JkLCAweDBhM2Y4MDQxLCAweDlkYmM2MmVmLCAweDhmZTAyYjMxLCAweDgwOTQ1YjhlLCAweDNlYzhmYWVkLAotCTB4NzdlNTNhMzcsIDB4ZWEzZTdlZGEsIDB4N2MwNjMyYTUsIDB4ZGIzZTY1ZTYsIDB4YmU1ZmI2YWMsIDB4OGJiMTQ0ZjYsCi0JMHg3YmQ5ZDFmNiwgMHgyYzRjZGIyYywgMHhlODc0Y2ViMCwgMHgwMTk1MjY0MCwgMHhmYjE5YmZiYiwgMHhmZmNjMThlOSwKLQkweDY3OWE3Y2M1LCAweDYxNjYzYmVkLCAweDNlZmZmZWE2LCAweDlhYjEyOGIwLCAweDhiYzlmN2Y2LCAweGMxM2Q0ZjU2LAotCTB4ZGI3ZmY3MGYsIDB4YWM3ZGE2MTYsIDB4MWU2ZDA0YjUsIDB4M2JiZTNiMmEsIDB4Nzk1MmYzNjgsIDB4YWU0MWMxZWIsCi0JMHg2NWIwNzU1ZiwgMHhiNTc1ZjgzMSwgMHg3ZDgxZGVlOCwgMHhiZjEyYjI1ZiwgMHhiMWQxZjBlYiwgMHhhNGU3ZDk1MCwKLQkweDMxZWViZjc1LCAweGM0Nzc3ZjMxLCAweDZiZGEzZjA5LCAweGE3NGZmM2NkLCAweDk1MDc3ZjYyLCAweGI5N2IyYzEyLAotCTB4ODVhZGIwZWYsIDB4N2VkNDdiZWEsIDB4N2EzMmYyZDEsIDB4NzRlZDU5NzYsIDB4YTQzYTNmZWEsIDB4OTJhN2RlMzAsCi0JMHhkNzQzYmI4ZiwgMHgxYjJjN2NiMiwgMHg3Y2I5NzM3MywgMHg4ODIxM2FlYywgMHhiZTExZGYyNSwgMHhhNTc0NDEyMiwKLQkweDNlZjAxYWI1LCAweGZjY2NkNjdhLCAweDFjZGM3YTM5LCAweDg3NDlmNDE0LCAweDBjYmE5NDJkLCAweDJiMTdmODc0LAotCTB4Zjg4YmExZDMsIDB4YTRmODhhYTcsIDB4NDBkZjdlOGIsIDB4ZDliZTZmYTUsIDB4ZDQwZmJmYzAsIDB4YmRmODFiYzQsCi0JMHg4OGU0ZTg0MSwgMHhjYzQ3YmJjNiwgMHhlYmNiYzAzMCwgMHhlZmZkMGQ3MywgMHg5NDVkN2U1ZCwgMHhkYTQ2OTQzYywKLQkweDBkZmZmOGNkLCAweGJiODI3NjkxLCAweDRhNWMwNGI2LCAweGM2ODVhMDIyLCAweDMwYjcyYTdhLCAweGY4NjZkZDlmLAotCTB4OGQyYzRiYmUsIDB4M2Y5ZjAzZjQsIDB4Njc4YzZmZmYsIDB4NGI2ZDg2MjEsIDB4MjZiZjY4OGIsIDB4YWZkMTA3YTIsCi0JMHhhZDVlN2ZjMSwgMHg2ZDNkNzMwZiwgMHhiMzk3MjBjNCwgMHg5OGJmM2Q3MywgMHhmMjMxN2M0ZiwgMHg0N2VjNTViNiwKLQkweGRmMDg5ZmM1LCAweDdmNDZlODE1LCAweDIwZTkxM2I5LCAweDlkNWExMTA0LCAweGIxZDY4OTM3LCAweGE5YzkwOGZlLAotCTB4NjE4YTVmNDEsIDB4MDZlYjE3ZDAsIDB4NzRiNmJhMWQsIDB4MmE2MjhiZDQsIDB4YjQwNTliZTksIDB4YjBjMGFlOGYsCi0JMHhmOGMxZGJhZCwgMHg0YTExNjRiNywgMHhhMjJiZjdkNiwgMHhkYmZiODUyNywgMHhiYzI0NTJiMywgMHhhYzQ3ZjUwNSwKLQkweGY4NzU4NjFmLCAweDY4NjM3OGMzLCAweDgxNmU2MzNmLCAweGFmYjc0NGJjLCAweGFjMGI3ZGE3LCAweDNkZmVlYzQ3LAotCTB4MmRmYWQ1ZjQsIDB4ZGU2MzFmNzUsIDB4ZWEzY2RhZjUsIDB4YWU5ZjFhZjgsIDB4ZWJkZjRiZGUsIDB4OWUzZDFkZDYsCi0JMHg3MmM1YzRhMywgMHhlMWUwZjZiZCwgMHg3ZTEwNjdkNywgMHg0YjkyZjk5NiwgMHg0MzlkNDcyMCwgMHg4NTJkYWM0YiwKLQkweGQzNGRmOTEzLCAweDlhMGY1N2ZiLCAweGYwNmUzMTgzLCAweGI3ZTYyOWRmLCAweDhmNTY4M2QxLCAweGIyZjAxYmY4LAotCTB4MGYxODJiZGUsIDB4OGFiODdjZDEsIDB4ZjlhNzY1ZjYsIDB4M2M1MTFkNTcsIDB4MDNmNjQ1NDEsIDB4ZjE0NmQ2N2UsCi0JMHg5YWNkYzYyNywgMHhiZTFhNmYwNCwgMHhkNTE3ZjFjNiwgMHg2ODNmMWFiZSwgMHgyOThmYWI5ZCwgMHgwOWNiZTg0MSwKLQkweGE3YzY4OTc4LCAweDNmMmFjZjNhLCAweDBhZWI5MGZkLCAweGM2YTJiYWYyLCAweGYyZDE1NTE1LCAweGZlODZjOWI4LAotCTB4ZTExNGZiYTMsIDB4MWYxOGJlNTQsIDB4MmM2Y2M3NGIsIDB4ZTU3M2IzZGYsIDB4MmE4ZTQ3ZmUsIDB4ZGRmNGZkOWUsCi0JMHhhZTE2NjMzZCwgMHgxZjFmZTcxZiwgMHhmMjE0YWRlMSwgMHg5MjFmMDEzNywgMHg3ZTUyN2M5ZiwgMHhlMzRiMWVlZSwKLQkweDdjNWVmZWVmLCAweDM0ZmM0NWY1LCAweGVmZGM1NzNiLCAweDdhZjQ0NDczLCAweDYyMWU5ZTQ0LCAweDQ5Mjk0YjNlLAotCTB4NWI0OGJkNDgsIDB4YWNlNWRmYTAsIDB4M2IzZDU0MWYsIDB4NGQyNDNlOTUsIDB4ZmM5NGZhY2YsIDB4NzFlN2U2MDMsCi0JMHhmODk0ZTNiYiwgMHhhNTc1NjhkYywgMHhlYjRmODMyNywgMHhkNDY4ZjY4YywgMHhkNjRhNGFlMiwgMHg2NDJkMjFmOSwKLQkweGMwZDM1ZDY3LCAweGMyZDMzM2JmLCAweDYwOWY4ZTM0LCAweDRmNGQ1N2U4LCAweDc2ZjFkNWZiLCAweDBlY2RjYjZjLAotCTB4NmZmM2JlZWIsIDB4ZWEwOWE2YjcsIDB4MWE3NWJkOWYsIDB4Y2ViMTJkOTcsIDB4OTY5MWQ4MzQsIDB4ZWMxZjY2YWQsCi0JMHhhNDhmODdlMywgMHg1ZjExNTVhNywgMHg5YWRkYjg3ZCwgMHg3YzQzNGY1YSwgMHg2Y2JjZTBmOCwgMHg5NmI4MDQ1MSwKLQkweGM1OGYwYmNiLCAweDEzMWQwNDM0LCAweDYyNWQ1NWY3LCAweGZkNzQ3YzYyLCAweGFlZDhmN2Y3LCAweDM2NzRkNmZkLAotCTB4Yjc3MjAxYjEsIDB4MTU2MjY4ZmQsIDB4ZmI2ZWIzOGQsIDB4NjQ5YzJhY2YsIDB4ZmU0Yzg3Y2YsIDB4ZmZkYTEyYmEsCi0JMHhkYjIwY2EyNywgMHgyYzFjZTE3MywgMHhmYzQ1MTVmNiwgMHg2YmRiYjU4OSwgMHgzYmY3NjFkMywgMHg1OWVhN2NmZiwKLQkweDU2ZmY3ZGQ4LCAweGY4ODk5YTZiLCAweDI3M2YzN2U4LCAweDNkYjBhODdiLCAweDUyZTIzZjYzLCAweDRiZTNlNGFjLAotCTB4ZmIwN2M0MmYsIDB4MjkyZmZmODgsIDB4ZjU0YjFiYzIsIDB4OGEyN2NjNmIsIDB4N2FmYjA2OWQsIDB4ZmZjYzFlZmMsCi0JMHhiNzlhNzZjZiwgMHgwZjA2ZjMxYywgMHg0ZjVlNjA2NCwgMHhlYmNjMWFlMCwgMHhlNDlmOWFkZiwgMHhkZGZlMmJmZiwKLQkweDdmYTU3YjAzLCAweGU3YjU0MDc3LCAweGEwMzI4ODU3LCAweDNiNWVjMWRiLCAweDk3YWJmZmMzLCAweDg4NDczZDEwLAotCTB4MGMxOWJkNDMsIDB4ZTJlYmQ0YmYsIDB4ODBiN2E4NzIsIDB4MzkxNGQ3ZWIsIDB4NDZmYmJkMjUsIDB4M2NkMjM2NGEsCi0JMHhhMGEyODU4MSwgMHhhM2FkZWQ5YiwgMHhkZmViNDJjMCwgMHhlMDc5YzRhNCwgMHgzYzUyNmM0ZiwgMHhmZGQwNGVlOSwKLQkweGNlZDJjOWU3LCAweDVlOGJmNGFhLCAweGU0MjM0ZGNmLCAweGYzZjhlOTgzLCAweDY4YmIzMWU2LCAweDJkZWZmMWQzLAotCTB4MmYwMGQ5MjIsIDB4ZmExYTY3YjIsIDB4ODZkZDNhZDcsIDB4YWUzMzViZjYsIDB4YzU3ZmI0MzUsIDB4NmY4MDYyNTUsCi0JMHhmNDM2YTgyZiwgMHg4YjczYzNiZiwgMHhlYWFiYmUwMSwgMHg0YmZlODYyYiwgMHhmMDBjNGJiYywgMHg0MzQ2YmFiMiwKLQkweDJkN2RiYmZmLCAweDFiN2JmNjg2LCAweDFiZGExOGQ2LCAweGYwMGMxYmZkLCAweDM0MWUzYjU3LCAweDdiYWZiZmY0LAotCTB4MmJkZGExYWIsIDB4YmJkODE2OWMsIDB4MTcxZjQ0ZTMsIDB4ODg1ZmZkZTEsIDB4YmQzNzI4MmUsIDB4ZDNkMGVmOWQsCi0JMHg1MzIyZmU3NSwgMHg3YzI0ZDBmNywgMHhmNDg5NjhmYiwgMHhlYTUxN2U2ZiwgMHg5OGZlMDVkZCwgMHg0ODdjOTI2NSwKLQkweGMzYWUxN2E1LCAweGQ0MjdiMDMzLCAweDBhNDIyNTllLCAweDM4NjIyYmZiLCAweGRkMTM3YzEzLCAweDdlN2RiYTJmLAotCTB4MmVhYmM5ZmMsIDB4ZjRhZGExYTIsIDB4ZTkwYjA2YzMsIDB4Mjc5NWY5OGQsIDB4YmUwOTcyY2IsIDB4MWI2YmU1ZjMsCi0JMHhlNjFmYTQyZCwgMHgyYWYyNzhkZiwgMHhiNjk1MWZlMCwgMHgzMmZiNzIzNSwgMHhjMzQ1YWVjMSwgMHgwNDM3NmZjYiwKLQkweDZmZjM5ZDY4LCAweDgxZWRkOWNlLCAweGU5MTNmM2RmLCAweDlmYzU0Y2Y3LCAweGJlNWI3N2Q4LCAweDEwY2EzN2RjLAotCTB4OTNjYTIzZjEsIDB4NWYyODhmYzQsIDB4YjM2YzdlMjMsIDB4ZmM0N2JmOTIsIDB4YWY0Y2YyODgsIDB4ZDQ3ZmViODcsCi0JMHhkOWU1YzU1YiwgMHgzZjk3MmY1ZSwgMHg3MmUzYWRlZSwgMHhlNWM3ZDdiOCwgMHhiODFiN2I0ZiwgMHg5ZmFmNzlmYywKLQkweGI3Yjc3YmJmLCAweDdhZjdjYjgzLCAweDk3ZmViOWJiLCAweGZlNWMzZGJkLCAweGY1YzAzN2FhLCAweDJjMjg5NmFmLAotCTB4MDEwMmI0ZmYsIDB4MDM3YjA1YmQsIDB4Nzc2ZjVkZmUsIDB4NzdhNGNjODQsIDB4ZTVlYjMxYzUsIDB4ZjI0YWJkNzEsCi0JMHhkZGE1NzhhZCwgMHhhMmE5NWM1NCwgMHg2ZWJlY2E4OSwgMHg1Yzg3OGUxMSwgMHgxN2M5MmQ4NiwgMHgzOWY4YmU4OSwKLQkweDdhMjM3ZWQ5LCAweGVhMmUyMmQ0LCAweGM2MWZhZGZjLCAweGFmNDI0ZjdhLCAweGM5ZDMzMTA4LCAweGZmYWQ1OGZhLAotCTB4NjllZjUyYTcsIDB4MTVlZTVmYWUsIDB4OTc3YTdkN2EsIDB4ZDAyM2ZmZGIsIDB4YjJmNzFkZmIsIDB4ZWMzMzMyZmMsCi0JMHgyNGU5Zjc1MywgMHgyNGM3N2E2YSwgMHg5M2UzMjYzYSwgMHg1OTNlNTQ2NywgMHhjNjJjNGY2MCwgMHgzZDgxNmVmOSwKLQkweGIyN2IwODNiLCAweDgzZWUxMmMwLCAweDRjZmJlYTFlLCAweDNkMjIxZWI4LCAweGM2YzEyMjc0LCAweDExZWZhOTdhLAotCTB4Y2ExM2ZiMGIsIDB4OWJlMTgyYTcsIDB4N2RjMzA1NTIsIDB4YTE5YjBkOWYsIDB4M2QzODE3NzcsIDB4NTQ1NzZjMTksCi0JMHgwMjJlY2YzOCwgMHhkZDcyMjk0OSwgMHg0YTFlNjc1OCwgMHhhN2NkNTNjMiwgMHhmM2IwNDVlMSwgMHgyZTZjMzkzNywKLQkweDVmOWMwOWU4LCAweGNmMzE0YTYyLCAweDAyYmNkYWJiLCAweGQ3YmQ1MmUzLCAweGZmM2ZkZjQ2LCAweDY4OTkwODk5LAotCTB4NWZhOGIzNWQsIDB4MTBhNWYzMmMsIDB4ODdkODE3MjgsIDB4ODc5MjNlY2QsIDB4Mjc2ZjU0OTksIDB4OWJkNTE2NzgsCi0JMHgwMmQ3YmI2NSwgMHg2YzNhN2MzYSwgMHg3NmExMWQ4NiwgMHgwM2RiMjQ5MSwgMHg3Y2M4OTRhNiwgMHgyYzEzM2FkYSwKLQkweGVjYTk3ZTM0LCAweGU3MmE1ODk3LCAweDM5YzBiYzAxLCAweDNhZDBhMjU0LCAweDFlMWNiYWZiLCAweDAyZGQyMWUwLAotCTB4NWVmZWU3ZGUsIDB4NTQzZjdmMzMsIDB4M2ExZTA0ZTIsIDB4ZmI0MTFlMWQsIDB4ZTIwNTJjMjAsIDB4YWYxZmI5NGEsCi0JMHhkNzIyYzEzMywgMHg1ZmE5ZjM1MywgMHg0MzJmZDE3OCwgMHg3MWQ0NjI3OCwgMHg4MDNkYjJlYywgMHgwZDRhNmU3MSwKLQkweDhmODA1YTY1LCAweDIwMjc5YjZlLCAweDlkNjJmMWM3LCAweGZiMmYxN2U4LCAweGI5M2FjYzg1LCAweGFkMDNmYmNkLAotCTB4YWNmZmVjOTcsIDB4ZjQzNzYxOTQsIDB4NGM0M2YxMmUsIDB4MmJkNGY4MjksIDB4NTM5OTYxZjksIDB4YTk3MDgzZjIsCi0JMHgxYTFmY2FiMCwgMHg0YTc1MmNiZiwgMHhlZGNhZmM5MiwgMHg3OGQyOTY3NywgMHhhZmU3MThiZSwgMHg3ZmNlNDllMywKLQkweDk3ZTZlNGFhLCAweDUxMmNkZjEwLCAweDFmYmZmNWZkLCAweGZkMjU3OGJmLCAweDdiYmQ1MjY3LCAweGY0NjhkZjIyLAotCTB4ZTM0N2Y4ZDEsIDB4ZDIzZTY4ODMsIDB4YjdhMzQwZjgsIDB4N2YzNDVkZjYsIDB4MzQ1NWYzNDUsIDB4NGJiMDJkM2YsCi0JMHgwZjhlODMzYSwgMHg0OWY5MTMyOSwgMHg5MDY4NzRmOSwgMHg2NzY5ZGZkNywgMHg0ZmNkMTZiYiwgMHgzNTMwN2NkMSwKLQkweDRlN2RjOTNmLCAweGZkMDhhM2U0LCAweGNmMmY4ZjgxLCAweGRlNmVjMzQ3LCAweGE0ZmI2NmM3LCAweDhmZjFhNDdjLAotCTB4MWYxYTRmYzYsIDB4MTYyMjNmZGQsIDB4Y2I1MzUxMjcsIDB4OTQ3NWViOTgsIDB4Y2ZmYzcyN2IsIDB4OGFiNDhmNDAsCi0JMHhhYjMzMTY1YiwgMHhiZTQ1Y2QzOCwgMHg5ZWZkODk4NCwgMHg1YmRmYTI5OCwgMHg1MDFmYzRiMSwgMHgyZjczYzIzYywKLQkweDJlMzM4MWZjLCAweDdlYzVkOGFiLCAweDQyNTFkN2I2LCAweGVhYTQ1YmY0LCAweDliYTIzM2QxLCAweDhmYjkxY2VkLAotCTB4NDZiNWQwMDEsIDB4YzJhMmYxMjUsIDB4ZDc3ZmVjZDUsIDB4MmM3ZThjMzgsIDB4ODhmYzIzMmMsIDB4MTdlZmQ0ZGIsCi0JMHgwZGI3YzlmZiwgMHg2YTljNThlYiwgMHg1MzZmNmZmNCwgMHg0NTViZTNmZCwgMHgzNzVmOGYzZiwgMHhmMGJkYWEzMywKLQkweDZmOWJmNjU2LCAweDZmZDYzM2NiLCAweDVlZmQ1NTI4LCAweGNmNDM3MGI3LCAweDVjOGYwOGQ2LCAweDdlY2RkODlmLAotCTB4NTcyYThkNmIsIDB4NzJmZDJhNTksIDB4OWYzMTY2NWQsIDB4ZmMyYjU4ZjAsIDB4ZDdmNzI4MTYsIDB4NjJmMzY3N2UsCi0JMHg4MDQ1NWJkYywgMHgyMDg4YWZlMSwgMHgxMDhiYjc5NywgMHgxOTA3NzM4ZiwgMHgwOTc3YzAwMiwgMHg2OWRjMDU2MSwKLQkweDkxYjZjOTFmLCAweGZiMzdhZDQ4LCAweGY4NWY4MDNmLCAweDM5ZmU1OWRiLCAweGM2MzZjNzM4LCAweGNmMjBmYmZhLAotCTB4NmNlZmUyYTcsIDB4NWJlNjgwN2EsIDB4MGYyOGI2NTQsIDB4NzFhYzlkZGYsIDB4ZDI3NTNmYjEsIDB4MWRmZWNiOWUsCi0JMHgxMjlhYzJlNCwgMHhjOTM3Y2Y5MSwgMHhmZDkxZTYzZSwgMHgxM2Y2NDUzYSwgMHg5ZmIyNjllNSwgMHhkZWM3NjQ3OSwKLQkweGY4MDlmYjIwLCAweDAyYWQ4MmI2LCAweDI5NzYyZGRmLCAweGI3ZGJhMmMyLCAweGNlZWRmZGY2LCAweDZkMzJjMjQ1LAotCTB4N2I3NGZiNmEsIDB4ZmE2N2Y3ZjEsIDB4NGFkZjdmODksIDB4MTIyMzUzOWUsIDB4NjBkNjU2NTEsIDB4YTcyNTZmYmYsCi0JMHg2MzE5NjQ5YiwgMHhkNWU4YjJlMywgMHg0ZmZjYzliYywgMHhmMzIyZmY4ZCwgMHhhNmY5ZTYyZCwgMHhkNzg2YjNjMiwKLQkweDc4NmE3YzY4LCAweDdkNzgxMmZlLCAweDNlYmMzMjY5LCAweGNlZDgyMjUzLCAweDU5NWZkYThmLCAweDU3NTViODhmLAotCTB4ZGU2ZmQ0YmMsIDB4MDY0NDEzNTcsIDB4YTNjNmVmZjEsIDB4MWJmZDFjZjIsIDB4ZTMxMzMxMmMsIDB4ZjdiNTNjNGIsCi0JMHhlNDJjMjhkYywgMHgyYmRjN2Y0YSwgMHhhYWYzYzAwMiwgMHg4ZmFlNmE5ZSwgMHhmNzg5OGY4ZSwgMHg2YmY4NjE2ZSwKLQkweGQ5NTcyZjJhLCAweGRkZTgyMWZkLCAweDZiYTFhNWNiLCAweDFmMTJjM2M4LCAweGJjNGJlYmVmLCAweGVkZjllNjgxLAotCTB4Y2UwZjY2NGIsIDB4ZDc2NjlkMjcsIDB4YWNlMjBmNmUsIDB4MmYzZDk5NmYsIDB4OWQzZmZiZTAsIDB4NzI0YTVlY2EsCi0JMHgzNjlmOWUyNSwgMHhkM2FjMzllOSwgMHg5ZGE4ZjEyZSwgMHhlMzlkYmVjMywgMHhjZTE0Yjk2MywgMHgyM2M4MGNiMiwKLQkweDVmOTgyOWZkLCAweDkyNjY1ZmYzLCAweGZlMjc2OTJmLCAweGU1OTM2N2RkLCAweDQ1NGNmZTU0LCAweDUyOWZlOTFjLAotCTB4NTBmYWNmZWUsIDB4Yzc3ZDFmYTMsIDB4NTM4ZDE2NzAsIDB4ZWIyNmZhNDEsIDB4YWYzZTM4ZDEsIDB4ZjdkZTlkNzgsCi0JMHgwOGQ1MGVkOCwgMHhjNWFmYmY4MywgMHgyNTUzNDYyMywgMHg2Yjg4MTcxZSwgMHhiMDNjNDQ5ZSwgMHgwNDU1OGNlNiwKLQkweDgyMTQ3ZGE5LCAweDI1MGNmNjhmLCAweDdhMzViZDA4LCAweGZhMTlhYWU2LCAweDExNDEzNmI2LCAweDU0MmY2MGQzLAotCTB4NjE5MzEyN2QsIDB4M2U5ZDJlMTIsIDB4MDljNTc1ODgsIDB4ZTM4ZjhlOTcsIDB4NzAwYzUyMGIsIDB4YTE4NjY3ODIsCi0JMHg4ZTU1NTI3ZiwgMHgzYmQ5M2RhMSwgMHhhZDNlZDBkNywgMHg0ZjAwZDRhZSwgMHhlODYwZGRmNywgMHhkMGIwZGU5ZiwKLQkweDZmZmE2NzAwLCAweGVhY2ZmNDMzLCAweDM1ODA2YTU4LCAweGFiMjU5NTdkLCAweDE1ZWVhY2M0LCAweGY3NjdlZjg2LAotCTB4NzdmNDM0YWMsIDB4ZGExYWQ2MDcsIDB4ZmI4OTcxY2QsIDB4YmMwNjhmNTksIDB4NGUzNDA1YzMsIDB4ZWU0ZTNhOWQsCi0JMHg3ZTg2OGRjZSwgMHhhYTZkZDA4MiwgMHhiZmM4OWM4MCwgMHhjZWViMTI2NywgMHgzYWNmNDQyOCwgMHhjODdhYWFjNywKLQkweGQ3ZmY3ZTY5LCAweGQ3MzRlYjhkLCAweGJjYTk5MjViLCAweDdmZDQ2NWQ1LCAweDc4NDYxOWI1LCAweDQyODRlMzkxLAotCTB4NGU0NThiNDMsIDB4ZWFjZTFlYTMsIDB4OGNlMDE4YjYsIDB4ZDc5YmQyMzIsIDB4NTE2MjhmZDEsIDB4MmY4MmYxY2MsCi0JMHhhZTdmYmZhMiwgMHg3OGQxZmU4MSwgMHg4NGYwN2UyMiwgMHg2OWVjOWZkMCwgMHhiMzdhZWIwMCwgMHg4ZjdiMDJkNSwKLQkweDFmN2U4MmZjLCAweGYxZTgyZmM4LCAweDFlODJmYzgwLCAweGRmNDE3ZTQ2LCAweDdkMDVmOTFmLCAweGZhMGJmMjNiLAotCTB4NDYzM2IyZjYsIDB4MWIwZjk3ZmEsIDB4OWVmOTVmZTksIDB4NWYxYWZlOTEsIDB4ZWFhNzQ1NGUsIDB4ODQzZjkxYjAsCi0JMHg3ZjJiZjE1ZiwgMHg1ZTM3NGU4NSwgMHgzNDRmZjIzMiwgMHgzNzI2NmU3ZCwgMHhmNDE1MzkyNywgMHhkNzIxM2M1MCwKLQkweDlkZDdhNzk3LCAweGZhMjJmNDUxLCAweGY3YzA0YzA0LCAweDlmNDkwNGNjLCAweGEwNDk3NWQwLCAweGIzMTllZDU3LAotCTB4OGZmYzEyMDgsIDB4Yzc3Y2ZiNTEsIDB4MjMyODZmZTIsIDB4YWI4NmYwM2QsIDB4ZWJmYTAzMzQsIDB4MTQ3YWUxNjYsCi0JMHg5ZGM1ZGI3MSwgMHg4Njg4NGYyNiwgMHg3ZTM1MTE1ZCwgMHg3ZGZmMGNmNSwgMHgxYTE3YTQ2NSwgMHhiNmNkNWRhNiwKLQkweGZjNDYzZjgxLCAweGRjOWU3MDczLCAweGQ5ZGRlYWE1LCAweGMwZmM3MjcxLCAweDEyN2NjMTQyLCAweGQ4MzliYWY4LAotCTB4MzM5ZWUzNDcsIDB4Y2ZkMDJiZjUsIDB4YjdmNDRmZGYsIDB4MGJmYmZiZTMsIDB4ZDQ3Zjc5YmIsIDB4Y2RmN2MxNDMsCi0JMHgwZDkzMWFmZiwgMHhlMGI2NzliOCwgMHgwYzI4YjA3MywgMHg4ODQ5MmY5NywgMHgyY2U2YzVlOCwgMHhkNDNiMjdhYSwKLQkweGUzOWVhNjU1LCAweGRmNGVkNDNjLCAweGI4Yzk5Nzc1LCAweDY5Yzc4MjRlLCAweGExNTE3OGUzLCAweDQ0NGUyMmYwLAotCTB4ZTZlY2FmYzcsIDB4NmNlM2UwMjIsIDB4NjNlMDFjZWMsIDB4ZGU0MWU0YzAsIDB4MjU3NTZjMjAsIDB4ZGUwNTFmNDEsCi0JMHhiZGU0MGIzNCwgMHg5ZmMyMTdlMCwgMHg1N2ZhYTU5YiwgMHgyOWU0NjI1OSwgMHg1ZWNlNzNhYywgMHhkN2FiYjA2MSwKLQkweDYyYzJlZDA2LCAweDBkMzk3ZmM4LCAweDg2NTBkMTcwLCAweGM3ZjVmZmExLCAweDkyZjY4NjVjLCAweGJkYTE4MTUwLAotCTB4MDBjNzhjZWMsIDB4MTk1NzBmOTcsIDB4ZTdiZTU3ZmEsIDB4ZTFkNWMwMzUsIDB4MWJmZjQzM2EsIDB4ZjAwY2Y5MmYsCi0JMHhlZjllNDU2YywgMHgyMzk2NTNiZiwgMHg5OTJlMjFmMywgMHgzODdlNmJkZiwgMHg2YmZhNTA3OSwgMHhmOWFmZGNmMiwKLQkweDQ5ZmZhMmQ1LCAweDM4NzExZGFmLCAweGJmMzU3Zjk1LCAweDZkYTNmMzVjLCAweGNmZDA0MDg0LCAweGY2YzJkM2I2LAotCTB4ZmE1ZGE2NjAsIDB4ZjYyZGZlYzksIDB4NjgyN2M4ZjMsIDB4NTdlNmJhZmUsIDB4MDhhOWZlNmIsIDB4NzZmNTdhZDQsCi0JMHhmNjkzYmU4NywgMHgzNWViZjU0NSwgMHg4YmYzNTlmZiwgMHg0YzVkOGIxMywgMHhiMjM2ZWIzZiwgMHg0YjA3ZTBhYiwKLQkweGFlNzYxMzM4LCAweDFhNGM0NjM5LCAweDRjYjk3OTBmLCAweGQ3YTI1YjllLCAweDdhMmJhZGFmLCAweGE3NjJjNGZlLAotCTB4ZGM3NTE3ZTQsIDB4N2VlMmVjMTcsIDB4Y2NmZTI0ZGYsIDB4ZjU3Y2FhYmYsIDB4NjNiZWI5OWYsIDB4YWQ2N2NmZTAsCi0JMHhiYjU2Zjc5ZSwgMHhmNGYzZWJmZiwgMHgxMzIxZmMyNSwgMHhmNWYzNTJmZSwgMHgyNjRkZmQ3MiwgMHhjNzY3YzcxMywKLQkweGQ3MmU1ZmQ3LCAweDBiZjU5NWFmLCAweGQ5MjFkZmM5LCAweDM3ZTJmMzU5LCAweDFmYzgzYWY3LCAweGMyYzdiNjc4LAotCTB4YWYzMzk2NzEsIDB4ZTQwYzZjNWMsIDB4NWUxMjFmYzEsIDB4ZmM5YjMzOGMsIDB4M2UwN2QwN2MsIDB4MGIwN2NlMDUsCi0JMHhkZjNjY2RjYiwgMHg3NzI5MzJhNSwgMHhjZjJjYmQxMSwgMHhkMjQyYTM2NSwgMHhjNmM3YjQ3ZiwgMHhlODQ5ZDQ3OSwKLQkweGVkYTA3Y2NkLCAweDhiNDNmMTA3LCAweDUxMGRjNjU1LCAweGM5Njg2ZTIyLCAweGMwNDM3MTk3LCAweDQ0YTIxYjg4LAotCTB4MmZmNTEwZGMsIDB4M2UxODdhZjcsIDB4ZjBjNTViZDIsIDB4MGNiZDdhZjcsIDB4ZTNhZGViMWYsIDB4M2ViZDA3ZjIsCi0JMHgyNmY4ZDdhZSwgMHg3OWRhNWYxYSwgMHhjNDNmYTM0YiwgMHgyZjIzNzYxMCwgMHgxZmViMWY4YSwgMHg2ZDcyZjQ5MiwKLQkweGQzZjZmYWIwLCAweGEyNGRlYjE2LCAweGUwOGQyOTRlLCAweDhmMTUxZWYzLCAweDNjNDllNjMzLCAweDdmZTQxZmEwLAotCTB4ZTZiNTdlYWEsIDB4OWJjNDI0YzIsIDB4YzkyYjg1NDcsIDB4YWFlMjU3ZjksIDB4Njg3YzJmN2YsIDB4OTczZjFmNzgsCi0JMHg5NDliY2I4ZSwgMHg1MmU0YTk4NywgMHhjZWViM2YzYiwgMHhkMTc3MmNhYiwgMHhiNzJkMThmMiwgMHgzZmU3NzhkMSwKLQkweGZjN2JiOWRkLCAweDUzYzVhYjVjLCAweGU4ZDUzOTU0LCAweDU1YjVjOWEyLCAweDVmYTExYjg0LCAweGNlMjY3OTgyLAotCTB4NjA5YzNmNTMsIDB4ZjNjNWEzOTQsIDB4MDc3ZjdlMjQsIDB4YmNmMmEyMzksIDB4MzI2Njk5Y2IsIDB4ZmRiMmY4NDcsCi0JMHgxMDE3ZjI3MSwgMHg0ODY5ZWYxZiwgMHg4MDU5ZTBlNCwgMHg3ZGJhOGZjZSwgMHhkMmZhZjAyZSwgMHgyYjdlYTA2ZSwKLQkweGQwNjJhYzA3LCAweGIwNzU3ZDg1LCAweDQ0MDk2ZDFkLCAweGQ4NDcxYjlmLCAweGFkZGI2YzlmLCAweDNlNDY5ZjM4LAotCTB4ZTdlNGU3N2YsIDB4ZDEzZmNlNGEsIDB4NmZjMjZkMzgsIDB4ZmJkYmJhYzMsIDB4YWI1NmZkOGQsIDB4ZmNlOGNhZTcsCi0JMHhkNTNjZDU0YSwgMHg4Nzg0NzlkZSwgMHg3ZjM1MWZmZCwgMHgxOWY2YTFkZSwgMHg2ZTYwOWZlNywgMHg2MGRmMWE5MiwKLQkweDE0MzJhNDc5LCAweGI5YmYzYmEzLCAweDhiMjhlZjkwLCAweGI4Yjc4NGMwLCAweDZkYzNkODAyLCAweDZiYmU0ZjE2LAotCTB4Nzg2OWJmMjIsIDB4OTdlNzk4OWIsIDB4ZjdjNDFiZjcsIDB4YTBmY2Y5NjIsIDB4MjMyZmY5ZTUsIDB4NmFmYTBmY2YsCi0JMHhmZmI1MTRmOSwgMHg5ODU5ODBlNSwgMHg0OGUwZGY3MSwgMHg3ZmE3ZTcwYywgMHg0ZjdiM2E2YiwgMHg3Zjk3NGI4ZSwKLQkweDExYjc5MDk5LCAweDMwOWZiODg5LCAweDI3YmE2ODdhLCAweGI0YmFjOTMwLCAweDFiMzYxZmQyLCAweDY4NGM5MWVlLAotCTB4MTEzNDdhZGYsIDB4MTdjZWM5ZTcsIDB4ZjNhNjllNjUsIDB4Nzk2OTUzYzUsIDB4M2NkN2JkM2EsIDB4MWJmYmMyY2YsCi0JMHhlN2RiZjkzMiwgMHg5YmRjOGY0ZCwgMHg2MGM3ZmI1OCwgMHgzNTdhY2EzMSwgMHg5ZmJkMTI3ZSwgMHg1ZjM2YmQ3MSwKLQkweGE1MTlmZTYxLCAweGFiNWViMWZkLCAweGE0N2Y3ODUzLCAweDQ5ZTQwNTE3LCAweDExMmZkN2NiLCAweDVhOTQ1NGExLAotCTB4YjNiZmM0M2UsIDB4ZTVhMGU5OWEsIDB4ZDU0MjVhNDMsIDB4ZmJiYjhmYmMsIDB4YThlMzViNTYsIDB4MmRhOWY4NGIsCi0JMHg0OGFlNzFiNSwgMHg0YjNjMjQ5ZSwgMHgyYTk5YmZkZSwgMHhhYzZjYjI1ZiwgMHgzZTViYzc4NCwgMHhiMzhmMjM3NiwKLQkweGU2NWI5ZTZkLCAweGQ5ZWRiNjRmLCAweGVlNmZmZjAwLCAweDFlMDU2MTQxLCAweDRlMzk1NmMyLCAweDU1M2U5ZTM0LAotCTB4ZGNiOTI0ZTUsIDB4NmUzN2I3YTgsIDB4NmY2ZjU4NTUsIDB4Zjc5NmFkODQsIDB4NmI2ZjU4N2MsIDB4MTU3ZWQ1ZjAsCi0JMHhhNmYwOTVhZSwgMHg1YjBlMTJlZCwgMHgyNDk1M2IxZCwgMHgwNWM0NWZiOSwgMHhkODk0NGZiMCwgMHg4N2IxY2UwZiwKLQkweGY2MDIzOGQ0LCAweDQwZmIxMjgxLCAweDYwMTVmNDNkLCAweGQwYzAyYmU4LCAweGFmYTE4MDU3LCAweGExNWY0MjUwLAotCTB4NjVmMGE1N2UsIDB4YmM4ODhlMjMsIDB4NGU0ZThkNGUsIDB4ZDFhOWQ3OTAsIDB4ZWJjODFmZjksIDB4NzVlNDYxZTgsCi0JMHhkNzkxZmRmNCwgMHhhZjIzYjdkMSwgMHg1ZTQ3NmZhMywgMHhhZjIzMGY0NywgMHhiYzhmZWZhMywgMHg1ZTQ2MWU4ZSwKLQkweDc5MWZkZjQ3LCAweGJjOGMzZDFkLCAweGYyM2ZiZThlLCAweGU0NzZmYTNhLCAweGM4ZWRmNDc1LCAweGU0NjFlOGViLAotCTB4OTFmZGY0NzUsIDB4ZGZiN2QxZDcsIDB4ZjIxOGEzZGYsIDB4OWE5M2Y3M2UsIDB4ZWViNWRmMDYsIDB4NzFmY2M2OWQsCi0JMHgzMTNiZWRkYSwgMHg0MWZiZTg4ZiwgMHg2NmJmOWZmYywgMHg4ZjlkMDFjZCwgMHg2ZWRmMDFhZiwgMHg0OGYzOGFlYywKLQkweDQ5ZDdmNzNhLCAweGE0ODQ5YmJhLCAweGQzMjM0OGYzLCAweGMyNGQ4Yjc5LCAweGU3NzQ5ZWI1LCAweGYyMGZmZTI0LAotCTB4OTk1NjM1MjksIDB4N2M4OTQxNGYsIDB4NTNlNDRhMGEsIDB4NTI5ZjIyNTAsIDB4MjlmMzJmOTMsIDB4NDE0ZjkxMjgsCi0JMHgyODI5ZjIzZCwgMHg4OTQxNGY5MSwgMHhlNDRhMGE3YywgMHg5ZjIyNTA1MywgMHgxNGY5MTI4MiwgMHgwYTdjODc3YywKLQkweDUwNTNlNDRhLCAweDRhMGE3YzhmLCAweDdmNTA1M2U0LCAweGJjODFkNjhlLCAweGY4MmViNjhhLCAweGYzODY3OWNiLAotCTB4ZTFhMWYxMWMsIDB4YzAzNGU3M2MsIDB4ZmRmNTk3ZjAsIDB4ZGJlYjJmZTEsIDB4ZGJlYjJmZTEsIDB4NjFlYjJmZTEsCi0JMHhmZWZhY2JmOCwgMHhiMGY1OTdmMCwgMHhlNThiOWU2OSwgMHhmZWIzN2UwYywgMHg3YWNkZjgzYiwgMHg3MDNmYThiOCwKLQkweDNiYTBiMTFhLCAweDM1ZWVmZGY2LCAweGU1MDRlMTk0LCAweGRmNDljNTU5LCAweDE1YjdmZjk3LCAweDYzODU4M2M4LAotCTB4MGY2NGVjOTUsIDB4MGZhZGJmZDksIDB4ZDgyMWE4YWQsIDB4MmJhN2RlYWYsIDB4ZDAyNjIzMTYsIDB4NDRkOGYzOWIsCi0JMHgwNDQ4N2YzNywgMHhlOGEwOGY3MSwgMHhkNzZlNGNmMywgMHg0N2ZjYWFmMiwgMHgyMjM5MmY3NCwgMHg1MzVmMGZkOCwKLQkweDdkYTVkNzI0LCAweDMzNGUxMWVmLCAweDA0N2ZhZDRhLCAweGY0NWZiYzllLCAweGQ2M2Y1YWZjLCAweDkwNzViYTk3LAotCTB4ZmRjMTJjOWQsIDB4OGUyZDkyODYsIDB4NGZjNDVkZDIsIDB4ZmIwYTRjMDcsIDB4OWZjODA3YTEsIDB4NWU4OTNhNWEsCi0JMHhhM2ZkNTBhYSwgMHgyN2MzYTYwMywgMHhhMjJmNzBlMywgMHhhN2VjZjE0NSwgMHg4OGIxYWZhMSwgMHhlMDUyZDYzMywKLQkweGZlMTRiYmE5LCAweGIyNzk3NjQyLCAweGRmNzVhZmVhLCAweGRhM2Y3YjgwLCAweDFkYjhiNWJhLCAweGYyMmYwOWU5LAotCTB4ODQ0N2YzZWYsIDB4YjllNjhkYWQsIDB4NmI2MTUzZTksIDB4OTM2NmRmODcsIDB4YzNiZTAyZmUsIDB4ODBiYWVkYjksCi0JMHhlM2FmZGRlMiwgMHg2OTcyODJlZiwgMHgwZDgxZmNmZiwgMHhmZDUxYjQzNywgMHg2ZmJhODc3NSwgMHgxNzFmODc2OCwKLQkweGNlZmJiZjI3LCAweGM3OGM4OTczLCAweGZiMjliNzNiLCAweGY5OWZiNGNkLCAweDkwNzc4NDg3LCAweGNiOTQ5NWZhLAotCTB4ODc3NWRmZjMsIDB4OWUzNmI2OWMsIDB4ZDc2YjY5ZDcsIDB4OTdkODQzZGYsIDB4NWNlMTczNmQsIDB4ODgzNWMyMjgsCi0JMHg4YTc5ODlmZiwgMHhmMDQ0NDE3OCwgMHgwZDdiZmI0NiwgMHg0NDg2YmJmYiwgMHg3NWQ3ZjEwNSwgMHgzZmZiNjMwNywKLQkweGQ3NTFmMWQyLCAweDdlMDFiMjUwLCAweGZmNjY1OGUwLCAweDU5ZmUzYTQ3LCAweDcyNDQxZjg3LCAweGVjMjA2ZTQxLAotCTB4ZjI0YWE3NTYsIDB4YzNiZDZhZjUsIDB4NzljNTFiZTQsIDB4NjIzZWNiYTIsIDB4OWE2ZWZlMDMsIDB4N2I4YjVjOTcsCi0JMHhmMGI4ZTI2YywgMHhlNmVmODNlNCwgMHg0ZTlmNmNiNSwgMHhiZDA3ZjJlYiwgMHhiYTAzZGMxZSwgMHhkM2VlZDNlOSwKLQkweDYzZWYzZjBjLCAweDgyYTdkOTk4LCAweDcwZjZjN2Q3LCAweGM1MDk0MDRlLCAweDBjZWUyYTEzLCAweDA5NTI5YTBjLAotCTB4ZDViMDIzYmUsIDB4ODdmZTg2OWEsIDB4MDBlZTA3ODQsIDB4YTBiMTI4OTksIDB4NDJhZmIyMzQsIDB4NTU4YTZjMzEsCi0JMHhkNGUyMmZjMCwgMHg5MWZmMWQzNCwgMHg3ZTBlNThlNiwgMHgwNTU4ZjEyOSwgMHhjNTg5NjNmOCwgMHg4OWJlODU2OSwKLQkweGVmYTIzN2Y2LCAweDcxZmY5MDdmLCAweDY4NjdiY2FmLCAweDZiMWVjMGI1LCAweDUzOGI1MWZlLCAweDM2ZWFmNWFlLAotCTB4MmQxZmZiMmIsIDB4ZDBmZmM5NDcsIDB4ZmNkNTJiZGQsIDB4MDg1ZWVkMGQsIDB4MTA5ZTFkZjksIDB4ZGI5MWY4ZWMsCi0JMHhiOWQ0MmUzOSwgMHg3ZmJlMWRlMSwgMHg3ODNiODlmMSwgMHhmYWY4OTkyMCwgMHhmN2MzOWM5MywgMHhiN2UxYjk1NCwKLQkweGM5NGZhYzI4LCAweDI3MmNlODZmLCAweDNmNmNiNjNjLCAweDU1ZjM4ODlkLCAweGZiMGFmMDM4LCAweDNkYjc1NzFiLAotCTB4MDhlMzI4OWUsIDB4YTZkMTFmMzIsIDB4Y2Y4YjQ5ZTIsIDB4NjhmNGFiYjQsIDB4N2QwMWVmNTMsIDB4M2JjYjdhNDgsCi0JMHgwODZlZWQ4NywgMHhiZDY4MzZmNywgMHhmYjQ0NTdlYywgMHhiOTFmOWE4NywgMHgzODRmMWI0ZSwgMHhhNDVjNDVkZiwKLQkweDhiYjdmNjgzLCAweDViYmJkNWEwLCAweDg5ODg2NDc2LCAweGQ1M2FlM2ZlLCAweGNkYjM1Y2FmLCAweDNhN2VmN2NhLAotCTB4YzJlZDkwNDQsIDB4M2Y1NDYwOWEsIDB4YmFjZmJlZjUsIDB4OWRmYWM2ODMsIDB4YTdmZTUxZTUsIDB4ZWVkMjJlN2EsCi0JMHg3ZGJjYjZlNSwgMHg3ZmY2NmVlYSwgMHg2ZjljYWRiYSwgMHhmZDJhZGE2YiwgMHgwNDU4NzEyMSwgMHg4YmMwMTVmMywKLQkweDM3MDRiMTRjLCAweDk0N2FmNTFkLCAweDI3ZTdmODQ5LCAweDFmNTQ1ZmFhLCAweDJlYmM2NThlLCAweDdkNjc4YjE5LAotCTB4OGIyYzc0YjIsIDB4MzJjNjdiZTEsIDB4NGM3N2JjYjksIDB4OGE1YzhiZGUsIDB4M2JkMTBjNTgsIDB4OTEwNGFiNWMsCi0JMHhlYTk5ZmI0ZiwgMHg3YjhkZGQwZiwgMHgyMDYzYTA5MiwgMHg5NDc5Zjk5ZCwgMHgxNDUzMTlmOCwgMHhhZTZhN2FhYiwKLQkweDc3MDUzOTU3LCAweGRmZWFkZWIzLCAweGY1OTg3YjhlLCAweGNiZmQ4MjgzLCAweGQxMzdlMDNiLCAweGEzZjAwZGY4LAotCTB4ZGMxZTQxYTYsIDB4YjczZjdjYjUsIDB4NmVmOTExNGUsIDB4OTUwNmMzYzgsIDB4MDQxZTQ5ZmYsIDB4ZWIyZjBmZWIsCi0JMHg0MTI1OWFiNSwgMHhmMDY5YWZkYywgMHhlZTgxMzYxZiwgMHgwM2Y4MWM5YSwgMHhlZjgwMmRlNywgMHg1NzM2MjgwOCwKLQkweGY4Mjc5ZjIxLCAweDc5ZjFhY2JjLCAweGM3MzQzY2I0LCAweDg3MjVmMWFiLCAweGZiOGQxZjhjLCAweDlkMmM1OGE3LAotCTB4ZDdlMDQ1YmIsIDB4ZGVkNGJjMmIsIDB4MGNlMDE4OGMsIDB4ZjcwODExOTUsIDB4ZmRiMjg1MDksIDB4YWY1ZmQxZTQsCi0JMHhkM2MzODZkOCwgMHgzNDNmOGM5NywgMHhhZjRjNGM5OSwgMHhmNmY3ZjIxMSwgMHg3MGM1NjA0MywgMHg2NWU0M2E2ZCwKLQkweGNiYmE1MmI3LCAweDUzY2Y1OTE1LCAweDU3MmYwYjk1LCAweDJiYzVjZWU4LCAweGY5MjJmOTU1LCAweDYzZjljNzRiLAotCTB4ZTlmOTIzZTMsIDB4NDBmZjEyNjIsIDB4Y2YwOTViMmIsIDB4YTRlNmIzOTAsIDB4YTIxNGQ3ZjAsIDB4YzJlNTI3Y2MsCi0JMHhkYjBjNDM1YiwgMHhlMjdkZDQyOCwgMHg3M2FkMDQyMiwgMHg3YzY3MGE4NSwgMHg5ZGZkZWUyZiwgMHg4NjFmOGM4NSwKLQkweDVlNWY5NjJmLCAweGJmZmMyODExLCAweDhhNGQ4N2QwLCAweGFiNTdlZjg1LCAweGZjOTg3MWY4LCAweGVmYzM5NTFmLAotCTB4ODMxNzg3YjcsIDB4MjM4NWYxYWUsIDB4MWEyZGQwMzYsIDB4MWVlZGY3M2YsIDB4ZjA4NzMzZGEsIDB4ZTkyMTUxOTAsCi0JMHhiN2ViNjRkNywgMHgwNDUxNzlmMiwgMHhiNTVmODhhZCwgMHgyMmZiNGExNiwgMHhhZmVjYWUyYywgMHhjNWM0M2U3MiwKLQkweGRmNmQzZTcxLCAweDg5ZjdhYTFmLCAweGFjZTFmMWEzLCAweDdlMDI3NjkwLCAweGY0OGU2YmIyLCAweDRmYzI1MTkzLAotCTB4ZjgxYzdkYzYsIDB4MjdlMTgwYzksIDB4OGM5Zjg0YTMsIDB4ODBjOWY4N2EsIDB4ODYwMzI3ZTEsIDB4N2UxODBjOWYsCi0JMHhjOWY4NGEzMiwgMHhlNGMyN2ZhOCwgMHhkMTMwZmYzZCwgMHhmMDUzNjlmMywgMHhhN2M0YWJmMCwgMHg0ZGZhYTU5ZiwKLQkweGE3ZmViNDE1LCAweGQ3OWI4ZjcxLCAweDExZmRlN2VmLCAweDE5NWViMGRmLCAweDVmYzQ1M2Q3LCAweDFmMDg4YWY2LAotCTB4NzBiOWVjYWQsIDB4ZTExMzk0ZDQsIDB4YmY5ZGI2YTcsIDB4ZTIwNWVhN2YsIDB4MTdlNDk1OGYsIDB4M2JmZDllNDIsCi0JMHhmMTRjNTA5NSwgMHhkY2Y2N2NkNCwgMHg5Nzk2MzhkYSwgMHg2MzZlYmVlNywgMHgxYjY0ZGJmZCwgMHg0Nzc3NmQzZSwKLQkweGNmN2VmOWYwLCAweDdkNGFiNGZmLCAweGQxNzdjYTE5LCAweDYzYmEyYmI4LCAweDRmZmZkMDNkLCAweGIxZDJmYTU1LAotCTB4MGY0MmY4ZGUsIDB4YWQzMmU1ZDMsIDB4MjUxZGVmODksIDB4YmY1MGIzZmEsIDB4OWViZjBjNTIsIDB4YmY5YWZkNDEsCi0JMHhkYTM2NzZmMSwgMHhiNmVlMzgxZiwgMHgxY2I3MGY0MSwgMHhlMTkxZDkyYiwgMHgxNzdlZjdjMiwgMHhlMWM1YjVmOCwKLQkweDU4Y2ZjMWI0LCAweGVkOTkyZGJmLCAweDhjYmE3MzZlLCAweDczYzcxMmRiLCAweDQ3YTM0YmRlLCAweGI3OGM4NTU1LAotCTB4YjgyOTUyN2QsIDB4OTc5ZWEyYmMsIDB4MjVkNjQxMDgsIDB4NmU5MjdlODYsIDB4YzVhNmYyZDEsIDB4NThlM2EzMTEsCi0JMHhmM2NhNzg5MSwgMHgwNzEwNzMzYiwgMHgzZTllMTU0OSwgMHgyMTdjNDRkNywgMHg4ZDJiNjFjZSwgMHhlM2EyNTFjNCwKLQkweDZhZjJlMzFkLCAweDlkZjg4NjEzLCAweDUwYTlhZTU2LCAweGRiY2VmNzBjLCAweDg1YWJjZmM3LCAweGQ3ZTFkMzhiLAotCTB4MTEzOGE2M2YsIDB4Yjg3MzZlNmYsIDB4YjgyNmFkZWUsIDB4MzcxNThjZWQsIDB4OGE3ZDQ1MzIsIDB4ZjA0OTk2Y2IsCi0JMHg3MzhhMjNjOCwgMHhiOWJkZTgzZiwgMHgxMzU2ZjU4NCwgMHhmNzhhNTI2OCwgMHhiNzJjZDUwYiwgMHhjYjJhNDE2ZCwKLQkweGFmZWY5NmE2LCAweGQ2NmE3NjNlLCAweDkwYWZiMWY3LCAweGI2NzU4NmQ3LCAweDE0YjZiZDM5LCAweGRhZDNkZjlkLAotCTB4ZjdmNTc4YWYsIDB4YjFiODM1MjAsIDB4OWIwZGM2NDIsIDB4ZmMwMTE4ZTgsIDB4NmRkOWI3ZGQsIDB4MjUzODg5NWIsCi0JMHhmZmI4M2ZiOSwgMHgxM2U1NDZiNywgMHhjN2VhM2JlZCwgMHg3M2VhMWZmNywgMHhhYmUwZWJjNCwgMHhmNDE3ZGExMSwKLQkweGQ1MmJlNjE2LCAweGUzMTJiZjhkLCAweGZlYTdlNmViLCAweDU2YjViN2VjLCAweDJkNzhmMDI0LCAweDFiYjdkYTRlLAotCTB4NDlkNzkzYTUsIDB4OGQzYzYwNzgsIDB4NWNmMWExZWMsIDB4YmRlMzBmM2MsIDB4N2FiNDE0MzUsIDB4YmJkYzFlYjAsCi0JMHgzMzg1NzgyMCwgMHgyYjNjYzU2OCwgMHg3YzcwOTViNywgMHhjZTViYmZkZiwgMHg2Yzk5ZGZlMywgMHg2NzVmODIyYiwKLQkweGU5NjZkYTcxLCAweDNiZTIzZGZkLCAweDBlMTM2NWYwLCAweDVlYmNhOWY3LCAweDA4ZGI4N2Y2LCAweDQzZjAyOTRmLAotCTB4NzVmZmM4NTMsIDB4OGI1N2M0NGMsIDB4ZmViNmZlYmEsIDB4ZDhmZmEzNjQsIDB4ZjQxNTk4ZmYsIDB4NGFlZDU0NjksCi0JMHg1NDllMWQzNCwgMHhiNmU1NzhmOSwgMHhkNzc4NmM1YiwgMHhmMmYxNjZkMCwgMHg4YWJmMDdiYiwgMHgxMGRmN2ZlZiwKLQkweDkwZjkwYmJiLCAweGFkMjc4MWM2LCAweGFlMWY4MjZlLCAweDkzZjY3ZTkwLCAweGVhZGY5MjE1LCAweGI4Zjk0MjczLAotCTB4MjFiMjMxZTcsIDB4MzcyMWVmOTYsIDB4YmY3OWZiM2EsIDB4OWM3ZWY4ZTMsIDB4YzRmZjAzZjAsIDB4MTM3YzYzZTksCi0JMHg5ZjcwMDQ5ZiwgMHg0OGMwNmRhZiwgMHgxMjdhYzhkZiwgMHg4MWI2ZGM3OCwgMHg1NWJmOTYxNiwgMHhhOWNkYmYxNiwKLQkweDEzZGVjNzVmLCAweGE1ZTEwYWY5LCAweDgxNWVlNDkxLCAweGIzZmE3MWZkLCAweDFmMTczZmMxLCAweGY3OWIzN2JmLAotCTB4N2JlNGViNDksIDB4ZTJkNzFlNTQsIDB4MzdjYzc5OGMsIDB4ZmYxYWQ3Y2MsIDB4Nzk0OTk3MzQsIDB4YTk3YmU2ZDYsCi0JMHhiZGYzYzJjMiwgMHhiNGU1MjVmNCwgMHhkZjBiNzc2ZCwgMHgxMGNkNjk4MywgMHg2MmY5NDUxZSwgMHg1M2U0ZDUzOSwKLQkweDM1NDZkNzkzLCAweDdiYmFkOTJlLCAweGY0ZWJmMDg5LCAweGVlZWZkOTBkLCAweGNmYzEyNzk3LCAweDJiOWQ3NTY1LAotCTB4M2UxMjdhNTQsIDB4YjhiYTEzNWYsIDB4M2QyYWJiZGQsIDB4NzI4YzcyOWIsIDB4ZWUzMGYxOGYsIDB4OWJlZTU1MjksCi0JMHgzN2YyODYxNiwgMHg2YmZhNDYxNCwgMHhjOGE1MzZmMywgMHhlMGZmYzBlZiwgMHhiZDJhNTNiMywgMHhmNzIzN2ZkMSwKLQkweGVhYTRmMTU3LCAweGJkNzFkNjhkLCAweDFhN2I2ODcxLCAweDg1NjFjNmY0LCAweGY3MWI1NGYzLCAweGUzNmViZjQ4LAotCTB4ZTcxYzA5OGIsIDB4YWY4ZDhmZmEsIDB4ZWExZWY4ZmUsIDB4ODMxM2M5ZjcsIDB4MTNmN2ZhY2QsIDB4MjdhOTIxNmQsCi0JMHg4MjlmYzlkYSwgMHhkYWE1NThkZSwgMHhmZjYyODZmZCwgMHg3Mjc0MmI0ZiwgMHgxN2FkZjZkYywgMHhhYzVjODFhZiwKLQkweGY4YjkyYTE4LCAweDBlZmJjMTRiLCAweGVhZmNkZjQxLCAweDczYmUxZmM1LCAweDVmNjIyYjgzLCAweGRjYWM3ZGI1LAotCTB4MTZkNjZmZjksIDB4NzI2ZjFlODcsIDB4NTYwYWJiOWYsIDB4NDkzY2VmMGEsIDB4NWFjMzljMmYsIDB4MWRmMjI5YjcsCi0JMHhmZDhkOGY1OSwgMHhkMWRlOGQ0ZiwgMHhmMjQyZDA3YywgMHhmMDg4ZWFkYiwgMHhhOWZmNDY4MSwgMHg3OGRiMjZmYywKLQkweDVmZDI0ZTNlLCAweDA3YzZiN2EzLCAweDNhMzViZDFhLCAweDlkMjk3YmYxLCAweGZiYWRhZmZmLCAweDJiNWU5NTMzLAotCTB4NTMxZGZlNTQsIDB4ODc0NTZlZTUsIDB4ZTU4YWI2ZGIsIDB4MDU2YjZkZGQsIDB4YjFmYTZiZGYsIDB4NGUzZjU4Y2QsCi0JMHg3ZWI4ZTcyNywgMHhjMGI5MDFkZiwgMHg2OWQwMjJiYiwgMHhjNjU1Yjc3NCwgMHhhMDRkMGYyMywgMHhiZWVjMzY1MywKLQkweDZhZDU4ZWI2LCAweDhkNWRiMWRjLCAweGZjZDJhZTFmLCAweDRjN2Y2MmUwLCAweGFiNGU4ZWE1LCAweDZhNzQ5MzlmLAotCTB4NWZlZGU5N2QsIDB4ZmJjNWMwZmYsIDB4NGY2YzdhOTMsIDB4MmI4YmZiMGMsIDB4YmQzMzBlODcsIDB4NjYzZTc3MWEsCi0JMHhmNGJmNTM3NSwgMHg1ZjQxYjc0YSwgMHgzODk3NzZiNywgMHhiMTVmMzcxMSwgMHhmOTBhZDA3MywgMHg0ZDc0YWY0ZiwKLQkweGVhNGRlZmNhLCAweGFmMGQ2MGJkLCAweGNlOGEzZmIwLCAweGExZmQ2OWVlLCAweDNjZDMwZWY3LCAweDI2YzQzNzliLAotCTB4MzY4ZDFlZTIsIDB4ZjI1MmI3OGYsIDB4NzI3NzZiNzUsIDB4ZWQ2YmU2MGEsIDB4MzgxZmY5NmUsIDB4M2Y3YTY4Y2YsCi0JMHhjNDJlZWU1YSwgMHg0OTU4Nzk0YSwgMHgyZjJlNDI5ZiwgMHhkZWM5ZTJkYywgMHgzZjMxMzg1OCwgMHg5NTk1OTVhNiwKLQkweDEwY2Y2ZTkyLCAweDI1NmY3MTdhLCAweGJiZTg3ZTJiLCAweDAzZDY0M2MwLCAweDkzZTQxZTcxLCAweDQxYzJmMmYzLAotCTB4YzYzZTBiY2MsIDB4MTdhNDZkYmEsIDB4YWYyNWZmNzEsIDB4YWM3YmZjMzMsIDB4YmU3NDVjODMsIDB4MjEzMjgyZWYsCi0JMHhkMjNiZTY0NSwgMHg5MjZmZGUwOCwgMHhjYzcyYjNlZiwgMHg1MmFmYmNiMiwgMHgwZjZhM2JkYSwgMHg4NmE0NWRhMSwKLQkweDY4ZmZiMWNiLCAweDVmOTUzNWJkLCAweDM2YTdmMWExLCAweDlhOWViNDRlLCAweDU3Nzc3ZjZhLCAweGEyZmE3OTRhLAotCTB4YWI3MDVkZmQsIDB4NGYwMjkzNzEsIDB4NmRlNjlkYjYsIDB4MDc4ZTc0N2UsIDB4ZGEyZmE0NzEsIDB4ZTY0ZTJkYTcsCi0JMHg0YmY3YzY5NywgMHgzMjk1NWFjYywgMHhlNGYzN2VjOSwgMHhmZGVhNjgzOSwgMHg0ZGE2ZDQwZSwgMHg3OTA5ZGZiMiwKLQkweGI0NGU1NTVmLCAweDc5ZTNlZmJiLCAweDI3OTk3ZTkyLCAweGRkOTBhMGI5LCAweDZjMmVlZmEyLCAweDY1ZmJlNTg4LAotCTB4MzhiNGJlZGEsIDB4NWVmYWRmZmQsIDB4MTRjYWMxZTEsIDB4NGUxNGZlMzUsIDB4MTRkOTNmODAsIDB4NDg3ZmNhYTcsCi0JMHhhMjVmYThjMiwgMHhmZGVjZDdhYiwgMHgyMTM4NjczOSwgMHgzZjlmYTc0NSwgMHhhMWVkNTZlYSwgMHgzYzgxZWYwOCwKLQkweDgxNWM5ZThiLCAweGZlYjljNzc4LCAweDQyYTYwOTBiLCAweDlmNWNhN2YwLCAweGFiNjZkZGY2LCAweGY0MGY1Y2U3LAotCTB4YmUxOGY2ZGMsIDB4ZDM3ZTRlZWYsIDB4ZGE5M2M0MGUsIDB4YTcxY2M5MDMsIDB4ZWNhN2FmYjksIDB4ZTcxYTVlZTIsCi0JMHhmYzU5NmRiZSwgMHhmM2YzNTBkZSwgMHgyZmZhYTk1NywgMHg4ZWNiNzM3ZSwgMHhlYmRmZjQ0YSwgMHg2ZjhmYzI3NiwKLQkweDg4NmNmODc3LCAweDJjMGZjNWMzLCAweGRmYjBlNWIxLCAweDVhMDFjZjJiLCAweDIyYjM2YWRlLCAweDBjOWVmYzdjLAotCTB4NjU3MjExZmEsIDB4N2IwNzkxM2EsIDB4ZjRhZjdhYjMsIDB4NjI0ZGViZmYsIDB4YjM5YmYyMjcsIDB4MzM4YjdjZmIsCi0JMHg1MjllMWZhMSwgMHhjNTI3ZjAzYywgMHhkYWEzZDIzZSwgMHhjNzc0OGM3OSwgMHg2ZmJlYzU4NywgMHhlZjY4YmY0MSwKLQkweGM2YzJlNmVmLCAweDIxOWZiMTlhLCAweDgyOWRjZTJmLCAweDA3ZWMwYmZjLCAweGE2NWUwMWViLCAweDZlNzFmY2E5LAotCTB4YWI4MjdjZTAsIDB4MmZjZjgyMzAsIDB4ZTM0ODFlZmIsIDB4ZDY3ZjJkMGIsIDB4MTk0ZmY4OGUsIDB4MGQyOWEzZjgsCi0JMHhlNmE2ZDFmYywgMHgyYzBjNzZjOSwgMHg3MDdkYjg2MiwgMHhlOWZiYmYxOSwgMHg0NzNhNjc0MywgMHhmYjU2M2RiNiwKLQkweGVmMDhhMDQ0LCAweGRhM2UyNTc4LCAweDA5ZGQxNmJhLCAweDdmNjNhOGJmLCAweDM1Y2UzMjRjLCAweGI2NDBkNmQ5LAotCTB4MWI2ZDBmZGUsIDB4MDFkZjk4N2MsIDB4ZTU4YzFhNWQsIDB4Y2UzNTQwNzcsIDB4NjdiODM1MjUsIDB4N2M5ZjZhYjMsCi0JMHgzYmY1YTc2NywgMHhiNTk3ZWFhMSwgMHhlZjBjOGI1ZCwgMHg0YzY5ZGE3OSwgMHhkOWZmOGQyNywgMHg1ZmRmM2M1MCwKLQkweDA0ZTlkZWQzLCAweDk1ZTNmZWVjLCAweDRlYmRmMmU1LCAweGQzYmU0YmI1LCAweGFlZmVlNGM5LCAweDVhZjRlMzQ5LAotCTB4YmU1N2IxNzksIDB4M2JiZGQwZmIsIDB4YmU5MWIzYmEsIDB4MjU3YWVjZWYsIDB4N2JhY2UzMTEsIDB4NGUxNTY3ZmMsCi0JMHhjZWI3YzcxMywgMHg3N2YxZmM2MCwgMHhiYmU1N2I0NywgMHgyN2M3ZjZhMywgMHhiZTAzZmY3ZiwgMHgxYzc2N2YwNiwKLQkweGM2NzkwYzUzLCAweGVjNDk4MmZiLCAweGMyNDNmYTg3LCAweGRmYjZmYzg2LCAweGJkY2ZkODI5LCAweGIwM2QxNjY0LAotCTB4YTI1ZjlhZWIsIDB4YzU1MmZmZDUsIDB4ZmVhNGE1YzMsIDB4Y2Q3ZmQwNmMsIDB4NjFiMzI3ODEsIDB4MjA5MzdlMzcsCi0JMHhmNzAzYTZlMSwgMHhjODdhMDhmZSwgMHhmNDhjN2NmZiwgMHhmZDgyMmRiZiwgMHhmNDgwZDZkYiwgMHg2NGY3YjU5NywKLQkweDM4ZWM3ODQyLCAweDE5NTQ3Zjg3LCAweDQ2YjlmMmNmLCAweGFkYTQ5NzdkLCAweGFlMGJmYzhiLCAweGQ0NDU4ZGZmLAotCTB4NmY3ODFkNjEsIDB4ZGY3ZTdlMDQsIDB4M2QwNzZhMTIsIDB4MTQ3ZjI3ZGYsIDB4MmExMzhmNzksIDB4NmZkZmJkZmYsCi0JMHg4N2Y3Y2M1ZSwgMHg1N2UwMTA0OCwgMHg0YWZmZGZiYywgMHg5YTg5ZjIwMiwgMHhmZTZiNTYxZiwgMHhiNGVmMTc5NSwKLQkweGVmOTUxZTM3LCAweDg3MGJlMzgxLCAweGQ0MjMxY2Y5LCAweGE3N2FjOTc4LCAweGRmOGRiN2U0LCAweDRhY2UyZWI3LAotCTB4NmI4YWJmNjUsIDB4ZGIyMTJkM2EsIDB4YWI1YWY0NjQsIDB4ZjBlMzRkZmEsIDB4MmU3Y2MzOTEsIDB4ZmQyNDNjZWIsCi0JMHhmM2ExY2U4MiwgMHg3ZTY4MTdlYywgMHg3MGJlZjY4NiwgMHhlY2YzYTFkZCwgMHhhZGRmNjgyNywgMHhkMmYxMjIzZiwKLQkweGI3ZDY0NDc1LCAweDc4YjQ5ODE0LCAweGMzYzk1NzhiLCAweDM4NjE1OTc5LCAweGI0ZDJjMmJmLCAweDliOWIwMGQ1LAotCTB4M2E1MDVhYjYsIDB4MDhjODc4ZDUsIDB4MGFiYmU1ZmIsIDB4OTllN2NhN2UsIDB4YjhlYTZkYWUsIDB4ZjM3NTViMDQsCi0JMHg5NzRkNTZjNSwgMHgzZWE4ZGFlZiwgMHhhNWVmODFkNywgMHhiYmRhZDczZCwgMHg1MGYzYzg4ZSwgMHgyNzZlMmJhOCwKLQkweGVmNWQ4M2RmLCAweGViZWNhMGIwLCAweGRmM2RiMDcyLCAweGMwMmE2ZGQ3LCAweDEyYWY3NTdkLCAweDcxZGNmZWM3LAotCTB4ZjRkNmZlZjUsIDB4MjJjNmVmNzUsIDB4NDYyOTkwNGUsIDB4N2NkYzk5NGUsIDB4MTU2NjZiNmYsIDB4MDIyZTliOGQsCi0JMHg3YjRiOGY3YywgMHg5ZmU1NzQ0ZiwgMHhmOGMzMmUzZiwgMHhhZmMyNjIwYiwgMHg1Yjk4MDIyMCwgMHg3OTA5YTMzNSwKLQkweGUxNDkwNTkzLCAweGY3M2M2MDMyLCAweGQzODRiYTU4LCAweDBlMjBhZmMzLCAweDM3MjQwY2U1LCAweGE1ZjI4ZjIxLAotCTB4OGFmNTRhZTMsIDB4MzBlZWNlMjEsIDB4MGEwN2FmZjksIDB4ZGIyZWM2YmEsIDB4YzQ2MzVjNjQsIDB4NTc5OWI5MDYsCi0JMHhmYTY4ZjkyNSwgMHhlMjQ3M2E0OSwgMHg4M2I5ZjUxYywgMHhkM2U5ODFjZiwgMHg5YjlkZjliYSwgMHhhMTk3MGMyOCwKLQkweDgzN2M3MWRmLCAweDhjN2Y2MGZiLCAweDQyMGVmZjkzLCAweGY2ZjU5NzllLCAweDAyNzU1OGM2LCAweDNkZTk5Nzk3LAotCTB4YTQyNWFlYWEsIDB4OWYwMzYzZTYsIDB4ZjdmODgyOWIsIDB4YTEyYjhlMDQsIDB4YmNmZGViNmYsIDB4NGYyOTJhZWUsCi0JMHg5Nzk5MThiZSwgMHhjZWIxNGJiZCwgMHhlNGZhMjdmYSwgMHg4MzVmZGI5MCwgMHhjYzcyZmE3NSwgMHhiOGI5MjU0NSwKLQkweDdkZWYyYjE3LCAweGI3ZjM1MTVmLCAweDUwYmNiZjlhLCAweDdhOTY3NjlkLCAweGM4Y2RiM2NlLCAweGI0ZmU0MDcwLAotCTB4ZDc4YTg5ZmIsIDB4MWY1MmVmY2IsIDB4OGFkOTNjMmEsIDB4YzQ3MzdmNzUsIDB4MTYyMGVmY2UsIDB4NzNjOWM0OGUsCi0JMHhiNjNhOGNkNSwgMHhkOWIxN2RhZiwgMHgyZTI4M2ZlYywgMHhmZWEyNjg4YiwgMHgyMTRkMGIyNywgMHhhNmZmZGZkYywKLQkweDU5OWU3M2IwLCAweDZkZmNhM2Q4LCAweGMzZGYyYzUzLCAweGYxYmY4ZTU2LCAweDk2NGRlYzM5LCAweDkyYTdmN2Y5LAotCTB4ZmY1OTlmNjgsIDB4OGJhMDc4YTAsIDB4ZmUyZjQ3OWIsIDB4NmNhODRmZTMsIDB4MTg3ZmRiMWEsIDB4ZmU0OTExZmIsCi0JMHhiOWMzZjA2NiwgMHg3ZWYzYmFkMSwgMHg5ZDM3ZjU0MiwgMHhiNDhmNzY0MywgMHg4ZmJmNDI2MywgMHg5ZTdlMGZlMywKLQkweGFjOGE2Mjk4LCAweGM1YzhjYWVmLCAweDg3OWQ1ZjE3LCAweGU5ZjFjZWQyLCAweDMyY2RjNzg1LCAweDllYjUxNTllLAotCTB4YmUyZTE5MmIsIDB4OThmZDRlMGYsIDB4YTYxYzU3M2UsIDB4MGI4N2NlMjAsIDB4MGY3YTlmOGYsIDB4N2I4ODViZWIsCi0JMHhkODM3MzhjZSwgMHhmNmY1OTdhZCwgMHgyNTY2Yjg0ZSwgMHgxNTBlN2UyMywgMHg4OGFjOTdmYSwgMHhiNTQwNzgzZSwKLQkweGFlN2Q2OTRiLCAweDdiMDhkYzlmLCAweDIwNTlhNmY5LCAweDY1MTQ0MGVlLCAweDA3ZDY4ODNlLCAweDQyNWY4MzNmLAotCTB4YWEzN2M2ZmUsIDB4MDdlZDc5ZTQsIDB4NTQ2ZmJlMzksIDB4NjcwNjVjYjEsIDB4OWJlNzJlNDEsIDB4YjY5ZmJmMjcsCi0JMHhlMzUxNGFhZiwgMHhkMWFlOTI1OSwgMHg4YmE2OGI3NCwgMHhlNzcxNmY4NiwgMHg4NTI0ZTlmMCwgMHhhOGY0NWNmMSwKLQkweGM2MmVlZmM0LCAweGI3NjdlN2VmLCAweDE5OGE5ODkzLCAweGM2MzZmYmZmLCAweGY4NmZmZmYzLCAweGNhN2RlMmZkLAotCTB4ZmJlMzczZjcsIDB4ZDNlZDNhZmMsIDB4NzdlN2Q4NmQsIDB4OTNlZDFmZmUsIDB4YmNkZmMwZjUsIDB4M2VlMzYxY2YsCi0JMHhiMTQyZmFkMywgMHg4ZjM3YzA3MywgMHg4YWNmZDg5YiwgMHgwYTJhMzdiZSwgMHg2NmQxZWIwNCwgMHg1M2M3MWM3MywKLQkweGRkZjI3MWZkLCAweGQzY2ZlOTAxLCAweGRlOWE5ZmQwLCAweDJlMTc1ZDljLCAweDRlNzFiZjgyLCAweGFlYjE2Nzg4LAotCTB4ZWI4ODY5YjAsIDB4MzBlNTU2MmYsIDB4YzMxNGNjZGYsIDB4YzI3ZWZjOTksIDB4M2Y4NzJlMTIsIDB4MzViZmI2NmIsCi0JMHg0YmIyMjNmNywgMHgwZjA0OGYwMywgMHhmNGUzNGFiZiwgMHg1NmE3YzEyOSwgMHhlZGRkNWY0MSwgMHg5NWRjZmNlMCwKLQkweGE1NjAyOWEwLCAweDQ1OTIwNjc5LCAweDdmOWEzMWYxLCAweGNlNWNjZDYwLCAweGFhMTE1Y2IzLCAweGIxYjA2YTllLAotCTB4ZWNmNmEyOWUsIDB4Y2EzN2I0MWUsIDB4ZjlmZGVmZjYsIDB4YTNmODFlYzIsIDB4Zjc4MmY5MjMsIDB4YWUyMjUwMzMsCi0JMHhjMGYwNGJkOSwgMHhmZjZlMDI5MiwgMHhmNmU3YTZhMSwgMHg5N2VmYzgyNCwgMHg4MTkzZTYwOCwgMHhlZjdjMjkzNSwKLQkweDgzYTdlOWU0LCAweDBlOGVjMmQ3LCAweDExMzM3YTBjLCAweGY0NGNhYjU3LCAweDE5Yzc0MTg3LCAweDA3OWY2OTY2LAotCTB4ZTU0ZjU0ZGMsIDB4YjFhZjhhMTMsIDB4YzkxNGUzMWQsIDB4ZTMxYjg2ZjUsIDB4NDM0MDNhNWUsIDB4MmE5MWU2YzUsCi0JMHgzZDczZmFhNSwgMHhkNWNmOWMwOSwgMHg2MzhiNDdlNCwgMHg3ZjljMGVjZiwgMHhkZWQyNzgwYSwgMHhmMmEwN2YyMywKLQkweGM1Nzc4Njk5LCAweGE2NjdkZjJiLCAweGU4ZDY3OGFhLCAweDZhNWJmMWEwLCAweGE2Y2Y3YzljLCAweDM3N2M5MTZjLAotCTB4YmQ3OTFmN2UsIDB4MzNjOGZiZTAsIDB4Mjc3ODI5NjksIDB4NzFlMzFjZDcsIDB4NGFkZmRmMDEsIDB4ZmQ2MThmZjIsCi0JMHgzZTg4MWI3ZCwgMHhkMjQzZWM2NiwgMHg1YmRlMWNlMSwgMHg5OTdmZTI0ZSwgMHg3ZTVhNGRhYiwgMHgzNDYzZGY5ZiwKLQkweDlhNWZhOTBiLCAweDNkMTdmN2I1LCAweDIyMTdmN2M2LCAweGVmMTkzMzNjLCAweGU4OWY5ODkxLCAweDNlZGQ2N2ZiLAotCTB4NWZiZTM1NWIsIDB4ZDJmYjY1ZWUsIDB4ZDlkZWYyYWMsIDB4N2E0ZjM0ZmYsIDB4NWFhOTI4NmYsIDB4NjIzYjk1ZGEsCi0JMHg5ZGZjODlmZCwgMHhmMzQ1MGVmYSwgMHg3Yzk2Y2ZjMywgMHhlNGY2MGIzYywgMHhjYzZmODNkYywgMHhhMjU3Nzk0NCwKLQkweGY2OWFiOTJmLCAweDFmZTM0NGYzLCAweDdkYzRjMzE2LCAweGY3ZTYxOTkwLCAweGZlMzQxZjM0LCAweGU1YzcxNjcxLAotCTB4ZmNjMWJjYjcsIDB4NTdhZWI3ZmYsIDB4MDFmZmM3NWIsIDB4MDkzNGUxNzAsIDB4MDAwMDQ4ZDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1NTQ3YzA5LCAweGYzN2RmMGY1LCAweDY2NDk5OTk2LAorCTB4MGQ5MDkzMjYsIDB4OGEwMjcxMDgsIDB4MDgxMzgwYTgsIDB4YzNiNDQwNjksIDB4OGUyMmEyMjIsIDB4MjYwZGM1NWIsCisJMHgxMDM3ZDkwMiwgMHhmZGFmZjBmZCwgMHgyZDM2MTAzMiwgMHg0NjgyZDBkNiwgMHhhMGMwNzQ4YiwgMHgwZDA0ODJjMSwKKwkweDAwZTAyNDE4LCAweGQ1MmZmODJlLCAweDViN2JiZmQ4LCAweDE2YzM0YTBjLCAweDdlMWI4MDkyLCAweGNlN2ZlNWI1LAorCTB4ZWYyNWY3YjksIDB4NmQ4MDI2NGQsIDB4ZmRmYjVmYmYsIDB4ZTZmMTY5YmYsIDB4NWRkZjdiYmMsIDB4M2RjZjc2Y2UsCisJMHgxNGZiZGNmNywgMHhmODk2MjhkYiwgMHhlMGNlYzY2MywgMHgyY2FiZDIwZiwgMHhkZDUxYjE4YywgMHhhMGRiNmNlOSwKKwkweDc0ZmE4N2ExLCAweDY1NTlmZmU3LCAweDQyODdlYWQzLCAweDZlZDBhYjFlLCAweDljZmRkNjFlLCAweDdlNTQ4NWIxLAorCTB4Mzg2YjhjNDAsIDB4ZjRkMzFjYmIsIDB4OGYwZTFiMTAsIDB4OTYxNmM5NmQsIDB4NmU3ZGQ4Y2MsIDB4MDkwMWJmNDYsCisJMHg5MTI5NzRiZSwgMHg1NjE1Y2ViMSwgMHg3ODBjYmFmNywgMHgwODVjN2FhZSwgMHgyMGM4ZjdkZiwgMHhmN2MyNTA3NywKKwkweDE2NTJjOTNjLCAweGJhYTIzZmU0LCAweGJlY2MwMWQ3LCAweDZjYjMyMzNmLCAweGUwZGE2NmM2LCAweGMzZmMwZjZmLAorCTB4N2NiZWEwN2EsIDB4NjMxMDZjYWMsIDB4MDU5OTY5ZWEsIDB4NzdlYTdmYTAsIDB4MzQwM2E1MTIsIDB4MDBlZmMzMzYsCisJMHg2YzJkZjk3OCwgMHhmZWVlZDBkYywgMHhlY2ZkMTNiOSwgMHhlOGI3ODA3MywgMHg1YjdlODlmOSwgMHgwOTdmOTBjMCwKKwkweGVjZmZhODkzLCAweDVmYWE0YWZiLCAweGYyZjE2ZjZmLCAweDA3M2U2YzViLCAweDhkOTQxNjM2LCAweDdmOTYzYmNmLAorCTB4OGJlN2MyZTksIDB4N2FhMTZlOWIsIDB4ZDgyYzUzMTgsIDB4YzhiNzcyY2YsIDB4NjM1Y2ZjNGYsIDB4YmJmYWVlOTYsCisJMHg3NmEyMTRmMSwgMHgwNGQzZDg3NCwgMHgzMTg4ZmVlZCwgMHhiNmJmYjVlOSwgMHhkNTQzYzAzMiwgMHgwNTYzZDU1NiwKKwkweGFhZDg0Y2JjLCAweDcwMGM3Zjg2LCAweDg0Mjk1YWU5LCAweDlkOTc2NWIwLCAweGZiNGJjMDMxLCAweDlkODcwZTZhLAorCTB4OWZjYjBmOWEsIDB4YWExODA1YTgsIDB4ZmYzNmI3MjgsIDB4ZGJjNDBhZmMsIDB4YTNhZDk5NTYsIDB4Zjc4NGZjNjYsCisJMHgzYmM3MWI1NiwgMHg5ZTcwZTQ2YiwgMHg2YmE1ODM5ZCwgMHhmN2M3NGY3NywgMHhjY2FkMWEwYiwgMHg2ZTk1ZjUwZSwKKwkweDA1N2E5ZmNmLCAweDU0ZmJmOWMwLCAweGQ3NGE0NTg2LCAweDAxZmFkMDJmLCAweGVhOTIxODVjLCAweGNmMThlZTExLAorCTB4MzZlMGZkYTgsIDB4Y2ExZWI0MzksIDB4OTM5YWI4NzcsIDB4MWZmMTgzNmYsIDB4Y2YzMWI0YWIsIDB4Njc2ZmQwYzUsCisJMHg4MGFkZjI3MywgMHg5NmQwYTI4NywgMHhkMTVlZjg0OSwgMHgyYzhiYzk0NiwgMHhmYWViNjEzNCwgMHg3YmMyZmIzNywKKwkweGFmMjQxYmE1LCAweDVjNTJmMDE1LCAweDQzM2NjYjE3LCAweGMwY2UxZjc4LCAweDM5MDZkNmJmLCAweDlmYzg2M2ZjLAorCTB4MTk2NGUzMGIsIDB4NDllYWQ3NDgsIDB4NTdmNmM2NGMsIDB4Mzc2NzFlNjgsIDB4MGU1NThlOWUsIDB4Mzc2YjFlNjEsCisJMHhkYTAxYmE1YywgMHg1ZWNhZjc4MSwgMHhjNDM4YmM5NCwgMHgyMDBiMGIzMiwgMHhiNzZmYjY1ZiwgMHg4MWQ2N2I0ZiwKKwkweDBkYTA1YmUzLCAweDk2YjhlMjc2LCAweDNmMmU1ODZhLCAweGVlY2RiYjk0LCAweGQ1YWRmZWMxLCAweGQxN2U0MTI2LAorCTB4OWU1YWI1ZWEsIDB4NzVjNWZlODEsIDB4Y2Q4ZjMxOTcsIDB4NDE5YWFmZDAsIDB4ODhmZTQ2MjksIDB4OWIwMThmNGMsCisJMHhjNDUzZmIxOCwgMHhmOTFlYWY5OCwgMHgzNzY5MDk0NCwgMHg5ZmEyZTQxOSwgMHgyZWY0NGYxNCwgMHhmNTRkOTNhZSwKKwkweDRiMTkyNjAzLCAweDAwN2VmZjgyLCAweDgyYmUwMjdmLCAweDU3ODQ5ZDNiLCAweDA1NzM2ZTlkLCAweDNiNzRlOTFmLAorCTB4Mjk4N2U0MjUsIDB4ZmFjNmQ5OWQsIDB4NDhlN2Y0ZjUsIDB4NzU0ZmU4MDcsIDB4NWZkMjliYTUsIDB4YmE1MmE2NTQsCisJMHhmNDQzZDJiMiwgMHgwN2YxMDI3OSwgMHg2ZmQxNzJlOSwgMHg0ZTM2NThkNywgMHgzZTVkNzY4MSwgMHg0YjMxNDZlNiwKKwkweGE3MWJlMjk4LCAweGU3ZTA5YzAyLCAweDAxZGRmMjcwLCAweGYxOTY3M2M5LCAweDZhMTNlOWViLCAweDcyNjUxNzIwLAorCTB4NTNlNDliMTUsIDB4MDVhYzAyZmEsIDB4YjQyZjMwZTYsIDB4OWJlOGRjYWYsIDB4ZDdiMTlhMzgsIDB4MWM3MWUwNTksCisJMHg1MDI5MjJmZiwgMHhhYzY1NzQ4MCwgMHg3NDBmZDUzZSwgMHgxZTgxMjI1OSwgMHhjNTJkN2MwMSwgMHg5NjFlMDI0MSwKKwkweDA2N2UwNWY0LCAweDRmNzEzZDNhLCAweDI0YjJiM2Y2LCAweDcwODg5YWM2LCAweDY2OGY3M2RlLCAweDU0MzUzZDUwLAorCTB4MGNmNTBhOGYsIDB4YzkzZDc3M2EsIDB4ZjU0YzczZDMsIDB4ZDAyZjRmMjQsIDB4ZjU0YjU5ZWIsIDB4OWVhZmNmZDgsCisJMHgzMThmYTYyNywgMHg5MTdhNjdmNywgMHg1ODBiY2Y1ZSwgMHhmY2YzOTE2ZSwgMHg2MzNjOTVjNiwgMHgzMzNmYjlhYywKKwkweDk0OWVhODRhLCAweDAwMmNiZGJiLCAweDdmOWQ2NWU1LCAweDg2NGZiMzU4LCAweGY4YzZjNzdjLCAweDIzMzI4ZjExLAorCTB4ODZkZjhkMWYsIDB4YWE0MTM5ZjUsIDB4OTcxNDdjOGMsIDB4YTc5MjYzMTMsIDB4MDk4MjVmNzgsIDB4OWZiOTMzZWUsCisJMHg3ZjkyN2NhOSwgMHg2NTNmMjlhMCwgMHg3YzExYTVkYSwgMHg1ZWI3NzBlOSwgMHg1NGU4NjAyNiwgMHhmZWEzNWUzOCwKKwkweGQyMzRmZDZhLCAweGQ5ZmFlMzNiLCAweDlmYTA3ZTA4LCAweDAzY2VmNDgzLCAweGJiMTcwMjYzLCAweDU3ZDhkZmExLAorCTB4NDA3ZmY0MDYsIDB4OGVlZTVjMGIsIDB4MmUzMDM3YzIsIDB4ZWE2MmE1ODksIDB4OTkxYTYwYjEsIDB4NzhlNTU0YmYsCisJMHhmYmZmZGYxYiwgMHhmZGUxMDdjMSwgMHhlMGU3NGI3MiwgMHg0YmZmODA3OCwgMHg4ZTIxZjcxYSwgMHg0Y2E4OGZmYiwKKwkweDMyMzE2ZTgxLCAweDMxNzJjMGFiLCAweDZmZmE0NjU2LCAweGIzZjY0NjY5LCAweDk3NWUwMzQxLCAweDkxN2UwMDBkLAorCTB4YTY1ZGViYmEsIDB4MWY5MTUyMDYsIDB4NDExNTgyNWIsIDB4MzAyNWNmZTQsIDB4OGM3ZWIwNDEsIDB4ZTExNTY0MWQsCisJMHhmZWYwODVlMCwgMHhjNDU0YmM4MCwgMHhmZDAzNTViZiwgMHg4MzVmNmM2MSwgMHhmYjUyODdmNiwgMHg1YjdlZDhhZCwKKwkweDA3NWJlZDJmLCAweGI3ZGE5OGU2LCAweGRhOTgxN2E1LCAweDNlZDA2OWI3LCAweDcwNjc0N2M4LCAweGYwMWY2OGJlLAorCTB4OTNiMTg2MzcsIDB4NmZiNTNlNmMsIDB4ZjZhMDJmNGQsIDB4YzBhYzZhOTcsIDB4NTc0YzdlZDQsIDB4YmI2MGRmZmIsCisJMHg0OWZiNjNkZiwgMHg3MDNmYzY1MSwgMHhlOWZjNzk4YywgMHg2YmYxZTY0NSwgMHg0MTZjZmM3YywgMHg0MzFmYjQ1MCwKKwkweDIwYTQ5N2UzLCAweDExN2E3ZjFmLCAweGQ3OTViZjFmLCAweGFiYmVkNWRiLCAweDA0OWFmZjBiLCAweDVlYTQzYWVkLAorCTB4YWM2ODNmYzYsIDB4OTQxN2ZjNzksIDB4ZTU2ZmM3OTgsIDB4MmMxN2JiZWQsIDB4YTgzYmVkMTMsIDB4MTk2OTc4ZmQsCisJMHgyNTA1ZmYxZiwgMHgwZDY2YmVkNCwgMHhiNDhmOTE3OCwgMHgyMTE1MzFmZSwgMHg0MGQzNGY5YywgMHgwNzQ4NTI4MCwKKwkweDkyMWQyOGZhLCAweDkzZTgxOGMwLCAweDg0ODFiMmRmLCAweDM4NjIwNzg3LCAweDAzMTM3ZGRmLCAweGQ2ZThlNmZjLAorCTB4MTIwNDJjYTcsIDB4OTk3MGYzMDgsIDB4OGRlMmU5ZTAsIDB4M2YzZTM0ZTMsIDB4OWY1ZTY5MDcsIDB4YWIzYWJhMmQsCisJMHg4Y2Y5YTY1MSwgMHgyZTg2YjRhZCwgMHgzN2I2ZmU4MiwgMHg2Nzg0NDFjYSwgMHgyNDMyYmNhZCwgMHg3NjBhN2NkMywKKwkweGIwYTdiZTAyLCAweGYzZmYzZTMwLCAweDhjZWI2MWFhLCAweDY3NGM4YWUzLCAweDJkYWRhYjU3LCAweGQyZWFiOTA2LAorCTB4OTBkOWUzZWYsIDB4MDU1ZmU4MGEsIDB4NmVhOGMxMzIsIDB4MzRmNDE1YjgsIDB4MzlmYzNkMDMsIDB4MGY0YzYzZTgsCisJMHgzOTJlZGNhYiwgMHg1ZDljN2EwNCwgMHgwNTliOTQ2YywgMHhiMjA5MmVkYywgMHhmZjQwODdmNywgMHhkZmZhMjI3ZiwKKwkweGI3N2M3MGFhLCAweDg4NDI5M2NlLCAweGNjNTY2ZmZmLCAweGNkOWY1MGQxLCAweGE0MDU4ZWFlLCAweDVjYTNmNzc3LAorCTB4YmI3M2E5ZDAsIDB4MTRmNjQ0MzUsIDB4OWY4ODA3NGMsIDB4MTkxNDQ5ZGIsIDB4MWJhZWQzZmIsIDB4MzA1Yzk0ZGUsCisJMHgzMWY0ZDYzZiwgMHgwYjM3NzdiZCwgMHhmMjg1NGUyZCwgMHgwZWU3OTczMywgMHhlZmY4YzM3MCwgMHgyMTFkNjY5YSwKKwkweDdjYzRmY2UzLCAweGM3MjQyZGZkLCAweDg3MjViZmFjLCAweDJiMGQ2OWIxLCAweGRjMDBmZWQ0LCAweGJjZmQ0ZDNlLAorCTB4MWRmZWYwYzUsIDB4NTc3YzMzMDEsIDB4NTc2ZTE5ODEsIDB4ZWQwNWFhNDMsIDB4YWQ4OTQyOTksIDB4YTllZjdhODUsCisJMHhlZGViZTczMCwgMHgzODEyOTY0YywgMHgzZjdiNDU1ZCwgMHg4NWY0MWMwMSwgMHgzYTYwZjc0NywgMHg4OWJiMWYwMiwKKwkweGZjZGRkM2FlLCAweGU1M2ZiZDVkLCAweDRjMmNhOTBmLCAweDEyNGI3MWYzLCAweDUxMjdmYTIzLCAweDhmOWI4MGI5LAorCTB4ZDNiZmIyM2IsIDB4MGZjZjliNTUsIDB4YTBmZTk5ZmQsIDB4ZWM4Y2Y4NGMsIDB4NThhZWNiN2YsIDB4ZDllYzA1OWYsCisJMHg1NTJmOWE5NiwgMHhmMWM4YzE2NCwgMHhjNjdmZjY0NCwgMHhiOGYxYzhmYywgMHg3MjFmOWMzNSwgMHgzOWNmOTE4MywKKwkweDUzZjI0NDlmLCAweDVmYjhlMzc5LCAweDUzZjAzMjFlLCAweGJmYjVmZDY5LCAweGFmNzg2NDNjLCAweDEzMjZlZWI4LAorCTB4YzNiYTE4NWMsIDB4MjZiZjNlNTQsIDB4YmIzZjk0ZDcsIDB4M2Y5NGQwYmEsIDB4MTMxY2Q5NzMsIDB4ZDA3YzFiOWMsCisJMHhmY2M2N2U1NCwgMHg3YmZjYTYwNSwgMHhlNTMxMWUyYSwgMHhjMmIwNTVkZiwgMHg3ODExZGYwNCwgMHhmNmZlNTRjYSwKKwkweGY5NGQ2YjY5LCAweGRjOTc1ZDk2LCAweGY1NTQ3Mjg4LCAweGRlNzBjYzgxLCAweGZhZDFkYWY4LCAweGJmMzdiNDczLAorCTB4YTQ1ZTI4NzYsIDB4NTdiMDExYzcsIDB4ODE4ZTBlNTAsIDB4N2I2OTgyYmQsIDB4YWJiMjQ4ZTMsIDB4MzFlNjBmNDEsCisJMHg0YjU2YTEzMCwgMHhjNmNiODNmYiwgMHhhNDY2NWVhMiwgMHhlZmQyNDMzZiwgMHhjNjM0YzE4MywgMHg4NDNjOTc5ZSwKKwkweDYzNDZiOTNmLCAweDg5NjE2MDYxLCAweDcxZjE3NDI1LCAweDZmYzg2Y2E3LCAweDBkN2U0NzM5LCAweDllYzhmYTA4LAorCTB4ZjQ0YjcyZjksIDB4NzJlYmU1ZTcsIDB4ZDNiZDQwMmYsIDB4NWY4MDNlOWIsIDB4M2FlNzljN2YsIDB4OTkxMDNkODQsCisJMHhiZjMxMjI1ZiwgMHg3ZWJlYjlmMSwgMHg3YWUyNWNiYSwgMHg1M2FjNDRiZSwgMHgzYmVhNWU0YSwgMHgwZTEwYjk5ZSwKKwkweDViMzhhZTBmLCAweDU0ODBmNTdiLCAweGZkNjg5M2Q0LCAweDgwM2YyMTI3LCAweDUxZTgxODE0LCAweDI0YzgzNzVjLAorCTB4NjViYjZkZGYsIDB4ZWExOTU3ZWEsIDB4OTlhYmQwMDQsIDB4NDI1N2JmY2MsIDB4OWJkZTEzM2QsIDB4ZWMzMGNiN2UsCisJMHhkNDc1ZWY4NywgMHg4OTMxYWNmYiwgMHhjYWI2ZjVlNiwgMHhhNDNjYmZjOSwgMHg5NGZjN2QyMiwgMHg0NjljYTkxZSwKKwkweDgwNjU2YjY5LCAweDA1OTU0M2QyLCAweDU5NWU3ZTk0LCAweGU1NGI2OTQxLCAweDU0MGY0YTdjLCAweDYzZmQyOTA2LAorCTB4M2Y0YTMyZTUsIDB4ZjRhNmFjYWQsIDB4NGExYWNhZTMsIDB4NTEwY2FjM2YsIDB4YTNlOTVlZGEsIDB4MmU4Nzk3NTQsCisJMHhmNjE3ZWJmZCwgMHhjMGI3NThiMCwgMHg4YjBmNmUwMywgMHhiMjgyMmNiMSwgMHhkZWU3MjRjZCwgMHg1M2YzOTQ1NCwKKwkweGEzMDY2ZjhlLCAweDYzZWE3ZmJkLCAweGRlOGNhMjYwLCAweDZmYzkxNWYxLCAweDQ3ZDFkM2JkLCAweDA4NWU0YWY2LAorCTB4Y2Y0ZmE3OTgsIDB4YTcwYzdiN2MsIDB4MjZjMmRkOTMsIDB4OGY0N2QwMzMsIDB4Zjc5Y2Y0NWMsIDB4MmIwNGExZGUsCisJMHhhOWMwMzJjOCwgMHg1MTljOWJkZSwgMHgwZmI5ODVlYSwgMHgzYTJlNzVlOSwgMHg3MGU3NWYzMSwgMHgzZWI3Njc1YywKKwkweGFjNmM5N2ZkLCAweDIwNjk3MmY3LCAweGNhZjc4NzlmLCAweGYwYjMwZjM0LCAweGQ3YTQ1ZWIzLCAweGY0OWJjNTBmLAorCTB4NWJkMjlmZGEsIDB4MmU4OWRjYTAsIDB4MzNhNzM1ZmMsIDB4NmU0OGU3NDgsIDB4ODM1NGZmYWEsIDB4Yzc4ODI5OTUsCisJMHgyZTEwZDhhNiwgMHg3YmVkNGY4ZCwgMHgzOGYyODVkNiwgMHgzZWFlNTUzNywgMHg3Yzc3YjIzNCwgMHg1NDY3ZDY5NSwKKwkweDI5ZTMwYzNiLCAweGE3YzMzNDZmLCAweGRjYzlhNWFhLCAweGJiODllMDdmLCAweDk1ZjIxODc1LCAweDQ1ZDBmYWJiLAorCTB4NGE1NGZmNDgsIDB4YTZlNjdhZjUsIDB4YjFjZWQ0NmEsIDB4N2M3MTQxYmEsIDB4NzlmMTBlZmUsIDB4ZjEzYzYzNzAsCisJMHhhOTNiYWMyYiwgMHgzZmJiM2ZmYywgMHhmN2EzZDViZCwgMHhmNjA2YjE4NywgMHgwMWY1MGQ4NSwgMHhmNzNhMGRlNCwKKwkweGRkMDdhOGZhLCAweDNmMzRhZjk1LCAweGZkNDlhYmQyLCAweDE4ODVlZDA2LCAweDIwNjY3N2Y4LCAweGFjMTBhYmQ2LAorCTB4MmY1ZTViZDcsIDB4ZTM5N2FkMDcsIDB4ZjZhNjhkZjMsIDB4YmU4ZjNkZTAsIDB4N2FmN2M3YTYsIDB4YjU4NTViZTcsCisJMHg3ZDA0ZTNlYSwgMHhlN2YwYTU3NSwgMHhhYmQ5ZDcxNCwgMHhiYzRhZjNjZCwgMHhlYzZmMmUwOSwgMHg2NzlhNmQ1YiwKKwkweDdmOTAwZmYwLCAweGM4MjkyMTU2LCAweDliODIyNTNmLCAweDMyYzcxNDNhLCAweDZhOTdmYTA5LCAweGU1YmQ1MGYxLAorCTB4NmE1NzJmMTIsIDB4MWUwMmQxNmIsIDB4YjQ2NmM3NjIsIDB4ZDFjZGVlMzMsIDB4ZmI3M2NmZjksIDB4MWZkZjQwMWYsCisJMHgxZWNhYWRmZCwgMHhkN2UxN2NjNSwgMHhiMDZjZjU1MSwgMHhlN2U4MmQ2ZiwgMHgwZGJkZDAxMSwgMHhlZjUwNTNjNSwKKwkweDNkNzZkZDFkLCAweDk4YjMyN2Q5LCAweGE0OGI4NWRmLCAweDhkOWQ1NjAyLCAweDY2MDljZTc2LCAweDdmZmM4Yzk5LAorCTB4MzVkZWZkODIsIDB4YzhkZWIwZDIsIDB4OWZkNDY4YjcsIDB4ZjNjY2NiOTksIDB4MjY2N2Q4MmMsIDB4MGNjNmJmMzgsCisJMHg5MzliYjFlNywgMHg1NmYzZGY5MSwgMHhhMGI3MzBhYSwgMHg2ZmYzOWE1YywgMHhiZTQ5YjhiNywgMHgxMmM1NTlmMiwKKwkweDNmMDhlZjVhLCAweGE2NmViZGQ4LCAweDJmYjkwN2Y0LCAweGVjOTllNTdkLCAweDg3ZThhMWRjLCAweGY3NWJmYWUwLAorCTB4NzAyNjE0MGYsIDB4MzEyOGE1M2IsIDB4ZmYyMGY5YTQsIDB4M2Y5MTg2OGIsIDB4ZmJlMTgyYjksIDB4YTdhODI1YTEsCisJMHg1ZGU2NGU4MiwgMHhlZmQyN2FjZiwgMHhiMjNmZjY4NywgMHhkMjdjZmFiZiwgMHhmYTIxNGZjMywgMHhiZTQ5ZDcyMSwKKwkweGRhNzU5NDUwLCAweGQ4NDkxNmMzLCAweDk3NGE0MTViLCAweDc2ZWI3MThiLCAweDVjMDQ0ZDZiLCAweDQ3ZDcwMTFiLAorCTB4YmYzNzdmYzAsIDB4YmYxMzMyMjUsIDB4MzUwMjVhYTUsIDB4NWZjZTI0OTYsIDB4NGE0ODJmNjgsIDB4NDdmODE2YTcsCisJMHg1MWVkNGZlYSwgMHhiNTNmZWQ3ZiwgMHgzZmE4MzRmZSwgMHhmZDdmNTRkYiwgMHgwYmZlYjUzZiwgMHgyOWJmZjQ3YiwKKwkweGFmYTVmZDVhLCAweDA0MTZkYTZjLCAweDc5YjQ1MzdkLCAweDNjYzE4Yjk1LCAweDRlYTk1NDc0LCAweDRiZGQwMmY2LAorCTB4MjE3NjJmZDYsIDB4ODI1MTFjMWYsIDB4YTNlN2U0MmUsIDB4MzQ3Mjc5MjEsIDB4MjJkMmY4N2UsIDB4ZTdjY2EyZmMsCisJMHg4NTVkNzA5MCwgMHhjN2ZkNDI3ZiwgMHg1NGQ5Zjg1ZSwgMHg1OWJlZTdiNCwgMHhiZDY5YmFhZiwgMHg1YjBkNjc1NCwKKwkweDFhY2I0ZTQxLCAweGRmYTBhNzBhLCAweDFjODNlMDE3LCAweDQ2NTI3YTVlLCAweDlmY2NkMWI4LCAweDRhYWZjZjQ1LAorCTB4NzAxZWZmNDYsIDB4ODQ0ZjU4OGEsIDB4YWIyYTVlYzksIDB4OWMyNGYzZmQsIDB4Mjc1OWNhODcsIDB4N2JlNDU5YzksCisJMHgwNGU5ZmVkOCwgMHg1YWI5OGZkMiwgMHhlODdjY2Y1YywgMHhlNWY5ZDkyNywgMHgwZGU1MmYwMiwgMHhiYjI5M2IzZiwKKwkweDMwZjZiZDMwLCAweDRjYjAxM2VhLCAweDdjOGYwZWM4LCAweDQxZDg0MGFmLCAweGM0Y2UyYzg3LCAweGIxNDI1ODU2LAorCTB4YTExZmIxMWYsIDB4YzJmMWQ0ZGUsIDB4YWEwZWRjNDIsIDB4ZjBlNGYwZGEsIDB4YjZhZmQwODMsIDB4MjRiYWRmZGEsCisJMHg3OTc0YmUwMywgMHhmMzNmNTUzYiwgMHg3YTdhYWZkNywgMHg2MmVkY2JkNywgMHg1ZWZkZDdiZCwgMHgzNGYzZGU4OCwKKwkweDg5YWRmYjBhLCAweGQ4NmEyNWE3LCAweGM5NzFmNjg1LCAweDg0MWJkNTVhLCAweDllOWIyNWM3LCAweDVjNjllZTdkLAorCTB4ZjU2MjdlYWYsIDB4MTdmNTA0NWUsIDB4YzNlMzdhNmYsIDB4NmYxNzAwMzEsIDB4ZjBhNzEzNTEsIDB4ZTRhNDM4NjEsCisJMHhjMzk0ZmE2ZSwgMHhiYTIzZjliZiwgMHhmMmY0NTFlOSwgMHgxODY3OWExYiwgMHg0MjcwZmU3ZiwgMHhiNzhhNWQzNywKKwkweGIwZDhkNmVjLCAweDUwOThmODllLCAweDcxNmI1YmJmLCAweGZkNGZhMTQ0LCAweDY3Njg0OWMxLCAweDU2Zjg2ZDU1LAorCTB4ZDFlNTc1YzMsIDB4Yzk0YjEyNWQsIDB4YjVjZjgyODgsIDB4ODBiZDkwNmYsIDB4MGE3YTIyNzgsIDB4MmZkMTc1N2EsCisJMHhkMDM5N2NhMiwgMHgyNDdhZjUwNSwgMHhiZGNiMjJiZCwgMHgxNDY1ZmE4MSwgMHg5M2ZkMTdhZiwgMHhiZTJmZGZjMCwKKwkweDRmZWM3ZThhLCAweDQzYzQ1ZWFkLCAweGI5Zjc4YmMxLCAweDk1ODczYzcwLCAweGNmZTdjZTBhLCAweDNmNDY0ZTJjLAorCTB4NGMxYTgxN2QsIDB4OWZjYTUzNzYsIDB4OWZiOWFjMTcsIDB4YmRmZjJmZjgsIDB4ZmFmOTkzZmIsIDB4NDJkN2Q3ZDAsCisJMHgyZmIwNTU3MywgMHhlYWY2NzM4ZSwgMHg3OTljNjhkYiwgMHg1ODdjNDAyYywgMHgwZmVjOGNmMCwgMHhjMmI1ZmE0MSwKKwkweDIyODk2ZjI2LCAweDk3MzJjNTI3LCAweDgwZWJjMzkzLCAweGMzY2UzMGI4LCAweGJmNDE0ZWI4LCAweGQwZTVlZmVlLAorCTB4Y2M4ZmYyN2EsIDB4ZWUwZmE4NjEsIDB4NmNmMWZkZDcsIDB4OGI1ZmMxMmUsIDB4YjI3MTg0ZmQsIDB4ZGFlNzVmNDUsCisJMHhiYjViZmM0YywgMHg3NGU5MTliNCwgMHgwNTJmODA2YywgMHg0Y2U1NmFmZCwgMHg0ODdjMGEwOSwgMHhmOTVlYTA2NywKKwkweDM4NTNhYmJkLCAweGM5NDc5ODlkLCAweDVkODFlZjE2LCAweDYzOWYwMTMwLCAweDY3ZDU2NmY5LCAweDhmN2E2ZTFmLAorCTB4NmVlOGM5OWQsIDB4MWY2ODllN2YsIDB4ZjM4MzFkZmEsIDB4NTY2NGUxZjksIDB4N2M2NTFmNTAsIDB4MDdhZWIyMzUsCisJMHhmMDM3NWU2MCwgMHhiOWRlNDE5OSwgMHhjMjNlZDdmYywgMHhmZjk3NWRlNSwgMHgzMTkzNGRkMCwgMHhiOWY3YWJmZiwKKwkweDM4N2JlMTFjLCAweGMyYmY0MjVmLCAweGZiYmY5NDI5LCAweDgzZjQ4OTU2LCAweGM5YTM4NTk1LCAweGU0MmFhZDc5LAorCTB4YzkxZjljZGMsIDB4NDU3ZmQwMmYsIDB4MGRmMDMzOGEsIDB4NzQ0MDkzYjYsIDB4ZGU1YWJmMjAsIDB4YThkZjc4NGEsCisJMHg1NzVkYjE1NywgMHgzOTc1N2FjZiwgMHgyMGZhMTdjZSwgMHg3MDdkMDY0ZiwgMHg2MDNlYjc1OSwgMHhlODFlYjlhYiwKKwkweGYyMGFlZWRkLCAweDdhMWE5YmY1LCAweDVmOTQ2OWVlLCAweDA3YTBkNzkwLCAweGUzZjU1N2U1LCAweGRjNmY4ZmY4LAorCTB4MjA5ZGUxZmIsIDB4NzVlYmM3YjcsIDB4ZDVlYjM1YjksIDB4NzgyZGI5NDgsIDB4N2M4NGJkNjksIDB4YzdiNzI5MWEsCisJMHg4OTRhYzAwYiwgMHgzY2YwYjcyNiwgMHhiNDE2ZGNhYSwgMHhhYWY0NGJmYywgMHg2NWM3Yzc4ZSwgMHhmNWQ1NWViMywKKwkweDhjZjg2ZjY0LCAweGNhOTc5M2Q0LCAweDEyN2FhODllLCAweGVjYjNlZjdlLCAweGYzYThmYzllLCAweDQ1N2ZjZWExLAorCTB4ODBiZDI5YmYsIDB4OWYzYTA5ZmMsIDB4YzVkODdjZWEsIDB4ZjYxZjNhYTcsIDB4ZjA5OGNmZjAsIDB4M2I3Zjk5MTgsCisJMHhjMTBjMDRmMiwgMHg3ZjI1NWRiZiwgMHhkZjEzNDk2MiwgMHhkZWY3ODM4ZiwgMHhmODQ1OWZlYywgMHhjNzM0ZDFmMiwKKwkweDlmZWNkZmFhLCAweDExNDM4NDY4LCAweDc5NDQ3ZDcwLCAweDhmZWMwNDVmLCAweDgwODgxZjI4LCAweDRiZTU0YzJiLAorCTB4OGM2YWY3MWEsIDB4MmE2YzIwZjgsIDB4MmJmZjlkNjcsIDB4NzU5NDQ1ZjYsIDB4OTUwZjNlYWMsIDB4ODJkNDljMzcsCisJMHg5ZDY5MWZjOCwgMHg3NTNmZWExYSwgMHhlOGE4OTgyMSwgMHg5MzI5ZGMzZiwgMHg3MDAzYjBmZiwgMHhlOWRhMDRiYywKKwkweDBhMTE5OGQ4LCAweDZjNTkxZTgyLCAweDBlY2RlYmU3LCAweDAxMmJhNzc3LCAweDFjZjFjNWQyLCAweDk2ZDI0Y2VlLAorCTB4OWZkNDFlYTAsIDB4MWZiOWRhNzcsIDB4ZTlkZmMzYTQsIDB4MzFmODM3OGEsIDB4YTRjOTM2MGUsIDB4NmM0MjViYzcsCisJMHgwOTNmMzQ3MiwgMHhkZjg0MzRjYywgMHgzZTViZDYxNiwgMHhlMDc2OGZmNywgMHg4N2I2MzNiZSwgMHhjZjQwY2VmYiwKKwkweGZhNDc2NWFiLCAweDU2YmY1YzdjLCAweDIzNjA1ZWNiLCAweGVkYzE2YjM2LCAweDc3YTE3NDJlLCAweDcxYmEwZDM0LAorCTB4ZmQ5ZjNjMWEsIDB4NmRiN2NjYjYsIDB4YWZhNTNlODIsIDB4ODQ3MWRkNjEsIDB4MmIxODlmMDUsIDB4NzJkZTdlZTEsCisJMHg0ZDk5OWZlMiwgMHg2YjMyMWQ3YywgMHgyODc5NzQ3OSwgMHgzOWU1ZWYxMiwgMHg3N2E4NjllNiwgMHhiOWYwZmQ2MSwKKwkweGQ3YWMwZmQxLCAweGUyM2FiMDUzLCAweDQyZjVkMzc5LCAweDNkNjlhYTZlLCAweGNlNmI1NDU4LCAweGQ0ZjU4ODBmLAorCTB4YzlmZWJhMzcsIDB4N2ZhNDk5NjQsIDB4ZWI4NGExNzAsIDB4YWZiN2ExN2EsIDB4MzhkZTg3OTYsIDB4YjFkM2U4MGQsCisJMHhiZmI4NjY0ZiwgMHgyNjQ5YWE3YSwgMHhjOGRhOWNmYSwgMHgzMDU5NTNmNywgMHg4Y2FmZTQ4OSwgMHhkNGJlOTI3NSwKKwkweGYyODZkNmYxLCAweDdhZWY3MTc1LCAweDlmZWI2ZGFjLCAweDNlNDIxZmIyLCAweGUxODdmNmRhLCAweDZkYjQ4MmJmLAorCTB4Nzc4MzI3ZGIsIDB4NDdjYWZjMjAsIDB4M2Q2MDdmZTksIDB4NjVkODRmY2IsIDB4Yzc3MzNmMjcsIDB4N2ZmMTI3MmUsCisJMHhhNWRmY2VjNywgMHg3NmYwODQzZiwgMHgzYWY3ZjkyYiwgMHgxYzNiN2Q3NiwgMHhhMTYzYjFmOSwgMHg2MGY1MDBiNSwKKwkweDdlYmUwMGM3LCAweGVkZjlkYWFhLCAweDdmOWExNmYwLCAweDMzMWQxMTE3LCAweDdkZTg4ZDE0LCAweDA3MmZlOWFhLAorCTB4NTRlMDJlMzAsIDB4ZWQwYThjMTMsIDB4MjRiMTVkOGIsIDB4ZGFhZmU1NWYsIDB4YjFkMTFmYzksIDB4ODBlY2RiZjMsCisJMHg5ZTM3OWZlMywgMHhkM2ZmYjEzMiwgMHg1ZWQzNjRlMSwgMHg3M2M1ZmVjMiwgMHg4ZWY5NzliZiwgMHhjMDJlY2ZkMSwKKwkweGRkODZmMWZkLCAweDlmYzg0Y2RhLCAweDg3NWZkYWYwLCAweDc4ZWQ3ZWEzLCAweGVkNGRkYjg5LCAweGRjMWFjYjZhLAorCTB4NDhiYTE4ZGYsIDB4YmQwMmE4NWUsIDB4ZmFjODUxZGEsIDB4ZDE2ZmI2MzEsIDB4NDcyOGYxYzQsIDB4NTdmMmYxM2QsCisJMHgyZjljYjNmMiwgMHg3YzI4MjYzZSwgMHg4ZmVmZmIzZCwgMHhmNWM3YzkwZiwgMHg5MzY0MzM5ZiwgMHgxZGRmZGM3MCwKKwkweDg5ZWEwM2Y4LCAweDRiZTI1NjVkLCAweGViYzdiYzdkLCAweDczM2Q5MDE3LCAweGZiZGY3MWFlLCAweDUyZGM2ZTNmLAorCTB4YmRjNjdjZjgsIDB4ZmY5Y2RmZTAsIDB4ZmE4NzhhYWQsIDB4M2QwNzI5MTcsIDB4MDNlNzdjZjksIDB4N2E3MjZmMDQsCisJMHhjOWU3YmZhOSwgMHhhN2ZmNmJlZiwgMHhhMDI1ZmRkMSwgMHhlM2RjZWJiYiwgMHg0YjNmZmYwZSwgMHgwYmE3YjdmNywKKwkweDNlMzFiYmJhLCAweGJmYjVmY2EwLCAweGE4N2VmZjUyLCAweDM3Zjk2YjllLCAweGUzNmY3YmE3LCAweGI3ZmRlZGQ3LAorCTB4MzNmNzllMmMsIDB4NTY2NGZjYTEsIDB4ZTJjMzQwZWQsIDB4NmYzZGQyZGEsIDB4NWJlZTQyNjcsIDB4YjFlMzdiNjksCisJMHhmNjIzZTNiZiwgMHg1ZTM0ZjQ3YiwgMHhmMWI2ZmVlNSwgMHhlZDAzZWZiOCwgMHhhYzQ5NzhiMiwgMHhhYjNhZjkxNywKKwkweGZhMmZiMGJmLCAweDNiMjNjYmNmLCAweDYzZGE3ZmE0LCAweGM1MzA0ZjY0LCAweDJiZjcxMmIzLCAweGU5OWY0YWRmLAorCTB4MzYwYmQ4YTUsIDB4YzIwMGUzZTIsIDB4NmMwNTJiZWUsIDB4NGFmZTZmNWUsIDB4NGFkYzNlNjIsIDB4ZmQ3ZTlmZWQsCisJMHhkMzczYjQzZSwgMHg4M2IyNjRkMiwgMHhmN2ZiMjUyMSwgMHhmZTY0ZDc3NSwgMHhhZDMzNDRiYywgMHg5OGY1YWU4NywKKwkweDEyOTM0N2Q3LCAweDg5YThlYmNkLCAweDE5YWJiZWEyLCAweDBlZDVmZmVmLCAweDNjMDIxNDI5LCAweGNiZjAxZjhjLAorCTB4OGVhN2Y0NDQsIDB4MTI2NTQ4YmYsIDB4NjA1ODkzYzAsIDB4MjYzYmFlMTEsIDB4OWRmNWNjM2EsIDB4ODM2YzdkYzAsCisJMHhjNWVmZjFiZiwgMHgzYzJlYzRlMywgMHg0N2U5NWMwZSwgMHhjOTkwMGUzYywgMHgzYzRlN2FhZiwgMHg2ZjA5YmY2MiwKKwkweGM3OGMyMTk5LCAweGUzOTc4YTYxLCAweDRiZDRhMTMxLCAweDFlYjE2YTdlLCAweDFkYTI2ZWM3LCAweDM0OTYzOGEzLAorCTB4YjgyYjNjYTMsIDB4YTA3OGU2OWUsIDB4OWViZWI4NzUsIDB4NGNkZjBkZWUsIDB4ZDExNWNmYWMsIDB4MjU3ZjhlYTQsCisJMHhjZGQ5ZjY0ZCwgMHg1Y2ZhZDFmNSwgMHhhNTBmY2JhNywgMHg3ZmM3NGU4NywgMHhhYWM5MmU5NCwgMHg4ZTY5MmU5OSwKKwkweGViY2EwYTM5LCAweDhjM2Y1YzY0LCAweDFjOTlmMmM0LCAweGI0MmEwYjRlLCAweDBmZDYyNGRmLCAweDI4ZTY3OGQ3LAorCTB4YTQyNzgwNDEsIDB4YWY0ODJhNjUsIDB4MjJmNmRiN2MsIDB4NzliNTFmOGMsIDB4YzVjN2VhMjUsIDB4MWY5YTE2NmQsCisJMHhlMTEyNTk2YywgMHg0MjhkNDg3ZCwgMHhmNzE2N2JmMCwgMHhkNGY3YTQyOCwgMHhmZTM5NWUyYiwgMHhiYjNmNDMyMCwKKwkweGJhMDZlMzRmLCAweDdjOTdlZjlmLCAweGQ4Y2NlNjdmLCAweGYwYzdmNDZjLCAweGRlN2ZjNjFmLCAweDU5YjdlYjAwLAorCTB4MDYzODU5YWIsIDB4NjE1YjM0ZjAsIDB4ZjQwNGI4YzEsIDB4NzNlYzRiOTMsIDB4MGNkYzlmOTMsIDB4ZTRhYWVmZTMsCisJMHg1NWNlN2FlZSwgMHhmMmJkMzdiZSwgMHgwMTVmNGVjZiwgMHg0NWY5ZjYzZCwgMHg5NGM3NmQ4YywgMHhjNjI4OGE2ZiwKKwkweDlhOGZmNmY1LCAweGY3Y2FiZTM4LCAweDFlNDBkMGIzLCAweDBkZmIyMTg3LCAweGFiMmY4YWZiLCAweGNhZjMzZmRjLAorCTB4ODkxYTVmMWYsIDB4MWQ3MWRjZWIsIDB4N2ViOGUzNDMsIDB4YTk3MWUyY2QsIDB4OGE3MGJkNjIsIDB4MGViY2UyNzksCisJMHhlMjgzYWZkNCwgMHg5Zjc0YmY2OCwgMHhlNzE2OGNlYywgMHhiZmFjNDFiOCwgMHgyOGYxODM3ZiwgMHhiMmQ0NzY5MCwKKwkweDU3ZDcxOTZhLCAweGJlZmM5M2FjLCAweDViMWI1YWMxLCAweDY2MWUyNTFmLCAweDdlMTE2YThkLCAweGY4Mzc0MTIyLAorCTB4N2ZiOGQ5YzksIDB4MGQ5ZmRiYzMsIDB4ZTkxOWM2YWYsIDB4YThlNTM2ZDYsIDB4MWQyN2JjMzIsIDB4NjFiOWY3ZjAsCisJMHhjNTFmZWFmZiwgMHgxMWY3YWUyZiwgMHgyZGVjMWJiZiwgMHhmNDUxZmM5MywgMHhkZmMwYmQ0NywgMHg5MWRmM2RkNCwKKwkweGE2ZDJmNDlmLCAweGRmZTQxNmI1LCAweGE2MmQ2YjRiLCAweDU1M2FkOGZkLCAweGIwNDYzMWY4LCAweGE5YWZkODExLAorCTB4MmNjZWVjN2IsIDB4ZDkzZWNiYTQsIDB4ZTVhNWYxOGIsIDB4NDBiNTI3NGQsIDB4NDhjNDdkOTQsIDB4ZThmZDYyN2MsCisJMHhkZDU1NmY3ZiwgMHhiNTBlZWVkNCwgMHg3NWUyMjY3ZSwgMHhjMzFiMDljNywgMHhhZDc2ZjU3NSwgMHgzZjVhMzhiYSwKKwkweDdlZjJiNGVmLCAweGY3ZjU2NmNlLCAweGY3ZjhjZjBkLCAweDBlYjhlZmMzLCAweGFlM2M3ODQ3LCAweGYwOTk2YjNmLAorCTB4MWZmMjQ0ODMsIDB4NTUzZTNlMjMsIDB4YmYzODQyYzcsIDB4ZjUxNTdhZTIsIDB4OGM4ZGE5YzIsIDB4Yzk0MDc3ZTYsCisJMHgwNmZlYjg2MywgMHhkMWIxZmY3OSwgMHhlMzcxNzNhZiwgMHg1ZGEwZGY5NiwgMHhiOTI0ZDY1MCwgMHg0Y2EyNGI3MSwKKwkweDhmZDBkMTY5LCAweDJmMThkZTViLCAweGU5OWMzY2UzLCAweGRkNmZlM2QxLCAweGM4MzU2ZWMzLCAweDEwYWFhYjQ1LAorCTB4ZDk4ZWY2YmUsIDB4ZmJiNjE3NzEsIDB4ZDBjNjliNjUsIDB4ZGViZGYxNGUsIDB4ZmM3OWMyZTksIDB4MjQ5MWE2Y2IsCisJMHhlYjhkYmQwNywgMHgzNDU2NGFlNSwgMHg4NDFjZTMxMSwgMHg4N2U0OGMzZSwgMHg0YzYzMWJhMSwgMHhhMDcyMTVmMCwKKwkweDU0ZDdjYTFmLCAweDZmM2NjYjZiLCAweGQzMmRmYTE0LCAweDc4OGZiMTI0LCAweGY0MmRmYTllLCAweDdiN2U5OWZmLAorCTB4MDE2ZmQ3NWYsIDB4MjM5MDZmZDksIDB4NDE5YmMwYmYsIDB4ZDM0NGE1YmYsIDB4NGYyNTczNmYsIDB4ZWU3ZGUyMGEsCisJMHg0ODI5NDFjZSwgMHhhYjZmYjlkNywgMHhkYmY0ZDE0OSwgMHgyZmJlNGFhNiwgMHg0ZGM0NTliYSwgMHg3ZTgwMzQ3NywKKwkweGRmYTBkY2JiLCAweDQ1YmY0MDFhLCAweGEzMTkxZjg5LCAweDczZmE3ZWU5LCAweGJmZDBiN2U4LCAweGExMzZmZTQ2LAorCTB4ZGUzMjhiN2UsIDB4NzRmZTA0MWIsIDB4ZTliYzM2ZmQsIDB4ZTFiN2U5MjAsIDB4M2M1MzE2MGQsIDB4Zjg0ZDQ0ZjAsCisJMHg2ZmQ1N2E5YiwgMHg2OGFkZDI1MiwgMHhiZDUzZWYxZiwgMHg2N2Y4NTFiMSwgMHgzN2M3YjA5MywgMHg2YzQ2Mzg4YiwKKwkweDk1NWNmNTA3LCAweDVjZjRjM2Y2LCAweGI5ZWFmOWRlLCAweDc1OWUxMTdmLCAweDJiNzczNzNkLCAweDllZThiOGEzLAorCTB4ZGNmNWM4N2MsIDB4ZTdhMGVkZGMsIDB4YWU0N2U0MjQsIDB4NjRlZWU2ZTcsIDB4YTExNzJmZGMsIDB4ZDBmNDg2ZGYsCisJMHg5N2NhOGM2ZiwgMHhlNWZiZjk4NSwgMHhkZTRmMTk4ZCwgMHhmMDhkZjUwZCwgMHg5NDFiNWVhOSwgMHhlZmFkZDExZiwKKwkweDVkZjUxOTQ2LCAweGJlOGJkNjk1LCAweGZhN2U3N2RiLCAweDc3ZDBhYjZlLCAweGEyMDZjN2EwLCAweDBmZTQ4ZDdlLAorCTB4ZGUzOTkzNmYsIDB4YzNlOGM3N2MsIDB4Nzk0NjVmMWIsIDB4ZmI0YzlkZjksIDB4Zjg1OWVmOTIsIDB4YTMzYmQxZmUsCisJMHg3ZjIxNjcwZiwgMHhmM2ZhMmE3ZCwgMHhkOWU5YzZhMiwgMHhmYWE0MTk1ZSwgMHhjN2NlYmMyNywgMHhmYjkxYmE1NywKKwkweGI4MWFjYmNiLCAweDJiNTY1ODdkLCAweGU3ZjAzYzg3LCAweDY5ZGYzMWE0LCAweDlkYzJmZmQ4LCAweGY4MDE0YjEyLAorCTB4MTNmNTZiMjYsIDB4OWZlYmI0MGUsIDB4MWY1ODk5NTcsIDB4ZjAzNGM5NGQsIDB4NjI5Y2FjYzMsIDB4ZDk1N2ZiZjIsCisJMHhmY2YwZWI1ZCwgMHhkOTg1MmNkMSwgMHhlYzVmYmZkMCwgMHhlZDE0NzQ5OCwgMHhiZTFjZTJlMCwgMHg5ZTJjNTAxZiwKKwkweGIzYjA3MWViLCAweDQ0NjRmNGJiLCAweDljZTM0ODNjLCAweDllYjNmYjM3LCAweGFkNTMxNjcxLCAweDlmNTNhZTljLAorCTB4YjcxODQyOTUsIDB4MjJlZTMzZGEsIDB4YjhhMTdhNDQsIDB4NWRmY2ZjY2UsIDB4YzkzNzdmMjEsIDB4ZjYyZjg0MmQsCisJMHhlZTM1MWNhZSwgMHg4NWQ3MmY0MywgMHg0ZjAyN2RhNywgMHg5ZTEzMTc4MCwgMHgzYzU0NTI0MiwgMHg2NGE3YTUwMSwKKwkweGE1ZTM3NzI2LCAweDRiMmQ3N2YwLCAweGYwYTA1ZjcwLCAweDkxZjY4OTI5LCAweGUzYWRjNzIzLCAweDNhZmM3MjJkLAorCTB4NzczZjc1MWUsIDB4YmYyZmE4YjEsIDB4NmI5ZDJkNjksIDB4OGU4YmM0OGEsIDB4NzQ3YzQ4ZTcsIDB4MWYwMjNkZTEsCisJMHg3ZTVkNjllZiwgMHhkNzE4OTFlZCwgMHg3YTQzN2MwNCwgMHg4MDlmZjgyNiwgMHgzZmM3NjgxNywgMHhmOWQzMjJlZSwKKwkweDVlMDQ4ZjliLCAweDliOGY1NjQ2LCAweDM3MGZlMTgwLCAweGU0M2ExYzYxLCAweDc5Y2NkNWU3LCAweDYzZTAyZmIzLAorCTB4MTE5ZWM3ZDQsIDB4MzE1ZTlkMzgsIDB4N2RjMDFhYzYsIDB4NGVmNjBkZGEsIDB4MWYzYTgzZDIsIDB4M2U3MmIzMGUsCisJMHhkOTVlODRkNCwgMHgzYzYyYWZkMSwgMHgyNTFiZjNhZCwgMHhlNTIxZGEzNywgMHhiNWUxM2I2MSwgMHgwZWQxZjgxYywKKwkweGY1M2VmNjQ1LCAweDU3ODEyNGNkLCAweDZhYWY5ZDM3LCAweGQwMTNmMzE0LCAweDI2ZWI4MmMxLCAweGYxMGFiZTdkLAorCTB4OWIyMzU4ZjMsIDB4ZWJjYTVkMzgsIDB4NThiMjVkMzgsIDB4OTRjN2VkMjcsIDB4MzBkZTQ4ZDUsIDB4NzFhY2E3OGMsCisJMHhlYmExYzUwZSwgMHgwZTdlMTlmYSwgMHhmMGEyOWQyMywgMHg3ZjhkMTJhZiwgMHhiMzliM2ExOSwgMHg2MmNkZTdiYiwKKwkweGI1YWE2ZTUxLCAweGU3ZGM0M2ZhLCAweGIxZjIwYTk5LCAweGZlMTBkODk2LCAweDNlZmUxNjc3LCAweDI0NTBmYzU3LAorCTB4NzgxMzJlYmQsIDB4NzU3ODg0ZGIsIDB4YjkzYWZlMjAsIDB4OGVmZTE1ZmQsIDB4ZjllOTY5Y2UsIDB4ODRkMDRhZTUsCisJMHg5ZjRmMDlkNywgMHg1M2I3ZmNlNiwgMHhhYzVmYTBmMiwgMHhjZmM4NmYwYiwgMHhjNzRhM2Y5MCwgMHhkMjMzZjIxYiwKKwkweDQ2NTcyOWExLCAweGRkZjAwZjM4LCAweDc4ZTdhMzI3LCAweDI4ZDRiZjcxLCAweDBmM2I4NWY3LCAweDkxOWZmYWYyLAorCTB4YjhjYTJjYmMsIDB4ZmY3ZjMwN2YsIDB4NGRlZWJlNDAsIDB4YzU1OTg3ZGUsIDB4ZjdmMDQxM2EsIDB4ZmRjZWY2M2IsCisJMHg3N2JmOTEyMywgMHhkMTJmZGM0YSwgMHhmN2RhNmYxNCwgMHhkN2NhYzFiYywgMHgyMGVjMWI0ZCwgMHhmNmRmYjgwNywKKwkweGU3NWRlYWI2LCAweGFlMWZhOWU5LCAweGMwMzk3MmIyLCAweGUwYzc4NGY1LCAweDA3MDRiYWY3LCAweDc1YTZmMTgyLAorCTB4YTQxNzhhMzYsIDB4ZjZlNDBjN2UsIDB4NmY1ZjUxYWEsIDB4NWJhNGIzYjIsIDB4N2ZhZjdhYjMsIDB4MzdiZmE4OGEsCisJMHg4Nzg3NDk3YiwgMHg0N2E4N2I2MSwgMHgyMWJkYTExYiwgMHhjZTQ1ZWRkZCwgMHhlMGZmYmExNywgMHg0M2JhZTM1YywKKwkweDNiZGZjZmYwLCAweDFmOWRiZDJlLCAweGNlNTU0ZjFhLCAweDRjNWY2OTlhLCAweGI1NGFhYjhmLCAweGQxNTE1ZTA0LAorCTB4OTkyYzliYmUsIDB4ZTdhMGI3ZTIsIDB4NzBmZmNlODIsIDB4YTM2YWI3ZmQsIDB4YTU5ZmFmN2EsIDB4ZDA4ZWM4ZGEsCisJMHgyZDVlY2JjZiwgMHhmMDEwNTgzYiwgMHgyNTRmYTVmNiwgMHhlMzJiMDE3OSwgMHg3ZjM4YjE4MywgMHgxMDc5ODc4YywKKwkweDhmZjcyZjkyLCAweGNhNmVlOGZhLCAweGVkOWY2OTk3LCAweDI5ZjVkZmM2LCAweDFiYzg3ZGM1LCAweGJiMWQwYzc5LAorCTB4ZmIyMjUzMzEsIDB4NmNhYzNkZTEsIDB4MzZlMWRhMzQsIDB4MjY4YWIzZTYsIDB4NDdlNzNmMjEsIDB4ZDczYzIxZjEsCisJMHgzZDViNTk5MiwgMHgzZDcyMDNjMSwgMHg4NTU0MmVhMiwgMHg2NzQyNzdhOSwgMHhhZjQ4M2JlMiwgMHg3YTQzMzI3MSwKKwkweDRjZmFmYjM1LCAweGJlZjdmOWMwLCAweGRjNGNiMzNmLCAweDgxM2IwNzhhLCAweDhmYjExOWVhLCAweDMxYjk2MTI1LAorCTB4Y2U1YTI0YmUsIDB4ZWFmODZlOGMsIDB4N2ZhMDViZmQsIDB4NWVjYmY3YTMsIDB4NjliYjk0MGYsIDB4NzI4MWMzYWYsCisJMHg4NWI1NjQzNiwgMHgxOTc4MGMwNSwgMHhlODU1NDJjMywgMHhjODdkMWE3NywgMHg4M2VhMGI3NywgMHhmMDdiYjAwMiwKKwkweGQzNDE0OTdjLCAweGMyMTcyYWRhLCAweGJmN2EyNWFiLCAweGU0OTgxODNjLCAweGFhNmRmZTgyLCAweDMyZTkzOTM5LAorCTB4MGU1MDBiZDQsIDB4Y2Q1ZjI5YWIsIDB4NGFkNzk1Y2IsIDB4Y2U3MTBjNWUsIDB4ZjE0MTVhNmIsIDB4MTJiNTc5NDgsCisJMHgxNGRjNjAxZCwgMHhkNzhkOTg5MiwgMHhiZDQxYjIxYiwgMHhmYmMzNTY5YiwgMHhjMTdmMzg1OSwgMHhlZDZmNThmYiwKKwkweDQxNmZmN2M5LCAweGE0ZmQwM2JkLCAweGZkZjIzN2Y3LCAweGNmNzgzY2ZhLCAweDNiNTI3MjgzLCAweDVjMmJlYTg3LAorCTB4MDczYzMxMmQsIDB4Y2Y5MWIwNTMsIDB4NTVmYjA1NGYsIDB4ZWMzN2U2MmYsIDB4ZGRlNjhhN2UsIDB4ZGY1ZWQwMjksCisJMHhjMjhmOWMwYywgMHhkMTNjZTkxMywgMHhlNzRkYzk0OCwgMHg4MGJlMWYzOCwgMHgwZTA3NTZmNCwgMHhhNWYwNWYxOCwKKwkweDQ5MDlmOGYzLCAweGEzZmQ2MmMwLCAweDZkZmQ3ZmRiLCAweDllNTM1Y2ZjLCAweDA3ZDY4MTc3LCAweDI3Mjc3OWVhLAorCTB4ZmM0MmMzMjksIDB4ZTFmNjkyNzQsIDB4MDNiZTAxMGYsIDB4NzkzNzljNTYsIDB4OWNkZWNiM2MsIDB4YzMxNmI0MmYsCisJMHgxYjYzOThmYywgMHg2YWNmZWY0NCwgMHgxZTcxNDcxYywgMHhlMjlmOTliMywgMHhlNjhlYTYzYywgMHg1N2JiZTc3NiwKKwkweGVmZTg0M2RhLCAweDRjZWQ1NzdiLCAweGFmN2JlN2MzLCAweGY2ZjNkMmI0LCAweGI3MGY1YzRkLCAweGJmMjE2ODBmLAorCTB4MmFkNWUxZmIsIDB4NTUyZmYzYzMsIDB4MTNkMjY1YWIsIDB4NzRhYTM3ODcsIDB4ODY3ZTU3NmUsIDB4NmZlNDM3YzcsCisJMHhkZWM4NzZlMiwgMHhjM2RlYmNkNSwgMHg5YjdlZGM3NSwgMHg5MzZkY2NmMCwgMHg1ZmNlMWU3MCwgMHhlYWY5Y2ZjZiwKKwkweDg3NWY1YTdhLCAweDRkMGJiOWU2LCAweDllYTQ1YmYzLCAweGE5NzBmNWQ1LCAweGY1NDE0N2MwLCAweDhmNGZkYTVhLAorCTB4ZmFhNWJiZDQsIDB4NmZhMTE4N2MsIDB4OWQ5ZjcxNGIsIDB4MjRjM2QzZjYsIDB4OTFmNWE1NDcsIDB4NmU4ZTY1ZjEsCisJMHg0M2YyMGRiZiwgMHhlZmUyM2JmOCwgMHhjMzJhZmRiMiwgMHg0NWY0OGQ3NSwgMHg2NzhhMjRkYiwgMHhmMjFlZjljMywKKwkweDNlNDkzNzQ3LCAweGY4Mjg3YjhjLCAweDdiMjIxYWQ4LCAweGUzM2I5NDNjLCAweGY5OWU3MDNmLCAweGM4ZjBjYWM0LAorCTB4MDNkMjJiNDgsIDB4YjU4ZTU0ZjQsIDB4ODRiZjhmZjMsIDB4YjNkZjQ3ZTcsIDB4ZjAxMGU0NjEsIDB4NWZlMTJlNGYsCisJMHg1YWNlMTM4ZiwgMHhiMjdlZTNjZiwgMHg4Yzk5NWJkZSwgMHhjNGQ5OGRlNywgMHhmMjA3YTQzZSwgMHgzMDE2NjQ2YiwKKwkweDkyYTM4ZGU4LCAweGY5M2I5NmVmLCAweGZiNDZlMGZjLCAweDk2NmJhNzQ3LCAweGYzODc5ZDU2LCAweGViOGQ5MTZjLAorCTB4OTU3YWNmNDcsIDB4MGJjNzhiY2UsIDB4M2UwYmQ2MTgsIDB4YjcwYTc3YjQsIDB4MGNkNjQ4YWYsIDB4NzNiODUwZmMsCisJMHgwZWE4MzI0NSwgMHhjYmM0NDRiNiwgMHhlNjczODk1NCwgMHhhNzZmMWE4NSwgMHg1ZWU0OTc3MCwgMHhhZjQ3Njg2YiwKKwkweGRiNTdhZjQ3LCAweGI0MWJkZmNlLCAweGQ1YmRhNzkzLCAweGEzZmQ4ODVmLCAweGExYWQ3ZTcxLCAweGE3YWM4OGRlLAorCTB4ZDRiZGZiNDcsIDB4YTc1ZmYzOTMsIDB4ZmZiOWUyNTcsIDB4MGE2NTc3OWMsIDB4NjJmOWNmNzYsIDB4M2VlMzIwY2EsCisJMHg3ZWVhOWU4ZiwgMHgyZGY3ZWNlNiwgMHg1ZmMwNjdjYywgMHg5ODYzMWZjZSwgMHg4NmVmNDBjZiwgMHg0MGZmMjA1MSwKKwkweGI5MWExYmJmLCAweGVhMzBkNzNkLCAweDQ1OWE1NmEwLCAweGJkZTUxYmIwLCAweGNiYTNmODRjLCAweGJiZmRmMjI2LAorCTB4MTZmN2NjODYsIDB4Yzk0ZmZjYTEsIDB4NTgxZjg4OTIsIDB4NDlmNWEwMzAsIDB4ODNjZGZiMjQsIDB4NTlmOTAwZmIsCisJMHg3ODdjZmRmYywgMHhlMWIyZTUxZiwgMHhhMGE3MmUyOSwgMHg0ZmE4M2MyZiwgMHg5OGFmNTZjYSwgMHgyNTZiZTU0NCwKKwkweGIwZGZkNjBmLCAweDkyZWM5NzM2LCAweDUxOTkxYzgyLCAweGIyNDFlZDdlLCAweDBmMWEwYTkzLCAweDgzM2NhMjI2LAorCTB4N2I0NGFlZmMsIDB4ZDVhYzZjYTAsIDB4OTc1OGVhOGQsIDB4ZGZjZTVkNGIsIDB4OTk2MWU3MTUsIDB4Y2YwYzNkY2QsCisJMHg1ODc2ZTA3NywgMHhmNzk2ZjkzNCwgMHg3MmI3NjEzMywgMHhlMWNmMmNiOSwgMHgyNmVlZmI3MiwgMHgzZTc4NDcxNSwKKwkweGFkNzI0ZTcyLCAweDcyOGNiMWNiLCAweGM3MmRkNTljLCAweGQwNGY1NzdiLCAweDg3MGZhZTUwLCAweDk5YTM4YTI0LAorCTB4ZTUwMDdhODAsIDB4ZTcxZTgzN2MsIDB4ZjNkOGVkYzQsIDB4ZDk3M2YzOTUsIDB4YmYyMGE1OTksIDB4NzJlYTVmMzgsCisJMHhhNDc1Y2JhZSwgMHgyZDJiMzczYywgMHhlZTNmNjJiNywgMHhlMzRlZDJiYiwgMHhmNmQ1NzA5OCwgMHhmYWUzZWYwZiwKKwkweDI3NWZmNjhhLCAweDMyNjBmNTVjLCAweDg1M2NjN2VhLCAweDc4ZTk3OWM3LCAweDVjNzg1NTJkLCAweGFkN2U4ZjYwLAorCTB4M2RmNWEwNWMsIDB4ZjQ0NWZlOWYsIDB4ZDlhYjMzZTMsIDB4OGI2ZjEyNWYsIDB4YjVlZmYxZTcsIDB4YjlmZGYxMmEsCisJMHg5Yzg3YjNlNCwgMHg5ZTdjYTc5ZCwgMHg0YjlkNWNhZiwgMHhlNWY2ZjUzZSwgMHhlMjdhZTY5ZCwgMHhmNTQ3Njk5MSwKKwkweGYwMWRhZmFjLCAweGJlM2MwNjE4LCAweDhhNTlmMWI1LCAweGMyZjEzZTBmLCAweDg3NDhhOWMxLCAweGU3YzAxZGUyLAorCTB4OWQxYjVmYzgsIDB4NGU3YThjMmMsIDB4NTViY2QxMDksIDB4MzlkMzIwZDQsIDB4YjM4NGE2MDMsIDB4ZTUxYTcxNmYsCisJMHgxNTc1Yzc5OCwgMHgzZjEyNzY2ZiwgMHgwZDY0YmQxNSwgMHg4YmY3ODE0ZCwgMHg5YzMxN2RiNiwgMHg3NjE2NmFlMiwKKwkweGYwNWFkYzUyLCAweDA3MmY2MTA1LCAweDFjYTM4NjViLCAweGJlM2MyOTE0LCAweGZjMmY1MjJjLCAweGU3ZWRjNmRhLAorCTB4ZDNiMWVkYjYsIDB4MWQ1MjdjNzAsIDB4YThhMmRmYmYsIDB4NmFkNTc2ZmUsIDB4YzI3OGE3ZDgsIDB4NTBiYjUyYTYsCisJMHg4Mzc5ZjY4ZSwgMHhmZTc4YzdjMCwgMHhiYzY3ZmIxNywgMHgyYjhmNDE1NywgMHhmNWMwZGI2YiwgMHgxYWEzNTE0NCwKKwkweDhhMzI3YmMyLCAweDYzYjRiNmVhLCAweGM3ZDE3MWJjLCAweDk1N2ZmMjU2LCAweGYzYTQ5ZGQ3LCAweDZmMzYxMzE0LAorCTB4Nzk0YWZmMjIsIDB4OGZkYTZjYTMsIDB4NTlkZjExZWIsIDB4MThhZDg3MjcsIDB4NGE1MGQ4OTcsIDB4MWYwMDkwZmIsCisJMHhjNDVlYjgyNCwgMHhmOGMwZmU1MywgMHgzYmNkZTJjMywgMHg4NTAxMDViNywgMHhlZjNmMmZjNSwgMHhhYzcyZmQ0MiwKKwkweGYxMGJiZDc5LCAweDM1OWVmNTBlLCAweDNjNDdiYWRlLCAweDIyMjNmZDY3LCAweGMzODZmMzllLCAweDJmNGI2Zjc0LAorCTB4ZjBjNzljZjEsIDB4Yjc5NDEwMGYsIDB4NGU3OGU2NmQsIDB4ZWM4N2Q3NTYsIDB4YjY2N2U4NGIsIDB4NDdmZWNhM2YsCisJMHhlOWJlN2Q5NywgMHgxZTc4MzVlYiwgMHhlM2E1ZWRhMSwgMHgyNWRmYjA2YiwgMHgwZDcyZmI3ZiwgMHg1ZGIxODljNiwKKwkweGNhZjc5YTc2LCAweGUyODBmODVmLCAweGJlZjdmNWI3LCAweGM4N2YwOWIwLCAweGZlMjllNzg2LCAweGFiMTNmZGJkLAorCTB4ZGY2YjZiMTcsIDB4ZTMxZDM4NzksIDB4N2NiN2RiMDYsIDB4Y2NmZThjOTcsIDB4MjZhZjNiNzksIDB4YWRiY2VmN2YsCisJMHg5NDU4NTIxMywgMHg5MTRmNDM3OSwgMHgxMWU3NDM3ZiwgMHhiNzQ5MWY3ZiwgMHgyOTdiMGRiZCwgMHhkMDA0ZWQ5ZSwKKwkweDU3NjBmNTFkLCAweDI5N2Q2ZTljLCAweDg4ZjY3ZjhmLCAweGQxOGRkY2Y4LCAweDg4ZjQzYmNmLCAweGU1Yjg2ZGM3LAorCTB4ZmY1MTJiYzYsIDB4ZjI3YjcwMzcsIDB4ZWZiOTcxOWMsIDB4M2YyZjNkMDMsIDB4MTQ2ZTNhMGYsIDB4MzdmNWQ3ZjEsCisJMHhmNzJlMzU5YywgMHhmNDAxZmUwNCwgMHg3NGNkZDhiMiwgMHhmNjYxYmFmYywgMHhiY2M2OWZhZiwgMHhjNmJkM2U4NiwKKwkweDAzY2Y4NmU1LCAweDhhNzlmYTdmLCAweGE3M2U2Yzc3LCAweGE1ZThlNTFkLCAweDM0M2M1MGRmLCAweDA3OGE2ZmQyLAorCTB4ZDNhZmEzZTcsIDB4MTFjYTNjZjEsIDB4Y2UzYTczYjUsIDB4YWQzYjlkM2YsIDB4ZDE0ZmRmNzQsIDB4OWU0ODhmY2UsCisJMHg0N2JlYjdkYSwgMHhjZTI2NmE3ZSwgMHhhZWIzYjQzNSwgMHg5NzNmOGYxZiwgMHg5ZDZiNzhjNCwgMHhkMDU3OWUzYywKKwkweDNkN2RlMzAxLCAweGUyMmU3YTJlLCAweGViNWYzOTdhLCAweGM1YmRiZWYxLCAweDFmNmQ1ZWY5LCAweGUwMGZlZTI4LAorCTB4YjVhNWM4ZjEsIDB4YjNmMTEwN2YsIDB4NzI5Mzc0ZGQsIDB4Y2YwNzVlOTAsIDB4ZTNhZDQ3MWEsIDB4NzJmNDJkYzEsCisJMHhmNDdiMWM3NywgMHgzOGFlZWFiOCwgMHgyMWJhMDhmNiwgMHhlYTllNzEzZCwgMHgzODA3NTM4YSwgMHg0OWY5MDQ2ZCwKKwkweDJlNzY4YTNlLCAweDhmMmQ3ZGEyLCAweGEzNTc2ZjdmLCAweGUzZDYzNzlmLCAweGY0MTE3ZGRhLCAweDliZGJjN2Q2LAorCTB4N2I3MmU4YmMsIDB4NTBmYzcxYWUsIDB4NDI2NmQxM2MsIDB4YjU3YzRmNTIsIDB4YmY1ZDFmN2QsIDB4N2Y0YmI0Y2YsCisJMHhlYmJlZmFkNywgMHgxNDg5NTRiYywgMHg1ZWViMWU3OSwgMHg4NmQyY2JlNCwgMHhlY2NmZTQ4MywgMHhmMThiN2Y1YSwKKwkweDdiZmYwOWI2LCAweGM1MzIwYmRiLCAweGRmYTkyZjM5LCAweDUyM2RmYTRiLCAweGJkZTE5NDdmLCAweDdiZmE1MTJkLAorCTB4ZTdkODVkYmYsIDB4NjhmZTdjOGQsIDB4NzIxOWM5N2IsIDB4N2I2ZDNkNDAsIDB4OTc1ZjEzYjYsIDB4NzE0ODNjNmQsCisJMHhiZGQ2NmZkNiwgMHhlMjE4YjVhYywgMHgwOGZlNzAyNywgMHhmNmQzYzYxOSwgMHhhNGUxZWVlMiwgMHgzMGZkYzVjZiwKKwkweDg5NTRlZDkxLCAweGEyOWJjYTc2LCAweGYxYmU1M2I3LCAweGUyOWRhOWE0LCAweDc2ZTZiZDYwLCAweDYzYmRiYjljLAorCTB4YWM3NmVmOGEsIDB4YjczMzU4ZWYsIDB4Y2JkNThmMTMsIDB4ZjZkMTQzOTMsIDB4ZDhhYWVjNjksIDB4MjllNmFmZWYsCisJMHgwZjc0YTNjYywgMHg3YmRmOTM4ZSwgMHhjODYyYmIyMywgMHhjY2U3OWNlZSwgMHgxMTJlMzhmOSwgMHhiYWUyOGQ1MywKKwkweDM4ODgxNmFhLCAweDUzN2E5ZmIwLCAweGNlNTVkZTkxLCAweDc3ZjYxOGViLCAweGUwZDdlMjMxLCAweDAxZGQ1MWZmLAorCTB4OWFhYWY2ODYsIDB4YmY0MmNmZWEsIDB4ZDFkZWE0NDMsIDB4NjQyYzJkMTIsIDB4ZTczY2Y3YTAsIDB4ZWQwZjE0ZTQsCisJMHg5MGQzODQ4YiwgMHgwZjMyMDc5ZSwgMHg2N2VmNThhYiwgMHhjZmFiZmUxMSwgMHgwNTI0YjYxNCwgMHg1MDU5ZjdmYSwKKwkweDdhODAyZWYyLCAweDBjNWZmN2Q5LCAweGQ2N2IzYmYwLCAweDg3ODFjM2FmLCAweGE5YmY5MzY1LCAweDAwNzlkYWNjLAorCTB4MzVlYzJiZDcsIDB4Yzg0N2VkM2IsIDB4N2Y3NGVjYmIsIDB4M2IxYWY5NDgsIDB4ZDZlZjc3OGQsIDB4YmIyMzlmNmYsCisJMHhjNjU2ZDdmYiwgMHg1NTYwODdmNywgMHhiOTk2Zjc4MywgMHhiNzg3MWQ3OSwgMHgyZmU2YmI3ZSwgMHhjYmUzNTc2OCwKKwkweDFhZmU3ZWQwLCAweDg5ZWI4ZjI4LCAweGZlYjRiMThkLCAweDhlMjk3OGU5LCAweDdmY2I1MWVlLCAweGE4YTlhMWVkLAorCTB4Mzk2M2YyZDcsIDB4NGU2ZmU2M2YsIDB4N2Q0MTU1MDksIDB4NmUxYzQ5YWQsIDB4ZWU4MDM0ZGQsIDB4Yzk3ZTI4YWIsCisJMHg3YmE1ZjE0OSwgMHg4NjUyYmViNywgMHhlNmZiNTRmMywgMHg2MDMzMGM1OCwgMHhmYjA5YWZlZCwgMHg3ZWUyMzdmZiwKKwkweDYzZDUxYWFkLCAweDY0MmYzMzhjLCAweDJlNzhjNzhhLCAweDUzNjExOGE4LCAweDNmMjMxMzVjLCAweGZhMTFjOTA2LAorCTB4ZThlMzFhYjEsIDB4YzVkODExM2MsIDB4YTg0ZTdhYTYsIDB4ODk3ODBmOWQsIDB4ZjhmZDgzOGYsIDB4M2Y3MGFhMzksCisJMHhlNTkxMDdkNCwgMHg3NmZkZmNmNCwgMHhkY2JkOGU3ZSwgMHhiYTM5ZWYwYSwgMHg5ZDZiOTdjYiwgMHhlZWFlMWM3OSwKKwkweDMzNDlmNWM3LCAweGU3NDRmZjk1LCAweGIzZGY5MTczLCAweDIzZmU1ZTVlLCAweDdhYWVkZWJkLCAweGUyNjVmYmY4LAorCTB4ZmU0ODliN2UsIDB4NTdhNWQ0M2QsIDB4YjQ3MTdhZmUsIDB4ZjRhMjViZmIsIDB4MmZkZjllOWYsIDB4ZWQwNWEwYjEsCisJMHhiYTc2MmQ5NiwgMHg2N2VmMGJiNywgMHhkYjBlNzNjMCwgMHg1NWZmYmUzNCwgMHhmZGQzMGFlMiwgMHgzZTg0M2IzOSwKKwkweGQzMDk4OTJlLCAweDQ0ZmQzZTdkLCAweGMyM2NiMDNmLCAweDIyZjJkNmNjLCAweDE1ZjRiZGQyLCAweGIzZjhjMzNiLAorCTB4M2U5Y2Q3ZDIsIDB4YjZlOTc3YTQsIDB4OTU3ZjViNmYsIDB4YjE4YmYxODUsIDB4N2QyYmQ3ZTQsIDB4MWYxMTdmZWQsCisJMHhkM2MzNWE5NCwgMHgyZGJjZmVlOSwgMHhlN2Y3ODY1NiwgMHgzYjc5NmRiNSwgMHg0ZGI1ZTUxZCwgMHg5YzI3YTcwZCwKKwkweGI0YWY1ZjY1LCAweDU3YmU2YWRlLCAweDU4ZTM4YzQwLCAweGJjNDJlODY1LCAweGFmM2Y0MTc3LCAweDllOGJkNDViLAorCTB4ZGI4NjMyYjksIDB4OWYxOGY2ZDcsIDB4ZGRlNDg2MzUsIDB4YjFkNDRmN2MsIDB4YzY0MWM2Y2EsIDB4OWU0NWZiZjMsCisJMHg3ZmIxN2FlOCwgMHg5ZDhmZmE4YywgMHgzOGY0Nzc0MywgMHgyNjNmZGFmNywgMHhlNjk5ZWQwOSwgMHg5NjQwNzQ2NCwKKwkweGZhOGUzZDgxLCAweGU0ZWVhOGJjLCAweDdjMWZmNDMwLCAweDZmZGZhMzE2LCAweGY5YzM4OWUwLCAweDczYWQzM2U4LAorCTB4Y2ZiZmVhMTgsIDB4MTk4NzNiZDIsIDB4OTUyMzk5ZTcsIDB4OTJhMjhmMzYsIDB4OGVkMjg3NWYsIDB4ZmFmMzI3YjUsCisJMHhiNTM3OGMzMSwgMHhmN2E2OGI0ZiwgMHgxMmM0YzU4NiwgMHg4ZTFlOGFmZSwgMHg3YThlN2E4ZCwgMHhhYmU3MGM0YywKKwkweDUzMWY2ODM0LCAweDQzZTUxNzZjLCAweDJkMzNmNzZmLCAweDMxYjg3YTQ0LCAweDQ5ZWJjM2M2LCAweGJjZjg2OTBiLAorCTB4MjBmYjZlYjgsIDB4OTUwYTFlMjMsIDB4NzIwNzJhNmEsIDB4NjQyY2Y4NGEsIDB4ODMyY2I1MmIsIDB4MmJkYmQ2ZmUsCisJMHgyOGYwZWY5YywgMHhmMjgxM2Y3NCwgMHg1NWY4YmE3ZiwgMHgzOTMzYTZlZSwgMHg1MThlMzE5MSwgMHg1YzY2MTRlMCwKKwkweGU3ZWIzM2YyLCAweDZmZDUxNDQ4LCAweGNjNjlmYzQzLCAweDY0NjQ1NmVmLCAweGY3OTI2YTk1LCAweGE5NGY1NjE4LAorCTB4N2UyZWNjMDMsIDB4NDMwNTVhNWYsIDB4ZWM0NDc5M2QsIDB4MGMxZmEzZWYsIDB4M2Q3YzZlZDMsIDB4MzgzZjdhNDgsCisJMHgzMjhiYjE4MCwgMHg0ZjA5YmVmMCwgMHhiZjgwZGI5YywgMHgzZWIzNzA2YiwgMHgyYjY5ZTMwOSwgMHg1MzE3ZDcxOCwKKwkweDQ4OGY2OGRjLCAweDAzM2IwMGMxLCAweDU5NTU1NGZjLCAweDAzZGY4ODM3LCAweDJmMTg3Y2MyLCAweGY0MmMyNjQ5LAorCTB4ZjM3ZWU1Y2YsIDB4ODA4M2I0M2IsIDB4ODQzZGY5NGYsIDB4MTU1MGIxNTcsIDB4ODZjMzE4YTAsIDB4OWUzYWVmYzksCisJMHg5NmYzZmJmMSwgMHhlYjhjY2M3ZCwgMHgwNzQxMTI4ZiwgMHg3YTRkZGMxNiwgMHg3ZmJhYzFjYywgMHg1YWEzMDA5ZCwKKwkweDE1NWI3ZDQ1LCAweGRjMWNiN2Y3LCAweDU5Yjg3MzlmLCAweDU4YzNlZDE4LCAweDQyYzcwYjA3LCAweDFjYWExOGVhLAorCTB4MmJiZmNhMzMsIDB4NWYwMzYwMGIsIDB4ZjM5YWM3YmEsIDB4ZjQwMmU1MjMsIDB4ZjViYjQ0NWEsIDB4ZjdhODNmODQsCisJMHhiZjdhODhhYiwgMHhhYmY3YTg4YSwgMHhlM2FiZDViMywgMHgyODM2ZGNhOSwgMHg1OGE1ZWYwMywgMHhmMDJmNTk1YywKKwkweDA5YjNkYmM2LCAweDg2N2UwMWJjLCAweGNjN2YzZGUwLCAweGZiMTVlMzEyLCAweDE4ZDc4NGU2LCAweDk2MmIxYmQxLAorCTB4OGU2ZWJhMDcsIDB4ZmE3ZTIwYzksIDB4NGVhZWRjNTksIDB4ODk2Njk3OGMsIDB4YzNkNzBjMzUsIDB4YmVmZDI0OGIsCisJMHgxODc3ZTY0ZiwgMHgxYjZlNjNkZSwgMHhhMjIzZTFjOSwgMHhjZjAyY2Q5ZCwgMHg1NWJmNzQ4YiwgMHhiMjc2ZjI4ZiwKKwkweGI3OTQ3YWJmLCAweDI2M2U1NmY3LCAweDZmNjc3OTdhLCAweGRlOGQ4OWZkLCAweGVhNWVmODlmLCAweDVhOGQ4ZWFmLAorCTB4NGJkNTBmZmYsIDB4ZjQ3ZGFmNjUsIDB4NzZlZmVlMGUsIDB4YTAzNzI3ZTksIDB4NmU2NzZjZGUsIDB4MWE1NGZkNDYsCisJMHgxNmI3ZmFkZiwgMHg0Y2VkYzI3YSwgMHhkZTk5OWE1YiwgMHhjMGRmYzgzMSwgMHg5YTE3MzE2ZiwgMHg0OWYyNDc5ZiwKKwkweGY0NzJmZTE0LCAweDI5ZGY3MTg1LCAweDYxZjNiYmRhLCAweGU3NGQ1ZTdlLCAweGJlMzE1YzgzLCAweDlmN2NiNTg5LAorCTB4ZGM3OWVlZmMsIDB4NDZjYjA3OGYsIDB4MjVkZmU2MWYsIDB4ZTFhZWVmZjIsIDB4MGZkZGUzZjYsIDB4MWIwZmI0Y2IsCisJMHhjMWQ1YmY3OSwgMHhlMWVmY2RmZiwgMHg4MDFmMDdiOCwgMHg1ZjMzZGRiYywgMHhhMjMzODUwYSwgMHhkZWM1ZGJkZCwKKwkweDY3N2E4NzhmLCAweGRlNDRmZTg4LCAweDllNjAxNTgzLCAweDY4ZTRjYjQ5LCAweGJlNzE2MGY3LCAweDQ1ZTFjZmQ0LAorCTB4OGIzMTdmZGUsIDB4NjZmZGM1ZjksIDB4MzE1OWU3ZTYsIDB4MjJkYmUyNmUsIDB4MGY1NWE0MjUsIDB4ODJjNzllZWQsCisJMHhkMWVmODAyYiwgMHhjN2JlMDRmZSwgMHg5YzU5MmZmZCwgMHg4ZDJlNjZjNywgMHg5YWRmZDdjNywgMHhhNzdmZDI2MCwKKwkweDcwZTI3ODg2LCAweDhiYWY2NmJlLCAweDdjZmU2ZWU3LCAweDE0OWViNWVlLCAweGU1NDU3OWUzLCAweDFlZTlhYzc0LAorCTB4OWJkNTJhYTAsIDB4M2Q0ZGZhOGEsIDB4ODBmMzNkN2QsIDB4MDdhNzZhMWMsIDB4MWYyMThmMzEsIDB4N2UxMjU2ZWMsCisJMHgzZDI0ZjMwYywgMHg1MDg0YWE5NSwgMHgzZjZlMmEyZiwgMHgzN2JiNDdjYiwgMHg1ZWIzZjM5ZSwgMHhhZWJjNGI1ZSwKKwkweDE3N2NjZWNiLCAweGU2NDYxZGZlLCAweDVkY2ZmZjgxLCAweGRmZjNhMWUxLCAweGE3ZmMzOTU3LCAweDVkOTVmZTcxLAorCTB4YTM4MGRlMzksIDB4YjcwNDNmMjcsIDB4ZTE1NzcxZjIsIDB4OGU3YTMzYjgsIDB4N2FmMzRhYTcsIDB4MGViZWRlYzksCisJMHhjYmYyNDVlNiwgMHgzZmQ4NmQ3OSwgMHhjOGY5ZWFkOSwgMHhhZGZiZmQ4MywgMHhkMzBmZDBjYSwgMHgyM2RlM2YxMywKKwkweDE1M2ZjODIxLCAweDI0NzE0ZmVhLCAweGMxOTRkYzcyLCAweGJjNzJmZWQ4LCAweGZmZjQxNDZmLCAweGU4YmY3MTMyLAorCTB4NTIyNjRhYTIsIDB4MDhiNzU3MWUsIDB4MzRhNTFmZWYsIDB4OTEzZWE0NDcsIDB4OGY3MmE2NGUsIDB4OTc0YTdiOGEsCisJMHhkNTI5N2E1NCwgMHg1NmYzNmJmMSwgMHhiNjk4M2RkMywgMHgzNmZiNzkwYiwgMHhhMjVmYTBiNywgMHg0MDJmZTA0NSwKKwkweGI1MmQ5N2Y2LCAweGVkMWRmNjgyLCAweGRlMzA4YWVlLCAweDYwZDJjNzI3LCAweGI5NjFjMWRlLCAweDlhYmYwOWFiLAorCTB4MTNiZjkxOWIsIDB4NDU2YzEzY2EsIDB4NjZiNTUyMTgsIDB4NzE0OWQxMGEsIDB4Yzg3Y2IwNTcsIDB4MDYwNDc1NGYsCisJMHhlMzdkYTJjNywgMHg2OTg3ZGYzMSwgMHhkNjcxMWQ0ZCwgMHhmOGJiMzFmYiwgMHhmYmM3MTM2ZCwgMHhiN2U3MTI2MywKKwkweGE2M2ZiYzQ4LCAweDZlMzA3YjM2LCAweGJiNmJiMWUyLCAweGJjMjJhYmVlLCAweGUzODg3MmMzLCAweDdlZjkzZmZkLAorCTB4MzdiYzRmNmUsIDB4YzA2OTliNGYsIDB4MzI3YjMzYmIsIDB4MDI2N2ZkZTEsIDB4NWUwNTRiY2YsIDB4YWExZDA0YWIsCisJMHhjNGFiM2UwNCwgMHhlMjU1YWZiZCwgMHg4MTJhZGNkZSwgMHgzYmM0MmFkZiwgMHg3Yjg4OGZhNCwgMHgzZDIzMTc3YiwKKwkweGVmMTE5NTIwLCAweGExZDZiZmMwLCAweDdiNDMyNjQxLCAweDUyMGYwZjdjLCAweGI3NWJlMDg3LCAweGIyYTRmYzg1LAorCTB4YmM0M2VmYzMsIDB4ZGUzOTEzNWIsIDB4MDNhMDBlNmQsIDB4ZGRlMDM1ZjEsIDB4YzI0MWY5ODMsIDB4NzhlMGVhYTcsCisJMHgwZTljZjI4NiwgMHhlZjEwNTYwMiwgMHhhNzM5ZjEyMywgMHhiNmZkZTAwNywgMHg4N2Q0MjRkOCwgMHhkNjc4NGM2MywKKwkweDFmOWZjNzEyLCAweGYzZTI5ZmRlLCAweGYzOTBhMjViLCAweDZhMjVmYzQ4LCAweDVkNjA1ZWZjLCAweDhmYjM3YmJlLAorCTB4NzY1YzQ0YWIsIDB4MTE5N2I4OTUsIDB4Y2Q3Njg4ZjEsIDB4YmIwZmMwMmEsIDB4M2Y5M2UzOTgsIDB4MmY2MDIyMWYsCisJMHhmZDYyNDlhNSwgMHhjMDc0MDU1ZiwgMHgzZDg1MjdmYywgMHg3NGM2Nzg4NCwgMHhiNzVmMmM2NywgMHg3NjJhNWEyNCwKKwkweDA0YTc4OGFiLCAweDRiMGZkZjdlLCAweDZjYjRiMjBjLCAweGYxODA0M2M2LCAweDFlNjQxYTk3LCAweGUxZmRmNTg0LAorCTB4YzhmZjMzNWEsIDB4N2VlMjI1NmUsIDB4Yzg5M2NmNDksIDB4NTZkZjJiNmYsIDB4MmY3ZmI4MmQsIDB4NzRkZWJmY2YsCisJMHhlNjllNWJhZSwgMHhmZTEwZjc4YiwgMHgzNWRhMTIwMywgMHhiODcyMTMzZiwgMHhmYTg1ZjkwMiwgMHg4YmMzZDdjNywKKwkweDE1MmMxZjA1LCAweDIyM2YwNmY3LCAweDIxMzFlN2Y4LCAweDdjZWI4ZmNmLCAweDQ4ZTdlNWUzLCAweGYxZTY0Zjk2LAorCTB4MTY5OTg5OGUsIDB4OTg2MmJmNzEsIDB4ZTMwOWUzMTksIDB4ODM0Y2Y1YmQsIDB4YzZkYWQxN2UsIDB4OWZkZDI5NDMsCisJMHg5MmI2M2VjOSwgMHg2NTBlYzZkYywgMHhmOGFmZTQzZSwgMHhmMTBjMWY4ZiwgMHg3ZGZkNzBmYiwgMHhkNzhhMWVkMSwKKwkweGViMWRiZmVmLCAweDBlODNiZjg5LCAweDcxMTU4N2I0LCAweGQ3Y2NhNGNmLCAweGVmNTFjZDkzLCAweGVlZjJhZDhkLAorCTB4YTY1ZmExYjEsIDB4YmVlY2ZlYjcsIDB4NzNmMTFiNjksIDB4MWU0NGU1ZGUsIDB4YmZlMDI3ZDYsIDB4OGVjMDM2NjMsCisJMHhjMTU3NTgxYSwgMHhjODFiZDYyZiwgMHhhNTdhOGM1ZSwgMHhlYmZjNDljNiwgMHgxYmU3ZmU4MCwgMHgxN2I2MjRmOCwKKwkweGM3NTRjZWZmLCAweDVmNTAxYmI1LCAweDI0MDY4MGJjLCAweDZhMmZjMTMwLCAweGNmMTFkOTA2LCAweGZhMGY3MzgwLAorCTB4ZmVhOTU2YjEsIDB4YWMyZjM4YmUsIDB4OGZlZThmOGEsIDB4ZGYyYzY1ZmIsIDB4NWQ2NTcwODcsIDB4YWMyYmYyNmEsCisJMHg5ZWY0N2Q1NCwgMHhlZjU5YWM3YiwgMHg0NGYzMTRhYywgMHg5Y2IzNDRjMiwgMHg0ZmMyZjNlOCwgMHgzOTU3N2Q0NSwKKwkweDVmYjEzYjAyLCAweDkyMjdhN2M5LCAweDFjZGUyNzNjLCAweDUyYTg5ZTdkLCAweGY3ZGUyMGI1LCAweGNiOGMzNTUxLAorCTB4ZTM1NzMwNzcsIDB4ZmQwZjczZjYsIDB4ZTQ5ZjY4YzMsIDB4M2FmMDYwNTQsIDB4N2NlOTgzZjQsIDB4N2Q3MTkwYjYsCisJMHhhZWRjNjQxNywgMHgwNGY1YzdkNCwgMHhlNzE1YmRmMiwgMHgzZmYxMzcwMywgMHhjYjA4MDdjZSwgMHhkZWZjNmExNywKKwkweGU0MmRiYmUzLCAweGU0MjI1ODg3LCAweDY3MjE1MWVkLCAweGZkN2M4NWNiLCAweDhhY2JlNTFjLCAweDI5N2I1OGY3LAorCTB4YWI5MDg1ZmQsIDB4OTA4NzI4OTUsIDB4ZTBjZDhmMWUsIDB4M2ZiOGJjZjYsIDB4MmNjZjVmNGMsIDB4ZmJhMDhkYjQsCisJMHgxNjFjYWIyMiwgMHg0Zjk0MTc5YSwgMHhhZTA3MjFhYywgMHg3NjhmNzYwZiwgMHg3NjQ3ZmZhMywgMHg0ZTAzYjk2NiwKKwkweGZiYTJjZmNjLCAweDJjZjhhNWRjLCAweDM3Y2RmMjM3LCAweDljMTc1OWNlLCAweGM4MTYxZTJkLCAweDJiMTZmNzRmLAorCTB4ZWE0YmY3MmEsIDB4ODk1N2M4ZjcsIDB4Zjc1NDA4ZmIsIDB4ZDVmZDBjY2QsIDB4ZDg1NjI2NGYsIDB4OTYzNWRlMjksCisJMHhlNGQ3ODdjNywgMHg4MWRlMTM2NiwgMHg4NmIxOWQxZSwgMHhiNGNhNWE3NSwgMHhmYmVlYmFlYiwgMHhlYzlmZWFjMywKKwkweGVmODM1ZWU1LCAweDY5NjBkZTg1LCAweDQxYTE3NjQxLCAweGZiODhkNDRmLCAweGM4Mjc5OTI0LCAweGM1ZjQxODg2LAorCTB4MzEyNjhiYzIsIDB4ZDRmNWVmZjQsIDB4Y2RlOGJkMTMsIDB4MmU2ZjVjZjUsIDB4NGRlYmEyOTIsIDB4ZjVkNzhlZGQsCisJMHhkMTdlYTQ2NiwgMHg0YzE3YzVkMywgMHg1NGJmOWQzNiwgMHg3YTQ2NWUxZCwgMHgzZjc0NDg2NywgMHhjYWMzYjI0MiwKKwkweGQ3OTkyZmY3LCAweDMzZDE5YjliLCAweGVjOTVmMDFmLCAweGVkMGJlMDMwLCAweGYxNmZkZDIxLCAweDg5ZTMyOGUzLAorCTB4YWU0NzkzZDQsIDB4MDBkN2U3ZDMsIDB4NGIzNDNiZGQsIDB4ZmEzOTNjZjMsIDB4NzlhYmYzYWMsIDB4ZmQzZmM4NWUsCisJMHg3OTRmY2QwOCwgMHg1YTUzNDdhNywgMHhkOTJkNzM1MCwgMHg2OTc3MGMyMywgMHgxYzJlZjcwYywgMHgwYmJmN2Q1ZSwKKwkweDQ2Yjg3YmU5LCAweDU2YWY5ZmVjLCAweDc0YmYxODQzLCAweDE5NzE2NmI4LCAweDBmNzZkNWMxLCAweDJmZGM2NmQyLAorCTB4M2RlMTc0MWUsIDB4YzhkNmIzNGQsIDB4MjQ3ZTlmYjQsIDB4ZjE0ZTk4MjYsIDB4Mzk5ZmRmOWYsIDB4NjNlMjFiMjMsCisJMHg5YTVkYWMxNiwgMHg2YjM4ZmM4ZSwgMHgzNzNhNTJkZCwgMHgzN2MxMjQ3YiwgMHg1OTgwNmZkOCwgMHg3OWVjODc5NiwKKwkweGJjYzZmZWZkLCAweGI0M2VhZDY3LCAweGRiZTM3YmM3LCAweGZkZDFkNWJjLCAweDI3Zjg1NTNkLCAweDc3OTg1M2FlLAorCTB4NzY0M2FlMDgsIDB4ODY3NGM2YmIsIDB4ZmM4ZTBmODEsIDB4ODJlYjRlYzIsIDB4OGVkODJkMmEsIDB4NThiYWQ1NzAsCisJMHgyNTU1ODM3YywgMHgyODBmYmY0NCwgMHgwZmI1NzFkNSwgMHhmMGVhOTRlOSwgMHg3MzI5OGI1ZCwgMHg0ZjdlZDAyNCwKKwkweGRiYzQ3MmVmLCAweDNiNWY0NTZmLCAweDJkM2ViYmVlLCAweDNhMDI0NWVlLCAweGJiZjI2NGRkLCAweDU2ZDc3ZGYyLAorCTB4YjY2MzQ3ZTEsIDB4NDQ2M2YyNWUsIDB4N2M5N2E3YmUsIDB4NjI5MzhmMTcsIDB4N2ZmOWU4ZWUsIDB4Njg2OWZmYjcsCisJMHgzMTVkZjU4ZiwgMHhlNmI0YmY4ZSwgMHhlODRmOTJmOCwgMHhhMTFmNzk4OSwgMHhjZjhiYzQ1MCwgMHg1YTFiMTc1YSwKKwkweDY2Y2U0NTE4LCAweGIzYzdmMzg5LCAweGNlOTk3ZWM0LCAweGViZDc4NThmLCAweGUzZTczOWY2LCAweDVlOTczZTQ4LAorCTB4ZmFmODg0YjgsIDB4Y2QyYTdkY2IsIDB4YWZjMDY1NmIsIDB4MTdhNWVmYTgsIDB4NTA3ZGQzNDYsIDB4ZTJiYjllMGIsCisJMHhmYzBiOGM3MSwgMHhmOTRjYmY2YSwgMHhjNGVkYTcyNSwgMHhmNTNmZWRjNywgMHhjZTgyMzlkMiwgMHg5ZGY0YTlkZiwKKwkweDVkZjZhZjg4LCAweGRhMDFlNzRkLCAweDNhZDNmZGM1LCAweDdjOWNkMjllLCAweGMxYzZiYzNkLCAweGU5ZGU1MGY1LAorCTB4NzQzYzkxOWYsIDB4YTY2ODU3ZjEsIDB4Nzc5ZTcyODYsIDB4NWU1Y2U3ZmEsIDB4MzFkOWZlZjAsIDB4ZGVlYmVjMzgsCisJMHhlMGExNzcxYywgMHgyY2Q3ODA2YiwgMHgyMTY5MzQ5ZiwgMHhjMmRmOWJkNCwgMHgwZDhkOGFlNSwgMHg3YjFmOTE5NiwKKwkweGQxZjdhYzZkLCAweGM2YmZmMjI4LCAweGI1ZjkzMWUxLCAweGYzOTY1YmYyLCAweDRjYWVjMGY3LCAweGNjOTljNDM0LAorCTB4Yzg3YmRmMTIsIDB4NjVlZmNkM2YsIDB4NGIyMGVlNjUsIDB4ZmExMjc5NDUsIDB4Y2MwZTViYjAsIDB4ZGJiNzcyZjcsCisJMHhkM2Q0ZTNjZCwgMHg3OWM2YmIxNywgMHhkNmZkNjk4NSwgMHhlOGFiY2UzZCwgMHg1M2IwOWU3OSwgMHgxMzQ2NWJmMiwKKwkweDVmOWUzZGRjLCAweDllMzY4ZThkLCAweGE1OGM3MWVlLCAweGQxZjFlZGYyLCAweGI0NTBmZmRiLCAweGMwNTk1YWRmLAorCTB4OGI0ZmEwN2MsIDB4NzliZmZkYzQsIDB4ZDQzNGZiYTEsIDB4ZTNhYjc5MWYsIDB4YjhjMzI0MTMsIDB4NGQ4YTZiZjIsCisJMHgzNTc5NGZmMSwgMHg1ZmRmNzRiOSwgMHhlZDVjZWFmZSwgMHg3NmJjODM1ZSwgMHgzNmNkODVkMSwgMHg0NzQzZTVkMSwKKwkweGQ1MzJlODgwLCAweDQwZTNkZmUxLCAweGYwYTE3Y2I5LCAweDU4M2Q0ZjgxLCAweDExZDNhNzJmLCAweDgyYmMzODJkLAorCTB4YWU3ZGRiZjQsIDB4M2VhN2U3NjgsIDB4OGQ1M2E0OGMsIDB4MWZhYzEzYTAsIDB4ZDI3NDBjYjIsIDB4N2VmOTEzZTksCisJMHgwN2QyZmFlYiwgMHg4YmZkYzUzZSwgMHg0NWVkZjhhNywgMHgwOGIxZWJiZCwgMHhjNzQ0NjVmYSwgMHhmMzgzYTc1ZiwKKwkweDBmZDgyYjZiLCAweGRmYzJmMzgxLCAweGJiZjhhNjY1LCAweGU4MjdmMTVlLCAweDdmNDdlM2FkLCAweDUxZGZmNjBlLAorCTB4OTQ0ZWZiOTQsIDB4MWY1ODUxY2QsIDB4ZTE3Mzg3ZTcsIDB4YzE3ZGJiYWQsIDB4OGZhMmUzMGYsIDB4ZjNhOWM1MjcsCisJMHgwNDE2N2NjMywgMHg3MWFhM2UwMSwgMHhmMWY3YTNmYiwgMHhiNjgyYzQzYywgMHg5NzRmMThmMywgMHhmMTM2MmU5YywKKwkweDAxNzM4YTQzLCAweGZmNDE1Mzk3LCAweDIxMWU3YmEzLCAweGM1MGQ2ZWJlLCAweGJkMTllZDdhLCAweGQ5YzUyNzhmLAorCTB4MTg1YzFmMGIsIDB4ZmZiMzQzNjQsIDB4MTFjMWYxZWYsIDB4MjlmODM3Y2QsIDB4ZGU2MDQ3OWMsIDB4ZjBiZDc5YzIsCisJMHgxYjg2YzdmOSwgMHgxOGVhOTdmYiwgMHg3OWM0ZTY5NywgMHhmNmZjZmFhOSwgMHhiZGUzODNiNywgMHgxZTFkNzBmYiwKKwkweGFiN2IyNzVjLCAweDhlMjU0ODYwLCAweGJmN2M2MGMwLCAweDM3ZjRmNWM4LCAweDE0NWJkZmU4LCAweDY4ZjBjNGZmLAorCTB4Y2FlMmY0NzYsIDB4ZGZhMDk3N2QsIDB4OTliMmFhYjUsIDB4YzVkODU1NTIsIDB4MGNlMmVkMGMsIDB4Njg4ZjVkZmUsCisJMHgyYjVlMDVmNywgMHhjYWUyZWJmNCwgMHhiNWI3ZWU2NiwgMHg3MGRiOTkwNSwgMHgzMjNiMDBjZiwgMHg4YWQ4ZmM5MiwKKwkweDY5Y2Y2Y2MzLCAweDdlOGRjMDZhLCAweDgzZGM0ZDczLCAweDY1ODEyYWEwLCAweDY3ZTg1OTE5LCAweDFhMGNjYzRhLAorCTB4OTM4ZDc3ZjAsIDB4NGYyY2Q3ZWYsIDB4ZmRjNmUzZGQsIDB4OGZkNDJiMTAsIDB4OWE1YjMzZmUsIDB4NzdlNGNhNzIsCisJMHhlNTk5NWQ3YiwgMHhkN2U5M2EwNCwgMHg3YWIwYzc0NCwgMHgxZjkxMjQ5ZiwgMHgxZjg0NTRmMiwgMHgxZmE5OTRmMiwKKwkweDdkYTZjZDg5LCAweDI4YmM0ODhhLCAweDI4MWRmZTM2LCAweGIzZmYwOTg1LCAweDlkZmU4N2MwLCAweDNlNmVhNWE0LAorCTB4OGZjMjk1Y2UsIDB4YWZmYTA0ZmQsIDB4MzYzYjAyMmYsIDB4YzFmNjQ1ZDYsIDB4N2MyYzBiOTIsIDB4ZTg1MzY4N2QsCisJMHgzYzZiMmJiZSwgMHhmMWM1YWYyZiwgMHhmZjcxZDg3MSwgMHg1OWY1YzY0MywgMHhkZTI3NjA5OCwgMHhkNWQzMjYxMCwKKwkweGYxYzIxMjhiLCAweGRjMjEyM2NjLCAweGUwOTc4NTg3LCAweDVjNjNhMzdhLCAweGZjZjgwM2NiLCAweGQ3MjA3Yjc5LAorCTB4YTZmZjc4MDksIDB4MDkwMWYzNmYsIDB4ODFmYzMzZjcsIDB4MzVjZjExOGIsIDB4MDNkMzMwNzIsIDB4NzcyZDdmZTUsCisJMHg3NGI5NjI2NiwgMHg4MTM4ZmFjOCwgMHgzOWUwMTdhNywgMHg5ZjYxODA4NywgMHhkY2Q3ZGY5NCwgMHhlMTNkY2IwZCwKKwkweDExMmJlNjBiLCAweDVmZGY4NmZiLCAweGM3YjdjYzZjLCAweDFmYjAyYWY4LCAweDRhY2JkZjkxLCAweGZkYTI0MmZjLAorCTB4MDc0Y2ZjNDEsIDB4MzRmZGZmOWYsIDB4ZjI3NzJmM2YsIDB4MDdmMTA1NzUsIDB4NmUzZWQ3ZjIsIDB4M2M1MjlkM2YsCisJMHg4N2VmYjg3MSwgMHhiNGRkNzlkOCwgMHhiY2YzNjNlZiwgMHgxMTRmNjg2ZSwgMHhlMDVhZDhlYiwgMHg0ZmIwYzU1NywKKwkweGIzZTJhMTc3LCAweDU0NWQzZjIwLCAweGZkOGRjZjBkLCAweDI3Mjc2MjhkLCAweGYyZGFlODM4LCAweGRlYmQ3NmE4LAorCTB4ODNhZjNjM2YsIDB4NGY0Zjk0ZjgsIDB4OTIyNDdiMjIsIDB4ZWQ3NDc2MmYsIDB4NjllZmYwMjcsIDB4OWUzM2ExZGQsCisJMHhmMWMzODhiMiwgMHhmYWQxZmY0YywgMHhmZGFlOTNlZSwgMHg3NjFjNDVhYSwgMHg1ZWZjYTg3MywgMHg2OWZlM2ZiZSwKKwkweDk5YzUxYzZlLCAweGEzYjhmZGVhLCAweGRhMzM2OTY5LCAweGY1MzQ3N2M1LCAweGJjZjg4OTlkLCAweDNmZTJlMGEzLAorCTB4ZWQ0M2JhNjMsIDB4ZmE4YjEzZGMsIDB4Y2U4OTdlZTIsIDB4YzFmOWRkOTcsIDB4YTQyYzZhZWIsIDB4NDc1ZmRmNWIsCisJMHgyZjNjMWZmNywgMHhlYjNhNzFlNCwgMHgwMWZlOTE1NCwgMHg3ZWY4ZDZlNiwgMHg0N2RmODg1NywgMHhhZTAyYmNjNSwKKwkweDcxNWZkMTU3LCAweGRiNzQzODc3LCAweGYzZGQwMDBkLCAweDM0MDZlODdhLCAweGViZWZhNmY3LCAweDQzZDUwMzdjLAorCTB4ODkzZGRlYTAsIDB4ZjdmNDk0ZjYsIDB4NzI2ZmJkMWEsIDB4MzVkN2JmOTgsIDB4ZTM0NmM1N2UsIDB4OGRhZjFlZTksCisJMHgwZjhmYWZjNiwgMHhlZmY4NGE3YSwgMHhmN2I4OGZjMiwgMHhmOGM3Yzc0ZCwgMHg3N2RjN2M5OSwgMHgxZDc1ZGVjNCwKKwkweGUwM2FjYjNiLCAweDNmYjBkYjBlLCAweGRlM2U3OGYzLCAweDdjZmM0ODlmLCAweDFmYTA1OTg1LCAweGY2ZmE3NDVmLAorCTB4ZTMzZTNmMjAsIDB4YmQ0NWVkZjQsIDB4NGNlYjYyNTcsIDB4YmM5MjA2NTcsIDB4Y2JjZjg1YmMsIDB4YzkwNWMwZTQsCisJMHgwMzEzZmUzMCwgMHgyMTI3MTcwMiwgMHg5Y2ZiOWExZSwgMHhjMDdmYmQ5NywgMHg4MGZiZjljZSwgMHg4MWY3ZjM5ZCwKKwkweDViYWY5ZDBjLCAweGVjZDdjODljLCAweDUzOGQyMjc0LCAweDkyYzc3ZWZmLCAweGJiMWY4N2FkLCAweGM0ZmJmODFkLAorCTB4YmIzZWZjZGIsIDB4ZTM3M2Q5NTIsIDB4OTY5N2U0NDMsIDB4M2UyZTMxOTksIDB4ZmMyMDNkMzIsIDB4N2M1ZDJkMGMsCisJMHg0MzNiYzdjOCwgMHhhMzMyZjJlMSwgMHhjMWNlOTYyMSwgMHg5YjJmOThjYywgMHgzMTlmZGJlZSwgMHgzMmMzYzc5ZiwKKwkweGFkZjg3OWE1LCAweDIyYzI3NWE2LCAweGIzZDJkNzExLCAweDQ0ODNmNDFlLCAweGZlNzMzM2Q2LCAweDY1MTdiYTA0LAorCTB4NDcxZWU2OWIsIDB4OWMzNTkxN2UsIDB4ZjQ0ZTY2Y2YsIDB4NjA4ZTc4YzksIDB4ZjY4OTMyY2MsIDB4ZjIxZjQ3ZjEsCisJMHgzYzAwYjYzNCwgMHg0NWVmMTQzMywgMHhlMGY5OWQzMSwgMHhmYmMyMGQ3ZiwgMHhiOTlhY2E1MSwgMHg5ZTQ1MzQ3ZiwKKwkweDQ4NTNmOTkzLCAweGYzZTFlZDU3LCAweDEwNzNjMjNkLCAweGM3OWYwZTRmLCAweDY5Y2ZkODYxLCAweGRkMzIyYjUzLAorCTB4MzhmN2NmYzgsIDB4NzIwN2E4N2MsIDB4ODI3ZGY1NmYsIDB4MjJmZGQ1NzQsIDB4MGFmYmJjZmEsIDB4MTcxODAxZDgsCisJMHgyN2I3N2I5YSwgMHhiNzI0ZjkwNywgMHhkNGEzZWVkZSwgMHhkMDE4OTRjNiwgMHhiMzBhYjk2YiwgMHgzMWEyOWE2MSwKKwkweDBjNjk4ZWM1LCAweGJkOWE2MWIzLCAweDM1NGZkODUwLCAweGUwZmQ5MTM3LCAweDc4NmJmMWNhLCAweGQzNmU3OWJmLAorCTB4ZmJlMzVmZjMsIDB4Yjc3ODRhZjksIDB4ZGNhYmUwNjQsIDB4YTNiZmI3YTYsIDB4M2YzZTc2NzMsIDB4NTY1ZWZkYzUsCisJMHg5ZmQ2OTlhNywgMHhmMGNkZWFjMywgMHgzODY2OGRlNSwgMHg0Nzg2NmMzMywgMHg2NWMzMzNlZSwgMHg2NzY4MzYzOCwKKwkweGUxMWVmODhjLCAweDg2NTY5ZDllLCAweGRlMmIyYmRmLCAweGY0MzhhNTZjLCAweGEwYWU3MTU3LCAweGU5M2I1ZTc4LAorCTB4NGRjNTA5YzUsIDB4NzEyNzE4ZDksIDB4MDVhNzQ1ZmMsIDB4ZmUzYjk1ZmQsIDB4NTljNTMyZmEsIDB4NjU4YTZlNzQsCisJMHhmYmI4NjcxOCwgMHg4MzE2MThkMywgMHhlZDliYmM3MSwgMHgxOGJmMzBlYiwgMHhkOWZlODc2OCwgMHhiNWY2Y2RlMiwKKwkweGVkYjM0ZjE4LCAweDQzNGY5ZDUyLCAweGVkYjUwZjE0LCAweDRiYmNmYzZmLCAweDA4NmIwNmU3LCAweDZmOGUyZWUzLAorCTB4ZTQ0NWZlN2YsIDB4ZmExYmUzY2IsIDB4YWFmNjFkOTMsIDB4N2Q2MGI0MTQsIDB4ZGQzODQ3YzEsIDB4M2ViZDA4YzcsCisJMHhlMmY1ZTg0NiwgMHhmYzdhZjMzYSwgMHhhZjZlOTcwYSwgMHhmY2UyODdiYSwgMHhlMzgxMjYzNywgMHgyZmIyYjViYiwKKwkweDI1NzdjNTg3LCAweDhjNmRmYjc0LCAweDQwZGQ2N2IwLCAweDc2ODdjZmNmLCAweGQwODg3OWQzLCAweDdiYTE3OWNmLAorCTB4NmJkMTFmMzUsIDB4YjNlYTBjNDEsIDB4MGNkYWEzOGUsIDB4NWM1ZDRiZjQsIDB4Y2VhM2M2NjMsIDB4Y2M4NDk3ZGYsCisJMHgyNGJhMjdjZiwgMHhjZjBjZTdhMSwgMHhjNTVlMzAzMywgMHhlNzE1MjRiMywgMHhkZmEzNjdlZiwgMHg4YmJkN2Y1MywKKwkweGJjMmYxOWRiLCAweDIwZjJlOWEwLCAweDk5MmE3YjhiLCAweGIyYWU3MGM3LCAweDc5YjNlZjViLCAweDA4OWUzMWZkLAorCTB4ZmJiMDM1ZTksIDB4YmI0NDcxNzksIDB4MmViMWZkN2EsIDB4ZGE1ZmNmMmUsIDB4NDQ4Mjc5ZjgsIDB4OTU2Mzg3ODEsCisJMHhlODZlYzhmYiwgMHg3ZDJiMjNiMiwgMHgzODA2ODliZSwgMHg3Mjc3NjZhZiwgMHg3NzZmZTEyZSwgMHhmOTg2YmRmMiwKKwkweGRlYzM2NGFhLCAweDRlMzBiYmU0LCAweDhmNDE0ZWFlLCAweGUzYjkyYjM2LCAweDQ5OGY5ZmI5LCAweDNkNzJlN2M0LAorCTB4MTFmMzEzZjYsIDB4NmZmNTZkOGYsIDB4ZDgxY2IwYjgsIDB4NzE4YzIzZDksIDB4NTczNWY5NjcsIDB4ZTQxYTI2ZmIsCisJMHhiOWYyODdmZSwgMHgzNzEyYjc0ZSwgMHgzOTJiY2JjNywgMHg5Y2YwOTNjZCwgMHhmZjBkNzE0OCwgMHhmZDcxNjE4ZSwKKwkweDgwZGNiNzZkLCAweGNmY2Q1ZWY4LCAweGNjMmI2N2QzLCAweDk2M2M4MzJmLCAweGZhZWRiOTZjLCAweGZjYmNmMDYxLAorCTB4ZWM1ZTUxOTksIDB4MmI3MTU0MGYsIDB4NzhkZTJmM2UsIDB4M2QxNWNlOTIsIDB4OGVmZWUxNmEsIDB4MDUwNGZhNDgsCisJMHgxM2ZhM2Q5ZiwgMHgzOWVhMDE0NywgMHhjYjc1ZWZhOCwgMHg5ZjdmN2EwOCwgMHgyMzliZWMwNSwgMHhkY2VmODNlMywKKwkweGIzOGU0NTA1LCAweGEwNmYwZmZhLCAweDlmMzMzMGY4LCAweDY4NGJkZjAyLCAweDk3YWU3NWJmLCAweGU5ZThlYmJjLAorCTB4ZDE5YmVjYzIsIDB4YTAyZGY3NTQsIDB4OGZjODc5NzgsIDB4MGMyOTdlYmEsIDB4YTQ4OWViOTksIDB4NmZjMTZhZWYsCisJMHhlNDYyMWJmMCwgMHg3ZDcyYzg5MywgMHhkY2U5MDRhNiwgMHhkMDdjYzk3NCwgMHg0M2ZmMDY5MywgMHg4YTZhYTFjOSwKKwkweDA3NmM4ZGNmLCAweGMxOTg1ODIzLCAweGUxODFkYTBlLCAweDliOTcyODc1LCAweGZjMTY5Yzc4LCAweDg4YjY1YjI0LAorCTB4NjFjNDFmNjMsIDB4ZjkxNWM3YmEsIDB4ZjhhMjE4MTEsIDB4ODNkMTM2NTIsIDB4NGQ5OWJkNzgsIDB4MzdkNzU0YzYsCisJMHhjM2Y1Mzk2ZCwgMHg1MmFiZmNiMSwgMHhhMmJmNzNjYiwgMHhlNzI0OWNmYSwgMHhkZDMwZWU2ZCwgMHg5YzRmZGI2ZiwKKwkweDcwZjM2ZjQ3LCAweDhmZWVmZjU4LCAweDY0ZDQ1ZjllLCAweGUzYWViOGE3LCAweGJmZDIzNDI3LCAweDE0OWUzMDBiLAorCTB4Yjc2OGJmY2IsIDB4M2Q2OGMwNTgsIDB4NzhjZmE1YmUsIDB4YWI2ZTUzOGMsIDB4MWZhNWY3ZTcsIDB4NWUzM2VmYWIsCisJMHgxZWJjY2IzYiwgMHhmOWY0NGZhOSwgMHgzOWZlMjBmNiwgMHhiZTdhZmQxYSwgMHg4M2NlMTcyNiwgMHg3NzFjNzg4YiwKKwkweGNjOGE5ZjRhLCAweGQyNzQyODhhLCAweDJhZDQ0YmRmLCAweGQzZmQ3MTMyLCAweGJiYzM4Zjc5LCAweGNjMTRmMDhlLAorCTB4OWZlZmM4NTAsIDB4NWM5YTdlNGEsIDB4ZTgzYTlmZTEsIDB4MDJlZGJmZjYsIDB4YWNhMTM5YmEsIDB4ZWMyNWZlMGYsCisJMHhkZmExZDc5MywgMHhmYmQ5MGJmMywgMHhmNzUwN2I4MCwgMHhhY2FjZmQzZSwgMHhhM2RmOWQwMCwgMHhmYjQwZjQwZiwKKwkweDU2MTYxNTMzLCAweGUyNjZkZjgwLCAweDYwOWMzNTNjLCAweGFlNjc0ZjlhLCAweDcxOWUyODk2LCAweDc4ZjM3MmQ2LAorCTB4ZTM2ZWJlZjAsIDB4YWFjMDVhZmMsIDB4NTYyMmRlYTksIDB4NmFjMTY5NGYsIDB4Y2UyMTdlNzMsIDB4MjczYzJlNDcsCisJMHg4YTc2ZTNjNywgMHhmYWY5Y2Q2YSwgMHg4ZDkyYzBiOSwgMHhmMGQxYWM2NywgMHhjN2QzMzVmNiwgMHhjNzAyZmJlNywKKwkweGEzNmNkZDI3LCAweDJhYjdkZGZlLCAweDY5NzdlZjhlLCAweDZkZjM4N2NjLCAweGU5MjcyYWU3LCAweGEwMTY2MmZmLAorCTB4ZTYyOWRjN2UsIDB4NzMwN2YyZmQsIDB4ZWQyMGIzN2QsIDB4MzdkMzNmOTgsIDB4Y2I5ZTBmYWIsIDB4MmQyM2YzZTcsCisJMHhmOTllNDkxOSwgMHgxM2M1N2ViZCwgMHhiZjAwNzg1OSwgMHhiY2UxODdjZiwgMHg4NTI0ZGM1YiwgMHgwMzZjMjE4NywKKwkweDlmYzExZDUxLCAweDM4MjZiZGUzLCAweDM2NzllMzdlLCAweDZlMzhmYzdkLCAweDNlZjY3M2UzLCAweDllMTE2ZmE3LAorCTB4YjhmOTkyOWIsIDB4MDIyNWY5OGQsIDB4YWQxYjI1MWYsIDB4OThkMTdmMjYsIDB4NzlkMDUyOGQsIDB4NmFhZjllMzksCisJMHgxYWNhZjdhMSwgMHhmNTRkNThjZSwgMHhlYzFkNzk4YSwgMHhiYTA3NjYwMSwgMHgyYjU4Mjk4ZCwgMHg3NTU2NjBlMywKKwkweDI1ZDBmMWU5LCAweDFjY2JjZWQxLCAweDc1NWM3ODEwLCAweDk0NWY1ZTViLCAweGJlZDFjN2RiLCAweDlkMTAyN2VkLAorCTB4Zjg0YTdhNDMsIDB4MDZkODU4YTMsIDB4ZWM4Y2M1ZWQsIDB4N2IzZjI5ODIsIDB4ZTI5Mzg3MjEsIDB4MjZhNmJkMWUsCisJMHg0YTJmYmU4ZCwgMHg2NTMzNjFmYiwgMHgwZTc4OWJmZiwgMHhkMDNlMzJiMywgMHg5OWRhMGUzNywgMHgyYmE1ZjE2OSwKKwkweGMxYmViZjI0LCAweGNmOWQ2ZmU0LCAweDg4ZTRmMGYxLCAweGEyMmE0YjhhLCAweDNhNzViN2FjLCAweDUzZDUyMTNmLAorCTB4M2I3MDQwOWMsIDB4NTk5ZGE3OWYsIDB4MjBjMDZhOWQsIDB4YjhlMzIzMTcsIDB4ZDNkYjhjYmUsIDB4M2E4ZmU3NDIsCisJMHhmZTc0NGFiNywgMHgyMGU5MjlmOSwgMHhlYTdlMGY5ZCwgMHhmZjQzMGY1YSwgMHgwOWQwMmE0MCwgMHgxMjUzZWZmNSwKKwkweGZjZjc4NDViLCAweDM0ZGMzNTY1LCAweDczYTQwZGU3LCAweGUzMTc4YzU2LCAweGM2MWI0YTBmLCAweDFhMGVhNWM5LAorCTB4NjJlM2I3M2YsIDB4YmVlMmQ2MmIsIDB4MjE4Y2NhNTQsIDB4NjFkZjkwMjMsIDB4ODY2ZTMzZGMsIDB4M2NlM2EzZTcsCisJMHgwNzVmNWVkNCwgMHhjMmVhN2JhNywgMHhhMWRjYzY2MCwgMHhjZTdmYmVkOCwgMHhjMzhmMjgxYiwgMHg3Y2JjZTg2MiwKKwkweDk5Y2FlMDBhLCAweGI0MzJlOTQwLCAweGU2NTk1MmNmLCAweDUzMzNiNDZlLCAweGEwNDY3OGE3LCAweDhiOTU3ZjRmLAorCTB4OTE2NDkzYjcsIDB4ZjY4NGRjNjcsIDB4MjcwZTA4ZTMsIDB4ZDZmOTJjM2MsIDB4YTBhZTEzMTEsIDB4ZmNhYzUyNzYsCisJMHgxY2Y4N2E5MywgMHhmYTFiNGRlZCwgMHg3YTA2MWMyNywgMHhjNGM4YTg0ZiwgMHhmMTA2NTNmNiwgMHhhNzBiNTEzNCwKKwkweGJiZmIzZDYxLCAweDc1YTAxZWU4LCAweDIzMzczY2M4LCAweGJiZWYzZDdkLCAweDJlYjgyOTcxLCAweDBiMDZkZmRjLAorCTB4ZmI2M2QwNzUsIDB4OTdmZGY0ZDMsIDB4ZmJlYzgzYjAsIDB4ZjJmMDg3MGIsIDB4OTc5OTRlYzIsIDB4MjRlN2NmYzksCisJMHgxNWY2ZWJhNiwgMHhmYWExZDcyZiwgMHg1ZWEyNDZlMiwgMHhmOWRiOGY3ZCwgMHhlNDdjMzk1ZiwgMHhlYjQyYmYwNywKKwkweGEwODAzY2U1LCAweDU4ZTlmOTUzLCAweDBiY2MzMjE2LCAweDIxYmVkM2U1LCAweGI0ZmNiM2ZiLCAweGVmMWNmNGNiLAorCTB4OTVjNjM1MDksIDB4YTFlYzE0OTcsIDB4YjI5NDNiZWYsIDB4NTA5ZjNhNjYsIDB4ODM4ZTZmNWEsIDB4N2EyNjIyYmYsCisJMHg5NzlmM2FiYiwgMHgzMDU5OTY5ZiwgMHhmOTlhYmI2YSwgMHgyYzNlZTlmOSwgMHhiOTVhMjdkOCwgMHhkM2YzZjM2NCwKKwkweGZjNmUxOTkyLCAweGU4NTM5NDU2LCAweDcxNjljYjM5LCAweDBhNzFmYWUxLCAweDY3YTg0N2NlLCAweDdhYTA5NjQyLAorCTB4ZGE1ZDM3NzksIDB4NzlhNjJkZGQsIDB4ZTFjM2RkYTgsIDB4YThiZmIxMGUsIDB4YjdmNWViZTcsIDB4MzljNGQzNGYsCisJMHg3YmNmN2UzZCwgMHgyMDI4MjU1YiwgMHg0ZGQzY2ZjMCwgMHg1ZGRmYzkyNywgMHhmMDliYjRkMiwgMHgzNzQ1ZjNhMywKKwkweGQwNTk2MjllLCAweGFhZTRhNzgwLCAweDY0MDViMGU2LCAweGZkYjhlOWZjLCAweDAyNWU4NzRiLCAweGNiYTNkOTI0LAorCTB4N2Q0YjNiZjMsIDB4YmYxZjIxNjMsIDB4ZWY5MDYxNmIsIDB4NzkyZWFjZDgsIDB4Y2FiMzc1MjcsIDB4ZjBmZDBiMjIsCisJMHg2Mzg5ZDJlZSwgMHhkZjJmMzA4ZCwgMHgzNWYzN2VmZCwgMHhiMmI3ODExMywgMHg2YmY3ZjI4NiwgMHg2YjdiZGVlMywKKwkweDc1MDZjNjIxLCAweDRjZTgzYjlkLCAweGIwMGQzYmY3LCAweDAwNzYwMjJkLCAweGJiMDBjYzNjLCAweDIzMTNmMjIzLAorCTB4ZTAyMzUzZjIsIDB4Y2RiZTVlMzQsIDB4YmQ5NzRlMTksIDB4ZmI4ZTZkOGMsIDB4ZjQwNTFhZTAsIDB4ZjBkZjViNWMsCisJMHg2NDc5YmM3NCwgMHhkNzQ3ZDU3OSwgMHg0YjhlZjdlMCwgMHg3YmY3ZjhiMywgMHhhZjI0OWFjYiwgMHg2NWEzZDA2NCwKKwkweGU0ODcxZTVlLCAweDMzNjhiNmYwLCAweDlhMWUyMjg3LCAweDUwN2Q0NGRmLCAweDcxYjkyOGQyLCAweGRmYThlMGZkLAorCTB4ZGYxODI2MTIsIDB4YWJkZTE4ZjMsIDB4OTJkM2ViZTcsIDB4NWVmNDgzZmEsIDB4YjEwZmY1YWYsIDB4M2EzZjNjOTAsCisJMHg3NzJhNzNlNCwgMHgzNjJkZmRhZSwgMHhhZjNkZmNjNSwgMHg1MmJiZjZkZSwgMHg1MGI3ODEyZCwgMHhjN2Y3ZWFkZiwKKwkweGE4Zjk2ZGI3LCAweDIwYWE3YmZiLCAweDdkN2RlZDdmLCAweDQ2OWY0OTdiLCAweGM3MmY1YjljLCAweGU1YmEzOGZlLAorCTB4YTNlM2M3NDUsIDB4N2RkMTRlNDMsIDB4ZDYxODdmYmEsIDB4MDc5YTAxZjQsIDB4MmU0ZWYzYjEsIDB4ZmY3NWFiYzAsCisJMHgxNDc4N2E1NCwgMHgyNzc4NWZkYSwgMHg0ZjFmY2UyZiwgMHg3MDRiYTE0OCwgMHgwNTlhN2E1ZSwgMHhlZjc2YzEyZSwKKwkweDM3NjhiZDI5LCAweDgwZWM2YTdlLCAweDVlMGNmMmRhLCAweGRjNGRmMzA5LCAweDAxZmZjMjQ5LCAweGZjMDBjYjY3LAorCTB4YzdlOWRkNjQsIDB4YTRlMWMyZmYsIDB4ZTYwOWJhMTYsIDB4YWZlZmVhYjYsIDB4MWVjZGVmYzEsIDB4YzAzMmQwMTgsCisJMHg4ZmY3ZjAwMiwgMHhlMDk5M2E1ZiwgMHg0MTllNWE4YiwgMHgwNGVhYzJmOCwgMHgxOTZiMGYwZSwgMHgwM2ZiYzMyMCwKKwkweDIzMjY3ZDgzLCAweGEzYmJkNmZkLCAweGExMDlmZGNiLCAweGM1ZmVmNDZmLCAweDg5MWRmNjBlLCAweDg0YWFmYjQzLAorCTB4MmM3ODNiY2YsIDB4NzU3YTA2ZGEsIDB4NGRiMWQxN2EsIDB4ZDMxZjAxZWIsIDB4ZjQ5NjIzZmYsIDB4NWJiNmZhZGQsCisJMHgxZTEzZjNhZSwgMHg2ZjhjN2U4MiwgMHhhNmY4MTE0YywgMHhiYmY0OTE3OSwgMHg1ZjQ0ZjY0MiwgMHhiYTEzMGI5YywKKwkweDZmNGNlOWU5LCAweDcxYmNkMGY2LCAweGI0MTZjNTY5LCAweDBmYTY1MjFmLCAweDU1ZTM3OWE1LCAweGVlMjdlZjk3LAorCTB4ZTllOWRkNTEsIDB4YzRmZTllMjQsIDB4NWJmYWU2ZWQsIDB4NDZiYzUwYjYsIDB4YjI0ZTQzY2EsIDB4ZGYxNzFlYWIsCisJMHgyM2I5MDA2NywgMHhiYTA4NzBmZSwgMHgzYzdjZGM1OCwgMHg3MzE5MGRmZiwgMHg4MDAwMWJkMSwgMHgwMDAwODAwMCwKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZGRmZjAwLCAweGM1OTQ3ODBkLCAweGJiYmNmMGI1LCAweDI2ZWZmZWVmLAorCTB4YjI0ZDliYmIsIDB4ZjM3OWY5MDksIDB4NzExMDA4NDMsIDB4YTkxODkzMTMsIDB4MTg4ODRkZDYsIDB4MjIwYmI1MzEsCisJMHg0OTcxNmI2MiwgMHhjOTMwNDlmOCwgMHgyZDE2YWQ0NiwgMHg1NDQ4NTliZCwgMHg0NmQxMDg4MiwgMHhlMWI4MGEwNCwKKwkweGZkMmI2MjAyLCAweDFhOGM0NTgyLCAweGY2ODg4MmU4LCAweDcyZGZiZDJiLCAweGJkM2ZhZGViLCAweDhhN2UxYmQ3LAorCTB4YjQ1NjQyODgsIDB4ZWI2ZGVhNWMsIDB4MjY2NjczOWQsIDB4NWM5Mzc3ZDksIDB4OWY3YjdhYTgsIDB4YmU4ZjhiZTcsCisJMHhjZWYzM2JjZSwgMHhmZTczMzk5YywgMHhiMzMzOWNlNiwgMHg5MDg2YmIxYSwgMHgyNThlNDI2NCwgMHg0ZWM3MzBkYywKKwkweGU2MzFkZjlmLCAweDIyNGM5ZDE1LCAweGY0MzNiYmE0LCAweGM4NGI0OTljLCAweGM0MjExMjdiLCAweDA5ZjA0ODQ1LAorCTB4MGU3YjY4NTMsIDB4ZDFlZGRmMjEsIDB4YjQ4OTc1MDQsIDB4NzM0ZGUxZGUsIDB4NDRiMmQxMTYsIDB4YzM0NWJkN2MsCisJMHhkNTdmYmRlNSwgMHhkMmIzZTVkZSwgMHhkMzJkMzE3MiwgMHg5OTEyYWJlNywgMHhiZDMzZjU4YiwgMHhmZTVhMGU2OSwKKwkweGE3YWVmZTAyLCAweDlmNTYxZWU1LCAweDU4YWQyNWFlLCAweDdmYmVjMzlmLCAweGU1ZGM4NGFhLCAweDc2ZDRjZmEzLAorCTB4N2QyOTZlM2EsIDB4YjViODlkYWUsIDB4OTE2YjhlOWQsIDB4MGJjYTE3ODksIDB4NWQ2YzE2ZTcsIDB4NzM2YTYxNGUsCisJMHg4OTc4NDJjYywgMHg1MTI2OWJkNywgMHhlNjM2NGVmOCwgMHg3NmQxNTY2YSwgMHhjOGFmYTdiZiwgMHg1MTVjODQzNSwKKwkweDk3YjBjZGUwLCAweGZmNDBmOWQxLCAweDQ0ZDIxYzc0LCAweDNjMzY5NTI3LCAweDM3OTgxY2ZlLCAweDdhZDdhZmFkLAorCTB4Y2YzYTY0YjMsIDB4MzlmZTFkZGIsIDB4ZTM1ZWJlZDAsIDB4ZDBiNDQyOWQsIDB4NzdjMGI3ODksIDB4ODgyM2I0MDUsCisJMHgzYjc2Mzk5ZiwgMHg0MGYyMjdiNiwgMHhmZmZmYmMxOSwgMHhiODk1NGYwOCwgMHg0ZjExNWZlZSwgMHg3NTM0ZWY3NywKKwkweGY4MjQyYzlkLCAweGI3ZmQwNWY3LCAweDJhYTFkN2I5LCAweGJhZDJmYTA3LCAweGNiODcxYTRlLCAweGQwZmZjMzc3LAorCTB4MjRhZDQ4NzEsIDB4MmMzYTE0OTMsIDB4OGQ2ZTIyYWIsIDB4YmZlODM2ZmYsIDB4N2EwN2U5NzksIDB4NTEzNzgxYTIsCisJMHhmMDJmZjQzZCwgMHhlYjBhNGViZSwgMHg4MmZjZTk1MiwgMHg3NmNmMjRmYiwgMHhiMmNmZGVjMiwgMHhlODk1OTIxMSwKKwkweDIxZTYxM2JmLCAweGMzZjc5ZWUwLCAweGQxN2YzNGU2LCAweDNmMmM3Y2YwLCAweDc2ZTZhOTc4LCAweGU0Yjc5YzVhLAorCTB4ZjRlZGFlY2MsIDB4NTkwZjc5ZmIsIDB4ZGI4NjUxMDgsIDB4OWQ3MTFlZDMsIDB4YjhjZjdmZGYsIDB4OWY0OTVjOWEsCisJMHg4NmIwZGVmYSwgMHgxOWZkZWJlMiwgMHhiNjljYjNjNCwgMHgxYTQzNWY3YiwgMHg3M2VmZmYwMCwgMHg3NDNmOTViYywKKwkweDg1MzIxMWY3LCAweGI1ZDk1ZjkwLCAweGQwNDk5ZGY4LCAweGJkZGJlNDgzLCAweDUzYjdlMjg4LCAweGQwMjM0MTIyLAorCTB4ZDIzZDRjYzMsIDB4ZDI4ODYwYzMsIDB4ZmViMDk1YzMsIDB4ZmJlODdkNzQsIDB4ODcyNzA3ZWUsIDB4MDY3ZDc0ODIsCisJMHg2MTkxMDBjOSwgMHhiZWM0MTUzZSwgMHhiZmE5ODk1ZCwgMHgyOWViMDBhMywgMHhiNDRkMDQ5ZCwgMHgwZTY4ZGEzZSwKKwkweDVlODA5NTZkLCAweDUwYTVhMDI4LCAweDVmZWIwOTNmLCAweDA3ZmFkODk1LCAweDM4ZTIzMGVmLCAweDFkMTkzM2RkLAorCTB4NDMzYTM3NzYsIDB4YjYwMDFjYzEsIDB4YzZkZTAwOGIsIDB4NzY5NGEzYTIsIDB4NjQ0ODc0ODIsIDB4YjY5OTk0ZWYsCisJMHhlMzZjN2M2MSwgMHgzYTUyYzE3MiwgMHhiNGRiZTJmMCwgMHhlNGRhYjIzZiwgMHhiMDFmNGYxOSwgMHhiYjk0MzI4NCwKKwkweDRhM2M3MTUyLCAweGJlOTFhYjBmLCAweGZkNDcwNjY0LCAweGFiNDJkMzhmLCAweDM5NGY1YzcwLCAweDM2YTNjYmFjLAorCTB4MWY3ODdjZWYsIDB4MDE0NTkxZmQsIDB4Yzg5OTM3ZjgsIDB4N2QwOTYzNGEsIDB4ZThjM2E0NGEsIDB4ZTFjMGViYTQsCisJMHgxMzRmNWQyMSwgMHg2MGJiODNhMCwgMHg3Zjg3OGEwMCwgMHg1MzZmMzg2ZiwgMHhkODlmZmJlOCwgMHgwODAzODQyNSwKKwkweDQ4NGU1OGNkLCAweDc1ZjU2MTFkLCAweGE0YzcyY2NiLCAweDg2ZDRmMDI5LCAweGRkZjQwOTBkLCAweDAzYmMxYmNhLAorCTB4ZDk3MmJlODIsIDB4ZjNmYjQ4ZDMsIDB4ZWIyMmJhNzMsIDB4ODNjMDM2YTMsIDB4ODA0YmJlMWYsIDB4MjliNzNmZmUsCisJMHhlZmQzMjg1NiwgMHhkM2YyYzBhNywgMHhiZjg3MGJlZiwgMHg3ZGYwMzlmZiwgMHhlMGM3YzAxOSwgMHg2NTE2NmQyNywKKwkweDFmOGMzNGJiLCAweDgwYjlmY2YxLCAweDZmNjllYmFmLCAweDljNjI3OGVjLCAweGQ5OGY3ZWY4LCAweGYwMDdmZmJkLAorCTB4NGUxZWYxNDUsIDB4YjQ1ZTAxNzQsIDB4ZjBmMWFlYjgsIDB4YzdkMWY0YmEsIDB4NWU3ZWI0NGQsIDB4ODJiMWQ2OWIsCisJMHhkNGJmZDNlMiwgMHhmMDE1ZjM4NiwgMHhiZDFhOTVkZSwgMHhlYzhkZTQ4ZSwgMHhhNWE1OTRmZiwgMHgyZmY5ODY1YywKKwkweDk2NGY3NDY1LCAweDYyZTIyODE5LCAweDJlMWZhMmYxLCAweDQ4NWRkMjUzLCAweGQyMzU4N2EyLCAweGYwZTVlZjI4LAorCTB4NTE3ZjgwMDEsIDB4ZjhmN2NjNzcsIDB4NjIxYWJmZGYsIDB4MjFiZTA5ZGIsIDB4M2YwNzE0OGEsIDB4OTI0NTJiYTcsCisJMHgxMmZjZGQ2MSwgMHgzZWJkMzc1YiwgMHg1NmU0MGYzYSwgMHg5ZjAyZGMzYywgMHg4ZGU1YzZmZiwgMHg3Yzc4OGJhMCwKKwkweGJiZTAxYmZmLCAweDVkYmUyNDZjLCAweGU4NGM4MWZhLCAweDgwZDRiZmQ3LCAweDlmZWY4YTc4LCAweGY3N2UxMDkwLAorCTB4NGQwNDg5YjQsIDB4NGJkNmVlOTQsIDB4ZmFlYmQyMTIsIDB4OTAyMTJkMDcsIDB4ZThhNjgzOWIsIDB4NjA2N2MwMGUsCisJMHhkZWI4OGRmZiwgMHgwYWNkMWFlNywgMHhlYTM2NGRhMSwgMHhmNzA1YmYxOSwgMHgxNzFmMThkYiwgMHhkYzgwMTQwYywKKwkweGVjZTc0NzNiLCAweGVlNzNlYmE1LCAweGEwOWVkYTM3LCAweGE0MjA4MDI0LCAweGFkZGEzN2U1LCAweDVlZTdmZjQwLAorCTB4YjNmNTg5YmUsIDB4NWExMGEyZGMsIDB4ZTk4NjAwMGUsIDB4N2ZlMDgxYjgsIDB4NTc4YTExYjYsIDB4YzcxMTk2NjksCisJMHgwYTU3YjEzZiwgMHg4ZmJlYTAxOSwgMHg1ZTQ2MzllMiwgMHgzNmZmYTM5ZSwgMHg4ZGNiMGM5NCwgMHgzODAwYTg0MSwKKwkweDA3MDgyY2ZhLCAweDhlMjM2OTlkLCAweDU5MzM1ZGY3LCAweGQxNmZjNzQ1LCAweGFkMGQ1ZTQ4LCAweDI5MzI1OTZmLAorCTB4MzFlMGNlZDQsIDB4MTZkNWNhYzYsIDB4NGE5MGU5MGQsIDB4NDViZmY5ODYsIDB4ZGVlMGJjNzMsIDB4YTcyNzU2MjIsCisJMHg2MGFjNzk3MCwgMHg4NTEyNDNiYiwgMHgzYWI4YzliMywgMHgwNWZhMDVhMiwgMHg0YmY1YTAzZSwgMHg3ODY3M2VhMCwKKwkweDdmNTY1YTFkLCAweDQ3OTgxN2Y0LCAweDdkMzUxZWNiLCAweDllYWYzZDM0LCAweGJhNTg5MmM3LCAweDE3YTYxOWNhLAorCTB4MTdjMzI5NGIsIDB4ZjFhMTI2YTksIDB4MmYxYjVlMTQsIDB4MjEyMjZhNWIsIDB4ZTk2M2UwMmQsIDB4MmFlMjcyMzQsCisJMHhjMGUwZjRkYSwgMHg1YjIzYTA3NCwgMHhhM2E5MmY2OSwgMHhlMjY5YzBjZiwgMHhhN2I4NTEwZCwgMHgzNmJjZjdmNiwKKwkweGQ0NzdiNjhlLCAweGJhNjEzMjQ0LCAweGNkYmZhNTgxLCAweGYwZDU3OTNiLCAweGFmMzgwYjNhLCAweDRiNDI3ZmU5LAorCTB4N2UxZTM4YWMsIDB4ZWVmMTQxNDcsIDB4ODliYjYyYjYsIDB4N2Q4OGFlYjMsIDB4OTJlZmMwYWUsIDB4MGYyZjRjMzUsCisJMHgxZmUwMmJjMCwgMHg3NWNkZTk5OSwgMHhmZDUyNmY1YywgMHg2MTdhZjI4YSwgMHhhZmQ0MDRkNywgMHhjZTQwZmZhMCwKKwkweGY0YzA5NTNkLCAweDkwM2RjODMxLCAweGFhOGU2ZDMzLCAweDllNzQxY2FiLCAweDE0ZDU2NzY2LCAweGM3MWIxOTQ3LAorCTB4MjdlOTgzNjcsIDB4YTc4OGZlYTEsIDB4MjQzZDc4ZWIsIDB4YjVlNmE1ZGEsIDB4Yzc1YWI3MTYsIDB4MGNmOTQ3NmUsCisJMHg5MGRkMTZmMSwgMHgyYzg4ZTRjOCwgMHhhZmQxNzk2MSwgMHgxMGFiM2Q3NSwgMHhlNmU5MTkzZSwgMHgyODM5Y2RkZSwKKwkweDk3NDgxYjk3LCAweDg5YmNlODFlLCAweGM3NDBmNDg0LCAweDk4MjQ4YzhiLCAweDExNjJlOTQwLCAweDlmNDg5NjZkLAorCTB4ODgxYmQ3OGIsIDB4OGQ3ZWIzMTIsIDB4ODliOTc1MjEsIDB4NDliYjg1Y2IsIDB4N2JiZmJmMDQsIDB4MzU3ZDVjNjcsCisJMHg3ZDY4ZGIwOSwgMHgyZDg0OTFiMywgMHhkNzU1ZWNmMCwgMHg4ZTdkNTBiNywgMHg4NWY3ZDY3YywgMHhlOTNkZjYyMSwKKwkweDhiYmRmMzY2LCAweDNhYTNiYmFmLCAweDc5ZDNmNWE0LCAweGRkNTEzMDZmLCAweDVkMDY4NGVhLCAweDk3NTMzZWI4LAorCTB4MjY3YWUwZjUsIDB4MWU3Mzc4OTYsIDB4MmJmMmJkMDYsIDB4YTUyYjY3OWQsIDB4ZjVmMDNmZGIsIDB4NjYzOWY4MTIsCisJMHhiYzAwYWFhZiwgMHg5YzFhYjU5YiwgMHgwMzYxZjQ3ZiwgMHhkNTI0ZTdlMiwgMHg2YmZlYjBlMywgMHg1OWFlZTQxZCwKKwkweDhkYWU3OWY0LCAweDgwNzVmMzc4LCAweDJjZDY3YjI2LCAweGFmM2M0OGRiLCAweDAwZDRjNTdhLCAweGQwZTBkMzc0LAorCTB4ZDMyYWU4YTgsIDB4Zjk3MmMzYTEsIDB4ZTVmZjhlMGEsIDB4MWNkNmQwOTYsIDB4YTAxNGY3NDQsIDB4YTE1Y2YyYTcsCisJMHg5OTk0Yzk1NywgMHg0NzRjN2NiNCwgMHg2ZTVhM2JlZCwgMHg0M2Y1NjM5OSwgMHg0ZjYwMDM3ZiwgMHgwZWZkZjJkMCwKKwkweDc3ZWVjZjI2LCAweDQ1M2Q3MWU4LCAweGQwNTdjYzU5LCAweGZiMDcxZDBkLCAweDllYzU1ZjMzLCAweDQzNjU4ZTAyLAorCTB4NzQ2MDlmZWQsIDB4YmFmMGY1YzMsIDB4ZWEwZjczNDYsIDB4ZDVmYTIxZTEsIDB4MjJkZmE0MTAsIDB4ZmFmMDFlOWYsCisJMHhmMzJiOTcwYSwgMHhmOGExNmVjMSwgMHgxNDEyODU3ZSwgMHgyZjYwOGZjOCwgMHgzZTI5NWZiMywgMHhlNWE1MmRlNiwKKwkweDc5MTc0ZTU3LCAweDY3NDAyOTU2LCAweGYyYmNkZTRjLCAweDQxNTkzMzFkLCAweGNjZjM3Yzg3LCAweDI3ZmIxZjRmLAorCTB4YjRmZTdmNWEsIDB4ZmFkMDMxNWUsIDB4NzQ2YjQwMDUsIDB4ODg5MTVlZmQsIDB4YmUwYmM2MTcsIDB4YmU4MTA4NjgsCisJMHg3YjMzZDI2YywgMHgxNWZmNjliNCwgMHhmYmQxOWVjYywgMHg3MTg0MmMzNywgMHhjMDc5ZDA1ZSwgMHgwODRhNjlkZSwKKwkweGViMDNiNzNkLCAweGEyOTQzY2QzLCAweDg2M2FhYmM5LCAweDE2Y2JlMGNmLCAweGY0MzliZGY2LCAweGEwYmI5ZmIzLAorCTB4YTQxM2Q1M2UsIDB4ZmYyNmEzZWQsIDB4NzRkNzU4NDYsIDB4N2E4ODkyODMsIDB4YzI1YWQ3ZjksIDB4MzgxNzA5YzYsCisJMHg4NzhmNWUyOCwgMHg5YzdkZGQ5OCwgMHg0ZTMwNDk1NiwgMHhhMWZiMGRiZiwgMHg5MGI2OWE3YywgMHgzM2EyNzNmNiwKKwkweGU1NDNlNzE1LCAweDI3NTlkYTJmLCAweDgyYjYxOGQ2LCAweDM0Mzc1ZGZjLCAweDhmZWQ4NGFlLCAweGQzZDM3Y2ViLAorCTB4OGJmOGY5NjgsIDB4YjRlNTllYzUsIDB4MGZhN2QwNmEsIDB4MDczZDI5ZWIsIDB4YWZiYjMyZDYsIDB4MDE2Y2EzNWUsCisJMHgxNmZkOTBmYywgMHg4ZjU4ODc5YywgMHhiNWM1OWFjMCwgMHhiMjU4MWY1MCwgMHg4ZjkwMTZlYywgMHhjODM5ZjE2MywKKwkweDM3MjMxMjdiLCAweDE2Njg5MWNmLCAweDg2YzZkM2YwLCAweGU4MzBkZWRjLCAweDFlODlmZTk1LCAweDRkYzRhZjU0LAorCTB4OGRkMjlmMTcsIDB4YTkzZGI1OWQsIDB4ZWU4ZGY4NjMsIDB4NWYzZDIxZDMsIDB4MTc0MGZmNmUsIDB4NDNkMzM5NzIsCisJMHhjYTgwNGUzMCwgMHgwZmY4MjI2NSwgMHg1OTRjNzJlNSwgMHhhZDk5NWEzYiwgMHg1NDk1ZTA2MywgMHhlYmE5ZGY2ZSwKKwkweDQ3ZmMxMjUzLCAweDllNWE1ZDYwLCAweDk3Zjc4ZmZjLCAweDE0NWUzMDJhLCAweDRhZTkyMmU1LCAweGE5M2NiZTQ2LAorCTB4YmEwM2NlZjMsIDB4ZjU4NzU0NzUsIDB4ZmQ3YTMxNzUsIDB4OTlkOTgzYTQsIDB4MDc2ZTA2ZjUsIDB4OTYzZWIwOTIsCisJMHg3OTdkNDUwZiwgMHhjNWVlOWE5NSwgMHg3ZmE3MDRmMywgMHhmN2M5ODQ1YiwgMHhjZTFhZjU5MSwgMHg0MDFhYjcxZiwKKwkweDIwNjU0ZDhmLCAweDIzZDA2YzkzLCAweGMxNWZlODU2LCAweDBlOWVhN2ZlLCAweDM5NjllYmViLCAweGJmNTg1OTdiLAorCTB4NGY4MTNmODgsIDB4NDZjM2JlMjgsIDB4MWI5M2VmM2EsIDB4MjliZjhjNmMsIDB4NDU5ZmEwMWEsIDB4ZTVmNTA0MTUsCisJMHg2M2I1MmQyMiwgMHhkMmJkZTA0YiwgMHhlNWQ3NDAzNywgMHhhNDBlOGJkNCwgMHg4YTY3ZjIyZiwgMHhmOWVmOGExNSwKKwkweDUwMzNiNzg0LCAweGIxY2E5N2JiLCAweDMwYTQzYTk3LCAweGFmZTYwYmVjLCAweGU1MzU2YzM3LCAweGI1N2I1ZjAwLAorCTB4Y2RjZjU4MzYsIDB4ZjliMWNhMTIsIDB4MWIwNTk1MWQsIDB4OWVjOTc5NjgsIDB4MTNmZDcwMmIsIDB4MmU1ZDE4MmEsCisJMHgyZjUwMzkwOSwgMHhiMWYyZTU0ZSwgMHhhM2QyMTBkZSwgMHg4OTMzZmUxZCwgMHhmNjg4M2VjMCwgMHgxMzc0ZjY4ZiwKKwkweDY0YWQyOGZkLCAweGFlNDAxZTI0LCAweDE0MjFlOGFiLCAweGQxZjZhNjUzLCAweDU3MjY1ZWQ0LCAweDI0ZTc5NTA5LAorCTB4ZjIxMjZlYzYsIDB4ODkzOGU0MWUsIDB4ZjRkNTAzYjMsIDB4ODhmYTE0MTEsIDB4YTRhMjNkYzksIDB4NzIxM2RjODIsCisJMHg5N2RkOThmOSwgMHgzZTNiNDRlOCwgMHg5N2Q2MTUzZiwgMHg5YjkzMjdhZSwgMHg2YmM0MjViYiwgMHg3ZDQ1NjkzMywKKwkweGQwYzBmNDIyLCAweDljOGY1Y2I4LCAweGJlOTkwNmQyLCAweGNmODEzYzMyLCAweGFlMGU2NzdjLCAweDhiZDIxMmViLAorCTB4OTVlODQ0ZmEsIDB4ZGYyMGU4YjEsIDB4ODhmYmUxYTksIDB4YmM2MGU5ZDEsIDB4OWFmZWMxNTMsIDB4NzVmMDkzNGUsCisJMHg2NWE2YmM3NCwgMHg4NTNjZGMyNCwgMHg1MDUzNmQzZCwgMHg2OTNkMzIzZiwgMHg5ZTEyN2E2NCwgMHg5N2QwY2JlNiwKKwkweDVlMzFmYWYxLCAweGMxZWJjNjFmLCAweDc3ZDMzZDU0LCAweDNkODU5ZDYyLCAweGQ5OGQzYTkzLCAweDg1OTc1MzAxLAorCTB4ZmMwOGE0YjQsIDB4OTRlYWRlMzUsIDB4MjZiYjYxZTQsIDB4YThkMThlZjAsIDB4MWY2NTA5NWMsIDB4OWVmOTA1YzksCisJMHgyYTYyZjk1MCwgMHhjNGM4MGZhZCwgMHhhMTY1N2MwYiwgMHhlZmExZTk3OCwgMHhiN2ZiNzMzNywgMHhkN2NkOTUyNywKKwkweGFiZjQ2N2FkLCAweGQ4YTQ3ZDkzLCAweGMxMTJlYjBhLCAweDk5MzQ2ZjdkLCAweDA1MWU4MWQ4LCAweGU4ZGIzNzNlLAorCTB4MWRmMDI1NzcsIDB4ZWZhMWI3ZTMsIDB4MWNjM2E0OGQsIDB4MmJkNTdkZjMsIDB4MTczZmQ0MjYsIDB4MGM4NWI2NWUsCisJMHhiM2Y4OGY2OCwgMHg5NGJmYjQxZCwgMHg0ZWQwMWJkZiwgMHgwZDhhZjczZCwgMHhhZTM5ZTlmNSwgMHhlZmMyNWQwZiwKKwkweDdlNjExZTQwLCAweDQxYWViZTE2LCAweDAwOGUzNTUyLCAweGM2MzM0YmVkLCAweGY2MTQwODgxLCAweGQ5ODNiMzU5LAorCTB4MjFlZDIzNTksIDB4OTkxMzlmNWUsIDB4ODBjYWU4YzMsIDB4OGUwYmNkZmIsIDB4NGNhMDA3ODEsIDB4N2ZhMDIxZTEsCisJMHg3ZTMyNzE2ZSwgMHg1Njk5ZWMwZiwgMHgzZWZhNDNmYywgMHgxODdhYjNlMCwgMHg0MGM1ZmRmNiwgMHhmN2VkMDZhZiwKKwkweDdkMjkxOGU3LCAweDhiMmVkNzRkLCAweGQxZTc0ODNlLCAweDgzYjU2OTljLCAweGZlY2VhYjdlLCAweDQxZGRkZmQ3LAorCTB4ZDFlZTFmY2IsIDB4ZjNhYzAzMTEsIDB4NDk3MzY5ZjYsIDB4YjdmMmQ4ZWUsIDB4M2UzYmE0MzEsIDB4NzcyZmMzMTAsCisJMHg5Yjk3NTRlZiwgMHg0MGU1ZDU3YiwgMHhiZjdjYmE5ZiwgMHg2NTNhZTZkMywgMHhmOWUxZDk0MSwgMHhjMWI1ZDI4MiwKKwkweDg3YmE3YWQwLCAweGQ1Nzg2YmMyLCAweDg2NjhmYTgwLCAweDEzOTBmZmQzLCAweDdhMjZhZGU0LCAweGM4NmNmMDE4LAorCTB4ZjgwYTc4ZmUsIDB4OWZmZDAyM2IsIDB4NTAzNGYwNDgsIDB4MzExNDhhMzYsIDB4NWY1ZjAzZmMsIDB4YjZjZmNkMzAsCisJMHg2MWI3ODI4ZiwgMHgwNmEzMTFmYywgMHg3NWFkNGNmMSwgMHgxNzM5NDRmNiwgMHhkMmUyN2NlMCwgMHg0MDNjM2Y3YiwKKwkweDk2NjhiZmU3LCAweGRmMDJiZWQ5LCAweGNhY2I2Yjc4LCAweDE4NDQ5ZWMxLCAweDRkZmQ2MDQ5LCAweDhiYmVjMjFmLAorCTB4ZjU4NDZiYjYsIDB4YjY5MzM1M2YsIDB4YWMzNTcwYTMsIDB4ODliMGZhNjcsIDB4NmY4MDEyNDQsIDB4NjlkZGE4NWIsCisJMHgxYmZjNGJhNCwgMHg3Nzc3NmZjZSwgMHhmNGMzY2I0NCwgMHgzNTlkYmI3ZiwgMHhmOTRlMDExMywgMHhlODBmYjIyZiwKKwkweDM3ZTg1MWUzLCAweGVhZGU0ZWM2LCAweDRiZmM3MjY0LCAweDQ2MzI5OWZiLCAweDAyYjY5OWY4LCAweDAzOGQ5YWZlLAorCTB4ZmUzYTRhZmEsIDB4MGNmOTdmZjUsIDB4YTVlMmZkZTUsIDB4ODIzZWUxYWYsIDB4YjMzZTYzY2UsIDB4YzgwYTRkYWIsCisJMHgxZTBmYzVhNywgMHhkZjYyZjdjMCwgMHg4YWQzMmE3NiwgMHgzNmQ3YjZmYiwgMHhhMWQ5NTgxOCwgMHhjZGE5ZjJjNywKKwkweGI4Yjk1ZjZjLCAweDNjYzEwYTU3LCAweDkzMTc1OWE1LCAweDZjMmY0MTJhLCAweDY0MGRkOWQ2LCAweGYxZTM1ZTI0LAorCTB4YjdhNmMxZjgsIDB4ZjVlZmMwMTMsIDB4ZjYxZDIyMDEsIDB4YzdiMzEyN2IsIDB4YjgwOWFkZWMsIDB4MTM1YTUwN2YsCisJMHhhYzBjYmVjMCwgMHg5MDQzZjFiZiwgMHg2YjM3OGI4ZiwgMHg5MDJmNjAzZCwgMHhjZmY0MzY3ZCwgMHhjMzdjZGUyYywKKwkweGU4NTY4NWM0LCAweDRhYTRkM2U3LCAweGI5NmQxM2YwLCAweGQwNTQzYzAxLCAweDdlNjIxN2NlLCAweGY0ZjVjODllLAorCTB4NmFlNWJjYmQsIDB4ZDBmMWY4MDUsIDB4NjJmZjA2NjYsIDB4ZDAwNzcxODcsIDB4ZDE3ZmY1ZDEsIDB4MWFjOTdmMjIsCisJMHhiOTNiMDdlMiwgMHgwODlkZWY1YiwgMHhkYTZjYWQ3YywgMHhlN2Q2MWQzZSwgMHgxYWU5OTk4MywgMHgyMjRiYmY2YywKKwkweDYzOGJjMDc2LCAweDVmYmMwYTY5LCAweGUwM2VjOTJjLCAweDhkZjU4NmUzLCAweDRmNzZiMWI1LCAweGM3Zjk5MzlkLAorCTB4YTU5N2IzMmEsIDB4YWY5MTU4MGMsIDB4NmQzZTgwZTYsIDB4MDhmOTRjZGUsIDB4ZGVmNTlmYzYsIDB4MGQ3MGVlZWYsCisJMHg2YjM0OTVmMywgMHhhMTUzMmRmZCwgMHgxZTc1NjdmZiwgMHg3YjIxYmJlMCwgMHg5MGI3ZDM2NiwgMHg0YzJmZTBiZSwKKwkweGUzOThiNWYxLCAweDk5ZjJhYmViLCAweGE0ZjgyMmMxLCAweGVhZTQwMGI1LCAweDA1YWQxNWUyLCAweDhjZWM1MWY2LAorCTB4NDRkOTNlMjEsIDB4MjEzMjcyZjksIDB4ZjkxMjlkYTcsIDB4MTk5M2ZjMDIsIDB4NjNiZWQ1NGUsIDB4YjU5YTdkYWMsCisJMHhjNjdhODM1MCwgMHhlZGRlMjFlOCwgMHhiNzRhOTlmNCwgMHhiNzFmYjBjOSwgMHg2ZjU4YzkyNSwgMHg3ZDIzZDI0YiwKKwkweDc3YmE3ZmNiLCAweGJjZTg2ZmU3LCAweDJmZmE3NDllLCAweDI2Y2NiZTgwLCAweDZiZDA2MmRlLCAweDQ1NWVkNDRhLAorCTB4MzU0MDVhY2QsIDB4MTM2NDYxZGEsIDB4Y2M4OWFmYjMsIDB4OTJlYjg1ZmMsIDB4MzE1NThlYzksIDB4MTI1MzczZmIsCisJMHgzOTUwNGZkYiwgMHg3M2Y0MDVmMSwgMHgxZjNmZGRlZSwgMHg2NGI2ZmMwNiwgMHhlYzA1M2M3ZCwgMHhjZmM1YzA4NSwKKwkweGIzNWZlMGY0LCAweGRmMjg0YmY2LCAweDAxMWYxZWFkLCAweGNmZjQwOWJhLCAweDg2OGEwYjI0LCAweGMzYzA3MmU1LAorCTB4YmNmYzQ2ZjQsIDB4OThlOTI0ZTYsIDB4YjE0NTc1MWMsIDB4ODI5NzRhOWYsIDB4NDEwNzZlZTUsIDB4ZDRiOGRhN2EsCisJMHg0NmZlZjY4YywgMHg0MDA0Yzg1NywgMHgyYjdjYWRmZiwgMHhlZTQ2YTdlYywgMHhmYjZlMzQwZiwgMHg3NDBiNTc4NSwKKwkweGUzZWM5MjFlLCAweGZlMzBhY2ExLCAweDE3OTg2YzE4LCAweDNlNzFkMmQyLCAweGM0MTc5NmRjLCAweDhmNGE5ZWYyLAorCTB4Yjc1OWQ2OTYsIDB4NWNjYWUzZmQsIDB4Y2U5ZjUzYzAsIDB4OWVhZGVkMDMsIDB4ZGY5ODA0ODEsIDB4MjQ0ZWRiODcsCisJMHhiNjFhZmNjMCwgMHgwZGRlNzE2OSwgMHgxNjUyNGZhMSwgMHgwOWNiMGQxNiwgMHg5MDVmYzY5ZCwgMHg1ZDgyNzYwNCwKKwkweDQyZjhjMmIyLCAweGVkYjg3YzVlLCAweDU2MDU5NGQzLCAweDdkNDAzZmU2LCAweDVlM2EzYTVhLCAweGM5Y2FjZWNjLAorCTB4ZGZmNWZkZjAsIDB4NjY3MmViNjQsIDB4NzIwNDIxOTcsIDB4Zjk4OThjZjAsIDB4MzNiYjQ1ZjcsIDB4YWVmZmE2MzYsCisJMHhjZGZlMTI0YiwgMHgzZmQwMmNkZSwgMHhhMjc5NjU0MywgMHhmN2M0ZTQwNiwgMHgyZWZlNmNlZCwgMHhmMDE2NmY3ZCwKKwkweGJhOTI0N2U1LCAweGI1MmIyNTlmLCAweDUyZTU0NDI0LCAweDg0ODk0YWUzLCAweGYzM2ZjY2E4LCAweDIwNTk0YmRjLAorCTB4ZmVkYzNmZmYsIDB4MGM1ZDU2NTIsIDB4ODlkZmYxN2MsIDB4NmE0OThkZTcsIDB4YWZmMDlhN2YsIDB4MGNlMWY0YmEsCisJMHg2M2NlYWYxOCwgMHgzMWNjN2U2MCwgMHgzZGEyYWJmYywgMHhhNGZjY2Y1OSwgMHg4MTZiOTQ4MywgMHg4Mzc3YzUwZSwKKwkweGQ4MmY2NjBkLCAweDE4YzQ4M2JiLCAweDVkNWI5NzAyLCAweDdhZDdmNzNmLCAweGQ4MmVmOWJkLCAweGUzZWY4OGQ3LAorCTB4ZjQwZDVmZmEsIDB4ZmE5MmUxNDQsIDB4NTgyN2Y0MjQsIDB4OWYyOGEyOGEsIDB4NzdmY2I0YmYsIDB4OTE4Y2Y1ZDEsCisJMHg4ZDlkNzRmZiwgMHhjNmNkNGViMCwgMHgwNDcxZTFlOCwgMHg3ODBmNDNlOSwgMHg2NTU4YjdkMywgMHhlZDI5NTdkMCwKKwkweGY3YTJiZThjLCAweGU1OWY3MDZiLCAweDgxNGMyNzMyLCAweGRkM2U4MGI4LCAweDc2ZjkwNTZkLCAweDQzYjk4MTdkLAorCTB4YjNlZjA4OTMsIDB4MzMzZWQwNDIsIDB4MGJiZjEwYmQsIDB4MGZmYTMxNTYsIDB4YzNmNDEwYTYsIDB4MDk1NjkxYTUsCisJMHhlNjc2YjRmZCwgMHgyMGE4Y2ZlNywgMHhmOGI0NTVmNiwgMHhlNzY2MjRiMywgMHhiZDY3ODliOCwgMHg1ZmQ3MGYzNiwKKwkweGM3MDczOGMyLCAweDQwMGZkMDhiLCAweGNmMmYyMDQ3LCAweDIzYTQ0NjQ4LCAweDdiNDI1ZmE5LCAweDlkZTlhYjU0LAorCTB4NDU4ZWZkMDcsIDB4YmFjNTJiNTcsIDB4MmExYWJhNzIsIDB4ZWFlODlkZmYsIDB4MjNjNzQxNDksIDB4MjBhZmNhZTgsCisJMHhhMzhkYjk1ZCwgMHgyM2Y3MTVkMywgMHgxMjdiNzY1ZiwgMHgzNmJlYzFmNCwgMHgyZDZiZTM5NSwgMHhmYmQxM2Y5NywKKwkweDJlYWZjMjhkLCAweDc5NmI3Y2MxLCAweDZiNDZiNTdmLCAweGM0N2EwYjU4LCAweGQ2MzhmYmEzLCAweGRhODliYzNmLAorCTB4NGE3ZmIwYzUsIDB4M2U5ZWJiMDMsIDB4NTdjZmI1YzcsIDB4NjQ0OGRkNzAsIDB4OTYwOGZjMDAsIDB4MmZhODhkYWIsCisJMHg3MjQ0ZDMxZiwgMHg5ZDQ5OGVjMCwgMHhlODFiYmFkNCwgMHg1MTVlNzUyMywgMHgwYmVlM2I0OSwgMHgxN2EwMWMzMywKKwkweDdmYTJkNzQwLCAweDFmMzRlOTc0LCAweDFjNTgyM2IzLCAweDhmNTMzYTI4LCAweDA3OTY5Y2ZiLCAweDhlY2M3ZDJiLAorCTB4MDk3ZTQxYTgsIDB4YTAyOTM2YWMsIDB4ZTdmNWE3MDcsIDB4MDhmYTA3MmMsIDB4MDMxZTIzMmMsIDB4ODZjZjcxZDIsCisJMHg5ZGNmZTA0NSwgMHhhYzgwZjU2ZCwgMHhiMjI1ZjExMywgMHg5ZDc3Y2Q1MiwgMHgwNTUzOGIxMiwgMHgwZjE4MjI2ZiwKKwkweDBkMzM4ZTFiLCAweGU4MjFmOTZjLCAweGY0MjJjNmZmLCAweDhmZjkwYzliLCAweDhkZWEwOWYzLCAweGQ2NDM4ZGNiLAorCTB4ZGUyMTM2YWQsIDB4ZDA2OGZjNDUsIDB4MjU3NDExNDYsIDB4M2ZiMTkxZmEsIDB4N2E2NDY4OTIsIDB4NDA3Y2E0NjgsCisJMHgwNTRhNzNmZiwgMHhhMWViN2YxMSwgMHgzY2NhMmU5YywgMHg1ZmY4MjNkZSwgMHg0NTZjYTNjNCwgMHhjOGIwMWNiZSwKKwkweGJmMzk5YzJiLCAweDA0OWM0MzMyLCAweGIzNmM3N2ZjLCAweDAwZmQ4NDE2LCAweDE5NTk4ZGZhLCAweDY5NGZjYWRkLAorCTB4NTBlOTIwMjgsIDB4YWFhYjlmZmIsIDB4YmNjYTYyMzMsIDB4YzFmN2QwZmQsIDB4NWY1NzM3NTUsIDB4YTg3N2ZhOGIsCisJMHg3YWE2YzAxZSwgMHgyNmJkOTQ1OSwgMHhjMzU1ZTIwNSwgMHg4M2I1MzJmNSwgMHhmZjEyN2Q4ZCwgMHgxYmU2ZTJiZSwKKwkweDk0MWVhYWE4LCAweGVlN2ZmOGM0LCAweGQxMWY4MmY0LCAweGM1ZTM1NDQ0LCAweGY1YzcyN2MyLCAweDViZmRhM2FmLAorCTB4MzgzZWRlMTUsIDB4ZWZlODI2ZWUsIDB4N2U1MTEyYTksIDB4ZTE0YmQzYTAsIDB4Zjc1M2FiNWIsIDB4ZGZlNTI4ODcsCisJMHhmNzhjNDE0MywgMHhhZjBlNTM3ZiwgMHg2YzMxOWQ1YSwgMHhlMTdiNTAxZiwgMHhjMzY1NDljZiwgMHhlZmEzYzI3NiwKKwkweDQ5NWQ3NmQ1LCAweDNmZDhiMmM3LCAweDE1ZmU4M2Q1LCAweDkyZTAzZWZhLCAweGU3ODkwZWQwLCAweGY0OTcwNGQ3LAorCTB4NjU2YmVjZDUsIDB4ZTA5ZDdkODQsIDB4NzRmNWY2NjIsIDB4MmZiYTQ5NjAsIDB4NTgxZGY5NDEsIDB4ZGY2MDIzZTYsCisJMHhlOWM0YmI1MiwgMHhlM2U0YmI0MiwgMHhmZDY4MDc1MywgMHgxZjlmNTliOSwgMHhiYjQwYTcxZSwgMHhiZWMxZTY3YiwKKwkweDQ2NTE3MDJhLCAweGE5ZDgxYmY5LCAweDZmOTQ0OTBkLCAweGFlY2NmZDhjLCAweGUzMWNmYWE2LCAweDk2N2U4MjA1LAorCTB4MzhmZDM5ZDgsIDB4OTdmYzA0ODIsIDB4MzJhNGZiZGQsIDB4NWE0Mjc3YTAsIDB4NmJhMzZlYjMsIDB4Mzc5NzAzZjksCisJMHhmYmUxYzcxMywgMHg5Nzc5ZjhjZCwgMHgyMDVmOThiYiwgMHhhMWI1NTg1MCwgMHgyNmRmZmEwMCwgMHg1NjE3YjAxMSwKKwkweDU5NGYxZTE1LCAweDYzYTlmYjgwLCAweGJlNjMwYjI5LCAweDBhN2JlYzZiLCAweDUzYjhkOWYxLCAweGNiMWUyYTM3LAorCTB4NzgwNGUxYTksIDB4NDVmOTc5NmMsIDB4MzM4ZGM4MmYsIDB4NDI2NTA5MjEsIDB4MDRlYTFjODMsIDB4NDFhMWI2YmIsCisJMHgyOTIxMTYwMywgMHgwM2JmY2QwZCwgMHhmNTczMWZlMywgMHg1ZjlkM2M2NCwgMHg4MTc3ZDcwNiwgMHhhNzA2Yjc5ZCwKKwkweGJmZTliY2MyLCAweGQxYjU3ZDEyLCAweGM0ZTUwOGI3LCAweDJiNDZiOWM2LCAweGViMGE5MWM2LCAweGQ4M2M0MWVlLAorCTB4YzNjMDVlY2QsIDB4MzRhYWMyYWEsIDB4ZTY2NWE3MTgsIDB4NGRjNjNiNzQsIDB4ZjUwNzNkYTgsIDB4MDc3ZTBmMmQsCisJMHhhZTAyNDVmZCwgMHgxYWJhN2Q1NSwgMHhhOWNhNzdiMCwgMHgwYTBiZjc1ZCwgMHg0NjczYTY3NywgMHhmNWYyODc4ZCwKKwkweGUyZWVlZDM4LCAweDU3MTBhY2ZiLCAweGZmOGU1ZDFmLCAweDE3NDY2NGJmLCAweGY4MmY5MjFkLCAweDhmZjQ1MmVkLAorCTB4Njc3ZjU4OTIsIDB4MWZiMzFmNzYsIDB4NTVlOTcxNmYsIDB4NWM1YmYxZmUsIDB4MzZiZGFlY2MsIDB4ZTQwNjk5MTgsCisJMHhiMDFlNWZiMiwgMHgyMDFkNWQ4MCwgMHg1ZjYwNGZkZSwgMHg2NTU2N2M0ZCwgMHg5MzEzYWUzYiwgMHgwNTM2YWU1ZiwKKwkweGQ3NDY2NmZkLCAweDQyNTc2M2MwLCAweGVlMzJiNWZkLCAweGYwM2M4ODY3LCAweDVjZjcxODYzLCAweDhhYjNjYmE3LAorCTB4ZjI4MDNlNzAsIDB4OTAyMTQ1ODMsIDB4ZmU1Y2ZiYzcsIDB4OTZmYWMyZWYsIDB4ZGNmNTdiNzMsIDB4ODMxNjM3Y2IsCisJMHg1ZmQ4NTE3ZiwgMHg1MDk5Y2Y5ZCwgMHg5NGRhNzY2ZiwgMHg0ZTQwNmIyNywgMHg3OTY2NDlmZSwgMHg2NDY4YzYwMywKKwkweGM5NjdlZDFhLCAweGI3MWM0ZWU3LCAweDg0ZWExNGQzLCAweDY4ZjYwZmY1LCAweGVhYzliZWIxLCAweGRiZjQwNDVmLAorCTB4MjlmYWViNzgsIDB4MGQ2MDg3OTgsIDB4ZDUxZTgwMTUsIDB4ZDAwOGJhYjksIDB4YTBiZWRkMzEsIDB4ZjJlOGM1MWYsCisJMHg0ZjIzODgxMSwgMHgyNTk3Y2UwYiwgMHg3NjcxMTdkMCwgMHg2M2YwMzRjZCwgMHg4NWM1YmVlMSwgMHhjZTJhZGM3ZSwKKwkweDE1MjllMzFmLCAweDJiMjIzMjljLCAweDM0OTE3Yzc0LCAweGY5YmNlNzZjLCAweGJjMzJkOWU3LCAweGM2OGZmNjE0LAorCTB4ZDVlZWZjYzgsIDB4ZWMwNGNkNzMsIDB4ZjQ0OGYyNWMsIDB4ZjhmYzA2YjAsIDB4N2IwMTA4YWUsIDB4YzI1N2I5YjgsCisJMHg1ZjBiOWE3MSwgMHhlNWZlYzNkMCwgMHhkZmM2NWVlZSwgMHhhMGRmYmUwMSwgMHg3OGMyY2JmOCwgMHhlZGMyY2I5NCwKKwkweDY3NDYwZTgxLCAweDFjNzg3MjI0LCAweGI2NzlmOWUwLCAweDc2ZDA4NDllLCAweDQyNTc3ZTMxLCAweGMwNzkzMzk2LAorCTB4ZjhmM2QzZmIsIDB4MzdmNzMzNDMsIDB4ZjU4ODRkNTEsIDB4Y2VjMjVjYWIsIDB4NWI4ZWExNTgsIDB4NDlkNzcxZjAsCisJMHhmMDE2YWYxMSwgMHhmY2E5MmM1YSwgMHhjM2Q5ZTJlNCwgMHgxODNjNGZiZiwgMHgxYmZjMGU5ZCwgMHg3ZTA1ZjRhNSwKKwkweGNjZDIwZGE3LCAweGYzYTc1ZTdiLCAweGM5MzY1MGRiLCAweDliOThhNjAzLCAweDA0YjY5MzkyLCAweGE0NTI1M2RlLAorCTB4ZmJlZDJmNzgsIDB4MGRkMDNhNjQsIDB4YWZjODIxYTksIDB4ZGE5NTdkMmQsIDB4ZWI4YjJiNjYsIDB4YTU4YzVlNjAsCisJMHg1M2VhMDdiNSwgMHhmZDQ0MmFlZiwgMHg1OTkzNzEwYywgMHgxY2IzZmRmNCwgMHhlNjU2NjlhZiwgMHgwOGFmNzNjNywKKwkweDM0MWM0MGU2LCAweDllZWZhMGYxLCAweDJiZmM2MWQ3LCAweDRkODdlOGNjLCAweDczNjM2YmE1LCAweGY4MjU3M2UyLAorCTB4ZjhhNGRjYmQsIDB4Nzc2N2U4MDAsIDB4ZjAwMjUyYWQsIDB4YzQxZjc4ODgsIDB4MGQxNjY3MGIsIDB4M2QzOGUzZTcsCisJMHg3ZDJiNzc5MiwgMHg5ODM5NzZlZSwgMHg2YTQwY2VkZiwgMHgxZjc4NWUwMCwgMHgxZmM3MGViMiwgMHhlMzA3OWZjMSwKKwkweDllMGY3YzQyLCAweDMyYzJkMmU3LCAweGMwYzlmZmZhLCAweGVmYjhlZDk2LCAweDQ4M2U2MDM3LCAweGVmMWJkZjZkLAorCTB4MzVhZGZlODAsIDB4Yzc4YzVlOTIsIDB4ZDUyZGQ5YzYsIDB4MDJiZWI3ODksIDB4ZjY3ODNmZjQsIDB4MDE4Nzk2ZDQsCisJMHg3YWY2ZGJhZSwgMHhjZTI1ZWYzMCwgMHg5YmZlYjkxZSwgMHhiMzNmM2VjYywgMHgzZjAwYTJkZCwgMHg5YjcyZTU2YywKKwkweDI3Yzg4ZmRhLCAweDNmNmM1ZGMxLCAweDFlNDc2ZjE5LCAweDI3ZjdhOTc1LCAweGRkYWZlNTQzLCAweDA1ZjA2NDhlLAorCTB4MGIzY2IzYjcsIDB4N2MwM2RmMjEsIDB4NzBkODM3ZmYsIDB4ZDdmNDAxM2UsIDB4MTNjMTBkYmYsIDB4OGRiMjBmOTcsCisJMHg4ZmY0ODNlNywgMHhlNmYyMGY5ZSwgMHhlODEwNGIwZSwgMHgwOWFmN2NlMSwgMHg4ZjMyOTJmZCwgMHg0NWI1OWQ3YiwKKwkweDc1MjQwMDFmLCAweDAxY2YwZTM4LCAweDcyNTgxYjc5LCAweGNhMWFlN2U2LCAweDhiMGY3MjdmLCAweDhmMTJjOTIzLAorCTB4NGI0YWZkMzMsIDB4NmJjYzVjNTgsIDB4ODA4YmZmMDcsIDB4Nzc0Yzc2NWIsIDB4M2U0MDhiN2IsIDB4NzEzNzc5YjIsCisJMHhiMzkzNTFiZiwgMHgyZWYxNjE0MCwgMHg5NGQ0Mzc5NiwgMHg3YjAwMmUxMCwgMHg4N2FlNTVlYSwgMHg1ZTJjY2M5YSwKKwkweDg3ZDBlODM1LCAweDI2YTM1ZDYxLCAweDE4NWQxZmZmLCAweDkzZGY2MmQ3LCAweGQ4OTQxYTVmLCAweDg4NGY1NmI4LAorCTB4MGEyNzc1ZDksIDB4OWQzZDYxMzUsIDB4MDdkODBmNjcsIDB4NTlhYjZlYjAsIDB4OWYyODZiN2MsIDB4YzdhMWJmNjAsCisJMHg1ODkwZTJjMCwgMHg0MWNjZWMxZSwgMHhlMjJmNTkzOSwgMHgzZjk5ZmI1NiwgMHhhN2M3OWVhZSwgMHhmNDVhY2M0ZSwKKwkweDc0NWNhNDBjLCAweGIwMzVhZDQ4LCAweGFhYjBiYjNmLCAweDBmZThmZDEyLCAweDlmMTMzOTNjLCAweDdlZDUyYmY1LAorCTB4YTdlMDQ1ZmYsIDB4MjM4ZTFiY2YsIDB4MWQ3YmZmMGIsIDB4YmQ5OWU4ZjEsIDB4ZDQ0N2VjM2MsIDB4NTk0NWZiNTAsCisJMHhiZTgxNTcyOSwgMHgxNWY2MjFjYywgMHgyMDk1ZmYyMCwgMHhlOWFiYWQ1ZCwgMHhjMTNlODNiMywgMHgxMjM0OTc2OCwKKwkweGE3NzIzOWQ4LCAweGZiZWIwY2NiLCAweGY1MDY4NzY4LCAweGUzNDNiMDU0LCAweGNmMDI3Njg1LCAweDhmY2NjOTM5LAorCTB4ZjMzMjRkNzQsIDB4MGFhNWQwNmIsIDB4ZDllMjM4YzEsIDB4MDc3MWUzYTEsIDB4YTI3MmRmZGUsIDB4MjM1M2MzMDksCisJMHg3NmEzZTdiMSwgMHg3ZDM0NjZiOSwgMHhkMGViZmEyZCwgMHg0ZmMxMWFiNSwgMHhhMGQ0Y2QxNywgMHhkZTgyZmJkZiwKKwkweGM2ZmQxNzNiLCAweDc5MDIwMmNlLCAweGQ2YjYxZDU0LCAweDFlYWMzNTk1LCAweDI5ODJlNzc5LCAweGViZmFjM2VhLAorCTB4MTI0ODY2NjQsIDB4MzNmMjA5YzUsIDB4Y2JlNzk5MzUsIDB4NjE2ZGUxYzUsIDB4MWYxY2JhOTcsIDB4YTkwYzY5OGYsCisJMHgzZmM0ZjVjYiwgMHhjNThmMmQyMSwgMHhhN2RmNjIwZiwgMHg3NWY5MzMyNiwgMHhjNzBlNTU2MSwgMHhlM2YzMDdiNywKKwkweDY3OTdmY2M0LCAweDMyNjliYzMwLCAweGIzMzczM2Q5LCAweDQxZDAyZTZhLCAweDczOTdjNDJlLCAweGFiZmNjOWUwLAorCTB4N2YwODI2NzQsIDB4MDkyZTc1ZWUsIDB4ZGUwZTIzZTksIDB4ODBkYTMwMGUsIDB4M2M1OTNhYmUsIDB4M2Y4NTZmZjQsCisJMHhlNGNhZWUxZSwgMHhiYzFmYWUxNCwgMHhkNjVmODg2ZSwgMHg4ZjE4ZjVkYiwgMHg0OTNmNWNiZSwgMHgwZTVhYjI1ZCwKKwkweGZlYmY5NTBkLCAweDI3ZGIyY2ZkLCAweDllNzk2YTc1LCAweDUwZTUxZDhkLCAweGU1Y2Q5ZDlkLCAweDExZDllNDg0LAorCTB4NmE1NmY3ODYsIDB4M2EzY2MwMmYsIDB4M2Y2MDI1YjUsIDB4OGFkNWJiNGMsIDB4NmZkOTY4ZjMsIDB4ZjM3MDNmNDIsCisJMHhkMDJjODFiMiwgMHgwMzU1MmRlMywgMHg4OWI3MTAwNSwgMHgyYjQwMmZjNywgMHhkYjQ1ZjkwYiwgMHhmZWU4YjlkNSwKKwkweGQ4ODRlYzAzLCAweDRiNWYzYzc2LCAweGZlZjU2NzFkLCAweGY2MGNiOTIwLCAweGJmNzYyNzM5LCAweGI3NmFmYTAxLAorCTB4ZmQxNWY1MDksIDB4ZjAwNjAzYmYsIDB4ODM5Y2JjYjMsIDB4MzY4N2NjZjYsIDB4MGJiNDFiN2YsIDB4OWU1YmMzOTgsCisJMHg4NWJiMDFjZCwgMHhmZGNkNGRkOSwgMHgwYmIwMWU4NiwgMHhlMjYyM2FlYiwgMHhkNTlmZjA3YywgMHg1OTFmYjhlYSwKKwkweDNiZmY0NGU5LCAweDZmYmY1NmU5LCAweGRkZjcxNGQ4LCAweDE3NjAzODg4LCAweGJkM2FmM2FlLCAweDNiZjAyMjdmLAorCTB4N2Y5ODNiZDUsIDB4ODM1MWI2NzAsIDB4NWFmNTAzNzksIDB4Yjc5MDIyY2YsIDB4N2I2YTRkNjcsIDB4YWQ4ZGFjZmMsCisJMHg3NWExOTZkNywgMHhiNWJkYTBmNiwgMHhmNjc1Y2M2NSwgMHhkNzNhYzAxNCwgMHhiNjNmODg2YiwgMHg2NzU4NjY5ZiwKKwkweDdjNGRiZWJhLCAweDc4YmVjZjlkLCAweGYzYWMwMTc1LCAweDJlYWZiYmM3LCAweGE3NWU3NTgwLCAweGRmMDJmMmViLAorCTB4NWJmYzM5YjQsIDB4MjdiZjY5OTMsIDB4M2RhMWYwNmYsIDB4MmY1OGYyMjUsIDB4MjRmNzFlOTcsIDB4NDMyYmZkYWIsCisJMHhmZjIxZmZlNSwgMHgzMGZhNThjYSwgMHg1YTg3MDQzYywgMHg0YWY0YmExZiwgMHgzYTgzYzgwNiwgMHhkNWJmZTFhMywKKwkweGFhMzdmMDhiLCAweDQwNjhjZjFmLCAweDNmZmVjNzdmLCAweDA3NjZiYTdmLCAweDJkN2U4MWM4LCAweGJmYTIyM2RhLAorCTB4MGYzZmIyZmQsIDB4ZWZmZGExZWMsIDB4Njk0MTNkYjgsIDB4YjkxYmZlZWMsIDB4MjQ2ZGQ4NWYsIDB4ODhhYmYwNDEsCisJMHgyN2IwODA3ZCwgMHg1YmYxZTVlMywgMHgyNTFmM2U3YywgMHhiYjAwNmY3YiwgMHg4ZGZhY2JlNiwgMHg2MzNiZjgxYiwKKwkweGU3NjY1M2U4LCAweGNjM2M5MzZlLCAweDdlOGJkYzZmLCAweGYzN2Q5NmU0LCAweDNlMjdlMGVkLCAweGUzN2U2MjFkLAorCTB4ZDE4YjE3OTYsIDB4N2ExOGRjNmYsIDB4NjU3OTBjMmQsIDB4YzNiMjVmYTQsIDB4ZGI3MWEzZmUsIDB4MDdjODA0YjEsCisJMHhiYTVjZmIxMCwgMHg4YzkzM2RhZiwgMHhlZmRlYThmNCwgMHg0ODlkMGU5ZSwgMHgwYTAxZmM4MCwgMHg3MWU4MjU3NywKKwkweDA3YWEyYjhiLCAweGZiYTE2ZmJhLCAweDZjMjNjODNkLCAweGExODdhMzkxLCAweGMxMTcxNmRmLCAweDNlZDI5NzNjLAorCTB4YzQ0ZmZlZjUsIDB4ZjRmYTM3NzksIDB4ZjYzNzc3MjgsIDB4ZDc5MDIxNGIsIDB4NGU3ZjdhMjksIDB4OTIzNWU4MDYsCisJMHgyMDc4Yzc2MSwgMHhjOThiYjNlNywgMHhiMjk0ZDRkZSwgMHhmN2JhZjhkOCwgMHhlMWU0ZTRmMywgMHgwZDgxYjA3YywKKwkweDAzYmY0ODg5LCAweDgzYjVlMjNhLCAweGUzNjBkYjNjLCAweGY5NDY0Y2YyLCAweDhlNGRjN2Y2LCAweDYzMGZjYjEwLAorCTB4NjIxOGZmZWQsIDB4YzhhMzQyNzYsIDB4NTg0OTkzMGIsIDB4NjhiNWViYTYsIDB4NTg1ZGY3YjYsIDB4ZTFmNzkwNmYsCisJMHg1YjFmNzkzOCwgMHhiYmZiNzExNiwgMHg1MmY1MTg0OSwgMHhjYTE4MTkzMywgMHgxNzZkOGIwZiwgMHg3ODg3ZDcxZiwKKwkweGQyMWZhYWI4LCAweDFmODBhYzVhLCAweDA3YWI0ZWVjLCAweGI4Zjg4MWUwLCAweGY2YzgzZWJhLCAweDk2MWY5NGViLAorCTB4YWZkMzBjOTYsIDB4YmY0MTA3NTgsIDB4MWQwZmRjMmQsIDB4MDhmZTM4NjgsIDB4NGZhMDZmZDAsIDB4ZDc3ZDgzYjIsCisJMHhkYmY0NjFlNCwgMHg5MDViZjc0NCwgMHhlZmNmMWI0NywgMHgzNzlkNTdhNCwgMHg5N2ZmMTYzYSwgMHhkMWY1YThhNiwKKwkweGU0ZWZmOTUwLCAweDQ1M2ViZDVmLCAweGZlNjJmN2NkLCAweDM0M2Y2ZmMyLCAweGYxODk3ZWNmLCAweGUyYmNkYzY1LAorCTB4ZmVmMWE5ZjcsIDB4YmNjZmIxNzYsIDB4MjczODc5NWMsIDB4ODcwZjJkNDUsIDB4Nzk2NzdmY2EsIDB4MmViNDM3NTgsCisJMHgxZDUwZjJmMSwgMHhlNTliZjhjZiwgMHg1YzcwZmZlMSwgMHg0ZjdkOTllMywgMHgwM2JlYzAyNywgMHhhN2Q4NzhlYywKKwkweDYzYWVkY2FjLCAweGZkMTQxM2Y5LCAweGU5ZTJmMWIxLCAweGM1OTdhYjVhLCAweDVlYTJiNTRmLCAweGE2NTc4NzFkLAorCTB4ZTMzYzM4ZjMsIDB4ZDQ1ZWQ3ZWIsIDB4ZjMzNWJhZTIsIDB4M2VmMzcxMzgsIDB4MzY5YTA3OWIsIDB4OWM2MzE3NTgsCisJMHhiYTdlM2UzNiwgMHgwZTllZWM4NCwgMHg0NzFmMTU0YiwgMHhjZTdlMDI2ZCwgMHg3NTNjNzRiYiwgMHg4ZjhiMGE3NSwKKwkweDIwNzI1ODUyLCAweDZmM2UyMTZmLCAweGE3ZWIzNWViLCAweDc1OThmZTQ5LCAweDFiYTIyYWFmLCAweGRiZTg1MTgyLAorCTB4MzM4OTA3MjgsIDB4MTRjNmZkZTYsIDB4YzZiZjU3NjYsIDB4N2FkYzhiZjMsIDB4YWQ2MDhlNzYsIDB4ZmQ4NWUyY2QsCisJMHhmMmMzNWI4YywgMHhmMmUwN2U5ZiwgMHgxOGJjODI2ZCwgMHhmYWYxYzJhMywgMHg0MzQ0ZWRmMiwgMHhhZThjZjJmMSwKKwkweGIwNGFlNTE3LCAweDM5MDFlYWQ5LCAweGEyMzdmYzI4LCAweDVlM2M4YmZmLCAweDNmZmFkOTcxLCAweGZjZjdkZThlLAorCTB4M2M3YmQzMGYsIDB4ZjE4YmY2N2UsIDB4ZGRiOGQ2ZmUsIDB4MTUxYjhhN2EsIDB4ZTNhNDEwNWYsIDB4Y2E1ZjEwMjMsCisJMHg2M2JmNDkxOSwgMHgxZDE2MzNmNSwgMHgxZGYxNGQxZiwgMHhmZTc2NjE0OSwgMHhiODU3Y2MxNCwgMHgyOTYzMzk0YywKKwkweDNmMDA5ZThkLCAweDUwNjNkOTExLCAweDdlMDlhZmMwLCAweGFiOGZkNDEyLCAweGFhM2U3OGQzLCAweGU2MjY3Y2E3LAorCTB4MjU3M2IzNjksIDB4NThjZTFjZTIsIDB4NDMwN2U0NzYsIDB4YzhlY2MzZWIsIDB4OWY1Y2M2MGYsIDB4ZGU0NzY3MmYsCisJMHgwODdkZjBlZSwgMHhkMmIyNzY3NCwgMHgxZTAxZTc4YiwgMHg2MWY4NTFiNSwgMHg2MTljZjg3ZiwgMHhlMjJlNzNkNCwKKwkweGZjYTVjNjNjLCAweGQxYzQ1ZjJkLCAweDRiZmYxN2Q1LCAweDNhOTJkNDcyLCAweDc1Zjk1ZDk2LCAweDEzY2ZkMWNiLAorCTB4NzYzYTdmYzAsIDB4ZmY5ZTQxM2YsIDB4NDViYzQxMTksIDB4NmI2NDQ5ZjcsIDB4MTAzYjVmOGMsIDB4MTk3YmY5NjEsCisJMHhmZWYxNWUxYywgMHhhMWJlZjgzZiwgMHg5OTliZDUyMSwgMHhmYzdmZGY0YSwgMHgxMjQ4ZDFhZSwgMHg2NTJlOWVhOSwKKwkweDY3YzViMTcyLCAweDRiNDJiOGM1LCAweDY5N2ZjYjJmLCAweDhlNTA0NjU5LCAweGI0ZGY4MGI3LCAweDMzODlmYzA4LAorCTB4NGY3ZGQ4MDksIDB4MjAxM2ZkM2EsIDB4ZjdkMWVlOGYsIDB4MjI2ZDQxYWMsIDB4MTE2N2RiZjgsIDB4YmRjZWYzYjAsCisJMHg5YzMzY2FjYiwgMHg2Nzk4YzlmZSwgMHhlMzAwNmNiNywgMHhjZWIzZGQxOCwgMHhmOTU2MWU2MCwgMHg1MjNlOWYxNywKKwkweGEyZjA4YTUzLCAweDUwNjVjMTNmLCAweDNkYjk2NzlmLCAweGYxMzNjOTk1LCAweDZmODQzZDljLCAweDNmZjNmYTJmLAorCTB4ZGFmOTYwNmUsIDB4MGVkNzk3MDEsIDB4MGZlMTA5N2UsIDB4OGMxMTI4YjcsIDB4NjFlY2I0MmIsIDB4OTZiOTViYzYsCisJMHgzMGZjODdjZCwgMHg2NWE5ZTkwMywgMHhmODMxNjU0ZiwgMHhhOWFmNDk0ZCwgMHhmMmRkZWMxOCwgMHhkZjcxNWJkZiwKKwkweGU5ODNmMWY3LCAweGNmYjEyNzk4LCAweDdjMDJhZmU1LCAweDM3NDM0YWQ4LCAweDRkOWE3ZDgxLCAweGY3YmIwMWM3LAorCTB4MTUzN2RkZTMsIDB4ZmU0MmRjMDMsIDB4MzliZjAzYWQsIDB4NGQ5ZDdmMWQsIDB4NDYyNzE3ZWQsIDB4NjRiZjc3OTYsCisJMHgzM2VlMjY0NywgMHg1YWZlYWM5YiwgMHgxMzNhZmY5OCwgMHg5ZGI4MjM4MywgMHhmZWUxNGY5ZiwgMHgxN2ZlNzhmMiwKKwkweGQ1YWE5ZjdjLCAweGRmYTkzOGUwLCAweDVjOWM2MjM1LCAweDNhNzU4NWM4LCAweDBkZTYzN2UyLCAweDllMTI5M2NiLAorCTB4ZjE3MDE4NjcsIDB4OTlmZWM3M2MsIDB4OTc4NTRmMmMsIDB4YmU3NTJlYWQsIDB4MzdjOTQ3ZTcsIDB4MjUzYzAwOTQsCisJMHg4YjU3ZjJhOSwgMHhlNDQ3NTk2NywgMHhiMmE0OTQwYiwgMHg1Y2VhOTY3OCwgMHhiMzIyZTVhMiwgMHg3YWVkNzNhNywKKwkweDRhZGIyN2E0LCAweDk0NTRlMmMyLCAweGJmYWVjMDllLCAweDA2OTkxYTM2LCAweGJiZjJiY2U3LCAweDllMDJkN2MzLAorCTB4MjBkNDVmZjcsIDB4NDc5OWU0OWUsIDB4Mjg5MzNlMzAsIDB4NTZmMmYxYjEsIDB4MDA0ZTc0MGYsIDB4YWRmZDhjN2YsCisJMHg5NTQ5NjBlYiwgMHhhMDE1N2IyZSwgMHhlZmE3NDlmNCwgMHhmZmU0NTQ4MSwgMHhhZjE4NDJkNiwgMHgyYzc0NWZlYSwKKwkweDA1OWY3MmJmLCAweDU5ZGQwY2ZkLCAweDc5NWY5ODRkLCAweGVhODMzZGVlLCAweDMzZmM0ZTdjLCAweDNlNjA1NjQ4LAorCTB4NmZkZjZlNjUsIDB4ZGI2MDRlMzEsIDB4Mjc5YThkMjMsIDB4MTVhYTQ0ZmIsIDB4MTgyNWE2ZjksIDB4MzYzOThlOTksCisJMHhjZTUwYmFkNywgMHgxZjdlZmJjYSwgMHhlZTQzYmIwNCwgMHg5MTAyNDE5NCwgMHgwMzU3OWQwZSwgMHhjYjgyZDNlNywKKwkweGM3ZjVmYTA5LCAweGIwMzVkYjc3LCAweDNmM2NkOTVlLCAweDdmZmY3MDY2LCAweGJlZTNmMTRlLCAweDQyMDVjNDQ1LAorCTB4Mzc0OWJmMmMsIDB4YzdlYzA4ZjAsIDB4ZGYwM2U1ZTQsIDB4ZWM3YWMyMGMsIDB4YzA1YTY4NzEsIDB4YjY4YmFhN2YsCisJMHg5ZjY1ZGZhMCwgMHhkOWFjZmQwNSwgMHhiZTJiNzk3ZCwgMHgyYmQ5Y2I0MSwgMHgxYjA3MThlZCwgMHg2Y2VlZTU3YywKKwkweGYzYTdlN2NjLCAweDNjY2EzZjFjLCAweGY5NjU0YTFmLCAweDhiM2VmMjQ4LCAweGZjOTlmNDA2LCAweGE4YzBmMTA0LAorCTB4MGFhNTIzYjIsIDB4OTY4YTdlZTEsIDB4MDdkZjNmNjksIDB4OGUxZTRhN2EsIDB4MGEzZjgyOWIsIDB4YWE0MzU0ZjQsCisJMHhjZGQwMDc3ZiwgMHhhNWE0YjlkMCwgMHg4OTJlNzY2NiwgMHgyZGI1YTc5ZiwgMHg5YzE3NmY3ZCwgMHhmZGMyZDlmNywKKwkweDRmZjcwN2I5LCAweGJmZmU4NTllLCAweDc1ODI1OTRlLCAweGY5NjBlMGI4LCAweGIyYTQyZjk1LCAweGZjNDhlMjc4LAorCTB4ZDYzY2M0MWYsIDB4NjViZjdkZGMsIDB4MDJlMjhkN2EsIDB4OGM3NTk3ZmEsIDB4NTc0ZWU0NWUsIDB4NWYxOWY4MGYsCisJMHhkZTYzZjA0OSwgMHg2MTFkNzVlZSwgMHhlY2NkYzYyZCwgMHhhMzVjN2YyNywgMHhkNjc3ZWNjNCwgMHhiMmQzM2QzMywKKwkweGUzY2ZlZDkzLCAweGQyOTczN2Y3LCAweDkyMWViZjJmLCAweDBjYmY0YzMzLCAweDc2NGVmZjk1LCAweGY0ZTJlZmNiLAorCTB4NmZiY2RmY2EsIDB4NWVmZGVhMjEsIDB4YmYxMmZkYmMsIDB4OGY2MTFiYmYsIDB4OTYzN2Y1YzcsIDB4NTBmMjIzMWQsCisJMHg2MWM3ODZhYSwgMHhkODRkYjRmNiwgMHg5ZTU1NDE0OSwgMHg5Zjk1OTU0ZSwgMHhmYmFhMzQzYiwgMHg0NzY0OWY1ZiwKKwkweDNiNzkxMDdhLCAweDcyY2FlZDI5LCAweGZlOGZkYmM4LCAweDRlZGZhMDg4LCAweDNjODkxNWU0LCAweGNiMTU2MGEyLAorCTB4OGM2YTA5ZjcsIDB4NGRkMTJlNzgsIDB4Njg3ZjMwYmEsIDB4MTI0YjA5MWMsIDB4ZjAwNmQ3ZmEsIDB4ZTQyYTZkZmMsCisJMHg0ZmVmZDExMSwgMHhmZjYyZTZhNCwgMHhhNTY3ODk5YiwgMHgyMmE2ZTUxNiwgMHhjODI2ZmMwMSwgMHhiODAyNDkzZiwKKwkweGMxMTYxYjQzLCAweDcxNTliNzc4LCAweDlmZTQxMzNjLCAweDAzM2VlMTI0LCAweGM3ZGQzOWY5LCAweDM1YTc1NmYyLAorCTB4M2E0M2I4YjAsIDB4NGU1MGNmZDUsIDB4Njk3NDY3Y2YsIDB4M2NjN2FiOWEsIDB4MjI1NzkxNTYsIDB4NWUwNDRmZjIsCisJMHhkM2JlMzhhYSwgMHgwMWNhMmMyNywgMHg1NGYyMjhiOSwgMHhlNTNkOTlkNiwgMHgzOWMxMTc2MCwgMHgxY2JmMzg2OCwKKwkweGJjZjMzNDZjLCAweDc3NmZkNjEzLCAweDRmOWUyZTYzLCAweDI5NzliMmZlLCAweGY5MTY3OGYxLCAweDdmNDRmYTI5LAorCTB4ZTQ2Y2JiYTYsIDB4Mzc0MTY3MzksIDB4NzA4OWViMzEsIDB4ZWNjN2RjNmQsIDB4M2QwNmFhZmMsIDB4NzFiMDYzY2UsCisJMHgwNzJiZmEwNiwgMHhlYzA0MzUxYiwgMHgwMzdlYWE4MSwgMHhmMWI4YzNhMywgMHg5M2Q1Y2UzNiwgMHg4NzJiZjQzMCwKKwkweDA1NGYyMDRjLCAweGNlY2E1YzNkLCAweDA4NWJlYmE1LCAweDZkODNlMGZlLCAweDUyNGVmMzNiLCAweGQ2ZDQzZmRlLAorCTB4OTM0MWNmOGIsIDB4MTJiZGFiZDQsIDB4MDNjZWExY2YsIDB4YjQ4ZGY1YzksIDB4MWFmOTVhZmMsIDB4NjY4OWI3YzgsCisJMHg2YTg0OTQ0OSwgMHg5NmZhYWZkMywgMHg2MGM0ZjU0YywgMHgyODdkZjQ3MiwgMHg3YmUxYmVkZiwgMHhiYTNlM2NhYywKKwkweDliZWRhMjQ1LCAweGVkNjIzZWQzLCAweGE5ZDMzNjgxLCAweGVmZmY1ZWQ4LCAweDU3ZWI0MWI1LCAweDI2N2Y3ZmQwLAorCTB4MzUxY2Y5ZjEsIDB4ZWJmNDY0ZWUsIDB4M2Y0MTEyM2MsIDB4YTU3ZmQ3MTIsIDB4YWRiYTNlNGMsIDB4ZGM5ZmI0N2EsCisJMHg1NDk1MWYzYywgMHg4ODU0ZmNmMywgMHg3YjcyZDBmOCwgMHhlZmM2MzE1YSwgMHgxM2Q5NDRhZCwgMHgwMzBjZmE4MSwKKwkweGUzMDgyN2IzLCAweGNjZjFmNjg3LCAweGY0ZTQ2ZDZmLCAweGJmODQzMjQwLCAweGYyMDgyMDZhLCAweDgxYzczZGFlLAorCTB4ZTdjOTBmZGYsIDB4ZjMxMDg2M2QsIDB4OGZmMWIxOWIsIDB4OWUwNTc4YmUsIDB4YjY3OTEyNGIsIDB4NjczM2Q4ODQsCisJMHgzNmY5ODE1ZiwgMHgxMzVhZjJhYSwgMHhkYjI5YTczZiwgMHg3YmJjZTEzMywgMHhjMWRiOGViYiwgMHhlNmM0N2NiYywKKwkweDA0ZjM4ODVmLCAweGRkZjZhNGJlLCAweDUwN2UxYmQxLCAweDc2NzRmYzA0LCAweDQxZjMwZmVmLCAweGE3YThkZGNlLAorCTB4ZTQ1MTg0ZmIsIDB4OTMzYTU5NWEsIDB4ZWIzYTgzNmIsIDB4Yjc3ZTg5NGEsIDB4MDE2ZmU2YzYsIDB4MzJjNzdjM2EsCisJMHgzMTFjM2E2ZiwgMHhhOTU0OWI5YSwgMHhjMWJjMDA3NywgMHhkNzgwYjRlNywgMHg4ZTI3NGU2NCwgMHg0NzNlMGNkOSwKKwkweDNjODI0ZmI1LCAweDFiMTM3NmQ0LCAweDdiMmZkOTM3LCAweDdmODQ1Y2YxLCAweDg1MWI3NGI2LCAweGYyNjI1ZGJiLAorCTB4ODg5NDdlOWIsIDB4OTJhMTU1NzYsIDB4MjZjODcxMDgsIDB4Y2I1NWVlN2UsIDB4Y2I5Njg4ZTUsIDB4MWI2ZTdmOTEsCisJMHhjMWE5OTdjOCwgMHgxM2VmNGQ3OCwgMHg3ZmU3YjA1YSwgMHhiZmUyZTNjYiwgMHg5ZjlmNTFjZCwgMHhiODMzNzFlOCwKKwkweDU2OTY3M2M1LCAweGNmZTgwMmI5LCAweDUyM2FhYmE1LCAweGFiNDBlOTRiLCAweGZkNzA4NGY3LCAweDM3MTg2ZDMyLAorCTB4NzcyYjYwM2UsIDB4YTVlZmQwMGYsIDB4NDI5NTFmZWMsIDB4ZTY3Yjc3M2UsIDB4YmUyMTRhOGYsIDB4ZGM3YTc1YTcsCisJMHg4ZjcyOThiZSwgMHgzNTdmZDE5YiwgMHg1OWJjMDNiNCwgMHhlZmMxNGI1YSwgMHg5N2Y1YjVmYiwgMHhmYTJiZmI0OCwKKwkweGY1MGRmZGYyLCAweDM1NzA2MDYzLCAweDcwNTlhMzE5LCAweDkzNTlmZTZlLCAweGZmYWMzYjdmLCAweDMwYzdmOTg1LAorCTB4ZmE0MGZjMmUsIDB4YWYyMWY3ZDEsIDB4ZDE4ZWE4ZTMsIDB4ZTc5MzMwNWQsIDB4NjllZTkzZTMsIDB4MGVlZTk0MDksCisJMHg1ZTc4MzllNywgMHgxZWJmOGIwYSwgMHhhOGZjYzA5ZSwgMHhmY2IxN2U1NCwgMHhlNjEyODlkMSwgMHg2NmNlZDYyMSwKKwkweDI2NmY2MmU3LCAweGZhMDE4ZTkxLCAweDY4NTkzYTNkLCAweDFjOGFmNGZkLCAweDc5NmI3ZmI0LCAweDc3ZjRjODllLAorCTB4N2ViMDA5N2MsIDB4Y2E4ZjZmZDMsIDB4YjJjN2Y3MjAsIDB4ZWI3NDZlZTcsIDB4M2UxODgxOTQsIDB4OTc1MTQ5YmUsCisJMHg5NzU0MmU2ZiwgMHg5NzUxZTViZiwgMHg5N2YxNWRiZiwgMHg5MzY1YjEwOSwgMHhlODEwN2JkOSwgMHhkZjg5NTVmNSwKKwkweGIxMGQ3MTQ3LCAweGE0YmE3ZjIzLCAweDkzNWRkODIwLCAweGU3ZTc0YTVmLCAweGU1M2U1OTg5LCAweGYxN2VmOTRmLAorCTB4ZjU4MjBhYTUsIDB4NWI4ZDNiMjksIDB4ZmRjZjUwOGQsIDB4M2Y1ZTVhZWYsIDB4ZDk4YzRkZDksIDB4ZWEwN2M0NGUsCisJMHhmM2M0YThlOSwgMHg5MzE4NWQzMiwgMHhiMWVmN2IyMiwgMHg2ZDM0M2YzMywgMHhlY2ZkYTdhYiwgMHgxZjIwYWY5ZCwKKwkweGU0MzU1OGE3LCAweGE1ZWJjMDliLCAweDA0YzNiNDQ2LCAweDI4OWJiNDVmLCAweDk2M2M1MzdkLCAweDgxOWEzMzhmLAorCTB4OWU3NWRiZGUsIDB4ZDY5N2QwZjUsIDB4MmY0MDUwNmMsIDB4YjExODI2NTcsIDB4YzgzZmVkNmYsIDB4OWI5NmQ3YTgsCisJMHhjYjRlYzQwYywgMHg2MzM3MWYwNywgMHgzZTI2NWNiOSwgMHgyMGExMjNjOCwgMHg1MWU3ODZjZSwgMHgwYWQ0Mjc5ZCwKKwkweDYwZWRhNWYzLCAweDE2MGVlZGJlLCAweGViOTZkNzU3LCAweDdlZDNjZjUxLCAweDNlMGY1ZDcxLCAweDljMTEwOWExLAorCTB4Zjk4Y2E1N2YsIDB4YzE2NjFjYTYsIDB4N2MyNDc0NzcsIDB4NmJlNzM0ZmYsIDB4NTE4NDg2YWQsIDB4N2JiM2E1OGUsCisJMHhmZWQxMGUzOSwgMHhiZjgzZGZhMSwgMHhkZmEwZjZkMiwgMHgxM2I5NTBhZSwgMHgyNzFiY2ZlYSwgMHhjMGE4YjllMCwKKwkweDU5MmY3OWQwLCAweGRhMTVjMDAzLCAweDY3ZTg3Y2I5LCAweDNmMDRmMmU3LCAweGE1NDJmOTBiLCAweDg1MmJiZTVlLAorCTB4ZjgxNDkwMzAsIDB4MDUzYjA1MGYsIDB4ZmI4MjA0ZWMsIDB4Y2NiNzExMDAsIDB4ZDk3YThhMzQsIDB4MGRhNmZkMGIsCisJMHhlMGU3NjdiNSwgMHg1Njk5Nzg1MiwgMHg2MDI1MzU4NSwgMHgyN2YxYmNhNywgMHhlNGIxYzNhMCwgMHg5MzFhNjE0NSwKKwkweGU0MjllMjEzLCAweGMzYzMxNmM1LCAweDE5YWY2YTQ3LCAweGVmMGEzZDZkLCAweDliMGNmMmM3LCAweDg0YzdhZDlkLAorCTB4YWQ0YmUwMGMsIDB4ZTgwNjQyNzksIDB4NDc4Nzc2Y2QsIDB4MGI5NGM1ZjEsIDB4YWU2YTc2ZTksIDB4ZGI0NWYwMTMsCisJMHgzNWFkZjJkMSwgMHgxOGU1ZjJjNywgMHhjNjk4NTRmZCwgMHhlNzZkMDBlNCwgMHgxZWYwYTI0ZCwgMHhjMDE5MjkzNCwKKwkweGRiOGNhM2JmLCAweDdjYjVjNmNjLCAweGU5YmFlM2JkLCAweDQxZGRiNGI4LCAweGI2OTcxZDFiLCAweDg0MzI2NmRiLAorCTB4OGRhMzA5MzUsIDB4NzhjMGExNWYsIDB4YTI5NzFhOTcsIDB4ODMzZjkxMWQsIDB4OTNhNTAzYWYsIDB4MGVjMWY4MjAsCisJMHhhZjQ4MzRkYSwgMHhmMmJlNzgzMywgMHgxZTM2NjRjMSwgMHhmZmU3NTQyOSwgMHhmOGU5OWJlNCwgMHhjZWE2NWY5OCwKKwkweGRhNTFiOWY3LCAweGZhN2EwMWQ0LCAweDU2YzI1MzY5LCAweDM4MzdjZmEwLCAweGZjYjYxY2RkLCAweDY5ZDgzZTQzLAorCTB4MzgyYmNjNmYsIDB4NzEyNjcyODQsIDB4ZDExMDA3NzksIDB4ZjI4YmQyMGMsIDB4MGJjMWM4NDYsIDB4YTFjYWM3NjksCisJMHg4ZGUxZTU0YywgMHgwZmRlNzQ2OSwgMHgwNzlkMWVlNCwgMHgzYzcyMWY5ZCwgMHhhNWY2OGY5ZCwgMHg1NjkzNWJkOSwKKwkweDQxN2UxMjM2LCAweGEwNmUwMjlmLCAweDIxOGJlMDUzLCAweDVmODM4ZDNhLCAweGE1YjkxYmQwLCAweDM3MjUxMzE3LAorCTB4OWUxNzNiNTMsIDB4YTQyNWVlYzIsIDB4MmJjNWU1OTUsIDB4YTNmM2MzOTksIDB4ZDhkZDNlNDQsIDB4MThkMWU2Y2EsCisJMHg3NDZmYjg0NCwgMHhlNmYzMThmYywgMHhmZmU3MThlZSwgMHhmNzM1YzAxZSwgMHhiZWYwNGZjYSwgMHgzZjllZTIyMiwKKwkweDE0NzdmNjAxLCAweGM5Njk3OWRlLCAweGM2ZjA3YmZmLCAweGNhOTdmOWRiLCAweGNmOGIxZjBmLCAweGFjZDJmOGM1LAorCTB4MWUxZjk4OWQsIDB4N2NjNTZkOTgsIDB4M2YzYzY5ZjEsIDB4YzFhMGQwMzYsIDB4MGZkZDAwYjgsIDB4ODVhMjNlZTIsCisJMHg5NzIwNDMxOCwgMHg1Y2JiNzJhNywgMHg0NTc4NWI5YywgMHhlMGQ2ZmU2MiwgMHg3ZDQ1MDY4YiwgMHhkZTdjNTEzZiwKKwkweGU5Nzk4MmI4LCAweGJmMmM2NWMxLCAweDZmN2VjODdjLCAweDFmN2VkMDU2LCAweDljZmM3M2QyLCAweDkzMzE3NzQ0LAorCTB4MjhmN2RkZWQsIDB4ZTY4OWZiZWEsIDB4NDRmZGY1MTMsIDB4NzEyMWVkMGIsIDB4MzI5NDhhNmYsIDB4ZGRkZmJmOWMsCisJMHhiYmZlOTA0MywgMHg5ZjU4Yjk2ZCwgMHg4OGZhNjVhZSwgMHhhM2U5ODM3YywgMHhiYWEyMWNlZSwgMHgzOTlkNjkxZiwKKwkweDk0ZjMxMTM0LCAweDQ2YzE1ZTc4LCAweDZmZjgzZmM4LCAweDlhN2UwYmYyLCAweGMyZmNhOTI2LCAweGM5YWZlNTQzLAorCTB4ZjBlNmRjMmYsIDB4NWIzYTAyZWYsIDB4OTJjZGU0NTgsIDB4ZWJkNjNkMjgsIDB4ZDI5ODdmOTksIDB4ODEwOGE2ZWIsCisJMHg3Y2Q2YzU3NCwgMHg0NGRkYTdkOCwgMHhlNGQyZGY1YSwgMHgwMmZlYmQyMSwgMHhhNTMyNzVlOSwgMHhiZDE1M2NkNywKKwkweDE1ZmM2MWVlLCAweGU4MmQyMTQ0LCAweDBiNGU4ODc1LCAweGZkMDBmM2UzLCAweDZlZGM2MGZiLCAweDViZWZlZjQ3LAorCTB4NmZkMzVmNjAsIDB4NjgzY2IwZjAsIDB4MmYxOWQ3OTYsIDB4NTllMDYyMWYsIDB4NWM3ODMzMjAsIDB4ZjNjMjJkNWEsCisJMHgwZjEzZjQzYSwgMHg0ZGYwZTVjZiwgMHgxMmE2OWQyYywgMHhmMTYzMWZjNiwgMHg4MjRjYWE0ZiwgMHhmZTYxOTJiNiwKKwkweDZmZmQ5OTMxLCAweDdjNDNiOGMxLCAweGNmZGIwOGY0LCAweDZiNWI4MDhlLCAweDczOWE3YTQ1LCAweDA1N2Y4YjA3LAorCTB4ODAyZWNjMmMsIDB4MWQxYTU4MzgsIDB4N2YxZjI2N2YsIDB4ZGFhZmE3NGUsIDB4NGE2NmVkMDEsIDB4ZmE2MTBmMGMsCisJMHgxNjdmODUwZiwgMHhkZmQ5OWZhZiwgMHhiMzcwNzk4YywgMHg2M2M3NzVhYSwgMHgyZjIxMjBlZCwgMHgyZTZkZGM0NSwKKwkweDdkYWI3ZjZmLCAweGQyZjIwZWE2LCAweGUzYWFkNzY3LCAweDY0ZWY3MzVkLCAweGIzMzliNmYxLCAweDI1Y2NmZGQ1LAorCTB4N2NjMTNmYWIsIDB4MDNhYWQyNGQsIDB4NTNiZGNkZmMsIDB4ZGE0OWZmNWQsIDB4MDI2YzljNTAsIDB4NzEwZWM5YzQsCisJMHhlNTIwZDAzZiwgMHhkN2EzZTAxMywgMHhiYTZmMTc5MywgMHg4NGY5ZDI4NywgMHg4MDk1MTQ5ZiwgMHg5NDg2ZjBkZiwKKwkweGQwNGY2ZGM2LCAweDI3MWJiM2YyLCAweDk0ZjVmOTYxLCAweDI4ZmY3ZWVmLCAweGMwMjk2ZmQ0LCAweGUyNWMzNTcyLAorCTB4ZTA1NmZiMDQsIDB4ODU2N2NhNDMsIDB4YzhjYzc3ZTUsIDB4YzI3ZDAwNDksIDB4ZTA4N2JkZmIsIDB4ZGZkOWI3N2IsCisJMHg3M2I2OTMzZCwgMHgzY2M1Yzk0ZiwgMHhkN2VlNmFkNiwgMHhlYWM4NWMxOCwgMHhjNmQyYmU2ZiwgMHg1MmVmOTU1MiwKKwkweDZkNWM1ZmQwLCAweDFkMzVmNzY2LCAweDA0YmI3ZTI5LCAweDczYWJhYWYyLCAweGQ1ZTRiOTc5LCAweDI0M2U1MDQ5LAorCTB4M2FmNzgyN2QsIDB4Y2FiNjZiOWMsIDB4ZTkyZDBlYjAsIDB4YjkzZWNmY2MsIDB4YTQ0ZjBhNTAsIDB4ZjI3NmE5NzgsCisJMHhiY2Q5OWJmZSwgMHg0YjllNGI2YSwgMHhhZWE5M2UwNywgMHhmNjRjZmQ2MiwgMHg0MWU2NzY1NCwgMHgyYzc5Y2QzYiwKKwkweDI2Mzc0YjlmLCAweGJmMDVmZTAwLCAweDk1N2RmMGU1LCAweDVjN2QyYmIwLCAweDNkZTRiYzRlLCAweGZiNDQ5MWQ2LAorCTB4MGYyNTE5ZjUsIDB4NzE1N2QxNGMsIDB4NjY0YmRkOGMsIDB4N2QwM2U3NjUsIDB4ZmMxOTFjZGUsIDB4MmNiY2QzZjQsCisJMHhiOGNhYjZlZiwgMHhlMWU0MGQzYywgMHgyOTdkN2UyZCwgMHgyYzZlY2JjYywgMHgxMTc5MDQzZSwgMHg2NTk1MTU4OSwKKwkweDI0NmRhNzk4LCAweGZlOTRiZWI4LCAweDNmMDNhN2M3LCAweDU2NDlmZDVlLCAweDU1OWQxMDAyLCAweGJlODJmZjRkLAorCTB4YWZiYTBhNjYsIDB4ZTUzN2QzNTYsIDB4NjVlOWM5ZGIsIDB4MmFkZjk2OTcsIDB4ZDMwZDM2ZmEsIDB4M2VmNjU4ZjcsCisJMHhlMTAyYWI4NSwgMHhhZjVhODZmYSwgMHhjNzEzOGQwZCwgMHg4ZWUzZjE5ZiwgMHgyZmUwMzcyNSwgMHhjMzBlZmU1NiwKKwkweDk4N2M4YmQ3LCAweDc5OGRkOTAxLCAweDgyNWRhN2MwLCAweDM4MDI2ZjRmLCAweDllMDg5YWY0LCAweDNjOTZjYThmLAorCTB4NzE4MGYwOTMsIDB4N2E4OGM3ODUsIDB4MDU1ZjhlMmYsIDB4MzNlMDk5N2MsIDB4MTcwOTE5MmYsIDB4NmVjMmM5ZmMsCisJMHhmMDJlN2Y2NSwgMHg3YWYwNjRhMywgMHgzODk3OWRmYSwgMHhlM2EyZTE4NywgMHg3YTBlOTFkZiwgMHhjZjA2MTFmYywKKwkweGM5OTVhOTY2LCAweDExMmZiZTE5LCAweDMxMTY5N2ZlLCAweDdjZjUzZWRmLCAweDFlZWNjZGNiLCAweGNiZjgzNzAzLAorCTB4M2M1Mjc2MzAsIDB4Y2JlZTA4NjksIDB4OWYzMTA3NTgsIDB4YjNlN2Q3MDAsIDB4OWU5YjNlOGQsIDB4NDczNmVkY2UsCisJMHhlZGNmZDIzZCwgMHgyODNhYTM1NCwgMHhmZjc0YzI1ZSwgMHhkNDFlNzAwZiwgMHg3ZWMxZjcwNCwgMHg2MmYxMjE2ZiwKKwkweDQ3ZDI5Y2ZjLCAweDZlYzYzZDIwLCAweGUzYzZmMDEyLCAweGI5MGM2NWE5LCAweDc4OWYzZjFhLCAweDViYWYwY2ZjLAorCTB4ZTI5ZTBkMjQsIDB4N2NkMGUxZmMsIDB4ZjE5ZTczMmYsIDB4YWY0YjhhZjYsIDB4YjkzYTViZjYsIDB4ZWMzOWQxN2YsCisJMHhmYTg0MmM0ZiwgMHhhMGY2NjI1YSwgMHhlMTIzZDEzZiwgMHhkYTk2YWY3ZSwgMHg2YmE3MjAxZiwgMHg3MWZhMDg2YiwKKwkweGZhMGQ1NjljLCAweDMyMWQ4NTEzLCAweGZmNWM5ZjE2LCAweDZhYjcyNjRkLCAweGY3M2YwODliLCAweDRmMTdlNmM4LAorCTB4ZTA2NGE5OGYsIDB4MWFkNjc4N2UsIDB4ODAwYjBkOTUsIDB4YWFhYzFiZmYsIDB4NTZiNTA2NzMsIDB4NGU3ODhmMTYsCisJMHg1MDMyMTFjOCwgMHhhODdmN2EwNiwgMHgwZmVmNDIzYywgMHg4YTFjODE5NCwgMHhmNmFlN2ZiZiwgMHgzYjdiZjMyMiwKKwkweGFjZjg0YTJmLCAweDAzMmIxY2Y1LCAweDE5YWNlZmJkLCAweDU2NzkwMzI4LCAweDE0ZmVmNzY3LCAweDEzZGM1NWQ2LAorCTB4YmRjZjhmMTksIDB4OTc5MTFhZTksIDB4MWE3NDU5NzIsIDB4MGUyMjQ3Y2YsIDB4N2ZlNmM0N2EsIDB4M2ZjNjNkMzksCisJMHhhMDhhNTY3NSwgMHhjYmI1NzU5ZiwgMHhjZmU3ZTdjZSwgMHhkODc2N2EwMSwgMHhlZmMxMmE3MywgMHhhYWQ4ZGIzNCwKKwkweGQxMzhiYjAzLCAweGNlOTAzZmUxLCAweDVmMTdlOGU0LCAweDlhMTdlNmMwLCAweDU2ZGUzYzUyLCAweDY2NTg3ZmVkLAorCTB4ZWUxZTIyYzMsIDB4ODFiODc4ZTUsIDB4OWJmM2Q5ZWIsIDB4YTkwZmI4YjQsIDB4MGQzZTE2ZjYsIDB4OWJjMGEwYTEsCisJMHhiZTQyMTIzYSwgMHgxNDdlYTJmNSwgMHhhNzlkYzZmNywgMHhkYTE4NTUwNiwgMHg3ZDQzNmYzZiwgMHhmNTU3ZjhiYiwKKwkweGIwOWIyNzE4LCAweDE4OTQ0MzVlLCAweDY0MzEzOTdkLCAweDMyN2ZkZDU2LCAweDU1NTNhNzc5LCAweDVkMzdhMmJlLAorCTB4YmVjYWZlZDUsIDB4NzE3ZDU1NWMsIDB4ZmVhYTkyNzgsIDB4NTQ0YjM3YWEsIDB4NTRjOGIyZTUsIDB4ZGZhYmZiNTUsCisJMHhhZjk1NTJhOSwgMHg2YWExOTgxOSwgMHgzZGY0MDNiZiwgMHg0ZTM3ZTNjNSwgMHhmZmJkNTJjZiwgMHgzN2Y0ZTM2OCwKKwkweDVkN2QzZTIxLCAweGVmYWEzYmY0LCAweDA0M2Y3MDRmLCAweDg1MjM3YTA5LCAweDA0MGJmZTc0LCAweDUzYWM1ZWJkLAorCTB4OWFjZDRmN2QsIDB4N2MwZTU0YjAsIDB4YWMxNmZlY2YsIDB4OTVmNzc5NjYsIDB4ZmRiMTYzMTQsIDB4ZGI1MmVjMmQsCisJMHgyODkwMzcxMywgMHg4NGI2MmJlNiwgMHg0MDk4NGYyNCwgMHhiZWJhOWRkZSwgMHhmMTA3YWZiMSwgMHgwZjdiYTk3YSwKKwkweDZiZTZiODI2LCAweGM2OTc1NGMwLCAweDIyNjMzYjUxLCAweDBkNWM4MjIwLCAweGYxNjM4Mzc5LCAweGJmZDZhNWZiLAorCTB4YTk3ZmU0ODAsIDB4ZDViODM3ZjUsIDB4ZDQ1MjZmZWIsIDB4NTQyOTZmZWIsIDB4YTNjZGJmYWYsIDB4MGFjNGZmNWUsCisJMHhiYzNiZmFmNSwgMHhhYTRmZjVlYSwgMHhiMjdmYWY1MSwgMHhhOWZlYmQ0ZiwgMHg5ZmViZDU3MywgMHhmZmFmNTdlNiwKKwkweGJhZjUwNmI4LCAweGQ3YWFiNjY3LCAweDdhYTk3YjNiLCAweDRiODI3MzVkLCAweDc0ZjFmNTU0LCAweGM4NDllODIwLAorCTB4Zjc5NWJjY2YsIDB4YTQ1M2RiYWEsIDB4NDJlODYyNjgsIDB4NWYwMmQ5ZDAsIDB4OGQ2M2U2MDMsIDB4MzU0ODdhZWYsCisJMHg0YzdkM2M1ZSwgMHhmNDhmM2MyMCwgMHhlNTQ3ZDIyYiwgMHg3MjdmNmUzOCwgMHhhOTdhYTBiYSwgMHhkYTMyNWM2YSwKKwkweDczYzAzNzE5LCAweGZmNmUwNGVlLCAweDMzYjc0NmZiLCAweGQ1OGFmYzg0LCAweGU2ZmJiMWViLCAweDA4ZGFlNGIxLAorCTB4ZDFmN2M1N2QsIDB4ZDgyYmVhNjMsIDB4Zjc4NjliNDcsIDB4ZWZkMTYzZDEsIDB4NTllYTg0YmIsIDB4ZmEzNTdjMWMsCisJMHgzM2IwZWVjZiwgMHg5OTlhMGUzOCwgMHg1NDI5ZmYzZCwgMHhkMWRiNDM1ZCwgMHhkZTE0MTUzNiwgMHg3NDNlNjE3NywKKwkweDkzY2Q3N2ZjLCAweDFkZjIwZmQxLCAweDcxODNhYmQyLCAweDdjMTEyNGVmLCAweDdjNTEyM2NlLCAweDc1NWQ4OWZhLAorCTB4ZjEwMTY1YmUsIDB4NjQ1ZmI5ZTksIDB4YzlhOWUwMDksIDB4N2EwZTUwMzgsIDB4YTNmY2MyZmYsIDB4ZWU3YzYzZWYsCisJMHhkZDY1ZDI0OCwgMHhlMjFjNzIwNywgMHgzOTA5ZTMzZiwgMHg0OWM5ZTVjNSwgMHhmMmQxMDM4OCwgMHgyN2Y3MTMzOSwKKwkweDhhZTI4OTdhLCAweGVlMjllN2MxLCAweDI2OWJhY2Y3LCAweDVhMjU5ZWExLCAweGQ1YjFlNjMzLCAweDllYTEyZWRkLAorCTB4ZjYwZmZiYWEsIDB4ZjRjNzFmNmMsIDB4NTJlNzg4ZGEsIDB4NmUyZWQ3ODEsIDB4YTEzYjMwMWYsIDB4NjJkZDBlMGYsCisJMHhhZGY4OTBmYywgMHhlYzdhOGY2OCwgMHgzZmI0ZGViMCwgMHg0N2Y5ODcxNiwgMHhkYmIxN2Y3NiwgMHgyNWRjZTBjOCwKKwkweDg5YzJiOTExLCAweGRkNzEwNmM3LCAweDdjZTFmZDYxLCAweGUwYzhkYjliLCAweDQ2MjNhNWRiLCAweGUyNjRlZmMwLAorCTB4MzFmMGZiNDcsIDB4ZDYzYzhhOTksIDB4ZWZkNjI0ZWYsIDB4MTdmMDVjZDEsIDB4N2U2ZmNkOWEsIDB4YTlmMjFhYWIsCisJMHhmNDcyZTBlNSwgMHhhODhmN2ZkZiwgMHhiNjc3ZjdmZCwgMHhmZmJmZTg0YSwgMHgzZTliODUxZSwgMHgxYjhmNzZkZCwKKwkweGVmMjhiMmY0LCAweDFlMjFiODAyLCAweGZiZThlZDAwLCAweDA0YWI3NzU0LCAweGFkYWZiMWZlLCAweGIxMGYzZGJmLAorCTB4YmZiMjVmNzYsIDB4ODMwODdlYTEsIDB4M2Q2MGZlMGIsIDB4ODMzNjdmODUsIDB4ZDI4MWI3ZDIsIDB4MTFlZmI2Y2IsCisJMHhmYmM2MWZmNCwgMHhhOTY5Yzc2YiwgMHgzMWZjODEwNiwgMHhjMDk3YmIxZCwgMHhmYjY3YWYyZCwgMHhiYjFlYzNlMiwKKwkweDc0NDRjZmNhLCAweDdhNDczODBlLCAweGYyMGU3YjI5LCAweDljYzU0ZmJlLCAweDM0NzRhMGQzLCAweDFmYmFmZGVhLAorCTB4YTQ3Y2IwNjUsIDB4NDRjOGI2ZjYsIDB4ZTM5ZTRiODgsIDB4ZGI4N2Q3NzEsIDB4NTZiMmM0ZGUsIDB4MjY1ZTYwZjYsCisJMHg4OGU1ZjdkYywgMHhhMmVmNWVmOSwgMHg0ZTcyMzFmNSwgMHg2M2VmZDJiNiwgMHhlYWNlOGRlNCwgMHgxZTZiY2JjMywKKwkweGJjNjA4YjY5LCAweDI1ZWZjNzUzLCAweDVlZTMzNDdiLCAweGJmYzYzZmJiLCAweDZlMzhjZWYyLCAweGM0ODMxOTI3LAorCTB4NjliODQyOWUsIDB4NGY0ZWZmNGYsIDB4NWEzZjQwMjMsIDB4NzYyYTdjYmIsIDB4ZDM3MDZkMWYsIDB4ZWVmNTYyZmUsCisJMHgxYjEyNjRjNSwgMHhmNmQ5NTg3ZiwgMHg4OGZkYzIwZSwgMHg2NzQzZjdlNCwgMHgzNjEyN2M4NiwgMHg2NDFiN2M1MSwKKwkweGRmNGQwMzM4LCAweGU1MTFiODZmLCAweGFmNzZkZWFmLCAweDFhYTFlZTA3LCAweGI3MDY3ZjBiLCAweDdlNTYyMTdjLAorCTB4ZGY4ZTM4N2UsIDB4ZTdlNWM1Y2YsIDB4YzlkMTZkOTMsIDB4ZGI3YjRlMzAsIDB4NWQ2ZjBhODAsIDB4ZmRmMTE3NmQsCisJMHhjNDUyMzY5YSwgMHg3YWM0M2ZlYSwgMHhmNDgyOGQ0ZCwgMHg0MmQyOGE3MywgMHhmMjdhZTIwNCwgMHhjMWZjMGQ4MCwKKwkweDEwMjYzZWQ0LCAweDhkYjlkNjdmLCAweGI4MzA2ZjE4LCAweGEyZTRiYzE4LCAweDllNjNlOTBiLCAweDNlMDBjMTlkLAorCTB4MWY0YTRjYmYsIDB4ZTFkNTJmZWYsIDB4NGNiZWZhZmUsIDB4ZWZiZmI2MmIsIDB4NzgwZmUzMzcsIDB4MjllYWRmMjksCisJMHhjMzdmYjQxYSwgMHg2MWM3ODY3YywgMHhmOTczZDNmOCwgMHgwZmJmNjQ0OSwgMHg1ZDNlODBlNCwgMHhkMzg1MzhjNiwKKwkweGYxZDcwYjNlLCAweGYwMjdmNmNiLCAweGNjMTEzN2FlLCAweDVhNjdkNjQ3LCAweDVjYjg1ZWQxLCAweDZhMTlkZDM4LAorCTB4OGZlM2M3YmMsIDB4ZmZlNTA5ZTIsIDB4Zjc0ZjFjN2QsIDB4OTNmY2M4M2QsIDB4ZjA0ZmRkZjcsIDB4NGE1OTA1M2MsCisJMHhlOTg3Y2FmZiwgMHg4Nzk3MWM2YSwgMHhjZjg3YzRhOSwgMHgwODJhMzZhZSwgMHg0NjVlYjAwZCwgMHhlZDQwOWZlMiwKKwkweDhkOGJkMjExLCAweDgyYTdlMDRkLCAweDgwZWNhZjdhLCAweGFhMjc4OGQ0LCAweGI5ZTEzMzVkLCAweDE3NjRlMmE2LAorCTB4NmJkYWUzYjAsIDB4MTNjMDhiM2YsIDB4MmY4MDExNjIsIDB4YzEwOTAzN2IsIDB4YWI5OGJjNTUsIDB4Zjg3N2M3NDAsCisJMHhkNzgxMzk1OSwgMHhlNTY1Y2MyNywgMHhlODlmNWU0NCwgMHhlZjRjZTU2MywgMHgwMDM1NTIwYiwgMHhjYjQ3MTcxNiwKKwkweGNhNmYzYWI0LCAweDgwYmM3OTA3LCAweGZjZjE3M2IwLCAweDg0Y2Q4ZDdlLCAweDczYWIwYmNiLCAweGRmZDQzNTY2LAorCTB4OGI5Y2YwNDksIDB4YWYwOWZmYTgsIDB4NWYxZWIzNGYsIDB4NjM3YTA3OTksIDB4MGRmYmZhYjYsIDB4ZDZhOTBmMWMsCisJMHgzMGQzNWRlMywgMHgxN2FlYTZkZSwgMHhlYjY0YWNmMSwgMHhmYmYxMzdmOSwgMHg1M2ZkNzUyMiwgMHhmNTliN2JmYywKKwkweGQ0MWE2NDdjLCAweDdmYzdhYmU3LCAweGFjNWJkNzljLCAweGNhOGRlZjJjLCAweDAzN2Y3NjdlLCAweGQ3OGM3ZmFmLAorCTB4YzYxZWEwOWIsIDB4NWFmNTY0MmYsIDB4NmYwOWRmNzEsIDB4MThlMWM5ZDcsIDB4NDMxZTMzZTIsIDB4YmYzMzI2MGMsCisJMHgyMzM2OTZmMiwgMHhiZjNjNTdmMiwgMHg3M2Y3MDdkZCwgMHg5YmYzMGQ5NSwgMHhmNTE5Mjk3ZCwgMHgzMmZiODZkZSwKKwkweDUwNDlkYzk4LCAweDUxZGViYzA2LCAweDc3YThhMmU0LCAweDM3Y2M2NWRhLCAweDQ4ZjViYWQwLCAweDk3MmIwNjRmLAorCTB4ODcxZjljMjcsIDB4ZWFkNDg5ZTQsIDB4ZTRjNjQ0NjEsIDB4OWFlOGE1ZjQsIDB4OTAwNWYwMTIsIDB4MGZmNDU5NmIsCisJMHhmYmUzM2FlOCwgMHg5MThmZTIxYSwgMHg2NjRkZTk3MywgMHg4M2U1OGZlMiwgMHgzOTU1NGUwNSwgMHg1NTc0Y2VlNSwKKwkweDVjZWNkNzdiLCAweDc0YjViZDU1LCAweGNjOWVhYTkyLCAweGRjOWYyMjc2LCAweDVjY2JlOWNiLCAweDE3YWFhMjU0LAorCTB4NmQ5MDY1ZjcsIDB4YjU5ZDlkYmMsIDB4NTU0ZmU1ZDMsIDB4YTg1ZjNiYjUsIDB4OWY4ZDAyMjQsIDB4YTNkYzQ5YmEsCisJMHg3YzgyMzFlNiwgMHg5Yjk2ZDdiOCwgMHhiM2Y4ZmMwYSwgMHg0ZTQ0MGFiNiwgMHhmNjI3ZTUzYiwgMHgxYmE3ZjNiNCwKKwkweDU0ZmE1OThjLCAweGNiMTBiOTc4LCAweDdlNTgzYmNmLCAweDg3OWI3YjdmLCAweDllMDg3Mzk1LCAweGFiNmY2ZmFmLAorCTB4Y2EyZWYyYzEsIDB4NjlmY2YwOWYsIDB4ZGI5ZjE3OWIsIDB4Y2ZhMTU5NjksIDB4MmJmZGE0N2YsIDB4ZGExZTlmYjQsCisJMHhhMTlmOTQzZiwgMHgzMzczYzNmZCwgMHgzZjllMWZlZCwgMHhmZDQzZmRhMSwgMHg5NDJmZGEwNiwgMHhjMTcwYTY5ZiwKKwkweDBmZGEyOWYzLCAweGVkMzFmZmJjLCAweGI0NGZjYTFmLCAweGI2YmNiMGY5LCAweDFmOTYyZTZkLCAweGYzZTNmMzZmLAorCTB4N2MwNmI2YjEsIDB4OGFkNmQ5ZGYsIDB4OTZkYjQ3ZTUsIDB4YjZlMWYzZTIsIDB4ZGJkYjNlMjAsIDB4MmY3ZDYyNTYsCisJMHhmOWU3OTNhNywgMHgyYmU3ZGM3OSwgMHhmMTAzYmRkOSwgMHgyMTlmZGZlYiwgMHg5ZDJmYmI2MSwgMHgxNTRhNTM5ZiwKKwkweDNmMmFiOTdhLCAweGZjMDMzZmE3LCAweGZjZWFiZDAyLCAweGMyMWZjMDU0LCAweDhjNzg2MjYxLCAweDA2NjhlMzg3LAorCTB4OTEyNzBmYjMsIDB4OTMwYjcyYzgsIDB4MWYwNzE4MWYsIDB4NjE1OWU3ZGYsIDB4YWUzNWZjYTEsIDB4NGU3YmFkOTUsCisJMHhkM2ViMTQ1ZiwgMHg0Nzc4ZDgxYSwgMHg1YzQwOWRiOSwgMHhjZTUxOTI0MSwgMHhiYjQzOWI4ZSwgMHhjYWE0NTI3MywKKwkweGQwMDdmMmMyLCAweDE0ZGM0MzBmLCAweDVhZWNlNTNmLCAweDIxZTY0NjcyLCAweDU3MjVjMDBkLCAweDMzMWUzZDUwLAorCTB4Mzk3YzIxYWYsIDB4Yjc4MDljMTgsIDB4NTdmZGUwZDEsIDB4Njk2ZDM3OGUsIDB4YTc1ZmJiMmYsIDB4NmMwYzJiYTYsCisJMHhlMmI2ZjY2NiwgMHhiOWM2M2FmZCwgMHg5ZjRjYjBiZSwgMHhlZjFmOWYyZSwgMHg3MTc0OThlOSwgMHg1MjI0ZGQzYSwKKwkweDliZjE3NmY5LCAweDhjY2ZhMTQ0LCAweDMxZmVmNTI2LCAweDZhODk0MTdkLCAweGI4YmRhNjdmLCAweGQxNTcyODg2LAorCTB4ZmJkNDhiN2UsIDB4YmRmZTczM2MsIDB4MTk4Y2VmYWEsIDB4ZjVlYWE5MGYsIDB4ZmFhYTE1YWUsIDB4MWU3M2JiYmEsCisJMHhjNzNlMDM3MSwgMHg2MTk5YjhiMSwgMHgyMTAyNzJmNSwgMHg0ZmRkODVlNCwgMHg0Y2U2NWMyMCwgMHg5MjczOGYzNiwKKwkweDYwNWY3ZWMyLCAweDEzM2RmZjM3LCAweGQ2Nzk3ZmJlLCAweDVjNjVmMWNlLCAweDA5ZjJmYjhkLCAweDQ4MmM1NjBlLAorCTB4MGY0MDZhMGMsIDB4NDQ4YmZjN2QsIDB4OWUzYjdmOTQsIDB4N2U5ZmEwZDEsIDB4NDA2OTA5MjIsIDB4ZTZhNjRjZGUsCisJMHgwMTVmZDQyNCwgMHhmMTZiOGMzNywgMHg5NDJkMjZhYSwgMHg4NWEyODk4YiwgMHg4YTI0NTVmMiwgMHg3ZmJhM2FmYiwKKwkweGY1ZDI2NGQxLCAweDlmZmFkMTZiLCAweGQ5ZjJkMTMxLCAweDJjYjNmZjRjLCAweGZhOGMzMGJmLCAweDY3YWY4MGJhLAorCTB4YWRjN2Q4ODEsIDB4ZGNmZGUzOTcsIDB4MzdmNDRjYzYsIDB4NzYyNWNmYTksIDB4ODc0YmZkZjAsIDB4OTcwZGY5ODksCisJMHhjMTUzY2EzYiwgMHg0NjM3M2UwZSwgMHg3ZGNkYTgzZSwgMHgxNDA1OGRlMiwgMHg2M2I0YjZkZiwgMHgxZmVmMTRmOCwKKwkweDllYTMzNDU3LCAweDk0Y2JjZmQ3LCAweGY3NWU1YWJlLCAweGQ0NGZhYTdhLCAweGYzMDc5MzdjLCAweGNmZmE1YjM4LAorCTB4NmI3NmUwMjksIDB4ZmYyMjhmYzksIDB4M2M4NGU4NzQsIDB4OWU0MTEyNTMsIDB4ODkzZDk3MGQsIDB4M2IxZTY2MjQsCisJMHg5M2M5ZGVkYSwgMHgxMWZhMjE1MSwgMHgzNzVmMzI2ZiwgMHg0ZmY5NWYzMSwgMHg0YmM4NzY5NSwgMHhkMTc5ZTAyYywKKwkweGYyZDJkYjNiLCAweDdmMGZjN2FiLCAweDUwNzRlM2VmLCAweGEwMzUyMjQ4LCAweDM0OGIwYjVmLCAweGUwNzQxMDllLAorCTB4MzFmY2FiYjUsIDB4MmYyZWZjYTYsIDB4NGI5MzBiOWMsIDB4ZjJjNDA3ODgsIDB4Zjc4NWQyNDQsIDB4ZDU3ZmM4MjksCisJMHg3YzlhM2U2MiwgMHg1MGEyMWFmMCwgMHgwZDZhZDhmYiwgMHg3MGQxNjA5MywgMHg3NWZiODRiZiwgMHhmY2U1Y2ZiZSwKKwkweDljNmFmNjY3LCAweGVjMjU5YzhmLCAweDc0ZTgwZjI2LCAweDFiZDU5OWYyLCAweGFjZmMzYTAxLCAweGY0ZDhjNzViLAorCTB4ZDBiZWJhYjgsIDB4MmRlZjUwNGEsIDB4MTQ4N2Q0MmEsIDB4ZWJjYmVlMDksIDB4ZTU0MDdiYzIsIDB4YzhjOTEyMmQsCisJMHhiOWE2MzgwMSwgMHhkZjdlODNlNywgMHhiNjNhNDE2YiwgMHg5ZmM3MmZhYywgMHhlMzU5YjgzMCwgMHgwZWZjNDBhZiwKKwkweGMyMzU3YjI4LCAweDlhZWRhMmU4LCAweDgyYjdlYjI3LCAweGYwMDEzOTNkLCAweGRjYmMwNTYyLCAweDQzMGQ1ZjkxLAorCTB4MWUyMjE3ZTcsIDB4MmY3OWYyMTcsIDB4YzhlOGYzZTQsIDB4ODMzZmMyMWMsIDB4NzBiYzc4ODcsIDB4NmVhMmVmMWYsCisJMHhjZjUyOGZlMSwgMHhhYWQyZjFmMywgMHhhMmJkYzM2ZiwgMHhmZjJkMTFlZCwgMHgzZTM1MjI5OSwgMHg1MzIyZTk1NywKKwkweDcwYzM0YmU2LCAweDY2MTczODUxLCAweGI4MDE1YzgyLCAweGQ4MGY4MmFmLCAweDkxOWY5YWZjLCAweDk0MWNjNmM4LAorCTB4NmY2ODM1NmIsIDB4M2YzMDY5OTQsIDB4OWIyZTllM2QsIDB4OGZkYzk5MzIsIDB4N2RkOWQ4NjYsIDB4NDg1M2VlZTQsCisJMHg5M2U1YzNjZiwgMHhjMjQ4MmM2ZiwgMHg1YmIzMzNmZCwgMHg4ZmNiMzI2YywgMHg1ODk1N2FmNCwgMHhlMTJhZjdiZiwKKwkweDcyZTdlNDVmLCAweGExZGUxY2NjLCAweGIxMjcwNTdiLCAweDg5MmI2MGJjLCAweGI0YmM4N2FjLCAweDJiZjVmNmIxLAorCTB4ZGM3MDczMzIsIDB4YjUzZDdkZTEsIDB4YTUzZjIwNWQsIDB4NWM3OTg4Y2MsIDB4YTEzZTQ0YWIsIDB4Njk5OTU0NzIsCisJMHg1NzM4NGY2MywgMHhmYTc0ZTQ2NSwgMHhmNzlkNGRhOCwgMHg2ZmNmOWRiMywgMHg0MThmNWYzYiwgMHhmMjdiYzhhMywKKwkweDljYzcxNmQ2LCAweGFmZWJhOWYzLCAweDg4OTYzZjQ3LCAweGZmNzIwZWQzLCAweDFkNTlhMGUxLCAweGE0ZTQ2ZDU3LAorCTB4YWJhODc4MzAsIDB4YzFmMTBjY2EsIDB4NmRhNzE2MmUsIDB4ZGQ5OWJmZWMsIDB4YzdlZmJiNmIsIDB4ZWQzMDJmNzgsCisJMHhhODdhMDE1MywgMHg1N2ViZWRlNywgMHgwYjU4ZmRhYSwgMHg1ZjkxZmE3NywgMHhmMTY0ZmRlMywgMHgzOThhMzE3ZSwKKwkweGUzMWZlYzNkLCAweDMzNWI2MmZkLCAweDQzYzI3ZWY5LCAweDdiMGUyMThhLCAweDYxZGU3NTYyLCAweDcyNzdlYzMzLAorCTB4MWYwZjllMDgsIDB4ZWYwMTdkYTcsIDB4ODFiYmE2ZGQsIDB4OTc0ZmI4MmUsIDB4YTNmYmIxMTQsIDB4NTRmZmQ3ZTIsCisJMHhiMmYxMWU5NiwgMHg3OGVmYWM1MywgMHgzYmE1ZGEyYiwgMHhkODFjOThjYiwgMHgyZGZjZTA3OSwgMHgyYjNmNjllMywKKwkweGY5ZDUyNDczLCAweDNhMzk5NTgwLCAweDI5YjdhNzVjLCAweDk3YjNjMzdkLCAweGVlZDE5YTkwLCAweGE5OTQzYjI5LAorCTB4ZWY3MjZhZjksIDB4YzFlZmY1NWEsIDB4MWMwZGY3MzQsIDB4ZmYyODI4YjYsIDB4MWZiYTAzNWUsIDB4NDI3OWZjM2MsCisJMHgxNDUxZjIxMSwgMHgwOGM0YmY3ZiwgMHhjMTk5MzBjMiwgMHg3NmIzZTcwZCwgMHgxNzk5M2U2YiwgMHg2NzZmMGY0YiwKKwkweDM2ZmY1OGNhLCAweDBkMmY4YmE3LCAweGFlMWFiNTU3LCAweGE1NmY0NWIzLCAweGZkNzA2MGNjLCAweGI5YzZlNDBlLAorCTB4NTg5NGYxZjAsIDB4YjVjMDQ2N2IsIDB4MDNkZjhjN2IsIDB4ZTJhYmYwZjgsIDB4MWZhZDQyYTksIDB4ZmE3NGYwNjIsCisJMHg2ZWQzYzNiZiwgMHhmY2YwZThmZCwgMHhiM2YzYzM5NSwgMHg5YjVlZWM0MywgMHg1MTVmZjU5MSwgMHhlMWFiNzU5ZiwKKwkweDY0N2NmYjNkLCAweDBhNDk4ODBlLCAweDdmMTE1ZmVmLCAweDE4Mjk5M2VlLCAweGViZjhlNjEzLCAweDU5ZjRlNTJkLAorCTB4MDc4ZmU1Y2EsIDB4YzA5MTUwY2YsIDB4MWU2MzU3N2IsIDB4OTI0Y2FmNjYsIDB4YmU1Y2ExNmEsIDB4MmNmNzdmMDAsCisJMHgwMmMzZWY5MywgMHhiZjllM2YxYSwgMHg0NjE5ZWYyMSwgMHg2NGQ3N2Y5NSwgMHg5ZGRlYmEzMSwgMHg4NzhhOGQyZSwKKwkweGNmMzYyY2QyLCAweGIyZWE0NzAzLCAweGQ4ZjFiZmMxLCAweDcyMDIwNjNiLCAweGJmY2YzMzYxLCAweDZiZGVjYzdlLAorCTB4MDVhNjdiODQsIDB4NDI1Y2ExMWUsIDB4NzQ3ZDAxOWYsIDB4YzdiYzI4MTEsIDB4MmEzMzNmNGEsIDB4ZDNjNjUxZDYsCisJMHhjNmQ2ZjFiMCwgMHg0ZjE4OGRmMSwgMHgxNTY0YTczYywgMHgzYTU1N2IzMiwgMHgzODczODVhNCwgMHgwYjdkYWY2YiwKKwkweDViNWI3ZmVmLCAweGZkZWNhMzJhLCAweDFkNWZmOGQyLCAweDViZjBmZjg3LCAweDdhMzBiNzI5LCAweGUxNDU5Mjk5LAorCTB4OTBmZTkxNmIsIDB4MGU1YTZkZjAsIDB4MmE3ZmQxNDgsIDB4YmQxNTdjODIsIDB4YTAxZmU3MWYsIDB4NDY5MWVjNzgsCisJMHg4YjJkMjllMiwgMHg5Zjk4OGJkMSwgMHhkYjgwYmY5OCwgMHg1YzAyZGQ3NiwgMHgwNmJiZGIwNywgMHhiY2E1MWE1NCwKKwkweDg5MTdkMGJkLCAweGJjYzFmZjVjLCAweDJiNWM1ZjUwLCAweDY1NGM3M2IzLCAweGRhZmJhZTMyLCAweGVlNzhhOThhLAorCTB4MTdjZjM3NmMsIDB4MWZhMzVlODksIDB4MTY0NDc3ZjUsIDB4NzYzZGJjNzAsIDB4YjgxMWI3ZjEsIDB4YWZkODM5NDcsCisJMHg4ODNmZmJjMywgMHgxNWJlZTAzYywgMHg4ZGZmMWZlZSwgMHg1Mzg5Zjc4YywgMHhmYjgxYWE3YSwgMHgzOTFjMGVjYywKKwkweGViZmIwMDlmLCAweDg0M2E1OWY5LCAweDg3OTczZTdiLCAweDM1YjUxNzgzLCAweGM4ZWMxZTc4LCAweDBjNmQ3NjY3LAorCTB4Njk2NWQ3ZmQsIDB4ODkxMjdkYjksIDB4MzVhZjM5YzAsIDB4OGIzY2VjMjUsIDB4ZDYwM2RiOTUsIDB4MDAxYjI3MjMsCisJMHg0M2M1NmI3ZSwgMHhkZTg2MjkwNiwgMHgxMDE5NjU2NiwgMHg2OGZhMzVhZSwgMHgxN2Y2ODc4YSwgMHg2MTI1YTdkOCwKKwkweDdiYzFmZmU2LCAweGIzY2U4NzE5LCAweDVhMWUxOWRhLCAweGJkYTEwZjRhLCAweGY3NjdlZDYwLCAweDI5NjVkNjM1LAorCTB4Yjg1MmNlNGMsIDB4ZTZmN2QyZjcsIDB4ZWJkOTlmODksIDB4OGU5NGJlYTEsIDB4YmRmYzNiOTcsIDB4ZDNkNmNlY2QsCisJMHg0YmVlYzY1YywgMHgzZmVkN2I1YSwgMHhjODNlZTFkYiwgMHg0NzFkZjg0NCwgMHg3OWYyZWZkOCwgMHg3MjkyYjgwYSwKKwkweDQ4ZGZiYzM1LCAweGNiZjgxNzI0LCAweDVhYmU2MzJlLCAweDIzNWVmODZmLCAweDJmODJmYmQ4LCAweDYyZDVjYWRlLAorCTB4MzlmOTQ3YmIsIDB4MGEyYjQ3ODksIDB4NGNhZTcwNDMsIDB4ZGIzNWIxZDAsIDB4Y2MxNjQwZmYsIDB4MGJjNWYyOGYsCisJMHg3YzQ0ZWY2OCwgMHhmNjNmMTBkMywgMHhkZjMzYzg2MiwgMHgzMmU2NDUyNSwgMHgwNzZmNDQzYiwgMHg2OGQ0MmMzZSwKKwkweGUxMTZmYzU0LCAweDU0OWUyNmViLCAweDczZGRhM2ZkLCAweGExNWRhNzNmLCAweDQ2NDIzYmY3LCAweGZlNGRlNzAyLAorCTB4MjI2NjcxNzgsIDB4MTkxZGE3ZDgsIDB4MWFmM2RlYzIsIDB4MjU5YjVmMDEsIDB4OGMwZTYyNWYsIDB4ZGM1YTJmZjMsCisJMHg3MjM4MWUwZiwgMHhlZGM2MDFiYywgMHhiZTAyZjNhMCwgMHhlYjc1Zjg3ZCwgMHgzYTUzYjA2YSwgMHg1M2U0NWVlYywKKwkweGQwZWNiZTMxLCAweGZkNjBmNWYwLCAweGRmN2JkNmVjLCAweGQ0NjQ3ZjA0LCAweDNhY2RlZWMxLCAweDExODY3NTM4LAorCTB4ZDNiNjlmZTgsIDB4YTA3ZjNmNDAsIDB4MDRmMGY3ZmIsIDB4ZmQxYWE3ZTgsIDB4YjNlZDBiMDYsIDB4OGI3N2MzYTYsCisJMHhiMDExZmY4OCwgMHg2Yjc1MTc2ZiwgMHgzYzgzZjc1NSwgMHhjMmM1ZTVjYywgMHg4ZTEyMTY4YiwgMHhhYzJjMmZkOSwKKwkweDZiOWUwZWY4LCAweDAxMzE3ODVjLCAweGNmY2MzZmRmLCAweGNmY2MzZmVkLCAweGY4ZTJlZGJkLCAweDVmM2Y5OTc4LAorCTB4ZmI4YWZhY2YsIDB4ZGU5YzRmNmYsIDB4OGVkZGZlNGEsIDB4YmJmN2M2M2EsIDB4YTU5YWZkNjAsIDB4ZmFhODNkMDEsCisJMHhjNzNmNTMzNSwgMHg2ODdmNjRmMywgMHgyMWIwOTNiMywgMHhmMzExZGUwNiwgMHg5OGUxMjI0YywgMHg1ZGRhODc3MSwKKwkweDUyNzA5MTM0LCAweGZhMzJmYWVjLCAweDE1YWY5ZTFkLCAweGU2ZDBmZmViLCAweGRkOGUzYzQ2LCAweDFlMTUzOGZmLAorCTB4NTNjZmZiODcsIDB4ZmY2NDcxZTEsIDB4ODdmZjU4MDUsIDB4ZjQ0YmMyYjYsIDB4ZmU4Yzc5M2YsIDB4MGZmMDU0NzMsCisJMHhlZjhmOWJmNywgMHg3YmFjMWRjZiwgMHhlZWY5NDJkNiwgMHhjNmM1Nzg2MCwgMHhmN2UxNGI1NywgMHg3YmY4MGNmNywKKwkweGI3YWZhNDFiLCAweGVlYjljZjBhLCAweGZhMGU3ODIyLCAweDdhN2ZmZDgxLCAweDFmNTJmMjFmLCAweGMwZjdhYWQ4LAorCTB4ZThiYTgzMTgsIDB4N2EyOGNmM2MsIDB4ODNkODlmMjYsIDB4Nzg5Y2VmNzAsIDB4ODc5NTlkYmUsIDB4ZGVmZjFjZWIsCisJMHg5MGVjODcyOCwgMHg5NDJjNmE2NywgMHg4Y2U3YTBlZCwgMHgwMTVhMTIyNCwgMHgyMzUyOTdmYiwgMHhkZjExMzljYSwKKwkweDM0ZmVmZDEyLCAweGIzOTJhYjUzLCAweDQ2YTE3ZWUyLCAweDY4ZDg3ZjllLCAweDI2YWZmMTYxLCAweGFjMmNmZmFiLAorCTB4NTc0ZDEyZmYsIDB4MWY2OGNmY2IsIDB4ZjAzYjBiYTcsIDB4MGUyMTNiN2MsIDB4Zjg4OGQ3ZGMsIDB4YzVmYjBjOGUsCisJMHhmOTdkNzAzYywgMHg5YjBiOWMwOCwgMHgwY2ZmZTM5NywgMHgxNTA5ZmJiZSwgMHhkMWVmMTAyYiwgMHgwZmNkYjE1ZSwKKwkweGYzOGY3OWY5LCAweGE2ZTNlNDdkLCAweDIzMTNkYjg4LCAweGYyZDk3NTNmLCAweGJhMWJiMzU3LCAweGVjYjdlOGUyLAorCTB4OGNjMjNiNzcsIDB4NDBkOTc1N2UsIDB4Y2ZjOGRhYmYsIDB4N2NlMDcyZWIsIDB4NjdiZjAwZTMsIDB4YjlmYjQxNGUsCisJMHhkZTMwZjRhZSwgMHhmYzI3NTk0NywgMHhmM2UzMmIwMiwgMHg2MDFkMzI1NiwgMHg1NDc4OGI0ZiwgMHg4MjE3ZTQwMiwKKwkweGRkODZiMGRkLCAweDYxNmY1ODUzLCAweDI3NWZmYWU1LCAweGJhMTdiOWUxLCAweDgxMTRiMjFmLCAweDY1YWRkOTljLAorCTB4MDcxZTIyZmUsIDB4MWU2MWNmM2IsIDB4MDJjOWFlMzQsIDB4N2NmMjBlZmMsIDB4YWZmZGYzOTcsIDB4ZTdhN2JkZTEsCisJMHgzYTQ3OGU1NywgMHgwZmU1ZmZhOCwgMHhkZGMzMWVmMSwgMHgwZDlmNGNlOSwgMHgzZWExYjNlZSwgMHhjYTc4MzdhYiwKKwkweGRkY2Q1ZWUxLCAweGVkNmVjY2U5LCAweDI1MDljMzk1LCAweGEzZWM3NjMxLCAweGE3Mjg1NTE5LCAweDVlMzk1ZTNmLAorCTB4MTkyNzFiMTMsIDB4YzJlNGNkOWYsIDB4OTRmZmUxMWEsIDB4Y2U3MGU1YTMsIDB4ZjBkMmUzZWEsIDB4ZGQzZWExM2YsCisJMHgxYmRmYzI2MywgMHg1M2ZkZWNkMywgMHhiYWJmZGUzOSwgMHg2M2JmODBjNiwgMHhlMjc3YjU1MSwgMHg1ZmIwYjliYSwKKwkweDFmMzE5MDRjLCAweDg0ZDdiMzViLCAweGM1NWQ5Y2YwLCAweDZmODM4M2VlLCAweGVmMzVlZTQxLCAweGNiYmY4NzFkLAorCTB4NjI4OTZmNTYsIDB4ZDliMzY0ZGUsIDB4YzFmMTAwNTMsIDB4YzBkZmJkZmEsIDB4ZjEzODlmZGYsIDB4OTAyY2M0ZjgsCisJMHg5NTkzYzc4MywgMHhmYjZmYmMyYywgMHgzYTc0OGE3MSwgMHgyNmZiZTNlZiwgMHg1NzlkZjdiMCwgMHhkYjZhYjllMywKKwkweDM0N2Y4YjFhLCAweDRiZDA4OGZmLCAweGVkY2RmN2YxLCAweGQ3M2UyZjRlLCAweDY4OTlmODA3LCAweDVlMWM4MGY0LAorCTB4Njc1ZmU0MzgsIDB4YmZkNjA3ZjcsIDB4MjRhNTlkMTksIDB4ZjMwNmZmYTAsIDB4YTdlZGVhMTcsIDB4ZWIxZGY3ZjAsCisJMHg0OWRkOGZiYiwgMHg0MmU5M2UzMCwgMHhiY2ZiMTVmYSwgMHhiOWViNzFmOCwgMHg4ZmFkZGFmZSwgMHhkNWRmODNjZSwKKwkweGY4ZTc2ZmFiLCAweDU5ZjdiZmU3LCAweGRmYzYyOWFmLCAweDVmZjgxNDliLCAweGYzMWY3NzEzLCAweGM1ZGUzOGY3LAorCTB4MTkxMWM0ZjMsIDB4NzZhNGI5ZWYsIDB4OGZmODE2NDUsIDB4MjAzN2VjNGUsIDB4MzM1ODlkYmQsIDB4MTA1N2VmMTksCisJMHg1ODUzZDVlMywgMHg4ZjRmOTRlZCwgMHhiMDI5OTUzYiwgMHgxNWIyMGJiZSwgMHhiNjc2ZmYzNiwgMHhlOWVmMTU3ZiwKKwkweGJkZjgxMWY4LCAweDJkM2VlOGNlLCAweGRhMGRhZmU2LCAweGM3MTAwOWEzLCAweDc5NDRlZDE0LCAweDVhZmQzZTY4LAorCTB4ZGRiN2JkZmMsIDB4ZGQ3MDA3ZTksIDB4YTAxMTVkMjksIDB4NmQyZmNkMmIsIDB4YmYwM2I3YTgsIDB4ZjcxYmJmNjQsCisJMHg4MjA5Mjk3MSwgMHg4ZWY4MzQ5ZiwgMHgwNzdiZjcwMSwgMHg5ZWQwMTlmNywgMHg5ZDk3N2MxZSwgMHhlZjcxMWZjZiwKKwkweDA1OWEzNTlmLCAweDdlMDZkY2Y3LCAweGRhZTUwZTM5LCAweDBiNzQ2NjYwLCAweDc4NGRiZmIzLCAweDUxZTBlNGNmLAorCTB4NWUzY2Q1ZmYsIDB4ZDFlZmM2OWMsIDB4ZWZiYjAzNGMsIDB4MTg1MzNlYzIsIDB4YzRmYTNlZWMsIDB4NmM5MDQzYjgsCisJMHhmZGZiZTM3MywgMHg4ODJmYmMxNiwgMHgyNGY5ZDkzZSwgMHg3ZjFiOGY2OSwgMHhmMTc0ODkzNywgMHhmZGY4MjNlZiwKKwkweDA5ZmU1OTAzLCAweGM4MWZhNzIwLCAweGUxNWJmZGEzLCAweGVlZDg5M2ZiLCAweDRhZmZhZTQyLCAweDkyMTE1OThjLAorCTB4Yzc0YmM3Y2UsIDB4ZDlmZDMzN2UsIDB4Y2NmYTVlZjgsIDB4YTgwZjdlY2QsIDB4YjA0N2Q3OGIsIDB4NWZmMDYwM2UsCisJMHhiZGY4ZjM4ZCwgMHgzMjhjZjQ4ZCwgMHg1ZjdhYWZjZiwgMHg0OWQ5N2RlNCwgMHg2ZTAyOGViOCwgMHgyM2I0Njc4YSwKKwkweDkzZDJmMWUzLCAweDAyOWZmNmNkLCAweDM5NzRmMTFmLCAweDgwOTc5ZWI0LCAweDc4MzJmYzBmLCAweGI2M2VjMGJmLAorCTB4ZWEyNmFiOGUsIDB4OWNlOTNjOTksIDB4ZGUzMmY2OGMsIDB4Mjc5MzE0MzAsIDB4MDdkZjdjYjgsIDB4M2E4Mzk3NDgsCisJMHg5N2EwZDNlZiwgMHg4NDc1NDdhMiwgMHgyZDQ4YzNkZCwgMHg1NDU3ZjAwMywgMHgxNmY1NzZiMCwgMHg3MDEwZjdlNiwKKwkweDA3ZTdlMTljLCAweDFlNTkzYjFhLCAweDNlZTc5OWUxLCAweDg1NmY5YWM4LCAweGE4MWZmM2YzLCAweGZmMGJjZmNlLAorCTB4MDEyNGVkMjEsIDB4OGY1NjMzZmMsIDB4YzQ1NzUwOTIsIDB4YzIyZDc2ZWMsIDB4NmU4ZjdlYzUsIDB4ZGZjMTRlOGQsCisJMHgzZTNlMGMwYiwgMHgyNzEyZmQxMSwgMHhiYzVlY2FmNCwgMHgxNWQ1NzYwNywgMHg2ZDI3YTAxYSwgMHg0ZmJmOTczMSwKKwkweGZiODk3OWIwLCAweDZkM2RjNGRkLCAweGM4MTk3OGYxLCAweDk5YjJmYTY2LCAweDNiODJlZmY4LCAweDI1MTM4ZmZlLAorCTB4ZjE0YjA3ODUsIDB4ZmY3NDRhYmUsIDB4NTJjZDIwNmIsIDB4N2U1ODlhZjYsIDB4OTE4NWVhM2IsIDB4MmZlYTQyZjcsCisJMHhmZjgyN2JmMSwgMHhiMDUzZTViYiwgMHg5ZjgwNjU1NiwgMHhkNWU4MDI2MCwgMHg3ZmI2NzZkMywgMHg0MDIyNWJjNCwKKwkweDNjZDk2YmJmLCAweGI4MDNlMDNiLCAweDRlZjg4MmZmLCAweDViYzQ1ZTgzLCAweDRlMWUyODI1LCAweDllM2VhYzRiLAorCTB4MWJiYzg0Y2UsIDB4MWJhMDBmODEsIDB4YTNiZTE3ZTgsIDB4OWQ5ZTdmN2QsIDB4NzYzZmY2YzMsIDB4MTc5NDNmMjcsCisJMHhhYTVlNDNkNCwgMHg0OTAxNTdkMCwgMHgwZjdkYzBkNiwgMHgwMjRhMWQyNywgMHhjZWM5ZTVkMCwgMHhjODcyZTczYywKKwkweDI5Mjg3MWY3LCAweGUwNzZmNmIxLCAweDBlN2JjMTEwLCAweDczZmYzODE0LCAweDkyMmVmYzM1LCAweDA1ZjgwYTc3LAorCTB4ZmVkNTNiNzcsIDB4NWU3ODc4ODgsIDB4ZmQ0MDFjYTgsIDB4YzY5ODVmZjMsIDB4ODAwMDUzYzUsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGI1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZmZiNSwgMHg3OTMzMjY2NiwKKwkweDg0ODQxZTRlLCAweGU0MjQ5ODQwLCAweDA5MzA4NDAxLCAweDA3NDE0MTBmLCAweDY4MTUxMDQ4LCAweDg1MjgwOTc4LAorCTB4NDIxMDA3OTMsIDB4MTdiNjg4MWUsIDB4MjQwY2RiNWIsIDB4NDFiNDVhMjAsIDB4NzY4YmQxNTEsIDB4YjQ1NDQxNDAsCisJMHgwMzQxNDE0MSwgMHg1OGE1MDA3NywgMHg1NmQ1NjM1MSwgMHg4ODBkY2I2ZCwgMHhhODMxMWZiYywgMHhhZGFkZmY5NywKKwkweGZiNWJmNWZmLCAweDkwY2U2NDljLCAweGY5YjdiNWE4LCAweDY3ZDlkODNlLCAweDdiNWFkN2JmLCAweDNiZGFmNWVkLAorCTB4M2Y0MzdjZGYsIDB4NzU2MTA5ZDcsIDB4MTBmNDQyMmIsIDB4MTE2ZGNlMjIsIDB4YTMxMDk4NjIsIDB4NDJmMzgyZGMsCisJMHgxMWM4ODVkOCwgMHhjYThkZjNmYywgMHg1YzNhZGI4OSwgMHg4ZGY4ODU4OCwgMHhkYWY5YWFhYSwgMHgyYmM4OWViNSwKKwkweDFmNWMyZGViLCAweDc3NDY3NWUzLCAweGI1ZjFiZGYxLCAweDI4ZjI1MGZmLCAweDA4NGMyMWIzLCAweDVkM2RmZTg3LAorCTB4MWUzMTBmODgsIDB4OTBlYTdiOGQsIDB4NDYwY2E3ZGQsIDB4MDlhYzJlMWEsIDB4NzVhYzU0NDIsIDB4YTUxYTQ1ZmEsCisJMHhiYWNjNGU2ZiwgMHg0Mjg1ZTY1MywgMHg1YzZjYzc3NSwgMHhlMzRhZDg5OSwgMHhjYTJhNmY5NiwgMHgxZmIyOTExMiwKKwkweGQwYWFmMzQxLCAweGVhOWU1NWU3LCAweDBhODc1MmNkLCAweGVhYThmNmQxLCAweGViZjY4NGRhLCAweDZhOGY5ZTU1LAorCTB4YTUxZWI4ZjMsIDB4ZGJkNjI3ZWYsIDB4OWZhOWNiNWMsIDB4MjczZTdkMGEsIDB4YzVkMTZiN2EsIDB4MGFiNzk0YjksCisJMHhmMjgwYmRhYiwgMHg0NWRhMmQ1NiwgMHg1NDc4MmVmZCwgMHhiMTc3ZjYyZCwgMHg4MWY3YWEzZSwgMHhmODBiYTBiNSwKKwkweDNhODk0ZDYwLCAweDFlYTgzMjdjLCAweGUzOTQ2OWQ2LCAweDcyNjhmN2JmLCAweGMyZmNkMTU3LCAweDYzY2M3N2U5LAorCTB4ZDFmN2UyYTMsIDB4ZDFmNDRlZmMsIDB4ZmM3ZjIxZTYsIDB4ODJiMTMwOTMsIDB4NDVkYWVhZjIsIDB4MmJkY2VlZDEsCisJMHhhMWMyN2RlMSwgMHgwMTcyN2I0NSwgMHgwMzFlYjk1ZiwgMHgxOGUzYTE5ZSwgMHg3ODA4YmNmMCwgMHhiYWJkMjBjNiwKKwkweGFiZjA0YmM1LCAweGEwZjU0ODdkLCAweDRiZTZiZWNlLCAweDk4ZGY4MGQxLCAweGFlNDc0NTNkLCAweDYxYjVmN2MxLAorCTB4ZWNkYThjMjIsIDB4Y2VmZTljM2IsIDB4OGI4ZjM0YWQsIDB4M2Q0MTU1YWIsIDB4MTkzZGQyOGEsIDB4ZGJjNjgyODksCisJMHgyZTdjZjk2ZSwgMHg0ZGJmNzNlMCwgMHhkMjkxN2FjYywgMHg0N2E3YjdkMiwgMHg0NmZkMjg1YiwgMHgyMWY1MWZhNywKKwkweDZhMzUyNzA5LCAweGFlN2NmNDdhLCAweDk4YjkzZWRmLCAweDllZGNjN2YyLCAweDdhYTA4MmM0LCAweDJjZTlkNjNmLAorCTB4NmI2NTVmMTQsIDB4NzE4ZDE2ZmYsIDB4NzhkOGQ2MmEsIDB4MmU1ZTA2NWQsIDB4YmYzNDFkNjIsIDB4ZmUxMThkOGIsCisJMHg4Yjk3MDRlNSwgMHg1ZmI4ZGJiZCwgMHhiZjQ2NGYwMywgMHg0MTgzYzAxNSwgMHhhNTZmNTQ0ZiwgMHhlMzhmYTVkYiwKKwkweDExNDcxN2IzLCAweGUxYjRkMzVjLCAweDY0ZTgyZTllLCAweDJlMzQ4M2MxLCAweGU1MWY1YmZhLCAweGZmN2RlNjc1LAorCTB4NzQ3ODBkNzEsIDB4MjU5NjliZTAsIDB4OGYwM2ZjMGMsIDB4YmM2ZGE0NGYsIDB4ZGU1OWJlOTcsIDB4OTNkMTBhYjMsCisJMHg3ZDc4ZDBlMCwgMHhjYmRmNDJhYSwgMHg4NTA5ODRmNiwgMHhkYTUzMmJmYSwgMHg5YzA5Mjg4ZSwgMHhhYzE0ZmI3NywKKwkweDhjM2NmMTdmLCAweDk4NzFmNjU3LCAweGY3YzdlNTA1LCAweGYzYzc5ZjVlLCAweGMxMmJjMTBhLCAweDdhMmJiNTI5LAorCTB4OTZkNjk4YmYsIDB4ZGY4MjA5ZWEsIDB4NzM2ZDNlYzUsIDB4N2QwNmJlNzksIDB4ZTc5YmNlNzQsIDB4NGMzN2JiNTEsCisJMHg0YzVjNWY2MCwgMHg3NjQ2N2MyMywgMHhmODAxYjFjMiwgMHg1ZGY1YzYxOSwgMHg2ZjZmYTY3NiwgMHhiMWQ3ZTAxZSwKKwkweDdhYzg1NzVlLCAweGZkZWIyMTVkLCAweDBiN2QzMDQwLCAweDI5ZWJjNjhmLCAweDgyY2MyNGZmLCAweGRjMGZlNWVmLAorCTB4NzFhNmU1OTQsIDB4OGUzYmRmOGUsIDB4Y2UzYzc1ZDcsIDB4NzVmZDg3OWIsIDB4Y2ZmYTk1M2MsIDB4ZTU5ZDcyYmQsCisJMHg3MzNhZDAwZiwgMHg4ZDlkNjViZiwgMHhiNzU3YzY0ZSwgMHg3YjZiOGNlYiwgMHgzYWNiN2M0MiwgMHg2ODc0ZWEzNywKKwkweGFiMzNmM2FjLCAweGZhOGFkYTNiLCAweDljYjE1NWJiLCAweDE0ZmI2YThhLCAweGNjOGQ3ZmRmLCAweGQwZDA1NmJiLAorCTB4MGY0OTM2YjUsIDB4ZmMyMzZiYjUsIDB4NjY4NWQ3YzAsIDB4NmU3ZjA0ZGIsIDB4ZjFhMDFmMjcsIDB4NTgzZDI3YmUsCisJMHg4ZjhlMWU5OCwgMHgwMjNjM2Y3NSwgMHhlYTlmNzVmNCwgMHg5NzAxYjlmMiwgMHg5Y2ZjZWYyMSwgMHg1N2VmYzdmMiwKKwkweGIxZjkwMjVkLCAweDBmYzQ3ZTEyLCAweGM3MGZlMDJjLCAweDczMjc4YjUzLCAweGI1Y2RhZjdlLCAweGI0ZjlmYTgyLAorCTB4MDQ3ZjZmZjEsIDB4NjNkYzVjZmQsIDB4NWY1ZTBiNzMsIDB4OTBiM2ZkZjEsIDB4YWY4MmY5YTcsIDB4YzY2ZTVjMTEsCisJMHhlYmNlNTRiOCwgMHhkNjE5ZWY1NywgMHhlOGYxNzI4OCwgMHhiYmE2NTc2MCwgMHgwMjE0YmUwYiwgMHhhYTM1OGFlNywKKwkweDAxZDIxZjY5LCAweDNlZDVlM2MxLCAweDNhYzZlMjkwLCAweDg3MTMzODBjLCAweGE4M2E5YWNkLCAweDRmYzgxZTEzLAorCTB4OTcwOWQ0MWYsIDB4OWFkMGJiNWEsIDB4ZmIxMmZiZjgsIDB4ZmM0MTQxOTQsIDB4OTc0OWYwMGMsIDB4M2NmZjQ0ZTcsCisJMHhhMmQyYzdjOSwgMHhjODczZjY4MywgMHg4ZmY5NDJmYywgMHhmZjQ4Y2Y1MSwgMHhjYzU3YzFkMiwgMHg3MDUxNzhmYywKKwkweDE5NTBlMDllLCAweGMyMWM1ZjkyLCAweGNhNDJhYTM3LCAweGI3Y2E0M2FiLCAweGY5OWNmYWY3LCAweDEzZjhlODQwLAorCTB4MzFiZWU0ZDMsIDB4YzNhYTU4ZTAsIDB4OTE0NWJiNzEsIDB4YzUzZWU0N2MsIDB4MmQ3ZTg5YmYsIDB4NGJlZGJhYjUsCisJMHg4ZTJmZmU2OSwgMHg0ZmQwZjMxMSwgMHhhZTM4NTU5OSwgMHhjZWQ5N2RlNSwgMHg4YWI1MmJlYiwgMHg3YzAyYjA4NiwKKwkweDYzM2Q3MGY3LCAweDQzNWZkNGRkLCAweGMzZTUxYzU4LCAweDdhYTIxZjI1LCAweDc5NDFlYzEzLCAweGYzMWFkZjgzLAorCTB4ZjA5MzRmMDksIDB4NWJjNWQyMzAsIDB4ODNjNzhkOWQsIDB4MTRkZDU5ZTAsIDB4ZWVkN2NhNmIsIDB4ZWUzYzZlNGEsCisJMHhjNjJmY2NlOCwgMHg2ZmY0YzkyZiwgMHgzODdlYWQyMiwgMHhhYTdmMjJlMCwgMHg4YzFlYjU3NywgMHhiMjQ5ZmEyMCwKKwkweGQ0NjllMTY4LCAweGZmODNjNWVmLCAweDY2ZWI5ZDFiLCAweDI2MmYwZmJjLCAweGU5YTgxNmZjLCAweGY1YTYxZDJmLAorCTB4M2Q1NmVkYjYsIDB4OWJlZmQwOWIsIDB4NWYxMWZjZjIsIDB4MWI3ODdhNWYsIDB4OWJkOWFmN2QsIDB4Nzc3NWVlMjEsCisJMHg4ZTE0M2ZhZSwgMHg4YTVkNzcxNywgMHgxN2VmYTc0ZSwgMHgwNWMzZDkwZSwgMHhjZGE1MDFjOSwgMHhkMWVkNjNmMSwKKwkweDg0YmFiZmJjLCAweGJiODc1YmJiLCAweDZiMDVkZmQxLCAweGEwOTRmNDZiLCAweDZiNDQxNzdhLCAweDdhMjBkNGY0LAorCTB4YTk3NWRkMjksIDB4ZmMzMWU0NGUsIDB4MWYxMDZhN2MsIDB4OGY0Zjc0ZmYsIDB4MmY3ZDJhYjEsIDB4YjFhZjdkZmIsCisJMHhlOWM3NGExNiwgMHg3MzZmZGVmZCwgMHhlNjg2YjkzZiwgMHhlNjFkZGJlZCwgMHhiZWYzNGNkOSwgMHgwYjJjZTZmMCwKKwkweGIzNzg1ZmRhLCAweGVhN2Y0ZjQyLCAweDRmYjNmNGU1LCAweGI0N2UzMTUzLCAweDMxYmJkMjQ1LCAweDI5MzQ4OGRlLAorCTB4OGU1OTk1NGYsIDB4ZmMxYTMxM2UsIDB4Njk5ZWQ1ZmYsIDB4ZTU5ZDY5ZjUsIDB4MmM4Mjk2NjUsIDB4YWQ5Yjc5ZTAsCisJMHg3ZGU2MmU2ZCwgMHg5NWFiMTE0MSwgMHhjNjdlY2ViOCwgMHhmZGI5YjlhNSwgMHg5ZjI3ZGQ4NSwgMHhmNGY4N2YwMCwKKwkweDYwMDUzZWZlLCAweDY3NzYxNzJiLCAweDdlNTQ2OWU3LCAweDU5MjFlM2UxLCAweGMyZjdlYTJlLCAweGYwMWVjOTdkLAorCTB4ZjczNjZkODUsIDB4ZWVkZTk5NGYsIDB4ZGY2MGYyODksIDB4OWM2MWZkMWIsIDB4Zjc3ZmU4MjUsIDB4YTQzNWMzNTUsCisJMHg1MmY5Y2IxZiwgMHhlMzkzNGYzZSwgMHhjZTgyOTRmYSwgMHhlZTJkYTM3ZSwgMHhiZjAyOGY1ZiwgMHhiM2NkYmRmOCwKKwkweDdmYTU5Mjk5LCAweDhiMTllOGNmLCAweDc3M2Y2MWY1LCAweGQ1YjI4NzgxLCAweGUyNmRjMjYxLCAweGRlNzgyYjI3LAorCTB4ODc2M2MyYTUsIDB4MTE3Mjg0MWMsIDB4YTJlNTVmNDQsIDB4NmZjZmJmOTgsIDB4NDA1ZjdmMzQsIDB4MTdkZjAyN2MsCisJMHhhZjdmMzdhZSwgMHg1YWFiOGQxMCwgMHhmYzhiN2Q2OSwgMHhmNjgyZWZlNiwgMHhmYjExMmY4ZiwgMHhlMjY5ZjhkYSwKKwkweGQ2ZjE3ZWYzLCAweGY1NGNjMjZmLCAweDBmZTc0Zjg0LCAweGE1YzdlNjBlLCAweGM3YzExZmI0LCAweGZlZmM1NzllLAorCTB4M2RlZmMwMTUsIDB4NzQzM2FmMmEsIDB4ZDJkM2NiNWQsIDB4NDQ4ZjFkNzgsIDB4NmI2ZTYzZmMsIDB4NTk4ZjVlMTAsCisJMHhlMDg5MzU4NCwgMHgxYzJlY2M3YSwgMHg0N2U4MDU0OSwgMHhiZWFiOWMwOCwgMHhjZGZlNjEzZCwgMHhmZWRlZTRkNCwKKwkweDMyOTZhNTVmLCAweGUwYjI0YmRmLCAweDA1YzNiODNjLCAweGVkZmQ0N2NlLCAweDdlOGE5OTM5LCAweDc5MTc1NmNhLAorCTB4NzdlNjgzNWIsIDB4ZTQ3ZGU2ZDEsIDB4ZGY1NzkwZTcsIDB4ZjU0ZDdlMjMsIDB4MzdmNThkOGUsIDB4MWQ3OWE1OGUsCisJMHhkNGY1NTdiYiwgMHgzM2FmMzE3NywgMHhlM2Y5OWYyNCwgMHgyOGY3MWUwOSwgMHhmMjg0M2ZjMiwgMHgyZDRjOWNjZiwKKwkweGRlOWNiYzIxLCAweDM0YjUzMjdjLCAweDMxMTVmZTk4LCAweDhkMWU5ODJiLCAweGViYzI2Njk0LCAweGY0ODlhYzgyLAorCTB4ZWIwNWFkMTgsIDB4ODlkN2FkMDksIDB4MGQ3Y2YzNWYsIDB4YjE1NTNhNzgsIDB4Nzg3YTJiYTQsIDB4ZTU0Zjc0MTQsCisJMHgwNTU3N2YzOSwgMHgzZDlhY2VlNCwgMHgzM2U4M2YzNiwgMHgwZjE3ZTM2MiwgMHg2Y2ZhMGFkZiwgMHhkYTQwYjliNiwKKwkweDJmNTQ3YmI1LCAweDViYjE3NGU0LCAweDFjZTI2N2Y1LCAweGJhMzRmZTZiLCAweGVlY2NlNzEyLCAweDY4MzUyZTIxLAorCTB4MTcwZTc0ZGQsIDB4YjBiOTdjZTMsIDB4NTk2MjUyZWIsIDB4MTkzM2Y3MmUsIDB4OWVlZDQ0ZjIsIDB4ZGZhMDNjODcsCisJMHg1Y2YxZTZlZSwgMHhmMWFmZmE5YSwgMHhmZjk5YWYzZiwgMHgyMGZkY2Y5ZCwgMHg4MWYwNDZmMSwgMHhjMGIyMjc4ZCwKKwkweDNlMGY4OWRmLCAweDk5ZmQ4Njk3LCAweDc5MWRiNWY1LCAweDgzODc1YTIxLCAweDJjN2U2OGZlLCAweDdmZjQ1ZmJmLAorCTB4YTNhNWYyYzUsIDB4YmJmYWY1NTksIDB4MzQ5ZWMzYzAsIDB4MDdmZmMzM2IsIDB4Y2QwMjZmY2YsIDB4N2U3M2IxMmYsCisJMHhlMDNkOWYzNCwgMHg2YjNjYzZjYiwgMHg5Yzc2NmRkYywgMHhkMTFkMTdiMywgMHhiNGE3ZTA3OSwgMHg4OWY5ODlhMCwKKwkweDA2ZTRmOWZhLCAweDI4OWIyZDdmLCAweGVlMTZiZjg4LCAweDA5YzJiZjllLCAweGYxNTFhMTc5LCAweDZmMjgwZjQwLAorCTB4MmFkY2Y5NTYsIDB4ZGRmYWEwZGYsIDB4ZWNjMjk3ODQsIDB4MjEzYmY2YmIsIDB4ZTU0NDNlOWYsIDB4M2FiYzc0ZDQsCisJMHhhOGIzOGZlYSwgMHg1NGZiYzJmZSwgMHhmOGRiZWZjZSwgMHg4MGRhM2ZkMywgMHgxMTM2MGRkNywgMHg0Nzg2M2MwNiwKKwkweDYzYzdkMjZmLCAweDNlOTE2ODc5LCAweDM3Y2Q0NWJmLCAweGI3YTA1NjlkLCAweDAxM2Q1MWVjLCAweGU1MWNkZmI0LAorCTB4ZDViMmY3YzEsIDB4ZjRjMTYzYjYsIDB4NTBiZjFmMzUsIDB4MmJkN2YzN2YsIDB4ZjgxYTQwZmUsIDB4YzJmY2I5ODQsCisJMHgyN2NlOWYzMCwgMHg1YzZmYmU0MiwgMHgwMjdmNzUzNSwgMHg4OWViMmI1MiwgMHg3MmU2ZmM4YiwgMHhmMzRlYmNmYywKKwkweGRmN2ZkNWE5LCAweDE3YTZiOTlhLCAweDI5YzE3M2YwLCAweGFiZjYwYjQ0LCAweDFkZjU5NWI1LCAweDA1NGQ2ODExLAorCTB4ZmVlYzJmMWUsIDB4YWM3ODE1MmMsIDB4YjI3ZmY1N2QsIDB4ZWJmODE3NDQsIDB4NTFjZDRmZDgsIDB4ODQyMjI3MDksCisJMHhjNmU3NGIzOCwgMHhmZGQwMTYzNywgMHg1ZGM1YzlhNSwgMHg4ZmIxN2ZkNCwgMHg2ZDViMTdkYywgMHg2MzkwNWViZSwKKwkweDhhZmM2ZmY3LCAweGRkYzVjMWY5LCAweDE3NTc1ZjVhLCAweDVmYjlkYmY0LCAweDEyNGI0ZTdkLCAweDIwNTM4MGQyLAorCTB4YmFlNGRhMWQsIDB4ZTQ4NGZiMTEsIDB4MWY0MTdiYzEsIDB4ZGQ0ZDU2OWIsIDB4NmJlNzc5NDQsIDB4YTI0MjQ4MzYsCisJMHhmNzkyMzMzNiwgMHhmY2M3ZjYwYiwgMHg3ZDhkN2VhMCwgMHgwMTdjMTViMiwgMHgxZmM5MzBlOSwgMHhlNTIzZWM1ZSwKKwkweGJjYmFkNTg0LCAweGZiNWY3NWIwLCAweGU2MmVjY2U0LCAweDI2Y2QzYWIzLCAweDkyM2VkYmNmLCAweDJiNGRjYzZmLAorCTB4OWM4NzRmMGUsIDB4MDM0NWYxNjEsIDB4NzVlYmMyMWYsIDB4MTU3YzEwMjcsIDB4OTdlYWJlOWQsIDB4M2RmMDUxMmQsCisJMHhkYTcyMzQ0OSwgMHhmYTcxMzQ1YiwgMHgyNDVhMTBiOCwgMHgwYjhmMGJlYSwgMHg0ZmEyMTY3MCwgMHg3YmM3ZTAyYywKKwkweDMxYWJkNzllLCAweDhlODlmY2RmLCAweGQwNmFmMDNiLCAweGY4NTYyZjgzLCAweGVhZWZkMzM3LCAweDYzNTA4NzQ2LAorCTB4NDZiNWVkMjAsIDB4YTBkNDUxYTMsIDB4NGJlZWJmYTksIDB4NTQwZmI2ZTUsIDB4M2VkNDlmZDYsIDB4MmUzZDNlMDYsCisJMHhjOGNiZjdlMCwgMHhmOGMxMzFlOSwgMHg3NGI4NzdkYiwgMHhkZWFiZmEwMiwgMHhmNTJlN2E0OSwgMHg0ZDg3N2U3NywKKwkweDU5NTdhMDA0LCAweDNkNTBiZjY5LCAweGVjMmZlMWRiLCAweGNkNGJlMDY5LCAweDVjYmM4MDhhLCAweGFmN2M3OTRiLAorCTB4ZmFmNTY1MWQsIDB4OTc5MmUwODMsIDB4OWE5MWUxMmUsIDB4YmI3MGM1OWUsIDB4OWExZWY1NjAsIDB4OTU3M2ZhMDgsCisJMHhkYmQ3MjFkYSwgMHhjMDRmOTcwZSwgMHgyYTRiNjM3OSwgMHhmYjVlNjNiNSwgMHhhNDc1OGYwZSwgMHg1NmIxNmYwMSwKKwkweDlhYWIzN2RlLCAweDVjNWI3MThkLCAweGY2MmEzZmU4LCAweDQzNmY5ZTAzLCAweDUzNDQ0NWFlLCAweGMyOGY4NmJiLAorCTB4ODc0YzBjZmMsIDB4M2E2MTQzZTQsIDB4ODUwMjFiNWMsIDB4ZjgxNzc3MGUsIDB4MTRjMjg5ZjEsIDB4NzdjYTgyMzEsCisJMHhjZjMwMTNhOCwgMHgxNzUyYWVmMywgMHg5NThiNjhmMCwgMHg5YjMwODc3NiwgMHg5YWY0MDI3NywgMHg3OGI4ZDhiMCwKKwkweDdhNDQ2ZmNjLCAweGFiZmZjZjA2LCAweGNmM2MyNWQ4LCAweDgwYmM0OGFmLCAweDdhZjI0MWJlLCAweGJkMGRmMjMxLAorCTB4N2Q4NjU1Y2IsIDB4OGZiYzIzZTMsIDB4ZmM3MjFkNmIsIDB4OWYyYTNkYTgsIDB4NDNhNDYyYTMsIDB4YmJlZmRiZTcsCisJMHhjODljNjhjYSwgMHhkMDI0ZGFiZSwgMHhhODlmMzE4MywgMHhmMDBiYWY2MSwgMHg4NThiMWNlNywgMHgzNzg2YjNlNSwKKwkweDJmODBkNzIyLCAweGQyMWJlNTE4LCAweGY4MTliZDI1LCAweDc1NjA5OTU4LCAweGFlM2M3ZjgxLCAweDU3NGFlN2QzLAorCTB4NjgyMGEzYjEsIDB4MTYxZWI2OWQsIDB4MGVjNTVlMWQsIDB4YmRiYjY5YzAsIDB4OTdjZTEwZjgsIDB4NzM4ZWZhMzYsCisJMHg1NGQyN2Y3MywgMHhhYTE0ZjQwNywgMHgyNzNmNDE2NywgMHg2NGM3NjhlYSwgMHgwZWU5ZGZhMywgMHg0MjQxNzdjMCwKKwkweDViYjQ3OGU5LCAweGMyYWM5NjI4LCAweDVlYjg1YjdlLCAweDNlMjA4MTE1LCAweGUzOTM2MGRiLCAweDIxMWNiODJlLAorCTB4YzczYTQzMDIsIDB4ZTNmODQwNWQsIDB4ZjlhMzk3ZjYsIDB4ZDY1MzgzN2IsIDB4ZmI5Mjg4NmIsIDB4Mjk3NGNlZTcsCisJMHhkM2Q0YWUyZiwgMHg4M2ZhN2FiNSwgMHhjY2M3YmFmOSwgMHhmZWM3Y2ZkNywgMHhlNGE5NGI3MSwgMHg1M2E2NzdlZiwKKwkweGViNGFkNWJmLCAweGFiMjY4ODc4LCAweDgwZWRkYTkyLCAweDk3M2E4OWVmLCAweGNkMDU4NDA4LCAweGM2NzU4YWY3LAorCTB4MzhkMDQwOGIsIDB4M2IyZWY1MWQsIDB4MTgzZTIwNDUsIDB4NDdjNjZlMWYsIDB4YjkyMzdhZTcsIDB4MTI1ZDQ0ZmMsCisJMHhmZWZiYjFjMywgMHhlYzcwNGM1MywgMHgwNGMzM2ZlYywgMHhjZmZiMmJjNywgMHg3NTEzZjJlMiwgMHhmZmQxZGYzOSwKKwkweDRmZmE2ZWMwLCAweGIzYmZjZDMzLCAweDVkZmM3ZWRmLCAweDgyZmFkMmVjLCAweDIyZWRkY2JmLCAweGQzNzRjMDdlLAorCTB4YmIyNjc2Y2EsIDB4NzYwNmZkYTIsIDB4OTg3MWYxMmYsIDB4OTVmN2RjODAsIDB4MDU3NmNiNTMsIDB4ZTk2ZDg3ZjEsCisJMHgwYjlmNWQ3NiwgMHhmYWRmODBhNCwgMHg2YjRlM2FjNCwgMHg4ZjFhNWQ3NywgMHgwYmUyNmVmNiwgMHhjYmQwZTc2YywKKwkweGNmMWI0NTZiLCAweGZhMDJmYzEzLCAweGJhYjY0OGJkLCAweDk2OTc3Y2I5LCAweDk4YzhiZDBkLCAweGYzM2M4NzQ3LAorCTB4ODU5ZjQ4YmIsIDB4OWVkODQxZjYsIDB4MWY2MzQ3YmYsIDB4NGRiNmI0NWYsIDB4YTlhYTdkODYsIDB4ZGUwODhkNTksCisJMHhmZGY0MDdkNywgMHgxN2NmYjYzMSwgMHhkNWQ3YjA3OSwgMHhiZGYxMWRhMCwgMHg5YzVkZWU5ZiwgMHg4NGQ0ZjgwZCwKKwkweGRlNjFlNWI1LCAweDJkZmVmN2ZiLCAweDU3YzhlNzBmLCAweGM1ZjcxNjdiLCAweDlmNTRhZGY3LCAweDViN2IwZmU1LAorCTB4YmZhODI3OGQsIDB4YjNlNWMyN2UsIDB4OWI0Y2U4OGMsIDB4ZmExZmZkZjUsIDB4ZmE5ZWViN2QsIDB4MzZjNzk4NWUsCisJMHgyZTQ4M2RkOCwgMHg1NmY2NTlhYywgMHhiMDc4ZjFjNiwgMHhlMDgzZWYyMSwgMHgxNmY4ODI1ZiwgMHhhNmJiNDNlYiwKKwkweGRmMjA2M2E5LCAweDBmMzI0ODdkLCAweDk2ZWU4N2U1LCAweDNlZDBjMzcyLCAweDgzNDk2ZmMyLCAweDJjZTFmN2RjLAorCTB4NjE5YTg5ZjAsIDB4ZTE1NDE3NzYsIDB4OTYxNmZjZjAsIDB4Mzk4N2MzYjcsIDB4OWY5ZjM4NWMsIDB4ZWJjMTkzZWQsCisJMHhjODRlNDNiMywgMHg3OGEyZmI0MCwgMHhmMTU0ZTdhNiwgMHgxYjZkYzlhZiwgMHhlMDRmZjY0MiwgMHg2OGRiMzUwZiwKKwkweDc1YjU2YWJjLCAweGY3ODUzOGYyLCAweGE5ZjAzMWQxLCAweDc4YmZiNzlhLCAweDEzNWZkNzQ3LCAweDhjNWE5ZjgxLAorCTB4NWY3OGYwNGIsIDB4NDMyMTI3ZWYsIDB4OWE3YTg5M2IsIDB4YWJiZWY1YTMsIDB4OWI4Y2RlYTgsIDB4MWZhMTUzOTMsCisJMHg5OWZhZTg5NSwgMHgxOTQwNDg5OCwgMHgxMDY4ZmNjOSwgMHg5ZTU3MjBlYywgMHg3YTBmNTJkYiwgMHhjMDM0ZDE0ZCwKKwkweGYwZWM5N2MxLCAweDk4MWFmY2UwLCAweDcxYzkxYzIyLCAweGY0ZmVkMGQ4LCAweDU3ZWUzNGE5LCAweDJlYzMxNmU5LAorCTB4MDNkZTYwYWEsIDB4ZGYzZDM1ZjQsIDB4MmM2OTY5YWIsIDB4MzhmZTkzOWYsIDB4M2IzZmQxZDAsIDB4ZmJjMzI1YWUsCisJMHhhMzBiZjA3NywgMHhkZjM3ODdmZSwgMHhlMmViNDgzYSwgMHg3OWU0MzBkYywgMHgzNmU5YmRiYiwgMHgzYWFkYjNjYywKKwkweDk4NDdmNTkyLCAweGM5ZWVkMGYzLCAweDJhMDJjMzliLCAweGM4YjY4YWVjLCAweDNmZTdkMGQ1LCAweGIwN2I5ODhhLAorCTB4ZmVlM2MxMDcsIDB4ODMyMjJkMjgsIDB4Nzk5YWNkZGEsIDB4OTVlNDJhYzMsIDB4YTVlZWYxZmQsIDB4ZDY5MmU3YTAsCisJMHhkM2U3YzBlMSwgMHg4MzI2MmQ0ZSwgMHg2ODcyYWZjNiwgMHg4OTY5MTM3ZCwgMHhkOTY4ZmJlNywgMHg4YmU0MzgzMSwKKwkweDQ0OWUyNWUzLCAweDJlZTJhMGYxLCAweDUzZTcyZmU3LCAweDBmZjFjOGEyLCAweGU4NDk2OTQ3LCAweGYyZDJjNGE3LAorCTB4NjZmODU1YzQsIDB4ODM3YjYxNmQsIDB4ZmRjMWU4NjgsIDB4OGE4YmI3OWMsIDB4MDM3ZmU0YWUsIDB4NzVmNDQ3MGUsCisJMHg2Yjg5YjNlYywgMHhmNmZhZDMyZiwgMHhkNGYxOGRhZCwgMHhlZmNiN2NkMywgMHg5NmI3Mzk5ZSwgMHhlMjk2ZjlkMiwKKwkweDlhNmE4MGM0LCAweDU1ZDYxNjc3LCAweDliZTkyYmU1LCAweDc5ZjNmMjRjLCAweDY1ZWYzZTliLCAweGFlYWRiY2ZhLAorCTB4MWNmZGUwYWMsIDB4NDM3YWVmM2EsIDB4YzI4NWY5NWUsIDB4NTBmZjIwZmEsIDB4YWM1ZjE1ZmUsIDB4ODdjYTVlZmYsCisJMHgzMDdkMmU1OSwgMHgyMGQ2ZTcwZCwgMHgzNjQ5ZGIwYiwgMHgyMmRlZDM4NCwgMHg3ZDVkZjIzZCwgMHhiZWQzOGY5ZSwKKwkweGY3ZjFjNDczLCAweDE0OWVmOGQ1LCAweDNkMjdkYjJlLCAweDdlYzNmMTZjLCAweDM3NzYzYzUwLCAweDlhYzllOWUzLAorCTB4NjM0YThmNDgsIDB4MWRiNzA4OTUsIDB4ZjA5OTUwNzIsIDB4ZDlmYzVjYjIsIDB4NjllZGJmOTgsIDB4NjYxNTc1YTUsCisJMHg2ZTAxZDc2OCwgMHhhOTJkZTJmMywgMHhiNDNjZjAxZiwgMHg2ZjIwNTM4MSwgMHhmOGViOTI4ZCwgMHhkNzkzNzkxNiwKKwkweDZjYjg1NTMxLCAweDM1ODk5NDJjLCAweDUzMWZjODE2LCAweGYzMjk3MjVkLCAweGE2M2ZiOTE1LCAweGUzMGRhZjA5LAorCTB4ZDcxYTEwY2QsIDB4YmIwNWMzZmIsIDB4MWZjNGZhMTcsIDB4YmNkMTBiYTAsIDB4N2YxZjBhNjcsIDB4OWNmYzJkOWYsCisJMHg1YzAyMmFkZSwgMHg5NWEyYzdmZiwgMHg4OWJjMDZmMywgMHg0ODI1ZTYzZSwgMHg1M2Q5MzhmYSwgMHg4Y2RmZjg2NSwKKwkweDkxMTdiZjc5LCAweGFkMTk2N2Q3LCAweGQ5MjNjYTYzLCAweGFkNWZhYzk5LCAweGY5ZjBjMWViLCAweGQxNGY3OWFlLAorCTB4ZWZmNjg2ZTksIDB4ZmQ4M2Y0M2MsIDB4OTlmYTlkM2IsIDB4ZmVjODYzN2EsIDB4ZTA2MWVjMmQsIDB4ZjZkYmYzMzMsCisJMHg4NzdiNGI1MSwgMHg0Yzk5MTRmZSwgMHg0NzVlYjg3MCwgMHhjNWRlZjVlOSwgMHhhOTE1M2ZhYywgMHhmODQ3YzI5MSwKKwkweGZhYTUxOTY5LCAweGYyMWM3NzIxLCAweGEwNDg0ZjJlLCAweGI5ZmRkYzc1LCAweGI3N2U4M2Q0LCAweDg0M2RiYzVjLAorCTB4NDYzNzdmY2EsIDB4ZDJkY2Y1MTUsIDB4NjRkNGYyY2IsIDB4YmRjOTlmYmQsIDB4OWQ4NjlmYzcsIDB4MjQwOGIwZjUsCisJMHgxN2I5YTUwYywgMHg4ZjVlZDY1ZCwgMHg1NjRlZjlhMSwgMHg1MmM0MzViNywgMHhhNGRlODRmOSwgMHhiZGYxMDRjNywKKwkweDViYjYxMjFiLCAweGQ4ZGRkN2ExLCAweDYyN2RmY2NmLCAweDk5ZGY1OWFlLCAweGMwNTUxYTI0LCAweDczNTBmMjc5LAorCTB4MGY4MDdkYmQsIDB4MGM4YWQ3ZDEsIDB4MDE4OGI3YTksIDB4ZGZlZTgwNjIsIDB4NDdmYmI5NjMsIDB4MTNlZDFmN2EsCisJMHgwYmUxZDkyZiwgMHhiYjQzMzU3OSwgMHgzYTVjNzAwNywgMHgxOGI5YjNlOSwgMHg3YWU1NTg1NywgMHhkOTUxZGU2YSwKKwkweGU0OGM3NzllLCAweGRmOWQyZjJjLCAweDg0ZThlYmM3LCAweDA4ZjI5MzA4LCAweDZlNDhhN2YyLCAweGNlYTY3YTQwLAorCTB4M2EzOWU5Y2QsIDB4YTE3ZTUxZTcsIDB4NjdlYjIzY2UsIDB4N2Q4MDNmMTQsIDB4NzNmYWJhNTYsIDB4Yjc3MmYwMmIsCisJMHg2ZWY5YzI1MywgMHg3NjFmYWE2NywgMHhjNmE2OGFiNSwgMHhlNTVlOThmMSwgMHg0ODgzYTZhZSwgMHhlM2M1MDNjYiwKKwkweDM4MmVjYzcxLCAweGQyMjBlNGI0LCAweGI2ZjQzYmJiLCAweDVmZGQwZTI1LCAweDVkYmZmM2MwLCAweGEzZGJkM2E3LAorCTB4ODgzNGRlYTYsIDB4YmJlZGM5ZjYsIDB4ZjZlYmRmYTUsIDB4NGRhNzUzM2UsIDB4YzZkZTQwNGEsIDB4YThlOGVlZjksCisJMHgzNDIyYjJmYSwgMHhhOGNmMjJkYSwgMHhiNzU4Y2RkZSwgMHhjMWU4ZjliNywgMHhjOWU3NWE3OCwgMHhmZjNjMTFiYSwKKwkweDllNWU3NWQzLCAweDA5YmFkOWZmLCAweGEzM2RmZTljLCAweDI3YWUzOWY4LCAweDZjNzk2NzNlLCAweGQ2YTNiNmQyLAorCTB4ZTQ1ZmFhMTQsIDB4YjdkOGJjNTUsIDB4ZGY4NTdhZDcsIDB4ZGViMTc0NGYsIDB4ZjU4MWNmMjYsIDB4MWY2MDBlNzQsCisJMHhmNTM0MTk4ZiwgMHhlOTMwM2JmMSwgMHhkYTI3NmQwYywgMHg1MTcxYjhjZiwgMHgzYzk5YzYxMSwgMHg3YThhYzRhMiwKKwkweDIyMTZiZjMzLCAweDRlOTNhZDNlLCAweDhkZWU4YmJmLCAweGY4ZWI1N2Y1LCAweDYxNTdiZjNiLCAweDFiZGY5ZTc4LAorCTB4ZGY2Y2YwY2IsIDB4ZjkwMzExOTEsIDB4OGNjZWU5NjAsIDB4NmY4OTQ4OWUsIDB4MDQ2ZjdhMWEsIDB4ZDk3ZWQ3ZTAsCisJMHhmZjZkZjNjMiwgMHg4ZWY1OWMyOCwgMHg3NzRiZjZkMCwgMHg3YTg5ZWMwZSwgMHgyMmRmMDk2NywgMHhmYjNjZGU0OCwKKwkweDgzYjg3ZmZjLCAweDcxYjM5NWNmLCAweDAyN2Q1ZjRkLCAweGM5NTdmNmZlLCAweDM5YjI0OGRmLCAweDVmZjgxOGYxLAorCTB4ZDAxZTVlZWYsIDB4Y2U1ZDA1Y2IsIDB4MDIyMzNkMjYsIDB4NmU4ZDVmZTcsIDB4NDI3ZjA0NTcsIDB4YjRiODZjZmUsCisJMHgyMTdmMGVlNywgMHgxN2Y2MmM2NSwgMHg5YzEzNzNjNiwgMHhiOTE5MWNjMywgMHg3ZjcwODdjNywgMHhmZDQ2N2U0NywKKwkweDkyNThmY2JkLCAweGI5ZWZmYTA3LCAweDYzYTQ4ZmVkLCAweGYzNGRhZGZjLCAweGZhOGM3OTNmLCAweGY4YjdlZjNmLAorCTB4OWQ0ZTc0NmMsIDB4NWUxNzRkMTcsIDB4MmE3ZTFmMDUsIDB4Nzc3YmVkOTIsIDB4OWMyZjM0MmIsIDB4NzE3YjliYzMsCisJMHg4NmIxNDczZSwgMHgyYzM5YzMyZiwgMHg3M2NmYmNmYywgMHgxOTc1YjcxNCwgMHgxN2FhYWRmMSwgMHg3YTA1ZWQxZiwKKwkweDMwNjA4ZDdjLCAweDViNWZjYTgyLCAweGVkN2NjMTFiLCAweGM4ZTc5YjM1LCAweGI4ZjdmNDMyLCAweGZiZTllZmVjLAorCTB4MGJiNjNjZWYsIDB4MDVkNTdkZTksIDB4NjVmYTUyNzcsIDB4YTFlMzFjNDYsIDB4MDM0NTgxZmMsIDB4NzljZTllZDAsCisJMHgzZGZkNGM5MSwgMHg4MDEyOGFmNywgMHhiYWQwNmFiZiwgMHg2OTkyMmI3ZCwgMHgxYzM3ODM3ZSwgMHgzNGEyZjRiNSwKKwkweDFlYTUyOWZmLCAweDM3M2VjMGU5LCAweGY5ZmQ4MjFlLCAweDZlNmUxOTZmLCAweDlhNWI2NDNmLCAweGQ5NmQ4MjlhLAorCTB4NzVjOWZmY2IsIDB4ZTU5YmZlN2MsIDB4OWY3NWRjODIsIDB4M2EyNWVkOGYsIDB4NGEwMTgzZTUsIDB4MzQ4ZDk5ZDMsCisJMHg4ZmQ0YjBkNywgMHg2Mzg2MzQwYSwgMHg2NzY3YWYyMywgMHg2ZmY3YjRmMywgMHg0OTA3NTgxNSwgMHg4OTc3OTgxZSwKKwkweDkxZTdjM2RkLCAweDc4MTFiN2RmLCAweDc4ZTVhZjNlLCAweGY2MmJiZjU4LCAweDNiN2EwYTNkLCAweDcwN2EyNWFmLAorCTB4ZmE0Y2JkM2UsIDB4N2ZhOGQ1ZmMsIDB4N2NlYmNhYzQsIDB4YTJmN2E5ZTUsIDB4MjE4OWRmNjEsIDB4YmYwOWQ5M2QsCisJMHg3OGRiN2U0OCwgMHhlM2VlYWZkNCwgMHhmNTg3ZjAxNiwgMHgwOWZhZTI3OSwgMHg4ZWNkNGY4MCwgMHg5ZmI5MWI5ZCwKKwkweGZhMDc4NzJhLCAweDRiY2VjNTZlLCAweDJmMjA1MzA3LCAweDk5M2MyMGRlLCAweDMyMWRjN2EwLCAweGFmNDJhYmZmLAorCTB4NTZhNWE1NDcsIDB4ZTY1MmZjNmMsIDB4NWYzOThhNWIsIDB4ZmMyN2RhNGMsIDB4Y2E0Y2EyZmUsIDB4ZTdlODhmNDksCisJMHg2M2NkNjhhMCwgMHhlZTI0Yzk3ZSwgMHhhZmQ3YzRlZSwgMHhlYmU1MThhOCwgMHhiMGM5N2NkMywgMHgyN2U3MWI2ZiwKKwkweGZkYTk3YjlkLCAweGIyZWM2NWIwLCAweDViZDhjYjdkLCAweGRmMmUxOTUzLCAweGViYjNkY2YzLCAweGRmZDE5N2U3LAorCTB4NzNlMTc2MjMsIDB4ZGYzMDNmNTIsIDB4YzFiZTllYzAsIDB4Y2RlYmNmMmUsIDB4MmY0MDY3YzQsIDB4ZTM0ZDc5YzYsCisJMHhlZDkzZjVlNiwgMHgyOWFmZTBiZCwgMHgwNzY4MzJhYSwgMHg5MWU1MjNjMSwgMHhiZTM3OTYzMCwgMHg2MmIzZjhlZiwKKwkweDZkZjlmMTU2LCAweGUxYjU1YmM4LCAweGQ5ZjIyZjkyLCAweDg4NWZlZDQxLCAweDM3ZWVhZWQyLCAweDc5MzI3NjBjLAorCTB4M2JhYjBiZGUsIDB4ZTNjOGYyMTcsIDB4ZmE2YmRlNTEsIDB4OTZkNWJjYjEsIDB4MzlkMDM1OGEsIDB4NTNlNjFkN2EsCisJMHg5NWZjOTJhMywgMHg0NTdmMjQxMSwgMHg3M2FmN2RjNiwgMHgyZGU1MTAzNCwgMHg1YmVmZmI0MiwgMHhjZDA0NmM3ZiwKKwkweGYxMjkwNjMzLCAweDg2YTQ2OGVmLCAweDQ4NWE0NWRlLCAweDdkMzlmYzk3LCAweGYzZjgxMzViLCAweDNmOTI2MTQzLAorCTB4YmU2MTBkNDcsIDB4NzQzM2FjNjQsIDB4MDdjNDAzOWMsIDB4NmYzYmUyMzQsIDB4MTFhMzM5ZDAsIDB4MzkxNzE4M2YsCisJMHg3ZDc4Y2FjNiwgMHg5MDc1NTJkZCwgMHgzOTIyZTVjZSwgMHgxYWRhMDgwMiwgMHhkZWYzOTQzYiwgMHg2MTYzODIyOCwKKwkweDJlYjQyYWE0LCAweDI1MjM0N2Y0LCAweDNhYzdjZGJjLCAweDk4NDQyN2M3LCAweGM0MjUxNWVhLCAweGJmOGZiMWRhLAorCTB4MWQ1NWZhZWYsIDB4M2NiODZhNGYsIDB4ODM3MGQ0YmYsIDB4NzQxM2JhYmYsIDB4ZmFjODdkYmYsIDB4Nzc2ZjdhZTUsCisJMHgzYWJlNjMwZSwgMHhlYjdlZjk1NiwgMHhkZjE1YjIyZSwgMHg4YjhmM2MwOSwgMHg3MzczZTdjYywgMHgyMzk0ZTQ1YywKKwkweGQ0NzVlMDlhLCAweDdhZTg3YmUxLCAweDFjMjVkNzQzLCAweGZhOGU0ZmRmLCAweDE2N2MyMjg5LCAweGVkY2ZjN2VjLAorCTB4YjY2Yjc3NmMsIDB4NWJmNzNlYjUsIDB4YTJmMzZiODIsIDB4NDdlYzBmNWMsIDB4NzBiZWQzMmYsIDB4YjU0ZTlmODAsCisJMHgwY2RiOWNiMywgMHgzN2VhOTJkOSwgMHg1YzcxNzBmNywgMHhkZmJhNmJjYiwgMHg2ZjViMzdkYywgMHhiZTdjMTRlZiwKKwkweGM1ZWVjZjM0LCAweDYxNWVmNDdlLCAweDQ4ZWMxMDM0LCAweGQyNmZkMmY1LCAweDE2ZjI1YjZjLCAweGU1ZTZlYmNlLAorCTB4ODE5YTFlMjksIDB4NjllZmMxNTAsIDB4OTdlNDdjY2IsIDB4MDk1ZWJjZmMsIDB4ODE3ZjBhZGMsIDB4NDBiYjczZWYsCisJMHhmZWIxNzVmZCwgMHg1Zjk0ZTlkNSwgMHg5ZTBjOGJmNywgMHg4ZmE0NDdjZiwgMHg4YWJjNjJkNywgMHhlYjViZTY3MCwKKwkweDcxYzliZDYyLCAweGZmOTc5ZjA0LCAweGIyNzlmMmExLCAweDkxZjI5ZjJlLCAweDZlZDlkN2NjLCAweDM3OGE2ZWIzLAorCTB4MDRhZDdlMTksIDB4MzZlYjZmMWQsIDB4YjA1ZWYyY2EsIDB4NGQzY2EyOTMsIDB4MjZjNGZmYjYsIDB4ZDdhMmRmZWIsCisJMHhmYmYxZDA0YiwgMHhiNGE3NGViMSwgMHg2ODNmOTlmZiwgMHhhMGFjMjM5MywgMHg5NWZiNzdmZiwgMHg0NmZiYzZiZSwKKwkweDE3ZTE5Mzc4LCAweDkzM2NhYzdhLCAweDU0Yjc5ODZkLCAweGY0YzY5MGRlLCAweDY2ZDNkYmE0LCAweGU4ZGNmY2U5LAorCTB4YzMxYzBkMTcsIDB4OWZjYjRmMjEsIDB4M2IzN2YzZDksIDB4MmEzM2RmNDEsIDB4MWYyMTQ3OWMsIDB4MjJiMTU0N2UsCisJMHgwY2ZkN2EwYSwgMHgyMTg0MGQ0ZCwgMHg5MTdhNmFiZSwgMHg0YmFlNDNiNywgMHgzOTVlYjhjNywgMHgxZmExYjk2ZSwKKwkweGRmMDBjYTA2LCAweDcxMGU2ZGJkLCAweDgxZmZjYjJmLCAweDk2ZmFjMTIxLCAweGZhNDVlNzgxLCAweDFhNmVhZGJlLAorCTB4N2ViMDYwZjMsIDB4ZmUyNzY5NWQsIDB4NzJlNTE4MzMsIDB4NmE0NTU3M2YsIDB4ZDU3ZDA3YmYsIDB4YzFlMWJhZWUsCisJMHg1NGZiYmQ2MCwgMHhiYzc5NDNmOSwgMHhjZjcxZjRlZiwgMHgzYzFmNzlkNSwgMHg2ZjM5MDk5ZSwgMHhiOGM2YTcwMiwKKwkweGYwMTFmYTFkLCAweGQ1ZjZmZDQ5LCAweGVmZGE3M2NmLCAweGRhZjAwYjNlLCAweDkyZmE5NGU0LCAweDg1ZTNlZGI1LAorCTB4MzU5ZmFmOTQsIDB4MDlmN2NmODAsIDB4ZDg1ZTFkNTMsIDB4ODQ3N2RhZjUsIDB4YWRhZjYxZjksIDB4YzVlZTE1OWYsCisJMHg0NGY3ZWFiYSwgMHg5ODU3NjFmOSwgMHhkMjFiZWZhNywgMHg2ZmJiZjhiYiwgMHhhZGU5OGRiYiwgMHg2NjdmZWVjYSwKKwkweGRhYWJiNTBiLCAweDg5ZTk5ZmRiLCAweDk2ZWQ5NWU4LCAweDY0MjM1N2JlLCAweDZkMzdiNDc5LCAweGY3OTQ1MGU1LAorCTB4Y2Q3OWZhNjQsIDB4ZjJlMThlZTYsIDB4ZTVjMTU1MzcsIDB4NThhYzgxZTEsIDB4NTM5Yjc3ODIsIDB4MTM3NTg1M2IsCisJMHhiY2ZkYjJiZCwgMHgxZmJmMmVjYSwgMHhmYTEyZTlkMSwgMHg5NmZmZmIyNSwgMHg0MmJmNzE0NCwgMHg4ZjNmNmJjZiwKKwkweDU4NGY3ZDY3LCAweDkxZjNjOWJkLCAweGFmMjA3ZGJmLCAweDdkY2JiMzQ3LCAweDdlYTQ2YTIxLCAweGU3MjVjNDc4LAorCTB4OWUzOWE0NzUsIDB4OGY0MTg1ZjcsIDB4ZGNiNzhhNDcsIDB4ZWY4MDk1OTMsIDB4ZmNkMmFmMjQsIDB4MGQ0Y2IyZmUsCisJMHhkMDZlMWZjMCwgMHhmMmY1MzI5ZiwgMHhiYjUxNTdkYiwgMHhkOTU1NWY0ZiwgMHhkN2U3MzM2ZiwgMHhmYmUzMGY4YiwKKwkweDEzZDUxNTljLCAweDZiYmNhZDM5LCAweGY1Y2I5ZjMyLCAweGEyZWVhNzFmLCAweGE3YTk4NGYyLCAweGUwNmJiZmQ4LAorCTB4ZDk5NTRlN2YsIDB4ZTk5ODlhOWYsIDB4ZGY4MTMzNTUsIDB4ODNmNmZmNWMsIDB4ZDllMWZmNTQsIDB4YWYwMDE2MjcsCisJMHg0NzM1MzNjMywgMHhmNmRiZWMyNiwgMHg0Y2ZmOTdkNiwgMHhmZTVkNmRmMywgMHgzNmEzZDYyNywgMHhmODExNmI0NCwKKwkweGQzZjc3MTdlLCAweGM1NjZiZjVjLCAweDdlODAyY2ZmLCAweDc0OTU2MzUwLCAweGI1ZGI5YzYzLCAweDkxYmYzZDNhLAorCTB4ZmZhMmM1YTksIDB4NjNiZjE1YWEsIDB4YjcyMjIyM2QsIDB4YmJkN2YyNDUsIDB4M2EzZjFmYmUsIDB4NjVmOWJjZDMsCisJMHgwZTJkZGE4NSwgMHg1NGUxYWU2ZiwgMHhmY2UxZTdmNSwgMHhhMjA0YWIzYiwgMHgyYjg2MGM5NSwgMHg1Y2U3NzVlYiwKKwkweDQ3ZTA2ODgxLCAweDcyYjk0OGIzLCAweGJmMTBkNmYxLCAweGE4OTI1MDMxLCAweGRkYTg4YmRiLCAweDhmNTUyNmUyLAorCTB4NDFkYmY0NTcsIDB4MTdmNWExYTcsIDB4ZjdhZTc3ZDMsIDB4OGE1N2JmM2QsIDB4NzYzZGY5MjYsIDB4MzBkN2ZkZDcsCisJMHhmZTAwNDVmZSwgMHg2NGNmMzNhZSwgMHg5YzNkMDI2ZSwgMHg1Njc0ZjlkZiwgMHgzNDM2OWZiMCwgMHg3MmJlNzJiZCwKKwkweDdkZjRlN2ZkLCAweGQ4YmU4ZTczLCAweGMyZGI2ZjQwLCAweDBiODVmNjRjLCAweGY0ZWIyNGNmLCAweGMyZTllOTI2LAorCTB4ZTdlY2Q5MzMsIDB4ZDlmN2Q0NGUsIDB4MDk2N2M1MDUsIDB4MDg1ZmJiNDcsIDB4OWUxMDY3OGUsIDB4OTcxY2UxYTYsCisJMHgwZTFhNmRlMywgMHg5ZDYxZmJiOSwgMHg2ZjhlMmUyZiwgMHg2N2JlMGUxYSwgMHg2OGUxNDFmMCwgMHg0MWJiNjNjYSwKKwkweGY0MWU1MzRlLCAweDhhN2Y4MzY0LCAweGZlMmNhNmUyLCAweDQyY2E2ZmVlLCAweGQyMmQ5N2ZiLCAweGE3Y2M2MzBlLAorCTB4OGUxNGI5ZjIsIDB4ZjBiNWEyN2IsIDB4NmU3Y2FlZmUsIDB4OGRlNDI2ZTAsIDB4OTI5ZGVhNzEsIDB4MjUzYmQ0ZWYsCisJMHhiNzVkMDk3ZiwgMHhlOGVkMjk5NiwgMHgxZWU2NGZhNCwgMHgzZWE0YjNhNywgMHg1YzgyZjQ5NiwgMHhkZTY1OTNlNCwKKwkweDM3MGJmMzI5LCAweDZmZTFkODk0LCAweGJjYzliN2FmLCAweGZkODk3ZDZiLCAweDM1ZjdlNjE4LCAweDRmYzRiNTY5LAorCTB4YzViZjc0NzMsIDB4ZGRhOTdmMDIsIDB4ZmFmZWZiMGIsIDB4M2YxY2UxZTUsIDB4Y2YzZWRiMzEsIDB4N2FmNjY5NGIsCisJMHgwMzVjNjliYiwgMHhlNmZkZmQwZiwgMHhmOWY0OGJlZiwgMHgwYjg5MGRmNCwgMHhlZGI2YTVlYSwgMHhmNjM5YzMwYiwKKwkweDhlMzJlOGE0LCAweGI0YTY0OTYwLCAweDZjZmIzZWUzLCAweGFhOTE3YzQ3LCAweDZkYzJkYmViLCAweGVhNWJhMWQwLAorCTB4OGZkNzhjMWIsIDB4ZWY1ZTA2ZWQsIDB4MmZmOWExNDgsIDB4NWVhNWUzZDYsIDB4ZmFiODQ4YjYsIDB4ZTM3Yzk1OWUsCisJMHgwNTJkN2NlNSwgMHhjMDA1ZDVlNywgMHgyYzVjZTcxZCwgMHhlZjIxNzNlNSwgMHg3OTE5YmM0OSwgMHhmMGExNWYwMywKKwkweDgyZjFmMTVkLCAweDlmOTVkODE0LCAweGM3ZjY5NGM4LCAweDhmMmM3YzUwLCAweGU1MTNkZTFhLCAweGQ0Y2Y1YzA2LAorCTB4ZGMwMGNhMWQsIDB4YTg5ZDc1OGQsIDB4NjhlOTdhZjMsIDB4YWZiZmI0ZWIsIDB4OGM2ODc3Y2YsIDB4MzA0NzdjOGYsCisJMHgxZDZmZDc3ZCwgMHgyMDI0ODg3MiwgMHhkNWFiNmU3MSwgMHg1YmQ0MjU4MywgMHhiZjQzZjdmZCwgMHgzNmFhZGZhOCwKKwkweDNiOTcwNGY5LCAweDkxNzM5NzgwLCAweGJkNDFkZmZiLCAweDBiNjIxYjA1LCAweGVkMTgwZmEwLCAweGYyMmZhZTE3LAorCTB4N2JjZDA3OTYsIDB4NWUzMzU2ZTAsIDB4ZjM5OTM1MDYsIDB4ZjM5OTc3ODMsIDB4MGQwNjcxNWIsIDB4ZTVkYmU3ZmIsCisJMHgyMWY5Y2MwNywgMHg5M2Y5Y2M4NywgMHgzMzcxZGMxZiwgMHhlYTg1NGZiNiwgMHhiZTg1NWZiYiwgMHg4N2YxZTdmMywKKwkweDdhOWY0ZTcwLCAweGUwNjg5NWY5LCAweGNiNWZmMTZiLCAweDBiOGY0MjBmLCAweDNjMjE2NzhkLCAweDdjNzNkMDJhLAorCTB4OTdhNjE0NWIsIDB4YmE1YWUyMmIsIDB4ZGM0NjQzZTEsIDB4MzA2Mjc2MDYsIDB4ZGYwYTU0ZGQsIDB4OTVkYTZiNDEsCisJMHhhNjhhY2ZmNSwgMHg2NzQ0YmQ5YiwgMHhjZmRlY2I1NSwgMHhlY2IzN2E5MCwgMHg1YWQzNjQ3NywgMHhkMGNlZTQzYiwKKwkweDNiZTNiYjcxLCAweGM2ZWJkMjIyLCAweDIxMTkyYTNlLCAweDM2NWVhZWNiLCAweGZlOGE3YzRlLCAweDFlMzdiY2Q2LAorCTB4MmJmMjU4ZjQsIDB4OTI5YmU1ODUsIDB4MDc1ZmIyOTcsIDB4M2VkZDFjZGQsIDB4NmY0ZTQ2ZmIsIDB4MzBmMGMwOWUsCisJMHg5YjBiOTJlYywgMHhlNTE0NDA5NSwgMHg4NzQ0MjM1ZCwgMHg4YmYxMWY3ZiwgMHhmMTIxMGRhNSwgMHhlMjQyNmI5ZiwKKwkweGNiOTlkNjgyLCAweGY3ZGFlZTE3LCAweDUwNDcxMGZmLCAweGUzODI3OGUxLCAweDY3OGNhZTJlLCAweDVlODAxZmY0LAorCTB4YjA0YTc5NTksIDB4YTlmMmFhN2QsIDB4ZTVjY2MyNmYsIDB4ZjVmMzVkNzIsIDB4YWRlNzE4NzUsIDB4ZjFjYjVkZjAsCisJMHhhYWNiNTc3YiwgMHhhM2ZlMzhlMiwgMHg0YmE4ZTk3MywgMHhjYjczODUzYiwgMHg1ZWFmNzczOCwgMHhmMjk1NTFiNywKKwkweGZkODRiN2JjLCAweDhlNzY5MWM4LCAweDg4NzZhYzhiLCAweGViY2QwNDQwLCAweGViZGQ5NDUwLCAweGQ2OTdlZmEyLAorCTB4YjJiY2IxNDcsIDB4ZTg1Y2U0ODAsIDB4MjcwYTk0OGIsIDB4NjI3YTRkYzcsIDB4YmJjNGVlZDAsIDB4ZDU2NWNiMmEsCisJMHhkNTFlMTJmMSwgMHhiMGZjNTFiZiwgMHhhOGMzNTcxZCwgMHgzMjkzZmM4YiwgMHhkODA0NDhiZiwgMHhmMjNhMGJiZSwKKwkweGY4MDNhZDA2LCAweDQ2OGJjZTBiLCAweDU5NTY1ZmE5LCAweDlmMDBmYjAzLCAweGFiNjg3MzhlLCAweGFkMTU1ZWI5LAorCTB4YzgzOGEzZjMsIDB4MzVlZmU2N2IsIDB4ZDdlYjhkYTIsIDB4MmMyNmZhZWUsIDB4M2Q5MDdiZjgsIDB4NDM1ZWY1OWEsCisJMHhmOTc1NTZmZiwgMHgzODY1ZmQ0YSwgMHgyMDc0NGZjYiwgMHg2Y2JlODM4NCwgMHhlZWJlZGNiYSwgMHg2ODIzOTIxZSwKKwkweDdiMGQyYjdkLCAweGRmMjk1YWY4LCAweDllNTFiMmRkLCAweDY3OWYyNDYzLCAweGQ2ZWI0ZTAxLCAweGVmODY3YzkyLAorCTB4Y2UyMDZmYTQsIDB4ZjcwYTJjNDQsIDB4ZWE1ZWY5NGIsIDB4Njc2NmViMGIsIDB4ZjJmNDVjYjEsIDB4NDAwYTVlM2YsCisJMHg0ODdiNjkxZiwgMHhiYWQyYmI2MSwgMHhiYWVmZDk3YywgMHgzOTczZmFmYiwgMHhlM2MyYTdmOCwgMHhiNjFjYjE4NCwKKwkweGRlNTE4YTZlLCAweDRmOTFmNTg3LCAweGM4NjRjNTMwLCAweDFlZjdmYWY5LCAweDRiZGVmZTZlLCAweDNlYzE2NmY1LAorCTB4YjI3NDFlMjIsIDB4ZmI5MGM0N2QsIDB4MmViZWI5MGQsIDB4MWFjOWNiNTYsIDB4NzVmZWI5ZDYsIDB4ZjA1MTZkYjEsCisJMHhmODhhODliYiwgMHg2Y2I3MjVlZiwgMHgzNmUzY2ZkNiwgMHgyYWZjM2Y1YSwgMHg4M2UyOTVjNywgMHhmNTE5OGZmMCwKKwkweDczYzk2NjQ2LCAweGVmNThmODY1LCAweGZiMWViZDE2LCAweDUzMmRjYTVmLCAweGU2OGViZGVlLCAweGM1YjBmZTU1LAorCTB4ODFhMTdiMGQsIDB4NjZmNWUxMDcsIDB4ZDdjNzBlMDEsIDB4Nzc0MDBiM2EsIDB4N2I0YWM3YzMsIDB4Yzk3YzkxZDksCisJMHgwYTg2MjNlNywgMHhhYjFhMzc4ZSwgMHhjYjM2M2JmNywgMHhjMjkzNGE2MiwgMHg5ZmE5MWU4OSwgMHgxZWQyNDVlMywKKwkweDk4YjQzNTFmLCAweDEzMjQ5NmVkLCAweDZlMmFlYmNjLCAweDRmZGViMjY1LCAweGY3ZjhiZGI5LCAweDRmOThiYmEzLAorCTB4NGExNDVkMDcsIDB4NmRmOGZiZjksIDB4MmYzOTI2Y2EsIDB4MGUyN2M3MmYsIDB4ZjZjOWMwN2YsIDB4MzlmYWUzY2UsCisJMHhlODgxZTA2NCwgMHgwZmNiMTg2OCwgMHgwZDhiNWYzYSwgMHhhMGI1OWJhMSwgMHhhMDg3OWMwNywgMHg2ZTk4MjUwNywKKwkweDhiNzE3NGNjLCAweGVlMmJlMTIyLCAweGJhZjdmMjkzLCAweGU4Mzc5OTU4LCAweGYxM2ZmNDgyLCAweDIyOWJhMGJmLAorCTB4NGVlZmYwYzEsIDB4ZGJkNjM0MGYsIDB4NzQ0ODFlOWQsIDB4ZDA3NDA4YjAsIDB4MGU4NDJmNTEsIDB4ZWMzZmQ1ODQsCisJMHhhNTQyZmNkYiwgMHgyYjg3NjIyMywgMHhhYjE0ODI4NCwgMHgxN2NlMjFmMCwgMHhlYmMzMjQ2NywgMHhiMTFmYWIxZSwKKwkweDEyYWRiZDc4LCAweDkyYWM3ZDJmLCAweGYxYjRlOGVlLCAweDdkNzAxNzg1LCAweDRiN2RlMjJmLCAweGJjMjg1YzFlLAorCTB4NDUyNGJmNTQsIDB4MWZhZDdkYjAsIDB4NzEzMTU1YzksIDB4NDUyMDRlZGMsIDB4YmIwYThlNTgsIDB4NWY2OGE1MTMsCisJMHgyZmZiMjMxMiwgMHhmZTM4MjllOSwgMHg1YWYzZmE4ZSwgMHgzNmU2NzRlMiwgMHhjMTVlZmUxYywgMHg0N2RhMDU3MiwKKwkweDlmN2I3MDE3LCAweDVhZjdiNjQ1LCAweDIxOWJlZDI5LCAweDk1YjY5OGY1LCAweDVjYmYxYzYxLCAweDJjOWY3NzcyLAorCTB4YjFjNGM5ZDAsIDB4YTIzOTNhNjYsIDB4ZGU5MTk1ZDMsIDB4OGRkNmVkOTQsIDB4ZjAyNDllNzUsIDB4ZmU4NmQyODMsCisJMHgzYmQ0ZGU3YywgMHgwMjc3YWI4YiwgMHhiMDQ3Y2Y5ZiwgMHhlYWIyNTlmYywgMHg2MTg2OTNjNywgMHg3YmM0MmY3ZSwKKwkweDkzMzNjMjgwLCAweGE4M2ZiM2I3LCAweDRmZjY2MWI0LCAweGI0YmU4NDNlLCAweDJiZGZjOWQ1LCAweDU5ZjViNWIyLAorCTB4ZjcxNWZmOTAsIDB4YTFmNDlkZGMsIDB4N2IwMWM2NzQsIDB4OWFkN2I1MTIsIDB4OTU3ZjljYTYsIDB4ZWRiZWM5ZDIsCisJMHg5ODllNDBlZiwgMHhmYWU1NWQzYywgMHgzZmI0ODU5MywgMHhjZTM5MDY4YiwgMHhkNmU3ZGYyNCwgMHhkMjZmZWEyNCwKKwkweDY5YzM4NTI4LCAweGE5NWQzYThlLCAweGE0MGZjMWI3LCAweDJjYTlmN2UzLCAweGU0N2Y5NzQ1LCAweDU1OTI4MTNkLAorCTB4NzNkMmIyN2QsIDB4YzkyMTNmZTEsIDB4ZmQzOTBiYjgsIDB4MThmZWEzNTMsIDB4YTVlNDAzNjUsIDB4ZmVlNGUzYmUsCisJMHgxZmEzZWEzMywgMHg0YjNhN2JmNCwgMHhkNWJmNTVjYSwgMHgwOWU0NjJlMSwgMHg3Y2JmNWNhZSwgMHg4Y2QxZDg3NSwKKwkweDQwYjZhNDY4LCAweGZkZTlhNTM2LCAweDc1ODRiZWM3LCAweGUzMTc0YzRlLCAweDc3ZWUwM2Q3LCAweGNmMTM2MmFhLAorCTB4Zjk4NGFkYjcsIDB4MWI5NjU0NDIsIDB4NDI5MWFiZjQsIDB4ZDZlM2ZhY2QsIDB4OGYyN2NjZmUsIDB4N2EzYjY5OGUsCisJMHg2ZThmZTUzNywgMHg4Y2VkMjQxZSwgMHhiZTYxN2RiYSwgMHg3MDdjYjA0YiwgMHg3N2U0OGM3NCwgMHg5ODIzOWI2ZCwKKwkweDVhYjg4ZmZlLCAweDNkYTRlMmEzLCAweDY1MGRlZDhlLCAweGI2N2M0OTNhLCAweGY4N2VmZWFjLCAweGVkMjJjYmI5LAorCTB4Y2M3ZTcxNDcsIDB4YzcxYTY4N2YsIDB4NTNhZDk0MjcsIDB4MDdiODYxMDMsIDB4NmY2Y2M2YjAsIDB4ZGVkNDhhYTgsCisJMHhiNTA4N2VjNiwgMHgwN2RhODQxYiwgMHhhM2EwMzM0MCwgMHhkMzBhMzVmMiwgMHg4ZjdhZGY2MSwgMHg5Y2Y5OTkzZCwKKwkweGNhZmFjMmUyLCAweDcwZmQwMzIzLCAweDljN2I5NDBlLCAweDg1N2NjNzFjLCAweDgyNmJlMGZkLCAweGI5ZDg3MGZiLAorCTB4YjU4OTA3MDUsIDB4MDA5ZjZiNjcsIDB4MjU4ZDI1NGUsIDB4ZTQ0NmVmYWMsIDB4ZmFiZmNjNmEsIDB4ZWMxNzA0YWEsCisJMHgyNmZlOWQxNywgMHhiZTBiNWVjMiwgMHhjNjRkNmQ2NCwgMHg5NjU1ZmNiZSwgMHgzMTMwZjE5YiwgMHhjOTE1OTVjZSwKKwkweGZiZTRlZDc0LCAweGFlNmQ0NzExLCAweGU4ZWZjYzJjLCAweGU3MDVhNzRhLCAweDkyMTVjNGVkLCAweDM5ZGY2OWJlLAorCTB4MWVlMThmNzAsIDB4M2YwNzA4YWIsIDB4ZmIyNTlhZDgsIDB4NWFkY2IzOWQsIDB4YmRmMjkxYmMsIDB4MTUxYWMyMWQsCisJMHg2N2NhZmEwNywgMHg1ZmQ4NWVmYSwgMHg3NWU2MmRmYiwgMHgwNDYyMTdlYSwgMHgzNWIyODllNCwgMHg3NGJjZTU2YiwKKwkweDk2ZDYxMGZhLCAweGU3MWE3OGMyLCAweDAyYjRlNmQ0LCAweGU0M2EwMWQ4LCAweGRiNjNmZWRiLCAweGJhMGVjNzAxLAorCTB4M2QzMGFlOTgsIDB4YzEwZTdhZDAsIDB4YmZkZTljOGUsIDB4ZTljYTMyZjQsIDB4Y2JkMDNlZmIsIDB4N2U4MWIxYzQsCisJMHg1MjJmMWI4OCwgMHhiNmJlMzhhYiwgMHhlMDc4NDkzZCwgMHg2ZDE3NmM3NywgMHg5M2I0OGYyYywgMHg2N2JlMDIzYywKKwkweDlmODMxOWYwLCAweDFkNzg1ZDEwLCAweGRlZjg5ZDg5LCAweDIyNTM0NzUyLCAweGNlYjViZTFlLCAweDc1YjNlOWMxLAorCTB4NzgyNTYxMmUsIDB4ZTI0YmFiNmYsIDB4NmU3NTBiZmMsIDB4NzJlYTliNGUsIDB4NzU4YmZiZjgsIDB4YThlZmNlMWUsCisJMHg5N2Y5YzExYiwgMHhkZjljYmNlYiwgMHhkMzgxMzc1NSwgMHhmOThhZWI1NywgMHgwOGFmYzFiYiwgMHgwYzk3Y2MzZSwKKwkweDI3ZjA2M2JlLCAweDNlMGNiZTgzLCAweDczNTc0YTE1LCAweDE3YjhjYzA5LCAweDFmOTllZDQxLCAweGViMTA3YzFhLAorCTB4ZjI3NDE0YjAsIDB4ZTljZjAzMjcsIDB4MDkyZmIxNGEsIDB4Y2ViNDUwZmMsIDB4NTIyOGZmMDYsIDB4MGFmZjNkY2YsCisJMHgyMmJkYjljMSwgMHhlZDIyZWQ5MiwgMHhmNmMxZjI0MiwgMHgwNzlmMDc0OCwgMHgwYmIxNzZhOSwgMHhkYmZhODlmNiwKKwkweDBlZWY0N2JjLCAweGFkNmY4NzNhLCAweDg4MzU4NDUwLCAweGM0YmM3ZjhlLCAweDc0NDFhYzI5LCAweGFjNTk2ZjNjLAorCTB4ZDk2NzNmMjksIDB4YTRmNDZmZmIsIDB4ZDE4ZGRmZmUsIDB4MWU2OWIzNzIsIDB4ZTI3OTdlNDcsIDB4ZjdkMTNmZjEsCisJMHg0Y2YyZmNkZiwgMHhmMzRlZjAyNiwgMHhjNjA4ZmNkOCwgMHg5ZjVjMmJiZCwgMHhkNzljYWI0NywgMHg5Nzk2NzY1ZCwKKwkweDdkNGI4NmZhLCAweGQ0Yjg2ZmFiLCAweDA4ZTNmMGI3LCAweGEyM2RjZjhhLCAweDJkMjRhM2UzLCAweGIxYTc5ZGY2LAorCTB4OWJhZWVjNmYsIDB4YjQ0ZWMwNDcsIDB4ZmE0YmRlNTIsIDB4ZjJhM2Y4MDQsIDB4MmJmOGU4YmYsIDB4NzBjNjE2NWQsCisJMHhmN2QwNmQyZCwgMHgzNmRjNzA2YiwgMHhiMjU4ZjVjMSwgMHhmMTRlZjk2MCwgMHhkN2JmMDEwYSwgMHgwM2Q4NWZiMSwKKwkweDYzODgyYjI0LCAweDQwYWZjMzhhLCAweDZiZTUyMjc2LCAweGFiOThlYzBlLCAweGU0MTFmNzdmLCAweDIxZDk2NTc2LAorCTB4NDczNWIzOTYsIDB4MDg3ZmM3MjQsIDB4NzA1Y2VkOWYsIDB4ODNiMmNhN2YsIDB4ZjZiNDRmNWMsIDB4NDY2ZmM1MzYsCisJMHhjMWRhZjUwYywgMHhjMGUzNDAzNywgMHg3ZWNlNjk1ZiwgMHgxYTJlZmQ4MSwgMHg1NDdmYmUxNSwgMHg1ZjJmN2ZhZSwKKwkweGEyZTI5OGFkLCAweGYyYWI2NDY3LCAweDk1OTY0NWRlLCAweDQyNTlmM2QzLCAweGY5MWE0NzNmLCAweDk2ZTgzMmJjLAorCTB4NjFjNzA4ZjgsIDB4ZGJlNjM3OTYsIDB4ZTdmMTA0MTcsIDB4NTk3YmZkNTIsIDB4YTcxNGM1OGUsIDB4OWQ5NjdmNzksCisJMHhjZDhmMzlmYiwgMHg5YmRlZmQ0OSwgMHhjZjlmNmU5MywgMHhmN2NkY2ZmYywgMHhhNWZhOGMwNSwgMHg2MGFiMDUzOSwKKwkweDgzNWQyZTRmLCAweGY2Y2VhNmE4LCAweDdkNTZkOTI1LCAweDdmYTkyZTVlLCAweDhiNWNlODM5LCAweDJlYTJmOGUyLAorCTB4OWU0MzA3Y2YsIDB4NDc1Zjg1MzksIDB4ZWY1OWZjZjIsIDB4YjllMTdjYWEsIDB4YWM4ZmUwMTcsIDB4OWYxODczZmMsCisJMHg3NTgzOTU1MywgMHg3ZmFlNGFmYiwgMHg4Mzk2MzRmOCwgMHg3MGNhOTFiYywgMHhmZjEyZTFjOCwgMHgzNWZkY2Y4NSwKKwkweGI1NWQ3MTFhLCAweDk3YmRhNDNiLCAweDZiNDhhM2QyLCAweGZiNjBhYWVlLCAweGY2ODc4ZDVlLCAweGFkZjgxYzQ5LAorCTB4ZmFmZmVmZDksIDB4ZmJlNjdmMGIsIDB4MTRiMDg0OWQsIDB4ZTM5ODZlM2QsIDB4N2M3NjZhZDQsIDB4YjA2YmYxY2EsCisJMHg3Mjg2ZjljNywgMHgxZDVmMWM3ZiwgMHhmOTU2YmVkYSwgMHg0MjU3ZjU5YSwgMHg2OGE3YzMyYywgMHgzYzg5OTdjZiwKKwkweDEyOTc5ZDhmLCAweGY3NmFlN2MxLCAweDJhZWM0Y2FjLCAweDFmYjQyODhlLCAweGIwYzFjZTIzLCAweDM1OGFkNWZmLAorCTB4NTljZmMzOWYsIDB4OTM4NGQ3N2IsIDB4ZmY2NWRlOTIsIDB4Y2ExZWVkYTEsIDB4MzEzODRhOGUsIDB4ZWVjNjIwNTAsCisJMHg1ODkzYjYyYSwgMHgyYzlmYzcwNSwgMHhlZDM4ZWRkNSwgMHg2M2Y2NGNmZSwgMHhkNzc3Mjc3NywgMHgyNDQ2YTdhZSwKKwkweGRkNWJiNTkyLCAweGJlYjM4ODMxLCAweGFlODRjNDI4LCAweGI2NDlmNGYwLCAweGQzY2Y2Yjk0LCAweGZiM2Y4MjNlLAorCTB4ZTU5NTM2ZTIsIDB4YTJkYjhiY2EsIDB4NmNkNDNmNzgsIDB4ZTIyMGYwN2IsIDB4NTI5ZTZiMDQsIDB4MmQ1OGVkZDgsCisJMHhhZmNlMzg1YSwgMHgxYzJhODc2NiwgMHhlYzFkZTdjMSwgMHhjZmRkZjE0NywgMHg1MTczZjE3MywgMHg4YjVmNDA0YiwKKwkweDY2ZWYxNDlhLCAweGMzYmI0ZjlhLCAweDY4MjNkMzFkLCAweGJlODBhZjNlLCAweDg3MTczNDg4LCAweGZmNDcwZDM1LAorCTB4MDc5ZmZjYzYsIDB4Mzc5MjBiN2YsIDB4YzgzZjM1MTcsIDB4ZWY1NDhkZjEsIDB4YmYzN2NiMDIsIDB4M2MzOGUwOGQsCisJMHhjMWRlYzkzYSwgMHgxODZlY2YzYywgMHg0NWY1ZmVjMiwgMHg1ODZiZGI0ZCwgMHhlMTE2ZDgzZSwgMHg4Y2U5ZTk4MiwKKwkweGU0MGY3Y2NkLCAweDgxZGUzZTgwLCAweDljOGYyOTZjLCAweDY3ZDFlZGQ1LCAweDFmNTk1MDVmLCAweDJmYjEzY2MyLAorCTB4Yjg3MWU4Y2YsIDB4ZjUzN2JiNDYsIDB4NGI2NjZmNzYsIDB4NWIyNmE3ZjksIDB4ZmVhMzRmZWUsIDB4ZDFhM2E2YTIsCisJMHhjOWZlYThmZCwgMHhmYTczZWY1ZCwgMHgxNjZmYmViZSwgMHgzZGYwYjY0NSwgMHgyMjNiOTNjZiwgMHhjOWUwOWVmOCwKKwkweGZlMzlmZjFkLCAweDdjZWYxYTM1LCAweDI1MDQ5OGQzLCAweGM4OWQ5ZjY4LCAweGJhN2RjOWI2LCAweGYzMmZjNjQxLAorCTB4MTNkNjE3MjUsIDB4NjczZDc4OWEsIDB4YWMyOGE1YjcsIDB4YTRkZTAzMmYsIDB4ZjFkZDlmYjcsIDB4MzY0M2RmMTIsCisJMHgxYzFmZWJlNCwgMHhiMTRiMzgyZiwgMHgxOGEzZGM4NiwgMHg4ZDcyMDgzZCwgMHhkN2JmNTVhMywgMHg2M2RiYTZkMSwKKwkweGFmZmE2ZmZlLCAweDU5MjdiZmQxLCAweGU0NzFmNThhLCAweGM0NjEwZDNkLCAweGJkNjRiODZmLCAweDI3YjczNTIyLAorCTB4YzFkY2RkZjYsIDB4OTdiODk5ZWUsIDB4NzE5MmRlMmQsIDB4ZmJiN2EyOTcsIDB4NzM3ZmU4MTEsIDB4YmI2NzhkZGYsCisJMHhiYjliNTJjYiwgMHgxYzVmZjIyNywgMHhlMDk1ODUyNiwgMHhjZTg4NzczMywgMHg4NzVhOTI1NywgMHgzNDdiYmVjMSwKKwkweDg2MTVjYTRkLCAweGI1NmFhZDNmLCAweGJmMDRiYzIyLCAweDNlNjc0NDVlLCAweGQwYWFmZGU0LCAweDQ5YzkwNzYwLAorCTB4NTYzZDdjNjcsIDB4NzFkYWYxNjEsIDB4OTlkOTQ2M2UsIDB4M2JiN2VhMmUsIDB4NzViZWMxMzcsIDB4ZWM3YzJlYzQsCisJMHgyOWQxN2I3ZiwgMHhkMmU5MjdmZCwgMHhmNjE4ZjIwZiwgMHg3MTU1YTUxNywgMHhkODc4YWM4MSwgMHhhOWJhNzRmMSwKKwkweDQxZTU0YTlhLCAweDI5YjU1M2Y0LCAweGVhMzkwNTkwLCAweDJiZGE1ZDljLCAweGE5ZmQwZTUxLCAweGFiZDY0MGFhLAorCTB4ZmQxNGU5ZDcsIDB4NjlhM2RmYTAsIDB4ZjcyYzBiYWUsIDB4ZDAxMjhjZWUsIDB4NDRhZjJjM2YsIDB4ZDNjOGJiNDksCisJMHg0MTYxNGRjZSwgMHgxY2JmNzZlNywgMHhjNzc3MTE4YiwgMHg2NmRmNGFmZSwgMHgwYmNjM2YzOSwgMHg3YjIyZmNmMiwKKwkweDVkZTQxNjYzLCAweGQxNDVkYzYzLCAweDM5ZGUzYzhkLCAweGUxNDViYzdkLCAweGEzOWZkMjhkLCAweDNlYTIxMWM3LAorCTB4ZWMxMzZmOGYsIDB4MjY3YjZhNzcsIDB4MzNlNmU1OGMsIDB4NjMyZjJkYzksIDB4ZjRjZjMzZmMsIDB4YTM4N2I4ZTcsCisJMHhiYjA1ZmU2OSwgMHhmMWM5ZGNiOCwgMHg4NmNmOTVlNywgMHhkM2RmMzAwNSwgMHg1ZGIxNDRjZiwgMHhjYTRkYjRlYiwKKwkweDEyYTNhNzYzLCAweDE0M2IxZTU5LCAweGY2NWNmMGY1LCAweGE2MTUzZDYzLCAweDVhNzQyZWMwLCAweDk0MjRmNjExLAorCTB4ZjJjMWVlNmYsIDB4MzJkZDY1NDAsIDB4MTI1NGQ3ZjYsIDB4NGIxYzgxN2IsIDB4N2ZjODA0ZTksIDB4NjdmNzM3YTcsCisJMHgzN2U5ZDE3YiwgMHg0MTVjYmU1NSwgMHhiYmUzNTdkZiwgMHhmZWU3MWEyNiwgMHgwODgwZjU4YywgMHg3OTllMjNiNiwKKwkweDgzZmQ2ZmY2LCAweDVhNDYzYmZkLCAweDNlZDk5NGY5LCAweDUxODNkMDY2LCAweGY5MjM5NDVlLCAweGQ0OGU1MTYwLAorCTB4NzFjODZlNTMsIDB4ZDExZDVhNzEsIDB4YWYzYTcwZjQsIDB4YzIwN2YyNTMsIDB4YjQ4MWViMDMsIDB4ZWY2MTEzMWYsCisJMHgzYmI0ZDIzZiwgMHg5YzA0ODk1MSwgMHgwOWZmNTkwMywgMHhmYTk1NmZiOCwgMHgzNjZkOTlkNiwgMHhiZTU1NTNmNiwKKwkweDNiNjVlNTEyLCAweGYxNTdkZGQ0LCAweDU1NGFjOTdkLCAweDE2OTVlM2NhLCAweGY5NTBkZjc5LCAweGZmYjY1NmU1LAorCTB4MmNlMzNmZDQsIDB4ZGUwODNjMDAsIDB4NmRiNmRmYWMsIDB4ZTQ3MWY1NTYsIDB4ZjRiN2E3YjgsIDB4ODA4ZDdlOTEsCisJMHgxMDc5N2Y5ZSwgMHhjNjI2MzVmYiwgMHg1OTUzNzk4OSwgMHgwNzkwZGFjZSwgMHgyYTdhNWViOCwgMHg2OWZlZTM4MiwKKwkweDM0ZTIyZjFjLCAweDczZjY3ZjJhLCAweDA1OThjZjA5LCAweGMxZDAyN2FjLCAweDRhYjlmY2NkLCAweDc3ZDVjZmU3LAorCTB4ZmI4MzEzNWYsIDB4OTU1ZGUyMTAsIDB4YjI1Yzc5ZWYsIDB4ZmY4MjdhN2EsIDB4ZDFlYmMyODYsIDB4YmYzZjlkMWMsCisJMHg4M2YzMzhmYywgMHg4ODM3ZGEyYSwgMHhmYmFjNWIwZiwgMHhhYjNmMTcxMywgMHg3OGI5NWNiMCwgMHgzMDhmMzVkNSwKKwkweDI2Yzc3ZGRmLCAweDVjZTIyZjcwLCAweGMxZDE4M2QzLCAweDkxY2ZhOGY4LCAweGJkYjNiMGZjLCAweGE2MmZlYjg3LAorCTB4NWJmZGIyZmEsIDB4MmQ5ZjNjZDEsIDB4MTNlNjBmMzYsIDB4ZGRlZmM3OGEsIDB4MDdmNTU5ZmUsIDB4MjI2Y2FmYjUsCisJMHhjYWVmMjJmOSwgMHgyZDEyNWZmNSwgMHhmODMzZmQzZiwgMHhmYjI3MzZjYiwgMHg3Y2ZmMDk1MSwgMHhhZGFjZWEzZiwKKwkweDdmZDYwMTY5LCAweGYzMjc3OWY2LCAweDcyYjFiMzlkLCAweGYzYTQ5ZmRmLCAweGY5OGQ5N2Q0LCAweGI2NmJmNGRjLAorCTB4OWE2MWZjY2IsIDB4ZDBiNDM5YzAsIDB4OThkN2VlNmYsIDB4OWIxY2VhZDcsIDB4NGY3OGI3YTQsIDB4ZDU0NGZjMGMsCisJMHg0N2Y0MGY4NCwgMHhiNzExZjlmOCwgMHhlZGM2ZDc3ZiwgMHg0MGIzZDc0MywgMHg0ZmIxZDc2ZiwgMHhiYTYwOGY5ZiwKKwkweGUyNGJkYjM5LCAweGQ5MGJlY2U1LCAweDhkMWQ5ZTdjLCAweGYzNGVmNDk1LCAweDc0ZGU4NTRkLCAweGI4YTY1NjM2LAorCTB4YTg3YTA0OTksIDB4Mzg3YTQ5NzQsIDB4ZWQ4OWE2M2IsIDB4ZWQ5NTY3MDIsIDB4YzliNTFlOWMsIDB4NzRjYjk1NzYsCisJMHg1ZmQxM2I3ZiwgMHhiNDA3ZTgxMiwgMHg2M2FhYmIwOSwgMHgxOWU0MGI0ZCwgMHgwNWUxZjlmMCwgMHg0ZjcwMDY5YywKKwkweDBlOGVkNDNiLCAweGQ3ZjljNTNhLCAweGUzMzNlZmFhLCAweGViZjYwNTFkLCAweDg5YTc5ZmIwLCAweGJhNmJjN2VmLAorCTB4ZWRiNTU5M2MsIDB4ZjAyNTdmNGEsIDB4NjE0ZGI1NTQsIDB4MTk3ZmRhN2YsIDB4MTNhY2QwZmQsIDB4ZDEwMDNmMGMsCisJMHhjMjlmNjJlNSwgMHg2ZTJjMjJlZiwgMHhmYjExNmRiOCwgMHhiZGFjOTZkMywgMHhhYzZmNzQxNSwgMHg2ZjdlYjE2MywKKwkweGYyYTJhOGZjLCAweDY5M2E4ZTdjLCAweDM5NWVlNGZmLCAweGRmZGYwMTllLCAweGVmMWQyOGU3LCAweGYzOGNiODc1LAorCTB4M2JmMGY2OGIsIDB4NDc0OTZlMzksIDB4ZmVhNDZkOTQsIDB4MzU5NDFhYWEsIDB4YTE5YTRlM2MsIDB4MTlmNWNhZTcsCisJMHhkOGIwMjI3MCwgMHhhYTNiZTc2MSwgMHg2ZWVlZDNkZiwgMHhiYjNjYzZmZCwgMHg5ZDMxY2Y5YiwgMHg5MzRkMWZjZiwKKwkweGRlZGI5M2Y3LCAweDJmY2NmNzk2LCAweDI2MjQzZDdkLCAweDQxZTQ1YmVlLCAweGY0NjA2MWJlLCAweGQwNjNiODg3LAorCTB4MjJmM2Y1MjAsIDB4MzVmNjFjZjgsIDB4Y2YzNGViZWMsIDB4ZmY2NjBkYWMsIDB4ZTY1M2NlNGUsIDB4ZTY2ZDgwZmMsCisJMHg3MzBlZWU3YywgMHg5Y2Q5YWYzZSwgMHhjZTZlYmNmNywgMHgwZWUzMDlmZiwgMHhmNDEzODRlYiwgMHg0MjM1YzQ2ZiwKKwkweGZkMGE0NmZmLCAweGY1MjYxZGRiLCAweDdmYTFlNDZmLCAweDhkZmU4NTIzLCAweDkxYmZkMGVmLCAweDNjOGRmZTg3LAorCTB4YTFlNDZmZjQsIDB4ZmU4NTIzN2YsIDB4ZmVlZWVmOGQsIDB4YmE1NTRlMTIsIDB4ZTA3ODE0YmQsIDB4NGVkZGJhYjgsCisJMHhmNzgxM2UyMywgMHg4OWQ5YzVjYiwgMHg1NTg1NDdjYywgMHgxNzE3YTVlYSwgMHhkOGZjYjJlNSwgMHhlMjlhNmY2MSwKKwkweDExOTM3YjYwLCAweGFkMTg5NThmLCAweDFjNDdmNzg1LCAweDJhYjJkMjgwLCAweGIxZGI4ZDM5LCAweDU1ZjZiYTFkLAorCTB4MmFhZTg3NjksIDB4ZWVjMjQ2NzAsIDB4ZTRmMmJhZDEsIDB4YTczZDg4MmEsIDB4ZDQxOGI0YTMsIDB4ZGI2YjY4YmYsCisJMHgyZjU2ZjgwMiwgMHhmZjdlYzAzYiwgMHg3N2VlZTVkNiwgMHg2M2Y4OTNhZiwgMHg1ZjExOGJmYiwgMHgwZjczODI1NSwKKwkweDI1ZjQ5YjdjLCAweDcxZWU3NzE5LCAweDQzNTNkYjA0LCAweDRkNjI0NGZkLCAweGQzZjIxZTUwLCAweGQ0M2U3MzNhLAorCTB4ZTZiZTA0MmYsIDB4NDZhYmVkMzUsIDB4NmM2ZmM3YzYsIDB4ZmJlMGM5NmQsIDB4ZTBlMzNlOWYsIDB4ZWE5ZjY5ZmIsCisJMHhjYjMxM2JmNiwgMHgyMTk4ZjJjMSwgMHgxYmNlMjNjZiwgMHg5ZjdhNTk3MCwgMHg5NWU3MDliMiwgMHhjMzFjN2ZhNywKKwkweGE2NTBmZGI5LCAweDY4NjE3ZWU5LCAweDA4Nzk3NjVhLCAweGY5MWRmM2NiLCAweGUzMDU4YTM1LCAweGJlNWY0Zjk0LAorCTB4Y2Q2YWY1OGYsIDB4ZWRkMmU3Y2IsIDB4ZDdiMmRjZmEsIDB4ZWVmMzRjNWIsIDB4ZDEzNzBmZWYsIDB4NzFhZGMwZDEsCisJMHg1ZWNjN2UyMSwgMHg3NzgzZmFhNiwgMHgzMWY4ODdhNSwgMHhhN2NhOTgwNywgMHhiZTYyMTlhZCwgMHg4ZDdjNWY4ZiwKKwkweGJkYWZiY2E5LCAweGExY2Y2ZTIzLCAweGZjZTRiOWZiLCAweGE1Y2ViMjVjLCAweDZmNWUwMmM4LCAweGM1NTRiZDY4LAorCTB4NmZmODI3ZjMsIDB4NGU1MmRiYzUsIDB4YzY3M2E3MmQsIDB4MmJiZmFmMWIsIDB4OWQ3ZjAwNTIsIDB4NTdlMDMyNzcsCisJMHg4NThiNjRkMSwgMHgzZjRjYWQ5ZCwgMHhmMzMyYzQ4NywgMHgxNTYxNWNiOSwgMHgyNzVjNTczZSwgMHg4NGI4NTVkZCwKKwkweDdmZGE5NjM3LCAweDY1NGM2ZDY5LCAweDQ3ZTVmYTNhLCAweDY4ODEyYWE5LCAweDNjOTY4MGQxLCAweGRlOGJhZmU4LAorCTB4ZTgzODcyN2MsIDB4OThkZDVhYWEsIDB4M2JmMmEyZWEsIDB4NWMxNmZmMTQsIDB4YjcxMzNmMjAsIDB4OTUyNDcxM2QsCisJMHg0OTVhYTkyNywgMHhhYTczYzI3ZiwgMHgxY2ZmNzAyZCwgMHgxOWVkZDFmMCwgMHg3Y2E0ZWYwMiwgMHg2OGE1ZTZiYSwKKwkweGU5ZDQxZjhlLCAweDBhZTZkNTJmLCAweDZjNmMxZDA3LCAweDgxNGY1OTU0LCAweGViOGQ0Y2ZkLCAweDhkOGQ5M2E0LAorCTB4NmJkMGUxZjEsIDB4M2UyOGM2MmEsIDB4NWMwNmM3YzgsIDB4ODUwOGZhMGMsIDB4ZWZlZmM5MDcsIDB4OTdiZDY5YmEsCisJMHg5NGY3YzkwZSwgMHg3NTJlNzU4YywgMHg0MWEyZmFjOSwgMHgwN2RlMzdiNiwgMHg1YzdiZDYzMCwgMHgzNzJiNDdkNywKKwkweDNiNzU5MWJlLCAweDdmZDczZjdkLCAweDdlMWI5ZTVmLCAweGJjNWRiYWRjLCAweDZkOTZjNWVlLCAweDdkMjk5MjViLAorCTB4ODVkZGExYzcsIDB4N2I3ZDJkNzUsIDB4MWE0OGY0NWMsIDB4MzI2ZGNiZTcsIDB4NzViM2ZkYWUsIDB4MjNlMTNlNGYsCisJMHhlMzc3N2E3ZSwgMHgwZmU4NzY5MywgMHg5ZGJmNTY5NSwgMHg2Njc5Y2RkZiwgMHgwZWYxMWRhMywgMHhjOGRkNmZkNywKKwkweDJkNmMxN2RmLCAweDcxODA3YjYxLCAweDExOTRlZWNmLCAweGEzYzNhZDk3LCAweGMxYjJhYzYyLCAweGRlM2NlYjQ1LAorCTB4MTU4NWNhNWYsIDB4YTY5ZTMyZTEsIDB4NDZmNTFkNDgsIDB4NTViNWQ2MDIsIDB4YTZiYWM3YzksIDB4ZTNiNzZmMTcsCisJMHhmNTg3ODFmZCwgMHhhNmZiYTE3YSwgMHhhMmI0ZjBmZCwgMHgzNTdiYjAxZSwgMHhkNGM3MWMyOSwgMHgxMTk5M2VkZCwKKwkweDY0ZmJjZmU4LCAweDRlMzRlNWRhLCAweGM4MWU1ZmE3LCAweDgyODdkZTdhLCAweDIzOWMyZmI0LCAweGY1ZmEyMWI5LAorCTB4ZjVkYTU1NjEsIDB4NGVmOTU1OWEsIDB4MzA5MDNkOTgsIDB4NWVjMmYyMGQsIDB4MzU0NTZlZjksIDB4MGEyMzQzOWQsCisJMHg3MTBiYjdhMCwgMHhhM2M1YTUzNSwgMHhkNzlkMTM1NCwgMHhmNjk4NDYxNiwgMHhiNDExMmNjMSwgMHg5YmJmYThhZiwKKwkweDdlNTMyZjQ1LCAweDUzMGNjNGZhLCAweDA3ZDM5OWZkLCAweDBiOWRmODg2LCAweDdmOTljYjNhLCAweDhmN2E2ZDVkLAorCTB4OWYyZWZhYTYsIDB4YzdiYjYxNWIsIDB4NGE3N2YzNTgsIDB4YmIzYTYyZWYsIDB4NWFiZWQ0ZDEsIDB4NDdiZDM1NGMsCisJMHhmN2E5ZThiMywgMHg2NTQ0Y2UxOCwgMHg1NGUxYzQ3NiwgMHg2NjU4ZjdlOCwgMHhlZmY1NDc2OSwgMHgxNjlkZmNhZCwKKwkweDdkYWZkYTYyLCAweDkyN2YzYzMzLCAweGZkOGRhNWU3LCAweDdkM2Q4NjA5LCAweGU4Y2Y3ZTE2LCAweGVmMGNiY2VhLAorCTB4YmM0NTE3ODgsIDB4OWExZGVjMzAsIDB4NjE2OTFlNTksIDB4M2M0ODU1M2QsIDB4YThmNmViNTQsIDB4OGY2OTFjZWEsCisJMHhkOGI1ZjZhYSwgMHhmMDRkOGYxMSwgMHg0ODEwYTZiNywgMHhiNjE1MWE2YSwgMHg0NzdkNTIzNywgMHhkZmNjOWM0YSwKKwkweGNjM2JlZjg1LCAweGRmZDA1MmY3LCAweDUyMWY5NDY1LCAweDQyYmZiMDRiLCAweGRkNjg2YmNiLCAweDYwNmExNzM4LAorCTB4ZDgzYjYyNDcsIDB4MDc2YzkzODQsIDB4ZmJkMWM2MzMsIDB4ZjQzNGU4MzcsIDB4ZmVkMDgwN2QsIDB4MzM3MDBjMDYsCisJMHhiYWRjYWVmZiwgMHg4MjJmNjBmZCwgMHhkOGUyYjRjZiwgMHg1NDlkYzQ3YywgMHg5NWIxNGQzNSwgMHg2ZjQ5NWVlNCwKKwkweDU0YmZmZjA2LCAweDdlYmY2MTYxLCAweDRjMDNlMWZiLCAweDU2MTVlZDZmLCAweGZmNGI4YzhmLCAweDc4ZDRiODc2LAorCTB4OTQzNWRkYTUsIDB4YmFkMDE3MGUsIDB4YjA1ZTdmZTAsIDB4MTVmOGYxNDMsIDB4ZTlmMDBmNTksIDB4ODEwY2ZhMDUsCisJMHg3MDE3NGE0ZiwgMHgwMWQ1ZTAzMywgMHg3ZTcyOTBiZiwgMHhlMjI4NmUzZiwgMHgwYTdiZTQyNiwgMHgxNDI1YzA1NywKKwkweDBiMzhmYTllLCAweDI3NzJjMTM0LCAweGYzY2ZjYmNkLCAweDhjNTdlOTBhLCAweGI3OGZkZDA4LCAweGIwZmZkOWRiLAorCTB4ZTUyZTExNDEsIDB4ZjUzMWUxYmIsIDB4ZjRlM2I0YjIsIDB4NmZlYjkwY2QsIDB4MjA3OGE5ZGIsIDB4ZDk3Y2RmYmYsCisJMHhlODNiZGZjYSwgMHhkOWM2NThhNywgMHhkZTY4OWY0ZiwgMHg1NGY0MWRhZiwgMHg4Y2NmZjcyYywgMHhlZWRjODljYiwKKwkweGRmNTc0NWRmLCAweGZmODY0ZjQ1LCAweGRkN2UzNDI2LCAweDE5ZTY0N2I4LCAweDFhYjdkZmEwLCAweGYzN2Q4NjI2LAorCTB4MWJlMWM0NGYsIDB4ZTc3NzQxZjIsIDB4ZTQzOWM3NGMsIDB4OTkxMGYxZDIsIDB4YmNmOWU1ZGUsIDB4ZTM5ZDJhMzQsCisJMHhiZWRkMzVjYywgMHg0ZDY5ZjA2OCwgMHg1YjhjNjc2ZiwgMHg3OGVlZTU0MiwgMHg3ZTZmN2JkMCwgMHg0MzU1NzE2NywKKwkweGZiZjA2YTQ2LCAweDFiNGFkYTM3LCAweDk3NTM4MWRiLCAweGUyNWE3M2M3LCAweDdjZTIyNTc0LCAweGRmMmU1OTI5LAorCTB4NGY3NjM5NjksIDB4MjlmODQ0Y2YsIDB4MjViNGFkOGUsIDB4OGZhZWE0NGMsIDB4NTUzNDM5ZGQsIDB4ODhiZTQyMGMsCisJMHg4NmQ3NGZkMywgMHhjZmI2MGFjZCwgMHgwMzJkZTkxYiwgMHg5YzYxZjllNCwgMHg4NzJkZTdlZiwgMHgzZjYxNjdhMywKKwkweDhkMTlkY2FlLCAweDJiYzVhMTkwLCAweGEyZWUxZmRmLCAweGEyZDliZTczLCAweGZlYzAxYTJkLCAweGNlN2M4ZGUwLAorCTB4M2NjNmQ3MGIsIDB4MzkwY2U3ZDgsIDB4NTE2NTcyYTMsIDB4NTUwM2M4NGYsIDB4MDRmMDM4ZmYsIDB4Yjk2ZDAxZTQsCisJMHhlYTcyMTEyZCwgMHg4MTU0MGZlOSwgMHhlNzNhMWFkMCwgMHhlNTM4YmU1OCwgMHg2YTdkZjQ5NCwgMHhhYmRmMDQ3MywKKwkweDJmMDhhNTNjLCAweGQ0OGI1MWZjLCAweGQzMmU3OTdkLCAweDMzN2NkYjc5LCAweGQyNzA4ZmM2LCAweGFlMzBjM2I4LAorCTB4YzYxMjRiN2YsIDB4MzBiMmY4ZjUsIDB4MzMzY2I2YWUsIDB4OGJiYjJiYTYsIDB4OTdhZWQ2OTEsIDB4YzMxNmRmZjIsCisJMHhhM2RiYWNjZSwgMHgwZjIzZjcyMSwgMHg0YjY0NWZiOSwgMHhjODc5MWZiOSwgMHhmNzIxNDhmZCwgMHhmYzBkN2JlMywKKwkweGQ3MWJmMDBlLCAweDZmNDNlNWI3LCAweDM5MTU4ZGY1LCAweDhlMWNmODRiLCAweDdmNWM4MWNjLCAweDAxZWUxMmJiLAorCTB4ZjE1ZGJhM2YsIDB4ODQ3OGU0ZjQsIDB4ZjllNTYyMGYsIDB4MjM1NzgyMWIsIDB4YjI0NmRkMWQsIDB4NWVkZDEwNTksCisJMHg4MjIxZDk3NywgMHg4OGM2ZWJlMywgMHg5YzdlNTM1OCwgMHhiZjU0ZDkyMywgMHgyYTY2OTVjOCwgMHhiZmE5M2ViZiwKKwkweDc3MDZmY2E5LCAweDUzN2YyOWJlLCAweGZkNTM0OGNlLCAweGE2MzE5ZTQ5LCAweGRjNDY4ZmZjLCAweGM1M2ZhYTYwLAorCTB4OWY5NGM1M2IsIDB4YTliNjYxMzYsIDB4MTJlMjhjZmUsIDB4NTljY2Y5NTMsIDB4YjNlNTRjOGIsIDB4Zjk0Y2RiYjUsCisJMHgzNGVlMmI1YiwgMHg5MmYxZmZkNSwgMHhhZjcyYTZlNSwgMHgwZTcxNTk3MCwgMHgyMzFmNDMzNiwgMHgzZTg1ZWZiOCwKKwkweDZmZWRlOTQ2LCAweGUzMDY0NjY3LCAweDRiMzhkNDc1LCAweDM1MGNlZjk3LCAweDU2ZmE5MDBkLCAweDM5ZjdhZTc0LAorCTB4MDllZTI1ZDAsIDB4ZThmYjBlODEsIDB4ZTJmNjgwZjcsIDB4YmYwNjE5OWMsIDB4ZmE5MTQwNjUsIDB4ZTgzMjRiNzAsCisJMHg2ODVlYjQyNiwgMHhmZDg4YThmOSwgMHg2NTk0ZjA5NywgMHg5ZjZlZTdmZiwgMHgzMTNlMjU2MSwgMHg0M2ZkYWFlYSwKKwkweGZiN2YyODMyLCAweDU2MTllNmMwLCAweGFlYTMyZmUyLCAweDNhNTJmZmQ5LCAweGRjZjE3ZmU1LCAweGYwN2NiMjM3LAorCTB4NTcyODRiZmUsIDB4ZmNjYmY3NzIsIDB4YzgyMmMxMzQsIDB4OWJjZTA2YWYsIDB4OGM3NWEzZTEsIDB4OGQ3ZDJlYmEsCisJMHhiYTUzZGE0NywgMHg1MjM1NTM4YywgMHg5ZDcxMDFjMCwgMHgwMGQyMDM4MCwgMHhmZGQyMjdkMSwgMHg1ZjQ4OWY0NCwKKwkweGI3MmNmYTI3LCAweGU4OTA3MTA5LCAweGQyMjFlOTEzLCAweGY3ZmRmMTRiLCAweDNkMjI5N2E0LCAweGQyMjk3YTRjLAorCTB4NDUyZjQ4NzcsIDB4Mjk3YTQyZGEsIDB4Y2RkNDNmZDIsIDB4M2E4M2Y0ZTIsIDB4YjFmZGRiOGQsIDB4OGZkMzgyYWUsCisJMHhmN2YwOTZlYSwgMHg3MTk2ZWE0ZiwgMHgxZjNhOTdmYSwgMHg4MDY0ZmY3ZiwgMHhiMDA4N2Y2MSwgMHg4YmYwYzY5ZCwKKwkweDA5MWZjMGQ1LCAweGRiMmVkZTdiLCAweGIxYmY2MGI5LCAweGFiZTc5NWUyLCAweDVmYWNjN2UxLCAweGIwMjM1YTIyLAorCTB4YjFhZDViNGYsIDB4ZmU5ZDFjMjcsIDB4YWRmOWVlYzksIDB4OTIwODljNTUsIDB4ZGVlMTljY2IsIDB4ZjhmMDA2Y2YsCisJMHhiN2NjNWRiZCwgMHhjNDQ3ZWZmNSwgMHg4NDA1M2ViNCwgMHhiNWQzNGZhNywgMHgzMzA3ZTBiMywgMHhjNjU2Y2EwYSwKKwkweGVlYjhmZjEwLCAweGQwMzYyNWViLCAweGFlOTY4N2NiLCAweGQ1ZWZhM2VmLCAweDAzYTdkYmY5LCAweGY3ZTg2ZGJkLAorCTB4YTY1ZGZkNWEsIDB4YWUzMjFkNmIsIDB4NmI2YjVhZjAsIDB4YmZkYmRiM2QsIDB4MDNjNDZlMTQsIDB4ZWZlYzMzZWQsCisJMHg1ZWY5NThmNywgMHhlMDg1ZjJiMSwgMHhjMTA0ZThmYywgMHg1YjJmZmFmOSwgMHg1YWYxMGUzOCwgMHhjZjg5Mjc5NywKKwkweGM0NmYzZDFkLCAweGZkZjg3NTA1LCAweGVmMTQxM2YxLCAweDhkZTFmODYzLCAweDJmYzI5Zjc4LCAweDNlNDFjNzVhLAorCTB4Nzc2OTFkMTgsIDB4MGRjNDg1ODcsIDB4MmZiZWRmYzAsIDB4YmNjNjhmZWEsIDB4YzMyNzdkZjgsIDB4OTdkNGZmYmYsCisJMHhmMmY3ODAyMiwgMHhiNWZlM2YwYywgMHhkODM0OTY4ZSwgMHhlMWRmNDYxNSwgMHgzM2M3MDRmMCwgMHhlNTdhZmUxOSwKKwkweGU3MTUxNjhiLCAweDY0YWYxMTg5LCAweDNiY2M2MzhjLCAweDE1ZmQ0YWNhLCAweDVkMjNjNjc0LCAweDQ3Y2E2YWViLAorCTB4NzU3ZDQ2NWMsIDB4OTNkN2Y3MjQsIDB4NDlkZGUzYmUsIDB4Yjk1NWU3YWEsIDB4ZWMzZTUzNWQsIDB4MjJhYmEzYzcsCisJMHg4Y2U5NDIzZCwgMHhhZmE5ZTgxMywgMHgzYWYxZWE5YiwgMHgzOGQwYmYwYiwgMHgxZWI0NjI0ZSwgMHgxYzdlODEyNywKKwkweDAxZGY5Y2IyLCAweDQ4MTA5ZDFjLCAweGEzOWZmYmM2LCAweGIwM2RkODk3LCAweGI4OGUzZTgzLCAweGI4Y2U4MmIzLAorCTB4MDg4ZmQ0MDUsIDB4Mjc5OGM3ZGEsIDB4MTVmN2VkZmEsIDB4YmNmMjE3Y2QsIDB4OWRmMGNiZDcsIDB4MjlmNDkyZTYsCisJMHgzZjVlN2FkYywgMHgyYzYzODVhZiwgMHgzZDU0YmJkYiwgMHhmYWU2MWM1ZiwgMHhjZmQxMDQ2YiwgMHg5MGRhMTlhZCwKKwkweDFmZGZkNDgxLCAweDdjY2M4Yzk0LCAweDdhMzIxN2Q2LCAweDA5NGZkZjYwLCAweDBiYjA0Nzc5LCAweGYwMzExOWZhLAorCTB4YmM3ZTg0ZmYsIDB4MDViZGVmMTIsIDB4ZTk0MmUxZGIsIDB4NDE4ZmMwYzgsIDB4YmJkZTA2NGYsIDB4MGU4MzJiYTMsCisJMHgxOGQwZTI4MiwgMHg2NTcxMWRlZiwgMHhmNGExN2Y3YSwgMHgxOTlkMWRkNiwgMHg0M2FkNzVmNCwgMHg4Y2YwMDFkMiwKKwkweGFlODMyMGY4LCAweGY4OWEyZjk0LCAweDJhZThlYjFlLCAweDA2N2Y5ZjA3LCAweGM1ZDI4NTVkLCAweGU5MjU3NDk1LAorCTB4MGUyN2ZlYjQsIDB4YmE0YWVmZWUsIDB4YzAwN2E0ZWEsIDB4NTVkMzg3ZTUsIDB4ZjhmMzhhOGIsIDB4NzlhN2E1OWYsCisJMHhlZTNjNjI2ZCwgMHg3NjVjOTdmZiwgMHhhYmRhNDQxZiwgMHg3YzE3YjY5ZiwgMHgxOThjNGNhNiwgMHgyZTEzMTIwZiwKKwkweDYyZWMxMDc1LCAweGJhMzJmNWExLCAweDdmNGExN2E5LCAweGJjNmVlZGExLCAweDZlNDY1ZGEyLCAweGZhNzFiYjcwLAorCTB4YWVkYTE5NTksIDB4MDQ3YWVkMTIsIDB4NzFjMjFiYjcsIDB4ZjdlOTZmMTEsIDB4MWE3MmRlMDgsIDB4OTk5ZTJkNzEsCisJMHhiOTBlNTM5MCwgMHgyZjJkZjI2ZCwgMHgyN2NjOGRlMSwgMHhmM2E3MTliYSwgMHgwOTYyNDNmMywgMHhlZTI0YmY5ZiwKKwkweDg1NGY0MGZhLCAweGNiOGQ2OTNhLCAweDQyZmFjODVkLCAweDcxZDc2NDYxLCAweGVkZWEzNzA1LCAweGRjNWQ3ZmM3LAorCTB4NGY4Y2Y5ODAsIDB4MzdlM2NiMzAsIDB4ZjVmY2YyZWEsIDB4MGZmYjkxYTIsIDB4YzZlMTQ3N2QsIDB4Y2U1OWViZGMsCisJMHg2MTQ3N2QwZiwgMHhmZTNkNDBmMywgMHg4MWE0NGQyMCwgMHg4ZjBhMTdkZiwgMHgwZWZlOWY5YywgMHhjZmJlYTE0NiwKKwkweGM5YmE3NDUzLCAweDU0NjJhYjcwLCAweDZhOWJlZTFjLCAweGFmMzIxYzU2LCAweDNjOGMxZGUzLCAweGZjZTNlYjhjLAorCTB4ZTljZmMyMGQsIDB4ZmRjMDIyNGQsIDB4MDkwM2EyNGMsIDB4NjEwOTFmZjksIDB4Yzg1ZmVmOTMsIDB4YWEzNWJhZmIsCisJMHg1NzkwZGZmNiwgMHg0ZmJhN2I4ZCwgMHhiMDU3YjUzYiwgMHg0YzQ0MGZjZiwgMHg0YTc3ODM5ZSwgMHhkNzE5MGRjNiwKKwkweDE3ZjZlZDBmLCAweGRiY2U1OWJhLCAweGI5NjBjOGVmLCAweDE2ZDJmYjEzLCAweGRlMjdjOWQ3LCAweDVmYmE3M2E0LAorCTB4OGEzN2JjYTYsIDB4ZmI0NmY3MTQsIDB4M2JmYTc5ZDEsIDB4YmY5MWM3M2EsIDB4NDBiOTY3MzEsIDB4NzM2ZWYxYmIsCisJMHhmZWQxOTNiYywgMHg2MTM4ZDcyNiwgMHg5Y2ZlZWY4ZCwgMHg3NzZmMjliYywgMHhkZWNkZDg2ZiwgMHgwNDJlY2Q4YSwKKwkweGJkOGFkZjdlLCAweDdkZWIxMGFhLCAweDQ1YTdiNjJiLCAweDRlNzY2MWE2LCAweGFmZDJiZDA3LCAweGEwZDhiOTJiLAorCTB4YzZmMWNlZmIsIDB4YzFkZDc4ZjMsIDB4Mjg2YjgwZDksIDB4ZmYzODBkM2MsIDB4ZWIxZWI4MDAsIDB4MDc3YmFlMGEsCisJMHhhYTM3OTYwOCwgMHhhZDVmMjQyMywgMHhkNTdjOTA4ZSwgMHg1ODc1NzM4MCwgMHg5ZWRlN2RjNywgMHg1NTI3ZjFjMSwKKwkweGY5YWYwOTBlLCAweDU2MTFhZWNiLCAweDJjMTdmNTEyLCAweDkzZjljOTFiLCAweGI4MDdjMjc1LCAweDYwOTJjNjlmLAorCTB4ZjdiMTBmMTAsIDB4Y2U1OGViMDksIDB4OWRkY2VmMWIsIDB4ZThiZGY4N2QsIDB4MmFlNzlhMjQsIDB4OTgzZmY2ODcsCisJMHg0MDgyYjlkZiwgMHhlMjg0NDkxNiwgMHhiZTdhODZlNCwgMHgwNWZlN2Y4ZiwgMHhhYTdkMDNkNSwgMHhmMWFmNzU0YSwKKwkweDk2ZmFjZWMwLCAweDdkNzFlZjJhLCAweGZlMTUyMDdkLCAweGQ3NTRmMTU4LCAweDBlNTVlOGYxLCAweDlmNDM1ZjA5LAorCTB4OThhZmQyMWMsIDB4NWZiMWFkZjcsIDB4ODBiZWZlODUsIDB4MGVmNTVmMjEsIDB4YzZkY2YxOTMsIDB4ZTRlZWY3M2QsCisJMHg5MmUxZTFhZCwgMHg5MzBlZjVhZiwgMHhlYmMwZDhmYywgMHhlZTdlYmIwNiwgMHg4OWMzM2Y1MywgMHgzYWZjYTY4ZiwKKwkweDk4YWJmNTljLCAweDJlNGM2ZjU4LCAweGMyODU4M2VjLCAweDc2MTg5ZmE0LCAweGY5MDRmNjk1LCAweDIyYjVjYTdlLAorCTB4OTQ1MTkxZWIsIDB4MTM2NDNjMmYsIDB4MDc2ZjJhN2UsIDB4OTI3OTQwNDMsIDB4MWZiNmIzZjQsIDB4ZWY4MmE0YmEsCisJMHhmYzI5NDUxNywgMHg2ZjcxODYzZSwgMHgyMmM5MmMyOSwgMHhjMjdjNDFkYywgMHhiZDM3MGVlOSwgMHgxMzkxMWI0YiwKKwkweDc5NDdjYTY3LCAweGM3ZWE5OTdhLCAweDk1Mzc0ODhjLCAweDk4MDc3YWM3LCAweDE0MjdlM2NhLCAweDhhM2RmMjk4LAorCTB4ZWZkNTM2YWYsIDB4MjlhYzZiMzksIDB4NjhkZGFjOWYsIDB4MzE1MjlmYWEsIDB4ZjgzNzk0ZDUsIDB4MjRmYzhhNTgsCisJMHhjNWI5MmNmYSwgMHhiMmVmYmVkNCwgMHgzNGZkNTM1MiwgMHg1Y2E5YTU1ZiwgMHgzMTliM2JjNSwgMHgyNWI3YWI0MCwKKwkweDgxY2YxMTI3LCAweGQ1OGM5ZmNhLCAweGUzZGU0MzRiLCAweGYwY2IwOGI1LCAweGZlNmI3N2NlLCAweGNiZGU1YTMzLAorCTB4ODBiOTEwOTksIDB4NmNjOWFmZGYsIDB4OWU3OTk5ZmMsIDB4MmM2YjQ0ZWEsIDB4Y2RiYmQ3YTUsIDB4YzkyOGIxN2MsCisJMHhiOTE3MWY5YywgMHg3MWRmODE0ZiwgMHg5ZmNjY2I5YywgMHg0ZDU4OTY1MywgMHhlYWU1MWZmOSwgMHhlNDRmMzRmYywKKwkweGJiZTNkZGIxLCAweDMwMGRhZmYwLCAweDRlMTQzZmUxLCAweDdlZmMwZjQ0LCAweGVmOWQzYjY4LCAweGNkZWJjYzNlLAorCTB4MDcwZjdlMzIsIDB4NzVlMDkzN2UsIDB4MGMxMjZmYzAsIDB4ODI0ZGY4MDcsIDB4MDQ5YmYwZjMsIDB4MjRkZjg3ZDcsCisJMHg5MzdlMWNiOCwgMHg4NzIxZjJlMCwgMHhkNjFmZjhjYywgMHg1NWZmYzY2MiwgMHg2ZmYxOTkxZiwgMHg3ODc3NjVkMCwKKwkweGE2NmFkOTFhLCAweDlhMjlhMTBmLCAweGJhNzgyZGYyLCAweDdlOTk5NGU2LCAweDFkNzNmMTQyLCAweDA5YjE1Yjg5LAorCTB4MDllMjg3YzAsIDB4YmUzODdmYjgsIDB4OGJlMDg2NTYsIDB4MzdmN2MzZjAsIDB4MzE0NzdiZGIsIDB4ZDdkNzFlN2UsCisJMHgyMDYwNmQ3NSwgMHgzYTJlOTdkZiwgMHg2ZmJjMGFhNCwgMHg3MWYzYWM2MywgMHg2ZDNmZGNmZCwgMHg4OTczMWFkNSwKKwkweDVkY2VmY2NmLCAweDc2M2UwNDkwLCAweGRiN2U5MDlkLCAweDRmMTY1NWYxLCAweDIwN2ZiYTgwLCAweDI5ZDk5YzY0LAorCTB4M2ZhODQzZGEsIDB4YWE1MmZlMmIsIDB4MjZkMjc0MWQsIDB4MGU3YmNmZGYsIDB4OTVkODc5N2MsIDB4MTIzZWIyZjEsCisJMHhmNmJlZjg0ZiwgMHgyN2JlNTRjZiwgMHhhOGQyYzQ3NSwgMHg4ZWFmOGY4MCwgMHg5ZjAwOWVkMSwgMHg4NGJiOTc5OSwKKwkweDhhMjQ5YmQ3LCAweDVjNDAyZmI3LCAweGE1ODU3ZmQ0LCAweGFmYjczZjIyLCAweDcyMmRjN2JjLCAweDg5ZmVmOTViLAorCTB4YTZlNzI3YzEsIDB4MmRhOWI4YzgsIDB4ZGQ3ZmJhYjksIDB4OWVhN2UzMjMsIDB4Nzc3Mjk1YzksIDB4NzFjNWM3OTQsCisJMHhmMmI5MjVkZSwgMHg4YmE5MGQ3ZSwgMHgwMTA3NzNhOSwgMHhkOTlkODczZSwgMHgwYjNhY2Y4MCwgMHg4YWQ5ZWJiZiwKKwkweDlkMDllNDdiLCAweDBmMjFjOGY3LCAweGEzZWNmZTQzLCAweDFmZjU3ZmNiLCAweDQ3NTgxYzNiLCAweDNhNjE3YWY2LAorCTB4MWRmYmZiN2YsIDB4ODFlMmY4YTYsIDB4ZmNhNjVkNWIsIDB4NTMyNGE2YTAsIDB4ZGNiYmMxZmQsIDB4NDBmY2YyYTYsCisJMHhjODdjYTk4ZSwgMHgzZjI5OGYyMSwgMHhhOTg0NjVhYywgMHg3OTFmNTVmZSwgMHhhZDkxZjk0ZCwgMHhhZmY1NGMxMywKKwkweGNhNmM1NTM5LCAweDQ3YjY4OGE3LCAweDhhYmVkZjAxLCAweGNkMWM1M2I0LCAweGI5ZmE5NzRkLCAweGU0ZGM3MDViLAorCTB4ZTU2M2JiZGMsIDB4N2VkZDVmN2QsIDB4NDZmYmM4NjEsIDB4ZDNhNmI5ZGMsIDB4ZDExZWE4NzUsIDB4ZThlNTJlZDcsCisJMHhmNTIxNjRmYSwgMHgxZmFlODc0NiwgMHhhMTNlYjMwYSwgMHgxZGUzNzFlOSwgMHhlNjdjNThmNywgMHg1ZTIzNzFiOCwKKwkweGQwZWY0M2JjLCAweDdiOGU4YWY1LCAweGUyZjE5ZDM0LCAweGYxNzhlMGRlLCAweGJmNWQ2MWI5LCAweGM3NWU3ZDFmLAorCTB4ZmJmY2U4N2IsIDB4ZWI3YWU1ZGEsIDB4YmRmM2I0ZWYsIDB4YTE1ZTYzMWQsIDB4OTZjOTQ5ZjMsIDB4ZDFkOWJiNzQsCisJMHhiZmFhYmRmNSwgMHg0NmZiNGFlNSwgMHgyNWYxNjY2YiwgMHgzNjEzZmRkMCwgMHg2ZGZmMmI0ZiwgMHhmM2M2MmI4NCwKKwkweGI3NWUyMmI0LCAweGNmNzYxN2ZlLCAweDhmNzdmNzBhLCAweDVjYjA3NzM3LCAweDY1OGIxY2NmLCAweDhlNWM5NGRlLAorCTB4ZGRmZDMzOGIsIDB4OTI0MTg4ODQsIDB4NzU4M2FkYmUsIDB4NzhjODRhZmIsIDB4ZGM2NDYzNzMsIDB4YmJiMTg4OWEsCisJMHg4ZmRkYmY0MSwgMHg2NDk5ZTEyNywgMHhmZjdjMGQxNywgMHhmMTY3YmY0YiwgMHhmNzRkMzVlMywgMHhiZDhlNjhhMSwKKwkweGNlM2Y3ZjUxLCAweDRjM2QwMzZmLCAweDU5ZjI0YjFjLCAweDViMTNjOTNlLCAweDQ5MTQzZDdhLCAweGNiMTNjYTcyLAorCTB4OGE5ZjZjYWMsIDB4Mzc1N2ZlN2IsIDB4ZGU3NWZhZmIsIDB4ZmE0YmU5OWYsIDB4YjIwM2U4MTAsIDB4MDdhOGY0MGUsCisJMHhiNzI5NTRmMiwgMHgyYmViOTIwYywgMHhiOGVlYmY1MiwgMHgxODdlYzBlNywgMHg0M2YzZjQyMSwgMHgxNzRmYmM3MCwKKwkweDY4NzRjNmY0LCAweDc1ZGZlM2FjLCAweGRiYTBjMWVmLCAweGZhMTkzODUwLCAweDNiZTNkMGFmLCAweGQyZjMxOWZiLAorCTB4MDdlYzY3ZTEsIDB4ZmRjNjdlMDMsIDB4YjY2ZGY3MTMsIDB4N2M5MTRkZTIsIDB4ZTIwMjY1OGYsIDB4NmRmYzBjZTUsCisJMHhjNmY2OTNjOSwgMHg1MDNjM2EwNSwgMHhiYmE4ZmMwZiwgMHg2ZTZhNDU3YSwgMHhlZGY3ZWMwYywgMHhlYWUzMWRjMiwKKwkweGVhM2IwZTgyLCAweDYyZTA5YmZmLCAweGZiYmJiZmMwLCAweDg3ZjFkZDZkLCAweDVkZjBiZTUwLCAweGEzYmFkZGY3LAorCTB4ZGVmNjdmZDMsIDB4OTA5ZjEwNWIsIDB4NWUzYTRiZjEsIDB4MWMyY2ZkZmMsIDB4OTQ3NzcwMTcsIDB4MzIzZjNmNzksCisJMHg5MTg5ZjI0OCwgMHhlNGZkZjQ4MywgMHhjY2Q2ZmQyMywgMHgwZmZjMDQyZiwgMHg5ZDU1MmJmNSwgMHhiY2YzYzg1ZiwKKwkweGRmOThhZDI0LCAweDhhZjljNmFmLCAweDM3ZjM1YmZiLCAweDg4NDdmOTRhLCAweDg3YWJjNGUyLCAweGUzNmY4ZmMyLAorCTB4N2FkN2NiZmIsIDB4NGE2ZGRiMDUsIDB4ZGUzZjE1MWIsIDB4NzVmMTJhZjksIDB4OWZiMzBmYWQsIDB4MDc3MmNkY2YsCisJMHgyNmM4M2JiZiwgMHg0NjU3NmE0ZCwgMHg1ZGE1ZjZlZCwgMHhjMmZhY2VmOSwgMHg2MGVlZjk0OCwgMHgwYmVhZmJlOCwKKwkweDJmMTliZDc1LCAweDg2ZGY2MDZhLCAweDE5ZWViZGZhLCAweDNjYjFmYmE0LCAweDljZjJjM2MyLCAweGExNTBkNzFlLAorCTB4MzdhMGU5ZDcsIDB4MGU2ZjdjYmYsIDB4MzFmNjMyN2EsIDB4NjcxZjFjYTUsIDB4M2YwZGNkYzAsIDB4M2NjZTkwZDQsCisJMHgwNzNjMzdjMSwgMHhiNTgzNzllNywgMHgwZWM1ZjhjYiwgMHhhYjdlMWFmOCwgMHg2MWVjYmYwZSwgMHgxYTExMjdiZSwKKwkweDc3Y2U3MThmLCAweDNmMmJiYTIwLCAweGViMWZlMTk4LCAweGY4NzQxZjZlLCAweGVmYzNiZWM3LCAweDg5NjkxZWQ2LAorCTB4NjlmMWRmYzYsIDB4NjdkZjI2ZGYsIDB4ZmQ1YmY0ZTksIDB4MjJjYmI4NjUsIDB4ZjAzMTUzZmQsIDB4ZmRlYWI1M2YsCisJMHg1ZDc5OGQ4OSwgMHg5NmQ1MGZkZCwgMHg5NDM4ZTRlZiwgMHg3M2I2OGI2NiwgMHgyY2VmYWQxMCwgMHg3Yjc3OGZmNSwKKwkweDlmZGM4OWVmLCAweDI2MTE3Nzg4LCAweDJiYTk3NmVhLCAweGNkY2JhZGQ3LCAweDhmZTkxNGEzLCAweGVmOGNhOWY2LAorCTB4NWVmMjA5ZjYsIDB4ODE1MWYxM2QsIDB4NGZjNDY3N2QsIDB4MDQ4MTExNGMsIDB4NGExZjg2YTQsIDB4ZTE5MjNkNWIsCisJMHg0YWExZjg2ZiwgMHg5ZTc5MjMwMiwgMHhkYTE3ZWEzMywgMHhlYjY4ZTRmMCwgMHg4NTE1NzdhMywgMHg1M2ZkM2JiYiwKKwkweDVjNjQ3ZGFkLCAweGFhN2U3NzU0LCAweGI5ZjM5NzY5LCAweGFmOTdlOWJmLCAweDE4M2U3ZWUxLCAweGI2ZTUyNjk0LAorCTB4MDM2ZWZiODYsIDB4MmFkODBkOWQsIDB4YWI2NzU4NmMsIDB4NGJiZmViYWQsIDB4YWJmM2E4NTEsIDB4M2Q5YWU4MTIsCisJMHg5NmFkZTI4MiwgMHg5NjJmYmMyYiwgMHhiZjg4YzIyYSwgMHhlNDZmM2U2MiwgMHhmOWVhMzUyZiwgMHg3ZGJmOTkyMiwKKwkweGVhYjdjY2E1LCAweGQxNmRhN2VmLCAweDI3NTgyMGVkLCAweDdhMDdhYzUyLCAweDRlZGQzNmY5LCAweGM1MjA3NTgyLAorCTB4N2MxZGYwM2EsIDB4MzVmMDc5MGQsIDB4OTBkN2MxZTQsIDB4MGE0MzVmMDcsIDB4YTVlZjg2YmUsIDB4NzYxNTM4YTIsCisJMHgwYWQzZjg1YiwgMHhmYzA3ZjY4MywgMHg3MjQxODU2OSwgMHhjMTY5ZmMxMywgMHg4MmQzZjg3OSwgMHgxNjlmYzNlYiwKKwkweDVhN2YwZTVjLCAweDY5ZmMzOTcwLCAweGQzZjg3OWMxLCAweDlmYzNlYjgyLCAweDNmODc5YzE2LCAweGZjM2ViODJkLAorCTB4Zjg3OWMxNjksIDB4YzNlYjgyZDMsIDB4MGU1YzE2OWYsIDB4Mzk3MDVhN2YsIDB4NzljMTY5ZmMsIDB4ZWI4MmQzZjgsCisJMHg1YzE2OWZjMywgMHg2Mjk5NmYzZSwgMHhkM2NkYjdmMiwgMHg1YjI4N2ZkZiwgMHg1MWY0Y2YxZiwgMHg5YjFjNTE5OCwKKwkweGVmZmRmODQ3LCAweGM0ZmM3Zjg4LCAweDM3M2MwZTk2LCAweDJlZGQwMjJmLCAweDQ4ZjcwZWFkLCAweDkwNGUzNzNjLAorCTB4ODkwOGI3NzgsIDB4OGNkOWI2ZTcsIDB4MzJlY2JiZTcsIDB4YjRlMzI0NWYsIDB4N2UwN2U5NDMsIDB4ZjQ5YjQyYWIsCisJMHhkZjg1MjE1YiwgMHg1NmZjMjkwYSwgMHgyYWI3ZTE0OCwgMHgyYjdlOTRjYywgMHhlMTViZjBhNCwgMHg0ODU2ZmMzYiwKKwkweDBhNDJiN2UxLCAweGY4NTIxNWJmLCAweDZmYzI5MGFkLCAweDJiN2UxNDg1LCAweDBhZGY4M2I0LCAweGY4NTZmYzI5LAorCTB4NTIxNWJmMGUsIDB4ZmRmMGFkZjgsIDB4ZmUwM2NkMDgsIDB4OTA1ZTYzMmIsIDB4ZjQ5OWZiZjMsIDB4OTM0M2EyNTIsCisJMHhlNTMyZWE1ZSwgMHhkNzA3ZTcyMSwgMHg1YzFmOWM4NywgMHhiODNmMzkwZSwgMHg3MDdlNzIxYywgMHg3MDdlNzIxZSwKKwkweGMxZjljODdkLCAweGRjODM0OWY5LCAweGVmMjBiZmJjLCAweGJjODNiNzA3LCAweGQ0MWY5YzFmLCAweGI2MDM3YmU4LAorCTB4MmUxYjQ5YWIsIDB4MzViNDhlYmMsIDB4NzE0Mjc5NGEsIDB4MmYzNTMxMDksIDB4OGJmYzI2NzMsIDB4MzUyNTRlYWQsCisJMHg2ZDg0MjNkNiwgMHg4NTk5ODBmOSwgMHgzOGY0ZDc5NCwgMHg2NmQxM2NjNywgMHhhZTM5YmUwMSwgMHgwNWE2ZjA4MCwKKwkweDBmNjVjNzA0LCAweDVjYzk3ZmZhLCAweGY5YjNmODZlLCAweGJmOWVmMDg3LCAweDUwZGViMDQzLCAweDM1YWZkZmEzLAorCTB4NGI4NDdiZGEsIDB4ZWZkNDZhNDUsIDB4MmY1ZDc3Y2MsIDB4MWVhMzdjNzQsIDB4NzlhMGNiZjMsIDB4OGY5OTYyOTAsCisJMHhiYmZjOTM3OCwgMHhhZjcwMGIyMiwgMHg5MTQ1OGI2MCwgMHg2NDJiYjhmMSwgMHg1ZDI4NzQzYywgMHhlNzkzY2FhZCwKKwkweGY2Y2IxNmZiLCAweDUzODhlMWZkLCAweGI4M2M1MTI5LCAweDE1NjU5MWVmLCAweDgwMDU2Yzg3LCAweDdlMDI5MmQzLAorCTB4NTYyZjJhZjcsIDB4YWI5MmQ3NWYsIDB4Y2M2NTg3MTEsIDB4MTI0YmIwZGIsIDB4ODY3YmUwOWYsIDB4YmQ4NGRhYTMsCisJMHhmZDE5YzY5YywgMHhlZmUzYjA4NSwgMHg0YmI0NGM3MywgMHhhMGVkMDI3OSwgMHgyOWY0MGU2ZiwgMHhmNDQxNGRkZSwKKwkweDllNGYyY2JkLCAweGI2ZWY5YTdiLCAweGZiZTljYmFiLCAweGFlNGI2ZGMwLCAweDg5YzVmZGM2LCAweGQzZGRiMmUxLAorCTB4Mzg2Njg5YmYsIDB4Zjg1MDZlNGUsIDB4NmRhOGNlOWUsIDB4YzlmYjhiYzIsIDB4M2E3ZTc1Y2IsIDB4NWVjYjliNzAsCisJMHhmOGJhZTNjZSwgMHg2ZmQxYTNkZSwgMHhiZTU0ODZjOSwgMHg1YTIyNTlhNywgMHg0NTBmNzEwYiwgMHgzZGY4NTUwYywKKwkweGI0NmUwMzdjLCAweGJlYjFkN2JlLCAweGIwMmFkYTJjLCAweGZiZTBmZjJmLCAweDdlMmUyNDRmLCAweGEzNGZmYjlmLAorCTB4MjExNmM2ODcsIDB4Y2IzNDUwYWUsIDB4MGQyNzQyZjcsIDB4ODNkOTU5MmQsIDB4ZTVmOWE1ZTYsIDB4YmZhM2ExN2IsCisJMHhlNzA2ZjI1OCwgMHg4NWVmOTI5ZiwgMHhlNzBjZjkzMiwgMHg5ODc5ZjFmOSwgMHhmZGY4NTNlZCwgMHg4ZGJlYzk5NSwKKwkweGVlMzcwNDk2LCAweDI1YjcyZjY1LCAweGUxMzZmZWEyLCAweGY1MDU1ODgxLCAweDhkOGFmNzA4LCAweDE2OGFlNTc1LAorCTB4YmQwMTUzOGIsIDB4NDFmMTAzODgsIDB4NjM5YzQ3ZjQsIDB4ZGYyNWU4M2EsIDB4NTlmN2UzNjMsIDB4MzY1ZDU4YTYsCisJMHhjZTQzMWJmMCwgMHhiMWM5NzEyOSwgMHgzMTUxZDQ4YiwgMHg0NDMyY2Y3YywgMHhkMGQ0Yjg0ZSwgMHg3ZTYyZTM4MywKKwkweDNiNGU5Yzc4LCAweGJhNWZlN2RmLCAweDg1NzJjOWQzLCAweGJlNjE1ZWI2LCAweGM2NWYzZTc5LCAweGY2ZGQ1NmJiLAorCTB4N2E0YjcwZTEsIDB4OTljZTljNjcsIDB4YmMxNmZmMzQsIDB4N2QyNjdiMDMsIDB4ODUwOGY0N2IsIDB4NzliZDg4ZTUsCisJMHgwZGEzZDcwNCwgMHhjZDNkZjEyZiwgMHhmMDZmOTU5MiwgMHgwZDRiOTQzZCwgMHhmYmNiNDUwZiwgMHg1MmZmZDI2YywKKwkweGIwY2RjM2FlLCAweGYxZDdjZDNiLCAweDY5YzdhZTUzLCAweGVmOTNhYjFkLCAweGNjMzlkMzNhLCAweDZhNWNhZWVmLAorCTB4MTE5Y2IxYjAsIDB4ZjIxYTJmMmEsIDB4OTExZWYxYTcsIDB4YzIzZmFlMTAsIDB4NjBkMTUzY2UsIDB4MGJjMDNiZTMsCisJMHg0YWFjOTRkNywgMHg5MWNhNTcxMiwgMHg3MzM5NzU4YiwgMHhlMzhkODM1MSwgMHhmN2Y0MmFiMiwgMHg2ZWZmNDJkNCwKKwkweDFlM2Q2MmNmLCAweGYzNTZmMTZiLCAweDQyZjI0ZmY3LCAweDdkZTM1MGU0LCAweGM5NGViZDRkLCAweGIwNjYwN2RiLAorCTB4YzZjNGI0M2MsIDB4Y2IzOWNkZmUsIDB4YjYyNDdjYTUsIDB4OTNlZTNmMGIsIDB4Y2UzZTU5Y2MsIDB4ZTY2NmY3ODIsCisJMHg5NDdhZjRlYywgMHg1ZGU5ZTgyZSwgMHhkODlhNGU1ZCwgMHg0ZmY4NjRlYSwgMHhmY2MxMWNiOSwgMHgxNGU1ZWE2NSwKKwkweDM5N2NkZmNlLCAweDk3OTlkMzk5LCAweGVlMmFkYzY1LCAweDVhNmU4MTIyLCAweDA3M2JlNDhiLCAweGQxZjJlYmVmLAorCTB4YzZiMWM0MGMsIDB4YzllYjNlNDMsIDB4ZjQ0ZWRkZjQsIDB4NzRmMjIxOGQsIDB4YWJjMDM1YmUsIDB4Mzg3ODgwMWMsCisJMHg0NGFkYTZkMSwgMHg4ZGM0ZWM5YywgMHg0ZDgzZWY4MiwgMHhmZDQ1MWM4MiwgMHgxNTVjODJjZiwgMHg1NjkxZmQ4ZiwKKwkweDI2NjFmN2M0LCAweDY4YmY3YzI4LCAweGY0ZGJkMGQyLCAweDQzZmI0MGZkLCAweGY3ZTEzZjMwLCAweDI5YzJiNDU3LAorCTB4Y2QzOWM0N2UsIDB4ODA1YmI2ZDIsIDB4Njg1ZjYzN2YsIDB4NWVmY2EzYmUsIDB4NjI5ZjI0ZWEsIDB4OWE5MjNiYzcsCisJMHg3NDFiNmZhZSwgMHhlNjNmYmExZiwgMHhiMjc2ZTg0NiwgMHhlYjA3Njk0OCwgMHhiMjYxOTNiMCwgMHhiN2M5MjQ3OCwKKwkweGQzZTQyNjZhLCAweGY2NmRiMGI5LCAweDYwODEwOWQyLCAweGNiMmI5NTFmLCAweGQ1NzZmYzdiLCAweDQxOTIwNmNjLAorCTB4YzlmYjU1ZmYsIDB4ZGU0NThiMWMsIDB4OTAzOTIzM2YsIDB4OTY4ODBiZWYsIDB4MmY5NDllYTIsIDB4NDAxNGEzNTksCisJMHhmNWU2MzIzZiwgMHgzOGVjNjdiOSwgMHgzYTRlYjBjZiwgMHhhN2Q4ZWQyOCwgMHhkMmU1MWVmMiwgMHg3ZTRkMzI3YiwKKwkweDhjYjRkMDliLCAweDM0ZmQ4ZGUwLCAweDI3ZjVhNjM3LCAweGY0Njg2MTBhLCAweDFjMmRlMTYwLCAweDg1ZWJmNzgxLAorCTB4MDA1NDI4ZjEsIDB4ZThiNzk4ZjEsIDB4M2JjMWVhZjksIDB4OTczYWI0ZmYsIDB4OTFmOWM0ZTEsIDB4YTY2ODdkYmYsCisJMHhlMDVmZjIyZiwgMHg2YjE0NzM5MywgMHg0YjFiZGZmMCwgMHgwZDU3NjhiMiwgMHg1MGY3YzFlZSwgMHgxMWJmMDNjNywKKwkweDllZmM2ZGI5LCAweDRiYjY0YTQ0LCAweDdiMTBhOWYyLCAweDg5NjBmNTRiLCAweDRiYmI1MGM3LCAweDc3M2NhZTU5LAorCTB4N2E5ZGQ1ODQsIDB4ZGM3YmZiMmIsIDB4ZDYzNGI3NmMsIDB4YmU2NmNjN2QsIDB4ZjNhNDZiZTcsIDB4NWVlN2ViMDcsCisJMHg5ZWU3YmZkZCwgMHhmOTE2YzNjYSwgMHgxNjYzYzJmZSwgMHg4ODU3ZjZmZiwgMHhkMGY3MmY1ZSwgMHg4ZmJkNjA2NiwKKwkweGU3OWVkZTIxLCAweDhjZmFmMWFmLCAweGY4M2E0Y2Y3LCAweDg5NmVmZTk1LCAweDk2NDc0ZjQxLCAweDJhZmJlMjVkLAorCTB4Yjc3NjkxYTUsIDB4ZTU0ZjQ0MWEsIDB4MGZiZTE1YWIsIDB4ZGU0Y2JhNWEsIDB4MmI1NmQ2ZTcsIDB4NmU4NDVkZjIsCisJMHg5OWJmNThlYywgMHg5ZWZjYmZmZCwgMHgxMTdlNmZkNSwgMHhmODc1MGIyZSwgMHhiY2I3YjFjZSwgMHg4NGViNDhlMSwKKwkweDNkOTc5ZmVmLCAweDM0N2M5MzYwLCAweDBlZmI4OTkwLCAweGYyNzEyY2I3LCAweDdiOWZkOWJiLCAweDBmMDZhYjhhLAorCTB4OGMzYzllMDMsIDB4ZTVkODcxYTcsIDB4OGM0YjdmNTQsIDB4NGJkZjA0YjYsIDB4ZDg0MWNiNDUsIDB4ZmNmZWU3MWQsCisJMHhiYThmN2U2ZCwgMHhkZjhkMzliNiwgMHg5NWQ5MmNiZiwgMHhkOWVmMGFiZiwgMHg3ZWQxZWU3YywgMHg0NDk3ZjU4MiwKKwkweDQ3OTBlY2JhLCAweGY5NjIxYTZhLCAweDUzZGI5ZTdjLCAweGRhMmJjZmJmLCAweGUwNjdjZmQ4LCAweGQyYzFiZWU3LAorCTB4YmU3ZDc3OGUsIDB4YWVhMmU3MWMsIDB4NmNjMDExNTcsIDB4YmFmNTRjNTMsIDB4ZjYxYTYzYjYsIDB4NGIzYjUwZDEsCisJMHhkZjIxYmJlOCwgMHhkZDgxNTc2NSwgMHg1ZjY0MWVjNCwgMHhiNjMyZWMzNSwgMHg3MWIzNjM5YywgMHg3N2IxY2ZhZSwKKwkweGY3M2VmN2ZkLCAweGY0MzdmM2VhLCAweDdhMWRmOWRhLCAweDllZjhlZTZkLCAweDJhZDdmZjkwLCAweGNiZDNkODJlLAorCTB4NzEzM2RkMjMsIDB4OTBmY2ExYmYsIDB4NjJiNDkxMGQsIDB4YmU1YjljNjIsIDB4N2M4ZjczMWYsIDB4OGVmNGE2M2YsCisJMHg3MzY3ZTY3YywgMHhkYzAyOTM4MCwgMHhmYmM5MTkzYiwgMHhlOTRmZGNiOCwgMHhmYmY3ZWU5MCwgMHhmNDBmNmJhZCwKKwkweDBhN2EwZGQ5LCAweDgyMWRmOTc4LCAweDFlZDc5NzcyLCAweDk1MWYyNDE3LCAweDc3YTYyYTM1LCAweDBiZmM4YzI0LAorCTB4OTdjOTU1ODMsIDB4ZmMwMGRkNDgsIDB4OWE0NzdjN2UsIDB4Y2QzOTZmMWQsIDB4ZjEwOTMxMjEsIDB4Mjc0MTdiOTksCisJMHg1MWRiM2FjMywgMHg5OTNmOGUzZCwgMHhjYTBlMmU5OCwgMHhmZTE0YmRmNywgMHgyZjE4ZTRiYiwgMHg5NTViZWZmOCwKKwkweGMzZGY5YTM2LCAweGRmMmNmYWEwLCAweGM1MWMxYWVkLCAweDY4Yjg5NWZkLCAweDVkNDg2OWRkLCAweDAzODI0ZjNjLAorCTB4M2VlZGE5YzMsIDB4ZTNjZGNmZWEsIDB4MDJjYTNlMzAsIDB4MDdlYzFiN2UsIDB4NDJmNzEwNzMsIDB4N2U1YzViZjksCisJMHg2ZDI5YzYxYiwgMHg2OGQ0ZWY5MCwgMHhkYTM4ZTQ2YiwgMHgyMGZiNThlYSwgMHg5NzU2MDdjOCwgMHg1Y2IwNGZiZCwKKwkweGJkZGYyMGQ4LCAweGRkZmZhMzllLCAweGNiMmY5YTExLCAweDI3MDRlNWNkLCAweGVlMzNiM2RjLCAweGFiYzI4NmRkLAorCTB4Nzk3ZjlmNDQsIDB4Y2U1OWFjNjMsIDB4MDM2YjVjNmMsIDB4ZjM3NzY2N2UsIDB4ZGQzOWM2NWUsIDB4MzBkYTVkMGUsCisJMHgyODM3ZGY4NiwgMHhiZWY5N2FiNywgMHhmYmMzYTY4YSwgMHhmNzljZGJiMywgMHg3YjMyNWZjMiwgMHgzNGI2MjNkZCwKKwkweGIwNjVmZmNhLCAweGU5Y2Y2Yjk0LCAweDdhNjI3MWZiLCAweGE5ZGY5MzIwLCAweGYxYzljZGJhLCAweDhkNWRiM2UzLAorCTB4NzgwZWRlYmMsIDB4ODFmMDQ0M2YsIDB4NjYyYWUyZGMsIDB4Zjg5ZDEzNzgsIDB4YmU1OTZmMTAsIDB4Y2VkZjhjY2UsCisJMHg3N2M5NDRmOSwgMHhmMDk1ZDdmYywgMHhkNTYwNWJmZSwgMHg3OWUwYWVlYywgMHg4OTk3ZGZhYywgMHhiNGQ5YTFmOCwKKwkweDk3MGVmMWVmLCAweDFmN2M2OTcwLCAweDMzNDNjNGY2LCAweDYyMDVlZmY5LCAweGU2Y2YxYzllLCAweGJiYzc4ZjcxLAorCTB4NGMzNzQ0NTMsIDB4MThmZDA2ZDcsIDB4ZjE4ZGYzZjcsIDB4YjRhYjFlYWMsIDB4NmJiZTdiYzcsIDB4NDIwZjdhOWYsCisJMHg3YzI3YWY0ZSwgMHhkZGQwMGZjMywgMHgwMmUzYjUzZSwgMHgyZjZiOGQyNiwgMHg1ZTA3ZWY5NywgMHhmZGY0ZWZjMSwKKwkweDZhMDFmZmZhLCAweDAwZDM2YzkxLCAweDAwMDBkMzZjLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLAorCTB4NjU1NTVjN2IsIDB4ZDZiYmYwYmEsIDB4YzBkODU3ZGEsIDB4NTFiMDhiNjYsIDB4NjIwMjBkYzAsIDB4MTAxMDZkMTEsCisJMHg4MGExNzUxNSwgMHg2MzZhNzM1YiwgMHg4ZGM0MjkzNywgMHg5MTAxNTBiNywgMHhmMzlmYThhYywgMHhhOTZmMGRiMSwKKwkweDk2MmEyNjk1LCAweDhkYTZiNjc1LCAweGIyNzA3NTk1LCAweGQ5OWIxYjQ2LCAweDBmNWQ5YTZhLCAweDM5ZDM4ZDNhLAorCTB4MzJjZGI2NTMsIDB4MzRkMjA5YmIsIDB4OTlkMzdkOWYsIDB4ZGU3OWU3YmUsIDB4MGRhZjYwYjUsIDB4ZjlhNjc1YTQsCisJMHgzZWZjZWZjZSwgMHg3ZGY1ZTNmYywgMHhlZTdkN2JkNywgMHg3NjVlZjNjZiwgMHhiMjRjNjMyMiwgMHg5ODc4MzYzMSwKKwkweDhjODFiMTgzLCAweDQ1OTMxODE5LCAweDc3YTEzZmM4LCAweDYzMDJlZGZiLCAweGJlYWM3MTk1LCAweDI4ZDIxMzJkLAorCTB4MGI2YmZmNTYsIDB4ZGZlM2RmNjMsIDB4YTI3NDllZjgsIDB4OGYyYzY0NTMsIDB4NWRhMGRiYjEsIDB4MTBhZjdjMWIsCisJMHhkNmNjYWJkOSwgMHgyOWQzM2RmMywgMHgxNDhhZjdkMCwgMHhkNDFkZDMzNiwgMHg3ZWMzZmIxZSwgMHgxM2VmZDVlMywKKwkweDMzOGI2OWZjLCAweGUzYWJlYTdiLCAweGJiNzhkODU2LCAweDlhN2VkMGE5LCAweGRkOGJlYjA1LCAweDNlYTgxYmY1LAorCTB4MjZlOWIzY2YsIDB4MzYzMmM1OTEsIDB4ODdmZjA0ZGIsIDB4N2I0ODk0YTUsIDB4MzJlNmM0NTYsIDB4NzA1N2IwZDYsCisJMHhlMWE4YTExYSwgMHgxOGIxODk0MSwgMHhmMDhiOWY0OCwgMHhiZWM2NjRiMSwgMHgzYmNkZjg2OCwgMHhjZmJkNDBiNywKKwkweDY0YWY2ZjM3LCAweDM1ZTY3YjQzLCAweDM5OGEzZmM3LCAweGY3MzYzMDQ2LCAweDBjNzMzNjUyLCAweGE1ZGU2YzYwLAorCTB4MGY1Njk0MzEsIDB4MDczODY0ZjMsIDB4ZjhkYmQ1MDYsIDB4YzYwN2JhNWMsIDB4ZmIyZGFkYmYsIDB4NWEzMDdmZGMsCisJMHgzMGU1OWZiNywgMHhiZjczZmVmNiwgMHhlODY4ZTNmZCwgMHhkZTlmMzE5NywgMHgzYWNmNGQ3ZCwgMHhhMTNlYWQ2NiwKKwkweGMzMDRiMmFmLCAweDRkNzNhZjhkLCAweDgzMTU1NzQ2LCAweDE4YjZjZTc5LCAweGNkMTQxMjFjLCAweDY0YzU1ZTVlLAorCTB4MzNiMzI3OTgsIDB4MTNlNDFhNjcsIDB4NDIyYmNjNzUsIDB4MTZmZDZjYmYsIDB4ZjNlYjA0ZDksIDB4YjU1N2ZlMzAsCisJMHg1ZGE5OTA1YywgMHg4MjRmYmU2MywgMHg3YTg2MGNmNSwgMHhkZjVlMWNjNiwgMHg1OGY3ZjAwYywgMHg0ODg0NjcwYywKKwkweDkxMmRlOGE4LCAweGNkYmMxOTAzLCAweGY4M2QyOWY3LCAweDIxYTkwYzFkLCAweDg5ZWYwN2E3LCAweDVlY2MxZDBhLAorCTB4N2I2ZDA2NTcsIDB4MzMwMzA1ZjAsIDB4NjVlYjBmOTYsIDB4ZmNlYWFlMWMsIDB4YmZmMzJhYTcsIDB4ZmIyMGJkNmQsCisJMHg0ZTBkZGVhMCwgMHgyNzU3Y2YwNywgMHg3YWMxZTYxYiwgMHgzNjRmYWNlNywgMHg1Y2I0ODZjYywgMHg0NzNlNWVmOSwKKwkweDJmOGRkZTViLCAweGNjYWY4YWFiLCAweDRmNTg3Njk1LCAweDU3YzcxYjU3LCAweGUxM2QzYWQ3LCAweDJmNGY2YmFiLAorCTB4YTkzMTI1N2MsIDB4MDA3NzFlNjcsIDB4OGUwMGQ4YmUsIDB4ZTM4MjM2MmYsIDB4NTdjMDUzMGIsIDB4YTgyZjMzYTUsCisJMHg3YzcwYmZkZSwgMHhlZGZlN2VjZCwgMHhkMDc2NWUwZiwgMHhjZWZmYThmYSwgMHgxZGJlOGQwNywgMHhiNmFjZmZkMCwKKwkweGYyYjc4NGJkLCAweGM5ZjQxYmQ1LCAweDk5Y2VhZjUwLCAweGRiNTE3MDRjLCAweGI2Y2ZhZWNmLCAweDZkZTc4MDMyLAorCTB4MWRlYmI3YWIsIDB4ZThlZWZjMTYsIDB4OTUyMWVlOTMsIDB4NDEzZjEwNTksIDB4Njc5MDA5OWUsIDB4M2JiYzQwYmEsCisJMHgzOTdlYTdhMiwgMHg5YzYxN2JhNCwgMHg5MWNkOGIyNSwgMHg3MTllZGFlYywgMHgzY2Y0MjhiNiwgMHg4NmRhM2ViYiwKKwkweGFmYWVjZGUzLCAweDcxNjU4ODdhLCAweGY2Njc3N2ZhLCAweDY2YjNiZmU2LCAweGEwYjMxN2NlLCAweGIzY2ZlNDNmLAorCTB4ZTQyNGNlNDUsIDB4ZDQ1MTBhOGIsIDB4M2U5YTliZjAsIDB4Nzk4Mzc4ODQsIDB4MzVlMDA2M2QsIDB4ZGJjM2ZlMjMsCisJMHgwYzM4NDY5ZSwgMHg2Y2U2MTQ1ZSwgMHhhOWE5NGY4NiwgMHg4YjhlMWYwMSwgMHgzNmYzOGNmNCwgMHg4MjZiY2M4OCwKKwkweDgxMzVhOTdhLCAweDU0OGYzODhiLCAweDg3NmMyOGEwLCAweDUyOGQ4NDY5LCAweDFkZjkwYjE2LCAweDQ4MDJlZDMwLAorCTB4ZWU5ZTI0NTMsIDB4YzNmNWYyNzMsIDB4Njc3ZTNmNzcsIDB4NWMzYzgxMzEsIDB4YTFjZjRhYmYsIDB4M2I2MDZhZjQsCisJMHhmZTAwYTc1NywgMHhkOWNjMzEwZCwgMHg0ZmExZThlYywgMHgzZTk1MWZiNSwgMHg2ZmVkZmE1NSwgMHg3MGFlN2I3ZCwKKwkweDM5OTM2NzdkLCAweDMzODY1OTNjLCAweDU2ZTMwNGM5LCAweGI5Y2MzYzNlLCAweDNhZmNiODQ2LCAweDBmMDA2MTBkLAorCTB4ODE3YWQwNWIsIDB4N2Q2YzBiNTgsIDB4OTAzNTM3YWMsIDB4MGZjZDc2NTcsIDB4MjRhNWI3YWQsIDB4ODZmNThmYjYsCisJMHg5M2U1NTNhZSwgMHhjM2NlMjYzOSwgMHgwMTUxMjdjMCwgMHhmYWQ3Nzc5OCwgMHhmMTBjNTFhMSwgMHhjYTJmMzAyZCwKKwkweGNkOGJiMzlkLCAweDVkNWJjZTIyLCAweDUwNGQ1M2Q3LCAweGJiYjZlNjE5LCAweDMzZTk0NGM5LCAweGMzNjhjMDRkLAorCTB4NzY0ZDNlMDAsIDB4ZTRkZjNmY2EsIDB4MjlhZGI0YTAsIDB4OWRkYmNhODMsIDB4NjMzZjlhMzYsIDB4ODA2OTg4ODEsCisJMHg4NTMwOGFhNywgMHg4ZjNjZmRmZiwgMHhlNTQxNjVlNSwgMHhlZTljNmQ1MywgMHgxMTAzNWI0ZSwgMHhmZDM5MjBiNiwKKwkweDBkNzliZDcxLCAweDBlZmE0MjhiLCAweGNjZmM4ODNjLCAweDVkYjI4NzFhLCAweGY1ZTlkNDMwLCAweDRjYzQyMzY3LAorCTB4M2YzZTRmYTQsIDB4N2QxMmRkYjUsIDB4MTYzZmM5MjcsIDB4MDJlYzcwNjEsIDB4MjRiMTliOTYsIDB4ZTAyMzc0ZmIsCisJMHgzOGYyZWU2YiwgMHg5YjEyOTAyNywgMHhlNDk0MzhkMSwgMHhiNDZmMGNjMiwgMHg3ZWIwMDA5MywgMHhjYzc4NDMwYiwKKwkweGY4NjBlNDUzLCAweDIzOTVhYTkyLCAweGIyNmI3ZWIxLCAweGU2NzE4MDU1LCAweDVhZTc5YzVhLCAweGNlZDVmZGE5LAorCTB4NGI3YmYxZmIsIDB4OTMyNTIxOTksIDB4OTAyNmNhYWEsIDB4NzIyODc3NjMsIDB4ZGNjMDg5NmMsIDB4YTA3Nzg3YzgsCisJMHgxMmZlNDQ5YywgMHhmZWEyYTUwZiwgMHhmMDU1YTNiOSwgMHg1NmNmMjkxYiwgMHgyMWQ3MDAwYiwgMHg3OGQyZWVjZCwKKwkweDA1NWIxMzk0LCAweGJiNmMwZWU3LCAweGE5YTllNDBkLCAweDBkNzY5ZTQ3LCAweDdhODE3ZjczLCAweGY0MDc3ZDgxLAorCTB4MjU1ZmZkMDcsIDB4NWQ3MTAyMjAsIDB4Y2ExYzcyNmQsIDB4NzU4MjRkZjEsIDB4Yjk3OWMzMTcsIDB4MDU5ZjA4MGQsCisJMHg2ZTljOWQwYSwgMHhjOGUxMTMzOSwgMHhhM2ViODFlYywgMHg2NTEwNWZmOCwgMHgyODhiMjNjYywgMHgzZDE0MWI2ZiwKKwkweDc5NDA2NDg2LCAweDMxMGU0ZTQ1LCAweGNhNDFmODcwLCAweDNhM2YxMWRhLCAweGEwZTkwOWE3LCAweGM1MTI5MmNiLAorCTB4ODg2ZjI4ZmEsIDB4ZjJjMzg5NDgsIDB4YzkxMmFkMzksIDB4YWE5ZTk1NDUsIDB4N2MyODM1ZDUsIDB4YTNiZTE3MzMsCisJMHgyYTkxMmJkZSwgMHg1NmJlOTE2MiwgMHg3NGE0NGNiNiwgMHhjZDkyODZjZSwgMHgyNGUzYTA1ZSwgMHg5YTNiMWRjMSwKKwkweGI4NjdhM2Q2LCAweDEzYjUzOTllLCAweDU1YmM0N2FmLCAweDliNDYzMGVmLCAweDdhNDk2ZjAwLCAweDEwNGU1MjZmLAorCTB4YmVkOWNlM2YsIDB4YmI0MTg5MmEsIDB4ZDNjZGRiZjMsIDB4NWIxN2ZlNTEsIDB4YTFhMzhhY2IsIDB4ZDE2ZGJjZmQsCisJMHgxZTkwNTJkOSwgMHg3YWU2Y2E0OSwgMHhjNGVkNDE2NCwgMHhhY2YwMDYzOCwgMHgyNzkxZmJmOSwgMHhlNzhmYTBhYywKKwkweGU4NTY5ZjQyLCAweDcwYjY5YmZmLCAweGQ0YWExNzlmLCAweDkyNGZlZDM0LCAweDMxZGVlNzgwLCAweGExYjNlMjc5LAorCTB4ZTBmMTQyZmUsIDB4MWY1MGEzMmQsIDB4ZTJhN2JlMDgsIDB4Y2UyM2JlYTksIDB4NTAzYzg3ZGEsIDB4MGZjMDczZDMsCisJMHhkYWY3YTAwZSwgMHhmNTFlZjVmZiwgMHhkNmY4OTVmMywgMHhiZWQwZTVmNSwgMHg0ODg1ZjZhNiwgMHhhNmUxNjdlYywKKwkweGExNWJlNDNmLCAweDQ5ZThhMGZjLCAweDE3M2ZmZWMzLCAweDQ1NjUzZmI2LCAweDllZGQ2YzAyLCAweGVlN2M3YTg1LAorCTB4NGYyOGI0YTYsIDB4ZjkxN2YyMWYsIDB4YmQ1MWYxMDAsIDB4YWFmODIwNWYsIDB4NTE3YzMzZTUsIDB4YzdiYjg0MDYsCisJMHg0YzU2MGNjZiwgMHhmNDgwY2NhZCwgMHg4ZDYyNWU3ZSwgMHhmNmE4MGY2OCwgMHgzMjNlNWE4YywgMHhmM2FkY2I5YiwKKwkweDkwOTNlYjUxLCAweGI1M2ZlNjRlLCAweGNjZjUwOTI1LCAweDVmM2MxMTY3LCAweDZmYWRkNGYxLCAweGVjZjJkY2EwLAorCTB4YWYxMDFhMzQsIDB4MzgzMzFkMWUsIDB4NDE3OTlmNTEsIDB4NTUxZDIyYmYsIDB4OTNjNmZmMDMsIDB4MDRhZTYxZGQsCisJMHgwZWNhMmE3YSwgMHg2ZmNlYjgyNywgMHg1MWZhNDExZCwgMHhhNzdjMTc5ZCwgMHhjYzc0Y2ZmMiwgMHhkMjE4ZjM4NSwKKwkweDc0OGQ5OWRjLCAweDdmOWQ2N2ZmLCAweGNmZjNlMjJlLCAweDE3YTc2NmY1LCAweGY1Y2Q5OWYxLCAweDRiZDc5ZmRiLAorCTB4MDVlZTU4YTUsIDB4ZTQ3YjQxODYsIDB4ODg1ZmViY2YsIDB4ZDhmNGI1NDgsIDB4ZmJkMjI1NmYsIDB4ZDY3Njg0YjIsCisJMHhlYTM2NDI4YiwgMHg3NmNjZjBlZCwgMHgxYmIyMmNjMywgMHg5ZDU5ZDExOCwgMHhjMzU5ZDM5NSwgMHhlMGU5N2QwMSwKKwkweGE4YzdiMjE4LCAweDM3ZTc0NmE0LCAweDA1YWY4NWY0LCAweDlkZDViZDhhLCAweDgwZDdiN2RmLCAweDg3YjM1MjdjLAorCTB4NmQzNTExZGIsIDB4NTA4ZWM4NjcsIDB4ODU1YTkyZWQsIDB4MzllZTE3OWYsIDB4ZGE4NTc2NDMsIDB4ODcxZjZlYWUsCisJMHg1ZTNlZWQ0YiwgMHhjODAxOTU1ZSwgMHg4MGU1Y2QxZCwgMHgwYWJhNDIwMCwgMHhmYmY5MDVmMSwgMHhkM2Q3ZjVmZSwKKwkweDdiZjI2OTk3LCAweGI1ZGY3ZjI5LCAweDc1MGYyZTU2LCAweGI3YTg0OTlkLCAweDM0OWM2NGQ2LCAweDk3NmJmZTIwLAorCTB4NWU0MmZkMmIsIDB4YmNkZTM0MWYsIDB4MmYwNDgxZWMsIDB4YzE2YTFmMmMsIDB4ZmQ4ZDBlZjYsIDB4OWEyZmJiNTAsCisJMHhjMzZiZmJkYSwgMHg5N2JlYTM1NiwgMHg0YzNhMmNlYiwgMHhhNDJkNmI5YiwgMHg4YmQ1YjdmZiwgMHg5YzVjYmExOSwKKwkweGVkMTM5ODVjLCAweDkxNjE4M2I5LCAweDA3NDcyODU5LCAweDA2NjUzYzJlLCAweDNiNmEwMjQ4LCAweGJlNTA4ODhmLAorCTB4MmY3M2NhM2EsIDB4MDMxYzY3ZDIsIDB4NmY1MDkwYWUsIDB4NWZiNDA1ZjgsIDB4NzRmOTVlM2IsIDB4NmUzZmY2MDQsCisJMHgwNjZiZTA0OCwgMHhiZjBiZDc1MywgMHhmMjBjNWU5YiwgMHgyZDk4MTk2NCwgMHgwNjY3MWY2NCwgMHgwZjFkMjA0NiwKKwkweGY0ZTVjYzNjLCAweDFhYjY3YWUzLCAweGI5ZDMxYmY1LCAweGY3MjgzNGQ5LCAweDNjNDJkY2EzLCAweGRiZTYxYjdmLAorCTB4MWRmZmZmMDUsIDB4ZmVjNjBmZjMsIDB4MTQzZmM5OTksIDB4ZDBhNGJkZGIsIDB4NTk2OGRiYTcsIDB4YWViY2MwMmQsCisJMHg4MzU5ZWExZSwgMHhkMDQxYmU0YiwgMHgyMjJkOTM1ZiwgMHhhYzM0YTQwZSwgMHhkZmU3YTFkNywgMHg4Mjc1N2I1NSwKKwkweGMxMTNhNzIyLCAweGM4YmI0MDhlLCAweDQxNmVjODMwLCAweGYzMzY2ZTNhLCAweGNjYjIwOWY1LCAweGY3MWU2MTFhLAorCTB4OGQ5ZTFlNjcsIDB4YTc2ZDdhN2EsIDB4OWQ2MTE5ODksIDB4YzhjMzNhMTMsIDB4ZTQxYzRkN2UsIDB4NmNkNmJkMjIsCisJMHgyZGJkMjI0ZSwgMHgwMmFjNzQzOCwgMHgxNGNlMWZlYSwgMHhjZmFjM2FmZCwgMHhjZmFjM2U0YywgMHhhZTc2MjE0YywKKwkweDlkYjE5NjY4LCAweDZmYjVmMDcwLCAweDk2MGZiZTUxLCAweDgyODkxZTJlLCAweDQ3YmUwZGY1LCAweDlkNDMzNjcwLAorCTB4OGY3M2FlY2EsIDB4MTVhNDFiZmYsIDB4ZmRlYzc2OTcsIDB4MmRmZjQ4NTcsIDB4ZTExM2IzY2EsIDB4NzVjYmJhN2EsCisJMHg1YmE4MDNjNiwgMHgzOTMzNmQ2YiwgMHhjMTYwZGViOSwgMHhlZjc4MzhlYiwgMHhiMTM2OTFiNywgMHg5ZDFkN2U2NywKKwkweDRkZmI5ZWU3LCAweDI3MjZhNjJlLCAweDA3MDk5ZmVhLCAweGExMWZkMjI1LCAweGMzYjBlOWYzLCAweDNkNTI4N2M0LAorCTB4MmMzYjNiYjIsIDB4YjAxMDRmYTIsIDB4NzBmNzkxZmUsIDB4MTY0YzEzN2UsIDB4YmFmNjg0YmYsIDB4YjA2NWZmNDksCisJMHhjNDhlNjE3ZSwgMHg5MzU3NzNlOCwgMHg4M2RmNjE0YSwgMHg5MzhiMTA5MSwgMHhkMTc0N2Q0NywgMHgzOGViNzY0MiwKKwkweDNhNTUwZjg1LCAweGRiOWIyYjdiLCAweDcyMjk2ZjhmLCAweDczMzM4NTU1LCAweGFmNTgyY2M4LCAweGQ2NmNmMGE4LAorCTB4MTAyMmZhYWIsIDB4Zjg3YjMyY2UsIDB4YWY1MjkxNzYsIDB4OTMyODkyZWIsIDB4ZjQ2ZDVlMWQsIDB4ZWJiMmU4MzEsCisJMHgzM2QyNTBlMCwgMHgzZmQ5YzlmZCwgMHhmNjAxZGRhMCwgMHhmOTU0ZjJjNCwgMHg1MzI3ODQ1ZCwgMHgwYWNkZWVmNCwKKwkweDJkZmQ1NGZjLCAweGFjZGZmZDI5LCAweDhiNjZmMWMwLCAweDUzNzZlMWM4LCAweDdhMTRkYzA4LCAweDFlOTdhNTBhLAorCTB4ZGI0MTg4N2EsIDB4ZWNjZjFiYTMsIDB4NTFhM2Y2YmUsIDB4NmJkZjg0YzksIDB4ZmQ3OGU2MWUsIDB4ZWRmYWYwOTAsCisJMHhjZDgwMmI1YiwgMHg0ZGJmYTBkOCwgMHgwY2ZlZmMyMSwgMHhiOThiZjU3OCwgMHhlZGFmMDIzZiwgMHg5YmY1NzhhMSwKKwkweDM3NWUyMTg3LCAweGEwNjc2NDg5LCAweGEzNzY4ODFkLCAweGI1YzBlNTA3LCAweDYwZjZlNzk0LCAweDUxMzkyMzA2LAorCTB4ZDczOTg1MjksIDB4ODA3N2UzMjQsIDB4ODdjOTE2NDMsIDB4NTQxZjI4YTMsIDB4MTVjNDMwYjksIDB4ZTlmNTA2YjgsCisJMHg3MWU1NzA2OSwgMHg4ZGIxMDE3ZSwgMHgxMGE0ZTc5NywgMHhmNmIwMjQ1ZCwgMHhiYzA3MmM3OCwgMHgyNzdkYTFlNywKKwkweDdlNjY4Njk5LCAweGU1Yjc3MjBjLCAweGRmZGVkZjAxLCAweDgyY2QzZjQwLCAweDk4M2NlYjZmLCAweDhiNjZmNzhmLAorCTB4MGViN2VkMTMsIDB4YzNkNWU4OWYsIDB4NTlhMjVhM2MsIDB4YmYxODdlZDYsIDB4NGU1NWZlNjUsIDB4NDUzMzk2MmYsCisJMHhmODM3NGM2ZSwgMHhlZjgzN2VkMCwgMHhiZGY4OGQ0OSwgMHhlOTdmN2Y5YywgMHg0NDFmNjdlZiwgMHg4ZDMzYWNmYiwKKwkweGIyNWFiYWQxLCAweDY3ZGEzYTU5LCAweGY0MTk2NTJkLCAweGRjYWFiN2ZkLCAweGI3ODIzMDc5LCAweGRkZjRlMzJmLAorCTB4NDNlNmRmMzIsIDB4YTNlOGY0M2QsIDB4MjdhOGUxYmUsIDB4ZjFjYmI2NWEsIDB4NTEwZDQ4MzYsIDB4OTgxY2Y4OWUsCisJMHhkMzg5MjBmZiwgMHg5NDMyNGI3ZCwgMHg3MDU5YmE0MywgMHg3ZWM1Y2Y5NywgMHgwZGYzZTFhZSwgMHhmZjNkODc5NCwKKwkweDRlNjU3NDE0LCAweGU1MDZkMTA1LCAweDc2MjMxYmE3LCAweGU5NTU1Y2EwLCAweDJlMzBmMDc0LCAweGNmNzg4N2RmLAorCTB4NzkzODQ1NmMsIDB4N2E4Y2IwMjcsIDB4ODU0M2ZmZTgsIDB4MGJmODU0ZGUsIDB4MDA4ZDM2YzAsIDB4M2MxMDk4ZjcsCisJMHhhMzE3NzRhOCwgMHhjYTU4NWZjMCwgMHg0MTNiY2ZlOSwgMHhmMzFkNGY1OSwgMHgwMDkxYmZhMSwgMHgzODA3MDk1MywKKwkweGYwYzExYTU3LCAweGQ1OTY3NDgzLCAweDZmZjM4ZDkzLCAweDkxZjgwYzVlLCAweDBmMWMxZDcwLCAweGRkNTY0NWE3LAorCTB4MTU1ZjA3ZDYsIDB4MGRmMTI4ZTYsIDB4YTZmOTAyMTgsIDB4YTliZTcxOTIsIDB4N2E0MmJhNDQsIDB4MGFiYTA0NmMsCisJMHg0ODE2NDdhMiwgMHhhZTE3M2U4OCwgMHg4M2NhMTVkMCwgMHgxY2I4ZjcwOCwgMHhjMjU3ZTc1OCwgMHhmMGIxZjIxZiwKKwkweGE2OTRmZmFkLCAweGE0Y2UzNWY3LCAweDFlMmYyZTFjLCAweDczNGE3YjMzLCAweGQwNGRlZjQ4LCAweDY1NmY5ZGQ4LAorCTB4ZmE4ODlhN2YsIDB4YWZiZGY0ZTUsIDB4MTQ5YTYwMjUsIDB4ZWI4YzllZTUsIDB4ZDdmZTVjZDgsIDB4MWZmZjE0NTIsCisJMHhiOGY0MDdjNiwgMHhmZmNiMGY4ZSwgMHgyZGRhMjI0ZiwgMHgyMzVmNGI5NSwgMHg3OWQyYmZmYSwgMHgzNzk4OTk5NiwKKwkweDVkMWVlMDFjLCAweDAwZmQzODJjLCAweDQ2MmQ3OWJmLCAweDE2ZjgyNGU3LCAweDBjNzU1YzU3LCAweDZhZDY1OWUxLAorCTB4NTY5MTE4NzQsIDB4MWM4ZDYyZDgsIDB4NDA4ZjJiM2IsIDB4ZGExZDhhMzcsIDB4MzliYTI0NmEsIDB4ZjQ4OTRiZjcsCisJMHg4YjkyYjljMSwgMHgwZjgwMGVhZiwgMHg0ZTA4NTZlNywgMHgzMmQ2NTdhYywgMHgzNzkwMjU2YywgMHhhODE2MjkyYiwKKwkweGEwNTc5OTVlLCAweDFjYTk2NTdhLCAweDA1MWEyNzVmLCAweGFmNDAzN2EyLCAweGRlMjgzYjI1LCAweDhlZjVhNzMxLAorCTB4MTNkZjg4YTksIDB4YTQwZjVmYzUsIDB4MTg3YWMxZjgsIDB4MmU2M2U1NDcsIDB4OTU5ZTQ4ZGUsIDB4NTZhYmY1MjksCisJMHhiYjQ3OTExYiwgMHhhY2I1OTdiZiwgMHgzZmZjODhiYSwgMHhkZTUyMWJkMywgMHhlYzUzZTkzYSwgMHg1YjUxYWNiNywKKwkweDgyMzVjNmVlLCAweDRlNTc3NzFkLCAweDA3Y2EwYzQ0LCAweGVmY2U2NGU2LCAweDQwZjI0ODExLCAweDkzZmEwZmYyLAorCTB4NDQ3MTQwYmIsIDB4YzIwZjMwY2YsIDB4NjFiYzg5YzMsIDB4OTllYmE0N2EsIDB4ZGJhMDU3MDgsIDB4ZGQ3Y2E1ZTgsCisJMHhiZTBhYTczMywgMHg5OWNlYjA0OSwgMHgxZjY3Y2UxNiwgMHhmYmJlMDk5NiwgMHgwOWZmM2UwNSwgMHg1MDY1ZWY0MCwKKwkweDVkNzQwYjFlLCAweDM4ZTRjMzE2LCAweGU2MjZkZDQ4LCAweDJlNzljNzBmLCAweGNhMDlmNjFkLCAweGQ0MzhkM2RiLAorCTB4OGZlZmFhMjgsIDB4Zjc1Y2ExYjQsIDB4Yjc4OTExZTgsIDB4ZTVhNTJmMzIsIDB4ZWRlOTQ3Y2MsIDB4OThmMzRmY2MsCisJMHg3NDkzM2FjMSwgMHhmYzkzYWY5MCwgMHhmMzhlMzEyYiwgMHgwMzY3YjMyYiwgMHg4YjVmZDdkMiwgMHhlMDE2OWM0ZSwKKwkweDQyMzlkZGZiLCAweDQzOTQyOGRlLCAweGRkNjgwMzhkLCAweDcwMWY1Yjk3LCAweDA2NzY4MGE1LCAweDVmYWM0MWFhLAorCTB4MTQ3ZWUzOTYsIDB4NGNjYWIzZmIsIDB4NzRhYjcxOGYsIDB4OTk1YThlOTUsIDB4MTdkNjE1MzcsIDB4OWJlMmRlYmIsCisJMHg2YjhiZWIwNCwgMHhmNWMyMWNmNSwgMHgzODM3NGZhNiwgMHgxMzgzZWYxMCwgMHg3NDEzM2FmOCwgMHg1NDNmOWZkYywKKwkweDgxYTM2MDZlLCAweDE4M2YzNjBlLCAweGRiM2E0M2U2LCAweGRhMjAzNWJjLCAweDAzZTZmZWExLCAweDk3Y2MwMTgwLAorCTB4ZjBiYzE0YWYsIDB4NGU2MWVhZGQsIDB4NzU1OWQzOGMsIDB4ZmVlZDExMWUsIDB4MTg4ZjU2YTIsIDB4ZTFhN2UyMDgsCisJMHgzOTQ0NDFiMiwgMHgyM2QzYmU5MSwgMHg1YWI0OWVhMiwgMHgzNTNkNTNkNywgMHg0ZmQ0YWM1ZiwgMHg1OTA2NzkzNywKKwkweDRlOWU0ZWM5LCAweGExNWMzM2Y0LCAweGQ0OWZiNTFmLCAweDA0NWY4MzU2LCAweDRhYzkxN2I4LCAweDU3Yjc5OTdkLAorCTB4OWU4YTYxZmIsIDB4Mzk2MWRiNTYsIDB4YWI3YTY3ZDIsIDB4NDUzZjRmYTMsIDB4M2Y1MDViNGQsIDB4MDhmODhmODMsCisJMHg3YmQyMDVjNiwgMHhmZDcxMWZjYSwgMHgxYmYwODRkYSwgMHgzNmFiZjM3OCwgMHgyMTAzMzc0YywgMHg5ZDFjNzFmOCwKKwkweDc5ZTM0Y2M3LCAweDE1ZDMzY2Y4LCAweGJmYmY4N2RhLCAweDYzZTM4ZjdmLCAweGI5YmJmMDFlLCAweGU0MjJmZWY1LAorCTB4MWYwMGNkYTMsIDB4OWRlNmYzYzQsIDB4Y2ZkNGNjYjMsIDB4Nzk5YTU5ZjQsIDB4ZjI4NmE5MzEsIDB4NGIwNzA4MjUsCisJMHhhMjNjNzVlZiwgMHhkNTNkMmZjYywgMHhiZDY5NWEyMywgMHhlNzY4NDNjZSwgMHhlMjhjY2JhNSwgMHg3NjNmNmEwMSwKKwkweGY0MDU3NDFkLCAweDg1N2E3NzZhLCAweDkwY2JjYzdhLCAweDQ3Yjg5NDVhLCAweDRlYjM4ZTNhLCAweDVkMzFmZjQwLAorCTB4NmI0OTU3YzEsIDB4ZjYzMzYxZmQsIDB4NWYxNDY2ZTMsIDB4ZmU4NWNmNGMsIDB4ODQyNmZlYTEsIDB4ZmMzN2ExODMsCisJMHg1ZTk5ZTc0MiwgMHg0MjczZTdjYywgMHhmMThlZGZhOSwgMHhlNzZjNzQ5NCwgMHg3NDQzMTE1OCwgMHhkNWQ3ZTdjNSwKKwkweDFjNjIxNGVhLCAweGEwOGZiMTk3LCAweDdlOTBjOWZkLCAweDBjYjhjMjllLCAweDdlNGVjZmE0LCAweGI0MmU0YTZkLAorCTB4OTdkMWZlN2YsIDB4NTJkMGI0NzYsIDB4MGZiMzNlMGUsIDB4ZjVhYjU2ZTUsIDB4OWM3MDliZTYsIDB4ZmY5ZjIyODMsCisJMHg1ZGUyNzI0ZCwgMHgyMDZkZGY5OCwgMHg1M2JlOWEzZCwgMHg3OTQ0ZGI0ZSwgMHhlYmZkMTM5MywgMHg1NWRmNTZhZSwKKwkweDJjYmQ0MjJmLCAweGViNjRjNjE4LCAweDBhMTM4ZjNkLCAweDNhMTVkYTljLCAweGNiNzkzOTM4LCAweDUzZWY1YzIwLAorCTB4NTgyYzc3NDUsIDB4NWY4N2VkMDIsIDB4M2I4ZDM4ZjcsIDB4OTRmY2NhN2MsIDB4OWIwZmM4MTYsIDB4MzBhYmNiZjgsCisJMHhjNzhlNWY3ZiwgMHhmZWU0MDIzYywgMHhkZTVmZDJiMCwgMHg2YWU1MGZiNiwgMHg4MjFjZmNlOSwgMHg0NTc2YzU5NywKKwkweGRhMzlhOWYyLCAweGJmMDJmNWUzLCAweDUyZGM0NzM3LCAweGQyYjhmYzhlLCAweDI0NDg3MDY2LCAweGZhMTllYjc3LAorCTB4NzcxMWNkNTksIDB4ZTViZmIxZGIsIDB4NGMyNmY5ZDEsIDB4MzZiZmQ2MGQsIDB4NmUzYzljYTEsIDB4MWUyMTMxYzksCisJMHgxODEzMmQ5YSwgMHgwYWFjZWI5NiwgMHg0ZjFiYmU5ZSwgMHg4ODUyNDBmYSwgMHg3Mzg0Nzc3MiwgMHhlNTc0NGNiYSwKKwkweDBjMjcyODY0LCAweGJjYWQwNjA5LCAweDJmNzk3MWQ2LCAweGI0M2UxZGQ5LCAweGY1YWNiYTlmLCAweDYwY2M4MTQ4LAorCTB4N2NhMDU0MDksIDB4Njk3OTU0OTMsIDB4M2M3MTdhNzEsIDB4YTNiNGUyYzksIDB4OTE0MmI0YmYsIDB4YWY4NjJjMzcsCisJMHhmNzM5NjBkMywgMHg1ZWFmMzg5ZiwgMHg5NjJlNjNmZCwgMHg4NjdmNGI1MCwgMHg0MTI4Y2NiMCwgMHg5YmRhM2ZmOSwKKwkweDU3M2UxMGM2LCAweGJiYzU4MzUzLCAweDY4NDRmNTE4LCAweDcwMjA1ZDdmLCAweDRmYTM4ZTUwLCAweDdlMzM3NjQ3LAorCTB4NWVkZGVlNDgsIDB4N2EzNDFiYjIsIDB4N2E1ZTViYTQsIDB4ZjIyMWY1YTIsIDB4N2E4MTFlNTIsIDB4NzkyMDU4YTIsCisJMHgwY2ViNjFlOSwgMHgwYzEyZmViOCwgMHgzYzVjMDBiMiwgMHg1NDVlYjhkYiwgMHhjZTI2N2JmOSwgMHg0OWU1ZjAwNSwKKwkweDVlNWM5MTY1LCAweDI2NzNlNGU5LCAweGQxZWZjNjBlLCAweDQ1MmE1Y2FlLCAweDVlMDIxZTIyLCAweGMzZTllMGM5LAorCTB4OTM3OGY3OWYsIDB4OWQxZTUwN2YsIDB4YTk4N2ZhNDEsIDB4MjFmZTkwMDcsIDB4MGZlMTQ0ZmQsIDB4NmYwNzhhOGYsCisJMHg1MGEzZjVkOSwgMHhkOTEyY2I1ZiwgMHg4NWNiOTUwMywgMHhlMmNmYjQzNiwgMHg2OTQ3ZDFiYywgMHgyZWRjYzViZSwKKwkweGE2YmY5NzY4LCAweDg5MmExY2Y1LCAweDc5Nzk0NDRiLCAweGM3OTlkOTYyLCAweGJlYmQ0MWVmLCAweGZmZjQ5YzI5LAorCTB4NTY2N2E1YTQsIDB4YTY2ZTNjNjAsIDB4MjExYTcwNTcsIDB4N2QxYTU5ZWYsIDB4NmY5ODdiZjcsIDB4OTA1ZDNhMzQsCisJMHg4MWYwYWIzZiwgMHg5MTQ1OTdmYiwgMHhiODA4NGY2OCwgMHg3NTllOGNjZSwgMHg4MzMyMTY1NiwgMHhmMTM5ZTI5YiwKKwkweDNiNDA5NjMzLCAweDM0ZTBhMzRmLCAweGExZTA3YTNiLCAweGVmNTI3YWM3LCAweDM3YmMwNWY1LCAweGZhZDBmZTQ2LAorCTB4YThkN2JjM2YsIDB4M2U3NzU5YzgsIDB4YzZhMmQ5Y2EsIDB4NzAwYTg3ZTQsIDB4N2NmNWViNWQsIDB4ZDdkMThkOWUsCisJMHgzOTI3ZGU1MywgMHgxY2I5NzYzOSwgMHgzZmQ4YTk5ZSwgMHg1N2IzYTU5ZSwgMHhjMGY3YzNjNiwgMHhjZWY5NDE2YSwKKwkweGM4YTk1NmYxLCAweDg4ZTM0MGU1LCAweDBkM2YxODYzLCAweDNlNDgxNzJjLCAweGEyNTJiYzc5LCAweDVjY2RkYTFmLAorCTB4ZWY3ODRkOWUsIDB4NWQ5MDBhMjgsIDB4YjQzZGU1ZDgsIDB4NzIyYjVhOTIsIDB4MzY3NGEzZGUsIDB4OTQ1ODhjMTcsCisJMHhlM2RmYTc2ZiwgMHhmZTQ3OWZmZSwgMHg5YmI2MjU2MywgMHg4M2I1YTJkMywgMHgwY2ZkMDIyNiwgMHg2N2JjYjg0MCwKKwkweGYxZTlmZDI2LCAweGVmYmFkMTk2LCAweGVhNjk0NWYwLCAweGQzOGVhZDU1LCAweDhiYWIzZGU0LCAweGU3YjBjN2FlLAorCTB4NTIyNzdiYWMsIDB4Mzk5MmFmM2MsIDB4MmFkZTkxMjIsIDB4YzEzNzZlNjUsIDB4ZTYxYjI1OWYsIDB4NGY5ZDU3MzMsCisJMHgyYWM3YjczMSwgMHhhMjdlYzE4YiwgMHhiMDdiNWFlZiwgMHgzMzg5ZmVjNywgMHg3OGE4ZGYyMCwgMHgzYTEzZjE1NCwKKwkweDE5NzY1ZWVmLCAweGFjZDA3NmUzLCAweGRkN2FkYTc1LCAweDE2MzAxMDc2LCAweGU1Y2FiYThhLCAweDMyYmY3NmRhLAorCTB4Yjk0NTlmYmIsIDB4ZTAzOGRlZTgsIDB4YWVhYmYyMWIsIDB4ODA4MjFlNTAsIDB4MjY2ZTdmMjEsIDB4YTYxZjcxZTMsCisJMHhjZWQ1NDNlOCwgMHg1MTdhNTkyZiwgMHg2NjY4NzI4ZiwgMHhjMjNkNDVlMywgMHgxZmQyZTY3MywgMHgzODVmYTdlNiwKKwkweGExYmVmM2I1LCAweDNlYmI0YTIwLCAweGJmOTM0ZTM5LCAweDUzNDQzNWQxLCAweDMwZjc2NmZmLCAweGE3NWJmN2NkLAorCTB4NWVmOWFiNWYsIDB4YzlhOTE5ZWUsIDB4NWUzZDVlZGYsIDB4ZmQ0NjdmNTMsIDB4N2ExY2FkMjQsIDB4YTNkNjlhMzcsCisJMHg3OWJmYTdlMiwgMHhhM2U4YTViZiwgMHgxMmVjNDI3NywgMHhlMjNhOWQzNSwgMHhiZjkxMTMzZiwgMHhlNDY3MmMzZiwKKwkweDMzNzg3Y2JmLCAweDFkMzFmOGQzLCAweGU3ODIyNDIzLCAweGY5M2Q1YzgwLCAweGM4ZTVmNzMxLCAweGJmMjA4ZmVmLAorCTB4YTFmNDRmYzksIDB4NzM0M2YzYzIsIDB4YTIyOGM5YTEsIDB4N2VlNDYyN2YsIDB4NzI1ZmE4NzksIDB4NWU1MDM5OTAsCisJMHhmZGIxZDRjZSwgMHhmZjhmNTQ0MiwgMHg5Y2YzMGU2NywgMHhlM2JhZmVjNywgMHhmMTBmNGIwZCwgMHgxZjg4NDM3OCwKKwkweGZmNzhhNTczLCAweGJmY2MwNjcwLCAweDRkNzk3OTBmLCAweDE2YzNmNzJlLCAweGZmYWYzNmVlLCAweGI1OGUwODM4LAorCTB4ZmM5YWQxNmQsIDB4ZWJmMWZkYTIsIDB4M2JkNjBlM2YsIDB4YWUxZDA0NGIsIDB4OTNlMTQ2YjMsIDB4N2RhMDE2NWEsCisJMHhhMGU4YmI1MiwgMHg0MGM0ZWFmZSwgMHg1ODNiZTYyYywgMHhmNGI0NmM2NywgMHgwYThiODM4ZiwgMHgyNThmODAwZiwKKwkweGE5ZGUyODM3LCAweDE5M2ZjM2ZhLCAweDllMGE0NTNlLCAweDFhNzBiNGNiLCAweDkwZTNjYjkzLCAweDI5MTA4ZjVmLAorCTB4YzcyMzljZGQsIDB4ZjEwM2ZlZTcsIDB4ZjQ5ZWI0MWMsIDB4ZGM3ZmJjZGMsIDB4Yzg0NzIyN2EsIDB4OWY5ZjA4NTksCisJMHhlM2RmYWYxYiwgMHgxNzk0MGYxZSwgMHg3ZjBiOTA4ZSwgMHhmZTRjYjgyNiwgMHg0N2E1YzI0NywgMHhkODJmNDdjZiwKKwkweDcyYTNmYTBkLCAweGZkZmI4MTlkLCAweGJmNWMzM2RlLCAweGZlZmQ3MjM3LCAweGY2OGZiNDdjLCAweDQ0ZjM5Yjg3LAorCTB4ZWQwNzBlZTcsIDB4ZTkzZWQyOTcsIDB4NjE4ZDdiYTEsIDB4NTlkZjE4MTksIDB4Nzk3ZDIzYTEsIDB4ODE5MDk5N2EsCisJMHgyMTI2YzJmZSwgMHgwZjM2ZmM4YywgMHhjODE2NDhhYiwgMHhjODc4YjliZSwgMHhhYTMxZmQ0OCwgMHgzYWZkZWQwNywKKwkweDA1NTFmMzkwLCAweGU0MDk2YjNlLCAweDcxZTVjY2RmLCAweDcxNmUzNWIxLCAweGY1MDM4YTRhLCAweDFlYWMxZmY2LAorCTB4ZTI3YThiOGEsIDB4ZmQ5ZTFlMTEsIDB4Njk2YmUxMzAsIDB4MmJlZTQ1ZGYsIDB4NmJkMDEyN2UsIDB4ODUxMmQxZTUsCisJMHhkNWNjNWY4ZiwgMHgyZTFmM2FkMSwgMHg5NDlkYjkxNCwgMHgxZjcwYmEyYSwgMHhhOWQ4MTU2MywgMHg5NjA2NTc2OCwKKwkweDkxNWYyOGViLCAweDZkNTllOWM3LCAweDlkMGExZmY3LCAweDE0ZGQ5NGM3LCAweGRhODhmMzg2LCAweDdkN2RiYTI0LAorCTB4MmU1MWZiOGMsIDB4NzkzZDBmOGYsIDB4YjNlZDE4NTcsIDB4Njg3NDJhMDEsIDB4ZDZiZGRiZWYsIDB4YWY1ODJlNjksCisJMHg4ZDk2ZDBiZCwgMHhkY2RhZGZiNiwgMHg0ZDZmZWE2OCwgMHhjZjE1OTc0NiwgMHg3NDhjZmNhMSwgMHhmZThlY2E3OCwKKwkweDhjZmFjMGEwLCAweGU2NTVjZDMzLCAweDU4MGZlZWFiLCAweGU5MzZmZTk0LCAweDlkYTJiZjQxLCAweDFlMjg5ODIyLAorCTB4ZjkxYWYxNjEsIDB4YjE2NzE1ZjksIDB4MWNjYWRlMjYsIDB4YTc2ZTBiMDIsIDB4ZjQyOGYzZDYsIDB4MWI0MmM3NmEsCisJMHhlZmY2OTdlMSwgMHg1ZGIxNzhkNSwgMHgxYmE0MTdhMSwgMHhjZjRhYmJjNCwgMHg4OTgzZmRhMSwgMHhlOWNjOGRlYywKKwkweDE1ZDlmMzg5LCAweGU1MWE4ZTUyLCAweDhmNzQ4ZGQ5LCAweDFmOTBlYWZkLCAweDA3ZmU1Y2JjLCAweGUzYzRiZTZlLAorCTB4ZGVkN2RlMmMsIDB4ZTE4ODc5YzMsIDB4MGM5YzUyNWYsIDB4NWZjZTRhZWMsIDB4YmVlMjQzNGIsIDB4MDI0ZjkxM2YsCisJMHg0MGNmMGU2NiwgMHhkZTFlNTY4NCwgMHhkYWM5ZDBhYiwgMHg0OGRlODI3ZiwgMHgzZWJjMDJiYSwgMHg4ZmU1Y2I5YywKKwkweDM2ZmRjMGFiLCAweGIyYzczYmNhLCAweGZiYTIzMGQ0LCAweDk2MjcwYjFmLCAweDUxMzg0NTYwLCAweDM4NzJiYTVlLAorCTB4MWYzZGYzNzksIDB4Y2M3NDllMTAsIDB4N2Y3MWI0NmYsIDB4NzJlMWY5MGIsIDB4MzFjMmE0N2MsIDB4YmU5ZTY0NDksCisJMHgzYzg4ZjJmNCwgMHhjYTFiZmJlNSwgMHg2YWI3YWU3ZSwgMHg2MWQ5MGZjOCwgMHgwMmM1NzcyOCwgMHhjYzJjZDJjNiwKKwkweGZmYjZiYzYxLCAweDhmOWMwZTdhLCAweDM5NmFlODg1LCAweDk2YWVlNWQyLCAweGNmZTQzMDk0LCAweGNhYmM2NTY0LAorCTB4MGNhN2QyOWIsIDB4MjA1ZmEwNzcsIDB4MDQwZWQwMTgsIDB4ZTNjMGMzYmYsIDB4NTc0ZWRjM2YsIDB4Yjk0ZjdhZTUsCisJMHg3MmM0N2VkNiwgMHgxZjhmNjY0ZiwgMHhlYWY3ZGFhNiwgMHg4Mjk3M2M3NywgMHg1OWYzYWFlMywgMHhmZDYxZDhhNSwKKwkweDEyNTU3N2NkLCAweGRjYTI3MjRiLCAweDgwOGY3NjVhLCAweDVhYjFkY2YwLCAweDcxN2RmOGQ0LCAweDAzMjU2MTVlLAorCTB4N2ZjZTNlM2YsIDB4OGVmZDEzYWYsIDB4Y2RhZmIwMzgsIDB4ZjU3NWNmMjgsIDB4NWUwODMzODIsIDB4MGE4MTdiODEsCisJMHhmODg3MTMzOCwgMHhlMjRmZTAyYiwgMHg4OTY3YmQzYSwgMHg1N2M3NDI1ZSwgMHg4NWFiYjFkNywgMHg1ZGU3MWI4ZiwKKwkweDlmOTBjODJjLCAweGEwMmY1MTU0LCAweDk5NTZiN2RmLCAweGEzMDU1YzdmLCAweDNlOTk2OWVmLCAweDllMjFlMzAxLAorCTB4ZTM4YTU2MTYsIDB4MDMzMzU2NTUsIDB4MzMyYWY1YzYsIDB4ZjI4NjUzOTksIDB4NzQ0M2M2Y2EsIDB4MDJiOWVkZGUsCisJMHgyMDZmMjUzOSwgMHg0ZjNhNGZjOSwgMHhhNGYwMmFlMywgMHg0ZDFkMDFlNywgMHg3NjQzMjg0ZCwgMHg4NjRiYjg2NywKKwkweDE2N2Y4OWYxLCAweDRjYjVhNzFkLCAweDU5ZWZhMmYwLCAweDg0M2NlMmQ0LCAweDExZDAwMWZlLCAweDJkM2M3ZGM1LAorCTB4ZTc1ZjFhMDEsIDB4NWQ3MjcxZTUsIDB4ODBlOWMxOGIsIDB4NjU4ZDQ4NzUsIDB4NTUyMWZmYjQsIDB4ZDQzMjljMWIsCisJMHhkZjI5YjYzYiwgMHgyZDk1ZjE4ZiwgMHgwZGRmZGM4ZCwgMHhkNjc0OTNmNSwgMHhkMWMzZDdmYSwgMHg5OTEwYWI1ZiwKKwkweDc5MGEwMTQ0LCAweDU2NTlmYTJhLCAweDMwNTYyZTg1LCAweGY3ZWUzYjc3LCAweDQxZmUxOTMzLCAweGRjYTU0OGJiLAorCTB4MmE2ZjNkNWEsIDB4ZDBlNTIyNjYsIDB4MTNkYzgzNzgsIDB4NmI5ZTQwOWYsIDB4ZDNiMjQwZGMsIDB4Njc4ZGFhOTQsCisJMHhjOTJiMmQ0OCwgMHg3ZDYyMzNhZiwgMHg4OTBmYWNhOCwgMHhhNWQ1NDg3NywgMHhhYzk3MTcxNCwgMHhmMzViZjJkYSwKKwkweDhlMDg2MjIyLCAweDllMWUzYzU5LCAweDhkODhlZjczLCAweDcyN2NjMmI3LCAweDFmZTM3OTdmLCAweDQxODczZDMwLAorCTB4ZmU1YjgwMzMsIDB4NGMwNzNiYjIsIDB4YWMxNmZmODcsIDB4YTYyMzc4ZDgsIDB4ZThjZWJjNGYsIDB4ZTA4ZmMxOWMsCisJMHhmYThjNjY1NywgMHhlOGZhZmNmMSwgMHhiMmFiZjI5NSwgMHhiOWQwMGYyNiwgMHhkMjdkYWZjMiwgMHgwOTRmMWFiZiwKKwkweGZlOTU0ZmU1LCAweDRkNGVmOTQzLCAweDdmODY1ZWQ3LCAweDEyMDUyNmQ3LCAweGRmNGYwZjkxLCAweGRiMDMzMjNiLAorCTB4NzNkZTM2NTcsIDB4NWY4OGM3YzgsIDB4NzdkMDA3MDUsIDB4MTE3MTc3YTUsIDB4NTY2MGJhMjMsIDB4NWU1YmQwOTcsCisJMHg0OTBiMzc4NCwgMHgxZjM3YmZlYywgMHgzYjdjODYzZiwgMHgxM2U3ZWZmZSwgMHg5NWRmMDg3ZiwgMHg2M2NlOGMwOSwKKwkweGY2NDlmZDgxLCAweGRmYWE5YTljLCAweDNlYjlmMjIzLCAweDI0Njc5MGJkLCAweGMxNDY0ZWJjLCAweDA1M2JhYzBhLAorCTB4YzdiZWUwZGEsIDB4MmI0ZTYwNzgsIDB4ZjAyZTdmYTQsIDB4NGRlMzhiM2MsIDB4ZWY5ZTNjODEsIDB4NmI0MGZkN2IsCisJMHg0YjM3YWUwYywgMHhhNzhlZjVjNywgMHg3NmU2OGVkYiwgMHhhOGZmYjc0OCwgMHgwNjU5MGZkOCwgMHhkY2VkMDUzNiwKKwkweDc3MTEyNmMwLCAweGMwZTA1OTZlLCAweGUyZDYzYmU3LCAweGM5Yjk2YmJlLCAweGNhZWIwNjk5LCAweGY0NDhkZmJhLAorCTB4ZjY4YTA0ODQsIDB4YTc2ODk2NTEsIDB4YjZhZWU1YjgsIDB4OWY2OWNiOGYsIDB4ZDJjMGQxYjEsIDB4MGVlMDZlMjgsCisJMHgwMDY0NzNjMywgMHg0Y2FhYjBjZiwgMHhhY2MzNTdiMiwgMHg4NTdhYWY2OCwgMHgxZTg4YWFhNCwgMHgyMmY1MDg3YiwKKwkweGVmMmNiNDBhLCAweDMwYWM1M2FkLCAweGIwNDJhZWZlLCAweGVjN2IzMzQ3LCAweDU5ZmVkNTFjLCAweGViNGM5ZjljLAorCTB4NjgyMGVkNTcsIDB4OGZkZGIwYzcsIDB4MGI0YWE3ZTUsIDB4MTliYjIyNGIsIDB4ZjdmYjgzZTYsIDB4OTAyNjRjYjYsCisJMHhmZjUyMTNlZCwgMHhkOTIzMzJmNCwgMHg3YmFmNzZhZiwgMHg1YmI0NzBjYSwgMHhhMGU2YTc5NywgMHg5YWUzMGFkZCwKKwkweGZkN2Y2ZTI0LCAweGJiNjdjYTNiLCAweDI4NWVmOTRlLCAweDQ5YjllMGU2LCAweDA1ODAxZjc1LCAweDg3MThkMTc0LAorCTB4ZmVhYWVkNTMsIDB4ZTc2M2E1ZTcsIDB4OTUwNWI5NTQsIDB4OWYyZjliN2YsIDB4NTlmZjdlYzEsIDB4NTU2M2RkNzIsCisJMHg2MzRkNGRlOCwgMHhlOWUwNzlmOCwgMHhjZjhkYmQwYSwgMHg5ZTlhNTMzNywgMHg3M2RiYjNmZiwgMHhmZTkzYWVhNywKKwkweDM5ZmVlYjc5LCAweDlmZmFlMWQ3LCAweGZmZDg4ZWIxLCAweDNjZDhmODIxLCAweDNhYzY3ZmY5LCAweDRmZjI5OTZlLAorCTB4NWYzNzg3NWMsIDB4NDNjZmM4NmUsIDB4ZTc0NmQ2NzksIDB4N2UyZWVjODgsIDB4ZGVlNDFjMmUsIDB4Y2I5Y2JjM2QsCisJMHgwOTkzOGIzOSwgMHg3NGZmYzc2NCwgMHhmZDg0ZDc3OSwgMHgxYzFmNDE5ZCwgMHg3Nzc4YTFjZiwgMHg2NzE4M2EwOCwKKwkweDg4YTFhNTg4LCAweDhjYTVjZGVjLCAweDJjODY4MWY2LCAweDQzNDBmYmU1LCAweDIyNGQzYTk2LCAweDZlMTYwM2RhLAorCTB4ZWM1MjBlMjcsIDB4Yjk0YjQxY2UsIDB4OWNhNzE5ZGQsIDB4MTE4Yjg4MmIsIDB4M2ZkNDMyN2QsIDB4Y2E1YmNiZjYsCisJMHhiZWUwYzZlNywgMHhkNWVjOTE5MCwgMHhmNWRkMzZlNiwgMHg1ZTUzZDQxNiwgMHg4NjhmY2U4OSwgMHhkMmQyODlkYSwKKwkweDVmOWM0YTk1LCAweGY2YWE5ZjZiLCAweDc5ZTMxYTY4LCAweGI0YjNiMmZkLCAweGEzZGFhNzRmLCAweGI0ZjI5NDQzLAorCTB4NjAzZjdjYTUsIDB4MWVkNjhiNDgsIDB4ZGFkNmFiOGQsIDB4MTA4MmZhOGYsIDB4YmFhOTczM2IsIDB4ZWI0OWQwN2YsCisJMHhlOWQ3MmRkMywgMHhhODdmZmNmMSwgMHhiMDdiODlkZCwgMHhhYjA3MTRhOCwgMHhmZWI0MDY3YSwgMHhmNjMwZDc0ZCwKKwkweGY5Zjc3ZTc0LCAweDFmZGMxYzhjLCAweGQwNWFiOTlhLCAweGNmNTUzOWU4LCAweDdlMjgyNDAyLCAweDQzZTNlMmE0LAorCTB4M2Y4ODczZDQsIDB4NWZiNTM0ZjcsIDB4YWYzZTZmZDIsIDB4MmU0YzcwNDgsIDB4NTM5Y2Q3NGYsIDB4MWU3ZWVjNjIsCisJMHgzYTczNzEyZiwgMHgxMWVhZjVmYSwgMHhkZGFlZDE2YiwgMHgzN2M2ZWViNywgMHhmZDY5N2QzMSwgMHgwNGU1ZTE5ZCwKKwkweDZmNTRmNWFmLCAweGViYzZjYjdmLCAweDc2NTBmZjMwLCAweGU2MTIzZGJiLCAweDUzYThkMGY1LCAweGVmZDAwOWVmLAorCTB4ODVlMzNjNmEsIDB4Mjk3OGIzZWIsIDB4OWUxNGI2OGYsIDB4N2FiM2QwOGIsIDB4YTRkYmRmZGEsIDB4MGQ5ZjRjMGYsCisJMHg0NTEyMmJlNSwgMHgyM2JlOTExYywgMHgxODMyOTgxZCwgMHg1OTMwOWY5ZCwgMHgzNWY1N2U3OCwgMHgzMGUzZWU4YywKKwkweDFhOWY1Y2U1LCAweGQ3M2QwOTg3LCAweGM3YzNjYWI3LCAweGM0ZjAwNTU5LCAweDE4OTYzNTczLCAweDM5YTkxZjdlLAorCTB4MDhlOWZlZTEsIDB4ODE4NzY2ZWYsIDB4OGIzOTM5ZTEsIDB4NjI0ZmVlNzIsIDB4YTgyYWFlZDUsIDB4YmY3ZWRjNzcsCisJMHgwYmVlMTY3ZCwgMHg3ZTg4MTg2NywgMHgyNmNlOThhNCwgMHg5ZWQ5OTNjNCwgMHg3MWMyYWY2MywgMHhjZDM1ZTI0MiwKKwkweDIwMzdlOTI5LCAweGZiYjViYzU5LCAweDIwNjc5ZWYwLCAweGM5Y2Y3YjdkLCAweDJhOWQzMTJmLCAweGYzYzNlZmI1LAorCTB4ODg0NjUyMjUsIDB4YmY2YmQyOWYsIDB4OWJkYzExOTgsIDB4NGE1ZjMzODcsIDB4NmUzYjk2MzIsIDB4NzU0ZTkxMTAsCisJMHg4NjlhNmZlYiwgMHg1MGMxNTRmZSwgMHg0ZjU4MWFlNywgMHgxYmYzMDI1OCwgMHhiZDYxMWU2MCwgMHg3Yjc5ODlmNiwKKwkweGNlOWMyMGE5LCAweGY1OTY0OGQ1LCAweGRmZDgwZDE1LCAweDdmYmEwOGE4LCAweGFlMDNiZWMwLCAweDRkZjNhN2NiLAorCTB4ODBmNjU3ZjQsIDB4MGUzYTQ3YTgsIDB4YzM4ZmY2NTMsIDB4MWZlZDdiMzIsIDB4MzBjMmZjZDMsIDB4M2I1OWUxNGQsCisJMHg3YTE1YzNlNCwgMHhjYTdiNjM1ZiwgMHg2Yjc3ZmI4NywgMHgxMDZlNTIxMywgMHg2OWY1M2QxZCwgMHhiYmQ2MTk1ZiwKKwkweGFiMWJiYmYyLCAweDI2ZmQ1ZjY4LCAweDlmY2YxNTkzLCAweGNhZmIyOTg1LCAweGE1NzRlM2ExLCAweDQzNjc1YjNhLAorCTB4NjQxOGI0NmEsIDB4NTVmMTE2NzMsIDB4ZTA3MjVmMGYsIDB4ZTY4MzUzZDgsIDB4OWNmYWY1MDEsIDB4NzM2ZTNhYTcsCisJMHhkYTgzYzcxZSwgMHg2NGMyZDE5ZiwgMHhmNzQzMjNiNCwgMHg4MWZiNDNhZCwgMHg1NmJlNzA3OSwgMHgzMWZkYTllYSwKKwkweDAxZTc0NmQ2LCAweDUxOGI4ODc0LCAweGE3YWJiNTdkLCAweGU5ZGYwZGI5LCAweGZmMWZiYjI0LCAweGNjODJlMzgyLAorCTB4MzVmYzQzMWEsIDB4Y2VkYjU1YWMsIDB4MGRjZmNhOWMsIDB4MmExOGY0YTgsIDB4ZmRkMGE1MmYsIDB4NmY3YWQ0ZjcsCisJMHg5ZjgxZTEzOCwgMHgxZmFkMDgyNywgMHhmNmQwZDcwYSwgMHg1ODMzYjdmMCwgMHhlMTYwZGRkZSwgMHhhOTVkODhmYiwKKwkweGFjMjJiOTlkLCAweDQ3M2RhNTdiLCAweGJmNWE3ZjMzLCAweGVmN2ZkM2QwLCAweGJlNmQzY2ZkLCAweGI5ZjYzNjRjLAorCTB4N2QwNzk0M2UsIDB4NGU4Mjc3Y2QsIDB4NmM1OTZmYmIsIDB4OGQyZmI2ZDEsIDB4MjU3NzdlZDEsIDB4NDU5MmYzNjgsCisJMHg2ZDkxZGZlOSwgMHg4ZTFhZjNhMiwgMHhmNzllMTM3YywgMHgxOGQ4Zjk1MywgMHg4YWY3ZWZlMiwgMHgyZWZhMmFkZiwKKwkweDFlNzRjOTkxLCAweDc5ZGU5Mzc1LCAweGUzYzRlNTBlLCAweDAxZDI0MDMzLCAweGY4MmMzYzdkLCAweDU1MmU1OGNjLAorCTB4MGY1MTViYjQsIDB4OTNkM2FkYzYsIDB4YWVmYzdhOWMsIDB4YmRlMGNlNWIsIDB4NmJhMDE2YTAsIDB4Zjc3MWU1ODQsCisJMHhjNTZlOWI0NywgMHhmMTQ4YjE3YywgMHg3MGZiOWIwZCwgMHhjYjUxZDIzOSwgMHgzN2JmNWY3NywgMHgzYTlmY2YxYiwKKwkweDViY2U3NDBkLCAweDc1YjFiNzNkLCAweDFlMmI2MWFjLCAweDk0Y2I4YTBiLCAweGZkZjA2OWNkLCAweDg0ZTYyYWExLAorCTB4NjMyM2IwOTksIDB4ZmM3MTIzNjMsIDB4MTVhMmQxMmQsIDB4ZDFmM2RkZjUsIDB4NzE4ZWZmZjUsIDB4OGMxOWU2OTQsCisJMHhlMTQyMTlmNiwgMHg0NmQyMzc1NywgMHg3NTZlMzY3MiwgMHg1YmY3ODBiNiwgMHg1ZjliMWUxZSwgMHgwNjMxNzI4OSwKKwkweGFmOTQ2NWZjLCAweGM1N2RjYTkwLCAweGYwMTVjNzE3LCAweGM1YjZjMGY4LCAweGJlMjNjNTJmLCAweGRiMGY1ODM3LAorCTB4YTIxNTllNjksIDB4NTJkOGE3MTMsIDB4OGI3ZmU1YzEsIDB4N2IzZWQxODUsIDB4Mzc1MmE4ZjMsIDB4NzJlYzRkMWUsCisJMHg4YjNjMGVjOSwgMHg0MWRlZTJkOCwgMHgyZDU5NWVmMywgMHg5Y2FjZDk3MiwgMHhjODU4MDE5NywgMHhiZTljMzk1MSwKKwkweGZkNGEzNjBjLCAweGIzMzQ2ZTk4LCAweDk3MjgzOWY4LCAweDdjZThjMjkyLCAweDgxZjY3ZjUwLCAweDU3Y2I4NGI0LAorCTB4ZTljYzZmNmMsIDB4MTE0M2RlYmYsIDB4NWNjOGYxOGQsIDB4OWZlNDY3Y2IsIDB4NmRmZDBiOWYsIDB4ZjI5OWIxOWQsCisJMHg1MzhkM2NhYSwgMHhkZmJiYmJlOCwgMHgxYmJhM2QxMCwgMHgzNjcyNGJmMCwgMHg5ZTJjZTQxYSwgMHg4NzhlNjNjNywKKwkweGY1NzViNzg5LCAweDNhMjBiNGMyLCAweDdjODA1NWQ1LCAweDJlZTdlMmNkLCAweGJlYmI3ZTMwLCAweDg3ZTMzNGE4LAorCTB4OWI5ZDRjZmMsIDB4NTUxOGU1Y2IsIDB4OTdlYmJiMWUsIDB4ZGEwNWRjNjEsIDB4NjM1ZjUxZmIsIDB4MGZjZTc4M2YsCisJMHhiN2Q3MTk1MiwgMHg0NDNmYTg1MSwgMHg4MzBjZjM3ZSwgMHhlODM5ZWYwMywgMHg0MzBlNDAyYSwgMHg1NjgyNWQ3YiwKKwkweGM5MTgxYzRmLCAweGMxZmIzNWYxLCAweGEwOWVjY2JiLCAweDcyOGM0ZDM4LCAweGJlYTM2NjFlLCAweGViMDY5Y2RlLAorCTB4NzQ0MzM4ZDksIDB4NmM3ODA3NmUsIDB4ZmExMDY4YTksIDB4NTVjNGM3OGEsIDB4MGQ5OTdlNzAsIDB4ZGU2ZmQxZjUsCisJMHgxYjEzOTE1MiwgMHg4YzY2OWViYywgMHgzNmQwYzA3MywgMHhkYjlmMGZkNywgMHhiZmM4ODVkMywgMHhiYzc5MjM1ZCwKKwkweDFjZGQ2N2JkLCAweDNmNDA3MWJlLCAweDQ3OWE4N2E4LCAweDZhZTZhZTk3LCAweDU1NzI0MWRhLCAweDZkNmRlNTY3LAorCTB4MDczYTdhYWUsIDB4Y2ZjMTU1ZDksIDB4ZjgxM2FkNWQsIDB4YzRhNDgyN2UsIDB4ZjI4YjliY2IsIDB4NGJmNGJmNDksCisJMHg0OTJiMTUyZiwgMHg1N2UyODQ5ZiwgMHhlNWZkM2Y5ZCwgMHg5OTExZTkwNywgMHg4NzE5ZjFmMSwgMHg0Y2NlYjQ5YiwKKwkweGRhMDdlMWZhLCAweDRhZjk3NDNiLCAweDFlMGJkNDdkLCAweDYyYmE3ZjZkLCAweGY4ZTMzNjUxLCAweGFmMTA1ZmE4LAorCTB4N2JjNWU2M2EsIDB4OTVmZGExOTMsIDB4M2ExNmZjMmEsIDB4ZTA2OWM5MWYsIDB4OGQ5ZGIxZWQsIDB4ZGJmNDhiZjgsCisJMHhjOGUwMDE2OSwgMHhhMWNlODJlOSwgMHgzYzM4ZjdiMywgMHg3YzNhMjRiNywgMHgyZTAxZjg2YiwgMHhhZTc0ODdkMiwKKwkweDc4ZjdhNTJiLCAweDY1OGUwOThmLCAweDdkZThlZmI4LCAweGU3ZjNhMjVkLCAweGNkNGY3YWExLCAweGIxMzA3MGFiLAorCTB4M2U5Y2U3MzYsIDB4MGY5YzRkZWMsIDB4YTc2OTM1ZWEsIDB4MDFmYTg5ZDcsIDB4ZWQ4YTk3ZDAsIDB4MDk0YjJhMzYsCisJMHg1Y2Q0YjNiYiwgMHhkN2FkZThlMCwgMHhhYjZkNWNiYSwgMHg5MzcyODJhZiwgMHgwM2Y2OTk4MywgMHg5OTUzNGMzYywKKwkweDc5YzAzMDdmLCAweDFjY2YzM2VkLCAweDNkZjU4YWJmLCAweGY4MDNhZTBlLCAweGU2YmNlMDk5LCAweGU2MzM0N2Y5LAorCTB4ZWRmMzdiNDAsIDB4YjliNDI2YWQsIDB4ZjVhMWNmNDMsIDB4NzZhNGVmNmUsIDB4NGNhYjRiNzEsIDB4MjNjNTE5ZDMsCisJMHg4NmI5NTQ2NSwgMHhhZmQ5MGIwOCwgMHhlNDg2NzRjYywgMHhjNmM5MzRiMywgMHgzZDEwYTdlZCwgMHg1MGY4MGViOSwKKwkweDY0NGFmMDhmLCAweDM4ZDBhZjA0LCAweDQ5ZjhlODcxLCAweGRlZmNjOTA1LCAweDFhNTJlMmU0LCAweGE3NDU0Mzc3LAorCTB4NWQ5MGUzMWUsIDB4NGVjNTdhYWUsIDB4ZWZhOWY0ZjIsIDB4N2JiMWZiNDIsIDB4ZmYyM2E3M2EsIDB4YzgxYTE1NzcsCisJMHhjMWY4N2UxZSwgMHhjZjExOTM0OSwgMHhjNTEyNjVkZSwgMHg3YmQxN2FkMSwgMHgyMzNkYmFjOCwgMHgxY2FlOWNmNSwKKwkweDdmMjhjZDhiLCAweGRiYjljY2I3LCAweGZlYzNlOGVjLCAweDhiMzE1MmQ4LCAweDk2NWEyZmNlLCAweGE1NjMzYjcwLAorCTB4ODhlNDgxYmQsIDB4ZTdiOTQyYTUsIDB4NzFjYmQ4YTIsIDB4YTIxM2JmYWEsIDB4Mzc1NGI3MjcsIDB4OWJkZWYxOTgsCisJMHg4NTkwZGU3YSwgMHhlZDk3ZGJkOCwgMHhiYmJkMWZiZiwgMHhmMThiZjk2MSwgMHgyYWVlNGZhOCwgMHg3OWM3ODg2OSwKKwkweDRmZjA4OTZmLCAweGQ1ZGYxMzc3LCAweGYyMDI5ZjkzLCAweGYxZTUxZTM4LCAweDkyMGU5MWEyLCAweDdmZjJkZDJmLAorCTB4MGUzYjM5YzYsIDB4NTU2OTE4MWUsIDB4NDNkYjhhZjgsIDB4NDE3ZmUyNWYsIDB4OTI4ZDY2YmYsIDB4MWM2MDE0YTcsCisJMHg4ZTQ0YjUyZCwgMHg3NGJjNjA3NiwgMHgwMGQzYmJkZiwgMHg3YWJkOTNhZSwgMHhmYjhkNjNmMiwgMHgyZmMxZjQ4MSwKKwkweDQ5MzgyNjMyLCAweDY4MWU5ZTVmLCAweGFjOWQyMmIwLCAweDhmNDZmYzZhLCAweGUyY2U2YmY3LCAweDdmZTg1NWU5LAorCTB4ODdiNzAyNTUsIDB4OTgxOGM1NTYsIDB4YTFmMzQyZGYsIDB4MmU3NTRmNDUsIDB4ZjVhN2E4NjYsIDB4MDEzN2RjMDksCisJMHg3OThmYzViZiwgMHhmZDEwMjMxNiwgMHhiYWYxOGU0YywgMHgyOTg3MDBhZCwgMHgzMGJiYmUzMSwgMHhkN2FjNGFhZCwKKwkweDEyOWM2MGQ5LCAweGYwODBiNDQ3LCAweGM1NjNhMjlkLCAweDlkYWYxZTA2LCAweDExNWNmMzg1LCAweDU5YzUxMWYzLAorCTB4ZDFjNWE3MjcsIDB4YzVhMzU0N2QsIDB4YzlmYmMzYWQsIDB4ZjZkNTY3N2EsIDB4OGJjZThjYjUsIDB4YjAxNWJjNTEsCisJMHg4Y2UxZjc0YSwgMHhiNmJkYzcxOCwgMHhlZWFiOGUyNywgMHhkY2YxYTkxMywgMHgwNDI5MDU3NSwgMHhmZmMxMjEyZiwKKwkweGNiMjNlMjJkLCAweDFlZjExMDFhLCAweDQwM2U5ODdlLCAweDQ2YWFmOGY2LCAweGNkNDFmOTEzLCAweDkxZGEzYjA5LAorCTB4ZjgyMzMyM2QsIDB4M2U3YWE0M2UsIDB4YjE2M2UwMTcsIDB4MGM1NjdjMDIsIDB4OTVkNjliYmMsIDB4MTdiYjE0OTQsCisJMHg5MWZhYTVlNywgMHg1MGFmMjBmMSwgMHhjYzI1NjVkZSwgMHg0YmViOGE5YiwgMHg0YWVkYzM3YSwgMHgwY2M2N2E4NiwKKwkweDE2NjAzNjVkLCAweGEyYjllYWUwLCAweGM2MWVhYzc4LCAweGQ4NTgzYzIxLCAweGFiZmI0YzM4LCAweDQwZDEyMmJmLAorCTB4ZjJkMGQ4ZjEsIDB4NWM3ODBiMjcsIDB4MjEwNTBiMzIsIDB4MTM1ZWViYWUsIDB4NzU1ZGNmZGQsIDB4YWFmN2JlZTAsCisJMHgzMDFlN2U1MCwgMHg2NzY3YzkzOSwgMHhmZmJjMTQ4MSwgMHg2Njc3MWRkZSwgMHhhZWRkZmY3YywgMHhkYmI1YmY5YywKKwkweGE2M2Y3NDBkLCAweGY4Y2NiZTNiLCAweGU3MWFiY2JlLCAweGQ5ZTUxYTg4LCAweDMxZjI3ODhjLCAweGM3ZjQyMWM3LAorCTB4OGY3MWFiZmUsIDB4NGZjYTQ2MWIsIDB4NmRhYzdmNjAsIDB4NjNjNTE1YzAsIDB4NjhlYWM2YzIsIDB4ODUyOTI3OWYsCisJMHgwNWY3ODI3OSwgMHg1ZmViMjk1NiwgMHg3YTg3MGRkNSwgMHg3NWY1ZWEzYiwgMHhmNjA3OTQyOCwgMHgzNzhkODcwZiwKKwkweDIyMjZiYmU3LCAweDg4ZWM0NmRkLCAweDQ3ZGFmZDQ3LCAweDE3MTM0M2JjLCAweDc5Mjg3YmMxLCAweGZhNjIwNGIxLAorCTB4OWM3OWFhOTMsIDB4M2NlYTY2MjQsIDB4NTM0ODc3OGEsIDB4MGFkOTNlZjksIDB4ZGNmYzYwMTYsIDB4N2M4NGMwYTAsCisJMHhmZDRiZWFiYSwgMHhlODg3NzAwZCwgMHg5MjdhY2NkNywgMHg5MGFlOTE5MywgMHg3ZjJmNDhiOCwgMHg2NTc2ZTY0NSwKKwkweGEyZGJkYzg4LCAweDAyZjFmOWYwLCAweGNmOTFlZTI1LCAweDkzZTdiZmYyLCAweDUyMjhiYjI1LCAweDE4ODlmN2Q5LAorCTB4ZTg3MjQyOTUsIDB4ZDkwYTU3MTEsIDB4NDExY2M0NDMsIDB4OWQ5Y2JlZjAsIDB4ODdiMTUwNzMsIDB4OGY5Y2E3N2UsCisJMHg4M2U3MmJmNywgMHg4M2U3MmIwZiwgMHgwYjc3YzU1ZiwgMHg4NjNmOTBjMCwgMHg3YTQwMTZlZiwgMHhlNTQ5YzliYywKKwkweDI4MTUzNDZmLCAweDZmZTM5OWNhLCAweDQ4OTJlZTQ1LCAweGY5OTQxZmIyLCAweGFkZjk5NGU5LCAweDI1NzM0ZWIwLAorCTB4NmQ1NjdlMDMsIDB4NTg3OWQzZDMsIDB4ZTk4NGMyNjMsIDB4YWYzMmNmNjgsIDB4ZGIxMTllZGMsIDB4NzU4N2VmNzMsCisJMHg5ZWZjYmZjMiwgMHgwOTVkYTc3MywgMHgzYTRmM2ExZSwgMHgzZmY3Y2FjNywgMHg1NDJkN2M1NSwgMHhiNjEyYWZlYSwKKwkweGM3NWY5MDE5LCAweDM2ZTE2YTc2LCAweGM2YTQ1MmZlLCAweGRhNjIyY2FlLCAweDRkMTM5N2YzLCAweDRiZjUzNDQzLAorCTB4OTdmM2RhYWMsIDB4NmFkN2VjOTMsIDB4Njg3NjRmYmUsIDB4OTc1ZTVmY2YsIDB4MWY2NDNlMzEsIDB4MGI1NzRiNTYsCisJMHg4MDZlODAxMywgMHg3ZDMzYWE0ZSwgMHhkNjg1ZmYzNCwgMHhjZDdiOGE1MiwgMHg3NGM3YjkwZCwgMHgzZjM2YWI0NywKKwkweDJmY2RhN2RmLCAweGFiY2RhZGRjLCAweDQ2YzNjOWU3LCAweDkyMzBmNDI5LCAweGYxMzFmYzhkLCAweDBjZjdlNDRlLAorCTB4MDEwN2VmODUsIDB4M2FiMzZmYmYsIDB4Y2ZkYTExOTksIDB4ZjhiZjc4MTYsIDB4MWIwMGM2MWUsIDB4NzZjOTRiZWQsCisJMHhlM2FjMjM4YywgMHg1Y2IwOWZmNywgMHhjM2JkY2JjNywgMHhiZTdhZjY5NSwgMHhkYjhlYzU2ZiwgMHg0YjFkYmVlOCwKKwkweDA2ZWRlMWNjLCAweGZjN2VlZmYwLCAweDcyZjFhNDhlLCAweGZlODdhZjBlLCAweGEyMWJkNjEyLCAweGU1YzM1M2Y0LAorCTB4ZmU0NTljOTMsIDB4MzNlYzliODIsIDB4NjJiMzZiMjMsIDB4YzJmZTAxNmEsIDB4ZTkzOTlhMzQsIDB4YWIwYzc1OWUsCisJMHg5MDc1YmYyNywgMHg1MTMyN2Y3MiwgMHg0M2JjYTRlOCwgMHgzZTYxODZiMCwgMHhmMGE2NzA0NSwgMHhlNDhmODVmOCwKKwkweGZlNDk1MGMzLCAweDg5ZjEyYTc1LCAweGY0NDc3NDViLCAweGI5MGQ5N2U2LCAweGFhZjAwN2JhLCAweDkxMDI4NmY4LAorCTB4NTYyM2UyZTQsIDB4ZDhmOWVmNDYsIDB4YmYxM2Y3NWMsIDB4YjAxNmMzNmUsIDB4OGY2YjMzNmUsIDB4Zjg3YTE1NDksCisJMHg2MWJjZWRlNywgMHg1YzEzNWZjNCwgMHhiNTJmZGEwZSwgMHg3ODBiMjQxNSwgMHg4NTg4YTUyZSwgMHg0NTM2Y2I5YywKKwkweGM0YTNlODY5LCAweDVmNDIxNzFhLCAweDRiZTg0MjQzLCAweDlkN2Y3ZjRiLCAweDM5NDVkNWVjLCAweGU4NDJjZTkwLAorCTB4ZTViZTJmZjAsIDB4YWYxODJjNTEsIDB4MDVmYThmNGMsIDB4NzY4OWQ1OGYsIDB4Y2E5ZTA1NGEsIDB4NzU0Zjk2MDIsCisJMHhlZTMxOWI0NiwgMHg3M2QxOGI2NywgMHgzZmQ4YTU3OSwgMHhhYjlmNGFhNSwgMHhiMmViNTllNCwgMHg1NjZiZmJlMSwKKwkweGY2ZTY0OWQxLCAweGYxM2QyZGJhLCAweDk2ZGYxODI1LCAweGVhMzVmNjAwLCAweDVjOTE5OTYzLCAweDFmZDNiMDdkLAorCTB4N2ZkNDM1NzYsIDB4NjVmZmZjMDQsIDB4ZWIxYmZkMGMsIDB4NjVlZmJjNjQsIDB4NWYxMGU0YjUsIDB4Nzk0OTYyM2YsCisJMHhkMDVlZjMwMCwgMHg0MzdmNThlOCwgMHhlNWFmZjczMSwgMHhlZjgyNmNlOCwgMHgwNWJlYTE1MSwgMHhjMjNkYTVlZiwKKwkweGMxYTk0Y2YyLCAweGZlYmMyZGY1LCAweDUxNjQ1OTdhLCAweDMxMTg5ZjkwLCAweDlkYmZlYTgyLCAweGNlZjg2NjY3LAorCTB4ZDlhMDc3ODEsIDB4NjNlYzcxODcsIDB4ZGQ3N2FjZjIsIDB4N2I3ZmViNDEsIDB4YWYwN2Q3MTQsIDB4YThmMTFjMTksCisJMHg3Yzk5MWUwZiwgMHhkMjg3YTY3NywgMHg2ODVmOGQ3NCwgMHhiZWU0MTA0YiwgMHg4Zjg1MTdjZSwgMHg5MmJkNzIzNiwKKwkweDc4YzdlMjViLCAweDM0YzI3NDdjLCAweGZkMDM5OTU3LCAweGU5MGJiNzFkLCAweGYxMTJlNzQyLCAweGZkMzc1YmU4LAorCTB4YTg3ZTJiNDQsIDB4MGZjMTA2ZTQsIDB4NWQ3NDliNGIsIDB4ZTNmZjQzMGUsIDB4MzU3NzBiMTEsIDB4ZDU5ZTI5MWUsCisJMHgwMmY5ODY1MiwgMHhkOTAzZWU5MSwgMHhkOWViZTI1YywgMHg3ZTAyYWViOCwgMHhlNTRhZjBmZSwgMHgxODFlYTg3MSwKKwkweGJmZGI5YTMyLCAweDNjNDQ4NjkzLCAweGRmZmExNDMwLCAweGIxNWEyNDUwLCAweDJiN2EwZGZmLCAweDRlZjFlN2RkLAorCTB4MTc1N2U0NjYsIDB4ZTA5N2VhYmIsIDB4MTEwOTZkYmMsIDB4ZGE2ZmNmMGMsIDB4YmU3ODFhMGEsIDB4MDBjY2MwZDgsCisJMHhiZDZiOTM0ZiwgMHg0YTY5ZjExNywgMHhmNmMwOGNmNSwgMHg3YTdlMDc0NywgMHg1YjE5ZWQxYywgMHg3MDNhNDg4MiwKKwkweGFlZjljYmEyLCAweDI4MTdlYjFiLCAweDc5ZTI5ZGYxLCAweDliM2M3MGViLCAweDU5OWFiNDQ1LCAweGI5NTQxYzBmLAorCTB4Y2JjOTllYmUsIDB4MGFiMmZmYzksIDB4MGFjY2RlZjQsIDB4Y2UwZDQzNmIsIDB4NzA4NDkxZTcsIDB4YWU2ZGYzYjIsCisJMHg3OWUyMGIwNiwgMHhkMTNkNDBjMywgMHg3ZjIyNDk0MSwgMHhjMjU1NmE1NywgMHhmZmNjMGFiNCwgMHg3MTkxYTA2MiwKKwkweDFmMmZmM2JlLCAweDUzODFmZThhLCAweDViMzU3NWEwLCAweGM3NWU2ODFhLCAweGMxMzk4OTJlLCAweGE5YTg5NmVmLAorCTB4Y2Y4NWExZDksIDB4ZjhmMTQ2ZWYsIDB4ZjFlMzA5OTAsIDB4ZjViNzlmODAsIDB4OGI5YTljY2MsIDB4NzhhN2EzZjQsCisJMHg2YjdjN2Y1MywgMHg3ZWNlNWQ3MywgMHgyYWZlNjFmYiwgMHgxMTBiMDM5NCwgMHhjMjk3ODViZSwgMHhmYTQwNGY5OCwKKwkweGZlNjEyOTNkLCAweDViMDE3Zjc3LCAweDYwZDlkNjgwLCAweDZlNDFmZWMxLCAweGJmYTJmYWJiLCAweDdlOWNkMTg4LAorCTB4NGIwZTBiOWIsIDB4ZDc4MjRlZjgsIDB4MzQxZjEwMjEsIDB4NDQ0ZTRlNWIsIDB4YjUyODc4M2UsIDB4YTFlOGU4OGMsCisJMHg4OTlhOGY4MiwgMHhmY2YzODYyZiwgMHhlZWY3NzlkYiwgMHgxMzdhM2M0MSwgMHhlNzdmNjljMywgMHgzMTU5ODJhMSwKKwkweDYwYmVmNGMxLCAweDMyZjQ0ODk0LCAweDRlNjE2ZmVlLCAweDk0NjNlMjNmLCAweDkxZmJmODgxLCAweDhjNTZjNzA4LAorCTB4Y2NmMzc5NGYsIDB4ODI0YmJmNjQsIDB4OTg2Y2Q5NzUsIDB4Mjg2MmM0ZTcsIDB4NWRhMmZlODcsIDB4N2VmMTNlNjIsCisJMHgwYjhmMDU3NSwgMHhkNTdlMzAyYiwgMHhmODg0M2I2NSwgMHgzMTY2NGE5MCwgMHgzOTQ5YWU3ZSwgMHhlZjkxMTRmNywKKwkweGI0MzU0MzVjLCAweDI1OTU2ZmZhLCAweGQ4Y2ZkZTk3LCAweDQyNzBkMDkyLCAweGJiMjBiNmQ5LCAweDU3MjI5MDZhLAorCTB4NDU4ODk0MDYsIDB4NTkwNmRmMjgsIDB4ZWI2NTVkYjgsIDB4YmI5NDA1OTQsIDB4YWE0N2ZiYTEsIDB4ZWQyOWQ3YmUsCisJMHhhNjViMzI4YywgMHgzNzFiNTRhMywgMHg3ZDcwMTVkMiwgMHhlOTdmNmExYiwgMHhjMzVlZGMyYywgMHhhZThmYmMzZiwKKwkweDg5M2YzNWNmLCAweDMxNzQzOGU3LCAweDE5N2Y3YWRhLCAweDBhNzM5Y2E1LCAweDNhNTRhZmIxLCAweDdhZTU2MGRmLAorCTB4ZDFhZTQzNjIsIDB4YTFiZDc0ODcsIDB4MmE1OWRiOTgsIDB4NDdmMmFiMWYsIDB4ODcyYWJmODUsIDB4ZWY3ZTdiZDQsCisJMHg1MTk1ZjYyOCwgMHg4NzM2NWU0ZSwgMHhlNTk5ZWFlNCwgMHhkNDA3NmY3OCwgMHhjMzE3NzM5ZSwgMHhmYTU2ODk3YiwKKwkweDFmNzJhZWZlLCAweDZmNjI5NGYxLCAweDViZDhhN2JkLCAweDViZDhhMWZmLCAweDA1YmRhM2VmLCAweDgzNTE4NmY5LAorCTB4MTQzN2JmMDgsIDB4MDhkZDc2MmUsIDB4MjA5MDFhZjMsIDB4M2ExNGRmMTEsIDB4ZWRjNDRjNGUsIDB4MjcxOTcxYWYsCisJMHg2MWQ5N2QyYywgMHgwZWEyZDExMSwgMHgzNDhmMDVlMywgMHgzNjQ5N2JmMiwgMHgxNTk4ZWQ5NywgMHg5NWNmNTlmMSwKKwkweDc2NmIyY2Y5LCAweGJjYmIzNDY5LCAweDdhZTNmMjdjLCAweGU0M2VkMWQyLCAweGI5NTU3YmViLCAweDk5NGM3OTRmLAorCTB4ZmU2NTcxZmYsIDB4NTdmMzI4NmYsIDB4NDM0OThmZWQsIDB4YmNhMTMyYmUsIDB4ZWZhZjEwZGYsIDB4ZmMyOTdlNDcsCisJMHhiOWQwYTcyOSwgMHhiNTc5NTBhOCwgMHhlOTA4YzQwMSwgMHhmYzkxMjJlYiwgMHhlNzc4MjA5ZiwgMHgyNWJkZTQ2YSwKKwkweDRlZjVmNzIwLCAweDFlNjhjOTU5LCAweDc2NjBkYmJmLCAweDdjNDYyYzU3LCAweGE3MTQ2NjRlLCAweDI3YWFlODlkLAorCTB4YjkwMzY1YjksIDB4ZjhiMzcyNDUsIDB4Y2E2Y2ViNWMsIDB4ZTU4MzM4NDcsIDB4NjM4MTUxOWUsIDB4OGU1YWNiYjEsCisJMHg0NjM4YmU3MiwgMHgyNDU3MWY0ZiwgMHg1YmJkZDBhNCwgMHgxZDBlZmVkNSwgMHgwY2YwNzJmNywgMHg4MmE2Njc5NSwKKwkweGYzZTI1ZWY1LCAweDZjNzI0N2ZmLCAweDhlZTNlMzJjLCAweGZkM2EyNGJkLCAweDRmMWNkZTVjLCAweDkxMjM3OTI2LAorCTB4NWZlZDBhN2MsIDB4NjM2ZjM3OTUsIDB4YmUyMDY0Y2MsIDB4ZmJhMTY0NGYsIDB4NjEwYTc3MDAsIDB4OWRlNzg0NGUsCisJMHgzZjMwN2MyOCwgMHhmZjdkZDE5NywgMHg2NzNkOGFjMSwgMHgwMWQxZGU1NywgMHhjZWI4YTE0ZSwgMHhmNWIwNGVkOCwKKwkweGZjN2FmODgzLCAweDFiZjc1MzI1LCAweDhmOGVkYzZjLCAweDlhMjdlNGQ2LCAweDRiZjUzNWUyLCAweGVmOWFjOWFjLAorCTB4MzVjM2VjOTMsIDB4YjIzYjI3ZGYsIDB4MzJlYmY5MzUsIDB4ZmZlYTY5NDYsIDB4YzlhNDU5YzIsIDB4NTkzMDUwZGYsCisJMHgyZTRjYmY1MywgMHg2NjY1ZTRkMywgMHgwZTQ4NzdhNSwgMHhmYTFlZWQzNiwgMHhhN2ZkMWViMSwgMHhhNzFmYTFiNiwKKwkweGExNGY4NmY1LCAweDBlMGJmMGYxLCAweGEzYjVlMTYwLCAweDAwZTg2NzhiLCAweDg3NTE4NTQ2LCAweGZjODY0Y2VmLAorCTB4Njc5M2QxYzYsIDB4MGFlZjgwZTgsIDB4M2FmZTFmMDcsIDB4ZDM2ODU4MTksIDB4N2YzYzI5ZTgsIDB4NTNhZmUxZjUsCisJMHhmNDY1YmYyMCwgMHg4NjNmM2M3NSwgMHgzYWRjZjA5MSwgMHgyZjBjZWE3YSwgMHhlYTFjNTllMCwgMHhkMDM0NzQ3OSwKKwkweGVhOTcyZGYxLCAweGY4M2RhMjhmLCAweGU2ZDM2NWM3LCAweDRlZjg0YjI2LCAweDA2NjI1OTQwLCAweDhhNmNlN2NjLAorCTB4N2VmYzYxZTcsIDB4MTVhY2VjNzMsIDB4ZmM3NjExNzgsIDB4OGY3NGY1NzcsIDB4NzlhMzM3ZWQsIDB4ZmM4YjhlYmIsCisJMHg4YjhlOGQ1ZCwgMHhiYjBkMWRmYywgMHg1M2Y2ZjFjOCwgMHhjYmJlZjU1MywgMHg3ZTlhMGUwNCwgMHg2NDExNWZkZiwKKwkweGZkMDVhZjdlLCAweGRjNjkzOWNkLCAweGZkMTRjNGRmLCAweGRmZDE0YzRkLCAweGNkZmQxNGM0LCAweDZmZWU3YTM5LAorCTB4MjZmZThhNjIsIDB4ODliZmEzOTYsIDB4MzI0ZDViZTksIDB4YjkzNGVmYTUsIDB4NzI2ZjZkMjgsIDB4YmY3ZGRhNTMsCisJMHg2YWU3MjllMCwgMHhlZjM4MGEzZCwgMHg5ODViOGI0ZiwgMHgxMTE3ZTRjMywgMHg0YWU3YTE0ZSwgMHg0ZjlkZjQzYSwKKwkweDQ1Y2E3ZWQwLCAweDEyZmJjMGU2LCAweDM5NGUyMjg3LCAweDM5YWNiZjcwLCAweDJlNzQ0NGNmLCAweDRjM2JiNjc0LAorCTB4OTczMGJkZjAsIDB4YjYyZjliZTcsIDB4NjE3ZTUwM2IsIDB4OGU5ZWVkMWUsIDB4OTQ2Y2I2ZTgsIDB4MTZiNWNkYmYsCisJMHgzNWJiZWUyNywgMHgyM2M3ZjQ1ZiwgMHgxYmQ2MTQ5ZiwgMHg3MTRjZGVlOCwgMHhlOWM1Mjc2NywgMHhiZGZjMmQwYSwKKwkweGM3MTE0Mzg0LCAweDkxZTMyODhlLCAweDkxNzlkYTVjLCAweDI3N2M0NWY5LCAweGIwZWVkY2M3LCAweDNmNjBlMzJhLAorCTB4ZWEzMjZlMzAsIDB4MzAyNWMyYjcsIDB4YmY1YmY1MmUsIDB4YjBhOWZhOTgsIDB4ODQyYjhmNzQsIDB4ZTFmYTZiOGMsCisJMHg0MTBhMjc3MSwgMHgzMTc2YTZlMywgMHhjNzAxMTc3YSwgMHhmNWM2Njg3NSwgMHhmYzNmNzQ0YiwgMHg3OGMyNWZhMiwKKwkweGQzYjQ0NzYxLCAweDM1NGQ3MThlLCAweDIxZGY4YzVmLCAweGRmY2Y0NWJmLCAweGY4NzQyYzVmLCAweGI4OTNkNDI1LAorCTB4NWJlZjg5YmQsIDB4MzNkODgxYzYsIDB4MWYwZDc5ZDMsIDB4NDdhODY1YzksIDB4NWQ5ZGI5NzEsIDB4OWExNzlkN2MsCisJMHg5ZjkwMGJmYywgMHg2MDc3OTU4YSwgMHg3YmE1OGNjMCwgMHg3MzBjNGM5YiwgMHg5MTI4YmVhMiwgMHgzODM2M2JiZSwKKwkweGUzMzlkZjE3LCAweDFiMTVhMGVmLCAweDFmOTBkYmRkLCAweGRlNWM3NGViLCAweGRmMzMxOGIwLCAweGNmYjVkMDU3LAorCTB4M2JkNDE1ZmYsIDB4ZWM5ODNiMTksIDB4NGJmYjA0OTUsIDB4YjQwNDc1MmMsIDB4NDRjYWU0NWYsIDB4NWIyNGUzYmIsCisJMHg3NTY4NzI0ZiwgMHg4ZjdmZTc5NCwgMHgzMWJlN2EwNiwgMHhmNDUwNWViMywgMHg3NzYzZjUyNywgMHhmZGMwZWY4NSwKKwkweDg2NTc4ZTg4LCAweDRkMWYyMWU1LCAweDY0NWUzYTMzLCAweDFmN2ZiZmMwLCAweDNjZmM0NGRkLCAweDg3OTFjYTJkLAorCTB4N2RmZGFjMmYsIDB4OGY5ZTBhZjQsIDB4Mzc4OGJjNzMsIDB4NjlhY2FkODMsIDB4OGZmYzcxNDYsIDB4ZjE0NTJmM2YsCisJMHhhNzlhNzQwZCwgMHg3ZmI0M2EwYSwgMHg3NjUzNzNkNCwgMHgwNjM2MTNkMSwgMHhmYWViNTRlMCwgMHhkN2U3YzBjYSwKKwkweDcwNzhjMDY5LCAweGMxMDcxOGQ0LCAweDQ2NjFlMDZmLCAweDI3M2E5OGU3LCAweGUwNzZmODQ3LCAweGZhODBkZjdlLAorCTB4YjI4NzhjNmMsIDB4ZDYxZTQ3NGMsIDB4ZDI3N2QyNGIsIDB4ZWY4ZWYyN2QsIDB4YTgyN2ZkZjgsIDB4NTA1Mzc5MTksCisJMHg4Mzg5ZmVmYywgMHhmOGFmYWI5MiwgMHhkYzMxYzllMywgMHg2YTk0NWQ0ZSwgMHhhODc4ODc1OSwgMHg5NDRjOWJiMywKKwkweGU3NDhiYzFlLCAweDlkY2U5OTgyLCAweGQ5NmJmMThhLCAweGE5N2JmN2QwLCAweGZhZTE4ZWFmLCAweDQxYTU3OTIxLAorCTB4NzQ0MTAyMzEsIDB4MzBlNTk0YzIsIDB4MGNiZGU2YTYsIDB4YmJmNmQwZjQsIDB4OGJkZmJhYzMsIDB4NDMzMjcwMDMsCisJMHhkZWYzYzg5YSwgMHhlYjE3OGYxZCwgMHhhYzY1ZjUzNCwgMHhlMzFkZmRkZiwgMHhiZGE3YWNmNCwgMHg4ZmNkZGJmYywKKwkweGM2NTU0ZjJmLCAweGM3OTk3YTQzLCAweGQ1MGM3ZmM4LCAweDZkMGI2YjNiLCAweDg0M2YzYmVhLCAweGNjNjNjN2U3LAorCTB4NTIzZGU5ZGIsIDB4MTQ4Nzc5NDksIDB4NGUzMTVhZWEsIDB4M2RlOGNlMTEsIDB4MzdiZmMxYWUsIDB4OWU4MTlhZmIsCisJMHgzZDM5OWE3NiwgMHhkZDNjOGFhNywgMHhlYWZhZjIyOSwgMHhiYmVhYTUzYiwgMHg3YTE0Y2Y2YiwgMHhhM2NjMmI2ZSwKKwkweDhmZDRmYzdlLCAweGRmMWIzN2I0LCAweDZkNjc4OGNiLCAweDZlZmFiZTM0LCAweDAxMmY1YTk0LCAweDJiMDkyMGY0LAorCTB4ZTIzYTY3NWQsIDB4ZmIxMjUwYWIsIDB4NjNlN2U3ODQsIDB4MWQyMGU2OGEsIDB4YjJmMjY4NWMsIDB4Y2RmNDgyNGYsCisJMHhjNmM4ZjA4NSwgMHg0OWQ1ZmM2MCwgMHgzZjVhZjdkYSwgMHhkYTgxMzMxZiwgMHgxYjZiZWRhOSwgMHgyODRmYjIyNywKKwkweDNhMjdlOTc4LCAweDY5MTU0ZGFhLCAweDYyNGViZDFmLCAweDljM2JlMmFmLCAweGE4MGQ1OTIwLCAweGE3NzZkNTk3LAorCTB4NzhlMmRlNDAsIDB4YzVmYzgyZWYsIDB4YmI5MDNkZjQsIDB4M2VkMWU4OWYsIDB4ZmJlOTRlOWQsIDB4M2YyYTFlNGQsCisJMHg2OTRkNTRkZCwgMHhjYTllYTlhMCwgMHhhNDZhNmEzZiwgMHgyM2RiOTZmNCwgMHgxNjdmOTE3MiwgMHgzZWM2NWZlZCwKKwkweGRhZjdhMjA5LCAweDEwMjdiZDM2LCAweGQ0NTUzZjk0LCAweDUxYWQxZDM3LCAweDcyNTRlOGU4LCAweDFjOWZkZmRmLAorCTB4NTNiYmVkYzMsIDB4M2IzZTM4ZTMsIDB4ZjdjMGRlYzAsIDB4OTcyZTgwZGEsIDB4ZGJmZDZkNWIsIDB4ZmRjYTFkMWQsCisJMHhmOWUzYTNhZSwgMHgzYzQ3NjVmZSwgMHhjMzFmMmZjZiwgMHg2NDU5NmVmZCwgMHhlOGZlZDhhZCwgMHgzZmVmMDM3OCwKKwkweGVmYzZhYzQ1LCAweDdiZjc4ZGIyLCAweDc3YTQ1ZDJhLCAweGIxMzU3ZWE0LCAweDU4MzFmZWU4LCAweDczY2ExNjNmLAorCTB4YWVhN2YyN2EsIDB4NDFlNWRmZTIsIDB4YWY5ZDVjYmMsIDB4NDJiNmZkZmEsIDB4NjFlZWZhYWIsIDB4OGZjZjdmM2EsCisJMHg3YTAyZjdkZiwgMHhmYWQ1ZmVhNywgMHgzZTcwMjY2MywgMHg0YmVmYWQwYywgMHg0M2M5ZTdlNSwgMHhjMmE5ZjFlMSwKKwkweDY4MTdjNGI3LCAweDI0MWYyMzY3LCAweDlkNDVmMTA3LCAweGE1NDJmODgzLCAweGQ2ZmU5NTQzLCAweGE3Mzg3MjE2LAorCTB4MGYzYTE1MWEsIDB4MDdlZWU3ZTcsIDB4NzY4NDJlYTMsIDB4YjRjY2UzODMsIDB4YmJlMzIwOGYsIDB4OWQ5ZWIwY2IsCisJMHhhMTJmYzI4MiwgMHg2M2JjYTBmYywgMHhjYTgzZjJhYywgMHgwZmJkMmEwNywgMHhlZmUzM2UwNiwgMHg4Yzc1ZjMzNCwKKwkweDVmNzlmYTk1LCAweDdiNDc1OTU4LCAweDg0NWRjNDZjLCAweDJiN2E4M2Q3LCAweDEyYjFhZGVhLCAweGIwNzkyZjdmLAorCTB4ZWRjZWY1ZDgsIDB4MTFiMTlmYzgsIDB4OTY5MThjMGUsIDB4ZjdkNGIyYWMsIDB4ZmUzZWM3MjUsIDB4OTU0M2MyYWYsCisJMHhhM2MwZmQwYiwgMHhjYTBjMWMxNywgMHgxMjNmYzNiYiwgMHg1MGU3MjQwZSwgMHhmNmZkMjM4ZSwgMHg4YzRlYjcyMSwKKwkweDE3NzYyOWIxLCAweGM3Y2ZkZmE3LCAweDFkMjI2ZmM4LCAweDFkNjYwODc1LCAweDMwZTg3YmRlLCAweGYwNWY3ZGY3LAorCTB4MGViZTc4ZTgsIDB4MTZkNjhlOTUsIDB4ZTMwNzRhMzIsIDB4OTZmNjg3M2EsIDB4YmE3YWVhN2IsIDB4MjMwNzc5ZDcsCisJMHhjNjFhOTdmOSwgMHhhY2YxNDNjYiwgMHhmZTQ4MmJhZSwgMHhhOTc5YzE5ZCwgMHhlYzBjNjRmMCwgMHhhMTI3ZTgxZiwKKwkweGU4ZWY0MmM2LCAweGUwZTg1NmRkLCAweGQzZjAzNmZjLCAweDY3YWMwZGNhLCAweDNlOGEzNWZkLCAweGY4OTQ0YzdiLAorCTB4N2U4YWM4N2IsIDB4YTQxNzJlZTksIDB4MWE5OTY1OTksIDB4Y2Y0NzQzYmQsIDB4ZWZlMTVmM2EsIDB4NTY0NWZiOGEsCisJMHhhMzcyZWY4ZCwgMHgxNzFjMWQ2ZiwgMHhlNWM4NTIxZiwgMHgzY2Y0ZDc0MywgMHgyZjEzZjcxMSwgMHhmNzQyZDVmYywKKwkweGVhMGMyZjhiLCAweGNlZjY4ZDNjLCAweDUzM2Q1Njg1LCAweDJhOWIyM2RlLCAweDhiOWRkZTgwLCAweGY5MGMxMzNlLAorCTB4ZjM5ZWYyYTUsIDB4MGVmN2U4ZTcsIDB4MTc2ZDdhODMsIDB4YjViZGEzNGYsIDB4NGNjNGFiNjgsIDB4ZWI2MDllNzgsCisJMHgzZDIwYjczNywgMHg0ZjQ1N2JjZCwgMHg1YjlhOTllNywgMHg3YTQ3MWUzNywgMHhjMDRmYjczYywgMHg4NWQ5NmZlNywKKwkweDMxYzUwMjdkLCAweDdjMjI1YjZiLCAweDBhNWZhODY2LCAweGM3N2ZhYzc5LCAweGUzYzdjOTZlLCAweDM5YzUzMjhiLAorCTB4M2VmMTk0NmEsIDB4YTBhNWQ3MzEsIDB4ZWI3MTNlNWQsIDB4ZmI4NDNhNWQsIDB4OGIwMmVkYmMsIDB4YjQ4ZjdlODMsCisJMHhkZjBjNzlkZSwgMHg4ZGI3MzkxZCwgMHgzNjZiMmZkZiwgMHhmOWMwZWU0NywgMHgwY2ViNGE5NywgMHhjMTdjYTA4MywKKwkweDYzNWU1ZTc2LCAweGY3MGNmZDI5LCAweGNkM2MxNzQzLCAweDYwYjNmZTI4LCAweDhmZjkwNDZmLCAweDFmZjQ1YWYzLAorCTB4OGVlYzgyMDUsIDB4ZmNkYTZkZWEsIDB4NDA2NmQ2N2MsIDB4NTNiMDU4M2EsIDB4MDdiMzVlNWIsIDB4NzlmMjQxZjIsCisJMHgyZjEyYTE1MCwgMHgyOWIyY2UxOSwgMHhlM2MyZDI1ZSwgMHhlZjdjYWEwNywgMHhiOTdiNWY2ZCwgMHhkZTUwNmQxYywKKwkweDg5N2Y2NmZmLCAweDVmMGZmN2E1LCAweDIzZTkyNmY5LCAweDI5OTdjZjBiLCAweGZmOTAzM2Y5LCAweDE3OGUxYmVhLAorCTB4Y2E3NTJlMTUsIDB4YjNjNTVmZDgsIDB4Njc1ODM2ZGMsIDB4MmI2NjJiZGQsIDB4MDc3NWVkZmEsIDB4NzllMjQ2Y2UsCisJMHgwMTYxNDViMCwgMHhiZDk5MTc3YSwgMHhkZWQxNTkyYywgMHhlNGJmNjA3YiwgMHgxZWQ2Zjg0NSwgMHhmYjg5M2YzNCwKKwkweDllMmY3NTk4LCAweGExM2M2MDMwLCAweGIyNjJkZjc0LCAweGVmMzEyNjU3LCAweGZkOWJmNDRhLCAweDg5ZGFjOGEyLAorCTB4N2RlOWRhOGUsIDB4Y2U3NzI2NWYsIDB4MWMyZTdlYzMsIDB4MGVkMTViMzAsIDB4NGZmOTdiYTgsIDB4ZmNjNzZlYzcsCisJMHhhN2RkMDI4YiwgMHgyMDE4OTBiYywgMHg1NWI3OTkzYSwgMHgwYzQzN2JhMiwgMHgxZWZjYjQyZCwgMHhhZjEwOTEzYSwKKwkweDI4YjZlNzg4LCAweDBlZTU4ZjdhLCAweDE5ZTIzYmM0LCAweDQ2NDhlZWYwLCAweGQwNzFlMTNhLCAweGY0NGI0Zjc5LAorCTB4ZDliNWI5YmQsIDB4ZjljZmY1ODAsIDB4YmM1NTdlMzgsIDB4MDk0YjRhOTcsIDB4ZTcxZTBiY2YsIDB4NzViODljZjgsCisJMHhhNDMwZTZkNywgMHg2NGY1YTc4MywgMHg3NjgxMWY4ZiwgMHgwZDNiNzg4MywgMHhlMTVlMTgxZCwgMHhjNWQ4NWZmZCwKKwkweGQzNzc5MWNmLCAweDM3NjMwMWMxLCAweDJmM2NlMDFkLCAweGE3YzAwNzQ3LCAweDQ3MmZmN2E0LCAweDk3ZTg5ZDA3LAorCTB4ZGRmZmJmOTIsIDB4MGVkMGM3YjksIDB4ODdlN2UwOGYsIDB4ZDUxYjc3ZDUsIDB4MmUwNzFhNzcsIDB4ZGYxNDc1M2MsCisJMHhiZmIzNGFlNywgMHhhNTc3NzY0MCwgMHhjNWRhOGJlZCwgMHg5ZDA5ZGU4YywgMHg0YmU3ODg1MywgMHgwMmJkYmYyNiwKKwkweGNhNzI3N2QxLCAweDJmMTRkOWIzLCAweDZkNzYwN2Q1LCAweDc0NDM3OGMxLCAweDNhYzdjNTM4LCAweGUxYjZjYjkyLAorCTB4YjZjNTk4ZmIsIDB4YzJmNjkzNmYsIDB4Y2VmZDE2M2EsIDB4ZWIxMWU3NDgsIDB4M2ZjNjdlMTUsIDB4YmVhMjA3M2MsCisJMHhhNzc4MGM0YiwgMHgwN2I1MTlmMywgMHhjNjVjZmM4ZCwgMHhlMWZiZWQzZSwgMHhjZTljZjExZCwgMHg5NTlkMGM0YiwKKwkweDgwNGZkMThiLCAweDQxMWM3MGZlLCAweGMyZTlmZWU2LCAweDQ1MWRmYzgzLCAweGE4NWM5ZmQ1LCAweDQ3YjhhN2JlLAorCTB4NjA4MzZlZmIsIDB4M2RlYTliN2QsIDB4NzA0Mjk4NTAsIDB4ZDYzNzFhMTgsIDB4NzM3OTc2ODEsIDB4MGQ4NGYzMzksCisJMHhjMTdkMjFmZCwgMHg1YzdjYTlkZiwgMHhiNWZhOGJmMSwgMHgxYmQxZmIyNywgMHhiY2M5MWRhYSwgMHgxNWRhZjcyMSwKKwkweDAxNDc3NWI5LCAweGJiZDFlMzlmLCAweDdiZTFkMGRmLCAweGY5M2IxZDhjLCAweDNmY2MzYmVmLCAweDA2MmFmMjA4LAorCTB4MWFmNTE5ZjcsIDB4ZDRhNzUzYjksIDB4MGZlOTE0ZmYsIDB4NWJkZTc2ZTAsIDB4MDUyODkyZmYsIDB4OGJmNzk3Y2IsCisJMHhhNzlhOWZiMSwgMHg0ODc1M2Y3OSwgMHhmNTU3MTQ1NywgMHhmZTgzMGU2ZiwgMHgzM2QzNmNiZSwgMHg0YzA1OTdlNCwKKwkweDIzZmIzNzkxLCAweDRiZDQ2ZTI4LCAweGJlZGNlY2JlLCAweDUwZjdjZDEyLCAweDc2MDg1YWJhLCAweDk0MjIyZTI2LAorCTB4NjlmNmVhYmUsIDB4YTg1ZDNkZWIsIDB4NjcwZTdiZWMsIDB4ZmZmOWUwZDcsIDB4OTBlMDMxYWYsIDB4YmE1ZjIzZDcsCisJMHg4ZTY3ZTlkZiwgMHg2ZWVmZTQyOCwgMHhlZjY4Mjg3ZCwgMHgwNTZiMGZlZiwgMHg3N2VhMGY5NiwgMHg2M2M0Y2ZiOCwKKwkweGVhZmU0YWE0LCAweGZlNGQ1NmRkLCAweGE2YmIzNjlhLCAweDFkZmJiNWZlLCAweGZlZDllZjlhLCAweDExZjdjZDBjLAorCTB4N2M5YTlkYzcsIDB4YTY4MTdiNWUsIDB4NjRmN2M4ZmUsIDB4YzA1NDdlNGQsIDB4ZTYzZmE5YTUsIDB4ZWY5MzViYmMsCisJMHhmNGY1ODRjYSwgMHhlOWE4Y2Y2MSwgMHhhOWEwYmIyNCwgMHhkNjYxZDkzZiwgMHg0NjVkN2ZmNCwgMHg2NWRmMjZiNCwKKwkweGQ4YTNlMDUxLCAweGZiZmRhYTk5LCAweGZmNmU0MmE3LCAweDdjMmFhNjg2LCAweDhlZDRlMTdmLCAweDM3ZWRmYWEzLAorCTB4MmJjNzY4MTQsIDB4NWRlM2I1OTMsIDB4MWRmMDVlMjksIDB4ZmY5ZTlkNDEsIDB4ZjhhNjAyN2UsIDB4MzRiYTA5ZmIsCisJMHg5ODA5ZmJmZSwgMHhjMDRmZGZjNywgMHgwMTNmN2YxNCwgMHhlNGRkN2ZjYiwgMHhhNmJlZmNhNCwgMHgwNGJmY2EwMiwKKwkweGY3ZTYwOTdlLCAweGU5ODI5ZjgzLCAweDYwOWZlMGNiLCAweDc3ZTBlNWY5LCAweGI4ZjcxOTRjLCAweGNhMWJlZTMyLAorCTB4NGUxNTNmYjgsIDB4YmRmZDI5NmYsIDB4ZWY4N2Y0YTMsIDB4M2RmNGVhMGQsIDB4Nzk1ZDZiZGYsIDB4ZTNlMDI1ZTIsCisJMHg3NDY3ZGIyMiwgMHgwODZlNTk1ZiwgMHhhMzFjNjI5NCwgMHhlMTg5NzVmMywgMHhmMWU2NjdmOSwgMHg0MThhNmYxZCwKKwkweGExODAzNmZkLCAweDlkZGNjNDlkLCAweDZlM2VlMjZmLCAweGFkNDM4YmRkLCAweDgxZWZhZTc4LCAweDA3Nzg3ZmZkLAorCTB4MjdkODVmYmYsIDB4ZjBlNmJjNTEsIDB4ZDg5MWIzZmUsIDB4YzI5Nzk3Y2YsIDB4ZTkwYTMwZTksIDB4N2NkN2M4NDUsCisJMHgwZDdlNTAyYiwgMHg2NzczYzc3YywgMHhjYTRhZjc5MywgMHhhNDZkNjdiYiwgMHg1NTRjYmVlZiwgMHgyZmJhM2VmMywKKwkweGQ3YjNkZWVkLCAweGI4NWE3ODgwLCAweDdmN2QyZjdiLCAweGYzNWFmODFkLCAweGNkNzZmNzdkLCAweDg3ZDYyYjc3LAorCTB4NDdjZWExNzQsIDB4ZjdjZjg1NzEsIDB4YTlmOWZkYWIsIDB4N2YyYTRkN2UsIDB4ZGRmM2ZlM2YsIDB4NDE4ZTU2NDcsCisJMHg2YWI3YmM3ZCwgMHgxN2I1YzYwMCwgMHgzYjExMzllZSwgMHhmMWYwMDdmYiwgMHg2NmNmNGJkNSwgMHgzZGE4MWVhMiwKKwkweGQxZTcyOTIwLCAweDA3YjU3Zjc4LCAweGNmOWU0YWY0LCAweDZmNzUyNmJmLCAweDYzMzc5ZTI5LCAweGIzYmEwNDdiLAorCTB4NGY1YjI1ZjQsIDB4ZWUxNmM0ZTcsIDB4NzI4MzU1ZGYsIDB4ZWRjNjYxNzYsIDB4YjU3ZjhhN2EsIDB4ODNiYzRhNDksCisJMHg2MzUwZDNiZiwgMHg2YmFlZGM2NSwgMHhkZjEyM2FmYiwgMHhkYjdkZmZhOSwgMHgxZWYxZWJkMSwgMHgyM2MxYzc3NCwKKwkweGM3NGM1ZWY0LCAweDRmZTM0OTNlLCAweGYxY2IxZDhkLCAweGY3MmM3NjNiLCAweDc3ZGNiZWZmLCAweDA5Y2YxMjI0LAorCTB4ODQ3NmQwM2UsIDB4YTdlNzVkYzMsIDB4ZjI1NjFmZjUsIDB4YmMxMjkwMWQsIDB4ZmViNDRiZjcsIDB4Y2QyNDk3ZjksCisJMHhjMGI4MDFlZiwgMHhjZGZiYTE3MSwgMHg3MDIyZDNmYiwgMHhmOGRiMjc1ZCwgMHg3ZDQwZDM3OCwgMHhkNTZhNzk1MCwKKwkweDFiZmY5YzFjLCAweGU1M2NmMmY2LCAweGRkZmEzMjdkLCAweGFlYWI4ZWExLCAweDc2NzI4NWRiLCAweGU3ZDQ5YjYxLAorCTB4ZDgzOWY3NzksIDB4OThlZmNjMmYsIDB4ZWJlOWQzOWUsIDB4MWIxYzJmYTksIDB4YzM3ZjcwMDQsIDB4NzQ5YjIwMzUsCisJMHg2MmFmNTI4NCwgMHhhNTliZDcyYywgMHhlYTJhNGYwNiwgMHg0NzE2OTM5MSwgMHhmZGY5ZDIwNCwgMHg4ODExYTFhZSwKKwkweDYyOThjM2RmLCAweGJhNDllYmI5LCAweDFmNjBiZTA3LCAweGI1YTRlZjFmLCAweGVlZTkxMjNkLCAweDUyMTFiZWU0LAorCTB4MmRjYmZlZjAsIDB4ZTliYTdhY2EsIDB4NWU2ZjFiYmIsIDB4NmZiNTUzYzIsIDB4ZTlmYjA1YmIsIDB4OWYyZjFmYzEsCisJMHhmNTRhZDYzNiwgMHhiODlkZjBkZiwgMHg5M2FjZWQwNSwgMHhjMGRkZmMxOSwgMHhmZTQ2MDY2MywgMHhkYzNkYzJmNSwKKwkweDcwNzkzZTRlLCAweGZiZTBmNmYwLCAweDdjMTRkMzU5LCAweDdkZjA2NDc0LCAweGY1ZmIwYmY1LCAweDc3ZGJiZDRhLAorCTB4M2QzZDRkMzEsIDB4ZWQ0ZWQ3YzcsIDB4MzNiZWFjN2MsIDB4NWU3ZGExMGYsIDB4Njc0NGI4ZjMsIDB4ZjVmNDZhMWQsCisJMHg0ZmZlYjhiMSwgMHg1N2U3NjliNywgMHg0NmI5YzBhZCwgMHgwZDhkOGZlZiwgMHgwMzlhZDdhMiwgMHgyMTYzN2NkZCwKKwkweGYyYTAzZjNhLCAweGE5ZjA4Mzg5LCAweDg2NjRmMWUyLCAweGU3NjVlN2M0LCAweGVjZDVmOGVmLCAweGRkNzQ0NWRkLAorCTB4ZTNjNGJlM2IsIDB4MzFlZjgzYjcsIDB4NzRiZTI5MzksIDB4YjU1YTdmMTksIDB4MmRmYzgyMWIsIDB4YmQyM2JkZmEsCisJMHg5ODllNjg2YiwgMHg5YzFmNjNkMiwgMHgxYTFmOTQyZSwgMHg5ODdlODc5YiwgMHg5M2NjZmM5YiwgMHgxODViZWMwYywKKwkweGViZWQxNmIzLCAweDg5MWRmYTI4LCAweGQ3NmUzOGNkLCAweGZmYmQzZDNlLCAweGIwM2E2YjVmLCAweGVmMjNkZjAwLAorCTB4YzBhMzAyNzIsIDB4ZTliNmJiYmMsIDB4NDY2N2RmYmIsIDB4NjI5ZTc3M2IsIDB4ZjBlYTdlZTcsIDB4N2ZhMDRiZTQsCisJMHhiNDg5OTc2YiwgMHg5MjNkOWFiZSwgMHg1YzE3Y2YwZiwgMHg1N2RlZTQ1MCwgMHg0MDZmOTM3YiwgMHgyZTM5YWQ3YSwKKwkweDlhM2ZkMTU5LCAweDcwZmM5NmQ4LCAweDc3ZTkyZTYxLCAweGRhZWI1N2IyLCAweGI3NWM5ZGI4LCAweDU4YmIyMDViLAorCTB4MTU2YTQzYjUsIDB4NjI5Y2U0M2IsIDB4ZDY1YjlmMDcsIDB4NTdlM2VkYzksIDB4ZWExMWI2MDQsIDB4N2IwMzBkYWQsCisJMHg5YjVkZTYwNCwgMHhkYWVjODUzOSwgMHhjYWRkNjk1YSwgMHg0NzNjMGVjMSwgMHhlNjFiYjVhNSwgMHhlNzQ0M2MxZiwKKwkweGQxY2VjMGFlLCAweGFkZGMyZjk0LCAweDY5YjZkN2NkLCAweGY4YmZhYWYzLCAweDNiNmVkOGQyLCAweDM3ZmEzODYzLAorCTB4MWM2MTUyMjUsIDB4MGE5YmMzZjIsIDB4ZTc3ZjU1NWUsIDB4ZjQ5YzZiY2UsIDB4ZTgwZjI3ZmIsIDB4YjhkNDUzMWMsCisJMHhkMTZiYzIwNCwgMHhjN2NjMmYyYiwgMHhjMjZhZmI3OSwgMHgzNDdmZTQ5YywgMHhkYWUwOTZmZSwgMHhkN2VlMTdmMSwKKwkweDFiZGVlMDc0LCAweGYwZTMzM2YyLCAweGU5Y2ZkOGVkLCAweGYwNWU5MTdjLCAweDJjYmFlZmUxLCAweGZkODE1ZDQyLAorCTB4MzJkZjA0OTksIDB4YmI3YjNiOGMsIDB4MjkzZTQ5MjIsIDB4Y2ExYTA4ZTcsIDB4NjMyYWZmYjksIDB4YjJhNjE4MGMsCisJMHhlN2Y3MmM3ZSwgMHgzOGVhZjU0MywgMHgwZThhNDA1ZCwgMHhiMTgxMTM5MiwgMHhkOGFmNTQyOSwgMHhkZTU3Y2ZjMCwKKwkweGZkMjRlMTE5LCAweGVkYzRjNDM2LCAweDZlMjYyMWY1LCAweDc1ZDEwZmFmLCAweDg1ZGZhMzJlLCAweDdkZjAyNDE4LAorCTB4Njk5N2FjOGUsIDB4OWQ2ZDYwZmYsIDB4MDQxN2Y2ODUsIDB4ZTEwZTk1N2IsIDB4OTU1MDc2YjEsIDB4ODg3ZGU5MGUsCisJMHhmZDAzMmRiNSwgMHg4YzVmMzUzYSwgMHhlYzdiMzNkZiwgMHg0NzhiNTI4MywgMHg4Y2VjZTM4NywgMHgwNDdkOTQxNywKKwkweDc0Y2I0ZmFlLCAweDkwNzQ3ZDU2LCAweDk5NmM2NTdlLCAweDNkZWE3ZTY2LCAweDdlN2Q5ZmNjLCAweGE1OWY5ODU2LAorCTB4ZWY4MDdlNjcsIDB4NzVmZjZjMjgsIDB4ODZlYzkzYWUsIDB4ZjdmNTMyYTQsIDB4MmU0OWVhMWEsIDB4MTJmY2YwYTgsCisJMHg3MDE4YmRlOCwgMHg4MTZjNzc0NSwgMHgxZGI2NmE2ZSwgMHg5NmIyZmYyMiwgMHg3NmM0YWZiNSwgMHgxZDdjOTFhNSwKKwkweGJlZmUwNmE1LCAweDRmMTg2OTUxLCAweGZjYjhlMzc1LCAweGE1ZDI1MTJhLCAweGMzZjZiNGUzLCAweDdlYjI3MTkxLAorCTB4YzYzYmE0MWMsIDB4ZjJlMzRkYjksIDB4Nzk5NTNmNjgsIDB4NmYwZDdkNjEsIDB4NDNkNjc3ZjMsIDB4MTM5NDNlZTUsCisJMHg3YzBkN2QzZCwgMHg0NjZmZjI4OCwgMHhkNTRkNjBiZCwgMHhiZjljNjlkOCwgMHg2ZWEyZjExNiwgMHhmNmY4NWEzZSwKKwkweGVhMjdjNDkzLCAweGM2NmFjYzM5LCAweGEzNjY3YmY5LCAweGM0MWE5YWQ5LCAweGRmOTA4YjE3LCAweGMzNzdkZWQwLAorCTB4MTM4YzdjYmYsIDB4ZWI2YWJmZjAsIDB4ZTk5NzNhN2MsIDB4YTJiNThjNjksIDB4ZmE0OGI3NWYsIDB4N2UyNWY2OTIsCisJMHhkYTJkZGYyYywgMHhjZGZiY2RhZiwgMHgxMWZkZmU5YywgMHgxOTQ5ZjkwMiwgMHgwZGUzYmFlMywgMHgwYTQ5OGZjNCwKKwkweDA4Zjc2YzdmLCAweGZiNjAwZTc0LCAweGNmMWUzYTc3LCAweDdlMjgxMGFiLCAweDM2MTQzMzc3LCAweDYyNDk5NGRhLAorCTB4YmEyMmVhYmQsIDB4ZTMzMzcyNGYsIDB4NGI1OTYzNDcsIDB4M2RiYmYyOGMsIDB4Nzk2ZmI0MzEsIDB4OWJlZWIyOTMsCisJMHgyODQzZmU3NSwgMHhkYmVhOGU1NywgMHg3NDllMzE5MiwgMHhjNGU0ZDZiNCwgMHgxYjU5Y2JmZSwgMHhjMTVhNmZiZCwKKwkweDE1M2QyOWRhLCAweDlmYTJmNzVlLCAweDIyMjZmNzNhLCAweDYzYzlmZGRkLCAweGY2ZDY3OGE0LCAweDUwMjIzYmU1LAorCTB4ZTViMTY3YmUsIDB4MDQ0ZmRjNTYsIDB4YjdjNmVjNTAsIDB4NzNiM2ZiMDEsIDB4ZDUxZGY3NDIsIDB4MmY2MGM0ZmIsCisJMHgwMjdkMjFjNywgMHgxZDIxMjdmZSwgMHhkOGRjMDc5YywgMHg1ZmI3N2E3MywgMHgyMzE3YzdmOCwgMHgyYzVmN2YxMSwKKwkweDViOTZlMTc5LCAweDlkNWZmYTE5LCAweGE4MmQ0N2U0LCAweDVkZjc0NjVmLCAweDMzZGE5YzgxLCAweGFhZjA3YmYyLAorCTB4NWJjNTVkZTIsIDB4ZjAxZDVlMzcsIDB4YjBhZjE4MmYsIDB4OTM4NDA0YTYsIDB4YzkxOTY1ZjQsIDB4ZTg5MTdmYTUsCisJMHhmMGU1ZDY5YywgMHhiYzdkYzJhYSwgMHgwZTNiOWY4MiwgMHg4YTE1Zjk3MCwgMHhiNzBmMTU2ZiwgMHg0M2Y1YmJlMiwKKwkweDIzNmVlZjQ5LCAweGM5MjMzMTNjLCAweGI4N2E1MGNiLCAweDMwODBiZTFjLCAweGM0ZDkzY2U5LCAweGExZjkyMzE4LAorCTB4NGYyZTQ1ODMsIDB4MjgxM2NmMDcsIDB4ZjMzYjc5NWUsIDB4ZjQ4MDEyYmMsIDB4ZjVmN2YwOTYsIDB4YzcwYWRlZmMsCisJMHhiNzgyODU1YiwgMHgyZmRmMzEzZiwgMHg3MWZmOTIzMiwgMHhjZTMyM2I3OCwgMHg2MDZlMzRkZCwgMHhlNTBkYmU2ZiwKKwkweGIyZjhmZWQzLCAweDM3ZmNlMWM2LCAweDE4ZmE1ZjU1LCAweDNmMDg2M2YyLCAweDM3NmJmMDg3LCAweDJmZjA5ZDFlLAorCTB4YzY5ZThmMDgsIDB4NmVjYmUyNDgsIDB4YWU3YjRiN2MsIDB4N2ZlMjJmNGMsIDB4NWZiNThlMzAsIDB4YWY5M2Y5ZjAsCisJMHg0NjA1NWY4MCwgMHhmOGY4YmZiZiwgMHg1NGRlYWQzOCwgMHhhNWMyYTZmMSwgMHgwN2UwYjhiZiwgMHgyYWQ0N2ZjYywKKwkweGU3MGFiZWQwLCAweDc0OGRiYmUzLCAweDU3ZGQ0M2ZmLCAweDVlNGZmNzUxLCAweDVjZjVjNzE5LCAweGQ4MDFmYTY4LAorCTB4YjU1ZmI4NGIsIDB4NDBlNGUzMjYsIDB4MTk0ZjMzYjQsIDB4ZmVmODdlZDQsIDB4ZGFjYjA3ZWYsIDB4YjZmN2YxMTMsCisJMHhlOWUyMjgzZSwgMHhkZGZmMDMyOSwgMHg4NzJmMzUwZiwgMHgwN2U0YjhmMSwgMHhjMjJmNDZmMSwgMHhmODYxMDNlOSwKKwkweDFmMzNkNDA0LCAweGNmNWNmNzA4LCAweDA3MDY3MWYzLCAweDI2ZTNjYmU2LCAweDUzOTAzZGUwLCAweDc5OGUzNTdhLAorCTB4ZjA3ZjEyYmYsIDB4OGY5NDc5ZjEsIDB4MDI3YWE2MmMsIDB4MDc0YTVkZmYsIDB4ZjYxZGRlZmUsIDB4MTczNjA4MmIsCisJMHhiYjgzZTdjYywgMHg5ZDdkZThkMiwgMHg3MThkN2RlZSwgMHg0NjdmMGVkYywgMHhkYzc3NDc1OSwgMHhlMjgxNWVmZiwKKwkweDM1NTEzM2ZlLCAweDg0YzRmZWUxLCAweDg3N2MyZTJkLCAweDQzN2RmNGYzLCAweGI0ZGY2OWIzLCAweGVhM2UzYjQxLAorCTB4OTc4YTY0ZmQsIDB4ZmVlN2UwNmUsIDB4YWJlYTc1MmUsIDB4Yjc1YmY0ODIsIDB4YzhiZTJkYmUsIDB4ZDFlNGU3Y2IsCisJMHhiZmE4OGNlZiwgMHg4NmRiMjc0NywgMHhjN2RjZmY3MywgMHhkNTUwZGY3ZiwgMHg1ZmM3NWQ2NywgMHg3M2M3MDRiMCwKKwkweGRmZTI1MzNmLCAweDBmZTFmOWRkLCAweGMzZWIwNTI2LCAweDRkYWQ0ZjQzLCAweDBkYWE3ZWM3LCAweDA1YTcyY2RlLAorCTB4YjFlZTg3N2YsIDB4YWE1YmI0MjQsIDB4NGU5NTVhOWYsIDB4MGY1M2Y0ZjYsIDB4NTQ1ZmEzYTQsIDB4YmE2ZDYzYmQsCisJMHgwZjcwZjk0YywgMHhiZTNhNjVmOSwgMHgxYjllMmZlZSwgMHhkNGYzZTc0NSwgMHhkY2NhZjZmZSwgMHgxZDMwYThhZiwKKwkweDNkYmQ0MTJhLCAweDU2YWZlYWU1LCAweGRhNDFmZWUwLCAweGZmYzUwMjdkLCAweDE1ZjZiMDY2LCAweDMzMmI2N2E4LAorCTB4MTZiMTVmMzgsIDB4ZTg3ZmM5MTMsIDB4Nzc2YmY2OGYsIDB4NGVjNWZmMGQsIDB4NjQ2ZjA3OTQsIDB4ODFjZmQ1OWMsCisJMHgyMDNlMTI3YSwgMHhkNWRmMTAzNSwgMHhkZmEzYWRmMiwgMHg3ZmNkNWMwOSwgMHg3ZWE3YjAyNywgMHg1NmZmZWQyMiwKKwkweDlkZTgxNzJkLCAweGZjZjUxOWFiLCAweGYxYTRmMzc3LCAweDU5YzcwNGQxLCAweGQxOGZiM2FiLCAweDc5NGI1N2ZiLAorCTB4NmZhMzE0ZjksIDB4NjdlYzQ5ZGYsIDB4M2ZkZjgxOGIsIDB4ZTA5NGVlNjQsIDB4YjI5MjcwZmIsIDB4OWQ3MzM4NWYsCisJMHhjYTcxN2JmMiwgMHg2MzliNjkzOCwgMHg1M2FmMDdiNywgMHg1OTFkZjY1MiwgMHhkZjI0NzdlYSwgMHgzMmYwNTA2ZSwKKwkweDU3ODllOTc1LCAweDU0ZWZkMGVkLCAweDFlM2NjN2JkLCAweGU5YjNiZmJlLCAweDYxOWZhYTVjLCAweDNhMzNmNDFjLAorCTB4ZjA2Njk4NWYsIDB4ZDcxZjNhM2MsIDB4NzE0OGMzYmQsIDB4YzFhY2RjZDIsIDB4Y2ZkNDFjNTIsIDB4MTFiNDUyNTksCisJMHhhYjRiOTlkMywgMHg3MjhmOWQxZSwgMHhjZDk0ZDViOCwgMHhmOWYyMzU4ZiwgMHgxMTRlMDgzNSwgMHhlZDkxZjRlNSwKKwkweGI4NDJjZWI3LCAweDdmYzRkZjlkLCAweGZiNjFhYmZmLCAweGMyZGRmYTMwLCAweGFmZGVlNGZlLCAweGY5ZWZmODlhLAorCTB4YTI2NGRkM2QsIDB4MmIyNmQ5ZjQsIDB4Y2ZlYmEzYzMsIDB4ZmYyOWQ5MzUsIDB4NGEwZTRkYWYsIDB4Y2QzY2Y0ZDksCisJMHhkN2Y0ZDhlZiwgMHhlMTRiODhkZiwgMHhiOTczYmJmNCwgMHgzYmY0Y2RhYiwgMHgzOTQ2MGQ4OCwgMHgyYmMwM2M3NSwKKwkweDFkZGFhYWVkLCAweGMyZWIyODBmLCAweGJkYjJiOGY3LCAweDBlMTExM2M5LCAweDNlMmMwZmI5LCAweDc1YjNhNjg2LAorCTB4N2Q5N2RmM2MsIDB4MjRlYWU0ZjMsIDB4MmM3N2Q2MTQsIDB4N2NjNGYzM2QsIDB4NzhmYjdlZjgsIDB4MjcwODM1ZjcsCisJMHgxNDhiYjZkMywgMHg2MDcyMzhhNywgMHhiYmMyMjU1NSwgMHhhZjkxODc3YSwgMHhmOWY3NTk0ZiwgMHg4ZjcxZTk0ZCwKKwkweDc1Zjk3YzYyLCAweDE2MGRjNTNkLCAweGM0ZjMzYjZkLCAweDg3N2YwYzAzLCAweDk4MjFiMTc3LCAweGJkNzRhZmRlLAorCTB4N2VlNzhmNTcsIDB4YWFmOGU1ZTYsIDB4NzhmYzM4M2YsIDB4NDQ5YjVhYmUsIDB4ZjgwM2IzZmMsIDB4ZjNhN2YzMmEsCisJMHhjYmE1YTJkNSwgMHhjNmNiN2UwOCwgMHhiODQyNmZiYiwgMHg5MzdiZDc5ZCwgMHgwZmNlOWY5MCwgMHhlZTc0NGIxZiwKKwkweGY4MjA0NTdkLCAweGRiYmM3MmFiLCAweGJmZTA1NmFmLCAweDU3NWI2YzUwLCAweGM3MjNkYzk4LCAweDA0Yjk2MWJmLAorCTB4M2UwNzQzZGYsIDB4ZjlmYjQ3NGQsIDB4M2ZlNWZkOWIsIDB4NjA5N2VlYjgsIDB4MTg2MWZlZGQsIDB4MWE1MTMzYWYsCisJMHhlMGRmM2RmYSwgMHhmNTg0ZWExOSwgMHgzZWYzZjdlNSwgMHg2YWYxZDJlOCwgMHg1MzlmOWZmYywgMHgzNjIxM2ZjMCwKKwkweGU2MjE5ZGY4LCAweGQ0Zjk4MjhkLCAweDYxZmMxNDFjLCAweDI2Y2ZhODU5LCAweGJmNDNhNjdkLCAweDhmY2ZmYzExLAorCTB4MTk4Y2U3MzQsIDB4OWY0ODI4ZmIsIDB4Y2JkZjM3ZjcsIDB4NGZkODc1YTUsIDB4MWRkYzhmNWEsIDB4ZmNjODllZjksCisJMHg1NDdiN2E0MSwgMHg4M2Y5OGMyMCwgMHg3M2Y2ZWRjNiwgMHhmYjQwY2NhMCwgMHgxNzI0ZjE0ZSwgMHgyZTc4NmYxMCwKKwkweGUxODFjMmVjLCAweDk5ZmYzMDNiLCAweGMyZjFlMzgxLCAweGYxNGY2MDRiLCAweGYyOTMxMDc4LCAweGQ5ZjlkNjdiLAorCTB4NTBiMjJmODEsIDB4YjdhZTg2Y2UsIDB4ODgyZmU1ZWUsIDB4YWZmNjZhM2UsIDB4ZmFkMDI4YmEsIDB4Y2JhNjdmMjcsCisJMHgwZmZhZmNiYSwgMHgxNjQ1ZjUzZCwgMHg3ZDMzZWZlMiwgMHhiNmZkMWYyMCwgMHgxNjQwODYwYiwgMHhiN2VlYTFlMiwKKwkweDU4ZmY5ZTVjLCAweGYzZTVhODM4LCAweGY3ZTgxYjU3LCAweDEzMDRlYjNhLCAweGY0ODk0OWQxLCAweDJlMWZjNTI1LAorCTB4ODdmMWU3MWMsIDB4OTI0ZjAzYmEsIDB4YzgzYWVkM2MsIDB4YzQ4YjQwZTMsIDB4OGMzOGQyZjYsIDB4Mzk5ZmQ0OWIsCisJMHhjYmFjZjI4NiwgMHhlODMxZmRjZSwgMHgyYjcxZGU5ZiwgMHg0MWU4YWExYywgMHhkZTEyNjc1ZCwgMHg0ZGQ4M2JmNywKKwkweDNjOGZkYzBmLCAweDBjM2JmYzhmLCAweGYzYTM2OWZiLCAweDljMmIyY2JkLCAweDM5ZjE1ZGExLCAweDdjMzBmM2YyLAorCTB4MjU3OTMwYmYsIDB4ZGY3OWY5ZDIsIDB4OGY5NDFjYzAsIDB4YWRmZDY2NmYsIDB4YmY4NmUyOGUsIDB4YjI3YmE3MGYsCisJMHhlNjkyNmRiNSwgMHgzYWY3Nzk5YywgMHg3MDNmMTI3YywgMHgyOWZiNTRjNCwgMHhlN2MxYzk5YywgMHgxYjhlMGNiOSwKKwkweDgzN2U2ZWM4LCAweGJhMmUxM2VmLCAweDdiMTNmMzhhLCAweGVkNTNmMzk5LCAweDdiMDY0M2YyLCAweDE1YmI3ZjUwLAorCTB4YzhlZDUyN2UsIDB4MWJmZmJmMjksIDB4ODViM2U1ZjEsIDB4ZDUwNGZkMzIsIDB4ZmZjN2E1NGYsIDB4NGNmN2ZlOWYsCisJMHgzMzQxMmZmZiwgMHg4MDAwNjNlYywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YWE1ZmYwMCwKKwkweDU1NTQ3MDBkLCAweGJkZWYzZTk2LCAweGRkMjc0OWZlLCAweDEyNDIxMzQ5LCAweDQyMDY4NDA4LCAweDAzNjIxYTg4LAorCTB4YzRkNjcyODEsIDB4MjA2ZWZjZTksIDB4NmIwMWJiMzMsIDB4OGQwOGM0MmQsIDB4NzQ5ZDI0MjIsIDB4NmFlY2U4ODIsCisJMHgwMjFhNmViOSwgMHgzNjc1NjRhYywgMHgxZDQ3NTk4YywgMHg4MDlmOWI0NywgMHg5NDc2ZWMyOCwgMHgwZGEwYzA0MCwKKwkweDZiYTJjYjBhLCAweDNhMjZhYTQ1LCAweGFiNTQ1YjU1LCAweGE2ZTAwZWFjLCAweGQ2M2I4MjIzLCAweDNiZTdiOGUyLAorCTB4MWRkZGI1ZWYsIDB4YTZlZDRmZTIsIDB4ZWU3ZGJhOGEsIDB4OWVlN2I5Y2YsIDB4Y2U3N2NlN2IsIDB4NTJiNDhmM2QsCisJMHg2YTIyY2EyMiwgMHgyYTA4Y2RjZiwgMHg2ZWE2ZmYwYSwgMHg2ZDQ0NDVhMiwgMHhmNjdmMjQyOSwgMHhhZjFmNDU0MSwKKwkweDdkYmM2NGQzLCAweDU4YzlhMzQwLCAweGNlMDhlYjkzLCAweDQ3NTQ0MTllLCAweDQ1OWEyNmRkLCAweDY1NDI4NGI0LAorCTB4MjliZjcxYTQsIDB4Nzk1YmNiZjIsIDB4NmQwZGZlYmMsIDB4NjE5MzE3NDEsIDB4YjA2YWFkMWIsIDB4N2FhNmQ1MTMsCisJMHgxMzE0MzYwYiwgMHhhYWNhYWIwZCwgMHgwYmNjNjI4NiwgMHg0YjlkMmU5NSwgMHg3ZWZlMGRmNCwgMHg4NzliNzQ0YSwKKwkweDJhMjI0Zjk5LCAweGY2MGYxNGQzLCAweDE2OWM5ZDFiLCAweDhiNWRjOWRjLCAweDQ5MWJmYjk3LCAweGVhYTc5ODRkLAorCTB4NTM0Zjk4ZjMsIDB4YTM4MjdjMDgsIDB4ZDgxZDRiMjUsIDB4OTk2NGI0NjgsIDB4OGVlZjNlMjMsIDB4MDdkNmQyMzcsCisJMHhkMmExNGUzMSwgMHhmOWY2MTIzYiwgMHg2ODg1OGY0YiwgMHhjYjE3ZDEyMSwgMHg2NTBmYWExNywgMHhkYWFlNzlmMiwKKwkweDUxMzM3NDAzLCAweDI5ZWQ3NjhkLCAweDcwZGRmNzg1LCAweDA1NTY0Y2NjLCAweGFmYmM2N2ZjLCAweDY3MDIzOWYyLAorCTB4ZmE2NWVhMzQsIDB4NzkwYTQ3NTIsIDB4NGJjZWNjYWMsIDB4MWJjZjBmMWUsIDB4ZDgyOTNiOTksIDB4M2Y2ZmU3YzUsCisJMHhlNzg5OTBhMCwgMHhlZWIxMWRiNSwgMHg2ZDc5ZTE0YywgMHg5YmI2NDhlNiwgMHhmMDM2ZGRmNywgMHhkYjg3OGIzYiwKKwkweDJjZjdmZWY2LCAweGNmNThiOWFlLCAweDllNDMzNjQ3LCAweDZkZmExNTE0LCAweDE3NGZmMjc3LCAweGNlNjA3ZjkxLAorCTB4M2YzMTc3ZmIsIDB4ZjQ0ZDY5ZmYsIDB4NjdiZDM3ZWQsIDB4MDVkN2Q2MjEsIDB4NWFmZDhmOWUsIDB4ODJkNWY2MGUsCisJMHg1NmYwYTU2ZSwgMHgzY2ZkZGEyNywgMHg5YmJmNDhhZiwgMHhlNWRmZjg2ZiwgMHhiMzg2NTc1YywgMHhmOGJlN2UzOCwKKwkweGE3YTI1ZDM5LCAweDY5ZjhiZDE4LCAweGQ2MDJmNzNlLCAweDQzZWI0NjhiLCAweDIxZWU1OTc2LCAweDZlNzE3Yjk2LAorCTB4MjUyZThlY2UsIDB4NWZhZTlkNzEsIDB4NGI2OTc2OGYsIDB4OWQxNWNiMGUsIDB4NjYxNWI4YTksIDB4NmMwZDRkMTUsCisJMHg4NTFmNDI3NiwgMHgxNzk3YjM4YSwgMHhiOTdmNWY0NywgMHg5YmY0MmQ3NCwgMHg5ZGJkMmMxMiwgMHg5MGI1MTdjZiwKKwkweGM3ZTJjN2RjLCAweDA0YjQ5YmI2LCAweDZhMGYxNjc5LCAweDM0NDNkYzFlLCAweGM5MGU5YTk1LCAweGUyYTc3YmJkLAorCTB4NjFiY2E4M2UsIDB4ZDYxMjY3YTksIDB4MmI3YmJlOGQsIDB4Nzk1NTE5NmYsIDB4NzNmYWZkYmQsIDB4Nzk3NWNhMDQsCisJMHhjOWE5YjBjZSwgMHhkNzcyMWI3ZCwgMHg4MGVkZTVlNywgMHhjNDAwZDlmZSwgMHhmYWE5NGU4ZSwgMHhjNzk1MWVmZSwKKwkweGJmZDdjN2U3LCAweDQ2YTc5YzY4LCAweGYwODljZTJiLCAweDlkYzUwNmY4LCAweDlmNjcxY2UzLCAweGY1ODdiYjU4LAorCTB4ZTllZjg2YmUsIDB4YjQ2ZmJlNDUsIDB4NjkzODc1MmYsIDB4ZmRhMjZjY2QsIDB4ZmY0MmI5MWQsIDB4ZGE0Yjg3NzMsCisJMHhmNDkxNDc1MCwgMHgxNmUxZDJiZiwgMHgyZGM3NjBmYSwgMHhmMGVhMWY0MiwgMHg1MWQwM2QwOCwgMHg4ZWQxZWQyNywKKwkweDAzM2ZlOTA2LCAweDcwOGNmZjUxLCAweGUyZWMyMGEwLCAweDRhNmQ3YzE0LCAweDFjY2UxZTljLCAweDllNDk0ZjQzLAorCTB4MjRhOTljM2YsIDB4OTkxNDUzZDMsIDB4M2NiODcwZmYsIDB4YTVmYTYwMTgsIDB4OTM5Y2E3MzIsIDB4YzBkMWNhOGQsCisJMHg0YjRlNjhmYSwgMHhiNDBjYTEyZiwgMHg2NzRhNDFmOSwgMHgwMzdiYjFiYiwgMHgzZmZiYjYxZSwgMHg0M2RhZWRkNCwKKwkweDRiY2ZjNTMzLCAweGYzM2FhZjMwLCAweGRiZjg0NmNlLCAweDY5MmIyY2U1LCAweDFlYzNjZmFjLCAweGRlNjNkZmVmLAorCTB4MDU1NWQzZTksIDB4NjgzZmQxZGIsIDB4ZmVmOTViNzMsIDB4OTRkYzU3ODcsIDB4ZmY0N2JkMDEsIDB4Yjc4ZDIzNGQsCisJMHhiMDVhMjhhZSwgMHgwYWU5OTRiOSwgMHhjYzc2MjJiYiwgMHhjODZlNmVmYywgMHg0ZmM2YmI2NiwgMHhiODM1NTNlNiwKKwkweGUzYTRkNGJhLCAweDAyYjY3Mzg0LCAweGMxYWViN2ZkLCAweGRiMjYxYjNlLCAweGZjNzk1ODE2LCAweDU3ZjdiOTRhLAorCTB4ZjdhNjI3ZDgsIDB4MGFlYjI5ZGEsIDB4ZDk4YmQwYmMsIDB4ZjNjYWJlZjUsIDB4YTY2ZWZmMDIsIDB4ODBmNzllNWUsCisJMHhkZjY0OWRjMywgMHg4MjJiY2I0NywgMHg0NWM1OWJiMCwgMHgwN2NmMzZiMywgMHhkOWJhNzY3ZiwgMHhmNWJiM2ZiYywKKwkweDUxZTdjODdlLCAweGMxNGU5NGQzLCAweGI4MDk5NzMxLCAweGYzZmRjNDEwLCAweDQ1MmU5NTNlLCAweDcxNmMzMGVjLAorCTB4N2Y5OTMyOTksIDB4MmIyMmI1MzgsIDB4MTk0ZWViYzAsIDB4YjhkYTdkZjcsIDB4N2RjNjMzZWYsIDB4ZDVmZGMzYmYsCisJMHhmZGNiYmVkYywgMHgxZmI4ODc2OCwgMHg5ZTk4OGFlZCwgMHhkMDg1YTM0ZCwgMHgwZGE3ZjA1ZiwgMHhlZjQ0NzkyZiwKKwkweGEzYTBmOWEzLCAweDNiMGU1YTY2LCAweGQzM2YwMjVjLCAweDgxYmYyN2YxLCAweDVjYTI3OGU1LCAweDAzNmVlMzk3LAorCTB4NmI2ZTg2N2YsIDB4ODVkN2QzZTgsIDB4ODU4YjRmODQsIDB4NGJmZmIwYmMsIDB4OWY2MDlmNTgsIDB4ZjVmMTc1YjEsCisJMHg5YmIyZWQyNCwgMHhlN2MyOTAyOSwgMHgyMGI2YzNhMCwgMHg4OTUzNDRmNCwgMHgwZWNiNWY4MCwgMHg2OTJlMDhlNywKKwkweGNmOGFiMzI5LCAweDAxN2E2NDRmLCAweGFiZDI5ZTA5LCAweGFlNWU3ZDU2LCAweDg1ZmMyMTZiLCAweDhjZmIyNDc1LAorCTB4OTk4MGQ1MDQsIDB4Mzk5ZmM0ZWQsIDB4ZjJjOTk4NTQsIDB4MTY3ZTE4OGUsIDB4NDlmZDBmYTMsIDB4Y2ZmNmZjMTMsCisJMHhkN2RiOWE2NywgMHhmZTdjZmQxNCwgMHgxMzg1NDM2NSwgMHhhOWIxNWViMCwgMHg0ZWZmMzNiMCwgMHhlMWFjZmM3ZCwKKwkweDA2OTlmZTg3LCAweDk0M2NlMzNmLCAweDdkYzdjYTEyLCAweGNlMWQ4ZjQ0LCAweDJlZTk4N2JmLCAweDFlYWQ3ODdiLAorCTB4ODI4NWMyMDcsIDB4NWMyZTE0ZGYsIDB4NDI1NDljMDYsIDB4ZDQ0ZGM4ZTcsIDB4YWY3ZGZjNzcsIDB4NDdkMDI3ZTksCisJMHhmZGQwNzllOCwgMHhkM2FmN2ZjNywgMHg2NzM5ZGY0YSwgMHg1MGE0ZjhlMiwgMHhmZDA0ZTJiZSwgMHgzZGY3NDE4MSwKKwkweDQwOWRjMTNmLCAweDg3Mzk1ZjliLCAweGRmYTZjYjcxLCAweDMzMjdhYjdiLCAweGE3ODM1ODZlLCAweGZmMzc2MDNiLAorCTB4ZWQ5N2RiYTIsIDB4ZDAyN2ZmNDAsIDB4MmIxMWNiNWIsIDB4MGYyYjJlYzEsIDB4MGFmNjdmZjQsIDB4M2JmNGI3OGYsCisJMHhhOGZiODBkYywgMHhiYmU4ODY2NywgMHhjN2RlYzhmMywgMHg3ZDIzNmY2MSwgMHhhZTg3ZjE2NiwgMHhmZTdiYmZmZCwKKwkweDI1Njc5OTExLCAweDM1YmQ1Yjk4LCAweGNmYmM0YTU0LCAweGUzN2ZlM2QxLCAweGI0OWY2MTM1LCAweDZmZDAxNWQwLAorCTB4MzkxNzljNTcsIDB4ZmVlYTI3ZWEsIDB4YTlmMTU0M2QsIDB4ZjViZDAwMzcsIDB4YzQ2YmY4MWYsIDB4MGEwY2ZhYjUsCisJMHg2NWU5NmVjMCwgMHhlNDY2NDdiZSwgMHg2YTg2ZjU3YiwgMHhjNzcxZTEyYSwgMHg2ZmYwNGFkMCwgMHg4NmVhYzk3YiwKKwkweGNkNWVmYTlkLCAweDVmMWY4NGE5LCAweGZiMTRjY2YzLCAweDNiYjFiZTZiLCAweDNkNTc3MTFmLCAweDIzY2Y2ZmJhLAorCTB4MjM2Nzk4NTksIDB4Yzk5ZWRiYzgsIDB4ZjU3YWM0NzYsIDB4ZGQxNjNiNjksIDB4NmJiN2Y3MmYsIDB4ZjcyMDZmY2YsCisJMHg2NGVkMWIzZSwgMHgwM2NjY2QzZSwgMHg5OWVmMzVmYiwgMHhkMWYwMGMxZCwgMHhlM2ZhZmI1ZSwgMHgxYTg3Yjg5NSwKKwkweGU4M2RiOWVkLCAweGE2ZGJiMmJmLCAweDJkNjcwZjQyLCAweGY4NzI4YzllLCAweGJiYjM1OWUxLCAweGJhMGNlYjE3LAorCTB4MmVhMjc4NzksIDB4NTZhNDVhNGYsIDB4M2JhYjJmZWUsIDB4MzdkNzcxMWYsIDB4ODBiZmUxZjEsIDB4Zjc1YWY1ZGMsCisJMHgzY2UyY2ZmMywgMHgzODg0YWQ3YiwgMHhlYjFmNjE3MSwgMHhlODVkZDc4ZCwgMHgyZGM3Y2YzNSwgMHg5ODczZWM4ZiwKKwkweDk0OTcyZjYwLCAweDgyY2Y5NWVlLCAweGVmM2VhZjdmLCAweGY0NWJhZDkyLCAweDQzOWRlODE5LCAweDExZTc4ZmQ4LAorCTB4NjUyNWYyZTIsIDB4ODVmZjUyN2IsIDB4NWUyNWJkZGUsIDB4OTdjNWRmZDYsIDB4MDliZDhiZWEsIDB4MTdmMzFiZjYsCisJMHg1MjZiNmVkZiwgMHg2MDI0MTQ3YywgMHhiZjE5ZjI1YywgMHgzYjIwMTljOSwgMHg4MzY2ZGZjNywgMHg5OWU4NzhiYywKKwkweGJlMjk2NzkxLCAweDczN2VlMmZlLCAweDZhM2FjMmQ4LCAweDk0ZTZkMmI2LCAweGY4M2ZiOGNjLCAweDBlYmNmZWYyLAorCTB4M2JhOWYzZTcsIDB4MzRjNzkxMGEsIDB4ODRhYzg4MmYsIDB4NTFiMDVjNWYsIDB4N2JjZjJlNGEsIDB4YmU1Zjg4ZGIsCisJMHgyYTk3MWI4MywgMHg0ZjJkZGYyNSwgMHhjN2VlODU0ZCwgMHgzOGY1NzM1NywgMHgxNmMwNzU3NiwgMHgxZGRmMjgwYywKKwkweDgzYTNmZThmLCAweDhlY2NlZjljLCAweDY3YWY3N2QzLCAweDdlNzEyOTdlLCAweGFkNDI1YjZmLCAweDJkYjdkZTZlLAorCTB4NzM4ZmM3NTMsIDB4ZTMzZjdmM2MsIDB4Y2ZiMTk1NTgsIDB4ZTc5Mjg3YWEsIDB4Mjk5MTUyZGYsIDB4ODk2NmQzZjYsCisJMHhjNjBlMjIxNCwgMHg4OGFjMmZmOCwgMHgxMGE0NWFlMSwgMHg1ZDc2MzU3OCwgMHhlMDEzZDIzZCwgMHhlMDhhY2JjOCwKKwkweGYyYTBlZjg4LCAweGE4NmU5NmExLCAweDRmYWUzYjM0LCAweGE4MjA0YTVmLCAweDBmN2Y4Yzk1LCAweDdiOGM4YmI5LAorCTB4NTVlZjVlNjAsIDB4ZGJlNTdlZTgsIDB4OThkOGYzNmYsIDB4MjQ2YTRiNGYsIDB4YWI1Mzc5MWQsIDB4N2M4ZTkyMjMsCisJMHg0NmE4ZTQ2OCwgMHhjYmViOGQzYiwgMHgxOTlmZjE4YSwgMHg0NjQ5YWZkZiwgMHhmNjY0M2ZiOCwgMHg4ZmRiYzZkOCwKKwkweDZmM2M0MzhmLCAweDJhYjM3ZTFkLCAweGZkZDBhOTNlLCAweDRkMjA2OWE2LCAweDY0NjcyM2Y2LCAweGU5YjZlYzExLAorCTB4Mzg3NWU0YjksIDB4MWZjMTMzYTcsIDB4NjU3NjA2NDcsIDB4OGZlMjEzN2IsIDB4YWEzYjkwY2YsIDB4MTM3ZTI4N2MsCisJMHg3Y2EzZmFmZCwgMHhhNTRmODFkOCwgMHhmNmFiMGFjZCwgMHg2NWIxYWYyMiwgMHgzYTI5NGQwYSwgMHhlNWIxYjAxZCwKKwkweGE3YjRiZWZiLCAweDVlMmU3ZWMyLCAweDFlM2YxNTZkLCAweDczODIyMjUxLCAweDBhYWUyN2I5LCAweDIzOTg4YzNlLAorCTB4Y2E4ZTczODIsIDB4MThmYzExZmYsIDB4MDk1OTEwOTksIDB4YjRhZGNhZGMsIDB4YzlmMTk2YWYsIDB4MWUyZTk1OTEsCisJMHhhMGMyYjJmZiwgMHgwM2U0OTFhNywgMHg1NzMyMjc4NSwgMHhiNWVhNGYwMywgMHgzNzExYjdkMSwgMHgwOWQ5OTc2OSwKKwkweDdiZTk4OTNmLCAweGEyMjdhMTlkLCAweDc4M2I4NmM3LCAweGIzNDEwZmZjLCAweDRlNjFmMTBiLCAweDBiZTQ2MmE1LAorCTB4YjVmOWY4OTYsIDB4OTA4ZDNmYjgsIDB4Zjg0MWMwZWIsIDB4ZGRkZDkzNjcsIDB4ZmRjMWEzMmIsIDB4YmMxZjIwYWYsCisJMHhlNWRkZGIzMywgMHgzMjZmNWViYSwgMHhjYWNhZTU4NywgMHhlZTJkNmFmYywgMHhmYmRkM2IyOSwgMHhkZmNjMTU4ZiwKKwkweDA3YzkxYzVmLCAweDRiYjViMWNlLCAweGRkN2I2YTFjLCAweDQ3ZmIxM2JhLCAweDgwN2JhM2NkLCAweGRlMWMxNzVmLAorCTB4OWY1ODJiMjcsIDB4YWRhMTk2YWQsIDB4NjdkMjJjYTUsIDB4YTQyOWM4ZTYsIDB4NmY2MDRiZjgsIDB4YmRiYTIzODIsCisJMHhiMmVmMTQ4ZCwgMHg1NjFlOWYwOCwgMHg5NzY3ZWIyYSwgMHg0Yjk0MGY3MSwgMHhhMWY2MDNiNCwgMHhlNmZjZjdlOCwKKwkweDAwZWZhYmMwLCAweDY2ODY0NjZmLCAweGY1OGY0ZTA5LCAweDRmMDMwYmE3LCAweDNlMzcwM2E2LCAweDk4MWVmOGUwLAorCTB4NjBmZmVmMTMsIDB4ZmEwYjVlZjUsIDB4YzNiOGJmOTcsIDB4OWVmNmUxMTIsIDB4YmJlN2M5Y2QsIDB4MGNmNmVkN2MsCisJMHg5ZTNkMGJmOCwgMHhlYzdiMGZkMCwgMHhlYWM3YTY0OSwgMHg0ZTE5NzYwNSwgMHhlODgwODNmMiwgMHgyOWM3OWNmZCwKKwkweDBlNTRiN2YyLCAweGRmMGY0MWI1LCAweGQ2OThjYmQyLCAweDYzMTNlODEyLCAweGE5ZjMzMWU4LCAweGNlMWZjZjQxLAorCTB4YjZmODQ4NzksIDB4NDMwZjBiNGUsIDB4Y2MwNzIzNmYsIDB4ZTRlZjdjMDQsIDB4N2Y3NDI2YjgsIDB4MWFlZjEwNWEsCisJMHhhZGM3MDBmNSwgMHgyMTZlM2QyYywgMHgwZmE0YjQ1ZSwgMHg4Y2JkYzRhZCwgMHg5ODlkNWJmNCwgMHhhN2M4ZTliZiwKKwkweGRiM2YzOGY5LCAweGRiY2UzZTYzLCAweDM2NzBlNDcyLCAweGY3OGRjZWMxLCAweDZjYzdjNzA0LCAweDFmZjRiNzhjLAorCTB4MjRiYmM2YzksIDB4ODZhYWRmZDYsIDB4NDcxNzIxMGEsIDB4NDdlMDEyYjgsIDB4ODVhZmRmYWMsIDB4OGI3ZjIxMGIsCisJMHhmMTgyNTQzMiwgMHhmOTk2ZTQyOCwgMHg0OWEwNmI0YywgMHhlOGFhZDFjZSwgMHgzNDQ3NGY3ZSwgMHhmN2IxZjljMSwKKwkweDZlODU1MWY2LCAweDI1MGY4Y2FmLCAweDFkMzcwN2M4LCAweGIxMTI1NGJkLCAweGQ5YTBmMWM3LCAweGU4MTM5NWMwLAorCTB4ZGZmZGQ2MmYsIDB4MDljMGM4YjksIDB4YmYwY2RhNWUsIDB4YmMyNzA3MWYsIDB4ZjVhM2RjMzEsIDB4YWU3ZGM4MTYsCisJMHhiNjNiOTc0MiwgMHgzYmNhZjg1ZSwgMHg2ZGUzMjAyMywgMHg5OTJhNWRhZiwgMHhjNjc1OGM1OSwgMHhhM2MwNGEzYywKKwkweDAxN2M3MTU5LCAweDBlMGFlNDBlLCAweGYzNjczMjZjLCAweDJiY2Y3Y2I5LCAweGQyNWU0ZWVlLCAweDk2YjFiOGRjLAorCTB4ZDMzYWQzYTcsIDB4NmJkMGI1ZmQsIDB4NWRlNDA1MTMsIDB4YjFhZTU2MzcsIDB4ODU3MGY0NzYsIDB4NTUzZWJmN2UsCisJMHhmNmZiOGY3ZiwgMHg5NjRlYzEyOCwgMHg3ZDYzMjJlYiwgMHg5YmMxN2NlZSwgMHg1ZDY3ZjAzMCwgMHhmODVhYzZmNSwKKwkweDdlNTk3ZGRmLCAweGY5YmJlMjRiLCAweGVkYWZmODg3LCAweGFkZDdhNjQ5LCAweDMzOWI1OGRmLCAweDFlZmI5ZjhlLAorCTB4MTI2YTdlZGEsIDB4ZDlhZmNmNWQsIDB4ZGIzNmEzYmIsIDB4NGM3ZjdkNzUsIDB4OThiNjhiZWUsIDB4NDllNjk1OWMsCisJMHhiZTU4ZmE4OSwgMHhiNzEyNzZiMSwgMHhhZmZlNTJlYiwgMHg3ZGNmZDBmYSwgMHg4YzM1ODhmMSwgMHhiNWZhY2JiOCwKKwkweGZkYjdmY2UwLCAweDA5MjViZDcxLCAweDVmODA3ZmI3LCAweDlkNmIwNTMzLCAweGZlNWJiZTMzLCAweDEyYWI2ZGIxLAorCTB4NGY4MDU2MWUsIDB4ZTJiZDVmZWMsIDB4MDkzN2VjNjcsIDB4MThhYTZkZmIsIDB4NWE2OGE3NTMsIDB4Mzc3OTFkM2QsCisJMHg0ZjRmNTc3OSwgMHg2ZDhjNTNhYywgMHhhOGE3MjgxOSwgMHg0OWJkODhiNywgMHhkMmI4N2VjYiwgMHg2MjNlOGUzZCwKKwkweGQ0YWU2ZmYzLCAweDg2NGQ5ZjY0LCAweDZmYTk0ZjFkLCAweDFlMTVlNjc5LCAweDUzY2NiOTdmLCAweDU1N2VjOTU2LAorCTB4YmY5MmE5YWUsIDB4YTZhN2RkOGYsIDB4ODYwZmNmNTIsIDB4ODBiZjFkYjIsIDB4Y2QwNzQ1M2QsIDB4Yjk0OWY4NGUsCisJMHg0ZjMzZWJhNiwgMHhmYzJlZmNiZCwgMHhlMWRiMmYzMSwgMHgzNTdlNjRlYSwgMHhiY2ZhNjk1NSwgMHhlYTI3MzY2MywKKwkweDVmNjNkMTQwLCAweGZmZTA3YmU1LCAweGE1Y2JlYzViLCAweGQzYjI2MmNlLCAweDk1M2YxZTY0LCAweDNkZjA1NzNiLAorCTB4YzZjN2NmYjYsIDB4N2FhNTY5M2UsIDB4NjQ1ZWQzYmUsIDB4NTMzYWZlZmUsIDB4M2FkYmUzYjEsIDB4YzUxYmU0OTMsCisJMHgxMmQ5YzE2OSwgMHhmODkwYmY4NywgMHhlODVjMWQxNiwgMHhmN2MwNWNkNCwgMHhkNmZlMWRhMCwgMHg2NzdmZjVmZSwKKwkweDBjOGYwZTIzLCAweDBiYmE2N2ZlLCAweGQzZWQ3NWI4LCAweGI2Y2ZkODc0LCAweDgxZDM4ZjgxLCAweDY2MDYyNzBmLAorCTB4MWQ5ZWQwMzksIDB4MWZkMDM5NzIsIDB4MTZiOGZiYWQsIDB4MzY4Y2JhZjMsIDB4OGIzMDY3NWUsIDB4ZjYzNmIxOWMsCisJMHgxM2Q1OGU3ZSwgMHhjZGQxZGUxMiwgMHg3M2FmNmJkMCwgMHg2MTRiMmZkYiwgMHg4MmRkYTllZiwgMHhjZThlZmM2MywKKwkweGQ3ODhmYzQ0LCAweGUzMzk1YzE5LCAweGViMTI2NWQ1LCAweGY1YjMwNTBjLCAweGQ0NWEwMzNhLCAweDdhY2MwYTE5LAorCTB4ZWEzNDAxOWQsIDB4Njc1MTY4MGMsIDB4MGNlYTNmNDAsIDB4MDA2NzUxYTAsIDB4NjgwMzNhOGQsIDB4YTJkMDE5ZDQsCisJMHgyYmZlODBjZSwgMHhiY2IxNmJhOCwgMHg1MGRlNGU1MSwgMHhlY2QxYWFkZiwgMHhmNDBmZmY4MiwgMHhmNWU0NDE2YSwKKwkweDc0ZDMxYzBmLCAweGM0MTI4NzdhLCAweGZiYzY3ZjdkLCAweGFmNDYwZTIzLCAweDI4YjA3NWU4LCAweGU3Nzk1M2M3LAorCTB4ZmJjYjM0MWYsIDB4NWVkYTFhMjAsIDB4ZDZmNzEzMzcsIDB4NTU3MWI5YWYsIDB4ZDkzNzExMTcsIDB4YTNjZGRiMTQsCisJMHg2YTFmNTEyNywgMHgxYmRjNTNlZiwgMHgyZTVmZTg1ZCwgMHg1YzFiNmM3MiwgMHhmYTIzN2VmOCwgMHhkNTZlY2Q3YiwKKwkweDlhYmFmYjg1LCAweDZmOTdmYThkLCAweDU4ZWE1N2IwLCAweDJjYzczOWQ1LCAweDE1ZmJjZjcyLCAweGVmZmRlMWNhLAorCTB4NjRlZmVhYjAsIDB4MmNiZGM2YmYsIDB4OTU0NWIwZjcsIDB4MWQ2ZmRhM2MsIDB4Y2I0YmY3OTIsIDB4NGQ3MzhhOGIsCisJMHg3ZWRhMWU0MiwgMHgxMzgyZTdjYiwgMHg5ZGY0YjY5ZCwgMHhiMjFmZDc5MCwgMHhjNTI0ZDczOSwgMHg3ZGU0OGY1NywKKwkweGMxNzRmYzdlLCAweDQ1NDMzYzhkLCAweGE3ZDVhZjRjLCAweDdiNWVkZjkwLCAweGY5MjEzODAxLCAweGI0N2U0MjQ4LAorCTB4MzNmY2Q5ZDYsIDB4NWRhNDY3ZTQsIDB4N2VmY2UxMzMsIDB4NjQ0ZWU4N2UsIDB4NmQzZGQ2ZjksIDB4YjA5MjI4ZmUsCisJMHg5OTMwNzM3ZiwgMHg2ZGY2MGRmNiwgMHg5OWM4MjNjZCwgMHgwMzRhOGZkYywgMHg5NDNmYjJlMiwgMHg3NGFhMWZkYywKKwkweGM2OTI3ZDY0LCAweDNjZDFlNjNmLCAweGZmNzU1YmU0LCAweDNmNDBlNmI0LCAweGRiYjk3N2VmLCAweDYxY2FmOTJhLAorCTB4MjU3MGY3OGYsIDB4YjM0OWYxZmIsIDB4MjcyZmVhNDcsIDB4YmRlNGQ5OGYsIDB4OWNmYjdlNzUsIDB4OGQ0YmZhYTQsCisJMHgxZmVhNTUzNiwgMHhjNDhhY2MxYiwgMHhkZWU1MmJmMSwgMHhhYWNiYjA2MywgMHhlZWE1N2JiYSwgMHgxMGViOTU1MiwKKwkweGUxZDk4ZTdmLCAweDM3ODZmMmQxLCAweDVjYzM3N2MwLCAweDZhYmZkNDk3LCAweGUxMGJmNGFjLCAweGY3MmY3ZWM3LAorCTB4N2YxNjY4M2MsIDB4ODI1NGU5YWIsIDB4YzlhYmQzMmEsIDB4YWQ3ZjgxNmQsIDB4M2Q4YTc1NjIsIDB4Mjk4ZmVkOTksCisJMHg3OGFiMGZlYywgMHhiYjA0YzZhZiwgMHg5MTVkYjBkYSwgMHgxMDBhNDJiYywgMHg4Njk1ZTdhYywgMHhmZTBkNTczZSwKKwkweGZiMGE1N2ViLCAweDNkNTZiZGNiLCAweDU1NTNjZTBmLCAweGM1ZDc5ZmUxLCAweGRmZTc4YjcxLCAweGZjMGI1ZTQ3LAorCTB4NTVjNzFkNjYsIDB4NWY2NzFjYjQsIDB4MzdiZjcwOGYsIDB4OWViZTZhNmQsIDB4YzA3MmJiZTcsIDB4MzMxOWY1N2YsCisJMHg3MjZhNGYwMSwgMHg5NWU4NWU3ZSwgMHhmY2VkNWY3OCwgMHgwOTViZWY4NCwgMHg3MzdkYTVkZiwgMHhhOGUxZjdkMywKKwkweGM4NDkzZTg5LCAweDc1OWE0ZjZiLCAweGNhN2Q2MWZjLCAweGVjMTRlYjdiLCAweDVlM2VlYTU1LCAweDM0NzRjZjY5LAorCTB4OGNhMmJiNDksIDB4MzQwYmZmYzQsIDB4ZTAyZjZmM2QsIDB4NGE2NjcyYmIsIDB4ZWIwZmEyZGQsIDB4NmVlZGRhNmIsCisJMHgwYjg2M2ZlOCwgMHhiZWZjOGRiYiwgMHhlNzk2ZTU0MCwgMHg1YmQ1NGVlZCwgMHhkYzI5ZDMwYiwgMHhjYTViOGQzZiwKKwkweGU3NjE3ZTE0LCAweDVjNzFkNDdjLCAweDNkNGYzZmMyLCAweDdkMDVjMGJiLCAweDQzNzc2OTdjLCAweGM3MzkzNTFmLAorCTB4MzFkZGUxZTYsIDB4NzJmZmUwY2IsIDB4ZGM1NWMzNTksIDB4MDI5ZDI3OTcsIDB4NDM4ZjlmZDgsIDB4NWFkZmFjZGQsCisJMHg1ZDQxNDgxYywgMHg1MGQxZTQzZCwgMHgzOGE2M2YyNywgMHgxZWJmYWVmMSwgMHg3MTZmYjc0ZiwgMHgxNDBhY2ZjMiwKKwkweGI1YjdlYTI3LCAweGQ5MzVkZGE5LCAweGU2NzZiZmNjLCAweDljZjAzNzBjLCAweDYxZWE1NWYxLCAweDc2ZWFkYzIzLAorCTB4NTM1MDZiNzAsIDB4NmNhNmI1ZjQsIDB4ZmYwZGYzZDQsIDB4NTRhNmY3MjksIDB4ZDdmNzhhNGQsIDB4MWQxNDdlMWIsCisJMHhmMTFkMjJmYywgMHg2ZGQ0NDdmNSwgMHg4MDdmODM3NywgMHg4MzVlZWU2YywgMHhmZWEwZWMzZiwgMHhiZjUyNjlhNiwKKwkweGU1ZDFkOThkLCAweDYxM2IzOWZkLCAweGY0YWI1MzQ3LCAweGVmOGQ4ZDc1LCAweDBjNGY5MTk5LCAweGMxY2RlNmRkLAorCTB4N2NkNzJiZmUsIDB4Y2U1YjI1YmUsIDB4OGNiZDdlMzksIDB4YjgwMzM3NzEsIDB4MTY1ZWI2M2IsIDB4NDYzZGYxYzMsCisJMHg2Yjc4MWRmZCwgMHgyNmJhZWEzMiwgMHgzMjZiYWVhMywgMHhhMzI2YmFlYSwgMHhlYTMyNmJhZSwgMHhhZWEzMjZiYSwKKwkweGJhZWEzMjZiLCAweDZiYWVhMzI2LCAweDI2YmFlYTMyLCAweDk3YWUxM2E5LCAweDg3OGVkZGY2LCAweDA4ZWExZGE0LAorCTB4YmM0Mjc4YzgsIDB4YzdlYWI5YjgsIDB4NTUxNzVkZDUsIDB4YTU3NzUzOGQsIDB4YzQ4NjU3MTQsIDB4YmQ3YmY2NWQsCisJMHhjZWE2M2RkZSwgMHgyNmFlZmVjYSwgMHhlMGQ1N2JmOCwgMHg0MzFlN2I4NCwgMHg3MTYzZDI1ZSwgMHg2YjU0MzhiMywKKwkweDYwM2MxNmYxLCAweDU0ZjA3YzE3LCAweDhkNmY1YjhkLCAweGY1MmVjZmU5LCAweDliNjRjYmQ5LCAweDJjYTg3YjhmLAorCTB4NTE1MjY1OWEsIDB4MjNlZTM0YzcsIDB4ZGY4NGVmNTYsIDB4MWJmMDljZTAsIDB4ZDMxYmYwYjQsIDB4ZmNkZmI4ZWMsCisJMHg1ZGFlYzJkNiwgMHgwMTA5ZTdhYSwgMHg3MjZjMTNjOSwgMHgzMjM3NWJiZiwgMHgyZjdkMzBhZSwgMHhlNTcwOTMzOSwKKwkweGMyYjgzMWIzLCAweDkwMTU5YTBmLCAweDk1YTBlZDYzLCAweDIzM2Y3NGJhLCAweDM3MjU0ZmY4LCAweDBlM2Y5YzdmLAorCTB4OWM3NDg0Y2UsIDB4ZGExYTk2OTksIDB4YjVhNjdkODcsIDB4MTc5MWJhYTUsIDB4OWQ4YmJmYjMsIDB4ODhhNmRjOWQsCisJMHgwNmExYWZiZiwgMHhiYzFjNzdkOSwgMHg3YzllNDc0OSwgMHg3M2QxYzRlZiwgMHhmN2Y5ZTFiZiwgMHhmMjVkODNmZSwKKwkweGQ3OTNhZDlkLCAweGUwZmZmYTJlLCAweGFlOTU0ZDRkLCAweDg0Nzc1ZjhmLCAweDk2NTllNzdkLCAweDQzYjY1NGVhLAorCTB4MTZkNTU3OGUsIDB4YjhiYTkyMmEsIDB4NTBmZTJhOWEsIDB4NThhZTNkYTMsIDB4ZDM3N2EzODAsIDB4YjU3N2RjM2MsCisJMHhjODM5ZTFiNSwgMHgyZWZlYzM5OSwgMHhhMzJjZGZlZiwgMHg2YTFhNmJiZSwgMHhkOWY0Y2JkZSwgMHhiZTM3M2NlYywKKwkweDNkY2Q0ZGFiLCAweDgwMGIwNTQ0LCAweGIwYzU3NTQ3LCAweGFkZDRiM2FiLCAweDE5NjNkZDYwLCAweGJmODNiZmRlLAorCTB4YTdjYzVlZGMsIDB4OTZmZWUzNTYsIDB4YjNiNjk3NTMsIDB4Y2U2M2VlNGIsIDB4MzJmYmRjNDIsIDB4ZjUxZmFiYWIsCisJMHg5ZTZmMmQ4NiwgMHhiMmMyN2E5MCwgMHhkNDQyZDcwYywgMHg3OWJjYjYxYiwgMHg1YzczYTc1YSwgMHhlNTFiOGFmZCwKKwkweGFiYWIxM2IyLCAweDY2Zjg4MjdmLCAweDEwOWYzZWViLCAweDA5YTFmZDY3LCAweGMwZmI3NDQ5LCAweDA5ZjNlZWU0LAorCTB4M2YwNWFlNzEsIDB4M2Y0ZTlkZjgsIDB4YWZiODRjNTMsIDB4NWM5NDQzNTYsIDB4ZjIxZGJiZDUsIDB4NGJmZWViZjksCisJMHhhOGQzY2Y3ZiwgMHhhYWE3YzljNCwgMHg3NDljNWM3NCwgMHhlN2IwYzI4MiwgMHhmOTBlYzVkMSwgMHg3MTMzOTdmZSwKKwkweGRiZDQzY2ZkLCAweDEwYjVkOGE4LCAweGZkYWYzOGYzLCAweGUyZjhlYzM1LCAweGMxYTc5ZWFkLCAweDc3MzhjZjI3LAorCTB4MzU3OWYxMGUsIDB4MGQ5MGM3NTgsIDB4YmJlMzE5ZWQsIDB4ZGJkNTI5ZTQsIDB4M2QzNmI2ODgsIDB4MzU3ZTkyNjAsCisJMHg2ZGY2OGE1OCwgMHhmYTIwZjQzNSwgMHg4MTc2MmZkOSwgMHhmMzkzZWQ0ZiwgMHgzYTYyMmM2ZSwgMHhiNzlhMWFjZiwKKwkweGU5Nzg4ZWRlLCAweDczZmU4ZGQ5LCAweGVjNWU5ZTY1LCAweGRmZWViNjM3LCAweGU1OGY5YzY5LCAweGMzNzk4N2Q5LAorCTB4ZjllNGFhODUsIDB4NmRlYTM3YzMsIDB4NTVjMjJlY2MsIDB4MzcxZDBlM2EsIDB4OTNhY2E4ZmMsIDB4NThlN2ZiZTQsCisJMHhhNTVlMzlmYiwgMHhmZGY5NzgxYSwgMHg0N2JjYjM3MiwgMHg3ZTRjNGYyMCwgMHgwYTVkNWVlYSwgMHhhM2RlNTg3OSwKKwkweDYxYWZiYzg2LCAweDUyOTllYzljLCAweDdiNmVmOThmLCAweGM3N2VjODBkLCAweDdjNjUzYjBkLCAweGUzYWYzOTZjLAorCTB4YTY4NWI0YTMsIDB4MGRlNDA0ZTAsIDB4NGUwZDFlNTMsIDB4NzY1M2JjODAsIDB4ZGM1Y2RhOGMsIDB4YjUxODEwYmUsCisJMHhlMTc4N2YyMSwgMHhlODZkNDc2ZiwgMHg3NTQzYzE3ZiwgMHg1NmJmZTFlMywgMHhjMmRmMDlhZCwgMHgzZjU5NTFiMiwKKwkweDkyMWFmNzlkLCAweDA0ZThjMjc3LCAweDRkODU2ZmU0LCAweDZjMDI1OTZmLCAweGU2OWU3M2I3LCAweGI3ZjI5MzdkLAorCTB4ZDM2Mzg5MjIsIDB4ZmU5YTViMGQsIDB4ODdiMDRhYTgsIDB4ZTQ5MGNmZTksIDB4MjU5ZDU0YWIsIDB4ZGQxNGJlZTMsCisJMHgzZThmN2RmZiwgMHg2ZThlYzJhOCwgMHgwOWRjYjIwOCwgMHg2OWU3MzdmNiwgMHgxMjQ4ZTVkMywgMHg2YmFjYjBkZiwKKwkweGYzODM3MDMxLCAweDNmNzFhNGI1LCAweDNjYmU0NzMzLCAweGU0MjNjMGM1LCAweDM3OGM4ZDhmLCAweGJlYjdhNmZlLAorCTB4NzljOGJlNDIsIDB4OGM3ZTE4ZGMsIDB4MjYxYzMxNGQsIDB4ZWJlZjVkYzQsIDB4MjBmYzE3MTEsIDB4YmJkYWRlNzksCisJMHhmNzhhZDkxZSwgMHg3NmUzNTM2ZCwgMHhkNzhmYmM4YiwgMHhkYjQ1NmRmNCwgMHgyNTllZmFkYSwgMHg0Y2JmMjQ4NywKKwkweDY1ZjljZjlhLCAweDljOWQ3ZDEyLCAweDdiNjhlNDYzLCAweDM5YWRmM2YwLCAweDc2Y2JlY2UzLCAweDBlZDEyZDcwLAorCTB4Mzc0MzlhNGUsIDB4ZDI3YWJkZTAsIDB4NDgwZWVhOWYsIDB4MGZkZDA5MWMsIDB4NmFkOWQ5N2MsIDB4ZWNhZTIzNzcsCisJMHhkOGE1NTVmYSwgMHhhOWY1YjdkNywgMHhmYWE5OGYzMiwgMHhhNzUxZDk0NywgMHg1MjU0MGZjYywgMHg4N2U2ZmMxMSwKKwkweGUxZTAxMWRhLCAweDBjM2MyNGVjLCAweDg5NzJkZDQ4LCAweGRkYWU3MDQzLCAweGFkYjYwNzc4LCAweDEyM2U0YTcxLAorCTB4NTMzNmViZjMsIDB4OThhZGMzZTgsIDB4ZWY5MGU1OTcsIDB4NDViNzBjMTEsIDB4NmY3YzJjYTYsIDB4NGFlZWUyOWEsCisJMHgyZWNlMmJjOCwgMHg5ZDA0MTU5OSwgMHg4MzBhMTlkZCwgMHgxNWNmZThlZiwgMHhkNWM4ZWEzNywgMHhkNmFlM2E2OSwKKwkweDdiYWQwZGE4LCAweDM1MmRmYzc5LCAweDViZjFiODJjLCAweDZmZjMwN2UwLCAweDc2OTdhY2I3LCAweGIxNGNkOTQ1LAorCTB4MjkwYTVjZGIsIDB4NzA2N2ZmZmEsIDB4M2Q3YmM0MmQsIDB4NjdhZDNkZjYsIDB4MjBlZmIwNWIsIDB4ZjA0YWZiZGUsCisJMHg4ZmE4YjU5OSwgMHhlNDVkOTVmZSwgMHg4MGQ1MDY4OSwgMHgzM2QzY2Y5OSwgMHg3YmI3MDQ4MSwgMHhiODk0MmNlZSwKKwkweGM2ODZhNTEzLCAweDJjZmY5MWZiLCAweDZhM2E5NTRmLCAweDEzZDcwNGNmLCAweGQzZGE2ZWY4LCAweGY1ZTRhMzdjLAorCTB4YzdhNGZlODcsIDB4MjlhNWQxZmIsIDB4M2Q3MWU0NmUsIDB4NzExYjVjZjMsIDB4NWQ0NzllYWUsIDB4YTI5YWZlMzIsCisJMHhhMTNjMGJmMywgMHhhOTY3YTdlYiwgMHhlNjllY2U3ZSwgMHhjNTlmNzk0YywgMHg4NzY3YTFlZSwgMHhiZmJlMzI2NywKKwkweGU1YmMzMjU5LCAweDE4MDNhOGQ1LCAweDY2N2IxZmRmLCAweDRmYjczZjcwLCAweGRlNzcwZDI5LCAweDc1NzMzZTA3LAorCTB4Yjk5NDU3NzksIDB4ZGU0ZWRlZTQsIDB4N2IxM2UzNzksIDB4ZjE4NjdkNzQsIDB4ODk3ZGFjMWQsIDB4ZmVmZGU5MjMsCisJMHhjYjgwZmViZiwgMHgwMDIyMjBiMywgMHgwMDAwMDAwMAogfTsKIAogI2VuZGlmIC8qX19CTlgyWF9JTklUX1ZBTFVFU19IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCmluZGV4IGFlYTI2YjQuLmVkNjQ4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKQEAgLTIyLDE0ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgogI2luY2x1ZGUgImJueDJ4LmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU1VQUE9SVF9DTDczIDAgLyogQ3VycmVudGx5IG5vICovCiAjZGVmaW5lIEVUSF9ITEVOCQkJMTQKICNkZWZpbmUgRVRIX09WUkVIRUFECQkoRVRIX0hMRU4gKyA4KS8qIDggZm9yIENSQyArIFZMQU4qLwogI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MApAQCAtMTM5LDYgKzEzNCwyNiBAQAogI2RlZmluZSBQSFlfU0dNSUlfRkxBRwkJCTB4MgogI2RlZmluZSBQSFlfU0VSREVTX0ZMQUcJCQkweDQKIAorLyogKi8KKyNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSCQkweDIKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0xDIAkJMHg3CisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9DT1BQRVIJMHgyMQorCisjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9BRERSCQkweDgKKwkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFIDB4NAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRQkgMHg4CisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUgkJMHgxNAorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUgCTE2CisjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19BRERSIAkJMHg0MAorCSNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyAweDEKKyNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUgCQkyCisKKyNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX1VOS05PV04gCQkJMHgwCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9MQyAgIAkJCTB4MQorI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfQUNUSVZFX0NPUFBFUl9DQUJMRQkJMHgyCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRQkweDMKKworI2RlZmluZSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSAJCQkweDAwNDQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NCwxMyArMTY5LDM0IEBACiAJCShfYmFuayArIChfYWRkciAmIDB4ZikpLCBcCiAJCV92YWwpCiAKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9waHlfbWRpbyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKLQkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOwotCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCi0JCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKKwl1MzIgZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwkvKiBTZXQgQ2xhdXNlIDIyICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVCArIHBhcmFtcy0+cG9ydCoweDEwLCAxKTsKKwlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWY4MDAwKTsKKwl1ZGVsYXkoNTAwKTsKKwlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfTURJT19DT01NLCAweDI0NWQwMDBmKTsKKwl1ZGVsYXkoNTAwKTsKKwkgLyogU2V0IENsYXVzZSA0NSAqLworCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QgKyBwYXJhbXMtPnBvcnQqMHgxMCwgMCk7Cit9CitzdGF0aWMgdm9pZCBibngyeF9zZXRfcGh5X21kaW8oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IHBoeV9mbGFncykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwlpZiAocGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgeworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9TVCArCisJCQkgICBwYXJhbXMtPnBvcnQqMHgxOCwgMCk7CisJCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX0RFVkFEICsgcGFyYW1zLT5wb3J0KjB4MTgsCisJCQkgICBERUZBVUxUX1BIWV9ERVZfQUREUik7CisJfSBlbHNlIHsKKwkJYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3MocGFyYW1zKTsKKworCQlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX0RFVkFEICsKKwkJCSAgIHBhcmFtcy0+cG9ydCoweDEwLAorCQkJICAgREVGQVVMVF9QSFlfREVWX0FERFIpOworCX0KIH0KIAogc3RhdGljIHUzMiBibngyeF9iaXRzX2VuKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBiaXRzKQpAQCAtMjc3LDggKzMxMywxMCBAQAogCQkJICAgcG9ydCo0LCAwKTsKIAl9CiAKLQkvKiBlbmFibGUgZW1hYyAqLwotCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDEpOworCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKKwkJICAgIEVNQUNfUlhfTU9ERV9SRVNFVCk7CisJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19UWF9NT0RFLAorCQkgICAgRU1BQ19UWF9NT0RFX1JFU0VUKTsKIAogCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkgewogCQkvKiBjb25maWcgR01JSSBtb2RlICovCkBAIC00OTgsNyArNTM2LDcgQEAKIAl1ZGVsYXkoNTAwKTsKIAlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18zX1NFVCwKIAkJICAgIHZhbCk7Ci0JYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcyk7CisJYm54Mnhfc2V0X3BoeV9tZGlvKHBhcmFtcywgcGh5X2ZsYWdzKTsKIH0KIAogdm9pZCBibngyeF9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC03NDksMTIgKzc4NywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGJueDJ4X2dldF9lbWFjX2Jhc2UodTMyIGV4dF9waHlfdHlwZSwgdTggcG9ydCkKK3N0YXRpYyB1MzIgYm54MnhfZ2V0X2VtYWNfYmFzZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZXh0X3BoeV90eXBlLCB1OCBwb3J0KQogewogCXUzMiBlbWFjX2Jhc2U7CiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6Ci0JCWVtYWNfYmFzZSA9IEdSQ0JBU0VfRU1BQzA7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkvKiBBbGwgTURDL01ESU8gaXMgZGlyZWN0ZWQgdGhyb3VnaCBzaW5nbGUgRU1BQyAqLworCQlpZiAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkpCisJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMwOworCQllbHNlCisJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMxOwogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCWVtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfRU1BQzAgOiBHUkNCQVNFX0VNQUMxOwpAQCAtNzcyLDExICs4MTUsMTIgQEAKIHsKIAl1MzIgdG1wLCBzYXZlZF9tb2RlOwogCXU4IGksIHJjID0gMDsKLQl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShleHRfcGh5X3R5cGUsIHBvcnQpOworCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGJwLCBleHRfcGh5X3R5cGUsIHBvcnQpOwogCiAJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CiAJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgogCSAqLworCiAJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwogCXRtcCA9IHNhdmVkX21vZGUgJiB+KEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCk7CkBAIC04NDEsMTAgKzg4NSwxMSBAQAogCXUxNiBpOwogCXU4IHJjID0gMDsKIAotCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGV4dF9waHlfdHlwZSwgcG9ydCk7CisJdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoYnAsIGV4dF9waHlfdHlwZSwgcG9ydCk7CiAJLyogc2V0IGNsYXVzZSA0NSBtb2RlLCBzbG93IGRvd24gdGhlIE1ESU8gY2xvY2sgdG8gMi41TUh6CiAJICogKGEgdmFsdWUgb2YgNDk9PTB4MzEpIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgQVVUTyBwb2xsIGlzIG9mZgogCSAqLworCiAJc2F2ZWRfbW9kZSA9IFJFR19SRChicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUpOwogCXZhbCA9IHNhdmVkX21vZGUgJiAoKEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCkpOwpAQCAtOTY3LDYgKzEwMTIsOCBAQAogCQkJICAgICAgKG1paV9jb250cm9sIHwKIAkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKTsKIAorCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CisKIAkvKiB3YWl0IGZvciB0aGUgcmVzZXQgdG8gc2VsZiBjbGVhciAqLwogCWZvciAoaSA9IDA7IGkgPCBNRElPX0FDQ0VTU19USU1FT1VUOyBpKyspIHsKIAkJdWRlbGF5KDUpOwpAQCAtMTE1Niw2MiArMTIwMyw5IEBACiAJCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAogCQkJICAgICAgcmVnX3ZhbCk7CiAKLQkvKiBFbmFibGUgQ2xhdXNlIDczIEFuZWcgKi8KLQlpZiAoKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCi0JICAgIChTVVBQT1JUX0NMNzMpKSB7Ci0JCS8qIEVuYWJsZSBCQU0gU3RhdGlvbiBNYW5hZ2VyICovCisJLyogQ0w3MyBBdXRvbmVnIERpc2FibGVkICovCisJcmVnX3ZhbCA9IDA7CiAKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSwKLQkJCQkgICAoTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4gfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fU1RBVElPTl9NTkdSX0VOIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX05QX0FGVEVSX0JQX0VOKSk7Ci0KLQkJLyogTWVyZ2UgQ0w3MyBhbmQgQ0wzNyBhbmVnIHJlc29sdXRpb24gKi8KLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKLQkJCQkgICAgICAmcmVnX3ZhbCk7Ci0KLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDMsCi0JCQkocmVnX3ZhbCB8Ci0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzX1VTRV9DTDczX0hDRF9NUikpOwotCi0JCS8qIFNldCB0aGUgQ0w3MyBBTiBzcGVlZCAqLwotCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwgJnJlZ192YWwpOwotCQkvKiBJbiB0aGUgU2VyRGVzIHdlIHN1cHBvcnQgb25seSB0aGUgMUcuCi0JCSAgIEluIHRoZSBYR1hTIHdlIHN1cHBvcnQgdGhlIDEwRyBLWDQKLQkJICAgYnV0IHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCB0aGUgS1IgKi8KLQkJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYU1xuIik7Ci0JCQkvKiAxMEcgS1g0ICovCi0JCQlyZWdfdmFsIHw9IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQ7Ci0JCX0gZWxzZSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNlckRlc1xuIik7Ci0JCQkvKiAxMDAwTSBLWCAqLwotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMDAwTV9LWDsKLQkJfQotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsIHJlZ192YWwpOwotCi0JCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCi0JCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKLQl9IGVsc2UgewotCQkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KLQkJcmVnX3ZhbCA9IDA7Ci0JfQogCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKQEAgLTEzNDQsNDQgKzEzMzgsMjUgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbWlpX2NvbnRyb2w7CiAJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9yZXN0YXJ0X2F1dG9uZWdcbiIpOwotCWlmIChTVVBQT1JUX0NMNzMpIHsKLQkJLyogZW5hYmxlIGFuZCByZXN0YXJ0IGNsYXVzZSA3MyBhbmVnICovCi0JCXUxNiBhbl9jdHJsOworCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBCQU0vQ0wzNyBhbmVnICovCiAKLQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCi0JCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCi0JCQkJICAmYW5fY3RybCk7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQlNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAotCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJCShhbl9jdHJsIHwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTiB8Ci0JCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfUkVTVEFSVF9BTikpOwotCi0JfSBlbHNlIHsKLQkJLyogRW5hYmxlIGFuZCByZXN0YXJ0IEJBTS9DTDM3IGFuZWcgKi8KLQkJdTE2IG1paV9jb250cm9sOwotCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAgICAgJm1paV9jb250cm9sKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgImJueDJ4X3Jlc3RhcnRfYXV0b25lZyBtaWlfY29udHJvbCBiZWZvcmUgPSAweCV4XG4iLAotCQkJIG1paV9jb250cm9sKTsKLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKLQkJCQkgICAgICAobWlpX2NvbnRyb2wgfAotCQkJCU1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8Ci0JCQkJTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKLQl9CisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgICZtaWlfY29udHJvbCk7CisJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAiYm54MnhfcmVzdGFydF9hdXRvbmVnIG1paV9jb250cm9sIGJlZm9yZSA9IDB4JXhcbiIsCisJCSBtaWlfY29udHJvbCk7CisJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCSAgICAgIChtaWlfY29udHJvbCB8CisJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKKwkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTVEFSVF9BTikpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3Moc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC0xNzI2LDcgKzE3MDEsMTEgQEAKIAkJICAgICgoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KIAkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8CiAJCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KLQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSkpIHsKKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKKwkJICAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KKwkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSkpIHsKIAkJCXZhcnMtPmF1dG9uZWcgPSBBVVRPX05FR19FTkFCTEVEOwogCiAJCQlpZiAoZ3Bfc3RhdHVzICYgTURJT19BTl9DTDczX09SXzM3X0NPTVBMRVRFKSB7CkBAIC0xNzcwLDM4ICsxNzQ5LDQ0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfc2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiBscF91cDI7CiAJdTE2IHR4X2RyaXZlcjsKKwl1MTYgYmFuazsKIAogCS8qIHJlYWQgcHJlY29tcCAqLwotCiAJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1JFR19CQU5LX09WRVJfMUcsCiAJCQkgICAgICBNRElPX09WRVJfMUdfTFBfVVAyLCAmbHBfdXAyKTsKIAotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19UWDAsCi0JCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsICZ0eF9kcml2ZXIpOwotCiAJLyogYml0cyBbMTA6N10gYXQgbHBfdXAyLCBwb3NpdGlvbmVkIGF0IFsxNToxMl0gKi8KIAlscF91cDIgPSAoKChscF91cDIgJiBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX01BU0spID4+CiAJCSAgIE1ESU9fT1ZFUl8xR19MUF9VUDJfUFJFRU1QSEFTSVNfU0hJRlQpIDw8CiAJCSAgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUKTsKIAotCWlmICgobHBfdXAyICE9IDApICYmCi0JICAgIChscF91cDIgIT0gKHR4X2RyaXZlciAmIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLKSkpIHsKLQkJLyogcmVwbGFjZSB0eF9kcml2ZXIgYml0cyBbMTU6MTJdICovCi0JCXR4X2RyaXZlciAmPSB+TURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0s7Ci0JCXR4X2RyaXZlciB8PSBscF91cDI7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJaWYgKGxwX3VwMiA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1RYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1RYMSAtIE1ESU9fUkVHX0JBTktfVFgwKSkgeworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19UWDAsCi0JCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCB0eF9kcml2ZXIpOworCQkJCSAgICAgIGJhbmssCisJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCAmdHhfZHJpdmVyKTsKKworCQkvKiByZXBsYWNlIHR4X2RyaXZlciBiaXRzIFsxNToxMl0gKi8KKwkJaWYgKGxwX3VwMiAhPQorCQkgICAgKHR4X2RyaXZlciAmIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLKSkgeworCQkJdHhfZHJpdmVyICY9IH5NRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSzsKKwkJCXR4X2RyaXZlciB8PSBscF91cDI7CisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBiYW5rLAorCQkJCQkgICAgICBNRElPX1RYMF9UWF9EUklWRVIsIHR4X2RyaXZlcik7CisJCX0KIAl9CiB9CiAKQEAgLTE5MDIsNiArMTg4NywyNSBAQAogCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4YTA0MCk7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCisJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKKwkJCQkJICBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCQkvKiBVbnNldCBMb3cgUG93ZXIgTW9kZSBhbmQgU1cgcmVzZXQgKi8KIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwpAQCAtMTkxOSw5ICsxOTIzLDYgQEAKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCQl7Ci0JCQl1MTYgZW1hY19iYXNlOwotCQkJZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMwIDoKLQkJCQkJR1JDQkFTRV9FTUFDMTsKIAogCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCiAJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLApAQCAtMTk0OSw2ICsxOTUwLDIzIEBACiAKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJLyogSFcgcmVzZXQgKi8KKwkJCWJueDJ4X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDE8PDE1KTsKKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWRcbiIpOwogCQkJYnJlYWs7CkBAIC0xOTgwLDYgKzE5OTgsMzEgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICB1MzIgc2htZW1fYmFzZSwgdTMyIHNwaXJvbV92ZXIpCit7CisJRFAoTkVUSUZfTVNHX0xJTkssICJGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwKKwkJICh1MTYpKHNwaXJvbV92ZXI+PjE2KSwgKHUxNilzcGlyb21fdmVyKTsKKwlSRUdfV1IoYnAsIHNobWVtX2Jhc2UgKworCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJICAgIHBvcnRfbWJbcG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSwKKwkJCXNwaXJvbV92ZXIpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkciwKKwkJCQkgICAgdTMyIHNobWVtX2Jhc2UpCit7CisJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZmd192ZXIyKTsKKwlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LCBzaG1lbV9iYXNlLAorCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwpAQCAtMTk4OCw3ICsyMDMxLDYgQEAKIAkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KIAkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCXUxNiBmd192ZXIxLCBmd192ZXIyOwogCiAJLyogTmVlZCB0byB3YWl0IDIwMG1zIGFmdGVyIHJlc2V0ICovCiAJbXNsZWVwKDIwMCk7CkBAIC0yMDI0LDE0ICsyMDY2LDEwIEBACiAJLyogV2FpdCAxMDBtcyAqLwogCW1zbGVlcCgxMDApOwogCi0JLyogUHJpbnQgdGhlIFBIWSBGVyB2ZXJzaW9uICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAotCQkJICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOwotCURQKE5FVElGX01TR19MSU5LLCAiODA3MiBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7CisJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKKwkJCQlleHRfcGh5X3R5cGUsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiB9CiAKIHN0YXRpYyB1OCBibngyeF84MDczX2lzX3Nucl9uZWVkZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCkBAIC0yMDQ5LDcgKzIwODcsNyBAQAogCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAweGM4MDEsICZ2YWwpOworCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnZhbCk7CiAKIAlpZiAodmFsICE9IDEpIHsKIAkJLyogTm8gbmVlZCB0byB3b3JrYXJvdW5kIGluIDgwNzMgQTEgKi8KQEAgLTIwODEsNyArMjExOSw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgPiAwKSB7CiAJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCkBAIC0yMDk3LDcgKzIxMzUsOCBAQAogCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgMHhjODIwLCAmdmFsKTsKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX1NQRUVEX0xJTktfU1RBVFVTLAorCQkJICAgICAgJnZhbCk7CiAJCSAgLyogSWYgYml0IFsxNF0gPSAwIG9yIGJpdCBbMTNdID0gMCwgY29udGludWUgb24gd2l0aAogCQkgICBzeXN0ZW0gaW5pdGlhbGl6YXRpb24gKFhBVUkgd29yay1hcm91bmQgbm90IHJlcXVpcmVkLAogCQkgICAgYXMgdGhlc2UgYml0cyBpbmRpY2F0ZSAyLjVHIG9yIDFHIGxpbmsgdXApLiAqLwpAQCAtMjExNSw3ICsyMTU0LDcgQEAKIAkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCQkJZXh0X3BoeV9hZGRyLAogCQkJCQlNRElPX1BNQV9ERVZBRCwKLQkJCQkJMHhjODQxLCAmdmFsKTsKKwkJCQkJTURJT19QTUFfUkVHXzgwNzNfWEFVSV9XQSwgJnZhbCk7CiAJCQkJaWYgKHZhbCAmICgxPDwxNSkpIHsKIAkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkJCSAgIlhBVUkgd29ya2Fyb3VuZCBoYXMgY29tcGxldGVkXG4iKTsKQEAgLTIxMzMsOSArMjE3Miw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKLQkJCQkJICB1OCBleHRfcGh5X2FkZHIpCisJCQkJCSAgdTggZXh0X3BoeV9hZGRyLCB1MzIgc2htZW1fYmFzZSkKIHsKLQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAkvKiBCb290IHBvcnQgZnJvbSBleHRlcm5hbCBST00gICovCiAJLyogRURDIGdyc3QgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LApAQCAtMjE4NSwxNyArMjIyMyw0OTYgQEAKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CiAKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmZndfdmVyMik7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICI4MDczIEZXIHZlcnNpb24gMHgleDoweCV4XG4iLCBmd192ZXIxLCBmd192ZXIyKTsKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCQkJZXh0X3BoeV9hZGRyLAorCQkJCXNobWVtX2Jhc2UpOworfQogCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJLyogTmVlZCB0byB3YWl0IDEwMG1zIGFmdGVyIHJlc2V0ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBTZXQgc2VyaWFsIGJvb3QgY29udHJvbCBmb3IgZXh0ZXJuYWwgbG9hZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAxKTsKKworCS8qIE1pY3JvIGNvbnRyb2xsZXIgcmUtYm9vdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKworCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fTUlDUk9fUkVTRVQpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIsCisJCSAgICAgICAweDczQTApOworCisJLyogQ2xlYXIgc29mdCByZXNldC4KKwlXaWxsIGF1dG9tYXRpY2FsbHkgcmVzZXQgbWljcm8tY29udHJvbGxlciByZS1ib290ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTF9ST01fUkVTRVRfSU5URVJOQUxfTVApOworCisJLyogd2FpdCBmb3IgMTUwbXMgZm9yIG1pY3JvY29kZSBsb2FkICovCisJbXNsZWVwKDE1MCk7CisKKwkvKiBEaXNhYmxlIHNlcmlhbCBib290IGNvbnRyb2wsIHRyaXN0YXRlcyBwaW5zIFNTX04sIFNDSywgTU9TSSwgTUlTTyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKKworCW1zbGVlcCgyMDApOworCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCisJCQkJZXh0X3BoeV90eXBlLAorCQkJCWV4dF9waHlfYWRkciwKKwkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQl1OCBleHRfcGh5X2FkZHIsIHU4IHR4X2VuKQoreworCXUxNiB2YWw7CisJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIHRyYW5zbWl0dGVyIHR4X2VuPSV4IGZvciBwb3J0ICV4XG4iLAorCQkgdHhfZW4sIHBvcnQpOworCS8qIERpc2FibGUvRW5hYmxlIHRyYW5zbWl0dGVyICggVFggbGFzZXIgb2YgdGhlIFNGUCsgbW9kdWxlLikqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAmdmFsKTsKKworCWlmICh0eF9lbikKKwkJdmFsICY9IH4oMTw8MTUpOworCWVsc2UKKwkJdmFsIHw9ICgxPDwxNSk7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgdmFsKTsKK30KKworCitzdGF0aWMgdTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCisJCQkJICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKSB7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHZhbCwgaTsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJaWYgKGJ5dGVfY250ID4gMTYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJSZWFkaW5nIGZyb20gZWVwcm9tIGlzIgorCQkJICAgICIgaXMgbGltaXRlZCB0byAweGZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYnl0ZSBjb3VudCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0JZVEVfQ05ULAorCQkgICAgICAgKGJ5dGVfY250IHwgMHhhMDAwKSk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfTUVNX0FERFIsCisJCSAgICAgICBhZGRyKTsKKworCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsCisJCSAgICAgICAweDJjMGYpOworCisJLyogV2FpdCB1cCB0byA1MDB1cyBmb3IgY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spICE9CisJCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIkdvdCBiYWQgc3RhdHVzIDB4JXggd2hlbiByZWFkaW5nIGZyb20gU0ZQKyBFRVBST01cbiIsCisJCQkgKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCB0aGUgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IGJ5dGVfY250OyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX0JVRiArIGksICZ2YWwpOworCQlvX2J1ZltpXSA9ICh1OCkodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9NQVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUpCisJCQlyZXR1cm4gMDs7CisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X2dldF9zZnBfbW9kdWxlX3R5cGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICB1OCAqbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggdmFsOworCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9VTktOT1dOOworCisJLyogRmlyc3QgY2hlY2sgZm9yIGNvcHBlciBjYWJsZSAqLworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSLAorCQkJCSAgICAgICAxLAorCQkJCSAgICAgICAmdmFsKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBTRlArIG1vZHVsZSBFRVBST00iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUjoKKwl7CisJCXU4IGNvcHBlcl9tb2R1bGVfdHlwZTsKKwkJLyogQ2hlY2sgaWYgaXRzIGFjdGl2ZSBjYWJsZSggaW5jbHVkZXMgU0ZQKyBtb2R1bGUpCisJCW9mIHBhc3NpdmUgY2FibGUqLworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJCSAgICAgICBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQUREUiwKKwkJCQkJICAgICAgIDEsCisJCQkJCSAgICAgICAmY29wcGVyX21vZHVsZV90eXBlKSAhPQorCQkgICAgMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJIkZhaWxlZCB0byByZWFkIGNvcHBlci1jYWJsZS10eXBlIgorCQkJCSIgZnJvbSBTRlArIEVFUFJPTVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgorCQkgICAgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBY3RpdmUgQ29wcGVyIGNhYmxlIGRldGVjdGVkXG4iKTsKKwkJCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9BQ1RJVkVfQ09QUEVSX0NBQkxFOworCQl9IGVsc2UgaWYgKGNvcHBlcl9tb2R1bGVfdHlwZSAmCisJCQlTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfUEFTU0lWRSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiUGFzc2l2ZSBDb3BwZXIiCisJCQkJCSAgICAiIGNhYmxlIGRldGVjdGVkXG4iKTsKKwkJCQkqbW9kdWxlX3R5cGUgPQorCQkJCSAgICAgIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRTsKKwkJfSBlbHNlIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5rbm93biBjb3BwZXItY2FibGUtIgorCQkJCSAgICAgInR5cGUgMHgleCAhISFcbiIsIGNvcHBlcl9tb2R1bGVfdHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQzoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJPcHRpYyBtb2R1bGUgZGV0ZWN0ZWRcbiIpOworCQkqbW9kdWxlX3R5cGUgPSBTRlBfTU9EVUxFX1RZUEVfTEM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gZGV0ZXJtaW5lIG1vZHVsZSB0eXBlIDB4JXggISEhXG4iLAorCQkJIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHJlYWQgdGhlIHJlbGV2YW50IGZpZWxkIGZyb20gdGhlIG1vZHVsZSAoIFNGUCsgKSwKKwlhbmQgdmVyaWZ5IGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoaXMgYm9hcmQgKi8KK3N0YXRpYyB1OCBibngyeF92ZXJpZnlfc2ZwX21vZHVsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQl1OCBtb2R1bGVfdHlwZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCAqc3RyX3AsICp0bXBfYnVmOworCXUxNiBpOworCisjZGVmaW5lIENPTVBMSUFOQ0VfU1RSX0NOVCA2CisJdTggKmNvbXBsaWFuY2Vfc3RyW10gPSB7IkJyb2FkY29tIiwgIkpEU1UiLCAiTW9sZXggSW5jIiwgIlBJQ09MSUdIVCIsCisJCSJGSU5JU0FSIENPUlAuICAgIiwgIkFtcGhlbm9sIn07CisJdTggYnVmW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRV07CisJLyogUGFzc2l2ZSBDb3BwZXIgY2FibGVzIGFyZSBhbGxvd2VkIHRvIHBhcnRpY2lwYXRlLAorCXNpbmNlIHRoZSBtb2R1bGUgaXMgaGFyZHdpcmVkIHRvIHRoZSBjb3BwZXIgY2FibGUgKi8KKworCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJOT1QgZW5mb3JjaW5nIG1vZHVsZSB2ZXJpZmljYXRpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobW9kdWxlX3R5cGUgIT0gU0ZQX01PRFVMRV9UWVBFX0xDKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTm8gbmVlZCB0byB2ZXJpZnkgY29wcGVyIGNhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSW4gY2FzZSBvZiBub24gY29wcGVyIGNhYmxlIG9yIEFjdGl2ZSBjb3BwZXIgY2FibGUsCisJCXZlcmlmeSB0aGF0IHRoZSBTRlArIG1vZHVsZSBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIGJvYXJkKi8KKwlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFLAorCQkJCSAgICAgICBidWYpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBWZW5kb3ItTmFtZSBmcm9tIgorCQkJICAgICIgbW9kdWxlIEVFUFJPTVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQ09NUExJQU5DRV9TVFJfQ05UOyBpKyspIHsKKwkJc3RyX3AgPSBjb21wbGlhbmNlX3N0cltpXTsKKwkJdG1wX2J1ZiA9IGJ1ZjsKKwkJd2hpbGUgKCpzdHJfcCkgeworCQkJaWYgKCh1OCkoKnRtcF9idWYpICE9ICh1OCkoKnN0cl9wKSkKKwkJCQlicmVhazsKKwkJCXN0cl9wKys7CisJCQl0bXBfYnVmKys7CisJCX0KKworCQlpZiAoISgqc3RyX3ApKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgTW9kdWxlIHZlcmlmaWVkLCAiCisJCQkJICAgICAiaW5kZXg9JXhcbiIsIGkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJRFAoTkVUSUZfTVNHX0xJTkssICJJbmNvbXBsaWFudCBTRlArIG1vZHVsZS4gRGlzYWJsZSBtb2R1bGUgISEhXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgdTggYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJdTggbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBvcHRpb25zW1NGUF9FRVBST01fT1BUSU9OU19TSVpFXTsKKwl1OCBsaW1pdGluZ19tb2RlOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MTYgY3VyX2xpbWl0aW5nX21vZGU7CisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUsCisJCQkJICAgICAgIG9wdGlvbnMpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBPcHRpb24gZmllbGQgZnJvbSIKKwkJCSAgICAiIG1vZHVsZSBFRVBST01cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbGltaXRpbmdfbW9kZSA9ICEob3B0aW9uc1swXSAmCisJCQkgIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0spOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCSAgICAgICZjdXJfbGltaXRpbmdfbW9kZSk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJDdXJyZW50IExpbWl0aW5nIG1vZGUgaXMgMHgleFxuIiwKKwkJIGN1cl9saW1pdGluZ19tb2RlKTsKKworCWlmIChsaW1pdGluZ19tb2RlICYmCisJICAgIChtb2R1bGVfdHlwZSAhPSBTRlBfTU9EVUxFX1RZUEVfUEFTU0lWRV9DT1BQRVJfQ0FCTEUpKSB7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJNb2R1bGUgb3B0aW9ucyA9IDB4JXguU2V0dGluZyBMSU1JVElORyBNT0RFXG4iLAorCQkJIG9wdGlvbnNbMF0pOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJCSAgICAgICBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSk7CisJfSBlbHNlIHsgLyogTFJNIG1vZGUgKCBkZWZhdWx0ICkqLworCisJCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIG9wdGlvbnMgPSAweCV4LlNldHRpbmcgTFJNIE1PREVcbiIsCisJCQkgb3B0aW9uc1swXSk7CisKKwkJLyogQ2hhbmdpbmcgdG8gTFJNIG1vZGUgdGFrZXMgcXVpdGUgZmV3IHNlY29uZHMuCisJCVNvIGRvIGl0IG9ubHkgaWYgY3VycmVudCBtb2RlIGlzIGxpbWl0aW5nCisJCSggZGVmYXVsdCBpcyBMUk0gKSovCisJCWlmIChjdXJfbGltaXRpbmdfbW9kZSAhPSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSkKKwkJCXJldHVybiAwOworCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX0xSTV9NT0RFLAorCQkJICAgICAgIDApOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJCSAgICAgICAweDEyOCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDAsCisJCQkgICAgICAgMHg0MDA4KTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfTFJNX01PREUsCisJCQkgICAgICAgMHhhYWFhKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXU4IHZhbDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgdGltZW91dDsKKwkvKiBJbml0aWFsaXphdGlvbiB0aW1lIGFmdGVyIGhvdC1wbHVnIG1heSB0YWtlIHVwIHRvIDMwMG1zIGZvciBzb21lCisJcGh5cyB0eXBlICggZS5nLiBKRFNVICkgKi8KKwlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNjA7IHRpbWVvdXQrKykgeworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIDEsIDEsICZ2YWwpCisJCSAgICA9PSAwKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGluaXRpYWxpemF0aW9uICIKKwkJCQkgICAgICJ0b29rICVkIG1zXG4iLCB0aW1lb3V0ICogNSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltc2xlZXAoNSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdTggYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggbW9kdWxlX3R5cGU7CisJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgZGV0ZWN0aW9uIGlzIG5vdCByZXF1aXJlZCAiCisJCQkgICAgImZvciB0aGlzIHBoeVxuIik7CisJCXJldHVybiAwOworCX0KKworCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgcGx1Z2dlZCBpbi9vdXQgZGV0ZWN0ZWQgb24gcG9ydCAlZFxuIiwKKwkJIHBhcmFtcy0+cG9ydCk7CisKKwlpZiAoYm54MnhfZ2V0X3NmcF9tb2R1bGVfdHlwZShwYXJhbXMsCisJCQkJICAgICZtb2R1bGVfdHlwZSkgIT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byBnZXQgdmFsaWQgbW9kdWxlIHR5cGVcbiIpOworCQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJICAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwkJCS8qIEluIGNhc2UgbW9kdWxlIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgaXQgdHJ5cyB0bworCQkJbGluayB1cC4gVGhlIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiBoZXJlIGlzIExSTSAvCisJCQlMSU1JVElORyBtb2RlIHdoaWNoIHNldCBhY2NvcmRpbmcgdG8gdGhlIG1vZHVsZS10eXBlKi8KKwkJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIHJlYWQgbW9kdWxlLXR5cGUuIgorCQkJCSAgICAiUHJvYmFibHkgZHVlIHRvIEJpdCBTdHJldGNoaW5nLiIKKwkJCQkgICAgIiBQcm9jZWVkaW5nLi4uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChibngyeF92ZXJpZnlfc2ZwX21vZHVsZShwYXJhbXMsIG1vZHVsZV90eXBlKSAhPQorCQkgICAwKSB7CisJCS8qIGNoZWNrIFNGUCsgbW9kdWxlIGNvbXBhdGliaWxpdHkgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgdmVyaWZpY2F0aW9uIGZhaWxlZCEhXG4iKTsKKwkJLyogVHVybiBvbiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwYXJhbXMtPnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCisJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkvKiBDaGVjayBhbmQgc2V0IGxpbWl0aW5nIG1vZGUgLyBMUk0gbW9kZSAqLworCWJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUocGFyYW1zLCBtb2R1bGVfdHlwZSk7CisKKwkvKiBFbmFibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlICovCisJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgZXh0X3BoeV9hZGRyLCAxKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTMyIGdwaW9fdmFsOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJLyogU2V0IHZhbGlkIG1vZHVsZSBsZWQgb2ZmICovCisJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAorCQkJICBwYXJhbXMtPnBvcnQpOworCisJLyogR2V0IGN1cnJlbnQgZ3BpbyB2YWwgcmVmZWxlY3RpbmcgbW9kdWxlIHBsdWdnZWQgaW4gLyBvdXQqLworCWdwaW9fdmFsID0gYm54MnhfZ2V0X2dwaW8oYnAsICBNSVNDX1JFR0lTVEVSU19HUElPXzMsIHBvcnQpOworCisJLyogQ2FsbCB0aGUgaGFuZGxpbmcgZnVuY3Rpb24gaW4gY2FzZSBtb2R1bGUgaXMgZGV0ZWN0ZWQgKi8KKwlpZiAoZ3Bpb192YWwgPT0gMCkgeworCisJCWJueDJ4X3NldF9ncGlvX2ludChicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFIsCisJCQkJICAgICAgcG9ydCk7CisKKwkJaWYgKGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQocGFyYW1zKQorCQkgICAgPT0gMCkKKwkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKKwl9IGVsc2UgeworCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgorCQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVCwKKwkJCQkgICAgICBwb3J0KTsKKwkJLyogTW9kdWxlIHdhcyBwbHVnZ2VkIG91dC4gKi8KKwkJLyogRGlzYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgKi8KKwkJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgIGV4dF9waHlfYWRkciwgMCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDd4X2ZvcmNlXzEwRyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKQEAgLTIyMzksNyArMjc1Niw3IEBACiAJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIDB4YzgwMSwgJnZhbCk7CisJCSAgICAgIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKIAogCWlmICh2YWwgPT0gMCkgewogCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCkBAIC0yMzc3LDMxICsyODk0LDQwIEBACiAJCSAgICAgICBNRElPX0FOX0RFVkFELAogCQkgICAgICAgTURJT19BTl9SRUdfQURWX1BBVVNFLCB2YWwpOwogfQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXUxNiBiYW5rLCBpID0gMDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAorCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfUlgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYMzsKKwkgICAgICBiYW5rICs9IChNRElPX1JFR19CQU5LX1JYMS1NRElPX1JFR19CQU5LX1JYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19SWDBfUlhfRVFfQk9PU1QsCisJCQkJCSAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfcnhbaV0pOworCX0KKworCWZvciAoYmFuayA9IE1ESU9fUkVHX0JBTktfVFgwLCBpID0gMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1RYMzsKKwkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19UWDEgLSBNRElPX1JFR19CQU5LX1RYMCksIGkrKykgeworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLAorCQkJCQkgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4W2ldKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAogCQkJCXN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKIAlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpIHsKLQkJdTE2IGJhbmssIHJ4X2VxOwotCi0JCXJ4X2VxID0gKChwYXJhbXMtPnNlcmRlc19jb25maWcgJgotCQkJICBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLKSA+PgotCQkJIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX1NISUZUKTsKLQotCQlEUChORVRJRl9NU0dfTElOSywgInNldHRpbmcgcnggZXEgdG8gMHgleFxuIiwgcnhfZXEpOwotCQlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1JYMDsgYmFuayA8PSBNRElPX1JFR19CQU5LX1JYX0FMTDsKLQkJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEtTURJT19SRUdfQkFOS19SWDApKSB7Ci0JCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcG9ydCwKLQkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkJICAgICAgYmFuayAsCi0JCQkJCSAgICAgIE1ESU9fUlgwX1JYX0VRX0JPT1NULAotCQkJCQkgICAgICAoKHJ4X2VxICYKLQkJCQlNRElPX1JYMF9SWF9FUV9CT09TVF9FUVVBTElaRVJfQ1RSTF9NQVNLKSB8Ci0JCQkJTURJT19SWDBfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwpKTsKLQkJfQorCQlpZiAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgorCQkgICAgKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKQorCQkJYm54Mnhfc2V0X3ByZWVtcGhhc2lzKHBhcmFtcyk7CiAKIAkJLyogZm9yY2VkIHNwZWVkIHJlcXVlc3RlZD8gKi8KIAkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgIT0gU1BFRURfQVVUT19ORUcpIHsKQEAgLTI1MDYsMTIgKzMwMzIsNTMgQEAKIAkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgICBNRElPX1dJU19ERVZBRCwKIAkJCQkgICAgICAgTURJT19XSVNfUkVHX0xBU0lfQ05UTCwgMHgxKTsKKworCQkJLyogQkNNODcwNSBkb2Vzbid0IGhhdmUgbWljcm9jb2RlLCBoZW5jZSB0aGUgMCAqLworCQkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKLQotCQkJbXNsZWVwKDEwKTsKKwkJCS8qIFdhaXQgdW50aWwgZncgaXMgbG9hZGVkICovCisJCQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOworCQkJCWlmICh2YWwpCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxMCk7CisJCQl9CisJCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNiBpcyBpbml0aWFsaXplZCAiCisJCQkJImFmdGVyICVkIG1zXG4iLCBjbnQpOworCQkJaWYgKChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpIHsKKwkJCQl1OCBpOworCQkJCXUxNiByZWc7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlyZWcgPSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwICsKKwkJCQkJCWkqKE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDEgLQorCQkJCQkJICAgTURJT19YU184NzA2X1JFR19CQU5LX1JYMCk7CisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19YU19ERVZBRCwKKwkJCQkJCSAgICAgIHJlZywgJnZhbCk7CisJCQkJCS8qIENsZWFyIGZpcnN0IDMgYml0cyBvZiB0aGUgY29udHJvbCAqLworCQkJCQl2YWwgJj0gfjB4NzsKKwkJCQkJLyogU2V0IGNvbnRyb2wgYml0cyBhY2NvcmRpbmcgdG8KKwkJCQkJY29uZmlndWF0aW9uICovCisJCQkJCXZhbCB8PSAocGFyYW1zLT54Z3hzX2NvbmZpZ19yeFtpXSAmCisJCQkJCQkweDcpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgUlgiCisJCQkJCQkgIkVxdWFsaXplciB0byBCQ004NzA2IHJlZyAweCV4IgorCQkJCQkJICIgPC0tIHZhbCAweCV4XG4iLCByZWcsIHZhbCk7CisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJCQkgICAgICAgcmVnLCB2YWwpOworCQkJCX0KKwkJCX0KIAkJCS8qIEZvcmNlIHNwZWVkICovCiAJCQkvKiBGaXJzdCBlbmFibGUgTEFTSSAqLwogCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LApAQCAtMjU3OCw5ICszMTQ1LDk1IEBACiAJCQkJCSAgICAgICAweDEyMDApOwogCiAJCQl9Ci0KKwkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbml0aWFsaXppbmcgQkNNODcyNlxuIik7CisJCQlibngyeF9iY204NzI2X2V4dGVybmFsX3JvbV9ib290KHBhcmFtcyk7CiAKKwkJCS8qIE5lZWQgdG8gY2FsbCBtb2R1bGUgZGV0ZWN0ZWQgb24gaW5pdGlhbGl6YXRpb24gc2luY2UKKwkJCXRoZSBtb2R1bGUgZGV0ZWN0aW9uIHRyaWdnZXJlZCBieSBhY3R1YWwgbW9kdWxlCisJCQlpbnNlcnRpb24gbWlnaHQgb2NjdXIgYmVmb3JlIGRyaXZlciBpcyBsb2FkZWQsIGFuZCB3aGVuCisJCQlkcml2ZXIgaXMgbG9hZGVkLCBpdCByZXNldCBhbGwgcmVnaXN0ZXJzLCBpbmNsdWRpbmcgdGhlCisJCQl0cmFuc21pdHRlciAqLworCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKKwkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEXzEwMDApIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgZm9yY2VcbiIpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweDQwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweEQpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDB4NSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCSAgICAgICAweDQwMCk7CisJCQl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09CisJCQkJICAgIFNQRUVEX0FVVE9fTkVHKSAmJgorCQkJCSAgICgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJICAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKSkpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgY2xhdXNlMzcgXG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0FEViwgMHgyMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0NMNzMsIDB4MDQwYyk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0ZDX0xELCAweDAwMjApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMDAwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIDB4MTIwMCk7CisKKwkJCQkvKiBFbmFibGUgUlgtQUxBUk0gY29udHJvbCB0byByZWNlaXZlCisJCQkJaW50ZXJydXB0IGZvciAxRyBzcGVlZCBjaGFuZ2UgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDQpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCQkgICAgICAgMHg0MDApOworCisJCQl9IGVsc2UgeyAvKiBEZWZhdWx0IDEwRy4gU2V0IG9ubHkgTEFTSSBjb250cm9sICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMSk7CisJCQl9CisKKwkJCS8qIFNldCBUWCBQcmVFbXBoYXNpcyBpZiBuZWVkZWQgKi8KKwkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFRYX0NUUkwxIDB4JXgsIgorCQkJCQkgIlRYX0NUUkwyIDB4JXhcbiIsCisJCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMSwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0pOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMiwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQl7CkBAIC0yNjI3LDcgKzMyODAsNyBAQAogCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgMHhjYTEzLAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLAogCQkJCSAgICAgICZ0bXAxKTsKIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0yNjk0LDcgKzMzNDcsNyBAQAogCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgMHg4MzI5LCAmdG1wMSk7CisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgJnRtcDEpOwogCiAJCQkJaWYgKCgocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCiAJCQkJICAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8yXzVHKSAmJgpAQCAtMjcwOCw3ICszMzYxLDcgQEAKIAkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCQkJCSBleHRfcGh5X2FkZHIsCiAJCQkJCSBNRElPX1BNQV9ERVZBRCwKLQkJCQkJIDB4YzgwMSwgJnBoeV92ZXIpOworCQkJCQkgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZwaHlfdmVyKTsKIAkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZGQgMi41R1xuIik7CiAJCQkJCWlmIChwaHlfdmVyID4gMCkKIAkJCQkJCXRtcDEgfD0gMTsKQEAgLTI3MjMsNyArMzM3Niw3IEBACiAJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkgICAgICAgMHg4MzI5LCB0bXAxKTsKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzgwNzNfMl81RywgdG1wMSk7CiAJCQl9CiAKIAkJCS8qIEFkZCBzdXBwb3J0IGZvciBDTDM3IChwYXNzaXZlIG1vZGUpIElJICovCkBAIC0yNzk4LDYgKzM0NTEsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCQl7CisJCQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAkJCURQKE5FVElGX01TR19MSU5LLAogCQkJCSJTZXR0aW5nIHRoZSBTRlg3MTAxIExBU0kgaW5kaWNhdGlvblxuIik7CiAKQEAgLTI4MjcsNiArMzQ4Miw1MCBAQAogCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCiAJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisKKwkJCS8qIFNhdmUgc3Bpcm9tIHZlcnNpb24gKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmZndfdmVyMSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIyLCAmZndfdmVyMik7CisKKwkJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24ocGFyYW1zLT5icCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlLAorCQkJCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7CisKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSJTZXR0aW5nIHRoZSBCQ004NDgxIExBU0kgY29udHJvbFxuIik7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDEpOworCisJCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkgICAgICBNRElPX0FOX1JFR19DVFJMLCAmdmFsKTsKKwkJCXZhbCB8PSAweDIwMDsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIHZhbCk7CisKKwkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwKKwkJCQkJCWV4dF9waHlfYWRkciwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CisKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywKQEAgLTI5MTAsMzggKzM2MDksNDMgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2XG4iKTsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYvODcyNlxuIik7CisJCQkvKiBDbGVhciBSWCBBbGFybSovCiAJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiBMQVNJIHN0YXR1cyAweCV4XG4iLCB2YWwxKTsKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX0FMQVJNLAorCQkJCSAgICAgICZ2YWwyKTsKKwkJCS8qIGNsZWFyIExBU0kgaW5kaWNhdGlvbiovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2Lzg3MjYgTEFTSSBzdGF0dXMgMHgleC0tPiIKKwkJCQkgICAgICIweCV4XG4iLCB2YWwxLCB2YWwyKTsKIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7CisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19SWF9TRCwKKwkJCQkgICAgICAmcnhfc2QpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJICAgICAgJnZhbDIpOwogCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfU0QsICZyeF9zZCk7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCQkgICAgICBNRElPX1BDU19SRUdfU1RBVFVTLCAmcGNzX3N0YXR1cyk7Ci0KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsICZ2YWwyKTsKLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsICZ2YWwyKTsKLQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IHJ4X3NkIDB4JXgiCisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYvODcyNiByeF9zZCAweCV4IgogCQkJICAgIiAgcGNzX3N0YXR1cyAweCV4IDFHYnBzIGxpbmtfc3RhdHVzIDB4JXhcbiIsCiAJCQkgICByeF9zZCwgcGNzX3N0YXR1cywgdmFsMik7CiAJCQkvKiBsaW5rIGlzIHVwIGlmIGJvdGggYml0IDAgb2YgcG1kX3J4X3NkIGFuZApAQCAtMjk1MSwxOSArMzY1NSwzMSBAQAogCQkJZXh0X3BoeV9saW5rX3VwID0gKChyeF9zZCAmIHBjc19zdGF0dXMgJiAweDEpIHx8CiAJCQkJCSAgICh2YWwyICYgKDE8PDEpKSk7CiAJCQlpZiAoZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJaWYgKGV4dF9waHlfdHlwZSA9PQorCQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgeworCQkJCQkvKiBJZiB0cmFuc21pdHRlciBpcyBkaXNhYmxlZCwKKwkJCQkJaWdub3JlIGZhbHNlIGxpbmsgdXAgaW5kaWNhdGlvbiAqLworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkJCQkJICAgJnZhbDEpOworCQkJCQlpZiAodmFsMSAmICgxPDwxNSkpIHsKKwkJCQkJCURQKE5FVElGX01TR19MSU5LLCAiVHggaXMgIgorCQkJCQkJCSAgICAiZGlzYWJsZWRcbiIpOworCQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCiAJCQkJaWYgKHZhbDIgJiAoMTw8MSkpCiAJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwogCQkJCWVsc2UKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJfQogCi0JCQkvKiBjbGVhciBMQVNJIGluZGljYXRpb24qLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNLCAmdmFsMik7CiAJCQlicmVhazsKLQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJewpAQCAtMzAxOCw3ICszNzM0LDcgQEAKIAkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIDB4Y2ExMywKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKIAkJCQkgICAgICAmdmFsMSk7CiAKIAkJCS8qIENoZWNrIHRoZSBMQVNJICovCkBAIC0zMDYzLDE3ICszNzc5LDE3IEBACiAJCQkJCX0KIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkJICAgICAgMHg4MzA0LAotCQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCiAJCQkJLyogQ2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9uIDEuMS4yICovCiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0zMDkwLDcgKzM4MDYsNyBAQAogCQkJCQkgICAgICJhbl9saW5rX3N0YXR1cz0weCV4XG4iLAogCQkJCQkgIHZhbDIsIHZhbDEsIGFuMTAwMF9zdGF0dXMpOwogCi0JCQkJCWV4dF9waHlfbGlua191cCA9ICgoKHZhbDEgJiA0KSA9PSA0KSB8fAorCQkJCWV4dF9waHlfbGlua191cCA9ICgoKHZhbDEgJiA0KSA9PSA0KSB8fAogCQkJCQkJKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpKTsKIAkJCQlpZiAoZXh0X3BoeV9saW5rX3VwICYmCiAJCQkJICAgIGJueDJ4XzgwNzNfaXNfc25yX25lZWRlZChwYXJhbXMpKSB7CkBAIC0zMTE4LDExICszODM0LDExIEBACiAKIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkJCSAgICAgIDB4YzgyMCwKLQkJCQkJCSAgICAgICZsaW5rX3N0YXR1cyk7CisJCQkJCSAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCisJCQkJCSAgICZsaW5rX3N0YXR1cyk7CiAKIAkJCQkvKiBCaXRzIDAuLjIgLS0+IHNwZWVkIGRldGVjdGVkLAogCQkJCSAgIGJpdHMgMTMuLjE1LS0+IGxpbmsgaXMgZG93biAqLwpAQCAtMzE1NiwxNyArMzg3MiwxNyBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBTZWUgaWYgMUcgbGluayBpcyB1cCBmb3IgdGhlIDgwNzIgKi8KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJCSAgICAgIDB4ODMwNCwKLQkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CiAJCQkJaWYgKGFuMTAwMF9zdGF0dXMgJiAoMTw8MSkpIHsKIAkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CkBAIC0zMjI2LDcgKzM5NDIsNTMgQEAKIAkJCQkJICh2YWwyICYgKDE8PDE0KSkpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCS8qIENsZWFyIExBU0kgaW50ZXJydXB0ICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIExBU0kgc3RhdHVzIHJlZyA9IDB4JXhcbiIsCisJCQkJIHZhbDEpOwogCisJCQkvKiBDaGVjayAxMEctQmFzZVQgbGluayBzdGF0dXMgKi8KKwkJCS8qIENoZWNrIEdsb2JhbCBQTUQgc2lnbmFsIG9rICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX1NELAorCQkJCSAgICAgICZyeF9zZCk7CisJCQkvKiBDaGVjayBQQ1MgYmxvY2sgbG9jayAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCisJCQkJICAgICAgJnBjc19zdGF0dXMpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIDEuYSA9IDB4JXgsIDEuMjAgPSAweCV4XG4iLAorCQkJCSByeF9zZCwgcGNzX3N0YXR1cyk7CisJCQlpZiAocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB7CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQl9IGVsc2UgeworCisJCQkJLyogQ2hlY2sgMTAwMC1CYXNlVCBsaW5rIHN0YXR1cyAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwgMHhGRkUxLAorCQkJCQkgICAgICAmdmFsMSk7CisKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsIDB4RkZFMSwKKwkJCQkJICAgICAgJnZhbDIpOworCQkJCURQKE5FVElGX01TR19MSU5LLCAiODQ4MSA3LkZGRTEgPSIKKwkJCQkJICAgICAiMHgleC0tPjB4JXhcbiIsIHZhbDEsIHZhbDIpOworCQkJCWlmICh2YWwyICYgKDE8PDIpKSB7CisJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCiAJCQkgICBwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKQEAgLTM0MjYsNyArNDE4OCw3IEBACiAJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCSAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAotCQkJICAgICAgICZjdHJsKTsKKwkJCSAgICAgICZjdHJsKTsKIAkJaWYgKCEoY3RybCAmICgxPDwxNSkpKSB7CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlJlc2V0IGNvbXBsZXRlZFxuXG4iKTsKIAkJCQlicmVhazsKQEAgLTM0NTIsOTEgKzQyMTQsMzkgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZXh0X3BoeV90eXBlID0gMDsKLQl1MTYgdmFsID0gMDsKLQl1OCBleHRfcGh5X2FkZHIgPSAwIDsKKwl1MzIgc3Bpcm9tX3ZlciA9IDA7CiAJdTggc3RhdHVzID0gMCA7Ci0JdTMyIHZlcl9udW07CiAKIAlpZiAodmVyc2lvbiA9PSBOVUxMIHx8IHBhcmFtcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXNwaXJvbV92ZXIgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQkgICAgcG9ydF9tYltwYXJhbXMtPnBvcnRdLmV4dF9waHlfZndfdmVyc2lvbikpOworCiAJLyogcmVzZXQgdGhlIHJldHVybmVkIHZhbHVlIHRvIHplcm8gKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwotCiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAKIAkJaWYgKGxlbiA8IDUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBUYWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb25fZWYoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCS8qICB3YWl0IGZvciAxbXMgKi8KLQkJbXNsZWVwKDEpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLCAmdmFsKTsKLQkJdmVyc2lvblsyXSA9ICh2YWwgJiAweEZGKTsKLQkJdmVyc2lvblszXSA9ICgodmFsICYgMHhGRjAwKT4+OCk7Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwKLQkJCSAgICAgICZ2YWwpOwotCQl2ZXJzaW9uWzBdID0gKHZhbCAmIDB4RkYpOwotCQl2ZXJzaW9uWzFdID0gKCh2YWwgJiAweEZGMDApPj44KTsKKwkJdmVyc2lvblswXSA9IChzcGlyb21fdmVyICYgMHhGRik7CisJCXZlcnNpb25bMV0gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMCkgPj4gODsKKwkJdmVyc2lvblsyXSA9IChzcGlyb21fdmVyICYgMHhGRjAwMDApID4+IDE2OworCQl2ZXJzaW9uWzNdID0gKHNwaXJvbV92ZXIgJiAweEZGMDAwMDAwKSA+PiAyNDsKIAkJdmVyc2lvbls0XSA9ICdcMCc7CiAKLQkJaWYgKCFkcml2ZXJfbG9hZGVkKQotCQkJYm54MnhfdHVybl9vZmZfc2YoYnAsIHBhcmFtcy0+cG9ydCk7CiAJCWJyZWFrOwogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JewotCQkvKiBUYWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb25fZWYoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJnZhbCk7Ci0JCXZlcl9udW0gPSB2YWw8PDE2OwotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZ2YWwpOwotCQl2ZXJfbnVtIHw9IHZhbDsKLQkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3Zlcih2ZXJfbnVtLCB2ZXJzaW9uLCBsZW4pOwotCQlicmVhazsKLQl9CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOwotCQl2ZXJfbnVtID0gdmFsPDwxNjsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmdmFsKTsKLQkJdmVyX251bSB8PSB2YWw7Ci0JCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIodmVyX251bSwgdmVyc2lvbiwgbGVuKTsKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHNwaXJvbV92ZXIsIHZlcnNpb24sIGxlbik7CiAJCWJyZWFrOwotCiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CiAJCWJyZWFrOwogCkBAIC0zNjM2LDYgKzQzNDYsMTQgQEAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJleHRfcGh5X2xvb3BiYWNrOiA4NzA2XG4iKTsKIAkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlEUChORVRJRl9NU0dfTElOSywgIlBNQS9QTUQgZXh0X3BoeV9sb29wYmFjazogODcyNlxuIik7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJICAgICAgIDB4MDAwMSk7CisJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJLyogU0ZYNzEwMV9YR1hTX1RFU1QxICovCiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKQEAgLTM5MDYsMTEgKzQ2MjQsMTMgQEAKIAogCS8qIGluaXQgZXh0IHBoeSBhbmQgZW5hYmxlIGxpbmsgc3RhdGUgaW50ICovCiAJbm9uX2V4dF9waHkgPSAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApIHx8Ci0JCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKTsKKwkJICAgICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkpOwogCiAJaWYgKG5vbl9leHRfcGh5IHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkpIHsKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSB8fAorCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHx8CisJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkgfHwKKwkgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSkgewogCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKIAkJCWJueDJ4X3NldF9wYXJhbGxlbF9kZXRlY3Rpb24ocGFyYW1zLCB2YXJzLT5waHlfZmxhZ3MpOwogCQlibngyeF9pbml0X2ludGVybmFsX3BoeShwYXJhbXMsIHZhcnMpOwpAQCAtNDEwNCw2ICs0ODI0LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgYWRkcmVzcyA9IDB4JXhcbiIsIHBhcmFtcy0+cGh5X2FkZHIpOwogCiAJCWJueDJ4X2xpbmtfaW5pdGlhbGl6ZShwYXJhbXMsIHZhcnMpOwogCQltc2xlZXAoMzApOwpAQCAtNDExMiw3ICs0ODMzLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCitzdGF0aWMgdm9pZCBibngyeF84NzI2X3Jlc2V0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBleHRfcGh5X2FkZHIpCit7CisJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF84NzI2X3Jlc2V0X3BoeSBwb3J0ICVkXG4iLCBwb3J0KTsKKworCS8qIFNldCBzZXJpYWwgYm9vdCBjb250cm9sIGZvciBleHRlcm5hbCBsb2FkICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLCAweDAwMDEpOworCisJLyogRGlzYWJsZSBUcmFuc21pdHRlciAqLworCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsIDApOworCit9CisKK3U4IGJueDJ4X2xpbmtfcmVzZXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCSAgdTggcmVzZXRfZXh0X3BoeSkKIHsKIAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwpAQCAtNDE1MCwyOCArNDg4NywzNyBAQAogCSAqLwogCSAvKiBjbGVhciBsaW5rIGxlZCAqLwogCWJueDJ4X3NldF9sZWQoYnAsIHBvcnQsIExFRF9NT0RFX09GRiwgMCwgaHdfbGVkX21vZGUsIGNoaXBfaWQpOwotCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB7Ci0JCWlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpICYmCi0JCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKSB7Ci0JCQkvKiBIVyByZXNldCAqLwotCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKLQkJCQkJICBwb3J0KTsKLQorCWlmIChyZXNldF9leHRfcGh5KSB7CisJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDgwNzMgcG9ydCAlZCBpbnRvICIKKwkJCQkgImxvdyBwb3dlciBtb2RlXG4iLAorCQkJCSBwb3J0KTsKIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCiAJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAogCQkJCQkgIHBvcnQpOwotCisJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQl7CisJCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJCS8qIFNldCBzb2Z0IHJlc2V0ICovCisJCQlibngyeF84NzI2X3Jlc2V0X3BoeShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X2FkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCS8qIEhXIHJlc2V0ICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKKwkJCQkJICBwb3J0KTsKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAorCQkJCQkgIHBvcnQpOwogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJyZXNldCBleHRlcm5hbCBQSFlcbiIpOwotCQl9IGVsc2UgaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgewotCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyA4MDczIHBvcnQgJWQgaW50byAiCi0JCQkJCSAibG93IHBvd2VyIG1vZGVcbiIsCi0JCQkJCSBwb3J0KTsKLQkJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAotCQkJCQlNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCi0JCQkJCQkgIHBvcnQpOwogCQl9CiAJfQogCS8qIHJlc2V0IHRoZSBTZXJEZXMvWEdYUyAqLwpAQCAtNDI0OCw3ICs0OTk0LDcgQEAKIAkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewogCQkJaWYgKCEodmFycy0+cGh5X2ZsYWdzICYKIAkJCSAgICAgIFBIWV9TR01JSV9GTEFHKSkKLQkJCQlibngyeF9zZXRfc2dtaWlfdHhfZHJpdmVyKHBhcmFtcyk7CisJCQkJYm54Mnhfc2V0X2dtaWlfdHhfZHJpdmVyKHBhcmFtcyk7CiAJCX0KIAl9CiAKQEAgLTQzMzcsNiArNTA4Myw3IEBACiAKIAlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKIAkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSAmJgorCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpICYmCiAJICAgIChleHRfcGh5X2xpbmtfdXAgJiYgIXZhcnMtPnBoeV9saW5rX3VwKSkKIAkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKIApAQCAtNDM5OCw3ICs1MTQ1LDcgQEAKIAkJdTE2IGZ3X3ZlcjE7CiAKIAkJYm54MnhfYmNtODA3M19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSk7CisJCQkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwgc2htZW1fYmFzZSk7CiAKIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLApAQCAtNDQzNCw3ICs1MTgxLDcgQEAKIAogCS8qIFBBUlQzIC0gY29tcGxldGUgVFhfUE9XRVJfRE9XTiBwcm9jZXNzLCBhbmQgc2V0IEdQSU8yIGJhY2sgdG8gbG93ICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7Ci0JCS8qIFBoYXNlMiBvZiBQT1dFUl9ET1dOX1JFU0VUKi8KKwkJLyogUGhhc2UyIG9mIFBPV0VSX0RPV05fUkVTRVQgKi8KIAkJLyogUmVsZWFzZSBiaXQgMTAgKFJlbGVhc2UgVHggcG93ZXIgZG93bikgKi8KIAkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAogCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKQEAgLTQ0NjksMTIgKzUyMTYsNTEgQEAKIAogfQogCisKK3N0YXRpYyB1OCBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKK3sKKwl1OCBleHRfcGh5X2FkZHI7CisJdTMyIHZhbDsKKwlzOCBwb3J0OworCS8qIFVzZSBwb3J0MSBiZWNhdXNlIG9mIHRoZSBzdGF0aWMgcG9ydC1zd2FwICovCisJLyogRW5hYmxlIHRoZSBtb2R1bGUgZGV0ZWN0aW9uIGludGVycnVwdCAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJT19FVkVOVF9FTik7CisJdmFsIHw9ICgoMTw8TUlTQ19SRUdJU1RFUlNfR1BJT18zKXwKKwkJKDE8PChNSVNDX1JFR0lTVEVSU19HUElPXzMgKyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQpKSk7CisJUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOLCB2YWwpOworCisJYm54MnhfaHdfcmVzZXQoYnAsIDEpOworCW1zbGVlcCg1KTsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgeworCQkvKiBFeHRyYWN0IHRoZSBleHQgcGh5IGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCisJCXUzMiBleHRfcGh5X2NvbmZpZyA9IFJFR19SRChicCwgc2htZW1fYmFzZSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCisJCQlkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7CisKKwkJZXh0X3BoeV9hZGRyID0KKwkJCSgoZXh0X3BoeV9jb25maWcgJgorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI2X2NvbW1vbl9pbml0IDogZXh0X3BoeV9hZGRyID0gMHgleFxuIiwKKwkJCSBleHRfcGh5X2FkZHIpOworCisJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJCS8qIFNldCBmYXVsdCBtb2R1bGUgZGV0ZWN0ZWQgTEVEIG9uICovCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCisJCQkJICBwb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogdTggYm54MnhfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQogewogCXU4IHJjID0gMDsKIAl1MzIgZXh0X3BoeV90eXBlOwogCi0JRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9jb21tb25faW5pdF9waHlcbiIpOworCURQKE5FVElGX01TR19MSU5LLCAiQmVnaW4gY29tbW9uIHBoeSBpbml0XG4iKTsKIAogCS8qIFJlYWQgdGhlIGV4dF9waHlfdHlwZSBmb3IgYXJiaXRyYXJ5IHBvcnQoMCkgKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRSgKQEAgLTQ0ODgsNiArNTI3NCwxMiBAQAogCQlyYyA9IGJueDJ4XzgwNzNfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJLyogR1BJTzEgYWZmZWN0cyBib3RoIHBvcnRzLCBzbyB0aGVyZSdzIG5lZWQgdG8gcHVsbAorCQlpdCBmb3Igc2luZ2xlIHBvcnQgYWxvbmUgKi8KKwkJcmMgPSBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CisKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkgImJueDJ4X2NvbW1vbl9pbml0X3BoeTogZXh0X3BoeSAweCV4IG5vdCByZXF1aXJlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaAppbmRleCA0N2NiNTg1Li4xOWE4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCkBAIC0xLDQgKzEsNCBAQAotLyogQ29weXJpZ2h0IDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKy8qIENvcHlyaWdodCAyMDA4LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCiAgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQpAQCAtNjYsOCArNjYsNiBAQAogCS8qIERldmljZSBwYXJhbWV0ZXJzICovCiAJdTggbWFjX2FkZHJbNl07CiAKLQotCiAJLyogc2htZW0gcGFyYW1ldGVycyAqLwogCXUzMiBzaG1lbV9iYXNlOwogCXUzMiBzcGVlZF9jYXBfbWFzazsKQEAgLTc3LDcgKzc1LDYgQEAKICNkZWZpbmUgU1dJVENIX0NGR19BVVRPX0RFVEVDVAlQT1JUX0ZFQVRVUkVfQ09OX1NXSVRDSF9BVVRPX0RFVEVDVAogCiAJdTE2IGh3X2xlZF9tb2RlOyAvKiBwYXJ0IG9mIHRoZSBod19jb25maWcgcmVhZCBmcm9tIHRoZSBzaG1lbSAqLwotCXUzMiBzZXJkZXNfY29uZmlnOwogCXUzMiBsYW5lX2NvbmZpZzsKIAl1MzIgZXh0X3BoeV9jb25maWc7CiAjZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKQkoZXh0X3BoeV9jb25maWcgJiBcCkBAIC04OSw2ICs4NiwxMiBAQAogCiAJLyogcGh5X2FkZHIgcG9wdWxhdGVkIGJ5IHRoZSBDTEMgKi8KIAl1OCBwaHlfYWRkcjsKKwl1MTYgeGd4c19jb25maWdfcnhbNF07IC8qIHByZWVtcGhhc2lzIHZhbHVlcyBmb3IgdGhlIHJ4IHNpZGUgKi8KKworCXUxNiB4Z3hzX2NvbmZpZ190eFs0XTsgLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgdHggc2lkZSAqLworCXUzMiBmZWF0dXJlX2NvbmZpZ19mbGFnczsKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCAoMTw8MCkKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRAkoMjw8MCkKIAkvKiBEZXZpY2UgcG9pbnRlciBwYXNzZWQgdG8gYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCXN0cnVjdCBibngyeCAqYnA7CiB9OwpAQCAtMTI1LDggKzEyOCwxMSBAQAogLyogSW5pdGlhbGl6ZSB0aGUgcGh5ICovCiB1OCBibngyeF9waHlfaW5pdChzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICpvdXRwdXQpOwogCi0vKiBSZXNldCB0aGUgbGluay4gU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGRyaXZlciBvciBpbnRlcmZhY2UgZ29lcyBkb3duICovCi11OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKTsKKy8qIFJlc2V0IHRoZSBsaW5rLiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gZHJpdmVyIG9yIGludGVyZmFjZSBnb2VzIGRvd24KKyAgIEJlZm9yZSBjYWxsaW5nIHBoeSBmaXJtd2FyZSB1cGdyYWRlLCB0aGUgcmVzZXRfZXh0X3BoeSBzaG91bGQgYmUgc2V0CisgICB0byAwICovCit1OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkgIHU4IHJlc2V0X2V4dF9waHkpOwogCiAvKiBibngyeF9saW5rX3VwZGF0ZSBzaG91bGQgYmUgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KIHU4IGJueDJ4X2xpbmtfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqaW5wdXQsIHN0cnVjdCBsaW5rX3ZhcnMgKm91dHB1dCk7CkBAIC0xNjMsNiArMTY5LDEwIEBACiAKIHU4IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X2NvbmZpZywKIAkJICAgICAgdTggZHJpdmVyX2xvYWRlZCwgY2hhciBkYXRhW10sIHUzMiBzaXplKTsKKy8qIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludCBzaG91bGQgYmUgY2FsbGVkIHVwb24gbW9kdWxlIGRldGVjdGlvbgorICAgaW50ZXJydXB0ICovCit2b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcyk7CisKIC8qIEdldCB0aGUgYWN0dWFsIGxpbmsgc3RhdHVzLiBJbiBjYXNlIGl0IHJldHVybnMgMCwgbGluayBpcyB1cCwKIAlvdGhlcndpc2UgbGluayBpcyBkb3duKi8KIHU4IGJueDJ4X3Rlc3RfbGluayhzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKTsKQEAgLTE3MCw0ICsxODAsNSBAQAogLyogT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIGV4dGVybmFsIHBoeSBhZnRlciBwb3dlciB1cCAqLwogdTggYm54MnhfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKTsKIAorCiAjZW5kaWYgLyogQk5YMlhfTElOS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKaW5kZXggMmUzNDZhNS4uMDBhNzhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpAQCAtNTAsMTUgKzUwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvemxpYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJibngyeF9yZWcuaCIKLSNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCi0jaW5jbHVkZSAiYm54MnhfaHNpLmgiCi0jaW5jbHVkZSAiYm54MnhfbGluay5oIgorCiAjaW5jbHVkZSAiYm54MnguaCIKICNpbmNsdWRlICJibngyeF9pbml0LmgiCisjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40NS4yNyIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzAxLzI2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNDguMTA1IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMDMvMDIiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUgkJMHgwNDAyMDAKIAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nICovCkBAIC03MywyNiArNzEsMzIgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CiAKK3N0YXRpYyBpbnQgbXVsdGlfbW9kZSA9IDE7Cittb2R1bGVfcGFyYW0obXVsdGlfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlfbW9kZSwgIiBVc2UgcGVyLUNQVSBxdWV1ZXMiKTsKKwogc3RhdGljIGludCBkaXNhYmxlX3RwYTsKLXN0YXRpYyBpbnQgdXNlX2ludGE7Ci1zdGF0aWMgaW50IHBvbGw7Ci1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLwotc3RhdGljIGludCB1c2VfbXVsdGk7Ci0KIG1vZHVsZV9wYXJhbShkaXNhYmxlX3RwYSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbSh1c2VfaW50YSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3RwYSwgImRpc2FibGUgdGhlIFRQQSAoTFJPKSBmZWF0dXJlIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9pbnRhLCAidXNlIElOVCNBIGluc3RlYWQgb2YgTVNJLVgiKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9sbCwgInVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVmYXVsdCBkZWJ1ZyBtc2dsZXZlbCIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3RwYSwgIiBEaXNhYmxlIHRoZSBUUEEgKExSTykgZmVhdHVyZSIpOwogCi0jaWZkZWYgQk5YMlhfTVVMVEkKLW1vZHVsZV9wYXJhbSh1c2VfbXVsdGksIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9tdWx0aSwgInVzZSBwZXItQ1BVIHF1ZXVlcyIpOwotI2VuZGlmCitzdGF0aWMgaW50IGludF9tb2RlOworbW9kdWxlX3BhcmFtKGludF9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kZSwgIiBGb3JjZSBpbnRlcnJ1cHQgbW9kZSAoMSBJTlQjeDsgMiBNU0kpIik7CisKK3N0YXRpYyBpbnQgcG9sbDsKK21vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwb2xsLCAiIFVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7CisKK3N0YXRpYyBpbnQgbXJycyA9IC0xOworbW9kdWxlX3BhcmFtKG1ycnMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1ycnMsICIgRm9yY2UgTWF4IFJlYWQgUmVxIFNpemUgKDAuLjMpIChmb3IgZGVidWcpIik7CisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiIERlZmF1bHQgZGVidWcgbXNnbGV2ZWwiKTsKKworc3RhdGljIGludCBsb2FkX2NvdW50WzNdOyAvKiAwLWNvbW1vbiwgMS1wb3J0MCwgMi1wb3J0MSAqLworCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJueDJ4X3dxOwogCiBlbnVtIGJueDJ4X2JvYXJkX3R5cGUgewpAQCAtMjEzLDcgKzIxNyw3IEBACiAJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKIAlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CiAKLQlEUChCTlgyWF9NU0dfT0ZGLCAiZG1hZTogb3Bjb2RlIDB4JTA4eFxuIgorCURQKEJOWDJYX01TR19PRkYsICJETUFFOiBvcGNvZGUgMHglMDh4XG4iCiAJICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCiAJCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgogCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCkBAIC0yMzQsNyArMjM4LDcgQEAKIAkJRFAoQk5YMlhfTVNHX09GRiwgIndiX2NvbXAgMHglMDh4XG4iLCAqd2JfY29tcCk7CiAKIAkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7CisJCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC0yODksNyArMjkzLDcgQEAKIAlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwogCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKIAotCURQKEJOWDJYX01TR19PRkYsICJkbWFlOiBvcGNvZGUgMHglMDh4XG4iCisJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKIAkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKIAkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCiAJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKQEAgLTMwNiw3ICszMTAsNyBAQAogCXdoaWxlICgqd2JfY29tcCAhPSBETUFFX0NPTVBfVkFMKSB7CiAKIAkJaWYgKCFjbnQpIHsKLQkJCUJOWDJYX0VSUigiZG1hZSB0aW1lb3V0IVxuIik7CisJCQlCTlgyWF9FUlIoIkRNQUUgdGltZW91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC00NjgsNyArNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X2Z3X2R1bXAoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgbWFyaywgb2Zmc2V0OwotCXUzMiBkYXRhWzldOworCV9fYmUzMiBkYXRhWzldOwogCWludCB3b3JkOwogCiAJbWFyayA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKyAweGYxMDQpOwpAQCAtNTAyLDgzICs1MDYsMTA0IEBACiAKIAlCTlgyWF9FUlIoImJlZ2luIGNyYXNoIGR1bXAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7Ci0KLQkJQk5YMlhfRVJSKCJxdWV1ZVslZF06IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgotCQkJICAiICB0eF9iZF9wcm9kKCV4KSAgdHhfYmRfY29ucygleCkgICp0eF9jb25zX3NiKCV4KVxuIiwKLQkJCSAgaSwgZnAtPnR4X3BrdF9wcm9kLCBmcC0+dHhfcGt0X2NvbnMsIGZwLT50eF9iZF9wcm9kLAotCQkJICBmcC0+dHhfYmRfY29ucywgbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIHJ4X2JkX3Byb2QoJXgpICByeF9iZF9jb25zKCV4KSIKLQkJCSAgIiAgKnJ4X2JkX2NvbnNfc2IoJXgpICByeF9jb21wX3Byb2QoJXgpIgotCQkJICAiICByeF9jb21wX2NvbnMoJXgpICAqcnhfY29uc19zYigleClcbiIsCi0JCQkgIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfYmRfY29ucywKLQkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9iZF9jb25zX3NiKSwgZnAtPnJ4X2NvbXBfcHJvZCwKLQkJCSAgZnAtPnJ4X2NvbXBfY29ucywgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSk7Ci0JCUJOWDJYX0VSUigiICAgICAgICAgIHJ4X3NnZV9wcm9kKCV4KSAgbGFzdF9tYXhfc2dlKCV4KSIKLQkJCSAgIiAgZnBfY19pZHgoJXgpICAqc2JfY19pZHgoJXgpICBmcF91X2lkeCgleCkiCi0JCQkgICIgICpzYl91X2lkeCgleCkgIGJkIGRhdGEoJXgsJXgpXG4iLAotCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsIGZwLT5mcF9jX2lkeCwKLQkJCSAgZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCwKLQkJCSAgZnAtPmZwX3VfaWR4LAotCQkJICBmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAotCQkJICBod19wcm9kcy0+cGFja2V0c19wcm9kLCBod19wcm9kcy0+YmRzX3Byb2QpOwotCi0JCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKLQkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXN0cnVjdCBzd190eF9iZCAqc3dfYmQgPSAmZnAtPnR4X2J1Zl9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoInBhY2tldFsleF09WyVwLCV4XVxuIiwgaiwKLQkJCQkgIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7Ci0JCX0KLQotCQlzdGFydCA9IFRYX0JEKGZwLT50eF9iZF9jb25zIC0gMTApOwotCQllbmQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyArIDI1NCk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqdHhfYmQgPSAodTMyICopJmZwLT50eF9kZXNjX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigidHhfYmRbJXhdPVsleDoleDoleDoleF1cbiIsCi0JCQkJICBqLCB0eF9iZFswXSwgdHhfYmRbMV0sIHR4X2JkWzJdLCB0eF9iZFszXSk7Ci0JCX0KLQotCQlzdGFydCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgLSAxMCk7Ci0JCWVuZCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgKyA1MDMpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnJ4X2JkID0gKHUzMiAqKSZmcC0+cnhfZGVzY19yaW5nW2pdOwotCQkJc3RydWN0IHN3X3J4X2JkICpzd19iZCA9ICZmcC0+cnhfYnVmX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigicnhfYmRbJXhdPVsleDoleF0gIHN3X2JkPVslcF1cbiIsCi0JCQkJICBqLCByeF9iZFsxXSwgcnhfYmRbMF0sIHN3X2JkLT5za2IpOwotCQl9Ci0KLQkJc3RhcnQgPSBSWF9TR0UoZnAtPnJ4X3NnZV9wcm9kKTsKLQkJZW5kID0gUlhfU0dFKGZwLT5sYXN0X21heF9zZ2UpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnJ4X3NnZSA9ICh1MzIgKikmZnAtPnJ4X3NnZV9yaW5nW2pdOwotCQkJc3RydWN0IHN3X3J4X3BhZ2UgKnN3X3BhZ2UgPSAmZnAtPnJ4X3BhZ2VfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJyeF9zZ2VbJXhdPVsleDoleF0gIHN3X3BhZ2U9WyVwXVxuIiwKLQkJCQkgIGosIHJ4X3NnZVsxXSwgcnhfc2dlWzBdLCBzd19wYWdlLT5wYWdlKTsKLQkJfQotCi0JCXN0YXJ0ID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgLSAxMCk7Ci0JCWVuZCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zICsgNTAzKTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICpjcWUgPSAodTMyICopJmZwLT5yeF9jb21wX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigiY3FlWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAotCQkJCSAgaiwgY3FlWzBdLCBjcWVbMV0sIGNxZVsyXSwgY3FlWzNdKTsKLQkJfQotCX0KLQorCS8qIEluZGljZXMgKi8KKwkvKiBDb21tb24gKi8KIAlCTlgyWF9FUlIoImRlZl9jX2lkeCgldSkgIGRlZl91X2lkeCgldSkgIGRlZl94X2lkeCgldSkiCiAJCSAgIiAgZGVmX3RfaWR4KCV1KSAgZGVmX2F0dF9pZHgoJXUpICBhdHRuX3N0YXRlKCV1KSIKIAkJICAiICBzcHFfcHJvZF9pZHgoJXUpXG4iLAogCQkgIGJwLT5kZWZfY19pZHgsIGJwLT5kZWZfdV9pZHgsIGJwLT5kZWZfeF9pZHgsIGJwLT5kZWZfdF9pZHgsCiAJCSAgYnAtPmRlZl9hdHRfaWR4LCBicC0+YXR0bl9zdGF0ZSwgYnAtPnNwcV9wcm9kX2lkeCk7CiAKKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCUJOWDJYX0VSUigiZnAlZDogcnhfYmRfcHJvZCgleCkgIHJ4X2JkX2NvbnMoJXgpIgorCQkJICAiICAqcnhfYmRfY29uc19zYigleCkgIHJ4X2NvbXBfcHJvZCgleCkiCisJCQkgICIgIHJ4X2NvbXBfY29ucygleCkgICpyeF9jb25zX3NiKCV4KVxuIiwKKwkJCSAgaSwgZnAtPnJ4X2JkX3Byb2QsIGZwLT5yeF9iZF9jb25zLAorCQkJICBsZTE2X3RvX2NwdSgqZnAtPnJ4X2JkX2NvbnNfc2IpLCBmcC0+cnhfY29tcF9wcm9kLAorCQkJICBmcC0+cnhfY29tcF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpKTsKKwkJQk5YMlhfRVJSKCIgICAgICByeF9zZ2VfcHJvZCgleCkgIGxhc3RfbWF4X3NnZSgleCkiCisJCQkgICIgIGZwX3VfaWR4KCV4KSAqc2JfdV9pZHgoJXgpXG4iLAorCQkJICBmcC0+cnhfc2dlX3Byb2QsIGZwLT5sYXN0X21heF9zZ2UsCisJCQkgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCX0KKworCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7CisKKwkJQk5YMlhfRVJSKCJmcCVkOiB0eF9wa3RfcHJvZCgleCkgIHR4X3BrdF9jb25zKCV4KSIKKwkJCSAgIiAgdHhfYmRfcHJvZCgleCkgIHR4X2JkX2NvbnMoJXgpICAqdHhfY29uc19zYigleClcbiIsCisJCQkgIGksIGZwLT50eF9wa3RfcHJvZCwgZnAtPnR4X3BrdF9jb25zLCBmcC0+dHhfYmRfcHJvZCwKKwkJCSAgZnAtPnR4X2JkX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikpOworCQlCTlgyWF9FUlIoIiAgICAgIGZwX2NfaWR4KCV4KSAgKnNiX2NfaWR4KCV4KSIKKwkJCSAgIiAgYmQgZGF0YSgleCwleClcbiIsIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkgIGZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCisJCQkgIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsIGh3X3Byb2RzLT5iZHNfcHJvZCk7CisJfQorCisJLyogUmluZ3MgKi8KKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJYX0JEKGogKyAxKSkgeworCQkJdTMyICpyeF9iZCA9ICh1MzIgKikmZnAtPnJ4X2Rlc2NfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9iZCAqc3dfYmQgPSAmZnAtPnJ4X2J1Zl9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X2JkWyV4XT1bJXg6JXhdICBzd19iZD1bJXBdXG4iLAorCQkJCSAgaSwgaiwgcnhfYmRbMV0sIHJ4X2JkWzBdLCBzd19iZC0+c2tiKTsKKwkJfQorCisJCXN0YXJ0ID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCk7CisJCWVuZCA9IFJYX1NHRShmcC0+bGFzdF9tYXhfc2dlKTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gUlhfU0dFKGogKyAxKSkgeworCQkJdTMyICpyeF9zZ2UgPSAodTMyICopJmZwLT5yeF9zZ2VfcmluZ1tqXTsKKwkJCXN0cnVjdCBzd19yeF9wYWdlICpzd19wYWdlID0gJmZwLT5yeF9wYWdlX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCisJCQkJICBpLCBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7CisJCX0KKworCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOworCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJDUV9CRChqICsgMSkpIHsKKwkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IGNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGksIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7CisJCX0KKwl9CisKKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKKwkJZW5kID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSArIDI0NSk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgeworCQkJc3RydWN0IHN3X3R4X2JkICpzd19iZCA9ICZmcC0+dHhfYnVmX3Jpbmdbal07CisKKwkJCUJOWDJYX0VSUigiZnAlZDogcGFja2V0WyV4XT1bJXAsJXhdXG4iLAorCQkJCSAgaSwgaiwgc3dfYmQtPnNrYiwgc3dfYmQtPmZpcnN0X2JkKTsKKwkJfQorCisJCXN0YXJ0ID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgLSAxMCk7CisJCWVuZCA9IFRYX0JEKGZwLT50eF9iZF9jb25zICsgMjU0KTsKKwkJZm9yIChqID0gc3RhcnQ7IGogIT0gZW5kOyBqID0gVFhfQkQoaiArIDEpKSB7CisJCQl1MzIgKnR4X2JkID0gKHUzMiAqKSZmcC0+dHhfZGVzY19yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHR4X2JkWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAorCQkJCSAgaSwgaiwgdHhfYmRbMF0sIHR4X2JkWzFdLCB0eF9iZFsyXSwgdHhfYmRbM10pOworCQl9CisJfQorCiAJYm54MnhfZndfZHVtcChicCk7CiAJYm54MnhfbWNfYXNzZXJ0KGJwKTsKIAlCTlgyWF9FUlIoImVuZCBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKQEAgLTU5MCwzNyArNjE1LDQ0IEBACiAJdTMyIGFkZHIgPSBwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wOwogCXUzMiB2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOwogCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKKwlpbnQgbXNpID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSA/IDEgOiAwOwogCiAJaWYgKG1zaXgpIHsKLQkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wOworCQl2YWwgJj0gfihIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJCSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCk7CiAJCXZhbCB8PSAoSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKKwl9IGVsc2UgaWYgKG1zaSkgeworCQl2YWwgJj0gfkhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wOworCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAorCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKIAl9IGVsc2UgewogCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19TSU5HTEVfSVNSX0VOXzAgfAogCQkJSENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19JTlRfTElORV9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wKTsKIAotCQlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBNU0ktWCAlZFxuIiwKLQkJICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKwkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKKwkJICAgdmFsLCBwb3J0LCBhZGRyKTsKIAogCQlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAKIAkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzA7CiAJfQogCi0JRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgTVNJLVggJWRcbiIsCi0JICAgdmFsLCBwb3J0LCBhZGRyLCBtc2l4KTsKKwlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpICBtb2RlICVzXG4iLAorCSAgIHZhbCwgcG9ydCwgYWRkciwgKG1zaXggPyAiTVNJLVgiIDogKG1zaSA/ICJNU0kiIDogIklOVHgiKSkpOwogCiAJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewogCQkvKiBpbml0IGxlYWRpbmcvdHJhaWxpbmcgZWRnZSAqLwogCQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCQl2YWwgPSAoMHhmZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CisJCQl2YWwgPSAoMHhlZTBmIHwgKDEgPDwgKEJQX0UxSFZOKGJwKSArIDQpKSk7CiAJCQlpZiAoYnAtPnBvcnQucG1mKQotCQkJCS8qIGVuYWJsZSBuaWcgYXR0ZW50aW9uICovCi0JCQkJdmFsIHw9IDB4MDEwMDsKKwkJCQkvKiBlbmFibGUgbmlnIGFuZCBncGlvMyBhdHRlbnRpb24gKi8KKwkJCQl2YWwgfD0gMHgxMTAwOwogCQl9IGVsc2UKIAkJCXZhbCA9IDB4ZmZmZjsKIApAQCAtNjQzLDE1ICs2NzUsMTkgQEAKIAlEUChORVRJRl9NU0dfSU5UUiwgIndyaXRlICV4IHRvIEhDICVkIChhZGRyIDB4JXgpXG4iLAogCSAgIHZhbCwgcG9ydCwgYWRkcik7CiAKKwkvKiBmbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKIAlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CiAJaWYgKFJFR19SRChicCwgYWRkcikgIT0gdmFsKQogCQlCTlgyWF9FUlIoIkJVRyEgcHJvcGVyIHZhbCBub3QgcmVhZCBmcm9tIElHVSFcbiIpOworCiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2ludF9kaXNhYmxlX3N5bmMoc3RydWN0IGJueDJ4ICpicCwgaW50IGRpc2FibGVfaHcpCiB7CiAJaW50IG1zaXggPSAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSA/IDEgOiAwOwotCWludCBpOworCWludCBpLCBvZmZzZXQ7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyAqLwogCWF0b21pY19pbmMoJmJwLT5pbnRyX3NlbSk7CkBAIC02NjEsMTEgKzY5NywxMCBAQAogCiAJLyogbWFrZSBzdXJlIGFsbCBJU1JzIGFyZSBkb25lICovCiAJaWYgKG1zaXgpIHsKKwkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlWzBdLnZlY3Rvcik7CisJCW9mZnNldCA9IDE7CiAJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQotCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2ldLnZlY3Rvcik7Ci0KLQkJLyogb25lIG1vcmUgZm9yIHRoZSBTbG93IFBhdGggSVJRICovCi0JCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpXS52ZWN0b3IpOworCQkJc3luY2hyb25pemVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3Rvcik7CiAJfSBlbHNlCiAJCXN5bmNocm9uaXplX2lycShicC0+cGRldi0+aXJxKTsKIApAQCAtNzQ4LDcgKzc4Myw2IEBACiAJLyogVGVsbCBjb21waWxlciB0aGF0IGNvbnN1bWVyIGFuZCBwcm9kdWNlciBjYW4gY2hhbmdlICovCiAJYmFycmllcigpOwogCXJldHVybiAoZnAtPnR4X3BrdF9wcm9kICE9IGZwLT50eF9wa3RfY29ucyk7Ci0KIH0KIAogLyogZnJlZSBza2IgaW4gdGhlIHBhY2tldCByaW5nIGF0IHBvcyBpZHgKQEAgLTg0Miw5ICs4NzYsMTAgQEAKIAlyZXR1cm4gKHMxNikoZnAtPmJwLT50eF9yaW5nX3NpemUpIC0gdXNlZDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIGludCB3b3JrKQorc3RhdGljIHZvaWQgYm54MnhfdHhfaW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJdTE2IGh3X2NvbnMsIHN3X2NvbnMsIGJkX2NvbnMgPSBmcC0+dHhfYmRfY29uczsKIAlpbnQgZG9uZSA9IDA7CiAKQEAgLTg1Myw2ICs4ODgsNyBAQAogCQlyZXR1cm47CiAjZW5kaWYKIAorCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoYnAtPmRldiwgZnAtPmluZGV4KTsKIAlod19jb25zID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKIAlzd19jb25zID0gZnAtPnR4X3BrdF9jb25zOwogCkBAIC04NzQsMzIgKzkxMCwzMCBAQAogCQliZF9jb25zID0gYm54MnhfZnJlZV90eF9wa3QoYnAsIGZwLCBwa3RfY29ucyk7CiAJCXN3X2NvbnMrKzsKIAkJZG9uZSsrOwotCi0JCWlmIChkb25lID09IHdvcmspCi0JCQlicmVhazsKIAl9CiAKIAlmcC0+dHhfcGt0X2NvbnMgPSBzd19jb25zOwogCWZwLT50eF9iZF9jb25zID0gYmRfY29uczsKIAotCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBzdGFydF94bWl0KCkKLQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCi0JICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdCBzdGFydF94bWl0KCkKLQkgKiB3aWxsIG1pc3MgaXQgYW5kIGNhdXNlIHRoZSBxdWV1ZSB0byBiZSBzdG9wcGVkIGZvcmV2ZXIuCi0JICovCi0Jc21wX21iKCk7Ci0KIAkvKiBUQkQgbmVlZCBhIHRocmVzaD8gKi8KLQlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSkpIHsKKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSkgewogCi0JCW5ldGlmX3R4X2xvY2soYnAtPmRldik7CisJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgJiYKKwkJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQorCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCisJCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKKwkJICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKKwkJICogZm9yZXZlci4KKwkJICovCisJCXNtcF9tYigpOworCisJCWlmICgobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSAmJgogCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSAmJgogCQkgICAgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykpCi0JCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOworCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCi0JCW5ldGlmX3R4X3VubG9jayhicC0+ZGV2KTsKKwkJX19uZXRpZl90eF91bmxvY2sodHhxKTsKIAl9CiB9CiAKQEAgLTkxMywxMiArOTQ3LDEyIEBACiAKIAlEUChCTlgyWF9NU0dfU1AsCiAJICAgImZwICVkICBjaWQgJWQgIGdvdCByYW1yb2QgIyVkICBzdGF0ZSBpcyAleCAgdHlwZSBpcyAlZFxuIiwKLQkgICBGUF9JRFgoZnApLCBjaWQsIGNvbW1hbmQsIGJwLT5zdGF0ZSwKKwkgICBmcC0+aW5kZXgsIGNpZCwgY29tbWFuZCwgYnAtPnN0YXRlLAogCSAgIHJyX2NxZS0+cmFtcm9kX2NxZS5yYW1yb2RfdHlwZSk7CiAKIAlicC0+c3BxX2xlZnQrKzsKIAotCWlmIChGUF9JRFgoZnApKSB7CisJaWYgKGZwLT5pbmRleCkgewogCQlzd2l0Y2ggKGNvbW1hbmQgfCBmcC0+c3RhdGUpIHsKIAkJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQIHwKIAkJCQkJCUJOWDJYX0ZQX1NUQVRFX09QRU5JTkcpOgpAQCAtMTA3OCw4ICsxMTEyLDcgQEAKIAogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+cGRldiwKIAkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoY29uc19yeF9idWYsIG1hcHBpbmcpLAotCQkJCSAgICAgICBicC0+cnhfb2Zmc2V0ICsgUlhfQ09QWV9USFJFU0gsCi0JCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJICAgICAgIFJYX0NPUFlfVEhSRVNILCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJcHJvZF9yeF9idWYtPnNrYiA9IGNvbnNfcnhfYnVmLT5za2I7CiAJcGNpX3VubWFwX2FkZHJfc2V0KHByb2RfcnhfYnVmLCBtYXBwaW5nLApAQCAtMTI2MCw3ICsxMjkzLDcgQEAKIAkJICAgd2hlcmUgd2UgYXJlIGFuZCBkcm9wIHRoZSB3aG9sZSBwYWNrZXQgKi8KIAkJZXJyID0gYm54MnhfYWxsb2Nfcnhfc2dlKGJwLCBmcCwgc2dlX2lkeCk7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTEzNjUsNyArMTM5OCw3IEBACiAJCS8qIGVsc2UgZHJvcCB0aGUgcGFja2V0IGFuZCBrZWVwIHRoZSBidWZmZXIgaW4gdGhlIGJpbiAqLwogCQlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAogCQkgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBza2IgLSBkcm9wcGluZyBwYWNrZXQhXG4iKTsKLQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJfQogCiAJZnAtPnRwYV9zdGF0ZVtxdWV1ZV0gPSBCTlgyWF9UUEFfU1RPUDsKQEAgLTEzNzYsNyArMTQwOSw3IEBACiAJCQkJCXUxNiBiZF9wcm9kLCB1MTYgcnhfY29tcF9wcm9kLAogCQkJCQl1MTYgcnhfc2dlX3Byb2QpCiB7Ci0Jc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzIHJ4X3Byb2RzID0gezB9OworCXN0cnVjdCB1c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyByeF9wcm9kcyA9IHswfTsKIAlpbnQgaTsKIAogCS8qIFVwZGF0ZSBwcm9kdWNlcnMgKi8KQEAgLTEzOTQsMTYgKzE0MjcsMTYgQEAKIAkgKi8KIAl3bWIoKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCi0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFRTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIEZQX0NMX0lEKGZwKSkgKyBpKjQsCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wcm9kdWNlcnMpLzQ7IGkrKykKKwkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkgICAgICAgVVNUT1JNX1JYX1BST0RTX09GRlNFVChCUF9QT1JUKGJwKSwgZnAtPmNsX2lkKSArIGkqNCwKIAkJICAgICAgICgodTMyICopJnJ4X3Byb2RzKVtpXSk7CiAKIAltbWlvd2IoKTsgLyoga2VlcCBwcm9kIHVwZGF0ZXMgb3JkZXJlZCAqLwogCiAJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKLQkgICAiV3JvdGU6IGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKLQkgICBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKKwkgICAicXVldWVbJWRdOiAgd3JvdGUgIGJkX3Byb2QgJXUgIGNxZV9wcm9kICV1ICBzZ2VfcHJvZCAldVxuIiwKKwkgICBmcC0+aW5kZXgsIGJkX3Byb2QsIHJ4X2NvbXBfcHJvZCwgcnhfc2dlX3Byb2QpOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3J4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgYnVkZ2V0KQpAQCAtMTQzNyw3ICsxNDcwLDcgQEAKIAogCURQKE5FVElGX01TR19SWF9TVEFUVVMsCiAJICAgInF1ZXVlWyVkXTogIGh3X2NvbXBfY29ucyAldSAgc3dfY29tcF9jb25zICV1XG4iLAotCSAgIEZQX0lEWChmcCksIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKKwkgICBmcC0+aW5kZXgsIGh3X2NvbXBfY29ucywgc3dfY29tcF9jb25zKTsKIAogCXdoaWxlIChzd19jb21wX2NvbnMgIT0gaHdfY29tcF9jb25zKSB7CiAJCXN0cnVjdCBzd19yeF9iZCAqcnhfYnVmID0gTlVMTDsKQEAgLTE1MjcsNyArMTU2MCw3IEBACiAJCQkJRFAoTkVUSUZfTVNHX1JYX0VSUiwKIAkJCQkgICAiRVJST1IgIGZsYWdzICV4ICByeCBwYWNrZXQgJXVcbiIsCiAJCQkJICAgY3FlX2ZwX2ZsYWdzLCBzd19jb21wX2NvbnMpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfZXJyX2Rpc2NhcmRfcGt0Kys7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X2Vycl9kaXNjYXJkX3BrdCsrOwogCQkJCWdvdG8gcmV1c2Vfcng7CiAJCQl9CiAKQEAgLTE1NDQsNyArMTU3Nyw3IEBACiAJCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJCSAgICJFUlJPUiAgcGFja2V0IGRyb3BwZWQgIgogCQkJCQkgICAiYmVjYXVzZSBvZiBhbGxvYyBmYWlsdXJlXG4iKTsKLQkJCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQkJCWdvdG8gcmV1c2Vfcng7CiAJCQkJfQogCkBAIC0xNTcwLDcgKzE2MDMsNyBAQAogCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJICAgIkVSUk9SICBwYWNrZXQgZHJvcHBlZCBiZWNhdXNlICIKIAkJCQkgICAib2YgYWxsb2MgZmFpbHVyZVxuIik7Ci0JCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIHJldXNlX3J4OgogCQkJCWJueDJ4X3JldXNlX3J4X3NrYihmcCwgc2tiLCBiZF9jb25zLCBiZF9wcm9kKTsKIAkJCQlnb3RvIG5leHRfcng7CkBAIC0xNTgzLDEwICsxNjE2LDExIEBACiAJCQkJaWYgKGxpa2VseShCTlgyWF9SWF9DU1VNX09LKGNxZSkpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKLQkJCQkJYnAtPmV0aF9zdGF0cy5od19jc3VtX2VycisrOworCQkJCQlmcC0+ZXRoX3Ffc3RhdHMuaHdfY3N1bV9lcnIrKzsKIAkJCX0KIAkJfQogCisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBmcC0+aW5kZXgpOwogI2lmZGVmIEJDTV9WTEFOCiAJCWlmICgoYnAtPnZsZ3JwICE9IE5VTEwpICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpICYmCiAJCSAgICAobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYKQEAgLTE2MzIsNyArMTY2Niw3IEBACiB7CiAJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9IGZwX2Nvb2tpZTsKIAlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCBpbmRleCA9IEZQX0lEWChmcCk7CisJaW50IGluZGV4ID0gZnAtPmluZGV4OwogCiAJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGVkICovCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pICE9IDApKSB7CkBAIC0xNjQxLDggKzE2NzUsOCBAQAogCX0KIAogCURQKEJOWDJYX01TR19GUCwgImdvdCBhbiBNU0ktWCBpbnRlcnJ1cHQgb24gSURYOlNCIFslZDolZF1cbiIsCi0JICAgaW5kZXgsIEZQX1NCX0lEKGZwKSk7Ci0JYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIFVTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKwkgICBpbmRleCwgZnAtPnNiX2lkKTsKKwlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgVVNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQpAQCAtMTY1NCwxNSArMTY4OCwxNCBAQAogCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CisJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBibngyeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldl9pbnN0YW5jZSk7CiAJdTE2IHN0YXR1cyA9IGJueDJ4X2Fja19pbnQoYnApOwogCXUxNiBtYXNrOwogCkBAIC0xNjcxLDcgKzE3MDQsNyBAQAogCQlEUChORVRJRl9NU0dfSU5UUiwgIm5vdCBvdXIgaW50ZXJydXB0IVxuIik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0JRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7CisJRFAoTkVUSUZfTVNHX0lOVFIsICJnb3QgYW4gaW50ZXJydXB0ICBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAogCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewpAQCAtMTY5Myw3ICsxNzI2LDcgQEAKIAkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwogCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CisJCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CiAKIAkJc3RhdHVzICY9IH5tYXNrOwogCX0KQEAgLTE4MDYsMjYgKzE4MzksNTAgQEAKIC8qIEhXIExvY2sgZm9yIHNoYXJlZCBkdWFsIHBvcnQgUEhZcyAqLwogc3RhdGljIHZvaWQgYm54MnhfYWNxdWlyZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCiAJbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKIAotCWlmICgoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpIHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpCi0JCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCisJCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKQogewotCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCi0JaWYgKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkKLQkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFXzgwNzJfTURJTyk7CisJaWYgKGJwLT5wb3J0Lm5lZWRfaHdfbG9jaykKKwkJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX01ESU8pOwogCiAJbXV0ZXhfdW5sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOwogfQogCitpbnQgYm54MnhfZ2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisJaW50IHZhbHVlOworCisJaWYgKGdwaW9fbnVtID4gTUlTQ19SRUdJU1RFUlNfR1BJT18zKSB7CisJCUJOWDJYX0VSUigiSW52YWxpZCBHUElPICVkXG4iLCBncGlvX251bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlYWQgR1BJTyB2YWx1ZSAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPKTsKKworCS8qIGdldCB0aGUgcmVxdWVzdGVkIHBpbiB2YWx1ZSAqLworCWlmICgoZ3Bpb19yZWcgJiBncGlvX21hc2spID09IGdwaW9fbWFzaykKKwkJdmFsdWUgPSAxOworCWVsc2UKKwkJdmFsdWUgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJwaW4gJWQgIHZhbHVlIDB4JXhcbiIsIGdwaW9fbnVtLCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKIGludCBibngyeF9zZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KQogewogCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KQEAgLTE4NzksNiArMTkzNiw1MiBAQAogCXJldHVybiAwOwogfQogCitpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpCit7CisJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgc3dhcCByZWdpc3RlciBpcyBzZXQgYW5kIGFjdGl2ZSAqLworCWludCBncGlvX3BvcnQgPSAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkgJiYKKwkJCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpKSBeIHBvcnQ7CisJaW50IGdwaW9fc2hpZnQgPSBncGlvX251bSArCisJCQkoZ3Bpb19wb3J0ID8gTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUIDogMCk7CisJdTMyIGdwaW9fbWFzayA9ICgxIDw8IGdwaW9fc2hpZnQpOworCXUzMiBncGlvX3JlZzsKKworCWlmIChncGlvX251bSA+IE1JU0NfUkVHSVNURVJTX0dQSU9fMykgeworCQlCTlgyWF9FUlIoIkludmFsaWQgR1BJTyAlZFxuIiwgZ3Bpb19udW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisJLyogcmVhZCBHUElPIGludCAqLworCWdwaW9fcmVnID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPX0lOVCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFI6CisJCURQKE5FVElGX01TR19MSU5LLCAiQ2xlYXIgR1BJTyBJTlQgJWQgKHNoaWZ0ICVkKSAtPiAiCisJCQkJICAgIm91dHB1dCBsb3dcbiIsIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgU0VUIGFuZCBzZXQgQ0xSICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9DTFJfUE9TKTsKKwkJYnJlYWs7CisKKwljYXNlIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQ6CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0IEdQSU8gSU5UICVkIChzaGlmdCAlZCkgLT4gIgorCQkJCSAgICJvdXRwdXQgaGlnaFxuIiwgZ3Bpb19udW0sIGdwaW9fc2hpZnQpOworCQkvKiBjbGVhciBDTFIgYW5kIHNldCBTRVQgKi8KKwkJZ3Bpb19yZWcgJj0gfihncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyk7CisJCWdwaW9fcmVnIHw9ICAoZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX1NFVF9QT1MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCVJFR19XUihicCwgTUlTQ19SRUdfR1BJT19JTlQsIGdwaW9fcmVnKTsKKwlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBibngyeF9zZXRfc3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc3Bpb19udW0sIHUzMiBtb2RlKQogewogCXUzMiBzcGlvX21hc2sgPSAoMSA8PCBzcGlvX251bSk7CkBAIC0xOTMzLDEzICsyMDM2LDE2IEBACiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKIAkJCQkJICBBRFZFUlRJU0VEX1BhdXNlKTsKIAkJYnJlYWs7CisKIAljYXNlIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWX1BBVVNFX0JPVEg6CiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nIHw9IChBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgQURWRVJUSVNFRF9QYXVzZSk7CiAJCWJyZWFrOworCiAJY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9BU1lNTUVUUklDOgogCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX0FzeW1fUGF1c2UgfAogCQkJCQkgIEFEVkVSVElTRURfUGF1c2UpOwpAQCAtMTk2NCw3ICsyMDcwLDggQEAKIAkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICE9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FKSB7CiAJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpIHsKIAkJCQlwcmludGsoIiwgcmVjZWl2ZSAiKTsKLQkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYKKwkJCQkgICAgQk5YMlhfRkxPV19DVFJMX1RYKQogCQkJCQlwcmludGsoIiYgdHJhbnNtaXQgIik7CiAJCQl9IGVsc2UgewogCQkJCXByaW50aygiLCB0cmFuc21pdCAiKTsKQEAgLTE5NzksNyArMjA4Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdTggYm54MnhfaW5pdGlhbF9waHlfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHU4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSkKIHsKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQl1OCByYzsKQEAgLTE5OTUsMTggKzIxMDIsMjQgQEAKIAkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmNfYXV0b19hZHYgPSBCTlgyWF9GTE9XX0NUUkxfQk9USDsKIAogCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKworCQlpZiAobG9hZF9tb2RlID09IExPQURfRElBRykKKwkJCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfWEdYU18xMDsKKwogCQlyYyA9IGJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKKwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAogCQlibngyeF9jYWxjX2ZjX2FkdihicCk7CiAKLQkJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkKKwkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApICYmIGJwLT5saW5rX3ZhcnMubGlua191cCkgeworCQkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9MSU5LX1VQKTsKIAkJCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKLQorCQl9CiAKIAkJcmV0dXJuIHJjOwogCX0KLQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCBpbml0aWFsaXppbmcgbGlua1xuIik7CisJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCBpbml0aWFsaXplIGxpbmtcbiIpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0yMDE5LDE3ICsyMTMyLDE3IEBACiAKIAkJYm54MnhfY2FsY19mY19hZHYoYnApOwogCX0gZWxzZQotCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLW5vdCBzZXR0aW5nIGxpbmtcbiIpOworCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHNldCBsaW5rXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfX2xpbmtfcmVzZXQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisJCWJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsIDEpOwogCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAl9IGVsc2UKLQkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC1ub3QgcmVzZXR0aW5nIGxpbmtcbiIpOworCQlCTlgyWF9FUlIoIkJvb3Rjb2RlIGlzIG1pc3NpbmcgLSBjYW4gbm90IHJlc2V0IGxpbmtcbiIpOwogfQogCiBzdGF0aWMgdTggYm54MnhfbGlua190ZXN0KHN0cnVjdCBibngyeCAqYnApCkBAIC0yMDQzLDExOSArMjE1Niw0MiBAQAogCXJldHVybiByYzsKIH0KIAotLyogQ2FsY3VsYXRlcyB0aGUgc3VtIG9mIHZuX21pbl9yYXRlcy4KLSAgIEl0J3MgbmVlZGVkIGZvciBmdXJ0aGVyIG5vcm1hbGl6aW5nIG9mIHRoZSBtaW5fcmF0ZXMuCi0KLSAgIFJldHVybnM6Ci0gICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMKLSAgICAgICBvcgotICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCi0gICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaXJuZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCi0gICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwKLSAgICAgYmUgc2V0IHRvIDEuCi0gKi8KLXN0YXRpYyB1MzIgYm54MnhfY2FsY192bl93c3VtKHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3BvcnRfbWlubWF4KHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IGksIHBvcnQgPSBCUF9QT1JUKGJwKTsKLQl1MzIgd3N1bSA9IDA7Ci0JaW50IGFsbF96ZXJvID0gMTsKKwl1MzIgcl9wYXJhbSA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCAvIDg7CisJdTMyIGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjOworCXUzMiB0X2ZhaXI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgRTFIVk5fTUFYOyBpKyspIHsKLQkJdTMyIHZuX2NmZyA9Ci0JCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnWzIqaSArIHBvcnRdLmNvbmZpZyk7Ci0JCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+Ci0JCQkJICAgICBGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOwotCQlpZiAoISh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpKSB7Ci0JCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KLQkJCWlmICghdm5fbWluX3JhdGUpCi0JCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7Ci0JCQllbHNlCi0JCQkJYWxsX3plcm8gPSAwOworCW1lbXNldCgmKGJwLT5jbW5nLnJzX3ZhcnMpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl9wb3J0KSk7CisJbWVtc2V0KCYoYnAtPmNtbmcuZmFpcl92YXJzKSwgMCwgc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSk7CiAKLQkJCXdzdW0gKz0gdm5fbWluX3JhdGU7Ci0JCX0KLQl9CisJLyogMTAwIHVzZWMgaW4gU0RNIHRpY2tzID0gMjUgc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfcGVyaW9kaWNfdGltZW91dCA9IFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQyAvIDQ7CiAKLQkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgRkFJUk5FU1MgKi8KLQlpZiAoYWxsX3plcm8pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHdzdW07Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfcG9ydF9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkgICBpbnQgZW5fZm5lc3MsCi0JCQkJICAgdTE2IHBvcnRfcmF0ZSwKLQkJCQkgICBzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgKm1fY21uZ19wb3J0KQotewotCXUzMiByX3BhcmFtID0gcG9ydF9yYXRlIC8gODsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpOwotCi0JbWVtc2V0KG1fY21uZ19wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSk7Ci0KLQkvKiBFbmFibGUgbWlubWF4IG9ubHkgaWYgd2UgYXJlIGluIGUxaG1mIG1vZGUgKi8KLQlpZiAoSVNfRTFITUYoYnApKSB7Ci0JCXUzMiBmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYzsKLQkJdTMyIHRfZmFpcjsKLQotCQkvKiBFbmFibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuY21uZ192bl9lbmFibGUgPSAxOwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MuZmFpcm5lc3NfZW5hYmxlID0gZW5fZm5lc3MgPyAxIDogMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLnJhdGVfc2hhcGluZ19lbmFibGUgPSAxOwotCi0JCWlmICghZW5fZm5lc3MpCi0JCQlEUChORVRJRl9NU0dfSUZVUCwgIkFsbCBNSU4gdmFsdWVzIGFyZSB6ZXJvZXMiCi0JCQkgICAiICBmYWlybmVzcyB3aWxsIGJlIGRpc2FibGVkXG4iKTsKLQotCQkvKiAxMDAgdXNlYyBpbiBTRE0gdGlja3MgPSAyNSBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JCW1fY21uZ19wb3J0LT5yc192YXJzLnJzX3BlcmlvZGljX3RpbWVvdXQgPQotCQkJCQkJUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDIC8gNDsKLQotCQkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggbm8gdGltZXIgYXJtaW5nIHdpbGwgb2NjdXIKLQkJICAgMS4yNSBjb2VmZmljaWVudCBpcyBmb3IgdGhlIHRocmVzaG9sZCB0byBiZSBhIGxpdHRsZSBiaWdnZXIKLQkJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLwotCQltX2NtbmdfcG9ydC0+cnNfdmFycy5yc190aHJlc2hvbGQgPQorCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBubyB0aW1lciBhcm1pbmcgd2lsbCBvY2N1cgorCSAgIDEuMjUgY29lZmZpY2llbnQgaXMgZm9yIHRoZSB0aHJlc2hvbGQgdG8gYmUgYSBsaXR0bGUgYmlnZ2VyCisJICAgdGhhbiB0aGUgcmVhbCB0aW1lLCB0byBjb21wZW5zYXRlIGZvciB0aW1lciBpbi1hY2N1cmFjeSAqLworCWJwLT5jbW5nLnJzX3ZhcnMucnNfdGhyZXNob2xkID0KIAkJCQkoUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDICogcl9wYXJhbSAqIDUpIC8gNDsKIAotCQkvKiByZXNvbHV0aW9uIG9mIGZhaXJuZXNzIHRpbWVyICovCi0JCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjID0gUU1fQVJCX0JZVEVTIC8gcl9wYXJhbTsKLQkJLyogZm9yIDEwRyBpdCBpcyAxMDAwdXNlYy4gZm9yIDFHIGl0IGlzIDEwMDAwdXNlYy4gKi8KLQkJdF9mYWlyID0gVF9GQUlSX0NPRUYgLyBwb3J0X3JhdGU7CisJLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyB0aW1lciAqLworCWZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjID0gUU1fQVJCX0JZVEVTIC8gcl9wYXJhbTsKKwkvKiBmb3IgMTBHIGl0IGlzIDEwMDB1c2VjLiBmb3IgMUcgaXQgaXMgMTAwMDB1c2VjLiAqLworCXRfZmFpciA9IFRfRkFJUl9DT0VGIC8gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwogCi0JCS8qIHRoaXMgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB3b24ndCBhcm0KLQkJICAgdGhlIHRpbWVyIGFueW1vcmUgKi8KLQkJbV9jbW5nX3BvcnQtPmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCA9IFFNX0FSQl9CWVRFUzsKKwkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggd2Ugd29uJ3QgYXJtIHRoZSB0aW1lciBhbnltb3JlICovCisJYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkID0gUU1fQVJCX0JZVEVTOwogCi0JCS8qIHdlIG11bHRpcGx5IGJ5IDFlMy84IHRvIGdldCBieXRlcy9tc2VjLgotCQkgICBXZSBkb24ndCB3YW50IHRoZSBjcmVkaXRzIHRvIHBhc3MgYSBjcmVkaXQKLQkJICAgb2YgdGhlIFRfRkFJUipGQUlSX01FTSAoYWxnb3JpdGhtIHJlc29sdXRpb24pICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMudXBwZXJfYm91bmQgPQotCQkJCQkJcl9wYXJhbSAqIHRfZmFpciAqIEZBSVJfTUVNOwotCQkvKiBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9Ci0JCQkJCQlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAvIDQ7Ci0KLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgKi8KLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmNtbmdfdm5fZW5hYmxlID0gMDsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmZhaXJuZXNzX2VuYWJsZSA9IDA7Ci0JCW1fY21uZ19wb3J0LT5mbGFncy5yYXRlX3NoYXBpbmdfZW5hYmxlID0gMDsKLQotCQlEUChORVRJRl9NU0dfSUZVUCwKLQkJICAgIlNpbmdsZSBmdW5jdGlvbiBtb2RlICBtaW5tYXggd2lsbCBiZSBkaXNhYmxlZFxuIik7Ci0JfQotCi0JLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQotCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkgKiA0LAotCQkgICAgICAgKCh1MzIgKikobV9jbW5nX3BvcnQpKVtpXSk7CisJLyogd2UgbXVsdGlwbHkgYnkgMWUzLzggdG8gZ2V0IGJ5dGVzL21zZWMuCisJICAgV2UgZG9uJ3Qgd2FudCB0aGUgY3JlZGl0cyB0byBwYXNzIGEgY3JlZGl0CisJICAgb2YgdGhlIHRfZmFpcipGQUlSX01FTSAoYWxnb3JpdGhtIHJlc29sdXRpb24pICovCisJYnAtPmNtbmcuZmFpcl92YXJzLnVwcGVyX2JvdW5kID0gcl9wYXJhbSAqIHRfZmFpciAqIEZBSVJfTUVNOworCS8qIHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KKwlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9IGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjIC8gNDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfaW5pdF92bl9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMsCi0JCQkJICAgdTMyIHdzdW0sIHUxNiBwb3J0X3JhdGUsCi0JCQkJIHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCAqbV9jbW5nX3BvcnQpCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3ZuX21pbm1heChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKIHsKIAlzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuIG1fcnNfdm47CiAJc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuIG1fZmFpcl92bjsKQEAgLTIxNzEsMTcgKzIyMDcsMTggQEAKIAl9IGVsc2UgewogCQl2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+CiAJCQkJRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQkJLyogSWYgRkFJUk5FU1MgaXMgZW5hYmxlZCAobm90IGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9lcykgYW5kCisJCS8qIElmIGZhaXJuZXNzIGlzIGVuYWJsZWQgKG5vdCBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvZXMpIGFuZAogCQkgICBpZiBjdXJyZW50IG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMS4KIAkJICAgVGhpcyBpcyBhIHJlcXVpcmVtZW50IG9mIHRoZSBhbGdvcml0aG0uICovCi0JCWlmICgodm5fbWluX3JhdGUgPT0gMCkgJiYgd3N1bSkKKwkJaWYgKGJwLT52bl93ZWlnaHRfc3VtICYmICh2bl9taW5fcmF0ZSA9PSAwKSkKIAkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwogCQl2bl9tYXhfcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+CiAJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKIAl9CiAKLQlEUChORVRJRl9NU0dfSUZVUCwgImZ1bmMgJWQ6IHZuX21pbl9yYXRlPSVkICB2bl9tYXhfcmF0ZT0lZCAgIgotCSAgICJ3c3VtPSVkXG4iLCBmdW5jLCB2bl9taW5fcmF0ZSwgdm5fbWF4X3JhdGUsIHdzdW0pOworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJmdW5jICVkOiB2bl9taW5fcmF0ZT0lZCAgdm5fbWF4X3JhdGU9JWQgIHZuX3dlaWdodF9zdW09JWRcbiIsCisJICAgZnVuYywgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlLCBicC0+dm5fd2VpZ2h0X3N1bSk7CiAKIAltZW1zZXQoJm1fcnNfdm4sIDAsIHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKSk7CiAJbWVtc2V0KCZtX2ZhaXJfdm4sIDAsIHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4pKTsKQEAgLTIxOTMsNTUgKzIyMzAsMjAgQEAKIAltX3JzX3ZuLnZuX2NvdW50ZXIucXVvdGEgPQogCQkJCSh2bl9tYXhfcmF0ZSAqIFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQykgLyA4OwogCi0jaWZkZWYgQk5YMlhfUEVSX1BST1RfUU9TCi0JLyogcGVyIHByb3RvY29sIGNvdW50ZXIgKi8KLQlmb3IgKHByb3RvY29sID0gMDsgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKSB7Ci0JCS8qIG1heGltYWwgTWJwcyBmb3IgdGhpcyBwcm90b2NvbCAqLwotCQltX3JzX3ZuLnByb3RvY29sX2NvdW50ZXJzW3Byb3RvY29sXS5yYXRlID0KLQkJCQkJCXByb3RvY29sX21heF9yYXRlW3Byb3RvY29sXTsKLQkJLyogdGhlIHF1b3RhIGluIGVhY2ggdGltZXIgcGVyaW9kIC0KLQkJICAgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkIGluIHRoaXMgcGVyaW9kICovCi0JCW1fcnNfdm4ucHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnF1b3RhID0KLQkJCSh1MzIpKHJzX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAqCi0JCQkgICgoZG91YmxlKW1fcnNfdm4uCi0JCQkJICAgcHJvdG9jb2xfY291bnRlcnNbcHJvdG9jb2xdLnJhdGUvOCkpOwotCX0KLSNlbmRpZgotCi0JaWYgKHdzdW0pIHsKKwlpZiAoYnAtPnZuX3dlaWdodF9zdW0pIHsKIAkJLyogY3JlZGl0IGZvciBlYWNoIHBlcmlvZCBvZiB0aGUgZmFpcm5lc3MgYWxnb3JpdGhtOgogCQkgICBudW1iZXIgb2YgYnl0ZXMgaW4gVF9GQUlSICh0aGUgdm4gc2hhcmUgdGhlIHBvcnQgcmF0ZSkuCi0JCSAgIHdzdW0gc2hvdWxkIG5vdCBiZSBsYXJnZXIgdGhhbiAxMDAwMCwgdGh1cwotCQkgICBUX0ZBSVJfQ09FRiAvICg4ICogd3N1bSkgd2lsbCBhbHdheXMgYmUgZ3JhdGVyIHRoYW4gemVybyAqLworCQkgICB2bl93ZWlnaHRfc3VtIHNob3VsZCBub3QgYmUgbGFyZ2VyIHRoYW4gMTAwMDAsIHRodXMKKwkJICAgVF9GQUlSX0NPRUYgLyAoOCAqIHZuX3dlaWdodF9zdW0pIHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIKKwkJICAgdGhhbiB6ZXJvICovCiAJCW1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgPQotCQkJbWF4KCh1NjQpKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8gKDggKiB3c3VtKSkpLAotCQkJICAgICh1NjQpKG1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CisJCQltYXgoKHUzMikodm5fbWluX3JhdGUgKiAoVF9GQUlSX0NPRUYgLworCQkJCQkJICg4ICogYnAtPnZuX3dlaWdodF9zdW0pKSksCisJCQkgICAgKHUzMikoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICogMikpOwogCQlEUChORVRJRl9NU0dfSUZVUCwgIm1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGE9JWRcbiIsCiAJCSAgIG1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEpOwogCX0KIAotI2lmZGVmIEJOWDJYX1BFUl9QUk9UX1FPUwotCWRvIHsKLQkJdTMyIHByb3RvY29sV2VpZ2h0U3VtID0gMDsKLQotCQlmb3IgKHByb3RvY29sID0gMDsgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKQotCQkJcHJvdG9jb2xXZWlnaHRTdW0gKz0KLQkJCQkJZHJ2SW5pdC5wcm90b2NvbF9taW5fcmF0ZVtwcm90b2NvbF07Ci0JCS8qIHBlciBwcm90b2NvbCBjb3VudGVyIC0KLQkJICAgTk9UIE5FRURFRCBJRiBOTyBQRVItUFJPVE9DT0wgQ09OR0VTVElPTiBNQU5BR0VNRU5UICovCi0JCWlmIChwcm90b2NvbFdlaWdodFN1bSA+IDApIHsKLQkJCWZvciAocHJvdG9jb2wgPSAwOwotCQkJICAgICBwcm90b2NvbCA8IE5VTV9PRl9QUk9UT0NPTFM7IHByb3RvY29sKyspCi0JCQkJLyogY3JlZGl0IGZvciBlYWNoIHBlcmlvZCBvZiB0aGUKLQkJCQkgICBmYWlybmVzcyBhbGdvcml0aG0gLSBudW1iZXIgb2YgYnl0ZXMgaW4KLQkJCQkgICBUX0ZBSVIgKHRoZSBwcm90b2NvbCBzaGFyZSB0aGUgdm4gcmF0ZSkgKi8KLQkJCQltX2ZhaXJfdm4ucHJvdG9jb2xfY3JlZGl0X2RlbHRhW3Byb3RvY29sXSA9Ci0JCQkJCSh1MzIpKCh2bl9taW5fcmF0ZSAvIDgpICogdF9mYWlyICoKLQkJCQkJcHJvdG9jb2xfbWluX3JhdGUgLyBwcm90b2NvbFdlaWdodFN1bSk7Ci0JCX0KLQl9IHdoaWxlICgwKTsKLSNlbmRpZgotCiAJLyogU3RvcmUgaXQgdG8gaW50ZXJuYWwgbWVtb3J5ICovCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuKS80OyBpKyspCiAJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKQEAgLTIyNTQsMTEgKzIyNTYsMTAgQEAKIAkJICAgICAgICgodTMyICopKCZtX2ZhaXJfdm4pKVtpXSk7CiB9CiAKKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgYm54MnhfbGlua19hdHRuKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IHZuOwotCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHN5bmNlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgKi8KIAlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwogCkBAIC0yMjY2LDYgKzIyNjcsMTkgQEAKIAogCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKIAorCQkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KKwkJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJCXUzMiBwYXVzZV9lbmFibGVkID0gMDsKKworCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCQkJCXBhdXNlX2VuYWJsZWQgPSAxOworCisJCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAorCQkJICAgICAgIHBhdXNlX2VuYWJsZWQpOworCQl9CisKIAkJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykgewogCQkJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzOwogCkBAIC0yMjgzLDM2ICsyMjk3LDM4IEBACiAJYm54MnhfbGlua19yZXBvcnQoYnApOwogCiAJaWYgKElTX0UxSE1GKGJwKSkgeworCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCQlpbnQgZnVuYzsKKwkJaW50IHZuOwogCiAJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgewogCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKIAkJCQljb250aW51ZTsKIAotCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBCUF9QT1JUKGJwKSk7CisJCQlmdW5jID0gKCh2biA8PCAxKSB8IHBvcnQpOwogCiAJCQkvKiBTZXQgdGhlIGF0dGVudGlvbiB0b3dhcmRzIG90aGVyIGRyaXZlcnMKIAkJCSAgIG9uIHRoZSBzYW1lIHBvcnQgKi8KIAkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wICsKIAkJCSAgICAgICAoTElOS19TWU5DX0FUVEVOVElPTl9CSVRfRlVOQ18wICsgZnVuYykqNCwgMSk7CiAJCX0KLQl9CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApICYmIChicC0+bGlua192YXJzLmxpbmVfc3BlZWQgPiAwKSkgewotCQlzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgbV9jbW5nX3BvcnQ7Ci0JCXUzMiB3c3VtOwotCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7CisJCQlpbnQgaTsKIAotCQkvKiBJbml0IFJBVEUgU0hBUElORyBhbmQgRkFJUk5FU1MgY29udGV4dHMgKi8KLQkJd3N1bSA9IGJueDJ4X2NhbGNfdm5fd3N1bShicCk7Ci0JCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnAsIChpbnQpd3N1bSwKLQkJCQkJYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkLAotCQkJCQkmbV9jbW5nX3BvcnQpOwotCQlpZiAoSVNfRTFITUYoYnApKQorCQkJLyogSW5pdCByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGNvbnRleHRzICovCisJCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwKTsKKwogCQkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQotCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCwKLQkJCQkJd3N1bSwgYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkLAotCQkJCQkJICAgICAmbV9jbW5nX3BvcnQpOworCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCk7CisKKwkJCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQorCQkJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCQkgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSo0LAorCQkJCSAgICAgICAoKHUzMiAqKSgmYnAtPmNtbmcpKVtpXSk7CisJCX0KIAl9CiB9CiAKQEAgLTI0ODksNiArMjUwNSw3IEBACiAJdTMyIG5pZ19pbnRfbWFza19hZGRyID0gcG9ydCA/IE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDEgOgogCQkJCSAgICAgICBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwOwogCXUzMiBhZXVfbWFzazsKKwl1MzIgbmlnX21hc2sgPSAwOwogCiAJaWYgKGJwLT5hdHRuX3N0YXRlICYgYXNzZXJ0ZWQpCiAJCUJOWDJYX0VSUigiSUdVIEVSUk9SXG4iKTsKQEAgLTI1MTQsNyArMjUzMSw3IEBACiAJCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKIAogCQkJLyogc2F2ZSBuaWcgaW50ZXJydXB0IG1hc2sgKi8KLQkJCWJwLT5uaWdfbWFzayA9IFJFR19SRChicCwgbmlnX2ludF9tYXNrX2FkZHIpOworCQkJbmlnX21hc2sgPSBSRUdfUkQoYnAsIG5pZ19pbnRfbWFza19hZGRyKTsKIAkJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIDApOwogCiAJCQlibngyeF9saW5rX2F0dG4oYnApOwpAQCAtMjU2OSw3ICsyNTg2LDcgQEAKIAogCS8qIG5vdyBzZXQgYmFjayB0aGUgbWFzayAqLwogCWlmIChhc3NlcnRlZCAmIEFUVE5fTklHX0ZPUl9GVU5DKSB7Ci0JCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIGJwLT5uaWdfbWFzayk7CisJCVJFR19XUihicCwgbmlnX2ludF9tYXNrX2FkZHIsIG5pZ19tYXNrKTsKIAkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CiAJfQogfQpAQCAtMjU5MSw5ICsyNjA4LDggQEAKIAogCQlCTlgyWF9FUlIoIlNQSU81IGh3IGF0dGVudGlvblxuIik7CiAKLQkJc3dpdGNoIChicC0+Y29tbW9uLmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQkJY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHOgotCQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KIAogCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLwpAQCAtMjYyNCw2ICsyNjQwLDEzIEBACiAJCX0KIAl9CiAKKwlpZiAoYXR0biAmIChBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIHwKKwkJICAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEpKSB7CisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoJmJwLT5saW5rX3BhcmFtcyk7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCX0KKwogCWlmIChhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKSB7CiAKIAkJdmFsID0gUkVHX1JEKGJwLCByZWdfb2Zmc2V0KTsKQEAgLTI2NDAsNyArMjY2Myw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmIChhdHRuICYgQk5YMlhfRE9PUlFfQVNTRVJUKSB7CisJaWYgKGF0dG4gJiBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfSFdfSU5URVJSVVBUKSB7CiAKIAkJdmFsID0gUkVHX1JEKGJwLCBET1JRX1JFR19ET1JRX0lOVF9TVFNfQ0xSKTsKIAkJQk5YMlhfRVJSKCJEQiBodyBhdHRlbnRpb24gMHgleFxuIiwgdmFsKTsKQEAgLTI4ODYsMTAgKzI5MDksNiBAQAogCWlmIChzdGF0dXMgJiAweDEpCiAJCWJueDJ4X2F0dG5faW50KGJwKTsKIAotCS8qIENTdG9ybSBldmVudHM6IHF1ZXJ5X3N0YXRzLCBwb3J0IGRlbGV0ZSByYW1yb2QgKi8KLQlpZiAoc3RhdHVzICYgMHgyKQotCQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0KIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgQVRURU5USU9OX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX2F0dF9pZHgpLAogCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKIAlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgVVNUT1JNX0lELCBsZTE2X3RvX2NwdShicC0+ZGVmX3VfaWR4KSwKQEAgLTI5MTQsNyArMjkzMyw3IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgWFNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOworCWJueDJ4X2Fja19zYihicCwgREVGX1NCX0lELCBUU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCkBAIC0zMDAzLDE2ICszMDIyLDQxIEBACiAKICNkZWZpbmUgVVBEQVRFX0VYVEVORF9UU1RBVChzLCB0KSBcCiAJZG8geyBcCi0JCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIG9sZF90Y2xpZW50LT5zOyBcCi0JCW9sZF90Y2xpZW50LT5zID0gbGUzMl90b19jcHUodGNsaWVudC0+cyk7IFwKLQkJQUREX0VYVEVORF82NChmc3RhdHMtPnQjI19oaSwgZnN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF90Y2xpZW50LT5zKTsgXAorCQlvbGRfdGNsaWVudC0+cyA9IHRjbGllbnQtPnM7IFwKKwkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBVUERBVEVfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCW9sZF91Y2xpZW50LT5zID0gdWNsaWVudC0+czsgXAorCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFVQREFURV9FWFRFTkRfWFNUQVQocywgdCkgXAogCWRvIHsgXAotCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBvbGRfeGNsaWVudC0+czsgXAotCQlvbGRfeGNsaWVudC0+cyA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpOyBcCi0JCUFERF9FWFRFTkRfNjQoZnN0YXRzLT50IyNfaGksIGZzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCQlkaWZmID0gbGUzMl90b19jcHUoeGNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfeGNsaWVudC0+cyk7IFwKKwkJb2xkX3hjbGllbnQtPnMgPSB4Y2xpZW50LT5zOyBcCisJCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIG1pbnVlbmQgLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfNjQobV9oaSwgc19oaSwgbV9sbywgc19sbykgXAorCWRvIHsgXAorCQlESUZGXzY0KG1faGksIG1faGksIHNfaGksIG1fbG8sIG1fbG8sIHNfbG8pOyBcCisJfSB3aGlsZSAoMCkKKworLyogbWludWVuZFtoaTpsb10gLT0gc3VidHJhaGVuZCAqLworI2RlZmluZSBTVUJfRVhURU5EXzY0KG1faGksIG1fbG8sIHMpIFwKKwlkbyB7IFwKKwkJU1VCXzY0KG1faGksIDAsIG1fbG8sIHMpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVUJfRVhURU5EX1VTVEFUKHMsIHQpIFwKKwlkbyB7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHVjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3VjbGllbnQtPnMpOyBcCisJCVNVQl9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAogCX0gd2hpbGUgKDApCiAKIC8qCkBAIC0zMDM5LDExICszMDgzLDEyIEBACiB7CiAJaWYgKCFicC0+c3RhdHNfcGVuZGluZykgewogCQlzdHJ1Y3QgZXRoX3F1ZXJ5X3JhbXJvZF9kYXRhIHJhbXJvZF9kYXRhID0gezB9OwotCQlpbnQgcmM7CisJCWludCBpLCByYzsKIAogCQlyYW1yb2RfZGF0YS5kcnZfY291bnRlciA9IGJwLT5zdGF0c19jb3VudGVyKys7Ci0JCXJhbXJvZF9kYXRhLmNvbGxlY3RfcG9ydF8xYiA9IGJwLT5wb3J0LnBtZiA/IDEgOiAwOwotCQlyYW1yb2RfZGF0YS5jdHJfaWRfdmVjdG9yID0gKDEgPDwgQlBfQ0xfSUQoYnApKTsKKwkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0ID0gYnAtPnBvcnQucG1mID8gMSA6IDA7CisJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQkJcmFtcm9kX2RhdGEuY3RyX2lkX3ZlY3RvciB8PSAoMSA8PCBicC0+ZnBbaV0uY2xfaWQpOwogCiAJCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSwgMCwKIAkJCQkgICAoKHUzMiAqKSZyYW1yb2RfZGF0YSlbMV0sCkBAIC0zMDU5LDcgKzMxMDQsOSBAQAogc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CiAKKwlicC0+c3RhdHNfcGVuZGluZyA9IDA7CiAJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CiAJYnAtPnN0YXRzX2NvdW50ZXIgPSAwOwogCkBAIC0zMDgxLDkgKzMxMjgsMTkgQEAKIAkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDFfbG8pLCAyKTsKIAogCS8qIGZ1bmN0aW9uIHN0YXRzICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJbWVtc2V0KCZmcC0+b2xkX3RjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF91Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5vbGRfeGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+ZXRoX3Ffc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMpKTsKKwl9CisKIAltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQltZW1zZXQoJmJwLT5vbGRfdGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwotCW1lbXNldCgmYnAtPm9sZF94Y2xpZW50LCAwLCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CiAJbWVtc2V0KCZicC0+ZXRoX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cykpOwogCiAJYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7CkBAIC0zMDk3LDYgKzMxNTQsOCBAQAogCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKIAogCSpzdGF0c19jb21wID0gRE1BRV9DT01QX1ZBTDsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCisJCXJldHVybjsKIAogCS8qIGxvYWRlciAqLwogCWlmIChicC0+ZXhlY3V0ZXJfaWR4KSB7CkBAIC0zNDg2LDcgKzM1NDUsMTEgQEAKIHsKIAlzdHJ1Y3QgYm1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5ibWFjX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7Ci0Jc3RydWN0IHJlZ3BhaXIgZGlmZjsKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlzdHJ1Y3QgeworCQl1MzIgbG87CisJCXUzMiBoaTsKKwl9IGRpZmY7CiAKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JlcmIsIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3JmY3MsIHJ4X3N0YXRfZG90M3N0YXRzZmNzZXJyb3JzKTsKQEAgLTM0OTYsNyArMzU1OSw3IEBACiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyamJyLCByeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4Y2YsIHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkKTsKIAlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfeG9mZnN0YXRlZW50ZXJlZCk7Ci0JVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkKTsKKwlVUERBVEVfU1RBVDY0KHJ4X3N0YXRfZ3J4cGYsIHJ4X3N0YXRfYm1hY194cGYpOwogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9vdXR4b2Zmc2VudCk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0eHBmLCB0eF9zdGF0X2Zsb3djb250cm9sZG9uZSk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0NjQsIHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0cyk7CkBAIC0zNTE3LDEyICszNTgwLDIzIEBACiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0ZXJyLAogCQkJCXR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9ycyk7CiAJVVBEQVRFX1NUQVQ2NCh0eF9zdGF0X2d0dWZsLCB0eF9zdGF0X2JtYWNfdWZsKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF9ibWFjX3hwZl9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbyA9CisJCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfYm1hY194cGZfbG87CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2hpID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2xvID0KKwkJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9sbzsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfZW1hY19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlzdHJ1Y3QgZW1hY19zdGF0cyAqbmV3ID0gYm54Mnhfc3AoYnAsIG1hY19zdGF0cy5lbWFjX3N0YXRzKTsKIAlzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzICpwc3RhdHMgPSBibngyeF9zcChicCwgcG9ydF9zdGF0cyk7CisJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAKIAlVUERBVEVfRVhURU5EX1NUQVQocnhfc3RhdF9pZmhjaW5iYWRvY3RldHMpOwogCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHMpOwpAQCAtMzU1NSw2ICszNjI5LDI0IEBACiAJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9ldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG8gPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9sbzsKKwlBRERfNjQoZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGksCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbywKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfeG9mZnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG8pOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b25zZW50X2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8gPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9uc2VudF9sbzsKKwlBRERfNjQoZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSwKKwkgICAgICAgcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfaGksCisJICAgICAgIGVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfbG8sCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2xvKTsKIH0KIAogc3RhdGljIGludCBibngyeF9od19zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKQEAgLTM1NjMsNyArMzY1NSwxMSBAQAogCXN0cnVjdCBuaWdfc3RhdHMgKm9sZCA9ICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyk7CiAJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXN0cnVjdCByZWdwYWlyIGRpZmY7CisJc3RydWN0IHsKKwkJdTMyIGxvOworCQl1MzIgaGk7CisJfSBkaWZmOworCXUzMiBuaWdfdGltZXJfbWF4OwogCiAJaWYgKGJwLT5saW5rX3ZhcnMubWFjX3R5cGUgPT0gTUFDX1RZUEVfQk1BQykKIAkJYm54MnhfYm1hY19zdGF0c191cGRhdGUoYnApOwpAQCAtMzU3Miw3ICszNjY4LDcgQEAKIAkJYm54MnhfZW1hY19zdGF0c191cGRhdGUoYnApOwogCiAJZWxzZSB7IC8qIHVucmVhY2hlZCAqLwotCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgZG1hZSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7CisJCUJOWDJYX0VSUigic3RhdHMgdXBkYXRlZCBieSBETUFFIGJ1dCBubyBNQUMgYWN0aXZlXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzU5NCwxMzQgKzM2OTAsMjExIEBACiAKIAlwc3RhdHMtPmhvc3RfcG9ydF9zdGF0c19zdGFydCA9ICsrcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfZW5kOwogCisJbmlnX3RpbWVyX21heCA9IFNITUVNX1JEKGJwLCBwb3J0X21iW0JQX1BPUlQoYnApXS5zdGF0X25pZ190aW1lcik7CisJaWYgKG5pZ190aW1lcl9tYXggIT0gZXN0YXRzLT5uaWdfdGltZXJfbWF4KSB7CisJCWVzdGF0cy0+bmlnX3RpbWVyX21heCA9IG5pZ190aW1lcl9tYXg7CisJCUJOWDJYX0VSUigiTklHIHRpbWVyIG1heCAoJXUpXG4iLCBlc3RhdHMtPm5pZ190aW1lcl9tYXgpOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBldGhfc3RhdHNfcXVlcnkgKnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ3X3N0YXRzKTsKLQlpbnQgY2xfaWQgPSBCUF9DTF9JRChicCk7CiAJc3RydWN0IHRzdG9ybV9wZXJfcG9ydF9zdGF0cyAqdHBvcnQgPQotCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KLQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KLQkJCSZzdGF0cy0+eHN0b3JtX2NvbW1vbi5jbGllbnRfc3RhdGlzdGljc1tjbF9pZF07Ci0Jc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfeGNsaWVudCA9ICZicC0+b2xkX3hjbGllbnQ7CisJCQkJCSZzdGF0cy0+dHN0b3JtX2NvbW1vbi5wb3J0X3N0YXRpc3RpY3M7CiAJc3RydWN0IGhvc3RfZnVuY19zdGF0cyAqZnN0YXRzID0gYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHMpOwogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwotCXUzMiBkaWZmOworCWludCBpOwogCi0JLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLwotCWlmICgodTE2KShsZTE2X3RvX2NwdSh0Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9Ci0JCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgdHN0b3JtIgotCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKLQkJICAgdGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9Ci0JCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKLQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgotCQkgICAiICB4c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKLQkJICAgeGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOwotCQlyZXR1cm4gLTI7Ci0JfQorCW1lbXNldCgmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0gMDsKKwllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0gMDsKKwllc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpID0gMDsKKwllc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvID0gMDsKKwllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSA9IDA7CisJZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8gPSAwOwogCi0JZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisJCWludCBjbF9pZCA9IGZwLT5jbF9pZDsKKwkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnRzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmZwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp1Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnVzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF91Y2xpZW50ID0gJmZwLT5vbGRfdWNsaWVudDsKKwkJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp4Y2xpZW50ID0KKwkJCQkmc3RhdHMtPnhzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOworCQlzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF94Y2xpZW50ID0gJmZwLT5vbGRfeGNsaWVudDsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmZnAtPmV0aF9xX3N0YXRzOworCQl1MzIgZGlmZjsKKworCQkvKiBhcmUgc3Rvcm0gc3RhdHMgdmFsaWQ/ICovCisJCWlmICgodTE2KShsZTE2X3RvX2NwdSh4Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJCURQKEJOWDJYX01TR19TVEFUUywgIlslZF0gc3RhdHMgbm90IHVwZGF0ZWQgYnkgeHN0b3JtIgorCQkJICAgIiAgeHN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCisJCQkgICBpLCB4Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHRjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KKwkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgeworCQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAiWyVkXSBzdGF0cyBub3QgdXBkYXRlZCBieSB0c3Rvcm0iCisJCQkgICAiICB0c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJCSAgIGksIHRjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKKwkJCXJldHVybiAtMjsKKwkJfQorCQlpZiAoKHUxNikobGUxNl90b19jcHUodWNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQorCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHVzdG9ybSIKKwkJCSAgICIgIHVzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAorCQkJICAgaSwgdWNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQkJcmV0dXJuIC00OworCQl9CisKKwkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSA9CisJCXFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkgPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9ieXRlcy5oaSk7Ci0JZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyA9Ci0JZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMubG8pOwogCi0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5oaSk7Ci0JZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9CisJCXFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPQogCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9lcnJvcl9ieXRlcy5sbyk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCisJCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfbXVsdGljYXN0X3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfYnJvYWRjYXN0X3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCwKKwkJCQkJZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHMpOworCQlVUERBVEVfRVhURU5EX1RTVEFUKG5vX2J1ZmZfZGlzY2FyZCwgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlTVUJfRVhURU5EX1VTVEFUKHVjYXN0X25vX2J1ZmZfcGt0cywKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChtY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJU1VCX0VYVEVORF9VU1RBVChiY2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKKwkJVVBEQVRFX0VYVEVORF9VU1RBVCh1Y2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7CisJCVVQREFURV9FWFRFTkRfVVNUQVQobWNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOworCQlVUERBVEVfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKKworCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKKwkJcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5sbyk7CisKKwkJVVBEQVRFX0VYVEVORF9YU1RBVCh1bmljYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKwkJVVBEQVRFX0VYVEVORF9YU1RBVChtdWx0aWNhc3RfcGt0c19zZW50LAorCQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisJCVVQREFURV9FWFRFTkRfWFNUQVQoYnJvYWRjYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCisJCW9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkID0gdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZDsKKwkJb2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCA9IHRjbGllbnQtPnR0bDBfZGlzY2FyZDsKKworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyk7CisKKwkJQUREXzY0KGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSwKKwkJICAgICAgIHFzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJCSAgICAgICBlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvLAorCQkgICAgICAgcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbyk7CisJCUFERF82NChlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSwgcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGksCisJCSAgICAgICBlc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbywgcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8pOworCX0KKworCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpLAorCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvKTsKKworCW1lbWNweShlc3RhdHMsICYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzKSAtIDIqc2l6ZW9mKHUzMikpOworCisJQUREXzY0KGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmcmFtZXN0b29sb25nX2hpLAorCSAgICAgICBlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2xvLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbyk7CiAJQUREXzY0KGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCiAJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGksCiAJICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8sCiAJICAgICAgIGVzdGF0cy0+cnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfbG8pOwogCi0JQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGksCi0JICAgICAgIGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCi0JICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8pOwotCi0JVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfdW5pY2FzdF9wa3RzLCB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X211bHRpY2FzdF9wa3RzLAotCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKLQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9icm9hZGNhc3RfcGt0cywKLQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZCk7Ci0KLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKLQlmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmxvKTsKLQotCVVQREFURV9FWFRFTkRfWFNUQVQodW5pY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKLQlVUERBVEVfRVhURU5EX1hTVEFUKG11bHRpY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwotCVVQREFURV9FWFRFTkRfWFNUQVQoYnJvYWRjYXN0X3BrdHNfc2VudCwKLQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7Ci0KLQltZW1jcHkoZXN0YXRzLCAmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKLQotCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19maWx0ZXJfZGlzY2FyZCk7Ci0JZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+eHhvdmVyZmxvd19kaXNjYXJkKTsKLQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkID0KKwkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2ZpbHRlcl9kaXNjYXJkKTsKKwkJZXN0YXRzLT54eG92ZXJmbG93X2Rpc2NhcmQgPQorCQkJCWxlMzJfdG9fY3B1KHRwb3J0LT54eG92ZXJmbG93X2Rpc2NhcmQpOworCQllc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkID0KIAkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+YnJiX3RydW5jYXRlX2Rpc2NhcmQpOwotCWVzdGF0cy0+bWFjX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0cG9ydC0+bWFjX2Rpc2NhcmQpOwotCi0Jb2xkX3RjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmhpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5sbyk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkpOwotCW9sZF90Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmxvKTsKLQlvbGRfdGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMubG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMubG8pOwotCW9sZF90Y2xpZW50LT50b3RhbF9yY3ZfcGt0cyA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9wa3RzKTsKLQotCW9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCk7Ci0Jb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCk7Ci0JZXN0YXRzLT5ub19idWZmX2Rpc2NhcmQgPQotCW9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQpOwotCW9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT50dGwwX2Rpc2NhcmQpOwotCi0Jb2xkX3hjbGllbnQtPnRvdGFsX3NlbnRfcGt0cyA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfcGt0cyk7Ci0Jb2xkX3hjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmhpKTsKLQlvbGRfeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmxvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQubG8pOwotCW9sZF94Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8pOwotCW9sZF94Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQuaGkpOwotCW9sZF94Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8pOworCQllc3RhdHMtPm1hY19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19kaXNjYXJkKTsKKwl9CiAKIAlmc3RhdHMtPmhvc3RfZnVuY19zdGF0c19zdGFydCA9ICsrZnN0YXRzLT5ob3N0X2Z1bmNfc3RhdHNfZW5kOwogCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X25ldF9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmJwLT5vbGRfdGNsaWVudDsKIAlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOworCWludCBpOwogCiAJbnN0YXRzLT5yeF9wYWNrZXRzID0KIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpICsKQEAgLTM3MzMsMzQgKzM5MDYsMzMgQEAKIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSkgKwogCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKIAotCW5zdGF0cy0+cnhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpKTsKKwluc3RhdHMtPnJ4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSk7CiAKIAluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CiAKLQluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCArCi0JCQkgICAgIGVzdGF0cy0+bWFjX2Rpc2NhcmQ7CisJbnN0YXRzLT5yeF9kcm9wcGVkID0gZXN0YXRzLT5tYWNfZGlzY2FyZDsKKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJbnN0YXRzLT5yeF9kcm9wcGVkICs9CisJCQlsZTMyX3RvX2NwdShicC0+ZnBbaV0ub2xkX3RjbGllbnQuY2hlY2tzdW1fZGlzY2FyZCk7CisKIAluc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOwogCiAJbnN0YXRzLT5tdWx0aWNhc3QgPQotCQlibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKTsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSk7CiAKIAluc3RhdHMtPmNvbGxpc2lvbnMgPQotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19sbyArCi0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfbG8gKwotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCi0JZXN0YXRzLT5qYWJiZXJfcGFja2V0c19yZWNlaXZlZCA9Ci0JCQkJb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICsKLQkJCQllc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19sbzsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2hpKTsKIAogCW5zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCQkJZXN0YXRzLT5yeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2xvICsKLQkJCQllc3RhdHMtPmphYmJlcl9wYWNrZXRzX3JlY2VpdmVkOwotCW5zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBlc3RhdHMtPmJyYl9kcm9wX2xvICsgZXN0YXRzLT5icmJfdHJ1bmNhdGVfbG87Ci0JbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0gZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19sbzsKLQluc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfbG87Ci0JbnN0YXRzLT5yeF9maWZvX2Vycm9ycyA9IG9sZF90Y2xpZW50LT5ub19idWZmX2Rpc2NhcmQ7CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19oaSkgKworCQlibngyeF9oaWxvKCZlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKTsKKwluc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5icmJfZHJvcF9oaSkgKworCQkJCSBibngyeF9oaWxvKCZlc3RhdHMtPmJyYl90cnVuY2F0ZV9oaSk7CisJbnN0YXRzLT5yeF9jcmNfZXJyb3JzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaSk7CisJbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2hpKTsKKwluc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gYm54MnhfaGlsbygmZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkpOwogCW5zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkOwogCiAJbnN0YXRzLT5yeF9lcnJvcnMgPSBuc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKwpAQCAtMzc3MSw0NiArMzk0Myw2MSBAQAogCQkJICAgIG5zdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKIAogCW5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPQotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2xvOwotCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZmFsc2VjYXJyaWVyZXJyb3JzX2xvOworCQlibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzbGF0ZWNvbGxpc2lvbnNfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpOworCW5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPQorCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKTsKIAluc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKIAluc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOwogCW5zdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CiAKIAluc3RhdHMtPnR4X2Vycm9ycyA9IG5zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgKwotCQkJICAgIG5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7CisJCQkgICAgbnN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyArCisJICAgIGJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOworCWludCBpOworCisJZXN0YXRzLT5kcml2ZXJfeG9mZiA9IDA7CisJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgPSAwOworCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCA9IDA7CisJZXN0YXRzLT5od19jc3VtX2VyciA9IDA7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOworCisJCWVzdGF0cy0+ZHJpdmVyX3hvZmYgKz0gcXN0YXRzLT5kcml2ZXJfeG9mZjsKKwkJZXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3QgKz0gcXN0YXRzLT5yeF9lcnJfZGlzY2FyZF9wa3Q7CisJCWVzdGF0cy0+cnhfc2tiX2FsbG9jX2ZhaWxlZCArPSBxc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQ7CisJCWVzdGF0cy0+aHdfY3N1bV9lcnIgKz0gcXN0YXRzLT5od19jc3VtX2VycjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKLQlpbnQgdXBkYXRlID0gMDsKIAogCWlmICgqc3RhdHNfY29tcCAhPSBETUFFX0NPTVBfVkFMKQogCQlyZXR1cm47CiAKIAlpZiAoYnAtPnBvcnQucG1mKQotCQl1cGRhdGUgPSAoYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKKwkJYm54MnhfaHdfc3RhdHNfdXBkYXRlKGJwKTsKIAotCXVwZGF0ZSB8PSAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSA9PSAwKTsKLQotCWlmICh1cGRhdGUpCi0JCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOwotCi0JZWxzZSB7Ci0JCWlmIChicC0+c3RhdHNfcGVuZGluZykgewotCQkJYnAtPnN0YXRzX3BlbmRpbmcrKzsKLQkJCWlmIChicC0+c3RhdHNfcGVuZGluZyA9PSAzKSB7Ci0JCQkJQk5YMlhfRVJSKCJzdGF0cyBub3QgdXBkYXRlZCBmb3IgMyB0aW1lc1xuIik7Ci0JCQkJYm54MnhfcGFuaWMoKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KKwlpZiAoYm54Mnhfc3Rvcm1fc3RhdHNfdXBkYXRlKGJwKSAmJiAoYnAtPnN0YXRzX3BlbmRpbmcrKyA9PSAzKSkgeworCQlCTlgyWF9FUlIoInN0b3JtIHN0YXRzIHdlcmUgbm90IHVwZGF0ZWQgZm9yIDMgdGltZXNcbiIpOworCQlibngyeF9wYW5pYygpOworCQlyZXR1cm47CiAJfQogCisJYm54MnhfbmV0X3N0YXRzX3VwZGF0ZShicCk7CisJYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShicCk7CisKIAlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1RJTUVSKSB7Ci0JCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmYnAtPm9sZF90Y2xpZW50OworCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0KKwkJCQkJCQkmYnAtPmZwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwLT5ldGhfcV9zdGF0czsKIAkJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuc3RhdHMgPSAmYnAtPmRldi0+c3RhdHM7CiAJCWludCBpOwpAQCAtMzgyNSwyMCArNDAxMiwyMiBAQAogCQkgICAgICAgKHUxNikobGUxNl90b19jcHUoKmJwLT5mcC0+cnhfY29uc19zYikgLQogCQkJICAgICBicC0+ZnAtPnJ4X2NvbXBfY29ucyksCiAJCSAgICAgICBsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSwgbnN0YXRzLT5yeF9wYWNrZXRzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgKFhvZmYgZXZlbnRzICV1KSAgYnJiIGRyb3BzICV1XG4iLAotCQkgICAgICAgbmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSA/ICJYb2ZmIiA6ICJYb24iLAotCQkgICAgICAgZXN0YXRzLT5kcml2ZXJfeG9mZiwgZXN0YXRzLT5icmJfZHJvcF9sbyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICVzIChYb2ZmIGV2ZW50cyAldSkgIGJyYiBkcm9wcyAldSAgIgorCQkJCSAgImJyYiB0cnVuY2F0ZSAldVxuIiwKKwkJICAgICAgIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpID8gIlhvZmYiIDogIlhvbiIpLAorCQkgICAgICAgcXN0YXRzLT5kcml2ZXJfeG9mZiwKKwkJICAgICAgIGVzdGF0cy0+YnJiX2Ryb3BfbG8sIGVzdGF0cy0+YnJiX3RydW5jYXRlX2xvKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInRzdGF0czogY2hlY2tzdW1fZGlzY2FyZCAldSAgIgotCQkJInBhY2tldHNfdG9vX2JpZ19kaXNjYXJkICV1ICBub19idWZmX2Rpc2NhcmQgJXUgICIKKwkJCSJwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCAlbHUgIG5vX2J1ZmZfZGlzY2FyZCAlbHUgICIKIAkJCSJtYWNfZGlzY2FyZCAldSAgbWFjX2ZpbHRlcl9kaXNjYXJkICV1ICAiCiAJCQkieHhvdnJmbG93X2Rpc2NhcmQgJXUgIGJyYl90cnVuY2F0ZV9kaXNjYXJkICV1ICAiCiAJCQkidHRsMF9kaXNjYXJkICV1XG4iLAotCQkgICAgICAgb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkLCBlc3RhdHMtPm1hY19kaXNjYXJkLAotCQkgICAgICAgZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQsIGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkLAotCQkgICAgICAgZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCwKLQkJICAgICAgIG9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQpOworCQkgICAgICAgbGUzMl90b19jcHUob2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQpLAorCQkgICAgICAgYm54MnhfaGlsbygmcXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCisJCSAgICAgICBibngyeF9oaWxvKCZxc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9oaSksCisJCSAgICAgICBlc3RhdHMtPm1hY19kaXNjYXJkLCBlc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCwKKwkJICAgICAgIGVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9kaXNjYXJkLAorCQkgICAgICAgbGUzMl90b19jcHUob2xkX3RjbGllbnQtPnR0bDBfZGlzY2FyZCkpOwogCiAJCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiWyVkXTogJWx1XHQlbHVcdCVsdVxuIiwgaSwKQEAgLTM5ODcsNyArNDE3Niw3IEBACiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwogCQlpbnQgcmM7CiAKLQkJYm54MnhfdHhfaW50KGZwLCAxMDAwKTsKKwkJYm54MnhfdHhfaW50KGZwKTsKIAkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOwogCX0KIApAQCAtNDIzOSwxMCArNDQyOCw2IEBACiAJCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLAogCQkJCQkJICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCiAJCQkgYnAtPnJ4X3RpY2tzID8gMCA6IDEpOwotCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsCi0JCQkJCQkgICAgIFVfU0JfRVRIX1JYX0JEX0lOREVYKSwKLQkJCSBicC0+cnhfdGlja3MgPyAwIDogMSk7CiAKIAkJLyogSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUyAqLwogCQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwpAQCAtNDI3Myw4ICs0NDU4LDcgQEAKIAkJaWYgKGZwLT50cGFfc3RhdGVbaV0gPT0gQk5YMlhfVFBBX1NUQVJUKQogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKIAkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBicC0+cnhfYnVmX3NpemUsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwpAQCAtNDI4OSwxNiArNDQ3MywxMyBAQAogCXUxNiByaW5nX3Byb2QsIGNxZV9yaW5nX3Byb2Q7CiAJaW50IGksIGo7CiAKLQlicC0+cnhfYnVmX3NpemUgPSBicC0+ZGV2LT5tdHU7Ci0JYnAtPnJ4X2J1Zl9zaXplICs9IGJwLT5yeF9vZmZzZXQgKyBFVEhfT1ZSRUhFQUQgKwotCQlCQ01fUlhfRVRIX1BBWUxPQURfQUxJR047CisJYnAtPnJ4X2J1Zl9zaXplID0gYnAtPmRldi0+bXR1ICsgRVRIX09WUkVIRUFEICsgQk5YMlhfUlhfQUxJR047CisJRFAoTkVUSUZfTVNHX0lGVVAsCisJICAgIm10dSAlZCAgcnhfYnVmX3NpemUgJWRcbiIsIGJwLT5kZXYtPm10dSwgYnAtPnJ4X2J1Zl9zaXplKTsKIAogCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpIHsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJyeF9idWZfc2l6ZSAlZCAgZWZmZWN0aXZlX210dSAlZFxuIiwKLQkJICAgYnAtPnJ4X2J1Zl9zaXplLCBicC0+ZGV2LT5tdHUgKyBFVEhfT1ZSRUhFQUQpOwogCi0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQkJZm9yIChpID0gMDsgaSA8IG1heF9hZ2dfcXVldWVzOyBpKyspIHsKQEAgLTQzMjEsNyArNDUwMiw3IEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZwLT5yeF9iZF9jb25zID0gMDsKQEAgLTQzOTYsOCArNDU3Nyw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewogCQkJCUJOWDJYX0VSUigid2FzIG9ubHkgYWJsZSB0byBhbGxvY2F0ZSAiCi0JCQkJCSAgIiVkIHJ4IHNrYnNcbiIsIGkpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQkJCQkgICIlZCByeCBza2JzIG9uIHF1ZXVlWyVkXVxuIiwgaSwgaik7CisJCQkJZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXJpbmdfcHJvZCA9IE5FWFRfUlhfSURYKHJpbmdfcHJvZCk7CkBAIC00NDMzLDcgKzQ2MTQsNyBAQAogewogCWludCBpLCBqOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7CkBAIC00NDg2LDI3ICs0NjY3LDIwIEBACiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0gYm54Mnhfc3AoYnAsIGNvbnRleHRbaV0uZXRoKTsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXU4IHNiX2lkID0gRlBfU0JfSUQoZnApOwotCi0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKEJQX0NMX0lEKGJwKSB8Ci0JCQkJWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFKTsKKwkJdTggY2xfaWQgPSBmcC0+Y2xfaWQ7CisJCXU4IHNiX2lkID0gZnAtPnNiX2lkOwogCiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zYl9pbmRleF9udW1iZXJzID0KIAkJCQkJCUJOWDJYX1JYX1NCX0lOREVYX05VTTsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmNsaWVudElkID0gRlBfQ0xfSUQoZnApOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uY2xpZW50SWQgPSBjbF9pZDsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uZmxhZ3MgPQotCQkJVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfTUNfQUxJR05NRU5UOwotCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWNfYWxpZ25tZW50X3NpemUgPQotCQkJQkNNX1JYX0VUSF9QQVlMT0FEX0FMSUdOOworCQkJKFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVCB8CisJCQkgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyk7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPQorCQkJCQkJY2xfaWQ7CisJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tY19hbGlnbm1lbnRfbG9nX3NpemUgPQorCQkJCQkJQk5YMlhfUlhfQUxJR05fU0hJRlQ7CiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5iZF9idWZmX3NpemUgPQogCQkJCQkJYnAtPnJ4X2J1Zl9zaXplOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfcGFnZV9iYXNlX2hpID0KQEAgLTQ1MjYsNiArNDcwMCwyMSBAQAogCQkJCQkJVTY0X0xPKGZwLT5yeF9zZ2VfbWFwcGluZyk7CiAJCX0KIAorCQljb250ZXh0LT51c3Rvcm1fYWdfY29udGV4dC5jZHVfdXNhZ2UgPQorCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAorCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfVUNNX0FHLAorCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CisKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2hpID0KKwkJCQkJCVU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2xvID0KKwkJCQkJCVU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2hpID0KKwkJCQkJCVU2NF9ISShmcC0+dHhfcHJvZHNfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnR4X3Byb2RzX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5zdGF0aXN0aWNzX2RhdGEgPSAoY2xfaWQgfAorCQkJCVhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0VOQUJMRSk7CiAJCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9CiAJCQkJCQlDX1NCX0VUSF9UWF9DUV9JTkRFWDsKIAkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CkBAIC00NTM0LDEwICs0NzIzLDYgQEAKIAkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKIAkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1hDTV9BRywKIAkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwotCQljb250ZXh0LT51c3Rvcm1fYWdfY29udGV4dC5jZHVfdXNhZ2UgPQotCQkJQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShIV19DSUQoYnAsIGkpLAotCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfVUNNX0FHLAotCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CiAJfQogfQogCkBAIC00NTQ2LDE0ICs0NzMxLDE1IEBACiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKIAlpbnQgaTsKIAotCWlmICghaXNfbXVsdGkoYnApKQorCWlmIChicC0+bXVsdGlfbW9kZSA9PSBFVEhfUlNTX01PREVfRElTQUJMRUQpCiAJCXJldHVybjsKIAotCURQKE5FVElGX01TR19JRlVQLCAiSW5pdGlhbGl6aW5nIGluZGlyZWN0aW9uIHRhYmxlXG4iKTsKKwlEUChORVRJRl9NU0dfSUZVUCwKKwkgICAiSW5pdGlhbGl6aW5nIGluZGlyZWN0aW9uIHRhYmxlICBtdWx0aV9tb2RlICVkXG4iLCBicC0+bXVsdGlfbW9kZSk7CiAJZm9yIChpID0gMDsgaSA8IFRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9TSVpFOyBpKyspCiAJCVJFR19XUjgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCiAJCQlUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKGZ1bmMpICsgaSwKLQkJCUJQX0NMX0lEKGJwKSArIChpICUgYnAtPm51bV9xdWV1ZXMpKTsKKwkJCWJwLT5mcC0+Y2xfaWQgKyAoaSAlIGJwLT5udW1fcnhfcXVldWVzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9jbGllbnRfY29uZmlnKHN0cnVjdCBibngyeCAqYnApCkBAIC00NTYzLDEzICs0NzQ5LDEzIEBACiAJaW50IGk7CiAKIAl0c3Rvcm1fY2xpZW50Lm10dSA9IGJwLT5kZXYtPm10dTsKLQl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IEJQX0NMX0lEKGJwKTsKIAl0c3Rvcm1fY2xpZW50LmNvbmZpZ19mbGFncyA9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFOworCQkJCShUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgfAorCQkJCSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRSk7CiAjaWZkZWYgQkNNX1ZMQU4KIAlpZiAoYnAtPnJ4X21vZGUgJiYgYnAtPnZsZ3JwICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpKSB7CiAJCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEU7CisJCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRTsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsICJ2bGFuIHJlbW92YWwgZW5hYmxlZFxuIik7CiAJfQogI2VuZGlmCkBAIC00NTg3LDYgKzQ3NzMsOCBAQAogCX0KIAogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXRzdG9ybV9jbGllbnQuc3RhdGlzdGljc19jb3VudGVyX2lkID0gYnAtPmZwW2ldLmNsX2lkOworCiAJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKIAkJICAgICAgIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBicC0+ZnBbaV0uY2xfaWQpLAogCQkgICAgICAgKCh1MzIgKikmdHN0b3JtX2NsaWVudClbMF0pOwpAQCAtNDYxNSwxOCArNDgwMywyMiBAQAogCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9kcm9wX2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLmJjYXN0X2Ryb3BfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAljYXNlIEJOWDJYX1JYX01PREVfTk9STUFMOgogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAljYXNlIEJOWDJYX1JYX01PREVfQUxMTVVMVEk6CiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAljYXNlIEJOWDJYX1JYX01PREVfUFJPTUlTQzoKIAkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlCTlgyWF9FUlIoIkJBRCByeCBtb2RlICglZClcbiIsIG1vZGUpOwogCQlicmVhazsKQEAgLTQ2NzcsMTkgKzQ4NjksNjQgQEAKIAlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOwogfQogCisvKiBDYWxjdWxhdGVzIHRoZSBzdW0gb2Ygdm5fbWluX3JhdGVzLgorICAgSXQncyBuZWVkZWQgZm9yIGZ1cnRoZXIgbm9ybWFsaXppbmcgb2YgdGhlIG1pbl9yYXRlcy4KKyAgIFJldHVybnM6CisgICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMuCisgICAgICAgb3IKKyAgICAgMCAtIGlmIGFsbCB0aGUgbWluX3JhdGVzIGFyZSAwLgorICAgICBJbiB0aGUgbGF0ZXIgY2FzZSBmYWluZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCisgICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwgYmUgc2V0IHRvIDEuCisgKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBhbGxfemVybyA9IDE7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgdm47CisKKwlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7CisJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7CisJCWludCBmdW5jID0gMip2biArIHBvcnQ7CisJCXUzMiB2bl9jZmcgPQorCQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCQl1MzIgdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgorCQkJCSAgIEZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7CisKKwkJLyogU2tpcCBoaWRkZW4gdm5zICovCisJCWlmICh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpCisJCQljb250aW51ZTsKKworCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KKwkJaWYgKCF2bl9taW5fcmF0ZSkKKwkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOworCQllbHNlCisJCQlhbGxfemVybyA9IDA7CisKKwkJYnAtPnZuX3dlaWdodF9zdW0gKz0gdm5fbWluX3JhdGU7CisJfQorCisJLyogLi4uIG9ubHkgaWYgYWxsIG1pbiByYXRlcyBhcmUgemVyb3MgLSBkaXNhYmxlIGZhaXJuZXNzICovCisJaWYgKGFsbF96ZXJvKQorCQlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfZnVuYyhzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCB0c3Rvcm1fZXRoX2Z1bmN0aW9uX2NvbW1vbl9jb25maWcgdHN0b3JtX2NvbmZpZyA9IHswfTsKIAlzdHJ1Y3Qgc3RhdHNfaW5kaWNhdGlvbl9mbGFncyBzdGF0c19mbGFncyA9IHswfTsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JaW50IGk7CisJaW50IGksIGo7CisJdTMyIG9mZnNldDsKIAl1MTYgbWF4X2FnZ19zaXplOwogCiAJaWYgKGlzX211bHRpKGJwKSkgewotCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTOworCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTKGJwKTsKIAkJdHN0b3JtX2NvbmZpZy5yc3NfcmVzdWx0X21hc2sgPSBNVUxUSV9NQVNLOwogCX0KKwlpZiAoSVNfRTFITUYoYnApKQorCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyB8PQorCQkJCVRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU07CiAKIAl0c3Rvcm1fY29uZmlnLmxlYWRpbmdfY2xpZW50X2lkID0gQlBfTF9JRChicCk7CiAKQEAgLTQ3MDAsMTcgKzQ5MzcsMjkgQEAKIAlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsgLyogbm8gcnggdW50aWwgbGluayBpcyB1cCAqLwogCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKIAotCS8qIHJlc2V0IHhzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBpKyspIHsKLQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBCUF9DTF9JRChicCkpICsKLQkJICAgICAgIGkqNCwgMCk7Ci0JfQotCS8qIHJlc2V0IHRzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBpKyspIHsKLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBCUF9DTF9JRChicCkpICsKLQkJICAgICAgIGkqNCwgMCk7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJdTggY2xfaWQgPSBicC0+ZnBbaV0uY2xfaWQ7CisKKwkJLyogcmVzZXQgeHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLworCQlvZmZzZXQgPSBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJIFhTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKKwkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKKworCQkvKiByZXNldCB0c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCisJCW9mZnNldCA9IEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQkgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7CisJCWZvciAoaiA9IDA7CisJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQorCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOworCisJCS8qIHJlc2V0IHVzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KKwkJb2Zmc2V0ID0gQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCSBVU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKKwkJZm9yIChqID0gMDsKKwkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCisJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7CiAJfQogCiAJLyogSW5pdCBzdGF0aXN0aWNzIHJlbGF0ZWQgY29udGV4dCAqLwpAQCAtNDcyNiw2ICs0OTc1LDExIEBACiAJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKIAkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKIAorCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LAorCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMV0pOworCiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpLAogCSAgICAgICAoKHUzMiAqKSZzdGF0c19mbGFncylbMF0pOwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCkBAIC00NzQ1LDYgKzQ5OTksMTMgQEAKIAkgICAgICAgVFNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCiAJICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKIAorCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSwKKwkgICAgICAgVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIGZ3X3N0YXRzKSkpOworCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jKSArIDQsCisJICAgICAgIFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKKwogCWlmIChDSElQX0lTX0UxSChicCkpIHsKIAkJUkVHX1dSOChicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VULAogCQkJSVNfRTFITUYoYnApKTsKQEAgLTQ3NjQsMjAgKzUwMjUsOTEgQEAKIAkJbWluKCh1MzIpKG1pbigodTMyKTgsICh1MzIpTUFYX1NLQl9GUkFHUykgKgogCQkJICBTR0VfUEFHRV9TSVpFICogUEFHRVNfUEVSX1NHRSksCiAJCSAgICAodTMyKTB4ZmZmZik7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgRlBfQ0xfSUQoZnApKSwKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAogCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKIAkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIEZQX0NMX0lEKGZwKSkgKyA0LAorCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCkgKyA0LAogCQkgICAgICAgVTY0X0hJKGZwLT5yeF9jb21wX21hcHBpbmcpKTsKIAogCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpLAorCQkJIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCiAJCQkgbWF4X2FnZ19zaXplKTsKIAl9CisKKwkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KKwlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCXN0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoIHJ4X3BhdXNlID0gezB9OworCisJCXJ4X3BhdXNlLmJkX3Rocl9sb3cgPSAyNTA7CisJCXJ4X3BhdXNlLmNxZV90aHJfbG93ID0gMjUwOworCQlyeF9wYXVzZS5jb3MgPSAxOworCQlyeF9wYXVzZS5zZ2VfdGhyX2xvdyA9IDA7CisJCXJ4X3BhdXNlLmJkX3Rocl9oaWdoID0gMzUwOworCQlyeF9wYXVzZS5jcWVfdGhyX2hpZ2ggPSAzNTA7CisJCXJ4X3BhdXNlLnNnZV90aHJfaGlnaCA9IDA7CisKKwkJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKKwkJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkgeworCQkJCXJ4X3BhdXNlLnNnZV90aHJfbG93ID0gMTUwOworCQkJCXJ4X3BhdXNlLnNnZV90aHJfaGlnaCA9IDI1MDsKKwkJCX0KKworCisJCQlvZmZzZXQgPSBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJCSBVU1RPUk1fRVRIX1JJTkdfUEFVU0VfREFUQV9PRkZTRVQocG9ydCwKKwkJCQkJCQkJICAgZnAtPmNsX2lkKTsKKwkJCWZvciAoaiA9IDA7CisJCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9ldGhfcnhfcGF1c2VfZGF0YV9lMWgpLzQ7CisJCQkgICAgIGorKykKKwkJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwKKwkJCQkgICAgICAgKCh1MzIgKikmcnhfcGF1c2UpW2pdKTsKKwkJfQorCX0KKworCW1lbXNldCgmKGJwLT5jbW5nKSwgMCwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkpOworCisJLyogSW5pdCByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGNvbnRleHRzICovCisJaWYgKElTX0UxSE1GKGJwKSkgeworCQlpbnQgdm47CisKKwkJLyogRHVyaW5nIGluaXQgdGhlcmUgaXMgbm8gYWN0aXZlIGxpbmsKKwkJICAgVW50aWwgbGluayBpcyB1cCwgc2V0IGxpbmsgcmF0ZSB0byAxMEdicHMgKi8KKwkJYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnApOworCisJCWJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShicCk7CisKKwkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQorCQkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0KTsKKworCQkvKiBFbmFibGUgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyAqLworCQlicC0+Y21uZy5mbGFncy5jbW5nX2VuYWJsZXMgPQorCQkJCQlDTU5HX0ZMQUdTX1BFUl9QT1JUX1JBVEVfU0hBUElOR19WTjsKKwkJaWYgKGJwLT52bl93ZWlnaHRfc3VtKQorCQkJYnAtPmNtbmcuZmxhZ3MuY21uZ19lbmFibGVzIHw9CisJCQkJCUNNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfVk47CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19JRlVQLCAiQWxsIE1JTiB2YWx1ZXMgYXJlIHplcm9lcyIKKwkJCSAgICIgIGZhaXJuZXNzIHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCX0gZWxzZSB7CisJCS8qIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgYXJlIGRpc2FibGVkICovCisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAic2luZ2xlIGZ1bmN0aW9uIG1vZGUgIG1pbm1heCB3aWxsIGJlIGRpc2FibGVkXG4iKTsKKwl9CisKKworCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCWlmIChicC0+cG9ydC5wbWYpCisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKKwkJCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCSAgICAgICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkgKiA0LAorCQkJICAgICAgICgodTMyICopKCZicC0+Y21uZykpW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKQpAQCAtNDgxNCwxMyArNTE0NiwxNyBAQAogCQlmcC0+Y2xfaWQgPSBCUF9MX0lEKGJwKSArIGk7CiAJCWZwLT5zYl9pZCA9IGZwLT5jbF9pZDsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJibngyeF9pbml0X3NiKCVwLCVwKSBpbmRleCAlZCAgY2xfaWQgJWQgIHNiICVkXG4iLAotCQkgICBicCwgZnAtPnN0YXR1c19ibGssIGksIEZQX0NMX0lEKGZwKSwgRlBfU0JfSUQoZnApKTsKKwkJICAgInF1ZXVlWyVkXTogIGJueDJ4X2luaXRfc2IoJXAsJXApICBjbF9pZCAlZCAgc2IgJWRcbiIsCisJCSAgIGksIGJwLCBmcC0+c3RhdHVzX2JsaywgZnAtPmNsX2lkLCBmcC0+c2JfaWQpOwogCQlibngyeF9pbml0X3NiKGJwLCBmcC0+c3RhdHVzX2JsaywgZnAtPnN0YXR1c19ibGtfbWFwcGluZywKLQkJCSAgICAgIEZQX1NCX0lEKGZwKSk7CisJCQkgICAgICBmcC0+c2JfaWQpOwogCQlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOwogCX0KIAorCS8qIGVuc3VyZSBzdGF0dXMgYmxvY2sgaW5kaWNlcyB3ZXJlIHJlYWQgKi8KKwlybWIoKTsKKworCiAJYm54MnhfaW5pdF9kZWZfc2IoYnAsIGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCiAJCQkgIERFRl9TQl9JRCk7CiAJYm54MnhfdXBkYXRlX2RzYl9pZHgoYnApOwpAQCAtNTE5OCw2ICs1NTM0LDggQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX1NSQ19FTkRJQU5fTSwgMSk7CiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9DRFVfRU5ESUFOX00sIDEpOwogCVJFR19XUihicCwgUFhQMl9SRUdfUlFfREJHX0VORElBTl9NLCAxKTsKKwkvKiBtYWtlIHN1cmUgdGhpcyB2YWx1ZSBpcyAwICovCisJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9IQ19FTkRJQU5fTSwgMCk7CiAKIC8qCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUEJGX1NXQVBfTU9ERSwgMSk7ICovCiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SRF9RTV9TV0FQX01PREUsIDEpOwpAQCAtNTI2NiwxNCArNTYwNCw2IEBACiAJfQogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9DT01NT05fU1RBUlQsIEJSQjFfQ09NTU9OX0VORCk7Ci0JaWYgKENISVBfUkVWX0lTX1NMT1coYnApKSB7Ci0JCS8qIGZpeCBmb3IgZW11bGF0aW9uIGFuZCBGUEdBIGZvciBubyBwYXVzZSAqLwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAsIDUxMyk7Ci0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMSwgNTEzKTsKLQkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAsIDApOwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMSwgMCk7Ci0JfQotCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUFJTX0NPTU1PTl9TVEFSVCwgUFJTX0NPTU1PTl9FTkQpOwogCVJFR19XUihicCwgUFJTX1JFR19BX1BSU1VfMjAsIDB4Zik7CiAJLyogc2V0IE5JQyBtb2RlICovCkBAIC01Mjg2LDM3ICs1NjE2LDEwIEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9DT01NT05fU1RBUlQsIFVTRE1fQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgWFNETV9DT01NT05fU1RBUlQsIFhTRE1fQ09NTU9OX0VORCk7CiAKLQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVRTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJQ1NUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlYU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCVVTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQl9IGVsc2UgeyAvKiBFMSAqLwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JfQorCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9DT01NT05fU1RBUlQsIFRTRU1fQ09NTU9OX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9DT01NT05fU1RBUlQsIFVTRU1fQ09NTU9OX0VORCk7CkBAIC01MzM4LDggKzU2NDEsNyBAQAogCQlSRUdfV1IoYnAsIGksIDB4YzBjYWMwMWEpOwogCQkvKiBUT0RPOiByZXBsYWNlIHdpdGggc29tZXRoaW5nIG1lYW5pbmdmdWwgKi8KIAl9Ci0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJYm54MnhfaW5pdF9ibG9jayhicCwgU1JDSF9DT01NT05fU1RBUlQsIFNSQ0hfQ09NTU9OX0VORCk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgU1JDSF9DT01NT05fU1RBUlQsIFNSQ0hfQ09NTU9OX0VORCk7CiAJUkVHX1dSKGJwLCBTUkNfUkVHX1NPRlRfUlNULCAwKTsKIAogCWlmIChzaXplb2YodW5pb24gY2R1X2NvbnRleHQpICE9IDEwMjQpCkBAIC01MzU4LDYgKzU2NjAsMTEgQEAKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19DT01NT05fU1RBUlQsIENGQ19DT01NT05fRU5EKTsKIAlSRUdfV1IoYnAsIENGQ19SRUdfSU5JVF9SRUcsIDB4N0ZGKTsKKwkvKiBlbmFibGUgY29udGV4dCB2YWxpZGF0aW9uIGludGVycnVwdCBmcm9tIENGQyAqLworCVJFR19XUihicCwgQ0ZDX1JFR19DRkNfSU5UX01BU0ssIDApOworCisJLyogc2V0IHRoZSB0aHJlc2hvbGRzIHRvIHByZXZlbnQgQ0ZDL0NEVSByYWNlICovCisJUkVHX1dSKGJwLCBDRkNfUkVHX0RFQlVHMCwgMHgyMDAyMDAwMCk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBIQ19DT01NT05fU1RBUlQsIEhDX0NPTU1PTl9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQUVVX0NPTU1PTl9TVEFSVCwgTUlTQ19BRVVfQ09NTU9OX0VORCk7CkBAIC01NDEwLDkgKzU3MTcsMTQgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgewotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRzoKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IDE7CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkvKiBGYW4gZmFpbHVyZSBpcyBpbmRpY2F0ZWQgYnkgU1BJTyA1ICovCiAJCWJueDJ4X3NldF9zcGlvKGJwLCBNSVNDX1JFR0lTVEVSU19TUElPXzUsCiAJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aKTsKQEAgLTU0NTEsNiArNTc2Myw3IEBACiBzdGF0aWMgaW50IGJueDJ4X2luaXRfcG9ydChzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJdTMyIGxvdywgaGlnaDsKIAl1MzIgdmFsOwogCiAJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIHBvcnQgaW5pdCAgcG9ydCAleFxuIiwgcG9ydCk7CkBAIC01NDg1LDYgKzU3OTgsOCBAQAogCVJFR19XUihicCwgUFhQMl9SRUdfUFNXUlFfU1JDMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKICNlbmRpZgogCS8qIFBvcnQgQ01zIGNvbWUgaGVyZSAqLworCWJueDJ4X2luaXRfYmxvY2soYnAsIChwb3J0ID8gWENNX1BPUlQxX1NUQVJUIDogWENNX1BPUlQwX1NUQVJUKSwKKwkJCSAgICAgKHBvcnQgPyBYQ01fUE9SVDFfRU5EIDogWENNX1BPUlQwX0VORCkpOwogCiAJLyogUG9ydCBRTSBjb21lcyBoZXJlICovCiAjaWZkZWYgQkNNX0lTQ1NJCkBAIC01NDk1LDEyICs1ODEwLDM4IEBACiAJCQkgICAgIGZ1bmMgPyBUSU1FUlNfUE9SVDFfRU5EIDogVElNRVJTX1BPUlQwX0VORCk7CiAjZW5kaWYKIAkvKiBQb3J0IERRIGNvbWVzIGhlcmUgKi8KLQkvKiBQb3J0IEJSQjEgY29tZXMgaGVyZSAqLworCisJYm54MnhfaW5pdF9ibG9jayhicCwgKHBvcnQgPyBCUkIxX1BPUlQxX1NUQVJUIDogQlJCMV9QT1JUMF9TVEFSVCksCisJCQkgICAgIChwb3J0ID8gQlJCMV9QT1JUMV9FTkQgOiBCUkIxX1BPUlQwX0VORCkpOworCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSAmJiAhQ0hJUF9JU19FMUgoYnApKSB7CisJCS8qIG5vIHBhdXNlIGZvciBlbXVsYXRpb24gYW5kIEZQR0EgKi8KKwkJbG93ID0gMDsKKwkJaGlnaCA9IDUxMzsKKwl9IGVsc2UgeworCQlpZiAoSVNfRTFITUYoYnApKQorCQkJbG93ID0gKChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKSA/IDE2MCA6IDI0Nik7CisJCWVsc2UgaWYgKGJwLT5kZXYtPm10dSA+IDQwOTYpIHsKKwkJCWlmIChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKQorCQkJCWxvdyA9IDE2MDsKKwkJCWVsc2UgeworCQkJCXZhbCA9IGJwLT5kZXYtPm10dTsKKwkJCQkvKiAoMjQqMTAyNCArIHZhbCo0KS8yNTYgKi8KKwkJCQlsb3cgPSA5NiArICh2YWwvNjQpICsgKCh2YWwgJSA2NCkgPyAxIDogMCk7CisJCQl9CisJCX0gZWxzZQorCQkJbG93ID0gKChicC0+ZmxhZ3MgJiBPTkVfUE9SVF9GTEFHKSA/IDgwIDogMTYwKTsKKwkJaGlnaCA9IGxvdyArIDU2OwkvKiAxNCoxMDI0LzI1NiAqLworCX0KKwlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMCArIHBvcnQqNCwgbG93KTsKKwlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAgKyBwb3J0KjQsIGhpZ2gpOworCisKIAkvKiBQb3J0IFBSUyBjb21lcyBoZXJlICovCiAJLyogUG9ydCBUU0RNIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IENTRE0gY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgVVNETSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBYU0RNIGNvbWVzIGhlcmUgKi8KKwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBUU0VNX1BPUlQxX1NUQVJUIDogVFNFTV9QT1JUMF9TVEFSVCwKIAkJCSAgICAgcG9ydCA/IFRTRU1fUE9SVDFfRU5EIDogVFNFTV9QT1JUMF9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBVU0VNX1BPUlQxX1NUQVJUIDogVVNFTV9QT1JUMF9TVEFSVCwKQEAgLTU1MDksNiArNTg1MCw3IEBACiAJCQkgICAgIHBvcnQgPyBDU0VNX1BPUlQxX0VORCA6IENTRU1fUE9SVDBfRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gWFNFTV9QT1JUMV9TVEFSVCA6IFhTRU1fUE9SVDBfU1RBUlQsCiAJCQkgICAgIHBvcnQgPyBYU0VNX1BPUlQxX0VORCA6IFhTRU1fUE9SVDBfRU5EKTsKKwogCS8qIFBvcnQgVVBCIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFhQQiBjb21lcyBoZXJlICovCiAKQEAgLTU1NjcsMzYgKzU5MDksNjMgQEAKIAkvKiBQb3J0IEVNQUMxIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IERCVSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBEQkcgY29tZXMgaGVyZSAqLworCiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IE5JR19QT1JUMV9TVEFSVCA6IE5JR19QT1JUMF9TVEFSVCwKIAkJCSAgICAgcG9ydCA/IE5JR19QT1JUMV9FTkQgOiBOSUdfUE9SVDBfRU5EKTsKIAogCVJFR19XUihicCwgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwgKyBwb3J0KjQsIDEpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQl1MzIgd3N1bTsKLQkJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IG1fY21uZ19wb3J0OwotCQlpbnQgdm47Ci0KIAkJLyogMHgyIGRpc2FibGUgZTFob3YsIDB4MSBlbmFibGUgKi8KIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NRiArIHBvcnQqNCwKIAkJICAgICAgIChJU19FMUhNRihicCkgPyAweDEgOiAweDIpKTsKIAotCQkvKiBJbml0IFJBVEUgU0hBUElORyBhbmQgRkFJUk5FU1MgY29udGV4dHMuCi0JCSAgIEluaXRpYWxpemUgYXMgaWYgdGhlcmUgaXMgMTBHIGxpbmsuICovCi0JCXdzdW0gPSBibngyeF9jYWxjX3ZuX3dzdW0oYnApOwotCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwLCAoaW50KXdzdW0sIDEwMDAwLCAmbV9jbW5nX3BvcnQpOwotCQlpZiAoSVNfRTFITUYoYnApKQotCQkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKQotCQkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCwKLQkJCQkJd3N1bSwgMTAwMDAsICZtX2NtbmdfcG9ydCk7CisJCS8qIHN1cHBvcnQgcGF1c2UgcmVxdWVzdHMgZnJvbSBVU0RNLCBUU0RNIGFuZCBCUkIgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfRUdSRVNTX1NSQ19FTkFCTEVfMCArIHBvcnQqNCwgMHg3KTsKKworCQl7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19FTkFCTEVfMCArIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19PVVRfRU5fMCArIHBvcnQqNCwgMCk7CisJCQlSRUdfV1IoYnAsIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAgKyBwb3J0KjQsIDEpOworCQl9CiAJfQogCiAJLyogUG9ydCBNQ1AgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgRE1BRSBjb21lcyBoZXJlICovCiAKLQlzd2l0Y2ggKGJwLT5jb21tb24uYm9hcmQgJiBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfTUFTSykgewotCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRzoKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkc6CisJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQl7CisJCXUzMiBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZSwgYWV1X2dwaW9fbWFzaywgb2Zmc2V0OworCisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCisJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlBVVF9ISV9aLCBwb3J0KTsKKworCQkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiB0aGUgc3dhcCByZWdpc3RlciBpcworCQkgICBzZXQgYW5kIGFjdGl2ZSAqLworCQlzd2FwX3ZhbCA9IFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApOworCQlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKKworCQkvKiBTZWxlY3QgZnVuY3Rpb24gdXBvbiBwb3J0LXN3YXAgY29uZmlndXJhdGlvbiAqLworCQlpZiAocG9ydCA9PSAwKSB7CisJCQlvZmZzZXQgPSBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzA7CisJCQlhZXVfZ3Bpb19tYXNrID0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpID8KKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xIDoKKwkJCQlBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wOworCQl9IGVsc2UgeworCQkJb2Zmc2V0ID0gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wOworCQkJYWV1X2dwaW9fbWFzayA9IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKSA/CisJCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMCA6CisJCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMTsKKwkJfQorCQl2YWwgPSBSRUdfUkQoYnAsIG9mZnNldCk7CisJCS8qIGFkZCBHUElPMyB0byBncm91cCAqLworCQl2YWwgfD0gYWV1X2dwaW9fbWFzazsKKwkJUkVHX1dSKGJwLCBvZmZzZXQsIHZhbCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCS8qIGFkZCBTUElPIDUgdG8gZ3JvdXAgMCAqLwogCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7CiAJCXZhbCB8PSBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKQEAgLTU2NDIsMTAgKzYwMTEsMTcgQEAKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJdTMyIGFkZHIsIHZhbDsKIAlpbnQgaTsKIAogCURQKEJOWDJYX01TR19NQ1AsICJzdGFydGluZyBmdW5jIGluaXQgIGZ1bmMgJXhcbiIsIGZ1bmMpOwogCisJLyogc2V0IE1TSSByZWNvbmZpZ3VyZSBjYXBhYmlsaXR5ICovCisJYWRkciA9IChwb3J0ID8gSENfUkVHX0NPTkZJR18xIDogSENfUkVHX0NPTkZJR18wKTsKKwl2YWwgPSBSRUdfUkQoYnAsIGFkZHIpOworCXZhbCB8PSBIQ19DT05GSUdfMF9SRUdfTVNJX0FUVE5fRU5fMDsKKwlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisKIAlpID0gRlVOQ19JTFRfQkFTRShmdW5jKTsKIAogCWJueDJ4X2lsdF93cihicCwgaSwgYm54Mnhfc3BfbWFwcGluZyhicCwgY29udGV4dCkpOwpAQCAtNTY3NSw5ICs2MDUxLDYgQEAKIAl9CiAJYm54MnhfaW5pdF9ibG9jayhicCwgaGNfbGltaXRzW2Z1bmNdWzBdLCBoY19saW1pdHNbZnVuY11bMV0pOwogCi0JaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJUkVHX1dSKGJwLCBIQ19SRUdfRlVOQ19OVU1fUDAgKyBwb3J0KjQsIGZ1bmMpOwotCiAJLyogUmVzZXQgUENJRSBlcnJvcnMgZm9yIGRlYnVnICovCiAJUkVHX1dSKGJwLCAweDIxMTQsIDB4ZmZmZmZmZmYpOwogCVJFR19XUihicCwgMHgyMTIwLCAweGZmZmZmZmZmKTsKQEAgLTU4MDYsMjAgKzYxNzksMTkgQEAKIAlpbnQgaTsKIAogCS8qIGZhc3RwYXRoICovCisJLyogQ29tbW9uICovCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAotCQkvKiBTdGF0dXMgYmxvY2tzICovCisJCS8qIHN0YXR1cyBibG9ja3MgKi8KIAkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spICsKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9kYl9kYXRhKSk7CisJfQorCS8qIFJ4ICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAotCQkvKiBmYXN0IHBhdGggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjIHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKLQorCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwogCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZykpOwogCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKIAkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKQEAgLTU4MzYsNiArNjIwOCwxNSBAQAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCiAJCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwogCX0KKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisKKwkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCisJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSk7CisJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJfQogCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwogCiAJQk5YMlhfUENJX0ZSRUUoYnAtPmRlZl9zdGF0dXNfYmxrLCBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKQEAgLTU4NzgsMjkgKzYyNTksMjAgQEAKIAlpbnQgaTsKIAogCS8qIGZhc3RwYXRoICovCisJLyogQ29tbW9uICovCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJYm54MnhfZnAoYnAsIGksIGJwKSA9IGJwOwogCi0JCS8qIFN0YXR1cyBibG9ja3MgKi8KKwkJLyogc3RhdHVzIGJsb2NrcyAqLwogCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAogCQkJCSZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKIAkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGJfZGF0YSkpOworCX0KKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAKLQkJYm54MnhfZnAoYnAsIGksIGh3X3R4X3Byb2RzKSA9Ci0JCQkJKHZvaWQgKikoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspICsgMSk7Ci0KLQkJYm54MnhfZnAoYnAsIGksIHR4X3Byb2RzX21hcHBpbmcpID0KLQkJCQlibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSArCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayk7Ci0KLQkJLyogZmFzdCBwYXRoIHJpbmdzOiB0eF9idWYgdHhfZGVzYyByeF9idWYgcnhfZGVzYyByeF9jb21wICovCi0JCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBzd190eF9iZCkgKiBOVU1fVFhfQkQpOwotCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7Ci0KKwkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KIAkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSwKIAkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X2JkKSAqIE5VTV9SWF9CRCk7CiAJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKQEAgLTU5MTksNiArNjI5MSwyMyBAQAogCQkJCSZibngyeF9mcChicCwgaSwgcnhfc2dlX21hcHBpbmcpLAogCQkJCUJDTV9QQUdFX1NJWkUgKiBOVU1fUlhfU0dFX1BBR0VTKTsKIAl9CisJLyogVHggKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgeworCisJCWJueDJ4X2ZwKGJwLCBpLCBod190eF9wcm9kcykgPQorCQkJCSh2b2lkICopKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSArIDEpOworCisJCWJueDJ4X2ZwKGJwLCBpLCB0eF9wcm9kc19tYXBwaW5nKSA9CisJCQkJYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZykgKworCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spOworCisJCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3dfdHhfYmQpICogTlVNX1RYX0JEKTsKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOworCX0KIAkvKiBlbmQgb2YgZmFzdHBhdGggKi8KIAogCUJOWDJYX1BDSV9BTExPQyhicC0+ZGVmX3N0YXR1c19ibGssICZicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKQEAgLTU5NzIsNyArNjM2MSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCXUxNiBiZF9jb25zID0gZnAtPnR4X2JkX2NvbnM7CkBAIC01OTkwLDcgKzYzNzksNyBAQAogewogCWludCBpLCBqOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0JEOyBpKyspIHsKQEAgLTYwMDIsOCArNjM5MSw3IEBACiAKIAkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCiAJCQkJCSBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJIGJwLT5yeF9idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQkJcnhfYnVmLT5za2IgPSBOVUxMOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNjAzNCwxMCArNjQyMiw2IEBACiAJCSAgICJzdGF0ZSAleFxuIiwgaSwgYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAogCQkgICBibngyeF9mcChicCwgaSwgc3RhdGUpKTsKIAotCQlpZiAoYm54MnhfZnAoYnAsIGksIHN0YXRlKSAhPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQpCi0JCQlCTlgyWF9FUlIoIklSUSBvZiBmcCAjJWQgYmVpbmcgZnJlZWQgd2hpbGUgIgotCQkJCSAgInN0YXRlICE9IGNsb3NlZFxuIiwgaSk7Ci0KIAkJZnJlZV9pcnEoYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLCAmYnAtPmZwW2ldKTsKIAl9CiB9CkBAIC02MDQ5LDMyICs2NDMzLDM3IEBACiAJCXBjaV9kaXNhYmxlX21zaXgoYnAtPnBkZXYpOwogCQlicC0+ZmxhZ3MgJj0gflVTSU5HX01TSVhfRkxBRzsKIAorCX0gZWxzZSBpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpIHsKKwkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7CisJCXBjaV9kaXNhYmxlX21zaShicC0+cGRldik7CisJCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJX0ZMQUc7CisKIAl9IGVsc2UKIAkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfZW5hYmxlX21zaXgoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgaSwgcmMsIG9mZnNldDsKKwlpbnQgaSwgcmMsIG9mZnNldCA9IDE7CisJaW50IGlndV92ZWMgPSAwOwogCi0JYnAtPm1zaXhfdGFibGVbMF0uZW50cnkgPSAwOwotCW9mZnNldCA9IDE7Ci0JRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWzBdLmVudHJ5ID0gMCAoc2xvd3BhdGgpXG4iKTsKKwlicC0+bXNpeF90YWJsZVswXS5lbnRyeSA9IGlndV92ZWM7CisJRFAoTkVUSUZfTVNHX0lGVVAsICJtc2l4X3RhYmxlWzBdLmVudHJ5ID0gJWQgKHNsb3dwYXRoKVxuIiwgaWd1X3ZlYyk7CiAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCQlpbnQgaWd1X3ZlYyA9IG9mZnNldCArIGkgKyBCUF9MX0lEKGJwKTsKLQorCQlpZ3VfdmVjID0gQlBfTF9JRChicCkgKyBvZmZzZXQgKyBpOwogCQlicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS5lbnRyeSA9IGlndV92ZWM7CiAJCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVslZF0uZW50cnkgPSAlZCAiCiAJCSAgICIoZmFzdHBhdGggIyV1KVxuIiwgaSArIG9mZnNldCwgaWd1X3ZlYywgaSk7CiAJfQogCiAJcmMgPSBwY2lfZW5hYmxlX21zaXgoYnAtPnBkZXYsICZicC0+bXNpeF90YWJsZVswXSwKLQkJCSAgICAgYnAtPm51bV9xdWV1ZXMgKyBvZmZzZXQpOworCQkJICAgICBCTlgyWF9OVU1fUVVFVUVTKGJwKSArIG9mZnNldCk7CiAJaWYgKHJjKSB7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTVNJLVggaXMgbm90IGF0dGFpbmFibGVcbiIpOwotCQlyZXR1cm4gLTE7CisJCURQKE5FVElGX01TR19JRlVQLCAiTVNJLVggaXMgbm90IGF0dGFpbmFibGUgIHJjICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKIAl9CisKIAlicC0+ZmxhZ3MgfD0gVVNJTkdfTVNJWF9GTEFHOwogCiAJcmV0dXJuIDA7CkBAIC02MDkyLDI3ICs2NDgxLDYwIEBACiAJfQogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJc3ByaW50ZihmcC0+bmFtZSwgIiVzLmZwJWQiLCBicC0+ZGV2LT5uYW1lLCBpKTsKIAkJcmMgPSByZXF1ZXN0X2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsCi0JCQkJIGJueDJ4X21zaXhfZnBfaW50LCAwLAotCQkJCSBicC0+ZGV2LT5uYW1lLCAmYnAtPmZwW2ldKTsKKwkJCQkgYm54MnhfbXNpeF9mcF9pbnQsIDAsIGZwLT5uYW1lLCBmcCk7CiAJCWlmIChyYykgewotCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkICByYyAtJWRcbiIsCi0JCQkJICBpICsgb2Zmc2V0LCAtcmMpOworCQkJQk5YMlhfRVJSKCJyZXF1ZXN0IGZwICMlZCBpcnEgZmFpbGVkICByYyAlZFxuIiwgaSwgcmMpOwogCQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCWJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9JUlE7CisJCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKIAl9CiAKKwlpID0gQk5YMlhfTlVNX1FVRVVFUyhicCk7CisJaWYgKGlzX211bHRpKGJwKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJICAgICAgICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcCAlZCAtICVkXG4iLAorCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAorCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0XS52ZWN0b3IsCisJCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcCAlZFxuIiwKKwkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKKwkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfZW5hYmxlX21zaShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCByYzsKKworCXJjID0gcGNpX2VuYWJsZV9tc2koYnAtPnBkZXYpOworCWlmIChyYykgeworCQlEUChORVRJRl9NU0dfSUZVUCwgIk1TSSBpcyBub3QgYXR0YWluYWJsZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJYnAtPmZsYWdzIHw9IFVTSU5HX01TSV9GTEFHOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfcmVxX2lycShzdHJ1Y3QgYm54MnggKmJwKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwogCi0JcmMgPSByZXF1ZXN0X2lycShicC0+cGRldi0+aXJxLCBibngyeF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykKKwkJZmxhZ3MgPSAwOworCWVsc2UKKwkJZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKworCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54MnhfaW50ZXJydXB0LCBmbGFncywKIAkJCSBicC0+ZGV2LT5uYW1lLCBicC0+ZGV2KTsKIAlpZiAoIXJjKQogCQlibngyeF9mcChicCwgMCwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfSVJROwpAQCAtNjEyNCw3ICs2NTQ2LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluYXBpX2VuYWJsZSgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIH0KIApAQCAtNjEzMiw3ICs2NTU0LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluYXBpX2Rpc2FibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiB9CiAKQEAgLTYxNDAsMTAgKzY1NjIsMTAgQEAKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYnAtPmludHJfc2VtKSkgewogCQlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgewotCQkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQotCQkJCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7CiAJCQlibngyeF9uYXBpX2VuYWJsZShicCk7CiAJCQlibngyeF9pbnRfZW5hYmxlKGJwKTsKKwkJCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKKwkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CiAJCX0KIAl9CiB9CkBAIC02MTUyLDEwICs2NTc0LDggQEAKIHsKIAlibngyeF9pbnRfZGlzYWJsZV9zeW5jKGJwLCBkaXNhYmxlX2h3KTsKIAlibngyeF9uYXBpX2Rpc2FibGUoYnApOwotCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7Ci0JCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7Ci0JCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JfQorCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7CisJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KIH0KIAogLyoKQEAgLTYxNzEsOSArNjU5MSw5IEBACiAJICogdW5pY2FzdHMgMC0zMTpwb3J0MCAzMi02Mzpwb3J0MQogCSAqIG11bHRpY2FzdCA2NC0xMjc6cG9ydDAgMTI4LTE5MTpwb3J0MQogCSAqLwotCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDI7CisJY29uZmlnLT5oZHIubGVuZ3RoID0gMjsKIAljb25maWctPmhkci5vZmZzZXQgPSBwb3J0ID8gMzIgOiAwOwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkvKiBwcmltYXJ5IE1BQyAqLwpAQCAtNjE5OCw5ICs2NjE4LDkgQEAKIAkgICBjb25maWctPmNvbmZpZ190YWJsZVswXS5jYW1fZW50cnkubHNiX21hY19hZGRyKTsKIAogCS8qIGJyb2FkY2FzdCAqLwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPSAweGZmZmY7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5Lm1pZGRsZV9tYWNfYWRkciA9IDB4ZmZmZjsKLQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubHNiX21hY19hZGRyID0gMHhmZmZmOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPSBjcHVfdG9fbGUxNigweGZmZmYpOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIgPSBjcHVfdG9fbGUxNigweGZmZmYpOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5sc2JfbWFjX2FkZHIgPSBjcHVfdG9fbGUxNigweGZmZmYpOwogCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5mbGFncyA9IGNwdV90b19sZTE2KHBvcnQpOwogCWlmIChzZXQpCiAJCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9CkBAIC02MjI5LDkgKzY2NDksOSBAQAogCSAqIHVuaWNhc3RzOiBieSBmdW5jIG51bWJlcgogCSAqIG11bHRpY2FzdDogMjArRlVOQyoyMCwgMjAgZWFjaAogCSAqLwotCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IDE7CisJY29uZmlnLT5oZHIubGVuZ3RoID0gMTsKIAljb25maWctPmhkci5vZmZzZXQgPSBCUF9GVU5DKGJwKTsKLQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJLyogcHJpbWFyeSBNQUMgKi8KQEAgLTYyNjUsNyArNjY4NSw3IEBACiAJCQkgICAgIGludCAqc3RhdGVfcCwgaW50IHBvbGwpCiB7CiAJLyogY2FuIHRha2UgYSB3aGlsZSBpZiBhbnkgcG9ydCBpcyBydW5uaW5nICovCi0JaW50IGNudCA9IDUwMDsKKwlpbnQgY250ID0gNTAwMDsKIAogCURQKE5FVElGX01TR19JRlVQLCAiJXMgZm9yIHN0YXRlIHRvIGJlY29tZSAleCBvbiBJRFggWyVkXVxuIiwKIAkgICBwb2xsID8gInBvbGxpbmciIDogIndhaXRpbmciLCBzdGF0ZSwgaWR4KTsKQEAgLTYyODMsOCArNjcwMywxMiBAQAogCQl9CiAKIAkJbWIoKTsgLyogc3RhdGUgaXMgY2hhbmdlZCBieSBibngyeF9zcF9ldmVudCgpICovCi0JCWlmICgqc3RhdGVfcCA9PSBzdGF0ZSkKKwkJaWYgKCpzdGF0ZV9wID09IHN0YXRlKSB7CisjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJleGl0ICAoY250ICVkKVxuIiwgNTAwMCAtIGNudCk7CisjZW5kaWYKIAkJCXJldHVybiAwOworCQl9CiAKIAkJbXNsZWVwKDEpOwogCX0KQEAgLTYzMTcsMTkgKzY3NDEsNjggQEAKIAogc3RhdGljIGludCBibngyeF9zZXR1cF9tdWx0aShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgaW5kZXgpCiB7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOworCiAJLyogcmVzZXQgSUdVIHN0YXRlICovCi0JYm54MnhfYWNrX3NiKGJwLCBicC0+ZnBbaW5kZXhdLnNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKKwlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7CiAKIAkvKiBTRVRVUCByYW1yb2QgKi8KLQlicC0+ZnBbaW5kZXhdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfT1BFTklORzsKLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAsIGluZGV4LCAwLCBpbmRleCwgMCk7CisJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfT1BFTklORzsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAsIGluZGV4LCAwLAorCQkgICAgICBmcC0+Y2xfaWQsIDApOwogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwogCXJldHVybiBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfT1BFTiwgaW5kZXgsCi0JCQkJICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDApOworCQkJCSAmKGZwLT5zdGF0ZSksIDApOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X2ludF9tb2RlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IG51bV9xdWV1ZXM7CisKKwlzd2l0Y2ggKGludF9tb2RlKSB7CisJY2FzZSBJTlRfTU9ERV9JTlR4OgorCWNhc2UgSU5UX01PREVfTVNJOgorCQludW1fcXVldWVzID0gMTsKKwkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCURQKE5FVElGX01TR19JRlVQLAorCQkgICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsIG51bV9xdWV1ZXMpOworCQlicmVhazsKKworCWNhc2UgSU5UX01PREVfTVNJWDoKKwlkZWZhdWx0OgorCQlpZiAoYnAtPm11bHRpX21vZGUgPT0gRVRIX1JTU19NT0RFX1JFR1VMQVIpCisJCQludW1fcXVldWVzID0gbWluX3QodTMyLCBudW1fb25saW5lX2NwdXMoKSwKKwkJCQkJICAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOworCQllbHNlCisJCQludW1fcXVldWVzID0gMTsKKwkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCURQKE5FVElGX01TR19JRlVQLCAic2V0IG51bWJlciBvZiByeCBxdWV1ZXMgdG8gJWQiCisJCSAgICIgIG51bWJlciBvZiB0eCBxdWV1ZXMgdG8gJWRcbiIsCisJCSAgIGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcyk7CisJCS8qIGlmIHdlIGNhbid0IHVzZSBNU0ktWCB3ZSBvbmx5IG5lZWQgb25lIGZwLAorCQkgKiBzbyB0cnkgdG8gZW5hYmxlIE1TSS1YIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZnAncworCQkgKiBhbmQgZmFsbGJhY2sgdG8gTVNJIG9yIGxlZ2FjeSBJTlR4IHdpdGggb25lIGZwCisJCSAqLworCQlpZiAoYm54MnhfZW5hYmxlX21zaXgoYnApKSB7CisJCQkvKiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YICovCisJCQludW1fcXVldWVzID0gMTsKKwkJCWJwLT5udW1fcnhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJCWlmIChicC0+bXVsdGlfbW9kZSkKKwkJCQlCTlgyWF9FUlIoIk11bHRpIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvICIKKwkJCQkJICAiZW5hYmxlIE1TSS1YICBzZXQgbnVtYmVyIG9mICIKKwkJCQkJICAicXVldWVzIHRvICVkXG4iLCBudW1fcXVldWVzKTsKKwkJfQorCQlicmVhazsKKwl9CisJYnAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gYnAtPm51bV90eF9xdWV1ZXM7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwpAQCAtNjMzOCw1NiArNjgxMSwyOCBAQAogCXUzMiBsb2FkX2NvZGU7CiAJaW50IGksIHJjID0gMDsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCisJRFAoTkVUSUZfTVNHX0lGVVAsICJlbnRlciAgbG9hZF9tb2RlICVkXG4iLCBsb2FkX21vZGUpOwogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQogCQlyZXR1cm4gLUVQRVJNOwogI2VuZGlmCiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CiAKLQlpZiAodXNlX2ludGEpIHsKLQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCi0JfSBlbHNlIHsKLQkJaWYgKCh1c2VfbXVsdGkgPiAxKSAmJiAodXNlX211bHRpIDw9IEJQX01BWF9RVUVVRVMoYnApKSkKLQkJCS8qIHVzZXIgcmVxdWVzdGVkIG51bWJlciAqLwotCQkJYnAtPm51bV9xdWV1ZXMgPSB1c2VfbXVsdGk7Ci0KLQkJZWxzZSBpZiAodXNlX211bHRpKQotCQkJYnAtPm51bV9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAotCQkJCQkgICAgICAgQlBfTUFYX1FVRVVFUyhicCkpOwotCQllbHNlCi0JCQlicC0+bnVtX3F1ZXVlcyA9IDE7Ci0KLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgYnAtPm51bV9xdWV1ZXMpOwotCi0JCS8qIGlmIHdlIGNhbid0IHVzZSBNU0ktWCB3ZSBvbmx5IG5lZWQgb25lIGZwLAotCQkgKiBzbyB0cnkgdG8gZW5hYmxlIE1TSS1YIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZnAncwotCQkgKiBhbmQgZmFsbGJhY2sgdG8gTVNJIG9yIGxlZ2FjeSBJTlR4IHdpdGggb25lIGZwCi0JCSAqLwotCQlyYyA9IGJueDJ4X2VuYWJsZV9tc2l4KGJwKTsKLQkJaWYgKHJjKSB7Ci0JCQkvKiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YICovCi0JCQlicC0+bnVtX3F1ZXVlcyA9IDE7Ci0JCQlpZiAodXNlX211bHRpKQotCQkJCUJOWDJYX0VSUigiTXVsdGkgcmVxdWVzdGVkIGJ1dCBmYWlsZWQiCi0JCQkJCSAgIiB0byBlbmFibGUgTVNJLVhcbiIpOwotCQl9Ci0JfQorCWJueDJ4X3NldF9pbnRfbW9kZShicCk7CiAKIAlpZiAoYm54MnhfYWxsb2NfbWVtKGJwKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnAoYnAsIGksIGRpc2FibGVfdHBhKSA9CiAJCQkJCSgoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSA9PSAwKTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYm54MnhfZnAoYnAsIGksIG5hcGkpLAogCQkJICAgICAgIGJueDJ4X3BvbGwsIDEyOCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQlmcC0+cG9sbF9ub193b3JrID0gMDsKQEAgLTY0MDUsMTQgKzY4NTAsMjIgQEAKIAkJCXBjaV9kaXNhYmxlX21zaXgoYnAtPnBkZXYpOwogCQkJZ290byBsb2FkX2Vycm9yMTsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSS1YXG4iLCBicC0+ZGV2LT5uYW1lKTsKIAl9IGVsc2UgeworCQlpZiAoKHJjICE9IC1FTk9NRU0pICYmIChpbnRfbW9kZSAhPSBJTlRfTU9ERV9JTlR4KSkKKwkJCWJueDJ4X2VuYWJsZV9tc2koYnApOwogCQlibngyeF9hY2tfaW50KGJwKTsKIAkJcmMgPSBibngyeF9yZXFfaXJxKGJwKTsKIAkJaWYgKHJjKSB7CiAJCQlCTlgyWF9FUlIoIklSUSByZXF1ZXN0IGZhaWxlZCAgcmMgJWQsIGFib3J0aW5nXG4iLCByYyk7CisJCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpCisJCQkJcGNpX2Rpc2FibGVfbXNpKGJwLT5wZGV2KTsKIAkJCWdvdG8gbG9hZF9lcnJvcjE7CiAJCX0KKwkJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSB7CisJCQlicC0+ZGV2LT5pcnEgPSBicC0+cGRldi0+aXJxOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0kgIElSUSAlZFxuIiwKKwkJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+cGRldi0+aXJxKTsKKwkJfQogCX0KIAogCS8qIFNlbmQgTE9BRF9SRVFVRVNUIGNvbW1hbmQgdG8gTUNQCkBAIC02NDM1LDExICs2ODg4LDExIEBACiAJfSBlbHNlIHsKIAkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAotCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCBsb2FkIGNvdW50cyBiZWZvcmUgdXMgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgLSBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCiAJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwogCQlsb2FkX2NvdW50WzBdKys7CiAJCWxvYWRfY291bnRbMSArIHBvcnRdKys7Ci0JCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIG5ldyBsb2FkIGNvdW50cyAgICAgICAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCAtIG5ldyBsb2FkIGNvdW50cyAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWlmIChsb2FkX2NvdW50WzBdID09IDEpCiAJCQlsb2FkX2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT047CkBAIC02NDg2LDcgKzY5MzksNyBAQAogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkKIAkJaWYgKGJwLT5tZl9jb25maWcgJiBGVU5DX01GX0NGR19GVU5DX0RJU0FCTEVEKSB7Ci0JCQlCTlgyWF9FUlIoIiEhISAgbWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKKwkJCURQKE5FVElGX01TR19JRlVQLCAibWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKIAkJCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0RJU0FCTEVEOwogCQl9CiAKQEAgLTY1MDMsMTkgKzY5NTYsMTkgQEAKIAkJYm54Mnhfc2V0X21hY19hZGRyX2UxaChicCwgMSk7CiAKIAlpZiAoYnAtPnBvcnQucG1mKQotCQlibngyeF9pbml0aWFsX3BoeV9pbml0KGJwKTsKKwkJYm54MnhfaW5pdGlhbF9waHlfaW5pdChicCwgbG9hZF9tb2RlKTsKIAogCS8qIFN0YXJ0IGZhc3QgcGF0aCAqLwogCXN3aXRjaCAobG9hZF9tb2RlKSB7CiAJY2FzZSBMT0FEX05PUk1BTDoKIAkJLyogVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCi0JCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7CisJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCiAJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgTE9BRF9PUEVOOgotCQluZXRpZl9zdGFydF9xdWV1ZShicC0+ZGV2KTsKKwkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCiAJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwogCQlicmVhazsKQEAgLTY1NDgsMzMgKzcwMDEsMzIgQEAKIAlicC0+cG9ydC5wbWYgPSAwOwogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQlibngyeF9mcmVlX3J4X3NnZV9yYW5nZShicCwgYnAtPmZwICsgaSwgTlVNX1JYX1NHRSk7CiBsb2FkX2Vycm9yMjoKIAkvKiBSZWxlYXNlIElSUXMgKi8KIAlibngyeF9mcmVlX2lycShicCk7CiBsb2FkX2Vycm9yMToKIAlibngyeF9uYXBpX2Rpc2FibGUoYnApOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAlibngyeF9mcmVlX21lbShicCk7CiAKLQkvKiBUQkQgd2UgcmVhbGx5IG5lZWQgdG8gcmVzZXQgdGhlIGNoaXAKLQkgICBpZiB3ZSB3YW50IHRvIHJlY292ZXIgZnJvbSB0aGlzICovCiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3N0b3BfbXVsdGkoc3RydWN0IGJueDJ4ICpicCwgaW50IGluZGV4KQogeworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2luZGV4XTsKIAlpbnQgcmM7CiAKIAkvKiBoYWx0IHRoZSBjb25uZWN0aW9uICovCi0JYnAtPmZwW2luZGV4XS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0hBTFRJTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgaW5kZXgsIDAsIGluZGV4LCAwKTsKKwlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIGluZGV4LCAwLCBmcC0+Y2xfaWQsIDApOwogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwogCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRCwgaW5kZXgsCi0JCQkgICAgICAgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMSk7CisJCQkgICAgICAgJihmcC0+c3RhdGUpLCAxKTsKIAlpZiAocmMpIC8qIHRpbWVvdXQgKi8KIAkJcmV0dXJuIHJjOwogCkBAIC02NTgzLDEzICs3MDM1LDEzIEBACiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfQ0xPU0VELCBpbmRleCwKLQkJCSAgICAgICAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAxKTsKKwkJCSAgICAgICAmKGZwLT5zdGF0ZSksIDEpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBibngyeF9zdG9wX2xlYWRpbmcoc3RydWN0IGJueDJ4ICpicCkKIHsKLQl1MTYgZHNiX3NwX3Byb2RfaWR4OworCV9fbGUxNiBkc2Jfc3BfcHJvZF9pZHg7CiAJLyogaWYgdGhlIG90aGVyIHBvcnQgaXMgaGFuZGxpbmcgdHJhZmZpYywKIAkgICB0aGlzIGNhbiB0YWtlIGEgbG90IG9mIHRpbWUgKi8KIAlpbnQgY250ID0gNTAwOwpAQCAtNjU5OSw3ICs3MDUxLDcgQEAKIAogCS8qIFNlbmQgSEFMVCByYW1yb2QgKi8KIAlicC0+ZnBbMF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIDAsIDAsIEJQX0NMX0lEKGJwKSwgMCk7CisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwgMCwgMCwgYnAtPmZwLT5jbF9pZCwgMCk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCiAJcmMgPSBibngyeF93YWl0X3JhbXJvZChicCwgQk5YMlhfRlBfU1RBVEVfSEFMVEVELCAwLApAQCAtNjYyMyw5ICs3MDc1LDggQEAKIAkJCSAgICpicC0+ZHNiX3NwX3Byb2QsIGRzYl9zcF9wcm9kX2lkeCk7CiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCQkJYm54MnhfcGFuaWMoKTsKLSNlbHNlCi0JCQlyYyA9IC1FQlVTWTsKICNlbmRpZgorCQkJcmMgPSAtRUJVU1k7CiAJCQlicmVhazsKIAkJfQogCQljbnQtLTsKQEAgLTY2NDgsOCArNzA5OSw2IEBACiAJUkVHX1dSKGJwLCBIQ19SRUdfTEVBRElOR19FREdFXzAgKyBwb3J0KjgsIDApOwogCVJFR19XUihicCwgSENfUkVHX1RSQUlMSU5HX0VER0VfMCArIHBvcnQqOCwgMCk7CiAKLQlSRUdfV1IoYnAsIEhDX1JFR19DT05GSUdfMCArIHBvcnQqNCwgMHgxMDAwKTsKLQogCS8qIENsZWFyIElMVCAqLwogCWJhc2UgPSBGVU5DX0lMVF9CQVNFKGZ1bmMpOwogCWZvciAoaSA9IGJhc2U7IGkgPCBiYXNlICsgSUxUX1BFUl9GVU5DOyBpKyspCkBAIC02NzMxLDE1ICs3MTgwLDE0IEBACiAJLyogUmVsZWFzZSBJUlFzICovCiAJYm54MnhfZnJlZV9pcnEoYnApOwogCi0JLyogV2FpdCB1bnRpbCB0eCBmYXN0IHBhdGggdGFza3MgY29tcGxldGUgKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCS8qIFdhaXQgdW50aWwgdHggZmFzdHBhdGggdGFza3MgY29tcGxldGUgKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQljbnQgPSAxMDAwOwotCQlzbXBfcm1iKCk7CiAJCXdoaWxlIChibngyeF9oYXNfdHhfd29ya191bmxvYWQoZnApKSB7CiAKLQkJCWJueDJ4X3R4X2ludChmcCwgMTAwMCk7CisJCQlibngyeF90eF9pbnQoZnApOwogCQkJaWYgKCFjbnQpIHsKIAkJCQlCTlgyWF9FUlIoInRpbWVvdXQgd2FpdGluZyBmb3IgcXVldWVbJWRdXG4iLAogCQkJCQkgIGkpOwpAQCAtNjc1Miw3ICs3MjAwLDYgQEAKIAkJCX0KIAkJCWNudC0tOwogCQkJbXNsZWVwKDEpOwotCQkJc21wX3JtYigpOwogCQl9CiAJfQogCS8qIEdpdmUgSFcgdGltZSB0byBkaXNjYXJkIG9sZCB0eCBtZXNzYWdlcyAqLwpAQCAtNjc2NCwxNSArNzIxMSwxNSBAQAogCiAJCWJueDJ4X3NldF9tYWNfYWRkcl9lMShicCwgMCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aGRyLmxlbmd0aF82YjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoOyBpKyspCiAJCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7CiAKLQkJY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gaTsKKwkJY29uZmlnLT5oZHIubGVuZ3RoID0gaTsKIAkJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQogCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX0VNVUxfTVVMVEkqKDEgKyBwb3J0KTsKIAkJZWxzZQogCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQk5YMlhfTUFYX01VTFRJQ0FTVCooMSArIHBvcnQpOwotCQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTY4MzYsMTEgKzcyODMsMTEgQEAKIAlpZiAoIUJQX05PTUNQKGJwKSkKIAkJcmVzZXRfY29kZSA9IGJueDJ4X2Z3X2NvbW1hbmQoYnAsIHJlc2V0X2NvZGUpOwogCWVsc2UgewotCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCAtIGxvYWQgY291bnRzICAgICAgJWQsICVkLCAlZFxuIiwKIAkJICAgbG9hZF9jb3VudFswXSwgbG9hZF9jb3VudFsxXSwgbG9hZF9jb3VudFsyXSk7CiAJCWxvYWRfY291bnRbMF0tLTsKIAkJbG9hZF9jb3VudFsxICsgcG9ydF0tLTsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCisJCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCiAJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwogCQlpZiAobG9hZF9jb3VudFswXSA9PSAwKQogCQkJcmVzZXRfY29kZSA9IEZXX01TR19DT0RFX0RSVl9VTkxPQURfQ09NTU9OOwpAQCAtNjg2MCwxMyArNzMwNywxNCBAQAogCS8qIFJlcG9ydCBVTkxPQURfRE9ORSB0byBNQ1AgKi8KIAlpZiAoIUJQX05PTUNQKGJwKSkKIAkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKKwogCWJwLT5wb3J0LnBtZiA9IDA7CiAKIAkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCiAJYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAlibngyeF9mcmVlX21lbShicCk7CiAKQEAgLTY5MDgsNiArNzM1Niw2NCBAQAogICogSW5pdCBzZXJ2aWNlIGZ1bmN0aW9ucwogICovCiAKK3N0YXRpYyBpbmxpbmUgdTMyIGJueDJ4X2dldF9wcmV0ZW5kX3JlZyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKK3sKKwlzd2l0Y2ggKGZ1bmMpIHsKKwljYXNlIDA6IHJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YwOworCWNhc2UgMToJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjE7CisJY2FzZSAyOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMjsKKwljYXNlIDM6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YzOworCWNhc2UgNDoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjQ7CisJY2FzZSA1OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNTsKKwljYXNlIDY6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y2OworCWNhc2UgNzoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjc7CisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJVbnN1cHBvcnRlZCBmdW5jdGlvbiBpbmRleDogJWRcbiIsIGZ1bmMpOworCQlyZXR1cm4gKHUzMikoLTEpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfdW5kaV9pbnRfZGlzYWJsZV9lMWgoc3RydWN0IGJueDJ4ICpicCwgaW50IG9yaWdfZnVuYykKK3sKKwl1MzIgcmVnID0gYm54MnhfZ2V0X3ByZXRlbmRfcmVnKGJwLCBvcmlnX2Z1bmMpLCBuZXdfdmFsOworCisJLyogRmx1c2ggYWxsIG91dHN0YW5kaW5nIHdyaXRlcyAqLworCW1taW93YigpOworCisJLyogUHJldGVuZCB0byBiZSBmdW5jdGlvbiAwICovCisJUkVHX1dSKGJwLCByZWcsIDApOworCS8qIEZsdXNoIHRoZSBHUkMgdHJhbnNhY3Rpb24gKGluIHRoZSBjaGlwKSAqLworCW5ld192YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisJaWYgKG5ld192YWwgIT0gMCkgeworCQlCTlgyWF9FUlIoIkhtbW0uLi4gUHJldGVuZCByZWdpc3RlciB3YXNuJ3QgdXBkYXRlZDogKDAsJWQpIVxuIiwKKwkJCSAgbmV3X3ZhbCk7CisJCUJVRygpOworCX0KKworCS8qIEZyb20gbm93IHdlIGFyZSBpbiB0aGUgImxpa2UtRTEiIG1vZGUgKi8KKwlibngyeF9pbnRfZGlzYWJsZShicCk7CisKKwkvKiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgd3JpdGVzICovCisJbW1pb3diKCk7CisKKwkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmdW50aW9uIHNldHRpbmdzICovCisJUkVHX1dSKGJwLCByZWcsIG9yaWdfZnVuYyk7CisJbmV3X3ZhbCA9IFJFR19SRChicCwgcmVnKTsKKwlpZiAobmV3X3ZhbCAhPSBvcmlnX2Z1bmMpIHsKKwkJQk5YMlhfRVJSKCJIbW1tLi4uIFByZXRlbmQgcmVnaXN0ZXIgd2Fzbid0IHVwZGF0ZWQ6ICglZCwlZCkhXG4iLAorCQkJICBvcmlnX2Z1bmMsIG5ld192YWwpOworCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF91bmRpX2ludF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQoreworCWlmIChDSElQX0lTX0UxSChicCkpCisJCWJueDJ4X3VuZGlfaW50X2Rpc2FibGVfZTFoKGJwLCBmdW5jKTsKKwllbHNlCisJCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X3VuZGlfdW5sb2FkKHN0cnVjdCBibngyeCAqYnApCiB7CiAJdTMyIHZhbDsKQEAgLTY5NTgsOCArNzQ2NCw3IEBACiAJCQkvKiBub3cgaXQncyBzYWZlIHRvIHJlbGVhc2UgdGhlIGxvY2sgKi8KIAkJCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9VTkRJKTsKIAotCQkJUkVHX1dSKGJwLCAoQlBfUE9SVChicCkgPyBIQ19SRUdfQ09ORklHXzEgOgotCQkJCSAgICBIQ19SRUdfQ09ORklHXzApLCAweDEwMDApOworCQkJYm54MnhfdW5kaV9pbnRfZGlzYWJsZShicCwgZnVuYyk7CiAKIAkJCS8qIGNsb3NlIGlucHV0IHRyYWZmaWMgYW5kIHdhaXQgZm9yIGl0ICovCiAJCQkvKiBEbyBub3QgcmN2IHBhY2tldHMgdG8gQlJCICovCkBAIC03MDI3LDYgKzc1MzIsMTMgQEAKIAlicC0+bGlua19wYXJhbXMuY2hpcF9pZCA9IGJwLT5jb21tb24uY2hpcF9pZDsKIAlCTlgyWF9ERVZfSU5GTygiY2hpcCBJRCBpcyAweCV4XG4iLCBpZCk7CiAKKwl2YWwgPSAoUkVHX1JEKGJwLCAweDI4NzQpICYgMHg1NSk7CisJaWYgKChicC0+Y29tbW9uLmNoaXBfaWQgJiAweDEpIHx8CisJICAgIChDSElQX0lTX0UxKGJwKSAmJiB2YWwpIHx8IChDSElQX0lTX0UxSChicCkgJiYgKHZhbCA9PSAweDU1KSkpIHsKKwkJYnAtPmZsYWdzIHw9IE9ORV9QT1JUX0ZMQUc7CisJCUJOWDJYX0RFVl9JTkZPKCJzaW5nbGUgcG9ydCBkZXZpY2VcbiIpOworCX0KKwogCXZhbCA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX05WTV9DRkc0KTsKIAlicC0+Y29tbW9uLmZsYXNoX3NpemUgPSAoTlZSQU1fMU1CX1NJWkUgPDwKIAkJCQkgKHZhbCAmIE1DUFJfTlZNX0NGRzRfRkxBU0hfU0laRSkpOwpAQCAtNzA1MSwxNSArNzU2MywyMSBAQAogCQlCTlgyWF9FUlIoIkJBRCBNQ1AgdmFsaWRpdHkgc2lnbmF0dXJlXG4iKTsKIAogCWJwLT5jb21tb24uaHdfY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuY29uZmlnKTsKLQlicC0+Y29tbW9uLmJvYXJkID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuYm9hcmQpOwotCi0JQk5YMlhfREVWX0lORk8oImh3X2NvbmZpZyAweCUwOHggIGJvYXJkIDB4JTA4eFxuIiwKLQkJICAgICAgIGJwLT5jb21tb24uaHdfY29uZmlnLCBicC0+Y29tbW9uLmJvYXJkKTsKKwlCTlgyWF9ERVZfSU5GTygiaHdfY29uZmlnIDB4JTA4eFxuIiwgYnAtPmNvbW1vbi5od19jb25maWcpOwogCiAJYnAtPmxpbmtfcGFyYW1zLmh3X2xlZF9tb2RlID0gKChicC0+Y29tbW9uLmh3X2NvbmZpZyAmCiAJCQkJCVNIQVJFRF9IV19DRkdfTEVEX01PREVfTUFTSykgPj4KIAkJCQkgICAgICAgU0hBUkVEX0hXX0NGR19MRURfTU9ERV9TSElGVCk7CiAKKwlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgPSAwOworCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfZmVhdHVyZV9jb25maWcuY29uZmlnKTsKKwlpZiAodmFsICYgU0hBUkVEX0ZFQVRfQ0ZHX09WRVJSSURFX1BSRUVNUEhBU0lTX0NGR19FTkFCTEVEKQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgfD0KKwkJCQlGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEOworCWVsc2UKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzICY9CisJCQkJfkZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQ7CisKIAl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uYmNfcmV2KSA+PiA4OwogCWJwLT5jb21tb24uYmNfdmVyID0gdmFsOwogCUJOWDJYX0RFVl9JTkZPKCJiY192ZXIgJVhcbiIsIHZhbCk7CkBAIC03MDc4LDcgKzc1OTYsNyBAQAogCQlicC0+ZmxhZ3MgfD0gTk9fV09MX0ZMQUc7CiAJfQogCUJOWDJYX0RFVl9JTkZPKCIlc1dvTCBjYXBhYmxlXG4iLAotCQkgICAgICAgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSA/ICJOb3QgIiA6ICIiKTsKKwkJICAgICAgIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgPyAibm90ICIgOiAiIik7CiAKIAl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bSk7CiAJdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzRdKTsKQEAgLTcxNzEsMjcgKzc2ODksNiBAQAogCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA1KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzA2KVxuIiwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODA3MilcbiIsCiAJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CkBAIC03MjE3LDYgKzc3MTQsMzkgQEAKIAkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNilcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MjYpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChTRlg3MTAxKVxuIiwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKQEAgLTcyMjgsNiArNzc1OCwyMiBAQAogCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChCQ004NDgxKVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1RQIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlCTlgyWF9FUlIoIlhHWFMgUEhZIEZhaWx1cmUgZGV0ZWN0ZWQgMHgleFxuIiwKIAkJCQkgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CkBAIC03NDUzLDEyICs3OTk5LDEyIEBACiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAl1MzIgdmFsLCB2YWwyOworCXUzMiBjb25maWc7CisJdTE2IGk7CiAKIAlicC0+bGlua19wYXJhbXMuYnAgPSBicDsKIAlicC0+bGlua19wYXJhbXMucG9ydCA9IHBvcnQ7CiAKLQlicC0+bGlua19wYXJhbXMuc2VyZGVzX2NvbmZpZyA9Ci0JCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5zZXJkZXNfY29uZmlnKTsKIAlicC0+bGlua19wYXJhbXMubGFuZV9jb25maWcgPQogCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubGFuZV9jb25maWcpOwogCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyA9CkBAIC03NDcxLDEwICs4MDE3LDM1IEBACiAJYnAtPnBvcnQubGlua19jb25maWcgPQogCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5saW5rX2NvbmZpZyk7CiAKLQlCTlgyWF9ERVZfSU5GTygic2VyZGVzX2NvbmZpZyAweCUwOHggIGxhbmVfY29uZmlnIDB4JTA4eFxuIgotCSAgICAgS0VSTl9JTkZPICIgIGV4dF9waHlfY29uZmlnIDB4JTA4eCAgc3BlZWRfY2FwX21hc2sgMHglMDh4IgotCQkgICAgICAgIiAgbGlua19jb25maWcgMHglMDh4XG4iLAotCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNlcmRlc19jb25maWcsCisJLyogR2V0IHRoZSA0IGxhbmVzIHhneHMgY29uZmlnIHJ4IGFuZCB0eCAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdmFsID0gU0hNRU1fUkQoYnAsCisJCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS54Z3hzX2NvbmZpZ19yeFtpPDwxXSk7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ19yeFtpIDw8IDFdID0gKCh2YWw+PjE2KSAmIDB4ZmZmZik7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ19yeFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7CisKKwkJdmFsID0gU0hNRU1fUkQoYnAsCisJCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS54Z3hzX2NvbmZpZ190eFtpPDwxXSk7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFtpIDw8IDFdID0gKCh2YWw+PjE2KSAmIDB4ZmZmZik7CisJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7CisJfQorCisJY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0uY29uZmlnKTsKKwlpZiAoY29uZmlnICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0VOQUJMRUQpCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQorCQkJCUZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQ7CisJZWxzZQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgJj0KKwkJCQl+RkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRDsKKworCS8qIElmIHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZiBXb0wsIHNldCB0aGUgZGVmYXVsdCBzdGF0ZSBhY2NvcmRpbmcKKwkgKiB0byB0aGUgSFcKKwkgKi8KKwlicC0+d29sID0gKCEoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpICYmCisJCSAgIChjb25maWcgJiBQT1JUX0ZFQVRVUkVfV09MX0VOQUJMRUQpKTsKKworCUJOWDJYX0RFVl9JTkZPKCJsYW5lX2NvbmZpZyAweCUwOHggIGV4dF9waHlfY29uZmlnIDB4JTA4eCIKKwkJICAgICAgICIgIHNwZWVkX2NhcF9tYXNrIDB4JTA4eCAgbGlua19jb25maWcgMHglMDh4XG4iLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmxhbmVfY29uZmlnLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrLCBicC0+cG9ydC5saW5rX2NvbmZpZyk7CkBAIC03NTIxLDcgKzgwOTIsNyBAQAogCQkJCSAgICAgICAiKDB4JTA0eClcbiIsCiAJCQkJICAgICAgIGZ1bmMsIGJwLT5lMWhvdiwgYnAtPmUxaG92KTsKIAkJfSBlbHNlIHsKLQkJCUJOWDJYX0RFVl9JTkZPKCJTaW5nbGUgZnVuY3Rpb24gbW9kZVxuIik7CisJCQlCTlgyWF9ERVZfSU5GTygic2luZ2xlIGZ1bmN0aW9uIG1vZGVcbiIpOwogCQkJaWYgKEJQX0UxSFZOKGJwKSkgewogCQkJCUJOWDJYX0VSUigiISEhICBObyB2YWxpZCBFMUhPViBmb3IgZnVuYyAlZCwiCiAJCQkJCSAgIiAgYWJvcnRpbmdcbiIsIGZ1bmMpOwpAQCAtNzU3MSw2ICs4MTQyLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfYnAoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCB0aW1lcl9pbnRlcnZhbDsKIAlpbnQgcmM7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyB1bnRpbCBIVyBpcyBpbml0aWFsaXplZCAqLwpAQCAtNzU5NCw2ICs4MTY2LDE2IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJICAgICAgICJNQ1AgZGlzYWJsZWQsIG11c3QgbG9hZCBkZXZpY2VzIGluIG9yZGVyIVxuIik7CiAKKwkvKiBTZXQgbXVsdGkgcXVldWUgbW9kZSAqLworCWlmICgobXVsdGlfbW9kZSAhPSBFVEhfUlNTX01PREVfRElTQUJMRUQpICYmCisJICAgICgoaW50X21vZGUgPT0gSU5UX01PREVfSU5UeCkgfHwgKGludF9tb2RlID09IElOVF9NT0RFX01TSSkpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgIk11bHRpIGRpc2FibGVkIHNpbmNlIGludF9tb2RlIHJlcXVlc3RlZCBpcyBub3QgTVNJLVhcbiIpOworCQltdWx0aV9tb2RlID0gRVRIX1JTU19NT0RFX0RJU0FCTEVEOworCX0KKwlicC0+bXVsdGlfbW9kZSA9IG11bHRpX21vZGU7CisKKwogCS8qIFNldCBUUEEgZmxhZ3MgKi8KIAlpZiAoZGlzYWJsZV90cGEpIHsKIAkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7CkBAIC03NjAzLDE4ICs4MTg1LDE4IEBACiAJCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwogCX0KIAorCWJwLT5tcnJzID0gbXJyczsKIAogCWJwLT50eF9yaW5nX3NpemUgPSBNQVhfVFhfQVZBSUw7CiAJYnAtPnJ4X3Jpbmdfc2l6ZSA9IE1BWF9SWF9BVkFJTDsKIAogCWJwLT5yeF9jc3VtID0gMTsKLQlicC0+cnhfb2Zmc2V0ID0gMDsKIAogCWJwLT50eF90aWNrcyA9IDUwOwogCWJwLT5yeF90aWNrcyA9IDI1OwogCi0JYnAtPnRpbWVyX2ludGVydmFsID0gKENISVBfUkVWX0lTX1NMT1coYnApID8gNSpIWiA6IEhaKTsKLQlicC0+Y3VycmVudF9pbnRlcnZhbCA9IChwb2xsID8gcG9sbCA6IGJwLT50aW1lcl9pbnRlcnZhbCk7CisJdGltZXJfaW50ZXJ2YWwgPSAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyA1KkhaIDogSFopOworCWJwLT5jdXJyZW50X2ludGVydmFsID0gKHBvbGwgPyBwb2xsIDogdGltZXJfaW50ZXJ2YWwpOwogCiAJaW5pdF90aW1lcigmYnAtPnRpbWVyKTsKIAlicC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbDsKQEAgLTc2NTksMTQgKzgyNDEsMTYgQEAKIAogCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgogCQkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgogCQkJY21kLT5wb3J0ID0gUE9SVF9UUDsKIAkJCWJyZWFrOwogCkBAIC03ODg4LDYgKzg0NzIsODQgQEAKIAlpbmZvLT5yZWdkdW1wX2xlbiA9IDA7CiB9CiAKKyNkZWZpbmUgSVNfRTFfT05MSU5FKGluZm8pCSgoKGluZm8pICYgUklfRTFfT05MSU5FKSA9PSBSSV9FMV9PTkxJTkUpCisjZGVmaW5lIElTX0UxSF9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMUhfT05MSU5FKSA9PSBSSV9FMUhfT05MSU5FKQorCitzdGF0aWMgaW50IGJueDJ4X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0YXRpYyB1MzIgcmVnZHVtcF9sZW47CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwlpZiAocmVnZHVtcF9sZW4pCisJCXJldHVybiByZWdkdW1wX2xlbjsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gcmVnX2FkZHJzW2ldLnNpemU7CisKKwkJZm9yIChpID0gMDsgaSA8IFdSRUdTX0NPVU5UX0UxOyBpKyspCisJCQlpZiAoSVNfRTFfT05MSU5FKHdyZWdfYWRkcnNfZTFbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gd3JlZ19hZGRyc19lMVtpXS5zaXplICoKKwkJCQkJKDEgKyB3cmVnX2FkZHJzX2UxW2ldLnJlYWRfcmVnc19jb3VudCk7CisKKwl9IGVsc2UgeyAvKiBFMUggKi8KKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSByZWdfYWRkcnNbaV0uc2l6ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV1JFR1NfQ09VTlRfRTFIOyBpKyspCisJCQlpZiAoSVNfRTFIX09OTElORSh3cmVnX2FkZHJzX2UxaFtpXS5pbmZvKSkKKwkJCQlyZWdkdW1wX2xlbiArPSB3cmVnX2FkZHJzX2UxaFtpXS5zaXplICoKKwkJCQkJKDEgKyB3cmVnX2FkZHJzX2UxaFtpXS5yZWFkX3JlZ3NfY291bnQpOworCX0KKwlyZWdkdW1wX2xlbiAqPSA0OworCXJlZ2R1bXBfbGVuICs9IHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpOworCisJcmV0dXJuIHJlZ2R1bXBfbGVuOworfQorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqX3ApCit7CisJdTMyICpwID0gX3AsIGksIGo7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGR1bXBfaGRyIGR1bXBfaGRyID0gezB9OworCisJcmVncy0+dmVyc2lvbiA9IDA7CisJbWVtc2V0KHAsIDAsIHJlZ3MtPmxlbik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybjsKKworCWR1bXBfaGRyLmhkcl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpIC8gNCkgLSAxOworCWR1bXBfaGRyLmR1bXBfc2lnbiA9IGR1bXBfc2lnbl9hbGw7CisJZHVtcF9oZHIueHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBYU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIudHN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBUU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIudXN0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBVU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIuY3N0b3JtX3dhaXRwID0gUkVHX1JEKGJwLCBDU1RPUk1fV0FJVFBfQUREUik7CisJZHVtcF9oZHIuaW5mbyA9IENISVBfSVNfRTEoYnApID8gUklfRTFfT05MSU5FIDogUklfRTFIX09OTElORTsKKworCW1lbWNweShwLCAmZHVtcF9oZHIsIHNpemVvZihzdHJ1Y3QgZHVtcF9oZHIpKTsKKwlwICs9IGR1bXBfaGRyLmhkcl9zaXplICsgMTsKKworCWlmIChDSElQX0lTX0UxKGJwKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJZm9yIChqID0gMDsgaiA8IHJlZ19hZGRyc1tpXS5zaXplOyBqKyspCisJCQkJCSpwKysgPSBSRUdfUkQoYnAsCisJCQkJCQkgICAgICByZWdfYWRkcnNbaV0uYWRkciArIGoqNCk7CisKKwl9IGVsc2UgeyAvKiBFMUggKi8KKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMUhfT05MSU5FKHJlZ19hZGRyc1tpXS5pbmZvKSkKKwkJCQlmb3IgKGogPSAwOyBqIDwgcmVnX2FkZHJzW2ldLnNpemU7IGorKykKKwkJCQkJKnArKyA9IFJFR19SRChicCwKKwkJCQkJCSAgICAgIHJlZ19hZGRyc1tpXS5hZGRyICsgaio0KTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtODA0Niw3ICs4NzA4LDcgQEAKIAkJCU1DUFJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4pKSk7CiB9CiAKLXN0YXRpYyBpbnQgYm54MnhfbnZyYW1fcmVhZF9kd29yZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgb2Zmc2V0LCB1MzIgKnJldF92YWwsCitzdGF0aWMgaW50IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgX19iZTMyICpyZXRfdmFsLAogCQkJCSAgdTMyIGNtZF9mbGFncykKIHsKIAlpbnQgY291bnQsIGksIHJjOwpAQCAtODA4Miw4ICs4NzQ0LDcgQEAKIAkJCS8qIHdlIHJlYWQgbnZyYW0gZGF0YSBpbiBjcHUgb3JkZXIKIAkJCSAqIGJ1dCBldGh0b29sIHNlZXMgaXQgYXMgYW4gYXJyYXkgb2YgYnl0ZXMKIAkJCSAqIGNvbnZlcnRpbmcgdG8gYmlnLWVuZGlhbiB3aWxsIGRvIHRoZSB3b3JrICovCi0JCQl2YWwgPSBjcHVfdG9fYmUzMih2YWwpOwotCQkJKnJldF92YWwgPSB2YWw7CisJCQkqcmV0X3ZhbCA9IGNwdV90b19iZTMyKHZhbCk7CiAJCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtODA5Nyw3ICs4NzU4LDcgQEAKIHsKIAlpbnQgcmM7CiAJdTMyIGNtZF9mbGFnczsKLQl1MzIgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAoKG9mZnNldCAmIDB4MDMpIHx8IChidWZfc2l6ZSAmIDB4MDMpIHx8IChidWZfc2l6ZSA9PSAwKSkgewogCQlEUChCTlgyWF9NU0dfTlZNLApAQCAtODIxNiw3ICs4ODc3LDcgQEAKIAlpbnQgcmM7CiAJdTMyIGNtZF9mbGFnczsKIAl1MzIgYWxpZ25fb2Zmc2V0OwotCXUzMiB2YWw7CisJX19iZTMyIHZhbDsKIAogCWlmIChvZmZzZXQgKyBidWZfc2l6ZSA+IGJwLT5jb21tb24uZmxhc2hfc2l6ZSkgewogCQlEUChCTlgyWF9NU0dfTlZNLCAiSW52YWxpZCBwYXJhbWV0ZXI6IG9mZnNldCAoMHgleCkgKyIKQEAgLTgzNDUsNyArOTAwNiw3IEBACiAJCQlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB8fAogCQkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfRElTQUJMRUQpKSB7CiAJCQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkJICAgICAgICZicC0+bGlua192YXJzKTsKKwkJCQkJCSAgICAgICAmYnAtPmxpbmtfdmFycywgMSk7CiAJCQkJcmMgfD0gYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywKIAkJCQkJCSAgICAgJmJwLT5saW5rX3ZhcnMpOwogCQkJfQpAQCAtODQzNSw3ICs5MDk2LDggQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWVwYXVzZS0+YXV0b25lZyA9IChicC0+bGlua19wYXJhbXMucmVxX2Zsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfQVVUTykgJiYKKwllcGF1c2UtPmF1dG9uZWcgPSAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0KKwkJCSAgIEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKSAmJgogCQkJICAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKTsKIAogCWVwYXVzZS0+cnhfcGF1c2UgPSAoKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSA9PQpAQCAtODU2Nyw4ICs5MjI5LDcgQEAKIAl7ICJudnJhbV90ZXN0IChvbmxpbmUpIiB9LAogCXsgImludGVycnVwdF90ZXN0IChvbmxpbmUpIiB9LAogCXsgImxpbmtfdGVzdCAob25saW5lKSIgfSwKLQl7ICJpZGxlIGNoZWNrIChvbmxpbmUpIiB9LAotCXsgIk1DIGVycm9ycyAob25saW5lKSIgfQorCXsgImlkbGUgY2hlY2sgKG9ubGluZSkiIH0KIH07CiAKIHN0YXRpYyBpbnQgYm54Mnhfc2VsZl90ZXN0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04NzU2LDIzICs5NDE3LDIzIEBACiAJdTE2IGxlbjsKIAlpbnQgcmMgPSAtRU5PREVWOwogCi0JaWYgKGxvb3BiYWNrX21vZGUgPT0gQk5YMlhfTUFDX0xPT1BCQUNLKSB7CisJLyogY2hlY2sgdGhlIGxvb3BiYWNrIG1vZGUgKi8KKwlzd2l0Y2ggKGxvb3BiYWNrX21vZGUpIHsKKwljYXNlIEJOWDJYX1BIWV9MT09QQkFDSzoKKwkJaWYgKGJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlICE9IExPT1BCQUNLX1hHWFNfMTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBCTlgyWF9NQUNfTE9PUEJBQ0s6CiAJCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfQk1BQzsKIAkJYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOwotCi0JfSBlbHNlIGlmIChsb29wYmFja19tb2RlID09IEJOWDJYX1BIWV9MT09QQkFDSykgewotCQl1MTYgY250ID0gMTAwMDsKLQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19YR1hTXzEwOwotCQlibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7Ci0JCS8qIHdhaXQgdW50aWwgbGluayBzdGF0ZSBpcyByZXN0b3JlZCAqLwotCQlpZiAobGlua191cCkKLQkJCXdoaWxlIChjbnQtLSAmJiBibngyeF90ZXN0X2xpbmsoJmJwLT5saW5rX3BhcmFtcywKLQkJCQkJCQkmYnAtPmxpbmtfdmFycykpCi0JCQkJbXNsZWVwKDEwKTsKLQl9IGVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JcGt0X3NpemUgPSAxNTE0OworCS8qIHByZXBhcmUgdGhlIGxvb3BiYWNrIHBhY2tldCAqLworCXBrdF9zaXplID0gKCgoYnAtPmRldi0+bXR1IDwgRVRIX01BWF9QQUNLRVRfU0laRSkgPworCQkgICAgIGJwLT5kZXYtPm10dSA6IEVUSF9NQVhfUEFDS0VUX1NJWkUpICsgRVRIX0hMRU4pOwogCXNrYiA9IG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgYnAtPnJ4X2J1Zl9zaXplKTsKIAlpZiAoIXNrYikgewogCQlyYyA9IC1FTk9NRU07CkBAIC04Nzg0LDYgKzk0NDUsNyBAQAogCWZvciAoaSA9IEVUSF9ITEVOOyBpIDwgcGt0X3NpemU7IGkrKykKIAkJcGFja2V0W2ldID0gKHVuc2lnbmVkIGNoYXIpIChpICYgMHhmZik7CiAKKwkvKiBzZW5kIHRoZSBsb29wYmFjayBwYWNrZXQgKi8KIAludW1fcGt0cyA9IDA7CiAJdHhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKIAlyeF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOwpAQCAtODgwOCwxMiArOTQ3MCwxMCBAQAogCiAJd21iKCk7CiAKLQlmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kID0KLQkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCkgKyAxKTsKKwlsZTE2X2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QsIDEpOwogCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QgPQotCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCkgKyAxKTsKLQlET09SQkVMTChicCwgRlBfSURYKGZwKSwgMCk7CisJbGUzMl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCwgMSk7CisJRE9PUkJFTEwoYnAsIGZwLT5pbmRleCwgMCk7CiAKIAltbWlvd2IoKTsKIApAQCAtODg2OCw3ICs5NTI4LDcgQEAKIAogc3RhdGljIGludCBibngyeF90ZXN0X2xvb3BiYWNrKHN0cnVjdCBibngyeCAqYnAsIHU4IGxpbmtfdXApCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmMgPSAwLCByZXM7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCiAJCXJldHVybiBCTlgyWF9MT09QQkFDS19GQUlMRUQ7CkBAIC04ODc2LDE0ICs5NTM2LDE2IEBACiAJYm54MnhfbmV0aWZfc3RvcChicCwgMSk7CiAJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CiAKLQlpZiAoYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9NQUNfTE9PUEJBQ0ssIGxpbmtfdXApKSB7Ci0JCURQKE5FVElGX01TR19QUk9CRSwgIk1BQyBsb29wYmFjayBmYWlsZWRcbiIpOwotCQlyYyB8PSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEOworCXJlcyA9IGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfUEhZX0xPT1BCQUNLLCBsaW5rX3VwKTsKKwlpZiAocmVzKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwgIiAgUEhZIGxvb3BiYWNrIGZhaWxlZCAgKHJlcyAlZClcbiIsIHJlcyk7CisJCXJjIHw9IEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQ7CiAJfQogCi0JaWYgKGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfUEhZX0xPT1BCQUNLLCBsaW5rX3VwKSkgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJQSFkgbG9vcGJhY2sgZmFpbGVkXG4iKTsKLQkJcmMgfD0gQk5YMlhfUEhZX0xPT1BCQUNLX0ZBSUxFRDsKKwlyZXMgPSBibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX01BQ19MT09QQkFDSywgbGlua191cCk7CisJaWYgKHJlcykgeworCQlEUChORVRJRl9NU0dfUFJPQkUsICIgIE1BQyBsb29wYmFjayBmYWlsZWQgIChyZXMgJWQpXG4iLCByZXMpOworCQlyYyB8PSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVEOwogCX0KIAogCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwpAQCAtODkxMCwxNCArOTU3MiwxNCBAQAogCQl7IDB4Nzc4LCAgMHg3MCB9LAogCQl7ICAgICAwLCAgICAgMCB9CiAJfTsKLQl1MzIgYnVmWzB4MzUwIC8gNF07CisJX19iZTMyIGJ1ZlsweDM1MCAvIDRdOwogCXU4ICpkYXRhID0gKHU4ICopYnVmOwogCWludCBpLCByYzsKIAl1MzIgbWFnaWMsIGNzdW07CiAKIAlyYyA9IGJueDJ4X252cmFtX3JlYWQoYnAsIDAsIGRhdGEsIDQpOwogCWlmIChyYykgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJtYWdpYyB2YWx1ZSByZWFkIChyYyAtJWQpXG4iLCAtcmMpOworCQlEUChORVRJRl9NU0dfUFJPQkUsICJtYWdpYyB2YWx1ZSByZWFkIChyYyAlZClcbiIsIHJjKTsKIAkJZ290byB0ZXN0X252cmFtX2V4aXQ7CiAJfQogCkBAIC04OTM0LDcgKzk1OTYsNyBAQAogCQkJCSAgICAgIG52cmFtX3RibFtpXS5zaXplKTsKIAkJaWYgKHJjKSB7CiAJCQlEUChORVRJRl9NU0dfUFJPQkUsCi0JCQkgICAibnZyYW1fdGJsWyVkXSByZWFkIGRhdGEgKHJjIC0lZClcbiIsIGksIC1yYyk7CisJCQkgICAibnZyYW1fdGJsWyVkXSByZWFkIGRhdGEgKHJjICVkKVxuIiwgaSwgcmMpOwogCQkJZ290byB0ZXN0X252cmFtX2V4aXQ7CiAJCX0KIApAQCAtODk1OSwxMiArOTYyMSwxMiBAQAogCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljb25maWctPmhkci5sZW5ndGhfNmIgPSAwOworCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDA7CiAJaWYgKENISVBfSVNfRTEoYnApKQogCQljb25maWctPmhkci5vZmZzZXQgPSAoQlBfUE9SVChicCkgPyAzMiA6IDApOwogCWVsc2UKIAkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQlBfRlVOQyhicCk7Ci0JY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCXJjID0gYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTkwMzcsOSArOTY5OSw2IEBACiAJCQlidWZbNV0gPSAxOwogCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAkJfQotCWJ1Zls3XSA9IGJueDJ4X21jX2Fzc2VydChicCk7Ci0JaWYgKGJ1Zls3XSAhPSAwKQotCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCiAjaWZkZWYgQk5YMlhfRVhUUkFfREVCVUcKIAlibngyeF9wYW5pY19kdW1wKGJwKTsKQEAgLTkwNDksNDAgKzk3MDgsOTggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWxvbmcgb2Zmc2V0OwogCWludCBzaXplOworCXU4IHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOworfSBibngyeF9xX3N0YXRzX2FycltCTlgyWF9OVU1fUV9TVEFUU10gPSB7CisvKiAxICovCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksIDgsICJbJWRdOiByeF9ieXRlcyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIoZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X2Vycm9yX2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X3VjYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfYmNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkX2hpKSwJOCwgIlslZF06IHJ4X2Rpc2NhcmRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAorCQkJCQkgNCwgIlslZF06IHJ4X3BoeV9pcF9lcnJfZGlzY2FyZHMifSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCisJCQkJCSA0LCAiWyVkXTogcnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwgNCwgIlslZF06IHJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCisKKy8qIDEwICoveyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwJOCwgIlslZF06IHR4X2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCQkJCTgsICJbJWRdOiB0eF9wYWNrZXRzIiB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlsb25nIG9mZnNldDsKKwlpbnQgc2l6ZTsKIAl1MzIgZmxhZ3M7CiAjZGVmaW5lIFNUQVRTX0ZMQUdTX1BPUlQJCTEKICNkZWZpbmUgU1RBVFNfRkxBR1NfRlVOQwkJMgorI2RlZmluZSBTVEFUU19GTEFHU19CT1RICQkoU1RBVFNfRkxBR1NfRlVOQyB8IFNUQVRTX0ZMQUdTX1BPUlQpCiAJdTggc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IGJueDJ4X3N0YXRzX2FycltCTlgyWF9OVU1fU1RBVFNdID0gewotLyogMSAqLwl7IFNUQVRTX09GRlNFVDMyKHZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfYnl0ZXMiIH0sCisvKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9ieXRlcyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfZXJyb3JfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInR4X2J5dGVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXJyb3JfYnl0ZXMiIH0sCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2Vycm9yX2J5dGVzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfdWNhc3RfcGFja2V0cyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfdWNhc3RfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfbWNhc3RfcGFja2V0cyIgfSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfbWNhc3RfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19GVU5DLCAicnhfYmNhc3RfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInR4X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tYWNfZXJyb3JzIiB9LAotLyogMTAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZG90M3N0YXRzY2FycmllcnNlbnNlZXJyb3JzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfY2Fycmllcl9lcnJvcnMiIH0sCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2JjYXN0X3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9yc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2NyY19lcnJvcnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2FsaWdubWVudGVycm9yc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2FsaWduX2Vycm9ycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF91bmRlcnNpemVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfb3ZlcnNpemVfcGFja2V0cyIgfSwKKy8qIDEwICoveyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNmcmFnbWVudHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9mcmFnbWVudHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfamFiYmVycyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2Rpc2NhcmRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobWFjX2ZpbHRlcl9kaXNjYXJkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZmlsdGVyZWRfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHh4b3ZlcmZsb3dfZGlzY2FyZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2Z3X2Rpc2NhcmRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX2Ryb3BfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9icmJfZGlzY2FyZCIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGJyYl90cnVuY2F0ZV9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2JyYl90cnVuY2F0ZSIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3BhdXNlX2ZyYW1lcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfbWFjX2N0cmxfZnJhbWVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIobmlnX3RpbWVyX21heCksCisJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfY29uc3RhbnRfcGF1c2VfZXZlbnRzIiB9LAorLyogMjAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X2Vycl9kaXNjYXJkX3BrdCksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X3BoeV9pcF9lcnJfZGlzY2FyZHMifSwKKwl7IFNUQVRTX09GRlNFVDMyKHJ4X3NrYl9hbGxvY19mYWlsZWQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9za2JfYWxsb2NfZGlzY2FyZCIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfSwKKworCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJ0eF9ieXRlcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2Vycm9yX2J5dGVzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAidHhfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X21hY19lcnJvcnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2NhcnJpZXJfZXJyb3JzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzbXVsdGlwbGVjb2xsaXNpb25mcmFtZXNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tdWx0aV9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNkZWZlcnJlZHRyYW5zbWlzc2lvbnNfaGkpLAorLyogMzAgKi97IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZGVmZXJyZWQiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2V4Y2Vzc2l2ZWNvbGxpc2lvbnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9leGNlc3NfY29sbGlzaW9ucyIgfSwKQEAgLTkwOTAsMTQgKzk4MDcsNiBAQAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9sYXRlX2NvbGxpc2lvbnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNjb2xsaXNpb25zX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfdG90YWxfY29sbGlzaW9ucyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c2ZyYWdtZW50c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZyYWdtZW50cyIgfSwKLS8qIDIwICoveyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNqYWJiZXJzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfamFiYmVycyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF91bmRlcnNpemVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGphYmJlcl9wYWNrZXRzX3JlY2VpdmVkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfb3ZlcnNpemVfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NG9jdGV0c19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzY0X2J5dGVfcGFja2V0cyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM2NW9jdGV0c3RvMTI3b2N0ZXRzX2hpKSwKQEAgLTkxMTAsNTIgKzk4MTksNDYgQEAKIAkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF81MTJfdG9fMTAyM19ieXRlX3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0czEwMjRvY3RldHN0bzE1MjJvY3RldHNfaGkpLAogCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzEwMjRfdG9fMTUyMl9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpKSwKKy8qIDQwICoveyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpKSwKIAkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF8xNTIzX3RvXzkwMjJfYnl0ZV9wYWNrZXRzIiB9LAotLyogMzAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfeG9ucGF1c2VmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3hvbl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfeG9mZl9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X291dHhvbnNlbnRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF94b25fZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9vdXR4b2Zmc2VudF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3hvZmZfZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9tYWNjb250cm9sZnJhbWVzcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9tYWNfY3RybF9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihtYWNfZmlsdGVyX2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfZGlzY2FyZHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9md19kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAiYnJiX2Rpc2NhcmQiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJicmJfdHJ1bmNhdGUiIH0sCi0vKiA0MCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfcGh5X2lwX2Vycl9kaXNjYXJkcyJ9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAotLyogNDIgKi97IFNUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwKLQkJCQk0LCBTVEFUU19GTEFHU19GVU5DLCAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIgfQorCXsgU1RBVFNfT0ZGU0VUMzIocGF1c2VfZnJhbWVzX3NlbnRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9wYXVzZV9mcmFtZXMiIH0KIH07CiAKLSNkZWZpbmUgSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpIFwKLQkJKElTX0UxSE1GKGJwKSAmJiAoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfUE9SVCkpCisjZGVmaW5lIElTX1BPUlRfU1RBVChpKSBcCisJKChibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MgJiBTVEFUU19GTEFHU19CT1RIKSA9PSBTVEFUU19GTEFHU19QT1JUKQorI2RlZmluZSBJU19GVU5DX1NUQVQoaSkJCShibngyeF9zdGF0c19hcnJbaV0uZmxhZ3MgJiBTVEFUU19GTEFHU19GVU5DKQorI2RlZmluZSBJU19FMUhNRl9NT0RFX1NUQVQoYnApIFwKKwkJCShJU19FMUhNRihicCkgJiYgIShicC0+bXNnbGV2ZWwgJiBCTlgyWF9NU0dfU1RBVFMpKQogCiBzdGF0aWMgdm9pZCBibngyeF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqYnVmKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpLCBqOworCWludCBpLCBqLCBrOwogCiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgewotCQkJaWYgKElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSkKLQkJCQljb250aW51ZTsKLQkJCXN0cmNweShidWYgKyBqKkVUSF9HU1RSSU5HX0xFTiwKLQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbaV0uc3RyaW5nKTsKLQkJCWorKzsKKwkJaWYgKGlzX211bHRpKGJwKSkgeworCQkJayA9IDA7CisJCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKQorCQkJCQlzcHJpbnRmKGJ1ZiArIChrICsgaikqRVRIX0dTVFJJTkdfTEVOLAorCQkJCQkJYm54MnhfcV9zdGF0c19hcnJbal0uc3RyaW5nLCBpKTsKKwkJCQlrICs9IEJOWDJYX05VTV9RX1NUQVRTOworCQkJfQorCQkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpCisJCQkJYnJlYWs7CisJCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1NUQVRTOyBqKyspCisJCQkJc3RyY3B5KGJ1ZiArIChrICsgaikqRVRIX0dTVFJJTkdfTEVOLAorCQkJCSAgICAgICBibngyeF9zdGF0c19hcnJbal0uc3RyaW5nKTsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKKwkJCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSAmJiBJU19QT1JUX1NUQVQoaSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXN0cmNweShidWYgKyBqKkVUSF9HU1RSSU5HX0xFTiwKKwkJCQkgICAgICAgYm54Mnhfc3RhdHNfYXJyW2ldLnN0cmluZyk7CisJCQkJaisrOworCQkJfQogCQl9CiAJCWJyZWFrOwogCkBAIC05MTY4LDEzICs5ODcxLDIyIEBACiBzdGF0aWMgaW50IGJueDJ4X2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpLCBudW1fc3RhdHMgPSAwOworCWludCBpLCBudW1fc3RhdHM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJaWYgKElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSkKLQkJCWNvbnRpbnVlOwotCQludW1fc3RhdHMrKzsKKwlpZiAoaXNfbXVsdGkoYnApKSB7CisJCW51bV9zdGF0cyA9IEJOWDJYX05VTV9RX1NUQVRTICogQk5YMlhfTlVNX1FVRVVFUyhicCk7CisJCWlmICghSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKKwkJCW51bV9zdGF0cyArPSBCTlgyWF9OVU1fU1RBVFM7CisJfSBlbHNlIHsKKwkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkpIHsKKwkJCW51bV9zdGF0cyA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspCisJCQkJaWYgKElTX0ZVTkNfU1RBVChpKSkKKwkJCQkJbnVtX3N0YXRzKys7CisJCX0gZWxzZQorCQkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1NUQVRTOwogCX0KKwogCXJldHVybiBudW1fc3RhdHM7CiB9CiAKQEAgLTkxODIsMjkgKzk4OTQsNzEgQEAKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmJ1ZikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgKmh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZXRoX3N0YXRzOwotCWludCBpLCBqOworCXUzMiAqaHdfc3RhdHMsICpvZmZzZXQ7CisJaW50IGksIGosIGs7CiAKLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7Ci0JCWlmIChJU19OT1RfRTFITUZfU1RBVChicCwgaSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gMCkgewotCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KLQkJCWJ1ZltqXSA9IDA7Ci0JCQlqKys7Ci0JCQljb250aW51ZTsKKwlpZiAoaXNfbXVsdGkoYnApKSB7CisJCWsgPSAwOworCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKKwkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKSB7CisJCQkJaWYgKGJueDJ4X3Ffc3RhdHNfYXJyW2pdLnNpemUgPT0gMCkgeworCQkJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLworCQkJCQlidWZbayArIGpdID0gMDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCW9mZnNldCA9IChod19zdGF0cyArCisJCQkJCSAgYm54MnhfcV9zdGF0c19hcnJbal0ub2Zmc2V0KTsKKwkJCQlpZiAoYm54MnhfcV9zdGF0c19hcnJbal0uc2l6ZSA9PSA0KSB7CisJCQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCisJCQkJCWJ1ZltrICsgal0gPSAodTY0KSAqb2Zmc2V0OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gSElMT19VNjQoKm9mZnNldCwgKihvZmZzZXQgKyAxKSk7CisJCQl9CisJCQlrICs9IEJOWDJYX05VTV9RX1NUQVRTOwogCQl9Ci0JCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSA0KSB7Ci0JCQkvKiA0LWJ5dGUgY291bnRlciAqLwotCQkJYnVmW2pdID0gKHU2NCkgKihod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQpOwotCQkJaisrOwotCQkJY29udGludWU7CisJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApKQorCQkJcmV0dXJuOworCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmV0aF9zdGF0czsKKwkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9TVEFUUzsgaisrKSB7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2pdLnNpemUgPT0gMCkgeworCQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCisJCQkJYnVmW2sgKyBqXSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbal0ub2Zmc2V0KTsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbal0uc2l6ZSA9PSA0KSB7CisJCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KKwkJCQlidWZbayArIGpdID0gKHU2NCkgKm9mZnNldDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIDgtYnl0ZSBjb3VudGVyICovCisJCQlidWZbayArIGpdID0gSElMT19VNjQoKm9mZnNldCwgKihvZmZzZXQgKyAxKSk7CiAJCX0KLQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KLQkJYnVmW2pdID0gSElMT19VNjQoKihod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQpLAotCQkJCSAgKihod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQgKyAxKSk7Ci0JCWorKzsKKwl9IGVsc2UgeworCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmV0aF9zdGF0czsKKwkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgeworCQkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkgJiYgSVNfUE9SVF9TVEFUKGkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDApIHsKKwkJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLworCQkJCWJ1ZltqXSA9IDA7CisJCQkJaisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2ldLm9mZnNldCk7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gNCkgeworCQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCisJCQkJYnVmW2pdID0gKHU2NCkgKm9mZnNldDsKKwkJCQlqKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQkJYnVmW2pdID0gSElMT19VNjQoKm9mZnNldCwgKihvZmZzZXQgKyAxKSk7CisJCQlqKys7CisJCX0KIAl9CiB9CiAKQEAgLTkyNTEsNiArMTAwMDUsOCBAQAogCS5nZXRfc2V0dGluZ3MJCT0gYm54MnhfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gYm54Mnhfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBibngyeF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuCQk9IGJueDJ4X2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MJCT0gYm54MnhfZ2V0X3JlZ3MsCiAJLmdldF93b2wJCT0gYm54MnhfZ2V0X3dvbCwKIAkuc2V0X3dvbAkJPSBibngyeF9zZXRfd29sLAogCS5nZXRfbXNnbGV2ZWwJCT0gYm54MnhfZ2V0X21zZ2xldmVsLApAQCAtOTM2MywyNSArMTAxMTksNDEgQEAKIAlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOwogCiAJaWYgKGJueDJ4X2hhc190eF93b3JrKGZwKSkKLQkJYm54MnhfdHhfaW50KGZwLCBidWRnZXQpOworCQlibngyeF90eF9pbnQoZnApOwogCi0JaWYgKGJueDJ4X2hhc19yeF93b3JrKGZwKSkKKwlpZiAoYm54MnhfaGFzX3J4X3dvcmsoZnApKSB7CiAJCXdvcmtfZG9uZSA9IGJueDJ4X3J4X2ludChmcCwgYnVkZ2V0KTsKLQlybWIoKTsgLyogQk5YMlhfSEFTX1dPUksoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrICovCiAKLQkvKiBtdXN0IG5vdCBjb21wbGV0ZSBpZiB3ZSBjb25zdW1lZCBmdWxsIGJ1ZGdldCAqLwotCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiAhQk5YMlhfSEFTX1dPUksoZnApKSB7CisJCS8qIG11c3Qgbm90IGNvbXBsZXRlIGlmIHdlIGNvbnN1bWVkIGZ1bGwgYnVkZ2V0ICovCisJCWlmICh3b3JrX2RvbmUgPj0gYnVkZ2V0KQorCQkJZ290byBwb2xsX2FnYWluOworCX0KIAorCS8qIEJOWDJYX0hBU19XT1JLKCkgcmVhZHMgdGhlIHN0YXR1cyBibG9jaywgdGh1cyB3ZSBuZWVkIHRvCisJICogZW5zdXJlIHRoYXQgc3RhdHVzIGJsb2NrIGluZGljZXMgaGF2ZSBiZWVuIGFjdHVhbGx5IHJlYWQKKwkgKiAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KSBwcmlvciB0byB0aGlzIGNoZWNrIChCTlgyWF9IQVNfV09SSykKKwkgKiBzbyB0aGF0IHdlIHdvbid0IHdyaXRlIHRoZSAibmV3ZXIiIHZhbHVlIG9mIHRoZSBzdGF0dXMgYmxvY2sgdG8gSUdVCisJICogKGlmIHRoZXJlIHdhcyBhIERNQSByaWdodCBhZnRlciBCTlgyWF9IQVNfV09SSyBhbmQKKwkgKiBpZiB0aGVyZSBpcyBubyBybWIsIHRoZSBtZW1vcnkgcmVhZGluZyAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KQorCSAqIG1heSBiZSBwb3N0cG9uZWQgdG8gcmlnaHQgYmVmb3JlIGJueDJ4X2Fja19zYikuIEluIHRoaXMgY2FzZQorCSAqIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW5vdGhlciBpbnRlcnJ1cHQgdW50aWwgdGhlcmUgaXMgYW5vdGhlciB1cGRhdGUKKwkgKiBvZiB0aGUgc3RhdHVzIGJsb2NrLCB3aGlsZSB0aGVyZSBpcyBzdGlsbCB1bmhhbmRsZWQgd29yay4KKwkgKi8KKwlybWIoKTsKKworCWlmICghQk5YMlhfSEFTX1dPUksoZnApKSB7CiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogcG9sbF9wYW5pYzoKICNlbmRpZgotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAotCQlibngyeF9hY2tfc2IoYnAsIEZQX1NCX0lEKGZwKSwgVVNUT1JNX0lELAorCQlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgVVNUT1JNX0lELAogCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfdV9pZHgpLCBJR1VfSU5UX05PUCwgMSk7Ci0JCWJueDJ4X2Fja19zYihicCwgRlBfU0JfSUQoZnApLCBDU1RPUk1fSUQsCisJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBDU1RPUk1fSUQsCiAJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksIElHVV9JTlRfRU5BQkxFLCAxKTsKIAl9CisKK3BvbGxfYWdhaW46CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIApAQCAtOTQ1Nyw3ICsxMDIyOSw3IEBACiAJCXJjID0gWE1JVF9QTEFJTjsKIAogCWVsc2UgewotCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUFY2KSkgeworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewogCQkJcmMgPSBYTUlUX0NTVU1fVjY7CiAJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQlyYyB8PSBYTUlUX0NTVU1fVENQOwpAQCAtOTQ3OSw3ICsxMDI1MSw5IEBACiB9CiAKICNpZiAoTUFYX1NLQl9GUkFHUyA+PSBNQVhfRkVUQ0hfQkQgLSAzKQotLyogY2hlY2sgaWYgcGFja2V0IHJlcXVpcmVzIGxpbmVhcml6YXRpb24gKHBhY2tldCBpcyB0b28gZnJhZ21lbnRlZCkgKi8KKy8qIGNoZWNrIGlmIHBhY2tldCByZXF1aXJlcyBsaW5lYXJpemF0aW9uIChwYWNrZXQgaXMgdG9vIGZyYWdtZW50ZWQpCisgICBubyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsgKHRoZXJlIHdpbGwgYmUgbm8KKyAgIHZpb2xhdGlvbiB0byBGVyByZXN0cmljdGlvbnMpICovCiBzdGF0aWMgaW50IGJueDJ4X3BrdF9yZXFfbGluKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHUzMiB4bWl0X3R5cGUpCiB7CkBAIC05NTM4LDcgKzEwMzEyLDYgQEAKIAkJCQl3bmRfc3VtIC09CiAJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbd25kX2lkeF0uc2l6ZTsKIAkJCX0KLQogCQl9IGVsc2UgewogCQkJLyogaW4gbm9uLUxTTyB0b28gZnJhZ21lbnRlZCBwYWNrZXQgc2hvdWxkIGFsd2F5cwogCQkJICAgYmUgbGluZWFyaXplZCAqLwpAQCAtOTU2Niw2ICsxMDMzOSw3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IHN3X3R4X2JkICp0eF9idWY7CiAJc3RydWN0IGV0aF90eF9iZCAqdHhfYmQ7CiAJc3RydWN0IGV0aF90eF9wYXJzZV9iZCAqcGJkID0gTlVMTDsKQEAgLTk1ODIsMTIgKzEwMzU2LDE0IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKICNlbmRpZgogCi0JZnBfaW5kZXggPSAoc21wX3Byb2Nlc3Nvcl9pZCgpICUgYnAtPm51bV9xdWV1ZXMpOworCWZwX2luZGV4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGZwX2luZGV4KTsKKwogCWZwID0gJmJwLT5mcFtmcF9pbmRleF07CiAKIAlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAzKSkpIHsKLQkJYnAtPmV0aF9zdGF0cy5kcml2ZXJfeG9mZisrLAotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrLAorCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCUJOWDJYX0VSUigiQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtOTU5OCw4ICsxMDM3NCw5IEBACiAJICAgaXBfaGRyKHNrYiktPnByb3RvY29sLCBza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlLCB4bWl0X3R5cGUpOwogCiAjaWYgKE1BWF9TS0JfRlJBR1MgPj0gTUFYX0ZFVENIX0JEIC0gMykKLQkvKiBGaXJzdCwgY2hlY2sgaWYgd2UgbmVlZCB0byBsaW5lYXJpemUgdGhlIHNrYgotCSAgIChkdWUgdG8gRlcgcmVzdHJpY3Rpb25zKSAqLworCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIGxpbmVhcml6ZSB0aGUgc2tiIChkdWUgdG8gRlcKKwkgICByZXN0cmljdGlvbnMpLiBObyBuZWVkIHRvIGNoZWNrIGZyYWdtZW50YXRpb24gaWYgcGFnZSBzaXplID4gOEsKKwkgICAodGhlcmUgd2lsbCBiZSBubyB2aW9sYXRpb24gdG8gRlcgcmVzdHJpY3Rpb25zKSAqLwogCWlmIChibngyeF9wa3RfcmVxX2xpbihicCwgc2tiLCB4bWl0X3R5cGUpKSB7CiAJCS8qIFN0YXRpc3RpY3Mgb2YgbGluZWFyaXphdGlvbiAqLwogCQlicC0+bGluX2NudCsrOwpAQCAtOTY2NCw5ICsxMDQ0MSw5IEBACiAJCWhsZW4gPSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEgKyB2bGFuX29mZikgLyAyOwogCiAJCS8qIGZvciBub3cgTlMgZmxhZyBpcyBub3QgdXNlZCBpbiBMaW51eCAqLwotCQlwYmQtPmdsb2JhbF9kYXRhID0gKGhsZW4gfAotCQkJCSAgICAoKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfODAyMVEpKSA8PAotCQkJCSAgICAgRVRIX1RYX1BBUlNFX0JEX0xMQ19TTkFQX0VOX1NISUZUKSk7CisJCXBiZC0+Z2xvYmFsX2RhdGEgPQorCQkJKGhsZW4gfCAoKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKSA8PAorCQkJCSBFVEhfVFhfUEFSU0VfQkRfTExDX1NOQVBfRU5fU0hJRlQpKTsKIAogCQlwYmQtPmlwX2hsZW4gPSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCiAJCQkJc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpIC8gMjsKQEAgLTk4MTAsMTIgKzEwNTg3LDEwIEBACiAJICovCiAJd21iKCk7CiAKLQlmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kID0KLQkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCkgKyBuYmQpOworCWxlMTZfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCwgbmJkKTsKIAltYigpOyAvKiBGVyByZXN0cmljdGlvbjogbXVzdCBub3QgcmVvcmRlciB3cml0aW5nIG5iZCBhbmQgcGFja2V0cyAqLwotCWZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kID0KLQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QpICsgMSk7Ci0JRE9PUkJFTEwoYnAsIEZQX0lEWChmcCksIDApOworCWxlMzJfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QsIDEpOworCURPT1JCRUxMKGJwLCBmcC0+aW5kZXgsIDApOwogCiAJbW1pb3diKCk7CiAKQEAgLTk4MjYsMTAgKzEwNjAxLDEwIEBACiAJCS8qIFdlIHdhbnQgYm54MnhfdHhfaW50IHRvICJzZWUiIHRoZSB1cGRhdGVkIHR4X2JkX3Byb2QKIAkJICAgaWYgd2UgcHV0IFR4IGludG8gWE9GRiBzdGF0ZS4gKi8KIAkJc21wX21iKCk7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJYnAtPmV0aF9zdGF0cy5kcml2ZXJfeG9mZisrOworCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CisJCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOwogCQlpZiAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCX0KIAlmcC0+dHhfcGt0Kys7CiAKQEAgLTk4NjIsNyArMTA2MzcsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGZyb20gc2V0X211bHRpY2FzdCAqLworLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIGRldl9tY2FzdC5jICovCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTkyMSw3ICsxMDY5Niw3IEBACiAJCQkJICAgY29uZmlnLT5jb25maWdfdGFibGVbaV0uCiAJCQkJCQljYW1fZW50cnkubHNiX21hY19hZGRyKTsKIAkJCX0KLQkJCW9sZCA9IGNvbmZpZy0+aGRyLmxlbmd0aF82YjsKKwkJCW9sZCA9IGNvbmZpZy0+aGRyLmxlbmd0aDsKIAkJCWlmIChvbGQgPiBpKSB7CiAJCQkJZm9yICg7IGkgPCBvbGQ7IGkrKykgewogCQkJCQlpZiAoQ0FNX0lTX0lOVkFMSUQoY29uZmlnLT4KQEAgLTk5NDAsOSArMTA3MTUsOSBAQAogCQkJZWxzZQogCQkJCW9mZnNldCA9IEJOWDJYX01BWF9NVUxUSUNBU1QqKDEgKyBwb3J0KTsKIAotCQkJY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gaTsKKwkJCWNvbmZpZy0+aGRyLmxlbmd0aCA9IGk7CiAJCQljb25maWctPmhkci5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJCQljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCQkJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCQkJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTEwMTI4LDcgKzEwOTAzLDcgQEAKIAkubmRvX29wZW4JCT0gYm54Mnhfb3BlbiwKIAkubmRvX3N0b3AJCT0gYm54MnhfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGJueDJ4X3N0YXJ0X3htaXQsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBibngyeF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGJueDJ4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYm54MnhfY2hhbmdlX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwJCT0gYm54MnhfaW9jdGwsCkBAIC0xMDE0Miw3ICsxMDkxNyw2IEBACiAjZW5kaWYKIH07CiAKLQogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMDMyMSw3ICsxMTA5NSw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CiAKIAkvKiBkZXYgemVyb2VkIGluIGluaXRfZXRoZXJkZXYgKi8KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmJwKSk7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpicCksIE1BWF9DT05URVhUKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTAzNDgsMTQgKzExMTIyLDE0IEBACiAJCWdvdG8gaW5pdF9vbmVfZXhpdDsKIAl9CiAKLQlicC0+Y29tbW9uLm5hbWUgPSBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWU7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwiCi0JICAgICAgICIgSVJRICVkLCAiLCBkZXYtPm5hbWUsIGJwLT5jb21tb24ubmFtZSwKKwkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAogCSAgICAgICAoQ0hJUF9SRVYoYnApID4+IDEyKSArICdBJywgKENISVBfTUVUQUwoYnApID4+IDQpLAogCSAgICAgICBibngyeF9nZXRfcGNpZV93aWR0aChicCksCiAJICAgICAgIChibngyeF9nZXRfcGNpZV9zcGVlZChicCkgPT0gMikgPyAiNUdIeiAoR2VuMikiIDogIjIuNUdIeiIsCiAJICAgICAgIGRldi0+YmFzZV9hZGRyLCBicC0+cGRldi0+aXJxKTsKIAlwcmludGsoS0VSTl9DT05UICJub2RlIGFkZHIgJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKwogCXJldHVybiAwOwogCiBpbml0X29uZV9leGl0OgpAQCAtMTA0ODcsMTUgKzExMjYxLDE1IEBACiAJCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWQgKmNvbmZpZyA9CiAJCQkJCQlibngyeF9zcChicCwgbWNhc3RfY29uZmlnKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoXzZiOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGg7IGkrKykKIAkJCUNBTV9JTlZBTElEQVRFKGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldKTsKIAl9CiAKIAkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCiAJYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2RlbCgmYm54MnhfZnAoYnAsIGksIG5hcGkpKTsKIAlibngyeF9mcmVlX21lbShicCk7CiAKQEAgLTEwNjIyLDggKzExMzk2LDggQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgYm54MnhfZXJyX2hhbmRsZXIgPSB7CiAJLmVycm9yX2RldGVjdGVkID0gYm54MnhfaW9fZXJyb3JfZGV0ZWN0ZWQsCi0JLnNsb3RfcmVzZXQgPSBibngyeF9pb19zbG90X3Jlc2V0LAotCS5yZXN1bWUgPSBibngyeF9pb19yZXN1bWUsCisJLnNsb3RfcmVzZXQgICAgID0gYm54MnhfaW9fc2xvdF9yZXNldCwKKwkucmVzdW1lICAgICAgICAgPSBibngyeF9pb19yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYm54MnhfcGNpX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKaW5kZXggZDA4NGU1Zi4uYjhjZTZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfcmVnLmgKQEAgLTMwLDggKzMwLDIwIEBACiAgICBhZGRyZXNzIEJSQjFfSU5EX0ZSRUVfTElTVF9QUlNfQ1JEVCsxIGluaXRpYWxpemUgZnJlZSB0YWlsLiBBdCBhZGRyZXNzCiAgICBCUkIxX0lORF9GUkVFX0xJU1RfUFJTX0NSRFQrMiBpbml0aWFsaXplIHBhcnNlciBpbml0aWFsIGNyZWRpdC4gKi8KICNkZWZpbmUgQlJCMV9SRUdfRlJFRV9MSVNUX1BSU19DUkRUCQkJCSAweDYwMjAwCisvKiBbUlcgMTBdIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIEhpZ2hfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBkZS1hc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfSElHSF9MTEZDX0hJR0hfVEhSRVNIT0xEXzAJCQkgMHg2MDE0YworLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBIaWdoX2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0hJR0hfTExGQ19MT1dfVEhSRVNIT0xEXzAJCQkgMHg2MDEzYwogLyogW1JXIDIzXSBMTCBSQU0gZGF0YS4gKi8KICNkZWZpbmUgQlJCMV9SRUdfTExfUkFNIAkJCQkJIDB4NjEwMDAKKy8qIFtSVyAxMF0gVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhYm92ZSB3aGljaCB0aGUgTG93X2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgZGUtYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0xPV19MTEZDX0hJR0hfVEhSRVNIT0xEXzAJCQkgMHg2MDE2YworLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBMb3dfbGxmYyBzaWduYWwgdG8KKyAgIGludGVyZmFjZSAjbiBpcyBhc3NlcnRlZC4gKi8KKyNkZWZpbmUgQlJCMV9SRUdfTE9XX0xMRkNfTE9XX1RIUkVTSE9MRF8wCQkJIDB4NjAxNWMKIC8qIFtSIDI0XSBUaGUgbnVtYmVyIG9mIGZ1bGwgYmxvY2tzLiAqLwogI2RlZmluZSBCUkIxX1JFR19OVU1fT0ZfRlVMTF9CTE9DS1MJCQkJIDB4NjAwOTAKIC8qIFtTVCAzMl0gVGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCB0aGUgd3JpdGVfZnVsbCBzaWduYWwgdG93YXJkcyBNQUMgIzAKQEAgLTEyNSw2ICsxMzcsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIENDTV9SRUdfQ1FNX1BfV0VJR0hUCQkJCQkgMHhkMDBiOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBDQ01fUkVHX0NRTV9TX1dFSUdIVAkJCQkJIDB4ZDAwYmMKIC8qIFtSVyAxXSBJbnB1dCBTRE0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcyBkaXNyZWdhcmRlZDsKICAgIGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUgdHJlYXRlZCBhcyB1c3VhbDsKICAgIGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0xMzIsNiArMTQ4LDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU0RNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgQ0NNX1JFR19DU0RNX0xFTkdUSF9NSVMgCQkJCSAweGQwMTcwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU0RNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBDQ01fUkVHX0NTRE1fV0VJR0hUCQkJCQkgMHhkMDBiNAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIGZvciBRTSBmb3JtYXR0aW5nIGluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gdGhlIFFNCiAgICBpbnB1dHMuICovCiAjZGVmaW5lIENDTV9SRUdfRVJSX0NDTV9IRFIJCQkJCSAweGQwMDk0CkBAIC0yMTEsNiArMjMxLDExIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU1RPUk0gaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBDQ01fUkVHX1NUT1JNX0xFTkdUSF9NSVMJCQkJIDB4ZDAxNmMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBTVE9STSBpbnB1dCBpbiB0aGUgV1JSIChXZWlnaHRlZCBSb3VuZCByb2JpbikKKyAgIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDEobGVhc3QgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDIgKG1vcmUgcHJpb3JpdGlzZWQpOworICAgdGMuICovCisjZGVmaW5lIENDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHhkMDA5YwogLyogW1JXIDFdIElucHV0IHRzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0zMjMsNyArMzQ4LDExIEBACiAgICBzZXQgb25lIG9mIHRoZXNlIGJpdHMuIHRoZSBiaXQgZGVzY3JpcHRpb24gY2FuIGJlIGZvdW5kIGluIENGQwogICAgc3BlY2lmaWNhdGlvbnMgKi8KICNkZWZpbmUgQ0ZDX1JFR19FUlJPUl9WRUNUT1IJCQkJCSAweDEwNDAzYworLyogW1dCIDkzXSBMQ0lEIGluZm8gcmFtIGFjY2VzcyAqLworI2RlZmluZSBDRkNfUkVHX0lORk9fUkFNCQkJCQkgMHgxMDUwMDAKKyNkZWZpbmUgQ0ZDX1JFR19JTkZPX1JBTV9TSVpFCQkJCQkgMTAyNAogI2RlZmluZSBDRkNfUkVHX0lOSVRfUkVHCQkJCQkgMHgxMDQwNGMKKyNkZWZpbmUgQ0ZDX1JFR19JTlRFUkZBQ0VTCQkJCQkgMHgxMDQwNTgKIC8qIFtSVyAyNF0ge3dlaWdodF9sb2FkX2NsaWVudDdbMjowXSB0byB3ZWlnaHRfbG9hZF9jbGllbnQwWzI6MF19LiB0aGlzCiAgICBmaWVsZCBhbGxvd3MgY2hhbmdpbmcgdGhlIHByaW9yaXRpZXMgb2YgdGhlIHdlaWdodGVkLXJvdW5kLXJvYmluIGFyYml0ZXIKICAgIHdoaWNoIHNlbGVjdHMgd2hpY2ggQ0ZDIGxvYWQgY2xpZW50IHNob3VsZCBiZSBzZXJ2ZWQgbmV4dCAqLwpAQCAtMzM3LDggKzM2Niw2IEBACiAjZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0FMTE9DIAkJCQkgMHgxMDQwMjAKIC8qIFtSIDldIE51bWJlciBvZiBBcnJpdmluZyBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfQVJSSVZJTkcJCQkJIDB4MTA0MDA0Ci0vKiBbUiA5XSBOdW1iZXIgb2YgSW5zaWRlIExDSURzIGluIExpbmsgTGlzdCBCbG9jayAqLwotI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19JTlNJREUJCQkJIDB4MTA0MDA4CiAvKiBbUiA5XSBOdW1iZXIgb2YgTGVhdmluZyBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KICNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfTEVBVklORwkJCQkgMHgxMDQwMTgKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KQEAgLTczMCw2ICs3NTcsNyBAQAogI2RlZmluZSBET1JRX1JFR19TSFJUX0NNSEVBRAkJCQkJIDB4MTcwMDU0CiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19BVFROX0JJVF9FTl8wCQkJCSAoMHgxPDw0KQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMAkJCQkgKDB4MTw8MykKKyNkZWZpbmUgSENfQ09ORklHXzBfUkVHX01TSV9BVFROX0VOXzAJCQkJICgweDE8PDcpCiAjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMAkJCSAoMHgxPDwyKQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIAkJCSAoMHgxPDwxKQogI2RlZmluZSBIQ19SRUdfQUdHX0lOVF8wCQkJCQkgMHgxMDgwNTAKQEAgLTE0MTAsNiArMTQzOCwyOSBAQAogICAgVGhpcyBpcyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBwaW47IG5vdCB0aGUgZHJpdmUgdmFsdWUuIFdyaXRpbmcgdGhlc2UKICAgIGJpdHMgd2lsbCBoYXZlIG5vdCBlZmZlY3QuICovCiAjZGVmaW5lIE1JU0NfUkVHX0dQSU8JCQkJCQkgMHhhNDkwCisvKiBbUlcgOF0gVGhlc2UgYml0cyBlbmFibGUgdGhlIEdQSU9fSU5UcyB0byBzaWduYWxzIGV2ZW50IHRvIHRoZQorICAgSUdVL01DUC5hY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBtYXA6IFswXSBwMF9ncGlvXzA7IFsxXSBwMF9ncGlvXzE7IFsyXQorICAgcDBfZ3Bpb18yOyBbM10gcDBfZ3Bpb18zOyBbNF0gcDFfZ3Bpb18wOyBbNV0gcDFfZ3Bpb18xOyBbNl0gcDFfZ3Bpb18yOworICAgWzddIHAxX2dwaW9fMzsgKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1BJT19FVkVOVF9FTgkJCQkJIDB4YTJiYworLyogW1JXIDMyXSBHUElPIElOVC4gWzMxLTI4XSBPTERfQ0xSIHBvcnQxOyBbMjctMjRdIE9MRF9DTFIgcG9ydDA7IFdyaXRpbmcgYQorICAgJzEnIHRvIHRoZXNlIGJpdCBjbGVhcnMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSAjT0xEX1ZBTFVFIHJlZ2lzdGVyLgorICAgVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUgZmFsbGluZyBlZGdlIG9mIGNvcnJlc3BvbmRpbmcKKyAgIEdQSU8gaW5wdXQgKHJlc2V0IHZhbHVlIDApLiBbMjMtMTZdIE9MRF9TRVQgWzIzLTE2XSBwb3J0MTsgT0xEX1NFVCBwb3J0MDsKKyAgIFdyaXRpbmcgYSAnMScgdG8gdGhlc2UgYml0IHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSAjT0xEX1ZBTFVFCisgICByZWdpc3Rlci4gVGhpcyB3aWxsIGFja25vd2xlZGdlIGFuIGludGVycnVwdCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YKKyAgIGNvcnJlc3BvbmRpbmcgU1BJTyBpbnB1dCAocmVzZXQgdmFsdWUgMCkuIFsxNS0xMl0gT0xEX1ZBTFVFIFsxMS04XSBwb3J0MTsKKyAgIE9MRF9WQUxVRSBwb3J0MDsgUk87IFRoZXNlIGJpdHMgaW5kaWNhdGUgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgR1BJTyBpbnB1dAorICAgdmFsdWUuIFdoZW4gdGhlIH5JTlRfU1RBVEUgYml0IGlzIHNldDsgdGhpcyBiaXQgaW5kaWNhdGVzIHRoZSBPTEQgdmFsdWUKKyAgIG9mIHRoZSBwaW4gc3VjaCB0aGF0IGlmIH5JTlRfU1RBVEUgaXMgc2V0IGFuZCB0aGlzIGJpdCBpcyAnMCc7IHRoZW4gdGhlCisgICBpbnRlcnJ1cHQgaXMgZHVlIHRvIGEgbG93IHRvIGhpZ2ggZWRnZS4gSWYgfklOVF9TVEFURSBpcyBzZXQgYW5kIHRoaXMgYml0CisgICBpcyAnMSc7IHRoZW4gdGhlIGludGVycnVwdCBpcyBkdWUgdG8gYSBoaWdoIHRvIGxvdyBlZGdlIChyZXNldCB2YWx1ZSAwKS4KKyAgIFs3LTRdIElOVF9TVEFURSBwb3J0MTsgWzMtMF0gSU5UX1NUQVRFIFJPIHBvcnQwOyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZQorICAgY3VycmVudCBHUElPIGludGVycnVwdCBzdGF0ZSBmb3IgZWFjaCBHUElPIHBpbi4gVGhpcyBiaXQgaXMgY2xlYXJlZCB3aGVuCisgICB0aGUgYXBwcm9wcmlhdGUgI09MRF9TRVQgb3IgI09MRF9DTFIgY29tbWFuZCBiaXQgaXMgd3JpdHRlbi4gVGhpcyBiaXQgaXMKKyAgIHNldCB3aGVuIHRoZSBHUElPIGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZhbHVlIGluICNPTERfVkFMVUUKKyAgIChyZXNldCB2YWx1ZSAwKS4gKi8KKyNkZWZpbmUgTUlTQ19SRUdfR1BJT19JTlQJCQkJCSAweGE0OTQKIC8qIFtSIDI4XSB0aGlzIGZpZWxkIGhvbGQgdGhlIGxhc3QgaW5mb3JtYXRpb24gdGhhdCBjYXVzZWQgcmVzZXJ2ZWQKICAgIGF0dGVudGlvbi4gYml0cyBbMTk6MF0gLSBhZGRyZXNzOyBbMjI6MjBdIGZ1bmN0aW9uOyBbMjNdIHJlc2VydmVkOwogICAgWzI3OjI0XSB0aGUgbWFzdGVyIHRoYXQgY2F1c2VkIHRoZSBhdHRlbnRpb24gLSBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwpAQCAtMTU1NCw2ICsxNjA1LDE0IEBACiAgICBjb21tYW5kIGJpdCBpcyB3cml0dGVuLiBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgU1BJTyBpbnB1dCBkb2VzIG5vdAogICAgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWUgaW4gI09MRF9WQUxVRSAocmVzZXQgdmFsdWUgMCkuICovCiAjZGVmaW5lIE1JU0NfUkVHX1NQSU9fSU5UCQkJCQkgMHhhNTAwCisvKiBbUlcgMzJdIHJlbG9hZCB2YWx1ZSBmb3IgY291bnRlciA0IGlmIHJlbG9hZDsgdGhlIHZhbHVlIHdpbGwgYmUgcmVsb2FkIGlmCisgICB0aGUgY291bnRlciByZWFjaGVkIHplcm8gYW5kIHRoZSByZWxvYWQgYml0CisgICAofm1pc2NfcmVnaXN0ZXJzX3N3X3RpbWVyX2NmZ180LnN3X3RpbWVyX2NmZ180WzFdICkgaXMgc2V0ICovCisjZGVmaW5lIE1JU0NfUkVHX1NXX1RJTUVSX1JFTE9BRF9WQUxfNAkJCQkgMHhhMmZjCisvKiBbUlcgMzJdIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBmb3Igc3cgdGltZXJzMS04LiB0aGVyZSBhcmUgOCBhZGRyZXNzZXMKKyAgIGluIHRoaXMgcmVnaXN0ZXIuIGFkZHJlcyAwIC0gdGltZXIgMTsgYWRkcmVzcyAtIHRpbWVyIDLvv71hZGRyZXNzIDcgLQorICAgdGltZXIgOCAqLworI2RlZmluZSBNSVNDX1JFR19TV19USU1FUl9WQUwJCQkJCSAweGE1YzAKIC8qIFtSVyAxXSBTZXQgYnkgdGhlIE1DUCB0byByZW1lbWJlciBpZiBvbmUgb3IgbW9yZSBvZiB0aGUgZHJpdmVycyBpcy9hcmUKICAgIGxvYWRlZDsgMC1wcmVwYXJlOyAtdW5wcmVwYXJlICovCiAjZGVmaW5lIE1JU0NfUkVHX1VOUFJFUEFSRUQJCQkJCSAweGE0MjQKQEAgLTE2NjAsNiArMTcxOSwxOSBAQAogLyogW1JXIDRdIGxlZCBtb2RlIGZvciBwb3J0MDogMCBNQUM7IDEtMyBQSFkxOyA0IE1BQzI7IDUtNyBQSFk0OyA4LU1BQzM7CiAgICA5LTExUEhZNzsgMTIgTUFDNDsgMTMtMTUgUEhZMTA7ICovCiAjZGVmaW5lIE5JR19SRUdfTEVEX01PREVfUDAJCQkJCSAweDEwMmYwCisvKiBbUlcgM10gZm9yIHBvcnQwIGVuYWJsZSBmb3IgbGxmYyBwcHAgYW5kIHBhdXNlLiBiMCAtIGJyYjEgZW5hYmxlOyBiMS0KKyAgIHRzZG0gZW5hYmxlOyBiMi0gdXNkbSBlbmFibGUgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzAJCQkgMHgxNjA3MAorLyogW1JXIDFdIFNBRkMgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgICB+cHBwX2VuYWJsZS5wcHBfZW5hYmxlID0gMCBhbmQgcGF1c2VfZW5hYmxlLnBhdXNlX2VuYWJsZSA9MCBmb3IgdGhlIHNhbWUKKyAgIHBvcnQgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0VOQUJMRV8wCQkJCQkgMHgxNjIwOAorLyogW1JXIDE2XSBjbGFzc2VzIGFyZSBoaWdoLXByaW9yaXR5IGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfSElHSF9QUklPUklUWV9DTEFTU0VTXzAJCQkgMHgxNjA1OAorLyogW1JXIDE2XSBjbGFzc2VzIGFyZSBsb3ctcHJpb3JpdHkgZm9yIHBvcnQwICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19MT1dfUFJJT1JJVFlfQ0xBU1NFU18wCQkJIDB4MTYwNjAKKy8qIFtSVyAxXSBPdXRwdXQgZW5hYmxlIG9mIG1lc3NhZ2UgdG8gTExGQyBCTUFDIElGIGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfT1VUX0VOXzAJCQkJCSAweDE2MGM4CiAjZGVmaW5lIE5JR19SRUdfTExIMF9BQ1BJX1BBVF8wX0NSQwkJCQkgMHgxMDE1YwogI2RlZmluZSBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfNl9MRU4JCQkJIDB4MTAxNTQKICNkZWZpbmUgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0sJCQkJIDB4MTAyNDQKQEAgLTE3MzAsNiArMTgwMiwxMCBAQAogI2RlZmluZSBOSUdfUkVHX05JR19JTlRfU1RTXzEJCQkJCSAweDEwM2MwCiAvKiBbUiAzMl0gUGFyaXR5IHJlZ2lzdGVyICMwIHJlYWQgKi8KICNkZWZpbmUgTklHX1JFR19OSUdfUFJUWV9TVFMJCQkJCSAweDEwM2QwCisvKiBbUlcgMV0gUGF1c2UgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgICB+c2FmY19lbmFibGUuc2FmY19lbmFibGUgPSAwIGFuZCBwcHBfZW5hYmxlLnBwcF9lbmFibGUgPTAgZm9yIHRoZSBzYW1lCisgICBwb3J0ICovCisjZGVmaW5lIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAJCQkJCSAweDE2MGMwCiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWCBQQkYgTFAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QQkZfTEJfSU5fRU4JCQkJCSAweDEwMGI0CiAvKiBbUlcgMV0gVmFsdWUgb2YgdGhpcyByZWdpc3RlciB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIHBvcnQgc3dhcCB3aGVuCkBAIC0xNzM5LDYgKzE4MTUsMTAgQEAKICNkZWZpbmUgTklHX1JFR19QUlNfRU9QX09VVF9FTgkJCQkJIDB4MTAxMDQKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYIHBhcnNlciByZXF1ZXN0IElGICovCiAjZGVmaW5lIE5JR19SRUdfUFJTX1JFUV9JTl9FTgkJCQkJIDB4MTAwYjgKKy8qIFtSVyA1XSBjb250cm9sIHRvIHNlcmRlcyAtIENMNDUgREVWQUQgKi8KKyNkZWZpbmUgTklHX1JFR19TRVJERVMwX0NUUkxfTURfREVWQUQJCQkJIDB4MTAzNzAKKy8qIFtSVyAxXSBjb250cm9sIHRvIHNlcmRlczsgMCAtIGNsYXVzZSA0NTsgMSAtIGNsYXVzZSAyMiAqLworI2RlZmluZSBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9TVAkJCQkgMHgxMDM2YwogLyogW1JXIDVdIGNvbnRyb2wgdG8gc2VyZGVzIC0gQ0wyMiBQSFlfQUREIGFuZCBDTDQ1IFBSVEFEICovCiAjZGVmaW5lIE5JR19SRUdfU0VSREVTMF9DVFJMX1BIWV9BRERSCQkJCSAweDEwMzc0CiAvKiBbUiAxXSBzdGF0dXMgZnJvbSBzZXJkZXMwIHRoYXQgaW5wdXRzIHRvIGludGVycnVwdCBsb2dpYyBvZiBsaW5rIHN0YXR1cyAqLwpAQCAtMTg4NSw2ICsxOTY1LDcgQEAKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzIJCQkgMHg0MDBlNAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMwkJCSAweDQwMGU4CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV80CQkJIDB4NDAwZWMKKyNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzUJCQkgMHg0MDBmMAogLyogW1JXIDMyXSBUaGUgQ00gaGVhZGVyIGZvciBmbHVzaCBtZXNzYWdlIHdoZXJlICdsb2FkIGV4aXN0ZWQnIGJpdCBpbiBDRkMKICAgIGxvYWQgcmVzcG9uc2UgaXMgc2V0IGFuZCBwYWNrZXQgdHlwZSBpcyAwLiBVc2VkIGluIHBhY2tldCBzdGFydCBtZXNzYWdlCiAgICB0byBUQ00uICovCkBAIC0xODkzLDYgKzE5NzQsNyBAQAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMgkJCSAweDQwMGM0CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV8zCQkJIDB4NDAwYzgKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzQJCQkgMHg0MDBjYworI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNQkJCSAweDQwMGQwCiAvKiBbUlcgMzJdIFRoZSBDTSBoZWFkZXIgZm9yIGEgbWF0Y2ggYW5kIHBhY2tldCB0eXBlIDEgZm9yIGxvb3BiYWNrIHBvcnQuCiAgICBVc2VkIGluIHBhY2tldCBzdGFydCBtZXNzYWdlIHRvIFRDTS4gKi8KICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfTE9PUEJBQ0tfVFlQRV8xCQkJCSAweDQwMDljCkBAIC0yMDM1LDYgKzIxMTcsMTkgQEAKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzUgCQkJCSAweDEyMDRlOAogI2RlZmluZSBQWFAyX1JFR19QR0xfSU5UX1hTRE1fNiAJCQkJIDB4MTIwNGVjCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9JTlRfWFNETV83IAkJCQkgMHgxMjA0ZjAKKy8qIFtSVyAzXSB0aGlzIGZpZWxkIGFsbG93cyBvbmUgZnVuY3Rpb24gdG8gcHJldGVuZCBiZWluZyBhbm90aGVyIGZ1bmN0aW9uCisgICB3aGVuIGFjY2Vzc2luZyBhbnkgQkFSIG1hcHBlZCByZXNvdXJjZSB3aXRoaW4gdGhlIGRldmljZS4gdGhlIHZhbHVlIG9mCisgICB0aGUgZmllbGQgaXMgdGhlIG51bWJlciBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGFjY2Vzc2VkCisgICBlZmZlY3RpdmVseS4gYWZ0ZXIgc29mdHdhcmUgd3JpdGUgdG8gdGhpcyBiaXQgaXQgbXVzdCByZWFkIGl0IGluIG9yZGVyIHRvCisgICBrbm93IHRoYXQgdGhlIG5ldyB2YWx1ZSBpcyB1cGRhdGVkICovCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjAJCQkJIDB4MTIwNjc0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjEJCQkJIDB4MTIwNjc4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjIJCQkJIDB4MTIwNjdjCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjMJCQkJIDB4MTIwNjgwCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjQJCQkJIDB4MTIwNjg0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjUJCQkJIDB4MTIwNjg4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjYJCQkJIDB4MTIwNjhjCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjcJCQkJIDB4MTIwNjkwCiAvKiBbUiAxXSB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHJlYWQgcmVxdWVzdCB3YXMgYmxvY2tlZCBiZWNhdXNlIG9mCiAgICBidXNfbWFzdGVyX2VuIHdhcyBkZWFzc2VydGVkICovCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9SRUFEX0JMT0NLRUQJCQkJIDB4MTIwNTY4CkBAIC0yNDk4LDYgKzI1OTMsMTEgQEAKICAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXI7CiAgICBxdWV1ZXMgNjMtMCAqLwogI2RlZmluZSBRTV9SRUdfQkFTRUFERFIgCQkJCQkgMHgxNjg5MDAKKy8qIFtSVyAzMl0gVGhlIGJhc2UgbG9naWNhbCBhZGRyZXNzIChpbiBieXRlcykgb2YgZWFjaCBwaHlzaWNhbCBxdWV1ZS4gVGhlCisgICBpbmRleCBJIHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlci4gVGhlIDEyIGxzYnMgYXJlIGlnbm9yZSBhbmQKKyAgIGNvbnNpZGVyZWQgemVybyBzbyBwcmFjdGljYWxseSB0aGVyZSBhcmUgb25seSAyMCBiaXRzIGluIHRoaXMgcmVnaXN0ZXI7CisgICBxdWV1ZXMgMTI3LTY0ICovCisjZGVmaW5lIFFNX1JFR19CQVNFQUREUl9FWFRfQQkJCQkJIDB4MTZlMTAwCiAvKiBbUlcgMTZdIFRoZSBieXRlIGNyZWRpdCBjb3N0IGZvciBlYWNoIHRhc2suIFRoaXMgdmFsdWUgaXMgZm9yIGJvdGggcG9ydHMgKi8KICNkZWZpbmUgUU1fUkVHX0JZVEVDUkRDT1NUCQkJCQkgMHgxNjgyMzQKIC8qIFtSVyAxNl0gVGhlIGluaXRpYWwgYnl0ZSBjcmVkaXQgdmFsdWUgZm9yIGJvdGggcG9ydHMuICovCkBAIC0zNDM4LDYgKzM1MzgsMTYgQEAKICNkZWZpbmUgU1JDX1JFR19LRVlSU1MwXzAJCQkJCSAweDQwNDA4CiAjZGVmaW5lIFNSQ19SRUdfS0VZUlNTMF83CQkJCQkgMHg0MDQyNAogI2RlZmluZSBTUkNfUkVHX0tFWVJTUzFfOQkJCQkJIDB4NDA0NTQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMAkJCQkJIDB4NDA0NTgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMQkJCQkJIDB4NDA0NWMKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMgkJCQkJIDB4NDA0NjAKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfMwkJCQkJIDB4NDA0NjQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNAkJCQkJIDB4NDA0NjgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNQkJCQkJIDB4NDA0NmMKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNgkJCQkJIDB4NDA0NzAKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfNwkJCQkJIDB4NDA0NzQKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfOAkJCQkJIDB4NDA0NzgKKyNkZWZpbmUgU1JDX1JFR19LRVlTRUFSQ0hfOQkJCQkJIDB4NDA0N2MKICNkZWZpbmUgU1JDX1JFR19MQVNURlJFRTAJCQkJCSAweDQwNTMwCiAjZGVmaW5lIFNSQ19SRUdfTlVNQkVSX0hBU0hfQklUUzAJCQkJIDB4NDA0MDAKIC8qIFtSVyAxXSBSZXNldCBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lcy4gKi8KQEAgLTM0ODEsNiArMzU5MSwxMCBAQAogLyogW1JDIDFdIE1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0IHRoZSBJbiM5CiAgICBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFRDTV9SRUdfQ1NFTV9MRU5HVEhfTUlTIAkJCQkgMHg1MDE3NAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IGNzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfQ1NFTV9XRUlHSFQJCQkJCSAweDUwMGJjCiAvKiBbUlcgOF0gVGhlIEV2ZW50IElEIGluIGNhc2Ugb2YgRXJyb3JGbGcgaXMgc2V0IGluIHRoZSBpbnB1dCBtZXNzYWdlLiAqLwogI2RlZmluZSBUQ01fUkVHX0VSUl9FVk5UX0lECQkJCQkgMHg1MDBhMAogLyogW1JXIDI4XSBUaGUgQ00gZXJyb25lb3VzIGhlYWRlciBmb3IgUU0gYW5kIFRpbWVycyBmb3JtYXR0aW5nLiAqLwpAQCAtMzUyNCw2ICszNjM4LDcgQEAKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHg1MDA1OAogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweDUwMDVjCiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4NTAwNjAKKyNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF81CQkJCQkgMHg1MDA2NAogLyogW1JXIDFdIElucHV0IHBiZiBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTM1NjMsNiArMzY3OCwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFRDTV9SRUdfU1RPUk1fVENNX0lGRU4JCQkJCSAweDUwMDEwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHg1MDBhYwogLyogW1JXIDFdIENNIC0gQ0ZDIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMgZGlzcmVnYXJkZWQ7CiAgICBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlIHRyZWF0ZWQgYXMgdXN1YWw7CiAgICBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMzU5OCwxMCArMzcxNywyMiBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFRDTV9SRUdfVE1fVENNX0lGRU4JCQkJCSAweDUwMDFjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgVGltZXJzIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RNX1dFSUdIVAkJCQkJIDB4NTAwZDAKIC8qIFtSVyA2XSBRTSBvdXRwdXQgaW5pdGlhbCBjcmVkaXQuIE1heCBjcmVkaXQgYXZhaWxhYmxlIC0gMzIuV3JpdGUgd3JpdGVzCiAgICB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY3JlZGl0CiAgICBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDMyIGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBUQ01fUkVHX1RRTV9JTklUX0NSRAkJCQkJIDB4NTAyMWMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAocHJpbWFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVFFNX1BfV0VJR0hUCQkJCQkgMHg1MDBjOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RRTV9TX1dFSUdIVAkJCQkJIDB4NTAwY2MKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFRDTV9SRUdfVFFNX1RDTV9IRFJfUAkJCQkJIDB4NTAwOTAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTM2MjgsNiArMzc1OSwxMCBAQAogLyogW1JDIDFdIE1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0IHRoZSBJbiM4CiAgICBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFRDTV9SRUdfVVNFTV9MRU5HVEhfTUlTIAkJCQkgMHg1MDE3MAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IHVzZW0gaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFRDTV9SRUdfVVNFTV9XRUlHSFQJCQkJCSAweDUwMGI4CiAvKiBbUlcgMjFdIEluZGlyZWN0IGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgWFggcHJvdGVjdGlvbgogICAgbWVjaGFuaXNtLiBUaGUgZmllbGRzIGFyZTogWzU6MF0gLSBsZW5ndGggb2YgdGhlIG1lc3NhZ2U7IDE1OjZdIC0gbWVzc2FnZQogICAgcG9pbnRlcjsgMjA6MTZdIC0gbmV4dCBwb2ludGVyLiAqLwpAQCAtMzY3Nyw2ICszODEyLDcgQEAKICNkZWZpbmUgVE1fUkVHX0VOX0NMMV9JTlBVVAkJCQkJIDB4MTY0MDBjCiAvKiBbUlcgMV0gRW5hYmxlIGNsaWVudDIgaW5wdXQuICovCiAjZGVmaW5lIFRNX1JFR19FTl9DTDJfSU5QVVQJCQkJCSAweDE2NDAxMAorI2RlZmluZSBUTV9SRUdfRU5fTElORUFSMF9USU1FUiAJCQkJIDB4MTY0MDE0CiAvKiBbUlcgMV0gRW5hYmxlIHJlYWwgdGltZSBjb3VudGVyLiAqLwogI2RlZmluZSBUTV9SRUdfRU5fUkVBTF9USU1FX0NOVCAJCQkJIDB4MTY0MGQ4CiAvKiBbUlcgMV0gRW5hYmxlIGZvciBUaW1lcnMgc3RhdGUgbWFjaGluZXMuICovCkBAIC0zNjg0LDE0ICszODIwLDIyIEBACiAvKiBbUlcgNF0gTG9hZCB2YWx1ZSBmb3IgZXhwaXJhdGlvbiBjcmVkaXQgY250LiBDRkMgbWF4IG51bWJlciBvZgogICAgb3V0c3RhbmRpbmcgbG9hZCByZXF1ZXN0cyBmb3IgdGltZXJzIChleHBpcmF0aW9uKSBjb250ZXh0IGxvYWRpbmcuICovCiAjZGVmaW5lIFRNX1JFR19FWFBfQ1JEQ05UX1ZBTAkJCQkJIDB4MTY0MjM4CisvKiBbUlcgMzJdIExpbmVhcjAgbG9naWMgYWRkcmVzcy4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjBfTE9HSUNfQUREUgkJCQkJIDB4MTY0MjQwCiAvKiBbUlcgMThdIExpbmVhcjAgTWF4IGFjdGl2ZSBjaWQgKGluIGJhbmtzIG9mIDMyIGVudHJpZXMpLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9NQVhfQUNUSVZFX0NJRAkJCQkgMHgxNjQwNDgKIC8qIFtXQiA2NF0gTGluZWFyMCBwaHkgYWRkcmVzcy4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTjBfUEhZX0FERFIJCQkJCSAweDE2NDI3MAorLyogW1JXIDFdIExpbmVhcjAgcGh5c2ljYWwgYWRkcmVzcyB2YWxpZC4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjBfUEhZX0FERFJfVkFMSUQJCQkJIDB4MTY0MjQ4CiAvKiBbUlcgMjRdIExpbmVhcjAgYXJyYXkgc2NhbiB0aW1lb3V0LiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9TQ0FOX1RJTUUJCQkJCSAweDE2NDAzYworLyogW1JXIDMyXSBMaW5lYXIxIGxvZ2ljIGFkZHJlc3MuICovCisjZGVmaW5lIFRNX1JFR19MSU4xX0xPR0lDX0FERFIJCQkJCSAweDE2NDI1MAogLyogW1dCIDY0XSBMaW5lYXIxIHBoeSBhZGRyZXNzLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMV9QSFlfQUREUgkJCQkJIDB4MTY0MjgwCisvKiBbUlcgMV0gTGluZWFyMSBwaHlzaWNhbCBhZGRyZXNzIHZhbGlkLiAqLworI2RlZmluZSBUTV9SRUdfTElOMV9QSFlfQUREUl9WQUxJRAkJCQkgMHgxNjQyNTgKIC8qIFtSVyA2XSBMaW5lYXIgdGltZXIgc2V0X2NsZWFyIGZpZm8gdGhyZXNob2xkLiAqLwogI2RlZmluZSBUTV9SRUdfTElOX1NFVENMUl9GSUZPX0FMRlVMTF9USFIJCQkgMHgxNjQwNzAKIC8qIFtSVyAyXSBMb2FkIHZhbHVlIGZvciBwY2kgYXJiaXRlciBjcmVkaXQgY250LiAqLwpAQCAtMzcwOCw2ICszODUyLDE3IEBACiAjZGVmaW5lIFRNX1JFR19UTV9JTlRfU1RTCQkJCQkgMHgxNjQwZjAKIC8qIFtSVyA4XSBUaGUgZXZlbnQgaWQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wCQkJCSAweDQyMDM4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMQkJCQkgMHg0MjAzYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEwCQkJCSAweDQyMDYwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4NDIwNjQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHg0MjA2OAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzCQkJCSAweDQyMDZjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4NDIwNzAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNQkJCQkgMHg0MjA3NAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE2CQkJCSAweDQyMDc4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTcJCQkJIDB4NDIwN2MKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHg0MjA4MAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE5CQkJCSAweDQyMDg0CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHg0MjA0MAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweDQyMDg4CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjEJCQkJIDB4NDIwOGMKQEAgLTM3MjMsNiArMzg3OCwxOSBAQAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweDQyMGIwCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4NDIwYjQKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweDQyMDQ4CisvKiBbUlcgMV0gVGhlIFQgYml0IGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8wCQkJCQkgMHg0MjBiOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMQkJCQkJIDB4NDIwYmMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEwCQkJCQkgMHg0MjBlMAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTEJCQkJCSAweDQyMGU0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMgkJCQkJIDB4NDIwZTgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEzCQkJCQkgMHg0MjBlYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTQJCQkJCSAweDQyMGYwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNQkJCQkJIDB4NDIwZjQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE2CQkJCQkgMHg0MjBmOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTcJCQkJCSAweDQyMGZjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xOAkJCQkJIDB4NDIxMDAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE5CQkJCQkgMHg0MjEwNAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFRTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHg0MjAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTM5NjcsNiArNDEzNSwxMCBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIGRvcnEgaW50ZXJmYWNlIGlzIGRldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX0RPUlFfTEVOR1RIX01JUyAJCQkJIDB4ZTAxNjgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBkb3JxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX0RPUlFfV0VJR0hUCQkJCQkgMHhlMDBjMAogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIEVycm9yRmxnIGlucHV0IG1lc3NhZ2UgYml0IGlzIHNldC4gKi8KICNkZWZpbmUgVUNNX1JFR19FUlJfRVZOVF9JRAkJCQkJIDB4ZTAwYTQKIC8qIFtSVyAyOF0gVGhlIENNIGVycm9uZW91cyBoZWFkZXIgZm9yIFFNIGFuZCBUaW1lcnMgZm9ybWF0dGluZy4gKi8KQEAgLTQwMzAsNiArNDIwMiwxMCBAQAogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCiAjZGVmaW5lIFVDTV9SRUdfU1RPUk1fVUNNX0lGRU4JCQkJCSAweGUwMDEwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfU1RPUk1fV0VJR0hUCQkJCQkgMHhlMDBiMAogLyogW1JXIDRdIFRpbWVycyBvdXRwdXQgaW5pdGlhbCBjcmVkaXQuIE1heCBjcmVkaXQgYXZhaWxhYmxlIC0gMTUuV3JpdGUKICAgIHdyaXRlcyB0aGUgaW5pdGlhbCBjcmVkaXQgdmFsdWU7IHJlYWQgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKICAgIGNyZWRpdCBjb3VudGVyLiBNdXN0IGJlIGluaXRpYWxpemVkIHRvIDQgYXQgc3RhcnQtdXAuICovCkBAIC00MDQwLDYgKzQyMTYsMTAgQEAKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwogI2RlZmluZSBVQ01fUkVHX1RNX1VDTV9JRkVOCQkJCQkgMHhlMDAxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19UTV9XRUlHSFQJCQkJCSAweGUwMGQ0CiAvKiBbUlcgMV0gSW5wdXQgdHNlbSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTQwOTIsNiArNDI3MiwxMCBAQAogICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKICAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KICNkZWZpbmUgVUNNX1JFR19VUU1fUF9XRUlHSFQJCQkJCSAweGUwMGNjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHNlY29uZGFyeSkgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAKKyAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfVVFNX1NfV0VJR0hUCQkJCQkgMHhlMDBkMAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChwcmltYXJ5KS4gKi8KICNkZWZpbmUgVUNNX1JFR19VUU1fVUNNX0hEUl9QCQkJCQkgMHhlMDA5NAogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChzZWNvbmRhcnkpLiAqLwpAQCAtNDEwNyw2ICs0MjkxLDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgU0RNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgVUNNX1JFR19VU0RNX0xFTkdUSF9NSVMgCQkJCSAweGUwMTU4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU0RNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1VTRE1fV0VJR0hUCQkJCQkgMHhlMDBjOAogLyogW1JXIDFdIElucHV0IHhzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC00MTE0LDYgKzQzMDIsMTAgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSB4c2VtIGludGVyZmFjZSBpc2RldGVjdGVkLiAqLwogI2RlZmluZSBVQ01fUkVHX1hTRU1fTEVOR1RIX01JUyAJCQkJIDB4ZTAxNjQKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCB4c2VtIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1hTRU1fV0VJR0hUCQkJCQkgMHhlMDBiYwogLyogW1JXIDIwXSBJbmRpcmVjdCBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIFhYIHByb3RlY3Rpb24KICAgIG1lY2hhbmlzbS4gVGhlIGZpZWxkcyBhcmU6WzU6MF0gLSBtZXNzYWdlIGxlbmd0aDsgMTQ6Nl0gLSBtZXNzYWdlCiAgICBwb2ludGVyOyAxOToxNV0gLSBuZXh0IHBvaW50ZXIuICovCkBAIC00MTYzLDYgKzQzNTUsNyBAQAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweGM0MGIwCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4YzQwYjQKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweGM0MDQ4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNQkJCQkgMHhjNDA0YwogLyogW1JXIDFdIEZvciBlYWNoIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IGluZGV4IHdoZXRoZXIgdGhlIG1vZGUgaXMgbm9ybWFsICgwKQogICAgb3IgYXV0by1tYXNrLW1vZGUgKDEpICovCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wIAkJCQkgMHhjNDFiOApAQCAtNDE3Nyw2ICs0MzcwLDggQEAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE3CQkJCSAweGM0MWZjCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xOAkJCQkgMHhjNDIwMAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTkJCQkJIDB4YzQyMDQKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzQgCQkJCSAweGM0MWM4CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81IAkJCQkgMHhjNDFjYwogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjNDAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTQ0MjcsNiArNDYyMiwxMCBAQAogLyogW1JDIDFdIFNldCBhdCBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdAogICAgdGhlIGRvcnEgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBYQ01fUkVHX0RPUlFfTEVOR1RIX01JUyAJCQkJIDB4MjAyMzAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBkb3JxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX0RPUlFfV0VJR0hUCQkJCQkgMHgyMDBjYwogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIHRoZSBFcnJvckZsZyBpbnB1dCBtZXNzYWdlIGJpdCBpcyBzZXQuICovCiAjZGVmaW5lIFhDTV9SRUdfRVJSX0VWTlRfSUQJCQkJCSAweDIwMGIwCiAvKiBbUlcgMjhdIFRoZSBDTSBlcnJvbmVvdXMgaGVhZGVyIGZvciBRTSBhbmQgVGltZXJzIGZvcm1hdHRpbmcuICovCkBAIC00NDY1LDYgKzQ2NjQsMTAgQEAKIC8qIFtSQyAxXSBTZXQgYXQgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQKICAgIHRoZSBuaWcwIGludGVyZmFjZS4gKi8KICNkZWZpbmUgWENNX1JFR19OSUcwX0xFTkdUSF9NSVMgCQkJCSAweDIwMjM4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgbmlnMCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19OSUcwX1dFSUdIVAkJCQkJIDB4MjAwZDQKIC8qIFtSVyAxXSBJbnB1dCBuaWcxIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtNDUyMyw2ICs0NzI2LDEwIEBACiAgICB3cml0ZXMgdGhlIGluaXRpYWwgY3JlZGl0IHZhbHVlOyByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCiAgICBjcmVkaXQgY291bnRlci4gTXVzdCBiZSBpbml0aWFsaXplZCB0byA0IGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBYQ01fUkVHX1RNX0lOSVRfQ1JECQkJCQkgMHgyMDQxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19UTV9XRUlHSFQJCQkJCSAweDIwMGVjCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgZm9yIFRpbWVycyBleHBpcmF0aW9uIGNvbW1hbmQuICovCiAjZGVmaW5lIFhDTV9SRUdfVE1fWENNX0hEUgkJCQkJIDB4MjAwYTgKIC8qIFtSVyAxXSBUaW1lcnMgLSBDTSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCkBAIC00NjA4LDYgKzQ4MTUsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIFhDTV9SRUdfWFFNX1BfV0VJR0hUCQkJCQkgMHgyMDBlNAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBYQ01fUkVHX1hRTV9TX1dFSUdIVAkJCQkJIDB4MjAwZTgKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFhDTV9SRUdfWFFNX1hDTV9IRFJfUAkJCQkJIDB4MjAwYTAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTQ2NjUsNiArNDg3Niw4IEBACiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4MTY2MDYwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4MTY2MDY0CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4MTY2MDY4CisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4MTY2MDZjCisjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4MTY2MDcwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHgxNjYwNDAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHgxNjYwODgKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHgxNjYwOGMKQEAgLTQ5NjQsOSArNTE3NywxMSBAQAogI2RlZmluZSBFTUFDX1JYX01PREVfRkxPV19FTgkJCQkJICgxTDw8MikKICNkZWZpbmUgRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcJCQkJICgxTDw8MTApCiAjZGVmaW5lIEVNQUNfUlhfTU9ERV9QUk9NSVNDVU9VUwkJCQkgKDFMPDw4KQorI2RlZmluZSBFTUFDX1JYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCiAjZGVmaW5lIEVNQUNfUlhfTVRVX1NJWkVfSlVNQk9fRU5BCQkJCSAoMUw8PDMxKQogI2RlZmluZSBFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOCQkJCSAoMUw8PDMpCiAjZGVmaW5lIEVNQUNfVFhfTU9ERV9GTE9XX0VOCQkJCQkgKDFMPDw0KQorI2RlZmluZSBFTUFDX1RYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMAkJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18xCQkJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzIJCQkJCSAyCkBAIC00OTc2LDYgKzUxOTEsMTAgQEAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19GTE9BVF9QT1MJCQkJIDI0CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSAkJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOUFVUX0hJX1oJCQkJIDIKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyAJCQkgMjQKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUgkJCSAwCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQJCQkgMQorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TIAkJCSAxNgogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0xPVyAJCQkJIDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCAJCQkgMQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1cJCQkJIDAKQEAgLTUwMTUsMTEgKzUyMzQsMTIgQEAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19PVVRQVVRfTE9XCQkJCSAwCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fU0VUX1BPUwkJCQkgOAogI2RlZmluZSBIV19MT0NLX01BWF9SRVNPVVJDRV9WQUxVRQkJCQkgMzEKLSNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8JCQkJIDAKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9HUElPCQkJCQkgMQorI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX01ESU8JCQkJCSAwCiAjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfUE9SVDBfQVRUX01BU0sgCQkJIDMKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9TUElPCQkJCQkgMgogI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX1VOREkJCQkJCSA1CisjZGVmaW5lIFBSU19GTEFHX09WRVJFVEhfSVBWNAkJCQkJIDEKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfQlJCX1BBUklUWV9FUlJPUgkJICAgICAgKDE8PDE4KQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DQ01fSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MzEpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0NEVV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDw5KQpAQCAtNTAzNCw2ICs1MjU0LDggQEAKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE1BRV9IV19JTlRFUlJVUFQJCSAgICAgICgxPDwxMSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVAkgICAgICAoMTw8MTMpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1IJICAgICAgKDE8PDEyKQorI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wCQkgICAgICAoMTw8NSkKKyNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMQkJICAgICAgKDE8PDkpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0lHVV9QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxMikKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19IV19JTlRFUlJVUFQJCSAgICAgICgxPDwxNSkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxNCkKQEAgLTUxODgsNyArNTQxMCw3IEBACiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX0lOVF9ESVNBQkxFCQkoMTw8MTApCiAjZGVmaW5lIFBDSUNGR19DT01NQU5EX1JFU0VSVkVEIAkJKDB4MWY8PDExKQogI2RlZmluZSBQQ0lDRkdfU1RBVFVTX09GRlNFVAkJCQkweDA2Ci0jZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRAkJCQkweDA4CisjZGVmaW5lIFBDSUNGR19SRVZFU0lPTl9JRF9PRkZTRVQJCQkweDA4CiAjZGVmaW5lIFBDSUNGR19DQUNIRV9MSU5FX1NJWkUJCQkJMHgwYwogI2RlZmluZSBQQ0lDRkdfTEFURU5DWV9USU1FUgkJCQkweDBkCiAjZGVmaW5lIFBDSUNGR19CQVJfMV9MT1cJCQkJMHgxMApAQCAtNTIxNiw5ICs1NDM4LDI4IEBACiAjZGVmaW5lIFBDSUNGR19QTV9DU1JfU1RBVEUJCQkoMHgzPDwwKQogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9FTkFCTEUJCSgxPDw4KQogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1BNRV9TVEFUVVMJCSgxPDwxNSkKKyNkZWZpbmUgUENJQ0ZHX01TSV9DQVBfSURfT0ZGU0VUCQkJMHg1OAorI2RlZmluZSBQQ0lDRkdfTVNJX0NPTlRST0xfRU5BQkxFCQkoMHgxPDwxNikKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01DQVAgCQkoMHg3PDwxNykKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01FTkEgCQkoMHg3PDwyMCkKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MXzY0X0JJVF9BRERSX0NBUAkoMHgxPDwyMykKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX01TSV9QVk1BU0tfQ0FQQUJMRQkoMHgxPDwyNCkKICNkZWZpbmUgUENJQ0ZHX0dSQ19BRERSRVNTCQkJCTB4NzgKICNkZWZpbmUgUENJQ0ZHX0dSQ19EQVRBIAkJCQkweDgwCisjZGVmaW5lIFBDSUNGR19NU0lYX0NBUF9JRF9PRkZTRVQJCQkweGEwCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfVEFCTEVfU0laRQkJKDB4N2ZmPDwxNikKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9SRVNFUlZFRAkJKDB4Nzw8MjcpCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfRlVOQ19NQVNLCQkoMHgxPDwzMCkKKyNkZWZpbmUgUENJQ0ZHX01TSVhfQ09OVFJPTF9NU0lYX0VOQUJMRSAJKDB4MTw8MzEpCisKICNkZWZpbmUgUENJQ0ZHX0RFVklDRV9DT05UUk9MCQkJCTB4YjQKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVMJCQkJMHhiNgorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19DT1JSX0VSUl9ERVQJKDE8PDApCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX05PTl9GQVRBTF9FUlJfREVUCSgxPDwxKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19GQVRBTF9FUlJfREVUCSgxPDwyKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19VTlNVUF9SRVFfREVUCSgxPDwzKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19BVVhfUFdSX0RFVAkoMTw8NCkKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfTk9fUEVORAkJKDE8PDUpCiAjZGVmaW5lIFBDSUNGR19MSU5LX0NPTlRST0wJCQkJMHhiYwogCiAKQEAgLTUzNjMsNiArNTYwNCw0MiBAQAogI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKICNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCiAKKyNkZWZpbmUgTURJT19SRUdfQkFOS19UWDEJCQkJMHg4MDcwCisjZGVmaW5lIE1ESU9fVFgxX1RYX0RSSVZFUgkJCQkweDE3CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLCQkweGYwMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUCQkxMgorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9NQVNLIAkJMHgwZjAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX1NISUZUCQk4CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX01BU0sJCTB4MDBmMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9TSElGVAkJNAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfTUFTSwkJMHgwMDBlCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9TSElGVAkJMQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUNCVUYxVAkJCTEKKworI2RlZmluZSBNRElPX1JFR19CQU5LX1RYMgkJCQkweDgwODAKKyNkZWZpbmUgTURJT19UWDJfVFhfRFJJVkVSCQkJCTB4MTcKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0sJCTB4ZjAwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQJCTEyCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX01BU0sgCQkweDBmMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfU0hJRlQJCTgKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfTUFTSwkJMHgwMGYwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX1NISUZUCQk0CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9NQVNLCQkweDAwMGUKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX1NISUZUCQkxCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JQ0JVRjFUCQkJMQorCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfVFgzCQkJCTB4ODA5MAorI2RlZmluZSBNRElPX1RYM19UWF9EUklWRVIJCQkJMHgxNworI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSwkJMHhmMDAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVAkJMTIKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfTUFTSyAJCTB4MGYwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9TSElGVAkJOAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9NQVNLCQkweDAwZjAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfU0hJRlQJCTQKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX01BU0sJCTB4MDAwZQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCisKICNkZWZpbmUgTURJT19SRUdfQkFOS19YR1hTX0JMT0NLMAkJCTB4ODAwMAogI2RlZmluZSBNRElPX0JMT0NLMF9YR1hTX0NPTlRST0wJCQkweDEwCiAKQEAgLTU1NjYsOSArNTg0MywzMCBAQAogI2RlZmluZSBNRElPX1BNQV9SRUdfUk9NX1ZFUjIJCTB4Y2ExYQogI2RlZmluZSBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOCTB4Y2ExYgogI2RlZmluZSBNRElPX1BNQV9SRUdfUExMX0JBTkRXSURUSAkweGNhMWQKKyNkZWZpbmUgTURJT19QTUFfUkVHX0dFTl9DVFJMMgkJMHhjYTFlCisjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwwIAkweGNhMjMKKyNkZWZpbmUgTURJT19QTUFfUkVHX0xSTV9NT0RFCQkweGNhM2YKICNkZWZpbmUgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgJMHhjYTQ2CiAjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxIAkweGNhODUKIAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMIAkweDgwMDAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSwkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUJCTB4MDAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUJMHgwMDA0CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19JTl9QUk9HUkVTUwkweDAwMDgKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0ZBSUxFRAkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQllURV9DTlQJMHg4MDAyCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX01FTV9BRERSCTB4ODAwMworI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX0JVRgkweGM4MjAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9NQVNLIDB4ZmYKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDEJCTB4Y2EwMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMgkJMHhjYTA1CisKKworI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFVgkJCTB4YzgwMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUwkJMHhjODIwCisjZGVmaW5lIE1ESU9fUE1BX1JFR184MDczX1hBVUlfV0EJCQkweGM4NDEKKwogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9SRVNFVCAJMHhjMDAwCiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTA3X0xFRF9DTlRMCTB4YzAwNwogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9WRVIxCQkweGMwMjYKQEAgLTU1OTgsNiArNTg5NiwxMiBAQAogI2RlZmluZSBNRElPX1hTX1BMTF9TRVFVRU5DRVIJCTB4ODAwMAogI2RlZmluZSBNRElPX1hTX1NGWDcxMDFfWEdYU19URVNUMQkweGMwMGEKIAorI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgwCTB4ODBiYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgxCTB4ODBjYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgyCTB4ODBkYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgzCTB4ODBlYworI2RlZmluZSBNRElPX1hTXzg3MDZfUkVHX0JBTktfUlhBCTB4ODBmYworCiAjZGVmaW5lIE1ESU9fQU5fREVWQUQJCQkweDcKIC8qaWVlZSovCiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NUUkwJCTB4MDAwMApAQCAtNTYxOSw2ICs1OTIzLDggQEAKICNkZWZpbmUgTURJT19BTl9SRUdfQ0wzN19GQ19MRAkJMHhmZmU0CiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NMMzdfRkNfTFAJCTB4ZmZlNQogCisjZGVmaW5lIE1ESU9fQU5fUkVHXzgwNzNfMl81RwkJMHg4MzI5CisKIAogI2RlZmluZSBJR1VfRlVOQ19CQVNFCQkJMHgwNDAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAppbmRleCA4YTgzZWIyLi5hMzA2MjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIC8vIEdlbmVyYWwgZGVmaW5pdGlvbnMKICNkZWZpbmUgQk9ORF9FVEhfUF9MQUNQRFUgICAgICAgMHg4ODA5Ci0jZGVmaW5lIFBLVF9UWVBFX0xBQ1BEVSAgICAgICAgIF9fY29uc3RhbnRfaHRvbnMoQk9ORF9FVEhfUF9MQUNQRFUpCisjZGVmaW5lIFBLVF9UWVBFX0xBQ1BEVSAgICAgICAgIGNwdV90b19iZTE2KEJPTkRfRVRIX1BfTEFDUERVKQogI2RlZmluZSBBRF9USU1FUl9JTlRFUlZBTCAgICAgICAxMDAgLyptc2VjKi8KIAogI2RlZmluZSBNVUxUSUNBU1RfTEFDUERVX0FERFIgICAgezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDJ9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggMjdmYjdmNS4uOGRjNmZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJX3VubG9ja19yeF9oYXNodGJsKGJvbmQpOwogCiAJLyppbml0aWFsaXplIHBhY2tldCB0eXBlKi8KLQlwa190eXBlLT50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApOworCXBrX3R5cGUtPnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BUlApOwogCXBrX3R5cGUtPmRldiA9IE5VTEw7CiAJcGtfdHlwZS0+ZnVuYyA9IHJsYl9hcnBfcmVjdjsKIApAQCAtODkyLDcgKzg5Miw3IEBACiAJbWVtc2V0KCZwa3QsIDAsIHNpemUpOwogCW1lbWNweShwa3QubWFjX2RzdCwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkocGt0Lm1hY19zcmMsIG1hY19hZGRyLCBFVEhfQUxFTik7Ci0JcGt0LnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0xPT1ApOworCXBrdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTE9PUCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0xQX0JVUlNUOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE2MjgsNiArMTYyOCwxMCBAQAogICogbm8gb3RoZXIgbG9ja3MgbWF5IGJlIGhlbGQuCiAgKi8KIHZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKQorCV9fcmVsZWFzZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKKwlfX3JlbGVhc2VzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQogewogCXN0cnVjdCBzbGF2ZSAqc3dhcF9zbGF2ZTsKIAlpbnQgaTsKQEAgLTE3MDQsNiArMTcwOCwxMCBAQAogICogQ2FsbGVkIHdpdGggUlROTAogICovCiBpbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcikKKwlfX3JlbGVhc2VzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCisJX19yZWxlYXNlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDNkNzY2ODYuLjljMzI2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTAwMiw2ICsxMDAyLDEwIEBACiBzdGF0aWMgdm9pZCBib25kX2RvX2ZhaWxfb3Zlcl9tYWMoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQkJICBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUsCiAJCQkJICBzdHJ1Y3Qgc2xhdmUgKm9sZF9hY3RpdmUpCisJX19yZWxlYXNlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCiB7CiAJdTggdG1wX21hY1tFVEhfQUxFTl07CiAJc3RydWN0IHNvY2thZGRyIHNhZGRyOwpAQCAtMTcxMCw2ICsxNzE0LDcgQEAKIAljYXNlIEJPTkRfTU9ERV9BTEI6CiAJCW5ld19zbGF2ZS0+c3RhdGUgPSBCT05EX1NUQVRFX0FDVElWRTsKIAkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3MobmV3X3NsYXZlKTsKKwkJYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKGJvbmQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9kZWJ1ZygiVGhpcyBzbGF2ZSBpcyBhbHdheXMgYWN0aXZlIGluIHRydW5rIG1vZGVcbiIpOwpAQCAtMzE5Myw2ICszMTk4LDggQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiBzdGF0aWMgdm9pZCAqYm9uZF9pbmZvX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gc2VxLT5wcml2YXRlOwogCWxvZmZfdCBvZmYgPSAwOwpAQCAtMzIzMiw2ICszMjM5LDggQEAKIH0KIAogc3RhdGljIHZvaWQgYm9uZF9pbmZvX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19yZWxlYXNlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHNlcS0+cHJpdmF0ZTsKIApAQCAtMzM2OSw3ICszMzc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYm9uZF9pbmZvX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gYm9uZF9pbmZvX3NlcV9zdGFydCwKIAkubmV4dCAgPSBib25kX2luZm9fc2VxX25leHQsCiAJLnN0b3AgID0gYm9uZF9pbmZvX3NlcV9zdG9wLApAQCAtNDczOSw3ICs0NzQ4LDcgQEAKICAqLwogaW50IGJvbmRfcGFyc2VfcGFybShjb25zdCBjaGFyICpidWYsIGNvbnN0IHN0cnVjdCBib25kX3Bhcm1fdGJsICp0YmwpCiB7Ci0JaW50IG1vZGUgPSAtMSwgaSwgcnY7CisJaW50IG1vZGVpbnQgPSAtMSwgaSwgcnY7CiAJY2hhciAqcCwgbW9kZXN0cltCT05EX01BWF9NT0RFTkFNRV9MRU4gKyAxXSA9IHsgMCwgfTsKIAogCWZvciAocCA9IChjaGFyICopYnVmOyAqcDsgcCsrKQpAQCAtNDc0OSwxMyArNDc1OCwxMyBAQAogCWlmICgqcCkKIAkJcnYgPSBzc2NhbmYoYnVmLCAiJTIwcyIsIG1vZGVzdHIpOwogCWVsc2UKLQkJcnYgPSBzc2NhbmYoYnVmLCAiJWQiLCAmbW9kZSk7CisJCXJ2ID0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm1vZGVpbnQpOwogCiAJaWYgKCFydikKIAkJcmV0dXJuIC0xOwogCiAJZm9yIChpID0gMDsgdGJsW2ldLm1vZGVuYW1lOyBpKyspIHsKLQkJaWYgKG1vZGUgPT0gdGJsW2ldLm1vZGUpCisJCWlmIChtb2RlaW50ID09IHRibFtpXS5tb2RlKQogCQkJcmV0dXJuIHRibFtpXS5tb2RlOwogCQlpZiAoc3RyY21wKG1vZGVzdHIsIHRibFtpXS5tb2RlbmFtZSkgPT0gMCkKIAkJCXJldHVybiB0YmxbaV0ubW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBiYmJjM2JiLi4wZWZmZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC0yNTA2LDcgKzI1MDYsNyBAQAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkVfQUxUKSB7IC8qIGhhbmRsZSByeCBzZXBhcmF0ZWx5ICovCiAjaWZkZWYgVVNFX05BUEkKIAkJY2FzX21hc2tfaW50cihjcCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKICNlbHNlCiAJCWNhc19yeF9yaW5nTihjcCwgcmluZywgMCk7CiAjZW5kaWYKQEAgLTI1NTcsNyArMjU1Nyw3IEBACiAJaWYgKHN0YXR1cyAmIElOVFJfUlhfRE9ORV9BTFQpIHsgLyogaGFuZGxlIHJ4IHNlcGFyYXRlbHkgKi8KICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCAxLCAwKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjEzLDcgQEAKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9ET05FKSB7CiAjaWZkZWYgVVNFX05BUEkKIAkJY2FzX21hc2tfaW50cihjcCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKICNlbHNlCiAJCWNhc19yeF9yaW5nTihjcCwgMCwgMCk7CiAjZW5kaWYKQEAgLTI2OTEsNyArMjY5MSw3IEBACiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOwogCWlmIChlbmFibGVfaW50cikgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJY2FzX3VubWFza19pbnRyKGNwKTsKIAl9CiAJcmV0dXJuIGNyZWRpdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCBkOTg0Yjc5Li41OGY2ZmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTE2MTIsNyArMTYxMiw3IEBACiAJaW50IHdvcmtfZG9uZSA9IHByb2Nlc3NfcmVzcG9uc2VzKGFkYXB0ZXIsIGJ1ZGdldCk7CiAKIAlpZiAobGlrZWx5KHdvcmtfZG9uZSA8IGJ1ZGdldCkpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXdyaXRlbChhZGFwdGVyLT5zZ2UtPnJlc3BRLmNpZHgsCiAJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7CiAJfQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAKIAogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQkJaWYgKHByb2Nlc3NfcHVyZV9yZXNwb25zZXMoYWRhcHRlcikpCi0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJCWVsc2UgewogCQkJCS8qIG5vIGRhdGEsIG5vIE5BUEkgbmVlZGVkICovCiAJCQkJd3JpdGVsKHNnZS0+cmVzcFEuY2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOwpAQCAtMTk2Nyw4ICsxOTY3LDcgQEAKIAkJdHhfc2NoZWRfc3RvcChzZ2UpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykKLQkJaWYgKHNnZS0+ZXNwaWJ1Z19za2JbaV0pCi0JCQlrZnJlZV9za2Ioc2dlLT5lc3BpYnVnX3NrYltpXSk7CisJCWtmcmVlX3NrYihzZ2UtPmVzcGlidWdfc2tiW2ldKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IGY2NjU0ODcuLjNmNDc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcng6IHBvbGxpbmcsIGJ1dCBubyBxdWV1ZVxuIiwKIAkJCSAgICAgICBwcml2LT5kZXYtPm5hbWUpOwogCQlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUxNCw3ICs1MTQsNyBAQAogCWlmIChwcm9jZXNzZWQgPT0gMCkgewogCQkvKiB3ZSByYW4gb3V0IG9mIHBhY2tldHMgdG8gcmVhZCwKIAkJICogcmV2ZXJ0IHRvIGludGVycnVwdC1kcml2ZW4gbW9kZSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJY3BtYWNfd3JpdGUocHJpdi0+cmVncywgQ1BNQUNfUlhfSU5UX0VOQUJMRSwgMSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTUzNiw3ICs1MzYsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwcml2LT5kZXYpOwogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKQEAgLTgwMiw5ICs4MDIsOSBAQAogCiAJaWYgKHN0YXR1cyAmIE1BQ19JTlRfUlgpIHsKIAkJcXVldWUgPSAoc3RhdHVzID4+IDgpICYgNzsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CiAJCQljcG1hY193cml0ZShwcml2LT5yZWdzLCBDUE1BQ19SWF9JTlRfQ0xFQVIsIDEgPDwgcXVldWUpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCQl9CiAJfQogCkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCXByaXYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1Z19sZXZlbCwgMHhmZik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBkYXRhLT5kZXZfYWRkciwgc2l6ZW9mKGRldi0+ZGV2X2FkZHIpKTsKIAotCXByaXYtPnBoeSA9IHBoeV9jb25uZWN0KGRldiwgY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldi5idXNfaWQsCisJcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldiksCiAJCQkJJmNwbWFjX2FkanVzdF9saW5rLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAlpZiAoSVNfRVJSKHByaXYtPnBoeSkpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYocHJpdikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggYTg5ZDhjYy4uNzFlYWE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgInQzY2Rldi5oIgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC02OSw2ICs2OCw4IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0c3RhdHM7CiAJaW50IGFjdGl2aXR5OwogCV9fYmUzMiBpc2NzaV9pcHY0YWRkcjsKKworCWludCBsaW5rX2ZhdWx0OyAvKiBsaW5rIGZhdWx0IHdhcyBkZXRlY3RlZCAqLwogfTsKIAogZW51bSB7CQkJCS8qIGFkYXB0ZXIgZmxhZ3MgKi8KQEAgLTkyLDYgKzkzLDcgQEAKIHN0cnVjdCBzZ2VfZmwgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNHRSBwZXIgZnJlZS1idWZmZXIgbGlzdCBzdGF0ZSAqLwogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsgICAgICAvKiBzaXplIG9mIGVhY2ggUnggYnVmZmVyICovCiAJdW5zaWduZWQgaW50IGNyZWRpdHM7ICAgICAgIC8qICMgb2YgYXZhaWxhYmxlIFJ4IGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBpbnQgcGVuZF9jcmVkOyAgICAgLyogbmV3IGJ1ZmZlcnMgc2luY2UgbGFzdCBGTCBEQiByaW5nICovCiAJdW5zaWduZWQgaW50IHNpemU7ICAgICAgICAgIC8qIGNhcGFjaXR5IG9mIGZyZWUgbGlzdCAqLwogCXVuc2lnbmVkIGludCBjaWR4OyAgICAgICAgICAvKiBjb25zdW1lciBpbmRleCAqLwogCXVuc2lnbmVkIGludCBwaWR4OyAgICAgICAgICAvKiBwcm9kdWNlciBpbmRleCAqLwpAQCAtMTc4LDE1ICsxODAsMTEgQEAKIAlTR0VfUFNUQVRfVFhfQ1NVTSwJLyogIyBvZiBUWCBjaGVja3N1bSBvZmZsb2FkcyAqLwogCVNHRV9QU1RBVF9WTEFORVgsCS8qICMgb2YgVkxBTiB0YWcgZXh0cmFjdGlvbnMgKi8KIAlTR0VfUFNUQVRfVkxBTklOUywJLyogIyBvZiBWTEFOIHRhZyBpbnNlcnRpb25zICovCi0JU0dFX1BTVEFUX0xST19BR0dSLAkvKiAjIG9mIHBhZ2UgY2h1bmtzIGFkZGVkIHRvIExSTyBzZXNzaW9ucyAqLwotCVNHRV9QU1RBVF9MUk9fRkxVU0hFRCwJLyogIyBvZiBmbHVzaGVkIExSTyBzZXNzaW9ucyAqLwotCVNHRV9QU1RBVF9MUk9fTk9fREVTQywJLyogIyBvZiBvdmVyZmxvd24gTFJPIHNlc3Npb25zICovCiAKIAlTR0VfUFNUQVRfTUFYCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKLSNkZWZpbmUgVDNfTUFYX0xST19TRVMgOAotI2RlZmluZSBUM19NQVhfTFJPX01BWF9QS1RTIDY0CitzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm87CiAKIHN0cnVjdCBzZ2VfcXNldCB7CQkvKiBhbiBTR0UgcXVldWUgc2V0ICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXA7CkBAIC0xOTQsMTcgKzE5MiwxNCBAQAogCXN0cnVjdCBzZ2VfcnNwcSByc3BxOwogCXN0cnVjdCBzZ2VfZmwgZmxbU0dFX1JYUV9QRVJfU0VUXTsKIAlzdHJ1Y3Qgc2dlX3R4cSB0eHFbU0dFX1RYUV9QRVJfU0VUXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW1QzX01BWF9MUk9fU0VTXTsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpscm9fZnJhZ190Ymw7Ci0JaW50IGxyb19uZnJhZ3M7CisJc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvIGxyb19mcmFnX3RibDsKIAlpbnQgbHJvX2VuYWJsZWQ7Ci0JaW50IGxyb19mcmFnX2xlbjsKIAl2b2lkICpscm9fdmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eF9xOwkvKiBhc3NvY2lhdGVkIG5ldGRldiBUWCBxdWV1ZSAqLwogCXVuc2lnbmVkIGxvbmcgdHhxX3N0b3BwZWQ7CS8qIHdoaWNoIFR4IHF1ZXVlcyBhcmUgc3RvcHBlZCAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHR4X3JlY2xhaW1fdGltZXI7CS8qIHJlY2xhaW1zIFRYIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWNsYWltX3RpbWVyOwkvKiByZWNsYWltcyBSWCBidWZmZXJzICovCiAJdW5zaWduZWQgbG9uZyBwb3J0X3N0YXRzW1NHRV9QU1RBVF9NQVhdOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKQEAgLTIzMCw2ICsyMjUsNyBAQAogCXVuc2lnbmVkIGludCBzbG93X2ludHJfbWFzazsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0c1tJUlFfTlVNX1NUQVRTXTsKIAorCWludCBtc2l4X252ZWN0b3JzOwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIHNob3J0IHZlYzsKIAkJY2hhciBkZXNjWzIyXTsKQEAgLTI0Nyw2ICsyNDMsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgYWRhcF9jaGVja190YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBleHRfaW50cl9oYW5kbGVyX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZhdGFsX2Vycm9yX2hhbmRsZXJfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2s7CiAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CiAKQEAgLTI4OSw2ICsyODYsOCBAQAogdm9pZCB0M19vc19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0dXMsCiAJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsIGludCBmYyk7CiB2b2lkIHQzX29zX3BoeW1vZF9jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCk7Cit2b2lkIHQzX29zX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgc3RhdGUpOwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKIAogdm9pZCB0M19zZ2Vfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2Vfc3RvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggNWMzYzA1ZC4uZTFiMjI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMTAwNSw3ICsxMDA1LDggQEAKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwogCi0JaW50IGVyciwgbGFzaV9jdHJsOworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGxhc2lfY3RybDsKIAogCWVyciA9IG1kaW9fcmVhZChwaHksIE1ESU9fREVWX1BNQV9QTUQsIExBU0lfQ1RSTCwgJmxhc2lfY3RybCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggZGI0ZjRmNS4uOWVlMDIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTI4MCw2ICsyODAsNyBAQAogCXVuc2lnbmVkIGxvbmcgbnVtX3RvZ2dsZWQ7IC8qICMgdGltZXMgdG9nZ2xlZCBUeEVuIGR1ZSB0byBzdHVjayBUWCAqLwogCXVuc2lnbmVkIGxvbmcgbnVtX3Jlc2V0czsgIC8qICMgdGltZXMgcmVzZXQgZHVlIHRvIHN0dWNrIFRYICovCiAKKwl1bnNpZ25lZCBsb25nIGxpbmtfZmF1bHRzOyAgLyogIyBkZXRlY3RlZCBsaW5rIGZhdWx0cyAqLwogfTsKIAogc3RydWN0IHRwX21pYl9zdGF0cyB7CkBAIC03MDEsNiArNzAyLDggQEAKIHZvaWQgdDNfaW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCB0M19pbnRyX2Rpc2FibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCB0M19pbnRyX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwogdm9pZCB0M19wb3J0X2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CkBAIC03MDgsNiArNzExLDcgQEAKIGludCB0M19waHlfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIAogdm9pZCB0M19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpOwogaW50IHQzX2xpbmtfc3RhcnQoc3RydWN0IGNwaHkgKnBoeSwgc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IGxpbmtfY29uZmlnICpsYyk7CiBjb25zdCBzdHJ1Y3QgYWRhcHRlcl9pbmZvICp0M19nZXRfYWRhcHRlcl9pbmZvKHVuc2lnbmVkIGludCBib2FyZF9pZCk7CiBpbnQgdDNfc2VlcHJvbV9yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgX19sZTMyICpkYXRhKTsKQEAgLTc0NCw2ICs3NDgsOCBAQAogCiBpbnQgdDNfbWFjX3Jlc2V0KHN0cnVjdCBjbWFjICptYWMpOwogdm9pZCB0M2JfcGNzX3Jlc2V0KHN0cnVjdCBjbWFjICptYWMpOwordm9pZCB0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpOwordm9pZCB0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYyk7CiBpbnQgdDNfbWFjX2VuYWJsZShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgd2hpY2gpOwogaW50IHQzX21hY19kaXNhYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX3NldF9tdHUoc3RydWN0IGNtYWMgKm1hYywgdW5zaWduZWQgaW50IG10dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggYmFiOGE5My4uZDhiZTg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtMTcwLDYgKzE3MCw0MCBAQAogCX0KIH0KIAordm9pZCB0M19vc19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCwgaW50IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwLT5wb3J0W3BvcnRfaWRdOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzdGF0ZSA9PSBuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCXJldHVybjsKKworCWlmIChzdGF0ZSkgeworCQlzdHJ1Y3QgY21hYyAqbWFjID0gJnBpLT5tYWM7CisKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCisJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLworCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKKwkJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX1NUQVRVUyArCisJCQkJICAgIHBpLT5tYWMub2Zmc2V0KTsKKwkJdDNfd3JpdGVfcmVnKGFkYXAsCisJCQkgICAgIEFfWEdNX0lOVF9DQVVTRSArIHBpLT5tYWMub2Zmc2V0LAorCQkJICAgICBGX1hHTV9JTlQpOworCisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArCisJCQkJIHBpLT5tYWMub2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIEZfWEdNX0lOVCk7CisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwLCBwaS0+cG9ydF9pZCk7CisKKwkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fVFgpOworCX0gZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJbGlua19yZXBvcnQoZGV2KTsKK30KKwogLyoqCiAgKgl0M19vc19saW5rX2NoYW5nZWQgLSBoYW5kbGUgbGluayBzdGF0dXMgY2hhbmdlcwogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluayBjaGFuZ2UKQEAgLTE5NywxMCArMjMxLDM0IEBACiAJaWYgKGxpbmtfc3RhdCAhPSBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJaWYgKGxpbmtfc3RhdCkgewogCQkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fUlgpOworCisJCQkvKiBDbGVhciBsb2NhbCBmYXVsdHMgKi8KKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArCisJCQkJICAgIHBpLT5tYWMub2Zmc2V0KTsKKwkJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLAorCQkJCSAgICAgQV9YR01fSU5UX0NBVVNFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJICAgICBGX1hHTV9JTlQpOworCisJCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsCisJCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJCSBGX1hHTV9JTlQsIEZfWEdNX0lOVCk7CisJCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCX0gZWxzZSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOworCisJCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKKwkJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwaS0+bWFjLm9mZnNldCk7CisJCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsCisJCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJCSBGX1hHTV9JTlQsIDApOworCisJCQlpZiAoaXNfMTBHKGFkYXB0ZXIpKQorCQkJCXBpLT5waHkub3BzLT5wb3dlcl9kb3duKCZwaS0+cGh5LCAxKTsKKworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKIAkJCXQzX21hY19kaXNhYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CiAJCQl0M19saW5rX3N0YXJ0KCZwaS0+cGh5LCBtYWMsICZwaS0+bGlua19jb25maWcpOwogCQl9CkBAIC0zMzksNyArMzk3LDcgQEAKIAogCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2luZm9bMF0udmVjLCBhZGFwdGVyKTsKIAkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKQotCQkgICAgbiArPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGkpLT5ucXNldHM7CisJCQluICs9IGFkYXAycGluZm8oYWRhcHRlciwgaSktPm5xc2V0czsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQogCQkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9pbmZvW2kgKyAxXS52ZWMsCkBAIC01MDksMTkgKzU2Nyw5IEBACiB7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7Ci0JaW50IGksIGxyb19vbiA9IDE7CiAKIAlhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbcXNldF9pZHhdLmxybyA9ICEhdmFsOwogCWFkYXB0ZXItPnNnZS5xc1txc2V0X2lkeF0ubHJvX2VuYWJsZWQgPSAhIXZhbDsKLQotCS8qIGxldCBldGh0b29sIHJlcG9ydCBMUk8gb24gb25seSBpZiBhbGwgcXVldWVzIGFyZSBMUk8gZW5hYmxlZCAqLwotCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyArK2kpCi0JCWxyb19vbiAmPSBhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbaV0ubHJvOwotCi0JaWYgKGxyb19vbikKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwogfQogCiAvKioKQEAgLTExODMsNiArMTIzMSwxMCBAQAogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOwogCisJLyogU3RvcCBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KKwl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKKwl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOworCiAJdDNfcG9ydF9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOwogCXBpLT5waHkub3BzLT5wb3dlcl9kb3duKCZwaS0+cGh5LCAxKTsKQEAgLTEzMDksNiArMTM2MSw3IEBACiAJIkNoZWNrVFhFblRvZ2dsZWQgICAiLAogCSJDaGVja1Jlc2V0cyAgICAgICAgIiwKIAorCSJMaW5rRmF1bHRzICAgICAgICAgIiwKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCkBAIC0xNDM0LDEzICsxNDg3LDE1IEBACiAJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9WTEFOSU5TKTsKIAkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX1RYX0NTVU0pOwogCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfUlhfQ1NVTV9HT09EKTsKLQkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX0xST19BR0dSKTsKLQkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX0xST19GTFVTSEVEKTsKLQkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX0xST19OT19ERVNDKTsKKwkqZGF0YSsrID0gMDsKKwkqZGF0YSsrID0gMDsKKwkqZGF0YSsrID0gMDsKIAkqZGF0YSsrID0gcy0+cnhfY29uZ19kcm9wczsKIAogCSpkYXRhKysgPSBzLT5udW1fdG9nZ2xlZDsKIAkqZGF0YSsrID0gcy0+bnVtX3Jlc2V0czsKKworCSpkYXRhKysgPSBzLT5saW5rX2ZhdWx0czsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ19ibG9ja19kdW1wKHN0cnVjdCBhZGFwdGVyICphcCwgdm9pZCAqYnVmLApAQCAtMTU3Niw3ICsxNjMxLDYgQEAKIAogc3RhdGljIGludCBzZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0JaW50IGNhcDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbGlua19jb25maWcgKmxjID0gJnAtPmxpbmtfY29uZmlnOwogCkBAIC0xNTg2LDcgKzE2NDAsNyBAQAogCQkgKiBiZWluZyByZXF1ZXN0ZWQuCiAJCSAqLwogCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewotCQkJY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOworCQkJaW50IGNhcCA9IHNwZWVkX2R1cGxleF90b19jYXBzKGNtZC0+c3BlZWQsIGNtZC0+ZHVwbGV4KTsKIAkJCWlmIChsYy0+c3VwcG9ydGVkICYgY2FwKQogCQkJCXJldHVybiAwOwogCQl9CkBAIC0xODI3LDI4ICsxODgxLDYgQEAKIAltZW1zZXQoJndvbC0+c29wYXNzLCAwLCBzaXplb2Yod29sLT5zb3Bhc3MpKTsKIH0KIAotc3RhdGljIGludCBjeGdiM19zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKLQkJaWYgKCEocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXBpLT5yeF9vZmZsb2FkIHw9IFQzX0xSTzsKLQkJZm9yIChpID0gcGktPmZpcnN0X3FzZXQ7IGkgPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHM7IGkrKykKLQkJCXNldF9xc2V0X2xybyhkZXYsIGksIDEpOwotCi0JfSBlbHNlIHsKLQkJcGktPnJ4X29mZmxvYWQgJj0gflQzX0xSTzsKLQkJZm9yIChpID0gcGktPmZpcnN0X3FzZXQ7IGkgPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHM7IGkrKykKLQkJCXNldF9xc2V0X2xybyhkZXYsIGksIDApOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN4Z2JfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGdldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gc2V0X3NldHRpbmdzLApAQCAtMTg3OCw4ICsxOTEwLDYgQEAKIAkuZ2V0X3JlZ3MgPSBnZXRfcmVncywKIAkuZ2V0X3dvbCA9IGdldF93b2wsCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCi0JLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBjeGdiM19zZXRfZmxhZ3MsCiB9OwogCiBzdGF0aWMgaW50IGluX3JhbmdlKGludCB2YWwsIGludCBsbywgaW50IGhpKQpAQCAtMjQ2MCw4ICsyNDkwLDIwIEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOwogCQlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKKwkJaWYgKHAtPmxpbmtfZmF1bHQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKKworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBpKTsKKwkJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwLT5tYWMub2Zmc2V0KTsKKwogCQkJdDNfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIGkpOworCQkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXB0ZXIsIGkpOworCQl9CiAJfQogfQogCkBAIC0yNTA2LDYgKzI1NDgsOCBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAogCQkJCQkgICAgICAgYWRhcF9jaGVja190YXNrLndvcmspOwogCWNvbnN0IHN0cnVjdCBhZGFwdGVyX3BhcmFtcyAqcCA9ICZhZGFwdGVyLT5wYXJhbXM7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgaW50IHYsIHN0YXR1cywgcmVzZXQ7CiAKIAlhZGFwdGVyLT5jaGVja190YXNrX2NudCsrOwogCkBAIC0yNTI0LDYgKzI1NjgsNTQgQEAKIAlpZiAocC0+cmV2ID09IFQzX1JFVl9CMikKIAkJY2hlY2tfdDNiMl9tYWMoYWRhcHRlcik7CiAKKwkvKgorCSAqIFNjYW4gdGhlIFhHTUFDJ3MgdG8gY2hlY2sgZm9yIHZhcmlvdXMgY29uZGl0aW9ucyB3aGljaCB3ZSB3YW50IHRvCisJICogbW9uaXRvciBpbiBhIHBlcmlvZGljIHBvbGxpbmcgbWFubmVyIHJhdGhlciB0aGFuIHZpYSBhbiBpbnRlcnJ1cHQKKwkgKiBjb25kaXRpb24uICBUaGlzIGlzIHVzZWQgZm9yIGNvbmRpdGlvbnMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGZsb29kCisJICogdGhlIHN5c3RlbSB3aXRoIGludGVycnVwdHMgYW5kIHdlIG9ubHkgcmVhbGx5IG5lZWQgdG8ga25vdyB0aGF0IHRoZQorCSAqIGNvbmRpdGlvbnMgYXJlICJoYXBwZW5pbmciIC4uLiAgRm9yIGVhY2ggY29uZGl0aW9uIHdlIGNvdW50IHRoZQorCSAqIGRldGVjdGlvbiBvZiB0aGUgY29uZGl0aW9uIGFuZCByZXNldCBpdCBmb3IgdGhlIG5leHQgcG9sbGluZyBsb29wLgorCSAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcG9ydCkgeworCQlzdHJ1Y3QgY21hYyAqbWFjID0gICZhZGFwMnBpbmZvKGFkYXB0ZXIsIHBvcnQpLT5tYWM7CisJCXUzMiBjYXVzZTsKKworCQljYXVzZSA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0KTsKKwkJcmVzZXQgPSAwOworCQlpZiAoY2F1c2UgJiBGX1JYRklGT19PVkVSRkxPVykgeworCQkJbWFjLT5zdGF0cy5yeF9maWZvX292ZmwrKzsKKwkJCXJlc2V0IHw9IEZfUlhGSUZPX09WRVJGTE9XOworCQl9CisKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0LCByZXNldCk7CisJfQorCisJLyoKKwkgKiBXZSBkbyB0aGUgc2FtZSBhcyBhYm92ZSBmb3IgRkxfRU1QVFkgaW50ZXJydXB0cy4KKwkgKi8KKwlzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSk7CisJcmVzZXQgPSAwOworCisJaWYgKHN0YXR1cyAmIEZfRkxFTVBUWSkgeworCQlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gJmFkYXB0ZXItPnNnZS5xc1swXTsKKwkJaW50IGkgPSAwOworCisJCXJlc2V0IHw9IEZfRkxFTVBUWTsKKworCQl2ID0gKHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfU0dfUlNQUV9GTF9TVEFUVVMpID4+IFNfRkwwRU1QVFkpICYKKwkJICAgIDB4ZmZmZjsKKworCQl3aGlsZSAodikgeworCQkJcXMtPmZsW2ldLmVtcHR5ICs9ICh2ICYgMSk7CisJCQlpZiAoaSkKKwkJCQlxcysrOworCQkJaSBePSAxOworCQkJdiA+Pj0gMTsKKwkJfQorCX0KKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSwgcmVzZXQpOworCiAJLyogU2NoZWR1bGUgdGhlIG5leHQgY2hlY2sgdXBkYXRlIGlmIGFueSBwb3J0IGlzIGFjdGl2ZS4gKi8KIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOwogCWlmIChhZGFwdGVyLT5vcGVuX2RldmljZV9tYXAgJiBQT1JUX01BU0spCkBAIC0yNTM4LDkgKzI2MzAsMjMgQEAKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKIAkJCQkJICAgICAgIGV4dF9pbnRyX2hhbmRsZXJfdGFzayk7CisJaW50IGk7CiAKKwkvKiBEaXNhYmxlIGxpbmsgZmF1bHQgaW50ZXJydXB0cyAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKKwkJc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkJdDNfeGdtX2ludHJfZGlzYWJsZShhZGFwdGVyLCBpKTsKKwkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHAtPm1hYy5vZmZzZXQpOworCX0KKworCS8qIFJlLWVuYWJsZSBsaW5rIGZhdWx0IGludGVycnVwdHMgKi8KIAl0M19waHlfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwogCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKQorCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgaSk7CisKIAkvKiBOb3cgcmVlbmFibGUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwogCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CiAJaWYgKGFkYXB0ZXItPnNsb3dfaW50cl9tYXNrKSB7CkBAIC0yNTczLDEwICsyNjc5LDQyIEBACiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPndvcmtfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIGxpbmtfZmF1bHRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCisJCQkJCSAgICAgICBsaW5rX2ZhdWx0X2hhbmRsZXJfdGFzayk7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPnBvcnRbaV07CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCQlpZiAocGktPmxpbmtfZmF1bHQpCisJCQl0M19saW5rX2ZhdWx0KGFkYXB0ZXIsIGkpOworCX0KK30KKwordm9pZCB0M19vc19saW5rX2ZhdWx0X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W3BvcnRfaWRdOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+d29ya19sb2NrKTsKKwlwaS0+bGlua19mYXVsdCA9IDE7CisJcXVldWVfd29yayhjeGdiM193cSwgJmFkYXB0ZXItPmxpbmtfZmF1bHRfaGFuZGxlcl90YXNrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+d29ya19sb2NrKTsKK30KKwogc3RhdGljIGludCB0M19hZGFwdGVyX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcmVzZXQpCiB7CiAJaW50IGksIHJldCA9IDA7CiAKKwlpZiAoaXNfb2ZmbG9hZChhZGFwdGVyKSAmJgorCSAgICB0ZXN0X2JpdChPRkZMT0FEX0RFVk1BUF9CSVQsICZhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApKSB7CisJCWN4Z2IzX2Vycl9ub3RpZnkoJmFkYXB0ZXItPnRkZXYsIE9GRkxPQURfU1RBVFVTX0RPV04sIDApOworCQlvZmZsb2FkX2Nsb3NlKCZhZGFwdGVyLT50ZGV2KTsKKwl9CisKIAkvKiBTdG9wIGFsbCBwb3J0cyAqLwogCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKQEAgLTI1ODUsMTAgKzI3MjMsNiBAQAogCQkJY3hnYl9jbG9zZShuZXRkZXYpOwogCX0KIAotCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpICYmCi0JICAgIHRlc3RfYml0KE9GRkxPQURfREVWTUFQX0JJVCwgJmFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCkpCi0JCW9mZmxvYWRfY2xvc2UoJmFkYXB0ZXItPnRkZXYpOwotCiAJLyogU3RvcCBTR0UgdGltZXJzICovCiAJdDNfc3RvcF9zZ2VfdGltZXJzKGFkYXB0ZXIpOwogCkBAIC0yNjQwLDYgKzI3NzQsOSBAQAogCQkJfQogCQl9CiAJfQorCisJaWYgKGlzX29mZmxvYWQoYWRhcHRlcikgJiYgIW9mbGRfZGlzYWJsZSkKKwkJY3hnYjNfZXJyX25vdGlmeSgmYWRhcHRlci0+dGRldiwgT0ZGTE9BRF9TVEFUVVNfVVAsIDApOwogfQogCiAvKgpAQCAtMjY4NCw3ICsyODIxLDYgQEAKIAkJQ0hfQUxFUlQoYWRhcHRlciwgIkZXIHN0YXR1czogMHgleCwgMHgleCwgMHgleCwgMHgleFxuIiwKIAkJCSBmd19zdGF0dXNbMF0sIGZ3X3N0YXR1c1sxXSwKIAkJCSBmd19zdGF0dXNbMl0sIGZ3X3N0YXR1c1szXSk7Ci0KIH0KIAogLyoqCkBAIC0yNzUzLDcgKzI4ODksNyBAQAogCWludCBpLCBqID0gMDsKIAlpbnQgbnVtX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKIAlpbnQgaHdwb3J0cyA9IGFkYXAtPnBhcmFtcy5ucG9ydHM7Ci0JaW50IG5xc2V0cyA9IFNHRV9RU0VUUzsKKwlpbnQgbnFzZXRzID0gYWRhcC0+bXNpeF9udmVjdG9ycyAtIDE7CiAKIAlpZiAoYWRhcC0+cGFyYW1zLnJldiA+IDAgJiYgYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSB7CiAJCWlmIChod3BvcnRzID09IDIgJiYKQEAgLTI3ODIsMTggKzI5MTgsMjUgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGN4Z2JfZW5hYmxlX21zaXgoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cmllc1tTR0VfUVNFVFMgKyAxXTsKKwlpbnQgdmVjdG9yczsKIAlpbnQgaSwgZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW50cmllcyk7ICsraSkKKwl2ZWN0b3JzID0gQVJSQVlfU0laRShlbnRyaWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgdmVjdG9yczsgKytpKQogCQllbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwLT5wZGV2LCBlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpKTsKKwl3aGlsZSAoKGVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwLT5wZGV2LCBlbnRyaWVzLCB2ZWN0b3JzKSkgPiAwKQorCQl2ZWN0b3JzID0gZXJyOworCisJaWYgKCFlcnIgJiYgdmVjdG9ycyA8IChhZGFwLT5wYXJhbXMubnBvcnRzICsgMSkpCisJCWVyciA9IC0xOworCiAJaWYgKCFlcnIpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW50cmllcyk7ICsraSkKKwkJZm9yIChpID0gMDsgaSA8IHZlY3RvcnM7ICsraSkKIAkJCWFkYXAtPm1zaXhfaW5mb1tpXS52ZWMgPSBlbnRyaWVzW2ldLnZlY3RvcjsKLQl9IGVsc2UgaWYgKGVyciA+IDApCi0JCWRldl9pbmZvKCZhZGFwLT5wZGV2LT5kZXYsCi0JCSAgICAgICAib25seSAlZCBNU0ktWCB2ZWN0b3JzIGxlZnQsIG5vdCB1c2luZyBNU0ktWFxuIiwgZXJyKTsKKwkJYWRhcC0+bXNpeF9udmVjdG9ycyA9IHZlY3RvcnM7CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjkzNSw2ICszMDc4LDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5hZGFwdGVyX2xpc3QpOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZXh0X2ludHJfaGFuZGxlcl90YXNrLCBleHRfaW50cl90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfZmF1bHRfaGFuZGxlcl90YXNrLCBsaW5rX2ZhdWx0X3Rhc2spOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZmF0YWxfZXJyb3JfaGFuZGxlcl90YXNrLCBmYXRhbF9lcnJvcl90YXNrKTsKIAlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+YWRhcF9jaGVja190YXNrLCB0M19hZGFwX2NoZWNrX3Rhc2spOwogCkBAIC0yOTYxLDcgKzMxMDUsNyBAQAogCQluZXRkZXYtPm1lbV9lbmQgPSBtbWlvX3N0YXJ0ICsgbW1pb19sZW4gLSAxOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAJCWlmIChwY2lfdXNpbmdfZGFjKQogCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwppbmRleCAyZDdmNjlhLi42MjBkODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCkBAIC0xNTMsNiArMTUzLDE4IEBACiAJbXV0ZXhfdW5sb2NrKCZjeGdiM19kYl9sb2NrKTsKIH0KIAordm9pZCBjeGdiM19lcnJfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcikKK3sKKwlzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQ7CisKKwltdXRleF9sb2NrKCZjeGdiM19kYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmNsaWVudF9saXN0LCBjbGllbnRfbGlzdCkgeworCQlpZiAoY2xpZW50LT5lcnJfaGFuZGxlcikKKwkJCWNsaWVudC0+ZXJyX2hhbmRsZXIodGRldiwgc3RhdHVzLCBlcnJvcik7CisJfQorCW11dGV4X3VubG9jaygmY3hnYjNfZGJfbG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X2lmZl9mcm9tX21hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgdmxhbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAppbmRleCBkNTE0ZTUwLi5hOGU4ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCkBAIC02NCwxMCArNjQsMTYgQEAKIHZvaWQgY3hnYjNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGN4Z2IzX2NsaWVudCAqY2xpZW50KTsKIHZvaWQgY3hnYjNfYWRkX2NsaWVudHMoc3RydWN0IHQzY2RldiAqdGRldik7CiB2b2lkIGN4Z2IzX3JlbW92ZV9jbGllbnRzKHN0cnVjdCB0M2NkZXYgKnRkZXYpOwordm9pZCBjeGdiM19lcnJfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcik7CiAKIHR5cGVkZWYgaW50ICgqY3hnYjNfY3BsX2hhbmRsZXJfZnVuYykoc3RydWN0IHQzY2RldiAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eCk7CiAKK2VudW0geworCU9GRkxPQURfU1RBVFVTX1VQLAorCU9GRkxPQURfU1RBVFVTX0RPV04KK307CisKIHN0cnVjdCBjeGdiM19jbGllbnQgewogCWNoYXIgKm5hbWU7CiAJdm9pZCAoKmFkZCkgKHN0cnVjdCB0M2NkZXYgKik7CkBAIC03Niw2ICs4Miw3IEBACiAJaW50ICgqcmVkaXJlY3QpKHZvaWQgKmN0eCwgc3RydWN0IGRzdF9lbnRyeSAqb2xkLAogCQkJc3RydWN0IGRzdF9lbnRyeSAqbmV3LCBzdHJ1Y3QgbDJ0X2VudHJ5ICpsMnQpOwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisJdm9pZCAoKmVycl9oYW5kbGVyKShzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCB1MzIgc3RhdHVzLCB1MzIgZXJyb3IpOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAppbmRleCBhMDM1ZDVjMi4uMWI1MzI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaApAQCAtMTcwLDYgKzE3MCwxMCBAQAogCiAjZGVmaW5lIFNfUlNQUTBESVNBQkxFRCAgICA4CiAKKyNkZWZpbmUgU19GTDBFTVBUWSAgICAxNgorI2RlZmluZSBWX0ZMMEVNUFRZKHgpICgoeCkgPDwgU19GTDBFTVBUWSkKKyNkZWZpbmUgRl9GTDBFTVBUWSAgICBWX0ZMMEVNUFRZKDFVKQorCiAjZGVmaW5lIEFfU0dfRUdSX1JDUV9EUkJfVEhSU0ggMHg1NAogCiAjZGVmaW5lIFNfSElSQ1FEUkJUSFJTSCAgICAxNgpAQCAtMjU4LDYgKzI2MiwxMCBAQAogI2RlZmluZSBWX1JTUFFDUkVESVRPVkVSRk9XKHgpICgoeCkgPDwgU19SU1BRQ1JFRElUT1ZFUkZPVykKICNkZWZpbmUgRl9SU1BRQ1JFRElUT1ZFUkZPVyAgICBWX1JTUFFDUkVESVRPVkVSRk9XKDFVKQogCisjZGVmaW5lIFNfRkxFTVBUWSAgICAxCisjZGVmaW5lIFZfRkxFTVBUWSh4KSAoKHgpIDw8IFNfRkxFTVBUWSkKKyNkZWZpbmUgRl9GTEVNUFRZICAgIFZfRkxFTVBUWSgxVSkKKwogI2RlZmluZSBBX1NHX0lOVF9FTkFCTEUgMHg2MAogCiAjZGVmaW5lIEFfU0dfQ01EUV9DUkVESVRfVEggMHg2NApAQCAtMjIwNyw2ICsyMjE1LDE1IEBACiAKICNkZWZpbmUgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfTE9XXzggMHg4NTQKIAorI2RlZmluZSBBX1hHTV9JTlRfU1RBVFVTIDB4ODZjCisKKyNkZWZpbmUgU19MSU5LRkFVTFRDSEFOR0UgICAgOQorI2RlZmluZSBWX0xJTktGQVVMVENIQU5HRSh4KSAoKHgpIDw8IFNfTElOS0ZBVUxUQ0hBTkdFKQorI2RlZmluZSBGX0xJTktGQVVMVENIQU5HRSAgICBWX0xJTktGQVVMVENIQU5HRSgxVSkKKworI2RlZmluZSBBX1hHTV9YR01fSU5UX0VOQUJMRSAweDg3NAorI2RlZmluZSBBX1hHTV9YR01fSU5UX0RJU0FCTEUgMHg4NzgKKwogI2RlZmluZSBBX1hHTV9TVEFUX0NUUkwgMHg4ODAKIAogI2RlZmluZSBTX0NMUlNUQVRTICAgIDIKQEAgLTI0MDUsNiArMjQyMiwxMCBAQAogI2RlZmluZSBWX1hBVUlQQ1NBTElHTkNIQU5HRSh4KSAoKHgpIDw8IFNfWEFVSVBDU0FMSUdOQ0hBTkdFKQogI2RlZmluZSBGX1hBVUlQQ1NBTElHTkNIQU5HRSAgICBWX1hBVUlQQ1NBTElHTkNIQU5HRSgxVSkKIAorI2RlZmluZSBTX1hHTV9JTlQgICAgMAorI2RlZmluZSBWX1hHTV9JTlQoeCkgKCh4KSA8PCBTX1hHTV9JTlQpCisjZGVmaW5lIEZfWEdNX0lOVCAgICBWX1hHTV9JTlQoMVUpCisKICNkZWZpbmUgQV9YR01fSU5UX0NBVVNFIDB4OGQ4CiAKICNkZWZpbmUgQV9YR01fWEFVSV9BQ1RfQ1RSTCAweDhkYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCBkMzE3OTFmLi5hNzU1NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtNjEsMTIgKzYxLDE5IEBACiAjZGVmaW5lIEZMMV9QR19PUkRFUiAoUEFHRV9TSVpFID4gODE5MiA/IDAgOiAxKQogCiAjZGVmaW5lIFNHRV9SWF9EUk9QX1RIUkVTIDE2CisjZGVmaW5lIFJYX1JFQ0xBSU1fUEVSSU9EIChIWi80KQogCiAvKgorICogTWF4IG51bWJlciBvZiBSeCBidWZmZXJzIHdlIHJlcGxlbmlzaCBhdCBhIHRpbWUuCisgKi8KKyNkZWZpbmUgTUFYX1JYX1JFRklMTCAxNlUKKy8qCiAgKiBQZXJpb2Qgb2YgdGhlIFR4IGJ1ZmZlciByZWNsYWltIHRpbWVyLiAgVGhpcyB0aW1lciBkb2VzIG5vdCBuZWVkIHRvIHJ1bgogICogZnJlcXVlbnRseSBhcyBUeCBidWZmZXJzIGFyZSB1c3VhbGx5IHJlY2xhaW1lZCBieSBuZXcgVHggcGFja2V0cy4KICAqLwogI2RlZmluZSBUWF9SRUNMQUlNX1BFUklPRCAoSFogLyA0KQorI2RlZmluZSBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LIDY0VQorI2RlZmluZSBUWF9SRUNMQUlNX0NIVU5LIDE2VQogCiAvKiBXUiBzaXplIGluIGJ5dGVzICovCiAjZGVmaW5lIFdSX0xFTiAoV1JfRkxJVFMgKiA4KQpAQCAtMzA0LDIxICszMTEsMjUgQEAKICAqCXJlY2xhaW1fY29tcGxldGVkX3R4IC0gcmVjbGFpbXMgY29tcGxldGVkIFR4IGRlc2NyaXB0b3JzCiAgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKICAqCUBxOiB0aGUgVHggcXVldWUgdG8gcmVjbGFpbSBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgZnJvbQorICoJQGNodW5rOiBtYXhpbXVtIG51bWJlciBvZiBkZXNjcmlwdG9ycyB0byByZWNsYWltCiAgKgogICoJUmVjbGFpbXMgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUgU0dFIGhhcyBpbmRpY2F0ZWQgaXQgaGFzIHByb2Nlc3NlZCwKICAqCWFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBidWZmZXJzIGlmIHBvc3NpYmxlLiAgQ2FsbGVkIHdpdGggdGhlIFR4CiAgKglxdWV1ZSdzIGxvY2sgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJCQlzdHJ1Y3Qgc2dlX3R4cSAqcSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlY2xhaW1fY29tcGxldGVkX3R4KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkJc3RydWN0IHNnZV90eHEgKnEsCisJCQkJCQl1bnNpZ25lZCBpbnQgY2h1bmspCiB7CiAJdW5zaWduZWQgaW50IHJlY2xhaW0gPSBxLT5wcm9jZXNzZWQgLSBxLT5jbGVhbmVkOwogCisJcmVjbGFpbSA9IG1pbihjaHVuaywgcmVjbGFpbSk7CiAJaWYgKHJlY2xhaW0pIHsKIAkJZnJlZV90eF9kZXNjKGFkYXB0ZXIsIHEsIHJlY2xhaW0pOwogCQlxLT5jbGVhbmVkICs9IHJlY2xhaW07CiAJCXEtPmluX3VzZSAtPSByZWNsYWltOwogCX0KKwlyZXR1cm4gcS0+cHJvY2Vzc2VkIC0gcS0+Y2xlYW5lZDsKIH0KIAogLyoqCkBAIC0zMzQsNiArMzQ1LDE4IEBACiAJcmV0dXJuIHEtPmluX3VzZSAtIHIgPCAocS0+c2l6ZSA+PiAxKTsKIH0KIAorc3RhdGljIHZvaWQgY2xlYXJfcnhfZGVzYyhjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpxLCBzdHJ1Y3Qgcnhfc3dfZGVzYyAqZCkKK3sKKwlpZiAocS0+dXNlX3BhZ2VzKSB7CisJCWlmIChkLT5wZ19jaHVuay5wYWdlKQorCQkJcHV0X3BhZ2UoZC0+cGdfY2h1bmsucGFnZSk7CisJCWQtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOworCX0gZWxzZSB7CisJCWtmcmVlX3NrYihkLT5za2IpOworCQlkLT5za2IgPSBOVUxMOworCX0KK30KKwogLyoqCiAgKglmcmVlX3J4X2J1ZnMgLSBmcmVlIHRoZSBSeCBidWZmZXJzIG9uIGFuIFNHRSBmcmVlIGxpc3QKICAqCUBwZGV2OiB0aGUgUENJIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFkYXB0ZXIKQEAgLTM1MSwxNCArMzc0LDcgQEAKIAogCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGQsIGRtYV9hZGRyKSwKIAkJCQkgcS0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChxLT51c2VfcGFnZXMpIHsKLQkJCWlmIChkLT5wZ19jaHVuay5wYWdlKQotCQkJCXB1dF9wYWdlKGQtPnBnX2NodW5rLnBhZ2UpOwotCQkJZC0+cGdfY2h1bmsucGFnZSA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlrZnJlZV9za2IoZC0+c2tiKTsKLQkJCWQtPnNrYiA9IE5VTEw7Ci0JCX0KKwkJY2xlYXJfcnhfZGVzYyhxLCBkKTsKIAkJaWYgKCsrY2lkeCA9PSBxLT5zaXplKQogCQkJY2lkeCA9IDA7CiAJfQpAQCAtNDIzLDYgKzQzOSwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmluZ19mbF9kYihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqcSkKK3sKKwlpZiAocS0+cGVuZF9jcmVkID49IHEtPmNyZWRpdHMgLyA0KSB7CisJCXEtPnBlbmRfY3JlZCA9IDA7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisJfQorfQorCiAvKioKICAqCXJlZmlsbF9mbCAtIHJlZmlsbCBhbiBTR0UgZnJlZS1idWZmZXIgbGlzdAogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCkBAIC00NjMsMTAgKzQ4Nyw3IEBACiAJCWVyciA9IGFkZF9vbmVfcnhfYnVmKGJ1Zl9zdGFydCwgcS0+YnVmX3NpemUsIGQsIHNkLCBxLT5nZW4sCiAJCQkJICAgICBhZGFwLT5wZGV2KTsKIAkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCWlmICghcS0+dXNlX3BhZ2VzKSB7Ci0JCQkJa2ZyZWVfc2tiKHNkLT5za2IpOwotCQkJCXNkLT5za2IgPSBOVUxMOwotCQkJfQorCQkJY2xlYXJfcnhfZGVzYyhxLCBzZCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC00NzgsMTkgKzQ5OSwxOSBAQAogCQkJc2QgPSBxLT5zZGVzYzsKIAkJCWQgPSBxLT5kZXNjOwogCQl9Ci0JCXEtPmNyZWRpdHMrKzsKIAkJY291bnQrKzsKIAl9Ci0Jd21iKCk7Ci0JaWYgKGxpa2VseShjb3VudCkpCi0JCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0tET09SQkVMTCwgVl9FR1JDTlRYKHEtPmNudHh0X2lkKSk7CisKKwlxLT5jcmVkaXRzICs9IGNvdW50OworCXEtPnBlbmRfY3JlZCArPSBjb3VudDsKKwlyaW5nX2ZsX2RiKGFkYXAsIHEpOwogCiAJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKmZsKQogewotCXJlZmlsbF9mbChhZGFwLCBmbCwgbWluKDE2VSwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCisJcmVmaWxsX2ZsKGFkYXAsIGZsLCBtaW4oTUFYX1JYX1JFRklMTCwgZmwtPnNpemUgLSBmbC0+Y3JlZGl0cyksCiAJCSAgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVApOwogfQogCkBAIC01MTUsMTMgKzUzNiwxNSBAQAogCXdtYigpOwogCXRvLT5sZW5fZ2VuID0gY3B1X3RvX2JlMzIoVl9GTERfR0VOMShxLT5nZW4pKTsKIAl0by0+Z2VuMiA9IGNwdV90b19iZTMyKFZfRkxEX0dFTjIocS0+Z2VuKSk7Ci0JcS0+Y3JlZGl0cysrOwogCiAJaWYgKCsrcS0+cGlkeCA9PSBxLT5zaXplKSB7CiAJCXEtPnBpZHggPSAwOwogCQlxLT5nZW4gXj0gMTsKIAl9Ci0JdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfS0RPT1JCRUxMLCBWX0VHUkNOVFgocS0+Y250eHRfaWQpKTsKKworCXEtPmNyZWRpdHMrKzsKKwlxLT5wZW5kX2NyZWQrKzsKKwlyaW5nX2ZsX2RiKGFkYXAsIHEpOwogfQogCiAvKioKQEAgLTU4NSw4ICs2MDgsOCBAQAogCW1lbXNldChxLT50eHEsIDAsIHNpemVvZihzdHJ1Y3Qgc2dlX3R4cSkgKiBTR0VfVFhRX1BFUl9TRVQpOwogCXEtPnR4cV9zdG9wcGVkID0gMDsKIAlxLT50eF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uID0gTlVMTDsgLyogZm9yIHQzX3N0b3Bfc2dlX3RpbWVycygpICovCi0Ja2ZyZWUocS0+bHJvX2ZyYWdfdGJsKTsKLQlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKKwlxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uID0gTlVMTDsKKwlxLT5scm9fZnJhZ190YmwubnJfZnJhZ3MgPSBxLT5scm9fZnJhZ190YmwubGVuID0gMDsKIH0KIAogCkBAIC03MzMsNyArNzU2LDkgQEAKIAkJcmV0dXJuIHNrYjsKIAl9CiAKLQlpZiAodW5saWtlbHkoZmwtPmNyZWRpdHMgPCBkcm9wX3RocmVzKSkKKwlpZiAodW5saWtlbHkoZmwtPmNyZWRpdHMgPCBkcm9wX3RocmVzKSAmJgorCSAgICByZWZpbGxfZmwoYWRhcCwgZmwsIG1pbihNQVhfUlhfUkVGSUxMLCBmbC0+c2l6ZSAtIGZsLT5jcmVkaXRzIC0gMSksCisJCSAgICAgIEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QKSA9PSAwKQogCQlnb3RvIHJlY3ljbGU7CiAKIHVzZV9vcmlnX2J1ZjoKQEAgLTgxMywxNCArODM4LDE1IEBACiAJCQkJICAgbGVuIC0gU0dFX1JYX1BVTExfTEVOKTsKIAkJbmV3c2tiLT5sZW4gPSBsZW47CiAJCW5ld3NrYi0+ZGF0YV9sZW4gPSBsZW4gLSBTR0VfUlhfUFVMTF9MRU47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbmV3c2tiLT5kYXRhX2xlbjsKIAl9IGVsc2UgewogCQlza2JfZmlsbF9wYWdlX2Rlc2MobmV3c2tiLCBza2Jfc2hpbmZvKG5ld3NrYiktPm5yX2ZyYWdzLAogCQkJCSAgIHNkLT5wZ19jaHVuay5wYWdlLAogCQkJCSAgIHNkLT5wZ19jaHVuay5vZmZzZXQsIGxlbik7CiAJCW5ld3NrYi0+bGVuICs9IGxlbjsKIAkJbmV3c2tiLT5kYXRhX2xlbiArPSBsZW47CisJCW5ld3NrYi0+dHJ1ZXNpemUgKz0gbGVuOwogCX0KLQluZXdza2ItPnRydWVzaXplICs9IG5ld3NrYi0+ZGF0YV9sZW47CiAKIAlmbC0+Y3JlZGl0cy0tOwogCS8qCkBAIC0xMTYxLDcgKzExODcsNyBAQAogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxaWR4KTsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0JcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CisJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAljcmVkaXRzID0gcS0+c2l6ZSAtIHEtPmluX3VzZTsKIAluZGVzYyA9IGNhbGNfdHhfZGVzY3Moc2tiKTsKQEAgLTE1NzAsNyArMTU5Niw3IEBACiAJdW5zaWduZWQgaW50IG5kZXNjID0gY2FsY190eF9kZXNjc19vZmxkKHNrYiksIHBpZHgsIGdlbjsKIAogCXNwaW5fbG9jaygmcS0+bG9jayk7Ci0gICAgICBhZ2FpbjpyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxKTsKK2FnYWluOglyZWNsYWltX2NvbXBsZXRlZF90eChhZGFwLCBxLCBUWF9SRUNMQUlNX0NIVU5LKTsKIAogCXJldCA9IGNoZWNrX2Rlc2NfYXZhaWwoYWRhcCwgcSwgc2tiLCBuZGVzYywgVFhRX09GTEQpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CkBAIC0xNjEyLDcgKzE2MzgsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CiAKIAlzcGluX2xvY2soJnEtPmxvY2spOwotICAgICAgYWdhaW46cmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CithZ2FpbjoJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZxLT5zZW5kcSkpICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IGdlbiwgcGlkeDsKQEAgLTE5MzgsNiArMTk2NCw3IEBACiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcXMgLSAmYWRhcC0+c2dlLnFzWzBdKTsKIAogCWlmICh1bmxpa2VseShwLT52bGFuX3ZhbGlkKSkgewogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwpAQCAtMTk0NSwxMCArMTk3Miw4IEBACiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9WTEFORVhdKys7CiAJCWlmIChsaWtlbHkoZ3JwKSkKIAkJCWlmIChscm8pCi0JCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmcXMtPmxyb19tZ3IsIHNrYiwKLQkJCQkJCQkgICAgIGdycCwKLQkJCQkJCQkgICAgIG50b2hzKHAtPnZsYW4pLAotCQkJCQkJCSAgICAgcCk7CisJCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcXMtPm5hcGksIGdycCwKKwkJCQkJCSBudG9ocyhwLT52bGFuKSwgc2tiKTsKIAkJCWVsc2UgewogCQkJCWlmICh1bmxpa2VseShwaS0+aXNjc2lfaXB2NGFkZHIgJiYKIAkJCQkgICAgaXNfYXJwKHNrYikpKSB7CkBAIC0xOTY1LDcgKzE5OTAsNyBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9IGVsc2UgaWYgKHJxLT5wb2xsaW5nKSB7CiAJCWlmIChscm8pCi0JCQlscm9fcmVjZWl2ZV9za2IoJnFzLT5scm9fbWdyLCBza2IsIHApOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmcXMtPm5hcGksIHNrYik7CiAJCWVsc2UgewogCQkJaWYgKHVubGlrZWx5KHBpLT5pc2NzaV9pcHY0YWRkciAmJiBpc19hcnAoc2tiKSkpCiAJCQkJY3hnYjNfYXJwX3Byb2Nlc3MoYWRhcCwgc2tiKTsKQEAgLTE5ODEsNTkgKzIwMDYsNiBAQAogfQogCiAvKioKLSAqCWxyb19mcmFtZV9vayAtIGNoZWNrIGlmIGFuIGluZ3Jlc3MgcGFja2V0IGlzIGVsaWdpYmxlIGZvciBMUk8KLSAqCUBwOiB0aGUgQ1BMIGhlYWRlciBvZiB0aGUgcGFja2V0Ci0gKgotICoJUmV0dXJucyB0cnVlIGlmIGEgcmVjZWl2ZWQgcGFja2V0IGlzIGVsaWdpYmxlIGZvciBMUk8uCi0gKglUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlOgotICoJLSBwYWNrZXQgaXMgVENQL0lQIEV0aGVybmV0IElJIChjaGVja2VkIGVsc2V3aGVyZSkKLSAqCS0gbm90IGFuIElQIGZyYWdtZW50Ci0gKgktIG5vIElQIG9wdGlvbnMKLSAqCS0gVENQL0lQIGNoZWNrc3VtcyBhcmUgY29ycmVjdAotICoJLSB0aGUgcGFja2V0IGlzIGZvciB0aGlzIGhvc3QKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbHJvX2ZyYW1lX29rKGNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpwKQotewotCWNvbnN0IHN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKikocCArIDEpOwotCWNvbnN0IHN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKGVoICsgMSk7Ci0KLQlyZXR1cm4gKCooKHU4ICopcCArIDEpICYgMHg5MCkgPT0gMHgxMCAmJiBwLT5jc3VtID09IGh0b25zKDB4ZmZmZikgJiYKLQkJZWgtPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApICYmIGloLT5paGwgPT0gKHNpemVvZigqaWgpID4+IDIpOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9scm9faGVhZGVyKHZvaWQgKiplaCwgIHZvaWQgKippcGgsIHZvaWQgKip0Y3BoLAotCQkJICAgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQljb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqY3BsID0gcHJpdjsKLQotCWlmICghbHJvX2ZyYW1lX29rKGNwbCkpCi0JCXJldHVybiAtMTsKLQotCSplaCA9IChzdHJ1Y3QgZXRoaGRyICopKGNwbCArIDEpOwotCSppcGggPSAoc3RydWN0IGlwaGRyICopKChzdHJ1Y3QgZXRoaGRyICopKmVoICsgMSk7Ci0JKnRjcGggPSAoc3RydWN0IHRjcGhkciAqKSgoc3RydWN0IGlwaGRyICopKmlwaCArIDEpOwotCi0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0M19nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgICAgdm9pZCAqcHJpdikKLXsKLQl2b2lkICplaDsKLQotCXJldHVybiB0M19nZXRfbHJvX2hlYWRlcigmZWgsIGlwaCwgdGNwaCwgaGRyX2ZsYWdzLCBwcml2KTsKLX0KLQotc3RhdGljIGludCB0M19nZXRfZnJhZ19oZWFkZXIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKmVoLAotCQkJICAgICAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgICAgdm9pZCAqcHJpdikKLXsKLQlyZXR1cm4gdDNfZ2V0X2xyb19oZWFkZXIoZWgsIGlwaCwgdGNwaCwgaGRyX2ZsYWdzLCBwcml2KTsKLX0KLQotLyoqCiAgKglscm9fYWRkX3BhZ2UgLSBhZGQgYSBwYWdlIGNodW5rIHRvIGFuIExSTyBzZXNzaW9uCiAgKglAYWRhcDogdGhlIGFkYXB0ZXIKICAqCUBxczogdGhlIGFzc29jaWF0ZWQgcXVldWUgc2V0CkBAIC0yMDQ5LDggKzIwMjEsOSBAQAogewogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOwogCXN0cnVjdCBjcGxfcnhfcGt0ICpjcGw7Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcnhfZnJhZyA9IHFzLT5scm9fZnJhZ190Ymw7Ci0JaW50IG5yX2ZyYWdzID0gcXMtPmxyb19uZnJhZ3MsIGZyYWdfbGVuID0gcXMtPmxyb19mcmFnX2xlbjsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnID0gcXMtPmxyb19mcmFnX3RibC5mcmFnczsKKwlpbnQgbnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzOworCWludCBmcmFnX2xlbiA9IHFzLT5scm9fZnJhZ190YmwubGVuOwogCWludCBvZmZzZXQgPSAwOwogCiAJaWYgKCFucl9mcmFncykgewpAQCAtMjA2NCwxOCArMjAzNywyMCBAQAogCXBjaV91bm1hcF9zaW5nbGUoYWRhcC0+cGRldiwgcGNpX3VubWFwX2FkZHIoc2QsIGRtYV9hZGRyKSwKIAkJCSBmbC0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKKwlwcmVmZXRjaCgmcXMtPmxyb19mcmFnX3RibCk7CisKIAlyeF9mcmFnICs9IG5yX2ZyYWdzOwogCXJ4X2ZyYWctPnBhZ2UgPSBzZC0+cGdfY2h1bmsucGFnZTsKIAlyeF9mcmFnLT5wYWdlX29mZnNldCA9IHNkLT5wZ19jaHVuay5vZmZzZXQgKyBvZmZzZXQ7CiAJcnhfZnJhZy0+c2l6ZSA9IGxlbjsKIAlmcmFnX2xlbiArPSBsZW47Ci0JcXMtPmxyb19uZnJhZ3MrKzsKLQlxcy0+bHJvX2ZyYWdfbGVuID0gZnJhZ19sZW47CisJcXMtPmxyb19mcmFnX3RibC5ucl9mcmFncysrOworCXFzLT5scm9fZnJhZ190YmwubGVuID0gZnJhZ19sZW47CiAKIAlpZiAoIWNvbXBsZXRlKQogCQlyZXR1cm47CiAKLQlxcy0+bHJvX25mcmFncyA9IHFzLT5scm9fZnJhZ19sZW4gPSAwOworCXFzLT5scm9fZnJhZ190YmwuaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJY3BsID0gcXMtPmxyb192YTsKIAogCWlmICh1bmxpa2VseShjcGwtPnZsYW5fdmFsaWQpKSB7CkBAIC0yMDg0LDM2ICsyMDU5LDE1IEBACiAJCXN0cnVjdCB2bGFuX2dyb3VwICpncnAgPSBwaS0+dmxhbl9ncnA7CiAKIAkJaWYgKGxpa2VseShncnAgIT0gTlVMTCkpIHsKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9mcmFncygmcXMtPmxyb19tZ3IsCi0JCQkJCQkgICAgICAgcXMtPmxyb19mcmFnX3RibCwKLQkJCQkJCSAgICAgICBmcmFnX2xlbiwgZnJhZ19sZW4sCi0JCQkJCQkgICAgICAgZ3JwLCBudG9ocyhjcGwtPnZsYW4pLAotCQkJCQkJICAgICAgIGNwbCwgMCk7Ci0JCQlyZXR1cm47CisJCQl2bGFuX2dyb19mcmFncygmcXMtPm5hcGksIGdycCwgbnRvaHMoY3BsLT52bGFuKSwKKwkJCQkgICAgICAgJnFzLT5scm9fZnJhZ190YmwpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbHJvX3JlY2VpdmVfZnJhZ3MoJnFzLT5scm9fbWdyLCBxcy0+bHJvX2ZyYWdfdGJsLAotCQkJICBmcmFnX2xlbiwgZnJhZ19sZW4sIGNwbCwgMCk7Ci19CisJbmFwaV9ncm9fZnJhZ3MoJnFzLT5uYXBpLCAmcXMtPmxyb19mcmFnX3RibCk7CiAKLS8qKgotICoJaW5pdF9scm9fbWdyIC0gaW5pdGlhbGl6ZSBhIExSTyBtYW5hZ2VyIG9iamVjdAotICoJQGxyb19tZ3I6IHRoZSBMUk8gbWFuYWdlciBvYmplY3QKLSAqLwotc3RhdGljIHZvaWQgaW5pdF9scm9fbWdyKHN0cnVjdCBzZ2VfcXNldCAqcXMsIHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncikKLXsKLQlscm9fbWdyLT5kZXYgPSBxcy0+bmV0ZGV2OwotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5mcmFnX2FsaWduX3BhZCA9IE5FVF9JUF9BTElHTjsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gVDNfTUFYX0xST19TRVM7Ci0JbHJvX21nci0+bHJvX2FyciA9IHFzLT5scm9fZGVzYzsKLQlscm9fbWdyLT5nZXRfZnJhZ19oZWFkZXIgPSB0M19nZXRfZnJhZ19oZWFkZXI7Ci0JbHJvX21nci0+Z2V0X3NrYl9oZWFkZXIgPSB0M19nZXRfc2tiX2hlYWRlcjsKLQlscm9fbWdyLT5tYXhfYWdnciA9IFQzX01BWF9MUk9fTUFYX1BLVFM7Ci0JaWYgKGxyb19tZ3ItPm1heF9hZ2dyID4gTUFYX1NLQl9GUkFHUykKLQkJbHJvX21nci0+bWF4X2FnZ3IgPSBNQVhfU0tCX0ZSQUdTOworb3V0OgorCXFzLT5scm9fZnJhZ190YmwubnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLmxlbiA9IDA7CiB9CiAKIC8qKgpAQCAtMjM1NiwxMCArMjMxMCw2IEBACiAJfQogCiAJZGVsaXZlcl9wYXJ0aWFsX2J1bmRsZSgmYWRhcC0+dGRldiwgcSwgb2ZmbG9hZF9za2JzLCBuZ2F0aGVyZWQpOwotCWxyb19mbHVzaF9hbGwoJnFzLT5scm9fbWdyKTsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX0FHR1JdID0gcXMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX0ZMVVNIRURdID0gcXMtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX05PX0RFU0NdID0gcXMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogCWlmIChzbGVlcGluZykKIAkJY2hlY2tfcmluZ19kYihhZGFwLCBxcywgc2xlZXBpbmcpOwpAQCAtMjc3NSw3ICsyNzI1LDggQEAKICAqLwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1bnNpZ25lZCBpbnQgdiwgc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UpOworCXVuc2lnbmVkIGludCB2LCBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSkgJgorCQkJCSB+Rl9GTEVNUFRZOwogCiAJaWYgKHN0YXR1cyAmIFNHRV9QQVJFUlIpCiAJCUNIX0FMRVJUKGFkYXB0ZXIsICJTR0UgcGFyaXR5IGVycm9yICgweCV4KVxuIiwKQEAgLTI4MDUsMTMgKzI3NTYsMTMgQEAKIH0KIAogLyoqCi0gKglzZ2VfdGltZXJfY2IgLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglzZ2VfdGltZXJfdHggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CiAgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KICAqCiAgKglSdW5zIHBlcmlvZGljYWxseSBmcm9tIGEgdGltZXIgdG8gcGVyZm9ybSBtYWludGVuYW5jZSBvZiBhbiBTR0UgcXVldWUKICAqCXNldC4gIEl0IHBlcmZvcm1zIHR3byB0YXNrczoKICAqCi0gKglhKSBDbGVhbnMgdXAgYW55IGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycyB0aGF0IG1heSBzdGlsbCBiZSBwZW5kaW5nLgorICoJQ2xlYW5zIHVwIGFueSBjb21wbGV0ZWQgVHggZGVzY3JpcHRvcnMgdGhhdCBtYXkgc3RpbGwgYmUgcGVuZGluZy4KICAqCU5vcm1hbCBkZXNjcmlwdG9yIGNsZWFudXAgaGFwcGVucyB3aGVuIG5ldyBwYWNrZXRzIGFyZSBhZGRlZCB0byBhIFR4CiAgKglxdWV1ZSBzbyB0aGlzIHRpbWVyIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudCBhbmQgZG9lcyBhbnkgY2xlYW51cCBvbmx5CiAgKglpZiB0aGUgVHggcXVldWUgaGFzIG5vdCBzZWVuIGFueSBuZXcgcGFja2V0cyBpbiBhIHdoaWxlLiAgV2UgbWFrZSBhCkBAIC0yODIxLDUxICsyNzcyLDg3IEBACiAgKgl1cCkuICBTaW5jZSBjb250cm9sIHF1ZXVlcyB1c2UgaW1tZWRpYXRlIGRhdGEgZXhjbHVzaXZlbHkgd2UgZG9uJ3QKICAqCWJvdGhlciBjbGVhbmluZyB0aGVtIHVwIGhlcmUuCiAgKgotICoJYikgUmVwbGVuaXNoZXMgUnggcXVldWVzIHRoYXQgaGF2ZSBydW4gb3V0IGR1ZSB0byBtZW1vcnkgc2hvcnRhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHNnZV90aW1lcl90eCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNnZV9xc2V0ICpxcyA9IChzdHJ1Y3Qgc2dlX3FzZXQgKilkYXRhOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKKwl1bnNpZ25lZCBpbnQgdGJkW1NHRV9UWFFfUEVSX1NFVF0gPSB7MCwgMH07CisJdW5zaWduZWQgbG9uZyBuZXh0X3BlcmlvZDsKKworCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKKwkJdGJkW1RYUV9FVEhdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0sCisJCQkJCQkgICAgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyk7CisJCXNwaW5fdW5sb2NrKCZxcy0+dHhxW1RYUV9FVEhdLmxvY2spOworCX0KKwlpZiAoc3Bpbl90cnlsb2NrKCZxcy0+dHhxW1RYUV9PRkxEXS5sb2NrKSkgeworCQl0YmRbVFhRX09GTERdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdLAorCQkJCQkJICAgICBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LKTsKKwkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOworCX0KKworCW5leHRfcGVyaW9kID0gVFhfUkVDTEFJTV9QRVJJT0QgPj4KKwkJICAgICAgKG1heCh0YmRbVFhRX0VUSF0sIHRiZFtUWFFfT0ZMRF0pIC8KKwkJICAgICAgIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTkspOworCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBuZXh0X3BlcmlvZCk7Cit9CisKKy8qCisgKglzZ2VfdGltZXJfcnggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KKyAqCisgKglhKSBSZXBsZW5pc2hlcyBSeCBxdWV1ZXMgdGhhdCBoYXZlIHJ1biBvdXQgZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4KICAqCU5vcm1hbGx5IG5ldyBSeCBidWZmZXJzIGFyZSBhZGRlZCB3aGVuIGV4aXN0aW5nIG9uZXMgYXJlIGNvbnN1bWVkIGJ1dAogICoJd2hlbiBvdXQgb2YgbWVtb3J5IGEgcXVldWUgY2FuIGJlY29tZSBlbXB0eS4gIFdlIHRyeSB0byBhZGQgb25seSBhIGZldwogICoJYnVmZmVycyBoZXJlLCB0aGUgcXVldWUgd2lsbCBiZSByZXBsZW5pc2hlZCBmdWxseSBhcyB0aGVzZSBuZXcgYnVmZmVycwogICoJYXJlIHVzZWQgdXAgaWYgbWVtb3J5IHNob3J0YWdlIGhhcyBzdWJzaWRlZC4KKyAqCisgKgliKSBSZXR1cm4gY29hbGVzY2VkIHJlc3BvbnNlIHF1ZXVlIGNyZWRpdHMgaW4gY2FzZSBhIHJlc3BvbnNlIHF1ZXVlIGlzCisgKglzdGFydmVkLgorICoKICAqLwotc3RhdGljIHZvaWQgc2dlX3RpbWVyX2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHNnZV90aW1lcl9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3BpbmxvY2tfdCAqbG9jazsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gKHN0cnVjdCBzZ2VfcXNldCAqKWRhdGE7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBxcy0+YWRhcDsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KHFzLT5uZXRkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CisJdTMyIHN0YXR1czsKIAotCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0pOwotCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKTsKLQl9Ci0JaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdKTsKLQkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOwotCX0KLQlsb2NrID0gKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJWCkgPyAmcXMtPnJzcHEubG9jayA6Ci0JCQkJCSAgICAmYWRhcC0+c2dlLnFzWzBdLnJzcHEubG9jazsKLQlpZiAoc3Bpbl90cnlsb2NrX2lycShsb2NrKSkgewotCQlpZiAoIW5hcGlfaXNfc2NoZWR1bGVkKCZxcy0+bmFwaSkpIHsKLQkJCXUzMiBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTKTsKKwlsb2NrID0gYWRhcC0+cGFyYW1zLnJldiA+IDAgPworCSAgICAgICAmcXMtPnJzcHEubG9jayA6ICZhZGFwLT5zZ2UucXNbMF0ucnNwcS5sb2NrOwogCi0JCQlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKLQkJCQlfX3JlZmlsbF9mbChhZGFwLCAmcXMtPmZsWzBdKTsKLQkJCWlmIChxcy0+ZmxbMV0uY3JlZGl0cyA8IHFzLT5mbFsxXS5zaXplKQotCQkJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCWlmICghc3Bpbl90cnlsb2NrX2lycShsb2NrKSkKKwkJZ290byBvdXQ7CiAKLQkJCWlmIChzdGF0dXMgJiAoMSA8PCBxcy0+cnNwcS5jbnR4dF9pZCkpIHsKLQkJCQlxcy0+cnNwcS5zdGFydmVkKys7Ci0JCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKLQkJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKLQkJCQkJcXMtPnJzcHEuY3JlZGl0cy0tOwotCQkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKLQkJCQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfUlNQUV9GTF9TVEFUVVMsCi0JCQkJCQkgICAgIDEgPDwgcXMtPnJzcHEuY250eHRfaWQpOwotCQkJCX0KKwlpZiAobmFwaV9pc19zY2hlZHVsZWQoJnFzLT5uYXBpKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYWRhcC0+cGFyYW1zLnJldiA8IDQpIHsKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUyk7CisKKwkJaWYgKHN0YXR1cyAmICgxIDw8IHFzLT5yc3BxLmNudHh0X2lkKSkgeworCQkJcXMtPnJzcHEuc3RhcnZlZCsrOworCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKKwkJCQlxcy0+cnNwcS5jcmVkaXRzLS07CisJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKKwkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKKwkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUywKKwkJCQkJICAgICAxIDw8IHFzLT5yc3BxLmNudHh0X2lkKTsKIAkJCX0KIAkJfQotCQlzcGluX3VubG9ja19pcnEobG9jayk7CiAJfQotCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CisKKwlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKKwkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFswXSk7CisJaWYgKHFzLT5mbFsxXS5jcmVkaXRzIDwgcXMtPmZsWzFdLnNpemUpCisJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworb3V0OgorCW1vZF90aW1lcigmcXMtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CiB9CiAKIC8qKgpAQCAtMjkwNiwxMCArMjg5MywxMCBAQAogewogCWludCBpLCBhdmFpbCwgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnEgPSAmYWRhcHRlci0+c2dlLnFzW2lkXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IgPSAmcS0+bHJvX21ncjsKIAogCWluaXRfcXNldF9jbnR4dChxLCBpZCk7Ci0Jc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl90eCwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9yeCwgKHVuc2lnbmVkIGxvbmcpcSk7CiAKIAlxLT5mbFswXS5kZXNjID0gYWxsb2NfcmluZyhhZGFwdGVyLT5wZGV2LCBwLT5mbF9zaXplLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyksCkBAIC0yOTg2LDEwICsyOTczLDYgQEAKIAlxLT5mbFswXS5vcmRlciA9IEZMMF9QR19PUkRFUjsKIAlxLT5mbFsxXS5vcmRlciA9IEZMMV9QR19PUkRFUjsKIAotCXEtPmxyb19mcmFnX3RibCA9IGtjYWxsb2MoTUFYX0ZSQU1FX1NJWkUgLyBGTDFfUEdfQ0hVTktfU0laRSArIDEsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCksCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlxLT5scm9fbmZyYWdzID0gcS0+bHJvX2ZyYWdfbGVuID0gMDsKIAlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT5zZ2UucmVnX2xvY2spOwogCiAJLyogRkwgdGhyZXNob2xkIGNvbXBhcmlzb24gdXNlcyA8ICovCkBAIC0zMDQxLDggKzMwMjQsNiBAQAogCXEtPnR4X3EgPSBuZXRkZXZxOwogCXQzX3VwZGF0ZV9xc2V0X2NvYWxlc2NlKHEsIHApOwogCi0JaW5pdF9scm9fbWdyKHEsIGxyb19tZ3IpOwotCiAJYXZhaWwgPSByZWZpbGxfZmwoYWRhcHRlciwgJnEtPmZsWzBdLCBxLT5mbFswXS5zaXplLAogCQkJICBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCk7CiAJaWYgKCFhdmFpbCkgewpAQCAtMzA2NCw2ICszMDQ1LDggQEAKIAkJICAgICBWX05FV1RJTUVSKHEtPnJzcHEuaG9sZG9mZl90bXIpKTsKIAogCW1vZF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKKwltb2RfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CisKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTMwODgsNiArMzA3MSw4IEBACiAKIAkJaWYgKHEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24pCiAJCQlkZWxfdGltZXJfc3luYygmcS0+dHhfcmVjbGFpbV90aW1lcik7CisJCWlmIChxLT5yeF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQkJZGVsX3RpbWVyX3N5bmMoJnEtPnJ4X3JlY2xhaW1fdGltZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggYWMyYTk3NC4uZmYyNjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC0xMTUzLDYgKzExNTMsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB0M19nYXRlX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyICpyeF9jZmcsCisJCQkgICAgICAgdTMyICpyeF9oYXNoX2hpZ2gsIHUzMiAqcnhfaGFzaF9sb3cpCit7CisJLyogc3RvcCBSeCB1bmljYXN0IHRyYWZmaWMgKi8KKwl0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisKKwkvKiBzdG9wIGJyb2FkY2FzdCwgbXVsdGljYXN0LCBwcm9taXNjdW91cyBtb2RlIHRyYWZmaWMgKi8KKwkqcnhfY2ZnID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcpOworCXQzX3NldF9yZWdfZmllbGQobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcsCisJCQkgRl9FTkhBU0hNQ0FTVCB8IEZfRElTQkNBU1QgfCBGX0NPUFlBTExGUkFNRVMsCisJCQkgRl9ESVNCQ0FTVCk7CisKKwkqcnhfaGFzaF9oaWdoID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0hJR0gpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgMCk7CisKKwkqcnhfaGFzaF9sb3cgPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgMCk7CisKKwkvKiBMZWF2ZSB0aW1lIHRvIGRyYWluIG1heCBSWCBmaWZvICovCisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCB0M19vcGVuX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyIHJ4X2NmZywKKwkJCSAgICAgICB1MzIgcnhfaGFzaF9oaWdoLCB1MzIgcnhfaGFzaF9sb3cpCit7CisJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisJdDNfc2V0X3JlZ19maWVsZChtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRywKKwkJCSBGX0VOSEFTSE1DQVNUIHwgRl9ESVNCQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywKKwkJCSByeF9jZmcpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgcnhfaGFzaF9oaWdoKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgcnhfaGFzaF9sb3cpOworfQogCiAvKioKICAqCXQzX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBpbnRlcmZhY2UgbGluayBjaGFuZ2VzCkBAIC0xMTcwLDkgKzEyMDIsMzIgQEAKIAlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOwogCXN0cnVjdCBsaW5rX2NvbmZpZyAqbGMgPSAmcGktPmxpbmtfY29uZmlnOworCWludCBmb3JjZV9saW5rX2Rvd24gPSAwOwogCiAJcGh5LT5vcHMtPmdldF9saW5rX3N0YXR1cyhwaHksICZsaW5rX29rLCAmc3BlZWQsICZkdXBsZXgsICZmYyk7CiAKKwlpZiAoIWxjLT5saW5rX29rICYmIGxpbmtfb2spIHsKKwkJdTMyIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdzsKKwkJdTMyIHN0YXR1czsKKworCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcG9ydF9pZCk7CisJCXQzX2dhdGVfcnhfdHJhZmZpYyhtYWMsICZyeF9jZmcsICZyeF9oYXNoX2hpZ2gsICZyeF9oYXNoX2xvdyk7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIG1hYy0+b2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAmIEZfTElOS0ZBVUxUQ0hBTkdFKSB7CisJCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisJCQlmb3JjZV9saW5rX2Rvd24gPSAxOworCQl9CisJCXQzX29wZW5fcnhfdHJhZmZpYyhtYWMsIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdyk7CisKKwkJaWYgKGZvcmNlX2xpbmtfZG93bikgeworCQkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJaWYgKGxjLT5yZXF1ZXN0ZWRfZmMgJiBQQVVTRV9BVVRPTkVHKQogCQlmYyAmPSBsYy0+cmVxdWVzdGVkX2ZjOwogCWVsc2UKQEAgLTEyMDIsNiArMTI1Nyw1NyBAQAogCXQzX29zX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rLCBzcGVlZCwgZHVwbGV4LCBmYyk7CiB9CiAKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIHBvcnRfaWQpOworCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKwlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CisJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwaS0+bGlua19jb25maWc7CisJaW50IGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjLCBsaW5rX2ZhdWx0OworCXUzMiByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3c7CisKKwl0M19nYXRlX3J4X3RyYWZmaWMobWFjLCAmcnhfY2ZnLCAmcnhfaGFzaF9oaWdoLCAmcnhfaGFzaF9sb3cpOworCisJaWYgKGFkYXB0ZXItPnBhcmFtcy5yZXYgPiAwICYmIHVzZXNfeGF1aShhZGFwdGVyKSkKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwgMCk7CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fUlhfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKKwl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwl0M19vcGVuX3J4X3RyYWZmaWMobWFjLCByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3cpOworCisJbGlua19mYXVsdCA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsCisJCQkJIEFfWEdNX0lOVF9TVEFUVVMgKyBtYWMtPm9mZnNldCk7CisJbGlua19mYXVsdCAmPSBGX0xJTktGQVVMVENIQU5HRTsKKworCXBoeS0+b3BzLT5nZXRfbGlua19zdGF0dXMocGh5LCAmbGlua19vaywgJnNwZWVkLCAmZHVwbGV4LCAmZmMpOworCisJaWYgKGxpbmtfZmF1bHQpIHsKKwkJbGMtPmxpbmtfb2sgPSAwOworCQlsYy0+c3BlZWQgPSBTUEVFRF9JTlZBTElEOworCQlsYy0+ZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisKKwkJdDNfb3NfbGlua19mYXVsdChhZGFwdGVyLCBwb3J0X2lkLCAwKTsKKworCQkvKiBBY2NvdW50IGxpbmsgZmF1bHRzIG9ubHkgd2hlbiB0aGUgcGh5IHJlcG9ydHMgYSBsaW5rIHVwICovCisJCWlmIChsaW5rX29rKQorCQkJbWFjLT5zdGF0cy5saW5rX2ZhdWx0cysrOworCisJCW1zbGVlcCgxMDAwKTsKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCX0gZWxzZSB7CisJCWlmIChsaW5rX29rKQorCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwKKwkJCQkgICAgIEZfVFhBQ1RFTkFCTEUgfCBGX1JYRU4pOworCisJCXBpLT5saW5rX2ZhdWx0ID0gMDsKKwkJbGMtPmxpbmtfb2sgPSAodW5zaWduZWQgY2hhcilsaW5rX29rOworCQlsYy0+c3BlZWQgPSBzcGVlZCA8IDAgPyBTUEVFRF9JTlZBTElEIDogc3BlZWQ7CisJCWxjLT5kdXBsZXggPSBkdXBsZXggPCAwID8gRFVQTEVYX0lOVkFMSUQgOiBkdXBsZXg7CisJCXQzX29zX2xpbmtfZmF1bHQoYWRhcHRlciwgcG9ydF9pZCwgbGlua19vayk7CisJfQorfQorCiAvKioKICAqCXQzX2xpbmtfc3RhcnQgLSBhcHBseSBsaW5rIGNvbmZpZ3VyYXRpb24gdG8gTUFDL1BIWQogICoJQHBoeTogdGhlIFBIWSB0byBzZXR1cApAQCAtMTMyMyw3ICsxNDI5LDcgQEAKICNkZWZpbmUgTUM3X0lOVFJfTUFTSyAoRl9BRSB8IEZfVUUgfCBGX0NFIHwgVl9QRShNX1BFKSkKICNkZWZpbmUgWEdNX0lOVFJfTUFTSyAoVl9UWEZJRk9fUFJUWV9FUlIoTV9UWEZJRk9fUFJUWV9FUlIpIHwgXAogCQkgICAgICAgVl9SWEZJRk9fUFJUWV9FUlIoTV9SWEZJRk9fUFJUWV9FUlIpIHwgXAotCQkgICAgICAgRl9UWEZJRk9fVU5ERVJSVU4gfCBGX1JYRklGT19PVkVSRkxPVykKKwkJICAgICAgIEZfVFhGSUZPX1VOREVSUlVOKQogI2RlZmluZSBQQ0lYX0lOVFJfTUFTSyAoRl9NU1RERVRQQVJFUlIgfCBGX1NJR1RBUkFCVCB8IEZfUkNWVEFSQUJUIHwgXAogCQkJRl9SQ1ZNU1RBQlQgfCBGX1NJR1NZU0VSUiB8IEZfREVUUEFSRVJSIHwgXAogCQkJRl9TUExDTVBESVMgfCBGX1VOWFNQTENNUCB8IEZfUkNWU1BMQ01QRVJSIHwgXApAQCAtMTM2MCwxMSArMTQ2NiwxMSBAQAogCQkgICAgICAgVl9UWDFUUFBBUkVSUkVOQihNX1RYMVRQUEFSRVJSRU5CKSB8IFwKIAkJICAgICAgIFZfUlhUUFBBUkVSUkVOQihNX1JYVFBQQVJFUlJFTkIpIHwgXAogCQkgICAgICAgVl9NQ0FQQVJFUlJFTkIoTV9NQ0FQQVJFUlJFTkIpKQorI2RlZmluZSBYR01fRVhUUkFfSU5UUl9NQVNLIChGX0xJTktGQVVMVENIQU5HRSkKICNkZWZpbmUgUExfSU5UUl9NQVNLIChGX1QzREJHIHwgRl9YR01BQzBfMCB8IEZfWEdNQUMwXzEgfCBGX01DNUEgfCBGX1BNMV9UWCB8IFwKIAkJICAgICAgRl9QTTFfUlggfCBGX1VMUDJfVFggfCBGX1VMUDJfUlggfCBGX1RQMSB8IEZfQ0lNIHwgXAogCQkgICAgICBGX01DN19DTSB8IEZfTUM3X1BNVFggfCBGX01DN19QTVJYIHwgRl9TR0UzIHwgRl9QQ0lNMCB8IFwKIAkJICAgICAgRl9NUFMwIHwgRl9DUExfU1dJVENIKQotCiAvKgogICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBQQ0lYMSBtb2R1bGUuCiAgKi8KQEAgLTE2OTUsNyArMTgwMSwxNCBAQAogc3RhdGljIGludCBtYWNfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgaWR4KQogewogCXN0cnVjdCBjbWFjICptYWMgPSAmYWRhcDJwaW5mbyhhZGFwLCBpZHgpLT5tYWM7Ci0JdTMyIGNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpOworCS8qCisJICogV2UgbWFzayBvdXQgaW50ZXJydXB0IGNhdXNlcyBmb3Igd2hpY2ggd2UncmUgbm90IHRha2luZyBpbnRlcnJ1cHRzLgorCSAqIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSBwb2xsaW5nIGxvZ2ljIHRvIG1vbml0b3Igc29tZSBvZiB0aGUgb3RoZXIKKwkgKiBjb25kaXRpb25zIHdoZW4gdGFraW5nIGludGVycnVwdHMgd291bGQgaW1wb3NlIHRvbyBtdWNoIGxvYWQgb24gdGhlCisJICogc3lzdGVtLgorCSAqLworCXUzMiBjYXVzZSA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0KSAmCisJCSAgICB+Rl9SWEZJRk9fT1ZFUkZMT1c7CiAKIAlpZiAoY2F1c2UgJiBWX1RYRklGT19QUlRZX0VSUihNX1RYRklGT19QUlRZX0VSUikpIHsKIAkJbWFjLT5zdGF0cy50eF9maWZvX3Bhcml0eV9lcnIrKzsKQEAgLTE3MTUsMTAgKzE4MjgsMjAgQEAKIAkJbWFjLT5zdGF0cy54YXVpX3Bjc19jdGNfZXJyKys7CiAJaWYgKGNhdXNlICYgRl9YQVVJUENTQUxJR05DSEFOR0UpCiAJCW1hYy0+c3RhdHMueGF1aV9wY3NfYWxpZ25fY2hhbmdlKys7CisJaWYgKGNhdXNlICYgRl9YR01fSU5UKSB7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArIG1hYy0+b2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIDApOworCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXAsIGlkeCk7CisJfQogCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0LCBjYXVzZSk7CisKIAlpZiAoY2F1c2UgJiBYR01fSU5UUl9GQVRBTCkKIAkJdDNfZmF0YWxfZXJyKGFkYXApOworCiAJcmV0dXJuIGNhdXNlICE9IDA7CiB9CiAKQEAgLTE5MjQsNiArMjA0NywyMiBAQAogCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfSU5UX0NBVVNFMCk7CS8qIGZsdXNoICovCiB9CiAKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpZHgpOworCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCSAgICAgWEdNX0VYVFJBX0lOVFJfTUFTSyk7Cit9CisKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgaWR4KTsKKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9YR01fSU5UX0RJU0FCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJICAgICAweDdmZik7Cit9CisKIC8qKgogICoJdDNfcG9ydF9pbnRyX2VuYWJsZSAtIGVuYWJsZSBwb3J0LXNwZWNpZmljIGludGVycnVwdHMKICAqCUBhZGFwdGVyOiBhc3NvY2lhdGVkIGFkYXB0ZXIKQEAgLTM2MTcsNyArMzc1NiwxNSBAQAogCWFkYXB0ZXItPnBhcmFtcy5pbmZvID0gYWk7CiAJYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9IGFpLT5ucG9ydHM7CiAJYWRhcHRlci0+cGFyYW1zLnJldiA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfUkVWKTsKLQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMDsKKwkvKgorCSAqIFdlIHVzZWQgdG8gb25seSBydW4gdGhlICJhZGFwdGVyIGNoZWNrIHRhc2siIG9uY2UgYSBzZWNvbmQgaWYKKwkgKiB3ZSBoYWQgUEhZcyB3aGljaCBkaWRuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHRzICh3ZSB3b3VsZCBjaGVjaworCSAqIHRoZWlyIGxpbmsgc3RhdHVzIG9uY2UgYSBzZWNvbmQpLiAgTm93IHdlIGNoZWNrIG90aGVyIGNvbmRpdGlvbnMKKwkgKiBpbiB0aGF0IHJvdXRpbmUgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgaW1wb3NlIGEgdmVyeSBoaWdoCisJICogaW50ZXJydXB0IGxvYWQgb24gdGhlIHN5c3RlbS4gIEFzIHN1Y2gsIHdlIG5vdyBhbHdheXMgc2NhbiB0aGUKKwkgKiBhZGFwdGVyIHN0YXRlIG9uY2UgYSBzZWNvbmQgLi4uCisJICovCisJYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDEwOwogCWFkYXB0ZXItPnBhcmFtcy5zdGF0c191cGRhdGVfcGVyaW9kID0gaXNfMTBHKGFkYXB0ZXIpID8KIAkgICAgTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgOiAoTUFDX1NUQVRTX0FDQ1VNX1NFQ1MgKiAxMCk7CiAJYWRhcHRlci0+cGFyYW1zLnBjaS52cGRfY2FwX2FkZHIgPQpAQCAtMzcwNyw3ICszODU0LDE0IEBACiAJCSAgICAgICBFVEhfQUxFTik7CiAJCWluaXRfbGlua19jb25maWcoJnAtPmxpbmtfY29uZmlnLCBwLT5waHkuY2Fwcyk7CiAJCXAtPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnAtPnBoeSwgMSk7Ci0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkpCisKKwkJLyoKKwkJICogSWYgdGhlIFBIWSBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0cyBmb3IgbGluayBzdGF0dXMKKwkJICogY2hhbmdlcywgc2NoZWR1bGUgYSBzY2FuIG9mIHRoZSBhZGFwdGVyIGxpbmtzIGF0IGxlYXN0CisJCSAqIG9uY2UgYSBzZWNvbmQuCisJCSAqLworCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpICYmCisJCSAgICBhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID4gMTApCiAJCQlhZGFwdGVyLT5wYXJhbXMubGlua3BvbGxfcGVyaW9kID0gMTA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKaW5kZXggYjFiMjVjMy4uN2JmOTYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjZGVmaW5lIERSVl9ERVNDICJDaGVsc2lvIFQzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYjMiCiAvKiBEcml2ZXIgdmVyc2lvbiAqLwotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjEta28iCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEuMi1rbyIKIAogLyogRmlybXdhcmUgdmVyc2lvbiAqLwogI2RlZmluZSBGV19WRVJTSU9OX01BSk9SIDcKLSNkZWZpbmUgRldfVkVSU0lPTl9NSU5PUiAwCisjZGVmaW5lIEZXX1ZFUlNJT05fTUlOT1IgMQogI2RlZmluZSBGV19WRVJTSU9OX01JQ1JPIDAKICNlbmRpZgkJCQkvKiBfX0NIRUxTSU9fVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCA5ZDc3ODY5Li5mODdmOTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogc3RhdGljIGludCB0M2IyX21hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwotCXVuc2lnbmVkIGludCBvZnQgPSBtYWMtPm9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQsIHN0b3JlOworCWludCBpZHggPSBtYWNpZHgobWFjKTsKIAl1MzIgdmFsOwogCiAJaWYgKCFtYWNpZHgobWFjKSkKQEAgLTE1OCwxNCArMTU5LDI4IEBACiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9QT1JUMUFDVElWRSwgMCk7CiAKKwkvKiBTdG9wIE5JQyB0cmFmZmljIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFRYVE9HR0xFUyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDApOworCS8qIEVuc3VyZSBUWCBkcmFpbnMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1RYX0NGRyArIG9mdCwgRl9UWFBBVVNFRU4sIDApOworCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX1JFU0VUX0NUUkwgKyBvZnQsIEZfTUFDX1JFU0VUXyk7CiAJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUkVTRVRfQ1RSTCArIG9mdCk7ICAgIC8qIGZsdXNoICovCiAKKwkvKiBTdG9yZSBBX1RQX1RYX0RST1BfQ0ZHX0NIMCAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJc3RvcmUgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisKIAltc2xlZXAoMTApOwogCisJLyogQ2hhbmdlIERST1BfQ0ZHIHRvIDB4YzAwMDAwMTEgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLCAweGMwMDAwMDExKTsKKwogCS8qIENoZWNrIGZvciB4Z20gUnggZmlmbyBlbXB0eSAqLworCS8qIEluY3JlYXNlZCBsb29wIGNvdW50IHRvIDEwMDAgZnJvbSA1IGNvdmVyIDFHIGFuZCAxMDBNYnBzIGNhc2UgKi8KIAlpZiAodDNfd2FpdF9vcF9kb25lKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRV9FUlJfQ05UICsgb2Z0LAotCQkJICAgIDB4ODAwMDAwMDAsIDEsIDUsIDIpKSB7CisJCQkgICAgMHg4MDAwMDAwMCwgMSwgMTAwMCwgMikpIHsKIAkJQ0hfRVJSKGFkYXAsICJNQUMgJWQgUnggZmlmbyBkcmFpbiBmYWlsZWRcbiIsCiAJCSAgICAgICBtYWNpZHgobWFjKSk7CiAJCXJldHVybiAtMTsKQEAgLTE5MSwxMSArMjA2LDIxIEBACiAJCSAgICAgRl9ESVNQQVVTRUZSQU1FUyB8IEZfRU4xNTM2QkZSQU1FUyB8CiAJCSAgICAgRl9STUZDUyB8IEZfRU5KVU1CTyB8IEZfRU5IQVNITUNBU1QpOwogCi0JaWYgKCFtYWNpZHgobWFjKSkKKwkvKiBSZXN0b3JlIHRoZSBEUk9QX0NGRyAqLworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19BRERSLCBBX1RQX1RYX0RST1BfQ0ZHX0NIMCArIGlkeCk7CisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0RBVEEsIHN0b3JlKTsKKworCWlmICghaWR4KQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMEFDVElWRSk7CiAJZWxzZQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgMCwgRl9QT1JUMUFDVElWRSk7CiAKKwkvKiByZS1lbmFibGUgbmljIHRyYWZmaWMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAxKTsKKworCS8qICBTZXQ6IHJlLWVuYWJsZSBOSUMgdHJhZmZpYyAqLworCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9NUFNfQ0ZHLCBGX0VORk9SQ0VQS1QsIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNiw3ICsyNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKQogewogCXVuc2lnbmVkIGludCBpLCByZWcgPSBtYWMtPm9mZnNldCArIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xOwogCkBAIC0yNDcsNyArMjcyLDcgQEAKIAl0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0VYQUNUX01BVENIX0xPV18xKTsJLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKK3ZvaWQgdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlZyA9IG1hYy0+b2Zmc2V0ICsgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfSElHSF8xOwogCkBAIC0zMzIsMTggKzM1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwgbXR1KTsKIAotCS8qCi0JICogQWRqdXN0IHRoZSBQQVVTRSBmcmFtZSB3YXRlcm1hcmtzLiAgV2UgYWx3YXlzIHNldCB0aGUgTFdNLCBhbmQgdGhlCi0JICogSFdNIG9ubHkgaWYgZmxvdy1jb250cm9sIGlzIGVuYWJsZWQuCi0JICovCi0JaHdtID0gbWF4X3QodW5zaWduZWQgaW50LCBNQUNfUlhGSUZPX1NJWkUgLSAzICogbXR1LAotCQkgICAgTUFDX1JYRklGT19TSVpFICogMzggLyAxMDApOwotCWh3bSA9IG1pbihod20sIE1BQ19SWEZJRk9fU0laRSAtIDgxOTIpOwotCWx3bSA9IG1pbigzICogKGludCltdHUsIE1BQ19SWEZJRk9fU0laRSAvIDQpOwotCiAJaWYgKGFkYXAtPnBhcmFtcy5yZXYgPj0gVDNfUkVWX0IyICYmCiAJICAgICh0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQpICYgRl9SWEVOKSkgewotCQlkaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJdDNfbWFjX2Rpc2FibGVfZXhhY3RfZmlsdGVycyhtYWMpOwogCQl2ID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQpOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0LAogCQkJCSBGX0VOSEFTSE1DQVNUIHwgRl9DT1BZQUxMRlJBTUVTLCBGX0RJU0JDQVNUKTsKQEAgLTM1NSwxNCArMzcxLDE0IEBACiAJCWlmICh0M193YWl0X29wX2RvbmUoYWRhcCwgcmVnICsgbWFjLT5vZmZzZXQsCiAJCQkJICAgIEZfUlhGSUZPX0VNUFRZLCAxLCAyMCwgNSkpIHsKIAkJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBtYWMtPm9mZnNldCwgdik7Ci0JCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQkJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfWEdNX1JYX01BWF9QS1RfU0laRSArIG1hYy0+b2Zmc2V0LAogCQkJCSBWX1JYTUFYUEtUU0laRShNX1JYTUFYUEtUU0laRSksCiAJCQkJIFZfUlhNQVhQS1RTSVpFKG10dSkpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQsIHYpOwotCQllbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOworCQl0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKIAl9IGVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwKIAkJCQkgVl9SWE1BWFBLVFNJWkUoTV9SWE1BWFBLVFNJWkUpLApAQCAtNDUyLDkgKzQ2OCwxMiBAQAogCiAJaWYgKHdoaWNoICYgTUFDX0RJUkVDVElPTl9UWCkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOwotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwgMHhjMGVkZTQwMSk7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLAorCQkJICAgICBhZGFwLT5wYXJhbXMucmV2ID09IFQzX1JFVl9DID8KKwkJCSAgICAgMHhjNGZmZmYwMSA6IDB4YzBlZGU0MDEpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX01PREUpOwotCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVFBfUElPX0RBVEEsIDEgPDwgaWR4LCAxIDw8IGlkeCk7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9UUF9QSU9fREFUQSwgMSA8PCBpZHgsCisJCQkJIGFkYXAtPnBhcmFtcy5yZXYgPT0gVDNfUkVWX0MgPyAwIDogMSA8PCBpZHgpOwogCiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgb2Z0LCBGX1RYRU4pOwogCkBAIC01MTAsMTUgKzUyOSwxMiBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwID0gbWFjLT5hZGFwdGVyOwogCXN0cnVjdCBtYWNfc3RhdHMgKnMgPSAmbWFjLT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgdHhfdGNudCwgdHhfeGNudDsKLQl1bnNpZ25lZCBpbnQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgcnhfeGNudDsKKwl1NjQgdHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gMDsKIAl0eF94Y250ID0gMTsJCS8qIEJ5IGRlZmF1bHQgdHhfeGNudCBpcyBtYWtpbmcgcHJvZ3Jlc3MgKi8KIAl0eF90Y250ID0gbWFjLT50eF90Y250OwkvKiBJZiB0eF9tY250IGlzIHByb2dyZXNzaW5nIGlnbm9yZSB0eF90Y250ICovCi0JcnhfeGNudCA9IDE7CQkvKiBCeSBkZWZhdWx0IHJ4X3hjbnQgaXMgbWFraW5nIHByb2dyZXNzICovCiAJaWYgKHR4X21jbnQgPT0gbWFjLT50eF9tY250ICYmIG1hYy0+cnhfcGF1c2UgPT0gcy0+cnhfcGF1c2UpIHsKIAkJdHhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAogCQkJCQkJQV9YR01fVFhfU1BJNF9TT1BfRU9QX0NOVCArCkBAIC01MjksMTEgKzU0NSwxMSBAQAogCQkJdHhfdGNudCA9IChHX1RYRFJPUENOVENIMFJDVkQodDNfcmVhZF9yZWcoYWRhcCwKIAkJCQkJCSAgICAgIEFfVFBfUElPX0RBVEEpKSk7CiAJCX0gZWxzZSB7Ci0JCQlnb3RvIHJ4Y2hlY2s7CisJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CiAJCW1hYy0+dG9nZ2xlX2NudCA9IDA7Ci0JCWdvdG8gcnhjaGVjazsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCh0eF90Y250ICE9IG1hYy0+dHhfdGNudCkgJiYgKG1hYy0+dHhfeGNudCA9PSAwKSkgewpAQCAtNTQ2LDIzICs1NjIsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJbWFjLT50b2dnbGVfY250ID0gMDsKLQkJZ290byByeGNoZWNrOwotCX0KLQotcnhjaGVjazoKLQlpZiAocnhfbWNudCAhPSBtYWMtPnJ4X21jbnQpIHsKLQkJcnhfeGNudCA9IChHX1RYU1BJNFNPUENOVCh0M19yZWFkX3JlZyhhZGFwLAotCQkJCQkJQV9YR01fUlhfU1BJNF9TT1BfRU9QX0NOVCArCi0JCQkJCQltYWMtPm9mZnNldCkpKSArCi0JCQkJCQkocy0+cnhfZmlmb19vdmZsIC0KLQkJCQkJCSBtYWMtPnJ4X29jbnQpOwotCQltYWMtPnJ4X29jbnQgPSBzLT5yeF9maWZvX292Zmw7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0JaWYgKG1hYy0+cnhfbWNudCAhPSBzLT5yeF9mcmFtZXMgJiYgcnhfeGNudCA9PSAwICYmCi0JICAgIG1hYy0+cnhfeGNudCA9PSAwKSB7Ci0JCXN0YXR1cyA9IDI7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTcwLDggKzU2OSw2IEBACiAJbWFjLT50eF90Y250ID0gdHhfdGNudDsKIAltYWMtPnR4X3hjbnQgPSB0eF94Y250OwogCW1hYy0+dHhfbWNudCA9IHMtPnR4X2ZyYW1lczsKLQltYWMtPnJ4X3hjbnQgPSByeF94Y250OwotCW1hYy0+cnhfbWNudCA9IHMtPnJ4X2ZyYW1lczsKIAltYWMtPnJ4X3BhdXNlID0gcy0+cnhfcGF1c2U7CiAJaWYgKHN0YXR1cyA9PSAxKSB7CiAJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9UWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggN2NlMzA1My4uODYxYzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCQlwcmludGsodmVyc2lvbik7CiAKIAlpZiAoYmRldikKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBiZGV2LT5idXNfaWQpOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIGRldl9uYW1lKGJkZXYpKTsKIAllbHNlIHsKIAkJaSA9IDA7CiAJCWRldiA9IHJvb3RfbGFuY2VfZGV2OwpAQCAtMTEwNSwxMCArMTEwNSwxMCBAQAogCiAJCXN0YXJ0ID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5zdGFydDsKIAkJbGVuID0gdG9fdGNfZGV2KGJkZXYpLT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGJkZXYtPmJ1c19pZCkpIHsKKwkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoYmRldikpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiJXM6IFVuYWJsZSB0byByZXNlcnZlIE1NSU8gcmVzb3VyY2VcbiIsCi0JCQkgICAgICAgYmRldi0+YnVzX2lkKTsKKwkJCSAgICAgICBkZXZfbmFtZShiZGV2KSk7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIGVycl9vdXRfZGV2OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA2NDQ1Y2VkZC4uNGVjMDU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0yOTM3LDcgKzI5MzcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAoaW50KShicC0+cmN2X2J1ZnNfdG9fcG9zdCk7IGkrKykKIAkJZm9yIChqID0gMDsgKGkgKyBqKSA8IChpbnQpUElfUkNWX0RBVEFfS19OVU1fRU5UUklFUzsgaiArPSBicC0+cmN2X2J1ZnNfdG9fcG9zdCkKIAkJewotCQkJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYiA9IF9fZGV2X2FsbG9jX3NrYihORVdfU0tCX1NJWkUsIEdGUF9OT0lPKTsKKwkJCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBfX25ldGRldl9hbGxvY19za2IoYnAtPmRldiwgTkVXX1NLQl9TSVpFLCBHRlBfTk9JTyk7CiAJCQlpZiAoIW5ld3NrYikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWJwLT5kZXNjcl9ibG9ja192aXJ0LT5yY3ZfZGF0YVtpK2pdLmxvbmdfMCA9ICh1MzIpIChQSV9SQ1ZfREVTQ1JfTV9TT1AgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggZTRjZWY0OS4uNTU2MjVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC02MDYsOCArNjA2LDggQEAKIAlpZiAoIW1lbV9zdGFydCB8fCBscC0+YWRhcHRlciA8IERFUENBIHx8IGxwLT5hZGFwdGVyID49dW5rbm93bikKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXByaW50ayAoIiVzOiAlcyBhdCAweCUwNGx4IiwKLQkgICAgICAgIGRldmljZS0+YnVzX2lkLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOworCXByaW50aygiJXM6ICVzIGF0IDB4JTA0bHgiLAorCSAgICAgICBkZXZfbmFtZShkZXZpY2UpLCBkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBpb2FkZHIpOwogCiAJc3dpdGNoIChscC0+ZGVwY2FfYnVzKSB7CiAjaWZkZWYgQ09ORklHX01DQQpAQCAtNjY5LDcgKzY2OSw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwogCXNwcmludGYobHAtPmFkYXB0ZXJfbmFtZSwgIiVzICglcykiLAotCQlkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBkZXZpY2UtPmJ1c19pZCk7CisJCWRlcGNhX3NpZ25hdHVyZVtscC0+YWRhcHRlcl0sIGRldl9uYW1lKGRldmljZSkpOwogCXN0YXR1cyA9IC1FQlVTWTsKIAogCS8qIEluaXRpYWxpc2F0aW9uIEJsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKaW5kZXggMWI0MDYzMi4uZGIxZTMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtOSw2ICs5LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIxLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSAiZG5ldC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggODZiYjg3Ni4uMDUwNGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlMTAwIgogI2RlZmluZSBEUlZfRVhUCQkJIi1OQVBJIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjMuNS4yMy1rNiJEUlZfRVhUCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjI0LWsyIkRSVl9FWFQKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiSW50ZWwoUikgUFJPLzEwMCBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKQEAgLTI0MCw2ICsyNDAsNyBAQAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTMsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTQsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTUsIDcpLAorCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwZmUsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMDksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMjksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDI0NDksIDIpLApAQCAtMjc1LDYgKzI3Niw3IEBACiAJcGh5XzgyNTYyX2VtID0gMHgwMzIwMDJBOCwKIAlwaHlfODI1NjJfZWsgPSAweDAzMTAwMkE4LAogCXBoeV84MjU2Ml9laCA9IDB4MDE3MDAyQTgsCisJcGh5XzgyNTUyX3YgID0gMHhkMDYxMDA0ZCwKIAlwaHlfdW5rbm93biAgPSAweEZGRkZGRkZGLAogfTsKIApAQCAtOTQzLDYgKzk0NSwyMiBAQAogCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLCBpbnQgZGF0YSkKIHsKKwlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgICgobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpICYmIChyZWcgPT0gTUlJX0JNQ1IpICYmCisJICAgICAoZGF0YSAmIChCTUNSX0FOUkVTVEFSVCB8IEJNQ1JfQU5FTkFCTEUpKSkgeworCQl1MTYgYWR2ZXJ0ID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKworCQkvKgorCQkgKiBXb3JrYXJvdW5kIFNpIGlzc3VlIHdoZXJlIHNvbWV0aW1lcyB0aGUgcGFydCB3aWxsIG5vdAorCQkgKiBhdXRvbmVnIHRvIDEwME1icHMgZXZlbiB3aGVuIGFkdmVydGlzZWQuCisJCSAqLworCQlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCQlkYXRhIHw9IEJNQ1JfU1BFRUQxMDAgfCBCTUNSX0ZVTExEUExYOworCQllbHNlIGlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwSEFMRikKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMDsKKwl9CisKIAltZGlvX2N0cmwobmV0ZGV2X3ByaXYobmV0ZGV2KSwgYWRkciwgbWRpX3dyaXRlLCByZWcsIGRhdGEpOwogfQogCkBAIC0xMjc2LDE2ICsxMjk0LDEyIEBACiAJaWYgKGFkZHIgPT0gMzIpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogU2VsZWN0ZWQgdGhlIHBoeSBhbmQgaXNvbGF0ZSB0aGUgcmVzdCAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7Ci0JCWlmIChhZGRyICE9IG5pYy0+bWlpLnBoeV9pZCkgewotCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwotCQl9IGVsc2UgewotCQkJYm1jciA9IG1kaW9fcmVhZChuZXRkZXYsIGFkZHIsIE1JSV9CTUNSKTsKLQkJCW1kaW9fd3JpdGUobmV0ZGV2LCBhZGRyLCBNSUlfQk1DUiwKLQkJCQlibWNyICYgfkJNQ1JfSVNPTEFURSk7Ci0JCX0KLQl9CisJLyogSXNvbGF0ZSBhbGwgdGhlIFBIWSBpZHMgKi8KKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykKKwkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOworCS8qIFNlbGVjdCB0aGUgZGlzY292ZXJlZCBQSFkgKi8KKwlibWNyICY9IH5CTUNSX0lTT0xBVEU7CisJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwogCiAJLyogR2V0IHBoeSBJRCAqLwogCWlkX2xvID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfUEhZU0lEMSk7CkBAIC0xMzAzLDcgKzEzMTcsMTggQEAKIAkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX05TQ19DT05HLCBjb25nKTsKIAl9CiAKLQlpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBhZHZlcnQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOworCisJCS8qIFdvcmthcm91bmQgU2kgbm90IGFkdmVydGlzaW5nIGZsb3ctY29udHJvbCBkdXJpbmcgYXV0b25lZyAqLworCQlhZHZlcnQgfD0gQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBhZHZlcnQpOworCisJCS8qIFJlc2V0IGZvciB0aGUgYWJvdmUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCAqLworCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUik7CisJCWJtY3IgfD0gQk1DUl9SRVNFVDsKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOworCX0gZWxzZSBpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCiAJICAgKG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX1RQSVNUQVRVUykgJiAweDgwMDApICYmCiAJCSEobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKIAkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLiAqLwpAQCAtMTk0NCw5ICsxOTY5LDkgQEAKIAlpZiAoc3RhdF9hY2sgJiBzdGF0X2Fja19ybnIpCiAJCW5pYy0+cnVfcnVubmluZyA9IFJVX1NVU1BFTkRFRDsKIAotCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKIAkJZTEwMF9kaXNhYmxlX2lycShuaWMpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZuaWMtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJm5pYy0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTk2Miw3ICsxOTg3LDcgQEAKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWUxMDBfZW5hYmxlX2lycShuaWMpOwogCX0KIApAQCAtMjEzNCw2ICsyMTU5LDkgQEAKIH0KIAogI2RlZmluZSBNSUlfTEVEX0NPTlRST0wJMHgxQgorI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERSAweDE5CisjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09OICAgICAgIDB4MDAwRiAvKiBMRURUWCBhbmQgTEVEX1JYIGJvdGggb24gKi8KKyNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT0ZGICAgICAgMHgwMDBBIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvZmYgKi8KIHN0YXRpYyB2b2lkIGUxMDBfYmxpbmtfbGVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSAoc3RydWN0IG5pYyAqKWRhdGE7CkBAIC0yMTQzLDEwICsyMTcxLDE5IEBACiAJCWxlZF9vbl81NTkgPSAweDA1LAogCQlsZWRfb25fNTU3ID0gMHgwNywKIAl9OworCXUxNiBsZWRfcmVnID0gTUlJX0xFRF9DT05UUk9MOwogCi0JbmljLT5sZWRzID0gKG5pYy0+bGVkcyAmIGxlZF9vbikgPyBsZWRfb2ZmIDoKLQkJKG5pYy0+bWFjIDwgbWFjXzgyNTU5X0QxMDFNKSA/IGxlZF9vbl81NTcgOiBsZWRfb25fNTU5OwotCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCBuaWMtPmxlZHMpOworCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgeworCQlsZWRfcmVnID0gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREU7CisKKwkJbmljLT5sZWRzID0gKG5pYy0+bGVkcyA9PSBFMTAwXzgyNTUyX0xFRF9PTikgPworCQkgICAgICAgICAgICBFMTAwXzgyNTUyX0xFRF9PRkYgOiBFMTAwXzgyNTUyX0xFRF9PTjsKKwl9IGVsc2UgeworCQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgorCQkgICAgICAgICAgICAobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6CisJCSAgICAgICAgICAgIGxlZF9vbl81NTk7CisJfQorCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgbmljLT5sZWRzKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOwogfQogCkBAIC0yMzc1LDEzICsyNDEyLDE1IEBACiBzdGF0aWMgaW50IGUxMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiBsZWRfcmVnID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDoKKwkgICAgICAgICAgICAgIE1JSV9MRURfQ09OVFJPTDsKIAogCWlmICghZGF0YSB8fCBkYXRhID4gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCiAJCWRhdGEgPSAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKIAlkZWxfdGltZXJfc3luYygmbmljLT5ibGlua190aW1lcik7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCAwKTsKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY4Niw2ICsyNzI1LDkgQEAKIAl9CiB9CiAKKyNkZWZpbmUgRTEwMF84MjU1Ml9TTUFSVFNQRUVEICAgMHgxNCAgIC8qIFNtYXJ0U3BlZWQgQ3RybCByZWdpc3RlciAqLworI2RlZmluZSBFMTAwXzgyNTUyX1JFVl9BTkVHICAgICAweDAyMDAgLyogUmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisjZGVmaW5lIEUxMDBfODI1NTJfQU5FR19OT1cgICAgIDB4MDQwMCAvKiBBdXRvLW5lZ290aWF0ZSBub3cgKi8KIHN0YXRpYyBpbnQgZTEwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTI2OTgsNiArMjc0MCwxNSBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJaWYgKChuaWMtPmZsYWdzICYgd29sX21hZ2ljKSB8IGUxMDBfYXNmKG5pYykpIHsKKwkJLyogZW5hYmxlIHJldmVyc2UgYXV0by1uZWdvdGlhdGlvbiAqLworCQlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVEKTsKKworCQkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELCBzbWFydHNwZWVkIHwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9SRVZfQU5FRyB8IEUxMDBfODI1NTJfQU5FR19OT1cpOworCQl9CiAJCWlmIChwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgdHJ1ZSkpCiAJCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCB0cnVlKTsKIAl9IGVsc2UgewpAQCAtMjcyMSw2ICsyNzcyLDE2IEBACiAJLyogYWNrIGFueSBwZW5kaW5nIHdha2UgZXZlbnRzLCBkaXNhYmxlIFBNRSAqLwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCAwLCAwKTsKIAorCS8qIGRpc2JhbGUgcmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQpOworCisJCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELAorCQkgICAgICAgICAgIHNtYXJ0c3BlZWQgJiB+KEUxMDBfODI1NTJfUkVWX0FORUcpKTsKKwl9CisKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMF91cChuaWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggZjU1ODFkZS4uZTlhNDE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0xODIsNyArMTgyLDYgQEAKIAkvKiBhcnJheSBvZiBidWZmZXIgaW5mb3JtYXRpb24gc3RydWN0cyAqLwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCi0Jc3BpbmxvY2tfdCB0eF9sb2NrOwogCXUxNiB0ZGg7CiAJdTE2IHRkdDsKIAlib29sIGxhc3RfdHhfdHNvOwpAQCAtMjM4LDcgKzIzNyw2IEBACiAJdTE2IGxpbmtfc3BlZWQ7CiAJdTE2IGxpbmtfZHVwbGV4OwogCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKLQlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA2YmQ2M2NjLi45M2I4NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC01NzcsMTIgKzU3NywzMCBAQAogCiB2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiByY3RsLCB0Y3RsOwogCiAJLyogc2lnbmFsIHRoYXQgd2UncmUgZG93biBzbyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBub3QKIAkgKiByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0aW1lciAqLwogCXNldF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCisJLyogZGlzYWJsZSByZWNlaXZlcyBpbiB0aGUgaGFyZHdhcmUgKi8KKwlyY3RsID0gZXIzMihSQ1RMKTsKKwlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJLyogZmx1c2ggYW5kIHNsZWVwIGJlbG93ICovCisKKwkvKiBjYW4gYmUgbmV0aWZfdHhfZGlzYWJsZSB3aGVuIE5FVElGX0ZfTExUWCBpcyByZW1vdmVkICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlICovCisJdGN0bCA9IGVyMzIoVENUTCk7CisJdGN0bCAmPSB+RTEwMDBfVENUTF9FTjsKKwlldzMyKFRDVEwsIHRjdGwpOworCS8qIGZsdXNoIGJvdGggZGlzYWJsZXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoICovCisJRTEwMDBfV1JJVEVfRkxVU0goKTsKKwltc2xlZXAoMTApOworCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtNTk1LDcgKzYxMyw2IEBACiAJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CiAJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAJZTEwMDBfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwpAQCAtMTA0OCw4ICsxMDY1LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CkBAIC0xMzY4LDggKzEzODMsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0KIAkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNpbmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMTYyNCw3ICsxNjM3LDYgQEAKIAogCXR4ZHItPm5leHRfdG9fdXNlID0gMDsKIAl0eGRyLT5uZXh0X3RvX2NsZWFuID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmdHhkci0+dHhfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODIsOCArMTg5NCw2IEBACiAgKiBlMTAwMF9zZXR1cF9yY3RsIC0gY29uZmlndXJlIHRoZSByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiBAYWRhcHRlcjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0JCQkoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCiBzdGF0aWMgdm9pZCBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yMDU2LDE3ICsyMDY2LDE0IEBACiBzdGF0aWMgdm9pZCBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICBzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yODY1LDExICsyODcyLDExIEBACiAJCXJldHVybiBmYWxzZTsKIAogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQljbWRfbGVuIHw9IEUxMDAwX1RYRF9DTURfVENQOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJLyogWFhYIG5vdCBoYW5kbGluZyBhbGwgSVBWNiBoZWFkZXJzICovCiAJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKQEAgLTI5MTUsMTMgKzI5MjIsMjEgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOworCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgZjsKLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisJb2Zmc2V0ID0gMDsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBtYXhfcGVyX3R4ZCk7CkBAIC0yOTU2LDE4ICsyOTcxLDE4IEBACiAJCQlzaXplIC09IDQ7CiAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKLQkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCi0JCQkJc2l6ZSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0yOTc1LDkgKzI5OTAsMTMgQEAKIAogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCQkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKQEAgLTI5OTMsMjMgKzMwMTIsMTYgQEAKIAkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCX0KIAl9CiAKLQlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0zMTg1LDcgKzMxOTcsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbXNzOwogCWludCBjb3VudCA9IDA7CkBAIC0zMjkwLDIyICszMzAxLDE1IEBACiAJICAgIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpKQogCQllMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oYWRhcHRlciwgc2tiKTsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKSkKLQkJLyogQ29sbGlzaW9uIC0gdGVsbCB1cHBlciBsYXllciB0byByZXF1ZXVlICovCi0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotCiAJLyogbmVlZDogY291bnQgKyAyIGRlc2MgZ2FwIHRvIGtlZXAgdGFpbCBmcm9tIHRvdWNoaW5nCiAJICogaGVhZCwgb3RoZXJ3aXNlIHRyeSBuZXh0IHRpbWUgKi8KLQlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKIAkJaWYgKHVubGlrZWx5KGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChhZGFwdGVyLCBza2IpKSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyLCBqaWZmaWVzICsgMSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJCX0KIAl9CkBAIC0zMzIwLDcgKzMzMjQsNiBAQAogCXRzbyA9IGUxMDAwX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IpOwogCWlmICh0c28gPCAwKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKQEAgLTMzMzYsMTYgKzMzMzksMjEgQEAKIAlpZiAobGlrZWx5KHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAotCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCSAgICAgICAgICAgICAgIGUxMDAwX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVyX3R4ZCwgbnJfZnJhZ3MsIG1zcykpOworCWNvdW50ID0gZTEwMDBfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QsIG1heF9wZXJfdHhkLAorCSAgICAgICAgICAgICAgICAgICAgIG5yX2ZyYWdzLCBtc3MpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBNQVhfU0tCX0ZSQUdTICsgMik7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTM2ODcsMTIgKzM2OTUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSkgeworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfSBlbHNlCiAJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAKQEAgLTM3NDcsMTYgKzM3NTUsMTggQEAKIAkJZXczMihJTUMsIH4wKTsKIAkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAl9Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpKSB7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwotCX0gZWxzZQorCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCX0gZWxzZSB7CiAJCS8qIHRoaXMgcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuISBpZiBpdCBkb2VzIGl0IGlzIGJhc2ljYWxseSBhCiAJCSAqIGJ1ZywgYnV0IG5vdCBhIGhhcmQgZXJyb3IsIHNvIGVuYWJsZSBpbnRzIGFuZCBjb250aW51ZSAqLwotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzc3MywyOCArMzc4MywyMSBAQAogCiAJYWRhcHRlciA9IG5ldGRldl9wcml2KHBvbGxfZGV2KTsKIAotCS8qIGUxMDAwX2NsZWFuIGlzIGNhbGxlZCBwZXItY3B1LiAgVGhpcyBsb2NrIHByb3RlY3RzCi0JICogdHhfcmluZ1swXSBmcm9tIGJlaW5nIGNsZWFuZWQgYnkgbXVsdGlwbGUgY3B1cwotCSAqIHNpbXVsdGFuZW91c2x5LiAgQSBmYWlsdXJlIG9idGFpbmluZyB0aGUgbG9jayBtZWFucwotCSAqIHR4X3JpbmdbMF0gaXMgY3VycmVudGx5IGJlaW5nIGNsZWFuZWQgYW55d2F5LiAqLwotCWlmIChzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spKSB7Ci0JCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwKLQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nWzBdKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCX0KKwl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nWzBdKTsKIAogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nWzBdLAogCSAgICAgICAgICAgICAgICAgICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGxpa2VseShhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpKQogCQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzgxMywxNSArMzgxNiwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwlib29sIGNsZWFuZWQ7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzPTAsIHRvdGFsX3R4X3BhY2tldHM9MDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgKSB7CisJd2hpbGUgKChlb3BfZGVzYy0+dXBwZXIuZGF0YSAmIGNwdV90b19sZTMyKEUxMDAwX1RYRF9TVEFUX0REKSkgJiYKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+Y291bnQpKSB7CisJCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKQEAgLTM4NDQsMTAgKzM4NDgsNiBAQAogCiAJCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgZW9wKTsKLSNkZWZpbmUgRTEwMDBfVFhfV0VJR0hUIDY0Ci0JCS8qIHdlaWdodCBvZiBhIHNvcnQgZm9yIHR4LCB0byBhdm9pZCBlbmRsZXNzIHRyYW5zbWl0IGNsZWFudXAgKi8KLQkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKQotCQkJYnJlYWs7CiAJfQogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CkBAIC0zODY5LDggKzM4NjksOCBAQAogCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgKwogCQkgICAgICAgICAgICAgICAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIApAQCAtMzg5Miw3ICszODkyLDcgQEAKIAkJCQlyZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCksCiAJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCiAJCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCwKIAkJCQllb3AsCiAJCQkJamlmZmllcywKIAkJCQllb3BfZGVzYy0+dXBwZXIuZmllbGRzLnN0YXR1cyk7CkBAIC0zOTAzLDcgKzM5MDMsNyBAQAogCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKLQlyZXR1cm4gY2xlYW5lZDsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggMDg5MDE2Mi4uNmMwMWEyMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC00MCw2ICs0MCw3IEBACiAgKiA4MjU3M0UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChDb3BwZXIpCiAgKiA4MjU3M0wgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCiAgKiA4MjU3NEwgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTgzViBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTYxLDYgKzYyLDcgQEAKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X3BoeV9pZF84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfY29wcGVyX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsCiAJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogc3RhdGljIHMzMiBlMTAwMF9maXhfbnZtX2NoZWNrc3VtXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtOTksNiArMTAxLDcgQEAKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfbTg4OwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXBoeS0+dHlwZQkJID0gZTEwMDBfcGh5X2JtOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTIxLDYgKzEyNCw3IEBACiAJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJaWYgKHBoeS0+aWQgIT0gQk1FMTAwMF9FX1BIWV9JRF9SMikKIAkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAkJYnJlYWs7CkBAIC0xNjQsNiArMTY4LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAoKChlZWNkID4+IDE1KSAmIDB4MykgPT0gMHgzKSB7CiAJCQludm0tPnR5cGUgPSBlMTAwMF9udm1fZmxhc2hfaHc7CiAJCQludm0tPndvcmRfc2l6ZSA9IDIwNDg7CkBAIC0yNTAsNyArMjU1LDcgQEAKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgogCQlmdW5jLT5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UgPQogCQkJZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzE7Ci0JCWZ1bmMtPmNoZWNrX2Zvcl9saW5rID0gZTEwMDBlX2NoZWNrX2Zvcl9zZXJkZXNfbGluazsKKwkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzE7CiAJCWZ1bmMtPmdldF9saW5rX3VwX2luZm8gPQogCQkJZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlczsKIAkJYnJlYWs7CkBAIC0yNjEsNiArMjY2LDcgQEAKIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwX2NoZWNrX21uZ19tb2RlXzgyNTc0OwogCQlmdW5jLT5sZWRfb24gPSBlMTAwMF9sZWRfb25fODI1NzQ7CiAJCWJyZWFrOwpAQCAtMzc0LDYgKzM4MCw3IEBACiAJCXJldHVybiBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKQEAgLTQ2Myw4ICs0NzAsMTUgQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTczICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXRfdmFsID0gZTEwMDBlX2FjcXVpcmVfbnZtKGh3KTsKKwkJYnJlYWs7CisJfQogCiAJaWYgKHJldF92YWwpCiAJCWUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzEoaHcpOwpAQCAtNTA0LDYgKzUxOCw3IEBACiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKGh3LCBvZmZzZXQsIHdvcmRzLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MToKQEAgLTc3OCw3ICs3OTMsMTAgQEAKIAkgKiBNdXN0IGFjcXVpcmUgdGhlIE1ESU8gb3duZXJzaGlwIGJlZm9yZSBNQUMgcmVzZXQuCiAJICogT3duZXJzaGlwIGRlZmF1bHRzIHRvIGZpcm13YXJlIGFmdGVyIGEgcmVzZXQuCiAJICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwogCQlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKIApAQCAtNzk0LDYgKzgxMiw5IEBACiAJCQltc2xlZXAoMik7CiAJCQlpKys7CiAJCX0gd2hpbGUgKGkgPCBNRElPX09XTkVSU0hJUF9USU1FT1VUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJY3RybCA9IGVyMzIoQ1RSTCk7CkBAIC04MTksOCArODQwLDE2IEBACiAJICogTmVlZCB0byB3YWl0IGZvciBQaHkgY29uZmlndXJhdGlvbiBjb21wbGV0aW9uIGJlZm9yZSBhY2Nlc3NpbmcKIAkgKiBOVk0gYW5kIFBoeS4KIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkKKworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCW1zbGVlcCgyNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBldmVudHMuICovCiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwpAQCAtODMwLDYgKzg1OSwxMCBAQAogCQlody0+ZGV2X3NwZWMuZTgyNTcxLmFsdF9tYWNfYWRkcl9pc19wcmVzZW50KQogCQkJZTEwMDBlX3NldF9sYWFfc3RhdGVfODI1NzEoaHcsIHRydWUpOwogCisJLyogUmVpbml0aWFsaXplIHRoZSA4MjU3MSBzZXJkZXMgbGluayBzdGF0ZSBtYWNoaW5lICovCisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJaHctPm1hYy5zZXJkZXNfbGlua19zdGF0ZSA9IGUxMDAwX3NlcmRlc19saW5rX2Rvd247CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg2LDE3ICs5MTksMjIgQEAKIAlldzMyKFRYRENUTCgwKSwgcmVnX2RhdGEpOwogCiAJLyogLi4uZm9yIGJvdGggcXVldWVzLiAqLwotCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzMgJiYgbWFjLT50eXBlICE9IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChtYWMtPnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJZTEwMDBlX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKGh3KTsKKwkJcmVnX2RhdGEgPSBlcjMyKEdDUik7CisJCXJlZ19kYXRhIHw9IEUxMDAwX0dDUl9MMV9BQ1RfV0lUSE9VVF9MMFNfUlg7CisJCWV3MzIoR0NSLCByZWdfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJlZ19kYXRhID0gZXIzMihUWERDVEwoMSkpOwogCQlyZWdfZGF0YSA9IChyZWdfZGF0YSAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfAogCQkJICAgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQiB8CiAJCQkgICBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKIAkJZXczMihUWERDVEwoMSksIHJlZ19kYXRhKTsKLQl9IGVsc2UgewotCQllMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOwotCQlyZWdfZGF0YSA9IGVyMzIoR0NSKTsKLQkJcmVnX2RhdGEgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKLQkJZXczMihHQ1IsIHJlZ19kYXRhKTsKKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTk2MSwxOCArOTk5LDMwIEBACiAJfQogCiAJLyogRGV2aWNlIENvbnRyb2wgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoQ1RSTCk7CiAJCXJlZyAmPSB+KDEgPDwgMjkpOwogCQlldzMyKENUUkwsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCS8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZWcgPSBlcjMyKENUUkxfRVhUKTsKIAkJcmVnICY9IH4oMSA8PCAyMyk7CiAJCXJlZyB8PSAoMSA8PCAyMik7CiAJCWV3MzIoQ1RSTF9FWFQsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHsKQEAgLTk4MCw5ICsxMDMwLDIzIEBACiAJCXJlZyB8PSBFMTAwMF9QQkFfRUNDX0NPUlJfRU47CiAJCWV3MzIoUEJBX0VDQywgcmVnKTsKIAl9CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBoYXJkd2FyZSBlcnJhdGEuCisJICogRW5zdXJlIHRoYXQgRE1BIER5bmFtaWMgQ2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkIG9uIDgyNTcxIGFuZCA4MjU3MgorCSAqLworCisgICAgICAgIGlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcxKSB8fAorICAgICAgICAgICAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcyKSkgeworICAgICAgICAgICAgICAgIHJlZyA9IGVyMzIoQ1RSTF9FWFQpOworICAgICAgICAgICAgICAgIHJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfRE1BX0RZTl9DTEtfRU47CisgICAgICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgcmVnKTsKKyAgICAgICAgfQorCiAKIAkvKiBQQ0ktRXggQ29udHJvbCBSZWdpc3RlcnMgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoR0NSKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihHQ1IsIHJlZyk7CkBAIC05OTAsNiArMTA1NCw5IEBACiAJCXJlZyA9IGVyMzIoR0NSMik7CiAJCXJlZyB8PSAxOwogCQlldzMyKEdDUjIsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXJldHVybjsKQEAgLTEwMDksNyArMTA3NiwxMCBAQAogCXUzMiB2ZnRhX29mZnNldCA9IDA7CiAJdTMyIHZmdGFfYml0X2luX3JlZyA9IDA7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmIChody0+bW5nX2Nvb2tpZS52bGFuX2lkICE9IDApIHsKIAkJCS8qCiAJCQkgKiBUaGUgVkZUQSBpcyBhIDQwOTZiIGJpdC1maWVsZCwgZWFjaCBpZGVudGlmeWluZwpAQCAtMTAyNCw2ICsxMDk0LDkgQEAKIAkJCXZmdGFfYml0X2luX3JlZyA9IDEgPDwgKGh3LT5tbmdfY29va2llLnZsYW5faWQgJgogCQkJCQkgICAgICAgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyk7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgRTEwMDBfVkxBTl9GSUxURVJfVEJMX1NJWkU7IG9mZnNldCsrKSB7CiAJCS8qCkBAIC0xMTIyLDkgKzExOTUsMTYgQEAKIAkgKiB0aGUgZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseQogCSAqIHNldCBpdCB0byBmdWxsLgogCSAqLwotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgJiYKLQkgICAgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2RlZmF1bHQpCi0JCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19kZWZhdWx0KQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIGUxMDAwZV9zZXR1cF9saW5rKGh3KTsKIH0KQEAgLTEyMDMsNiArMTI4MywxMzEgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfY2hlY2tfZm9yX3NlcmRlc19saW5rXzgyNTcxIC0gQ2hlY2sgZm9yIGxpbmsgKFNlcmRlcykKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBDaGVja3MgZm9yIGxpbmsgdXAgb24gdGhlIGhhcmR3YXJlLiAgSWYgbGluayBpcyBub3QgdXAgYW5kIHdlIGhhdmUKKyAqICBhIHNpZ25hbCwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGxpbmsgdXAuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2NoZWNrX2Zvcl9zZXJkZXNfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTMyIHJ4Y3c7CisJdTMyIGN0cmw7CisJdTMyIHN0YXR1czsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwljdHJsID0gZXIzMihDVFJMKTsKKwlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CisJcnhjdyA9IGVyMzIoUlhDVyk7CisKKwlpZiAoKHJ4Y3cgJiBFMTAwMF9SWENXX1NZTkNIKSAmJiAhKHJ4Y3cgJiBFMTAwMF9SWENXX0lWKSkgeworCisJCS8qIFJlY2VpdmVyIGlzIHN5bmNocm9uaXplZCB3aXRoIG5vIGludmFsaWQgYml0cy4gICovCisJCXN3aXRjaCAobWFjLT5zZXJkZXNfbGlua19zdGF0ZSkgeworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfY29tcGxldGU6CisJCQlpZiAoIShzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGxvc3QgbGluaywgcmV0cnkgYXV0b25lZyBiZWZvcmUKKwkJCQkgKiByZXBvcnRpbmcgbGluayBmYWlsdXJlCisJCQkJICovCisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiQU5fVVAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cDoKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIC9DLyBvcmRlcmVkIHNldHMsIHJlLWVuYWJsZQorCQkJICogYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciBhbmQgZGlzYWJsZQorCQkJICogZm9yY2VkIGxpbmsgaW4gdGhlIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGluIGFuCisJCQkgKiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsgcGFydG5lci4KKwkJCSAqLworCQkJaWYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpIHsKKwkJCQkvKiBFbmFibGUgYXV0b25lZywgYW5kIHVuZm9yY2UgbGluayB1cCAqLworCQkJCWV3MzIoVFhDVywgbWFjLT50eGN3KTsKKwkJCQlldzMyKENUUkwsCisJCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiRk9SQ0VEX1VQIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOgorCQkJLyoKKwkJCSAqIElmIHRoZSBMVSBiaXQgaXMgc2V0IGluIHRoZSBTVEFUVVMgcmVnaXN0ZXIsCisJCQkgKiBhdXRvbmVnIGhhcyBjb21wbGV0ZWQgc3VjZXNzZnVsbHkuIElmIG5vdCwKKwkJCSAqIHRyeSBmb3JpbmcgdGhlIGxpbmsgYmVjYXVzZSB0aGUgZmFyIGVuZCBtYXkgYmUKKwkJCSAqIGF2YWlsYWJsZSBidXQgbm90IGNhcGFibGUgb2YgYXV0b25lZ290aWF0aW9uLgorCQkJICovCisJCQlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKSAgeworCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlOworCQkJCWh3X2RiZyhodywgIkFOX1BST0cgICAtPiBBTl9VUFxuIik7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogRGlzYWJsZSBhdXRvbmVnLCBmb3JjZSBsaW5rIHVwIGFuZAorCQkJCSAqIGZ1bGwgZHVwbGV4LCBhbmQgY2hhbmdlIHN0YXRlIHRvIGZvcmNlZAorCQkJCSAqLworCQkJCWV3MzIoVFhDVywKKwkJCQkgICAgKG1hYy0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOworCQkJCWN0cmwgfD0gKEUxMDAwX0NUUkxfU0xVIHwgRTEwMDBfQ1RSTF9GRCk7CisJCQkJZXczMihDVFJMLCBjdHJsKTsKKworCQkJCS8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgYWZ0ZXIgbGluayB1cC4gKi8KKwkJCQlyZXRfdmFsID0KKwkJCQkgICAgZTEwMDBlX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKGh3KTsKKwkJCQlpZiAocmV0X3ZhbCkgeworCQkJCQlod19kYmcoaHcsICJFcnJvciBjb25maWcgZmxvdyBjb250cm9sXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19mb3JjZWRfdXA7CisJCQkJaHdfZGJnKGh3LCAiQU5fUFJPRyAgIC0+IEZPUkNFRF9VUFxuIik7CisJCQl9CisJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2Rvd246CisJCWRlZmF1bHQ6CisJCQkvKiBUaGUgbGluayB3YXMgZG93biBidXQgdGhlIHJlY2VpdmVyIGhhcyBub3cgZ2FpbmVkCisJCQkgKiB2YWxpZCBzeW5jLCBzbyBsZXRzIHNlZSBpZiB3ZSBjYW4gYnJpbmcgdGhlIGxpbmsKKwkJCSAqIHVwLiAqLworCQkJZXczMihUWENXLCBtYWMtPnR4Y3cpOworCQkJZXczMihDVFJMLAorCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0KKwkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOworCQkJaHdfZGJnKGh3LCAiRE9XTiAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShyeGN3ICYgRTEwMDBfUlhDV19TWU5DSCkpIHsKKwkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHN5bmMsIGFuZCBjYW4gdG9sZXJhdGUgb25lCisJCQkgKiBpbnZhbGlkIChJVikgY29kZXdvcmQgYmVmb3JlIGRlY2xhcmluZworCQkJICogbGluayBkb3duLCBzbyByZXJlYWQgdG8gbG9vayBhZ2FpbgorCQkJICovCisJCQl1ZGVsYXkoMTApOworCQkJcnhjdyA9IGVyMzIoUlhDVyk7CisJCQlpZiAocnhjdyAmIEUxMDAwX1JYQ1dfSVYpIHsKKwkJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IGZhbHNlOworCQkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF92YWxpZF9sZWRfZGVmYXVsdF84MjU3MSAtIFZlcmlmeSBhIHZhbGlkIGRlZmF1bHQgTEVEIGNvbmZpZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIE5WTSAoRUVQUk9NKQpAQCAtMTIyMCwxMSArMTQyNSwxOSBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpICYmCi0JICAgICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GNzQ2KQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUXzgyNTczOwotCWVsc2UgaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF8wMDAwIHx8ICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GRkZGKQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRjc0NikKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFRfODI1NzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfMDAwMCB8fAorCQkgICAgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCisJCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTcsMyArMTczMCwxOSBAQAogCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKIH07CiAKK3N0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTgzX2luZm8gPSB7CisJLm1hYwkJCT0gZTEwMDBfODI1ODMsCisJLmZsYWdzCQkJPSBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUgorCQkJCSAgfCBGTEFHX0hBU19XT0wKKwkJCQkgIHwgRkxBR19BUE1FX0lOX0NUUkwzCisJCQkJICB8IEZMQUdfUlhfQ1NVTV9FTkFCTEVECisJCQkJICB8IEZMQUdfSEFTX1NNQVJUX1BPV0VSX0RPV04KKwkJCQkgIHwgRkxBR19IQVNfQU1UCisJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKKwkucGJhCQkJPSAyMCwKKwkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKKwkubWFjX29wcwkJPSAmZTgyNTcxX21hY19vcHMsCisJLnBoeV9vcHMJCT0gJmU4Ml9waHlfb3BzX2JtLAorCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IGU2Y2FmMjkuLjI0M2FhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmFibGUgUGluIDcgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1JPX0RJUyAgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9ETUFfRFlOX0NMS19FTiAweDAwMDgwMDAwIC8qIERNQSBEeW5hbWljIENsb2NrIEdhdGluZyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9FSUFNRSAgICAgICAgICAweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDM3YmNiMTkuLmYzNzM2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xMDEsNiArMTAxLDcgQEAKIAlib2FyZF84MjU3MiwKIAlib2FyZF84MjU3MywKIAlib2FyZF84MjU3NCwKKwlib2FyZF84MjU4MywKIAlib2FyZF84MDAwM2VzMmxhbiwKIAlib2FyZF9pY2g4bGFuLAogCWJvYXJkX2ljaDlsYW4sCkBAIC0xOTUsOCArMTk2LDYgQEAKIAl1MTYgbGlua19kdXBsZXg7CiAJdTE2IGVlcHJvbV92ZXJzOwogCi0Jc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOyAvKiBwcmV2ZW50IGNvbmN1cnJlbnQgdGFpbCB1cGRhdGVzICovCi0KIAkvKiB0cmFjayBkZXZpY2UgdXAvZG93bi90ZXN0aW5nIHN0YXRlICovCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIApAQCAtNDAxLDYgKzQwMCw3IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzJfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3M19pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc0X2luZm87CitleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g4X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoOV9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2ljaDEwX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCBlNDg5NTZkLi40ZDI1ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTc5MCw2ICs3OTAsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAljYXNlIGUxMDAwX2ljaDhsYW46CiAJY2FzZSBlMTAwMF9pY2g5bGFuOgogCWNhc2UgZTEwMDBfaWNoMTBsYW46CkBAIC0xNTg5LDcgKzE1OTAsNyBAQAogCSpkYXRhID0gMDsKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAJCWludCBpID0gMDsKLQkJaHctPm1hYy5zZXJkZXNfaGFzX2xpbmsgPSAwOworCQlody0+bWFjLnNlcmRlc19oYXNfbGluayA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAppbmRleCAyZDRjZTA0Li5kOGI4MjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaApAQCAtMzM5LDYgKzMzOSw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0VfSUFNVAkJMHgxMDhDCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0wJCQkweDEwOUEKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc0TAkJCTB4MTBEMworI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzRMQQkJCTB4MTBGNgorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1ODNWICAgICAgICAgICAgICAgICAgICAgMHgxNTBDCiAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQJMHgxMDk2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfRFBUCTB4MTA5OApAQCAtMzc2LDYgKzM3OCw3IEBACiAJZTEwMDBfODI1NzIsCiAJZTEwMDBfODI1NzMsCiAJZTEwMDBfODI1NzQsCisJZTEwMDBfODI1ODMsCiAJZTEwMDBfODAwMDNlczJsYW4sCiAJZTEwMDBfaWNoOGxhbiwKIAllMTAwMF9pY2g5bGFuLApAQCAtNDU5LDYgKzQ2MiwxMyBAQAogCWUxMDAwX3NtYXJ0X3NwZWVkX29mZgogfTsKIAorZW51bSBlMTAwMF9zZXJkZXNfbGlua19zdGF0ZSB7CisJZTEwMDBfc2VyZGVzX2xpbmtfZG93biA9IDAsCisJZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19wcm9ncmVzcywKKwllMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlLAorCWUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cAorfTsKKwogLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7CiAJX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KQEAgLTc4Nyw2ICs3OTcsNyBAQAogCWJvb2wgaW5faWZzX21vZGU7CiAJYm9vbCBzZXJkZXNfaGFzX2xpbms7CiAJYm9vbCB0eF9wa3RfZmlsdGVyaW5nOworCWVudW0gZTEwMDBfc2VyZGVzX2xpbmtfc3RhdGUgc2VyZGVzX2xpbmtfc3RhdGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggZTQxNWU4MS4uNmQxYWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0zOTAsOCArMzkwLDYgQEAKIH0KIAogc3RhdGljIERFRklORV9NVVRFWChudm1fbXV0ZXgpOwotc3RhdGljIHBpZF90IG52bV9vd25lcl9waWQgPSAtMTsKLXN0YXRpYyBjaGFyIG52bV9vd25lcl9uYW1lW1RBU0tfQ09NTV9MRU5dID0gIiI7CiAKIC8qKgogICogIGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4gLSBBY3F1aXJlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZwpAQCAtNDA4LDE2ICs0MDYsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmbnZtX211dGV4KSkgewotCQlXQVJOKDEsIEtFUk5fRVJSICJlMTAwMGUgbXV0ZXggY29udGVudGlvbi4gT3duZWQgYnkgcHJvY2VzcyAiCi0JCSAgICAgIiVzIChwaWQgJWQpLCByZXF1aXJlZCBieSBwcm9jZXNzICVzIChwaWQgJWQpXG4iLAotCQkgICAgIG52bV9vd25lcl9uYW1lLCBudm1fb3duZXJfcGlkLAotCQkgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0KLQkJbXV0ZXhfbG9jaygmbnZtX211dGV4KTsKLQl9Ci0JbnZtX293bmVyX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlzdHJuY3B5KG52bV9vd25lcl9uYW1lLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwltdXRleF9sb2NrKCZudm1fbXV0ZXgpOwogCiAJd2hpbGUgKHRpbWVvdXQpIHsKIAkJZXh0Y25mX2N0cmwgPSBlcjMyKEVYVENORl9DVFJMKTsKQEAgLTQzNSw4ICs0MjQsNiBAQAogCQlod19kYmcoaHcsICJGVyBvciBIVyBoYXMgbG9ja2VkIHRoZSByZXNvdXJjZSBmb3IgdG9vIGxvbmcuXG4iKTsKIAkJZXh0Y25mX2N0cmwgJj0gfkUxMDAwX0VYVENORl9DVFJMX1NXRkxBRzsKIAkJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwotCQludm1fb3duZXJfcGlkID0gLTE7Ci0JCXN0cmNweShudm1fb3duZXJfbmFtZSwgIiIpOwogCQltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiAJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKIAl9CkBAIC00NjAsOCArNDQ3LDYgQEAKIAlleHRjbmZfY3RybCAmPSB+RTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKIAotCW52bV9vd25lcl9waWQgPSAtMTsKLQlzdHJjcHkobnZtX293bmVyX25hbWUsICIiKTsKIAltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCA2Njc0MTEwLi4xOGE0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC0xNTksNDEgKzE1OSw2IEBACiB9CiAKIC8qKgotICogIGUxMDAwX210YV9zZXQgLSBTZXQgbXVsdGljYXN0IGZpbHRlciB0YWJsZSBhZGRyZXNzCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAaGFzaF92YWx1ZTogZGV0ZXJtaW5lcyB0aGUgTVRBIHJlZ2lzdGVyIGFuZCBiaXQgdG8gc2V0Ci0gKgotICogIFRoZSBtdWx0aWNhc3QgdGFibGUgYWRkcmVzcyBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuCi0gKiAgVGhlIGhhc2hfdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCByZWdpc3RlciB0aGUgYml0IGlzIGluLCB0aGUKLSAqICBjdXJyZW50IHZhbHVlIGlzIHJlYWQsIHRoZSBuZXcgYml0IGlzIE9SJ2QgaW4gYW5kIHRoZSBuZXcgdmFsdWUgaXMKLSAqICB3cml0dGVuIGJhY2sgaW50byB0aGUgcmVnaXN0ZXIuCi0gKiovCi1zdGF0aWMgdm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKQotewotCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWcsIG10YTsKLQotCS8qCi0JICogVGhlIE1UQSBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuIEl0IGlzCi0JICogdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mICgzMiptdGFfcmVnX2NvdW50KSBiaXRzLiAgV2Ugd2FudCB0bwotCSAqIHNldCBiaXQgQml0QXJyYXlbaGFzaF92YWx1ZV0uIFNvIHdlIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcgotCSAqIHRoZSBiaXQgaXMgaW4sIHJlYWQgaXQsIE9SIGluIHRoZSBuZXcgYml0LCB0aGVuIHdyaXRlCi0JICogYmFjayB0aGUgbmV3IHZhbHVlLiAgVGhlIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKSBzZXJ2ZXMgYXMgYQotCSAqIG1hc2sgdG8gYml0cyAzMTo1IG9mIHRoZSBoYXNoIHZhbHVlIHdoaWNoIGdpdmVzIHVzIHRoZQotCSAqIHJlZ2lzdGVyIHdlJ3JlIG1vZGlmeWluZy4gIFRoZSBoYXNoIGJpdCB3aXRoaW4gdGhhdCByZWdpc3RlcgotCSAqIGlzIGRldGVybWluZWQgYnkgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGUgaGFzaCB2YWx1ZS4KLQkgKi8KLQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpOwotCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7Ci0KLQltdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBoYXNoX3JlZyk7Ci0KLQltdGEgfD0gKDEgPDwgaGFzaF9iaXQpOwotCi0JRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGhhc2hfcmVnLCBtdGEpOwotCWUxZV9mbHVzaCgpOwotfQotCi0vKioKICAqICBlMTAwMF9oYXNoX21jX2FkZHIgLSBHZW5lcmF0ZSBhIG11bHRpY2FzdCBoYXNoIHZhbHVlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcjogcG9pbnRlciB0byBhIG11bHRpY2FzdCBhZGRyZXNzCkBAIC0yODEsOCArMjQ2LDEzIEBACiAJCQkJCXU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAogCQkJCQl1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7Ci0JdTMyIGhhc2hfdmFsdWU7CiAJdTMyIGk7CisJdTMyICptY2FycmF5ID0ga3phbGxvYyhody0+bWFjLm10YV9yZWdfY291bnQgKiBzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIW1jYXJyYXkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aWNhc3QgYXJyYXkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCS8qCiAJICogTG9hZCB0aGUgZmlyc3Qgc2V0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgZXhhY3QKQEAgLTMwMiwyMCArMjcyLDI0IEBACiAJCX0KIAl9CiAKLQkvKiBDbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIE1UQSAqLwotCWh3X2RiZyhodywgIkNsZWFyaW5nIE1UQVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKSB7Ci0JCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBpLCAwKTsKLQkJZTFlX2ZsdXNoKCk7Ci0JfQotCiAJLyogTG9hZCBhbnkgcmVtYWluaW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KIAlmb3IgKDsgbWNfYWRkcl9jb3VudCA+IDA7IG1jX2FkZHJfY291bnQtLSkgeworCQl1MzIgaGFzaF92YWx1ZSwgaGFzaF9yZWcsIGhhc2hfYml0LCBtdGE7CiAJCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7CiAJCWh3X2RiZyhodywgIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOwotCQllMTAwMF9tdGFfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKKwkJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKKwkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKKwkJbXRhID0gKDEgPDwgaGFzaF9iaXQpOworCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7CiAJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKIAl9CisKKwkvKiB3cml0ZSB0aGUgaGFzaCB0YWJsZSBjb21wbGV0ZWx5ICovCisJZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKQorCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgbWNhcnJheVtpXSk7CisKKwllMWVfZmx1c2goKTsKKwlrZnJlZShtY2FycmF5KTsKIH0KIAogLyoqCkBAIC01MDEsNyArNDc1LDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NjYsNyArNTQwLDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfSBlbHNlIGlmICghKEUxMDAwX1RYQ1dfQU5FICYgZXIzMihUWENXKSkpIHsKIAkJLyoKIAkJICogSWYgd2UgZm9yY2UgbGluayBmb3Igbm9uLWF1dG8tbmVnb3RpYXRpb24gc3dpdGNoLCBjaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDkxODE3ZDAuLmJmYjJkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQ0LDEwICs0NCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogI2luY2x1ZGUgImUxMDAwLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zLjMtazYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMy40LWs0IgogY2hhciBlMTAwMGVfZHJpdmVyX25hbWVbXSA9ICJlMTAwMGUiOwogY29uc3QgY2hhciBlMTAwMGVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCkBAIC01Niw2ICs1Nyw3IEBACiAJW2JvYXJkXzgyNTcyXQkJPSAmZTEwMDBfODI1NzJfaW5mbywKIAlbYm9hcmRfODI1NzNdCQk9ICZlMTAwMF84MjU3M19pbmZvLAogCVtib2FyZF84MjU3NF0JCT0gJmUxMDAwXzgyNTc0X2luZm8sCisJW2JvYXJkXzgyNTgzXQkJPSAmZTEwMDBfODI1ODNfaW5mbywKIAlbYm9hcmRfODAwMDNlczJsYW5dCT0gJmUxMDAwX2VzMl9pbmZvLAogCVtib2FyZF9pY2g4bGFuXQkJPSAmZTEwMDBfaWNoOF9pbmZvLAogCVtib2FyZF9pY2g5bGFuXQkJPSAmZTEwMDBfaWNoOV9pbmZvLApAQCAtOTksOCArMTAxLDggQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCQkgbGUxNl90b19jcHUodmxhbikpOworCQl2bGFuX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBhZGFwdGVyLT52bGdycCwKKwkJCQkgbGUxNl90b19jcHUodmxhbiksIHNrYik7CiAJZWxzZQogCQluYXBpX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBza2IpOwogfQpAQCAtNTY1LDE1ICs1NjcsMTQgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF90eGJ1ZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ByaW50X3R4X2hhbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MjAsMTUgKzYyMSwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSAwOworCWJvb2wgY2xlYW5lZDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXMgPSAwLCB0b3RhbF90eF9wYWNrZXRzID0gMDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IDA7ICFjbGVhbmVkOyApIHsKKwl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkJZm9yIChjbGVhbmVkID0gMDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CkBAIC02NTQsMTAgKzY1Niw2IEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2RlZmluZSBFMTAwMF9UWF9XRUlHSFQgNjQKLQkJLyogd2VpZ2h0IG9mIGEgc29ydCBmb3IgdHgsIHRvIGF2b2lkIGVuZGxlc3MgdHJhbnNtaXQgY2xlYW51cCAqLwotCQlpZiAoY291bnQrKyA9PSBFMTAwMF9UWF9XRUlHSFQpCi0JCQlicmVhazsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKQEAgLTY3OCwxMyArNjc2LDExIEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7Ci0JCS8qCi0JCSAqIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKLQkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaQotCQkgKi8KKwkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCiAJCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gMDsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcAorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wCiAJCQkgICAgICAgKyAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAkJCWUxMDAwX3ByaW50X3R4X2hhbmcoYWRhcHRlcik7CkBAIC02OTUsNyArNjkxLDcgQEAKIAlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX3R4X2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7Ci0JcmV0dXJuIGNsZWFuZWQ7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPmNvdW50KTsKIH0KIAogLyoqCkBAIC0xMTUyLDcgKzExNDgsNyBAQAogCSAqIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNCiAJICovCiAKLQlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQkvKgogCQkgKiBJQ0g4IHdvcmthcm91bmQtLSBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gY2FibGUKQEAgLTExNzksMTIgKzExNzUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjE4LDcgKzEyMTQsNyBAQAogCSAqIElNQyB3cml0ZQogCSAqLwogCi0JaWYgKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgeworCWlmIChpY3IgJiBFMTAwMF9JQ1JfTFNDKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKIAkJLyoKIAkJICogSUNIOCB3b3JrYXJvdW5kLS0gQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIGNhYmxlCkBAIC0xMjQ2LDEyICsxMjQyLDEyIEBACiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI2NSw3ICsxMjYxLDggQEAKIAl1MzIgaWNyID0gZXIzMihJQ1IpOwogCiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpIHsKLQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKQEAgLTEyODIsNyArMTI3OSw4IEBACiAJfQogCiBub19saW5rX2ludGVycnVwdDoKLQlldzMyKElNUywgRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19PVEhFUik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWV3MzIoSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX09USEVSKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMjAsMTAgKzEzMTgsMTAgQEAKIAkJYWRhcHRlci0+cnhfcmluZy0+c2V0X2l0ciA9IDA7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2OTgsNyArMTY5Niw2IEBACiAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwogCiAJcmV0dXJuIDA7CiBlcnI6CkBAIC0yMDA3LDMyICsyMDA0LDI1IEBACiAJICAgICEoYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCAmIGFkYXB0ZXItPnR4X3JpbmctPmltc192YWwpKQogCQlnb3RvIGNsZWFuX3J4OwogCi0JLyoKLQkgKiBlMTAwMF9jbGVhbiBpcyBjYWxsZWQgcGVyLWNwdS4gIFRoaXMgbG9jayBwcm90ZWN0cwotCSAqIHR4X3JpbmcgZnJvbSBiZWluZyBjbGVhbmVkIGJ5IG11bHRpcGxlIGNwdXMKLQkgKiBzaW11bHRhbmVvdXNseS4gIEEgZmFpbHVyZSBvYnRhaW5pbmcgdGhlIGxvY2sgbWVhbnMKLQkgKiB0eF9yaW5nIGlzIGN1cnJlbnRseSBiZWluZyBjbGVhbmVkIGFueXdheS4KLQkgKi8KLQlpZiAoc3Bpbl90cnlsb2NrKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKSkgewotCQl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0JfQorCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlcik7CiAKIGNsZWFuX3J4OgogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKIAkJCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQotCQkJZXczMihJTVMsIGFkYXB0ZXItPnJ4X3JpbmctPmltc192YWwpOwotCQllbHNlCi0JCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKKwkJCQlldzMyKElNUywgYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCk7CisJCQllbHNlCisJCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJfQogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0yOTIyLDggKzI5MTIsNiBAQAogCWlmIChlMTAwMF9hbGxvY19xdWV1ZXMoYWRhcHRlcikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCiAJLyogRXhwbGljaXRseSBkaXNhYmxlIElSUSBzaW5jZSB0aGUgTklDIGNhbiBiZSBpbiBhbnkgc3RhdGUuICovCiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKQEAgLTMzMjAsNyArMzMwOCw3IEBACiAKIAlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSBlcjMyKEFMR05FUlJDKTsKIAlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gZXIzMihSWEVSUkMpOwotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpCisJaWYgKChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpICYmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQogCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBlcjMyKFROQ1JTKTsKIAlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyICs9IGVyMzIoQ0VYVEVSUik7CiAJYWRhcHRlci0+c3RhdHMudHNjdGMgKz0gZXIzMihUU0NUQyk7CkBAIC0zNzc3LDIzICszNzY1LDMwIEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTggY3NzOwogCXUzMiBjbWRfbGVuID0gRTEwMDBfVFhEX0NNRF9ERVhUOworCV9fYmUxNiBwcm90b2NvbDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKQorCQlwcm90b2NvbCA9IHZsYW5fZXRoX2hkcihza2IpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCWVsc2UKKwkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCS8qIFhYWCBub3QgaGFuZGxpbmcgYWxsIElQVjYgaGVhZGVycyAqLwogCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCWNtZF9sZW4gfD0gRTEwMDBfVFhEX0NNRF9UQ1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKQotCQkJZV93YXJuKCJjaGVja3N1bV9wYXJ0aWFsIHByb3RvPSV4IVxuIiwgc2tiLT5wcm90b2NvbCk7CisJCQllX3dhcm4oImNoZWNrc3VtX3BhcnRpYWwgcHJvdG89JXghXG4iLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KHByb3RvY29sKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzgzMiw0MiArMzgyNyw0MCBAQAogewogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCW9mZnNldCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCi0JCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCi0JCWlmIChtc3MgJiYgIW5yX2ZyYWdzICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KQotCQkJc2l6ZSAtPSA0OwotCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkvKiBzZXQgdGltZV9zdGFtcCAqYmVmb3JlKiBkbWEgdG8gaGVscCBhdm9pZCBhIHBvc3NpYmxlIHJhY2UgKi8KIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCXNpemUsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKLQkJCWFkYXB0ZXItPnR4X2RtYV9mYWlsZWQrKzsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CisJCWNvdW50Kys7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwotCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CisKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMzg3NSw0OSArMzg2OCwyNyBAQAogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKLQkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCQkgKiBpbiBUU08gbW9kZS4gIEFwcGVuZCA0LWJ5dGUgc2VudGluZWwgZGVzYyAqLwotCQkJaWYgKG1zcyAmJiBmID09IChucl9mcmFncy0xKSAmJiBzaXplID09IGxlbiAmJiBzaXplID4gOCkKLQkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQkgIGJ1ZmZlcl9pbmZvLT5kbWEpKSB7Ci0JCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkiVFggRE1BIHBhZ2UgbWFwIGZhaWxlZFxuIik7Ci0JCQkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCi0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KIAotCWlmIChpID09IDApCi0JCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7Ci0JZWxzZQotCQlpLS07Ci0KIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC00MDY5LDcgKzQwNDAsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IG1zczsKIAlpbnQgY291bnQgPSAwOwpAQCAtNDEzOCwxOCArNDEwOCwxMiBAQAogCWlmIChhZGFwdGVyLT5ody5tYWMudHhfcGt0X2ZpbHRlcmluZykKIAkJZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKGFkYXB0ZXIsIHNrYik7CiAKLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAkvKgogCSAqIG5lZWQ6IGNvdW50ICsgMiBkZXNjIGdhcCB0byBrZWVwIHRhaWwgZnJvbSB0b3VjaGluZwogCSAqIGhlYWQsIG90aGVyd2lzZSB0cnkgbmV4dCB0aW1lCiAJICovCi0JaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19WTEFOOwpAQCAtNDE2MSw3ICs0MTI1LDYgQEAKIAl0c28gPSBlMTAwMF90c28oYWRhcHRlciwgc2tiKTsKIAlpZiAodHNvIDwgMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApAQCAtNDE3OCwyMiArNDE0MSwyMCBAQAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAorCS8qIGlmIGNvdW50IGlzIDAgdGhlbiBtYXBwaW5nIGVycm9yIGhhcyBvY2N1cmVkICovCiAJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsIG5yX2ZyYWdzLCBtc3MpOwotCWlmIChjb3VudCA8IDApIHsKLQkJLyogaGFuZGxlIHBjaV9tYXBfc2luZ2xlKCkgZXJyb3IgaW4gZTEwMDBfdHhfbWFwICovCisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7CisKKwl9IGVsc2UgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CiAJfQogCi0JZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfZmxhZ3MsIGNvdW50KTsKLQotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwotCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ1NDMsNiArNDUwNCwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLworCWVyciA9IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGZhaWxlZCAiCisJCSAgICAgICAgICAgICAgICAgICAgIjB4JXhcbiIsIGVycik7CisJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KKwl9CisKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwpAQCAtNDYzNywyNCArNDYwNiwyOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBlcnI7CisJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAKIAllMTAwMGVfZGlzYWJsZV9sMWFzcG0ocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9IGVsc2UgeworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7CisJCWV3MzIoV1VTLCB+MCk7CisJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CiAKLQllMTAwMGVfcmVzZXQoYWRhcHRlcik7Ci0JZXczMihXVVMsIH4wKTsKLQotCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqCkBAIC00OTIyLDEyICs0ODk2LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQkvKgotCSAqIFdlIHNob3VsZCBub3QgYmUgdXNpbmcgTExUWCBhbnltb3JlLCBidXQgd2UgYXJlIHN0aWxsIFR4IGZhc3RlciB3aXRoCi0JICogaXQuCi0JICovCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0KIAlpZiAoZTEwMDBlX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odykpCiAJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfTU5HX1BUX0VOQUJMRUQ7CiAKQEAgLTUwOTEsNiArNTA1OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVycjsKIAogCS8qCiAJICogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC01MTI1LDYgKzUwOTQsMTIgQEAKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKKwkvKiBBRVIgZGlzYWJsZSAqLworCWVyciA9IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJICAgICAgICAicGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZmFpbGVkIDB4JXhcbiIsIGVycik7CisKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKQEAgLTUxNTYsNiArNTEzMSw4IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTczTCksIGJvYXJkXzgyNTczIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMKSwgYm9hcmRfODI1NzQgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMQSksIGJvYXJkXzgyNTc0IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgzViksIGJvYXJkXzgyNTgzIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCksCiAJICBib2FyZF84MDAwM2VzMmxhbiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTIxMDAuYyBiL2RyaXZlcnMvbmV0L2UyMTAwLmMKaW5kZXggYjA3YmExOS4uZDJmNmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTIxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMjEwMC5jCkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogCQlwcmludGsoIiAlMDJYIiwgc3RhdGlvbl9hZGRyW2ldKTsKIAogCWlmIChkZXYtPmlycSA8IDIpIHsKLQkJaW50IGlycWxpc3RbXSA9IHsxNSwxMSwxMCwxMiw1LDksMyw0fSwgaTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW50IGlycWxpc3RbXSA9IHsxNSwgMTEsIDEwLCAxMiwgNSwgOSwgMywgNH07CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycWxpc3QpOyBpKyspCiAJCQlpZiAocmVxdWVzdF9pcnEgKGlycWxpc3RbaV0sIE5VTEwsIDAsICJib2d1cyIsIE5VTEwpICE9IC1FQlVTWSkgewogCQkJCWRldi0+aXJxID0gaXJxbGlzdFtpXTsKIAkJCQlicmVhazsKIAkJCX0KLQkJaWYgKGkgPj0gOCkgeworCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGlycWxpc3QpKSB7CiAJCQlwcmludGsoIiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+aXJxKTsKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKaW5kZXggNjI3MWI5NC4uNmUzMTdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiZWhlYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDA5NiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDEwMCIKIAogLyogZUhFQSBjYXBhYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIERMUEFSX1BPUlRfQUREX1JFTSAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBkZmU5MjI2Li5hYzBjNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTE1NSw2ICsxNTUsOCBAQAogCWludCBudW1fZndfaGFuZGxlcywgaywgbDsKIAogCS8qIERldGVybWluZSBudW1iZXIgb2YgaGFuZGxlcyAqLworCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkgewogCQludW1fYWRhcHRlcnMrKzsKIApAQCAtMTc2LDE1ICsxNzgsMTkgQEAKIAlpZiAobnVtX2Z3X2hhbmRsZXMpIHsKIAkJYXJyID0ga3phbGxvYyhudW1fZndfaGFuZGxlcyAqIHNpemVvZigqYXJyKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYXJyKQotCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwkJCWdvdG8gb3V0OyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KIAl9IGVsc2UKIAkJZ290byBvdXRfdXBkYXRlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CisJCWlmIChudW1fYWRhcHRlcnMgPT0gMCkKKwkJCWJyZWFrOworCiAJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CiAJCQlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gYWRhcHRlci0+cG9ydFtrXTsKIAotCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApKQorCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApCisJCQkJfHwgKG51bV9wb3J0cyA9PSAwKSkKIAkJCQljb250aW51ZTsKIAogCQkJZm9yIChsID0gMDsKQEAgLTIwNyw2ICsyMTMsNyBAQAogCQkJfQogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpKytdLmZ3aCA9IHBvcnQtPnFwX2VxLT5md19oYW5kbGU7CisJCQludW1fcG9ydHMtLTsKIAkJfQogCiAJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CkBAIC0yMTYsMTYgKzIyMywyMCBAQAogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpKytdLmZ3aCA9IGFkYXB0ZXItPm1yLmhhbmRsZTsKIAkJfQorCQludW1fYWRhcHRlcnMtLTsKIAl9CiAKIG91dF91cGRhdGU6CiAJa2ZyZWUoZWhlYV9md19oYW5kbGVzLmFycik7CiAJZWhlYV9md19oYW5kbGVzLmFyciA9IGFycjsKIAllaGVhX2Z3X2hhbmRsZXMubnVtX2VudHJpZXMgPSBpOworb3V0OgorCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBlaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnModm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlaGVhX2JjbWNfcmVnX2VudHJ5ICphcnIgPSBOVUxMOwogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IGVoZWFfbWNfbGlzdCAqbWNfZW50cnk7CkBAIC0yMzMsNiArMjQ0LDggQEAKIAlpbnQgaSA9IDA7CiAJaW50IGs7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhlYV9iY21jX3JlZ3MubG9jaywgZmxhZ3MpOworCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiByZWdpc3RyYXRpb25zICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KQogCQlmb3IgKGsgPSAwOyBrIDwgRUhFQV9NQVhfUE9SVFM7IGsrKykgewpAQCAtMjUwLDcgKzI2Myw3IEBACiAJaWYgKG51bV9yZWdpc3RyYXRpb25zKSB7CiAJCWFyciA9IGt6YWxsb2MobnVtX3JlZ2lzdHJhdGlvbnMgKiBzaXplb2YoKmFyciksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWFycikKLQkJCXJldHVybjsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCisJCQlnb3RvIG91dDsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCiAJfSBlbHNlCiAJCWdvdG8gb3V0X3VwZGF0ZTsKIApAQCAtMjYxLDYgKzI3NCw5IEBACiAJCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkpCiAJCQkJY29udGludWU7CiAKKwkJCWlmIChudW1fcmVnaXN0cmF0aW9ucyA9PSAwKQorCQkJCWdvdG8gb3V0X3VwZGF0ZTsKKwogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOwogCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX0JST0FEQ0FTVCB8CkBAIC0yNzIsOSArMjg4LDEzIEBACiAJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfQlJPQURDQVNUIHwKIAkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKIAkJCWFycltpKytdLm1hY2FkZHIgPSBwb3J0LT5tYWNfYWRkcjsKKwkJCW51bV9yZWdpc3RyYXRpb25zIC09IDI7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkobWNfZW50cnksCiAJCQkJCSAgICAmcG9ydC0+bWNfbGlzdC0+bGlzdCwgbGlzdCkgeworCQkJCWlmIChudW1fcmVnaXN0cmF0aW9ucyA9PSAwKQorCQkJCQlnb3RvIG91dF91cGRhdGU7CisKIAkJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOwogCQkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19TQ09QRV9BTEwgfApAQCAtMjg4LDYgKzMwOCw3IEBACiAJCQkJCQkgIEVIRUFfQkNNQ19NVUxUSUNBU1QgfAogCQkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKIAkJCQlhcnJbaSsrXS5tYWNhZGRyID0gbWNfZW50cnktPm1hY2FkZHI7CisJCQkJbnVtX3JlZ2lzdHJhdGlvbnMgLT0gMjsKIAkJCX0KIAkJfQogCX0KQEAgLTI5Niw2ICszMTcsOCBAQAogCWtmcmVlKGVoZWFfYmNtY19yZWdzLmFycik7CiAJZWhlYV9iY21jX3JlZ3MuYXJyID0gYXJyOwogCWVoZWFfYmNtY19yZWdzLm51bV9lbnRyaWVzID0gaTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGVhX2JjbWNfcmVncy5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWhlYV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMwOCw3ICszMzEsNyBAQAogCiAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CiAKLQljYjIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2IyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjIpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjIiKTsKIAkJZ290byBvdXQ7CkBAIC0zNDEsNyArMzY0LDcgQEAKIAlzdGF0cy0+cnhfcGFja2V0cyA9IHJ4X3BhY2tldHM7CiAKIG91dF9oZXJyOgotCWtmcmVlKGNiMik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMik7CiBvdXQ6CiAJcmV0dXJuIHN0YXRzOwogfQpAQCAtMzcwLDggKzM5Myw2IEBACiAJCQkJCQkJICAgICAgRUhFQV9MX1BLVF9TSVpFKTsKIAkJCWlmICghc2tiX2Fycl9ycTFbaW5kZXhdKSB7CiAJCQkJcHItPnJxMV9za2JhLm9zX3NrYnMgPSBmaWxsX3dxZXMgLSBpOwotCQkJCWVoZWFfZXJyb3IoIiVzOiBubyBtZW0gZm9yIHNrYi8lZCB3cWVzIGZpbGxlZCIsCi0JCQkJCSAgIGRldi0+bmFtZSwgaSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTM4NywyNiArNDA4LDE5IEBACiAJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIGFkZGVyKTsKIH0KIAotc3RhdGljIGludCBlaGVhX2luaXRfZmlsbF9ycTEoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgbnJfcnExYSkKK3N0YXRpYyB2b2lkIGVoZWFfaW5pdF9maWxsX3JxMShzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsIGludCBucl9ycTFhKQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBza19idWZmICoqc2tiX2Fycl9ycTEgPSBwci0+cnExX3NrYmEuYXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwci0+cG9ydC0+bmV0ZGV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHByLT5ycTFfc2tiYS5sZW47IGkrKykgewogCQlza2JfYXJyX3JxMVtpXSA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBFSEVBX0xfUEtUX1NJWkUpOwotCQlpZiAoIXNrYl9hcnJfcnExW2ldKSB7Ci0JCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCSAgIGRldi0+bmFtZSwgaSk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKCFza2JfYXJyX3JxMVtpXSkKKwkJCWJyZWFrOwogCX0KIAkvKiBSaW5nIGRvb3JiZWxsICovCiAJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIG5yX3JxMWEpOwotb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZWhlYV9yZWZpbGxfcnFfZGVmKHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciwKQEAgLTQzNSwxMCArNDQ5LDEyIEBACiAJCXU2NCB0bXBfYWRkcjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBwYWNrZXRfc2l6ZSk7CiAJCWlmICghc2tiKSB7Ci0JCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCSAgIHByLT5wb3J0LT5uZXRkZXYtPm5hbWUsIGkpOwogCQkJcV9za2JhLT5vc19za2JzID0gZmlsbF93cWVzIC0gaTsKLQkJCXJldCA9IC1FTk9NRU07CisJCQlpZiAocV9za2JhLT5vc19za2JzID09IHFfc2tiYS0+bGVuIC0gMikgeworCQkJCWVoZWFfaW5mbygiJXM6IHJxJWkgcmFuIGRyeSAtIG5vIG1lbSBmb3Igc2tiIiwKKwkJCQkJICBwci0+cG9ydC0+bmV0ZGV2LT5uYW1lLCBycV9ucik7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKQEAgLTgzMCw3ICs4NDYsNyBAQAogCXdoaWxlICgocnggIT0gYnVkZ2V0KSB8fCBmb3JjZV9pcnEpIHsKIAkJcHItPnBvbGxfY291bnRlciA9IDA7CiAJCWZvcmNlX2lycSA9IDA7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllaGVhX3Jlc2V0X2NxX2VwKHByLT5yZWN2X2NxKTsKIAkJZWhlYV9yZXNldF9jcV9lcChwci0+c2VuZF9jcSk7CiAJCWVoZWFfcmVzZXRfY3FfbjEocHItPnJlY3ZfY3EpOwpAQCAtODQxLDcgKzg1Nyw3IEBACiAJCWlmICghY3FlICYmICFjcWVfc2tiKQogCQkJcmV0dXJuIHJ4OwogCi0JCWlmICghbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJaWYgKCFuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlyZXR1cm4gcng7CiAKIAkJY3FlX3NrYiA9IGVoZWFfcHJvY19jcWVzKHByLCBFSEVBX1BPTExfTUFYX0NRRVMpOwpAQCAtODU5LDcgKzg3NSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHM7IGkrKykKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPnBvcnRfcmVzW2ldLm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5wb3J0X3Jlc1tpXS5uYXBpKTsKIH0KICNlbmRpZgogCkBAIC04NjcsNyArODgzLDcgQEAKIHsKIAlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIgPSBwYXJhbTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZwci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcHItPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtOTE1LDcgKzkzMSw3IEBACiAJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwICpjYjA7CiAKIAkvKiBtYXkgYmUgY2FsbGVkIHZpYSBlaGVhX25lcV90YXNrbGV0KCkgKi8KLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTk5Niw3ICsxMDEyLDcgQEAKIG91dF9mcmVlOgogCWlmIChyZXQgfHwgbmV0aWZfbXNnX3Byb2JlKHBvcnQpKQogCQllaGVhX2R1bXAoY2IwLCBzaXplb2YoKmNiMCksICJlaGVhX3NlbnNlX3BvcnRfYXR0ciIpOwotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMDcsNyArMTAyMyw3IEBACiAJdTY0IGhyZXQ7CiAJaW50IHJldCA9IDA7CiAKLQljYjQgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2I0ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjQpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjQiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEwNzUsNyArMTA5MSw3IEBACiAJaWYgKCFwcm9wX2NhcnJpZXJfc3RhdGUgfHwgKHBvcnQtPnBoeV9saW5rID09IEVIRUFfUEhZX0xJTktfVVApKQogCQluZXRpZl9jYXJyaWVyX29uKHBvcnQtPm5ldGRldik7CiAKLQlrZnJlZShjYjQpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjQpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMjAxLDExICsxMjE3LDExIEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciA9ICZwci0+cXAtPmluaXRfYXR0cjsKIAotCXJldCA9IGVoZWFfaW5pdF9maWxsX3JxMShwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnExCi0JCQkJICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMgotCQkJCSAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKKwllaGVhX2luaXRfZmlsbF9ycTEocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMQorCQkJICAgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyCisJCQkgICAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKIAotCXJldCB8PSBlaGVhX3JlZmlsbF9ycTIocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiAtIDEpOworCXJldCA9IGVoZWFfcmVmaWxsX3JxMihwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyIC0gMSk7CiAKIAlyZXQgfD0gZWhlYV9yZWZpbGxfcnEzKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKIApAQCAtMTMwMiw3ICsxMzE4LDcgQEAKIAlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjAgKmNiMDsKIAogCXJldCA9IC1FTk9NRU07Ci0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKQogCQlnb3RvIG91dDsKIApAQCAtMTMzOCw3ICsxMzU0LDcgQEAKIAlyZXQgPSAwOwogCiBvdXRfZnJlZToKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xNzQ4LDcgKzE3NjQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE3NjksOCArMTc4NSw2IEBACiAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjX2FkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCS8qIERlcmVnaXN0ZXIgb2xkIE1BQyBpbiBwSFlQICovCiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkgewogCQlyZXQgPSBlaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHBvcnQsIEhfREVSRUdfQkNNQyk7CkBAIC0xNzkxLDkgKzE4MDUsOCBAQAogCiBvdXRfdXByZWdzOgogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIG91dF9mcmVlOgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTcsNyArMTgzMCw3IEBACiAJaWYgKChlbmFibGUgJiYgcG9ydC0+cHJvbWlzYykgfHwgKCFlbmFibGUgJiYgIXBvcnQtPnByb21pc2MpKQogCQlyZXR1cm47CiAKLQljYjcgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2I3ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjcpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjciKTsKIAkJZ290byBvdXQ7CkBAIC0xODM2LDcgKzE4NDksNyBAQAogCiAJcG9ydC0+cHJvbWlzYyA9IGVuYWJsZTsKIG91dDoKLQlrZnJlZShjYjcpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjcpOwogCXJldHVybjsKIH0KIApAQCAtMTk1Myw4ICsxOTY2LDYgQEAKIAl9CiAJZWhlYV9wcm9taXNjdW91cyhkZXYsIDApOwogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWVoZWFfYWxsbXVsdGkoZGV2LCAxKTsKIAkJZ290byBvdXQ7CkBAIC0xOTg0LDcgKzE5OTUsNiBAQAogCX0KIG91dDoKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKLQlzcGluX3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiAJcmV0dXJuOwogfQogCkBAIC0yMjE3LDcgKzIyMjcsNyBAQAogCiAJcG9ydC0+dmdycCA9IGdycDsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyMjgsNyArMjIzOCw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogCi0Ja2ZyZWUoY2IxKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IxKTsKIG91dDoKIAlyZXR1cm47CiB9CkBAIC0yMjQxLDcgKzIyNTEsNyBAQAogCWludCBpbmRleDsKIAl1NjQgaHJldDsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyNjIsNyArMjI3Miw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogb3V0OgotCWtmcmVlKGNiMSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMSk7CiAJcmV0dXJuOwogfQogCkBAIC0yMjc2LDcgKzIyODYsNyBAQAogCiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKHBvcnQtPnZncnAsIHZpZCwgTlVMTCk7CiAKLQljYjEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IxID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjEpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKIAkJZ290byBvdXQ7CkBAIC0yMjk3LDcgKzIzMDcsNyBAQAogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKIAkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKIG91dDoKLQlrZnJlZShjYjEpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogCXJldHVybjsKIH0KIApAQCAtMjMwOSw3ICsyMzE5LDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJc3RydWN0IGhjcF9tb2RpZnlfcXBfY2IwICpjYjA7CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yMzcyLDcgKzIzODIsNyBAQAogCiAJcmV0ID0gMDsKIG91dDoKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjUsOCArMjQ3NSw2IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlyZXQgPSBlaGVhX3BvcnRfcmVzX3NldHVwKHBvcnQsIHBvcnQtPm51bV9kZWZfcXBzLAogCQkJCSAgcG9ydC0+bnVtX2FkZF90eF9xcHMpOwogCWlmIChyZXQpIHsKQEAgLTI1MDMsOCArMjUxMSw2IEBACiAJCX0KIAl9CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX1JFR19CQ01DKTsKIAlpZiAocmV0KSB7CiAJCXJldCA9IC1FSU87CkBAIC0yNTI2LDEwICsyNTMyLDcgQEAKIAkJZWhlYV9pbmZvKCJGYWlsZWQgc3RhcnRpbmcgJXMuIHJldD0laSIsIGRldi0+bmFtZSwgcmV0KTsKIAogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTc5LDkgKzI1ODIsNiBAQAogCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfRE9XTikKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCWVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOwogCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKIApAQCAtMjU5MCw3ICsyNTkwLDYgQEAKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwogCiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCiAJcmV0ID0gZWhlYV9jbGVhbl9hbGxfcG9ydHJlcyhwb3J0KTsKIAlpZiAocmV0KQpAQCAtMjU5OCw3ICsyNTk3LDYgQEAKIAkJCSAgZGV2LT5uYW1lLCByZXQpOwogCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI2NjQsNyArMjY2Miw3IEBACiAJdTY0IGR1bW15NjQgPSAwOwogCXUxNiBkdW1teTE2ID0gMDsKIAotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTI3MTYsNyArMjcxNCw3IEBACiAKIAlyZXQgPSAwOwogb3V0OgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc2Niw3ICsyNzY0LDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJdTE2IGR1bW15MTYgPSAwOwogCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjgxOSw3ICsyODE3LDcgQEAKIAkJZWhlYV9yZWZpbGxfcnEzKHByLCAwKTsKIAl9CiBvdXQ6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUwLDcgKzI5NDgsNyBAQAogCXU2NCBocmV0OwogCWludCByZXQ7CiAKLQljYiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYiA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yOTY3LDcgKzI5NjUsNyBAQAogCXJldCA9IDA7CiAKIG91dF9oZXJyOgotCWtmcmVlKGNiKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yOTgxLDcgKzI5NzksNyBAQAogCSpqdW1ibyA9IDA7CiAKIAkvKiAoVHJ5IHRvKSBlbmFibGUgKmp1bWJvIGZyYW1lcyAqLwotCWNiNCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiNCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzAwOSw3ICszMDA3LDcgQEAKIAkJfSBlbHNlCiAJCQlyZXQgPSAtRUlOVkFMOwogCi0JCWtmcmVlKGNiNCk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjQpOwogCX0KIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCw3ICszMDM4LDcgQEAKIAlwb3J0LT5vZmRldi5kZXYucGFyZW50ID0gJnBvcnQtPmFkYXB0ZXItPm9mZGV2LT5kZXY7CiAJcG9ydC0+b2ZkZXYuZGV2LmJ1cyA9ICZpYm1lYnVzX2J1c190eXBlOwogCi0Jc3ByaW50Zihwb3J0LT5vZmRldi5kZXYuYnVzX2lkLCAicG9ydCVkIiwgcG9ydF9uYW1lX2NudCsrKTsKKwlkZXZfc2V0X25hbWUoJnBvcnQtPm9mZGV2LmRldiwgInBvcnQlZCIsIHBvcnRfbmFtZV9jbnQrKyk7CiAJcG9ydC0+b2ZkZXYuZGV2LnJlbGVhc2UgPSBsb2dpY2FsX3BvcnRfcmVsZWFzZTsKIAogCXJldCA9IG9mX2RldmljZV9yZWdpc3RlcigmcG9ydC0+b2ZkZXYpOwpAQCAtMzA2OSw2ICszMDY3LDIyIEBACiAJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPm9mZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlaGVhX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVoZWFfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWhlYV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlaGVhX3N0YXJ0X3htaXQsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVoZWFfbmV0cG9sbCwKKyNlbmRpZgorCS5uZG9fZ2V0X3N0YXRzCQk9IGVoZWFfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZWhlYV9zZXRfbWFjX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBlaGVhX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZWhlYV9jaGFuZ2VfbXR1LAorCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IGVoZWFfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGVoZWFfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IGVoZWFfdmxhbl9yeF9raWxsX3ZpZAorfTsKKwogc3RydWN0IGVoZWFfcG9ydCAqZWhlYV9zZXR1cF9zaW5nbGVfcG9ydChzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgdTMyIGxvZ2ljYWxfcG9ydF9pZCwKIAkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCkBAIC0zMTIxLDE5ICszMTM1LDkgQEAKIAkvKiBpbml0aWFsaXplIG5ldF9kZXZpY2Ugc3RydWN0dXJlICovCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwb3J0LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCi0JZGV2LT5vcGVuID0gZWhlYV9vcGVuOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaGVhX25ldHBvbGw7Ci0jZW5kaWYKLQlkZXYtPnN0b3AgPSBlaGVhX3N0b3A7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlaGVhX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBlaGVhX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGVoZWFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gZWhlYV9zZXRfbWFjX2FkZHI7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZWhlYV9jaGFuZ2VfbXR1OwotCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGVoZWFfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IGVoZWFfdmxhbl9yeF9hZGRfdmlkOwotCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGVoZWFfdmxhbl9yeF9raWxsX3ZpZDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWhlYV9uZXRkZXZfb3BzOworCWVoZWFfc2V0X2V0aHRvb2xfb3BzKGRldik7CisKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1RTTwogCQkgICAgICB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWAogCQkgICAgICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIKQEAgLTMxNDIsNyArMzE0Niw2IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVIRUFfV0FUQ0hfRE9HX1RJTUVPVVQ7CiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7Ci0JZWhlYV9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKQEAgLTMzNzAsNyArMzM3Myw2IEBACiAJCWVoZWFfZXJyb3IoIkludmFsaWQgaWJtZWJ1cyBkZXZpY2UgcHJvYmVkIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlhZGFwdGVyID0ga3phbGxvYyhzaXplb2YoKmFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpIHsKQEAgLTM0NTAsMTEgKzM0NTIsMTIgQEAKIAllaGVhX2Rlc3Ryb3lfZXEoYWRhcHRlci0+bmVxKTsKIAogb3V0X2ZyZWVfYWQ6CisJbGlzdF9kZWwoJmFkYXB0ZXItPmxpc3QpOwogCWtmcmVlKGFkYXB0ZXIpOwogCiBvdXQ6CiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ3Myw4ICszNDc2LDYgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlpYm1lYnVzX2ZyZWVfaXJxKGFkYXB0ZXItPm5lcS0+YXR0ci5pc3QxLCBhZGFwdGVyKTsKIAl0YXNrbGV0X2tpbGwoJmFkYXB0ZXItPm5lcV90YXNrbGV0KTsKIApAQCAtMzQ4NCw3ICszNDg1LDYgQEAKIAlrZnJlZShhZGFwdGVyKTsKIAogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUxOCwxMiArMzUxOCwxNCBAQAogCQkvKiBSZWFkZCBjYW5jZWxlZCBtZW1vcnkgYmxvY2sgKi8KIAljYXNlIE1FTV9PTkxJTkU6CiAJCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9ubGluZSIpOworCQlzZXRfYml0KF9fRUhFQV9TVE9QX1hGRVIsICZlaGVhX2RyaXZlcl9mbGFncyk7CiAJCWlmIChlaGVhX2FkZF9zZWN0X2JtYXAoYXJnLT5zdGFydF9wZm4sIGFyZy0+bnJfcGFnZXMpKQogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCWVoZWFfcmVyZWdfbXJzKE5VTEwpOwogCQlicmVhazsKIAljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgogCQllaGVhX2luZm8oIm1lbW9yeSBpcyBnb2luZyBvZmZsaW5lIik7CisJCXNldF9iaXQoX19FSEVBX1NUT1BfWEZFUiwgJmVoZWFfZHJpdmVyX2ZsYWdzKTsKIAkJaWYgKGVoZWFfcmVtX3NlY3RfYm1hcChhcmctPnN0YXJ0X3BmbiwgYXJnLT5ucl9wYWdlcykpCiAJCQlyZXR1cm4gTk9USUZZX0JBRDsKIAkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CkBAIC0zNTMxLDYgKzM1MzMsOSBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKworCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKKwogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwppbmRleCA0OWQ3NjZlLi4zNzQ3NDU3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJdTY0ICpyYmxvY2s7CiAKLQlyYmxvY2sgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYmxvY2spIHsKIAkJZWhlYV9lcnJvcigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybjsKQEAgLTEwMjIsNSArMTAyMiw1IEBACiAJZWxzZQogCQllaGVhX2Vycm9yKCJFcnJvciBkYXRhIGNvdWxkIG5vdCBiZSBmZXRjaGVkOiAlbGxYIiwgcmVzX2hhbmRsZSk7CiAKLQlrZnJlZShyYmxvY2spOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyYmxvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCBhODMyY2M1Li5jMjZjZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gMTBHIEV0aGVybmV0IERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC42NDgiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjAuOTMzIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jIgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAKQEAgLTk3LDYgKzk3LDcgQEAKIAlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfcnEgcnFbMV07CiAJdW5zaWduZWQgaW50IHJxX2NvdW50OwogCWludCAoKnJxX2FsbG9jX2J1Zikoc3RydWN0IHZuaWNfcnEgKnJxKTsKKwl1NjQgcnFfYmFkX2ZjczsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKIAlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW0VOSUNfTFJPX01BWF9ERVNDXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IDdkNjA1NTEuLjAzNDAzYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtNDAwLDEwICs0MDAsMTMgQEAKIAkJcmV0dXJuIElSUV9OT05FOwkvKiBub3Qgb3VyIGludGVycnVwdCAqLwogCX0KIAotCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9OT1RJRlkpKQorCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9OT1RJRlkpKSB7CisJCXZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19JTlRYX05PVElGWV0pOwogCQllbmljX25vdGlmeV9jaGVjayhlbmljKTsKKwl9CiAKIAlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfRVJSKSkgeworCQl2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfSU5UWF9FUlJdKTsKIAkJZW5pY19sb2dfcV9lcnJvcihlbmljKTsKIAkJLyogc2NoZWR1bGUgcmVjb3ZlcnkgZnJvbSBXUS9SUSBlcnJvciAqLwogCQlzY2hlZHVsZV93b3JrKCZlbmljLT5yZXNldCk7CkBAIC00MTEsOCArNDE0LDggQEAKIAl9CiAKIAlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfV1FfUlEpKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlbmljLT5uYXBpKSkKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZlbmljLT5uYXBpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX0lOVFhfV1FfUlFdKTsKIAl9CkBAIC00NDAsNyArNDQzLDcgQEAKIAkgKiB3cml0ZXMpLgogCSAqLwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDUwLDcgKzQ1Myw3IEBACiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCiAJLyogc2NoZWR1bGUgTkFQSSBwb2xsaW5nIGZvciBSUSBjbGVhbnVwICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDc2LDYgKzQ3OSw4IEBACiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCisJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfRVJSXSk7CisKIAllbmljX2xvZ19xX2Vycm9yKGVuaWMpOwogCiAJLyogc2NoZWR1bGUgcmVjb3ZlcnkgZnJvbSBXUS9SUSBlcnJvciAqLwpAQCAtNDg4LDggKzQ5Myw4IEBACiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCisJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfTk9USUZZXSk7CiAJZW5pY19ub3RpZnlfY2hlY2soZW5pYyk7Ci0Jdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX01TSVhfTk9USUZZXSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01NzAsMTEgKzU3NSwxMSBAQAogCSAqIHRvIGVhY2ggVENQIHNlZ21lbnQgcmVzdWx0aW5nIGZyb20gdGhlIFRTTy4KIAkgKi8KIAotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCWlwX2hkcihza2IpLT5jaGVjayA9IDA7CiAJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktPnNhZGRyLAogCQkJaXBfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikpIHsKKwl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpIHsKIAkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZfaGRyKHNrYiktPnNhZGRyLAogCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7CiAJfQpAQCAtNjE2LDcgKzYyMSw3IEBACiAJCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnKTsKIH0KIAotLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQgKi8KKy8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgcHJvY2VzcyBjb250ZXh0IHdpdGggQkhzIGRpc2FibGVkLCBvciBCSCAqLwogc3RhdGljIGludCBlbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTY4Myw3ICs2ODgsNyBAQAogCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBzdGF0cy0+cngucnhfYnl0ZXNfb2s7CiAJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBzdGF0cy0+cngucnhfZXJyb3JzOwogCW5ldF9zdGF0cy0+bXVsdGljYXN0ID0gc3RhdHMtPnJ4LnJ4X211bHRpY2FzdF9mcmFtZXNfb2s7Ci0JbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gc3RhdHMtPnJ4LnJ4X2NyY19lcnJvcnM7CisJbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gZW5pYy0+cnFfYmFkX2ZjczsKIAluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgPSBzdGF0cy0+cngucnhfbm9fYnVmczsKIAogCXJldHVybiBuZXRfc3RhdHM7CkBAIC05MjgsMTIgKzkzMyw4IEBACiAKIAlpZiAocGFja2V0X2Vycm9yKSB7CiAKLQkJaWYgKGJ5dGVzX3dyaXR0ZW4gPiAwICYmICFmY3Nfb2spIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCQkiJXM6IHBhY2tldCBlcnJvcjogYmFkIEZDU1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKLQkJfQorCQlpZiAoYnl0ZXNfd3JpdHRlbiA+IDAgJiYgIWZjc19vaykKKwkJCWVuaWMtPnJxX2JhZF9mY3MrKzsKIAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCkBAIC0xMDY4LDggKzEwNjksOCBAQAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQkJbHJvX2ZsdXNoX2FsbCgmZW5pYy0+bHJvX21ncik7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19JTlRYX1dRX1JRXSk7CiAJfQogCiAJcmV0dXJuIHJxX3dvcmtfZG9uZTsKQEAgLTEwOTUsOSArMTA5Niw5IEBACiAKIAkJdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pY19ycV9hbGxvY19idWYpOwogCi0JCS8qIEFjY3VtdWxhdGUgaW50ciBldmVudCBjcmVkaXRzIGZvciB0aGlzIHBvbGxpbmcKKwkJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCiAJCSAqIGN5Y2xlLiAgQW4gaW50ciBldmVudCBpcyB0aGUgY29tcGxldGlvbiBvZiBhCi0JCSAqIGEgV1Egb3IgUlEgcGFja2V0LgorCQkgKiBSUSBwYWNrZXQuCiAJCSAqLwogCiAJCXZuaWNfaW50cl9yZXR1cm5fY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfUlFdLApAQCAtMTExMiw3ICsxMTEzLDcgQEAKIAkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJmVuaWMtPmxyb19tZ3IpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0pOwogCX0KIApAQCAtMTQ2MSw2ICsxNDYyLDI2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBlbmljX3NldF9uaWNjZmcoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJY29uc3QgdTggcnNzX2RlZmF1bHRfY3B1ID0gMDsKKwljb25zdCB1OCByc3NfaGFzaF90eXBlID0gMDsKKwljb25zdCB1OCByc3NfaGFzaF9iaXRzID0gMDsKKwljb25zdCB1OCByc3NfYmFzZV9jcHUgPSAwOworCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOworCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKKwljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKKworCS8qIEVuYWJsZSBWTEFOIHRhZyBzdHJpcHBpbmcuICBSU1Mgbm90IGVuYWJsZWQgKHlldCkuCisJKi8KKworCXJldHVybiBlbmljX3NldF9uaWNfY2ZnKGVuaWMsCisJCXJzc19kZWZhdWx0X2NwdSwgcnNzX2hhc2hfdHlwZSwKKwkJcnNzX2hhc2hfYml0cywgcnNzX2Jhc2VfY3B1LAorCQlyc3NfZW5hYmxlLCB0c29faXBpZF9zcGxpdF9lbiwKKwkJaWdfdmxhbl9zdHJpcF9lbik7Cit9CisKIHN0YXRpYyB2b2lkIGVuaWNfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLCByZXNldCk7CkBAIC0xNDc2LDggKzE0OTcsMTAgQEAKIAogCWVuaWNfc3RvcChlbmljLT5uZXRkZXYpOwogCWVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7CisJdm5pY19kZXZfaW5pdChlbmljLT52ZGV2LCAwKTsKIAllbmljX3Jlc2V0X21jYWRkcnMoZW5pYyk7CiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCWVuaWNfc2V0X25pY2NmZyhlbmljKTsKIAllbmljX29wZW4oZW5pYy0+bmV0ZGV2KTsKIAogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xNjIwLDE0ICsxNjQzLDYgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JY29uc3QgdTggcnNzX2RlZmF1bHRfY3B1ID0gMDsKLQljb25zdCB1OCByc3NfaGFzaF90eXBlID0gMDsKLQljb25zdCB1OCByc3NfaGFzaF9iaXRzID0gMDsKLQljb25zdCB1OCByc3NfYmFzZV9jcHUgPSAwOwotCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOwotCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKLQljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKLQogCS8qIEFsbG9jYXRlIG5ldCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBpbml0aWFsaXplLiAgUHJpdmF0ZQogCSAqIGluc3RhbmNlIGRhdGEgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4KIAkgKi8KQEAgLTE3OTMsMTQgKzE4MDgsNyBAQAogCiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOwogCi0JLyogRW5hYmxlIFZMQU4gdGFnIHN0cmlwcGluZy4gIFJTUyBub3QgZW5hYmxlZCAoeWV0KS4KLQkgKi8KLQotCWVyciA9IGVuaWNfc2V0X25pY19jZmcoZW5pYywKLQkJcnNzX2RlZmF1bHRfY3B1LCByc3NfaGFzaF90eXBlLAotCQlyc3NfaGFzaF9iaXRzLCByc3NfYmFzZV9jcHUsCi0JCXJzc19lbmFibGUsIHRzb19pcGlkX3NwbGl0X2VuLAotCQlpZ192bGFuX3N0cmlwX2VuKTsKKwllcnIgPSBlbmljX3NldF9uaWNjZmcoZW5pYyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiRmFpbGVkIHRvIGNvbmZpZyBuaWMsIGFib3J0aW5nLlxuIik7CkBAIC0xODU4LDcgKzE4NjYsNiBAQAogCWlmICh1c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0KIAllbmljLT5jc3VtX3J4X2VuYWJsZWQgPSBFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKTsKIAogCWVuaWMtPmxyb19tZ3IubWF4X2FnZ3IgPSBFTklDX0xST19NQVhfQUdHUjsKQEAgLTE4NzAsNyArMTg3Nyw2IEBACiAJZW5pYy0+bHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAllbmljLT5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCmluZGV4IDExNzA4NTcuLmUyMWI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKQEAgLTM0LDYgKzM0LDkgQEAKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiB9OwogCisjZGVmaW5lIFZOSUNfREVWX0NBUF9JTklUCTB4MDAwMQorI2RlZmluZSBWTklDX0RFVl9DQVBfUEVSQkkJMHgwMDAyCisKIHN0cnVjdCB2bmljX2RldiB7CiAJdm9pZCAqcHJpdjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKQEAgLTUwLDYgKzUzLDcgQEAKIAlkbWFfYWRkcl90IHN0YXRzX3BhOwogCXN0cnVjdCB2bmljX2RldmNtZF9md19pbmZvICpmd19pbmZvOwogCWRtYV9hZGRyX3QgZndfaW5mb19wYTsKKwl1MzIgY2FwX2ZsYWdzOwogfTsKIAogI2RlZmluZSBWTklDX01BWF9SRVNfSERSX1NJWkUgXApAQCAtNTc1LDkgKzU3OSw5IEBACiB7CiAJdTY0IGEwID0gKHUzMilhcmcsIGExID0gMDsKIAlpbnQgd2FpdCA9IDEwMDA7Ci0gICAgICAgIGludCByID0gMDsKKwlpbnQgciA9IDA7CiAKLQlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCisJaWYgKHZkZXYtPmNhcF9mbGFncyAmIFZOSUNfREVWX0NBUF9JTklUKQogCQlyID0gdm5pY19kZXZfY21kKHZkZXYsIENNRF9JTklULCAmYTAsICZhMSwgd2FpdCk7CiAJZWxzZSB7CiAJCXZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVF92MSwgJmEwLCAmYTEsIHdhaXQpOwpAQCAtNTg3LDggKzU5MSw4IEBACiAJCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX01BQ19BRERSLCAmYTAsICZhMSwgd2FpdCk7CiAJCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX0FERFJfQURELCAmYTAsICZhMSwgd2FpdCk7CiAJCX0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcjsKKwl9CisJcmV0dXJuIHI7CiB9CiAKIGludCB2bmljX2Rldl9saW5rX3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCkBAIC02MjYsNiArNjMwLDIyIEBACiAJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5Lm10dTsKIH0KIAordTMyIHZuaWNfZGV2X2xpbmtfZG93bl9jbnQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQoreworCWlmICghdm5pY19kZXZfbm90aWZ5X3JlYWR5KHZkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2ZGV2LT5ub3RpZnlfY29weS5saW5rX2Rvd25fY250OworfQorCit1MzIgdm5pY19kZXZfbm90aWZ5X3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCit7CisJaWYgKCF2bmljX2Rldl9ub3RpZnlfcmVhZHkodmRldikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5LnN0YXR1czsKK30KKwogdm9pZCB2bmljX2Rldl9zZXRfaW50cl9tb2RlKHN0cnVjdCB2bmljX2RldiAqdmRldiwKIAllbnVtIHZuaWNfZGV2X2ludHJfbW9kZSBpbnRyX21vZGUpCiB7CkBAIC02ODIsNiArNzAyLDExIEBACiAJaWYgKCF2ZGV2LT5kZXZjbWQpCiAJCWdvdG8gZXJyX291dDsKIAorCXZkZXYtPmNhcF9mbGFncyA9IDA7CisKKwlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCisJCXZkZXYtPmNhcF9mbGFncyB8PSBWTklDX0RFVl9DQVBfSU5JVDsKKwogCXJldHVybiB2ZGV2OwogCiBlcnJfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCmluZGV4IGI5ZGMxODIuLjhhYThkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKQEAgLTEwMiw2ICsxMDIsOCBAQAogdTMyIHZuaWNfZGV2X3BvcnRfc3BlZWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHUzMiB2bmljX2Rldl9tc2dfbHZsKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB1MzIgdm5pY19kZXZfbXR1KHN0cnVjdCB2bmljX2RldiAqdmRldik7Cit1MzIgdm5pY19kZXZfbGlua19kb3duX2NudChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwordTMyIHZuaWNfZGV2X25vdGlmeV9zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9jbG9zZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2VuYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2Rpc2FibGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAppbmRleCA4MDYyYzc1Li4yNTg3ZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlDTURfSU5JVF9TVEFUVVMJCT0gX0NNREMoX0NNRF9ESVJfUkVBRCwgX0NNRF9WVFlQRV9BTEwsIDMxKSwKIAogCS8qIElOVDEzIEFQSTogKHU2NClhMD1wYWRkciB0byB2bmljX2ludDEzX3BhcmFtcyBzdHJ1Y3QKLQkgKiAgICAgICAgICAgICh1OClhMT1JTlQxM19DTURfeHh4ICovCisJICogICAgICAgICAgICAodTMyKWExPUlOVDEzX0NNRF94eHggKi8KIAlDTURfSU5UMTMgICAgICAgICAgICAgICA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0ZDLCAzMiksCiAKIAkvKiBsb2dpY2FsIHVwbGluayBlbmFibGUvZGlzYWJsZTogKHU2NClhMDogMC8xPWRpc2FibGUvZW5hYmxlICovCkBAIC0yMDcsNiArMjA3LDExIEBACiAJICogaW46ICAodTMyKWEwPWNtZAogCSAqIG91dDogKHUzMilhMD1lcnJubywgMDp2YWxpZCBjbWQsIGExPXN1cHBvcnRlZCBWTklDX1NURl8qIGJpdHMgKi8KIAlDTURfQ0FQQUJJTElUWQkJPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9BTEwsIDM2KSwKKworCS8qIHBlcnNpc3RlbnQgYmluZGluZyBpbmZvCisJICogaW46ICAodTY0KWEwPXBhZGRyIG9mIGFyZworCSAqICAgICAgKHUzMilhMT1DTURfUEVSQklfWFhYICovCisJQ01EX1BFUkJJICAgICAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9GQywgMzcpLAogfTsKIAogLyogZmxhZ3MgZm9yIENNRF9PUEVOICovCkBAIC0yNTksNiArMjY0LDcgQEAKIAl1MzIgc3RhdHVzOwkJLyogc3RhdHVzIGJpdHMgKHNlZSBWTklDX1NURl8qKSAqLwogCXUzMiBlcnJvcjsJCS8qIGVycm9yIGNvZGUgKHNlZSBFUlJfKikgZm9yIGZpcnN0IEVSUiAqLwogCXUzMiBsaW5rX2Rvd25fY250OwkvKiBydW5uaW5nIGNvdW50IG9mIGxpbmsgZG93biB0cmFuc2l0aW9ucyAqLworCXUzMiBwZXJiaV9yZWJ1aWxkX2NudDsJLyogcnVubmluZyBjb3VudCBvZiBwZXJiaSByZWJ1aWxkcyAqLwogfTsKICNkZWZpbmUgVk5JQ19TVEZfRkFUQUxfRVJSCTB4MDAwMQkvKiBmYXRhbCBmdyBlcnJvciAqLwogI2RlZmluZSBWTklDX1NURl9TVERfUEFVU0UJMHgwMDAyCS8qIHN0YW5kYXJkIGxpbmstbGV2ZWwgcGF1c2Ugb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCmluZGV4IGNlNjMzYTUuLjlhNTM2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaApAQCAtNzYsNiArNzYsMjAgQEAKIAlpb3dyaXRlMzIoaW50X2NyZWRpdF9yZXR1cm4sICZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0X3JldHVybik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZuaWNfaW50cl9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKCZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJdW5zaWduZWQgaW50IGNyZWRpdHMgPSB2bmljX2ludHJfY3JlZGl0cyhpbnRyKTsKKwlpbnQgdW5tYXNrID0gMTsKKwlpbnQgcmVzZXRfdGltZXIgPSAxOworCisJdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKGludHIsIGNyZWRpdHMsIHVubWFzaywgcmVzZXRfdGltZXIpOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiB2bmljX2ludHJfbGVnYWN5X3BiYSh1MzIgX19pb21lbSAqbGVnYWN5X3BiYSkKIHsKIAkvKiByZWFkIFBCQSB3aXRob3V0IGNsZWFyaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggYTUzOWJjMy4uYjYwZTI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTExNCw5ICsxMTE0LDkgQEAKIAogCWlmICgoc3RhdHVzICYgRXBpY05hcGlFdmVudCkgJiYgIWVwLT5yZXNjaGVkdWxlX2luX3BvbGwpIHsKIAkJc3Bpbl9sb2NrKCZlcC0+bmFwaV9sb2NrKTsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmVwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpIHsKIAkJCWVwaWNfbmFwaV9pcnFfb2ZmKGRldiwgZXApOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZXAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZlcC0+bmFwaSk7CiAJCX0gZWxzZQogCQkJZXAtPnJlc2NoZWR1bGVfaW5fcG9sbCsrOwogCQlzcGluX3VubG9jaygmZXAtPm5hcGlfbG9jayk7CkBAIC0xMjkzLDcgKzEyOTMsNyBAQAogCiAJCW1vcmUgPSBlcC0+cmVzY2hlZHVsZV9pbl9wb2xsOwogCQlpZiAoIW1vcmUpIHsKLQkJCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCQlvdXRsKEVwaWNOYXBpRXZlbnQsIGlvYWRkciArIElOVFNUQVQpOwogCQkJZXBpY19uYXBpX2lycV9vbihkZXYsIGVwKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcWwuYyBiL2RyaXZlcnMvbmV0L2VxbC5jCmluZGV4IDQwMTI1NjkuLjUxZWFkNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlhZGRfdGltZXIoJmVxbC0+dGltZXIpOwogfQogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0Y29uc3QgPQogCSJFcXVhbGl6ZXIyMDAyOiBTaW1vbiBKYW5lcyAoc2ltb25AbmNtLmNvbSkgYW5kIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSlcbiI7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXFsX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IGRhZjcyNzJjLi44OTFiZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtOTMsOCArOTMsOCBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOwogCiAKIC8qIFRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIHRvIHVzZSBQQ0kgbWVtb3J5IHNwYWNlLCBob3dldmVyIHNvbWUgeDg2IHN5c3RlbXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5jIGIvZHJpdmVycy9uZXQvZmVjLmMKaW5kZXggMjc2OTA4My4uYTUxNWFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjLmMKQEAgLTM2LDQ2ICszNiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+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+bWFjX2luX3VzZSAmJgorCQkJICAgICgocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLKSA9PQorCQkJICAgICBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpKSB7CisJCQkJLyogcGh5IGlzIGluaXRlZCBieSBtZ210IHVuaXQgKi8KKwkJCQlwaHlpbml0aWFsaXplZCA9IDE7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBQaHkgYWxyZWFkeSBpbml0aWFsaXplZCBieSBtZ210IHVuaXQuXG4iLAorCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCiAJCQl9CiAJCX0KIAl9CkBAIC01OTQ1LDYgKzYwNjMsOCBAQAogCS8qIHJlc3RvcmUgYW55IHBoeSByZWxhdGVkIGNoYW5nZXMgKi8KIAludl9yZXN0b3JlX3BoeShkZXYpOwogCisJbnZfbWdtdF9yZWxlYXNlX3NlbWEoZGV2KTsKKwogCS8qIGZyZWUgYWxsIHN0cnVjdHVyZXMgKi8KIAlmcmVlX3JpbmdzKGRldik7CiAJaW91bm1hcChnZXRfaHdiYXNlKGRldikpOwpAQCAtNTk5NSw2ICs2MTE1LDggQEAKIAlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJd3JpdGVsKG5wLT5zYXZlZF9jb25maWdfc3BhY2VbaV0sIGJhc2UraSpzaXplb2YodTMyKSk7CiAKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIE5WX01TSV9QUklWX09GRlNFVCwgTlZfTVNJX1BSSVZfVkFMVUUpOworCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcmMgPSBudl9vcGVuKGRldik7CkBAIC02MDY4LDExNSArNjE5MCwxMTUgQEAKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogQ0s4MDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQMDQgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzExKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjYpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI4KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMxKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM2KSwKQEAgLTYxODQsMTUgKzYzMDYsMTUgQEAKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXswLH0sCiB9OwpAQCAtNjIyMCw3ICs2MzQyLDcgQEAKIG1vZHVsZV9wYXJhbShtYXhfaW50ZXJydXB0X3dvcmssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgImZvcmNlZGV0aCBtYXhpbXVtIGV2ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKIG1vZHVsZV9wYXJhbShvcHRpbWl6YXRpb25fbW9kZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0aW1pemF0aW9uX21vZGUsICJJbiB0aHJvdWdocHV0IG1vZGUgKDApLCBldmVyeSB0eCAmIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4gSW4gQ1BVIG1vZGUgKDEpLCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiBJbiBkeW5hbWljIG1vZGUgKDIpLCB0aGUgbW9kZSB0b2dnbGVzIGJldHdlZW4gdGhyb3VnaHB1dCBhbmQgQ1BVIG1vZGUgYmFzZWQgb24gbmV0d29yayBsb2FkLiIpOwogbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7CiBtb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggY2U5MDBlNS4uYjAzN2NlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAogCWlmIChyZWNlaXZlZCA8IGJ1ZGdldCkgewogCQkvKiBkb25lICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkoKmZlcC0+b3BzLT5uYXBpX2VuYWJsZV9yeCkoZGV2KTsKIAl9CiAJcmV0dXJuIHJlY2VpdmVkOwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCQkJLyogTk9URTogaXQgaXMgcG9zc2libGUgZm9yIEZDQ3MgaW4gTkFQSSBtb2RlICAgICovCiAJCQkJLyogdG8gc3VibWl0IGEgc3B1cmlvdXMgaW50ZXJydXB0IHdoaWxlIGluIHBvbGwgICovCiAJCQkJaWYgKG5hcGlfb2spCi0JCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmZlcC0+bmFwaSk7CisJCQkJCV9fbmFwaV9zY2hlZHVsZSgmZmVwLT5uYXBpKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA3OWE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtMCwwICsxLDQ2OCBAQAorLyoKKyAqIEZyZWVzY2FsZSBQb3dlclFVSUNDIEV0aGVybmV0IERyaXZlciAtLSBNSUlNIGJ1cyBpbXBsZW1lbnRhdGlvbgorICogUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJTSByZWdzCisgKgorICogQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIEJhc2VkIG9uIGdpYW5mYXJfbWlpLmMgYW5kIHVjY19nZXRoX21paS5jIChMaSBZYW5nLCBLaW0gUGhpbGxpcHMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VjYy5oPgorCisjaW5jbHVkZSAiZ2lhbmZhci5oIgorI2luY2x1ZGUgImZzbF9wcV9tZGlvLmgiCisKKy8qCisgKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCisgKiBvbiB0aGUgYnVzIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBpbnRlcmZhY2UsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKKyAqIGdlbmVyaWMgbWRpbyBidXMgKHRpZWQgdG8gYSBzaW5nbGUgaW50ZXJmYWNlKSwgd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMKKyAqIGRvbmUgYmVmb3JlIHJldHVybmluZy4gVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQorICogdGhlIFRCSSB3aGljaCBjb250cm9sIGludGVyZmFjZXMgbGlrZSBvbmNoaXAgU0VSREVTIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8KKyAqIHRoZSBsb2NhbCBtZGlvIHBpbnMsIHdoaWNoIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvcgorICogY29udHJvbGxpbmcgdGhlIGV4dGVybmFsIFBIWXMsIGZvciBleGFtcGxlLgorICovCitpbnQgZnNsX3BxX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCisJCWludCByZWdudW0sIHUxNiB2YWx1ZSkKK3sKKwkvKiBTZXQgdGhlIFBIWSBhZGRyZXNzIGFuZCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB3ZSB3YW50IHRvIHdyaXRlICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsIChtaWlfaWQgPDwgOCkgfCByZWdudW0pOworCisJLyogV3JpdGUgb3V0IHRoZSB2YWx1ZSB3ZSB3YW50ICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KKwl3aGlsZSAoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBidXMgZm9yIFBIWSBhdCBhZGRyIG1paV9pZCwgcmVnaXN0ZXIgcmVnbnVtLCBhbmQKKyAqIHJldHVybiB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgb3BlcmF0aW9uCisgKiBkb25lIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwKKyAqIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZ2VuZXJpYyBtZGlvIGJ1cworICogVGhpcyBpcyBoZWxwZnVsIGluIHByb2dyYW1taW5nIGludGVyZmFjZXMgbGlrZQorICogdGhlIFRCSSB3aGljaCwgaW4gdHVybiwgY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUworICogYW5kIGFyZSBhbHdheXMgdGllZCB0byB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZQorICogc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZWcuCisgKi8KK2ludCBmc2xfcHFfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLAorCQlpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXUxNiB2YWx1ZTsKKworCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gcmVhZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKKworCS8qIENsZWFyIG1paW1jb20sIGFuZCB0aGVuIGluaXRpYXRlIGEgcmVhZCAqLworCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCAwKTsKKwlvdXRfYmUzMigmcmVncy0+bWlpbWNvbSwgTUlJX1JFQURfQ09NTUFORCk7CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gdG8gZmluaXNoICovCisJd2hpbGUgKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgKE1JSU1JTkRfTk9UVkFMSUQgfCBNSUlNSU5EX0JVU1kpKQorCQljcHVfcmVsYXgoKTsKKworCS8qIEdyYWIgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBmcm9tIG1paW1zdGF0ICovCisJdmFsdWUgPSBpbl9iZTMyKCZyZWdzLT5taWltc3RhdCk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGF0IG1paV9pZCBhdCByZWdpc3RlciByZWdudW0sCisgKiBvbiB0aGUgYnVzLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSByZXR1cm5pbmcuCisgKi8KK2ludCBmc2xfcHFfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCisJLyogV3JpdGUgdG8gdGhlIGxvY2FsIE1JSSByZWdzICovCisJcmV0dXJuKGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHJlZ3MsIG1paV9pZCwgcmVnbnVtLCB2YWx1ZSkpOworfQorCisvKgorICogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCisgKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuCisgKi8KK2ludCBmc2xfcHFfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCit7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OworCisJLyogUmVhZCB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KKwlyZXR1cm4oZnNsX3BxX2xvY2FsX21kaW9fcmVhZChyZWdzLCBtaWlfaWQsIHJlZ251bSkpOworfQorCisvKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7CisJaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOworCisJbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOworCisJLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfUkVTRVQpOworCisJLyogU2V0dXAgdGhlIE1JSSBNZ210IGNsb2NrIHNwZWVkICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfSU5JVF9WQUxVRSk7CisKKwkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLworCXdoaWxlICgoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiBNSUlNSU5EX0JVU1kpICYmIHRpbWVvdXQtLSkKKwkJY3B1X3JlbGF4KCk7CisKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCWlmICh0aW1lb3V0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsCisJCQkJYnVzLT5uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogQWxsb2NhdGUgYW4gYXJyYXkgd2hpY2ggcHJvdmlkZXMgaXJxICNzIGZvciBlYWNoIFBIWSBvbiB0aGUgZ2l2ZW4gYnVzICovCitzdGF0aWMgaW50ICpjcmVhdGVfaXJxX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWludCAqaXJxczsKKwlpbnQgaTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKKworCWlycXMgPSBrY2FsbG9jKFBIWV9NQVhfQUREUiwgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCisJaWYgKCFpcnFzKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKKwkJaXJxc1tpXSA9IFBIWV9QT0xMOworCisJd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wLCBjaGlsZCkpICE9IE5VTEwpIHsKKwkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKKwkJY29uc3QgdTMyICppZDsKKworCQlpZiAoaXJxID09IE5PX0lSUSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CisKKwkJaWYgKCFpZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqaWQgPCBQSFlfTUFYX0FERFIgJiYgKmlkID49IDApCisJCQlpcnFzWyppZF0gPSBpcnE7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCisJCQkJCSIlZCBpcyBub3QgYSB2YWxpZCBQSFkgYWRkcmVzc1xuIiwKKwkJCQkJbnAtPmZ1bGxfbmFtZSwgKmlkKTsKKwl9CisKKwlyZXR1cm4gaXJxczsKK30KKwordm9pZCBmc2xfcHFfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWNvbnN0IHUzMiAqYWRkcjsKKwl1NjQgdGFkZHIgPSBPRl9CQURfQUREUjsKKworCWFkZHIgPSBvZl9nZXRfYWRkcmVzcyhucCwgMCwgTlVMTCwgTlVMTCk7CisJaWYgKGFkZHIpCisJCXRhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIGFkZHIpOworCisJc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJWxseCIsIG5wLT5uYW1lLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXRhZGRyKTsKK30KKworLyogU2NhbiB0aGUgYnVzIGluIHJldmVyc2UsIGxvb2tpbmcgZm9yIGFuIGVtcHR5IHNwb3QgKi8KK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fZmluZF9mcmVlKHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzKQoreworCWludCBpOworCisJZm9yIChpID0gUEhZX01BWF9BRERSOyBpID4gMDsgaS0tKSB7CisJCXUzMiBwaHlfaWQ7CisKKwkJaWYgKGdldF9waHlfaWQobmV3X2J1cywgaSwgJnBoeV9pZCkpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKHBoeV9pZCA9PSAweGZmZmZmZmZmKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGk7Cit9CisKKworI2lmZGVmIENPTkZJR19HSUFORkFSCitzdGF0aWMgdTMyIF9faW9tZW0gKmdldF9nZmFyX3RiaXBhKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzKQoreworCXN0cnVjdCBnZmFyIF9faW9tZW0gKmVuZXRfcmVnczsKKworCS8qCisJICogVGhpcyBpcyBtaWxkbHkgZXZpbCwgYnV0IHNvIGlzIG91ciBoYXJkd2FyZSBmb3IgZG9pbmcgdGhpcy4KKwkgKiBBbHNvLCB3ZSBoYXZlIHRvIGNhc3QgYmFjayB0byBzdHJ1Y3QgZ2ZhciBiZWNhdXNlIG9mCisJICogZGVmaW5pdGlvbiB3ZWlyZG5lc3MgZG9uZSBpbiBnaWFuZmFyLmguCisJICovCisJZW5ldF9yZWdzID0gKHN0cnVjdCBnZmFyIF9faW9tZW0gKikKKwkJKChjaGFyIF9faW9tZW0gKilyZWdzIC0gb2Zmc2V0b2Yoc3RydWN0IGdmYXIsIGdmYXJfbWlpX3JlZ3MpKTsKKworCXJldHVybiAmZW5ldF9yZWdzLT50YmlwYTsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfVUNDX0dFVEgKK3N0YXRpYyBpbnQgZ2V0X3VjY19pZF9mb3JfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgZW5kLCB1MzIgKnVjY19pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgInVjY19nZXRoIikgeworCQlzdHJ1Y3QgcmVzb3VyY2UgdGVtcHJlczsKKworCQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmdGVtcHJlcyk7CisJCWlmIChlcnIpCisJCQljb250aW51ZTsKKworCQkvKiBpZiBvdXIgbWRpbyByZWdzIGZhbGwgd2l0aGluIHRoaXMgVUNDIHJlZ3MgcmFuZ2UgKi8KKwkJaWYgKChzdGFydCA+PSB0ZW1wcmVzLnN0YXJ0KSAmJiAoZW5kIDw9IHRlbXByZXMuZW5kKSkgeworCQkJLyogRmluZCB0aGUgaWQgb2YgdGhlIFVDQyAqLworCQkJY29uc3QgdTMyICppZDsKKworCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjZWxsLWluZGV4IiwgTlVMTCk7CisJCQlpZiAoIWlkKSB7CisJCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJCQlpZiAoIWlkKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJKnVjY19pZCA9ICppZDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKworCitzdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICp0Ymk7CisJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3M7CisJdTMyIF9faW9tZW0gKnRiaXBhOworCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOworCWludCB0YmlhZGRyID0gLTE7CisJdTY0IGFkZHIsIHNpemU7CisJaW50IGVyciA9IDA7CisKKwluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOworCWlmIChOVUxMID09IG5ld19idXMpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV3X2J1cy0+bmFtZSA9ICJGcmVlc2NhbGUgUG93ZXJRVUlDQyBNSUkgQnVzIiwKKwluZXdfYnVzLT5yZWFkID0gJmZzbF9wcV9tZGlvX3JlYWQsCisJbmV3X2J1cy0+d3JpdGUgPSAmZnNsX3BxX21kaW9fd3JpdGUsCisJbmV3X2J1cy0+cmVzZXQgPSAmZnNsX3BxX21kaW9fcmVzZXQsCisJZnNsX3BxX21kaW9fYnVzX25hbWUobmV3X2J1cy0+aWQsIG5wKTsKKworCS8qIFNldCB0aGUgUEhZIGJhc2UgYWRkcmVzcyAqLworCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgb2ZfZ2V0X2FkZHJlc3MobnAsIDAsICZzaXplLCBOVUxMKSk7CisJcmVncyA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7CisKKwlpZiAoTlVMTCA9PSByZWdzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfYnVzOworCX0KKworCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKKworCW5ld19idXMtPmlycSA9IGNyZWF0ZV9pcnFfbWFwKG5wKTsKKworCWlmIChOVUxMID09IG5ld19idXMtPmlycSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl91bm1hcF9yZWdzOworCX0KKworCW5ld19idXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmV3X2J1cyk7CisKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItdGJpIikgfHwKKwkJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZ2lhbmZhciIpKSB7CisjaWZkZWYgQ09ORklHX0dJQU5GQVIKKwkJdGJpcGEgPSBnZXRfZ2Zhcl90YmlwYShyZWdzKTsKKyNlbHNlCisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKyNlbmRpZgorCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsdWNjLW1kaW8iKSB8fAorCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJ1Y2NfZ2V0aF9waHkiKSkgeworI2lmZGVmIENPTkZJR19VQ0NfR0VUSAorCQl1MzIgaWQ7CisKKwkJdGJpcGEgPSAmcmVncy0+dXRiaXBhcjsKKworCQlpZiAoKGVyciA9IGdldF91Y2NfaWRfZm9yX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCAmaWQpKSkKKwkJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKworCQl1Y2Nfc2V0X3FlX211eF9taWlfbW5nKGlkIC0gMSk7CisjZWxzZQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisjZW5kaWYKKwl9IGVsc2UgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisJfQorCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgdGJpKSB7CisJCWlmICghc3RybmNtcCh0YmktPnR5cGUsICJ0YmktcGh5IiwgOCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAodGJpKSB7CisJCWNvbnN0IHUzMiAqcHJvcCA9IG9mX2dldF9wcm9wZXJ0eSh0YmksICJyZWciLCBOVUxMKTsKKworCQlpZiAocHJvcCkKKwkJCXRiaWFkZHIgPSAqcHJvcDsKKwl9CisKKwlpZiAodGJpYWRkciA9PSAtMSkgeworCQlvdXRfYmUzMih0YmlwYSwgMCk7CisKKwkJdGJpYWRkciA9IGZzbF9wcV9tZGlvX2ZpbmRfZnJlZShuZXdfYnVzKTsKKwl9CisKKwkvKgorCSAqIFdlIGRlZmluZSBUQklQQSBhdCAwIHRvIGJlIGlsbGVnYWwsIG9wdGluZyB0byBmYWlsIGZvciBib2FyZHMgdGhhdAorCSAqIGhhdmUgUEhZcyBhdCAxLTMxLCByYXRoZXIgdGhhbiBjaGFuZ2UgdGJpcGEgYW5kIHJlc2Nhbi4KKwkgKi8KKwlpZiAodGJpYWRkciA9PSAwKSB7CisJCWVyciA9IC1FQlVTWTsKKworCQlnb3RvIGVycl9mcmVlX2lycXM7CisJfQorCisJb3V0X2JlMzIodGJpcGEsIHRiaWFkZHIpOworCisJLyoKKwkgKiBUaGUgVEJJUEhZLW9ubHkgYnVzZXMgd2lsbCBmaW5kIFBIWXMgYXQgZXZlcnkgYWRkcmVzcywKKwkgKiBzbyB3ZSBtYXNrIHRoZW0gYWxsIGJ1dCB0aGUgVEJJCisJICovCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSkKKwkJbmV3X2J1cy0+cGh5X21hc2sgPSB+KDEgPDwgdGJpYWRkcik7CisKKwllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOworCisJaWYgKGVycikgeworCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAorCQkJCW5ld19idXMtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX2lycXM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycXM6CisJa2ZyZWUobmV3X2J1cy0+aXJxKTsKK2Vycl91bm1hcF9yZWdzOgorCWlvdW5tYXAocmVncyk7CitlcnJfZnJlZV9idXM6CisJa2ZyZWUobmV3X2J1cyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOworCisJZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CisKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilidXMtPnByaXYpOworCWJ1cy0+cHJpdiA9IE5VTEw7CisJbWRpb2J1c19mcmVlKGJ1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX3BxX21kaW9fbWF0Y2hbXSA9IHsKKwl7CisJCS50eXBlID0gIm1kaW8iLAorCQkuY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aF9waHkiLAorCX0sCisJeworCQkudHlwZSA9ICJtZGlvIiwKKwkJLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmc2xfcHFfbWRpb19kcml2ZXIgPSB7CisJLm5hbWUgPSAiZnNsLXBxX21kaW8iLAorCS5wcm9iZSA9IGZzbF9wcV9tZGlvX3Byb2JlLAorCS5yZW1vdmUgPSBmc2xfcHFfbWRpb19yZW1vdmUsCisJLm1hdGNoX3RhYmxlID0gZnNsX3BxX21kaW9fbWF0Y2gsCit9OworCitpbnQgX19pbml0IGZzbF9wcV9tZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmc2xfcHFfbWRpb19kcml2ZXIpOworfQorCit2b2lkIGZzbF9wcV9tZGlvX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsX3BxX21kaW9fZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbF9zeW5jKGZzbF9wcV9tZGlvX2luaXQpOworbW9kdWxlX2V4aXQoZnNsX3BxX21kaW9fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5oIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRhZDUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogRnJlZXNjYWxlIFBvd2VyUVVJQ0MgTURJTyBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCisgKiBEcml2ZXIgZm9yIHRoZSBNRElPIGJ1cyBjb250cm9sbGVyIG9uIEZyZWVzY2FsZSBQb3dlclFVSUNDIHByb2Nlc3NvcnMKKyAqCisgKiBBdXRob3I6IEFuZHkgRmxlbWluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2lmbmRlZiBfX0ZTTF9QUV9NRElPX0gKKyNkZWZpbmUgX19GU0xfUFFfTURJT19ICisKKyNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNSUlNSU5EX05PVFZBTElEICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1JSU1DRkdfSU5JVF9WQUxVRQkweDAwMDAwMDA3CisjZGVmaW5lIE1JSU1DRkdfUkVTRVQgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBNSUlfUkVBRF9DT01NQU5EICAgICAgIDB4MDAwMDAwMDEKKworc3RydWN0IGZzbF9wcV9tZGlvIHsKKwl1MzIgbWlpbWNmZzsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gcmVnICovCisJdTMyIG1paW1jb207CQkvKiBNSUkgbWFuYWdlbWVudCBjb21tYW5kIHJlZyAqLworCXUzMiBtaWltYWRkOwkJLyogTUlJIG1hbmFnZW1lbnQgYWRkcmVzcyByZWcgKi8KKwl1MzIgbWlpbWNvbjsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnICovCisJdTMyIG1paW1zdGF0OwkJLyogTUlJIG1hbmFnZW1lbnQgc3RhdHVzIHJlZyAqLworCXUzMiBtaWltaW5kOwkJLyogTUlJIG1hbmFnZW1lbnQgaW5kaWNhdGlvbiByZWcgKi8KKwl1OCByZXNlcnZlZFsyOF07CS8qIFNwYWNlIGhvbGRlciAqLworCXUzMiB1dGJpcGFyOwkJLyogVEJJIHBoeSBhZGRyZXNzIHJlZyAob25seSBvbiBVQ0MpICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitpbnQgZnNsX3BxX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK2ludCBmc2xfcHFfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAorCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pOworaW50IF9faW5pdCBmc2xfcHFfbWRpb19pbml0KHZvaWQpOwordm9pZCBmc2xfcHFfbWRpb19leGl0KHZvaWQpOwordm9pZCBmc2xfcHFfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKKyNlbmRpZiAvKiBGU0xfUFFfTURJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggOTgzMWIzZi4uOWQ4MWU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtOTMsNyArOTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlICJnaWFuZmFyLmgiCi0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKKyNpbmNsdWRlICJmc2xfcHFfbWRpby5oIgogCiAjZGVmaW5lIFRYX1RJTUVPVVQgICAgICAoMSpIWikKICN1bmRlZiBCUklFRl9HRkFSX0VSUk9SUwpAQCAtMTQwLDEzICsxNDAsMjYgQEAKIHZvaWQgZ2Zhcl9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfY2xlYXJfZXhhY3RfbWF0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX3NldF9tYWNfZm9yX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSwgdTggKmFkZHIpOwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGdmYXJfZXRodG9vbF9vcHM7CitzdGF0aWMgaW50IGdmYXJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiAKIE1PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZmFyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2Zhcl9lbmV0X29wZW4sCisJLm5kb19zdGFydF94bWl0ID0gZ2Zhcl9zdGFydF94bWl0LAorCS5uZG9fc3RvcCA9IGdmYXJfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGksCisJLm5kb190eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0LAorCS5uZG9fZG9faW9jdGwgPSBnZmFyX2lvY3RsLAorCS5uZG9fdmxhbl9yeF9yZWdpc3RlciA9IGdmYXJfdmxhbl9yeF9yZWdpc3RlciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2Zhcl9uZXRwb2xsLAorI2VuZGlmCit9OworCiAvKiBSZXR1cm5zIDEgaWYgaW5jb21pbmcgZnJhbWVzIHVzZSBhbiBGQ0IgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdmYXJfdXNlc19mY2Ioc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTE2Niw2ICsxNzksOSBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwcml2LT5ub2RlOwogCWNoYXIgYnVzX25hbWVbTUlJX0JVU19JRF9TSVpFXTsKKwljb25zdCB1MzIgKnN0YXNoOworCWNvbnN0IHUzMiAqc3Rhc2hfbGVuOworCWNvbnN0IHUzMiAqc3Rhc2hfaWR4OwogCiAJaWYgKCFucCB8fCAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTk1LDYgKzIxMSwyNiBAQAogCQl9CiAJfQogCisJc3Rhc2ggPSBvZl9nZXRfcHJvcGVydHkobnAsICJiZC1zdGFzaCIsIE5VTEwpOworCisJaWYoc3Rhc2gpIHsKKwkJcHJpdi0+ZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQkRfU1RBU0hJTkc7CisJCXByaXYtPmJkX3N0YXNoX2VuID0gMTsKKwl9CisKKwlzdGFzaF9sZW4gPSBvZl9nZXRfcHJvcGVydHkobnAsICJyeC1zdGFzaC1sZW4iLCBOVUxMKTsKKworCWlmIChzdGFzaF9sZW4pCisJCXByaXYtPnJ4X3N0YXNoX3NpemUgPSAqc3Rhc2hfbGVuOworCisJc3Rhc2hfaWR4ID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicngtc3Rhc2gtaWR4IiwgTlVMTCk7CisKKwlpZiAoc3Rhc2hfaWR4KQorCQlwcml2LT5yeF9zdGFzaF9pbmRleCA9ICpzdGFzaF9pZHg7CisKKwlpZiAoc3Rhc2hfbGVuIHx8IHN0YXNoX2lkeCkKKwkJcHJpdi0+ZGV2aWNlX2ZsYWdzIHw9IEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HOworCiAJbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MobnApOwogCWlmIChtYWNfYWRkcikKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG1hY19hZGRyLCBNQUNfQUREUl9MRU4pOwpAQCAtMjU1LDcgKzI5MSw3IEBACiAJCW9mX25vZGVfcHV0KHBoeSk7CiAJCW9mX25vZGVfcHV0KG1kaW8pOwogCi0JCWdmYXJfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CisJCWZzbF9wcV9tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKIAkJc25wcmludGYocHJpdi0+cGh5X2J1c19pZCwgc2l6ZW9mKHByaXYtPnBoeV9idXNfaWQpLCAiJXM6JTAyeCIsCiAJCQkJYnVzX25hbWUsICppZCk7CiAJfQpAQCAtMzI5LDggKzM2NSwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPmRldiA9IGRldjsKKwlwcml2LT5uZGV2ID0gZGV2OworCXByaXYtPm9mZGV2ID0gb2ZkZXY7CiAJcHJpdi0+bm9kZSA9IG9mZGV2LT5ub2RlOworCVNFVF9ORVRERVZfREVWKGRldiwgJm9mZGV2LT5kZXYpOwogCiAJZXJyID0gZ2Zhcl9vZl9pbml0KGRldik7CiAKQEAgLTM2OSwyMSArNDA3LDEyIEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb2ZkZXYtPmRldik7CiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCi0JZGV2LT5vcGVuID0gZ2Zhcl9lbmV0X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBnZmFyX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIGdmYXJfcG9sbCwgR0ZBUl9ERVZfV0VJR0hUKTsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZ2Zhcl9uZXRwb2xsOwotI2VuZGlmCi0JZGV2LT5zdG9wID0gZ2Zhcl9jbG9zZTsKLQlkZXYtPmNoYW5nZV9tdHUgPSBnZmFyX2NoYW5nZV9tdHU7CiAJZGV2LT5tdHUgPSAxNTAwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGk7CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmZ2Zhcl9uZXRkZXZfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmZ2Zhcl9ldGh0b29sX29wczsKLQlkZXYtPmRvX2lvY3RsID0gZ2Zhcl9pb2N0bDsKIAogCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pIHsKIAkJcHJpdi0+cnhfY3N1bV9lbmFibGUgPSAxOwpAQCAtMzkzLDExICs0MjIsOCBAQAogCiAJcHJpdi0+dmxncnAgPSBOVUxMOwogCi0JaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTikgewotCQlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0KKwlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQl9CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIKSB7CiAJCXByaXYtPmV4dGVuZGVkX2hhc2ggPSAxOwpAQCAtNDI1LDcgKzQ1MSw3IEBACiAJCXByaXYtPmhhc2hfd2lkdGggPSA4OwogCiAJCXByaXYtPmhhc2hfcmVnc1swXSA9ICZwcml2LT5yZWdzLT5nYWRkcjA7Ci0gICAgICAgICAgICAgICAgcHJpdi0+aGFzaF9yZWdzWzFdID0gJnByaXYtPnJlZ3MtPmdhZGRyMTsKKwkJcHJpdi0+aGFzaF9yZWdzWzFdID0gJnByaXYtPnJlZ3MtPmdhZGRyMTsKIAkJcHJpdi0+aGFzaF9yZWdzWzJdID0gJnByaXYtPnJlZ3MtPmdhZGRyMjsKIAkJcHJpdi0+aGFzaF9yZWdzWzNdID0gJnByaXYtPnJlZ3MtPmdhZGRyMzsKIAkJcHJpdi0+aGFzaF9yZWdzWzRdID0gJnByaXYtPnJlZ3MtPmdhZGRyNDsKQEAgLTQ2Niw2ICs0OTIsOSBAQAogCQlnb3RvIHJlZ2lzdGVyX2ZhaWw7CiAJfQogCisJZGV2aWNlX2luaXRfd2FrZXVwKCZkZXYtPmRldiwKKwkJcHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQpOworCiAJLyogZmlsbCBvdXQgSVJRIG51bWJlciBhbmQgbmFtZSBmaWVsZHMgKi8KIAlsZW5fZGV2bmFtZSA9IHN0cmxlbihkZXYtPm5hbWUpOwogCXN0cm5jcHkoJnByaXYtPmludF9uYW1lX3R4WzBdLCBkZXYtPm5hbWUsIGxlbl9kZXZuYW1lKTsKQEAgLTUxMSw3ICs1NDAsNyBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgTlVMTCk7CiAKIAlpb3VubWFwKHByaXYtPnJlZ3MpOwotCWZyZWVfbmV0ZGV2KHByaXYtPmRldik7CisJZnJlZV9uZXRkZXYocHJpdi0+bmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMCw3ICs1NDksNyBAQAogc3RhdGljIGludCBnZmFyX3N1c3BlbmQoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXB2YWw7CiAKQEAgLTU2OSw3ICs1OTgsNyBAQAogc3RhdGljIGludCBnZmFyX3Jlc3VtZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXB2YWw7CiAJaW50IG1hZ2ljX3BhY2tldCA9IHByaXYtPndvbF9lbiAmJgpAQCAtODM4LDEyICs4NjcsMTIgQEAKIAkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CiAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFJlY2VpdmUsIGRldik7CiAJfSBlbHNlIHsKLSAJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0LCBkZXYpOworCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKIAl9CiAKIAlmcmVlX3NrYl9yZXNvdXJjZXMocHJpdik7CiAKLQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsCisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHR4YmQ4KSpwcml2LT50eF9yaW5nX3NpemUKIAkJCSsgc2l6ZW9mKHN0cnVjdCByeGJkOCkqcHJpdi0+cnhfcmluZ19zaXplLAogCQkJcHJpdi0+dHhfYmRfYmFzZSwKQEAgLTg2NSwxMiArODk0LDEyIEBACiAJCWlmICghcHJpdi0+dHhfc2tidWZmW2ldKQogCQkJY29udGludWU7CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCiAJCQkJdHhiZHAtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCXR4YmRwLT5sc3RhdHVzID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IHNrYl9zaGluZm8ocHJpdi0+dHhfc2tidWZmW2ldKS0+bnJfZnJhZ3M7IGorKykgewogCQkJdHhiZHArKzsKLQkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5kZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKKwkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAogCQkJCQl0eGJkcC0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAkJfQogCQl0eGJkcCsrOwpAQCAtODg3LDcgKzkxNiw3IEBACiAJaWYocHJpdi0+cnhfc2tidWZmICE9IE5VTEwpIHsKIAkJZm9yIChpID0gMDsgaSA8IHByaXYtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCQlpZiAocHJpdi0+cnhfc2tidWZmW2ldKSB7Ci0JCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+ZGV2LT5kZXYsIHJ4YmRwLT5idWZQdHIsCisJCQkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgcnhiZHAtPmJ1ZlB0ciwKIAkJCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLAogCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIApAQCAtOTUzLDcgKzk4Miw3IEBACiAJZ2Zhcl93cml0ZSgmcmVncy0+aW1hc2ssIElNQVNLX0lOSVRfQ0xFQVIpOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0JdmFkZHIgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPmRldiwKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBkbWFfYWxsb2NfY29oZXJlbnQoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQlzaXplb2YgKHN0cnVjdCB0eGJkOCkgKiBwcml2LT50eF9yaW5nX3NpemUgKwogCQkJc2l6ZW9mIChzdHJ1Y3QgcnhiZDgpICogcHJpdi0+cnhfcmluZ19zaXplLAogCQkJJmFkZHIsIEdGUF9LRVJORUwpOwpAQCAtMTE2NSw3ICsxMTk0LDcgQEAKIHJ4X3NrYl9mYWlsOgogCWZyZWVfc2tiX3Jlc291cmNlcyhwcml2KTsKIHR4X3NrYl9mYWlsOgotCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCXNpemVvZihzdHJ1Y3QgdHhiZDgpKnByaXYtPnR4X3Jpbmdfc2l6ZQogCQkJKyBzaXplb2Yoc3RydWN0IHJ4YmQ4KSpwcml2LT5yeF9yaW5nX3NpemUsCiAJCQlwcml2LT50eF9iZF9iYXNlLApAQCAtMTE4Myw2ICsxMjEyLDggQEAKIAogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3JlY3ljbGUpOworCiAJLyogSW5pdGlhbGl6ZSBhIGJ1bmNoIG9mIHJlZ2lzdGVycyAqLwogCWluaXRfcmVnaXN0ZXJzKGRldik7CiAKQEAgLTEyMDMsMTMgKzEyMzQsMjQgQEAKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCBwcml2LT53b2xfZW4pOworCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHhmY2IgKmdmYXJfYWRkX2ZjYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdHhmY2IgKmdmYXJfYWRkX2ZjYihzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApCiB7Ci0Jc3RydWN0IHR4ZmNiICpmY2IgPSAoc3RydWN0IHR4ZmNiICopc2tiX3B1c2ggKHNrYiwgR01BQ19GQ0JfTEVOKTsKKwlzdHJ1Y3QgdHhmY2IgKmZjYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYnA7CiAKKwlpZiAodW5saWtlbHkoc2tiX2hlYWRyb29tKHNrYikgPCBHTUFDX0ZDQl9MRU4pKSB7CisJCXN0cnVjdCBza19idWZmICpvbGRfc2tiID0gc2tiOworCQlza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShvbGRfc2tiLCBHTUFDX0ZDQl9MRU4pOworCQlpZiAoIXNrYikKKwkJCXJldHVybiBOVUxMOworCQlkZXZfa2ZyZWVfc2tiX2FueShvbGRfc2tiKTsKKwl9CisJZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoKHNrYiwgR01BQ19GQ0JfTEVOKTsKIAljYWNoZWFibGVfbWVtemVybyhmY2IsIEdNQUNfRkNCX0xFTik7CiAKIAlyZXR1cm4gZmNiOwpAQCAtMTMxNCw3ICsxMzU2LDcgQEAKIAkJCWlmIChpID09IG5yX2ZyYWdzIC0gMSkKIAkJCQlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfTEFTVCB8IFRYQkRfSU5URVJSVVBUKTsKIAotCQkJYnVmYWRkciA9IGRtYV9tYXBfcGFnZSgmZGV2LT5kZXYsCisJCQlidWZhZGRyID0gZG1hX21hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LAogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2UsCiAJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQsCiAJCQkJCWxlbmd0aCwKQEAgLTEzMzAsMjMgKzEzNzIsMjUgQEAKIAogCS8qIFNldCB1cCBjaGVja3N1bW1pbmcgKi8KIAlpZiAoQ0hFQ0tTVU1fUEFSVElBTCA9PSBza2ItPmlwX3N1bW1lZCkgewotCQlmY2IgPSBnZmFyX2FkZF9mY2Ioc2tiKTsKLQkJbHN0YXR1cyB8PSBCRF9MRkxBRyhUWEJEX1RPRSk7Ci0JCWdmYXJfdHhfY2hlY2tzdW0oc2tiLCBmY2IpOworCQlmY2IgPSBnZmFyX2FkZF9mY2IoJnNrYik7CisJCWlmIChsaWtlbHkoZmNiICE9IE5VTEwpKSB7CisJCQlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfVE9FKTsKKwkJCWdmYXJfdHhfY2hlY2tzdW0oc2tiLCBmY2IpOworCQl9CiAJfQogCiAJaWYgKHByaXYtPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQlpZiAodW5saWtlbHkoTlVMTCA9PSBmY2IpKSB7Ci0JCQlmY2IgPSBnZmFyX2FkZF9mY2Ioc2tiKTsKKwkJaWYgKHVubGlrZWx5KE5VTEwgPT0gZmNiKSkKKwkJCWZjYiA9IGdmYXJfYWRkX2ZjYigmc2tiKTsKKwkJaWYgKGxpa2VseShmY2IgIT0gTlVMTCkpIHsKIAkJCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9UT0UpOworCQkJZ2Zhcl90eF92bGFuKHNrYiwgZmNiKTsKIAkJfQotCi0JCWdmYXJfdHhfdmxhbihza2IsIGZjYik7CiAJfQogCiAJLyogc2V0dXAgdGhlIFR4QkQgbGVuZ3RoIGFuZCBidWZmZXIgcG9pbnRlciBmb3IgdGhlIGZpcnN0IEJEICovCiAJcHJpdi0+dHhfc2tidWZmW3ByaXYtPnNrYl9jdXJ0eF0gPSBza2I7Ci0JdHhiZHBfc3RhcnQtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCXR4YmRwX3N0YXJ0LT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgc2tiLT5kYXRhLAogCQkJc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CiAKIAlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfQ1JDIHwgVFhCRF9SRUFEWSkgfCBza2JfaGVhZGxlbihza2IpOwpAQCAtMTM5OSw2ICsxNDQzLDcgQEAKIAogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnJ4X3JlY3ljbGUpOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnJlc2V0X3Rhc2spOwogCXN0b3BfZ2ZhcihkZXYpOwogCkBAIC0xNTMxLDcgKzE1NzYsNyBAQAogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGdmYXJfcHJpdmF0ZSwKIAkJCXJlc2V0X3Rhc2spOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgewogCQlzdG9wX2dmYXIoZGV2KTsKQEAgLTE1NzgsNyArMTYyMyw3IEBACiAJCQkJKGxzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSykpCiAJCQlicmVhazsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPmRldiwKKwkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQliZHAtPmJ1ZlB0ciwKIAkJCQliZHAtPmxlbmd0aCwKIAkJCQlETUFfVE9fREVWSUNFKTsKQEAgLTE1ODcsNyArMTYzMiw3IEBACiAJCWJkcCA9IG5leHRfdHhiZChiZHAsIGJhc2UsIHR4X3Jpbmdfc2l6ZSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGZyYWdzOyBpKyspIHsKLQkJCWRtYV91bm1hcF9wYWdlKCZkZXYtPmRldiwKKwkJCWRtYV91bm1hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LAogCQkJCQliZHAtPmJ1ZlB0ciwKIAkJCQkJYmRwLT5sZW5ndGgsCiAJCQkJCURNQV9UT19ERVZJQ0UpOwpAQCAtMTU5NSw3ICsxNjQwLDE3IEBACiAJCQliZHAgPSBuZXh0X3R4YmQoYmRwLCBiYXNlLCB0eF9yaW5nX3NpemUpOwogCQl9CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJLyoKKwkJICogSWYgdGhlcmUncyByb29tIGluIHRoZSBxdWV1ZSAobGltaXQgaXQgdG8gcnhfYnVmZmVyX3NpemUpCisJCSAqIHdlIGFkZCB0aGlzIHNrYiBiYWNrIGludG8gdGhlIHBvb2wsIGlmIGl0J3MgdGhlIHJpZ2h0IHNpemUKKwkJICovCisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9yZWN5Y2xlKSA8IHByaXYtPnJ4X3Jpbmdfc2l6ZSAmJgorCQkJCXNrYl9yZWN5Y2xlX2NoZWNrKHNrYiwgcHJpdi0+cnhfYnVmZmVyX3NpemUgKworCQkJCQlSWEJVRl9BTElHTk1FTlQpKQorCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKKwkJZWxzZQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwogCQlwcml2LT50eF9za2J1ZmZbc2tiX2RpcnR5dHhdID0gTlVMTDsKIAogCQlza2JfZGlydHl0eCA9IChza2JfZGlydHl0eCArIDEpICYKQEAgLTE2MjYsOSArMTY4MSw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4bG9jaywgZmxhZ3MpOwogCXNwaW5fbG9jaygmcHJpdi0+cnhsb2NrKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPmltYXNrLCBJTUFTS19SVFhfRElTQUJMRUQpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBDbGVhciBJRVZFTlQsIHNvIGludGVycnVwdHMgYXJlbid0IGNhbGxlZCBhZ2FpbgpAQCAtMTY1NCw3ICsxNzA5LDcgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbHN0YXR1czsKIAotCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCisJYmRwLT5idWZQdHIgPSBkbWFfbWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgc2tiLT5kYXRhLAogCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAlsc3RhdHVzID0gQkRfTEZMQUcoUlhCRF9FTVBUWSB8IFJYQkRfSU5URVJSVVBUKTsKQEAgLTE2NzQsOCArMTcyOSwxMCBAQAogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCi0JLyogV2UgaGF2ZSB0byBhbGxvY2F0ZSB0aGUgc2tiLCBzbyBrZWVwIHRyeWluZyB0aWxsIHdlIHN1Y2NlZWQgKi8KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQpOworCXNrYiA9IF9fc2tiX2RlcXVldWUoJnByaXYtPnJ4X3JlY3ljbGUpOworCWlmICghc2tiKQorCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwKKwkJCQlwcml2LT5yeF9idWZmZXJfc2l6ZSArIFJYQlVGX0FMSUdOTUVOVCk7CiAKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5VTEw7CkBAIC0xODEyLDcgKzE4NjksNyBAQAogCiAJCXNrYiA9IHByaXYtPnJ4X3NrYnVmZltwcml2LT5za2JfY3VycnhdOwogCi0JCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPmRldi0+ZGV2LCBiZHAtPmJ1ZlB0ciwKKwkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgYmRwLT5idWZQdHIsCiAJCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJLyogV2UgZHJvcCB0aGUgZnJhbWUgaWYgd2UgZmFpbGVkIHRvIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciAqLwpAQCAtMTgyMyw3ICsxODgwLDcgQEAKIAkJCWlmICh1bmxpa2VseSghbmV3c2tiKSkKIAkJCQluZXdza2IgPSBza2I7CiAJCQllbHNlIGlmIChza2IpCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZwcml2LT5yeF9yZWN5Y2xlLCBza2IpOwogCQl9IGVsc2UgewogCQkJLyogSW5jcmVtZW50IHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwogCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0xODM1LDYgKzE4OTIsOCBAQAogCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKKwkJCQlpZiAoaW5faXJxKCkgfHwgaXJxc19kaXNhYmxlZCgpKQorCQkJCQlwcmludGsoIkludGVycnVwdCBwcm9ibGVtIVxuIik7CiAJCQkJZ2Zhcl9wcm9jZXNzX2ZyYW1lKGRldiwgc2tiLCBhbW91bnRfcHVsbCk7CiAKIAkJCX0gZWxzZSB7CkBAIC0xODcwLDcgKzE5MjksNyBAQAogc3RhdGljIGludCBnZmFyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGdmYXJfcHJpdmF0ZSwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlpbnQgdHhfY2xlYW5lZCA9IDA7CiAJaW50IHJ4X2NsZWFuZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xODkxLDcgKzE5NTAsNyBAQAogCQlyZXR1cm4gYnVkZ2V0OwogCiAJaWYgKHJ4X2NsZWFuZWQgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJLyogQ2xlYXIgdGhlIGhhbHQgYml0IGluIFJTVEFUICovCiAJCWdmYXJfd3JpdGUoJnByaXYtPnJlZ3MtPnJzdGF0LCBSU1RBVF9DTEVBUl9SSEFMVCk7CkBAIC0yMzA4LDIzICsyMzY3LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdmYXJfaW5pdCh2b2lkKQogewotCWludCBlcnIgPSBnZmFyX21kaW9faW5pdCgpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2Zhcl9kcml2ZXIpOwotCi0JaWYgKGVycikKLQkJZ2Zhcl9tZGlvX2V4aXQoKTsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2Zhcl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2Zhcl9leGl0KHZvaWQpCiB7CiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKLQlnZmFyX21kaW9fZXhpdCgpOwogfQogCiBtb2R1bGVfaW5pdChnZmFyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGVhYTg2ODkuLmRkNDk5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+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+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7CiAKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHlhbV9zZXRfbWFjX2FkZHJlc3M7Ci0KIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVgyNTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEFYMjVfTUFYX0hFQURFUl9MRU47CiAJZGV2LT5tdHUgPSBBWDI1X01UVTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwppbmRleCA2ZmQ3YWE2Li5hODE1ZTE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJICBFTUFDX0ZUUl80NDBFUF9QSFlfQ0xLX0ZJWCkpCiAJCURCRyhkZXYsICIlcyIgTkwsIGVycm9yKTsKIAllbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkZXYtPm5kZXYtPm5hbWUsIGVycm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXNcbiIsIGRldi0+b2ZkZXYtPm5vZGUtPmZ1bGxfbmFtZSwgZXJyb3IpOwogfQogCiAvKiBFTUFDIFBIWSBjbG9jayB3b3JrYXJvdW5kOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGRmYTYzNDguLjVjNjMxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTEwMjgsMTAgKzEwMjgsMTAgQEAKIAogCQlpYm12ZXRoX2Fzc2VydChscGFyX3JjID09IEhfU1VDQ0VTUyk7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaWYgKGlibXZldGhfcnhxX3BlbmRpbmdfYnVmZmVyKGFkYXB0ZXIpICYmCi0JCSAgICBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKSB7CisJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpIHsKIAkJCWxwYXJfcmMgPSBoX3Zpb19zaWduYWwoYWRhcHRlci0+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+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19zaXJfb3BzOwogCX0KIAkKIAkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKaW5kZXggM2EyMmRjNC4uMDA2YmEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwpAQCAtMTQwMSw2ICsxNDAxLDE0IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXJkYV91c2JfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBpcmRhX3VzYl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBpcmRhX3VzYl9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgID0gaXJkYV91c2JfbmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdCA9IGlyZGFfdXNiX2hhcmRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSBpcmRhX3VzYl9uZXRfdGltZW91dCwKK307CisKIC8qCiAgKiBJbml0aWFsaXNlIHRoZSBuZXR3b3JrIHNpZGUgb2YgdGhlIGlyZGEtdXNiIGluc3RhbmNlCiAgKiBDYWxsZWQgd2hlbiBhIG5ldyBVU0IgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCBpbiBpcmRhX3VzYl9wcm9iZSgpCkBAIC0xNDExLDE1ICsxNDE5LDkgQEAKIAogCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWlyZGFfdXNiX2luaXRfcW9zKHNlbGYpOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZpcmRhX3VzYl9uZXRkZXZfb3BzOwogCi0JLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpcmRhX3VzYl9oYXJkX3htaXQ7Ci0JbmV0ZGV2LT50eF90aW1lb3V0CT0gaXJkYV91c2JfbmV0X3RpbWVvdXQ7Ci0JbmV0ZGV2LT53YXRjaGRvZ190aW1lbyAgPSAyNTAqSFovMTAwMDsJLyogMjUwIG1zID4gVVNCIHRpbWVvdXQgKi8KLQluZXRkZXYtPm9wZW4gICAgICAgICAgICA9IGlyZGFfdXNiX25ldF9vcGVuOwotCW5ldGRldi0+c3RvcCAgICAgICAgICAgID0gaXJkYV91c2JfbmV0X2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgICAgICAgID0gaXJkYV91c2JfbmV0X2lvY3RsOworCWlyZGFfdXNiX2luaXRfcW9zKHNlbGYpOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IGI0YTYxNzEuLjlkODEzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTQxOCw2ICs0MTgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtpbmdzdW5fb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGtpbmdzdW5faGFyZF94bWl0LAorCS5uZG9fb3BlbiAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICA9IGtpbmdzdW5fbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgICAgICAgID0ga2luZ3N1bl9uZXRfaW9jdGwsCit9OwogCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCkBAIC01MjAsMTAgKzUyNiw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQ7Ci0JbmV0LT5vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuOwotCW5ldC0+c3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCAgICAgICAgPSBraW5nc3VuX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma2luZ3N1bl9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCA1NTMyMmZiLi5iNmZmZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKQEAgLTY2OCw2ICs2NjgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtzOTU5X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBrczk1OV9oYXJkX3htaXQsCisJLm5kb19vcGVuCT0ga3M5NTlfbmV0X29wZW4sCisJLm5kb19zdG9wCT0ga3M5NTlfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBrczk1OV9uZXRfaW9jdGwsCit9OwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtNzgwLDEwICs3ODYsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtzOTU5X2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gPSBrczk1OV9uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBrczk1OV9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCA9IGtzOTU5X25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma3M5NTlfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggNWIzMjdiMC4uNjRkZjI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC01NjIsNiArNTYyLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBrc2RhenpsZV9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0ga3NkYXp6bGVfaGFyZF94bWl0LAorCS5uZG9fb3Blbgk9IGtzZGF6emxlX25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGtzZGF6emxlX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0ga3NkYXp6bGVfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtNjg0LDEwICs2OTEsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtzZGF6emxlX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gPSBrc2RhenpsZV9uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBrc2RhenpsZV9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCA9IGtzZGF6emxlX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma3NkYXp6bGVfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwppbmRleCA4NWU4OGRhLi5mYWM1MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtODczLDYgKzg3MywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWNzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbWNzX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IG1jc19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbWNzX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsID0gbWNzX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlIGluIHRoZQogICogc3lzdGVtLiAgTmVlZCB0byB2ZXJpZnkgdGhlIGRldmljZSBhbmQgaWYgaXQgaXMsIHRoZW4gc3RhcnQgaGFuZGxpbmcgaXQuCkBAIC05MTksMTEgKzkyNiw3IEBACiAJLyogU3BlZWQgY2hhbmdlIHdvcmsgaW5pdGlhbGlzYXRpb24qLwogCUlOSVRfV09SSygmbWNzLT53b3JrLCBtY3Nfc3BlZWRfd29yayk7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtY3NfaGFyZF94bWl0OwotCW5kZXYtPm9wZW4gPSBtY3NfbmV0X29wZW47Ci0JbmRldi0+c3RvcCA9IG1jc19uZXRfY2xvc2U7Ci0JbmRldi0+ZG9faW9jdGwgPSBtY3NfbmV0X2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMgPSAmbWNzX25ldGRldl9vcHM7CiAKIAlpZiAoIWludGYtPmN1cl9hbHRzZXR0aW5nKQogCQlnb3RvIGVycm9yMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwppbmRleCA2MWU1MDljLi40NWZkOWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCkBAIC0zMzEsNiArMzMxLDIwIEBACiAJcG5wX3JlZ2lzdGVyZWQgPSAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zY19pcmNjX3Npcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gbnNjX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXIsCisJLm5kb19kb19pb2N0bCAgID0gbnNjX2lyY2NfbmV0X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2NfaXJjY19maXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IG5zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG5zY19pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfZmlyLAorCS5uZG9fZG9faW9jdGwgICA9IG5zY19pcmNjX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBuc2NfaXJjY19vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC00NDEsMTAgKzQ1NSw3IEBACiAJc2VsZi0+dHhfZmlmby50YWlsID0gc2VsZi0+dHhfYnVmZi5oZWFkOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfc2lyOwotCWRldi0+b3BlbiAgICAgICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBuc2NfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBuc2NfaXJjY19uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5zY19pcmNjX3Npcl9vcHM7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0xMzIwLDEyICsxMzMxLDEyIEBACiAJc3dpdGNoX2JhbmsoaW9iYXNlLCBCQU5LMCk7IAogCWlmIChzcGVlZCA+IDExNTIwMCkgewogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfZmlyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbnNjX2lyY2NfZmlyX29wczsKIAkJaWVyID0gSUVSX1NGSUZfSUU7CiAJCW5zY19pcmNjX2RtYV9yZWNlaXZlKHNlbGYpOwogCX0gZWxzZSB7CiAJCS8qIEluc3RhbGwgU0lSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZuc2NfaXJjY19zaXJfb3BzOwogCQlpZXIgPSBJRVJfUlhIRExfSUU7CiAJfQogCS8qIFNldCBvdXIgY3VycmVudCBpbnRlcnJ1cHQgbWFzayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwppbmRleCA1YjU4NjI0Li5kOTQwODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwpAQCAtNzUzLDcgKzc1Myw4IEBACiAJZGV2LT5yeF9idWZmLnRydWVzaXplID0gSVJEQV9TS0JfTUFYX01UVTsgCiAKIAkvKiBCb290c3RyYXAgWmVyb0NvcHkgUnggKi8KLQlkZXYtPnJ4X2J1ZmYuc2tiID0gX19kZXZfYWxsb2Nfc2tiKGRldi0+cnhfYnVmZi50cnVlc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5yeF9idWZmLnNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYtPm5ldGRldiwgZGV2LT5yeF9idWZmLnRydWVzaXplLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2LT5yeF9idWZmLnNrYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlza2JfcmVzZXJ2ZShkZXYtPnJ4X2J1ZmYuc2tiLCAxKTsKQEAgLTc3OSw4ICs3ODAsNyBAQAogCiBzdGF0aWMgdm9pZCBzaXJkZXZfZnJlZV9idWZmZXJzKHN0cnVjdCBzaXJfZGV2ICpkZXYpCiB7Ci0JaWYgKGRldi0+cnhfYnVmZi5za2IpCi0JCWtmcmVlX3NrYihkZXYtPnJ4X2J1ZmYuc2tiKTsKKwlrZnJlZV9za2IoZGV2LT5yeF9idWZmLnNrYik7CiAJa2ZyZWUoZGV2LT50eF9idWZmLmhlYWQpOwogCWRldi0+cnhfYnVmZi5oZWFkID0gZGV2LT50eF9idWZmLmhlYWQgPSBOVUxMOwogCWRldi0+cnhfYnVmZi5za2IgPSBOVUxMOwpAQCAtODY1LDYgKzg2NSwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNpcmRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0gc2lyZGV2X2hhcmRfeG1pdCwKKwkubmRvX29wZW4JPSBzaXJkZXZfb3BlbiwKKwkubmRvX3N0b3AJPSBzaXJkZXZfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IHNpcmRldl9pb2N0bCwKK307CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3Qgc2lyX2RldiAqIHNpcmRldl9nZXRfaW5zdGFuY2UoY29uc3Qgc3RydWN0IHNpcl9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqbmFtZSkKQEAgLTkwOCwxMCArOTE0LDcgQEAKIAlkZXYtPm5ldGRldiA9IG5kZXY7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzaXJkZXZfaGFyZF94bWl0OwotCW5kZXYtPm9wZW4gPSBzaXJkZXZfb3BlbjsKLQluZGV2LT5zdG9wID0gc2lyZGV2X2Nsb3NlOwotCW5kZXYtPmRvX2lvY3RsID0gc2lyZGV2X2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMgPSAmc2lyZGV2X29wczsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYobmRldikpIHsKIAkJSVJEQV9FUlJPUigiJXMoKSwgcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkIVxuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBkZDczY2NlLi41OWQ3OTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtNDg2LDYgKzQ4NiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc21zY19pcmNjX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoc2VsZi0+aW8uc3BlZWQgPiAxMTUyMDApCisJCXJldHVybiAJc21zY19pcmNjX2hhcmRfeG1pdF9maXIoc2tiLCBkZXYpOworCWVsc2UKKwkJcmV0dXJuIAlzbXNjX2lyY2NfaGFyZF94bWl0X3Npcihza2IsIGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21zY19pcmNjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gc21zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHNtc2NfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgID0gc21zY19pcmNjX25ldF9pb2N0bCwKKwkubmRvX3N0YXJ0X3htaXQgPSBzbXNjX2lyY2NfbmV0X3htaXQsCisjaWYgU01TQ19JUkNDMl9DX05FVF9USU1FT1VUCisJLm5kb190eF90aW1lb3V0CT0gc21zY19pcmNjX3RpbWVvdXQsCisjZW5kaWYKK307CisKIC8qCiAgKiBGdW5jdGlvbiBzbXNjX2lyY2Nfb3BlbiAoZmlyYmFzZSwgc2lyYmFzZSwgZG1hLCBpcnEpCiAgKgpAQCAtNTE5LDE0ICs1MzksMTAgQEAKIAkJZ290byBlcnJfb3V0MTsKIAl9CiAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19oYXJkX3htaXRfc2lyOwogI2lmIFNNU0NfSVJDQzJfQ19ORVRfVElNRU9VVAotCWRldi0+dHhfdGltZW91dAkgICAgID0gc21zY19pcmNjX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyAgPSBIWiAqIDI7ICAvKiBBbGxvdyBlbm91Z2ggdGltZSBmb3Igc3BlZWQgY2hhbmdlICovCiAjZW5kaWYKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHNtc2NfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IHNtc2NfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBzbXNjX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzbXNjX2lyY2NfbmV0ZGV2X29wczsKIAogCXNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXNlbGYtPm5ldGRldiA9IGRldjsKQEAgLTk5NSw5ICsxMDExLDYgQEAKIAogCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgKi8KIAotCS8qIEluc3RhbGwgRklSIHRyYW5zbWl0IGhhbmRsZXIgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19oYXJkX3htaXRfZmlyOwotCiAJLyogQ2xlYXIgRklGTyAqLwogCW91dGIoaW5iKGZpcl9iYXNlICsgSVJDQ19MQ1JfQSkgfCBJUkNDX0xDUl9BX0ZJRk9fUkVTRVQsIGZpcl9iYXNlICsgSVJDQ19MQ1JfQSk7CiAKQEAgLTE4OTQsNyArMTkwNyw2IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlkZXYgPSBzZWxmLT5uZXRkZXY7CiAJSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybjspOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnNtc2NfaXJjY19oYXJkX3htaXRfc2lyOwogCiAJZmlyX2Jhc2UgPSBzZWxmLT5pby5maXJfYmFzZTsKIAlzaXJfYmFzZSA9IHNlbGYtPmlvLnNpcl9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDhiMTY1OGMuLjhlNWU0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTEwMDcsNiArMTAwNywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3Rpcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHN0aXJfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc3Rpcl9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gc3Rpcl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gc3Rpcl9uZXRfaW9jdGwsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCiAgKiBpbiB0aGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgb3VycywgYW5kIGluCkBAIC0xMDU0LDEwICsxMDYxLDcgQEAKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZzdGlyLT5xb3MpOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGlyX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gICAgICAgICAgICA9IHN0aXJfbmV0X29wZW47Ci0JbmV0LT5zdG9wICAgICAgICAgICAgPSBzdGlyX25ldF9jbG9zZTsKLQluZXQtPmRvX2lvY3RsICAgICAgICA9IHN0aXJfbmV0X2lvY3RsOworCW5ldC0+bmV0ZGV2X29wcyA9ICZzdGlyX25ldGRldl9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKaW5kZXggOGIzZTU0NS4uODY0Nzk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwpAQCAtMzEwLDYgKzMxMCwxOSBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJnZpYV9kcml2ZXIpOyAKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2aWFfaXJjY19zaXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXIsCisJLm5kb19vcGVuID0gdmlhX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGwsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2aWFfaXJjY19maXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9maXIsCisJLm5kb19vcGVuID0gdmlhX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wID0gdmlhX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgPSB2aWFfaXJjY19uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gdmlhX2lyY2Nfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtNDI4LDEwICs0NDEsNyBAQAogCXNlbGYtPnR4X2ZpZm8udGFpbCA9IHNlbGYtPnR4X2J1ZmYuaGVhZDsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X3NpcjsKLQlkZXYtPm9wZW4gPSB2aWFfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCkBAIC03OTgsMTEgKzgwOCwxMSBAQAogCiAJaWYgKHNwZWVkID4gMTE1MjAwKSB7CiAJCS8qIEluc3RhbGwgRklSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9maXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19maXJfb3BzOwogCQl2aWFfaXJjY19kbWFfcmVjZWl2ZShzZWxmKTsKIAl9IGVsc2UgewogCQkvKiBJbnN0YWxsIFNJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfc2lyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmdmlhX2lyY2Nfc2lyX29wczsKIAl9CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCA3MjNjNDU4Li4xMjQzYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtMTU3Myw2ICsxNTczLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxzaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHZsc2lfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSB2bHNpX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHZsc2lfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHZsc2lfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gdmxzaV90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCB2bHNpX2lyZGFfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAl2bHNpX2lyZGFfZGV2X3QgKmlkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTE2MDgsMTEgKzE2MTYsNyBAQAogCW5kZXYtPmZsYWdzIHw9IElGRl9QT1JUU0VMIHwgSUZGX0FVVE9NRURJQTsKIAluZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwogIAotCW5kZXYtPm9wZW4JICAgICAgPSB2bHNpX29wZW47Ci0JbmRldi0+c3RvcAkgICAgICA9IHZsc2lfY2xvc2U7Ci0JbmRldi0+aGFyZF9zdGFydF94bWl0ID0gdmxzaV9oYXJkX3N0YXJ0X3htaXQ7Ci0JbmRldi0+ZG9faW9jdGwJICAgICAgPSB2bHNpX2lvY3RsOwotCW5kZXYtPnR4X3RpbWVvdXQgICAgICA9IHZsc2lfdHhfdGltZW91dDsKKwluZGV2LT5uZXRkZXZfb3BzID0gJnZsc2lfbmV0ZGV2X29wczsKIAluZGV2LT53YXRjaGRvZ190aW1lbyAgPSA1MDAqSFovMTAwMDsJLyogbWF4LiBhbGxvd2VkIHR1cm4gdGltZSBmb3IgSXJMQVAgKi8KIAogCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCmluZGV4IGRjMGEyZTQuLmQwODgzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKQEAgLTE0MCw2ICsxNDAsMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdzgzOTc3X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gdzgzOTc3YWZfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gdzgzOTc3YWZfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IHc4Mzk3N2FmX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSB3ODM5NzdhZl9uZXRfaW9jdGwsCit9OworCiAvKgogICogRnVuY3Rpb24gdzgzOTc3YWZfb3BlbiAoaW9iYXNlLCBpcnEpCiAgKgpAQCAtMjMxLDExICsyMzgsNyBAQAogCXNlbGYtPnJ4X2J1ZmYuZGF0YSA9IHNlbGYtPnJ4X2J1ZmYuaGVhZDsKIAlzZWxmLT5uZXRkZXYgPSBkZXY7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHc4Mzk3N2FmX2hhcmRfeG1pdDsKLQlkZXYtPm9wZW4gICAgICAgICAgICA9IHc4Mzk3N2FmX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gdzgzOTc3YWZfbmV0X2Nsb3NlOwotCWRldi0+ZG9faW9jdGwgICAgICAgID0gdzgzOTc3YWZfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcwk9ICZ3ODM5NzdfbmV0ZGV2X29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IGVlZTI4ZDMuLjRiMGVhNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtODg3LDE5ICs4ODcsMTMgQEAKIGl4Z2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkKLQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwgYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkvKiBva2F5IHRvIGNhbGwga2ZyZWVfc2tiIGhlcmUgaW5zdGVhZCBvZiBrZnJlZV9za2JfYW55IGJlY2F1c2UKLQkgKiB0aGlzIGlzIG5ldmVyIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCWlmIChidWZmZXJfaW5mby0+c2tiKQotCQlkZXZfa2ZyZWVfc2tiKGJ1ZmZlcl9pbmZvLT5za2IpOwotCi0JYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJc2tiX2RtYV91bm1hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBidWZmZXJfaW5mby0+c2tiLAorCQkgICAgICAgICAgICAgIERNQV9UT19ERVZJQ0UpOworCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJfQogCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKIAkvKiB0aGVzZSBmaWVsZHMgbXVzdCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgaW4gdHgKIAkgKiBidWZmZXJfaW5mby0+bGVuZ3RoID0gMDsKQEAgLTEyNzUsMTcgKzEyNjksMjMgQEAKIHsKIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCWludCBsZW4gPSBza2ItPmxlbjsKKwlpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwogCiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgZjsKLQotCWxlbiAtPSBza2ItPmRhdGFfbGVuOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFwID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwczsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBJWEdCX01BWF9EQVRBX1BFUl9UWEQpOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCVdBUk5fT04oYnVmZmVyX2luZm8tPmRtYSAhPSAwKTsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCiAJCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAogCQkJCXNpemUsCkBAIC0xMzA3LDcgKzEzMDcsMTEgQEAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMTMxOCw2ICsxMzIyLDEwIEBACiAJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CiAKQEAgLTEzMjksMjEgKzEzMzcsMTQgQEAKIAogCQkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCQlwY2lfbWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKLQkJCQkJZnJhZy0+cGFnZSwKLQkJCQkJZnJhZy0+cGFnZV9vZmZzZXQgKyBvZmZzZXQsCi0JCQkJCXNpemUsCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCQkJaWYgKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CiAJCX0KIAl9Ci0JaSA9IChpID09IDApID8gdHhfcmluZy0+Y291bnQgLSAxIDogaSAtIDE7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtMTQ0NSw2ICsxNDQ2LDcgQEAKIAl1bnNpZ25lZCBpbnQgZmlyc3Q7CiAJdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKIAlpbnQgdmxhbl9pZCA9IDA7CisJaW50IGNvdW50ID0gMDsKIAlpbnQgdHNvOwogCiAJaWYgKHRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKSB7CkBAIC0xNDc5LDEzICsxNDgxLDE5IEBACiAJZWxzZSBpZiAoaXhnYl90eF9jc3VtKGFkYXB0ZXIsIHNrYikpCiAJCXR4X2ZsYWdzIHw9IElYR0JfVFhfRkxBR1NfQ1NVTTsKIAotCWl4Z2JfdHhfcXVldWUoYWRhcHRlciwgaXhnYl90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCksIHZsYW5faWQsCi0JCQl0eF9mbGFncyk7CisJY291bnQgPSBpeGdiX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0KTsKIAotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWlmIChjb3VudCkgeworCQlpeGdiX3R4X3F1ZXVlKGFkYXB0ZXIsIGNvdW50LCB2bGFuX2lkLCB0eF9mbGFncyk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWl4Z2JfbWF5YmVfc3RvcF90eChuZXRkZXYsICZhZGFwdGVyLT50eF9yaW5nLCBERVNDX05FRURFRCk7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsIERFU0NfTkVFREVEKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlhZGFwdGVyLT50eF9yaW5nLmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKKwkJYWRhcHRlci0+dHhfcmluZy5uZXh0X3RvX3VzZSA9IGZpcnN0OworCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xNzIxLDE0ICsxNzI5LDE0IEBACiAJCWlmICghdGVzdF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncykpCiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CiAKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWdpc3RlciBmb3IgcG9sbC4gVGhlIGZsdXNoCiAJCSAgb2YgdGhlIHBvc3RlZCB3cml0ZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgb3V0LgogCQkqLwogCiAJCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1DLCB+MCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNzQ5LDcgKzE3NTcsNyBAQAogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKIAkJCWl4Z2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CkBAIC0xODE4LDcgKzE4MjYsNyBAQAogCQkvKiBkZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgJiYKIAkJICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgKyBIWikKIAkJICAgJiYgIShJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmCiAJCSAgICAgICAgSVhHQl9TVEFUVVNfVFhPRkYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCmluZGV4IDZlN2VmNzYuLmIzZjgyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKICMgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMyw2ICszMyw3IEBACiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLm8KIAogaXhnYmUtb2JqcyA6PSBpeGdiZV9tYWluLm8gaXhnYmVfY29tbW9uLm8gaXhnYmVfZXRodG9vbC5vIFwKLSAgICAgICAgICAgICAgaXhnYmVfODI1OTgubyBpeGdiZV9waHkubworICAgICAgICAgICAgICBpeGdiZV84MjU5OS5vIGl4Z2JlXzgyNTk4Lm8gaXhnYmVfcGh5Lm8KIAotaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gaXhnYmVfZGNiX25sLm8KK2l4Z2JlLSQoQ09ORklHX0lYR0JFX0RDQikgKz0gIGl4Z2JlX2RjYi5vIGl4Z2JlX2RjYl84MjU5OC5vIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2RjYl84MjU5OS5vIGl4Z2JlX2RjYl9ubC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCBlMTEyMDA4Li5jMjY0MzNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KICNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKQEAgLTcyLDYgKzcxLDcgQEAKICNkZWZpbmUgSVhHQkVfUlhCVUZGRVJfMTI4ICAgMTI4ICAgIC8qIFVzZWQgZm9yIHBhY2tldCBzcGxpdCAqLwogI2RlZmluZSBJWEdCRV9SWEJVRkZFUl8yNTYgICAyNTYgICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIElYR0JFX1JYQlVGRkVSXzIwNDggIDIwNDgKKyNkZWZpbmUgSVhHQkVfTUFYX1JYQlVGRkVSICAgMTYzODQgIC8qIGxhcmdlc3Qgc2l6ZSBmb3IgYSBzaW5nbGUgZGVzY3JpcHRvciAqLwogCiAjZGVmaW5lIElYR0JFX1JYX0hEUl9TSVpFIElYR0JFX1JYQlVGRkVSXzI1NgogCkBAIC04OCw5ICs4OCw2IEBACiAjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fUFJJT19NQVNLICAgMHgwMDAwZTAwMAogI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUCTE2CiAKLSNkZWZpbmUgSVhHQkVfTUFYX0xST19ERVNDUklQVE9SUyAgICAgICA4Ci0jZGVmaW5lIElYR0JFX01BWF9MUk9fQUdHUkVHQVRFICAgICAgICAgMzIKLQogLyogd3JhcHBlciBhcm91bmQgYSBwb2ludGVyIHRvIGEgc29ja2V0IGJ1ZmZlciwKICAqIHNvIGEgRE1BIGhhbmRsZSBjYW4gYmUgc3RvcmVkIGFsb25nIHdpdGggdGhlIGJ1ZmZlciAqLwogc3RydWN0IGl4Z2JlX3R4X2J1ZmZlciB7CkBAIC0xNDIsMjEgKzEzOSwyNSBAQAogCS8qIGNwdSBmb3IgdHggcXVldWUgKi8KIAlpbnQgY3B1OwogI2VuZGlmCi0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0JYm9vbCBscm9fdXNlZDsKIAlzdHJ1Y3QgaXhnYmVfcXVldWVfc3RhdHMgc3RhdHM7Ci0JdTE2IHZfaWR4OyAvKiBtYXBzIGRpcmVjdGx5IHRvIHRoZSBpbmRleCBmb3IgdGhpcyByaW5nIGluIHRoZSBoYXJkd2FyZQotCSAgICAgICAgICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCi0JICAgICAgICAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KKwl1NjQgdl9pZHg7IC8qIG1hcHMgZGlyZWN0bHkgdG8gdGhlIGluZGV4IGZvciB0aGlzIHJpbmcgaW4gdGhlIGhhcmR3YXJlCisJICAgICAgICAgICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCisJICAgICAgICAgICAgKiBhbmQgZnJpZW5kcyB0aGF0IHJlcHJlc2VudHMgdGhlIHZlY3RvciBmb3IgdGhpcyByaW5nICovCiAKIAogCXUxNiB3b3JrX2xpbWl0OyAgICAgICAgICAgICAgICAvKiBtYXggd29yayBwZXIgaW50ZXJydXB0ICovCiAJdTE2IHJ4X2J1Zl9sZW47CiB9OwogCi0jZGVmaW5lIFJJTkdfRl9EQ0IgIDAKLSNkZWZpbmUgUklOR19GX1ZNRFEgMQotI2RlZmluZSBSSU5HX0ZfUlNTICAyCitlbnVtIGl4Z2JlX3JpbmdfZl9lbnVtIHsKKwlSSU5HX0ZfTk9ORSA9IDAsCisJUklOR19GX0RDQiwKKwlSSU5HX0ZfVk1EUSwKKwlSSU5HX0ZfUlNTLAorCisJUklOR19GX0FSUkFZX1NJWkUgICAgICAvKiBtdXN0IGJlIGxhc3QgaW4gZW51bSBzZXQgKi8KK307CisKICNkZWZpbmUgSVhHQkVfTUFYX0RDQl9JTkRJQ0VTICAgOAogI2RlZmluZSBJWEdCRV9NQVhfUlNTX0lORElDRVMgIDE2CiAjZGVmaW5lIElYR0JFX01BWF9WTURRX0lORElDRVMgMTYKQEAgLTE2NSw4ICsxNjYsOCBAQAogCWludCBtYXNrOwogfTsKIAotI2RlZmluZSBNQVhfUlhfUVVFVUVTIDY0Ci0jZGVmaW5lIE1BWF9UWF9RVUVVRVMgMzIKKyNkZWZpbmUgTUFYX1JYX1FVRVVFUyAxMjgKKyNkZWZpbmUgTUFYX1RYX1FVRVVFUyAxMjgKIAogI2RlZmluZSBNQVhfUlhfUEFDS0VUX0JVRkZFUlMgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gOCA6IDEpCkBAIC0xODgsMTAgKzE4OSwxMSBAQAogfTsKIAogLyogSGVscGVyIG1hY3JvcyB0byBzd2l0Y2ggYmV0d2VlbiBpbnRzL3NlYyBhbmQgd2hhdCB0aGUgcmVnaXN0ZXIgdXNlcy4KLSAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuCisgKiBBbmQgeWVzLCBpdCdzIHRoZSBzYW1lIG1hdGggZ29pbmcgYm90aCB3YXlzLiAgVGhlIGxvd2VzdCB2YWx1ZQorICogc3VwcG9ydGVkIGJ5IGFsbCBvZiB0aGUgaXhnYmUgaGFyZHdhcmUgaXMgOC4KICAqLwogI2RlZmluZSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoX2VpdHIpIFwKLQkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDApCisJKChfZWl0cikgPyAoMTAwMDAwMDAwMCAvICgoX2VpdHIpICogMjU2KSkgOiA4KQogI2RlZmluZSBFSVRSX1JFR19UT19JTlRTX1BFUl9TRUMgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHCiAKICNkZWZpbmUgSVhHQkVfREVTQ19VTlVTRUQoUikgXApAQCAtMjEwLDkgKzIxMiwxNSBAQAogI2RlZmluZSBPVEhFUl9WRUNUT1IgMQogI2RlZmluZSBOT05fUV9WRUNUT1JTIChPVEhFUl9WRUNUT1IpCiAKLSNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIDE2CisjZGVmaW5lIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTkgNjQKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk5IDY0CisjZGVmaW5lIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTggMTgKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk4IDE2CisKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OQorI2RlZmluZSBNQVhfTVNJWF9DT1VOVCBNQVhfTVNJWF9WRUNUT1JTXzgyNTk5CisKICNkZWZpbmUgTUlOX01TSVhfUV9WRUNUT1JTIDIKLSNkZWZpbmUgTUFYX01TSVhfQ09VTlQgKE1BWF9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCiAjZGVmaW5lIE1JTl9NU0lYX0NPVU5UIChNSU5fTVNJWF9RX1ZFQ1RPUlMgKyBOT05fUV9WRUNUT1JTKQogCiAvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC0yMjIsNyArMjMwLDcgQEAKIAl1MTYgYmRfbnVtYmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciBxX3ZlY3RvcltNQVhfTVNJWF9RX1ZFQ1RPUlNdOwotCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA1XTsKKwljaGFyIG5hbWVbTUFYX01TSVhfQ09VTlRdW0lGTkFNU0laICsgOV07CiAJc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgZGNiX2NmZzsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyB0ZW1wX2RjYl9jZmc7CiAJdTggZGNiX3NldF9iaXRtYXA7CkBAIC0yNDcsMTAgKzI1NSwxMiBAQAogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nOwkvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwogCWludCBudW1fcnhfcXVldWVzOwogCXU2NCBod19jc3VtX3J4X2Vycm9yOworCXU2NCBod19yeF9ub19kbWFfcmVzb3VyY2VzOwogCXU2NCBod19jc3VtX3J4X2dvb2Q7CiAJdTY0IG5vbl9lb3BfZGVzY3M7CiAJaW50IG51bV9tc2l4X3ZlY3RvcnM7Ci0Jc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbM107CisJaW50IG1heF9tc2l4X3FfdmVjdG9yczsgICAgICAgICAvKiB0cnVlIGNvdW50IG9mIHFfdmVjdG9ycyBmb3IgZGV2aWNlICovCisJc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbUklOR19GX0FSUkFZX1NJWkVdOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAKIAl1NjQgcnhfaGRyX3NwbGl0OwpAQCAtMjc0LDYgKzI4NCw3IEBACiAjZGVmaW5lIElYR0JFX0ZMQUdfRENBX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDExKQogI2RlZmluZSBJWEdCRV9GTEFHX0lNSVJfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMikKICNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTMpCisjZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE0KQogI2RlZmluZSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNikKICNkZWZpbmUgSVhHQkVfRkxBR19SU1NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTcpCiAjZGVmaW5lIElYR0JFX0ZMQUdfVk1EUV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE4KQpAQCAtMjgxLDcgKzI5Miw4IEBACiAjZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQogI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKICNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0sgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjUpCiAKIC8qIGRlZmF1bHQgdG8gdHJ5aW5nIGZvciBmb3VyIHNlY29uZHMgKi8KICNkZWZpbmUgSVhHQkVfVFJZX0xJTktfVElNRU9VVCAoNCAqIEhaKQpAQCAtMzAxLDkgKzMxMyw2IEBACiAKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCXU2NCB0eF9idXN5OwotCXU2NCBscm9fYWdncmVnYXRlZDsKLQl1NjQgbHJvX2ZsdXNoZWQ7Ci0JdTY0IGxyb19ub19kZXNjOwogCXVuc2lnbmVkIGludCB0eF9yaW5nX2NvdW50OwogCXVuc2lnbmVkIGludCByeF9yaW5nX2NvdW50OwogCkBAIC0zMTQsNiArMzIzLDEwIEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNmcF90YXNrOwogCXN0cnVjdCB0aW1lcl9saXN0IHNmcF90aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXVsdGlzcGVlZF9maWJlcl90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZnBfY29uZmlnX21vZHVsZV90YXNrOworCXUzMiB3b2w7CisJdTE2IGVlcHJvbV92ZXJzaW9uOwogfTsKIAogZW51bSBpeGJnZV9zdGF0ZV90IHsKQEAgLTMyNSw5ICszMzgsMTEgQEAKIAogZW51bSBpeGdiZV9ib2FyZHMgewogCWJvYXJkXzgyNTk4LAorCWJvYXJkXzgyNTk5LAogfTsKIAogZXh0ZXJuIHN0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk4X2luZm87CitleHRlcm4gc3RydWN0IGl4Z2JlX2luZm8gaXhnYmVfODI1OTlfaW5mbzsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiBleHRlcm4gc3RydWN0IGRjYm5sX3J0bmxfb3BzIGRjYm5sX29wczsKIGV4dGVybiBpbnQgaXhnYmVfY29weV9kY2JfY2ZnKHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpzcmNfZGNiX2NmZywKQEAgLTM1Miw1ICszNjcsNiBAQAogZXh0ZXJuIGludCBpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpeGdiZV9uYXBpX2FkZF9hbGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpeGdiZV9uYXBpX2RlbF9hbGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgaXhnYmVfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqLCBpbnQsIHUzMik7CiAKICNlbmRpZiAvKiBfSVhHQkVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCmluZGV4IGFkNTY5OWQuLmVkMjY1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTUwLDYgKzUwLDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqZWVwcm9tX2RhdGEpOwogCiAvKioKKyAqICBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk4IC0gR2V0cyBNU0ktWCB2ZWN0b3IgY291bnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlYWQgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZ2V0IHRoZSBNU0ktWCB2ZWN0b3IgY291bnQgZnJvbQorICogIHRoZSBjYXBhYmlsaXRpZXMgdGFibGUuCisgKiovCitzdGF0aWMgdTE2IGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXUxNiBtc2l4X2NvdW50OworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIElYR0JFX1BDSUVfTVNJWF84MjU5OF9DQVBTLAorCSAgICAgICAgICAgICAgICAgICAgICZtc2l4X2NvdW50KTsKKwltc2l4X2NvdW50ICY9IElYR0JFX1BDSUVfTVNJWF9UQkxfU1pfTUFTSzsKKworCS8qIE1TSS1YIGNvdW50IGlzIHplcm8tYmFzZWQgaW4gSFcsIHNvIGluY3JlbWVudCB0byBnaXZlIHByb3BlciB2YWx1ZSAqLworCW1zaXhfY291bnQrKzsKKworCXJldHVybiBtc2l4X2NvdW50OworfQorCisvKioKICAqLwogc3RhdGljIHMzMiBpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewpAQCAtNTgsNiArNzksOSBAQAogCXMzMiByZXRfdmFsID0gMDsKIAl1MTYgbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0OwogCisJLyogU2V0IHRoZSBidXMgaW5mb3JtYXRpb24gcHJpb3IgdG8gUEhZIGlkZW50aWZpY2F0aW9uICovCisJbWFjLT5vcHMuZ2V0X2J1c19pbmZvKGh3KTsKKwogCS8qIENhbGwgUEhZIGlkZW50aWZ5IHJvdXRpbmUgdG8gZ2V0IHRoZSBwaHkgdHlwZSAqLwogCWl4Z2JlX2lkZW50aWZ5X3BoeV9nZW5lcmljKGh3KTsKIApAQCAtMTA2LDYgKzEzMCw3IEBACiAJbWFjLT5udW1fcmFyX2VudHJpZXMgPSBJWEdCRV84MjU5OF9SQVJfRU5UUklFUzsKIAltYWMtPm1heF9yeF9xdWV1ZXMgPSBJWEdCRV84MjU5OF9NQVhfUlhfUVVFVUVTOwogCW1hYy0+bWF4X3R4X3F1ZXVlcyA9IElYR0JFXzgyNTk4X01BWF9UWF9RVUVVRVM7CisJbWFjLT5tYXhfbXNpeF92ZWN0b3JzID0gaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OChodyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTEyNCwxOCArMTQ5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKQogewogCXMzMiBzdGF0dXMgPSAwOwotCXMzMiBhdXRvY19yZWc7CiAKLQlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOwotCi0JaWYgKGh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQpIHsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEU7Ci0JCWF1dG9jX3JlZyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3Q7Ci0JfQotCi0Jc3dpdGNoIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgeworCS8qCisJICogRGV0ZXJtaW5lIGxpbmsgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBzdG9yZWQgdmFsdWUgb2YgQVVUT0MsCisJICogd2hpY2ggcmVwcmVzZW50cyBFRVBST00gZGVmYXVsdHMuCisJICovCisJc3dpdGNoIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgewogCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU46CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CiAJCSphdXRvbmVnID0gZmFsc2U7CkBAIC0xNTQsOSArMTczLDkgQEAKIAljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfQU46CiAJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOOgogCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047Ci0JCWlmIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQogCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOwotCQlpZiAoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYX1NVUFApCiAJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKIAkJKmF1dG9uZWcgPSB0cnVlOwogCQlicmVhazsKQEAgLTIxMyw2ICsyMzIsMTAgQEAKIAogCS8qIE1lZGlhIHR5cGUgZm9yIEk4MjU5OCBpcyBiYXNlZCBvbiBkZXZpY2UgSUQgKi8KIAlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5ODoKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lOworCQlicmVhazsKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEFGX0RVQUxfUE9SVDoKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4RUJfQ1g0OgpAQCAtMjM1LDYgKzI1OCwxMDIgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZmNfZW5hYmxlXzgyNTk4IC0gRW5hYmxlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKKyAqCisgKiAgRW5hYmxlIGZsb3cgY29udHJvbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2ZjX2VuYWJsZV84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGZjdHJsX3JlZzsKKwl1MzIgcm1jc19yZWc7CisJdTMyIHJlZzsKKworCWZjdHJsX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CisJZmN0cmxfcmVnICY9IH4oSVhHQkVfRkNUUkxfUkZDRSB8IElYR0JFX0ZDVFJMX1JQRkNFKTsKKworCXJtY3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOworCXJtY3NfcmVnICY9IH4oSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIHwgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7CisKKwkvKgorCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZmMuY3VycmVudF9tb2RlIGFyZToKKwkgKiAwOiBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAorCSAqIDE6IFJ4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gcmVjZWl2ZSBwYXVzZSBmcmFtZXMsCisJICogICAgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCisJICogMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiBvdGhlcjogSW52YWxpZC4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKKwljYXNlIGl4Z2JlX2ZjX25vbmU6CisJCS8qIEZsb3cgY29udHJvbCBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiAqLworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgorCQkvKgorCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVHggRmxvdyBjb250cm9sIGlzCisJCSAqIGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkKKwkJICogaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlgKKwkJICogUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZSBzdXBwb3J0IGJvdGgKKwkJICogc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4IFBBVVNFLiAgTGF0ZXIsIHdlIHdpbGwKKwkJICogZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQlmY3RybF9yZWcgfD0gSVhHQkVfRkNUUkxfUkZDRTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX2Z1bGw6CisJCS8qIEZsb3cgY29udHJvbCAoYm90aCBSeCBhbmQgVHgpIGlzIGVuYWJsZWQgYnkgU1cgb3ZlcnJpZGUuICovCisJCWZjdHJsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOworCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlod19kYmcoaHcsICJGbG93IGNvbnRyb2wgcGFyYW0gc2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0X3ZhbCA9IC1JWEdCRV9FUlJfQ09ORklHOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCisJLyogRW5hYmxlIDgwMi4zeCBiYXNlZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RSTCwgZmN0cmxfcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JNQ1MsIHJtY3NfcmVnKTsKKworCS8qIFNldCB1cCBhbmQgZW5hYmxlIFJ4IGhpZ2gvbG93IHdhdGVyIG1hcmsgdGhyZXNob2xkcywgZW5hYmxlIFhPTi4gKi8KKwlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CisJCWlmIChody0+ZmMuc2VuZF94b24pIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7CisJCX0gZWxzZSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAorCQkJICAgICAgICAgICAgICAgIGh3LT5mYy5sb3dfd2F0ZXIpOworCQl9CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSChwYWNrZXRidWZfbnVtKSwKKwkJICAgICAgICAgICAgICAgIChody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU4pKTsKKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtKSk7CisJaWYgKChwYWNrZXRidWZfbnVtICYgMSkgPT0gMCkKKwkJcmVnID0gKHJlZyAmIDB4RkZGRjAwMDApIHwgaHctPmZjLnBhdXNlX3RpbWU7CisJZWxzZQorCQlyZWcgPSAocmVnICYgMHgwMDAwRkZGRikgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYocGFja2V0YnVmX251bSAvIDIpLCByZWcpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpeGdiZV9zZXR1cF9mY184MjU5OCAtIENvbmZpZ3VyZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQHBhY2tldGJ1Zl9udW06IHBhY2tldCBidWZmZXIgbnVtYmVyICgwLTcpCkBAIC0yNDQsMTEwICszNjMsNjQgQEAKICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfZmNfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pCiB7Ci0JdTMyIGZyY3RsX3JlZzsKLQl1MzIgcm1jc19yZWc7CisJczMyIHJldF92YWwgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQ7CisJYm9vbCBsaW5rX3VwOwogCisJLyogVmFsaWRhdGUgdGhlIHBhY2tldGJ1ZiBjb25maWd1cmF0aW9uICovCiAJaWYgKHBhY2tldGJ1Zl9udW0gPCAwIHx8IHBhY2tldGJ1Zl9udW0gPiA3KSB7CiAJCWh3X2RiZyhodywgIkludmFsaWQgcGFja2V0IGJ1ZmZlciBudW1iZXIgWyVkXSwgZXhwZWN0ZWQgcmFuZ2UgaXMiCiAJCSAgICAgICAgICAiIDAtN1xuIiwgcGFja2V0YnVmX251bSk7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKLQlmcmN0bF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOwotCWZyY3RsX3JlZyAmPSB+KElYR0JFX0ZDVFJMX1JGQ0UgfCBJWEdCRV9GQ1RSTF9SUEZDRSk7Ci0KLQlybWNzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKLQlybWNzX3JlZyAmPSB+KElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSB8IElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOwotCiAJLyoKLQkgKiAxMCBnaWcgcGFydHMgZG8gbm90IGhhdmUgYSB3b3JkIGluIHRoZSBFRVBST00gdG8gZGV0ZXJtaW5lIHRoZQotCSAqIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmcsIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGZ1bGwuCi0JICovCi0JaWYgKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX2RlZmF1bHQpCi0JCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfZnVsbDsKLQotCS8qCi0JICogV2Ugd2FudCB0byBzYXZlIG9mZiB0aGUgb3JpZ2luYWwgRmxvdyBDb250cm9sIGNvbmZpZ3VyYXRpb24ganVzdCBpbgotCSAqIGNhc2Ugd2UgZ2V0IGRpc2Nvbm5lY3RlZCBhbmQgdGhlbiByZWNvbm5lY3RlZCBpbnRvIGEgZGlmZmVyZW50IGh1YgotCSAqIG9yIHN3aXRjaCB3aXRoIGRpZmZlcmVudCBGbG93IENvbnRyb2wgY2FwYWJpbGl0aWVzLgotCSAqLwotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7Ci0KLQkvKgotCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlICJmbG93X2NvbnRyb2wiIHBhcmFtZXRlciBhcmU6Ci0JICogMDogRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKLQkgKiAxOiBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzIGJ1dCBub3QKLQkgKiAgICBzZW5kIHBhdXNlIGZyYW1lcykuCi0JICogMjogVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQgd2UgZG8gbm90Ci0JICogICAgc3VwcG9ydCByZWNlaXZpbmcgcGF1c2UgZnJhbWVzKQotCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KLQkgKiBvdGhlcjogSW52YWxpZC4KLQkgKi8KLQlzd2l0Y2ggKGh3LT5mYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9mY19ub25lOgotCQlicmVhazsKLQljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgotCQkvKgotCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwKLQkJICogYW5kIFR4IEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZC4KLQkJICovCi0JCWZyY3RsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOwotCQlicmVhazsKLQljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgotCQkvKgotCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZCwKLQkJICogYnkgYSBzb2Z0d2FyZSBvdmVyLXJpZGUuCi0JCSAqLwotCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOwotCQlicmVhazsKLQljYXNlIGl4Z2JlX2ZjX2Z1bGw6Ci0JCS8qCi0JCSAqIEZsb3cgY29udHJvbCAoYm90aCBSeCBhbmQgVHgpIGlzIGVuYWJsZWQgYnkgYSBzb2Z0d2FyZQotCQkgKiBvdmVyLXJpZGUuCi0JCSAqLwotCQlmcmN0bF9yZWcgfD0gSVhHQkVfRkNUUkxfUkZDRTsKLQkJcm1jc19yZWcgfD0gSVhHQkVfUk1DU19URkNFXzgwMl8zWDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiAgVGhlIHZhbHVlIHNob3VsZCBiZSAwLTMuICovCi0JCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmcmN0bF9yZWcpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUk1DUywgcm1jc19yZWcpOwotCi0JLyoKLQkgKiBDaGVjayBmb3IgaW52YWxpZCBzb2Z0d2FyZSBjb25maWd1cmF0aW9uLCB6ZXJvcyBhcmUgY29tcGxldGVseQotCSAqIGludmFsaWQgZm9yIGFsbCBwYXJhbWV0ZXJzIHVzZWQgcGFzdCB0aGlzIHBvaW50LCBhbmQgaWYgd2UgZW5hYmxlCi0JICogZmxvdyBjb250cm9sIHdpdGggemVybyB3YXRlciBtYXJrcywgd2UgYmxhc3QgZmxvdyBjb250cm9sIHBhY2tldHMuCisJICogVmFsaWRhdGUgdGhlIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvbi4gIFplcm8gd2F0ZXIgbWFya3MgYXJlIGludmFsaWQKKwkgKiBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgY29udHJvbGxlciB0byBqdXN0IGJsYXN0IG91dCBmYyBwYWNrZXRzLgogCSAqLwogCWlmICghaHctPmZjLmxvd193YXRlciB8fCAhaHctPmZjLmhpZ2hfd2F0ZXIgfHwgIWh3LT5mYy5wYXVzZV90aW1lKSB7Ci0JCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgaW5jb3JyZWN0bHlcbiIpOwotCQlyZXR1cm4gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCB3YXRlciBtYXJrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIHNldCB1cCB0aGUgUmVjZWl2ZSBUaHJlc2hvbGQgaGlnaCBhbmQgbG93IHdhdGVyCi0JICogbWFya3MgYXMgd2VsbCBhcyAob3B0aW9uYWxseSkgZW5hYmxpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZgotCSAqIFhPTiBmcmFtZXMuCisJICogVmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBtb2RlLiAgU3RyaWN0IElFRUUgbW9kZSBkb2VzIG5vdCBhbGxvdworCSAqIGl4Z2JlX2ZjX3J4X3BhdXNlIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSB0ZXN0aW5nIGFub21hbGllcy4KIAkgKi8KLQlpZiAoaHctPmZjLnR5cGUgJiBpeGdiZV9mY190eF9wYXVzZSkgewotCQlpZiAoaHctPmZjLnNlbmRfeG9uKSB7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgIChody0+ZmMubG93X3dhdGVyIHwgSVhHQkVfRkNSVExfWE9ORSkpOwotCQl9IGVsc2UgewotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTChwYWNrZXRidWZfbnVtKSwKLQkJCSAgICAgICAgICAgICAgICBody0+ZmMubG93X3dhdGVyKTsKLQkJfQotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIKHBhY2tldGJ1Zl9udW0pLAotCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyKXxJWEdCRV9GQ1JUSF9GQ0VOKTsKKwlpZiAoaHctPmZjLnN0cmljdF9pZWVlICYmIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCQlod19kYmcoaHcsICJpeGdiZV9mY19yeF9wYXVzZSBub3QgdmFsaWQgaW4gc3RyaWN0IElFRUUgbW9kZVxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFRWKDApLCBody0+ZmMucGF1c2VfdGltZSk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKwkvKgorCSAqIDEwZ2lnIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgRUVQUk9NIHRvIGRldGVybWluZSB0aGUKKwkgKiBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBmdWxsLgorCSAqLworCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKIAotCXJldHVybiAwOworCS8qCisJICogU2F2ZSBvZmYgdGhlIHJlcXVlc3RlZCBmbG93IGNvbnRyb2wgbW9kZSBmb3IgdXNlIGxhdGVyLiAgRGVwZW5kaW5nCisJICogb24gdGhlIGxpbmsgcGFydG5lcidzIGNhcGFiaWxpdGllcywgd2UgbWF5IG9yIG1heSBub3QgdXNlIHRoaXMgbW9kZS4KKwkgKi8KKworCWh3LT5mYy5jdXJyZW50X21vZGUgPSBody0+ZmMucmVxdWVzdGVkX21vZGU7CisKKwkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgYXV0b25lZyBvciBub3QuICovCisJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnNwZWVkLCAmbGlua191cCwgZmFsc2UpOworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQorCQlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CisKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaXhnYmVfZmNfZW5hYmxlXzgyNTk4KGh3LCBwYWNrZXRidWZfbnVtKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKQEAgLTM2NCwyNyArNDM3LDE3IEBACiAJdTMyIGk7CiAJczMyIHN0YXR1cyA9IDA7CiAKLQlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOwotCi0JaWYgKGh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQpIHsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEU7Ci0JCWF1dG9jX3JlZyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jX3JlZyB8PSBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3Q7Ci0KLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKLQkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwotCQltc2xlZXAoNTApOwotCX0KLQogCS8qIFJlc3RhcnQgbGluayAqLworCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7CiAJYXV0b2NfcmVnIHw9IElYR0JFX0FVVE9DX0FOX1JFU1RBUlQ7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKIAogCS8qIE9ubHkgcG9sbCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBpZiBzcGVjaWZpZWQgdG8gZG8gc28gKi8KIAlpZiAoaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKLQkJaWYgKGh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOIHx8Ci0JCSAgICBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTikgeworCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOKSB7CiAJCQlsaW5rc19yZWcgPSAwOyAvKiBKdXN0IGluIGNhc2UgQXV0b25lZyB0aW1lID0gMCAqLwogCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgewogCQkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CkBAIC00MDQsNyArNDY3LDYgQEAKIAkgKiBjYXNlIHdlIGdldCBkaXNjb25uZWN0ZWQgYW5kIHRoZW4gcmVjb25uZWN0ZWQgaW50byBhIGRpZmZlcmVudCBodWIKIAkgKiBvciBzd2l0Y2ggd2l0aCBkaWZmZXJlbnQgRmxvdyBDb250cm9sIGNhcGFiaWxpdGllcy4KIAkgKi8KLQlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGh3LT5mYy50eXBlOwogCWl4Z2JlX3NldHVwX2ZjXzgyNTk4KGh3LCAwKTsKIAogCS8qIEFkZCBkZWxheSB0byBmaWx0ZXIgb3V0IG5vaXNlcyBkdXJpbmcgaW5pdGlhbCBsaW5rIHNldHVwICovCkBAIC01MDgsMzcgKzU3MCw0MyBAQAogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCiBzdGF0aWMgczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewotCXMzMiBzdGF0dXMgPSAwOworCXMzMiAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgbGlua19jYXBhYmlsaXRpZXMgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CisJdTMyICAgICAgICAgICAgICBjdXJyX2F1dG9jICAgICAgICA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7CisJdTMyICAgICAgICAgICAgICBhdXRvYyAgICAgICAgICAgICA9IGN1cnJfYXV0b2M7CisJdTMyICAgICAgICAgICAgICBsaW5rX21vZGUgICAgICAgICA9IGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0s7CiAKLQkvKiBJZiBzcGVlZCBpcyAxMEcsIHRoZW4gY2hlY2sgZm9yIENYNCBvciBYQVVJLiAqLwotCWlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpICYmCi0JICAgICghKGh3LT5tYWMubGlua19hdHRhY2hfdHlwZSAmIElYR0JFX0FVVE9DXzEwR19LWDQpKSkgewotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU47Ci0JfSBlbHNlIGlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgJiYgKCFhdXRvbmVnKSkgewotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjsKLQl9IGVsc2UgaWYgKGF1dG9uZWcpIHsKLQkJLyogQlggbW9kZSAtIEF1dG9uZWdvdGlhdGUgMUcgKi8KLQkJaWYgKCEoaHctPm1hYy5saW5rX2F0dGFjaF90eXBlICYgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRCkpCi0JCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMUdfQU47Ci0JCWVsc2UgLyogS1gvS1g0IG1vZGUgKi8KLQkJCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU47Ci0JfSBlbHNlIHsKKwkvKiBDaGVjayB0byBzZWUgaWYgc3BlZWQgcGFzc2VkIGluIGlzIHN1cHBvcnRlZC4gKi8KKwlpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTgoaHcsICZsaW5rX2NhcGFiaWxpdGllcywgJmF1dG9uZWcpOworCXNwZWVkICY9IGxpbmtfY2FwYWJpbGl0aWVzOworCisJaWYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTikKIAkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisKKwkvKiBTZXQgS1g0L0tYIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHNwZWVkIHJlcXVlc3RlZCAqLworCWVsc2UgaWYgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOIHx8CisJICAgICAgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU4pIHsKKwkJYXV0b2MgJj0gfklYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0s7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1g0X1NVUFA7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWF9TVVBQOworCQlpZiAoYXV0b2MgIT0gY3Vycl9hdXRvYykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7CiAKLQkJaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCA9IHRydWU7CiAJCS8qCiAJCSAqIFNldHVwIGFuZCByZXN0YXJ0IHRoZSBsaW5rIGJhc2VkIG9uIHRoZSBuZXcgdmFsdWVzIGluCiAJCSAqIGl4Z2JlX2h3IFRoaXMgd2lsbCB3cml0ZSB0aGUgQVVUT0MgcmVnaXN0ZXIgYmFzZWQgb24gdGhlIG5ldwogCQkgKiBzdG9yZWQgdmFsdWVzCiAJCSAqLwotCQlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChodyk7CisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTYxLDEwICs2MjksNiBAQAogCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uIG9uIFBIWSAqLwogCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmsoaHcpOwogCi0JLyogU2V0IE1BQyB0byBLWC9LWDQgYXV0b25lZywgd2hpY2ggZGVmYXVsdHMgdG8gUGFyYWxsZWwgZGV0ZWN0aW9uICovCi0JaHctPm1hYy5saW5rX2F0dGFjaF90eXBlID0gKElYR0JFX0FVVE9DXzEwR19LWDQgfCBJWEdCRV9BVVRPQ18xR19LWCk7Ci0JaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTjsKLQogCS8qIFNldCB1cCBNQUMgKi8KIAlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChodyk7CiAKQEAgLTU5MSwxMCArNjU1LDYgQEAKIAlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAKLQkvKiBTZXQgTUFDIHRvIEtYL0tYNCBhdXRvbmVnLCB3aGljaCBkZWZhdWx0cyB0byBQYXJhbGxlbCBkZXRlY3Rpb24gKi8KLQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPSAoSVhHQkVfQVVUT0NfMTBHX0tYNCB8IElYR0JFX0FVVE9DXzFHX0tYKTsKLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOOwotCiAJLyogU2V0IHVwIE1BQyAqLwogCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIApAQCAtNjk0LDI0ICs3NTQsMTYgQEAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dIRUNDUiwgZ2hlY2NyKTsKIAogCS8qCi0JICogQVVUT0MgcmVnaXN0ZXIgd2hpY2ggc3RvcmVzIGxpbmsgc2V0dGluZ3MgZ2V0cyBjbGVhcmVkCi0JICogYW5kIHJlbG9hZGVkIGZyb20gRUVQUk9NIGFmdGVyIHJlc2V0LiBXZSBuZWVkIHRvIHJlc3RvcmUKLQkgKiBvdXIgc3RvcmVkIHZhbHVlIGZyb20gaW5pdCBpbiBjYXNlIFNXIGNoYW5nZWQgdGhlIGF0dGFjaAotCSAqIHR5cGUgb3Igc3BlZWQuICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGFuZCBsaW5rIHNldHRpbmdzCi0JICogaGF2ZSBub3QgYmVlbiBzdG9yZWQsIHN0b3JlIGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBBVVRPQy4KKwkgKiBTdG9yZSB0aGUgb3JpZ2luYWwgQVVUT0MgdmFsdWUgaWYgaXQgaGFzIG5vdCBiZWVuCisJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCisJICogQVVUT0MgdmFsdWUgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBzZXRzIGJhY2sgdG8gZGVhdWx0cy4KIAkgKi8KIAlhdXRvYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0JaWYgKGh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQpIHsKLQkJYXV0b2MgJj0gfihJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUpOwotCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0xNU19NQVNLKTsKLQkJYXV0b2MgfD0gaHctPm1hYy5saW5rX2F0dGFjaF90eXBlOwotCQlhdXRvYyB8PSBody0+bWFjLmxpbmtfbW9kZV9zZWxlY3Q7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKLQl9IGVsc2UgewotCQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgKGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX0FUVEFDSF9UWVBFKTsKLQkJaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gKGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0spOwotCQlody0+bWFjLmxpbmtfc2V0dGluZ3NfbG9hZGVkID0gdHJ1ZTsKKwlpZiAoaHctPm1hYy5vcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkID09IGZhbHNlKSB7CisJCWh3LT5tYWMub3JpZ19hdXRvYyA9IGF1dG9jOworCQlody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPSB0cnVlOworCX0gZWxzZSBpZiAoYXV0b2MgIT0gaHctPm1hYy5vcmlnX2F1dG9jKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGh3LT5tYWMub3JpZ19hdXRvYyk7CiAJfQogCiAJLyogU3RvcmUgdGhlIHBlcm1hbmVudCBtYWMgYWRkcmVzcyAqLwpAQCAtOTk3LDExICsxMDQ5LDE4IEBACiAgKgogICogIERldGVybWluZXMgcGh5c2ljYWwgbGF5ZXIgY2FwYWJpbGl0aWVzIG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB1MzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewotCXMzMiBwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKIAogCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCQkvKiBEZWZhdWx0IGRldmljZSBJRCBpcyBtZXp6YW5pbmUgY2FyZCBLWC9LWDQgKi8KKwkJcGh5c2ljYWxfbGF5ZXIgPSAoSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9LWDQgfAorCQkJCSAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1gpOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9CWDsKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEVCX0NYNDoKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9DWDRfRFVBTF9QT1JUOgogCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfQ1g0OwpAQCAtMTA1NSw4ICsxMTE0LDExIEBACiAJLmNsZWFyX2h3X2NudHJzCQk9ICZpeGdiZV9jbGVhcl9od19jbnRyc19nZW5lcmljLAogCS5nZXRfbWVkaWFfdHlwZQkJPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTgsCiAJLmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIgPSAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OCwKKwkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMsCiAJLmdldF9tYWNfYWRkcgkJPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLnN0b3BfYWRhcHRlcgkJPSAmaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMsCisJLmdldF9idXNfaW5mbyAgICAgICAgICAgPSAmaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMsCisJLnNldF9sYW5faWQgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCiAJLnJlYWRfYW5hbG9nX3JlZzgJPSAmaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OCwKIAkud3JpdGVfYW5hbG9nX3JlZzgJPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTgsCiAJLnNldHVwX2xpbmsJCT0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZTdlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKQEAgLTAsMCArMSwxMjkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSAiaXhnYmUuaCIKKyNpbmNsdWRlICJpeGdiZV9waHkuaCIKKworI2RlZmluZSBJWEdCRV84MjU5OV9NQVhfVFhfUVVFVUVTIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9NQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9SQVJfRU5UUklFUyAgIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9NQ19UQkxfU0laRSAgIDEyOAorI2RlZmluZSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkUgIDEyOAorCitzMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKTsKK2VudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfcmVzZXRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfc2V0X3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOworczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOworczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2aW5kLCBib29sIHZsYW5fb24pOworczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKK3MzMiBpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKK3MzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKTsKK3MzMiBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCB2YWwpOworczMyIGl4Z2JlX3N0YXJ0X2h3X3Jldl8wXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zdGFydF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3UzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworCit2b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCS8qIFNldCB1cCBkdWFsIHNwZWVkIFNGUCsgc3VwcG9ydCAqLworCQltYWMtPm9wcy5zZXR1cF9saW5rID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyOworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyOworCX0gZWxzZSB7CisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OTsKKwl9Cit9CisKK3MzMiBpeGdiZV9zZXR1cF9zZnBfbW9kdWxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0LCBkYXRhX3ZhbHVlOworCisJaWYgKGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bikgeworCQlpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShodyk7CisJCXJldF92YWwgPSBpeGdiZV9nZXRfc2ZwX2luaXRfc2VxdWVuY2Vfb2Zmc2V0cyhodywgJmxpc3Rfb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KTsKKworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJZ290byBzZXR1cF9zZnBfb3V0OworCisJCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsICsrZGF0YV9vZmZzZXQsICZkYXRhX3ZhbHVlKTsKKwkJd2hpbGUgKGRhdGFfdmFsdWUgIT0gMHhmZmZmKSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIGRhdGFfdmFsdWUpOworCQkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCQkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOworCQl9CisJCS8qIE5vdyByZXN0YXJ0IERTUCAqLworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIDB4MDAwMDAxMDIpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIDB4MDAwMDBiMWQpOworCQlJWEdCRV9XUklURV9GTFVTSChodyk7CisJfQorCitzZXR1cF9zZnBfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5IC0gR2V0cyBNU0ktWCB2ZWN0b3IgY291bnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlYWQgUENJZSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgZ2V0IHRoZSBNU0ktWCB2ZWN0b3IgY291bnQgZnJvbQorICogIHRoZSBjYXBhYmlsaXRpZXMgdGFibGUuCisgKiovCit1MzIgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IG1zaXhfY291bnQ7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJRV9NU0lYXzgyNTk5X0NBUFMsCisJICAgICAgICAgICAgICAgICAgICAgJm1zaXhfY291bnQpOworCW1zaXhfY291bnQgJj0gSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLOworCisJLyogTVNJLVggY291bnQgaXMgemVyby1iYXNlZCBpbiBIVywgc28gaW5jcmVtZW50IHRvIGdpdmUgcHJvcGVyIHZhbHVlICovCisJbXNpeF9jb3VudCsrOworCisJcmV0dXJuIG1zaXhfY291bnQ7Cit9CisKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2ludmFyaWFudHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXN0cnVjdCBpeGdiZV9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJczMyIHJldF92YWw7CisKKwkvKiBTZXQgdGhlIGJ1cyBpbmZvcm1hdGlvbiBwcmlvciB0byBQSFkgaWRlbnRpZmljYXRpb24gKi8KKwltYWMtPm9wcy5nZXRfYnVzX2luZm8oaHcpOworCisJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIEN1IG9yIFNGSSBwaHkgdHlwZSAqLworCXJldF92YWwgPSBwaHktPm9wcy5pZGVudGlmeShodyk7CisKKwlpZiAocmV0X3ZhbCA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpCisJCWdvdG8gZ2V0X2ludmFyaWFudHNfb3V0OworCisJaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoaHcpOworCisJLyogU2V0dXAgU0ZQIG1vZHVsZSBpZiB0aGVyZSBpcyBvbmUgcHJlc2VudC4gKi8KKwlyZXRfdmFsID0gbWFjLT5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCS8qIElmIGNvcHBlciBtZWRpYSwgb3ZlcndyaXRlIHdpdGggY29wcGVyIGZ1bmN0aW9uIHBvaW50ZXJzICovCisJaWYgKG1hYy0+b3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgeworCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KKwkJICAgICAgICAgICAgICAgICAgJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5OworCQltYWMtPm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMgPQorCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OTsKKwl9CisKKwkvKiBQSFkgSW5pdCAqLworCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CisJY2FzZSBpeGdiZV9waHlfdG46CisJCXBoeS0+b3BzLmNoZWNrX2xpbmsgPSAmaXhnYmVfY2hlY2tfcGh5X2xpbmtfdG54OworCQlwaHktPm9wcy5nZXRfZmlybXdhcmVfdmVyc2lvbiA9CisJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfcGh5X2Zpcm13YXJlX3ZlcnNpb25fdG54OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltYWMtPm1jZnRfc2l6ZSA9IElYR0JFXzgyNTk5X01DX1RCTF9TSVpFOworCW1hYy0+dmZ0X3NpemUgPSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkU7CisJbWFjLT5udW1fcmFyX2VudHJpZXMgPSBJWEdCRV84MjU5OV9SQVJfRU5UUklFUzsKKwltYWMtPm1heF9yeF9xdWV1ZXMgPSBJWEdCRV84MjU5OV9NQVhfUlhfUVVFVUVTOworCW1hYy0+bWF4X3R4X3F1ZXVlcyA9IElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVM7CisJbWFjLT5tYXhfbXNpeF92ZWN0b3JzID0gaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShodyk7CisKK2dldF9pbnZhcmlhbnRzX291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5IC0gRGV0ZXJtaW5lcyBsaW5rIGNhcGFiaWxpdGllcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBuZWdvdGlhdGlvbjogdHJ1ZSB3aGVuIGF1dG9uZWcgb3IgYXV0b3RyeSBpcyBlbmFibGVkCisgKgorICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgorICoqLworczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmVnb3RpYXRpb24pCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwlzd2l0Y2ggKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU46CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xR19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSOgorCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl8xR19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSToKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tSX1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYX1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU19TR01JSV8xR18xMDBNOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTDsKKwkJKm5lZ290aWF0aW9uID0gZmFsc2U7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCB8CisJCSAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCX0KKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkgLSBEZXRlcm1pbmVzIGxpbmsgY2FwYWJpbGl0aWVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogcG9pbnRlciB0byBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IGJvb2xlYW4gYXV0by1uZWdvdGlhdGlvbiB2YWx1ZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBsaW5rIGNhcGFiaWxpdGllcyBieSByZWFkaW5nIHRoZSBBVVRPQyByZWdpc3Rlci4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCXUxNiBzcGVlZF9hYmlsaXR5OworCisJKnNwZWVkID0gMDsKKwkqYXV0b25lZyA9IHRydWU7CisKKwlzdGF0dXMgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgSVhHQkVfTURJT19QSFlfU1BFRURfQUJJTElUWSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9NRElPX1BNQV9QTURfREVWX1RZUEUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwZWVkX2FiaWxpdHkpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgSVhHQkVfTURJT19QSFlfU1BFRURfMTBHKQorCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoc3BlZWRfYWJpbGl0eSAmIElYR0JFX01ESU9fUEhZX1NQRUVEXzFHKQorCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkgLSBHZXQgbWVkaWEgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmV0dXJucyB0aGUgbWVkaWEgdHlwZSAoZmliZXIsIGNvcHBlciwgYmFja3BsYW5lKQorICoqLworZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJZW51bSBpeGdiZV9tZWRpYV90eXBlIG1lZGlhX3R5cGU7CisKKwkvKiBEZXRlY3QgaWYgdGhlcmUgaXMgYSBjb3BwZXIgUEhZIGF0dGFjaGVkLiAqLworCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X2N1X3Vua25vd24gfHwKKwkgICAgaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV90bikgeworCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXI7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKwkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2JhY2twbGFuZTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiBtZWRpYV90eXBlOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OSAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCisgKiAgUmVzdGFydHMgdGhlIGxpbmsuICBQZXJmb3JtcyBhdXRvbmVnb3RpYXRpb24gaWYgbmVlZGVkLgorICoqLworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGF1dG9jX3JlZzsKKwl1MzIgbGlua3NfcmVnOworCXUzMiBpOworCXMzMiBzdGF0dXMgPSAwOworCisJLyogUmVzdGFydCBsaW5rICovCisJYXV0b2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOworCisJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLworCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJCSAgICAoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkJbGlua3NfcmVnID0gMDsgLyogSnVzdCBpbiBjYXNlIEF1dG9uZWcgdGltZSA9IDAgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9BVVRPX05FR19USU1FOyBpKyspIHsKKwkJCQlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCQkJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19LWF9BTl9DT01QKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCX0KKwkJCWlmICghKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApKSB7CisJCQkJc3RhdHVzID0gSVhHQkVfRVJSX0FVVE9ORUdfTk9UX0NPTVBMRVRFOworCQkJCWh3X2RiZyhodywgIkF1dG9uZWcgZGlkIG5vdCBjb21wbGV0ZS5cbiIpOworCQkJfQorCQl9CisJfQorCisJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCXN0YXR1cyA9IGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoaHcsIDApOworCisJLyogQWRkIGRlbGF5IHRvIGZpbHRlciBvdXQgbm9pc2VzIGR1cmluZyBpbml0aWFsIGxpbmsgc2V0dXAgKi8KKwltc2xlZXAoNTApOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlciAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCisgKiAgUmVzdGFydHMgdGhlIGxpbmsgZm9yIG11bHRpLXNwZWVkIGZpYmVyIGF0IDFHIHNwZWVkLCBpZiBsaW5rCisgKiAgZmFpbHMgYXQgMTBHLgorICogIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSAwOworCWl4Z2JlX2xpbmtfc3BlZWQgbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfODI1OTlfQVVUT05FRzsKKwlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LCBsaW5rX3NwZWVkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlciAtIFNldCBNQUMgbGluayBzcGVlZAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1cyA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBwaHlfbGlua19zcGVlZDsKKwlpeGdiZV9saW5rX3NwZWVkIGhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKwl1MzIgc3BlZWRjbnQgPSAwOworCXUzMiBlc2RwX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FU0RQKTsKKwlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwlib29sIG5lZ290aWF0aW9uOworCisJLyogTWFzayBvZmYgcmVxdWVzdGVkIGJ1dCBub24tc3VwcG9ydGVkIHNwZWVkcyAqLworCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJnBoeV9saW5rX3NwZWVkLCAmbmVnb3RpYXRpb24pOworCXNwZWVkICY9IHBoeV9saW5rX3NwZWVkOworCisJLyoKKwkgKiBUcnkgZWFjaCBzcGVlZCBvbmUgYnkgb25lLCBoaWdoZXN0IHByaW9yaXR5IGZpcnN0LiAgV2UgZG8gdGhpcyBpbgorCSAqIHNvZnR3YXJlIGJlY2F1c2UgMTBnYiBmaWJlciBkb2Vzbid0IHN1cHBvcnQgc3BlZWQgYXV0b25lZ290aWF0aW9uLgorCSAqLworCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSB7CisJCXNwZWVkY250Kys7CisJCWhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCisJCS8qIFNldCBoYXJkd2FyZSBTRFAncyAqLworCQllc2RwX3JlZyB8PSAoSVhHQkVfRVNEUF9TRFA1X0RJUiB8IElYR0JFX0VTRFBfU0RQNSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRVNEUCwgZXNkcF9yZWcpOworCisJCWl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KGh3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKworCQltc2xlZXAoNTApOworCisJCS8qIElmIHdlIGhhdmUgbGluaywganVzdCBqdW1wIG91dCAqLworCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmcGh5X2xpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJCWlmIChsaW5rX3VwKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgeworCQlzcGVlZGNudCsrOworCQlpZiAoaGlnaGVzdF9saW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTikKKwkJCWhpZ2hlc3RfbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisKKwkJLyogU2V0IGhhcmR3YXJlIFNEUCdzICovCisJCWVzZHBfcmVnICY9IH5JWEdCRV9FU0RQX1NEUDU7CisJCWVzZHBfcmVnIHw9IElYR0JFX0VTRFBfU0RQNV9ESVI7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRVNEUCwgZXNkcF9yZWcpOworCisJCWl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KAorCQkJaHcsIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwsIGF1dG9uZWcsCisJCQlhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCisJCW1zbGVlcCg1MCk7CisKKwkJLyogSWYgd2UgaGF2ZSBsaW5rLCBqdXN0IGp1bXAgb3V0ICovCisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZwaHlfbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwkJaWYgKGxpbmtfdXApCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdlIGRpZG4ndCBnZXQgbGluay4gIENvbmZpZ3VyZSBiYWNrIHRvIHRoZSBoaWdoZXN0IHNwZWVkIHdlIHRyaWVkLAorCSAqIChpZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSkuICBXZSBjYWxsIG91cnNlbHZlcyBiYWNrIHdpdGgganVzdCB0aGUKKwkgKiBzaW5nbGUgaGlnaGVzdCBzcGVlZCB0aGF0IHRoZSB1c2VyIHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAoc3BlZWRjbnQgPiAxKQorCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdF9saW5rX3NwZWVkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19tYWNfbGlua184MjU5OSAtIERldGVybWluZSBsaW5rIGFuZCBzcGVlZCBzdGF0dXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAbGlua191cDogdHJ1ZSB3aGVuIGxpbmsgaXMgdXAKKyAqICBAbGlua191cF93YWl0X3RvX2NvbXBsZXRlOiBib29sIHVzZWQgdG8gd2FpdCBmb3IgbGluayB1cCBvciBub3QKKyAqCisgKiAgUmVhZHMgdGhlIGxpbmtzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiBsaW5rIGlzIHVwIGFuZCB0aGUgY3VycmVudCBzcGVlZAorICoqLworczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxpbmtfdXAsIGJvb2wgbGlua191cF93YWl0X3RvX2NvbXBsZXRlKQoreworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisKKwlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCWlmIChsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX0xJTktfVVBfVElNRTsgaSsrKSB7CisJCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApIHsKKwkJCQkqbGlua191cCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCSpsaW5rX3VwID0gZmFsc2U7CisJCQl9CisJCQltc2xlZXAoMTAwKTsKKwkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApCisJCQkqbGlua191cCA9IHRydWU7CisJCWVsc2UKKwkJCSpsaW5rX3VwID0gZmFsc2U7CisJfQorCisJaWYgKChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSkgPT0KKwkgICAgSVhHQkVfTElOS1NfU1BFRURfMTBHXzgyNTk5KQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwllbHNlIGlmICgobGlua3NfcmVnICYgSVhHQkVfTElOS1NfU1BFRURfODI1OTkpID09CisJICAgICAgICAgSVhHQkVfTElOS1NfU1BFRURfMUdfODI1OTkpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJZWxzZQorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgTUFDIGxpbmsgc3BlZWQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAorICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaXMgbmVlZGVkCisgKgorICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIGF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwl1MzIgYXV0b2MyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DMik7CisJdTMyIGxpbmtfbW9kZSA9IGF1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0s7CisJdTMyIHBtYV9wbWRfMWcgPSBhdXRvYyAmIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSzsKKwl1MzIgcG1hX3BtZF8xMGdfc2VyaWFsID0gYXV0b2MyICYgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9NQVNLOworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX2NhcGFiaWxpdGllcyA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBzcGVlZCBwYXNzZWQgaW4gaXMgc3VwcG9ydGVkLiAqLworCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmxpbmtfY2FwYWJpbGl0aWVzLCAmYXV0b25lZyk7CisJc3BlZWQgJj0gbGlua19jYXBhYmlsaXRpZXM7CisKKwlpZiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCX0gZWxzZSBpZiAobGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKKwkgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJICAgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkvKiBTZXQgS1g0L0tYL0tSIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHNwZWVkIHJlcXVlc3RlZCAqLworCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0sgfCBJWEdCRV9BVVRPQ19LUl9TVVBQKTsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCisJCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1g0X1NVUFA7CisJCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LUl9TVVBQOworCQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKQorCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfS1hfU1VQUDsKKwl9IGVsc2UgaWYgKChwbWFfcG1kXzFnID09IElYR0JFX0FVVE9DXzFHX1NGSSkgJiYKKwkgICAgICAgICAgIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU4gfHwKKwkgICAgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzFHX0FOKSkgeworCQkvKiBTd2l0Y2ggZnJvbSAxRyBTRkkgdG8gMTBHIFNGSSBpZiByZXF1ZXN0ZWQgKi8KKwkJaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgJiYKKwkJICAgIChwbWFfcG1kXzEwZ19zZXJpYWwgPT0gSVhHQkVfQVVUT0MyXzEwR19TRkkpKSB7CisJCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7CisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTDsKKwkJfQorCX0gZWxzZSBpZiAoKHBtYV9wbWRfMTBnX3NlcmlhbCA9PSBJWEdCRV9BVVRPQzJfMTBHX1NGSSkgJiYKKwkgICAgICAgICAgIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUwpKSB7CisJCS8qIFN3aXRjaCBmcm9tIDEwRyBTRkkgdG8gMUcgU0ZJIGlmIHJlcXVlc3RlZCAqLworCQlpZiAoKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpICYmCisJCSAgICAocG1hX3BtZF8xZyA9PSBJWEdCRV9BVVRPQ18xR19TRkkpKSB7CisJCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfTE1TX01BU0s7CisJCQlpZiAoYXV0b25lZykKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMUdfQU47CisJCQllbHNlCisJCQkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU47CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLyogUmVzdGFydCBsaW5rICovCisJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0FOX1JFU1RBUlQ7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jKTsKKworCQkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCisJCWlmIChhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJCWlmIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCQkJICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOIHx8CisJCQkgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfU0dNSUkpIHsKKwkJCQlsaW5rc19yZWcgPSAwOyAvKkp1c3QgaW4gY2FzZSBBdXRvbmVnIHRpbWU9MCovCisJCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgeworCQkJCQlsaW5rc19yZWcgPQorCQkJCQkgICAgICAgSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKKwkJCQkJaWYgKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApCisJCQkJCQlicmVhazsKKwkJCQkJbXNsZWVwKDEwMCk7CisJCQkJfQorCQkJCWlmICghKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApKSB7CisJCQkJCXN0YXR1cyA9CisJCQkJCSAgICAgICAgSVhHQkVfRVJSX0FVVE9ORUdfTk9UX0NPTVBMRVRFOworCQkJCQlod19kYmcoaHcsICJBdXRvbmVnIGRpZCBub3QgIgorCQkJCQkgICAgICAgImNvbXBsZXRlLlxuIik7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9mY19nZW5lcmljKGh3LCAwKTsKKworCQkvKiBBZGQgZGVsYXkgdG8gZmlsdGVyIG91dCBub2lzZXMgZHVyaW5nIGluaXRpYWwgbGluayBzZXR1cCAqLworCQltc2xlZXAoNTApOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5IC0gU2V0dXAgY29wcGVyIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc3RhcnRzIHRoZSBsaW5rIG9uIFBIWSBhbmQgdGhlbiBNQUMuIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1czsKKworCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uIG9uIFBIWSAqLworCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmsoaHcpOworCisJLyogU2V0IHVwIE1BQyAqLworCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5IC0gU2V0IHRoZSBQSFkgYXV0b25lZyBhZHZlcnRpc2VkIGZpZWxkCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgaWYgd2FpdGluZyBpcyBuZWVkZWQgdG8gY29tcGxldGUKKyAqCisgKiAgUmVzdGFydHMgbGluayBvbiBQSFkgYW5kIE1BQyBiYXNlZCBvbiBzZXR0aW5ncyBwYXNzZWQgaW4uCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJczMyIHN0YXR1czsKKworCS8qIFNldHVwIHRoZSBQSFkgYWNjb3JkaW5nIHRvIGlucHV0IHNwZWVkICovCisJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGlua19zcGVlZChodywgc3BlZWQsIGF1dG9uZWcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCS8qIFNldCB1cCBNQUMgKi8KKwlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShodyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9yZXNldF9od184MjU5OSAtIFBlcmZvcm0gaGFyZHdhcmUgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJlc2V0cyB0aGUgaGFyZHdhcmUgYnkgcmVzZXR0aW5nIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cywgbWFza3MKKyAqICBhbmQgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLCBwZXJmb3JtIGEgUEhZIHJlc2V0LCBhbmQgcGVyZm9ybSBhIGxpbmsgKE1BQykKKyAqICByZXNldC4KKyAqKi8KK3MzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBjdHJsLCBjdHJsX2V4dDsKKwl1MzIgaTsKKwl1MzIgYXV0b2M7CisJdTMyIGF1dG9jMjsKKworCS8qIENhbGwgYWRhcHRlciBzdG9wIHRvIGRpc2FibGUgdHgvcnggYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwlody0+bWFjLm9wcy5zdG9wX2FkYXB0ZXIoaHcpOworCisJLyogUmVzZXQgUEhZICovCisJaHctPnBoeS5vcHMucmVzZXQoaHcpOworCisJLyoKKwkgKiBQcmV2ZW50IHRoZSBQQ0ktRSBidXMgZnJvbSBmcm9tIGhhbmdpbmcgYnkgZGlzYWJsaW5nIFBDSS1FIG1hc3RlcgorCSAqIGFjY2VzcyBhbmQgdmVyaWZ5IG5vIHBlbmRpbmcgcmVxdWVzdHMgYmVmb3JlIHJlc2V0CisJICovCisJaWYgKGl4Z2JlX2Rpc2FibGVfcGNpZV9tYXN0ZXIoaHcpICE9IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOworCQlod19kYmcoaHcsICJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKKwl9CisKKwkvKgorCSAqIElzc3VlIGdsb2JhbCByZXNldCB0byB0aGUgTUFDLiAgVGhpcyBuZWVkcyB0byBiZSBhIFNXIHJlc2V0LgorCSAqIElmIGxpbmsgcmVzZXQgaXMgdXNlZCwgaXQgbWlnaHQgcmVzZXQgdGhlIE1BQyB3aGVuIG1uZyBpcyB1c2luZyBpdAorCSAqLworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IElYR0JFX0NUUkxfUlNUKSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogUG9sbCBmb3IgcmVzZXQgYml0IHRvIHNlbGYtY2xlYXIgaW5kaWNhdGluZyByZXNldCBpcyBjb21wbGV0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJaWYgKCEoY3RybCAmIElYR0JFX0NUUkxfUlNUKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY3RybCAmIElYR0JFX0NUUkxfUlNUKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CisJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJfQorCS8qIENsZWFyIFBGIFJlc2V0IERvbmUgYml0IHNvIFBGL1ZGIE1haWwgT3BzIGNhbiB3b3JrICovCisJY3RybF9leHQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQpOworCWN0cmxfZXh0IHw9IElYR0JFX0NUUkxfRVhUX1BGUlNURDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkxfRVhULCBjdHJsX2V4dCk7CisKKwltc2xlZXAoNTApOworCisKKworCS8qCisJICogU3RvcmUgdGhlIG9yaWdpbmFsIEFVVE9DL0FVVE9DMiB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vdCBiZWVuCisJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCisJICogdmFsdWVzIHNpbmNlIHRoZSByZXNldCBvcGVyYXRpb24gc2V0cyBiYWNrIHRvIGRlZmF1bHRzLgorCSAqLworCWF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwlhdXRvYzIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MyKTsKKwlpZiAoaHctPm1hYy5vcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkID09IGZhbHNlKSB7CisJCWh3LT5tYWMub3JpZ19hdXRvYyA9IGF1dG9jOworCQlody0+bWFjLm9yaWdfYXV0b2MyID0gYXV0b2MyOworCQlody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCWlmIChhdXRvYyAhPSBody0+bWFjLm9yaWdfYXV0b2MpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCAoaHctPm1hYy5vcmlnX2F1dG9jIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUKSk7CisKKwkJaWYgKChhdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykgIT0KKwkJICAgIChody0+bWFjLm9yaWdfYXV0b2MyICYgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0spKSB7CisJCQlhdXRvYzIgJj0gfklYR0JFX0FVVE9DMl9VUFBFUl9NQVNLOworCQkJYXV0b2MyIHw9IChody0+bWFjLm9yaWdfYXV0b2MyICYKKwkJCSAgICAgICAgICAgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0spOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQzIsIGF1dG9jMik7CisJCX0KKwl9CisKKwkvKiBTdG9yZSB0aGUgcGVybWFuZW50IG1hYyBhZGRyZXNzICovCisJaHctPm1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody0+bWFjLnBlcm1fYWRkcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbGVhcl92bWRxXzgyNTk5IC0gRGlzYXNzb2NpYXRlIGEgVk1EcSBwb29sIGluZGV4IGZyb20gYSByeCBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdAorICogIEByYXI6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciBpbmRleCB0byBkaXNhc3NvY2lhdGUKKyAqICBAdm1kcTogVk1EcSBwb29sIGluZGV4IHRvIHJlbW92ZSBmcm9tIHRoZSByYXIKKyAqKi8KK3MzMiBpeGdiZV9jbGVhcl92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQoreworCXUzMiBtcHNhcl9sbywgbXBzYXJfaGk7CisJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CisKKwlpZiAocmFyIDwgcmFyX2VudHJpZXMpIHsKKwkJbXBzYXJfbG8gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSk7CisJCW1wc2FyX2hpID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhcikpOworCisJCWlmICghbXBzYXJfbG8gJiYgIW1wc2FyX2hpKQorCQkJZ290byBkb25lOworCisJCWlmICh2bWRxID09IElYR0JFX0NMRUFSX1ZNRFFfQUxMKSB7CisJCQlpZiAobXBzYXJfbG8pIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIDApOworCQkJCW1wc2FyX2xvID0gMDsKKwkJCX0KKwkJCWlmIChtcHNhcl9oaSkgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSwgMCk7CisJCQkJbXBzYXJfaGkgPSAwOworCQkJfQorCQl9IGVsc2UgaWYgKHZtZHEgPCAzMikgeworCQkJbXBzYXJfbG8gJj0gfigxIDw8IHZtZHEpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpLCBtcHNhcl9sbyk7CisJCX0gZWxzZSB7CisJCQltcHNhcl9oaSAmPSB+KDEgPDwgKHZtZHEgLSAzMikpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCBtcHNhcl9oaSk7CisJCX0KKworCQkvKiB3YXMgdGhhdCB0aGUgbGFzdCBwb29sIHVzaW5nIHRoaXMgcmFyPyAqLworCQlpZiAobXBzYXJfbG8gPT0gMCAmJiBtcHNhcl9oaSA9PSAwICYmIHJhciAhPSAwKQorCQkJaHctPm1hYy5vcHMuY2xlYXJfcmFyKGh3LCByYXIpOworCX0gZWxzZSB7CisJCWh3X2RiZyhodywgIlJBUiBpbmRleCAlZCBpcyBvdXQgb2YgcmFuZ2UuXG4iLCByYXIpOworCX0KKworZG9uZToKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X3ZtZHFfODI1OTkgLSBBc3NvY2lhdGUgYSBWTURxIHBvb2wgaW5kZXggd2l0aCBhIHJ4IGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0CisgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGFzc29jaWF0ZSB3aXRoIGEgVk1EcSBpbmRleAorICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXgKKyAqKi8KK3MzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSkKK3sKKwl1MzIgbXBzYXI7CisJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CisKKwlpZiAocmFyIDwgcmFyX2VudHJpZXMpIHsKKwkJaWYgKHZtZHEgPCAzMikgeworCQkJbXBzYXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSk7CisJCQltcHNhciB8PSAxIDw8IHZtZHE7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIG1wc2FyKTsKKwkJfSBlbHNlIHsKKwkJCW1wc2FyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhcikpOworCQkJbXBzYXIgfD0gMSA8PCAodm1kcSAtIDMyKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSwgbXBzYXIpOworCQl9CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiUkFSIGluZGV4ICVkIGlzIG91dCBvZiByYW5nZS5cbiIsIHJhcik7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdmZ0YV84MjU5OSAtIFNldCBWTEFOIGZpbHRlciB0YWJsZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAdmxhbjogVkxBTiBpZCB0byB3cml0ZSB0byBWTEFOIGZpbHRlcgorICogIEB2aW5kOiBWTURxIG91dHB1dCBpbmRleCB0aGF0IG1hcHMgcXVldWUgdG8gVkxBTiBpZCBpbiBWRlZGQgorICogIEB2bGFuX29uOiBib29sZWFuIGZsYWcgdG8gdHVybiBvbi9vZmYgVkxBTiBpbiBWRlZGCisgKgorICogIFR1cm4gb24vb2ZmIHNwZWNpZmllZCBWTEFOIGluIHRoZSBWTEFOIGZpbHRlciB0YWJsZS4KKyAqKi8KK3MzMiBpeGdiZV9zZXRfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmxhbiwgdTMyIHZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQoreworCXUzMiByZWdpbmRleDsKKwl1MzIgYml0aW5kZXg7CisJdTMyIGJpdHM7CisJdTMyIGZpcnN0X2VtcHR5X3Nsb3Q7CisKKwlpZiAodmxhbiA+IDQwOTUpCisJCXJldHVybiBJWEdCRV9FUlJfUEFSQU07CisKKwkvKgorCSAqIHRoaXMgaXMgYSAyIHBhcnQgb3BlcmF0aW9uIC0gZmlyc3QgdGhlIFZGVEEsIHRoZW4gdGhlCisJICogVkxWRiBhbmQgVkxWRkIgaWYgdmluZCBpcyBzZXQKKwkgKi8KKworCS8qIFBhcnQgMQorCSAqIFRoZSBWRlRBIGlzIGEgYml0c3RyaW5nIG1hZGUgdXAgb2YgMTI4IDMyLWJpdCByZWdpc3RlcnMKKwkgKiB0aGF0IGVuYWJsZSB0aGUgcGFydGljdWxhciBWTEFOIGlkLCBtdWNoIGxpa2UgdGhlIE1UQToKKwkgKiAgICBiaXRzWzExLTVdOiB3aGljaCByZWdpc3RlcgorCSAqICAgIGJpdHNbNC0wXTogIHdoaWNoIGJpdCBpbiB0aGUgcmVnaXN0ZXIKKwkgKi8KKwlyZWdpbmRleCA9ICh2bGFuID4+IDUpICYgMHg3RjsKKwliaXRpbmRleCA9IHZsYW4gJiAweDFGOworCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCkpOworCWlmICh2bGFuX29uKQorCQliaXRzIHw9ICgxIDw8IGJpdGluZGV4KTsKKwllbHNlCisJCWJpdHMgJj0gfigxIDw8IGJpdGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEocmVnaW5kZXgpLCBiaXRzKTsKKworCisJLyogUGFydCAyCisJICogSWYgdGhlIHZpbmQgaXMgc2V0CisJICogICBFaXRoZXIgdmxhbl9vbgorCSAqICAgICBtYWtlIHN1cmUgdGhlIHZsYW4gaXMgaW4gVkxWRgorCSAqICAgICBzZXQgdGhlIHZpbmQgYml0IGluIHRoZSBtYXRjaGluZyBWTFZGQgorCSAqICAgT3IgIXZsYW5fb24KKwkgKiAgICAgY2xlYXIgdGhlIHBvb2wgYml0IGFuZCBwb3NzaWJseSB0aGUgdmluZAorCSAqLworCWlmICh2aW5kKSB7CisJCS8qIGZpbmQgdGhlIHZsYW5pZCBvciB0aGUgZmlyc3QgZW1wdHkgc2xvdCAqLworCQlmaXJzdF9lbXB0eV9zbG90ID0gMDsKKworCQlmb3IgKHJlZ2luZGV4ID0gMTsgcmVnaW5kZXggPCBJWEdCRV9WTFZGX0VOVFJJRVM7IHJlZ2luZGV4KyspIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCkpOworCQkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQorCQkJCWZpcnN0X2VtcHR5X3Nsb3QgPSByZWdpbmRleDsKKwkJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlZ2luZGV4ID49IElYR0JFX1ZMVkZfRU5UUklFUykgeworCQkJaWYgKGZpcnN0X2VtcHR5X3Nsb3QpCisJCQkJcmVnaW5kZXggPSBmaXJzdF9lbXB0eV9zbG90OworCQkJZWxzZSB7CisJCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJaWYgKHZsYW5fb24pIHsKKwkJCS8qIHNldCB0aGUgcG9vbCBiaXQgKi8KKwkJCWlmICh2aW5kIDwgMzIpIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOworCQkJfSBlbHNlIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKKwkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogY2xlYXIgdGhlIHBvb2wgYml0ICovCisJCQlpZiAodmluZCA8IDMyKSB7CisJCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7CisJCQliaXRzICY9IH4oMSA8PCB2aW5kKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpLCBiaXRzKTsKKwkJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOworCQkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOworCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCX0KKwkJfQorCisJCWlmIChiaXRzKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSwKKwkJCSAgICAgICAgICAgICAgICAoSVhHQkVfVkxWRl9WSUVOIHwgdmxhbikpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLCAwKTsKKwl9CisKK291dDoKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OSAtIENsZWFyIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbGVhcnMgdGhlIFZMQU4gZmlsZXIgdGFibGUsIGFuZCB0aGUgVk1EcSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlcgorICoqLworczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBody0+bWFjLnZmdF9zaXplOyBvZmZzZXQrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRBKG9mZnNldCksIDApOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBJWEdCRV9WTFZGX0VOVFJJRVM7IG9mZnNldCsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihvZmZzZXQpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGQihvZmZzZXQgKiAyKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRkIoKG9mZnNldCAqIDIpICsgMSksIDApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTkgLSBCbGluayBMRUQgYmFzZWQgb24gaW5kZXguCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogbGVkIG51bWJlciB0byBibGluaworICoqLworczMyIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIGxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZF9yZWcgfD0gSVhHQkVfTEVEX0JMSU5LKGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0xFRENUTCwgbGVkX3JlZyk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX2JsaW5rX2xlZF9zdG9wXzgyNTk5IC0gU3RvcCBibGlua2luZyBMRUQgYmFzZWQgb24gaW5kZXguCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpbmRleDogbGVkIG51bWJlciB0byBzdG9wIGJsaW5raW5nCisgKiovCitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KQoreworCXUzMiBsZWRfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xFRENUTCk7CisKKwlsZWRfcmVnICY9IH5JWEdCRV9MRURfTU9ERV9NQVNLKGluZGV4KTsKKwlsZWRfcmVnICY9IH5JWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5IC0gSW5pdGlhbGl6ZSB0aGUgVW5pY2FzdCBUYWJsZSBBcnJheQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqKi8KK3MzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlpbnQgaTsKKwlod19kYmcoaHcsICIgQ2xlYXJpbmcgVVRBXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9VVEEoaSksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkgLSBSZWFkcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVnOiBhbmFsb2cgcmVnaXN0ZXIgdG8gcmVhZAorICogIEB2YWw6IHJlYWQgdmFsdWUKKyAqCisgKiAgUGVyZm9ybXMgcmVhZCBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgorICoqLworczMyIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggKnZhbCkKK3sKKwl1MzIgIGNvcmVfY3RsOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DT1JFQ1RMLCBJWEdCRV9DT1JFQ1RMX1dSSVRFX0NNRCB8CisJICAgICAgICAgICAgICAgIChyZWcgPDwgOCkpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMTApOworCWNvcmVfY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NPUkVDVEwpOworCSp2YWwgPSAodTgpY29yZV9jdGw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkgLSBXcml0ZXMgOCBiaXQgT21lciBhbmFsb2cgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHJlZzogYXRsYXMgcmVnaXN0ZXIgdG8gd3JpdGUKKyAqICBAdmFsOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyB3cml0ZSBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCkKK3sKKwl1MzIgIGNvcmVfY3RsOworCisJY29yZV9jdGwgPSAocmVnIDw8IDgpIHwgdmFsOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgY29yZV9jdGwpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5IC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIGdlbmVyaWMgc3RhcnRfaHcgZnVuY3Rpb24uCisgKiAgVGhlbiBwZXJmb3JtcyBkZXZpY2Utc3BlY2lmaWM6CisgKiAgQ2xlYXJzIHRoZSByYXRlIGxpbWl0ZXIgcmVnaXN0ZXJzLgorICoqLworczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHFfbnVtOworCisJaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhodyk7CisKKwkvKiBDbGVhciB0aGUgcmF0ZSBsaW1pdGVycyAqLworCWZvciAocV9udW0gPSAwOyBxX251bSA8IGh3LT5tYWMubWF4X3R4X3F1ZXVlczsgcV9udW0rKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBxX251bSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUQkNOUkMsIDApOworCX0KKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5IC0gR2V0IHBoeXNpY2FsIGxheWVyIG1vZHVsZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlIGZvdW5kIG9uIHRoZSBjdXJyZW50IGFkYXB0ZXIuCisgKiovCitzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9QSFlfQUREUl9JTlZBTElEOworCXN0YXR1cyA9IGl4Z2JlX2lkZW50aWZ5X3BoeV9nZW5lcmljKGh3KTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXN0YXR1cyA9IGl4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYyhodyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OSAtIFJldHVybnMgcGh5c2ljYWwgbGF5ZXIgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqKi8KK3UzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1OCBjb21wX2NvZGVzXzEwZyA9IDA7CisKKwlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OToKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9LWDQ6CisJCS8qIERlZmF1bHQgZGV2aWNlIElEIGlzIG1lenphbmluZSBjYXJkIEtYL0tYNCAqLworCQlwaHlzaWNhbF9sYXllciA9IChJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX0tYNCB8CisJCSAgICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0tYKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCQlody0+cGh5Lm9wcy5pZGVudGlmeV9zZnAoaHcpOworCisJCXN3aXRjaCAoaHctPnBoeS5zZnBfdHlwZSkgeworCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1OgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwOgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxOgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9TRlBfUExVU19DVTsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NyOgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX1NSOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfbHI6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOgorCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTE6CisJCQlody0+cGh5Lm9wcy5yZWFkX2kyY19lZXByb20oaHcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfU0ZGXzEwR0JFX0NPTVBfQ09ERVMsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBfY29kZXNfMTBnKTsKKwkJCWlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFU1JfQ0FQQUJMRSkKKwkJCQlwaHlzaWNhbF9sYXllciA9CisJCQkJICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfU1I7CisJCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKKwkJCQlwaHlzaWNhbF9sYXllciA9CisJCQkJICAgICAgICAgICAgICAgIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfTFI7CisJCQllbHNlCisJCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQlkZWZhdWx0OgorCQkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcGh5c2ljYWxfbGF5ZXI7Cit9CisKKy8qKgorICogIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkgLSBFbmFibGUgdGhlIFJ4IERNQSB1bml0IG9uIDgyNTk5CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWd2YWw6IHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlIHRvIFJYQ1RSTAorICoKKyAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdCBmb3IgODI1OTkKKyAqKi8KK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWd2YWwpCit7CisjZGVmaW5lIElYR0JFX01BWF9TRUNSWF9QT0xMIDMwCisJaW50IGk7CisJaW50IHNlY3J4cmVnOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciA4MjU5OSBzaWxpY29uIGVycmF0YSB3aGVuIGVuYWJsaW5nIHRoZSBSeCBkYXRhcGF0aC4KKwkgKiBJZiB0cmFmZmljIGlzIGluY29taW5nIGJlZm9yZSB3ZSBlbmFibGUgdGhlIFJ4IHVuaXQsIGl0IGNvdWxkIGhhbmcKKwkgKiB0aGUgUnggRE1BIHVuaXQuICBUaGVyZWZvcmUsIG1ha2Ugc3VyZSB0aGUgc2VjdXJpdHkgZW5naW5lIGlzCisJICogY29tcGxldGVseSBkaXNhYmxlZCBwcmlvciB0byBlbmFibGluZyB0aGUgUnggdW5pdC4KKwkgKi8KKwlzZWNyeHJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwpOworCXNlY3J4cmVnIHw9IElYR0JFX1NFQ1JYQ1RSTF9SWF9ESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwsIHNlY3J4cmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfTUFYX1NFQ1JYX1BPTEw7IGkrKykgeworCQlzZWNyeHJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TRUNSWFNUQVQpOworCQlpZiAoc2VjcnhyZWcgJiBJWEdCRV9TRUNSWFNUQVRfU0VDUlhfUkRZKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXVkZWxheSgxMCk7CisJfQorCisJLyogRm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSAqLworCWlmIChpID49IElYR0JFX01BWF9TRUNSWF9QT0xMKQorCQlod19kYmcoaHcsICJSeCB1bml0IGJlaW5nIGVuYWJsZWQgYmVmb3JlIHNlY3VyaXR5ICIKKwkJICAgICAgICJwYXRoIGZ1bGx5IGRpc2FibGVkLiAgQ29udGludWluZyB3aXRoIGluaXQuXG4iKTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWd2YWwpOworCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCk7CisJc2VjcnhyZWcgJj0gfklYR0JFX1NFQ1JYQ1RSTF9SWF9ESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TRUNSWENUUkwsIHNlY3J4cmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBtYWNfb3BzXzgyNTk5ID0geworCS5pbml0X2h3ICAgICAgICAgICAgICAgID0gJml4Z2JlX2luaXRfaHdfZ2VuZXJpYywKKwkucmVzZXRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9od184MjU5OSwKKwkuc3RhcnRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9zdGFydF9od184MjU5OSwKKwkuY2xlYXJfaHdfY250cnMgICAgICAgICA9ICZpeGdiZV9jbGVhcl9od19jbnRyc19nZW5lcmljLAorCS5nZXRfbWVkaWFfdHlwZSAgICAgICAgID0gJml4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5LAorCS5nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyID0gJml4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTksCisJLmVuYWJsZV9yeF9kbWEgICAgICAgICAgPSAmaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OSwKKwkuZ2V0X21hY19hZGRyICAgICAgICAgICA9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKKwkuc3RvcF9hZGFwdGVyICAgICAgICAgICA9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKKwkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKKwkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKKwkucmVhZF9hbmFsb2dfcmVnOCAgICAgICA9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5LAorCS53cml0ZV9hbmFsb2dfcmVnOCAgICAgID0gJml4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5LAorCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5LAorCS5zZXR1cF9saW5rX3NwZWVkICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5LAorCS5jaGVja19saW5rICAgICAgICAgICAgID0gJml4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5LAorCS5nZXRfbGlua19jYXBhYmlsaXRpZXMgID0gJml4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OSwKKwkubGVkX29uICAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb25fZ2VuZXJpYywKKwkubGVkX29mZiAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb2ZmX2dlbmVyaWMsCisJLmJsaW5rX2xlZF9zdGFydCAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0YXJ0XzgyNTk5LAorCS5ibGlua19sZWRfc3RvcCAgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdG9wXzgyNTk5LAorCS5zZXRfcmFyICAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF9yYXJfZ2VuZXJpYywKKwkuY2xlYXJfcmFyICAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl9yYXJfZ2VuZXJpYywKKwkuc2V0X3ZtZHEgICAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfdm1kcV84MjU5OSwKKwkuY2xlYXJfdm1kcSAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl92bWRxXzgyNTk5LAorCS5pbml0X3J4X2FkZHJzICAgICAgICAgID0gJml4Z2JlX2luaXRfcnhfYWRkcnNfZ2VuZXJpYywKKwkudXBkYXRlX3VjX2FkZHJfbGlzdCAgICA9ICZpeGdiZV91cGRhdGVfdWNfYWRkcl9saXN0X2dlbmVyaWMsCisJLnVwZGF0ZV9tY19hZGRyX2xpc3QgICAgPSAmaXhnYmVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLAorCS5lbmFibGVfbWMgICAgICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9tY19nZW5lcmljLAorCS5kaXNhYmxlX21jICAgICAgICAgICAgID0gJml4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYywKKwkuY2xlYXJfdmZ0YSAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl92ZnRhXzgyNTk5LAorCS5zZXRfdmZ0YSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92ZnRhXzgyNTk5LAorCS5zZXR1cF9mYyAgICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX2ZjX2dlbmVyaWMsCisJLmluaXRfdXRhX3RhYmxlcyAgICAgICAgPSAmaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5LAorCS5zZXR1cF9zZnAgICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5LAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyBlZXByb21fb3BzXzgyNTk5ID0geworCS5pbml0X3BhcmFtcyAgICAgICAgICAgID0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljLAorCS5yZWFkICAgICAgICAgICAgICAgICAgID0gJml4Z2JlX3JlYWRfZWVwcm9tX2dlbmVyaWMsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMsCisJLnZhbGlkYXRlX2NoZWNrc3VtICAgICAgPSAmaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCisJLnVwZGF0ZV9jaGVja3N1bSAgICAgICAgPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9waHlfb3BlcmF0aW9ucyBwaHlfb3BzXzgyNTk5ID0geworCS5pZGVudGlmeSAgICAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OSwKKwkuaWRlbnRpZnlfc2ZwICAgICAgICAgICA9ICZpeGdiZV9pZGVudGlmeV9zZnBfbW9kdWxlX2dlbmVyaWMsCisJLnJlc2V0ICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfcGh5X2dlbmVyaWMsCisJLnJlYWRfcmVnICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9waHlfcmVnX2dlbmVyaWMsCisJLndyaXRlX3JlZyAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfcGh5X3JlZ19nZW5lcmljLAorCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX3BoeV9saW5rX2dlbmVyaWMsCisJLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfc3BlZWRfZ2VuZXJpYywKKwkucmVhZF9pMmNfYnl0ZSAgICAgICAgICA9ICZpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMsCisJLndyaXRlX2kyY19ieXRlICAgICAgICAgPSAmaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYywKKwkucmVhZF9pMmNfZWVwcm9tICAgICAgICA9ICZpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYywKKwkud3JpdGVfaTJjX2VlcHJvbSAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMsCit9OworCitzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OV9pbmZvID0geworCS5tYWMgICAgICAgICAgICAgICAgICAgID0gaXhnYmVfbWFjXzgyNTk5RUIsCisJLmdldF9pbnZhcmlhbnRzICAgICAgICAgPSAmaXhnYmVfZ2V0X2ludmFyaWFudHNfODI1OTksCisJLm1hY19vcHMgICAgICAgICAgICAgICAgPSAmbWFjX29wc184MjU5OSwKKwkuZWVwcm9tX29wcyAgICAgICAgICAgICA9ICZlZXByb21fb3BzXzgyNTk5LAorCS5waHlfb3BzICAgICAgICAgICAgICAgID0gJnBoeV9vcHNfODI1OTksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBmNjdjNjg0Li44Y2ZkM2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKKyNpbmNsdWRlICJpeGdiZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgogCkBAIC04MCw5ICs4MSw2IEBACiAJLyogQ2xlYXIgdGhlIFZMQU4gZmlsdGVyIHRhYmxlICovCiAJaHctPm1hYy5vcHMuY2xlYXJfdmZ0YShodyk7CiAKLQkvKiBTZXQgdXAgbGluayAqLwotCWh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcpOwotCiAJLyogQ2xlYXIgc3RhdGlzdGljcyByZWdpc3RlcnMgKi8KIAlody0+bWFjLm9wcy5jbGVhcl9od19jbnRycyhodyk7CiAKQEAgLTI1NCw2ICsyNTIsODEgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMgLSBHZW5lcmljIHNldCBQQ0kgYnVzIGluZm8KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgdGhlIFBDSSBidXMgaW5mbyAoc3BlZWQsIHdpZHRoLCB0eXBlKSB3aXRoaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdHVyZQorICoqLworczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXUxNiBsaW5rX3N0YXR1czsKKworCWh3LT5idXMudHlwZSA9IGl4Z2JlX2J1c190eXBlX3BjaV9leHByZXNzOworCisJLyogR2V0IHRoZSBuZWdvdGlhdGVkIGxpbmsgd2lkdGggYW5kIHNwZWVkIGZyb20gUENJIGNvbmZpZyBzcGFjZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIElYR0JFX1BDSV9MSU5LX1NUQVRVUywKKwkgICAgICAgICAgICAgICAgICAgICAmbGlua19zdGF0dXMpOworCisJc3dpdGNoIChsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1dJRFRIKSB7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF8xOgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDE7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfV0lEVEhfMjoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF9wY2llX3gyOworCQlicmVhazsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzQ6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NDsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF84OgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1NQRUVEKSB7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19TUEVFRF8yNTAwOgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkXzI1MDA7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMDoKKwkJaHctPmJ1cy5zcGVlZCA9IGl4Z2JlX2J1c19zcGVlZF81MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkX3Vua25vd247CisJCWJyZWFrOworCX0KKworCW1hYy0+b3BzLnNldF9sYW5faWQoaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llIC0gU2V0IExBTiBpZCBmb3IgUENJZSBtdWx0aXBsZSBwb3J0IGRldmljZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBMQU4gZnVuY3Rpb24gaWQgYnkgcmVhZGluZyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycworICogIGFuZCBzd2FwcyB0aGUgcG9ydCB2YWx1ZSBpZiByZXF1ZXN0ZWQuCisgKiovCit2b2lkIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKKwl1MzIgcmVnOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NUQVRVUyk7CisJYnVzLT5mdW5jID0gKHJlZyAmIElYR0JFX1NUQVRVU19MQU5fSUQpID4+IElYR0JFX1NUQVRVU19MQU5fSURfU0hJRlQ7CisJYnVzLT5sYW5faWQgPSBidXMtPmZ1bmM7CisKKwkvKiBjaGVjayBmb3IgYSBwb3J0IHN3YXAgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkFDVFBTKTsKKwlpZiAocmVnICYgSVhHQkVfRkFDVFBTX0xGUykKKwkJYnVzLT5mdW5jIF49IDB4MTsKK30KKworLyoqCiAgKiAgaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMgLSBHZW5lcmljIHN0b3AgVHgvUnggdW5pdHMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMzkzLDYgKzQ2Niw3MyBAQAogfQogCiAvKioKKyAqICBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyAtIFdyaXRlcyAxNiBiaXQgdmFsdWUgdG8gRUVQUk9NCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQorICoKKyAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCisgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTggd3JpdGVfb3Bjb2RlID0gSVhHQkVfRUVQUk9NX1dSSVRFX09QQ09ERV9TUEk7CisKKwlody0+ZWVwcm9tLm9wcy5pbml0X3BhcmFtcyhodyk7CisKKwlpZiAob2Zmc2V0ID49IGh3LT5lZXByb20ud29yZF9zaXplKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007CisJCWdvdG8gb3V0OworCX0KKworCS8qIFByZXBhcmUgdGhlIEVFUFJPTSBmb3Igd3JpdGluZyAgKi8KKwlzdGF0dXMgPSBpeGdiZV9hY3F1aXJlX2VlcHJvbShodyk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKGl4Z2JlX3JlYWR5X2VlcHJvbShodykgIT0gMCkgeworCQkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOworCQkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJLyogIFNlbmQgdGhlIFdSSVRFIEVOQUJMRSBjb21tYW5kICg4IGJpdCBvcGNvZGUgKSAgKi8KKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBJWEdCRV9FRVBST01fV1JFTl9PUENPREVfU1BJLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVQUk9NX09QQ09ERV9CSVRTKTsKKworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJLyoKKwkJICogU29tZSBTUEkgZWVwcm9tcyB1c2UgdGhlIDh0aCBhZGRyZXNzIGJpdCBlbWJlZGRlZCBpbiB0aGUKKwkJICogb3Bjb2RlCisJCSAqLworCQlpZiAoKGh3LT5lZXByb20uYWRkcmVzc19iaXRzID09IDgpICYmIChvZmZzZXQgPj0gMTI4KSkKKwkJCXdyaXRlX29wY29kZSB8PSBJWEdCRV9FRVBST01fQThfT1BDT0RFX1NQSTsKKworCQkvKiBTZW5kIHRoZSBXcml0ZSBjb21tYW5kICg4LWJpdCBvcGNvZGUgKyBhZGRyKSAqLworCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHdyaXRlX29wY29kZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgKHUxNikob2Zmc2V0KjIpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMpOworCisJCS8qIFNlbmQgdGhlIGRhdGEgKi8KKwkJZGF0YSA9IChkYXRhID4+IDgpIHwgKGRhdGEgPDwgOCk7CisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgZGF0YSwgMTYpOworCQlpeGdiZV9zdGFuZGJ5X2VlcHJvbShodyk7CisKKwkJbXNsZWVwKGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5KTsKKwkJLyogRG9uZSB3aXRoIHdyaXRpbmcgLSByZWxlYXNlIHRoZSBFRVBST00gKi8KKwkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOworCX0KKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMgLSBSZWFkIEVFUFJPTSB3b3JkIHVzaW5nIGJpdC1iYW5nCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSByZWFkCkBAIC01MjEsNyArNjYxLDcgQEAKIHN0YXRpYyBzMzIgaXhnYmVfYWNxdWlyZV9lZXByb20oc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gMDsKLQl1MzIgZWVjOworCXUzMiBlZWMgPSAwOwogCXUzMiBpOwogCiAJaWYgKGl4Z2JlX2FjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgIT0gMCkKQEAgLTE0OTAsNiArMTYzMCwzMjYgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfZmNfZW5hYmxlIC0gRW5hYmxlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKKyAqCisgKiAgRW5hYmxlIGZsb3cgY29udHJvbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgKiovCitzMzIgaXhnYmVfZmNfZW5hYmxlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgbWZsY25fcmVnOworCXUzMiBmY2NmZ19yZWc7CisJdTMyIHJlZzsKKworCW1mbGNuX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJbWZsY25fcmVnICY9IH4oSVhHQkVfTUZMQ05fUkZDRSB8IElYR0JFX01GTENOX1JQRkNFKTsKKworCWZjY2ZnX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJZmNjZmdfcmVnICY9IH4oSVhHQkVfRkNDRkdfVEZDRV84MDJfM1ggfCBJWEdCRV9GQ0NGR19URkNFX1BSSU9SSVRZKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6IEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogMTogUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dAorCSAqICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6IEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiA0OiBQcmlvcml0eSBGbG93IENvbnRyb2wgaXMgZW5hYmxlZC4KKwkgKiBvdGhlcjogSW52YWxpZC4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKKwljYXNlIGl4Z2JlX2ZjX25vbmU6CisJCS8qIEZsb3cgY29udHJvbCBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiAqLworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3J4X3BhdXNlOgorCQkvKgorCQkgKiBSeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVHggRmxvdyBjb250cm9sIGlzCisJCSAqIGRpc2FibGVkIGJ5IHNvZnR3YXJlIG92ZXJyaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkKKwkJICogaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlgKKwkJICogUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZSBzdXBwb3J0IGJvdGgKKwkJICogc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJ4IFBBVVNFLiAgTGF0ZXIsIHdlIHdpbGwKKwkJICogZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQltZmxjbl9yZWcgfD0gSVhHQkVfTUZMQ05fUkZDRTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlmY2NmZ19yZWcgfD0gSVhHQkVfRkNDRkdfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJbWZsY25fcmVnIHw9IElYR0JFX01GTENOX1JGQ0U7CisJCWZjY2ZnX3JlZyB8PSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0RDQgorCWNhc2UgaXhnYmVfZmNfcGZjOgorCQlnb3RvIG91dDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlod19kYmcoaHcsICJGbG93IGNvbnRyb2wgcGFyYW0gc2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0X3ZhbCA9IC1JWEdCRV9FUlJfQ09ORklHOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCisJLyogRW5hYmxlIDgwMi4zeCBiYXNlZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NRkxDTiwgbWZsY25fcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDQ0ZHLCBmY2NmZ19yZWcpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLCBlbmFibGUgWE9OLiAqLworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgaHctPmZjLmxvd193YXRlcik7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJICAgICAgICAgICAgICAgIChody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU4pKTsKKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtKSk7CisJaWYgKChwYWNrZXRidWZfbnVtICYgMSkgPT0gMCkKKwkJcmVnID0gKHJlZyAmIDB4RkZGRjAwMDApIHwgaHctPmZjLnBhdXNlX3RpbWU7CisJZWxzZQorCQlyZWcgPSAocmVnICYgMHgwMDAwRkZGRikgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYocGFja2V0YnVmX251bSAvIDIpLCByZWcpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUViwgKGh3LT5mYy5wYXVzZV90aW1lID4+IDEpKTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9mY19hdXRvbmVnIC0gQ29uZmlndXJlIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgTmVnb3RpYXRlcyBmbG93IGNvbnRyb2wgY2FwYWJpbGl0aWVzIHdpdGggbGluayBwYXJ0bmVyIHVzaW5nIGF1dG9uZWcgYW5kCisgKiAgYXBwbGllcyB0aGUgcmVzdWx0cy4KKyAqKi8KK3MzMiBpeGdiZV9mY19hdXRvbmVnKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBpLCByZWcsIHBjc19hbmFkdl9yZWcsIHBjc19scGFiX3JlZzsKKworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QQ1MxR0FOQSk7CisKKwkvKgorCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZmMuY3VycmVudF9tb2RlIGFyZToKKwkgKiAwOiAgRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAxOiAgUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICAgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCisJICogMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgIHdlIGRvIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqIDM6ICBCb3RoIFJ4IGFuZCBUeCBmbG93IGNvbnRyb2wgKHN5bW1ldHJpYykgYXJlIGVuYWJsZWQuCisJICogNDogIFByaW9yaXR5IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCXJlZyAmPSB+KElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSB8IElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCXJlZyB8PSAoSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFIHwgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY190eF9wYXVzZToKKwkJLyoKKwkJICogVHggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBSeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuCisJCSAqLworCQlyZWcgfD0gKElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCXJlZyAmPSB+KElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSk7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJcmVnIHw9IChJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgfCBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfRENCCisJY2FzZSBpeGdiZV9mY19wZmM6CisJCWdvdG8gb3V0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1BDUzFHQU5BLCByZWcpOworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QQ1MxR0xDVEwpOworCisJLyogU2V0IFBDUyByZWdpc3RlciBmb3IgYXV0b25lZyAqLworCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBhdXRvbmVnICovCisJcmVnIHw9IElYR0JFX1BDUzFHTENUTF9BTl9FTkFCTEUgfCBJWEdCRV9QQ1MxR0xDVExfQU5fUkVTVEFSVDsKKworCS8qIERpc2FibGUgQU4gdGltZW91dCAqLworCWlmIChody0+ZmMuc3RyaWN0X2llZWUpCisJCXJlZyAmPSB+SVhHQkVfUENTMUdMQ1RMX0FOXzFHX1RJTUVPVVRfRU47CisKKwlod19kYmcoaHcsICJDb25maWd1cmluZyBBdXRvbmVnOyBQQ1NfTENUTCA9IDB4JTA4WFxuIiwgcmVnKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1BDUzFHTENUTCwgcmVnKTsKKworCS8qIFNlZSBpZiBhdXRvbmVnb3RpYXRpb24gaGFzIHN1Y2NlZWRlZCAqLworCWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBGSUJFUl9MSU5LX1VQX0xJTUlUOyBpKyspIHsKKwkJbXNsZWVwKDEwKTsKKwkJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHTFNUQSk7CisJCWlmICgocmVnICYgKElYR0JFX1BDUzFHTFNUQV9MSU5LX09LIHwKKwkJICAgICBJWEdCRV9QQ1MxR0xTVEFfQU5fQ09NUExFVEUpKSA9PQorCQkgICAgKElYR0JFX1BDUzFHTFNUQV9MSU5LX09LIHwKKwkJICAgICBJWEdCRV9QQ1MxR0xTVEFfQU5fQ09NUExFVEUpKSB7CisJCQlpZiAoIShyZWcgJiBJWEdCRV9QQ1MxR0xTVEFfQU5fVElNRURfT1VUKSkKKwkJCQlody0+bWFjLmF1dG9uZWdfc3VjY2VlZGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFody0+bWFjLmF1dG9uZWdfc3VjY2VlZGVkKSB7CisJCS8qIEF1dG9uZWcgZmFpbGVkIHRvIGFjaGlldmUgYSBsaW5rLCBzbyB3ZSB0dXJuIGZjIG9mZiAqLworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gTk9ORS5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFJlYWQgdGhlIEFOIGFkdmVydGlzZW1lbnQgYW5kIExQIGFiaWxpdHkgcmVnaXN0ZXJzIGFuZCByZXNvbHZlCisJICogbG9jYWwgZmxvdyBjb250cm9sIHNldHRpbmdzIGFjY29yZGluZ2x5CisJICovCisJcGNzX2FuYWR2X3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QQ1MxR0FOQSk7CisJcGNzX2xwYWJfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5MUCk7CisJaWYgKChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkocGNzX2xwYWJfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSkgeworCQkvKgorCQkgKiBOb3cgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdXNlciBzZWxlY3RlZCBSeCBPTkxZCisJCSAqIG9mIHBhdXNlIGZyYW1lcy4gIEluIHRoaXMgY2FzZSwgd2UgaGFkIHRvIGFkdmVydGlzZQorCQkgKiBGVUxMIGZsb3cgY29udHJvbCBiZWNhdXNlIHdlIGNvdWxkIG5vdCBhZHZlcnRpc2UgUlgKKwkJICogT05MWS4gSGVuY2UsIHdlIG11c3Qgbm93IGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvCisJCSAqIHR1cm4gT0ZGIHRoZSBUUkFOU01JU1NJT04gb2YgUEFVU0UgZnJhbWVzLgorCQkgKi8KKwkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19mdWxsKSB7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKKwkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IEZVTEwuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKKwkJCWh3X2RiZyhodywgIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxuIik7CisJCX0KKwl9IGVsc2UgaWYgKCEocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpICYmCisJCSAgIChwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpKSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY190eF9wYXVzZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwl9IGVsc2UgaWYgKChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkgICAocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkgJiYKKwkJICAgIShwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpKSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwl9IGVsc2UgeworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKKwkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gTk9ORS5cbiIpOworCX0KKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9mY19nZW5lcmljIC0gU2V0IHVwIGZsb3cgY29udHJvbAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB1cCBmbG93IGNvbnRyb2wuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBzcGVlZDsKKwlib29sIGxpbmtfdXA7CisKKyNpZmRlZiBDT05GSUdfRENCCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19wZmMpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKwkJZ290byBvdXQ7CisJfQorCisjZW5kaWYKKwkvKiBWYWxpZGF0ZSB0aGUgcGFja2V0YnVmIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAocGFja2V0YnVmX251bSA8IDAgfHwgcGFja2V0YnVmX251bSA+IDcpIHsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCBwYWNrZXQgYnVmZmVyIG51bWJlciBbJWRdLCBleHBlY3RlZCByYW5nZSAiCisJCSAgICAgICAiaXMgMC03XG4iLCBwYWNrZXRidWZfbnVtKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvbi4gIFplcm8gd2F0ZXIgbWFya3MgYXJlIGludmFsaWQKKwkgKiBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgY29udHJvbGxlciB0byBqdXN0IGJsYXN0IG91dCBmYyBwYWNrZXRzLgorCSAqLworCWlmICghaHctPmZjLmxvd193YXRlciB8fCAhaHctPmZjLmhpZ2hfd2F0ZXIgfHwgIWh3LT5mYy5wYXVzZV90aW1lKSB7CisJCWh3X2RiZyhodywgIkludmFsaWQgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBtb2RlLiAgU3RyaWN0IElFRUUgbW9kZSBkb2VzIG5vdCBhbGxvdworCSAqIGl4Z2JlX2ZjX3J4X3BhdXNlIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSB0ZXN0aW5nIGFub21hbGllcy4KKwkgKi8KKwlpZiAoaHctPmZjLnN0cmljdF9pZWVlICYmIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCQlod19kYmcoaHcsICJpeGdiZV9mY19yeF9wYXVzZSBub3QgdmFsaWQgaW4gc3RyaWN0ICIKKwkJICAgICAgICJJRUVFIG1vZGVcbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAxMGdpZyBwYXJ0cyBkbyBub3QgaGF2ZSBhIHdvcmQgaW4gdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlCisJICogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gZnVsbC4KKwkgKi8KKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX2RlZmF1bHQpCisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CisKKwkvKgorCSAqIFNhdmUgb2ZmIHRoZSByZXF1ZXN0ZWQgZmxvdyBjb250cm9sIG1vZGUgZm9yIHVzZSBsYXRlci4gIERlcGVuZGluZworCSAqIG9uIHRoZSBsaW5rIHBhcnRuZXIncyBjYXBhYmlsaXRpZXMsIHdlIG1heSBvciBtYXkgbm90IHVzZSB0aGlzIG1vZGUuCisJICovCisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhdXRvbmVnIG9yIG5vdC4gKi8KKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlciAmJiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCisJCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKKworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9mY19lbmFibGUoaHcsIHBhY2tldGJ1Zl9udW0pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGl4Z2JlX2Rpc2FibGVfcGNpZV9tYXN0ZXIgLSBEaXNhYmxlIFBDSS1leHByZXNzIG1hc3RlciBhY2Nlc3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMTU5NywzICsyMDU3LDE2IEBACiAJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKIH0KIAorLyoqCisgKiAgaXhnYmVfZW5hYmxlX3J4X2RtYV9nZW5lcmljIC0gRW5hYmxlIHRoZSBSeCBETUEgdW5pdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVndmFsOiByZWdpc3RlciB2YWx1ZSB0byB3cml0ZSB0byBSWENUUkwKKyAqCisgKiAgRW5hYmxlcyB0aGUgUnggRE1BIHVuaXQKKyAqKi8KK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3sKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYQ1RSTCwgcmVndmFsKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAppbmRleCAxOTJmOGQwLi43ZTk0ZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM3LDEyICszNywxNCBAQAogczMyIGl4Z2JlX3JlYWRfcGJhX251bV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqcGJhX251bSk7CiBzMzIgaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1hY19hZGRyKTsKIHMzMiBpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3ZvaWQgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAKIHMzMiBpeGdiZV9sZWRfb25fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogczMyIGl4Z2JlX2xlZF9vZmZfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogCiBzMzIgaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTsKIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV9iaXRfYmFuZ19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwpAQCAtNjEsNiArNjMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGFkZHJfY291bnQsIGl4Z2JlX21jX2FkZHJfaXRyIGZ1bmMpOwogczMyIGl4Z2JlX2VuYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCk7CitzMzIgaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSk7CitzMzIgaXhnYmVfZmNfZW5hYmxlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrdGV0YnVmX251bSk7CitzMzIgaXhnYmVfZmNfYXV0b25lZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogczMyIGl4Z2JlX3ZhbGlkYXRlX21hY19hZGRyKHU4ICptYWNfYWRkcik7CiBzMzIgaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1hc2spOwpAQCAtNzIsNiArNzgsMTMgQEAKIAogI2RlZmluZSBJWEdCRV9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCiAKKyNpZm5kZWYgd3JpdGVxCisjZGVmaW5lIHdyaXRlcSh2YWwsIGFkZHIpIHdyaXRlbCgodTMyKSAodmFsKSwgYWRkcik7IFwKKyAgICB3cml0ZWwoKHUzMikgKHZhbCA+PiAzMiksIChhZGRyICsgNCkpOworI2VuZGlmCisKKyNkZWZpbmUgSVhHQkVfV1JJVEVfUkVHNjQoYSwgcmVnLCB2YWx1ZSkgd3JpdGVxKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCisKICNkZWZpbmUgSVhHQkVfUkVBRF9SRUcoYSwgcmVnKSByZWFkbCgoYSktPmh3X2FkZHIgKyAocmVnKSkKIAogI2RlZmluZSBJWEdCRV9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwppbmRleCBlMmUyOGFjLi5hMTU2MjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJpeGdiZV90eXBlLmgiCiAjaW5jbHVkZSAiaXhnYmVfZGNiLmgiCiAjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk4LmgiCisjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk5LmgiCiAKIC8qKgogICogaXhnYmVfZGNiX2NvbmZpZyAtIFN0cnVjdCBjb250YWluaW5nIERDQiBzZXR0aW5ncy4KQEAgLTIxNSw2ICsyMTYsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTgoaHcsIHN0YXRzLCB0Y19jb3VudCk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KGh3LCBzdGF0cywgdGNfY291bnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzMiw2ICsyMzUsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9nZXRfcGZjX3N0YXRzXzgyNTk4KGh3LCBzdGF0cywgdGNfY291bnQpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkoaHcsIHN0YXRzLCB0Y19jb3VudCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ4LDYgKzI1Myw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjY0LDYgKzI3MSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4MCw2ICsyODksOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTYsNiArMzA3LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzExLDYgKzMyNCw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OChodyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk5KGh3KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMjcsNiArMzQyLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9od19jb25maWdfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmgKaW5kZXggNzVmNmVmZS4uNjRhOWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC03NSw2ICs3NSwyNiBAQAogCXByaW9fbGluawogfTsKIAorLyogRENCIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfRENCX1BHX1NVUFBPUlQgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRENCX1BGQ19TVVBQT1JUICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfRENCX0JDTl9TVVBQT1JUICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfRENCX1VQMlRDX1NVUFBPUlQgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVhHQkVfRENCX0dTUF9TVVBQT1JUICAgICAgIDB4MDAwMDAwMTAKKworI2RlZmluZSBJWEdCRV9EQ0JfOF9UQ19TVVBQT1JUICAgICAgMHg4MAorCitzdHJ1Y3QgZGNiX3N1cHBvcnQgeworCS8qIERDQiBjYXBhYmlsaXRpZXMgKi8KKwl1MzIgY2FwYWJpbGl0aWVzOworCisJLyogRWFjaCBiaXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBUQ3MgY29uZmlndXJhYmxlIGluIHRoZSBody4KKwkgKiBJZiA4IHRyYWZmaWMgY2xhc3NlcyBjYW4gYmUgY29uZmlndXJlZCwgdGhlIHZhbHVlIGlzIDB4ODAuCisJICovCisJdTggIHRyYWZmaWNfY2xhc3NlczsKKwl1OCAgcGZjX3RyYWZmaWNfY2xhc3NlczsKK307CisKIC8qIFRyYWZmaWMgY2xhc3MgYmFuZHdpZHRoIGFsbG9jYXRpb24gcGVyIGRpcmVjdGlvbiAqLwogc3RydWN0IHRjX2J3X2FsbG9jIHsKIAl1OCBid2dfaWQ7CQkgIC8qIEJhbmR3aWR0aCBHcm91cCAoQldHKSBJRCAqLwpAQCAtMTA4LDM4ICsxMjgsMTggQEAKIAlwYmFfODBfNDggICAgICAvKiBQQkFbMC0zXSBlYWNoIHVzZSA4MEtCLCBQQkFbNC03XSBlYWNoIHVzZSA0OEtCICovCiB9OwogCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgbWFueSB2YWx1ZXMgZW5jb2RlZCBhcyBmaXhlZC1wb2ludAotICogbnVtYmVycywgbWVhbmluZyB0aGF0IHNvbWUgb2YgYml0cyBhcmUgZGVkaWNhdGVkIHRvIHRoZQotICogbWFnbml0dWRlIGFuZCBvdGhlcnMgdG8gdGhlIGZyYWN0aW9uIHBhcnQuIEluIHRoZSBjb21tZW50cwotICogdGhpcyBpcyBzaG93biBhcyBmPW4sIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBiaXRzLgotICogVGhlc2UgZnJhY3Rpb24gYml0cyBhcmUgYWx3YXlzIHRoZSBsb3ctb3JkZXIgYml0cy4gVGhlIHNpemUKLSAqIG9mIHRoZSBtYWduaXR1ZGUgaXMgbm90IHNwZWNpZmllZC4KLSAqLwotc3RydWN0IGJjbl9jb25maWcgewotCXUzMiBycF9hZG1pbl9tb2RlW01BWF9UUkFGRklDX0NMQVNTXTsgLyogQkNOIGVuYWJsZWQsIHBlciBUQyAqLwotCXUzMiBiY25hX29wdGlvblsyXTsgLyogQkNOQSBQb3J0ICsgTUFDIEFkZHIgKi8KLQl1MzIgcnBfdzsgICAgICAgIC8qIERlcml2YXRpdmUgV2VpZ2h0LCBmPTMgKi8KLQl1MzIgcnBfZ2k7ICAgICAgIC8qIEluY3JlYXNlIEdhaW4sIGY9MTIgKi8KLQl1MzIgcnBfZ2Q7ICAgICAgIC8qIERlY3JlYXNlIEdhaW4sIGY9MTIgKi8KLQl1MzIgcnBfcnU7ICAgICAgIC8qIFJhdGUgVW5pdCAqLwotCXUzMiBycF9hbHBoYTsgICAgLyogTWF4IERlY3JlYXNlIEZhY3RvciwgZj0xMiAqLwotCXUzMiBycF9iZXRhOyAgICAgLyogTWF4IEluY3JlYXNlIEZhY3RvciwgZj0xMiAqLwotCXUzMiBycF9yaTsgICAgICAgLyogSW5pdGlhbCBSYXRlICovCi0JdTMyIHJwX3RkOyAgICAgICAvKiBEcmlmdCBJbnRlcnZhbCBUaW1lciAqLwotCXUzMiBycF9yZDsgICAgICAgLyogRHJpZnQgSW5jcmVhc2UgKi8KLQl1MzIgcnBfdG1heDsgICAgIC8qIFNldmVyZSBDb25nZXN0aW9uIEJhY2tvZmYgVGltZXIgUmFuZ2UgKi8KLQl1MzIgcnBfcm1pbjsgICAgIC8qIFNldmVyZSBDb25nZXN0aW9uIFJlc3RhcnQgUmF0ZSAqLwotCXUzMiBycF93cnR0OyAgICAgLyogUlRUIE1vdmluZyBBdmVyYWdlIFdlaWdodCAqLworc3RydWN0IGRjYl9udW1fdGNzIHsKKwl1OCBwZ190Y3M7CisJdTggcGZjX3RjczsKIH07CiAKIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnIHsKLQlzdHJ1Y3QgYmNuX2NvbmZpZyBiY247Ci0KKwlzdHJ1Y3QgZGNiX3N1cHBvcnQgc3VwcG9ydDsKKwlzdHJ1Y3QgZGNiX251bV90Y3MgbnVtX3RjczsKIAlzdHJ1Y3QgdGNfY29uZmlndXJhdGlvbiB0Y19jb25maWdbTUFYX1RSQUZGSUNfQ0xBU1NdOwogCXU4ICAgICBid19wZXJjZW50YWdlWzJdW01BWF9CV19HUk9VUF07IC8qIE9uZSBlYWNoIGZvciBUeC9SeCAqLwotCi0JYm9vbCAgcm91bmRfcm9iaW5fZW5hYmxlOworCWJvb2wgICBwZmNfbW9kZV9lbmFibGU7CisJYm9vbCAgIHJvdW5kX3JvYmluX2VuYWJsZTsKIAogCWVudW0gZGNiX3J4X3BiYV9jZmcgcnhfcGJhX2NmZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYwppbmRleCAyYzA0NmIwLi42MjIwNjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI5OCw3ICsyOTgsNiBAQAogCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAlyZWcgJj0gfklYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CiAJLyogY29ycmVjdCB0aGUgcmVwb3J0aW5nIG9mIG91ciBmbG93IGNvbnRyb2wgc3RhdHVzICovCi0JaHctPmZjLnR5cGUgPSBpeGdiZV9mY19ub25lOwogCXJlZyB8PSBJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9STUNTLCByZWcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oCmluZGV4IDFlNmEzMTMuLmViYmU1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBiNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMKQEAgLTAsMCArMSw0NjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKKyNpbmNsdWRlICJpeGdiZV9kY2IuaCIKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKKworLyoqCisgKiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5IC0gUmV0dXJucyBzdGF0dXMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcworICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHN0YXRzOiBwb2ludGVyIHRvIHN0YXRpc3RpY3Mgc3RydWN0dXJlCisgKiBAdGNfY291bnQ6ICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYndnX2FycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhdHVzIGRhdGEgZm9yIGVhY2ggb2YgdGhlIFRyYWZmaWMgQ2xhc3NlcyBpbiB1c2UuCisgKi8KK3MzMiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpCit7CisJaW50IHRjOworCisJaWYgKHRjX2NvdW50ID4gTUFYX1RSQUZGSUNfQ0xBU1MpCisJCXJldHVybiBEQ0JfRVJSX1BBUkFNOworCS8qIFN0YXRpc3RpY3MgcGVydGFpbmluZyB0byBlYWNoIHRyYWZmaWMgY2xhc3MgKi8KKwlmb3IgKHRjID0gMDsgdGMgPCB0Y19jb3VudDsgdGMrKykgeworCQkvKiBUcmFuc21pdHRlZCBQYWNrZXRzICovCisJCXN0YXRzLT5xcHRjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBUQyh0YykpOworCQkvKiBUcmFuc21pdHRlZCBCeXRlcyAqLworCQlzdGF0cy0+cWJ0Y1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCVEModGMpKTsKKwkJLyogUmVjZWl2ZWQgUGFja2V0cyAqLworCQlzdGF0cy0+cXByY1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkModGMpKTsKKwkJLyogUmVjZWl2ZWQgQnl0ZXMgKi8KKwkJc3RhdHMtPnFicmNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKHRjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkgLSBSZXR1cm4gQ0JGQyBzdGF0dXMgZGF0YQorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHN0YXRzOiBwb2ludGVyIHRvIHN0YXRpc3RpY3Mgc3RydWN0dXJlCisgKiBAdGNfY291bnQ6ICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYndnX2FycmF5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgQ0JGQyBzdGF0dXMgZGF0YSBmb3IgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzc2VzLgorICovCitzMzIgaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRjX2NvdW50KQoreworCWludCB0YzsKKworCWlmICh0Y19jb3VudCA+IE1BWF9UUkFGRklDX0NMQVNTKQorCQlyZXR1cm4gRENCX0VSUl9QQVJBTTsKKwlmb3IgKHRjID0gMDsgdGMgPCB0Y19jb3VudDsgdGMrKykgeworCQkvKiBQcmlvcml0eSBYT0ZGIFRyYW5zbWl0dGVkICovCisJCXN0YXRzLT5weG9mZnR4Y1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BYT0ZGVFhDKHRjKSk7CisJCS8qIFByaW9yaXR5IFhPRkYgUmVjZWl2ZWQgKi8KKwkJc3RhdHMtPnB4b2ZmcnhjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPRkZSWENOVCh0YykpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkgLSBDb25maWd1cmUgRENCIHBhY2tldCBidWZmZXJzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBwYWNrZXQgYnVmZmVycyBmb3IgRENCIG1vZGUuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIHZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKKwl1OCAgaSA9IDA7CisKKwkvKiBTZXR1cCBSeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCisJc3dpdGNoIChkY2JfY29uZmlnLT5yeF9wYmFfY2ZnKSB7CisJY2FzZSBwYmFfODBfNDg6CisJCS8qIFNldHVwIHRoZSBmaXJzdCBmb3VyIGF0IDgwS0IgKi8KKwkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV84MEtCOworCQlmb3IgKDsgaSA8IDQ7IGkrKykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKKwkJLyogU2V0dXAgdGhlIGxhc3QgZm91ciBhdCA0OEtCLi4uZG9uJ3QgcmUtaW5pdCBpICovCisJCXZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNDhLQjsKKwkJLyogRmFsbCBUaHJvdWdoICovCisJY2FzZSBwYmFfZXF1YWw6CisJZGVmYXVsdDoKKwkJZm9yICg7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKKworCQkvKiBTZXR1cCBUeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCisJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCU0laRShpKSwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCU0laRV8yMEtCKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCVEhSRVNIX0RDQik7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5IC0gQ29uZmlnIFJ4IERhdGEgYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgUnggUGFja2V0IEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzdHJ1Y3QgdGNfYndfYWxsb2MgICAgKnA7CisJdTMyICAgIHJlZyAgICAgICAgICAgPSAwOworCXUzMiAgICBjcmVkaXRfcmVmaWxsID0gMDsKKwl1MzIgICAgY3JlZGl0X21heCAgICA9IDA7CisJdTggICAgIGkgICAgICAgICAgICAgPSAwOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCBJWEdCRV9SVFJQQ1NfQVJCRElTKTsKKworCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KKwlyZWcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQorCQlyZWcgfD0gKGkgPDwgKGkgKiBJWEdCRV9SVFJVUDJUQ19VUF9TSElGVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSVVAyVEMsIHJlZyk7CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1JYX0NPTkZJR107CisKKwkJY3JlZGl0X3JlZmlsbCA9IHAtPmRhdGFfY3JlZGl0c19yZWZpbGw7CisJCWNyZWRpdF9tYXggICAgPSBwLT5kYXRhX2NyZWRpdHNfbWF4OworCQlyZWcgPSBjcmVkaXRfcmVmaWxsIHwgKGNyZWRpdF9tYXggPDwgSVhHQkVfUlRSUFQ0Q19NQ0xfU0hJRlQpOworCisJCXJlZyB8PSAodTMyKShwLT5id2dfaWQpIDw8IElYR0JFX1JUUlBUNENfQldHX1NISUZUOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUUlBUNENfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUFQ0QyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBSeCBwYWNrZXQgcGxhbmUgKHJlY3ljbGUgbW9kZTsgV1NQKSBhbmQKKwkgKiBlbmFibGUgYXJiaXRlcgorCSAqLworCXJlZyA9IElYR0JFX1JUUlBDU19SUk0gfCBJWEdCRV9SVFJQQ1NfUkFDOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkgLSBDb25maWcgVHggRGVzYy4gYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgVHggRGVzY3JpcHRvciBBcmJpdGVyIGFuZCBjcmVkaXRzIGZvciBlYWNoIHRyYWZmaWMgY2xhc3MuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXN0cnVjdCB0Y19id19hbGxvYyAqcDsKKwl1MzIgICAgcmVnLCBtYXhfY3JlZGl0czsKKwl1OCAgICAgaTsKKworCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgSVhHQkVfUlRURENTX0FSQkRJUyk7CisKKwkvKiBDbGVhciB0aGUgcGVyLVR4IHF1ZXVlIGNyZWRpdHM7IHdlIHVzZSBwZXItVEMgaW5zdGVhZCAqLworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREVDFDLCAwKTsKKwl9CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1RYX0NPTkZJR107CisJCW1heF9jcmVkaXRzID0gZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLmRlc2NfY3JlZGl0c19tYXg7CisJCXJlZyA9IG1heF9jcmVkaXRzIDw8IElYR0JFX1JUVERUMkNfTUNMX1NISUZUOworCQlyZWcgfD0gcC0+ZGF0YV9jcmVkaXRzX3JlZmlsbDsKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRURFQyQ19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2dyb3VwKQorCQkJcmVnIHw9IElYR0JFX1JUVERUMkNfR1NQOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUVERUMkNfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFQyQyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBUeCBkZXNjcmlwdG9yIHBsYW5lIChyZWN5Y2xlIG1vZGU7IFdTUCkgYW5kCisJICogZW5hYmxlIGFyYml0ZXIKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFREQ1NfVERQQUMgfCBJWEdCRV9SVFREQ1NfVERSTTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcmVnKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5IC0gQ29uZmlnIFR4IERhdGEgYXJiaXRlcgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgVHggUGFja2V0IEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJc3RydWN0IHRjX2J3X2FsbG9jICpwOworCXUzMiByZWc7CisJdTggaTsKKworCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBDUywgSVhHQkVfUlRUUENTX0FSQkRJUyk7CisKKwkvKiBNYXAgYWxsIHRyYWZmaWMgY2xhc3NlcyB0byB0aGVpciBVUCwgMSB0byAxICovCisJcmVnID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJcmVnIHw9IChpIDw8IChpICogSVhHQkVfUlRUVVAyVENfVVBfU0hJRlQpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFVQMlRDLCByZWcpOworCisJLyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3MgY3JlZGl0cyBhbmQgcHJpb3JpdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQlwID0gJmRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5wYXRoW0RDQl9UWF9DT05GSUddOworCQlyZWcgPSBwLT5kYXRhX2NyZWRpdHNfcmVmaWxsOworCQlyZWcgfD0gKHUzMikocC0+ZGF0YV9jcmVkaXRzX21heCkgPDwgSVhHQkVfUlRUUFQyQ19NQ0xfU0hJRlQ7CisJCXJlZyB8PSAodTMyKShwLT5id2dfaWQpIDw8IElYR0JFX1JUVFBUMkNfQldHX1NISUZUOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19ncm91cCkKKwkJCXJlZyB8PSBJWEdCRV9SVFRQVDJDX0dTUDsKKworCQlpZiAocC0+cHJpb190eXBlID09IHByaW9fbGluaykKKwkJCXJlZyB8PSBJWEdCRV9SVFRQVDJDX0xTUDsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBUMkMoaSksIHJlZyk7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgVHggcGFja2V0IHBsYW5lIChyZWN5Y2xlIG1vZGU7IFNQOyBhcmIgZGVsYXkpIGFuZAorCSAqIGVuYWJsZSBhcmJpdGVyCisJICovCisJcmVnID0gSVhHQkVfUlRUUENTX1RQUEFDIHwgSVhHQkVfUlRUUENTX1RQUk0gfAorCSAgICAgIChJWEdCRV9SVFRQQ1NfQVJCRF9EQ0IgPDwgSVhHQkVfUlRUUENTX0FSQkRfU0hJRlQpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkgLSBDb25maWd1cmUgcHJpb3JpdHkgZmxvdyBjb250cm9sCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJdTMyIGksIHJlZzsKKworCS8qIElmIFBGQyBpcyBkaXNhYmxlZCBnbG9iYWxseSB0aGVuIGZhbGwgYmFjayB0byBMRkMuICovCisJaWYgKCFkY2JfY29uZmlnLT5wZmNfbW9kZV9lbmFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCQlody0+bWFjLm9wcy5zZXR1cF9mYyhodywgaSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIENvbmZpZ3VyZSBQRkMgVHggdGhyZXNob2xkcyBwZXIgVEMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQkvKiBDb25maWcgYW5kIHJlbWVtYmVyIFR4ICovCisJCWlmIChkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF9mdWxsIHx8CisJCSAgICBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF90eCkgeworCQkJcmVnID0gaHctPmZjLmhpZ2hfd2F0ZXIgfCBJWEdCRV9GQ1JUSF9GQ0VOOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShpKSwgcmVnKTsKKwkJCXJlZyA9IGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShpKSwgcmVnKTsKKwkJfSBlbHNlIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEhfODI1OTkoaSksIDApOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShpKSwgMCk7CisJCX0KKwl9CisKKwkvKiBDb25maWd1cmUgcGF1c2UgdGltZSAoMiBUQ3MgcGVyIHJlZ2lzdGVyKSAqLworCXJlZyA9IGh3LT5mYy5wYXVzZV90aW1lIHwgKGh3LT5mYy5wYXVzZV90aW1lIDw8IDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgKE1BWF9UUkFGRklDX0NMQVNTIC8gMik7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihpKSwgcmVnKTsKKworCS8qIENvbmZpZ3VyZSBmbG93IGNvbnRyb2wgcmVmcmVzaCB0aHJlc2hvbGQgdmFsdWUgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCBody0+ZmMucGF1c2VfdGltZSAvIDIpOworCisJLyogRW5hYmxlIFRyYW5zbWl0IFBGQyAqLworCXJlZyA9IElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ0NGRywgcmVnKTsKKworCS8qCisJICogRW5hYmxlIFJlY2VpdmUgUEZDCisJICogV2Ugd2lsbCBhbHdheXMgaG9ub3IgWE9GRiBmcmFtZXMgd2UgcmVjZWl2ZSB3aGVuCisJICogd2UgYXJlIGluIFBGQyBtb2RlLgorCSAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJcmVnICY9IH5JWEdCRV9NRkxDTl9SRkNFOworCXJlZyB8PSBJWEdCRV9NRkxDTl9SUEZDRTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCByZWcpOworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkgLSBDb25maWcgdHJhZmZpYyBjbGFzcyBzdGF0aXN0aWNzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHF1ZXVlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLCBhbGwgcXVldWVzIGJlbG9uZ2luZyB0byBzYW1lIHRyYWZmaWMKKyAqIGNsYXNzIHVzZXMgYSBzaW5nbGUgc2V0IG9mIHF1ZXVlIHN0YXRpc3RpY3MgY291bnRlcnMuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHJlZyA9IDA7CisJdTggIGkgICA9IDA7CisKKwkvKgorCSAqIFJlY2VpdmUgUXVldWVzIHN0YXRzIHNldHRpbmcKKwkgKiAzMiBSUVNNUiByZWdpc3RlcnMsIGVhY2ggY29uZmlndXJpbmcgNCBxdWV1ZXMuCisJICogU2V0IGFsbCAxNiBxdWV1ZXMgb2YgZWFjaCBUQyB0byB0aGUgc2FtZSBzdGF0CisJICogd2l0aCBUQyAnbicgZ29pbmcgdG8gc3RhdCAnbicuCisJICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmVnID0gMHgwMTAxMDEwMSAqIChpIC8gNCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlFTTVIoaSksIHJlZyk7CisJfQorCS8qCisJICogVHJhbnNtaXQgUXVldWVzIHN0YXRzIHNldHRpbmcKKwkgKiAzMiBUUVNNIHJlZ2lzdGVycywgZWFjaCBjb250cm9sbGluZyA0IHF1ZXVlcy4KKwkgKiBTZXQgYWxsIHF1ZXVlcyBvZiBlYWNoIFRDIHRvIHRoZSBzYW1lIHN0YXQKKwkgKiB3aXRoIFRDICduJyBnb2luZyB0byBzdGF0ICduJy4KKwkgKiBUeCBxdWV1ZXMgYXJlIGFsbG9jYXRlZCBub24tdW5pZm9ybWx5IHRvIFRDczoKKwkgKiAzMiwgMzIsIDE2LCAxNiwgOCwgOCwgOCwgOC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoaSA8IDgpCisJCQlyZWcgPSAweDAwMDAwMDAwOworCQllbHNlIGlmIChpIDwgMTYpCisJCQlyZWcgPSAweDAxMDEwMTAxOworCQllbHNlIGlmIChpIDwgMjApCisJCQlyZWcgPSAweDAyMDIwMjAyOworCQllbHNlIGlmIChpIDwgMjQpCisJCQlyZWcgPSAweDAzMDMwMzAzOworCQllbHNlIGlmIChpIDwgMjYpCisJCQlyZWcgPSAweDA0MDQwNDA0OworCQllbHNlIGlmIChpIDwgMjgpCisJCQlyZWcgPSAweDA1MDUwNTA1OworCQllbHNlIGlmIChpIDwgMzApCisJCQlyZWcgPSAweDA2MDYwNjA2OworCQllbHNlCisJCQlyZWcgPSAweDA3MDcwNzA3OworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RRU00oaSksIHJlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ184MjU5OSAtIENvbmZpZ3VyZSBnZW5lcmFsIERDQiBwYXJhbWV0ZXJzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBnZW5lcmFsIERDQiBwYXJhbWV0ZXJzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiByZWc7CisJdTMyIHE7CisKKwkvKiBEaXNhYmxlIHRoZSBUeCBkZXNjIGFyYml0ZXIgc28gdGhhdCBNVFFDIGNhbiBiZSBjaGFuZ2VkICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JUVERDUyk7CisJcmVnIHw9IElYR0JFX1JUVERDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJlZyk7CisKKwkvKiBFbmFibGUgRENCIGZvciBSeCB3aXRoIDggVENzICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01SUUMpOworCXN3aXRjaCAocmVnICYgSVhHQkVfTVJRQ19NUlFFX01BU0spIHsKKwljYXNlIDA6CisJY2FzZSBJWEdCRV9NUlFDX1JUNFRDRU46CisJCS8qIFJTUyBkaXNhYmxlZCBjYXNlcyAqLworCQlyZWcgPSAocmVnICYgfklYR0JFX01SUUNfTVJRRV9NQVNLKSB8IElYR0JFX01SUUNfUlQ4VENFTjsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9NUlFDX1JTU0VOOgorCWNhc2UgSVhHQkVfTVJRQ19SVFJTUzRUQ0VOOgorCQkvKiBSU1MgZW5hYmxlZCBjYXNlcyAqLworCQlyZWcgPSAocmVnICYgfklYR0JFX01SUUNfTVJRRV9NQVNLKSB8IElYR0JFX01SUUNfUlRSU1M4VENFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5zdXBwb3J0ZWQgdmFsdWUsIGFzc3VtZSBzdGFsZSBkYXRhLCBvdmVyd3JpdGUgbm8gUlNTICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVDhUQ0VOOworCX0KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIHJlZyk7CisKKwkvKiBFbmFibGUgRENCIGZvciBUeCB3aXRoIDggVENzICovCisJcmVnID0gSVhHQkVfTVRRQ19SVF9FTkEgfCBJWEdCRV9NVFFDXzhUQ184VFE7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCByZWcpOworCisJLyogRGlzYWJsZSBkcm9wIGZvciBhbGwgcXVldWVzICovCisJZm9yIChxID0gMDsgcSA8IDEyODsgcSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1FERSwgcSA8PCBJWEdCRV9RREVfSURYX1NISUZUKTsKKworCS8qIEVuYWJsZSB0aGUgVHggZGVzYyBhcmJpdGVyICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JUVERDUyk7CisJcmVnICY9IH5JWEdCRV9SVFREQ1NfQVJCRElTOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OSAtIENvbmZpZ3VyZSBhbmQgZW5hYmxlIERDQgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGRjYl9jb25maWc6IHBvaW50ZXIgdG8gaXhnYmVfZGNiX2NvbmZpZyBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgZGNiIHNldHRpbmdzIGFuZCBlbmFibGUgZGNiIG1vZGUuCisgKi8KK3MzMiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnXzgyNTk5KGh3KTsKKwlpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnX3R4X2RhdGFfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoaHcpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ZTI4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5oCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9EQ0JfODI1OTlfQ09ORklHX0hfCisjZGVmaW5lIF9EQ0JfODI1OTlfQ09ORklHX0hfCisKKy8qIERDQiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVERQQUMgICAgICAweDAwMDAwMDAxIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBXU1AgLSBXZWlnaHRlZCBTdHJpY3QgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1ZNUEFDICAgICAgMHgwMDAwMDAwMiAvKiAwIFJvdW5kIFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgV1JSIC0gV2VpZ2h0ZWQgUm91bmQgUm9iaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1REUk0gICAgICAgMHgwMDAwMDAxMCAvKiBUcmFuc21pdCBSZWN5Y2xlIE1vZGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBEQ0IgYXJiaXRlciBkaXNhYmxlICovCisjZGVmaW5lIElYR0JFX1JUVERDU19CRFBNICAgICAgIDB4MDA0MDAwMDAgLyogQnlwYXNzIERhdGEgUGlwZSAtIG11c3QgY2xlYXIhICovCisjZGVmaW5lIElYR0JFX1JUVERDU19CUEJGU00gICAgIDB4MDA4MDAwMDAgLyogQnlwYXNzIFBCIEZyZWUgU3BhY2UgLSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsZWFyIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX1NQRUVEX0NIRyAgMHg4MDAwMDAwMCAvKiBMaW5rIHNwZWVkIGNoYW5nZSAqLworCisvKiBSZWNlaXZlIFVQMlRDIG1hcHBpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlRSVVAyVENfVVBfU0hJRlQgMworLyogVHJhbnNtaXQgVVAyVEMgbWFwcGluZyAqLworI2RlZmluZSBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCAzCisKKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19NQ0xfU0hJRlQgMTIgLyogT2Zmc2V0IHRvIE1heCBDcmVkaXQgTGltaXQgc2V0dGluZyAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRDX0JXR19TSElGVCA5ICAvKiBPZmZzZXQgdG8gQldHIGluZGV4ICovCisjZGVmaW5lIElYR0JFX1JUUlBUNENfR1NQICAgICAgIDB4NDAwMDAwMDAgLyogR1NQIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19MU1AgICAgICAgMHg4MDAwMDAwMCAvKiBMU1AgZW5hYmxlIGJpdCAqLworCisjZGVmaW5lIElYR0JFX1JEUlhDVExfTVBCRU4gICAgIDB4MDAwMDAwMTAgLyogRE1BIGNvbmZpZyBmb3IgbXVsdGlwbGUgcGFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnVmZmVycyBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9NQ0VOICAgICAgMHgwMDAwMDA0MCAvKiBETUEgY29uZmlnIGZvciBtdWx0aXBsZSBjb3JlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChSU1MpIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBSVFJQQ1MgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JUUlBDU19SUk0gICAgICAgIDB4MDAwMDAwMDIgLyogUmVjZWl2ZSBSZWN5Y2xlIE1vZGUgZW5hYmxlICovCisvKiBSZWNlaXZlIEFyYml0cmF0aW9uIENvbnRyb2w6IDAgUm91bmQgUm9iaW4sIDEgREZQICovCisjZGVmaW5lIElYR0JFX1JUUlBDU19SQUMgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfUlRSUENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdHJhdGlvbiBkaXNhYmxlIGJpdCAqLworCisvKiBSVFREVDJDIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SVFREVDJDX01DTF9TSElGVCAxMgorI2RlZmluZSBJWEdCRV9SVFREVDJDX0JXR19TSElGVCA5CisjZGVmaW5lIElYR0JFX1JUVERUMkNfR1NQICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlRURFQyQ19MU1AgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfTUNMX1NISUZUIDEyCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfQldHX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19HU1AgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9SVFRQVDJDX0xTUCAgICAgICAweDgwMDAwMDAwCisKKy8qIFJUVFBDUyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX1RQUEFDICAgICAgMHgwMDAwMDAyMCAvKiAwIFJvdW5kIFJvYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEgU1AgLSBTdHJpY3QgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRJUyAgICAgMHgwMDAwMDA0MCAvKiBBcmJpdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX1RQUk0gICAgICAgMHgwMDAwMDEwMCAvKiBUcmFuc21pdCBSZWN5Y2xlIE1vZGUgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX1JUVFBDU19BUkJEX1NISUZUIDIyCisjZGVmaW5lIElYR0JFX1JUVFBDU19BUkJEX0RDQiAgIDB4NCAgICAgICAgLyogQXJiaXRyYXRpb24gZGVsYXkgaW4gRENCIG1vZGUgKi8KKworI2RlZmluZSBJWEdCRV9UWFBCU0laRV8yMEtCICAgICAweDAwMDA1MDAwIC8qIDIwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9UWFBCU0laRV80MEtCICAgICAweDAwMDBBMDAwIC8qIDQwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV80OEtCICAgICAweDAwMDBDMDAwIC8qIDQ4S0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV82NEtCICAgICAweDAwMDEwMDAwIC8qIDY0S0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV84MEtCICAgICAweDAwMDE0MDAwIC8qIDgwS0IgUGFja2V0IEJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9SWFBCU0laRV8xMjhLQiAgICAweDAwMDIwMDAwIC8qIDEyOEtCIFBhY2tldCBCdWZmZXIgKi8KKworI2RlZmluZSBJWEdCRV9UWFBCVEhSRVNIX0RDQiAgICAweEEgICAgICAgIC8qIFRIUkVTSCB2YWx1ZSBmb3IgRENCIG1vZGUgKi8KKworCisvKiBEQ0IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIEFQSXMgKi8KKworLyogRENCIFBGQyBmdW5jdGlvbnMgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKTsKK3MzMiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpOworCisvKiBEQ0IgdHJhZmZpYyBjbGFzcyBzdGF0cyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2h3X3N0YXRzICpzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRjX2NvdW50KTsKKworLyogRENCIGNvbmZpZyBhcmJpdGVycyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CisKKworLyogRENCIGh3IGluaXRpYWxpemF0aW9uICovCitzMzIgaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmNvbmZpZyk7CisKKyNlbmRpZiAvKiBfRENCXzgyNTk5X0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCmluZGV4IDQxMjk5NzY5Li4wYTg3MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgQklUX1BHX1JYCTB4MDQKICNkZWZpbmUgQklUX1BHX1RYCTB4MDgKICNkZWZpbmUgQklUX0JDTiAgICAgICAgIDB4MTAKKyNkZWZpbmUgQklUX0xJTktTUEVFRCAgIDB4ODAKIAogaW50IGl4Z2JlX2NvcHlfZGNiX2NmZyhzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqc3JjX2RjYl9jZmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkc3RfZGNiX2NmZywgaW50IHRjX21heCkKQEAgLTg5LDI1ICs5MCw2IEBACiAJCQlzcmNfZGNiX2NmZy0+dGNfY29uZmlnW2kgLSBEQ0JfUEZDX1VQX0FUVFJfMF0uZGNiX3BmYzsKIAl9CiAKLQlmb3IgKGkgPSBEQ0JfQkNOX0FUVFJfUlBfMDsgaSA8IERDQl9CQ05fQVRUUl9SUF9BTEw7IGkrKykgewotCQlkc3RfZGNiX2NmZy0+YmNuLnJwX2FkbWluX21vZGVbaSAtIERDQl9CQ05fQVRUUl9SUF8wXSA9Ci0JCQlzcmNfZGNiX2NmZy0+YmNuLnJwX2FkbWluX21vZGVbaSAtIERDQl9CQ05fQVRUUl9SUF8wXTsKLQl9Ci0JZHN0X2RjYl9jZmctPmJjbi5iY25hX29wdGlvblswXSA9IHNyY19kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMF07Ci0JZHN0X2RjYl9jZmctPmJjbi5iY25hX29wdGlvblsxXSA9IHNyY19kY2JfY2ZnLT5iY24uYmNuYV9vcHRpb25bMV07Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9hbHBoYSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfYWxwaGE7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9iZXRhID0gc3JjX2RjYl9jZmctPmJjbi5ycF9iZXRhOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfZ2QgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2dkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfZ2kgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2dpOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfdG1heCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfdG1heDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3RkID0gc3JjX2RjYl9jZmctPmJjbi5ycF90ZDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JtaW4gPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JtaW47Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF93ID0gc3JjX2RjYl9jZmctPmJjbi5ycF93OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcmQgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcnUgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3J1OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfd3J0dCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfd3J0dDsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3JpID0gc3JjX2RjYl9jZmctPmJjbi5ycF9yaTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMjAsMTIgKzEwMiw2IEBACiAJcmV0dXJuICEhKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk7CiB9CiAKLXN0YXRpYyB1MTYgaXhnYmVfZGNiX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qIEFsbCB0cmFmZmljIHNob3VsZCBkZWZhdWx0IHRvIGNsYXNzIDAgKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU4IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBzdGF0ZSkKIHsKIAl1OCBlcnIgPSAwOwpAQCAtMTUzLDggKzEyOSw4IEBACiAJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwogCQlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKIAkJYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7Ci0JCW5ldGRldi0+c2VsZWN0X3F1ZXVlID0gJml4Z2JlX2RjYl9zZWxlY3RfcXVldWU7CiAKKwkJYWRhcHRlci0+aHcuZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19wZmM7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JTU19FTkFCTEVEOwogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwogCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CkBAIC0xNjMsNiArMTM5LDcgQEAKIAl9IGVsc2UgewogCQkvKiBUdXJuIG9mZiBEQ0IgKi8KIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQkJYWRhcHRlci0+aHcuZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19kZWZhdWx0OwogCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CiAJCQlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKQEAgLTE3Miw3ICsxNDksNiBAQAogCQkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CiAJCQlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKIAkJCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOwotCQkJbmV0ZGV2LT5zZWxlY3RfcXVldWUgPSBOVUxMOwogCiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKIAkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CkBAIC00NDQsMTc1ICs0MjAsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZ2V0YmNucnAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LAotCQkJCSAgdTggKnNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9hZG1pbl9tb2RlW3ByaW9yaXR5XTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRiY25jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGVudW1faW5kZXgsCi0JCQkJICB1MzIgKnNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0Jc3dpdGNoIChlbnVtX2luZGV4KSB7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8wOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV07Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0FMUEhBOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FscGhhOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CRVRBOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2JldGE7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dEOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HSToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9naTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVE1BWDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90bWF4OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9URDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90ZDsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUk1JTjoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ybWluOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3c7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JEOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SVToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ydTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfV1JUVDoKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93cnR0OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SSToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yaTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnNldHRpbmcgPSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX3NldGJjbnJwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvcml0eSwKLQkJCQkgdTggc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldID0gc2V0dGluZzsKLQotCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldICE9Ci0JICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldKQotCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotfQotCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9zZXRiY25jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGVudW1faW5kZXgsCi0JCQkJIHUzMiBzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXN3aXRjaCAoZW51bV9pbmRleCkgewotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdICE9Ci0JCQlhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblswXSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdICE9Ci0JCQlhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0FMUEhBOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2FscGhhID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWxwaGEgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FscGhhKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkVUQToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9iZXRhID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYmV0YSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYmV0YSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dEOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2QgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0k6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2kgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9naSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2kpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9UTUFYOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RtYXggPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90bWF4ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90bWF4KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVEQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdGQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90ZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdGQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9STUlOOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JtaW4gPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ybWluICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ybWluKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfVzoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93ID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdyAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdykKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JEOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JkID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmQgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JkKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUlU6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcnUgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ydSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcnUpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XUlRUOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3dydHQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93cnR0ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93cnR0KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkk6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmkgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yaSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmkpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KIHN0cnVjdCBkY2JubF9ydG5sX29wcyBkY2JubF9vcHMgPSB7CiAJLmdldHN0YXRlCT0gaXhnYmVfZGNibmxfZ2V0X3N0YXRlLAogCS5zZXRzdGF0ZQk9IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZSwKQEAgLTYzMyw5ICs0NDAsNSBAQAogCS5zZXRudW10Y3MJPSBpeGdiZV9kY2JubF9zZXRudW10Y3MsCiAJLmdldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfZ2V0cGZjc3RhdGUsCiAJLnNldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfc2V0cGZjc3RhdGUsCi0JLmdldGJjbmNmZyAgICAgID0gaXhnYmVfZGNibmxfZ2V0YmNuY2ZnLAotCS5nZXRiY25ycCAgICAgICA9IGl4Z2JlX2RjYm5sX2dldGJjbnJwLAotCS5zZXRiY25jZmcgICAgICA9IGl4Z2JlX2RjYm5sX3NldGJjbmNmZywKLQkuc2V0YmNucnAgICAgICAgPSBpeGdiZV9kY2JubF9zZXRiY25ycAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDY3Zjg3YTcuLjE4ZWNiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC04OSw4ICs4OSw3IEBACiAJeyJyeF9oZWFkZXJfc3BsaXQiLCBJWEdCRV9TVEFUKHJ4X2hkcl9zcGxpdCl9LAogCXsiYWxsb2NfcnhfcGFnZV9mYWlsZWQiLCBJWEdCRV9TVEFUKGFsbG9jX3J4X3BhZ2VfZmFpbGVkKX0sCiAJeyJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpfSwKLQl7Imxyb19hZ2dyZWdhdGVkIiwgSVhHQkVfU1RBVChscm9fYWdncmVnYXRlZCl9LAotCXsibHJvX2ZsdXNoZWQiLCBJWEdCRV9TVEFUKGxyb19mbHVzaGVkKX0sCisJeyJyeF9ub19kbWFfcmVzb3VyY2VzIiwgSVhHQkVfU1RBVChod19yeF9ub19kbWFfcmVzb3VyY2VzKX0sCiB9OwogCiAjZGVmaW5lIElYR0JFX1FVRVVFX1NUQVRTX0xFTiBcCkBAIC0xMzIsNiArMTMxLDI2IEBACiAJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwogCiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCX0gZWxzZSBpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lKSB7CisJCS8qIFNldCBhcyBGSUJSRSB1bnRpbCBTRVJERVMgZGVmaW5lZCBpbiBrZXJuZWwgKi8KKwkJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCVNVUFBPUlRFRF9GSUJSRSk7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWJyZWFrOworCQljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfRklCUkUpOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCQlicmVhazsKKwkJfQogCX0gZWxzZSB7CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CiAJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKQEAgLTIwNiwxMyArMjI1LDEzIEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlwYXVzZS0+YXV0b25lZyA9IChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19mdWxsID8gMSA6IDApOworCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfZnVsbCA/IDEgOiAwKTsKIAotCWlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgeworCWlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7Ci0JfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY190eF9wYXVzZSkgeworCX0gZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY190eF9wYXVzZSkgewogCQlwYXVzZS0+dHhfcGF1c2UgPSAxOwotCX0gZWxzZSBpZiAoaHctPmZjLnR5cGUgPT0gaXhnYmVfZmNfZnVsbCkgeworCX0gZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19mdWxsKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7CiAJfQpAQCAtMjI2LDIyICsyNDUsMTcgQEAKIAogCWlmICgocGF1c2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8CiAJICAgIChwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKSkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOwogCWVsc2UgaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19yeF9wYXVzZTsKIAllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY190eF9wYXVzZTsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfdHhfcGF1c2U7CiAJZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX25vbmU7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKLQkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CisJaHctPm1hYy5vcHMuc2V0dXBfZmMoaHcsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTYsNyArNDcwLDcgQEAKIAlyZWdzX2J1ZmZbODI1XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JUDZBVCk7CiAJcmVnc19idWZmWzgyNl0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTCk7CiAJcmVnc19idWZmWzgyN10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTSk7Ci0JcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCk7CisJcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCgwKSk7CiAKIAlyZWdzX2J1ZmZbODI5XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAlyZWdzX2J1ZmZbODMwXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EUE1DUyk7CkBAIC02NjEsMTAgKzY3NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJY2hhciBmaXJtd2FyZV92ZXJzaW9uWzMyXTsKIAogCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCBpeGdiZV9kcml2ZXJfbmFtZSwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgaXhnYmVfZHJpdmVyX3ZlcnNpb24sIDMyKTsKLQlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCAzMik7CisKKwlzcHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sICIlZC4lZC0lZCIsCisJICAgICAgICAoYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweEYwMDApID4+IDEyLAorCSAgICAgICAgKGFkYXB0ZXItPmVlcHJvbV92ZXJzaW9uICYgMHgwRkYwKSA+PiA0LAorCSAgICAgICAgYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweDAwMEYpOworCisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBmaXJtd2FyZV92ZXJzaW9uLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKIAlkcnZpbmZvLT5uX3N0YXRzID0gSVhHQkVfU1RBVFNfTEVOOwogCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gaXhnYmVfZ2V0X3JlZ3NfbGVuKG5ldGRldik7CkBAIC04MDgsMTUgKzgyOSw2IEBACiAJaW50IHN0YXRfY291bnQgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWludCBqLCBrOwogCWludCBpOwotCXU2NCBhZ2dyZWdhdGVkID0gMCwgZmx1c2hlZCA9IDAsIG5vX2Rlc2MgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJYWdncmVnYXRlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQkJZmx1c2hlZCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQkJbm9fZGVzYyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKLQl9Ci0JYWRhcHRlci0+bHJvX2FnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVkOwotCWFkYXB0ZXItPmxyb19mbHVzaGVkID0gZmx1c2hlZDsKLQlhZGFwdGVyLT5scm9fbm9fZGVzYyA9IG5vX2Rlc2M7CiAKIAlpeGdiZV91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAJZm9yIChpID0gMDsgaSA8IElYR0JFX0dMT0JBTF9TVEFUU19MRU47IGkrKykgewpAQCAtODk3LDEyICs5MDksNTAgQEAKIHN0YXRpYyB2b2lkIGl4Z2JlX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewotCXdvbC0+c3VwcG9ydGVkID0gMDsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwKKwkgICAgICAgICAgICAgICAgIFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOwogCXdvbC0+d29sb3B0cyA9IDA7CiAKKwlpZiAoIWRldmljZV9jYW5fd2FrZXVwKCZhZGFwdGVyLT5wZGV2LT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19FWCkKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfVUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfTUMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01DQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX0JDKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9CQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19NQUcpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGl4Z2JlX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlhZGFwdGVyLT53b2wgPSAwOworCisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX0VYOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19NQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfQkM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX01BRzsKKworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTk2NSw0MCArMTAxNSw0NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBpOwogCiAJaWYgKGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpCiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0ud29ya19saW1pdCA9IGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CiAKIAlpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gMSkgeworCQkvKiBjaGVjayB0aGUgbGltaXRzICovCisJCWlmICgoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPiBJWEdCRV9NQVhfSU5UX1JBVEUpIHx8CisJCSAgICAoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPCBJWEdCRV9NSU5fSU5UX1JBVEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJLyogc3RvcmUgdGhlIHZhbHVlIGluIGludHMvc2Vjb25kICovCiAJCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjczsKIAogCQkvKiBzdGF0aWMgdmFsdWUgb2YgaW50ZXJydXB0IHJhdGUgKi8KIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwotCQkvKiBjbGVhciB0aGUgbG93ZXIgYml0ICovCisJCS8qIGNsZWFyIHRoZSBsb3dlciBiaXQgYXMgaXRzIHVzZWQgZm9yIGR5bmFtaWMgc3RhdGUgKi8KIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgJj0gfjE7CiAJfSBlbHNlIGlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPT0gMSkgewogCQkvKiAxIG1lYW5zIGR5bmFtaWMgbW9kZSAqLwogCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gMjAwMDA7CiAJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKIAl9IGVsc2UgewotCQkvKiBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgZGlzYWJsZSBlaXRyLCB3aGljaCBpcyBiZXN0Ci0JCSAqIHNlcnZlZCBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgcmF0ZSB2ZXJ5IGhpZ2ggKi8KLQkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDMwMDAwMDA7CisJCS8qCisJCSAqIGFueSBvdGhlciB2YWx1ZSBtZWFucyBkaXNhYmxlIGVpdHIsIHdoaWNoIGlzIGJlc3QKKwkJICogc2VydmVkIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCByYXRlIHZlcnkgaGlnaAorCQkgKi8KKwkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IElYR0JFX01BWF9JTlRfUkFURTsKIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAwOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7CiAJCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSAmYWRhcHRlci0+cV92ZWN0b3JbaV07CiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJLyogdHggdmVjdG9yIGdldHMgaGFsZiB0aGUgcmF0ZSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKIAkJZWxzZQogCQkJLyogcnggb25seSBvciBtaXhlZCAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoaSksCi0JCSAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcocV92ZWN0b3ItPmVpdHIpKTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCBpLAorCQkgICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAxMiw2ICsxMDY5LDcgQEAKIAkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGl4Z2JlX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgICAgICAgICAgICAgICA9IGl4Z2JlX2dldF9yZWdzLAogCS5nZXRfd29sICAgICAgICAgICAgICAgID0gaXhnYmVfZ2V0X3dvbCwKKwkuc2V0X3dvbCAgICAgICAgICAgICAgICA9IGl4Z2JlX3NldF93b2wsCiAJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBpeGdiZV9ud2F5X3Jlc2V0LAogCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4gICAgICAgICA9IGl4Z2JlX2dldF9lZXByb21fbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDVkMzY0YTkuLjc5YWE4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00NywxMiArNDcsMTMgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMy4zMC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC44LWsyIgogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047Ci1zdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4iOworc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppeGdiZV9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU5OF0gPSAmaXhnYmVfODI1OThfaW5mbywKKwlbYm9hcmRfODI1OTldID0gJml4Z2JlXzgyNTk5X2luZm8sCiB9OwogCiAvKiBpeGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQpAQCAtNjQsNiArNjUsOCBAQAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmVfcGNpX3RibFtdID0geworCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4KSwKKwkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFGX0RVQUxfUE9SVCksCiAJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThBRl9TSU5HTEVfUE9SVCksCkBAIC04Miw2ICs4NSwxMiBAQAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4RUJfU0ZQX0xPTSksCiAJIGJvYXJkXzgyNTk4IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThfQlgpLAorCSBib2FyZF84MjU5OCB9LAorCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk5X0tYNCksCisJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfU0ZQKSwKKwkgYm9hcmRfODI1OTkgfSwKIAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCwgfQpAQCAtMTI1LDE3ICsxMzQsNTMgQEAKIAkgICAgICAgICAgICAgICAgY3RybF9leHQgfCBJWEdCRV9DVFJMX0VYVF9EUlZfTE9BRCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdmFyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgaW50X2FsbG9jX2VudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbXNpeF92ZWN0b3IpCisvKgorICogaXhnYmVfc2V0X2l2YXIgLSBzZXQgdGhlIElWQVIgcmVnaXN0ZXJzLCBtYXBwaW5nIGludGVycnVwdCBjYXVzZXMgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEBkaXJlY3Rpb246IDAgZm9yIFJ4LCAxIGZvciBUeCwgLTEgZm9yIG90aGVyIGNhdXNlcworICogQHF1ZXVlOiBxdWV1ZSB0byBtYXAgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvCisgKiBAbXNpeF92ZWN0b3I6IHRoZSB2ZWN0b3IgdG8gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlCisgKgorICovCitzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXZhcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgczggZGlyZWN0aW9uLAorCSAgICAgICAgICAgICAgICAgICB1OCBxdWV1ZSwgdTggbXNpeF92ZWN0b3IpCiB7CiAJdTMyIGl2YXIsIGluZGV4OwotCi0JbXNpeF92ZWN0b3IgfD0gSVhHQkVfSVZBUl9BTExPQ19WQUw7Ci0JaW5kZXggPSAoaW50X2FsbG9jX2VudHJ5ID4+IDIpICYgMHgxRjsKLQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSKGluZGV4KSk7Ci0JaXZhciAmPSB+KDB4RkYgPDwgKDggKiAoaW50X2FsbG9jX2VudHJ5ICYgMHgzKSkpOwotCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8ICg4ICogKGludF9hbGxvY19lbnRyeSAmIDB4MykpKTsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSKGluZGV4KSwgaXZhcik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpZiAoZGlyZWN0aW9uID09IC0xKQorCQkJZGlyZWN0aW9uID0gMDsKKwkJaW5kZXggPSAoKChkaXJlY3Rpb24gKiA2NCkgKyBxdWV1ZSkgPj4gMikgJiAweDFGOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpKTsKKwkJaXZhciAmPSB+KDB4RkYgPDwgKDggKiAocXVldWUgJiAweDMpKSk7CisJCWl2YXIgfD0gKG1zaXhfdmVjdG9yIDw8ICg4ICogKHF1ZXVlICYgMHgzKSkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJaWYgKGRpcmVjdGlvbiA9PSAtMSkgeworCQkJLyogb3RoZXIgY2F1c2VzICovCisJCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJCWluZGV4ID0gKChxdWV1ZSAmIDEpICogOCk7CisJCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSX01JU0MpOworCQkJaXZhciAmPSB+KDB4RkYgPDwgaW5kZXgpOworCQkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfSVZBUl9NSVNDLCBpdmFyKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogdHggb3IgcnggY2F1c2VzICovCisJCQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKKwkJCWluZGV4ID0gKCgxNiAqIChxdWV1ZSAmIDEpKSArICg4ICogZGlyZWN0aW9uKSk7CisJCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lWQVIocXVldWUgPj4gMSkpOworCQkJaXZhciAmPSB+KDB4RkYgPDwgaW5kZXgpOworCQkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JVkFSKHF1ZXVlID4+IDEpLCBpdmFyKTsKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTIwMCwzOSArMjQ1LDM5IEBACiAjZGVmaW5lIERFU0NfTkVFREVEIChUWERfVVNFX0NPVU5UKElYR0JFX01BWF9EQVRBX1BFUl9UWEQpIC8qIHNrYi0+ZGF0YSAqLyArIFwKIAlNQVhfU0tCX0ZSQUdTICogVFhEX1VTRV9DT1VOVChQQUdFX1NJWkUpICsgMSkgLyogZm9yIGNvbnRleHQgKi8KIAotI2RlZmluZSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcocmluZykgKFwKLQkqKHZvbGF0aWxlIHUzMiAqKSBcCi0JKCh1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqKShyaW5nKS0+ZGVzYyArIChyaW5nKS0+Y291bnQpKQogc3RhdGljIHZvaWQgaXhnYmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAogLyoqCiAgKiBpeGdiZV9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHR4X3Jpbmc6IHR4IHJpbmcgdG8gY2xlYW4KKyAqCisgKiByZXR1cm5zIHRydWUgaWYgdHJhbnNtaXQgd29yayBpcyBkb25lCiAgKiovCiBzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl90eF9pcnEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCiB7Ci0JdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2M7Ci0Jc3RydWN0IGl4Z2JlX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBpOwotCXUzMiBoZWFkLCBvbGRoZWFkOwotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MsICplb3BfZGVzYzsKKwlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaSwgZW9wLCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CiAKLQlybWIoKTsKLQloZWFkID0gR0VUX1RYX0hFQURfRlJPTV9SSU5HKHR4X3JpbmcpOwotCWhlYWQgPSBsZTMyX3RvX2NwdShoZWFkKTsKIAlpID0gdHhfcmluZy0+bmV4dF90b19jbGVhbjsKLQl3aGlsZSAoMSkgewotCQl3aGlsZSAoaSAhPSBoZWFkKSB7CisJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCisJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT53b3JrX2xpbWl0KSkgeworCQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwkJZm9yICggOyAhY2xlYW5lZDsgY291bnQrKykgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CiAJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOwogCQkJc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKIAotCQkJaWYgKHNrYikgeworCQkJaWYgKGNsZWFuZWQgJiYgc2tiKSB7CiAJCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKIAogCQkJCS8qIGdzb19zZWdzIGlzIGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciB0Y3AgKi8KQEAgLTI0NywyMyArMjkyLDE3IEBACiAJCQlpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhfYnVmZmVyX2luZm8pOwogCisJCQl0eF9kZXNjLT53Yi5zdGF0dXMgPSAwOworCiAJCQlpKys7CiAJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKIAkJCQlpID0gMDsKLQotCQkJY291bnQrKzsKLQkJCWlmIChjb3VudCA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlnb3RvIGRvbmVfY2xlYW5pbmc7CiAJCX0KLQkJb2xkaGVhZCA9IGhlYWQ7Ci0JCXJtYigpOwotCQloZWFkID0gR0VUX1RYX0hFQURfRlJPTV9SSU5HKHR4X3JpbmcpOwotCQloZWFkID0gbGUzMl90b19jcHUoaGVhZCk7Ci0JCWlmIChoZWFkID09IG9sZGhlYWQpCi0JCQlnb3RvIGRvbmVfY2xlYW5pbmc7Ci0JfSAvKiB3aGlsZSAoMSkgKi8KIAotZG9uZV9jbGVhbmluZzoKKwkJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwkJZW9wX2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKKwl9CisKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKIAogI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQpAQCAtMjkxLDE3ICszMzAsMTYgQEAKIAl9CiAKIAkvKiByZS1hcm0gdGhlIGludGVycnVwdCAqLwotCWlmICgodG90YWxfcGFja2V0cyA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KSB8fAotCSAgICAoY291bnQgPT0gdHhfcmluZy0+Y291bnQpKQorCWlmIChjb3VudCA+PSB0eF9yaW5nLT53b3JrX2xpbWl0KQogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCB0eF9yaW5nLT52X2lkeCk7CiAKIAl0eF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7Ci0JdHhfcmluZy0+c3RhdHMuYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CiAJdHhfcmluZy0+c3RhdHMucGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOworCXR4X3JpbmctPnN0YXRzLmJ5dGVzICs9IHRvdGFsX2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0b3RhbF9ieXRlczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwotCXJldHVybiAodG90YWxfcGFja2V0cyA/IHRydWUgOiBmYWxzZSk7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpOwogfQogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQpAQCAtMzE0LDEzICszNTIsMTkgQEAKIAogCWlmIChyeF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7Ci0JCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOwotCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7CisJCQlyeGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJcnhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJcnhjdHJsIHw9IElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47CiAJCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwogCQlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKLQkJCSAgICBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCSAgICAgICAgICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSwgcnhjdHJsKTsKIAkJcnhfcmluZy0+Y3B1ID0gY3B1OwogCX0KQEAgLTMzNiw4ICszODAsMTQgQEAKIAogCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSk7Ci0JCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwotCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7CisJCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAorCQkJICAgICAgICAgICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJfQogCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1RYQ1RSTChxKSwgdHhjdHJsKTsKIAkJdHhfcmluZy0+Y3B1ID0gY3B1OwpAQCAtNDAzLDIzICs0NTMsMjEgQEAKICAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAogICogQHJ4X2Rlc2M6IHJ4IGRlc2NyaXB0b3IKICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX3JlY2VpdmVfc2tiKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorc3RhdGljIHZvaWQgaXhnYmVfcmVjZWl2ZV9za2Ioc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCiB7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcV92ZWN0b3ItPm5hcGk7CiAJYm9vbCBpc192bGFuID0gKHN0YXR1cyAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKIAl1MTYgdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CiAKLQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPICYmCi0JICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHFfdmVjdG9yIC0gJmFkYXB0ZXItPnFfdmVjdG9yWzBdKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4gJiYgKHRhZyAhPSAwKSkKLQkJCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3IsIHNrYiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmxncnAsIHRhZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfZGVzYyk7CisJCQl2bGFuX2dyb19yZWNlaXZlKG5hcGksIGFkYXB0ZXItPnZsZ3JwLCB0YWcsIHNrYik7CiAJCWVsc2UKLQkJCWxyb19yZWNlaXZlX3NrYigmcmluZy0+bHJvX21nciwgc2tiLCByeF9kZXNjKTsKLQkJcmluZy0+bHJvX3VzZWQgPSB0cnVlOworCQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCX0gZWxzZSB7CiAJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkgewogCQkJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIGlzX3ZsYW4gJiYgKHRhZyAhPSAwKSkKQEAgLTQ3MCw2ICs1MTgsMTkgQEAKIAlhZGFwdGVyLT5od19jc3VtX3J4X2dvb2QrKzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX3JlbGVhc2VfcnhfZGVzYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywgdTMyIHZhbCkKK3sKKwkvKgorCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CisJICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKKwkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAorCSAqIHN1Y2ggYXMgSUEtNjQpLgorCSAqLworCXdtYigpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRUKHJ4X3JpbmctPnJlZ19pZHgpLCB2YWwpOworfQorCiAvKioKICAqIGl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBwYWNrZXQgc3BsaXQKICAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC00ODIsNiArNTQzLDcgQEAKIAl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKIAlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpiaTsKIAl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYnVmc3ogPSByeF9yaW5nLT5yeF9idWZfbGVuICsgTkVUX0lQX0FMSUdOOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fdXNlOwogCWJpID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOwpAQCAtNTExLDkgKzU3Myw3IEBACiAKIAkJaWYgKCFiaS0+c2tiKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIChyeF9yaW5nLT5yeF9idWZfbGVuICsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIE5FVF9JUF9BTElHTikpOworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5uZXRkZXYsIGJ1ZnN6KTsKIAogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwpAQCAtNTI4LDggKzU4OCw3IEBACiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAKIAkJCWJpLT5za2IgPSBza2I7Ci0JCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBidWZzeiwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9CiAJCS8qIFJlZnJlc2ggdGhlIGRlc2MgZXZlbiBpZiBidWZmZXJfYWRkcnMgZGlkbid0IGNoYW5nZSBiZWNhdXNlCkBAIC01NTMsMTQgKzYxMiw3IEBACiAJCWlmIChpLS0gPT0gMCkKIAkJCWkgPSAocnhfcmluZy0+Y291bnQgLSAxKTsKIAotCQkvKgotCQkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdwotCQkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQotCQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAotCQkgKiBzdWNoIGFzIElBLTY0KS4KLQkJICovCi0JCXdtYigpOwotCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCQlpeGdiZV9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCByeF9yaW5nLCBpKTsKIAl9CiB9CiAKQEAgLTU3NCwxMCArNjI2LDExIEBACiAJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5wa3RfaW5mbzsKIH0KIAotc3RhdGljIGJvb2wgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorc3RhdGljIGJvb2wgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQogeworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGl4Z2JlX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKQEAgLTY3OCw3ICs3MzEsNyBAQAogCQl0b3RhbF9yeF9wYWNrZXRzKys7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKLQkJaXhnYmVfcmVjZWl2ZV9za2IoYWRhcHRlciwgc2tiLCBzdGF0ZXJyLCByeF9yaW5nLCByeF9kZXNjKTsKKwkJaXhnYmVfcmVjZWl2ZV9za2IocV92ZWN0b3IsIHNrYiwgc3RhdGVyciwgcnhfZGVzYyk7CiAKIG5leHRfZGVzYzoKIAkJcnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yID0gMDsKQEAgLTY5NiwxMSArNzQ5LDYgQEAKIAkJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CiAJfQogCi0JaWYgKHJ4X3JpbmctPmxyb191c2VkKSB7Ci0JCWxyb19mbHVzaF9hbGwoJnJ4X3JpbmctPmxyb19tZ3IpOwotCQlyeF9yaW5nLT5scm9fdXNlZCA9IGZhbHNlOwotCX0KLQogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCWNsZWFuZWRfY291bnQgPSBJWEdCRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKIApAQCAtNzMxLDcgKzc3OSw4IEBACiAKIAlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAotCS8qIFBvcHVsYXRlIHRoZSBJVkFSIHRhYmxlIGFuZCBzZXQgdGhlIElUUiB2YWx1ZXMgdG8gdGhlCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQogCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCiAJICovCiAJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CkBAIC03NDIsNyArNzkxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NTIsNyArODAxLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoaiksIHZfaWR4KTsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAogCQkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC03NjEsMTUgKzgxMCwyMyBAQAogCQkvKiBpZiB0aGlzIGlzIGEgdHggb25seSB2ZWN0b3IgaGFsdmUgdGhlIGludGVycnVwdCByYXRlICovCiAJCWlmIChxX3ZlY3Rvci0+dHhyX2NvdW50ICYmICFxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJcV92ZWN0b3ItPmVpdHIgPSAoYWRhcHRlci0+ZWl0cl9wYXJhbSA+PiAxKTsKLQkJZWxzZQorCQllbHNlIGlmIChxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQkJLyogcnggb25seSAqLwogCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOwogCisJCS8qCisJCSAqIHNpbmNlIHRoaXMgaXMgaW5pdGlhbCBzZXQgdXAgZG9uJ3QgbmVlZCB0byBjYWxsCisJCSAqIGl4Z2JlX3dyaXRlX2VpdHIgaGVscGVyCisJCSAqLwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwKIAkJICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOwogCX0KIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfT1RIRVJfQ0FVU0VTX0lOREVYLCB2X2lkeCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgSVhHQkVfSVZBUl9PVEhFUl9DQVVTRVNfSU5ERVgsCisJCSAgICAgICAgICAgICAgIHZfaWR4KTsKKwllbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgLTEsIDEsIHZfaWR4KTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgMTk1MCk7CiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KQEAgLTg0NSwxMCArOTAyLDM1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoqCisgKiBpeGdiZV93cml0ZV9laXRyIC0gd3JpdGUgRUlUUiByZWdpc3RlciBpbiBoYXJkd2FyZSBzcGVjaWZpYyB3YXkKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0CisgKiBAdl9pZHg6IHZlY3RvciBpbmRleCBpbnRvIHFfdmVjdG9yIGFycmF5CisgKiBAaXRyX3JlZzogbmV3IHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gKnJlZ2lzdGVyKiBmb3JtYXQsIG5vdCBpbnRzL3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1hZGUgdG8gYmUgY2FsbGVkIGJ5IGV0aHRvb2wgYW5kIGJ5IHRoZSBkcml2ZXIKKyAqIHdoZW4gaXQgbmVlZHMgdG8gdXBkYXRlIEVJVFIgcmVnaXN0ZXJzIGF0IHJ1bnRpbWUuICBIYXJkd2FyZQorICogc3BlY2lmaWMgcXVpcmtzL2RpZmZlcmVuY2VzIGFyZSB0YWtlbiBjYXJlIG9mIGhlcmUuCisgKi8KK3ZvaWQgaXhnYmVfd3JpdGVfZWl0cihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LCB1MzIgaXRyX3JlZykKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KKwkJaXRyX3JlZyB8PSAoaXRyX3JlZyA8PCAxNik7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKgorCQkgKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW4KKwkJICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0CisJCSAqLworCQlpdHJfcmVnIHw9IElYR0JFX0VJVFJfQ05UX1dESVM7CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcpOworfQorCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyX21zaXgoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIG5ld19pdHI7CiAJdTggY3VycmVudF9pdHIsIHJldF9pdHI7CiAJaW50IGksIHJfaWR4LCB2X2lkeCA9ICgodm9pZCAqKXFfdmVjdG9yIC0gKHZvaWQgKikoYWRhcHRlci0+cV92ZWN0b3IpKSAvCkBAIC05MDMsMTQgKzk4NSwxMyBAQAogCiAJaWYgKG5ld19pdHIgIT0gcV92ZWN0b3ItPmVpdHIpIHsKIAkJdTMyIGl0cl9yZWc7CisKKwkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUsIG5vdCB0aGUgc21vb3RoZWQgb25lICovCisJCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJLyogZG8gYW4gZXhwb25lbnRpYWwgc21vb3RoaW5nICovCiAJCW5ld19pdHIgPSAoKHFfdmVjdG9yLT5laXRyICogOTApLzEwMCkgKyAoKG5ld19pdHIgKiAxMCkvMTAwKTsKLQkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQlpdHJfcmVnID0gRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKG5ld19pdHIpOwotCQkvKiBtdXN0IHdyaXRlIGhpZ2ggYW5kIGxvdyAxNiBiaXRzIHRvIHJlc2V0IGNvdW50ZXIgKi8KLQkJRFBSSU5USyhUWF9FUlIsIERFQlVHLCAid3JpdGluZyBlaXRyKCVkKTogJTA4WFxuIiwgdl9pZHgsCi0JCSAgICAgICAgaXRyX3JlZyk7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUih2X2lkeCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgaXRyX3JlZyk7CiAJfQogCiAJcmV0dXJuOwpAQCAtOTI4LDYgKzEwMDksMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX3NmcF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVpY3IpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMSkgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMSk7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJfSBlbHNlIGlmIChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMikgeworCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMik7CisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCX0gZWxzZSB7CisJCS8qIEludGVycnVwdCBpc24ndCBmb3IgdXMuLi4gKi8KKwkJcmV0dXJuOworCX0KK30KKwogc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfbHNjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC05NDYsMTMgKzEwNDUsMjUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKKwl1MzIgZWljcjsKKworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgU2lsaWNvbiBlcnJhdGEuICBVc2UgY2xlYXItYnktd3JpdGUgaW5zdGVhZAorCSAqIG9mIGNsZWFyLWJ5LXJlYWQuICBSZWFkaW5nIHdpdGggRUlDUyB3aWxsIHJldHVybiB0aGUKKwkgKiBpbnRlcnJ1cHQgY2F1c2VzIHdpdGhvdXQgY2xlYXJpbmcsIHdoaWNoIGxhdGVyIGJlIGRvbmUKKwkgKiB3aXRoIHRoZSB3cml0ZSB0byBFSUNSLgorCSAqLworCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUyk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBlaWNyKTsKIAogCWlmIChlaWNyICYgSVhHQkVfRUlDUl9MU0MpCiAJCWl4Z2JlX2NoZWNrX2xzYyhhZGFwdGVyKTsKIAotCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVMsIElYR0JFX0VJTVNfT1RIRVIpOwogCkBAIC0xMDE1LDcgKzExMjYsNyBAQAogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhpcyB2ZWN0b3Igb25seSAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIHJ4X3JpbmctPnZfaWR4KTsKLQluZXRpZl9yeF9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnFfdmVjdG9yLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEwNTIsMTIgKzExNjMsMTIgQEAKIAkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgogCi0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCiAJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHJfbXNpeChxX3ZlY3Rvcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgcnhfcmluZy0+dl9pZHgpOwpAQCAtMTA5NSw3ICsxMjA2LDcgQEAKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKLQkJaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJCWl4Z2JlX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAkJZW5hYmxlX21hc2sgfD0gcnhfcmluZy0+dl9pZHg7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKIAkJICAgICAgICAgICAgICAgICAgICAgIHJfaWR4ICsgMSk7CkBAIC0xMTA1LDggKzEyMTYsOCBAQAogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBlbmFibGVfbWFzayk7CkBAIC0xMjc2LDcgKzEzODcsNiBAQAogCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yOwogCXU4IGN1cnJlbnRfaXRyOwogCXUzMiBuZXdfaXRyID0gcV92ZWN0b3ItPmVpdHI7CkBAIC0xMzExLDM1ICsxNDIxLDE5IEBACiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+ZWl0cikgewogCQl1MzIgaXRyX3JlZzsKKworCQkvKiBzYXZlIHRoZSBhbGdvcml0aG0gdmFsdWUgaGVyZSwgbm90IHRoZSBzbW9vdGhlZCBvbmUgKi8KKwkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KIAkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOwotCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7Ci0JCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJVFIoMCksIGl0cl9yZWcgfCAoaXRyX3JlZyk8PDE2KTsKKwkJaXhnYmVfd3JpdGVfZWl0cihhZGFwdGVyLCAwLCBpdHJfcmVnKTsKIAl9CiAKIAlyZXR1cm47CiB9CiAKIC8qKgotICogaXhnYmVfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCB+MCk7Ci0JSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKLQkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKLQl9IGVsc2UgewotCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKLQl9Ci19Ci0KLS8qKgogICogaXhnYmVfaXJxX2VuYWJsZSAtIEVuYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KQEAgLTEzNDksNyArMTQ0MywyMSBAQAogCW1hc2sgPSBJWEdCRV9FSU1TX0VOQUJMRV9NQVNLOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSkKIAkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAxOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQltYXNrIHw9IElYR0JFX0VJTVNfRUNDOworCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMjsKKwl9CisKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBtYXNrKTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJLyogZW5hYmxlIHRoZSByZXN0IG9mIHRoZSBxdWV1ZSB2ZWN0b3JzICovCisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVNfRVgoMSksCisJCSAgICAgICAgICAgICAgICAoSVhHQkVfRUlNU19SVFhfUVVFVUUgPDwgMTYpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgyKSwKKwkJICAgICAgICAgICAgICAgICgoSVhHQkVfRUlNU19SVFhfUVVFVUUgPDwgMTYpIHwKKwkJICAgICAgICAgICAgICAgICAgSVhHQkVfRUlNU19SVFhfUVVFVUUpKTsKKwl9CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtMTM2NSw2ICsxNDczLDEyIEBACiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgZWljcjsKIAorCS8qCisJICogV29ya2Fyb3VuZCBmb3Igc2lsaWNvbiBlcnJhdGEuICBNYXNrIHRoZSBpbnRlcnJ1cHRzCisJICogYmVmb3JlIHRoZSByZWFkIG9mIEVJQ1IuCisJICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1DLCBJWEdCRV9JUlFfQ0xFQVJfTUFTSyk7CisKIAkvKiBmb3IgTkFQSSwgdXNpbmcgRUlBTSB0byBhdXRvLW1hc2sgdHgvcnggaW50ZXJydXB0IGJpdHMgb24gcmVhZAogCSAqIHRoZXJlZm9yZSBubyBleHBsaWN0IGludGVycnVwdCBkaXNhYmxlIGlzIG5lY2Vzc2FyeSAqLwogCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUlDUik7CkBAIC0xMzc5LDE1ICsxNDkzLDE4IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOworCiAJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgewogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRvdGFsX2J5dGVzID0gMDsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+cnhfcmluZ1swXS50b3RhbF9ieXRlcyA9IDA7CiAJCS8qIHdvdWxkIGRpc2FibGUgaW50ZXJydXB0cyBoZXJlIGJ1dCBFSUFNIGRpc2FibGVkIGl0ICovCi0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE0NTksNiArMTU3NiwzOSBAQAogfQogCiAvKioKKyAqIGl4Z2JlX2lycV9kaXNhYmxlIC0gTWFzayBvZmYgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhlIE5JQworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfaXJxX2Rpc2FibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgfjApOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDEpLCB+MCk7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMiksIH4wKTsKKwl9CisJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKKwkJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yKTsKKwl9IGVsc2UgeworCQlzeW5jaHJvbml6ZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgbWFzayA9IElYR0JFX0VJTVNfUlRYX1FVRVVFOworCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDEpLCBtYXNrIDw8IDE2KTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgyKSwKKwkJICAgICAgICAgICAgICAgIChtYXNrIDw8IDE2IHwgbWFzaykpOworCX0KKwkvKiBza2lwIHRoZSBmbHVzaCAqLworfQorCisvKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9tc2lfYW5kX2xlZ2FjeSAtIEluaXRpYWxpemUgUElOIChJTlRBLi4uKSBhbmQgTVNJIGludGVycnVwdHMKICAqCiAgKiovCkBAIC0xNDY5LDggKzE2MTksOCBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUigwKSwKIAkgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGFkYXB0ZXItPmVpdHJfcGFyYW0pKTsKIAotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfUlhfUVVFVUUoMCksIDApOwotCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIElYR0JFX0lWQVJfVFhfUVVFVUUoMCksIDApOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIDAsIDApOworCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIDAsIDApOwogCiAJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgMCwgMCk7CiAJbWFwX3ZlY3Rvcl90b190eHEoYWRhcHRlciwgMCwgMCk7CkBAIC0xNDg2LDcgKzE2MzYsNyBAQAogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfY29uZmlndXJlX3R4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXU2NCB0ZGJhLCB0ZHdiYTsKKwl1NjQgdGRiYTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBpLCBqLCB0ZGxlbiwgdHhjdHJsOwogCkBAIC0xNDk5LDExICsxNjQ5LDYgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBTChqKSwKIAkJICAgICAgICAgICAgICAgICh0ZGJhICYgRE1BXzMyQklUX01BU0spKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREJBSChqKSwgKHRkYmEgPj4gMzIpKTsKLQkJdGR3YmEgPSByaW5nLT5kbWEgKwotCQkgICAgICAgIChyaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYykpOwotCQl0ZHdiYSB8PSBJWEdCRV9URFdCQUxfSEVBRF9XQl9FTkFCTEU7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERXQkFMKGopLCB0ZHdiYSAmIERNQV8zMkJJVF9NQVNLKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFdCQUgoaiksICh0ZHdiYSA+PiAzMikpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGopLCB0ZGxlbik7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGopLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaiksIDApOwpAQCAtMTUxNiwyNiArMTY2MSwyNSBAQAogCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChqKSwgdHhjdHJsKTsKIAl9CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBXZSBlbmFibGUgOCB0cmFmZmljIGNsYXNzZXMsIERDQiBvbmx5ICovCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIChJWEdCRV9NVFFDX1JUX0VOQSB8CisJCQkgICAgICAgICAgICAgICAgSVhHQkVfTVRRQ184VENfOFRRKSk7CisJfQogfQogCi0jZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQJMgorI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUIDIKIAogc3RhdGljIHZvaWQgaXhnYmVfY29uZmlndXJlX3NycmN0bChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IGluZGV4KQogewogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nOwogCXUzMiBzcnJjdGw7Ci0JaW50IHF1ZXVlMDsKKwlpbnQgcXVldWUwID0gMDsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAKLQkvKiBwcm9ncmFtIG9uZSBzcnJjdGwgcmVnaXN0ZXIgcGVyIFZNRHEgaW5kZXggKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCkgewotCQlsb25nIHNoaWZ0LCBsZW47Ci0JCW1hc2sgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2s7Ci0JCWxlbiA9IHNpemVvZihhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdLm1hc2spICogODsKLQkJc2hpZnQgPSBmaW5kX2ZpcnN0X2JpdCgmbWFzaywgbGVuKTsKLQkJcXVldWUwID0gaW5kZXggJiBtYXNrOwotCQlpbmRleCA9IChpbmRleCAmIG1hc2spID4+IHNoaWZ0OwotCS8qIHByb2dyYW0gb25lIHNycmN0bCBwZXIgUlNTIHF1ZXVlIHNpbmNlIFJEUlhDVEwuTVZNRU4gaXMgZW5hYmxlZCAqLworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlxdWV1ZTAgPSBpbmRleDsKIAl9IGVsc2UgewogCQltYXNrID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrOwogCQlxdWV1ZTAgPSBpbmRleCAmIG1hc2s7CkBAIC0xNTUwLDcgKzE2OTQsMTQgQEAKIAlzcnJjdGwgJj0gfklYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7Ci0JCXNycmN0bCB8PSBJWEdCRV9SWEJVRkZFUl8yMDQ4ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwkJdTE2IGJ1ZnN6ID0gSVhHQkVfUlhCVUZGRVJfMjA0ODsKKwkJLyogZ3JvdyB0aGUgYW1vdW50IHdlIGNhbiByZWNlaXZlIG9uIGxhcmdlIHBhZ2UgbWFjaGluZXMgKi8KKwkJaWYgKGJ1ZnN6IDwgKFBBR0VfU0laRSAvIDIpKQorCQkJYnVmc3ogPSAoUEFHRV9TSVpFIC8gMik7CisJCS8qIGNhcCB0aGUgYnVmc3ogYXQgb3VyIGxhcmdlc3QgZGVzY3JpcHRvciBzaXplICovCisJCWJ1ZnN6ID0gbWluKCh1MTYpSVhHQkVfTUFYX1JYQlVGRkVSLCBidWZzeik7CisKKwkJc3JyY3RsIHw9IGJ1ZnN6ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAkJc3JyY3RsIHw9IElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTOwogCQlzcnJjdGwgfD0gKChJWEdCRV9SWF9IRFJfU0laRSA8PAogCQkgICAgICAgICAgICBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUKSAmCkBAIC0xNTY1LDQwICsxNzE2LDExIEBACiAJCQlzcnJjdGwgfD0gcnhfcmluZy0+cnhfYnVmX2xlbiA+PgogCQkJICAgICAgICAgIElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKIAl9CisKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9TUlJDVEwoaW5kZXgpLCBzcnJjdGwpOwogfQogCiAvKioKLSAqIGl4Z2JlX2dldF9za2JfaGRyIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBMUk8gaGVhZGVyIHByb2Nlc3NpbmcKLSAqIEBza2I6IHBvaW50ZXIgdG8gc2tfYnVmZiB0byBiZSBhZGRlZCB0byBMUk8gcGFja2V0Ci0gKiBAaXBoZHI6IHBvaW50ZXIgdG8gaXAgaGVhZGVyIHN0cnVjdHVyZQotICogQHRjcGg6IHBvaW50ZXIgdG8gdGNwIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEBoZHJfZmxhZ3M6IHBvaW50ZXIgdG8gaGVhZGVyIGZsYWdzCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhCi0gKiovCi1zdGF0aWMgaW50IGl4Z2JlX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0gcHJpdjsKLQotCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBJUHY0IFRDUCBwYWNrZXQgKi8KLQlpZiAoISgoaXhnYmVfZ2V0X3BrdF9pbmZvKHJ4X2Rlc2MpICYgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBWNCkgJiYKLQkgICAgIChpeGdiZV9nZXRfcGt0X2luZm8ocnhfZGVzYykgJiBJWEdCRV9SWERBRFZfUEtUVFlQRV9UQ1ApKSkKLQkJcmV0dXJuIC0xOwotCi0JLyogU2V0IG5ldHdvcmsgaGVhZGVycyAqLwotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGlwX2hkcmxlbihza2IpKTsKLQkqaXBoZHIgPSBpcF9oZHIoc2tiKTsKLQkqdGNwaCA9IHRjcF9oZHIoc2tiKTsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFBBR0VfVVNFX0NPVU5UKFMpICgoKFMpID4+IFBBR0VfU0hJRlQpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoUykgJiAoUEFHRV9TSVpFIC0gMSkpID8gMSA6IDApKQotCi0vKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9yeCAtIENvbmZpZ3VyZSA4MjU5eCBSZWNlaXZlIFVuaXQgYWZ0ZXIgUmVzZXQKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKQEAgLTE2MTYsOCArMTczOCw3IEBACiAJICAgICAgICAgICAgICAgICAgMHhBNTRGMkJFQywgMHhFQTQ5QUY3QywgMHhFMjE0QUQzRCwgMHhCODU1QUFCRSwKIAkgICAgICAgICAgICAgICAgICAweDZBM0U2N0VBLCAweDE0MzY0RDE3LCAweDNCRUQyMDBEfTsKIAl1MzIgZmN0cmwsIGhscmVnMDsKLQl1MzIgcGFnZXM7Ci0JdTMyIHJldGEgPSAwLCBtcnFjOworCXUzMiByZXRhID0gMCwgbXJxYyA9IDA7CiAJdTMyIHJkcnhjdGw7CiAJaW50IHJ4X2J1Zl9sZW47CiAKQEAgLTE2MjcsNiArMTc0OCwxNCBAQAogCS8qIFNldCB0aGUgUlggYnVmZmVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKIAkJcnhfYnVmX2xlbiA9IElYR0JFX1JYX0hEUl9TSVpFOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkvKiBQU1JUWVBFIG11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gODI1OTkgKi8KKwkJCXUzMiBwc3J0eXBlID0gSVhHQkVfUFNSVFlQRV9UQ1BIRFIgfAorCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX1VEUEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfSVBWNEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfSVBWNkhEUjsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUFNSVFlQRSgwKSwgcHNydHlwZSk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAobmV0ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQogCQkJcnhfYnVmX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOwpAQCAtMTYzNyw2ICsxNzY2LDcgQEAKIAlmY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNUUkwpOwogCWZjdHJsIHw9IElYR0JFX0ZDVFJMX0JBTTsKIAlmY3RybCB8PSBJWEdCRV9GQ1RSTF9EUEY7IC8qIGRpc2NhcmQgcGF1c2UgZnJhbWVzIHdoZW4gRkMgZW5hYmxlZCAqLworCWZjdHJsIHw9IElYR0JFX0ZDVFJMX1BNQ0Y7CiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNUUkwsIGZjdHJsKTsKIAogCWhscmVnMCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ITFJFRzApOwpAQCAtMTY0Niw4ICsxNzc2LDYgQEAKIAkJaGxyZWcwIHw9IElYR0JFX0hMUkVHMF9KVU1CT0VOOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSExSRUcwLCBobHJlZzApOwogCi0JcGFnZXMgPSBQQUdFX1VTRV9DT1VOVChhZGFwdGVyLT5uZXRkZXYtPm10dSk7Ci0KIAlyZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0uY291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOwogCS8qIGRpc2FibGUgcmVjZWl2ZXMgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlyeGN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKQEAgLTE2NjYsMzcgKzE3OTQsNDQgQEAKIAkJYWRhcHRlci0+cnhfcmluZ1tpXS5oZWFkID0gSVhHQkVfUkRIKGopOwogCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnRhaWwgPSBJWEdCRV9SRFQoaik7CiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfYnVmX2xlbiA9IHJ4X2J1Zl9sZW47Ci0JCS8qIEludGl0aWFsIExSTyBTZXR0aW5ncyAqLwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IubWF4X2FnZ3IgPSBJWEdCRV9NQVhfTFJPX0FHR1JFR0FURTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLm1heF9kZXNjID0gSVhHQkVfTUFYX0xST19ERVNDUklQVE9SUzsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmdldF9za2JfaGVhZGVyID0gaXhnYmVfZ2V0X3NrYl9oZHI7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5mZWF0dXJlcyA9IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKLQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX05FVFBPTEwpKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzIHw9IExST19GX05BUEk7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAkJaXhnYmVfY29uZmlndXJlX3NycmN0bChhZGFwdGVyLCBqKTsKIAl9CiAKLQkvKgotCSAqIEZvciBWTURxIHN1cHBvcnQgb2YgZGlmZmVyZW50IGRlc2NyaXB0b3IgdHlwZXMgb3IKLQkgKiBidWZmZXIgc2l6ZXMgdGhyb3VnaCB0aGUgdXNlIG9mIG11bHRpcGxlIFNSUkNUTAotCSAqIHJlZ2lzdGVycywgUkRSWENUTC5NVk1FTiBtdXN0IGJlIHNldCB0byAxCi0JICoKLQkgKiBhbHNvLCB0aGUgbWFudWFsIGRvZXNuJ3QgbWVudGlvbiBpdCBjbGVhcmx5IGJ1dCBEQ0EgaGludHMKLQkgKiB3aWxsIG9ubHkgdXNlIHF1ZXVlIDAncyB0YWdzIHVubGVzcyB0aGlzIGJpdCBpcyBzZXQuICBTaWRlCi0JICogZWZmZWN0cyBvZiBzZXR0aW5nIHRoaXMgYml0IGFyZSBvbmx5IHRoYXQgU1JSQ1RMIG11c3QgYmUKLQkgKiBmdWxseSBwcm9ncmFtbWVkIFswLi4xNV0KLQkgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJgotCSAgICAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8IElYR0JFX0ZMQUdfVk1EUV9FTkFCTEVEKSkgeworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJLyoKKwkJICogRm9yIFZNRHEgc3VwcG9ydCBvZiBkaWZmZXJlbnQgZGVzY3JpcHRvciB0eXBlcyBvcgorCQkgKiBidWZmZXIgc2l6ZXMgdGhyb3VnaCB0aGUgdXNlIG9mIG11bHRpcGxlIFNSUkNUTAorCQkgKiByZWdpc3RlcnMsIFJEUlhDVEwuTVZNRU4gbXVzdCBiZSBzZXQgdG8gMQorCQkgKgorCQkgKiBhbHNvLCB0aGUgbWFudWFsIGRvZXNuJ3QgbWVudGlvbiBpdCBjbGVhcmx5IGJ1dCBEQ0EgaGludHMKKwkJICogd2lsbCBvbmx5IHVzZSBxdWV1ZSAwJ3MgdGFncyB1bmxlc3MgdGhpcyBiaXQgaXMgc2V0LiAgU2lkZQorCQkgKiBlZmZlY3RzIG9mIHNldHRpbmcgdGhpcyBiaXQgYXJlIG9ubHkgdGhhdCBTUlJDVEwgbXVzdCBiZQorCQkgKiBmdWxseSBwcm9ncmFtbWVkIFswLi4xNV0KKwkJICovCiAJCXJkcnhjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkRSWENUTCk7CiAJCXJkcnhjdGwgfD0gSVhHQkVfUkRSWENUTF9NVk1FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMLCByZHJ4Y3RsKTsKIAl9CiAKKwkvKiBQcm9ncmFtIE1SUUMgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgcXVldWVzICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlpbnQgbWFzayA9IGFkYXB0ZXItPmZsYWdzICYgKAorCQkJCUlYR0JFX0ZMQUdfUlNTX0VOQUJMRUQKKwkJCQl8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQKKwkJCQkpOworCisJCXN3aXRjaCAobWFzaykgeworCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKKwkJCW1ycWMgPSBJWEdCRV9NUlFDX1JTU0VOOworCQkJYnJlYWs7CisJCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgorCQkJbXJxYyA9IElYR0JFX01SUUNfUlQ4VENFTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgewogCQkvKiBGaWxsIG91dCByZWRpcmVjdGlvbiB0YWJsZSAqLwogCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDEyODsgaSsrLCBqKyspIHsKQEAgLTE3MTMsMTkgKzE4NDgsMTcgQEAKIAkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JTU1JLKGkpLCBzZWVkW2ldKTsKIAotCQltcnFjID0gSVhHQkVfTVJRQ19SU1NFTgorCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU0VOOwogCQkgICAgLyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqLwotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0Ci0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVgKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNgotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYX1VEUDsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKKwkJbXJxYyB8PSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0CisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjYKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1RDUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQOwogCX0KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIG1ycWMpOwogCiAJcnhjc3VtID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1NVTSk7CiAKQEAgLTE3NDIsNiArMTg3NSwxMiBAQAogCX0KIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDU1VNLCByeGNzdW0pOworCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlyZHJ4Y3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JEUlhDVEwpOworCQlyZHJ4Y3RsIHw9IElYR0JFX1JEUlhDVExfQ1JDU1RSSVA7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRSWENUTCwgcmRyeGN0bCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKQEAgLTE3NzUsNiArMTkxNCw3IEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXUzMiBjdHJsOworCWludCBpLCBqOwogCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWl4Z2JlX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtMTc4NiwxOCArMTkyNiwyNCBAQAogCSAqIG5vdCBpbiBEQ0IgbW9kZS4KIAkgKi8KIAljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMKTsKLQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FOwotCWN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47Ci0JSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7Ci0JaXhnYmVfdmxhbl9yeF9hZGRfdmlkKG5ldGRldiwgMCk7Ci0KLQlpZiAoZ3JwKSB7Ci0JCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KLQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7Ci0JCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUU7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKIAkJY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCwgY3RybCk7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOworCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSk7CisJCQljdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWERDVEwoaiksIGN0cmwpOworCQl9CiAJfQorCWl4Z2JlX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIDApOwogCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCWl4Z2JlX2lycV9lbmFibGUoYWRhcHRlcik7CkBAIC0xOTYwLDkgKzIxMDYsMjEgQEAKIAl9CiAJLyogRW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwogCXZsbmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxOQ1RSTCk7Ci0JdmxuY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOwotCXZsbmN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCXZsbmN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUUgfCBJWEdCRV9WTE5DVFJMX1ZGRTsKKwkJdmxuY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKKwl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQl2bG5jdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJdmxuY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOworCQkJdmxuY3RybCB8PSBJWEdCRV9SWERDVExfVk1FOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwoaiksIHZsbmN0cmwpOworCQl9CisJfQogCWh3LT5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgMCwgMCwgdHJ1ZSk7CiB9CiAKQEAgLTE5OTMsMTMgKzIxNTEsMTE1IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgLSAxKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9pc19zZnAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzd2l0Y2ggKGh3LT5waHkudHlwZSkgeworCWNhc2UgaXhnYmVfcGh5X3NmcF9hdmFnbzoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfZnRsOgorCWNhc2UgaXhnYmVfcGh5X3NmcF9pbnRlbDoKKwljYXNlIGl4Z2JlX3BoeV9zZnBfdW5rbm93bjoKKwljYXNlIGl4Z2JlX3BoeV90d190eWNvOgorCWNhc2UgaXhnYmVfcGh5X3R3X3Vua25vd246CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2xpbmtfY29uZmlnIC0gc2V0IHVwIFNGUCsgbGluaworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgeworCQkJLyoKKwkJCSAqIEluIG11bHRpc3BlZWQgZmliZXIgc2V0dXBzLCB0aGUgZGV2aWNlIG1heSBub3QgaGF2ZQorCQkJICogaGFkIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB3aGVuIHRoZSBkcml2ZXIgbG9hZGVkLgorCQkJICogSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24KKwkJCSAqIGNvdWxkbid0IGdldCB0aGUgTUFDIGludG8gMTBHIG9yIDFHIG1vZGUsIHNvIHdlJ2xsCisJCQkgKiBuZXZlciBoYXZlIGEgbGluayBzdGF0dXMgY2hhbmdlIGludGVycnVwdCBmaXJlLgorCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgorCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgorCQkJICovCisJCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQorCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRGlyZWN0IEF0dGFjaCBDdSBhbmQgbm9uLW11bHRpc3BlZWQgZmliZXIgbW9kdWxlcworCQkJICogc3RpbGwgbmVlZCB0byBiZSBjb25maWd1cmVkIHByb3Blcmx5IHByaW9yIHRvCisJCQkgKiBhdHRlbXB0aW5nIGxpbmsuCisJCQkgKi8KKwkJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0spKQorCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCQl9Cit9CisKKy8qKgorICogaXhnYmVfbm9uX3NmcF9saW5rX2NvbmZpZyAtIHNldCB1cCBub24tU0ZQKyBsaW5rCisgKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGF1dG9uZWc7CisJYm9vbCBsaW5rX3VwID0gZmFsc2U7CisJdTMyIHJldCA9IElYR0JFX0VSUl9MSU5LX1NFVFVQOworCisJaWYgKGh3LT5tYWMub3BzLmNoZWNrX2xpbmspCisJCXJldCA9IGh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZhdXRvbmVnLCAmbGlua191cCwgZmFsc2UpOworCisJaWYgKHJldCkKKwkJZ290byBsaW5rX2NmZ19vdXQ7CisKKwlpZiAoaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKQorCQlyZXQgPSBody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcsICZhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh3LT5tYWMuYXV0b25lZyk7CisJaWYgKHJldCkKKwkJZ290byBsaW5rX2NmZ19vdXQ7CisKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJcmV0ID0gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgbGlua191cCk7CitsaW5rX2NmZ19vdXQ6CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBJWEdCRV9NQVhfUlhfREVTQ19QT0xMIDEwCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnhyKQoreworCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1tyeHJdLnJlZ19pZHg7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsgaysrKSB7CisJCWlmIChJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICBJWEdCRV9SWERDVEwoaikpICYgSVhHQkVfUlhEQ1RMX0VOQUJMRSkKKwkJCWJyZWFrOworCQllbHNlCisJCQltc2xlZXAoMSk7CisJfQorCWlmIChrID49IElYR0JFX01BWF9SWF9ERVNDX1BPTEwpIHsKKwkJRFBSSU5USyhEUlYsIEVSUiwgIlJYRENUTC5FTkFCTEUgb24gUnggcXVldWUgJWQgIgorCQkgICAgICAgICJub3Qgc2V0IHdpdGhpbiB0aGUgcG9sbGluZyBwZXJpb2RcbiIsIHJ4cik7CisJfQorCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsICZhZGFwdGVyLT5yeF9yaW5nW3J4cl0sCisJICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5yeF9yaW5nW3J4cl0uY291bnQgLSAxKSk7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfdXBfY29tcGxldGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBpLCBqID0gMDsKKwlpbnQgbnVtX3J4X3JpbmdzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlpbnQgZXJyOwogCWludCBtYXhfZnJhbWUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAJdTMyIHR4ZGN0bCwgcnhkY3RsLCBtaGFkZDsKKwl1MzIgZG1hdHhjdGw7CiAJdTMyIGdwaWU7CiAKIAlpeGdiZV9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKQEAgLTIwMzEsNiArMjI5MSwxMyBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dQSUUsIGdwaWUpOwogCX0KIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZ3BpZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUElFKTsKKwkJZ3BpZSB8PSBJWEdCRV9TRFAxX0dQSUVOOworCQlncGllIHw9IElYR0JFX1NEUDJfR1BJRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisJfQorCiAJbWhhZGQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUhBREQpOwogCWlmIChtYXhfZnJhbWUgIT0gKG1oYWRkID4+IElYR0JFX01IQUREX01GU19TSElGVCkpIHsKIAkJbWhhZGQgJj0gfklYR0JFX01IQUREX01GU19NQVNLOwpAQCAtMjA0NCwxMSArMjMxMSwyMyBAQAogCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJLyogZW5hYmxlIFdUSFJFU0g9OCBkZXNjcmlwdG9ycywgdG8gZW5jb3VyYWdlIGJ1cnN0IHdyaXRlYmFjayAqLwogCQl0eGRjdGwgfD0gKDggPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwgdHhkY3RsKTsKKwl9CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qIERNQVRYQ1RMLkVOIG11c3QgYmUgc2V0IGFmdGVyIGFsbCBUeCBxdWV1ZSBjb25maWcgaXMgZG9uZSAqLworCQlkbWF0eGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCk7CisJCWRtYXR4Y3RsIHw9IElYR0JFX0RNQVRYQ1RMX1RFOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMLCBkbWF0eGN0bCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCXR4ZGN0bCB8PSBJWEdCRV9UWERDVExfRU5BQkxFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwgdHhkY3RsKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7CiAJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CiAJCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWERDVEwoaikpOwogCQkvKiBlbmFibGUgUFRIUkVTSD0zMiBkZXNjcmlwdG9ycyAoaGFsZiB0aGUgaW50ZXJuYWwgY2FjaGUpCkBAIC0yMDU3LDE5ICsyMzM2LDIyIEBACiAJCXJ4ZGN0bCB8PSAweDAwMjA7CiAJCXJ4ZGN0bCB8PSBJWEdCRV9SWERDVExfRU5BQkxFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgcnhkY3RsKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJCWl4Z2JlX3J4X2Rlc2NfcXVldWVfZW5hYmxlKGFkYXB0ZXIsIGkpOwogCX0KIAkvKiBlbmFibGUgYWxsIHJlY2VpdmVzICovCiAJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1RSTCk7Ci0JcnhkY3RsIHw9IChJWEdCRV9SWENUUkxfRE1CWVBTIHwgSVhHQkVfUlhDVFJMX1JYRU4pOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGRjdGwpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCXJ4ZGN0bCB8PSAoSVhHQkVfUlhDVFJMX0RNQllQUyB8IElYR0JFX1JYQ1RSTF9SWEVOKTsKKwllbHNlCisJCXJ4ZGN0bCB8PSBJWEdCRV9SWENUUkxfUlhFTjsKKwlody0+bWFjLm9wcy5lbmFibGVfcnhfZG1hKGh3LCByeGRjdGwpOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpCiAJCWl4Z2JlX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOwogCWVsc2UKIAkJaXhnYmVfY29uZmlndXJlX21zaV9hbmRfbGVnYWN5KGFkYXB0ZXIpOwogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwotCiAJY2xlYXJfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAlpeGdiZV9uYXBpX2VuYWJsZV9hbGwoYWRhcHRlcik7CiAKQEAgLTIwNzgsNiArMjM2MCwyOCBAQAogCiAJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAorCS8qCisJICogRm9yIGhvdC1wbHVnZ2FibGUgU0ZQKyBkZXZpY2VzLCBhIG5ldyBTRlArIG1vZHVsZSBtYXkgaGF2ZQorCSAqIGFycml2ZWQgYmVmb3JlIGludGVycnVwdHMgd2VyZSBlbmFibGVkLiAgV2UgbmVlZCB0byBraWNrIG9mZgorCSAqIHRoZSBTRlArIG1vZHVsZSBzZXR1cCBmaXJzdCwgdGhlbiB0cnkgdG8gYnJpbmcgdXAgbGluay4KKwkgKiBJZiB3ZSdyZSBub3QgaG90LXBsdWdnYWJsZSBTRlArLCB3ZSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGxpbmsKKwkgKiBhbmQgYnJpbmcgaXQgdXAuCisJICovCisJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnkoaHcpOworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIlBIWSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgTklDICVkXG4iLCBlcnIpOworCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChpeGdiZV9pc19zZnAoaHcpKSB7CisJCWl4Z2JlX3NmcF9saW5rX2NvbmZpZyhhZGFwdGVyKTsKKwl9IGVsc2UgeworCQllcnIgPSBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKGh3KTsKKwkJaWYgKGVycikKKwkJCURQUklOVEsoUFJPQkUsIEVSUiwgImxpbmtfY29uZmlnIEZBSUxFRCAlZFxuIiwgZXJyKTsKKwl9CisKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCkBAIC0yMTA0LDYgKzI0MDgsOCBAQAogCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLwogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCXJldHVybiBpeGdiZV91cF9jb21wbGV0ZShhZGFwdGVyKTsKIH0KIApAQCAtMjE2NSw4ICsyNDcxLDEwIEBACiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCi0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5oZWFkKTsKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCWlmIChyeF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPmhlYWQpOworCWlmIChyeF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOwogfQogCiAvKioKQEAgLTIxOTcsOCArMjUwNSwxMCBAQAogCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIAotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7Ci0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKKwlpZiAodHhfcmluZy0+aGVhZCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT5oZWFkKTsKKwlpZiAodHhfcmluZy0+dGFpbCkKKwkJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKIH0KIAogLyoqCkBAIC0yMjYxLDYgKzI1NzEsMTEgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwoaiksCiAJCSAgICAgICAgICAgICAgICAodHhkY3RsICYgfklYR0JFX1RYRENUTF9FTkFCTEUpKTsKIAl9CisJLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRE1BVFhDVEwsCisJCSAgICAgICAgICAgICAgICAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMKSAmCisJCSAgICAgICAgICAgICAgICAgfklYR0JFX0RNQVRYQ1RMX1RFKSk7CiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCkBAIC0yMjk3LDEwICsyNjEyLDEwIEBACiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewotCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSBjb250YWluZXJfb2YobmFwaSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOworCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPQorCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IsIG5hcGkpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7Ci0JaW50IHR4X2NsZWFuZWQsIHdvcmtfZG9uZSA9IDA7CisJaW50IHR4X2NsZWFuX2NvbXBsZXRlLCB3b3JrX2RvbmUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKQEAgLTIzMDksMTkgKzI2MjQsMTkgQEAKIAl9CiAjZW5kaWYKIAotCXR4X2NsZWFuZWQgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7Ci0JaXhnYmVfY2xlYW5fcnhfaXJxKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJdHhfY2xlYW5fY29tcGxldGUgPSBpeGdiZV9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7CisJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCBhZGFwdGVyLT5yeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCi0JaWYgKHR4X2NsZWFuZWQpCisJaWYgKCF0eF9jbGVhbl9jb21wbGV0ZSkKIAkJd29ya19kb25lID0gYnVkZ2V0OwogCiAJLyogSWYgYnVkZ2V0IG5vdCBmdWxseSBjb25zdW1lZCwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKIAkJCWl4Z2JlX3NldF9pdHIoYWRhcHRlcik7CiAJCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJCWl4Z2JlX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwogfQpAQCAtMjM1Myw2OCArMjY2OCw3NiBAQAogCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9zZXRfZGNiX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgbnJxID0gMSwgbnRxID0gMTsKLQlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2ksIHJzc19tOwotCWludCBkY2JfaSwgZGNiX207CisJYm9vbCByZXQgPSBmYWxzZTsKIAotCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzICovCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewotCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6Ci0JCWRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7Ci0JCWRjYl9tID0gMDsKLQkJcnNzX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKLQkJcnNzX20gPSAwOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKLQkJZmVhdHVyZV9tYXNrIHw9IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7Ci0KLQkJc3dpdGNoIChhZGFwdGVyLT5mbGFncyAmIGZlYXR1cmVfbWFzaykgewotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlkY2JfbSA9IDB4NyA8PCAzOwotCQkJcnNzX2kgPSBtaW4oOCwgcnNzX2kpOwotCQkJcnNzX20gPSAweDc7Ci0JCQlucnEgPSBkY2JfaSAqIHJzc19pOwotCQkJbnRxID0gbWluKE1BWF9UWF9RVUVVRVMsIGRjYl9pICogcnNzX2kpOwotCQkJYnJlYWs7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJZGNiX20gPSAweDcgPDwgMzsKLQkJCW5ycSA9IGRjYl9pOwotCQkJbnRxID0gZGNiX2k7Ci0JCQlicmVhazsKLQkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCk6Ci0JCQlyc3NfbSA9IDB4RjsKLQkJCW5ycSA9IHJzc19pOwotCQkJbnRxID0gcnNzX2k7Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQlkZWZhdWx0OgotCQkJZGNiX2kgPSAwOwotCQkJZGNiX20gPSAwOwotCQkJcnNzX2kgPSAwOwotCQkJcnNzX20gPSAwOwotCQkJbnJxID0gMTsKLQkJCW50cSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIFNhbml0eSBjaGVjaywgd2Ugc2hvdWxkIG5ldmVyIGhhdmUgemVybyBxdWV1ZXMgKi8KLQkJbnJxID0gKG5ycSA/OjEpOwotCQludHEgPSAobnRxID86MSk7Ci0KLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMgPSBkY2JfaTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLm1hc2sgPSBkY2JfbTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3NfaTsKLQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2sgPSByc3NfbTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbnJxID0gMTsKLQkJbnRxID0gMTsKLQkJYnJlYWs7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0ubWFzayA9IDB4NyA8PCAzOworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOwogCX0KIAotCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBucnE7Ci0JYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IG50cTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qKgorICogaXhnYmVfc2V0X3Jzc19xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgUlNTCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgb3VyICJiYXNlIiBtdWx0aXF1ZXVlIG1vZGUuICBSU1MgKFJlY2VpdmUgU2lkZSBTY2FsaW5nKSB3aWxsIHRyeQorICogdG8gYWxsb2NhdGUgb25lIFJ4IHF1ZXVlIHBlciBDUFUsIGFuZCBpZiBhdmFpbGFibGUsIG9uZSBUeCBxdWV1ZSBwZXIgQ1BVLgorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9zZXRfcnNzX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgeworCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzayA9IDB4RjsKKwkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9CisJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKKwkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9CisJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKKwkJcmV0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlyZXQgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaXhnYmVfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGFudAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcXVldWUgYWxsb2NhdGlvbiByb3V0aW5lLiAgVGhlIG9yZGVyIGhlcmUgaXMgdmVyeQorICogaW1wb3J0YW50LCBzdGFydGluZyB3aXRoIHRoZSAibW9zdCIgbnVtYmVyIG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLAorICogYW5kIGVuZGluZyB3aXRoIHRoZSBzbWFsbGVzdCBzZXQgb2YgZmVhdHVyZXMuICBUaGlzIHdheSBsYXJnZSBjb21iaW5hdGlvbnMKKyAqIGNhbiBiZSBhbGxvY2F0ZWQgaWYgdGhleSdyZSB0dXJuZWQgb24sIGFuZCBzbWFsbGVyIGNvbWJpbmF0aW9ucyBhcmUgdGhlCisgKiBmYWxsdGhyb3VnaCBjb25kaXRpb25zLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9udW1fcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIFN0YXJ0IHdpdGggYmFzZSBjYXNlICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDE7CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisJaWYgKGl4Z2JlX3NldF9kY2JfcXVldWVzKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKyNlbmRpZgorCWlmIChpeGdiZV9zZXRfcnNzX3F1ZXVlcyhhZGFwdGVyKSkKKwkJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9hY3F1aXJlX21zaXhfdmVjdG9ycyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTI0NjAsNzEgKzI3ODMsMTA0IEBACiAJCWl4Z2JlX3NldF9udW1fcXVldWVzKGFkYXB0ZXIpOwogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEOyAvKiBXb290ISAqLwotCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gdmVjdG9yczsKKwkJLyoKKwkJICogQWRqdXN0IGZvciBvbmx5IHRoZSB2ZWN0b3JzIHdlJ2xsIHVzZSwgd2hpY2ggaXMgbWluaW11bQorCQkgKiBvZiBtYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTLCBvciB0aGUgbnVtYmVyIG9mCisJCSAqIHZlY3RvcnMgd2Ugd2VyZSBhbGxvY2F0ZWQuCisJCSAqLworCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gbWluKHZlY3RvcnMsCisJCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTKTsKIAl9CiB9CiAKIC8qKgorICogaXhnYmVfY2FjaGVfcmluZ19yc3MgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgUlNTCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIENhY2hlIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2Zmc2V0cyBmb3IgUlNTIHRvIHRoZSBhc3NpZ25lZCByaW5ncy4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19yc3Moc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisvKioKKyAqIGl4Z2JlX2NhY2hlX3JpbmdfZGNiIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIERDQgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBDYWNoZSB0aGUgZGVzY3JpcHRvciByaW5nIG9mZnNldHMgZm9yIERDQiB0byB0aGUgYXNzaWduZWQgcmluZ3MuCisgKgorICoqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3JpbmdfZGNiKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCWJvb2wgcmV0ID0gZmFsc2U7CisJaW50IGRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAzOworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMjsKKwkJCX0KKwkJCXJldCA9IHRydWU7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgNDsKKwkJCX0KKwkJCXJldCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyoqCiAgKiBpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyIC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCiAgKgogICogT25jZSB3ZSBrbm93IHRoZSBmZWF0dXJlLXNldCBlbmFibGVkIGZvciB0aGUgZGV2aWNlLCB3ZSdsbCBjYWNoZQogICogdGhlIHJlZ2lzdGVyIG9mZnNldCB0aGUgZGVzY3JpcHRvciByaW5nIGlzIGFzc2lnbmVkIHRvLgorICoKKyAqIE5vdGUsIHRoZSBvcmRlciB0aGUgdmFyaW91cyBmZWF0dXJlIGNhbGxzIGlzIGltcG9ydGFudC4gIEl0IG11c3Qgc3RhcnQgd2l0aAorICogdGhlICJtb3N0IiBmZWF0dXJlcyBlbmFibGVkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZW4gdHJpY2tsZSBkb3duIHRvIHRoZQorICogbGVhc3QgYW1vdW50IG9mIGZlYXR1cmVzIHR1cm5lZCBvbiBhdCBvbmNlLgogICoqLwogc3RhdGljIHZvaWQgaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgZmVhdHVyZV9tYXNrID0gMCwgcnNzX2k7Ci0JaW50IGksIHR4cl9pZHgsIHJ4cl9pZHg7Ci0JaW50IGRjYl9pOworCS8qIHN0YXJ0IHdpdGggZGVmYXVsdCBjYXNlICovCisJYWRhcHRlci0+cnhfcmluZ1swXS5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT50eF9yaW5nWzBdLnJlZ19pZHggPSAwOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKLQkJZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKLQkJcnNzX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlczsKLQkJdHhyX2lkeCA9IDA7Ci0JCXJ4cl9pZHggPSAwOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKLQkJZmVhdHVyZV9tYXNrIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7Ci0JCXN3aXRjaCAoYWRhcHRlci0+ZmxhZ3MgJiBmZWF0dXJlX21hc2spIHsKLQkJY2FzZSAoSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQlpbnQgajsKLQkJCQkvKiBSeCBmaXJzdCAqLwotCQkJCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBqKyspIHsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tyeHJfaWR4XS5yZWdfaWR4ID0KLQkJCQkJCWkgPDwgMyB8IGo7Ci0JCQkJCXJ4cl9pZHgrKzsKLQkJCQl9Ci0JCQkJLyogVHggbm93ICovCi0JCQkJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGorKykgewotCQkJCQlhZGFwdGVyLT50eF9yaW5nW3R4cl9pZHhdLnJlZ19pZHggPQotCQkJCQkJaSA8PCAyIHwgKGogPj4gMSk7Ci0JCQkJCWlmIChqICYgMSkKLQkJCQkJCXR4cl9pZHgrKzsKLQkJCQl9Ci0JCQl9Ci0JCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgotCQkJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBkY2JfaTsgaSsrKSB7Ci0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAzOwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMjsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKLQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKLQkJCWJyZWFrOwotCQljYXNlIDA6Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorCWlmIChpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKSkKKwkJcmV0dXJuOworCisjZW5kaWYKKwlpZiAoaXhnYmVfY2FjaGVfcmluZ19yc3MoYWRhcHRlcikpCisJCXJldHVybjsKIH0KIAogLyoqCkBAIC0yNTMyLDcgKzI4ODgsOCBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBXZSBhbGxvY2F0ZSBvbmUgcmluZyBwZXIgcXVldWUgYXQgcnVuLXRpbWUgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUKLSAqIG51bWJlciBvZiBxdWV1ZXMgYXQgY29tcGlsZS10aW1lLgorICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuICBUaGUgcG9sbGluZ19uZXRkZXYgYXJyYXkgaXMKKyAqIGludGVuZGVkIGZvciBNdWx0aXF1ZXVlLCBidXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGEgc2luZ2xlIHF1ZXVlLgogICoqLwogc3RhdGljIGludCBpeGdiZV9hbGxvY19xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0yNzExLDcgKzMwNjgsOCBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZV9hZGFwdGVyICopZGF0YTsKIAotCS8qIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCisJLyoKKwkgKiBEbyB0aGUgc2ZwX3RpbWVyIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZQogCSAqIGRlbGF5cyB0aGF0IHNmcCsgZGV0ZWN0aW9uIHJlcXVpcmVzCiAJICovCiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX3Rhc2spOwpAQCAtMjc4NSw2ICszMTQzLDEwIEBACiAJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmluZGljZXMgPSByc3M7CiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIAlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyA9IElYR0JFX01BWF9EQ0JfSU5ESUNFUzsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTg7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlhZGFwdGVyLT5tYXhfbXNpeF9xX3ZlY3RvcnMgPSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJLyogQ29uZmlndXJlIERDQiB0cmFmZmljIGNsYXNzZXMgKi8KQEAgLTI4MDUsMjEgKzMxNjcsMTQgQEAKIAkgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMpOwogCiAjZW5kaWYKLQlpZiAoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUgJiYKLQkgICAgKGh3LT5tYWMub3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikpCi0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRTsKIAogCS8qIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBpeGdiZV9mY19ub25lOwotCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfbm9uZTsKKwlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19ub25lOwogCWh3LT5mYy5oaWdoX3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUSDsKIAlody0+ZmMubG93X3dhdGVyID0gSVhHQkVfREVGQVVMVF9GQ1JUTDsKIAlody0+ZmMucGF1c2VfdGltZSA9IElYR0JFX0RFRkFVTFRfRkNQQVVTRTsKIAlody0+ZmMuc2VuZF94b24gPSB0cnVlOwogCi0JLyogc2VsZWN0IDEwRyBsaW5rIGJ5IGRlZmF1bHQgKi8KLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfMTBHX0xJTktfTk9fQU47Ci0KIAkvKiBlbmFibGUgaXRyIGJ5IGRlZmF1bHQgaW4gZHluYW1pYyBtb2RlICovCiAJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAxOwogCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAyMDAwMDsKQEAgLTI4NjYsOCArMzIyMSw3IEBACiAJbWVtc2V0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCS8qIHJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KLQl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpICsKLQkgICAgICAgICAgICAgICAgc2l6ZW9mKHUzMik7CisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKIAl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CiAKIAl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKQEAgLTI5MjYsMTIgKzMyODAsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgc2l6ZTsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKCFyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIsIDAsIHNpemUpOwotCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKSB7CkBAIC0yOTYwLDggKzMzMDgsNiBAQAogCXJldHVybiAwOwogCiBhbGxvY19mYWlsZWQ6Ci0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zMDI0LDcgKzMzNzAsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQorCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTMwMzksOSArMzM4Niw2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotCiAJaXhnYmVfY2xlYW5fcnhfcmluZyhhZGFwdGVyLCByeF9yaW5nKTsKIAogCXZmcmVlKHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKTsKQEAgLTMwNjMsNyArMzQwNyw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT5yeF9yaW5nW2ldLmRlc2MpCisJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzEyNiw2ICszNDcxLDggQEAKIAogCWl4Z2JlX2NvbmZpZ3VyZShhZGFwdGVyKTsKIAorCWl4Z2JlX25hcGlfYWRkX2FsbChhZGFwdGVyKTsKKwogCWVyciA9IGl4Z2JlX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcV9pcnE7CkBAIC0zMTgwLDYgKzM1MjcsNyBAQAogLyoqCiAgKiBpeGdiZV9uYXBpX2FkZF9hbGwgLSBwcmVwIG5hcGkgc3RydWN0cyBmb3IgdXNlCiAgKiBAYWRhcHRlcjogcHJpdmF0ZSBzdHJ1Y3QKKyAqCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gbmFwaV9hZGQgZWFjaCBwb3NzaWJsZSBxX3ZlY3Rvci0+bmFwaQogICovCiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTMyNTIsNyArMzYwMCw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOwogCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtMzI3MSw2ICszNjE4LDkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsLCBmY3RybDsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgcmV0dmFsID0gMDsKICNlbmRpZgpAQCAtMzI5MywxMCArMzY0MywzNSBAQAogCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0jZW5kaWYKIAotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKyNlbmRpZgorCWlmICh3dWZjKSB7CisJCWl4Z2JlX3NldF9yeF9tb2RlKG5ldGRldik7CisKKwkJLyogdHVybiBvbiBhbGwtbXVsdGkgbW9kZSBpZiB3YWtlIG9uIG11bHRpY2FzdCBpcyBlbmFibGVkICovCisJCWlmICh3dWZjICYgSVhHQkVfV1VGQ19NQykgeworCQkJZmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJZmN0cmwgfD0gSVhHQkVfRkNUUkxfTVBFOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOworCQl9CisKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJY3RybCB8PSBJWEdCRV9DVFJMX0dJT19ESVM7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTCwgY3RybCk7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9XVUZDLCB3dWZjKTsKKwl9IGVsc2UgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVQywgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfV1VGQywgMCk7CisJfQorCisJaWYgKHd1ZmMgJiYgaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJfSBlbHNlIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKwl9CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKQEAgLTMzMjIsNiArMzY5NywxMiBAQAogCXU2NCB0b3RhbF9tcGMgPSAwOwogCXUzMiBpLCBtaXNzZWRfcnggPSAwLCBtcGMsIGJwcmMsIGx4b24sIGx4b2ZmLCB4b25fb2ZmX3RvdDsKIAorCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlhZGFwdGVyLT5od19yeF9ub19kbWFfcmVzb3VyY2VzICs9CisJCQkgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCX0KKwogCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NSQ0VSUlMpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJLyogZm9yIHBhY2tldCBidWZmZXJzIG5vdCB1c2VkLCB0aGUgcmVnaXN0ZXIgc2hvdWxkIHJlYWQgMCAqLwpAQCAtMzMyOSwzMiArMzcxMCw1NSBAQAogCQltaXNzZWRfcnggKz0gbXBjOwogCQlhZGFwdGVyLT5zdGF0cy5tcGNbaV0gKz0gbXBjOwogCQl0b3RhbF9tcGMgKz0gYWRhcHRlci0+c3RhdHMubXBjW2ldOwotCQlhZGFwdGVyLT5zdGF0cy5ybmJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STkJDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJCWFkYXB0ZXItPnN0YXRzLnJuYmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JOQkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xcHRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKGkpKTsKIAkJYWRhcHRlci0+c3RhdHMucWJ0Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFwcmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xYnJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlJDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OUlhDKGkpKTsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05SWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWENOVChpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5xcHJkY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+c3RhdHMucHhvbnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPTlJYQyhpKSk7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQyhpKSk7CisJCX0KIAkJYWRhcHRlci0+c3RhdHMucHhvbnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OVFhDKGkpKTsKLQkJYWRhcHRlci0+c3RhdHMucHhvZmZyeGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZSWEMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5weG9mZnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlRYQyhpKSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGVFhDKGkpKTsKIAl9CiAJYWRhcHRlci0+c3RhdHMuZ3ByYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR1BSQyk7CiAJLyogd29yayBhcm91bmQgaGFyZHdhcmUgY291bnRpbmcgaXNzdWUgKi8KIAlhZGFwdGVyLT5zdGF0cy5ncHJjIC09IG1pc3NlZF9yeDsKIAogCS8qIDgyNTk4IGhhcmR3YXJlIG9ubHkgaGFzIGEgMzIgYml0IGNvdW50ZXIgaW4gdGhlIGhpZ2ggcmVnaXN0ZXIgKi8KLQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7Ci0JYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOwotCWFkYXB0ZXItPnN0YXRzLnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDTCk7CisJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7IC8qIHRvIGNsZWFyICovCisJCWFkYXB0ZXItPnN0YXRzLmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKTsgLyogdG8gY2xlYXIgKi8KKwkJYWRhcHRlci0+c3RhdHMudG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOyAvKiB0byBjbGVhciAqLworCQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDTlQpOworCQlhZGFwdGVyLT5zdGF0cy5seG9mZnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWENOVCk7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQyk7CisJCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsKKwkJYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOworCQlhZGFwdGVyLT5zdGF0cy50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOworCX0KIAlicHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0JQUkMpOwogCWFkYXB0ZXItPnN0YXRzLmJwcmMgKz0gYnByYzsKIAlhZGFwdGVyLT5zdGF0cy5tcHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFJDKTsKLQlhZGFwdGVyLT5zdGF0cy5tcHJjIC09IGJwcmM7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJYWRhcHRlci0+c3RhdHMubXByYyAtPSBicHJjOwogCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk9DKTsKIAlhZGFwdGVyLT5zdGF0cy5wcmM2NCArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDNjQpOwogCWFkYXB0ZXItPnN0YXRzLnByYzEyNyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTI3KTsKQEAgLTMzNjMsOCArMzc2Nyw2IEBACiAJYWRhcHRlci0+c3RhdHMucHJjMTAyMyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTAyMyk7CiAJYWRhcHRlci0+c3RhdHMucHJjMTUyMiArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFJDMTUyMik7CiAJYWRhcHRlci0+c3RhdHMucmxlYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkxFQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvbnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlJYQyk7Ci0JYWRhcHRlci0+c3RhdHMubHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKIAlseG9uID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05UWEMpOwogCWFkYXB0ZXItPnN0YXRzLmx4b250eGMgKz0gbHhvbjsKIAlseG9mZiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlRYQyk7CkBAIC0zNDE2LDE3ICszODE4LDU0IEBACiAJLyogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKIAkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcyAqLwogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCXU2NCBlaWNzID0gMDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspCisJCQllaWNzIHw9ICgxIDw8IGkpOworCiAJCS8qIENhdXNlIHNvZnR3YXJlIGludGVycnVwdCB0byBlbnN1cmUgcnggcmluZ3MgYXJlIGNsZWFuZWQgKi8KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKLQkJCXUzMiBlaWNzID0KLQkJCSAoMSA8PCAoYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlMpKSAtIDE7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsIGVpY3MpOwotCQl9IGVsc2UgewotCQkJLyogRm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueSBiaXRzIHRoYXQKLQkJCSAqIGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMgb3BlcmF0aW9uIHdvdWxkCi0JCQkgKiBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yIGFueSBiaXQgaW4gRUlBTSAqLwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOworCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCQljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsICh1MzIpZWljcyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogZm9yIGxlZ2FjeSBhbmQgTVNJIGludGVycnVwdHMgZG9uJ3Qgc2V0IGFueQorCQkJCSAqIGJpdHMgdGhhdCBhcmUgZW5hYmxlZCBmb3IgRUlBTSwgYmVjYXVzZSB0aGlzCisJCQkJICogb3BlcmF0aW9uIHdvdWxkIHNldCAqYm90aCogRUlNUyBhbmQgRUlDUyBmb3IKKwkJCQkgKiBhbnkgYml0IGluIEVJQU0KKwkJCQkgKi8KKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsCisJCQkJICAgICAoSVhHQkVfRUlDU19UQ1BfVElNRVIgfCBJWEdCRV9FSUNTX09USEVSKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCQkJLyoKKwkJCQkgKiBFSUNTKDAuLjE1KSBmaXJzdCAwLTE1IHEgdmVjdG9ycworCQkJCSAqIEVJQ1NbMV0gKDE2Li4zMSkgcSB2ZWN0b3JzIDE2LTMxCisJCQkJICogRUlDU1syXSAoMC4uMzEpIHEgdmVjdG9ycyAzMi02MworCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRikpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDU19FWCgxKSwKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyAmIDB4RkZGRjAwMDApKTsKKwkJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1NfRVgoMiksCisJCQkJICAgICAgICAgICAgICAgICh1MzIpKGVpY3MgPj4gMzIpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBmb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55CisJCQkJICogYml0cyB0aGF0IGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMKKwkJCQkgKiBvcGVyYXRpb24gd291bGQgc2V0ICpib3RoKiBFSU1TIGFuZCBFSUNTIGZvcgorCQkJCSAqIGFueSBiaXQgaW4gRUlBTQorCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJLyogUmVzZXQgdGhlIHRpbWVyICovCiAJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCkBAIC0zNDM3LDYgKzM4NzYsNTUgQEAKIH0KIAogLyoqCisgKiBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGNvbmZpZ3VyZSBtdWx0aXNwZWVkIGZpYmVyCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBhdXRvbmVnOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOworCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCisJCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKKwkJaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIGEgbmV3IFNGUCsgbW9kdWxlCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVycjsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOworCWVyciA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiUEhZIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBOSUMgJWRcbiIsIGVycik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCXJldHVybjsKKwl9CisJaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCWlmICghYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spCisJCS8qIFRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIERBIFR3aW5heCBjb25uZWN0aW9ucyAqLworCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSzsKK30KKworLyoqCiAgKiBpeGdiZV93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCiAgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCiAgKiovCkBAIC0zNDY2LDEwICszOTU0LDIwIEBACiAKIAlpZiAobGlua191cCkgewogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKLQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotI2RlZmluZSBGTE9XX1JYIChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpCi0jZGVmaW5lIEZMT1dfVFggKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKQorCQkJYm9vbCBmbG93X3J4LCBmbG93X3R4OworCisJCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQkJdTMyIG1mbGNuID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwkJCQl1MzIgZmNjZmcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNDRkcpOworCQkJCWZsb3dfcnggPSAobWZsY24gJiBJWEdCRV9NRkxDTl9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOworCQkJfSBlbHNlIHsKKwkJCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOworCQkJCWZsb3dfcnggPSAoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKKwkJCQlmbG93X3R4ID0gKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKwkJCX0KKwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYmU6ICVzIE5JQyBMaW5rIGlzIFVwICVzLCAiCiAJCQkgICAgICAgIkZsb3cgQ29udHJvbDogJXNcbiIsCiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lLApAQCAtMzQ3Nyw5ICszOTc1LDkgQEAKIAkJCSAgICAgICAgIjEwIEdicHMiIDoKIAkJCSAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/CiAJCQkgICAgICAgICAiMSBHYnBzIiA6ICJ1bmtub3duIHNwZWVkIikpLAotCQkJICAgICAgICgoRkxPV19SWCAmJiBGTE9XX1RYKSA/ICJSWC9UWCIgOgotCQkJICAgICAgICAoRkxPV19SWCA/ICJSWCIgOgotCQkJICAgICAgICAoRkxPV19UWCA/ICJUWCIgOiAiTm9uZSIpKSkpOworCQkJICAgICAgICgoZmxvd19yeCAmJiBmbG93X3R4KSA/ICJSWC9UWCIgOgorCQkJICAgICAgICAoZmxvd19yeCA/ICJSWCIgOgorCQkJICAgICAgICAoZmxvd190eCA/ICJUWCIgOiAiTm9uZSIpKSkpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCX0gZWxzZSB7CkBAIC0zNjE5LDEzICs0MTE3LDEzIEBACiAKIAkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQkJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKIAkJCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJCQl0eXBlX3R1Y21kX21saGwgfD0KIAkJCQkJICAgICAgICBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUDsKIAkJCQlicmVhazsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCiAJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQpAQCAtMzgyMyw2ICs0MzIxLDE2IEBACiAJcmV0dXJuIF9faXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOwogfQogCitzdGF0aWMgdTE2IGl4Z2JlX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCisJCXJldHVybiAwOyAgLyogQWxsIHRyYWZmaWMgc2hvdWxkIGRlZmF1bHQgdG8gY2xhc3MgMCAqLworCisJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKK30KKwogc3RhdGljIGludCBpeGdiZV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzk0OCwzMCArNDQ1NiwxMSBAQAogfQogI2VuZGlmCiAKLS8qKgotICogaXhnYmVfbGlua19jb25maWcgLSBzZXQgdXAgaW5pdGlhbCBsaW5rIHdpdGggZGVmYXVsdCBzcGVlZCBhbmQgZHVwbGV4Ci0gKiBAaHc6IHBvaW50ZXIgdG8gcHJpdmF0ZSBoYXJkd2FyZSBzdHJ1Y3QKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQotICoqLwotc3RhdGljIGludCBpeGdiZV9saW5rX2NvbmZpZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQotewotCXUzMiBhdXRvbmVnID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0KLQkvKiBtdXN0IGFsd2F5cyBhdXRvbmVnIGZvciBib3RoIDFHIGFuZCAxMEcgbGluayAqLwotCWh3LT5tYWMuYXV0b25lZyA9IHRydWU7Ci0KLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgJiYKLQkgICAgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikpCi0JCWF1dG9uZWcgPSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk4X0FVVE9ORUc7Ci0KLQlyZXR1cm4gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXhnYmVfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gCQk9IGl4Z2JlX29wZW4sCiAJLm5kb19zdG9wCQk9IGl4Z2JlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpeGdiZV94bWl0X2ZyYW1lLAorCS5uZG9fc2VsZWN0X3F1ZXVlCT0gaXhnYmVfc2VsZWN0X3F1ZXVlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IGl4Z2JlX2dldF9zdGF0cywKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IGl4Z2JlX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXhnYmVfc2V0X3J4X21vZGUsCkBAIC00MDA3LDcgKzQ0OTYsNyBAQAogCWNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppaSA9IGl4Z2JlX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKLQl1MTYgbGlua19zdGF0dXMsIGxpbmtfc3BlZWQsIGxpbmtfd2lkdGg7CisJdTE2IHBtX3ZhbHVlID0gMDsKIAl1MzIgcGFydF9udW0sIGVlYzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDEwNiw2ICs0NTk1LDEzIEBACiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF90YXNrLCBpeGdiZV9zZnBfdGFzayk7CiAKKwkvKiBtdWx0aXNwZWVkIGZpYmVyIGhhcyBpdHMgb3duIHRhc2tsZXQsIGNhbGxlZCBmcm9tIEdQSSBTRFAxIGNvbnRleHQgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzaywgaXhnYmVfbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKworCS8qIGEgbmV3IFNGUCsgbW9kdWxlIGFycml2YWwsIGNhbGxlZCBmcm9tIEdQSSBTRFAyIGNvbnRleHQgKi8KKwlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2ssCisJICAgICAgICAgIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCiAJZXJyID0gaWktPmdldF9pbnZhcmlhbnRzKGh3KTsKIAlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQpIHsKIAkJLyogc3RhcnQgYSBrZXJuZWwgdGhyZWFkIHRvIHdhdGNoIGZvciBhIG1vZHVsZSB0byBhcnJpdmUgKi8KQEAgLTQxNDIsNyArNDYzOCw3IEBACiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwpAQCAtNDE4NiwyNiArNDY4Miw0MSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKyNkZWZpbmUgSVhHQkVfUENJRV9QTUNTUiAweDQ0CisJCWFkYXB0ZXItPndvbCA9IElYR0JFX1dVRkNfTUFHOworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJWEdCRV9QQ0lFX1BNQ1NSLCAmcG1fdmFsdWUpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJRV9QTUNTUiwKKwkJICAgICAgICAgICAgICAgICAgICAgIChwbV92YWx1ZSB8ICgxIDw8IDgpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFkYXB0ZXItPndvbCA9IDA7CisJCWJyZWFrOworCX0KKwlkZXZpY2VfaW5pdF93YWtldXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgdHJ1ZSk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGFkYXB0ZXItPndvbCk7CisKIAkvKiBwcmludCBidXMgdHlwZS9zcGVlZC93aWR0aCBpbmZvICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSVhHQkVfUENJX0xJTktfU1RBVFVTLCAmbGlua19zdGF0dXMpOwotCWxpbmtfc3BlZWQgPSBsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1NQRUVEOwotCWxpbmtfd2lkdGggPSBsaW5rX3N0YXR1cyAmIElYR0JFX1BDSV9MSU5LX1dJRFRIOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIoUENJIEV4cHJlc3M6JXM6JXMpICVwTVxuIiwKLQkgICAgICAgICgobGlua19zcGVlZCA9PSBJWEdCRV9QQ0lfTElOS19TUEVFRF81MDAwKSA/ICI1LjBHYi9zIiA6Ci0JICAgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfUENJX0xJTktfU1BFRURfMjUwMCkgPyAiMi41R2IvcyIgOgotCSAgICAgICAgICJVbmtub3duIiksCi0JICAgICAgICAoKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfOCkgPyAiV2lkdGggeDgiIDoKLQkgICAgICAgICAobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF80KSA/ICJXaWR0aCB4NCIgOgotCSAgICAgICAgIChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzIpID8gIldpZHRoIHgyIiA6Ci0JICAgICAgICAgKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfMSkgPyAiV2lkdGggeDEiIDoKKwkgICAgICAgICgoaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfNTAwMCkgPyAiNS4wR2IvcyI6CisJICAgICAgICAgKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzI1MDApID8gIjIuNUdiL3MiOiJVbmtub3duIiksCisJICAgICAgICAoKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDgpID8gIldpZHRoIHg4IiA6CisJICAgICAgICAgKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQpID8gIldpZHRoIHg0IiA6CisJICAgICAgICAgKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDEpID8gIldpZHRoIHgxIiA6CiAJICAgICAgICAgIlVua25vd24iKSwKIAkgICAgICAgIG5ldGRldi0+ZGV2X2FkZHIpOwogCWl4Z2JlX3JlYWRfcGJhX251bV9nZW5lcmljKGh3LCAmcGFydF9udW0pOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKLQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwKLQkgICAgICAgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKKwlpZiAoaXhnYmVfaXNfc2ZwKGh3KSAmJiBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX25vdF9wcmVzZW50KQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgU0ZQKzogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAorCQkgICAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwgaHctPnBoeS5zZnBfdHlwZSwKKwkJICAgICAgICAgKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAweGZmKSk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDOiAlZCwgUEhZOiAlZCwgUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCisJCSAgICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLAorCQkgICAgICAgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKIAotCWlmIChsaW5rX3dpZHRoIDw9IElYR0JFX1BDSV9MSU5LX1dJRFRIXzQpIHsKKwlpZiAoaHctPmJ1cy53aWR0aCA8PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NCkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiUENJLUV4cHJlc3MgYmFuZHdpZHRoIGF2YWlsYWJsZSBmb3IgIgogCQkgICAgICAgICAidGhpcyBjYXJkIGlzIG5vdCBzdWZmaWNpZW50IGZvciBvcHRpbWFsICIKIAkJICAgICAgICAgInBlcmZvcm1hbmNlLlxuIik7CkBAIC00MjEzLDE2ICs0NzI0LDEyIEBACiAJCSAgICAgICAgICJQQ0ktRXhwcmVzcyBzbG90IGlzIHJlcXVpcmVkLlxuIik7CiAJfQogCisJLyogc2F2ZSBvZmYgRUVQUk9NIHZlcnNpb24gbnVtYmVyICovCisJaHctPmVlcHJvbS5vcHMucmVhZChodywgMHgyOSwgJmFkYXB0ZXItPmVlcHJvbV92ZXJzaW9uKTsKKwogCS8qIHJlc2V0IHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgKi8KIAlody0+bWFjLm9wcy5zdGFydF9odyhodyk7CiAKLQkvKiBsaW5rX2NvbmZpZyBkZXBlbmRzIG9uIHN0YXJ0X2h3IGJlaW5nIGNhbGxlZCBhdCBsZWFzdCBvbmNlICovCi0JZXJyID0gaXhnYmVfbGlua19jb25maWcoaHcpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAic2V0dXBfbGlua19zcGVlZCBGQUlMRUQgJWRcbiIsIGVycik7Ci0JCWdvdG8gZXJyX3JlZ2lzdGVyOwotCX0KLQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKIAlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKQEAgLTQyNTMsNiArNDc2MCw4IEBACiAJY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CiAJaW91bm1hcChody0+aHdfYWRkcik7CiBlcnJfaW9yZW1hcDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtNDI4OSw2ICs0Nzk4LDggQEAKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQpAQCAtNDM3Miw3ICs0ODgzLDcgQEAKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwotCisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1dVUywgfjApOwogCQlyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCmluZGV4IDVhODY2OWEuLjE0ZTk2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzIsNiArMzIsMTggQEAKICNpbmNsdWRlICJpeGdiZV9jb21tb24uaCIKICNpbmNsdWRlICJpeGdiZV9waHkuaCIKIAorc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0YXJ0KHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0b3Aoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICpkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9nZXRfaTJjX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sICpkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBkYXRhKTsKK3N0YXRpYyBzMzIgaXhnYmVfcmFpc2VfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCk7CitzdGF0aWMgdm9pZCBpeGdiZV9sb3dlcl9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0X2kyY19kYXRhKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsLCBib29sIGRhdGEpOworc3RhdGljIGJvb2wgaXhnYmVfZ2V0X2kyY19kYXRhKHUzMiAqaTJjY3RsKTsKK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19idXNfY2xlYXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzdGF0aWMgYm9vbCBpeGdiZV92YWxpZGF0ZV9waHlfYWRkcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcGh5X2FkZHIpOwogc3RhdGljIGVudW0gaXhnYmVfcGh5X3R5cGUgaXhnYmVfZ2V0X3BoeV90eXBlX2Zyb21faWQodTMyIHBoeV9pZCk7CiBzdGF0aWMgczMyIGl4Z2JlX2dldF9waHlfaWQoc3RydWN0IGl4Z2JlX2h3ICpodyk7CkBAIC01NDMsOCArNTU1LDkgQEAKIAl1OCBpZGVudGlmaWVyID0gMDsKIAl1OCBjb21wX2NvZGVzXzFnID0gMDsKIAl1OCBjb21wX2NvZGVzXzEwZyA9IDA7Ci0JdTggb3VpX2J5dGVzWzRdID0gezAsIDAsIDAsIDB9OworCXU4IG91aV9ieXRlc1szXSA9IHswLCAwLCAwfTsKIAl1OCB0cmFuc21pc3Npb25fbWVkaWEgPSAwOworCXUxNiBlbmZvcmNlX3NmcCA9IDA7CiAKIAlzdGF0dXMgPSBody0+cGh5Lm9wcy5yZWFkX2kyY19lZXByb20oaHcsIElYR0JFX1NGRl9JREVOVElGSUVSLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWRlbnRpZmllcik7CkBAIC01NjQsMTggKzU3Nyw0OCBAQAogCiAJCS8qIElEIE1vZHVsZQogCQkgKiA9PT09PT09PT0KLQkJICogMAlTRlBfREFfQ1UKLQkJICogMQlTRlBfU1IKLQkJICogMglTRlBfTFIKKwkJICogMCAgICBTRlBfREFfQ1UKKwkJICogMSAgICBTRlBfU1IKKwkJICogMiAgICBTRlBfTFIKKwkJICogMyAgICBTRlBfREFfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA0ICAgIFNGUF9EQV9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDUgICAgU0ZQX1NSL0xSX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKwkJICogNiAgICBTRlBfU1IvTFJfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYwogCQkgKi8KLQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfZGFfY3U7Ci0JCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3NyOwotCQllbHNlIGlmIChjb21wX2NvZGVzXzEwZyAmIElYR0JFX1NGRl8xMEdCQVNFTFJfQ0FQQUJMRSkKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9scjsKLQkJZWxzZQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3Vua25vd247CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJiBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9kYV9jdTsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9zcjsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9scjsKKwkJCWVsc2UKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bjsKKwkJfSBlbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJiBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQorCQkJCWlmIChody0+YnVzLmxhbl9pZCA9PSAwKQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUwOworCQkJCWVsc2UKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMTsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCWlmIChody0+YnVzLmxhbl9pZCA9PSAwKQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOworCQkJCWVsc2UKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMTsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCWlmIChody0+YnVzLmxhbl9pZCA9PSAwKQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwOworCQkJCWVsc2UKKwkJCQkJaHctPnBoeS5zZnBfdHlwZSA9CisJCQkJCSAgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMTsKKwkJCWVsc2UKKwkJCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bjsKKwkJfQogCiAJCS8qIERldGVybWluZSBQSFkgdmVuZG9yICovCiAJCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3Vua25vd24pIHsKQEAgLTYwNyw2ICs2NTAsOSBAQAogCQkJY2FzZSBJWEdCRV9TRkZfVkVORE9SX09VSV9BVkFHTzoKIAkJCQlody0+cGh5LnR5cGUgPSBpeGdiZV9waHlfc2ZwX2F2YWdvOwogCQkJCWJyZWFrOworCQkJY2FzZSBJWEdCRV9TRkZfVkVORE9SX09VSV9JTlRFTDoKKwkJCQlody0+cGh5LnR5cGUgPSBpeGdiZV9waHlfc2ZwX2ludGVsOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYKIAkJCQkgICAgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKQEAgLTYxNiw3ICs2NjIsMjggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlzdGF0dXMgPSAwOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCIHx8CisJCSAgICAoaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9zciAmJgorCQkgICAgIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfbHIgJiYKKwkJICAgICBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTAgJiYKKwkJICAgICBody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTEpKSB7CisJCQlzdGF0dXMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKworCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9QSFlfRU5GT1JDRV9JTlRFTF9TRlBfT0ZGU0VULAorCQkgICAgICAgICAgICAgICAgICAgICZlbmZvcmNlX3NmcCk7CisJCWlmICghKGVuZm9yY2Vfc2ZwICYgSVhHQkVfUEhZX0FMTE9XX0FOWV9TRlApKSB7CisJCQkvKiBNYWtlIHN1cmUgd2UncmUgYSBzdXBwb3J0ZWQgUEhZIHR5cGUgKi8KKwkJCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3NmcF9pbnRlbCkgeworCQkJCXN0YXR1cyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWh3X2RiZyhodywgIlNGUCsgbW9kdWxlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCXN0YXR1cyA9IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IDA7CisJCX0KIAl9CiAKIG91dDoKQEAgLTY1MSw3ICs3MTgsNyBAQAogCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIElYR0JFX1BIWV9JTklUX09GRlNFVF9OTCwgbGlzdF9vZmZzZXQpOwogCiAJaWYgKCghKmxpc3Rfb2Zmc2V0KSB8fCAoKmxpc3Rfb2Zmc2V0ID09IDB4RkZGRikpCi0JCXJldHVybiBJWEdCRV9FUlJfUEhZOworCQlyZXR1cm4gSVhHQkVfRVJSX1NGUF9OT19JTklUX1NFUV9QUkVTRU5UOwogCiAJLyogU2hpZnQgb2Zmc2V0IHRvIGZpcnN0IElEIHdvcmQgKi8KIAkoKmxpc3Rfb2Zmc2V0KSsrOwpAQCAtNjg4LDYgKzc1NSw1MDEgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfcmVhZF9pMmNfZWVwcm9tX2dlbmVyaWMgLSBSZWFkcyA4IGJpdCBFRVBST00gd29yZCBvdmVyIEkyQyBpbnRlcmZhY2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBFRVBST00gYnl0ZSBvZmZzZXQgdG8gcmVhZAorICogIEBlZXByb21fZGF0YTogdmFsdWUgcmVhZAorICoKKyAqICBQZXJmb3JtcyBieXRlIHJlYWQgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlLgorICoqLworczMyIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSkKK3sKKwlyZXR1cm4gaHctPnBoeS5vcHMucmVhZF9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfSTJDX0VFUFJPTV9ERVZfQUREUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21fZGF0YSk7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyAtIFdyaXRlcyA4IGJpdCBFRVBST00gd29yZCBvdmVyIEkyQyBpbnRlcmZhY2UKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBFRVBST00gYnl0ZSBvZmZzZXQgdG8gd3JpdGUKKyAqICBAZWVwcm9tX2RhdGE6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIGJ5dGUgd3JpdGUgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZWVwcm9tX2RhdGEpCit7CisJcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX2kyY19ieXRlKGh3LCBieXRlX29mZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfSTJDX0VFUFJPTV9ERVZfQUREUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tX2RhdGEpOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMgLSBSZWFkcyA4IGJpdCB3b3JkIG92ZXIgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBieXRlX29mZnNldDogYnl0ZSBvZmZzZXQgdG8gcmVhZAorICogIEBkYXRhOiB2YWx1ZSByZWFkCisgKgorICogIFBlcmZvcm1zIGJ5dGUgcmVhZCBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UgYXQKKyAqICBhIHNwZWNpZmllZCBkZWl2Y2UgYWRkcmVzcy4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRldl9hZGRyLCB1OCAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgbWF4X3JldHJ5ID0gMTsKKwl1MzIgcmV0cnkgPSAwOworCWJvb2wgbmFjayA9IDE7CisKKwlkbyB7CisJCWl4Z2JlX2kyY19zdGFydChodyk7CisKKwkJLyogRGV2aWNlIEFkZHJlc3MgYW5kIHdyaXRlIGluZGljYXRpb24gKi8KKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBkZXZfYWRkcik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWl4Z2JlX2kyY19zdGFydChodyk7CisKKwkJLyogRGV2aWNlIEFkZHJlc3MgYW5kIHJlYWQgaW5kaWNhdGlvbiAqLworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIChkZXZfYWRkciB8IDB4MSkpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUoaHcsIGRhdGEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoaHcsIG5hY2spOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJaXhnYmVfaTJjX3N0b3AoaHcpOworCQlicmVhazsKKworZmFpbDoKKwkJaXhnYmVfaTJjX2J1c19jbGVhcihodyk7CisJCXJldHJ5Kys7CisJCWlmIChyZXRyeSA8IG1heF9yZXRyeSkKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHJlYWQgZXJyb3IgLSBSZXRyeWluZy5cbiIpOworCQllbHNlCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSByZWFkIGVycm9yLlxuIik7CisKKwl9IHdoaWxlIChyZXRyeSA8IG1heF9yZXRyeSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljIC0gV3JpdGVzIDggYml0IHdvcmQgb3ZlciBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBieXRlIG9mZnNldCB0byB3cml0ZQorICogIEBkYXRhOiB2YWx1ZSB0byB3cml0ZQorICoKKyAqICBQZXJmb3JtcyBieXRlIHdyaXRlIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZSBhdAorICogIGEgc3BlY2lmaWVkIGRldmljZSBhZGRyZXNzLgorICoqLworczMyIGl4Z2JlX3dyaXRlX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgbWF4X3JldHJ5ID0gMTsKKwl1MzIgcmV0cnkgPSAwOworCisJZG8geworCQlpeGdiZV9pMmNfc3RhcnQoaHcpOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgZGV2X2FkZHIpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBieXRlX29mZnNldCk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGRhdGEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJaXhnYmVfaTJjX3N0b3AoaHcpOworCQlicmVhazsKKworZmFpbDoKKwkJaXhnYmVfaTJjX2J1c19jbGVhcihodyk7CisJCXJldHJ5Kys7CisJCWlmIChyZXRyeSA8IG1heF9yZXRyeSkKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHdyaXRlIGVycm9yIC0gUmV0cnlpbmcuXG4iKTsKKwkJZWxzZQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgd3JpdGUgZXJyb3IuXG4iKTsKKwl9IHdoaWxlIChyZXRyeSA8IG1heF9yZXRyeSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9pMmNfc3RhcnQgLSBTZXRzIEkyQyBzdGFydCBjb25kaXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgSTJDIHN0YXJ0IGNvbmRpdGlvbiAoSGlnaCAtPiBMb3cgb24gU0RBIHdoaWxlIFNDTCBpcyBIaWdoKQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfaTJjX3N0YXJ0KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJLyogU3RhcnQgY29uZGl0aW9uIG11c3QgYmVnaW4gd2l0aCBkYXRhIGFuZCBjbG9jayBoaWdoICovCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAxKTsKKwlpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIFNldHVwIHRpbWUgZm9yIHN0YXJ0IGNvbmRpdGlvbiAoNC43dXMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1NVX1NUQSk7CisKKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDApOworCisJLyogSG9sZCB0aW1lIGZvciBzdGFydCBjb25kaXRpb24gKDR1cykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfSERfU1RBKTsKKworCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCit9CisKKy8qKgorICogIGl4Z2JlX2kyY19zdG9wIC0gU2V0cyBJMkMgc3RvcCBjb25kaXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFNldHMgSTJDIHN0b3AgY29uZGl0aW9uIChMb3cgLT4gSGlnaCBvbiBTREEgd2hpbGUgU0NMIGlzIEhpZ2gpCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RvcChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCS8qIFN0b3AgY29uZGl0aW9uIG11c3QgYmVnaW4gd2l0aCBkYXRhIGxvdyBhbmQgY2xvY2sgaGlnaCAqLworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMCk7CisJaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBTZXR1cCB0aW1lIGZvciBzdG9wIGNvbmRpdGlvbiAoNHVzKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9TVV9TVE8pOworCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAxKTsKKworCS8qIGJ1cyBmcmVlIHRpbWUgYmV0d2VlbiBzdG9wIGFuZCBzdGFydCAoNC43dXMpKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfQlVGKTsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUgLSBDbG9ja3MgaW4gb25lIGJ5dGUgdmlhIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogZGF0YSBieXRlIHRvIGNsb2NrIGluCisgKgorICogIENsb2NrcyBpbiBvbmUgYnl0ZSBkYXRhIHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlzMzIgaTsKKwlib29sIGJpdCA9IDA7CisKKwlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19pbl9pMmNfYml0KGh3LCAmYml0KTsKKwkJKmRhdGEgfD0gYml0IDw8IGk7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlIC0gQ2xvY2tzIG91dCBvbmUgYnl0ZSB2aWEgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiBkYXRhIGJ5dGUgY2xvY2tlZCBvdXQKKyAqCisgKiAgQ2xvY2tzIG91dCBvbmUgYnl0ZSBkYXRhIHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlzMzIgaTsKKwl1MzIgaTJjY3RsOworCWJvb2wgYml0ID0gMDsKKworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCWJpdCA9IChkYXRhID4+IGkpICYgMHgxOworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChodywgYml0KTsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwl9CisKKwkvKiBSZWxlYXNlIFNEQSBsaW5lIChzZXQgaGlnaCkgKi8KKwlpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwlpMmNjdGwgfD0gSVhHQkVfSTJDX0RBVEFfT1VUOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCBpMmNjdGwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2kyY19hY2sgLSBQb2xscyBmb3IgSTJDIEFDSworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2xvY2tzIGluL291dCBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9nZXRfaTJjX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiBzdGF0dXM7CisJdTMyIGkgPSAwOworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwl1MzIgdGltZW91dCA9IDEwOworCWJvb2wgYWNrID0gMTsKKworCXN0YXR1cyA9IGl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIG91dDsKKworCS8qIE1pbmltdW0gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJLyogUG9sbCBmb3IgQUNLLiAgTm90ZSB0aGF0IEFDSyBpbiBJMkMgc3BlYyBpcworCSAqIHRyYW5zaXRpb24gZnJvbSAxIHRvIDAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCWkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCQlhY2sgPSBpeGdiZV9nZXRfaTJjX2RhdGEoJmkyY2N0bCk7CisKKwkJdWRlbGF5KDEpOworCQlpZiAoYWNrID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoYWNrID09IDEpIHsKKwkJaHdfZGJnKGh3LCAiSTJDIGFjayB3YXMgbm90IHJlY2VpdmVkLlxuIik7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JMkM7CisJfQorCisJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19pbl9pMmNfYml0IC0gQ2xvY2tzIGluIG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiByZWFkIGRhdGEgdmFsdWUKKyAqCisgKiAgQ2xvY2tzIGluIG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzOworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKworCXN0YXR1cyA9IGl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwlpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwkqZGF0YSA9IGl4Z2JlX2dldF9pMmNfZGF0YSgmaTJjY3RsKTsKKworCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQgLSBDbG9ja3MgaW4vb3V0IG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiBkYXRhIHZhbHVlIHRvIHdyaXRlCisgKgorICogIENsb2NrcyBvdXQgb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfb3V0X2kyY19iaXQoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJc3RhdHVzID0gaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCBkYXRhKTsKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJc3RhdHVzID0gaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluaW11bSBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMuCisJCSAqIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBkYXRhIGhvbGQgdGltZS4KKwkJICovCisJCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JMkM7CisJCWh3X2RiZyhodywgIkkyQyBkYXRhIHdhcyBub3Qgc2V0IHRvICVYXG4iLCBkYXRhKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorLyoqCisgKiAgaXhnYmVfcmFpc2VfaTJjX2NsayAtIFJhaXNlcyB0aGUgSTJDIFNDTCBjbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICoKKyAqICBSYWlzZXMgdGhlIEkyQyBjbG9jayBsaW5lICcwJy0+JzEnCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JhaXNlX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwkqaTJjY3RsIHw9IElYR0JFX0kyQ19DTEtfT1VUOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCisJLyogU0NMIHJpc2UgdGltZSAoMTAwMG5zKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9SSVNFKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2xvd2VyX2kyY19jbGsgLSBMb3dlcnMgdGhlIEkyQyBTQ0wgY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqCisgKiAgTG93ZXJzIHRoZSBJMkMgY2xvY2sgbGluZSAnMSctPicwJworICoqLworc3RhdGljIHZvaWQgaXhnYmVfbG93ZXJfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCkKK3sKKworCSppMmNjdGwgJj0gfklYR0JFX0kyQ19DTEtfT1VUOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCisJLyogU0NMIGZhbGwgdGltZSAoMzAwbnMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0ZBTEwpOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfaTJjX2RhdGEgLSBTZXRzIHRoZSBJMkMgZGF0YSBiaXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqICBAZGF0YTogSTJDIGRhdGEgdmFsdWUgKDAgb3IgMSkgdG8gc2V0CisgKgorICogIFNldHMgdGhlIEkyQyBkYXRhIGJpdAorICoqLworc3RhdGljIHMzMiBpeGdiZV9zZXRfaTJjX2RhdGEoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwsIGJvb2wgZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCWlmIChkYXRhKQorCQkqaTJjY3RsIHw9IElYR0JFX0kyQ19EQVRBX09VVDsKKwllbHNlCisJCSppMmNjdGwgJj0gfklYR0JFX0kyQ19EQVRBX09VVDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKworCS8qIERhdGEgcmlzZS9mYWxsICgxMDAwbnMvMzAwbnMpIGFuZCBzZXQtdXAgdGltZSAoMjUwbnMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1JJU0UgKyBJWEdCRV9JMkNfVF9GQUxMICsgSVhHQkVfSTJDX1RfU1VfREFUQSk7CisKKwkvKiBWZXJpZnkgZGF0YSB3YXMgc2V0IGNvcnJlY3RseSAqLworCSppMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwlpZiAoZGF0YSAhPSBpeGdiZV9nZXRfaTJjX2RhdGEoaTJjY3RsKSkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfSTJDOworCQlod19kYmcoaHcsICJFcnJvciAtIEkyQyBkYXRhIHdhcyBub3Qgc2V0IHRvICVYLlxuIiwgZGF0YSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2kyY19kYXRhIC0gUmVhZHMgdGhlIEkyQyBTREEgZGF0YSBiaXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGkyY2N0bDogQ3VycmVudCB2YWx1ZSBvZiBJMkNDVEwgcmVnaXN0ZXIKKyAqCisgKiAgUmV0dXJucyB0aGUgSTJDIGRhdGEgYml0IHZhbHVlCisgKiovCitzdGF0aWMgYm9vbCBpeGdiZV9nZXRfaTJjX2RhdGEodTMyICppMmNjdGwpCit7CisJYm9vbCBkYXRhOworCisJaWYgKCppMmNjdGwgJiBJWEdCRV9JMkNfREFUQV9JTikKKwkJZGF0YSA9IDE7CisJZWxzZQorCQlkYXRhID0gMDsKKworCXJldHVybiBkYXRhOworfQorCisvKioKKyAqICBpeGdiZV9pMmNfYnVzX2NsZWFyIC0gQ2xlYXJzIHRoZSBJMkMgYnVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbGVhcnMgdGhlIEkyQyBidXMgYnkgc2VuZGluZyBuaW5lIGNsb2NrIHB1bHNlcy4KKyAqICBVc2VkIHdoZW4gZGF0YSBsaW5lIGlzIHN0dWNrIGxvdy4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19idXNfY2xlYXIoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJdTMyIGk7CisKKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDEpOworCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW4gaGlnaCBwZXJpb2Qgb2YgY2xvY2sgaXMgNHVzICovCisJCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCQlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW4gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0Ljd1cyovCisJCXVkZWxheShJWEdCRV9JMkNfVF9MT1cpOworCX0KKworCS8qIFB1dCB0aGUgaTJjIGJ1cyBiYWNrIHRvIGRlZmF1bHQgc3RhdGUgKi8KKwlpeGdiZV9pMmNfc3RvcChodyk7Cit9CisKKy8qKgogICogIGl4Z2JlX2NoZWNrX3BoeV9saW5rX3RueCAtIERldGVybWluZSBsaW5rIGFuZCBzcGVlZCBzdGF0dXMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaAppbmRleCA0M2E5N2JjLi5jYzVmMWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTU0LDE0ICs1NCwxNSBAQAogI2RlZmluZSBJWEdCRV9JMkNfRUVQUk9NX1NUQVRVU19JTl9QUk9HUkVTUyAgMHgzCiAKIC8qIEJpdC1zaGlmdCBtYWNyb3MgKi8KLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTBfU0hJRlQgICAgMTIKLSNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTFfU0hJRlQgICAgOAotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMl9TSElGVCAgICA0CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUwX1NISUZUICAgIDI0CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUxX1NISUZUICAgIDE2CisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUyX1NISUZUICAgIDgKIAogLyogVmVuZG9yIE9VSXM6IGZvcm1hdCBvZiBPVUkgaXMgMHhbYnl0ZTBdW2J5dGUxXVtieXRlMl1bMDBdICovCiAjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX1RZQ08gICAgIDB4MDA0MDc2MDAKICNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfRlRMICAgICAgMHgwMDkwNjUwMAogI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9BVkFHTyAgICAweDAwMTc2QTAwCisjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0lOVEVMICAgIDB4MDAxQjIxMDAKIAogLyogSTJDIFNEQSBhbmQgU0NMIHRpbWluZyBwYXJhbWV0ZXJzIGZvciBzdGFuZGFyZCBtb2RlICovCiAjZGVmaW5lIElYR0JFX0kyQ19UX0hEX1NUQSAgNApAQCAtMTAxLDUgKzEwMiwxMiBAQAogczMyIGl4Z2JlX2dldF9zZnBfaW5pdF9zZXF1ZW5jZV9vZmZzZXRzKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpsaXN0X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGFfb2Zmc2V0KTsKLQorczMyIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4ICpkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4IGRhdGEpOworczMyIGl4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSk7CitzMzIgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBlZXByb21fZGF0YSk7CiAjZW5kaWYgLyogX0lYR0JFX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCmluZGV4IGYwMTFjNTcuLjJiMmVjYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIElYR0JFX0lOVEVMX1ZFTkRPUl9JRCAgIDB4ODA4NgogCiAvKiBEZXZpY2UgSURzICovCisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OCAgICAgICAgICAgICAgIDB4MTBCNgorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThfQlggICAgICAgICAgICAweDE1MDgKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUICAgMHgxMEM2CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUIDB4MTBDNwogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThFQl9TRlBfTE9NICAgICAweDEwREIKQEAgLTQzLDYgKzQ1LDkgQEAKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X0RBX0RVQUxfUE9SVCAgMHgxMEYxCiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9TUl9EVUFMX1BPUlRfRU0gICAgICAweDEwRTEKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4RUJfWEZfTFIgICAgICAgMHgxMEY0CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OSAgICAgICAgICAgICAgIDB4MTBEOAorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0ICAgICAgICAgICAweDEwRjcKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUCAgICAgICAgICAgMHgxMEZCCiAKIC8qIEdlbmVyYWwgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0NUUkwgICAgICAweDAwMDAwCkBAIC01MCw5ICs1NSwxMiBAQAogI2RlZmluZSBJWEdCRV9DVFJMX0VYVCAgMHgwMDAxOAogI2RlZmluZSBJWEdCRV9FU0RQICAgICAgMHgwMDAyMAogI2RlZmluZSBJWEdCRV9FT0RTRFAgICAgMHgwMDAyOAorI2RlZmluZSBJWEdCRV9JMkNDVEwgICAgMHgwMDAyOAogI2RlZmluZSBJWEdCRV9MRURDVEwgICAgMHgwMDIwMAogI2RlZmluZSBJWEdCRV9GUlRJTUVSICAgMHgwMDA0OAogI2RlZmluZSBJWEdCRV9UQ1BUSU1FUiAgMHgwMDA0QworI2RlZmluZSBJWEdCRV9DT1JFU1BBUkUgMHgwMDYwMAorI2RlZmluZSBJWEdCRV9FWFZFVCAgICAgMHgwNTA3OAogCiAvKiBOVk0gUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0VFQyAgICAgICAweDEwMDEwCkBAIC02Niw2ICs3NCwxOSBAQAogI2RlZmluZSBJWEdCRV9GTE9QICAgICAgMHgxMDEzQwogI2RlZmluZSBJWEdCRV9HUkMgICAgICAgMHgxMDIwMAogCisvKiBHZW5lcmFsIFJlY2VpdmUgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9HUkNfTU5HICAweDAwMDAwMDAxIC8qIE1hbmFnZWFiaWxpdHkgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX0dSQ19BUE1FIDB4MDAwMDAwMDIgLyogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9WUERESUFHMCAgMHgxMDIwNAorI2RlZmluZSBJWEdCRV9WUERESUFHMSAgMHgxMDIwOAorCisvKiBJMkNDVEwgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0kyQ19DTEtfSU4gICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9JMkNfQ0xLX09VVCAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfSTJDX0RBVEFfSU4gICAweDAwMDAwMDA0CisjZGVmaW5lIElYR0JFX0kyQ19EQVRBX09VVCAgMHgwMDAwMDAwOAorCiAvKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0VJQ1IgICAgICAweDAwODAwCiAjZGVmaW5lIElYR0JFX0VJQ1MgICAgICAweDAwODA4CkBAIC03MywyOCArOTQsNjMgQEAKICNkZWZpbmUgSVhHQkVfRUlNQyAgICAgIDB4MDA4ODgKICNkZWZpbmUgSVhHQkVfRUlBQyAgICAgIDB4MDA4MTAKICNkZWZpbmUgSVhHQkVfRUlBTSAgICAgIDB4MDA4OTAKLSNkZWZpbmUgSVhHQkVfRUlUUihfaSkgICgoKF9pKSA8PSAyMykgPyAoMHgwMDgyMCArICgoX2kpICogNCkpIDogKDB4MDEyMzAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX0VJQ1NfRVgoX2kpICAgKDB4MDBBOTAgKyAoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfRUlNU19FWChfaSkgICAoMHgwMEFBMCArIChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9FSU1DX0VYKF9pKSAgICgweDAwQUIwICsgKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX0VJQU1fRVgoX2kpICAgKDB4MDBBRDAgKyAoX2kpICogNCkKKy8qCisgKiA4MjU5OCBFSVRSIGlzIDE2IGJpdHMgYnV0IHNldCB0aGUgbGltaXRzIGJhc2VkIG9uIHRoZSBtYXgKKyAqIHN1cHBvcnRlZCBieSBhbGwgaXhnYmUgaGFyZHdhcmUuICA4MjU5OSBFSVRSIGlzIG9ubHkgMTIgYml0cywKKyAqIHdpdGggdGhlIGxvd2VyIDMgYWx3YXlzIHplcm8uCisgKi8KKyNkZWZpbmUgSVhHQkVfTUFYX0lOVF9SQVRFIDQ4ODI4MQorI2RlZmluZSBJWEdCRV9NSU5fSU5UX1JBVEUgOTU2CisjZGVmaW5lIElYR0JFX01BWF9FSVRSICAgICAweDAwMDAwRkY4CisjZGVmaW5lIElYR0JFX01JTl9FSVRSICAgICA4CisjZGVmaW5lIElYR0JFX0VJVFIoX2kpICAoKChfaSkgPD0gMjMpID8gKDB4MDA4MjAgKyAoKF9pKSAqIDQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTIzMDAgKyAoKChfaSkgLSAyNCkgKiA0KSkpCisjZGVmaW5lIElYR0JFX0VJVFJfSVRSX0lOVF9NQVNLIDB4MDAwMDBGRjgKKyNkZWZpbmUgSVhHQkVfRUlUUl9MTElfTU9EICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBJWEdCRV9FSVRSX0NOVF9XRElTICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0lWQVIoX2kpICAoMHgwMDkwMCArICgoX2kpICogNCkpIC8qIDI0IGF0IDB4OTAwLTB4OTYwICovCisjZGVmaW5lIElYR0JFX0lWQVJfTUlTQyAweDAwQTAwIC8qIG1pc2MgTVNJLVggaW50ZXJydXB0IGNhdXNlcyAqLworI2RlZmluZSBJWEdCRV9FSVRSU0VMICAgMHgwMDg5NAogI2RlZmluZSBJWEdCRV9NU0lYVCAgICAgMHgwMDAwMCAvKiBNU0ktWCBUYWJsZS4gMHgwMDAwIC0gMHgwMUMgKi8KICNkZWZpbmUgSVhHQkVfTVNJWFBCQSAgIDB4MDIwMDAgLyogTVNJLVggUGVuZGluZyBiaXQgYXJyYXkgKi8KICNkZWZpbmUgSVhHQkVfUEJBQ0woX2kpICgoKF9pKSA9PSAwKSA/ICgweDExMDY4KSA6ICgweDExMEMwICsgKChfaSkgKiA0KSkpCiAjZGVmaW5lIElYR0JFX0dQSUUgICAgICAweDAwODk4CiAKIC8qIEZsb3cgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfRkNBREJVTCAgIDB4MDMyMTAKKyNkZWZpbmUgSVhHQkVfRkNBREJVSCAgIDB4MDMyMTQKKyNkZWZpbmUgSVhHQkVfRkNBTUFDTCAgIDB4MDQzMjgKKyNkZWZpbmUgSVhHQkVfRkNBTUFDSCAgIDB4MDQzMkMKKyNkZWZpbmUgSVhHQkVfRkNSVEhfODI1OTkoX2kpICgweDAzMjYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9GQ1JUTF84MjU5OShfaSkgKDB4MDMyMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX1BGQ1RPUCAgICAweDAzMDA4CiAjZGVmaW5lIElYR0JFX0ZDVFRWKF9pKSAoMHgwMzIwMCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfRkNSVEwoX2kpICgweDAzMjIwICsgKChfaSkgKiA4KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9GQ1JUSChfaSkgKDB4MDMyNjAgKyAoKF9pKSAqIDgpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0ZDUlRWICAgICAweDAzMkEwCisjZGVmaW5lIElYR0JFX0ZDQ0ZHICAgICAweDAzRDAwCiAjZGVmaW5lIElYR0JFX1RGQ1MgICAgICAweDBDRTAwCiAKIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqLwotI2RlZmluZSBJWEdCRV9SREJBTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDAwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRCQUgoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAwNCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JETEVOKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwOCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMDggKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SREgoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTAgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDEwICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRUKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDE4ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDI4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRCQUwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDAwICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMDAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREJBSChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAwNCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JETEVOKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDA4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRIKF9pKSAgICgoKF9pKSA8IDY0KSA/ICgweDAxMDEwICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMTAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRFQoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMjggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SRERDQyAgICAgIDB4MDJGMjAKKyNkZWZpbmUgSVhHQkVfUlhNRU1XUkFQICAweDAzMTkwCisjZGVmaW5lIElYR0JFX1NUQVJDVFJMICAgMHgwMzAyNAogLyoKICAqIFNwbGl0IGFuZCBSZXBsaWNhdGlvbiBSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXJzCiAgKiAwMC0xNSA6IDB4MDIxMDAgKyBuKjQKQEAgLTEyNywxMCArMTgzLDE1IEBACiAjZGVmaW5lIElYR0JFX0RSRUNDQ1RMX0RJU0FCTEUgMAogLyogTXVsdGljYXN0IFRhYmxlIEFycmF5IC0gMTI4IGVudHJpZXMgKi8KICNkZWZpbmUgSVhHQkVfTVRBKF9pKSAgICgweDA1MjAwICsgKChfaSkgKiA0KSkKLSNkZWZpbmUgSVhHQkVfUkFMKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwMCArICgoX2kpICogOCkpIDogKDB4MEEyMDAgKyAoKF9pKSAqIDgpKSkKLSNkZWZpbmUgSVhHQkVfUkFIKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwNCArICgoX2kpICogOCkpIDogKDB4MEEyMDQgKyAoKF9pKSAqIDgpKSkKKyNkZWZpbmUgSVhHQkVfUkFMKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwMCArICgoX2kpICogOCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBMjAwICsgKChfaSkgKiA4KSkpCisjZGVmaW5lIElYR0JFX1JBSChfaSkgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0MDQgKyAoKF9pKSAqIDgpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQTIwNCArICgoX2kpICogOCkpKQorI2RlZmluZSBJWEdCRV9NUFNBUl9MTyhfaSkgKDB4MEE2MDAgKyAoKF9pKSAqIDgpKQorI2RlZmluZSBJWEdCRV9NUFNBUl9ISShfaSkgKDB4MEE2MDQgKyAoKF9pKSAqIDgpKQogLyogUGFja2V0IHNwbGl0IHJlY2VpdmUgdHlwZSAqLwotI2RlZmluZSBJWEdCRV9QU1JUWVBFKF9pKSAgICAoKChfaSkgPD0gMTUpID8gKDB4MDU0ODAgKyAoKF9pKSAqIDQpKSA6ICgweDBFQTAwICsgKChfaSkgKiA0KSkpCisjZGVmaW5lIElYR0JFX1BTUlRZUEUoX2kpICAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQ4MCArICgoX2kpICogNCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEVBMDAgKyAoKF9pKSAqIDQpKSkKIC8qIGFycmF5IG9mIDQwOTYgMS1iaXQgdmxhbiBmaWx0ZXJzICovCiAjZGVmaW5lIElYR0JFX1ZGVEEoX2kpICAoMHgwQTAwMCArICgoX2kpICogNCkpCiAvKmFycmF5IG9mIDQwOTYgNC1iaXQgdmxhbiB2bWRxIGluZGljZXMgKi8KQEAgLTEzOSw2ICsyMDAsMjggQEAKICNkZWZpbmUgSVhHQkVfVkxOQ1RSTCAgIDB4MDUwODgKICNkZWZpbmUgSVhHQkVfTUNTVENUUkwgIDB4MDUwOTAKICNkZWZpbmUgSVhHQkVfTVJRQyAgICAgIDB4MDU4MTgKKyNkZWZpbmUgSVhHQkVfU0FRRihfaSkgICgweDBFMDAwICsgKChfaSkgKiA0KSkgLyogU291cmNlIEFkZHJlc3MgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0RBUUYoX2kpICAoMHgwRTIwMCArICgoX2kpICogNCkpIC8qIERlc3QuIEFkZHJlc3MgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX1NEUFFGKF9pKSAoMHgwRTQwMCArICgoX2kpICogNCkpIC8qIFNyYyBEZXN0LiBBZGRyIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9GVFFGKF9pKSAgKDB4MEU2MDAgKyAoKF9pKSAqIDQpKSAvKiBGaXZlIFR1cGxlIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9FVFFGKF9pKSAgKDB4MDUxMjggKyAoKF9pKSAqIDQpKSAvKiBFVHlwZSBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfRVRRUyhfaSkgICgweDBFQzAwICsgKChfaSkgKiA0KSkgLyogRVR5cGUgUXVldWUgU2VsZWN0ICovCisjZGVmaW5lIElYR0JFX1NZTlFGICAgICAweDBFQzMwIC8qIFNZTiBQYWNrZXQgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX1JRVEMgICAgICAweDBFQzcwCisjZGVmaW5lIElYR0JFX01UUUMgICAgICAweDA4MTIwCisjZGVmaW5lIElYR0JFX1ZMVkYoX2kpICAoMHgwRjEwMCArICgoX2kpICogNCkpICAvKiA2NCBvZiB0aGVzZSAoMC02MykgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRkIoX2kpICgweDBGMjAwICsgKChfaSkgKiA0KSkgIC8qIDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTCAgICAweDA1MUIwCisjZGVmaW5lIElYR0JFX1ZGUkUoX2kpICAoMHgwNTFFMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZGVEUoX2kpICAoMHgwODExMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1FERSAgICAgICAweDJGMDQKKyNkZWZpbmUgSVhHQkVfVk1PTFIoX2kpICgweDBGMDAwICsgKChfaSkgKiA0KSkgLyogNjQgdG90YWwgKi8KKyNkZWZpbmUgSVhHQkVfVVRBKF9pKSAgICgweDBGNDAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SQ1RMKF9pKSAgICAgICAgKDB4MEY2MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJWTEFOKF9pKSAgICAgICAoMHgwRjYxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZNKF9pKSAgICAgICAgICgweDBGNjMwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfTDM0VF9JTUlSKF9pKSAgICAgICgweDBFODAwICsgKChfaSkgKiA0KSkgLyoxMjggb2YgdGhlc2UgKDAtMTI3KSovCisjZGVmaW5lIElYR0JFX0xMSVRIUkVTSCAweDBFQzkwCiAjZGVmaW5lIElYR0JFX0lNSVIoX2kpICAoMHgwNUE4MCArICgoX2kpICogNCkpICAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFQoX2kpICAgICAgICgweDA1QUEwICsgKChfaSkgKiA0KSkgIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfSU1JUlZQICAgIDB4MDVBQzAKQEAgLTE0Niw3ICsyMjksNiBAQAogI2RlZmluZSBJWEdCRV9SRVRBKF9pKSAgKDB4MDVDMDAgKyAoKF9pKSAqIDQpKSAgLyogMzIgb2YgdGhlc2UgKDAtMzEpICovCiAjZGVmaW5lIElYR0JFX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpICAvKiAxMCBvZiB0aGVzZSAoMC05KSAqLwogCi0KIC8qIFRyYW5zbWl0IERNQSByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfVERCQUwoX2kpICgweDA2MDAwICsgKChfaSkgKiAweDQwKSkgLyogMzIgb2YgdGhlc2UgKDAtMzEpKi8KICNkZWZpbmUgSVhHQkVfVERCQUgoX2kpICgweDA2MDA0ICsgKChfaSkgKiAweDQwKSkKQEAgLTE1OCw3ICsyNDAsMjAgQEAKICNkZWZpbmUgSVhHQkVfVERXQkFIKF9pKSAoMHgwNjAzQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX0RUWENUTCAgICAweDA3RTAwCiAKKyNkZWZpbmUgSVhHQkVfRE1BVFhDVEwgIDB4MDRBODAKKyNkZWZpbmUgSVhHQkVfRFRYTVhTWlJRICAgICAweDA4MTAwCisjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0wgICAgMHgwNEE4OAorI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdIICAgIDB4MDRBOEMKKyNkZWZpbmUgSVhHQkVfTEJEUlBFTiAgICAgICAweDBDQTAwCisjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0goX2kpICgweDA0OTUwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAwIC0gNyAqLworCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX1RFICAgICAgIDB4MSAvKiBUcmFuc21pdCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfTlMgICAgICAgMHgyIC8qIE5vIFNub29wIExTTyBoZHIgYnVmZmVyICovCisjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX0dEViAgICAgIDB4OCAvKiBHbG9iYWwgRG91YmxlIFZMQU4gKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfVlRfU0hJRlQgMTYgIC8qIFZMQU4gRXRoZXJUeXBlICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkwoX2kpICAgICgweDA3MjAwICsgKChfaSkgKiA0KSkgLyogMTYgb2YgdGhlc2UgKDAtMTUpICovCisvKiBUeCBEQ0EgQ29udHJvbCByZWdpc3RlciA6IDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfODI1OTkoX2kpICAoMHgwNjAwQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX1RJUEcgICAgICAweDBDQjAwCiAjZGVmaW5lIElYR0JFX1RYUEJTSVpFKF9pKSAgICAgICgweDBDQzAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9NTkdUWE1BUCAgMHgwQ0QxMApAQCAtMTc1LDkgKzI3MCw2OSBAQAogCiAjZGVmaW5lIElYR0JFX1dVUEwgICAgICAweDA1OTAwCiAjZGVmaW5lIElYR0JFX1dVUE0gICAgICAweDA1QTAwIC8qIHdha2UgdXAgcGt0IG1lbW9yeSAweDVBMDAtMHg1QTdDICovCi0jZGVmaW5lIElYR0JFX0ZIRlQgICAgICAweDA5MDAwIC8qIEZsZXggaG9zdCBmaWx0ZXIgdGFibGUgOTAwMC05M0ZDICovCisjZGVmaW5lIElYR0JFX0ZIRlQoX24pICAgICAoMHgwOTAwMCArIChfbiAqIDB4MTAwKSkgLyogRmxleCBob3N0IGZpbHRlciB0YWJsZSAqLworI2RlZmluZSBJWEdCRV9GSEZUX0VYVChfbikgKDB4MDk4MDAgKyAoX24gKiAweDEwMCkpIC8qIEV4dCBGbGV4aWJsZSBIb3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmlsdGVyIFRhYmxlICovCiAKLS8qIE11c2ljIHJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYICAgICAgICAgNAorI2RlZmluZSBJWEdCRV9FWFRfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCAgICAgMgorCisvKiBFYWNoIEZsZXhpYmxlIEZpbHRlciBpcyBhdCBtb3N0IDEyOCAoMHg4MCkgYnl0ZXMgaW4gbGVuZ3RoICovCisjZGVmaW5lIElYR0JFX0ZMRVhJQkxFX0ZJTFRFUl9TSVpFX01BWCAgMTI4CisjZGVmaW5lIElYR0JFX0ZIRlRfTEVOR1RIX09GRlNFVCAgICAgICAgMHhGQyAgLyogTGVuZ3RoIGJ5dGUgaW4gRkhGVCAqLworI2RlZmluZSBJWEdCRV9GSEZUX0xFTkdUSF9NQVNLICAgICAgICAgIDB4MEZGIC8qIExlbmd0aCBpbiBsb3dlciBieXRlICovCisKKy8qIERlZmluaXRpb25zIGZvciBwb3dlciBtYW5hZ2VtZW50IGFuZCB3YWtldXAgcmVnaXN0ZXJzICovCisvKiBXYWtlIFVwIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfV1VDX1BNRV9FTiAgICAgMHgwMDAwMDAwMiAvKiBQTUUgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVQ19QTUVfU1RBVFVTIDB4MDAwMDAwMDQgLyogUE1FIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9XVUNfQURWRDNXVUMgICAweDAwMDAwMDEwIC8qIEQzQ29sZCB3YWtlIHVwIGNhcC4gZW5hYmxlKi8KKworLyogV2FrZSBVcCBGaWx0ZXIgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9XVUZDX0xOS0MgMHgwMDAwMDAwMSAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01BRyAgMHgwMDAwMDAwMiAvKiBNYWdpYyBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0VYICAgMHgwMDAwMDAwNCAvKiBEaXJlY3RlZCBFeGFjdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTUMgICAweDAwMDAwMDA4IC8qIERpcmVjdGVkIE11bHRpY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfQkMgICAweDAwMDAwMDEwIC8qIEJyb2FkY2FzdCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfQVJQICAweDAwMDAwMDIwIC8qIEFSUCBSZXF1ZXN0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfSVBWNCAweDAwMDAwMDQwIC8qIERpcmVjdGVkIElQdjQgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19JUFY2IDB4MDAwMDAwODAgLyogRGlyZWN0ZWQgSVB2NiBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX01ORyAgMHgwMDAwMDEwMCAvKiBEaXJlY3RlZCBNZ210IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisKKyNkZWZpbmUgSVhHQkVfV1VGQ19JR05PUkVfVENPICAgMHgwMDAwODAwMCAvKiBJZ25vcmUgV2FrZU9uIFRDTyBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMCAweDAwMDEwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDEgMHgwMDAyMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgyIDB4MDAwNDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDIgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMyAweDAwMDgwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAzIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDQgMHgwMDEwMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgNCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFg1IDB4MDAyMDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDUgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYX0ZJTFRFUlMgICAgIDB4MDAwRjAwMDAgLyogTWFzayBmb3IgNCBmbGV4IGZpbHRlcnMgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19FWFRfRkxYX0ZJTFRFUlMgMHgwMDMwMDAwMCAvKiBNYXNrIGZvciBFeHQuIGZsZXggZmlsdGVycyAqLworI2RlZmluZSBJWEdCRV9XVUZDX0FMTF9GSUxURVJTICAgICAweDAwM0YwMEZGIC8qIE1hc2sgZm9yIGFsbCA2IHdha2V1cCBmaWx0ZXJzKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFhfT0ZGU0VUICAgICAgMTYgLyogT2Zmc2V0IHRvIHRoZSBGbGV4aWJsZSBGaWx0ZXJzIGJpdHMgKi8KKworLyogV2FrZSBVcCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfV1VTX0xOS0MgIElYR0JFX1dVRkNfTE5LQworI2RlZmluZSBJWEdCRV9XVVNfTUFHICAgSVhHQkVfV1VGQ19NQUcKKyNkZWZpbmUgSVhHQkVfV1VTX0VYICAgIElYR0JFX1dVRkNfRVgKKyNkZWZpbmUgSVhHQkVfV1VTX01DICAgIElYR0JFX1dVRkNfTUMKKyNkZWZpbmUgSVhHQkVfV1VTX0JDICAgIElYR0JFX1dVRkNfQkMKKyNkZWZpbmUgSVhHQkVfV1VTX0FSUCAgIElYR0JFX1dVRkNfQVJQCisjZGVmaW5lIElYR0JFX1dVU19JUFY0ICBJWEdCRV9XVUZDX0lQVjQKKyNkZWZpbmUgSVhHQkVfV1VTX0lQVjYgIElYR0JFX1dVRkNfSVBWNgorI2RlZmluZSBJWEdCRV9XVVNfTU5HICAgSVhHQkVfV1VGQ19NTkcKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDAgIElYR0JFX1dVRkNfRkxYMAorI2RlZmluZSBJWEdCRV9XVVNfRkxYMSAgSVhHQkVfV1VGQ19GTFgxCisjZGVmaW5lIElYR0JFX1dVU19GTFgyICBJWEdCRV9XVUZDX0ZMWDIKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDMgIElYR0JFX1dVRkNfRkxYMworI2RlZmluZSBJWEdCRV9XVVNfRkxYNCAgSVhHQkVfV1VGQ19GTFg0CisjZGVmaW5lIElYR0JFX1dVU19GTFg1ICBJWEdCRV9XVUZDX0ZMWDUKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWF9GSUxURVJTICBJWEdCRV9XVUZDX0ZMWF9GSUxURVJTCisKKy8qIFdha2UgVXAgUGFja2V0IExlbmd0aCAqLworI2RlZmluZSBJWEdCRV9XVVBMX0xFTkdUSF9NQVNLIDB4RkZGRgorCisvKiBEQ0IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JNQ1MgICAgICAweDAzRDAwCiAjZGVmaW5lIElYR0JFX0RQTUNTICAgICAweDA3RjQwCiAjZGVmaW5lIElYR0JFX1BEUE1DUyAgICAweDBDRDAwCkBAIC0xOTAsNiArMzQ1LDEyMiBAQAogI2RlZmluZSBJWEdCRV9URFBUMlRDU1IoX2kpICAgICAoMHgwQ0Q0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KIAogCisvKiBTZWN1cml0eSBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9TRUNUWENUUkwgICAgICAgICAweDA4ODAwCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVCAgICAgICAgIDB4MDg4MDQKKyNkZWZpbmUgSVhHQkVfU0VDVFhCVUZGQUYgICAgICAgMHgwODgwOAorI2RlZmluZSBJWEdCRV9TRUNUWE1JTklGRyAgICAgICAweDA4ODEwCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVCAgICAgICAgIDB4MDg4MDQKKyNkZWZpbmUgSVhHQkVfU0VDUlhDVFJMICAgICAgICAgMHgwOEQwMAorI2RlZmluZSBJWEdCRV9TRUNSWFNUQVQgICAgICAgICAweDA4RDA0CisKKy8qIFNlY3VyaXR5IEJpdCBGaWVsZHMgYW5kIE1hc2tzICovCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9TRUNUWF9ESVMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfVFhfRElTICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkQgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUX1NFQ1RYX1JEWSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1RYU1RBVF9FQ0NfVFhFUlIgICAgICAgMHgwMDAwMDAwMgorCisjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTF9TRUNSWF9ESVMgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNSWENUUkxfUlhfRElTICAgICAgICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSBJWEdCRV9TRUNSWFNUQVRfU0VDUlhfUkRZICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDUlhTVEFUX0VDQ19SWEVSUiAgICAgICAweDAwMDAwMDAyCisKKy8qIExpbmtTZWMgKE1hY1NlYykgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUCAgICAgICAgIDB4MDhBMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQICAgICAgICAgMHgwOEYwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMICAgICAgICAweDA4QTA0CisjZGVmaW5lIElYR0JFX0xTRUNUWFNDTCAgICAgICAgIDB4MDhBMDggLyogU0NJIExvdyAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhTQ0ggICAgICAgICAweDA4QTBDIC8qIFNDSSBIaWdoICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFNBICAgICAgICAgIDB4MDhBMTAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUE4wICAgICAgICAgMHgwOEExNAorI2RlZmluZSBJWEdCRV9MU0VDVFhQTjEgICAgICAgICAweDA4QTE4CisjZGVmaW5lIElYR0JFX0xTRUNUWEtFWTAoX24pICAgICgweDA4QTFDICsgKDQgKiAoX24pKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhLRVkxKF9uKSAgICAoMHgwOEEyQyArICg0ICogKF9uKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTCAgICAgICAgMHgwOEYwNAorI2RlZmluZSBJWEdCRV9MU0VDUlhTQ0wgICAgICAgICAweDA4RjA4CisjZGVmaW5lIElYR0JFX0xTRUNSWFNDSCAgICAgICAgIDB4MDhGMEMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYU0EoX2kpICAgICAgKDB4MDhGMTAgKyAoNCAqIChfaSkpKSAvKiAyIG9mIHRoZXNlICgwLTEpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFBOKF9pKSAgICAgICgweDA4RjE4ICsgKDQgKiAoX2kpKSkgLyogMiBvZiB0aGVzZSAoMC0xKSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhLRVkoX24sIF9tKSAoMHgwOEYyMCArICgoMHgxMCAqIChfbikpICsgKDQgKiAoX20pKSkpCisjZGVmaW5lIElYR0JFX0xTRUNUWFVUICAgICAgICAgIDB4MDhBM0MgLyogT3V0UGt0c1VudGFnZ2VkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFBLVEUgICAgICAgIDB4MDhBNDAgLyogT3V0UGt0c0VuY3J5cHRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhQS1RQICAgICAgICAweDA4QTQ0IC8qIE91dFBrdHNQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYT0NURSAgICAgICAgMHgwOEE0OCAvKiBPdXRPY3RldHNFbmNyeXB0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYT0NUUCAgICAgICAgMHgwOEE0QyAvKiBPdXRPY3RldHNQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVVQgICAgICAgICAgMHgwOEY0MCAvKiBJblBrdHNVbnRhZ2dlZC9JblBrdHNOb1RhZyAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPQ1REICAgICAgICAweDA4RjQ0IC8qIEluT2N0ZXRzRGVjcnlwdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9DVFYgICAgICAgIDB4MDhGNDggLyogSW5PY3RldHNWYWxpZGF0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQkFEICAgICAgICAgMHgwOEY0QyAvKiBJblBrdHNCYWRUYWcgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTk9TQ0kgICAgICAgMHgwOEY1MCAvKiBJblBrdHNOb1NjaSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVTlNDSSAgICAgICAweDA4RjU0IC8qIEluUGt0c1Vua25vd25TY2kgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVU5DSCAgICAgICAgMHgwOEY1OCAvKiBJblBrdHNVbmNoZWNrZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYREVMQVkgICAgICAgMHgwOEY1QyAvKiBJblBrdHNEZWxheWVkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWExBVEUgICAgICAgIDB4MDhGNjAgLyogSW5Qa3RzTGF0ZSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhPSyhfbikgICAgICAoMHgwOEY2NCArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c09rICovCisjZGVmaW5lIElYR0JFX0xTRUNSWElOVihfbikgICAgICgweDA4RjZDICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzSW52YWxpZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOVihfbikgICAgICAoMHgwOEY3NCArICgweDA0ICogKF9uKSkpIC8qIEluUGt0c05vdFZhbGlkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVOU0EgICAgICAgIDB4MDhGN0MgLyogSW5Qa3RzVW51c2VkU2EgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTlVTQSAgICAgICAgMHgwOEY4MCAvKiBJblBrdHNOb3RVc2luZ1NhICovCisKKy8qIExpbmtTZWMgKE1hY1NlYykgQml0IEZpZWxkcyBhbmQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQX1NVTV9NQVNLICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENBUF9TVU1fU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQX1NVTV9NQVNLICAgICAgICAweDAwRkYwMDAwCisjZGVmaW5lIElYR0JFX0xTRUNSWENBUF9TVU1fU0hJRlQgICAgICAgMTYKKworI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0VOX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9ESVNBQkxFICAgICAgICAweDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BVVRIICAgICAgICAgICAweDEKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BVVRIX0VOQ1JZUFQgICAweDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9BSVNDSSAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfUE5USFJTSF9NQVNLICAgMHhGRkZGRkYwMAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX1JTVl9NQVNLICAgICAgIDB4MDAwMDAwRDgKKworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0VOX01BU0sgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9FTl9TSElGVCAgICAgICAyCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRElTQUJMRSAgICAgICAgMHgwCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfQ0hFQ0sgICAgICAgICAgMHgxCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfU1RSSUNUICAgICAgICAgMHgyCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRFJPUCAgICAgICAgICAgMHgzCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfUExTSCAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1JQICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9SU1ZfTUFTSyAgICAgICAweEZGRkZGRjMzCisKKy8qIElwU2VjIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9JUFNUWElEWCAgICAgICAgICAweDA4OTAwCisjZGVmaW5lIElYR0JFX0lQU1RYU0FMVCAgICAgICAgIDB4MDg5MDQKKyNkZWZpbmUgSVhHQkVfSVBTVFhLRVkoX2kpICAgICAgKDB4MDg5MDggKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYSURYICAgICAgICAgIDB4MDhFMDAKKyNkZWZpbmUgSVhHQkVfSVBTUlhJUEFERFIoX2kpICAgKDB4MDhFMDQgKyAoNCAqIChfaSkpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0lQU1JYU1BJICAgICAgICAgIDB4MDhFMTQKKyNkZWZpbmUgSVhHQkVfSVBTUlhJUElEWCAgICAgICAgMHgwOEUxOAorI2RlZmluZSBJWEdCRV9JUFNSWEtFWShfaSkgICAgICAoMHgwOEUxQyArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhTQUxUICAgICAgICAgMHgwOEUyQworI2RlZmluZSBJWEdCRV9JUFNSWE1PRCAgICAgICAgICAweDA4RTMwCisKKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkRfRU5BQkxFICAgIDB4NAorCisvKiBEQ0IgcmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1JUUlBDUyAgICAgIDB4MDI0MzAKKyNkZWZpbmUgSVhHQkVfUlRURENTICAgICAgMHgwNDkwMAorI2RlZmluZSBJWEdCRV9SVFRQQ1MgICAgICAweDBDRDAwCisjZGVmaW5lIElYR0JFX1JUUlVQMlRDICAgIDB4MDMwMjAKKyNkZWZpbmUgSVhHQkVfUlRUVVAyVEMgICAgMHgwQzgwMAorI2RlZmluZSBJWEdCRV9SVFJQVDRDKF9pKSAoMHgwMjE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0UyhfaSkgKDB4MDIxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERUMkMoX2kpICgweDA0OTEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREVDJTKF9pKSAoMHgwNDkzMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUFQyQyhfaSkgKDB4MENEMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVFBUMlMoX2kpICgweDBDRDQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFREUVNFTCAgICAweDA0OTA0CisjZGVmaW5lIElYR0JFX1JUVERUMUMgICAgIDB4MDQ5MDgKKyNkZWZpbmUgSVhHQkVfUlRURFQxUyAgICAgMHgwNDkwQworI2RlZmluZSBJWEdCRV9SVFREVEVDQyAgICAweDA0OTkwCisjZGVmaW5lIElYR0JFX1JUVERURUNDX05PX0JDTiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUlRUQkNOUkMgICAgMHgwNDk4NAogCiAvKiBTdGF0cyByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfQ1JDRVJSUyAgIDB4MDQwMDAKQEAgLTIwNCw2ICs0NzUsMTEgQEAKICNkZWZpbmUgSVhHQkVfTFhPTlJYQyAgIDB4MENGNjAKICNkZWZpbmUgSVhHQkVfTFhPRkZUWEMgIDB4MDNGNjgKICNkZWZpbmUgSVhHQkVfTFhPRkZSWEMgIDB4MENGNjgKKyNkZWZpbmUgSVhHQkVfTFhPTlJYQ05UIDB4MDQxQTQKKyNkZWZpbmUgSVhHQkVfTFhPRkZSWENOVCAweDA0MUE4CisjZGVmaW5lIElYR0JFX1BYT05SWENOVChfaSkgICAgICgweDA0MTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9QWE9GRlJYQ05UKF9pKSAgICAoMHgwNDE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUFhPTjJPRkZDTlQoX2kpICAgKDB4MDMyNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1BYT05UWEMoX2kpICAgICAgICgweDAzRjAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAzRjAwLTNGMUMqLwogI2RlZmluZSBJWEdCRV9QWE9OUlhDKF9pKSAgICAgICAoMHgwQ0YwMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQ0YwMC1DRjFDKi8KICNkZWZpbmUgSVhHQkVfUFhPRkZUWEMoX2kpICAgICAgKDB4MDNGMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDNGMjAtM0YzQyovCkBAIC0yNDMsMTQgKzUxOSwyMCBAQAogI2RlZmluZSBJWEdCRV9NUFRDICAgICAgMHgwNDBGMAogI2RlZmluZSBJWEdCRV9CUFRDICAgICAgMHgwNDBGNAogI2RlZmluZSBJWEdCRV9YRUMgICAgICAgMHgwNDEyMAorI2RlZmluZSBJWEdCRV9TU1ZQQyAgICAgMHgwODc4MAogCi0jZGVmaW5lIElYR0JFX1JRU01SKF9pKSAoMHgwMjMwMCArICgoX2kpICogNCkpIC8qIDE2IG9mIHRoZXNlICovCi0jZGVmaW5lIElYR0JFX1RRU01SKF9pKSAoKChfaSkgPD0gNykgPyAoMHgwNzMwMCArICgoX2kpICogNCkpIDogKDB4MDg2MDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfUlFTTVIoX2kpICgweDAyMzAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVFFTTVIoX2kpICgoKF9pKSA8PSA3KSA/ICgweDA3MzAwICsgKChfaSkgKiA0KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDg2MDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfVFFTTShfaSkgICgweDA4NjAwICsgKChfaSkgKiA0KSkKIAogI2RlZmluZSBJWEdCRV9RUFJDKF9pKSAoMHgwMTAzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1FQVEMoX2kpICgweDA2MDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUUJSQyhfaSkgKDB4MDEwMzQgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9RQlRDKF9pKSAoMHgwNjAzNCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FQUkRDKF9pKSAoMHgwMTQzMCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FCVENfTChfaSkgKDB4MDg3MDAgKyAoKF9pKSAqIDB4OCkpIC8qIDE2IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1FCVENfSChfaSkgKDB4MDg3MDQgKyAoKF9pKSAqIDB4OCkpIC8qIDE2IG9mIHRoZXNlICovCiAKIC8qIE1hbmFnZW1lbnQgKi8KICNkZWZpbmUgSVhHQkVfTUFWVFYoX2kpICgweDA1MDEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwpAQCAtMjYzLDYgKzU0NSw5IEBACiAjZGVmaW5lIElYR0JFX01NQUwoX2kpICAoMHgwNTkxMCArICgoX2kpICogOCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfTU1BSChfaSkgICgweDA1OTE0ICsgKChfaSkgKiA4KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9GVEZUICAgICAgMHgwOTQwMCAvKiAweDk0MDAtMHg5N0ZDICovCisjZGVmaW5lIElYR0JFX01FVEYoX2kpICAoMHgwNTE5MCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfTURFRl9FWFQoX2kpICgweDA1MTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9MU1dGVyAgICAgMHgxNTAxNAogCiAvKiBBUkMgU3Vic3lzdGVtIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9ISUNSICAgICAgMHgxNUYwMApAQCAtMjk1LDE2ICs1ODAsNjUgQEAKICNkZWZpbmUgSVhHQkVfRENBX0lEICAgIDB4MTEwNzAKICNkZWZpbmUgSVhHQkVfRENBX0NUUkwgIDB4MTEwNzQKIAorLyogUENJZSByZWdpc3RlcnMgODI1OTktc3BlY2lmaWMgKi8KKyNkZWZpbmUgSVhHQkVfR0NSX0VYVCAgICAgICAgICAgMHgxMTA1MAorI2RlZmluZSBJWEdCRV9HU0NMXzVfODI1OTkgICAgICAweDExMDMwCisjZGVmaW5lIElYR0JFX0dTQ0xfNl84MjU5OSAgICAgIDB4MTEwMzQKKyNkZWZpbmUgSVhHQkVfR1NDTF83XzgyNTk5ICAgICAgMHgxMTAzOAorI2RlZmluZSBJWEdCRV9HU0NMXzhfODI1OTkgICAgICAweDExMDNDCisjZGVmaW5lIElYR0JFX1BIWUFEUl84MjU5OSAgICAgIDB4MTEwNDAKKyNkZWZpbmUgSVhHQkVfUEhZREFUXzgyNTk5ICAgICAgMHgxMTA0NAorI2RlZmluZSBJWEdCRV9QSFlDVExfODI1OTkgICAgICAweDExMDQ4CisjZGVmaW5lIElYR0JFX1BCQUNMUl84MjU5OSAgICAgIDB4MTEwNjgKKyNkZWZpbmUgSVhHQkVfQ0lBQV84MjU5OSAgICAgICAgMHgxMTA4OAorI2RlZmluZSBJWEdCRV9DSUFEXzgyNTk5ICAgICAgICAweDExMDhDCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18wXzgyNTk5IDB4MTEwOTAKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzFfODI1OTkgMHgxMTA5NAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMl84MjU5OSAweDExMDk4CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18zXzgyNTk5IDB4MTEwOUMKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzRfODI1OTkgMHgxMTBBMAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNV84MjU5OSAweDExMEE0CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR182XzgyNTk5IDB4MTEwQTgKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzdfODI1OTkgMHgxMTBDMAorI2RlZmluZSBJWEdCRV9JTlRSUFRfQ1NSXzgyNTk5ICAweDExMEIwCisjZGVmaW5lIElYR0JFX0lOVFJQVF9NQVNLXzgyNTk5IDB4MTEwQjgKKyNkZWZpbmUgSVhHQkVfQ0RRX01CUl84MjU5OSAgICAgMHgxMTBCNAorI2RlZmluZSBJWEdCRV9NSVNDX1JFR184MjU5OSAgICAweDExMEYwCisjZGVmaW5lIElYR0JFX0VDQ19DVFJMXzBfODI1OTkgIDB4MTExMDAKKyNkZWZpbmUgSVhHQkVfRUNDX0NUUkxfMV84MjU5OSAgMHgxMTEwNAorI2RlZmluZSBJWEdCRV9FQ0NfU1RBVFVTXzgyNTk5ICAweDExMEUwCisjZGVmaW5lIElYR0JFX0JBUl9DVFJMXzgyNTk5ICAgIDB4MTEwRjQKKworLyogVGltZSBTeW5jIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9UU1lOQ1JYQ1RMIDB4MDUxODggLyogUnggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9UU1lOQ1RYQ1RMIDB4MDhDMDAgLyogVHggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9SWFNUTVBMICAgIDB4MDUxRTggLyogUnggdGltZXN0YW1wIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU1RNUEggICAgMHgwNTFBNCAvKiBSeCB0aW1lc3RhbXAgSGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU0FUUkwgICAgMHgwNTFBMCAvKiBSeCB0aW1lc3RhbXAgYXR0cmlidXRlIGxvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYU0FUUkggICAgMHgwNTFBOCAvKiBSeCB0aW1lc3RhbXAgYXR0cmlidXRlIGhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9SWE1UUkwgICAgIDB4MDUxMjAgLyogUlggbWVzc2FnZSB0eXBlIHJlZ2lzdGVyIGxvdyAtIFJXICovCisjZGVmaW5lIElYR0JFX1RYU1RNUEwgICAgMHgwOEMwNCAvKiBUeCB0aW1lc3RhbXAgdmFsdWUgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfVFhTVE1QSCAgICAweDA4QzA4IC8qIFR4IHRpbWVzdGFtcCB2YWx1ZSBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfU1lTVElNTCAgICAweDA4QzBDIC8qIFN5c3RlbSB0aW1lIHJlZ2lzdGVyIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX1NZU1RJTUggICAgMHgwOEMxMCAvKiBTeXN0ZW0gdGltZSByZWdpc3RlciBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfVElNSU5DQSAgICAweDA4QzE0IC8qIEluY3JlbWVudCBhdHRyaWJ1dGVzIHJlZ2lzdGVyIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfUlhVRFAgICAgICAweDA4QzFDIC8qIFRpbWUgU3luYyBSeCBVRFAgUG9ydCAtIFJXICovCisKIC8qIERpYWdub3N0aWMgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JEU1RBVENUTCAgIDB4MDJDMjAKICNkZWZpbmUgSVhHQkVfUkRTVEFUKF9pKSAgKDB4MDJDMDAgKyAoKF9pKSAqIDQpKSAvKiAweDAyQzAwLTB4MDJDMUMgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOICAgICAgMHgwMkYwOAogI2RlZmluZSBJWEdCRV9SSUNfRFcoX2kpICAoMHgwMkYxMCArICgoX2kpICogNCkpCiAjZGVmaW5lIElYR0JFX1JEUFJPQkUgICAgIDB4MDJGMjAKKyNkZWZpbmUgSVhHQkVfUkRNQU0gICAgICAgMHgwMkYzMAorI2RlZmluZSBJWEdCRV9SRE1BRCAgICAgICAweDAyRjM0CiAjZGVmaW5lIElYR0JFX1REU1RBVENUTCAgIDB4MDdDMjAKICNkZWZpbmUgSVhHQkVfVERTVEFUKF9pKSAgKDB4MDdDMDAgKyAoKF9pKSAqIDQpKSAvKiAweDA3QzAwIC0gMHgwN0MxQyAqLwogI2RlZmluZSBJWEdCRV9UREhNUE4gICAgICAweDA3RjA4CisjZGVmaW5lIElYR0JFX1RESE1QTjIgICAgIDB4MDgyRkMKKyNkZWZpbmUgSVhHQkVfVFhERVNDSUMgICAgMHgwODJDQwogI2RlZmluZSBJWEdCRV9USUNfRFcoX2kpICAoMHgwN0YxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1RJQ19EVzIoX2kpICgweDA4MkIwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgSVhHQkVfVERQUk9CRSAgICAgMHgwN0YyMAogI2RlZmluZSBJWEdCRV9UWEJVRkNUUkwgICAweDBDNjAwCiAjZGVmaW5lIElYR0JFX1RYQlVGREFUQTAgIDB4MEM2MTAKQEAgLTMzMiw2ICs2NjYsOCBAQAogI2RlZmluZSBJWEdCRV9UWERBVEFSRFBUUihfaSkgICAoMHgwQzcyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzcyMC1DNzJDKi8KICNkZWZpbmUgSVhHQkVfVFhERVNDUkRQVFIoX2kpICAgKDB4MEM3MzAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEM3MzAtQzczQyovCiAjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwgMHgxMTA2QworI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMMCAweDExMTAwCisjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwxIDB4MTExMDQKICNkZWZpbmUgSVhHQkVfUEJUWEVDQyAgIDB4MEMzMDAKICNkZWZpbmUgSVhHQkVfUEJSWEVDQyAgIDB4MDMzMDAKICNkZWZpbmUgSVhHQkVfR0hFQ0NSICAgIDB4MTEwQjAKQEAgLTM1NywyNCArNjkzLDYxIEBACiAjZGVmaW5lIElYR0JFX01TUldEICAgICAweDA0MjYwCiAjZGVmaW5lIElYR0JFX01MQUREICAgICAweDA0MjY0CiAjZGVmaW5lIElYR0JFX01IQUREICAgICAweDA0MjY4CisjZGVmaW5lIElYR0JFX01BWEZSUyAgICAweDA0MjY4CiAjZGVmaW5lIElYR0JFX1RSRUcgICAgICAweDA0MjZDCiAjZGVmaW5lIElYR0JFX1BDU1MxICAgICAweDA0Mjg4CiAjZGVmaW5lIElYR0JFX1BDU1MyICAgICAweDA0MjhDCiAjZGVmaW5lIElYR0JFX1hQQ1NTICAgICAweDA0MjkwCisjZGVmaW5lIElYR0JFX01GTENOICAgICAweDA0Mjk0CiAjZGVmaW5lIElYR0JFX1NFUkRFU0MgICAweDA0Mjk4CiAjZGVmaW5lIElYR0JFX01BQ1MgICAgICAweDA0MjlDCiAjZGVmaW5lIElYR0JFX0FVVE9DICAgICAweDA0MkEwCiAjZGVmaW5lIElYR0JFX0xJTktTICAgICAweDA0MkE0CisjZGVmaW5lIElYR0JFX0xJTktTMiAgICAweDA0MzI0CiAjZGVmaW5lIElYR0JFX0FVVE9DMiAgICAweDA0MkE4CiAjZGVmaW5lIElYR0JFX0FVVE9DMyAgICAweDA0MkFDCiAjZGVmaW5lIElYR0JFX0FOTFAxICAgICAweDA0MkIwCiAjZGVmaW5lIElYR0JFX0FOTFAyICAgICAweDA0MkI0CiAjZGVmaW5lIElYR0JFX0FUTEFTQ1RMICAweDA0ODAwCisjZGVmaW5lIElYR0JFX01NTkdDICAgICAweDA0MkQwCisjZGVmaW5lIElYR0JFX0FOTFBOUDEgICAweDA0MkQ0CisjZGVmaW5lIElYR0JFX0FOTFBOUDIgICAweDA0MkQ4CisjZGVmaW5lIElYR0JFX0tSUENTRkMgICAweDA0MkUwCisjZGVmaW5lIElYR0JFX0tSUENTUyAgICAweDA0MkU0CisjZGVmaW5lIElYR0JFX0ZFQ1MxICAgICAweDA0MkU4CisjZGVmaW5lIElYR0JFX0ZFQ1MyICAgICAweDA0MkVDCisjZGVmaW5lIElYR0JFX1NNQURBUkNUTCAweDE0RjEwCisjZGVmaW5lIElYR0JFX01QVkMgICAgICAweDA0MzE4CisjZGVmaW5lIElYR0JFX1NHTUlJQyAgICAweDA0MzE0CisKKy8qIE9tZXIgQ09SRUNUTCAqLworI2RlZmluZSBJWEdCRV9DT1JFQ1RMICAgICAgICAgICAweDAxNEYwMAorLyogQkFSQ1RSTCAqLworI2RlZmluZSBJWEdCRV9CQVJDVFJMICAgICAgICAgICAweDExMEY0CisjZGVmaW5lIElYR0JFX0JBUkNUUkxfRkxTSVpFICAgIDB4MDcwMAorI2RlZmluZSBJWEdCRV9CQVJDVFJMX0NTUlNJWkUgICAweDIwMDAKIAogLyogUkRSWENUTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9SRE1UU18xXzIgICAgIDB4MDAwMDAwMDAgLyogUnggRGVzYyBNaW4gVGhyZXNob2xkIFNpemUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9DUkNTVFJJUCAgICAgIDB4MDAwMDAwMDIgLyogQ1JDIFN0cmlwICovCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfTVZNRU4gICAgICAgICAweDAwMDAwMDIwCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfRE1BSURPTkUgICAgICAweDAwMDAwMDA4IC8qIERNQSBpbml0IGN5Y2xlIGRvbmUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9BR0dESVMgICAgICAgIDB4MDAwMTAwMDAgLyogQWdncmVnYXRpb24gZGlzYWJsZSAqLworCisvKiBSUVRDIEJpdCBNYXNrcyBhbmQgU2hpZnRzICovCisjZGVmaW5lIElYR0JFX1JRVENfU0hJRlRfVEMoX2kpICAgICAoKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX1JRVENfVEMwX01BU0sgICAgICAgICAoMHg3IDw8IDApCisjZGVmaW5lIElYR0JFX1JRVENfVEMxX01BU0sgICAgICAgICAoMHg3IDw8IDQpCisjZGVmaW5lIElYR0JFX1JRVENfVEMyX01BU0sgICAgICAgICAoMHg3IDw8IDgpCisjZGVmaW5lIElYR0JFX1JRVENfVEMzX01BU0sgICAgICAgICAoMHg3IDw8IDEyKQorI2RlZmluZSBJWEdCRV9SUVRDX1RDNF9NQVNLICAgICAgICAgKDB4NyA8PCAxNikKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzVfTUFTSyAgICAgICAgICgweDcgPDwgMjApCisjZGVmaW5lIElYR0JFX1JRVENfVEM2X01BU0sgICAgICAgICAoMHg3IDw8IDI0KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDN19NQVNLICAgICAgICAgKDB4NyA8PCAyOCkKKworLyogUFNSVFlQRS5SUVBMIEJpdCBtYXNrcyBhbmQgc2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9SUVBMX01BU0sgICAgIDB4NworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1JRUExfU0hJRlQgICAgMjkKIAogLyogQ1RSTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9HSU9fRElTICAgICAgMHgwMDAwMDAwNCAvKiBHbG9iYWwgSU8gTWFzdGVyIERpc2FibGUgYml0ICovCkBAIC0zODksNiArNzYyLDcgQEAKICNkZWZpbmUgSVhHQkVfTUhBRERfTUZTX1NISUZUICAgMTYKIAogLyogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgKi8KKyNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfUEZSU1REICAgMHgwMDAwNDAwMCAvKiBQaHlzaWNhbCBGdW5jdGlvbiBSZXNldCBEb25lICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX05TX0RJUyAgIDB4MDAwMTAwMDAgLyogTm8gU25vb3AgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9ST19ESVMgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9EUlZfTE9BRCAweDEwMDAwMDAwIC8qIERyaXZlciBsb2FkZWQgYml0IGZvciBGVyAqLwpAQCAtNDAxLDYgKzc3NSw4IEBACiAjZGVmaW5lIElYR0JFX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAweDAyIC8qIERDQSBNb2RlIENCMiAqLwogCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTSyAweDAwMDAwMDFGIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5ICAweEZGMDAwMDAwIC8qIFJ4IENQVUlEIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9TSElGVF84MjU5OSAyNCAvKiBSeCBDUFVJRCBTaGlmdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOICgxIDw8IDUpIC8qIERDQSBSeCBEZXNjIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0hFQURfRENBX0VOICgxIDw8IDYpIC8qIERDQSBSeCBEZXNjIGhlYWRlciBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9EQVRBX0RDQV9FTiAoMSA8PCA3KSAvKiBEQ0EgUnggRGVzYyBwYXlsb2FkIGVuYWJsZSAqLwpAQCAtNDA5LDYgKzc4NSw4IEBACiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOICgxIDw8IDE1KSAvKiBEQ0EgUnggU3BsaXQgSGVhZGVyIFJPICovCiAKICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLIDB4MDAwMDAwMUYgLyogVHggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTkgIDB4RkYwMDAwMDAgLyogVHggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5IDI0IC8qIFR4IENQVUlEIFNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFR4IERlc2MgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU4gKDEgPDwgMTEpIC8qIFR4IERlc2Mgd3JpdGViYWNrIFJPIGJpdCAqLwogI2RlZmluZSBJWEdCRV9EQ0FfTUFYX1FVRVVFU184MjU5OCAgIDE2IC8qIERDQSByZWdzIG9ubHkgb24gMTYgcXVldWVzICovCkBAIC00NTIsNiArODMwLDggQEAKICNkZWZpbmUgSVhHQkVfQVRMQVNfUEROX1RYXzFHX1FMX0FMTCAgICAweEYwCiAjZGVmaW5lIElYR0JFX0FUTEFTX1BETl9UWF9BTl9RTF9BTEwgICAgMHhGMAogCisvKiBPbWVyIGJpdCBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9DT1JFQ1RMX1dSSVRFX0NNRCAgICAgICAgIDB4MDAwMTAwMDAKIAogLyogRGV2aWNlIFR5cGUgZGVmaW5pdGlvbnMgZm9yIG5ldyBwcm90b2NvbCBNRElPIGNvbW1hbmRzICovCiAjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9ERVZfVFlQRSAgICAgICAgICAgICAgIDB4MQpAQCAtNDc5LDggKzg1OSwxMSBAQAogI2RlZmluZSBJWEdCRV9NRElPX1BIWV9TUEVFRF9BQklMSVRZICAgMHg0IC8qIFNwZWVkIEFiaWxpdHkgUmVnICovCiAjZGVmaW5lIElYR0JFX01ESU9fUEhZX1NQRUVEXzEwRyAgICAgICAweDAwMDEgLyogMTBHIGNhcGFibGUgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QSFlfU1BFRURfMUcgICAgICAgIDB4MDAxMCAvKiAxRyBjYXBhYmxlICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZX0VYVF9BQklMSVRZICAgICAgICAweEIgLyogRXh0IEFiaWxpdHkgUmVnICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZXzEwR0JBU0VUX0FCSUxJVFkgICAweDAwMDQgLyogMTBHQmFzZVQgY2FwYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRElPX1BIWV8xMDAwQkFTRVRfQUJJTElUWSAgMHgwMDIwIC8qIDEwMDBCYXNlVCBjYXBhYmxlICovCiAKLSNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfQUREUiAgICAgMHhDMzBBIC8qIFBIWV9YUyBTREEvU0NMIEFkZHJlc3MgUmVnICovCisjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX0FERFIgICAgIDB4QzMwQSAvKiBQSFlfWFMgU0RBL1NDTCBBZGRyIFJlZyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9EQVRBICAgICAweEMzMEIgLyogUEhZX1hTIFNEQS9TQ0wgRGF0YSBSZWcgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfU1RBVCAgICAgMHhDMzBDIC8qIFBIWV9YUyBTREEvU0NMIFN0YXR1cyBSZWcgKi8KIApAQCAtNDk1LDcgKzg3OCw3IEBACiAjZGVmaW5lIElYR0JFX1BIWV9SRVZJU0lPTl9NQVNLICAgICAgICAweEZGRkZGRkYwCiAjZGVmaW5lIElYR0JFX01BWF9QSFlfQUREUiAgICAgICAgICAgICAzMgogCi0vKiBQSFkgSURzICovCisvKiBQSFkgSURzKi8KICNkZWZpbmUgVE4xMDEwX1BIWV9JRCAgICAweDAwQTE5NDEwCiAjZGVmaW5lIFROWF9GV19SRVYgICAgICAgMHhCCiAjZGVmaW5lIFFUMjAyMl9QSFlfSUQgICAgMHgwMDQzQTQwMApAQCAtNTE1LDE1ICs4OTgsMjIgQEAKICNkZWZpbmUgSVhHQkVfQ09OVFJPTF9OTCAgICAgICAgIDB4MDAwRgogI2RlZmluZSBJWEdCRV9DT05UUk9MX0VPTF9OTCAgICAgMHgwRkZGCiAjZGVmaW5lIElYR0JFX0NPTlRST0xfU09MX05MICAgICAweDAwMDAKKyNkZWZpbmUgSVhHQkVfUEhZX0VORk9SQ0VfSU5URUxfU0ZQX09GRlNFVCAweDAwMkMKKyNkZWZpbmUgSVhHQkVfUEhZX0FMTE9XX0FOWV9TRlAgICAgICAgICAgICAweDEKIAogLyogR2VuZXJhbCBwdXJwb3NlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfU0RQMF9HUElFTiAgICAgICAgIDB4MDAwMDAwMDEgLyogU0RQMCAqLwogI2RlZmluZSBJWEdCRV9TRFAxX0dQSUVOICAgICAgICAgMHgwMDAwMDAwMiAvKiBTRFAxICovCisjZGVmaW5lIElYR0JFX1NEUDJfR1BJRU4gICAgICAgICAweDAwMDAwMDA0IC8qIFNEUDIgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9NU0lYX01PREUgICAgIDB4MDAwMDAwMTAgLyogTVNJLVggbW9kZSAqLwogI2RlZmluZSBJWEdCRV9HUElFX09DRCAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBPdGhlciBDbGVhciBEaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfRUlNRU4gICAgICAgICAweDAwMDAwMDQwIC8qIEltbWVkaWF0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfRUlBTUUgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0dQSUVfUEJBX1NVUFBPUlQgICAweDgwMDAwMDAwCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFX01BU0sgICAweDAwMDBDMDAwIC8qIFZUIE1vZGUgTWFzayAqLworI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV8xNiAgICAgMHgwMDAwNDAwMCAvKiAxNiBWRnMgOCBxdWV1ZXMgcGVyIFZGICovCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzMyICAgICAweDAwMDA4MDAwIC8qIDMyIFZGcyA0IHF1ZXVlcyBwZXIgVkYgKi8KKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfNjQgICAgIDB4MDAwMEMwMDAgLyogNjQgVkZzIDIgcXVldWVzIHBlciBWRiAqLwogCiAvKiBUcmFuc21pdCBGbG93IENvbnRyb2wgc3RhdHVzICovCiAjZGVmaW5lIElYR0JFX1RGQ1NfVFhPRkYgICAgICAgICAweDAwMDAwMDAxCkBAIC01NjQsNiArOTU0LDIxIEBACiAjZGVmaW5lIElYR0JFX1ZNRF9DVExfVk1EUV9FTiAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBJWEdCRV9WTURfQ1RMX1ZNRFFfRklMVEVSIDB4MDAwMDAwMDIKIAorLyogVlRfQ1RMIGJpdG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9ESVNfREVGUEwgIDB4MjAwMDAwMDAgLyogZGlzYWJsZSBkZWZhdWx0IHBvb2wgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX1JFUExFTiAgICAgMHg0MDAwMDAwMCAvKiByZXBsaWNhdGlvbiBlbmFibGVkICovCisjZGVmaW5lIElYR0JFX1ZUX0NUTF9WVF9FTkFCTEUgIDB4MDAwMDAwMDEgIC8qIEVuYWJsZSBWVCBNb2RlICovCisKKy8qIFZNT0xSIGJpdG1hc2tzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX0FVUEUgICAgICAgIDB4MDEwMDAwMDAgLyogYWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfUk9NUEUgICAgICAgMHgwMjAwMDAwMCAvKiBhY2NlcHQgcGFja2V0cyBpbiBNVEEgdGJsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX1JPUEUgICAgICAgIDB4MDQwMDAwMDAgLyogYWNjZXB0IHBhY2tldHMgaW4gVUMgdGJsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX0JBTSAgICAgICAgIDB4MDgwMDAwMDAgLyogYWNjZXB0IGJyb2FkY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIElYR0JFX1ZNT0xSX01QRSAgICAgICAgIDB4MTAwMDAwMDAgLyogbXVsdGljYXN0IHByb21pc2N1b3VzICovCisKKy8qIFZGUkUgYml0bWFzayAqLworI2RlZmluZSBJWEdCRV9WRlJFX0VOQUJMRV9BTEwgICAweEZGRkZGRkZGCisKIC8qIFJESE1QTiBhbmQgVERITVBOIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDQUREUiAgICAgICAweDAwN0ZGODAwCiAjZGVmaW5lIElYR0JFX1JESE1QTl9SRElDUkRSRVEgICAgICAweDAwODAwMDAwCkBAIC01NzIsMTMgKzk3NywzOSBAQAogI2RlZmluZSBJWEdCRV9UREhNUE5fVERJQ1JEUkVRICAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBJWEdCRV9UREhNUE5fVERJQ0FERFJfU0hJRlQgMTEKIAorI2RlZmluZSBJWEdCRV9SRE1BTV9NRU1fU0VMX1NISUZUICAgMTMKKyNkZWZpbmUgSVhHQkVfUkRNQU1fRFdPUkRfU0hJRlQgICAgIDkKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01QX0ZJRk8gIDEKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREZDX0NNRF9GSUZPICAgIDIKKyNkZWZpbmUgSVhHQkVfUkRNQU1fVENOX1NUQVRVU19SQU0gIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPICAgIDUKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX0NOVF9SQU0gICAgIDYKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVCAgIDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTSAgIDB4QQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTV9GSUZPX1JBTkdFICAgICAxMzUKKyNkZWZpbmUgSVhHQkVfUkRNQU1fREVTQ19DT01fRklGT19DT1VOVCAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk9fUkFOR0UgICAgICA0OAorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk9fQ09VTlQgICAgICA3CisjZGVmaW5lIElYR0JFX1JETUFNX1RDTl9TVEFUVVNfUkFNX1JBTkdFICAgIDI1NgorI2RlZmluZSBJWEdCRV9SRE1BTV9UQ05fU1RBVFVTX1JBTV9DT1VOVCAgICA5CisjZGVmaW5lIElYR0JFX1JETUFNX1dCX0NPTExfRklGT19SQU5HRSAgICAgIDgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPX0NPVU5UICAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTV9SQU5HRSAgICAgICA2NAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTV9DT1VOVCAgICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlRfUkFOR0UgICAgIDMyCisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9DTlRfQ09VTlQgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTV9SQU5HRSAgICAgMTI4CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19RVUVVRV9SQU1fQ09VTlQgICAgIDgKKworI2RlZmluZSBJWEdCRV9UWERFU0NJQ19SRUFEWSAgICAgICAgMHg4MDAwMDAwMAorCiAvKiBSZWNlaXZlIENoZWNrc3VtIENvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfUlhDU1VNX0lQUENTRSAgICAgMHgwMDAwMTAwMCAgIC8qIElQIHBheWxvYWQgY2hlY2tzdW0gZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX1JYQ1NVTV9QQ1NEICAgICAgIDB4MDAwMDIwMDAgICAvKiBwYWNrZXQgY2hlY2tzdW0gZGlzYWJsZWQgKi8KIAogLyogRkNSVEwgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX0ZDUlRMX1hPTkUgICAgICAgIDB4ODAwMDAwMDAgIC8qIGJpdCAzMSwgWE9OIGVuYWJsZSAqLwotI2RlZmluZSBJWEdCRV9GQ1JUSF9GQ0VOICAgICAgICAweDgwMDAwMDAwICAvKiBSeCBGbG93IGNvbnRyb2wgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0ZDUlRMX1hPTkUgICAgICAgIDB4ODAwMDAwMDAgIC8qIFhPTiBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNSVEhfRkNFTiAgICAgICAgMHg4MDAwMDAwMCAgLyogUGFja2V0IGJ1ZmZlciBmYyBlbmFibGUgKi8KIAogLyogUEFQIGJpdCBtYXNrcyovCiAjZGVmaW5lIElYR0JFX1BBUF9UWFBBVVNFQ05UX01BU0sgICAweDAwMDBGRkZGIC8qIFBhdXNlIGNvdW50ZXIgbWFzayAqLwpAQCAtNTg4LDE5ICsxMDE5LDI5IEBACiAvKiBSZWNlaXZlIEFyYml0cmF0aW9uIENvbnRyb2w6IDAgUm91bmQgUm9iaW4sIDEgREZQICovCiAjZGVmaW5lIElYR0JFX1JNQ1NfUkFDICAgICAgICAgIDB4MDAwMDAwMDQKICNkZWZpbmUgSVhHQkVfUk1DU19ERlAgICAgICAgICAgSVhHQkVfUk1DU19SQUMgLyogRGVmaWNpdCBGaXhlZCBQcmlvcml0eSBlbmEgKi8KLSNkZWZpbmUgSVhHQkVfUk1DU19URkNFXzgwMl8zWCAgMHgwMDAwMDAwOCAvKiBUeCBQcmlvcml0eSBmbG93IGNvbnRyb2wgZW5hICovCi0jZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSAweDAwMDAwMDEwIC8qIFR4IFByaW9yaXR5IGZsb3cgY29udHJvbCBlbmEgKi8KKyNkZWZpbmUgSVhHQkVfUk1DU19URkNFXzgwMl8zWCAgICAgICAgIDB4MDAwMDAwMDggLyogVHggUHJpb3JpdHkgRkMgZW5hICovCisjZGVmaW5lIElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWSAgICAgICAweDAwMDAwMDEwIC8qIFR4IFByaW9yaXR5IEZDIGVuYSAqLwogI2RlZmluZSBJWEdCRV9STUNTX0FSQkRJUyAgICAgICAweDAwMDAwMDQwIC8qIEFyYml0cmF0aW9uIGRpc2FibGUgYml0ICovCiAKKy8qIEZDQ0ZHIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCAgICAgICAgIDB4MDAwMDAwMDggLyogVHggbGluayBGQyBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNDRkdfVEZDRV9QUklPUklUWSAgICAgICAweDAwMDAwMDEwIC8qIFR4IHByaW9yaXR5IEZDIGVuYWJsZSAqLwogCiAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgYml0bWFza3MgKi8KIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9SVFhfUVVFVUUgICAgMHgwMDAwRkZGRiAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1JfRkxPV19ESVIgICAgIDB4MDAwMTAwMDAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9SWF9NSVNTICAgICAgMHgwMDAyMDAwMCAvKiBQYWNrZXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9QQ0kgICAgICAgICAgMHgwMDA0MDAwMCAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1JfTUFJTEJPWCAgICAgIDB4MDAwODAwMDAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9MU0MgICAgICAgICAgMHgwMDEwMDAwMCAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9MSU5LU0VDICAgICAgMHgwMDIwMDAwMCAvKiBQTiBUaHJlc2hvbGQgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9NTkcgICAgICAgICAgMHgwMDQwMDAwMCAvKiBNYW5hZ2VhYmlsaXR5IEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0dQSV9TRFAwICAgICAweDAxMDAwMDAwIC8qIEdlbiBQdXJwb3NlIEludGVycnVwdCBvbiBTRFAwICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfR1BJX1NEUDEgICAgIDB4MDIwMDAwMDAgLyogR2VuIFB1cnBvc2UgSW50ZXJydXB0IG9uIFNEUDEgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9HUElfU0RQMiAgICAgMHgwNDAwMDAwMCAvKiBHZW4gUHVycG9zZSBJbnRlcnJ1cHQgb24gU0RQMiAqLworI2RlZmluZSBJWEdCRV9FSUNSX0VDQyAgICAgICAgICAweDEwMDAwMDAwIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1BCVVIgICAgICAgICAweDEwMDAwMDAwIC8qIFBhY2tldCBCdWZmZXIgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0RIRVIgICAgICAgICAweDIwMDAwMDAwIC8qIERlc2NyaXB0b3IgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1RDUF9USU1FUiAgICAweDQwMDAwMDAwIC8qIFRDUCBUaW1lciAqLwpAQCAtNjA4LDEwICsxMDQ5LDE2IEBACiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBTZXQgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0ZMT1dfRElSICAgICBJWEdCRV9FSUNSX0ZMT1dfRElSICAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNTX1JYX01JU1MgICAgICBJWEdCRV9FSUNSX1JYX01JU1MgICAvKiBQa3QgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19QQ0kgICAgICAgICAgSVhHQkVfRUlDUl9QQ0kgICAgICAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNTX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0xTQyAgICAgICAgICBJWEdCRV9FSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19NTkcgICAgICAgICAgSVhHQkVfRUlDUl9NTkcgICAgICAgLyogTU5HIEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAwICAgICBJWEdCRV9FSUNSX0dQSV9TRFAwICAvKiBTRFAwIEdlbiBQdXJwb3NlIEludCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAxICAgICBJWEdCRV9FSUNSX0dQSV9TRFAxICAvKiBTRFAxIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0dQSV9TRFAyICAgICBJWEdCRV9FSUNSX0dQSV9TRFAyICAvKiBTRFAyIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX0VDQyAgICAgICAgICBJWEdCRV9FSUNSX0VDQyAgICAgICAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19QQlVSICAgICAgICAgSVhHQkVfRUlDUl9QQlVSICAgICAgLyogUGt0IEJ1ZiBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX0RIRVIgICAgICAgICBJWEdCRV9FSUNSX0RIRVIgICAgICAvKiBEZXNjIEhhbmRsZXIgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlDU19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02MTksMTAgKzEwNjYsMTYgQEAKIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgU2V0ICovCiAjZGVmaW5lIElYR0JFX0VJTVNfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19GTE9XX0RJUiAgICAgSVhHQkVfRUlDUl9GTE9XX0RJUiAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19SWF9NSVNTICAgICAgSVhHQkVfRUlDUl9SWF9NSVNTICAgLyogUGFja2V0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJTVNfUENJICAgICAgICAgIElYR0JFX0VJQ1JfUENJICAgICAgIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19MU0MgICAgICAgICAgSVhHQkVfRUlDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIElYR0JFX0VJTVNfTU5HICAgICAgICAgIElYR0JFX0VJQ1JfTU5HICAgICAgIC8qIE1ORyBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMCAgICAgSVhHQkVfRUlDUl9HUElfU0RQMCAgLyogU0RQMCBHZW4gUHVycG9zZSBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMSAgICAgSVhHQkVfRUlDUl9HUElfU0RQMSAgLyogU0RQMSBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19HUElfU0RQMiAgICAgSVhHQkVfRUlDUl9HUElfU0RQMiAgLyogU0RQMiBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19FQ0MgICAgICAgICAgSVhHQkVfRUlDUl9FQ0MgICAgICAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTVNfUEJVUiAgICAgICAgIElYR0JFX0VJQ1JfUEJVUiAgICAgIC8qIFBrdCBCdWYgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19ESEVSICAgICAgICAgSVhHQkVfRUlDUl9ESEVSICAgICAgLyogRGVzY3IgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1TX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTYzMCwxMCArMTA4MywxNiBAQAogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgTWFzayBDbGVhciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJTUNfRkxPV19ESVIgICAgIElYR0JFX0VJQ1JfRkxPV19ESVIgIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTUNfUlhfTUlTUyAgICAgIElYR0JFX0VJQ1JfUlhfTUlTUyAgIC8qIFBhY2tldCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSU1DX1BDSSAgICAgICAgICBJWEdCRV9FSUNSX1BDSSAgICAgICAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJTUNfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfTFNDICAgICAgICAgIElYR0JFX0VJQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBJWEdCRV9FSU1DX01ORyAgICAgICAgICBJWEdCRV9FSUNSX01ORyAgICAgICAvKiBNTkcgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDAgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDAgIC8qIFNEUDAgR2VuIFB1cnBvc2UgSW50ICovCiAjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDEgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDEgIC8qIFNEUDEgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTUNfR1BJX1NEUDIgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDIgIC8qIFNEUDIgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJTUNfRUNDICAgICAgICAgIElYR0JFX0VJQ1JfRUNDICAgICAgIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1BCVVIgICAgICAgICBJWEdCRV9FSUNSX1BCVVIgICAgICAvKiBQa3QgQnVmIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJTUNfREhFUiAgICAgICAgIElYR0JFX0VJQ1JfREhFUiAgICAgIC8qIERlc2MgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19UQ1BfVElNRVIgICAgSVhHQkVfRUlDUl9UQ1BfVElNRVIgLyogVENQIFRpbWVyICovCkBAIC02NTYsNiArMTExNSwzMyBAQAogI2RlZmluZSBJWEdCRV9JTUlSRVhUX0NUUkxfU1lOICAgIDB4MDAwMjAwMDAgIC8qIENoZWNrIFNZTiBiaXQgaW4gaGVhZGVyICovCiAjZGVmaW5lIElYR0JFX0lNSVJFWFRfQ1RSTF9GSU4gICAgMHgwMDA0MDAwMCAgLyogQ2hlY2sgRklOIGJpdCBpbiBoZWFkZXIgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVF9DVFJMX0JQICAgICAweDAwMDgwMDAwICAvKiBCeXBhc3MgY2hlY2sgb2YgY29udHJvbCBiaXRzICovCisjZGVmaW5lIElYR0JFX0lNSVJfU0laRV9CUF84MjU5OSAgMHgwMDAwMTAwMCAvKiBQYWNrZXQgc2l6ZSBieXBhc3MgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1VSR184MjU5OSAweDAwMDAyMDAwIC8qIENoZWNrIFVSRyBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9BQ0tfODI1OTkgMHgwMDAwNDAwMCAvKiBDaGVjayBBQ0sgYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfUFNIXzgyNTk5IDB4MDAwMDgwMDAgLyogQ2hlY2sgUFNIIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1JTVF84MjU5OSAweDAwMDEwMDAwIC8qIENoZWNrIFJTVCBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9TWU5fODI1OTkgMHgwMDAyMDAwMCAvKiBDaGVjayBTWU4gYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfRklOXzgyNTk5IDB4MDAwNDAwMDAgLyogQ2hlY2sgRklOIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX0JQXzgyNTk5ICAweDAwMDgwMDAwIC8qIEJ5cGFzcyBjaGVjayBvZiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9MTElfRU5fODI1OTkgICAweDAwMTAwMDAwIC8qIEVuYWJsZXMgbG93IGxhdGVuY3kgSW50ICovCisjZGVmaW5lIElYR0JFX0lNSVJfUlhfUVVFVUVfTUFTS184MjU5OSAgMHgwMDAwMDA3RiAvKiBSeCBRdWV1ZSBNYXNrICovCisjZGVmaW5lIElYR0JFX0lNSVJfUlhfUVVFVUVfU0hJRlRfODI1OTkgMjEgLyogUnggUXVldWUgU2hpZnQgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUlZQX1BSSU9SSVRZX01BU0sgICAgICAweDAwMDAwMDA3IC8qIFZMQU4gcHJpb3JpdHkgbWFzayAqLworI2RlZmluZSBJWEdCRV9JTUlSVlBfUFJJT1JJVFlfRU4gICAgICAgIDB4MDAwMDAwMDggLyogVkxBTiBwcmlvcml0eSBlbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9NQVhfRlRRRl9GSUxURVJTICAgICAgICAgIDEyOAorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX01BU0sgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9UQ1AgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfVURQICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX1NDVFAgICAgICAgIDIKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUklPUklUWV9NQVNLICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIElYR0JFX0ZUUUZfUFJJT1JJVFlfU0hJRlQgICAgICAgMgorI2RlZmluZSBJWEdCRV9GVFFGX1BPT0xfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwM0YKKyNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX1NISUZUICAgICAgICAgICA4CisjZGVmaW5lIElYR0JFX0ZUUUZfNVRVUExFX01BU0tfTUFTSyAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBJWEdCRV9GVFFGXzVUVVBMRV9NQVNLX1NISUZUICAgIDI1CisjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9NQVNLX0VOICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9GVFFGX1FVRVVFX0VOQUJMRSAgICAgICAgIDB4ODAwMDAwMDAKIAogLyogSW50ZXJydXB0IGNsZWFyIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfSVJRX0NMRUFSX01BU0sgICAgMHhGRkZGRkZGRgpAQCAtNjc1LDYgKzExNjEsMzEgQEAKIAogI2RlZmluZSBJWEdCRV9JVkFSX0FMTE9DX1ZBTCAgICAweDgwIC8qIEludGVycnVwdCBBbGxvY2F0aW9uIHZhbGlkICovCiAKKy8qIEVUWVBFIFF1ZXVlIEZpbHRlci9TZWxlY3QgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX01BWF9FVFFGX0ZJTFRFUlMgIDgKKyNkZWZpbmUgSVhHQkVfRVRRRl9CQ04gICAgICAgICAgMHgxMDAwMDAwMCAvKiBiaXQgMjggKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl8xNTg4ICAgICAgICAgMHg0MDAwMDAwMCAvKiBiaXQgMzAgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRU4gICAgMHg4MDAwMDAwMCAvKiBiaXQgMzEgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9QT09MX0VOQUJMRSAgICgxIDw8IDI2KSAvKiBiaXQgMjYgKi8KKworI2RlZmluZSBJWEdCRV9FVFFTX1JYX1FVRVVFICAgICAweDAwN0YwMDAwIC8qIGJpdHMgMjI6MTYgKi8KKyNkZWZpbmUgSVhHQkVfRVRRU19SWF9RVUVVRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBJWEdCRV9FVFFTX0xMSSAgICAgICAgICAweDIwMDAwMDAwIC8qIGJpdCAyOSAqLworI2RlZmluZSBJWEdCRV9FVFFTX1FVRVVFX0VOICAgICAweDgwMDAwMDAwIC8qIGJpdCAzMSAqLworCisvKgorICogRVRRRiBmaWx0ZXIgbGlzdDogb25lIHN0YXRpYyBmaWx0ZXIgcGVyIGZpbHRlciBjb25zdW1lci4gVGhpcyBpcworICogICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgZmlsdGVyIGNvbGxpc2lvbnMgbGF0ZXIuIEFkZCBuZXcgZmlsdGVycworICogICAgICAgICAgICAgICAgICAgaGVyZSEhCisgKgorICogQ3VycmVudCBmaWx0ZXJzOgorICogICAgRUFQT0wgODAyLjF4ICgweDg4OGUpOiBGaWx0ZXIgMAorICogICAgQkNOICgweDg5MDQpOiAgICAgICAgICBGaWx0ZXIgMQorICogICAgMTU4OCAoMHg4OGY3KTogICAgICAgICBGaWx0ZXIgMworICovCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0VBUE9MICAgICAgICAgIDAKKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfQkNOICAgICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl8xNTg4ICAgICAgICAgICAzCiAvKiBWTEFOIENvbnRyb2wgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVkVUICAgICAgIDB4MDAwMEZGRkYgIC8qIGJpdHMgMC0xNSAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX0NGSSAgICAgICAweDEwMDAwMDAwICAvKiBiaXQgMjggKi8KQEAgLTY4MiwyMSArMTE5MywyOCBAQAogI2RlZmluZSBJWEdCRV9WTE5DVFJMX1ZGRSAgICAgICAweDQwMDAwMDAwICAvKiBiaXQgMzAgKi8KICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9WTUUgICAgICAgMHg4MDAwMDAwMCAgLyogYml0IDMxICovCiAKKy8qIFZMQU4gcG9vbCBmaWx0ZXJpbmcgbWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRl9WSUVOICAgICAgICAgMHg4MDAwMDAwMCAgLyogZmlsdGVyIGlzIHZhbGlkICovCisjZGVmaW5lIElYR0JFX1ZMVkZfRU5UUklFUyAgICAgIDY0CiAKICNkZWZpbmUgSVhHQkVfRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuMXEgcHJvdG9jb2wgKi8KIAogLyogU1RBVFVTIEJpdCBNYXNrcyAqLwotI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEICAgICAweDAwMDAwMDBDIC8qIExBTiBJRCAqLwotI2RlZmluZSBJWEdCRV9TVEFUVVNfR0lPICAgICAgICAweDAwMDgwMDAwIC8qIEdJTyBNYXN0ZXIgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEICAgICAgICAgMHgwMDAwMDAwQyAvKiBMQU4gSUQgKi8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF9TSElGVCAgIDIgICAgICAgICAgLyogTEFOIElEIFNoaWZ0Ki8KKyNkZWZpbmUgSVhHQkVfU1RBVFVTX0dJTyAgICAgICAgICAgIDB4MDAwODAwMDAgLyogR0lPIE1hc3RlciBFbmFibGUgU3RhdHVzICovCiAKICNkZWZpbmUgSVhHQkVfU1RBVFVTX0xBTl9JRF8wICAgMHgwMDAwMDAwMCAvKiBMQU4gSUQgMCAqLwogI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEXzEgICAweDAwMDAwMDA0IC8qIExBTiBJRCAxICovCiAKIC8qIEVTRFAgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNCAweDAwMDAwMDAxIC8qIFNEUDQgRGF0YSBWYWx1ZSAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDUgMHgwMDAwMDAwMiAvKiBTRFA1IERhdGEgVmFsdWUgKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFAwIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFAxIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0IDB4MDAwMDAwMTAgLyogU0RQNCBEYXRhIFZhbHVlICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNSAweDAwMDAwMDIwIC8qIFNEUDUgRGF0YSBWYWx1ZSAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDYgMHgwMDAwMDA0MCAvKiBTRFA2IERhdGEgVmFsdWUgKi8KICNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0X0RJUiAgICAgMHgwMDAwMDAwNCAvKiBTRFA0IElPIGRpcmVjdGlvbiAqLwotI2RlZmluZSBJWEdCRV9FU0RQX1NEUDVfRElSICAgICAweDAwMDAwMDA4IC8qIFNEUDUgSU8gZGlyZWN0aW9uICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNV9ESVIgICAgIDB4MDAwMDIwMDAgLyogU0RQNSBJTyBkaXJlY3Rpb24gKi8KIAogLyogTEVEQ1RMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MRURfSVZSVF9CQVNFICAgICAgMHgwMDAwMDA0MApAQCAtNzE5LDYgKzEyMzcsNyBAQAogI2RlZmluZSBJWEdCRV9MRURfT0ZGICAgICAgICAgICAweEYKIAogLyogQVVUT0MgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0FVVE9DX0tYNF9LWF9TVVBQX01BU0sgMHhDMDAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19LWDRfU1VQUCAgICAweDgwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0tYX1NVUFAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfUEFVU0UgICAgICAgMHgzMDAwMDAwMApAQCAtNzI3LDkgKzEyNDYsMTcgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUlhfTE9PU0UgMHgwMTAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SWF9EUklGVCAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JYX0FMSUdOIDB4MDA3QzAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfRkVDQSAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQ19GRUNSICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DX0tSX1NVUFAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUkVTVEFSVCAgMHgwMDAwMTAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19GTFUgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19TSElGVCAgIDEzCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMICAgICAgKDB4MyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgICAgICAgKDB4NCA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19TR01JSV8xR18xMDBNICAgKDB4NSA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gKDB4NiA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfU0dNSUkgKDB4NyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU19NQVNLICAgICAgICAgICAgKDB4NyA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOICAgKDB4MCA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTiAgKDB4MSA8PCBJWEdCRV9BVVRPQ19MTVNfU0hJRlQpCkBAIC03MzgsMTUgKzEyNjUsMjQgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTiAgICAoMHg2IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0FUVEFDSF9UWVBFICAgICAoMHg3IDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogCi0jZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTUQgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EICAgICAgICAweDAwMDAwMTgwCi0jZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUIDcKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCA5CisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfTUFTSyAgICAweDAwMDAwMjAwCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQgICA5CisjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX01BU0sgICAweDAwMDAwMTgwCisjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUICA3CiAjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19YQVVJICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX0tYNCAgICAoMHgxIDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfQ1g0ICAgICgweDIgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0JYICAgICAgKDB4MCA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xR19LWCAgICAgICgweDEgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfU0ZJICAgICAoMHgwIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0tYX0JYICAgKDB4MSA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQorCisjZGVmaW5lIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLICAweEZGRkYwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfTUFTSyAgMHgwMDAzMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUIDE2CisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfS1IgICgweDAgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19YRkkgKDB4MSA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1NGSSAoMHgyIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCiAKIC8qIExJTktTIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MSU5LU19LWF9BTl9DT01QICAweDgwMDAwMDAwCkBAIC03NTYsNiArMTI5Miw3IEBACiAjZGVmaW5lIElYR0JFX0xJTktTX1JYX01PREUgICAgIDB4MDYwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfVFhfTU9ERSAgICAgMHgwMTgwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19YR1hTX0VOICAgICAweDAwNDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NHTUlJX0VOICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfUENTXzFHX0VOICAgMHgwMDIwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU18xR19BTl9FTiAgICAweDAwMTAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX0tYX0FOX0lETEUgIDB4MDAwODAwMDAKQEAgLTc2NSw5ICsxMzAyLDM1IEBACiAjZGVmaW5lIElYR0JFX0xJTktTX1RMX0ZBVUxUICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfU0lHTkFMICAgICAgMHgwMDAwMEYwMAogCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzgyNTk5ICAgICAweDMwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzEwR184MjU5OSAweDMwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzFHXzgyNTk5ICAweDIwMDAwMDAwCisjZGVmaW5lIElYR0JFX0xJTktTX1NQRUVEXzEwMF84MjU5OSAweDEwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktfVVBfVElNRSAgICAgIDkwIC8qIDkuMCBTZWNvbmRzICovCiAjZGVmaW5lIElYR0JFX0FVVE9fTkVHX1RJTUUgICAgIDQ1IC8qIDQuNSBTZWNvbmRzICovCiAKKyNkZWZpbmUgRklCRVJfTElOS19VUF9MSU1JVCAgICAgNTAKKworLyogUENTMUdMU1RBIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfTElOS19PSyAgICAgICAgIDEKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX1NZTktfT0sgICAgICAgICAweDEwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSAgICAgMHgxMDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fUEFHRV9SWCAgICAgIDB4MjAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX1RJTUVEX09VVCAgICAweDQwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9SRU1PVEVfRkFVTFQgMHg4MDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fRVJST1JfUldTICAgIDB4MTAwMDAwCisKKyNkZWZpbmUgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFICAgICAgICAweDgwCisjZGVmaW5lIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSAgICAgICAgMHgxMDAKKworLyogUENTMUdMQ1RMIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfQU5fMUdfVElNRU9VVF9FTiAgMHgwMDA0MDAwMCAvKiBQQ1MgMUcgYXV0b25lZyB0byBlbiAqLworI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfRkxWX0xJTktfVVAgICAgIDEKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0ZPUkNFX0xJTksgICAgICAweDIwCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9MT1dfTElOS19MQVRDSCAgMHg0MAorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfQU5fRU5BQkxFICAgICAgIDB4MTAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0FOX1JFU1RBUlQgICAgICAweDIwMDAwCisKIC8qIFNXIFNlbWFwaG9yZSBSZWdpc3RlciBiaXRtYXNrcyAqLwogI2RlZmluZSBJWEdCRV9TV1NNX1NNQkkgMHgwMDAwMDAwMSAvKiBEcml2ZXIgU2VtYXBob3JlIGJpdCAqLwogI2RlZmluZSBJWEdCRV9TV1NNX1NXRVNNQkkgMHgwMDAwMDAwMiAvKiBGVyBTZW1hcGhvcmUgYml0ICovCkBAIC04MTksNiArMTM4MiwxMSBAQAogI2RlZmluZSBJWEdCRV9GV19QVFIgICAgICAgICAgICAweDBGCiAjZGVmaW5lIElYR0JFX1BCQU5VTTBfUFRSICAgICAgIDB4MTUKICNkZWZpbmUgSVhHQkVfUEJBTlVNMV9QVFIgICAgICAgMHgxNgorI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfODI1OTlfQ0FQUyAgMHg3MgorI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfODI1OThfQ0FQUyAgMHg2MgorCisvKiBNU0ktWCBjYXBhYmlsaXR5IGZpZWxkcyBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfVEJMX1NaX01BU0sgICAgIDB4N0ZGCiAKIC8qIExlZ2FjeSBFRVBST00gd29yZCBvZmZzZXRzICovCiAjZGVmaW5lIElYR0JFX0lTQ1NJX0JPT1RfQ0FQUyAgICAgICAgICAgMHgwMDMzCkBAIC04NjcsNiArMTQzNSw4IEBACiAjZGVmaW5lIElYR0JFX1BDSV9MSU5LX1NQRUVEICAgICAgMHhGCiAjZGVmaW5lIElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDAgMHgxCiAjZGVmaW5lIElYR0JFX1BDSV9MSU5LX1NQRUVEXzUwMDAgMHgyCisjZGVmaW5lIElYR0JFX1BDSV9IRUFERVJfVFlQRV9SRUdJU1RFUiAgMHgwRQorI2RlZmluZSBJWEdCRV9QQ0lfSEVBREVSX1RZUEVfTVVMVElGVU5DIDB4ODAKIAogLyogTnVtYmVyIG9mIDEwMCBtaWNyb3NlY29uZHMgd2Ugd2FpdCBmb3IgUENJIEV4cHJlc3MgbWFzdGVyIGRpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfUENJX01BU1RFUl9ESVNBQkxFX1RJTUVPVVQgODAwCkBAIC05MTksNiArMTQ4OSw3IEBACiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9SWEVOICAgICAgIDB4MDAwMDAwMDEgIC8qIEVuYWJsZSBSZWNlaXZlciAqLwogI2RlZmluZSBJWEdCRV9SWENUUkxfRE1CWVBTICAgICAweDAwMDAwMDAyICAvKiBEZXNjcmlwdG9yIE1vbml0b3IgQnlwYXNzICovCiAjZGVmaW5lIElYR0JFX1JYRENUTF9FTkFCTEUgICAgIDB4MDIwMDAwMDAgIC8qIEVuYWJsZSBzcGVjaWZpYyBSeCBRdWV1ZSAqLworI2RlZmluZSBJWEdCRV9SWERDVExfVk1FICAgICAgICAweDQwMDAwMDAwICAvKiBWTEFOIG1vZGUgZW5hYmxlICovCiAKICNkZWZpbmUgSVhHQkVfRkNUUkxfU0JQIDB4MDAwMDAwMDIgLyogU3RvcmUgQmFkIFBhY2tldCAqLwogI2RlZmluZSBJWEdCRV9GQ1RSTF9NUEUgMHgwMDAwMDEwMCAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgRW5hKi8KQEAgLTkyOSw5ICsxNTAwLDIzIEBACiAvKiBSZWNlaXZlIFByaW9yaXR5IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRkNUUkxfUlBGQ0UgMHgwMDAwNDAwMAogI2RlZmluZSBJWEdCRV9GQ1RSTF9SRkNFIDB4MDAwMDgwMDAgLyogUmVjZWl2ZSBGbG93IENvbnRyb2wgRW5hICovCisjZGVmaW5lIElYR0JFX01GTENOX1BNQ0YgICAgICAgIDB4MDAwMDAwMDEgLyogUGFzcyBNQUMgQ29udHJvbCBGcmFtZXMgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fRFBGICAgICAgICAgMHgwMDAwMDAwMiAvKiBEaXNjYXJkIFBhdXNlIEZyYW1lICovCisjZGVmaW5lIElYR0JFX01GTENOX1JQRkNFICAgICAgIDB4MDAwMDAwMDQgLyogUmVjZWl2ZSBQcmlvcml0eSBGQyBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUkZDRSAgICAgICAgMHgwMDAwMDAwOCAvKiBSZWNlaXZlIEZDIEVuYWJsZSAqLwogCiAvKiBNdWx0aXBsZSBSZWNlaXZlIFF1ZXVlIENvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NFTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLyogUlNTIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NUlFDX01SUUVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGIC8qIEJpdHMgMzowICovCisjZGVmaW5lIElYR0JFX01SUUNfUlQ4VENFTiAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogOCBUQyBubyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVDRUQ0VOICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAvKiA0IFRDIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUUlNTOFRDRU4gICAgICAgICAgICAweDAwMDAwMDA0IC8qIDggVEMgdy8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfUlRSU1M0VENFTiAgICAgICAgICAgIDB4MDAwMDAwMDUgLyogNCBUQyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRRU4gICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiBWTURxMiA2NCBwb29scyBubyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlNTMzJFTiAgICAgICAgICAgMHgwMDAwMDAwQSAvKiBWTURxMiAzMiBwb29scyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlNTNjRFTiAgICAgICAgICAgMHgwMDAwMDAwQiAvKiBWTURxMiA2NCBwb29scyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlQ4VENFTiAgICAgICAgICAgMHgwMDAwMDAwQyAvKiBWTURxMi9SVCAxNiBwb29sIDggVEMgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19WTURRUlQ0VENFTiAgICAgICAgICAgMHgwMDAwMDAwRCAvKiBWTURxMi9SVCAzMiBwb29sIDQgVEMgKi8KICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfTUFTSyAgICAgICAgMHhGRkZGMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUCAgICAweDAwMDEwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjQgICAgICAgIDB4MDAwMjAwMDAKQEAgLTk0Miw2ICsxNTI3LDEyIEBACiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQICAgIDB4MDA0MDAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9VRFAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X0VYX1VEUCAweDAxMDAwMDAwCisjZGVmaW5lIElYR0JFX01SUUNfTDNMNFRYU1dFTiAgICAgICAgICAgIDB4MDAwMDgwMDAKKworLyogUXVldWUgRHJvcCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfUURFX0VOQUJMRSAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9RREVfSURYX01BU0sgICAweDAwMDA3RjAwCisjZGVmaW5lIElYR0JFX1FERV9JRFhfU0hJRlQgICAgICAgICAgIDgKIAogI2RlZmluZSBJWEdCRV9UWERfUE9QVFNfSVhTTSAweDAxICAgICAgIC8qIEluc2VydCBJUCBjaGVja3N1bSAqLwogI2RlZmluZSBJWEdCRV9UWERfUE9QVFNfVFhTTSAweDAyICAgICAgIC8qIEluc2VydCBUQ1AvVURQIGNoZWNrc3VtICovCkBAIC05NTMsMTAgKzE1NDQsMjUgQEAKICNkZWZpbmUgSVhHQkVfVFhEX0NNRF9WTEUgICAgMHg0MDAwMDAwMCAvKiBBZGQgVkxBTiB0YWcgKi8KICNkZWZpbmUgSVhHQkVfVFhEX1NUQVRfREQgICAgMHgwMDAwMDAwMSAvKiBEZXNjcmlwdG9yIERvbmUgKi8KIAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfU1RBVFVTX1NFQ1AgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9JTlZBTElEX1BST1RPQ09MICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0lOVkFMSURfTEVOR1RIICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfQVVUSF9GQUlMRUQgICAgICAgICAgICAweDE4MDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9CSVRfTUFTSyAgICAgICAgICAgICAgIDB4MTgwMDAwMDAKKy8qIE11bHRpcGxlIFRyYW5zbWl0IFF1ZXVlIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ19SVF9FTkEgICAgICAgMHgxIC8qIERDQiBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ19WVF9FTkEgICAgICAgMHgyIC8qIFZNRFEyIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NVFFDXzY0UV8xUEIgICAgICAweDAgLyogNjQgcXVldWVzIDEgcGFjayBidWZmZXIgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ182NFZGICAgICAgICAgMHg4IC8qIDIgVFggUXVldWVzIHBlciBwb29sIHcvNjRWRidzICovCisjZGVmaW5lIElYR0JFX01UUUNfOFRDXzhUUSAgICAgIDB4QyAvKiA4IFRDIGlmIFJUX0VOQSBvciA4IFRRIGlmIFZUX0VOQSAqLworCiAvKiBSZWNlaXZlIERlc2NyaXB0b3IgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0REICAgICAgIDB4MDEgICAgLyogRGVzY3JpcHRvciBEb25lICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0VPUCAgICAgIDB4MDIgICAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9GTE0gICAgICAweDA0ICAgIC8qIEZEaXIgTWF0Y2ggKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVlAgICAgICAgMHgwOCAgICAvKiBJRUVFIFZMQU4gUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9ORVhUUF9NQVNLICAgMHgwMDBGRkZGMCAvKiBOZXh0IERlc2NyaXB0b3IgSW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX05FWFRQX1NISUZUICAweDAwMDAwMDA0CiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MNENTICAgICAweDIwICAgIC8qIEw0IHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9JUENTICAgICAweDQwICAgIC8qIElQIHhzdW0gY2FsY3VsYXRlZCAqLwpAQCAtOTY1LDYgKzE1NzEsMTAgQEAKICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVkVYVCAgICAgMHgyMDAgICAvKiAxc3QgVkxBTiBmb3VuZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9VRFBWICAgICAweDQwMCAgIC8qIFZhbGlkIFVEUCBjaGVja3N1bSAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9EWU5JTlQgICAweDgwMCAgIC8qIFBrdCBjYXVzZWQgSU5UIHZpYSBEWU5JTlQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTExJTlQgICAgMHg4MDAgICAvKiBQa3QgY2F1c2VkIExvdyBMYXRlbmN5IEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9UUyAgICAgICAweDEwMDAwIC8qIFRpbWUgU3RhbXAgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfU0VDUCAgICAgMHgyMDAwMCAvKiBTZWN1cml0eSBQcm9jZXNzaW5nICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0xCICAgICAgIDB4NDAwMDAgLyogTG9vcGJhY2sgU3RhdHVzICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0FDSyAgICAgIDB4ODAwMCAgLyogQUNLIFBhY2tldCBpbmRpY2F0aW9uICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfQ0UgICAgICAgIDB4MDEgICAgLyogQ1JDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfTEUgICAgICAgIDB4MDIgICAgLyogTGVuZ3RoIEVycm9yICovCkBAIC05NzMsNiArMTU4Myw4IEBACiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfVVNFICAgICAgIDB4MjAgICAgLyogVW5kZXJzaXplIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfVENQRSAgICAgIDB4NDAgICAgLyogVENQL1VEUCBDaGVja3N1bSBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0lQRSAgICAgICAweDgwICAgIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTUFTSyAgICAgICAgICAgMHhmZmYwMDAwMCAvKiBSREVTQy5FUlJPUlMgbWFzayAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1NISUZUICAgICAgICAgIDIwICAgICAgICAgLyogUkRFU0MuRVJST1JTIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfSEJPICAgIDB4MDA4MDAwMDAgLypIZWFkZXIgQnVmZmVyIE92ZXJmbG93ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfQ0UgICAgIDB4MDEwMDAwMDAgLyogQ1JDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTEUgICAgIDB4MDIwMDAwMDAgLyogTGVuZ3RoIEVycm9yICovCkBAIC05ODcsOSArMTU5OSwyMyBAQAogI2RlZmluZSBJWEdCRV9SWERfQ0ZJX01BU0sgICAgICAweDEwMDAgIC8qIENGSSBpcyBiaXQgMTIgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0NGSV9TSElGVCAgICAgMTIKIAorI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9ERCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0REICAvKiBEb25lICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0VPUCAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRU9QIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkxNICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9GTE0gLyogRkRpciBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9WUCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX1ZQICAvKiBJRUVFIFZMQU4gUGt0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX01BU0sgICAgICAgICAgMHgwMDBmZmZmZiAvKiBTdGF0L05FWFRQOiBiaXQgMC0xOSAqLworCisvKiBQU1JUWVBFIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1RDUEhEUiAgICAweDAwMDAwMDEwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfVURQSERSICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9JUFY0SERSICAgMHgwMDAwMDEwMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0lQVjZIRFIgICAweDAwMDAwMjAwCiAKIC8qIFNSUkNUTCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUICAgICAxMCAgICAgLyogc28gbWFueSBLQnMgKi8KKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX1NISUZUICAgICAgICAyMgorI2RlZmluZSBJWEdCRV9TUlJDVExfUkRNVFNfTUFTSyAgICAgICAgIDB4MDFDMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RST1BfRU4gICAgICAgICAgICAweDEwMDAwMDAwCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLICAgICAgMHgwMDAwMDA3RgogI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJfTUFTSyAgICAgIDB4MDAwMDNGMDAKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0xFR0FDWSAgICAweDAwMDAwMDAwCkBAIC0xMDA0LDYgKzE2MzAsNyBAQAogCiAjZGVmaW5lIElYR0JFX1JYREFEVl9SU1NUWVBFX01BU0sgICAgICAgMHgwMDAwMDAwRgogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLICAgICAgIDB4MDAwMEZGRjAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTS19FWCAgICAweDAwMDFGRkYwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fTUFTSyAgICAgMHgwMDAwN0ZFMAogI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX1NISUZUICAgIDUKICNkZWZpbmUgSVhHQkVfUlhEQURWX1NQTElUSEVBREVSX0VOICAgICAweDAwMDAxMDAwCkBAIC0xMDMxLDYgKzE2NTgsMjAgQEAKICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfVURQICAgICAgICAweDAwMDAwMjAwIC8qIFVEUCBoZHIgcHJlc2VudCAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9TQ1RQICAgICAgIDB4MDAwMDA0MDAgLyogU0NUUCBoZHIgcHJlc2VudCAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9ORlMgICAgICAgIDB4MDAwMDA4MDAgLyogTkZTIGhkciBwcmVzZW50ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0lQU0VDX0VTUCAgMHgwMDAwMTAwMCAvKiBJUFNlYyBFU1AgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBTRUNfQUggICAweDAwMDAyMDAwIC8qIElQU2VjIEFIICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0xJTktTRUMgICAgMHgwMDAwNDAwMCAvKiBMaW5rU2VjIEVuY2FwICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0VUUUYgICAgICAgMHgwMDAwODAwMCAvKiBQS1RUWVBFIGlzIEVUUUYgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfRVRRRl9NQVNLICAweDAwMDAwMDcwIC8qIEVUUUYgaGFzIDggaW5kaWNlcyAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9FVFFGX1NISUZUIDQgICAgICAgICAgLyogUmlnaHQtc2hpZnQgNCBiaXRzICovCisKKy8qIFNlY3VyaXR5IFByb2Nlc3NpbmcgYml0IEluZGljYXRpb24gKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19TVEFUVVNfU0VDUCAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9OT19TQV9NQVRDSCAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9SRVBMQVlfRVJST1IgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9CSVRfTUFTSyAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0xOS1NFQ19FUlJPUl9CQURfU0lHICAgICAgIDB4MTgwMDAwMDAKKwogLyogTWFza3MgdG8gZGV0ZXJtaW5lIGlmIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQgZHVlIHRvIGZyYW1lIGVycm9ycyAqLwogI2RlZmluZSBJWEdCRV9SWERfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SWERfRVJSX0NFIHwgXApAQCAtMTA2MCw2ICsxNzAxLDE0IEBACiAjZGVmaW5lIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIDB4MDAwRCAvKiBQcmlvcml0eSBpbiB1cHBlciAzIG9mIDE2ICovCiAjZGVmaW5lIElYR0JFX1RYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQKIAorLyogTGl0dGxlIEVuZGlhbiBkZWZpbmVzICovCisjaWZuZGVmIF9fbGUzMgorI2RlZmluZSBfX2xlMzIgIHUzMgorI2VuZGlmCisjaWZuZGVmIF9fbGU2NAorI2RlZmluZSBfX2xlNjQgIHU2NAorCisjZW5kaWYKIAogLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIExlZ2FjeSAqLwogc3RydWN0IGl4Z2JlX2xlZ2FjeV90eF9kZXNjIHsKQEAgLTExNDcsNiArMTc5Niw5IEBACiAKIC8qIEFkdiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbmZpZyBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRBTEVOX01BU0sgICAgICAweDAwMDBGRkZGIC8qIERhdGEgYnVmIGxlbmd0aChieXRlcykgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX01BQ19MSU5LU0VDICAgICAgMHgwMDA0MDAwMCAvKiBJbnNlcnQgTGlua1NlYyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfSVBTRUNfU0FfSU5ERVhfTUFTSyAgIDB4MDAwMDAzRkYgLyogSVBTZWMgU0EgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX0lQU0VDX0VTUF9MRU5fTUFTSyAgICAweDAwMDAwMUZGIC8qIElQU2VjIEVTUCBsZW5ndGggKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfTUFTSyAgMHgwMEYwMDAwMCAvKiBEVFlQIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfQ1RYVCAgMHgwMDIwMDAwMCAvKiBBZHZhbmNlZCBDb250ZXh0IERlc2MgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX0RUWVBfREFUQSAgMHgwMDMwMDAwMCAvKiBBZHZhbmNlZCBEYXRhIERlc2NyaXB0b3IgKi8KQEAgLTExODEsNiArMTgzMyw5IEBACiAjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQICAgMHgwMDAwMDgwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgVENQICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfU0NUUCAgMHgwMDAwMTAwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgU0NUUCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfTUtSUkVRICAgIDB4MDAwMDIwMDAgLypSZXEgcmVxdWlyZXMgTWFya2VycyBhbmQgQ1JDKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1BPUFRTX0lQU0VDICAgICAgMHgwMDAwMDQwMCAvKiBJUFNlYyBvZmZsb2FkIHJlcXVlc3QgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQU0VDX1RZUEVfRVNQIDB4MDAwMDIwMDAgLyogSVBTZWMgVHlwZSBFU1AgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQU0VDX0VOQ1JZUFRfRU4gMHgwMDAwNDAwMC8qIEVTUCBFbmNyeXB0IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfTDRMRU5fU0hJRlQgICAgIDggIC8qIEFkdiBjdHh0IEw0TEVOIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9NU1NfU0hJRlQgICAgICAgMTYgIC8qIEFkdiBjdHh0IE1TUyBzaGlmdCAqLwogCkBAIC0xMTk0LDYgKzE4NDksMTIgQEAKICNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgMHgwMDgwCiAjZGVmaW5lIElYR0JFX0xJTktfU1BFRURfODI1OThfQVVUT05FRyAoSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKyNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF84MjU5OV9BVVRPTkVHIChJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisKKyNkZWZpbmUgSVhHQkVfUENJRV9ERVZfQ1RSTF8yIDB4QzgKKyNkZWZpbmUgUENJRV9DT01QTF9UT19WQUxVRSAweDA1CiAKIC8qIFBoeXNpY2FsIGxheWVyIHR5cGUgKi8KIHR5cGVkZWYgdTMyIGl4Z2JlX3BoeXNpY2FsX2xheWVyOwpAQCAtMTIxMCw3ICsxODcxLDYgQEAKICNkZWZpbmUgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1ggIDB4MDIwMAogI2RlZmluZSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9CWCAgMHgwNDAwCiAKLQogZW51bSBpeGdiZV9lZXByb21fdHlwZSB7CiAJaXhnYmVfZWVwcm9tX3VuaW5pdGlhbGl6ZWQgPSAwLAogCWl4Z2JlX2VlcHJvbV9zcGksCkBAIC0xMjIwLDEyICsxODgwLDE0IEBACiBlbnVtIGl4Z2JlX21hY190eXBlIHsKIAlpeGdiZV9tYWNfdW5rbm93biA9IDAsCiAJaXhnYmVfbWFjXzgyNTk4RUIsCisJaXhnYmVfbWFjXzgyNTk5RUIsCiAJaXhnYmVfbnVtX21hY3MKIH07CiAKIGVudW0gaXhnYmVfcGh5X3R5cGUgewogCWl4Z2JlX3BoeV91bmtub3duID0gMCwKIAlpeGdiZV9waHlfdG4sCisJaXhnYmVfcGh5X2N1X3Vua25vd24sCiAJaXhnYmVfcGh5X3F0LAogCWl4Z2JlX3BoeV94YXVpLAogCWl4Z2JlX3BoeV9ubCwKQEAgLTEyMzQsMjIgKzE4OTYsMzEgQEAKIAlpeGdiZV9waHlfc2ZwX2F2YWdvLAogCWl4Z2JlX3BoeV9zZnBfZnRsLAogCWl4Z2JlX3BoeV9zZnBfdW5rbm93biwKKwlpeGdiZV9waHlfc2ZwX2ludGVsLAogCWl4Z2JlX3BoeV9nZW5lcmljCiB9OwogCiAvKgogICogU0ZQKyBtb2R1bGUgdHlwZSBJRHM6CiAgKgotICogSUQJTW9kdWxlIFR5cGUKKyAqIElEICAgTW9kdWxlIFR5cGUKICAqID09PT09PT09PT09PT0KLSAqIDAJU0ZQX0RBX0NVCi0gKiAxCVNGUF9TUgotICogMglTRlBfTFIKKyAqIDAgICAgU0ZQX0RBX0NVCisgKiAxICAgIFNGUF9TUgorICogMiAgICBTRlBfTFIKKyAqIDMgICAgU0ZQX0RBX0NVX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKyAqIDQgICAgU0ZQX0RBX0NVX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKKyAqIDUgICAgU0ZQX1NSL0xSX0NPUkUwIC0gODI1OTktc3BlY2lmaWMKKyAqIDYgICAgU0ZQX1NSL0xSX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKICAqLwogZW51bSBpeGdiZV9zZnBfdHlwZSB7CiAJaXhnYmVfc2ZwX3R5cGVfZGFfY3UgPSAwLAogCWl4Z2JlX3NmcF90eXBlX3NyID0gMSwKIAlpeGdiZV9zZnBfdHlwZV9sciA9IDIsCisJaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTAgPSAzLAorCWl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxID0gNCwKKwlpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUwID0gNSwKKwlpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxID0gNiwKIAlpeGdiZV9zZnBfdHlwZV9ub3RfcHJlc2VudCA9IDB4RkZGRSwKIAlpeGdiZV9zZnBfdHlwZV91bmtub3duID0gMHhGRkZGCiB9OwpAQCAtMTI2MywxNCArMTkzNCw1MSBAQAogfTsKIAogLyogRmxvdyBDb250cm9sIFNldHRpbmdzICovCi1lbnVtIGl4Z2JlX2ZjX3R5cGUgeworZW51bSBpeGdiZV9mY19tb2RlIHsKIAlpeGdiZV9mY19ub25lID0gMCwKIAlpeGdiZV9mY19yeF9wYXVzZSwKIAlpeGdiZV9mY190eF9wYXVzZSwKIAlpeGdiZV9mY19mdWxsLAorI2lmZGVmIENPTkZJR19EQ0IKKwlpeGdiZV9mY19wZmMsCisjZW5kaWYKIAlpeGdiZV9mY19kZWZhdWx0CiB9OwogCisvKiBQQ0kgYnVzIHR5cGVzICovCitlbnVtIGl4Z2JlX2J1c190eXBlIHsKKwlpeGdiZV9idXNfdHlwZV91bmtub3duID0gMCwKKwlpeGdiZV9idXNfdHlwZV9wY2ksCisJaXhnYmVfYnVzX3R5cGVfcGNpeCwKKwlpeGdiZV9idXNfdHlwZV9wY2lfZXhwcmVzcywKKwlpeGdiZV9idXNfdHlwZV9yZXNlcnZlZAorfTsKKworLyogUENJIGJ1cyBzcGVlZHMgKi8KK2VudW0gaXhnYmVfYnVzX3NwZWVkIHsKKwlpeGdiZV9idXNfc3BlZWRfdW5rbm93biA9IDAsCisJaXhnYmVfYnVzX3NwZWVkXzMzLAorCWl4Z2JlX2J1c19zcGVlZF82NiwKKwlpeGdiZV9idXNfc3BlZWRfMTAwLAorCWl4Z2JlX2J1c19zcGVlZF8xMjAsCisJaXhnYmVfYnVzX3NwZWVkXzEzMywKKwlpeGdiZV9idXNfc3BlZWRfMjUwMCwKKwlpeGdiZV9idXNfc3BlZWRfNTAwMCwKKwlpeGdiZV9idXNfc3BlZWRfcmVzZXJ2ZWQKK307CisKKy8qIFBDSSBidXMgd2lkdGhzICovCitlbnVtIGl4Z2JlX2J1c193aWR0aCB7CisJaXhnYmVfYnVzX3dpZHRoX3Vua25vd24gPSAwLAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3gxLAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3gyLAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3g0ID0gNCwKKwlpeGdiZV9idXNfd2lkdGhfcGNpZV94OCA9IDgsCisJaXhnYmVfYnVzX3dpZHRoXzMyLAorCWl4Z2JlX2J1c193aWR0aF82NCwKKwlpeGdiZV9idXNfd2lkdGhfcmVzZXJ2ZWQKK307CisKIHN0cnVjdCBpeGdiZV9hZGRyX2ZpbHRlcl9pbmZvIHsKIAl1MzIgbnVtX21jX2FkZHJzOwogCXUzMiByYXJfdXNlZF9jb3VudDsKQEAgLTEyODAsNiArMTk4OCwxNiBAQAogCWJvb2wgdXNlcl9zZXRfcHJvbWlzYzsKIH07CiAKKy8qIEJ1cyBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgaXhnYmVfYnVzX2luZm8geworCWVudW0gaXhnYmVfYnVzX3NwZWVkIHNwZWVkOworCWVudW0gaXhnYmVfYnVzX3dpZHRoIHdpZHRoOworCWVudW0gaXhnYmVfYnVzX3R5cGUgdHlwZTsKKworCXUxNiBmdW5jOworCXUxNiBsYW5faWQ7Cit9OworCiAvKiBGbG93IGNvbnRyb2wgcGFyYW1ldGVycyAqLwogc3RydWN0IGl4Z2JlX2ZjX2luZm8gewogCXUzMiBoaWdoX3dhdGVyOyAvKiBGbG93IENvbnRyb2wgSGlnaC13YXRlciAqLwpAQCAtMTI4Nyw4ICsyMDA1LDggQEAKIAl1MTYgcGF1c2VfdGltZTsgLyogRmxvdyBDb250cm9sIFBhdXNlIHRpbWVyICovCiAJYm9vbCBzZW5kX3hvbjsgLyogRmxvdyBjb250cm9sIHNlbmQgWE9OICovCiAJYm9vbCBzdHJpY3RfaWVlZTsgLyogU3RyaWN0IElFRUUgbW9kZSAqLwotCWVudW0gaXhnYmVfZmNfdHlwZSB0eXBlOyAvKiBUeXBlIG9mIGZsb3cgY29udHJvbCAqLwotCWVudW0gaXhnYmVfZmNfdHlwZSBvcmlnaW5hbF90eXBlOworCWVudW0gaXhnYmVfZmNfbW9kZSBjdXJyZW50X21vZGU7IC8qIEZDIG1vZGUgaW4gZWZmZWN0ICovCisJZW51bSBpeGdiZV9mY19tb2RlIHJlcXVlc3RlZF9tb2RlOyAvKiBGQyBtb2RlIHJlcXVlc3RlZCBieSBjYWxsZXIgKi8KIH07CiAKIC8qIFN0YXRpc3RpY3MgY291bnRlcnMgY29sbGVjdGVkIGJ5IHRoZSBNQUMgKi8KQEAgLTEzNDgsNiArMjA2NiwxNCBAQAogCXU2NCBxcHRjWzE2XTsKIAl1NjQgcWJyY1sxNl07CiAJdTY0IHFidGNbMTZdOworCXU2NCBxcHJkY1sxNl07CisJdTY0IHB4b24yb2ZmY1s4XTsKKwl1NjQgZmRpcnVzdGF0X2FkZDsKKwl1NjQgZmRpcnVzdGF0X3JlbW92ZTsKKwl1NjQgZmRpcmZzdGF0X2ZhZGQ7CisJdTY0IGZkaXJmc3RhdF9mcmVtb3ZlOworCXU2NCBmZGlybWF0Y2g7CisJdTY0IGZkaXJtaXNzOwogfTsKIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwpAQCAtMTM3MiwxMiArMjA5OCwxNSBAQAogCXMzMiAoKnN0YXJ0X2h3KShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqY2xlYXJfaHdfY250cnMpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAllbnVtIGl4Z2JlX21lZGlhX3R5cGUgKCpnZXRfbWVkaWFfdHlwZSkoc3RydWN0IGl4Z2JlX2h3ICopOwotCXMzMiAoKmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl1MzIgKCpnZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqZ2V0X21hY19hZGRyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKik7CiAJczMyICgqc3RvcF9hZGFwdGVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqZ2V0X2J1c19pbmZvKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJdm9pZCAoKnNldF9sYW5faWQpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpyZWFkX2FuYWxvZ19yZWc4KShzdHJ1Y3QgaXhnYmVfaHcqLCB1MzIsIHU4Kik7CiAJczMyICgqd3JpdGVfYW5hbG9nX3JlZzgpKHN0cnVjdCBpeGdiZV9odyosIHUzMiwgdTgpOworCXMzMiAoKnNldHVwX3NmcCkoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmVuYWJsZV9yeF9kbWEpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIpOwogCiAJLyogTGluayAqLwogCXMzMiAoKnNldHVwX2xpbmspKHN0cnVjdCBpeGdiZV9odyAqKTsKQEAgLTE0MzMsNyArMjE2Miw3IEBACiBzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8gewogCXN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyAgb3BzOwogCWVudW0gaXhnYmVfZWVwcm9tX3R5cGUgICAgICAgICAgdHlwZTsKLQl1MzIJCQkJc2VtYXBob3JlX2RlbGF5OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX2RlbGF5OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZF9zaXplOwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19iaXRzOwogfTsKQEAgLTE0NDksMTEgKzIxNzgsMTIgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9yYXJfZW50cmllczsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90eF9xdWV1ZXM7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcnhfcXVldWVzOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19hdHRhY2hfdHlwZTsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfbW9kZV9zZWxlY3Q7Ci0JYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3NldHRpbmdzX2xvYWRlZDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9tc2l4X3ZlY3RvcnM7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2F1dG9jOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19hdXRvYzI7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZzsKLQlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfZmFpbGVkOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ19zdWNjZWVkZWQ7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfcGh5X2luZm8gewpAQCAtMTQ2Nyw2ICsyMTk3LDcgQEAKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2Rpc2FibGU7CiAJaXhnYmVfYXV0b25lZ19hZHZlcnRpc2VkICAgICAgICBhdXRvbmVnX2FkdmVydGlzZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNwZWVkX2ZpYmVyOwogfTsKIAogc3RydWN0IGl4Z2JlX2h3IHsKQEAgLTE0NzcsNiArMjIwOCw3IEBACiAJc3RydWN0IGl4Z2JlX2ZjX2luZm8JCWZjOwogCXN0cnVjdCBpeGdiZV9waHlfaW5mbwkJcGh5OwogCXN0cnVjdCBpeGdiZV9lZXByb21faW5mbwllZXByb207CisJc3RydWN0IGl4Z2JlX2J1c19pbmZvCQlidXM7CiAJdTE2CQkJCWRldmljZV9pZDsKIAl1MTYJCQkJdmVuZG9yX2lkOwogCXUxNgkJCQlzdWJzeXN0ZW1fZGV2aWNlX2lkOwpAQCAtMTUxNSw2ICsyMjQ3LDcgQEAKICNkZWZpbmUgSVhHQkVfRVJSX0kyQyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xOAogI2RlZmluZSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgLTE5CiAjZGVmaW5lIElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQgICAgICAgICAgICAgICAtMjAKKyNkZWZpbmUgSVhHQkVfRVJSX1NGUF9OT19JTklUX1NFUV9QUkVTRU5UICAgICAgIC0yMQogI2RlZmluZSBJWEdCRV9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCiAjZW5kaWYgLyogX0lYR0JFX1RZUEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IDAxNDc0NTcuLmQzYmYyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCQlicmVhazsKIAl9IHdoaWxlIChpeHAyMDAwX3JlZ19yZWFkKElYUDIwMDBfSVJRX1RIRF9SQVdfU1RBVFVTX0FfMCkgJiAweDAwZmYpOwogCi0JbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlpeHAyMDAwX3JlZ193cml0ZShJWFAyMDAwX0lSUV9USERfRU5BQkxFX1NFVF9BXzAsIDB4MDBmZik7CiAKIAlyZXR1cm4gcng7CkBAIC0yMDQsNyArMjA0LDcgQEAKIAogCQlpeHAyMDAwX3JlZ193cmIoSVhQMjAwMF9JUlFfVEhEX0VOQUJMRV9DTEVBUl9BXzAsIDB4MDBmZik7CiAJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZpcC0+bmFwaSkpKSB7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZpcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmlwLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIml4cDIwMDA6IGlycSB3aGlsZSBwb2xsaW5nISFcbiIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCmluZGV4IDMzNGZmOWUuLjE0MjQ4Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCkBAIC0xMzEsNyArMTMxLDggQEAKIAlpZiAoc29uaWNfZGVidWcgICYmICB2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQogCQlwcmludGsodmVyc2lvbik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogU29uaWMgZXRoZXJuZXQgZm91bmQgYXQgMHglMDhseCwgIiwgbHAtPmRldmljZS0+YnVzX2lkLCBkZXYtPmJhc2VfYWRkcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNvbmljIGV0aGVybmV0IGZvdW5kIGF0IDB4JTA4bHgsICIsCisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBkZXYtPmJhc2VfYWRkcik7CiAKIAkvKgogCSAqIFB1dCB0aGUgc29uaWMgaW50byBzb2Z0d2FyZSByZXNldCwgdGhlbgpAQCAtMTU2LDcgKzE1Nyw4IEBACiAJaWYgKChscC0+ZGVzY3JpcHRvcnMgPSBkbWFfYWxsb2NfY29oZXJlbnQobHAtPmRldmljZSwKIAkJCQlTSVpFT0ZfU09OSUNfREVTQyAqIFNPTklDX0JVU19TQ0FMRShscC0+ZG1hX2JpdG1vZGUpLAogCQkJCSZscC0+ZGVzY3JpcHRvcnNfbGFkZHIsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzLlxuIiwgbHAtPmRldmljZS0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLAorCQkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSkpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ptZS5jIGIvZHJpdmVycy9uZXQvam1lLmMKaW5kZXggYTZlMWEzNS4uODYwZGNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvam1lLmMKKysrIGIvZHJpdmVycy9uZXQvam1lLmMKQEAgLTQyOSwxMCArNDI5LDkgQEAKIAogCQlqbWUtPnBoeWxpbmsgPSBwaHlsaW5rOwogCi0JCWdoYyA9IGptZS0+cmVnX2doYyAmIH4oR0hDX1NQRUVEXzEwTSB8Ci0JCQkJCUdIQ19TUEVFRF8xMDBNIHwKLQkJCQkJR0hDX1NQRUVEXzEwMDBNIHwKLQkJCQkJR0hDX0RQWCk7CisJCWdoYyA9IGptZS0+cmVnX2doYyAmIH4oR0hDX1NQRUVEIHwgR0hDX0RQWCB8CisJCQkJR0hDX1RPX0NMS19QQ0lFIHwgR0hDX1RYTUFDX0NMS19QQ0lFIHwKKwkJCQlHSENfVE9fQ0xLX0dQSFkgfCBHSENfVFhNQUNfQ0xLX0dQSFkpOwogCQlzd2l0Y2ggKHBoeWxpbmsgJiBQSFlfTElOS19TUEVFRF9NQVNLKSB7CiAJCWNhc2UgUEhZX0xJTktfU1BFRURfMTBNOgogCQkJZ2hjIHw9IEdIQ19TUEVFRF8xME0gfApAQCAtMTgzNCw3ICsxODMzLDcgQEAKIH0KIAogc3RhdGljIGludAotam1lX2ZpbGxfZmlyc3RfdHhfZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkeCkKK2ptZV9maWxsX3R4X2Rlc2Moc3RydWN0IGptZV9hZGFwdGVyICpqbWUsIHN0cnVjdCBza19idWZmICpza2IsIGludCBpZHgpCiB7CiAJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSBqbWUtPnR4cmluZzsKIAlzdHJ1Y3QgdHhkZXNjICp0eGRlc2M7CkBAIC0xODY0LDYgKzE4NjMsNyBAQAogCWlmIChqbWVfdHhfdHNvKHNrYiwgJnR4ZGVzYy0+ZGVzYzEubXNzLCAmZmxhZ3MpKQogCQlqbWVfdHhfY3N1bShqbWUsIHNrYiwgJmZsYWdzKTsKIAlqbWVfdHhfdmxhbihza2IsICZ0eGRlc2MtPmRlc2MxLnZsYW4sICZmbGFncyk7CisJam1lX21hcF90eF9za2Ioam1lLCBza2IsIGlkeCk7CiAJdHhkZXNjLT5kZXNjMS5mbGFncyA9IGZsYWdzOwogCS8qCiAJICogU2V0IHR4IGJ1ZmZlciBpbmZvIGFmdGVyIHRlbGxpbmcgTklDIHRvIHNlbmQKQEAgLTE5MzMsOCArMTkzMyw3IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlqbWVfbWFwX3R4X3NrYihqbWUsIHNrYiwgaWR4KTsKLQlqbWVfZmlsbF9maXJzdF90eF9kZXNjKGptZSwgc2tiLCBpZHgpOworCWptZV9maWxsX3R4X2Rlc2Moam1lLCBza2IsIGlkeCk7CiAKIAlqd3JpdGUzMihqbWUsIEpNRV9UWENTLCBqbWUtPnJlZ190eGNzIHwKIAkJCQlUWENTX1NFTEVDVF9RVUVVRTAgfApAQCAtMjU5MSw2ICsyNTkwLDE2IEBACiBzdGF0aWMgaW50CiBqbWVfcGNpX2RtYTY0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCAmJgorCSAgICAhcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpCisJCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJCXJldHVybiAxOworCisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwICYmCisJICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV80MEJJVF9NQVNLKSkKKwkJaWYgKCFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzQwQklUX01BU0spKQorCQkJcmV0dXJuIDE7CisKIAlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKQogCQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCiAJCQlyZXR1cm4gMDsKQEAgLTI4NTcsNyArMjg2NiwxMSBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9zaGFkb3c7CiAJfQogCi0JbXNnX3Byb2JlKGptZSwgIkpNQzI1MCBnaWdhYml0JXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKKwltc2dfcHJvYmUoam1lLCAiJXMlcyB2ZXI6JXggcmV2OiV4IG1hY2FkZHI6JXBNXG4iLAorCQkoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCkgPworCQkJIkpNQzI1MCBHaWdhYml0IEV0aGVybmV0IiA6CisJCQkoam1lLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI2MCkgPworCQkJCSJKTUMyNjAgRmFzdCBFdGhlcm5ldCIgOiAiVW5rbm93biIsCiAJCShqbWUtPmZwZ2F2ZXIgIT0gMCkgPyAiIChGUEdBKSIgOiAiIiwKIAkJKGptZS0+ZnBnYXZlciAhPSAwKSA/IGptZS0+ZnBnYXZlciA6IGptZS0+Y2hpcHJldiwKIAkJam1lLT5yZXYsIG5ldGRldi0+ZGV2X2FkZHIpOwpAQCAtMzAwMyw3ICszMDE2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBqbWVfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSk1pY3JvbiBKTUMyNTAgZ2lnYWJpdCBldGhlcm5ldCAiCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkpNaWNyb24gSk1DMlhYIGV0aGVybmV0ICIKIAkgICAgICAgImRyaXZlciB2ZXJzaW9uICVzXG4iLCBEUlZfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmptZV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmggYi9kcml2ZXJzL25ldC9qbWUuaAppbmRleCA1MTU0NDExLi4wOTk2YTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuaAorKysgYi9kcml2ZXJzL25ldC9qbWUuaApAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBfX0pNRV9IX0lOQ0xVREVEX18KIAogI2RlZmluZSBEUlZfTkFNRQkiam1lIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuNCIKICNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiOiAiCiAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MAkweDAyNTAKQEAgLTM5OCwxNSArMzk4LDE1IEBACiAjZGVmaW5lIEpNRV9OQVBJX1dFSUdIVCh3KSBpbnQgdwogI2RlZmluZSBKTUVfTkFQSV9XRUlHSFRfVkFMKHcpIHcKICNkZWZpbmUgSk1FX05BUElfV0VJR0hUX1NFVCh3LCByKQotI2RlZmluZSBKTUVfUlhfQ09NUExFVEUoZGV2LCBuYXBpcykgbmV0aWZfcnhfY29tcGxldGUobmFwaXMpCisjZGVmaW5lIEpNRV9SWF9DT01QTEVURShkZXYsIG5hcGlzKSBuYXBpX2NvbXBsZXRlKG5hcGlzKQogI2RlZmluZSBKTUVfTkFQSV9FTkFCTEUocHJpdikgbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwogI2RlZmluZSBKTUVfTkFQSV9ESVNBQkxFKHByaXYpIFwKIAlpZiAoIW5hcGlfZGlzYWJsZV9wZW5kaW5nKCZwcml2LT5uYXBpKSkgXAogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogI2RlZmluZSBKTUVfUlhfU0NIRURVTEVfUFJFUChwcml2KSBcCi0JbmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkKKwluYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpCiAjZGVmaW5lIEpNRV9SWF9TQ0hFRFVMRShwcml2KSBcCi0JX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAogLyoKICAqIEptYWMgQWRhcHRlciBQcml2YXRlIGRhdGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tvcmluYS5jIGIvZHJpdmVycy9uZXQva29yaW5hLmMKaW5kZXggNzUwMTBjYS4uMzhkNjY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva29yaW5hLmMKKysrIGIvZHJpdmVycy9uZXQva29yaW5hLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCQkJCURNQV9TVEFUX0hBTFQgfCBETUFfU1RBVF9FUlIpLAogCQkJCSZscC0+cnhfZG1hX3JlZ3MtPmRtYXNtKTsKIAotCQluZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAKIAkJaWYgKGRtYXMgJiBETUFfU1RBVF9FUlIpCiAJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiBETUEgZXJyb3JcbiIsIGRldi0+bmFtZSk7CkBAIC00NjgsNyArNDY4LDcgQEAKIAogCXdvcmtfZG9uZSA9IGtvcmluYV9yeChkZXYsIGJ1ZGdldCk7CiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQl3cml0ZWwocmVhZGwoJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pICYKIAkJCX4oRE1BX1NUQVRfRE9ORSB8IERNQV9TVEFUX0hBTFQgfCBETUFfU1RBVF9FUlIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKaW5kZXggZDdhZmI5My4uZDgzZDQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9sYW5jZS5jCkBAIC0zOTEsNyArMzkxLDggQEAKICAgICovCiBzdGF0aWMgaW50IF9faW5pdCBkb19sYW5jZV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCAqcG9ydCwgcmVzdWx0OworCXVuc2lnbmVkIGludCAqcG9ydDsKKwlpbnQgcmVzdWx0OwogCiAJaWYgKGhpZ2hfbWVtb3J5IDw9IHBoeXNfdG9fdmlydCgxNioxMDI0KjEwMjQpKQogCQlsYW5jZV9uZWVkX2lzYV9ib3VuY2VfYnVmZmVycyA9IDA7CkBAIC00NTYsMTMgKzQ1NywxMyBAQAogc3RhdGljIGludCBfX2luaXQgbGFuY2VfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIsIGludCBpcnEsIGludCBvcHRpb25zKQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscDsKLQlsb25nIGRtYV9jaGFubmVsczsJCQkvKiBNYXJrIHNwdXJpb3VzbHktYnVzeSBETUEgY2hhbm5lbHMgKi8KKwl1bnNpZ25lZCBsb25nIGRtYV9jaGFubmVsczsJLyogTWFyayBzcHVyaW91c2x5LWJ1c3kgRE1BIGNoYW5uZWxzICovCiAJaW50IGksIHJlc2V0X3ZhbCwgbGFuY2VfdmVyc2lvbjsKIAljb25zdCBjaGFyICpjaGlwbmFtZTsKIAkvKiBGbGFncyBmb3Igc3BlY2lmaWMgY2hpcHMgb3IgYm9hcmRzLiAqLwotCXVuc2lnbmVkIGNoYXIgaHBKMjQwNUEgPSAwOwkJLyogSFAgSVNBIGFkYXB0b3IgKi8KLQlpbnQgaHBfYnVpbHRpbiA9IDA7CQkJLyogSFAgb24tYm9hcmQgZXRoZXJuZXQuICovCi0Jc3RhdGljIGludCBkaWRfdmVyc2lvbjsJCQkvKiBBbHJlYWR5IHByaW50ZWQgdmVyc2lvbiBpbmZvLiAqLworCXVuc2lnbmVkIGNoYXIgaHBKMjQwNUEgPSAwOwkvKiBIUCBJU0EgYWRhcHRvciAqLworCWludCBocF9idWlsdGluID0gMDsJCS8qIEhQIG9uLWJvYXJkIGV0aGVybmV0LiAqLworCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb247CQkvKiBBbHJlYWR5IHByaW50ZWQgdmVyc2lvbiBpbmZvLiAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJdm9pZCBfX2lvbWVtICpiaW9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGY2YzQ5MzYuLmY1MDUwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5pc19ybWlpKSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkmbWFjYl9oYW5kbGVfbGlua19jaGFuZ2UsIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKTsKIAl9IGVsc2UgewotCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+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+bmFwaSk7CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkgICAgICAgCSAgICAgICAiJXM6IElnbm9yaW5nIGludGVycnVwdCwgc3RhdHVzICUjMDh4LCBtYXNrICUjMDh4LlxuIiwKQEAgLTIyNTMsNyArMjI1Myw3IEBACiAJCW5wLT5pbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCX0gd2hpbGUgKG5wLT5pbnRyX3N0YXR1cyk7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyBwcm92aWRpbmcgbm90aGluZyBpcyB0cnlpbmcgdG8gc2h1dAogCSAqIHRoZSBjaGlwIGRvd24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBmMDkwZDNiLi5lYjY2ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTYyLDggKzYyLDkgQEAKICNpbmNsdWRlICI4MzkwLmgiCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIEQuIEJlY2tlci9QLiBHb3J0bWFrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKICNkZWZpbmUgaW5sX2xlKGFkZHIpICBsZTMyX3RvX2NwdShpbmwoYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKaW5kZXggOGU3YzRjOS4uY2YwMWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDExICsyMSwxMCBAQAogIyAKICMgQ29udGFjdCBJbmZvcm1hdGlvbjoKICMgICAgaW5mb0BuZXR4ZW4uY29tCi0jIE5ldFhlbiwKLSMgMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotIyBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyMgTmV0WGVuIEluYywKKyMgMTg5MjIgRm9yZ2UgRHJpdmUKKyMgQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAjCi0jIE1ha2VmaWxlIGZvciB0aGUgTmV0WGVuIE5JQyBEcml2ZXIKICMKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCAxZmYwNjZiLi5jNDA4MTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9ORVRYRU5fTklDX0hfCkBAIC02NSw4ICs2Niw4IEBACiAKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IgNAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMTEKLSNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMTEiCisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMzAKKyNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMzAiCiAKICNkZWZpbmUgTkVUWEVOX1ZFUlNJT05fQ09ERShhLCBiLCBjKQkoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQogCkBAIC03NywxOSArNzgsMTkgQEAKIAogI2RlZmluZSBQSEFOX1ZFTkRPUl9JRCAweDQwNDAKIAotI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+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+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAotCQkJCSAgJnN0YXRpb25sb3csIDQpKQotCQlyZXR1cm4gLUVJTzsKLQkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7Ci0JKChfX2xlMzIgKil2YWwpWzBdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmxvdyk7Ci0KLQltZW1jcHkoYWRkciwgdmFsICsgMiwgNik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTMyIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAppbmRleCBiMjkzYWRjLi41MDE4MzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCkBAIC05MCw2ICs5MSw3IEBACiAjZGVmaW5lIENSQl9SWF9MUk9fU1RBUlRfTlVNICAgICAgICBORVRYRU5fTklDX1JFRygweGMwKQogI2RlZmluZSBDUkJfTVBPUlRfTU9ERSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjNCkJLyogTXVsdGlwb3J0IE1vZGUgKi8KICNkZWZpbmUgQ1JCX0NNRF9SSU5HX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzgpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGNjKQogI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUiAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkNCkKICNkZWZpbmUgQ1JCX0NUWF9SRVNFVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZDgpCiAjZGVmaW5lIENSQl9IT1NUX1NUU19QUk9EICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk2NS5jIGIvZHJpdmVycy9uZXQvbmk2NS5jCmluZGV4IDI1NDA1NzIuLmRmNWY4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNjUuYworKysgYi9kcml2ZXJzL25ldC9uaTY1LmMKQEAgLTQ4MSw4ICs0ODEsOSBAQAogCWVsc2UgewogCQlpZihkZXYtPmRtYSA9PSAwKSB7CiAJCS8qICdzdHVjayB0ZXN0JyBmcm9tIGxhbmNlLmMgKi8KLQkJCWxvbmcgZG1hX2NoYW5uZWxzID0gKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKSB8Ci0JCQkJCSAgICAoaW5iKERNQTJfU1RBVF9SRUcpICYgMHhmMCk7CisJCQl1bnNpZ25lZCBsb25nIGRtYV9jaGFubmVscyA9CisJCQkJKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKQorCQkJCXwgKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOwogCQkJZm9yKGk9MTtpPDU7aSsrKSB7CiAJCQkJaW50IGRtYSA9IGRtYXRhYltpXTsKIAkJCQlpZih0ZXN0X2JpdChkbWEsJmRtYV9jaGFubmVscykgfHwgcmVxdWVzdF9kbWEoZG1hLCJuaTY1MTAiKSkKQEAgLTg5Nyw3ICs4OTgsNiBAQAogCiAJCWlmKGNzcjAgJiBDU1IwX0VSUikKIAkJewotCQkJc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7CiAJCQlpZihkZWJ1Z2xldmVsID4gMSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBnZW5lcmFsIGVycm9yOiAlMDR4LlxuIixkZXYtPm5hbWUsY3NyMCk7CiAJCQlpZihjc3IwICYgQ1NSMF9CQUJMKQpAQCAtOTIyLDggKzkyMiw3IEBACiAgaW50IGo7CiAgZm9yKGo9MDtqPFJNRE5VTTtqKyspCiAgewotCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwotCWludCBpLGssbnVtMSxudW0yOworCWludCBpLCBudW0yOwogCWZvcihpPVJNRE5VTS0xO2k+MDtpLS0pIHsKIAkJIG51bTIgPSAocC0+cm1kbnVtICsgaSkgJiAoUk1ETlVNLTEpOwogCQkgaWYoIShwLT5ybWRoZWFkW251bTJdLnUucy5zdGF0dXMgJiBSQ1ZfT1dOKSkKQEAgLTkzMSw2ICs5MzAsNyBAQAogCX0KIAogCWlmKGkpIHsKKwkJaW50IGssIG51bTE7CiAJCWZvcihrPTA7azxSTUROVU07aysrKSB7CiAJCQludW0xID0gKHAtPnJtZG51bSArIGspICYgKFJNRE5VTS0xKTsKIAkJCWlmKCEocC0+cm1kaGVhZFtudW0xXS51LnMuc3RhdHVzICYgUkNWX09XTikpCkBAIC05NDIsNyArOTQyLDYgQEAKIAkJaWYoZGVidWdsZXZlbCA+IDApCiAJCXsKIAkJCWNoYXIgYnVmWzI1Nl0sKmJ1ZjE7Ci0JCQlpbnQgazsKIAkJCWJ1ZjEgPSBidWY7CiAJCQlmb3Ioaz0wO2s8Uk1ETlVNO2srKykgewogCQkJCXNwcmludGYoYnVmMSwiJTAyeCAiLChwLT5ybWRoZWFkW2tdLnUucy5zdGF0dXMpKTsgLyogJiBSQ1ZfT1dOKSApOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAwYzBiNzUyLi41MGMxMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMTExNSw2ICsxMTE1LDEzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzX21paShzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCit7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBlcnI7CisJaW50IGJtc3IsIGFkdmVydCwgY3RybDEwMDAsIHN0YXQxMDAwLCBscGEsIGJtY3IsIGVzdGF0dXM7CisJaW50IHN1cHBvcnRlZCwgYWR2ZXJ0aXNpbmcsIGFjdGl2ZV9zcGVlZCwgYWN0aXZlX2R1cGxleDsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+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+aXJxKTsKKwogCXJldHVybiAwOwogCiBvdXRfcmVnaXN0ZXJfbmV0ZGV2OgpAQCAtMTU4Niw4ICsxNTkxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIFBDSV9ERVZJQ0VfSURfU0lMQU5fU0M5MjAzMSkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgUENJX0RFVklDRV9JRF9TSUxBTl84MTM5RCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHgyMDMxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCAweDgxMzkpIH0sCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZSk7CkBAIC0xNjAzLDcgKzE2MDgsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzYzkyMDMxX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFNDOTIwMzFfREVTQ1JJUFRJT04gIiAiIFNDOTIwMzFfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2M5MjAzMV9wY2lfZHJpdmVyKTsKIH0KIApAQCAtMTYxNyw1ICsxNjIxLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2VzYXIgRWR1YXJkbyBCYXJyb3MgPGNlc2FyYkBjZXNhcmIubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKFNDOTIwMzFfREVTQ1JJUFRJT04pOwotTU9EVUxFX1ZFUlNJT04oU0M5MjAzMV9WRVJTSU9OKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcgYi9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZwppbmRleCBjNTM1NDA4Li4xMmE4Mjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9zZmMvS2NvbmZpZwpAQCAtMiw3ICsyLDYgQEAKIAl0cmlzdGF0ZSAiU29sYXJmbGFyZSBTb2xhcnN0b3JtIFNGQzQwMDAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCiAJc2VsZWN0IE1JSQotCXNlbGVjdCBJTkVUX0xSTwogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBJMkMKIAlzZWxlY3QgSTJDX0FMR09CSVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oIGIvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmgKaW5kZXggZDk1YzIxOC4uZDU0ZDg0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2JpdGZpZWxkLmgKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiAvKiBTdGF0aWMgaW5pdGlhbGlzZXIgKi8KICNkZWZpbmUgRUZYX09XT1JEMzIoYSwgYiwgYywgZCkJCQkJCQlcCi0JeyAudTMyID0geyBfX2NvbnN0YW50X2NwdV90b19sZTMyKGEpLCBfX2NvbnN0YW50X2NwdV90b19sZTMyKGIpLCBcCi0JCSAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYyksIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoZCkgfSB9CisJeyAudTMyID0geyBjcHVfdG9fbGUzMihhKSwgY3B1X3RvX2xlMzIoYiksIFwKKwkJICAgY3B1X3RvX2xlMzIoYyksIGNwdV90b19sZTMyKGQpIH0gfQogCiAjZW5kaWYgLyogRUZYX0JJVEZJRUxEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYwppbmRleCA2NDkwMzQ5Li41MTgyYWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCkBAIC0yNiw3ICsyNiw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IChzdHJ1Y3QgZWZ4X25pYyAqKWNvbnRleHQ7CiAJc3RydWN0IGVmeF9ibGlua2VyICpibCA9ICZlZngtPmJvYXJkX2luZm8uYmxpbmtlcjsKLQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZChlZngsIGJsLT5zdGF0ZSk7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQoZWZ4LCBibC0+c3RhdGUpOwogCWJsLT5zdGF0ZSA9ICFibC0+c3RhdGU7CiAJaWYgKGJsLT5yZXN1Ym1pdCkKIAkJbW9kX3RpbWVyKCZibC0+dGltZXIsIGppZmZpZXMgKyBCTElOS19JTlRFUlZBTCk7CkBAIC00OCw3ICs0OCw3IEBACiAJCWJsaW5rZXItPnJlc3VibWl0ID0gZmFsc2U7CiAJCWlmIChibGlua2VyLT50aW1lci5mdW5jdGlvbikKIAkJCWRlbF90aW1lcl9zeW5jKCZibGlua2VyLT50aW1lcik7Ci0JCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkKGVmeCwgZmFsc2UpOworCQllZngtPmJvYXJkX2luZm8uaW5pdF9sZWRzKGVmeCk7CiAJfQogfQogCkBAIC0xODUsNyArMTg1LDcgQEAKICNkZWZpbmUgU0ZFNDAwMl9SWF9MRUQgICAgKDApCS8qIEdyZWVuICovCiAjZGVmaW5lIFNGRTQwMDJfVFhfTEVEICAgICgxKQkvKiBBbWJlciAqLwogCi1zdGF0aWMgaW50IHNmZTQwMDJfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgdm9pZCBzZmU0MDAyX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCS8qIFNldCB0aGUgVFggYW5kIFJYIExFRHMgdG8gcmVmbGVjdCBzdGF0dXMgYW5kIGFjdGl2aXR5LCBhbmQgdGhlCiAJICogZmF1bHQgTEVEIG9mZiAqLwpAQCAtMTk0LDExICsxOTQsOSBAQAogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9SWF9MRUQsCiAJCSAgICBRVUFLRV9MRURfUlhMSU5LIHwgUVVBS0VfTEVEX0xJTktfQUNUU1RBVCk7CiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX0ZBVUxUX0xFRCwgUVVBS0VfTEVEX09GRik7Ci0JZWZ4LT5ib2FyZF9pbmZvLmJsaW5rZXIubGVkX251bSA9IFNGRTQwMDJfRkFVTFRfTEVEOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZmU0MDAyX2ZhdWx0X2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQorc3RhdGljIHZvaWQgc2ZlNDAwMl9zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgc3RhdGUpCiB7CiAJeGZwX3NldF9sZWQoZWZ4LCBTRkU0MDAyX0ZBVUxUX0xFRCwgc3RhdGUgPyBRVUFLRV9MRURfT04gOgogCQkJUVVBS0VfTEVEX09GRik7CkBAIC0yMjIsNyArMjIwLDY3IEBACiAJCXJldHVybiByYzsKIAllZngtPmJvYXJkX2luZm8ubW9uaXRvciA9IHNmZTQwMDJfY2hlY2tfaHc7CiAJZWZ4LT5ib2FyZF9pbmZvLmluaXRfbGVkcyA9IHNmZTQwMDJfaW5pdF9sZWRzOwotCWVmeC0+Ym9hcmRfaW5mby5zZXRfZmF1bHRfbGVkID0gc2ZlNDAwMl9mYXVsdF9sZWQ7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQgPSBzZmU0MDAyX3NldF9pZF9sZWQ7CisJZWZ4LT5ib2FyZF9pbmZvLmJsaW5rID0gYm9hcmRfYmxpbms7CisJZWZ4LT5ib2FyZF9pbmZvLmZpbmkgPSBlZnhfZmluaV9sbTg3OworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN1cHBvcnQgZm9yIHRoZSBTRk40MTEyRgorICoKKyAqLworc3RhdGljIHU4IHNmbjQxMTJmX2xtODdfY2hhbm5lbCA9IDB4MDM7IC8qIHVzZSBBSU4gbm90IEZBTiBpbnB1dHMgKi8KKworc3RhdGljIGNvbnN0IHU4IHNmbjQxMTJmX2xtODdfcmVnc1tdID0geworCUxNODdfSU5fTElNSVRTKDAsIDB4ODMsIDB4OTEpLAkJLyogMi41VjogIDEuOFYgKy8tIDUlICovCisJTE04N19JTl9MSU1JVFMoMSwgMHg1MSwgMHg1YSksCQkvKiBWY2NwMTogMS4yViArLy0gNSUgKi8KKwlMTTg3X0lOX0xJTUlUUygyLCAweGI2LCAweGNhKSwJCS8qIDMuM1Y6ICAzLjNWICsvLSA1JSAqLworCUxNODdfSU5fTElNSVRTKDQsIDB4YjAsIDB4ZTApLAkJLyogMTJWOiAgIDExLTE0ViAqLworCUxNODdfSU5fTElNSVRTKDUsIDB4NDQsIDB4NGIpLAkJLyogVmNjcDI6IDEuMFYgKy8tIDUlICovCisJTE04N19BSU5fTElNSVRTKDEsIDB4OTEsIDB4YTEpLAkJLyogQUlOMjogIDEuNVYgKy8tIDUlICovCisJTE04N19URU1QX0lOVF9MSU1JVFMoMTAsIDYwKSwJCS8qIGJvYXJkICovCisJTE04N19URU1QX0VYVDFfTElNSVRTKDEwLCA3MCksCQkvKiBGYWxjb24gKi8KKwkwCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNmbjQxMTJmX2h3bW9uX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oImxtODciLCAweDJlKSwKKwkucGxhdGZvcm1fZGF0YQk9ICZzZm40MTEyZl9sbTg3X2NoYW5uZWwsCisJLmlycQkJPSAtMSwKK307CisKKyNkZWZpbmUgU0ZONDExMkZfQUNUX0xFRAkwCisjZGVmaW5lIFNGTjQxMTJGX0xJTktfTEVECTEKKworc3RhdGljIHZvaWQgc2ZuNDExMmZfaW5pdF9sZWRzKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9BQ1RfTEVELAorCQkgICAgUVVBS0VfTEVEX1JYTElOSyB8IFFVQUtFX0xFRF9MSU5LX0FDVCk7CisJeGZwX3NldF9sZWQoZWZ4LCBTRk40MTEyRl9MSU5LX0xFRCwKKwkJICAgIFFVQUtFX0xFRF9SWExJTksgfCBRVUFLRV9MRURfTElOS19TVEFUKTsKK30KKworc3RhdGljIHZvaWQgc2ZuNDExMmZfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQoreworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfTElOS19MRUQsCisJCSAgICBzdGF0ZSA/IFFVQUtFX0xFRF9PTiA6IFFVQUtFX0xFRF9PRkYpOworfQorCitzdGF0aWMgaW50IHNmbjQxMTJmX2NoZWNrX2h3KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJLyogTWFzayBvdXQgdW51c2VkIHNlbnNvcnMgKi8KKwlyZXR1cm4gZWZ4X2NoZWNrX2xtODcoZWZ4LCB+MHg0OCk7Cit9CisKK3N0YXRpYyBpbnQgc2ZuNDExMmZfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCWludCByYyA9IGVmeF9pbml0X2xtODcoZWZ4LCAmc2ZuNDExMmZfaHdtb25faW5mbywgc2ZuNDExMmZfbG04N19yZWdzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwllZngtPmJvYXJkX2luZm8ubW9uaXRvciA9IHNmbjQxMTJmX2NoZWNrX2h3OworCWVmeC0+Ym9hcmRfaW5mby5pbml0X2xlZHMgPSBzZm40MTEyZl9pbml0X2xlZHM7CisJZWZ4LT5ib2FyZF9pbmZvLnNldF9pZF9sZWQgPSBzZm40MTEyZl9zZXRfaWRfbGVkOwogCWVmeC0+Ym9hcmRfaW5mby5ibGluayA9IGJvYXJkX2JsaW5rOwogCWVmeC0+Ym9hcmRfaW5mby5maW5pID0gZWZ4X2ZpbmlfbG04NzsKIAlyZXR1cm4gMDsKQEAgLTI0Myw2ICszMDEsOCBAQAogCXsgRUZYX0JPQVJEX1NGRTQwMDIsICJTRkU0MDAyIiwgIlhGUCBhZGFwdGVyIiwgc2ZlNDAwMl9pbml0IH0sCiAJeyBFRlhfQk9BUkRfU0ZONDExMVQsICJTRk40MTExVCIsICIxMDAvMTAwMC8xMEdCQVNFLVQgYWRhcHRlciIsCiAJICBzZm40MTExdF9pbml0IH0sCisJeyBFRlhfQk9BUkRfU0ZONDExMkYsICJTRk40MTEyRiIsICJTRlArIGFkYXB0ZXIiLAorCSAgc2ZuNDExMmZfaW5pdCB9LAogfTsKIAogdm9pZCBlZnhfc2V0X2JvYXJkX2luZm8oc3RydWN0IGVmeF9uaWMgKmVmeCwgdTE2IHJldmlzaW9uX2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmggYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKaW5kZXggZDkzYzZjNi4uNDQ5NDJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaApAQCAtMTUsNiArMTUsNyBAQAogCUVGWF9CT0FSRF9TRkU0MDAxID0gMSwKIAlFRlhfQk9BUkRfU0ZFNDAwMiA9IDIsCiAJRUZYX0JPQVJEX1NGTjQxMTFUID0gMHg1MSwKKwlFRlhfQk9BUkRfU0ZONDExMkYgPSAweDUyLAogfTsKIAogZXh0ZXJuIHZvaWQgZWZ4X3NldF9ib2FyZF9pbmZvKHN0cnVjdCBlZnhfbmljICplZngsIHUxNiByZXZpc2lvbl9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCBhYjBlMDliLi42ZWZmOWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0xMzMsNiArMTMzLDE2IEBACiBtb2R1bGVfcGFyYW0ocGh5X2ZsYXNoX2NmZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGh5X2ZsYXNoX2NmZywgIlNldCBQSFlzIGludG8gcmVmbGFzaCBtb2RlIGluaXRpYWxseSIpOwogCitzdGF0aWMgdW5zaWduZWQgaXJxX2FkYXB0X2xvd190aHJlc2ggPSAxMDAwMDsKK21vZHVsZV9wYXJhbShpcnFfYWRhcHRfbG93X3RocmVzaCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9sb3dfdGhyZXNoLAorCQkgIlRocmVzaG9sZCBzY29yZSBmb3IgcmVkdWNpbmcgSVJRIG1vZGVyYXRpb24iKTsKKworc3RhdGljIHVuc2lnbmVkIGlycV9hZGFwdF9oaWdoX3RocmVzaCA9IDIwMDAwOworbW9kdWxlX3BhcmFtKGlycV9hZGFwdF9oaWdoX3RocmVzaCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlycV9hZGFwdF9oaWdoX3RocmVzaCwKKwkJICJUaHJlc2hvbGQgc2NvcmUgZm9yIGluY3JlYXNpbmcgSVJRIG1vZGVyYXRpb24iKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVXRpbGl0eSBmdW5jdGlvbnMgYW5kIHByb3RvdHlwZXMKQEAgLTE4Miw3ICsxOTIsNiBAQAogCQljaGFubmVsLT5yeF9wa3QgPSBOVUxMOwogCX0KIAotCWVmeF9mbHVzaF9scm8oY2hhbm5lbCk7CiAJZWZ4X3J4X3N0cmF0ZWd5KGNoYW5uZWwpOwogCiAJZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycygmZWZ4LT5yeF9xdWV1ZVtjaGFubmVsLT5jaGFubmVsXSk7CkBAIC0yMjQsMTIgKzIzMyw0MSBAQAogCXJ4X3BhY2tldHMgPSBlZnhfcHJvY2Vzc19jaGFubmVsKGNoYW5uZWwsIGJ1ZGdldCk7CiAKIAlpZiAocnhfcGFja2V0cyA8IGJ1ZGdldCkgeworCQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OworCisJCWlmIChjaGFubmVsLT51c2VkX2ZsYWdzICYgRUZYX1VTRURfQllfUlggJiYKKwkJICAgIGVmeC0+aXJxX3J4X2FkYXB0aXZlICYmCisJCSAgICB1bmxpa2VseSgrK2NoYW5uZWwtPmlycV9jb3VudCA9PSAxMDAwKSkgeworCQkJdW5zaWduZWQgb2xkX2lycV9tb2RlcmF0aW9uID0gY2hhbm5lbC0+aXJxX21vZGVyYXRpb247CisKKwkJCWlmICh1bmxpa2VseShjaGFubmVsLT5pcnFfbW9kX3Njb3JlIDwKKwkJCQkgICAgIGlycV9hZGFwdF9sb3dfdGhyZXNoKSkgeworCQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0KKwkJCQkJbWF4X3QoaW50LAorCQkJCQkgICAgICBjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAtCisJCQkJCSAgICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04sCisJCQkJCSAgICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04pOworCQkJfSBlbHNlIGlmICh1bmxpa2VseShjaGFubmVsLT5pcnFfbW9kX3Njb3JlID4KKwkJCQkJICAgIGlycV9hZGFwdF9oaWdoX3RocmVzaCkpIHsKKwkJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9CisJCQkJCW1pbihjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiArCisJCQkJCSAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OLAorCQkJCQkgICAgZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbik7CisJCQl9CisKKwkJCWlmIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAhPSBvbGRfaXJxX21vZGVyYXRpb24pCisJCQkJZmFsY29uX3NldF9pbnRfbW9kZXJhdGlvbihjaGFubmVsKTsKKworCQkJY2hhbm5lbC0+aXJxX2NvdW50ID0gMDsKKwkJCWNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgPSAwOworCQl9CisKIAkJLyogVGhlcmUgaXMgbm8gcmFjZSBoZXJlOyBhbHRob3VnaCBuYXBpX2Rpc2FibGUoKSB3aWxsCi0JCSAqIG9ubHkgd2FpdCBmb3IgbmV0aWZfcnhfY29tcGxldGUoKSwgdGhpcyBpc24ndCBhIHByb2JsZW0KKwkJICogb25seSB3YWl0IGZvciBuYXBpX2NvbXBsZXRlKCksIHRoaXMgaXNuJ3QgYSBwcm9ibGVtCiAJCSAqIHNpbmNlIGVmeF9jaGFubmVsX3Byb2Nlc3NlZCgpIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYKIAkJICogaW50ZXJydXB0cyBoYXZlIGFscmVhZHkgYmVlbiBkaXNhYmxlZC4KIAkJICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllZnhfY2hhbm5lbF9wcm9jZXNzZWQoY2hhbm5lbCk7CiAJfQogCkBAIC01NTgsNiArNTk2LDggQEAKIAogfQogCitzdGF0aWMgdm9pZCBlZnhfZmluaV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpOworCiAvKiBUaGlzIGNhbGwgcmVpbml0aWFsaXNlcyB0aGUgTUFDIHRvIHBpY2sgdXAgbmV3IFBIWSBzZXR0aW5ncy4gVGhlCiAgKiBjYWxsZXIgbXVzdCBob2xkIHRoZSBtYWNfbG9jayAqLwogdm9pZCBfX2VmeF9yZWNvbmZpZ3VyZV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpCkBAIC01OTMsOCArNjMzLDggQEAKIAogZmFpbDoKIAlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byByZWNvbmZpZ3VyZSBNQUNcbiIpOwotCWVmeC0+cGh5X29wLT5maW5pKGVmeCk7Ci0JZWZ4LT5wb3J0X2luaXRpYWxpemVkID0gZmFsc2U7CisJZWZ4LT5wb3J0X2VuYWJsZWQgPSBmYWxzZTsKKwllZnhfZmluaV9wb3J0KGVmeCk7CiB9CiAKIC8qIFJlaW5pdGlhbGlzZSB0aGUgTUFDIHRvIHBpY2sgdXAgbmV3IFBIWSBzZXR0aW5ncywgZXZlbiBpZiB0aGUgcG9ydCBpcwpAQCAtOTkwLDcgKzEwMzAsNyBAQAogCWVmeF9zZXRfY2hhbm5lbHMoZWZ4KTsKIAogCS8qIEluaXRpYWxpc2UgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIHNldHRpbmdzICovCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF9pcnFfbW9kX3VzZWMsIHJ4X2lycV9tb2RfdXNlYyk7CisJZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF9pcnFfbW9kX3VzZWMsIHJ4X2lycV9tb2RfdXNlYywgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODcsNyArMTIyNyw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFNldCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBwYXJhbWV0ZXJzICovCi12b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywgaW50IHJ4X3VzZWNzKQordm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsIGludCByeF91c2VjcywKKwkJCSAgICAgYm9vbCByeF9hZGFwdGl2ZSkKIHsKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKQEAgLTExOTcsNiArMTIzOCw4IEBACiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpCiAJCXR4X3F1ZXVlLT5jaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IHR4X3VzZWNzOwogCisJZWZ4LT5pcnFfcnhfYWRhcHRpdmUgPSByeF9hZGFwdGl2ZTsKKwllZngtPmlycV9yeF9tb2RlcmF0aW9uID0gcnhfdXNlY3M7CiAJZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpCiAJCXJ4X3F1ZXVlLT5jaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IHJ4X3VzZWNzOwogfQpAQCAtMTI2OSwxOCArMTMxMiwxMSBAQAogc3RhdGljIGludCBlZnhfaW5pdF9uYXBpKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwotCWludCByYzsKIAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkgewogCQljaGFubmVsLT5uYXBpX2RldiA9IGVmeC0+bmV0X2RldjsKLQkJcmMgPSBlZnhfbHJvX2luaXQoJmNoYW5uZWwtPmxyb19tZ3IsIGVmeCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXJyOwogCX0KIAlyZXR1cm4gMDsKLSBlcnI6Ci0JZWZ4X2ZpbmlfbmFwaShlZngpOwotCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgZWZ4X2ZpbmlfbmFwaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtMTI4OCw3ICsxMzI0LDYgQEAKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKLQkJZWZ4X2xyb19maW5pKCZjaGFubmVsLT5scm9fbWdyKTsKIAkJY2hhbm5lbC0+bmFwaV9kZXYgPSBOVUxMOwogCX0KIH0KQEAgLTE2NzYsNyArMTcxMSw4IEBACiAJCQlyYyA9IGVmeC0+cGh5X29wLT5pbml0KGVmeCk7CiAJCQlpZiAocmMpCiAJCQkJb2sgPSBmYWxzZTsKLQkJfSBlbHNlCisJCX0KKwkJaWYgKCFvaykKIAkJCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOwogCX0KIApAQCAtMTg1Nyw4ICsxODkzLDggQEAKIAogc3RhdGljIHN0cnVjdCBlZnhfYm9hcmQgZWZ4X2R1bW15X2JvYXJkX2luZm8gPSB7CiAJLmluaXQJCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAotCS5pbml0X2xlZHMJPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCi0JLnNldF9mYXVsdF9sZWQJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKKwkuaW5pdF9sZWRzCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkuc2V0X2lkX2xlZAk9IGVmeF9wb3J0X2R1bW15X29wX2JsaW5rLAogCS5tb25pdG9yCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5ibGluawkJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKIAkuZmluaQkJPSBlZnhfcG9ydF9kdW1teV9vcF92b2lkLApAQCAtMjEyMCw3ICsyMTU2LDcgQEAKIAluZXRfZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkgICAgICBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX1RTTyk7CiAJaWYgKGxybykKLQkJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCS8qIE1hc2sgZm9yIGZlYXR1cmVzIHRoYXQgYWxzbyBhcHBseSB0byBWTEFOIGRldmljZXMgKi8KIAluZXRfZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkJICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IDU1ZDBmMTMuLmRhMTU3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTUyLDcgKzUyLDcgQEAKIGV4dGVybiB2b2lkIGVmeF9zdXNwZW5kKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIHZvaWQgZWZ4X3Jlc3VtZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9pbml0X2lycV9tb2RlcmF0aW9uKHN0cnVjdCBlZnhfbmljICplZngsIGludCB0eF91c2VjcywKLQkJCQkgICAgaW50IHJ4X3VzZWNzKTsKKwkJCQkgICAgaW50IHJ4X3VzZWNzLCBib29sIHJ4X2FkYXB0aXZlKTsKIGV4dGVybiBpbnQgZWZ4X3JlcXVlc3RfcG93ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IG13LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGVmeF9oZXhfZHVtcChjb25zdCB1OCAqLCB1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiAKQEAgLTgwLDcgKzgwLDcgQEAKIAkJICBjaGFubmVsLT5jaGFubmVsLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAljaGFubmVsLT53b3JrX3BlbmRpbmcgPSB0cnVlOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmNoYW5uZWwtPm5hcGlfc3RyKTsKKwluYXBpX3NjaGVkdWxlKCZjaGFubmVsLT5uYXBpX3N0cik7CiB9CiAKICNlbmRpZiAvKiBFRlhfRUZYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCmluZGV4IDdiNTkyNGMwLi42NDMwOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTUyOSw3ICs1MjksMTQgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAKLQlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmZWZ4LT5taWkpOworCWlmIChlZngtPnBoeV9vcC0+bW1kcyAmIERFVl9QUkVTRU5UX0JJVChNRElPX01NRF9BTikpIHsKKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZyhlZngsIGVmeC0+bWlpLnBoeV9pZCwgTURJT19NTURfQU4sCisJCQkJICAgICAgIE1ESU9fTU1EUkVHX0NUUkwxLAorCQkJCSAgICAgICBfX2ZmcyhCTUNSX0FOUkVTVEFSVCksIHRydWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKIHN0YXRpYyB1MzIgZWZ4X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCkBAIC01OTcsNyArNjA0LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0Jc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCiAJbWVtc2V0KGNvYWxlc2NlLCAwLCBzaXplb2YoKmNvYWxlc2NlKSk7CkBAIC02MTUsMTQgKzYyMSw4IEBACiAJCX0KIAl9CiAKLQkvKiBGaW5kIGxvd2VzdCBJUlEgbW9kZXJhdGlvbiBhY3Jvc3MgYWxsIHVzZWQgUlggcXVldWVzICovCi0JY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IH4oKHUzMikgMCk7Ci0JZWZ4X2Zvcl9lYWNoX3J4X3F1ZXVlKHJ4X3F1ZXVlLCBlZngpIHsKLQkJY2hhbm5lbCA9IHJ4X3F1ZXVlLT5jaGFubmVsOwotCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPCBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxKQotCQkJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9Ci0JCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb247Ci0JfQorCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBlZngtPmlycV9yeF9hZGFwdGl2ZTsKKwljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID0gZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbjsKIAogCXJldHVybiAwOwogfQpAQCAtNjM2LDEwICs2MzYsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7Ci0JdW5zaWduZWQgdHhfdXNlY3MsIHJ4X3VzZWNzOworCXVuc2lnbmVkIHR4X3VzZWNzLCByeF91c2VjcywgYWRhcHRpdmU7CiAKLQlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSB8fAotCSAgICBjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQorCWlmIChjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzIHx8IGNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjcykgewpAQCAtNjUwLDYgKzY0OSw3IEBACiAKIAlyeF91c2VjcyA9IGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnE7CiAJdHhfdXNlY3MgPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaXJxOworCWFkYXB0aXZlID0gY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKIAogCS8qIElmIHRoZSBjaGFubmVsIGlzIHNoYXJlZCBvbmx5IGFsbG93IFJYIHBhcmFtZXRlcnMgdG8gYmUgc2V0ICovCiAJZWZ4X2Zvcl9lYWNoX3R4X3F1ZXVlKHR4X3F1ZXVlLCBlZngpIHsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQl9CiAJfQogCi0JZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oZWZ4LCB0eF91c2VjcywgcnhfdXNlY3MpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfdXNlY3MsIHJ4X3VzZWNzLCBhZGFwdGl2ZSk7CiAKIAkvKiBSZXNldCBjaGFubmVsIHRvIHBpY2sgdXAgbmV3IG1vZGVyYXRpb24gdmFsdWUuICBOb3RlIHRoYXQKIAkgKiB0aGlzIG1heSBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBpcnFfbW9kZXJhdGlvbiBmaWVsZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IGQ1Mzc4ZTYuLjIzYTFiMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTM5LDExICszOSwxNiBAQAogICogQG5leHRfYnVmZmVyX3RhYmxlOiBGaXJzdCBhdmFpbGFibGUgYnVmZmVyIHRhYmxlIGlkCiAgKiBAcGNpX2RldjI6IFRoZSBzZWNvbmRhcnkgUENJIGRldmljZSBpZiBwcmVzZW50CiAgKiBAaTJjX2RhdGE6IE9wZXJhdGlvbnMgYW5kIHN0YXRlIGZvciBJMkMgYml0LWJhc2hpbmcgYWxnb3JpdGhtCisgKiBAaW50X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzIHNlZW4gcmVjZW50bHkKKyAqIEBpbnRfZXJyb3JfZXhwaXJlOiBUaW1lIGF0IHdoaWNoIGVycm9yIGNvdW50IHdpbGwgYmUgZXhwaXJlZAogICovCiBzdHJ1Y3QgZmFsY29uX25pY19kYXRhIHsKIAl1bnNpZ25lZCBuZXh0X2J1ZmZlcl90YWJsZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjI7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19kYXRhOworCisJdW5zaWduZWQgaW50X2Vycm9yX2NvdW50OworCXVuc2lnbmVkIGxvbmcgaW50X2Vycm9yX2V4cGlyZTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE5LDggKzEyNCwxMiBAQAogI2RlZmluZSBGQUxDT05fRVZRX1NJWkUgNDA5NgogI2RlZmluZSBGQUxDT05fRVZRX01BU0sgKEZBTENPTl9FVlFfU0laRSAtIDEpCiAKLS8qIE1heCBudW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzLiBBZnRlciB0aGlzIHJlc2V0cyB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KLSNkZWZpbmUgRkFMQ09OX01BWF9JTlRfRVJST1JTIDQKKy8qIElmIEZBTENPTl9NQVhfSU5UX0VSUk9SUyBpbnRlcm5hbCBlcnJvcnMgb2NjdXIgd2l0aGluCisgKiBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSBzZWNvbmRzLCB3ZSBjb25zaWRlciB0aGUgTklDIGJyb2tlbiBhbmQKKyAqIGRpc2FibGUgaXQuCisgKi8KKyNkZWZpbmUgRkFMQ09OX0lOVF9FUlJPUl9FWFBJUkUgMzYwMAorI2RlZmluZSBGQUxDT05fTUFYX0lOVF9FUlJPUlMgNQogCiAvKiBXZSBwb2xsIGZvciBldmVudHMgZXZlcnkgRkxVU0hfSU5URVJWQUwgbXMsIGFuZCBjaGVjayBGTFVTSF9QT0xMX0NPVU5UIHRpbWVzCiAgKi8KQEAgLTE0NiwxMyArMTU1LDYgQEAKIC8qIER1bW15IFNSQU0gc2l6ZSBjb2RlICovCiAjZGVmaW5lIFNSTV9OQl9CU1pfT05DSElQX09OTFkgKC0xKQogCi0vKiBCZSBuaWNlIGlmIHRoZXNlIChvciBlcXVpdi4pIHdlcmUgaW4gbGludXgvcGNpX3JlZ3MuaCwgYnV0IHRoZXkncmUgbm90LiAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMX0xCTgkxOAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMX0xCTgkyNgotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEX0xCTgk1Ci0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSUQJCTB4M2YwCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0xOS19XSURfTEJOCTQKLQogI2RlZmluZSBGQUxDT05fSVNfRFVBTF9GVU5DKGVmeCkJCVwKIAkoZmFsY29uX3JldihlZngpIDwgRkFMQ09OX1JFVl9CMCkKIApAQCAtNzI3LDYgKzcyOSw5IEBACiAJCXR4X2V2X2Rlc2NfcHRyID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfREVTQ19QVFIpOwogCQl0eF9ldl9xX2xhYmVsID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgVFhfRVZfUV9MQUJFTCk7CiAJCXR4X3F1ZXVlID0gJmVmeC0+dHhfcXVldWVbdHhfZXZfcV9sYWJlbF07CisJCWNoYW5uZWwtPmlycV9tb2Rfc2NvcmUgKz0KKwkJCSh0eF9ldl9kZXNjX3B0ciAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50KSAmCisJCQllZngtPnR5cGUtPnR4ZF9yaW5nX21hc2s7CiAJCWVmeF94bWl0X2RvbmUodHhfcXVldWUsIHR4X2V2X2Rlc2NfcHRyKTsKIAl9IGVsc2UgaWYgKEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX1dRX0ZGX0ZVTEwpKSB7CiAJCS8qIFJld3JpdGUgdGhlIEZJRk8gd3JpdGUgcG9pbnRlciAqLwpAQCAtODk2LDYgKzkwMSw4IEBACiAJCQlkaXNjYXJkID0gdHJ1ZTsKIAl9CiAKKwljaGFubmVsLT5pcnFfbW9kX3Njb3JlICs9IDI7CisKIAkvKiBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0ICovCiAJZWZ4X3J4X3BhY2tldChyeF9xdWV1ZSwgcnhfZXZfZGVzY19wdHIsIHJ4X2V2X2J5dGVfY250LAogCQkgICAgICBjaGVja3N1bW1lZCwgZGlzY2FyZCk7CkBAIC0xMDczLDE0ICsxMDgwLDE1IEBACiAJCSAqIHByb2dyYW0gaXMgYmFzZWQgYXQgMC4gIFNvIGFjdHVhbCBpbnRlcnJ1cHQgbW9kZXJhdGlvbgogCQkgKiBhY2hpZXZlZCBpcyAoKHggKyAxKSAqIHJlcykuCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgcmVzID0gNTsKLQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLT0gKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uICUgcmVzKTsKLQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgcmVzKQotCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByZXM7CisJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC09IChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAlCisJCQkJCSAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTikKKwkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0gRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTjsKIAkJRUZYX1BPUFVMQVRFX0RXT1JEXzIodGltZXJfY21kLAogCQkJCSAgICAgVElNRVJfTU9ERSwgVElNRVJfTU9ERV9JTlRfSExET0ZGLAogCQkJCSAgICAgVElNRVJfVkFMLAotCQkJCSAgICAgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC8gcmVzKSAtIDEpOworCQkJCSAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLworCQkJCSAgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiAtIDEpOwogCX0gZWxzZSB7CiAJCUVGWF9QT1BVTEFURV9EV09SRF8yKHRpbWVyX2NtZCwKIAkJCQkgICAgIFRJTUVSX01PREUsIFRJTUVSX01PREVfRElTLApAQCAtMTE4NywzMSArMTE5NSwyOSBAQAogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7Ci0JdW5zaWduZWQgaW50IHJlYWRfcHRyLCBpOworCXVuc2lnbmVkIGludCByZWFkX3B0ciA9IGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cjsKKwl1bnNpZ25lZCBpbnQgZW5kX3B0ciA9IChyZWFkX3B0ciAtIDEpICYgRkFMQ09OX0VWUV9NQVNLOwogCi0JcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7Ci0JZm9yIChpID0gMDsgaSA8IEZBTENPTl9FVlFfU0laRTsgKytpKSB7CisJZG8gewogCQllZnhfcXdvcmRfdCAqZXZlbnQgPSBmYWxjb25fZXZlbnQoY2hhbm5lbCwgcmVhZF9wdHIpOwogCQlpbnQgZXZfY29kZSwgZXZfc3ViX2NvZGUsIGV2X3F1ZXVlOwogCQlib29sIGV2X2ZhaWxlZDsKKwogCQlpZiAoIWZhbGNvbl9ldmVudF9wcmVzZW50KGV2ZW50KSkKIAkJCWJyZWFrOwogCiAJCWV2X2NvZGUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBFVl9DT0RFKTsKLQkJaWYgKGV2X2NvZGUgIT0gRFJJVkVSX0VWX0RFQ09ERSkKLQkJCWNvbnRpbnVlOwotCiAJCWV2X3N1Yl9jb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRFJJVkVSX0VWX1NVQl9DT0RFKTsKLQkJc3dpdGNoIChldl9zdWJfY29kZSkgewotCQljYXNlIFRYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERToKKwkJaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkgICAgZXZfc3ViX2NvZGUgPT0gVFhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfVFhfREVTQ1FfSUQpOwogCQkJaWYgKGV2X3F1ZXVlIDwgRUZYX1RYX1FVRVVFX0NPVU5UKSB7CiAJCQkJdHhfcXVldWUgPSBlZngtPnR4X3F1ZXVlICsgZXZfcXVldWU7CiAJCQkJdHhfcXVldWUtPmZsdXNoZWQgPSB0cnVlOwogCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFOgorCQl9IGVsc2UgaWYgKGV2X2NvZGUgPT0gRFJJVkVSX0VWX0RFQ09ERSAmJgorCQkJICAgZXZfc3ViX2NvZGUgPT0gUlhfREVTQ1FfRkxTX0RPTkVfRVZfREVDT0RFKSB7CiAJCQlldl9xdWV1ZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCiAJCQkJCQkgICBEUklWRVJfRVZfUlhfREVTQ1FfSUQpOwogCQkJZXZfZmFpbGVkID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwKQEAgLTEyMjUsMTEgKzEyMzEsMTAgQEAKIAkJCQllbHNlCiAJCQkJCXJ4X3F1ZXVlLT5mbHVzaGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwogCQl9CiAKIAkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIEZBTENPTl9FVlFfTUFTSzsKLQl9CisJfSB3aGlsZSAocmVhZF9wdHIgIT0gZW5kX3B0cik7CiB9CiAKIC8qIEhhbmRsZSB0eCBhbmQgcnggZmx1c2hlcyBhdCB0aGUgc2FtZSB0aW1lLCBzaW5jZSB0aGV5IHJ1biBpbgpAQCAtMTM3Nyw3ICsxMzgyLDYgQEAKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOwogCWVmeF9vd29yZF90IGZhdGFsX2ludHI7CiAJaW50IGVycm9yLCBtZW1fcGVycjsKLQlzdGF0aWMgaW50IG5faW50X2Vycm9yczsKIAogCWZhbGNvbl9yZWFkKGVmeCwgJmZhdGFsX2ludHIsIEZBVEFMX0lOVFJfUkVHX0tFUik7CiAJZXJyb3IgPSBFRlhfT1dPUkRfRklFTEQoZmF0YWxfaW50ciwgSU5UX0tFUl9FUlJPUik7CkBAIC0xNDA0LDcgKzE0MDgsMTQgQEAKIAkJcGNpX2NsZWFyX21hc3RlcihuaWNfZGF0YS0+cGNpX2RldjIpOwogCWZhbGNvbl9kaXNhYmxlX2ludGVycnVwdHMoZWZ4KTsKIAotCWlmICgrK25faW50X2Vycm9ycyA8IEZBTENPTl9NQVhfSU5UX0VSUk9SUykgeworCS8qIENvdW50IGVycm9ycyBhbmQgcmVzZXQgb3IgZGlzYWJsZSB0aGUgTklDIGFjY29yZGluZ2x5ICovCisJaWYgKG5pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPT0gMCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIG5pY19kYXRhLT5pbnRfZXJyb3JfZXhwaXJlKSkgeworCQluaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50ID0gMDsKKwkJbmljX2RhdGEtPmludF9lcnJvcl9leHBpcmUgPQorCQkJamlmZmllcyArIEZBTENPTl9JTlRfRVJST1JfRVhQSVJFICogSFo7CisJfQorCWlmICgrK25pY19kYXRhLT5pbnRfZXJyb3JfY291bnQgPCBGQUxDT05fTUFYX0lOVF9FUlJPUlMpIHsKIAkJRUZYX0VSUihlZngsICJTWVNURU0gRVJST1IgLSByZXNldCBzY2hlZHVsZWRcbiIpOwogCQllZnhfc2NoZWR1bGVfcmVzZXQoZWZ4LCBSRVNFVF9UWVBFX0lOVF9FUlJPUik7CiAJfSBlbHNlIHsKQEAgLTE0MjMsNiArMTQzNCw3IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGRldl9pZDsKIAllZnhfb3dvcmRfdCAqaW50X2tlciA9IGVmeC0+aXJxX3N0YXR1cy5hZGRyOworCWlycXJldHVybl90IHJlc3VsdCA9IElSUV9OT05FOwogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKIAllZnhfZHdvcmRfdCByZWc7CiAJdTMyIHF1ZXVlczsKQEAgLTE0MzcsMjMgKzE0NDksMjQgQEAKIAlpZiAodW5saWtlbHkoc3lzZXJyKSkKIAkJcmV0dXJuIGZhbGNvbl9mYXRhbF9pbnRlcnJ1cHQoZWZ4KTsKIAotCWlmIChxdWV1ZXMgPT0gMCkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JZWZ4LT5sYXN0X2lycV9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKLQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7Ci0KIAkvKiBTY2hlZHVsZSBwcm9jZXNzaW5nIG9mIGFueSBpbnRlcnJ1cHRpbmcgcXVldWVzICovCi0JY2hhbm5lbCA9ICZlZngtPmNoYW5uZWxbMF07Ci0Jd2hpbGUgKHF1ZXVlcykgewotCQlpZiAocXVldWVzICYgMHgwMSkKKwllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKKwkJaWYgKChxdWV1ZXMgJiAxKSB8fAorCQkgICAgZmFsY29uX2V2ZW50X3ByZXNlbnQoCisJCQkgICAgZmFsY29uX2V2ZW50KGNoYW5uZWwsIGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cikpKSB7CiAJCQllZnhfc2NoZWR1bGVfY2hhbm5lbChjaGFubmVsKTsKLQkJY2hhbm5lbCsrOworCQkJcmVzdWx0ID0gSVJRX0hBTkRMRUQ7CisJCX0KIAkJcXVldWVzID4+PSAxOwogCX0KIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlpZiAocmVzdWx0ID09IElSUV9IQU5ETEVEKSB7CisJCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJRUZYX1RSQUNFKGVmeCwgIklSUSAlZCBvbiBDUFUgJWQgc3RhdHVzICIgRUZYX0RXT1JEX0ZNVCAiXG4iLAorCQkJICBpcnEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIEVGWF9EV09SRF9WQUwocmVnKSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC0yMjQ5LDYgKzIyNjIsNyBAQAogCQllZngtPnBoeV9vcCA9ICZmYWxjb25fc2Z0OTAwMV9waHlfb3BzOwogCQlicmVhazsKIAljYXNlIFBIWV9UWVBFX1FUMjAyMkMyOgorCWNhc2UgUEhZX1RZUEVfUVQyMDI1QzoKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3hmcF9waHlfb3BzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzExMyw4ICszMTI3LDEwIEBACiAJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAorCS8qIFJlbW92ZSBJMkMgYWRhcHRlciBhbmQgY2xlYXIgaXQgaW4gcHJlcGFyYXRpb24gZm9yIGEgcmV0cnkgKi8KIAlyYyA9IGkyY19kZWxfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAJQlVHX09OKHJjKTsKKwltZW1zZXQoJmVmeC0+aTJjX2FkYXAsIDAsIHNpemVvZihlZngtPmkyY19hZGFwKSk7CiAKIAlmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKGVmeCk7CiAJZmFsY29uX2ZyZWVfYnVmZmVyKGVmeCwgJmVmeC0+aXJxX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmggYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmgKaW5kZXggNzg2OWMzZC4uNzdmMmUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIHZvaWQgZmFsY29uX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGZhbGNvbl9maW5pX2ludGVycnVwdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAorI2RlZmluZSBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OIDUKKwogLyogR2xvYmFsIFJlc291cmNlcyAqLwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpOwogZXh0ZXJuIGludCBmYWxjb25fcHJvYmVfcmVzb3VyY2VzKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oCmluZGV4IGMxNmRhMzEuLjg4ODMwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2lvLmgKQEAgLTIzOCwxOCArMjM4LDIxIEBACiAvKiBXcml0ZSBkd29yZCB0byBGYWxjb24gcGFnZS1tYXBwZWQgcmVnaXN0ZXIgd2l0aCBhbiBleHRyYSBsb2NrLgogICoKICAqIEFzIGZvciBmYWxjb25fd3JpdGVsX3BhZ2UoKSwgYnV0IGZvciBhIHJlZ2lzdGVyIHRoYXQgc3VmZmVycyBmcm9tCi0gKiBTRkMgYnVnIDMxODEuIFRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVIGNvbGxlY3RvciBjYW5ub3QgYmUKLSAqIGNvbmZ1c2VkLiAqLworICogU0ZDIGJ1ZyAzMTgxLiAgSWYgd3JpdGluZyB0byBwYWdlIDAsIHRha2Ugb3V0IGEgbG9jayBzbyB0aGUgQklVCisgKiBjb2xsZWN0b3IgY2Fubm90IGJlIGNvbmZ1c2VkLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZmFsY29uX3dyaXRlbF9wYWdlX2xvY2tlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAogCQkJCQkgICAgIGVmeF9kd29yZF90ICp2YWx1ZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOworCWlmIChwYWdlID09IDApCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAJZmFsY29uX3dyaXRlbChlZngsIHZhbHVlLCBGQUxDT05fUEFHRURfUkVHKHBhZ2UsIHJlZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZSA9PSAwKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiB9CiAKICNlbmRpZiAvKiBFRlhfRkFMQ09OX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKaW5kZXggZjllMmY5NS4uOWY1ZWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmMKQEAgLTE3LDYgKzE3LDIxIEBACiAjaW5jbHVkZSAiYm9hcmRzLmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKIAordW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKQoreworCXVuc2lnbmVkIG91aSA9IDA7CisJaW50IGk7CisKKwkvKiBUaGUgYml0cyBvZiB0aGUgT1VJIGFyZSBkZXNpZ25hdGVkIGEuLngsIHdpdGggYT0wIGFuZCBiIHZhcmlhYmxlLgorCSAqIEluIHRoZSBpZCByZWdpc3RlciBjIGlzIHRoZSBNU0IgYnV0IHRoZSBPVUkgaXMgY29udmVudGlvbmFsbHkKKwkgKiB3cml0dGVuIGFzIGJ5dGVzIGguLmEsIHAuLmksIHguLnEuICBSZW9yZGVyIHRoZSBiaXRzIGFjY29yZGluZ2x5LiAqLworCWZvciAoaSA9IDA7IGkgPCAyMjsgKytpKQorCQlpZiAoaWQgJiAoMSA8PCAoaSArIDEwKSkpCisJCQlvdWkgfD0gMSA8PCAoaSBeIDcpOworCisJcmV0dXJuIG91aTsKK30KKwogaW50IG1kaW9fY2xhdXNlNDVfcmVzZXRfbW1kKHN0cnVjdCBlZnhfbmljICpwb3J0LCBpbnQgbW1kLAogCQkJICAgIGludCBzcGlucywgaW50IHNwaW50aW1lKQogewpAQCAtMTI1LDI0ICsxNDAsMjUgQEAKIGludCBtZGlvX2NsYXVzZTQ1X2NoZWNrX21tZHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgdW5zaWduZWQgaW50IG1tZF9tYXNrLCB1bnNpZ25lZCBpbnQgZmF0YWxfbWFzaykKIHsKKwlpbnQgbW1kID0gMCwgcHJvYmVfbW1kLCBkZXZzMCwgZGV2czE7CiAJdTMyIGRldmljZXM7Ci0JaW50IG1tZCA9IDAsIHByb2JlX21tZDsKIAogCS8qIEhpc3RvcmljYWxseSB3ZSBoYXZlIHByb2JlZCB0aGUgUEhZWFMgdG8gZmluZCBvdXQgd2hhdCBkZXZpY2VzIGFyZQogCSAqIHByZXNlbnQsYnV0IHRoYXQgZG9lc24ndCB3b3JrIHNvIHdlbGwgaWYgdGhlIFBIWVhTIGlzbid0IGV4cGVjdGVkCiAJICogdG8gZXhpc3QsIGlmIHNvIGp1c3QgZmluZCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBzdXBwbGllZC4gKi8KIAlwcm9iZV9tbWQgPSAobW1kX21hc2sgJiBNRElPX01NRFJFR19ERVZTX1BIWVhTKSA/IE1ESU9fTU1EX1BIWVhTIDoKIAkgICAgX19mZnMobW1kX21hc2spOwotCWRldmljZXMgPSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApIHwKLQkJICAgbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAotCQkJCSAgICAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpIDw8IDE2KTsKIAogCS8qIENoZWNrIGFsbCB0aGUgZXhwZWN0ZWQgTU1EcyBhcmUgcHJlc2VudCAqLwotCWlmIChkZXZpY2VzIDwgMCkgeworCWRldnMwID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzApOworCWRldnMxID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAorCQkJCSAgIHByb2JlX21tZCwgTURJT19NTURSRUdfREVWUzEpOworCWlmIChkZXZzMCA8IDAgfHwgZGV2czEgPCAwKSB7CiAJCUVGWF9FUlIoZWZ4LCAiZmFpbGVkIHRvIHJlYWQgZGV2aWNlcyBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCWRldmljZXMgPSBkZXZzMCB8IChkZXZzMSA8PCAxNik7CiAJaWYgKChkZXZpY2VzICYgbW1kX21hc2spICE9IG1tZF9tYXNrKSB7CiAJCUVGWF9FUlIoZWZ4LCAicmVxdWlyZWQgTU1EcyBub3QgcHJlc2VudDogZ290ICV4LCAiCiAJCQkid2FudGVkICV4XG4iLCBkZXZpY2VzLCBtbWRfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaCBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCmluZGV4IDhiYTQ5NzcuLjcwMTRkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oCkBAIC03MCwxMCArNzAsMTAgQEAKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX0xCTgkoMSkKICNkZWZpbmUgTURJT19NTURSRUdfU1RBVDFfTFBBQkxFX1dJRFRICSgxKQogCi0vKiBCaXRzIGluIElEIHJlZyAqLwotI2RlZmluZSBNRElPX0lEX1JFVihfaWQzMikJKF9pZDMyICYgMHhmKQotI2RlZmluZSBNRElPX0lEX01PREVMKF9pZDMyKQkoKF9pZDMyID4+IDQpICYgMHgzZikKLSNkZWZpbmUgTURJT19JRF9PVUkoX2lkMzIpCShfaWQzMiA+PiAxMCkKKy8qIEJpdHMgaW4gY29tYmluZWQgSUQgcmVncyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZGlvX2lkX3Jldih1MzIgaWQpIHsgcmV0dXJuIGlkICYgMHhmOyB9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1kaW9faWRfbW9kZWwodTMyIGlkKSB7IHJldHVybiAoaWQgPj4gNCkgJiAweDNmOyB9CitleHRlcm4gdW5zaWduZWQgbWRpb19pZF9vdWkodTMyIGlkKTsKIAogLyogQml0cyBpbiBNTURSRUdfREVWUzAvMS4gU29tZW9uZSB0aG91Z2h0ZnVsbHkgbGF5ZWQgdGhpbmdzIG91dAogICogc28gdGhlICdiaXQgcHJlc2VudCcgYml0IG51bWJlciBvZiBhbiBNTUQgaXMgdGhlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL210ZC5jIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCmluZGV4IDY2NWNhZmIuLjgyMGMyMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbXRkLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgRUZYX0RSSVZFUl9OQU1FICJzZmNfbXRkIgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJzcGkuaCIKKyNpbmNsdWRlICJlZnguaCIKIAogI2RlZmluZSBFRlhfU1BJX1ZFUklGWV9CVUZfTEVOIDE2CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IGUwMTlhZDEuLmUxNjllNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMjUsMTUgKzI1LDExIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlICJlbnVtLmgiCiAjaW5jbHVkZSAiYml0ZmllbGQuaCIKIAotI2RlZmluZSBFRlhfTUFYX0xST19ERVNDUklQVE9SUyA4Ci0jZGVmaW5lIEVGWF9NQVhfTFJPX0FHR1IgTUFYX1NLQl9GUkFHUwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBCdWlsZCBkZWZpbml0aW9ucwpAQCAtMzQwLDEzICszMzYsMTIgQEAKICAqIEBldmVudHFfcmVhZF9wdHI6IEV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlcgogICogQGxhc3RfZXZlbnRxX3JlYWRfcHRyOiBMYXN0IGV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlciB2YWx1ZS4KICAqIEBldmVudHFfbWFnaWM6IEV2ZW50IHF1ZXVlIG1hZ2ljIHZhbHVlIGZvciBkcml2ZXItZ2VuZXJhdGVkIHRlc3QgZXZlbnRzCi0gKiBAbHJvX21ncjogTFJPIHN0YXRlCisgKiBAaXJxX2NvdW50OiBOdW1iZXIgb2YgSVJRcyBzaW5jZSBsYXN0IGFkYXB0aXZlIG1vZGVyYXRpb24gZGVjaXNpb24KKyAqIEBpcnFfbW9kX3Njb3JlOiBJUlEgbW9kZXJhdGlvbiBzY29yZQogICogQHJ4X2FsbG9jX2xldmVsOiBXYXRlcm1hcmsgYmFzZWQgaGV1cmlzdGljIGNvdW50ZXIgZm9yIHB1c2hpbmcgZGVzY3JpcHRvcnMKICAqCWFuZCBkaWFnbm9zdGljIGNvdW50ZXJzCiAgKiBAcnhfYWxsb2NfcHVzaF9wYWdlczogUlggYWxsb2NhdGlvbiBtZXRob2QgY3VycmVudGx5IGluIHVzZSBmb3IgcHVzaGluZwogICoJZGVzY3JpcHRvcnMKLSAqIEByeF9hbGxvY19wb3BfcGFnZXM6IFJYIGFsbG9jYXRpb24gbWV0aG9kIGN1cnJlbnRseSBpbiB1c2UgZm9yIHBvcHBpbmcKLSAqCWRlc2NyaXB0b3JzCiAgKiBAbl9yeF90b2JlX2Rpc2M6IENvdW50IG9mIFJYX1RPQkVfRElTQyBlcnJvcnMKICAqIEBuX3J4X2lwX2ZyYWdfZXJyOiBDb3VudCBvZiBSWCBJUCBmcmFnbWVudCBlcnJvcnMKICAqIEBuX3J4X2lwX2hkcl9jaGtzdW1fZXJyOiBDb3VudCBvZiBSWCBJUCBoZWFkZXIgY2hlY2tzdW0gZXJyb3JzCkBAIC0zNzEsMTAgKzM2NiwxMSBAQAogCXVuc2lnbmVkIGludCBsYXN0X2V2ZW50cV9yZWFkX3B0cjsKIAl1bnNpZ25lZCBpbnQgZXZlbnRxX21hZ2ljOwogCi0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CisJdW5zaWduZWQgaW50IGlycV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX21vZF9zY29yZTsKKwogCWludCByeF9hbGxvY19sZXZlbDsKIAlpbnQgcnhfYWxsb2NfcHVzaF9wYWdlczsKLQlpbnQgcnhfYWxsb2NfcG9wX3BhZ2VzOwogCiAJdW5zaWduZWQgbl9yeF90b2JlX2Rpc2M7CiAJdW5zaWduZWQgbl9yeF9pcF9mcmFnX2VycjsKQEAgLTM5NCwxMyArMzkwLDExIEBACiAKIC8qKgogICogc3RydWN0IGVmeF9ibGlua2VyIC0gUy9XIExFRCBibGlua2luZyBjb250ZXh0Ci0gKiBAbGVkX251bTogTEVEIElEIChib2FyZC1zcGVjaWZpYyBtZWFuaW5nKQogICogQHN0YXRlOiBDdXJyZW50IHN0YXRlIC0gb24gb3Igb2ZmCiAgKiBAcmVzdWJtaXQ6IFRpbWVyIHJlc3VibWlzc2lvbiBmbGFnCiAgKiBAdGltZXI6IENvbnRyb2wgdGltZXIgZm9yIGJsaW5raW5nCiAgKi8KIHN0cnVjdCBlZnhfYmxpbmtlciB7Ci0JaW50IGxlZF9udW07CiAJYm9vbCBzdGF0ZTsKIAlib29sIHJlc3VibWl0OwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtNDEzLDggKzQwNyw4IEBACiAgKiBAbWFqb3I6IE1ham9yIHJldi4gKCdBJywgJ0InIC4uLikKICAqIEBtaW5vcjogTWlub3IgcmV2LiAoMCwgMSwgLi4uKQogICogQGluaXQ6IEluaXRpYWxpc2F0aW9uIGZ1bmN0aW9uCi0gKiBAaW5pdF9sZWRzOiBTZXRzIHVwIGJvYXJkIExFRHMKLSAqIEBzZXRfZmF1bHRfbGVkOiBUdXJucyB0aGUgZmF1bHQgTEVEIG9uIG9yIG9mZgorICogQGluaXRfbGVkczogU2V0cyB1cCBib2FyZCBMRURzLiBNYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCisgKiBAc2V0X2lkX2xlZDogVHVybnMgdGhlIGlkZW50aWZpY2F0aW9uIExFRCBvbiBvciBvZmYKICAqIEBibGluazogU3RhcnRzL3N0b3BzIGJsaW5raW5nCiAgKiBAbW9uaXRvcjogQm9hcmQtc3BlY2lmaWMgaGVhbHRoIGNoZWNrIGZ1bmN0aW9uCiAgKiBAZmluaTogQ2xlYW51cCBmdW5jdGlvbgpAQCAtNDMwLDkgKzQyNCw5IEBACiAJLyogQXMgdGhlIExFRHMgYXJlIHR5cGljYWxseSBhdHRhY2hlZCB0byB0aGUgUEhZLCBMRURzCiAJICogaGF2ZSBhIHNlcGFyYXRlIGluaXQgY2FsbGJhY2sgdGhhdCBoYXBwZW5zIGxhdGVyIHRoYW4KIAkgKiBib2FyZCBpbml0LiAqLwotCWludCAoKmluaXRfbGVkcykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKmluaXRfbGVkcykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKnNldF9pZF9sZWQpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKTsKIAlpbnQgKCptb25pdG9yKSAoc3RydWN0IGVmeF9uaWMgKm5pYyk7Ci0Jdm9pZCAoKnNldF9mYXVsdF9sZWQpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKTsKIAl2b2lkICgqYmxpbmspIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXJ0KTsKIAl2b2lkICgqZmluaSkgKHN0cnVjdCBlZnhfbmljICpuaWMpOwogCXN0cnVjdCBlZnhfYmxpbmtlciBibGlua2VyOwpAQCAtNDU5LDYgKzQ1Myw3IEBACiAJUEhZX1RZUEVfUVQyMDIyQzIgPSA0LAogCVBIWV9UWVBFX1BNODM1OCA9IDYsCiAJUEhZX1RZUEVfU0ZUOTAwMUEgPSA4LAorCVBIWV9UWVBFX1FUMjAyNUMgPSA5LAogCVBIWV9UWVBFX1NGVDkwMDFCID0gMTAsCiAJUEhZX1RZUEVfTUFYCS8qIEluc2VydCBhbnkgbmV3IGl0ZW1zIGJlZm9yZSB0aGlzICovCiB9OwpAQCAtNzEzLDYgKzcwOCw4IEBACiAgKiBAbWVtYmFzZTogTWVtb3J5IEJBUiB2YWx1ZQogICogQGJpdV9sb2NrOiBCSVUgKGJ1cyBpbnRlcmZhY2UgdW5pdCkgbG9jawogICogQGludGVycnVwdF9tb2RlOiBJbnRlcnJ1cHQgbW9kZQorICogQGlycV9yeF9hZGFwdGl2ZTogQWRhcHRpdmUgSVJRIG1vZGVyYXRpb24gZW5hYmxlZCBmb3IgUlggZXZlbnQgcXVldWVzCisgKiBAaXJxX3J4X21vZGVyYXRpb246IElSUSBtb2RlcmF0aW9uIHRpbWUgZm9yIFJYIGV2ZW50IHF1ZXVlcwogICogQGkyY19hZGFwOiBJMkMgYWRhcHRlcgogICogQGJvYXJkX2luZm86IEJvYXJkLWxldmVsIGluZm9ybWF0aW9uCiAgKiBAc3RhdGU6IERldmljZSBzdGF0ZSBmbGFnLiBTZXJpYWxpc2VkIGJ5IHRoZSBydG5sX2xvY2suCkBAIC03OTQsNiArNzkxLDggQEAKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CiAJc3BpbmxvY2tfdCBiaXVfbG9jazsKIAllbnVtIGVmeF9pbnRfbW9kZSBpbnRlcnJ1cHRfbW9kZTsKKwlib29sIGlycV9yeF9hZGFwdGl2ZTsKKwl1bnNpZ25lZCBpbnQgaXJxX3J4X21vZGVyYXRpb247CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAJc3RydWN0IGVmeF9ib2FyZCBib2FyZF9pbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3BoeS5oIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCmluZGV4IDA3ZTg1NWMuLmMxY2ZmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvcGh5LmgKQEAgLTE4LDEyICsxOCwxNiBAQAogCiBleHRlcm4gdm9pZCB0ZW54cHJlc3NfcGh5X2JsaW5rKHN0cnVjdCBlZnhfbmljICplZngsIGJvb2wgYmxpbmspOwogCisvKiBXYWl0IGZvciB0aGUgUEhZIHRvIGJvb3QuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIFBIWSBmYWlsZWQKKyAqIHRvIGJvb3QgZHVlIHRvIGNvcnJ1cHQgZmxhc2gsIG9yIHNvbWUgb3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZS4gKi8KK2V4dGVybiBpbnQgc2Z0OTAwMV93YWl0X2Jvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFeHBvcnRlZCBmdW5jdGlvbnMgZnJvbSB0aGUgZHJpdmVyIGZvciBYRlAgb3B0aWNhbCBQSFlzCisgKiBBTUNDL1F1YWtlIFFUMjB4eCBQSFlzCiAgKi8KIGV4dGVybiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl94ZnBfcGh5X29wczsKIAotLyogVGhlIFFVQUtFIFhGUCBQSFkgcHJvdmlkZXMgdmFyaW91cyBIL1cgY29udHJvbCBzdGF0ZXMgZm9yIExFRHMgKi8KKy8qIFRoZXNlIFBIWXMgcHJvdmlkZSB2YXJpb3VzIEgvVyBjb250cm9sIHN0YXRlcyBmb3IgTEVEcyAqLwogI2RlZmluZSBRVUFLRV9MRURfTElOS19JTlZBTAkoMCkKICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfU1RBVAkoMSkKICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfQUNUCSgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMgYi9kcml2ZXJzL25ldC9zZmMvcnguYwppbmRleCBiOGJhNGJiLi42NmQ3ZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvcnguYwpAQCAtOTksMTA5ICs5OSw2IEBACiB9CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogTGludXggZ2VuZXJpYyBMUk8gaGFuZGxpbmcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi1zdGF0aWMgaW50IGVmeF9scm9fZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwX2hkciwKLQkJCSAgICAgICB2b2lkICoqdGNwdWRwX2hkciwgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsID0gcHJpdjsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQlzdHJ1Y3QgdGNwaGRyICp0aDsKLQotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7Ci0JaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApIHx8IGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCWdvdG8gZmFpbDsKLQotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgaXBoLT5paGwgKiA0KTsKLQotCSp0Y3B1ZHBfaGRyID0gdGg7Ci0JKmlwX2hkciA9IGlwaDsKLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQgfCBMUk9fVENQOwotCi0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKLQlyZXR1cm4gMDsKLWZhaWw6Ci0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX1NLQjsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgZWZ4X2dldF9mcmFnX2hkcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqbWFjX2hkciwKLQkJCSAgICB2b2lkICoqaXBfaGRyLCB2b2lkICoqdGNwdWRwX2hkciwgdTY0ICpoZHJfZmxhZ3MsCi0JCQkgICAgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPSBwcml2OwotCXN0cnVjdCBldGhoZHIgKmVoOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCi0JLyogV2Ugc3VwcG9ydCBFdGhlcklJIGFuZCBWTEFOIGVuY2Fwc3VsYXRlZCBJUHY0ICovCi0JZWggPSBwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldDsKLQkqbWFjX2hkciA9IGVoOwotCi0JaWYgKGVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSkgewotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKGVoICsgMSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopZWg7Ci0JCWlmICh2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKQotCQkJZ290byBmYWlsOwotCi0JCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikodmVoICsgMSk7Ci0JfQotCSppcF9oZHIgPSBpcGg7Ci0KLQkvKiBXZSBjYW4gb25seSBkbyBMUk8gb3ZlciBUQ1AgKi8KLQlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKLQkJZ290byBmYWlsOwotCi0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQkqdGNwdWRwX2hkciA9IChzdHJ1Y3QgdGNwaGRyICopKCh1OCAqKSBpcGggKyBpcGgtPmlobCAqIDQpOwotCi0JY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKLQlyZXR1cm4gMDsKLSBmYWlsOgotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9TS0I7Ci0JcmV0dXJuIC0xOwotfQotCi1pbnQgZWZ4X2xyb19pbml0KHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciwgc3RydWN0IGVmeF9uaWMgKmVmeCkKLXsKLQlzaXplX3QgcyA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIEVGWF9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCXN0cnVjdCBuZXRfbHJvX2Rlc2MgKmxyb19hcnI7Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgTFJPIGRlc2NyaXB0b3JzIHN0cnVjdHVyZSAqLwotCWxyb19hcnIgPSBremFsbG9jKHMsIEdGUF9LRVJORUwpOwotCWlmIChscm9fYXJyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHJvX21nci0+bHJvX2FyciA9IGxyb19hcnI7Ci0JbHJvX21nci0+bWF4X2Rlc2MgPSBFRlhfTUFYX0xST19ERVNDUklQVE9SUzsKLQlscm9fbWdyLT5tYXhfYWdnciA9IEVGWF9NQVhfTFJPX0FHR1I7Ci0JbHJvX21nci0+ZnJhZ19hbGlnbl9wYWQgPSBFRlhfUEFHRV9TS0JfQUxJR047Ci0KLQlscm9fbWdyLT5nZXRfc2tiX2hlYWRlciA9IGVmeF9scm9fZ2V0X3NrYl9oZHI7Ci0JbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gZWZ4X2dldF9mcmFnX2hkcjsKLQlscm9fbWdyLT5kZXYgPSBlZngtPm5ldF9kZXY7Ci0KLQlscm9fbWdyLT5mZWF0dXJlcyA9IExST19GX05BUEk7Ci0KLQkvKiBXZSBjYW4gcGFzcyBwYWNrZXRzIHVwIHdpdGggdGhlIGNoZWNrc3VtIGludGFjdCAqLwotCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCi0JbHJvX21nci0+aXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGVmeF9scm9fZmluaShzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpCi17Ci0Ja2ZyZWUobHJvX21nci0+bHJvX2Fycik7Ci0JbHJvX21nci0+bHJvX2FyciA9IE5VTEw7Ci19Ci0KIC8qKgogICogZWZ4X2luaXRfcnhfYnVmZmVyX3NrYiAtIGNyZWF0ZSBuZXcgUlggYnVmZmVyIHVzaW5nIHNrYi1iYXNlZCBhbGxvY2F0aW9uCiAgKgpAQCAtNTQ5LDc3ICs0NDYsMzEgQEAKIHN0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYpCiB7Ci0Jc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyID0gJmNoYW5uZWwtPmxyb19tZ3I7Ci0Jdm9pZCAqcHJpdiA9IGNoYW5uZWw7CisJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gJmNoYW5uZWwtPm5hcGlfc3RyOwogCiAJLyogUGFzcyB0aGUgc2tiL3BhZ2UgaW50byB0aGUgTFJPIGVuZ2luZSAqLwogCWlmIChyeF9idWYtPnBhZ2UpIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBmcmFnczsKKwkJc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvIGluZm87CiAKLQkJZnJhZ3MucGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJZnJhZ3MucGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpOwotCQlmcmFncy5zaXplID0gcnhfYnVmLT5sZW47CisJCWluZm8uZnJhZ3NbMF0ucGFnZSA9IHJ4X2J1Zi0+cGFnZTsKKwkJaW5mby5mcmFnc1swXS5wYWdlX29mZnNldCA9IGVmeF9yeF9idWZfb2Zmc2V0KHJ4X2J1Zik7CisJCWluZm8uZnJhZ3NbMF0uc2l6ZSA9IHJ4X2J1Zi0+bGVuOworCQlpbmZvLm5yX2ZyYWdzID0gMTsKKwkJaW5mby5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaW5mby5sZW4gPSByeF9idWYtPmxlbjsKIAotCQlscm9fcmVjZWl2ZV9mcmFncyhscm9fbWdyLCAmZnJhZ3MsIHJ4X2J1Zi0+bGVuLAotCQkJCSAgcnhfYnVmLT5sZW4sIHByaXYsIDApOworCQluYXBpX2dyb19mcmFncyhuYXBpLCAmaW5mbyk7CiAKIAkJRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPnNrYik7CiAJCXJ4X2J1Zi0+cGFnZSA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJRUZYX0JVR19PTl9QQVJBTk9JRCghcnhfYnVmLT5za2IpOwogCi0JCWxyb19yZWNlaXZlX3NrYihscm9fbWdyLCByeF9idWYtPnNrYiwgcHJpdik7CisJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgcnhfYnVmLT5za2IpOwogCQlyeF9idWYtPnNrYiA9IE5VTEw7CiAJfQogfQogCi0vKiBBbGxvY2F0ZSBhbmQgY29uc3RydWN0IGFuIFNLQiBhcm91bmQgYSBzdHJ1Y3QgcGFnZS4qLwotc3RhdGljIHN0cnVjdCBza19idWZmICplZnhfcnhfbWtfc2tiKHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYsCi0JCQkJICAgICBzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAotCQkJCSAgICAgaW50IGhkcl9sZW4pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIEFsbG9jYXRlIGFuIFNLQiB0byBzdG9yZSB0aGUgaGVhZGVycyAqLwotCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZWZ4LT5uZXRfZGV2LCBoZHJfbGVuICsgRUZYX1BBR0VfU0tCX0FMSUdOKTsKLQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCUVGWF9FUlJfUkwoZWZ4LCAiUlggb3V0IG9mIG1lbW9yeSBmb3Igc2tiXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JRUZYX0JVR19PTl9QQVJBTk9JRChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKTsKLQlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+bGVuIDwgaGRyX2xlbik7Ci0KLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCXNrYl9yZXNlcnZlKHNrYiwgRUZYX1BBR0VfU0tCX0FMSUdOKTsKLQotCXNrYi0+bGVuID0gcnhfYnVmLT5sZW47Ci0Jc2tiLT50cnVlc2l6ZSA9IHJ4X2J1Zi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKLQltZW1jcHkoc2tiLT5kYXRhLCByeF9idWYtPmRhdGEsIGhkcl9sZW4pOwotCXNrYi0+dGFpbCArPSBoZHJfbGVuOwotCi0JLyogQXBwZW5kIHRoZSByZW1haW5pbmcgcGFnZSBvbnRvIHRoZSBmcmFnIGxpc3QgKi8KLQlpZiAodW5saWtlbHkocnhfYnVmLT5sZW4gPiBoZHJfbGVuKSkgewotCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKLQkJZnJhZy0+cGFnZSA9IHJ4X2J1Zi0+cGFnZTsKLQkJZnJhZy0+cGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpICsgaGRyX2xlbjsKLQkJZnJhZy0+c2l6ZSA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDE7Ci0JCXNrYi0+ZGF0YV9sZW4gPSBmcmFnLT5zaXplOwotCX0gZWxzZSB7Ci0JCV9fZnJlZV9wYWdlcyhyeF9idWYtPnBhZ2UsIGVmeC0+cnhfYnVmZmVyX29yZGVyKTsKLQkJc2tiLT5kYXRhX2xlbiA9IDA7Ci0JfQotCi0JLyogT3duZXJzaGlwIGhhcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSByeF9idWYgdG8gc2tiICovCi0JcnhfYnVmLT5wYWdlID0gTlVMTDsKLQotCS8qIE1vdmUgcGFzdCB0aGUgZXRoZXJuZXQgaGVhZGVyICovCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZWZ4LT5uZXRfZGV2KTsKLQotCXJldHVybiBza2I7Ci19Ci0KIHZvaWQgZWZ4X3J4X3BhY2tldChzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSwgdW5zaWduZWQgaW50IGluZGV4LAogCQkgICB1bnNpZ25lZCBpbnQgbGVuLCBib29sIGNoZWNrc3VtbWVkLCBib29sIGRpc2NhcmQpCiB7CkBAIC02ODcsNyArNTM4LDYgQEAKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCBscm8gPSAhIShlZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pOwogCiAJLyogSWYgd2UncmUgaW4gbG9vcGJhY2sgdGVzdCwgdGhlbiBwYXNzIHRoZSBwYWNrZXQgZGlyZWN0bHkgdG8gdGhlCiAJICogbG9vcGJhY2sgbGF5ZXIsIGFuZCBmcmVlIHRoZSByeF9idWYgaGVyZQpAQCAtNzA5LDQxICs1NTksMjMgQEAKIAkJCQkJCSAgICAgICBlZngtPm5ldF9kZXYpOwogCX0KIAotCS8qIEJvdGggb3VyIGdlbmVyaWMtTFJPIGFuZCBTRkMtU1NSIHN1cHBvcnQgc2tiIGFuZCBwYWdlIGJhc2VkCi0JICogYWxsb2NhdGlvbiwgYnV0IG5laXRoZXIgc3VwcG9ydCBzd2l0Y2hpbmcgZnJvbSBvbmUgdG8gdGhlCi0JICogb3RoZXIgb24gdGhlIGZseS4gSWYgd2Ugc3BvdCB0aGF0IHRoZSBhbGxvY2F0aW9uIG1vZGUgaGFzCi0JICogY2hhbmdlZCwgdGhlbiBmbHVzaCB0aGUgTFJPIHN0YXRlLgotCSAqLwotCWlmICh1bmxpa2VseShjaGFubmVsLT5yeF9hbGxvY19wb3BfcGFnZXMgIT0gKHJ4X2J1Zi0+cGFnZSAhPSBOVUxMKSkpIHsKLQkJZWZ4X2ZsdXNoX2xybyhjaGFubmVsKTsKLQkJY2hhbm5lbC0+cnhfYWxsb2NfcG9wX3BhZ2VzID0gKHJ4X2J1Zi0+cGFnZSAhPSBOVUxMKTsKLQl9Ci0JaWYgKGxpa2VseShjaGVja3N1bW1lZCAmJiBscm8pKSB7CisJaWYgKGxpa2VseShjaGVja3N1bW1lZCB8fCByeF9idWYtPnBhZ2UpKSB7CiAJCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1Zik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQkvKiBGb3JtIGFuIHNrYiBpZiByZXF1aXJlZCAqLwotCWlmIChyeF9idWYtPnBhZ2UpIHsKLQkJaW50IGhkcl9sZW4gPSBtaW4ocnhfYnVmLT5sZW4sIEVGWF9TS0JfSEVBREVSUyk7Ci0JCXNrYiA9IGVmeF9yeF9ta19za2IocnhfYnVmLCBlZngsIGhkcl9sZW4pOwotCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7Ci0JCQllZnhfZnJlZV9yeF9idWZmZXIoZWZ4LCByeF9idWYpOwotCQkJZ290byBkb25lOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogV2Ugbm93IG93biB0aGUgU0tCICovCi0JCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCQlyeF9idWYtPnNrYiA9IE5VTEw7Ci0JfQorCS8qIFdlIG5vdyBvd24gdGhlIFNLQiAqLworCXNrYiA9IHJ4X2J1Zi0+c2tiOworCXJ4X2J1Zi0+c2tiID0gTlVMTDsKIAogCUVGWF9CVUdfT05fUEFSQU5PSUQocnhfYnVmLT5wYWdlKTsKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+c2tiKTsKIAlFRlhfQlVHX09OX1BBUkFOT0lEKCFza2IpOwogCiAJLyogU2V0IHRoZSBTS0IgZmxhZ3MgKi8KLQlpZiAodW5saWtlbHkoIWNoZWNrc3VtbWVkIHx8ICFlZngtPnJ4X2NoZWNrc3VtX2VuYWJsZWQpKQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGNoYW5uZWwtPmNoYW5uZWwpOwogCiAJLyogUGFzcyB0aGUgcGFja2V0IHVwICovCiAJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKQEAgLTc2MCw3ICs1OTIsNyBAQAogCWVudW0gZWZ4X3J4X2FsbG9jX21ldGhvZCBtZXRob2QgPSByeF9hbGxvY19tZXRob2Q7CiAKIAkvKiBPbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBwYWdlIGJhc2VkIGFsbG9jYXRpb24gaWYgTFJPIGlzIGVuYWJsZWQgKi8KLQlpZiAoIShjaGFubmVsLT5lZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJaWYgKCEoY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSkgewogCQltZXRob2QgPSBSWF9BTExPQ19NRVRIT0RfU0tCOwogCX0gZWxzZSBpZiAobWV0aG9kID09IFJYX0FMTE9DX01FVEhPRF9BVVRPKSB7CiAJCS8qIENvbnN0cmFpbiB0aGUgcnhfYWxsb2NfbGV2ZWwgKi8KQEAgLTg2NSwxMSArNjk3LDYgQEAKIAlyeF9xdWV1ZS0+YnVmZmVyID0gTlVMTDsKIH0KIAotdm9pZCBlZnhfZmx1c2hfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlscm9fZmx1c2hfYWxsKCZjaGFubmVsLT5scm9fbWdyKTsKLX0KLQogCiBtb2R1bGVfcGFyYW0ocnhfYWxsb2NfbWV0aG9kLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9hbGxvY19tZXRob2QsICJBbGxvY2F0aW9uIG1ldGhvZCB1c2VkIGZvciBSWCBidWZmZXJzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcnguaCBiL2RyaXZlcnMvbmV0L3NmYy9yeC5oCmluZGV4IDBlODhhOWQuLjQyZWU3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5oCkBAIC0xNyw5ICsxNyw2IEBACiB2b2lkIGVmeF9pbml0X3J4X3F1ZXVlKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIHZvaWQgZWZ4X2ZpbmlfcnhfcXVldWUoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUpOwogCi1pbnQgZWZ4X2xyb19pbml0KHN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciwgc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci12b2lkIGVmeF9scm9fZmluaShzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpOwotdm9pZCBlZnhfZmx1c2hfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CiB2b2lkIGVmeF9yeF9zdHJhdGVneShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogdm9pZCBlZnhfZmFzdF9wdXNoX3J4X2Rlc2NyaXB0b3JzKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIHZvaWQgZWZ4X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCmluZGV4IGNiMjVhZTUuLjRlYWM1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJlZnguaCIKICNpbmNsdWRlICJwaHkuaCIKQEAgLTM5OCw2ICszOTksNyBAQAogCiBpbnQgc2ZuNDExMXRfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCWludCBpID0gMDsKIAlpbnQgcmM7CiAKIAllZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50ID0KQEAgLTQxNiwxMyArNDE4LDIwIEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfaHdtb247CiAKLQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKLQkJZWZ4X3N0YXRzX2Rpc2FibGUoZWZ4KTsKLQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKLQl9CisJZG8geworCQlpZiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpIHsKKwkJCS8qIFBIWSBtYXkgbm90IGdlbmVyYXRlIGEgMTU2LjI1IE1IeiBjbG9jayBhbmQgTUFDCisJCQkgKiBzdGF0cyBmZXRjaCB3aWxsIGZhaWwuICovCisJCQllZnhfc3RhdHNfZGlzYWJsZShlZngpOworCQkJc2ZuNDExMXRfcmVzZXQoZWZ4KTsKKwkJfQorCQlyYyA9IHNmdDkwMDFfd2FpdF9ib290KGVmeCk7CisJCWlmIChyYyA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOworCX0gd2hpbGUgKHJjID09IC1FSU5WQUwgJiYgKytpIDwgMik7CiAKLQlyZXR1cm4gMDsKLQorCWRldmljZV9yZW1vdmVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsICZkZXZfYXR0cl9waHlfZmxhc2hfY2ZnKTsKIGZhaWxfaHdtb246CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGVmeC0+Ym9hcmRfaW5mby5od21vbl9jbGllbnQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwppbmRleCBmMGVmZDI0Li5lNjFkYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCkBAIC04LDYgKzgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiZWZ4LmgiCiAjaW5jbHVkZSAibWRpb18xMGcuaCIKQEAgLTE1NywxNCArMTU4LDE2IEBACiAjZGVmaW5lIFBDU18xMEdCQVNFVF9CTEtMS19XSURUSCAxCiAKIC8qIEJvb3Qgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIFBDU19CT09UX1NUQVRVU19SRUcJNTMyNDgKLSNkZWZpbmUgUENTX0JPT1RfRkFUQUxfRVJSX0xCTgkoMCkKLSNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfTEJOCSgxKQotI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSAkoMikKLSNkZWZpbmUgUENTX0JPT1RfQ09NUExFVEVfTEJOCSgzKQotCi0jZGVmaW5lIFBDU19CT09UX01BWF9ERUxBWQkoMTAwKQotI2RlZmluZSBQQ1NfQk9PVF9QT0xMX0RFTEFZCSgxMCkKKyNkZWZpbmUgUENTX0JPT1RfU1RBVFVTX1JFRwkJNTMyNDgKKyNkZWZpbmUgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOCTAKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfTEJOCQkxCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX1dJRFRICQkyCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0lOSVQJCTAKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfV0FJVF9NRElPCTEKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfQ0hFQ0tTVU0JMgorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19KVU1QCQkzCisjZGVmaW5lIFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOCTMKKyNkZWZpbmUgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTgk0CiAKIC8qIDEwME0vMUcgUEhZIHJlZ2lzdGVycyAqLwogI2RlZmluZSBHUEhZX1hDT05UUk9MX1JFRwk0OTE1MgpAQCAtMjI5LDQwICsyMzIsNjIgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwaHlfc2hvcnRfcmVhY2gsIDA2NDQsIHNob3dfcGh5X3Nob3J0X3JlYWNoLAogCQkgICBzZXRfcGh5X3Nob3J0X3JlYWNoKTsKIAotLyogQ2hlY2sgdGhhdCB0aGUgQzE2NiBoYXMgYm9vdGVkIHN1Y2Nlc3NmdWxseSAqLwotc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2NoZWNrKHN0cnVjdCBlZnhfbmljICplZngpCitpbnQgc2Z0OTAwMV93YWl0X2Jvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlpbnQgcGh5X2lkID0gZWZ4LT5taWkucGh5X2lkOwotCWludCBjb3VudCA9IFBDU19CT09UX01BWF9ERUxBWSAvIFBDU19CT09UX1BPTExfREVMQVk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaICsgMTsKIAlpbnQgYm9vdF9zdGF0OwogCi0JLyogV2FpdCBmb3IgdGhlIGJvb3QgdG8gY29tcGxldGUgKG9yIG5vdCkgKi8KLQl3aGlsZSAoY291bnQpIHsKLQkJYm9vdF9zdGF0ID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLAorCWZvciAoOzspIHsKKwkJYm9vdF9zdGF0ID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgZWZ4LT5taWkucGh5X2lkLAogCQkJCQkgICAgICAgTURJT19NTURfUENTLAogCQkJCQkgICAgICAgUENTX0JPT1RfU1RBVFVTX1JFRyk7Ci0JCWlmIChib290X3N0YXQgJiAoMSA8PCBQQ1NfQk9PVF9DT01QTEVURV9MQk4pKQotCQkJYnJlYWs7Ci0JCWNvdW50LS07Ci0JCXVkZWxheShQQ1NfQk9PVF9QT0xMX0RFTEFZKTsKLQl9CisJCWlmIChib290X3N0YXQgPj0gMCkgeworCQkJRUZYX0xPRyhlZngsICJQSFkgYm9vdCBzdGF0dXMgPSAlI3hcbiIsIGJvb3Rfc3RhdCk7CisJCQlzd2l0Y2ggKGJvb3Rfc3RhdCAmCisJCQkJKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAorCQkJCSAoMyA8PCBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCQkgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pIHwKKwkJCQkgKDEgPDwgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTikpKSB7CisJCQljYXNlICgoMSA8PCBQQ1NfQk9PVF9GQVRBTF9FUlJPUl9MQk4pIHwKKwkJCSAgICAgIChQQ1NfQk9PVF9QUk9HUkVTU19DSEVDS1NVTSA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikpOgorCQkJY2FzZSAoKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSB8CisJCQkgICAgICAoUENTX0JPT1RfUFJPR1JFU1NfSU5JVCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pKToKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNhc2UgKChQQ1NfQk9PVF9QUk9HUkVTU19XQUlUX01ESU8gPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSk6CisJCQkJcmV0dXJuIChlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkgPworCQkJCQkwIDogLUVJTzsKKwkJCWNhc2UgKChQQ1NfQk9PVF9QUk9HUkVTU19KVU1QIDw8CisJCQkgICAgICAgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9DT0RFX1NUQVJURURfTEJOKSk6CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfSlVNUCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfRE9XTkxPQURfV0FJVF9MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4pKToKKwkJCQlyZXR1cm4gKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSA/CisJCQkJCS1FSU8gOiAwOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoYm9vdF9zdGF0ICYgKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSkKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAotCWlmICghY291bnQpIHsKLQkJRUZYX0VSUihlZngsICIlczogUEhZIGJvb3QgdGltZWQgb3V0LiBMYXN0IHN0YXR1cyAiCi0JCQkiJXhcbiIsIF9fZnVuY19fLAotCQkJKGJvb3Rfc3RhdCA+PiBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pICYKLQkJCSgoMSA8PCBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSCkgLSAxKSk7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAotCXJldHVybiAwOworCQltc2xlZXAoNTApOworCX0KIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3NfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7CiAJaW50IHJlZzsKLQlpbnQgcmM7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CiAJCS8qIEVuYWJsZSAzMTIuNSBNSHogY2xvY2sgKi8KQEAgLTI4NSwxMCArMzEwLDYgQEAKIAkJCQkgICAgICAgZmFsc2UpOwogCX0KIAotCXJjID0gdGVueHByZXNzX3BoeV9jaGVjayhlZngpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQogCS8qIFNldCB0aGUgTEVEcyB1cCBhczogR3JlZW4gPSBMaW5rLCBBbWJlciA9IExpbmsvQWN0LCBSZWQgPSBPZmYgKi8KIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7CiAJCW1kaW9fY2xhdXNlNDVfc2V0X2ZsYWcoZWZ4LCBwaHlfaWQsIE1ESU9fTU1EX1BNQVBNRCwKQEAgLTI5OSw3ICszMjAsNyBAQAogCQkJCSAgICBQTUFfUE1EX0xFRF9PVkVSUl9SRUcsIFBNQV9QTURfTEVEX0RFRkFVTFQpOwogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3NfcGh5X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU3MSwxNSArNTkyLDE0IEBACiBzdGF0aWMgdm9pZCB0ZW54cHJlc3NfcGh5X3BvbGwoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgdGVueHByZXNzX3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7Ci0JYm9vbCBjaGFuZ2UgPSBmYWxzZSwgbGlua19vazsKLQl1bnNpZ25lZCBsaW5rX2ZjOworCWJvb2wgY2hhbmdlID0gZmFsc2U7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7Ci0JCWxpbmtfb2sgPSBzZng3MTAxX2xpbmtfb2soZWZ4KTsKKwkJYm9vbCBsaW5rX29rID0gc2Z4NzEwMV9saW5rX29rKGVmeCk7CiAJCWlmIChsaW5rX29rICE9IGVmeC0+bGlua191cCkgewogCQkJY2hhbmdlID0gdHJ1ZTsKIAkJfSBlbHNlIHsKLQkJCWxpbmtfZmMgPSBtZGlvX2NsYXVzZTQ1X2dldF9wYXVzZShlZngpOworCQkJdW5zaWduZWQgaW50IGxpbmtfZmMgPSBtZGlvX2NsYXVzZTQ1X2dldF9wYXVzZShlZngpOwogCQkJaWYgKGxpbmtfZmMgIT0gZWZ4LT5saW5rX2ZjKQogCQkJCWNoYW5nZSA9IHRydWU7CiAJCX0KQEAgLTY3OSwxMiArNjk5LDEwIEBACiB7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CiAJaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKLQlpbnQgcmMgPSAwLCByYzIsIGksIHJlc19yZWc7CisJaW50IHJjID0gMCwgcmMyLCBpLCBjdHJsX3JlZywgcmVzX3JlZzsKIAotCWlmICghKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkpCi0JCXJldHVybiAwOwotCi0JZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZlY21kKTsKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKQorCQllZngtPnBoeV9vcC0+Z2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOwogCiAJLyogSW5pdGlhbGlzZSBjYWJsZSBkaWFnbm9zdGljIHJlc3VsdHMgdG8gdW5rbm93biBmYWlsdXJlICovCiAJZm9yIChpID0gMTsgaSA8IDk7ICsraSkKQEAgLTY5MiwxOCArNzEwLDIyIEBACiAKIAkvKiBSdW4gY2FibGUgZGlhZ25vc3RpY3M7IHdhaXQgdXAgdG8gNSBzZWNvbmRzIGZvciB0aGVtIHRvIGNvbXBsZXRlLgogCSAqIEEgY2FibGUgZmF1bHQgaXMgbm90IGEgc2VsZi10ZXN0IGZhaWx1cmUsIGJ1dCBhIHRpbWVvdXQgaXMuICovCisJY3RybF9yZWcgPSAoKDEgPDwgQ0RJQUdfQ1RSTF9JTU1FRF9MQk4pIHwKKwkJICAgIChDRElBR19DVFJMX0xFTl9NRVRSRVMgPDwgQ0RJQUdfQ1RSTF9MRU5fVU5JVF9MQk4pKTsKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIEJyZWFrIHRoZSBsaW5rIGluIG9yZGVyIHRvIHJ1biBmdWxsIGRpYWdub3N0aWNzLiAgV2UKKwkJICogbXVzdCByZXNldCB0aGUgUEhZIHRvIHJlc3VtZSBub3JtYWwgc2VydmljZS4gKi8KKwkJY3RybF9yZWcgfD0gKDEgPDwgQ0RJQUdfQ1RSTF9CUktfTElOS19MQk4pOworCX0KIAltZGlvX2NsYXVzZTQ1X3dyaXRlKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCi0JCQkgICAgUE1BX1BNRF9DRElBR19DVFJMX1JFRywKLQkJCSAgICAoMSA8PCBDRElBR19DVFJMX0lNTUVEX0xCTikgfAotCQkJICAgICgxIDw8IENESUFHX0NUUkxfQlJLX0xJTktfTEJOKSB8Ci0JCQkgICAgKENESUFHX0NUUkxfTEVOX01FVFJFUyA8PCBDRElBR19DVFJMX0xFTl9VTklUX0xCTikpOworCQkJICAgIFBNQV9QTURfQ0RJQUdfQ1RSTF9SRUcsIGN0cmxfcmVnKTsKIAlpID0gMDsKIAl3aGlsZSAobWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCiAJCQkJICBQTUFfUE1EX0NESUFHX0NUUkxfUkVHKSAmCiAJICAgICAgICgxIDw8IENESUFHX0NUUkxfSU5fUFJPR19MQk4pKSB7CiAJCWlmICgrK2kgPT0gNTApIHsKIAkJCXJjID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gcmVzZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCQltc2xlZXAoMTAwKTsKIAl9CkBAIC03MjgsMTcgKzc1MCwxOCBAQAogCQkJcmVzdWx0c1s1ICsgaV0gPSBsZW5fcmVnOwogCX0KIAotCS8qIFdlIG11c3QgcmVzZXQgdG8gZXhpdCBjYWJsZSBkaWFnbm9zdGljIG1vZGUuICBUaGUgQklTVCB3aWxsCi0JICogYWxzbyBydW4gd2hlbiB3ZSBkbyB0aGlzLiAqLwotcmVzZXQ6Ci0JcmMyID0gdGVueHByZXNzX3NwZWNpYWxfcmVzZXQoZWZ4KTsKLQlyZXN1bHRzWzBdID0gcmMyID8gLTEgOiAxOwotCWlmICghcmMpCi0JCXJjID0gcmMyOworb3V0OgorCWlmIChmbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKKwkJLyogUmVzZXQsIHJ1bm5pbmcgdGhlIEJJU1QgYW5kIHRoZW4gcmVzdW1pbmcgbm9ybWFsIHNlcnZpY2UuICovCisJCXJjMiA9IHRlbnhwcmVzc19zcGVjaWFsX3Jlc2V0KGVmeCk7CisJCXJlc3VsdHNbMF0gPSByYzIgPyAtMSA6IDE7CisJCWlmICghcmMpCisJCQlyYyA9IHJjMjsKIAotCXJjMiA9IGVmeC0+cGh5X29wLT5zZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7Ci0JaWYgKCFyYykKLQkJcmMgPSByYzI7CisJCXJjMiA9IGVmeC0+cGh5X29wLT5zZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7CisJCWlmICghcmMpCisJCQlyYyA9IHJjMjsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHguYyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCmluZGV4IGRhM2U5ZmYuLmQ2NjgxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCkBAIC0xNjIsNiArMTYyLDE0IEBACiAJLyogR2V0IHNpemUgb2YgdGhlIGluaXRpYWwgZnJhZ21lbnQgKi8KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCisJLyogUGFkIGlmIG5lY2Vzc2FyeSAqLworCWlmIChFRlhfV09SS0FST1VORF8xNTU5MihlZngpICYmIHNrYi0+bGVuIDw9IDMyKSB7CisJCUVGWF9CVUdfT05fUEFSQU5PSUQoc2tiLT5kYXRhX2xlbik7CisJCWxlbiA9IDMyICsgMTsKKwkJaWYgKHNrYl9wYWQoc2tiLCBsZW4gLSBza2ItPmxlbikpCisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKwogCWZpbGxfbGV2ZWwgPSB0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50IC0gdHhfcXVldWUtPm9sZF9yZWFkX2NvdW50OwogCXFfc3BhY2UgPSBlZngtPnR5cGUtPnR4ZF9yaW5nX21hc2sgLSAxIC0gZmlsbF9sZXZlbDsKIApAQCAtMzc2LDYgKzM4NCw5IEBACiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwogCisJaWYgKHVubGlrZWx5KGVmeC0+cG9ydF9pbmhpYml0ZWQpKQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKIAlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQogCQl0eF9xdWV1ZSA9ICZlZngtPnR4X3F1ZXVlW0VGWF9UWF9RVUVVRV9PRkZMT0FEX0NTVU1dOwogCWVsc2UKQEAgLTM5Nyw3ICs0MDgsNyBAQAogCSAqIHNlcGFyYXRlcyB0aGUgdXBkYXRlIG9mIHJlYWRfY291bnQgZnJvbSB0aGUgdGVzdCBvZgogCSAqIHN0b3BwZWQuICovCiAJc21wX21iKCk7Ci0JaWYgKHVubGlrZWx5KHR4X3F1ZXVlLT5zdG9wcGVkKSkgeworCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkgJiYgbGlrZWx5KGVmeC0+cG9ydF9lbmFibGVkKSkgewogCQlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50OwogCQlpZiAoZmlsbF9sZXZlbCA8IEVGWF9ORVRERVZfVFhfVEhSRVNIT0xEKHR4X3F1ZXVlKSkgewogCQkJRUZYX0JVR19PTl9QQVJBTk9JRCghZWZ4X2Rldl9yZWdpc3RlcmVkKGVmeCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmggYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAppbmRleCA3OGRlNjhmLi5jODIxYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvd29ya2Fyb3VuZHMuaApAQCAtMzYsNiArMzYsOCBAQAogI2RlZmluZSBFRlhfV09SS0FST1VORF8xMTQ4MiBFRlhfV09SS0FST1VORF9BTFdBWVMKIC8qIEZsdXNoIGV2ZW50cyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIHRvIGFwcGVhciAqLwogI2RlZmluZSBFRlhfV09SS0FST1VORF8xMTU1NyBFRlhfV09SS0FST1VORF9BTFdBWVMKKy8qIFRydW5jYXRlZCBJUHY0IHBhY2tldHMgY2FuIGNvbmZ1c2UgdGhlIFRYIHBhY2tldCBwYXJzZXIgKi8KKyNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTU1OTIgRUZYX1dPUktBUk9VTkRfQUxXQVlTCiAKIC8qIFNwdXJpb3VzIHBhcml0eSBlcnJvcnMgaW4gVFNPUlQgYnVmZmVycyAqLwogI2RlZmluZSBFRlhfV09SS0FST1VORF81MTI5IEVGWF9XT1JLQVJPVU5EX0ZBTENPTl9BCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYwppbmRleCAyZDUwYjZlLi5iYjFlZjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKQEAgLTcsOCArNyw4IEBACiAgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqLwogLyoKLSAqIERyaXZlciBmb3IgWEZQIG9wdGljYWwgUEhZcyAocGx1cyBzb21lIHN1cHBvcnQgc3BlY2lmaWMgdG8gdGhlIFF1YWtlIDIwMjIvMzIpCi0gKiBTZWUgd3d3LmFtY2MuY29tIGZvciBkZXRhaWxzIChzZWFyY2ggZm9yIHF0MjAzMikKKyAqIERyaXZlciBmb3IgU0ZQKyBhbmQgWEZQIG9wdGljYWwgUEhZcyBwbHVzIHNvbWUgc3VwcG9ydCBzcGVjaWZpYyB0byB0aGUKKyAqIEFNQ0MgUVQyMHh4IGFkYXB0ZXJzOyBzZWUgd3d3LmFtY2MuY29tIGZvciBkZXRhaWxzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0zMSw2ICszMSwyMSBAQAogLyogUXVha2Utc3BlY2lmaWMgTURJTyByZWdpc3RlcnMgKi8KICNkZWZpbmUgTURJT19RVUFLRV9MRUQwX1JFRwkoMHhEMDA2KQogCisvKiBRVDIwMjVDIG9ubHkgKi8KKyNkZWZpbmUgUENTX0ZXX0hFQVJUQkVBVF9SRUcJMHhkN2VlCisjZGVmaW5lIFBDU19GV19IRUFSVEJfTEJOCTAKKyNkZWZpbmUgUENTX0ZXX0hFQVJUQl9XSURUSAk4CisjZGVmaW5lIFBDU19VQzgwNTFfU1RBVFVTX1JFRwkweGQ3ZmQKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19MQk4JMAorI2RlZmluZSBQQ1NfVUNfU1RBVFVTX1dJRFRICTgKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19GV19TQVZFCTB4MjAKKyNkZWZpbmUgUE1BX1BNRF9GVFhfQ1RSTDJfUkVHCTB4YzMwOQorI2RlZmluZSBQTUFfUE1EX0ZUWF9TVEFUSUNfTEJOCTEzCisjZGVmaW5lIFBNQV9QTURfVkVORDFfUkVHCTB4YzAwMQorI2RlZmluZSBQTUFfUE1EX1ZFTkQxX0xCVFhEX0xCTgkxNQorI2RlZmluZSBQQ1NfVkVORDFfUkVHCSAgIAkweGMwMDAKKyNkZWZpbmUgUENTX1ZFTkQxX0xCVFhEX0xCTgk1CisKIHZvaWQgeGZwX3NldF9sZWQoc3RydWN0IGVmeF9uaWMgKnAsIGludCBsZWQsIGludCBtb2RlKQogewogCWludCBhZGRyID0gTURJT19RVUFLRV9MRUQwX1JFRyArIGxlZDsKQEAgLTQ1LDcgKzYwLDQ5IEBACiAjZGVmaW5lIFhGUF9NQVhfUkVTRVRfVElNRSA1MDAKICNkZWZpbmUgWEZQX1JFU0VUX1dBSVQgMTAKIAotLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWSkgYXMgZG9pbmcKK3N0YXRpYyBpbnQgcXQyMDI1Y193YWl0X3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFo7CisJaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKKwlpbnQgcmVnLCBvbGRfY291bnRlciA9IDA7CisKKwkvKiBXYWl0IGZvciBmaXJtd2FyZSBoZWFydGJlYXQgdG8gc3RhcnQgKi8KKwlmb3IgKDs7KSB7CisJCWludCBjb3VudGVyOworCQlyZWcgPSBtZGlvX2NsYXVzZTQ1X3JlYWQoZWZ4LCBwaHlfaWQsIE1ESU9fTU1EX1BDUywKKwkJCQkJIFBDU19GV19IRUFSVEJFQVRfUkVHKTsKKwkJaWYgKHJlZyA8IDApCisJCQlyZXR1cm4gcmVnOworCQljb3VudGVyID0gKChyZWcgPj4gUENTX0ZXX0hFQVJUQl9MQk4pICYKKwkJCSAgICAoKDEgPDwgUENTX0ZXX0hFQVJUQl9XSURUSCkgLSAxKSk7CisJCWlmIChvbGRfY291bnRlciA9PSAwKQorCQkJb2xkX2NvdW50ZXIgPSBjb3VudGVyOworCQllbHNlIGlmIChjb3VudGVyICE9IG9sZF9jb3VudGVyKQorCQkJYnJlYWs7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCW1zbGVlcCgxMCk7CisJfQorCisJLyogV2FpdCBmb3IgZmlybXdhcmUgc3RhdHVzIHRvIGxvb2sgZ29vZCAqLworCWZvciAoOzspIHsKKwkJcmVnID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QQ1MsCisJCQkJCSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcpOworCQlpZiAocmVnIDwgMCkKKwkJCXJldHVybiByZWc7CisJCWlmICgocmVnICYKKwkJICAgICAoKDEgPDwgUENTX1VDX1NUQVRVU19XSURUSCkgLSAxKSA8PCBQQ1NfVUNfU1RBVFVTX0xCTikgPj0KKwkJICAgIFBDU19VQ19TVEFUVVNfRldfU0FWRSkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMTAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWXMpIGFzIGRvaW5nCiAgKiBhIGNvbXBsZXRlIHNvZnQgcmVzZXQuCiAgKi8KIHN0YXRpYyBpbnQgeGZwX3Jlc2V0X3BoeShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNTgsNiArMTE1LDEyIEBACiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwogCisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQlyYyA9IHF0MjAyNWNfd2FpdF9yZXNldChlZngpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBmYWlsOworCX0KKwogCS8qIFdhaXQgMjUwbXMgZm9yIHRoZSBQSFkgdG8gY29tcGxldGUgYm9vdHVwICovCiAJbXNsZWVwKDI1MCk7CiAKQEAgLTczLDcgKzEzNiw3IEBACiAJcmV0dXJuIHJjOwogCiAgZmFpbDoKLQlFRlhfRVJSKGVmeCwgIlhGUDogcmVzZXQgdGltZWQgb3V0IVxuIik7CisJRUZYX0VSUihlZngsICJQSFkgcmVzZXQgdGltZWQgb3V0XG4iKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTg4LDE1ICsxNTEsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOwogCi0JRUZYX0lORk8oZWZ4LCAiWEZQOiBQSFkgSUQgcmVnICV4IChPVUkgJXggbW9kZWwgJXggcmV2aXNpb24iCi0JCSAiICV4KVxuIiwgZGV2aWQsIE1ESU9fSURfT1VJKGRldmlkKSwgTURJT19JRF9NT0RFTChkZXZpZCksCi0JCSBNRElPX0lEX1JFVihkZXZpZCkpOworCUVGWF9JTkZPKGVmeCwgIlBIWSBJRCByZWcgJXggKE9VSSAlMDZ4IG1vZGVsICUwMnggcmV2aXNpb24gJXgpXG4iLAorCQkgZGV2aWQsIG1kaW9faWRfb3VpKGRldmlkKSwgbWRpb19pZF9tb2RlbChkZXZpZCksCisJCSBtZGlvX2lkX3JldihkZXZpZCkpOwogCiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKIAogCXJjID0geGZwX3Jlc2V0X3BoeShlZngpOwogCi0JRUZYX0lORk8oZWZ4LCAiWEZQOiBQSFkgaW5pdCAlcy5cbiIsCisJRUZYX0lORk8oZWZ4LCAiUEhZIGluaXQgJXMuXG4iLAogCQkgcmMgPyAiZmFpbGVkIiA6ICJzdWNjZXNzZnVsIik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwpAQCAtMTMxLDEyICsxOTQsMjggQEAKIHsKIAlzdHJ1Y3QgeGZwX3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7CiAKLQkvKiBSZXNldCB0aGUgUEhZIHdoZW4gbW92aW5nIGZyb20gdHggb2ZmIHRvIHR4IG9uICovCi0JaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSAmJgotCSAgICAocGh5X2RhdGEtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpKQotCQl4ZnBfcmVzZXRfcGh5KGVmeCk7CisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgcmVnaXN0ZXIgYml0cyB3aGljaCBjYW4KKwkJICogZGlzYWJsZSBUWCAoYW5kIHNhdmUgcG93ZXIpIG9uIGRpcmVjdC1hdHRhY2ggY2FibGVzCisJCSAqIG9yIG9wdGljYWwgdHJhbnNjZWl2ZXJzLCB2YXJ5aW5nIHNvbWV3aGF0IGJldHdlZW4KKwkJICogZmlybXdhcmUgdmVyc2lvbnMuICBPbmx5ICdzdGF0aWMgbW9kZScgYXBwZWFycyB0bworCQkgKiBjb3ZlciBldmVyeXRoaW5nLiAqLworCQltZGlvX2NsYXVzZTQ1X3NldF9mbGFnKAorCQkJZWZ4LCBlZngtPm1paS5waHlfaWQsIE1ESU9fTU1EX1BNQVBNRCwKKwkJCVBNQV9QTURfRlRYX0NUUkwyX1JFRywgUE1BX1BNRF9GVFhfU1RBVElDX0xCTiwKKwkJCWVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9UWF9ESVNBQkxFRCB8fAorCQkJZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX0xPV19QT1dFUiB8fAorCQkJZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BDUyB8fAorCQkJZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1BNQVBNRCk7CisJfSBlbHNlIHsKKwkJLyogUmVzZXQgdGhlIFBIWSB3aGVuIG1vdmluZyBmcm9tIHR4IG9mZiB0byB0eCBvbiAqLworCQlpZiAoIShlZngtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpICYmCisJCSAgICAocGh5X2RhdGEtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQpKQorCQkJeGZwX3Jlc2V0X3BoeShlZngpOwogCi0JbWRpb19jbGF1c2U0NV90cmFuc21pdF9kaXNhYmxlKGVmeCk7CisJCW1kaW9fY2xhdXNlNDVfdHJhbnNtaXRfZGlzYWJsZShlZngpOworCX0KKwogCW1kaW9fY2xhdXNlNDVfcGh5X3JlY29uZmlndXJlKGVmeCk7CiAKIAlwaHlfZGF0YS0+cGh5X21vZGUgPSBlZngtPnBoeV9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCBiZTQ0NjViYy4uOGE3MGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTgwLDggKzgwLDggQEAKICNkZWZpbmUgU0lTOTAwX01PRFVMRV9OQU1FICJzaXM5MDAiCiAjZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMTAgQXByLiAyIDIwMDYiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CiAKIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDA7CiBzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKaW5kZXggOTQzMjU5MS4uMTc1OGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaApAQCAtNDY3LDUgKzQ2NywyMiBAQAogI2VuZGlmCS8qIERFQlVHX0JSRCAmJiBERUJVRyAqLwogfSA7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmRkaV9hZGRyIGZkZGlfYnJvYWRjYXN0OworCitleHRlcm4gdm9pZCBhbGxfc2VsZWN0aW9uX2NyaXRlcmlhKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIGNhcmRfc3RvcChzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X2JvYXJkKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKm1hY19hZGRyKTsKK2V4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X3BsYyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CitleHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKK2V4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKK2V4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKK2V4dGVybiBpbnQgcGNtX3N0YXR1c190d2lzdGVkKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOworZXh0ZXJuIHZvaWQgdGltZXJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKKwogI2VuZGlmCS8qIF9TQ01FQ01fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCA0MjE4ZTk3Li5kMzIyZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC05NywyMyArOTcsMTUgQEAKIAogZXh0ZXJuIHZvaWQqIG1hY19kcnZfZ2V0X3NwYWNlKHN0cnVjdCBzX3NtYyAqc21jLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCogbWFjX2Rydl9nZXRfZGVzY19tZW0oc3RydWN0IHNfc21jICpzbWMsIHVuc2lnbmVkIGludCBzaXplKTsKLWV4dGVybiB2b2lkIGluaXRfYm9hcmQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqbWFjX2FkZHIpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9maWxsX3J4ZChzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBwbGMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3R4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF90eGQgKnR4ZCk7Ci1leHRlcm4gdm9pZCBwbGMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKLWV4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKLWV4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKLWV4dGVybiB2b2lkIHRpbWVyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3J4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF9yeGQgKnJ4ZCwKIAkJCQlpbnQgZnJhZ19jb3VudCwgaW50IGxlbik7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3JlcXVldWVfcnhkKHN0cnVjdCBzX3NtYyAqc21jLCAKIAkJCQl2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsCiAJCQkJaW50IGZyYWdfY291bnQpOwotZXh0ZXJuIHZvaWQgaW5pdF9wbGMoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9jbGVhcl9yeGQoc3RydWN0IHNfc21jICpzbWMsCiAJCQkgICAgICB2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsIGludCBmcmFnX2NvdW50KTsKIApAQCAtMTM2LDcgKzEyOCw2IEBACiAJCQkgaW50IGZsYWcpOwogI2VuZGlmCiAKLWV4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gaW50IG1hY19kcnZfcnhfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGxlbiwgaW50IGZjLCBjaGFyICpsb29rX2FoZWFkLAogCQkJICAgaW50IGxhX2xlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IDc0ZTEyOWYuLmYxZGYyZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtMTk4LDkgKzE5OCw2IEBACiBzdGF0aWMgY29uc3QgaW50IHBsY19pbXNrX2FjdCA9IFBMX1BDTV9DT0RFIHwgUExfVFJBQ0VfUFJPUCB8IFBMX1BDTV9CUkVBSyB8CiAJCQlQTF9QQ01fRU5BQkxFRCB8IFBMX1NFTEZfVEVTVCB8IFBMX0VCVUZfRVJSOwogCi0vKiBleHRlcm5hbCBmdW5jdGlvbnMgKi8KLXZvaWQgYWxsX3NlbGVjdGlvbl9jcml0ZXJpYShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgcGNtX2ZzbShzdHJ1Y3Qgc19zbWMgKnNtYywgc3RydWN0IHNfcGh5ICpwaHksIGludCBjbWQpOwogc3RhdGljIHZvaWQgcGNfcmNvZGVfYWN0aW9ucyhzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGJpdCwgc3RydWN0IHNfcGh5ICpwaHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggOWEwMGU1NS4uZTE0YWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC0xMzUsMTQgKzEzNSwxMSBAQAogCiAvLyBFeHRlcm5hbCBmdW5jdGlvbnMgZnJvbSB0aGUgaGFyZHdhcmUgbW9kdWxlCiBleHRlcm4gdV9pbnQgbWFjX2Rydl9jaGVja19zcGFjZSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOwotZXh0ZXJuIHZvaWQgY2FyZF9zdG9wKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiBpbnQgbWFjX2Rydl9pbml0KHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIGh3bV90eF9mcmFnKHN0cnVjdCBzX3NtYyAqc21jLCBjaGFyIGZhciAqIHZpcnQsIHVfbG9uZyBwaHlzLAogCQkJaW50IGxlbiwgaW50IGZyYW1lX3N0YXR1cyk7CiBleHRlcm4gaW50IGh3bV90eF9pbml0KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgZmMsIGludCBmcmFnX2NvdW50LAogCQkgICAgICAgaW50IGZyYW1lX2xlbiwgaW50IGZyYW1lX3N0YXR1cyk7Ci1leHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CiBleHRlcm4gdm9pZCBmZGRpX2lzcihzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBod21fcnhfZnJhZyhzdHJ1Y3Qgc19zbWMgKnNtYywgY2hhciBmYXIgKiB2aXJ0LCB1X2xvbmcgcGh5cywKIAkJCWludCBsZW4sIGludCBmcmFtZV9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKaW5kZXggODA1MzgzYi4uODNkMTZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCkBAIC01NSwxNiArNTUsNiBAQAogfSA7CiAKIC8qCi0gKiBleHRlcm5hbCB2YXJpYWJsZXMKLSAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmZGRpX2FkZHIgZmRkaV9icm9hZGNhc3QgOwotCi0vKgotICogZXh0ZXJuYWwgZnVuY3Rpb25zCi0gKi8KLWludCBwY21fc3RhdHVzX3R3aXN0ZWQoc3RydWN0IHNfc21jICpzbWMpOwotCi0vKgogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiAjaWZkZWYJTElUVExFX0VORElBTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IGM5ZGJiMDYuLjk1MmQzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTMyMTQsNyArMzIxNCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5od19sb2NrLCBmbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaHctPmludHJfbWFzayB8PSBuYXBpbWFza1tza2dlLT5wb3J0XTsKIAkJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKIAkJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOwpAQCAtMzM3Nyw3ICszMzc3LDcgQEAKIAlpZiAoc3RhdHVzICYgKElTX1hBMV9GfElTX1IxX0YpKSB7CiAJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2WzBdKTsKIAkJaHctPmludHJfbWFzayAmPSB+KElTX1hBMV9GfElTX1IxX0YpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOwogCX0KIAogCWlmIChzdGF0dXMgJiBJU19QQV9UT19UWDEpCkBAIC0zMzk3LDcgKzMzOTcsNyBAQAogCiAJCWlmIChzdGF0dXMgJiAoSVNfWEEyX0Z8SVNfUjJfRikpIHsKIAkJCWh3LT5pbnRyX21hc2sgJj0gfihJU19YQTJfRnxJU19SMl9GKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOwogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1JYMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDk5NDcwM2MuLmQwMWM1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTEwNjgsMTMgKzEwNjgsMTYgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBza3kyX3J4X21hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAorc3RhdGljIGludCBza3kyX3J4X21hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAogCQkJICAgIHVuc2lnbmVkIHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJlLT5za2I7CiAJaW50IGk7CiAKIAlyZS0+ZGF0YV9hZGRyID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgcmUtPmRhdGFfYWRkcikpKQorCQlyZXR1cm4gLUVJTzsKKwogCXBjaV91bm1hcF9sZW5fc2V0KHJlLCBkYXRhX3NpemUsIHNpemUpOwogCiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKQEAgLTEwODMsNiArMTA4Niw3IEBACiAJCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAogCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9yeF91bm1hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlKQpAQCAtMTM1NCw3ICsxMzU4LDEyIEBACiAJCWlmICghcmUtPnNrYikKIAkJCWdvdG8gbm9tZW07CiAKLQkJc2t5Ml9yeF9tYXBfc2tiKGh3LT5wZGV2LCByZSwgc2t5Mi0+cnhfZGF0YV9zaXplKTsKKwkJaWYgKHNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSkpIHsKKwkJCWRldl9rZnJlZV9za2IocmUtPnNrYik7CisJCQlyZS0+c2tiID0gTlVMTDsKKwkJCWdvdG8gbm9tZW07CisJCX0KKwogCQlza3kyX3J4X3N1Ym1pdChza3kyLCByZSk7CiAJfQogCkBAIC0xNTQ3LDcgKzE1NTYsNyBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IE5VTEw7CiAJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmU7Ci0JdW5zaWduZWQgaSwgbGVuOworCXVuc2lnbmVkIGksIGxlbiwgZmlyc3Rfc2xvdDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTE2IG1zczsKIAl1OCBjdHJsOwpAQCAtMTU1NSwxMyArMTU2NCwxNyBAQAogIAlpZiAodW5saWtlbHkodHhfYXZhaWwoc2t5MikgPCB0eF9sZV9yZXEoc2tiKSkpCiAgIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCi0JaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9xdWV1ZWQoc2t5MikpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBza3kyLT50eF9wcm9kLCBza2ItPmxlbik7Ci0KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShody0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihody0+cGRldiwgbWFwcGluZykpCisJCWdvdG8gbWFwcGluZ19lcnJvcjsKKworCWZpcnN0X3Nsb3QgPSBza3kyLT50eF9wcm9kOworCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZmlyc3Rfc2xvdCwgc2tiLT5sZW4pOworCiAJLyogU2VuZCBoaWdoIGJpdHMgaWYgbmVlZGVkICovCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7CiAJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwpAQCAtMTY0OCw2ICsxNjYxLDkgQEAKIAkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShody0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCiAJCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaHctPnBkZXYsIG1hcHBpbmcpKQorCQkJZ290byBtYXBwaW5nX3Vud2luZDsKKwogCQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKIAkJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwogCQkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG1hcHBpbmcpKTsKQEAgLTE2NzYsNiArMTY5MiwzNCBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworbWFwcGluZ191bndpbmQ6CisJZm9yIChpID0gZmlyc3Rfc2xvdDsgaSAhPSBza3kyLT50eF9wcm9kOyBpID0gUklOR19ORVhUKGksIFRYX1JJTkdfU0laRSkpIHsKKwkJbGUgPSBza3kyLT50eF9sZSArIGk7CisJCXJlID0gc2t5Mi0+dHhfcmluZyArIGk7CisKKwkJc3dpdGNoKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKKwkJY2FzZSBPUF9MQVJHRVNFTkQ6CisJCWNhc2UgT1BfUEFDS0VUOgorCQkJcGNpX3VubWFwX3NpbmdsZShody0+cGRldiwKKwkJCQkJIHBjaV91bm1hcF9hZGRyKHJlLCBtYXBhZGRyKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJyZWFrOworCQljYXNlIE9QX0JVRkZFUjoKKwkJCXBjaV91bm1hcF9wYWdlKGh3LT5wZGV2LCBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCisJCQkJICAgICAgIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlza3kyLT50eF9wcm9kID0gZmlyc3Rfc2xvdDsKK21hcHBpbmdfZXJyb3I6CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJZGV2X3dhcm4oJmh3LT5wZGV2LT5kZXYsICIlczogdHggbWFwcGluZyBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTIxOTEsNyArMjIzNSwxMSBAQAogCiAJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAlyZS0+c2tiID0gbnNrYjsKLQlza3kyX3J4X21hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlLCBoZHJfc3BhY2UpOworCWlmIChza3kyX3J4X21hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlLCBoZHJfc3BhY2UpKSB7CisJCWRldl9rZnJlZV9za2IobnNrYik7CisJCXJlLT5za2IgPSBza2I7CisJCXJldHVybiBOVUxMOworCX0KIAogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKQogCQlza2JfcHV0X2ZyYWdzKHNrYiwgaGRyX3NwYWNlLCBsZW5ndGgpOwpAQCAtMjY4NywxMyArMjczNSw2IEBACiAJCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQnVnL0VycmF0YSB3b3JrYXJvdW5kPwotCSAqIE5lZWQgdG8ga2ljayB0aGUgVFggaXJxIG1vZGVyYXRpb24gdGltZXIuCi0JICovCi0JaWYgKHNreTJfcmVhZDgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCkgPT0gVElNX1NUQVJUKSB7Ci0JCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKLQkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUQVJUKTsKLQl9CiAJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7CiBkb25lOgpAQCAtMzg2NCw2ICszOTA1LDg2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpza3kyX2RlYnVnOwogCisKKy8qCisgKiBSZWFkIGFuZCBwYXJzZSB0aGUgZmlyc3QgcGFydCBvZiBWaXRhbCBQcm9kdWN0IERhdGEKKyAqLworI2RlZmluZSBWUERfU0laRQkxMjgKKyNkZWZpbmUgVlBEX01BR0lDCTB4ODIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2cGRfdGFnIHsKKwljaGFyIHRhZ1syXTsKKwljaGFyICpsYWJlbDsKK30gdnBkX3RhZ3NbXSA9IHsKKwl7ICJQTiIsCSJQYXJ0IE51bWJlciIgfSwKKwl7ICJFQyIsICJFbmdpbmVlcmluZyBMZXZlbCIgfSwKKwl7ICJNTiIsICJNYW51ZmFjdHVyZXIiIH0sCisJeyAiU04iLCAiU2VyaWFsIE51bWJlciIgfSwKKwl7ICJZQSIsICJBc3NldCBUYWciIH0sCisJeyAiVkwiLCAiRmlyc3QgRXJyb3IgTG9nIE1lc3NhZ2UiIH0sCisJeyAiVkYiLCAiU2Vjb25kIEVycm9yIExvZyBNZXNzYWdlIiB9LAorCXsgIlZCIiwgIkJvb3QgQWdlbnQgUk9NIENvbmZpZ3VyYXRpb24iIH0sCisJeyAiVkUiLCAiRUZJIFVOREkgQ29uZmlndXJhdGlvbiIgfSwKK307CisKK3N0YXRpYyB2b2lkIHNreTJfc2hvd192cGQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlzaXplX3QgdnBkX3NpemU7CisJbG9mZl90IG9mZnM7CisJdTggbGVuOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1MTYgcmVnMjsKKworCXJlZzIgPSBza3kyX3BjaV9yZWFkMTYoaHcsIFBDSV9ERVZfUkVHMik7CisJdnBkX3NpemUgPSAxIDw8ICggKChyZWcyICYgUENJX1ZQRF9ST01fU1opID4+IDE0KSArIDgpOworCisJc2VxX3ByaW50ZihzZXEsICIlcyBQcm9kdWN0IERhdGFcbiIsIHBjaV9uYW1lKGh3LT5wZGV2KSk7CisJYnVmID0ga21hbGxvYyh2cGRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJc2VxX3B1dHMoc2VxLCAibm8gbWVtb3J5IVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGNpX3JlYWRfdnBkKGh3LT5wZGV2LCAwLCB2cGRfc2l6ZSwgYnVmKSA8IDApIHsKKwkJc2VxX3B1dHMoc2VxLCAiVlBEIHJlYWQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGJ1ZlswXSAhPSBWUERfTUFHSUMpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJWUEQgdGFnIG1pc21hdGNoOiAlI3hcbiIsIGJ1ZlswXSk7CisJCWdvdG8gb3V0OworCX0KKwlsZW4gPSBidWZbMV07CisJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IHZwZF9zaXplIC0gNCkgeworCQlzZXFfcHJpbnRmKHNlcSwgIkludmFsaWQgaWQgbGVuZ3RoOiAlZFxuIiwgbGVuKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICIlLipzXG4iLCBsZW4sIGJ1ZiArIDMpOworCW9mZnMgPSBsZW4gKyAzOworCisJd2hpbGUgKG9mZnMgPCB2cGRfc2l6ZSAtIDQpIHsKKwkJaW50IGk7CisKKwkJaWYgKCFtZW1jbXAoIlJXIiwgYnVmICsgb2ZmcywgMikpCS8qIGVuZCBtYXJrZXIgKi8KKwkJCWJyZWFrOworCQlsZW4gPSBidWZbb2ZmcyArIDJdOworCQlpZiAob2ZmcyArIGxlbiArIDMgPj0gdnBkX3NpemUpCisJCQlicmVhazsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2cGRfdGFncyk7IGkrKykgeworCQkJaWYgKCFtZW1jbXAodnBkX3RhZ3NbaV0udGFnLCBidWYgKyBvZmZzLCAyKSkgeworCQkJCXNlcV9wcmludGYoc2VxLCAiICVzOiAlLipzXG4iLAorCQkJCQkgICB2cGRfdGFnc1tpXS5sYWJlbCwgbGVuLCBidWYgKyBvZmZzICsgMyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJb2ZmcyArPSBsZW4gKyAzOworCX0KK291dDoKKwlrZnJlZShidWYpOworfQorCiBzdGF0aWMgaW50IHNreTJfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2VxLT5wcml2YXRlOwpAQCAtMzg3MywxNCArMzk5NCwxOCBAQAogCXVuc2lnbmVkIGlkeCwgbGFzdDsKIAlpbnQgc29wOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047CisJc2t5Ml9zaG93X3ZwZChzZXEsIGh3KTsKIAotCXNlcV9wcmludGYoc2VxLCAiSVJRIHNyYz0leCBtYXNrPSV4IGNvbnRyb2w9JXhcbiIsCisJc2VxX3ByaW50ZihzZXEsICJcbklSUSBzcmM9JXggbWFzaz0leCBjb250cm9sPSV4XG4iLAogCQkgICBza3kyX3JlYWQzMihodywgQjBfSVNSQyksCiAJCSAgIHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKSwKIAkJICAgc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0lDUikpOwogCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJuZXR3b3JrIG5vdCBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAJbGFzdCA9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpOwogCkBAIC00MjA0LDY5ICs0MzI5LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKgotICogUmVhZCBhbmQgcGFyc2UgdGhlIGZpcnN0IHBhcnQgb2YgVml0YWwgUHJvZHVjdCBEYXRhCi0gKi8KLSNkZWZpbmUgVlBEX1NJWkUJMTI4Ci0jZGVmaW5lIFZQRF9NQUdJQwkweDgyCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBza3kyX3ZwZF9pbmZvKHN0cnVjdCBza3kyX2h3ICpodykKLXsKLQlpbnQgY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShody0+cGRldiwgUENJX0NBUF9JRF9WUEQpOwotCWNvbnN0IHU4ICpwOwotCXU4ICp2cGRfYnVmID0gTlVMTDsKLQl1MTYgbGVuOwotCXN0YXRpYyBzdHJ1Y3QgdnBkX3RhZyB7Ci0JCWNoYXIgdGFnWzJdOwotCQljaGFyICpsYWJlbDsKLQl9IHZwZF90YWdzW10gPSB7Ci0JCXsgIlBOIiwJIlBhcnQgTnVtYmVyIiB9LAotCQl7ICJFQyIsICJFbmdpbmVlcmluZyBMZXZlbCIgfSwKLQkJeyAiTU4iLCAiTWFudWZhY3R1cmVyIiB9LAotCX07Ci0KLQlpZiAoIWNhcCkKLQkJZ290byBvdXQ7Ci0KLQl2cGRfYnVmID0ga21hbGxvYyhWUERfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2cGRfYnVmKQotCQlnb3RvIG91dDsKLQotCWlmIChza3kyX3ZwZF9yZWFkKGh3LCBjYXAsIHZwZF9idWYsIDAsIFZQRF9TSVpFKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAodnBkX2J1ZlswXSAhPSBWUERfTUFHSUMpCi0JCWdvdG8gb3V0OwotCWxlbiA9IHZwZF9idWZbMV07Ci0JaWYgKGxlbiA9PSAwIHx8IGxlbiA+IFZQRF9TSVpFIC0gNCkKLQkJZ290byBvdXQ7Ci0JcCA9IHZwZF9idWYgKyAzOwotCWRldl9pbmZvKCZody0+cGRldi0+ZGV2LCAiJS4qc1xuIiwgbGVuLCBwKTsKLQlwICs9IGxlbjsKLQotCXdoaWxlIChwIDwgdnBkX2J1ZiArIFZQRF9TSVpFIC0gNCkgewotCQlpbnQgaTsKLQotCQlpZiAoIW1lbWNtcCgiUlciLCBwLCAyKSkJLyogZW5kIG1hcmtlciAqLwotCQkJYnJlYWs7Ci0KLQkJbGVuID0gcFsyXTsKLQkJaWYgKGxlbiA+IChwIC0gdnBkX2J1ZikgLSA0KQotCQkJYnJlYWs7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBkX3RhZ3MpOyBpKyspIHsKLQkJCWlmICghbWVtY21wKHZwZF90YWdzW2ldLnRhZywgcCwgMikpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICVzOiAlLipzXG4iLAotCQkJCSAgICAgICB2cGRfdGFnc1tpXS5sYWJlbCwgbGVuLCBwICsgMyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcCArPSBsZW4gKyAzOwotCX0KLW91dDoKLQlrZnJlZSh2cGRfYnVmKTsKLX0KLQogLyogVGhpcyBkcml2ZXIgc3VwcG9ydHMgeXVrb24yIGNoaXBzZXQgb25seSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnNreTJfbmFtZSh1OCBjaGlwaWQsIGNoYXIgKmJ1ZiwgaW50IHN6KQogewpAQCAtNDI5NCw2ICs0MzU2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza3kyX2h3ICpodzsKIAlpbnQgZXJyLCB1c2luZ19kYWMgPSAwLCB3b2xfZGVmYXVsdDsKKwl1MzIgcmVnOwogCWNoYXIgYnVmMVsxNl07CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTQzMjcsNiArNDM5MCwzNCBAQAogCQl9CiAJfQogCisJLyogR2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwkgKiBOb3RlOiBvbmx5IHJlZ3VsYXIgUENJIGNvbmZpZyBhY2Nlc3Mgb25jZSB0byB0ZXN0IGZvciBIVyBpc3N1ZXMKKwkgKiAgICAgICBvdGhlciBQQ0kgYWNjZXNzIHRocm91Z2ggc2hhcmVkIG1lbW9yeSBmb3Igc3BlZWQgYW5kIHRvCisJICoJIGF2b2lkIE1NQ09ORklHIHByb2JsZW1zLgorCSAqLworCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzIsICZyZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIHJlYWQgY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorCisJLyogc2l6ZSBvZiBhdmFpbGFibGUgVlBELCBvbmx5IGltcGFjdCBzeXNmcyAqLworCWVyciA9IHBjaV92cGRfdHJ1bmNhdGUocGRldiwgMXVsIDw8ICgoKHJlZyAmIFBDSV9WUERfUk9NX1NaKSA+PiAxNCkgKyA4KSk7CisJaWYgKGVycikKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkNhbid0IHNldCBWUEQgc2l6ZVxuIik7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkvKiBUaGUgc2s5OGxpbiB2ZW5kb3IgZHJpdmVyIHVzZXMgaGFyZHdhcmUgYnl0ZSBzd2FwcGluZyBidXQKKwkgKiB0aGlzIGRyaXZlciB1c2VzIHNvZnR3YXJlIHN3YXBwaW5nLgorCSAqLworCXJlZyAmPSB+UENJX1JFVl9ERVNDOworCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldixQQ0lfREVWX1JFRzIsIHJlZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQQ0kgd3JpdGUgY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorI2VuZGlmCisKIAl3b2xfZGVmYXVsdCA9IGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpID8gV0FLRV9NQUdJQyA6IDA7CiAKIAllcnIgPSAtRU5PTUVNOwpAQCAtNDM0NCwxOCArNDQzNSw2IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIAotI2lmZGVmIF9fQklHX0VORElBTgotCS8qIFRoZSBzazk4bGluIHZlbmRvciBkcml2ZXIgdXNlcyBoYXJkd2FyZSBieXRlIHN3YXBwaW5nIGJ1dAotCSAqIHRoaXMgZHJpdmVyIHVzZXMgc29mdHdhcmUgc3dhcHBpbmcuCi0JICovCi0JewotCQl1MzIgcmVnOwotCQlyZWcgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHMik7Ci0JCXJlZyAmPSB+UENJX1JFVl9ERVNDOwotCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzIsIHJlZyk7Ci0JfQotI2VuZGlmCi0KIAkvKiByaW5nIGZvciBzdGF0dXMgcmVzcG9uc2VzICovCiAJaHctPnN0X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX0xFX0JZVEVTLCAmaHctPnN0X2RtYSk7CiAJaWYgKCFody0+c3RfbGUpCkBAIC00MzcwLDggKzQ0NDksNiBAQAogCiAJc2t5Ml9yZXNldChodyk7CiAKLQlza3kyX3ZwZF9pbmZvKGh3KTsKLQogCWRldiA9IHNreTJfaW5pdF9uZXRkZXYoaHcsIDAsIHVzaW5nX2RhYywgd29sX2RlZmF1bHQpOwogCWlmICghZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggMjIzY2RlMC4uMjkzNjEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAKIHsKIAlzdHJuY3B5KGluZm8tPmRyaXZlciwgQ0FSRE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIAlzdHJuY3B5KGluZm8tPnZlcnNpb24sIHZlcnNpb24sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Ci0Jc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2LT5kZXYucGFyZW50LT5idXNfaWQsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCiBzdGF0aWMgaW50IHNtYzkxMXhfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggYjIxNWE4ZC4uZmRjYmFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTE2MTQsNyArMTYxNCw3IEBACiB7CiAJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAogc3RhdGljIGludCBzbWNfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE2NDMsNiArMTY0MywxMTcgQEAKIAlscC0+bXNnX2VuYWJsZSA9IGxldmVsOwogfQogCitzdGF0aWMgaW50IHNtY193cml0ZV9lZXByb21fd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkciwgdTE2IHdvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBsb2FkIHdvcmQgaW50byBHUCByZWdpc3RlciAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJU01DX1NFVF9HUChscCwgd29yZCk7CisJLyogc2V0IHRoZSBhZGRyZXNzIHRvIHB1dCB0aGUgZGF0YSBpbiBFRVBST00gKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCVNNQ19TRVRfUFRSKGxwLCBhZGRyKTsKKwkvKiB0ZWxsIGl0IHRvIHdyaXRlICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9TVE9SRSkpOworCS8qIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLworCWRvIHsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKFNNQ19HRVRfQ1RMKGxwKSAmIENUTF9TVE9SRSk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19yZWFkX2VlcHJvbV93b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBhZGRyLCB1MTYgKndvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBzZXQgdGhlIEVFUFJPTSBhZGRyZXNzIHRvIGdldCB0aGUgZGF0YSBmcm9tICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX1BUUihscCwgYWRkciB8IFBUUl9SRUFEKTsKKwkvKiB0ZWxsIGl0IHRvIGxvYWQgKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCVNNQ19TRVRfR1AobHAsIDB4ZmZmZik7CS8qIGluaXQgdG8ga25vd24gKi8KKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9SRUxPQUQpKTsKKwkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChTTUNfR0VUX0NUTChscCkgJiBDVExfUkVMT0FEKTsKKwkvKiByZWFkIHdvcmQgZnJvbSBHUCByZWdpc3RlciAqLworCSp3b3JkID0gU01DX0dFVF9HUChscCk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMHgyMyAqIDI7Cit9CisKK3N0YXRpYyBpbnQgc21jX2V0aHRvb2xfZ2V0ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgaW1heDsKKworCURCRygxLCAiUmVhZGluZyAlZCBieXRlcyBhdCAlZCgweCV4KVxuIiwKKwkJZWVwcm9tLT5sZW4sIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCk7CisJaW1heCA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tLT5sZW47IGkgKz0gMikgeworCQlpbnQgcmV0OworCQl1MTYgd2J1ZjsKKwkJaW50IG9mZnNldCA9IGkgKyBlZXByb20tPm9mZnNldDsKKwkJaWYgKG9mZnNldCA+IGltYXgpCisJCQlicmVhazsKKwkJcmV0ID0gc21jX3JlYWRfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgJndidWYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCQlEQkcoMiwgIlJlYWQgMHgleCBmcm9tIDB4JXhcbiIsIHdidWYsIG9mZnNldCA+PiAxKTsKKwkJZGF0YVtpXSA9ICh3YnVmID4+IDgpICYgMHhmZjsKKwkJZGF0YVtpKzFdID0gd2J1ZiAmIDB4ZmY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX3NldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGk7CisJaW50IGltYXg7CisKKwlEQkcoMSwgIldyaXRpbmcgJWQgYnl0ZXMgdG8gJWQoMHgleClcbiIsCisJCQllZXByb20tPmxlbiwgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+b2Zmc2V0KTsKKwlpbWF4ID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbihkZXYpOworCWZvciAoaSA9IDA7IGkgPCBlZXByb20tPmxlbjsgaSArPSAyKSB7CisJCWludCByZXQ7CisJCXUxNiB3YnVmOworCQlpbnQgb2Zmc2V0ID0gaSArIGVlcHJvbS0+b2Zmc2V0OworCQlpZiAob2Zmc2V0ID4gaW1heCkKKwkJCWJyZWFrOworCQl3YnVmID0gKGRhdGFbaV0gPDwgOCkgfCBkYXRhW2kgKyAxXTsKKwkJREJHKDIsICJXcml0aW5nIDB4JXggdG8gMHgleFxuIiwgd2J1Ziwgb2Zmc2V0ID4+IDEpOworCQlyZXQgPSBzbWNfd3JpdGVfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgd2J1Zik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21jX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSBzbWNfZXRodG9vbF9nZXRzZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gc21jX2V0aHRvb2xfc2V0c2V0dGluZ3MsCkBAIC0xNjUyLDggKzE3NjMsMjIgQEAKIAkuc2V0X21zZ2xldmVsCT0gc21jX2V0aHRvb2xfc2V0bXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQJPSBzbWNfZXRodG9vbF9ud2F5cmVzZXQsCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLS8vCS5nZXRfZWVwcm9tCT0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tLAotLy8JLnNldF9lZXByb20JPSBzbWNfZXRodG9vbF9zZXRlZXByb20sCisJLmdldF9lZXByb21fbGVuID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX2dldGVlcHJvbSwKKwkuc2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX3NldGVlcHJvbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBzbWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNtY19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHNtY190aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNtY19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKIH07CiAKIC8qCkBAIC0xODY1LDE2ICsxOTkwLDkgQEAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldCB2YWx1ZXMuICovCiAJZXRoZXJfc2V0dXAoZGV2KTsKIAotCWRldi0+b3BlbiA9IHNtY19vcGVuOwotCWRldi0+c3RvcCA9IHNtY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtY19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gc21jX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc21jX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZzbWNfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHNtY19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAogCXRhc2tsZXRfaW5pdCgmbHAtPnR4X3Rhc2ssIHNtY19oYXJkd2FyZV9zZW5kX3BrdCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKIAlJTklUX1dPUksoJmxwLT5waHlfY29uZmlndXJlLCBzbWNfcGh5X2NvbmZpZ3VyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IGM0Y2NkMTIuLmVkOWFlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0xMTQxLDYgKzExNDEsMTYgQEAKIAogI2RlZmluZSBTTUNfR0VUX01JSShscCkJCVNNQ19pbncoaW9hZGRyLCBNSUlfUkVHKGxwKSkKIAorI2RlZmluZSBTTUNfR0VUX0dQKGxwKQkJU01DX2ludyhpb2FkZHIsIEdQX1JFRyhscCkpCisKKyNkZWZpbmUgU01DX1NFVF9HUChscCwgeCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUobHApKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIFNNQ19SRUcobHAsIDgsIDEpKTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCVNNQ19vdXR3KHgsIGlvYWRkciwgR1BfUkVHKGxwKSk7CQlcCisJfSB3aGlsZSAoMCkKKwogI2RlZmluZSBTTUNfU0VUX01JSShscCwgeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgTUlJX1JFRyhscCkpCiAKICNkZWZpbmUgU01DX0dFVF9NSVIobHApCQlTTUNfaW53KGlvYWRkciwgTUlSX1JFRyhscCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwppbmRleCBkMTU5MGFjLi5hZDNjYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKQEAgLTM2OCw0OCArMzY4LDUzIEBACiAJcmV0dXJuIHJlZzsKIH0KIAotLyogQXV0b2RldGVjdHMgYW5kIGluaXRpYWxpc2VzIGV4dGVybmFsIHBoeSBmb3IgU01TQzkxMTUgYW5kIFNNU0M5MTE3IGZsYXZvcnMuCi0gKiBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgcmV0dXJucyAtRU5PREVWIHRvIHJldmVydCBiYWNrIHRvIGludGVybmFsIHBoeS4KLSAqIFBlcmZvcm1lZCBhdCBpbml0aWFsaXNhdGlvbiBvbmx5LCBzbyBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi1zdGF0aWMgaW50IHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKKy8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkuIEFzc3VtZXMgdHggYW5kIHJ4IGFyZSBzdG9wcGVkLiAqLworc3RhdGljIHZvaWQgc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCiB7CiAJdW5zaWduZWQgaW50IGh3Y2ZnID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEhXX0NGRyk7CiAKLQkvKiBFeHRlcm5hbCBwaHkgaXMgcmVxdWVzdGVkLCBzdXBwb3J0ZWQsIGFuZCBkZXRlY3RlZCAqLwotCWlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkvKiBEaXNhYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLworCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7CisJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CisJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byBzdG9wICovCiAKLQkJLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeS4gQXNzdW1pbmcgdHggYW5kIHJ4IGFyZSBzdG9wcGVkCi0JCSAqIGJlY2F1c2Ugc21zYzkxMXhfcGh5X2luaXRpYWxpc2UgaXMgY2FsbGVkIGJlZm9yZQotCQkgKiBzbXNjOTExeF9yeF9pbml0aWFsaXNlIGFuZCB0eF9pbml0aWFsaXNlLiAqLworCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkgKi8KKwlod2NmZyB8PSBIV19DRkdfRVhUX1BIWV9FTl87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKIAotCQkvKiBEaXNhYmxlIHBoeSBjbG9ja3MgdG8gdGhlIE1BQyAqLwotCQlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOwotCQlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfQ0xLX0RJU187Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0JCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gc3RvcCAqLworCS8qIEVuYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KKwlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOworCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gcmVzdGFydCAqLwogCi0JCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkgKi8KLQkJaHdjZmcgfD0gSFdfQ0ZHX0VYVF9QSFlfRU5fOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCWh3Y2ZnIHw9IEhXX0NGR19TTUlfU0VMXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworfQogCi0JCS8qIEVuYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KLQkJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKLQkJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0VYVF9QSFlfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCQl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHJlc3RhcnQgKi8KKy8qIEF1dG9kZXRlY3RzIGFuZCBlbmFibGVzIGV4dGVybmFsIHBoeSBpZiBwcmVzZW50IG9uIHN1cHBvcnRlZCBjaGlwcy4KKyAqIGF1dG9kZXRlY3Rpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlY2lmeWluZyBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkKKyAqIG9yIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSBpbiB0aGUgcGxhdGZvcm1fZGF0YSBmbGFncy4gKi8KK3N0YXRpYyB2b2lkIHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaHdjZmcgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSFdfQ0ZHKTsKIAotCQlod2NmZyB8PSBIV19DRkdfU01JX1NFTF87Ci0JCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7Ci0KLQkJU01TQ19UUkFDRShIVywgIlN1Y2Nlc3NmdWxseSBzd2l0Y2hlZCB0byBleHRlcm5hbCBQSFkiKTsKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSkgeworCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CisJfSBlbHNlIGlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfRk9SQ0VfRVhURVJOQUxfUEhZKSB7CisJCVNNU0NfVFJBQ0UoSFcsICJGb3JjaW5nIGV4dGVybmFsIFBIWSIpOworCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CisJfSBlbHNlIGlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKKwkJU01TQ19UUkFDRShIVywgIkhXX0NGRyBFWFRfUEhZX0RFVCBzZXQsIHVzaW5nIGV4dGVybmFsIFBIWSIpOworCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKIAkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CiAJfSBlbHNlIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAiTm8gZXh0ZXJuYWwgUEhZIGRldGVjdGVkLCAiCi0JCQkiVXNpbmcgaW50ZXJuYWwgUEhZIGluc3RlYWQuIik7Ci0JCS8qIFVzZSBpbnRlcm5hbCBwaHkgKi8KLQkJcmV0dXJuIC1FTk9ERVY7CisJCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgY2xlYXIsIHVzaW5nIGludGVybmFsIFBIWSIpOworCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEZldGNoZXMgYSB0eCBzdGF0dXMgb3V0IG9mIHRoZSBzdGF0dXMgZmlmbyAqLwpAQCAtNzY5LDcgKzc3NCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJJnNtc2M5MTF4X3BoeV9hZGp1c3RfbGluaywgMCwgcGRhdGEtPmNvbmZpZy5waHlfaW50ZXJmYWNlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewpAQCAtNzc4LDcgKzc4Myw4IEBACiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsCisJCWRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CkBAIC04MjQsMjIgKzgzMCwxOCBAQAogCiAJcGRhdGEtPm1paV9idXMtPnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKLQogCXN3aXRjaCAocGRhdGEtPmlkcmV2ICYgMHhGRkZGMDAwMCkgewogCWNhc2UgMHgwMTE3MDAwMDoKIAljYXNlIDB4MDExNTAwMDA6CiAJY2FzZSAweDExN0EwMDAwOgogCWNhc2UgMHgxMTVBMDAwMDoKIAkJLyogRXh0ZXJuYWwgUEhZIHN1cHBvcnRlZCwgdHJ5IHRvIGF1dG9kZXRlY3QgKi8KLQkJaWYgKHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHBkYXRhKSA8IDApIHsKLQkJCVNNU0NfVFJBQ0UoSFcsICJObyBleHRlcm5hbCBQSFkgZGV0ZWN0ZWQsICIKLQkJCQkidXNpbmcgaW50ZXJuYWwgUEhZIik7Ci0JCX0KKwkJc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwocGRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTTVNDX1RSQUNFKEhXLCAiRXh0ZXJuYWwgUEhZIGlzIG5vdCBzdXBwb3J0ZWQsICIKIAkJCSJ1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJCWJyZWFrOwogCX0KIApAQCAtODkzLDIyICs4OTUsMjIgQEAKIAkJCVNNU0NfV0FSTklORyhIVywKIAkJCQkiUGFja2V0IHRhZyByZXNlcnZlZCBiaXQgaXMgaGlnaCIpOwogCQl9IGVsc2UgewotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDA4MDAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVNfKSkgewogCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQl9IGVsc2UgewogCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gKHR4X3N0YXQgPj4gMTYpOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwMTAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVhDRVNTX0NPTF8pKSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDE2OwogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gMTsKIAkJCX0gZWxzZSB7CiAJCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9CiAJCQkJICAgICgodHhfc3RhdCA+PiAzKSAmIDB4Rik7CiAJCQl9Ci0JCQlpZiAodW5saWtlbHkodHhfc3RhdCAmIDB4MDAwMDA4MDApKQorCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfTE9TVF9DQVJSSUVSXykpCiAJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSAxOwotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwMjAwKSkgeworCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfTEFURV9DT0xfKSkgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCX0KQEAgLTkyMiwxOSArOTI0LDE3IEBACiB7CiAJaW50IGNyY19lcnIgPSAwOwogCi0JaWYgKHVubGlrZWx5KHJ4c3RhdCAmIDB4MDAwMDgwMDApKSB7CisJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19FU18pKSB7CiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCWlmICh1bmxpa2VseShyeHN0YXQgJiAweDAwMDAwMDAyKSkgeworCQlpZiAodW5saWtlbHkocnhzdGF0ICYgUlhfU1RTX0NSQ19FUlJfKSkgewogCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQljcmNfZXJyID0gMTsKIAkJfQogCX0KIAlpZiAobGlrZWx5KCFjcmNfZXJyKSkgewotCQlpZiAodW5saWtlbHkoKHJ4c3RhdCAmIDB4MDAwMDEwMjApID09IDB4MDAwMDEwMjApKSB7Ci0JCQkvKiBGcmFtZSB0eXBlIGluZGljYXRlcyBsZW5ndGgsCi0JCQkgKiBhbmQgbGVuZ3RoIGVycm9yIGlzIHNldCAqLworCQlpZiAodW5saWtlbHkoKHJ4c3RhdCAmIFJYX1NUU19GUkFNRV9UWVBFXykgJiYKKwkJCSAgICAgKHJ4c3RhdCAmIFJYX1NUU19MRU5HVEhfRVJSXykpKQogCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCX0KIAkJaWYgKHJ4c3RhdCAmIFJYX1NUU19NQ0FTVF8pCiAJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCX0KQEAgLTk1Myw3ICs5NTMsNyBAQAogCQlkbyB7CiAJCQl1ZGVsYXkoMSk7CiAJCQl2YWwgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgUlhfRFBfQ1RSTCk7Ci0JCX0gd2hpbGUgKC0tdGltZW91dCAmJiAodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykpOworCQl9IHdoaWxlICgodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykgJiYgLS10aW1lb3V0KTsKIAogCQlpZiAodW5saWtlbHkodGltZW91dCA9PSAwKSkKIAkJCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiCkBAIC05ODQsNyArOTg0LDcgQEAKIAkJCS8qIFdlIHByb2Nlc3NlZCBhbGwgcGFja2V0cyBhdmFpbGFibGUuICBUZWxsIE5BUEkgaXQgY2FuCiAJCQkgKiBzdG9wIHBvbGxpbmcgdGhlbiByZS1lbmFibGUgcnggaW50ZXJydXB0cyAqLwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCBJTlRfU1RTX1JTRkxfKTsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSU5UX0VOKTsKIAkJCXRlbXAgfD0gSU5UX0VOX1JTRkxfRU5fOwogCQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAogLyogU2V0cyB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzIHRvIGRldl9hZGRyLCBjYWxsZWQgd2l0aCBtYWNfbG9jayBoZWxkICovCiBzdGF0aWMgdm9pZAotc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTggZGV2X2FkZHJbNl0pCitzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3Moc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1OCBkZXZfYWRkcls2XSkKIHsKIAl1MzIgbWFjX2hpZ2gxNiA9IChkZXZfYWRkcls1XSA8PCA4KSB8IGRldl9hZGRyWzRdOwogCXUzMiBtYWNfbG93MzIgPSAoZGV2X2FkZHJbM10gPDwgMjQpIHwgKGRldl9hZGRyWzJdIDw8IDE2KSB8CkBAIC0xMTYwLDggKzExNjAsOCBAQAogCiAJLyogTWFrZSBzdXJlIEVFUFJPTSBoYXMgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgc2V0dGluZyBHUElPX0NGRyAqLwogCXRpbWVvdXQgPSA1MDsKLQl3aGlsZSAoKHRpbWVvdXQtLSkgJiYKLQkgICAgICAgKHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKSAmIEUyUF9DTURfRVBDX0JVU1lfKSkgeworCXdoaWxlICgoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEUyUF9DTUQpICYgRTJQX0NNRF9FUENfQlVTWV8pICYmCisJICAgICAgIC0tdGltZW91dCkgewogCQl1ZGVsYXkoMTApOwogCX0KIApAQCAtMTE3NCw3ICsxMTc0LDcgQEAKIAkvKiBUaGUgc29mdCByZXNldCBhYm92ZSBjbGVhcmVkIHRoZSBkZXZpY2UncyBNQUMgYWRkcmVzcywKIAkgKiByZXN0b3JlIGl0IGZyb20gbG9jYWwgY29weSAoc2V0IGluIHByb2JlKSAqLwogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7Ci0Jc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAogCS8qIEluaXRpYWxpc2UgaXJxcywgYnV0IGxlYXZlIGFsbCBzb3VyY2VzIGRpc2FibGVkICovCkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCW5hcGlfZW5hYmxlKCZwZGF0YS0+bmFwaSk7CiAKIAl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JdGVtcCB8PSAoSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1JTRkxfRU5fKTsKKwl0ZW1wIHw9IChJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fUlNGTF9FTl8gfCBJTlRfRU5fUlhTVE9QX0lOVF9FTl8pOwogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CkBAIC0xNDIyLDExICsxNDIyLDYgQEAKIAogCQkJLyogUmVxdWVzdCB0aGUgaGFyZHdhcmUgdG8gc3RvcCwgdGhlbiBwZXJmb3JtIHRoZQogCQkJICogdXBkYXRlIHdoZW4gd2UgZ2V0IGFuIFJYX1NUT1AgaW50ZXJydXB0ICovCi0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhTVE9QX0lOVF8pOwotCQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCQkJdGVtcCB8PSBJTlRfRU5fUlhTVE9QX0lOVF9FTl87Ci0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7Ci0KIAkJCXRlbXAgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgTUFDX0NSKTsKIAkJCXRlbXAgJj0gfihNQUNfQ1JfUlhFTl8pOwogCQkJc21zYzkxMXhfbWFjX3dyaXRlKHBkYXRhLCBNQUNfQ1IsIHRlbXApOwpAQCAtMTQ2NSwxMSArMTQ2MCw5IEBACiAJCS8qIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgbXVsdGljYXN0IHVwZGF0ZSBzY2hlZHVsZWQgYW5kCiAJCSAqIGl0IGlzIG5vdyBzYWZlIHRvIGNvbXBsZXRlIHRoZSB1cGRhdGUgKi8KIAkJU01TQ19UUkFDRShJTlRSLCAiUlggU3RvcCBpbnRlcnJ1cHQiKTsKLQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCQl0ZW1wICY9ICh+SU5UX0VOX1JYU1RPUF9JTlRfRU5fKTsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhTVE9QX0lOVF8pOwotCQlzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlX3dvcmthcm91bmQocGRhdGEpOworCQlpZiAocGRhdGEtPm11bHRpY2FzdF91cGRhdGVfcGVuZGluZykKKwkJCXNtc2M5MTF4X3J4X211bHRpY2FzdF91cGRhdGVfd29ya2Fyb3VuZChwZGF0YSk7CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0xNDg5LDE2ICsxNDgyLDE2IEBACiAJfQogCiAJaWYgKGxpa2VseShpbnRzdHMgJiBpbnRlbiAmIElOVF9TVFNfUlNGTF8pKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgewogCQkJLyogRGlzYWJsZSBSeCBpbnRlcnJ1cHRzICovCiAJCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7CiAJCQl0ZW1wICY9ICh+SU5UX0VOX1JTRkxfRU5fKTsKIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAkJCS8qIFNjaGVkdWxlIGEgTkFQSSBwb2xsICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwZGF0YS0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCVNNU0NfV0FSTklORyhSWF9FUlIsCi0JCQkJIm5ldGlmX3J4X3NjaGVkdWxlX3ByZXAgZmFpbGVkIik7CisJCQkJIm5hcGlfc2NoZWR1bGVfcHJlcCBmYWlsZWQiKTsKIAkJfQogCQlzZXJ2aWNlZCA9IElSUV9IQU5ETEVEOwogCX0KQEAgLTE1MTUsNiArMTUwOCwzMSBAQAogfQogI2VuZGlmCQkJCS8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAKK3N0YXRpYyBpbnQgc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJLyogT24gb2xkZXIgaGFyZHdhcmUgcmV2aXNpb25zIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIG1hYyBhZGRyZXNzCisJICogcmVnaXN0ZXJzIHdoaWxlIHJlY2VpdmluZyBkYXRhLiAgTmV3ZXIgZGV2aWNlcyBjYW4gc2FmZWx5IGNoYW5nZQorCSAqIHRoaXMgYXQgYW55IHRpbWUuICovCisJaWYgKHBkYXRhLT5nZW5lcmF0aW9uIDw9IDEgJiYgbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFN0YW5kYXJkIGlvY3RscyBmb3IgbWlpLXRvb2wgKi8KIHN0YXRpYyBpbnQgc21zYzkxMXhfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CkBAIC0xNTQ5LDcgKzE1NjcsNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBTTVNDX0NISVBOQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybGNweShpbmZvLT52ZXJzaW9uLCBTTVNDX0RSVl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLAorCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCkBAIC0xNzQ1LDEyICsxNzYzLDI3IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzbXNjOTExeF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19kb19pb2N0bAkJPSBzbXNjOTExeF9kb19pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gc21zYzkxMXhfc2V0X21hY19hZGRyZXNzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzbXNjOTExeF9wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKIH07CiAKKy8qIGNvcGllcyB0aGUgY3VycmVudCBtYWMgYWRkcmVzcyBmcm9tIGhhcmR3YXJlIHRvIGRldi0+ZGV2X2FkZHIgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXNjOTExeF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgbWFjX2hpZ2gxNiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSSCk7CisJdTMyIG1hY19sb3czMiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSTCk7CisKKwlkZXYtPmRldl9hZGRyWzBdID0gKHU4KShtYWNfbG93MzIpOworCWRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKG1hY19sb3czMiA+PiA4KTsKKwlkZXYtPmRldl9hZGRyWzJdID0gKHU4KShtYWNfbG93MzIgPj4gMTYpOworCWRldi0+ZGV2X2FkZHJbM10gPSAodTgpKG1hY19sb3czMiA+PiAyNCk7CisJZGV2LT5kZXZfYWRkcls0XSA9ICh1OCkobWFjX2hpZ2gxNik7CisJZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkobWFjX2hpZ2gxNiA+PiA4KTsKK30KKwogLyogSW5pdGlhbGl6aW5nIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZXMsIG9ubHkgY2FsbGVkIGZyb20gcHJvYmUgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2M5MTF4X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTE4MzgsNiArMTg3MSwxMiBAQAogCQlTTVNDX1dBUk5JTkcoUFJPQkUsCiAJCQkiVGhpcyBkcml2ZXIgaXMgbm90IGludGVuZGVkIGZvciB0aGlzIGNoaXAgcmV2aXNpb24iKTsKIAorCS8qIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFuIGVlcHJvbSwgd2hlcmUgdGhlIG1hYyBhZGRyZXNzCisJICogaXMgc3RvcmVkIGVsc2V3aGVyZSBhbmQgc2V0IGJ5IHRoZSBib290bG9hZGVyLiAgVGhpcyBzYXZlcyB0aGUKKwkgKiBtYWMgYWRkcmVzcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBkZXZpY2UgKi8KKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MpCisJCXNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3MoZGV2KTsKKwogCS8qIFJlc2V0IHRoZSBMQU45MTF4ICovCiAJaWYgKHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4OTYsMTEgKzE5MzUsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YTsKIAlzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnICpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKmlycV9yZXM7CiAJdW5zaWduZWQgaW50IGludGNmZyA9IDA7Ci0JaW50IHJlc19zaXplOworCWludCByZXNfc2l6ZSwgaXJxX2ZsYWdzOwogCWludCByZXR2YWw7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlwcl9pbmZvKCIlczogRHJpdmVyIHZlcnNpb24gJXMuXG4iLCBTTVNDX0NISVBOQU1FLCBTTVNDX0RSVl9WRVJTSU9OKTsKIApAQCAtMTkyMyw2ICsxOTYxLDE0IEBACiAJfQogCXJlc19zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0OwogCisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnFfcmVzKSB7CisJCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgaXJxIHJlc291cmNlLlxuIiwKKwkJCVNNU0NfQ0hJUE5BTUUpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF8wOworCX0KKwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19zaXplLCBTTVNDX0NISVBOQU1FKSkgewogCQlyZXR2YWwgPSAtRUJVU1k7CiAJCWdvdG8gb3V0XzA7CkBAIC0xOTM5LDcgKzE5ODUsOCBAQAogCiAJcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWRldi0+aXJxID0gaXJxX3Jlcy0+c3RhcnQ7CisJaXJxX2ZsYWdzID0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKIAlwZGF0YS0+aW9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc19zaXplKTsKIAogCS8qIGNvcHkgY29uZmlnIHBhcmFtZXRlcnMgYWNyb3NzIHRvIHBkYXRhICovCkBAIC0xOTcyLDggKzIwMTksOCBAQAogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCAwKTsKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIDB4RkZGRkZGRkYpOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNtc2M5MTF4X2lycWhhbmRsZXIsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgIGRldi0+bmFtZSwgZGV2KTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc21zYzkxMXhfaXJxaGFuZGxlciwKKwkJCSAgICAgaXJxX2ZsYWdzIHwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwKIAkJCSJVbmFibGUgdG8gY2xhaW0gcmVxdWVzdGVkIGlycTogJWQiLCBkZXYtPmlycSk7CkBAIC0yMDA0LDE5ICsyMDUxLDEyIEBACiAKIAkvKiBDaGVjayBpZiBtYWMgYWRkcmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQgd2hlbiBicmluZ2luZyBpbnRlcmZhY2UgdXAgKi8KIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewotCQlzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCQlTTVNDX1RSQUNFKFBST0JFLCAiTUFDIEFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IGNvbmZpZ3VyYXRpb24iKTsKIAl9IGVsc2UgewogCQkvKiBUcnkgcmVhZGluZyBtYWMgYWRkcmVzcyBmcm9tIGRldmljZS4gaWYgRUVQUk9NIGlzIHByZXNlbnQKIAkJICogaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgKi8KLQkJdTMyIG1hY19oaWdoMTYgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkgpOwotCQl1MzIgbWFjX2xvdzMyID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJMKTsKLQkJZGV2LT5kZXZfYWRkclswXSA9ICh1OCkobWFjX2xvdzMyKTsKLQkJZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkobWFjX2xvdzMyID4+IDgpOwotCQlkZXYtPmRldl9hZGRyWzJdID0gKHU4KShtYWNfbG93MzIgPj4gMTYpOwotCQlkZXYtPmRldl9hZGRyWzNdID0gKHU4KShtYWNfbG93MzIgPj4gMjQpOwotCQlkZXYtPmRldl9hZGRyWzRdID0gKHU4KShtYWNfaGlnaDE2KTsKLQkJZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkobWFjX2hpZ2gxNiA+PiA4KTsKKwkJc21zYzkxMXhfcmVhZF9tYWNfYWRkcmVzcyhkZXYpOwogCiAJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSB2YWxpZCAgc28gdXNlIHRoZW0gKi8KQEAgLTIwMjUsNyArMjA2NSw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSBpbnZhbGlkLCBnZW5lcmF0ZSByYW5kb20gTUFDICovCiAJCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKLQkJCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCQkJU01TQ19UUkFDRShQUk9CRSwKIAkJCQkiTUFDIEFkZHJlc3MgaXMgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyIik7CiAJCX0KQEAgLTIwMzMsOCArMjA3Myw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAKLQlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXNcbiIsCi0JCSBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguaCBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKaW5kZXggMmI3NjY1NC4uYjU3MTZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguaAorKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5oCkBAIC04MSwxMiArODEsMTkgQEAKIAogI2RlZmluZSBSWF9TVEFUVVNfRklGTwkJCTB4NDAKICNkZWZpbmUgUlhfU1RTX0VTXwkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUlhfU1RTX0xFTkdUSF9FUlJfCQkweDAwMDAxMDAwCiAjZGVmaW5lIFJYX1NUU19NQ0FTVF8JCQkweDAwMDAwNDAwCisjZGVmaW5lIFJYX1NUU19GUkFNRV9UWVBFXwkJMHgwMDAwMDAyMAorI2RlZmluZSBSWF9TVFNfQ1JDX0VSUl8JCQkweDAwMDAwMDAyCiAKICNkZWZpbmUgUlhfU1RBVFVTX0ZJRk9fUEVFSwkJMHg0NAogCiAjZGVmaW5lIFRYX1NUQVRVU19GSUZPCQkJMHg0OAogI2RlZmluZSBUWF9TVFNfRVNfCQkJMHgwMDAwODAwMAorI2RlZmluZSBUWF9TVFNfTE9TVF9DQVJSSUVSXwkJMHgwMDAwMDgwMAorI2RlZmluZSBUWF9TVFNfTk9fQ0FSUklFUl8JCTB4MDAwMDA0MDAKKyNkZWZpbmUgVFhfU1RTX0xBVEVfQ09MXwkJMHgwMDAwMDIwMAorI2RlZmluZSBUWF9TVFNfRVhDRVNTX0NPTF8JCTB4MDAwMDAxMDAKIAogI2RlZmluZSBUWF9TVEFUVVNfRklGT19QRUVLCQkweDRDCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IDRlMTVhZTAuLjU5NTlhZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCQlzbXNjOTQyMF9wY2lfZmx1c2hfd3JpdGUocGQpOwogCiAJCQlpbnRzX3RvX2NsZWFyIHw9IChETUFDX1NUU19SWF8gfCBETUFDX1NUU19OSVNfKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZwZC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwZC0+bmFwaSk7CiAJCX0KIAogCQlpZiAoaW50c190b19jbGVhcikKQEAgLTgwNyw3ICs4MDcsNyBAQAogCWlmIChwZC0+cnhfY3N1bSkgewogCQl1MTYgaHdfY3N1bSA9IGdldF91bmFsaWduZWRfbGUxNihza2JfdGFpbF9wb2ludGVyKHNrYikgKwogCQkJTkVUX0lQX0FMSUdOICsgcGFja2V0X2xlbmd0aCArIDQpOwotCQlwdXRfdW5hbGlnbmVkX2xlMTYoY3B1X3RvX2xlMTYoaHdfY3N1bSksICZza2ItPmNzdW0pOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoaHdfY3N1bSwgJnNrYi0+Y3N1bSk7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7CiAJfQogCkBAIC04OTMsNyArODkzLDcgQEAKIAlzbXNjOTQyMF9wY2lfZmx1c2hfd3JpdGUocGQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZSgmcGQtPm5hcGkpOworCQluYXBpX2NvbXBsZXRlKCZwZC0+bmFwaSk7CiAKIAkJLyogcmUtZW5hYmxlIFJYIERNQSBpbnRlcnJ1cHRzICovCiAJCWRtYV9pbnRyX2VuYSA9IHNtc2M5NDIwX3JlZ19yZWFkKHBkLCBETUFDX0lOVFJfRU5BKTsKQEAgLTExNjAsNyArMTE2MCw3IEBACiAJc21zY19pbmZvKFBST0JFLCAiUEhZIGFkZHIgJWQsIHBoeV9pZCAweCUwOFgiLCBwaHlkZXYtPmFkZHIsCiAJCXBoeWRldi0+cGh5X2lkKTsKIAotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJJnNtc2M5NDIwX3BoeV9hZGp1c3RfbGluaywgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTExNjksNyArMTE2OSw3IEBACiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggODhkMmM2Ny4uOTBlNjYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKIAkvKiBpZiBhbGwgcGFja2V0cyBhcmUgaW4gdGhlIHN0YWNrLCBlbmFibGUgaW50ZXJydXB0cyBhbmQgcmV0dXJuIDAgKi8KIAkvKiBpZiBub3QsIHJldHVybiAxICovCiAJaWYgKHBhY2tldHNfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3BpZGVyX25ldF9yeF9pcnFfb24oY2FyZCk7CiAJCWNhcmQtPmlnbm9yZV9yeF9yYW1mdWxsID0gMDsKIAl9CkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogCQkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCQljYXJkLT5udW1fcnhfaW50cyArKzsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQl9CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKQEAgLTE1NDgsNyArMTU0OCw3IEBACiAJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE1NjIsNyArMTU2Miw3IEBACiAJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE2NTYsMTEgKzE2NTYsMTEgQEAKIAogCWlmIChzdGF0dXNfcmVnICYgU1BJREVSX05FVF9SWElOVCApIHsKIAkJc3BpZGVyX25ldF9yeF9pcnFfb2ZmKGNhcmQpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQljYXJkLT5udW1fcnhfaW50cyArKzsKIAl9CiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX1RYSU5UKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX0xJTktJTlQpCiAJCXNwaWRlcl9uZXRfbGlua19yZXNldChuZXRkZXYpOwpAQCAtMjI1OSw2ICsyMjU5LDIzIEBACiAJY2FyZC0+c3BpZGVyX3N0YXRzLnR4X3RpbWVvdXRzKys7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BpZGVyX25ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNwaWRlcl9uZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gc3BpZGVyX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzcGlkZXJfbmV0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzcGlkZXJfbmV0X3NldF9tdWx0aSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNwaWRlcl9uZXRfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUJCT0gc3BpZGVyX25ldF9jaGFuZ2VfbXR1LAorCS5uZG9fZG9faW9jdGwJCT0gc3BpZGVyX25ldF9kb19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gc3BpZGVyX25ldF90eF90aW1lb3V0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS8qIEhXIFZMQU4gKi8KKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS8qIHBvbGwgY29udHJvbGxlciAqLworCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gc3BpZGVyX25ldF9wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KK307CisKIC8qKgogICogc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjI2OCwyMSArMjI4NSw4IEBACiBzdGF0aWMgdm9pZAogc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0JbmV0ZGV2LT5vcGVuID0gJnNwaWRlcl9uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmc3BpZGVyX25ldF9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gJnNwaWRlcl9uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzcGlkZXJfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZzcGlkZXJfbmV0X3NldF9tYWM7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gJnNwaWRlcl9uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPmRvX2lvY3RsID0gJnNwaWRlcl9uZXRfZG9faW9jdGw7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmc3BpZGVyX25ldF90eF90aW1lb3V0OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZzcGlkZXJfbmV0X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gU1BJREVSX05FVF9XQVRDSERPR19USU1FT1VUOwotCS8qIEhXIFZMQU4gKi8KLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS8qIHBvbGwgY29udHJvbGxlciAqLwotCW5ldGRldi0+cG9sbF9jb250cm9sbGVyID0gJnNwaWRlcl9uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAJLyogZXRodG9vbCBvcHMgKi8KIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJnNwaWRlcl9uZXRfZXRodG9vbF9vcHM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCBkYTNhNzZiLi5mY2I5NDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogI2RlZmluZSBGSVJNV0FSRV9UWAkiYWRhcHRlYy9zdGFyZmlyZV90eC5iaW4iCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIEtFUk5fSU5GTyAic3RhcmZpcmUuYzp2MS4wMyA3LzI2LzIwMDAgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIEtFUk5fSU5GTyAiICh1bm9mZmljaWFsIDIuMi8yLjQga2VybmVsIHBvcnQsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOwogCkBAIC0xMzQyLDggKzEzNDIsOCBAQAogCQlpZiAoaW50cl9zdGF0dXMgJiAoSW50clJ4RG9uZSB8IEludHJSeEVtcHR5KSkgewogCQkJdTMyIGVuYWJsZTsKIAotCQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpKSB7Ci0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkpIHsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAkJCQllbmFibGUgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAkJCQllbmFibGUgJj0gfihJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpOwogCQkJCXdyaXRlbChlbmFibGUsIGlvYWRkciArIEludHJFbmFibGUpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyU3RhdHVzKTsKIAl9IHdoaWxlIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKTsKIAotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAlpbnRyX3N0YXR1cyB8PSBJbnRyUnhEb25lIHwgSW50clJ4RW1wdHk7CiAJd3JpdGVsKGludHJfc3RhdHVzLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCA3ZjY5YzdmLi41MDE3ZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC0xMDc0LDYgKzEwNzQsMTggQEAKIAkuZ2V0X2xpbmsJCT0gYmlnbWFjX2dldF9saW5rLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiaWdtYWNfb3BzID0geworCS5uZG9fb3BlbgkJPSBiaWdtYWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gYmlnbWFjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBiaWdtYWNfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBiaWdtYWNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYmlnbWFjX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGJpZ21hY190eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJpZ21hY19ldGhlcl9pbml0KHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpxZWNfb3ApCiB7CkBAIC0xMTg3LDE2ICsxMTk5LDggQEAKIAlicC0+ZGV2ID0gZGV2OwogCiAJLyogU2V0IGxpbmtzIHRvIG91ciBCaWdNQUMgb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMuICovCi0JZGV2LT5vcGVuID0gJmJpZ21hY19vcGVuOwotCWRldi0+c3RvcCA9ICZiaWdtYWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYmlnbWFjX3N0YXJ0X3htaXQ7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZiaWdtYWNfZXRodG9vbF9vcHM7Ci0KLQkvKiBTZXQgbGlua3MgdG8gQmlnTUFDIHN0YXRpc3RpYyBhbmQgbXVsdGktY2FzdCBsb2FkaW5nIGNvZGUuICovCi0JZGV2LT5nZXRfc3RhdHMgPSAmYmlnbWFjX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZiaWdtYWNfc2V0X211bHRpY2FzdDsKLQotCWRldi0+dHhfdGltZW91dCA9ICZiaWdtYWNfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmlnbWFjX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKIAogCS8qIEZpbmlzaCBuZXQgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IDQzNjk1YjcuLmMzOTliMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMTA5LDggKzEwOSw5IEBACiAjZW5kaWYKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1bmRhbmNlIEFsdGEgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IGM5Yzc2NTAuLmMwMjQzNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC05MjEsNyArOTIxLDcgQEAKIAkJZ3AtPnN0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAl9IHdoaWxlIChncC0+c3RhdHVzICYgR1JFR19TVEFUX05BUEkpOwogCi0JX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJZ2VtX2VuYWJsZV9pbnRzKGdwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmdwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmdwLT5uYXBpKSkgewogCQl1MzIgZ2VtX3N0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAogCQlpZiAoZ2VtX3N0YXR1cyA9PSAwKSB7CkBAIC05NTQsNyArOTU0LDcgQEAKIAkJfQogCQlncC0+c3RhdHVzID0gZ2VtX3N0YXR1czsKIAkJZ2VtX2Rpc2FibGVfaW50cyhncCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmdwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZncC0+bmFwaSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCmluZGV4IDE2YzUyOGQuLmFmYzdiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwpAQCAtMTMxMSw2ICsxMzExLDE3IEBACiAJLmdldF9saW5rCQk9IHNwYXJjX2xhbmNlX2dldF9saW5rLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcGFyY19sYW5jZV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxhbmNlX29wZW4sCisJLm5kb19zdG9wCQk9IGxhbmNlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYW5jZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbGFuY2Vfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbGFuY2VfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzcGFyY19sYW5jZV9wcm9iZV9vbmUoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJCSAgIHN0cnVjdCBvZl9kZXZpY2UgKmxlZG1hLAogCQkJCQkgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpsZWJ1ZmZlcikKQEAgLTE0NjIsMTMgKzE0NzMsOSBAQAogCiAJbHAtPmRldiA9IGRldjsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKLQlkZXYtPm9wZW4gPSAmbGFuY2Vfb3BlbjsKLQlkZXYtPnN0b3AgPSAmbGFuY2VfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbGFuY2Vfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmbGFuY2VfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZsYW5jZV9zZXRfbXVsdGljYXN0OwogCWRldi0+ZXRodG9vbF9vcHMgPSAmc3BhcmNfbGFuY2VfZXRodG9vbF9vcHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNwYXJjX2xhbmNlX29wczsKIAogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnFlLmMgYi9kcml2ZXJzL25ldC9zdW5xZS5jCmluZGV4IGZlMGMzZjIuLmM2ZWM2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnFlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VucWUuYwpAQCAtODI5LDYgKzgyOSwxNyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHFlY19vcHMgPSB7CisJLm5kb19vcGVuCQk9IHFlX29wZW4sCisJLm5kb19zdG9wCQk9IHFlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBxZV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcWVfc2V0X211bHRpY2FzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gcWVfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBxZWNfZXRoZXJfaW5pdChzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkOwpAQCAtODkzLDE1ICs5MDQsMTEgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJm9wLT5kZXYpOwogCi0JZGV2LT5vcGVuID0gcWVfb3BlbjsKLQlkZXYtPnN0b3AgPSBxZV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHFlX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBxZV9zZXRfbXVsdGljYXN0OwotCWRldi0+dHhfdGltZW91dCA9IHFlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7CiAJZGV2LT5pcnEgPSBvcC0+aXJxc1swXTsKIAlkZXYtPmRtYSA9IDA7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZxZV9ldGh0b29sX29wczsKKwlkZXYtPm5ldGRldl9vcHMgPSAmcWVjX29wczsKIAogCXJlcyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW52bmV0LmMgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKaW5kZXggNjExMjMwZi4uYTgyZmIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnZuZXQuYwpAQCAtMTAxMiw2ICsxMDEyLDE2IEBACiBzdGF0aWMgTElTVF9IRUFEKHZuZXRfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHZuZXRfbGlzdF9tdXRleCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm5ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHZuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdm5ldF9jbG9zZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHZuZXRfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB2bmV0X3NldF9tYWNfYWRkciwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB2bmV0X2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IHZuZXRfc3RhcnRfeG1pdCwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgdm5ldCAqIF9fZGV2aW5pdCB2bmV0X25ldyhjb25zdCB1NjQgKmxvY2FsX21hYykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTA0MCwxNSArMTA1MCw5IEBACiAJSU5JVF9MSVNUX0hFQUQoJnZwLT5saXN0KTsKIAl2cC0+bG9jYWxfbWFjID0gKmxvY2FsX21hYzsKIAotCWRldi0+b3BlbiA9IHZuZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB2bmV0X2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdm5ldF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHZuZXRfc2V0X21hY19hZGRyOwotCWRldi0+dHhfdGltZW91dCA9IHZuZXRfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdm5ldF9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2bmV0X2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBWTkVUX1RYX1RJTUVPVVQ7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gdm5ldF9jaGFuZ2VfbXR1OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdm5ldF9zdGFydF94bWl0OwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IGJjZDBlNjAuLmI1MmExYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogCX0KIAogCS8qIGF0dGFjaCB0aGUgbWFjIHRvIHRoZSBwaHkgKi8KLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkgICAgICZ0Y19oYW5kbGVfbGlua19jaGFuZ2UsIDAsCiAJCQkgICAgIGxwLT5jaGlwdHlwZSA9PSBUQzM1ODE1X1RYNDkzOSA/CiAJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJIDogUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CkBAIC03MzUsNyArNzM1LDcgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAiCiAJCSIobWlpX2J1czpwaHlfYWRkcj0lcywgaWQ9JXgpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsCisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCXBoeWRldi0+cGh5X2lkKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCkBAIC0xNjA5LDggKzE2MDksOCBAQAogCWlmICghKGRtYWN0bCAmIERNQV9JbnRNYXNrKSkgewogCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAkJdGNfd3JpdGVsKGRtYWN0bCB8IERNQV9JbnRNYXNrLCAmdHItPkRNQV9DdGwpOwotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbHAtPm5hcGkpOworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpCisJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnRlcnJ1cHQgdGFrZW4gaW4gcG9sbFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMTkxOSw3ICsxOTE5LDcgQEAKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5ETUFfQ3RsKSAmIH5ETUFfSW50TWFzaywgJnRyLT5ETUFfQ3RsKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCmluZGV4IGE3YTRkYzQuLjdkZWJkMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCkBAIC02Myw3ICs2Myw2IEBACiAgKi8KIAogI2luY2x1ZGUgInRlaHV0aS5oIgotI2luY2x1ZGUgInRlaHV0aV9mdy5oIgogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBiZHhfcGNpX3RibFtdID0gewogCXsweDFGQzksIDB4MzAwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCkBAIC0yNjUsOCArMjY0LDggQEAKIAkJYmR4X2lzcl9leHRyYShwcml2LCBpc3IpOwogCiAJaWYgKGlzciAmIChJUl9SWF9ERVNDXzAgfCBJUl9UWF9GUkVFXzApKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpKSB7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSkgeworCQkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAkJCVJFVChJUlFfSEFORExFRCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBOT1RFOiB3ZSBnZXQgaGVyZSBpZiBpbnRyIGhhcyBzbGlwcGVkIGludG8gd2luZG93CkBAIC0zMDIsNyArMzAxLDcgQEAKIAkJICogZGV2aWNlIGxvY2sgYW5kIGFsbG93IHdhaXRpbmcgdGFza3MgKGVnIHJtbW9kKSB0byBhZHZhbmNlKSAqLwogCQlwcml2LT5uYXBpX3N0b3AgPSAwOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQliZHhfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0zMTgsMjggKzMxNyw0MSBAQAogCiBzdGF0aWMgaW50IGJkeF9md19sb2FkKHN0cnVjdCBiZHhfcHJpdiAqcHJpdikKIHsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAlpbnQgbWFzdGVyLCBpOworCWludCByYzsKIAogCUVOVEVSOwogCW1hc3RlciA9IFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU0VNQVBIT1JFKTsKIAlpZiAoIVJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSAmJiBtYXN0ZXIpIHsKLQkJYmR4X3R4X3B1c2hfZGVzY19zYWZlKHByaXYsIHNfZmlybUxvYWQsIHNpemVvZihzX2Zpcm1Mb2FkKSk7CisJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZncsICJ0ZWh1dGkvZmlybXdhcmUuYmluIiwgJnByaXYtPnBkZXYtPmRldik7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCQliZHhfdHhfcHVzaF9kZXNjX3NhZmUocHJpdiwgKGNoYXIgKilmdy0+ZGF0YSwgZnctPnNpemUpOwogCQltZGVsYXkoMTAwKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0JCWlmIChSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykpCi0JCQlicmVhazsKKwkJaWYgKFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSkgeworCQkJcmMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KIAkJbWRlbGF5KDIpOwogCX0KKwlyYyA9IC1FSU87CitvdXQ6CiAJaWYgKG1hc3RlcikKIAkJV1JJVEVfUkVHKHByaXYsIHJlZ0lOSVRfU0VNQVBIT1JFLCAxKTsKKwlpZiAoZncpCisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JaWYgKGkgPT0gMjAwKSB7CisJaWYgKHJjKSB7CiAJCUVSUigiJXM6IGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKLQkJREJHKCJWUEMgPSAweCV4IFZJQyA9IDB4JXggSU5JVF9TVEFUVVMgPSAweCV4IGk9JWRcbiIsCi0JCSAgICBSRUFEX1JFRyhwcml2LCByZWdWUEMpLAotCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVklDKSwgUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpLCBpKTsKLQkJUkVUKC1FSU8pOworCQlpZiAocmMgPT0gLUVJTykKKwkJCURCRygiVlBDID0gMHgleCBWSUMgPSAweCV4IElOSVRfU1RBVFVTID0gMHgleCBpPSVkXG4iLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZQQyksCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVklDKSwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUyksIGkpOworCQlSRVQocmMpOwogCX0gZWxzZSB7CiAJCURCRygiJXM6IGZpcm13YXJlIGxvYWRpbmcgc3VjY2Vzc1xuIiwgcHJpdi0+bmRldi0+bmFtZSk7CiAJCVJFVCgwKTsKQEAgLTYxNywxMyArNjI5LDYgQEAKIAlSRVQocmMpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYmR4X2Zpcm13YXJlX2VuZGlhbmVzcyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNfZmlybUxvYWQpOyBpKyspCi0JCXNfZmlybUxvYWRbaV0gPSBDUFVfQ0hJUF9TV0FQMzIoc19maXJtTG9hZFtpXSk7Ci19Ci0KIHN0YXRpYyBpbnQgYmR4X3JhbmdlX2NoZWNrKHN0cnVjdCBiZHhfcHJpdiAqcHJpdiwgdTMyIG9mZnNldCkKIHsKIAlyZXR1cm4gKG9mZnNldCA+ICh1MzIpIChCRFhfUkVHU19TSVpFIC8gcHJpdi0+bmljLT5wb3J0X251bSkpID8KQEAgLTI1MDEsNyArMjUwNiw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBiZHhfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlFTlRFUjsKLQliZHhfZmlybXdhcmVfZW5kaWFuZXNzKCk7CiAJaW5pdF90eGRfc2l6ZXMoKTsKIAlwcmludF9kcml2ZXJfaWQoKTsKIAlSRVQocGNpX3JlZ2lzdGVyX2RyaXZlcigmYmR4X3BjaV9kcml2ZXIpKTsKQEAgLTI1MjEsMyArMjUyNSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKEJEWF9EUlZfREVTQyk7CitNT0RVTEVfRklSTVdBUkUoInRlaHV0aS9maXJtd2FyZS5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKaW5kZXggZWZhZjg0ZC4uZGVjNjdlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmgKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKiBDb21waWxlIFRpbWUgU3dpdGNoZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oIGIvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNjAzYTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpX2Z3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcxMiArMCwwIEBACi0vKgotICogVGVodXRpIE5ldHdvcmtzKFIpIE5ldHdvcmsgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotLyogTG9hZGluZyBGaXJtd2FyZSAqLwotLyogSU5UX01FTSBWZXIgKi8KLXN0YXRpYyB1MzIgc19maXJtTG9hZFtdID0gewotCTB4MDAwZjAwMDIsCi0JMHg0MDcxODAwMCwKLQkweDAwMDAwMDJkLAotCTB4YzAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAxLAotCTB4MDAwMDAwMmQsCi0JMHhjMDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDIsCi0JMHgwMDAwMDAyZCwKLQkweGMxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMywKLQkweDAwMDAwMDJkLAotCTB4YzE4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA0LAotCTB4MDAwMDAwMmQsCi0JMHhjMjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDUsCi0JMHgwMDAwMDAyZCwKLQkweGMyODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNiwKLQkweDAwMDAwMDJkLAotCTB4YzMwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA3LAotCTB4MDAwMDAwMmQsCi0JMHhjMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDgsCi0JMHgwMDAwMDAyZCwKLQkweGM0MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOSwKLQkweDAwMDAwMDJkLAotCTB4YzQ4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBhLAotCTB4MDAwMDAwMmQsCi0JMHhjNTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGIsCi0JMHgwMDAwMDAyZCwKLQkweGM1ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYywKLQkweDAwMDAwMDJkLAotCTB4YzYwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBkLAotCTB4MDAwMDAwMmQsCi0JMHhjNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGUsCi0JMHgwMDAwMDAyZCwKLQkweGM3MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZiwKLQkweDAwMDAwMDJkLAotCTB4Yzc4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEwLAotCTB4MDAwMDAwMmQsCi0JMHhjODAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTEsCi0JMHgwMDAwMDAyZCwKLQkweGM4ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMiwKLQkweDAwMDAwMDJkLAotCTB4YzkwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEzLAotCTB4MDAwMDAwMmQsCi0JMHhjOTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTQsCi0JMHgwMDAwMDAyZCwKLQkweGNhMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNSwKLQkweDAwMDAwMDJkLAotCTB4Y2E4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE2LAotCTB4MDAwMDAwMmQsCi0JMHhjYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTcsCi0JMHgwMDAwMDAyZCwKLQkweGNiODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOCwKLQkweDAwMDAwMDJkLAotCTB4Y2MwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE5LAotCTB4MDAwMDAwMmQsCi0JMHhjYzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWEsCi0JMHgwMDAwMDAyZCwKLQkweGNkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYiwKLQkweDAwMDAwMDJkLAotCTB4Y2Q4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFjLAotCTB4MDAwMDAwMmQsCi0JMHhjZTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWQsCi0JMHgwMDAwMDAyZCwKLQkweGNlODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZSwKLQkweDAwMDAwMDJkLAotCTB4Y2YwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFmLAotCTB4MDAwMDAwMmQsCi0JMHhjZjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjAsCi0JMHgwMDAwMDAyZCwKLQkweGQwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMSwKLQkweDAwMDAwMDJkLAotCTB4ZDA4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIyLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjMsCi0JMHgwMDAwMDAyZCwKLQkweGQxODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNCwKLQkweDAwMDAwMDJkLAotCTB4ZDIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI1LAotCTB4MDAwMDAwMmQsCi0JMHhkMjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjYsCi0JMHgwMDAwMDAyZCwKLQkweGQzMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNywKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI4LAotCTB4MDAwMDAwMmQsCi0JMHhkNDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjksCi0JMHgwMDAwMDAyZCwKLQkweGQ0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYSwKLQkweDAwMDAwMDJkLAotCTB4ZDUwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJiLAotCTB4MDAwMDAwMmQsCi0JMHhkNTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmMsCi0JMHgwMDAwMDAyZCwKLQkweGQ2MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZCwKLQkweDAwMDAwMDJkLAotCTB4ZDY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJlLAotCTB4MDAwMDAwMmQsCi0JMHhkNzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmYsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMCwKLQkweDAwMDAwMDJkLAotCTB4ZDgwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMxLAotCTB4MDAwMDAwMmQsCi0JMHhkODgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzIsCi0JMHgwMDAwMDAyZCwKLQkweGQ5MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMywKLQkweDAwMDAwMDJkLAotCTB4ZDk4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM0LAotCTB4MDAwMDAwMmQsCi0JMHhkYTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzUsCi0JMHgwMDAwMDAyZCwKLQkweGRhODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNiwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM3LAotCTB4MDAwMDAwMmQsCi0JMHhkYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzgsCi0JMHgwMDAwMDA3YiwKLQkweGRkNjA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNhLAotCTB4MDAwMDAwMmQsCi0JMHhkYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2IsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYywKLQkweDAwMDAwMDJkLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY0LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDNkMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA3MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDczLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzNzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2EsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0YWEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDFlNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg4LAotCTB4MDAwMDAwM2YsCi0JMHhkNzgwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODksCi0JMHgwMDAwMDAzZiwKLQkweGQ3OTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YSwKLQkweDAwMDAwMDU5LAotCTB4ZDc4MDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhiLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhlLAotCTB4MDAwMDAwMmQsCi0JMHhkN2Q2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGYsCi0JMHgwMDAwMDAxOCwKLQkweDE3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTIsCi0JMHgwMDAwMDAyZCwKLQkweGQ3ZDgwMGI4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MywKLQkweDAwMDAwMDE4LAotCTB4MTdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjkwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDA0YWE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwOTE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDE5ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE5LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwYzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI4LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjksCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMxLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2IsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNkLAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2UsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAzNzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZiwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDA0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQwLAotCTB4MDAwMDAwM2YsCi0JMHhkMTg0MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDQsCi0JMHgwMDAwMDAzZiwKLQkweGQxN2ZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNSwKLQkweDAwMDAwMDNmLAotCTB4ZDE3ZmZmODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRjLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGQsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRmLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTAsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMSwKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU1LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTYsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNywKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxMzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU4LAotCTB4MDAwMDAwOTQsCi0JMHgwMDBiMzEzYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTksCi0JMHgwMDAwMDA5NCwKLQkweDAwMDkzMTNkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYSwKLQkweDAwMDAwMDk0LAotCTB4MDAwNzMxM2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGViLAotCTB4MDAwMDAwOTQsCi0JMHgwMDA1M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWMsCi0JMHgwMDAwMDAwOSwKLQkweGMxZWQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZCwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMGI3ODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjIsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwNzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY0LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjUsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY3LAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjgsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZkLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmUsCi0JMHgwMDAwMDAxOCwKLQkweDFkMmQzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZiwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAwLAotCTB4MDAwMDAwMTgsCi0JMHgxZDEzM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDEsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMiwKLQkweDAwMDAwMDE4LAotCTB4MWQxYjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOCwKLQkweDAwMDAwMDA5LAotCTB4YzUyZDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA5LAotCTB4MDAwMDAwMjksCi0JMHhkMjAxMDA2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZSwKLQkweDAwMDAwMDA5LAotCTB4YzIyOTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBmLAotCTB4MDAwMDAwMjksCi0JMHhkMjAwMDA2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE1LAotCTB4MDAwMDAwNTksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE4LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTksCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMjdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYSwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFiLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWMsCi0JMHgwMDAwMDAxOCwKLQkweDFkMGYzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjIsCi0JMHgwMDAwMDAwOSwKLQkweGM1MmQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMywKLQkweDAwMDAwMDJkLAotCTB4ZDEwODAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI0LAotCTB4MDAwMDAwMDgsCi0JMHgyM2MzM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjUsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNiwKLQkweDAwMDAwMDNmLAotCTB4ZDMwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI3LAotCTB4MDAwMDAwM2YsCi0JMHhkMzA0MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjgsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODE0MDg1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOSwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJhLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDc4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmIsCi0JMHgwMDAwMDAzZiwKLQkweGQxZmZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYywKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJkLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM2LAotCTB4MDAwMDAwNjEsCi0JMHhmNjAwMDQ2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzcsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOCwKLQkweDAwMDAwMDE4LAotCTB4M2Q2YjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM5LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMDU4YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2EsCi0JMHgwMDAwMDAyZiwKLQkweGQ2ODEwMTA2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYiwKLQkweDAwMDAwMDJkLAotCTB4ZDIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNjLAotCTB4MDAwMDAwMjEsCi0JMHhkMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2QsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNmLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDAsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQyLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDMsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NCwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ1LAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDYsCi0JMHgwMDAwMDA0OSwKLQkweGQxN2EzM2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NywKLQkweDAwMDAwMDJmLAotCTB4ZDE3MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ4LAotCTB4MDAwMDAwMmYsCi0JMHhkMTYxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDksCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGMsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRlLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUxLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU0LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTUsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU3LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTgsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVhLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWIsCi0JMHgwMDAwMDAyZCwKLQkweGQxNmMwN2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YywKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWUsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYwLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYzLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjQsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjcsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY5LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZjLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmQsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE3ODMzZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZmLAotCTB4MDAwMDAwMmYsCi0JMHhkMTcxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzAsCi0JMHgwMDAwMDAyZiwKLQkweGQxNjEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MSwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NCwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc1LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc4LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzksCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2MsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdlLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2YsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgxLAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODIsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MywKLQkweDAwMDAwMDJkLAotCTB4ZDE2ODA3ZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg0LAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YywKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThkLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGUsCi0JMHgwMDAwMDAwOCwKLQkweDIyNzkwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDA2MGMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkwLAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxMDEwNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTEsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkzLAotCTB4MDAwMDAwM2YsCi0JMHhkNTAwMDEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTQsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NSwKLQkweDAwMDAwMDNmLAotCTB4ZDU4MDAyMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk2LAotCTB4MDAwMDAwM2YsCi0JMHhkNTgwMDIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OCwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk5LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWEsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM0ZTksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTljLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzU2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWQsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlmLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTAsCi0JMHgwMDAwMDA0MSwKLQkweGQ1MDAzNTZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTMsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDY4MDNiMDcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE1LAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWYsCi0JMHgwMDAwMDA2MSwKLQkweGY2MDAwNDZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIxLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ViMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjIsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAzYjBlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMywKLQkweDAwMDAwMDQ5LAotCTB4ZDY4MDNiMDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI0LAotCTB4MDAwMDAwNDksCi0JMHhkNTgwM2IwOSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM1ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYywKLQkweDAwMDAwMDQxLAotCTB4ZDYwMDA3ZWMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJkLAotCTB4MDAwMDAwNDEsCi0JMHhkNTgwMDg2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmUsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZiwKLQkweDAwMDAwMDE4LAotCTB4MzdlZDAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzEsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDIwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMiwKLQkweDAwMDAwMDNmLAotCTB4ZDUxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMzLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM2LAotCTB4MDAwMDAwMjEsCi0JMHhkNTAwMDBlYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzcsCi0JMHgwMDAwMDA0OSwKLQkweGRkMGUzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOCwKLQkweDAwMDAwMDM1LAotCTB4ZDEwNDAwN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM5LAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2EsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYiwKLQkweDAwMDAwMDNmLAotCTB4ZDUwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNjLAotCTB4MDAwMDAwM2YsCi0JMHhkNTE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNjksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNmLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDAsCi0JMHgwMDAwMDA1MSwKLQkweGY1MDAwMGVhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDMsCi0JMHgwMDAwMDA0OSwKLQkweGRkMGUzYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNCwKLQkweDAwMDAwMDM1LAotCTB4ZDEwNDgwN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ1LAotCTB4MDAwMDAwMTgsCi0JMHgzN2Y1MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDYsCi0JMHgwMDAwMDAzZiwKLQkweGM3N2Y3ZjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNywKLQkweDAwMDAwMDNmLAotCTB4Yzc3ZjdmMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwNDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDksCi0JMHgwMDAwMDAzZiwKLQkweGQxMDNjMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYSwKLQkweDAwMDAwMDI1LAotCTB4ZGUyMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRiLAotCTB4MDAwMDAwNDksCi0JMHhkZTgwMjc0ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRlLAotCTB4MDAwMDAwMzUsCi0JMHhkMTAwMDBlMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGYsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMCwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDFkM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTUsCi0JMHgwMDAwMDA3ZCwKLQkweGM3NjBhNzEzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNiwKLQkweDAwMDAwMDMxLAotCTB4YzA4MDAwNDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU3LAotCTB4MDAwMDAwMzEsCi0JMHhjNDAwMDA0OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTgsCi0JMHgwMDAwMDAzMSwKLQkweGMyODAwMDQ1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjQsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmEsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA0MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYTE0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZmLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA1MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYTk1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA4LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA2MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjExLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGIxNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDE4MDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxNjAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEzMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMzg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDUwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2YsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMTkwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjMwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE4MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYjk3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY1LAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxODg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDE5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYzE4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZlLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0MzM5OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGIxNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFjMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2UsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwYzk5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBkMWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGQ5YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OCwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWQ4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxZTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGUxYywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDBmMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTYsCi0JMHgwMDAwMDA3ZCwKLQkweGM3NjBhNzEzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NywKLQkweDAwMDAwMDMxLAotCTB4YzA4MDAwNDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk4LAotCTB4MDAwMDAwMzEsCi0JMHhjNDAwMDA0OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTksCi0JMHgwMDAwMDAzMSwKLQkweGMyODAwMDQ1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YSwKLQkweDAwMDAwMDMxLAotCTB4ZDY4MDAwNmQsCi0vKiBCUkRYX0lOSVRfU0RSQU0gKi8KLQkweDAwMGYwMDBmLAotCTB4MDA3MDAwNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA0MCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMDA2NCwKLQkweDAwMDAwMDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMjQwMCwKLQkweDAwMDAyODAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMjg4MCwKLQkweDAwMDAwMTgwLAotCTB4MDAwMDAwMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMTdkLAotCTB4MDAwMDAwMDgsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwOSwKLQkweDAwMDA1MDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLS8qIEJSRFhfSU5JVCAqLwotCTB4MDAwZjAwMGYsCi0JMHgwMDcwMDFmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDQwLAotCTB4MDAwMDAxMDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAwMDY0LAotCTB4MDAwMDAwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAyNDAwLAotCTB4MDAwMDI4MDAsCi0JMHgwMDAwMDQwMCwKLQkweDAwMDAyODgwLAotCTB4MDAwMDAxODAsCi0JMHgwMDAwMDAwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAxN2QsCi0JMHgwMDAwMDAwOCwKLQkweDAwMDAwMDUxLAotCTB4MDAwMDAwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDA5LAotCTB4MDAwMDUwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotLyogWkVST19JTklUICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzAwMDAwLAotCTB4MDAwMDAwMDEsCi0JMHgwMDAwMDAwMCwKLS8qIFpFUk9fSU5JVCAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcwMDAwMCwKLQkweDAwMDAwMDAxLAotCTB4MDAwMDAwMDAsCi0vKiBMb2FkaW5nIG9wZXJhdGlvbmFsIEZpcm13YXJlICovCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAwLAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDEsCi0JMHgwMDAwMDAwNCwKLQkweDAxZDEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAzLAotCTB4MDAwMDAwMDQsCi0JMHgwMjg5M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDQsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNSwKLQkweDAwMDAwMDA0LAotCTB4MDI4NTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA2LAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDE4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDcsCi0JMHgwMDAwMDAwNCwKLQkweDAzZmQzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOCwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjgsCi0JMHgwMDAwMDA0OSwKLQkweGMwMDAzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOSwKLQkweDAwMDAwMDQ5LAotCTB4YzA4MDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJhLAotCTB4MDAwMDAwNDksCi0JMHhjMTAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmIsCi0JMHgwMDAwMDA0OSwKLQkweGMxODAzYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYywKLQkweDAwMDAwMDI5LAotCTB4ZGY2MDAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJkLAotCTB4MDAwMDAwNDksCi0JMHhkZjQ0M2I3ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmUsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYwLAotCTB4MDAwMDAwM2YsCi0JMHhkZjAwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjEsCi0JMHgwMDAwMDAyZCwKLQkweGRkZTAwZjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYzLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0MDE4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjQsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMTUwMDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NSwKLQkweDAwMDAwMDdhLAotCTB4MTAyMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY2LAotCTB4MDAwMDAwN2EsCi0JMHgzMDIwN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjcsCi0JMHgwMDAwMDAyMSwKLQkweGQwMjQwMDYwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDQwMDI4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFiYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YiwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWZiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZjLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZSwKLQkweDAwMDAwMDc5LAotCTB4ZmQyMTAxMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZmLAotCTB4MDAwMDAwN2QsCi0JMHhmZDJiNDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzAsCi0JMHgwMDAwMDA0MCwKLQkweDNkMDAzMDAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MSwKLQkweDAwMDAwMDQ4LAotCTB4MWQwMDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcyLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxN2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQwNTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NCwKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc4LAotCTB4MDAwMDAwMjEsCi0JMHhlMzM3MWY3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzksCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YSwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2MsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdlLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2YsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MCwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZjAwMDA4MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTAsCi0JMHgwMDAwMDAyZCwKLQkweGQwMDgwODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMSwKLQkweDAwMDAwMDA4LAotCTB4MjFiNWZiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEyLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDE4MTAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNCwKLQkweDAwMDAwMDdkLAotCTB4ZmQwMTgwODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE1LAotCTB4MDAwMDAwNzksCi0JMHhkMDkwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTYsCi0JMHgwMDAwMDA0OSwKLQkweGQwNTgzYjdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNywKLQkweDAwMDAwMDQ5LAotCTB4ZDIwNDNiMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE4LAotCTB4MDAwMDAwM2QsCi0JMHhkZDQwMDAwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTksCi0JMHgwMDAwMDAyNCwKLQkweDMyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYSwKLQkweDAwMDAwMDNkLAotCTB4ZGQ3ZmY4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFiLAotCTB4MDAwMDAwMjksCi0JMHhkMDIwMDE3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWMsCi0JMHgwMDAwMDA0OSwKLQkweGQwYTQzYjBlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZCwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQyZmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFlLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMCwKLQkweDAwMDAwMDM4LAotCTB4MzAwMDAxZTAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIxLAotCTB4MDAwMDAwMzksCi0JMHhkMDAwMDE2MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjIsCi0JMHgwMDAwMDA3OSwKLQkweGQxYjEzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMywKLQkweDAwMDAwMDJkLAotCTB4ZGRlMDBmZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI0LAotCTB4MDAwMDAwNDksCi0JMHhkMDgwMzBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjUsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzE3YjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNiwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI3LAotCTB4MDAwMDAwN2QsCi0JMHhmZDM3NDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjgsCi0JMHgwMDAwMDAwOCwKLQkweDAxN2QzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJhLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAwMzg3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYywKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTA0MDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJkLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxN2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmUsCi0JMHgwMDAwMDA0OSwKLQkweGQzMDAzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZiwKLQkweDAwMDAwMDc5LAotCTB4ZDM4MWJiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMwLAotCTB4MDAwMDAwN2YsCi0JMHhkMTAxYjI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzEsCi0JMHgwMDAwMDA0OCwKLQkweDUxMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMiwKLQkweDAwMDAwMDNkLAotCTB4ZGQ0MDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMzLAotCTB4MDAwMDAwMDgsCi0JMHgwMTk1MzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzQsCi0JMHgwMDAwMDAyMSwKLQkweGQzMDAwNjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNSwKLQkweDAwMDAwMDIwLAotCTB4NTM4MDAwZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDgwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzcsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiMzY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWIzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM5LAotCTB4MDAwMDAwNzUsCi0JMHhmMTAxODY2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2EsCi0JMHgwMDAwMDA3NSwKLQkweGQyMDFiMTY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYiwKLQkweDAwMDAwMDc4LAotCTB4MWQwMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNjLAotCTB4MDAwMDAwMjUsCi0JMHhkZDAwMDFlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2QsCi0JMHgwMDAwMDAwOCwKLQkweDAxYjEzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMSwKLQkweDAwMDAwMDIxLAotCTB4ZTMzNzlmNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQyLAotCTB4MDAwMDAwNDksCi0JMHhkMzAwM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDMsCi0JMHgwMDAwMDA3OSwKLQkweGQzODFiYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNCwKLQkweDAwMDAwMDdmLAotCTB4ZDEwMWIyN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ1LAotCTB4MDAwMDAwNDgsCi0JMHg1MTAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDYsCi0JMHgwMDAwMDA3NSwKLQkweGQyMDFiMTY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNywKLQkweDAwMDAwMDc4LAotCTB4MWQwMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDksCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFjMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYSwKLQkweDAwMDAwMDc5LAotCTB4ZmQ2MDkwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA4MDgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGMsCi0JMHgwMDAwMDA3OCwKLQkweDNkMDFjMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTgsCi0JMHgwMDAwMDA0OSwKLQkweGQxOGUzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOSwKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVhLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWIsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYywKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVkLAotCTB4MDAwMDAwNDksCi0JMHhkMjA0M2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWUsCi0JMHgwMDAwMDA0OSwKLQkweGQyODQzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYwLAotCTB4MDAwMDAwOTQsCi0JMHgwMDEzNDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMGI0MzYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQ4ZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYzLAotCTB4MDAwMDAwOTQsCi0JMHgwMDFiNDk2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjQsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmY0MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY2LAotCTB4MDAwMDAwMWQsCi0JMHhmZDJiODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjcsCi0JMHgwMDAwMDAzMCwKLQkweDMxODM4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOCwKLQkweDAwMDAwMDMwLAotCTB4MTE4MjgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY5LAotCTB4MDAwMDAwMWQsCi0JMHhmZDI1ODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmEsCi0JMHgwMDAwMDAzMCwKLQkweDMxODMwMDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYiwKLQkweDAwMDAwMDMwLAotCTB4MTE4MjAwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZjLAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmQsCi0JMHgwMDAwMDAxZCwKLQkweGZkMDk4MGU1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZSwKLQkweDAwMDAwMDMwLAotCTB4MzE4M2QzNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZmLAotCTB4MDAwMDAwMzAsCi0JMHgxMTgzZDI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDAsCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAyLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDMsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNCwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA1LAotCTB4MDAwMDAwMjUsCi0JMHhkMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDYsCi0JMHgwMDAwMDAxOCwKLQkweDdkNzdmZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNywKLQkweDAwMDAwMDQ5LAotCTB4ZGUyMDNiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA4LAotCTB4MDAwMDAwNDksCi0JMHhkZTgwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDksCi0JMHgwMDAwMDAyMSwKLQkweGQxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYSwKLQkweDAwMDAwMDA5LAotCTB4Y2Y4MTNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzFlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMGUzYjc4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZCwKLQkweDAwMDAwMDYxLAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMCwKLQkweDAwMDAwMDM1LAotCTB4ZGQwMDAwZmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTExLAotCTB4MDAwMDAwMTgsCi0JMHgzYjdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMywKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE0LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTUsCi0JMHgwMDAwMDAyMSwKLQkweGQxODAwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwNDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE3LAotCTB4MDAwMDAwNjEsCi0JMHhmMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFhLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYywKLQkweDAwMDAwMDI1LAotCTB4ZDIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFkLAotCTB4MDAwMDAwOTgsCi0JMHg2MDVkYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDQwODNiMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQxLAotCTB4MDAwMDAwMDksCi0JMHhjMjhiM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDIsCi0JMHgwMDAwMDAzZiwKLQkweGQ0MDAwMzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MywKLQkweDAwMDAwMDA5LAotCTB4YzI4YjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ0LAotCTB4MDAwMDAwNDksCi0JMHhkNDBlM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2NDIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NiwKLQkweDAwMDAwMDJmLAotCTB4ZDI4MTQwODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ3LAotCTB4MDAwMDAwMmQsCi0JMHhkMjg0MDM2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRkLAotCTB4MDAwMDAwMzEsCi0JMHhkMzAzZDI2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGUsCi0JMHgwMDAwMDA0OSwKLQkweGRlNDAzYjY2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUzLAotCTB4MDAwMDAwNDksCi0JMHhkNTgwM2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTQsCi0JMHgwMDAwMDAyMSwKLQkweGRlNDAwMGU2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU2LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTcsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OCwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU5LAotCTB4MDAwMDAwNDksCi0JMHhkNTAwM2I3ZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWEsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWQsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZSwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVmLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDE2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjAsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjU0NGU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MSwKLQkweDAwMDAwMDk0LAotCTB4MDAyMzQxZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYyLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE3NDU2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjMsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0MjY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NCwKLQkweDAwMDAwMDk0LAotCTB4MDAyNzQyZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY1LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJkNDM2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjYsCi0JMHgwMDAwMDA5NCwKLQkweDAwMmQ0NDY4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NywKLQkweDAwMDAwMDk0LAotCTB4MDAzMzQzZTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY4LAotCTB4MDAwMDAwMDQsCi0JMHgwMzk3M2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjksCi0JMHgwMDAwMDAwZCwKLQkweGUzMGRjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YSwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZiLAotCTB4MDAwMDAwMzAsCi0JMHgxMjAyMDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmMsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZCwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZlLAotCTB4MDAwMDAwMGQsCi0JMHhlMzNmYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmYsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDQ2MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MCwKLQkweDAwMDAwMDMwLAotCTB4MTIwNDQwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcxLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgyODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzIsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MywKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc0LAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0MjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzUsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc3LAotCTB4MDAwMDAwMGQsCi0JMHhlMzYzYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzgsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDMyMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OSwKLQkweDAwMDAwMDMwLAotCTB4MTIwMzAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdhLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgzMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2IsCi0JMHgwMDAwMDA0OSwKLQkweGQyODAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YywKLQkweDAwMDAwMDBkLAotCTB4ZTMwZGMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdkLAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2UsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDI4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MTAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjAyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MiwKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgzLAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0MjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODQsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg2LAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODcsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg5LAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGEsCi0JMHgwMDAwMDAzZiwKLQkweGQxODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YiwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThjLAotCTB4MDAwMDAwOTgsCi0JMHg4MDY5M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGQsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTAsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkyLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDNjMDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk1LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTYsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTliLAotCTB4MDAwMDAwNDksCi0JMHhkM2EwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWMsCi0JMHgwMDAwMDAxOSwKLQkweGRkNjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTllLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWYsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWExLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTIsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDAxODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMywKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE0LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTUsCi0JMHgwMDAwMDA5OCwKLQkweDgwMzczYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNiwKLQkweDAwMDAwMDUxLAotCTB4ZjIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFkLAotCTB4MDAwMDAwNDksCi0JMHhkMzgwM2IzOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWUsCi0JMHgwMDAwMDAxOSwKLQkweGRkNmZiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIwLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjEsCi0JMHgwMDAwMDA0MSwKLQkweGQ0ODAzNGViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMiwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIzLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjQsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNSwKLQkweDAwMDAwMDk4LAotCTB4ODAxNzNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI2LAotCTB4MDAwMDAwNDksCi0JMHhkZTQwM2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJjLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmQsCi0JMHgwMDAwMDAyMSwKLQkweGQyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZSwKLQkweDAwMDAwMDE5LAotCTB4ZDNlZjdiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJmLAotCTB4MDAwMDAwNzUsCi0JMHhmMTgxODI2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwNDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNmQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzYsCi0JMHgwMDAwMDAyZCwKLQkweGRkNTQwMTgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNywKLQkweDAwMDAwMDc5LAotCTB4ZjNlMDgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM4LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwMzY3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzksCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2MsCi0JMHgwMDAwMDA1OSwKLQkweGZkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDFjMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNlLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2YsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQxLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDIsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMywKLQkweDAwMDAwMDMxLAotCTB4ZDQ4Mzg4NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ0LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDUsCi0JMHgwMDAwMDA3OSwKLQkweGYxODE5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNiwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ3LAotCTB4MDAwMDAwOTgsCi0JMHg4MDUzYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDgsCi0JMHgwMDAwMDAxOSwKLQkweGRkN2Y3Yjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOSwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDgwMDIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmYsCi0JMHgwMDAwMDA0OSwKLQkweGQxODQzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDIsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMywKLQkweDAwMDAwMDY1LAotCTB4ZjE4MDAyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA0LAotCTB4MDAwMDAwMTgsCi0JMHg3ZDdkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2ExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzAsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotLyogRklOSVNIIElOSVQgRGVzY3JpcHRvciAqLwotCTB4MDAwZjAwMDIsCi0JMHg4MDcxODdjNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCBkYWJkZjU5Li5mN2VmY2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgSmVmZiBHYXJ6aWsgKGpnYXJ6aWtAcG9ib3guY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA0IFN1biBNaWNyb3N5c3RlbXMgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KICAqCiAgKiBGaXJtd2FyZSBpczoKICAqCURlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZCBzb3VyY2UgY29kZSwKQEAgLTY4LDggKzY4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuOTciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRGVjZW1iZXIgMTAsIDIwMDgiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45OCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJGZWJydWFyeSAyNSwgMjAwOSIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC04NjAsNyArODYwLDcgQEAKIAogc3RhdGljIGludCB0ZzNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpicCwgaW50IG1paV9pZCwgaW50IHJlZykKIHsKLQlzdHJ1Y3QgdGczICp0cCA9IChzdHJ1Y3QgdGczICopYnAtPnByaXY7CisJc3RydWN0IHRnMyAqdHAgPSBicC0+cHJpdjsKIAl1MzIgdmFsOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19QQVVTRUQpCkBAIC04NzQsNyArODc0LDcgQEAKIAogc3RhdGljIGludCB0ZzNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnAsIGludCBtaWlfaWQsIGludCByZWcsIHUxNiB2YWwpCiB7Ci0Jc3RydWN0IHRnMyAqdHAgPSAoc3RydWN0IHRnMyAqKWJwLT5wcml2OworCXN0cnVjdCB0ZzMgKnRwID0gYnAtPnByaXY7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX1BBVVNFRCkKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC0yMDUwLDggKzIwNTAsNiBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfc2lnX3Bvc3RfcmVzZXQoc3RydWN0IHRnMyAqLCBpbnQpOwogc3RhdGljIGludCB0ZzNfaGFsdF9jcHUoc3RydWN0IHRnMyAqLCB1MzIpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICopOwotc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICopOwogCiBzdGF0aWMgdm9pZCB0ZzNfcG93ZXJfZG93bl9waHkoc3RydWN0IHRnMyAqdHAsIGJvb2wgZG9fbG93X3Bvd2VyKQogewpAQCAtMjEwOCw2ICsyMTA2LDE5NCBAQAogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7CisJCWludCBpOworCisJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkgeworCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX1NFVDEpOworCQkJZm9yIChpID0gMDsgaSA8IDgwMDA7IGkrKykgeworCQkJCWlmICh0cjMyKE5WUkFNX1NXQVJCKSAmIFNXQVJCX0dOVDEpCisJCQkJCWJyZWFrOworCQkJCXVkZWxheSgyMCk7CisJCQl9CisJCQlpZiAoaSA9PSA4MDAwKSB7CisJCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisJCXRwLT5udnJhbV9sb2NrX2NudCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID4gMCkKKwkJCXRwLT5udnJhbV9sb2NrX2NudC0tOworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApCisJCQl0dzMyX2YoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgeworCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CisKKwkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzIHwgQUNDRVNTX0VOQUJMRSk7CisJfQorfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7CisJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKKworCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgJiB+QUNDRVNTX0VOQUJMRSk7CisJfQorfQorCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKKwkJCQkJdTMyIG9mZnNldCwgdTMyICp2YWwpCit7CisJdTMyIHRtcDsKKwlpbnQgaTsKKworCWlmIChvZmZzZXQgPiBFRVBST01fQUREUl9BRERSX01BU0sgfHwgKG9mZnNldCAlIDQpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpICYgfihFRVBST01fQUREUl9BRERSX01BU0sgfAorCQkJCQlFRVBST01fQUREUl9ERVZJRF9NQVNLIHwKKwkJCQkJRUVQUk9NX0FERFJfUkVBRCk7CisJdHczMihHUkNfRUVQUk9NX0FERFIsCisJICAgICB0bXAgfAorCSAgICAgKDAgPDwgRUVQUk9NX0FERFJfREVWSURfU0hJRlQpIHwKKwkgICAgICgob2Zmc2V0IDw8IEVFUFJPTV9BRERSX0FERFJfU0hJRlQpICYKKwkgICAgICBFRVBST01fQUREUl9BRERSX01BU0spIHwKKwkgICAgIEVFUFJPTV9BRERSX1JFQUQgfCBFRVBST01fQUREUl9TVEFSVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisJCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKKworCQlpZiAodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKwlpZiAoISh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkqdmFsID0gdHIzMihHUkNfRUVQUk9NX0RBVEEpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIE5WUkFNX0NNRF9USU1FT1VUIDEwMDAwCisKK3N0YXRpYyBpbnQgdGczX252cmFtX2V4ZWNfY21kKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZyYW1fY21kKQoreworCWludCBpOworCisJdHczMihOVlJBTV9DTUQsIG52cmFtX2NtZCk7CisJZm9yIChpID0gMDsgaSA8IE5WUkFNX0NNRF9USU1FT1VUOyBpKyspIHsKKwkJdWRlbGF5KDEwKTsKKwkJaWYgKHRyMzIoTlZSQU1fQ01EKSAmIE5WUkFNX0NNRF9ET05FKSB7CisJCQl1ZGVsYXkoMTApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBOVlJBTV9DTURfVElNRU9VVCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHRnM19udnJhbV9waHlzX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKKwkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCisKKwkJYWRkciA9ICgoYWRkciAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKKwkJCUFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICsKKwkJICAgICAgIChhZGRyICUgdHAtPm52cmFtX3BhZ2VzaXplKTsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgdTMyIHRnM19udnJhbV9sb2dpY2FsX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgorCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKKwkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCisKKwkJYWRkciA9ICgoYWRkciA+PiBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAqCisJCQl0cC0+bnZyYW1fcGFnZXNpemUpICsKKwkJICAgICAgIChhZGRyICYgKCgxIDw8IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpIC0gMSkpOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qIE5PVEU6IERhdGEgcmVhZCBpbiBmcm9tIE5WUkFNIGlzIGJ5dGVzd2FwcGVkIGFjY29yZGluZyB0bworICogdGhlIGJ5dGVzd2FwcGluZyBzZXR0aW5ncyBmb3IgYWxsIG90aGVyIHJlZ2lzdGVyIGFjY2Vzc2VzLgorICogdGczIGRldmljZXMgYXJlIEJFIGRldmljZXMsIHNvIG9uIGEgQkUgbWFjaGluZSwgdGhlIGRhdGEKKyAqIHJldHVybmVkIHdpbGwgYmUgZXhhY3RseSBhcyBpdCBpcyBzZWVuIGluIE5WUkFNLiAgT24gYSBMRQorICogbWFjaGluZSwgdGhlIDMyLWJpdCB2YWx1ZSB3aWxsIGJlIGJ5dGVzd2FwcGVkLgorICovCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkKKwkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOworCisJb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKKworCWlmIChvZmZzZXQgPiBOVlJBTV9BRERSX01TSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB0ZzNfbnZyYW1fbG9jayh0cCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKKworCXR3MzIoTlZSQU1fQUREUiwgb2Zmc2V0KTsKKwlyZXQgPSB0ZzNfbnZyYW1fZXhlY19jbWQodHAsIE5WUkFNX0NNRF9SRCB8IE5WUkFNX0NNRF9HTyB8CisJCU5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOworCisJaWYgKHJldCA9PSAwKQorCQkqdmFsID0gdHIzMihOVlJBTV9SRERBVEEpOworCisJdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHRwKTsKKworCXRnM19udnJhbV91bmxvY2sodHApOworCisJcmV0dXJuIHJldDsKK30KKworLyogRW5zdXJlcyBOVlJBTSBkYXRhIGlzIGluIGJ5dGVzdHJlYW0gZm9ybWF0LiAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9iZTMyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCBfX2JlMzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcmVzID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnYpOworCWlmICghcmVzKQorCQkqdmFsID0gY3B1X3RvX2JlMzIodik7CisJcmV0dXJuIHJlczsKK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIF9fdGczX3NldF9tYWNfYWRkcihzdHJ1Y3QgdGczICp0cCwgaW50IHNraXBfbWFjXzEpCiB7CiAJdTMyIGFkZHJfaGlnaCwgYWRkcl9sb3c7CkBAIC00MzM5LDYgKzQ1MjUsMTMgQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB0cC0+ZGV2KTsKKworCQlpZiAobGVuID4gKHRwLT5kZXYtPm10dSArIEVUSF9ITEVOKSAmJgorCQkgICAgc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gbmV4dF9wa3Q7CisJCX0KKwogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJCWlmICh0cC0+dmxncnAgIT0gTlVMTCAmJgogCQkgICAgZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4pIHsKQEAgLTQ0NjEsNyArNDY1NCw3IEBACiAJCQlzYmxrLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwogCiAJCWlmIChsaWtlbHkoIXRnM19oYXNfd29yayh0cCkpKSB7Ci0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQl0ZzNfcmVzdGFydF9pbnRzKHRwKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NDcxLDcgKzQ2NjQsNyBAQAogCiB0eF9yZWNvdmVyeToKIAkvKiB3b3JrX2RvbmUgaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gYnVkZ2V0LiAqLwotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJc2NoZWR1bGVfd29yaygmdHAtPnJlc2V0X3Rhc2spOwogCXJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC00NTIwLDcgKzQ3MTMsNyBAQAogCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CiAKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDU0NSw3ICs0NzM4LDcgQEAKIAkgKi8KIAl0dzMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLCAweDAwMDAwMDAxKTsKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoMSk7CiB9CkBAIC00NTg3LDcgKzQ3ODAsNyBAQAogCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CiAJaWYgKGxpa2VseSh0ZzNfaGFzX3dvcmsodHApKSkgewogCQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyogTm8gd29yaywgc2hhcmVkIGludGVycnVwdCBwZXJoYXBzPyAgcmUtZW5hYmxlCiAJCSAqIGludGVycnVwdHMsIGFuZCBmbHVzaCB0aGF0IFBDSSB3cml0ZQpAQCAtNDYzMyw3ICs0ODI2LDcgQEAKIAl0dzMyX21haWxib3hfZihNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOwogCWlmICh0ZzNfaXJxX3N5bmModHApKQogCQlnb3RvIG91dDsKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CiAJCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CiAJCS8qIFVwZGF0ZSBsYXN0X3RhZyB0byBtYXJrIHRoYXQgdGhpcyBzdGF0dXMgaGFzIGJlZW4KIAkJICogc2Vlbi4gQmVjYXVzZSBpbnRlcnJ1cHQgbWF5IGJlIHNoYXJlZCwgd2UgbWF5IGJlCkBAIC00NjQxLDcgKzQ4MzQsNyBAQAogCQkgKiBpZiB0ZzNfcG9sbCgpIGlzIG5vdCBzY2hlZHVsZWQuCiAJCSAqLwogCQl0cC0+bGFzdF90YWcgPSBzYmxrLT5zdGF0dXNfdGFnOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0KIG91dDoKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKQEAgLTU2MzEsNjIgKzU4MjQsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKLQkJaW50IGk7Ci0KLQkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKSB7Ci0JCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfU0VUMSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODAwMDsgaSsrKSB7Ci0JCQkJaWYgKHRyMzIoTlZSQU1fU1dBUkIpICYgU1dBUkJfR05UMSkKLQkJCQkJYnJlYWs7Ci0JCQkJdWRlbGF5KDIwKTsKLQkJCX0KLQkJCWlmIChpID09IDgwMDApIHsKLQkJCQl0dzMyKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCX0KLQkJdHAtPm52cmFtX2xvY2tfY250Kys7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX252cmFtX3VubG9jayhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7Ci0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPiAwKQotCQkJdHAtPm52cmFtX2xvY2tfY250LS07Ci0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkKLQkJCXR3MzJfZihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOwotCX0KLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7Ci0JCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKLQotCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKLQl9Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfZGlzYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKLQkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwotCi0JCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHRnM19hcGVfc2VuZF9ldmVudChzdHJ1Y3QgdGczICp0cCwgdTMyIGV2ZW50KQogewogCWludCBpOwpAQCAtNjgyNCw3ICs2OTYxLDggQEAKIAlfX3RnM19zZXRfbWFjX2FkZHIodHAsIDApOwogCiAJLyogTVRVICsgZXRoZXJuZXQgaGVhZGVyICsgRkNTICsgb3B0aW9uYWwgVkxBTiB0YWcgKi8KLQl0dzMyKE1BQ19SWF9NVFVfU0laRSwgdHAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyA4KTsKKwl0dzMyKE1BQ19SWF9NVFVfU0laRSwKKwkgICAgIHRwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU4pOwogCiAJLyogVGhlIHNsb3QgdGltZSBpcyBjaGFuZ2VkIGJ5IHRnM19zZXR1cF9waHkgaWYgd2UKIAkgKiBydW4gYXQgZ2lnYWJpdCB3aXRoIGhhbGYgZHVwbGV4LgpAQCAtODM4NiwxNyArODUyNCwxMyBAQAogCXJldHVybiB0cC0+bnZyYW1fc2l6ZTsKIH0KIAotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9sZShzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19sZTMyICp2YWwpOwotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9zd2FiKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCk7Ci0KIHN0YXRpYyBpbnQgdGczX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwogCXU4ICAqcGQ7CiAJdTMyIGksIG9mZnNldCwgbGVuLCBiX29mZnNldCwgYl9jb3VudDsKLQlfX2xlMzIgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtODQxNSw3ICs4NTQ5LDcgQEAKIAkJCS8qIGkuZS4gb2Zmc2V0PTEgbGVuPTIgKi8KIAkJCWJfY291bnQgPSBsZW47CiAJCX0KLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldC1iX29mZnNldCwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldC1iX29mZnNldCwgJnZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQltZW1jcHkoZGF0YSwgKChjaGFyKikmdmFsKSArIGJfb2Zmc2V0LCBiX2NvdW50KTsKQEAgLTg0MjcsNyArODU2MSw3IEBACiAJLyogcmVhZCBieXRlcyB1cHRvIHRoZSBsYXN0IDQgYnl0ZSBib3VuZGFyeSAqLwogCXBkID0gJmRhdGFbZWVwcm9tLT5sZW5dOwogCWZvciAoaSA9IDA7IGkgPCAobGVuIC0gKGxlbiAmIDMpKTsgaSArPSA0KSB7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQgKyBpLCAmdmFsKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJnZhbCk7CiAJCWlmIChyZXQpIHsKIAkJCWVlcHJvbS0+bGVuICs9IGk7CiAJCQlyZXR1cm4gcmV0OwpAQCAtODQ0MSw3ICs4NTc1LDcgQEAKIAkJcGQgPSAmZGF0YVtlZXByb20tPmxlbl07CiAJCWJfY291bnQgPSBsZW4gJiAzOwogCQliX29mZnNldCA9IG9mZnNldCArIGxlbiAtIGJfY291bnQ7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBiX29mZnNldCwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIGJfb2Zmc2V0LCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCW1lbWNweShwZCwgJnZhbCwgYl9jb3VudCk7CkBAIC04NDU4LDcgKzg1OTIsNyBAQAogCWludCByZXQ7CiAJdTMyIG9mZnNldCwgbGVuLCBiX29mZnNldCwgb2RkX2xlbjsKIAl1OCAqYnVmOwotCV9fbGUzMiBzdGFydCwgZW5kOworCV9fYmUzMiBzdGFydCwgZW5kOwogCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTg0NzEsNyArODYwNSw3IEBACiAKIAlpZiAoKGJfb2Zmc2V0ID0gKG9mZnNldCAmIDMpKSkgewogCQkvKiBhZGp1c3RtZW50cyB0byBzdGFydCBvbiByZXF1aXJlZCA0IGJ5dGUgYm91bmRhcnkgKi8KLQkJcmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldC1iX29mZnNldCwgJnN0YXJ0KTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LWJfb2Zmc2V0LCAmc3RhcnQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbGVuICs9IGJfb2Zmc2V0OwpAQCAtODQ4NSw3ICs4NjE5LDcgQEAKIAkJLyogYWRqdXN0bWVudHMgdG8gZW5kIG9uIHJlcXVpcmVkIDQgYnl0ZSBib3VuZGFyeSAqLwogCQlvZGRfbGVuID0gMTsKIAkJbGVuID0gKGxlbiArIDMpICYgfjM7Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQrbGVuLTQsICZlbmQpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQrbGVuLTQsICZlbmQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC04NTQ0LDcgKzg2NzgsNyBAQAogCQljbWQtPmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4OwogCX0KIAljbWQtPnBoeV9hZGRyZXNzID0gUEhZX0FERFI7Ci0JY21kLT50cmFuc2NlaXZlciA9IDA7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJY21kLT5hdXRvbmVnID0gdHAtPmxpbmtfY29uZmlnLmF1dG9uZWc7CiAJY21kLT5tYXh0eHBrdCA9IDA7CiAJY21kLT5tYXhyeHBrdCA9IDA7CkBAIC04NTYxLDI2ICs4Njk1LDU4IEBACiAJCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KHRwLT5tZGlvX2J1cy0+cGh5X21hcFtQSFlfQUREUl0sIGNtZCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgewotCQkvKiBUaGVzZSBhcmUgdGhlIG9ubHkgdmFsaWQgYWR2ZXJ0aXNlbWVudCBiaXRzIGFsbG93ZWQuICAqLwotCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCi0JCSAgICAoY21kLT5hZHZlcnRpc2luZyAmIH4oQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgQURWRVJUSVNFRF9BdXRvbmVnIHwKLQkJCQkJICBBRFZFUlRJU0VEX0ZJQlJFKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogRmliZXIgY2FuIG9ubHkgZG8gU1BFRURfMTAwMC4gICovCi0JCWVsc2UgaWYgKChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpICYmCi0JCQkgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBDb3BwZXIgY2Fubm90IGZvcmNlIFNQRUVEXzEwMDAuICAqLwotCX0gZWxzZSBpZiAoKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkgJiYKLQkJICAgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkpCisJaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSAmJgorCSAgICBjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmICgoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSAmJgotCQkgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkpCisKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgorCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCAmJgorCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCXUzMiBtYXNrID0gQURWRVJUSVNFRF9BdXRvbmVnIHwKKwkJCSAgIEFEVkVSVElTRURfUGF1c2UgfAorCQkJICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQorCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCisJCQltYXNrIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfVFA7CisJCWVsc2UKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF9GSUJSRTsKKworCQlpZiAoY21kLT5hZHZlcnRpc2luZyAmIH5tYXNrKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWFzayAmPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCk7CisKKwkJY21kLT5hZHZlcnRpc2luZyAmPSBtYXNrOworCX0gZWxzZSB7CisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKKwkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgorCQkJICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogCXRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gY21kLT5hdXRvbmVnOwpAQCAtOTAyNSwxMCArOTE5MSwxMCBAQAogc3RhdGljIGludCB0ZzNfdGVzdF9udnJhbShzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgY3N1bSwgbWFnaWM7Ci0JX19sZTMyICpidWY7CisJX19iZTMyICpidWY7CiAJaW50IGksIGosIGssIGVyciA9IDAsIHNpemU7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKQpAQCAtOTA2MiwxNCArOTIyOCwxNSBAQAogCiAJZXJyID0gLUVJTzsKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHNpemU7IGkgKz0gNCwgaisrKSB7Ci0JCWlmICgoZXJyID0gdGczX252cmFtX3JlYWRfbGUodHAsIGksICZidWZbal0pKSAhPSAwKQorCQllcnIgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBpLCAmYnVmW2pdKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA8IHNpemUpCiAJCWdvdG8gb3V0OwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCi0JbWFnaWMgPSBzd2FiMzIobGUzMl90b19jcHUoYnVmWzBdKSk7CisJbWFnaWMgPSBiZTMyX3RvX2NwdShidWZbMF0pOwogCWlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0KIAkgICAgVEczX0VFUFJPTV9NQUdJQ19GVykgewogCQl1OCAqYnVmOCA9ICh1OCAqKSBidWYsIGNzdW04ID0gMDsKQEAgLTkwOTgsNyArOTI2NSw3IEBACiAJaWYgKChtYWdpYyAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PQogCSAgICBURzNfRUVQUk9NX01BR0lDX0hXKSB7CiAJCXU4IGRhdGFbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKLQkgICAgICAgCXU4IHBhcml0eVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOworCQl1OCBwYXJpdHlbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKIAkJdTggKmJ1ZjggPSAodTggKikgYnVmOwogCiAJCS8qIFNlcGFyYXRlIHRoZSBwYXJpdHkgYml0cyBhbmQgdGhlIGRhdGEgYnl0ZXMuICAqLwpAQCAtOTE0MSwxMyArOTMwOCwxMyBAQAogCiAJLyogQm9vdHN0cmFwIGNoZWNrc3VtIGF0IG9mZnNldCAweDEwICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopIGJ1ZiwgMHgxMCk7Ci0JaWYoY3N1bSAhPSBsZTMyX3RvX2NwdShidWZbMHgxMC80XSkpCisJaWYgKGNzdW0gIT0gYmUzMl90b19jcHUoYnVmWzB4MTAvNF0pKQogCQlnb3RvIG91dDsKIAogCS8qIE1hbnVmYWN0dXJpbmcgYmxvY2sgc3RhcnRzIGF0IG9mZnNldCAweDc0LCBjaGVja3N1bSBhdCAweGZjICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopICZidWZbMHg3NC80XSwgMHg4OCk7Ci0JaWYgKGNzdW0gIT0gbGUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQotCQkgZ290byBvdXQ7CisJaWYgKGNzdW0gIT0gYmUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQorCQlnb3RvIG91dDsKIAogCWVyciA9IDA7CiAKQEAgLTk4NTYsOCArMTAwMjMsMTIgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJdHAtPnZsZ3JwID0gZ3JwOworCQlyZXR1cm47CisJfQorCisJdGczX25ldGlmX3N0b3AodHApOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKQEAgLTk4NjYsOCArMTAwMzcsNyBAQAogCS8qIFVwZGF0ZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcgYml0IGluIFJYX01PREUgcmVnaXN0ZXIuICovCiAJX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdGFydCh0cCk7CisJdGczX25ldGlmX3N0YXJ0KHRwKTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiB9CkBAIC05OTc0LDcgKzEwMTQ0LDcgQEAKIAogCXRwLT5udnJhbV9zaXplID0gRUVQUk9NX0NISVBfU0laRTsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmbWFnaWMpICE9IDApCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmbWFnaWMpICE9IDApCiAJCXJldHVybjsKIAogCWlmICgobWFnaWMgIT0gVEczX0VFUFJPTV9NQUdJQykgJiYKQEAgLTk5OTAsNyArMTAxNjAsNyBAQAogCWN1cnNpemUgPSAweDEwOwogCiAJd2hpbGUgKGN1cnNpemUgPCB0cC0+bnZyYW1fc2l6ZSkgewotCQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgY3Vyc2l6ZSwgJnZhbCkgIT0gMCkKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBjdXJzaXplLCAmdmFsKSAhPSAwKQogCQkJcmV0dXJuOwogCiAJCWlmICh2YWwgPT0gbWFnaWMpCkBAIC0xMDAwNiw3ICsxMDE3Niw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkgIT0gMCkKIAkJcmV0dXJuOwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCkBAIC0xMDAxNyw3ICsxMDE4NywxOCBAQAogCiAJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweGYwLCAmdmFsKSA9PSAwKSB7CiAJCWlmICh2YWwgIT0gMCkgewotCQkJdHAtPm52cmFtX3NpemUgPSAodmFsID4+IDE2KSAqIDEwMjQ7CisJCQkvKiBUaGlzIGlzIGNvbmZ1c2luZy4gIFdlIHdhbnQgdG8gb3BlcmF0ZSBvbiB0aGUKKwkJCSAqIDE2LWJpdCB2YWx1ZSBhdCBvZmZzZXQgMHhmMi4gIFRoZSB0ZzNfbnZyYW1fcmVhZCgpCisJCQkgKiBjYWxsIHdpbGwgcmVhZCBmcm9tIE5WUkFNIGFuZCBieXRlc3dhcCB0aGUgZGF0YQorCQkJICogYWNjb3JkaW5nIHRvIHRoZSBieXRlc3dhcHBpbmcgc2V0dGluZ3MgZm9yIGFsbAorCQkJICogb3RoZXIgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGlzIGVuc3VyZXMgdGhlIGRhdGEgd2UKKwkJCSAqIHdhbnQgd2lsbCBhbHdheXMgcmVzaWRlIGluIHRoZSBsb3dlciAxNi1iaXRzLgorCQkJICogSG93ZXZlciwgdGhlIGRhdGEgaW4gTlZSQU0gaXMgaW4gTEUgZm9ybWF0LCB3aGljaAorCQkJICogbWVhbnMgdGhlIGRhdGEgZnJvbSB0aGUgTlZSQU0gcmVhZCB3aWxsIGFsd2F5cyBiZQorCQkJICogb3Bwb3NpdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIENQVS4gIFRoZSAxNi1iaXQKKwkJCSAqIGJ5dGVzd2FwIHRoZW4gYnJpbmdzIHRoZSBkYXRhIHRvIENQVSBlbmRpYW5uZXNzLgorCQkJICovCisJCQl0cC0+bnZyYW1fc2l6ZSA9IHN3YWIxNigodTE2KSh2YWwgJiAweDAwMDBmZmZmKSkgKiAxMDI0OwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTA0NjgsMTQxICsxMDY0OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKLQkJCQkJdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JdTMyIHRtcDsKLQlpbnQgaTsKLQotCWlmIChvZmZzZXQgPiBFRVBST01fQUREUl9BRERSX01BU0sgfHwKLQkgICAgKG9mZnNldCAlIDQpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdG1wID0gdHIzMihHUkNfRUVQUk9NX0FERFIpICYgfihFRVBST01fQUREUl9BRERSX01BU0sgfAotCQkJCQlFRVBST01fQUREUl9ERVZJRF9NQVNLIHwKLQkJCQkJRUVQUk9NX0FERFJfUkVBRCk7Ci0JdHczMihHUkNfRUVQUk9NX0FERFIsCi0JICAgICB0bXAgfAotCSAgICAgKDAgPDwgRUVQUk9NX0FERFJfREVWSURfU0hJRlQpIHwKLQkgICAgICgob2Zmc2V0IDw8IEVFUFJPTV9BRERSX0FERFJfU0hJRlQpICYKLQkgICAgICBFRVBST01fQUREUl9BRERSX01BU0spIHwKLQkgICAgIEVFUFJPTV9BRERSX1JFQUQgfCBFRVBST01fQUREUl9TVEFSVCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKLQotCQlpZiAodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0KLQlpZiAoISh0bXAgJiBFRVBST01fQUREUl9DT01QTEVURSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkqdmFsID0gdHIzMihHUkNfRUVQUk9NX0RBVEEpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIE5WUkFNX0NNRF9USU1FT1VUIDEwMDAwCi0KLXN0YXRpYyBpbnQgdGczX252cmFtX2V4ZWNfY21kKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZyYW1fY21kKQotewotCWludCBpOwotCi0JdHczMihOVlJBTV9DTUQsIG52cmFtX2NtZCk7Ci0JZm9yIChpID0gMDsgaSA8IE5WUkFNX0NNRF9USU1FT1VUOyBpKyspIHsKLQkJdWRlbGF5KDEwKTsKLQkJaWYgKHRyMzIoTlZSQU1fQ01EKSAmIE5WUkFNX0NNRF9ET05FKSB7Ci0JCQl1ZGVsYXkoMTApOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGkgPT0gTlZSQU1fQ01EX1RJTUVPVVQpIHsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgdGczX252cmFtX3BoeXNfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgotCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKLQotCQlhZGRyID0gKChhZGRyIC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PAotCQkJQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKwotCQkgICAgICAgKGFkZHIgJSB0cC0+bnZyYW1fcGFnZXNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLXN0YXRpYyB1MzIgdGczX252cmFtX2xvZ2ljYWxfYWRkcihzdHJ1Y3QgdGczICp0cCwgdTMyIGFkZHIpCi17Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCSAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TKSAmJgotCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKLQotCQlhZGRyID0gKChhZGRyID4+IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICoKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSkgKwotCQkgICAgICAgKGFkZHIgJiAoKDEgPDwgQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgLSAxKSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCi0JCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKLQotCW9mZnNldCA9IHRnM19udnJhbV9waHlzX2FkZHIodHAsIG9mZnNldCk7Ci0KLQlpZiAob2Zmc2V0ID4gTlZSQU1fQUREUl9NU0spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gdGczX252cmFtX2xvY2sodHApOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7Ci0KLQl0dzMyKE5WUkFNX0FERFIsIG9mZnNldCk7Ci0JcmV0ID0gdGczX252cmFtX2V4ZWNfY21kKHRwLCBOVlJBTV9DTURfUkQgfCBOVlJBTV9DTURfR08gfAotCQlOVlJBTV9DTURfRklSU1QgfCBOVlJBTV9DTURfTEFTVCB8IE5WUkFNX0NNRF9ET05FKTsKLQotCWlmIChyZXQgPT0gMCkKLQkJKnZhbCA9IHN3YWIzMih0cjMyKE5WUkFNX1JEREFUQSkpOwotCi0JdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHRwKTsKLQotCXRnM19udnJhbV91bmxvY2sodHApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF9sZShzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19sZTMyICp2YWwpCi17Ci0JdTMyIHY7Ci0JaW50IHJlcyA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2KTsKLQlpZiAoIXJlcykKLQkJKnZhbCA9IGNwdV90b19sZTMyKHYpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfc3dhYihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCi17Ci0JaW50IGVycjsKLQl1MzIgdG1wOwotCi0JZXJyID0gdGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnRtcCk7Ci0JKnZhbCA9IHN3YWIzMih0bXApOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgdGczX252cmFtX3dyaXRlX2Jsb2NrX3VzaW5nX2VlcHJvbShzdHJ1Y3QgdGczICp0cCwKIAkJCQkgICAgdTMyIG9mZnNldCwgdTMyIGxlbiwgdTggKmJ1ZikKIHsKQEAgLTEwNjExLDEzICsxMDY1NywxMyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CiAJCXUzMiBhZGRyOwotCQlfX2xlMzIgZGF0YTsKKwkJX19iZTMyIGRhdGE7CiAKIAkJYWRkciA9IG9mZnNldCArIGk7CiAKIAkJbWVtY3B5KCZkYXRhLCBidWYgKyBpLCA0KTsKIAotCQl0dzMyKEdSQ19FRVBST01fREFUQSwgbGUzMl90b19jcHUoZGF0YSkpOworCQl0dzMyKEdSQ19FRVBST01fREFUQSwgYmUzMl90b19jcHUoZGF0YSkpOwogCiAJCXZhbCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKIAkJdHczMihHUkNfRUVQUk9NX0FERFIsIHZhbCB8IEVFUFJPTV9BRERSX0NPTVBMRVRFKTsKQEAgLTEwNjY3LDggKzEwNzEzLDkgQEAKIAkJcGh5X2FkZHIgPSBvZmZzZXQgJiB+cGFnZW1hc2s7CiAKIAkJZm9yIChqID0gMDsgaiA8IHBhZ2VzaXplOyBqICs9IDQpIHsKLQkJCWlmICgocmV0ID0gdGczX252cmFtX3JlYWRfbGUodHAsIHBoeV9hZGRyICsgaiwKLQkJCQkJCShfX2xlMzIgKikgKHRtcCArIGopKSkpCisJCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBwaHlfYWRkciArIGosCisJCQkJCQkgIChfX2JlMzIgKikgKHRtcCArIGopKTsKKwkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJldCkKQEAgLTEwNzE1LDcgKzEwNzYyLDcgQEAKIAkJCV9fYmUzMiBkYXRhOwogCiAJCQlkYXRhID0gKigoX19iZTMyICopICh0bXAgKyBqKSk7Ci0JCQkvKiBzd2FiMzIobGUzMl90b19jcHUoZGF0YSkpLCBhY3R1YWxseSAqLworCiAJCQl0dzMyKE5WUkFNX1dSREFUQSwgYmUzMl90b19jcHUoZGF0YSkpOwogCiAJCQl0dzMyKE5WUkFNX0FERFIsIHBoeV9hZGRyICsgaik7CkBAIC0xMTMwMSwyNCArMTEzNDgsMjUgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX3BhcnRubyhzdHJ1Y3QgdGczICp0cCkKIHsKLQl1bnNpZ25lZCBjaGFyIHZwZF9kYXRhWzI1Nl07CisJdW5zaWduZWQgY2hhciB2cGRfZGF0YVsyNTZdOyAgIC8qIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIG1hZ2ljOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MCwgJm1hZ2ljKSkKIAkJZ290byBvdXRfbm90X2ZvdW5kOwogCiAJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpIHsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7CiAJCQl1MzIgdG1wOwogCi0JCQlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MTAwICsgaSwgJnRtcCkpCisJCQkvKiBUaGUgZGF0YSBpcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCBpbiBOVlJBTS4KKwkJCSAqIFVzZSB0aGUgYmlnLWVuZGlhbiByZWFkIHJvdXRpbmVzIHRvIHByZXNlcnZlCisJCQkgKiB0aGUgYnl0ZSBvcmRlciBhcyBpdCBleGlzdHMgaW4gTlZSQU0uCisJCQkgKi8KKwkJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCAweDEwMCArIGksICZ0bXApKQogCQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAotCQkJdnBkX2RhdGFbaSArIDBdID0gKCh0bXAgPj4gIDApICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgMV0gPSAoKHRtcCA+PiAgOCkgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAyXSA9ICgodG1wID4+IDE2KSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDNdID0gKCh0bXAgPj4gMjQpICYgMHhmZik7CisJCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdG1wLCBzaXplb2YodG1wKSk7CiAJCX0KIAl9IGVsc2UgewogCQlpbnQgdnBkX2NhcDsKQEAgLTExMzQ0LDcgKzExMzkyLDcgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgdnBkX2NhcCArIFBDSV9WUERfREFUQSwKIAkJCQkJICAgICAgJnRtcCk7CiAJCQl2ID0gY3B1X3RvX2xlMzIodG1wKTsKLQkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ2LCA0KTsKKwkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ2LCBzaXplb2YodikpOwogCQl9CiAJfQogCkBAIC0xMTQwNCwxNSArMTE0NTIsNzkgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkgfHwKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkgfHwKIAkgICAgKHZhbCAmIDB4ZmMwMDAwMDApICE9IDB4MGMwMDAwMDAgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgNCwgJnZhbCkgfHwKKwkgICAgdGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZ2YWwpIHx8CiAJICAgIHZhbCAhPSAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfYmNfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWwsIG9mZnNldCwgc3RhcnQsIHZlcl9vZmZzZXQ7CisJaW50IGk7CisJYm9vbCBuZXd2ZXIgPSBmYWxzZTsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHhjLCAmb2Zmc2V0KSB8fAorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgMHg0LCAmc3RhcnQpKQorCQlyZXR1cm47CisKKwlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpKQorCQlyZXR1cm47CisKKwlpZiAoKHZhbCAmIDB4ZmMwMDAwMDApID09IDB4MGMwMDAwMDApIHsKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSkKKwkJCXJldHVybjsKKworCQlpZiAodmFsID09IDApCisJCQluZXd2ZXIgPSB0cnVlOworCX0KKworCWlmIChuZXd2ZXIpIHsKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJb2Zmc2V0ID0gb2Zmc2V0ICsgdmVyX29mZnNldCAtIHN0YXJ0OworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gNCkgeworCQkJX19iZTMyIHY7CisJCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJnYpKQorCQkJCXJldHVybjsKKworCQkJbWVtY3B5KHRwLT5md192ZXIgKyBpLCAmdiwgc2l6ZW9mKHYpKTsKKwkJfQorCX0gZWxzZSB7CisJCXUzMiBtYWpvciwgbWlub3I7CisKKwkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBURzNfTlZNX1BUUkVWX0JDVkVSLCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJbWFqb3IgPSAodmVyX29mZnNldCAmIFRHM19OVk1fQkNWRVJfTUFKTVNLKSA+PgorCQkJVEczX05WTV9CQ1ZFUl9NQUpTRlQ7CisJCW1pbm9yID0gdmVyX29mZnNldCAmIFRHM19OVk1fQkNWRVJfTUlOTVNLOworCQlzbnByaW50ZigmdHAtPmZ3X3ZlclswXSwgMzIsICJ2JWQuJTAyZCIsIG1ham9yLCBtaW5vcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfaHdzYl92ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgbWFqb3IsIG1pbm9yOworCisJLyogVXNlIG5hdGl2ZSBlbmRpYW4gcmVwcmVzZW50YXRpb24gKi8KKwlpZiAodGczX252cmFtX3JlYWQodHAsIFRHM19OVk1fSFdTQl9DRkcxLCAmdmFsKSkKKwkJcmV0dXJuOworCisJbWFqb3IgPSAodmFsICYgVEczX05WTV9IV1NCX0NGRzFfTUFKTVNLKSA+PgorCQlURzNfTlZNX0hXU0JfQ0ZHMV9NQUpTRlQ7CisJbWlub3IgPSAodmFsICYgVEczX05WTV9IV1NCX0NGRzFfTUlOTVNLKSA+PgorCQlURzNfTlZNX0hXU0JfQ0ZHMV9NSU5TRlQ7CisKKwlzbnByaW50ZigmdHAtPmZ3X3ZlclswXSwgMzIsICJzYiB2JWQuJTAyZCIsIG1ham9yLCBtaW5vcik7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9zYl92ZXIoc3RydWN0IHRnMyAqdHAsIHUzMiB2YWwpCiB7CiAJdTMyIG9mZnNldCwgbWFqb3IsIG1pbm9yLCBidWlsZDsKQEAgLTExNDM4LDcgKzExNTUwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKIAkJcmV0dXJuOwogCiAJYnVpbGQgPSAodmFsICYgVEczX0VFUFJPTV9TQl9FREhfQkxEX01BU0spID4+CkBAIC0xMTQ1OCw0OSArMTE1NzAsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9md192ZXIoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfbWdtdGZ3X3ZlcihzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgdmFsLCBvZmZzZXQsIHN0YXJ0OwotCXUzMiB2ZXJfb2Zmc2V0OwotCWludCBpLCBiY250OwotCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZ2YWwpKQotCQlyZXR1cm47Ci0KLQlpZiAodmFsICE9IFRHM19FRVBST01fTUFHSUMpIHsKLQkJaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19GVykKLQkJCXRnM19yZWFkX3NiX3Zlcih0cCwgdmFsKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4YywgJm9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgMHg0LCAmc3RhcnQpKQotCQlyZXR1cm47Ci0KLQlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOwotCi0JaWYgKCF0ZzNfZndfaW1nX2lzX3ZhbGlkKHRwLCBvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDgsICZ2ZXJfb2Zmc2V0KSkKLQkJcmV0dXJuOwotCi0Jb2Zmc2V0ID0gb2Zmc2V0ICsgdmVyX29mZnNldCAtIHN0YXJ0OwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7Ci0JCV9fbGUzMiB2OwotCQlpZiAodGczX252cmFtX3JlYWRfbGUodHAsIG9mZnNldCArIGksICZ2KSkKLQkJCXJldHVybjsKLQotCQltZW1jcHkodHAtPmZ3X3ZlciArIGksICZ2LCA0KTsKLQl9Ci0KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQotCQlyZXR1cm47CisJaW50IGksIHZsZW47CiAKIAlmb3IgKG9mZnNldCA9IFRHM19OVk1fRElSX1NUQVJUOwogCSAgICAgb2Zmc2V0IDwgVEczX05WTV9ESVJfRU5EOwogCSAgICAgb2Zmc2V0ICs9IFRHM19OVk1fRElSRU5UX1NJWkUpIHsKLQkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkpCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKIAkJCXJldHVybjsKIAogCQlpZiAoKHZhbCA+PiBURzNfTlZNX0RJUlRZUEVfU0hJRlQpID09IFRHM19OVk1fRElSVFlQRV9BU0ZJTkkpCkBAIC0xMTUxMiwzNiArMTE1OTAsODcgQEAKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKIAkJc3RhcnQgPSAweDA4MDAwMDAwOwotCWVsc2UgaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCAtIDQsICZzdGFydCkpCisJZWxzZSBpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCAtIDQsICZzdGFydCkpCiAJCXJldHVybjsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA0LCAmb2Zmc2V0KSB8fAorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJm9mZnNldCkgfHwKIAkgICAgIXRnM19md19pbWdfaXNfdmFsaWQodHAsIG9mZnNldCkgfHwKLQkgICAgdGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgOCwgJnZhbCkpCisJICAgIHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA4LCAmdmFsKSkKIAkJcmV0dXJuOwogCiAJb2Zmc2V0ICs9IHZhbCAtIHN0YXJ0OwogCi0JYmNudCA9IHN0cmxlbih0cC0+ZndfdmVyKTsKKwl2bGVuID0gc3RybGVuKHRwLT5md192ZXIpOwogCi0JdHAtPmZ3X3ZlcltiY250KytdID0gJywnOwotCXRwLT5md192ZXJbYmNudCsrXSA9ICcgJzsKKwl0cC0+ZndfdmVyW3ZsZW4rK10gPSAnLCc7CisJdHAtPmZ3X3Zlclt2bGVuKytdID0gJyAnOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlfX2xlMzIgdjsKLQkJaWYgKHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQsICZ2KSkKKwkJX19iZTMyIHY7CisJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQsICZ2KSkKIAkJCXJldHVybjsKIAogCQlvZmZzZXQgKz0gc2l6ZW9mKHYpOwogCi0JCWlmIChiY250ID4gVEczX1ZFUl9TSVpFIC0gc2l6ZW9mKHYpKSB7Ci0JCQltZW1jcHkoJnRwLT5md192ZXJbYmNudF0sICZ2LCBURzNfVkVSX1NJWkUgLSBiY250KTsKKwkJaWYgKHZsZW4gPiBURzNfVkVSX1NJWkUgLSBzaXplb2YodikpIHsKKwkJCW1lbWNweSgmdHAtPmZ3X3Zlclt2bGVuXSwgJnYsIFRHM19WRVJfU0laRSAtIHZsZW4pOwogCQkJYnJlYWs7CiAJCX0KIAotCQltZW1jcHkoJnRwLT5md192ZXJbYmNudF0sICZ2LCBzaXplb2YodikpOwotCQliY250ICs9IHNpemVvZih2KTsKKwkJbWVtY3B5KCZ0cC0+ZndfdmVyW3ZsZW5dLCAmdiwgc2l6ZW9mKHYpKTsKKwkJdmxlbiArPSBzaXplb2Yodik7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZGFzaF92ZXIoc3RydWN0IHRnMyAqdHApCit7CisJaW50IHZsZW47CisJdTMyIGFwZWRhdGE7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHx8CisJICAgICEodHAtPnRnM19mbGFncyAgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX1NFR19TSUcpOworCWlmIChhcGVkYXRhICE9IEFQRV9TRUdfU0lHX01BR0lDKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfU1RBVFVTKTsKKwlpZiAoIShhcGVkYXRhICYgQVBFX0ZXX1NUQVRVU19SRUFEWSkpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9GV19WRVJTSU9OKTsKKworCXZsZW4gPSBzdHJsZW4odHAtPmZ3X3Zlcik7CisKKwlzbnByaW50ZigmdHAtPmZ3X3Zlclt2bGVuXSwgVEczX1ZFUl9TSVpFIC0gdmxlbiwgIiBEQVNIIHYlZC4lZC4lZC4lZCIsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX01BSk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fTUFKU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9NSU5NU0spID4+IEFQRV9GV19WRVJTSU9OX01JTlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fUkVWTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9SRVZTRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX0JMRE1TSykpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWw7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpKQorCQlyZXR1cm47CisKKwlpZiAodmFsID09IFRHM19FRVBST01fTUFHSUMpCisJCXRnM19yZWFkX2JjX3Zlcih0cCk7CisJZWxzZSBpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfRldfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0ZXKQorCQl0ZzNfcmVhZF9zYl92ZXIodHAsIHZhbCk7CisJZWxzZSBpZiAoKHZhbCAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PSBURzNfRUVQUk9NX01BR0lDX0hXKQorCQl0ZzNfcmVhZF9od3NiX3Zlcih0cCk7CisJZWxzZQorCQlyZXR1cm47CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKKwkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQorCQlyZXR1cm47CisKKwl0ZzNfcmVhZF9tZ210ZndfdmVyKHRwKTsKIAogCXRwLT5md192ZXJbVEczX1ZFUl9TSVpFIC0gMV0gPSAwOwogfQpAQCAtMTIzMTIsMTQgKzEyNDQxLDEwIEBACiAJfQogCWlmICghYWRkcl9vaykgewogCQkvKiBOZXh0LCB0cnkgTlZSQU0uICovCi0JCWlmICghdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCi0JCSAgICAhdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7Ci0JCQlkZXYtPmRldl9hZGRyWzBdID0gKChoaSA+PiAxNikgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbMV0gPSAoKGhpID4+IDI0KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclsyXSA9ICgobG8gPj4gIDApICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzNdID0gKChsbyA+PiAgOCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbNF0gPSAoKGxvID4+IDE2KSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkcls1XSA9ICgobG8gPj4gMjQpICYgMHhmZik7CisJCWlmICghdGczX252cmFtX3JlYWRfYmUzMih0cCwgbWFjX29mZnNldCArIDAsICZoaSkgJiYKKwkJICAgICF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgeworCQkJbWVtY3B5KCZkZXYtPmRldl9hZGRyWzBdLCAoKGNoYXIgKikmaGkpICsgMiwgMik7CisJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMl0sIChjaGFyICopJmxvLCBzaXplb2YobG8pKTsKIAkJfQogCQkvKiBGaW5hbGx5IGp1c3QgZmV0Y2ggaXQgb3V0IG9mIHRoZSBNQUMgY29udHJvbCByZWdzLiAqLwogCQllbHNlIHsKQEAgLTEzMjAwLDYgKzEzMzI1LDkgQEAKIAkJfQogCiAJCXRnM19hcGVfbG9ja19pbml0KHRwKTsKKworCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpCisJCQl0ZzNfcmVhZF9kYXNoX3Zlcih0cCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNTA4ZGVmMy4uY2I0YzYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTE3MTksNiArMTcxOSwxMiBAQAogCiAjZGVmaW5lIFRHM19PVFBfREVGQVVMVAkJCTB4Mjg2YzE2NDAKIAorLyogSGFyZHdhcmUgU2VsZmJvb3QgTlZSQU0gbGF5b3V0ICovCisjZGVmaW5lIFRHM19OVk1fSFdTQl9DRkcxCQkweDAwMDAwMDA0CisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NQUpNU0sJMHhmODAwMDAwMAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUFKU0ZUCTI3CisjZGVmaW5lICBURzNfTlZNX0hXU0JfQ0ZHMV9NSU5NU0sJMHgwN2MwMDAwMAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUlOU0ZUCTIyCiAKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQwkJMHg2Njk5NTVhYQogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDX0ZXCQkweGE1MDAwMDAwCkBAIC0xNzM3LDYgKzE3NDMsMTAgQEAKICNkZWZpbmUgVEczX05WTV9ESVJFTlRfU0laRQkJMHhjCiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9TSElGVAkJMjQKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX0FTRklOSQkJMQorI2RlZmluZSBURzNfTlZNX1BUUkVWX0JDVkVSCQkweDk0CisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUFKTVNLCQkweDAwMDBmZjAwCisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUFKU0ZUCQk4CisjZGVmaW5lIFRHM19OVk1fQkNWRVJfTUlOTVNLCQkweDAwMDAwMGZmCiAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIwX0VESF9PRkYJMHgxMAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjJfRURIX09GRgkweDE0CkBAIC0xOTY3LDYgKzE5NzcsMTQgQEAKIC8qIEFQRSBzaGFyZWQgbWVtb3J5LiAgQWNjZXNzaWJsZSB0aHJvdWdoIEJBUjEgKi8KICNkZWZpbmUgVEczX0FQRV9GV19TVEFUVVMJCTB4NDAwYwogI2RlZmluZSAgQVBFX0ZXX1NUQVRVU19SRUFEWQkJIDB4MDAwMDAxMDAKKyNkZWZpbmUgVEczX0FQRV9GV19WRVJTSU9OCQkweDQwMTgKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSk1TSwkJIDB4ZmYwMDAwMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX01BSlNGVAkJIDI0CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NSU5NU0sJCSAweDAwZmYwMDAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NSU5TRlQJCSAxNgorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fUkVWTVNLCQkgMHgwMDAwZmYwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fUkVWU0ZUCQkgOAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fQkxETVNLCQkgMHgwMDAwMDBmZgogI2RlZmluZSBURzNfQVBFX0hPU1RfU0VHX1NJRwkJMHg0MjAwCiAjZGVmaW5lICBBUEVfSE9TVF9TRUdfU0lHX01BR0lDCQkgMHg0ODRmNTM1NAogI2RlZmluZSBURzNfQVBFX0hPU1RfU0VHX0xFTgkJMHg0MjA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCmluZGV4IDQzODUzZTMuLjRhNjVmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCkBAIC0yNzQsNiArMjc0LDE1IEBACiAJCiAJcmV0dXJuIDsgCiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeGxfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0geGxfb3BlbiwKKwkubmRvX3N0b3AJCT0geGxfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHhsX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHhsX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB4bF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHhsX3NldF9tYWNfYWRkcmVzcywKK307CiAgCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB4bF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpIApAQCAtMzM3LDEzICszNDYsNyBAQAogCQlyZXR1cm4gaSA7IAogCX0JCQkJCiAKLQlkZXYtPm9wZW49JnhsX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQ9JnhsX3htaXQ7Ci0JZGV2LT5jaGFuZ2VfbXR1PSZ4bF9jaGFuZ2VfbXR1OwotCWRldi0+c3RvcD0meGxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bD1OVUxMOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZ4bF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcz0meGxfc2V0X21hY19hZGRyZXNzIDsgCisJZGV2LT5uZXRkZXZfb3BzID0gJnhsX25ldGRldl9vcHM7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LGRldikgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKaW5kZXggYjU2NmQ2ZC4uYjlkYjFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKQEAgLTkyLDYgKzkyLDggQEAKIAlvdXR3KHZhbCwgZGV2LT5iYXNlX2FkZHIgKyByZWcpOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFieXNzX25ldGRldl9vcHM7CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFieXNzX2F0dGFjaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsJCiAJc3RhdGljIGludCB2ZXJzaW9ucHJpbnRlZDsKQEAgLTE1Nyw4ICsxNTksNyBAQAogCiAJbWVtY3B5KHRwLT5Qcm9kdWN0SUQsICJNYWRnZSBQQ0kgMTYvNCBNazIiLCBQUk9EX0lEX1NJWkUgKyAxKTsKIAkJCi0JZGV2LT5vcGVuID0gYWJ5c3Nfb3BlbjsKLQlkZXYtPnN0b3AgPSBhYnlzc19jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYWJ5c3NfbmV0ZGV2X29wczsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CkBAIC00NTAsNiArNDUxLDExIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFieXNzX2luaXQgKHZvaWQpCiB7CisJYWJ5c3NfbmV0ZGV2X29wcyA9IHRtczM4MHRyX25ldGRldl9vcHM7CisKKwlhYnlzc19uZXRkZXZfb3BzLm5kb19vcGVuID0gYWJ5c3Nfb3BlbjsKKwlhYnlzc19uZXRkZXZfb3BzLm5kb19zdG9wID0gYWJ5c3NfY2xvc2U7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYWJ5c3NfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCBmYTdiY2U2ZTAuLjlkODk2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCkBAIC0yMDAsNyArMjAwLDYgQEAKIHN0YXRpYyB2b2lkCWlibXRyX3Jlc2V0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0KnRtcixzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkCXRva19yZXJ1bih1bnNpZ25lZCBsb25nIGRldl9hZGRyKTsKIHN0YXRpYyB2b2lkCWlibXRyX3JlYWRsb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IAluZXRfZGV2aWNlX3N0YXRzICp0b2tfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludAlpYm10cl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwogc3RhdGljIHZvaWQJZmluZF90dXJib19hZGFwdGVycyhpbnQgKmlvbGlzdCk7CiAKQEAgLTgxNiwxOCArODE1LDIxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0cmRldl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB0b2tfb3BlbiwKKwkubmRvX3N0b3AJCT0gdG9rX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB0b2tfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0b2tfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpYm10cl9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgdHJkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0b2tfaW5mbyAqdGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJU0VUX1BBR0UodGktPnNyYl9wYWdlKTsKICAgICAgICAgdGktPm9wZW5fZmFpbHVyZSA9IE5PICAgIDsKLQlkZXYtPm9wZW4gPSB0b2tfb3BlbjsKLQlkZXYtPnN0b3AgPSB0b2tfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB0b2tfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSB0b2tfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdG9rX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpYm10cl9jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZ0cmRldl9uZXRkZXZfb3BzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYwLDcgKzE0NjIsNyBAQAogCQkJCQkiJTAyWFxuIiwKIAkJCQkJKGludClyZXRjb2RlLCAoaW50KXJlYWRiKHRpLT5zc2IgKyA2KSk7CiAJCQllbHNlCi0JCQkJdGktPnRyX3N0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIFhNSVRfWElEX0NNRDoKIAkJCURQUklOVEsoInhtaXQgeGlkIHJldF9jb2RlOiAlMDJYXG4iLApAQCAtMTY0Niw3ICsxNjQ4LDcgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKLQl0aS0+dHJfc3RhdHMudHhfYnl0ZXMgKz0gdGktPmN1cnJlbnRfc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0aS0+Y3VycmVudF9za2ItPmxlbjsKIAlkZXZfa2ZyZWVfc2tiX2lycSh0aS0+Y3VycmVudF9za2IpOwogCXRpLT5jdXJyZW50X3NrYiA9IE5VTEw7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMTcyMiw3ICsxNzI0LDcgQEAKIAlpZiAocmVhZGIobGxjICsgb2Zmc2V0b2Yoc3RydWN0IHRybGxjLCBsbGMpKSAhPSBVSV9DTUQpIHsKIAkJU0VUX1BBR0UodGktPmFzYl9wYWdlKTsKIAkJd3JpdGViKERBVEFfTE9TVCwgdGktPmFzYiArIFJFVENPREVfT0ZTVCk7Ci0JCXRpLT50cl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CiAJCXJldHVybjsKIAl9CkBAIC0xNzU3LDcgKzE3NTksNyBAQAogCiAJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihza2Jfc2l6ZSkpKSB7CiAJCURQUklOVEsoIm91dCBvZiBtZW1vcnkuIGZyYW1lIGRyb3BwZWQuXG4iKTsKLQkJdGktPnRyX3N0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCVNFVF9QQUdFKHRpLT5hc2JfcGFnZSk7CiAJCXdyaXRlYihEQVRBX0xPU1QsIHRpLT5hc2IgKyBvZmZzZXRvZihzdHJ1Y3QgYXNiX3JlYywgcmV0X2NvZGUpKTsKIAkJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwpAQCAtMTgxMyw4ICsxODE1LDggQEAKIAogCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKIAotCXRpLT50cl9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQl0aS0+dHJfc3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKElQdjRfcCkgewpAQCAtMTg3NiwyMSArMTg3OCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogdG9rX2dldF9zdGF0cygpOiAgQmFzaWNhbGx5IGEgc2NhZmZvbGQgcm91dGluZSB3aGljaCB3aWxsIHJldHVybgotICAgdGhlIGFkZHJlc3Mgb2YgdGhlIHRyX3N0YXRpc3RpY3Mgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aAotICAgdGhpcyBkZXZpY2UgLS0gdGhlIHRyLi4uLiBzdHJ1Y3R1cmUgaXMgYW4gZXRobmV0IGxvb2stYWxpa2UKLSAgIHNvIGF0IGxlYXN0IGZvciB0aGlzIGl0ZXJhdGlvbiBtYXkgc3VmZmljZS4gICAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnRva19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQotCXN0cnVjdCB0b2tfaW5mbyAqdG9raTsKLQl0b2tpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopICZ0b2tpLT50cl9zdGF0czsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgaW50IGlibXRyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggMjM5Yzc1Mi4uZjMwOWI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTIwNyw3ICsyMDcsNiBAQAogc3RhdGljIGludCBzdHJlYW1lcl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHN0cmVhbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdHJlYW1lcl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX2FyYl9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7CkBAIC0yMjIsNiArMjIxLDE4IEBACiAjZW5kaWYKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHN0cmVhbWVyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHN0cmVhbWVyX29wZW4sCisJLm5kb19zdG9wCQk9IHN0cmVhbWVyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzdHJlYW1lcl94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBzdHJlYW1lcl9jaGFuZ2VfbXR1LAorI2lmIFNUUkVBTUVSX0lPQ1RMCisJLm5kb19kb19pb2N0bAkJPSBzdHJlYW1lcl9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc3RyZWFtZXJfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzdHJlYW1lcl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTMyMSwxOCArMzMyLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdHJlYW1lcl9wcml2LT5zcmJfd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3RyZWFtZXJfcHJpdi0+dHJiX3dhaXQpOwogCi0JZGV2LT5vcGVuID0gJnN0cmVhbWVyX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc3RyZWFtZXJfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmc3RyZWFtZXJfY2hhbmdlX210dTsKLQlkZXYtPnN0b3AgPSAmc3RyZWFtZXJfY2xvc2U7Ci0jaWYgU1RSRUFNRVJfSU9DVEwKLQlkZXYtPmRvX2lvY3RsID0gJnN0cmVhbWVyX2lvY3RsOwotI2Vsc2UKLQlkZXYtPmRvX2lvY3RsID0gTlVMTDsKLSNlbmRpZgotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnN0cmVhbWVyX3NldF9yeF9tb2RlOwotCWRldi0+Z2V0X3N0YXRzID0gJnN0cmVhbWVyX2dldF9zdGF0czsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5uZXRkZXZfb3BzID0gJnN0cmVhbWVyX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJZGV2LT5iYXNlX2FkZHI9cGlvX3N0YXJ0OwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CkBAIC02MTYsOCArNjE2LDYgQEAKIAlwcmludGsoIlNJU1IgTWFzayA9ICUwNHhcbiIsIHJlYWR3KHN0cmVhbWVyX21taW8gKyBTSVNSX01BU0spKTsKICNlbmRpZgogCWRvIHsKLQkJaW50IGk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IFNSQl9DT01NQU5EX1NJWkU7IGkgKz0gMikgewogCQkJd3JpdGV3KDAsIHN0cmVhbWVyX21taW8gKyBMQVBESU5DKTsKIAkJfQpAQCAtOTM3LDcgKzkzNSw3IEBACiAJCQlpZiAoc2tiID09IE5VTEwpIAogCQkJewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IHBhY2tldCB0byB1cHBlciBsYXllcnMuIFxuIiwJZGV2LT5uYW1lKTsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9IGVsc2UgewkvKiB3ZSBhbGxvY2F0ZWQgYW4gc2tiIE9LICovCiAJCQkJaWYgKGJ1ZmZlcl9jbnQgPT0gMSkgewogCQkJCQkvKiByZWxlYXNlIHRoZSBETUEgbWFwcGluZyAqLwpAQCAtMTAwOSw4ICsxMDA3LDggQEAKIAkJCQkJLyogc2VuZCB1cCB0byB0aGUgcHJvdG9jb2wgKi8KIAkJCQkJbmV0aWZfcngoc2tiKTsKIAkJCQl9Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMucnhfcGFja2V0cysrOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAkJCX0JLyogaWYgc2tiID09IG51bGwgKi8KIAkJfQkJLyogZW5kIHJlY2VpdmVkIHdpdGhvdXQgZXJyb3JzICovCiAKQEAgLTEwNTMsOCArMTA1MSw4IEBACiAJCQkJd2hpbGUoc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1soc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyArIDEpICYgKFNUUkVBTUVSX1RYX1JJTkdfU0laRSAtIDEpXS5zdGF0dXMpIHsKIAkJCQlzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzID0gKHN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgKyAxKSAmIChTVFJFQU1FUl9UWF9SSU5HX1NJWkUgLSAxKTsKIAkJCQlzdHJlYW1lcl9wcml2LT5mcmVlX3R4X3JpbmdfZW50cmllcysrOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnR4X2J5dGVzICs9IHN0cmVhbWVyX3ByaXYtPnR4X3Jpbmdfc2tiW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW47Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19za2Jbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShzdHJlYW1lcl9wcml2LT50eF9yaW5nX3NrYltzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXSk7CiAJCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfdHhfcmluZ1tzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS5idWZmZXIgPSAweGRlYWRiZWVmOwogCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3R4X3Jpbmdbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10uc3RhdHVzID0gMDsKQEAgLTE0ODQsMTMgKzE0ODIsNiBAQAogCX0JCQkvKiBzd2l0Y2ggc3JiWzBdICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RyZWFtZXJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHN0cmVhbWVyX3ByaXZhdGUgKnN0cmVhbWVyX3ByaXY7Ci0Jc3RyZWFtZXJfcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCmluZGV4IDEzY2NlZTYuLjNjNThkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCkBAIC0yOTksNyArMjk5LDYgQEAKIAlpbnQgdHhfcmluZ19mcmVlLCB0eF9yaW5nX2xhc3Rfc3RhdHVzLCByeF9yaW5nX2xhc3RfcmVjZWl2ZWQsCiAJICAgIGZyZWVfdHhfcmluZ19lbnRyaWVzOwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RyZWFtZXJfc3RhdHM7CiAJX191MTYgc3RyZWFtZXJfbGFuX3N0YXR1czsKIAlfX3U4IHN0cmVhbWVyX3Jpbmdfc3BlZWQ7CiAJX191MTYgcGt0X2J1Zl9zejsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCmluZGV4IDkxN2I0ZDIuLjE5MzMwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwpAQCAtNjkyLDggKzY5Miw2IEBACiAJCiAJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIi0tLS0tLS1cbiIpOwogCWlmIChjdXJjYXJkKSB7Ci0JCXN0cnVjdCBuZXRfbG9jYWwgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJDYXJkIFJldmlzaW9uOiAlZFxuIiwgY3VyY2FyZC0+Y2FyZHJldik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJSQU0gU2l6ZTogJWRrYlxuIiwgY3VyY2FyZC0+cmFtc2l6ZSk7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJDYWJsZSB0eXBlOiAlc1xuIiwgKGN1cmNhcmQtPmNhYmxldHlwZSk/IlNUUC9EQjkiOiJVVFAvUkotNDUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IGVjYjVjN2MuLmQwNjhhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiBzdGF0aWMgdm9pZCBvbHltcGljX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgb2x5bXBpY19mcmVlbWVtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgIAogc3RhdGljIGlycXJldHVybl90IG9seW1waWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBvbHltcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgOyAKIHN0YXRpYyB2b2lkIG9seW1waWNfYXJiX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwpAQCAtMTk1LDYgKzE5NCwxNSBAQAogc3RhdGljIHZvaWQgb2x5bXBpY19hc2JfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAKIHN0YXRpYyBpbnQgb2x5bXBpY19wcm9jX2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpIDsgCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb2x5bXBpY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBvbHltcGljX29wZW4sCisJLm5kb19zdG9wCQk9IG9seW1waWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG9seW1waWNfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gb2x5bXBpY19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gb2x5bXBpY19zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG9seW1waWNfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgb2x5bXBpY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2IDsgCkBAIC0yNTMsMTQgKzI2MSw3IEBACiAJCWdvdG8gb3BfZnJlZV9pb21hcDsKIAl9CQkJCQogCi0JZGV2LT5vcGVuPSZvbHltcGljX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQ9Jm9seW1waWNfeG1pdDsKLQlkZXYtPmNoYW5nZV9tdHU9Jm9seW1waWNfY2hhbmdlX210dTsKLQlkZXYtPnN0b3A9Jm9seW1waWNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bD1OVUxMOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0PSZvbHltcGljX3NldF9yeF9tb2RlOwotCWRldi0+Z2V0X3N0YXRzPSZvbHltcGljX2dldF9zdGF0cyA7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3M9Jm9seW1waWNfc2V0X21hY19hZGRyZXNzIDsgIAorCWRldi0+bmV0ZGV2X29wcyA9ICZvbHltcGljX25ldGRldl9vcHM7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LGRldikgOyAKQEAgLTY5OCw3ICs2OTksNiBAQAogCWlmIChvbHltcGljX3ByaXYtPm9seW1waWNfbmV0d29ya19tb25pdG9yKSB7IAogCQl1OCBfX2lvbWVtICpvYXQ7CiAJCXU4IF9faW9tZW0gKm9wdDsKLQkJaW50IGk7CiAJCXU4IGFkZHJbNl07CiAJCW9hdCA9IChvbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgb2x5bXBpY19wcml2LT5vbHltcGljX2FkZHJfdGFibGVfYWRkcik7CiAJCW9wdCA9IChvbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgb2x5bXBpY19wcml2LT5vbHltcGljX3Bhcm1zX2FkZHIpOwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCQkJfSAKIAkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCArPSBpIDsgCiAJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgJj0gKE9MWU1QSUNfUlhfUklOR19TSVpFIC0xKSA7IAotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9lcnJvcnMrKzsJIAorCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQl9IGVsc2UgewkKIAkJCQogCQkJCWlmIChidWZmZXJfY250ID09IDEpIHsKQEAgLTc5Niw3ICs3OTYsNyBAQAogCiAJCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IHBhY2tldCB0byB1cHBlciBsYXllcnMuIFxuIixkZXYtPm5hbWUpIDsKLQkJCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X2Ryb3BwZWQrKyA7IAorCQkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCQkJLyogVXBkYXRlIGNvdW50ZXJzIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHRyYW5zZmVyIHRoZSBmcmFtZSAqLwogCQkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCArPSBpIDsgCiAJCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICY9IChPTFlNUElDX1JYX1JJTkdfU0laRSAtMSkgOyAgCkBAIC04NjIsOCArODYyLDggQEAKIAkJCQkJCXNrYi0+cHJvdG9jb2wgPSB0cl90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkJCQkJbmV0aWZfcngoc2tiKSA7IAogCQkJCQl9IAotCQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfcGFja2V0cysrIDsgCi0JCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGggOyAKKwkJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKysgOworCQkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCA7CiAJCQkJfSAvKiBpZiBza2IgPT0gbnVsbCAqLwogCQkJfSAvKiBJZiBzdGF0dXMgJiAweDNiICovCiAKQEAgLTk3MSw4ICs5NzEsOCBAQAogCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cysrOwogCQkJCW9seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyAmPSAoT0xZTVBJQ19UWF9SSU5HX1NJWkUtMSk7CiAJCQkJb2x5bXBpY19wcml2LT5mcmVlX3R4X3JpbmdfZW50cmllcysrOwotCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy50eF9ieXRlcyArPSBvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKLQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMudHhfcGFja2V0cysrIDsgCisJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbjsKKwkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKyA7CiAJCQkJcGNpX3VubWFwX3NpbmdsZShvbHltcGljX3ByaXYtPnBkZXYsIAogCQkJCQlsZTMyX3RvX2NwdShvbHltcGljX3ByaXYtPm9seW1waWNfdHhfcmluZ1tvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLmJ1ZmZlciksIAogCQkJCQlvbHltcGljX3ByaXYtPnR4X3Jpbmdfc2tiW29seW1waWNfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10tPmxlbixQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTEzNDQsMTMgKzEzNDQsNiBAQAogCiB9IAogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBvbHltcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvbHltcGljX3ByaXZhdGUgKm9seW1waWNfcHJpdiA7Ci0Jb2x5bXBpY19wcml2PW5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzOyAKLX0KLQogc3RhdGljIGludCBvbHltcGljX3NldF9tYWNfYWRkcmVzcyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikgCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkciA9IGFkZHIgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oCmluZGV4IDEwZmJiYTAuLjMwNjMxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaApAQCAtMjc1LDcgKzI3NSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3Jpbmdfc2tiW09MWU1QSUNfVFhfUklOR19TSVpFXSwgKnJ4X3Jpbmdfc2tiW09MWU1QSUNfUlhfUklOR19TSVpFXTsJCiAJaW50IHR4X3JpbmdfZnJlZSwgdHhfcmluZ19sYXN0X3N0YXR1cywgcnhfcmluZ19sYXN0X3JlY2VpdmVkLHJ4X3N0YXR1c19sYXN0X3JlY2VpdmVkLCBmcmVlX3R4X3JpbmdfZW50cmllczsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG9seW1waWNfc3RhdHMgOwogCXUxNiBvbHltcGljX2xhbl9zdGF0dXMgOwogCXU4IG9seW1waWNfcmluZ19zcGVlZCA7CiAJdTE2IHBrdF9idWZfc3ogOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggNTBlYjI5Yy4uOWQ3ZGIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTYxLDcgKzYxLDggQEAKIAogI2luY2x1ZGUgInNtY3RyLmgiICAgICAgICAgICAgICAgLyogT3VyIFN0dWZmICovCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJzbWN0ci5jOiB2MS40IDcvMTIvMDAgYnkganNjaGxzdEBzYW1iYS5vcmdcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CisJS0VSTl9JTkZPICJzbWN0ci5jOiB2MS40IDcvMTIvMDAgYnkganNjaGxzdEBzYW1iYS5vcmdcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBjYXJkbmFtZVtdID0gInNtY3RyIjsKIAogCkBAIC00MzkyLDUyICs0MzkzLDQyIEBACiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjYXNlIFJJTkdfUkVDT1ZFUlk6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmluZyBSZWNvdmVyeVxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFJJTkdfUkVDT1ZFUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU0lOR0xFX1NUQVRJT046CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU2luZ2xlIFN0YXRpbm9uXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gU0lOR0xFX1NUQVRJT047CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgQ09VTlRFUl9PVkVSRkxPVzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VudGVyIE92ZXJmbG93XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gQ09VTlRFUl9PVkVSRkxPVzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBSRU1PVkVfUkVDRUlWRUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUmVtb3ZlIFJlY2VpdmVkXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gUkVNT1ZFX1JFQ0VJVkVEOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIEFVVE9fUkVNT1ZBTF9FUlJPUjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvIFJlbW92ZSBFcnJvclxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IEFVVE9fUkVNT1ZBTF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBMT0JFX1dJUkVfRkFVTFQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTG9iZSBXaXJlIEZhdWx0XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gTE9CRV9XSVJFX0ZBVUxUOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFRSQU5TTUlUX0JFQUNPTjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBUcmFuc21pdCBCZWFjb25cbiIsIGRldi0+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+aW9hZGRyKTsKQEAgLTE4MDYsMTAgKzE4NjAsMTAgQEAKIAogCWlvd3JpdGUzMihpbnRyX3N0YXR1cywgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9TVEFUVVMpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQlpb3dyaXRlMzIoVFlQSE9PTl9JTlRSX0FMTCwgaW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9NQVNLKTsKIAkJdHlwaG9vbl9wb3N0X3BjaV93cml0ZXMoaW9hZGRyKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE5NDQsNyArMTk5OCw3IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCiAJSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURSk7Ci0JeHBfY21kLnBhcm0xID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfUF84MDIxUSk7CisJeHBfY21kLnBhcm0xID0gY3B1X3RvX2xlMTYoRVRIX1BfODAyMVEpOwogCWVyciA9IHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CiAJaWYoZXJyIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CkBAIC0yMDg2LDYgKzIxNDAsMTAgQEAKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnI7CiAKKwllcnIgPSB0eXBob29uX3JlcXVlc3RfZmlybXdhcmUodHApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJZXJyID0gdHlwaG9vbl93YWtldXAodHAsIFdhaXRTbGVlcCk7CiAJaWYoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gd2FrZXVwIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTI2MjQsNiArMjY4Miw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHR5cGhvb25fY2xlYW51cCh2b2lkKQogeworCWlmICh0eXBob29uX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHR5cGhvb25fZncpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdHlwaG9vbl9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmggYi9kcml2ZXJzL25ldC90eXBob29uLmgKaW5kZXggZGQ3MDIyYy4uNjczZmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaApAQCAtMTc0LDE4ICsxNzQsMTggQEAKIAkJdTY0IHR4X2FkZHI7CS8qIG9wYXF1ZSBmb3IgaGFyZHdhcmUsIGZvciBUWF9ERVNDICovCiAJfTsKIAlfX2xlMzIgcHJvY2Vzc0ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RYX1BGX05PX0NSQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9TRUdNRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMTApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSVBTRUMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1BSSU9SSVRZCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9QQURfRlJBTUUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9SRVNFUlZFRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwZTAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDBmZmZmMDAwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ZjAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfTk9fQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQX0NIS1NVTQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlNFUlRfVkxBTgljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fUFJJT1JJVFkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfUEFEX0ZSQU1FCQljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1JFU0VSVkVECQljcHVfdG9fbGUzMigweDAwMDAwZTAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1ZMQU5fTUFTSwkJY3B1X3RvX2xlMzIoMHgwZmZmZjAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlRFUk5BTAkJY3B1X3RvX2xlMzIoMHhmMDAwMDAwMCkKICNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1RBR19TSElGVAkxMgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTIwMyw4ICsyMDMsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgbXNzX2ZsYWdzOwotI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFRZUEhPT05fVFNPX0xBU1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgyMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19GSVJTVAkJY3B1X3RvX2xlMTYoMHgxMDAwKQorI2RlZmluZSBUWVBIT09OX1RTT19MQVNUCQljcHVfdG9fbGUxNigweDIwMDApCiAJX19sZTMyIHJlc3BBZGRyTG87CiAJX19sZTMyIGJ5dGVzVHg7CiAJX19sZTMyIHN0YXR1czsKQEAgLTIyMiw4ICsyMjIsOCBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgaXBzZWNGbGFnczsKLSNkZWZpbmUgVFlQSE9PTl9JUFNFQ19HRU5fSVYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0lQU0VDX0dFTl9JVgljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fSVBTRUNfVVNFX0lWCWNwdV90b19sZTE2KDB4MDAwMSkKIAlfX2xlMzIgc2ExOwogCV9fbGUzMiBzYTI7CiAJX19sZTMyIHJlc2VydmVkOwpAQCAtMjQ4LDQxICsyNDgsNDEgQEAKIAl1MzIgYWRkcjsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRyICovCiAJdTMyIGFkZHJIaTsJLyogb3BhcXVlLCBjb21lcyBmcm9tIHZpcnRBZGRySGkgKi8KIAlfX2xlMzIgcnhTdGF0dXM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0lOVEVSTkFMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9CQURfU1NECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX1JVTlQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX09WRVJTSVpFCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0FMSUdOCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDYpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fVU5LTk9XTglfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19JUFgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9WTEFOCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19GQUlMCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwODApCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfSU5URVJOQUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0ZJRk9fVU5ERVJSVU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQkFEX1NTRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfUlVOVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQ1JDCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9PVkVSU0laRQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQUxJR04JCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0RSSUJCTEUJCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFlQSE9PTl9SWF9QUk9UT19VTktOT1dOCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVAJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVBYCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX1ZMQU4JCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0lQX0ZSQUcJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFRZUEhPT05fUlhfSVBTRUMJCWNwdV90b19sZTMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0ZBSUwJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19GQUlMCQljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfRkFJTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9UQ1BfQ0hLX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwNDAwKQogCV9fbGUxNiBmaWx0ZXJSZXN1bHRzOwotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4N2ZmZikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX01BU0sJCWNwdV90b19sZTE2KDB4N2ZmZikKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJFRAkJY3B1X3RvX2xlMTYoMHg4MDAwKQogCV9fbGUxNiBpcHNlY1Jlc3VsdHM7Ci0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9HT09ECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjApCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9VTktOT1dOX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FU1BfRk9STUFUX0VSUglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9HT09ECWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfR09PRAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfR09PRAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9GQUlMCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9BSF9GQUlMCWNwdV90b19sZTE2KDB4MDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfRkFJTAljcHVfdG9fbGUxNigweDAwODApCisjZGVmaW5lIFRZUEhPT05fUlhfVU5LTk9XTl9TQQkJY3B1X3RvX2xlMTYoMHgwMTAwKQorI2RlZmluZSBUWVBIT09OX1JYX0VTUF9GT1JNQVRfRVJSCWNwdV90b19sZTE2KDB4MDIwMCkKIAlfX2JlMzIgdmxhblRhZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMTgsMzEgKzMxOCwzMSBAQAogCXU4ICBmbGFnczsKIAl1OCAgbnVtRGVzYzsKIAlfX2xlMTYgY21kOwotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9FTkFCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRU5BQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRElTQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfU1RBVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA3KQotI2RlZmluZSBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMWEpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDFiKQotI2RlZmluZSBUWVBIT09OX0NNRF9HT1RPX1NMRUVQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyMykKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDI1KQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUFDX0FERFJFU1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjcpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyYikKLSNkZWZpbmUgVFlQSE9PTl9DTURfQ1JFQVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfREVMRVRFX1NBCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAzNSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0MykKLSNkZWZpbmUgVFlQSE9PTl9DTURfSVJRX0NPQUxFU0NFX0NUUkwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0VOQUJMRV9XQUtFX0VWRU5UUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA0OSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNGYpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0hFTExPX1JFU1AJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDU3KQotI2RlZmluZSBUWVBIT09OX0NNRF9IQUxUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA1ZCkKLSNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDVlKQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfSVBTRUNfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDY3KQotI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfQ01EX0xWTAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNjkpCisjZGVmaW5lIFRZUEhPT05fQ01EX1RYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX0NNRF9UWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JYX0VOQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX0NNRF9SWF9ESVNBQkxFCQljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9SWF9GSUxURVIJY3B1X3RvX2xlMTYoMHgwMDA1KQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1NUQVRTCQljcHVfdG9fbGUxNigweDAwMDcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1hDVlJfU0VMRUNUCQljcHVfdG9fbGUxNigweDAwMTMpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQVhfUEtUX1NJWkUJY3B1X3RvX2xlMTYoMHgwMDFhKQorI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01FRElBX1NUQVRVUwljcHVfdG9fbGUxNigweDAwMWIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dPVE9fU0xFRVAJCWNwdV90b19sZTE2KDB4MDAyMykKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAyNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BQ19BRERSRVNTCWNwdV90b19sZTE2KDB4MDAyNikKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NQUNfQUREUkVTUwljcHVfdG9fbGUxNigweDAwMjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX1ZMQU5fVFlQRV9XUklURQljcHVfdG9fbGUxNigweDAwMmIpCisjZGVmaW5lIFRZUEhPT05fQ01EX0NSRUFURV9TQQkJY3B1X3RvX2xlMTYoMHgwMDM0KQorI2RlZmluZSBUWVBIT09OX0NNRF9ERUxFVEVfU0EJCWNwdV90b19sZTE2KDB4MDAzNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9WRVJTSU9OUwljcHVfdG9fbGUxNigweDAwNDMpCisjZGVmaW5lIFRZUEhPT05fQ01EX0lSUV9DT0FMRVNDRV9DVFJMCWNwdV90b19sZTE2KDB4MDA0NSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTCWNwdV90b19sZTE2KDB4MDA0OSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX09GRkxPQURfVEFTS1MJY3B1X3RvX2xlMTYoMHgwMDRmKQorI2RlZmluZSBUWVBIT09OX0NNRF9IRUxMT19SRVNQCQljcHVfdG9fbGUxNigweDAwNTcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0hBTFQJCWNwdV90b19sZTE2KDB4MDA1ZCkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9JUFNFQ19JTkZPCWNwdV90b19sZTE2KDB4MDA1ZSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0lQU0VDX0VOQUJMRQljcHVfdG9fbGUxNigweDAwNjcpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9DTURfTFZMCQljcHVfdG9fbGUxNigweDAwNjkpCiAJdTE2IHNlcU5vOwogCV9fbGUxNiBwYXJtMTsKIAlfX2xlMzIgcGFybTI7CkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCiAvKiBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSIGZpbHRlciBiaXRzIChjbWQucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfRElSRUNURUQJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9QUk9NSVNDT1VTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA4KQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0FMTF9NQ0FTVAljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVAljcHVfdG9fbGUxNigweDAwMDQpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVMJY3B1X3RvX2xlMTYoMHgwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQ0FTVF9IQVNICWNwdV90b19sZTE2KDB4MDAxMCkKIAogLyogVFlQSE9PTl9DTURfUkVBRF9TVEFUUyByZXNwb25zZSBmb3JtYXQKICAqLwpAQCAtNDE2LDQwICs0MTYsNDAgQEAKIAlfX2xlMzIgcnhPdmVyZmxvdzsKIAlfX2xlMzIgcnhGaWx0ZXJlZDsKIAlfX2xlMzIgbGlua1N0YXR1czsKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfR09PRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKQotI2RlZmluZSBUWVBIT09OX0xJTktfQkFECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xMDBNQlBTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fTElOS18xME1CUFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0ZVTExfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0hBTEZfRFVQTEVYCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX1NUQVRfTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fTElOS19CQUQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fTElOS19TUEVFRF9NQVNLCQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX0xJTktfMTAwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwTUJQUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0RVUExFWF9NQVNLCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fTElOS19GVUxMX0RVUExFWAljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX0xJTktfSEFMRl9EVVBMRVgJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKIAlfX2xlMzIgdW51c2VkMjsKIAlfX2xlMzIgdW51c2VkMzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVCB4Y3ZyIHZhbHVlcyAocmVzcC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTBGVUxMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwSEFMRglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fWENWUl9BVVRPTkVHCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTBIQUxGCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwRlVMTAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMDBIQUxGCWNwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEZVTEwJY3B1X3RvX2xlMTYoMHgwMDAzKQorI2RlZmluZSBUWVBIT09OX1hDVlJfQVVUT05FRwljcHVfdG9fbGUxNigweDAwMDQpCiAKIC8qIFRZUEhPT05fQ01EX1JFQURfTUVESUFfU1RBVFVTIChyZXNwLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DUkNfU1RSSVBfRElTQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NPTExJU0lPTl9ERVRFQ1QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMTApCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDIwKQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfUE9MQVJJVFlfUkVWCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDQwMCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX05PX0xJTksJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwODAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ1JDX1NUUklQX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ09MTElTSU9OX0RFVEVDVAljcHVfdG9fbGUxNigweDAwMTApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DQVJSSUVSX1NFTlNFCWNwdV90b19sZTE2KDB4MDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX1BPTEFSSVRZX1JFVgkJY3B1X3RvX2xlMTYoMHgwNDAwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfTk9fTElOSwkJY3B1X3RvX2xlMTYoMHgwODAwKQogCiAvKiBUWVBIT09OX0NNRF9TRVRfTVVMVElDQVNUX0hBU0ggZW5hYmxlIHZhbHVlcyAoY21kLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9ESVNBQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfU0VUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMikKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0RJU0FCTEUJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRU5BQkxFCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX1NFVAkJY3B1X3RvX2xlMTYoMHgwMDAyKQogCiAvKiBUWVBIT09OX0NNRF9DUkVBVEVfU0EgZGVzY3JpcHRvciBhbmQgc2V0dGluZ3MKICAqLwpAQCAtNDU5LDkgKzQ1OSw5IEBACiAJdTE2IGNtZDsKIAl1MTYgc2VxTm87CiAJdTE2IG1vZGU7Ci0jZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0FICQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0VTUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9OVUxMCQljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9BSAkJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1NBX01PREVfRVNQCQljcHVfdG9fbGUxNigweDAwMDIpCiAJdTggIGhhc2hGbGFnczsKICNkZWZpbmUgVFlQSE9PTl9TQV9IQVNIX0VOQUJMRQkJMHgwMQogI2RlZmluZSBUWVBIT09OX1NBX0hBU0hfU0hBMQkJMHgwMgpAQCAtNDkzLDIyICs0OTMsMjIgQEAKIC8qIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTIGJpdHMgKGNtZC5wYXJtMiAoVHgpICYgY21kLnBhcm0zIChSeCkpCiAgKiBUaGlzIGlzIGFsbCBmb3IgSVB2NC4KICAqLwotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUFNFQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfREhDUF9QUkVWRU5UCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1ZMQU4JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfU0VHTUVOVAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAyMDApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9UQ1BfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9VRFBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUF9DSEtTVU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfQkNBU1RfVEhST1RUTEUJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0RIQ1BfUFJFVkVOVAljcHVfdG9fbGUzMigweDAwMDAwMDQwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVkxBTgkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0ZJTFRFUklORwljcHVfdG9fbGUzMigweDAwMDAwMTAwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX1NFR01FTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCkKIAogLyogVFlQSE9PTl9DTURfRU5BQkxFX1dBS0VfRVZFTlRTIGJpdHMgKGNtZC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9MSU5LX0VWRU5UCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9JQ01QX0VDSE8JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwNCkKLSNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA4KQorI2RlZmluZSBUWVBIT09OX1dBS0VfTUFHSUNfUEtUCQljcHVfdG9fbGUxNigweDAxKQorI2RlZmluZSBUWVBIT09OX1dBS0VfTElOS19FVkVOVAkJY3B1X3RvX2xlMTYoMHgwMikKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0lDTVBfRUNITwkJY3B1X3RvX2xlMTYoMHgwNCkKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0FSUAkJY3B1X3RvX2xlMTYoMHgwOCkKIAogLyogVGhlc2UgYXJlIHVzZWQgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW1hZ2Ugb24gdGhlIE5JQwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCAxZjYxZTQyLi5hMTEwMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAogI3VuZGVmIERFQlVHCiAKQEAgLTMyNDksNyArMzI0OSw3IEBACiAJCWhvd21hbnkgKz0gdWNjX2dldGhfcngodWdldGgsIGksIGJ1ZGdldCAtIGhvd21hbnkpOwogCiAJaWYgKGhvd21hbnkgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXNldGJpdHMzMih1Z2V0aC0+dWNjZi0+cF91Y2NtLCBVQ0NFX1JYX0VWRU5UUyk7CiAJfQogCkBAIC0zMjgwLDEwICszMjgwLDEwIEBACiAKIAkvKiBjaGVjayBmb3IgcmVjZWl2ZSBldmVudHMgdGhhdCByZXF1aXJlIHByb2Nlc3NpbmcgKi8KIAlpZiAodWNjZSAmIFVDQ0VfUlhfRVZFTlRTKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ1Z2V0aC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdWdldGgtPm5hcGkpKSB7CiAJCQl1Y2NtICY9IH5VQ0NFX1JYX0VWRU5UUzsKIAkJCW91dF9iZTMyKHVjY2YtPnBfdWNjbSwgdWNjbSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ1Z2V0aC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnVnZXRoLT5uYXBpKTsKIAkJfQogCX0KIApAQCAtMzUwMSw2ICszNTAxLDIwIEBACiAJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdWNjX2dldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdWNjX2dldGhfb3BlbiwKKwkubmRvX3N0b3AJCT0gdWNjX2dldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHVjY19nZXRoX3N0YXJ0X3htaXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdWNjX2dldGhfc2V0X211bHRpLAorCS5uZG9fdHhfdGltZW91dAkJPSB1Y2NfZ2V0aF90aW1lb3V0LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB1Y2NfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCB1Y2NfZ2V0aF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlKiBvZmRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7CkBAIC0zNjQxLDcgKzM2NTUsNyBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC0xOwogCi0JCXVlY19tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKKwkJZnNsX3BxX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOwogCQlzbnByaW50Zih1Z19pbmZvLT5waHlfYnVzX2lkLCBzaXplb2YodWdfaW5mby0+cGh5X2J1c19pZCksCiAJCQkiJXM6JTAyeCIsIGJ1c19uYW1lLCAqcHJvcCk7CiAJfQpAQCAtMzcxNiwxOSArMzczMCwxMSBAQAogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwogCXVlY19zZXRfZXRodG9vbF9vcHMoZGV2KTsKLQlkZXYtPm9wZW4gPSB1Y2NfZ2V0aF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdWNjX2dldGhfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB1Y2NfZ2V0aF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ1Y2NfZ2V0aF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCUlOSVRfV09SSygmdWdldGgtPnRpbWVvdXRfd29yaywgdWNjX2dldGhfdGltZW91dF93b3JrKTsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZ1Z2V0aC0+bmFwaSwgdWNjX2dldGhfcG9sbCwgVUNDX0dFVEhfREVWX1dFSUdIVCk7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHVjY19uZXRwb2xsOwotI2VuZGlmCi0JZGV2LT5zdG9wID0gdWNjX2dldGhfY2xvc2U7Ci0vLyAgICBkZXYtPmNoYW5nZV9tdHUgPSB1Y2NfZ2V0aF9jaGFuZ2VfbXR1OwogCWRldi0+bXR1ID0gMTUwMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHVjY19nZXRoX3NldF9tdWx0aTsKIAogCXVnZXRoLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcubXNnX2VuYWJsZSwgVUdFVEhfTVNHX0RFRkFVTFQpOwogCXVnZXRoLT5waHlfaW50ZXJmYWNlID0gcGh5X2ludGVyZmFjZTsKQEAgLTM3ODksMTEgKzM3OTUsNiBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSB1ZWNfbWRpb19pbml0KCk7Ci0KLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKG5ldGlmX21zZ19kcnYoJmRlYnVnKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAidWNjX2dldGg6ICIgRFJWX0RFU0MgIlxuIik7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKQEAgLTM4MDIsMTYgKzM4MDMsMTIgQEAKIAogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKIAotCWlmIChyZXQpCi0JCXVlY19tZGlvX2V4aXQoKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1Y2NfZ2V0aF9leGl0KHZvaWQpCiB7CiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVjY19nZXRoX2RyaXZlcik7Ci0JdWVjX21kaW9fZXhpdCgpOwogfQogCiBtb2R1bGVfaW5pdCh1Y2NfZ2V0aF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCmluZGV4IDYxMWJkZWYuLmUzYTI1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaApAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS91Y2MuaD4KICNpbmNsdWRlIDxhc20vdWNjX2Zhc3QuaD4KIAotI2luY2x1ZGUgInVjY19nZXRoX21paS5oIgotCiAjZGVmaW5lIERSVl9ERVNDICJRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIgogI2RlZmluZSBEUlZfTkFNRSAidWNjX2dldGgiCiAjZGVmaW5lIERSVl9WRVJTSU9OICIxLjEiCkBAIC0xODQsNiArMTgyLDE4IEBACiAjZGVmaW5lIFVDQ0VfUlhfRVZFTlRTICAoVUNDRV9SWEYgfCBVQ0NfR0VUSF9VQ0NFX0JTWSkKICNkZWZpbmUgVUNDRV9UWF9FVkVOVFMJKFVDQ0VfVFhCIHwgVUNDX0dFVEhfVUNDRV9UWEUpCiAKKy8qIFRCSSBkZWZpbmVzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9DUgkJMHgwMAkvKiBDb250cm9sICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9TUgkJMHgwMQkvKiBTdGF0dXMgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOQQkweDA0CS8qIEFOIGFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOTFBCUEEJMHgwNQkvKiBBTiBsaW5rIHBhcnRuZXIgYmFzZSBwYWdlIGFiaWxpdHkgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FORVgJMHgwNgkvKiBBTiBleHBhbnNpb24gKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOTlBUCTB4MDcJLyogQU4gbmV4dCBwYWdlIHRyYW5zbWl0ICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9BTkxQQU5QCTB4MDgJLyogQU4gbGluayBwYXJ0bmVyIGFiaWxpdHkgbmV4dCBwYWdlICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9FWFNUCTB4MEYJLyogRXh0ZW5kZWQgc3RhdHVzICovCisjZGVmaW5lCUVORVRfVEJJX01JSV9KRAkJMHgxMAkvKiBKaXR0ZXIgZGlhZ25vc3RpY3MgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX1RCSUNPTgkweDExCS8qIFRCSSBjb250cm9sICovCisKIC8qIFVDQyBHRVRIIE1BQ0NGRzEgKE1BQyBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIpICovCiAjZGVmaW5lIE1BQ0NGRzFfRkxPV19SWCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCS8qIEZsb3cgQ29udHJvbAogCQkJCQkJCQkgICBSeCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCmluZGV4IDY4YTdmNTQuLmE3NTViZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCiAKIHN0YXRpYyBjaGFyIGh3X3N0YXRfZ3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0gewogCSJ0eC02NC1mcmFtZXMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkYTRlZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMKLSAqCi0gKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgotICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdWNjLmg+Ci0KLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKLSNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgotCi0jZGVmaW5lIERFQlVHCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgdmRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgLCBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHZkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotI2RlZmluZSBNSUlfRFJWX0RFU0MgIlFFIFVDQyBFdGhlcm5ldCBDb250cm9sbGVyIE1JSSBCdXMiCi0jZGVmaW5lIE1JSV9EUlZfTkFNRSAiZnNsLXVlY19tZGlvIgotCi0vKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGZvciB0aGlzIGRldmljZSB0byB0aGUgcmVnaXN0ZXIgYXQgcmVnbnVtLCAqLwotLyogd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgaXQgcmV0dXJucy4gIEFsbCBQSFkgKi8KLS8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgbWFzdGVyIFVFQyBNSUlNIHJlZ3MgKi8KLWludCB1ZWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsCi0JCSAobWlpX2lkIDw8IE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQpIHwgcmVnbnVtKTsKLQotCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQ29udHJvbCBSZWdpc3RlciB3aXRoIHRoZSB2YWx1ZSAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7Ci0KLQkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpKSAmIE1JSU1JTkRfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogUmVhZHMgZnJvbSByZWdpc3RlciByZWdudW0gaW4gdGhlIFBIWSBmb3IgZGV2aWNlIGRldiwgKi8KLS8qIHJldHVybmluZyB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgKi8KLS8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgVFNFQzEgTUlJTSByZWdzICovCi1pbnQgdWVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQotewotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQl1MTYgdmFsdWU7Ci0KLQkvKiBTZXR0aW5nIHVwIHRoZSBNSUkgTWFuZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwKLQkJIChtaWlfaWQgPDwgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCkgfCByZWdudW0pOwotCi0JLyogQ2xlYXIgbWlpbWNvbSwgcGVyZm9ybSBhbiBNSUkgbWFuYWdlbWVudCByZWFkIGN5Y2xlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIDApOwotCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCBNSUlNQ09NX1JFQURfQ1lDTEUpOwotCi0JLyogV2FpdCB0aWxsIE1JSSBtYW5hZ2VtZW50IHdyaXRlIGlzIGNvbXBsZXRlICovCi0Jd2hpbGUgKChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSkgJiAoTUlJTUlORF9CVVNZIHwgTUlJTUlORF9OT1RfVkFMSUQpKQotCQljcHVfcmVsYXgoKTsKLQotCS8qIFJlYWQgTUlJIG1hbmFnZW1lbnQgc3RhdHVzICAqLwotCXZhbHVlID0gaW5fYmUzMigmcmVncy0+bWlpbXN0YXQpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KLXN0YXRpYyBpbnQgdWVjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0JaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOwotCi0JbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfUkVTRVRfTUFOQUdFTUVOVCk7Ci0KLQkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMTIpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCi0JCWNwdV9yZWxheCgpOwotCi0JbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQlpZiAodGltZW91dCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLCBidXMtPm5hbWUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHVlY19tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGUsICp0ZW1wbnAgPSBOVUxMOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMOwotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwotCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0JaW50IGssIGVyciA9IDA7Ci0KLQluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJVQ0MgRXRoZXJuZXQgQ29udHJvbGxlciBNSUkgQnVzIjsKLQluZXdfYnVzLT5yZWFkID0gJnVlY19tZGlvX3JlYWQ7Ci0JbmV3X2J1cy0+d3JpdGUgPSAmdWVjX21kaW9fd3JpdGU7Ci0JbmV3X2J1cy0+cmVzZXQgPSAmdWVjX21kaW9fcmVzZXQ7Ci0KLQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOwotCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7Ci0JaWYgKGVycikKLQkJZ290byByZWdfbWFwX2ZhaWw7Ci0KLQl1ZWNfbWRpb19idXNfbmFtZShuZXdfYnVzLT5pZCwgbnApOwotCi0JbmV3X2J1cy0+aXJxID0ga21hbGxvYygzMiAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChOVUxMID09IG5ld19idXMtPmlycSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIHJlZ19tYXBfZmFpbDsKLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykKLQkJbmV3X2J1cy0+aXJxW2tdID0gUEhZX1BPTEw7Ci0KLQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewotCQlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2hpbGQsIDApOwotCQlpZiAoaXJxICE9IE5PX0lSUSkgewotCQkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOwotCQkJbmV3X2J1cy0+aXJxWyppZF0gPSBpcnE7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwotCXJlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgc2l6ZW9mKHN0cnVjdCB1Y2NfbWlpX21uZykpOwotCi0JaWYgKE5VTEwgPT0gcmVncykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGlvcmVtYXBfZmFpbDsKLQl9Ci0KLQluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7Ci0KLQluZXdfYnVzLT5wYXJlbnQgPSBkZXZpY2U7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgbmV3X2J1cyk7Ci0KLQkvKiBSZWFkIE1JSSBtYW5hZ2VtZW50IG1hc3RlciBmcm9tIGRldmljZSB0cmVlICovCi0Jd2hpbGUgKCh0ZW1wbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZSh0ZW1wbnAsICJuZXR3b3JrIiwgInVjY19nZXRoIikpCi0JICAgICAgICE9IE5VTEwpIHsKLQkJc3RydWN0IHJlc291cmNlIHRlbXByZXM7Ci0KLQkJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZSh0ZW1wbnAsIDAsICZ0ZW1wcmVzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0KLQkJLyogaWYgb3VyIG1kaW8gcmVncyBmYWxsIHdpdGhpbiB0aGlzIFVDQyByZWdzIHJhbmdlICovCi0JCWlmICgocmVzLnN0YXJ0ID49IHRlbXByZXMuc3RhcnQpICYmCi0JCSAgICAocmVzLmVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKLQkJCS8qIHNldCB0aGlzIFVDQyB0byBiZSB0aGUgTUlJIG1hc3RlciAqLwotCQkJY29uc3QgdTMyICppZDsKLQotCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkodGVtcG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOwotCQkJaWYgKCFpZCkgewotCQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHRlbXBucCwgImRldmljZS1pZCIsIE5VTEwpOwotCQkJCWlmICghaWQpCi0JCQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0JCQl9Ci0KLQkJCXVjY19zZXRfcWVfbXV4X21paV9tbmcoKmlkIC0gMSk7Ci0KLQkJCS8qIGFzc2lnbiB0aGUgVEJJIGFuIGFkZHJlc3Mgd2hpY2ggd29uJ3QKLQkJCSAqIGNvbmZsaWN0IHdpdGggdGhlIFBIWXMgKi8KLQkJCW91dF9iZTMyKCZyZWdzLT51dGJpcGFyLCBVVEJJUEFSX0lOSVRfVEJJUEEpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCWlmICgwICE9IGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCSAgICAgICBuZXdfYnVzLT5uYW1lKTsKLQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotYnVzX3JlZ2lzdGVyX2ZhaWw6Ci0JaW91bm1hcChyZWdzKTsKLWlvcmVtYXBfZmFpbDoKLQlrZnJlZShuZXdfYnVzLT5pcnEpOwotcmVnX21hcF9mYWlsOgotCW1kaW9idXNfZnJlZShuZXdfYnVzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdWVjX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwotCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKLQotCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwotCi0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7Ci0KLQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilidXMtPnByaXYpOwotCWJ1cy0+cHJpdiA9IE5VTEw7Ci0JbWRpb2J1c19mcmVlKGJ1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdWVjX21kaW9fbWF0Y2hbXSA9IHsKLQl7Ci0JCS50eXBlID0gIm1kaW8iLAotCQkuY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aF9waHkiLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iLAotCX0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciB1ZWNfbWRpb19kcml2ZXIgPSB7Ci0JLm5hbWUJPSBNSUlfRFJWX05BTUUsCi0JLnByb2JlCT0gdWVjX21kaW9fcHJvYmUsCi0JLnJlbW92ZQk9IHVlY19tZGlvX3JlbW92ZSwKLQkubWF0Y2hfdGFibGUJPSB1ZWNfbWRpb19tYXRjaCwKLX07Ci0KLWludCBfX2luaXQgdWVjX21kaW9faW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVlY19tZGlvX2RyaXZlcik7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIF9faW5pdCB1Y2NfZ2V0aF9pbml0LCB0aGVyZWZvcmUgY2FuIG5vdCBiZSBfX2V4aXQgKi8KLXZvaWQgdWVjX21kaW9fZXhpdCh2b2lkKQotewotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZWNfbWRpb19kcml2ZXIpOwotfQotCi12b2lkIHVlY19tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0gICAgICAgIGNvbnN0IHUzMiAqcmVnOwotCi0gICAgICAgIHJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCi0gICAgICAgIHNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCV4IiwgbnAtPm5hbWUsIHJlZyA/ICpyZWcgOiAwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwY2Y4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmgKLSAqCi0gKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgotICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19VRUNfTUlJX0gKLSNkZWZpbmUgX19VRUNfTUlJX0gKLQotLyogVUNDIEdFVEggTUlJTUNGRyAoTUlJIE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNGR19SRVNFVF9NQU5BR0VNRU5UICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogUmVzZXQKLQkJCQkJCQkJICAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBNSUlNQ0ZHX05PX1BSRUFNQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBQcmVhbWJsZQotCQkJCQkJCQkgICBzdXBwcmVzcyAqLwotI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9TSElGVCAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIGNsb2NrIGRpdmlkZQotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9NQVggICAgICAgICAgICAgICAgMHhmCS8qIG1heCBjbG9jayBkaXZpZGUgKi8KLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV80ICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82ICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV84ICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMCAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNCAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNiAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yMCAgIDB4MDAwMDAwMDYKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yOCAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8zMiAgIDB4MDAwMDAwMDkKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV80OCAgIDB4MDAwMDAwMGEKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82NCAgIDB4MDAwMDAwMGIKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV84MCAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMTIgIDB4MDAwMDAwMGQKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNjAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yMjQgIDB4MDAwMDAwMGYKLQotLyogVUNDIEdFVEggTUlJTUNPTSAoTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNPTV9TQ0FOX0NZQ0xFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogU2NhbiBjeWNsZSAqLwotI2RlZmluZSBNSUlNQ09NX1JFQURfQ1lDTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBSZWFkIGN5Y2xlICovCi0KLS8qIFVDQyBHRVRIIE1JSU1BREQgKE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAyMykJLyogUEhZIEFkZHJlc3MKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLSNkZWZpbmUgTUlJTUFERF9QSFlfUkVHSVNURVJfU0hJRlQgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgUmVnaXN0ZXIKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLQotLyogVUNDIEdFVEggTUlJTUNPTiAoTUlJIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNPTl9QSFlfQ09OVFJPTF9TSElGVCAgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgQ29udHJvbAotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQ09OX1BIWV9TVEFUVVNfU0hJRlQgICAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBTdGF0dXMKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLQotLyogVUNDIEdFVEggTUlJTUlORCAoTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9yIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNSU5EX05PVF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBOb3QgdmFsaWQgKi8KLSNkZWZpbmUgTUlJTUlORF9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogU2NhbiBpbgotCQkJCQkJCQkgICBwcm9ncmVzcyAqLwotI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBJbml0aWFsIFRCSSBQaHlzaWNhbCBBZGRyZXNzICovCi0jZGVmaW5lIFVUQklQQVJfSU5JVF9UQklQQQkJCTB4MWYKLQotc3RydWN0IHVjY19taWlfbW5nIHsKLQl1MzIgbWlpbWNmZzsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gcmVnICovCi0JdTMyIG1paW1jb207CQkvKiBNSUkgbWFuYWdlbWVudCBjb21tYW5kIHJlZyAqLwotCXUzMiBtaWltYWRkOwkJLyogTUlJIG1hbmFnZW1lbnQgYWRkcmVzcyByZWcgKi8KLQl1MzIgbWlpbWNvbjsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnICovCi0JdTMyIG1paW1zdGF0OwkJLyogTUlJIG1hbmFnZW1lbnQgc3RhdHVzIHJlZyAqLwotCXUzMiBtaWltaW5kOwkJLyogTUlJIG1hbmFnZW1lbnQgaW5kaWNhdGlvbiByZWcgKi8KLQl1OCBub3RjYXJlWzI4XTsJCS8qIFNwYWNlIGhvbGRlciAqLwotCXUzMiB1dGJpcGFyOwkJLyogVEJJIHBoeSBhZGRyZXNzIHJlZyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRCSSAvIE1JSSBTZXQgUmVnaXN0ZXIgKi8KLWVudW0gZW5ldF90YmlfbWlpX3JlZyB7Ci0JRU5FVF9UQklfTUlJX0NSID0gMHgwMCwJLyogQ29udHJvbCAqLwotCUVORVRfVEJJX01JSV9TUiA9IDB4MDEsCS8qIFN0YXR1cyAqLwotCUVORVRfVEJJX01JSV9BTkEgPSAweDA0LAkvKiBBTiBhZHZlcnRpc2VtZW50ICovCi0JRU5FVF9UQklfTUlJX0FOTFBCUEEgPSAweDA1LAkvKiBBTiBsaW5rIHBhcnRuZXIgYmFzZSBwYWdlIGFiaWxpdHkgKi8KLQlFTkVUX1RCSV9NSUlfQU5FWCA9IDB4MDYsCS8qIEFOIGV4cGFuc2lvbiAqLwotCUVORVRfVEJJX01JSV9BTk5QVCA9IDB4MDcsCS8qIEFOIG5leHQgcGFnZSB0cmFuc21pdCAqLwotCUVORVRfVEJJX01JSV9BTkxQQU5QID0gMHgwOCwJLyogQU4gbGluayBwYXJ0bmVyIGFiaWxpdHkgbmV4dCBwYWdlICovCi0JRU5FVF9UQklfTUlJX0VYU1QgPSAweDBGLAkvKiBFeHRlbmRlZCBzdGF0dXMgKi8KLQlFTkVUX1RCSV9NSUlfSkQgPSAweDEwLAkvKiBKaXR0ZXIgZGlhZ25vc3RpY3MgKi8KLQlFTkVUX1RCSV9NSUlfVEJJQ09OID0gMHgxMQkvKiBUQkkgY29udHJvbCAqLwotfTsKLQotaW50IHVlY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7Ci1pbnQgdWVjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBfX2luaXQgdWVjX21kaW9faW5pdCh2b2lkKTsKLXZvaWQgdWVjX21kaW9fZXhpdCh2b2lkKTsKLXZvaWQgdWVjX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYJCQkJLyogX19VRUNfTUlJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IDM5NmY4MjEuLjg3YjRhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtODA3LDYgKzgwNywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTcyX3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODgxNzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQgPSAwOwpAQCAtODQ2LDkgKzg1OCw4IEBACiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDNmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4MTcyX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODgxNzJfZXRodG9vbF9vcHM7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwpAQCAtODk4LDYgKzkwOSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODg3NzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQsIGVtYmRfcGh5OwpAQCAtOTYyLDcgKzk4NSw2IEBACiAJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CkBAIC05NzgsNyArMTAwMCw3IEBACiAKIAltc2xlZXAoMTUwKTsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODc3Ml9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCiAJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKQEAgLTExODEsNiArMTIwMywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0LAorCS5uZG9fZG9faW9jdGwgCQk9IGFzaXhfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF4ODgxNzhfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyBpbnQgYXg4ODE3OF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKQEAgLTEyNDcsMTEgKzEyODEsMTAgQEAKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKIAlkZXYtPm1paS5zdXBwb3J0c19nbWlpID0gMTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODgxNzhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3OF9ldGh0b29sX29wczsKLQlkZXYtPm5ldC0+Y2hhbmdlX210dSA9ICZheDg4MTc4X2NoYW5nZV9tdHU7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAJZGJnKCJQSFlJRD0weCUwOHgiLCBwaHlpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCBjYjdhY2JiLi5iOWRkNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTE2Myw3ICsxNjMsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl1bnNpZ25lZCBpbnQgdHhfcHRyLCB0eF9pZHg7CkBAIC0yNDUsOCArMjQ0LDggQEAKIAkJaWYoIWNhdGMtPmlzX2Y1dTAxMSkgewogCQkJcGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2Kilwa3Rfc3RhcnQpOwogCQkJaWYgKHBrdF9sZW4gPiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCQljYXRjLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI2Miw4ICsyNjEsOCBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjYXRjLT5uZXRkZXYpOwogCQluZXRpZl9yeChza2IpOwogCi0JCWNhdGMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJY2F0Yy0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCQkvKiBGNVUwMTEgb25seSBkb2VzIG9uZSBwYWNrZXQgcGVyIFJYICovCiAJCWlmIChjYXRjLT5pc19mNXUwMTEpCkBAIC0zODYsNyArMzg1LDcgQEAKIAkJZGJnKCJUeCBSZXNldC4iKTsKIAkJdXJiLT5zdGF0dXMgPSAwOwogCQljYXRjLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWNsZWFyX2JpdChUWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOwogCQluZXRpZl93YWtlX3F1ZXVlKGNhdGMtPm5ldGRldik7CiAJCXJldHVybjsKQEAgLTQxMiw3ICs0MTEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBjYXRjX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGludCBjYXRjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ0Myw4ICs0NDIsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyID49IDApIHsKLQkJY2F0Yy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWNhdGMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJfQogCiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNTg4LDE1ICs1ODcsMTUgQEAKIAlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgVHhTaW5nbGVDb2xsOgogCQljYXNlIFR4TXVsdGlDb2xsOgotCQkJY2F0Yy0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCQljYXNlIFR4RXhjZXNzQ29sbDoKLQkJCWNhdGMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwotCQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJCWNhc2UgUnhGcmFtRXJyOgotCQkJY2F0Yy0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwotCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCX0KIApAQCAtNjE0LDEyICs2MTMsNiBAQAogCW1vZF90aW1lcigmY2F0Yy0+dGltZXIsIGppZmZpZXMgKyBTVEFUU19VUERBVEUpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNhdGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiAmY2F0Yy0+c3RhdHM7Ci19Ci0KIC8qCiAgKiBSZWNlaXZlIG1vZGVzLiBCcm9hZGNhc3QsIE11bHRpY2FzdCwgUHJvbWlzYy4KICAqLwpAQCAtNzUwLDYgKzc0MywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNhdGNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY2F0Y19vcGVuLAorCS5uZG9fc3RvcAkJPSBjYXRjX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGNhdGNfc3RhcnRfeG1pdCwKKworCS5uZG9fdHhfdGltZW91dAkJPSBjYXRjX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBjYXRjX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIFVTQiBwcm9iZSwgZGlzY29ubmVjdC4KICAqLwpAQCAtNzc0LDEzICs3NzksOCBAQAogCiAJY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQluZXRkZXYtPm9wZW4gPSBjYXRjX29wZW47Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjYXRjX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPnN0b3AgPSBjYXRjX3N0b3A7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBjYXRjX2dldF9zdGF0czsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBjYXRjX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmNhdGNfbmV0ZGV2X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0OwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCiAJY2F0Yy0+dXNiZGV2ID0gdXNiZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDgxNjgyYzYuLjZmYzRmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTQxOSw2ICs0MTksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbTk2MDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IGRtOTYwMV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZG05NjAxX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgZG05NjAxX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0OwpAQCAtNDI4LDkgKzQ0MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBkbTk2MDFfaW9jdGw7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+bmV0LT5zZXRfbWFjX2FkZHJlc3MgPSBkbTk2MDFfc2V0X21hY19hZGRyZXNzOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmRtOTYwMV9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZkbTk2MDFfZXRodG9vbF9vcHM7CiAJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBETV9UWF9PVkVSSEVBRDsKIAlkZXYtPmhhcmRfbXR1ID0gZGV2LT5uZXQtPm10dSArIGRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggZmU5OGFjYS4uY2RlNDIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtOTM2LDggKzkzNiw3IEBACiAJCQlpZiAoIW9kZXYtPnJ4X2J1Zl9taXNzaW5nKSB7CiAJCQkJLyogUGFja2V0IGlzIGNvbXBsZXRlLiBJbmplY3QgaW50byBzdGFjay4gKi8KIAkJCQkvKiBXZSBoYXZlIElQIHBhY2tldCBoZXJlICovCi0JCQkJb2Rldi0+c2tiX3J4X2J1Zi0+cHJvdG9jb2wgPQotCQkJCQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJCQkJb2Rldi0+c2tiX3J4X2J1Zi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9JUCk7CiAJCQkJLyogZG9uJ3QgY2hlY2sgaXQgKi8KIAkJCQlvZGV2LT5za2JfcnhfYnVmLT5pcF9zdW1tZWQgPQogCQkJCQlDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTEyNDcsNyArMTI0Niw3IEBACiAgKiBUaGlzIG5lZWRzIHRvIGJlIGEgdGFza2xldCBvdGhlcndpc2Ugd2Ugd2lsbAogICogZW5kIHVwIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZCBoc29fdW50aHJvdHRsZV90YXNrbGV0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBoc29fdW50aHJvdHRsZV90YXNrbGV0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTI2Niw3ICsxMjY1LDcgQEAKIAl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzZXJpYWwtPnVudGhyb3R0bGVfdGFza2xldCk7CiB9CiAKLXZvaWQgaHNvX3VudGhyb3R0bGVfd29ya2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaHNvX3VudGhyb3R0bGVfd29ya2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhzb19zZXJpYWwsCkBAIC0xNDY1LDkgKzE0NjQsOSBAQAogCiAJcmV0dXJuIGNoYXJzOwogfQotaW50IHRpb2NtZ2V0X3N1Ym1pdF91cmIoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwKLQkJCXN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldCwKLQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCitzdGF0aWMgaW50IHRpb2NtZ2V0X3N1Ym1pdF91cmIoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwKKwkJCSAgICAgICBzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICp0aW9jbWdldCwKKwkJCSAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQogewogCWludCByZXN1bHQ7CiAKQEAgLTIzNjQsMTIgKzIzNjMsNiBAQAogCXJldHVybiAtMTsKIH0KIAotLyogRnJlZXMgYSBnZW5lcmFsIGhzbyBkZXZpY2UgKi8KLXN0YXRpYyB2b2lkIGhzb19mcmVlX2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKLXsKLQlrZnJlZShoc29fZGV2KTsKLX0KLQogLyogQ3JlYXRlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQkJICAgIGludCBwb3J0X3NwZWMpCkBAIC0yNDMyLDkgKzI0MjUsMTYgQEAKIAkJZnJlZV9uZXRkZXYoaHNvX25ldC0+bmV0KTsKIAl9CiAKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNvX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gaHNvX25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGhzb19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gaHNvX25ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCA9IGhzb19uZXRfdHhfdGltZW91dCwKK307CisKIC8qIGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZCBoc29fbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKQEAgLTI0NDMsMTAgKzI0NDMsNyBAQAogCUQxKCJzaXplb2YgaHNvX25ldCBpcyAlZCIsIChpbnQpc2l6ZW9mKCpoc29fbmV0KSk7CiAKIAkvKiBmaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgKi8KLQluZXQtPm9wZW4gPSBoc29fbmV0X29wZW47Ci0JbmV0LT5zdG9wID0gaHNvX25ldF9jbG9zZTsKLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGhzb19uZXRfc3RhcnRfeG1pdDsKLQluZXQtPnR4X3RpbWVvdXQgPSBoc29fbmV0X3R4X3RpbWVvdXQ7CisJbmV0LT5uZXRkZXZfb3BzID0gJmhzb19uZXRkZXZfb3BzOwogCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBIU09fTkVUX1RYX1RJTUVPVVQ7CiAJbmV0LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUCB8IElGRl9NVUxUSUNBU1Q7CiAJbmV0LT50eXBlID0gQVJQSFJEX05PTkU7CkBAIC0yNjQ2LDcgKzI2NDMsNyBAQAogCX0KIAloc29fZnJlZV90aW9tZ2V0KHNlcmlhbCk7CiAJa2ZyZWUoc2VyaWFsKTsKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiB9CiAKIC8qIENyZWF0ZXMgYSBidWxrIEFUIGNoYW5uZWwgKi8KQEAgLTI3MjcsNyArMjcyNCw3IEBACiBleGl0OgogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKIAlrZnJlZShzZXJpYWwpOwotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc4Niw3ICsyNzgzLDcgQEAKIAkJa2ZyZWUoc2VyaWFsKTsKIAl9CiAJaWYgKGhzb19kZXYpCi0JCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwkJa2ZyZWUoaHNvX2Rldik7CiAJcmV0dXJuIE5VTEw7CiAKIH0KQEAgLTI5NzksOCArMjk3Niw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlLCBoc29fZGV2KTsKLQogCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGRldmljZSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBoc29fZGV2KTsKIApAQCAtMjk5OCw4ICsyOTkzLDYgQEAKIAogCS8qIHJlbW92ZSByZWZlcmVuY2Ugb2Ygb3VyIHByaXZhdGUgZGF0YSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmhzb19kcml2ZXIsIGludGVyZmFjZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFzeW5jX2dldF9pbnRmKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmluZGV4IGNlZDhmMzYuLjdhZTlhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtNDg2LDYgKzQ4NiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jczc4MzBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IG1jczc4MzBfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtY3M3ODMwX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IG1jczc4MzBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXYtPm5ldDsKQEAgLTQ5NSwxMSArNTA3LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW5ldC0+ZG9faW9jdGwgPSBtY3M3ODMwX2lvY3RsOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmbWNzNzgzMF9ldGh0b29sX29wczsKLQluZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdDsKKwluZXQtPm5ldGRldl9vcHMgPSAmbWNzNzgzMF9uZXRkZXZfb3BzOwogCW1jczc4MzBfc2V0X211bHRpY2FzdChuZXQpOwotCW5ldC0+c2V0X21hY19hZGRyZXNzID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3M7CiAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGJ5dGUgb24gcnggKi8KIAlkZXYtPnJ4X3VyYl9zaXplID0gRVRIX0ZSQU1FX0xFTiArIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCBiY2Q4NThjLi4xYmYyNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQkJCXN0cnVjdCBybmRpc19rZWVwYWxpdmVfYyAqbXNnID0gKHZvaWQgKilidWY7CiAKIAkJCQltc2ctPm1zZ190eXBlID0gUk5ESVNfTVNHX0tFRVBBTElWRV9DOwotCQkJCW1zZy0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqbXNnKTsKKwkJCQltc2ctPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKm1zZyk7CiAJCQkJbXNnLT5zdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAkJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAogCQkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXUuZ2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmdldCArIGluX2xlbik7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAl1LmdldC0+bGVuID0gY3B1X3RvX2xlMzIoaW5fbGVuKTsKLQl1LmdldC0+b2Zmc2V0ID0gY2NwdTIoMjApOworCXUuZ2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigyMCk7CiAKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkgewpAQCAtMjY2LDYgKzI2NiwxNiBAQAogCXJldHVybiAtRURPTTsKIH0KIAorLyogc2FtZSBhcyB1c2JuZXRfbmV0ZGV2X29wcyBidXQgTVRVIGNoYW5nZSBub3QgYWxsb3dlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBpbnQKIGdlbmVyaWNfcm5kaXNfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgZmxhZ3MpCiB7CkBAIC0yOTcsOSArMzA3LDkgQEAKIAkJZ290byBmYWlsOwogCiAJdS5pbml0LT5tc2dfdHlwZSA9IFJORElTX01TR19JTklUOwotCXUuaW5pdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5pbml0KTsKLQl1LmluaXQtPm1ham9yX3ZlcnNpb24gPSBjY3B1MigxKTsKLQl1LmluaXQtPm1pbm9yX3ZlcnNpb24gPSBjY3B1MigwKTsKKwl1LmluaXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuaW5pdCk7CisJdS5pbml0LT5tYWpvcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMSk7CisJdS5pbml0LT5taW5vcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMCk7CiAKIAkvKiBtYXggdHJhbnNmZXIgKGluIHNwZWMpIGlzIDB4NDAwMCBhdCBmdWxsIHNwZWVkLCBidXQgZm9yCiAJICogVFggd2UnbGwgc3RpY2sgdG8gb25lIEV0aGVybmV0IHBhY2tldCBwbHVzIFJORElTIGZyYW1pbmcuCkBAIC0zMjcsNyArMzM3LDggQEAKIAlkZXYtPnJ4X3VyYl9zaXplICY9IH4oZGV2LT5tYXhwYWNrZXQgLSAxKTsKIAl1LmluaXQtPm1heF90cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoZGV2LT5yeF91cmJfc2l6ZSk7CiAKLQluZXQtPmNoYW5nZV9tdHUgPSBOVUxMOworCW5ldC0+bmV0ZGV2X29wcyA9ICZybmRpc19uZXRkZXZfb3BzOworCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKIAkJLyogaXQgbWlnaHQgbm90IGV2ZW4gYmUgYW4gUk5ESVMgZGV2aWNlISEgKi8KQEAgLTQwMywxMCArNDE0LDEwIEBACiAJLyogc2V0IGEgbm9uemVybyBmaWx0ZXIgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXJzICovCiAJbWVtc2V0KHUuc2V0LCAwLCBzaXplb2YgKnUuc2V0KTsKIAl1LnNldC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfU0VUOwotCXUuc2V0LT5tc2dfbGVuID0gY2NwdTIoNCArIHNpemVvZiAqdS5zZXQpOworCXUuc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoNCArIHNpemVvZiAqdS5zZXQpOwogCXUuc2V0LT5vaWQgPSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUjsKLQl1LnNldC0+bGVuID0gY2NwdTIoNCk7Ci0JdS5zZXQtPm9mZnNldCA9IGNjcHUyKChzaXplb2YgKnUuc2V0KSAtIDgpOworCXUuc2V0LT5sZW4gPSBjcHVfdG9fbGUzMig0KTsKKwl1LnNldC0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoKHNpemVvZiAqdS5zZXQpIC0gOCk7CiAJKihfX2xlMzIgKikodS5idWYgKyBzaXplb2YgKnUuc2V0KSA9IFJORElTX0RFRkFVTFRfRklMVEVSOwogCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKQEAgLTQyMyw3ICs0MzQsNyBAQAogaGFsdF9mYWlsX2FuZF9yZWxlYXNlOgogCW1lbXNldCh1LmhhbHQsIDAsIHNpemVvZiAqdS5oYWx0KTsKIAl1LmhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JdS5oYWx0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmhhbHQpOworCXUuaGFsdC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5oYWx0KTsKIAkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopdS5oYWx0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIGZhaWxfYW5kX3JlbGVhc2U6CiAJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKQEAgLTQ0OCw3ICs0NTksNyBAQAogCWhhbHQgPSBremFsbG9jKENPTlRST0xfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChoYWx0KSB7CiAJCWhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JCWhhbHQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKmhhbHQpOworCQloYWx0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICpoYWx0KTsKIAkJKHZvaWQpIHJuZGlzX2NvbW1hbmQoZGV2LCAodm9pZCAqKWhhbHQsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCQlrZnJlZShoYWx0KTsKIAl9CkBAIC01NDMsNyArNTU0LDcgQEAKIAltZW1zZXQoaGRyLCAwLCBzaXplb2YgKmhkcik7CiAJaGRyLT5tc2dfdHlwZSA9IFJORElTX01TR19QQUNLRVQ7CiAJaGRyLT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCWhkci0+ZGF0YV9vZmZzZXQgPSBjY3B1MihzaXplb2YoKmhkcikgLSA4KTsKKwloZHItPmRhdGFfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpoZHIpIC0gOCk7CiAJaGRyLT5kYXRhX2xlbiA9IGNwdV90b19sZTMyKGxlbik7CiAKIAkvKiBGSVhNRSBtYWtlIHRoZSBsYXN0IHBhY2tldCBhbHdheXMgYmUgc2hvcnQgLi4uICovCkBAIC01NjIsOSArNTczLDYgQEAKIAkudHhfZml4dXAgPQlybmRpc190eF9maXh1cCwKIH07CiAKLSN1bmRlZiBjY3B1MgotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGQ4NjY0YmYuLmY5ZmI0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXJiICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYiwgKmN0cmxfdXJiOwogCXN0cnVjdCBza19idWZmICp0eF9za2IsICpyeF9za2I7CkBAIC00NjMsOCArNDYyLDggQEAKIAlza2JfcHV0KGRldi0+cnhfc2tiLCBwa3RfbGVuKTsKIAlkZXYtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhkZXYtPnJ4X3NrYiwgbmV0ZGV2KTsKIAluZXRpZl9yeChkZXYtPnJ4X3NrYik7Ci0JZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCXNwaW5fbG9jaygmZGV2LT5yeF9wb29sX2xvY2spOwogCXNrYiA9IHB1bGxfc2tiKGRldik7CkBAIC01NzMsMTMgKzU3MiwxMyBAQAogCiAJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWlmIChkWzBdICYgVFNSX0VSUk9SUykgewotCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgKFRTUl9FQ09MIHwgVFNSX0pCUikpCi0JCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTENPTCkKLQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTE9TU19DUlMpCi0JCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiAJLyogUmVwb3J0IGxpbmsgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2sgKi8KIAlpZiAoKGRbSU5UX01TUl0gJiBNU1JfTElOSykgPT0gMCkgewpAQCAtNjk3LDE3ICs2OTYsMTIgQEAKIAlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE1MF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigocnRsODE1MF90ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiVHggdGltZW91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKLQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNTBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNzQ3LDEyICs3NDEsMTIgQEAKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwogCQllbHNlIHsKIAkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9IGVsc2UgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIApAQCAtODk3LDYgKzg5MSwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1MF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBydGw4MTUwX29wZW4sCisJLm5kb19zdG9wCQk9IHJ0bDgxNTBfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBydGw4MTUwX2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTUwX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHJ0bDgxNTBfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzLAorCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTkyMywxNSArOTMwLDggQEAKIAkKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OwotCW5ldGRldi0+b3BlbiA9IHJ0bDgxNTBfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBydGw4MTUwX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBydGw4MTUwX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZydGw4MTUwX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNTBfVFhfVElNRU9VVDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTUwX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTUwX3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3Q7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPmdldF9zdGF0cyA9IHJ0bDgxNTBfbmV0ZGV2X3N0YXRzOwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCWRldi0+aW50cl9pbnRlcnZhbCA9IDEwMDsJLyogMTAwbXMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCA1NTc0YWJlLi5kYzE2NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNTUsMTEgKzU1LDEwIEBACiAKIHN0cnVjdCB1c2JfY29udGV4dCB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7Ci0Jc3RydWN0IGNvbXBsZXRpb24gbm90aWZ5OwogCXN0cnVjdCB1c2JuZXQgKmRldjsKIH07CiAKLWludCB0dXJib19tb2RlID0gdHJ1ZTsKK3N0YXRpYyBpbnQgdHVyYm9fbW9kZSA9IHRydWU7CiBtb2R1bGVfcGFyYW0odHVyYm9fbW9kZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR1cmJvX21vZGUsICJFbmFibGUgbXVsdGlwbGUgZnJhbWVzIHBlciBSeCB0cmFuc2FjdGlvbiIpOwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfY29udGV4dCAqdXNiX2NvbnRleHQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2NvbnRleHQtPmRldjsKQEAgLTMxNiw4ICszMTUsNiBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlkZXZ3YXJuKGRldiwgImFzeW5jIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIiwgc3RhdHVzKTsKIAotCWNvbXBsZXRlKCZ1c2JfY29udGV4dC0+bm90aWZ5KTsKLQogCWtmcmVlKHVzYl9jb250ZXh0KTsKIAl1c2JfZnJlZV91cmIodXJiKTsKIH0KQEAgLTM0OCwxMSArMzQ1LDEwIEBACiAJdXNiX2NvbnRleHQtPnJlcS53VmFsdWUgPSAwMDsKIAl1c2JfY29udGV4dC0+cmVxLndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKIAl1c2JfY29udGV4dC0+cmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQlpbml0X2NvbXBsZXRpb24oJnVzYl9jb250ZXh0LT5ub3RpZnkpOwogCiAJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAogCQkodm9pZCAqKSZ1c2JfY29udGV4dC0+cmVxLCBkYXRhLCBzaXplLAotCQkodXNiX2NvbXBsZXRlX3Qpc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrLAorCQlzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2ssCiAJCSh2b2lkICopdXNiX2NvbnRleHQpOwogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTEwMTIsNiArMTAwOCwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtc2M5NXh4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gc21zYzk1eHhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0LAorfTsKKwogc3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gTlVMTDsKQEAgLTEwNDIsOSArMTA1MCw4IEBACiAJLyogSW5pdCBhbGwgcmVnaXN0ZXJzICovCiAJcmV0ID0gc21zYzk1eHhfcmVzZXQoZGV2KTsKIAotCWRldi0+bmV0LT5kb19pb2N0bCA9IHNtc2M5NXh4X2lvY3RsOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnNtc2M5NXh4X25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJnNtc2M5NXh4X2V0aHRvb2xfb3BzOwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gU01TQzk1WFhfVFhfT1ZFUkhFQUQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYzMyMjg0Zi4uNjU5NjU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCitpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQlsbF9tdHUgPSBuZXdfbXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW47CkBAIC0yNDYsMTQgKzI0Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1c2JuZXRfZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQotewotCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2NoYW5nZV9tdHUpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01NDgsNyArNTQxLDcgQEAKIAogLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CiAKLXN0YXRpYyBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJdGVtcDsKQEAgLTU5Miw2ICs1ODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc3RvcCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU5OSw3ICs1OTMsNyBAQAogCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAotc3RhdGljIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlyZXR2YWw7CkBAIC02NzQsNiArNjY4LDcgQEAKIGRvbmVfbm9wbToKIAlyZXR1cm4gcmV0dmFsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X29wZW4pOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05MDgsNyArOTAzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCkBAIC05MTcsMTAgKzkxMiwxMSBAQAogCiAJLy8gRklYTUU6IGRldmljZSByZWNvdmVyeSAtLSByZXNldD8KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF90eF90aW1lb3V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMDAzLDcgKzk5OSw3IEBACiAJfQogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdGFydF94bWl0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTExMCw2ICsxMTA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZGlzY29ubmVjdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdXNibmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc5LDEzICsxMTg0LDE0IEBACiAJCW5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogI2VuZGlmCiAKLQluZXQtPmNoYW5nZV9tdHUgPSB1c2JuZXRfY2hhbmdlX210dTsKLQluZXQtPmdldF9zdGF0cyA9IHVzYm5ldF9nZXRfc3RhdHM7CisJbmV0LT5uZXRkZXZfb3BzID0gJnVzYm5ldF9uZXRkZXZfb3BzOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0OwogCW5ldC0+b3BlbiA9IHVzYm5ldF9vcGVuOwogCW5ldC0+c3RvcCA9IHVzYm5ldF9zdG9wOwotCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CiAJbmV0LT50eF90aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQ7CisjZW5kaWYKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmdXNibmV0X2V0aHRvb2xfb3BzOwogCiAJLy8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGJpbmQvaW5pdCBwcm9jZWR1cmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMTI0ZmU3NS4uMDE1ZGIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTksMTIgKzE5LDE3IEBACiAjZGVmaW5lIERSVl9OQU1FCSJ2ZXRoIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgogCisjZGVmaW5lIE1JTl9NVFUgNjgJCS8qIE1pbiBMMyBNVFUgKi8KKyNkZWZpbmUgTUFYX01UVSA2NTUzNQkJLyogTWF4IEwzIE1UVSAoYXJiaXRyYXJ5KSAqLworI2RlZmluZSBNVFVfUEFEIChFVEhfSExFTiArIDQpICAvKiBNYXggZGlmZmVyZW5jZSBiZXR3ZWVuIEwyIGFuZCBMMyBzaXplIE1UVSAqLworCiBzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nCXR4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZwlyeF9ieXRlczsKIAl1bnNpZ25lZCBsb25nCXR4X2J5dGVzOwogCXVuc2lnbmVkIGxvbmcJdHhfZHJvcHBlZDsKKwl1bnNpZ25lZCBsb25nCXJ4X2Ryb3BwZWQ7CiB9OwogCiBzdHJ1Y3QgdmV0aF9wcml2IHsKQEAgLTE0Nyw3ICsxNTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpyY3YgPSBOVUxMOwogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXYsICpyY3ZfcHJpdjsKLQlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOworCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHMsICpyY3Zfc3RhdHM7CiAJaW50IGxlbmd0aCwgY3B1OwogCiAJc2tiX29ycGhhbihza2IpOwpAQCAtMTU4LDkgKzE2MywxMyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0YXRzID0gcGVyX2NwdV9wdHIocHJpdi0+c3RhdHMsIGNwdSk7CisJcmN2X3N0YXRzID0gcGVyX2NwdV9wdHIocmN2X3ByaXYtPnN0YXRzLCBjcHUpOwogCiAJaWYgKCEocmN2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0ZjsKKwkJZ290byB0eF9kcm9wOworCisJaWYgKHNrYi0+bGVuID4gKHJjdi0+bXR1ICsgTVRVX1BBRCkpCisJCWdvdG8gcnhfZHJvcDsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByY3YpOwpAQCAtMTc4LDE3ICsxODcsMjEgQEAKIAlzdGF0cy0+dHhfYnl0ZXMgKz0gbGVuZ3RoOwogCXN0YXRzLT50eF9wYWNrZXRzKys7CiAKLQlzdGF0cyA9IHBlcl9jcHVfcHRyKHJjdl9wcml2LT5zdGF0cywgY3B1KTsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJcmN2X3N0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7CisJcmN2X3N0YXRzLT5yeF9wYWNrZXRzKys7CiAKIAluZXRpZl9yeChza2IpOwogCXJldHVybiAwOwogCi1vdXRmOgordHhfZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCXJldHVybiAwOworCityeF9kcm9wOgorCWtmcmVlX3NrYihza2IpOworCXJjdl9zdGF0cy0+cnhfZHJvcHBlZCsrOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjEwLDYgKzIyMyw3IEBACiAJZGV2X3N0YXRzLT5yeF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9kcm9wcGVkID0gMDsKKwlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKQEAgLTIxOSw2ICsyMzMsNyBAQAogCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKIAkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7CiAJCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKKwkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOwogCX0KIAogCXJldHVybiBkZXZfc3RhdHM7CkBAIC0yNDksNiArMjY0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXNfdmFsaWRfdmV0aF9tdHUoaW50IG5ld19tdHUpCit7CisJcmV0dXJuIChuZXdfbXR1ID49IE1JTl9NVFUgJiYgbmV3X210dSA8PSBNQVhfTVRVKTsKK30KKworc3RhdGljIGludCB2ZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJaWYgKCFpc192YWxpZF92ZXRoX210dShuZXdfbXR1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOwpAQCAtMjc3LDYgKzMwNSw3IEBACiAJLm5kb19vcGVuICAgICAgICAgICAgPSB2ZXRoX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LAorCS5uZG9fY2hhbmdlX210dSAgICAgID0gdmV0aF9jaGFuZ2VfbXR1LAogCS5uZG9fZ2V0X3N0YXRzICAgICAgID0gdmV0aF9nZXRfc3RhdHMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiB9OwpAQCAtMzAzLDYgKzMzMiwxMCBAQAogCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KKwlpZiAodGJbSUZMQV9NVFVdKSB7CisJCWlmICghaXNfdmFsaWRfdmV0aF9tdHUobmxhX2dldF91MzIodGJbSUZMQV9NVFVdKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggM2I4ZTYzMi4uODgwZWFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEwOSw4ICsxMDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogLyogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gdXNlIFBDSSBtZW1vcnkgc3BhY2UuIFNvbWUgZWFybHkgdmVyc2lvbnMKICAgIG9mIHRoZSBSaGluZSBtYXkgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEkvTyBzcGFjZSBhY2Nlc3Nlcy4gKi8KQEAgLTU4OSw3ICs1OTAsNyBAQAogCXdvcmtfZG9uZSA9IHJoaW5lX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaW93cml0ZTE2KEludHJSeERvbmUgfCBJbnRyUnhFcnIgfCBJbnRyUnhFbXB0eXwgSW50clJ4T3ZlcmZsb3cgfAogCQkJICBJbnRyUnhEcm9wcGVkIHwgSW50clJ4Tm9CdWYgfCBJbnRyVHhBYm9ydGVkIHwKQEAgLTEzMTksNyArMTMyMCw3IEBACiAJCQkJICBJbnRyUENJRXJyIHwgSW50clN0YXRzTWF4IHwgSW50ckxpbmtDaGFuZ2UsCiAJCQkJICBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnJwLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnJwLT5uYXBpKTsKIAkJfQogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyVHhFcnJTdW1tYXJ5IHwgSW50clR4RG9uZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggMjlhMzMwOS4uZWE0M2UxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTE4Myw3ICsxODMsNyBAQAogfTsKIAogZW51bSB7Ci0JUlhfSU5URU4gPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKwlSWF9JTlRFTiA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKQEAgLTIxMCw3ICsyMTAsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIHsKLQlURF9RVUVVRSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCVREX1FVRVVFID0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfTsKIAogc3RydWN0IHRkX2J1ZiB7CkBAIC0yNDIsNyArMjQyLDcgQEAKIAogZW51bSAgdmVsb2NpdHlfb3duZXIgewogCU9XTkVEX0JZX0hPU1QgPSAwLAotCU9XTkVEX0JZX05JQyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCU9XTkVEX0JZX05JQyA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGU2N2QxNmMuLmE2ZjFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTM3LDEyICszNywxNSBAQAogI2RlZmluZSBNQVhfUEFDS0VUX0xFTiAoRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyBFVEhfREFUQV9MRU4pCiAjZGVmaW5lIEdPT0RfQ09QWV9MRU4JMTI4CiAKKyNkZWZpbmUgVklSVE5FVF9TRU5EX0NPTU1BTkRfU0dfTUFYICAgIDIKKwogc3RydWN0IHZpcnRuZXRfaW5mbwogewogCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwotCXN0cnVjdCB2aXJ0cXVldWUgKnJ2cSwgKnN2cTsKKwlzdHJ1Y3QgdmlydHF1ZXVlICpydnEsICpzdnEsICpjdnE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJLyogVGhlIHNrYiB3ZSBjb3VsZG4ndCBzZW5kIGJlY2F1c2UgYnVmZmVycyB3ZXJlIGZ1bGwuICovCiAJc3RydWN0IHNrX2J1ZmYgKmxhc3RfeG1pdF9za2I7CkBAIC0zNzUsOSArMzc4LDkgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHJ2cS0+dmRldi0+cHJpdjsKIAkvKiBTY2hlZHVsZSBOQVBJLCBTdXBwcmVzcyBmdXJ0aGVyIGludGVycnVwdHMgaWYgc3VjY2Vzc2Z1bC4gKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHJ2cSk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CiAJfQogfQogCkBAIC00MDMsMTEgKzQwNiwxMSBAQAogCiAJLyogT3V0IG9mIHBhY2tldHM/ICovCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAodW5saWtlbHkoIXZpLT5ydnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5ydnEpKQogCQkgICAgJiYgbmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7CiAJCQl2aS0+cnZxLT52cV9vcHMtPmRpc2FibGVfY2IodmktPnJ2cSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKG5hcGkpOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KQEAgLTU2Miw2ICs1NjUsMjIgQEAKIAlnb3RvIGRvbmU7CiB9CiAKK3N0YXRpYyBpbnQgdmlydG5ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2aS0+dmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZXRoX21hY19hZGRyKGRldiwgcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZkZXYtPmNvbmZpZy0+c2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWFjKSwKKwkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCB2aXJ0bmV0X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTU4MSwxMyArNjAwLDYwIEBACiAJICogd29uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBwYWNrZXRzCiAJICogbm93LiAgdmlydG5ldF9wb2xsIHdhbnRzIHJlLWVuYWJsZSB0aGUgcXVldWUsIHNvIHdlIGRpc2FibGUgaGVyZS4KIAkgKiBXZSBzeW5jaHJvbml6ZSBhZ2FpbnN0IGludGVycnVwdHMgdmlhIE5BUElfU1RBVEVfU0NIRUQgKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXZpLT5ydnEtPnZxX29wcy0+ZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdmktPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTZW5kIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBhbmQgY2hlY2sgc3RhdHVzLiAgQ29tbWFuZHMKKyAqIHN1cHBvcnRlZCBieSB0aGUgaHlwZXJ2aXNvciwgYXMgaW5kaWNhdGVkIGJ5IGZlYXR1cmUgYml0cywgc2hvdWxkCisgKiBuZXZlciBmYWlsIHVubGVzcyBpbXByb3Blcmx5IGZvcm1hdGVkLgorICovCitzdGF0aWMgYm9vbCB2aXJ0bmV0X3NlbmRfY29tbWFuZChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgdTggY2xhc3MsIHU4IGNtZCwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpkYXRhLCBpbnQgb3V0LCBpbnQgaW4pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1ZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCArIDJdOworCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIGN0cmw7CisJdmlydGlvX25ldF9jdHJsX2FjayBzdGF0dXMgPSB+MDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQlCVUcoKTsgIC8qIENhbGxlciBzaG91bGQga25vdyBiZXR0ZXIgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUJVR19PTihvdXQgKyBpbiA+IFZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCk7CisKKwlvdXQrKzsgLyogQWRkIGhlYWRlciAqLworCWluKys7IC8qIEFkZCByZXR1cm4gc3RhdHVzICovCisKKwljdHJsLmNsYXNzID0gY2xhc3M7CisJY3RybC5jbWQgPSBjbWQ7CisKKwlzZ19pbml0X3RhYmxlKHNnLCBvdXQgKyBpbik7CisKKwlzZ19zZXRfYnVmKCZzZ1swXSwgJmN0cmwsIHNpemVvZihjdHJsKSk7CisJbWVtY3B5KCZzZ1sxXSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAob3V0ICsgaW4gLSAyKSk7CisJc2dfc2V0X2J1Zigmc2dbb3V0ICsgaW4gLSAxXSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCisJaWYgKHZpLT5jdnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+Y3ZxLCBzZywgb3V0LCBpbiwgdmkpICE9IDApCisJCUJVRygpOworCisJdmktPmN2cS0+dnFfb3BzLT5raWNrKHZpLT5jdnEpOworCisJLyoKKwkgKiBTcGluIGZvciBhIHJlc3BvbnNlLCB0aGUga2ljayBjYXVzZXMgYW4gaW9wb3J0IHdyaXRlLCB0cmFwcGluZworCSAqIGludG8gdGhlIGh5cGVydmlzb3IsIHNvIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBoYW5kbGVkIGltbWVkaWF0ZWx5LgorCSAqLworCXdoaWxlICghdmktPmN2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5jdnEsICZ0bXApKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiBzdGF0dXMgPT0gVklSVElPX05FVF9PSzsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjA4LDYgKzY3NCw5OSBAQAogCXJldHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOworCXU4IHByb21pc2MsIGFsbG11bHRpOworCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjICptYWNfZGF0YTsKKwlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqYWRkcjsKKwl2b2lkICpidWY7CisJaW50IGk7CisKKwkvKiBXZSBjYW4ndCBkeW5hbWljYWx5IHNldCBuZG9fc2V0X3J4X21vZGUsIHNvIHJldHVybiBncmFjZWZ1bGx5ICovCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1JYKSkKKwkJcmV0dXJuOworCisJcHJvbWlzYyA9ICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAhPSAwKTsKKwlhbGxtdWx0aSA9ICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIT0gMCk7CisKKwlzZ19zZXRfYnVmKHNnLCAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9SWCwKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9SWF9QUk9NSVNDLAorCQkJCSAgc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gJXNhYmxlIHByb21pc2MgbW9kZS5cbiIsCisJCQkgcHJvbWlzYyA/ICJlbiIgOiAiZGlzIik7CisKKwlzZ19zZXRfYnVmKHNnLCAmYWxsbXVsdGksIHNpemVvZihhbGxtdWx0aSkpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1JYLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1JYX0FMTE1VTFRJLAorCQkJCSAgc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gJXNhYmxlIGFsbG11bHRpIG1vZGUuXG4iLAorCQkJIGFsbG11bHRpID8gImVuIiA6ICJkaXMiKTsKKworCS8qIE1BQyBmaWx0ZXIgLSB1c2Ugb25lIGJ1ZmZlciBmb3IgYm90aCBsaXN0cyAqLworCW1hY19kYXRhID0gYnVmID0ga3phbGxvYygoKGRldi0+dWNfY291bnQgKyBkZXYtPm1jX2NvdW50KSAqIEVUSF9BTEVOKSArCisJCQkJICgyICogc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSksIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgTUFDIGFkZHJlc3MgYnVmZmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFN0b3JlIHRoZSB1bmljYXN0IGxpc3QgYW5kIGNvdW50IGluIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyICovCisJbWFjX2RhdGEtPmVudHJpZXMgPSBkZXYtPnVjX2NvdW50OworCWFkZHIgPSBkZXYtPnVjX2xpc3Q7CisJZm9yIChpID0gMDsgaSA8IGRldi0+dWNfY291bnQ7IGkrKywgYWRkciA9IGFkZHItPm5leHQpCisJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaV1bMF0sIGFkZHItPmRhX2FkZHIsIEVUSF9BTEVOKTsKKworCXNnX3NldF9idWYoJnNnWzBdLCBtYWNfZGF0YSwKKwkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArIChkZXYtPnVjX2NvdW50ICogRVRIX0FMRU4pKTsKKworCS8qIG11bHRpY2FzdCBsaXN0IGFuZCBjb3VudCBmaWxsIHRoZSBlbmQgKi8KKwltYWNfZGF0YSA9ICh2b2lkICopJm1hY19kYXRhLT5tYWNzW2Rldi0+dWNfY291bnRdWzBdOworCisJbWFjX2RhdGEtPmVudHJpZXMgPSBkZXYtPm1jX2NvdW50OworCWFkZHIgPSBkZXYtPm1jX2xpc3Q7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgYWRkciA9IGFkZHItPm5leHQpCisJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaV1bMF0sIGFkZHItPmRhX2FkZHIsIEVUSF9BTEVOKTsKKworCXNnX3NldF9idWYoJnNnWzFdLCBtYWNfZGF0YSwKKwkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArIChkZXYtPm1jX2NvdW50ICogRVRIX0FMRU4pKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9NQUMsCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCwKKwkJCQkgIHNnLCAyLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBNQUMgZml0bGVyIHRhYmxlLlxuIik7CisKKwlrZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCB2aXJuZXRfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCXNnX3NldF9idWYoJnNnLCAmdmlkLCBzaXplb2YodmlkKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfVkxBTiwKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0FERCwgJnNnLCAxLCAwKSkKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBWTEFOIElEICVkLlxuIiwgdmlkKTsKK30KKworc3RhdGljIHZvaWQgdmlybmV0X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJc2dfc2V0X2J1Zigmc2csICZ2aWQsIHNpemVvZih2aWQpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9WTEFOLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1ZMQU5fREVMLCAmc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8ga2lsbCBWTEFOIElEICVkLlxuIiwgdmlkKTsKK30KKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB2aXJ0bmV0X2V0aHRvb2xfb3BzID0gewogCS5zZXRfdHhfY3N1bSA9IHZpcnRuZXRfc2V0X3R4X2NzdW0sCiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLApAQCAtNjMxLDEzICs3OTAsNTEgQEAKIAkubmRvX3N0b3AgICAJICAgICA9IHZpcnRuZXRfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0ICAgICAgPSBzdGFydF94bWl0LAogCS5uZG9fdmFsaWRhdGVfYWRkciAgID0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2aXJ0bmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9yeF9tb2RlICAgICA9IHZpcnRuZXRfc2V0X3J4X21vZGUsCiAJLm5kb19jaGFuZ2VfbXR1CSAgICAgPSB2aXJ0bmV0X2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X2FkZF92aWQgPSB2aXJuZXRfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCA9IHZpcm5ldF92bGFuX3J4X2tpbGxfdmlkLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB2aXJ0bmV0X25ldHBvbGwsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKK3sKKwl1MTYgdjsKKworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfU1RBVFVTKSkKKwkJcmV0dXJuOworCisJdmktPnZkZXYtPmNvbmZpZy0+Z2V0KHZpLT52ZGV2LAorCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBzdGF0dXMpLAorCQkJICAgICAgJnYsIHNpemVvZih2KSk7CisKKwkvKiBJZ25vcmUgdW5rbm93biAoZnV0dXJlKSBzdGF0dXMgYml0cyAqLworCXYgJj0gVklSVElPX05FVF9TX0xJTktfVVA7CisKKwlpZiAodmktPnN0YXR1cyA9PSB2KQorCQlyZXR1cm47CisKKwl2aS0+c3RhdHVzID0gdjsKKworCWlmICh2aS0+c3RhdHVzICYgVklSVElPX05FVF9TX0xJTktfVVApIHsKKwkJbmV0aWZfY2Fycmllcl9vbih2aS0+ZGV2KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZSh2aS0+ZGV2KTsKKwl9IGVsc2UgeworCQluZXRpZl9jYXJyaWVyX29mZih2aS0+ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZSh2aS0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRuZXRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSB2ZGV2LT5wcml2OworCisJdmlydG5ldF91cGRhdGVfc3RhdHVzKHZpKTsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCWludCBlcnI7CkBAIC02NzksOCArODc2LDExIEBACiAJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsCiAJCQkJICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIG1hYyksCiAJCQkJICBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJdmRldi0+Y29uZmlnLT5zZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBtYWMpLAorCQkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisJfQogCiAJLyogU2V0IHVwIG91ciBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MTYsNiArOTE2LDE3IEBACiAJCWdvdG8gZnJlZV9yZWN2OwogCX0KIAorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQl2aS0+Y3ZxID0gdmRldi0+Y29uZmlnLT5maW5kX3ZxKHZkZXYsIDIsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZpLT5jdnEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZpLT5zdnEpOworCQkJZ290byBmcmVlX3NlbmQ7CisJCX0KKworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOKSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwl9CisKIAkvKiBJbml0aWFsaXplIG91ciBlbXB0eSByZWNlaXZlIGFuZCBzZW5kIHF1ZXVlcy4gKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+cmVjdik7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnNlbmQpOwpAQCAtNzI4LDcgKzkzOSw3IEBACiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygidmlydGlvX25ldDogcmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9zZW5kOworCQlnb3RvIGZyZWVfY3RybDsKIAl9CiAKIAkvKiBMYXN0IG9mIGFsbCwgc2V0IHVwIHNvbWUgcmVjZWl2ZSBidWZmZXJzLiAqLwpAQCAtNzQwLDYgKzk1MSw4IEBACiAJCWdvdG8gdW5yZWdpc3RlcjsKIAl9CiAKKwl2aS0+c3RhdHVzID0gVklSVElPX05FVF9TX0xJTktfVVA7CisJdmlydG5ldF91cGRhdGVfc3RhdHVzKHZpKTsKIAluZXRpZl9jYXJyaWVyX29uKGRldik7CiAKIAlwcl9kZWJ1ZygidmlydG5ldDogcmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsIGRldi0+bmFtZSk7CkBAIC03NDcsNiArOTYwLDkgQEAKIAogdW5yZWdpc3RlcjoKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZnJlZV9jdHJsOgorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiBmcmVlX3NlbmQ6CiAJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPnN2cSk7CiBmcmVlX3JlY3Y6CkBAIC03NzgsNiArOTk0LDggQEAKIAogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5zdnEpOwogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5ydnEpOworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYodmktPmRldik7CiAKIAl3aGlsZSAodmktPnBhZ2VzKQpAQCAtNzk3LDcgKzEwMTUsOCBAQAogCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLCAvKiBXZSBkb24ndCB5ZXQgaGFuZGxlIFVGTyBpbnB1dC4gKi8KLQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGLAorCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYsIFZJUlRJT19ORVRfRl9TVEFUVVMsIFZJUlRJT19ORVRfRl9DVFJMX1ZRLAorCVZJUlRJT19ORVRfRl9DVFJMX1JYLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOLAogCVZJUlRJT19GX05PVElGWV9PTl9FTVBUWSwKIH07CiAKQEAgLTgwOSw2ICsxMDI4LDcgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkucHJvYmUgPQl2aXJ0bmV0X3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcCh2aXJ0bmV0X3JlbW92ZSksCisJLmNvbmZpZ19jaGFuZ2VkID0gdmlydG5ldF9jb25maWdfY2hhbmdlZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IGI0Njg5NzkuLjk2OTNiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMjk2LDcgKzI5NiwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzEwMV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gYzEwMV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGMxMDFfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBjMTAxX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSkKIHsKQEAgLTM2Nyw5ICszNzMsNyBAQAogCWRldi0+bWVtX3N0YXJ0ID0gd2luYmFzZTsKIAlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgQzEwMV9NQVBQRURfUkFNX1NJWkUgLSAxOwogCWRldi0+dHhfcXVldWVfbGVuID0gNTA7Ci0JZGV2LT5kb19pb2N0bCA9IGMxMDFfaW9jdGw7Ci0JZGV2LT5vcGVuID0gYzEwMV9vcGVuOwotCWRldi0+c3RvcCA9IGMxMDFfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJmMxMDFfb3BzOwogCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCWNhcmQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCBkODBiNzJlLi42MTU4MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTQyNyw2ICs0MjcsMTUgQEAKIH0KIG1vZHVsZV9leGl0KGNvc2FfZXhpdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29zYV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gY29zYV9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBjb3NhX25ldF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGNvc2FfbmV0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IGNvc2FfcHJvYmUoaW50IGJhc2UsIGludCBpcnEsIGludCBkbWEpCiB7CiAJc3RydWN0IGNvc2FfZGF0YSAqY29zYSA9IGNvc2FfY2FyZHMrbnJfY2FyZHM7CkBAIC01NzUsMTAgKzU4NCw3IEBACiAJCX0KIAkJZGV2X3RvX2hkbGMoY2hhbi0+bmV0ZGV2KS0+YXR0YWNoID0gY29zYV9uZXRfYXR0YWNoOwogCQlkZXZfdG9faGRsYyhjaGFuLT5uZXRkZXYpLT54bWl0ID0gY29zYV9uZXRfdHg7Ci0JCWNoYW4tPm5ldGRldi0+b3BlbiA9IGNvc2FfbmV0X29wZW47Ci0JCWNoYW4tPm5ldGRldi0+c3RvcCA9IGNvc2FfbmV0X2Nsb3NlOwotCQljaGFuLT5uZXRkZXYtPmRvX2lvY3RsID0gY29zYV9uZXRfaW9jdGw7Ci0JCWNoYW4tPm5ldGRldi0+dHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQ7CisJCWNoYW4tPm5ldGRldi0+bmV0ZGV2X29wcyA9ICZjb3NhX29wczsKIAkJY2hhbi0+bmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJCWNoYW4tPm5ldGRldi0+YmFzZV9hZGRyID0gY2hhbi0+Y29zYS0+ZGF0YXJlZzsKIAkJY2hhbi0+bmV0ZGV2LT5pcnEgPSBjaGFuLT5jb3NhLT5pcnE7CkBAIC03MjUsOCArNzMxLDcgQEAKIAkgKiBXZSBjYW4gc2FmZWx5IGZhbGwgYmFjayB0byBub24tZG1hLWFibGUgbWVtb3J5LCBiZWNhdXNlIHdlIGhhdmUKIAkgKiB0aGUgY29zYS0+Ym91bmNlYnVmIHByZS1hbGxvY2F0ZWQuCiAJICovCi0JaWYgKGNoYW4tPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CiAJY2hhbi0+cnhfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAlpZiAoY2hhbi0+cnhfc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwKQEAgLTk5Myw4ICs5OTgsOCBAQAogc3RhdGljIGludCBjb3NhX2Zhc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogICAgICAgICBpbnQgcG9ydCA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIGludCBydiA9IGZhc3luY19oZWxwZXIoaW5vZGUsIGZpbGUsIG9uLCAmZmFzeW5jW3BvcnRdKTsKLSAgICAgICAgcmV0dXJuIHJ2IDwgMCA/IHJ2IDogMDsKKworCXJldHVybiBmYXN5bmNfaGVscGVyKGlub2RlLCBmaWxlLCBvbiwgJmZhc3luY1twb3J0XSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCA1ZmE1MjkyLi4zNWRlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtMzU1LDEyICszNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsYmFjayB0byBpbml0aWFsaXplIGRldmljZSAqLwotc3RhdGljIHZvaWQgY3ljeF94MjVfY2hhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRldi0+aW5pdCA9IGN5Y3hfbmV0ZGV2aWNlX2luaXQ7Ci19Ci0KIC8qIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCiAgKiBoYW5kbGVkLgpAQCAtNDc2LDYgKzQ3MCwyNyBAQAogCS5yZWJ1aWxkID0gY3ljeF9uZXRkZXZpY2VfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN5Y3hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJPSBjeWN4X25ldGRldmljZV9pbml0LAorCS5uZG9fb3Blbgk9IGN5Y3hfbmV0ZGV2aWNlX29wZW4sCisJLm5kb19zdG9wCT0gY3ljeF9uZXRkZXZpY2Vfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJPSBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBjeWN4X3gyNV9jaGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLworCWRldi0+bmV0ZGV2X29wcwkJPSAmY3ljeF9uZXRkZXZfb3BzOworCWRldi0+aGVhZGVyX29wcwkJPSAmY3ljeF9oZWFkZXJfb3BzOworCisJLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZGV2LT5tdHUJCT0gQ1lDWF9YMjVfQ0hBTl9NVFU7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9IV1gyNTsJLyogQVJQIGgvdyB0eXBlICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwkJLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLworCWRldi0+YWRkcl9sZW4JCT0gMDsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCit9CisKIC8qIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCiAgKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawpAQCAtNDg3LDIwICs1MDIsNiBAQAogCXN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCA9IGNoYW4tPmNhcmQ7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiA9ICZjYXJkLT53YW5kZXY7CiAKLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9IGN5Y3hfbmV0ZGV2aWNlX29wZW47Ci0JZGV2LT5zdG9wCQk9IGN5Y3hfbmV0ZGV2aWNlX3N0b3A7Ci0JZGV2LT5oZWFkZXJfb3BzCQk9ICZjeWN4X2hlYWRlcl9vcHM7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHM7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPm10dQkJPSBDWUNYX1gyNV9DSEFOX01UVTsKLQlkZXYtPnR5cGUJCT0gQVJQSFJEX0hXWDI1OwkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CQkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JZGV2LT5hZGRyX2xlbgkJPSAwOwkJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KLQogCWlmICghY2hhbi0+c3ZjKQogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmxjbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IGEyOTdlM2UuLmU4ZDE1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBpbnZhbGlkIGRhdGEgbm8gaGVhZGVyXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlpZiAoaGRyLT5jb250cm9sICE9IEZSQURfSV9VSSkKIAl7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgaGVhZGVyIGZsYWcgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPmNvbnRyb2wpOwotCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAllbHNlCiAJCXN3aXRjaChoZHItPklQX05MUElEKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKIAkJCQlpZiAoaGRyLT5OTFBJRCAhPSBGUkFEX1BfU05BUCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5OTFBJRCk7Ci0JCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkgCiAJCQkJaWYgKGhkci0+T1VJWzBdICsgaGRyLT5PVUlbMV0gKyBoZHItPk9VSVsyXSAhPSAwKQogCQkJCXsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgb3JnYW5pemF0aW9uYWxseSB1bmlxdWUgaWRlbnRpZmllciAweCUwMlgtJTAyWC0lMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPk9VSVswXSwgaGRyLT5PVUlbMV0sIGhkci0+T1VJWzJdKTsKLQkJCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogCQkJY2FzZSBGUkFEX1BfUTkzMzoKIAkJCWNhc2UgRlJBRF9QX0NMTlA6CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgTkxQSUQgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgcGFkIGJ5dGUgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwkJCQkKIAkJfQogCkBAIC0xNzgsOSArMTc4LDkgQEAKIAkJLyogd2UndmUgc2V0IHVwIHRoZSBwcm90b2NvbCwgc28gZGlzY2FyZCB0aGUgaGVhZGVyICovCiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9wdWxsKHNrYiwgaGVhZGVyKTsKLQkJZGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKLQkJZGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIAllbHNlCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTIwMCwxOSArMjAwLDE5IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCi0JcmV0ID0gZGxwLT5zbGF2ZS0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CisJcmV0ID0gZGxwLT5zbGF2ZS0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKIAlzd2l0Y2ggKHJldCkKIAl7CiAJCWNhc2UgRExDSV9SRVRfT0s6Ci0JCQlkbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJY2FzZSBETENJX1JFVF9FUlI6Ci0JCQlkbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCWNhc2UgRExDSV9SRVRfRFJPUDoKLQkJCWRscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJfQpAQCAtMjk1LDExICsyOTUsOSBAQAogCiBzdGF0aWMgaW50IGRsY2lfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOworCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigoKmRscC0+c2xhdmUtPmNoYW5nZV9tdHUpKGRscC0+c2xhdmUsIG5ld19tdHUpKTsKKwlyZXR1cm4gZGV2X3NldF9tdHUoZGxwLT5zbGF2ZSwgbmV3X210dSk7CiB9CiAKIHN0YXRpYyBpbnQgZGxjaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNDIsMTUgKzM0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGxjaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOwotCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZGxwLT5zdGF0cyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGxjaV9hZGQoc3RydWN0IGRsY2lfYWRkICpkbGNpKQogewogCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXIsICpzbGF2ZTsKQEAgLTQ4OCwxOCArNDc3LDIxIEBACiAJLmNyZWF0ZQk9IGRsY2lfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gZGxjaV9vcGVuLAorCS5uZG9fc3RvcAk9IGRsY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGRsY2lfZGV2X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQsCisJLm5kb19jaGFuZ2VfbXR1CT0gZGxjaV9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgZGxjaV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGV2LT5mbGFncwkJPSAwOwotCWRldi0+b3BlbgkJPSBkbGNpX29wZW47Ci0JZGV2LT5zdG9wCQk9IGRsY2lfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bAkJPSBkbGNpX2Rldl9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQ7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZkbGNpX2hlYWRlcl9vcHM7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gZGxjaV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IGRsY2lfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmRsY2lfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKIAlkbHAtPnJlY2VpdmUJCT0gZGxjaV9yZWNlaXZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4ODgwMjVkLi44ZmFjZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODgzLDYgKzg4MywxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNjYzRfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGRzY2M0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZHNjYzRfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBkc2NjNF9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCBkc2NjNF9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCXN0cnVjdCBkc2NjNF9wY2lfcHJpdiAqcHByaXY7CkBAIC05MTYsMTMgKzkyNSw4IEBACiAJCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZCk7CiAKIAkgICAgICAgIGQtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKLQkJZC0+aW5pdCA9IE5VTEw7CiAJICAgICAgICBkLT5pcnEgPSBwZGV2LT5pcnE7Ci0JICAgICAgICBkLT5vcGVuID0gZHNjYzRfb3BlbjsKLQkgICAgICAgIGQtPnN0b3AgPSBkc2NjNF9jbG9zZTsKLQkJZC0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLQkgICAgICAgIGQtPmRvX2lvY3RsID0gZHNjYzRfaW9jdGw7Ci0JCWQtPnR4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0OworCQlkLT5uZXRkZXZfb3BzID0gJmRzY2M0X29wczsKIAkJZC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCQlTRVRfTkVUREVWX0RFVihkLCAmcGRldi0+ZGV2KTsKIApAQCAtMTA0OCw3ICsxMDUyLDcgQEAKIAlzdHJ1Y3QgZHNjYzRfcGNpX3ByaXYgKnBwcml2OwogCWludCByZXQgPSAtRUFHQUlOOwogCi0JaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSB8fCAhZGV2LT5oYXJkX3N0YXJ0X3htaXQpCisJaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSkKIAkJZ290byBlcnI7CiAKIAlpZiAoKHJldCA9IGhkbGNfb3BlbihkZXYpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDQ4YTJjOWQuLjAwOTQ1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjQyNCw2ICsyNDI0LDE1IEBACiAJICAgICAgIHR5cGVfc3RyaW5nc1tjYXJkLT50eXBlXSwgY2FyZC0+aXJxLCBjYXJkLT5ucG9ydHMpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZzdF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gZnN0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZnN0X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gZnN0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGZzdF90eF90aW1lb3V0LAorfTsKKwogLyoKICAqICAgICAgSW5pdGlhbGlzZSBjYXJkIHdoZW4gZGV0ZWN0ZWQuCiAgKiAgICAgIFJldHVybnMgMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvciBlcnJubyBvdGhlcndpc2UuCkBAIC0yNTY1LDEyICsyNTc0LDkgQEAKICAgICAgICAgICAgICAgICBkZXYtPmJhc2VfYWRkciAgID0gY2FyZC0+cGNpX2NvbmY7CiAgICAgICAgICAgICAgICAgZGV2LT5pcnEgICAgICAgICA9IGNhcmQtPmlycTsKIAotICAgICAgICAgICAgICAgIGRldi0+dHhfcXVldWVfbGVuICAgICAgICAgID0gRlNUX1RYX1FVRVVFX0xFTjsKLSAgICAgICAgICAgICAgICBkZXYtPm9wZW4gICAgICAgICAgICAgICAgICA9IGZzdF9vcGVuOwotICAgICAgICAgICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgICAgID0gZnN0X2Nsb3NlOwotICAgICAgICAgICAgICAgIGRldi0+ZG9faW9jdGwgICAgICAgICAgICAgID0gZnN0X2lvY3RsOwotICAgICAgICAgICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gICAgICAgID0gRlNUX1RYX1RJTUVPVVQ7Ci0gICAgICAgICAgICAgICAgZGV2LT50eF90aW1lb3V0ICAgICAgICAgICAgPSBmc3RfdHhfdGltZW91dDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmZzdF9vcHM7CisJCWRldi0+dHhfcXVldWVfbGVuID0gRlNUX1RYX1FVRVVFX0xFTjsKKwkJZGV2LT53YXRjaGRvZ190aW1lbyA9IEZTVF9UWF9USU1FT1VUOwogICAgICAgICAgICAgICAgIGhkbGMtPmF0dGFjaCA9IGZzdF9hdHRhY2g7CiAgICAgICAgICAgICAgICAgaGRsYy0+eG1pdCAgID0gZnN0X3N0YXJ0X3htaXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKaW5kZXggMDhiMzUzNi4uNDk3YjAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJcmVjZWl2ZWQgPSBzY2FfcnhfZG9uZShwb3J0LCBidWRnZXQpOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllbmFibGVfaW50cihwb3J0KTsKIAl9CiAKQEAgLTM1OSw3ICszNTksNyBAQAogCQlpZiAocG9ydCAmJiAoaXNyMCAmIChpID8gMHgwODAwMjIwMCA6IDB4MDAwODAwMjIpKSkgewogCQkJaGFuZGxlZCA9IDE7CiAJCQlkaXNhYmxlX2ludHIocG9ydCk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKaW5kZXggMWYyYTE0MC4uNzU5NmVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCkBAIC00NCw3ICs0NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byAqZmlyc3RfcHJvdG87CiAKLXN0YXRpYyBpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoraW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBIRExDX01BWF9NVFUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUyLDE1ICs1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhkbGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0KLQogc3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CkBAIC03NSw3ICs2NiwxNSBAQAogCXJldHVybiBoZGxjLT5wcm90by0+bmV0aWZfcngoc2tiKTsKIH0KIAoraW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAorCWlmIChoZGxjLT5wcm90by0+eG1pdCkKKwkJcmV0dXJuIGhkbGMtPnByb3RvLT54bWl0KHNrYiwgZGV2KTsKKworCXJldHVybiBoZGxjLT54bWl0KHNrYiwgZGV2KTsgLyogY2FsbCBoYXJkd2FyZSBkcml2ZXIgZGlyZWN0bHkgKi8KK30KIAogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEwMiwxMSArMTAxLDExIEBACiAJaGRsY19kZXZpY2UgKmhkbGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb247Ci0gCisKIAlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0JaWYgKGRldi0+Z2V0X3N0YXRzICE9IGhkbGNfZ2V0X3N0YXRzKQorCWlmICghKGRldi0+cHJpdl9mbGFncyAmIElGRl9XQU5fSERMQykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsgLyogbm90IGFuIEhETEMgZGV2aWNlICovCiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0NIQU5HRSkKQEAgLTIzMywxNSArMjMyLDEzIEBACiAJLyogUmUtaW5pdCBhbGwgdmFyaWFibGVzIGNoYW5nZWQgYnkgSERMQyBwcm90b2NvbCBkcml2ZXJzLAogCSAqIGluY2x1ZGluZyBldGhlcl9zZXR1cCgpIGNhbGxlZCBmcm9tIGhkbGNfcmF3X2V0aC5jLgogCSAqLwotCWRldi0+Z2V0X3N0YXRzCQkgPSBoZGxjX2dldF9zdGF0czsKIAlkZXYtPmZsYWdzCQkgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5wcml2X2ZsYWdzCQkgPSBJRkZfV0FOX0hETEM7CiAJZGV2LT5tdHUJCSA9IEhETENfTUFYX01UVTsKIAlkZXYtPnR5cGUJCSA9IEFSUEhSRF9SQVdIRExDOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCSA9IDE2OwogCWRldi0+YWRkcl9sZW4JCSA9IDA7CiAJZGV2LT5oZWFkZXJfb3BzCQkgPSAmaGRsY19udWxsX29wczsKLQotCWRldi0+Y2hhbmdlX210dQkJID0gaGRsY19jaGFuZ2VfbXR1OwogfQogCiBzdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzksNiArMzM2LDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSERMQyBzdXBwb3J0IG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCitFWFBPUlRfU1lNQk9MKGhkbGNfY2hhbmdlX210dSk7CitFWFBPUlRfU1lNQk9MKGhkbGNfc3RhcnRfeG1pdCk7CiBFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7CiBFWFBPUlRfU1lNQk9MKGhkbGNfY2xvc2UpOwogRVhQT1JUX1NZTUJPTChoZGxjX2lvY3RsKTsKQEAgLTM0OSw4ICszNDgsOCBAQAogRVhQT1JUX1NZTUJPTChhdHRhY2hfaGRsY19wcm90b2NvbCk7CiBFWFBPUlRfU1lNQk9MKGRldGFjaF9oZGxjX3Byb3RvY29sKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBoZGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyksCiAJLmZ1bmMgPSBoZGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IDQ0ZTY0YjE1Li5jZjVmZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWRhdGEtPnR5cGUgPSBodG9ubCh0eXBlKTsKIAlkYXRhLT5wYXIxID0gcGFyMTsKIAlkYXRhLT5wYXIyID0gcGFyMjsKLQlkYXRhLT5yZWwgPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRik7CisJZGF0YS0+cmVsID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAkvKiB3ZSB3aWxsIG5lZWQgZG9fZGl2IGhlcmUgaWYgMTAwMCAlIEhaICE9IDAgKi8KIAlkYXRhLT50aW1lID0gaHRvbmwoKGppZmZpZXMgLSBJTklUSUFMX0pJRkZJRVMpICogKDEwMDAgLyBIWikpOwogCkBAIC0xMzYsMjAgKzEzNiwyMCBAQAogCXN0cnVjdCBoZGxjX2hlYWRlciAqZGF0YSA9IChzdHJ1Y3QgaGRsY19oZWFkZXIqKXNrYi0+ZGF0YTsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKQotCQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKTsKKwkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCiAJaWYgKGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fTVVMVElDQVNUICYmCiAJICAgIGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fVU5JQ0FTVCkKLQkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CisJCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9IRExDKTsKIAogCXN3aXRjaChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBYKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGRhdGEtPnByb3RvY29sOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOworCQlyZXR1cm4gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyk7CiAJfQogfQogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJY2FzZSBDSVNDT19BRERSX1JFUTogLyogU3RvbGVuIGZyb20gc3luY3BwcC5jIDotKSAqLwogCQkJaW5fZGV2ID0gZGV2LT5pcF9wdHI7CiAJCQlhZGRyID0gMDsKLQkJCW1hc2sgPSBfX2NvbnN0YW50X2h0b25sKH4wKTsgLyogaXMgdGhlIG1hc2sgY29ycmVjdD8gKi8KKwkJCW1hc2sgPSB+Y3B1X3RvX2JlMzIoMCk7IC8qIGlzIHRoZSBtYXNrIGNvcnJlY3Q/ICovCiAKIAkJCWlmIChpbl9kZXYgIT0gTlVMTCkgewogCQkJCXN0cnVjdCBpbl9pZmFkZHIgKippZmFwID0gJmluX2Rldi0+aWZhX2xpc3Q7CkBAIC0zODIsNyArMzgyLDYgQEAKIAogCQltZW1jcHkoJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7CiAJCXNwaW5fbG9ja19pbml0KCZzdGF0ZShoZGxjKS0+bG9jayk7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmNpc2NvX2hlYWRlcl9vcHM7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9DSVNDTzsKIAkJbmV0aWZfZG9ybWFudF9vbihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKaW5kZXggZjFkZGQ3Yy4uODAwNTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCkBAIC0yNzgsMzEgKzI3OCwzMSBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAqc2tiX3A7CiAKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgorCWNhc2UgY3B1X3RvX2JlMTYoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9DQ0lUVF9BTlNJX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0lTQ09fTE1JKToKKwljYXNlIGNwdV90b19iZTE2KE5MUElEX0NJU0NPX0xNSSk6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0NJU0NPX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9JUDsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfSVBWNjsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOgogCQloZWFkX2xlbiA9IDEwOwogCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBoZWFkX2xlbikgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsCkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCQlza2JfcHV0KHNrYiwgcGFkKTsKIAkJCQltZW1zZXQoc2tiLT5kYXRhICsgbGVuLCAwLCBwYWQpOwogCQkJfQotCQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOworCQkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8zKTsKIAkJfQogCQlpZiAoIWZyX2hhcmRfaGVhZGVyKCZza2IsIHB2Yy0+ZGxjaSkpIHsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC00NDQsMTggKzQ0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgaW50IHB2Y19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IEhETENfTUFYX01UVSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWRldi0+bXR1ID0gbmV3X210dTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcl9sb2dfZGxjaV9hY3RpdmUocHZjX2RldmljZSAqcHZjKQogewogCXByaW50ayhLRVJOX0lORk8gIiVzOiBETENJICVkIFslcyVzJXNdJXMgJXNcbiIsCkBAIC01MDgsMTAgKzQ5NiwxMCBAQAogCW1lbXNldChza2ItPmRhdGEsIDAsIGxlbik7CiAJc2tiX3Jlc2VydmUoc2tiLCA0KTsKIAlpZiAobG1pID09IExNSV9DSVNDTykgewotCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhOTFBJRF9DSVNDT19MTUkpOworCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoTkxQSURfQ0lTQ09fTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NJU0NPX0RMQ0kpOwogCX0gZWxzZSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NDSVRUX0FOU0lfRExDSSk7CiAJfQogCWRhdGEgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CkBAIC0xMDY4LDYgKzEwNTYsMTQgQEAKIAlkZXYtPmFkZHJfbGVuID0gMjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwdmNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHB2Y19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHB2Y19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gcHZjX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gcHZjX2lvY3RsLAorfTsKKwogc3RhdGljIGludCBmcl9hZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpmcmFkLCB1bnNpZ25lZCBpbnQgZGxjaSwgaW50IHR5cGUpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKQEAgLTExMDQsMTEgKzExMDAsNyBAQAogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGRsY2kpOwogCQlkbGNpX3RvX3E5MjIoZGV2LT5icm9hZGNhc3QsIGRsY2kpOwogCX0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHB2Y194bWl0OwotCWRldi0+b3BlbiA9IHB2Y19vcGVuOwotCWRldi0+c3RvcCA9IHB2Y19jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gcHZjX2lvY3RsOwotCWRldi0+Y2hhbmdlX210dSA9IHB2Y19jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZwdmNfb3BzOwogCWRldi0+bXR1ID0gSERMQ19NQVhfTVRVOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAlkZXYtPm1sX3ByaXYgPSBwdmM7CkBAIC0xMjYwLDggKzEyNTIsNiBAQAogCQkJc3RhdGUoaGRsYyktPmRjZV9wdmNfY291bnQgPSAwOwogCQl9CiAJCW1lbWNweSgmc3RhdGUoaGRsYyktPnNldHRpbmdzLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9GUkFEOwogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwppbmRleCA1N2ZlNzE0Li43MmE3Y2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwpAQCAtMTUwLDExICsxNTAsMTEgQEAKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0hETEMpOwogCiAJc3dpdGNoIChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhQSURfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQKToKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAJCXJldHVybiBodG9ucyhFVEhfUF9JUCk7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoUElEX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0lQVjYpOwogCkBAIC01NTgsNyArNTU4LDYgQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLQogc3RhdGljIHZvaWQgcHBwX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwcm90byAqcHJvdG8gPSAoc3RydWN0IHByb3RvICopYXJnOwpAQCAtNjc5LDcgKzY3OCw2IEBACiAJCXBwcC0+a2VlcGFsaXZlX2ludGVydmFsID0gMTA7CiAJCXBwcC0+a2VlcGFsaXZlX3RpbWVvdXQgPSA2MDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcik7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZwcHBfaGVhZGVyX29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKaW5kZXggODYxMjMxMS4uMTlmNTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKQEAgLTI3LDExICsyNyw5IEBACiAKIHN0YXRpYyBfX2JlMTYgcmF3X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIH0KIAotCi0KIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IHJhd190eXBlX3RyYW5zLAogCS5pb2N0bAkJPSByYXdfaW9jdGwsCkBAIC04Niw3ICs4NCw2IEBACiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQltZW1jcHkoaGRsYy0+c3RhdGUsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9SQVdIRExDOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwppbmRleCBhMTNmYzMyLi40OWU2OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCkBAIC00NSw2ICs0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IGV0aF90eXBlX3RyYW5zLAorCS54bWl0CQk9IGV0aF90eCwKIAkuaW9jdGwJCT0gcmF3X2V0aF9pb2N0bCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKQEAgLTU2LDkgKzU3LDcgQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihyYXdfaGRsY19wcm90byk7CiAJcmF3X2hkbGNfcHJvdG8gbmV3X3NldHRpbmdzOwogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlpbnQgcmVzdWx0OwotCWludCAoKm9sZF9jaF9tdHUpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7Ci0JaW50IG9sZF9xbGVuOworCWludCByZXN1bHQsIG9sZF9xbGVuOwogCiAJc3dpdGNoIChpZnItPmlmcl9zZXR0aW5ncy50eXBlKSB7CiAJY2FzZSBJRl9HRVRfUFJPVE86CkBAIC05OSwxMSArOTgsOCBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBldGhfdHg7Ci0JCW9sZF9jaF9tdHUgPSBkZXYtPmNoYW5nZV9tdHU7CiAJCW9sZF9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CiAJCWV0aGVyX3NldHVwKGRldik7Ci0JCWRldi0+Y2hhbmdlX210dSA9IG9sZF9jaF9tdHU7CiAJCWRldi0+dHhfcXVldWVfbGVuID0gb2xkX3FsZW47CiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwppbmRleCBjYmNiZjZmLi5iMWRjMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJLmNsb3NlCQk9IHgyNV9jbG9zZSwKIAkuaW9jdGwJCT0geDI1X2lvY3RsLAogCS5uZXRpZl9yeAk9IHgyNV9yeCwKKwkueG1pdAkJPSB4MjVfeG1pdCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjEzLDcgKzIxNCw2IEBACiAKIAkJaWYgKChyZXN1bHQgPSBhdHRhY2hfaGRsY19wcm90b2NvbChkZXYsICZwcm90bywgMCkpKQogCQkJcmV0dXJuIHJlc3VsdDsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB4MjVfeG1pdDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1gyNTsKIAkJbmV0aWZfZG9ybWFudF9vZmYoZGV2KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggYWY1NGYwYy4uNTY3ZDRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMTczLDYgKzE3MywxNCBAQAogICoJRGVzY3JpcHRpb24gYmxvY2sgZm9yIGEgQ29tdHJvbCBIb3N0ZXNzIFNWMTEgY2FyZAogICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGVzc19vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaG9zdGVzc19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhvc3Rlc3NfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBob3N0ZXNzX2lvY3RsLAorfTsKKwogc3RhdGljIHN0cnVjdCB6ODUzMF9kZXYgKnN2MTFfaW5pdChpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCB6ODUzMF9kZXYgKnN2OwpAQCAtMjY3LDkgKzI3NSw3IEBACiAKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT5hdHRhY2ggPSBob3N0ZXNzX2F0dGFjaDsKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT54bWl0ID0gaG9zdGVzc19xdWV1ZV94bWl0OwotCW5ldGRldi0+b3BlbiA9IGhvc3Rlc3Nfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBob3N0ZXNzX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBob3N0ZXNzX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZob3N0ZXNzX29wczsKIAluZXRkZXYtPmJhc2VfYWRkciA9IGlvYmFzZTsKIAluZXRkZXYtPmlycSA9IGlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKaW5kZXggMGRiZDg1Yi4uM2JmN2QzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYworKysgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhzc19oZGxjX3J4X2lycVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCXFtZ3JfZGlzYWJsZV9pcnEocXVldWVfaWRzW3BvcnQtPmlkXS5yeCk7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IGhzc19oZGxjX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtNjQ5LDE1ICs2NDksMTUgQEAKIAkJaWYgKChuID0gcXVldWVfZ2V0X2Rlc2MocnhxLCBwb3J0LCAwKSkgPCAwKSB7CiAjaWYgREVCVUdfUlgKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHNzX2hkbGNfcG9sbCIKLQkJCSAgICAgICAiIG5ldGlmX3J4X2NvbXBsZXRlXG4iLCBkZXYtPm5hbWUpOworCQkJICAgICAgICIgbmFwaV9jb21wbGV0ZVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJcW1ncl9lbmFibGVfaXJxKHJ4cSk7CiAJCQlpZiAoIXFtZ3Jfc3RhdF9lbXB0eShyeHEpICYmCi0JCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkgewogI2lmIERFQlVHX1JYCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoc3NfaGRsY19wb2xsIgotCQkJCSAgICAgICAiIG5ldGlmX3J4X3Jlc2NoZWR1bGUgc3VjY2VlZGVkXG4iLAorCQkJCSAgICAgICAiIG5hcGlfcmVzY2hlZHVsZSBzdWNjZWVkZWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJCQlxbWdyX2Rpc2FibGVfaXJxKHJ4cSk7CkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWhzc19zdGFydF9oZGxjKHBvcnQpOwogCiAJLyogd2UgbWF5IGFscmVhZHkgaGF2ZSBSWCBkYXRhLCBlbmFibGVzIElSUSAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTEyMzAsNiArMTIzMCwxNCBAQAogICogaW5pdGlhbGl6YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzc19oZGxjX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoc3NfaGRsY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhzc19oZGxjX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaHNzX2hkbGNfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBoc3NfaW5pdF9vbmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcG9ydCAqcG9ydDsKQEAgLTEyNTQsOSArMTI2Miw3IEBACiAJaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJaGRsYy0+YXR0YWNoID0gaHNzX2hkbGNfYXR0YWNoOwogCWhkbGMtPnhtaXQgPSBoc3NfaGRsY194bWl0OwotCWRldi0+b3BlbiA9IGhzc19oZGxjX29wZW47Ci0JZGV2LT5zdG9wID0gaHNzX2hkbGNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhzc19oZGxjX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZoc3NfaGRsY19vcHM7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJcG9ydC0+Y2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKIAlwb3J0LT5jbG9ja19yYXRlID0gMjA0ODAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwppbmRleCA1YjYxYjNlLi4yZGQ3OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCkBAIC01NSw3ICs1NSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpldGhkZXY7CS8qIGxpbmsgdG8gZXRoZXJuZXQgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UJKmF4ZGV2OwkJLyogbGFwYmV0aCBkZXZpY2UgKGxhcGIjKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkJLyogc29tZSBzdGF0aXN0aWNzICovCiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGxhcGJldGhfZGV2aWNlcyk7CkBAIC0xMDcsMTAgKzEwNiw5IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGxhcGJldGgtPmF4ZGV2KSkKIAkJZ290byBkcm9wX3VubG9jazsKIAotCWxhcGJldGgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQogCWxlbiA9IHNrYi0+ZGF0YVswXSArIHNrYi0+ZGF0YVsxXSAqIDI1NjsKLQlsYXBiZXRoLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAlza2JfcHVsbChza2IsIDIpOwkvKiBSZW1vdmUgdGhlIGxlbmd0aCBieXRlcyAqLwogCXNrYl90cmltKHNrYiwgbGVuKTsJLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KQEAgLTIxMCw4ICsyMDgsOCBAQAogCSpwdHIrKyA9IHNpemUgJSAyNTY7CiAJKnB0cisrID0gc2l6ZSAvIDI1NjsKIAotCWxhcGJldGgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlsYXBiZXRoLT5zdGF0cy50eF9ieXRlcyArPSBzaXplOworCW5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzaXplOwogCiAJc2tiLT5kZXYgPSBkZXYgPSBsYXBiZXRoLT5ldGhkZXY7CiAKQEAgLTI1NSwxNSArMjUzLDYgQEAKIH0KIAogLyoKLSAqCVN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYXBiZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYXBiZXRoZGV2ICpsYXBiZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxhcGJldGgtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTMxNCwxNCArMzAzLDE3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxhcGJldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IGxhcGJldGhfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGxhcGJldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBsYXBiZXRoX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIGxhcGJldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhcGJldGhfeG1pdDsKLQlkZXYtPm9wZW4JICAgICA9IGxhcGJldGhfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGxhcGJldGhfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmbGFwYmV0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gbGFwYmV0aF9nZXRfc3RhdHM7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfWDI1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMzsKIAlkZXYtPm10dSAgICAgICAgICAgICA9IDEwMDA7CkBAIC00MjEsOCArNDEzLDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfREVDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfREVDKSwKIAkuZnVuYyA9IGxhcGJldGhfcmN2LAogfTsKIApAQCAtNDMwLDcgKzQyMiw4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBsYXBiZXRoX2RldmljZV9ldmVudCwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGFwYmV0aF9pbml0X2RyaXZlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGZlYWMzYjkuLjQ1YjE4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTgwNiw2ICs4MDYsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsbWNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGxtY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGxtY19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGxtY19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBsbWNfZHJpdmVyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgID0gbG1jX2dldF9zdGF0cywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxtY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04NDksMTEgKzg1OSw3IEBACiAJZGV2LT50eXBlID0gQVJQSFJEX0hETEM7CiAJZGV2X3RvX2hkbGMoZGV2KS0+eG1pdCA9IGxtY19zdGFydF94bWl0OwogCWRldl90b19oZGxjKGRldiktPmF0dGFjaCA9IGxtY19hdHRhY2g7Ci0JZGV2LT5vcGVuID0gbG1jX29wZW47Ci0JZGV2LT5zdG9wID0gbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gbG1jX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotCWRldi0+dHhfdGltZW91dCA9IGxtY19kcml2ZXJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbG1jX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kICovCiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJc2MtPmxtY19kZXZpY2UgPSBkZXY7CkBAIC0xMDU5LDkgKzEwNjUsNiBAQAogICAgIGlmICgoZXJyID0gbG1jX3Byb3RvX29wZW4oc2MpKSAhPSAwKQogCSAgICByZXR1cm4gZXJyOwogCi0gICAgZGV2LT5kb19pb2N0bCA9IGxtY19pb2N0bDsKLQotCiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICBzYy0+ZXh0cmFfc3RhdHMudHhfdGJ1c3kwKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90by5jCmluZGV4IDk0YjRjMjAuLjA0NGE0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfcHJvdG8uYwpAQCAtNTEsMzAgKzUxLDE1IEBACiB2b2lkIGxtY19wcm90b19hdHRhY2gobG1jX3NvZnRjX3QgKnNjKSAvKkZPTEQwMCovCiB7CiAgICAgbG1jX3RyYWNlKHNjLT5sbWNfZGV2aWNlLCAibG1jX3Byb3RvX2F0dGFjaCBpbiIpOwotICAgIHN3aXRjaChzYy0+aWZfdHlwZSl7Ci0gICAgY2FzZSBMTUNfUFBQOgotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7Ci0gICAgICAgICAgICBkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE1DX05FVDoKLSAgICAgICAgeworICAgIGlmIChzYy0+aWZfdHlwZSA9PSBMTUNfTkVUKSB7CiAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7CiAgICAgICAgICAgICAvKgogCSAgICAgKiBUaGV5IHNldCBhIGZldyBiYXNpY3MgYmVjYXVzZSB0aGV5IGRvbid0IHVzZSBIRExDCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwotCiAgICAgICAgICAgICBkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAgICAgICAgICAgICBkZXYtPmFkZHJfbGVuID0gMDsKICAgICAgICAgfQotICAgIGNhc2UgTE1DX1JBVzogLyogU2V0dXAgdGhlIHRhc2sgcXVldWUsIG1heWJlIHdlIHNob3VsZCBub3RpZnkgc29tZW9uZT8gKi8KLSAgICAgICAgewotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGxtY190cmFjZShzYy0+bG1jX2RldmljZSwgImxtY19wcm90b19hdHRhY2ggb3V0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggNjk3NzE1YS4uODNkYTU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTMyNCw3ICszMjQsMTMgQEAKIAlrZnJlZShjYXJkKTsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG4yX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuMl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG4yX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gbjJfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuMl9ydW4odW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBpcnEsCiAJCQkgdW5zaWduZWQgbG9uZyB3aW5iYXNlLCBsb25nIHZhbGlkMCwgbG9uZyB2YWxpZDEpCkBAIC00NjAsOSArNDY2LDcgQEAKIAkJZGV2LT5tZW1fc3RhcnQgPSB3aW5iYXNlOwogCQlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgVVNFX1dJTkRPV1NJWkUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gbjJfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IG4yX29wZW47Ci0JCWRldi0+c3RvcCA9IG4yX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbjJfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCmluZGV4IGYyNDdlNWQuLjYwZWNlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCkBAIC0yODcsNyArMjg3LDEzIEBACiAJa2ZyZWUoY2FyZCk7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwYzMwMF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gcGMzMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwYzMwMF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHBjMzAwX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGMzMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtNDQ4LDkgKzQ1NCw3IEBACiAJCWRldi0+bWVtX3N0YXJ0ID0gcmFtcGh5czsKIAkJZGV2LT5tZW1fZW5kID0gcmFtcGh5cyArIHJhbXNpemUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gcGMzMDBfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHBjMzAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjMzAwX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmcGMzMDBfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggMTEwNGQzYS4uZTAzNWQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtMjY1LDcgKzI2NSwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNpMjAwX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBwY2kyMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwY2kyMDBfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBwY2kyMDBfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2kyMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM5NSw5ICs0MDEsNyBAQAogCQlkZXYtPm1lbV9zdGFydCA9IHJhbXBoeXM7CiAJCWRldi0+bWVtX2VuZCA9IHJhbXBoeXMgKyByYW1zaXplIC0gMTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IHBjaTIwMF9pb2N0bDsKLQkJZGV2LT5vcGVuID0gcGNpMjAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjaTIwMF9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnBjaTIwMF9vcHM7CiAJCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSBzY2FfeG1pdDsKIAkJcG9ydC0+c2V0dGluZ3MuY2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCmluZGV4IDBhYTI4ZTEuLmY0MjExZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwpAQCAtNjgsNyArNjgsNiBAQAogLyogZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCiBzdHJ1Y3QgbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKIAogCXNwaW5sb2NrX3QJbG9jazsKQEAgLTExNyw3ICsxMTYsNiBAQAogc3RhdGljIGludCAgc2JuaV9jbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50ICBzYm5pX2lvY3RsKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50ICk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICpzYm5pX2dldF9zdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIHZvaWQgIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JuaV9pbnRlcnJ1cHQoIGludCwgdm9pZCAqICk7CkBAIC0yMDgsMTUgKzIwNiwyMSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzYm5pX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNibmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2JuaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc2JuaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwJCT0gc2JuaV9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHNibmlfZGV2c2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cCggZGV2ICk7Ci0JZGV2LT5vcGVuCQk9ICZzYm5pX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZzYm5pX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gJnNibmlfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSAmc2JuaV9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QJPSAmc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+ZG9faW9jdGwJCT0gJnNibmlfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKIH0KIAogaW50IF9faW5pdCBzYm5pX3Byb2JlKGludCB1bml0KQpAQCAtMjI5LDYgKzIzMyw4IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2LT5uZXRkZXZfb3BzID0gJnNibmlfbmV0ZGV2X29wczsKKwogCXNwcmludGYoZGV2LT5uYW1lLCAic2JuaSVkIiwgdW5pdCk7CiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIApAQCAtNzIzLDEzICs3MjksMTEgQEAKIAkJCW5sLT53YWl0X2ZyYW1lbm8gPSAwLAogCQkJbmwtPmlucHBvcyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCQktPnN0YXRzLnJ4X2Vycm9ycysrLAotCQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQkJLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlubC0+bWFzdGVyLT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbHNlCi0JCQlubC0+c3RhdHMucnhfZXJyb3JzKyssCi0JCQlubC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkgICAgICAgIGRldi0+c3RhdHMucnhfZXJyb3JzKyssCisJCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKICNlbmRpZgogCQkJLyogbm93IHNraXAgYWxsIGZyYW1lcyB1bnRpbCBpc19maXJzdCAhPSAwICovCiAJfSBlbHNlCkBAIC03NDIsMTMgKzc0NiwxMSBAQAogCQkgKi8KIAkJbmwtPndhaXRfZnJhbWVubyA9IDAsCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCi0JCSgoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKQotCQkJLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMucnhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKICNlbHNlCi0JCW5sLT5zdGF0cy5yeF9lcnJvcnMrKywKLQkJbmwtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKywKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAjZW5kaWYKIAogCXJldHVybiAgZnJhbWVfb2s7CkBAIC03NTYsMTUgKzc1OCwxNiBAQAogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2VuZF9jb21wbGV0ZSggc3RydWN0IG5ldF9sb2NhbCAgKm5sICkKK3NlbmRfY29tcGxldGUoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogeworCXN0cnVjdCBuZXRfbG9jYWwgICpubCA9IG5ldGRldl9wcml2KGRldik7CisKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnR4X2J5dGVzCi0JCSs9IG5sLT50eF9idWZfcC0+bGVuOworCW5sLT5tYXN0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlubC0+bWFzdGVyLT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbHNlCi0JbmwtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlubC0+c3RhdHMudHhfYnl0ZXMgKz0gbmwtPnR4X2J1Zl9wLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBubC0+dHhfYnVmX3AtPmxlbjsKICNlbmRpZgogCWRldl9rZnJlZV9za2JfaXJxKCBubC0+dHhfYnVmX3AgKTsKIApAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQkJCQkgICBubC0+bWF4ZnJhbWUsCiAJCQkJCQkgICBubC0+dHhfYnVmX3AtPmxlbiAtIG5sLT5vdXRwb3MpOwogCQkJZWxzZQotCQkJCXNlbmRfY29tcGxldGUoIG5sICksCisJCQkJc2VuZF9jb21wbGV0ZSggZGV2ICksCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCiAJCQkJbmV0aWZfd2FrZV9xdWV1ZSggbmwtPm1hc3RlciApOwogI2Vsc2UKQEAgLTg4MSwxMyArODg0LDExIEBACiAJCWRldl9rZnJlZV9za2JfYW55KCBubC0+dHhfYnVmX3AgKSwKIAkJbmwtPnR4X2J1Zl9wID0gTlVMTCwKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKLQkJKChzdHJ1Y3QgbmV0X2xvY2FsICopbmV0ZGV2X3ByaXYobmwtPm1hc3RlcikpCi0JCQktPnN0YXRzLnR4X2Vycm9ycysrLAotCQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSkKLQkJCS0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJbmwtPm1hc3Rlci0+c3RhdHMudHhfZXJyb3JzKyssCisJCW5sLT5tYXN0ZXItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZWxzZQotCQlubC0+c3RhdHMudHhfZXJyb3JzKyssCi0JCW5sLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrLAorCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjZW5kaWYKIAogCW5sLT50eF9mcmFtZW5vCT0gMDsKQEAgLTEwMTcsMTQgKzEwMTgsMTMgQEAKICNpZmRlZiBDT05GSUdfU0JOSV9NVUxUSUxJTkUKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgbmwtPm1hc3RlciApOwogCW5ldGlmX3J4KCBza2IgKTsKLQkrKygoc3RydWN0IG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KG5sLT5tYXN0ZXIpKS0+c3RhdHMucnhfcGFja2V0czsKLQkoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihubC0+bWFzdGVyKSktPnN0YXRzLnJ4X2J5dGVzICs9Ci0JCW5sLT5pbnBwb3M7CisJKytubC0+bWFzdGVyLT5zdGF0cy5yeF9wYWNrZXRzOworCW5sLT5tYXN0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZWxzZQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyggc2tiLCBkZXYgKTsKIAluZXRpZl9yeCggc2tiICk7Ci0JKytubC0+c3RhdHMucnhfcGFja2V0czsKLQlubC0+c3RhdHMucnhfYnl0ZXMgKz0gbmwtPmlucHBvczsKKwkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG5sLT5pbnBwb3M7CiAjZW5kaWYKIAlubC0+cnhfYnVmX3AgPSBOVUxMOwkvKiBwcm90b2NvbCBkcml2ZXIgd2lsbCBjbGVhciB0aGlzIHNrX2J1ZmYgKi8KIH0KQEAgLTExOTcsNyArMTE5Nyw3IEBACiBoYW5kbGVyX2F0dGFjaGVkOgogCiAJc3Bpbl9sb2NrKCAmbmwtPmxvY2sgKTsKLQltZW1zZXQoICZubC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKKwltZW1zZXQoICZkZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpICk7CiAJbWVtc2V0KCAmbmwtPmluX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHNibmlfaW5fc3RhdHMpICk7CiAKIAljYXJkX3N0YXJ0KCBkZXYgKTsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAKIAkvKiBTdW1tYXJ5IHN0YXRpc3RpY3Mgb2YgTXVsdGlMaW5lIG9wZXJhdGlvbiB3aWxsIGJlIHN0b3JlZAogCSAgIGluIG1hc3RlcidzIGNvdW50ZXJzICovCi0JbWVtc2V0KCAmc25sLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSApOworCW1lbXNldCggJnNsYXZlX2Rldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykgKTsKIAluZXRpZl9zdG9wX3F1ZXVlKCBzbGF2ZV9kZXYgKTsKIAluZXRpZl93YWtlX3F1ZXVlKCBkZXYgKTsJLyogTm93IHdlIGFyZSBhYmxlIHRvIHRyYW5zbWl0ICovCiAKQEAgLTE0NjQsMTQgKzE0NjQsNiBAQAogCiAjZW5kaWYKIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgotc2JuaV9nZXRfc3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKLXsKLQlyZXR1cm4gICYoKHN0cnVjdCBuZXRfbG9jYWwgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQKIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgKQogewpAQCAtMTUyMCwxNyArMTUxMiwxOCBAQAogfQogCiB2b2lkCi1jbGVhbnVwX21vZHVsZSggdm9pZCApCitjbGVhbnVwX21vZHVsZSh2b2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwotCWludCAgbnVtOworCWludCBpOwogCi0JZm9yKCBudW0gPSAwOyAgbnVtIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytudW0gKQotCQlpZiggKGRldiA9IHNibmlfY2FyZHNbIG51bSBdKSAhPSBOVUxMICkgewotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoIGRldiApOwotCQkJcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCBTQk5JX0lPX0VYVEVOVCApOwotCQkJZnJlZV9uZXRkZXYoIGRldiApOworCWZvciAoaSA9IDA7ICBpIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzYm5pX2NhcmRzW2ldOworCQlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU0JOSV9JT19FWFRFTlQpOworCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQorCX0KIH0KIAogI2Vsc2UJLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCmluZGV4IDA5NDFhMjYuLjIzYjI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCkBAIC0xNjksNiArMTY5LDE0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2VhbGV2ZWxfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHNlYWxldmVsX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc2VhbGV2ZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBzZWFsZXZlbF9pb2N0bCwKK307CisKIHN0YXRpYyBpbnQgc2x2bF9zZXR1cChzdHJ1Y3Qgc2x2bF9kZXZpY2UgKnN2LCBpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19oZGxjZGV2KHN2KTsKQEAgLTE3Nyw5ICsxODUsNyBAQAogCiAJZGV2X3RvX2hkbGMoZGV2KS0+YXR0YWNoID0gc2VhbGV2ZWxfYXR0YWNoOwogCWRldl90b19oZGxjKGRldiktPnhtaXQgPSBzZWFsZXZlbF9xdWV1ZV94bWl0OwotCWRldi0+b3BlbiA9IHNlYWxldmVsX29wZW47Ci0JZGV2LT5zdG9wID0gc2VhbGV2ZWxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHNlYWxldmVsX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzZWFsZXZlbF9vcHM7CiAJZGV2LT5iYXNlX2FkZHIgPSBpb2Jhc2U7CiAJZGV2LT5pcnEgPSBpcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKaW5kZXggNGJmZmI2Ny4uODg3YWNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKQEAgLTU0Nyw2ICs1NDcsMTUgQEAKIAogI2luY2x1ZGUgIndhbnhsZncuaW5jIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdhbnhsX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB3YW54bF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHdhbnhsX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gd2FueGxfaW9jdGwsCisJLm5kb19nZXRfc3RhdHMgID0gd2FueGxfZ2V0X3N0YXRzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgd2FueGxfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtNzc3LDEyICs3ODYsOSBAQAogCQloZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gd2FueGxfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHdhbnhsX29wZW47Ci0JCWRldi0+c3RvcCA9IHdhbnhsX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmd2FueGxfb3BzOwogCQloZGxjLT5hdHRhY2ggPSB3YW54bF9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSB3YW54bF94bWl0OwotCQlkZXYtPmdldF9zdGF0cyA9IHdhbnhsX2dldF9zdGF0czsKIAkJcG9ydC0+Y2FyZCA9IGNhcmQ7CiAJCXBvcnQtPm5vZGUgPSBpOwogCQlnZXRfc3RhdHVzKHBvcnQpLT5jbG9ja2luZyA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IGU2ZTJjZTMuLmQ2N2UyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQltZW1jcHkoc2wtPnhidWZmLCBzbC0+eGhlYWQsIHNsLT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJc2wtPnhsZWZ0ID0gMDsKLQkJCXNsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIAlzbC0+eGhlYWQgPSBzbC0+eGJ1ZmY7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJCW1lbWNweShzbC0+cmJ1ZmYsIHJidWZmLCBzbC0+cmNvdW50KTsKIAkJfSBlbHNlICB7CiAJCQlzbC0+cmNvdW50ID0gMDsKLQkJCXNsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCQl9CiAJfQpAQCAtMTg4LDE4ICsxODgsMTkgQEAKIAogc3RhdGljIHZvaWQgeDI1X2FzeV9idW1wKHN0cnVjdCB4MjVfYXN5ICpzbCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2wtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3VudDsKIAlpbnQgZXJyOwogCiAJY291bnQgPSBzbC0+cmNvdW50OwotCXNsLT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihjb3VudCsxKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJc2wtPmRldi0+bmFtZSk7Ci0JCXNsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXNoKHNrYiwgMSk7CS8qIExBUEIgaW50ZXJuYWwgY29udHJvbCAqLwpAQCAtMjExLDcgKzIxMiw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJ4MjVfYXN5OiBkYXRhIHJlY2VpdmVkIGVyciAtICVkXG4iLCBlcnIpOwogCX0gZWxzZSB7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCXNsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIH0KIApAQCAtMjI2LDcgKzIyNyw3IEBACiAJCWxlbiA9IG10dTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cnVuY2F0aW5nIG92ZXJzaXplZCB0cmFuc21pdCBwYWNrZXQhXG4iLAogCQkJCQlzbC0+ZGV2LT5uYW1lKTsKLQkJc2wtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJc2wtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl4MjVfYXN5X3VubG9jayhzbCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNjYsNyArMjY3LDcgQEAKIAlpZiAoc2wtPnhsZWZ0IDw9IDApIHsKIAkJLyogTm93IHNlcmlhbCBidWZmZXIgaXMgYWxtb3N0IGZyZWUgJiB3ZSBjYW4gc3RhcnQKIAkJICogdHJhbnNtaXNzaW9uIG9mIGFub3RoZXIgcGFja2V0ICovCi0JCXNsLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXNsLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJY2xlYXJfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKTsKIAkJeDI1X2FzeV91bmxvY2soc2wpOwogCQlyZXR1cm47CkBAIC0zODMsNyArMzg0LDcgQEAKIAkvKiBXZSB3ZXJlIG5vdCBidXN5LCBzbyB3ZSBhcmUgbm93Li4uIDotKSAqLwogCWlmIChza2IgIT0gTlVMTCkgewogCQl4MjVfYXN5X2xvY2soc2wpOwotCQlzbC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXgyNV9hc3lfZW5jYXBzKHNsLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KQEAgLTUzMyw3ICs1MzQsNyBAQAogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCi0JCQkJc2wtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MDgsMTQgKzYwOSw2IEBACiAJeDI1X2FzeV9mcmVlKHNsKTsKIH0KIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKngyNV9hc3lfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHgyNV9hc3kgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJnNsLT5zdGF0czsKLX0KLQotCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCQkJU1RBTkRBUkQgWC4yNSBFTkNBUFNVTEFUSU9OCQkgIAkgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02ODIsNyArNjc1LDcgQEAKIAkJCXNsLT5yYnVmZltzbC0+cmNvdW50KytdID0gczsKIAkJCXJldHVybjsKIAkJfQotCQlzbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJc2wtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCX0KIH0KQEAgLTcxOSw2ICs3MTIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4MjVfYXN5X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0geDI1X2FzeV9vcGVuX2RldiwKKwkubmRvX3N0b3AJPSB4MjVfYXN5X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSB4MjVfYXN5X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CT0geDI1X2FzeV9jaGFuZ2VfbXR1LAorfTsKKwogLyogSW5pdGlhbGlzZSB0aGUgWC4yNSBkcml2ZXIuICBDYWxsZWQgYnkgdGhlIGRldmljZSBpbml0IGNvZGUgKi8KIHN0YXRpYyB2b2lkIHgyNV9hc3lfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTczNCwxMyArNzM1LDggQEAKIAkgKi8KIAogCWRldi0+bXR1CQk9IFNMX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0geDI1X2FzeV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmeDI1X2FzeV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWioyMDsKLQlkZXYtPm9wZW4JCT0geDI1X2FzeV9vcGVuX2RldjsKLQlkZXYtPnN0b3AJCT0geDI1X2FzeV9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgICAgID0geDI1X2FzeV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IHgyNV9hc3lfY2hhbmdlX210dTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CiAJZGV2LT5hZGRyX2xlbgkJPSAwOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfWDI1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaCBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmgKaW5kZXggNDE3NzAyMC4uOGYwZmMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaAorKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oCkBAIC0yOCwxMCArMjgsNiBAQAogICB1bnNpZ25lZCBjaGFyCQkqeGJ1ZmY7CQkvKiB0cmFuc21pdHRlciBidWZmZXIJCSovCiAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAqeGhlYWQ7ICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogICBpbnQgICAgICAgICAgICAgICAgICAgeGxlZnQ7ICAgICAgICAgIC8qIGJ5dGVzIGxlZnQgaW4gWE1JVCBxdWV1ZSAgICAgKi8KLQotICAvKiBYLjI1IGludGVyZmFjZSBzdGF0aXN0aWNzLiAqLwotICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogICBpbnQgICAgICAgICAgICAgICAgICAgYnVmZnNpemU7ICAgICAgIC8qIE1heCBidWZmZXJzIHNpemVzICAgICAgICAgICAgKi8KIAogICB1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEZsYWcgdmFsdWVzLyBtb2RlIGV0YwkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCmluZGV4IDNkMDA5NzEuLmFkNGU3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworKysgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKQEAgLTE3NzUsNyArMTc3NSw4IEBACiAvKgogICoJTW9kdWxlIHN1cHBvcnQKICAqLwotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiR2VuZXJpYyBaODVDMzAvWjg1MjMwIGludGVyZmFjZSBkcml2ZXIgdjAuMDJcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KKwlLRVJOX0lORk8gIkdlbmVyaWMgWjg1QzMwL1o4NTIzMCBpbnRlcmZhY2UgZHJpdmVyIHYwLjAyXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCB6ODUyMzBfaW5pdF9kcml2ZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZQppbmRleCAxNjk2ZTkzLi41ZDllMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCWRyaXZlci5vCVwKIAlmdy5vCQlcCiAJb3AtcmZraWxsLm8JXAorCXN5c2ZzLm8JCVwKIAluZXRkZXYubwlcCiAJdHgubwkJXAogCXJ4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCmluZGV4IDE1ZDlmNTEuLmIzY2FkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwpAQCAtNTIsNyArNTIsNiBAQAogICoKICAqIGkyNDAwbV9kZXZfaW5pdGFsaXplKCkgICAgICAgQ2FsbGVkIGJ5IGkyNDAwbV9kZXZfc3RhcnQoKQogICogICBpMjQwMG1fc2V0X2luaXRfY29uZmlnKCkKLSAqICAgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKCkKICAqICAgaTI0MDBtX2NtZF9nZXRfc3RhdGUoKQogICogaTI0MDBtX2Rldl9zaHV0ZG93bigpICAgICAgICBDYWxsZWQgYnkgaTI0MDBtX2Rldl9zdG9wKCkKICAqICAgaTI0MDBtLT5idXNfcmVzZXQoKQpAQCAtOTQyLDggKzk0MSw4IEBACiAvKiBGaXJtd2FyZSBpbnRlcmZhY2UgdmVyc2lvbnMgd2Ugc3VwcG9ydCAqLwogZW51bSB7CiAJSTI0MDBNX0hESXZfTUFKT1IgPSA5LAotCUkyNDAwTV9IREl2X01BSk9SXzIgPSA4LAogCUkyNDAwTV9IREl2X01JTk9SID0gMSwKKwlJMjQwME1fSERJdl9NSU5PUl8yID0gMiwKIH07CiAKIApAQCAtOTU5LDYgKzk1OCwxMCBAQAogICogTG9uZyBmdW5jdGlvbiwgYnV0IHF1aXRlIHNpbXBsZTsgZmlyc3QgY2h1bmsgbGF1bmNoZXMgdGhlIGNvbW1hbmQKICAqIGFuZCBkb3VibGUgY2hlY2tzIHRoZSByZXBseSBmb3IgdGhlIHJpZ2h0IFRMVi4gVGhlbiB3ZSBwcm9jZXNzIHRoZQogICogVExWICh3aGVyZSB0aGUgbWVhdCBpcykuCisgKgorICogT25jZSB3ZSBwcm9jZXNzIHRoZSBUTFYgdGhhdCBnaXZlcyB1cyB0aGUgZmlybXdhcmUncyBpbnRlcmZhY2UKKyAqIHZlcnNpb24sIHdlIGVuY29kZSBpdCBhbmQgc2F2ZSBpdCBpbiBpMjQwMG0tPmZ3X3ZlcnNpb24gZm9yIGZ1dHVyZQorICogcmVmZXJlbmNlLgogICovCiBpbnQgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKIHsKQEAgLTEwMDksMjIgKzEwMTIsMjAgQEAKIAltaW5vciA9IGxlMTZfdG9fY3B1KGw0bXYtPm1pbm9yKTsKIAlicmFuY2ggPSBsZTE2X3RvX2NwdShsNG12LT5icmFuY2gpOwogCXJlc3VsdCA9IC1FSU5WQUw7Ci0JaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SCi0JICAgICYmIG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SXzIpIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBtYWpvciBmdyBpbnRlcmZhY2UgdmVyc2lvbiAiCisJaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SKSB7CisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgbWFqb3IgZncgdmVyc2lvbiAiCiAJCQkiJXUuJXUuJXVcbiIsIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKIAkJZ290byBlcnJvcl9iYWRfbWFqb3I7CiAJfQotCWlmIChtYWpvciA9PSBJMjQwME1fSERJdl9NQUpPUl8yKQotCQlkZXZfZXJyKGRldiwgImRlcHJlY2F0ZWQgbWFqb3IgZncgaW50ZXJmYWNlIHZlcnNpb24gIgotCQkJIiV1LiV1LiV1XG4iLCBtYWpvciwgbWlub3IsIGJyYW5jaCk7CiAJcmVzdWx0ID0gMDsKLQlpZiAobWlub3IgIT0gSTI0MDBNX0hESXZfTUlOT1IpCi0JCWRldl93YXJuKGRldiwgInVudGVzdGVkIG1pbm9yIGZ3IGZpcm13YXJlIHZlcnNpb24gJXUuJXUuJXVcbiIsCisJaWYgKG1pbm9yIDwgSTI0MDBNX0hESXZfTUlOT1JfMiAmJiBtaW5vciA+IEkyNDAwTV9IREl2X01JTk9SKQorCQlkZXZfd2FybihkZXYsICJ1bnRlc3RlZCBtaW5vciBmdyB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkJIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKLWVycm9yX2JhZF9tYWpvcjoKKwkvKiBZZXMsIHdlIGlnbm9yZSB0aGUgYnJhbmNoIC0tIHdlIGRvbid0IGhhdmUgdG8gdHJhY2sgaXQgKi8KKwlpMjQwMG0tPmZ3X3ZlcnNpb24gPSBtYWpvciA8PCAxNiB8IG1pbm9yOwogCWRldl9pbmZvKGRldiwgImZpcm13YXJlIGludGVyZmFjZSB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkgbWFqb3IsIG1pbm9yLCBicmFuY2gpOworZXJyb3JfYmFkX21ham9yOgogZXJyb3Jfbm9fdGx2OgogZXJyb3JfY21kX2ZhaWxlZDoKIAlrZnJlZV9za2IoYWNrX3NrYik7CkBAIC0xMjIxLDYgKzEyMjIsNzcgQEAKIAogCiAvKioKKyAqIGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0IC0gU2V0IHRoZSBkZXZpY2UncyBpZGxlIG1vZGUgdGltZW91dAorICoKKyAqIEBpMjQwMG06IGkyNDAwbSBkZXZpY2UgZGVzY3JpcHRvcgorICoKKyAqIEBtc2VjczogbWlsbGlzZWNvbmRzIGZvciB0aGUgdGltZW91dCB0byBlbnRlciBpZGxlIG1vZGUuIEJldHdlZW4KKyAqICAgICAxMDAgdG8gMzAwMDAwICg1bSk7IDAgdG8gZGlzYWJsZS4gSW4gaW5jcmVtZW50cyBvZiAxMDAuCisgKgorICogQWZ0ZXIgdGhpcyBAbXNlY3Mgb2YgdGhlIGxpbmsgYmVpbmcgaWRsZSAobm8gZGF0YSBiZWluZyBzZW50IG9yCisgKiByZWNlaXZlZCksIHRoZSBkZXZpY2Ugd2lsbCBuZWdvdGlhdGUgd2l0aCB0aGUgYmFzZXN0YXRpb24gZW50ZXJpbmcKKyAqIGlkbGUgbW9kZSBmb3Igc2F2aW5nIHBvd2VyLiBUaGUgY29ubmVjdGlvbiBpcyBtYWludGFpbmVkLCBidXQKKyAqIGdldHRpbmcgb3V0IG9mIGl0IChkb25lIGluIHR4LmMpIHdpbGwgcmVxdWlyZSBzb21lIG5lZ290aWF0aW9uLAorICogcG9zc2libGUgY3J5cHRvIHJlLWhhbmRzaGFrZSBhbmQgYSBwb3NzaWJsZSBESENQIHJlLWxlYXNlLgorICoKKyAqIE9ubHkgYXZhaWxhYmxlIGlmIGZ3X3ZlcnNpb24gPj0gMHgwMDA5MDAwMi4KKyAqCisgKiBSZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqLworaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgdW5zaWduZWQgbXNlY3MpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKmFja19za2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGkyNDAwbV9sM2w0X2hkciBoZHI7CisJCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgY2l0OworCX0gKmNtZDsKKwljb25zdCBzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyICphY2s7CisJc2l6ZV90IGFja19sZW47CisJY2hhciBzdHJlcnJbMzJdOworCisJcmVzdWx0ID0gLUVOT1NZUzsKKwlpZiAoaTI0MDBtX2xlX3YxXzMoaTI0MDBtKSkKKwkJZ290byBlcnJvcl9hbGxvYzsKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3JfYWxsb2M7CisJY21kLT5oZHIudHlwZSA9IGNwdV90b19sZTE2KEkyNDAwTV9NVF9HRVRfU1RBVEUpOworCWNtZC0+aGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSAtIHNpemVvZihjbWQtPmhkcikpOworCWNtZC0+aGRyLnZlcnNpb24gPSBjcHVfdG9fbGUxNihJMjQwME1fTDNMNF9WRVJTSU9OKTsKKworCWNtZC0+Y2l0Lmhkci50eXBlID0KKwkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9USU1FT1VUKTsKKwljbWQtPmNpdC5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZC0+Y2l0LnRpbWVvdXQpKTsKKwljbWQtPmNpdC50aW1lb3V0ID0gY3B1X3RvX2xlMzIobXNlY3MpOworCisJYWNrX3NrYiA9IGkyNDAwbV9tc2dfdG9fZGV2KGkyNDAwbSwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChJU19FUlIoYWNrX3NrYikpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaXNzdWUgJ3NldCBpZGxlIHRpbWVvdXQnIGNvbW1hbmQ6ICIKKwkJCSIlbGRcbiIsIFBUUl9FUlIoYWNrX3NrYikpOworCQlyZXN1bHQgPSBQVFJfRVJSKGFja19za2IpOworCQlnb3RvIGVycm9yX21zZ190b19kZXY7CisJfQorCWFjayA9IHdpbWF4X21zZ19kYXRhX2xlbihhY2tfc2tiLCAmYWNrX2xlbik7CisJcmVzdWx0ID0gaTI0MDBtX21zZ19jaGVja19zdGF0dXMoYWNrLCBzdHJlcnIsIHNpemVvZihzdHJlcnIpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIidzZXQgaWRsZSB0aW1lb3V0JyAoMHglMDR4KSBjb21tYW5kIGZhaWxlZDogIgorCQkJIiVkIC0gJXNcbiIsIEkyNDAwTV9NVF9HRVRfU1RBVEUsIHJlc3VsdCwgc3RyZXJyKTsKKwkJZ290byBlcnJvcl9jbWRfZmFpbGVkOworCX0KKwlyZXN1bHQgPSAwOworCWtmcmVlX3NrYihhY2tfc2tiKTsKK2Vycm9yX2NtZF9mYWlsZWQ6CitlcnJvcl9tc2dfdG9fZGV2OgorCWtmcmVlKGNtZCk7CitlcnJvcl9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgogICogaTI0MDBtX2Rldl9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIG9uY2UgY29tbXVuaWNhdGlvbnMgYXJlIHJlYWR5CiAgKgogICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKQEAgLTEyMzgsMjYgKzEzMTAsNTUgQEAKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV9wYXJhbWV0ZXJzIGlkbGVfcGFyYW1zOworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgaWRsZV90aW1lb3V0OworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kMmhfZGF0YV9mb3JtYXQgZGY7CisJc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2RsX2hvc3RfcmVvcmRlciBkbGhyOwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X2hkciAqYXJnc1s5XTsKIAl1bnNpZ25lZCBhcmdjID0gMDsKIAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBVc2VsZXNzIGZvciBub3cuLi5taWdodCBjaGFuZ2UgKi8KKwkvKiBEaXNhYmxlIGlkbGUgbW9kZT8gKGVuYWJsZWQgYnkgZGVmYXVsdCkgKi8KIAlpZiAoaTI0MDBtX2lkbGVfbW9kZV9kaXNhYmxlZCkgewotCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9Ci0JCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMpOwotCQlpZGxlX3BhcmFtcy5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCi0JCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOwotCQlpZGxlX3BhcmFtcy5pZGxlX3RpbWVvdXQgPSAwOwotCQlpZGxlX3BhcmFtcy5pZGxlX3BhZ2luZ19pbnRlcnZhbCA9IDA7Ci0JCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCWlmIChpMjQwMG1fbGVfdjFfMyhpMjQwMG0pKSB7CisJCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTKTsKKwkJCWlkbGVfcGFyYW1zLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOworCQkJaWRsZV9wYXJhbXMuaWRsZV90aW1lb3V0ID0gMDsKKwkJCWlkbGVfcGFyYW1zLmlkbGVfcGFnaW5nX2ludGVydmFsID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCX0gZWxzZSB7CisJCQlpZGxlX3RpbWVvdXQuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCk7CisJCQlpZGxlX3RpbWVvdXQuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJCXNpemVvZihpZGxlX3RpbWVvdXQpIC0gc2l6ZW9mKGlkbGVfdGltZW91dC5oZHIpKTsKKwkJCWlkbGVfdGltZW91dC50aW1lb3V0ID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3RpbWVvdXQuaGRyOworCQl9CisJfQorCWlmIChpMjQwMG1fZ2VfdjFfNChpMjQwMG0pKSB7CisJCS8qIEVuYWJsZSBleHRlbmRlZCBSWCBkYXRhIGZvcm1hdD8gKi8KKwkJZGYuaGRyLnR5cGUgPQorCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUKTsKKwkJZGYuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJc2l6ZW9mKGRmKSAtIHNpemVvZihkZi5oZHIpKTsKKwkJZGYuZm9ybWF0ID0gMTsKKwkJYXJnc1thcmdjKytdID0gJmRmLmhkcjsKKworCQkvKiBFbmFibGUgUlggZGF0YSByZW9yZGVyaW5nPworCQkgKiAoc3dpdGNoIGZsaXBwZWQgaW4gcnguYzppMjQwMG1fcnhfc2V0dXAoKSBhZnRlciBmdyB1cGxvYWQpICovCisJCWlmIChpMjQwMG0tPnJ4X3Jlb3JkZXIpIHsKKwkJCWRsaHIuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUik7CisJCQlkbGhyLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoZGxocikgLSBzaXplb2YoZGxoci5oZHIpKTsKKwkJCWRsaHIucmVvcmRlciA9IDE7CisJCQlhcmdzW2FyZ2MrK10gPSAmZGxoci5oZHI7CisJCX0KIAl9CiAJcmVzdWx0ID0gaTI0MDBtX3NldF9pbml0X2NvbmZpZyhpMjQwMG0sIGFyZ3MsIGFyZ2MpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yOwotCXJlc3VsdCA9IGkyNDAwbV9maXJtd2FyZV9jaGVjayhpMjQwMG0pOwkvKiBmdyB2ZXJzaW9ucyBvaz8gKi8KLQlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcjsKIAkvKgogCSAqIFVwZGF0ZSBzdGF0ZTogSGVyZSBpdCBqdXN0IGNhbGxzIGEgZ2V0IHN0YXRlOyBwYXJzaW5nIHRoZQogCSAqIHJlc3VsdCAoU3lzdGVtIFN0YXRlIFRMViBhbmQgUkYgU3RhdHVzIFRMViBbZG9uZSBpbiB0aGUgcngKQEAgLTEyNjYsNiArMTM2Nyw4IEBACiAJICovCiAJcmVzdWx0ID0gaTI0MDBtX2NtZF9nZXRfc3RhdGUoaTI0MDBtKTsKIGVycm9yOgorCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBkZXZpY2U6ICVkXG4iLCByZXN1bHQpOwogCWRfZm5lbmQoMywgZGV2LCAiKGkyNDAwbSAlcCkgPSAlZFxuIiwgaTI0MDBtLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmgKaW5kZXggMzE4M2JhYS4uNDhmYmZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kZWJ1Zy1sZXZlbHMuaApAQCAtMzgsNiArMzgsNyBAQAogCURfU1VCTU9EVUxFX0RFQ0xBUkUobmV0ZGV2KSwKIAlEX1NVQk1PRFVMRV9ERUNMQVJFKHJma2lsbCksCiAJRF9TVUJNT0RVTEVfREVDTEFSRShyeCksCisJRF9TVUJNT0RVTEVfREVDTEFSRShzeXNmcyksCiAJRF9TVUJNT0RVTEVfREVDTEFSRSh0eCksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggZTgwYTBiNi4uMDdhNTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtNDgsNiArNDgsNyBAQAogICogICAgICAgaTI0MDBtX2Rldl9ib290c3RyYXAoKQogICogICAgICAgaTI0MDBtX3R4X3NldHVwKCkKICAqICAgICAgIGkyNDAwbS0+YnVzX2Rldl9zdGFydCgpCisgKiAgICAgICBpMjQwMG1fZmlybXdhcmVfY2hlY2soKQogICogICAgICAgaTI0MDBtX2NoZWNrX21hY19hZGRyKCkKICAqICAgd2ltYXhfZGV2X2FkZCgpCiAgKgpAQCAtNzUsNiArNzYsMTEgQEAKIAkJICJJZiB0cnVlLCB0aGUgZGV2aWNlIHdpbGwgbm90IGVuYWJsZSBpZGxlIG1vZGUgbmVnb3RpYXRpb24gIgogCQkgIndpdGggdGhlIGJhc2Ugc3RhdGlvbiAod2hlbiBjb25uZWN0ZWQpIHRvIHNhdmUgcG93ZXIuIik7CiAKK2ludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsJLyogMCAocnggcmVvcmRlciBlbmFibGVkKSBieSBkZWZhdWx0ICovCittb2R1bGVfcGFyYW1fbmFtZWQocnhfcmVvcmRlcl9kaXNhYmxlZCwgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X3Jlb3JkZXJfZGlzYWJsZWQsCisJCSAiSWYgdHJ1ZSwgUlggcmVvcmRlcmluZyB3aWxsIGJlIGRpc2FibGVkLiIpOworCiAvKioKICAqIGkyNDAwbV9xdWV1ZV93b3JrIC0gc2NoZWR1bGUgd29yayBvbiBhIGkyNDAwbSdzIHF1ZXVlCiAgKgpAQCAtMzk1LDYgKzQwMSw5IEBACiAJcmVzdWx0ID0gaTI0MDBtX3R4X3NldHVwKGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfdHhfc2V0dXA7CisJcmVzdWx0ID0gaTI0MDBtX3J4X3NldHVwKGkyNDAwbSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfcnhfc2V0dXA7CiAJcmVzdWx0ID0gaTI0MDBtLT5idXNfZGV2X3N0YXJ0KGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYnVzX2Rldl9zdGFydDsKQEAgLTQwNCw2ICs0MTMsOSBAQAogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJZ290byBlcnJvcl9jcmVhdGVfd29ya3F1ZXVlOwogCX0KKwlyZXN1bHQgPSBpMjQwMG1fZmlybXdhcmVfY2hlY2soaTI0MDBtKTsJLyogZncgdmVyc2lvbnMgb2s/ICovCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfZndfY2hlY2s7CiAJLyogQXQgdGhpcyBwb2ludCBpcyBvayB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKi8KIAlyZXN1bHQgPSBpMjQwMG1fY2hlY2tfbWFjX2FkZHIoaTI0MDBtKTsKIAlpZiAocmVzdWx0IDwgMCkKQEAgLTQyMSwxMCArNDMzLDEzIEBACiAKIGVycm9yX2Rldl9pbml0aWFsaXplOgogZXJyb3JfY2hlY2tfbWFjX2FkZHI6CitlcnJvcl9md19jaGVjazoKIAlkZXN0cm95X3dvcmtxdWV1ZShpMjQwMG0tPndvcmtfcXVldWUpOwogZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZToKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOwogZXJyb3JfYnVzX2Rldl9zdGFydDoKKwlpMjQwMG1fcnhfcmVsZWFzZShpMjQwMG0pOworZXJyb3Jfcnhfc2V0dXA6CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIGVycm9yX3R4X3NldHVwOgogZXJyb3JfYm9vdHN0cmFwOgpAQCAtNDcyLDYgKzQ4Nyw3IEBACiAJaTI0MDBtLT5yZWFkeSA9IDA7CiAJZGVzdHJveV93b3JrcXVldWUoaTI0MDBtLT53b3JrX3F1ZXVlKTsKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOworCWkyNDAwbV9yeF9yZWxlYXNlKGkyNDAwbSk7CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIAl3aW1heF9zdGF0ZV9jaGFuZ2Uod2ltYXhfZGV2LCBXSU1BWF9TVF9ET1dOKTsKIAlkX2ZuZW5kKDMsIGRldiwgIihpMjQwMG0gJXApID0gMFxuIiwgaTI0MDBtKTsKQEAgLTYxMyw3ICs2MjksNyBAQAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKIAogCXNucHJpbnRmKHdpbWF4X2Rldi0+bmFtZSwgc2l6ZW9mKHdpbWF4X2Rldi0+bmFtZSksCi0JCSAiaTI0MDBtLSVzOiVzIiwgZGV2LT5idXMtPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJICJpMjQwMG0tJXM6JXMiLCBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAKIAlpMjQwMG0tPmJtX2NtZF9idWYgPSBremFsbG9jKEkyNDAwTV9CTV9DTURfQlVGX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChpMjQwMG0tPmJtX2NtZF9idWYgPT0gTlVMTCkgewpAQCAtNjU3LDYgKzY3MywxMSBAQAogCXdpbWF4X3N0YXRlX2NoYW5nZSh3aW1heF9kZXYsIFdJTUFYX1NUX1VOSU5JVElBTElaRUQpOwogCiAJLyogTm93IHNldHVwIGFsbCB0aGF0IHJlcXVpcmVzIGEgcmVnaXN0ZXJlZCBuZXQgYW5kIHdpbWF4IGRldmljZS4gKi8KKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ldF9kZXYtPmRldi5rb2JqLCAmaTI0MDBtX2Rldl9hdHRyX2dyb3VwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBpMjQwMG0ncyBzeXNmczogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc3lzZnNfc2V0dXA7CisJfQogCXJlc3VsdCA9IGkyNDAwbV9kZWJ1Z2ZzX2FkZChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IHNldHVwIGkyNDAwbSdzIGRlYnVnZnM6ICVkXG4iLCByZXN1bHQpOwpAQCAtNjY2LDYgKzY4Nyw5IEBACiAJcmV0dXJuIHJlc3VsdDsKIAogZXJyb3JfZGVidWdmc19zZXR1cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CitlcnJvcl9zeXNmc19zZXR1cDoKIAl3aW1heF9kZXZfcm0oJmkyNDAwbS0+d2ltYXhfZGV2KTsKIGVycm9yX3dpbWF4X2Rldl9hZGQ6CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CkBAIC02OTcsNiArNzIxLDggQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYpOwogCiAJaTI0MDBtX2RlYnVnZnNfcm0oaTI0MDBtKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CiAJd2ltYXhfZGV2X3JtKCZpMjQwMG0tPndpbWF4X2Rldik7CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoaTI0MDBtLT53aW1heF9kZXYubmV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCmluZGV4IDFkODI3MWYuLjY3NWM2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCiAKIHN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0FDS19CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCisJY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9BQ0tfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKIH07CiAKIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChvZmZzZXQgKyBzZWN0aW9uX3NpemUgPiBiY2ZfbGVuKSB7CiAJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBiYWQgc2VjdGlvbiAjJXp1LCAiCiAJCQkJImVuZCAoQCV6dSkgYmV5b25kIEVPRiAoQCV6dSlcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgc2VjdGlvbiwKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHNlY3Rpb24sCiAJCQkJb2Zmc2V0ICsgc2VjdGlvbl9zaXplLCAgYmNmX2xlbik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcl9zZWN0aW9uX2JleW9uZF9lb2Y7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCQkgICAgJmFjaywgc2l6ZW9mKGFjayksIEkyNDAwTV9CTV9DTURfUkFXKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNlY3Rpb24gIyV6dSAoQCV6dSAlenUgQikgIgotCQkJCSJmYWlsZWQgJWRcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIHNlY3Rpb24sCisJCQkJImZhaWxlZCAlZFxuIiwgaTI0MDBtLT5md19uYW1lLCBzZWN0aW9uLAogCQkJCW9mZnNldCwgc2l6ZW9mKCpiaCkgKyBkYXRhX3NpemUsIChpbnQpIHJldCk7CiAJCQlnb3RvIGVycm9yX3NlbmQ7CiAJCX0KQEAgLTc3MSw4ICs3NzEsOCBAQAogaW50IGkyNDAwbV9kbmxvYWRfaW5pdF9ub25zaWduZWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQogewogI2RlZmluZSBQT0tFKGEsIGQpIHsJCQkJCVwKLQkuYWRkcmVzcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYSksCQlcCi0JLmRhdGEgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKGQpCQlcCisJLmFkZHJlc3MgPSBjcHVfdG9fbGUzMihhKSwJCVwKKwkuZGF0YSA9IGNwdV90b19sZTMyKGQpCQlcCiB9CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJCV9fbGUzMiBhZGRyZXNzOwpAQCAtODc0LDcgKzg3NCw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogbm9uLXNpZ25lZCBkb3dubG9hZCAiCiAJCQkJImluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgcmVzdWx0KTsKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHJlc3VsdCk7CiAJfSBlbHNlIGlmIChpMjQwMG0tPnNib290ID09IDAKIAkJICYmIChtb2R1bGVfaWQgJiBJMjQwME1fQkNGX01PRF9JRF9QT0tFUykpIHsKIAkJLyogbm9uLXNpZ25lZCBib290IHByb2Nlc3Mgd2l0aCBwb2tlcywgbm90aGluZyB0byBkbyAqLwpAQCAtODg2LDcgKzg4Niw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogc2lnbmVkIGJvb3QgZG93bmxvYWQgIgogCQkJCSJpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJlc3VsdCk7CisJCQkJaTI0MDBtLT5md19uYW1lLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtOTE1LDcgKzkxNSw3IEBACiAJaWYgKGJjZl9zaXplIDwgc2l6ZW9mKCpiY2YpKSB7CS8qIGJpZyBlbm91Z2ggaGVhZGVyPyAqLwogCQlkZXZfZXJyKGRldiwgImZpcm13YXJlICVzIHRvbyBzaG9ydDogIgogCQkJIiV6dSBCIHZzICV6dSAoYXQgbGVhc3QpIGV4cGVjdGVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgYmNmX3NpemUsIHNpemVvZigqYmNmKSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplb2YoKmJjZikpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtOTMxLDcgKzkzMSw3IEBACiAJaWYgKGJjZl9zaXplICE9IHNpemUpIHsJCS8qIGFubm95aW5nbHkgcGFyYW5vaWQgKi8KIAkJZGV2X2VycihkZXYsICJmaXJtd2FyZSAlczogYmFkIHNpemUsIGdvdCAiCiAJCQkiJXp1IEIgdnMgJXUgZXhwZWN0ZWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk0Myw3ICs5NDMsNyBAQAogCiAJaWYgKG1vZHVsZV90eXBlICE9IDYpIHsJCS8qIGJ1aWx0IGZvciB0aGUgcmlnaHQgaGFyZHdhcmU/ICovCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzOiB1bmV4cGVjdGVkIG1vZHVsZSB0eXBlIDB4JXg7ICIKLQkJCSJhYm9ydGluZ1xuIiwgaTI0MDBtLT5idXNfZndfbmFtZSwgbW9kdWxlX3R5cGUpOworCQkJImFib3J0aW5nXG4iLCBpMjQwMG0tPmZ3X25hbWUsIG1vZHVsZV90eXBlKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk1MSwxMCArOTUxLDEwIEBACiAJcmVzdWx0ID0gMDsKIAlpZiAobW9kdWxlX3ZlbmRvciAhPSAweDgwODYpCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzPyB1bmV4cGVjdGVkIHZlbmRvciAweCUwNHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBtb2R1bGVfdmVuZG9yKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgbW9kdWxlX3ZlbmRvcik7CiAJaWYgKGRhdGUgPCAweDIwMDgwMzAwKQogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlcz8gYnVpbGQgZGF0ZSB0b28gb2xkICUwOHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBkYXRlKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgZGF0ZSk7CiBlcnJvcjoKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkJZ290byBlcnJvcl9kZXZfcmVib290ZWQ7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJmdyAlczogZG93bmxvYWQgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIHJldCk7CiAJCWdvdG8gZXJyb3JfZG5sb2FkX2JjZjsKIAl9CiAKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImZ3ICVzOiAiCiAJCQkiZG93bmxvYWQgZmluYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOworCQkJaTI0MDBtLT5md19uYW1lLCByZXQpOwogCQlnb3RvIGVycm9yX2RubG9hZF9maW5hbGl6ZTsKIAl9CiAKIAlkX3ByaW50ZigyLCBkZXYsICJmdyAlcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcbiIsCi0JCSBpMjQwMG0tPmJ1c19md19uYW1lKTsKKwkJIGkyNDAwbS0+ZndfbmFtZSk7CiAJaTI0MDBtLT5ib290X21vZGUgPSAwOwogZXJyb3JfZG5sb2FkX2ZpbmFsaXplOgogZXJyb3JfZG5sb2FkX2JjZjoKQEAgLTEwNjcsMjggKzEwNjcsNDEgQEAKICAqLwogaW50IGkyNDAwbV9kZXZfYm9vdHN0cmFwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgZW51bSBpMjQwMG1fYnJpIGZsYWdzKQogewotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBpdHIgPSAwOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fYmNmX2hkciAqYmNmOwkvKiBGaXJtd2FyZSBkYXRhICovCisJY29uc3QgY2hhciAqZndfbmFtZTsKIAogCWRfZm5zdGFydCg1LCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBMb2FkIGZpcm13YXJlIGZpbGVzIHRvIG1lbW9yeS4gKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgaTI0MDBtLT5idXNfZndfbmFtZSwgZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiZncgJXM6IHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7Ci0JCWdvdG8gZXJyb3JfZndfcmVxOwotCX0KLQliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKIAorCS8qIExvYWQgZmlybXdhcmUgZmlsZXMgdG8gbWVtb3J5LiAqLworCWl0ciA9IDA7CisJd2hpbGUoMSkgeworCQlmd19uYW1lID0gaTI0MDBtLT5idXNfZndfbmFtZXNbaXRyXTsKKwkJaWYgKGZ3X25hbWUgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZSBpbWFnZVxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnJvcl9ub19mdzsKKwkJfQorCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgZGV2KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CQkvKiBnb3QgaXQgKi8KKwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBjYW5ub3QgbG9hZCBmaWxlOiAlZFxuIiwKKwkJCQlmd19uYW1lLCByZXQpOworCQlpdHIrKzsKKwl9CisKKwliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKKwlpMjQwMG0tPmZ3X25hbWUgPSBmd19uYW1lOwogCXJldCA9IGkyNDAwbV9md19jaGVjayhpMjQwMG0sIGJjZiwgZnctPnNpemUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2Z3X2JhZDsKIAlyZXQgPSBpMjQwMG1fZndfZG5sb2FkKGkyNDAwbSwgYmNmLCBmdy0+c2l6ZSwgZmxhZ3MpOwogZXJyb3JfZndfYmFkOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotZXJyb3JfZndfcmVxOgorZXJyb3Jfbm9fZnc6CiAJZF9mbmVuZCg1LCBkZXYsICIoaTI0MDBtICVwKSA9ICVkXG4iLCBpMjQwMG0sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCAzYjlkMjdlYS4uM2FlMmRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaApAQCAtMTU2LDEwICsxNTYsNiBAQAogfTsKIAogCi0vKiBGaXJtd2FyZSB2ZXJzaW9uIHdlIHJlcXVlc3Qgd2hlbiBwdWxsaW5nIHRoZSBmdyBpbWFnZSBmaWxlICovCi0jZGVmaW5lIEkyNDAwTV9GV19WRVJTSU9OICIxLjQiCi0KLQogLyoqCiAgKiBpMjQwMG1fcmVzZXRfdHlwZSAtIG1ldGhvZHMgdG8gcmVzZXQgYSBkZXZpY2UKICAqCkBAIC0xNzgsNiArMTc0LDcgQEAKIH07CiAKIHN0cnVjdCBpMjQwMG1fcmVzZXRfY3R4Oworc3RydWN0IGkyNDAwbV9yb3E7CiAKIC8qKgogICogc3RydWN0IGkyNDAwbSAtIGRlc2NyaXB0b3IgZm9yIGFuIEludGVsIDI0MDBtCkBAIC0yNDIsMTAgKzIzOSwxNCBAQAogICogICAgIFRoZSBjYWxsZXIgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBhCiAgKiAgICAgYmFya2VyIHRoYXQgaW5kaWNhdGVzIHRoZSBkZXZpY2UgZ29pbmcgaW50byByZXNldCBtb2RlLgogICoKLSAqIEBidXNfZndfbmFtZTogW2ZpbGxdIG5hbWUgb2YgdGhlIGZpcm13YXJlIGltYWdlIChpbiBtb3N0IGNhc2VzLAotICogICAgIHRoZXkgYXJlIGFsbCB0aGUgc2FtZSBmb3IgYSBzaW5nbGUgcmVsZWFzZSwgZXhjZXB0IHRoYXQgdGhleQotICogICAgIGhhdmUgdGhlIHR5cGUgb2YgdGhlIGJ1cyBlbWJlZGRlZCBpbiB0aGUgbmFtZSAoZWc6Ci0gKiAgICAgaTI0MDBtLWZ3LVgtVkVSU0lPTi5zYmNmLCB3aGVyZSBYIGlzIHRoZSBidXMgbmFtZSkuCisgKiBAYnVzX2Z3X25hbWVzOiBbZmlsbF0gYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlCisgKiAgICAgZmlybXdhcmUgaW1hZ2VzIHRvIHRyeSBsb2FkaW5nLiBUaGlzIGlzIG1hZGUgYSBsaXN0IHNvIHdlIGNhbgorICogICAgIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBmaXJtd2FyZSByZWxlYXNlcyAoZWc6IGlmIHdlCisgKiAgICAgY2FuJ3QgZmluZCB0aGUgZGVmYXVsdCB2MS40LCB3ZSB0cnkgdjEuMykuIEluIGdlbmVyYWwsIHRoZSBuYW1lCisgKiAgICAgc2hvdWxkIGJlIGkyNDAwbS1mdy1YLVZFUlNJT04uc2JjZiwgd2hlcmUgWCBpcyB0aGUgYnVzIG5hbWUuCisgKiAgICAgVGhlIGxpc3QgaXMgdHJpZWQgaW4gb3JkZXIgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBsb2FkcyBpcworICogICAgIHVzZWQuIFRoZSBmdyBsb2FkZXIgd2lsbCBzZXQgaTI0MDBtLT5md19uYW1lIHRvIHBvaW50IHRvIHRoZQorICogICAgIGFjdGl2ZSBmaXJtd2FyZSBpbWFnZS4KICAqCiAgKiBAYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOiBbZmlsbF0gU2V0IHRvIHRydWUgaWYgdGhlIGRldmljZSdzIE1BQwogICogICAgIGFkZHJlc3MgcHJvdmlkZWQgaW4gYm9vdCBtb2RlIGlzIGtpbmQgb2YgYnJva2VuIGFuZCBuZWVkcyB0bwpAQCAtMjU3LDYgKzI1OCw5IEBACiAgKiAgICAgZm9yY2UgdGhpcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgc28gdGhhdCB3ZSBjYW4gZ2V0IGZyb20KICAqICAgICBuZXRkZXZfcHJpdigpIHRoZSByaWdodCBwb2ludGVyLgogICoKKyAqIEByeF9yZW9yZGVyOiAxIGlmIFJYIHJlb3JkZXJpbmcgaXMgZW5hYmxlZDsgdGhpcyBjYW4gb25seSBiZQorICogICAgIHNldCBhdCBwcm9iZSB0aW1lLgorICoKICAqIEBzdGF0ZTogZGV2aWNlJ3Mgc3RhdGUgKGFzIHJlcG9ydGVkIGJ5IGl0KQogICoKICAqIEBzdGF0ZV93cTogd2FpdHF1ZXVlIHRoYXQgaXMgd29rZW4gdXAgd2hlbmV2ZXIgdGhlIHN0YXRlIGNoYW5nZXMKQEAgLTMxMyw2ICszMTcsMTIgQEAKICAqCiAgKiBAcnhfc2l6ZV9tYXg6IGJ1Z2dlc3QgUlggbWVzc2FnZSByZWNlaXZlZC4KICAqCisgKiBAcnhfcm9xOiBSWCBSZU9yZGVyIHF1ZXVlcy4gKGZ3ID49IHYxLjQpIFdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQKKyAqICAgICBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2Ugd2lsbCBhc2sgdGhlIGRyaXZlciB0byBob2xkIGNlcnRhaW4KKyAqICAgICBwYWNrZXRzIHVudGlsIHRoZSBvbmVzIHRoYXQgYXJlIHJlY2VpdmVkIG91dCBvZiBvcmRlciBjYW4gYmUKKyAqICAgICBkZWxpdmVyZWQuIFRoZW4gdGhlIGRyaXZlciBjYW4gcmVsZWFzZSB0aGVtIHRvIHRoZSBob3N0LiBTZWUKKyAqICAgICBkcml2ZXJzL25ldC9pMjQwMG0vcnguYyBmb3IgZGV0YWlscy4KKyAqCiAgKiBAaW5pdF9tdXRleDogTXV0ZXggdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIGRldmljZSBicmluZ3VwCiAgKiAgICAgc2VxdWVuY2U7IHRoaXMgd2F5IGlmIHRoZSBkZXZpY2UgcmVib290cyBpbiB0aGUgbWlkZGxlLCB3ZQogICogICAgIGRvbid0IHRyeSB0byBkbyBhIGJyaW5ndXAgYWdhaW4gd2hpbGUgd2UgYXJlIHRlYXJpbmcgZG93biB0aGUKQEAgLTM2NCw2ICszNzQsMTEgQEAKICAqICAgICBUaGVzZSBoYXZlIHRvIGJlIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBhIGNoaWxkIG9mCiAgKiAgICAgKHdpbWF4X2Rldi0+ZGVidWdmc19kZW50cnkpIHNvIHRoZXkgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUKICAqICAgICBtb2R1bGUgdW5sb2FkcywgYXMgd2UgZG9uJ3Qga2VlcCBlYWNoIGRlbnRyeS4KKyAqCisgKiBAZndfbmFtZTogbmFtZSBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyAqCisgKiBAZndfdmVyc2lvbjogdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlLCBNYWpvci5taW5vciwKKyAqICAgICBlbmNvZGVkIGluIHRoZSBoaWdoIHdvcmQgYW5kIGxvdyB3b3JkIChtYWpvciA8PCAxNiB8IG1pbm9yKS4KICAqLwogc3RydWN0IGkyNDAwbSB7CiAJc3RydWN0IHdpbWF4X2RldiB3aW1heF9kZXY7CS8qIEZJUlNUISBTZWUgZG9jICovCkBAIC0zNzIsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBib290X21vZGU6MTsJCS8qIGlzIHRoZSBkZXZpY2UgaW4gYm9vdCBtb2RlPyAqLwogCXVuc2lnbmVkIHNib290OjE7CQkvKiBzaWduZWQgb3IgdW5zaWduZWQgZncgYm9vdCAqLwogCXVuc2lnbmVkIHJlYWR5OjE7CQkvKiBhbGwgcHJvYmluZyBzdGVwcyBkb25lICovCisJdW5zaWduZWQgcnhfcmVvcmRlcjoxOwkJLyogUlggcmVvcmRlciBpcyBlbmFibGVkICovCiAJdTggdHJhY2VfbXNnX2Zyb21fdXNlcjsJCS8qIGVjaG8gcnggbXNncyB0byAndHJhY2UnIHBpcGUgKi8KIAkJCQkJLyogdHlwZWQgdTggc28gZGVidWdmcy91OCBjYW4gdHdlYWsgKi8KIAllbnVtIGkyNDAwbV9zeXN0ZW1fc3RhdGUgc3RhdGU7CkBAIC0zODgsNyArNDA0LDcgQEAKIAkJCQkgICBzaXplX3QsIGludCBmbGFncyk7CiAJc3NpemVfdCAoKmJ1c19ibV93YWl0X2Zvcl9hY2spKHN0cnVjdCBpMjQwMG0gKiwKIAkJCQkgICAgICAgc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciAqLCBzaXplX3QpOwotCWNvbnN0IGNoYXIgKmJ1c19md19uYW1lOworCWNvbnN0IGNoYXIgKipidXNfZndfbmFtZXM7CiAJdW5zaWduZWQgYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOjE7CiAKIAlzcGlubG9ja190IHR4X2xvY2s7CQkvKiBwcm90ZWN0IFRYIHN0YXRlICovCkBAIC00MDAsMTAgKzQxNiwxMSBAQAogCXVuc2lnbmVkIHR4X3BsX251bSwgdHhfcGxfbWF4LCB0eF9wbF9taW4sCiAJCXR4X251bSwgdHhfc2l6ZV9hY2MsIHR4X3NpemVfbWluLCB0eF9zaXplX21heDsKIAotCS8qIFJYIHN0YXRzICovCisJLyogUlggc3R1ZmYgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0IFJYIHN0YXRlICovCiAJdW5zaWduZWQgcnhfcGxfbnVtLCByeF9wbF9tYXgsIHJ4X3BsX21pbiwKIAkJcnhfbnVtLCByeF9zaXplX2FjYywgcnhfc2l6ZV9taW4sIHJ4X3NpemVfbWF4OworCXN0cnVjdCBpMjQwMG1fcm9xICpyeF9yb3E7CS8qIG5vdCB1bmRlciByeF9sb2NrISAqLwogCiAJc3RydWN0IG11dGV4IG1zZ19tdXRleDsJCS8qIHNlcmlhbGl6ZSBjb21tYW5kIGV4ZWN1dGlvbiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIG1zZ19jb21wbGV0aW9uOwpAQCAtNDIxLDYgKzQzOCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKndha2VfdHhfc2tiOwogCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CisJY29uc3QgY2hhciAqZndfbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlybXdhcmUgaW1hZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGZ3X3ZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSAqLwogfTsKIAogCkBAIC00MzUsNiArNDU0LDcgQEAKIAl3aW1heF9kZXZfaW5pdCgmaTI0MDBtLT53aW1heF9kZXYpOwogCiAJaTI0MDBtLT5ib290X21vZGUgPSAxOworCWkyNDAwbS0+cnhfcmVvcmRlciA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTI0MDBtLT5zdGF0ZV93cSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaTI0MDBtLT50eF9sb2NrKTsKQEAgLTU3OCwxMiArNTk4LDE5IEBACiAgKiBEcml2ZXIgLyBkZXZpY2Ugc2V0dXAgYW5kIGludGVybmFsIGZ1bmN0aW9ucwogICovCiBleHRlcm4gdm9pZCBpMjQwMG1fbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK2V4dGVybiBpbnQgaTI0MDBtX3N5c2ZzX3NldHVwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CiBleHRlcm4gaW50IGkyNDAwbV90eF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOwogZXh0ZXJuIHZvaWQgaTI0MDBtX3dha2VfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBpMjQwMG1fdHhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICopOwogCitleHRlcm4gaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3J4X3JlbGVhc2Uoc3RydWN0IGkyNDAwbSAqKTsKKwogZXh0ZXJuIHZvaWQgaTI0MDBtX25ldF9yeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkLAogCQkJICBjb25zdCB2b2lkICosIGludCk7CitleHRlcm4gdm9pZCBpMjQwMG1fbmV0X2VyeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosCisJCQkgICBlbnVtIGkyNDAwbV9jcyk7CiBlbnVtIGkyNDAwbV9wdDsKIGV4dGVybiBpbnQgaTI0MDBtX3R4KHN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGVudW0gaTI0MDBtX3B0KTsKIApAQCAtNjY0LDE3ICs2OTEsMTcgQEAKIGV4dGVybiB2b2lkIGkyNDAwbV90eF9tc2dfc2VudChzdHJ1Y3QgaTI0MDBtICopOwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9OQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX05CT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpCiB9OwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9TQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1NCT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpCiB9OwogCiAKQEAgLTcyMSw2ICs3NDgsNyBAQAogZXh0ZXJuIGludCBpMjQwMG1fZmlybXdhcmVfY2hlY2soc3RydWN0IGkyNDAwbSAqKTsKIGV4dGVybiBpbnQgaTI0MDBtX3NldF9pbml0X2NvbmZpZyhzdHJ1Y3QgaTI0MDBtICosCiAJCQkJICBjb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgKiosIHNpemVfdCk7CitleHRlcm4gaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKiwgdW5zaWduZWQpOwogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9nZXRfZXBkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgaW50IGVwKQpAQCAtNzMzLDYgKzc2MSwzMiBAQAogZXh0ZXJuIHZvaWQgaTI0MDBtX3JlcG9ydF90bHZfcmZfc3dpdGNoZXNfc3RhdHVzKAogCXN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzICopOwogCisvKgorICogSGVscGVycyBmb3IgZmlybXdhcmUgYmFja3dhcmRzIGNvbXBhYmlsaXR5CisgKgorICogQXMgd2UgYWltIHRvIHN1cHBvcnQgYXQgbGVhc3QgdGhlIGZpcm13YXJlIHZlcnNpb24gdGhhdCB3YXMKKyAqIHJlbGVhc2VkIHdpdGggdGhlIHByZXZpb3VzIGtlcm5lbC9kcml2ZXIgcmVsZWFzZSwgc29tZSBjb2RlIHdpbGwgYmUKKyAqIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgZGVwZW5kaW5nIG9uIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLiBPbiBlYWNoCisgKiByZWxlYXNlLCB0aGUgY29kZSB0byBzdXBwb3J0IGZ3IHJlbGVhc2VzIHBhc3QgdGhlIGxhc3QgdHdvIG9uZXMKKyAqIHdpbGwgYmUgcHVyZ2VkLgorICoKKyAqIEJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhpcyBtYWNyb3MsIGl0IGlzIGVhc2llciB0byBrZWVwIGl0IGEgdGFiCisgKiBvbiB3aGF0IGhhcyB0byBnbyBhbmQgd2hhdCBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9sZV92MV8zKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGxvd2VyIG9yIHYxLjMgKi8KKwlyZXR1cm4gaTI0MDBtLT5md192ZXJzaW9uIDw9IDB4MDAwOTAwMDE7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9nZV92MV80KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGhpZ2hlciBvciB2MS40ICovCisJcmV0dXJuIGkyNDAwbS0+ZndfdmVyc2lvbiA+PSAweDAwMDkwMDAyOworfQorCiAKIC8qCiAgKiBEbyBhIG1pbGxpc2Vjb25kLXNsZWVwIGZvciBhbGxvd2luZyB3aXJlc2hhcmsgdG8gZHVtcCBhbGwgdGhlIGRhdGEKQEAgLTc1MCw2ICs4MDQsNyBAQAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIAogZXh0ZXJuIGludCBpMjQwMG1faWRsZV9tb2RlX2Rpc2FibGVkOworZXh0ZXJuIGludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsKIAogCiAjZW5kaWYgLyogI2lmbmRlZiBfX0kyNDAwTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwppbmRleCA2M2ZlNzA4Li42YjFmZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCkBAIC0yOCwxMyArMjgsMTIgQEAKICAqIHNwYWNlIGFuZCBmcm9tIHRoZSBvdGhlciBzaWRlLiBUaGUgd29ybGQgaXMgKHNhZGx5KSBjb25maWd1cmVkIHRvCiAgKiB0YWtlIGluIG9ubHkgRXRoZXJuZXQgZGV2aWNlcy4uLgogICoKLSAqIEJlY2F1c2Ugb2YgdGhpcywgY3VycmVudGx5IHRoZXJlIGlzIGFuIGNvcHktZWFjaC1yeGVkLXBhY2tldAotICogb3ZlcmhlYWQgb24gdGhlIFJYIHBhdGguIEVhY2ggSVAgcGFja2V0IGhhcyB0byBiZSByZWFsbG9jYXRlZCB0bwotICogYWRkIGFuIGV0aGVybmV0IGhlYWRlciAoYXMgdGhlcmUgaXMgbm8gc3BhY2UgaW4gd2hhdCB3ZSBnZXQgZnJvbQotICogdGhlIGRldmljZSkuIFRoaXMgaXMgYSBrbm93biBkcmF3YmFjayBhbmQgY29taW5nIHZlcnNpb25zIG9mIHRoZQotICogZGV2aWNlJ3MgZmlybXdhcmUgYXJlIGJlaW5nIGNoYW5nZWQgdG8gYWRkIGhlYWRlciBzcGFjZSB0aGF0IGNhbiBiZQotICogdXNlZCB0byBpbnNlcnQgdGhlIGV0aGVybmV0IGhlYWRlciB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlIGFuZAotICogY29weS4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgd2hlbiB1c2luZyBmaXJtd2FyZXMgPD0gdjEuMywgdGhlcmUgaXMgYW4KKyAqIGNvcHktZWFjaC1yeGVkLXBhY2tldCBvdmVyaGVhZCBvbiB0aGUgUlggcGF0aC4gRWFjaCBJUCBwYWNrZXQgaGFzCisgKiB0byBiZSByZWFsbG9jYXRlZCB0byBhZGQgYW4gZXRoZXJuZXQgaGVhZGVyIChhcyB0aGVyZSBpcyBubyBzcGFjZQorICogaW4gd2hhdCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlKS4gVGhpcyBpcyBhIGtub3duIGRyYXdiYWNrIGFuZAorICogZmlybXdhcmVzID49IDEuNCBhZGQgaGVhZGVyIHNwYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IHRoZQorICogZXRoZXJuZXQgaGVhZGVyIHdpdGhvdXQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgYW5kIGNvcHkuCiAgKgogICogVFggZXJyb3IgaGFuZGxpbmcgaXMgdHJpY2t5OyBiZWNhdXNlIHdlIGhhdmUgdG8gRklGTy9xdWV1ZSB0aGUKICAqIGJ1ZmZlcnMgZm9yIHRyYW5zbWlzc2lvbiAoYXMgdGhlIGhhcmR3YXJlIGxpa2VzIGl0IGFnZ3JlZ2F0ZWQpLCB3ZQpAQCAtNjcsNyArNjYsOSBAQAogICogaTI0MDBtX3R4X3RpbWVvdXQgICAgICBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHRpbWVzIG91dAogICoKICAqIGkyNDAwbV9uZXRfcnggICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4gYSBkYXRhIGZyYW1lIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIChmaXJtd2FyZSA8PSAxLjMpCisgKiBpMjQwMG1fbmV0X2VyeCAgICAgICAgIENhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuIGEgZGF0YSBmcmFtZSBpcworICogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKGZpcm13YXJlID49IDEuNCkuCiAgKiBpMjQwMG1fbmV0ZGV2X3NldHVwICAgIENhbGxlZCB0byBzZXR1cCBhbGwgdGhlIG5ldGRldiBzdHVmZiBmcm9tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jX25ldGRldi4KICAqLwpAQCAtMzk2LDMwICszOTcsMTggQEAKICAqIENyZWF0ZSBhIGZha2UgZXRoZXJuZXQgaGVhZGVyCiAgKgogICogRm9yIGVtdWxhdGluZyBhbiBldGhlcm5ldCBkZXZpY2UsIGV2ZXJ5IHJlY2VpdmVkIElQIGhlYWRlciBoYXMgdG8KLSAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLgotICoKLSAqIFdoYXQgd2UgcmVjZWl2ZSBoYXMgKHBvdGVudGlhbGx5KSBtYW55IElQIHBhY2tldHMgY29uY2F0ZW5hdGVkIHdpdGgKLSAqIG5vIEVUSF9ITEVOIGJ5dGVzIHByZWZpeGVkLiBUaHVzIHRoZXJlIGlzIG5vIHNwYWNlIGZvciBhbiBldGgKLSAqIGhlYWRlci4KLSAqCi0gKiBXZSB3b3VsZCBoYXZlIHRvIHJlYWxsb2NhdGUgb3IgZG8gdWdseSBmcmFnbWVudCB0cmlja3MgaW4gb3JkZXIgdG8KLSAqIGFkZCBpdC4KLSAqCi0gKiBCdXQgd2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGhlYWRlciBzcGFjZSBvZiB0aGUgUlggdHJhbnNhY3Rpb24KLSAqICgqbXNnX2hkcikgYXMgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlOyB0aGVuIHdlJ2xsIHBvaW50IGFsbCB0aGUKLSAqIGRhdGEgc2ticyB0aGVyZSwgYXMgdGhleSBzaGFyZSB0aGUgc2FtZSBiYWNraW5nIHN0b3JlLgotICoKLSAqIFdlIG9ubHkgc3VwcG9ydCBJUHY0IGZvciB2MyBmaXJtd2FyZS4KKyAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLiBGYWtlIGl0IHdpdGggdGhlIGdpdmVuCisgKiBwcm90b2NvbC4KICAqLwogc3RhdGljCiB2b2lkIGkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgdm9pZCAqX2V0aF9oZHIpCisJCQkgICAgICAgdm9pZCAqX2V0aF9oZHIsIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGhfaGRyID0gX2V0aF9oZHI7CiAKIAltZW1jcHkoZXRoX2hkci0+aF9kZXN0LCBuZXRfZGV2LT5kZXZfYWRkciwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwogCW1lbXNldChldGhfaGRyLT5oX3NvdXJjZSwgMCwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwotCWV0aF9oZHItPmhfcHJvdG8gPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KEVUSF9QX0lQKTsKKwlldGhfaGRyLT5oX3Byb3RvID0gcHJvdG9jb2w7CiB9CiAKIApAQCAtNDMyLDYgKzQyMSwxMyBAQAogICogQGJ1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKICAqIEBsZW46IGJ1ZmZlcidzIGxlbmd0aAogICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG5vdyBmb3IgdGhlIHYxLjMgZmlybXdhcmUuIEl0IHdpbGwgYmUgZGVwcmVjYXRlZAorICogaW4gPj0gMi42LjMxLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gZmlybXdhcmUgbGltaXRhdGlvbnMsIHdlIGRvbid0IGhhdmUgc3BhY2UgdG8gYWRkCisgKiBhbiBldGhlcm5ldCBoZWFkZXIsIHNvIHdlIG5lZWQgdG8gY29weSBlYWNoIHBhY2tldC4gRmlybXdhcmUKKyAqIHZlcnNpb25zID49IHYxLjQgZml4IHRoaXMgW3NlZSBpMjQwMG1fbmV0X2VyeCgpXS4KKyAqCiAgKiBXZSBqdXN0IGNsb25lIHRoZSBza2IgYW5kIHNldCBpdCB1cCBzbyB0aGF0IGl0J3Mgc2tiLT5kYXRhIHBvaW50ZXIKICAqIHBvaW50cyB0byAiYnVmIiBhbmQgaXQncyBsZW5ndGguCiAgKgpAQCAtNDc4LDcgKzQ3NCw4IEBACiAJCW1lbWNweShza2JfcHV0KHNrYiwgYnVmX2xlbiksIGJ1ZiwgYnVmX2xlbik7CiAJfQogCWkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoaTI0MDBtLT53aW1heF9kZXYubmV0X2RldiwKLQkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOKTsKKwkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOwogCXNrYi0+ZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtNDk0LDYgKzQ5MSw3MyBAQAogfQogCiAKKy8qCisgKiBpMjQwMG1fbmV0X2VyeCAtIHBhc3MgYSBuZXR3b3JrIHBhY2tldCB0byB0aGUgc3RhY2sgKGV4dGVuZGVkIHZlcnNpb24pCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2I6IHRoZSBza2Igd2hlcmUgdGhlIHBhY2tldCBpcyAtIHRoZSBza2Igc2hvdWxkIGJlIHNldCB0byBwb2ludAorICogICAgIGF0IHRoZSBJUCBwYWNrZXQ7IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgZXRoZXJuZXQgaGVhZGVycyBpZgorICogICAgIG5lZWRlZC4KKyAqIEBjczogcGFja2V0IHR5cGUKKyAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBub3cgZm9yIGZpcm13YXJlID49IHYxLjQuIE5vdGUgaXQgaXMgcXVpdGUKKyAqIHNpbWlsYXIgdG8gaTI0MDBtX25ldF9yeCgpICh1c2VkIG9ubHkgZm9yIHYxLjMgZmlybXdhcmUpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgcnVuIGZyb20gYSB0aHJlYWQgY29udGV4dC4gSG93ZXZlciwgd2UKKyAqIHN0aWxsIHVzZSBuZXRpZl9yeCgpIGluc3RlYWQgb2YgbmV0aWZfcmVjZWl2ZV9za2IoKSBhcyB3YXMKKyAqIHJlY29tbWVuZGVkIGluIHRoZSBtYWlsaW5nIGxpc3QuIFJlYXNvbiBpcyBpbiBzb21lIHN0cmVzcyB0ZXN0cworICogd2hlbiBzZW5kaW5nL3JlY2VpdmluZyBhIGxvdCBvZiBkYXRhIHdlIHNlZW0gdG8gaGl0IGEgc29mdGxvY2sgaW4KKyAqIHRoZSBrZXJuZWwncyBUQ1AgaW1wbGVtZW50YXRpb24gW2Fyb3VkbiB0Y3BfZGVsYXlfdGltZXIoKV0uIFVzaW5nCisgKiBuZXRpZl9yeCgpIHRvb2sgY2FyZSBvZiB0aGUgaXNzdWUuCisgKgorICogVGhpcyBpcywgb2YgY291cnNlLCBzdGlsbCBvcGVuIHRvIGRvIG1vcmUgcmVzZWFyY2ggb24gd2h5IHJ1bm5pbmcKKyAqIHdpdGggbmV0aWZfcmVjZWl2ZV9za2IoKSBoaXRzIHRoaXMgc29mdGxvY2suIEZJWE1FLgorICovCit2b2lkIGkyNDAwbV9uZXRfZXJ4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIGVudW0gaTI0MDBtX2NzIGNzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJaW50IHByb3RvY29sOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFsldV0gY3MgJWQpXG4iLAorCQkgIGkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworCXN3aXRjaChjcykgeworCWNhc2UgSTI0MDBNX0NTX0lQVjRfMDoKKwljYXNlIEkyNDAwTV9DU19JUFY0OgorCQlwcm90b2NvbCA9IEVUSF9QX0lQOworCQlpMjQwMG1fcnhfZmFrZV9ldGhfaGVhZGVyKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYsCisJCQkJCSAgc2tiLT5kYXRhIC0gRVRIX0hMRU4sCisJCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKKwkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgLUVUSF9ITEVOKTsKKwkJc2tiLT5kZXYgPSBpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2OworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCQluZXRfZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldF9kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIkVSWDogQlVHPyBDUyB0eXBlICV1IHVuc3VwcG9ydGVkXG4iLCBjcyk7CisJCWdvdG8gZXJyb3I7CisKKwl9CisJZF9wcmludGYoMywgZGV2LCAiRVJYOiByZWNlaXZpbmcgJWQgYnl0ZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2tcbiIsCisJCSBza2ItPmxlbik7CisJZF9kdW1wKDQsIGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJbmV0aWZfcnhfbmkoc2tiKTsJLyogc2VlIG5vdGVzIGluIGZ1bmN0aW9uIGhlYWRlciAqLworZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbJXVdIGNzICVkKSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGkyNDAwbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGkyNDAwbV9vcGVuLAorCS5uZG9fc3RvcCA9IGkyNDAwbV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGkyNDAwbV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaTI0MDBtX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHUsCit9OworCisKIC8qKgogICogaTI0MDBtX25ldGRldl9zZXR1cCAtIFNldHVwIHNldHVwIEBuZXRfZGV2J3MgaTI0MDBtIHByaXZhdGUgZGF0YQogICoKQEAgLTUxMywxMSArNTc3LDcgQEAKIAkJJiAofklGRl9CUk9BRENBU1QJLyogaTI0MDBtIGlzIFAyUCAqLwogCQkgICAmIH5JRkZfTVVMVElDQVNUKTsKIAluZXRfZGV2LT53YXRjaGRvZ190aW1lbyA9IEkyNDAwTV9UWF9USU1FT1VUOwotCW5ldF9kZXYtPm9wZW4gPSBpMjQwMG1fb3BlbjsKLQluZXRfZGV2LT5zdG9wID0gaTI0MDBtX3N0b3A7Ci0JbmV0X2Rldi0+aGFyZF9zdGFydF94bWl0ID0gaTI0MDBtX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRfZGV2LT5jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHU7Ci0JbmV0X2Rldi0+dHhfdGltZW91dCA9IGkyNDAwbV90eF90aW1lb3V0OworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaTI0MDBtX25ldGRldl9vcHM7CiAJZF9mbmVuZCgzLCBOVUxMLCAiKG5ldF9kZXYgJXApID0gdm9pZFxuIiwgbmV0X2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpMjQwMG1fbmV0ZGV2X3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKaW5kZXggNjkyMjAyMjcuLjAyNDE5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiAgLSBVc2Ugc2tiX2Nsb25lKCksIGJyZWFrIHVwIHByb2Nlc3NpbmcgaW4gY2h1bmtzCiAgKiAgLSBTcGxpdCB0cmFuc3BvcnQvZGV2aWNlIHNwZWNpZmljCiAgKiAgLSBNYWtlIGJ1ZmZlciBzaXplIGR5bmFtaWMgdG8gZXhlcnQgbGVzcyBtZW1vcnkgcHJlc3N1cmUKLSAqCisgKiAgLSBSWCByZW9yZGVyIHN1cHBvcnQKICAqCiAgKiBUaGlzIGhhbmRsZXMgdGhlIFJYIHBhdGguCiAgKgpAQCAtNjksNiArNjksNTAgQEAKICAqIFNlZSB0eC5jIGZvciBhIGRlZXBlciBkZXNjcmlwdGlvbiBvbiBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZAogICogb3RoZXIgZnVuIGZhY3RzIG9mIGl0LgogICoKKyAqIERBVEEgUEFDS0VUUworICoKKyAqIEluIGZpcm13YXJlcyA8PSB2MS4zLCBkYXRhIHBhY2tldHMgaGF2ZSBubyBoZWFkZXIgZm9yIFJYLCBidXQgdGhleQorICogZG8gZm9yIFRYIChjdXJyZW50bHkgdW51c2VkKS4KKyAqCisgKiBJbiBmaXJtd2FyZSA+PSAxLjQsIFJYIHBhY2tldHMgaGF2ZSBhbiBleHRlbmRlZCBoZWFkZXIgKDE2CisgKiBieXRlcykuIFRoaXMgaGVhZGVyIGNvbnZleXMgaW5mb3JtYXRpb24gZm9yIG1hbmFnZW1lbnQgb2YgaG9zdAorICogcmVvcmRlcmluZyBvZiBwYWNrZXRzICh0aGUgZGV2aWNlIG9mZmxvYWRzIHN0b3JhZ2Ugb2YgdGhlIHBhY2tldHMKKyAqIGZvciByZW9yZGVyaW5nIHRvIHRoZSBob3N0KS4gUmVhZCBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGUgaGVhZGVyIGlzIHVzZWQgYXMgZHVtbXkgc3BhY2UgdG8gZW11bGF0ZSBhbiBldGhlcm5ldCBoZWFkZXIgYW5kCisgKiB0aHVzIGJlIGFibGUgdG8gYWN0IGFzIGFuIGV0aGVybmV0IGRldmljZSB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlLgorICoKKyAqIERBVEEgUlggUkVPUkRFUklORworICoKKyAqIFN0YXJ0aW5nIGluIGZpcm13YXJlIHYxLjQsIHRoZSBkZXZpY2UgY2FuIGRlbGl2ZXIgcGFja2V0cyBmb3IKKyAqIGRlbGl2ZXJ5IHdpdGggc3BlY2lhbCByZW9yZGVyaW5nIGluZm9ybWF0aW9uOyB0aGlzIGFsbG93cyBpdCB0bworICogbW9yZSBlZmZlY3RpdmVseSBkbyBwYWNrZXQgbWFuYWdlbWVudCB3aGVuIHNvbWUgZnJhbWVzIHdlcmUgbG9zdCBpbgorICogdGhlIHJhZGlvIHRyYWZmaWMuCisgKgorICogVGh1cywgZm9yIFJYIHBhY2tldHMgdGhhdCBjb21lIG91dCBvZiBvcmRlciwgdGhlIGRldmljZSBnaXZlcyB0aGUKKyAqIGRyaXZlciBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcXVldWUgdGhlbSBwcm9wZXJseSBhbmQgdGhlbiBhdCBzb21lCisgKiBwb2ludCwgdGhlIHNpZ25hbCB0byBkZWxpdmVyIHRoZSB3aG9sZSAob3IgcGFydCkgb2YgdGhlIHF1ZXVlZAorICogcGFja2V0cyB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gVGhlcmUgYXJlIDE2IHN1Y2ggcXVldWVzLgorICoKKyAqIFRoaXMgb25seSBoYXBwZW5zIHdoZW4gYSBwYWNrZXQgY29tZXMgaW4gd2l0aCB0aGUgIm5lZWQgcmVvcmRlciIKKyAqIGZsYWcgc2V0IGluIHRoZSBSWCBoZWFkZXIuIFdoZW4gc3VjaCBiaXQgaXMgc2V0LCB0aGUgZm9sbG93aW5nCisgKiBvcGVyYXRpb25zIG1pZ2h0IGJlIGluZGljYXRlZDoKKyAqCisgKiAgLSByZXNldCBxdWV1ZTogc2VuZCBhbGwgcXVldWVkIHBhY2tldHMgdG8gdGhlIE9TCisgKgorICogIC0gcXVldWU6IHF1ZXVlIGEgcGFja2V0CisgKgorICogIC0gdXBkYXRlIHdzOiB1cGRhdGUgdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0IGFuZCBkZWxpdmVyIHF1ZXVlZAorICogICAgcGFja2V0cyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhCisgKgorICogIC0gcXVldWUgJiB1cGRhdGUgd3M6IHF1ZXVlIGEgcGFja2V0LCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydCBhbmQKKyAqICAgIGRlbGl2ZXIgcXVldWVkIHBhY2tldHMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYQorICoKKyAqIChkZWxpdmVyeSBjcml0ZXJpYTogdGhlIHBhY2tldCdzIFtub3JtYWxpemVkXSBzZXF1ZW5jZSBudW1iZXIgaXMKKyAqIGxvd2VyIHRoYW4gdGhlIG5ldyBbbm9ybWFsaXplZF0gd2luZG93IHN0YXJ0KS4KKyAqCisgKiBTZWUgdGhlIGkyNDAwbV9yb3FfKigpIGZ1bmN0aW9ucyBmb3IgZGV0YWlscy4KKyAqCiAgKiBST0FETUFQCiAgKgogICogaTI0MDBtX3J4CkBAIC03Niw2ICsxMjAsMTkgQEAKICAqICAgaTI0MDBtX3J4X3BsX2Rlc2NyX2NoZWNrCiAgKiAgIGkyNDAwbV9yeF9wYXlsb2FkCiAgKiAgICAgaTI0MDBtX25ldF9yeAorICogICAgIGkyNDAwbV9yeF9lZGF0YQorICogICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcmVzZXQKKyAqICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWUKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3F1ZXVlCisgKiAgICAgICBpMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWVfdXBkYXRlX3dzCisgKiAgICAgICAgIF9faTI0MDBtX3JvcV9xdWV1ZQorICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKICAqICAgICBpMjQwMG1fcnhfY3RsCiAgKiAgICAgICBpMjQwMG1fbXNnX3NpemVfY2hlY2sKICAqICAgICAgIGkyNDAwbV9yZXBvcnRfaG9va193b3JrICAgIFtpbiBhIHdvcmtxdWV1ZV0KQEAgLTE3Nyw4ICsyMzQsNyBAQAogCXJldHVybjsKIAogZXJyb3Jfd2FpdGVyX2NhbmNlbGxlZDoKLQlpZiAoYWNrX3NrYikKLQkJa2ZyZWVfc2tiKGFja19za2IpOworCWtmcmVlX3NrYihhY2tfc2tiKTsKIGVycm9yX25vX3dhaXRlcjoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMjQwMG0tPnJ4X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CkBAIC0yNjUsOCArMzIxLDYgQEAKIH0KIAogCi0KLQogLyoKICAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYSB0cmFjZQogICoKQEAgLTMxNywzMCArMzcxLDYyOCBAQAogCiAKIC8qCisgKiBSZW9yZGVyIHF1ZXVlIGRhdGEgc3RvcmVkIG9uIHNrYi0+Y2Igd2hpbGUgdGhlIHNrYiBpcyBxdWV1ZWQgaW4gdGhlCisgKiByZW9yZGVyIHF1ZXVlcy4KKyAqLworc3RydWN0IGkyNDAwbV9yb3FfZGF0YSB7CisJdW5zaWduZWQgc247CQkvKiBTZXJpYWwgbnVtYmVyIGZvciB0aGUgc2tiICovCisJZW51bSBpMjQwMG1fY3MgY3M7CS8qIHBhY2tldCB0eXBlIGZvciB0aGUgc2tiICovCit9OworCisKKy8qCisgKiBSZU9yZGVyIFF1ZXVlCisgKgorICogQHdzOiBXaW5kb3cgU3RhcnQ7IHNlcXVlbmNlIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCB3aW5kb3cgc3RhcnQKKyAqICAgICBpcyBmb3IgdGhpcyBxdWV1ZQorICogQHF1ZXVlOiB0aGUgc2tiIHF1ZXVlIGl0c2VsZgorICogQGxvZzogY2lyY3VsYXIgcmluZyBidWZmZXIgdXNlZCB0byBsb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiAgICAgcmVvcmRlciBwcm9jZXNzIGluIHRoaXMgcXVldWUgdGhhdCBjYW4gYmUgZGlzcGxheWVkIGluIGNhc2Ugb2YKKyAqICAgICBlcnJvciB0byBoZWxwIGRpYWdub3NlIGl0LgorICoKKyAqIFRoaXMgaXMgdGhlIGhlYWQgZm9yIGEgbGlzdCBvZiBza2JzLiBJbiB0aGUgc2tiLT5jYiBtZW1iZXIgb2YgdGhlCisgKiBza2Igd2hlbiBxdWV1ZWQgaGVyZSBjb250YWlucyBhICdzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhJyB3ZXJlIHdlCisgKiBzdG9yZSB0aGUgc2VxdWVuY2UgbnVtYmVyIChzbikgYW5kIHRoZSBjcyAocGFja2V0IHR5cGUpIGNvbWluZyBmcm9tCisgKiB0aGUgUlggcGF5bG9hZCBoZWFkZXIgZnJvbSB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3QgaTI0MDBtX3JvcQoreworCXVuc2lnbmVkIHdzOworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nICpsb2c7Cit9OworCisKK3N0YXRpYwordm9pZCBfX2kyNDAwbV9yb3FfaW5pdChzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXJvcS0+d3MgPSAwOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJvcS0+cXVldWUpOworfQorCisKK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX2luZGV4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSByb3EgLSAodW5zaWduZWQgbG9uZykgaTI0MDBtLT5yeF9yb3EpCisJCS8gc2l6ZW9mKCpyb3EpOworfQorCisKKy8qCisgKiBOb3JtYWxpemUgYSBzZXF1ZW5jZSBudW1iZXIgYmFzZWQgb24gdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0CisgKgorICogbnNuID0gKHNuIC0gd3MpICUgMjA0OAorICoKKyAqIE5vdGUgdGhhdCBpZiBAc24gPCBAcm9xLT53cywgd2Ugc3RpbGwgbmVlZCBhIHBvc2l0aXZlIG51bWJlcjsgJSdzCisgKiBzaWduIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLCBzbyB3ZSBub3JtYWxpemUgaXQgYnkgYWRkaW5nIDIwNDgKKyAqIHRvIGJyaW5nIGl0IHRvIGJlIHBvc2l0aXZlLgorICovCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV9uc24oc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgdW5zaWduZWQgc24pCit7CisJaW50IHI7CisJciA9ICAoKGludCkgc24gLSAoaW50KSByb3EtPndzKSAlIDIwNDg7CisJaWYgKHIgPCAwKQorCQlyICs9IDIwNDg7CisJcmV0dXJuIHI7Cit9CisKKworLyoKKyAqIENpcmN1bGFyIGJ1ZmZlciB0byBrZWVwIHRoZSBsYXN0IE4gcmVvcmRlciBvcGVyYXRpb25zCisgKgorICogSW4gY2FzZSBzb21ldGhpbmcgZmFpbHMsIGR1bWIgdGhlbiB0byB0cnkgdG8gY29tZSB1cCB3aXRoIHdoYXQKKyAqIGhhcHBlbmVkLgorICovCitlbnVtIHsKKwlJMjQwME1fUk9RX0xPR19MRU5HVEggPSAzMiwKK307CisKK3N0cnVjdCBpMjQwMG1fcm9xX2xvZyB7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5IHsKKwkJZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlOworCQl1bnNpZ25lZCB3cywgY291bnQsIHNuLCBuc24sIG5ld193czsKKwl9IGVudHJ5W0kyNDAwTV9ST1FfTE9HX0xFTkdUSF07CisJdW5zaWduZWQgaW4sIG91dDsKK307CisKKworLyogUHJpbnQgYSBsb2cgZW50cnkgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHVuc2lnbmVkIGluZGV4LAorCQkJCXVuc2lnbmVkIGVfaW5kZXgsCisJCQkJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKworCXN3aXRjaChlLT50eXBlKSB7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJZGV2X2VycihkZXYsICJxIyVkIHJlc2V0ICAgICAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXUiCisJCQkiIC0gbmV3IG53cyAldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24sIGUtPm5ld193cyk7CisJCWJyZWFrOworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQlkZXZfZXJyKGRldiwgInEjJWQgcXVldWUgICAgICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24pOworCQlicmVhazsKKwljYXNlIEkyNDAwTV9ST19UWVBFX1dTOgorCQlkZXZfZXJyKGRldiwgInEjJWQgdXBkYXRlX3dzICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldSIKKwkJCSIgLSBuZXcgbndzICV1XG4iLAorCQkJaW5kZXgsIGUtPndzLCBlLT5jb3VudCwgZS0+c24sIGUtPm5zbiwgZS0+bmV3X3dzKTsKKwkJYnJlYWs7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCWRldl9lcnIoZGV2LCAicSMlZCBxdWV1ZV91cGRhdGVfd3Mgd3MgJXUgY250ICV1IHNuICV1LyV1IgorCQkJIiAtIG5ldyBud3MgJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuLCBlLT5uZXdfd3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInEjJWQgQlVHPyBlbnRyeSAldSAtIHVua25vd24gdHlwZSAldVxuIiwKKwkJCWluZGV4LCBlX2luZGV4LCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19hZGQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLAorCQkJc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlLAorCQkJdW5zaWduZWQgd3MsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBzbiwKKwkJCXVuc2lnbmVkIG5zbiwgdW5zaWduZWQgbmV3X3dzKQoreworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBjbnRfaWR4OworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwkvKiBpZiB3ZSBydW4gb3V0IG9mIHNwYWNlLCB3ZSBlYXQgZnJvbSB0aGUgZW5kICovCisJaWYgKHJvcS0+bG9nLT5pbiAtIHJvcS0+bG9nLT5vdXQgPT0gSTI0MDBNX1JPUV9MT0dfTEVOR1RIKQorCQlyb3EtPmxvZy0+b3V0Kys7CisJY250X2lkeCA9IHJvcS0+bG9nLT5pbisrICUgSTI0MDBNX1JPUV9MT0dfTEVOR1RIOworCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCisJZS0+dHlwZSA9IHR5cGU7CisJZS0+d3MgPSB3czsKKwllLT5jb3VudCA9IGNvdW50OworCWUtPnNuID0gc247CisJZS0+bnNuID0gbnNuOworCWUtPm5ld193cyA9IG5ld193czsKKworCWlmIChkX3Rlc3QoMSkpCisJCWkyNDAwbV9yb3FfbG9nX2VudHJ5X3ByaW50KGkyNDAwbSwgaW5kZXgsIGNudF9pZHgsIGUpOworfQorCisKKy8qIER1bXAgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSBGSUZPIGFuZCByZWluaXRpYWxpemUgaXQgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19kdW1wKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwl1bnNpZ25lZCBjbnQsIGNudF9pZHg7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplOworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwlCVUdfT04ocm9xLT5sb2ctPm91dCA+IHJvcS0+bG9nLT5pbik7CisJZm9yIChjbnQgPSByb3EtPmxvZy0+b3V0OyBjbnQgPCByb3EtPmxvZy0+aW47IGNudCsrKSB7CisJCWNudF9pZHggPSBjbnQgJSBJMjQwME1fUk9RX0xPR19MRU5HVEg7CisJCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCQlpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChpMjQwMG0sIGluZGV4LCBjbnRfaWR4LCBlKTsKKwkJbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCX0KKwlyb3EtPmxvZy0+aW4gPSByb3EtPmxvZy0+b3V0ID0gMDsKK30KKworCisvKgorICogQmFja2JvbmUgZm9yIHRoZSBxdWV1aW5nIG9mIGFuIHNrYiAoYnkgbm9ybWFsaXplZCBzZXF1ZW5jZSBudW1iZXIpCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IHJlb3JkZXIgcXVldWUgd2hlcmUgdG8gYWRkCisgKiBAc2tiOiB0aGUgc2tiIHRvIGFkZAorICogQHNuOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBza2IKKyAqIEBuc246IHRoZSBub3JtYWxpemVkIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2tiIChwcmUtY29tcHV0ZWQgYnkgdGhlCisgKiAgICAgY2FsbGVyIGZyb20gdGhlIEBzbiBhbmQgQHJvcS0+d3MpLgorICoKKyAqIFdlIHRyeSBmaXJzdCBhIGNvdXBsZSBvZiBxdWljayBjYXNlczoKKyAqCisgKiAgIC0gdGhlIHF1ZXVlIGlzIGVtcHR5CisgKiAgIC0gdGhlIHNrYiB3b3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgcXVldWUKKyAqCisgKiBUaGVzZSB3aWxsIGJlIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb25zLgorICoKKyAqIElmIHRoZXNlIGZhaWwsIHRoZW4gd2UgaGF2ZSB0byBkbyBhIHNvcnRlZCBpbnNlcnRpb24gaW4gdGhlIHF1ZXVlLAorICogd2hpY2ggaXMgdGhlIHNsb3dlc3QgcGF0aC4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIGFjcXVpcmUgYSByZWZlcmVuY2UgY291bnQgYXMgd2UgYXJlIGdvaW5nIHRvIG93biBpdC4KKyAqLworc3RhdGljCit2b2lkIF9faTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzbiwgdW5zaWduZWQgbnNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHIsICpyb3FfZGF0YTsKKwl1bnNpZ25lZCBuc25faXRyOworCisJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJXUpXG4iLAorCQkgIGkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCisJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpyb3FfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOworCXJvcV9kYXRhLT5zbiA9IHNuOworCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogcm9xICVwIFt3cyAldV0gbnNuICVkIHNuICV1XG4iLAorCQkgcm9xLCByb3EtPndzLCBuc24sIHJvcV9kYXRhLT5zbik7CisKKwkvKiBRdWV1ZXMgd2lsbCBiZSBlbXB0eSBvbiBub3Qtc28tYmFkIGVudmlyb25tZW50cywgc28gdHJ5CisJICogdGhhdCBmaXJzdCAqLworCWlmIChza2JfcXVldWVfZW1wdHkoJnJvcS0+cXVldWUpKSB7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gZmlyc3Qgb25lXG4iLCByb3EpOworCQlfX3NrYl9xdWV1ZV9oZWFkKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm93IHRyeSBhcHBlbmQsIGFzIG1vc3Qgb2YgdGhlIG9wZXJhdGlvbnMgd2lsbCBiZSB0aGF0ICovCisJc2tiX2l0ciA9IHNrYl9wZWVrX3RhaWwoJnJvcS0+cXVldWUpOworCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwlpZiAobnNuID49IG5zbl9pdHIpIHsKKwkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSBhcHBlbmRlZCBhZnRlciAlcCAobnNuICVkIHNuICV1KVxuIiwKKwkJCSByb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCQlfX3NrYl9xdWV1ZV90YWlsKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm9uZSBvZiB0aGUgZmFzdCBwYXRocyBvcHRpb24gd29ya2VkLiBJdGVyYXRlIHRvIGZpbmQgdGhlCisJICogcmlnaHQgc3BvdCB3aGVyZSB0byBpbnNlcnQgdGhlIHBhY2tldDsgd2Uga25vdyB0aGUgcXVldWUgaXMKKwkgKiBub3QgZW1wdHksIHNvIHdlIGFyZSBub3QgdGhlIGZpcnN0IG9uZXM7IHdlIGFsc28ga25vdyB3ZQorCSAqIGFyZSBub3QgZ29pbmcgdG8gYmUgdGhlIGxhc3Qgb25lcy4gVGhlIGxpc3QgaXMgc29ydGVkLCBzbworCSAqIHdlIGhhdmUgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgdGhlIGZpcnN0IGd1eSB3aXRoIGFuIG5zbl9pdHIKKwkgKiBncmVhdGVyIHRoYXQgb3VyIG5zbi4gKi8KKwlza2JfcXVldWVfd2Fsaygmcm9xLT5xdWV1ZSwgc2tiX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPiBuc24pIHsKKwkJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gcXVldWVkIGJlZm9yZSAlcCAiCisJCQkJICIobnNuICVkIHNuICV1KVxuIiwgcm9xLCBza2JfaXRyLCBuc25faXRyLAorCQkJCSByb3FfZGF0YV9pdHItPnNuKTsKKwkJCV9fc2tiX3F1ZXVlX2JlZm9yZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCS8qIElmIHdlIGdldCBoZXJlLCB0aGF0IGlzIFZFUlkgYmFkIC0tIHByaW50IGluZm8gdG8gaGVscAorCSAqIGRpYWdub3NlIGFuZCBjcmFzaCBpdCAqLworCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBmYWlsZWQgdG8gaW5zZXJ0IHBhY2tldFxuIik7CisJZGV2X2VycihkZXYsICJFUlg6IHJvcSAlcCBbd3MgJXVdIHNrYiAlcCBuc24gJWQgc24gJXVcbiIsCisJCXJvcSwgcm9xLT53cywgc2tiLCBuc24sIHJvcV9kYXRhLT5zbik7CisJc2tiX3F1ZXVlX3dhbGsoJnJvcS0+cXVldWUsIHNrYl9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWRldl9lcnIoZGV2LCAiRVJYOiByb3EgJXAgc2tiX2l0ciAlcCBuc24gJWQgc24gJXVcbiIsCisJCQlyb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCX0KKwlCVUcoKTsKK291dDoKKwlkX2ZuZW5kKDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJWQpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBCYWNrYm9uZSBmb3IgdGhlIHVwZGF0ZSB3aW5kb3cgc3RhcnQgb3BlcmF0aW9uCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IFJlb3JkZXIgcXVldWUKKyAqIEBzbjogTmV3IHNlcXVlbmNlIG51bWJlcgorICoKKyAqIFVwZGF0ZXMgdGhlIHdpbmRvdyBzdGFydCBvZiBhIHF1ZXVlOyB3aGVuIGRvaW5nIHNvLCBpdCBtdXN0IGRlbGl2ZXIKKyAqIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFsbCB0aGUgcXVldWVkIHNrYidzIHdob3NlIG5vcm1hbGl6ZWQKKyAqIHNlcXVlbmNlIG51bWJlciBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbm9ybWFsaXplZCB3aW5kb3cgc3RhcnQuCisgKi8KK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXN0cnVjdCBza19idWZmICpza2JfaXRyLCAqdG1wX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHI7CisJdW5zaWduZWQgbmV3X253cywgbnNuX2l0cjsKKworCW5ld19ud3MgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgc24pOworCWlmICh1bmxpa2VseShuZXdfbndzID49IDEwMjQpICYmIGRfdGVzdCgxKSkgeworCQlkZXZfZXJyKGRldiwgIlNXIEJVRz8gX191cGRhdGVfd3MgbmV3X253cyAldSAoc24gJXUgd3MgJXUpXG4iLAorCQkJbmV3X253cywgc24sIHJvcS0+d3MpOworCQlXQVJOX09OKDEpOworCQlpMjQwMG1fcm9xX2xvZ19kdW1wKGkyNDAwbSwgcm9xKTsKKwl9CisJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgdG1wX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPCBuZXdfbndzKSB7CisJCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwICIKKwkJCQkgIihuc24gJXUvJXUgbmV3IG53cyAldSlcbiIsCisJCQkJIHJvcSwgc2tiX2l0ciwgbnNuX2l0ciwgcm9xX2RhdGFfaXRyLT5zbiwKKwkJCQkgbmV3X253cyk7CisJCQlfX3NrYl91bmxpbmsoc2tiX2l0ciwgJnJvcS0+cXVldWUpOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwkJfQorCQllbHNlCisJCQlicmVhazsJLyogcmVzdCBvZiBwYWNrZXRzIGFsbCBuc25faXRyID4gbndzICovCisJfQorCXJvcS0+d3MgPSBzbjsKKwlyZXR1cm4gbmV3X253czsKK30KKworCisvKgorICogUmVzZXQgYSBxdWV1ZQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICoKKyAqIERlbGl2ZXIgYWxsIHRoZSBwYWNrZXRzIGFuZCByZXNldCB0aGUgd2luZG93LXN0YXJ0IHRvIHplcm8uIE5hbWUgaXMKKyAqIGtpbmQgb2YgbWlzbGVhZGluZy4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfcmVzZXQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0ciwgKnRtcF9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwKVxuIiwgaTI0MDBtLCByb3EpOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUkVTRVQsCisJCQkgICAgIHJvcS0+d3MsIHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpLAorCQkJICAgICB+MCwgfjAsIDApOworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHRtcF9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwIChzbiAldSlcbiIsCisJCQkgcm9xLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJX19za2JfdW5saW5rKHNrYl9pdHIsICZyb3EtPnF1ZXVlKTsKKwkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwl9CisJcm9xLT53cyA9IDA7CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCkgPSB2b2lkXG4iLCBpMjQwMG0sIHJvcSk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBRdWV1ZSBhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBsYm46IExhc3QgYmxvY2sgbnVtYmVyIG9mIHRoZSBwYWNrZXQgaW4gQHNrYgorICoKKyAqIFRoZSBoYXJkd2FyZSBpcyBhc2tpbmcgdGhlIGRyaXZlciB0byBxdWV1ZSBhIHBhY2tldCBmb3IgbGF0ZXIKKyAqIGRlbGl2ZXJ5IHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCSAgICAgIHN0cnVjdCBza19idWZmICogc2tiLCB1bnNpZ25lZCBsYm4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG5zbiwgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJICBpMjQwMG0sIHJvcSwgc2tiLCBsYm4pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBsYm4pOworCWlmICh1bmxpa2VseShuc24gPj0gMTAyNCkpIHsKKwkJZGV2X2VycihkZXYsICJTVyBCVUc/IHF1ZXVlIG5zbiAlZCAobGJuICV1IHdzICV1KVxuIiwKKwkJCW5zbiwgbGJuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCV9faTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCBsYm4sIG5zbik7CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCQkJCSAgICAgcm9xLT53cywgbGVuLCBsYm4sIG5zbiwgfjApOworCX0KKwlkX2ZuZW5kKDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgbGJuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFVwZGF0ZSB0aGUgd2luZG93IHN0YXJ0IGluIGEgcmVvcmRlciBxdWV1ZSBhbmQgZGVsaXZlciBhbGwgc2ticworICogd2l0aCBhIGxvd2VyIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiBSZW9yZGVyIHF1ZXVlCisgKiBAc246IE5ldyBzZXF1ZW5jZSBudW1iZXIKKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfdXBkYXRlX3dzKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwKKwkJCSAgdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG9sZF93cywgbnNuLCBsZW47CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpXG4iLCBpMjQwMG0sIHJvcSwgc24pOworCW9sZF93cyA9IHJvcS0+d3M7CisJbGVuID0gc2tiX3F1ZXVlX2xlbigmcm9xLT5xdWV1ZSk7CisJbnNuID0gX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc24pOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfV1MsCisJCQkgICAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpID0gdm9pZFxuIiwgaTI0MDBtLCByb3EsIHNuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFF1ZXVlIGEgcGFja2V0IGFuZCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBzbjogTGFzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKgorICogTm90ZSB0aGF0IHVubGlrZSBpMjQwMG1fcm9xX3VwZGF0ZV93cygpLCB3aGljaCBzZXRzIHRoZSBuZXcgd2luZG93CisgKiBzdGFydCB0byBAc24sIGluIGhlcmUgd2UnbGwgc2V0IGl0IHRvIEBzbiArIDEuCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJc3RydWN0IHNrX2J1ZmYgKiBza2IsIHVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBuc24sIG9sZF93cywgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSlcbiIsCisJCSAgaTI0MDBtLCByb3EsIHNrYiwgc24pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBzbik7CisJb2xkX3dzID0gcm9xLT53czsKKwlpZiAodW5saWtlbHkobnNuID49IDEwMjQpKSB7CisJCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBxdWV1ZV91cGRhdGVfd3MgbnNuICV1IChzbiAldSB3cyAldSlcbiIsCisJCQluc24sIHNuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCS8qIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGFzIHdlJ2QgcXVldWUKKwkJICogaXQgYW5kIGlubWVkaWF0ZWx5IHVucXVldWUgaXQgLS0ganVzdCBkZWxpdmVyIGl0ICovCisJCWlmIChsZW4gPT0gMCkgeworCQkJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGE7CisJCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2IsIHJvcV9kYXRhLT5jcyk7CisJCX0KKwkJZWxzZSB7CisJCQlfX2kyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJCQlfX2kyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCBzbiArIDEpOworCQl9CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTLAorCQkJCSAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwl9CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24pOworCXJldHVybjsKK30KKworCisvKgorICogUmVjZWl2ZSBhbmQgc2VuZCB1cCBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiX3J4OiBza2IgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqIEBzaW5nbGVfbGFzdDogMSBpZiB0aGUgcGF5bG9hZCBpcyB0aGUgb25seSBvbmUgb3IgdGhlIGxhc3Qgb25lIG9mCisgKiAgICAgdGhlIHNrYi4KKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYWNrZXQncyBkYXRhIGluc2lkZSB0aGUgc2tiCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcGF5bG9hZAorICoKKyAqIFN0YXJ0aW5nIGluIHYxLjQgb2YgdGhlIGkyNDAwbSdzIGZpcm13YXJlLCB0aGUgZGV2aWNlIGNhbiBzZW5kIGRhdGEKKyAqIHBhY2tldHMgdG8gdGhlIGhvc3QgaW4gYW4gZXh0ZW5kZWQgZm9ybWF0IHRoYXQ7IHRoaXMgaW5jdWRlcyBhIDE2CisgKiBieXRlIGhlYWRlciAoc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIpLiBVc2luZyB0aGlzIGhlYWRlcidzIHNwYWNlCisgKiB3ZSBjYW4gZmFrZSBldGhlcm5ldCBoZWFkZXJzIGZvciBldGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uIHdpdGhvdXQKKyAqIGhhdmluZyB0byBjb3B5IHBhY2tldHMgYXJvdW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBzYWlkIHBhdGguCisgKgorICoKKyAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQgdGhhdCByZXF1aXJlcyBubyByZW9yZGVyaW5nCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2Jfcng6IHNrYiB0aGF0IGNvbnRhaW5zIHRoZSBleHRlbmRlZCBkYXRhIHBhY2tldAorICogQHNpbmdsZV9sYXN0OiAxIGlmIHRoZSBwYXlsb2FkIGlzIHRoZSBvbmx5IG9uZSBvciB0aGUgbGFzdCBvbmUgb2YKKyAqICAgICB0aGUgc2tiLgorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBhY2tldCdzIGRhdGEgKHBhc3QgdGhlIGFjdHVhbCBleHRlbmRlZAorICogICAgIGRhdGEgcGF5bG9hZCBoZWFkZXIpLgorICogQHNpemU6IHNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBQYXNzIG92ZXIgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYSBkYXRhIHBhY2tldCB0aGF0IG1pZ2h0IGhhdmUKKyAqIHJlb3JkZXJpbmcgcmVxdWlyZW1lbnRzLgorICoKKyAqIFRoaXMgbmVlZHMgdG8gdGhlIGRlY2lkZSBpZiB0aGUgc2tiIGluIHdoaWNoIHRoZSBwYWNrZXQgaXMKKyAqIGNvbnRhaW5lZCBjYW4gYmUgcmV1c2VkIG9yIGlmIGl0IG5lZWRzIHRvIGJlIGNsb25lZC4gVGhlbiBpdCBoYXMgdG8KKyAqIGJlIHRyaW1tZWQgaW4gdGhlIGVkZ2VzIHNvIHRoYXQgdGhlIGJlZ2lubmluZyBpcyB0aGUgc3BhY2UgZm9yIGV0aAorICogaGVhZGVyIGFuZCB0aGVuIHBhc3MgaXQgdG8gaTI0MDBtX25ldF9lcngoKSBmb3IgdGhlIHN0YWNrCisgKgorICogQXNzdW1lcyB0aGUgY2FsbGVyIGhhcyB2ZXJpZmllZCB0aGUgc2FuaXR5IG9mIHRoZSBwYXlsb2FkIChzaXplLAorICogZXRjKSBhbHJlYWR5LgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3J4X2VkYXRhKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYl9yeCwKKwkJICAgICB1bnNpZ25lZCBzaW5nbGVfbGFzdCwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCWNvbnN0IHN0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyICpoZHIgPSBwYXlsb2FkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWVudW0gaTI0MDBtX2NzIGNzOworCXUzMiByZW9yZGVyOworCXVuc2lnbmVkIHJvX25lZWRlZCwgcm9fdHlwZSwgcm9fY2luLCByb19zbjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xOworCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhOworCisJQlVJTERfQlVHX09OKEVUSF9ITEVOID4gc2l6ZW9mKCpoZHIpKTsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSAgInNpemUgJXp1KVxuIiwgaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBzaXplKTsKKwlpZiAoc2l6ZSA8IHNpemVvZigqaGRyKSkgeworCQlkZXZfZXJyKGRldiwgIkVSWDogSFcgQlVHPyBtZXNzYWdlIHdpdGggc2hvcnQgaGVhZGVyICglenUgIgorCQkJInZzICV6dSBieXRlcyBleHBlY3RlZClcbiIsIHNpemUsIHNpemVvZigqaGRyKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHNpbmdsZV9sYXN0KSB7CisJCXNrYiA9IHNrYl9nZXQoc2tiX3J4KTsKKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBza2IgJXAgcmV1c2luZ1xuIiwgc2tiKTsKKwl9IGVsc2UgeworCQlza2IgPSBza2JfY2xvbmUoc2tiX3J4LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIkVSWDogbm8gbWVtb3J5IHRvIGNsb25lIHNrYlxuIik7CisJCQluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIGVycm9yX3NrYl9jbG9uZTsKKwkJfQorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHNrYiAlcCBjbG9uZWQgZnJvbSAlcFxuIiwgc2tiLCBza2JfcngpOworCX0KKwkvKiBub3cgd2UgaGF2ZSB0byBwdWxsIGFuZCB0cmltIHNvIHRoYXQgdGhlIHNrYiBwb2ludHMgdG8gdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBJUCBwYWNrZXQ7IHRoZSBuZXRkZXYgcGFydCB3aWxsIGFkZCB0aGUKKwkgKiBldGhlcm5ldCBoZWFkZXIgYXMgbmVlZGVkIC0gd2Uga25vdyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKKwkgKiBiZWNhdXNlIHdlIGNoZWNrZWQgaW4gaTI0MDBtX3J4X2VkYXRhKCkuICovCisJc2tiX3B1bGwoc2tiLCBwYXlsb2FkICsgc2l6ZW9mKCpoZHIpIC0gKHZvaWQgKikgc2tiLT5kYXRhKTsKKwlza2JfdHJpbShza2IsICh2b2lkICopIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gcGF5bG9hZCAtIHNpemVvZigqaGRyKSk7CisKKwlyZW9yZGVyID0gbGUzMl90b19jcHUoaGRyLT5yZW9yZGVyKTsKKwlyb19uZWVkZWQgPSByZW9yZGVyICYgSTI0MDBNX1JPX05FRURFRDsKKwljcyA9IGhkci0+Y3M7CisJaWYgKHJvX25lZWRlZCkgeworCQlyb190eXBlID0gKHJlb3JkZXIgPj4gSTI0MDBNX1JPX1RZUEVfU0hJRlQpICYgSTI0MDBNX1JPX1RZUEU7CisJCXJvX2NpbiA9IChyZW9yZGVyID4+IEkyNDAwTV9ST19DSU5fU0hJRlQpICYgSTI0MDBNX1JPX0NJTjsKKwkJcm9fc24gPSAocmVvcmRlciA+PiBJMjQwME1fUk9fU05fU0hJRlQpICYgSTI0MDBNX1JPX1NOOworCisJCXJvcSA9ICZpMjQwMG0tPnJ4X3JvcVtyb19jaW5dOworCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQlyb3FfZGF0YS0+c24gPSByb19zbjsKKwkJcm9xX2RhdGEtPmNzID0gY3M7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcmVvcmRlciBuZWVkZWQ6ICIKKwkJCSAidHlwZSAldSBjaW4gJXUgW3dzICV1XSBzbiAldS8ldSBsZW4gJXp1QlxuIiwKKwkJCSByb190eXBlLCByb19jaW4sIHJvcS0+d3MsIHJvX3NuLAorCQkJIF9faTI0MDBtX3JvcV9uc24ocm9xLCByb19zbiksIHNpemUpOworCQlkX2R1bXAoMiwgZGV2LCBwYXlsb2FkLCBzaXplKTsKKwkJc3dpdGNoKHJvX3R5cGUpIHsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJCWkyNDAwbV9yb3FfcmVzZXQoaTI0MDBtLCByb3EpOworCQkJa2ZyZWVfc2tiKHNrYik7CS8qIG5vIGRhdGEgaGVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQkJaTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9XUzoKKwkJCWkyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCByb19zbik7CisJCQlrZnJlZV9za2Ioc2tiKTsJLyogbm8gZGF0YSBoZXJlICovCisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCQlpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyB1bmtub3duIHJlb3JkZXIgdHlwZSAldVxuIiwgcm9fdHlwZSk7CisJCX0KKwl9CisJZWxzZQorCQlpMjQwMG1fbmV0X2VyeChpMjQwMG0sIHNrYiwgY3MpOworZXJyb3Jfc2tiX2Nsb25lOgorZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSJzaXplICV6dSkgPSB2b2lkXG4iLCBpMjQwMG0sIHNrYl9yeCwgc2luZ2xlX2xhc3QsIHBheWxvYWQsIHNpemUpOworCXJldHVybjsKK30KKworCisvKgogICogQWN0IG9uIGEgcmVjZWl2ZWQgcGF5bG9hZAogICoKICAqIEBpMjQwMG06IGRldmljZSBpbnN0YW5jZQogICogQHNrYl9yeDogc2tiIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiB3YXMgcmVjZWl2ZWQKLSAqIEBzaW5nbGU6IDEgaWYgdGhlcmUgaXMgb25seSBvbmUgcGF5bG9hZCwgMCBvdGhlcndpc2UKKyAqIEBzaW5nbGVfbGFzdDogMSB0aGlzIGlzIHRoZSBvbmx5IHBheWxvYWQgb3IgdGhlIGxhc3Qgb25lIChzbyB0aGUKKyAqICAgICBza2IgY2FuIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNsb25lZCkuCiAgKiBAcGxkOiBwYXlsb2FkIGRlc2NyaXB0b3IKICAqIEBwYXlsb2FkOiBwYXlsb2FkIGRhdGEKICAqCiAgKiBVcG9uIHJlY2VwdGlvbiBvZiBhIHBheWxvYWQsIGxvb2sgYXQgaXRzIGd1dHMgaW4gdGhlIHBheWxvYWQKLSAqIGRlc2NyaXB0b3IgYW5kIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggaXQuCisgKiBkZXNjcmlwdG9yIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LiBJZiBpdCBpcyBhIHNpbmdsZSBwYXlsb2FkCisgKiBza2Igb3IgaWYgdGhlIGxhc3Qgc2tiIGlzIGEgZGF0YSBwYWNrZXQsIHRoZSBza2Igd2lsbCBiZSByZWZlcmVuY2VkCisgKiBhbmQgbW9kaWZpZWQgKHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjbG9uZWQpLgogICovCiBzdGF0aWMKIHZvaWQgaTI0MDBtX3J4X3BheWxvYWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3J4LAotCQkgICAgICAgdW5zaWduZWQgc2luZ2xlLCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3BsZCAqcGxkLAorCQkgICAgICAgdW5zaWduZWQgc2luZ2xlX2xhc3QsIGNvbnN0IHN0cnVjdCBpMjQwMG1fcGxkICpwbGQsCiAJCSAgICAgICBjb25zdCB2b2lkICpwYXlsb2FkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzaXplX3QgcGxfc2l6ZSA9IGkyNDAwbV9wbGRfc2l6ZShwbGQpOwogCWVudW0gaTI0MDBtX3B0IHBsX3R5cGUgPSBpMjQwMG1fcGxkX3R5cGUocGxkKTsKIAorCWRfcHJpbnRmKDcsIGRldiwgIlJYOiByZWNlaXZlZCBwYXlsb2FkIHR5cGUgJXUsICV6dSBieXRlc1xuIiwKKwkJIHBsX3R5cGUsIHBsX3NpemUpOworCWRfZHVtcCg4LCBkZXYsIHBheWxvYWQsIHBsX3NpemUpOworCiAJc3dpdGNoIChwbF90eXBlKSB7CiAJY2FzZSBJMjQwME1fUFRfREFUQToKIAkJZF9wcmludGYoMywgZGV2LCAiUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOwotCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGUsIHBheWxvYWQsIHBsX3NpemUpOworCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgSTI0MDBNX1BUX0NUUkw6CiAJCWkyNDAwbV9yeF9jdGwoaTI0MDBtLCBza2JfcngsIHBheWxvYWQsIHBsX3NpemUpOwpAQCAtMzQ4LDYgKzEwMDAsMTAgQEAKIAljYXNlIEkyNDAwTV9QVF9UUkFDRToKIAkJaTI0MDBtX3J4X3RyYWNlKGkyNDAwbSwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOworCWNhc2UgSTI0MDBNX1BUX0VEQVRBOgorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOworCQlpMjQwMG1fcnhfZWRhdGEoaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBwbF9zaXplKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoJLyogQW55dGhpbmcgZWxzZSBzaG91bGRuJ3QgY29tZSB0byB0aGUgaG9zdCAqLwogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2VycihkZXYsICJSWDogSFcgQlVHPyB1bmV4cGVjdGVkIHBheWxvYWQgdHlwZSAldVxuIiwKQEAgLTQ3NSw3ICsxMTMxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX21zZ19oZHIgKm1zZ19oZHI7CiAJc2l6ZV90IHBsX2l0ciwgcGxfc2l6ZSwgc2tiX2xlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG51bV9wbHM7CisJdW5zaWduZWQgbnVtX3Bscywgc2luZ2xlX2xhc3Q7CiAKIAlza2JfbGVuID0gc2tiLT5sZW47CiAJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFtzaXplICV6dV0pXG4iLApAQCAtNTA0LDcgKzExNjAsOCBAQAogCQkJCQkJICBwbF9pdHIsIHNrYi0+bGVuKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIGVycm9yX3BsX2Rlc2NyX2NoZWNrOwotCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgbnVtX3BscyA9PSAxLCAmbXNnX2hkci0+cGxkW2ldLAorCQlzaW5nbGVfbGFzdCA9IG51bV9wbHMgPT0gMSB8fCBpID09IG51bV9wbHMgLSAxOworCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgc2luZ2xlX2xhc3QsICZtc2dfaGRyLT5wbGRbaV0sCiAJCQkJICBza2ItPmRhdGEgKyBwbF9pdHIpOwogCQlwbF9pdHIgKz0gQUxJR04ocGxfc2l6ZSwgSTI0MDBNX1BMX1BBRCk7CiAJCWNvbmRfcmVzY2hlZCgpOwkJLyogRG9uJ3QgbW9ub3BvbGl6ZSAqLwpAQCAtNTMyLDMgKzExODksNzMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTI0MDBtX3J4KTsKKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlCisgKgorICogVGhpcyBzZXRzIHVwIGFsbCB0aGUgUlggcmVvcmRlcmluZyBpbmZyYXN0cnVjdHVyZXMsIHdoaWNoIHdpbGwgbm90CisgKiBiZSB1c2VkIGlmIHJlb3JkZXJpbmcgaXMgbm90IGVuYWJsZWQgb3IgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90CisgKiBzdXBwb3J0IGl0LiBUaGUgZGV2aWNlIGlzIHRvbGQgdG8gZG8gcmVvcmRlcmluZyBpbgorICogaTI0MDBtX2Rldl9pbml0aWFsaXplKCksIHdoZXJlIGl0IGFsc28gbG9va3MgYXQgdGhlIHZhbHVlIG9mIHRoZQorICogaTI0MDBtLT5yeF9yZW9yZGVyIHN3aXRjaCBiZWZvcmUgdGFraW5nIGEgZGVjaXNzaW9uLgorICoKKyAqIE5vdGUgd2UgYWxsb2NhdGUgdGhlIHJvcSBxdWV1ZXMgaW4gb25lIGNodW5rIGFuZCB0aGUgYWN0dWFsIGxvZ2dpbmcKKyAqIHN1cHBvcnQgZm9yIGl0IChsb2dnaW5nKSBpbiBhbm90aGVyIG9uZSBhbmQgdGhlbiB3ZSBzZXR1cCB0aGUKKyAqIHBvaW50ZXJzIGZyb20gdGhlIGZpcnN0IHRvIHRoZSBsYXN0LgorICovCitpbnQgaTI0MDBtX3J4X3NldHVwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisKKwlpMjQwMG0tPnJ4X3Jlb3JkZXIgPSBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZD8gMCA6IDE7CisJaWYgKGkyNDAwbS0+cnhfcmVvcmRlcikgeworCQl1bnNpZ25lZCBpdHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3QgaTI0MDBtX3JvcV9sb2cgKnJkOworCisJCXJlc3VsdCA9IC1FTk9NRU07CisKKwkJc2l6ZSA9IHNpemVvZihpMjQwMG0tPnJ4X3JvcVswXSkgKiAoSTI0MDBNX1JPX0NJTiArIDEpOworCQlpMjQwMG0tPnJ4X3JvcSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpMjQwMG0tPnJ4X3JvcSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciAiCisJCQkJInJlb3JkZXIgcXVldWVzXG4iLCBzaXplKTsKKwkJCWdvdG8gZXJyb3Jfcm9xX2FsbG9jOworCQl9CisKKwkJc2l6ZSA9IHNpemVvZigqaTI0MDBtLT5yeF9yb3FbMF0ubG9nKSAqIChJMjQwME1fUk9fQ0lOICsgMSk7CisJCXJkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJkID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiUlg6IGNhbm5vdCBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yICIKKwkJCQkicmVvcmRlciBxdWV1ZXMgbG9nIGFyZWFzXG4iLCBzaXplKTsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yX3JvcV9sb2dfYWxsb2M7CisJCX0KKworCQlmb3IoaXRyID0gMDsgaXRyIDwgSTI0MDBNX1JPX0NJTiArIDE7IGl0cisrKSB7CisJCQlfX2kyNDAwbV9yb3FfaW5pdCgmaTI0MDBtLT5yeF9yb3FbaXRyXSk7CisJCQlpMjQwMG0tPnJ4X3JvcVtpdHJdLmxvZyA9ICZyZFtpdHJdOworCQl9CisJfQorCXJldHVybiAwOworCitlcnJvcl9yb3FfbG9nX2FsbG9jOgorCWtmcmVlKGkyNDAwbS0+cnhfcm9xKTsKK2Vycm9yX3JvcV9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRlYXIgZG93biB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlICovCit2b2lkIGkyNDAwbV9yeF9yZWxlYXNlKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpZiAoaTI0MDBtLT5yeF9yZW9yZGVyKSB7CisJCXVuc2lnbmVkIGl0cjsKKwkJZm9yKGl0ciA9IDA7IGl0ciA8IEkyNDAwTV9ST19DSU4gKyAxOyBpdHIrKykKKwkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZpMjQwMG0tPnJ4X3JvcVtpdHJdLnF1ZXVlKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3FbMF0ubG9nKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3EpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCmluZGV4IDFiZmEyODMuLjVhYzVlNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKQEAgLTcwLDggKzcwLDEzIEBACiBzdGF0aWMgaW50IGlvZV90aW1lb3V0ID0gMjsKIG1vZHVsZV9wYXJhbShpb2VfdGltZW91dCwgaW50LCAwKTsKIAotLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tIiBJMjQwME1fRldfVkVSU0lPTiAiLnNiY2YiCisvKiBPdXIgZmlybXdhcmUgZmlsZSBuYW1lIGxpc3QgKi8KK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG1zX2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tMS4zLnNiY2YiCisJSTI0MDBNU19GV19GSUxFX05BTUUsCisJTlVMTAorfTsKKwogCiAvKgogICogRW5hYmxlIHRoZSBTRElPIGZ1bmN0aW9uCkBAIC0yNTUsMTYgKzI2MCwxNiBAQAogCQljb250YWluZXJfb2YoaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtcywgaTI0MDBtKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fV0FSTV9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAogCX07CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fQ09MRF9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAogCX07CiAKIAlpZiAocnQgPT0gSTI0MDBNX1JUX1dBUk0pCkBAIC00MDEsNyArNDA2LDcgQEAKIAlpMjQwMG0tPmJ1c19yZXNldCA9IGkyNDAwbXNfYnVzX3Jlc2V0OwogCWkyNDAwbS0+YnVzX2JtX2NtZF9zZW5kID0gaTI0MDBtc19idXNfYm1fY21kX3NlbmQ7CiAJaTI0MDBtLT5idXNfYm1fd2FpdF9mb3JfYWNrID0gaTI0MDBtc19idXNfYm1fd2FpdF9mb3JfYWNrOwotCWkyNDAwbS0+YnVzX2Z3X25hbWUgPSBJMjQwME1TX0ZXX0ZJTEVfTkFNRTsKKwlpMjQwMG0tPmJ1c19md19uYW1lcyA9IGkyNDAwbXNfYnVzX2Z3X25hbWVzOwogCWkyNDAwbS0+YnVzX2JtX21hY19hZGRyX2ltcGFpcmVkID0gMTsKIAogCXJlc3VsdCA9IGkyNDAwbXNfZW5hYmxlX2Z1bmN0aW9uKGkyNDAwbXMtPmZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM3MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIEludGVsIFdpcmVsZXNzIFdpTUFYIENvbm5lY3Rpb24gMjQwMG0KKyAqIFN5c2ZzIGludGVyZmFjZXMgdG8gc2hvdyBkcml2ZXIgYW5kIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24gPGxpbnV4LXdpbWF4QGludGVsLmNvbT4KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSAiaTI0MDBtLmgiCisKKworI2RlZmluZSBEX1NVQk1PRFVMRSBzeXNmcworI2luY2x1ZGUgImRlYnVnLWxldmVscy5oIgorCisKKy8qCisgKiBTZXQgdGhlIGlkbGUgdGltZW91dCAobXNlY3MpCisgKgorICogRklYTUU6IGV2ZW50dWFsbHkgdGhpcyBzaG91bGQgYmUgYSBjb21tb24gV2lNQVggc3RhY2sgbWV0aG9kLCBidXQKKyAqIHdvdWxkIGxpa2UgdG8gd2FpdCB0byBzZWUgaG93IG90aGVyIGRldmljZXMgbWFuYWdlIGl0LgorICovCitzdGF0aWMKK3NzaXplX3QgaTI0MDBtX2lkbGVfdGltZW91dF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGkyNDAwbSAqaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0odG9fbmV0X2RldihkZXYpKTsKKwl1bnNpZ25lZCB2YWw7CisKKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWwpICE9IDEpCisJCWdvdG8gZXJyb3Jfbm9fdW5zaWduZWQ7CisJaWYgKHZhbCAhPSAwICYmICh2YWwgPCAxMDAgfHwgdmFsID4gMzAwMDAwIHx8IHZhbCAlIDEwMCAhPSAwKSkgeworCQlkZXZfZXJyKGRldiwgImlkbGVfdGltZW91dDogJXU6IGludmFsaWQgbXNlY3Mgc3BlY2lmaWNhdGlvbjsgIgorCQkJInZhbGlkIHZhbHVlcyBhcmUgMCwgMTAwLTMwMDAwMCBpbiAxMDAgaW5jcmVtZW50c1xuIiwKKwkJCXZhbCk7CisJCWdvdG8gZXJyb3JfYmFkX3ZhbHVlOworCX0KKwlyZXN1bHQgPSBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChpMjQwMG0sIHZhbCk7CisJaWYgKHJlc3VsdCA+PSAwKQorCQlyZXN1bHQgPSBzaXplOworZXJyb3Jfbm9fdW5zaWduZWQ6CitlcnJvcl9iYWRfdmFsdWU6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljCitERVZJQ0VfQVRUUihpMjQwMG1faWRsZV90aW1lb3V0LCBTX0lXVVNSLAorCSAgICBOVUxMLCBpMjQwMG1faWRsZV90aW1lb3V0X3N0b3JlKTsKKworc3RhdGljCitzdHJ1Y3QgYXR0cmlidXRlICppMjQwMG1fZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2kyNDAwbV9pZGxlX3RpbWVvdXQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpMjQwMG1fZGV2X2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IGkyNDAwbV9kZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCmluZGV4IDk3MDJjMjJiLi42YWRkMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLW5vdGlmLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJZGV2X2VycihkZXYsICJIVyBCVUc/IFVua25vd24vdW5leHBlY3RlZCBkYXRhIGluIG5vdGlmaWNhdGlvbiAiCiAJCQkibWVzc2FnZSAoJXp1IGJ5dGVzKVxuIiwgYnVmX2xlbik7CiAJCXNucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpICwgZGV2LT5idXNfaWQpOworCQkJIGRldl9kcml2ZXJfc3RyaW5nKGRldiksIGRldl9uYW1lKGRldikpOwogCQlpZiAoYnVmX2xlbiA+IDY0KSB7CiAJCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgcHJlZml4LCBEVU1QX1BSRUZJWF9PRkZTRVQsCiAJCQkJICAgICAgIDgsIDQsIGJ1ZiwgNjQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCmluZGV4IGM2ZDkzNDYuLmNhNDE1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKQEAgLTczLDcgKzczLDE0IEBACiAKIAogLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXVzYi0iIEkyNDAwTV9GV19WRVJTSU9OICIuc2JjZiIKK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG11X2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80ICJpMjQwMG0tZnctdXNiLTEuNC5zYmNmIgorCUkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzQsCisjZGVmaW5lIEkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzMgImkyNDAwbS1mdy11c2ItMS4zLnNiY2YiCisJSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfMywKKwlOVUxMLAorfTsKKwogCiBzdGF0aWMKIGludCBpMjQwMG11X2J1c19kZXZfc3RhcnQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQpAQCAtMjExLDE2ICsyMTgsMTYgQEAKIAkJY29udGFpbmVyX29mKGkyNDAwbSwgc3RydWN0IGkyNDAwbXUsIGkyNDAwbSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX1dBUk1fQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKIAl9OwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0NPTERfQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKIAl9OwogCiAJZF9mbnN0YXJ0KDMsIGRldiwgIihpMjQwMG0gJXAgcnQgJXUpXG4iLCBpMjQwMG0sIHJ0KTsKQEAgLTM5NCw3ICs0MDEsNyBAQAogCWkyNDAwbS0+YnVzX3Jlc2V0ID0gaTI0MDBtdV9idXNfcmVzZXQ7CiAJaTI0MDBtLT5idXNfYm1fY21kX3NlbmQgPSBpMjQwMG11X2J1c19ibV9jbWRfc2VuZDsKIAlpMjQwMG0tPmJ1c19ibV93YWl0X2Zvcl9hY2sgPSBpMjQwMG11X2J1c19ibV93YWl0X2Zvcl9hY2s7Ci0JaTI0MDBtLT5idXNfZndfbmFtZSA9IEkyNDAwTVVfRldfRklMRV9OQU1FOworCWkyNDAwbS0+YnVzX2Z3X25hbWVzID0gaTI0MDBtdV9idXNfZndfbmFtZXM7CiAJaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC01OTQsNCArNjAxLDUgQEAKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIDI0MDBNIFdpTUFYIG5ldHdvcmtpbmcgZm9yIFVTQiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0ZJUk1XQVJFKEkyNDAwTVVfRldfRklMRV9OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80KTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGU0ZjlmNzQuLjYxMmZmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTUxLDYgKzE1MSwxMiBAQAogCS0tLWhlbHAtLS0KIAkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDgzODUgYW5kIDg2ODYgU0RJTyBkZXZpY2VzLgogCitjb25maWcgTElCRVJUQVNfU1BJCisJdHJpc3RhdGUgIk1hcnZlbGwgTGliZXJ0YXMgODY4NiBTUEkgODAyLjExYi9nIGNhcmRzIgorCWRlcGVuZHMgb24gTElCRVJUQVMgJiYgU1BJICYmIEdFTkVSSUNfR1BJTworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIGRldmljZXMuCisKIGNvbmZpZyBMSUJFUlRBU19ERUJVRwogCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIExpYmVydGFzIG1vZHVsZS4iCiAJZGVwZW5kcyBvbiBMSUJFUlRBUwpAQCAtMTg4LDEyNyArMTk0LDYgQEAKIAogCSAgVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHdpbGwgYmUgbmFtZWQgImFpcm8iLgogCi1jb25maWcgSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKLQlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAotCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciA4MDIuMTFiIHdpcmVsZXNzIGNhcmRzIGJhc2VkIG9uIHRoZSAiSGVybWVzIiBvcgotCSAgSW50ZXJzaWwgSEZBMzg0eCAoUHJpc20gMikgTUFDIGNvbnRyb2xsZXIuICBUaGlzIGluY2x1ZGVzIHRoZSB2YXN0Ci0JICBtYWpvcml0eSBvZiB0aGUgUENNQ0lBIDgwMi4xMWIgY2FyZHMgKHdoaWNoIGFyZSBuZWFybHkgYWxsIHJlYmFkZ2VzKQotCSAgLSBleGNlcHQgZm9yIHRoZSBDaXNjby9BaXJvbmV0IGNhcmRzLiAgQ2FyZHMgc3VwcG9ydGVkIGluY2x1ZGUgdGhlCi0JICBBcHBsZSBBaXJwb3J0IChub3QgYSBQQ01DSUEgY2FyZCksIFdhdmVsYW5JRUVFL09yaW5vY28sCi0JICBDYWJsZXRyb24vRW50ZXJhU3lzIFJvYW1hYm91dCwgRUxTQSBBaXJMYW5jZXIsIE1FTENPIEJ1ZmZhbG8sIEF2YXlhLAotCSAgSUJNIEhpZ2ggUmF0ZSBXaXJlbGVzcywgRmFycmFsb24gU3l5bGluZSwgU2Ftc3VuZyBNYWdpY0xBTiwgTmV0Z2VhcgotCSAgTUE0MDEsIExpbmtTeXMgV1BDLTExLCBELUxpbmsgRFdMLTY1MCwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbAotCSAgSVBXMjAxMSwgYW5kIFN5bWJvbCBTcGVjdHJ1bTI0IEhpZ2ggUmF0ZSBhbW9uZ3N0IG90aGVycy4KLQotCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdGhlIGd1dHMgb2YgdGhlIGRyaXZlciwgYnV0IGluIG9yZGVyIHRvCi0JICBhY3R1YWxseSB1c2UgYSBjYXJkIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBCi0JICBIZXJtZXMgY2FyZHMsIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzIG9yIHRoZSBBcHBsZSBBaXJwb3J0IGJlbG93LgotCi0JICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IGFsc28gbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrcyA6Ci0JICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPgotCi1jb25maWcgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKLQlib29sICJDYWNoZSBIZXJtZXMgZmlybXdhcmUgb24gZHJpdmVyIGluaXRpYWxpc2F0aW9uIgotCWRlcGVuZHMgb24gSEVSTUVTCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgU2F5IFkgdG8gY2FjaGUgYW55IGZpcm13YXJlIHJlcXVpcmVkIGJ5IHRoZSBIZXJtZXMgZHJpdmVycwotCSAgb24gc3RhcnR1cC4gIFRoZSBmaXJtd2FyZSB3aWxsIHJlbWFpbiBjYWNoZWQgdW50aWwgdGhlCi0JICBkcml2ZXIgaXMgdW5sb2FkZWQuICBUaGUgY2FjaGUgdXNlcyA2NEsgb2YgUkFNLgotCi0JICBPdGhlcndpc2UgbG9hZCB0aGUgZmlybXdhcmUgZnJvbSB1c2Vyc3BhY2UgYXMgcmVxdWlyZWQuICBJbgotCSAgdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHVubG9hZGVkIGFuZCByZXN0YXJ0ZWQKLQkgIHdoZW5ldmVyIHRoZSBmaXJtd2FyZSBpcyBjaGFuZ2VkLgotCi0JICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgWS4KLQotY29uZmlnIEFQUExFX0FJUlBPUlQKLQl0cmlzdGF0ZSAiQXBwbGUgQWlycG9ydCBzdXBwb3J0IChidWlsdC1pbikiCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBIRVJNRVMKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFpcnBvcnQgODAyLjExYiB3aXJlbGVzcyBFdGhlcm5ldCBoYXJkd2FyZQotCSAgYnVpbHQgaW50byB0aGUgTWFjaW50b3NoIGlCb29rIGFuZCBvdGhlciByZWNlbnQgUG93ZXJQQy1iYXNlZAotCSAgTWFjaW50b3NoIG1hY2hpbmVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgTHVjZW50IE9yaW5vY28gY2FyZCB3aXRoIAotCSAgYSBub24tc3RhbmRhcmQgaW50ZXJmYWNlLgotCi0JICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBaXJwb3J0IEV4dHJlbWUgKDgwMi4xMWIvZykuIFVzZQotCSAgdGhlIEJDTTQzeHggZHJpdmVyIGZvciBBaXJwb3J0IEV4dHJlbWUgY2FyZHMuCi0KLWNvbmZpZyBQTFhfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQgKE5ldGdlYXIgTUEzMDEgZXRjLikiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKLQkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQotCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAotCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0Ci0JICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLiAgVGhlIE5ldGdlYXIKLQkgIE1BMzAxIGlzIHN1Y2ggYW4gYWRhcHRvci4KLQotY29uZmlnIFRNRF9IRVJNRVMKLQl0cmlzdGF0ZSAiSGVybWVzIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKLQkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuCi0KLWNvbmZpZyBOT1JURUxfSEVSTUVTCi0JdHJpc3RhdGUgIk5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXJzLCBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuCi0KLWNvbmZpZyBQQ0lfSEVSTUVTCi0JdHJpc3RhdGUgIlByaXNtIDIuNSBQQ0kgODAyLjExYiBhZGFwdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDSSBhbmQgbWluaS1QQ0kgODAyLjExYiB3aXJlbGVzcyBOSUNzIGJhc2VkIG9uCi0JICB0aGUgUHJpc20gMi41IGNoaXBzZXQuICBUaGVzZSBhcmUgdHJ1ZSBQQ0kgY2FyZHMsIG5vdCB0aGUgODAyLjExYgotCSAgUENNQ0lBIGNhcmRzIGJ1bmRsZWQgd2l0aCBQQ0k8LT5QQ01DSUEgYWRhcHRvcnMgd2hpY2ggYXJlIGFsc28KLQkgIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1aWx0LWluIHdpcmVsZXNzIGFkYXB0b3JzIGluIGxhcHRvcHMgYXJlIG9mCi0JICB0aGlzIHZhcmlldHkuCi0KLWNvbmZpZyBQQ01DSUFfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBQQ01DSUEgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcyBhZGFwdG9ycywgc3VjaAotCSAgYXMgdGhlIEx1Y2VudCBXYXZlbGFuSUVFRS9Pcmlub2NvIGNhcmRzIGFuZCB0aGVpciBPRU0gKENhYmxldHJvbi8KLQkgIEVudGVyYVN5cyBSb2FtQWJvdXQgODAyLjExLCBFTFNBIEFpcmxhbmNlciwgTWVsY28gQnVmZmFsbyBhbmQKLQkgIG90aGVycykuICBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcwotCSAgc3VjaCBhcyB0aGUgTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiAgSXQgc2hvdWxkIGFsc28KLQkgIHdvcmsgb24gU3ltYm9sIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KLQotCSAgWW91IHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrczoKLQkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgotCi1jb25maWcgUENNQ0lBX1NQRUNUUlVNCi0JdHJpc3RhdGUgIlN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgUENNQ0lBIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKLQktLS1oZWxwLS0tCi0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbAotCSAgZmlybXdhcmUsIHN1Y2ggYXMgU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaAotCSAgY2FyZHMgYnkgU29ja2V0IENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCi0KLQkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGRvd25sb2FkIG9uIHN0YXJ0dXAuICBVdGlsaXRpZXMKLQkgIGZvciBkb3dubG9hZGluZyBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAotCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8+Ci0KIGNvbmZpZyBBVE1FTAogICAgICAgdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTB4IGNoaXBzZXQgIDgwMi4xMWIgc3VwcG9ydCIKICAgICAgIGRlcGVuZHMgb24gKFBDSSB8fCBQQ01DSUEpICYmIFdMQU5fODAyMTEKQEAgLTM0Myw2ICsyMjgsMTQgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgY29udGFpbmluZyB0aGUKIAkgIEF0bWVsIGF0NzZjNTAyIGFuZCBhdDc2YzUwNCBjaGlwcy4KIAorY29uZmlnIEFUNzZDNTBYX1VTQgorICAgICAgICB0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MDMvYXQ3NmM1MDUvYXQ3NmM1MDVhIFVTQiBjYXJkcyIKKyAgICAgICAgZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQgorICAgICAgICBzZWxlY3QgRldfTE9BREVSCisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBFbmFibGUgc3VwcG9ydCBmb3IgVVNCIFdpcmVsZXNzIGRldmljZXMgdXNpbmcgQXRtZWwgYXQ3NmM1MDMsCisgICAgICAgICAgYXQ3NmM1MDUgb3IgYXQ3NmM1MDVhIGNoaXBzLgorCiBjb25maWcgQUlST19DUwogCXRyaXN0YXRlICJDaXNjby9BaXJvbmV0IDM0WC8zNVgvNDUwMC80ODAwIFBDTUNJQSBjYXJkcyIKIAlkZXBlbmRzIG9uIFBDTUNJQSAmJiAoQlJPS0VOIHx8ICFNMzJSKSAmJiBXTEFOXzgwMjExCkBAIC01ODAsNiArNDczLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNV0w4SworCXRyaXN0YXRlICJNYXJ2ZWxsIDg4Vzh4eHggUENJL1BDSWUgV2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFBDSSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSB3aXJlbGVzcyBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbXdsOGsuICBJZiB1bnN1cmUsIHNheSBOLgorCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9LY29uZmlnIgpAQCAtNTkwLDUgKzQ5Miw2IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGFjNTkwZTFjLi5kNzgwNDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtMjQsNiArMjQsOCBAQAogb2JqLSQoQ09ORklHX1BDSV9BVE1FTCkgICAgICAgICArPSBhdG1lbF9wY2kubyAKIG9iai0kKENPTkZJR19QQ01DSUFfQVRNRUwpICAgICAgKz0gYXRtZWxfY3MubwogCitvYmotJChDT05GSUdfQVQ3NkM1MFhfVVNCKSAgICAgICs9IGF0NzZjNTB4LXVzYi5vCisKIG9iai0kKENPTkZJR19QUklTTTU0KQkJKz0gcHJpc201NC8KIAogb2JqLSQoQ09ORklHX0hPU1RBUCkJCSs9IGhvc3RhcC8KQEAgLTQ2LDYgKzQ4LDggQEAKIAogb2JqLSQoQ09ORklHX0FETTgyMTEpCSs9IGFkbTgyMTEubwogCitvYmotJChDT05GSUdfTVdMOEspCSs9IG13bDhrLm8KKwogb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bHdpZmkvCiBvYmotJChDT05GSUdfUlQyWDAwKQkrPSBydDJ4MDAvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBmYzQzMjJjLi43ZTgwYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC00OTYsMzkgKzQ5Niw0MSBAQAogICogc28gYWxsIHJpZCBhY2Nlc3Mgc2hvdWxkIHVzZSB0aGUgcmVhZC93cml0ZVhYWFJpZCByb3V0aW5lcy4KICAqLwogCi0vKiBUaGlzIGlzIHJlZHVuZGFudCBmb3IgeDg2IGFyY2hzLCBidXQgaXQgc2VlbXMgbmVjZXNzYXJ5IGZvciBBUk0gKi8KLSNwcmFnbWEgcGFjaygxKQotCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW1lIGZyb20gYW4gZW1haWwgc2VudCB0byBtZSBmcm9tIGFuIGVuZ2luZWVyIGF0CiAgICBhaXJvbmV0IGZvciBpbmNsdXNpb24gaW50byB0aGlzIGRyaXZlciAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgV2VwS2V5UmlkIFdlcEtleVJpZDsKK3N0cnVjdCBXZXBLZXlSaWQgewogCV9fbGUxNiBsZW47CiAJX19sZTE2IGtpbmRleDsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBrbGVuOwogCXU4IGtleVsxNl07Ci19IFdlcEtleVJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBmcm9tIHRoZSBBaXJvbmV0J3MgUEM0NTAwIERldmVsb3BlcnMgTWFudWFsICovCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkIFNzaWQ7CitzdHJ1Y3QgU3NpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBzc2lkWzMyXTsKLX0gU3NpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkUmlkIFNzaWRSaWQ7CitzdHJ1Y3QgU3NpZFJpZCB7CiAJX19sZTE2IGxlbjsKIAlTc2lkIHNzaWRzWzNdOwotfSBTc2lkUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IE1vZHVsYXRpb25SaWQgTW9kdWxhdGlvblJpZDsKK3N0cnVjdCBNb2R1bGF0aW9uUmlkIHsKICAgICAgICAgX19sZTE2IGxlbjsKICAgICAgICAgX19sZTE2IG1vZHVsYXRpb247CiAjZGVmaW5lIE1PRF9ERUZBVUxUIGNwdV90b19sZTE2KDApCiAjZGVmaW5lIE1PRF9DQ0sgY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgTU9EX01PSyBjcHVfdG9fbGUxNigyKQotfSBNb2R1bGF0aW9uUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IENvbmZpZ1JpZCBDb25maWdSaWQ7CitzdHJ1Y3QgQ29uZmlnUmlkIHsKIAlfX2xlMTYgbGVuOyAvKiBzaXplb2YoQ29uZmlnUmlkKSAqLwogCV9fbGUxNiBvcG1vZGU7IC8qIG9wZXJhdGluZyBtb2RlICovCiAjZGVmaW5lIE1PREVfU1RBX0lCU1MgY3B1X3RvX2xlMTYoMCkKQEAgLTY0OSw5ICs2NTEsMTAgQEAKICNkZWZpbmUgTUFHSUNfU1RBWV9JTl9DQU0gKDE8PDEwKQogCXU4IG1hZ2ljQ29udHJvbDsKIAlfX2xlMTYgYXV0b1dha2U7Ci19IENvbmZpZ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0dXNSaWQgU3RhdHVzUmlkOworc3RydWN0IFN0YXR1c1JpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBtb2RlOwpAQCAtNzA3LDIxICs3MTAsMjMgQEAKICNkZWZpbmUgU1RBVF9MRUFQRkFJTEVEIDkxCiAjZGVmaW5lIFNUQVRfTEVBUFRJTUVET1VUIDkyCiAjZGVmaW5lIFNUQVRfTEVBUENPTVBMRVRFIDkzCi19IFN0YXR1c1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0c1JpZCBTdGF0c1JpZDsKK3N0cnVjdCBTdGF0c1JpZCB7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgc3BhY2VyOwogCV9fbGUzMiB2YWxzWzEwMF07Ci19IFN0YXRzUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLQotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQVBMaXN0UmlkIEFQTGlzdFJpZDsKK3N0cnVjdCBBUExpc3RSaWQgewogCV9fbGUxNiBsZW47CiAJdTggYXBbNF1bRVRIX0FMRU5dOwotfSBBUExpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQ2FwYWJpbGl0eVJpZCBDYXBhYmlsaXR5UmlkOworc3RydWN0IENhcGFiaWxpdHlSaWQgewogCV9fbGUxNiBsZW47CiAJY2hhciBvdWlbM107CiAJY2hhciB6ZXJvOwpAQCAtNzQ4LDE3ICs3NTMsMTggQEAKIAlfX2xlMTYgYm9vdEJsb2NrVmVyOwogCV9fbGUxNiByZXF1aXJlZEhhcmQ7CiAJX19sZTE2IGV4dFNvZnRDYXA7Ci19IENhcGFiaWxpdHlSaWQ7Ci0KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQlNTTGlzdFJpZEV4dHJhIEJTU0xpc3RSaWRFeHRyYTsKK3N0cnVjdCBCU1NMaXN0UmlkRXh0cmEgewogICBfX2xlMTYgdW5rbm93bls0XTsKICAgdTggZml4ZWRbMTJdOyAvKiBXTEFOIG1hbmFnZW1lbnQgZnJhbWUgKi8KICAgdTggaWVwWzYyNF07Ci19IEJTU0xpc3RSaWRFeHRyYTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBCU1NMaXN0UmlkIEJTU0xpc3RSaWQ7CitzdHJ1Y3QgQlNTTGlzdFJpZCB7CiAgIF9fbGUxNiBsZW47CiAgIF9fbGUxNiBpbmRleDsgLyogRmlyc3QgaXMgMCBhbmQgMHhmZmZmIG1lYW5zIGVuZCBvZiBsaXN0ICovCiAjZGVmaW5lIFJBRElPX0ZIIDEgLyogRnJlcXVlbmN5IGhvcHBpbmcgcmFkaW8gdHlwZSAqLwpAQCAtNzg5LDMzICs3OTUsMzcgQEAKIAogICAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwogICBCU1NMaXN0UmlkRXh0cmEgZXh0cmE7Ci19IEJTU0xpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBCU1NMaXN0UmlkIGJzczsKICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfSBCU1NMaXN0RWxlbWVudDsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaUVudHJ5IHRkc1Jzc2lFbnRyeTsKK3N0cnVjdCB0ZHNSc3NpRW50cnkgewogICB1OCByc3NpcGN0OwogICB1OCByc3NpZEJtOwotfSB0ZHNSc3NpRW50cnk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaVJpZCB0ZHNSc3NpUmlkOworc3RydWN0IHRkc1Jzc2lSaWQgewogICB1MTYgbGVuOwogICB0ZHNSc3NpRW50cnkgeFsyNTZdOwotfSB0ZHNSc3NpUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1MTYgbGVuOwotCXUxNiBzdGF0ZTsKLQl1MTYgbXVsdGljYXN0VmFsaWQ7Cit0eXBlZGVmIHN0cnVjdCBNSUNSaWQgTUlDUmlkOworc3RydWN0IE1JQ1JpZCB7CisJX19sZTE2IGxlbjsKKwlfX2xlMTYgc3RhdGU7CisJX19sZTE2IG11bHRpY2FzdFZhbGlkOwogCXU4ICBtdWx0aWNhc3RbMTZdOwotCXUxNiB1bmljYXN0VmFsaWQ7CisJX19sZTE2IHVuaWNhc3RWYWxpZDsKIAl1OCAgdW5pY2FzdFsxNl07Ci19IE1JQ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBNSUNCdWZmZXIgTUlDQnVmZmVyOworc3RydWN0IE1JQ0J1ZmZlciB7CiAJX19iZTE2IHR5cGVsZW47CiAKIAl1bmlvbiB7CkBAIC04MzAsMTUgKzg0MCwxMyBAQAogCX0gdTsKIAlfX2JlMzIgbWljOwogCV9fYmUzMiBzZXE7Ci19IE1JQ0J1ZmZlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTggZGFbRVRIX0FMRU5dOwogCXU4IHNhW0VUSF9BTEVOXTsKIH0gZXRoZXJIZWFkOwogCi0jcHJhZ21hIHBhY2soKQotCiAjZGVmaW5lIFRYQ1RMX1RYT0sgKDE8PDEpIC8qIHJlcG9ydCBpZiB0eCBpcyBvayAqLwogI2RlZmluZSBUWENUTF9UWEVYICgxPDwyKSAvKiByZXBvcnQgaWYgdHggZmFpbHMgKi8KICNkZWZpbmUgVFhDVExfODAyXzMgKDA8PDMpIC8qIDgwMi4zIHBhY2tldCAqLwpAQCAtOTgxLDYgKzk4OSwxNCBAQAogCWRtYV9hZGRyX3QgaG9zdF9hZGRyOwogfSBUeEZpZDsKIAorc3RydWN0IHJ4X2hkciB7CisJX19sZTE2IHN0YXR1cywgbGVuOworCXU4IHJzc2lbMl07CisJdTggcmF0ZTsKKwl1OCBmcmVxOworCV9fbGUxNiB0bXBbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCAgY3RsOiAxNTsKIAl1bnNpZ25lZCBpbnQgIHJkeTogMTsKQEAgLTEwNzAsMTAgKzEwODYsNiBAQAogCX0KIH07CiAKLS8vIEZyZXF1ZW5jeSBsaXN0IChtYXAgY2hhbm5lbHMgdG8gZnJlcXVlbmNpZXMpCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogLy8gQSBmZXcgZGV0YWlscyBuZWVkZWQgZm9yIFdFUCAoV2lyZWxlc3MgRXF1aXZhbGVudCBQcml2YWN5KQogI2RlZmluZSBNQVhfS0VZX1NJWkUgMTMJCQkvLyAxMjggKD8pIGJpdHMKICNkZWZpbmUgTUlOX0tFWV9TSVpFICA1CQkJLy8gNDAgYml0cyBSQzQgLSBXRVAKQEAgLTEwODIsMTIgKzEwOTQsNiBAQAogCXU4CWtleVsxNl07CS8qIDQwLWJpdCBhbmQgMTA0LWJpdCBrZXlzICovCiB9IHdlcF9rZXlfdDsKIAotLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBJV19FTkNPREVfTk9LRVkKLSNkZWZpbmUgSVdfRU5DT0RFX05PS0VZICAgICAgICAgMHgwODAwICAvKiBLZXkgaXMgd3JpdGUgb25seSwgc28gbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSVdfRU5DT0RFX01PREUgIChJV19FTkNPREVfRElTQUJMRUQgfCBJV19FTkNPREVfUkVTVFJJQ1RFRCB8IElXX0VOQ09ERV9PUEVOKQotI2VuZGlmIC8qIElXX0VOQ09ERV9OT0tFWSAqLwotCiAvKiBMaXN0IG9mIFdpcmVsZXNzIEhhbmRsZXJzIChuZXcgQVBJKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglhaXJvX2hhbmRsZXJfZGVmOwogCkBAIC0xMTU1LDcgKzExNjEsNyBAQAogCSAgIHVzZSB0aGUgaGlnaCBiaXQgdG8gbWFyayB3aGV0aGVyIGl0IGlzIGluIHVzZS4gKi8KICNkZWZpbmUgTUFYX0ZJRFMgNgogI2RlZmluZSBNUElfTUFYX0ZJRFMgMQotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOwogCUNvbmZpZ1JpZCBjb25maWc7CiAJY2hhciBrZXlpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCiAJY2hhciBkZWZpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCkBAIC0xMjI5LDYgKzEyMzUsOSBAQAogI2RlZmluZQlQQ0lfU0hBUkVEX0xFTgkJMipNUElfTUFYX0ZJRFMqUEtUU0laRStSSURTSVpFCiAJY2hhcgkJCXByb2NfbmFtZVtJRk5BTVNJWl07CiAKKwlpbnQJCQl3ZXBfY2FwYWJsZTsKKwlpbnQJCQltYXhfd2VwX2lkeDsKKwogCS8qIFdQQS1yZWxhdGVkIHN0dWZmICovCiAJdW5zaWduZWQgaW50IGJzc0xpc3RGaXJzdDsKIAl1bnNpZ25lZCBpbnQgYnNzTGlzdE5leHQ7CkBAIC0xMjg3LDYgKzEyOTYsMjkgQEAKIHN0YXRpYyB2b2lkIGVtbWgzMl9maW5hbChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggZGlnZXN0WzRdKTsKIHN0YXRpYyBpbnQgZmxhc2hwY2hhcihzdHJ1Y3QgYWlyb19pbmZvICphaSxpbnQgYnl0ZSxpbnQgZHdlbGx0aW1lKTsKIAorc3RhdGljIHZvaWQgYWdlX21pY19jb250ZXh0KG1pY2NudHggKmN1ciwgbWljY250eCAqb2xkLCB1OCAqa2V5LCBpbnQga2V5X2xlbiwKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCS8qIElmIHRoZSBjdXJyZW50IE1JQyBjb250ZXh0IGlzIHZhbGlkIGFuZCBpdHMga2V5IGlzIHRoZSBzYW1lIGFzCisJICogdGhlIE1JQyByZWdpc3RlciwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChjdXItPnZhbGlkICYmIChtZW1jbXAoY3VyLT5rZXksIGtleSwga2V5X2xlbikgPT0gMCkpCisJCXJldHVybjsKKworCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCisJbWVtY3B5KG9sZCwgY3VyLCBzaXplb2YoKmN1cikpOworCisJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLworCW1lbWNweShjdXItPmtleSwga2V5LCBrZXlfbGVuKTsKKwljdXItPndpbmRvdyAgPSAzMzsgLyogV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZSAqLworCWN1ci0+cnggICAgICA9IDA7ICAvKiBSeCBTZXF1ZW5jZSBudW1iZXJzICovCisJY3VyLT50eCAgICAgID0gMDsgIC8qIFR4IHNlcXVlbmNlIG51bWJlcnMgKi8KKwljdXItPnZhbGlkICAgPSAxOyAgLyogS2V5IGlzIG5vdyB2YWxpZCAqLworCisJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KKwllbW1oMzJfc2V0c2VlZCgmY3VyLT5zZWVkLCBrZXksIGtleV9sZW4sIHRmbSk7Cit9CisKIC8qIG1pY2luaXQgLSBJbml0aWFsaXplIG1pYyBzZWVkICovCiAKIHN0YXRpYyB2b2lkIG1pY2luaXQoc3RydWN0IGFpcm9faW5mbyAqYWkpCkBAIC0xMjk3LDQ5ICsxMzI5LDI2IEBACiAJUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9NSUMsICZtaWNfcmlkLCBzaXplb2YobWljX3JpZCksIDApOwogCXVwKCZhaS0+c2VtKTsKIAotCWFpLT5taWNzdGF0cy5lbmFibGVkID0gKG1pY19yaWQuc3RhdGUgJiAweDAwRkYpID8gMSA6IDA7Ci0KLQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJLyogS2V5IG11c3QgYmUgdmFsaWQgYW5kIGRpZmZlcmVudCAqLwotCQlpZiAobWljX3JpZC5tdWx0aWNhc3RWYWxpZCAmJiAoIWFpLT5tb2RbMF0ubUN0eC52YWxpZCB8fAotCQkgICAgKG1lbWNtcCAoYWktPm1vZFswXS5tQ3R4LmtleSwgbWljX3JpZC5tdWx0aWNhc3QsCi0JCQkgICAgIHNpemVvZihhaS0+bW9kWzBdLm1DdHgua2V5KSkgIT0gMCkpKSB7Ci0JCQkvKiBBZ2UgY3VycmVudCBtaWMgQ29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzFdLm1DdHgsJmFpLT5tb2RbMF0ubUN0eCxzaXplb2YobWljY250eCkpOwotCQkJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzBdLm1DdHgua2V5LG1pY19yaWQubXVsdGljYXN0LHNpemVvZihtaWNfcmlkLm11bHRpY2FzdCkpOwotCQkJYWktPm1vZFswXS5tQ3R4LndpbmRvdyAgPSAzMzsgLy9XaW5kb3cgYWx3YXlzIHBvaW50cyB0byB0aGUgbWlkZGxlCi0JCQlhaS0+bW9kWzBdLm1DdHgucnggICAgICA9IDA7ICAvL1J4IFNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0ubUN0eC50eCAgICAgID0gMDsgIC8vVHggc2VxdWVuY2UgbnVtYmVycwotCQkJYWktPm1vZFswXS5tQ3R4LnZhbGlkICAgPSAxOyAgLy9LZXkgaXMgbm93IHZhbGlkCi0gIAotCQkJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KLQkJCWVtbWgzMl9zZXRzZWVkKCZhaS0+bW9kWzBdLm1DdHguc2VlZCxtaWNfcmlkLm11bHRpY2FzdCxzaXplb2YobWljX3JpZC5tdWx0aWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCi0JCS8qIEtleSBtdXN0IGJlIHZhbGlkIGFuZCBkaWZmZXJlbnQgKi8KLQkJaWYgKG1pY19yaWQudW5pY2FzdFZhbGlkICYmICghYWktPm1vZFswXS51Q3R4LnZhbGlkIHx8IAotCQkgICAgKG1lbWNtcChhaS0+bW9kWzBdLnVDdHgua2V5LCBtaWNfcmlkLnVuaWNhc3QsCi0JCQkgICAgc2l6ZW9mKGFpLT5tb2RbMF0udUN0eC5rZXkpKSAhPSAwKSkpIHsKLQkJCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMV0udUN0eCwmYWktPm1vZFswXS51Q3R4LHNpemVvZihtaWNjbnR4KSk7Ci0JCQkvKiBJbml0aWFsaXplIG5ldyBjb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMF0udUN0eC5rZXksbWljX3JpZC51bmljYXN0LHNpemVvZihtaWNfcmlkLnVuaWNhc3QpKTsKLQkKLQkJCWFpLT5tb2RbMF0udUN0eC53aW5kb3cgID0gMzM7IC8vV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZQotCQkJYWktPm1vZFswXS51Q3R4LnJ4ICAgICAgPSAwOyAgLy9SeCBTZXF1ZW5jZSBudW1iZXJzCi0JCQlhaS0+bW9kWzBdLnVDdHgudHggICAgICA9IDA7ICAvL1R4IHNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0udUN0eC52YWxpZCAgID0gMTsgIC8vS2V5IGlzIG5vdyB2YWxpZAotCQotCQkJLy9HaXZlIGtleSB0byBtaWMgc2VlZAotCQkJZW1taDMyX3NldHNlZWQoJmFpLT5tb2RbMF0udUN0eC5zZWVkLCBtaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCX0gZWxzZSB7Ci0gICAgICAvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwgdXBkYXRlCi0gICAgICAgKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSBrZXkgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgotICAgICAgICovCisJYWktPm1pY3N0YXRzLmVuYWJsZWQgPSAobGUxNl90b19jcHUobWljX3JpZC5zdGF0ZSkgJiAweDAwRkYpID8gMSA6IDA7CisJaWYgKCFhaS0+bWljc3RhdHMuZW5hYmxlZCkgeworCQkvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwKKwkJICogdXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIGtleSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCisJCSAqLwogCQlhaS0+bW9kWzBdLnVDdHgudmFsaWQgPSAwOwogCQlhaS0+bW9kWzBdLm1DdHgudmFsaWQgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKG1pY19yaWQubXVsdGljYXN0VmFsaWQpIHsKKwkJYWdlX21pY19jb250ZXh0KCZhaS0+bW9kWzBdLm1DdHgsICZhaS0+bW9kWzFdLm1DdHgsCisJCSAgICAgICAgICAgICAgICBtaWNfcmlkLm11bHRpY2FzdCwgc2l6ZW9mKG1pY19yaWQubXVsdGljYXN0KSwKKwkJICAgICAgICAgICAgICAgIGFpLT50Zm0pOworCX0KKworCWlmIChtaWNfcmlkLnVuaWNhc3RWYWxpZCkgeworCQlhZ2VfbWljX2NvbnRleHQoJmFpLT5tb2RbMF0udUN0eCwgJmFpLT5tb2RbMV0udUN0eCwKKwkJCQltaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLAorCQkJCWFpLT50Zm0pOwogCX0KIH0KIApAQCAtMjYzNywxNyArMjY0NiwyMSBAQAogCS5wYXJzZSA9IHdsbF9oZWFkZXJfcGFyc2UsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm8xMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYWlyb19vcGVuLAorCS5uZG9fc3RvcCAJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gYWlyb19zdGFydF94bWl0MTEsCisJLm5kb19nZXRfc3RhdHMgCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCB3aWZpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFpcm8xMV9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZhaXJvX2hlYWRlcl9vcHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYWlyb19zdGFydF94bWl0MTE7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmYWlyb19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYWlyb19zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5kb19pb2N0bCA9ICZhaXJvX2lvY3RsOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmYWlyb19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9ICZhaXJvX29wZW47Ci0JZGV2LT5zdG9wID0gJmFpcm9fY2xvc2U7CiAKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgPSBFVEhfSExFTjsKQEAgLTI3MzAsMjcgKzI3NDMsMzIgQEAKIAkJCSAgICAgICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCi1zdGF0aWMgaW50IGFpcm9fdGVzdF93cGFfY2FwYWJsZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKLXsKLQlpbnQgc3RhdHVzOwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGFpcm9fc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBhaXJvX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGFpcm9fc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAotCXN0YXR1cyA9IHJlYWRDYXBhYmlsaXR5UmlkKGFpLCAmY2FwX3JpZCwgMSk7Ci0JaWYgKHN0YXR1cyAhPSBTVUNDRVNTKSByZXR1cm4gMDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXBpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFpcm9fb3BlbiwKKwkubmRvX3N0b3AJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXBpX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYWlyb19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBhaXJvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKLQkvKiBPbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTcgb3IgYmV0dGVyIGNhbiBkbyBXUEEgKi8KLQlpZiAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA+IDB4NTMwCi0JICB8fCAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA9PSAweDUzMAotCSAgICAgICYmIGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFN1YlZlcikgPj0gMTcpKSB7Ci0JCWFpcm9fcHJpbnRfaW5mbygiIiwgIldQQSBpcyBzdXBwb3J0ZWQuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIE5vIFdQQSBzdXBwb3J0ICovCi0JYWlyb19wcmludF9pbmZvKCIiLCAiV1BBIHVuc3VwcG9ydGVkIChvbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTciCi0JCSIgYW5kIGdyZWF0ZXIgc3VwcG9ydCBXUEEuICBEZXRlY3RlZCAlcykiLCBjYXBfcmlkLnByb2RWZXIpOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKl9pbml0X2Fpcm9fY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwKIAkJCQkJICAgaW50IGlzX3BjbWNpYSwgc3RydWN0IHBjaV9kZXYgKnBjaSwKQEAgLTI3NTksNiArMjc3Nyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaTsKIAlpbnQgaSwgcmM7CisJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwogCiAJLyogQ3JlYXRlIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqYWkpLCAiIiwgZXRoZXJfc2V0dXApOwpAQCAtMjc4OCwyMiArMjgwNywxNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAlhaXJvX25ldHdvcmtzX2luaXRpYWxpemUgKGFpKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKKwogCS8qIFRoZSBBaXJvLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXBpX3N0YXJ0X3htaXQ7Ci0JfSBlbHNlCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmFpcm9fc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZhaXJvX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZhaXJvX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZhaXJvX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gJmFpcm9faW9jdGw7CisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKQorCQlkZXYtPm5ldGRldl9vcHMgPSAmbXBpX25ldGRldl9vcHM7CisJZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAmYWlyb19uZXRkZXZfb3BzOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKIAlhaS0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZhaS0+c3B5X2RhdGE7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJmFpLT53aXJlbGVzc19kYXRhOwotCWRldi0+Y2hhbmdlX210dSA9ICZhaXJvX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gJmFpcm9fb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWlyb19jbG9zZTsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTI4MjgsNyArMjg0MSw3IEBACiAJfQogCiAJaWYgKHByb2JlKSB7Ci0JCWlmICggc2V0dXBfY2FyZCggYWksIGRldi0+ZGV2X2FkZHIsIDEgKSAhPSBTVUNDRVNTICkgeworCQlpZiAoc2V0dXBfY2FyZChhaSwgZGV2LT5kZXZfYWRkciwgMSkgIT0gU1VDQ0VTUykgewogCQkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiTUFDIGNvdWxkIG5vdCBiZSBlbmFibGVkIiApOwogCQkJcmMgPSAtRUlPOwogCQkJZ290byBlcnJfb3V0X21hcDsKQEAgLTI4MzgsMTggKzI4NTEsNiBAQAogCQlzZXRfYml0KEZMQUdfRkxBU0hJTkcsICZhaS0+ZmxhZ3MpOwogCX0KIAotCS8qIFRlc3QgZm9yIFdQQSBzdXBwb3J0ICovCi0JaWYgKGFpcm9fdGVzdF93cGFfY2FwYWJsZShhaSkpIHsKLQkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKLQkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOwotCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKLQl9IGVsc2UgewotCQlhaS0+YnNzTGlzdEZpcnN0ID0gUklEX0JTU0xJU1RGSVJTVDsKLQkJYWktPmJzc0xpc3ROZXh0ID0gUklEX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKSAtIHNpemVvZihCU1NMaXN0UmlkRXh0cmEpOwotCX0KLQogCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7CkBAIC0yODYwLDYgKzI4NjEsNDAgQEAKIAlpZiAoIWFpLT53aWZpZGV2KQogCQlnb3RvIGVycl9vdXRfcmVnOwogCisJcmMgPSByZWFkQ2FwYWJpbGl0eVJpZChhaSwgJmNhcF9yaWQsIDEpOworCWlmIChyYyAhPSBTVUNDRVNTKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X3dpZmk7CisJfQorCS8qIFdFUCBjYXBhYmlsaXR5IGRpc2NvdmVyeSAqLworCWFpLT53ZXBfY2FwYWJsZSA9IChjYXBfcmlkLnNvZnRDYXAgJiBjcHVfdG9fbGUxNigweDAyKSkgPyAxIDogMDsKKwlhaS0+bWF4X3dlcF9pZHggPSAoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkpID8gMyA6IDA7CisKKwlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiRmlybXdhcmUgdmVyc2lvbiAleC4leC4lMDJ4IiwKKwkgICAgICAgICAgICAgICAgKChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4+IDgpICYgMHhGKSwKKwkgICAgICAgICAgICAgICAgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgJiAweEZGKSwKKwkgICAgICAgICAgICAgICAgbGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0U3ViVmVyKSk7CisKKwkvKiBUZXN0IGZvciBXUEEgc3VwcG9ydCAqLworCS8qIE9ubHkgZmlybXdhcmUgdmVyc2lvbnMgNS4zMC4xNyBvciBiZXR0ZXIgY2FuIGRvIFdQQSAqLworCWlmIChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4gMHg1MzAKKwkgfHwgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgPT0gMHg1MzAKKwkgICAgICAmJiBsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRTdWJWZXIpID49IDE3KSkgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSBzdXBwb3J0ZWQuIik7CisKKwkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOworCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKKwl9IGVsc2UgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSB1bnN1cHBvcnRlZCB3aXRoIGZpcm13YXJlICIKKwkJCSJ2ZXJzaW9ucyBvbGRlciB0aGFuIDUuMzAuMTcuIik7CisKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9CU1NMSVNURklSU1Q7CisJCWFpLT5ic3NMaXN0TmV4dCA9IFJJRF9CU1NMSVNUTkVYVDsKKwkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCkgLSBzaXplb2YoQlNTTGlzdFJpZEV4dHJhKTsKKwl9CisKIAlzZXRfYml0KEZMQUdfUkVHSVNURVJFRCwmYWktPmZsYWdzKTsKIAlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiTUFDIGVuYWJsZWQgJXBNIiwgZGV2LT5kZXZfYWRkcik7CiAKQEAgLTMxMjcsMzE0ICszMTYyLDM1NCBAQAogCXJldHVybiAyNDsKIH0KIAorc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfY2lzY29fbWljKHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKSkgeworCQlzZXRfYml0KEpPQl9NSUMsICZhaS0+am9icyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWktPnRocl93YWl0KTsKKwl9Cit9CisKKy8qIEFpcm8gU3RhdHVzIGNvZGVzICovCisjZGVmaW5lIFNUQVRfTk9CRUFDT04JMHg4MDAwIC8qIExvc3Mgb2Ygc3luYyAtIG1pc3NlZCBiZWFjb25zICovCisjZGVmaW5lIFNUQVRfTUFYUkVUUklFUwkweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KKyNkZWZpbmUgU1RBVF9NQVhBUkwJMHg4MDAyIC8qIExvc3Mgb2Ygc3luYyAtIGF2ZXJhZ2UgcmV0cnkgbGV2ZWwgZXhjZWVkZWQqLworI2RlZmluZSBTVEFUX0ZPUkNFTE9TUwkweDgwMDMgLyogTG9zcyBvZiBzeW5jIC0gaG9zdCByZXF1ZXN0ICovCisjZGVmaW5lIFNUQVRfVFNGU1lOQwkweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLworI2RlZmluZSBTVEFUX0RFQVVUSAkweDgxMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfRElTQVNTT0MJMHg4MjAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FTU09DX0ZBSUwJMHg4NDAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FVVEhfRkFJTAkweDAzMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfQVNTT0MJMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KKyNkZWZpbmUgU1RBVF9SRUFTU09DICAgIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KKworc3RhdGljIHZvaWQgYWlyb19wcmludF9zdGF0dXMoY29uc3QgY2hhciAqZGV2bmFtZSwgdTE2IHN0YXR1cykKK3sKKwl1OCByZWFzb24gPSBzdGF0dXMgJiAweEZGOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFNUQVRfTk9CRUFDT046CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJsaW5rIGxvc3QgKG1pc3NlZCBiZWFjb25zKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfTUFYUkVUUklFUzoKKwljYXNlIFNUQVRfTUFYQVJMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAibGluayBsb3N0IChtYXggcmV0cmllcykiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0ZPUkNFTE9TUzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAobG9jYWwgY2hvaWNlKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfVFNGU1lOQzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAoVFNGIHN5bmMgbG9zdCkiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0RFQVVUSDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImRlYXV0aGVudGljYXRlZCAocmVhc29uOiAlZCkiLCByZWFzb24pOworCQlicmVhazsKKwljYXNlIFNUQVRfRElTQVNTT0M6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJkaXNhc3NvY2lhdGVkIChyZWFzb246ICVkKSIsIHJlYXNvbik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9BU1NPQ19GQUlMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAiYXNzb2NpYXRpb24gZmFpbGVkIChyZWFzb246ICVkKSIsCisJCQkgICAgICAgcmVhc29uKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0FVVEhfRkFJTDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImF1dGhlbnRpY2F0aW9uIGZhaWxlZCAocmVhc29uOiAlZCkiLAorCQkJICAgICAgIHJlYXNvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfbGluayhzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IHNjYW5fZm9yY2Vsb3NzID0gMDsKKwl1MTYgc3RhdHVzOworCisJLyogR2V0IG5ldyBzdGF0dXMgYW5kIGFja25vd2xlZGdlIHRoZSBsaW5rIGNoYW5nZSAqLworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KElONDUwMChhaSwgTElOS1NUQVQpKTsKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfTElOSyk7CisKKwlpZiAoKHN0YXR1cyA9PSBTVEFUX0ZPUkNFTE9TUykgJiYgKGFpLT5zY2FuX3RpbWVvdXQgPiAwKSkKKwkJc2Nhbl9mb3JjZWxvc3MgPSAxOworCisJYWlyb19wcmludF9zdGF0dXMoYWktPmRldi0+bmFtZSwgc3RhdHVzKTsKKworCWlmICgoc3RhdHVzID09IFNUQVRfQVNTT0MpIHx8IChzdGF0dXMgPT0gU1RBVF9SRUFTU09DKSkgeworCQlpZiAoYXV0b193ZXApCisJCQlhaS0+ZXhwaXJlcyA9IDA7CisJCWlmIChhaS0+bGlzdF9ic3NfdGFzaykKKwkJCXdha2VfdXBfcHJvY2VzcyhhaS0+bGlzdF9ic3NfdGFzayk7CisJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYWktPmZsYWdzKTsKKwkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFpLT5mbGFncyk7CisKKwkJaWYgKGRvd25fdHJ5bG9jaygmYWktPnNlbSkgIT0gMCkgeworCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhaS0+am9icyk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFpLT50aHJfd2FpdCk7CisJCX0gZWxzZQorCQkJYWlyb19zZW5kX2V2ZW50KGFpLT5kZXYpOworCX0gZWxzZSBpZiAoIXNjYW5fZm9yY2Vsb3NzKSB7CisJCWlmIChhdXRvX3dlcCAmJiAhYWktPmV4cGlyZXMpIHsKKwkJCWFpLT5leHBpcmVzID0gUlVOX0FUKDMqSFopOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOworCQl9CisKKwkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJ1wwJywgRVRIX0FMRU4pOworCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGFpLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfcngoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJX19sZTE2IGZjLCB2LCAqYnVmZmVyLCB0bXBidWZbNF07CisJdTE2IGxlbiwgaGRybGVuID0gMCwgZ2FwLCBmaWQ7CisJc3RydWN0IHJ4X2hkciBoZHI7CisJaW50IHN1Y2Nlc3MgPSAwOworCisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCAmYWktPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKQorCQkJbXBpX3JlY2VpdmVfODAyXzExKGFpKTsKKwkJZWxzZQorCQkJbXBpX3JlY2VpdmVfODAyXzMoYWkpOworCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBSWEZJRCk7CisKKwkvKiBHZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KKwlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKSB7CisJCWJhcF9zZXR1cCAoYWksIGZpZCwgNCwgQkFQMCk7CisJCWJhcF9yZWFkIChhaSwgKF9fbGUxNiopJmhkciwgc2l6ZW9mKGhkciksIEJBUDApOworCQkvKiBCYWQgQ1JDLiBJZ25vcmUgcGFja2V0ICovCisJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCisJCQloZHIubGVuID0gMDsKKwkJaWYgKGFpLT53aWZpZGV2ID09IE5VTEwpCisJCQloZHIubGVuID0gMDsKKwl9IGVsc2UgeworCQliYXBfc2V0dXAoYWksIGZpZCwgMHgzNiwgQkFQMCk7CisJCWJhcF9yZWFkKGFpLCAmaGRyLmxlbiwgMiwgQkFQMCk7CisJfQorCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOworCisJaWYgKGxlbiA+IEFJUk9fREVGX01UVSkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQmFkIHNpemUgJWQiLCBsZW4pOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChsZW4gPT0gMCkKKwkJZ290byBkb25lOworCisJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQliYXBfcmVhZChhaSwgJmZjLCBzaXplb2YgKGZjKSwgQkFQMCk7CisJCWhkcmxlbiA9IGhlYWRlcl9sZW4oZmMpOworCX0gZWxzZQorCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIGhkcmxlbiArIDIgKyAyKTsKKwlpZiAoIXNrYikgeworCQlhaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBUaGlzIHdheSB0aGUgSVAgaGVhZGVyIGlzIGFsaWduZWQgKi8KKwlidWZmZXIgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCBsZW4gKyBoZHJsZW4pOworCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJYnVmZmVyWzBdID0gZmM7CisJCWJhcF9yZWFkKGFpLCBidWZmZXIgKyAxLCBoZHJsZW4gLSAyLCBCQVAwKTsKKwkJaWYgKGhkcmxlbiA9PSAyNCkKKwkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIDYsIEJBUDApOworCisJCWJhcF9yZWFkKGFpLCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKKwkJZ2FwID0gbGUxNl90b19jcHUodik7CisJCWlmIChnYXApIHsKKwkJCWlmIChnYXAgPD0gOCkgeworCQkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIGdhcCwgQkFQMCk7CisJCQl9IGVsc2UgeworCQkJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJnYXBsZW4gdG9vICIKKwkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKKwkJCX0KKwkJfQorCQliYXBfcmVhZChhaSwgYnVmZmVyICsgaGRybGVuLzIsIGxlbiwgQkFQMCk7CisJfSBlbHNlIHsKKwkJTUlDQnVmZmVyIG1pY2J1ZjsKKworCQliYXBfcmVhZChhaSwgYnVmZmVyLCBFVEhfQUxFTiAqIDIsIEJBUDApOworCQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopICZtaWNidWYsIHNpemVvZiAobWljYnVmKSwgQkFQMCk7CisJCQlpZiAobnRvaHMobWljYnVmLnR5cGVsZW4pID4gMHgwNURDKQorCQkJCWJhcF9zZXR1cChhaSwgZmlkLCAweDQ0LCBCQVAwKTsKKwkJCWVsc2UgeworCQkJCWlmIChsZW4gPD0gc2l6ZW9mIChtaWNidWYpKSB7CisJCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlsZW4gLT0gc2l6ZW9mKG1pY2J1Zik7CisJCQkJc2tiX3RyaW0oc2tiLCBsZW4gKyBoZHJsZW4pOworCQkJfQorCQl9CisKKwkJYmFwX3JlYWQoYWksIGJ1ZmZlciArIEVUSF9BTEVOLCBsZW4sIEJBUDApOworCQlpZiAoZGVjYXBzdWxhdGUoYWksICZtaWNidWYsIChldGhlckhlYWQqKSBidWZmZXIsIGxlbikpCisJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKKwkJZWxzZQorCQkJc3VjY2VzcyA9IDE7CisJfQorCisjaWZkZWYgV0lSRUxFU1NfU1BZCisJaWYgKHN1Y2Nlc3MgJiYgKGFpLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkpIHsKKwkJY2hhciAqc2E7CisJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKworCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KKwkJaWYgKCF0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJCXNhID0gKGNoYXIgKikgYnVmZmVyICsgNjsKKwkJCWJhcF9zZXR1cChhaSwgZmlkLCA4LCBCQVAwKTsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopIGhkci5yc3NpLCAyLCBCQVAwKTsKKwkJfSBlbHNlCisJCQlzYSA9IChjaGFyICopIGJ1ZmZlciArIDEwOworCQl3c3RhdHMucXVhbCA9IGhkci5yc3NpWzBdOworCQlpZiAoYWktPnJzc2kpCisJCQl3c3RhdHMubGV2ZWwgPSAweDEwMCAtIGFpLT5yc3NpW2hkci5yc3NpWzFdXS5yc3NpZEJtOworCQllbHNlCisJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKKwkJd3N0YXRzLm5vaXNlID0gYWktPndzdGF0cy5xdWFsLm5vaXNlOworCQl3c3RhdHMudXBkYXRlZCA9ICBJV19RVUFMX0xFVkVMX1VQREFURUQKKwkJCQl8IElXX1FVQUxfUVVBTF9VUERBVEVECisJCQkJfCBJV19RVUFMX0RCTTsKKwkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJCXdpcmVsZXNzX3NweV91cGRhdGUoYWktPmRldiwgc2EsICZ3c3RhdHMpOworCX0KKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKworZG9uZToKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCisJaWYgKHN1Y2Nlc3MpIHsKKwkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQkJc2tiLT5kZXYgPSBhaS0+d2lmaWRldjsKKwkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CisJCX0gZWxzZQorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWktPmRldik7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQluZXRpZl9yeChza2IpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfdHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBzdGF0dXMpCit7CisJaW50IGksIGxlbiA9IDAsIGluZGV4ID0gLTE7CisJdTE2IGZpZDsKKworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIC0xKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWktPmF1eF9sb2NrLCBmbGFncyk7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhaS0+dHhxKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWktPmF1eF9sb2NrLGZsYWdzKTsKKwkJCW1waV9zZW5kX3BhY2tldChhaS0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJmFpLT5mbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaS0+YXV4X2xvY2ssZmxhZ3MpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShhaS0+ZGV2KTsKKwkJfQorCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhDUFkgfCBFVl9UWEVYQykpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBUWENPTVBMRklEKTsKKworCWZvcihpID0gMDsgaSA8IE1BWF9GSURTOyBpKyspIHsKKwkJaWYgKChhaS0+Zmlkc1tpXSAmIDB4ZmZmZikgPT0gZmlkKSB7CisJCQlsZW4gPSBhaS0+Zmlkc1tpXSA+PiAxNjsKKwkJCWluZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChpbmRleCAhPSAtMSkgeworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIGluZGV4KTsKKworCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhFWEMpKTsKKworCQkvKiBTZXQgdXAgdG8gYmUgdXNlZCBhZ2FpbiAqLworCQlhaS0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOworCQlpZiAoaW5kZXggPCBNQVhfRklEUyAvIDIpIHsKKwkJCWlmICghdGVzdF9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPmRldik7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPndpZmlkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJT1VUNDUwMChhaSwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIlVuYWxsb2NhdGVkIEZJRCB3YXMgdXNlZCB0byB4bWl0Iik7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0JdTE2IHN0YXR1czsKLQl1MTYgZmlkOwotCXN0cnVjdCBhaXJvX2luZm8gKmFwcml2ID0gZGV2LT5tbF9wcml2OwotCXUxNiBzYXZlZEludGVycnVwdHMgPSAwOworCXUxNiBzdGF0dXMsIHNhdmVkSW50ZXJydXB0cyA9IDA7CisJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGhhbmRsZWQgPSAwOwogCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlmb3IgKDs7KSB7Ci0JCXN0YXR1cyA9IElONDUwMCggYXByaXYsIEVWU1RBVCApOwotCQlpZiAoICEoc3RhdHVzICYgU1RBVFVTX0lOVFMpIHx8IHN0YXR1cyA9PSAweGZmZmYgKSBicmVhazsKKwkJc3RhdHVzID0gSU40NTAwKGFpLCBFVlNUQVQpOworCQlpZiAoIShzdGF0dXMgJiBTVEFUVVNfSU5UUykgfHwgKHN0YXR1cyA9PSAweGZmZmYpKQorCQkJYnJlYWs7CiAKIAkJaGFuZGxlZCA9IDE7CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9BV0FLRSApIHsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKKwkJaWYgKHN0YXR1cyAmIEVWX0FXQUtFKSB7CisJCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfQVdBS0UpOworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0FXQUtFKTsKIAkJfQogCiAJCWlmICghc2F2ZWRJbnRlcnJ1cHRzKSB7Ci0JCQlzYXZlZEludGVycnVwdHMgPSBJTjQ1MDAoIGFwcml2LCBFVklOVEVOICk7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZJTlRFTiwgMCApOworCQkJc2F2ZWRJbnRlcnJ1cHRzID0gSU40NTAwKGFpLCBFVklOVEVOKTsKKwkJCU9VVDQ1MDAoYWksIEVWSU5URU4sIDApOwogCQl9CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9NSUMgKSB7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX01JQyApOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJc2V0X2JpdChKT0JfTUlDLCAmYXByaXYtPmpvYnMpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCX0KKwkJaWYgKHN0YXR1cyAmIEVWX01JQykgeworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX01JQyk7CisJCQlhaXJvX2hhbmRsZV9jaXNjb19taWMoYWkpOwogCQl9Ci0JCWlmICggc3RhdHVzICYgRVZfTElOSyApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQkJCWludCBzY2FuX2ZvcmNlbG9zcyA9IDA7Ci0JCQkvKiBUaGUgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQsIGlmIHlvdSB3YW50IHRvIHB1dCBhCi0JCQkgICBtb25pdG9yIGhvb2sgaW4sIGRvIGl0IGhlcmUuICAoUmVtZW1iZXIgdGhhdAotCQkJICAgaW50ZXJydXB0cyBhcmUgc3RpbGwgZGlzYWJsZWQhKQotCQkJKi8KLQkJCXUxNiBuZXdTdGF0dXMgPSBJTjQ1MDAoYXByaXYsIExJTktTVEFUKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfTElOSyk7Ci0JCQkvKiBIZXJlIGlzIHdoYXQgbmV3U3RhdHVzIG1lYW5zOiAqLwotI2RlZmluZSBOT0JFQUNPTiAweDgwMDAgLyogTG9zcyBvZiBzeW5jIC0gbWlzc2VkIGJlYWNvbnMgKi8KLSNkZWZpbmUgTUFYUkVUUklFUyAweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KLSNkZWZpbmUgTUFYQVJMIDB4ODAwMiAvKiBMb3NzIG9mIHN5bmMgLSBhdmVyYWdlIHJldHJ5IGxldmVsIGV4Y2VlZGVkKi8KLSNkZWZpbmUgRk9SQ0VMT1NTIDB4ODAwMyAvKiBMb3NzIG9mIHN5bmMgLSBob3N0IHJlcXVlc3QgKi8KLSNkZWZpbmUgVFNGU1lOQyAweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLwotI2RlZmluZSBERUFVVEggMHg4MTAwIC8qIERlYXV0aGVudGljYXRpb24gKGxvdyBieXRlIGlzIHJlYXNvbiBjb2RlKSAqLwotI2RlZmluZSBESVNBU1MgMHg4MjAwIC8qIERpc2Fzc29jaWF0aW9uIChsb3cgYnl0ZSBpcyByZWFzb24gY29kZSkgKi8KLSNkZWZpbmUgQVNTRkFJTCAweDg0MDAgLyogQXNzb2NpYXRpb24gZmFpbHVyZSAobG93IGJ5dGUgaXMgcmVhc29uCi0JCQkgIGNvZGUpICovCi0jZGVmaW5lIEFVVEhGQUlMIDB4MDMwMCAvKiBBdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb3cgYnl0ZSBpcyByZWFzb24KLQkJCSAgIGNvZGUpICovCi0jZGVmaW5lIEFTU09DSUFURUQgMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KLSNkZWZpbmUgUkVBU1NPQ0lBVEVEIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KLSNkZWZpbmUgUkNfUkVTRVJWRUQgMCAvKiBSZXNlcnZlZCByZXR1cm4gY29kZSAqLwotI2RlZmluZSBSQ19OT1JFQVNPTiAxIC8qIFVuc3BlY2lmaWVkIHJlYXNvbiAqLwotI2RlZmluZSBSQ19BVVRISU5WIDIgLyogUHJldmlvdXMgYXV0aGVudGljYXRpb24gaW52YWxpZCAqLwotI2RlZmluZSBSQ19ERUFVVEggMyAvKiBEZWF1dGhlbnRpY2F0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJICAgICAgIGxlYXZpbmcgKi8KLSNkZWZpbmUgUkNfTk9BQ1QgNCAvKiBEaXNhc3NvY2lhdGVkIGR1ZSB0byBpbmFjdGl2aXR5ICovCi0jZGVmaW5lIFJDX01BWExPQUQgNSAvKiBEaXNhc3NvY2lhdGVkIGJlY2F1c2UgQVAgaXMgdW5hYmxlIHRvIGhhbmRsZQotCQkJYWxsIGN1cnJlbnRseSBhc3NvY2lhdGVkIHN0YXRpb25zICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMiA2IC8qIENsYXNzIDIgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXV0aGVudGljYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMyA3IC8qIENsYXNzIDMgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXNzb2NpYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX1NUQVRMRUFWRSA4IC8qIERpc2Fzc29jaWF0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJCSAgbGVhdmluZyBCU1MgKi8KLSNkZWZpbmUgUkNfTk9BVVRIIDkgLyogU3RhdGlvbiByZXF1ZXN0aW5nIChSZSlBc3NvY2lhdGlvbiBpcyBub3QKLQkJICAgICAgIEF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcmVzcG9uZGluZyBzdGF0aW9uICovCi0JCQlpZiAobmV3U3RhdHVzID09IEZPUkNFTE9TUyAmJiBhcHJpdi0+c2Nhbl90aW1lb3V0ID4gMCkKLQkJCQlzY2FuX2ZvcmNlbG9zcyA9IDE7Ci0JCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCB8fCBuZXdTdGF0dXMgPT0gUkVBU1NPQ0lBVEVEKSB7Ci0JCQkJaWYgKGF1dG9fd2VwKQotCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IDA7Ci0JCQkJaWYgKGFwcml2LT5saXN0X2Jzc190YXNrKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3MoYXByaXYtPmxpc3RfYnNzX3Rhc2spOwotCQkJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYXByaXYtPmZsYWdzKTsKLQkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX01VTFRJLCAmYXByaXYtPmZsYWdzKTsKIAotCQkJCWlmIChkb3duX3RyeWxvY2soJmFwcml2LT5zZW0pICE9IDApIHsKLQkJCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhcHJpdi0+am9icyk7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9IGVsc2UKLQkJCQkJYWlyb19zZW5kX2V2ZW50KGRldik7Ci0JCQl9IGVsc2UgaWYgKCFzY2FuX2ZvcmNlbG9zcykgewotCQkJCWlmIChhdXRvX3dlcCAmJiAhYXByaXYtPmV4cGlyZXMpIHsKLQkJCQkJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoMypIWik7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9Ci0KLQkJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKLQkJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LE5VTEwpOwotCQkJfQorCQlpZiAoc3RhdHVzICYgRVZfTElOSykgeworCQkJLyogTGluayBzdGF0dXMgY2hhbmdlZCAqLworCQkJYWlyb19oYW5kbGVfbGluayhhaSk7CiAJCX0KIAogCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlY2VpdmUgKi8KLQkJaWYgKCBzdGF0dXMgJiBFVl9SWCAgKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQkJCV9fbGUxNiBmYywgdjsKLQkJCXUxNiBsZW4sIGhkcmxlbiA9IDA7Ci0jcHJhZ21hIHBhY2soMSkKLQkJCXN0cnVjdCB7Ci0JCQkJX19sZTE2IHN0YXR1cywgbGVuOwotCQkJCXU4IHJzc2lbMl07Ci0JCQkJdTggcmF0ZTsKLQkJCQl1OCBmcmVxOwotCQkJCV9fbGUxNiB0bXBbNF07Ci0JCQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCi0JCQl1MTYgZ2FwOwotCQkJX19sZTE2IHRtcGJ1Zls0XTsKLQkJCV9fbGUxNiAqYnVmZmVyOwotCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQltcGlfcmVjZWl2ZV84MDJfMTEoYXByaXYpOwotCQkJCWVsc2UKLQkJCQkJbXBpX3JlY2VpdmVfODAyXzMoYXByaXYpOwotCQkJCU9VVDQ1MDAoYXByaXYsIEVWQUNLLCBFVl9SWCk7Ci0JCQkJZ290byBleGl0cng7Ci0JCQl9Ci0KLQkJCWZpZCA9IElONDUwMCggYXByaXYsIFJYRklEICk7Ci0KLQkJCS8qIEdldCB0aGUgcGFja2V0IGxlbmd0aCAqLwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJhcF9zZXR1cCAoYXByaXYsIGZpZCwgNCwgQkFQMCk7Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCAoX19sZTE2KikmaGRyLCBzaXplb2YoaGRyKSwgQkFQMCk7Ci0JCQkJLyogQmFkIENSQy4gSWdub3JlIHBhY2tldCAqLwotCQkJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCi0JCQkJCWhkci5sZW4gPSAwOwotCQkJCWlmIChhcHJpdi0+d2lmaWRldiA9PSBOVUxMKQotCQkJCQloZHIubGVuID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJYmFwX3NldHVwIChhcHJpdiwgZmlkLCAweDM2LCBCQVAwKTsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZoZHIubGVuLCAyLCBCQVAwKTsKLQkJCX0KLQkJCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOwotCi0JCQlpZiAobGVuID4gQUlST19ERUZfTVRVKSB7Ci0JCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgIkJhZCBzaXplICVkIiwgbGVuKTsKLQkJCQlnb3RvIGJhZHJ4OwotCQkJfQotCQkJaWYgKGxlbiA9PSAwKQotCQkJCWdvdG8gYmFkcng7Ci0KLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZmYywgc2l6ZW9mKGZjKSwgQkFQMCk7Ci0JCQkJaGRybGVuID0gaGVhZGVyX2xlbihmYyk7Ci0JCQl9IGVsc2UKLQkJCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IoIGxlbiArIGhkcmxlbiArIDIgKyAyICk7Ci0JCQlpZiAoICFza2IgKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZ290byBiYWRyeDsKLQkJCX0KLQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIFRoaXMgd2F5IHRoZSBJUCBoZWFkZXIgaXMgYWxpZ25lZCAqLwotCQkJYnVmZmVyID0gKF9fbGUxNiopc2tiX3B1dCAoc2tiLCBsZW4gKyBoZHJsZW4pOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJ1ZmZlclswXSA9IGZjOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyICsgMSwgaGRybGVuIC0gMiwgQkFQMCk7Ci0JCQkJaWYgKGhkcmxlbiA9PSAyNCkKLQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIDYsIEJBUDApOwotCi0JCQkJYmFwX3JlYWQgKGFwcml2LCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKLQkJCQlnYXAgPSBsZTE2X3RvX2NwdSh2KTsKLQkJCQlpZiAoZ2FwKSB7Ci0JCQkJCWlmIChnYXAgPD0gOCkgewotCQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIGdhcCwgQkFQMCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiZ2FwbGVuIHRvbyAiCi0JCQkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKLQkJCQkJfQotCQkJCX0KLQkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciArIGhkcmxlbi8yLCBsZW4sIEJBUDApOwotCQkJfSBlbHNlIHsKLQkJCQlNSUNCdWZmZXIgbWljYnVmOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyLCBFVEhfQUxFTioyLCBCQVAwKTsKLQkJCQlpZiAoYXByaXYtPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJCQkJYmFwX3JlYWQgKGFwcml2LChfX2xlMTYqKSZtaWNidWYsc2l6ZW9mKG1pY2J1ZiksQkFQMCk7Ci0JCQkJCWlmIChudG9ocyhtaWNidWYudHlwZWxlbikgPiAweDA1REMpCi0JCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDB4NDQsIEJBUDApOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChsZW4gPD0gc2l6ZW9mKG1pY2J1ZikpCi0JCQkJCQkJZ290byBiYWRtaWM7Ci0KLQkJCQkJCWxlbiAtPSBzaXplb2YobWljYnVmKTsKLQkJCQkJCXNrYl90cmltIChza2IsIGxlbiArIGhkcmxlbik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYmFwX3JlYWQoYXByaXYsYnVmZmVyK0VUSF9BTEVOLGxlbixCQVAwKTsKLQkJCQlpZiAoZGVjYXBzdWxhdGUoYXByaXYsJm1pY2J1ZiwoZXRoZXJIZWFkKilidWZmZXIsbGVuKSkgewotYmFkbWljOgotCQkJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKLWJhZHJ4OgotCQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQkJCQkJZ290byBleGl0cng7Ci0JCQkJfQotCQkJfQotI2lmZGVmIFdJUkVMRVNTX1NQWQotCQkJaWYgKGFwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgewotCQkJCWNoYXIgKnNhOwotCQkJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQkJCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KLQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCQlzYSA9IChjaGFyKilidWZmZXIgKyA2OwotCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDgsIEJBUDApOwotCQkJCQliYXBfcmVhZCAoYXByaXYsIChfX2xlMTYqKWhkci5yc3NpLCAyLCBCQVAwKTsKLQkJCQl9IGVsc2UKLQkJCQkJc2EgPSAoY2hhciopYnVmZmVyICsgMTA7Ci0JCQkJd3N0YXRzLnF1YWwgPSBoZHIucnNzaVswXTsKLQkJCQlpZiAoYXByaXYtPnJzc2kpCi0JCQkJCXdzdGF0cy5sZXZlbCA9IDB4MTAwIC0gYXByaXYtPnJzc2lbaGRyLnJzc2lbMV1dLnJzc2lkQm07Ci0JCQkJZWxzZQotCQkJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKLQkJCQl3c3RhdHMubm9pc2UgPSBhcHJpdi0+d3N0YXRzLnF1YWwubm9pc2U7Ci0JCQkJd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCQl8IElXX1FVQUxfREJNOwotCQkJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCQkJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBzYSwgJndzdGF0cyk7Ci0JCQl9Ci0jZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCi0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCQkJc2tiLT5kZXYgPSBhcHJpdi0+d2lmaWRldjsKLQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwotCQkJfSBlbHNlCi0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCi0JCQluZXRpZl9yeCggc2tiICk7Ci0JCX0KLWV4aXRyeDoKKwkJaWYgKHN0YXR1cyAmIEVWX1JYKQorCQkJYWlyb19oYW5kbGVfcngoYWkpOwogCiAJCS8qIENoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwotCQlpZiAoICBzdGF0dXMgJiAoIEVWX1RYfEVWX1RYQ1BZfEVWX1RYRVhDICkgKSB7Ci0JCQlpbnQgaTsKLQkJCWludCBsZW4gPSAwOwotCQkJaW50IGluZGV4ID0gLTE7CisJCWlmIChzdGF0dXMgJiAoRVZfVFggfCBFVl9UWENQWSB8IEVWX1RYRVhDKSkKKwkJCWFpcm9faGFuZGxlX3R4KGFpLCBzdGF0dXMpOwogCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIC0xKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXByaXYtPmF1eF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFwcml2LT50eHEpKSB7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwcml2LT5hdXhfbG9jayxmbGFncyk7Ci0JCQkJCW1waV9zZW5kX3BhY2tldCAoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQljbGVhcl9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhcHJpdi0+ZmxhZ3MpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcHJpdi0+YXV4X2xvY2ssZmxhZ3MpOwotCQkJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCQkJCX0KLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssCi0JCQkJCXN0YXR1cyAmIChFVl9UWHxFVl9UWENQWXxFVl9UWEVYQykpOwotCQkJCWdvdG8gZXhpdHR4OwotCQkJfQotCi0JCQlmaWQgPSBJTjQ1MDAoYXByaXYsIFRYQ09NUExGSUQpOwotCi0JCQlmb3IoIGkgPSAwOyBpIDwgTUFYX0ZJRFM7IGkrKyApIHsKLQkJCQlpZiAoICggYXByaXYtPmZpZHNbaV0gJiAweGZmZmYgKSA9PSBmaWQgKSB7Ci0JCQkJCWxlbiA9IGFwcml2LT5maWRzW2ldID4+IDE2OwotCQkJCQlpbmRleCA9IGk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIGluZGV4KTsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYRVhDKSk7Ci0JCQkJLyogU2V0IHVwIHRvIGJlIHVzZWQgYWdhaW4gKi8KLQkJCQlhcHJpdi0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOwotCQkJCWlmIChpbmRleCA8IE1BWF9GSURTIC8gMikgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlULCAmYXByaXYtPmZsYWdzKSkKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShhcHJpdi0+d2lmaWRldik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKLQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiVW5hbGxvY2F0ZWQgRklEIHdhcyAiCi0JCQkJCSJ1c2VkIHRvIHhtaXQiICk7Ci0JCQl9Ci0JCX0KLWV4aXR0eDoKLQkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKQotCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsICJHb3Qgd2VpcmQgc3RhdHVzICV4IiwKKwkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKSB7CisJCQlhaXJvX3ByaW50X3dhcm4oYWktPmRldi0+bmFtZSwgIkdvdCB3ZWlyZCBzdGF0dXMgJXgiLAogCQkJCXN0YXR1cyAmIH5TVEFUVVNfSU5UUyAmIH5JR05PUkVfSU5UUyApOworCQl9CiAJfQogCiAJaWYgKHNhdmVkSW50ZXJydXB0cykKLQkJT1VUNDUwMCggYXByaXYsIEVWSU5URU4sIHNhdmVkSW50ZXJydXB0cyApOworCQlPVVQ0NTAwKGFpLCBFVklOVEVOLCBzYXZlZEludGVycnVwdHMpOwogCi0JLyogZG9uZS4uICovCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTM2MTMsMTggKzM2ODgsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgbGVuLCBoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKLSNwcmFnbWEgcGFjaygxKQotCXN0cnVjdCB7Ci0JCV9fbGUxNiBzdGF0dXMsIGxlbjsKLQkJdTggcnNzaVsyXTsKLQkJdTggcmF0ZTsKLQkJdTggZnJlcTsKLQkJX19sZTE2IHRtcFs0XTsKLQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCisJc3RydWN0IHJ4X2hkciBoZHI7CiAJdTE2IGdhcDsKIAl1MTYgKmJ1ZmZlcjsKLQljaGFyICpwdHIgPSBhaS0+cnhmaWRzWzBdLnZpcnR1YWxfaG9zdF9hZGRyKzQ7CisJY2hhciAqcHRyID0gYWktPnJ4Zmlkc1swXS52aXJ0dWFsX2hvc3RfYWRkciArIDQ7CiAKIAltZW1jcHlfZnJvbWlvKCZyeGQsIGFpLT5yeGZpZHNbMF0uY2FyZF9yYW1fb2ZmLCBzaXplb2YocnhkKSk7CiAJbWVtY3B5ICgoY2hhciAqKSZoZHIsIHB0ciwgc2l6ZW9mKGhkcikpOwpAQCAtMzY5MSw2ICszNzU4LDcgQEAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAluZXRpZl9yeCggc2tiICk7CisKIGJhZHJ4OgogCWlmIChyeGQudmFsaWQgPT0gMCkgewogCQlyeGQudmFsaWQgPSAxOwpAQCAtMzcwNSw3ICszNzczLDYgQEAKIAlDbWQgY21kOwogCVJlc3AgcnNwOwogCWludCBzdGF0dXM7Ci0JaW50IGk7CiAJU3NpZFJpZCBteVNzaWQ7CiAJX19sZTE2IGxhc3RpbmRleDsKIAlXZXBLZXlSaWQgd2tyOwpAQCAtMzc0Nyw2ICszODE0LDcgQEAKIAlpZiAobG9jaykKIAkJdXAoJmFpLT5zZW0pOwogCWlmIChhaS0+Y29uZmlnLmxlbiA9PSAwKSB7CisJCWludCBpOwogCQl0ZHNSc3NpUmlkIHJzc2lfcmlkOwogCQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CiAKQEAgLTM3OTQsMTQgKzM4NjIsMTIgQEAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5zbW9kIGNvbmZpZ3VyZWQKIAkJICAgcmF0ZXMgdG8gYWRkICovCiAJCWlmICggcmF0ZXNbMF0gKSB7Ci0JCQlpbnQgaSA9IDA7CiAJCQltZW1zZXQoYWktPmNvbmZpZy5yYXRlcywwLHNpemVvZihhaS0+Y29uZmlnLnJhdGVzKSk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgOCAmJiByYXRlc1tpXTsgaSsrICkgewogCQkJCWFpLT5jb25maWcucmF0ZXNbaV0gPSByYXRlc1tpXTsKIAkJCX0KIAkJfQogCQlpZiAoIGJhc2ljX3JhdGUgPiAwICkgewotCQkJaW50IGk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkgewogCQkJCWlmICggYWktPmNvbmZpZy5yYXRlc1tpXSA9PSBiYXNpY19yYXRlIHx8CiAJCQkJICAgICAhYWktPmNvbmZpZy5yYXRlcyApIHsKQEAgLTQ2ODYsNyArNDc1Miw3IEBACiAJU3RhdHNSaWQgc3RhdHM7CiAJaW50IGksIGo7CiAJX19sZTMyICp2YWxzID0gc3RhdHMudmFsczsKLQlpbnQgbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKKwlpbnQgbGVuOwogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2OTcsNiArNDc2Myw3IEBACiAJfQogCiAJcmVhZFN0YXRzUmlkKGFwcml2LCAmc3RhdHMsIHJpZCwgMSk7CisJbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKIAogICAgICAgICBqID0gMDsKIAlmb3IoaT0wOyBzdGF0c0xhYmVsc1tpXSE9KGNoYXIgKiktMSAmJiBpKjQ8bGVuOyBpKyspIHsKQEAgLTUxMzEsNTUgKzUxOTgsOTggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGF0IHRoZSBpbmRleC4gIElmIGluZGV4ID09IDB4ZmZmZgotICogdGhlIGluZGV4IG9mIHRoZSB0cmFuc21pdCBrZXkgaXMgcmV0dXJuZWQuICBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsCi0gKiAtMSB3aWxsIGJlIHJldHVybmVkLgorLyogUmV0dXJucyB0aGUgV0VQIGtleSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciAtMSBpZiB0aGF0IGtleSBkb2VzCisgKiBub3QgZXhpc3QuICBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgYXQgbGVhc3QgMTYgYnl0ZXMgaW4gbGVuZ3RoLgogICovCi1zdGF0aWMgaW50IGdldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgpIHsKK3N0YXRpYyBpbnQgZ2V0X3dlcF9rZXkoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgY2hhciAqYnVmLCB1MTYgYnVmbGVuKQorewogCVdlcEtleVJpZCB3a3I7CiAJaW50IHJjOwogCV9fbGUxNiBsYXN0aW5kZXg7CiAKIAlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDEsIDEpOwotCWlmIChyYyA9PSBTVUNDRVNTKSBkbyB7CisJaWYgKHJjICE9IFNVQ0NFU1MpCisJCXJldHVybiAtMTsKKwlkbyB7CiAJCWxhc3RpbmRleCA9IHdrci5raW5kZXg7Ci0JCWlmICh3a3Iua2luZGV4ID09IGNwdV90b19sZTE2KGluZGV4KSkgewotCQkJaWYgKGluZGV4ID09IDB4ZmZmZikgewotCQkJCXJldHVybiB3a3IubWFjWzBdOwotCQkJfQotCQkJcmV0dXJuIGxlMTZfdG9fY3B1KHdrci5rbGVuKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHdrci5raW5kZXgpID09IGluZGV4KSB7CisJCQlpbnQga2xlbiA9IG1pbl90KGludCwgYnVmbGVuLCBsZTE2X3RvX2NwdSh3a3Iua2xlbikpOworCQkJbWVtY3B5KGJ1Ziwgd2tyLmtleSwga2xlbik7CisJCQlyZXR1cm4ga2xlbjsKIAkJfQotCQlyZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJaWYgKHJjICE9IFNVQ0NFU1MpCisJCQlyZXR1cm4gLTE7CiAJfSB3aGlsZSAobGFzdGluZGV4ICE9IHdrci5raW5kZXgpOwogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBzZXRfd2VwX2tleShzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IGluZGV4LAotCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCB1MTYga2V5bGVuLCBpbnQgcGVybSwgaW50IGxvY2sgKQorc3RhdGljIGludCBnZXRfd2VwX3R4X2lkeChzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlXZXBLZXlSaWQgd2tyOworCWludCByYzsKKwlfX2xlMTYgbGFzdGluZGV4OworCisJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAxLCAxKTsKKwlpZiAocmMgIT0gU1VDQ0VTUykKKwkJcmV0dXJuIC0xOworCWRvIHsKKwkJbGFzdGluZGV4ID0gd2tyLmtpbmRleDsKKwkJaWYgKHdrci5raW5kZXggPT0gY3B1X3RvX2xlMTYoMHhmZmZmKSkKKwkJCXJldHVybiB3a3IubWFjWzBdOworCQlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDAsIDEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykKKwkJCXJldHVybiAtMTsKKwl9IHdoaWxlIChsYXN0aW5kZXggIT0gd2tyLmtpbmRleCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgIHUxNiBrZXlsZW4sIGludCBwZXJtLCBpbnQgbG9jaykKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXSA9IHsgMHgwMSwgMCwgMCwgMCwgMCwgMCB9OwogCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOwogCi0JbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKIAlpZiAoa2V5bGVuID09IDApIHsKLS8vIFdlIGFyZSBzZWxlY3Rpbmcgd2hpY2gga2V5IHRvIHVzZQotCQl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOwotCQl3a3Iua2luZGV4ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKLQkJd2tyLm1hY1swXSA9IChjaGFyKWluZGV4OwotCQlpZiAocGVybSkgYWktPmRlZmluZGV4ID0gKGNoYXIpaW5kZXg7Ci0JfSBlbHNlIHsKLS8vIFdlIGFyZSBhY3R1YWxseSBzZXR0aW5nIHRoZSBrZXkKLQkJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKLQkJd2tyLmtpbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKLQkJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOwotCQltZW1jcHkoIHdrci5rZXksIGtleSwga2V5bGVuICk7Ci0JCW1lbWNweSggd2tyLm1hYywgbWFjYWRkciwgRVRIX0FMRU4gKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBrZXkgbGVuZ3RoIHRvIHNldCB3YXMgemVybyIsCisJCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CiAJfQogCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOworCW1lbWNweSh3a3Iua2V5LCBrZXksIGtleWxlbik7CisJbWVtY3B5KHdrci5tYWMsIG1hY2FkZHIsIEVUSF9BTEVOKTsKKwogCWlmIChwZXJtKSBkaXNhYmxlX01BQyhhaSwgbG9jayk7Ci0Jd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOworCXJjID0gd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOwogCWlmIChwZXJtKSBlbmFibGVfTUFDKGFpLCBsb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3dlcF90eF9pZHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgaW50IHBlcm0sIGludCBsb2NrKQoreworCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOworCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNigweGZmZmYpOworCXdrci5tYWNbMF0gPSAoY2hhcilpbmRleDsKKworCWlmIChwZXJtKSB7CisJCWFpLT5kZWZpbmRleCA9IChjaGFyKWluZGV4OworCQlkaXNhYmxlX01BQyhhaSwgbG9jayk7CisJfQorCisJcmMgPSB3cml0ZVdlcEtleVJpZChhaSwgJndrciwgcGVybSwgbG9jayk7CisKKwlpZiAocGVybSkKKwkJZW5hYmxlX01BQyhhaSwgbG9jayk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBwcm9jX3dlcGtleV9vbl9jbG9zZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUgKSB7CkBAIC01MTg3LDcgKzUyOTcsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoaW5vZGUpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkcC0+ZGF0YTsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+bWxfcHJpdjsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJY2hhciBrZXlbMTZdOwogCXUxNiBpbmRleCA9IDA7CiAJaW50IGogPSAwOwpAQCAtNTIwMSw3ICs1MzExLDEyIEBACiAJICAgIChkYXRhLT53YnVmZmVyWzFdID09ICcgJyB8fCBkYXRhLT53YnVmZmVyWzFdID09ICdcbicpKSB7CiAJCWluZGV4ID0gZGF0YS0+d2J1ZmZlclswXSAtICcwJzsKIAkJaWYgKGRhdGEtPndidWZmZXJbMV0gPT0gJ1xuJykgewotCQkJc2V0X3dlcF9rZXkoYWksIGluZGV4LCBOVUxMLCAwLCAxLCAxKTsKKwkJCXJjID0gc2V0X3dlcF90eF9pZHgoYWksIGluZGV4LCAxLCAxKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCAiCisJCQkJICAgICAgICAgICAgICAgIldFUCB0cmFuc21pdCBpbmRleCB0byAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJCWogPSAyOwpAQCAtNTIyMCw3ICs1MzM1LDEyIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzZXRfd2VwX2tleShhaSwgaW5kZXgsIGtleSwgaS8zLCAxLCAxKTsKKworCXJjID0gc2V0X3dlcF9rZXkoYWksIGluZGV4LCBrZXksIGkvMywgMSwgMSk7CisJaWYgKHJjIDwgMCkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCBXRVAga2V5IGF0IGluZGV4ICIKKwkJICAgICAgICAgICAgICAgIiVkOiAlZC4iLCBpbmRleCwgcmMpOworCX0KIH0KIAogc3RhdGljIGludCBwcm9jX3dlcGtleV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSApCkBAIC01NDUxLDEzICs1NTcxLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBBVVRIX1NIQVJFREtFWToKIAkJCWlmIChhcHJpdi0+a2V5aW5kZXggPCBhdXRvX3dlcCkgewotCQkJCXNldF93ZXBfa2V5KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIE5VTEwsIDAsIDAsIDApOworCQkJCXNldF93ZXBfdHhfaWR4KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIDAsIDApOwogCQkJCWFwcml2LT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX1NIQVJFREtFWTsKIAkJCQlhcHJpdi0+a2V5aW5kZXgrKzsKIAkJCX0gZWxzZSB7CiAJCQkgICAgICAgIC8qIERyb3AgdG8gRU5DUllQVCAqLwogCQkJCWFwcml2LT5rZXlpbmRleCA9IDA7Ci0JCQkJc2V0X3dlcF9rZXkoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgTlVMTCwgMCwgMCwgMCk7CisJCQkJc2V0X3dlcF90eF9pZHgoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgMCwgMCk7CiAJCQkJYXByaXYtPmNvbmZpZy5hdXRoVHlwZSA9IEFVVEhfRU5DUllQVDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTcyNSwxNiArNTg0NSwxMiBAQAogCWludCByYyA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIElmIHNldHRpbmcgYnkgZnJlcXVlbmN5LCBjb252ZXJ0IHRvIGEgY2hhbm5lbCAqLwotCWlmKChmd3JxLT5lID09IDEpICYmCi0JICAgKGZ3cnEtPm0gPj0gKGludCkgMi40MTJlOCkgJiYKLQkgICAoZndycS0+bSA8PSAoaW50KSAyLjQ4N2U4KSkgeworCWlmKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQotCQkJYysrOworCiAJCS8qIEhhY2sgdG8gZmFsbCB0aHJvdWdoLi4uICovCiAJCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gYyArIDE7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZik7CiAJfQogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KIAlpZigoZndycS0+bSA+IDEwMDApIHx8IChmd3JxLT5lID4gMCkpCkBAIC01Nzc4LDcgKzU4OTQsNyBAQAogCiAJY2ggPSBsZTE2X3RvX2NwdShzdGF0dXNfcmlkLmNoYW5uZWwpOwogCWlmKChjaCA+IDApICYmIChjaCA8IDE1KSkgewotCQlmd3JxLT5tID0gZnJlcXVlbmN5X2xpc3RbY2ggLSAxXSAqIDEwMDAwMDsKKwkJZndycS0+bSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaCkgKiAxMDAwMDA7CiAJCWZ3cnEtPmUgPSAxOwogCX0gZWxzZSB7CiAJCWZ3cnEtPm0gPSBjaDsKQEAgLTYyMzQsMTEgKzYzNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChDYXBhYmlsaXR5UmlkICpwLCBpbnQgaW5kZXgpCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChzdHJ1Y3QgYWlyb19pbmZvICphaSwgaW50IGluZGV4KQogewotCWlmIChpbmRleCA8IDApCi0JCXJldHVybiAwOwotCXJldHVybiBpbmRleCA8IChwLT5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkgPyA0IDogMSk7CisJcmV0dXJuIChpbmRleCA+PSAwKSAmJiAoaW5kZXggPD0gYWktPm1heF93ZXBfaWR4KTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNjI1MSwxNiArNjM2NSwxMyBAQAogCQkJICAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KLQlpbnQgcGVybSA9ICggZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CisJaW50IHBlcm0gPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxKTsKIAlfX2xlMTYgY3VycmVudEF1dGhUeXBlID0gbG9jYWwtPmNvbmZpZy5hdXRoVHlwZTsKKwlpbnQgcmMgPSAwOwogCi0JLyogSXMgV0VQIHN1cHBvcnRlZCA/ICovCi0JcmVhZENhcGFiaWxpdHlSaWQobG9jYWwsICZjYXBfcmlkLCAxKTsKLQkvKiBPbGRlciBmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4uLgotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9ICovCisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCS8qIEJhc2ljIGNoZWNraW5nOiBkbyB3ZSBoYXZlIGEga2V5IHRvIHNldCA/CkBAIC02MjcyLDE0ICs2MzgzLDIxIEBACiAJaWYgKGR3cnEtPmxlbmd0aCA+IDApIHsKIAkJd2VwX2tleV90IGtleTsKIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JCWludCBjdXJyZW50X2luZGV4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJCWludCBjdXJyZW50X2luZGV4OworCiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBrZXkgKi8KIAkJaWYgKGR3cnEtPmxlbmd0aCA+IE1BWF9LRVlfU0laRSkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKworCQljdXJyZW50X2luZGV4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoY3VycmVudF9pbmRleCA8IDApCisJCQljdXJyZW50X2luZGV4ID0gMDsKKwogCQkvKiBDaGVjayB0aGUgaW5kZXggKG5vbmUgLT4gdXNlIGN1cnJlbnQpICovCi0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaW5kZXgpKQogCQkJaW5kZXggPSBjdXJyZW50X2luZGV4OworCiAJCS8qIFNldCB0aGUgbGVuZ3RoICovCiAJCWlmIChkd3JxLT5sZW5ndGggPiBNSU5fS0VZX1NJWkUpCiAJCQlrZXkubGVuID0gTUFYX0tFWV9TSVpFOwpAQCAtNjI5Niw3ICs2NDE0LDEzIEBACiAJCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLwogCQkJbWVtY3B5KGtleS5rZXksIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCQkJLyogU2VuZCB0aGUga2V5IHRvIHRoZSBjYXJkICovCi0JCQlzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJcmMgPSBzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIGtleSBhdCBpbmRleCAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KIAkJfQogCQkvKiBXRSBzcGVjaWZ5IHRoYXQgaWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uCiAJCSAqIHNob3VsZCBiZSBlbmFibGVkICh1c2VyIG1heSB0dXJuIGl0IG9mZiBsYXRlcikKQEAgLTYzMDgsMTIgKzY0MzIsMTkgQEAKIAl9IGVsc2UgewogCQkvKiBEbyB3ZSB3YW50IHRvIGp1c3Qgc2V0IHRoZSB0cmFuc21pdCBrZXkgaW5kZXggPyAqLwogCQlpbnQgaW5kZXggPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJaWYgKHZhbGlkX2luZGV4KCZjYXBfcmlkLCBpbmRleCkpIHsKLQkJCXNldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgTlVMTCwgMCwgcGVybSwgMSk7Ci0JCX0gZWxzZQorCQlpZiAodmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQkJcmMgPSBzZXRfd2VwX3R4X2lkeChsb2NhbCwgaW5kZXgsIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIHRyYW5zbWl0IGluZGV4IHRvICVkOiAlZC4iLAorCQkJCSAgICAgICAgICAgICAgIGluZGV4LCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQl9IGVsc2UgewogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KIAkJCWlmICghKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKQogCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCS8qIFJlYWQgdGhlIGZsYWdzICovCiAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCkBAIC02MzM5LDE0ICs2NDcwLDEzIEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKKwogCS8qIENoZWNrIGVuY3J5cHRpb24gbW9kZSAqLwogCXN3aXRjaChsb2NhbC0+Y29uZmlnLmF1dGhUeXBlKQl7CiAJCWNhc2UgQVVUSF9FTkNSWVBUOgpAQCAtNjM2NSwxNCArNjQ5NSwxNyBAQAogCW1lbXNldChleHRyYSwgMCwgMTYpOwogCiAJLyogV2hpY2gga2V5IGRvIHdlIHdhbnQgPyAtMSAtPiB0eCBpbmRleCAqLwotCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKLQkJaW5kZXggPSBnZXRfd2VwX2tleShsb2NhbCwgMHhmZmZmKTsKLQlkd3JxLT5mbGFncyB8PSBpbmRleCArIDE7Ci0JLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCk7Ci0JaWYgKGR3cnEtPmxlbmd0aCA+IDE2KSB7Ci0JCWR3cnEtPmxlbmd0aD0wOworCWlmICghdmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQlpbmRleCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGluZGV4IDwgMCkKKwkJCWluZGV4ID0gMDsKIAl9CisJZHdycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOworCisJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLworCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBkd3JxLT5sZW5ndGgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzODgsMjggKzY1MjEsMjcgQEAKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CQkvKiBDYXJkIGNhcGFiaWxpdHkgaW5mbyAqLwogCWludCBwZXJtID0gKCBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CiAJX19sZTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7Ci0JaW50IGlkeCwga2V5X2xlbiwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOworCWludCBpZHgsIGtleV9sZW4sIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMSwgcmM7CiAJd2VwX2tleV90IGtleTsKIAotCS8qIElzIFdFUCBzdXBwb3J0ZWQgPyAqLwotCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7Ci0JLyogT2xkZXIgZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXMuLi4KLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfSAqLworCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CiAKIAkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KIAlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAJaWYgKGlkeCkgewotCQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpZHggLSAxKSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaWR4IC0gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCX0gZWxzZSB7CisJCWlkeCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGlkeCA8IDApCisJCQlpZHggPSAwOworCX0KIAogCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCiAJCWFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKQEAgLTY0MTgsNyArNjU1MCwxMyBAQAogCQkvKiBPbmx5IHNldCB0cmFuc21pdCBrZXkgaW5kZXggaGVyZSwgYWN0dWFsCiAJCSAqIGtleSBpcyBzZXQgYmVsb3cgaWYgbmVlZGVkLgogCQkgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgTlVMTCwgMCwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF90eF9pZHgobG9jYWwsIGlkeCwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0ICIKKwkJCSAgICAgICAgICAgICAgICJXRVAgdHJhbnNtaXQgaW5kZXggdG8gJWQ6ICVkLiIsCisJCQkgICAgICAgICAgICAgICBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzZXRfa2V5ID0gZXh0LT5rZXlfbGVuID4gMCA/IDEgOiAwOwogCX0KIApAQCAtNjQ0NCw3ICs2NTgyLDEyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IFdFUCBrZXkiCisJCQkgICAgICAgICAgICAgICAiIGF0IGluZGV4ICVkOiAlZC4iLCBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCX0KIAogCS8qIFJlYWQgdGhlIGZsYWdzICovCkBAIC02NDc0LDE0ICs2NjE3LDEyIEBACiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KIAlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKQEAgLTY0OTAsMTEgKzY2MzEsMTQgQEAKIAogCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAlpZiAoaWR4KSB7Ci0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGlkeCAtIDEpKQorCQlpZiAoIXZhbGlkX2luZGV4KGxvY2FsLCBpZHggLSAxKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJaWR4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoaWR4IDwgMCkKKwkJCWlkeCA9IDA7CisJfQogCiAJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKIAltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwpAQCAtNjUxNywxMCArNjY2MSw4IEBACiAJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWV4dC0+a2V5X2xlbiA9IGdldF93ZXBfa2V5KGxvY2FsLCBpZHgpOwotCWlmIChleHQtPmtleV9sZW4gPiAxNikgewotCQlleHQtPmtleV9sZW49MDsKLQl9CisJZXh0LT5rZXlfbGVuID0gZ2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBleHQtPmtleV9sZW4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Nzk1LDggKzY5MzcsOCBAQAogCWsgPSAwOwogCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOyAvKiBMaXN0IGluZGV4ICovCi0JCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpXSAqIDEwMDAwMDsKLQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCQlyYW5nZS0+ZnJlcVtrXS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLwogCX0KIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAKQEAgLTcwMzEsMTEgKzcxNzMsMTUgQEAKIHsKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MgPSAoc3RydWN0IHNvY2thZGRyICopIGV4dHJhOwotCXN0cnVjdCBpd19xdWFsaXR5IHF1YWxbSVdfTUFYX0FQXTsKKwlzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbDsKIAlCU1NMaXN0UmlkIEJTU0xpc3Q7CiAJaW50IGk7CiAJaW50IGxvc2VTeW5jID0gY2FwYWJsZShDQVBfTkVUX0FETUlOKSA/IDE6IC0xOwogCisJcXVhbCA9IGttYWxsb2MoSVdfTUFYX0FQICogc2l6ZW9mKCpxdWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvciAoaSA9IDA7IGkgPCBJV19NQVhfQVA7IGkrKykgewogCQl1MTYgZEJtOwogCQlpZiAocmVhZEJTU0xpc3RSaWQobG9jYWwsIGxvc2VTeW5jLCAmQlNTTGlzdCkpCkBAIC03MDkwLDYgKzcyMzYsNyBAQAogCX0KIAlkd3JxLT5sZW5ndGggPSBpOwogCisJa2ZyZWUocXVhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxODksMTAgKzczMzYsNyBAQAogCS8qIEFkZCBmcmVxdWVuY3kgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CiAJaXdlLnUuZnJlcS5tID0gbGUxNl90b19jcHUoYnNzLT5kc0NoYW5uZWwpOwotCS8qIGl3ZS51LmZyZXEubSBjb250YWludCB0aGUgY2hhbm5lbCAoc3RhcnRpbmcgMSksIG91ciAKLQkgKiBmcmVxdWVuY3lfbGlzdCBhcnJheSBzdGFydCBhdCBpbmRleCAwLi4uCi0JICovCi0JaXdlLnUuZnJlcS5tID0gZnJlcXVlbmN5X2xpc3RbaXdlLnUuZnJlcS5tIC0gMV0gKiAxMDAwMDA7CisJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGl3ZS51LmZyZXEubSkgKiAxMDAwMDA7CiAJaXdlLnUuZnJlcS5lID0gMTsKIAljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKIAkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggMjc2OTZjMi4uZDA1OTNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtMTYsOCArMTYsOCBAQAogICAgIEluIGFkZGl0aW9uIHRoaXMgbW9kdWxlIHdhcyBkZXJpdmVkIGZyb20gZHVtbXlfY3MuCiAgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIGR1bW15X2NzIGlzIERhdmlkIEEuIEhpbmRzCiAgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKLSAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgCi0gICAgCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjaWZkZWYgX19JTl9QQ01DSUFfUEFDS0FHRV9fCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlICJhaXJvLmgiCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogc3RhdGljIGNoYXIgKnZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOwogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgpAQCAtNjIsOSArNjIsOSBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIFJlZWQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgQ2lzY28vQWlyb25ldCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgXAotICAgICAgICAgICAgICAgICAgIGNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkIFwKLQkJICAgd2l0aCB0aGUgYWlybyBtb2R1bGUuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0ICIKKwkJICAgImNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkICIKKwkJICAgIndpdGggdGhlIGFpcm8gbW9kdWxlLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkFpcm9uZXQgNDUwMCwgNDgwMCBhbmQgQ2lzY28gMzQwIFBDTUNJQSBjYXJkcyIpOwogCkBAIC03Niw3ICs3Niw3IEBACiAgICBldmVudCBpcyByZWNlaXZlZC4gIFRoZSBjb25maWcoKSBhbmQgcmVsZWFzZSgpIGVudHJ5IHBvaW50cyBhcmUKICAgIHVzZWQgdG8gY29uZmlndXJlIG9yIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQKICAgIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLiAgVGhleSBhcmUgaW52b2tlZCBmcm9tIHRoZSBhaXJvX2NzCi0gICBldmVudCBoYW5kbGVyLiAKKyAgIGV2ZW50IGhhbmRsZXIuCiAqLwogCiBzdGF0aWMgaW50IGFpcm9fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTEwMyw4ICsxMDMsOSBAQAogICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKLSAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLAorICAgd2hlcmUgbWlub3IgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nCisgICBhcnJheSBpbmRleC4KICovCiAKIC8qCkBAIC0xMjIsMjIgKzEyMywyMiBAQAogICAgZGV2aWNlIElPIHJvdXRpbmVzIGNhbiB1c2UgYSBmbGFnIGxpa2UgdGhpcyB0byB0aHJvdHRsZSBJTyB0byBhCiAgICBjYXJkIHRoYXQgaXMgbm90IHJlYWR5IHRvIGFjY2VwdCBpdC4KICovCi0gICAKKwogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlkZXZfbm9kZV90CW5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmV0aF9kZXY7CiB9IGxvY2FsX2luZm9fdDsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIGFpcm9fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KLSAgCisKICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCiAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBhaXJvX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKQEAgLTE1MCw3ICsxNTEsNyBAQAogCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCXBfZGV2LT5pcnEuSGFuZGxlciA9IE5VTEw7Ci0JCisKIAkvKgogCSAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKQEAgLTE2MCw3ICsxNjEsNyBAQAogCSovCiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotCQorCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKQEAgLTE3MywxMiArMTc0LDEyIEBACiB9IC8qIGFpcm9fYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAogICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC0xODcsMjAgKzE4OCwyMCBAQAogCiAJYWlyb19yZWxlYXNlKGxpbmspOwogCi0JaWYgKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgKSB7Ci0JCXN0b3BfYWlyb19jYXJkKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYsIDAgKTsKKwlpZiAoKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldikgeworCQlzdG9wX2Fpcm9fY2FyZCgoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwKTsKIAl9Ci0JKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKKwkoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKIAogCWtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBhaXJvX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgYWlyb19jb25maWcoKSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCiAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXApAQCAtMzI1LDI2ICszMjYsMjggQEAKIAkqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JCisKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IAotCQlpbml0X2Fpcm9fY2FyZCggbGluay0+aXJxLkFzc2lnbmVkSVJRLAotCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgMSwgJmhhbmRsZV90b19kZXYobGluaykgKTsKLQlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgZ290byBjc19mYWlsZWQ7Ci0JCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9CisJCWluaXRfYWlyb19jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKKwkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlpZiAoISgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYpCisJCWdvdG8gY3NfZmFpbGVkOworCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCiAJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkqLwotCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2Rldi0+bmFtZSApOworCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUpOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CiAJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwotCQorCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCiAJICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CkBAIC0zNzQsMTEgKzM3NywxMSBAQAogfSAvKiBhaXJvX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIGFpcm9fcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUKICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtNDc1LDcgKzQ3OCw3IEBACiAgICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAogICAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwogICAgIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAKKyAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiAKIG1vZHVsZV9pbml0KGFpcm9fY3NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDJmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpAQCAtMCwwICsxLDI1MDEgQEAKKy8qCisgKiBhdDc2YzUwMy9hdDc2YzUwNSBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwMyBPbGl2ZXIgS3VydGgKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+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/ICovCisJdTggZ3JvdXBfYWRkcls0XVtFVEhfQUxFTl07CisJdTggZ3JvdXBfYWRkcl9zdGF0dXNbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hYyB7CisJX19sZTMyIG1heF90eF9tc2R1X2xpZmV0aW1lOworCV9fbGUzMiBtYXhfcnhfbGlmZXRpbWU7CisJX19sZTE2IGZyYWdfdGhyZXNob2xkOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBjd21pbjsKKwlfX2xlMTYgY3dtYXg7CisJdTggc2hvcnRfcmV0cnlfdGltZTsKKwl1OCBsb25nX3JldHJ5X3RpbWU7CisJdTggc2Nhbl90eXBlOwkJLyogYWN0aXZlIG9yIHBhc3NpdmUgKi8KKwl1OCBzY2FuX2NoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OwkvKiBkZWxheSBiZWZvcmUgUHJvYmVSZXEgaW4gYWN0aXZlIHNjYW4sIFJPICovCisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBkZXNpcmVkX3NzaWRbMzJdOworCXU4IGRlc2lyZWRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGRlc2lyZWRfYnNzdHlwZTsJLyogYWQtaG9jIG9yIGluZnJhc3RydWN0dXJlICovCisJdTggcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfbWdtdCB7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CisJX19sZTE2IENGUF9tYXhfZHVyYXRpb247CisJX19sZTE2IG1lZGl1bV9vY2N1cGFuY3lfbGltaXQ7CisJX19sZTE2IHN0YXRpb25faWQ7CS8qIGFzc29jIGlkICovCisJX19sZTE2IEFUSU1fd2luZG93OworCXU4IENGUF9tb2RlOworCXU4IHByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkOworCXU4IERUSU1fcGVyaW9kOworCXU4IENGUF9wZXJpb2Q7CisJdTggY3VycmVudF9ic3NpZFtFVEhfQUxFTl07CisJdTggY3VycmVudF9lc3NpZFszMl07CisJdTggY3VycmVudF9ic3NfdHlwZTsKKwl1OCBwb3dlcl9tZ210X21vZGU7CisJLyogcmZtZCBhbmQgNTA1ICovCisJdTggaWJzc19jaGFuZ2U7CisJdTggcmVzOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQ7CisJdTggY291bnRyeV9zdHJpbmdbM107CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY193ZXAgeworCXU4IHByaXZhY3lfaW52b2tlZDsJLyogMCBkaXNhYmxlIGVuY3IuLCAxIGVuYWJsZSBlbmNyICovCisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOworCXU4IHdlcF9rZXlfbWFwcGluZ19sZW47CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwlfX2xlMzIgd2VwX2ljdl9lcnJvcl9jb3VudDsKKwlfX2xlMzIgd2VwX2V4Y2x1ZGVkX2NvdW50OworCXU4IHdlcF9kZWZhdWx0X2tleXZhbHVlW1dFUF9LRVlTXVtXRVBfTEFSR0VfS0VZX0xFTl07CisJdTggZW5jcnlwdGlvbl9sZXZlbDsJLyogMSBmb3IgNDBiaXQsIDIgZm9yIDEwNGJpdCBlbmNyeXB0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX3BoeSB7CisJX19sZTMyIGVkX3RocmVzaG9sZDsKKworCV9fbGUxNiBzbG90X3RpbWU7CisJX19sZTE2IHNpZnNfdGltZTsKKwlfX2xlMTYgcHJlYW1ibGVfbGVuZ3RoOworCV9fbGUxNiBwbGNwX2hlYWRlcl9sZW5ndGg7CisJX19sZTE2IG1wZHVfbWF4X2xlbmd0aDsKKwlfX2xlMTYgY2NhX21vZGVfc3VwcG9ydGVkOworCisJdTggb3BlcmF0aW9uX3JhdGVfc2V0WzRdOworCXU4IGNoYW5uZWxfaWQ7CisJdTggY3VycmVudF9jY2FfbW9kZTsKKwl1OCBwaHlfdHlwZTsKKwl1OCBjdXJyZW50X3JlZ19kb21haW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24geworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHBhdGNoOworCXU4IGJ1aWxkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tZG9tYWluIHsKKwl1OCB0eF9wb3dlcmxldmVsWzE0XTsKKwl1OCBjaGFubmVsX2xpc3RbMTRdOwkvKiAwIGZvciBpbnZhbGlkIGNoYW5uZWxzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgeworCV9fbGUzMiBjcmM7CQkvKiBDUkMzMiBvZiB0aGUgd2hvbGUgaW1hZ2UgKi8KKwlfX2xlMzIgYm9hcmRfdHlwZTsJLyogZmlybXdhcmUgY29tcGF0aWJpbGl0eSBjb2RlICovCisJdTggYnVpbGQ7CQkvKiBmaXJtd2FyZSBidWlsZCBudW1iZXIgKi8KKwl1OCBwYXRjaDsJCS8qIGZpcm13YXJlIHBhdGNoIGxldmVsICovCisJdTggbWlub3I7CQkvKiBmaXJtd2FyZSBtaW5vciB2ZXJzaW9uICovCisJdTggbWFqb3I7CQkvKiBmaXJtd2FyZSBtYWpvciB2ZXJzaW9uICovCisJX19sZTMyIHN0cl9vZmZzZXQ7CS8qIG9mZnNldCBvZiB0aGUgY29weXJpZ2h0IHN0cmluZyAqLworCV9fbGUzMiBpbnRfZndfb2Zmc2V0OwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgaW50X2Z3X2xlbjsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCisJX19sZTMyIGV4dF9md19vZmZzZXQ7CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBleHRfZndfbGVuOwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGEgZGVzY3JpcHRpb24gb2YgYSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgdGhlIGFsbG93ZWQgY2hhbm5lbHMgKi8KK3N0cnVjdCByZWdfZG9tYWluIHsKKwl1MTYgY29kZTsKKwljaGFyIGNvbnN0ICpuYW1lOworCXUzMiBjaGFubmVsX21hcDsJLyogaWYgYml0IE4gaXMgc2V0LCBjaGFubmVsIChOKzEpIGlzIGFsbG93ZWQgKi8KK307CisKKy8qIERhdGEgZm9yIG9uZSBsb2FkZWQgZmlybXdhcmUgZmlsZSAqLworc3RydWN0IGZ3ZW50cnkgeworCWNvbnN0IGNoYXIgKmNvbnN0IGZ3bmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBleHRmd19zaXplOworCWludCBpbnRmd19zaXplOworCS8qIHBvaW50ZXIgdG8gbG9hZGVkIGZpcm13YXJlLCBubyBuZWVkIHRvIGZyZWUgKi8KKwl1OCAqZXh0Znc7CQkvKiBleHRlcm5hbCBmaXJtd2FyZSwgZXh0Zndfc2l6ZSBieXRlcyBsb25nICovCisJdTggKmludGZ3OwkJLyogaW50ZXJuYWwgZmlybXdhcmUsIGludGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOwkvKiBib2FyZCB0eXBlICovCisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisJaW50IGxvYWRlZDsJCS8qIExvYWRlZCBhbmQgcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLworfTsKKworc3RydWN0IGF0NzZfcHJpdiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsJLyogc2tidWZmIGZvciByZWNlaXZpbmcgZGF0YSAqLworCXN0cnVjdCBza19idWZmICp0eF9za2I7CS8qIHNrYnVmZiBmb3IgdHJhbnNtaXR0aW5nIGRhdGEgKi8KKwl2b2lkICpidWxrX291dF9idWZmZXI7CS8qIGJ1ZmZlciBmb3Igc2VuZGluZyBkYXRhICovCisKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CS8qIFVSQiBmb3Igc2VuZGluZyBkYXRhICovCisJc3RydWN0IHVyYiAqcnhfdXJiOwkvKiBVUkIgZm9yIHJlY2VpdmluZyBkYXRhICovCisKKwl1bnNpZ25lZCBpbnQgdHhfcGlwZTsJLyogYnVsayBvdXQgcGlwZSAqLworCXVuc2lnbmVkIGludCByeF9waXBlOwkvKiBidWxrIGluIHBpcGUgKi8KKworCXN0cnVjdCBtdXRleCBtdHg7CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisKKwkvKiB3b3JrIHF1ZXVlcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3NldF9wcm9taXNjOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N1Ym1pdF9yeDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2h3X3NjYW47CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKworCS8qIHRoZSBXRVAgc3R1ZmYgKi8KKwlpbnQgd2VwX2VuYWJsZWQ7CS8qIDEgaWYgV0VQIGlzIGVuYWJsZWQgKi8KKwlpbnQgd2VwX2tleV9pZDsJCS8qIGtleSBpZCB0byBiZSB1c2VkICovCisJdTggd2VwX2tleXNbV0VQX0tFWVNdW1dFUF9MQVJHRV9LRVlfTEVOXTsJLyogV0VQIGtleXMgKi8KKwl1OCB3ZXBfa2V5c19sZW5bV0VQX0tFWVNdOwkvKiBsZW5ndGggb2YgV0VQIGtleXMgKi8KKworCWludCBjaGFubmVsOworCWludCBpd19tb2RlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJaW50IGVzc2lkX3NpemU7CisJaW50IHJhZGlvX29uOworCWludCBwcm9taXNjOworCisJaW50IHByZWFtYmxlX3R5cGU7CS8qIDAgLSBsb25nLCAxIC0gc2hvcnQsIDIgLSBhdXRvICovCisJaW50IGF1dGhfbW9kZTsJCS8qIGF1dGhlbnRpY2F0aW9uIHR5cGU6IDAgb3BlbiwgMSBzaGFyZWQga2V5ICovCisJaW50IHR4cmF0ZTsJCS8qIDAsMSwyLDMgPSAxLDIsNS41LDExIE1icHMsIDQgaXMgYXV0byAqLworCWludCBmcmFnX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBmcmFnbWVudGF0aW9uIG9mIHR4IHBhY2tldHMgKi8KKwlpbnQgcnRzX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBSVFMgbWVjaGFuaXNtICovCisJaW50IHNob3J0X3JldHJ5X2xpbWl0OworCisJaW50IHNjYW5fbWluX3RpbWU7CS8qIHNjYW4gbWluIGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21heF90aW1lOwkvKiBzY2FuIG1heCBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tb2RlOwkJLyogU0NBTl9UWVBFX0FDVElWRSwgU0NBTl9UWVBFX1BBU1NJVkUgKi8KKwlpbnQgc2Nhbl9uZWVkX2FueTsJLyogaWYgc2V0LCBuZWVkIHRvIHNjYW4gZm9yIGFueSBFU1NJRCAqLworCisJdTE2IGFzc29jX2lkOwkJLyogY3VycmVudCBhc3NvY2lhdGlvbiBJRCwgaWYgYXNzb2NpYXRlZCAqLworCisJdTggcG1fbW9kZTsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAqLworCXUzMiBwbV9wZXJpb2Q7CQkvKiBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KKworCXN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICpkb21haW47CS8qIHJlZyBkb21haW4gZGVzY3JpcHRpb24gKi8KKworCS8qIFRoZXNlIGZpZWxkcyBjb250YWluIEhXIGNvbmZpZyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIChub3QgYWxsIG9mCisJICogdGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IGFsbCBib2FyZCB0eXBlcykgKi8KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyBjYXJkX2NvbmZpZzsKKworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCisJdW5zaWduZWQgaW50IGRldmljZV91bnBsdWdnZWQ6MTsKKwl1bnNpZ25lZCBpbnQgbmV0ZGV2X3JlZ2lzdGVyZWQ6MTsKKwlzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgbWliX2J1ZjsJLyogZ2xvYmFsIGJ1ZmZlciBmb3Igc2V0X21pYiBjYWxscyAqLworCisJaW50IGJlYWNvbl9wZXJpb2Q7CS8qIHBlcmlvZCBvZiBtZ210IGJlYWNvbnMsIEt1cyAqLworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJaW50IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Cit9OworCisjZGVmaW5lIEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlMgRklGX1BST01JU0NfSU5fQlNTCisKKyNkZWZpbmUgU0NBTl9QT0xMX0lOVEVSVkFMCShIWiAvIDQpCisKKyNkZWZpbmUgQ01EX0NPTVBMRVRJT05fVElNRU9VVAkoNSAqIEhaKQorCisjZGVmaW5lIERFRl9SVFNfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX0ZSQUdfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX1NIT1JUX1JFVFJZX0xJTUlUCTgKKyNkZWZpbmUgREVGX0NIQU5ORUwJCTEwCisjZGVmaW5lIERFRl9TQ0FOX01JTl9USU1FCTEwCisjZGVmaW5lIERFRl9TQ0FOX01BWF9USU1FCTEyMAorCisvKiB0aGUgbWF4IHBhZGRpbmcgc2l6ZSBmb3IgdHggaW4gYnl0ZXMgKHNlZSBjYWxjX3BhZGRpbmcpICovCisjZGVmaW5lIE1BWF9QQURESU5HX1NJWkUJNTMKKworI2VuZGlmCQkJCS8qIF9BVDc2X1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCmluZGV4IDcxOWNmYWUuLjg0YTc0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCkBAIC0xMCw1ICsxMCw2IEBACiBhdGg1ay15CQkJCSs9IHJlc2V0Lm8KIGF0aDVrLXkJCQkJKz0gYXR0YWNoLm8KIGF0aDVrLXkJCQkJKz0gYmFzZS5vCithdGg1ay15CQkJCSs9IGxlZC5vCiBhdGg1ay0kKENPTkZJR19BVEg1S19ERUJVRykJKz0gZGVidWcubwogb2JqLSQoQ09ORklHX0FUSDVLKQkJKz0gYXRoNWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKaW5kZXggMTgzZmZjOC4uMGRjMmM3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaApAQCAtMTY1LDkgKzE2NSw2IEBACiAjZGVmaW5lIEFSNUtfSU5JX1ZBTF9YUgkJCTAKICNkZWZpbmUgQVI1S19JTklfVkFMX01BWAkJNQogCi0jZGVmaW5lIEFSNUtfUkY1MTExX0lOSV9SRl9NQVhfQkFOS1MJQVI1S19NQVhfUkZfQkFOS1MKLSNkZWZpbmUgQVI1S19SRjUxMTJfSU5JX1JGX01BWF9CQU5LUwlBUjVLX01BWF9SRl9CQU5LUwotCiAvKiBVc2VkIGZvciBCU1NJRCBldGMgbWFuaXB1bGF0aW9uICovCiAjZGVmaW5lIEFSNUtfTE9XX0lEKF9hKSgJCQkJXAogKF9hKVswXSB8IChfYSlbMV0gPDwgOCB8IChfYSlbMl0gPDwgMTYgfCAoX2EpWzNdIDw8IDI0CVwKQEAgLTIyNSw2ICsyMjIsNyBAQAogI2VuZGlmCiAKIC8qIEluaXRpYWwgdmFsdWVzICovCisjZGVmaW5lCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEJCQkyCiAjZGVmaW5lIEFSNUtfSU5JVF9UWF9MQVRFTkNZCQkJNTAyCiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDCQkJCTM5CiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDX1RVUkJPCQkJNzkKQEAgLTMxNiw3ICszMTQsNyBAQAogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDI0CTB4OTAgLyogQ29uZG9yICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTMJMHhhNCAvKiBFYWdsZSBsaXRlICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTQJMHhhMCAvKiBFYWdsZSAqLwotI2RlZmluZSBBUjVLX1NSRVZfQVIyNDE1CTB4YjAgLyogQ29icmEgKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSMjQxNQkweGIwIC8qIFRhbG9uICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTYJMHhjMCAvKiBQQ0ktRSAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDE4CTB4Y2EgLyogUENJLUUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSMjQyNQkweGUwIC8qIFN3YW4gKi8KQEAgLTMzNCw3ICszMzIsNyBAQAogI2RlZmluZQlBUjVLX1NSRVZfUkFEXzIxMTJCCTB4NDYKICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDEzCTB4NTAKICNkZWZpbmUgQVI1S19TUkVWX1JBRF81NDEzCTB4NjAKLSNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAKKyNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAgLyogQ29icmEgU29DICovCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfMjMxNwkweDgwCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfNTQyNAkweGEwIC8qIE1vc3RseSBzYW1lIGFzIDU0MTMgKi8KICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDI1CTB4YTIKQEAgLTM0Miw3ICszNDAsOCBAQAogCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMQkweDMwCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMgkweDQxCi0jZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjExMkIJMHg0MworI2RlZmluZQlBUjVLX1NSRVZfUEhZXzUyMTJBCTB4NDIKKyNkZWZpbmUgQVI1S19TUkVWX1BIWV81MjEyQgkweDQzCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQxMwkweDQ1CiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTQxMwkweDYxCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQyNQkweDcwCkBAIC02NDksNDkgKzY0OCwyMSBAQAogCiBlbnVtIGF0aDVrX3JmZ2FpbiB7CiAJQVI1S19SRkdBSU5fSU5BQ1RJVkUgPSAwLAorCUFSNUtfUkZHQUlOX0FDVElWRSwKIAlBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRCwKIAlBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSwKIH07CiAKLSNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTExCQk0Ci0jZGVmaW5lIEFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMgkJNwotI2RlZmluZSBBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUUwkJQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCi0jZGVmaW5lIEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTgkJMTUKLSNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOCQkyMAotI2RlZmluZSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlIJCTUKLSNkZWZpbmUgQVI1S19HQUlOX0NDS19PRkRNX0dBSU5fREVMVEEJCTE1Ci0jZGVmaW5lIEFSNUtfR0FJTl9TVEVQX0NPVU5UCQkJMTAKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1RYX0NMSVAJCQkwCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF85MAkJCTEKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzg0CQkJMgotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fR0FJTl9TRUwJCTMKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX01JWF9PUk4JCQkwCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzgJCQkxCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzcJCQkyCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzYJCQkzCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzIJCQk0Ci0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzEJCQk1Ci0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9QRF8xMzAJCQk2Ci0jZGVmaW5lIEFSNUtfR0FJTl9DSEVDS19BREpVU1QoX2cpIAkJXAotCSgoX2cpLT5nX2N1cnJlbnQgPD0gKF9nKS0+Z19sb3cgfHwgKF9nKS0+Z19jdXJyZW50ID49IChfZyktPmdfaGlnaCkKLQotc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAgewotCXMxNgkJCQlnb3NfcGFyYW1bQVI1S19HQUlOX0NSTl9NQVhfRklYX0JJVFNdOwotCXMzMgkJCQlnb3NfZ2FpbjsKLX07Ci0KIHN0cnVjdCBhdGg1a19nYWluIHsKLQl1MzIJCQlnX3N0ZXBfaWR4OwotCXUzMgkJCWdfY3VycmVudDsKLQl1MzIJCQlnX3RhcmdldDsKLQl1MzIJCQlnX2xvdzsKLQl1MzIJCQlnX2hpZ2g7Ci0JdTMyCQkJZ19mX2NvcnI7Ci0JdTMyCQkJZ19hY3RpdmU7Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAJKmdfc3RlcDsKKwl1OAkJCWdfc3RlcF9pZHg7CisJdTgJCQlnX2N1cnJlbnQ7CisJdTgJCQlnX3RhcmdldDsKKwl1OAkJCWdfbG93OworCXU4CQkJZ19oaWdoOworCXU4CQkJZ19mX2NvcnI7CisJdTgJCQlnX3N0YXRlOwogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKipcCiAgIENPTU1PTiBERUZJTklUSU9OUwogXCoqKioqKioqKioqKioqKioqKioqLwpAQCAtMTA1Myw3ICsxMDI0LDYgQEAKIAlib29sCQkJYWhfcnVubmluZzsKIAlib29sCQkJYWhfc2luZ2xlX2NoaXA7CiAJYm9vbAkJCWFoX2NvbWJpbmVkX21pYzsKLQllbnVtIGF0aDVrX3JmZ2FpbglhaF9yZl9nYWluOwogCiAJdTMyCQkJYWhfbWFjX3NyZXY7CiAJdTE2CQkJYWhfbWFjX3ZlcnNpb247CkBAIC0xMDYxLDcgKzEwMzEsNiBAQAogCXUxNgkJCWFoX3BoeV9yZXZpc2lvbjsKIAl1MTYJCQlhaF9yYWRpb181Z2h6X3JldmlzaW9uOwogCXUxNgkJCWFoX3JhZGlvXzJnaHpfcmV2aXNpb247Ci0JdTMyCQkJYWhfcGh5X3NwZW5kaW5nOwogCiAJZW51bSBhdGg1a192ZXJzaW9uCWFoX3ZlcnNpb247CiAJZW51bSBhdGg1a19yYWRpbwlhaF9yYWRpbzsKQEAgLTExMTIsOCArMTA4MSw5IEBACiAJdTMyCQkJYWhfdHhxX2lzcjsKIAl1MzIJCQkqYWhfcmZfYmFua3M7CiAJc2l6ZV90CQkJYWhfcmZfYmFua3Nfc2l6ZTsKKwlzaXplX3QJCQlhaF9yZl9yZWdzX2NvdW50OwogCXN0cnVjdCBhdGg1a19nYWluCWFoX2dhaW47Ci0JdTMyCQkJYWhfb2Zmc2V0W0FSNUtfTUFYX1JGX0JBTktTXTsKKwl1OAkJCWFoX29mZnNldFtBUjVLX01BWF9SRl9CQU5LU107CiAKIAlzdHJ1Y3QgewogCQl1MTYJCXR4cF9wY2RhY1tBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFXTsKQEAgLTExNTksNiArMTEyOSwxMiBAQAogZXh0ZXJuIHN0cnVjdCBhdGg1a19odyAqYXRoNWtfaHdfYXR0YWNoKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAorLyogTEVEIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoNWtfbGVkX29mZihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKKwogLyogUmVzZXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpOwogZXh0ZXJuIGludCBhdGg1a19od19yZXNldChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wX21vZGUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCk7CkBAIC0xMTg2LDYgKzExNjIsNyBAQAogLyogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfZWVwcm9tX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2VlcHJvbV9yZWFkX21hYyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCAqbWFjKTsKK2V4dGVybiBib29sIGF0aDVrX2VlcHJvbV9pc19oYjYzKHN0cnVjdCBhdGg1a19odyAqYWgpOwogCiAvKiBQcm90b2NvbCBDb250cm9sIFVuaXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9vcG1vZGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CkBAIC0xMjA2LDYgKzExODMsNyBAQAogLyogQmVhY29uIGNvbnRyb2wgZnVuY3Rpb25zICovCiBleHRlcm4gdTMyIGF0aDVrX2h3X2dldF90c2YzMihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiB1NjQgYXRoNWtfaHdfZ2V0X3RzZjY0KHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIHZvaWQgYXRoNWtfaHdfc2V0X3RzZjY0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU2NCB0c2Y2NCk7CiBleHRlcm4gdm9pZCBhdGg1a19od19yZXNldF90c2Yoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gdm9pZCBhdGg1a19od19pbml0X2JlYWNvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgbmV4dF9iZWFjb24sIHUzMiBpbnRlcnZhbCk7CiAjaWYgMApAQCAtMTI2MCwxMCArMTIzOCwxMiBAQAogZXh0ZXJuIGludCBhdGg1a19od193cml0ZV9pbml0dmFscyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtb2RlLCBib29sIGNoYW5nZV9jaGFubmVsKTsKIAogLyogSW5pdGlhbGl6ZSBSRiAqLwotZXh0ZXJuIGludCBhdGg1a19od19yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSk7Ci1leHRlcm4gaW50IGF0aDVrX2h3X3JmZ2FpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgZnJlcSk7Ci1leHRlcm4gZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2V0X3JmX2dhaW4oc3RydWN0IGF0aDVrX2h3ICphaCk7Ci1leHRlcm4gaW50IGF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIGludCBhdGg1a19od19yZnJlZ3NfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQl1bnNpZ25lZCBpbnQgbW9kZSk7CitleHRlcm4gaW50IGF0aDVrX2h3X3JmZ2Fpbl9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKTsKK2V4dGVybiBlbnVtIGF0aDVrX3JmZ2FpbiBhdGg1a19od19nYWluZl9jYWxpYnJhdGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gaW50IGF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIC8qIFBIWS9SRiBjaGFubmVsIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGJvb2wgYXRoNWtfY2hhbm5lbF9vayhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgZnJlcSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfY2hhbm5lbChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwpAQCAtMTI4NSw2ICsxMjY1LDcgQEAKIAogLyoKICAqIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCisgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayh1bnNpZ25lZCBpbnQgdXNlYywgYm9vbCB0dXJibykKIHsKQEAgLTEyOTMsNiArMTI3NCw3IEBACiAKIC8qCiAgKiBUcmFuc2xhdGUgaHcgY2xvY2sgdW5pdHMgdG8gdXNlYworICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfY2xvY2t0b2godW5zaWduZWQgaW50IGNsb2NrLCBib29sIHR1cmJvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXR0YWNoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwppbmRleCBkZWEzNzhmLi42NTZjYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwpAQCAtMzQsMTQgKzM0LDE0IEBACiBzdGF0aWMgaW50IGF0aDVrX2h3X3Bvc3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAotCWludCBpLCBjOwotCXUxNiBjdXJfcmVnOwotCXUxNiByZWdzWzJdID0ge0FSNUtfU1RBX0lEMCwgQVI1S19QSFkoOCl9OwotCXUzMiB2YXJfcGF0dGVybjsKLQl1MzIgc3RhdGljX3BhdHRlcm5bNF0gPSB7CisJc3RhdGljIGNvbnN0IHUzMiBzdGF0aWNfcGF0dGVybls0XSA9IHsKIAkJMHg1NTU1NTU1NSwJMHhhYWFhYWFhYSwKIAkJMHg2NjY2NjY2NiwJMHg5OTk5OTk5OQogCX07CisJc3RhdGljIGNvbnN0IHUxNiByZWdzWzJdID0geyBBUjVLX1NUQV9JRDAsIEFSNUtfUEhZKDgpIH07CisJaW50IGksIGM7CisJdTE2IGN1cl9yZWc7CisJdTMyIHZhcl9wYXR0ZXJuOwogCXUzMiBpbml0X3ZhbDsKIAl1MzIgY3VyX3ZhbDsKIApAQCAtMTA2LDcgKzEwNiw2IEBACiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCXU4IG1hY1tFVEhfQUxFTl0gPSB7fTsKIAlpbnQgcmV0OwogCXUzMiBzcmV2OwogCkBAIC0xNjksNyArMTY4LDYgQEAKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gZmFsc2U7CiAJCWFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uID0gYXRoNWtfaHdfcmFkaW9fcmV2aXNpb24oYWgsCiAJCQkJCQkJQ0hBTk5FTF8yR0haKTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzUxMTI6CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIxMTI6CkBAIC0xNzcsMzggKzE3NSwzMSBAQAogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSBmYWxzZTsKIAkJYWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24gPSBhdGg1a19od19yYWRpb19yZXZpc2lvbihhaCwKIAkJCQkJCQlDSEFOTkVMXzJHSFopOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyOwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjQxMzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MTM7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDEzOgogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTQxMzsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMzsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIzMTY6CiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkYyMzE2OwogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjMxNzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTc7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjIzMTc7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDI0OgogCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MjUgfHwKIAkJYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MTcpewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MjU7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNTsKIAkJfSBlbHNlIHsKIAkJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1NDEzOwogCQkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjU0MTM7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIyNywyOSArMjE4LDI1IEBACiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQyNTsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjQyNTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MjU7CiAJCX0gZWxzZSBpZiAoc3JldiA9PSBBUjVLX1NSRVZfQVI1MjEzQSAmJgotCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjExMkIpIHsKKwkJYWgtPmFoX3BoeV9yZXZpc2lvbiA9PSBBUjVLX1NSRVZfUEhZXzUyMTJCKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTExMjsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IGZhbHNlOwotCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIxMTJCOworCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzUxMTJCOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNSA+PiA0KSkgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTY7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIzMTY7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSNTQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfNTQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjU0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzU0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1NDEzOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzI0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyNDEzOwogCQl9IGVsc2UgewogCQkJQVRINUtfRVJSKHNjLCAiQ291bGRuJ3QgaWRlbnRpZnkgcmFkaW8gcmV2aXNpb24uXG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CkBAIC0zMjQsMTQgKzMxMSwxNCBAQAogCX0KIAogCS8qIE1BQyBhZGRyZXNzIGlzIGNsZWFyZWQgdW50aWwgYWRkX2ludGVyZmFjZSAqLwotCWF0aDVrX2h3X3NldF9sbGFkZHIoYWgsIG1hYyk7CisJYXRoNWtfaHdfc2V0X2xsYWRkcihhaCwgKHU4W0VUSF9BTEVOXSl7fSk7CiAKIAkvKiBTZXQgQlNTSUQgdG8gYmNhc3QgYWRkcmVzczogZmY6ZmY6ZmY6ZmY6ZmY6ZmYgZm9yIG5vdyAqLwogCW1lbXNldChhaC0+YWhfYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAlhdGg1a19od19zZXRfYXNzb2NpZChhaCwgYWgtPmFoX2Jzc2lkLCAwKTsKIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKIAotCWF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KGFoKTsKKwlhdGg1a19od19yZmdhaW5fb3B0X2luaXQoYWgpOwogCiAJcmV0dXJuIGFoOwogZXJyX2ZyZWU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKaW5kZXggMWQ3N2VlOS4uY2FkM2NjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYwpAQCAtNzksNyArNzksNyBAQAogCiAKIC8qIEtub3duIFBDSSBpZHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMjA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCBlYXJseSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTEgfSwgLyogNTMxMSAtIHRoaXMgaXMgb24gQUhCIGJ1cyAhKi8KQEAgLTEwMyw3ICsxMDMsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDVrX3BjaV9pZF90YWJsZSk7CiAKIC8qIEtub3duIFNSRVZzICovCi1zdGF0aWMgc3RydWN0IGF0aDVrX3NyZXZfbmFtZSBzcmV2X25hbWVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3NyZXZfbmFtZSBzcmV2X25hbWVzW10gPSB7CiAJeyAiNTIxMCIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUyMTAgfSwKIAl7ICI1MzExIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMSB9LAogCXsgIjUzMTFBIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMUEgfSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXsgInh4eHh4IiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1VOS05PV04gfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXRoNWtfcmF0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYXRoNWtfcmF0ZXNbXSA9IHsKIAl7IC5iaXRyYXRlID0gMTAsCiAJICAuaHdfdmFsdWUgPSBBVEg1S19SQVRFX0NPREVfMU0sIH0sCiAJeyAuYml0cmF0ZSA9IDIwLApAQCAtMjMyLDEzICsyMzIsMTQgQEAKIAkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCk7CiBzdGF0aWMgaW50IGF0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCWVudW0gc2V0X2tleV9jbWQgY21kLAotCQljb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiBzdGF0aWMgaW50IGF0aDVrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKTsKIHN0YXRpYyBpbnQgYXRoNWtfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiBzdGF0aWMgdTY0IGF0aDVrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIHZvaWQgYXRoNWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiBzdGF0aWMgdm9pZCBhdGg1a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIGludCBhdGg1a19iZWFjb25fdXBkYXRlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCXN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMjQ3LDcgKzI0OCw3IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQl1MzIgY2hhbmdlcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg1a19od19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0gewogCS50eCAJCT0gYXRoNWtfdHgsCiAJLnN0YXJ0IAkJPSBhdGg1a19zdGFydCwKIAkuc3RvcCAJCT0gYXRoNWtfc3RvcCwKQEAgLTI2MSw2ICsyNjIsNyBAQAogCS5jb25mX3R4IAk9IE5VTEwsCiAJLmdldF90eF9zdGF0cyAJPSBhdGg1a19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YgCT0gYXRoNWtfZ2V0X3RzZiwKKwkuc2V0X3RzZiAJPSBhdGg1a19zZXRfdHNmLAogCS5yZXNldF90c2YgCT0gYXRoNWtfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gYXRoNWtfYnNzX2luZm9fY2hhbmdlZCwKIH07CkBAIC0zMDgsNiArMzEwLDE5IEBACiAJYmYtPnNrYiA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a19yeGJ1Zl9mcmVlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCisJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCit7CisJQlVHX09OKCFiZik7CisJaWYgKCFiZi0+c2tiKQorCQlyZXR1cm47CisJcGNpX3VubWFwX3NpbmdsZShzYy0+cGRldiwgYmYtPnNrYmFkZHIsIHNjLT5yeGJ1ZnNpemUsCisJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWRldl9rZnJlZV9za2JfYW55KGJmLT5za2IpOworCWJmLT5za2IgPSBOVUxMOworfQorCisKIC8qIFF1ZXVlcyBzZXR1cCAqLwogc3RhdGljIHN0cnVjdCAJYXRoNWtfdHhxICphdGg1a190eHFfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKIAkJCQlpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKQEAgLTMzNSw2ICszNTAsNyBAQAogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9zZW5kKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHZvaWQgCWF0aDVrX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBzdGF0aWMgdm9pZAlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKTsKK3N0YXRpYyB2b2lkCWF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGF0aDVrX2V4dGVuZF90c2Yoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIHJzdGFtcCkKIHsKQEAgLTM0NywxOCArMzYzLDEzIEBACiB9CiAKIC8qIEludGVycnVwdCBoYW5kbGluZyAqLwotc3RhdGljIGludCAJYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSk7CitzdGF0aWMgaW50IAlhdGg1a19pbml0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGludCAJYXRoNWtfc3RvcF9sb2NrZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGJvb2wgaXNfc3VzcGVuZCk7CitzdGF0aWMgaW50IAlhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGlycXJldHVybl90IGF0aDVrX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIAlhdGg1a190YXNrbGV0X3Jlc2V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIHN0YXRpYyB2b2lkIAlhdGg1a19jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKTsKLS8qIExFRCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQJYXRoNWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIHZvaWQJYXRoNWtfbGVkX2VuYWJsZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkCWF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgdm9pZAlhdGg1a191bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiAKIC8qCiAgKiBNb2R1bGUgaW5pdC9leGl0IGZ1bmN0aW9ucwpAQCAtNjUzLDggKzY2NCw2IEBACiAKIAlhdGg1a19sZWRfb2ZmKHNjKTsKIAotCWF0aDVrX3N0b3BfaHcoc2MsIHRydWUpOwotCiAJZnJlZV9pcnEocGRldi0+aXJxLCBzYyk7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNjg5LDE0ICs2OTgsOSBAQAogCQlnb3RvIGVycl9ub19pcnE7CiAJfQogCi0JZXJyID0gYXRoNWtfaW5pdChzYywgdHJ1ZSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfaXJxOwogCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCiAJcmV0dXJuIDA7Ci1lcnJfaXJxOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOworCiBlcnJfbm9faXJxOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtNzgxLDYgKzc4NSw3IEBACiAJdGFza2xldF9pbml0KCZzYy0+cnh0cSwgYXRoNWtfdGFza2xldF9yeCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnR4dHEsIGF0aDVrX3Rhc2tsZXRfdHgsICh1bnNpZ25lZCBsb25nKXNjKTsKIAl0YXNrbGV0X2luaXQoJnNjLT5yZXN0cSwgYXRoNWtfdGFza2xldF9yZXNldCwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmJlYWNvbnRxLCBhdGg1a190YXNrbGV0X2JlYWNvbiwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXNldHVwX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCBhdGg1a19jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKIAogCXJldCA9IGF0aDVrX2VlcHJvbV9yZWFkX21hYyhhaCwgbWFjKTsKQEAgLTEwOTAsNyArMTA5NSw4IEBACiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBpbnQgaHdfcml4KQogewotCVdBUk5fT04oaHdfcml4IDwgMCB8fCBod19yaXggPiBBUjVLX01BWF9SQVRFUyk7CisJV0FSTihod19yaXggPCAwIHx8IGh3X3JpeCA+PSBBUjVLX01BWF9SQVRFUywKKwkJCSJod19yaXggb3V0IG9mIGJvdW5kczogJXhcbiIsIGh3X3JpeCk7CiAJcmV0dXJuIHNjLT5yYXRlX2lkeFtzYy0+Y3VyYmFuZC0+YmFuZF1baHdfcml4XTsKIH0KIApAQCAtMTE4OCw2ICsxMTk0LDEwIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCXVuc2lnbmVkIGludCBtcnJfcmF0ZVszXSwgbXJyX3RyaWVzWzNdOwogCWludCBpLCByZXQ7CisJdTE2IGh3X3JhdGU7CisJdTE2IGN0c19yYXRlID0gMDsKKwl1MTYgZHVyYXRpb24gPSAwOworCXU4IHJjX2ZsYWdzOwogCiAJZmxhZ3MgPSBBUjVLX1RYREVTQ19JTlRSRVEgfCBBUjVLX1RYREVTQ19DTFJETUFTSzsKIApAQCAtMTE5NSwyMCArMTIwNSwzOSBAQAogCWJmLT5za2JhZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAorCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc2MtPmh3LCBpbmZvKTsKKwogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQogCQlmbGFncyB8PSBBUjVLX1RYREVTQ19OT0FDSzsKIAorCXJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKKwlod19yYXRlID0gKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkgPworCQlyYXRlLT5od192YWx1ZV9zaG9ydCA6IHJhdGUtPmh3X3ZhbHVlOworCiAJcGt0bGVuID0gc2tiLT5sZW47CiAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKIAkJa2V5aWR4ID0gaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CiAJCXBrdGxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKIAl9CisJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CisJCWZsYWdzIHw9IEFSNUtfVFhERVNDX1JUU0VOQTsKKwkJY3RzX3JhdGUgPSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfcnRzX2R1cmF0aW9uKHNjLT5odywKKwkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOworCX0KKwlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJCWZsYWdzIHw9IEFSNUtfVFhERVNDX0NUU0VOQTsKKwkJY3RzX3JhdGUgPSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkJZHVyYXRpb24gPSBsZTE2X3RvX2NwdShpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uKHNjLT5odywKKwkJCXNjLT52aWYsIHBrdGxlbiwgaW5mbykpOworCX0KIAlyZXQgPSBhaC0+YWhfc2V0dXBfdHhfZGVzYyhhaCwgZHMsIHBrdGxlbiwKIAkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwgQVI1S19QS1RfVFlQRV9OT1JNQUwsCiAJCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwKLQkJaWVlZTgwMjExX2dldF90eF9yYXRlKHNjLT5odywgaW5mbyktPmh3X3ZhbHVlLAotCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50LCBrZXlpZHgsIDAsIGZsYWdzLCAwLCAwKTsKKwkJaHdfcmF0ZSwKKwkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCwga2V5aWR4LCAwLCBmbGFncywKKwkJY3RzX3JhdGUsIGR1cmF0aW9uKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bm1hcDsKIApAQCAtMTMyNCw3ICsxMzUzLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJmLCAmc2MtPnR4YnVmLCBsaXN0KQogCQlhdGg1a190eGJ1Zl9mcmVlKHNjLCBiZik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT5yeGJ1ZiwgbGlzdCkKLQkJYXRoNWtfdHhidWZfZnJlZShzYywgYmYpOworCQlhdGg1a19yeGJ1Zl9mcmVlKHNjLCBiZik7CiAKIAkvKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYWxsIGRlc2NyaXB0b3JzICovCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzYy0+ZGVzY19sZW4sIHNjLT5kZXNjLCBzYy0+ZGVzY19kYWRkcik7CkBAIC0xNjY4LDYgKzE2OTcsMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHN0cnVjdCBhdGg1a19zb2Z0YyAqKSBkYXRhOworCisJLyoKKwkgKiBTb2Z0d2FyZSBiZWFjb24gYWxlcnQtLXRpbWUgdG8gc2VuZCBhIGJlYWNvbi4KKwkgKgorCSAqIEluIElCU1MgbW9kZSB3ZSB1c2UgdGhpcyBpbnRlcnJ1cHQganVzdCB0bworCSAqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgorCSAqIHRyYW5zbWlzc2lvbiB0aW1lKSBpbiBvcmRlciB0byBkZXRlY3Qgd2V0aGVyCisJICogYXV0b21hdGljIFRTRiB1cGRhdGVzIGhhcHBlbmVkLgorCSAqLworCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCS8qIFhYWDogb25seSBpZiBWRU9MIHN1cHBwb3J0ZWQgKi8KKwkJdTY0IHRzZiA9IGF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpOworCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7CisJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAorCQkJCSJTV0JBIG5leHR0YnR0OiAleCBod190dTogJXggIgorCQkJCSJUU0Y6ICVsbHhcbiIsCisJCQkJc2MtPm5leHR0YnR0LAorCQkJCVRTRl9UT19UVSh0c2YpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHRzZik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQlhdGg1a19iZWFjb25fc2VuZChzYyk7CisJCXNwaW5fdW5sb2NrKCZzYy0+YmxvY2spOworCX0KK30KIAogc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMjAwOCw5ICsyMDY1LDggQEAKICAqIGZyYW1lIGNvbnRlbnRzIGFyZSBkb25lIGFzIG5lZWRlZCBhbmQgdGhlIHNsb3QgdGltZSBpcwogICogYWxzbyBhZGp1c3RlZCBiYXNlZCBvbiBjdXJyZW50IHN0YXRlLgogICoKLSAqIHRoaXMgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAoYXRoNWtfaW50cigpKQotICogYnV0IGFsc28gZnJvbSBhdGg1a19iZWFjb25fY29uZmlnKCkgaW4gSUJTUyBtb2RlIHdoaWNoIGluIHR1cm4KLSAqIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHRhc2tsZXQgYW5kIHVzZXIgY29udGV4dAorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzb2Z0d2FyZSBpcnEgY29udGV4dCAoYmVhY29udHEgb3IgcmVzdHEKKyAqIHRhc2tsZXRzKSBvciB1c2VyIGNvbnRleHQgZnJvbSBhdGg1a19iZWFjb25fY29uZmlnLgogICovCiBzdGF0aWMgdm9pZAogYXRoNWtfYmVhY29uX3NlbmQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKQEAgLTIxNzcsMTAgKzIyMzMsNiBAQAogICoKICAqIEBzYzogc3RydWN0IGF0aDVrX3NvZnRjIHBvaW50ZXIgd2UgYXJlIG9wZXJhdGluZyBvbgogICoKLSAqIFdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSB3ZSB3YW50IHRvIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZQotICogc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUCB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGggc28gd2UgY2FuIGxvb2sgZm9yCi0gKiBhbm90aGVyIEFQIHRvIGFzc29jaWF0ZSB3aXRoLgotICoKICAqIEluIElCU1MgbW9kZSB3ZSB1c2UgYSBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGlmIHBvc3NpYmxlLiBXZSBlbmFibGUgU1dCQQogICogaW50ZXJydXB0cyB0byBkZXRlY3QgVFNGIHVwZGF0ZXMgb25seS4KICAqLwpAQCAtMjE4OCwxNCArMjI0MCwxMyBAQAogYXRoNWtfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOwogCXNjLT5ibWlzc2NvdW50ID0gMDsKIAlzYy0+aW1hc2sgJj0gfihBUjVLX0lOVF9CTUlTUyB8IEFSNUtfSU5UX1NXQkEpOwogCi0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzYy0+aW1hc2sgfD0gQVI1S19JTlRfQk1JU1M7Ci0JfSBlbHNlIGlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKIAkJCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCB8fAogCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQkvKgpAQCAtMjIxMSw5ICsyMjYyLDkgQEAKIAogCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQkJaWYgKGF0aDVrX2h3X2hhc3Zlb2woYWgpKSB7Ci0JCQkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAkJCQlhdGg1a19iZWFjb25fc2VuZChzYyk7Ci0JCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0gZWxzZQogCQkJYXRoNWtfYmVhY29uX3VwZGF0ZV90aW1lcnMoc2MsIC0xKTsKQEAgLTIyMjgsMTggKzIyNzksMTMgQEAKIFwqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAotYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSkKK2F0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAKLQlpZiAoaXNfcmVzdW1lICYmICF0ZXN0X2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKSkKLQkJZ290byBvdXRfb2s7Ci0KLQlfX2NsZWFyX2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKTsKLQogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJtb2RlICVkXG4iLCBzYy0+b3Btb2RlKTsKIAogCS8qCkBAIC0yMjcxLDE1ICsyMzE3LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IEFSNUtfS0VZVEFCTEVfU0laRTsgaSsrKQogCQlhdGg1a19od19yZXNldF9rZXkoYWgsIGkpOwogCi0JX19zZXRfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpOwotCiAJLyogU2V0IGFjayB0byBiZSBzZW50IGF0IGxvdyBiaXQtcmF0ZXMgKi8KIAlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgZmFsc2UpOwogCiAJbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CiAKLW91dF9vazoKIAlyZXQgPSAwOwogZG9uZToKIAltbWlvd2IoKTsKQEAgLTIzMzQsNyArMjM3Nyw3IEBACiAgKiBzdG9wIGlzIHByZWVtcHRlZCkuCiAgKi8KIHN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19zdXNwZW5kKQorYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCWludCByZXQ7CiAKQEAgLTIzNjUsOCArMjQwOCw2IEBACiAJCX0KIAl9CiAJYXRoNWtfdHhidWZfZnJlZShzYywgc2MtPmJidWYpOwotCWlmICghaXNfc3VzcGVuZCkKLQkJX19jbGVhcl9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7CiAKIAltbWlvd2IoKTsKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKQEAgLTIzNzUsNiArMjQxNiw3IEBACiAJdGFza2xldF9raWxsKCZzYy0+cnh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+dHh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+cmVzdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMzkyLDE2ICsyNDM0LDkgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJZG8gewotCQkvKgotCQkgKiBGaWd1cmUgb3V0IHRoZSByZWFzb24ocykgZm9yIHRoZSBpbnRlcnJ1cHQuICBOb3RlCi0JCSAqIHRoYXQgZ2V0X2lzciByZXR1cm5zIGEgcHNldWRvLUlTUiB0aGF0IG1heSBpbmNsdWRlCi0JCSAqIGJpdHMgd2UgaGF2ZW4ndCBleHBsaWNpdGx5IGVuYWJsZWQgc28gd2UgbWFzayB0aGUKLQkJICogdmFsdWUgdG8gaW5zdXJlIHdlIG9ubHkgcHJvY2VzcyBiaXRzIHdlIHJlcXVlc3RlZC4KLQkJICovCiAJCWF0aDVrX2h3X2dldF9pc3IoYWgsICZzdGF0dXMpOwkJLyogTkI6IGNsZWFycyBJUlEgdG9vICovCiAJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfSU5UUiwgInN0YXR1cyAweCV4LzB4JXhcbiIsCiAJCQkJc3RhdHVzLCBzYy0+aW1hc2spOwotCQlzdGF0dXMgJj0gc2MtPmltYXNrOyAvKiBkaXNjYXJkIHVuYXNrZWQgZm9yIGJpdHMgKi8KIAkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIEFSNUtfSU5UX0ZBVEFMKSkgewogCQkJLyoKIAkJCSAqIEZhdGFsIGVycm9ycyBhcmUgdW5yZWNvdmVyYWJsZS4KQEAgLTI0MTIsMzIgKzI0NDcsNyBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9TV0JBKSB7Ci0JCQkJLyoKLQkJCQkqIFNvZnR3YXJlIGJlYWNvbiBhbGVydC0tdGltZSB0byBzZW5kIGEgYmVhY29uLgotCQkJCSogSGFuZGxlIGJlYWNvbiB0cmFuc21pc3Npb24gZGlyZWN0bHk7IGRlZmVycmluZwotCQkJCSogdGhpcyBpcyB0b28gc2xvdyB0byBtZWV0IHRpbWluZyBjb25zdHJhaW50cwotCQkJCSogdW5kZXIgbG9hZC4KLQkJCQkqCi0JCQkJKiBJbiBJQlNTIG1vZGUgd2UgdXNlIHRoaXMgaW50ZXJydXB0IGp1c3QgdG8KLQkJCQkqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgotCQkJCSogdHJhbnNtaXNzaW9uIHRpbWUpIGluIG9yZGVyIHRvIGRldGVjdCB3ZXRoZXIKLQkJCQkqIGF1dG9tYXRpYyBUU0YgdXBkYXRlcyBoYXBwZW5lZC4KLQkJCQkqLwotCQkJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkJCSAvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCi0JCQkJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoYWgpOwotCQkJCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7Ci0JCQkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAotCQkJCQkJICAiU1dCQSBuZXh0dGJ0dDogJXggaHdfdHU6ICV4ICIKLQkJCQkJCSAgIlRTRjogJWxseFxuIiwKLQkJCQkJCSAgc2MtPm5leHR0YnR0LAotCQkJCQkJICBUU0ZfVE9fVFUodHNmKSwKLQkJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzcGluX2xvY2soJnNjLT5ibG9jayk7Ci0JCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7Ci0JCQkJfQorCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5iZWFjb250cSk7CiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfUlhFT0wpIHsKIAkJCQkvKgpAQCAtMjQ1Nyw2ICsyNDY3LDcgQEAKIAkJCQkJfCBBUjVLX0lOVF9UWEVSUiB8IEFSNUtfSU5UX1RYRU9MKSkKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+dHh0cSk7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKKwkJCQkvKiBUT0RPICovCiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfTUlCKSB7CiAJCQkJLyoKQEAgLTI0OTYsNyArMjUwNyw3IEBACiAJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQlzYy0+Y3VyY2hhbi0+aHdfdmFsdWUpOwogCi0JaWYgKGF0aDVrX2h3X2dldF9yZl9nYWluKGFoKSA9PSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSkgeworCWlmIChhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpID09IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFKSB7CiAJCS8qCiAJCSAqIFJmZ2FpbiBpcyBvdXQgb2YgYm91bmRzLCByZXNldCB0aGUgY2hpcAogCQkgKiB0byBsb2FkIG5ldyBnYWluIHZhbHVlcy4KQEAgLTI1MTQsMTMwICsyNTI1LDYgQEAKIH0KIAogCi0KLS8qKioqKioqKioqKioqKipcCi0qIExFRCBmdW5jdGlvbnMgKgotXCoqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKLQkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOwotCQlhdGg1a19sZWRfb2ZmKHNjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb24oc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlyZXR1cm47Ci0JYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3Bpbiwgc2MtPmxlZF9vbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAotCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKLXsKLQlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKLQkJbGVkX2Rldik7Ci0KLQlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQotCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWVsc2UKLQkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOwotfQotCi1zdGF0aWMgaW50Ci1hdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAotCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQotewotCWludCBlcnI7Ci0KLQlsZWQtPnNjID0gc2M7Ci0Jc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKLQlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKLQlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7Ci0KLQllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOwotCWlmIChlcnIpIHsKLQkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOwotCQlsZWQtPnNjID0gTlVMTDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKLXsKLQlpZiAoIWxlZC0+c2MpCi0JCXJldHVybjsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKLQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWxlZC0+c2MgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOwotCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1hdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07Ci0KLQkvKgotCSAqIEF1dG8tZW5hYmxlIHNvZnQgbGVkIHByb2Nlc3NpbmcgZm9yIElCTSBjYXJkcyBhbmQgZm9yCi0JICogNTIxMSBtaW5pcGNpIGNhcmRzLgotCSAqLwotCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0gfHwKLQkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpIHsKLQkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOwotCQlzYy0+bGVkX3BpbiA9IDA7Ci0JCXNjLT5sZWRfb24gPSAwOyAgLyogYWN0aXZlIGxvdyAqLwotCX0KLQkvKiBFbmFibGUgc29mdGxlZCBvbiBQSU4xIG9uIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwICYgbng1MDAwIGxhcHRvcHMgKi8KLQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSkgewotCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7Ci0JCXNjLT5sZWRfcGluID0gMTsKLQkJc2MtPmxlZF9vbiA9IDE7ICAvKiBhY3RpdmUgaGlnaCAqLwotCX0KLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlnb3RvIG91dDsKLQotCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCBuYW1lLAotCQlpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIG5hbWUsCi0JCWllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoaHcpKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICogTWFjODAyMTEgZnVuY3Rpb25zICoKIFwqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI3NjYsMTIgKzI2NTMsMTIgQEAKIAogc3RhdGljIGludCBhdGg1a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlyZXR1cm4gYXRoNWtfaW5pdChody0+cHJpdiwgZmFsc2UpOworCXJldHVybiBhdGg1a19pbml0KGh3LT5wcml2KTsKIH0KIAogc3RhdGljIHZvaWQgYXRoNWtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlhdGg1a19zdG9wX2h3KGh3LT5wcml2LCBmYWxzZSk7CisJYXRoNWtfc3RvcF9odyhody0+cHJpdik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoNWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTI4NTYsNyArMjc0Myw3IEBACiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKIAlpZiAoc2MtPnZpZiAhPSB2aWYpIHsKQEAgLTI4ODIsOSArMjc2OSw3IEBACiAJCX0KIAkJYXRoNWtfYmVhY29uX3VwZGF0ZShzYywgYmVhY29uKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiAKLQlyZXR1cm4gYXRoNWtfcmVzZXRfd2FrZShzYyk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTMwMjAsOCArMjkwNSw4IEBACiAKIHN0YXRpYyBpbnQKIGF0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQljb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCi0JCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKKwkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJaW50IHJldCA9IDA7CkBAIC0zMDQ0LDcgKzI5MjksOCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNFVF9LRVk6Ci0JCXJldCA9IGF0aDVrX2h3X3NldF9rZXkoc2MtPmFoLCBrZXktPmtleWlkeCwga2V5LCBhZGRyKTsKKwkJcmV0ID0gYXRoNWtfaHdfc2V0X2tleShzYy0+YWgsIGtleS0+a2V5aWR4LCBrZXksCisJCQkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXQgdGhlIGtleVxuIik7CiAJCQlnb3RvIHVubG9jazsKQEAgLTMxMDQsNiArMjk5MCwxNCBAQAogfQogCiBzdGF0aWMgdm9pZAorYXRoNWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZikKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisKKwlhdGg1a19od19zZXRfdHNmNjQoc2MtPmFoLCB0c2YpOworfQorCitzdGF0aWMgdm9pZAogYXRoNWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAppbmRleCBmYWNjNjBkLi4yMGUwZDE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaApAQCAtMTQ4LDggKzE0OCw3IEBACiAJdTgJCQlic3NpZG1hc2tbRVRIX0FMRU5dOwogCiAJdW5zaWduZWQgaW50CQlsZWRfcGluLAkvKiBHUElPIHBpbiBmb3IgZHJpdmluZyBMRUQgKi8KLQkJCQlsZWRfb24sCQkvKiBwaW4gc2V0dGluZyBmb3IgTEVEIG9uICovCi0JCQkJbGVkX29mZjsJLyogb2ZmIHRpbWUgZm9yIGN1cnJlbnQgYmxpbmsgKi8KKwkJCQlsZWRfb247CQkvKiBwaW4gc2V0dGluZyBmb3IgTEVEIG9uICovCiAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcmVzdHE7CQkvKiByZXNldCB0YXNrbGV0ICovCiAKQEAgLTE3MCw2ICsxNjksNyBAQAogCXN0cnVjdCBhdGg1a19sZWQJdHhfbGVkOwkJLyogdHggbGVkICovCiAKIAlzcGlubG9ja190CQlibG9jazsJCS8qIHByb3RlY3RzIGJlYWNvbiAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAliZWFjb250cTsJLyogYmVhY29uIGludHIgdGFza2xldCAqLwogCXN0cnVjdCBhdGg1a19idWYJKmJidWY7CQkvKiBiZWFjb24gYnVmZmVyICovCiAJdW5zaWduZWQgaW50CQliaGFscSwJCS8qIFNXIHEgZm9yIG91dGdvaW5nIGJlYWNvbnMgKi8KIAkJCQlibWlzc2NvdW50LAkvKiBtaXNzZWQgYmVhY29uIHRyYW5zbWl0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jCmluZGV4IDE1MGY1ZWQuLjM2N2E2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9jYXBzLmMKQEAgLTg1LDcgKzg1LDggQEAKIAkJLyogRW5hYmxlICA4MDIuMTFiIGlmIGEgMkdIeiBjYXBhYmxlIHJhZGlvICgyMTExLzUxMTIpIGlzCiAJCSAqIGNvbm5lY3RlZCAqLwogCQlpZiAoQVI1S19FRVBST01fSERSXzExQihlZV9oZWFkZXIpIHx8Ci0JCQkJQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpKSB7CisJCSAgICAoQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpICYmCisJCSAgICAgYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTEpKSB7CiAJCQkvKiAyMzEyICovCiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV8yZ2h6X21pbiA9IDI0MTI7CiAJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9yYW5nZS5yYW5nZV8yZ2h6X21heCA9IDI3MzI7CkBAIC05NCw3ICs5NSw4IEBACiAJCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUIsCiAJCQkJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKIAotCQkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSkKKwkJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFHKGVlX2hlYWRlcikgJiYKKwkJCSAgICBhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMSkKIAkJCQlfX3NldF9iaXQoQVI1S19NT0RFXzExRywKIAkJCQkJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYwppbmRleCBjY2FlYjVjLi45NzcwYmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmMKQEAgLTgyLDE0ICs4MiwxNCBAQAogLyogZGVidWdmczogcmVnaXN0ZXJzICovCiAKIHN0cnVjdCByZWcgewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgYWRkcjsKIH07CiAKICNkZWZpbmUgUkVHX1NUUlVDVF9JTklUKHIpIHsgI3IsIHIgfQogCiAvKiBqdXN0IGEgZmV3IHJhbmRvbSByZWdpc3RlcnMsIG1pZ2h0IHdhbnQgdG8gYWRkIG1vcmUgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVnIHJlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnIHJlZ3NbXSA9IHsKIAlSRUdfU1RSVUNUX0lOSVQoQVI1S19DUiksCiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfUlhEUCksCiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfQ0ZHKSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiBzdGF0aWMgdm9pZCAqcmVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IEFSUkFZX1NJWkUocmVncykgPyAmcmVnc1sqcG9zXSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gKHZvaWQgKikmcmVnc1sqcG9zXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHJlZ19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQpAQCAtMTUzLDcgKzE1Myw3IEBACiBzdGF0aWMgdm9pZCAqcmVnX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQogewogCSsrKnBvczsKLQlyZXR1cm4gKnBvcyA8IEFSUkFZX1NJWkUocmVncykgPyAmcmVnc1sqcG9zXSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gKHZvaWQgKikmcmVnc1sqcG9zXSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgcmVnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnApCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWdpc3Rlcl9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZWdpc3Rlcl9zZXFfb3BzID0gewogCS5zdGFydCA9IHJlZ19zdGFydCwKIAkubmV4dCAgPSByZWdfbmV4dCwKIAkuc3RvcCAgPSByZWdfc3RvcCwKQEAgLTE5Myw0MyArMTkzLDYgQEAKIH07CiAKIAotLyogZGVidWdmczogVFNGICovCi0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90c2Yoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzEwMF07Ci0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JTAxNmxseFxuIiwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpYXRoNWtfaHdfZ2V0X3RzZjY0KHNjLT5haCkpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMTkpOwotfQotCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3RzZihzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMjBdOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgbWluKGNvdW50LCBzaXplb2YoYnVmKSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChzdHJuY21wKGJ1ZiwgInJlc2V0IiwgNSkgPT0gMCkgewotCQlhdGg1a19od19yZXNldF90c2Yoc2MtPmFoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWdmcyByZXNldCBUU0ZcbiIpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdHNmID0gewotCS5yZWFkID0gcmVhZF9maWxlX3RzZiwKLQkud3JpdGUgPSB3cml0ZV9maWxlX3RzZiwKLQkub3BlbiA9IGF0aDVrX2RlYnVnZnNfb3BlbiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLX07Ci0KLQogLyogZGVidWdmczogYmVhY29ucyAqLwogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfYmVhY29uKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0zMjcsNyArMjkwLDcgQEAKIAogLyogZGVidWdmczogZGVidWcgbGV2ZWwgKi8KIAotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAllbnVtIGF0aDVrX2RlYnVnX2xldmVsIGxldmVsOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqZGVzYzsKQEAgLTQyMyw5ICszODYsNiBAQAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlZ2lzdGVycyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSVJVR08sCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfcmVnaXN0ZXJzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3RzZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRzZiIsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3RzZik7Ci0KIAlzYy0+ZGVidWcuZGVidWdmc19iZWFjb24gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc19iZWFjb24pOwogCkBAIC00NDQsNyArNDA0LDYgQEAKIHsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kZWJ1Zyk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVnaXN0ZXJzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc190c2YpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbik7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaAppbmRleCBmZmM1MjkzLi42NmY2OWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmgKQEAgLTcyLDcgKzcyLDYgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19waHlkaXI7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfZGVidWc7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcmVnaXN0ZXJzOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3RzZjsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19iZWFjb247CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcmVzZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwppbmRleCAxY2I3ZWRmLi5hYzQ1Y2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwpAQCAtMTM3LDYgKzEzNywxOCBAQAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMCkgewogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMCwgZWVfbWlzYzApOwogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMSwgZWVfbWlzYzEpOworCisJCS8qIFhYWDogRG9uJ3Qga25vdyB3aGljaCB2ZXJzaW9ucyBpbmNsdWRlIHRoZXNlIHR3byAqLworCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMiwgZWVfbWlzYzIpOworCisJCWlmIChlZS0+ZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMykKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MzLCBlZV9taXNjMyk7CisKKwkJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wKSB7CisJCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDNCwgZWVfbWlzYzQpOworCQkJQVI1S19FRVBST01fUkVBRF9IRFIoQVI1S19FRVBST01fTUlTQzUsIGVlX21pc2M1KTsKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0M2LCBlZV9taXNjNik7CisJCX0KIAl9CiAKIAlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMykgewpAQCAtMTkyLDcgKzIwNCw3IEBACiAKIAkvKiBHZXQgYW50ZW5uYSBtb2RlcyAqLwogCWFoLT5haF9hbnRlbm5hW21vZGVdWzBdID0KLQkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KSB8IDB4MTsKKwkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KTsKIAlhaC0+YWhfYW50ZW5uYVttb2RlXVtBUjVLX0FOVF9GSVhFRF9BXSA9CiAJICAgICBlZS0+ZWVfYW50X2NvbnRyb2xbbW9kZV1bMV0gCXwKIAkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVsyXSA8PCA2KSAJfApAQCAtMjEzLDcgKzIyNSw4IEBACiB9CiAKIC8qCi0gKiBSZWFkIHN1cHBvcnRlZCBtb2RlcyBmcm9tIGVlcHJvbQorICogUmVhZCBzdXBwb3J0ZWQgbW9kZXMgYW5kIHNvbWUgbW9kZS1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhCisgKiBmcm9tIGVlcHJvbQogICovCiBzdGF0aWMgaW50IGF0aDVrX2VlcHJvbV9yZWFkX21vZGVzKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiAqb2Zmc2V0LAogCQl1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTMxNSw2ICszMjgsOSBAQAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA8IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8wKQogCQlnb3RvIGRvbmU7CiAKKwkvKiBOb3RlOiA+PSB2NSBoYXZlIGJnIGZyZXEgcGllcnMgb24gYW5vdGhlciBsb2NhdGlvbgorCSAqIHNvIHRoZXNlIGZyZXEgcGllcnMgYXJlIGlnbm9yZWQgZm9yID49IHY1IChzaG91bGQgYmUgMHhmZgorCSAqIGFueXdheSkgKi8KIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA8IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8xKQpAQCAtNDQyLDcgKzQ1OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLQorLyogUmVhZCBtb2RlLXNwZWNpZmljIGRhdGEgKGV4Y2VwdCBwb3dlciBjYWxpYnJhdGlvbiBkYXRhKSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX2luaXRfbW9kZXMoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKQEAgLTQ4OCwxMiArNTA0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFVzZWQgdG8gbWF0Y2ggUENEQUMgc3RlcHMgd2l0aCBwb3dlciB2YWx1ZXMgb24gUkY1MTExIGNoaXBzCisgKiAoZWVwcm9tIHZlcnNpb25zIDwgNCkuIEZvciBSRjUxMTEgd2UgaGF2ZSAxMCBwcmUtZGVmaW5lZCBQQ0RBQworICogc3RlcHMgdGhhdCBtYXRjaCB3aXRoIHRoZSBwb3dlciB2YWx1ZXMgd2UgcmVhZCBmcm9tIGVlcHJvbS4gT24KKyAqIG9sZGVyIGVlcHJvbSB2ZXJzaW9ucyAoPCAzLjIpIHRoZXNlIHN0ZXBzIGFyZSBlcXVhbHkgc3BhY2VkIGF0CisgKiAxMCUgb2YgdGhlIHBjZGFjIGN1cnZlIC11bnRpbCB0aGUgY3VydmUgcmVhY2hlcyBpdCdzIG1heGltdW0tCisgKiAoMTAgc3RlcHMgZnJvbSAwIHRvIDEwMCUpIGJ1dCBvbiBuZXdlciBlZXByb20gdmVyc2lvbnMgKD49IDMuMikKKyAqIHRoZXNlIDEwIHN0ZXBzIGFyZSBzcGFjZWQgaW4gYSBkaWZmZXJlbnQgd2F5LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIHRoZSBwY2RhYyBzdGVwcyBiYXNlZCBvbiBlZXByb20gdmVyc2lvbiBhbmQgY3VydmUgbWluL21heCBzbyB0aGF0IHdlCisgKiBjYW4gaGF2ZSAgcGNkYWMvcHdyIHBvaW50cy4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkCiBhdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtaW4sIHU4IG1heCwgdTggKnZwKQogewotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNbXSA9CisJc3RhdGljIGNvbnN0IHUxNiBpbnRlcmNlcHRzM1tdID0KIAkJeyAwLCA1LCAxMCwgMjAsIDMwLCA1MCwgNzAsIDg1LCA5MCwgOTUsIDEwMCB9OwotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNfMltdID0KKwlzdGF0aWMgY29uc3QgdTE2IGludGVyY2VwdHMzXzJbXSA9CiAJCXsgMCwgMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwIH07CiAJY29uc3QgdTE2ICppcDsKIAlpbnQgaTsKQEAgLTUwNywzNyArNTMzLDQ4IEBACiAJCSp2cCsrID0gKGlwW2ldICogbWF4ICsgKDEwMCAtIGlwW2ldKSAqIG1pbikgLyAxMDA7CiB9CiAKKy8qIFJlYWQgdGhlIGZyZXF1ZW5jeSBwaWVycyBmb3IgZWFjaCBtb2RlIChtb3N0bHkgdXNlZCBvbiBuZXdlciBlZXByb21zIHdpdGggMHhmZgorICogZnJlcXVlbmN5IG1hc2spICovCiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KHN0cnVjdCBhdGg1a19odyAqYWgsIGludCAqb2Zmc2V0LCBpbnQgbWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGMsIHU4ICpjb3VudCkKKwkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGMsIHVuc2lnbmVkIGludCBtb2RlKQogeworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCWludCBvID0gKm9mZnNldDsKIAlpbnQgaSA9IDA7Ci0JdTggZjEsIGYyOworCXU4IGZyZXExLCBmcmVxMjsKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKIAl3aGlsZShpIDwgbWF4KSB7CiAJCUFSNUtfRUVQUk9NX1JFQUQobysrLCB2YWwpOwogCi0JCWYxID0gKHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCWYyID0gdmFsICYgMHhmZjsKKwkJZnJlcTEgPSAodmFsID4+IDgpICYgMHhmZjsKKwkJZnJlcTIgPSB2YWwgJiAweGZmOwogCi0JCWlmIChmMSkKLQkJCXBjW2krK10uZnJlcSA9IGYxOworCQlpZiAoZnJlcTEpIHsKKwkJCXBjW2krK10uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJCQkJZnJlcTEsIG1vZGUpOworCQkJZWUtPmVlX25fcGllcnNbbW9kZV0rKzsKKwkJfQogCi0JCWlmIChmMikKLQkJCXBjW2krK10uZnJlcSA9IGYyOworCQlpZiAoZnJlcTIpIHsKKwkJCXBjW2krK10uZnJlcSA9IGF0aDVrX2VlcHJvbV9iaW4yZnJlcShlZSwKKwkJCQkJZnJlcTIsIG1vZGUpOworCQkJZWUtPmVlX25fcGllcnNbbW9kZV0rKzsKKwkJfQogCi0JCWlmICghZjEgfHwgIWYyKQorCQlpZiAoIWZyZXExIHx8ICFmcmVxMikKIAkJCWJyZWFrOwogCX0KKworCS8qIHJldHVybiBuZXcgb2Zmc2V0ICovCiAJKm9mZnNldCA9IG87Ci0JKmNvdW50ID0gaTsKIAogCXJldHVybiAwOwogfQogCisvKiBSZWFkIGZyZXF1ZW5jeSBwaWVycyBmb3IgODAyLjExYSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX2luaXRfMTFhX3BjYWxfZnJlcShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgb2Zmc2V0KQogewpAQCAtNTUwLDcgKzU4Nyw3IEBACiAJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fM18zKSB7CiAJCWF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChhaCwgJm9mZnNldCwKIAkJCUFSNUtfRUVQUk9NX05fNUdIWl9DSEFOLCBwY2FsLAotCQkJJmVlLT5lZV9uX3BpZXJzW0FSNUtfRUVQUk9NX01PREVfMTFBXSk7CisJCQlBUjVLX0VFUFJPTV9NT0RFXzExQSk7CiAJfSBlbHNlIHsKIAkJbWFzayA9IEFSNUtfRUVQUk9NX0ZSRVFfTShhaC0+YWhfZWVfdmVyc2lvbik7CiAKQEAgLTU3NywyMyArNjE0LDI1IEBACiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKIAkJcGNhbFs5XS5mcmVxIHw9ICh2YWwgPj4gMTApICYgMHgzZjsKLQkJZWUtPmVlX25fcGllcnNbQVI1S19FRVBST01fTU9ERV8xMUFdID0gMTA7Ci0JfQogCi0JZm9yKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCS8qIEZpeGVkIG51bWJlciBvZiBwaWVycyAqLworCQllZS0+ZWVfbl9waWVyc1tBUjVLX0VFUFJPTV9NT0RFXzExQV0gPSAxMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkrKykgeworCQkJcGNhbFtpXS5mcmVxID0gYXRoNWtfZWVwcm9tX2JpbjJmcmVxKGVlLAogCQkJCXBjYWxbaV0uZnJlcSwgQVI1S19FRVBST01fTU9ERV8xMUEpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlYWQgZnJlcXVlbmN5IHBpZXJzIGZvciA4MDIuMTFiZyBvbiBlZXByb20gdmVyc2lvbnMgPj0gNSBhbmQgZWVtYXAgPj0gMiAqLwogc3RhdGljIGlubGluZSBpbnQKIGF0aDVrX2VlcHJvbV9pbml0XzExYmdfMjQxMyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjYWw7Ci0JaW50IGk7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6CkBAIC02MDgsMjMgKzY0NywyNSBAQAogCiAJYXRoNWtfZWVwcm9tX3JlYWRfZnJlcV9saXN0KGFoLCAmb2Zmc2V0LAogCQlBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzLCBwY2FsLAotCQkmZWUtPmVlX25fcGllcnNbbW9kZV0pOwotCWZvcihpID0gMDsgaSA8IEFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTM7IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCi0JCQkJcGNhbFtpXS5mcmVxLCBtb2RlKTsKLQl9CisJCW1vZGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLQorLyogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkY1MTExIGNoaXBzCisgKiBGb3IgUkY1MTExIHdlIGhhdmUgYW4gWFBEIC1lWHRlcm5hbCBQb3dlciBEZXRlY3Rvci0gY3VydmUKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4gRWFjaCBjdXJ2ZSBoYXMgUENEQUMgc3RlcHMgb24KKyAqIHggYXhpcyBhbmQgcG93ZXIgb24geSBheGlzIGFuZCBsb29rcyBsaWtlIGEgbG9nYXJpdGhtaWMKKyAqIGZ1bmN0aW9uLiBUbyByZWNyZWF0ZSB0aGUgY3VydmUgYW5kIHBhc3MgdGhlIHBvd2VyIHZhbHVlcworICogb24gdGhlIHBjZGFjIHRhYmxlLCB3ZSByZWFkIDEwIHBvaW50cyBoZXJlIGFuZCBpbnRlcnBvbGF0ZSBsYXRlci4KKyAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzUxMTEoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpwY2FsOwogCWludCBvZmZzZXQsIHJldDsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAl1MTYgdmFsOwogCiAJb2Zmc2V0ID0gQVI1S19FRVBST01fR1JPVVBTX1NUQVJUKGVlLT5lZV92ZXJzaW9uKTsKQEAgLTcwNCwxNiArNzQ1LDIyIEBACiAKIAkJYXRoNWtfZ2V0X3BjZGFjX2ludGVyY2VwdHMoYWgsIGNkYXRhLT5wY2RhY19taW4sCiAJCQljZGF0YS0+cGNkYWNfbWF4LCBjZGF0YS0+cGNkYWMpOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUjVLX0VFUFJPTV9OX1BDREFDOyBqKyspIHsKLQkJCWNkYXRhLT5wd3Jbal0gPSAodTE2KQotCQkJCShBUjVLX0VFUFJPTV9QT1dFUl9TVEVQICogY2RhdGEtPnB3cltqXSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorLyogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkY1MTEyIGNoaXBzCisgKiBGb3IgUkY1MTEyIHdlIGhhdmUgNCBYUEQgLWVYdGVybmFsIFBvd2VyIERldGVjdG9yLSBjdXJ2ZXMKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbCBvbiAwLCAtNiwgLTEyIGFuZCAtMThkYm0gYnV0IHdlIG9ubHkKKyAqIHVzZSB0aGUgaGlnaGVyICgzKSBhbmQgdGhlIGxvd2VyICgwKSBjdXJ2ZXMuIEVhY2ggY3VydmUgaGFzIFBDREFDCisgKiBzdGVwcyBvbiB4IGF4aXMgYW5kIHBvd2VyIG9uIHkgYXhpcyBhbmQgbG9va3MgbGlrZSBhIGxpbmVhcgorICogZnVuY3Rpb24uIFRvIHJlY3JlYXRlIHRoZSBjdXJ2ZSBhbmQgcGFzcyB0aGUgcG93ZXIgdmFsdWVzCisgKiBvbiB0aGUgcGNkYWMgdGFibGUsIHdlIHJlYWQgNCBwb2ludHMgZm9yIHhwZCAwIGFuZCAzIHBvaW50cworICogZm9yIHhwZCAzIGhlcmUgYW5kIGludGVycG9sYXRlIGxhdGVyLgorICoKKyAqIE5vdGU6IE1hbnkgdmVuZG9ycyBqdXN0IHVzZSB4cGQgMCBzbyB4cGQgMyBpcyB6ZXJvZWQuCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb181MTEyKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewpAQCAtNzkwLDcgKzgzNyw3IEBACiAKIAkJLyogUENEQUMgc3RlcHMKIAkJICogY29ycmVzcG9uZGluZyB0byB0aGUgYWJvdmUgcG93ZXIKLQkJICogbWVhc3VyZW1lbnRzIChzdGF0aWMpICovCisJCSAqIG1lYXN1cmVtZW50cyAoZml4ZWQpICovCiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194M1swXSA9IDIwOwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDNbMV0gPSAzNTsKIAkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gzWzJdID0gNjM7CkBAIC04MTQsNiArODYxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEZvciBSRjI0MTMgcG93ZXIgY2FsaWJyYXRpb24gZGF0YSBkb2Vzbid0IHN0YXJ0IG9uIGEgZml4ZWQgbG9jYXRpb24gYW5kCisgKiBpZiBhIG1vZGUgaXMgbm90IHN1cHBvcnRlZCwgaXQncyBzZWN0aW9uIGlzIG1pc3NpbmcgLW5vdCB6ZXJvZWQtLgorICogU28gd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIG9mZnNldCBmb3IgZWFjaCBzZWN0aW9uIGJ5IHVzaW5nCisgKiB0aGVzZSB0d28gZnVuY3Rpb25zICovCisKKy8qIFJldHVybiB0aGUgc2l6ZSBvZiBlYWNoIHNlY3Rpb24gYmFzZWQgb24gdGhlIG1vZGUgYW5kIHRoZSBudW1iZXIgb2YgcGQKKyAqIGdhaW5zIGF2YWlsYWJsZSAobWF4aW11bSA0KS4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKQEAgLTgyNiw2ICs4ODAsOCBAQAogCXJldHVybiBzejsKIH0KIAorLyogUmV0dXJuIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGEgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbW9kZXMgc3VwcG9ydGVkCisgKiBhbmQgZWFjaCBzZWN0aW9uJ3Mgc2l6ZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGF0aDVrX2NhbF9kYXRhX29mZnNldF8yNDEzKHN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUsIGludCBtb2RlKQogewpAQCAtODM0LDExICs4OTAsMTMgQEAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUc6CiAJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQotCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQikgKyAyOworCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQikgKworCQkJCQkJCUFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTMgLyAyOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgogCQlpZiAoQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKLQkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwgQVI1S19FRVBST01fTU9ERV8xMUEpICsgNTsKKwkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwgQVI1S19FRVBST01fTU9ERV8xMUEpICsKKwkJCQkJCQlBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTiAvIDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWJyZWFrOwpAQCAtODQ5LDYgKzkwNywxNyBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKKy8qIFJlYWQgcG93ZXIgY2FsaWJyYXRpb24gZm9yIFJGMjQxMyBjaGlwcworICogRm9yIFJGMjQxMyB3ZSBoYXZlIGEgUEREQUMgdGFibGUgKFBvd2VyIERldGVjdG9yKSBpbnN0ZWFkCisgKiBvZiBhIFBDREFDIGFuZCA0IHBkIGdhaW4gY3VydmVzIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4KKyAqIEVhY2ggY3VydmUgaGFzIFBEREFDIHN0ZXBzIG9uIHggYXhpcyBhbmQgcG93ZXIgb24geSBheGlzIGFuZAorICogbG9va3MgbGlrZSBhbiBleHBvbmVudGlhbCBmdW5jdGlvbi4gVG8gcmVjcmVhdGUgdGhlIGN1cnZlcworICogd2UgcmVhZCBoZXJlIHRoZSBwb2ludHMgYW5kIGludGVycG9sYXRlIGxhdGVyLiBOb3RlIHRoYXQKKyAqIGluIG1vc3QgY2FzZXMgb25seSBoaWdoZXIgYW5kIGxvd2VyIGN1cnZlcyBhcmUgdXNlZCAobGlrZQorICogUkY1MTEyKSBidXQgdmVuZG9ycyBoYXZlIHRoZSBvcG9ydHVuaXR5IHRvIGluY2x1ZGUgYWxsIDQKKyAqIGN1cnZlcyBvbiBlZXByb20uIFRoZSBmaW5hbCBjdXJ2ZSAoaGlnaGVyIHBvd2VyKSBoYXMgYW4gZXh0cmEKKyAqIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgbGlrZSBSRjUxMTIuCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewpAQCAtODY4LDYgKzkzNyw3IEBACiAJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gcGRfZ2FpbnM7CiAKIAlvZmZzZXQgPSBhdGg1a19jYWxfZGF0YV9vZmZzZXRfMjQxMyhlZSwgbW9kZSk7CisJZWUtPmVlX25fcGllcnNbbW9kZV0gPSAwOwogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKQEAgLTExNjMsNiArMTIzMywyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVhZCBwZXIgY2hhbm5lbCBjYWxpYnJhdGlvbiBpbmZvIGZyb20gRUVQUk9NCisgKgorICogVGhpcyBpbmZvIGlzIHVzZWQgdG8gY2FsaWJyYXRlIHRoZSBiYXNlYmFuZCBwb3dlciB0YWJsZS4gSW1hZ2luZQorICogdGhhdCBmb3IgZWFjaCBjaGFubmVsIHRoZXJlIGlzIGEgcG93ZXIgY3VydmUgdGhhdCdzIGh3IHNwZWNpZmljCisgKiAoZGVwZW5kcyBvbiBhbXBsaWZpZXIgZXRjKSBhbmQgd2UgdHJ5IHRvICJjb3JyZWN0IiB0aGlzIGN1cnZlIHVzaW5nCisgKiBvZmZlc3RzIHdlIHBhc3Mgb24gdG8gcGh5IGNoaXAgKGJhc2ViYW5kIC0+IGJlZm9yZSBhbXBsaWZpZXIpIHNvIHRoYXQKKyAqIGl0IGNhbiB1c2UgYWNjdXJhdGUgcG93ZXIgdmFsdWVzIHdoZW4gc2V0dGluZyB0eCBwb3dlciAodGFrZXMgYW1wbGlmaWVyJ3MKKyAqIHBlcmZvcm1hbmNlIG9uIGVhY2ggY2hhbm5lbCBpbnRvIGFjY291bnQpLgorICoKKyAqIEVFUFJPTSBwcm92aWRlcyB1cyB3aXRoIHRoZSBvZmZzZXRzIGZvciBzb21lIHByZS1jYWxpYnJhdGVkIGNoYW5uZWxzCisgKiBhbmQgd2UgaGF2ZSB0byBpbnRlcnBvbGF0ZSB0byBjcmVhdGUgdGhlIGZ1bGwgdGFibGUgZm9yIHRoZXNlIGNoYW5uZWxzIGFuZAorICogYWxzbyB0aGUgdGFibGUgZm9yIGFueSBjaGFubmVsLgorICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9wY2FsX2luZm8oc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKQEAgLTExOTMsNyArMTI3Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgKi8KKy8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtMTMyOCwxOSArMTQxMiwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKIC8qCiAgKiBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIGVlcHJvbQogICovCiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCiB7Ci0JdTggbWFjX2RbRVRIX0FMRU5dOworCXU4IG1hY19kW0VUSF9BTEVOXSA9IHt9OwogCXUzMiB0b3RhbCwgb2Zmc2V0OwogCXUxNiBkYXRhOwogCWludCBvY3RldCwgcmV0OwogCi0JbWVtc2V0KG1hYywgMCwgRVRIX0FMRU4pOwotCW1lbXNldChtYWNfZCwgMCwgRVRIX0FMRU4pOwotCiAJcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIDB4MjAsICZkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTM1NiwxMSArMTQzOCwyMiBAQAogCQlvY3RldCArPSAyOwogCX0KIAotCW1lbWNweShtYWMsIG1hY19kLCBFVEhfQUxFTik7Ci0KIAlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKKwogCXJldHVybiAwOwogfQogCitib29sIGF0aDVrX2VlcHJvbV9pc19oYjYzKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTE2IGRhdGE7CisKKwlhdGg1a19od19lZXByb21fcmVhZChhaCwgQVI1S19FRVBST01fSVNfSEI2MywgJmRhdGEpOworCisJaWYgKChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MjUgPj4gNCkpICYmIGRhdGEpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaAppbmRleCAwOWViN2QwLi4xZGVlYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBBUjVLX0VFUFJPTV9NQUdJQ181MjExCQkweDAwMDAxNDViIC8qIDUyMTEgKi8KICNkZWZpbmUgQVI1S19FRVBST01fTUFHSUNfNTIxMAkJMHgwMDAwMTQ1YSAvKiA1MjEwICovCiAKKyNkZWZpbmUJQVI1S19FRVBST01fSVNfSEI2MwkJMHgwMDBiCS8qIFRhbG9uIGRldGVjdCAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9SRUdfRE9NQUlOCQkweDAwYmYJLyogRUVQUk9NIHJlZ2RvbSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9DSEVDS1NVTQkJMHgwMGMwCS8qIEVFUFJPTSBjaGVja3N1bSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9JTkZPX0JBU0UJCTB4MDBjMAkvKiBFRVBST00gaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMKaW5kZXggYjc3MjA1YS4uNjRhMjdlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYwpAQCAtODMsNyArODMsNyBAQAogaW50IGF0aDVrX2h3X3NldF9ncGlvX2lucHV0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLApAQCAtOTksNyArOTksNyBAQAogaW50IGF0aDVrX2h3X3NldF9ncGlvX291dHB1dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKQEAgLTExNSw3ICsxMTUsNyBAQAogdTMyIGF0aDVrX2h3X2dldF9ncGlvKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAweGZmZmZmZmZmOwogCiAJLyogR1BJTyBpbnB1dCBtYWdpYyAqLwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJdTMyIGRhdGE7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAotCWlmIChncGlvID4gQVI1S19OVU1fR1BJTykKKwlpZiAoZ3BpbyA+PSBBUjVLX05VTV9HUElPKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdQSU8gb3V0cHV0IG1hZ2ljICovCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl1MzIgZGF0YTsKIAogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybjsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYwppbmRleCA0NTBiZDZlLi40NDg4NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMKQEAgLTIsNyArMiw3IEBACiAgKiBJbml0aWFsIHJlZ2lzdGVyIHNldHRpbmdzIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CkBAIC0zNDAsNyArMzQwLDcgQEAKIAkgKiBjb21tb24gb24gYWxsIGNhcmRzL21vZGVzLgogCSAqIE5vdGU6IFRhYmxlIGlzIHJld3JpdHRlbiBkdXJpbmcKIAkgKiB0eHBvd2VyIHNldHVwIGxhdGVyIHVzaW5nIGNhbGlicmF0aW9uCi0JICogZGF0YSBldGMuIHNvIG5leHQgd3JpdGUgaXMgbm9uLWNvbW1vbgorCSAqIGRhdGEgZXRjLiBzbyBuZXh0IHdyaXRlIGlzIG5vbi1jb21tb24gKi8KIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMSksIDB4MDZmZjA1ZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMiksIDB4MDdmZjA3ZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMyksIDB4MDhmZjA4ZmYgfSwKQEAgLTM3MSw3ICszNzEsNyBAQAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigyOCksIDB4M2FmZjNhZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMjkpLCAweDNhZmYzYWZmIH0sCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMwKSwgMHgzYWZmM2FmZiB9LAotCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzMSksIDB4M2FmZjNhZmYgfSwqLworCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzMSksIDB4M2FmZjNhZmYgfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BIWSg2NDIpLCAweDUwM2U0NjQ2IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosIDB4NjQ4MDQxNmMgfSwKQEAgLTM4Niw4NSArMzg2LDg1IEBACiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMQotICogWFhYOiBob3cgYWJvdXQgZyAvIGdUdXJibyA/IFJGNTExMSBzdXBwb3J0cyBpdCwgaG93IGFib3V0IEFSNTIxMSA/Ci0gKiBNYXliZSA1MjExIHN1cHBvcnRzIE9GRE0tb25seSBnIGJ1dCB3ZSBuZWVkIHRvIHRlc3QgaXQgIQorICogNTIxMSBzdXBwb3J0cyBPRkRNLW9ubHkgZyAoZHJhZnQgZykgYnV0IHdlCisgKiBuZWVkIHRvIHRlc3QgaXQgIQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIGFyNTIxMV9pbmlfbW9kZVtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgIGEJICAgICAgYVR1cmJvCSAgYgkJKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDFkIH0gfSwKKwkvKgkgIGEJICAgIGFUdXJibwkgIGIJICBnIChPRkRNKSAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygxKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDIpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg0KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDUpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg3KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDgpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0xPVCwKLQkJeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4IH0gfSwKKwkgICB7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjgsIDB4MDAwMDAxNjggfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TSUZTLAotCQl7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAgfSB9LAorCSAgIHsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDIzMCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX0VJRlMsCi0JCXsgMHgwMDAwMGQ5OCwgMHgwMDAwMTE4MCwgMHgwMDAwMWY0OCB9IH0sCisJICAgeyAweDAwMDAwZDk4LCAweDAwMDAxMTgwLCAweDAwMDAxZjQ4LCAweDAwMDAwZDk4IH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfTUlTQywKLQkJeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwIH0gfSwKKwkgICB7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAsIDB4MDAwMGEwZTAgfSB9LAogCXsgQVI1S19USU1FX09VVCwKLQkJeyAweDA0MDAwNDAwLCAweDA4MDAwODAwLCAweDIwMDAzMDAwIH0gfSwKKwkgICB7IDB4MDQwMDA0MDAsIDB4MDgwMDA4MDAsIDB4MjAwMDMwMDAsIDB4MDQwMDA0MDAgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgwZThkOGZhNywgMHgwZThkOGZjZiwgMHgwMTYwOGY5NSB9IH0sCisJICAgeyAweDBlOGQ4ZmE3LCAweDBlOGQ4ZmNmLCAweDAxNjA4Zjk1LCAweDBlOGQ4ZmE3IH0gfSwKIAl7IEFSNUtfUEhZX1RVUkJPLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCiAJeyBBUjVLX1BIWSg4KSwKLQkJeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwIH0gfSwKKwkgICB7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAsIDB4MDIwMjAyMDAgfSB9LAogCXsgQVI1S19QSFkoOSksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNyB9IH0sCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3LCAweDAwMDAwZTBlIH0gfSwKIAl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDEwMDAwIH0gfSwKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAwMDAsIDB4MGEwMjAwMDEgfSB9LAogCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCiAJeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiB9IH0sCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKIAl7IEFSNUtfUEhZKDE3KSwKLQkJeyAweDEzNzIxNjljLCAweDEzNzIxNmE1LCAweDEzNzIxNmE4IH0gfSwKKwkgICB7IDB4MTM3MjE2OWMsIDB4MTM3MjE2YTUsIDB4MTM3MjE2YTgsIDB4MTM3MjE2OWMgfSB9LAogCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOGJhNjcsIDB4MDAxOGJhNjcsIDB4MDAxOGJhNjkgfSB9LAorCSAgIHsgMHgwMDE4YmE2NywgMHgwMDE4YmE2NywgMHgwMDE4YmE2OSwgMHgwMDE4YmE2OSB9IH0sCiAJeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCwgMHgwYzI4YjRlMCB9IH0sCisJICAgeyAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlYzAwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VjMDBkMmUsIDB4N2U4MDBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzVkNWUsIDB4MzEzNzVkNWUsIDB4MzEzYTVkNWUgfSB9LAorCSAgIHsgMHgzMTM3NWQ1ZSwgMHgzMTM3NWQ1ZSwgMHgzMTNhNWQ1ZSwgMHgzMTM3NWQ1ZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDVEwsCi0JCXsgMHgwMDAwYmQxMCwgMHgwMDAwYmQxMCwgMHgwMDAwYmQzOCB9IH0sCisJICAgeyAweDAwMDBiZDEwLCAweDAwMDBiZDEwLCAweDAwMDBiZDM4LCAweDAwMDBiZDEwIH0gfSwKIAl7IEFSNUtfUEhZX05GLAotCQl7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAorCSAgIHsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjIH0gfSwKKwkgICB7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MsIDB4MDAwMDI3MTAgfSB9LAogCXsgQVI1S19QSFkoNzApLAotCQl7IDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIDB4MDAwMDAwODQgfSB9LAorCSAgIHsgMHgwMDAwMDE5MCwgMHgwMDAwMDE5MCwgMHgwMDAwMDA4NCwgMHgwMDAwMDE5MCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweDZmZTAxMDIwLCAweDZmZTAxMDIwLCAweDZmZTAwOTIwIH0gfSwKLQl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRV81MjExLAotCQl7IDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYgfSB9LAorCSAgIHsgMHg2ZmUwMTAyMCwgMHg2ZmUwMTAyMCwgMHg2ZmUwMDkyMCwgMHg2ZmUwMTAyMCB9IH0sCisJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0UsCisJICAgeyAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxOWZmIH0gfSwKIAl7IEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNCwKLQkJeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwIH0gfSwKKwkgICB7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSB9LAogfTsKIAogLyogSW5pdGlhbCByZWdpc3RlciBzZXR0aW5ncyBmb3IgQVI1MjEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSBhcjUyMTJfaW5pW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSBhcjUyMTJfaW5pX2NvbW1vbl9zdGFydFtdID0gewogCXsgQVI1S19SWERQLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19SWENGRywJCTB4MDAwMDAwMDUgfSwKIAl7IEFSNUtfTUlCQywJCTB4MDAwMDAwMDAgfSwKQEAgLTQ4NSw5MSArNDg1LDgzIEBACiAJeyBBUjVLX1FVRVVFX1RYRFAoOSksCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfVFhQLAkJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19EQ1VfVFhfRklMVEVSXzBfQkFTRSwJMHgwMDAwMDAwMCB9LAotCS8qIFVua25vd24gdGFibGUgKi8KLQl7IDB4MTA3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEwZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTEzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDExYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyNzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzMzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTM3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2I4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE0YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTRmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNTM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTViOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNWY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2MzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTY3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNmI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2ZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTczOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNzc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE3YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTdmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMDNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEwN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTBiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTE3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMWJjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTIzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjdjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEyYmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJmYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMzNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTNiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2ZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDE0M2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQ3YywgMHgwMDAwMDAwMCB9LAorCS8qIFR4IGZpbHRlciB0YWJsZSAwICgzMiBlbnRyaWVzKSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMCksICAweDAwMDAwMDAwIH0sIC8qIERDVSAwICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg0KSwgIDB4MDAwMDAwMDAgfSwgLyogRENVIDEgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDUpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoNiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg3KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDgpLCAgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgMiAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoOSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDExKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTIpLCAweDAwMDAwMDAwIH0sIC8qIERDVSAzICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE0KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTUpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxNiksIDB4MDAwMDAwMDAgfSwgLyogRENVIDQgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE3KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTgpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxOSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIwKSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyMiksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIzKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjQpLCAweDAwMDAwMDAwIH0sIC8qIERDVSA2ICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI2KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjcpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyOCksIDB4MDAwMDAwMDAgfSwgLyogRENVIDcgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI5KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMzApLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgzMSksIDB4MDAwMDAwMDAgfSwKKwkvKiBUeCBmaWx0ZXIgdGFibGUgMSAoMTYgZW50cmllcykgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDApLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgyKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDMpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNCksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg1KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDYpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg4KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDkpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTApLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDEyKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTMpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxNCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDE1KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSX0NMUiwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSX1NFVCwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfVFhfRklMVEVSX0NMUiwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfVFhfRklMVEVSX1NFVCwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19TVEFfSUQxLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CU1NfSUQwLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CU1NfSUQxLAkJMHgwMDAwMDAwMCB9LAotCS8qeyBBUjVLX1JTU0lfVEhSLAkweDAwMDAwMDAwIH0sKi8JLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19CRUFDT05fNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX0NGUF9QRVJJT0RfNTIxMSwgMHgwMDAwMDAwMCB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSMF81MjExLAkweDAwMDAwMDMwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIxXzUyMTEsCTB4MDAwN2ZmZmYgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19USU1FUjJfNTIxMSwJMHgwMWZmZmZmZiB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSM181MjExLAkweDAwMDAwMDMxIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfQ0ZQX0RVUl81MjExLAkweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KKwl7IEFSNUtfQkVBQ09OXzUyMTEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0ZQX1BFUklPRF81MjExLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RJTUVSMF81MjExLAkweDAwMDAwMDMwIH0sCisJeyBBUjVLX1RJTUVSMV81MjExLAkweDAwMDdmZmZmIH0sCisJeyBBUjVLX1RJTUVSMl81MjExLAkweDAxZmZmZmZmIH0sCisJeyBBUjVLX1RJTUVSM181MjExLAkweDAwMDAwMDMxIH0sCisJeyBBUjVLX0NGUF9EVVJfNTIxMSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19SWF9GSUxURVJfNTIxMSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19ESUFHX1NXXzUyMTEsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQUREQUNfVEVTVCwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19ERUZBVUxUX0FOVEVOTkEsCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODA4MCwgMHgwMDAwMDAwMCB9LAotCS8qeyAweDgwNWMsIDB4ZmZmZmM3ZmYgfSwqLyAvKiBPbGQgdmFsdWUgKi8KLQl7IDB4ODA1YywgMHgwMDBmYzc4ZiB9LAotCXsgQVI1S19OQVZfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBOb3QgZm91bmQgb24gcmVjZW50ICovCi0JeyBBUjVLX1JUU19PS181MjExLAkweDAwMDAwMDAwIH0sCS8qIGR1bXBzIGJ1dCBpdCBtYWtlcyAgKi8KLQl7IEFSNUtfUlRTX0ZBSUxfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBzZW5zZSB0byByZXNldCBjb3VudGVycyAqLwotCXsgQVI1S19BQ0tfRkFJTF81MjExLAkweDAwMDAwMDAwIH0sCS8qIHNpbmNlIHBjdSByZWdpc3RlcnMgKi8KLQl7IEFSNUtfRkNTX0ZBSUxfNTIxMSwJMHgwMDAwMDAwMCB9LAkvKiBhcmUgc2tpcGVkIGR1cmluZyBjaGFuKi8KLQl7IEFSNUtfQkVBQ09OX0NOVF81MjExLCAweDAwMDAwMDAwIH0sCS8qIGNoYW5nZSAqLworCXsgQVI1S19GUkFNRV9DVExfUU9TTSwgCTB4MDAwZmM3OGYgfSwKIAl7IEFSNUtfWFJNT0RFLAkJMHgyYTgyMzAxYSB9LAogCXsgQVI1S19YUkRFTEFZLAkJMHgwNWRjMDFlMCB9LAogCXsgQVI1S19YUlRJTUVPVVQsCTB4MWY0MDI3MTAgfSwKIAl7IEFSNUtfWFJDSElSUCwJCTB4MDFmNDAwMDAgfSwKIAl7IEFSNUtfWFJTVE9NUCwJCTB4MDAwMDFlMWMgfSwKLQl7IEFSNUtfU0xFRVAwLAkJMHgwMDAyYWFhYSB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1NMRUVQMSwJCTB4MDIwMDU1NTUgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19TTEVFUDIsCQkweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KKwl7IEFSNUtfU0xFRVAwLAkJMHgwMDAyYWFhYSB9LAorCXsgQVI1S19TTEVFUDEsCQkweDAyMDA1NTU1IH0sCisJeyBBUjVLX1NMRUVQMiwJCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfQlNTX0lETTAsCTB4ZmZmZmZmZmYgfSwKIAl7IEFSNUtfQlNTX0lETTEsCTB4MDAwMGZmZmYgfSwKIAl7IEFSNUtfVFhQQywJCTB4MDAwMDAwMDAgfSwKQEAgLTU3Nyw3ICs1NjksOCBAQAogCXsgQVI1S19QUk9GQ05UX1JYLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BST0ZDTlRfUlhDTFIsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUFJPRkNOVF9DWUNMRSwJMHgwMDAwMDAwMCB9LAotCXsgMHg4MGZjLCAweDAwMDAwMDg4IH0sCisJeyBBUjVLX1FVSUVUX0NUTDEsCTB4MDAwMDAwODggfSwKKwkvKiBJbml0aWFsIHJhdGUgZHVyYXRpb24gdGFibGUgKDMyIGVudHJpZXMgKSovCiAJeyBBUjVLX1JBVEVfRFVSKDApLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDEpLAkweDAwMDAwMDhjIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDIpLAkweDAwMDAwMGU0IH0sCkBAIC02MTAsODgxICs2MDMsNjI1IEBACiAJeyBBUjVLX1JBVEVfRFVSKDI5KSwJMHgwMDAwMDA3ZiB9LAogCXsgQVI1S19SQVRFX0RVUigzMCksCTB4MDAwMDAwYTIgfSwKIAl7IEFSNUtfUkFURV9EVVIoMzEpLAkweDAwMDAwMDAwIH0sCi0JeyAweDgxMDAsIDB4MDAwMTAwMDJ9LAorCXsgQVI1S19RVUlFVF9DVEwyLAkweDAwMDEwMDAyIH0sCiAJeyBBUjVLX1RTRl9QQVJNLAkweDAwMDAwMDAxIH0sCi0JeyAweDgxMDgsIDB4MDAwMDAwYzAgfSwKKwl7IEFSNUtfUU9TX05PQUNLLAkweDAwMDAwMGMwIH0sCiAJeyBBUjVLX1BIWV9FUlJfRklMLAkweDAwMDAwMDAwIH0sCi0JeyAweDgxMTAsIDB4MDAwMDAxNjggfSwKLQl7IDB4ODExNCwgMHgwMDAwMDAwMCB9LAotCS8qIFNvbWUga2luZCBvZiB0YWJsZQotCSAqIGFsc28gbm90aWNlIC4uLjAzPC0wMjwtMDE8LTAwKSAqLwotCXsgMHg4N2MwLCAweDAzMDIwMTAwIH0sCi0JeyAweDg3YzQsIDB4MDcwNjA1MDQgfSwKLQl7IDB4ODdjOCwgMHgwYjBhMDkwOCB9LAotCXsgMHg4N2NjLCAweDBmMGUwZDBjIH0sCi0JeyAweDg3ZDAsIDB4MTMxMjExMTAgfSwKLQl7IDB4ODdkNCwgMHgxNzE2MTUxNCB9LAotCXsgMHg4N2Q4LCAweDFiMWExOTE4IH0sCi0JeyAweDg3ZGMsIDB4MWYxZTFkMWMgfSwKLQkvKiBsb29wID8gKi8KLQl7IDB4ODdlMCwgMHgwMzAyMDEwMCB9LAotCXsgMHg4N2U0LCAweDA3MDYwNTA0IH0sCi0JeyAweDg3ZTgsIDB4MGIwYTA5MDggfSwKLQl7IDB4ODdlYywgMHgwZjBlMGQwYyB9LAotCXsgMHg4N2YwLCAweDEzMTIxMTEwIH0sCi0JeyAweDg3ZjQsIDB4MTcxNjE1MTQgfSwKLQl7IDB4ODdmOCwgMHgxYjFhMTkxOCB9LAotCXsgMHg4N2ZjLCAweDFmMWUxZDFjIH0sCi0JLyogUEhZIHJlZ2lzdGVycyAqLwotCS8qeyBBUjVLX1BIWV9BR0MsIDB4MDAwMDAwMDAgfSwqLwotCXsgQVI1S19QSFkoMyksCTB4YWQ4NDhlMTkgfSwKLQl7IEFSNUtfUEhZKDQpLAkweDdkMjhlMDAwIH0sCi0JeyBBUjVLX1BIWV9USU1JTkdfMywgMHg5YzBhOWY2YiB9LAotCXsgQVI1S19QSFlfQUNULAkweDAwMDAwMDAwIH0sCi0JLyp7IEFSNUtfUEhZKDExKSwgMHgwMDAyMmZmZSB9LCovCi0JLyp7IEFSNUtfUEhZKDE1KSwgMHgwMDAyMDEwMCB9LCovCi0JeyBBUjVLX1BIWSgxNiksCTB4MjA2YTAxN2EgfSwKLQkvKnsgQVI1S19QSFkoMTkpLCAweDEyODQ2MTNjIH0sKi8KLQl7IEFSNUtfUEhZKDIxKSwJMHgwMDAwMDg1OSB9LAotCXsgQVI1S19QSFkoNjQpLAkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2NSksCTB4MDAwMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY2KSwJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19QSFkoNjcpLAkweDAwODAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2OCksCTB4MDAwMDAwMDEgfSwKKwl7IEFSNUtfWFJMQVRfVFgsCTB4MDAwMDAxNjggfSwKKwl7IEFSNUtfQUNLU0lGUywJCTB4MDAwMDAwMDAgfSwKKwkvKiBSYXRlIC0+IGRiIHRhYmxlCisJICogbm90aWNlIC4uLjAzPC0wMjwtMDE8LTAwICEgKi8KKwl7IEFSNUtfUkFURTJEQigwKSwJMHgwMzAyMDEwMCB9LAorCXsgQVI1S19SQVRFMkRCKDEpLAkweDA3MDYwNTA0IH0sCisJeyBBUjVLX1JBVEUyREIoMiksCTB4MGIwYTA5MDggfSwKKwl7IEFSNUtfUkFURTJEQigzKSwJMHgwZjBlMGQwYyB9LAorCXsgQVI1S19SQVRFMkRCKDQpLAkweDEzMTIxMTEwIH0sCisJeyBBUjVLX1JBVEUyREIoNSksCTB4MTcxNjE1MTQgfSwKKwl7IEFSNUtfUkFURTJEQig2KSwJMHgxYjFhMTkxOCB9LAorCXsgQVI1S19SQVRFMkRCKDcpLAkweDFmMWUxZDFjIH0sCisJLyogRGIgLT4gUmF0ZSB0YWJsZSAqLworCXsgQVI1S19EQjJSQVRFKDApLAkweDAzMDIwMTAwIH0sCisJeyBBUjVLX0RCMlJBVEUoMSksCTB4MDcwNjA1MDQgfSwKKwl7IEFSNUtfREIyUkFURSgyKSwJMHgwYjBhMDkwOCB9LAorCXsgQVI1S19EQjJSQVRFKDMpLAkweDBmMGUwZDBjIH0sCisJeyBBUjVLX0RCMlJBVEUoNCksCTB4MTMxMjExMTAgfSwKKwl7IEFSNUtfREIyUkFURSg1KSwJMHgxNzE2MTUxNCB9LAorCXsgQVI1S19EQjJSQVRFKDYpLAkweDFiMWExOTE4IH0sCisJeyBBUjVLX0RCMlJBVEUoNyksCTB4MWYxZTFkMWMgfSwKKwkvKiBQSFkgcmVnaXN0ZXJzIChDb21tb24gc2V0dGluZ3MKKwkgKiBmb3IgYWxsIGNoaXBzL21vZGVzKSAqLworCXsgQVI1S19QSFkoMyksCQkweGFkODQ4ZTE5IH0sCisJeyBBUjVLX1BIWSg0KSwJCTB4N2QyOGUwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18zLAkweDljMGE5ZjZiIH0sCisJeyBBUjVLX1BIWV9BQ1QsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWSgxNiksCQkweDIwNmEwMTdhIH0sCisJeyBBUjVLX1BIWSgyMSksCQkweDAwMDAwODU5IH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS18xLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS18yLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS18zLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9CSU5fTUFTS19DVEwsIDB4MDA4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FOVF9DVEwsCTB4MDAwMDAwMDEgfSwKIAkvKnsgQVI1S19QSFkoNzEpLCAweDAwMDAwOTJhIH0sKi8gLyogT2xkIHZhbHVlICovCi0JeyBBUjVLX1BIWSg3MSksCTB4MDAwMDBjODAgfSwKLQl7IEFSNUtfUEhZX0lRLAkweDA1MTAwMDAwIH0sCi0JeyBBUjVLX1BIWSg3NCksIDB4MDAwMDAwMDEgfSwKLQl7IEFSNUtfUEhZKDc1KSwgMHgwMDAwMDAwNCB9LAorCXsgQVI1S19QSFlfTUFYX1JYX0xFTiwJMHgwMDAwMGM4MCB9LAorCXsgQVI1S19QSFlfSVEsCQkweDA1MTAwMDAwIH0sCisJeyBBUjVLX1BIWV9XQVJNX1JFU0VULAkweDAwMDAwMDAxIH0sCisJeyBBUjVLX1BIWV9DVEwsCQkweDAwMDAwMDA0IH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUxLCAweDFlMWYyMDIyIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUyLCAweDBhMGIwYzBkIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEVfTUFYLCAweDAwMDAwMDNmIH0sCi0JLyp7IEFSNUtfUEhZKDgwKSwgMHgwMDAwMDAwNCB9LCovCi0JeyBBUjVLX1BIWSg4MiksIDB4OTI4MGIyMTIgfSwKLQl7IEFSNUtfUEhZX1JBREFSLCAweDVkNTBlMTg4IH0sCisJeyBBUjVLX1BIWSg4MiksCQkweDkyODBiMjEyIH0sCisJeyBBUjVLX1BIWV9SQURBUiwJMHg1ZDUwZTE4OCB9LAogCS8qeyBBUjVLX1BIWSg4NiksIDB4MDAwMDAwZmYgfSwqLwotCXsgQVI1S19QSFkoODcpLCAweDAwNGI2YThlIH0sCi0JeyBBUjVLX1BIWSg5MCksCTB4MDAwMDAzY2UgfSwKLQl7IEFSNUtfUEhZKDkyKSwJMHgxOTJmYjUxNSB9LAotCS8qeyBBUjVLX1BIWSg5MyksIDB4MDAwMDAwMDAgfSwqLwotCXsgQVI1S19QSFkoOTQpLAkweDAwMDAwMDAxIH0sCi0JeyBBUjVLX1BIWSg5NSksCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZKDg3KSwJCTB4MDA0YjZhOGUgfSwKKwl7IEFSNUtfUEhZX05GVEhSRVMsCTB4MDAwMDAzY2UgfSwKKwl7IEFSNUtfUEhZX1JFU1RBUlQsCTB4MTkyZmI1MTUgfSwKKwl7IEFSNUtfUEhZKDk0KSwJCTB4MDAwMDAwMDEgfSwKKwl7IEFSNUtfUEhZX1JGQlVTX1JFUSwJMHgwMDAwMDAwMCB9LAogCS8qeyBBUjVLX1BIWSg2NDQpLCAweDAwODBhMzMzIH0sKi8gLyogT2xkIHZhbHVlICovCiAJLyp7IEFSNUtfUEhZKDY0NSksIDB4MDAyMDZjMTAgfSwqLyAvKiBPbGQgdmFsdWUgKi8KLQl7IEFSNUtfUEhZKDY0NCksIDB4MDA4MDYzMzMgfSwKLQl7IEFSNUtfUEhZKDY0NSksIDB4MDAxMDZjMTAgfSwKLQl7IEFSNUtfUEhZKDY0NiksIDB4MDA5YzQwNjAgfSwKLQl7IEFSNUtfUEhZKDY0NyksIDB4MTQ4MzgwMGEgfSwKLQkvKiB7IEFSNUtfUEhZKDY0OCksIDB4MDE4ODMwYzYgfSwqLyAvKiAyNDEzLzI0MjUgKi8KLQl7IEFSNUtfUEhZKDY0OCksIDB4MDE4MzEwNjEgfSwKLQl7IEFSNUtfUEhZKDY0OSksIDB4MDAwMDA0MDAgfSwKKwl7IEFSNUtfUEhZKDY0NCksCTB4MDA4MDYzMzMgfSwKKwl7IEFSNUtfUEhZKDY0NSksCTB4MDAxMDZjMTAgfSwKKwl7IEFSNUtfUEhZKDY0NiksCTB4MDA5YzQwNjAgfSwKKwkvKiB7IEFSNUtfUEhZKDY0NyksIDB4MTQ4MzgwMGEgfSwgKi8KKwkvKiB7IEFSNUtfUEhZKDY0OCksIDB4MDE4MzEwNjEgfSwgKi8gLyogT2xkIHZhbHVlICovCisJeyBBUjVLX1BIWSg2NDgpLAkweDAxODgzMGM2IH0sCisJeyBBUjVLX1BIWSg2NDkpLAkweDAwMDAwNDAwIH0sCiAJLyp7IEFSNUtfUEhZKDY1MCksIDB4MDAwMDAxYjUgfSwqLwotCXsgQVI1S19QSFkoNjUxKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFkoNjUxKSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMywgMHgyMDIwMjAyMCB9LAogCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMiwgMHgyMDIwMjAyMCB9LAogCS8qeyBBUjVLX1BIWSg2NTUpLCAweDEzYzg4OWFmIH0sKi8KLQl7IEFSNUtfUEhZKDY1NiksIDB4Mzg0OTBhMjAgfSwKLQl7IEFSNUtfUEhZKDY1NyksIDB4MDAwMDdiYjYgfSwKLQl7IEFSNUtfUEhZKDY1OCksIDB4MGZmZjNmZmMgfSwKLQkvKnsgQVI1S19QSFlfQ0NLVFhDVEwsIDB4MDAwMDAwMDAgfSwqLworCXsgQVI1S19QSFkoNjU2KSwJMHgzODQ5MGEyMCB9LAorCXsgQVI1S19QSFkoNjU3KSwJMHgwMDAwN2JiNiB9LAorCXsgQVI1S19QSFkoNjU4KSwJMHgwZmZmM2ZmYyB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTIgKFdyaXR0ZW4gYmVmb3JlIGFyNTIxMl9pbmkpICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIGFyNTIxMl9pbmlfbW9kZV9zdGFydFtdID0gewotCXsgQVI1S19QSFkoNjQwKSwKLQkvKgkgIGEvWFIJICAgICAgYVR1cmJvCSAgYgkgICAgICBnIChEWU4pCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSgwKSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygwKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygyKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDMpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg1KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDYpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg4KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDkpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NJRlMsCi0JCXsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9IH0sCisJICAgeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0xPVCwKLQkJeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0gfSwKKwkgICB7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19FSUZTLAotCQl7IDB4MDAwMDBlNjAsIDB4MDAwMDExODAsIDB4MDAwMDFmMWMsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSB9LAorCSAgIHsgMHgwMDAwMGU2MCwgMHgwMDAwMTE4MCwgMHgwMDAwMWYxYywgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX01JU0MsCi0JCXsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCwgMHgwMDAwYjBlMCwgMHgwMDAxNDA2OCB9IH0sCisJICAgeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwLCAweDAwMDBiMGUwLCAweDAwMDE0MDY4IH0gfSwKIAl7IEFSNUtfVElNRV9PVVQsCi0JCXsgMHgwM2U4MDNlOCwgMHgwNmUwMDZlMCwgMHgwNDIwMDQyMCwgMHgwODQwMDg0MCwgMHgwNmUwMDZlMCB9IH0sCisJICAgeyAweDAzZTgwM2U4LCAweDA2ZTAwNmUwLCAweDA0MjAwNDIwLCAweDA4NDAwODQwLCAweDA2ZTAwNmUwIH0gfSwKIAl7IEFSNUtfUEhZX1RVUkJPLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9IH0sCiAJeyBBUjVLX1BIWSg4KSwKLQkJeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0gfSwKLQl7IEFSNUtfUEhZKDkpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTcpLAotCQl7IDB4MTM3MjE2MWMsIDB4MTM3MjFjMjUsIDB4MTM3MjE3MjIsIDB4MTM3MjE2YTIsIDB4MTM3MjFjMjUgfSB9LAorCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwyLAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9TRVRUTElORywKKwkgICB7IDB4MTM3MjE2MWMsIDB4MTM3MjFjMjUsIDB4MTM3MjE3MjIsIDB4MTM3MjE2YTIsIDB4MTM3MjFjMjUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ1RMLAotCQl7IDB4MDAwMDlkMTAsIDB4MDAwMDlkMTAsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTggfSB9LAorCSAgIHsgMHgwMDAwOWQxMCwgMHgwMDAwOWQxMCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCB9IH0sCiAJeyBBUjVLX1BIWV9ORiwKLQkJeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKLQl7IEFSNUtfUEhZKDI2KSwKLQkJeyAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwIH0gfSwKKwkgICB7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0hJR0hfVEhSLAorCSAgIHsgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCB9IH0sCiAJeyBBUjVLX1BIWSg3MCksCi0JCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDA4NCwgMHgwMDAwMDEwOCwgMHgwMDAwMDFiOCB9IH0sCi0JeyBBUjVLX1BIWSg3MyksCi0JCXsgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSwgMHgxMDA1OGEwNSB9IH0sCisJICAgeyAweDAwMDAwMWI4LCAweDAwMDAwMWI4LCAweDAwMDAwMDg0LCAweDAwMDAwMTA4LCAweDAwMDAwMWI4IH0gfSwKKwl7IEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsCisJICAgeyAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1IH0gfSwKIAl7IDB4YTIzMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTIgKyBSRjUxMTEgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIE5ldyBkdW1wIHBlbmRpbmcgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjEyX3JmNTExMV9pbmlfbW9kZV9lbmRbXSA9IHsKLQl7IEFSNUtfUEhZKDY0MCksIC8qIFRoaXMgb25lIGRpZmZlcnMgZnJvbSBhcjUyMTJfaW5pX21vZGVfc3RhcnQgISAqLwotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcgKERZTikJICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDA2LCAweDAwMDAwMDA2IH0gfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmY1MTExX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkJeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyOGQ4ZmE3LCAweDA5ODgwZmNmLCAweDA0ZTAwZjk1LCAweDEyZTAwZmFiLCAweDA5ODgwZmNmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDEwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThkYTVhLCAweDAwMThkYTVhLCAweDAwMThjYTY5LCAweDAwMThjYTY5LCAweDAwMThjYTY5IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKKwkgICB7IDB4MTI4ZDhmYTcsIDB4MDk4ODBmY2YsIDB4MDRlMDBmOTUsIDB4MTJlMDBmYWIsIDB4MDk4ODBmY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZGE1YSwgMHgwMDE4ZGE1YSwgMHgwMDE4Y2E2OSwgMHgwMDE4Y2E2OSwgMHgwMDE4Y2E2OSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTg0ZDJlLCAweDdlZTg0ZDJlLCAweDdlODAwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODRkMmUsIDB4N2VlODRkMmUsIDB4N2U4MDBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzYxNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODAsIDB4MDUwY2IwODAgfSB9LAorCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjE1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODAsIDB4MDUwY2IwODAgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YywgMHgwMDAwMmFmOCwgMHgwMDAwMjcxMCB9IH0sCisJICAgeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyYWY4LCAweDAwMDAyNzEwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAgfSB9LAorCSAgIHsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHg2NDJjNDE2YSwgMHg2NDJjNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjIH0gfSwKLQl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCi0JCXsgMHgwMDAwNDg4MywgMHgwMDAwNDg4MywgMHgwMDAwNDg4MywgMHgwMDAwNDg4MywgMHgwMDAwNDg4MyB9IH0sCi0JeyBBUjVLX1BIWSg4MCksCi0JCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWSg5MyksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4IH0gfSwKLQl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmIH0gfSwKKwkgICB7IDB4NjQyYzQxNmEsIDB4NjQyYzQxNmEsIDB4NjQ0MDQxNmEsIDB4NjQ0MDQxNmEsIDB4NjQ0MDQxNmEgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTFfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLCAJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwgCTB4MDAwMjJmZmUgfSwKKwl7IDB4OTgzYywgCQkweDAwMDIwMTAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwJMHgxMjg0NjEzYyB9LAorCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwJMHgwMDAwNDg4MyB9LAorCXsgMHg5OTQwLAkJMHgwMDAwMDAwNCB9LAorCXsgMHg5OTU4LAkJMHgwMDAwMDBmZiB9LAorCXsgMHg5OTc0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfU1BFTkRJTkcsCTB4MDAwMDAwMTggfSwKKwl7IEFSNUtfUEhZX0NDS1RYQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLCAweGQwM2U2Nzg4IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDFiNSB9LAorCXsgMHhhMjNjLAkJMHgxM2M4ODlhZiB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBBUjUyMTIgKyBSRjUxMTIgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIGJ1dCBpIGZvdW5kIHNldHRpbmdzIGZyb20gb2xkIHZhbHVlcyBzbyBpdCBzaG91bGQgYmUgb2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjEyX3JmNTExMl9pbmlfbW9kZV9lbmRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmY1MTEyX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgIGEvWFIJICAgICAgYVR1cmJvCSAgYgkgICAgICBnIChEWU4pCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGRhNmQsIDB4MDAxOGRhNmQsIDB4MDAxOGNhNzUsIDB4MDAxOGNhNzUsIDB4MDAxOGNhNzUgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWU4MGQyZSB9IH0sCisJICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDEwLCAweGY3YjgxMDEwLCAweGY3YjgxMDEwIH0gfSwKKwkgICB7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMTAsIDB4ZjdiODEwMTAsIDB4ZjdiODEwMTAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHg2NDJjMDE0MCwgMHg2NDJjMDE0MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlLCAweDAwMDIyZmZlIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwLCAweDAwMDIwMTAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjLCAweDEyODQ2MTNjIH0gfSwKLQl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCi0JCXsgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiwgMHgwMDAwNDg4MiB9IH0sCi0JeyBBUjVLX1BIWSg4MCksCi0JCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWSg5MyksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiB9IH0sCisJICAgeyAweDY0MmMwMTQwLCAweDY0MmMwMTQwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1MTEyX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMjJmZmUgfSwKKwl7IDB4OTgzYywJCTB4MDAwMjAxMDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULAkweDEyODQ2MTNjIH0sCisJeyBBUjVLX1BIWV9QQVBEX1BST0JFLAkweDAwMDA0ODgyIH0sCisJeyAweDk5NDAsCQkweDAwMDAwMDA0IH0sCisJeyAweDk5NTgsCQkweDAwMDAwMGZmIH0sCisJeyAweDk5NzQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDFiNSB9LAorCXsgMHhhMjNjLAkJMHgxM2M4ODlhZiB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBSRjU0MTMvNTQxNCAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgc28gdHVyYm9nIGlzIHRoZSBzYW1lIHdpdGggZyBoZXJlIHdpdGggc29tZQotICogbWlub3IgdHdlYWtpbmcgYmFzZWQgb24gZHVtcHMgZnJvbSBvdGhlciBjaGlwcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjU0MTNfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcJCSAgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4ZmE2MSwgMHgwMDE4ZmE2MSwgMHgwMDFhMWE2MywgMHgwMDFhMWE2MywgMHgwMDFhMWE2MyB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfR0FJTiwKKwkgICB7IDB4MDAxOGZhNjEsIDB4MDAxOGZhNjEsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMgfSB9LAorCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCSAgIHsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JCXsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCisJICAgeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NPQVJTRSwKLQkJeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKLQl7IEFSNUtfUEhZKDI3KSwKLQkJeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAorCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAorCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkJeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwkgICB7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JCXsgMHgwMDJlYzFlMCwgMHgwMDJlYzFlMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCwgMHgwMDJhYzEyMCB9IH0sCi0JeyAweGEyMWMsCi0JCXsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCisJICAgeyAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAogCXsgMHhhMzAwLAotCQl7IDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSB9LAorCSAgIHsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCiAJeyAweGEzMDQsCi0JCXsgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiB9IH0sCisJICAgeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKIAl7IDB4YTMwOCwKLQkJeyAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2IH0gfSwKKwkgICB7IDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYgfSB9LAogCXsgMHhhMzBjLAotCQl7IDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEgfSB9LAorCSAgIHsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCiAJeyAweGEzMTAsCi0JCXsgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiB9IH0sCisJICAgeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKIAl7IDB4YTMxNCwKLQkJeyAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiIH0gfSwKKwkgICB7IDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIgfSB9LAogCXsgMHhhMzE4LAotCQl7IDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEgfSB9LAorCSAgIHsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCiAJeyAweGEzMWMsCi0JCXsgMHg5MGNmODY1YiwgMHg5MGNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiB9IH0sCisJICAgeyAweDkwY2Y4NjViLCAweDkwY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKIAl7IDB4YTMyMCwKLQkJeyAweDlkNGY5NzBmLCAweDlkNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmIH0gfSwKKwkgICB7IDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYgfSB9LAogCXsgMHhhMzI0LAotCQl7IDB4YTdjZmEzOGYsIDB4YTdjZmEzOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYgfSB9LAorCSAgIHsgMHhhN2NmYTM4ZiwgMHhhN2NmYTM4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiB9IH0sCiAJeyAweGEzMjgsCi0JCXsgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiwgMHhiMzVmYWYxZiwgMHhiMzVmYWYxZiwgMHhiMzVmYWYxZiB9IH0sCisJICAgeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmIH0gfSwKIAl7IDB4YTMyYywKLQkJeyAweGJkZGZiOTlmLCAweGJkZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmIH0gfSwKKwkgICB7IDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYgfSB9LAogCXsgMHhhMzMwLAotCQl7IDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YgfSB9LAorCSAgIHsgMHhjYjdmYzUzZiwgMHhjYjdmYzUzZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiB9IH0sCiAJeyAweGEzMzQsCi0JCXsgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiB9IH0sCi0JeyBBUjVLX0RDVV9GUCwKLQkJeyAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwLCAweDAwMDAwM2UwIH0gfSwKLQl7IDB4NDA2OCwKLQkJeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKLQl7IDB4ODA2MCwKLQkJeyAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmLCAweDAwMDAwMDBmIH0gfSwKLQl7IDB4ODA5YywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODBhMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODExYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEyYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzMCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzNCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODEzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4ODE0MCwKLQkJeyAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5LCAweDgwMDAwM2Y5IH0gfSwKLQl7IDB4ODE0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX0FHQywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDExKSwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE1KSwKLQkJeyAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwIH0gfSwKLQl7IEFSNUtfUEhZKDE5KSwKLQkJeyAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjIH0gfSwKLQl7IEFSNUtfUEhZX1NDUiwKLQkJeyAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmLCAweDAwMDAwMDFmIH0gfSwKLQl7IEFSNUtfUEhZX1NMTVQsCi0JCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1BIWV9TQ0FMLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19QSFkoODYpLAotCQl7IDB4MDAwODFmZmYsIDB4MDAwODFmZmYsIDB4MDAwODFmZmYsIDB4MDAwODFmZmYsIDB4MDAwODFmZmYgfSB9LAotCXsgQVI1S19QSFkoOTYpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoOTcpLAotCQl7IDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAsIDB4MDI4MDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTA0KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjEpLAotCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAotCXsgQVI1S19QSFkoMTIyKSwKLQkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMyksCi0JCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCi0JeyBBUjVLX1BIWV9TQ0xPQ0ssCi0JCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCi0JeyBBUjVLX1BIWV9TREVMQVksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmLCAweDkzYzg4OWFmIH0gfSwKLQl7IDB4YTI0YywKLQkJeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKLQl7IDB4YTI1MCwKLQkJeyAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwIH0gfSwKLQl7IDB4YTI1NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI1OCwKLQkJeyAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwLCAweDBjYzc1MzgwIH0gfSwKLQl7IDB4YTI1YywKLQkJeyAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxIH0gfSwKLQl7IDB4YTI2MCwKLQkJeyAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxLCAweDVmNjkwZjAxIH0gfSwKLQl7IDB4YTI2NCwKLQkJeyAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExLCAweDAwNDE4YTExIH0gfSwKLQl7IDB4YTI2OCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTI2YywKLQkJeyAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhLCAweDBjMzBjMTZhIH0gfSwKLQl7IDB4YTI3MCwKLQkJeyAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwIH0gfSwKLQl7IDB4YTI3NCwKLQkJeyAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhLCAweDA4MWI3Y2FhIH0gfSwKLQl7IDB4YTI3OCwKLQkJeyAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0gfSwKLQl7IDB4YTI3YywKLQkJeyAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlIH0gfSwKLQl7IDB4YTMzOCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTMzYywKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0MCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0NCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTM0OCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM0YywKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1MCwKLQkJeyAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmIH0gfSwKLQl7IDB4YTM1NCwKLQkJeyAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmLCAweDAwMDNmZmZmIH0gfSwKLQl7IDB4YTM1OCwKLQkJeyAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmIH0gfSwKLQl7IDB4YTM1YywKLQkJeyAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmIH0gfSwKLQl7IDB4YTM2MCwKLQkJeyAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3IH0gfSwKLQl7IDB4YTM2NCwKLQkJeyAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1IH0gfSwKLQl7IDB4YTM2OCwKLQkJeyAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0IH0gfSwKLQl7IDB4YTM2YywKLQkJeyAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzIH0gfSwKLQl7IDB4YTM3MCwKLQkJeyAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzIH0gfSwKLQl7IDB4YTM3NCwKLQkJeyAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzIH0gfSwKLQl7IDB4YTM3OCwKLQkJeyAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyIH0gfSwKLQl7IDB4YTM3YywKLQkJeyAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyIH0gfSwKLQl7IDB4YTM4MCwKLQkJeyAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhIH0gfSwKLQl7IDB4YTM4NCwKLQkJeyAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwIH0gfSwKKwkgICB7IDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1NDEzX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAzZTAgfSwKKwl7IEFSNUtfNTQxNF9DQkNGRywJMHgwMDAwMDAxMCB9LAorCXsgQVI1S19TRVFfTUFTSywJMHgwMDAwMDAwZiB9LAorCXsgMHg4MDljLAkJMHgwMDAwMDAwMCB9LAorCXsgMHg4MGEwLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX0NUTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX1NFTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSVNDX01PREUsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfT0ZETV9GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX0NDS19GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDJfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19UU0ZfVEhSRVMsCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODE0MCwJCTB4ODAwMDAzZjkgfSwKKwl7IDB4ODE0NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMGEwMDAgfSwKKwl7IDB4OTgzYywJCTB4MDAyMDA0MDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULCAweDEyODQyMzNjIH0sCisJeyBBUjVLX1BIWV9TQ1IsCQkweDAwMDAwMDFmIH0sCisJeyBBUjVLX1BIWV9TTE1ULAkweDAwMDAwMDgwIH0sCisJeyBBUjVLX1BIWV9TQ0FMLAkweDAwMDAwMDBlIH0sCisJeyAweDk5NTgsCQkweDAwMDgxZmZmIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfNywJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzgsCTB4MDI4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18xMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUsIDB4MDAwMDAwMDAgfSwKKwl7IDB4OTllNCwJCTB4YWFhYWFhYWEgfSwKKwl7IDB4OTllOCwJCTB4M2M0NjY0NzggfSwKKwl7IDB4OTllYywJCTB4MDAwMDAwYWEgfSwKKwl7IEFSNUtfUEhZX1NDTE9DSywJMHgwMDAwMDAwYyB9LAorCXsgQVI1S19QSFlfU0RFTEFZLAkweDAwMDAwMGZmIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxNCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsIDB4MDAwMDA5YjUgfSwKKwl7IDB4YTIzYywJCTB4OTNjODg5YWYgfSwKKwl7IEFSNUtfUEhZX0ZBU1RfQURDLAkweDAwMDAwMDAxIH0sCisJeyAweGEyNTAsCQkweDAwMDBhMDAwIH0sCisJeyBBUjVLX1BIWV9CTFVFVE9PVEgsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzEsCTB4MGNjNzUzODAgfSwKKwl7IDB4YTI1YywJCTB4MGYwZjBmMDEgfSwKKwl7IDB4YTI2MCwJCTB4NWY2OTBmMDEgfSwKKwl7IDB4YTI2NCwJCTB4MDA0MThhMTEgfSwKKwl7IDB4YTI2OCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzUsCTB4MGMzMGMxNmEgfSwKKwl7IDB4YTI3MCwgMHgwMDgyMDgyMCB9LAorCXsgMHhhMjc0LCAweDA4MWI3Y2FhIH0sCisJeyAweGEyNzgsIDB4MWNlNzM5Y2UgfSwKKwl7IDB4YTI3YywgMHgwNTE3MDFjZSB9LAorCXsgMHhhMzM4LCAweDAwMDAwMDAwIH0sCisJeyAweGEzM2MsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0MCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQ0LCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDgsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM0YywgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzUwLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTQsIDB4MDAwM2ZmZmYgfSwKKwl7IDB4YTM1OCwgMHg3OWE4YWExZiB9LAorCXsgMHhhMzVjLCAweDA2NmM0MjBmIH0sCisJeyAweGEzNjAsIDB4MGYyODIyMDcgfSwKKwl7IDB4YTM2NCwgMHgxNzYwMTY4NSB9LAorCXsgMHhhMzY4LCAweDFmODAxMTA0IH0sCisJeyAweGEzNmMsIDB4MzdhMDBjMDMgfSwKKwl7IDB4YTM3MCwgMHgzZmM0MDg4MyB9LAorCXsgMHhhMzc0LCAweDU3YzAwODAzIH0sCisJeyAweGEzNzgsIDB4NWZkODA2ODIgfSwKKwl7IDB4YTM3YywgMHg3ZmUwMDQ4MiB9LAorCXsgMHhhMzgwLCAweDdmM2M3YmJhIH0sCisJeyAweGEzODQsIDB4ZjMzMDdmZjAgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgUkYyNDEzLzI0MTQgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIHNvIHR1cmJvZyBpcyB0aGUgc2FtZSB3aXRoIGcgaGVyZSB3aXRoIHNvbWUKLSAqIG1pbm9yIHR3ZWFraW5nIGJhc2VkIG9uIGR1bXBzIGZyb20gb3RoZXIgY2hpcHMgKi8KKy8qIFhYWDogYSBtb2RlID8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmYyNDEzX2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgICAgICBiCQlnCSAgICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDA1MDIwMDAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMWE2YTY0LCAweDAwMWE2YTY0LCAweDAwMWE2YTY0IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBkZThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAwMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiMGRhLCAweDBjOThiMGRhLCAweDBkZThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlZTgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VjODBkMmUsIDB4N2U4MDBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzY2NWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjY1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAorCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDAwNDJjMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAotCXsgMHg4MDYwLAotCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAotCXsgMHg4MTE4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTFjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTIwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTJjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTQwLAotCQl7IDB4ODAwMDAwYTgsIDB4ODAwMDAwYTgsIDB4ODAwMDAwYTggfSB9LAotCXsgMHg4MTQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAotCXsgQVI1S19QSFlfU0NSLAotCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAotCXsgQVI1S19QSFlfU0xNVCwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUEhZX1NDQUwsCi0JCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWSg5NiksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg5NyksCi0JCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMDQpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIwKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMSksCi0JCXsgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSB9IH0sCi0JeyBBUjVLX1BIWSgxMjIpLAotCQl7IDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzggfSB9LAotCXsgQVI1S19QSFkoMTIzKSwKLQkJeyAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhIH0gfSwKLQl7IEFSNUtfUEhZX1NDTE9DSywKLQkJeyAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjIH0gfSwKLQl7IEFSNUtfUEhZX1NERUxBWSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAotCXsgMHhhMjRjLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgMHhhMjUwLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgMHhhMjU0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjU4LAotCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAotCXsgMHhhMjVjLAotCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAotCXsgMHhhMjYwLAotCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAotCXsgMHhhMjY0LAotCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAotCXsgMHhhMjY4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjZjLAotCQl7IDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEgfSB9LAotCXsgMHhhMjcwLAotCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAotCXsgMHhhMjc0LAotCQl7IDB4MDAxYjdjYWEsIDB4MDAxYjdjYWEsIDB4MDAxYjdjYWEgfSB9LAotCXsgMHhhMjc4LAotCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAotCXsgMHhhMjdjLAotCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAotCXsgMHhhMzAwLAotCQl7IDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSB9LAotCXsgMHhhMzA0LAotCQl7IDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIgfSB9LAotCXsgMHhhMzA4LAotCQl7IDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYgfSB9LAotCXsgMHhhMzBjLAotCQl7IDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEgfSB9LAotCXsgMHhhMzEwLAotCQl7IDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYgfSB9LAotCXsgMHhhMzE0LAotCQl7IDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIgfSB9LAotCXsgMHhhMzE4LAotCQl7IDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEgfSB9LAotCXsgMHhhMzFjLAotCQl7IDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIgfSB9LAotCXsgMHhhMzIwLAotCQl7IDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYgfSB9LAotCXsgMHhhMzI0LAotCQl7IDB4YTVjZmExOGYsIDB4YTVjZmExOGYsIDB4YTVjZmExOGYgfSB9LAotCXsgMHhhMzI4LAotCQl7IDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYgfSB9LAotCXsgMHhhMzJjLAotCQl7IDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYgfSB9LAotCXsgMHhhMzMwLAotCQl7IDB4Y2Q3ZmM3M2YsIDB4Y2Q3ZmM3M2YsIDB4Y2Q3ZmM3M2YgfSB9LAotCXsgMHhhMzM0LAotCQl7IDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYsIDB4ZDVmZmQxYmYgfSB9LAotCXsgMHhhMzM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ4LAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzRjLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzUwLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzU0LAotCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAotCXsgMHhhMzU4LAotCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAotCXsgMHhhMzVjLAotCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAotCXsgMHhhMzYwLAotCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAotCXsgMHhhMzY0LAotCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAotCXsgMHhhMzY4LAotCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAotCXsgMHhhMzZjLAotCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAotCXsgMHhhMzcwLAotCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAotCXsgMHhhMzc0LAotCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAotCXsgMHhhMzc4LAotCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAotCXsgMHhhMzdjLAotCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAotCXsgMHhhMzgwLAotCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAotCXsgMHhhMzg0LAotCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorCSAgIHsgMHgwMDJjMDE0MCwgMHgwMDJjMDE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmMjQxM19pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwM2UwIH0sCisJeyBBUjVLX1NFUV9NQVNLLAkweDAwMDAwMDBmIH0sCisJeyBBUjVLX01JQ19RT1NfQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfU0VMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JU0NfTU9ERSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19PRkRNX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0NLX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDFfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMl9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RTRl9USFJFUywJMHgwMDAwMDAwMCB9LAorCXsgMHg4MTQwLAkJMHg4MDAwMDBhOCB9LAorCXsgMHg4MTQ0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAwYTAwMCB9LAorCXsgMHg5ODNjLAkJMHgwMDIwMDQwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsCTB4MTI4NDIzM2MgfSwKKwl7IEFSNUtfUEhZX1NDUiwJCTB4MDAwMDAwMWYgfSwKKwl7IEFSNUtfUEhZX1NMTVQsCTB4MDAwMDAwODAgfSwKKwl7IEFSNUtfUEhZX1NDQUwsCTB4MDAwMDAwMGUgfSwKKwl7IDB4OTk1OCwJCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR183LAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfOCwJMHgwMjgwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzExLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9IRUFWWV9DTElQX0VOQUJMRSwgMHgwMDAwMDAwMCB9LAorCXsgMHg5OWU0LAkJMHhhYWFhYWFhYSB9LAorCXsgMHg5OWU4LAkJMHgzYzQ2NjQ3OCB9LAorCXsgMHg5OWVjLAkJMHgwMDAwMDBhYSB9LAorCXsgQVI1S19QSFlfU0NMT0NLLAkweDAwMDAwMDBjIH0sCisJeyBBUjVLX1BIWV9TREVMQVksCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE0IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDliNSB9LAorCXsgMHhhMjNjLAkJMHg5M2M4ODlhZiB9LAorCXsgQVI1S19QSFlfRkFTVF9BREMsCTB4MDAwMDAwMDEgfSwKKwl7IDB4YTI1MCwJCTB4MDAwMGEwMDAgfSwKKwl7IEFSNUtfUEhZX0JMVUVUT09USCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHMSwJMHgwY2M3NTM4MCB9LAorCXsgMHhhMjVjLAkJMHgwZjBmMGYwMSB9LAorCXsgMHhhMjYwLAkJMHg1ZjY5MGYwMSB9LAorCXsgMHhhMjY0LAkJMHgwMDQxOGExMSB9LAorCXsgMHhhMjY4LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHNSwJMHgwYzMwYzE2YSB9LAorCXsgMHhhMjcwLCAweDAwODIwODIwIH0sCisJeyAweGEyNzQsIDB4MDAxYjdjYWEgfSwKKwl7IDB4YTI3OCwgMHgxY2U3MzljZSB9LAorCXsgMHhhMjdjLCAweDA1MTcwMWNlIH0sCisJeyAweGEzMDAsIDB4MTgwMTAwMDAgfSwKKwl7IDB4YTMwNCwgMHgzMDAzMjYwMiB9LAorCXsgMHhhMzA4LCAweDQ4MDczZTA2IH0sCisJeyAweGEzMGMsIDB4NTYwYjRjMGEgfSwKKwl7IDB4YTMxMCwgMHg2NDFhNjAwZiB9LAorCXsgMHhhMzE0LCAweDc4NGY2ZTFiIH0sCisJeyAweGEzMTgsIDB4ODY4ZjdjNWEgfSwKKwl7IDB4YTMxYywgMHg4ZWNmODY1YiB9LAorCXsgMHhhMzIwLCAweDlkNGY5NzBmIH0sCisJeyAweGEzMjQsIDB4YTVjZmExOGYgfSwKKwl7IDB4YTMyOCwgMHhiNTVmYWYxZiB9LAorCXsgMHhhMzJjLCAweGJkZGZiOTlmIH0sCisJeyAweGEzMzAsIDB4Y2Q3ZmM3M2YgfSwKKwl7IDB4YTMzNCwgMHhkNWZmZDFiZiB9LAorCXsgMHhhMzM4LCAweDAwMDAwMDAwIH0sCisJeyAweGEzM2MsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0MCwgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQ0LCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDgsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM0YywgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzUwLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTQsIDB4MDAwM2ZmZmYgfSwKKwl7IDB4YTM1OCwgMHg3OWE4YWExZiB9LAorCXsgMHhhMzVjLCAweDA2NmM0MjBmIH0sCisJeyAweGEzNjAsIDB4MGYyODIyMDcgfSwKKwl7IDB4YTM2NCwgMHgxNzYwMTY4NSB9LAorCXsgMHhhMzY4LCAweDFmODAxMTA0IH0sCisJeyAweGEzNmMsIDB4MzdhMDBjMDMgfSwKKwl7IDB4YTM3MCwgMHgzZmM0MDg4MyB9LAorCXsgMHhhMzc0LCAweDU3YzAwODAzIH0sCisJeyAweGEzNzgsIDB4NWZkODA2ODIgfSwKKwl7IDB4YTM3YywgMHg3ZmUwMDQ4MiB9LAorCXsgMHhhMzgwLCAweDdmM2M3YmJhIH0sCisJeyAweGEzODQsIDB4ZjMzMDdmZjAgfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgUkYyNDI1IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCi0gKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCisvKiBYWFg6IGEgbW9kZSA/ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmMjQyNV9pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICAgICAgIGcJZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JCXsgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCisJICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKIAl7IEFSNUtfUEhZX1RVUkJPLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTcpLAotCQl7IDB4MTM3MjE0MjIsIDB4MTM3MjE0MjIgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOTlhNjUsIDB4MDAxOTlhNjUgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX1NFVFRMSU5HLAorCSAgIHsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTQyMiwgMHgxMzcyMWMyNSB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZmE2MSwgMHgwMDE4ZmE2MSwgMHgwMDE5OWE2NSwgMHgwMDE5OWE2NSwgMHgwMDE5OWE2NSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBjOThiNGUwLCAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwkgICB7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAorCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDAwNTJjMTQwLCAweDAwNTJjMTQwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKKwkgICB7IDB4MDAwMDAxNDAsIDB4MDAwMDAxNDAsIDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCiAJeyAweGEzMjQsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMyOCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzJjLAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMzAsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMzNCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAotCXsgMHg4MDYwLAotCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAotCXsgMHg4MDljLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MGEwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTE4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTFjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTIwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTJjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTQwLAotCQl7IDB4ODAwMDAzZjksIDB4ODAwMDAzZjkgfSB9LAotCXsgMHg4MTQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAotCXsgQVI1S19QSFlfU0NSLAotCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAotCXsgQVI1S19QSFlfU0xNVCwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUEhZX1NDQUwsCi0JCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiB9IH0sCi0JeyBBUjVLX1BIWSg5NiksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg5NyksCi0JCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMDQpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTE5KSwKLQkJeyAweGZlYmFkYmU4LCAweGZlYmFkYmU4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjEpLAotCQl7IDB4YWFhYWFhYWEsIDB4YWFhYWFhYWEgfSB9LAotCXsgQVI1S19QSFkoMTIyKSwKLQkJeyAweDNjNDY2NDc4LCAweDNjNDY2NDc4IH0gfSwKLQl7IEFSNUtfUEhZKDEyMyksCi0JCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSB9IH0sCi0JeyBBUjVLX1BIWV9TQ0xPQ0ssCi0JCXsgMHgwMDAwMDAwYywgMHgwMDAwMDAwYyB9IH0sCi0JeyBBUjVLX1BIWV9TREVMQVksCi0JCXsgMHgwMDAwMDBmZiwgMHgwMDAwMDBmZiB9IH0sCi0JeyBBUjVLX1BIWV9TUEVORElORywKLQkJeyAweDAwMDAwMDE0LCAweDAwMDAwMDE0IH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwOWI1LCAweDAwMDAwOWI1IH0gfSwKLQl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTMsCi0JCXsgMHgyMDIwMjAyMCwgMHgyMDIwMjAyMCB9IH0sCi0JeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEU0LAotCQl7IDB4MjAyMDIwMjAsIDB4MjAyMDIwMjAgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAotCXsgMHhhMjRjLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgMHhhMjUwLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgMHhhMjU0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjU4LAotCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAotCXsgMHhhMjVjLAotCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAotCXsgMHhhMjYwLAotCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAotCXsgMHhhMjY0LAotCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAotCXsgMHhhMjY4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjZjLAotCQl7IDB4MGMzMGMxNjYsIDB4MGMzMGMxNjYgfSB9LAotCXsgMHhhMjcwLAotCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAotCXsgMHhhMjc0LAotCQl7IDB4MDgxYTNjYWEsIDB4MDgxYTNjYWEgfSB9LAotCXsgMHhhMjc4LAotCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAotCXsgMHhhMjdjLAotCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAotCXsgMHhhMzAwLAotCQl7IDB4MTYwMTAwMDAsIDB4MTYwMTAwMDAgfSB9LAotCXsgMHhhMzA0LAotCQl7IDB4MmMwMzI0MDIsIDB4MmMwMzI0MDIgfSB9LAotCXsgMHhhMzA4LAotCQl7IDB4NDg0MzNlNDIsIDB4NDg0MzNlNDIgfSB9LAotCXsgMHhhMzBjLAotCQl7IDB4NWEwZjUwMGIsIDB4NWEwZjUwMGIgfSB9LAotCXsgMHhhMzEwLAotCQl7IDB4NmM0YjYyNGEsIDB4NmM0YjYyNGEgfSB9LAotCXsgMHhhMzE0LAotCQl7IDB4N2U4Yjc0OGEsIDB4N2U4Yjc0OGEgfSB9LAotCXsgMHhhMzE4LAotCQl7IDB4OTZjZjhjY2IsIDB4OTZjZjhjY2IgfSB9LAotCXsgMHhhMzFjLAotCQl7IDB4YTM0ZjlkMGYsIDB4YTM0ZjlkMGYgfSB9LAotCXsgMHhhMzIwLAotCQl7IDB4YTdjZmE1OGYsIDB4YTdjZmE1OGYgfSB9LAotCXsgMHhhMzQ4LAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzRjLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzUwLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzU0LAotCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAotCXsgMHhhMzU4LAotCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAotCXsgMHhhMzVjLAotCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAotCXsgMHhhMzYwLAotCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAotCXsgMHhhMzY0LAotCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAotCXsgMHhhMzY4LAotCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAotCXsgMHhhMzZjLAotCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAotCXsgMHhhMzcwLAotCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAotCXsgMHhhMzc0LAotCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAotCXsgMHhhMzc4LAotCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAotCXsgMHhhMzdjLAotCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAotCXsgMHhhMzgwLAotCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAotCXsgMHhhMzg0LAotCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjI0MjVfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDNlMCB9LAorCXsgQVI1S19TRVFfTUFTSywJMHgwMDAwMDAwZiB9LAorCXsgMHg4MDljLAkJMHgwMDAwMDAwMCB9LAorCXsgMHg4MGEwLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX0NUTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSUNfUU9TX1NFTCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19NSVNDX01PREUsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfT0ZETV9GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX0NDS19GSUxfQ05ULAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQxX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDJfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19UU0ZfVEhSRVMsCTB4MDAwMDAwMDAgfSwKKwl7IDB4ODE0MCwJCTB4ODAwMDAzZjkgfSwKKwl7IDB4ODE0NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FHQywJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0FEQ19DVEwsCTB4MDAwMGEwMDAgfSwKKwl7IDB4OTgzYywJCTB4MDAyMDA0MDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULCAweDEyODQyMzNjIH0sCisJeyBBUjVLX1BIWV9TQ1IsCQkweDAwMDAwMDFmIH0sCisJeyBBUjVLX1BIWV9TTE1ULAkweDAwMDAwMDgwIH0sCisJeyBBUjVLX1BIWV9TQ0FMLAkweDAwMDAwMDBlIH0sCisJeyAweDk5NTgsCQkweDAwMDgxZmZmIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfNywJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzgsCTB4MDI4MDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR18xMSwJMHgwMDAwMDAwMCB9LAorCXsgMHg5OWRjLAkJMHhmZWJhZGJlOCB9LAorCXsgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUsIDB4MDAwMDAwMDAgfSwKKwl7IDB4OTllNCwJCTB4YWFhYWFhYWEgfSwKKwl7IDB4OTllOCwJCTB4M2M0NjY0NzggfSwKKwl7IDB4OTllYywJCTB4MDAwMDAwYWEgfSwKKwl7IEFSNUtfUEhZX1NDTE9DSywJMHgwMDAwMDAwYyB9LAorCXsgQVI1S19QSFlfU0RFTEFZLAkweDAwMDAwMGZmIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxNCB9LAorCXsgQVI1S19QSFlfREFHX0NDS19DVEwsCTB4MDAwMDA5YjUgfSwKKwl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTMsIDB4MjAyMDIwMjAgfSwKKwl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTQsIDB4MjAyMDIwMjAgfSwKKwl7IDB4YTIzYywJCTB4OTNjODg5YWYgfSwKKwl7IEFSNUtfUEhZX0ZBU1RfQURDLAkweDAwMDAwMDAxIH0sCisJeyAweGEyNTAsCQkweDAwMDBhMDAwIH0sCisJeyBBUjVLX1BIWV9CTFVFVE9PVEgsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzEsCTB4MGNjNzUzODAgfSwKKwl7IDB4YTI1YywJCTB4MGYwZjBmMDEgfSwKKwl7IDB4YTI2MCwJCTB4NWY2OTBmMDEgfSwKKwl7IDB4YTI2NCwJCTB4MDA0MThhMTEgfSwKKwl7IDB4YTI2OCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RQQ19SRzUsCTB4MGMzMGMxNjYgfSwKKwl7IDB4YTI3MCwgMHgwMDgyMDgyMCB9LAorCXsgMHhhMjc0LCAweDA4MWEzY2FhIH0sCisJeyAweGEyNzgsIDB4MWNlNzM5Y2UgfSwKKwl7IDB4YTI3YywgMHgwNTE3MDFjZSB9LAorCXsgMHhhMzAwLCAweDE2MDEwMDAwIH0sCisJeyAweGEzMDQsIDB4MmMwMzI0MDIgfSwKKwl7IDB4YTMwOCwgMHg0ODQzM2U0MiB9LAorCXsgMHhhMzBjLCAweDVhMGY1MDBiIH0sCisJeyAweGEzMTAsIDB4NmM0YjYyNGEgfSwKKwl7IDB4YTMxNCwgMHg3ZThiNzQ4YSB9LAorCXsgMHhhMzE4LCAweDk2Y2Y4Y2NiIH0sCisJeyAweGEzMWMsIDB4YTM0ZjlkMGYgfSwKKwl7IDB4YTMyMCwgMHhhN2NmYTU4ZiB9LAorCXsgMHhhMzQ4LCAweDNmZmZmZmZmIH0sCisJeyAweGEzNGMsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1MCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzU0LCAweDAwMDNmZmZmIH0sCisJeyAweGEzNTgsIDB4NzlhOGFhMWYgfSwKKwl7IDB4YTM1YywgMHgwNjZjNDIwZiB9LAorCXsgMHhhMzYwLCAweDBmMjgyMjA3IH0sCisJeyAweGEzNjQsIDB4MTc2MDE2ODUgfSwKKwl7IDB4YTM2OCwgMHgxZjgwMTEwNCB9LAorCXsgMHhhMzZjLCAweDM3YTAwYzAzIH0sCisJeyAweGEzNzAsIDB4M2ZjNDA4ODMgfSwKKwl7IDB4YTM3NCwgMHg1N2MwMDgwMyB9LAorCXsgMHhhMzc4LCAweDVmZDgwNjgyIH0sCisJeyAweGEzN2MsIDB4N2ZlMDA0ODIgfSwKKwl7IDB4YTM4MCwgMHg3ZjNjN2JiYSB9LAorCXsgMHhhMzg0LCAweGYzMzA3ZmYwIH0sCiB9OwogCiAvKgpAQCAtMTU2MCw3ICsxMjk3LDcgQEAKIAl7IEFSNUtfQkJfR0FJTig2MyksIDB4MDAwMDAwMTYgfSwKIH07CiAKLS8qIFJGNTExMiBJbml0aWFsIEJhc2VCYW5kIEdhaW4gc2V0dGluZ3MgKFNhbWUgZm9yIFJGNTQxMy81NDE0KSAqLworLyogUkY1MTEyIEluaXRpYWwgQmFzZUJhbmQgR2FpbiBzZXR0aW5ncyAoU2FtZSBmb3IgUkY1NDEzLzU0MTQrKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1MTEyX2luaV9iYmdhaW5bXSA9IHsKIAl7IEFSNUtfQkJfR0FJTigwKSwgMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CQl9HQUlOKDEpLCAweDAwMDAwMDAxIH0sCkBAIC0xNjkxLDg3ICsxNDI4LDk3IEBACiAJCS8qCiAJCSAqIFdyaXRlIGluaXRpYWwgc2V0dGluZ3MgY29tbW9uIGZvciBhbGwgbW9kZXMKIAkJICovCi0JCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsIEFSUkFZX1NJWkUoYXI1MjEyX2luaSksCi0JCQkJCWFyNTIxMl9pbmksIGNoYW5nZV9jaGFubmVsKTsKKwkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwgQVJSQVlfU0laRShhcjUyMTJfaW5pX2NvbW1vbl9zdGFydCksCisJCQkJYXI1MjEyX2luaV9jb21tb25fc3RhcnQsIGNoYW5nZV9jaGFubmVsKTsKIAogCQkvKiBTZWNvbmQgc2V0IG9mIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgKi8KLQkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgeworCQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgeworCQljYXNlIEFSNUtfUkY1MTExOgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCi0JCQkJCUFSUkFZX1NJWkUoYXI1MjEyX3JmNTExMV9pbmlfbW9kZV9lbmQpLAotCQkJCQlhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZCwgbW9kZSk7CisJCQkJCUFSUkFZX1NJWkUocmY1MTExX2luaV9tb2RlX2VuZCksCisJCQkJCXJmNTExMV9pbmlfbW9kZV9lbmQsIG1vZGUpOworCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmNTExMV9pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmNTExMV9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOwogCiAJCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMV9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTExX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKIAotCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgeworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19SRjUxMTI6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKLQkJCQkJQVJSQVlfU0laRShhcjUyMTJfcmY1MTEyX2luaV9tb2RlX2VuZCksCi0JCQkJCWFyNTIxMl9yZjUxMTJfaW5pX21vZGVfZW5kLCBtb2RlKTsKKwkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX21vZGVfZW5kKSwKKwkJCQkJcmY1MTEyX2luaV9tb2RlX2VuZCwgbW9kZSk7CisKKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmY1MTEyX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CiAKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwogCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGNTQxMzoKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTQxM19pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjU0MTNfaW5pX21vZGVfZW5kLCBtb2RlKTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjU0MTNfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjU0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CiAKLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MTMpIHsKLQotCQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkJInVuc3VwcG9ydGVkIGNoYW5uZWwgbW9kZTogJWRcbiIsIG1vZGUpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJbW9kZSA9IG1vZGUgLSAyOwotCi0JCQkvKiBPdmVycmlkZSBhIHNldHRpbmcgZnJvbSBhcjUyMTJfaW5pICovCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDE4ODMwYzYsIEFSNUtfUEhZKDY0OCkpOworCQkJYnJlYWs7CisJCWNhc2UgQVI1S19SRjIzMTY6CisJCWNhc2UgQVI1S19SRjI0MTM6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX21vZGVfZW5kKSwKIAkJCQkJcmYyNDEzX2luaV9tb2RlX2VuZCwgbW9kZSk7CiAKLQkJCS8qIEJhc2ViYW5kIGdhaW4gdGFibGUgKi8KKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmYyNDEzX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmYyNDEzX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CisKKwkJCS8qIE92ZXJyaWRlIHNldHRpbmdzIGZyb20gcmYyNDEzX2luaV9jb21tb25fZW5kICovCisJCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyMzE2KSB7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDA0MDAwLAorCQkJCQkJCUFSNUtfUEhZX0FHQyk7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDA4MWI3Y2FhLAorCQkJCQkJCTB4YTI3NCk7CisJCQl9CisKIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTEyX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTJfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwotCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyNDI1KSB7Ci0KLQkJCWlmIChtb2RlIDwgMikgewotCQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCi0JCQkJCSJ1bnN1cHBvcnRlZCBjaGFubmVsIG1vZGU6ICVkXG4iLCBtb2RlKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJLyogTWFwIGIgdG8gZyAqLwotCQkJaWYgKG1vZGUgPT0gMikKLQkJCQltb2RlID0gMDsKLQkJCWVsc2UKLQkJCQltb2RlID0gbW9kZSAtIDM7Ci0KLQkJCS8qIE92ZXJyaWRlIGEgc2V0dGluZyBmcm9tIGFyNTIxMl9pbmkgKi8KLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMTg4MzBjNiwgQVI1S19QSFkoNjQ4KSk7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGMjMxNzoKKwkJY2FzZSBBUjVLX1JGMjQyNToKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmMjQyNV9pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjI0MjVfaW5pX21vZGVfZW5kLCBtb2RlKTsKIAotCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjI0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg2ZTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvbGVkLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBTYW0gTGVmZmxlciwgRXJybm8gQ29uc3VsdGluZworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQm9iIENvcGVsYW5kIDxtZUBib2Jjb3BlbGFuZC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93ICgiRGlzY2xhaW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAgICBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJTkdFTUVOVCwgTUVSQ0hBTlRJQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSAiYXRoNWsuaCIKKyNpbmNsdWRlICJiYXNlLmgiCisKKyNkZWZpbmUgQVRIX1NERVZJQ0Uoc3VidixzdWJkKSBcCisJLnZlbmRvciA9IFBDSV9BTllfSUQsIC5kZXZpY2UgPSBQQ0lfQU5ZX0lELCBcCisJLnN1YnZlbmRvciA9IChzdWJ2KSwgLnN1YmRldmljZSA9IChzdWJkKQorCisjZGVmaW5lIEFUSF9MRUQocGluLHBvbGFyaXR5KSAuZHJpdmVyX2RhdGEgPSAoKChwaW4pIDw8IDgpIHwgKHBvbGFyaXR5KSkKKyNkZWZpbmUgQVRIX1BJTihkYXRhKSAoKGRhdGEpID4+IDgpCisjZGVmaW5lIEFUSF9QT0xBUklUWShkYXRhKSAoKGRhdGEpICYgMHhmZikKKworLyogRGV2aWNlcyB3ZSBtYXRjaCBvbiBmb3IgTEVEIGNvbmZpZyBpbmZvICh0eXBpY2FsbHkgbGFwdG9wcykgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19sZWRfZGV2aWNlc1tdID0geworCS8qIElCTS1zcGVjaWZpYyBBUjUyMTIgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTJfSUJNKSwgQVRIX0xFRCgwLCAwKSB9LAorCS8qIEFSNTIxMSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMSksIEFUSF9MRUQoMCwgMCkgfSwKKwkvKiBIUCBDb21wYXEgbmM2eHgsIG5jNDAwMCwgbng2MDAwICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0FOWV9JRCksIEFUSF9MRUQoMSwgMSkgfSwKKwkvKiBBY2VyIEFzcGlyZSBPbmUgQTE1MCAobWF4aW1sZXZpdHNreUBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0ZPWENPTk4sIDB4ZTAwOCksIEFUSF9MRUQoMywgMCkgfSwKKwkvKiBBY2VyIEZlcnJhcmkgNTAwMCAocnVzcy5kaWxsQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQU1CSVQsIDB4MDQyMiksIEFUSF9MRUQoMSwgMSkgfSwKKwkvKiBFLW1hY2hpbmVzIEU1MTAgKHR1bGlvbUBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FNQklULCAweDA0MjgpLCBBVEhfTEVEKDMsIDApIH0sCisJeyB9Cit9OworCit2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKKwkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOworCQlhdGg1a19sZWRfb2ZmKHNjKTsKKwl9Cit9CisKK3ZvaWQgYXRoNWtfbGVkX29uKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJcmV0dXJuOworCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sIHNjLT5sZWRfb24pOworfQorCit2b2lkIGF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQorCQlyZXR1cm47CisJYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3BpbiwgIXNjLT5sZWRfb24pOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhdGg1a19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgYXRoNWtfbGVkLAorCQlsZWRfZGV2KTsKKworCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpCisJCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJZWxzZQorCQlhdGg1a19sZWRfb24obGVkLT5zYyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0aDVrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfbGVkICpsZWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJaW50IGVycjsKKworCWxlZC0+c2MgPSBzYzsKKwlzdHJuY3B5KGxlZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSkpOworCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDVrX2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcigmc2MtPnBkZXYtPmRldiwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikgeworCQlBVEg1S19XQVJOKHNjLCAiY291bGQgbm90IHJlZ2lzdGVyIExFRCAlc1xuIiwgbmFtZSk7CisJCWxlZC0+c2MgPSBOVUxMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYXRoNWtfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX2xlZCAqbGVkKQoreworCWlmICghbGVkLT5zYykKKwkJcmV0dXJuOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmxlZF9kZXYpOworCWF0aDVrX2xlZF9vZmYobGVkLT5zYyk7CisJbGVkLT5zYyA9IE5VTEw7Cit9CisKK3ZvaWQgYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKK30KKworaW50IGF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7CisJY2hhciBuYW1lW0FUSDVLX0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqbWF0Y2g7CisKKwltYXRjaCA9IHBjaV9tYXRjaF9pZCgmYXRoNWtfbGVkX2RldmljZXNbMF0sIHBkZXYpOworCWlmIChtYXRjaCkgeworCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7CisJCXNjLT5sZWRfcGluID0gQVRIX1BJTihtYXRjaC0+ZHJpdmVyX2RhdGEpOworCQlzYy0+bGVkX29uID0gQVRIX1BPTEFSSVRZKG1hdGNoLT5kcml2ZXJfZGF0YSk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKKwlhdGg1a19sZWRfZW5hYmxlKHNjKTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjpyeCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJ4X2xlZCwgbmFtZSwKKwkJaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShodykpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnR4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+dHhfbGVkLCBuYW1lLAorCQlpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGh3KSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYwppbmRleCA3NWViOWY0Li41NTEyMmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9wY3UuYwpAQCAtNjQ2LDYgKzY0NiwyMiBAQAogfQogCiAvKioKKyAqIGF0aDVrX2h3X3NldF90c2Y2NCAtIFNldCBhIG5ldyA2NGJpdCBUU0YKKyAqCisgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CisgKiBAdHNmNjQ6IFRoZSBuZXcgNjRiaXQgVFNGCisgKgorICogU2V0cyB0aGUgbmV3IFRTRgorICovCit2b2lkIGF0aDVrX2h3X3NldF90c2Y2NChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1NjQgdHNmNjQpCit7CisJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmNjQgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9MMzIpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKHRzZjY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYsIEFSNUtfVFNGX1UzMik7Cit9CisKKy8qKgogICogYXRoNWtfaHdfcmVzZXRfdHNmIC0gRm9yY2UgYSBUU0YgcmVzZXQKICAqCiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CkBAIC0xMDI2LDYgKzEwNDIsOSBAQAogCQkJcmV0dXJuIEFSNUtfS0VZVEFCTEVfVFlQRV80MDsKIAkJZWxzZSBpZiAoa2V5LT5rZXlsZW4gPT0gTEVOX1dFUDEwNCkKIAkJCXJldHVybiBBUjVLX0tFWVRBQkxFX1RZUEVfMTA0OworCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDQxLDcgKzEwNjAsNyBAQAogCV9fbGUzMiBrZXlfdls1XSA9IHt9OwogCV9fbGUzMiBrZXkwID0gMCwga2V5MSA9IDA7CiAJX19sZTMyICpyeG1pYywgKnR4bWljOwotCXUzMiBrZXl0eXBlOworCWludCBrZXl0eXBlOwogCXUxNiBtaWNlbnRyeSA9IGVudHJ5ICsgQVI1S19LRVlUQUJMRV9NSUNfT0ZGU0VUOwogCWJvb2wgaXNfdGtpcDsKIAljb25zdCB1OCAqa2V5X3B0cjsKQEAgLTExMzksNyArMTE1OCw3IEBACiAKIAkvKiBNQUMgbWF5IGJlIE5VTEwgaWYgaXQncyBhIGJyb2FkY2FzdCBrZXkuIEluIHRoaXMgY2FzZSBubyBuZWVkIHRvCiAJICogdG8gY29tcHV0ZSBBUjVLX0xPV19JRCBhbmQgQVI1S19ISUdIX0lEIGFzIHdlIGFscmVhZHkga25vdyBpdC4gKi8KLQlpZiAodW5saWtlbHkobWFjID09IE5VTEwpKSB7CisJaWYgKCFtYWMpIHsKIAkJbG93X2lkID0gMHhmZmZmZmZmZjsKIAkJaGlnaF9pZCA9IDB4ZmZmZiB8IEFSNUtfS0VZVEFCTEVfVkFMSUQ7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKaW5kZXggN2JhMThlMC4uODFmNWJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGh5LmMKQEAgLTIsNyArMiw3IEBACiAgKiBQSFkgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTI2LDExMzggKzI2LDE5MSBAQAogI2luY2x1ZGUgImF0aDVrLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgotCi0vKiBTdHJ1Y3QgdG8gaG9sZCBpbml0aWFsIFJGIHJlZ2lzdGVyIHZhbHVlcyAoUkYgQmFua3MpICovCi1zdHJ1Y3QgYXRoNWtfaW5pX3JmIHsKLQl1OAlyZl9iYW5rOwkvKiBjaGVjayBvdXQgYXRoNWtfcmVnLmggKi8KLQl1MTYJcmZfcmVnaXN0ZXI7CS8qIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQl1MzIJcmZfdmFsdWVbNV07CS8qIHJlZ2lzdGVyIHZhbHVlIGZvciBkaWZmZXJlbnQgbW9kZXMgKGFib3ZlKSAqLwotfTsKLQotLyoKLSAqIE1vZGUtc3BlY2lmaWMgUkYgR2FpbiB0YWJsZSAoNjRieXRlcykgZm9yIFJGNTExMS81MTEyCi0gKiAoUkY1MTEwIG9ubHkgY29tZXMgd2l0aCBBUjUyMTAgYW5kIG9ubHkgc3VwcG9ydHMgYS90dXJibyBhIG1vZGUgc28gaW5pdGlhbAotICogUkYgR2FpbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKLSAqLwotc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gewotCXUxNglyZmdfcmVnaXN0ZXI7CS8qIFJGIEdhaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXUzMglyZmdfdmFsdWVbMl07CS8qIFtmcmVxIChzZWUgYmVsb3cpXSAqLwotfTsKLQotc3RydWN0IGF0aDVrX2dhaW5fb3B0IHsKLQl1MzIJCQlnb19kZWZhdWx0OwotCXUzMgkJCWdvX3N0ZXBzX2NvdW50OwotCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwCWdvX3N0ZXBbQVI1S19HQUlOX1NURVBfQ09VTlRdOwotfTsKLQotLyogUkY1MTExIG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181MTExW10gPSB7Ci0JeyAwLCAweDk4OWMsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMGMwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMGY5LCAweDAwMDQwMGY5LCAweDAwMDQwMGZmLCAweDAwMDQwMGZkLCAweDAwMDQwMGZkIH0gfSwKLQl7IDAsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IDEsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDE0IH0gfSwKLQl7IDMsIDB4OThkOCwKLQkgICAgeyAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMGMwLCAweDAwMzgwMDgwLCAweDAyMzgwMGMwLCAweDAwMzgwMGMwLCAweDAwMzgwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDIwMDA2LCAweDAwMDIwMDA2LCAweDAwMDAwMDA2LCAweDAwMDIwMDA2LCAweDAwMDIwMDA2IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3IH0gfSwKLQl7IDYsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYxLCAweDAwMDAwMGYxLCAweDAwMDAwMDYxLCAweDAwMDAwMGYxLCAweDAwMDAwMGYxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA5MDRmLCAweDAwMDA5MDRmLCAweDAwMDA5MDRjLCAweDAwMDA5MDRmLCAweDAwMDA5MDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxMjVhLCAweDAwMDAxMjVhLCAweDAwMDAxMjlhLCAweDAwMDAxMjVhLCAweDAwMDAxMjVhIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBmLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTExICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTFbXSA9IHsKLQkvKgkJCSAgICAgIDVHaHoJMkdoegkqLwotCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAxYTksIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAwNDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwNjksIDB4MDAwMDAxNTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMTksIDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNDQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwODQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAxYTUsIDB4MDAwMDAxNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMWU1LCAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAyNSwgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYzgsIDB4MDAwMDAwMTQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMDQyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDA4MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAxNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTk4LCAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFkOCwgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMTgsIDB4MDAwMDAwMTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDU4LCAweDAwMDAwMDUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA5OCwgMHgwMDAwMDA5MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxYTQsIDB4MDAwMDAxN2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWU0LCAweDAwMDAwMWJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAyNCwgMHgwMDAwMDFmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwNjQsIDB4MDAwMDAwMGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMGE0LCAweDAwMDAwMDRhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDBlNCwgMHgwMDAwMDA4YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAxMGEsIDB4MDAwMDAxNWEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMTRhLCAweDAwMDAwMTlhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDE4YSwgMHgwMDAwMDFkYSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAxY2EsIDB4MDAwMDAwMGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDBhLCAweDAwMDAwMDRlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDA0YSwgMHgwMDAwMDA4ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwOGEsIDB4MDAwMDAxNWUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWJhLCAweDAwMDAwMTllIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDFmYSwgMHgwMDAwMDFkZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwMDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDQ5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDE4NiwgMHgwMDAwMDA4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYzYsIDB4MDAwMDAxNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDA2LCAweDAwMDAwMWI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDA0NiwgMHgwMDAwMDFmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwODYsIDB4MDAwMDAwMzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAxYmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDAzZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwN2QgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGJkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTEgPSB7Ci0JNCwKLQk5LAotCXsKLQkJeyB7IDQsIDEsIDEsIDEgfSwgNiB9LAotCQl7IHsgNCwgMCwgMSwgMSB9LCA0IH0sCi0JCXsgeyAzLCAxLCAxLCAxIH0sIDMgfSwKLQkJeyB7IDQsIDAsIDAsIDEgfSwgMSB9LAotCQl7IHsgNCwgMSwgMSwgMCB9LCAwIH0sCi0JCXsgeyA0LCAwLCAxLCAwIH0sIC0yIH0sCi0JCXsgeyAzLCAxLCAxLCAwIH0sIC0zIH0sCi0JCXsgeyA0LCAwLCAwLCAwIH0sIC00IH0sCi0JCXsgeyAyLCAxLCAxLCAwIH0sIC02IH0KLQl9Ci19OwotCi0vKiBSRjUxMTIgbW9kZS1zcGVjaWZpYyBpbml0IHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzUxMTJbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICBtb2RlIGEvWFIgICBtb2RlIGFUdXJibyBtb2RlIGIgICAgICBtb2RlIGcgICAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYjAsIDB4MDAwMDAwYjAsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTggfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2YzRhNDEsIDB4MDA2YzRhNDEsIDB4MDA2YzRhZjEsIDB4MDA2YzRhNjEsIDB4MDA2YzRhNjEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDg5MmEsIDB4MDA1MDg5MmEsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAgfSB9LAotCXsgNiwgMHg5OGQwLAotCSAgICB7IDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAotCXsgNywgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotfTsKLQotLyogUkY1MTEyQSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTExMmFbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICBtb2RlIGEvWFIgICBtb2RlIGFUdXJibyBtb2RlIGIgICAgICBtb2RlIGcgICAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAsIDB4MDAxOTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAsIDB4MDAwMjAwODAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDksIDB4MDAwODAwMDkgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAotCXsgNiwgMHg5OGQ4LAotCSAgICB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAotCXsgNywgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjExMmFbXSA9IHsKLQl7IDEsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNCwKLQkvKgkgICBtb2RlIGIJbW9kZSBnCSAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MGEwMDAwMDAsIDB4MGEwMDAwMDAsIDB4MGEwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDBjMGMwMDAwLCAweDBjMGMwMDAwLCAweDBjMGMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDA3MDAxOSwgMHgwMDA3MDAxOSwgMHgwMDA3MDAxOSB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwYjAyMTg0LCAweDAwYjAyMTg0LCAweDAwYjAyMTg0IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNSwKLQkJeyAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYyB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMSwKLQkJeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLS8qIFJGNTQxMy81NDE0IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181NDEzW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTAwMGMwLCAweDAwYTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMGEwLCAweDAwNTEwMGEwLCAweDAwNTEwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMDZhLCAweDAwNTAwMDZhLCAweDAwNTAwMGRkLCAweDAwNTAwMGRkLCAweDAwNTAwMGRkIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAyYzAwLCAweDAwMDAyYzAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwIH0gfSwKLQl7IDYsIDB4OThjOCwKLQkgICAgeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIFJGMjQxMy8yNDE0IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc18yNDEzW10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyogCSAgIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGI1MDAwMCwgMHgwMGI1MDAwMCwgMHgwMGI1MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDlkMDAwMCwgMHgwMDlkMDAwMCwgMHgwMDlkMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDIzMDAxOCwgMHgwMDIzMDAxOCwgMHgwMDIzMDAxOCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMjgwMDUwLCAweDAwMjgwMDUwLCAweDAwMjgwMDUwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDA0MDA3ZiwgMHgwMDA0MDA3ZiwgMHgwMDA0MDA3ZiB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwYzAwMCwgMHgwMDAwYzAwMCwgMHgwMDAwYzAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzUsCi0JCXsgMHgwMDQwMDIzMCwgMHgwMDQwMDIzMCwgMHgwMDQwMDIzMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8yLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotfTsKLQotLyogUkYyNDI1IG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc18yNDI1W10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyogCSAgIG1vZGUgZyAgICAgbW9kZSBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMywKLQkJeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKLQl7IDMsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfNiwKLQkJeyAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTAwMDAwLCAweDAwMTAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjgwMDAwLCAweDAwZjgwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwOTEwMDQwLCAweDAwOTEwMDQwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwODEwMDYwLCAweDAwODEwMDYwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzEsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8yLAotCQl7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAotfTsKLQotLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjUxMTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTExMltdID0gewotCS8qCQkJICAgICAgNUdoegkyR2h6CSovCi0JeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0NywgMHgwMDAwMDA0NyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4NywgMHgwMDAwMDA4NyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMCwgMHgwMDAwMDFhMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMCwgMHgwMDAwMDFlMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDFhMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFlMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMTYyLCAweDAwMDAwMTYyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhMiwgMHgwMDAwMDFhMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTIsIDB4MDAwMDAxZTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2MiwgMHgwMDAwMDA2MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxNjMsIDB4MDAwMDAxNjMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMWEzLCAweDAwMDAwMWEzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDFlMywgMHgwMDAwMDFlMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwMjMsIDB4MDAwMDAwMjMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMDYzLCAweDAwMDAwMDYzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDE4NCwgMHgwMDAwMDE4NCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAxYzQsIDB4MDAwMDAxYzQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFlYSwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAwMmEsIDB4MDAwMDAwNGIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDZhLCAweDAwMDAwMDhiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDBhYSwgMHgwMDAwMDFhYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxYWIsIDB4MDAwMDAxZWMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWViLCAweDAwMDAwMDJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAyYiwgMHgwMDAwMDAxMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNmIsIDB4MDAwMDAwNTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMGFiLCAweDAwMDAwMDkyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDFhYywgMHgwMDAwMDE5MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAxZWMsIDB4MDAwMDAxZDMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMDJjLCAweDAwMDAwMDEzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDA1MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwN2EsIDB4MDAwMDAwOTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGJhLCAweDAwMDAwMTk0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDFiYiwgMHgwMDAwMDFkNCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAxZmIsIDB4MDAwMDAwMTQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMDNiLCAweDAwMDAwMDNhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDA3YiwgMHgwMDAwMDA3YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwYmIsIDB4MDAwMDAwYmEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMWJjLCAweDAwMDAwMWJiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDFmYywgMHgwMDAwMDFmYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwM2MsIDB4MDAwMDAwM2IgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMDdjLCAweDAwMDAwMDdiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBiYywgMHgwMDAwMDBiYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAxYmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDAzYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwN2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTQxMyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81NDEzW10gPSB7Ci0JLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KLQl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWExLCAweDAwMDAwMTYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWExIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMWUxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMTg4LCAweDAwMDAwMDYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMWM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAwNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDE2OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAxYTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMWU5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDFkMCwgMHgwMDAwMDAyOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwNjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDUwLCAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA5MCwgMHgwMDAwMDFkMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAxYjEsIDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWYxLCAweDAwMDAwMDUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAzMSwgMHgwMDAwMDA5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwNzEsIDB4MDAwMDAxNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWI4LCAweDAwMDAwMWIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDFmOCwgMHgwMDAwMDFmMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMzgsIDB4MDAwMDAwMzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDc4LCAweDAwMDAwMDcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDE4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwOTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMGQ5LCAweDAwMDAwMTc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDFiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMDM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDA3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDEzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MTNbXSA9IHsKLQl7IEFSNUtfUkZfR0FJTigwKSwgeyAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwgeyAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwgeyAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwgeyAweDAwMDAwMTgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwgeyAweDAwMDAwMWMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwgeyAweDAwMDAwMDAxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwgeyAweDAwMDAwMDQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwgeyAweDAwMDAwMDgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwgeyAweDAwMDAwMTY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwgeyAweDAwMDAwMWE4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksIHsgMHgwMDAwMDFlOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLCB7IDB4MDAwMDAwMjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwgeyAweDAwMDAwMDY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksIHsgMHgwMDAwMDE4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLCB7IDB4MDAwMDAxYzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwgeyAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksIHsgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLCB7IDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwgeyAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksIHsgMHgwMDAwMDFkMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLCB7IDB4MDAwMDAwMTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwgeyAweDAwMDAwMDUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksIHsgMHgwMDAwMDA5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLCB7IDB4MDAwMDAxOTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwgeyAweDAwMDAwMWQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksIHsgMHgwMDAwMDAxMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLCB7IDB4MDAwMDAwNTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwgeyAweDAwMDAwMDkxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksIHsgMHgwMDAwMDE3OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLCB7IDB4MDAwMDAxYjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwgeyAweDAwMDAwMWY4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksIHsgMHgwMDAwMDAzOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLCB7IDB4MDAwMDAwNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwgeyAweDAwMDAwMTk5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksIHsgMHgwMDAwMDFkOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLCB7IDB4MDAwMDAwMTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwgeyAweDAwMDAwMDU5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksIHsgMHgwMDAwMDA5OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLCB7IDB4MDAwMDAwZDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwgeyAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDI1ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MjVbXSA9IHsKLQl7IEFSNUtfUkZfR0FJTigwKSwgeyAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwgeyAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwgeyAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwgeyAweDAwMDAwMTgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwgeyAweDAwMDAwMWMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwgeyAweDAwMDAwMDAxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwgeyAweDAwMDAwMDQxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwgeyAweDAwMDAwMDgxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwgeyAweDAwMDAwMTg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwgeyAweDAwMDAwMWM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksIHsgMHgwMDAwMDAwOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLCB7IDB4MDAwMDAwNDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwgeyAweDAwMDAwMDg4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksIHsgMHgwMDAwMDE4OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLCB7IDB4MDAwMDAxYzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwgeyAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksIHsgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLCB7IDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwgeyAweDAwMDAwMWIwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksIHsgMHgwMDAwMDFmMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLCB7IDB4MDAwMDAwMzAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwgeyAweDAwMDAwMDcwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksIHsgMHgwMDAwMDE3MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLCB7IDB4MDAwMDAxYjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwgeyAweDAwMDAwMWYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksIHsgMHgwMDAwMDAzMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLCB7IDB4MDAwMDAwNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwgeyAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksIHsgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLCB7IDB4MDAwMDAwMzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwgeyAweDAwMDAwMDc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksIHsgMHgwMDAwMDBiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLCB7IDB4MDAwMDAxYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwgeyAweDAwMDAwMWY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksIHsgMHgwMDAwMDAzOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLCB7IDB4MDAwMDAwNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwgeyAweDAwMDAwMGI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwgeyAweDAwMDAwMGY5IH0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTEyID0gewotCTEsCi0JOCwKLQl7Ci0JCXsgeyAzLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDYgfSwKLQkJeyB7IDIsIDAsIDAsIDAsIDAsIDAsIDAgfSwgMCB9LAotCQl7IHsgMSwgMCwgMCwgMCwgMCwgMCwgMCB9LCAtMyB9LAotCQl7IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCAtNiB9LAotCQl7IHsgMCwgMSwgMSwgMCwgMCwgMCwgMCB9LCAtOCB9LAotCQl7IHsgMCwgMSwgMSwgMCwgMSwgMSwgMCB9LCAtMTAgfSwKLQkJeyB7IDAsIDEsIDAsIDEsIDEsIDEsIDAgfSwgLTEzIH0sCi0JCXsgeyAwLCAxLCAwLCAxLCAxLCAwLCAxIH0sIC0xNiB9LAotCX0KLX07CisjaW5jbHVkZSAicmZidWZmZXIuaCIKKyNpbmNsdWRlICJyZmdhaW4uaCIKIAogLyoKICAqIFVzZWQgdG8gbW9kaWZ5IFJGIEJhbmtzIGJlZm9yZSB3cml0aW5nIHRoZW0gdG8gQVI1S19SRl9CVUZGRVIKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGg1a19od19yZnJlZ3Nfb3AodTMyICpyZiwgdTMyIG9mZnNldCwgdTMyIHJlZywgdTMyIGJpdHMsCi0JCXUzMiBmaXJzdCwgdTMyIGNvbCwgYm9vbCBzZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGF0aDVrX2h3X3JmYl9vcChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCQljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzLAorCQkJCQl1MzIgdmFsLCB1OCByZWdfaWQsIGJvb2wgc2V0KQogewotCXUzMiBtYXNrLCBlbnRyeSwgbGFzdCwgZGF0YSwgc2hpZnQsIHBvc2l0aW9uOwotCXMzMiBsZWZ0OworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmcmVnID0gTlVMTDsKKwl1OCBvZmZzZXQsIGJhbmssIG51bV9iaXRzLCBjb2wsIHBvc2l0aW9uOworCXUxNiBlbnRyeTsKKwl1MzIgbWFzaywgZGF0YSwgbGFzdF9iaXQsIGJpdHNfc2hpZnRlZCwgZmlyc3RfYml0OworCXUzMiAqcmZiOworCXMzMiBiaXRzX2xlZnQ7CiAJaW50IGk7CiAKIAlkYXRhID0gMDsKKwlyZmIgPSBhaC0+YWhfcmZfYmFua3M7CiAKLQlpZiAocmYgPT0gTlVMTCkKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX3JlZ3NfY291bnQ7IGkrKykgeworCQlpZiAocmZfcmVnc1tpXS5pbmRleCA9PSByZWdfaWQpIHsKKwkJCXJmcmVnID0gJnJmX3JlZ3NbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZmIgPT0gTlVMTCB8fCByZnJlZyA9PSBOVUxMKSB7CisJCUFUSDVLX1BSSU5URigiUmYgcmVnaXN0ZXIgbm90IGZvdW5kIVxuIik7CiAJCS8qIHNob3VsZCBub3QgaGFwcGVuICovCiAJCXJldHVybiAwOworCX0KIAotCWlmICghKGNvbCA8PSAzICYmIGJpdHMgPD0gMzIgJiYgZmlyc3QgKyBiaXRzIDw9IDMxOSkpIHsKKwliYW5rID0gcmZyZWctPmJhbms7CisJbnVtX2JpdHMgPSByZnJlZy0+ZmllbGQubGVuOworCWZpcnN0X2JpdCA9IHJmcmVnLT5maWVsZC5wb3M7CisJY29sID0gcmZyZWctPmZpZWxkLmNvbDsKKworCS8qIGZpcnN0X2JpdCBpcyBhbiBvZmZzZXQgZnJvbSBiYW5rJ3MKKwkgKiBzdGFydC4gU2luY2Ugd2UgaGF2ZSBhbGwgYmFua3Mgb24KKwkgKiB0aGUgc2FtZSBhcnJheSwgd2UgdXNlIHRoaXMgb2Zmc2V0CisJICogdG8gbWFyayBlYWNoIGJhbmsncyBzdGFydCAqLworCW9mZnNldCA9IGFoLT5haF9vZmZzZXRbYmFua107CisKKwkvKiBCb3VuZGFyeSBjaGVjayAqLworCWlmICghKGNvbCA8PSAzICYmIG51bV9iaXRzIDw9IDMyICYmIGZpcnN0X2JpdCArIG51bV9iaXRzIDw9IDMxOSkpIHsKIAkJQVRINUtfUFJJTlRGKCJpbnZhbGlkIHZhbHVlcyBhdCBvZmZzZXQgJXVcbiIsIG9mZnNldCk7CiAJCXJldHVybiAwOwogCX0KIAotCWVudHJ5ID0gKChmaXJzdCAtIDEpIC8gOCkgKyBvZmZzZXQ7Ci0JcG9zaXRpb24gPSAoZmlyc3QgLSAxKSAlIDg7CisJZW50cnkgPSAoKGZpcnN0X2JpdCAtIDEpIC8gOCkgKyBvZmZzZXQ7CisJcG9zaXRpb24gPSAoZmlyc3RfYml0IC0gMSkgJSA4OwogCiAJaWYgKHNldCkKLQkJZGF0YSA9IGF0aDVrX2h3X2JpdHN3YXAocmVnLCBiaXRzKTsKKwkJZGF0YSA9IGF0aDVrX2h3X2JpdHN3YXAodmFsLCBudW1fYml0cyk7CiAKLQlmb3IgKGkgPSBzaGlmdCA9IDAsIGxlZnQgPSBiaXRzOyBsZWZ0ID4gMDsgcG9zaXRpb24gPSAwLCBlbnRyeSsrLCBpKyspIHsKLQkJbGFzdCA9IChwb3NpdGlvbiArIGxlZnQgPiA4KSA/IDggOiBwb3NpdGlvbiArIGxlZnQ7Ci0JCW1hc2sgPSAoKCgxIDw8IGxhc3QpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8IChjb2wgKiA4KTsKKwlmb3IgKGJpdHNfc2hpZnRlZCA9IDAsIGJpdHNfbGVmdCA9IG51bV9iaXRzOyBiaXRzX2xlZnQgPiAwOworCXBvc2l0aW9uID0gMCwgZW50cnkrKykgeworCisJCWxhc3RfYml0ID0gKHBvc2l0aW9uICsgYml0c19sZWZ0ID4gOCkgPyA4IDoKKwkJCQkJcG9zaXRpb24gKyBiaXRzX2xlZnQ7CisKKwkJbWFzayA9ICgoKDEgPDwgbGFzdF9iaXQpIC0gMSkgXiAoKDEgPDwgcG9zaXRpb24pIC0gMSkpIDw8CisJCQkJCQkJCShjb2wgKiA4KTsKIAogCQlpZiAoc2V0KSB7Ci0JCQlyZltlbnRyeV0gJj0gfm1hc2s7Ci0JCQlyZltlbnRyeV0gfD0gKChkYXRhIDw8IHBvc2l0aW9uKSA8PCAoY29sICogOCkpICYgbWFzazsKKwkJCXJmYltlbnRyeV0gJj0gfm1hc2s7CisJCQlyZmJbZW50cnldIHw9ICgoZGF0YSA8PCBwb3NpdGlvbikgPDwgKGNvbCAqIDgpKSAmIG1hc2s7CiAJCQlkYXRhID4+PSAoOCAtIHBvc2l0aW9uKTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgPSAoKChyZltlbnRyeV0gJiBtYXNrKSA+PiAoY29sICogOCkpID4+IHBvc2l0aW9uKQotCQkJCTw8IHNoaWZ0OwotCQkJc2hpZnQgKz0gbGFzdCAtIHBvc2l0aW9uOworCQkJZGF0YSB8PSAoKChyZmJbZW50cnldICYgbWFzaykgPj4gKGNvbCAqIDgpKSA+PiBwb3NpdGlvbikKKwkJCQk8PCBiaXRzX3NoaWZ0ZWQ7CisJCQliaXRzX3NoaWZ0ZWQgKz0gbGFzdF9iaXQgLSBwb3NpdGlvbjsKIAkJfQogCi0JCWxlZnQgLT0gOCAtIHBvc2l0aW9uOworCQliaXRzX2xlZnQgLT0gOCAtIHBvc2l0aW9uOwogCX0KIAotCWRhdGEgPSBzZXQgPyAxIDogYXRoNWtfaHdfYml0c3dhcChkYXRhLCBiaXRzKTsKKwlkYXRhID0gc2V0ID8gMSA6IGF0aDVrX2h3X2JpdHN3YXAoZGF0YSwgbnVtX2JpdHMpOwogCiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB1MzIgYXRoNWtfaHdfcmZyZWdzX2dhaW5mX2NvcnIoc3RydWN0IGF0aDVrX2h3ICphaCkKKy8qKioqKioqKioqKioqKioqKioqKioqXAorKiBSRiBHYWluIG9wdGltaXphdGlvbiAqCitcKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgY29kZSBpcyB1c2VkIHRvIG9wdGltaXplIHJmIGdhaW4gb24gZGlmZmVyZW50IGVudmlyb25tZW50cworICogKHRlbXByYXR1cmUgbW9zdGx5KSBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIGEgcG93ZXIgZGV0ZWN0b3IuCisgKgorICogSXQncyBvbmx5IHVzZWQgb24gUkY1MTExIGFuZCBSRjUxMTIsIGxhdGVyIFJGIGNoaXBzIHNlZW0gdG8gaGF2ZQorICogYXV0byBhZGp1c3RtZW50IG9uIGh3IC1ub3RpY2UgdGhleSBoYXZlIGEgbXVjaCBzbWFsbGVyIEJBTksgNyBhbmQKKyAqIG5vIGdhaW4gb3B0aW1pemF0aW9uIGxhZGRlci0uCisgKgorICogRm9yIG1vcmUgaW5mb3MgY2hlY2sgb3V0IHRoaXMgcGF0ZW50IGRvYworICogaHR0cDovL3d3dy5mcmVlcGF0ZW50c29ubGluZS5jb20vNzQwMDY5MS5odG1sCisgKgorICogVGhpcyBwYXBlciBkZXNjcmliZXMgcG93ZXIgZHJvcHMgYXMgc2VlbiBvbiB0aGUgcmVjZWl2ZXIgZHVlIHRvCisgKiBwcm9iZSBwYWNrZXRzCisgKiBodHRwOi8vd3d3LmNucmkuZGl0LmllL3B1YmxpY2F0aW9ucy9JQ1QwOCUyMC0lMjBQcmFjdGljYWwlMjBJc3N1ZXMKKyAqICUyMG9mJTIwUG93ZXIlMjBDb250cm9sLnBkZgorICoKKyAqIEFuZCB0aGlzIGlzIHRoZSBNYWRXaUZpIGJ1ZyBlbnRyeSByZWxhdGVkIHRvIHRoZSBhYm92ZQorICogaHR0cDovL21hZHdpZmktcHJvamVjdC5vcmcvdGlja2V0LzE2NTkKKyAqIHdpdGggdmFyaW91cyBtZWFzdXJlbWVudHMgYW5kIGRpYWdyYW1zCisgKgorICogVE9ETzogRGVhbCB3aXRoIHBvd2VyIGRyb3BzIGR1ZSB0byBwcm9iZXMgYnkgc2V0dGluZyBhbiBhcHJvcHJpYXRlCisgKiB0eCBwb3dlciBvbiB0aGUgcHJvYmUgcGFja2V0cyAhIE1ha2UgdGhpcyBwYXJ0IG9mIHRoZSBjYWxpYnJhdGlvbiBwcm9jZXNzLgorICovCisKKy8qIEluaXRpYWxpemUgYWhfZ2FpbiBkdXJyaW5nIGF0dGFjaCAqLworaW50IGF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCS8qIEluaXRpYWxpemUgdGhlIGdhaW4gb3B0aW1pemF0aW9uIHZhbHVlcyAqLworCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJY2FzZSBBUjVLX1JGNTExMToKKwkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMS5nb19kZWZhdWx0OworCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOworCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSAzNTsKKwkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGNTExMjoKKwkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMi5nb19kZWZhdWx0OworCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOworCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSA4NTsKKwkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNjaGVkdWxlIGEgZ2FpbiBwcm9iZSBjaGVjayBvbiB0aGUgbmV4dCB0cmFuc21pdGVkIHBhY2tldC4KKyAqIFRoYXQgbWVhbnMgb3VyIG5leHQgcGFja2V0IGlzIGdvaW5nIHRvIGJlIHNlbnQgd2l0aCBsb3dlcgorICogdHggcG93ZXIgYW5kIGEgUGVhayB0byBBdmVyYWdlIFBvd2VyIERldGVjdG9yIChQQVBEKSB3aWxsIHRyeQorICogdG8gbWVhc3VyZSB0aGUgZ2Fpbi4KKyAqCisgKiBUT0RPOiBVc2UgcHJvcHBlciB0eCBwb3dlciBzZXR0aW5nIGZvciB0aGUgcHJvYmUgcGFja2V0IHNvCisgKiB0aGF0IHdlIGRvbid0IG9ic2VydmUgYSBzZXJpb3VzIHBvd2VyIGRyb3Agb24gdGhlIHJlY2VpdmVyCisgKgorICogWFhYOiAgSG93IGFib3V0IGZvcmNpbmcgYSB0eCBwYWNrZXQgKGJ5cGFzc2luZyBQQ1UgYXJiaXRyYXRvciBldGMpCisgKiBqdXN0IGFmdGVyIHdlIGVuYWJsZSB0aGUgcHJvYmUgc28gdGhhdCB3ZSBkb24ndCBtZXNzIHdpdGgKKyAqIHN0YW5kYXJkIHRyYWZmaWMgPyBNYXliZSBpdCdzIHRpbWUgdG8gdXNlIHN3IGludGVycnVwdHMgYW5kCisgKiBhIHByb2JlIHRhc2tsZXQgISEhCisgKi8KK3N0YXRpYyB2b2lkIGF0aDVrX2h3X3JlcXVlc3RfcmZnYWluX3Byb2JlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisKKwkvKiBTa2lwIGlmIGdhaW4gY2FsaWJyYXRpb24gaXMgaW5hY3RpdmUgb3IKKwkgKiB3ZSBhbHJlYWR5IGhhbmRsZSBhIHByb2JlIHJlcXVlc3QgKi8KKwlpZiAoYWgtPmFoX2dhaW4uZ19zdGF0ZSAhPSBBUjVLX1JGR0FJTl9BQ1RJVkUpCisJCXJldHVybjsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cG93ZXIudHhwX21heCwKKwkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhQT1dFUikgfAorCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhULCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKKworCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRDsKKworfQorCisvKiBDYWxjdWxhdGUgZ2Fpbl9GIG1lYXN1cmVtZW50IGNvcnJlY3Rpb24KKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0ZXAgZm9yIFJGNTExMiByZXYuIDIgKi8KK3N0YXRpYyB1MzIgYXRoNWtfaHdfcmZfZ2FpbmZfY29ycihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCXUzMiBtaXgsIHN0ZXA7CiAJdTMyICpyZjsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgKmdvOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CisJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVnczsKKworCS8qIE9ubHkgUkY1MTEyIFJldi4gMiBzdXBwb3J0cyBpdCAqLworCWlmICgoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTEyKSB8fAorCShhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8PSBBUjVLX1NSRVZfUkFEXzUxMTJBKSkKKwkJcmV0dXJuIDA7CisKKwlnbyA9ICZyZmdhaW5fb3B0XzUxMTI7CisJcmZfcmVncyA9IHJmX3JlZ3NfNTExMmE7CisJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMmEpOworCisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwogCiAJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTExNjUsMTEgKzIxOCwxNSBAQAogCXJmID0gYWgtPmFoX3JmX2JhbmtzOwogCWFoLT5haF9nYWluLmdfZl9jb3JyID0gMDsKIAotCWlmIChhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDEsIDM2LCAwLCBmYWxzZSkgIT0gMSkKKwkvKiBObyBWR0EgKFZhcmlhYmxlIEdhaW4gQW1wbGlmaWVyKSBvdmVycmlkZSwgc2tpcCAqLworCWlmIChhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYVkdBX09WUiwgZmFsc2UpICE9IDEpCiAJCXJldHVybiAwOwogCi0Jc3RlcCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgNCwgMzIsIDAsIGZhbHNlKTsKLQltaXggPSBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19wYXJhbVswXTsKKwkvKiBNaXggZ2FpbiBzdGVwcGluZyAqLworCXN0ZXAgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYR0FJTl9TVEVQLCBmYWxzZSk7CisKKwkvKiBNaXggZ2FpbiBvdmVycmlkZSAqLworCW1peCA9IGdfc3RlcC0+Z29zX3BhcmFtWzBdOwogCiAJc3dpdGNoIChtaXgpIHsKIAljYXNlIDM6CkBAIC0xMTg5LDkgKzI0NiwxNCBAQAogCXJldHVybiBhaC0+YWhfZ2Fpbi5nX2ZfY29ycjsKIH0KIAotc3RhdGljIGJvb2wgYXRoNWtfaHdfcmZyZWdzX2dhaW5fcmVhZGJhY2soc3RydWN0IGF0aDVrX2h3ICphaCkKKy8qIENoZWNrIGlmIGN1cnJlbnQgZ2Fpbl9GIG1lYXN1cmVtZW50IGlzIGluIHRoZSByYW5nZSBvZiBvdXIKKyAqIHBvd2VyIGRldGVjdG9yIHdpbmRvd3MuIElmIHdlIGdldCBhIG1lYXN1cmVtZW50IG91dHNpZGUgcmFuZ2UKKyAqIHdlIGtub3cgaXQncyBub3QgYWNjdXJhdGUgKGRldGVjdG9ycyBjYW4ndCBtZWFzdXJlIGFueXRoaW5nIG91dHNpZGUKKyAqIHRoZWlyIGRldGVjdGlvbiB3aW5kb3cpIHNvIHdlIG11c3QgaWdub3JlIGl0ICovCitzdGF0aWMgYm9vbCBhdGg1a19od19yZl9jaGVja19nYWluZl9yZWFkYmFjayhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewotCXUzMiBzdGVwLCBtaXgsIGxldmVsWzRdOworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmX3JlZ3M7CisJdTMyIHN0ZXAsIG1peF9vdnIsIGxldmVsWzRdOwogCXUzMiAqcmY7CiAKIAlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpCkBAIC0xMjAwLDIzICsyNjIsMzMgQEAKIAlyZiA9IGFoLT5haF9yZl9iYW5rczsKIAogCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHsKLQkJc3RlcCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgNiwgMzcsIDAsCi0JCQkJZmFsc2UpOworCisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTE7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTEpOworCisJCXN0ZXAgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfUkZHQUlOX1NURVAsCisJCQlmYWxzZSk7CisKIAkJbGV2ZWxbMF0gPSAwOwotCQlsZXZlbFsxXSA9IChzdGVwID09IDB4M2YpID8gMHgzMiA6IHN0ZXAgKyA0OwotCQlsZXZlbFsyXSA9IChzdGVwICE9IDB4M2YpID8gMHg0MCA6IGxldmVsWzBdOwotCQlsZXZlbFszXSA9IGxldmVsWzJdICsgMHgzMjsKKwkJbGV2ZWxbMV0gPSAoc3RlcCA9PSA2MykgPyA1MCA6IHN0ZXAgKyA0OworCQlsZXZlbFsyXSA9IChzdGVwICE9IDYzKSA/IDY0IDogbGV2ZWxbMF07CisJCWxldmVsWzNdID0gbGV2ZWxbMl0gKyA1MCA7CiAKIAkJYWgtPmFoX2dhaW4uZ19oaWdoID0gbGV2ZWxbM10gLQotCQkJKHN0ZXAgPT0gMHgzZiA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTiA6IC01KTsKKwkJCShzdGVwID09IDYzID8gQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOIDogLTUpOwogCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IGxldmVsWzBdICsKLQkJCShzdGVwID09IDB4M2YgPyBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4gOiAwKTsKKwkJCShzdGVwID09IDYzID8gQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOIDogMCk7CiAJfSBlbHNlIHsKLQkJbWl4ID0gYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLCAwLCAxLCAzNiwgMCwKLQkJCQlmYWxzZSk7CisKKwkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMjsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMik7CisKKwkJbWl4X292ciA9IGF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMCwgQVI1S19SRl9NSVhWR0FfT1ZSLAorCQkJZmFsc2UpOworCiAJCWxldmVsWzBdID0gbGV2ZWxbMl0gPSAwOwogCi0JCWlmIChtaXggPT0gMSkgeworCQlpZiAobWl4X292ciA9PSAxKSB7CiAJCQlsZXZlbFsxXSA9IGxldmVsWzNdID0gODM7CiAJCX0gZWxzZSB7CiAJCQlsZXZlbFsxXSA9IGxldmVsWzNdID0gMTA3OwpAQCAtMTIzMCw5ICszMDIsMTIgQEAKIAkJCWFoLT5haF9nYWluLmdfY3VycmVudCA8PSBsZXZlbFszXSk7CiB9CiAKLXN0YXRpYyBzMzIgYXRoNWtfaHdfcmZyZWdzX2dhaW5fYWRqdXN0KHN0cnVjdCBhdGg1a19odyAqYWgpCisvKiBQZXJmb3JtIGdhaW5fRiBhZGp1c3RtZW50IGJ5IGNob29zaW5nIHRoZSByaWdodCBzZXQKKyAqIG9mIHBhcmFtZXRlcnMgZnJvbSByZiBnYWluIG9wdGltaXphdGlvbiBsYWRkZXIgKi8KK3N0YXRpYyBzOCBhdGg1a19od19yZl9nYWluZl9hZGp1c3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgKmdvOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewpAQCAtMTI0NiwzNSArMzIxLDM5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFoLT5haF9nYWluLmdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKKwlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CiAKIAlpZiAoYWgtPmFoX2dhaW4uZ19jdXJyZW50ID49IGFoLT5haF9nYWluLmdfaGlnaCkgeworCisJCS8qIFJlYWNoZWQgbWF4aW11bSAqLwogCQlpZiAoYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9PSAwKQogCQkJcmV0dXJuIC0xOworCiAJCWZvciAoYWgtPmFoX2dhaW4uZ190YXJnZXQgPSBhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQ7CiAJCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgPj0gIGFoLT5haF9nYWluLmdfaGlnaCAmJgogCQkJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPiAwOwotCQkJCWFoLT5haF9nYWluLmdfc3RlcCA9Ci0JCQkJCSZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XSkKKwkJCQlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCiAJCQlhaC0+YWhfZ2Fpbi5nX3RhcmdldCAtPSAyICoKIAkJCSAgICAoZ28tPmdvX3N0ZXBbLS0oYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCldLmdvc19nYWluIC0KLQkJCSAgICBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19nYWluKTsKKwkJCSAgICBnX3N0ZXAtPmdvc19nYWluKTsKIAogCQlyZXQgPSAxOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKGFoLT5haF9nYWluLmdfY3VycmVudCA8PSBhaC0+YWhfZ2Fpbi5nX2xvdykgeworCisJCS8qIFJlYWNoZWQgbWluaW11bSAqLwogCQlpZiAoYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9PSAoZ28tPmdvX3N0ZXBzX2NvdW50IC0gMSkpCiAJCQlyZXR1cm4gLTI7CisKIAkJZm9yIChhaC0+YWhfZ2Fpbi5nX3RhcmdldCA9IGFoLT5haF9nYWluLmdfY3VycmVudDsKIAkJCQlhaC0+YWhfZ2Fpbi5nX3RhcmdldCA8PSBhaC0+YWhfZ2Fpbi5nX2xvdyAmJgogCQkJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPCBnby0+Z29fc3RlcHNfY291bnQtMTsKLQkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkJCQkmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCisJCQkJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQogCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgLT0gMiAqCiAJCQkgICAgKGdvLT5nb19zdGVwWysrYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0uZ29zX2dhaW4gLQotCQkJICAgIGFoLT5haF9nYWluLmdfc3RlcC0+Z29zX2dhaW4pOworCQkJICAgIGdfc3RlcC0+Z29zX2dhaW4pOwogCiAJCXJldCA9IDI7CiAJCWdvdG8gZG9uZTsKQEAgLTEyODksMzUzICszNjgsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogUmVhZCBFRVBST00gQ2FsaWJyYXRpb24gZGF0YSwgbW9kaWZ5IFJGIEJhbmtzIGFuZCBJbml0aWFsaXplIFJGNTExMQotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMV9yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKKy8qIE1haW4gY2FsbGJhY2sgZm9yIHRoZXJtYWwgcmYgZ2FpbiBjYWxpYnJhdGlvbiBlbmdpbmUKKyAqIENoZWNrIGZvciBhIG5ldyBnYWluIHJlYWRpbmcgYW5kIHNjaGVkdWxlIGFuIGFkanVzdG1lbnQKKyAqIGlmIG5lZWRlZC4KKyAqCisgKiBUT0RPOiBVc2Ugc3cgaW50ZXJydXB0IHRvIHNjaGVkdWxlIHJlc2V0IGlmIGdhaW5fRiBuZWVkcworICogYWRqdXN0bWVudCAqLworZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2FpbmZfY2FsaWJyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CisJdTMyIGRhdGEsIHR5cGU7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0JdTMyICpyZjsKLQljb25zdCB1bnNpZ25lZCBpbnQgcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzUxMTEpOwotCXVuc2lnbmVkIGludCBpOwotCWludCBvYmRiID0gLTEsIGJhbmsgPSAtMTsKLQl1MzIgZWVfbW9kZTsKIAotCUFSNUtfQVNTRVJUX0VOVFJZKG1vZGUsIEFSNUtfTU9ERV9NQVgpOworCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKLQlyZiA9IGFoLT5haF9yZl9iYW5rczsKKwlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwgfHwKKwlhaC0+YWhfZ2Fpbi5nX3N0YXRlID09IEFSNUtfUkZHQUlOX0lOQUNUSVZFKQorCQlyZXR1cm4gQVI1S19SRkdBSU5fSU5BQ1RJVkU7CiAKLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmcmVnc181MTExW2ldLnJmX2JhbmsgPj0gQVI1S19SRjUxMTFfSU5JX1JGX01BWF9CQU5LUykgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBObyBjaGVjayByZXF1ZXN0ZWQsIGVpdGhlciBlbmdpbmUgaXMgaW5hY3RpdmUKKwkgKiBvciBhbiBhZGp1c3RtZW50IGlzIGFscmVhZHkgcmVxdWVzdGVkICovCisJaWYgKGFoLT5haF9nYWluLmdfc3RhdGUgIT0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQpCisJCWdvdG8gZG9uZTsKKworCS8qIFJlYWQgdGhlIFBBUEQgKFBlYWsgdG8gQXZlcmFnZSBQb3dlciBEZXRlY3RvcikKKwkgKiByZWdpc3RlciAqLworCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7CisKKwkvKiBObyBwcm9iZSBpcyBzY2hlZHVsZWQsIHJlYWQgZ2Fpbl9GIG1lYXN1cmVtZW50ICovCisJaWYgKCEoZGF0YSAmIEFSNUtfUEhZX1BBUERfUFJPQkVfVFhfTkVYVCkpIHsKKwkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0gZGF0YSA+PiBBUjVLX1BIWV9QQVBEX1BST0JFX0dBSU5GX1M7CisJCXR5cGUgPSBBUjVLX1JFR19NUyhkYXRhLCBBUjVLX1BIWV9QQVBEX1BST0JFX1RZUEUpOworCisJCS8qIElmIHR4IHBhY2tldCBpcyBDQ0sgY29ycmVjdCB0aGUgZ2Fpbl9GIG1lYXN1cmVtZW50CisJCSAqIGJ5IGNjayBvZmRtIGdhaW4gZGVsdGEgKi8KKwkJaWYgKHR5cGUgPT0gQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFX0NDSykgeworCQkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpCisJCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ICs9CisJCQkJCWVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhOworCQkJZWxzZQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPQorCQkJCQlBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlI7CiAJCX0KIAotCQlpZiAoYmFuayAhPSByZnJlZ3NfNTExMVtpXS5yZl9iYW5rKSB7Ci0JCQliYW5rID0gcmZyZWdzXzUxMTFbaV0ucmZfYmFuazsKLQkJCWFoLT5haF9vZmZzZXRbYmFua10gPSBpOworCQkvKiBGdXJ0aGVyIGNvcnJlY3QgZ2Fpbl9GIG1lYXN1cmVtZW50IGZvcgorCQkgKiBSRjUxMTJBIHJhZGlvcyAqLworCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJYXRoNWtfaHdfcmZfZ2FpbmZfY29ycihhaCk7CisJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2ZfY29yciA/CisJCQkJKGFoLT5haF9nYWluLmdfY3VycmVudC1haC0+YWhfZ2Fpbi5nX2ZfY29ycikgOgorCQkJCTA7CiAJCX0KIAotCQlyZltpXSA9IHJmcmVnc181MTExW2ldLnJmX3ZhbHVlW21vZGVdOworCQkvKiBDaGVjayBpZiBtZWFzdXJlbWVudCBpcyBvayBhbmQgaWYgd2UgbmVlZAorCQkgKiB0byBhZGp1c3QgZ2Fpbiwgc2NoZWR1bGUgYSBnYWluIGFkanVzdG1lbnQsCisJCSAqIGVsc2Ugc3dpdGNoIGJhY2sgdG8gdGhlIGFjaXZlIHN0YXRlICovCisJCWlmIChhdGg1a19od19yZl9jaGVja19nYWluZl9yZWFkYmFjayhhaCkgJiYKKwkJQVI1S19HQUlOX0NIRUNLX0FESlVTVCgmYWgtPmFoX2dhaW4pICYmCisJCWF0aDVrX2h3X3JmX2dhaW5mX2FkanVzdChhaCkpIHsKKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCX0KIAl9CiAKLQkvKiBNb2RpZnkgYmFuayAwICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQllbHNlCi0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7Ci0JCW9iZGIgPSAwOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzBdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMTE5LCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzBdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMTIyLCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW9iZGIgPSAxOwotCS8qIE1vZGlmeSBiYW5rIDYgKi8KLQl9IGVsc2UgewotCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0JIGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKLQkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgotCQkJIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX3B3ZF84NCwgMSwgNTEsIDMsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX3B3ZF85MCwgMSwgNDUsIDMsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkhZWUtPmVlX3hwZFtlZV9tb2RlXSwgMSwgOTUsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwgNCwgOTYsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLCBvYmRiID49IDAgPwotCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdIDogMCwgMywgMTA0LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwgb2JkYiA+PSAwID8KLQkJCWVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSA6IDAsIDMsIDEwNywgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTW9kaWZ5IGJhbmsgNyAqLwotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwgNiwgMjksIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX3hwZFtlZV9tb2RlXSwgMSwgNCwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogV3JpdGUgUkYgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewotCQlBUjVLX1JFR19XQUlUKGkpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmW2ldLCByZnJlZ3NfNTExMVtpXS5yZl9yZWdpc3Rlcik7Ci0JfQotCi0JcmV0dXJuIDA7Citkb25lOgorCXJldHVybiBhaC0+YWhfZ2Fpbi5nX3N0YXRlOwogfQogCi0vKgotICogUmVhZCBFRVBST00gQ2FsaWJyYXRpb24gZGF0YSwgbW9kaWZ5IFJGIEJhbmtzIGFuZCBJbml0aWFsaXplIFJGNTExMgotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X3JmNTExMl9yZnJlZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmICpyZl9pbmk7Ci0Jc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0JdTMyICpyZjsKLQl1bnNpZ25lZCBpbnQgcmZfc2l6ZSwgaTsKLQlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7Ci0JdTMyIGVlX21vZGU7Ci0KLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKLQotCXJmID0gYWgtPmFoX3JmX2JhbmtzOwotCi0JaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfMjExMkEKLQkJJiYgIXRlc3RfYml0KEFSNUtfTU9ERV8xMUEsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpKSB7Ci0JCXJmX2luaSA9IHJmcmVnc18yMTEyYTsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzUxMTJhKTsKLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLAotCQkJCSAgbW9kZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQltb2RlID0gbW9kZSAtIDI7IC8qbm8gYS90dXJib2EgbW9kZXMgZm9yIDIxMTIqLwotCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgewotCQlyZl9pbmkgPSByZnJlZ3NfNTExMmE7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyYSk7Ci0JfSBlbHNlIHsKLQkJcmZfaW5pID0gcmZyZWdzXzUxMTI7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyKTsKLQl9Ci0KLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmX2luaVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTEyX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoYmFuayAhPSByZl9pbmlbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmX2luaVtpXS5yZl9iYW5rOwotCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7Ci0JCX0KLQotCQlyZltpXSA9IHJmX2luaVtpXS5yZl92YWx1ZVttb2RlXTsKLQl9Ci0KLQkvKiBNb2RpZnkgYmFuayA2ICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKLQkJZWxzZQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQlvYmRiID0gMDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI4NywgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI5MCwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgKi8KLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlvYmRiID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTcyNSA/IDMgOgotCQkgICAgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU1MDAgPyAyIDoKLQkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1MjYwID8gMSA6Ci0JCQkgICAgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID4gNDAwMCA/IDAgOiAtMSkpKTsKLQotCQlpZiAob2JkYiA9PSAtMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMjc5LCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwgMywgMjgyLCAwLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkgICAgZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwgMiwgMjcwLCAwLCB0cnVlKTsKLQlhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JICAgIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDIsIDI1NywgMCwgdHJ1ZSk7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDMwMiwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogTW9kaWZ5IGJhbmsgNyAqLwotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLAotCQkJZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwgNiwgMTQsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmZbaV0sIHJmX2luaVtpXS5yZl9yZWdpc3Rlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgUkY1NDEzLzU0MTQgYW5kIGZ1dHVyZSBjaGlwcwotICogKHVudGlsIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBzb2x1dGlvbikKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjU0MTNfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiAqcmZfaW5pOwotCXUzMiAqcmY7Ci0JdW5zaWduZWQgaW50IHJmX3NpemUsIGk7Ci0JaW50IGJhbmsgPSAtMTsKLQotCUFSNUtfQVNTRVJUX0VOVFJZKG1vZGUsIEFSNUtfTU9ERV9NQVgpOwotCi0JcmYgPSBhaC0+YWhfcmZfYmFua3M7Ci0KLQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewotCWNhc2UgQVI1S19SRjU0MTM6Ci0JCXJmX2luaSA9IHJmcmVnc181NDEzOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTQxMyk7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MTM6Ci0JCXJmX2luaSA9IHJmcmVnc18yNDEzOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQxMyk7Ci0KLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltb2RlID0gbW9kZSAtIDI7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MjU6Ci0JCXJmX2luaSA9IHJmcmVnc18yNDI1OwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfMjQyNSk7Ci0KLQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIGNoYW5uZWwgbW9kZTogJWlcbiIsIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBNYXAgYiB0byBnICovCi0JCWlmIChtb2RlID09IDIpCi0JCQltb2RlID0gMDsKLQkJZWxzZQotCQkJbW9kZSA9IG1vZGUgLSAzOwotCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENvcHkgdmFsdWVzIHRvIG1vZGlmeSB0aGVtICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykgewotCQlpZiAocmZfaW5pW2ldLnJmX2JhbmsgPj0gQVI1S19SRjUxMTJfSU5JX1JGX01BWF9CQU5LUykgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChiYW5rICE9IHJmX2luaVtpXS5yZl9iYW5rKSB7Ci0JCQliYW5rID0gcmZfaW5pW2ldLnJmX2Jhbms7Ci0JCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKLQkJfQotCi0JCXJmW2ldID0gcmZfaW5pW2ldLnJmX3ZhbHVlW21vZGVdOwotCX0KLQotCS8qCi0JICogQWZ0ZXIgY29tcGFpcmluZyBkdW1wcyBmcm9tIGRpZmZlcmVudCBjYXJkcwotCSAqIHdlIGdldCB0aGUgc2FtZSBSRl9CVUZGRVIgc2V0dGluZ3MgKGRpZmYgcmV0dXJucwotCSAqIDAgbGluZXMpLiBJdCBzZWVtcyB0aGF0IFJGX0JVRkZFUiBzZXR0aW5ncyBhcmUgc3RhdGljCi0JICogYW5kIGFyZSB3cml0dGVuIHVubW9kaWZpZWQgKG5vIEVFUFJPTSBzdHVmZgotCSAqIGlzIHVzZWQgYmVjYXVzZSBjYWxpYnJhdGlvbiBkYXRhIHdvdWxkIGJlCi0JICogZGlmZmVyZW50IGJldHdlZW4gZGlmZmVyZW50IGNhcmRzIGFuZCB3b3VsZCByZXN1bHQKLQkgKiBkaWZmZXJlbnQgUkZfQlVGRkVSIHNldHRpbmdzKQotCSAqLwotCi0JLyogV3JpdGUgUkYgdmFsdWVzICovCi0JZm9yIChpID0gMDsgaSA8IHJmX3NpemU7IGkrKykKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZltpXSwgcmZfaW5pW2ldLnJmX3JlZ2lzdGVyKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBSRgotICovCi1pbnQgYXRoNWtfaHdfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JaW50ICgqZnVuYykoc3RydWN0IGF0aDVrX2h3ICosIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQpOwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewotCWNhc2UgQVI1S19SRjUxMTE6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTExKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTExMV9yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjUxMTI6Ci0JCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzUxMTJBKQotCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzUxMTJhKTsKLQkJZWxzZQotCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzUxMTIpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1MTEyX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGNTQxMzoKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzU0MTMpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQxMzoKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzI0MTMpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQyNToKLQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBzaXplb2YocmZyZWdzXzI0MjUpOwotCQlmdW5jID0gYXRoNWtfaHdfcmY1NDEzX3JmcmVnczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7Ci0JCS8qIFhYWCBkbyBleHRyYSBjaGVja3M/ICovCi0JCWFoLT5haF9yZl9iYW5rcyA9IGttYWxsb2MoYWgtPmFoX3JmX2JhbmtzX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCi0JcmV0ID0gZnVuYyhhaCwgY2hhbm5lbCwgbW9kZSk7Ci0JaWYgKCFyZXQpCi0JCWFoLT5haF9yZl9nYWluID0gQVI1S19SRkdBSU5fSU5BQ1RJVkU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYXRoNWtfaHdfcmZnYWluKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKQorLyogV3JpdGUgaW5pdGlhbCByZiBnYWluIHRhYmxlIHRvIHNldCB0aGUgUkYgc2Vuc2l0aXZpdHkKKyAqIHRoaXMgb25lIHdvcmtzIG9uIGFsbCBSRiBjaGlwcyBhbmQgaGFzIG5vdGhpbmcgdG8gZG8KKyAqIHdpdGggZ2Fpbl9GIGNhbGlicmF0aW9uICovCitpbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpCiB7CiAJY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gKmF0aDVrX3JmZzsKIAl1bnNpZ25lZCBpbnQgaSwgc2l6ZTsKQEAgLTE2NDksMTkgKzQ1MywyMiBAQAogCQlhdGg1a19yZmcgPSByZmdhaW5fNTExMjsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzUxMTIpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyNDEzOgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOworCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE2OgorCQlhdGg1a19yZmcgPSByZmdhaW5fMjMxNjsKKwkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzIzMTYpOworCQlicmVhazsKIAljYXNlIEFSNUtfUkY1NDEzOgogCQlhdGg1a19yZmcgPSByZmdhaW5fNTQxMzsKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzU0MTMpOwogCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDEzOgotCQlhdGg1a19yZmcgPSByZmdhaW5fMjQxMzsKLQkJc2l6ZSA9IEFSUkFZX1NJWkUocmZnYWluXzI0MTMpOwotCQlmcmVxID0gMDsgLyogb25seSAyR2h6ICovCi0JCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTc6CiAJY2FzZSBBUjVLX1JGMjQyNToKIAkJYXRoNWtfcmZnID0gcmZnYWluXzI0MjU7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDI1KTsKLQkJZnJlcSA9IDA7IC8qIG9ubHkgMkdoeiAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2ODQsNzMgKzQ5MSwzMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZW51bSBhdGg1a19yZmdhaW4gYXRoNWtfaHdfZ2V0X3JmX2dhaW4oc3RydWN0IGF0aDVrX2h3ICphaCkKKworCisvKioqKioqKioqKioqKioqKioqKipcCisqIFJGIFJlZ2lzdGVycyBzZXR1cCAqCitcKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIFNldHVwIFJGIHJlZ2lzdGVycyBieSB3cml0aW5nIHJmIGJ1ZmZlciBvbiBodworICovCitpbnQgYXRoNWtfaHdfcmZyZWdzX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQl1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQl1MzIgZGF0YSwgdHlwZTsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzOworCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgKmluaV9yZmI7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0X3N0ZXAgKmdfc3RlcDsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwl1OCBlZV9tb2RlID0gMDsKKwl1MzIgKnJmYjsKKwlpbnQgaSwgb2JkYiA9IC0xLCBiYW5rID0gLTE7CiAKLQlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCi0JaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMIHx8ICFhaC0+YWhfZ2Fpbi5nX2FjdGl2ZSB8fAotCQkJYWgtPmFoX3ZlcnNpb24gPD0gQVI1S19BUjUyMTEpCi0JCXJldHVybiBBUjVLX1JGR0FJTl9JTkFDVElWRTsKLQotCWlmIChhaC0+YWhfcmZfZ2FpbiAhPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRCkKLQkJZ290byBkb25lOwotCi0JZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKLQotCWlmICghKGRhdGEgJiBBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQpKSB7Ci0JCWFoLT5haF9nYWluLmdfY3VycmVudCA9IGRhdGEgPj4gQVI1S19QSFlfUEFQRF9QUk9CRV9HQUlORl9TOwotCQl0eXBlID0gQVI1S19SRUdfTVMoZGF0YSwgQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFKTsKLQotCQlpZiAodHlwZSA9PSBBUjVLX1BIWV9QQVBEX1BST0JFX1RZUEVfQ0NLKQotCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ICs9IEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUjsKLQotCQlpZiAoYWgtPmFoX3JhZGlvID49IEFSNUtfUkY1MTEyKSB7Ci0JCQlhdGg1a19od19yZnJlZ3NfZ2FpbmZfY29ycihhaCk7Ci0JCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPQotCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2ZfY29yciA/Ci0JCQkJKGFoLT5haF9nYWluLmdfY3VycmVudC1haC0+YWhfZ2Fpbi5nX2ZfY29ycikgOgotCQkJCTA7Ci0JCX0KLQotCQlpZiAoYXRoNWtfaHdfcmZyZWdzX2dhaW5fcmVhZGJhY2soYWgpICYmCi0JCQkJQVI1S19HQUlOX0NIRUNLX0FESlVTVCgmYWgtPmFoX2dhaW4pICYmCi0JCQkJYXRoNWtfaHdfcmZyZWdzX2dhaW5fYWRqdXN0KGFoKSkKLQkJCWFoLT5haF9yZl9nYWluID0gQVI1S19SRkdBSU5fTkVFRF9DSEFOR0U7Ci0JfQotCi1kb25lOgotCXJldHVybiBhaC0+YWhfcmZfZ2FpbjsKLX0KLQotaW50IGF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0JLyogSW5pdGlhbGl6ZSB0aGUgZ2FpbiBvcHRpbWl6YXRpb24gdmFsdWVzICovCiAJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKIAljYXNlIEFSNUtfUkY1MTExOgotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4ID0gcmZnYWluX29wdF81MTExLmdvX2RlZmF1bHQ7Ci0JCWFoLT5haF9nYWluLmdfc3RlcCA9Ci0JCSAgICAmcmZnYWluX29wdF81MTExLmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07Ci0JCWFoLT5haF9nYWluLmdfbG93ID0gMjA7Ci0JCWFoLT5haF9nYWluLmdfaGlnaCA9IDM1OwotCQlhaC0+YWhfZ2Fpbi5nX2FjdGl2ZSA9IDE7CisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTE7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTEpOworCQlpbmlfcmZiID0gcmZiXzUxMTE7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTExMSk7CisJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1JGNTExMjoKLQkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMi5nb19kZWZhdWx0OwotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkgICAgJnJmZ2Fpbl9vcHRfNTExMi5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwotCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOwotCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSA4NTsKLQkJYWgtPmFoX2dhaW4uZ19hY3RpdmUgPSAxOworCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMmE7CisJCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTEyYSk7CisJCQlpbmlfcmZiID0gcmZiXzUxMTJhOworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81MTEyYSk7CisJCX0gZWxzZSB7CisJCQlyZl9yZWdzID0gcmZfcmVnc181MTEyOworCQkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMik7CisJCQlpbmlfcmZiID0gcmZiXzUxMTI7CisJCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzUxMTIpOworCQl9CisJCWdvID0gJnJmZ2Fpbl9vcHRfNTExMjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQxMzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQxMzsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQxMyk7CisJCWluaV9yZmIgPSByZmJfMjQxMzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNjoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjMxNjsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjMxNik7CisJCWluaV9yZmIgPSByZmJfMjMxNjsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yMzE2KTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGNTQxMzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfNTQxMzsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTQxMyk7CisJCWluaV9yZmIgPSByZmJfNTQxMzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81NDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNzoKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQyNTsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQyNSk7CisJCWluaV9yZmIgPSByZmJfMjMxNzsKKwkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yMzE3KTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQyNToKKwkJcmZfcmVncyA9IHJmX3JlZ3NfMjQyNTsKKwkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfMjQyNSk7CisJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVIyNDE3KSB7CisJCQlpbmlfcmZiID0gcmZiXzI0MjU7CisJCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzI0MjUpOworCQl9IGVsc2UgeworCQkJaW5pX3JmYiA9IHJmYl8yNDE3OworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDE3KTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBJZiBpdCdzIHRoZSBmaXJzdCB0aW1lIHdlIHNldCByZiBidWZmZXIsIGFsbG9jYXRlCisJICogYWgtPmFoX3JmX2JhbmtzIGJhc2VkIG9uIGFoLT5haF9yZl9iYW5rc19zaXplCisJICogd2Ugc2V0IGFib3ZlICovCisJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7CisJCWFoLT5haF9yZl9iYW5rcyA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiBhaC0+YWhfcmZfYmFua3Nfc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLworCXJmYiA9IGFoLT5haF9yZl9iYW5rczsKKworCWZvciAoaSA9IDA7IGkgPCBhaC0+YWhfcmZfYmFua3Nfc2l6ZTsgaSsrKSB7CisJCWlmIChpbmlfcmZiW2ldLnJmYl9iYW5rID49IEFSNUtfTUFYX1JGX0JBTktTKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBiYW5rXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogQmFuayBjaGFuZ2VkLCB3cml0ZSBkb3duIHRoZSBvZmZzZXQgKi8KKwkJaWYgKGJhbmsgIT0gaW5pX3JmYltpXS5yZmJfYmFuaykgeworCQkJYmFuayA9IGluaV9yZmJbaV0ucmZiX2Jhbms7CisJCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKKwkJfQorCisJCXJmYltpXSA9IGluaV9yZmJbaV0ucmZiX21vZGVfZGF0YVttb2RlXTsKKwl9CisKKwkvKiBTZXQgT3V0cHV0IGFuZCBEcml2ZXIgYmlhcyBjdXJyZW50IChPQi9EQikgKi8KKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKKwkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKKwkJZWxzZQorCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCisJCS8qIEZvciBSRjUxMVgvUkYyMTFYIGNvbWJpbmF0aW9uIHdlCisJCSAqIHVzZSBiX09CIGFuZCBiX0RCIHBhcmFtZXRlcnMgc3RvcmVkCisJCSAqIGluIGVlcHJvbSBvbiBlZS0+ZWVfb2JbZWVfbW9kZV1bMF0KKwkJICoKKwkJICogRm9yIGFsbCBvdGhlciBjaGlwcyB3ZSB1c2UgT0IvREIgZm9yIDJHaHoKKwkJICogc3RvcmVkIGluIHRoZSBiL2cgbW9kYWwgc2VjdGlvbiBqdXN0IGxpa2UKKwkJICogODAyLjExYSBvbiBlZS0+ZWVfb2JbZWVfbW9kZV1bMV0gKi8KKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpKQorCQkJb2JkYiA9IDA7CisJCWVsc2UKKwkJCW9iZGIgPSAxOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9PQl8yR0haLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfREJfMkdIWiwgdHJ1ZSk7CisKKwkvKiBSRjUxMTEgYWx3YXlzIG5lZWRzIE9CL0RCIGZvciA1R0h6LCBldmVuIGlmIHdlIHVzZSAyR0h6ICovCisJfSBlbHNlIGlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopIHx8CisJCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSkgeworCisJCS8qIEZvciAxMWEsIFR1cmJvIGFuZCBYUiB3ZSBuZWVkIHRvIGNob29zZQorCQkgKiBPQi9EQiBiYXNlZCBvbiBmcmVxdWVuY3kgcmFuZ2UgKi8KKwkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOworCQlvYmRiID0JIGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKKwkJCShjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgorCQkJIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7CisKKwkJaWYgKG9iZGIgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sCisJCQkJCQlBUjVLX1JGX09CXzVHSFosIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2RiW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9EQl81R0haLCB0cnVlKTsKKwl9CisKKwlnX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CisKKwkvKiBCYW5rIE1vZGlmaWNhdGlvbnMgKGNoaXAtc3BlY2lmaWMpICovCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgeworCisJCS8qIFNldCBnYWluX0Ygc2V0dGluZ3MgYWNjb3JkaW5nIHRvIGN1cnJlbnQgc3RlcCAqLworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfRlJBTUVfQ1RMLAorCQkJCQlBUjVLX1BIWV9GUkFNRV9DVExfVFhfQ0xJUCwKKwkJCQkJZ19zdGVwLT5nb3NfcGFyYW1bMF0pOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzFdLAorCQkJCQkJCUFSNUtfUkZfUFdEXzkwLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsyXSwKKwkJCQkJCQlBUjVLX1JGX1BXRF84NCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bM10sCisJCQkJCQlBUjVLX1JGX1JGR0FJTl9TRUwsIHRydWUpOworCisJCQkvKiBXZSBwcm9ncmFtbWVkIGdhaW5fRiBwYXJhbWV0ZXJzLCBzd2l0Y2ggYmFjaworCQkJICogdG8gYWN0aXZlIHN0YXRlICovCisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCisJCX0KKworCQkvKiBCYW5rIDYvNyBzZXR1cCAqLworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgIWVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BXRF9YUEQsIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX0dBSU4sIHRydWUpOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BMT19TRUwsIHRydWUpOworCisJCS8qIFRPRE86IEhhbGYvcXVhcnRlciBjaGFubmVsIHN1cHBvcnQgKi8KKwl9CisKKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB7CisKKwkJLyogU2V0IGdhaW5fRiBzZXR0aW5ncyBhY2NvcmRpbmcgdG8gY3VycmVudCBzdGVwICovCisJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkgeworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzBdLAorCQkJCQkJQVI1S19SRl9NSVhHQUlOX09WUiwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bMV0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzgsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzJdLAorCQkJCQkJQVI1S19SRl9QV0RfMTM3LCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVszXSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzNiwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bNF0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzIsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzVdLAorCQkJCQkJQVI1S19SRl9QV0RfMTMxLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVs2XSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzMCwgdHJ1ZSk7CisKKwkJCS8qIFdlIHByb2dyYW1tZWQgZ2Fpbl9GIHBhcmFtZXRlcnMsIHN3aXRjaCBiYWNrCisJCQkgKiB0byBhY3RpdmUgc3RhdGUgKi8KKwkJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCX0KKworCQkvKiBCYW5rIDYvNyBzZXR1cCAqLworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hwZFtlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX1NFTCwgdHJ1ZSk7CisKKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwgQVI1S19TUkVWX1JBRF81MTEyQSkgeworCQkJLyogUmV2LiAxIHN1cHBvcnRzIG9ubHkgb25lIHhwZCAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfWFBEX0dBSU4sIHRydWUpOworCisJCX0gZWxzZSB7CisJCQkvKiBUT0RPOiBTZXQgaGlnaCBhbmQgbG93IGdhaW4gYml0cyAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfUERfR0FJTl9MTywgdHJ1ZSk7CisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsCisJCQkJCQllZS0+ZWVfeF9nYWluW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QRF9HQUlOX0hJLCB0cnVlKTsKKworCQkJLyogTG93ZXIgc3ludGggdm9sdGFnZSBvbiBSZXYgMiAqLworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX0hJR0hfVkNfQ1AsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCisJCQkJCUFSNUtfUkZfTUlEX1ZDX0NQLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX0xPV19WQ19DUCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9QVVNIX1VQLCB0cnVlKTsKKworCQkJLyogRGVjcmVhc2UgcG93ZXIgY29uc3VtcHRpb24gb24gNTIxMysgQmFzZUJhbmQgKi8KKwkJCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1BBRDJHTkQsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9YQjJfTFZMLCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfWEI1X0xWTCwgdHJ1ZSk7CisKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1BXRF8xNjcsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QV0RfMTY2LCB0cnVlKTsKKwkJCX0KKwkJfQorCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKKworCQkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgY2hhbm5lbCBzdXBwb3J0ICovCisKKwl9CisKKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzICYmCisJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsIEFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwKKwkJCQkJCQkJCXRydWUpOworCisJCS8qIFNldCBvcHRpbXVtIHZhbHVlIGZvciBlYXJseSByZXZpc2lvbnMgKG9uIHBjaS1lIGNoaXBzKSAqLworCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQgJiYKKwkJYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTQxMykKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgYXRoNWtfaHdfYml0c3dhcCg2LCAzKSwKKwkJCQkJCUFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsIHRydWUpOworCisJfQorCisJLyogV3JpdGUgUkYgYmFua3Mgb24gaHcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX2JhbmtzX3NpemU7IGkrKykgeworCQlBUjVLX1JFR19XQUlUKGkpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmYltpXSwgaW5pX3JmYltpXS5yZmJfY3RybF9yZWdpc3Rlcik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqXAogICBQSFkvUkYgY2hhbm5lbCBmdW5jdGlvbnMKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyNzEsMTMgKzEzMzEsOCBAQAogCSAqIGFzIG9mdGVuIGFzIEkvUSBjYWxpYnJhdGlvbi4qLwogCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQkvKiBSZXF1ZXN0IFJGIGdhaW4gKi8KLQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhwb3dlci50eHBfbWF4LAotCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWFBPV0VSKSB8Ci0JCQlBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQsIEFSNUtfUEhZX1BBUERfUFJPQkUpOwotCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVEOwotCX0KKwkvKiBJbml0aWF0ZSBhIGdhaW5fRiBjYWxpYnJhdGlvbiAqLworCWF0aDVrX2h3X3JlcXVlc3RfcmZnYWluX3Byb2JlKGFoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYwppbmRleCAxYjdiYzUwLi41MDk0YzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9xY3UuYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAgKi8KIHUzMiBhdGg1a19od19udW1fdHhfcGVuZGluZyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpCiB7CisJdTMyIHBlbmRpbmc7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBUjVLX0FTU0VSVF9FTlRSWShxdWV1ZSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKTsKIApAQCAtMTU5LDcgKzE2MCwxNSBAQAogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIEFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSAmIEFSNUtfUUNVX1NUU19GUk1QRU5EQ05UOworCXBlbmRpbmcgPSAoQVI1S19RVUVVRV9TVEFUVVMocXVldWUpICYgQVI1S19RQ1VfU1RTX0ZSTVBFTkRDTlQpOworCisJLyogSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vIGZyYW1lcyBwZW5kaW5nIGV2ZW4gaWYgVFhFCisJICogaXMgc2V0LiBUbyBpbmRpY2F0ZSB0aGF0IHEgaGFzIG5vdCBzdG9wcGVkIHJldHVybgorCSAqIHRydWUgKi8KKwlpZiAoIXBlbmRpbmcgJiYgQVI1S19SRUdfUkVBRF9RKGFoLCBBUjVLX1FDVV9UWEUsIHF1ZXVlKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gcGVuZGluZzsKIH0KIAogLyoKQEAgLTMyNCw4ICszMzMsMTggQEAKIAkJLyoKIAkJICogU2V0IG1pc2MgcmVnaXN0ZXJzCiAJCSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUUNVX01JU0NfRENVX0VBUkxZLAotCQkJQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSk7CisJCS8qIEVuYWJsZSBEQ1UgZWFybHkgdGVybWluYXRpb24gZm9yIHRoaXMgcXVldWUgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfTUlTQyhxdWV1ZSksCisJCQkJCUFSNUtfUUNVX01JU0NfRENVX0VBUkxZKTsKKworCQkvKiBFbmFibGUgRENVIHRvIHdhaXQgZm9yIG5leHQgZnJhZ21lbnQgZnJvbSBRQ1UgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAorCQkJCQlBUjVLX0RDVV9NSVNDX0ZSQUdfV0FJVCk7CisKKwkJLyogT24gTWF1aSBhbmQgU3Bpcml0IHVzZSB0aGUgZ2xvYmFsIHNlcW51bSBvbiBEQ1UgKi8KKwkJaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA8IEFSNUtfU1JFVl9BUjUyMTEpCisJCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9ERlNfTUlTQyhxdWV1ZSksCisJCQkJCQlBUjVLX0RDVV9NSVNDX1NFUU5VTV9DVEwpOwogCiAJCWlmICh0cS0+dHFpX2Nicl9wZXJpb2QpIHsKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9jYnJfcGVyaW9kLApAQCAtMzQxLDcgKzM2MCw4IEBACiAJCQkJCUFSNUtfUUNVX01JU0NfQ0JSX1RIUkVTX0VOQUJMRSk7CiAJCX0KIAotCQlpZiAodHEtPnRxaV9yZWFkeV90aW1lKQorCQlpZiAodHEtPnRxaV9yZWFkeV90aW1lICYmCisJCSh0cS0+dHFpX3R5cGUgIT0gQVI1S19UWF9RVUVVRV9JRF9DQUIpKQogCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTSh0cS0+dHFpX3JlYWR5X3RpbWUsCiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19JTlRWQUwpIHwKIAkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0VOQUJMRSwKQEAgLTM4MywxMyArNDAzLDYgQEAKIAkJCQlBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX1MpIHwKIAkJCQlBUjVLX0RDVV9NSVNDX1BPU1RfRlJfQktPRkZfRElTIHwKIAkJCQlBUjVLX0RDVV9NSVNDX0JDTl9FTkFCTEUpOwotCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19UVU5FX0JFQUNPTl9JTlRFUlZBTCAtCi0JCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCi0JCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQotCQkJCUFSNUtfVFVORV9BRERJVElPTkFMX1NXQkFfQkFDS09GRikgKiAxMDI0KSB8Ci0JCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCi0JCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CiAJCQlicmVhazsKIAogCQljYXNlIEFSNUtfVFhfUVVFVUVfQ0FCOgpAQCAtMzk4LDYgKzQxMSwxMyBAQAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0RJUyB8CiAJCQkJQVI1S19RQ1VfTUlTQ19DQlJFWFBfQkNOX0RJUyk7CiAKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKChBUjVLX1RVTkVfQkVBQ09OX0lOVEVSVkFMIC0KKwkJCQkoQVI1S19UVU5FX1NXX0JFQUNPTl9SRVNQIC0KKwkJCQlBUjVLX1RVTkVfRE1BX0JFQUNPTl9SRVNQKSAtCisJCQkJQVI1S19UVU5FX0FERElUSU9OQUxfU1dCQV9CQUNLT0ZGKSAqIDEwMjQpIHwKKwkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0VOQUJMRSwKKwkJCQlBUjVLX1FVRVVFX1JEWVRJTUVDRkcocXVldWUpKTsKKwogCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAogCQkJCShBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX0dMT0JBTCA8PAogCQkJCUFSNUtfRENVX01JU0NfQVJCTE9DS19DVExfUykpOwpAQCAtNDEzLDYgKzQzMyw4IEBACiAJCQlicmVhazsKIAkJfQogCisJCS8qIFRPRE86IEhhbmRsZSBmcmFtZSBjb21wcmVzc2lvbiAqLworCiAJCS8qCiAJCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIHR4IHF1ZXVlCiAJCSAqIGluIHRoZSBzZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzCkBAIC00ODMsNiArNTA1LDkgQEAKIAkJICogYnkgc2V0dGluZyBBUjVLX1RYTk9GUk0gdG8gemVybyAqLwogCQlpZiAoYWgtPmFoX3R4cV9pbXJfbm9mcm0gPT0gMCkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19UWE5PRlJNKTsKKworCQkvKiBTZXQgUUNVIG1hc2sgZm9yIHRoaXMgRENVIHRvIHNhdmUgcG93ZXIgKi8KKwkJQVI1S19SRUdfV1JJVEVfUShhaCwgQVI1S19RVUVVRV9RQ1VNQVNLKHF1ZXVlKSwgcXVldWUpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWcuaAppbmRleCA5MTg5YWIxLi4yZGMwMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZWcuaApAQCAtMTg3LDYgKzE4Nyw3IEBACiAjZGVmaW5lIEFSNUtfVFhDRkdfRlJNUEFEX0RJUwkJMHgwMDAwMjAwMAkvKiBbNTIxMStdICovCiAjZGVmaW5lIEFSNUtfVFhDRkdfUkRZX0NCUl9ESVMJCTB4MDAwMDQwMDAJLyogUmVhZHkgdGltZSBDQlIgZGlzYWJsZSBbNTIxMStdICovCiAjZGVmaW5lIEFSNUtfVFhDRkdfSlVNQk9fRlJNX01PREUJMHgwMDAwODAwMAkvKiBKdW1ibyBmcmFtZSBtb2RlIFs1MjExK10gKi8KKyNkZWZpbmUJQVI1S19UWENGR19EQ1VfREJMX0JVRl9ESVMJMHgwMDAwODAwMAkvKiBEaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgb24gRENVICovCiAjZGVmaW5lIEFSNUtfVFhDRkdfRENVX0NBQ0hJTkdfRElTCTB4MDAwMTAwMDAJLyogRGlzYWJsZSBEQ1UgY2FjaGluZyAqLwogCiAvKgpAQCAtNzUzLDcgKzc1NCw3IEBACiAgKi8KICNkZWZpbmUgQVI1S19EQ1VfU0VRTlVNX0JBU0UJCTB4MTE0MAogI2RlZmluZQlBUjVLX0RDVV9TRVFOVU1fTQkJMHgwMDAwMGZmZgotI2RlZmluZQlBUjVLX1FVRVVFX0RGU19TRVFOVU0oX3EpCUFSNUtfUVVFVUVfUkVHKEFSNUtfRENVX1NFUU5VTV9CQVNFLCBfcSkKKyNkZWZpbmUJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKF9xKQlBUjVLX1FVRVVFX1JFRyhBUjVLX0RDVV9TRVFOVU1fQkFTRSwgX3EpCiAKIC8qCiAgKiBEQ1UgZ2xvYmFsIElGUyBTSUZTIHJlZ2lzdGVyCkBAIC04MTEsNiArODEyLDggQEAKIAogLyoKICAqIERDVSB0cmFuc21pdCBmaWx0ZXIgdGFibGUgMCAoMzIgZW50cmllcykKKyAqIGVhY2ggZW50cnkgY29udGFpbnMgYSAzMmJpdCBzbGljZSBvZiB0aGUKKyAqIDEyOGJpdCB0eCBmaWx0ZXIgZm9yIGVhY2ggRENVICg0IHNsaWNlcyBwZXIgRENVKQogICovCiAjZGVmaW5lIEFSNUtfRENVX1RYX0ZJTFRFUl8wX0JBU0UJMHgxMDM4CiAjZGVmaW5lCUFSNUtfRENVX1RYX0ZJTFRFUl8wKF9uKQkoQVI1S19EQ1VfVFhfRklMVEVSXzBfQkFTRSArIChfbiAqIDY0KSkKQEAgLTgxOSw3ICs4MjIsNyBAQAogICogRENVIHRyYW5zbWl0IGZpbHRlciB0YWJsZSAxICgxNiBlbnRyaWVzKQogICovCiAjZGVmaW5lIEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UJMHgxMDNjCi0jZGVmaW5lCUFSNUtfRENVX1RYX0ZJTFRFUl8xKF9uKQkoQVI1S19EQ1VfVFhfRklMVEVSXzFfQkFTRSArICgoX24gLSAzMikgKiA2NCkpCisjZGVmaW5lCUFSNUtfRENVX1RYX0ZJTFRFUl8xKF9uKQkoQVI1S19EQ1VfVFhfRklMVEVSXzFfQkFTRSArIChfbiAqIDY0KSkKIAogLyoKICAqIERDVSBjbGVhciB0cmFuc21pdCBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE0NDcsNyArMTQ1MCw3IEBACiAJCQkJQVI1S19UU0ZfVTMyXzUyMTAgOiBBUjVLX1RTRl9VMzJfNTIxMSkKIAogLyoKLSAqIExhc3QgYmVhY29uIHRpbWVzdGFtcCByZWdpc3RlcgorICogTGFzdCBiZWFjb24gdGltZXN0YW1wIHJlZ2lzdGVyIChSZWFkIE9ubHkpCiAgKi8KICNkZWZpbmUgQVI1S19MQVNUX1RTVFAJMHg4MDgwCiAKQEAgLTE0NjUsNyArMTQ2OCw3IEBACiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9UUklHX1BUWQkweDAwMDIwMDAwCS8qIFRyaWdnZXIgcG9sYXJpdHkgKi8KICNkZWZpbmUgQVI1S19BRERBQ19URVNUX1JYQ09OVAkJMHgwMDA0MDAwMAkvKiBDb250aW51b3VzIGNhcHR1cmUgKi8KICNkZWZpbmUgQVI1S19BRERBQ19URVNUX0NBUFRVUkUJCTB4MDAwODAwMDAJLyogQmVnaW4gY2FwdHVyZSAqLwotI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFNUX0FSTQkJMHgwMDEwMDAwMAkvKiBUZXN0IEFSTSAoQWRhcHRpdmUgUmFkaW8gTW9kZSA/KSAqLworI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFNUX0FSTQkJMHgwMDEwMDAwMAkvKiBBUk0gcnggYnVmZmVyIGZvciBjYXB0dXJlICovCiAKIC8qCiAgKiBEZWZhdWx0IGFudGVubmEgcmVnaXN0ZXIgWzUyMTErXQpAQCAtMTY3Nyw3ICsxNjgwLDcgQEAKICAqIFRTRiBwYXJhbWV0ZXIgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNCQkJMHg4MTA0CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19NCQkweDAwMDAwMGZmCS8qIE1hc2sgZm9yIFRTRiBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQVI1S19UU0ZfUEFSTV9JTkMJCTB4MDAwMDAwZmYJLyogTWFzayBmb3IgVFNGIGluY3JlbWVudCAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19TCQkwCiAKIC8qCkBAIC0xNjg5LDcgKzE2OTIsNyBAQAogI2RlZmluZSBBUjVLX1FPU19OT0FDS19CSVRfT0ZGU0VUCTB4MDAwMDAwNzAJLyogPz8/ICovCiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVRfUwk0CiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUCTB4MDAwMDAxODAJLyogPz8/ICovCi0jZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUX1MJOAorI2RlZmluZSBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVF9TCTcKIAogLyoKICAqIFBIWSBlcnJvciBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE4NDgsMTUgKzE4NTEsMTQgQEAKICAqIFRTVF8yIChNaXNjIGNvbmZpZyBwYXJhbWV0ZXJzKQogICovCiAjZGVmaW5lCUFSNUtfUEhZX1RTVDIJCQkweDk4MDAJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJR19TRUwJCTB4MDAwMDAwMDEJLyogVHJpZ2dlciBzZWxlY3QgKD8pIChmaWVsZCA/KSAqLwotI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUcJCTB4MDAwMDAwMTAJLyogVHJpZ2dlciAoPykgKGZpZWxkID8pICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0JVU19NT0RFCQkweDAwMDAwMTAwCS8qIENhcmRidXMgbW9kZSAoPykgKi8KLS8qIGJpdCByZXNlcnZlZCAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUdfU0VMCQkweDAwMDAwMDA3CS8qIFRyaWdnZXIgc2VsZWN0ICg/KSovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJRwkJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyICg/KSAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX0NCVVNfTU9ERQkJMHgwMDAwMDA2MAkvKiBDYXJkYnVzIG1vZGUgKD8pICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0xLMzIJCTB4MDAwMDA0MDAJLyogQ0xLX09VVCBpcyBDTEszMiAoMzJLaHogZXh0ZXJuYWwpICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0hBTkNPUl9EVU1QX0VOCTB4MDAwMDA4MDAJLyogRW5hYmxlIENoYW5jb3IgZHVtcCAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9FVkVOX0NIQU5DT1JfRFVNUAkweDAwMDAxMDAwCS8qIEV2ZW4gQ2hhbmNvciBkdW1wICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1JGU0lMRU5UX0VOCTB4MDAwMDIwMDAJLyogRW5hYmxlIFJGU0lMRU5UICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2gpICovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2ggPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9NSU5JX09CU19FTgkweDAwMDA4MDAwCS8qIEVuYWJsZSBtaW5pIE9CUyAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9SWDJfSVNfUlg1X0lOVgkweDAwMDEwMDAwCS8qIDJHSHogcnggcGF0aCBpcyB0aGUgNUdIeiBwYXRoIGludmVydGVkICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1NMT1dfQ0xLMTYwCTB4MDAwMjAwMDAJLyogU2xvdyBDTEsxNjAgKD8pICovCkBAIC0xOTI2LDggKzE5MjgsOCBAQAogI2RlZmluZQlBUjVLX1BIWV9SRl9DVEwyX1RYRjJUWERfU1RBUlRfUwkwCiAKICNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMMwkJMHg5ODI4CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1BIWV9SRl9DVEwzX1RYRTJYTE5BX09OCTB4MDAwMDAwMGYJLyogVFggZW5kIHRvIFhMTkEgb24gKi8KLSNkZWZpbmUJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTl9TCTAKKyNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTgkweDAwMDBmZjAwCS8qIFRYIGVuZCB0byBYTE5BIG9uICovCisjZGVmaW5lCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT05fUwk4CiAKICNkZWZpbmUJQVI1S19QSFlfQURDX0NUTAkJCTB4OTgyYwogI2RlZmluZQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PRkYJCTB4MDAwMDAwMDMKQEAgLTE5NjEsNyArMTk2Myw3IEBACiAjZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5HX0FHQwkJMHgwMDAwMDA3ZgkvKiBBR0Mgc2V0dGxpbmcgdGltZSAqLwogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19BR0NfUwkJMAogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gJMHgwMDAwM2Y4MAkvKiBTd2l0Y2ggc2V0dGxpZyB0aW1lICovCi0jZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5LX1NXSVRDSF9TCTcKKyNkZWZpbmUJQVI1S19QSFlfU0VUVExJTkdfU1dJVENIX1MJNwogCiAvKgogICogUEhZIEdhaW4gcmVnaXN0ZXJzCkBAIC0yMDY3LDE0ICsyMDY5LDE0IEBACiAgKiBQSFkgc2xlZXAgcmVnaXN0ZXJzIFs1MTEyK10KICAqLwogI2RlZmluZSBBUjVLX1BIWV9TQ1IJCQkweDk4NzAKLSNkZWZpbmUgQVI1S19QSFlfU0NSXzMyTUhaCQkweDAwMDAwMDFmCiAKICNkZWZpbmUgQVI1S19QSFlfU0xNVAkJCTB4OTg3NAogI2RlZmluZSBBUjVLX1BIWV9TTE1UXzMyTUhaCQkweDAwMDAwMDdmCiAKICNkZWZpbmUgQVI1S19QSFlfU0NBTAkJCTB4OTg3OAogI2RlZmluZSBBUjVLX1BIWV9TQ0FMXzMyTUhaCQkweDAwMDAwMDBlCi0KKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3CTB4MDAwMDAwMGEKKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzCTB4MDAwMDAwMzIKIAogLyoKICAqIFBIWSBQTEwgKFBoYXNlIExvY2tlZCBMb29wKSBjb250cm9sIHJlZ2lzdGVyCkBAIC0yMTAxLDM0ICsyMTAzLDEwIEBACiAvKgogICogUkYgQnVmZmVyIHJlZ2lzdGVyCiAgKgotICogVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjb250cm9sIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAotICogdGhhdCBob2xkIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCi0gKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KLSAqCi0gKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0Ci0gKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGJ1ZmZlciByZWdpc3RlciBhbmQKLSAqIHRoZW4gd3JpdGUgb24gYW5vdGhlciBzcGVjaWFsIHJlZ2lzdGVyIHRvIG5vdGlmeSBodwotICogdG8gYXBwbHkgdGhlIHNldHRpbmdzLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBjb250cm9sIHJlZ2lzdGVycwotICogY2FuIGJlIGR5bmFtaWNhbHkgcHJvZ3JhbW1lZCBkdXJpbmcgb3BlcmF0aW9uIGFuZCB0aGUgc2V0dGluZ3MKLSAqIGFyZSBhcHBsaWVkIGZhc3RlciBvbiB0aGUgaHcuCi0gKgotICogV2Ugc2VudCBzdWNoIGRhdGEgcGFja2V0cyBkdXJpbmcgcmYgaW5pdGlhbGl6YXRpb24gYW5kIGNoYW5uZWwgY2hhbmdlCi0gKiB0aHJvdWdoIGF0aDVrX2h3X3JmKl9yZnJlZ3MgYW5kIGF0aDVrX2h3X3JmKl9jaGFubmVsIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgZGF0YSBwYWNrZXRzIHdlIHNlbmQgZHVyaW5nIGluaXRpYWxpemFkaW9uIGFyZSBpbnNpZGUgYXRoNWtfaW5pX3JmCi0gKiBzdHJ1Y3QgKHNlZSBhdGg1a19ody5oKSBhbmQgZWFjaCBvbmUgaXMgcmVsYXRlZCB0byBhbiAicmYgcmVnaXN0ZXIgYmFuayIuCi0gKiBXZSB1c2UgKnJmcmVncyBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZW0gIGFjb3JkaW5nIHRvIGN1cnJlbnQgb3BlcmF0aW9uCi0gKiBtb2RlIGFuZCBlZXByb20gdmFsdWVzIGFuZCBwYXNzIHRoZW0gYWxsIHRvZ2V0aGVyIHRvIHRoZSBjaGlwLgotICoKICAqIEl0J3Mgb2J2aW91cyBmcm9tIHRoZSBjb2RlIHRoYXQgMHg5ODljIGlzIHRoZSBidWZmZXIgcmVnaXN0ZXIgYnV0CiAgKiBmb3IgdGhlIG90aGVyIHNwZWNpYWwgcmVnaXN0ZXJzIHRoYXQgd2Ugd3JpdGUgdG8gYWZ0ZXIgc2VuZGluZyBlYWNoCiAgKiBwYWNrZXQsIGkgaGF2ZSBubyBpZGVhLiBTbyBpJ2xsIG5hbWUgdGhlbSBCVUZGRVJfQ09OVFJPTF9YIHJlZ2lzdGVycwogICogZm9yIG5vdy4gSXQncyBpbnRlcmVzdGluZyB0aGF0IHRoZXkgYXJlIGFsc28gdXNlZCBmb3Igc29tZSBvdGhlciBvcGVyYXRpb25zLgotICoKLSAqIEFsc28gY2hlY2sgb3V0IGh3LmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgotICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6Ci0gKgotICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCiAgKi8KIAogI2RlZmluZSBBUjVLX1JGX0JVRkZFUgkJCTB4OTg5YwpAQCAtMjE3OCw3ICsyMTU2LDggQEAKICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIFRYL1JYICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9BTlRfQ1RMX1NFQ1RPUkVEX0FOVAkweDAwMDAwMDA0CS8qIFNlY3RvcmVkIEFudGVubmEgKi8KICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9ISVRVTkU1CTB4MDAwMDAwMDgJLyogSGl0dW5lNSAoPykgKi8KLSNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDAxMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDNmMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEVfUwk0CiAKIC8qCiAgKiBQSFkgcmVjZWl2ZXIgZGVsYXkgcmVnaXN0ZXIgWzUxMTErXQpAQCAtMjIxOCw3ICsyMTk3LDcgQEAKICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUgkJCTB4OTkyNAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKi8KICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIGN5Y2xpYyBSU1NJIHRociAxICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMQkweDAwMDAwMGZlCS8qIE1hc2sgZm9yIEN5Y2xpYyBSU1NJIHRocmVzaG9sZCAxICovCi0jZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMV9TCTAKKyNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX1MJMQogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjMJMHgwMDAwMDEwMAkvKiBDeWNsaWMgUlNTSSB0aHJlc2hvbGQgMyAoZmllbGQpICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX1JTU0lfMUFUSFJfRU4JMHgwMDAwODAwMAkvKiBFbmFibGUgMUEgUlNTSSB0aHJlc2hvbGQgKD8pICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfUlNTSV8xQVRIUgkweDAwMDEwMDAwCS8qIDFBIFJTU0kgdGhyZXNob2xkIChmaWVsZCkgKD8pICovCkBAIC0yMjQzLDkgKzIyMjIsNyBAQAogI2RlZmluZQlBUjVLX1BIWV9DVExfTE9XX0ZSRVFfU0xFX0VOCTB4MDAwMDAwODAJLyogRW5hYmxlIGxvdyBmcmVxIHNsZWVwICovCiAKIC8qCi0gKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMSsgKD8pXQotICogSXMgdGhpcyBvbmx5IHByZXNlbnQgaW4gNTIxMiA/Ci0gKiBCZWNhdXNlIGl0J3MgYWx3YXlzIDAgaW4gNTIxMSBpbml0aWFsaXphdGlvbiBjb2RlCisgKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMStdCiAgKi8KICNkZWZpbmUJQVI1S19QSFlfUEFQRF9QUk9CRQkJMHg5OTMwCiAjZGVmaW5lCUFSNUtfUEhZX1BBUERfUFJPQkVfU0hfSElfUEFSCTB4MDAwMDAwMDEKQEAgLTIzMDMsNiArMjI4MCwxNSBAQAogCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RJTUlOR19FUlIKIAogLyoKKyAqIFBIWSBUeCBQb3dlciBhZGp1c3RtZW50IHJlZ2lzdGVyIFs1MjEyQStdCisgKi8KKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESgkJCTB4OTk0YworI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBCTB4MDAwMDBmYzAKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfR0FJTl9ERUxUQV9TCTYKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgJMHgwMGZjMDAwMAorI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19QQ0RBQ19JTkRFWF9TCTE4CisKKy8qCiAgKiBQSFkgcmFkYXIgZGV0ZWN0aW9uIHJlZ2lzdGVyIFs1MTExK10KICAqLwogI2RlZmluZQlBUjVLX1BIWV9SQURBUgkJCTB4OTk1NApAQCAtMjM1NSw3ICsyMzQxLDcgQEAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDJfUwkzCiAjZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0ZJTFQxCTB4MDAwMDFmMDAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDFfUwk4Ci0jZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQCTB4MDFmZjMwMDAKKyNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfQURDX0NMSVAJMHgwMWZmZTAwMAogI2RlZmluZSBBUjVLX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUF9TCTEzCiAKIC8qCkBAIC0yMzg3LDIxICsyMzczLDIxIEBACiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNAkweDAwMDAzZmZmCiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNF9TCTAKIAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzkJCQkweDk5OTgKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMAkJMHg5OTljCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCTB4MDAwZmZmZmYKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR185CQkJMHg5OTk4CisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMAkJCTB4OTk5YworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCQkweDAwMGZmZmZmCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCiAKIC8qCiAgKiBTcHVyIG1pdGlnYXRpb24gY29udHJvbAogICovCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFCTB4MDAwZmZmZmYJLyogU3B1ciBkZWx0YSBwaGFzZSAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0VfUwkwCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0ZSRVFfU0RfUwkyMAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX0FHQwkweDQwMDAwMDAwCS8qIFNwdXIgZmlsdGVyIGluIEFHQyBkZXRlY3RvciAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0UJMHgwMDBmZmZmZgkvKiBTcHVyIGRlbHRhIHBoYXNlICovCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFX1MJMAorI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfRlJFUV9TRF9TCTIwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9VU0VfU1BVUl9JTl9BR0MJMHg0MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBBR0MgZGV0ZWN0b3IgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLwogCiAvKgogICogR2FpbiB0YWJsZXMKQEAgLTI0ODMsMTcgKzI0NjksNyBAQAogI2RlZmluZSBBUjVLX1BIWV9TREVMQVkJCQkweDk5ZjQKICNkZWZpbmUgQVI1S19QSFlfU0RFTEFZXzMyTUhaCQkweDAwMDAwMGZmCiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HCQkweDk5ZjgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTQJCTB4MDAwMDAwMTQKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTgJCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyCTB4MDAwMDAwMTQKLS8qICNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyQQkweDAwMDAwMDBlICovCi0vKiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQyNAkweDAwMDAwMDEyICovCi0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNgkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNQkweDAwMDAwMDE0CisKIAogLyoKICAqIFBIWSBQQVBEIEkgKHBvd2VyPykgdGFibGUgKD8pCkBAIC0yNTA1LDExICsyNDgxLDcgQEAKIC8qCiAgKiBQSFkgUENEQUMgVFggcG93ZXIgdGFibGUKICAqLwotI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMQkweGExODAKLSNkZWZpbmUgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzI0MTMJMHhhMjgwCi0jZGVmaW5lIEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRQkoYWgtPmFoX3JhZGlvID49IEFSNUtfUkYyNDEzID8gXAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfMjQxMyA6XAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMSkKKyNkZWZpbmUJQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFCTB4YTE4MAogI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCiAKIC8qCkBAIC0yNTkwLDMgKzI1NjIsOSBAQAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1X1BEX0dBSU5fQk9VTkRBUllfM19TCTE2CiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV80CTB4MEZDMDAwMDAKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzRfUwkyMgorCisvKgorICogUEhZIFBEQURDIFR4IHBvd2VyIHRhYmxlCisgKi8KKyNkZWZpbmUgQVI1S19QSFlfUERBRENfVFhQT1dFUl9CQVNFCTB4YTI4MAorI2RlZmluZQlBUjVLX1BIWV9QREFEQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUERBRENfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVzZXQuYwppbmRleCBkYzJkN2Q4Li42ODVkYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMKQEAgLTI1LDcgKzI1LDggQEAKICAgUmVzZXQgZnVuY3Rpb25zIGFuZCBoZWxwZXJzCiBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4gCQkvKiBUbyBkZXRlcm1pbmUgaWYgYSBjYXJkIGlzIHBjaS1lICovCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CS8qIEZvciBnZXRfYml0bWFza19vcmRlciAqLwogI2luY2x1ZGUgImF0aDVrLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgpAQCAtMzcsMTAgKzM4LDE0IEBACiAgKiBAYWg6IHRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKiBAY2hhbm5lbDogdGhlIGN1cnJlbnRseSBzZXQgY2hhbm5lbCB1cG9uIHJlc2V0CiAgKgotICogV3JpdGUgdGhlIE9GRE0gdGltaW5ncyBmb3IgdGhlIEFSNTIxMiB1cG9uIHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgotICogYXRoNWtfaHdfcmVzZXQoKS4gVGhpcyBzZWVtcyB0byB0dW5lIHRoZSBQTEwgYSBzcGVjaWZpZWQgZnJlcXVlbmN5Ci0gKiBkZXBlbmRpbmcgb24gdGhlIGJhbmR3aWR0aCBvZiB0aGUgY2hhbm5lbC4KKyAqIFdyaXRlIHRoZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCAodXNlZCBvbiBwaWxvdCB0cmFja2luZyA/KSBmb3IgT0ZETQorICogb3BlcmF0aW9uIG9uIHRoZSBBUjUyMTIgdXBvbiByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IgYXRoNWtfaHdfcmVzZXQoKS4KICAqCisgKiBTaW5jZSBkZWx0YSBzbG9wZSBpcyBmbG9hdGluZyBwb2ludCB3ZSBzcGxpdCBpdCBvbiBpdHMgZXhwb25lbnQgYW5kCisgKiBtYW50aXNzYSBhbmQgcHJvdmlkZSB0aGVzZSB2YWx1ZXMgb24gaHcuCisgKgorICogRm9yIG1vcmUgaW5mb3MgaSB0aGluayB0aGlzIHBhdGVudCBpcyByZWxhdGVkCisgKiBodHRwOi8vd3d3LmZyZWVwYXRlbnRzb25saW5lLmNvbS83MTg0NDk1Lmh0bWwKICAqLwogc3RhdGljIGlubGluZSBpbnQgYXRoNWtfaHdfd3JpdGVfb2ZkbV90aW1pbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQpAQCAtNTMsMjMgKzU4LDM0IEBACiAJCSEoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pKQogCQlCVUcoKTsKIAotCS8qIFNlZW1zIHRoZXJlIGFyZSB0d28gUExMcywgb25lIGZvciBiYXNlYmFuZCBzYW1wbGluZyBhbmQgb25lCi0JICogZm9yIHR1bmluZy4gVHVuaW5nIGJhc2ViYW5kcyBhcmUgNDAgTUh6IG9yIDgwTUh6IHdoZW4gaW4KLQkgKiB0dXJiby4gKi8KLQljbG9jayA9IGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTyA/IDgwIDogNDA7Ci0JY29lZl9zY2FsZWQgPSAoKDUgKiAoY2xvY2sgPDwgMjQpKSAvIDIpIC8KLQljaGFubmVsLT5jZW50ZXJfZnJlcTsKKwkvKiBHZXQgY29lZmZpY2llbnQKKwkgKiBBTEdPOiBjb2VmID0gKDUgKiBjbG9jayAqIGNhcnJpZXJfZnJlcSkgLyAyKQorCSAqIHdlIHNjYWxlIGNvZWYgYnkgc2hpZnRpbmcgY2xvY2sgdmFsdWUgYnkgMjQgZm9yCisJICogYmV0dGVyIHByZWNpc2lvbiBzaW5jZSB3ZSB1c2UgaW50ZWdlcnMgKi8KKwkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZSAqLworCWNsb2NrID0gIGF0aDVrX2h3X2h0b2Nsb2NrKDEsIGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTyk7CiAKLQlmb3IgKGNvZWZfZXhwID0gMzE7IGNvZWZfZXhwID4gMDsgY29lZl9leHAtLSkKLQkJaWYgKChjb2VmX3NjYWxlZCA+PiBjb2VmX2V4cCkgJiAweDEpCi0JCQlicmVhazsKKwljb2VmX3NjYWxlZCA9ICgoNSAqIChjbG9jayA8PCAyNCkpIC8gMikgLyBjaGFubmVsLT5jZW50ZXJfZnJlcTsKIAorCS8qIEdldCBleHBvbmVudAorCSAqIEFMR086IGNvZWZfZXhwID0gMTQgLSBoaWdoZXN0IHNldCBiaXQgcG9zaXRpb24gKi8KKwljb2VmX2V4cCA9IGdldF9iaXRtYXNrX29yZGVyKGNvZWZfc2NhbGVkKTsKKworCS8qIERvZXNuJ3QgbWFrZSBzZW5zZSBpZiBpdCdzIHplcm8qLwogCWlmICghY29lZl9leHApCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogTm90ZTogd2UndmUgc2hpZnRlZCBjb2VmX3NjYWxlZCBieSAyNCAqLwogCWNvZWZfZXhwID0gMTQgLSAoY29lZl9leHAgLSAyNCk7CisKKworCS8qIEdldCBtYW50aXNzYSAoc2lnbmlmaWNhbnQgZGlnaXRzKQorCSAqIEFMR086IGNvZWZfbWFudCA9IGZsb29yKGNvZWZfc2NhbGVkKiAyXmNvZWZfZXhwKzAuNSkgKi8KIAljb2VmX21hbiA9IGNvZWZfc2NhbGVkICsKIAkJKDEgPDwgKDI0IC0gY29lZl9leHAgLSAxKSk7CisKKwkvKiBDYWxjdWxhdGUgZGVsdGEgc2xvcGUgY29lZmZpY2llbnQgZXhwb25lbnQKKwkgKiBhbmQgbWFudGlzc2EgKHJlbW92ZSBzY2FsaW5nKSBhbmQgc2V0IHRoZW0gb24gaHcgKi8KIAlkc19jb2VmX21hbiA9IGNvZWZfbWFuID4+ICgyNCAtIGNvZWZfZXhwKTsKIAlkc19jb2VmX2V4cCA9IGNvZWZfZXhwIC0gMTY7CiAKQEAgLTg2LDIwICsxMDIsMjcgQEAKICAqIGluZGV4IGludG8gcmF0ZXMgZm9yIGNvbnRyb2wgcmF0ZXMsIHdlIGNhbiBzZXQgaXQgdXAgbGlrZSB0aGlzIGJlY2F1c2UKICAqIHRoaXMgaXMgb25seSB1c2VkIGZvciBBUjUyMTIgYW5kIHdlIGtub3cgaXQgc3VwcG9ydHMgRyBtb2RlCiAgKi8KLXN0YXRpYyBpbnQgY29udHJvbF9yYXRlc1tdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY29udHJvbF9yYXRlc1tdID0KIAl7IDAsIDEsIDEsIDEsIDQsIDQsIDYsIDYsIDgsIDgsIDgsIDggfTsKIAogLyoqCi0gKiBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uIC0gc2V0IHJhdGUgZHVyYXRpb24gZHVyaW5nIGh3IHJlc2V0cworICogYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbiAtIGZpbGwgcmF0ZSBjb2RlIHRvIGR1cmF0aW9uIHRhYmxlCiAgKgogICogQGFoOiB0aGUgJnN0cnVjdCBhdGg1a19odwogICogQG1vZGU6IG9uZSBvZiBlbnVtIGF0aDVrX2RyaXZlcl9tb2RlCiAgKgotICogV3JpdGUgdGhlIHJhdGUgZHVyYXRpb24gdGFibGUgdXBvbiBodyByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IKLSAqIGF0aDVrX2h3X3Jlc2V0KCkuIEl0IHNlZW1zIGFsbCB0aGlzIGlzIGRvaW5nIGlzIHNldHRpbmcgYW4gQUNLIHRpbWVvdXQgZm9yCi0gKiB0aGUgaGFyZHdhcmUgZm9yIHRoZSBjdXJyZW50IG1vZGUgZm9yIGVhY2ggcmF0ZS4gVGhlIHJhdGVzIHdoaWNoIGFyZSBjYXBhYmxlCi0gKiBvZiBzaG9ydCBwcmVhbWJsZSAoODAyLjExYiByYXRlcyAyTWJwcywgNS41TWJwcywgYW5kIDExTWJwcykgaGF2ZSBhbm90aGVyCi0gKiByZWdpc3RlciBmb3IgdGhlIHNob3J0IHByZWFtYmxlIEFDSyB0aW1lb3V0IGNhbGN1bGF0aW9uLgorICogV3JpdGUgdGhlIHJhdGUgY29kZSB0byBkdXJhdGlvbiB0YWJsZSB1cG9uIGh3IHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgorICogYXRoNWtfaHdfcmVzZXQoKS4gSXQgc2VlbXMgYWxsIHRoaXMgaXMgZG9pbmcgaXMgc2V0dGluZyBhbiBBQ0sgdGltZW91dCBvbgorICogdGhlIGhhcmR3YXJlLCBiYXNlZCBvbiBjdXJyZW50IG1vZGUsIGZvciBlYWNoIHJhdGUuIFRoZSByYXRlcyB3aGljaCBhcmUKKyAqIGNhcGFibGUgb2Ygc2hvcnQgcHJlYW1ibGUgKDgwMi4xMWIgcmF0ZXMgMk1icHMsIDUuNU1icHMsIGFuZCAxMU1icHMpIGhhdmUKKyAqIGRpZmZlcmVudCByYXRlIGNvZGUgc28gd2Ugd3JpdGUgdGhlaXIgdmFsdWUgdHdpY2UgKG9uZSBmb3IgbG9uZyBwcmVhbXBsZQorICogYW5kIG9uZSBmb3Igc2hvcnQpLgorICoKKyAqIE5vdGU6IEJhbmQgZG9lc24ndCBtYXR0ZXIgaGVyZSwgaWYgd2Ugc2V0IHRoZSB2YWx1ZXMgZm9yIE9GRE0gaXQgd29ya3MKKyAqIG9uIGJvdGggYSBhbmQgZyBtb2Rlcy4gU28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2V0IHZhbHVlcyBmb3IgYWxsIGcgcmF0ZXMKKyAqIHRoYXQgaW5jbHVkZSBhbGwgT0ZETSBhbmQgQ0NLIHJhdGVzLiBJZiB3ZSBvcGVyYXRlIGluIHR1cmJvIG9yIHhyL2hhbGYvCisgKiBxdWFydGVyIHJhdGUgbW9kZSwgd2UgbmVlZCB0byB1c2UgYW5vdGhlciBzZXQgb2YgYml0cmF0ZXMgKHRoYXQncyB3aHkgd2UKKyAqIG5lZWQgdGhlIG1vZGUgcGFyYW1ldGVyKSBidXQgd2UgZG9uJ3QgaGFuZGxlIHRoZXNlIHByb3ByaWV0YXJ5IG1vZGVzIHlldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwKICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTI3NSw3ICsyOTgsOCBAQAogfQogCiAvKgotICogQnJpbmcgdXAgTUFDICsgUEhZIENoaXBzCisgKiBCcmluZyB1cCBNQUMgKyBQSFkgQ2hpcHMgYW5kIHByb2dyYW0gUExMCisgKiBUT0RPOiBIYWxmL1F1YXJ0ZXIgcmF0ZSBzdXBwb3J0CiAgKi8KIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFncywgYm9vbCBpbml0aWFsKQogewpAQCAtMzMzLDcgKzM1NywxMSBAQAogCQkJfQogCQl9IGVsc2UgaWYgKGZsYWdzICYgQ0hBTk5FTF81R0haKSB7CiAJCQltb2RlIHw9IEFSNUtfUEhZX01PREVfRlJFUV81R0haOwotCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaOworCisJCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKQorCQkJCWNsb2NrIHw9IEFSNUtfUEhZX1BMTF80ME1IWl81NDEzOworCQkJZWxzZQorCQkJCWNsb2NrIHw9IEFSNUtfUEhZX1BMTF80ME1IWjsKIAogCQkJaWYgKGZsYWdzICYgQ0hBTk5FTF9PRkRNKQogCQkJCW1vZGUgfD0gQVI1S19QSFlfTU9ERV9NT0RfT0ZETTsKQEAgLTM5MSwxMCArNDE5LDE0IEBACiAJfQogCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCS8qIC4uLnNldCB0aGUgUEhZIG9wZXJhdGluZyBtb2RlICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgY2xvY2ssIEFSNUtfUEhZX1BMTCk7Ci0JCXVkZWxheSgzMDApOwogCisJCS8qIC4uLnVwZGF0ZSBQTEwgaWYgbmVlZGVkICovCisJCWlmIChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUExMKSAhPSBjbG9jaykgeworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBjbG9jaywgQVI1S19QSFlfUExMKTsKKwkJCXVkZWxheSgzMDApOworCQl9CisKKwkJLyogLi4uc2V0IHRoZSBQSFkgb3BlcmF0aW5nIG1vZGUgKi8KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBtb2RlLCBBUjVLX1BIWV9NT0RFKTsKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0dXJibywgQVI1S19QSFlfVFVSQk8pOwogCX0KQEAgLTQwMywyMiArNDM1LDM5MyBAQAogfQogCiAvKgorICogSWYgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgMzJLSHogY3J5c3RhbCBhdmFpbGFibGUsIHVzZSBpdAorICogYXMgcmVmLiBjbG9jayBpbnN0ZWFkIG9mIDMyLzQwTUh6IGNsb2NrIGFuZCBiYXNlYmFuZCBjbG9ja3MKKyAqIHRvIHNhdmUgcG93ZXIgZHVyaW5nIHNsZWVwIG9yIHJlc3RvcmUgbm9ybWFsIDMyLzQwTUh6CisgKiBvcGVyYXRpb24uCisgKgorICogWFhYOiBXaGVuIG9wZXJhdGluZyBvbiAzMktIeiBjZXJ0YWluIFBIWSByZWdpc3RlcnMgKDI3IC0gMzEsCisgKiAJMTIzIC0gMTI3KSByZXF1aXJlIGRlbGF5IG9uIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXUzMiBzY2FsLCBzcGVuZGluZywgdXNlYzMyOworCisJLyogT25seSBzZXQgMzJLSHogc2V0dGluZ3MgaWYgd2UgaGF2ZSBhbiBleHRlcm5hbAorCSAqIDMyS0h6IGNyeXN0YWwgcHJlc2VudCAqLworCWlmICgoQVI1S19FRVBST01fSEFTMzJLSFpDUllTVEFMKGVlLT5lZV9taXNjMSkgfHwKKwlBUjVLX0VFUFJPTV9IQVMzMktIWkNSWVNUQUxfT0xEKGVlLT5lZV9taXNjMSkpICYmCisJZW5hYmxlKSB7CisKKwkJLyogMSB1c2VjL2N5Y2xlICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIDEpOworCQkvKiBTZXQgdXAgdHNmIGluY3JlbWVudCBvbiBlYWNoIGN5Y2xlICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFNGX1BBUk0sIEFSNUtfVFNGX1BBUk1fSU5DLCA2MSk7CisKKwkJLyogU2V0IGJhc2ViYW5kIHNsZWVwIGNvbnRyb2wgcmVnaXN0ZXJzCisJCSAqIGFuZCBzbGVlcCBjb250cm9sIHJhdGUgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOworCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKKwkJCXNwZW5kaW5nID0gMHgxNDsKKwkJZWxzZQorCQkJc3BlbmRpbmcgPSAweDE4OworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjYsIEFSNUtfUEhZX1NMTVQpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBkLCBBUjVLX1BIWV9TQ0FMKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwNywgQVI1S19QSFlfU0NMT0NLKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgzZiwgQVI1S19QSFlfU0RFTEFZKTsKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDB4MDIpOworCQl9IGVsc2UgeworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBhLCBBUjVLX1BIWV9TTE1UKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwYywgQVI1S19QSFlfU0NBTCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDMsIEFSNUtfUEhZX1NDTE9DSyk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjAsIEFSNUtfUEhZX1NERUxBWSk7CisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19SQVRFLCAweDAzKTsKKwkJfQorCisJCS8qIEVuYWJsZSBzbGVlcCBjbG9jayBvcGVyYXRpb24gKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX0VOKTsKKworCX0gZWxzZSB7CisKKwkJLyogRGlzYWJsZSBzbGVlcCBjbG9jayBvcGVyYXRpb24gYW5kCisJCSAqIHJlc3RvcmUgZGVmYXVsdCBwYXJhbWV0ZXJzICovCisJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfRU4pOworCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDApOworCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgxZiwgQVI1S19QSFlfU0NSKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TTE1UXzMyTUhaLCBBUjVLX1BIWV9TTE1UKTsKKworCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKQorCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFpfMjQxNzsKKwkJZWxzZSBpZiAoYXRoNWtfZWVwcm9tX2lzX2hiNjMoYWgpKQorCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFpfSEI2MzsKKwkJZWxzZQorCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFo7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2NhbCwgQVI1S19QSFlfU0NBTCk7CisKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TQ0xPQ0tfMzJNSFosIEFSNUtfUEhZX1NDTE9DSyk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0RFTEFZXzMyTUhaLCBBUjVLX1BIWV9TREVMQVkpOworCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKKwkJCXNwZW5kaW5nID0gMHgxNDsKKwkJZWxzZQorCQkJc3BlbmRpbmcgPSAweDE4OworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpKQorCQkJdXNlYzMyID0gMzk7CisJCWVsc2UKKwkJCXVzZWMzMiA9IDMxOworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1VTRUNfNTIxMSwgQVI1S19VU0VDXzMyLCB1c2VjMzIpOworCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFNGX1BBUk0sIEFSNUtfVFNGX1BBUk1fSU5DLCAxKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgYm9vbCBhdGg1a19od19jaGFuX2hhc19zcHVyX25vaXNlKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCXU4IHJlZmNsa19mcmVxOworCisJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKKwkJcmVmY2xrX2ZyZXEgPSA0MDsKKwllbHNlCisJCXJlZmNsa19mcmVxID0gMzI7CisKKwlpZiAoKGNoYW5uZWwtPmNlbnRlcl9mcmVxICUgcmVmY2xrX2ZyZXEgIT0gMCkgJiYKKwkoKGNoYW5uZWwtPmNlbnRlcl9mcmVxICUgcmVmY2xrX2ZyZXEgPCAxMCkgfHwKKwkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSA+IDIyKSkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCisvKiBUT0RPOiBIYWxmL1F1YXJ0ZXIgcmF0ZSAqLworc3RhdGljIHZvaWQgYXRoNWtfaHdfdHdlYWtfaW5pdHZhbF9zZXR0aW5ncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkgICAgYWgtPmFoX3BoeV9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUEhZXzUyMTJBKSB7CisKKwkJLyogU2V0dXAgQURDIGNvbnRyb2wgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJCShBUjVLX1JFR19TTSgyLAorCQkJCUFSNUtfUEhZX0FEQ19DVExfSU5CVUZHQUlOX09GRikgfAorCQkJCUFSNUtfUkVHX1NNKDIsCisJCQkJQVI1S19QSFlfQURDX0NUTF9JTkJVRkdBSU5fT04pIHwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX1BXRF9EQUNfT0ZGIHwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX1BXRF9BRENfT0ZGKSwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMKTsKKworCisKKwkJLyogRGlzYWJsZSBiYXJrZXIgUlNTSSB0aHJlc2hvbGQgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwKKwkJCQlBUjVLX1BIWV9EQUdfQ0NLX0NUTF9FTl9SU1NJX1RIUik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREFHX0NDS19DVEwsCisJCQlBUjVLX1BIWV9EQUdfQ0NLX0NUTF9SU1NJX1RIUiwgMik7CisKKwkJLyogU2V0IHRoZSBtdXRlIG1hc2sgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBmLCBBUjVLX1NFUV9NQVNLKTsKKwl9CisKKwkvKiBDbGVhciBQSFlfQkxVRVRPT1RIIHRvIGFsbG93IFJYX0NMRUFSIGxpbmUgZGVidWcgKi8KKwlpZiAoYWgtPmFoX3BoeV9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUEhZXzUyMTJCKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX0JMVUVUT09USCk7CisKKwkvKiBFbmFibGUgRENVIGRvdWJsZSBidWZmZXJpbmcgKi8KKwlpZiAoYWgtPmFoX3BoeV9yZXZpc2lvbiA+IEFSNUtfU1JFVl9QSFlfNTIxMkIpCisJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19UWENGRywKKwkJCQlBUjVLX1RYQ0ZHX0RDVV9EQkxfQlVGX0RJUyk7CisKKwkvKiBTZXQgREFDL0FEQyBkZWxheXMgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKKwkJdTMyIHNjYWw7CisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3OworCQllbHNlIGlmIChhdGg1a19lZXByb21faXNfaGI2MyhhaCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOworCQllbHNlCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKKwl9CisKKwkvKiBTZXQgZmFzdCBBREMgKi8KKwlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkgeworCQl1MzIgZmFzdF9hZGMgPSB0cnVlOworCisJCWlmIChjaGFubmVsLT5jZW50ZXJfZnJlcSA9PSAyNDYyIHx8CisJCWNoYW5uZWwtPmNlbnRlcl9mcmVxID09IDI0NjcpCisJCQlmYXN0X2FkYyA9IDA7CisKKwkJLyogT25seSB1cGRhdGUgaWYgbmVlZGVkICovCisJCWlmIChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfRkFTVF9BREMpICE9IGZhc3RfYWRjKQorCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZmFzdF9hZGMsCisJCQkJCQlBUjVLX1BIWV9GQVNUX0FEQyk7CisJfQorCisJLyogRml4IGZvciBmaXJzdCByZXZpc2lvbiBvZiB0aGUgUkY1MTEyIFJGIGNoaXBzZXQgKi8KKwlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyICYmCisJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8CisJCQlBUjVLX1NSRVZfUkFEXzUxMTJBKSB7CisJCXUzMiBkYXRhOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0NDS1RYQ1RMX1dPUkxELAorCQkJCUFSNUtfUEhZX0NDS1RYQ1RMKTsKKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQorCQkJZGF0YSA9IDB4ZmZiODEwMjA7CisJCWVsc2UKKwkJCWRhdGEgPSAweGZmYjgwZDIwOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUEhZX0ZSQU1FX0NUTCk7CisJfQorCisJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjUyMTEpIHsKKwkJdTMyIHVzZWNfcmVnOworCQkvKiA1MzExIGhhcyBkaWZmZXJlbnQgdHgvcnggbGF0ZW5jeSBtYXNrcworCQkgKiBmcm9tIDUyMTEsIHNpbmNlIHdlIGRlYWwgNTMxMSB0aGUgc2FtZQorCQkgKiBhcyA1MjExIHdoZW4gc2V0dGluZyBpbml0dmFscywgc2hpZnQKKwkJICogdmFsdWVzIGhlcmUgdG8gdGhlaXIgcHJvcGVyIGxvY2F0aW9ucyAqLworCQl1c2VjX3JlZyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1VTRUNfNTIxMSk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdXNlY19yZWcgJiAoQVI1S19VU0VDXzEgfAorCQkJCUFSNUtfVVNFQ18zMiB8CisJCQkJQVI1S19VU0VDX1RYX0xBVEVOQ1lfNTIxMSB8CisJCQkJQVI1S19SRUdfU00oMjksCisJCQkJQVI1S19VU0VDX1JYX0xBVEVOQ1lfNTIxMCkpLAorCQkJCUFSNUtfVVNFQ181MjExKTsKKwkJLyogQ2xlYXIgUUNVL0RDVSBjbG9jayBnYXRpbmcgcmVnaXN0ZXIgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAwLCBBUjVLX1FDVURDVV9DTEtHVCk7CisJCS8qIFNldCBEQUMvQURDIGRlbGF5cyAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDgsIEFSNUtfUEhZX1NDQUwpOworCQkvKiBFbmFibGUgUENVIEZJRk8gY29ycnVwdGlvbiBFQ08gKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfRElBR19TV181MjExLAorCQkJCQlBUjVLX0RJQUdfU1dfRUNPX0VOQUJMRSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg1a19od19jb21taXRfZWVwcm9tX3NldHRpbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdTggKmFudCwgdTggZWVfbW9kZSkKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKworCS8qIFNldCBDQ0sgdG8gT0ZETSBwb3dlciBkZWx0YSAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKwkJaW50MTZfdCBjY2tfb2ZkbV9wd3JfZGVsdGE7CisKKwkJLyogQWRqdXN0IHBvd2VyIGRlbHRhIGZvciBjaGFubmVsIDE0ICovCisJCWlmIChjaGFubmVsLT5jZW50ZXJfZnJlcSA9PSAyNDg0KQorCQkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCQkoKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAtCisJCQkJZWUtPmVlX3NjYWxlZF9jY2tfZGVsdGEpICogMikgLyAxMDsKKwkJZWxzZQorCQkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCQkoZWUtPmVlX2Nja19vZmRtX3Bvd2VyX2RlbHRhICogMikgLyAxMDsKKworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAqIC0xKSwKKwkJCQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBKSB8CisJCQlBUjVLX1JFR19TTSgoY2NrX29mZG1fcHdyX2RlbHRhICogLTEpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREpfQ0NLX1BDREFDX0lOREVYKSwKKwkJCQlBUjVLX1BIWV9UWF9QV1JfQURKKTsKKwkJZWxzZQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAwLCBBUjVLX1BIWV9UWF9QV1JfQURKKTsKKwl9CisKKwkvKiBTZXQgYW50ZW5uYSBpZGxlIHN3aXRjaCB0YWJsZSAqLworCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0FOVF9DVEwsCisJCQlBUjVLX1BIWV9BTlRfQ1RMX1NXVEFCTEVfSURMRSwKKwkJCShhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVswXSB8CisJCQlBUjVLX1BIWV9BTlRfQ1RMX1RYUlhfRU4pKTsKKworCS8qIFNldCBhbnRlbm5hIHN3aXRjaCB0YWJsZSAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzBdXSwKKwkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9hbnRlbm5hW2VlX21vZGVdW2FudFsxXV0sCisJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7CisKKwkvKiBOb2lzZSBmbG9vciB0aHJlc2hvbGQgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCUFSNUtfUEhZX05GX1NWQUwoZWUtPmVlX25vaXNlX2Zsb29yX3RocltlZV9tb2RlXSksCisJCUFSNUtfUEhZX05GVEhSRVMpOworCisJaWYgKChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pICYmCisJKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wKSkgeworCQkvKiBTd2l0Y2ggc2V0dGxpbmcgdGltZSAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAorCQkJCUFSNUtfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJCQllZS0+ZWVfc3dpdGNoX3NldHRsaW5nX3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBhdHRlbnVhdGlvbiAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU4sCisJCQkJQVI1S19QSFlfR0FJTl9UWFJYX0FUVEVOLAorCQkJCWVlLT5lZV9hdG5fdHhfcnhfdHVyYm9bZWVfbW9kZV0pOworCisJCS8qIEFEQy9QR0EgZGVzaXJlZCBzaXplIChUdXJibykgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCQkJCUFSNUtfUEhZX0RFU0lSRURfU0laRV9BREMsCisJCQkJZWUtPmVlX2FkY19kZXNpcmVkX3NpemVfdHVyYm9bZWVfbW9kZV0pOworCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfUEdBLAorCQkJCWVlLT5lZV9wZ2FfZGVzaXJlZF9zaXplX3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBtYXJnaW4gKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOXzJHSFosCisJCQkJQVI1S19QSFlfR0FJTl8yR0haX01BUkdJTl9UWFJYLAorCQkJCWVlLT5lZV9tYXJnaW5fdHhfcnhfdHVyYm9bZWVfbW9kZV0pOworCisJfSBlbHNlIHsKKwkJLyogU3dpdGNoIHNldHRsaW5nIHRpbWUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfU0VUVExJTkcsCisJCQkJQVI1S19QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCWVlLT5lZV9zd2l0Y2hfc2V0dGxpbmdbZWVfbW9kZV0pOworCisJCS8qIFR4L1J4IGF0dGVudWF0aW9uICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU4sCisJCQkJQVI1S19QSFlfR0FJTl9UWFJYX0FUVEVOLAorCQkJCWVlLT5lZV9hdG5fdHhfcnhbZWVfbW9kZV0pOworCisJCS8qIEFEQy9QR0EgZGVzaXJlZCBzaXplICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfQURDLAorCQkJCWVlLT5lZV9hZGNfZGVzaXJlZF9zaXplW2VlX21vZGVdKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX1BHQSwKKwkJCQllZS0+ZWVfcGdhX2Rlc2lyZWRfc2l6ZVtlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggbWFyZ2luICovCisJCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMSkKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU5fMkdIWiwKKwkJCQlBUjVLX1BIWV9HQUlOXzJHSFpfTUFSR0lOX1RYUlgsCisJCQkJZWUtPmVlX21hcmdpbl90eF9yeFtlZV9tb2RlXSk7CisJfQorCisJLyogWFBBIGRlbGF5cyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKKwkJKGVlLT5lZV90eF9lbmQyeHBhX2Rpc2FibGVbZWVfbW9kZV0gPDwgMjQpIHwKKwkJKGVlLT5lZV90eF9lbmQyeHBhX2Rpc2FibGVbZWVfbW9kZV0gPDwgMTYpIHwKKwkJKGVlLT5lZV90eF9mcm0yeHBhX2VuYWJsZVtlZV9tb2RlXSA8PCA4KSB8CisJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0pLCBBUjVLX1BIWV9SRl9DVEw0KTsKKworCS8qIFhMTkEgZGVsYXkgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9SRl9DVEwzLAorCQkJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTiwKKwkJCWVlLT5lZV90eF9lbmQyeGxuYV9lbmFibGVbZWVfbW9kZV0pOworCisJLyogVGhyZXNoNjQgKEFOSSkgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ORiwKKwkJCUFSNUtfUEhZX05GX1RIUkVTSDYyLAorCQkJZWUtPmVlX3Rocl82MltlZV9tb2RlXSk7CisKKworCS8qIEZhbHNlIGRldGVjdCBiYWNrb2ZmIGZvciBjaGFubmVscworCSAqIHRoYXQgaGF2ZSBzcHVyIG5vaXNlLiBXcml0ZSB0aGUgbmV3CisJICogY3ljbGljIHBvd2VyIFJTU0kgdGhyZXNob2xkLiAqLworCWlmIChhdGg1a19od19jaGFuX2hhc19zcHVyX25vaXNlKGFoLCBjaGFubmVsKSkKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkJCQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjEsCisJCQkJQVI1S19JTklUX0NZQ1JTU0lfVEhSMSArCisJCQkJZWUtPmVlX2ZhbHNlX2RldGVjdFtlZV9tb2RlXSk7CisJZWxzZQorCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9PRkRNX1NFTEZDT1JSLAorCQkJCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMSwKKwkJCQlBUjVLX0lOSVRfQ1lDUlNTSV9USFIxKTsKKworCS8qIEkvUSBjb3JyZWN0aW9uCisJICogVE9ETzogUGVyIGNoYW5uZWwgaS9xIGluZm9zID8gKi8KKwlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QSFlfSVEsCisJCUFSNUtfUEhZX0lRX0NPUlJfRU5BQkxFIHwKKwkJKGVlLT5lZV9pX2NhbFtlZV9tb2RlXSA8PCBBUjVLX1BIWV9JUV9DT1JSX1FfSV9DT0ZGX1MpIHwKKwkJZWUtPmVlX3FfY2FsW2VlX21vZGVdKTsKKworCS8qIEhlYXZ5IGNsaXBwaW5nIC1kaXNhYmxlIGZvciBub3cgKi8KKwlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzEpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUpOworCisJcmV0dXJuOworfQorCisvKgogICogTWFpbiByZXNldCBmdW5jdGlvbgogICovCiBpbnQgYXRoNWtfaHdfcmVzZXQoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcF9tb2RlLAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFoLT5haF9zYy0+cGRldjsKLQl1MzIgZGF0YSwgc19zZXEsIHNfYW50LCBzX2xlZFszXSwgZG1hX3NpemU7Ci0JdW5zaWduZWQgaW50IGksIG1vZGUsIGZyZXEsIGVlX21vZGUsIGFudFsyXTsKLQlpbnQgcmV0OworCXUzMiBzX3NlcVsxMF0sIHNfYW50LCBzX2xlZFszXSwgc3RhaWQxX2ZsYWdzLCB0c2ZfdXAsIHRzZl9sbzsKKwl1MzIgcGh5X3RzdDE7CisJdTggbW9kZSwgZnJlcSwgZWVfbW9kZSwgYW50WzJdOworCWludCBpLCByZXQ7CiAKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0Jc19zZXEgPSAwOwogCXNfYW50ID0gMDsKIAllZV9tb2RlID0gMDsKKwlzdGFpZDFfZmxhZ3MgPSAwOworCXRzZl91cCA9IDA7CisJdHNmX2xvID0gMDsKIAlmcmVxID0gMDsKIAltb2RlID0gMDsKIApAQCAtNDI3LDQ4ICs4MzAsNiBAQAogCSAqLwogCS8qRENVL0FudGVubmEgc2VsZWN0aW9uIG5vdCBhdmFpbGFibGUgb24gNTIxMCovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWlmIChjaGFuZ2VfY2hhbm5lbCkgewotCQkJLyogU2VxIG51bWJlciBmb3IgcXVldWUgMCAtZG8gdGhpcyBmb3IgYWxsIHF1ZXVlcyA/ICovCi0JCQlzX3NlcSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLAotCQkJCQlBUjVLX1FVRVVFX0RGU19TRVFOVU0oMCkpOwotCQkJLypEZWZhdWx0IGFudGVubmEqLwotCQkJc19hbnQgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOwotCQl9Ci0JfQotCi0JLypHUElPcyovCi0Jc19sZWRbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYgQVI1S19QQ0lDRkdfTEVEU1RBVEU7Ci0Jc19sZWRbMV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPQ1IpOwotCXNfbGVkWzJdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0RPKTsKLQotCWlmIChjaGFuZ2VfY2hhbm5lbCAmJiBhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKLQkJYXRoNWtfaHdfZ2V0X3JmX2dhaW4oYWgpOwotCi0KLQkvKldha2V1cCB0aGUgZGV2aWNlKi8KLQlyZXQgPSBhdGg1a19od19uaWNfd2FrZXVwKGFoLCBjaGFubmVsLT5od192YWx1ZSwgZmFsc2UpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgb3BlcmF0aW5nIG1vZGUKLQkgKi8KLQlhaC0+YWhfb3BfbW9kZSA9IG9wX21vZGU7Ci0KLQkvKgotCSAqIDUxMTEvNTExMiBTZXR0aW5ncwotCSAqIDUyMTAgb25seSBjb21lcyB3aXRoIFJGNTExMAotCSAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlpZiAoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTExICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjUxMTIgJiYKLQkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTQxMyAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkYyNDEzICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjI0MjUpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCi0JCQkJImludmFsaWQgcGh5IHJhZGlvOiAldVxuIiwgYWgtPmFoX3JhZGlvKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAKIAkJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKIAkJY2FzZSBDSEFOTkVMX0E6CkBAIC00OTEsOCArODUyLDEyIEBACiAJCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzVHSFo7CiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7CiAJCQlicmVhazsKLQkJLypJcyB0aGlzIG9rIG9uIDUyMTEgdG9vID8qLwogCQljYXNlIENIQU5ORUxfVEc6CisJCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKKwkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCQkiVHVyYm9HIG1vZGUgbm90IGF2YWlsYWJsZSBvbiA1MjExIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQltb2RlID0gQVI1S19NT0RFXzExR19UVVJCTzsKIAkJCWZyZXEgPSBBUjVLX0lOSV9SRkdBSU5fMkdIWjsKIAkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKQEAgLTUxMywxMSArODc4LDkzIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCS8qIFBIWSBhY2Nlc3MgZW5hYmxlICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0hJRlRfNUdIWiwgQVI1S19QSFkoMCkpOworCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKKwkJCS8qCisJCQkgKiBTYXZlIGZyYW1lIHNlcXVlbmNlIGNvdW50CisJCQkgKiBGb3IgcmV2cy4gYWZ0ZXIgT2FodSwgb25seSBzYXZlCisJCQkgKiBzZXEgbnVtIGZvciBEQ1UgMCAoR2xvYmFsIHNlcSBudW0pCisJCQkgKi8KKwkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1MjExKSB7CiAKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJCQkJc19zZXFbaV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwKKwkJCQkJCUFSNUtfUVVFVUVfRENVX1NFUU5VTShpKSk7CisKKwkJCX0gZWxzZSB7CisJCQkJc19zZXFbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwKKwkJCQkJCUFSNUtfUVVFVUVfRENVX1NFUU5VTSgwKSk7CisJCQl9CisKKwkJCS8qIFRTRiBhY2NlbGVyYXRlcyBvbiBBUjUyMTEgZHVycmluZyByZXNldAorCQkJICogQXMgYSB3b3JrYXJvdW5kIHNhdmUgaXQgaGVyZSBhbmQgcmVzdG9yZQorCQkJICogaXQgbGF0ZXIgc28gdGhhdCBpdCdzIGJhY2sgaW4gdGltZSBhZnRlcgorCQkJICogcmVzZXQuIFRoaXMgd2F5IGl0J2xsIGdldCByZS1zeW5jZWQgb24gdGhlCisJCQkgKiBuZXh0IGJlYWNvbiB3aXRob3V0IGJyZWFraW5nIGFkLWhvYy4KKwkJCSAqCisJCQkgKiBPbiBBUjUyMTIgVFNGIGlzIGFsbW9zdCBwcmVzZXJ2ZWQgYWNyb3NzIGEKKwkJCSAqIHJlc2V0IHNvIGl0IHN0YXlzIGJhY2sgaW4gdGltZSBhbnl3YXkgYW5kCisJCQkgKiB3ZSBkb24ndCBoYXZlIHRvIHNhdmUvcmVzdG9yZSBpdC4KKwkJCSAqCisJCQkgKiBYWFg6IFNpbmNlIHRoaXMgYnJlYWtzIHBvd2VyIHNhdmluZyB3ZSBoYXZlCisJCQkgKiB0byBkaXNhYmxlIHBvd2VyIHNhdmluZyB1bnRpbCB3ZSByZWNlaXZlIHRoZQorCQkJICogbmV4dCBiZWFjb24sIHNvIHdlIGNhbiByZXN5bmMgYmVhY29uIHRpbWVycyAqLworCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjExKSB7CisJCQkJdHNmX3VwID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVFNGX1UzMik7CisJCQkJdHNmX2xvID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVFNGX0wzMik7CisJCQl9CisJCX0KKworCQkvKiBTYXZlIGRlZmF1bHQgYW50ZW5uYSAqLworCQlzX2FudCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0RFRkFVTFRfQU5URU5OQSk7CisKKwkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7CisJCQkvKiBSZXN0b3JlIG5vcm1hbCAzMi80ME1IeiBjbG9jayBvcGVyYXRpb24KKwkJCSAqIHRvIGF2b2lkIHJlZ2lzdGVyIGFjY2VzcyBkZWxheSBvbiBjZXJ0YWluCisJCQkgKiBQSFkgcmVnaXN0ZXJzICovCisJCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIGZhbHNlKTsKKworCQkJLyogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHJmIGJ1ZmZlcgorCQkJICogY2hlY2sgaWYgd2UgaGF2ZSBhbnkgcGVuZGluZyBnYWluX0YKKwkJCSAqIG9wdGltaXphdGlvbiBzZXR0aW5ncyAqLworCQkJaWYgKGNoYW5nZV9jaGFubmVsICYmIGFoLT5haF9yZl9iYW5rcyAhPSBOVUxMKQorCQkJCWF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShhaCk7CisJCX0KIAl9CiAKKwkvKkdQSU9zKi8KKwlzX2xlZFswXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BDSUNGRykgJgorCQkJCQlBUjVLX1BDSUNGR19MRURTVEFURTsKKwlzX2xlZFsxXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0dQSU9DUik7CisJc19sZWRbMl0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPRE8pOworCisJLyogQVI1S19TVEFfSUQxIGZsYWdzLCBvbmx5IHByZXNlcnZlIGFudGVubmEKKwkgKiBzZXR0aW5ncyBhbmQgYWNrL2N0cyByYXRlIG1vZGUgKi8KKwlzdGFpZDFfZmxhZ3MgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TVEFfSUQxKSAmCisJCQkoQVI1S19TVEFfSUQxX0RFRkFVTFRfQU5URU5OQSB8CisJCQlBUjVLX1NUQV9JRDFfREVTQ19BTlRFTk5BIHwKKwkJCUFSNUtfU1RBX0lEMV9SVFNfREVGX0FOVEVOTkEgfAorCQkJQVI1S19TVEFfSUQxX0FDS0NUU182TUIgfAorCQkJQVI1S19TVEFfSUQxX0JBU0VfUkFURV8xMUIgfAorCQkJQVI1S19TVEFfSUQxX1NFTEZHRU5fREVGX0FOVCk7CisKKwkvKiBXYWtldXAgdGhlIGRldmljZSAqLworCXJldCA9IGF0aDVrX2h3X25pY193YWtldXAoYWgsIGNoYW5uZWwtPmh3X3ZhbHVlLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogSW5pdGlhbGl6ZSBvcGVyYXRpbmcgbW9kZQorCSAqLworCWFoLT5haF9vcF9tb2RlID0gb3BfbW9kZTsKKworCS8qIFBIWSBhY2Nlc3MgZW5hYmxlICovCisJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1MjExKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKKwllbHNlCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0hJRlRfNUdIWiB8IDB4NDAsCisJCQkJCQkJQVI1S19QSFkoMCkpOworCisJLyogV3JpdGUgaW5pdGlhbCBzZXR0aW5ncyAqLwogCXJldCA9IGF0aDVrX2h3X3dyaXRlX2luaXR2YWxzKGFoLCBtb2RlLCBjaGFuZ2VfY2hhbm5lbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTUyNiw2NCArOTczLDIzIEBACiAJICogNTIxMS81MjEyIFNwZWNpZmljCiAJICovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHNldHRpbmdzCiAJCSAqIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGJvdGggNTExMS81MTEyCiAJCSAqLwotCQlyZXQgPSBhdGg1a19od19yZmdhaW4oYWgsIGZyZXEpOworCQlyZXQgPSBhdGg1a19od19yZmdhaW5faW5pdChhaCwgZnJlcSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCiAJCW1kZWxheSgxKTsKIAogCQkvKgotCQkgKiBXcml0ZSBzb21lIG1vcmUgaW5pdGlhbCByZWdpc3RlciBzZXR0aW5ncyBmb3IgcmV2aXNlZCBjaGlwcworCQkgKiBUd2VhayBpbml0dmFsIHNldHRpbmdzIGZvciByZXZpc2VkCisJCSAqIGNoaXBzZXRzIGFuZCBhZGQgc29tZSBtb3JlIGNvbmZpZworCQkgKiBiaXRzCiAJCSAqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJICAgIGFoLT5haF9waHlfcmV2aXNpb24gPiAweDQxKSB7Ci0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMmEwMDIsIDB4OTgyYyk7Ci0KLQkJCWlmIChjaGFubmVsLT5od192YWx1ZSA9PSBDSEFOTkVMX0cpCi0JCQkJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjI0MTMpCi0JCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGY4MGQ4MCwKLQkJCQkJCQkJMHg5OTRjKTsKLQkJCQllbHNlIGlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1NDI0KQotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAzODAxNDAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSMjQyNSkKLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwZmMwZWMwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJCWVsc2UgLyogMjQyNSAqLwotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDBmYzBmYzAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQllbHNlCi0JCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDAwLCAweDk5NGMpOwotCi0JCQkvKiBHb3QgdGhpcyBmcm9tIGxlZ2FjeS1oYWwgKi8KLQkJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgMHhhMjI4LCAweDIwMCk7Ci0KLQkJCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCAweGEyMjgsIDB4ODAwLCAweGZmZmUwM2ZmKTsKLQotCQkJLyogSnVzdCB3cml0ZSAweDliNSA/ICovCi0JCQkvKiBhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDA5YjUsIDB4YTIyOCk7ICovCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMGYsIEFSNUtfU0VRX01BU0spOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDAwLCAweGEyNTQpOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBlLCBBUjVLX1BIWV9TQ0FMKTsKLQkJfQotCi0JCS8qIEZpeCBmb3IgZmlyc3QgcmV2aXNpb24gb2YgdGhlIFJGNTExMiBSRiBjaGlwc2V0ICovCi0JCWlmIChhaC0+YWhfcmFkaW8gPj0gQVI1S19SRjUxMTIgJiYKLQkJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8Ci0JCQkJQVI1S19TUkVWX1JBRF81MTEyQSkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9DQ0tUWENUTF9XT1JMRCwKLQkJCQkJQVI1S19QSFlfQ0NLVFhDVEwpOwotCQkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQotCQkJCWRhdGEgPSAweGZmYjgxMDIwOwotCQkJZWxzZQotCQkJCWRhdGEgPSAweGZmYjgwZDIwOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1BIWV9GUkFNRV9DVEwpOwotCQkJZGF0YSA9IDA7Ci0JCX0KKwkJYXRoNWtfaHdfdHdlYWtfaW5pdHZhbF9zZXR0aW5ncyhhaCwgY2hhbm5lbCk7CiAKIAkJLyoKIAkJICogU2V0IFRYIHBvd2VyIChGSVhNRSkKQEAgLTYwMSwxNSArMTAwNywxMiBAQAogCQkJYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbihhaCwgbW9kZSk7CiAKIAkJLyoKLQkJICogV3JpdGUgUkYgcmVnaXN0ZXJzCisJCSAqIFdyaXRlIFJGIGJ1ZmZlcgogCQkgKi8KLQkJcmV0ID0gYXRoNWtfaHdfcmZyZWdzKGFoLCBjaGFubmVsLCBtb2RlKTsKKwkJcmV0ID0gYXRoNWtfaHdfcmZyZWdzX2luaXQoYWgsIGNoYW5uZWwsIG1vZGUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQkvKgotCQkgKiBDb25maWd1cmUgYWRkaXRpb25hbCByZWdpc3RlcnMKLQkJICovCiAKIAkJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLwogCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKQEAgLTYzMSwxNyArMTAzNCw2IEBACiAJCX0KIAogCQkvKgotCQkgKiBTZXQgY2hhbm5lbCBhbmQgY2FsaWJyYXRlIHRoZSBQSFkKLQkJICovCi0JCXJldCA9IGF0aDVrX2h3X2NoYW5uZWwoYWgsIGNoYW5uZWwpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQkvKiBTZXQgYW50ZW5uYSBtb2RlICovCi0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9BTlRfQ1RMLAotCQkJYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bMF0sIDB4ZmZmZmZjMDYpOwotCi0JCS8qCiAJCSAqIEluIGNhc2UgYSBmaXhlZCBhbnRlbm5hIHdhcyBzZXQgYXMgZGVmYXVsdAogCQkgKiB3cml0ZSB0aGUgc2FtZSBzZXR0aW5ncyBvbiBib3RoIEFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEUKIAkJICogcmVnaXN0ZXJzLgpAQCAtNjU2LDU0ICsxMDQ4LDE2IEBACiAJCQlhbnRbMV0gPSBBUjVLX0FOVF9GSVhFRF9COwogCQl9CiAKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMF1dLAotCQkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8wKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMV1dLAotCQkJQVI1S19QSFlfQU5UX1NXSVRDSF9UQUJMRV8xKTsKLQogCQkvKiBDb21taXQgdmFsdWVzIGZyb20gRUVQUk9NICovCi0JCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpCi0JCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9GUkFNRV9DVEwsCi0JCQkgICAgQVI1S19QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsIGVlLT5lZV90eF9jbGlwKTsKLQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCi0JCQlBUjVLX1BIWV9ORl9TVkFMKGVlLT5lZV9ub2lzZV9mbG9vcl90aHJbZWVfbW9kZV0pLAotCQkJQVI1S19QSFlfTkZUSFJFUyk7Ci0KLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAotCQkJKGVlLT5lZV9zd2l0Y2hfc2V0dGxpbmdbZWVfbW9kZV0gPDwgNykgJiAweDNmODAsCi0JCQkweGZmZmZjMDdmKTsKLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU4sCi0JCQkoZWUtPmVlX2F0bl90eF9yeFtlZV9tb2RlXSA8PCAxMikgJiAweDNmMDAwLAotCQkJMHhmZmZjMGZmZik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCi0JCQkoZWUtPmVlX2FkY19kZXNpcmVkX3NpemVbZWVfbW9kZV0gJiAweDAwZmYpIHwKLQkJCSgoZWUtPmVlX3BnYV9kZXNpcmVkX3NpemVbZWVfbW9kZV0gPDwgOCkgJiAweGZmMDApLAotCQkJMHhmZmZmMDAwMCk7Ci0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJKGVlLT5lZV90eF9lbmQyeHBhX2Rpc2FibGVbZWVfbW9kZV0gPDwgMjQpIHwKLQkJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDE2KSB8Ci0JCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdIDw8IDgpIHwKLQkJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0pLCBBUjVLX1BIWV9SRl9DVEw0KTsKLQotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfUkZfQ1RMMywKLQkJCWVlLT5lZV90eF9lbmQyeGxuYV9lbmFibGVbZWVfbW9kZV0gPDwgOCwgMHhmZmZmMDBmZik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9ORiwKLQkJCShlZS0+ZWVfdGhyXzYyW2VlX21vZGVdIDw8IDEyKSAmIDB4N2YwMDAsIDB4ZmZmODBmZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwgNCwgMHhmZmZmZmYwMSk7Ci0KLQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLAotCQkgICAgQVI1S19QSFlfSVFfQ09SUl9FTkFCTEUgfAotCQkgICAgKGVlLT5lZV9pX2NhbFtlZV9tb2RlXSA8PCBBUjVLX1BIWV9JUV9DT1JSX1FfSV9DT0ZGX1MpIHwKLQkJICAgIGVlLT5lZV9xX2NhbFtlZV9tb2RlXSk7Ci0KLQkJaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNF8xKQotCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfR0FJTl8yR0haLAotCQkJCUFSNUtfUEhZX0dBSU5fMkdIWl9NQVJHSU5fVFhSWCwKLQkJCQllZS0+ZWVfbWFyZ2luX3R4X3J4W2VlX21vZGVdKTsKKwkJYXRoNWtfaHdfY29tbWl0X2VlcHJvbV9zZXR0aW5ncyhhaCwgY2hhbm5lbCwgYW50LCBlZV9tb2RlKTsKIAogCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciA1MjEwIHdlIGRvIGFsbCBpbml0aWFsaXphdGlvbiB1c2luZworCQkgKiBpbml0dmFscywgc28gd2UgZG9uJ3QgaGF2ZSB0byBtb2RpZnkKKwkJICogYW55IHNldHRpbmdzICg1MjEwIGFsc28gb25seSBzdXBwb3J0cworCQkgKiBhL2F0dXJibyBtb2RlcykKKwkJICovCiAJCW1kZWxheSgxKTsKIAkJLyogRGlzYWJsZSBwaHkgYW5kIHdhaXQgKi8KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9BQ1RfRElTQUJMRSwgQVI1S19QSFlfQUNUKTsKQEAgLTcxMywxMDAgKzEwNjcsMTU0IEBACiAJLyoKIAkgKiBSZXN0b3JlIHNhdmVkIHZhbHVlcwogCSAqLworCiAJLypEQ1UvQW50ZW5uYSBzZWxlY3Rpb24gbm90IGF2YWlsYWJsZSBvbiA1MjEwKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcSwgQVI1S19RVUVVRV9ERlNfU0VRTlVNKDApKTsKKworCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKKwkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1MjExKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXFbaV0sCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oaSkpOworCQkJfSBlbHNlIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfc2VxWzBdLAorCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oMCkpOworCQkJfQorCisKKwkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmX3VwLCBBUjVLX1RTRl9VMzIpOworCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdHNmX2xvLCBBUjVLX1RTRl9MMzIpOworCQkJfQorCQl9CisKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX2FudCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOwogCX0KKworCS8qIExlZHN0YXRlICovCiAJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLCBzX2xlZFswXSk7CisKKwkvKiBHcGlvIHNldHRpbmdzICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX2xlZFsxXSwgQVI1S19HUElPQ1IpOwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19sZWRbMl0sIEFSNUtfR1BJT0RPKTsKIAorCS8qIFJlc3RvcmUgc3RhX2lkIGZsYWdzIGFuZCBwcmVzZXJ2ZSBvdXIgbWFjIGFkZHJlc3MqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19MT1dfSUQoYWgtPmFoX3N0YV9pZCksCisJCQkJCQlBUjVLX1NUQV9JRDApOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3RhaWQxX2ZsYWdzIHwgQVI1S19ISUdIX0lEKGFoLT5haF9zdGFfaWQpLAorCQkJCQkJQVI1S19TVEFfSUQxKTsKKworCiAJLyoKLQkgKiBNaXNjCisJICogQ29uZmlndXJlIFBDVQogCSAqLworCisJLyogUmVzdG9yZSBic3NpZCBhbmQgYnNzaWQgbWFzayAqLwogCS8qIFhYWDogYWRkIGFoLT5haWQgb25jZSBtYWM4MDIxMSBnaXZlcyB0aGlzIHRvIHVzICovCiAJYXRoNWtfaHdfc2V0X2Fzc29jaWQoYWgsIGFoLT5haF9ic3NpZCwgMCk7CiAKKwkvKiBTZXQgUENVIGNvbmZpZyAqLwogCWF0aDVrX2h3X3NldF9vcG1vZGUoYWgpOwotCS8qUElTUi9TSVNSIE5vdCBhdmFpbGFibGUgb24gNTIxMCovCi0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzCisJICogUElTUi9TSVNSIE5vdCBhdmFpbGFibGUgb24gNTIxMCAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGZmZmZmZmZmLCBBUjVLX1BJU1IpOwotCQkvKiBJZiB3ZSBsYXRlciBhbGxvdyB0dW5pbmcgZm9yIHRoaXMsIHN0b3JlIGludG8gc2Mgc3RydWN0dXJlICovCi0JCWRhdGEgPSBBUjVLX1RVTkVfUlNTSV9USFJFUyB8Ci0JCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwgQVI1S19SU1NJX1RIUl9CTUlTU19TOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUlNTSV9USFIpOworCisJLyogU2V0IFJTU0kvQlJTU0kgdGhyZXNob2xkcworCSAqCisJICogTm90ZTogSWYgd2UgZGVjaWRlIHRvIHNldCB0aGlzIHZhbHVlCisJICogZHluYW1pY2FseSwgaGF2ZSBpbiBtaW5kIHRoYXQgd2hlbiBBUjVLX1JTU0lfVEhSCisJICogcmVnaXN0ZXIgaXMgcmVhZCBpdCBtaWdodCByZXR1cm4gMHg0MCBpZiB3ZSBoYXZlbid0CisJICogd3JvdGUgYW55dGhpbmcgdG8gaXQgcGx1cyBCTUlTUyBSU1NJIHRocmVzaG9sZCBpcyB6ZXJvZWQuCisJICogU28gZG9pbmcgYSBzYXZlL3Jlc3RvcmUgcHJvY2VkdXJlIGhlcmUgaXNuJ3QgdGhlIHJpZ2h0CisJICogY2hvaWNlLiBJbnN0ZWFkIHN0b3JlIGl0IG9uIGF0aDVrX2h3ICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoQVI1S19UVU5FX1JTU0lfVEhSRVMgfAorCQkJCUFSNUtfVFVORV9CTUlTU19USFJFUyA8PAorCQkJCUFSNUtfUlNTSV9USFJfQk1JU1NfUyksCisJCQkJQVI1S19SU1NJX1RIUik7CisKKwkvKiBNSUMgUW9TIHN1cHBvcnQgKi8KKwlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjI0MTMpIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDEwMGFhLCBBUjVLX01JQ19RT1NfQ1RMKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAzMjEwLCBBUjVLX01JQ19RT1NfU0VMKTsKIAl9CiAKLQkvKgotCSAqIFNldCBSeC9UeCBETUEgQ29uZmlndXJhdGlvbgotCSAqCi0JICogU2V0IG1heGltdW0gRE1BIHNpemUgKDUxMikgZXhjZXB0IGZvciBQQ0ktRSBjYXJkcyBzaW5jZQotCSAqIGl0IGNhdXNlcyByeCBvdmVycnVucyBhbmQgdHggZXJyb3JzICh0ZXN0ZWQgb24gNTQyNCBidXQgc2luY2UKLQkgKiByeCBvdmVycnVucyBhbHNvIG9jY3VyIG9uIDU0MTYvNTQxOCB3aXRoIG1hZHdpZmkgd2Ugc2V0IDEyOAotCSAqIGZvciBhbGwgUENJLUUgY2FyZHMgdG8gYmUgc2FmZSkuCi0JICoKLQkgKiBJbiBkdW1wcyB0aGlzIGlzIDEyOCBmb3IgYWxsY2hpcHMuCi0JICoKLQkgKiBYWFg6IG5lZWQgdG8gY2hlY2sgNTIxMCBmb3IgdGhpcwotCSAqIFRPRE86IENoZWNrIG91dCB0eCB0cmlnZXIgbGV2ZWwsIGl0J3MgYWx3YXlzIDY0IG9uIGR1bXBzIGJ1dCBJCi0JICogZ3Vlc3Mgd2UgY2FuIHR3ZWFrIGl0IGFuZCBzZWUgaG93IGl0IGdvZXMgOy0pCi0JICovCi0JZG1hX3NpemUgPSAocGRldi0+aXNfcGNpZSkgPyBBUjVLX0RNQVNJWkVfMTI4QiA6IEFSNUtfRE1BU0laRV81MTJCOwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAotCQkJQVI1S19UWENGR19TRE1BTVIsIGRtYV9zaXplKTsKLQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19SWENGRywKLQkJCUFSNUtfUlhDRkdfU0RNQU1XLCBkbWFfc2l6ZSk7CisJLyogUW9TIE5PQUNLIFBvbGljeSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQlBUjVLX1JFR19TTSgyLCBBUjVLX1FPU19OT0FDS18yQklUX1ZBTFVFUykgfAorCQkJQVI1S19SRUdfU00oNSwgQVI1S19RT1NfTk9BQ0tfQklUX09GRlNFVCkgIHwKKwkJCUFSNUtfUkVHX1NNKDAsIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUKSwKKwkJCUFSNUtfUU9TX05PQUNLKTsKIAl9CiAKKworCS8qCisJICogQ29uZmlndXJlIFBIWQorCSAqLworCisJLyogU2V0IGNoYW5uZWwgb24gUEhZICovCisJcmV0ID0gYXRoNWtfaHdfY2hhbm5lbChhaCwgY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qCiAJICogRW5hYmxlIHRoZSBQSFkgYW5kIHdhaXQgdW50aWwgY29tcGxldGlvbgorCSAqIFRoaXMgaW5jbHVkZXMgQmFzZUJhbmQgYW5kIFN5bnRoZXNpemVyCisJICogYWN0aXZhdGlvbi4KIAkgKi8KIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9FTkFCTEUsIEFSNUtfUEhZX0FDVCk7CiAKIAkvKgogCSAqIE9uIDUyMTErIHJlYWQgYWN0aXZhdGlvbiAtPiByeCBkZWxheQogCSAqIGFuZCB1c2UgaXQuCisJICoKKwkgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZSBzdXBwb3J0CiAJICovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKKwkJdTMyIGRlbGF5OworCQlkZWxheSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9SWF9ERUxBWSkgJgogCQkJQVI1S19QSFlfUlhfREVMQVlfTTsKLQkJZGF0YSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/Ci0JCQkoKGRhdGEgPDwgMikgLyAyMikgOiAoZGF0YSAvIDEwKTsKKwkJZGVsYXkgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPworCQkJKChkZWxheSA8PCAyKSAvIDIyKSA6IChkZWxheSAvIDEwKTsKIAotCQl1ZGVsYXkoMTAwICsgKDIgKiBkYXRhKSk7Ci0JCWRhdGEgPSAwOworCQl1ZGVsYXkoMTAwICsgKDIgKiBkZWxheSkpOwogCX0gZWxzZSB7CiAJCW1kZWxheSgxKTsKIAl9CiAKIAkvKgotCSAqIFBlcmZvcm0gQURDIHRlc3QgKD8pCisJICogUGVyZm9ybSBBREMgdGVzdCB0byBzZWUgaWYgYmFzZWJhbmQgaXMgcmVhZHkKKwkgKiBTZXQgdHggaG9sZCBhbmQgY2hlY2sgYWRjIHRlc3QgcmVnaXN0ZXIKIAkgKi8KLQlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOworCXBoeV90c3QxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFNUMV9UWEhPTEQsIEFSNUtfUEhZX1RTVDEpOwogCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgewogCQlpZiAoIShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfQURDX1RFU1QpICYgMHgxMCkpCiAJCQlicmVhazsKIAkJdWRlbGF5KDIwMCk7CiAJfQotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfVFNUMSk7Ci0JZGF0YSA9IDA7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CiAKIAkvKgotCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNhbGlicmF0aW9uCisJICogU3RhcnQgYXV0b21hdGljIGdhaW4gY29udHJvbCBjYWxpYnJhdGlvbgogCSAqCiAJICogRHVyaW5nIEFHQyBjYWxpYnJhdGlvbiBSWCBwYXRoIGlzIHJlLXJvdXRlZCB0bwotCSAqIGEgc2lnbmFsIGRldGVjdG9yIHNvIHdlIGRvbid0IHJlY2VpdmUgYW55dGhpbmcuCisJICogYSBwb3dlciBkZXRlY3RvciBzbyB3ZSBkb24ndCByZWNlaXZlIGFueXRoaW5nLgogCSAqCiAJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjYWxpYnJhdGUgc29tZSBzdGF0aWMgb2Zmc2V0cwogCSAqIHVzZWQgdG9nZXRoZXIgd2l0aCBvbi10aGUgZmx5IEkvUSBjYWxpYnJhdGlvbiAodGhlCiAJICogb25lIHBlcmZvcm1lZCB2aWEgYXRoNWtfaHdfcGh5X2NhbGlicmF0ZSksIHRoYXQgZG9lc24ndAogCSAqIGludGVycnVwdCByeCBwYXRoLgogCSAqCisJICogV2hpbGUgcnggcGF0aCBpcyByZS1yb3V0ZWQgdG8gdGhlIHBvd2VyIGRldGVjdG9yIHdlIGFsc28KKwkgKiBzdGFydCBhIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uLCB0byBtZWFzdXJlIHRoZQorCSAqIGNhcmQncyBub2lzZSBmbG9vciAodGhlIG5vaXNlIHdlIG1lYXN1cmUgd2hlbiB3ZSBhcmUgbm90CisJICogdHJhbnNtaXRpbmcgb3IgcmVjZWl2aW5nIGFueXRoaW5nKS4KKwkgKgogCSAqIElmIHdlIGFyZSBpbiBhIG5vaXN5IGVudmlyb25tZW50IEFHQyBjYWxpYnJhdGlvbiBtYXkgdGltZQotCSAqIG91dC4KKwkgKiBvdXQgYW5kL29yIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uIG1pZ2h0IHRpbWVvdXQuCiAJICovCiAJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKIAkJCQlBUjVLX1BIWV9BR0NDVExfQ0FMKTsKQEAgLTgyOCwzMCArMTIzNiwzNyBAQAogCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCwgMCwgZmFsc2UpKSB7CiAJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJnYWluIGNhbGlicmF0aW9uIHRpbWVvdXQgKCV1TUh6KVxuIiwKIAkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJLyoKLQkgKiBTdGFydCBub2lzZSBmbG9vciBjYWxpYnJhdGlvbgotCSAqCiAJICogSWYgd2UgcnVuIE5GIGNhbGlicmF0aW9uIGJlZm9yZSBBR0MsIGl0IGFsd2F5cyB0aW1lcyBvdXQuCiAJICogQmluYXJ5IEhBTCBzdGFydHMgTkYgYW5kIEFHQyBjYWxpYnJhdGlvbiBhdCB0aGUgc2FtZSB0aW1lCi0JICogYW5kIG9ubHkgd2FpdHMgZm9yIEFHQyB0byBmaW5pc2guIEkgYmVsaWV2ZSB0aGF0J3Mgd3JvbmcgYmVjYXVzZQotCSAqIGR1cmluZyBORiBjYWxpYnJhdGlvbiwgcnggcGF0aCBpcyBhbHNvIHJvdXRlZCB0byBhIGRldGVjdG9yLCBzbyBpZgotCSAqIGl0IGRvZXNuJ3QgZmluaXNoIHdlIHdvbid0IGhhdmUgUlguCi0JICoKLQkgKiBYWFg6IEZpbmQgYW4gaW50ZXJ2YWwgdGhhdCdzIE9LIGZvciBhbGwgY2FyZHMuLi4KKwkgKiBhbmQgb25seSB3YWl0cyBmb3IgQUdDIHRvIGZpbmlzaC4gQWxzbyBpZiBBR0Mgb3IgTkYgY2FsLgorCSAqIHRpbWVzIG91dCwgcmVzZXQgZG9lc24ndCBmYWlsIG9uIGJpbmFyeSBIQUwuIEkgYmVsaWV2ZQorCSAqIHRoYXQncyB3cm9uZyBiZWNhdXNlIHNpbmNlIHJ4IHBhdGggaXMgcm91dGVkIHRvIGEgZGV0ZWN0b3IsCisJICogaWYgY2FsLiBkb2Vzbid0IGZpbmlzaCB3ZSB3b24ndCBoYXZlIFJYLiBTYW0ncyBIQUwgZm9yIEFSNTIxMC81MjExCisJICogZW5hYmxlcyBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBhZnRlciBvZmZzZXQgY2FsaWJyYXRpb24gYW5kIGlmIG5vaXNlCisJICogZmxvb3IgY2FsaWJyYXRpb24gZmFpbHMsIHJlc2V0IGZhaWxzLiBJIGJlbGlldmUgdGhhdCdzCisJICogYSBiZXR0ZXIgYXBwcm9hY2gsIHdlIGp1c3QgbmVlZCB0byBmaW5kIGEgcG9sbGluZyBpbnRlcnZhbAorCSAqIHRoYXQgc3VpdHMgYmVzdCwgZXZlbiBpZiByZXNldCBjb250aW51ZXMgd2UgbmVlZCB0byBtYWtlCisJICogc3VyZSB0aGF0IHJ4IHBhdGggaXMgcmVhZHkuCiAJICovCiAJYXRoNWtfaHdfbm9pc2VfZmxvb3JfY2FsaWJyYXRpb24oYWgsIGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAorCisJLyoKKwkgKiBDb25maWd1cmUgUUNVcy9EQ1VzCisJICovCisKKwkvKiBUT0RPOiBIVyBDb21wcmVzc2lvbiBzdXBwb3J0IGZvciBkYXRhIHF1ZXVlcyAqLworCS8qIFRPRE86IEJ1cnN0IHByZWZldGNoIGZvciBkYXRhIHF1ZXVlcyAqLworCiAJLyoKIAkgKiBSZXNldCBxdWV1ZXMgYW5kIHN0YXJ0IGJlYWNvbiB0aW1lcnMgYXQgdGhlIGVuZCBvZiB0aGUgcmVzZXQgcm91dGluZQorCSAqIFRoaXMgYWxzbyBzZXRzIFFDVSBtYXNrIG9uIGVhY2ggRENVIGZvciAxOjEgcWN1IHRvIGRjdSBtYXBwaW5nCisJICogTm90ZTogSWYgd2Ugd2FudCB3ZSBjYW4gYXNzaWduIG11bHRpcGxlIHFjdXMgb24gb25lIGRjdS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtOyBpKyspIHsKLQkJLypObyBRQ1Ugb24gNTIxMCovCi0JCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkKLQkJCUFSNUtfUkVHX1dSSVRFX1EoYWgsIEFSNUtfUVVFVUVfUUNVTUFTSyhpKSwgaSk7Ci0KIAkJcmV0ID0gYXRoNWtfaHdfcmVzZXRfdHhfcXVldWUoYWgsIGkpOwogCQlpZiAocmV0KSB7CiAJCQlBVEg1S19FUlIoYWgtPmFoX3NjLApAQCAtODYwLDE0ICsxMjc1LDQwIEBACiAJCX0KIAl9CiAKKworCS8qCisJICogQ29uZmlndXJlIERNQS9JbnRlcnJ1cHRzCisJICovCisKKwkvKgorCSAqIFNldCBSeC9UeCBETUEgQ29uZmlndXJhdGlvbgorCSAqCisJICogU2V0IHN0YW5kYXJkIERNQSBzaXplICgxMjgpLiBOb3RlIHRoYXQKKwkgKiBhIERNQSBzaXplIG9mIDUxMiBjYXVzZXMgcnggb3ZlcnJ1bnMgYW5kIHR4IGVycm9ycworCSAqIG9uIHBjaS1lIGNhcmRzICh0ZXN0ZWQgb24gNTQyNCBidXQgc2luY2Ugcnggb3ZlcnJ1bnMKKwkgKiBhbHNvIG9jY3VyIG9uIDU0MTYvNTQxOCB3aXRoIG1hZHdpZmkgd2Ugc2V0IDEyOAorCSAqIGZvciBhbGwgUENJLUUgY2FyZHMgdG8gYmUgc2FmZSkuCisJICoKKwkgKiBYWFg6IG5lZWQgdG8gY2hlY2sgNTIxMCBmb3IgdGhpcworCSAqIFRPRE86IENoZWNrIG91dCB0eCB0cmlnZXIgbGV2ZWwsIGl0J3MgYWx3YXlzIDY0IG9uIGR1bXBzIGJ1dCBJCisJICogZ3Vlc3Mgd2UgY2FuIHR3ZWFrIGl0IGFuZCBzZWUgaG93IGl0IGdvZXMgOy0pCisJICovCisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFhDRkcsCisJCQlBUjVLX1RYQ0ZHX1NETUFNUiwgQVI1S19ETUFTSVpFXzEyOEIpOworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1JYQ0ZHLAorCQkJQVI1S19SWENGR19TRE1BTVcsIEFSNUtfRE1BU0laRV8xMjhCKTsKKwl9CisKIAkvKiBQcmUtZW5hYmxlIGludGVycnVwdHMgb24gNTIxMS81MjEyKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCiAJCWF0aDVrX2h3X3NldF9pbXIoYWgsIGFoLT5haF9pbXIpOwogCiAJLyoKLQkgKiBTZXQgUkYga2lsbCBmbGFncyBpZiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSAocmVhZCBmcm9tIHRoZSBFRVBST00pCi0JICogRGlzYWJsZSBncGlvX2ludHIgZm9yIG5vdyBzaW5jZSBpdCByZXN1bHRzIHN5c3RlbSBoYW5nLgotCSAqIFRPRE86IEhhbmRsZSB0aGlzIGluIGF0aDVrX2ludHIKKwkgKiBTZXR1cCBSRktpbGwgaW50ZXJydXB0IGlmIHJma2lsbCBmbGFnIGlzIHNldCBvbiBlZXByb20uCisJICogVE9ETzogVXNlIGdwaW8gcGluIGFuZCBwb2xhcml0eSBpbmZvcyBmcm9tIGVlcHJvbQorCSAqIFRPRE86IEhhbmRsZSB0aGlzIGluIGF0aDVrX2ludHIgYmVjYXVzZSBpdCdsbCByZXN1bHQKKwkgKiAJIGEgbmFzdHkgaW50ZXJydXB0IHN0b3JtLgogCSAqLwogI2lmIDAKIAlpZiAoQVI1S19FRVBST01fSERSX1JGS0lMTChhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb20uZWVfaGVhZGVyKSkgewpAQCAtODgwLDMzICsxMzIxLDEyIEBACiAJfQogI2VuZGlmCiAKLQkvKgotCSAqIFNldCB0aGUgMzJNSHogcmVmZXJlbmNlIGNsb2NrIG9uIDUyMTIgcGh5IGNsb2NrIHNsZWVwIHJlZ2lzdGVyCi0JICoKLQkgKiBUT0RPOiBGaW5kIG91dCBob3cgdG8gc3dpdGNoIHRvIGV4dGVybmFsIDMyS2h6IGNsb2NrIHRvIHNhdmUgcG93ZXIKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TQ1JfMzJNSFosIEFSNUtfUEhZX1NDUik7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0xNVF8zMk1IWiwgQVI1S19QSFlfU0xNVCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NBTF8zMk1IWiwgQVI1S19QSFlfU0NBTCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NMT0NLXzMyTUhaLCBBUjVLX1BIWV9TQ0xPQ0spOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NERUxBWV8zMk1IWiwgQVI1S19QSFlfU0RFTEFZKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfcGh5X3NwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7Ci0KLQkJZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1VTRUNfNTIxMSkgJiAweGZmZmZjMDdmIDsKLQkJZGF0YSB8PSAoYWgtPmFoX3BoeV9zcGVuZGluZyA9PSBBUjVLX1BIWV9TUEVORElOR18xOCkgPwotCQkJCQkJMHgwMDAwMGY4MCA6IDB4MDAwMDEzODAgOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfVVNFQ181MjExKTsKLQkJZGF0YSA9IDA7Ci0JfQotCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgMHg4MTE4KTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAzMjEwLCAweDgxMWMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwNTIsIDB4ODEwOCk7Ci0JCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSMjQxMykKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwNCwgMHg4MTIwKTsKLQl9CisJLyogRW5hYmxlIDMyS0h6IGNsb2NrIGZ1bmN0aW9uIGZvciBBUjUyMTIrIGNoaXBzCisJICogU2V0IGNsb2NrcyB0byAzMktIeiBvcGVyYXRpb24gYW5kIHVzZSBhbgorCSAqIGV4dGVybmFsIDMyS0h6IGNyeXN0YWwgd2hlbiBzbGVlcGluZyBpZiBvbmUKKwkgKiBleGlzdHMgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpCisJCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIHRydWUpOwogCiAJLyoKIAkgKiBEaXNhYmxlIGJlYWNvbnMgYW5kIHJlc2V0IHRoZSByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZidWZmZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwYmFmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmgKQEAgLTAsMCArMSwxMTgxIEBACisvKgorICogUkYgQnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICovCisKKworLyoKKyAqIFRoZXJlIGFyZSBzb21lIHNwZWNpYWwgcmVnaXN0ZXJzIG9uIHRoZSBSRiBjaGlwCisgKiB0aGF0IGNvbnRyb2wgdmFyaW91cyBvcGVyYXRpb24gc2V0dGluZ3MgcmVsYXRlZCBtb3N0bHkgdG8KKyAqIHRoZSBhbmFsb2cgcGFydHMgKGNoYW5uZWwsIGdhaW4gYWRqdXN0bWVudCBldGMpLgorICoKKyAqIFdlIGRvbid0IHdyaXRlIG9uIHRob3NlIHJlZ2lzdGVycyBkaXJlY3RseSBidXQKKyAqIHdlIHNlbmQgYSBkYXRhIHBhY2tldCBvbiB0aGUgY2hpcCwgdXNpbmcgYSBzcGVjaWFsIHJlZ2lzdGVyLAorICogdGhhdCBob2xkcyBhbGwgdGhlIHNldHRpbmdzIHdlIG5lZWQuIEFmdGVyIHdlICd2ZSBzZW50IHRoZQorICogZGF0YSBwYWNrZXQsIHdlIHdyaXRlIG9uIGFub3RoZXIgc3BlY2lhbCByZWdpc3RlciB0byBub3RpZnkgaHcKKyAqIHRvIGFwcGx5IHRoZSBzZXR0aW5ncy4gVGhpcyBpcyBkb25lIHNvIHRoYXQgY29udHJvbCByZWdpc3RlcnMKKyAqIGNhbiBiZSBkeW5hbWljYWx5IHByb2dyYW1tZWQgZHVyaW5nIG9wZXJhdGlvbiBhbmQgdGhlIHNldHRpbmdzCisgKiBhcmUgYXBwbGllZCBmYXN0ZXIgb24gdGhlIGh3LgorICoKKyAqIFdlIGNhbGwgZWFjaCBkYXRhIHBhY2tldCBhbiAiUkYgQmFuayIgYW5kIGFsbCB0aGUgZGF0YSB3ZSB3cml0ZQorICogKGFsbCBSRiBCYW5rcykgIlJGIEJ1ZmZlciIuIFRoaXMgZmlsZSBob2xkcyBpbml0aWFsIFJGIEJ1ZmZlcgorICogZGF0YSBmb3IgdGhlIGRpZmZlcmVudCBSRiBjaGlwcywgYW5kIHZhcmlvdXMgaW5mbyB0byBtYXRjaCBSRgorICogQnVmZmVyIG9mZnNldHMgd2l0aCBzcGVjaWZpYyBSRiByZWdpc3RlcnMgc28gdGhhdCB3ZSBjYW4gYWNjZXNzCisgKiB0aGVtLiBXZSB0d2VhayB0aGVzZSBzZXR0aW5ncyBvbiByZnJlZ3NfaW5pdCBmdW5jdGlvbi4KKyAqCisgKiBBbHNvIGNoZWNrIG91dCByZWcuaCBhbmQgVS5TLiBQYXRlbnQgNjY3Nzc3OSBCMSAoYWJvdXQgYnVmZmVyCisgKiByZWdpc3RlcnMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzKToKKyAqCisgKiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vcGF0ZW50cz9pZD1xTlVSQUFBQUVCQUoKKyAqLworCisKKy8qCisgKiBTdHJ1Y3QgdG8gaG9sZCBkZWZhdWx0IG1vZGUgc3BlY2lmaWMgUkYKKyAqIHJlZ2lzdGVyIHZhbHVlcyAoUkYgQmFua3MpCisgKi8KK3N0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgeworCXU4CXJmYl9iYW5rOwkJLyogUkYgQmFuayBudW1iZXIgKi8KKwl1MTYJcmZiX2N0cmxfcmVnaXN0ZXI7CS8qIFJGIEJ1ZmZlciBjb250cm9sIHJlZ2lzdGVyICovCisJdTMyCXJmYl9tb2RlX2RhdGFbNV07CS8qIFJGIEJ1ZmZlciBkYXRhIGZvciBlYWNoIG1vZGUgKi8KK307CisKKy8qCisgKiBTdHJ1Y3QgdG8gaG9sZCBSRiBCdWZmZXIgZmllbGQKKyAqIGluZm9zIHVzZWQgdG8gYWNjZXNzIGNlcnRhaW4gUkYKKyAqIGFuYWxvZyByZWdpc3RlcnMKKyAqLworc3RydWN0IGF0aDVrX3JmYl9maWVsZCB7CisJdTgJbGVuOwkvKiBGaWVsZCBsZW5ndGggKi8KKwl1MTYJcG9zOwkvKiBPZmZzZXQgb24gdGhlIHJhdyBwYWNrZXQgKi8KKwl1OAljb2w7CS8qIENvbHVtbiAtdXNlZCBmb3Igc2hpZnRpbmcgKi8KK307CisKKy8qCisgKiBSRiBhbmFsb2cgcmVnaXN0ZXIgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgYXRoNWtfcmZfcmVnIHsKKwl1OAkJCWJhbms7CS8qIFJGIEJ1ZmZlciBCYW5rIG51bWJlciAqLworCXU4CQkJaW5kZXg7CS8qIFJlZ2lzdGVyJ3MgaW5kZXggb24gcmZfcmVnc19pZHggKi8KKwlzdHJ1Y3QgYXRoNWtfcmZiX2ZpZWxkCWZpZWxkOwkvKiBSRiBCdWZmZXIgZmllbGQgZm9yIHRoaXMgcmVnaXN0ZXIgKi8KK307CisKKy8qIE1hcCBSRiByZWdpc3RlcnMgdG8gaW5kZXhlcworICogV2UgZG8gdGhpcyB0byBoYW5kbGUgY29tbW9uIGJpdHMgYW5kIG1ha2Ugb3VyCisgKiBsaWZlIGVhc2llciBieSB1c2luZyBhbiBpbmRleCBmb3IgZWFjaCByZWdpc3RlcgorICogaW5zdGVhZCBvZiBhIGZ1bGwgcmZiX2ZpZWxkICovCitlbnVtIGF0aDVrX3JmX3JlZ3NfaWR4IHsKKwkvKiBCQU5LIDYgKi8KKwlBUjVLX1JGX09CXzJHSFogPSAwLAorCUFSNUtfUkZfT0JfNUdIWiwKKwlBUjVLX1JGX0RCXzJHSFosCisJQVI1S19SRl9EQl81R0haLAorCUFSNUtfUkZfRklYRURfQklBU19BLAorCUFSNUtfUkZfRklYRURfQklBU19CLAorCUFSNUtfUkZfUFdEX1hQRCwKKwlBUjVLX1JGX1hQRF9TRUwsCisJQVI1S19SRl9YUERfR0FJTiwKKwlBUjVLX1JGX1BEX0dBSU5fTE8sCisJQVI1S19SRl9QRF9HQUlOX0hJLAorCUFSNUtfUkZfSElHSF9WQ19DUCwKKwlBUjVLX1JGX01JRF9WQ19DUCwKKwlBUjVLX1JGX0xPV19WQ19DUCwKKwlBUjVLX1JGX1BVU0hfVVAsCisJQVI1S19SRl9QQUQyR05ELAorCUFSNUtfUkZfWEIyX0xWTCwKKwlBUjVLX1JGX1hCNV9MVkwsCisJQVI1S19SRl9QV0RfSUNMT0JVRl8yRywKKwlBUjVLX1JGX1BXRF84NCwKKwlBUjVLX1JGX1BXRF85MCwKKwlBUjVLX1JGX1BXRF8xMzAsCisJQVI1S19SRl9QV0RfMTMxLAorCUFSNUtfUkZfUFdEXzEzMiwKKwlBUjVLX1JGX1BXRF8xMzYsCisJQVI1S19SRl9QV0RfMTM3LAorCUFSNUtfUkZfUFdEXzEzOCwKKwlBUjVLX1JGX1BXRF8xNjYsCisJQVI1S19SRl9QV0RfMTY3LAorCUFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwKKwkvKiBCQU5LIDcgKi8KKwlBUjVLX1JGX0dBSU5fSSwKKwlBUjVLX1JGX1BMT19TRUwsCisJQVI1S19SRl9SRkdBSU5fU0VMLAorCUFSNUtfUkZfUkZHQUlOX1NURVAsCisJQVI1S19SRl9XQUlUX1MsCisJQVI1S19SRl9XQUlUX0ksCisJQVI1S19SRl9NQVhfVElNRSwKKwlBUjVLX1JGX01JWFZHQV9PVlIsCisJQVI1S19SRl9NSVhHQUlOX09WUiwKKwlBUjVLX1JGX01JWEdBSU5fU1RFUCwKKwlBUjVLX1JGX1BEX0RFTEFZX0EsCisJQVI1S19SRl9QRF9ERUxBWV9CLAorCUFSNUtfUkZfUERfREVMQVlfWFIsCisJQVI1S19SRl9QRF9QRVJJT0RfQSwKKwlBUjVLX1JGX1BEX1BFUklPRF9CLAorCUFSNUtfUkZfUERfUEVSSU9EX1hSLAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKlwKKyogUkY1MTExIChTb21icmVybykgKgorXCoqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTFfT0JfMkdIWgkJeyAzLCAxMTksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9EQl8yR0haCQl7IDMsIDEyMiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTFfT0JfNUdIWgkJeyAzLCAxMDQsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9EQl81R0haCQl7IDMsIDEwNywgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTFfUFdEX1hQRAkJeyAxLCA5NSwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9YUERfR0FJTgkJeyA0LCA5NiwgIDAgfQorCisvKiBBY2Nlc3MgdG8gUFdEIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUjVLX1JGNTExMV9QV0QoX24pCQl7IDEsICgxMzUgLSBfbiksIDMgfQorCisvKiBCQU5LIDcJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTExX0dBSU5fSQkJeyA2LCAyOSwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9QTE9fU0VMCQl7IDEsIDQsICAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX1JGR0FJTl9TRUwJCXsgMSwgMzYsICAwIH0KKyNkZWZpbmUgQVI1S19SRjUxMTFfUkZHQUlOX1NURVAJCXsgNiwgMzcsICAwIH0KKy8qIE9ubHkgb24gQVI1MjEyIEJhc2VCYW5kIGFuZCB1cCAqLworI2RlZmluZQlBUjVLX1JGNTExMV9XQUlUX1MJCXsgNSwgMTksICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfV0FJVF9JCQl7IDUsIDI0LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX01BWF9USU1FCQl7IDIsIDQ5LCAgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMVtdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGNTExMV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTFfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTExX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQlBUjVLX1JGNTExMV9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9QV0RfWFBELAkJQVI1S19SRjUxMTFfUFdEX1hQRH0sCisJezYsIEFSNUtfUkZfWFBEX0dBSU4sCQlBUjVLX1JGNTExMV9YUERfR0FJTn0sCisJezYsIEFSNUtfUkZfUFdEXzg0LAkJQVI1S19SRjUxMTFfUFdEKDg0KX0sCisJezYsIEFSNUtfUkZfUFdEXzkwLAkJQVI1S19SRjUxMTFfUFdEKDkwKX0sCisJezcsIEFSNUtfUkZfR0FJTl9JLAkJQVI1S19SRjUxMTFfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9QTE9fU0VMLAkJQVI1S19SRjUxMTFfUExPX1NFTH0sCisJezcsIEFSNUtfUkZfUkZHQUlOX1NFTCwJCUFSNUtfUkY1MTExX1JGR0FJTl9TRUx9LAorCXs3LCBBUjVLX1JGX1JGR0FJTl9TVEVQLAlBUjVLX1JGNTExMV9SRkdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfV0FJVF9TLAkJQVI1S19SRjUxMTFfV0FJVF9TfSwKKwl7NywgQVI1S19SRl9XQUlUX0ksCQlBUjVLX1JGNTExMV9XQUlUX0l9LAorCXs3LCBBUjVLX1JGX01BWF9USU1FLAkJQVI1S19SRjUxMTFfTUFYX1RJTUV9Cit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTExW10gPSB7CisJeyAwLCAweDk4OWMsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMGMwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IDAsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMGY5LCAweDAwMDQwMGY5LCAweDAwMDQwMGZmLCAweDAwMDQwMGZkLCAweDAwMDQwMGZkIH0gfSwKKwl7IDAsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKKwl7IDEsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDE0IH0gfSwKKwl7IDMsIDB4OThkOCwKKwkgICAgeyAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMzgwMGMwLCAweDAwMzgwMDgwLCAweDAyMzgwMGMwLCAweDAwMzgwMGMwLCAweDAwMzgwMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDIwMDA2LCAweDAwMDIwMDA2LCAweDAwMDAwMDA2LCAweDAwMDIwMDA2LCAweDAwMDIwMDA2IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3IH0gfSwKKwl7IDYsIDB4OThkNCwKKwkgICAgeyAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGYxLCAweDAwMDAwMGYxLCAweDAwMDAwMDYxLCAweDAwMDAwMGYxLCAweDAwMDAwMGYxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA5MDRmLCAweDAwMDA5MDRmLCAweDAwMDA5MDRjLCAweDAwMDA5MDRmLCAweDAwMDA5MDRmIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxMjVhLCAweDAwMDAxMjVhLCAweDAwMDAxMjlhLCAweDAwMDAxMjVhLCAweDAwMDAxMjVhIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBmLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGNTExMi9SRjIxMTIgKERlcmJ5KSAqCitcKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNyAoQ29tbW9uKQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMlhfR0FJTl9JCQl7IDYsIDE0LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyWF9NSVhWR0FfT1ZSCQl7IDEsIDM2LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyWF9NSVhHQUlOX09WUgl7IDIsIDM3LCAgMCB9CisjZGVmaW5lIEFSNUtfUkY1MTEyWF9NSVhHQUlOX1NURVAJeyA0LCAzMiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfREVMQVlfQQkJeyA0LCA1OCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfREVMQVlfQgkJeyA0LCA2MiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfREVMQVlfWFIJeyA0LCA2NiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0EJeyA0LCA3MCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0IJeyA0LCA3NCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfUERfUEVSSU9EX1hSCXsgNCwgNzgsICAwIH0KKworLyogUkZYMTEyIChEZXJieSAxKSAqLworCisvKiBCQU5LIDYgCQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMl9PQl8yR0haCQl7IDMsIDI2OSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX0RCXzJHSFoJCXsgMywgMjcyLCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9PQl81R0haCQl7IDMsIDI2MSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX0RCXzVHSFoJCXsgMywgMjY0LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0EJeyAxLCAyNjAsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0IJeyAxLCAyNTksIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyX1hQRF9TRUwJCXsgMSwgMjg0LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJfWFBEX0dBSU4JCXsgMiwgMjUyLCAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTJfUFdEKF9uKQkJeyAxLCAoMzAyIC0gX24pLCAzIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc181MTEyW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkY1MTEyX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGNTExMl9EQl8yR0hafSwKKwl7NiwgQVI1S19SRl9PQl81R0haLAkJQVI1S19SRjUxMTJfT0JfNUdIWn0sCisJezYsIEFSNUtfUkZfREJfNUdIWiwJCUFSNUtfUkY1MTEyX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQSwJQVI1S19SRjUxMTJfRklYRURfQklBU19BfSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0IsCUFSNUtfUkY1MTEyX0ZJWEVEX0JJQVNfQn0sCisJezYsIEFSNUtfUkZfWFBEX1NFTCwJCUFSNUtfUkY1MTEyX1hQRF9TRUx9LAorCXs2LCBBUjVLX1JGX1hQRF9HQUlOLAkJQVI1S19SRjUxMTJfWFBEX0dBSU59LAorCXs2LCBBUjVLX1JGX1BXRF8xMzAsCQlBUjVLX1JGNTExMl9QV0QoMTMwKX0sCisJezYsIEFSNUtfUkZfUFdEXzEzMSwJCUFSNUtfUkY1MTEyX1BXRCgxMzEpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMyLAkJQVI1S19SRjUxMTJfUFdEKDEzMil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzYsCQlBUjVLX1JGNTExMl9QV0QoMTM2KX0sCisJezYsIEFSNUtfUkZfUFdEXzEzNywJCUFSNUtfUkY1MTEyX1BXRCgxMzcpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM4LAkJQVI1S19SRjUxMTJfUFdEKDEzOCl9LAorCXs3LCBBUjVLX1JGX0dBSU5fSSwJCUFSNUtfUkY1MTEyWF9HQUlOX0l9LAorCXs3LCBBUjVLX1JGX01JWFZHQV9PVlIsCQlBUjVLX1JGNTExMlhfTUlYVkdBX09WUn0sCisJezcsIEFSNUtfUkZfTUlYR0FJTl9PVlIsCUFSNUtfUkY1MTEyWF9NSVhHQUlOX09WUn0sCisJezcsIEFSNUtfUkZfTUlYR0FJTl9TVEVQLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9TVEVQfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9BLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0F9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX0IsCQlBUjVLX1JGNTExMlhfUERfREVMQVlfQn0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfWFIsCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9YUn0sCisJezcsIEFSNUtfUkZfUERfUEVSSU9EX0EsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfQX0sCisJezcsIEFSNUtfUkZfUERfUEVSSU9EX0IsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfQn0sCisJezcsIEFSNUtfUkZfUERfUEVSSU9EX1hSLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX1hSfSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzUxMTJbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMGMwYzAsIDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYjAsIDB4MDAwMDAwYjAsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTggfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2YzRhNDEsIDB4MDA2YzRhNDEsIDB4MDA2YzRhZjEsIDB4MDA2YzRhNjEsIDB4MDA2YzRhNjEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDg5MmEsIDB4MDA1MDg5MmEsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAgfSB9LAorCXsgNiwgMHg5OGQwLAorCSAgICB7IDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorfTsKKworLyogUkZYMTEyQSAoRGVyYnkgMikgKi8KKworLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfT0JfMkdIWgkJeyAzLCAyODcsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfREJfMkdIWgkJeyAzLCAyOTAsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9PQl81R0haCQl7IDMsIDI3OSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9EQl81R0haCQl7IDMsIDI4MiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQQl7IDEsIDI3OCwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0IJeyAxLCAyNzcsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9YUERfU0VMCQl7IDEsIDMwMiwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QREdBSU5MTwkJeyAyLCAyNzAsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfUERHQUlOSEkJCXsgMiwgMjU3LCAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTJBX1BXRChfbikJCXsgMSwgKDMwNiAtIF9uKSwgMyB9CisKKy8qIFZvbHRhZ2UgcmVndWxhdG9ycyAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfSElHSF9WQ19DUAkJeyAyLCA5MCwgIDIgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfTUlEX1ZDX0NQCQl7IDIsIDkyLCAgMiB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9MT1dfVkNfQ1AJCXsgMiwgOTQsICAyIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX1BVU0hfVVAJCXsgMSwgMjU0LCAgMiB9CisKKy8qIFBvd2VyIGNvbnN1bXB0aW9uICovCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QQUQyR05ECQl7IDEsIDI4MSwgMSB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9YQjJfTFZMCQl7IDIsIDEsCSAgMyB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9YQjVfTFZMCQl7IDIsIDMsCSAgMyB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMmFbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjUxMTJBX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGNTExMkFfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTEyQV9PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJQVI1S19SRjUxMTJBX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQSwJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQX0sCisJezYsIEFSNUtfUkZfRklYRURfQklBU19CLAlBUjVLX1JGNTExMkFfRklYRURfQklBU19CfSwKKwl7NiwgQVI1S19SRl9YUERfU0VMLAkJQVI1S19SRjUxMTJBX1hQRF9TRUx9LAorCXs2LCBBUjVLX1JGX1BEX0dBSU5fTE8sCQlBUjVLX1JGNTExMkFfUERHQUlOTE99LAorCXs2LCBBUjVLX1JGX1BEX0dBSU5fSEksCQlBUjVLX1JGNTExMkFfUERHQUlOSEl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzAsCQlBUjVLX1JGNTExMkFfUFdEKDEzMCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzEsCQlBUjVLX1JGNTExMkFfUFdEKDEzMSl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzIsCQlBUjVLX1JGNTExMkFfUFdEKDEzMil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzYsCQlBUjVLX1JGNTExMkFfUFdEKDEzNil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzcsCQlBUjVLX1JGNTExMkFfUFdEKDEzNyl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzgsCQlBUjVLX1JGNTExMkFfUFdEKDEzOCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xNjYsCQlBUjVLX1JGNTExMkFfUFdEKDE2Nil9LAorCXs2LCBBUjVLX1JGX1BXRF8xNjcsCQlBUjVLX1JGNTExMkFfUFdEKDE2Nyl9LAorCXs2LCBBUjVLX1JGX0hJR0hfVkNfQ1AsCQlBUjVLX1JGNTExMkFfSElHSF9WQ19DUH0sCisJezYsIEFSNUtfUkZfTUlEX1ZDX0NQLAkJQVI1S19SRjUxMTJBX01JRF9WQ19DUH0sCisJezYsIEFSNUtfUkZfTE9XX1ZDX0NQLAkJQVI1S19SRjUxMTJBX0xPV19WQ19DUH0sCisJezYsIEFSNUtfUkZfUFVTSF9VUCwJCUFSNUtfUkY1MTEyQV9QVVNIX1VQfSwKKwl7NiwgQVI1S19SRl9QQUQyR05ELAkJQVI1S19SRjUxMTJBX1BBRDJHTkR9LAorCXs2LCBBUjVLX1JGX1hCMl9MVkwsCQlBUjVLX1JGNTExMkFfWEIyX0xWTH0sCisJezYsIEFSNUtfUkZfWEI1X0xWTCwJCUFSNUtfUkY1MTEyQV9YQjVfTFZMfSwKKwl7NywgQVI1S19SRl9HQUlOX0ksCQlBUjVLX1JGNTExMlhfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9NSVhWR0FfT1ZSLAkJQVI1S19SRjUxMTJYX01JWFZHQV9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fT1ZSLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fU1RFUCwJQVI1S19SRjUxMTJYX01JWEdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQSwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9BfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9CLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0J9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX1hSLAlBUjVLX1JGNTExMlhfUERfREVMQVlfWFJ9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9BLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0F9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9CLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0J9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9YUiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTEyYVtdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMzA2MDQwOCwgMHgwMzA3MDQwOCwgMHgwMzA2MDQwOCwgMHgwMzA2MDQwOCwgMHgwMzA3MDQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCwgMHgwMDE4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDYwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCwgMHgwMDZlMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCwgMHgwMDRiMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCwgMHgwNDQ4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCwgMHgwMDRjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCwgMHgwMGU0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCwgMHgwNDNmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCwgMHgwMDBjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCwgMHgwMjE5MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCwgMHgwMDI0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCwgMHgwMDk5MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCwgMHgwMDUwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCwgMHgwMDEyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCwgMHhjMDMyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDExMDAwMCwgMHgwMDExMDAwMCwgMHgwMDExMDAwMCwgMHgwMDExMDAwMCwgMHgwMDExMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCwgMHg4NjI4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCwgMHgwMGYyMDA4MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSwgMHgwMDI3MDAxOSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiwgMHgwMDAwMDBiMiB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCwgMHgwMGIwMjA4NCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCwgMHgwMDQxMjVhNCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCwgMHgwMDExOTIyMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCB9IH0sCisJeyA2LCAweDk4ZDgsCisJICAgIHsgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCwgMHgwMDAwMDA5NCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCwgMHgwMDAwMDBmMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiwgMHgwMDAwMDBhMiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCwgMHgwMDAwMDBkNCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYywgMHgwMDAwMTRjYyB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YyB9IH0sCisJeyA3LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMyB9IH0sCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKlwKKyogUkYyNDEzIChHcmlmZmluKSAqCitcKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYgCQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGMjQxM19PQl8yR0haCQl7IDMsIDE2OCwgMCB9CisjZGVmaW5lCUFSNUtfUkYyNDEzX0RCXzJHSFoJCXsgMywgMTY1LCAwIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc18yNDEzW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkYyNDEzX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGMjQxM19EQl8yR0hafSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncworICogWFhYOiBhL2FUdXJibyA/Pz8KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MTNbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTggfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyODAwMDAsIDB4MDAyODAwMDAsIDB4MDAyODAwNjAsIDB4MDAyODAwNjAsIDB4MDAyODAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwYzAsIDB4MDA1MDAwYzAsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTggfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAgfSB9LAorCXsgNiwgMHg5OGQ4LAorCSAgICB7IDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGMjMxNS9SRjIzMTYgKENvYnJhIFNvQykgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGMjMxNl9PQl8yR0haCQl7IDMsIDE3OCwgMCB9CisjZGVmaW5lCUFSNUtfUkYyMzE2X0RCXzJHSFoJCXsgMywgMTc1LCAwIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc18yMzE2W10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkYyMzE2X09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGMjMxNl9EQl8yR0hafSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzIzMTZbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwODAsIDB4MDBhMDAwODAsIDB4MDBhMDAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMGQsIDB4MDA0MDAwMGQsIDB4MDA0MDAwMGQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTggfSB9LAorCXsgNiwgMHg5OGMwLAorCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGNTQxMy9SRjU0MjQgKEVhZ2xlL0NvbmRvcikgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTQxM19PQl8yR0haCQl7IDMsIDI0MSwgMCB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RCXzJHSFoJCXsgMywgMjM4LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTQxM19PQl81R0haCQl7IDMsIDI0NywgMCB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RCXzVHSFoJCXsgMywgMjQ0LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTQxM19QV0RfSUNMT0JVRjJHCXsgMywgMTMxLCAzIH0KKyNkZWZpbmUJQVI1S19SRjU0MTNfREVSQllfQ0hBTl9TRUxfTU9ERQl7IDEsIDI5MSwgMiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTQxM1tdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQkgQVI1S19SRjU0MTNfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCSBBUjVLX1JGNTQxM19EQl8yR0hafSwKKwl7NiwgQVI1S19SRl9PQl81R0haLAkJIEFSNUtfUkY1NDEzX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQkgQVI1S19SRjU0MTNfREJfNUdIWn0sCisJezYsIEFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsCSBBUjVLX1JGNTQxM19QV0RfSUNMT0JVRjJHfSwKKwl7NiwgQVI1S19SRl9ERVJCWV9DSEFOX1NFTF9NT0RFLCBBUjVLX1JGNTQxM19ERVJCWV9DSEFOX1NFTF9NT0RFfSwKK307CisKKy8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzU0MTNbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDAwYzAsIDB4MDBhMDAwYzAsIDB4MDBlMDAwYzAsIDB4MDBlMDAwYzAsIDB4MDBlMDAwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDJjMDAsIDB4MDAwMDJjMDAsIDB4MDAwMDM2MDAsIDB4MDAwMDM2MDAsIDB4MDAwMDJjMDAgfSB9LAorCXsgNiwgMHg5OGM4LAorCSAgICB7IDB4MDAwMDA0MDMsIDB4MDAwMDA0MDMsIDB4MDAwNDA0MDMsIDB4MDAwNDA0MDMsIDB4MDAwNDA0MDMgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFJGMjQyNS9SRjI0MTcgKFN3YW4vTmFsYSkgKgorKiBBUjIzMTcgKFNwaWRlciBTb0MpICAgICAgICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjI0MjVfT0JfMkdIWgkJeyAzLCAxOTMsIDAgfQorI2RlZmluZQlBUjVLX1JGMjQyNV9EQl8yR0haCQl7IDMsIDE5MCwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjQyNVtdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjQyNV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjI0MjVfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MKKyAqIFhYWDogYS9hVHVyYm8gPworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjQyNVtdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisvKgorICogVE9ETzogSGFuZGxlIHRoZSBmZXcgZGlmZmVyZW5jZXMgd2l0aCBzd2FuIGR1cmluZworICogYmFuayBtb2RpZmljYXRpb24gYW5kIGdldCByaWQgb2YgdGhpcworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjMxN1tdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAxMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAxMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisvKgorICogVE9ETzogSGFuZGxlIHRoZSBmZXcgZGlmZmVyZW5jZXMgd2l0aCBzd2FuIGR1cmluZworICogYmFuayBtb2RpZmljYXRpb24gYW5kIGdldCByaWQgb2YgdGhpcworICogWFhYOiBhL2FUdXJibyA/CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yNDE3W10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZTcwMDAwLCAweDAwZTcwMDAwLCAweDgwZTcwMDAwLCAweDgwZTcwMDAwLCAweDAwZTcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTQwMDAwLCAweDAwMTQwMDAwLCAweDAwMTQwMDAwLCAweDAwMTQwMDAwLCAweDAwMTQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDcwMDFhLCAweDAwMDcwMDFhLCAweDAyMDcwMDFhLCAweDAyMDcwMDFhLCAweDAwMDcwMDFhIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODEwMDAwLCAweDAwODEwMDAwLCAweDAwODEwMDYwLCAweDAwODEwMDYwLCAweDAwODEwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDIwODAwLCAweDAwMDIwODAwLCAweDAwMDIwODAzLCAweDAwMDIwODAzLCAweDAwMDIwODAzIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNjg4LCAweDAwMDAxNjg4LCAweDAwMDAxNjg4LCAweDAwMDAxNjg4LCAweDAwMDAxNjg4IH0gfSwKKwl7IDYsIDB4OThjNCwKKwkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmZ2Fpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTRkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaApAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIFJGIEdhaW4gb3B0aW1pemF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDkgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqLworCisvKgorICogTW9kZS1zcGVjaWZpYyBSRiBHYWluIHRhYmxlICg2NGJ5dGVzKSBmb3IgUkY1MTExLzUxMTIKKyAqIChSRjUxMTAgb25seSBjb21lcyB3aXRoIEFSNTIxMCBhbmQgb25seSBzdXBwb3J0cyBhL3R1cmJvIGEgbW9kZSBzbyBpbml0aWFsCisgKiBSRiBHYWluIHZhbHVlcyBhcmUgaW5jbHVkZWQgaW4gQVI1S19BUjUyMTBfSU5JKQorICovCitzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiB7CisJdTE2CXJmZ19yZWdpc3RlcjsJLyogUkYgR2FpbiByZWdpc3RlciBhZGRyZXNzICovCisJdTMyCXJmZ192YWx1ZVsyXTsJLyogW2ZyZXEgKHNlZSBiZWxvdyldICovCit9OworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTExW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMWU5LCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMTUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMTk5LCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDU5LCAweDAwMDAwMDQ0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDg0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMWE1LCAweDAwMDAwMTQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDFlNSwgMHgwMDAwMDE4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMjUsIDB4MDAwMDAxYzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMDE0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDA0MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwODIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMTc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE5OCwgMHgwMDAwMDFiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxZDgsIDB4MDAwMDAxZjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDE4LCAweDAwMDAwMDEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA1OCwgMHgwMDAwMDA1MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwOTgsIDB4MDAwMDAwOTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWE0LCAweDAwMDAwMTdjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFlNCwgMHgwMDAwMDFiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMjQsIDB4MDAwMDAxZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDY0LCAweDAwMDAwMDBhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDBhNCwgMHgwMDAwMDA0YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwZTQsIDB4MDAwMDAwOGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMTBhLCAweDAwMDAwMTVhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE0YSwgMHgwMDAwMDE5YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxOGEsIDB4MDAwMDAxZGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMWNhLCAweDAwMDAwMDBlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwYSwgMHgwMDAwMDA0ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwNGEsIDB4MDAwMDAwOGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDhhLCAweDAwMDAwMTVlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFiYSwgMHgwMDAwMDE5ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAxZmEsIDB4MDAwMDAxZGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAxODYsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWM2LCAweDAwMDAwMTc5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwNiwgMHgwMDAwMDFiOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwNDYsIDB4MDAwMDAxZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDg2LCAweDAwMDAwMDM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWJkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwM2QgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDdkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTEyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTJbXSA9IHsKKwkvKgkJCSAgICAgIDVHaHoJMkdoegkqLworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwNDcsIDB4MDAwMDAwNDcgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwODcsIDB4MDAwMDAwODcgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAxYTAsIDB4MDAwMDAxYTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxZTAsIDB4MDAwMDAxZTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAxZTEsIDB4MDAwMDAxZTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDE2MiwgMHgwMDAwMDE2MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYTIsIDB4MDAwMDAxYTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMWUyLCAweDAwMDAwMWUyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwNjIsIDB4MDAwMDAwNjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTYzLCAweDAwMDAwMTYzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFhMywgMHgwMDAwMDFhMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAxZTMsIDB4MDAwMDAxZTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDIzLCAweDAwMDAwMDIzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA2MywgMHgwMDAwMDA2MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxODQsIDB4MDAwMDAxODQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWM0LCAweDAwMDAwMWM0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAxZWEsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDJhLCAweDAwMDAwMDRiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDA2YSwgMHgwMDAwMDA4YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwYWEsIDB4MDAwMDAxYWMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMWFiLCAweDAwMDAwMWVjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDFlYiwgMHgwMDAwMDAyYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMmIsIDB4MDAwMDAwMTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDZiLCAweDAwMDAwMDUyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDBhYiwgMHgwMDAwMDA5MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAxYWMsIDB4MDAwMDAxOTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWVjLCAweDAwMDAwMWQzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAyYywgMHgwMDAwMDAxMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwNTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDkzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDBiYSwgMHgwMDAwMDE5NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYmIsIDB4MDAwMDAxZDQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMWZiLCAweDAwMDAwMDE0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAzYiwgMHgwMDAwMDAzYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwN2IsIDB4MDAwMDAwN2EgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGJiLCAweDAwMDAwMGJhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDFiYywgMHgwMDAwMDFiYiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAxZmMsIDB4MDAwMDAxZmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDNjLCAweDAwMDAwMDNiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDA3YywgMHgwMDAwMDA3YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYmMsIDB4MDAwMDAwYmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWJjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwM2MgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDdjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjI0MTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fMjQxM1tdID0geworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxNjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAyOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFjOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE5MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA1MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwOTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDk5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBkOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBBUjIzMTYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fMjMxNltdID0geworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxNjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBhOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDEzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTcwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorfTsKKworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTQxMyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81NDEzW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWExLCAweDAwMDAwMTYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMWUxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMTg4LCAweDAwMDAwMDYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMTg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDA4LCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwODgsIDB4MDAwMDAwNDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDE2OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjksIDB4MDAwMDAxYTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMWU5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDFkMCwgMHgwMDAwMDAyOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwNjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDUwLCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA5MCwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAxYjEsIDB4MDAwMDAwMTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWYxLCAweDAwMDAwMDUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAzMSwgMHgwMDAwMDA5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwNzEsIDB4MDAwMDAxNzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWI4LCAweDAwMDAwMWIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDFmOCwgMHgwMDAwMDFmMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMzgsIDB4MDAwMDAwMzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDc4LCAweDAwMDAwMDcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZDksIDB4MDAwMDAxZDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwOTksIDB4MDAwMDAwOTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMGQ5LCAweDAwMDAwMTc5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDFiOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMDM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDA3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKK307CisKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjI0MjUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fMjQyNVtdID0geworCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFjOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQ5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFiOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDM5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorfTsKKworI2RlZmluZSBBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTEJCTQKKyNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCQk3CisjZGVmaW5lIEFSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTCQlBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTIKKyNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOCQkxNQorI2RlZmluZSBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4JCTIwCisjZGVmaW5lIEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUgkJNQorI2RlZmluZSBBUjVLX0dBSU5fQ0NLX09GRE1fR0FJTl9ERUxUQQkJMTUKKyNkZWZpbmUgQVI1S19HQUlOX1NURVBfQ09VTlQJCQkxMAorCisvKiBDaGVjayBpZiBvdXIgY3VycmVudCBtZWFzdXJlbWVudCBpcyBpbnNpZGUgb3VyCisgKiBjdXJyZW50IHZhcmlhYmxlIGF0dGVudWF0aW9uIHdpbmRvdyAqLworI2RlZmluZSBBUjVLX0dBSU5fQ0hFQ0tfQURKVVNUKF9nKSAJCVwKKwkoKF9nKS0+Z19jdXJyZW50IDw9IChfZyktPmdfbG93IHx8IChfZyktPmdfY3VycmVudCA+PSAoX2cpLT5nX2hpZ2gpCisKK3N0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwIHsKKwlzOAkJCQlnb3NfcGFyYW1bQVI1S19HQUlOX0NSTl9NQVhfRklYX0JJVFNdOworCXM4CQkJCWdvc19nYWluOworfTsKKworc3RydWN0IGF0aDVrX2dhaW5fb3B0IHsKKwl1OAkJCQlnb19kZWZhdWx0OworCXU4CQkJCWdvX3N0ZXBzX2NvdW50OworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwCWdvX3N0ZXBbQVI1S19HQUlOX1NURVBfQ09VTlRdOworfTsKKworLyoKKyAqIFBhcmFtZXRlcnMgb24gZ29zX3BhcmFtOgorICogMSkgVHggY2xpcCBQSFkgcmVnaXN0ZXIKKyAqIDIpIFBXRCA5MCBSRiByZWdpc3RlcgorICogMykgUFdEIDg0IFJGIHJlZ2lzdGVyCisgKiA0KSBSRkdhaW5TZWwgUkYgcmVnaXN0ZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTEgPSB7CisJNCwKKwk5LAorCXsKKwkJeyB7IDQsIDEsIDEsIDEgfSwgNiB9LAorCQl7IHsgNCwgMCwgMSwgMSB9LCA0IH0sCisJCXsgeyAzLCAxLCAxLCAxIH0sIDMgfSwKKwkJeyB7IDQsIDAsIDAsIDEgfSwgMSB9LAorCQl7IHsgNCwgMSwgMSwgMCB9LCAwIH0sCisJCXsgeyA0LCAwLCAxLCAwIH0sIC0yIH0sCisJCXsgeyAzLCAxLCAxLCAwIH0sIC0zIH0sCisJCXsgeyA0LCAwLCAwLCAwIH0sIC00IH0sCisJCXsgeyAyLCAxLCAxLCAwIH0sIC02IH0KKwl9Cit9OworCisvKgorICogUGFyYW1ldGVycyBvbiBnb3NfcGFyYW06CisgKiAxKSBNaXhnYWluIG92ciBSRiByZWdpc3RlcgorICogMikgUFdEIDEzOCBSRiByZWdpc3RlcgorICogMykgUFdEIDEzNyBSRiByZWdpc3RlcgorICogNCkgUFdEIDEzNiBSRiByZWdpc3RlcgorICogNSkgUFdEIDEzMiBSRiByZWdpc3RlcgorICogNikgUFdEIDEzMSBSRiByZWdpc3RlcgorICogNykgUFdEIDEzMCBSRiByZWdpc3RlcgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0IHJmZ2Fpbl9vcHRfNTExMiA9IHsKKwkxLAorCTgsCisJeworCQl7IHsgMywgMCwgMCwgMCwgMCwgMCwgMCB9LCA2IH0sCisJCXsgeyAyLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDAgfSwKKwkJeyB7IDEsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTMgfSwKKwkJeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTYgfSwKKwkJeyB7IDAsIDEsIDEsIDAsIDAsIDAsIDAgfSwgLTggfSwKKwkJeyB7IDAsIDEsIDEsIDAsIDEsIDEsIDAgfSwgLTEwIH0sCisJCXsgeyAwLCAxLCAwLCAxLCAxLCAxLCAwIH0sIC0xMyB9LAorCQl7IHsgMCwgMSwgMCwgMSwgMSwgMCwgMSB9LCAtMTYgfSwKKwl9Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL01ha2VmaWxlCmluZGV4IDEyMDlkMTQuLjFhNGQ0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL01ha2VmaWxlCkBAIC05LDggKzksMTEgQEAKIAkJbWFpbi5vIFwKIAkJcmVjdi5vIFwKIAkJeG1pdC5vIFwKKwkJdmlydHVhbC5vIFwKIAkJcmMubwogCithdGg5ay0kKENPTkZJR19QQ0kpICs9IHBjaS5vCithdGg5ay0kKENPTkZJR19BVEhFUk9TX0FSNzFYWCkgKz0gYWhiLm8KIGF0aDlrLSQoQ09ORklHX0FUSDlLX0RFQlVHKSArPSBkZWJ1Zy5vCiAKIG9iai0kKENPTkZJR19BVEg5SykgKz0gYXRoOWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9haGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGNjN2JiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiYXRoOWsuaCIKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX2FoYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJKmNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9haGJfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpb3VubWFwKHNjLT5tZW0pOworfQorCitzdGF0aWMgYm9vbCBhdGhfYWhiX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlwZGF0YSA9IChzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAob2ZmID49IChBUlJBWV9TSVpFKHBkYXRhLT5lZXByb21fZGF0YSkpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIiVzOiBmbGFzaCByZWFkIGZhaWxlZCwgb2Zmc2V0ICUwOHggaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fLCBvZmYpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBwZGF0YS0+ZWVwcm9tX2RhdGFbb2ZmXTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfYWhiX2J1c19vcHMgID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9haGJfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfYWhiX2NsZWFudXAsCisKKwkuZWVwcm9tX3JlYWQgPSBhdGhfYWhiX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQgPSAwOworCXN0cnVjdCBhdGhfaHcgKmFoOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwltZW0gPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlpcnEgPSByZXMtPnN0YXJ0OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJYXBoeSA9IGh3LT5wcml2OworCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgKGFwaHkgKyAxKTsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnByaV93aXBoeSA9IGFwaHk7CisJc2MtPmh3ID0gaHc7CisJc2MtPmRldiA9ICZwZGV2LT5kZXY7CisJc2MtPm1lbSA9IG1lbTsKKwlzYy0+YnVzX29wcyA9ICZhdGhfYWhiX2J1c19vcHM7CisJc2MtPmlycSA9IGlycTsKKworCXJldCA9IGF0aF9hdHRhY2goQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGRldmljZSwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9kZXRhY2g7CisJfQorCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4LCAiCisJICAgICAgICJBUiVzIFJGIFJldjoleCwgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKKwkgICAgICAgYXRoX21hY19iYl9uYW1lKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJICAgICAgIGF0aF9yZl9uYW1lKChhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ICYgQVJfUkFESU9fU1JFVl9NQUpPUikpLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5waHlSZXYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgaXJxKTsKKworCXJldHVybiAwOworCisgZXJyX2RldGFjaDoKKwlhdGhfZGV0YWNoKHNjKTsKKyBlcnJfZnJlZV9odzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisgZXJyX2lvdW5tYXA6CisJaW91bm1hcChtZW0pOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGhfYWhiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaHcpIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJCWF0aF9jbGVhbnVwKHNjKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aF9haGJfZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gYXRoX2FoYl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGF0aF9haGJfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdGg5ayIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgYXRoX2FoYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRoX2FoYl9kcml2ZXIpOworfQorCit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCmluZGV4IDI1MWUyZDkuLmEzOWViNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCkBAIC0xNCwyMyArMTQsMTkgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X2FuaV9jaGFubmVsX2lkeChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgaW50IGF0aDlrX2h3X2dldF9hbmlfY2hhbm5lbF9pZHgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaHAtPmFoX2FuaSk7IGkrKykgewotCQlpZiAoYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsID09IGNoYW4tPmNoYW5uZWwpCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWgtPmFuaSk7IGkrKykgeworCQlpZiAoYWgtPmFuaVtpXS5jICYmCisJCSAgICBhaC0+YW5pW2ldLmMtPmNoYW5uZWwgPT0gY2hhbi0+Y2hhbm5lbCkKIAkJCXJldHVybiBpOwotCQlpZiAoYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsID09IDApIHsKLQkJCWFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9IGNoYW4tPmNoYW5uZWw7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jLmNoYW5uZWxGbGFncyA9IGNoYW4tPmNoYW5uZWxGbGFnczsKKwkJaWYgKGFoLT5hbmlbaV0uYyA9PSBOVUxMKSB7CisJCQlhaC0+YW5pW2ldLmMgPSBjaGFuOwogCQkJcmV0dXJuIGk7CiAJCX0KIAl9CkBAIC00MSw0MSArMzcsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfYW5pX2NvbnRyb2woc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfYW5pX2NvbnRyb2woc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJIGVudW0gYXRoOWtfYW5pX2NtZCBjbWQsIGludCBwYXJhbSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaHAtPmFoX2N1cmFuaTsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAotCXN3aXRjaCAoY21kICYgYWhwLT5haF9hbmlfZnVuY3Rpb24pIHsKKwlzd2l0Y2ggKGNtZCAmIGFoLT5hbmlfZnVuY3Rpb24pIHsKIAljYXNlIEFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDp7CiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCi0JCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGFocC0+YWhfdG90YWxTaXplRGVzaXJlZCkpIHsKKwkJaWYgKGxldmVsID49IEFSUkFZX1NJWkUoYWgtPnRvdGFsU2l6ZURlc2lyZWQpKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCiAJCQkJImxldmVsIG91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCiAJCQkJbGV2ZWwsCi0JCQkJKHVuc2lnbmVkKUFSUkFZX1NJWkUoYWhwLT5haF90b3RhbFNpemVEZXNpcmVkKSk7CisJCQkJKHVuc2lnbmVkKUFSUkFZX1NJWkUoYWgtPnRvdGFsU2l6ZURlc2lyZWQpKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAogCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfVE9UX0RFUywKLQkJCSAgICAgIGFocC0+YWhfdG90YWxTaXplRGVzaXJlZFtsZXZlbF0pOworCQkJICAgICAgYWgtPnRvdGFsU2l6ZURlc2lyZWRbbGV2ZWxdKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0FHQ19DVEwxLAogCQkJICAgICAgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1csCi0JCQkgICAgICBhaHAtPmFoX2NvYXJzZUxvd1tsZXZlbF0pOworCQkJICAgICAgYWgtPmNvYXJzZV9sb3dbbGV2ZWxdKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0FHQ19DVEwxLAogCQkJICAgICAgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9ISUdILAotCQkJICAgICAgYWhwLT5haF9jb2Fyc2VIaWdoW2xldmVsXSk7CisJCQkgICAgICBhaC0+Y29hcnNlX2hpZ2hbbGV2ZWxdKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZJTkRfU0lHLAogCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlBXUiwKLQkJCSAgICAgIGFocC0+YWhfZmlycHdyW2xldmVsXSk7CisJCQkgICAgICBhaC0+ZmlycHdyW2xldmVsXSk7CiAKIAkJaWYgKGxldmVsID4gYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9uaXVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9uaXVwKys7CiAJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9uaWRvd24rKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX25pZG93bisrOwogCQlhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsID0gbGV2ZWw7CiAJCWJyZWFrOwogCX0KQEAgLTEyOSw5ICsxMjQsOSBAQAogCiAJCWlmICghb24gIT0gYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKSB7CiAJCQlpZiAob24pCi0JCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX29mZG1vbisrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1vbisrOwogCQkJZWxzZQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtb2ZmKys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbW9mZisrOwogCQkJYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0gIW9uOwogCQl9CiAJCWJyZWFrOwpAQCAtMTQ1LDkgKzE0MCw5IEBACiAJCQkgICAgICB3ZWFrU2lnVGhyQ2NrW2hpZ2hdKTsKIAkJaWYgKGhpZ2ggIT0gYW5pU3RhdGUtPmNja1dlYWtTaWdUaHJlc2hvbGQpIHsKIAkJCWlmIChoaWdoKQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2toaWdoKys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfY2NraGlnaCsrOwogCQkJZWxzZQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tsb3crKzsKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2tsb3crKzsKIAkJCWFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkID0gaGlnaDsKIAkJfQogCQlicmVhazsKQEAgLTE2Nyw5ICsxNjIsOSBAQAogCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlNURVAsCiAJCQkgICAgICBmaXJzdGVwW2xldmVsXSk7CiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3RlcHVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwdXArKzsKIAkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQotCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3N0ZXBkb3duKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOwogCQlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID0gbGV2ZWw7CiAJCWJyZWFrOwogCX0KQEAgLTE5MCw5ICsxODUsOSBAQAogCQkJICAgICAgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjEsCiAJCQkgICAgICBjeWNwd3JUaHIxW2xldmVsXSk7CiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zcHVydXArKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJ1cCsrOwogCQllbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zcHVyZG93bisrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKIAkJYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsID0gbGV2ZWw7CiAJCWJyZWFrOwogCX0KQEAgLTIyMyw3ICsyMTgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od191cGRhdGVfbWlic3RhdHMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX21pYl9zdGF0cyAqc3RhdHMpCiB7CiAJc3RhdHMtPmFja3Jjdl9iYWQgKz0gUkVHX1JFQUQoYWgsIEFSX0FDS19GQUlMKTsKQEAgLTIzMywxOCArMjI4LDE3IEBACiAJc3RhdHMtPmJlYWNvbnMgKz0gUkVHX1JFQUQoYWgsIEFSX0JFQUNPTl9DTlQpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19hbmlfcmVzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19hbmlfcmVzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCiAJYW5pU3RhdGUtPmxpc3RlblRpbWUgPSAwOwotCWlmIChhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMpIHsKKwlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1UcmlnSGlnaCA+IEFSX1BIWV9DT1VOVE1BWCkgewogCQkJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gMDsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKQEAgLTI3MCwyNCArMjY0LDIyIEBACiAJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzEsIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOwogCX0KIAlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gMDsKIAlhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKLQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZTsKIAlpbnQzMl90IHJzc2k7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCiAJaWYgKGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwgPCBIQUxfTk9JU0VfSU1NVU5FX01BWCkgewogCQlpZiAoYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTCwKQEAgLTMwMywxNCArMjk1LDE0IEBACiAJCX0KIAl9CiAKLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIDwgSEFMX0ZJUlNUX1NURVBfTUFYKSB7CiAJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCiAJCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCArIDEpOwogCQl9CiAJCXJldHVybjsKIAl9Ci0JcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJcnNzaSA9IEJFQUNPTl9SU1NJKGFoKTsKIAlpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhySGlnaCkgewogCQlpZiAoIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikgewogCQkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLApAQCAtMzM2LDggKzMyOCw3IEBACiAJCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCArIDEpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKLQkJbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQlpZiAobW9kZSA9PSBBVEg5S19NT0RFXzExRyB8fCBtb2RlID09IEFUSDlLX01PREVfMTFCKSB7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJCWlmICghYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKQogCQkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLAogCQkJCSAgICAgQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OLApAQCAtMzUwLDM5ICszNDEsMzYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2Nja19lcnJfdHJpZ2dlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKLQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZTsKIAlpbnQzMl90IHJzc2k7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCWlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgSEFMX05PSVNFX0lNTVVORV9NQVgpIHsKIAkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsCiAJCQkJCSBhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsICsgMSkpIHsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIDwgSEFMX0ZJUlNUX1NURVBfTUFYKSB7CiAJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCiAJCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCArIDEpOwogCQl9CiAJCXJldHVybjsKIAl9Ci0JcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJcnNzaSA9IEJFQUNPTl9SU1NJKGFoKTsKIAlpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhyTG93KSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIDwgSEFMX0ZJUlNUX1NURVBfTUFYKQogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAl9IGVsc2UgewotCQltb2RlID0gYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwgY2hhbik7Ci0JCWlmIChtb2RlID09IEFUSDlLX01PREVfMTFHIHx8IG1vZGUgPT0gQVRIOUtfTU9ERV8xMUIpIHsKKwkJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewogCQkJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgPiAwKQogCQkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLAogCQkJCQkgICAgIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLCAwKTsKQEAgLTM5MCwyMiArMzc4LDIxIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfbG93ZXJfaW1tdW5pdHkoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKIAlpbnQzMl90IHJzc2k7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAotCWlmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgPiAwKSB7CiAJCQlpZiAoYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkJIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgLSAxKSkKIAkJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewotCQlyc3NpID0gQkVBQ09OX1JTU0koYWhwKTsKKwkJcnNzaSA9IEJFQUNPTl9SU1NJKGFoKTsKIAkJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpIHsKIAkJCS8qIFhYWDogSGFuZGxlIG1lICovCiAJCX0gZWxzZSBpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhyTG93KSB7CkBAIC00NDQsOSArNDMxLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQzMl90IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludDMyX3QgYXRoOWtfaHdfYW5pX2dldF9saXN0ZW5fdGltZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJdTMyIHR4RnJhbWVDb3VudCwgcnhGcmFtZUNvdW50LCBjeWNsZUNvdW50OwogCWludDMyX3QgbGlzdGVuVGltZTsKQEAgLTQ1NSwxMSArNDQxLDExIEBACiAJcnhGcmFtZUNvdW50ID0gUkVHX1JFQUQoYWgsIEFSX1JGQ05UKTsKIAljeWNsZUNvdW50ID0gUkVHX1JFQUQoYWgsIEFSX0NDQ05UKTsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCWlmIChhbmlTdGF0ZS0+Y3ljbGVDb3VudCA9PSAwIHx8IGFuaVN0YXRlLT5jeWNsZUNvdW50ID4gY3ljbGVDb3VudCkgewogCiAJCWxpc3RlblRpbWUgPSAwOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbHplcm8rKzsKKwkJYWgtPnN0YXRzLmFzdF9hbmlfbHplcm8rKzsKIAl9IGVsc2UgewogCQlpbnQzMl90IGNjZGVsdGEgPSBjeWNsZUNvdW50IC0gYW5pU3RhdGUtPmN5Y2xlQ291bnQ7CiAJCWludDMyX3QgcmZkZWx0YSA9IHJ4RnJhbWVDb3VudCAtIGFuaVN0YXRlLT5yeEZyYW1lQ291bnQ7CkBAIC00NzMsMjUgKzQ1OSwyNCBAQAogCXJldHVybiBsaXN0ZW5UaW1lOwogfQogCi12b2lkIGF0aDlrX2FuaV9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2FuaV9yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOwogCWludCBpbmRleDsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwogCiAJaW5kZXggPSBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KGFoLCBjaGFuKTsKLQlhbmlTdGF0ZSA9ICZhaHAtPmFoX2FuaVtpbmRleF07Ci0JYWhwLT5haF9jdXJhbmkgPSBhbmlTdGF0ZTsKKwlhbmlTdGF0ZSA9ICZhaC0+YW5pW2luZGV4XTsKKwlhaC0+Y3VyYW5pID0gYW5pU3RhdGU7CiAKLQlpZiAoRE9fQU5JKGFoKSAmJiBhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04KLQkgICAgJiYgYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChET19BTkkoYWgpICYmIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTgorCSAgICAmJiBhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCSJSZXNldCBBTkkgc3RhdGUgb3Btb2RlICV1XG4iLCBhaC0+YWhfb3Btb2RlKTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3Jlc2V0Kys7CisJCQkiUmVzZXQgQU5JIHN0YXRlIG9wbW9kZSAldVxuIiwgYWgtPm9wbW9kZSk7CisJCWFoLT5zdGF0cy5hc3RfYW5pX3Jlc2V0Kys7CiAKIAkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTCwgMCk7CiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCwgMCk7CkBAIC01MDQsMTUgKzQ4OSwxNSBAQAogCQlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpIHwKIAkJCQkgICAgIEFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwogCi0JCWlmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+b2ZkbVRyaWdIaWdoID0KLQkJCQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19oaWdoOwotCQkJYWhwLT5haF9jdXJhbmktPm9mZG1UcmlnTG93ID0KLQkJCQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19sb3c7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+Y2NrVHJpZ0hpZ2ggPQotCQkJCWFoLT5haF9jb25maWcuY2NrX3RyaWdfaGlnaDsKLQkJCWFocC0+YWhfY3VyYW5pLT5jY2tUcmlnTG93ID0KLQkJCQlhaC0+YWhfY29uZmlnLmNja190cmlnX2xvdzsKKwkJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCWFoLT5jdXJhbmktPm9mZG1UcmlnSGlnaCA9CisJCQkJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaDsKKwkJCWFoLT5jdXJhbmktPm9mZG1UcmlnTG93ID0KKwkJCQlhaC0+Y29uZmlnLm9mZG1fdHJpZ19sb3c7CisJCQlhaC0+Y3VyYW5pLT5jY2tUcmlnSGlnaCA9CisJCQkJYWgtPmNvbmZpZy5jY2tfdHJpZ19oaWdoOworCQkJYWgtPmN1cmFuaS0+Y2NrVHJpZ0xvdyA9CisJCQkJYWgtPmNvbmZpZy5jY2tfdHJpZ19sb3c7CiAJCX0KIAkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOwogCQlyZXR1cm47CkBAIC01MzMsNyArNTE4LDcgQEAKIAlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCAhPSAwKQogCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwsCiAJCQkJICAgICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKTsKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKGFoKSAmCiAJCQkJICAgICB+QVRIOUtfUlhfRklMVEVSX1BIWUVSUik7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKQEAgLTU0NywzMSArNTMyLDMzIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKIAkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCWludDMyX3QgbGlzdGVuVGltZTsKIAotCWFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7Ci0JYWhwLT5haF9zdGF0cy5hc3Rfbm9kZXN0YXRzID0gKnN0YXRzOworCWlmICghRE9fQU5JKGFoKSkKKwkJcmV0dXJuOworCisJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOworCWFoLT5zdGF0cy5hc3Rfbm9kZXN0YXRzID0gKnN0YXRzOwogCiAJbGlzdGVuVGltZSA9IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoYWgpOwogCWlmIChsaXN0ZW5UaW1lIDwgMCkgewotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbG5lZysrOworCQlhaC0+c3RhdHMuYXN0X2FuaV9sbmVnKys7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKIAkJcmV0dXJuOwogCX0KIAogCWFuaVN0YXRlLT5saXN0ZW5UaW1lICs9IGxpc3RlblRpbWU7CiAKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJdTMyIHBoeUNudDEsIHBoeUNudDI7CiAJCXUzMiBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CiAKLQkJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWhwLT5haF9taWJTdGF0cyk7CisJCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CiAKIAkJcGh5Q250MSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzEpOwogCQlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CkBAIC02MDQsMjcgKzU5MSwyNCBAQAogCQl9CiAKIAkJb2ZkbVBoeUVyckNudCA9IHBoeUNudDEgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtZXJycyArPQorCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtZXJycyArPQogCQkJb2ZkbVBoeUVyckNudCAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQ7CiAJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSBvZmRtUGh5RXJyQ250OwogCiAJCWNja1BoeUVyckNudCA9IHBoeUNudDIgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfY2NrZXJycyArPQogCQkJY2NrUGh5RXJyQ250IC0gYW5pU3RhdGUtPmNja1BoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPSBjY2tQaHlFcnJDbnQ7CiAJfQogCi0JaWYgKCFET19BTkkoYWgpKQotCQlyZXR1cm47Ci0KLQlpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiA1ICogYWhwLT5haF9hbmlQZXJpb2QpIHsKKwlpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiA1ICogYWgtPmFuaXBlcmlvZCkgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA8PSBhbmlTdGF0ZS0+bGlzdGVuVGltZSAqCiAJCSAgICBhbmlTdGF0ZS0+b2ZkbVRyaWdMb3cgLyAxMDAwICYmCiAJCSAgICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPD0gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPmNja1RyaWdMb3cgLyAxMDAwKQogCQkJYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KGFoKTsKIAkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOwotCX0gZWxzZSBpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiBhaHAtPmFoX2FuaVBlcmlvZCkgeworCX0gZWxzZSBpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiBhaC0+YW5pcGVyaW9kKSB7CiAJCWlmIChhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID4gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPm9mZG1UcmlnSGlnaCAvIDEwMDApIHsKIAkJCWF0aDlrX2h3X2FuaV9vZmRtX2Vycl90cmlnZ2VyKGFoKTsKQEAgLTYzOCwyMCArNjIyLDE2IEBACiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyB0cnVlIDogZmFsc2U7CisJcmV0dXJuIGFoLT5oYXNfaHdfcGh5Y291bnRlcnMgPyB0cnVlIDogZmFsc2U7CiB9CiAKLXZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkVuYWJsZSBNSUIgY291bnRlcnNcbiIpOwogCi0JYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWhwLT5haF9taWJTdGF0cyk7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAogCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKQEAgLTY2MiwyMSArNjQyLDE4IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKIH0KIAotdm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCisvKiBGcmVlemUgdGhlIE1JQiBjb3VudGVycywgZ2V0IHRoZSBzdGF0cyBhbmQgdGhlbiBjbGVhciB0aGVtICovCit2b2lkIGF0aDlrX2h3X2Rpc2FibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJEaXNhYmxlIE1JQiBjb3VudGVyc1xuIik7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfRk1DIHwgQVJfTUlCQ19DTUMpOwotCi0JYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWhwLT5haF9taWJTdGF0cyk7Ci0KKwlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfRk1DKTsKKwlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCVJFR19XUklURShhaCwgQVJfTUlCQywgQVJfTUlCQ19DTUMpOwogCVJFR19XUklURShhaCwgQVJfRklMVF9PRkRNLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfQ0NLLCAwKTsKIH0KIAotdTMyIGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KHN0cnVjdCBhdGhfaGFsICphaCwKK3UzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHUzMiAqcnhjX3BjbnQsCiAJCQkJICB1MzIgKnJ4Zl9wY250LAogCQkJCSAgdTMyICp0eGZfcGNudCkKQEAgLTcyMSwxMCArNjk4LDkgQEAKICAqIGFueSBvZiB0aGUgTUlCIGNvdW50ZXJzIG92ZXJmbG93L3RyaWdnZXIgc28gZG9uJ3QgYXNzdW1lIHdlJ3JlCiAgKiBoZXJlIGJlY2F1c2UgYSBQSFkgZXJyb3IgY291bnRlciB0cmlnZ2VyZWQuCiAgKi8KLXZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIHBoeUNudDEsIHBoeUNudDI7CiAKIAkvKiBSZXNldCB0aGVzZSBjb3VudGVycyByZWdhcmRsZXNzICovCkBAIC03MzQsOCArNzEwLDggQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9TTFBfTUlCX0NUUkwsIEFSX1NMUF9NSUJfQ0xFQVIpOwogCiAJLyogQ2xlYXIgdGhlIG1pYiBjb3VudGVycyBhbmQgc2F2ZSB0aGVtIGluIHRoZSBzdGF0cyAqLwotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOwotCWFocC0+YWhfc3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKKwlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCWFoLT5zdGF0cy5hc3Rfbm9kZXN0YXRzID0gKnN0YXRzOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CkBAIC03NDUsMTcgKzcyMSwxNyBAQAogCXBoeUNudDIgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8yKTsKIAlpZiAoKChwaHlDbnQxICYgQVJfTUlCQ05UX0lOVFJNQVNLKSA9PSBBUl9NSUJDTlRfSU5UUk1BU0spIHx8CiAJICAgICgocGh5Q250MiAmIEFSX01JQkNOVF9JTlRSTUFTSykgPT0gQVJfTUlCQ05UX0lOVFJNQVNLKSkgewotCQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwogCQl1MzIgb2ZkbVBoeUVyckNudCwgY2NrUGh5RXJyQ250OwogCiAJCS8qIE5COiBvbmx5IHVzZSBhc3RfYW5pXyplcnJzIHdpdGggQUhfUFJJVkFURV9ESUFHICovCiAJCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KIAkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKIAogCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KIAkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OwogCkBAIC03NzQsOSArNzUwLDggQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAljb25zdCBpbnQgdG90YWxTaXplRGVzaXJlZFtdID0geyAtNTUsIC01NSwgLTU1LCAtNTUsIC02MiB9OwpAQCAtNzg1LDY2ICs3NjAsNjMgQEAKIAljb25zdCBpbnQgZmlycHdyW10gPSB7IC03OCwgLTc4LCAtNzgsIC03OCwgLTgwIH07CiAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxTaXplRGVzaXJlZFtpXSA9IHRvdGFsU2l6ZURlc2lyZWRbaV07Ci0JCWFocC0+YWhfY29hcnNlSGlnaFtpXSA9IGNvYXJzZUhpZ2hbaV07Ci0JCWFocC0+YWhfY29hcnNlTG93W2ldID0gY29hcnNlTG93W2ldOwotCQlhaHAtPmFoX2ZpcnB3cltpXSA9IGZpcnB3cltpXTsKKwkJYWgtPnRvdGFsU2l6ZURlc2lyZWRbaV0gPSB0b3RhbFNpemVEZXNpcmVkW2ldOworCQlhaC0+Y29hcnNlX2hpZ2hbaV0gPSBjb2Fyc2VIaWdoW2ldOworCQlhaC0+Y29hcnNlX2xvd1tpXSA9IGNvYXJzZUxvd1tpXTsKKwkJYWgtPmZpcnB3cltpXSA9IGZpcnB3cltpXTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkF0dGFjaCBBTklcbiIpOwogCi0JYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzID0gMTsKKwlhaC0+aGFzX2h3X3BoeWNvdW50ZXJzID0gMTsKIAotCW1lbXNldChhaHAtPmFoX2FuaSwgMCwgc2l6ZW9mKGFocC0+YWhfYW5pKSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWhwLT5haF9hbmkpOyBpKyspIHsKLQkJYWhwLT5haF9hbmlbaV0ub2ZkbVRyaWdIaWdoID0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOwotCQlhaHAtPmFoX2FuaVtpXS5vZmRtVHJpZ0xvdyA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tUcmlnSGlnaCA9IEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tUcmlnTG93ID0gQVRIOUtfQU5JX0NDS19UUklHX0xPVzsKLQkJYWhwLT5haF9hbmlbaV0ucnNzaVRockhpZ2ggPSBBVEg5S19BTklfUlNTSV9USFJfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0ucnNzaVRockxvdyA9IEFUSDlLX0FOSV9SU1NJX1RIUl9MT1c7Ci0JCWFocC0+YWhfYW5pW2ldLm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0KKwltZW1zZXQoYWgtPmFuaSwgMCwgc2l6ZW9mKGFoLT5hbmkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhaC0+YW5pKTsgaSsrKSB7CisJCWFoLT5hbmlbaV0ub2ZkbVRyaWdIaWdoID0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOworCQlhaC0+YW5pW2ldLm9mZG1UcmlnTG93ID0gQVRIOUtfQU5JX09GRE1fVFJJR19MT1c7CisJCWFoLT5hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5jY2tUcmlnTG93ID0gQVRIOUtfQU5JX0NDS19UUklHX0xPVzsKKwkJYWgtPmFuaVtpXS5yc3NpVGhySGlnaCA9IEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIOworCQlhaC0+YW5pW2ldLnJzc2lUaHJMb3cgPSBBVEg5S19BTklfUlNTSV9USFJfTE9XOworCQlhaC0+YW5pW2ldLm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID0KIAkJCSFBVEg5S19BTklfVVNFX09GRE1fV0VBS19TSUc7Ci0JCWFocC0+YWhfYW5pW2ldLmNja1dlYWtTaWdUaHJlc2hvbGQgPQorCQlhaC0+YW5pW2ldLmNja1dlYWtTaWdUaHJlc2hvbGQgPQogCQkJQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFI7Ci0JCWFocC0+YWhfYW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTDsKLQkJYWhwLT5haF9hbmlbaV0uZmlyc3RlcExldmVsID0gQVRIOUtfQU5JX0ZJUlNURVBfTFZMOwotCQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7Ci0JCQlhaHAtPmFoX2FuaVtpXS5vZmRtUGh5RXJyQmFzZSA9CisJCWFoLT5hbmlbaV0uc3B1ckltbXVuaXR5TGV2ZWwgPSBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMOworCQlhaC0+YW5pW2ldLmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTDsKKwkJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKKwkJCWFoLT5hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQogCQkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKLQkJCWFocC0+YWhfYW5pW2ldLmNja1BoeUVyckJhc2UgPQorCQkJYWgtPmFuaVtpXS5jY2tQaHlFcnJCYXNlID0KIAkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKIAkJfQogCX0KLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJIlNldHRpbmcgT2ZkbUVyckJhc2UgPSAweCUwOHhcbiIsCi0JCQlhaHAtPmFoX2FuaVswXS5vZmRtUGh5RXJyQmFzZSk7CisJCQlhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLCAiU2V0dGluZyBjY2tFcnJCYXNlID0gMHglMDh4XG4iLAotCQkJYWhwLT5haF9hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJCQlhaC0+YW5pWzBdLmNja1BoeUVyckJhc2UpOwogCi0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaHAtPmFoX2FuaVswXS5vZmRtUGh5RXJyQmFzZSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBhaHAtPmFoX2FuaVswXS5jY2tQaHlFcnJCYXNlKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIGFoLT5hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgYWgtPmFuaVswXS5jY2tQaHlFcnJCYXNlKTsKIAkJYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhhaCk7CiAJfQotCWFocC0+YWhfYW5pUGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKLQlpZiAoYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pKQotCQlhaHAtPmFoX3Byb2NQaHlFcnIgfD0gSEFMX1BST0NFU1NfQU5JOworCWFoLT5hbmlwZXJpb2QgPSBBVEg5S19BTklfUEVSSU9EOworCWlmIChhaC0+Y29uZmlnLmVuYWJsZV9hbmkpCisJCWFoLT5wcm9jX3BoeWVyciB8PSBIQUxfUFJPQ0VTU19BTkk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkRldGFjaCBBTklcbiIpOwogCi0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCWF0aDlrX2h3X2Rpc2FibGVfbWliX2NvdW50ZXJzKGFoKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTU3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFOSV9ICisjZGVmaW5lIEFOSV9ICisKKyNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCisKKyNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKKworI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCisJSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKKwkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAorI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKKyNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKKyNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCisjZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3CisjZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCisjZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAorI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNworI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICAgIDQKKyNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgICAgICAgICAgIDIKKworZW51bSBhdGg5a19hbmlfY21kIHsKKwlBVEg5S19BTklfUFJFU0VOVCA9IDB4MSwKKwlBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwgPSAweDIsCisJQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OID0gMHg0LAorCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSID0gMHg4LAorCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMID0gMHgxMCwKKwlBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCA9IDB4MjAsCisJQVRIOUtfQU5JX01PREUgPSAweDQwLAorCUFUSDlLX0FOSV9QSFlFUlJfUkVTRVQgPSAweDgwLAorCUFUSDlLX0FOSV9BTEwgPSAweGZmCit9OworCitzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIHsKKwl1MzIgYWNrcmN2X2JhZDsKKwl1MzIgcnRzX2JhZDsKKwl1MzIgcnRzX2dvb2Q7CisJdTMyIGZjc19iYWQ7CisJdTMyIGJlYWNvbnM7Cit9OworCitzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyB7CisJdTMyIG5zX2F2Z2Jyc3NpOworCXUzMiBuc19hdmdyc3NpOworCXUzMiBuc19hdmd0eHJzc2k7CisJdTMyIG5zX2F2Z3R4cmF0ZTsKK307CisKK3N0cnVjdCBhcjU0MTZBbmlTdGF0ZSB7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7CisJdTggbm9pc2VJbW11bml0eUxldmVsOworCXU4IHNwdXJJbW11bml0eUxldmVsOworCXU4IGZpcnN0ZXBMZXZlbDsKKwl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKKwl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOworCXUzMiBsaXN0ZW5UaW1lOworCXUzMiBvZmRtVHJpZ0hpZ2g7CisJdTMyIG9mZG1UcmlnTG93OworCWludDMyX3QgY2NrVHJpZ0hpZ2g7CisJaW50MzJfdCBjY2tUcmlnTG93OworCWludDMyX3QgcnNzaVRockxvdzsKKwlpbnQzMl90IHJzc2lUaHJIaWdoOworCXUzMiBub2lzZUZsb29yOworCXUzMiB0eEZyYW1lQ291bnQ7CisJdTMyIHJ4RnJhbWVDb3VudDsKKwl1MzIgY3ljbGVDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckNvdW50OworCXUzMiBjY2tQaHlFcnJDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckJhc2U7CisJdTMyIGNja1BoeUVyckJhc2U7CisJaW50MTZfdCBwa3RSc3NpWzJdOworCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07CisJaW50MTZfdCBjY2tFcnJSc3NpWzJdOworfTsKKworc3RydWN0IGFyNTQxNlN0YXRzIHsKKwl1MzIgYXN0X2FuaV9uaXVwOworCXUzMiBhc3RfYW5pX25pZG93bjsKKwl1MzIgYXN0X2FuaV9zcHVydXA7CisJdTMyIGFzdF9hbmlfc3B1cmRvd247CisJdTMyIGFzdF9hbmlfb2ZkbW9uOworCXUzMiBhc3RfYW5pX29mZG1vZmY7CisJdTMyIGFzdF9hbmlfY2NraGlnaDsKKwl1MzIgYXN0X2FuaV9jY2tsb3c7CisJdTMyIGFzdF9hbmlfc3RlcHVwOworCXUzMiBhc3RfYW5pX3N0ZXBkb3duOworCXUzMiBhc3RfYW5pX29mZG1lcnJzOworCXUzMiBhc3RfYW5pX2Nja2VycnM7CisJdTMyIGFzdF9hbmlfcmVzZXQ7CisJdTMyIGFzdF9hbmlfbHplcm87CisJdTMyIGFzdF9hbmlfbG5lZzsKKwlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOworfTsKKyNkZWZpbmUgYWhfbWliU3RhdHMgc3RhdHMuYXN0X21pYnN0YXRzCisKK3ZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKKwkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqcnhjX3BjbnQsCisJCQkJICB1MzIgKnJ4Zl9wY250LCB1MzIgKnR4Zl9wY250KTsKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCmluZGV4IDY2NTBmNjAuLmI2NGJlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYXRoOWsuaApAQCAtMTcsMTA0MSArMTcsNzQ0IEBACiAjaWZuZGVmIEFUSDlLX0gKICNkZWZpbmUgQVRIOUtfSAogCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KIAotI2RlZmluZSBBVEhFUk9TX1ZFTkRPUl9JRAkweDE2OGMKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInJjLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKIAotI2RlZmluZSBBUjU0MTZfREVWSURfUENJCTB4MDAyMwotI2RlZmluZSBBUjU0MTZfREVWSURfUENJRQkweDAwMjQKLSNkZWZpbmUgQVI5MTYwX0RFVklEX1BDSQkweDAwMjcKLSNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSQkweDAwMjkKLSNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSUUJMHgwMDJhCi0jZGVmaW5lIEFSOTI4NV9ERVZJRF9QQ0lFCTB4MDAyYgorc3RydWN0IGF0aF9ub2RlOwogCi0jZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCisvKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwogCi0jZGVmaW5lCUFSX1NVQlZFTkRPUl9JRF9OT0cJMHgwZTExCi0jZGVmaW5lIEFSX1NVQlZFTkRPUl9JRF9ORVdfQQkweDcwNjUKKyNkZWZpbmUJaXRvNjQoeCkgKHNpemVvZih4KSA9PSA4KSA/CQkJXAorCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmICgweGZmKSkgOglcCisJKHNpemVvZih4KSA9PSAxNikgPwkJCQlcCisJKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgMHhmZmZmKSA6CVwKKwkoKHNpemVvZih4KSA9PSAzMikgPwkJCQlcCisJICgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZmZmZmYpIDogXAorCSAodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpCiAKLSNkZWZpbmUgQVRIOUtfVFhFUlJfWFJFVFJZICAgICAgICAgMHgwMQotI2RlZmluZSBBVEg5S19UWEVSUl9GSUxUICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFUSDlLX1RYRVJSX0ZJRk8gICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfVFhFUlJfWFRYT1AgICAgICAgICAgMHgwOAotI2RlZmluZSBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEICAweDEwCisvKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLworI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKKwkJKF9sKSsrOwkJCQlcCisJCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCisJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfVFhfREVTQ19DRkdfRVJSICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19UWF9EQVRBX1VOREVSUlVOICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1RYX0RFTElNX1VOREVSUlVOICAgIDB4MTAKLSNkZWZpbmUgQVRIOUtfVFhfU1dfQUJPUlRFRCAgICAgICAgMHg0MAotI2RlZmluZSBBVEg5S19UWF9TV19GSUxURVJFRCAgICAgICAweDgwCisvKiBkZWNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLworI2RlZmluZSBERUNSKF9sLCAgX3N6KSAgZG8gewkJCVwKKwkJKF9sKS0tOwkJCQlcCisJCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCisJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBOQkJZICAgIDgKKyNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKIAotc3RydWN0IGF0aF90eF9zdGF0dXMgewotCXUzMiB0c190c3RhbXA7Ci0JdTE2IHRzX3NlcW51bTsKLQl1OCB0c19zdGF0dXM7Ci0JdTggdHNfcmF0ZWNvZGU7Ci0JdTggdHNfcmF0ZWluZGV4OwotCWludDhfdCB0c19yc3NpOwotCXU4IHRzX3Nob3J0cmV0cnk7Ci0JdTggdHNfbG9uZ3JldHJ5OwotCXU4IHRzX3ZpcnRjb2w7Ci0JdTggdHNfYW50ZW5uYTsKLQl1OCB0c19mbGFnczsKLQlpbnQ4X3QgdHNfcnNzaV9jdGwwOwotCWludDhfdCB0c19yc3NpX2N0bDE7Ci0JaW50OF90IHRzX3Jzc2lfY3RsMjsKLQlpbnQ4X3QgdHNfcnNzaV9leHQwOwotCWludDhfdCB0c19yc3NpX2V4dDE7Ci0JaW50OF90IHRzX3Jzc2lfZXh0MjsKLQl1OCBwYWRbM107Ci0JdTMyIGJhX2xvdzsKLQl1MzIgYmFfaGlnaDsKLQl1MzIgZXZtMDsKLQl1MzIgZXZtMTsKLQl1MzIgZXZtMjsKKyNkZWZpbmUgQVNTRVJUKGV4cCkgZG8gewkJCVwKKwkJaWYgKHVubGlrZWx5KCEoZXhwKSkpIHsJCVwKKwkJCUJVRygpOwkJCVwKKwkJfQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBUU0ZfVE9fVFUoX2gsX2wpIFwKKwkoKCgodTMyKShfaCkpIDw8IDIyKSB8ICgoKHUzMikoX2wpKSA+PiAxMCkpCisKKyNkZWZpbmUJQVRIX1RYUV9TRVRVUChzYywgaSkgICAgICAgICgoc2MpLT50eC50eHFzZXR1cCAmICgxPDxpKSkKKworc3RhdGljIGNvbnN0IHU4IGF0aF9iY2FzdF9tYWNbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCitzdHJ1Y3QgYXRoX2NvbmZpZyB7CisJdTMyIGF0aF9hZ2dyX3Byb3Q7CisJdTE2IHR4cG93bGltaXQ7CisJdTggY2FicVJlYWR5dGltZTsKKwl1OCBzd0JlYWNvblByb2Nlc3M7CiB9OwogCi1zdHJ1Y3QgYXRoX3J4X3N0YXR1cyB7Ci0JdTMyIHJzX3RzdGFtcDsKLQl1MTYgcnNfZGF0YWxlbjsKLQl1OCByc19zdGF0dXM7Ci0JdTggcnNfcGh5ZXJyOwotCWludDhfdCByc19yc3NpOwotCXU4IHJzX2tleWl4OwotCXU4IHJzX3JhdGU7Ci0JdTggcnNfYW50ZW5uYTsKLQl1OCByc19tb3JlOwotCWludDhfdCByc19yc3NpX2N0bDA7Ci0JaW50OF90IHJzX3Jzc2lfY3RsMTsKLQlpbnQ4X3QgcnNfcnNzaV9jdGwyOwotCWludDhfdCByc19yc3NpX2V4dDA7Ci0JaW50OF90IHJzX3Jzc2lfZXh0MTsKLQlpbnQ4X3QgcnNfcnNzaV9leHQyOwotCXU4IHJzX2lzYWdncjsKLQl1OCByc19tb3JlYWdncjsKLQl1OCByc19udW1fZGVsaW1zOwotCXU4IHJzX2ZsYWdzOwotCXUzMiBldm0wOwotCXUzMiBldm0xOwotCXUzMiBldm0yOworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXNjcmlwdG9yIE1hbmFnZW1lbnQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9UWEJVRl9SRVNFVChfYmYpIGRvIHsJCQkJXAorCQkoX2JmKS0+YmZfc3RhdHVzID0gMDsJCQkJXAorCQkoX2JmKS0+YmZfbGFzdGJmID0gTlVMTDsJCQlcCisJCShfYmYpLT5iZl9uZXh0ID0gTlVMTDsJCQkJXAorCQltZW1zZXQoJigoX2JmKS0+YmZfc3RhdGUpLCAwLAkJCVwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwkJXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogZW51bSBidWZmZXJfdHlwZSAtIEJ1ZmZlciB0eXBlIGZsYWdzCisgKgorICogQEJVRl9IVDogU2VuZCB0aGlzIGJ1ZmZlciB1c2luZyBIVCBjYXBhYmlsaXRpZXMKKyAqIEBCVUZfQU1QRFU6IFRoaXMgYnVmZmVyIGlzIGFuIGFtcGR1LCBhcyBwYXJ0IG9mIGFuIGFnZ3JlZ2F0ZSAoZHVyaW5nIFRYKQorICogQEJVRl9BR0dSOiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVmZmVyIGNhbiBiZSBhZ2dyZWdhdGVkCisgKgkodXNlZCBpbiBhZ2dyZWdhdGlvbiBzY2hlZHVsaW5nKQorICogQEJVRl9SRVRSWTogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyByZXRyaWVkCisgKiBAQlVGX1hSRVRSWTogVG8gZGVub3RlIGV4Y2Vzc2l2ZSByZXRyaWVzIG9mIHRoZSBidWZmZXIKKyAqLworZW51bSBidWZmZXJfdHlwZSB7CisJQlVGX0hUCQkJPSBCSVQoMSksCisJQlVGX0FNUERVCQk9IEJJVCgyKSwKKwlCVUZfQUdHUgkJPSBCSVQoMyksCisJQlVGX1JFVFJZCQk9IEJJVCg0KSwKKwlCVUZfWFJFVFJZCQk9IEJJVCg1KSwKIH07CiAKLSNkZWZpbmUgQVRIOUtfUlhFUlJfQ1JDICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1JYRVJSX1BIWSAgICAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19SWEVSUl9GSUZPICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfUlhFUlJfREVDUllQVCAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1JYRVJSX01JQyAgICAgICAgICAgMHgxMAotCi0jZGVmaW5lIEFUSDlLX1JYX01PUkUgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBBVEg5S19SWF9NT1JFX0FHR1IgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfUlhfR0kgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFUSDlLX1JYXzIwNDAgICAgICAgICAgICAgMHgwOAotI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUFJFICAgIDB4MTAKLSNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BPU1QgICAweDIwCi0jZGVmaW5lIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSAgICAgMHg0MAotCi0jZGVmaW5lIEFUSDlLX1JYS0VZSVhfSU5WQUxJRAkoKHU4KS0xKQotI2RlZmluZSBBVEg5S19UWEtFWUlYX0lOVkFMSUQJKCh1MzIpLTEpCi0KLXN0cnVjdCBhdGhfZGVzYyB7Ci0JdTMyIGRzX2xpbms7Ci0JdTMyIGRzX2RhdGE7Ci0JdTMyIGRzX2N0bDA7Ci0JdTMyIGRzX2N0bDE7Ci0JdTMyIGRzX2h3WzIwXTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwotCQlzdHJ1Y3QgYXRoX3J4X3N0YXR1cyByeDsKLQkJdm9pZCAqc3RhdHM7Ci0JfSBkc191czsKLQl2b2lkICpkc192ZGF0YTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUJZHNfdHhzdGF0CWRzX3VzLnR4Ci0jZGVmaW5lCWRzX3J4c3RhdAlkc191cy5yeAotI2RlZmluZSBkc19zdGF0CQlkc191cy5zdGF0cwotCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAotI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKLS8qIEFUSDlLX1RYREVTQ19JTlRSRVEgZm9yY2VzIGEgdHggaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZCBmb3IKLSAqIHRoZSBkZXNjcmlwdG9yIGl0cyBtYXJrZWQgb24uICBXZSB0YWtlIGEgdHggaW50ZXJydXB0IHRvIHJlYXAKLSAqIGRlc2NyaXB0b3JzIHdoZW4gdGhlIGgvdyBoaXRzIGFuIEVPTCBjb25kaXRpb24gb3IKLSAqIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgc3BlY2lmaWNhbGx5IG1hcmtlZCB0byBnZW5lcmF0ZQotICogYW4gaW50ZXJydXB0IHdpdGggdGhpcyBmbGFnLiBEZXNjcmlwdG9ycyBzaG91bGQgYmUKLSAqIG1hcmtlZCBwZXJpb2RpY2FsbHkgdG8gaW5zdXJlIHRpbWVseSByZXBsZW5pc2hpbmcgb2YgdGhlCi0gKiBzdXBwbHkgbmVlZGVkIGZvciBzZW5kaW5nIGZyYW1lcy4gRGVmZXJpbmcgaW50ZXJydXB0cwotICogcmVkdWNlcyBzeXN0ZW0gbG9hZCBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIG1vcmUgY29uY3VycmVudAotICogd29yayB0byBiZSBkb25lIGJ1dCBpZiBkb25lIHRvIGFnZ3Jlc3NpdmVseSBjYW4gY2F1c2UKLSAqIHNlbmRlcnMgdG8gYmFja3VwLiBXaGVuIHRoZSBoYXJkd2FyZSBxdWV1ZSBpcyBsZWZ0IHRvbwotICogbGFyZ2UgcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIG1heSBhbHNvIGJlIHRvbyBvdXQgb2YKLSAqIGRhdGUuIEFuIEFsdGVybmF0aXZlIGZvciB0aGlzIGlzIFRYIGludGVycnVwdCBtaXRpZ2F0aW9uCi0gKiBidXQgdGhpcyBuZWVkcyBtb3JlIHRlc3RpbmcuICovCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19JTlRSRVEJCTB4MDAxMAotI2RlZmluZSBBVEg5S19UWERFU0NfVkVPTAkJMHgwMDIwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfT05MWQkJMHgwMDQwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfQU5EX0NUTAkweDAwODAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX1ZNRgkJMHgwMTAwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19GUkFHX0lTX09OIAkweDAyMDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0NBQgkJMHgwNDAwCi0KLSNkZWZpbmUgQVRIOUtfUlhERVNDX0lOVFJFUQkJMHgwMDIwCi0KLWVudW0gd2lyZWxlc3NfbW9kZSB7Ci0JQVRIOUtfTU9ERV8xMUEgPSAwLAotCUFUSDlLX01PREVfMTFCID0gMiwKLQlBVEg5S19NT0RFXzExRyA9IDMsCi0JQVRIOUtfTU9ERV8xMU5BX0hUMjAgPSA2LAotCUFUSDlLX01PREVfMTFOR19IVDIwID0gNywKLQlBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMgPSA4LAotCUFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMgPSA5LAotCUFUSDlLX01PREVfMTFOR19IVDQwUExVUyA9IDEwLAotCUFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMgPSAxMSwKLQlBVEg5S19NT0RFX01BWAorc3RydWN0IGF0aF9idWZfc3RhdGUgeworCWludCBiZnNfbmZyYW1lczsKKwl1MTYgYmZzX2FsOworCXUxNiBiZnNfZnJtbGVuOworCWludCBiZnNfc2Vxbm87CisJaW50IGJmc190aWRubzsKKwlpbnQgYmZzX3JldHJpZXM7CisJdTMyIGJmX3R5cGU7CisJdTMyIGJmc19rZXlpeDsKKwllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwogfTsKIAotZW51bSBhdGg5a19od19jYXBzIHsKLQlBVEg5S19IV19DQVBfQ0hBTl9TUFJFQUQJCT0gQklUKDApLAotCUFUSDlLX0hXX0NBUF9NSUNfQUVTQ0NNICAgICAgICAgICAgICAgICA9IEJJVCgxKSwKLQlBVEg5S19IV19DQVBfTUlDX0NLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMiksCi0JQVRIOUtfSFdfQ0FQX01JQ19US0lQICAgICAgICAgICAgICAgICAgID0gQklUKDMpLAotCUFUSDlLX0hXX0NBUF9DSVBIRVJfQUVTQ0NNICAgICAgICAgICAgICA9IEJJVCg0KSwKLQlBVEg5S19IV19DQVBfQ0lQSEVSX0NLSVAgICAgICAgICAgICAgICAgPSBCSVQoNSksCi0JQVRIOUtfSFdfQ0FQX0NJUEhFUl9US0lQICAgICAgICAgICAgICAgID0gQklUKDYpLAotCUFUSDlLX0hXX0NBUF9WRU9MICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCg3KSwKLQlBVEg5S19IV19DQVBfQlNTSURNQVNLICAgICAgICAgICAgICAgICAgPSBCSVQoOCksCi0JQVRIOUtfSFdfQ0FQX01DQVNUX0tFWVNFQVJDSCAgICAgICAgICAgID0gQklUKDkpLAotCUFUSDlLX0hXX0NBUF9DSEFOX0hBTEZSQVRFICAgICAgICAgICAgICA9IEJJVCgxMCksCi0JQVRIOUtfSFdfQ0FQX0NIQU5fUVVBUlRFUlJBVEUgICAgICAgICAgID0gQklUKDExKSwKLQlBVEg5S19IV19DQVBfSFQgICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTIpLAotCUFUSDlLX0hXX0NBUF9HVFQgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMyksCi0JQVRIOUtfSFdfQ0FQX0ZBU1RDQyAgICAgICAgICAgICAgICAgICAgID0gQklUKDE0KSwKLQlBVEg5S19IV19DQVBfUkZTSUxFTlQgICAgICAgICAgICAgICAgICAgPSBCSVQoMTUpLAotCUFUSDlLX0hXX0NBUF9XT1cgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNiksCi0JQVRIOUtfSFdfQ0FQX0NTVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE3KSwKLQlBVEg5S19IV19DQVBfRU5IQU5DRURQTSAgICAgICAgICAgICAgICAgPSBCSVQoMTgpLAotCUFUSDlLX0hXX0NBUF9BVVRPU0xFRVAgICAgICAgICAgICAgICAgICA9IEJJVCgxOSksCi0JQVRIOUtfSFdfQ0FQXzRLQl9TUExJVFRSQU5TICAgICAgICAgICAgID0gQklUKDIwKSwKLQlBVEg5S19IV19DQVBfV09XX01BVENIUEFUVEVSTl9FWEFDVCAgICAgPSBCSVQoMjEpLAorI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCisjZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCisjZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgorI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCisjZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCisjZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCisjZGVmaW5lIGJmX2tleWl4ICAgICAgICAgICAgICAgIGJmX3N0YXRlLmJmc19rZXlpeAorI2RlZmluZSBiZl9rZXl0eXBlICAgICAgCWJmX3N0YXRlLmJmc19rZXl0eXBlCisjZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCisjZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCisjZGVmaW5lIGJmX2lzYWdncihiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9BR0dSKQorI2RlZmluZSBiZl9pc3JldHJpZWQoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9SRVRSWSkKKyNkZWZpbmUgYmZfaXN4cmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1hSRVRSWSkKKworc3RydWN0IGF0aF9idWYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKKwkJCQkJICAgYW4gYWdncmVnYXRlKSAqLworCXN0cnVjdCBhdGhfYnVmICpiZl9uZXh0OwkvKiBuZXh0IHN1YmZyYW1lIGluIHRoZSBhZ2dyZWdhdGUgKi8KKwl2b2lkICpiZl9tcGR1OwkJCS8qIGVuY2xvc2luZyBmcmFtZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgYXRoX2Rlc2MgKmJmX2Rlc2M7CS8qIHZpcnR1YWwgYWRkciBvZiBkZXNjICovCisJZG1hX2FkZHJfdCBiZl9kYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGVzYyAqLworCWRtYV9hZGRyX3QgYmZfYnVmX2FkZHI7CQkvKiBwaHlzaWNhbCBhZGRyIG9mIGRhdGEgYnVmZmVyICovCisJdTMyIGJmX3N0YXR1czsKKwl1MTYgYmZfZmxhZ3M7CisJc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CisJZG1hX2FkZHJfdCBiZl9kbWFjb250ZXh0OwogfTsKIAotZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgewotCUFUSDlLX0NBUF9DSVBIRVIgPSAwLAotCUFUSDlLX0NBUF9US0lQX01JQywKLQlBVEg5S19DQVBfVEtJUF9TUExJVCwKLQlBVEg5S19DQVBfUEhZQ09VTlRFUlMsCi0JQVRIOUtfQ0FQX0RJVkVSU0lUWSwKLQlBVEg5S19DQVBfVFhQT1csCi0JQVRIOUtfQ0FQX1BIWURJQUcsCi0JQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsCi0JQVRIOUtfQ0FQX1RTRl9BREpVU1QsCi0JQVRIOUtfQ0FQX1dNRV9US0lQTUlDLAotCUFUSDlLX0NBUF9SRlNJTEVOVCwKLQlBVEg5S19DQVBfQU5UX0NGR18yR0haLAotCUFUSDlLX0NBUF9BTlRfQ0ZHXzVHSFoKKyNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQorI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCisKK3N0cnVjdCBhdGhfZGVzY2RtYSB7CisJY29uc3QgY2hhciAqZGRfbmFtZTsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRkX2Rlc2M7CisJZG1hX2FkZHJfdCBkZF9kZXNjX3BhZGRyOworCXUzMiBkZF9kZXNjX2xlbjsKKwlzdHJ1Y3QgYXRoX2J1ZiAqZGRfYnVmcHRyOworCWRtYV9hZGRyX3QgZGRfZG1hY29udGV4dDsKIH07CiAKLXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgewotCXUzMiBod19jYXBzOyAvKiBBVEg5S19IV19DQVBfKiBmcm9tIGF0aDlrX2h3X2NhcHMgKi8KLQlERUNMQVJFX0JJVE1BUCh3aXJlbGVzc19tb2RlcywgQVRIOUtfTU9ERV9NQVgpOyAvKiBBVEg5S19NT0RFXyogKi8KLQl1MTYgdG90YWxfcXVldWVzOwotCXUxNiBrZXljYWNoZV9zaXplOwotCXUxNiBsb3dfNWdoel9jaGFuLCBoaWdoXzVnaHpfY2hhbjsKLQl1MTYgbG93XzJnaHpfY2hhbiwgaGlnaF8yZ2h6X2NoYW47Ci0JdTE2IG51bV9tcl9yZXRyaWVzOwotCXUxNiBydHNfYWdncl9saW1pdDsKK2ludCBhdGhfZGVzY2RtYV9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKKwkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgaW50IG5idWYsIGludCBuZGVzYyk7Cit2b2lkIGF0aF9kZXNjZG1hX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CisKKy8qKioqKioqKioqKi8KKy8qIFJYIC8gVFggKi8KKy8qKioqKioqKioqKi8KKworI2RlZmluZSBBVEhfTUFYX0FOVEVOTkEgICAgICAgICAzCisjZGVmaW5lIEFUSF9SWEJVRiAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBXTUVfTlVNX1RJRCAgICAgICAgICAgICAxNgorI2RlZmluZSBBVEhfVFhCVUYgICAgICAgICAgICAgICA1MTIKKyNkZWZpbmUgQVRIX1RYTUFYVFJZICAgICAgICAgICAgMTMKKyNkZWZpbmUgQVRIXzExTl9UWE1BWFRSWSAgICAgICAgMTAKKyNkZWZpbmUgQVRIX01HVF9UWE1BWFRSWSAgICAgICAgNAorI2RlZmluZSBXTUVfQkFfQk1QX1NJWkUgICAgICAgICA2NAorI2RlZmluZSBXTUVfTUFYX0JBICAgICAgICAgICAgICBXTUVfQkFfQk1QX1NJWkUKKyNkZWZpbmUgQVRIX1RJRF9NQVhfQlVGUyAgICAgICAgKDIgKiBXTUVfTUFYX0JBKQorCisjZGVmaW5lIFRJRF9UT19XTUVfQUMoX3RpZCkJCQkJXAorCSgoKChfdGlkKSA9PSAwKSB8fCAoKF90aWQpID09IDMpKSA/IFdNRV9BQ19CRSA6CVwKKwkgKCgoX3RpZCkgPT0gMSkgfHwgKChfdGlkKSA9PSAyKSkgPyBXTUVfQUNfQksgOglcCisJICgoKF90aWQpID09IDQpIHx8ICgoX3RpZCkgPT0gNSkpID8gV01FX0FDX1ZJIDoJXAorCSBXTUVfQUNfVk8pCisKKyNkZWZpbmUgV01FX0FDX0JFICAgMAorI2RlZmluZSBXTUVfQUNfQksgICAxCisjZGVmaW5lIFdNRV9BQ19WSSAgIDIKKyNkZWZpbmUgV01FX0FDX1ZPICAgMworI2RlZmluZSBXTUVfTlVNX0FDICA0CisKKyNkZWZpbmUgQUREQkFfRVhDSEFOR0VfQVRURU1QVFMgICAgMTAKKyNkZWZpbmUgQVRIX0FHR1JfREVMSU1fU1ogICAgICAgICAgNAorI2RlZmluZSBBVEhfQUdHUl9NSU5QTEVOICAgICAgICAgICAyNTYgLyogaW4gYnl0ZXMsIG1pbmltdW0gcGFja2V0IGxlbmd0aCAqLworLyogbnVtYmVyIG9mIGRlbGltaXRlcnMgZm9yIGVuY3J5cHRpb24gcGFkZGluZyAqLworI2RlZmluZSBBVEhfQUdHUl9FTkNSWVBUREVMSU0gICAgICAxMAorLyogbWluaW11bSBoL3cgcWRlcHRoIHRvIGJlIHN1c3RhaW5lZCB0byBtYXhpbWl6ZSBhZ2dyZWdhdGlvbiAqLworI2RlZmluZSBBVEhfQUdHUl9NSU5fUURFUFRIICAgICAgICAyCisjZGVmaW5lIEFUSF9BTVBEVV9TVUJGUkFNRV9ERUZBVUxUIDMyCisjZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9NQVggICAgICAgICg2NCAqIDEwMjQgLSAxKQorI2RlZmluZSBBVEhfQU1QRFVfTElNSVRfREVGQVVMVCAgICBBVEhfQU1QRFVfTElNSVRfTUFYCisKKyNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAorI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2CisjZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAorI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKKyNkZWZpbmUgSUVFRTgwMjExX1dFUF9JVkxFTiAgICAgICAgMworI2RlZmluZSBJRUVFODAyMTFfV0VQX0tJRExFTiAgICAgICAxCisjZGVmaW5lIElFRUU4MDIxMV9XRVBfQ1JDTEVOICAgICAgIDQKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9NUERVX0xFTiAgICAgKDM4NDAgKyBGQ1NfTEVOICsJCVwKKwkJCQkgICAgKElFRUU4MDIxMV9XRVBfSVZMRU4gKwlcCisJCQkJICAgICBJRUVFODAyMTFfV0VQX0tJRExFTiArCVwKKwkJCQkgICAgIElFRUU4MDIxMV9XRVBfQ1JDTEVOKSkKKworLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKKyAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLworI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAorCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKKworLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCisjZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCisKKy8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KKyNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAorCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCisJICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCisKKyNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCisJKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQorCisjZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQorI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCisjZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKKyNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKKworZW51bSBBVEhfQUdHUl9TVEFUVVMgeworCUFUSF9BR0dSX0RPTkUsCisJQVRIX0FHR1JfQkFXX0NMT1NFRCwKKwlBVEhfQUdHUl9MSU1JVEVELAorfTsKKworc3RydWN0IGF0aF90eHEgeworCXUzMiBheHFfcW51bTsKKwl1MzIgKmF4cV9saW5rOworCXN0cnVjdCBsaXN0X2hlYWQgYXhxX3E7CisJc3BpbmxvY2tfdCBheHFfbG9jazsKKwl1MzIgYXhxX2RlcHRoOworCXU4IGF4cV9hZ2dyX2RlcHRoOworCXUzMiBheHFfdG90YWxxdWV1ZWQ7CisJYm9vbCBzdG9wcGVkOworCXN0cnVjdCBhdGhfYnVmICpheHFfbGlua2J1ZjsKKworCS8qIGZpcnN0IGRlc2Mgb2YgdGhlIGxhc3QgZGVzY3JpcHRvciB0aGF0IGNvbnRhaW5zIENUUyAqLworCXN0cnVjdCBhdGhfZGVzYyAqYXhxX2xhc3Rkc1dpdGhDVFM7CisKKwkvKiBmaW5hbCBkZXNjIG9mIHRoZSBnYXRpbmcgZGVzYyB0aGF0IGRldGVybWluZXMgd2hldGhlcgorCSAgIGxhc3Rkc1dpdGhDVFMgaGFzIGJlZW4gRE1BJ2VkIG9yIG5vdCAqLworCXN0cnVjdCBhdGhfZGVzYyAqYXhxX2dhdGluZ2RzOworCisJc3RydWN0IGxpc3RfaGVhZCBheHFfYWNxOworfTsKKworI2RlZmluZSBBR0dSX0NMRUFOVVAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgQUdHUl9BRERCQV9DT01QTEVURSAgQklUKDIpCisjZGVmaW5lIEFHR1JfQUREQkFfUFJPR1JFU1MgIEJJVCgzKQorCitzdHJ1Y3QgYXRoX2F0eF90aWQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1Zl9xOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCXN0cnVjdCBhdGhfYnVmICp0eF9idWZbQVRIX1RJRF9NQVhfQlVGU107CisJdTE2IHNlcV9zdGFydDsKKwl1MTYgc2VxX25leHQ7CisJdTE2IGJhd19zaXplOworCWludCB0aWRubzsKKwlpbnQgYmF3X2hlYWQ7CS8qIGZpcnN0IHVuLWFja2VkIHR4IGJ1ZmZlciAqLworCWludCBiYXdfdGFpbDsJLyogbmV4dCB1bnVzZWQgdHggYnVmZmVyIHNsb3QgKi8KKwlpbnQgc2NoZWQ7CisJaW50IHBhdXNlZDsKKwl1OCBzdGF0ZTsKKwlpbnQgYWRkYmFfZXhjaGFuZ2VhdHRlbXB0czsKK307CisKK3N0cnVjdCBhdGhfYXR4X2FjIHsKKwlpbnQgc2NoZWQ7CisJaW50IHFudW07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgdGlkX3E7Cit9OworCitzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgeworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGlmX2lkOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOworfTsKKworc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7CisJaW50IHJldHJpZXM7CisJaW50IGZsYWdzOworI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKKyNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCisjZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAorfTsKKworLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLworc3RydWN0IGF0aF90eF9zdGF0IHsKKwlpbnQgcnNzaTsKKwlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOworCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOworCWludCByYXRlaWVlZTsKKwlpbnQgcmF0ZUticHM7CisJaW50IHJhdGVjb2RlOworCWludCBmbGFnczsKKwl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KK307CisKK3N0cnVjdCBhZ2dyX3JpZnNfcGFyYW0geworCWludCBwYXJhbV9tYXhfZnJhbWVzOworCWludCBwYXJhbV9tYXhfbGVuOworCWludCBwYXJhbV9ybDsKKwlpbnQgcGFyYW1fYWw7CisJc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKK307CisKK3N0cnVjdCBhdGhfbm9kZSB7CisJc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7CisJc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07CisJc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107CisJdTE2IG1heGFtcGR1OworCXU4IG1wZHVkZW5zaXR5OworfTsKKworc3RydWN0IGF0aF90eCB7CisJdTE2IHNlcV9ubzsKKwl1MzIgdHhxc2V0dXA7CisJaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOworCXNwaW5sb2NrX3QgdHhidWZsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7CisJc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOworCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKK307CisKK3N0cnVjdCBhdGhfcnggeworCXU4IGRlZmFudDsKKwl1OCByeG90aGVyYW50OworCXUzMiAqcnhsaW5rOworCWludCBidWZzaXplOworCXVuc2lnbmVkIGludCByeGZpbHRlcjsKKwlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOworCXNwaW5sb2NrX3QgcnhidWZsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7CisJc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOworfTsKKworaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3UzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKK3ZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOworc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwordm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOworaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwordm9pZCBhdGhfZHJhaW5fYWxsX3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCk7Cit2b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBib29sIHJldHJ5X3R4KTsKK3ZvaWQgYXRoX3R4X25vZGVfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Cit2b2lkIGF0aF90eF9ub2RlX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwordm9pZCBhdGhfdHhxX3NjaGVkdWxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKK2ludCBhdGhfdHhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKK2ludCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitzdHJ1Y3QgYXRoX3R4cSAqYXRoX3Rlc3RfZ2V0X3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoX3R4cV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtLAorCQkgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcSk7CitpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCk7Cit2b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOworYm9vbCBhdGhfdHhfYWdncl9jaGVjayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkbm8pOworaW50IGF0aF90eF9hZ2dyX3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICB1MTYgdGlkLCB1MTYgKnNzbik7CitpbnQgYXRoX3R4X2FnZ3Jfc3RvcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7Cit2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7CisKKy8qKioqKioqKi8KKy8qIFZJRnMgKi8KKy8qKioqKioqKi8KKworc3RydWN0IGF0aF92aWYgeworCWludCBhdl9ic2xvdDsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7CisJc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKKwl1OCBic3NpZFtFVEhfQUxFTl07IC8qIGN1cnJlbnQgQlNTSUQgZnJvbSBjb25maWdfaW50ZXJmYWNlICovCit9OworCisvKioqKioqKioqKioqKioqKioqKi8KKy8qIEJlYWNvbiBIYW5kbGluZyAqLworLyoqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBSZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgYmVhY29ucyB3ZSBzdGFnZ2VyLCAoaS5lLiByZWdhcmRsZXNzIG9mIHRoZQorICogbnVtYmVyIG9mIEJTU0lEcykgaWYgYSBnaXZlbiBiZWFjb24gZG9lcyBub3QgZ28gb3V0IGV2ZW4gYWZ0ZXIgd2FpdGluZyB0aGlzCisgKiBudW1iZXIgb2YgYmVhY29uIGludGVydmFscywgdGhlIGdhbWUncyB1cC4KKyAqLworI2RlZmluZSBCU1RVQ0tfVEhSRVNIICAgICAgICAgICAJKDkgKiBBVEhfQkNCVUYpCisjZGVmaW5lCUFUSF9CQ0JVRiAgICAgICAgICAgICAgIAkxCisjZGVmaW5lIEFUSF9ERUZBVUxUX0JJTlRWQUwgICAgIAkxMDAgLyogVFUgKi8KKyNkZWZpbmUgQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgCTEwCisjZGVmaW5lIElFRUU4MDIxMV9NU19UT19UVSh4KSAgICAgICAgICAgKCgoeCkgKiAxMDAwKSAvIDEwMjQpCisKK3N0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyB7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsKKwl1MTYgbGlzdGVuX2ludGVydmFsOworCXUxNiBkdGltX3BlcmlvZDsKKwl1MTYgYm1pc3NfdGltZW91dDsKKwl1OCBkdGltX2NvdW50OworfTsKKworc3RydWN0IGF0aF9iZWFjb24geworCWVudW0geworCQlPSywJCS8qIG5vIGNoYW5nZSBuZWVkZWQgKi8KKwkJVVBEQVRFLAkJLyogdXBkYXRlIHBlbmRpbmcgKi8KKwkJQ09NTUlUCQkvKiBiZWFjb24gc2VudCwgY29tbWl0IGNoYW5nZSAqLworCX0gdXBkYXRlc2xvdDsJCS8qIHNsb3QgdGltZSB1cGRhdGUgZnNtICovCisKKwl1MzIgYmVhY29ucTsKKwl1MzIgYm1pc3NjbnQ7CisJdTMyIGFzdF9iZV94bWl0OworCXU2NCBiY190c3RhbXA7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKmJzbG90W0FUSF9CQ0JVRl07CisJc3RydWN0IGF0aF93aXBoeSAqYnNsb3RfYXBoeVtBVEhfQkNCVUZdOworCWludCBzbG90dGltZTsKKwlpbnQgc2xvdHVwZGF0ZTsKKwlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBiZWFjb25fcWk7CisJc3RydWN0IGF0aF9kZXNjZG1hIGJkbWE7CisJc3RydWN0IGF0aF90eHEgKmNhYnE7CisJc3RydWN0IGxpc3RfaGVhZCBiYnVmOworfTsKKwordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworaW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92aWYgKmF2cCk7CisKKy8qKioqKioqLworLyogQU5JICovCisvKioqKioqKi8KKworI2RlZmluZSBBVEhfU1RBX1NIT1JUX0NBTElOVEVSVkFMIDEwMDAgICAgLyogMSBzZWNvbmQgKi8KKyNkZWZpbmUgQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMICAxMDAgICAgIC8qIDEwMCBtcyAqLworI2RlZmluZSBBVEhfQU5JX1BPTExJTlRFUlZBTCAgICAgIDEwMCAgICAgLyogMTAwIG1zICovCisjZGVmaW5lIEFUSF9MT05HX0NBTElOVEVSVkFMICAgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzICovCisjZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMICAgMTIwMDAwMCAvKiAyMCBtaW51dGVzICovCisKK3N0cnVjdCBhdGhfYW5pIHsKKwlib29sIGNhbGRvbmU7CisJaW50MTZfdCBub2lzZV9mbG9vcjsKKwl1bnNpZ25lZCBpbnQgbG9uZ2NhbF90aW1lcjsKKwl1bnNpZ25lZCBpbnQgc2hvcnRjYWxfdGltZXI7CisJdW5zaWduZWQgaW50IHJlc2V0Y2FsX3RpbWVyOworCXVuc2lnbmVkIGludCBjaGVja2FuaV90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKi8KKy8qICAgTEVEIENvbnRyb2wgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBVEhfTEVEX1BJTgkxCisjZGVmaW5lIEFUSF9MRURfT05fRFVSQVRJT05fSURMRQkzNTAJLyogaW4gbXNlY3MgKi8KKyNkZWZpbmUgQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRQkyNTAJLyogaW4gbXNlY3MgKi8KKworZW51bSBhdGhfbGVkX3R5cGUgeworCUFUSF9MRURfUkFESU8sCisJQVRIX0xFRF9BU1NPQywKKwlBVEhfTEVEX1RYLAorCUFUSF9MRURfUlgKK307CisKK3N0cnVjdCBhdGhfbGVkIHsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OworCWVudW0gYXRoX2xlZF90eXBlIGxlZF90eXBlOworCWNoYXIgbmFtZVszMl07CisJYm9vbCByZWdpc3RlcmVkOworfTsKKworLyogUmZraWxsICovCisjZGVmaW5lIEFUSF9SRktJTExfUE9MTF9JTlRFUlZBTAkyMDAwIC8qIG1zZWNzICovCisKK3N0cnVjdCBhdGhfcmZraWxsIHsKKwlzdHJ1Y3QgcmZraWxsICpyZmtpbGw7CisJc3RydWN0IGRlbGF5ZWRfd29yayByZmtpbGxfcG9sbDsKKwljaGFyIHJma2lsbF9uYW1lWzMyXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKi8KKy8qIE1haW4gZHJpdmVyIGNvcmUgKi8KKy8qKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERlZmF1bHQgY2FjaGUgbGluZSBzaXplLCBpbiBieXRlcy4KKyAqIFVzZWQgd2hlbiBQQ0kgZGV2aWNlIG5vdCBmdWxseSBpbml0aWFsaXplZCBieSBib290cm9tL0JJT1MKKyovCisjZGVmaW5lIERFRkFVTFRfQ0FDSEVMSU5FICAgICAgIDMyCisjZGVmaW5lCUFUSF9ERUZBVUxUX05PSVNFX0ZMT09SIC05NQorI2RlZmluZSBBVEhfUkVHQ0xBU1NJRFNfTUFYICAgICAxMAorI2RlZmluZSBBVEhfQ0FCUV9SRUFEWV9USU1FICAgICA4MCAgICAgIC8qICUgb2YgYmVhY29uIGludGVydmFsICovCisjZGVmaW5lIEFUSF9NQVhfU1dfUkVUUklFUyAgICAgIDEwCisjZGVmaW5lIEFUSF9DSEFOX01BWCAgICAgICAgICAgIDI1NQorI2RlZmluZSBJRUVFODAyMTFfV0VQX05LSUQgICAgICA0ICAgICAgIC8qIG51bWJlciBvZiBrZXkgaWRzICovCisKKy8qCisgKiBUaGUga2V5IGNhY2hlIGlzIHVzZWQgZm9yIGgvdyBjaXBoZXIgc3RhdGUgYW5kIGFsc28gZm9yCisgKiB0cmFja2luZyBzdGF0aW9uIHN0YXRlIHN1Y2ggYXMgdGhlIGN1cnJlbnQgdHggYW50ZW5uYS4KKyAqIFdlIGFsc28gc2V0dXAgYSBtYXBwaW5nIHRhYmxlIGJldHdlZW4ga2V5IGNhY2hlIHNsb3QgaW5kaWNlcworICogYW5kIHN0YXRpb24gc3RhdGUgdG8gc2hvcnQtY2lyY3VpdCBub2RlIGxvb2t1cHMgb24gcnguCisgKiBEaWZmZXJlbnQgcGFydHMgaGF2ZSBkaWZmZXJlbnQgc2l6ZSBrZXkgY2FjaGVzLiAgV2UgaGFuZGxlCisgKiB1cCB0byBBVEhfS0VZTUFYIGVudHJpZXMgKGNvdWxkIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHN0YXRlKS4KKyAqLworI2RlZmluZQlBVEhfS0VZTUFYCSAgICAgICAgMTI4ICAgICAvKiBtYXgga2V5IGNhY2hlIHNpemUgd2UgaGFuZGxlICovCisKKyNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KKyNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKKyNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAorCisjZGVmaW5lIFNDX09QX0lOVkFMSUQgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBTQ19PUF9CRUFDT05TICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgU0NfT1BfUlhBR0dSICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIFNDX09QX1RYQUdHUiAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFICBCSVQoNCkKKyNkZWZpbmUgU0NfT1BfRlVMTF9SRVNFVCAgICAgICAgQklUKDUpCisjZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUICAgIEJJVCg2KQorI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRSAgICBCSVQoNykKKyNkZWZpbmUgU0NfT1BfUlhGTFVTSCAgICAgICAgICAgQklUKDgpCisjZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVEICAgIEJJVCg5KQorI2RlZmluZSBTQ19PUF9SRktJTExfUkVHSVNURVJFRCBCSVQoMTApCisjZGVmaW5lIFNDX09QX1JGS0lMTF9TV19CTE9DS0VEIEJJVCgxMSkKKyNkZWZpbmUgU0NfT1BfUkZLSUxMX0hXX0JMT0NLRUQgQklUKDEyKQorI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gICBCSVQoMTMpCisjZGVmaW5lIFNDX09QX0xFRF9PTiAgICAgICAgICAgIEJJVCgxNCkKKyNkZWZpbmUgU0NfT1BfU0NBTk5JTkcgICAgICAgICAgQklUKDE1KQorI2RlZmluZSBTQ19PUF9UU0ZfUkVTRVQgICAgICAgICBCSVQoMTYpCisKK3N0cnVjdCBhdGhfYnVzX29wcyB7CisJdm9pZAkJKCpyZWFkX2NhY2hlc2l6ZSkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KTsKKwl2b2lkCQkoKmNsZWFudXApKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKKwlib29sCQkoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKK307CisKK3N0cnVjdCBhdGhfd2lwaHk7CisKK3N0cnVjdCBhdGhfc29mdGMgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXNwaW5sb2NrX3Qgd2lwaHlfbG9jazsgLyogc3BpbmxvY2sgdG8gcHJvdGVjdCBhdGhfd2lwaHkgZGF0YSAqLworCXN0cnVjdCBhdGhfd2lwaHkgKnByaV93aXBoeTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICoqc2VjX3dpcGh5OyAvKiBzZWNvbmRhcnkgd2lwaHlzICh2aXJ0dWFsIHJhZGlvcyk7IG1heQorCQkJCSAgICAgICAqIGhhdmUgTlVMTCBlbnRyaWVzICovCisJaW50IG51bV9zZWNfd2lwaHk7IC8qIG51bWJlciBvZiBzZWNfd2lwaHkgcG9pbnRlcnMgaW4gdGhlIGFycmF5ICovCisJaW50IGNoYW5faWR4OworCWludCBjaGFuX2lzX2h0OworCXN0cnVjdCBhdGhfd2lwaHkgKm5leHRfd2lwaHk7CisJc3RydWN0IHdvcmtfc3RydWN0IGNoYW5fd29yazsKKwlpbnQgd2lwaHlfc2VsZWN0X2ZhaWx1cmVzOworCXVuc2lnbmVkIGxvbmcgd2lwaHlfc2VsZWN0X2ZpcnN0X2ZhaWw7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3aXBoeV93b3JrOworCXVuc2lnbmVkIGxvbmcgd2lwaHlfc2NoZWR1bGVyX2ludDsKKwlpbnQgd2lwaHlfc2NoZWR1bGVyX2luZGV4OworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKKwlzdHJ1Y3QgYXRoX2h3ICpzY19haDsKKwl2b2lkIF9faW9tZW0gKm1lbTsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3Qgc2NfcmVzZXRsb2NrOworCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OworCXN0cnVjdCBtdXRleCBtdXRleDsKKworCXU4IGN1cmJzc2lkW0VUSF9BTEVOXTsKKwl1OCBic3NpZG1hc2tbRVRIX0FMRU5dOworCXUzMiBpbnRyc3RhdHVzOworCXUzMiBzY19mbGFnczsgLyogU0NfT1BfKiAqLworCXUxNiBjdXJ0eHBvdzsKKwl1MTYgY3VyYWlkOworCXUxNiBjYWNoZWxzejsKKwl1OCBuYmNudmlmczsKKwl1MTYgbnZpZnM7CiAJdTggdHhfY2hhaW5tYXNrOwogCXU4IHJ4X2NoYWlubWFzazsKLQl1MTYgdHhfdHJpZ2xldmVsX21heDsKLQl1MTYgcmVnX2NhcDsKLQl1OCBudW1fZ3Bpb19waW5zOwotCXU4IG51bV9hbnRjZmdfMmdoejsKLQl1OCBudW1fYW50Y2ZnXzVnaHo7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyB7Ci0JaW50IGRtYV9iZWFjb25fcmVzcG9uc2VfdGltZTsKLQlpbnQgc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWU7Ci0JaW50IGFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmOwotCWludCBhY2tfNm1iOwotCWludCBjd21faWdub3JlX2V4dGNjYTsKLQl1OCBwY2llX3Bvd2Vyc2F2ZV9lbmFibGU7Ci0JdTggcGNpZV9sMXNrcF9lbmFibGU7Ci0JdTggcGNpZV9jbG9ja19yZXE7Ci0JdTMyIHBjaWVfd2FlbjsKLQlpbnQgcGNpZV9wb3dlcl9yZXNldDsKLQl1OCBwY2llX3Jlc3RvcmU7Ci0JdTggYW5hbG9nX3NoaWZ0cmVnOwotCXU4IGh0X2VuYWJsZTsKLQl1MzIgb2ZkbV90cmlnX2xvdzsKLQl1MzIgb2ZkbV90cmlnX2hpZ2g7Ci0JdTMyIGNja190cmlnX2hpZ2g7Ci0JdTMyIGNja190cmlnX2xvdzsKLQl1MzIgZW5hYmxlX2FuaTsKLQl1OCBub2lzZV9pbW11bml0eV9sZXZlbDsKLQl1MzIgb2ZkbV93ZWFrc2lnbmFsX2RldDsKLQl1MzIgY2NrX3dlYWtzaWduYWxfdGhyOwotCXU4IHNwdXJfaW1tdW5pdHlfbGV2ZWw7Ci0JdTggZmlyc3RlcF9sZXZlbDsKLQlpbnQ4X3QgcnNzaV90aHJfaGlnaDsKLQlpbnQ4X3QgcnNzaV90aHJfbG93OwotCXUxNiBkaXZlcnNpdHlfY29udHJvbDsKLQl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKLQlpbnQgc2VyaWFsaXplX3JlZ21vZGU7Ci0JaW50IGludHJfbWl0aWdhdGlvbjsKLSNkZWZpbmUgU1BVUl9ESVNBQkxFICAgICAgICAJMAotI2RlZmluZSBTUFVSX0VOQUJMRV9JT0NUTCAgIAkxCi0jZGVmaW5lIFNQVVJfRU5BQkxFX0VFUFJPTSAgCTIKLSNkZWZpbmUgQVJfRUVQUk9NX01PREFMX1NQVVJTICAgNQotI2RlZmluZSBBUl9TUFVSXzU0MTNfMSAgICAgIAkxNjQwCi0jZGVmaW5lIEFSX1NQVVJfNTQxM18yICAgICAgCTEyMDAKLSNkZWZpbmUgQVJfTk9fU1BVUiAgICAgIAkweDgwMDAKLSNkZWZpbmUgQVJfQkFTRV9GUkVRXzJHSFogICAJMjMwMAotI2RlZmluZSBBUl9CQVNFX0ZSRVFfNUdIWiAgIAk0OTAwCi0jZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDQwIDE5Ci0jZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDIwIDEwCi0JaW50IHNwdXJtb2RlOwotCXUxNiBzcHVyY2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXVsyXTsKLX07Ci0KLWVudW0gYXRoOWtfdHhfcXVldWUgewotCUFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFID0gMCwKLQlBVEg5S19UWF9RVUVVRV9EQVRBLAotCUFUSDlLX1RYX1FVRVVFX0JFQUNPTiwKLQlBVEg5S19UWF9RVUVVRV9DQUIsCi0JQVRIOUtfVFhfUVVFVUVfVUFQU0QsCi0JQVRIOUtfVFhfUVVFVUVfUFNQT0xMCi19OwotCi0jZGVmaW5lCUFUSDlLX05VTV9UWF9RVUVVRVMgMTAKLQotZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHsKLQlBVEg5S19XTUVfQUNfQksgPSAwLAotCUFUSDlLX1dNRV9BQ19CRSwKLQlBVEg5S19XTUVfQUNfVkksCi0JQVRIOUtfV01FX0FDX1ZPLAotCUFUSDlLX1dNRV9VUFNECi19OwotCi1lbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHsKLQlUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSA9IDB4MDAwMSwKLQlUWFFfRkxBR19UWEVSUklOVF9FTkFCTEUgPSAweDAwMDEsCi0JVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSA9IDB4MDAwMiwKLQlUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUgPSAweDAwMDQsCi0JVFhRX0ZMQUdfVFhVUk5JTlRfRU5BQkxFID0gMHgwMDA4LAotCVRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSA9IDB4MDAxMCwKLQlUWFFfRkxBR19DT01QUkVTU0lPTl9FTkFCTEUgPSAweDAwMjAsCi0JVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSA9IDB4MDA0MCwKLQlUWFFfRkxBR19GUkFHX0JVUlNUX0JBQ0tPRkZfRU5BQkxFID0gMHgwMDgwLAotfTsKLQotI2RlZmluZSBBVEg5S19UWFFfVVNFREVGQVVMVCAoKHUzMikgLTEpCi0KLSNkZWZpbmUgQVRIOUtfREVDT01QX01BU0tfU0laRSAgICAgMTI4Ci0jZGVmaW5lIEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQgIDUwCi0jZGVmaW5lIEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQgIDk2Ci0KLWVudW0gYXRoOWtfcGt0X3R5cGUgewotCUFUSDlLX1BLVF9UWVBFX05PUk1BTCA9IDAsCi0JQVRIOUtfUEtUX1RZUEVfQVRJTSwKLQlBVEg5S19QS1RfVFlQRV9QU1BPTEwsCi0JQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAotCUFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1AsCi0JQVRIOUtfUEtUX1RZUEVfQ0hJUlAsCi0JQVRIOUtfUEtUX1RZUEVfR1JQX1BPTEwsCi19OwotCi1zdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyB7Ci0JdTMyIHRxaV92ZXI7Ci0JZW51bSBhdGg5a190eF9xdWV1ZSB0cWlfdHlwZTsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgdHFpX3N1YnR5cGU7Ci0JZW51bSBhdGg5a190eF9xdWV1ZV9mbGFncyB0cWlfcWZsYWdzOwotCXUzMiB0cWlfcHJpb3JpdHk7Ci0JdTMyIHRxaV9haWZzOwotCXUzMiB0cWlfY3dtaW47Ci0JdTMyIHRxaV9jd21heDsKLQl1MTYgdHFpX3NocmV0cnk7Ci0JdTE2IHRxaV9sZ3JldHJ5OwotCXUzMiB0cWlfY2JyUGVyaW9kOwotCXUzMiB0cWlfY2JyT3ZlcmZsb3dMaW1pdDsKLQl1MzIgdHFpX2J1cnN0VGltZTsKLQl1MzIgdHFpX3JlYWR5VGltZTsKLQl1MzIgdHFpX3BoeXNDb21wQnVmOwotCXUzMiB0cWlfaW50RmxhZ3M7Ci19OwotCi1lbnVtIGF0aDlrX3J4X2ZpbHRlciB7Ci0JQVRIOUtfUlhfRklMVEVSX1VDQVNUID0gMHgwMDAwMDAwMSwKLQlBVEg5S19SWF9GSUxURVJfTUNBU1QgPSAweDAwMDAwMDAyLAotCUFUSDlLX1JYX0ZJTFRFUl9CQ0FTVCA9IDB4MDAwMDAwMDQsCi0JQVRIOUtfUlhfRklMVEVSX0NPTlRST0wgPSAweDAwMDAwMDA4LAotCUFUSDlLX1JYX0ZJTFRFUl9CRUFDT04gPSAweDAwMDAwMDEwLAotCUFUSDlLX1JYX0ZJTFRFUl9QUk9NID0gMHgwMDAwMDAyMCwKLQlBVEg5S19SWF9GSUxURVJfUFJPQkVSRVEgPSAweDAwMDAwMDgwLAotCUFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwgPSAweDAwMDA0MDAwLAotCUFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIgPSAweDAwMDAwMTAwLAotCUFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUiA9IDB4MDAwMDIwMDAsCi19OwotCi1lbnVtIGF0aDlrX2ludCB7Ci0JQVRIOUtfSU5UX1JYID0gMHgwMDAwMDAwMSwKLQlBVEg5S19JTlRfUlhERVNDID0gMHgwMDAwMDAwMiwKLQlBVEg5S19JTlRfUlhOT0ZSTSA9IDB4MDAwMDAwMDgsCi0JQVRIOUtfSU5UX1JYRU9MID0gMHgwMDAwMDAxMCwKLQlBVEg5S19JTlRfUlhPUk4gPSAweDAwMDAwMDIwLAotCUFUSDlLX0lOVF9UWCA9IDB4MDAwMDAwNDAsCi0JQVRIOUtfSU5UX1RYREVTQyA9IDB4MDAwMDAwODAsCi0JQVRIOUtfSU5UX1RJTV9USU1FUiA9IDB4MDAwMDAxMDAsCi0JQVRIOUtfSU5UX1RYVVJOID0gMHgwMDAwMDgwMCwKLQlBVEg5S19JTlRfTUlCID0gMHgwMDAwMTAwMCwKLQlBVEg5S19JTlRfUlhQSFkgPSAweDAwMDA0MDAwLAotCUFUSDlLX0lOVF9SWEtDTSA9IDB4MDAwMDgwMDAsCi0JQVRIOUtfSU5UX1NXQkEgPSAweDAwMDEwMDAwLAotCUFUSDlLX0lOVF9CTUlTUyA9IDB4MDAwNDAwMDAsCi0JQVRIOUtfSU5UX0JOUiA9IDB4MDAxMDAwMDAsCi0JQVRIOUtfSU5UX1RJTSA9IDB4MDAyMDAwMDAsCi0JQVRIOUtfSU5UX0RUSU0gPSAweDAwNDAwMDAwLAotCUFUSDlLX0lOVF9EVElNU1lOQyA9IDB4MDA4MDAwMDAsCi0JQVRIOUtfSU5UX0dQSU8gPSAweDAxMDAwMDAwLAotCUFUSDlLX0lOVF9DQUJFTkQgPSAweDAyMDAwMDAwLAotCUFUSDlLX0lOVF9DU1QgPSAweDEwMDAwMDAwLAotCUFUSDlLX0lOVF9HVFQgPSAweDIwMDAwMDAwLAotCUFUSDlLX0lOVF9GQVRBTCA9IDB4NDAwMDAwMDAsCi0JQVRIOUtfSU5UX0dMT0JBTCA9IDB4ODAwMDAwMDAsCi0JQVRIOUtfSU5UX0JNSVNDID0gQVRIOUtfSU5UX1RJTSB8Ci0JCUFUSDlLX0lOVF9EVElNIHwKLQkJQVRIOUtfSU5UX0RUSU1TWU5DIHwKLQkJQVRIOUtfSU5UX0NBQkVORCwKLQlBVEg5S19JTlRfQ09NTU9OID0gQVRIOUtfSU5UX1JYTk9GUk0gfAotCQlBVEg5S19JTlRfUlhERVNDIHwKLQkJQVRIOUtfSU5UX1JYRU9MIHwKLQkJQVRIOUtfSU5UX1JYT1JOIHwKLQkJQVRIOUtfSU5UX1RYVVJOIHwKLQkJQVRIOUtfSU5UX1RYREVTQyB8Ci0JCUFUSDlLX0lOVF9NSUIgfAotCQlBVEg5S19JTlRfUlhQSFkgfAotCQlBVEg5S19JTlRfUlhLQ00gfAotCQlBVEg5S19JTlRfU1dCQSB8Ci0JCUFUSDlLX0lOVF9CTUlTUyB8Ci0JCUFUSDlLX0lOVF9HUElPLAotCUFUSDlLX0lOVF9OT0NBUkQgPSAweGZmZmZmZmZmCi19OwotCi0jZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgMHgwMDAxCi0jZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCAgICAgMHgwMDAyCi0jZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJICAgMHgwMDA0Ci0KLXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgewotCXUzMiBUcmllczsKLQl1MzIgUmF0ZTsKLQl1MzIgUGt0RHVyYXRpb247Ci0JdTMyIENoU2VsOwotCXUzMiBSYXRlRmxhZ3M7Ci19OwotCi0jZGVmaW5lIENIQU5ORUxfQ1dfSU5UICAgIDB4MDAwMDIKLSNkZWZpbmUgQ0hBTk5FTF9DQ0sgICAgICAgMHgwMDAyMAotI2RlZmluZSBDSEFOTkVMX09GRE0gICAgICAweDAwMDQwCi0jZGVmaW5lIENIQU5ORUxfMkdIWiAgICAgIDB4MDAwODAKLSNkZWZpbmUgQ0hBTk5FTF81R0haICAgICAgMHgwMDEwMAotI2RlZmluZSBDSEFOTkVMX1BBU1NJVkUgICAweDAwMjAwCi0jZGVmaW5lIENIQU5ORUxfRFlOICAgICAgIDB4MDA0MDAKLSNkZWZpbmUgQ0hBTk5FTF9IQUxGICAgICAgMHgwNDAwMAotI2RlZmluZSBDSEFOTkVMX1FVQVJURVIgICAweDA4MDAwCi0jZGVmaW5lIENIQU5ORUxfSFQyMCAgICAgIDB4MTAwMDAKLSNkZWZpbmUgQ0hBTk5FTF9IVDQwUExVUyAgMHgyMDAwMAotI2RlZmluZSBDSEFOTkVMX0hUNDBNSU5VUyAweDQwMDAwCi0KLSNkZWZpbmUgQ0hBTk5FTF9JTlRFUkZFUkVOQ0UgICAgMHgwMQotI2RlZmluZSBDSEFOTkVMX0RGUyAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIENIQU5ORUxfNE1TX0xJTUlUICAgICAgIDB4MDQKLSNkZWZpbmUgQ0hBTk5FTF9ERlNfQ0xFQVIgICAgICAgMHgwOAotI2RlZmluZSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DICAweDEwCi0jZGVmaW5lIENIQU5ORUxfUEVSXzExRF9BREhPQyAgIDB4MjAKLQotI2RlZmluZSBDSEFOTkVMX0EgICAgICAgICAgIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9PRkRNKQotI2RlZmluZSBDSEFOTkVMX0IgICAgICAgICAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9DQ0spCi0jZGVmaW5lIENIQU5ORUxfRyAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE0pCi0jZGVmaW5lIENIQU5ORUxfR19IVDIwICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUMjApCi0jZGVmaW5lIENIQU5ORUxfQV9IVDIwICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUMjApCi0jZGVmaW5lIENIQU5ORUxfR19IVDQwUExVUyAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBQTFVTKQotI2RlZmluZSBDSEFOTkVMX0dfSFQ0ME1JTlVTIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCi0jZGVmaW5lIENIQU5ORUxfQV9IVDQwUExVUyAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBQTFVTKQotI2RlZmluZSBDSEFOTkVMX0FfSFQ0ME1JTlVTIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCi0jZGVmaW5lIENIQU5ORUxfQUxMCQkJCVwKLQkoQ0hBTk5FTF9PRkRNfAkJCQlcCi0JIENIQU5ORUxfQ0NLfAkJCQlcCi0JIENIQU5ORUxfMkdIWiB8CQkJCVwKLQkgQ0hBTk5FTF81R0haIHwJCQkJXAotCSBDSEFOTkVMX0hUMjAgfAkJCQlcCi0JIENIQU5ORUxfSFQ0MFBMVVMgfAkJCVwKLQkgQ0hBTk5FTF9IVDQwTUlOVVMpCi0KLXN0cnVjdCBhdGg5a19jaGFubmVsIHsKLQl1MTYgY2hhbm5lbDsKLQl1MzIgY2hhbm5lbEZsYWdzOwotCXU4IHByaXZGbGFnczsKLQlpbnQ4X3QgbWF4UmVnVHhQb3dlcjsKLQlpbnQ4X3QgbWF4VHhQb3dlcjsKLQlpbnQ4X3QgbWluVHhQb3dlcjsKLQl1MzIgY2hhbm1vZGU7Ci0JaW50MzJfdCBDYWxWYWxpZDsKLQlib29sIG9uZVRpbWVDYWxzRG9uZTsKLQlpbnQ4X3QgaUNvZmY7Ci0JaW50OF90IHFDb2ZmOwotCWludDE2X3QgcmF3Tm9pc2VGbG9vcjsKLQlpbnQ4X3QgYW50ZW5uYU1heDsKLQl1MzIgcmVnRG1uRmxhZ3M7Ci0JdTMyIGNvbmZvcm1hbmNlVGVzdExpbWl0WzNdOyAvKiAwOjExYSwgMTogMTFiLCAyOjExZyAqLwotI2lmZGVmIEFUSF9ORl9QRVJfQ0hBTgotCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IG5mQ2FsSGlzdFtOVU1fTkZfUkVBRElOR1NdOwotI2VuZGlmCi19OwotCi0jZGVmaW5lIElTX0NIQU5fQShfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BKSA9PSBDSEFOTkVMX0EpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQV9IVDIwKSA9PSBDSEFOTkVMX0FfSFQyMCkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBQTFVTKSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQV9IVDQwTUlOVVMpID09IENIQU5ORUxfQV9IVDQwTUlOVVMpKQotI2RlZmluZSBJU19DSEFOX0coX2MpICgoKChfYyktPmNoYW5uZWxGbGFncyAmIChDSEFOTkVMX0cpKSA9PSBDSEFOTkVMX0cpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfR19IVDIwKSA9PSBDSEFOTkVMX0dfSFQyMCkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBQTFVTKSA9PSBDSEFOTkVMX0dfSFQ0MFBMVVMpIHx8IFwKLSAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfR19IVDQwTUlOVVMpID09IENIQU5ORUxfR19IVDQwTUlOVVMpKQotI2RlZmluZSBJU19DSEFOX09GRE0oX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9PRkRNKSAhPSAwKQotI2RlZmluZSBJU19DSEFOXzVHSFooX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF81R0haKSAhPSAwKQotI2RlZmluZSBJU19DSEFOXzJHSFooX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF8yR0haKSAhPSAwKQotI2RlZmluZSBJU19DSEFOX1BBU1NJVkUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKSAhPSAwKQotI2RlZmluZSBJU19DSEFOX0hBTEZfUkFURShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0hBTEYpICE9IDApCi0jZGVmaW5lIElTX0NIQU5fUVVBUlRFUl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfUVVBUlRFUikgIT0gMCkKLQotLyogVGhlc2UgbWFjcm9zIGNoZWNrIGNoYW5tb2RlIGFuZCBub3QgY2hhbm5lbEZsYWdzICovCi0jZGVmaW5lIElTX0NIQU5fQihfYykgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQikKLSNkZWZpbmUgSVNfQ0hBTl9IVDIwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDIwKSB8fAlcCi0JCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQyMCkpCi0jZGVmaW5lIElTX0NIQU5fSFQ0MChfYykgKCgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fSFQoX2MpIChJU19DSEFOX0hUMjAoKF9jKSkgfHwgSVNfQ0hBTl9IVDQwKChfYykpKQotCi0jZGVmaW5lIElTX0NIQU5fSU5fUFVCTElDX1NBRkVUWV9CQU5EKF9jKSAoKF9jKSA+IDQ5NDAgJiYgKF9jKSA8IDQ5OTApCi0jZGVmaW5lIElTX0NIQU5fQV81TUhaX1NQQUNFRChfYykJCQlcCi0JKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF81R0haKSAhPSAwKSAmJglcCi0JICgoKF9jKS0+Y2hhbm5lbCAlIDIwKSAhPSAwKSAmJgkJCVwKLQkgKCgoX2MpLT5jaGFubmVsICUgMTApICE9IDApKQotCi1zdHJ1Y3QgYXRoOWtfa2V5dmFsIHsKLQl1OCBrdl90eXBlOwotCXU4IGt2X3BhZDsKLQl1MTYga3ZfbGVuOwotCXU4IGt2X3ZhbFsxNl07Ci0JdTgga3ZfbWljWzhdOwotCXU4IGt2X3R4bWljWzhdOwotfTsKLQotZW51bSBhdGg5a19rZXlfdHlwZSB7Ci0JQVRIOUtfS0VZX1RZUEVfQ0xFQVIsCi0JQVRIOUtfS0VZX1RZUEVfV0VQLAotCUFUSDlLX0tFWV9UWVBFX0FFUywKLQlBVEg5S19LRVlfVFlQRV9US0lQLAotfTsKLQotZW51bSBhdGg5a19jaXBoZXIgewotCUFUSDlLX0NJUEhFUl9XRVAgPSAwLAotCUFUSDlLX0NJUEhFUl9BRVNfT0NCID0gMSwKLQlBVEg5S19DSVBIRVJfQUVTX0NDTSA9IDIsCi0JQVRIOUtfQ0lQSEVSX0NLSVAgPSAzLAotCUFUSDlLX0NJUEhFUl9US0lQID0gNCwKLQlBVEg5S19DSVBIRVJfQ0xSID0gNSwKLQlBVEg5S19DSVBIRVJfTUlDID0gMTI3Ci19OwotCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQ09NUFJFU1NfRElTICAgMHgwMDAxCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQUVTX0RJUyAgICAgICAgMHgwMDAyCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfRkFTVEZSQU1FX0RJUyAgMHgwMDA0Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQlVSU1RfRElTICAgICAgMHgwMDA4Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVICAgICAgICAgMHgwMUYwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVX1MgICAgICAgNAotI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0hFQVZZX0NMSVBfRU4gIDB4MDIwMAotI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVMgICAgIDB4RjAwMAotI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVNfUyAgIDEyCi0KLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0ZDQ19NSURCQU5EICAgMHgwMDQwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOICAgIDB4MDA4MAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTIgICAgICAgICAweDAxMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQgICAgMHgwMjAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PREQgICAgIDB4MDQwMAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSAgICAweDA4MDAKLQotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REX1BSRTRfMCAgMHg0MDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBX1BSRTRfMCAweDgwMDAKLQotI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCi0jZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKLSNkZWZpbmUgQ1RMX01PREVfTSAgICAgICAgICAgICAgNwotI2RlZmluZSBDVExfMTFBICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIENUTF8xMUIgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ1RMXzExRyAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBDVExfMkdIVDIwICAgICAgICAgICAgICA1Ci0jZGVmaW5lIENUTF81R0hUMjAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQ1RMXzJHSFQ0MCAgICAgICAgICAgICAgNwotI2RlZmluZSBDVExfNUdIVDQwICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgQVJfRUVQUk9NX01BQyhpKSAgICAgICAgKDB4MWQrKGkpKQotCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9HUElPX1NFTCAgICAgMHgwMDFjCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9HUElPX1NFTF9TICAgMgotI2RlZmluZSBBUl9FRVBST01fUkZTSUxFTlRfUE9MQVJJVFkgICAgIDB4MDAwMgotI2RlZmluZSBBUl9FRVBST01fUkZTSUxFTlRfUE9MQVJJVFlfUyAgIDEKLQotI2RlZmluZSBDVFJZX0RFQlVHIDB4MWZmCi0jZGVmaW5lCUNUUllfREVGQVVMVCAwCi0KLWVudW0gcmVnX2V4dF9iaXRtYXAgewotCVJFR19FWFRfSkFQQU5fTUlEQkFORCA9IDEsCi0JUkVHX0VYVF9GQ0NfREZTX0hUNDAgPSAyLAotCVJFR19FWFRfSkFQQU5fTk9OREZTX0hUNDAgPSAzLAotCVJFR19FWFRfSkFQQU5fREZTX0hUNDAgPSA0Ci19OwotCi1zdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSB7Ci0JdTE2IGNvdW50cnlDb2RlOwotCXUxNiByZWdEbW5FbnVtOwotCXUxNiByZWdEbW41RzsKLQl1MTYgcmVnRG1uMkc7Ci0JdTggaXNNdWx0aWRvbWFpbjsKLQl1OCBpc29bM107Ci19OwotCi0jZGVmaW5lIFJFR19XUklURShfYWgsIF9yZWcsIF92YWwpIGF0aDlrX2lvd3JpdGUzMigoX2FoKSwgKF9yZWcpLCAoX3ZhbCkpCi0jZGVmaW5lIFJFR19SRUFEKF9haCwgX3JlZykgYXRoOWtfaW9yZWFkMzIoKF9haCksIChfcmVnKSkKLQotI2RlZmluZSBTTShfdiwgX2YpICAoKChfdikgPDwgX2YjI19TKSAmIF9mKQotI2RlZmluZSBNUyhfdiwgX2YpICAoKChfdikgJiBfZikgPj4gX2YjI19TKQotI2RlZmluZSBSRUdfUk1XKF9hLCBfciwgX3NldCwgX2NscikgICAgXAotCVJFR19XUklURShfYSwgX3IsIChSRUdfUkVBRChfYSwgX3IpICYgfihfY2xyKSkgfCAoX3NldCkpCi0jZGVmaW5lIFJFR19STVdfRklFTEQoX2EsIF9yLCBfZiwgX3YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBcCi0JKFJFR19SRUFEKF9hLCBfcikgJiB+X2YpIHwgKCgoX3YpIDw8IF9mIyNfUykgJiBfZikpCi0jZGVmaW5lIFJFR19TRVRfQklUKF9hLCBfciwgX2YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBSRUdfUkVBRChfYSwgX3IpIHwgX2YpCi0jZGVmaW5lIFJFR19DTFJfQklUKF9hLCBfciwgX2YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBSRUdfUkVBRChfYSwgX3IpICYgfl9mKQotCi0jZGVmaW5lIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMgICAweDAwMDAwMDAxCi0KLSNkZWZpbmUgSU5JVF9BSUZTICAgICAgIDIKLSNkZWZpbmUgSU5JVF9DV01JTiAgICAgIDE1Ci0jZGVmaW5lIElOSVRfQ1dNSU5fMTFCICAzMQotI2RlZmluZSBJTklUX0NXTUFYICAgICAgMTAyMwotI2RlZmluZSBJTklUX1NIX1JFVFJZICAgMTAKLSNkZWZpbmUgSU5JVF9MR19SRVRSWSAgIDEwCi0jZGVmaW5lIElOSVRfU1NIX1JFVFJZICAzMgotI2RlZmluZSBJTklUX1NMR19SRVRSWSAgMzIKLQotI2RlZmluZSBXTEFOX0NUUkxfRlJBTUVfU0laRSAoMisyKzYrNCkKLQotI2RlZmluZSBBVEhfQU1QRFVfTElNSVRfTUFYICAgICAgKDY0ICogMTAyNCAtIDEpCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICBBVEhfQU1QRFVfTElNSVRfTUFYCi0KLSNkZWZpbmUgSUVFRTgwMjExX1dFUF9JVkxFTiAgICAgIDMKLSNkZWZpbmUgSUVFRTgwMjExX1dFUF9LSURMRU4gICAgIDEKLSNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgIDQKLSNkZWZpbmUgSUVFRTgwMjExX01BWF9NUERVX0xFTiAgKDM4NDAgKyBGQ1NfTEVOICsJCVwKLQkJCQkgKElFRUU4MDIxMV9XRVBfSVZMRU4gKwkJXAotCQkJCSAgSUVFRTgwMjExX1dFUF9LSURMRU4gKwlcCi0JCQkJICBJRUVFODAyMTFfV0VQX0NSQ0xFTikpCi0jZGVmaW5lIE1BWF9SQVRFX1BPV0VSIDYzCi0KLWVudW0gYXRoOWtfcG93ZXJfbW9kZSB7Ci0JQVRIOUtfUE1fQVdBS0UgPSAwLAotCUFUSDlLX1BNX0ZVTExfU0xFRVAsCi0JQVRIOUtfUE1fTkVUV09SS19TTEVFUCwKLQlBVEg5S19QTV9VTkRFRklORUQKLX07Ci0KLXN0cnVjdCBhdGg5a19taWJfc3RhdHMgewotCXUzMiBhY2tyY3ZfYmFkOwotCXUzMiBydHNfYmFkOwotCXUzMiBydHNfZ29vZDsKLQl1MzIgZmNzX2JhZDsKLQl1MzIgYmVhY29uczsKLX07Ci0KLWVudW0gYXRoOWtfYW50X3NldHRpbmcgewotCUFUSDlLX0FOVF9WQVJJQUJMRSA9IDAsCi0JQVRIOUtfQU5UX0ZJWEVEX0EsCi0JQVRIOUtfQU5UX0ZJWEVEX0IKLX07Ci0KLSNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzYgNgotI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfOSA5Ci0jZGVmaW5lIEFUSDlLX1NMT1RfVElNRV8yMCAyMAotCi1lbnVtIGF0aDlrX2h0X21hY21vZGUgewotCUFUSDlLX0hUX01BQ01PREVfMjAgPSAwLAotCUFUSDlLX0hUX01BQ01PREVfMjA0MCA9IDEsCi19OwotCi1lbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIHsKLQlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCA9IDAsCi0JQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUgPSAxLAotfTsKLQotc3RydWN0IGF0aDlrX2h0X2N3bSB7Ci0JZW51bSBhdGg5a19odF9tYWNtb2RlIGh0X21hY21vZGU7CisJdTMyIGtleW1heDsKKwlERUNMQVJFX0JJVE1BUChrZXltYXAsIEFUSF9LRVlNQVgpOworCXU4IHNwbGl0bWljOworCWF0b21pY190IHBzX3VzZWNvdW50OworCWVudW0gYXRoOWtfaW50IGltYXNrOwogCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgaHRfZXh0cHJvdHNwYWNpbmc7Ci19OworCWVudW0gYXRoOWtfaHRfbWFjbW9kZSB0eF9jaGFuX3dpZHRoOwogCi1lbnVtIGF0aDlrX2FuaV9jbWQgewotCUFUSDlLX0FOSV9QUkVTRU5UID0gMHgxLAotCUFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTCA9IDB4MiwKLQlBVEg5S19BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT04gPSAweDQsCi0JQVRIOUtfQU5JX0NDS19XRUFLX1NJR05BTF9USFIgPSAweDgsCi0JQVRIOUtfQU5JX0ZJUlNURVBfTEVWRUwgPSAweDEwLAotCUFUSDlLX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMID0gMHgyMCwKLQlBVEg5S19BTklfTU9ERSA9IDB4NDAsCi0JQVRIOUtfQU5JX1BIWUVSUl9SRVNFVCA9IDB4ODAsCi0JQVRIOUtfQU5JX0FMTCA9IDB4ZmYKLX07CisJc3RydWN0IGF0aF9jb25maWcgY29uZmlnOworCXN0cnVjdCBhdGhfcnggcng7CisJc3RydWN0IGF0aF90eCB0eDsKKwlzdHJ1Y3QgYXRoX2JlYWNvbiBiZWFjb247CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCi1lbnVtIHsKLQlXTEFOX1JDX1BIWV9PRkRNLAotCVdMQU5fUkNfUEhZX0NDSywKLQlXTEFOX1JDX1BIWV9IVF8yMF9TUywKLQlXTEFOX1JDX1BIWV9IVF8yMF9EUywKLQlXTEFOX1JDX1BIWV9IVF80MF9TUywKLQlXTEFOX1JDX1BIWV9IVF80MF9EUywKLQlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCi0JV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAotCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKLQlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCi0JV0xBTl9SQ19QSFlfTUFYCi19OworCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKKwlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7CisJc3RydWN0IGF0aF9sZWQgdHhfbGVkOworCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGF0aF9sZWRfYmxpbmtfd29yazsKKwlpbnQgbGVkX29uX2R1cmF0aW9uOworCWludCBsZWRfb2ZmX2R1cmF0aW9uOworCWludCBsZWRfb25fY250OworCWludCBsZWRfb2ZmX2NudDsKIAotZW51bSBhdGg5a190cF9zY2FsZSB7Ci0JQVRIOUtfVFBfU0NBTEVfTUFYID0gMCwKLQlBVEg5S19UUF9TQ0FMRV81MCwKLQlBVEg5S19UUF9TQ0FMRV8yNSwKLQlBVEg5S19UUF9TQ0FMRV8xMiwKLQlBVEg5S19UUF9TQ0FMRV9NSU4KLX07Ci0KLWVudW0gc2VyX3JlZ19tb2RlIHsKLQlTRVJfUkVHX01PREVfT0ZGID0gMCwKLQlTRVJfUkVHX01PREVfT04gPSAxLAotCVNFUl9SRUdfTU9ERV9BVVRPID0gMiwKLX07Ci0KLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRSAgICAgIAkJLTg1Ci0jZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0hJR0hfVkFMVUUgICAgICAJCS02MgotI2RlZmluZSBBUl9QSFlfQ0NBX01JTl9CQURfVkFMVUUgICAgICAgCQktMTIxCi0jZGVmaW5lIEFSX1BIWV9DQ0FfRklMVEVSV0lORE9XX0xFTkdUSF9JTklUICAgICAzCi0jZGVmaW5lIEFSX1BIWV9DQ0FfRklMVEVSV0lORE9XX0xFTkdUSCAgICAgICAgICA1Ci0KLSNkZWZpbmUgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYICAgICAgICAgICA1Ci0jZGVmaW5lIE5VTV9ORl9SRUFESU5HUyAgICAgICAgICAgICAgICAgNgotCi1zdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCB7Ci0JaW50MTZfdCBuZkNhbEJ1ZmZlcltBVEg5S19ORl9DQUxfSElTVF9NQVhdOwotCXU4IGN1cnJJbmRleDsKLQlpbnQxNl90IHByaXZORjsKLQl1OCBpbnZhbGlkTkZjb3VudDsKLX07Ci0KLXN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgewotCXUzMiBic19uZXh0dGJ0dDsKLQl1MzIgYnNfbmV4dGR0aW07Ci0JdTMyIGJzX2ludHZhbDsKLSNkZWZpbmUgQVRIOUtfQkVBQ09OX1BFUklPRCAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIEFUSDlLX0JFQUNPTl9FTkEgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBBVEg5S19CRUFDT05fUkVTRVRfVFNGICAgIDB4MDEwMDAwMDAKLQl1MzIgYnNfZHRpbXBlcmlvZDsKLQl1MTYgYnNfY2ZwcGVyaW9kOwotCXUxNiBic19jZnBtYXhkdXJhdGlvbjsKLQl1MzIgYnNfY2ZwbmV4dDsKLQl1MTYgYnNfdGltb2Zmc2V0OwotCXUxNiBic19ibWlzc3RocmVzaG9sZDsKLQl1MzIgYnNfc2xlZXBkdXJhdGlvbjsKLX07Ci0KLXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIHsKLQl1MzIgbnNfYXZnYnJzc2k7Ci0JdTMyIG5zX2F2Z3Jzc2k7Ci0JdTMyIG5zX2F2Z3R4cnNzaTsKLQl1MzIgbnNfYXZndHhyYXRlOwotfTsKLQotI2RlZmluZSBBVEg5S19SU1NJX0VQX01VTFRJUExJRVIgICgxPDw3KQotCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQgICAgICAgICAgICAgMAotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9BVFRFTlRJT05fTEVEIDEKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfUE9XRVJfTEVEICAgICAyCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfTkVUV09SS19MRUQgICAgNQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfTUFDX1BPV0VSX0xFRCAgICAgIDYKLQotZW51bSB7Ci0JQVRIOUtfUkVTRVRfUE9XRVJfT04sCi0JQVRIOUtfUkVTRVRfV0FSTSwKLQlBVEg5S19SRVNFVF9DT0xELAotfTsKLQotI2RlZmluZSBBSF9VU0VfRUVQUk9NICAgMHgxCi0KLXN0cnVjdCBhdGhfaGFsIHsKLQl1MzIgYWhfbWFnaWM7Ci0JdTE2IGFoX2RldmlkOwotCXUxNiBhaF9zdWJ2ZW5kb3JpZDsKLQl1MzIgYWhfbWFjVmVyc2lvbjsKLQl1MTYgYWhfbWFjUmV2OwotCXUxNiBhaF9waHlSZXY7Ci0JdTE2IGFoX2FuYWxvZzVHaHpSZXY7Ci0JdTE2IGFoX2FuYWxvZzJHaHpSZXY7Ci0KLQl2b2lkIF9faW9tZW0gKmFoX3NoOwotCXN0cnVjdCBhdGhfc29mdGMgKmFoX3NjOwotCi0JZW51bSBubDgwMjExX2lmdHlwZSBhaF9vcG1vZGU7Ci0Jc3RydWN0IGF0aDlrX29wc19jb25maWcgYWhfY29uZmlnOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgYWhfY2FwczsKLQotCXUxNiBhaF9jb3VudHJ5Q29kZTsKLQl1MzIgYWhfZmxhZ3M7Ci0JaW50MTZfdCBhaF9wb3dlckxpbWl0OwotCXUxNiBhaF9tYXhQb3dlckxldmVsOwotCXUzMiBhaF90cFNjYWxlOwotCXUxNiBhaF9jdXJyZW50UkQ7Ci0JdTE2IGFoX2N1cnJlbnRSREV4dDsKLQl1MTYgYWhfY3VycmVudFJESW5Vc2U7Ci0JdTE2IGFoX2N1cnJlbnRSRDVHOwotCXUxNiBhaF9jdXJyZW50UkQyRzsKLQljaGFyIGFoX2lzb1s0XTsKLQotCXN0cnVjdCBhdGg5a19jaGFubmVsIGFoX2NoYW5uZWxzWzE1MF07Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmFoX2N1cmNoYW47Ci0JdTMyIGFoX25jaGFuOwotCi0JYm9vbCBhaF9pc1BjaUV4cHJlc3M7Ci0JdTE2IGFoX3R4VHJpZ0xldmVsOwotCXUxNiBhaF9yZnNpbGVudDsKLQl1MzIgYWhfcmZraWxsX2dwaW87Ci0JdTMyIGFoX3Jma2lsbF9wb2xhcml0eTsKLQotI2lmbmRlZiBBVEhfTkZfUEVSX0NIQU4KLQlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCBuZkNhbEhpc3RbTlVNX05GX1JFQURJTkdTXTsKKwlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOworCXN0cnVjdCBhdGhfYW5pIGFuaTsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBub2Rlc3RhdHM7CisjaWZkZWYgQ09ORklHX0FUSDlLX0RFQlVHCisJc3RydWN0IGF0aDlrX2RlYnVnIGRlYnVnOwogI2VuZGlmCisJc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzOwogfTsKIAotc3RydWN0IGNoYW5fY2VudGVycyB7Ci0JdTE2IHN5bnRoX2NlbnRlcjsKLQl1MTYgY3RsX2NlbnRlcjsKLQl1MTYgZXh0X2NlbnRlcjsKK3N0cnVjdCBhdGhfd2lwaHkgeworCXN0cnVjdCBhdGhfc29mdGMgKnNjOyAvKiBzaGFyZWQgZm9yIGFsbCB2aXJ0dWFsIHdpcGh5cyAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWVudW0gYXRoX3dpcGh5X3N0YXRlIHsKKwkJQVRIX1dJUEhZX0lOQUNUSVZFLAorCQlBVEhfV0lQSFlfQUNUSVZFLAorCQlBVEhfV0lQSFlfUEFVU0lORywKKwkJQVRIX1dJUEhZX1BBVVNFRCwKKwkJQVRIX1dJUEhZX1NDQU4sCisJfSBzdGF0ZTsKKwlpbnQgY2hhbl9pZHg7CisJaW50IGNoYW5faXNfaHQ7CiB9OwogCi1zdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CitpbnQgYXRoX3Jlc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KTsKK2ludCBhdGhfZ2V0X2hhbF9xbnVtKHUxNiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9nZXRfbWFjODAyMTFfcW51bSh1MzIgcXVldWUsIHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfY2FicV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqKTsKIAotLyogSGVscGVycyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0aF9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJc2MtPmJ1c19vcHMtPnJlYWRfY2FjaGVzaXplKHNjLCBjc3opOworfQogCi1lbnVtIHdpcmVsZXNzX21vZGUgYXRoOWtfaHdfY2hhbjJ3bW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpOwotdTMyIGF0aDlrX2h3X3JldmVyc2VfYml0cyh1MzIgdmFsLCB1MzIgbik7Ci1ib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgdTE2IGZsYWdzLCB1MTYgKmxvdywKLQkJCSAgICAgdTE2ICpoaWdoKTsKLXUxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZXMsCi0JCQkgICB1MzIgZnJhbWVMZW4sIHUxNiByYXRlaXgsCi0JCQkgICBib29sIHNob3J0UHJlYW1ibGUpOwotdTMyIGF0aDlrX2h3X21oejJpZWVlKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZyZXEsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBzdHJ1Y3QgY2hhbl9jZW50ZXJzICpjZW50ZXJzKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfYnVzX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc2MtPmJ1c19vcHMtPmNsZWFudXAoc2MpOworfQogCi0vKiBBdHRhY2gsIERldGFjaCAqLworZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wczsKIAotY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpOwotdm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKLXN0cnVjdCBhdGhfaGFsICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQl2b2lkIF9faW9tZW0gKm1lbSwgaW50ICplcnJvcik7Ci12b2lkIGF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7CitpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7Cit2b2lkIGF0aF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2NvbnN0IGNoYXIgKmF0aF9tYWNfYmJfbmFtZSh1MzIgbWFjX2JiX3ZlcnNpb24pOworY29uc3QgY2hhciAqYXRoX3JmX25hbWUodTE2IHJmX3ZlcnNpb24pOwordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGF0aDlrX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4pOwordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KTsKK2ludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmhjaGFuKTsKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIAotCi0vKiBIVyBSZXNldCAqLwotCi1ib29sIGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCSAgICBlbnVtIGF0aDlrX2h0X21hY21vZGUgbWFjbW9kZSwKLQkJICAgIHU4IHR4Y2hhaW5tYXNrLCB1OCByeGNoYWlubWFzaywKLQkJICAgIGVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmcsCi0JCSAgICBib29sIGJDaGFubmVsQ2hhbmdlLCBpbnQgKnN0YXR1cyk7Ci0KLS8qIEtleSBDYWNoZSBNYW5hZ2VtZW50ICovCi0KLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpOwotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpOwotYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksCi0JCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19rZXl2YWwgKmssCi0JCQkJIGNvbnN0IHU4ICptYWMsIGludCB4b3JLZXkpOwotYm9vbCBhdGg5a19od19rZXlpc3ZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5KTsKLQotLyogUG93ZXIgTWFuYWdlbWVudCAqLwotCi1ib29sIGF0aDlrX2h3X3NldHBvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJICAgICAgIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKTsKLXZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IHJlc3RvcmUpOwotCi0vKiBCZWFjb24gdGltZXJzICovCi0KLXZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlICpicyk7Ci0vKiBIVyBDYXBhYmlsaXRpZXMgKi8KLQotYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAotCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCk7Ci1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAotCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpOwotCi0vKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KLQotdm9pZCBhdGg5a19od19jZmdfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKTsKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKTsKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAotCQkJIHUzMiBhaF9zaWduYWxfdHlwZSk7Ci12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpOwotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLXZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2hhbCAqYWgpOworI2lmZGVmIENPTkZJR19QQ0kKK2ludCBhdGhfcGNpX2luaXQodm9pZCk7Cit2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhdGhfcGNpX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcGNpX2V4aXQodm9pZCkge307CiAjZW5kaWYKLWludCBhdGg5a19od19zZWxlY3RfYW50Y29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGNmZyk7Ci11MzIgYXRoOWtfaHdfZ2V0ZGVmYW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGFudGVubmEpOwotYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBlbnVtIGF0aDlrX2FudF9zZXR0aW5nIHNldHRpbmdzLAotCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJICAgICAgIHU4ICp0eF9jaGFpbm1hc2ssCi0JCQkgICAgICAgdTggKnJ4X2NoYWlubWFzaywKLQkJCSAgICAgICB1OCAqYW50ZW5uYV9jZmdkKTsKIAotLyogR2VuZXJhbCBPcGVyYXRpb24gKi8KLQotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGJpdHMpOwotYm9vbCBhdGg5a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgbGltaXQpOwotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKTsKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYyk7Ci12b2lkIGF0aDlrX2h3X3NldG9wbW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBmaWx0ZXIwLCB1MzIgZmlsdGVyMSk7Ci12b2lkIGF0aDlrX2h3X2dldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4ICptYXNrKTsKLWJvb2wgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hc2spOwotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCk7Ci11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgc2V0dGluZyk7Ci1ib29sIGF0aDlrX2h3X3NldHNsb3R0aW1lKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKTsKLQotLyogUmVndWxhdG9yeSAqLwotCi1ib29sIGF0aDlrX3JlZ2RfaXNfcHVibGljX3NhZmV0eV9za3Uoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXN0cnVjdCBhdGg5a19jaGFubmVsKiBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjKTsKLXUzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci11MzIgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX3JlZ2RfaW5pdF9jaGFubmVscyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICB1MzIgbWF4Y2hhbnMsIHUzMiAqbmNoYW5zLCB1OCAqcmVnY2xhc3NpZHMsCi0JCQkgICAgICB1MzIgbWF4cmVnaWRzLCB1MzIgKm5yZWdpZHMsIHUxNiBjYywKLQkJCSAgICAgIGJvb2wgZW5hYmxlT3V0ZG9vciwgYm9vbCBlbmFibGVFeHRlbmRlZENoYW5uZWxzKTsKLQotLyogQU5JICovCi0KLXZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzLAotCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICB1MzIgKnJ4Y19wY250LAotCQkJCSAgdTMyICpyeGZfcGNudCwKLQkJCQkgIHUzMiAqdHhmX3BjbnQpOwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKLXZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotCi0vKiBDYWxpYnJhdGlvbiAqLwotCi12b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSk7Ci12b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotdm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1zMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAotCQkJYm9vbCAqaXNDYWxEb25lKTsKLWJvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotCi0KLS8qIEVFUFJPTSAqLwotCi1pbnQgYXRoOWtfaHdfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJIHUxNiBjZmdDdGwsCi0JCQkgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAotCQkJIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJIHU4IHBvd2VyTGltaXQpOwotdm9pZCBhdGg5a19od19zZXRfYWRkYWMoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3NldF9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgICBpbnQxNl90ICpyYXRlc0FycmF5LAotCQkJCSAgICAgICB1MTYgY2ZnQ3RsLAotCQkJCSAgICAgICB1OCBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCSAgICAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkgICAgICAgdTggcG93ZXJMaW1pdCk7Ci1ib29sIGF0aDlrX2h3X3NldF9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KTsKLWJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWludCBhdGg5a19od19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgIHU4IGluZGV4LCB1MTYgKmNvbmZpZyk7Ci11OCBhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKTsKLXUxNiBhdGg5a19od19lZXByb21fZ2V0X3NwdXJfY2hhbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBpLCBib29sIGlzMkdIeik7Ci1pbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotCi0vKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KLQotYm9vbCBhdGg5a19od19pbnRycGVuZChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotYm9vbCBhdGg5a19od19nZXRpc3Ioc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2ludCAqbWFza2VkKTsKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X2ludHJnZXQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cyk7Ci0KLS8qIE1BQyAoUENVL1FDVSkgKi8KLQotdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxLCB1MzIgdHhkcCk7Ci1ib29sIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci11MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCk7Ci1ib29sIGF0aDlrX2h3X3N0b3B0eGRtYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKLQkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKTsKLXZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKLWludCBhdGg5a19od190eHByb2NkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl90eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCi0JCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSAgc3RydWN0IGF0aF9kZXNjICpsYXN0ZHMsCi0JCQkJICB1MzIgZHVyVXBkYXRlRW4sIHUzMiBydHNjdHNSYXRlLAotCQkJCSAgdTMyIHJ0c2N0c0R1cmF0aW9uLAotCQkJCSAgc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbXSwKLQkJCQkgIHUzMiBuc2VyaWVzLCB1MzIgZmxhZ3MpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJdTMyIGFnZ3JMZW4pOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9taWRkbGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSB1MzIgbnVtRGVsaW1zKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotdm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pOwotdm9pZCBhdGg5a19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQkgICAgIHUzMiB2bWYpOwotdm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyICp0eHFzKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAotCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Ci1ib29sIGF0aDlrX2h3X2dldF90eHFfcHJvcHMoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcSwKLQkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOwotaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKLWJvb2wgYXRoOWtfaHdfcmVsZWFzZXR4cXVldWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWludCBhdGg5a19od19yeHByb2NkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpOwotYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOwotYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaGFsICphaCwgYm9vbCBzZXQpOwotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKTsKLXZvaWQgYXRoOWtfaHdfcnhlbmEoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3N0b3BwY3VyZWN2KHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KKyNpZmRlZiBDT05GSUdfQVRIRVJPU19BUjcxWFgKK2ludCBhdGhfYWhiX2luaXQodm9pZCk7Cit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhdGhfYWhiX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfYWhiX2V4aXQodm9pZCkge307CiAjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3BzX3dha2V1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNjLT5wc191c2Vjb3VudCkgPT0gMSkKKwkJaWYgKHNjLT5zY19haC0+cG93ZXJfbW9kZSAhPSAgQVRIOUtfUE1fQVdBS0UpIHsKKwkJCXNjLT5zY19haC0+cmVzdG9yZV9tb2RlID0gc2MtPnNjX2FoLT5wb3dlcl9tb2RlOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9BV0FLRSk7CisJCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3BzX3Jlc3RvcmUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNjLT5wc191c2Vjb3VudCkpCisJCWlmICgoc2MtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCisJCSAgICAhKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0JFQUNPTikpCisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsCisJCQkJCSAgc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUpOworfQorCisKK3ZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IGF0aDlrX3dpcGh5X2FkZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoOWtfd2lwaHlfZGVsKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOwordm9pZCBhdGg5a190eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGF0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOworaW50IGF0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CitpbnQgYXRoOWtfd2lwaHlfc2VsZWN0KHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOwordm9pZCBhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgbXNlY19pbnQpOwordm9pZCBhdGg5a193aXBoeV9jaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2Jvb2wgYXRoOWtfd2lwaHlfc3RhcnRlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCk7Citib29sIGF0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfd2lwaHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKgorICogUmVhZCBhbmQgd3JpdGUsIHRoZXkgYm90aCBzaGFyZSB0aGUgc2FtZSBsb2NrLiBXZSBkbyB0aGlzIHRvIHNlcmlhbGl6ZQorICogcmVhZHMgYW5kIHdyaXRlcyBvbiBBdGhlcm9zIDgwMi4xMW4gUENJIGRldmljZXMgb25seS4gVGhpcyBpcyByZXF1aXJlZAorICogYXMgdGhlIEZJRk8gb24gdGhlc2UgZGV2aWNlcyBjYW4gb25seSBhY2NlcHQgc2FuZWx5IDIgcmVxdWVzdHMuIEFmdGVyCisgKiB0aGF0IHRoZSBkZXZpY2UgZ29lcyBiYW5hbmFzLiBTZXJpYWxpemluZyB0aGUgcmVhZHMvd3JpdGVzIHByZXZlbnRzIHRoaXMKKyAqIGZyb20gaGFwcGVuaW5nLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWdfb2Zmc2V0LCB1MzIgdmFsKQoreworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWgtPmFoX3NjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwkJaW93cml0ZTMyKHZhbCwgYWgtPmFoX3NjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWgtPmFoX3NjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwl9IGVsc2UKKwkJaW93cml0ZTMyKHZhbCwgYWgtPmFoX3NjLT5tZW0gKyByZWdfb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoOWtfaW9yZWFkMzIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWdfb2Zmc2V0KQoreworCXUzMiB2YWw7CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCQl2YWwgPSBpb3JlYWQzMihhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQl2YWwgPSBpb3JlYWQzMihhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCXJldHVybiB2YWw7Cit9CisKKyNlbmRpZiAvKiBBVEg5S19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9iZWFjb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jCmluZGV4IDNhYjBiNDMuLjAzOWM3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jCkBAIC0xNCw3ICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKKworI2RlZmluZSBGVURHRSAyCiAKIC8qCiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBjZXJ0YWluIHRyYW5zbWl0IHF1ZXVlIHByb3BlcnRpZXMgZGVwZW5kaW5nIG9uCkBAIC0yMywxMSArMjUsMTEgQEAKICovCiBzdGF0aWMgaW50IGF0aF9iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKIAlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsICZxaSk7Ci0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIEFsd2F5cyBidXJzdCBvdXQgYmVhY29uIGFuZCBDQUIgdHJhZmZpYy4gKi8KIAkJcWkudHFpX2FpZnMgPSAxOwogCQlxaS50cWlfY3dtaW4gPSAwOwpAQCAtNDQsNDYgKzQ2LDMyIEBACiAJCQkidW5hYmxlIHRvIHVwZGF0ZSBoL3cgYmVhY29uIHF1ZXVlIHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJcmV0dXJuIDE7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGhfYnN0dWNrX3Byb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzdHVjayBiZWFjb247IHJlc2V0dGluZyAoYm1pc3MgY291bnQgJXUpXG4iLAotCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLX0KLQogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKICAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCiAgKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KICovCi1zdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICBzdHJ1Y3QgYXRoX3ZhcCAqYXZwLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOwogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0JaW50IGZsYWdzLCBhbnRlbm5hOwotCXU4IHJpeCwgcmF0ZTsKLQlpbnQgY3RzcmF0ZSA9IDA7Ci0JaW50IGN0c2R1cmF0aW9uID0gMDsKKwlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJdTggcmF0ZTsKIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibSAlcCBsZW4gJXVcbiIsIHNrYiwgc2tiLT5sZW4pOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvcnMgKi8KIAlkcyA9IGJmLT5iZl9kZXNjOwotCiAJZmxhZ3MgPSBBVEg5S19UWERFU0NfTk9BQ0s7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKKwlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJZHMtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7IC8qIHNlbGYtbGlua2VkICovCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19WRU9MOwogCQkvKiBMZXQgaGFyZHdhcmUgaGFuZGxlIGFudGVubmEgc3dpdGNoaW5nLiAqLwpAQCAtOTIsNjUgKzgwLDUzIEBACiAJCWRzLT5kc19saW5rID0gMDsKIAkJLyoKIAkJICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCQkgKiBTaG91bGQgb25seSBzd2l0Y2ggZXZlcnkgYmVhY29uIHBlcmlvZCwgbm90IGZvciBldmVyeQotCQkgKiBTV0JBJ3MKLQkJICogWFhYIGFzc3VtZXMgdHdvIGFudGVubmEKKwkJICogU2hvdWxkIG9ubHkgc3dpdGNoIGV2ZXJ5IGJlYWNvbiBwZXJpb2QsIG5vdCBmb3IgZXZlcnkgU1dCQQorCQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKIAkJICovCi0JCWFudGVubmEgPSAoKHNjLT5iZWFjb24uYXN0X2JlX3htaXQgLyBzYy0+c2NfbmJjbnZhcHMpICYgMSA/IDIgOiAxKTsKKwkJYW50ZW5uYSA9ICgoc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCAvIHNjLT5uYmNudmlmcykgJiAxID8gMiA6IDEpOwogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCi0JLyoKLQkgKiBDYWxjdWxhdGUgcmF0ZSBjb2RlLgotCSAqIFhYWCBldmVyeXRoaW5nIGF0IG1pbiB4bWl0IHJhdGUKLQkgKi8KLQlyaXggPSAwOwogCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCXJhdGUgPSBydC0+aW5mb1swXS5yYXRlY29kZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJcmF0ZSB8PSBydC0+aW5mb1swXS5zaG9ydF9wcmVhbWJsZTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLAotCQkJICAgICAgIHNrYi0+bGVuICsgRkNTX0xFTiwgICAgIC8qIGZyYW1lIGxlbmd0aCAqLwotCQkJICAgICAgIEFUSDlLX1BLVF9UWVBFX0JFQUNPTiwgIC8qIEF0aGVyb3MgcGFja2V0IHR5cGUgKi8KLQkJCSAgICAgICBNQVhfUkFURV9QT1dFUiwgICAgICAgICAvKiBGSVhNRSAqLwotCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwgIC8qIG5vIGVuY3J5cHRpb24gKi8KLQkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwgICAvKiBubyBlbmNyeXB0aW9uICovCi0JCQkgICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgLyogbm8gYWNrLAotCQkJCQkJCSAgdmVvbCBmb3IgYmVhY29ucyAqLwotCQkpOworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAorCQkJICAgICAgIE1BWF9SQVRFX1BPV0VSLAorCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwkJCSAgICAgICBmbGFncyk7CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgcm91bmR1cChza2ItPmxlbiwgNCksIC8qIGJ1ZmZlciBsZW5ndGggKi8KLQkJCSAgICB0cnVlLCAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsICAgICAgICAgICAgICAgICAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICBkcyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCQkpOworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLCByb3VuZHVwKHNrYi0+bGVuLCA0KSwKKwkJCSAgICB0cnVlLCB0cnVlLCBkcyk7CiAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKLQlzZXJpZXNbMF0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOworCXNlcmllc1swXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CiAJc2VyaWVzWzBdLlJhdGVGbGFncyA9IChjdHNyYXRlKSA/IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDA7Ci0JYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhhaCwgZHMsIGRzLCAwLAotCQljdHNyYXRlLCBjdHNkdXJhdGlvbiwgc2VyaWVzLCA0LCAwKTsKKwlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgZHMsIDAsIGN0c3JhdGUsIGN0c2R1cmF0aW9uLAorCQkJCSAgICAgc2VyaWVzLCA0LCAwKTsKIH0KIAotLyogR2VuZXJhdGUgYmVhY29uIGZyYW1lIGFuZCBxdWV1ZSBjYWIgZGF0YSBmb3IgYSB2YXAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHN0cnVjdCBhdGhfYnVmICphdGhfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlpbnQgY2FicV9kZXB0aDsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKKwlpZiAoYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJY2FicSA9IHNjLT5iZWFjb24uY2FicTsKQEAgLTE2MSwxNiArMTM3LDE5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIFJlbGVhc2UgdGhlIG9sZCBiZWFjb24gZmlyc3QgKi8KKwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKIAlpZiAoc2tiKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiAKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChzYy0+aHcsIHZpZik7CisJLyogR2V0IGEgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExICovCisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAliZi0+YmZfbXBkdSA9IHNrYjsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMTg4LDU0ICsxNjcsNDIgQEAKIAl9CiAKIAliZi0+YmZfYnVmX2FkZHIgPSBiZi0+YmZfZG1hY29udGV4dCA9Ci0JCXBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCBza2ItPmRhdGEsCi0JCQkgICAgICAgc2tiLT5sZW4sCi0JCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihzYy0+cGRldiwgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKKwkJZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAorCQkJICAgICAgIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJYmYtPmJmX21wZHUgPSBOVUxMOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKLQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBiZWFjb25pbmdcbiIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uaW5nXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhodywgdmlmKTsKIAogCS8qCiAJICogaWYgdGhlIENBQlEgdHJhZmZpYyBmcm9tIHByZXZpb3VzIERUSU0gaXMgcGVuZGluZyBhbmQgdGhlIGN1cnJlbnQKIAkgKiAgYmVhY29uIGlzIGFsc28gYSBEVElNLgotCSAqICAxKSBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YXAgbGV0IHRoZSBjYWIgdHJhZmZpYyBjb250aW51ZS4KLQkgKiAgMikgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdmFwIGFuZCB3ZSBhcmUgdXNpbmcgc3RhZ2dlcmVkCisJICogIDEpIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZpZiBsZXQgdGhlIGNhYiB0cmFmZmljIGNvbnRpbnVlLgorCSAqICAyKSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSB2aWYgYW5kIHdlIGFyZSB1c2luZyBzdGFnZ2VyZWQKIAkgKiAgICAgYmVhY29ucywgdGhlbiBkcmFpbiB0aGUgY2FicSBieSBkcm9wcGluZyBhbGwgdGhlIGZyYW1lcyBpbgotCSAqICAgICB0aGUgY2FicSBzbyB0aGF0IHRoZSBjdXJyZW50IHZhcHMgY2FiIHRyYWZmaWMgY2FuIGJlIHNjaGVkdWxlZC4KKwkgKiAgICAgdGhlIGNhYnEgc28gdGhhdCB0aGUgY3VycmVudCB2aWZzIGNhYiB0cmFmZmljIGNhbiBiZSBzY2hlZHVsZWQuCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZjYWJxLT5heHFfbG9jayk7CiAJY2FicV9kZXB0aCA9IGNhYnEtPmF4cV9kZXB0aDsKIAlzcGluX3VubG9ja19iaCgmY2FicS0+YXhxX2xvY2spOwogCiAJaWYgKHNrYiAmJiBjYWJxX2RlcHRoKSB7Ci0JCS8qCi0JCSAqIFVubG9jayB0aGUgY2FicSBsb2NrIGFzIGF0aF90eF9kcmFpbnR4cSBhY3F1aXJlcwotCQkgKiB0aGUgbG9jayBhZ2FpbiB3aGljaCBpcyBhIGNvbW1vbiBmdW5jdGlvbiBhbmQgdGhhdAotCQkgKiBhY3F1aXJlcyB0eHEgbG9jayBpbnNpZGUuCi0JCSAqLwotCQlpZiAoc2MtPnNjX252YXBzID4gMSkgewotCQkJYXRoX3R4X2RyYWludHhxKHNjLCBjYWJxLCBmYWxzZSk7CisJCWlmIChzYy0+bnZpZnMgPiAxKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkiZmx1c2ggcHJldmlvdXMgY2FicSB0cmFmZmljXG4iKTsKKwkJCQkiRmx1c2hpbmcgcHJldmlvdXMgY2FicSB0cmFmZmljXG4iKTsKKwkJCWF0aF9kcmFpbnR4cShzYywgY2FicSwgZmFsc2UpOwogCQl9CiAJfQogCi0JLyogQ29uc3RydWN0IHR4IGRlc2NyaXB0b3IuICovCiAJYXRoX2JlYWNvbl9zZXR1cChzYywgYXZwLCBiZik7CiAKLQkvKgotCSAqIEVuYWJsZSB0aGUgQ0FCIHF1ZXVlIGJlZm9yZSB0aGUgYmVhY29uIHF1ZXVlIHRvCi0JICogaW5zdXJlIGNhYiBmcmFtZXMgYXJlIHRyaWdnZXJlZCBieSB0aGlzIGJlYWNvbi4KLQkgKi8KIAl3aGlsZSAoc2tiKSB7Ci0JCWF0aF90eF9jYWJxKHNjLCBza2IpOwotCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKHNjLT5odywgdmlmKTsKKwkJYXRoX3R4X2NhYnEoaHcsIHNrYik7CisJCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoaHcsIHZpZik7CiAJfQogCiAJcmV0dXJuIGJmOwpAQCAtMjQ1LDI4ICsyMTIsMjIgQEAKICAqIFN0YXJ0dXAgYmVhY29uIHRyYW5zbWlzc2lvbiBmb3IgYWRob2MgbW9kZSB3aGVuIHRoZXkgYXJlIHNlbnQgZW50aXJlbHkKICAqIGJ5IHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgc2VsZi1saW5rZWQgZGVzY3JpcHRvciArIHZlb2wgdHJpY2suCiAqLwotc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKLQogCWF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKIAotCWlmIChhdnAtPmF2X2JjYnVmID09IE5VTEwpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJhdnA9JXAgYXZfYmNidWY9JXBcbiIsCi0JCQlhdnAsIGF2cCAhPSBOVUxMID8gYXZwLT5hdl9iY2J1ZiA6IE5VTEwpOworCWlmIChhdnAtPmF2X2JjYnVmID09IE5VTEwpCiAJCXJldHVybjsKLQl9CisKIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJc2tiID0gKHN0cnVjdCBza19idWZmICopIGJmLT5iZl9tcGR1OwogCi0JLyogQ29uc3RydWN0IHR4IGRlc2NyaXB0b3IuICovCiAJYXRoX2JlYWNvbl9zZXR1cChzYywgYXZwLCBiZik7CiAKIAkvKiBOQjogY2FsbGVyIGlzIGtub3duIHRvIGhhdmUgYWxyZWFkeSBzdG9wcGVkIHR4IGRtYSAqLwpAQCAtMjc2LDcgKzIzNyw3IEBACiAJCXNjLT5iZWFjb24uYmVhY29ucSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOwogfQogCi1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKQoraW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHFpOwogCkBAIC0yODgsMTggKzI0OSwxNSBAQAogCXJldHVybiBhdGg5a19od19zZXR1cHR4cXVldWUoYWgsIEFUSDlLX1RYX1FVRVVFX0JFQUNPTiwgJnFpKTsKIH0KIAotaW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK2ludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fbGU2NCB0c3RhbXA7CiAKLQl2aWYgPSBzYy0+c2NfdmFwc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAkvKiBBbGxvY2F0ZSBhIGJlYWNvbiBkZXNjcmlwdG9yIGlmIHdlIGhhdmVuJ3QgZG9uZSBzby4gKi8KQEAgLTMxMCw1MSArMjY4LDQ2IEBACiAJCQkJCQkgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCQlsaXN0X2RlbCgmYXZwLT5hdl9iY2J1Zi0+bGlzdCk7CiAKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JCSAgICAhKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkgewogCQkJaW50IHNsb3Q7CiAJCQkvKgotCQkJICogQXNzaWduIHRoZSB2YXAgdG8gYSBiZWFjb24geG1pdCBzbG90LiBBcworCQkJICogQXNzaWduIHRoZSB2aWYgdG8gYSBiZWFjb24geG1pdCBzbG90LiBBcwogCQkJICogYWJvdmUsIHRoaXMgY2Fubm90IGZhaWwgdG8gZmluZCBvbmUuCiAJCQkgKi8KIAkJCWF2cC0+YXZfYnNsb3QgPSAwOwogCQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IEFUSF9CQ0JVRjsgc2xvdCsrKQotCQkJCWlmIChzYy0+YmVhY29uLmJzbG90W3Nsb3RdID09IEFUSF9JRl9JRF9BTlkpIHsKKwkJCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSA9PSBOVUxMKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFhYWCBoYWNrLCBzcGFjZSBvdXQgc2xvdHMgdG8gYmV0dGVyCiAJCQkJCSAqIGRlYWwgd2l0aCBtaXNzZXMKIAkJCQkJICovCiAJCQkJCWlmIChzbG90KzEgPCBBVEhfQkNCVUYgJiYKLQkJCQkJICAgIHNjLT5iZWFjb24uYnNsb3Rbc2xvdCsxXSA9PQotCQkJCQkJQVRIX0lGX0lEX0FOWSkgeworCQkJCQkgICAgc2MtPmJlYWNvbi5ic2xvdFtzbG90KzFdID09IE5VTEwpIHsKIAkJCQkJCWF2cC0+YXZfYnNsb3QgPSBzbG90KzE7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQlhdnAtPmF2X2JzbG90ID0gc2xvdDsKIAkJCQkJLyogTkI6IGtlZXAgbG9va2luZyBmb3IgYSBkb3VibGUgc2xvdCAqLwogCQkJCX0KLQkJCUJVR19PTihzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdICE9IEFUSF9JRl9JRF9BTlkpOwotCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IGlmX2lkOwotCQkJc2MtPnNjX25iY252YXBzKys7CisJCQlCVUdfT04oc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSAhPSBOVUxMKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gPSB2aWY7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBhcGh5OworCQkJc2MtPm5iY252aWZzKys7CiAJCX0KIAl9CiAKLQkvKiByZWxlYXNlIHRoZSBwcmV2aW91cyBiZWFjb24gZnJhbWUgLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KKwkvKiByZWxlYXNlIHRoZSBwcmV2aW91cyBiZWFjb24gZnJhbWUsIGlmIGl0IGFscmVhZHkgZXhpc3RzLiAqLwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlpZiAoYmYtPmJmX21wZHUgIT0gTlVMTCkgewogCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQkJcGNpX3VubWFwX3NpbmdsZShzYy0+cGRldiwgYmYtPmJmX2RtYWNvbnRleHQsCi0JCQkJIHNrYi0+bGVuLAotCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKKwkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJfQogCi0JLyoKLQkgKiBOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLgotCSAqIEZJWE1FOiBGaWxsIGF2cC0+YXZfYnR4Y3RsLnR4cG93ZXIgYW5kCi0JICogYXZwLT5hdl9idHhjdGwuc2hvcnRQcmVhbWJsZQotCSAqLworCS8qIE5COiB0aGUgYmVhY29uIGRhdGEgYnVmZmVyIG11c3QgYmUgMzItYml0IGFsaWduZWQuICovCiAJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoc2MtPmh3LCB2aWYpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgImNhbm5vdCBnZXQgc2tiXG4iKTsKQEAgLTM4NCw4ICszMzcsOCBAQAogCQkgKiB0aW1lc3RhbXAgdGhlbiBjb252ZXJ0IHRvIFRTRiB1bml0cyBhbmQgaGFuZGxlCiAJCSAqIGJ5dGUgc3dhcHBpbmcgYmVmb3JlIHdyaXRpbmcgaXQgaW4gdGhlIGZyYW1lLgogCQkgKiBUaGUgaGFyZHdhcmUgd2lsbCB0aGVuIGFkZCB0aGlzIGVhY2ggdGltZSBhIGJlYWNvbgotCQkgKiBmcmFtZSBpcyBzZW50LiAgTm90ZSB0aGF0IHdlIGFsaWduIHZhcCdzIDEuLk4KLQkJICogYW5kIGxlYXZlIHZhcCAwIHVudG91Y2hlZC4gIFRoaXMgbWVhbnMgdmFwIDAKKwkJICogZnJhbWUgaXMgc2VudC4gIE5vdGUgdGhhdCB3ZSBhbGlnbiB2aWYncyAxLi5OCisJCSAqIGFuZCBsZWF2ZSB2aWYgMCB1bnRvdWNoZWQuICBUaGlzIG1lYW5zIHZhcCAwCiAJCSAqIGhhcyBhIHRpbWVzdGFtcCBpbiBvbmUgYmVhY29uIGludGVydmFsIHdoaWxlIHRoZQogCQkgKiBvdGhlcnMgZ2V0IGEgdGltZXN0YW1wIGFsaWduZWQgdG8gdGhlIG5leHQgaW50ZXJ2YWwuCiAJCSAqLwpAQCAtNDAyLDM2ICszNTUsMzUgQEAKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwogCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCSAgICAgICBza2ItPmxlbiwKLQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgeworCQlkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCBza2ItPmRhdGEsCisJCQkgICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIGJlYWNvbiBhbGxvY1xuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uIGFsbG9jXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRoX2JlYWNvbl9yZXR1cm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmFwICphdnApCit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKQogewogCWlmIChhdnAtPmF2X2JjYnVmICE9IE5VTEwpIHsKIAkJc3RydWN0IGF0aF9idWYgKmJmOwogCiAJCWlmIChhdnAtPmF2X2JzbG90ICE9IC0xKSB7Ci0JCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gQVRIX0lGX0lEX0FOWTsKLQkJCXNjLT5zY19uYmNudmFwcy0tOworCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBOVUxMOworCQkJc2MtPm5iY252aWZzLS07CiAJCX0KIAogCQliZiA9IGF2cC0+YXZfYmNidWY7CiAJCWlmIChiZi0+YmZfbXBkdSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKLQkJCQkJIHNrYi0+bGVuLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0LAorCQkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJfQpAQCAtNDQxLDkyICszOTMsNDUgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBOVUxMOwotCWludCBzbG90LCBpZl9pZDsKLQl1MzIgYmZhZGRyOwotCXUzMiByeF9jbGVhciA9IDAsIHJ4X2ZyYW1lID0gMCwgdHhfZnJhbWUgPSAwOwotCXUzMiBzaG93X2N5Y2xlcyA9IDA7Ci0JdTMyIGJjID0gMDsgLyogYmVhY29uIGNvdW50ICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCWludCBzbG90OworCXUzMiBiZmFkZHIsIGJjID0gMCwgdHNmdHU7CiAJdTY0IHRzZjsKLQl1MzIgdHNmdHU7CiAJdTE2IGludHZhbDsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQlzaG93X2N5Y2xlcyA9IGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KGFoLAotCQkJCQkgICAgJnJ4X2NsZWFyLCAmcnhfZnJhbWUsICZ0eF9mcmFtZSk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYmVhY29uIGhhcyBnb25lIG91dC4gIElmCiAJICogbm90IGRvbid0IHRyeSB0byBwb3N0IGFub3RoZXIsIHNraXAgdGhpcyBwZXJpb2QKIAkgKiBhbmQgd2FpdCBmb3IgdGhlIG5leHQuICBNaXNzZWQgYmVhY29ucyBpbmRpY2F0ZQogCSAqIGEgcHJvYmxlbSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIElmIHdlIG1pc3MgdG9vCiAJICogbWFueSBjb25zZWN1dGl2ZSBiZWFjb25zIHJlc2V0IHRoZSBkZXZpY2UuCi0JICoKLQkgKiBGSVhNRTogQ2xlYW4gdXAgdGhpcyBtZXNzICEhCiAJICovCiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKLQkJLyogWFhYOiBkb3RoIG5lZWRzIHRoZSBjaGFuY2hhbmdlIElFIGNvdW50ZG93biBkZWNyZW1lbnRlZC4KLQkJICogICAgICBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgbWFjODAyMTEgY2FsbCB0byBpbmRpY2F0ZQotCQkgKiAgICAgIGEgYmVhY29uIG1pc3Mgc28gYXBwcm9wcmlhdGUgYWN0aW9uIGNvdWxkIGJlIHRha2VuCi0JCSAqICAgICAgKGluIHRoYXQgbGF5ZXIpLgotCQkgKi8KKwogCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKLQkJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJCWlmIChzaG93X2N5Y2xlcykgewotCQkJCQkvKgotCQkJCQkgKiBEaXNwbGF5IGN5Y2xlIGNvdW50ZXIgc3RhdHMgZnJvbSBIVwotCQkJCQkgKiB0byBhaWRlIGluIGRlYnVnIG9mIHN0aWNraW5lc3MuCi0JCQkJCSAqLwotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJidXN5IHRpbWVzOiByeF9jbGVhcj0lZCwgIgotCQkJCQkJInJ4X2ZyYW1lPSVkLCB0eF9mcmFtZT0lZFxuIiwKLQkJCQkJCXJ4X2NsZWFyLCByeF9mcmFtZSwKLQkJCQkJCXR4X2ZyYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJ1bmFibGUgdG8gb2J0YWluICIKLQkJCQkJCSJidXN5IHRpbWVzXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJfQorCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQl9IGVsc2UgaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPj0gQlNUVUNLX1RIUkVTSCkgewotCQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX05PX1JFU0VUKSB7Ci0JCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPT0gQlNUVUNLX1RIUkVTSCkgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSAiCi0JCQkJCQkic3R1Y2tcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7Ci0JCQkJYXRoX2JzdHVja19wcm9jZXNzKHNjKTsKLQkJCX0KKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKIAkJfQorCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJfQorCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNTQyLDIxICs0NDcsMjIgQEAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CiAJdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKIAlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCWlmX2lkID0gc2MtPmJlYWNvbi5ic2xvdFsoc2xvdCArIDEpICUgQVRIX0JDQlVGXTsKKwl2aWYgPSBzYy0+YmVhY29uLmJzbG90WyhzbG90ICsgMSkgJSBBVEhfQkNCVUZdOworCWFwaHkgPSBzYy0+YmVhY29uLmJzbG90X2FwaHlbKHNsb3QgKyAxKSAlIEFUSF9CQ0JVRl07CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJInNsb3QgJWQgW3RzZiAlbGx1IHRzZnR1ICV1IGludHZhbCAldV0gaWZfaWQgJWRcbiIsCi0JCXNsb3QsICh1bnNpZ25lZCBsb25nIGxvbmcpdHNmLCB0c2Z0dSwKLQkJaW50dmFsLCBpZl9pZCk7CisJCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIHZpZiAlcFxuIiwKKwkJc2xvdCwgdHNmLCB0c2Z0dSwgaW50dmFsLCB2aWYpOwogCiAJYmZhZGRyID0gMDsKLQlpZiAoaWZfaWQgIT0gQVRIX0lGX0lEX0FOWSkgewotCQliZiA9IGF0aF9iZWFjb25fZ2VuZXJhdGUoc2MsIGlmX2lkKTsKKwlpZiAodmlmKSB7CisJCWJmID0gYXRoX2JlYWNvbl9nZW5lcmF0ZShhcGh5LT5odywgdmlmKTsKIAkJaWYgKGJmICE9IE5VTEwpIHsKIAkJCWJmYWRkciA9IGJmLT5iZl9kYWRkcjsKIAkJCWJjID0gMTsKIAkJfQogCX0KKwogCS8qCiAJICogSGFuZGxlIHNsb3QgdGltZSBjaGFuZ2Ugd2hlbiBhIG5vbi1FUlAgc3RhdGlvbiBqb2lucy9sZWF2ZXMKIAkgKiBhbiAxMWcgbmV0d29yay4gIFRoZSA4MDIuMTEgbGF5ZXIgbm90aWZpZXMgdXMgdmlhIGNhbGxiYWNrLApAQCAtNTczLDcgKzQ3OSw2IEBACiAJICogICAgIGludGVydmFsIGhhcyBwYXNzZWQuICBXaGVuIGJ1cnN0aW5nIHNsb3QgaXMgYWx3YXlzIGxlZnQKIAkgKiAgICAgc2V0IHRvIEFUSF9CQ0JVRiBzbyB0aGlzIGNoZWNrIGlzIGEgbm9vcC4KIAkgKi8KLQkvKiBYWFggbG9ja2luZyAqLwogCWlmIChzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPT0gVVBEQVRFKSB7CiAJCXNjLT5iZWFjb24udXBkYXRlc2xvdCA9IENPTU1JVDsgLyogY29tbWl0IG5leHQgYmVhY29uICovCiAJCXNjLT5iZWFjb24uc2xvdHVwZGF0ZSA9IHNsb3Q7CkBAIC01OTAsNTIgKzQ5NSwyMjQgQEAKIAkJaWYgKCFhdGg5a19od19zdG9wdHhkbWEoYWgsIHNjLT5iZWFjb24uYmVhY29ucSkpIHsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJImJlYWNvbiBxdWV1ZSAldSBkaWQgbm90IHN0b3A/XG4iLCBzYy0+YmVhY29uLmJlYWNvbnEpOwotCQkJLyogTkI6IHRoZSBIQUwgc3RpbGwgc3RvcHMgRE1BLCBzbyBwcm9jZWVkICovCiAJCX0KIAogCQkvKiBOQjogY2FicSB0cmFmZmljIHNob3VsZCBhbHJlYWR5IGJlIHF1ZXVlZCBhbmQgcHJpbWVkICovCiAJCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsIGJmYWRkcik7CiAJCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CiAKLQkJc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCArPSBiYzsgICAgIC8qIFhYWCBwZXItdmFwPyAqLworCQlzYy0+YmVhY29uLmFzdF9iZV94bWl0ICs9IGJjOyAgICAgLyogWFhYIHBlci12aWY/ICovCiAJfQogfQogCiAvKgotICogQ29uZmlndXJlIHRoZSBiZWFjb24gYW5kIHNsZWVwIHRpbWVycy4KLSAqCi0gKiBXaGVuIG9wZXJhdGluZyBhcyBhbiBBUCB0aGlzIHJlc2V0cyB0aGUgVFNGIGFuZCBzZXRzCi0gKiB1cCB0aGUgaGFyZHdhcmUgdG8gbm90aWZ5IHVzIHdoZW4gd2UgbmVlZCB0byBpc3N1ZSBiZWFjb25zLgotICoKLSAqIFdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSB0aGlzIHNldHMgdXAgdGhlIGJlYWNvbgotICogdGltZXJzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IHJlY2VpdmVkCi0gKiBiZWFjb24gYW5kIHRoZSBjdXJyZW50IFRTRiwgY29uZmlndXJlcyBQQ0YgYW5kIERUSU0KLSAqIGhhbmRsaW5nLCBwcm9ncmFtcyB0aGUgc2xlZXAgcmVnaXN0ZXJzIHNvIHRoZSBoYXJkd2FyZQotICogd2lsbCB3YWtldXAgaW4gdGltZSB0byByZWNlaXZlIGJlYWNvbnMsIGFuZCBjb25maWd1cmVzCi0gKiB0aGUgYmVhY29uIG1pc3MgaGFuZGxpbmcgc28gd2UnbGwgcmVjZWl2ZSBhIEJNSVNTCi0gKiBpbnRlcnJ1cHQgd2hlbiB3ZSBzdG9wIHNlZWluZyBiZWFjb25zIGZyb20gdGhlIEFQCi0gKiB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGguCisgKiBGb3IgbXVsdGktYnNzIGFwIHN1cHBvcnQgYmVhY29ucyBhcmUgZWl0aGVyIHN0YWdnZXJlZCBldmVubHkgb3ZlciBOIHNsb3RzIG9yCisgKiBidXJzdCB0b2dldGhlci4gIEZvciB0aGUgZm9ybWVyIGFycmFuZ2UgZm9yIHRoZSBTV0JBIHRvIGJlIGRlbGl2ZXJlZCBmb3IgZWFjaAorICogc2xvdC4gU2xvdHMgdGhhdCBhcmUgbm90IG9jY3VwaWVkIHdpbGwgZ2VuZXJhdGUgbm90aGluZy4KICAqLwotdm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9jb25maWdfYXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZiwKKwkJCQkgc3RydWN0IGF0aF92aWYgKmF2cCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOwotCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOwogCXUzMiBuZXh0dGJ0dCwgaW50dmFsOwogCi0JaWYgKGlmX2lkICE9IEFUSF9JRl9JRF9BTlkpIHsKLQkJdmlmID0gc2MtPnNjX3ZhcHNbaWZfaWRdOwotCQlBU1NFUlQodmlmKTsKLQkJYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwotCQlvcG1vZGUgPSBhdnAtPmF2X29wbW9kZTsKKwkvKiBDb25maWd1cmUgdGhlIHRpbWVycyBvbmx5IHdoZW4gdGhlIFRTRiBoYXMgdG8gYmUgcmVzZXQgKi8KKworCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkpCisJCXJldHVybjsKKworCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKwlpbnR2YWwgLz0gQVRIX0JDQlVGOyAgICAvKiBmb3Igc3RhZ2dlcmVkIGJlYWNvbnMgKi8KKwluZXh0dGJ0dCA9IGludHZhbDsKKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKKworCS8qCisJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kIFNXQkEgaW50ZXJydXB0cyB0bworCSAqIHByZXBhcmUgYmVhY29uIGZyYW1lcy4KKwkgKi8KKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKKwlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CisJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKKworCS8qIFNldCB0aGUgY29tcHV0ZWQgQVAgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19iZWFjb25pbml0KHNjLT5zY19haCwgbmV4dHRidHQsIGludHZhbCk7CisJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworCisJLyogQ2xlYXIgdGhlIHJlc2V0IFRTRiBmbGFnLCBzbyB0aGF0IHN1YnNlcXVlbnQgYmVhY29uIHVwZGF0aW9uCisJICAgd2lsbCBub3QgcmVzZXQgdGhlIEhXIFRTRi4gKi8KKworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfVFNGX1JFU0VUOworfQorCisvKgorICogVGhpcyBzZXRzIHVwIHRoZSBiZWFjb24gdGltZXJzIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0CisgKiByZWNlaXZlZCBiZWFjb24gYW5kIHRoZSBjdXJyZW50IFRTRiwgY29uZmlndXJlcyBQQ0YgYW5kIERUSU0KKyAqIGhhbmRsaW5nLCBwcm9ncmFtcyB0aGUgc2xlZXAgcmVnaXN0ZXJzIHNvIHRoZSBoYXJkd2FyZSB3aWxsIHdha2V1cCBpbgorICogdGltZSB0byByZWNlaXZlIGJlYWNvbnMsIGFuZCBjb25maWd1cmVzIHRoZSBiZWFjb24gbWlzcyBoYW5kbGluZyBzbworICogd2UnbGwgcmVjZWl2ZSBhIEJNSVNTIGludGVycnVwdCB3aGVuIHdlIHN0b3Agc2VlaW5nIGJlYWNvbnMgZnJvbSB0aGUgQVAKKyAqIHdlJ3ZlIGFzc29jaWF0ZWQgd2l0aC4KKyAqLworc3RhdGljIHZvaWQgYXRoX2JlYWNvbl9jb25maWdfc3RhKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAorCQkJCSAgc3RydWN0IGF0aF92aWYgKmF2cCkKK3sKKwlzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIGJzOworCWludCBkdGltcGVyaW9kLCBkdGltY291bnQsIHNsZWVwZHVyYXRpb247CisJaW50IGNmcHBlcmlvZCwgY2ZwY291bnQ7CisJdTMyIG5leHR0YnR0ID0gMCwgaW50dmFsLCB0c2Z0dTsKKwl1NjQgdHNmOworCisJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7CisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKworCS8qCisJICogU2V0dXAgZHRpbSBhbmQgY2ZwIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvCisJICogbGFzdCBiZWFjb24gd2UgcmVjZWl2ZWQgKHdoaWNoIG1heSBiZSBub25lKS4KKwkgKi8KKwlkdGltcGVyaW9kID0gY29uZi0+ZHRpbV9wZXJpb2Q7CisJaWYgKGR0aW1wZXJpb2QgPD0gMCkJCS8qIE5COiAwIGlmIG5vdCBrbm93biAqLworCQlkdGltcGVyaW9kID0gMTsKKwlkdGltY291bnQgPSBjb25mLT5kdGltX2NvdW50OworCWlmIChkdGltY291bnQgPj0gZHRpbXBlcmlvZCkJLyogTkI6IHNhbml0eSBjaGVjayAqLworCQlkdGltY291bnQgPSAwOworCWNmcHBlcmlvZCA9IDE7CQkJLyogTkI6IG5vIFBDRiBzdXBwb3J0IHlldCAqLworCWNmcGNvdW50ID0gMDsKKworCXNsZWVwZHVyYXRpb24gPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7CisJaWYgKHNsZWVwZHVyYXRpb24gPD0gMCkKKwkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKKworCS8qCisJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKKwkgKiBUU0YgYW5kIGNhbGN1bGF0ZSBkdGltK2NmcCBzdGF0ZSBmb3IgdGhlIHJlc3VsdC4KKwkgKi8KKwl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCXRzZnR1ID0gVFNGX1RPX1RVKHRzZj4+MzIsIHRzZikgKyBGVURHRTsKKwlkbyB7CisJCW5leHR0YnR0ICs9IGludHZhbDsKKwkJaWYgKC0tZHRpbWNvdW50IDwgMCkgeworCQkJZHRpbWNvdW50ID0gZHRpbXBlcmlvZCAtIDE7CisJCQlpZiAoLS1jZnBjb3VudCA8IDApCisJCQkJY2ZwY291bnQgPSBjZnBwZXJpb2QgLSAxOworCQl9CisJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CisKKwlicy5ic19pbnR2YWwgPSBpbnR2YWw7CisJYnMuYnNfbmV4dHRidHQgPSBuZXh0dGJ0dDsKKwlicy5ic19kdGltcGVyaW9kID0gZHRpbXBlcmlvZCppbnR2YWw7CisJYnMuYnNfbmV4dGR0aW0gPSBicy5ic19uZXh0dGJ0dCArIGR0aW1jb3VudCppbnR2YWw7CisJYnMuYnNfY2ZwcGVyaW9kID0gY2ZwcGVyaW9kKmJzLmJzX2R0aW1wZXJpb2Q7CisJYnMuYnNfY2ZwbmV4dCA9IGJzLmJzX25leHRkdGltICsgY2ZwY291bnQqYnMuYnNfZHRpbXBlcmlvZDsKKwlicy5ic19jZnBtYXhkdXJhdGlvbiA9IDA7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgdG8gbWlzcyogYmVmb3JlIHRha2luZworCSAqIGEgQk1JU1MgaW50ZXJydXB0LiBUaGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQgaW4gVFUgc28gd2Ugb25seQorCSAqIG5lZWQgY2FsY3VsYXRlIGJhc2VkCW9uIHRoZSBiZWFjb24gaW50ZXJ2YWwuICBOb3RlIHRoYXQgd2UgY2xhbXAgdGhlCisJICogcmVzdWx0IHRvIGF0IG1vc3QgMTUgYmVhY29ucy4KKwkgKi8KKwlpZiAoc2xlZXBkdXJhdGlvbiA+IGludHZhbCkgeworCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAqCisJCQlBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAvIDI7CiAJfSBlbHNlIHsKLQkJb3Btb2RlID0gc2MtPnNjX2FoLT5haF9vcG1vZGU7CisJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gRElWX1JPVU5EX1VQKGNvbmYtPmJtaXNzX3RpbWVvdXQsIGludHZhbCk7CisJCWlmIChicy5ic19ibWlzc3RocmVzaG9sZCA+IDE1KQorCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSAxNTsKKwkJZWxzZSBpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPD0gMCkKKwkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTsKIAl9CiAKLQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcpKTsKKwkvKgorCSAqIENhbGN1bGF0ZSBzbGVlcCBkdXJhdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgZ2l2ZW4gaW4gbXMuCisJICogV2UgZW5zdXJlIGEgbXVsdGlwbGUgb2YgdGhlIGJlYWNvbiBwZXJpb2QgaXMgdXNlZC4gQWxzbywgaWYgdGhlIHNsZWVwCisJICogZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcworCSAqIHRvIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiB0aGF0LgorCSAqCisJICogWFhYIGZpeGVkIGF0IDEwMG1zCisJICovCiAKKwlicy5ic19zbGVlcGR1cmF0aW9uID0gcm91bmR1cChJRUVFODAyMTFfTVNfVE9fVFUoMTAwKSwgc2xlZXBkdXJhdGlvbik7CisJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQorCQlicy5ic19zbGVlcGR1cmF0aW9uID0gYnMuYnNfZHRpbXBlcmlvZDsKKworCS8qIFRTRiBvdXQgb2YgcmFuZ2UgdGhyZXNob2xkIGZpeGVkIGF0IDEgc2Vjb25kICovCisJYnMuYnNfdHNmb29yX3RocmVzaG9sZCA9IEFUSDlLX1RTRk9PUl9USFJFU0hPTEQ7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwgInRzZjogJWxsdSB0c2Z0dTogJXVcbiIsIHRzZiwgdHNmdHUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkiYm1pc3M6ICV1IHNsZWVwOiAldSBjZnAtcGVyaW9kOiAldSBtYXhkdXI6ICV1IG5leHQ6ICV1XG4iLAorCQlicy5ic19ibWlzc3RocmVzaG9sZCwgYnMuYnNfc2xlZXBkdXJhdGlvbiwKKwkJYnMuYnNfY2ZwcGVyaW9kLCBicy5ic19jZnBtYXhkdXJhdGlvbiwgYnMuYnNfY2ZwbmV4dCk7CisKKwkvKiBTZXQgdGhlIGNvbXB1dGVkIFNUQSBiZWFjb24gdGltZXJzICovCisKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOworCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzYy0+c2NfYWgsICZicyk7CisJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgICBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJICAgIHN0cnVjdCBhdGhfdmlmICphdnAsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJdTY0IHRzZjsKKwl1MzIgdHNmdHUsIGludHZhbCwgbmV4dHRidHQ7CisKKwlpbnR2YWwgPSBjb25mLT5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOworCisJLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCisKKwluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOworCWlmIChuZXh0dGJ0dCA9PSAwKQorICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gaW50dmFsOworICAgICAgICBlbHNlIGlmIChpbnR2YWwpCisgICAgICAgICAgICAgICAgbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOworCisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSgodTMyKSh0c2Y+PjMyKSwgKHUzMil0c2YpICsgRlVER0U7CisJZG8geworCQluZXh0dGJ0dCArPSBpbnR2YWw7CisJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCisJCW5leHR0YnR0LCBpbnR2YWwsIGNvbmYtPmJlYWNvbl9pbnRlcnZhbCk7CisKKwkvKgorCSAqIEluIElCU1MgbW9kZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYnV0IG9ubHkgZW5hYmxlIFNXQkEgaW50ZXJydXB0cworCSAqIGlmIHdlIG5lZWQgdG8gbWFudWFsbHkgcHJlcGFyZSBiZWFjb24gZnJhbWVzLiAgT3RoZXJ3aXNlIHdlIHVzZSBhCisJICogc2VsZi1saW5rZWQgdHggZGVzY3JpcHRvciBhbmQgbGV0IHRoZSBoYXJkd2FyZSBkZWFsIHdpdGggdGhpbmdzLgorCSAqLworCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOworCWlmICghKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CisKKwlhdGhfYmVhY29ucV9jb25maWcoc2MpOworCisJLyogU2V0IHRoZSBjb21wdXRlZCBBREhPQyBiZWFjb24gdGltZXJzICovCisKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOworCWF0aDlrX2h3X2JlYWNvbmluaXQoc2MtPnNjX2FoLCBuZXh0dGJ0dCwgaW50dmFsKTsKKwlzYy0+YmVhY29uLmJtaXNzY250ID0gMDsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CisKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkKKwkJYXRoX2JlYWNvbl9zdGFydF9hZGhvYyhzYywgdmlmKTsKK30KKwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKKworCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcpKTsKIAljb25mLmJlYWNvbl9pbnRlcnZhbCA9IHNjLT5ody0+Y29uZi5iZWFjb25faW50ID8KIAkJc2MtPmh3LT5jb25mLmJlYWNvbl9pbnQgOiBBVEhfREVGQVVMVF9CSU5UVkFMOwogCWNvbmYubGlzdGVuX2ludGVydmFsID0gMTsKQEAgLTY0MywyMTIgKzcyMCwyNSBAQAogCWNvbmYuZHRpbV9jb3VudCA9IDE7CiAJY29uZi5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLmJlYWNvbl9pbnRlcnZhbDsKIAotCS8qIGV4dHJhY3QgdHN0YW1wIGZyb20gbGFzdCBiZWFjb24gYW5kIGNvbnZlcnQgdG8gVFUgKi8KLQluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOworCWlmICh2aWYpIHsKKwkJc3RydWN0IGF0aF92aWYgKmF2cCA9IChzdHJ1Y3QgYXRoX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQkvKiBYWFggY29uZGl0aW9uYWxpemUgbXVsdGktYnNzIHN1cHBvcnQ/ICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qCi0JCSAqIEZvciBtdWx0aS1ic3MgYXAgc3VwcG9ydCBiZWFjb25zIGFyZSBlaXRoZXIgc3RhZ2dlcmVkCi0JCSAqIGV2ZW5seSBvdmVyIE4gc2xvdHMgb3IgYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lcgotCQkgKiBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2ggc2xvdC4KLQkJICogU2xvdHMgdGhhdCBhcmUgbm90IG9jY3VwaWVkIHdpbGwgZ2VuZXJhdGUgbm90aGluZy4KLQkJICovCi0JCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCi0JCWludHZhbCA9IGNvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKLQkJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCi0JfSBlbHNlIHsKLQkJaW50dmFsID0gY29uZi5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOwotCX0KLQotCWlmIChuZXh0dGJ0dCA9PSAwKQkvKiBlLmcuIGZvciBhcCBtb2RlICovCi0JCW5leHR0YnR0ID0gaW50dmFsOwotCWVsc2UgaWYgKGludHZhbCkJLyogTkI6IGNhbiBiZSAwIGZvciBtb25pdG9yIG1vZGUgKi8KLQkJbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJuZXh0dGJ0dCAldSBpbnR2YWwgJXUgKCV1KVxuIiwKLQkJbmV4dHRidHQsIGludHZhbCwgY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JLyogQ2hlY2sgZm9yIE5MODAyMTFfSUZUWVBFX0FQIGFuZCBzY19ub3N0YWJlYWNvbnMgZm9yIFdEUyBjbGllbnQgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIGJzOwotCQl1NjQgdHNmOwotCQl1MzIgdHNmdHU7Ci0JCWludCBkdGltcGVyaW9kLCBkdGltY291bnQsIHNsZWVwZHVyYXRpb247Ci0JCWludCBjZnBwZXJpb2QsIGNmcGNvdW50OwotCi0JCS8qCi0JCSAqIFNldHVwIGR0aW0gYW5kIGNmcCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bwotCQkgKiBsYXN0IGJlYWNvbiB3ZSByZWNlaXZlZCAod2hpY2ggbWF5IGJlIG5vbmUpLgotCQkgKi8KLQkJZHRpbXBlcmlvZCA9IGNvbmYuZHRpbV9wZXJpb2Q7Ci0JCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KLQkJCWR0aW1wZXJpb2QgPSAxOwotCQlkdGltY291bnQgPSBjb25mLmR0aW1fY291bnQ7Ci0JCWlmIChkdGltY291bnQgPj0gZHRpbXBlcmlvZCkJLyogTkI6IHNhbml0eSBjaGVjayAqLwotCQkJZHRpbWNvdW50ID0gMDsKLQkJY2ZwcGVyaW9kID0gMTsJCQkvKiBOQjogbm8gUENGIHN1cHBvcnQgeWV0ICovCi0JCWNmcGNvdW50ID0gMDsKLQotCQlzbGVlcGR1cmF0aW9uID0gY29uZi5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7Ci0JCWlmIChzbGVlcGR1cmF0aW9uIDw9IDApCi0JCQlzbGVlcGR1cmF0aW9uID0gaW50dmFsOwotCi0jZGVmaW5lIEZVREdFIDIKLQkJLyoKLQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJICogVFNGIGFuZCBjYWxjdWxhdGUgZHRpbStjZnAgc3RhdGUgZm9yIHRoZSByZXN1bHQuCi0JCSAqLwotCQl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7Ci0JCXRzZnR1ID0gVFNGX1RPX1RVKHRzZj4+MzIsIHRzZikgKyBGVURHRTsKLQkJZG8gewotCQkJbmV4dHRidHQgKz0gaW50dmFsOwotCQkJaWYgKC0tZHRpbWNvdW50IDwgMCkgewotCQkJCWR0aW1jb3VudCA9IGR0aW1wZXJpb2QgLSAxOwotCQkJCWlmICgtLWNmcGNvdW50IDwgMCkKLQkJCQkJY2ZwY291bnQgPSBjZnBwZXJpb2QgLSAxOwotCQkJfQotCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLSN1bmRlZiBGVURHRQotCQltZW1zZXQoJmJzLCAwLCBzaXplb2YoYnMpKTsKLQkJYnMuYnNfaW50dmFsID0gaW50dmFsOwotCQlicy5ic19uZXh0dGJ0dCA9IG5leHR0YnR0OwotCQlicy5ic19kdGltcGVyaW9kID0gZHRpbXBlcmlvZCppbnR2YWw7Ci0JCWJzLmJzX25leHRkdGltID0gYnMuYnNfbmV4dHRidHQgKyBkdGltY291bnQqaW50dmFsOwotCQlicy5ic19jZnBwZXJpb2QgPSBjZnBwZXJpb2QqYnMuYnNfZHRpbXBlcmlvZDsKLQkJYnMuYnNfY2ZwbmV4dCA9IGJzLmJzX25leHRkdGltICsgY2ZwY291bnQqYnMuYnNfZHRpbXBlcmlvZDsKLQkJYnMuYnNfY2ZwbWF4ZHVyYXRpb24gPSAwOwotCi0JCS8qCi0JCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGJlYWNvbnMgdG8gbWlzcwotCQkgKiBiZWZvcmUgdGFraW5nIGEgQk1JU1MgaW50ZXJydXB0LiAgVGhlIGNvbmZpZ3VyYXRpb24KLQkJICogaXMgc3BlY2lmaWVkIGluIFRVIHNvIHdlIG9ubHkgbmVlZCBjYWxjdWxhdGUgYmFzZWQKLQkJICogb24gdGhlIGJlYWNvbiBpbnRlcnZhbC4gIE5vdGUgdGhhdCB3ZSBjbGFtcCB0aGUKLQkJICogcmVzdWx0IHRvIGF0IG1vc3QgMTUgYmVhY29ucy4KLQkJICovCi0JCWlmIChzbGVlcGR1cmF0aW9uID4gaW50dmFsKSB7Ci0JCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IGNvbmYubGlzdGVuX2ludGVydmFsICoKLQkJCQlBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAvIDI7Ci0JCX0gZWxzZSB7Ci0JCQlicy5ic19ibWlzc3RocmVzaG9sZCA9Ci0JCQkJRElWX1JPVU5EX1VQKGNvbmYuYm1pc3NfdGltZW91dCwgaW50dmFsKTsKLQkJCWlmIChicy5ic19ibWlzc3RocmVzaG9sZCA+IDE1KQotCQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTU7Ci0JCQllbHNlIGlmIChicy5ic19ibWlzc3RocmVzaG9sZCA8PSAwKQotCQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTsKKwkJc3dpdGNoKGF2cC0+YXZfb3Btb2RlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQlhdGhfYmVhY29uX2NvbmZpZ19hcChzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHNjLCAmY29uZiwgYXZwLCB2aWYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAorCQkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uICBUaGUgY29uZmlndXJhdGlvbiBpcwotCQkgKiBnaXZlbiBpbiBtcy4gIFdlIGluc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24KLQkJICogcGVyaW9kIGlzIHVzZWQuICBBbHNvLCBpZiB0aGUgc2xlZXAgZHVyYXRpb24gaXMKLQkJICogZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcwotCQkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KLQkJICoKLQkJICogWFhYIGZpeGVkIGF0IDEwMG1zCi0JCSAqLwotCi0JCWJzLmJzX3NsZWVwZHVyYXRpb24gPSByb3VuZHVwKElFRUU4MDIxMV9NU19UT19UVSgxMDApLAotCQkJCQkgICAgICBzbGVlcGR1cmF0aW9uKTsKLQkJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkidHNmICVsbHUgIgotCQkJInRzZjp0dSAldSAiCi0JCQkiaW50dmFsICV1ICIKLQkJCSJuZXh0dGJ0dCAldSAiCi0JCQkiZHRpbSAldSAiCi0JCQkibmV4dGR0aW0gJXUgIgotCQkJImJtaXNzICV1ICIKLQkJCSJzbGVlcCAldSAiCi0JCQkiY2ZwOnBlcmlvZCAldSAiCi0JCQkibWF4ZHVyICV1ICIKLQkJCSJuZXh0ICV1ICIKLQkJCSJ0aW1vZmZzZXQgJXVcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCQlicy5ic19pbnR2YWwsCi0JCQlicy5ic19uZXh0dGJ0dCwKLQkJCWJzLmJzX2R0aW1wZXJpb2QsCi0JCQlicy5ic19uZXh0ZHRpbSwKLQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkLAotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJCWJzLmJzX2NmcHBlcmlvZCwKLQkJCWJzLmJzX2NmcG1heGR1cmF0aW9uLAotCQkJYnMuYnNfY2ZwbmV4dCwKLQkJCWJzLmJzX3RpbW9mZnNldAotCQkJKTsKLQotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7Ci0JfSBlbHNlIHsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWlmIChuZXh0dGJ0dCA9PSBpbnR2YWwpCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkvKgotCQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJCSAqIFRTRgotCQkJICovCi0jZGVmaW5lIEZVREdFIDIKLQkJCWlmICghKGludHZhbCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpKSB7Ci0JCQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQkJCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLAotCQkJCQkodTMyKXRzZikgKyBGVURHRTsKLQkJCQlkbyB7Ci0JCQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLQkJCX0KLSN1bmRlZiBGVURHRQotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCQkJbmV4dHRidHQsCi0JCQkJaW50dmFsICYgfkFUSDlLX0JFQUNPTl9SRVNFVF9UU0YsCi0JCQkJY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JCQkvKgotCQkJICogSW4gSUJTUyBtb2RlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBidXQgb25seQotCQkJICogZW5hYmxlIFNXQkEgaW50ZXJydXB0cyBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0JCQkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKLQkJCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUKLQkJCSAqIGRlYWwgd2l0aCB0aGluZ3MuCi0JCQkgKi8KLQkJCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOwotCQkJaWYgKCEoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCQlhdGhfYmVhY29ucV9jb25maWcoc2MpOwotCQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQkvKgotCQkJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kCi0JCQkgKiBTV0JBIGludGVycnVwdHMgdG8gcHJlcGFyZSBiZWFjb24gZnJhbWVzLgotCQkJICovCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKLQkJCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsgICAvKiBiZWFjb24gcHJlcGFyZSAqLwotCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKLQkJfQotCQlhdGg5a19od19iZWFjb25pbml0KGFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOwotCQkvKgotCQkgKiBXaGVuIHVzaW5nIGEgc2VsZi1saW5rZWQgYmVhY29uIGRlc2NyaXB0b3IgaW4KLQkJICogaWJzcyBtb2RlIGxvYWQgaXQgb25jZSBoZXJlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JCSAgICAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIDApOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKIAl9CiB9Ci0KLXZvaWQgYXRoX2JlYWNvbl9zeW5jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCi17Ci0JLyoKLQkgKiBSZXN5bmMgYmVhY29uIHRpbWVycyB1c2luZyB0aGUgdHNmIG9mIHRoZQotCSAqIGJlYWNvbiBmcmFtZSB3ZSBqdXN0IHJlY2VpdmVkLgotCSAqLwotCWF0aF9iZWFjb25fY29uZmlnKHNjLCBpZl9pZCk7Ci0Jc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuYwppbmRleCAzYzc0NTRmLi5jOTQ0NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmMKQEAgLTE0LDEyICsxNCw3IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotc3RhdGljIGNvbnN0IGludDE2X3QgTk9JU0VfRkxPT1JbXSA9IHsgLTk2LCAtOTMsIC05OCwgLTk2LCAtOTMsIC05NiB9OworI2luY2x1ZGUgImF0aDlrLmgiCiAKIC8qIFdlIGNhbiB0dW5lIHRoaXMgYXMgd2UgZ28gYnkgbW9uaXRvcmluZyByZWFsbHkgbG93IHZhbHVlcyAqLwogI2RlZmluZSBBVEg5S19ORl9UT09fTE9XCS02MApAQCAtMjgsNyArMjMsNyBAQAogICogaXMgaW5jb3JyZWN0IGFuZCB3ZSBzaG91bGQgdXNlIHRoZSBzdGF0aWMgTkYgdmFsdWUuIExhdGVyIHdlIGNhbiB0cnkgdG8KICAqIGZpbmQgb3V0IHdoeSB0aGV5IGFyZSByZXBvcnRpbmcgdGhlc2UgdmFsdWVzICovCiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X25mX2luX3JhbmdlKHN0cnVjdCBhdGhfaGFsICphaCwgczE2IG5mKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfbmZfaW5fcmFuZ2Uoc3RydWN0IGF0aF9odyAqYWgsIHMxNiBuZikKIHsKIAlpZiAobmYgPiBBVEg5S19ORl9UT09fTE9XKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKQEAgLTkxLDcgKzg2LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2RvX2dldG5mKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2RvX2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgaW50MTZfdCBuZmFycmF5W05VTV9ORl9SRUFESU5HU10pCiB7CiAJaW50MTZfdCBuZjsKQEAgLTEwNywyNyArMTAyLDI5IEBACiAJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAwXSBpcyAlZFxuIiwgbmYpOwogCW5mYXJyYXlbMF0gPSBuZjsKIAotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0NDQSksCi0JCQlBUjkyODBfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKLQllbHNlCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKLQkJCUFSX1BIWV9DSDFfTUlOQ0NBX1BXUik7CisJaWYgKCFBUl9TUkVWXzkyODUoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAorCQkJCQlBUjkyODBfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKKwkJZWxzZQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOwogCi0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbMV0gPSBuZjsKLQotCWlmICghQVJfU1JFVl85MjgwKGFoKSkgewotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0NDQSksCi0JCQlBUl9QSFlfQ0gyX01JTkNDQV9QV1IpOwogCQlpZiAobmYgJiAweDEwMCkKIAkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7Ci0JCW5mYXJyYXlbMl0gPSBuZjsKKwkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKKwkJbmZhcnJheVsxXSA9IG5mOworCisJCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gyX01JTkNDQV9QV1IpOworCQkJaWYgKG5mICYgMHgxMDApCisJCQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAyXSBpcyAlZFxuIiwgbmYpOworCQkJbmZhcnJheVsyXSA9IG5mOworCQl9CiAJfQogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCkBAIC0xNDMsNTggKzE0MCw1MiBAQAogCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMF0gaXMgJWRcbiIsIG5mKTsKIAluZmFycmF5WzNdID0gbmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9FWFRfQ0NBKSwKLQkJCUFSOTI4MF9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKLQllbHNlCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCi0JCQlBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKKwlpZiAoIUFSX1NSRVZfOTI4NShhaCkpIHsKKwkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAorCQkJCQlBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CisJCWVsc2UKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCisJCQkJCUFSX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IpOwogCi0JaWYgKG5mICYgMHgxMDApCi0JCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOwotCW5mYXJyYXlbNF0gPSBuZjsKLQotCWlmICghQVJfU1JFVl85MjgwKGFoKSkgewotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0VYVF9DQ0EpLAotCQkJQVJfUEhZX0NIMl9FWFRfTUlOQ0NBX1BXUik7CiAJCWlmIChuZiAmIDB4MTAwKQogCQkJbmYgPSAwIC0gKChuZiBeIDB4MWZmKSArIDEpOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKLQkJbmZhcnJheVs1XSA9IG5mOworCQkJCSJORiBjYWxpYnJhdGVkIFtleHRdIFtjaGFpbiAxXSBpcyAlZFxuIiwgbmYpOworCQluZmFycmF5WzRdID0gbmY7CisKKwkJaWYgKCFBUl9TUkVWXzkyODAoYWgpKSB7CisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0VYVF9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gyX0VYVF9NSU5DQ0FfUFdSKTsKKwkJCWlmIChuZiAmIDB4MTAwKQorCQkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKKwkJCW5mYXJyYXlbNV0gPSBuZjsKKwkJfQogCX0KIH0KIAotc3RhdGljIGJvb2wgZ2V0Tm9pc2VGbG9vclRocmVzaChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCitzdGF0aWMgYm9vbCBnZXROb2lzZUZsb29yVGhyZXNoKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQlpbnQxNl90ICpuZnQpCiB7Ci0Jc3dpdGNoIChjaGFuLT5jaGFubW9kZSkgewotCWNhc2UgQ0hBTk5FTF9BOgotCWNhc2UgQ0hBTk5FTF9BX0hUMjA6Ci0JY2FzZSBDSEFOTkVMX0FfSFQ0MFBMVVM6Ci0JY2FzZSBDSEFOTkVMX0FfSFQ0ME1JTlVTOgotCQkqbmZ0ID0gKGludDhfdClhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTkZUSFJFU0hfNSk7CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQkqbmZ0ID0gKGludDhfdClhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzUpOwogCQlicmVhazsKLQljYXNlIENIQU5ORUxfQjoKLQljYXNlIENIQU5ORUxfRzoKLQljYXNlIENIQU5ORUxfR19IVDIwOgotCWNhc2UgQ0hBTk5FTF9HX0hUNDBQTFVTOgotCWNhc2UgQ0hBTk5FTF9HX0hUNDBNSU5VUzoKLQkJKm5mdCA9IChpbnQ4X3QpYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzIpOworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJKm5mdCA9IChpbnQ4X3QpYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF8yKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgZmxhZ3MgMHgleFxuIiwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKKwkJQlVHX09OKDEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldHVwX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldHVwX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgICBzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsKQogewogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCksCkBAIC0yMjgsMTAgKzIxOSw5IEBACiAJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0RPX0NBTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgICBzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7CkBAIC0yMzksMjMgKzIyOSwyMSBAQAogCWN1cnJDYWwtPmNhbFN0YXRlID0gQ0FMX1JVTk5JTkc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlhaHAtPmFoX01lYXMwLnNpZ25baV0gPSAwOwotCQlhaHAtPmFoX01lYXMxLnNpZ25baV0gPSAwOwotCQlhaHAtPmFoX01lYXMyLnNpZ25baV0gPSAwOwotCQlhaHAtPmFoX01lYXMzLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczAuc2lnbltpXSA9IDA7CisJCWFoLT5tZWFzMS5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMyLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczMuc2lnbltpXSA9IDA7CiAJfQogCi0JYWhwLT5haF9DYWxTYW1wbGVzID0gMDsKKwlhaC0+Y2FsX3NhbXBsZXMgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19wZXJfY2FsaWJyYXRpb24oc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgdTggcnhjaGFpbm1hc2ssCiAJCQkJICAgICBzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsLAogCQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAkqaXNDYWxEb25lID0gZmFsc2U7CiAKIAlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1JVTk5JTkcpIHsKQEAgLTI2Myw5ICsyNTEsOSBAQAogCQkgICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0RPX0NBTCkpIHsKIAogCQkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsQ29sbGVjdChhaCk7Ci0JCQlhaHAtPmFoX0NhbFNhbXBsZXMrKzsKKwkJCWFoLT5jYWxfc2FtcGxlcysrOwogCi0JCQlpZiAoYWhwLT5haF9DYWxTYW1wbGVzID49IGN1cnJDYWwtPmNhbERhdGEtPmNhbE51bVNhbXBsZXMpIHsKKwkJCWlmIChhaC0+Y2FsX3NhbXBsZXMgPj0gY3VyckNhbC0+Y2FsRGF0YS0+Y2FsTnVtU2FtcGxlcykgewogCQkJCWludCBpLCBudW1DaGFpbnMgPSAwOwogCQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CiAJCQkJCWlmIChyeGNoYWlubWFzayAmICgxIDw8IGkpKQpAQCAtMjg1LDExMyArMjczLDEwNSBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorLyogQXNzdW1lcyB5b3UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNoYW5uZWwgKi8KK3N0YXRpYyBib29sIGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIGVudW0gaGFsX2NhbF90eXBlcyBjYWxUeXBlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JYm9vbCByZXR2YWwgPSBmYWxzZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKIAotCXN3aXRjaCAoY2FsVHlwZSAmIGFocC0+YWhfc3VwcENhbHMpIHsKLQljYXNlIElRX01JU01BVENIX0NBTDoKLQkJaWYgKCFJU19DSEFOX0IoY2hhbikpCi0JCQlyZXR2YWwgPSB0cnVlOwotCQlicmVhazsKKwlzd2l0Y2ggKGNhbFR5cGUgJiBhaC0+c3VwcF9jYWxzKSB7CisJY2FzZSBJUV9NSVNNQVRDSF9DQUw6IC8qIEJvdGggMiBHSHogYW5kIDUgR0h6IHN1cHBvcnQgT0ZETSAqLworCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFEQ19HQUlOX0NBTDoKIAljYXNlIEFEQ19EQ19DQUw6Ci0JCWlmICghSVNfQ0hBTl9CKGNoYW4pCi0JCSAgICAmJiAhKElTX0NIQU5fMkdIWihjaGFuKSAmJiBJU19DSEFOX0hUMjAoY2hhbikpKQotCQkJcmV0dmFsID0gdHJ1ZTsKKwkJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiAmJgorCQkgIGNvbmZfaXNfaHQyMChjb25mKSkKKwkJCXJldHVybiB0cnVlOwogCQlicmVhazsKIAl9Ci0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbF9jb2xsZWN0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlhaHAtPmFoX3RvdGFsUG93ZXJNZWFzSVtpXSArPQorCQlhaC0+dG90YWxQb3dlck1lYXNJW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzAoaSkpOwotCQlhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXSArPQorCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsSXFDb3JyTWVhc1tpXSArPQorCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwgYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV0sCi0JCQlhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXSwKLQkJCWFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwgYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSwKKwkJCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0sCisJCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2dhaW5jYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbEFkY0lPZGRQaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV0gKz0KIAkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNJRXZlblBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0lFdmVuUGhhc2VbaV0gKz0KIAkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMShpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNRT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzIoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNRRXZlblBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIG9kZGk9MHglMDh4OyBldmVuaT0weCUwOHg7ICIKIAkJCSJvZGRxPTB4JTA4eDsgZXZlbnE9MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwKLQkJCWFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNRT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXSk7CisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksCisJCQlhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjUUV2ZW5QaGFzZVtpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18wKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzIoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMyhpKSk7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIiVkOiBDaG4gJWQgb2RkaT0weCUwOHg7IGV2ZW5pPTB4JTA4eDsgIgogCQkJIm9kZHE9MHglMDh4OyBldmVucT0weCUwOHg7XG4iLAotCQkJYWhwLT5haF9DYWxTYW1wbGVzLCBpLAotCQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0pOworCQkJYWgtPmNhbF9zYW1wbGVzLCBpLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbGlicmF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4IG51bUNoYWlucykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2lxY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCBudW1DaGFpbnMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgcG93ZXJNZWFzUSwgcG93ZXJNZWFzSSwgaXFDb3JyTWVhczsKIAl1MzIgcUNvZmZEZW5vbSwgaUNvZmZEZW5vbTsKIAlpbnQzMl90IHFDb2ZmLCBpQ29mZjsKIAlpbnQgaXFDb3JyTmVnLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bUNoYWluczsgaSsrKSB7Ci0JCXBvd2VyTWVhc0kgPSBhaHAtPmFoX3RvdGFsUG93ZXJNZWFzSVtpXTsKLQkJcG93ZXJNZWFzUSA9IGFocC0+YWhfdG90YWxQb3dlck1lYXNRW2ldOwotCQlpcUNvcnJNZWFzID0gYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV07CisJCXBvd2VyTWVhc0kgPSBhaC0+dG90YWxQb3dlck1lYXNJW2ldOworCQlwb3dlck1lYXNRID0gYWgtPnRvdGFsUG93ZXJNZWFzUVtpXTsKKwkJaXFDb3JyTWVhcyA9IGFoLT50b3RhbElxQ29yck1lYXNbaV07CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIlN0YXJ0aW5nIElRIENhbCBhbmQgQ29ycmVjdGlvbiBmb3IgQ2hhaW4gJWRcbiIsCkBAIC0zOTksNyArMzc5LDcgQEAKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkiT3JpZ25hbDogQ2huICVkaXFfY29ycl9tZWFzID0gMHglMDh4XG4iLAotCQkJaSwgYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV0pOworCQkJaSwgYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAKIAkJaXFDb3JyTmVnID0gMDsKIApAQCAtNDU3LDE3ICs0MzcsMTYgQEAKIAkJICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4IG51bUNoYWlucykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTggbnVtQ2hhaW5zKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIGlPZGRNZWFzT2Zmc2V0LCBpRXZlbk1lYXNPZmZzZXQsIHFPZGRNZWFzT2Zmc2V0LCBxRXZlbk1lYXNPZmZzZXQ7CiAJdTMyIHFHYWluTWlzbWF0Y2gsIGlHYWluTWlzbWF0Y2gsIHZhbCwgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlpT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV07Ci0JCWlFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNJRXZlblBoYXNlW2ldOwotCQlxT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNRT2RkUGhhc2VbaV07Ci0JCXFFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNRRXZlblBoYXNlW2ldOworCQlpT2RkTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0lPZGRQaGFzZVtpXTsKKwkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjSUV2ZW5QaGFzZVtpXTsKKwkJcU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNRT2RkUGhhc2VbaV07CisJCXFFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV07CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIlN0YXJ0aW5nIEFEQyBHYWluIENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOwpAQCAtNTE1LDIxICs0OTQsMjAgQEAKIAkJICBBUl9QSFlfTkVXX0FEQ19HQUlOX0NPUlJfRU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4IG51bUNoYWlucykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19kY2NhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHU4IG51bUNoYWlucykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBpT2RkTWVhc09mZnNldCwgaUV2ZW5NZWFzT2Zmc2V0LCB2YWwsIGk7CiAJaW50MzJfdCBxT2RkTWVhc09mZnNldCwgcUV2ZW5NZWFzT2Zmc2V0LCBxRGNNaXNtYXRjaCwgaURjTWlzbWF0Y2g7CiAJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YSA9Ci0JCWFocC0+YWhfY2FsX2xpc3RfY3Vyci0+Y2FsRGF0YTsKKwkJYWgtPmNhbF9saXN0X2N1cnItPmNhbERhdGE7CiAJdTMyIG51bVNhbXBsZXMgPQogCQkoMSA8PCAoY2FsRGF0YS0+Y2FsQ291bnRNYXggKyA1KSkgKiBjYWxEYXRhLT5jYWxOdW1TYW1wbGVzOwogCiAJZm9yIChpID0gMDsgaSA8IG51bUNoYWluczsgaSsrKSB7Ci0JCWlPZGRNZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldOwotCQlpRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldOwotCQlxT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXTsKLQkJcUV2ZW5NZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXTsKKwkJaU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXTsKKwkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldOworCQlxT2RkTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldOworCQlxRXZlbk1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV07CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIlN0YXJ0aW5nIEFEQyBEQyBPZmZzZXQgQ2FsIGZvciBDaGFpbiAlZFxuIiwgaSk7CkBAIC01NzMsNTMgKzU1MSw0MiBAQAogCQkgIEFSX1BIWV9ORVdfQURDX0RDX09GRlNFVF9DT1JSX0VOQUJMRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKQorLyogVGhpcyBpcyBkb25lIGZvciB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgY2hhbm5lbCAqLworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9Ci0JCWF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFocC0+YWhfY2FsX2xpc3RfY3VycjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWgtPmNhbF9saXN0X2N1cnI7CiAKLQkqaXNDYWxEb25lID0gdHJ1ZTsKKwlpZiAoIWFoLT5jdXJjaGFuKQorCQlyZXR1cm4gdHJ1ZTsKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSAmJiAhQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChjdXJyQ2FsID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChpY2hhbiA9PSBOVUxMKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm8gbWFwcGluZ1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgIT0gQ0FMX0RPTkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIkNhbGlicmF0aW9uIHN0YXRlIGluY29ycmVjdCwgJWRcbiIsCiAJCQljdXJyQ2FsLT5jYWxTdGF0ZSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAJfQogCi0KLQlpZiAoIWF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgY2hhbiwgY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkpCi0JCXJldHVybjsKKwlpZiAoIWF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkpCisJCXJldHVybiB0cnVlOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldS8weCV4XG4iLAotCQljdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlLCBjaGFuLT5jaGFubmVsLAotCQljaGFuLT5jaGFubmVsRmxhZ3MpOworCQkiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldVxuIiwKKwkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSwgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCi0JaWNoYW4tPkNhbFZhbGlkICY9IH5jdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlOworCWFoLT5jdXJjaGFuLT5DYWxWYWxpZCAmPSB+Y3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZTsKIAljdXJyQ2FsLT5jYWxTdGF0ZSA9IENBTF9XQUlUSU5HOwogCi0JKmlzQ2FsRG9uZSA9IGZhbHNlOworCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCiAJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRU5BQkxFX05GKTsKQEAgLTYyOCw3ICs1OTUsNyBAQAogCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9ORik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit2b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7CiAJaW50IGksIGo7CkBAIC02NDMsMTYgKzYxMCwxNCBAQAogCX07CiAJdTggY2hhaW5tYXNrOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJaWYgKEFSX1NSRVZfOTI4NShhaCkpCisJCWNoYWlubWFzayA9IDB4OTsKKwllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQljaGFpbm1hc2sgPSAweDFCOwogCWVsc2UKIAkJY2hhaW5tYXNrID0gMHgzRjsKIAotI2lmZGVmIEFUSF9ORl9QRVJfQ0hBTgotCWggPSBjaGFuLT5uZkNhbEhpc3Q7Ci0jZWxzZQogCWggPSBhaC0+bmZDYWxIaXN0OwotI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7CkBAIC02ODYsMTggKzY1MSwxMyBAQAogCX0KIH0KIAotaW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJaW50MTZfdCBuZiwgbmZUaHJlc2g7CiAJaW50MTZfdCBuZmFycmF5W05VTV9ORl9SRUFESU5HU10gPSB7IDAgfTsKIAlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCAqaDsKLQl1OCBjaGFpbm1hc2s7Ci0KLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkKLQkJY2hhaW5tYXNrID0gMHgxQjsKLQllbHNlCi0JCWNoYWlubWFzayA9IDB4M0Y7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjID0gY2hhbi0+Y2hhbjsKIAogCWNoYW4tPmNoYW5uZWxGbGFncyAmPSAofkNIQU5ORUxfQ1dfSU5UKTsKIAlpZiAoUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgJiBBUl9QSFlfQUdDX0NPTlRST0xfTkYpIHsKQEAgLTcwOSw3ICs2NjksNyBAQAogCX0gZWxzZSB7CiAJCWF0aDlrX2h3X2RvX2dldG5mKGFoLCBuZmFycmF5KTsKIAkJbmYgPSBuZmFycmF5WzBdOwotCQlpZiAoZ2V0Tm9pc2VGbG9vclRocmVzaChhaCwgY2hhbiwgJm5mVGhyZXNoKQorCQlpZiAoZ2V0Tm9pc2VGbG9vclRocmVzaChhaCwgYy0+YmFuZCwgJm5mVGhyZXNoKQogCQkgICAgJiYgbmYgPiBuZlRocmVzaCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJCSJub2lzZSBmbG9vciBmYWlsZWQgZGV0ZWN0ZWQ7ICIKQEAgLTcxOSwxMSArNjc5LDcgQEAKIAkJfQogCX0KIAotI2lmZGVmIEFUSF9ORl9QRVJfQ0hBTgotCWggPSBjaGFuLT5uZkNhbEhpc3Q7Ci0jZWxzZQogCWggPSBhaC0+bmZDYWxIaXN0OwotI2VuZGlmCiAKIAlhdGg5a19od191cGRhdGVfbmZjYWxfaGlzdF9idWZmZXIoaCwgbmZhcnJheSk7CiAJY2hhbi0+cmF3Tm9pc2VGbG9vciA9IGhbMF0ucHJpdk5GOwpAQCAtNzMxLDcgKzY4Nyw3IEBACiAJcmV0dXJuIGNoYW4tPnJhd05vaXNlRmxvb3I7CiB9CiAKLXZvaWQgYXRoOWtfaW5pdF9uZmNhbF9oaXN0X2J1ZmZlcihzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGksIGo7CiAKQEAgLTc0NSwyNiArNzAxLDE2IEBACiAJCQkJQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRTsKIAkJfQogCX0KLQlyZXR1cm47CiB9CiAKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuOwogCXMxNiBuZjsKIAotCWljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm4gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7Ci0JfQotCWlmIChpY2hhbi0+cmF3Tm9pc2VGbG9vciA9PSAwKSB7Ci0JCWVudW0gd2lyZWxlc3NfbW9kZSBtb2RlID0gYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwgY2hhbik7Ci0JCW5mID0gTk9JU0VfRkxPT1JbbW9kZV07Ci0JfSBlbHNlCi0JCW5mID0gaWNoYW4tPnJhd05vaXNlRmxvb3I7CisJaWYgKGNoYW4tPnJhd05vaXNlRmxvb3IgPT0gMCkKKwkJbmYgPSAtOTY7CisJZWxzZQorCQluZiA9IGNoYW4tPnJhd05vaXNlRmxvb3I7CiAKIAlpZiAoIWF0aDlrX2h3X25mX2luX3JhbmdlKGFoLCBuZikpCiAJCW5mID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CkBAIC03NzIsNTMgKzcxOCwzNCBAQAogCXJldHVybiBuZjsKIH0KIAotYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCi0JCQlib29sICppc0NhbERvbmUpCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfdGVtcF9jb21wZW5zYXRpb24oc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWhwLT5haF9jYWxfbGlzdF9jdXJyOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7CisJdTMyIHJkZGF0YSwgaTsKKwlpbnQgZGVsdGEsIGN1cnJQREFEQywgcmVndmFsOwogCi0JKmlzQ2FsRG9uZSA9IHRydWU7CisJcmRkYXRhID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNCk7CiAKLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwljdXJyUERBREMgPSBNUyhyZGRhdGEsIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVQpOwogCi0JaWYgKGN1cnJDYWwgJiYKLQkgICAgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9SVU5OSU5HIHx8Ci0JICAgICBjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykpIHsKLQkJYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKGFoLCBpY2hhbiwgcnhjaGFpbm1hc2ssIGN1cnJDYWwsCi0JCQkJCSBpc0NhbERvbmUpOwotCQlpZiAoKmlzQ2FsRG9uZSkgewotCQkJYWhwLT5haF9jYWxfbGlzdF9jdXJyID0gY3VyckNhbCA9IGN1cnJDYWwtPmNhbE5leHQ7CisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfREFDX0hQV1JfNUcpKQorCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNCkgLyA4OworCWVsc2UKKwkJZGVsdGEgPSAoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQyArIDUpIC8gMTA7CiAKLQkJCWlmIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykgewotCQkJCSppc0NhbERvbmUgPSBmYWxzZTsKLQkJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7Ci0JCQl9CisJaWYgKGRlbHRhICE9IGFoLT5QREFEQ2RlbHRhKSB7CisJCWFoLT5QREFEQ2RlbHRhID0gZGVsdGE7CisJCWZvciAoaSA9IDE7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspIHsKKwkJCXJlZ3ZhbCA9IGFoLT5vcmlnaW5hbEdhaW5baV0gLSBkZWx0YTsKKwkJCWlmIChyZWd2YWwgPCAwKQorCQkJCXJlZ3ZhbCA9IDA7CisKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCwKKwkJCQkJQVJfUEhZX1RYX0dBSU4sIHJlZ3ZhbCk7CiAJCX0KIAl9Ci0KLQlpZiAobG9uZ2NhbCkgewotCQlhdGg5a19od19nZXRuZihhaCwgaWNoYW4pOwotCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5haF9jdXJjaGFuKTsKLQkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOwotCi0JCWlmICgoaWNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQ1dfSU5UKSAhPSAwKSB7Ci0JCQljaGFuLT5jaGFubmVsRmxhZ3MgfD0gQ0hBTk5FTF9DV19JTlQ7Ci0JCQlpY2hhbi0+Y2hhbm5lbEZsYWdzICY9IH5DSEFOTkVMX0NXX0lOVDsKLQkJfQotCX0KLQotCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfOTI4NV9wYV9jYWwoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCiAJdTMyIHJlZ1ZhbDsKQEAgLTkxMyw1OSArODQwLDE3MSBAQAogCiB9CiAKLWJvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJdTggcnhjaGFpbm1hc2ssIGJvb2wgbG9uZ2NhbCwKKwkJCWJvb2wgKmlzQ2FsRG9uZSkKK3sKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjdXJyQ2FsID0gYWgtPmNhbF9saXN0X2N1cnI7CisKKwkqaXNDYWxEb25lID0gdHJ1ZTsKKworCWlmIChjdXJyQ2FsICYmCisJICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAorCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7CisJCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgY2hhbiwgcnhjaGFpbm1hc2ssIGN1cnJDYWwsCisJCQkJCSBpc0NhbERvbmUpOworCQlpZiAoKmlzQ2FsRG9uZSkgeworCQkJYWgtPmNhbF9saXN0X2N1cnIgPSBjdXJyQ2FsID0gY3VyckNhbC0+Y2FsTmV4dDsKKworCQkJaWYgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9XQUlUSU5HKSB7CisJCQkJKmlzQ2FsRG9uZSA9IGZhbHNlOworCQkJCWF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKGFoLCBjdXJyQ2FsKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChsb25nY2FsKSB7CisJCWlmIChBUl9TUkVWXzkyODUoYWgpICYmIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCisJCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CisKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKQorCQkJYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKGFoKTsKKwkJYXRoOWtfaHdfZ2V0bmYoYWgsIGNoYW4pOworCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5jdXJjaGFuKTsKKwkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOworCisJCWlmIChjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0NXX0lOVCkKKwkJCWNoYW4tPmNoYW5uZWxGbGFncyAmPSB+Q0hBTk5FTF9DV19JTlQ7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGFyOTI4NV9jbGMoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCWlmIChjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0hUMjApIHsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0ICIKKwkJCQkiY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluICIKKwkJCQkiMW1zOyBub2lzeSA/P1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9UVVJCTywgQVJfUEhZX0ZDX0RZTjIwNDBfRU4pOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9QQVJBTExFTF9DQUxfRU5BQkxFKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSk7CisJfQorCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFKTsKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKwlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwKKwkJCSAgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsICJvZmZzZXQgY2FsaWJyYXRpb24gIgorCQkJCSJmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyBub2lzeSA/P1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBhdGg5a19od19pbml0X2NhbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CisJCWlmICghYXI5Mjg1X2NsYyhhaCwgY2hhbikpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOwogCisJCS8qIEtpY2sgb2ZmIHRoZSBjYWwgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisJCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJCUFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOworCisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLCAwLAorCQkJCQlBSF9XQUlUX1RJTUVPVVQpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyAiCisJCQkJIm5vaXN5IGVudmlyb25tZW50P1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwl9CisKKwkvKiBDYWxpYnJhdGUgdGhlIEFHQyAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKLQkJICBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKwkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKKwkJCUFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsIDApKSB7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsCisJCQkJMCwgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkib2Zmc2V0IGNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAxbXM7ICIKIAkJCSJub2lzeSBlbnZpcm9ubWVudD9cbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwl9CisKKwkvKiBEbyBQQSBDYWxpYnJhdGlvbiAqLwogCWlmIChBUl9TUkVWXzkyODUoYWgpICYmIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCiAJCWF0aDlrX2h3XzkyODVfcGFfY2FsKGFoKTsKIAorCS8qIERvIE5GIENhbGlicmF0aW9uICovCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCi0JCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAotCQkgIEFSX1BIWV9BR0NfQ09OVFJPTF9ORik7CisJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8CisJCQlBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwogCi0JYWhwLT5haF9jYWxfbGlzdCA9IGFocC0+YWhfY2FsX2xpc3RfbGFzdCA9IGFocC0+YWhfY2FsX2xpc3RfY3VyciA9IE5VTEw7CisJYWgtPmNhbF9saXN0ID0gYWgtPmNhbF9saXN0X2xhc3QgPSBhaC0+Y2FsX2xpc3RfY3VyciA9IE5VTEw7CiAKIAlpZiAoQVJfU1JFVl85MTAwKGFoKSB8fCBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19HQUlOX0NBTCkpIHsKLQkJCUlOSVRfQ0FMKCZhaHAtPmFoX2FkY0dhaW5DYWxEYXRhKTsKLQkJCUlOU0VSVF9DQUwoYWhwLCAmYWhwLT5haF9hZGNHYWluQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIEFEQ19HQUlOX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKKwkJCUlOU0VSVF9DQUwoYWgsICZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIEdhaW4gQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CiAJCX0KLQkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgY2hhbiwgQURDX0RDX0NBTCkpIHsKLQkJCUlOSVRfQ0FMKCZhaHAtPmFoX2FkY0RjQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfYWRjRGNDYWxEYXRhKTsKKwkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgQURDX0RDX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+YWRjZGNfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2RjX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBEQyBDYWxpYnJhdGlvbi5cbiIpOwogCQl9Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIElRX01JU01BVENIX0NBTCkpIHsKLQkJCUlOSVRfQ0FMKCZhaHAtPmFoX2lxQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfaXFDYWxEYXRhKTsKKwkJaWYgKGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChhaCwgSVFfTUlTTUFUQ0hfQ0FMKSkgeworCQkJSU5JVF9DQUwoJmFoLT5pcV9jYWxkYXRhKTsKKwkJCUlOU0VSVF9DQUwoYWgsICZhaC0+aXFfY2FsZGF0YSk7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJImVuYWJsaW5nIElRIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOwogCQl9CiAKLQkJYWhwLT5haF9jYWxfbGlzdF9jdXJyID0gYWhwLT5haF9jYWxfbGlzdDsKKwkJYWgtPmNhbF9saXN0X2N1cnIgPSBhaC0+Y2FsX2xpc3Q7CiAKLQkJaWYgKGFocC0+YWhfY2FsX2xpc3RfY3VycikKLQkJCWF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKGFoLCBhaHAtPmFoX2NhbF9saXN0X2N1cnIpOworCQlpZiAoYWgtPmNhbF9saXN0X2N1cnIpCisJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgYWgtPmNhbF9saXN0X2N1cnIpOwogCX0KIAotCWljaGFuLT5DYWxWYWxpZCA9IDA7CisJY2hhbi0+Q2FsVmFsaWQgPSAwOwogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU4OWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIENBTElCX0gKKyNkZWZpbmUgQ0FMSUJfSAorCitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19pbml0X2RjX2NhbDsKKworI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKKworI2RlZmluZSBOVU1fTkZfUkVBRElOR1MgICAgICAgNgorI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggNQorCitzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgeworCXUzMiAqaWFfYXJyYXk7CisJdTMyIGlhX3Jvd3M7CisJdTMyIGlhX2NvbHVtbnM7Cit9OworCisjZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCisJCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCisJCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAorCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAorCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQorCisjZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAorCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKKwkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoX2FocCktPmNhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKKwkJCShfYWhwKS0+Y2FsX2xpc3QgPQkJCQlcCisJCQkJKF9haHApLT5jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCisJCQkoKF9haHApLT5jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCSgoX2FocCktPmNhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCisJCQkoX2FocCktPmNhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCisJCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmNhbF9saXN0OwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0gaGFsX2NhbF90eXBlcyB7CisJQURDX0RDX0lOSVRfQ0FMID0gMHgxLAorCUFEQ19HQUlOX0NBTCA9IDB4MiwKKwlBRENfRENfQ0FMID0gMHg0LAorCUlRX01JU01BVENIX0NBTCA9IDB4OAorfTsKKworZW51bSBoYWxfY2FsX3N0YXRlIHsKKwlDQUxfSU5BQ1RJVkUsCisJQ0FMX1dBSVRJTkcsCisJQ0FMX1JVTk5JTkcsCisJQ0FMX0RPTkUKK307CisKKyNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCisjZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAorI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKKyNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCisjZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAorCitzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKKwllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKKwl1MzIgY2FsTnVtU2FtcGxlczsKKwl1MzIgY2FsQ291bnRNYXg7CisJdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2h3ICopOworCXZvaWQgKCpjYWxQb3N0UHJvYykgKHN0cnVjdCBhdGhfaHcgKiwgdTgpOworfTsKKworc3RydWN0IGhhbF9jYWxfbGlzdCB7CisJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKKwllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKK307CisKK3N0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKKwlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07CisJdTggY3VyckluZGV4OworCWludDE2X3QgcHJpdk5GOworCXU4IGludmFsaWRORmNvdW50OworfTsKKworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3MxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Citib29sIGF0aDlrX2h3X2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAorCQkJYm9vbCAqaXNDYWxEb25lKTsKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisKKyNlbmRpZiAvKiBDQUxJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOTU2NmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBDT1JFX0gKLSNkZWZpbmUgQ09SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLQotI2luY2x1ZGUgImF0aDlrLmgiCi0jaW5jbHVkZSAicmMuaCIKLQotc3RydWN0IGF0aF9ub2RlOwotCi0vKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwotCi0jZGVmaW5lCWl0bzY0KHgpIChzaXplb2YoeCkgPT0gOCkgPwkJCVwKLQkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAoMHhmZikpIDoJXAotCShzaXplb2YoeCkgPT0gMTYpID8JCQkJXAotCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZikgOglcCi0JKChzaXplb2YoeCkgPT0gMzIpID8JCQkJXAotCSAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmZmZmZmKSA6IFwKLQkgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKQotCi0vKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLwotI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKLQkJKF9sKSsrOwkJCQlcCi0JCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotLyogZGVjcmVtZW50IHdpdGggd3JhcC1hcm91bmQgKi8KLSNkZWZpbmUgREVDUihfbCwgIF9zeikgIGRvIHsJCQlcCi0JCShfbCktLTsJCQkJXAotCQkoX2wpICY9ICgoX3N6KSAtIDEpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQotI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAotCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAotCQkJQlVHKCk7CQkJXAotCQl9CQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAotCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKLQotI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQotCi1zdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0KLWVudW0gQVRIX0RFQlVHIHsKLQlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCi0JQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKLQlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCi0JQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKLQlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCi0JQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCi0JQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAotCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCi0JQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKLQlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAotCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAotCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCi0JQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKLQlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKLQlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCi0JQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgotfTsKLQotI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKLQotI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwotCi0vKioKLSAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCi0gKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKLSAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycwotICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQotICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KLSAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCi0gKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KLSAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKLSAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCi0gKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCi0gKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0Ci0gKiBAYm1pc3M6IEJlYWNvbiBNaXNzCi0gKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5Ci0gKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKLSAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0Ci0gKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKLSAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYwotICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQotICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KLSAqLwotc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgewotCXUzMiB0b3RhbDsKLQl1MzIgcnhvazsKLQl1MzIgcnhlb2w7Ci0JdTMyIHJ4b3JuOwotCXUzMiB0eG9rOwotCXUzMiB0eGVvbDsKLQl1MzIgdHh1cm47Ci0JdTMyIG1pYjsKLQl1MzIgcnhwaHllcnI7Ci0JdTMyIHJ4X2tleWNhY2hlX21pc3M7Ci0JdTMyIHN3YmE7Ci0JdTMyIGJtaXNzOwotCXUzMiBibnI7Ci0JdTMyIGNzdDsKLQl1MzIgZ3R0OwotCXUzMiB0aW07Ci0JdTMyIGNhYmVuZDsKLQl1MzIgZHRpbXN5bmM7Ci0JdTMyIGR0aW07Ci19OwotCi1zdHJ1Y3QgYXRoX3N0YXRzIHsKLQlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfZGVidWcgewotCWludCBkZWJ1Z19tYXNrOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKLQlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwotfTsKLQotdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci12b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKLQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICAgIGVudW0gYXRoOWtfaW50IHN0YXR1cykKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLwotCi1zdHJ1Y3QgYXRoX2NvbmZpZyB7Ci0JdTMyIGF0aF9hZ2dyX3Byb3Q7Ci0JdTE2IHR4cG93bGltaXQ7Ci0JdTE2IHR4cG93bGltaXRfb3ZlcnJpZGU7Ci0JdTggY2FicVJlYWR5dGltZTsKLQl1OCBzd0JlYWNvblByb2Nlc3M7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCi0JCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCi0JCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX2xhc3Rmcm0gPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCi0JCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSBidWZmZXJfdHlwZSB7Ci0JQlVGX0RBVEEJCT0gQklUKDApLAotCUJVRl9BR0dSCQk9IEJJVCgxKSwKLQlCVUZfQU1QRFUJCT0gQklUKDIpLAotCUJVRl9IVAkJCT0gQklUKDMpLAotCUJVRl9SRVRSWQkJPSBCSVQoNCksCi0JQlVGX1hSRVRSWQkJPSBCSVQoNSksCi0JQlVGX1NIT1JUX1BSRUFNQkxFCT0gQklUKDYpLAotCUJVRl9CQVIJCQk9IEJJVCg3KSwKLQlCVUZfUFNQT0xMCQk9IEJJVCg4KSwKLQlCVUZfQUdHUl9CVVJTVAkJPSBCSVQoOSksCi0JQlVGX0NBTENfQUlSVElNRQk9IEJJVCgxMCksCi19OwotCi1zdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7Ci0JaW50IGJmc19uZnJhbWVzOwkJLyogIyBmcmFtZXMgaW4gYWdncmVnYXRlICovCi0JdTE2IGJmc19hbDsJCQkvKiBsZW5ndGggb2YgYWdncmVnYXRlICovCi0JdTE2IGJmc19mcm1sZW47CQkJLyogbGVuZ3RoIG9mIGZyYW1lICovCi0JaW50IGJmc19zZXFubzsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KLQlpbnQgYmZzX3RpZG5vOwkJCS8qIHRpZCBvZiB0aGlzIGZyYW1lICovCi0JaW50IGJmc19yZXRyaWVzOwkJLyogY3VycmVudCByZXRyaWVzICovCi0JdTMyIGJmX3R5cGU7CQkJLyogQlVGXyogKGVudW0gYnVmZmVyX3R5cGUpICovCi0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwotfTsKLQotI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCi0jZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCi0jZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgotI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCi0jZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCi0jZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCi0jZGVmaW5lIGJmX3JjcyAgICAgICAgICAJYmZfc3RhdGUuYmZzX3JjcwotI2RlZmluZSBiZl9rZXlpeCAgICAgICAgICAgICAgICBiZl9zdGF0ZS5iZnNfa2V5aXgKLSNkZWZpbmUgYmZfa2V5dHlwZSAgICAgIAliZl9zdGF0ZS5iZnNfa2V5dHlwZQotI2RlZmluZSBiZl9pc2RhdGEoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfREFUQSkKLSNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCi0jZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCi0jZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCi0jZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQotI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQotI2RlZmluZSBiZl9pc3NocHJlYW1ibGUoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9TSE9SVF9QUkVBTUJMRSkKLSNkZWZpbmUgYmZfaXNiYXIoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQkFSKQotI2RlZmluZSBiZl9pc3BzcG9sbChiZikgCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9QU1BPTEwpCi0jZGVmaW5lIGJmX2lzYWdncmJ1cnN0KGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQUdHUl9CVVJTVCkKLQotLyoKLSAqIEFic3RyYWN0aW9uIG9mIGEgY29udGlndW91cyBidWZmZXIgdG8gdHJhbnNtaXQvcmVjZWl2ZS4gIFRoZXJlIGlzIG9ubHkKLSAqIGEgc2luZ2xlIGh3IGRlc2NyaXB0b3IgZW5jYXBzdWxhdGVkIGhlcmUuCi0gKi8KLXN0cnVjdCBhdGhfYnVmIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGFzdDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKLQkJCQkJICAgYW4gYWdncmVnYXRlKSAqLwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ZnJtOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIGZyYW1lICovCi0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KLQlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCi0JZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KLQl1MzIgYmZfc3RhdHVzOwotCXUxNiBiZl9mbGFnczsJCQkvKiB0eCBkZXNjcmlwdG9yIGZsYWdzICovCi0Jc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CS8qIGJ1ZmZlciBzdGF0ZSAqLwotCWRtYV9hZGRyX3QgYmZfZG1hY29udGV4dDsKLX07Ci0KLSNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQotCi0vKiBodyBwcm9jZXNzaW5nIGNvbXBsZXRlLCBkZXNjIHByb2Nlc3NlZCBieSBoYWwgKi8KLSNkZWZpbmUgQVRIX0JVRlNUQVRVU19ET05FICAgICAgMHgwMDAwMDAwMQotLyogaHcgcHJvY2Vzc2luZyBjb21wbGV0ZSwgZGVzYyBob2xkIGZvciBodyAqLwotI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCi0vKiBSeC1vbmx5OiBPUyBpcyBkb25lIHdpdGggdGhpcyBwYWNrZXQgYW5kIGl0J3Mgb2sgdG8gcXVldWVkIGl0IHRvIGh3ICovCi0jZGVmaW5lIEFUSF9CVUZTVEFUVVNfRlJFRSAgICAgIDB4MDAwMDAwMDQKLQotLyogRE1BIHN0YXRlIGZvciB0eC9yeCBkZXNjcmlwdG9ycyAqLwotCi1zdHJ1Y3QgYXRoX2Rlc2NkbWEgewotCWNvbnN0IGNoYXIgKmRkX25hbWU7Ci0Jc3RydWN0IGF0aF9kZXNjICpkZF9kZXNjOwkvKiBkZXNjcmlwdG9ycyAgKi8KLQlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHIgb2YgZGRfZGVzYyAgKi8KLQl1MzIgZGRfZGVzY19sZW47CQkvKiBzaXplIG9mIGRkX2Rlc2MgICovCi0Jc3RydWN0IGF0aF9idWYgKmRkX2J1ZnB0cjsJLyogYXNzb2NpYXRlZCBidWZmZXJzICovCi0JZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwotfTsKLQotaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAotCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKLXZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKLQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLQotLyoqKioqKioqKioqLwotLyogUlggLyBUWCAqLwotLyoqKioqKioqKioqLwotCi0jZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKLSNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCi0jZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgotI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMwotI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAotI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0Ci0jZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0Ci0jZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQotI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCi0KLSNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCi0JKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAotCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKLQkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCi0JIFdNRV9BQ19WTykKLQotI2RlZmluZSBXTUVfQUNfQkUgICAwCi0jZGVmaW5lIFdNRV9BQ19CSyAgIDEKLSNkZWZpbmUgV01FX0FDX1ZJICAgMgotI2RlZmluZSBXTUVfQUNfVk8gICAzCi0jZGVmaW5lIFdNRV9OVU1fQUMgIDQKLQotI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAotI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0Ci0jZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCi0jZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCi0vKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCi0jZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKLSNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKLSNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAotI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2Ci0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAotI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKLQotLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKLSAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLwotI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAotCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKLQotLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCi0jZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCi0KLS8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAotCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCi0JICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCi0KLSNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCi0JKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQotCi0jZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQotI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCi0jZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKLSNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKLQotZW51bSBBVEhfQUdHUl9TVEFUVVMgewotCUFUSF9BR0dSX0RPTkUsCi0JQVRIX0FHR1JfQkFXX0NMT1NFRCwKLQlBVEhfQUdHUl9MSU1JVEVELAotCUFUSF9BR0dSX1NIT1JUUEtULAotCUFUSF9BR0dSXzhLX0xJTUlURUQsCi19OwotCi1zdHJ1Y3QgYXRoX3R4cSB7Ci0JdTMyIGF4cV9xbnVtOwkJCS8qIGhhcmR3YXJlIHEgbnVtYmVyICovCi0JdTMyICpheHFfbGluazsJCQkvKiBsaW5rIHB0ciBpbiBsYXN0IFRYIGRlc2MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwkJLyogdHJhbnNtaXQgcXVldWUgKi8KLQlzcGlubG9ja190IGF4cV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgYXhxX2xvY2tmbGFnczsJLyogaW50ciBzdGF0ZSB3aGVuIG11c3QgY2xpICovCi0JdTMyIGF4cV9kZXB0aDsJCQkvKiBxdWV1ZSBkZXB0aCAqLwotCXU4IGF4cV9hZ2dyX2RlcHRoOwkJLyogYWdncmVnYXRlcyBxdWV1ZWQgKi8KLQl1MzIgYXhxX3RvdGFscXVldWVkOwkJLyogdG90YWwgZXZlciBxdWV1ZWQgKi8KLQlib29sIHN0b3BwZWQ7CQkJLyogSXMgbWFjODAyMTEgcXVldWUgc3RvcHBlZCA/ICovCi0Jc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwkvKiB2aXJ0dWFsIGFkZHIgb2YgbGFzdCBidWZmZXIqLwotCi0JLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKLQotCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCi0JICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Ci19OwotCi0jZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQotI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKLSNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCi0KLS8qIHBlciBUSUQgYWdncmVnYXRlIHR4IHN0YXRlIGZvciBhIGRlc3RpbmF0aW9uICovCi1zdHJ1Y3QgYXRoX2F0eF90aWQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHJvdW5kLXJvYmluIHRpZCBlbnRyeSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CQkvKiBwZW5kaW5nIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqdHhfYnVmW0FUSF9USURfTUFYX0JVRlNdOyAvKiBhY3RpdmUgdHggZnJhbWVzICovCi0JdTE2IHNlcV9zdGFydDsKLQl1MTYgc2VxX25leHQ7Ci0JdTE2IGJhd19zaXplOwotCWludCB0aWRubzsKLQlpbnQgYmF3X2hlYWQ7CQkJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCi0JaW50IGJhd190YWlsOwkJCS8qIG5leHQgdW51c2VkIHR4IGJ1ZmZlciBzbG90ICovCi0JaW50IHNjaGVkOwotCWludCBwYXVzZWQ7Ci0JdTggc3RhdGU7Ci0JaW50IGFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHM7Ci19OwotCi0vKiBwZXIgYWNjZXNzLWNhdGVnb3J5IGFnZ3JlZ2F0ZSB0eCBzdGF0ZSBmb3IgYSBkZXN0aW5hdGlvbiAqLwotc3RydWN0IGF0aF9hdHhfYWMgewotCWludCBzY2hlZDsJCQkvKiBkZXN0LWFjIGlzIHNjaGVkdWxlZCAqLwotCWludCBxbnVtOwkJCS8qIEgvVyBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZAotCQkJCQkgICB3aXRoIHRoaXMgQUMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiByb3VuZC1yb2JpbiB0eHEgZW50cnkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRpZF9xOwkJLyogcXVldWUgb2YgVElEcyB3aXRoIGJ1ZmZlcnMgKi8KLX07Ci0KLS8qIHBlci1mcmFtZSB0eCBjb250cm9sIGJsb2NrICovCi1zdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgewotCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JaW50IGlmX2lkOwotfTsKLQotLyogcGVyIGZyYW1lIHR4IHN0YXR1cyBibG9jayAqLwotc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7Ci0JaW50IHJldHJpZXM7CS8qIG51bWJlciBvZiByZXRyaWVzIHRvIHN1Y2Nlc3N1ZnVsbHkKLQkJCSAgIHRyYW5zbWl0IHRoaXMgZnJhbWUgKi8KLQlpbnQgZmxhZ3M7CS8qIHN0YXR1cyBvZiB0cmFuc21pdCAqLwotI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCi0jZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAotfTsKLQotLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLwotc3RydWN0IGF0aF90eF9zdGF0IHsKLQlpbnQgcnNzaTsKLQlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOwotCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOwotCWludCByYXRlaWVlZTsKLQlpbnQgcmF0ZUticHM7Ci0JaW50IHJhdGVjb2RlOwotCWludCBmbGFnczsKLQl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KLX07Ci0KLXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gewotCWludCBwYXJhbV9tYXhfZnJhbWVzOwotCWludCBwYXJhbV9tYXhfbGVuOwotCWludCBwYXJhbV9ybDsKLQlpbnQgcGFyYW1fYWw7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKLX07Ci0KLXN0cnVjdCBhdGhfbm9kZSB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07Ci0Jc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107Ci0JdTE2IG1heGFtcGR1OwotCXU4IG1wZHVkZW5zaXR5OwotfTsKLQotc3RydWN0IGF0aF90eCB7Ci0JdTE2IHNlcV9ubzsKLQl1MzIgdHhxc2V0dXA7Ci0JaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOwotCXNwaW5sb2NrX3QgdHhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7Ci0Jc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOwotCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKLX07Ci0KLXN0cnVjdCBhdGhfcnggewotCXU4IGRlZmFudDsKLQl1OCByeG90aGVyYW50OwotCXUzMiAqcnhsaW5rOwotCWludCBidWZzaXplOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKLQlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOwotCXNwaW5sb2NrX3QgcnhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7Ci0Jc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOwotfTsKLQotaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXUzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKLXZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOwotc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwotdm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwotdm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Ci12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKLXZvaWQgYXRoX3R4X25vZGVfZnJlZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Ci12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpOwotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpOwotc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKLQkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci11MzIgYXRoX3R4cV9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdTMyIGF0aF90eHFfYWdncl9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCk7Ci1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLAlzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLQotLyoqKioqKioqLwotLyogVkFQcyAqLwotLyoqKioqKioqLwotCi0vKgotICogRGVmaW5lIHRoZSBzY2hlbWUgdGhhdCB3ZSBzZWxlY3QgTUFDIGFkZHJlc3MgZm9yIG11bHRpcGxlCi0gKiBCU1Mgb24gdGhlIHNhbWUgcmFkaW8uIFRoZSB2ZXJ5IGZpcnN0IFZBUCB3aWxsIGp1c3QgdXNlIHRoZSBNQUMKLSAqIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NLiBGb3IgdGhlIG5leHQgMyBWQVBzLCB3ZSBzZXQgdGhlCi0gKiBVL0wgYml0IChiaXQgMSkgaW4gTUFDIGFkZHJlc3MsIGFuZCB1c2UgdGhlIG5leHQgdHdvIGJpdHMgYXMgdGhlCi0gKiBpbmRleCBvZiB0aGUgVkFQLgotICovCi0KLSNkZWZpbmUgQVRIX1NFVF9WQVBfQlNTSURfTUFTSyhic3NpZF9tYXNrKSBcCi0JKChic3NpZF9tYXNrKVswXSAmPSB+KCgoQVRIX0JDQlVGLTEpPDwyKXwweDAyKSkKLQotc3RydWN0IGF0aF92YXAgewotCWludCBhdl9ic2xvdDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0Jc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQmVhY29uIEhhbmRsaW5nICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKLSAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgotICovCi0jZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKLSNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTEKLSNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLwotI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKLSNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKLQotc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGR0aW1fcGVyaW9kOwotCXUxNiBibWlzc190aW1lb3V0OwotCXU4IGR0aW1fY291bnQ7Ci0JdTggdGltX29mZnNldDsKLQl1bmlvbiB7Ci0JCXU2NCBsYXN0X3RzZjsKLQkJdTggbGFzdF90c3RhbXBbOF07Ci0JfSB1OyAvKiBsYXN0IHJlY2VpdmVkIGJlYWNvbi9wcm9iZSByZXNwb25zZSB0aW1lc3RhbXAgb2YgdGhpcyBCU1MuICovCi19OwotCi1zdHJ1Y3QgYXRoX2JlYWNvbiB7Ci0JZW51bSB7Ci0JCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLwotCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLwotCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCi0JfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KLQotCXUzMiBiZWFjb25xOwotCXUzMiBibWlzc2NudDsKLQl1MzIgYXN0X2JlX3htaXQ7Ci0JdTY0IGJjX3RzdGFtcDsKLQlpbnQgYnNsb3RbQVRIX0JDQlVGXTsKLQlpbnQgc2xvdHRpbWU7Ci0JaW50IHNsb3R1cGRhdGU7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gYmVhY29uX3FpOwotCXN0cnVjdCBhdGhfZGVzY2RtYSBiZG1hOwotCXN0cnVjdCBhdGhfdHhxICpjYWJxOwotCXN0cnVjdCBsaXN0X2hlYWQgYmJ1ZjsKLX07Ci0KLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7Ci1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpOwotdm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92YXAgKmF2cCk7Ci12b2lkIGF0aF9iZWFjb25fc3luYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKTsKLQotLyoqKioqKiovCi0vKiBBTkkgKi8KLS8qKioqKioqLwotCi0vKiBBTkkgdmFsdWVzIGZvciBTVEEgb25seS4KLSAgIEZJWE1FOiBBZGQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBBUCBsYXRlciAqLwotCi0jZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgIDEwMCAgICAgLyogMTAwIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIEFOSSBwb2xsICovCi0jZGVmaW5lIEFUSF9TSE9SVF9DQUxJTlRFUlZBTCAgIDEwMDAgICAgLyogMSBzZWNvbmQgYmV0d2VlbiBjYWxpYnJhdGlvbnMgKi8KLSNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzIGJldHdlZW4gY2FsaWJyYXRpb25zICovCi0jZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMIDEyMDAwMDAgLyogMjAgbWludXRlcyBiZXR3ZWVuIGNhbGlicmF0aW9ucyAqLwotCi1zdHJ1Y3QgYXRoX2FuaSB7Ci0JYm9vbCBzY19jYWxkb25lOwotCWludDE2X3Qgc2Nfbm9pc2VfZmxvb3I7Ci0JdW5zaWduZWQgaW50IHNjX2xvbmdjYWxfdGltZXI7Ci0JdW5zaWduZWQgaW50IHNjX3Nob3J0Y2FsX3RpbWVyOwotCXVuc2lnbmVkIGludCBzY19yZXNldGNhbF90aW1lcjsKLQl1bnNpZ25lZCBpbnQgc2NfY2hlY2thbmlfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKiovCi0vKiAgIExFRCBDb250cm9sICAgICovCi0vKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX0xFRF9QSU4JMQotCi1lbnVtIGF0aF9sZWRfdHlwZSB7Ci0JQVRIX0xFRF9SQURJTywKLQlBVEhfTEVEX0FTU09DLAotCUFUSF9MRURfVFgsCi0JQVRIX0xFRF9SWAotfTsKLQotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGhfc29mdGMgKnNjOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Ci0JZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7Ci0JY2hhciBuYW1lWzMyXTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0vKiBSZmtpbGwgKi8KLSNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KLQotc3RydWN0IGF0aF9yZmtpbGwgewotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOwotCWNoYXIgcmZraWxsX25hbWVbMzJdOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqLwotLyogTWFpbiBkcml2ZXIgY29yZSAqLwotLyoqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgotICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUwotKi8KLSNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKLSNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1Ci0jZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCi0jZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KLSNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKLSNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1Ci0jZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfVkFMICAgICAgMHg3ZgotLyoKLSAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKLSAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgotICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCi0gKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KLSAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKLSAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgotICovCi0jZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KLQotI2RlZmluZSBBVEhfSUZfSURfQU5ZICAgCTB4ZmYKLSNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KLSNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKLSNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAotCi1lbnVtIFBST1RfTU9ERSB7Ci0JUFJPVF9NX05PTkUgPSAwLAotCVBST1RfTV9SVFNDVFMsCi0JUFJPVF9NX0NUU09OTFkKLX07Ci0KLSNkZWZpbmUgU0NfT1BfSU5WQUxJRAkJQklUKDApCi0jZGVmaW5lIFNDX09QX0JFQUNPTlMJCUJJVCgxKQotI2RlZmluZSBTQ19PUF9SWEFHR1IJCUJJVCgyKQotI2RlZmluZSBTQ19PUF9UWEFHR1IJCUJJVCgzKQotI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFCUJJVCg0KQotI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUCUJJVCg1KQotI2RlZmluZSBTQ19PUF9OT19SRVNFVAkJQklUKDYpCi0jZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUCUJJVCg3KQotI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRQlCSVQoOCkKLSNkZWZpbmUgU0NfT1BfUlhGTFVTSAkJQklUKDkpCi0jZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVECUJJVCgxMCkKLSNkZWZpbmUgU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQJQklUKDExKQotI2RlZmluZSBTQ19PUF9SRktJTExfU1dfQkxPQ0tFRAlCSVQoMTIpCi0jZGVmaW5lIFNDX09QX1JGS0lMTF9IV19CTE9DS0VECUJJVCgxMykKLQotc3RydWN0IGF0aF9zb2Z0YyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKLQlzdHJ1Y3QgYXRoX2hhbCAqc2NfYWg7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7Ci0Jc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JdTggc2NfY3VyYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNjX215YWRkcltFVEhfQUxFTl07Ci0JdTggc2NfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MzIgc2NfaW50cnN0YXR1czsKLQl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KLQl1MTYgc2NfY3VydHhwb3c7Ci0JdTE2IHNjX2N1cmFpZDsKLQl1MTYgc2NfY2FjaGVsc3o7Ci0JdTggc2NfbmJjbnZhcHM7Ci0JdTE2IHNjX252YXBzOwotCXU4IHNjX3R4X2NoYWlubWFzazsKLQl1OCBzY19yeF9jaGFpbm1hc2s7Ci0JdTMyIHNjX2tleW1heDsKLQlERUNMQVJFX0JJVE1BUChzY19rZXltYXAsIEFUSF9LRVlNQVgpOwotCXU4IHNjX3NwbGl0bWljOwotCXU4IHNjX3Byb3RyaXg7Ci0JZW51bSBhdGg5a19pbnQgc2NfaW1hc2s7Ci0JZW51bSBQUk9UX01PREUgc2NfcHJvdG1vZGU7Ci0JZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBzY19odF9leHRwcm90c3BhY2luZzsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgdHhfY2hhbl93aWR0aDsKLQotCXN0cnVjdCBhdGhfY29uZmlnIHNjX2NvbmZpZzsKLQlzdHJ1Y3QgYXRoX3J4IHJ4OwotCXN0cnVjdCBhdGhfdHggdHg7Ci0Jc3RydWN0IGF0aF9iZWFjb24gYmVhY29uOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICpzY192YXBzW0FUSF9CQ0JVRl07Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBVEhfQ0hBTl9NQVhdOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgdHhfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKLQlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOwotCXN0cnVjdCBhdGhfYW5pIHNjX2FuaTsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBzY19oYWxzdGF0czsKLSNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKLQlzdHJ1Y3QgYXRoOWtfZGVidWcgc2NfZGVidWc7Ci0jZW5kaWYKLX07Ci0KLWludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1pbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwotCi0vKgotICogUmVhZCBhbmQgd3JpdGUsIHRoZXkgYm90aCBzaGFyZSB0aGUgc2FtZSBsb2NrLiBXZSBkbyB0aGlzIHRvIHNlcmlhbGl6ZQotICogcmVhZHMgYW5kIHdyaXRlcyBvbiBBdGhlcm9zIDgwMi4xMW4gUENJIGRldmljZXMgb25seS4gVGhpcyBpcyByZXF1aXJlZAotICogYXMgdGhlIEZJRk8gb24gdGhlc2UgZGV2aWNlcyBjYW4gb25seSBhY2NlcHQgc2FuZWx5IDIgcmVxdWVzdHMuIEFmdGVyCi0gKiB0aGF0IHRoZSBkZXZpY2UgZ29lcyBiYW5hbmFzLiBTZXJpYWxpemluZyB0aGUgcmVhZHMvd3JpdGVzIHByZXZlbnRzIHRoaXMKLSAqIGZyb20gaGFwcGVuaW5nLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnX29mZnNldCwgdTMyIHZhbCkKLXsKLQlpZiAoYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCWlvd3JpdGUzMih2YWwsIGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDlrX2lvcmVhZDMyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZ19vZmZzZXQpCi17Ci0JdTMyIHZhbDsKLQlpZiAoYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotI2VuZGlmIC8qIENPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmMKaW5kZXggYTgwZWQ1Ny4uODI1NzNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jCkBAIC0xNCwxOSArMTQsMjEgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfZGVidWcgPSBEQkdfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOwogCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRoOWtfZGVidWdmc19yb290OworCiB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJaWYgKCFzYykKIAkJcmV0dXJuOwogCi0JaWYgKHNjLT5zY19kZWJ1Zy5kZWJ1Z19tYXNrICYgZGJnX21hc2spIHsKKwlpZiAoc2MtPmRlYnVnLmRlYnVnX21hc2sgJiBkYmdfbWFzaykgewogCQl2YV9saXN0IGFyZ3M7CiAKIAkJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTQ2LDcgKzQ4LDcgQEAKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWNoYXIgYnVmWzEwMjRdOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXUzMiB2YWxbQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTXTsKQEAgLTEzMiw0MSArMTM0LDQxIEBACiB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKQogewogCWlmIChzdGF0dXMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfUlgpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvaysrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2srKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYRU9MKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYT1JOKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4b3JuKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4rKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2srKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eG9rKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9UWFVSTikKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eHVybisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9NSUIpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWFBIWSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeHBoeWVycisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWEtDTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfU1dCQSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5zd2JhKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk1JU1MpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ibWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk5SKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ1NUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfR1RUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVElNKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ0FCRU5EKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTVNZTkMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0xNzcsNDEgKzE3OSw0MSBAQAogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CisJCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWEVPTCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wpOworCQkiJThzOiAlMTB1XG4iLCAiUlhFT0wiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYT1JOIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeG9ybik7CisJCSIlOHM6ICUxMHVcbiIsICJSWE9STiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4pOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOworCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFhVUk4iLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKTsKKwkJIiU4czogJTEwdVxuIiwgIlRYVVJOIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eHVybik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CisJCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWFBIWSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhwaHllcnIpOworCQkiJThzOiAlMTB1XG4iLCAiUlhQSFkiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKKwkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlNXQkEiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnN3YmEpOworCQkiJThzOiAlMTB1XG4iLCAiU1dCQSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJCTUlTUyIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MpOworCQkiJThzOiAlMTB1XG4iLCAiQk1JU1MiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJtaXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKKwkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKKwkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKKwkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKKwkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKKwkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkRUSU1TWU5DIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYyk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNU1lOQyIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMpOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiRFRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRPVEFMIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCk7CisJCSIlOHM6ICUxMHVcbiIsICJUT1RBTCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwpOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQpAQCAtMjIyLDI5ICsyMjQsMzA4IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUKIH07CiAKK3N0YXRpYyB2b2lkIGF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPnN0YXR1cy5yYXRlczsKKwlpbnQgZmluYWxfdHNfaWR4LCBpZHg7CisKKwl0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWZpbmFsX3RzX2lkeCA9IHR4X2luZm9fcHJpdi0+dHgudHNfcmF0ZWluZGV4OworCWlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tmaW5hbF90c19pZHhdLmlkeF0uZG90MTFyYXRlOworCisJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpZHhdLnN1Y2Nlc3MrKzsKK30KKworc3RhdGljIHZvaWQgYXRoX2RlYnVnX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+c3RhdHVzLnJhdGVzOworCWludCBmaW5hbF90c19pZHgsIGlkeDsKKworCXR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJZmluYWxfdHNfaWR4ID0gdHhfaW5mb19wcml2LT50eC50c19yYXRlaW5kZXg7CisJaWR4ID0gcmF0ZXNbZmluYWxfdHNfaWR4XS5pZHg7CisKKwlzYy0+ZGVidWcuc3RhdHMubGVnYWN5X3Jjc3RhdHNbaWR4XS5zdWNjZXNzKys7Cit9CisKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzYywgc2tiKTsKKwllbHNlCisJCWF0aF9kZWJ1Z19zdGF0X2xlZ2FjeV9yYyhzYywgc2tiKTsKK30KKworLyogRklYTUU6IGxlZ2FjeSByYXRlcywgbGF0ZXIgb24gLi4gKi8KK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCSAgICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpIHsKKwkJaW50IGlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyaXhdLmRvdDExcmF0ZTsKKworCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ueHJldHJpZXMgKz0geHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5yZXRyaWVzICs9IHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5wZXIgPSBwZXI7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfMTFuX3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTAyNF07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGkgPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmLCAiJTdzICUxM3MgJThzICU4cyAlNnNcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIsCisJCSAgICAgICAiUmV0cmllcyIsICJYUmV0cmllcyIsICJQRVIiKTsKKworCWZvciAoaSA9IDA7IGkgPD0gMTU7IGkrKykgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkiJTVzJTNkOiAlOHUgJTh1ICU4dSAlOHVcbiIsICJNQ1MiLCBpLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0uc3VjY2VzcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnJldHJpZXMsCisJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS54cmV0cmllcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnBlcik7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlN3MgJTEzc1xuXG4iLCAiUmF0ZSIsICJTdWNjZXNzIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTV1OiAlMTJ1XG4iLAorCQkJCXNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRla2JwcyAvIDEwMDAsCisJCQkJc2MtPmRlYnVnLnN0YXRzLmxlZ2FjeV9yY3N0YXRzW2ldLnN1Y2Nlc3MpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3Jjc3RhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHNjLT5jdXJfcmF0ZV90YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlyZXR1cm4gYXRoX3JlYWRfZmlsZV9zdGF0XzExbl9yYyhmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWVsc2UKKwkJcmV0dXJuIGF0aF9yZWFkX2ZpbGVfc3RhdF9sZWdhY3lfcmMoZmlsZSwgdXNlcl9idWYsIGNvdW50ICxwcG9zKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yY3N0YXQgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfcmNzdGF0LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGF0aF93aXBoeV9zdGF0ZV9zdHIoZW51bSBhdGhfd2lwaHlfc3RhdGUgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQVRIX1dJUEhZX0lOQUNUSVZFOgorCQlyZXR1cm4gIklOQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9BQ1RJVkU6CisJCXJldHVybiAiQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9QQVVTSU5HOgorCQlyZXR1cm4gIlBBVVNJTkciOworCWNhc2UgQVRIX1dJUEhZX1BBVVNFRDoKKwkJcmV0dXJuICJQQVVTRUQiOworCWNhc2UgQVRIX1dJUEhZX1NDQU46CisJCXJldHVybiAiU0NBTiI7CisJfQorCXJldHVybiAiPyI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV93aXBoeShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGk7CisJdTggYWRkcltFVEhfQUxFTl07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJwcmltYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQl3aXBoeV9uYW1lKHNjLT5wcmlfd2lwaHktPmh3LT53aXBoeSksCisJCQlhdGhfd2lwaHlfc3RhdGVfc3RyKHNjLT5wcmlfd2lwaHktPnN0YXRlKSwKKwkJCXNjLT5wcmlfd2lwaHktPmNoYW5faWR4LCBzYy0+cHJpX3dpcGh5LT5jaGFuX2lzX2h0KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkic2Vjb25kYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQkJd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpLAorCQkJCWF0aF93aXBoeV9zdGF0ZV9zdHIoYXBoeS0+c3RhdGUpLAorCQkJCWFwaHktPmNoYW5faWR4LCBhcGh5LT5jaGFuX2lzX2h0KTsKKwl9CisKKwlwdXRfdW5hbGlnbmVkX2xlMzIoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9TVEFfSUQwKSwgYWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KFJFR19SRUFEKHNjLT5zY19haCwgQVJfU1RBX0lEMSkgJiAweGZmZmYsIGFkZHIgKyA0KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJhZGRyOiAlcE1cbiIsIGFkZHIpOworCXB1dF91bmFsaWduZWRfbGUzMihSRUdfUkVBRChzYy0+c2NfYWgsIEFSX0JTU01TS0wpLCBhZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9CU1NNU0tVKSAmIDB4ZmZmZiwgYWRkciArIDQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJImFkZHJtYXNrOiAlcE1cbiIsIGFkZHIpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3RydWN0IGF0aF93aXBoeSAqIGdldF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlpZiAoc3RyY21wKG5hbWUsIHdpcGh5X25hbWUoc2MtPnByaV93aXBoeS0+aHctPndpcGh5KSkgPT0gMCkKKwkJcmV0dXJuIHNjLT5wcmlfd2lwaHk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ICYmIHN0cmNtcChuYW1lLCB3aXBoeV9uYW1lKGFwaHktPmh3LT53aXBoeSkpID09IDApCisJCQlyZXR1cm4gYXBoeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVsX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X2RlbChhcGh5KTsKK30KKworc3RhdGljIGludCBwYXVzZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9wYXVzZShhcGh5KTsKK30KKworc3RhdGljIGludCB1bnBhdXNlX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KTsKK30KKworc3RhdGljIGludCBzY2hlZHVsZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbXNlYykKK3sKKwlhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHNjLCBzaW1wbGVfc3RydG91bChtc2VjLCBOVUxMLCAwKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfd2lwaHkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZbbGVuIC0gMV0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAiYWRkIiwgMykgPT0gMCkgeworCQlpbnQgcmVzID0gYXRoOWtfd2lwaHlfYWRkKHNjKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJkZWw9IiwgNCkgPT0gMCkgeworCQlpbnQgcmVzID0gZGVsX3dpcGh5KHNjLCBidWYgKyA0KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJwYXVzZT0iLCA2KSA9PSAwKSB7CisJCWludCByZXMgPSBwYXVzZV93aXBoeShzYywgYnVmICsgNik7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAidW5wYXVzZT0iLCA4KSA9PSAwKSB7CisJCWludCByZXMgPSB1bnBhdXNlX3dpcGh5KHNjLCBidWYgKyA4KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzZWxlY3Q9IiwgNykgPT0gMCkgeworCQlpbnQgcmVzID0gc2VsZWN0X3dpcGh5KHNjLCBidWYgKyA3KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzY2hlZHVsZT0iLCA5KSA9PSAwKSB7CisJCWludCByZXMgPSBzY2hlZHVsZV93aXBoeShzYywgYnVmICsgOSk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3dpcGh5ID0geworCS5yZWFkID0gcmVhZF9maWxlX3dpcGh5LAorCS53cml0ZSA9IHdyaXRlX2ZpbGVfd2lwaHksCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKKwogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc2MtPnNjX2RlYnVnLmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKKwlzYy0+ZGVidWcuZGVidWdfbWFzayA9IGF0aDlrX2RlYnVnOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0JaWYgKCFzYy0+c2NfZGVidWcuZGVidWdmc19yb290KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2Rpcih3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpLAorCQkJCQkJICAgICAgYXRoOWtfZGVidWdmc19yb290KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKIAkJZ290byBlcnI7CiAKLQlzYy0+c2NfZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKLQkJCQkJCSAgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QpOwotCWlmICghc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RtYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVR08sCisJCQkJICAgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX2RtYSk7CisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19kbWEpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfZG1hID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVHTywKLQkJCQkgICAgICAgc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZG1hKTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2RtYSkKLQkJZ290byBlcnI7Ci0KLQlzYy0+c2NfZGVidWcuZGVidWdmc19pbnRlcnJ1cHQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLAorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsCiAJCQkJCQkgICAgIFNfSVJVR08sCi0JCQkJCQkgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkJCSAgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJCQkJICAgICBzYywgJmZvcHNfaW50ZXJydXB0KTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwkJZ290byBlcnI7CisKKwlzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3N0YXQiLAorCQkJCQkJICBTX0lSVUdPLAorCQkJCQkJICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgIHNjLCAmZm9wc19yY3N0YXQpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0KQorCQlnb3RvIGVycjsKKworCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgKKwkJIndpcGh5IiwgU19JUlVHTyB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCSZmb3BzX3dpcGh5KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwpAQCAtMjU1LDggKzUzNiwyNCBAQAogCiB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+c2NfZGVidWcuZGVidWdmc19kbWEpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kbWEpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Cit9CisKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKQoreworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7CisJaWYgKCFhdGg5a19kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShhdGg5a19kZWJ1Z2ZzX3Jvb3QpOworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjUyNjhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIERFQlVHX0gKKyNkZWZpbmUgREVCVUdfSAorCitlbnVtIEFUSF9ERUJVRyB7CisJQVRIX0RCR19SRVNFVAkJPSAweDAwMDAwMDAxLAorCUFUSF9EQkdfUkVHX0lPCQk9IDB4MDAwMDAwMDIsCisJQVRIX0RCR19RVUVVRQkJPSAweDAwMDAwMDA0LAorCUFUSF9EQkdfRUVQUk9NCQk9IDB4MDAwMDAwMDgsCisJQVRIX0RCR19DQUxJQlJBVEUJPSAweDAwMDAwMDEwLAorCUFUSF9EQkdfQ0hBTk5FTAkJPSAweDAwMDAwMDIwLAorCUFUSF9EQkdfSU5URVJSVVBUCT0gMHgwMDAwMDA0MCwKKwlBVEhfREJHX1JFR1VMQVRPUlkJPSAweDAwMDAwMDgwLAorCUFUSF9EQkdfQU5JCQk9IDB4MDAwMDAxMDAsCisJQVRIX0RCR19QT1dFUl9NR01UCT0gMHgwMDAwMDIwMCwKKwlBVEhfREJHX1hNSVQJCT0gMHgwMDAwMDQwMCwKKwlBVEhfREJHX0JFQUNPTgkJPSAweDAwMDAxMDAwLAorCUFUSF9EQkdfQ09ORklHCQk9IDB4MDAwMDIwMDAsCisJQVRIX0RCR19LRVlDQUNIRQk9IDB4MDAwMDQwMDAsCisJQVRIX0RCR19GQVRBTAkJPSAweDAwMDA4MDAwLAorCUFUSF9EQkdfQU5ZCQk9IDB4ZmZmZmZmZmYKK307CisKKyNkZWZpbmUgREJHX0RFRkFVTFQgKEFUSF9EQkdfRkFUQUwpCisKKyNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKKworLyoqCisgKiBzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyAtIENvbnRhaW5zIHN0YXRpc3RpY3MgYWJvdXQgaW50ZXJydXB0cworICogQHRvdGFsOiBUb3RhbCBuby4gb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgc28gZmFyCisgKiBAcnhvazogUlggd2l0aCBubyBlcnJvcnMKKyAqIEByeGVvbDogUlggd2l0aCBubyBtb3JlIFJYREVTQyBhdmFpbGFibGUKKyAqIEByeG9ybjogUlggRklGTyBvdmVycnVuCisgKiBAdHhvazogVFggY29tcGxldGVkIGF0IHRoZSByZXF1ZXN0ZWQgcmF0ZQorICogQHR4dXJuOiBUWCBGSUZPIHVuZGVycnVuCisgKiBAbWliOiBNSUIgcmVncyByZWFjaGluZyBpdHMgdGhyZXNob2xkCisgKiBAcnhwaHllcnI6IFJYIHdpdGggcGh5IGVycm9ycworICogQHJ4X2tleWNhY2hlX21pc3M6IFJYIHdpdGgga2V5IGNhY2hlIG1pc3NlcworICogQHN3YmE6IFNvZnR3YXJlIEJlYWNvbiBBbGVydAorICogQGJtaXNzOiBCZWFjb24gTWlzcworICogQGJucjogQmVhY29uIE5vdCBSZWFkeQorICogQGNzdDogQ2FycmllciBTZW5zZSBUSW1lb3V0CisgKiBAZ3R0OiBHbG9iYWwgVFggVGltZW91dAorICogQHRpbTogUlggYmVhY29uIFRJTSBvY2N1cnJlbmNlCisgKiBAY2FiZW5kOiBSWCBFbmQgb2YgQ0FCIHRyYWZmaWMKKyAqIEBkdGltc3luYzogRFRJTSBzeW5jIGxvc3NhZ2UKKyAqIEBkdGltOiBSWCBCZWFjb24gd2l0aCBEVElNCisgKi8KK3N0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIHsKKwl1MzIgdG90YWw7CisJdTMyIHJ4b2s7CisJdTMyIHJ4ZW9sOworCXUzMiByeG9ybjsKKwl1MzIgdHhvazsKKwl1MzIgdHhlb2w7CisJdTMyIHR4dXJuOworCXUzMiBtaWI7CisJdTMyIHJ4cGh5ZXJyOworCXUzMiByeF9rZXljYWNoZV9taXNzOworCXUzMiBzd2JhOworCXUzMiBibWlzczsKKwl1MzIgYm5yOworCXUzMiBjc3Q7CisJdTMyIGd0dDsKKwl1MzIgdGltOworCXUzMiBjYWJlbmQ7CisJdTMyIGR0aW1zeW5jOworCXUzMiBkdGltOworfTsKKworc3RydWN0IGF0aF9sZWdhY3lfcmNfc3RhdHMgeworCXUzMiBzdWNjZXNzOworfTsKKworc3RydWN0IGF0aF8xMW5fcmNfc3RhdHMgeworCXUzMiBzdWNjZXNzOworCXUzMiByZXRyaWVzOworCXUzMiB4cmV0cmllczsKKwl1OCBwZXI7Cit9OworCitzdHJ1Y3QgYXRoX3N0YXRzIHsKKwlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7CisJc3RydWN0IGF0aF9sZWdhY3lfcmNfc3RhdHMgbGVnYWN5X3Jjc3RhdHNbMTJdOwkvKiBtYXgoMTFhLDExYiwxMWcpICovCisJc3RydWN0IGF0aF8xMW5fcmNfc3RhdHMgbl9yY3N0YXRzWzE2XTsJCS8qIDAuLjE1IE1DUyByYXRlcyAqLworfTsKKworc3RydWN0IGF0aDlrX2RlYnVnIHsKKwlpbnQgZGVidWdfbWFzazsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OworCXN0cnVjdCBhdGhfc3RhdHMgc3RhdHM7Cit9OworCit2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKTsKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCk7Cit2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAorCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssCisJCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfaW50ZXJydXB0KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgZW51bSBhdGg5a19pbnQgc3RhdHVzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCQkJICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQVRIOUtfREVCVUcgKi8KKworI2VuZGlmIC8qIERFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKaW5kZXggYWNkNmM1My4uMTgzYzk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMKQEAgLTE0LDEyICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICAgdTMyIHJlZywgdTMyIG1hc2ssCiAJCQkJICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKQogewpAQCAtMzAsNyArMjcsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCByZWcsIHJlZ1ZhbCk7CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcpCisJaWYgKGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKQogCQl1ZGVsYXkoMTAwKTsKIAogCXJldHVybjsKQEAgLTkxLDYwICs4OCwyNjEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQorc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKIHsKLQkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYWgtPmFoX3NjOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwKSkgewotCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHNjLT5idXNfb3BzLT5lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkJCSAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkJCSAgIHU4ICpwUmV0VnBkTGlzdCkKK3sKKwl1MTYgaSwgazsKKwl1OCBjdXJyUHdyID0gcHdyTWluOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IChwd3JNYXggLSBwd3JNaW4pIC8gMjsgaSsrKSB7CisJCWF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleChjdXJyUHdyLCBwUHdyTGlzdCwKKwkJCQkJICAgICAgIG51bUludGVyY2VwdHMsICYoaWR4TCksCisJCQkJCSAgICAgICAmKGlkeFIpKTsKKwkJaWYgKGlkeFIgPCAxKQorCQkJaWR4UiA9IDE7CisJCWlmIChpZHhMID09IG51bUludGVyY2VwdHMgLSAxKQorCQkJaWR4TCA9ICh1MTYpIChudW1JbnRlcmNlcHRzIC0gMik7CisJCWlmIChwUHdyTGlzdFtpZHhMXSA9PSBwUHdyTGlzdFtpZHhSXSkKKwkJCWsgPSBwVnBkTGlzdFtpZHhMXTsKKwkJZWxzZQorCQkJayA9ICh1MTYpKCgoY3VyclB3ciAtIHBQd3JMaXN0W2lkeExdKSAqIHBWcGRMaXN0W2lkeFJdICsKKwkJCQkgICAocFB3ckxpc3RbaWR4Ul0gLSBjdXJyUHdyKSAqIHBWcGRMaXN0W2lkeExdKSAvCisJCQkJICAocFB3ckxpc3RbaWR4Ul0gLSBwUHdyTGlzdFtpZHhMXSkpOworCQlwUmV0VnBkTGlzdFtpXSA9ICh1OCkgazsKKwkJY3VyclB3ciArPSAyOwogCX0KIAotCSpkYXRhID0gTVMoUkVHX1JFQUQoYWgsIEFSX0VFUFJPTV9TVEFUVVNfREFUQSksCi0JCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwpOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZmxhc2hfbWFwKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCisJCQkJICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcE5ld1Bvd2VyLAorCQkJCSAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKIAotCWFocC0+YWhfY2FsX21lbSA9IGlvcmVtYXAoQVI1NDE2X0VFUFJPTV9TVEFSVF9BRERSLCBBUjU0MTZfRUVQUk9NX01BWCk7CisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCWZyZXEgPSAoaXNFeHRUYXJnZXQpID8gY2VudGVycy5leHRfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOwogCi0JaWYgKCFhaHAtPmFoX2NhbF9tZW0pIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImNhbm5vdCByZW1hcCBlZXByb20gcmVnaW9uIFxuIik7Ci0JCXJldHVybiAtRUlPOworCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLAorCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCW1hdGNoSW5kZXggPSAwOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCisJCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKKwkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKKwkJCQltYXRjaEluZGV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCisJCQkJICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCWxvd0luZGV4ID0gaSAtIDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwogCX0KIAotCXJldHVybiAwOworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9CisJCQkJKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsIGNsbywgY2hpLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7CisJCX0KKwl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2ZsYXNoX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAorCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJdTggcGNkYWMsIGkgPSAwOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCWJvb2wgbWF0Y2g7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCi0JKmRhdGEgPSBpb3JlYWQxNihhaHAtPmFoX2NhbF9tZW0gKyBvZmYpOworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAotCXJldHVybiB0cnVlOworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCisJCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOworCWlmIChtYXRjaCkgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCX0KKworCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKKwkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQorCQlpKys7CisKKwkqcGNkYWNJZHggPSBpOworCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfZ2V0X3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQl1MzIgaW5pdFR4R2FpbiwKKwkJCQlpbnQgdHhQb3dlciwKKwkJCQl1OCAqcFBEQURDVmFsdWVzKQogewotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlyZXR1cm4gYXRoOWtfaHdfZmxhc2hfcmVhZChhaCwgb2ZmLCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiBhdGg5a19od19lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0OworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7CisKKwlvZmZzZXQgPSB0eFBvd2VyOworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQorCQlpZiAoaSA8IG9mZnNldCkKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKKwkJZWxzZQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF80a19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorCisKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKKwkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAorCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQoreworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKwlmcmVxID0gaXNIdDQwVGFyZ2V0ID8gY2VudGVycy5zeW50aF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwgSVNfQ0hBTl8yR0haKGNoYW4pKSkgeworCQltYXRjaEluZGV4ID0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgorCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7CisJCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCQkJbWF0Y2hJbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgorCQkJCSAgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCQlsb3dJbmRleCA9IGkgLSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOworCX0KKworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9ICh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLAorCQkJCQkJY2xvLCBjaGksCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKKwkJfQorCX0KK30KKworc3RhdGljIHUxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsCisJCQkJICAgICAgIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAorCQkJCSAgICAgICBib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQoreworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCisJCSAgICAgKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgeworCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwgaXMyR0h6KSkgeworCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBwUmRFZGdlc1Bvd2VyW2ldLnRQb3dlcjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChpID4gMCkgJiYKKwkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBpczJHSHopKSkgeworCQkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJICAgICAgIGlzMkdIeikgPCBmcmVxICYmCisJCQkgICAgcFJkRWRnZXNQb3dlcltpIC0gMV0uZmxhZykgeworCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQkJcFJkRWRnZXNQb3dlcltpIC0gMV0udFBvd2VyOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHdpY2VNYXhFZGdlUG93ZXI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIDRLIHNpemVkIGNhcmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfNGtfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAjZGVmaW5lIFNJWkVfRUVQUk9NXzRLIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAl1MTYgKmVlcF9kYXRhOwogCWludCBhZGRyLCBlZXBfc3RhcnRfbG9jID0gMDsKIApAQCAtMTY5LDE3NiArMzY3LDExIEBACiAjdW5kZWYgU0laRV9FRVBST01fNEsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF9kZWZfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLSNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXUxNiAqZWVwX2RhdGE7Ci0JaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7Ci0KLQllZXBfZGF0YSA9ICh1MTYgKillZXA7Ci0KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKLQkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCi0JCQkJCSBlZXBfZGF0YSkpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJZWVwX2RhdGErKzsKLQl9Ci0JcmV0dXJuIHRydWU7Ci0jdW5kZWYgU0laRV9FRVBST01fREVGCi19Ci0KLXN0YXRpYyBib29sICgqYXRoOWtfZmlsbF9lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2ZpbGxfZGVmX2VlcHJvbSwKLQlhdGg5a19od19maWxsXzRrX2VlcHJvbQotfTsKLQotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2ZpbGxfZWVwcm9tW2FocC0+YWhfZWVwX21hcF0oYWgpOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICopICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOwotCXUzMiBzdW0gPSAwLCBlbDsKLQlib29sIG5lZWRfc3dhcCA9IGZhbHNlOwotCWludCBpLCBhZGRyLCBzaXplOwotCi0JaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwKLQkJCQkgJm1hZ2ljKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpOwotCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaHAtPmFoX2VlcHJvbSk7Ci0KLQkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKLQkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7Ci0JCQkJCSplZXBkYXRhID0gdGVtcDsKLQkJCQkJZWVwZGF0YSsrOwotCi0JCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJCSIweCUwNFggICIsICplZXBkYXRhKTsKLQotCQkJCQlpZiAoKChhZGRyICsgMSkgJSA2KSA9PSAwKQotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19FRVBST00sICJcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKLQkJCQkJImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCX0KLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKLQkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7Ci0KLQlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGg7Ci0KLQlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSkKLQkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpOwotCWVsc2UKLQkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwotCi0JZWVwZGF0YSA9ICh1MTYgKikoJmFocC0+YWhfZWVwcm9tKTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQotCQlzdW0gXj0gKmVlcGRhdGErKzsKLQotCWlmIChuZWVkX3N3YXApIHsKLQkJdTMyIGludGVnZXIsIGo7Ci0JCXUxNiB3b3JkOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcgXG4iKTsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7Ci0JCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKLQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKLQkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7Ci0JCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7Ci0JCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7Ci0JCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHN1bSAhPSAweGZmZmYgfHwgYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKLQkgICAgYXI1NDE2X2dldF9lZXBfcmV2KGFocCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAotCQkJc3VtLCBhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2NoZWNrXzRrX2VlcHJvbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKICNkZWZpbmUgRUVQUk9NXzRLX1NJWkUgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKikgJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCQkoc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKikgJmFoLT5lZXByb20ubWFwNGs7CiAJdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOwogCXUzMiBzdW0gPSAwLCBlbDsKIAlib29sIG5lZWRfc3dhcCA9IGZhbHNlOwpAQCAtMzYyLDcgKzM5NSw3IEBACiAKIAkJCWlmIChtYWdpYzIgPT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewogCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaHAtPmFoX2VlcHJvbSk7CisJCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaC0+ZWVwcm9tKTsKIAogCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBFRVBST01fNEtfU0laRTsgYWRkcisrKSB7CiAJCQkJCXRlbXAgPSBzd2FiMTYoKmVlcGRhdGEpOwpAQCAtMzg5LDE2ICs0MjIsMTYgQEAKIAkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CiAKIAlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKKwkJZWwgPSBhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoOwogCiAJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCiAJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpOwogCWVsc2UKIAkJZWwgPSBlbCAvIHNpemVvZih1MTYpOwogCi0JZWVwZGF0YSA9ICh1MTYgKikoJmFocC0+YWhfZWVwcm9tKTsKKwllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKIAkJc3VtIF49ICplZXBkYXRhKys7CkBAIC00NDgsMTEgKzQ4MSwxMSBAQAogCQl9CiAJfQogCi0JaWYgKHN1bSAhPSAweGZmZmYgfHwgYXI1NDE2X2dldF9lZXA0a192ZXIoYWhwKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAotCSAgICBhcjU0MTZfZ2V0X2VlcDRrX3JldihhaHApIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCWlmIChzdW0gIT0gMHhmZmZmIHx8IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKKwkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAogCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFyNTQxNl9nZXRfZWVwNGtfdmVyKGFocCkpOworCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NjAsNDggKzQ5Myw1MCBAQAogI3VuZGVmIEVFUFJPTV80S19TSVpFCiB9CiAKLXN0YXRpYyBpbnQgKCphdGg5a19jaGVja19lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20sCi0JYXRoOWtfaHdfY2hlY2tfNGtfZWVwcm9tCi19OwotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19od19jaGVja19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUzMiBhdGg5a19od180a19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKIAotCXJldHVybiBhdGg5a19jaGVja19lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAotCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAotCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCi17Ci0JdTE2IGksIGs7Ci0JdTggY3VyclB3ciA9IHB3ck1pbjsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8PSAocHdyTWF4IC0gcHdyTWluKSAvIDI7IGkrKykgewotCQlhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoY3VyclB3ciwgcFB3ckxpc3QsCi0JCQkJCSAgICAgICBudW1JbnRlcmNlcHRzLCAmKGlkeEwpLAotCQkJCQkgICAgICAgJihpZHhSKSk7Ci0JCWlmIChpZHhSIDwgMSkKLQkJCWlkeFIgPSAxOwotCQlpZiAoaWR4TCA9PSBudW1JbnRlcmNlcHRzIC0gMSkKLQkJCWlkeEwgPSAodTE2KSAobnVtSW50ZXJjZXB0cyAtIDIpOwotCQlpZiAocFB3ckxpc3RbaWR4TF0gPT0gcFB3ckxpc3RbaWR4Ul0pCi0JCQlrID0gcFZwZExpc3RbaWR4TF07Ci0JCWVsc2UKLQkJCWsgPSAodTE2KSgoKGN1cnJQd3IgLSBwUHdyTGlzdFtpZHhMXSkgKiBwVnBkTGlzdFtpZHhSXSArCi0JCQkJICAgKHBQd3JMaXN0W2lkeFJdIC0gY3VyclB3cikgKiBwVnBkTGlzdFtpZHhMXSkgLwotCQkJCSAgKHBQd3JMaXN0W2lkeFJdIC0gcFB3ckxpc3RbaWR4TF0pKTsKLQkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7Ci0JCWN1cnJQd3IgKz0gMjsKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBFRVBfTkZUSFJFU0hfMjoKKwkJcmV0dXJuIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzI6CisJCXJldHVybiBwTW9kYWwtPm9iXzAxOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWwtPmRiMV8wMTsKKwljYXNlIEVFUF9NSU5PUl9SRVY6CisJCXJldHVybiBwQmFzZS0+dmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0s7CisJY2FzZSBFRVBfVFhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CisJY2FzZSBFRVBfUlhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT5yeE1hc2s7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKIAkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKQEAgLTYwNSw3ICs2NDAsNyBAQAogCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CiAJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKIAotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwogCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKIAkJfSBlbHNlIHsKQEAgLTY0NCw3ICs2NzksNyBAQAogCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKIAkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwogCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CisJCWlmICh0Z3RJbmRleCA+PSBtYXhJbmRleCkgewogCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKIAkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewogCQkJCXRtcFZhbCA9IChpbnQxNl90KSBUTVBfVkFMX1ZQRF9UQUJMRTsKQEAgLTY2OSw0NTEgKzcwNCwyMCBAQAogI3VuZGVmIFRNUF9WQUxfVlBEX1RBQkxFCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YVNldCwKLQkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLQlpbnQgaSwgaiwgazsKLQlpbnQxNl90IHNzOwotCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOwotCXN0YXRpYyB1OCB2cGRUYWJsZUxbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZVJbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZUlbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCi0JdTggKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOwotCXU4IG1pblB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCXU4IG1heFB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCWludDE2X3QgdnBkU3RlcDsKLQlpbnQxNl90IHRtcFZhbDsKLQl1MTYgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OwotCWJvb2wgbWF0Y2g7Ci0JaW50MTZfdCBtaW5EZWx0YSA9IDA7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKLQkJCQkJCQkgICAgIElTX0NIQU5fMkdIWihjaGFuKSksCi0JCQkJCSAgICAgICBiQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwotCi0JaWYgKG1hdGNoKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCQltaW5Qd3JUNFtpXSA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXVswXTsKLQkJCW1heFB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzRdOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQlwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnZwZFBkZ1tpXSwKLQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQl2cGRUYWJsZUlbaV0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCXBWcGRMID0gcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldOwotCQkJcFB3ckwgPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV07Ci0JCQlwVnBkUiA9IHBSYXdEYXRhU2V0W2lkeFJdLnZwZFBkZ1tpXTsKLQkJCXBQd3JSID0gcFJhd0RhdGFTZXRbaWR4Ul0ucHdyUGRnW2ldOwotCi0JCQltaW5Qd3JUNFtpXSA9IG1heChwUHdyTFswXSwgcFB3clJbMF0pOwotCi0JCQltYXhQd3JUNFtpXSA9Ci0JCQkJbWluKHBQd3JMW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdLAotCQkJCSAgICBwUHdyUltBUjU0MTZfUERfR0FJTl9JQ0VQVFMgLSAxXSk7Ci0KLQotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3ckwsIHBWcGRMLAotCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVMW2ldKTsKLQkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJCXBQd3JSLCBwVnBkUiwKLQkJCQkJCUFSNTQxNl9QRF9HQUlOX0lDRVBUUywKLQkJCQkJCXZwZFRhYmxlUltpXSk7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMjsgaisrKSB7Ci0JCQkJdnBkVGFibGVJW2ldW2pdID0KLQkJCQkJKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgodTE2KQotCQkJCQkgICAgIEZSRVEyRkJJTihjZW50ZXJzLgotCQkJCQkJICAgICAgIHN5bnRoX2NlbnRlciwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFoKLQkJCQkJCSAgICAgICAoY2hhbikpLAotCQkJCQkgICAgIGJDaGFuc1tpZHhMXSwgYkNoYW5zW2lkeFJdLAotCQkJCQkgICAgIHZwZFRhYmxlTFtpXVtqXSwgdnBkVGFibGVSW2ldW2pdKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7Ci0KLQlrID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCWlmIChpID09IChudW1YcGRHYWlucyAtIDEpKQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKG1heFB3clQ0W2ldIC8gMik7Ci0JCWVsc2UKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KLQkJCQkodTE2KSgobWF4UHdyVDRbaV0gKyBtaW5Qd3JUNFtpICsgMV0pIC8gNCk7Ci0KLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJbWluKCh1MTYpQVI1NDE2X01BWF9SQVRFX1BPV0VSLCBwUGRHYWluQm91bmRhcmllc1tpXSk7Ci0KLQkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwotCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKLQkJfSBlbHNlIHsKLQkJCW1pbkRlbHRhID0gMDsKLQkJfQotCi0JCWlmIChpID09IDApIHsKLQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQkJCXNzID0gKGludDE2X3QpKDAgLSAobWluUHdyVDRbaV0gLyAyKSk7Ci0JCQllbHNlCi0JCQkJc3MgPSAwOwotCQl9IGVsc2UgewotCQkJc3MgPSAoaW50MTZfdCkoKHBQZEdhaW5Cb3VuZGFyaWVzW2kgLSAxXSAtCi0JCQkJCShtaW5Qd3JUNFtpXSAvIDIpKSAtCi0JCQkJICAgICAgIHRQZEdhaW5PdmVybGFwICsgMSArIG1pbkRlbHRhKTsKLQkJfQotCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVsxXSAtIHZwZFRhYmxlSVtpXVswXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQl3aGlsZSAoKHNzIDwgMCkgJiYgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCXRtcFZhbCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMF0gKyBzcyAqIHZwZFN0ZXApOwotCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPCAwKSA/IDAgOiB0bXBWYWwpOwotCQkJc3MrKzsKLQkJfQotCi0JCXNpemVDdXJyVnBkVGFibGUgPSAodTgpICgobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyICsgMSk7Ci0JCXRndEluZGV4ID0gKHU4KShwUGRHYWluQm91bmRhcmllc1tpXSArIHRQZEdhaW5PdmVybGFwIC0KLQkJCQkobWluUHdyVDRbaV0gLyAyKSk7Ci0JCW1heEluZGV4ID0gKHRndEluZGV4IDwgc2l6ZUN1cnJWcGRUYWJsZSkgPwotCQkJdGd0SW5kZXggOiBzaXplQ3VyclZwZFRhYmxlOwotCi0JCXdoaWxlICgoc3MgPCBtYXhJbmRleCkgJiYgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCXBQREFEQ1ZhbHVlc1trKytdID0gdnBkVGFibGVJW2ldW3NzKytdOwotCQl9Ci0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KLQkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQlpZiAodGd0SW5kZXggPiBtYXhJbmRleCkgewotCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKLQkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewotCQkJCXRtcFZhbCA9IChpbnQxNl90KSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArCi0JCQkJCQkgICAgKHNzIC0gbWF4SW5kZXggKyAxKSAqIHZwZFN0ZXApKTsKLQkJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA+IDI1NSkgPwotCQkJCQkJCSAyNTUgOiB0bXBWYWwpOwotCQkJCXNzKys7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl3aGlsZSAoaSA8IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLKSB7Ci0JCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gcFBkR2FpbkJvdW5kYXJpZXNbaSAtIDFdOwotCQlpKys7Ci0JfQotCi0Jd2hpbGUgKGsgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUykgewotCQlwUERBRENWYWx1ZXNba10gPSBwUERBRENWYWx1ZXNbayAtIDFdOwotCQlrKys7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcG93SW5mbywKLQkJCQkgICAgICB1MTYgbnVtQ2hhbm5lbHMsCi0JCQkJICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwTmV3UG93ZXIsCi0JCQkJICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzRXh0VGFyZ2V0KQotewotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQl1MTYgY2xvLCBjaGk7Ci0JaW50IGk7Ci0JaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKLQl1MTYgZnJlcTsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQlmcmVxID0gKGlzRXh0VGFyZ2V0KSA/IGNlbnRlcnMuZXh0X2NlbnRlciA6IGNlbnRlcnMuY3RsX2NlbnRlcjsKLQotCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLAotCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCW1hdGNoSW5kZXggPSAwOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCi0JCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKLQkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKLQkJCQltYXRjaEluZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCi0JCQkJICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgewotCQkJCWxvd0luZGV4ID0gaSAtIDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQotCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwotCX0KLQotCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7Ci0JCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOwotCX0gZWxzZSB7Ci0JCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0JCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7Ci0JCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9Ci0JCQkJKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsIGNsbywgY2hpLAotCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAotCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwb3dJbmZvLAotCQkJCSAgICAgICB1MTYgbnVtQ2hhbm5lbHMsCi0JCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwTmV3UG93ZXIsCi0JCQkJICAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0h0NDBUYXJnZXQpCi17Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCXUxNiBjbG8sIGNoaTsKLQlpbnQgaTsKLQlpbnQgbWF0Y2hJbmRleCA9IC0xLCBsb3dJbmRleCA9IC0xOwotCXUxNiBmcmVxOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCWZyZXEgPSBpc0h0NDBUYXJnZXQgPyBjZW50ZXJzLnN5bnRoX2NlbnRlciA6IGNlbnRlcnMuY3RsX2NlbnRlcjsKLQotCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLCBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCW1hdGNoSW5kZXggPSAwOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCi0JCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKLQkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKLQkJCQltYXRjaEluZGV4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZQotCQkJCWlmICgoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCi0JCQkJICAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpKSB7Ci0JCQkJCWxvd0luZGV4ID0gaSAtIDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJfQotCQlpZiAoKG1hdGNoSW5kZXggPT0gLTEpICYmIChsb3dJbmRleCA9PSAtMSkpCi0JCQltYXRjaEluZGV4ID0gaSAtIDE7Ci0JfQotCi0JaWYgKG1hdGNoSW5kZXggIT0gLTEpIHsKLQkJKnBOZXdQb3dlciA9IHBvd0luZm9bbWF0Y2hJbmRleF07Ci0JfSBlbHNlIHsKLQkJY2xvID0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bbG93SW5kZXhdLmJDaGFubmVsLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJY2hpID0gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9bbG93SW5kZXggKyAxXS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bVJhdGVzOyBpKyspIHsKLQkJCXBOZXdQb3dlci0+dFBvdzJ4W2ldID0gKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsCi0JCQkJCQljbG8sIGNoaSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXhdLnRQb3cyeFtpXSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXggKyAxXS50UG93MnhbaV0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdTE2IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcih1MTYgZnJlcSwKLQkJCQkgICAgICAgc3RydWN0IGNhbF9jdGxfZWRnZXMgKnBSZEVkZ2VzUG93ZXIsCi0JCQkJICAgICAgIGJvb2wgaXMyR0h6LCBpbnQgbnVtX2JhbmRfZWRnZXMpCi17Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgKGkgPCBudW1fYmFuZF9lZGdlcykgJiYKLQkJICAgICAocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7Ci0JCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2ldLmJDaGFubmVsLCBpczJHSHopKSB7Ci0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IHBSZEVkZ2VzUG93ZXJbaV0udFBvd2VyOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKGkgPiAwKSAmJgotCQkJICAgKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgIGlzMkdIeikpKSB7Ci0JCQlpZiAoYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaSAtIDFdLmJDaGFubmVsLAotCQkJCQkgICAgICAgaXMyR0h6KSA8IGZyZXEgJiYKLQkJCSAgICBwUmRFZGdlc1Bvd2VyW2kgLSAxXS5mbGFnKSB7Ci0JCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQotCQkJCQlwUmRFZGdlc1Bvd2VyW2kgLSAxXS50UG93ZXI7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiB0d2ljZU1heEVkZ2VQb3dlcjsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqcFJhd0RhdGFzZXQ7Ci0JdTggKnBDYWxCQ2hhbnMgPSBOVUxMOwotCXUxNiBwZEdhaW5PdmVybGFwX3QyOwotCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107Ci0JdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9QRF9HQUlOU19JTl9NQVNLXTsKLQl1MTYgbnVtUGllcnMsIGksIGo7Ci0JaW50MTZfdCB0TWluQ2FsUG93ZXI7Ci0JdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7IDAsIDAsIDAsIDAgfTsKLQl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7Ci0JaW50MTZfdCBtb2RhbElkeDsKLQotCW1vZGFsSWR4ID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMSA6IDA7Ci0JeHBkTWFzayA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlclttb2RhbElkeF0ueHBkR2FpbjsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9Ci0JCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXJbbW9kYWxJZHhdLnBkR2Fpbk92ZXJsYXA7Ci0JfSBlbHNlIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKLQkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7Ci0JfQotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyMkc7Ci0JCW51bVBpZXJzID0gQVI1NDE2X05VTV8yR19DQUxfUElFUlM7Ci0JfSBlbHNlIHsKLQkJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjVHOwotCQludW1QaWVycyA9IEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTOwotCX0KLQotCW51bVhwZEdhaW4gPSAwOwotCi0JZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7Ci0JCWlmICgoeHBkTWFzayA+PiAoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7Ci0JCQlpZiAobnVtWHBkR2FpbiA+PSBBUjU0MTZfTlVNX1BEX0dBSU5TKQotCQkJCWJyZWFrOwotCQkJeHBkR2FpblZhbHVlc1tudW1YcGRHYWluXSA9Ci0JCQkJKHUxNikoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKTsKLQkJCW51bVhwZEdhaW4rKzsKLQkJfQotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfTlVNX1BEX0dBSU4sCi0JCSAgICAgIChudW1YcGRHYWluIC0gMSkgJiAweDMpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8xLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzBdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMiwKLQkJICAgICAgeHBkR2FpblZhbHVlc1sxXSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzMsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMl0pOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWhwLT5haF9yeGNoYWlubWFzayA9PSA1IHx8IGFocC0+YWhfdHhjaGFpbm1hc2sgPT0gNSkgJiYKLQkJICAgIChpICE9IDApKSB7Ci0JCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOwotCQl9IGVsc2UKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKLQotCQlpZiAocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudHhNYXNrICYgKDEgPDwgaSkpIHsKLQkJCWlmIChJU19DSEFOXzJHSFooY2hhbikpCi0JCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKLQkJCWVsc2UKLQkJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTVHW2ldOwotCi0JCQlhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsIGNoYW4sCi0JCQkJCSAgICBwUmF3RGF0YXNldCwgcENhbEJDaGFucywKLQkJCQkJICAgIG51bVBpZXJzLCBwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCi0JCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7Ci0KLQkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJCVJFR19XUklURShhaCwKLQkJCQkJICBBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgU00ocGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzBdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzEpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1sxXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8yKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMl0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMykKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzNdLAotCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCkpOwotCQkJfQotCi0JCQlyZWdPZmZzZXQgPSBBUl9QSFlfQkFTRSArICg2NzIgPDwgMikgKyByZWdDaGFpbk9mZnNldDsKLQkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQgKiBqICsgMF0gJiAweEZGKSA8PCAwKSB8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAxXSAmIDB4RkYpIDw8IDgpIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDJdICYgMHhGRikgPDwgMTYpfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgM10gJiAweEZGKSA8PCAyNCk7Ci0JCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKLQotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKLQkJCQkJIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKLQkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKLQkJCQkJcmVnMzIpOwotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKLQkJCQkJIlBEQURDOiBDaGFpbiAlZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfCBQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfFxuIiwKLQkJCQkJaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKLQkJCQkJNCAqIGogKyAxLCBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAotCQkJCQk0ICogaiArIDIsIHBkYWRjVmFsdWVzWzQgKiBqICsgMl0sCi0JCQkJCTQgKiBqICsgMywKLQkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7Ci0KLQkJCQlyZWdPZmZzZXQgKz0gNDsKLQkJCX0KLQkJfQotCX0KLQotCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKnBSYXdEYXRhc2V0OwogCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKIAl1MTYgcGRHYWluT3ZlcmxhcF90MjsKIAlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOwotCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKIAl1MTYgbnVtUGllcnMsIGksIGo7CiAJaW50MTZfdCB0TWluQ2FsUG93ZXI7CiAJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7IDAsIDAsIDAsIDAgfTsKKwl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCB9OwogCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKIAogCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIueHBkR2FpbjsKQEAgLTExMjgsMTYgKzczMiwxNiBAQAogCX0KIAogCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CiAKIAludW1YcGRHYWluID0gMDsKIAotCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewotCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewotCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKKwkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKKwkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMpCiAJCQkJYnJlYWs7CiAJCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOworCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CiAJCQludW1YcGRHYWluKys7CiAJCX0KIAl9CkBAIC0xMTQ4LDEyICs3NTIsMTEgQEAKIAkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCiAJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywgMCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KSAmJgorCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCiAJCSAgICAoaSAhPSAwKSkgewogCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKIAkJfSBlbHNlCkBAIC0xMTY4LDcgKzc3MSw3IEBACiAJCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKIAkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKIAotCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJCVJFR19XUklURShhaCwgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAogCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCiAJCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCkBAIC0xMjE2LDI5OCArODE5LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCQkJICBpbnQxNl90ICpyYXRlc0FycmF5LAotCQkJCQkJICB1MTYgY2ZnQ3RsLAotCQkJCQkJICB1MTYgQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJCSAgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkJICB1MTYgcG93ZXJMaW1pdCkKLXsKLSNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4gICAgIDYgIC8qIDEwKmxvZzEwKDIpKjIgKi8KLSNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTiAgIDEwIC8qIDEwKmxvZzEwKDMpKjIgKi8KLQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KLQkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKLQotCWludCBpOwotCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKLQlzdHJ1Y3QgY2FsX2N0bF9kYXRhICpyZXA7Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbSwgdGFyZ2V0UG93ZXJDY2sgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG1FeHQgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMH0gfSwgdGFyZ2V0UG93ZXJDY2tFeHQgPSB7Ci0JCTAsIHsgMCwgMCwgMCwgMCB9Ci0JfTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCB0YXJnZXRQb3dlckh0MjAsIHRhcmdldFBvd2VySHQ0MCA9IHsKLQkJMCwgezAsIDAsIDAsIDB9Ci0JfTsKLQl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOwotCXUxNiBjdGxNb2Rlc0ZvcjExYVtdID0KLQkJeyBDVExfMTFBLCBDVExfNUdIVDIwLCBDVExfMTFBX0VYVCwgQ1RMXzVHSFQ0MCB9OwotCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KLQkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCi0JCSAgQ1RMXzJHSFQ0MAotCQl9OwotCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQlpbnQgdHhfY2hhaW5tYXNrOwotCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKLQotCXR4X2NoYWlubWFzayA9IGFocC0+YWhfdHhjaGFpbm1hc2s7Ci0KLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KAotCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIKLQkJCVtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMF0sCi0JCXBFZXBEYXRhLT5tb2RhbEhlYWRlcgotCQkJW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFsxXSk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KCh1OCl0d2ljZUxhcmdlc3RBbnRlbm5hLAotCQkJCSAgcEVlcERhdGEtPm1vZGFsSGVhZGVyCi0JCQkJICBbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzJdKTsKLQotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAoaW50MTZfdCltaW4oQW50ZW5uYVJlZHVjdGlvbiAtCi0JCQkJCSAgIHR3aWNlTGFyZ2VzdEFudGVubmEsIDApOwotCi0JbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCi0JaWYgKGFoLT5haF90cFNjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgewotCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KLQkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKGFoLT5haF90cFNjYWxlKV0gKiAyKTsKLQl9Ci0KLQlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOwotCi0Jc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyh0eF9jaGFpbm1hc2spKSB7Ci0JY2FzZSAxOgotCQlicmVhazsKLQljYXNlIDI6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47Ci0JCWJyZWFrOwotCX0KLQotCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOwotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0KLQkJCVNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOwotCQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOwotCi0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7Ci0JCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAotCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOwotCi0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7Ci0JCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCi0JCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOwotCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7Ci0JCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOwotCQl9Ci0JfSBlbHNlIHsKLQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKSAtCi0JCQlTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MDsKLQkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExYTsKLQotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1RywKLQkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKLQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjAsCi0JCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7Ci0KLQkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKTsKLQkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MCwKLQkJCQlBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7Ci0JCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUcsCi0JCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOwotCQl9Ci0JfQotCi0JZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKLQkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8Ci0JCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7Ci0JCWlmIChpc0h0NDBDdGxNb2RlKQotCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwotCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKLQkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7Ci0JCWVsc2UKLQkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQkJaWYgKGFyNTQxNl9nZXRfZWVwX3ZlcihhaHApID09IDE0ICYmIGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDw9IDIpCi0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJIkxPT1AtTW9kZSBjdGxNb2RlICVkIDwgJWQsIGlzSHQ0MEN0bE1vZGUgJWQsICIKLQkJCSJFWFRfQURESVRJVkUgJWRcbiIsCi0JCQljdGxNb2RlLCBudW1DdGxNb2RlcywgaXNIdDQwQ3RsTW9kZSwKLQkJCShwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkpOwotCi0JCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X05VTV9DVExTKSAmJiBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCQkiICBMT09QLUN0bGlkeCAlZDogY2ZnQ3RsIDB4JTIuMnggIgotCQkJCSJwQ3RsTW9kZSAweCUyLjJ4IGN0bEluZGV4IDB4JTIuMnggIgotCQkJCSJjaGFuICVkXG4iLAotCQkJCWksIGNmZ0N0bCwgcEN0bE1vZGVbY3RsTW9kZV0sCi0JCQkJcEVlcERhdGEtPmN0bEluZGV4W2ldLCBjaGFuLT5jaGFubmVsKTsKLQotCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAotCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8Ci0JCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KLQkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpKSB7Ci0JCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0KLQkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAotCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSAtIDFdLAotCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwgQVI1NDE2X05VTV9CQU5EX0VER0VTKTsKLQotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCi0JCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgotCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCi0JCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKLQkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJKHR4X2NoYWlubWFzaykpOwotCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwKLQkJCQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCW1pbkN0bFBvd2VyID0gbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKLQkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKLQkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAotCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKLQotCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7Ci0JCWNhc2UgQ1RMXzExQjoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUE6Ci0JCWNhc2UgQ1RMXzExRzoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyT2ZkbS50UG93MngpOyBpKyspIHsKLQkJCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF81R0hUMjA6Ci0JCWNhc2UgQ1RMXzJHSFQyMDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUJfRVhUOgotCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdID0gbWluKCh1MTYpCi0JCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQV9FWFQ6Ci0JCWNhc2UgQ1RMXzExR19FWFQ6Ci0JCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0gbWluKCh1MTYpCi0JCQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0sCi0JCQkJCW1pbkN0bFBvd2VyKTsKLQkJCWJyZWFrOwotCQljYXNlIENUTF81R0hUNDA6Ci0JCWNhc2UgQ1RMXzJHSFQ0MDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KLQkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9Ci0JCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07Ci0JcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOwotCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107Ci0JcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCi0JCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPQotCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzFdOwotCQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0KLQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKLQkJOwotCQlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9Ci0JCQl0YXJnZXRQb3dlckNjay50UG93MnhbM107Ci0JCTsKLQl9Ci0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7Ci0JCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9Ci0JCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKLQkJfQotCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPQotCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXTsKLQkJfQotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkJCSBpbnQxNl90ICpyYXRlc0FycmF5LAogCQkJCQkJIHUxNiBjZmdDdGwsCkBAIC0xNTE1LDggKzgyNyw3IEBACiAJCQkJCQkgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAogCQkJCQkJIHUxNiBwb3dlckxpbWl0KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKnBFZXBEYXRhID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOwogCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKIAlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CiAJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CkBAIC0xNTQ0LDcgKzg1NSw3IEBACiAJaW50IHR4X2NoYWlubWFzazsKIAl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CiAKLQl0eF9jaGFpbm1hc2sgPSBhaHAtPmFoX3R4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIApAQCAtMTU1NSw5ICs4NjYsOSBAQAogCiAJbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOwogCi0JaWYgKGFoLT5haF90cFNjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgeworCWlmIChhaC0+cmVndWxhdG9yeS50cF9zY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKIAkJbWF4UmVnQWxsb3dlZFBvd2VyIC09Ci0JCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+YWhfdHBTY2FsZSldICogMik7CisJCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+cmVndWxhdG9yeS50cF9zY2FsZSldICogMik7CiAJfQogCiAJc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKQEAgLTE2MDUsOCArOTE2LDggQEAKIAkJZWxzZQogCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKIAotCQlpZiAoYXI1NDE2X2dldF9lZXBfdmVyKGFocCkgPT0gMTQgJiYKLQkJCQlhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8PSAyKQorCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQogCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKQEAgLTE3NDMsMTQ4ICsxMDU0LDE0IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSB1MTYgY2ZnQ3RsLAotCQkJIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCSB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCSB1OCBwb3dlckxpbWl0KQorc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICB1MTYgY2ZnQ3RsLAorCQkJCSAgIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICB1OCBwb3dlckxpbWl0KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYocEVlcERhdGEtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07Ci0JaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKLQlpbnQgaTsKLQotCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOwotCi0JaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0JfQotCi0JaWYgKCFhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAotCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKLQkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKLQkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgcG93ZXIgdGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKLQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCi0JCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKLQl9Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9TVUIsCi0JCSAgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IzQ2hhaW4sIDYpCi0JCSAgfCBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjJDaGFpbiwgMCkpOwotCi0JaSA9IHJhdGU2bWI7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQotCQlpID0gcmF0ZUh0NDBfMDsKLQllbHNlIGlmIChJU19DSEFOX0hUMjAoY2hhbikpCi0JCWkgPSByYXRlSHQyMF8wOwotCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0KLQkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7Ci0JZWxzZQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9IHJhdGVzQXJyYXlbaV07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKIAlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwogCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKQEAgLTE5OTYsMzcxICsxMTczLDQzIEBACiAJCWkgPSByYXRlSHQyMF8wOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0KKwkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0KIAkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CiAJZWxzZQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9IHJhdGVzQXJyYXlbaV07CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAoKmF0aDlrX3NldF90eHBvd2VyW10pIChzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICosCi0JCQkJICAgdTE2LCB1OCwgdTgsIHU4KSA9IHsKLQlhdGg5a19od19kZWZfc2V0X3R4cG93ZXIsCi0JYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIKLX07Ci0KLWludCBhdGg5a19od19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX3NldF90eHBvd2VyW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4sIGNmZ0N0bCwKLQkJCXR3aWNlQW50ZW5uYVJlZHVjdGlvbiwgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQlwb3dlckxpbWl0KTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZl9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0jZGVmaW5lIFhQQV9MVkxfRlJFUShjbnQpIChwTW9kYWwtPnhwYUJpYXNMdmxGcmVxW2NudF0pCi0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKLQl1OCBiaWFzbGV2ZWw7Ci0KLQlpZiAoYWgtPmFoX21hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApCi0JCXJldHVybjsKLQotCWlmIChhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCi0JCXJldHVybjsKLQotCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKLQotCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgewotCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7Ci0JfSBlbHNlIHsKLQkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKLQkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCi0JCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQotCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKLQkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKLQotCQlmcmVxQ291bnQrKzsKLQotCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgewotCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKLQkJCQlicmVhazsKLQotCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKLQkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKLQkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJCWZyZXFDb3VudCsrOwotCQl9Ci0JfQotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsIDcsIDEpID0gKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywKLQkJCQkJNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOwotCX0gZWxzZSB7Ci0JCUlOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLAotCQkJCQk2LCAxKSAmICh+MHhjMCkpIHwgYmlhc2xldmVsIDw8IDY7Ci0JfQotI3VuZGVmIFhQQV9MVkxfRlJFUQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfYWRkYWMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwogCXU4IGJpYXNsZXZlbDsKIAotCWlmIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKKwlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKIAkJcmV0dXJuOwogCi0JaWYgKGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCiAJCXJldHVybjsKIAogCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCiAJaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7CiAJCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKLQkJSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSA9Ci0JCSAgKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywgNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPQorCQkgIChJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOwogCX0KIH0KIAotc3RhdGljIHZvaWQgKCphdGg5a19zZXRfYWRkYWNbXSkgKHN0cnVjdCBhdGhfaGFsICosIHN0cnVjdCBhdGg5a19jaGFubmVsICopID0gewotCWF0aDlrX2h3X3NldF9kZWZfYWRkYWMsCi0JYXRoOWtfaHdfc2V0XzRrX2FkZGFjCi19OwotCi12b2lkIGF0aDlrX2h3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlhdGg5a19zZXRfYWRkYWNbYWhwLT5haF9lZXBfbWFwXShhaCwgY2hhbik7Ci19Ci0KLQotCi0vKiBYWFg6IENsZWFuIG1lIHVwLCBtYWtlIG1lIG1vcmUgbGVnaWJsZSAqLwotc3RhdGljIGJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9kZWZfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCWludCBpLCByZWdDaGFpbk9mZnNldDsKLQl1OCB0eFJ4QXR0ZW5Mb2NhbDsKLQl1MTYgYW50X2NvbmZpZzsKLQotCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKLQotCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKLQotCWF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4sIDAsICZhbnRfY29uZmlnKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBhbnRfY29uZmlnKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7Ci0JCQlpZiAoaSA+PSAyKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWhwLT5haF9yeGNoYWlubWFzayA9PSA1IHx8IGFocC0+YWhfdHhjaGFpbm1hc2sgPT0gNSkKLQkJICAgICYmIChpICE9IDApKQotCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKLQkJZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKLQotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsKLQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKLQkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKLQkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKLQotCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJgotCQkJICAgICBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07Ci0JCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCWJzd01hcmdpbltpXSk7Ci0JCQkJCVJFR19STVdfRklFTEQoYWgsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCXJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCWJzd0F0dGVuW2ldKTsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCXhhdHRlbjJNYXJnaW5baV0pOwotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwKLQkJCQkJCXBNb2RhbC0+Ci0JCQkJCQl4YXR0ZW4yRGJbaV0pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikKLQkJCQkJCSAgfCBTTShwTW9kYWwtPgotCQkJCQkJICBic3dNYXJnaW5baV0sCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikpOwotCQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJICByZWdDaGFpbk9mZnNldCwKLQkJCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKLQkJCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikKLQkJCQkJCSAgfCBTTShwTW9kYWwtPmJzd0F0dGVuW2ldLAotCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJICAgICAgQVJfUEhZX1JYR0FJTiArCi0JCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLAotCQkJCQkgICAgICB0eFJ4QXR0ZW5Mb2NhbCk7Ci0JCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJICAgICAgQVJfUEhZX1JYR0FJTiArCi0JCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwKLQkJCQkJICAgICAgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOwotCQkJfSBlbHNlIHsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCSAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkgICB+QVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSB8Ci0JCQkJCSAgU00odHhSeEF0dGVuTG9jYWwsCi0JCQkJCSAgICAgQVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSk7Ci0JCQkJUkVHX1dSSVRFKGFoLAotCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikgfAotCQkJCQkgIFNNKHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldLAotCQkJCQkgICAgIEFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0JfUywKLQkJCQkJCSAgcE1vZGFsLT5vYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKLQkJfSBlbHNlIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjUsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjVfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9Ci0JCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCi0JCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCi0JCQkJCSAgcE1vZGFsLT54cGFCaWFzTHZsKTsKLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBUywKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBU19TLAotCQkJCQkgIHBNb2RhbC0+bG9jYWxfYmlhcyk7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIkZvcmNlWFBBb246ICVkXG4iLAotCQkJcE1vZGFsLT5mb3JjZV94cGFvbik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9YUEFfQ0ZHLCBBUl9QSFlfRk9SQ0VfWFBBX0NGRywKLQkJCSAgICAgIHBNb2RhbC0+Zm9yY2VfeHBhb24pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKLQkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAotCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfUEdBLAotCQkJICAgICAgcE1vZGFsLT5wZ2FEZXNpcmVkU2l6ZSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKLQkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCX0gZWxzZSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EsCi0JCQkgICAgICBBUl9QSFlfRVhUX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCX0KLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAotCQkJICAgICAgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKLQkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlpbnQgcmVnQ2hhaW5PZmZzZXQ7CiAJdTggdHhSeEF0dGVuTG9jYWw7Ci0JdTE2IGFudF9jb25maWcgPSAwOwogCXU4IG9iWzVdLCBkYjFbNV0sIGRiMls1XTsKIAl1OCBhbnRfZGl2X2NvbnRyb2wxLCBhbnRfZGl2X2NvbnRyb2wyOwogCXUzMiByZWdWYWw7CkBAIC0yMzcwLDggKzEyMTksOCBAQAogCiAJdHhSeEF0dGVuTG9jYWwgPSAyMzsKIAotCWF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4sIDAsICZhbnRfY29uZmlnKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBhbnRfY29uZmlnKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAorCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuKSk7CiAKIAlyZWdDaGFpbk9mZnNldCA9IDA7CiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKQEAgLTI1NDAsMjA3ICsxMzg5LDIzMyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCAoKmF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW10pKHN0cnVjdCBhdGhfaGFsICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqKSA9IHsKLQlhdGg5a19od19lZXByb21fc2V0X2RlZl9ib2FyZF92YWx1ZXMsCi0JYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMKLX07Ci0KLWJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4pOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9kZWZfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgIHU4IGluZGV4LCB1MTYgKmNvbmZpZykKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFocC0+YWhfZWVwcm9tLmRlZjsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAoaW5kZXgpIHsKLQljYXNlIDA6Ci0JCSpjb25maWcgPSBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Ci0JCXJldHVybiAwOwotCWNhc2UgMToKLQkJaWYgKHBCYXNlLT52ZXJzaW9uID49IDB4MEUwRCkgewotCQkJaWYgKHBNb2RhbC0+dXNlQW50MSkgewotCQkJCSpjb25maWcgPQotCQkJCSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGMDAwMCkgPj4gMTYpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF80a19lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCi0Jc3dpdGNoIChpbmRleCkgewotCWNhc2UgMDoKLQkJKmNvbmZpZyA9IHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKIH0KIAotc3RhdGljIGludCAoKmF0aDlrX2dldF9lZXByb21fYW50ZW5uYV9jZmdbXSkoc3RydWN0IGF0aF9oYWwgKiwKLQkJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqLAotCQkJCQkgICAgIHU4LCB1MTYgKikgPSB7Ci0JYXRoOWtfaHdfZ2V0X2RlZl9lZXByb21fYW50ZW5uYV9jZmcsCi0JYXRoOWtfaHdfZ2V0XzRrX2VlcHJvbV9hbnRlbm5hX2NmZwotfTsKLQotaW50IGF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZ1thaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuLAotCQkJCQkJCSAgICAgaW5kZXgsIGNvbmZpZyk7Ci19Ci0KLXN0YXRpYyB1OCBhdGg5a19od19nZXRfNGtfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHU4IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQogewogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdTggYXRoOWtfaHdfZ2V0X2RlZl9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYoZWVwLT5tb2RhbEhlYWRlcltBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPT0gZnJlcV9iYW5kXSk7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCXU4IG51bV9hbnRfY29uZmlnOwotCi0JbnVtX2FudF9jb25maWcgPSAxOwotCi0JaWYgKHBCYXNlLT52ZXJzaW9uID49IDB4MEUwRCkKLQkJaWYgKHBNb2RhbC0+dXNlQW50MSkKLQkJCW51bV9hbnRfY29uZmlnICs9IDE7Ci0KLQlyZXR1cm4gbnVtX2FudF9jb25maWc7Ci19Ci0KLXN0YXRpYyB1OCAoKmF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kKSA9IHsKLQlhdGg5a19od19nZXRfZGVmX251bV9hbnRfY29uZmlnLAotCWF0aDlrX2h3X2dldF80a19udW1fYW50X2NvbmZpZwotfTsKLQotdTggYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JcmV0dXJuIGF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1thaHAtPmFoX2VlcF9tYXBdKGFoLCBmcmVxX2JhbmQpOwotfQotCi11MTYgYXRoOWtfaHdfZWVwcm9tX2dldF9zcHVyX2NoYW4oc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCitzdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKIHsKICNkZWZpbmUgRUVQX01BUDRLX1NQVVJDSEFOIFwKLQkoYWhwLT5haF9lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQotI2RlZmluZSBFRVBfREVGX1NQVVJDSEFOIFwKLQkoYWhwLT5haF9lZXByb20uZGVmLm1vZGFsSGVhZGVyW2lzMkdIel0uc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJKGFoLT5lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCiAJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCi0JCWksIGlzMkdIeiwgYWgtPmFoX2NvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CiAKLQlzd2l0Y2ggKGFoLT5haF9jb25maWcuc3B1cm1vZGUpIHsKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKIAljYXNlIFNQVVJfRElTQUJMRToKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKLQkJc3B1cl92YWwgPSBhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006Ci0JCWlmIChhaHAtPmFoX2VlcF9tYXAgPT0gRUVQX01BUF80S0JJVFMpCi0JCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKLQkJZWxzZQotCQkJc3B1cl92YWwgPSBFRVBfREVGX1NQVVJDSEFOOworCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKIAkJYnJlYWs7Ci0KIAl9CiAKIAlyZXR1cm4gc3B1cl92YWw7Ci0jdW5kZWYgRUVQX0RFRl9TUFVSQ0hBTgorCiAjdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfZ2V0X2VlcHJvbV80ayhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfNGtfb3BzID0geworCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfNGtfY2hlY2tfZWVwcm9tLAorCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2ZpbGxfZWVwcm9tLAorCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlciwKKwkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZywKKwkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCisJLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od180a19zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfNGtfc2V0X2FkZGFjLAorCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od180a19zZXRfdHhwb3dlciwKKwkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwKK307CiAKLQlzd2l0Y2ggKHBhcmFtKSB7Ci0JY2FzZSBFRVBfTkZUSFJFU0hfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDApOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOwotCWNhc2UgQVJfRUVQUk9NX01BQygxKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMik6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07Ci0JY2FzZSBFRVBfUkVHXzA6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOwotCWNhc2UgRUVQX1JFR18xOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKLQljYXNlIEVFUF9PUF9DQVA6Ci0JCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOwotCWNhc2UgRUVQX09QX01PREU6Ci0JCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKLQljYXNlIEVFUF9SRl9TSUxFTlQ6Ci0JCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbC0+b2JfMDE7Ci0JY2FzZSBFRVBfREJfMjoKLQkJcmV0dXJuIHBNb2RhbC0+ZGIxXzAxOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIG5vbi00SyAoRGVmYXVsdCkgY2FyZHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2dldF9lZXByb21fZGVmKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQorCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwX2RhdGE7CisJaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7CisKKwllZXBfZGF0YSA9ICh1MTYgKillZXA7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCisJCQkJCSBlZXBfZGF0YSkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisJcmV0dXJuIHRydWU7CisjdW5kZWYgU0laRV9FRVBST01fREVGCit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkciwgc2l6ZTsKKworCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsCisJCQkJICZtYWdpYykpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisKKwkJaWYgKG1hZ2ljICE9IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCW1hZ2ljMiA9IHN3YWIxNihtYWdpYyk7CisKKwkJCWlmIChtYWdpYzIgPT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgeworCQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKTsKKwkJCQluZWVkX3N3YXAgPSB0cnVlOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKKwkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7CisJCQkJCSplZXBkYXRhID0gdGVtcDsKKwkJCQkJZWVwZGF0YSsrOworCisJCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkJCSIweCUwNFggICIsICplZXBkYXRhKTsKKworCQkJCQlpZiAoKChhZGRyICsgMSkgJSA2KSA9PSAwKQorCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCisJCQkJCQkJQVRIX0RCR19FRVBST00sICJcbiIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKKwkJCQkJImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CisKKwlpZiAobmVlZF9zd2FwKQorCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoOworCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXIsIGo7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcgXG4iKTsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOworCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7CisJCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOworCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7CisJCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKKwkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKKwkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisJCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CisJCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQkJfQorCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAorCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKKwkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOworI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKIAlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0gZWVwLT5tb2RhbEhlYWRlcjsKIAlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CiAKQEAgLTI3NzQsNyArMTY0OSw3IEBACiAJY2FzZSBFRVBfREJfMjoKIAkJcmV0dXJuIHBNb2RhbFsxXS5kYjsKIAljYXNlIEVFUF9NSU5PUl9SRVY6Ci0JCXJldHVybiBwQmFzZS0+dmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0s7CisJCXJldHVybiBBUjU0MTZfVkVSX01BU0s7CiAJY2FzZSBFRVBfVFhfTUFTSzoKIAkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CiAJY2FzZSBFRVBfUlhfTUFTSzoKQEAgLTI3ODMsNDIgKzE2NTgsMTIxMiBAQAogCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7CiAJY2FzZSBFRVBfVFhHQUlOX1RZUEU6CiAJCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKLQorCWNhc2UgRUVQX09MX1BXUkNUUkw6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPm9wZW5Mb29wUHdyQ250bCA/IHRydWUgOiBmYWxzZTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCWNhc2UgRUVQX1JDX0NIQUlOX01BU0s6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPnJjQ2hhaW5NYXNrOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9EQUNfSFBXUl81RzoKKwkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkKKwkJCXJldHVybiBwQmFzZS0+ZGFjSGlQd3JNb2RlXzVHOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9GUkFDX05fNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIpCisJCQlyZXR1cm4gcEJhc2UtPmZyYWNfbl81ZzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQorI3VuZGVmIEFSNTQxNl9WRVJfTUFTSwogfQogCi1zdGF0aWMgdTMyICgqYXRoOWtfZ2V0X2VlcHJvbVtdKShzdHJ1Y3QgYXRoX2hhbCAqLCBlbnVtIGVlcHJvbV9wYXJhbSkgPSB7Ci0JYXRoOWtfaHdfZ2V0X2VlcHJvbV9kZWYsCi0JYXRoOWtfaHdfZ2V0X2VlcHJvbV80aworLyogWFhYOiBDbGVhbiBtZSB1cCwgbWFrZSBtZSBtb3JlIGxlZ2libGUgKi8KK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCWludCBpLCByZWdDaGFpbk9mZnNldDsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CisJCQlpZiAoaSA+PSAyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgJiYKKwkJICAgIChhaC0+cnhjaGFpbm1hc2sgPT0gNSB8fCBhaC0+dHhjaGFpbm1hc2sgPT0gNSkKKwkJICAgICYmIChpICE9IDApKQorCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJZWxzZQorCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLAorCQkJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsKKwkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgeworCQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCQkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoW2ldOworCQkJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCXJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCQkJCXBNb2RhbC0+CisJCQkJCQlic3dNYXJnaW5baV0pOworCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAorCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCisJCQkJCQlyZWdDaGFpbk9mZnNldCwKKwkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwKKwkJCQkJCXBNb2RhbC0+CisJCQkJCQlic3dBdHRlbltpXSk7CisJCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCXJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKKwkJCQkJCXBNb2RhbC0+CisJCQkJCQl4YXR0ZW4yTWFyZ2luW2ldKTsKKwkJCQkJUkVHX1JNV19GSUVMRChhaCwKKwkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKworCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsCisJCQkJCQlwTW9kYWwtPgorCQkJCQkJeGF0dGVuMkRiW2ldKTsKKwkJCQl9IGVsc2UgeworCQkJCQlSRUdfV1JJVEUoYWgsCisJCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFogKworCQkJCQkJICByZWdDaGFpbk9mZnNldCwKKwkJCQkJCSAgKFJFR19SRUFEKGFoLAorCQkJCQkJCSAgICBBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pCisJCQkJCQkgIHwgU00ocE1vZGFsLT4KKwkJCQkJCSAgYnN3TWFyZ2luW2ldLAorCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pKTsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQkgIChSRUdfUkVBRChhaCwKKwkJCQkJCQkgICAgQVJfUEhZX0dBSU5fMkdIWiArCisJCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCisJCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pCisJCQkJCQkgIHwgU00ocE1vZGFsLT5ic3dBdHRlbltpXSwKKwkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCSAgICAgIEFSX1BIWV9SWEdBSU4gKworCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwKKwkJCQkJICAgICAgdHhSeEF0dGVuTG9jYWwpOworCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCSAgICAgIEFSX1BIWV9SWEdBSU4gKworCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sCisJCQkJCSAgICAgIHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAoUkVHX1JFQUQoYWgsCisJCQkJCQkgICAgQVJfUEhZX1JYR0FJTiArCisJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCQkJICAgfkFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikgfAorCQkJCQkgIFNNKHR4UnhBdHRlbkxvY2FsLAorCQkJCQkgICAgIEFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikpOworCQkJCVJFR19XUklURShhaCwKKwkJCQkJICBBUl9QSFlfR0FJTl8yR0haICsKKwkJCQkJICByZWdDaGFpbk9mZnNldCwKKwkJCQkJICAoUkVHX1JFQUQoYWgsCisJCQkJCQkgICAgQVJfUEhZX0dBSU5fMkdIWiArCisJCQkJCQkgICAgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pIHwKKwkJCQkJICBTTShwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSwKKwkJCQkJICAgICBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0JfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0gZWxzZSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKKwkJfQorCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkwsCisJCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTF9TLAorCQkJCQkgIHBNb2RhbC0+eHBhQmlhc0x2bCk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVMsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVNfUywKKwkJCQkJICBwTW9kYWwtPmxvY2FsX2JpYXMpOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sICJGb3JjZVhQQW9uOiAlZFxuIiwKKwkJCXBNb2RhbC0+Zm9yY2VfeHBhb24pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfWFBBX0NGRywgQVJfUEhZX0ZPUkNFX1hQQV9DRkcsCisJCQkgICAgICBwTW9kYWwtPmZvcmNlX3hwYW9uKTsKKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCSAgICAgIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLCBBUl9QSFlfREVTSVJFRF9TWl9BREMsCisJCSAgICAgIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOworCisJaWYgKCFBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKKwkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1BHQSwKKwkJCSAgICAgIHBNb2RhbC0+cGdhRGVzaXJlZFNpemUpOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMNCwKKwkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKQorCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9IGVsc2UgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUl9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBLAorCQkJICAgICAgQVJfUEhZX0VYVF9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NLX1RYX0NUUkwsCisJCQkJQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0ssCisJCQkJcE1vZGFsLT5taXNjQml0cyk7CisKKworCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCisJCQkJCWVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCQllbHNlIGlmIChlZXAtPmJhc2VFZXBIZWFkZXIuZGFjSGlQd3JNb2RlXzVHKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsIDApOworCQllbHNlCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkJZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0xwTW9kZSk7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZSQU1FX0NUTCwgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLAorCQkJCXBNb2RhbC0+bWlzY0JpdHMgPj4gMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LAorCQkJCUFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSywKKwkJCQllZXAtPmJhc2VFZXBIZWFkZXIuZGVzaXJlZFNjYWxlQ0NLKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBBUjU0MTZfVkVSX01BU0sKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKyNkZWZpbmUgWFBBX0xWTF9GUkVRKGNudCkgKHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbY250XSkKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXU4IGJpYXNsZXZlbDsKKworCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQlyZXR1cm47CisKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCisJCXJldHVybjsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJfSBlbHNlIHsKKwkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKKwkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCisJCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKKwkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKKworCQlmcmVxQ291bnQrKzsKKworCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgeworCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKKwkJCQlicmVhazsKKworCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKKwkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKKwkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJCWZyZXFDb3VudCsrOworCQl9CisJfQorCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKKwl9IGVsc2UgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTYsIDEpICYgKH4weGMwKSkgfCBiaWFzbGV2ZWwgPDwgNjsKKwl9CisjdW5kZWYgWFBBX0xWTF9GUkVRCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhU2V0LAorCQkJCXU4ICpiQ2hhbnMsIHUxNiBhdmFpbFBpZXJzLAorCQkJCXUxNiB0UGRHYWluT3ZlcmxhcCwgaW50MTZfdCAqcE1pbkNhbFBvd2VyLAorCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCisJCQkJdTE2IG51bVhwZEdhaW5zKQoreworCWludCBpLCBqLCBrOworCWludDE2X3Qgc3M7CisJdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlUltBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlSVtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisKKwl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7CisJdTggbWluUHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJdTggbWF4UHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJaW50MTZfdCB2cGRTdGVwOworCWludDE2X3QgdG1wVmFsOworCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7CisJYm9vbCBtYXRjaDsKKwlpbnQxNl90IG1pbkRlbHRhID0gMDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CisJCWlmIChiQ2hhbnNbbnVtUGllcnNdID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKwl9CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAorCQkJCQkJCSAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJCQkJICAgICAgIGJDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI1NDE2X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVSW2ldKTsKKworCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKKwkJCQl2cGRUYWJsZUlbaV1bal0gPQorCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCisJCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCisJCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgorCQkJCQkJICAgICAgIChjaGFuKSksCisJCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKworCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CisJCX0gZWxzZSB7CisJCQltaW5EZWx0YSA9IDA7CisJCX0KKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQkJZWxzZQorCQkJCXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQorCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisJCX0KKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKKwkJCXNzKys7CisJCX0KKworCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCisJCQkJKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKKworCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9IHZwZFRhYmxlSVtpXVtzcysrXTsKKwkJfQorCisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCisJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJaWYgKHRndEluZGV4ID4gbWF4SW5kZXgpIHsKKwkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCisJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKKwkJCQl0bXBWYWwgPSAoaW50MTZfdCkoKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gKworCQkJCQkJICAgIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisJCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KKwkJCQkJCQkgMjU1IDogdG1wVmFsKTsKKwkJCQlzcysrOworCQkJfQorCQl9CisJfQorCisJd2hpbGUgKGkgPCBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSykgeworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IHBQZEdhaW5Cb3VuZGFyaWVzW2kgLSAxXTsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKKwkJaysrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCit7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OworCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKKwl1MTYgcGRHYWluT3ZlcmxhcF90MjsKKwlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOworCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IG51bVBpZXJzLCBpLCBqOworCWludDE2X3QgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07CisJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OworCWludDE2X3QgbW9kYWxJZHg7CisKKwltb2RhbElkeCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDEgOiAwOworCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXJbbW9kYWxJZHhdLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyW21vZGFsSWR4XS5wZEdhaW5PdmVybGFwOworCX0gZWxzZSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCX0KKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCX0gZWxzZSB7CisJCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXI1RzsKKwkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUzsKKwl9CisKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgJiYgSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCWFoLT5pbml0UERBREMgPSAoKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKQorCQkJCSBwUmF3RGF0YXNldCktPnZwZFBkZ1swXVswXTsKKwl9CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisJCQllbHNlCisJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKKworCisJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQl1OCBwY2RhY0lkeDsKKwkJCQl1OCB0eFBvd2VyOworCisJCQkJYXRoOWtfZ2V0X3R4Z2Fpbl9pbmRleChhaCwgY2hhbiwKKwkJCQkoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopcFJhd0RhdGFzZXQsCisJCQkJcENhbEJDaGFucywgbnVtUGllcnMsICZ0eFBvd2VyLCAmcGNkYWNJZHgpOworCQkJCWF0aDlrX29sY19nZXRfcGRhZGNzKGFoLCBwY2RhY0lkeCwKKwkJCQkJCSAgICAgdHhQb3dlci8yLCBwZGFkY1ZhbHVlcyk7CisJCQl9IGVsc2UgeworCQkJCWF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwKKwkJCQkJCQljaGFuLCBwUmF3RGF0YXNldCwKKwkJCQkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCQlwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJCSZ0TWluQ2FsUG93ZXIsCisJCQkJCQkJZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkJcGRhZGNWYWx1ZXMsCisJCQkJCQkJbnVtWHBkR2Fpbik7CisJCQl9CisKKwkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQkJCVJFR19XUklURShhaCwKKwkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJCVNNKDB4NiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCQkJCQlTTV9QRF9HQUlOKDEpIHwgU01fUERfR0FJTigyKSB8CisJCQkJCQlTTV9QRF9HQUlOKDMpIHwgU01fUERfR0FJTig0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKXwKKwkJCQkJCVNNX1BER0FJTl9CKDAsIDEpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDEsIDIpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDIsIDMpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDMsIDQpKTsKKwkJCQl9CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8IFBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworCisJcmV0dXJuIHRydWU7CisjdW5kZWYgU01fUERfR0FJTgorI3VuZGVmIFNNX1BER0FJTl9CCit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCQkJICBpbnQxNl90ICpyYXRlc0FycmF5LAorCQkJCQkJICB1MTYgY2ZnQ3RsLAorCQkJCQkJICB1MTYgQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJCSAgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJICB1MTYgcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4gICAgIDYgIC8qIDEwKmxvZzEwKDIpKjIgKi8KKyNkZWZpbmUgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTiAgIDEwIC8qIDEwKmxvZzEwKDMpKjIgKi8KKworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CisJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KKwkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKKworCWludCBpOworCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhICpyZXA7CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbSwgdGFyZ2V0UG93ZXJDY2sgPSB7CisJCTAsIHsgMCwgMCwgMCwgMH0KKwl9OworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG1FeHQgPSB7CisJCTAsIHsgMCwgMCwgMCwgMH0gfSwgdGFyZ2V0UG93ZXJDY2tFeHQgPSB7CisJCTAsIHsgMCwgMCwgMCwgMCB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCB0YXJnZXRQb3dlckh0MjAsIHRhcmdldFBvd2VySHQ0MCA9IHsKKwkJMCwgezAsIDAsIDAsIDB9CisJfTsKKwl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOworCXUxNiBjdGxNb2Rlc0ZvcjExYVtdID0KKwkJeyBDVExfMTFBLCBDVExfNUdIVDIwLCBDVExfMTFBX0VYVCwgQ1RMXzVHSFQ0MCB9OworCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KKwkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCisJCSAgQ1RMXzJHSFQ0MAorCQl9OworCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlpbnQgdHhfY2hhaW5tYXNrOworCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKKworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgoCisJCXBFZXBEYXRhLT5tb2RhbEhlYWRlcgorCQkJW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFswXSwKKwkJcEVlcERhdGEtPm1vZGFsSGVhZGVyCisJCQlbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzFdKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgoKHU4KXR3aWNlTGFyZ2VzdEFudGVubmEsCisJCQkJICBwRWVwRGF0YS0+bW9kYWxIZWFkZXIKKwkJCQkgIFtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMl0pOworCisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KKwkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisKKwlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CisJCW1heFJlZ0FsbG93ZWRQb3dlciAtPQorCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOworCX0KKworCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CisKKwlzd2l0Y2ggKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU47CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc2NhbGVkUG93ZXIgLT0gUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJfQorCisJc2NhbGVkUG93ZXIgPSBtYXgoKHUxNikwLCBzY2FsZWRQb3dlcik7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLQorCQkJU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDA7CisJCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7CisKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckNjaywgNCwgZmFsc2UpOworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKKwkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjAsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7CisKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKTsKKwkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQ0MCwKKwkJCQlBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7CisJCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyQ2NrRXh0LCA0LCB0cnVlKTsKKwkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7CisJCX0KKwl9IGVsc2UgeworCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWEpIC0KKwkJCVNVQl9OVU1fQ1RMX01PREVTX0FUXzVHXzQwOworCQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFhOworCisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHLAorCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOworCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHSFQyMCwKKwkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKKworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWEpOworCQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUdIVDQwLAorCQkJCUFSNTQxNl9OVU1fNUdfNDBfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKKwkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1RywKKwkJCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7CisJCX0KKwl9CisKKwlmb3IgKGN0bE1vZGUgPSAwOyBjdGxNb2RlIDwgbnVtQ3RsTW9kZXM7IGN0bE1vZGUrKykgeworCQlib29sIGlzSHQ0MEN0bE1vZGUgPSAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzVHSFQ0MCkgfHwKKwkJCShwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfMkdIVDQwKTsKKwkJaWYgKGlzSHQ0MEN0bE1vZGUpCisJCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CisJCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQorCQkJZnJlcSA9IGNlbnRlcnMuZXh0X2NlbnRlcjsKKwkJZWxzZQorCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKKworCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQorCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCisJCQkiRVhUX0FERElUSVZFICVkXG4iLAorCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCisJCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKKworCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYgcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkJIiAgTE9PUC1DdGxpZHggJWQ6IGNmZ0N0bCAweCUyLjJ4ICIKKwkJCQkicEN0bE1vZGUgMHglMi4yeCBjdGxJbmRleCAweCUyLjJ4ICIKKwkJCQkiY2hhbiAlZFxuIiwKKwkJCQlpLCBjZmdDdGwsIHBDdGxNb2RlW2N0bE1vZGVdLAorCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXSwgY2hhbi0+Y2hhbm5lbCk7CisKKwkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKKwkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYgQ1RMX01PREVfTSkgfCBTRF9OT19DVEwpKSkgeworCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOworCisJCQkJdHdpY2VNaW5FZGdlUG93ZXIgPSBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKKwkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykgLSAxXSwKKwkJCQlJU19DSEFOXzJHSFooY2hhbiksIEFSNTQxNl9OVU1fQkFORF9FREdFUyk7CisKKwkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAorCQkJCQkiICAgIE1BVENILUVFX0lEWCAlZDogY2ggJWQgaXMyICVkICIKKwkJCQkJIjJ4TWluRWRnZSAlZCBjaGFpbm1hc2sgJWQgY2hhaW5zICVkXG4iLAorCQkJCQlpLCBmcmVxLCBJU19DSEFOXzJHSFooY2hhbiksCisJCQkJCXR3aWNlTWluRWRnZVBvd2VyLCB0eF9jaGFpbm1hc2ssCisJCQkJCWFyNTQxNl9nZXRfbnR4Y2hhaW5zCisJCQkJCSh0eF9jaGFpbm1hc2spKTsKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBtaW4odHdpY2VNYXhFZGdlUG93ZXIsCisJCQkJCQkJCXR3aWNlTWluRWRnZVBvd2VyKTsKKwkJCQl9IGVsc2UgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQltaW5DdGxQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsCisJCQkiICAgIFNFTC1NaW4gY3RsTW9kZSAlZCBwQ3RsTW9kZSAlZCAiCisJCQkiMnhNYXhFZGdlICVkIHNQICVkIG1pbkN0bFB3ciAlZFxuIiwKKwkJCWN0bE1vZGUsIHBDdGxNb2RlW2N0bE1vZGVdLCB0d2ljZU1heEVkZ2VQb3dlciwKKwkJCXNjYWxlZFBvd2VyLCBtaW5DdGxQb3dlcik7CisKKwkJc3dpdGNoIChwQ3RsTW9kZVtjdGxNb2RlXSkgeworCQljYXNlIENUTF8xMUI6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckNjay50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlckNjay50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckNjay50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFBOgorCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDIwOgorCQljYXNlIENUTF8yR0hUMjA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFCX0VYVDoKKwkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUFfRVhUOgorCQljYXNlIENUTF8xMUdfRVhUOgorCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDQwOgorCQljYXNlIENUTF8yR0hUNDA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF0ZXNBcnJheVtyYXRlNm1iXSA9IHJhdGVzQXJyYXlbcmF0ZTltYl0gPSByYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJCXJhdGVzQXJyYXlbcmF0ZTE4bWJdID0gcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTM2bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU0OG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMl07CisJcmF0ZXNBcnJheVtyYXRlNTRtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzNdOworCXJhdGVzQXJyYXlbcmF0ZVhyXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKQorCQlyYXRlc0FycmF5W3JhdGVIdDIwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQyMC50UG93MnhbaV07CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlMnNdID0gcmF0ZXNBcnJheVtyYXRlMmxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKKwkJcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9CisJCQl0YXJnZXRQb3dlckNjay50UG93MnhbMl07CisJCTsKKwkJcmF0ZXNBcnJheVtyYXRlMTFzXSA9IHJhdGVzQXJyYXlbcmF0ZTExbF0gPQorCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCQk7CisJfQorCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgeworCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQorCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07CisJCX0KKwkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0KKwkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgUlRfQVJfREVMVEEoeCkgKHJhdGVzQXJyYXlbeF0gLSBjY2tfb2ZkbV9kZWx0YSkKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKHBFZXBEYXRhLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGksIGNja19vZmRtX2RlbHRhID0gMDsKKworCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJfQorCisJaWYgKCFhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAorCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKKwkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKKwkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSAiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgcG93ZXIgdGFibGVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7CisJCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7CisJCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQorCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKKwkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOworCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJY2NrX29mZG1fZGVsdGEgPSAyOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUycyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUybCksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMWwpLCAwKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExcyksIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMWwpLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81cyksIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNWwpLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOworCQl9CisJfQorCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKworCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7CisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlRXh0Q2NrKSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUR1cENjayksIDApKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOworCQl9CisJfQorCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfU1VCLAorCQkgIEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yM0NoYWluLCA2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IyQ2hhaW4sIDApKTsKKworCWkgPSByYXRlNm1iOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJaSA9IHJhdGVIdDQwXzA7CisJZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpID0gcmF0ZUh0MjBfMDsKKworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPQorCQkJcmF0ZXNBcnJheVtpXSArIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwllbHNlCisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisKKwlzd2l0Y2goYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSkgeworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggYXRoOWtfaHdfZGVmX2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJJihlZXAtPm1vZGFsSGVhZGVyW0FUSDlLX0hBTF9GUkVRX0JBTkRfMkdIWiA9PSBmcmVxX2JhbmRdKTsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CisJdTggbnVtX2FudF9jb25maWc7CisKKwludW1fYW50X2NvbmZpZyA9IDE7CisKKwlpZiAocEJhc2UtPnZlcnNpb24gPj0gMHgwRTBEKQorCQlpZiAocE1vZGFsLT51c2VBbnQxKQorCQkJbnVtX2FudF9jb25maWcgKz0gMTsKKworCXJldHVybiBudW1fYW50X2NvbmZpZzsKK30KKworc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7CisKKwlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGOworfQorCitzdGF0aWMgdTE2IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9ERUZfU1BVUkNIQU4gXAorCShhaC0+ZWVwcm9tLmRlZi5tb2RhbEhlYWRlcltpczJHSHpdLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbikKKworCXUxNiBzcHVyX3ZhbCA9IEFSX05PX1NQVVI7CisKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCSJHZXR0aW5nIHNwdXIgaWR4ICVkIGlzMkdoei4gJWQgdmFsICV4XG4iLAorCQlpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOworCisJc3dpdGNoIChhaC0+Y29uZmlnLnNwdXJtb2RlKSB7CisJY2FzZSBTUFVSX0RJU0FCTEU6CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfSU9DVEw6CisJCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOworCQlicmVhazsKKwljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKKwkJc3B1cl92YWwgPSBFRVBfREVGX1NQVVJDSEFOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3B1cl92YWw7CisKKyN1bmRlZiBFRVBfREVGX1NQVVJDSEFOCit9CisKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfZGVmX29wcyA9IHsKKwkuY2hlY2tfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcsCisJLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfZGVmX3NldF9hZGRhYywKKwkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwKIH07CiAKLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbVthaHAtPmFoX2VlcF9tYXBdKGFoLCBwYXJhbSk7Ci19Ci0KLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBzdGF0dXM7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlhdGg5a19od19mbGFzaF9tYXAoYWgpOworCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCWFoLT5lZXBfbWFwID0gRUVQX01BUF80S0JJVFM7CisJCWFoLT5lZXBfb3BzID0gJmVlcF80a19vcHM7CisJfSBlbHNlIHsKKwkJYWgtPmVlcF9tYXAgPSBFRVBfTUFQX0RFRkFVTFQ7CisJCWFoLT5lZXBfb3BzID0gJmVlcF9kZWZfb3BzOworCX0KIAotCWlmIChBUl9TUkVWXzkyODUoYWgpKQotCQlhaHAtPmFoX2VlcF9tYXAgPSBFRVBfTUFQXzRLQklUUzsKLQllbHNlCi0JCWFocC0+YWhfZWVwX21hcCA9IEVFUF9NQVBfREVGQVVMVDsKLQotCWlmICghYXRoOWtfaHdfZmlsbF9lZXByb20oYWgpKQorCWlmICghYWgtPmVlcF9vcHMtPmZpbGxfZWVwcm9tKGFoKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlzdGF0dXMgPSBhdGg5a19od19jaGVja19lZXByb20oYWgpOworCXN0YXR1cyA9IGFoLT5lZXBfb3BzLT5jaGVja19lZXByb20oYWgpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmNjEwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgRUVQUk9NX0gKKyNkZWZpbmUgRUVQUk9NX0gKKworI2RlZmluZSBBSF9VU0VfRUVQUk9NICAgMHgxCisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKKyNlbHNlCisjZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUMgMHhhNTVhCisjZW5kaWYKKworI2RlZmluZSBDVFJZX0RFQlVHICAgMHgxZmYKKyNkZWZpbmUJQ1RSWV9ERUZBVUxUIDAKKworI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0NPTVBSRVNTX0RJUyAgIDB4MDAwMQorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0FFU19ESVMgICAgICAgIDB4MDAwMgorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0ZBU1RGUkFNRV9ESVMgIDB4MDAwNAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0JVUlNUX0RJUyAgICAgIDB4MDAwOAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX01BWFFDVSAgICAgICAgIDB4MDFGMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX01BWFFDVV9TICAgICAgIDQKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9IRUFWWV9DTElQX0VOICAweDAyMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTICAgICAweEYwMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTX1MgICAxMgorCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCAgIDB4MDA0MAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiAgICAweDAwODAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19NSURCQU5EICAgIDB4MDIwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REICAgICAweDA0MDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUEgICAgMHgwODAwCisKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERF9QUkU0XzAgIDB4NDAwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQV9QUkU0XzAgMHg4MDAwCisKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQgIDB4MAorI2RlZmluZSBBUjU0MTZfRUVQUk9NX1MgICAgICAgICAgICAgMgorI2RlZmluZSBBUjU0MTZfRUVQUk9NX09GRlNFVCAgICAgICAgMHgyMDAwCisjZGVmaW5lIEFSNTQxNl9FRVBST01fTUFYICAgICAgICAgICAweGFlMAorCisjZGVmaW5lIEFSNTQxNl9FRVBST01fU1RBUlRfQUREUiBcCisJKEFSX1NSRVZfOTEwMChhaCkpID8gMHgxZmZmMTAwMCA6IDB4NTAzZjEyMDAKKworI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCisjZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgQ1RMX01PREVfTSAgICAgICAgICAgICAgNworI2RlZmluZSBDVExfMTFBICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENUTF8xMUIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1RMXzExRyAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDVExfMkdIVDIwICAgICAgICAgICAgICA1CisjZGVmaW5lIENUTF81R0hUMjAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQ1RMXzJHSFQ0MCAgICAgICAgICAgICAgNworI2RlZmluZSBDVExfNUdIVDQwICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgRVhUX0FERElUSVZFICgweDgwMDApCisjZGVmaW5lIENUTF8xMUFfRVhUIChDVExfMTFBIHwgRVhUX0FERElUSVZFKQorI2RlZmluZSBDVExfMTFHX0VYVCAoQ1RMXzExRyB8IEVYVF9BRERJVElWRSkKKyNkZWZpbmUgQ1RMXzExQl9FWFQgKENUTF8xMUIgfCBFWFRfQURESVRJVkUpCisKKyNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDAgMgorI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MCAzCisKKyNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLworI2RlZmluZSBJTkNSRUFTRV9NQVhQT1dfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCisKKy8qCisgKiBGb3IgQVI5Mjg1IGFuZCBsYXRlciBjaGlwc2V0cywgdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBub3QgYmVpbmcgcHJvZ3JhbW1lZAorICogaW4gRUVQUk9NIGFuZCBzbyBuZWVkIHRvIGJlIGVuYWJsZWQgYWx3YXlzLgorICoKKyAqIEJpdCAwOiBlbl9mY2NfbWlkCisgKiBCaXQgMTogZW5famFwX21pZAorICogQml0IDI6IGVuX2ZjY19kZnNfaHQ0MAorICogQml0IDM6IGVuX2phcF9odDQwCisgKiBCaXQgNDogZW5famFwX2Rmc19odDQwCisgKi8KKyNkZWZpbmUgQVI5Mjg1X1JERVhUX0RFRkFVTFQgICAgMHgxRgorCisjZGVmaW5lIEFSX0VFUFJPTV9NQUMoaSkJKDB4MWQrKGkpKQorI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKQkoKChfcikgJiAweDNmKSA8PCAoX3MpKQorI2RlZmluZSBGUkVRMkZCSU4oeCwgeSkJCSgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCisjZGVmaW5lIGF0aDlrX2h3X3VzZV9mbGFzaChfYWgpCSghKF9haC0+YWhfZmxhZ3MgJiBBSF9VU0VfRUVQUk9NKSkKKworI2RlZmluZSBPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCisKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQorCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEICAgICAgICAweDAwMDEKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX0VOQUJMRURfUyAgICAgIDAKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZICAgICAgIDB4MDAwMgorI2RlZmluZSBFRVBfUkZTSUxFTlRfUE9MQVJJVFlfUyAgICAgMQorI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUwgICAgICAgMHgwMDFjCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9HUElPX1NFTF9TICAgICAyCisKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4CisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKKworI2RlZmluZSBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSICAgICAgIDB4MQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUiAgICAgICAgICAgICAgIDB4RQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLICAgIDB4MEZGRgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yICAgICAgIDB4MgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zICAgICAgIDB4MworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl83ICAgICAgIDB4NworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl85ICAgICAgIDB4OQorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNiAgICAgIDB4MTAKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcgICAgICAweDExCisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5ICAgICAgMHgxMworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCAgICAgIDB4MTQKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIgICAgICAweDE2CisKKyNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKKyNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKKyNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0CisjZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1CisjZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQorI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCisjZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4CisjZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0CisjZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMworI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01CisKKy8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCisjZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQorI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKKworLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKKyNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCisKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSUyAgICAgICAgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUyAzCisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUyAgMworI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9DVExTICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMgICAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUyAgICAgICAgICAgICAyCisjZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlMgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAyMgorCitlbnVtIGVlcHJvbV9wYXJhbSB7CisJRUVQX05GVEhSRVNIXzUsCisJRUVQX05GVEhSRVNIXzIsCisJRUVQX01BQ19NU1csCisJRUVQX01BQ19NSUQsCisJRUVQX01BQ19MU1csCisJRUVQX1JFR18wLAorCUVFUF9SRUdfMSwKKwlFRVBfT1BfQ0FQLAorCUVFUF9PUF9NT0RFLAorCUVFUF9SRl9TSUxFTlQsCisJRUVQX09CXzUsCisJRUVQX0RCXzUsCisJRUVQX09CXzIsCisJRUVQX0RCXzIsCisJRUVQX01JTk9SX1JFViwKKwlFRVBfVFhfTUFTSywKKwlFRVBfUlhfTUFTSywKKwlFRVBfUlhHQUlOX1RZUEUsCisJRUVQX1RYR0FJTl9UWVBFLAorCUVFUF9PTF9QV1JDVFJMLAorCUVFUF9SQ19DSEFJTl9NQVNLLAorCUVFUF9EQUNfSFBXUl81RywKKwlFRVBfRlJBQ19OXzVHCit9OworCitlbnVtIGFyNTQxNl9yYXRlcyB7CisJcmF0ZTZtYiwgcmF0ZTltYiwgcmF0ZTEybWIsIHJhdGUxOG1iLAorCXJhdGUyNG1iLCByYXRlMzZtYiwgcmF0ZTQ4bWIsIHJhdGU1NG1iLAorCXJhdGUxbCwgcmF0ZTJsLCByYXRlMnMsIHJhdGU1XzVsLAorCXJhdGU1XzVzLCByYXRlMTFsLCByYXRlMTFzLCByYXRlWHIsCisJcmF0ZUh0MjBfMCwgcmF0ZUh0MjBfMSwgcmF0ZUh0MjBfMiwgcmF0ZUh0MjBfMywKKwlyYXRlSHQyMF80LCByYXRlSHQyMF81LCByYXRlSHQyMF82LCByYXRlSHQyMF83LAorCXJhdGVIdDQwXzAsIHJhdGVIdDQwXzEsIHJhdGVIdDQwXzIsIHJhdGVIdDQwXzMsCisJcmF0ZUh0NDBfNCwgcmF0ZUh0NDBfNSwgcmF0ZUh0NDBfNiwgcmF0ZUh0NDBfNywKKwlyYXRlRHVwQ2NrLCByYXRlRHVwT2ZkbSwgcmF0ZUV4dENjaywgcmF0ZUV4dE9mZG0sCisJQXI1NDE2UmF0ZVNpemUKK307CisKK2VudW0gYXRoOWtfaGFsX2ZyZXFfYmFuZCB7CisJQVRIOUtfSEFMX0ZSRVFfQkFORF81R0haID0gMCwKKwlBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPSAxCit9OworCitzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyIHsKKwl1MTYgbGVuZ3RoOworCXUxNiBjaGVja3N1bTsKKwl1MTYgdmVyc2lvbjsKKwl1OCBvcENhcEZsYWdzOworCXU4IGVlcE1pc2M7CisJdTE2IHJlZ0RtblsyXTsKKwl1OCBtYWNBZGRyWzZdOworCXU4IHJ4TWFzazsKKwl1OCB0eE1hc2s7CisJdTE2IHJmU2lsZW50OworCXUxNiBibHVlVG9vdGhPcHRpb25zOworCXUxNiBkZXZpY2VDYXA7CisJdTMyIGJpbkJ1aWxkTnVtYmVyOworCXU4IGRldmljZVR5cGU7CisJdTggcHdkY2xraW5kOworCXU4IGZ1dHVyZUJhc2VfMVsyXTsKKwl1OCByeEdhaW5UeXBlOworCXU4IGRhY0hpUHdyTW9kZV81RzsKKwl1OCBvcGVuTG9vcFB3ckNudGw7CisJdTggZGFjTHBNb2RlOworCXU4IHR4R2FpblR5cGU7CisJdTggcmNDaGFpbk1hc2s7CisJdTggZGVzaXJlZFNjYWxlQ0NLOworCXU4IHBvd2VyX3RhYmxlX29mZnNldDsKKwl1OCBmcmFjX25fNWc7CisJdTggZnV0dXJlQmFzZV8zWzIxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgeworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCXUxNiB2ZXJzaW9uOworCXU4IG9wQ2FwRmxhZ3M7CisJdTggZWVwTWlzYzsKKwl1MTYgcmVnRG1uWzJdOworCXU4IG1hY0FkZHJbNl07CisJdTggcnhNYXNrOworCXU4IHR4TWFzazsKKwl1MTYgcmZTaWxlbnQ7CisJdTE2IGJsdWVUb290aE9wdGlvbnM7CisJdTE2IGRldmljZUNhcDsKKwl1MzIgYmluQnVpbGROdW1iZXI7CisJdTggZGV2aWNlVHlwZTsKKwl1OCB0eEdhaW5UeXBlOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3Qgc3B1cl9jaGFuIHsKKwl1MTYgc3B1ckNoYW47CisJdTggc3B1clJhbmdlTG93OworCXU4IHNwdXJSYW5nZUhpZ2g7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7CisJdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTMyIGFudEN0cmxDb21tb247CisJdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggc3dpdGNoU2V0dGxpbmc7CisJdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggYWRjRGVzaXJlZFNpemU7CisJdTggcGdhRGVzaXJlZFNpemU7CisJdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggdHhFbmRUb1hwYU9mZjsKKwl1OCB0eEVuZFRvUnhPbjsKKwl1OCB0eEZyYW1lVG9YcGFPbjsKKwl1OCB0aHJlc2g2MjsKKwl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhwZEdhaW47CisJdTggeHBkOworCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggcGRHYWluT3ZlcmxhcDsKKwl1OCBvYjsKKwl1OCBkYjsKKwl1OCB4cGFCaWFzTHZsOworCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOworCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IG9iX2NoMTsKKwl1OCBkYl9jaDE7CisJdTggdXNlQW50MToxLAorCSAgICBmb3JjZV94cGFvbjoxLAorCSAgICBsb2NhbF9iaWFzOjEsCisJICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOworCXU4IG1pc2NCaXRzOworCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKKwl1OCBmdXR1cmVNb2RhbFs2XTsKKworCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wIHsKKwl1OCBwd3JQZGdbMl1bNV07CisJdTggdnBkUGRnWzJdWzVdOworCXU4IHBjZGFjWzJdWzVdOworCXU4IGVtcHR5WzJdWzVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgeworCXUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1MzIgIGFudEN0cmxDb21tb247CisJdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHN3aXRjaFNldHRsaW5nOworCXU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGFkY0Rlc2lyZWRTaXplOworCXU4ICAgcGdhRGVzaXJlZFNpemU7CisJdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHR4RW5kVG9YcGFPZmY7CisJdTggICB0eEVuZFRvUnhPbjsKKwl1OCAgIHR4RnJhbWVUb1hwYU9uOworCXU4ICAgdGhyZXNoNjI7CisJdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgeHBkR2FpbjsKKwl1OCAgIHhwZDsKKwl1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHBkR2Fpbk92ZXJsYXA7CisJdTggICBvYl8wMTsKKwl1OCAgIGRiMV8wMTsKKwl1OCAgIHhwYUJpYXNMdmw7CisJdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTggICB0eEZyYW1lVG9QYU9uOworCXU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgc3dTZXR0bGVIdDQwOworCXU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgZGIyXzAxOworCXU4ICAgdmVyc2lvbjsKKwl1MTYgIG9iXzIzNDsKKwl1MTYgIGRiMV8yMzQ7CisJdTE2ICBkYjJfMjM0OworCXU4ICAgZnV0dXJlTW9kYWxbNF07CisKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKKwl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7CisJdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107CisJdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgeworCXU4IGJDaGFubmVsOworCXU4IHRQb3cyeFs0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCB0UG93MnhbOF07Cit9IF9fcGFja2VkOworCisKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKK3N0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCBmbGFnOjIsIHRQb3dlcjo2OworfSBfX3BhY2tlZDsKKyNlbHNlCitzdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7CisJdTggYkNoYW5uZWw7CisJdTggdFBvd2VyOjYsIGZsYWc6MjsKK30gX19wYWNrZWQ7CisjZW5kaWYKKworc3RydWN0IGNhbF9jdGxfZGF0YSB7CisJc3RydWN0IGNhbF9jdGxfZWRnZXMKKwljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfY3RsX2RhdGFfNGsgeworCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCisJY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgeworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKKwl1OCBjdXN0RGF0YVs2NF07CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07CisJdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107CisJdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCisJIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKKwkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKKwkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKKwl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOworCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOworCXU4IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOworCXU4IGN1c3REYXRhWzIwXTsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKKwl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKKwljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwl1OCBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworZW51bSByZWdfZXh0X2JpdG1hcCB7CisJUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKKwlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCisJUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCisJUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKK307CisKK3N0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKKwl1MTYgY291bnRyeUNvZGU7CisJdTE2IHJlZ0RtbkVudW07CisJdTE2IHJlZ0RtbjVHOworCXUxNiByZWdEbW4yRzsKKwl1OCBpc011bHRpZG9tYWluOworCXU4IGlzb1szXTsKK307CisKK2VudW0gYXRoOWtfZWVwX21hcCB7CisJRUVQX01BUF9ERUZBVUxUID0gMHgwLAorCUVFUF9NQVBfNEtCSVRTLAorCUVFUF9NQVBfTUFYCit9OworCitzdHJ1Y3QgZWVwcm9tX29wcyB7CisJaW50ICgqY2hlY2tfZWVwcm9tKShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTMyICgqZ2V0X2VlcHJvbSkoc3RydWN0IGF0aF9odyAqaHcsIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKKwlib29sICgqZmlsbF9lZXByb20pKHN0cnVjdCBhdGhfaHcgKmh3KTsKKwlpbnQgKCpnZXRfZWVwcm9tX3Zlcikoc3RydWN0IGF0aF9odyAqaHcpOworCWludCAoKmdldF9lZXByb21fcmV2KShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTggKCpnZXRfbnVtX2FudF9jb25maWcpKHN0cnVjdCBhdGhfaHcgKmh3LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworCXUxNiAoKmdldF9lZXByb21fYW50ZW5uYV9jZmcpKHN0cnVjdCBhdGhfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwlib29sICgqc2V0X2JvYXJkX3ZhbHVlcykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqc2V0X2FkZGFjKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworCWludCAoKnNldF90eHBvd2VyKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICB1MTYgY2ZnQ3RsLCB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwgdTggcG93ZXJMaW1pdCk7CisJdTE2ICgqZ2V0X3NwdXJfY2hhbm5lbCkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeik7Cit9OworCisjZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykJCQlcCisJKCgoX3R4Y2hhaW5tYXNrID4+IDIpICYgMSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICgoX3R4Y2hhaW5tYXNrID4+IDEpICYgMSkgKyAoX3R4Y2hhaW5tYXNrICYgMSkpCisKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKKworI2VuZGlmIC8qIEVFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYwppbmRleCBjMzhhMDBiLi5kNDk0ZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmMKQEAgLTE3LDg4ICsxNyw4MCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKICNpbmNsdWRlICJpbml0dmFscy5oIgogCi1zdGF0aWMgY29uc3QgdTggQ0xPQ0tfUkFURVtdID0geyA0MCwgODAsIDIyLCA0NCwgODgsIDQwIH07CitzdGF0aWMgaW50IGJ0Y29leF9lbmFibGU7Cittb2R1bGVfcGFyYW0oYnRjb2V4X2VuYWJsZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGJ0Y29leF9lbmFibGUsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIHN1cHBvcnQiKTsKIAotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX211bHRpX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGlxX2NhbF9zaW5nbGVfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX211bHRpX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19nYWluX2NhbF9zaW5nbGVfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2RjX2NhbF9tdWx0aV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX3NpbmdsZV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfaW5pdF9kY19jYWw7CisjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfQ0NLCQkyMgorI2RlZmluZSBBVEg5S19DTE9DS19SQVRFXzVHSFpfT0ZETQk0MAorI2RlZmluZSBBVEg5S19DTE9DS19SQVRFXzJHSFpfT0ZETQk0NAogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcmVnKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHR5cGUpOwotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB0eXBlKTsKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKTsKLXN0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBhdGg5a19od185MjgwX3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1zdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitzdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qIEhlbHBlciBGdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfdXNlYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjbGtzKQorc3RhdGljIHUzMiBhdGg5a19od19tYWNfdXNlYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGNsa3MpCiB7Ci0JaWYgKGFoLT5haF9jdXJjaGFuICE9IE5VTEwpCi0JCXJldHVybiBjbGtzIC8gQ0xPQ0tfUkFURVthdGg5a19od19jaGFuMndtb2RlKGFoLCBhaC0+YWhfY3VyY2hhbildOwotCWVsc2UKLQkJcmV0dXJuIGNsa3MgLyBDTE9DS19SQVRFW0FUSDlLX01PREVfMTFCXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKKworCWlmICghYWgtPmN1cmNoYW4pIC8qIHNob3VsZCByZWFsbHkgY2hlY2sgZm9yIENDSyBpbnN0ZWFkICovCisJCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV9DQ0s7CisJaWYgKGNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJcmV0dXJuIGNsa3MgLyBBVEg5S19DTE9DS19SQVRFXzJHSFpfT0ZETTsKKworCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE07CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX3VzZWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2xrcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX3VzZWMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBjbGtzKQogewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAKLQlpZiAoY2hhbiAmJiBJU19DSEFOX0hUNDAoY2hhbikpCisJaWYgKGNvbmZfaXNfaHQ0MChjb25mKSkKIAkJcmV0dXJuIGF0aDlrX2h3X21hY191c2VjKGFoLCBjbGtzKSAvIDI7CiAJZWxzZQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX3VzZWMoYWgsIGNsa3MpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY19jbGtzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzZWNzKQorc3RhdGljIHUzMiBhdGg5a19od19tYWNfY2xrcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzZWNzKQogewotCWlmIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKQotCQlyZXR1cm4gdXNlY3MgKiBDTE9DS19SQVRFW2F0aDlrX2h3X2NoYW4yd21vZGUoYWgsCi0JCQlhaC0+YWhfY3VyY2hhbildOwotCWVsc2UKLQkJcmV0dXJuIHVzZWNzICogQ0xPQ0tfUkFURVtBVEg5S19NT0RFXzExQl07CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisKKwlpZiAoIWFoLT5jdXJjaGFuKSAvKiBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBDQ0sgaW5zdGVhZCAqLworCQlyZXR1cm4gdXNlY3MgKkFUSDlLX0NMT0NLX1JBVEVfQ0NLOworCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiB1c2VjcyAqQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07CisJcmV0dXJuIHVzZWNzICpBVEg5S19DTE9DS19SQVRFXzVHSFpfT0ZETTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfdG9fY2xrcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1c2VjcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX2Nsa3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1c2VjcykKIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCi0JaWYgKGNoYW4gJiYgSVNfQ0hBTl9IVDQwKGNoYW4pKQorCWlmIChjb25mX2lzX2h0NDAoY29uZikpCiAJCXJldHVybiBhdGg5a19od19tYWNfY2xrcyhhaCwgdXNlY3MpICogMjsKIAllbHNlCiAJCXJldHVybiBhdGg5a19od19tYWNfY2xrcyhhaCwgdXNlY3MpOwogfQogCi1lbnVtIHdpcmVsZXNzX21vZGUgYXRoOWtfaHdfY2hhbjJ3bW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0JaWYgKElTX0NIQU5fQihjaGFuKSkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFCOwotCWlmIChJU19DSEFOX0coY2hhbikpCi0JCXJldHVybiBBVEg5S19NT0RFXzExRzsKLQotCXJldHVybiBBVEg5S19NT0RFXzExQTsKLX0KLQotYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCitib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAoQUhfVElNRU9VVCAvIEFIX1RJTUVfUVVBTlRVTSk7IGkrKykgeworCUJVR19PTih0aW1lb3V0IDwgQUhfVElNRV9RVUFOVFVNKTsKKworCWZvciAoaSA9IDA7IGkgPCAodGltZW91dCAvIEFIX1RJTUVfUVVBTlRVTSk7IGkrKykgewogCQlpZiAoKFJFR19SRUFEKGFoLCByZWcpICYgbWFzaykgPT0gdmFsKQogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTEwNiw4ICs5OCw4IEBACiAJfQogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAotCQkidGltZW91dCBvbiByZWcgMHgleDogMHglMDh4ICYgMHglMDh4ICE9IDB4JTA4eFxuIiwKLQkJcmVnLCBSRUdfUkVBRChhaCwgcmVnKSwgbWFzaywgdmFsKTsKKwkJInRpbWVvdXQgKCVkIHVzKSBvbiByZWcgMHgleDogMHglMDh4ICYgMHglMDh4ICE9IDB4JTA4eFxuIiwKKwkJdGltZW91dCwgcmVnLCBSRUdfUkVBRChhaCwgcmVnKSwgbWFzaywgdmFsKTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEyNCwxMSArMTE2LDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCitib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICB1MTYgZmxhZ3MsIHUxNiAqbG93LAogCQkJICAgICB1MTYgKmhpZ2gpCiB7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJaWYgKGZsYWdzICYgQ0hBTk5FTF81R0haKSB7CiAJCSpsb3cgPSBwQ2FwLT5sb3dfNWdoel9jaGFuOwpAQCAtMTQzLDcgKzEzNSw3IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi11MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCit1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZXMsCiAJCQkgICB1MzIgZnJhbWVMZW4sIHUxNiByYXRlaXgsCiAJCQkgICBib29sIHNob3J0UHJlYW1ibGUpCkBAIC0xNjUsMTUgKzE1NywxNSBAQAogCQl0eFRpbWUgPSBDQ0tfU0lGU19USU1FICsgcGh5VGltZSArICgobnVtQml0cyAqIDEwMDApIC8ga2Jwcyk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9SQ19QSFlfT0ZETToKLQkJaWYgKGFoLT5haF9jdXJjaGFuICYmIElTX0NIQU5fUVVBUlRFUl9SQVRFKGFoLT5haF9jdXJjaGFuKSkgeworCQlpZiAoYWgtPmN1cmNoYW4gJiYgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoYWgtPmN1cmNoYW4pKSB7CiAJCQliaXRzUGVyU3ltYm9sID0JKGticHMgKiBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIpIC8gMTAwMDsKIAkJCW51bUJpdHMgPSBPRkRNX1BMQ1BfQklUUyArIChmcmFtZUxlbiA8PCAzKTsKIAkJCW51bVN5bWJvbHMgPSBESVZfUk9VTkRfVVAobnVtQml0cywgYml0c1BlclN5bWJvbCk7CiAJCQl0eFRpbWUgPSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSCiAJCQkJKyBPRkRNX1BSRUFNQkxFX1RJTUVfUVVBUlRFUgogCQkJCSsgKG51bVN5bWJvbHMgKiBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIpOwotCQl9IGVsc2UgaWYgKGFoLT5haF9jdXJjaGFuICYmCi0JCQkgICBJU19DSEFOX0hBTEZfUkFURShhaC0+YWhfY3VyY2hhbikpIHsKKwkJfSBlbHNlIGlmIChhaC0+Y3VyY2hhbiAmJgorCQkJICAgSVNfQ0hBTl9IQUxGX1JBVEUoYWgtPmN1cmNoYW4pKSB7CiAJCQliaXRzUGVyU3ltYm9sID0JKGticHMgKiBPRkRNX1NZTUJPTF9USU1FX0hBTEYpIC8gMTAwMDsKIAkJCW51bUJpdHMgPSBPRkRNX1BMQ1BfQklUUyArIChmcmFtZUxlbiA8PCAzKTsKIAkJCW51bVN5bWJvbHMgPSBESVZfUk9VTkRfVVAobnVtQml0cywgYml0c1BlclN5bWJvbCk7CkBAIC0xOTksNTIgKzE5MSwxMSBAQAogCXJldHVybiB0eFRpbWU7CiB9CiAKLXUzMiBhdGg5a19od19taHoyaWVlZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBmcmVxLCB1MzIgZmxhZ3MpCi17Ci0JaWYgKGZsYWdzICYgQ0hBTk5FTF8yR0haKSB7Ci0JCWlmIChmcmVxID09IDI0ODQpCi0JCQlyZXR1cm4gMTQ7Ci0JCWlmIChmcmVxIDwgMjQ4NCkKLQkJCXJldHVybiAoZnJlcSAtIDI0MDcpIC8gNTsKLQkJZWxzZQotCQkJcmV0dXJuIDE1ICsgKChmcmVxIC0gMjUxMikgLyAyMCk7Ci0JfSBlbHNlIGlmIChmbGFncyAmIENIQU5ORUxfNUdIWikgewotCQlpZiAoYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShhaCkgJiYKLQkJICAgIElTX0NIQU5fSU5fUFVCTElDX1NBRkVUWV9CQU5EKGZyZXEpKSB7Ci0JCQlyZXR1cm4gKChmcmVxICogMTApICsKLQkJCQkoKChmcmVxICUgNSkgPT0gMikgPyA1IDogMCkgLSA0OTQwMCkgLyA1OwotCQl9IGVsc2UgaWYgKChmbGFncyAmIENIQU5ORUxfQSkgJiYgKGZyZXEgPD0gNTAwMCkpIHsKLQkJCXJldHVybiAoZnJlcSAtIDQwMDApIC8gNTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAoZnJlcSAtIDUwMDApIC8gNTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChmcmVxID09IDI0ODQpCi0JCQlyZXR1cm4gMTQ7Ci0JCWlmIChmcmVxIDwgMjQ4NCkKLQkJCXJldHVybiAoZnJlcSAtIDI0MDcpIC8gNTsKLQkJaWYgKGZyZXEgPCA1MDAwKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShhaCkKLQkJCSAgICAmJiBJU19DSEFOX0lOX1BVQkxJQ19TQUZFVFlfQkFORChmcmVxKSkgewotCQkJCXJldHVybiAoKGZyZXEgKiAxMCkgKwotCQkJCQkoKChmcmVxICUgNSkgPT0KLQkJCQkJICAyKSA/IDUgOiAwKSAtIDQ5NDAwKSAvIDU7Ci0JCQl9IGVsc2UgaWYgKGZyZXEgPiA0OTAwKSB7Ci0JCQkJcmV0dXJuIChmcmVxIC0gNDAwMCkgLyA1OwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gMTUgKyAoKGZyZXEgLSAyNTEyKSAvIDIwKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gKGZyZXEgLSA1MDAwKSAvIDU7Ci0JfQotfQotCi12b2lkIGF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICBzdHJ1Y3QgY2hhbl9jZW50ZXJzICpjZW50ZXJzKQogewogCWludDhfdCBleHRvZmY7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAogCWlmICghSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CiAJCWNlbnRlcnMtPmN0bF9jZW50ZXIgPSBjZW50ZXJzLT5leHRfY2VudGVyID0KQEAgLTI2NywxNiArMjE4LDE1IEBACiAJCWNlbnRlcnMtPnN5bnRoX2NlbnRlciAtIChleHRvZmYgKiBIVDQwX0NIQU5ORUxfQ0VOVEVSX1NISUZUKTsKIAljZW50ZXJzLT5leHRfY2VudGVyID0KIAkJY2VudGVycy0+c3ludGhfY2VudGVyICsgKGV4dG9mZiAqCi0JCQkgKChhaHAtPmFoX2V4dHByb3RzcGFjaW5nID09IEFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwKSA/CisJCQkgKChhaC0+ZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjApID8KIAkJCSAgSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCA6IDE1KSk7Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKi8KIC8qIENoaXAgUmV2aXNpb25zICovCiAvKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19yZWFkX3JldmlzaW9ucyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19yZWFkX3JldmlzaW9ucyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdmFsOwogCkBAIC0yODQsMjEgKzIzNCwyMiBAQAogCiAJaWYgKHZhbCA9PSAweEZGKSB7CiAJCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9TUkVWKTsKLQkJYWgtPmFoX21hY1ZlcnNpb24gPSAodmFsICYgQVJfU1JFVl9WRVJTSU9OMikgPj4gQVJfU1JFVl9UWVBFMl9TOwotCQlhaC0+YWhfbWFjUmV2ID0gTVModmFsLCBBUl9TUkVWX1JFVklTSU9OMik7Ci0JCWFoLT5haF9pc1BjaUV4cHJlc3MgPSAodmFsICYgQVJfU1JFVl9UWVBFMl9IT1NUX01PREUpID8gMCA6IDE7CisJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPQorCQkJKHZhbCAmIEFSX1NSRVZfVkVSU0lPTjIpID4+IEFSX1NSRVZfVFlQRTJfUzsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID0gTVModmFsLCBBUl9TUkVWX1JFVklTSU9OMik7CisJCWFoLT5pc19wY2lleHByZXNzID0gKHZhbCAmIEFSX1NSRVZfVFlQRTJfSE9TVF9NT0RFKSA/IDAgOiAxOwogCX0gZWxzZSB7CiAJCWlmICghQVJfU1JFVl85MTAwKGFoKSkKLQkJCWFoLT5haF9tYWNWZXJzaW9uID0gTVModmFsLCBBUl9TUkVWX1ZFUlNJT04pOworCQkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IE1TKHZhbCwgQVJfU1JFVl9WRVJTSU9OKTsKIAotCQlhaC0+YWhfbWFjUmV2ID0gdmFsICYgQVJfU1JFVl9SRVZJU0lPTjsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID0gdmFsICYgQVJfU1JFVl9SRVZJU0lPTjsKIAotCQlpZiAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkKLQkJCWFoLT5haF9pc1BjaUV4cHJlc3MgPSB0cnVlOworCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKQorCQkJYWgtPmlzX3BjaWV4cHJlc3MgPSB0cnVlOwogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19od19nZXRfcmFkaW9yZXYoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19nZXRfcmFkaW9yZXYoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTMxNyw5ICsyNjgsOSBAQAogLyogSFcgQXR0YWNoLCBEZXRhY2gsIEluaXQgUm91dGluZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2Rpc2FibGVwY2llKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2Rpc2FibGVwY2llKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCWlmICghQVJfU1JFVl85MTAwKGFoKSkKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSkKIAkJcmV0dXJuOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmMwMCk7CkBAIC0zMzUsNyArMjg2LDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfdGVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Rlc3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHJlZ0FkZHJbMl0gPSB7IEFSX1NUQV9JRDAsIEFSX1BIWV9CQVNFICsgKDggPDwgMikgfTsKIAl1MzIgcmVnSG9sZFsyXTsKQEAgLTM3Nyw2ICszMjgsNyBAQAogCQlSRUdfV1JJVEUoYWgsIHJlZ0FkZHJbaV0sIHJlZ0hvbGRbaV0pOwogCX0KIAl1ZGVsYXkoMTAwKTsKKwogCXJldHVybiB0cnVlOwogfQogCkBAIC0zODksNiArMzQxLDggQEAKIAkJcmV0dXJuICJBdGhlcm9zIDU0MTgiOwogCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKIAkJcmV0dXJuICJBdGhlcm9zIDkxNjAiOworCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKKwkJcmV0dXJuICJBdGhlcm9zIDkxMDAiOwogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgogCQlyZXR1cm4gIkF0aGVyb3MgOTI4MCI7CkBAIC0zOTksNDQgKzM1Myw0NCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmYXVsdHMoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZmF1bHRzKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBpOwogCi0JYWgtPmFoX2NvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAyOwotCWFoLT5haF9jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAxMDsKLQlhaC0+YWhfY29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmID0gMDsKLQlhaC0+YWhfY29uZmlnLmFja182bWIgPSAweDA7Ci0JYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV9sMXNrcF9lbmFibGUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV9wb3dlcl9yZXNldCA9IDB4MTAwOwotCWFoLT5haF9jb25maWcucGNpZV9yZXN0b3JlID0gMDsKLQlhaC0+YWhfY29uZmlnLnBjaWVfd2FlbiA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcgPSAxOwotCWFoLT5haF9jb25maWcuaHRfZW5hYmxlID0gMTsKLQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19sb3cgPSAyMDA7Ci0JYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IDUwMDsKLQlhaC0+YWhfY29uZmlnLmNja190cmlnX2hpZ2ggPSAyMDA7Ci0JYWgtPmFoX2NvbmZpZy5jY2tfdHJpZ19sb3cgPSAxMDA7Ci0JYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pID0gMTsKLQlhaC0+YWhfY29uZmlnLm5vaXNlX2ltbXVuaXR5X2xldmVsID0gNDsKLQlhaC0+YWhfY29uZmlnLm9mZG1fd2Vha3NpZ25hbF9kZXQgPSAxOwotCWFoLT5haF9jb25maWcuY2NrX3dlYWtzaWduYWxfdGhyID0gMDsKLQlhaC0+YWhfY29uZmlnLnNwdXJfaW1tdW5pdHlfbGV2ZWwgPSAyOwotCWFoLT5haF9jb25maWcuZmlyc3RlcF9sZXZlbCA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5yc3NpX3Rocl9oaWdoID0gNDA7Ci0JYWgtPmFoX2NvbmZpZy5yc3NpX3Rocl9sb3cgPSA3OwotCWFoLT5haF9jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSAwOwotCWFoLT5haF9jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcCA9IDA7CisJYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAyOworCWFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSAxMDsKKwlhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmID0gMDsKKwlhaC0+Y29uZmlnLmFja182bWIgPSAweDA7CisJYWgtPmNvbmZpZy5jd21faWdub3JlX2V4dGNjYSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPSAwOworCWFoLT5jb25maWcucGNpZV9sMXNrcF9lbmFibGUgPSAwOworCWFoLT5jb25maWcucGNpZV9jbG9ja19yZXEgPSAwOworCWFoLT5jb25maWcucGNpZV9wb3dlcl9yZXNldCA9IDB4MTAwOworCWFoLT5jb25maWcucGNpZV9yZXN0b3JlID0gMDsKKwlhaC0+Y29uZmlnLnBjaWVfd2FlbiA9IDA7CisJYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcgPSAxOworCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMTsKKwlhaC0+Y29uZmlnLm9mZG1fdHJpZ19sb3cgPSAyMDA7CisJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IDUwMDsKKwlhaC0+Y29uZmlnLmNja190cmlnX2hpZ2ggPSAyMDA7CisJYWgtPmNvbmZpZy5jY2tfdHJpZ19sb3cgPSAxMDA7CisJYWgtPmNvbmZpZy5lbmFibGVfYW5pID0gMTsKKwlhaC0+Y29uZmlnLm5vaXNlX2ltbXVuaXR5X2xldmVsID0gNDsKKwlhaC0+Y29uZmlnLm9mZG1fd2Vha3NpZ25hbF9kZXQgPSAxOworCWFoLT5jb25maWcuY2NrX3dlYWtzaWduYWxfdGhyID0gMDsKKwlhaC0+Y29uZmlnLnNwdXJfaW1tdW5pdHlfbGV2ZWwgPSAyOworCWFoLT5jb25maWcuZmlyc3RlcF9sZXZlbCA9IDA7CisJYWgtPmNvbmZpZy5yc3NpX3Rocl9oaWdoID0gNDA7CisJYWgtPmNvbmZpZy5yc3NpX3Rocl9sb3cgPSA3OworCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSAwOworCWFoLT5jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKLQkJYWgtPmFoX2NvbmZpZy5zcHVyY2hhbnNbaV1bMF0gPSBBUl9OT19TUFVSOwotCQlhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVsxXSA9IEFSX05PX1NQVVI7CisJCWFoLT5jb25maWcuc3B1cmNoYW5zW2ldWzBdID0gQVJfTk9fU1BVUjsKKwkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMV0gPSBBUl9OT19TUFVSOwogCX0KIAotCWFoLT5haF9jb25maWcuaW50cl9taXRpZ2F0aW9uID0gMTsKKwlhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiA9IDE7CiAKIAkvKgogCSAqIFdlIG5lZWQgdGhpcyBmb3IgUENJIGRldmljZXMgb25seSAoQ2FyZGJ1cywgUENJLCBtaW5pUENJKQpAQCAtNDU1LDYyICs0MDksNTQgQEAKIAkgKiBkZXZpY2VzIChsZWdhY3ksIDgwMi4xMWFiZykuCiAJICovCiAJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQotCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0gU0VSX1JFR19NT0RFX0FVVE87CisJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPSBTRVJfUkVHX01PREVfQVVUTzsKIH0KIAotc3RhdGljIHN0cnVjdCBhdGhfaGFsXzU0MTYgKmF0aDlrX2h3X25ld3N0YXRlKHUxNiBkZXZpZCwKLQkJCQkJICAgICAgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCSAgICAgIHZvaWQgX19pb21lbSAqbWVtLAotCQkJCQkgICAgICBpbnQgKnN0YXR1cykKK3N0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19uZXdzdGF0ZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQlpbnQgKnN0YXR1cykKIHsKLQlzdGF0aWMgY29uc3QgdTggZGVmYnNzaWRtYXNrW0VUSF9BTEVOXSA9Ci0JCXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWg7CisJc3RydWN0IGF0aF9odyAqYWg7CiAKLQlhaHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2hhbF81NDE2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGFocCA9PSBOVUxMKSB7CisJYWggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFoID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzdGF0ZSBibG9ja1xuIik7CiAJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlhaCA9ICZhaHAtPmFoOwogCWFoLT5haF9zYyA9IHNjOwotCWFoLT5haF9zaCA9IG1lbTsKLQlhaC0+YWhfbWFnaWMgPSBBUjU0MTZfTUFHSUM7Ci0JYWgtPmFoX2NvdW50cnlDb2RlID0gQ1RSWV9ERUZBVUxUOwotCWFoLT5haF9kZXZpZCA9IGRldmlkOwotCWFoLT5haF9zdWJ2ZW5kb3JpZCA9IDA7CisJYWgtPmh3X3ZlcnNpb24ubWFnaWMgPSBBUjU0MTZfTUFHSUM7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gQ1RSWV9ERUZBVUxUOworCWFoLT5od192ZXJzaW9uLmRldmlkID0gZGV2aWQ7CisJYWgtPmh3X3ZlcnNpb24uc3VidmVuZG9yaWQgPSAwOwogCiAJYWgtPmFoX2ZsYWdzID0gMDsKIAlpZiAoKGRldmlkID09IEFSNTQxNl9BUjkxMDBfREVWSUQpKQotCQlhaC0+YWhfbWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85MTAwOworCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID0gQVJfU1JFVl9WRVJTSU9OXzkxMDA7CiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKQogCQlhaC0+YWhfZmxhZ3MgPSBBSF9VU0VfRUVQUk9NOwogCi0JYWgtPmFoX3Bvd2VyTGltaXQgPSBNQVhfUkFURV9QT1dFUjsKLQlhaC0+YWhfdHBTY2FsZSA9IEFUSDlLX1RQX1NDQUxFX01BWDsKLQlhaHAtPmFoX2F0aW1XaW5kb3cgPSAwOwotCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IGFoLT5haF9jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2w7Ci0JYWhwLT5haF9hbnRlbm5hU3dpdGNoU3dhcCA9Ci0JCWFoLT5haF9jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcDsKLQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzID0gQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7Ci0JYWhwLT5haF9iZWFjb25JbnRlcnZhbCA9IDEwMDsKLQlhaHAtPmFoX2VuYWJsZTMya0h6Q2xvY2sgPSBET05UX1VTRV8zMktIWjsKLQlhaHAtPmFoX3Nsb3R0aW1lID0gKHUzMikgLTE7Ci0JYWhwLT5haF9hY2t0aW1lb3V0ID0gKHUzMikgLTE7Ci0JYWhwLT5haF9jdHN0aW1lb3V0ID0gKHUzMikgLTE7Ci0JYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKLQltZW1jcHkoJmFocC0+YWhfYnNzaWRtYXNrLCBkZWZic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCA9IE1BWF9SQVRFX1BPV0VSOworCWFoLT5yZWd1bGF0b3J5LnRwX3NjYWxlID0gQVRIOUtfVFBfU0NBTEVfTUFYOworCWFoLT5hdGltX3dpbmRvdyA9IDA7CisJYWgtPmRpdmVyc2l0eV9jb250cm9sID0gYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbDsKKwlhaC0+YW50ZW5uYV9zd2l0Y2hfc3dhcCA9CisJCWFoLT5jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwlhaC0+c3RhX2lkMV9kZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOworCWFoLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CisJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOworCWFoLT5zbG90dGltZSA9ICh1MzIpIC0xOworCWFoLT5hY2t0aW1lb3V0ID0gKHUzMikgLTE7CisJYWgtPmN0c3RpbWVvdXQgPSAodTMyKSAtMTsKKwlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CiAKLQlhaHAtPmFoX2dCZWFjb25SYXRlID0gMDsKKwlhaC0+Z2JlYWNvbl9yYXRlID0gMDsKIAotCXJldHVybiBhaHA7CisJcmV0dXJuIGFoOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X3JmYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcmZhdHRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJYm9vbCByZlN0YXR1cyA9IGZhbHNlOwogCWludCBlY29kZSA9IDA7CkBAIC01MjUsNyArNDcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19yZl9jbGFpbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X3JmX2NsYWltKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB2YWw7CiAKQEAgLTU0NSw4OCArNDkxLDg3IEBACiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCiAJCQkiNUcgUmFkaW8gQ2hpcCBSZXYgMHglMDJYIGlzIG5vdCAiCiAJCQkic3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyXG4iLAotCQkJYWgtPmFoX2FuYWxvZzVHaHpSZXYpOworCQkJYWgtPmh3X3ZlcnNpb24uYW5hbG9nNUdoelJldik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlhaC0+YWhfYW5hbG9nNUdoelJldiA9IHZhbDsKKwlhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ID0gdmFsOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfaW5pdF9tYWNhZGRyKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfaW5pdF9tYWNhZGRyKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiBzdW07CiAJaW50IGk7CiAJdTE2IGVldmFsOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlzdW0gPSAwOwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBBUl9FRVBST01fTUFDKGkpKTsKKwkJZWV2YWwgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgQVJfRUVQUk9NX01BQyhpKSk7CiAJCXN1bSArPSBlZXZhbDsKLQkJYWhwLT5haF9tYWNhZGRyWzIgKiBpXSA9IGVldmFsID4+IDg7Ci0JCWFocC0+YWhfbWFjYWRkclsyICogaSArIDFdID0gZWV2YWwgJiAweGZmOworCQlhaC0+bWFjYWRkclsyICogaV0gPSBlZXZhbCA+PiA4OworCQlhaC0+bWFjYWRkclsyICogaSArIDFdID0gZWV2YWwgJiAweGZmOwogCX0KIAlpZiAoc3VtID09IDAgfHwgc3VtID09IDB4ZmZmZiAqIDMpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAogCQkJIm1hYyBhZGRyZXNzIHJlYWQgZmFpbGVkOiAlcE1cbiIsCi0JCQlhaHAtPmFoX21hY2FkZHIpOworCQkJYWgtPm1hY2FkZHIpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcnhnYWluX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHJ4Z2Fpbl90eXBlOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQlpZiAoYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX01JTk9SX1JFVikgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcpIHsKLQkJcnhnYWluX3R5cGUgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUlhHQUlOX1RZUEUpOworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX01JTk9SX1JFVikgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcpIHsKKwkJcnhnYWluX3R5cGUgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JYR0FJTl9UWVBFKTsKIAogCQlpZiAocnhnYWluX3R5cGUgPT0gQVI1NDE2X0VFUF9SWEdBSU5fMTNEQl9CQUNLT0ZGKQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfYmFja29mZl8xM2RiX3J4Z2Fpbl85MjgwXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4ME1vZGVzX2JhY2tvZmZfMTNkYl9yeGdhaW5fOTI4MF8yKSwgNik7CiAJCWVsc2UgaWYgKHJ4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfUlhHQUlOXzIzREJfQkFDS09GRikKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX2JhY2tvZmZfMjNkYl9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMiksIDYpOwogCQllbHNlCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yKSwgNik7Ci0JfSBlbHNlCi0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCX0gZWxzZSB7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF9yeGdhaW5fOTI4MF8yKSwgNik7CisJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3R4Z2Fpbl9pbmkoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB0eGdhaW5fdHlwZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCi0JaWYgKGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KSB7Ci0JCXR4Z2Fpbl90eXBlID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKTsKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KSB7CisJCXR4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CiAKIAkJaWYgKHR4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfVFhHQUlOX0hJR0hfUE9XRVIpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4MF8yKSwgNik7CiAJCWVsc2UKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzVHhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiksIDYpOwotCX0gZWxzZQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwKKwl9IGVsc2UgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQlhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiwKIAkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiksIDYpOworCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19od19wb3N0X2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X3Bvc3RfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBlY29kZTsKIApAQCAtNjU1LDIzOCArNjAwLDIyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2RvX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQkgIHZvaWQgX19pb21lbSAqbWVtLCBpbnQgKnN0YXR1cykKK3N0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19kb19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWg7CisJc3RydWN0IGF0aF9odyAqYWg7CiAJaW50IGVjb2RlOwogCXUzMiBpLCBqOwogCi0JYWhwID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBtZW0sIHN0YXR1cyk7Ci0JaWYgKGFocCA9PSBOVUxMKQorCWFoID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBzdGF0dXMpOworCWlmIChhaCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCWFoID0gJmFocC0+YWg7Ci0KIAlhdGg5a19od19zZXRfZGVmYXVsdHMoYWgpOwogCi0JaWYgKGFoLT5haF9jb25maWcuaW50cl9taXRpZ2F0aW9uICE9IDApCi0JCWFocC0+YWhfaW50ck1pdGlnYXRpb24gPSB0cnVlOworCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiAhPSAwKQorCQlhaC0+aW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKIAkJZWNvZGUgPSAtRUlPOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CiAJCWVjb2RlID0gLUVJTzsKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKGFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKLQkJaWYgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSB8fAotCQkgICAgKEFSX1NSRVZfOTI4MChhaCkgJiYgIWFoLT5haF9pc1BjaUV4cHJlc3MpKSB7Ci0JCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfQVVUTykgeworCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgfHwKKwkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmICFhaC0+aXNfcGNpZXhwcmVzcykpIHsKKwkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQogCQkJCVNFUl9SRUdfTU9ERV9PTjsKIAkJfSBlbHNlIHsKLQkJCWFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQorCQkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9CiAJCQkJU0VSX1JFR19NT0RFX09GRjsKIAkJfQogCX0KIAotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAotCQkic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCi0JCWFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJzZXJpYWxpemVfcmVnbW9kZSBpcyAlZFxuIiwKKwkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSk7CiAKLQlpZiAoKGFoLT5haF9tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpICYmCi0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgJiYKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSAmJgorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSAmJgorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgJiYKIAkgICAgKCFBUl9TUkVWXzkxMDAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4MChhaCkpICYmICghQVJfU1JFVl85Mjg1KGFoKSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsCiAJCQkiTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmFoX21hY1ZlcnNpb24sIGFoLT5haF9tYWNSZXYpOworCQkJInRoaXMgZHJpdmVyXG4iLCBhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uLAorCQkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2KTsKIAkJZWNvZGUgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBiYWQ7CiAJfQogCiAJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKLQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfbXVsdGlfc2FtcGxlOwotCQlhaHAtPmFoX3N1cHBDYWxzID0gSVFfTUlTTUFUQ0hfQ0FMOwotCQlhaC0+YWhfaXNQY2lFeHByZXNzID0gZmFsc2U7CisJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKKwkJYWgtPnN1cHBfY2FscyA9IElRX01JU01BVENIX0NBTDsKKwkJYWgtPmlzX3BjaWV4cHJlc3MgPSBmYWxzZTsKIAl9Ci0JYWgtPmFoX3BoeVJldiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0hJUF9JRCk7CisJYWgtPmh3X3ZlcnNpb24ucGh5UmV2ID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DSElQX0lEKTsKIAogCWlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7CiAJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQlhaHAtPmFoX2lxQ2FsRGF0YS5jYWxEYXRhID0gJmlxX2NhbF9zaW5nbGVfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNHYWluQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX3NpbmdsZV9zYW1wbGU7CisJCQlhaC0+YWRjZ2Fpbl9jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZ2Fpbl9jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjRGNDYWxEYXRhLmNhbERhdGEgPQorCQkJYWgtPmFkY2RjX2NhbGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjRGNDYWxJbml0RGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxpbml0ZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2luaXRfZGNfY2FsOwogCQl9IGVsc2UgewotCQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfbXVsdGlfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNHYWluQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKKwkJCWFoLT5hZGNnYWluX2NhbGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19nYWluX2NhbF9tdWx0aV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjRGNDYWxJbml0RGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxpbml0ZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2luaXRfZGNfY2FsOwogCQl9Ci0JCWFocC0+YWhfc3VwcENhbHMgPSBBRENfR0FJTl9DQUwgfCBBRENfRENfQ0FMIHwgSVFfTUlTTUFUQ0hfQ0FMOworCQlhaC0+c3VwcF9jYWxzID0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTCB8IElRX01JU01BVENIX0NBTDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85MTYwKGFoKSkgewotCQlhaC0+YWhfY29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCQlhaHAtPmFoX2FuaV9mdW5jdGlvbiA9IChBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCB8Ci0JCQkJCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMKTsKLQl9IGVsc2UgewotCQlhaHAtPmFoX2FuaV9mdW5jdGlvbiA9IEFUSDlLX0FOSV9BTEw7Ci0JCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCQlhaHAtPmFoX2FuaV9mdW5jdGlvbiAmPQl+QVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOwotCQl9Ci0JfQorCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+YW5pX2Z1bmN0aW9uICY9IH5BVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw7CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkiVGhpcyBNYWMgQ2hpcCBSZXYgMHglMDJ4LiV4IGlzIFxuIiwKLQkJYWgtPmFoX21hY1ZlcnNpb24sIGFoLT5haF9tYWNSZXYpOworCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uLCBhaC0+aHdfdmVyc2lvbi5tYWNSZXYpOwogCiAJaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAorCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NV8xXzIpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjkyODVDb21tb25fOTI4NV8xXzIsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODVDb21tb25fOTI4NV8xXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVDb21tb25fOTI4NV8xXzIpLCAyKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCWFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMiwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODVfMV8yKSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yLAogCQkJQVJSQVlfU0laRShhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NV8xXzIpLAogCQkJCSAgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODUsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODUsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVNb2Rlc185Mjg1KSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODUsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODVDb21tb25fOTI4NSwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4NUNvbW1vbl85Mjg1KSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NSwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODUpLCAyKTsKIAkJfSBlbHNlIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NSwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODUpLCAyKTsKIAkJfQogCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MF8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODBNb2Rlc185MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc185MjgwXzIpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MF8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODBfMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MENvbW1vbl85MjgwXzIpLCAyKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCSAgICAgICBhcjkyODBQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MFBjaWVQaHlfY2xrcmVxX29mZl9MMV85MjgwKSwyKTsKIAkJfSBlbHNlIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQkgICAgICAgYXI5MjgwUGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4MCksIDIpOwogCQl9Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzQWRkaXRpb25hbCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsCiAJCQkgICAgICAgYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc19mYXN0X2Nsb2NrXzkyODBfMiksIDMpOwogCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4ME1vZGVzXzkyODApLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4MENvbW1vbl85MjgwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwQ29tbW9uXzkyODApLCAyKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZNb2Rlc185MTYwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjU0MTZDb21tb25fOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkNvbW1vbl85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMF85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmswLCBhcjU0MTZCYW5rMF85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazBfOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCQl9SZkdhaW5fOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsxXzkxNjApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMl85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rM185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmszLCBhcjU0MTZCYW5rM185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazNfOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2XzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNlRQQ185MTYwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rN185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms3LCBhcjU0MTZCYW5rN185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazdfOTE2MCksIDIpOwogCQlpZiAoQVJfU1JFVl85MTYwXzExKGFoKSkgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQWRkYWMsCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUFkZGFjLAogCQkJCSAgICAgICBhcjU0MTZBZGRhY185MTYwMV8xLAogCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkFkZGFjXzkxNjAxXzEpLCAyKTsKIAkJfSBlbHNlIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCBhcjU0MTZBZGRhY185MTYwLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTE2MCwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTYwKSwgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTEwMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyNTQxNk1vZGVzXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZNb2Rlc185MTAwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjU0MTZDb21tb25fOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkNvbW1vbl85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMF85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmswLCBhcjU0MTZCYW5rMF85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazBfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCQl9SZkdhaW5fOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYXI1NDE2QmFuazFfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsxXzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFyNTQxNkJhbmsyXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMl85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rM185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmszLCBhcjU0MTZCYW5rM185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazNfOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNiwgYXI1NDE2QmFuazZfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2XzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNlRQQ185MTAwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rN185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms3LCBhcjU0MTZCYW5rN185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazdfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkFkZGFjXzkxMDApLCAyKTsKIAl9IGVsc2UgewotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2RlcywgYXI1NDE2TW9kZXMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyNTQxNk1vZGVzLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXMpLCA2KTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQ29tbW9uLCBhcjU0MTZDb21tb24sCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjU0MTZDb21tb24sCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb24pLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazAsIGFyNTQxNkJhbmswLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmswLCBhcjU0MTZCYW5rMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgYXI1NDE2QkJfUmZHYWluLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsxLCBhcjU0MTZCYW5rMSwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYXI1NDE2QmFuazEsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMSksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMiwgYXI1NDE2QmFuazIsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFyNTQxNkJhbmsyLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazIpLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazMsIGFyNTQxNkJhbmszLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmszLCBhcjU0MTZCYW5rMywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2LCBhcjU0MTZCYW5rNiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNiwgYXI1NDE2QmFuazYsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNiksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNlRQQywgYXI1NDE2QmFuazZUUEMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUEMpLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazcsIGFyNTQxNkJhbms3LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms3LCBhcjU0MTZCYW5rNywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3KSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCBhcjU0MTZBZGRhYywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywgYXI1NDE2QWRkYWMsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhYyksIDIpOwogCX0KIAotCWlmIChhaC0+YWhfaXNQY2lFeHByZXNzKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcykKIAkJYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKGFoLCAwKTsKIAllbHNlCiAJCWF0aDlrX2h3X2Rpc2FibGVwY2llKGFoKTsKQEAgLTg5NSw2ICs4MzEsMjIgQEAKIAlpZiAoZWNvZGUgIT0gMCkKIAkJZ290byBiYWQ7CiAKKwlpZiAoQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCQl1MzIgdHhnYWluX3R5cGUgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKTsKKworCQkvKiB0eGdhaW4gdGFibGUgKi8KKwkJaWYgKHR4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfVFhHQUlOX0hJR0hfUE9XRVIpIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQlhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzIsCisJCQlBUlJBWV9TSVpFKGFyOTI4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85Mjg1XzFfMiksIDYpOworCQl9IGVsc2UgeworCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCWFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzIsCisJCQlBUlJBWV9TSVpFKGFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzIpLCA2KTsKKwkJfQorCisJfQorCiAJLyogcnhnYWluIHRhYmxlICovCiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkpCiAJCWF0aDlrX2h3X2luaXRfcnhnYWluX2luaShhaCk7CkBAIC05MDMsNTMgKzg1NSw1NSBAQAogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQogCQlhdGg5a19od19pbml0X3R4Z2Fpbl9pbmkoYWgpOwogCi0JaWYgKGFoLT5haF9kZXZpZCA9PSBBUjkyODBfREVWSURfUENJKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaU1vZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJdTMyIHJlZyA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgMCk7CisJaWYgKCFhdGg5a19od19maWxsX2NhcF9pbmZvKGFoKSkgeworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAiZmFpbGVkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm9cbiIpOworCQllY29kZSA9IC1FSU5WQUw7CisJCWdvdG8gYmFkOworCX0KIAotCQkJZm9yIChqID0gMTsgaiA8IGFocC0+YWhfaW5pTW9kZXMuaWFfY29sdW1uczsgaisrKSB7Ci0JCQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgaik7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjkyODBfREVWSURfUENJKSAmJgorCSAgICB0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CiAKLQkJCQlJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIGopID0KKwkJLyogRUVQUk9NIEZpeHVwICovCisJCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pTW9kZXMuaWFfcm93czsgaSsrKSB7CisJCQl1MzIgcmVnID0gSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIDApOworCisJCQlmb3IgKGogPSAxOyBqIDwgYWgtPmluaU1vZGVzLmlhX2NvbHVtbnM7IGorKykgeworCQkJCXUzMiB2YWwgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgaik7CisKKwkJCQlJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgaikgPQogCQkJCQlhdGg5a19od19pbmlfZml4dXAoYWgsCi0JCQkJCQkJICAgJmFocC0+YWhfZWVwcm9tLmRlZiwKKwkJCQkJCQkgICAmYWgtPmVlcHJvbS5kZWYsCiAJCQkJCQkJICAgcmVnLCB2YWwpOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKCFhdGg5a19od19maWxsX2NhcF9pbmZvKGFoKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKLQkJCSJmYWlsZWQgYXRoOWtfaHdfZmlsbF9jYXBfaW5mb1xuIik7Ci0JCWVjb2RlID0gLUVJTlZBTDsKLQkJZ290byBiYWQ7Ci0JfQotCiAJZWNvZGUgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOwogCWlmIChlY29kZSAhPSAwKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkJImZhaWxlZCBpbml0aWFsaXppbmcgbWFjIGFkZHJlc3NcbiIpOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKLQkJYWgtPmFoX3R4VHJpZ0xldmVsID0gKEFSX0ZUUklHXzI1NkIgPj4gQVJfRlRSSUdfUyk7CisJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzI1NkIgPj4gQVJfRlRSSUdfUyk7CiAJZWxzZQotCQlhaC0+YWhfdHhUcmlnTGV2ZWwgPSAoQVJfRlRSSUdfNTEyQiA+PiBBUl9GVFJJR19TKTsKKwkJYWgtPnR4X3RyaWdfbGV2ZWwgPSAoQVJfRlRSSUdfNTEyQiA+PiBBUl9GVFJJR19TKTsKIAogCWF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoYWgpOwogCiAJcmV0dXJuIGFoOwogYmFkOgotCWlmIChhaHApCi0JCWF0aDlrX2h3X2RldGFjaCgoc3RydWN0IGF0aF9oYWwgKikgYWhwKTsKKwlpZiAoYWgpCisJCWF0aDlrX2h3X2RldGFjaChhaCk7CiAJaWYgKHN0YXR1cykKIAkJKnN0YXR1cyA9IGVjb2RlOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9iYihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIHN5bnRoRGVsYXk7CkBAIC05NjUsNyArOTE5LDcgQEAKIAl1ZGVsYXkoc3ludGhEZWxheSArIEJBU0VfQUNUSVZBVEVfREVMQVkpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3FvcyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3FvcyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX01JQ19RT1NfQ09OVFJPTCwgMHgxMDBhYSk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NSUNfUU9TX1NFTEVDVCwgMHgzMjEwKTsKQEAgLTk4Miw3ICs5MzYsNyBAQAogCVJFR19XUklURShhaCwgQVJfVFhPUF8xMl8xNSwgMHhGRkZGRkZGRik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcGxsKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfcGxsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIHBsbDsKQEAgLTEwNDMsMjcgKzk5NywyNiBAQAogCQkJCXBsbCB8PSBTTSgweGIsIEFSX1JUQ19QTExfRElWKTsKIAkJfQogCX0KLQlSRUdfV1JJVEUoYWgsICh1MTYpIChBUl9SVENfUExMX0NPTlRST0wpLCBwbGwpOworCVJFR19XUklURShhaCwgQVJfUlRDX1BMTF9DT05UUk9MLCBwbGwpOwogCiAJdWRlbGF5KFJUQ19QTExfU0VUVExFX0RFTEFZKTsKIAogCVJFR19XUklURShhaCwgQVJfUlRDX1NMRUVQX0NMSywgQVJfUlRDX0ZPUkNFX0RFUklWRURfQ0xLKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jaGFpbl9tYXNrcyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2NoYWluX21hc2tzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IHJ4X2NoYWlubWFzaywgdHhfY2hhaW5tYXNrOwogCi0JcnhfY2hhaW5tYXNrID0gYWhwLT5haF9yeGNoYWlubWFzazsKLQl0eF9jaGFpbm1hc2sgPSBhaHAtPmFoX3R4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CiAKIAlzd2l0Y2ggKHJ4X2NoYWlubWFzaykgewogCWNhc2UgMHg1OgogCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FOQUxPR19TV0FQLAogCQkJICAgIEFSX1BIWV9TV0FQX0FMVF9DSEFJTik7CiAJY2FzZSAweDM6Ci0JCWlmICgoKGFoKS0+YWhfbWFjVmVyc2lvbiA8PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpIHsKKwkJaWYgKCgoYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPD0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIDB4Nyk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9DQUxfQ0hBSU5NQVNLLCAweDcpOwogCQkJYnJlYWs7CkBAIC0xMDg4LDI4ICsxMDQxLDI2IEBACiAJCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQU5BTE9HX1NXQVApIHwgMHgwMDAwMDAwMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgIGVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlhaHAtPmFoX21hc2tSZWcgPSBBUl9JTVJfVFhFUlIgfAorCWFoLT5tYXNrX3JlZyA9IEFSX0lNUl9UWEVSUiB8CiAJCUFSX0lNUl9UWFVSTiB8CiAJCUFSX0lNUl9SWEVSUiB8CiAJCUFSX0lNUl9SWE9STiB8CiAJCUFSX0lNUl9CQ05NSVNDOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfUlhJTlRNIHwgQVJfSU1SX1JYTUlOVFI7CisJaWYgKGFoLT5pbnRyX21pdGlnYXRpb24pCisJCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfUlhJTlRNIHwgQVJfSU1SX1JYTUlOVFI7CiAJZWxzZQotCQlhaHAtPmFoX21hc2tSZWcgfD0gQVJfSU1SX1JYT0s7CisJCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfUlhPSzsKIAotCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfVFhPSzsKKwlhaC0+bWFza19yZWcgfD0gQVJfSU1SX1RYT0s7CiAKIAlpZiAob3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlhaHAtPmFoX21hc2tSZWcgfD0gQVJfSU1SX01JQjsKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9NSUI7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0lNUiwgYWhwLT5haF9tYXNrUmVnKTsKKwlSRUdfV1JJVEUoYWgsIEFSX0lNUiwgYWgtPm1hc2tfcmVnKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgUkVHX1JFQUQoYWgsIEFSX0lNUl9TMikgfCBBUl9JTVJfUzJfR1RUKTsKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSkgewpAQCAtMTExOSw3MiArMTA3MCw2NCBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9BQ0spKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBhY2sgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaHAtPmFoX2Fja3RpbWVvdXQgPSAodTMyKSAtMTsKKwkJYWgtPmFja3RpbWVvdXQgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1RJTUVfT1VULAogCQkJICAgICAgQVJfVElNRV9PVVRfQUNLLCBhdGg5a19od19tYWNfdG9fY2xrcyhhaCwgdXMpKTsKLQkJYWhwLT5haF9hY2t0aW1lb3V0ID0gdXM7CisJCWFoLT5hY2t0aW1lb3V0ID0gdXM7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHVzKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9DVFMpKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBjdHMgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaHAtPmFoX2N0c3RpbWVvdXQgPSAodTMyKSAtMTsKKwkJYWgtPmN0c3RpbWVvdXQgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1RJTUVfT1VULAogCQkJICAgICAgQVJfVElNRV9PVVRfQ1RTLCBhdGg5a19od19tYWNfdG9fY2xrcyhhaCwgdXMpKTsKLQkJYWhwLT5haF9jdHN0aW1lb3V0ID0gdXM7CisJCWFoLT5jdHN0aW1lb3V0ID0gdXM7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2dsb2JhbF90eHRpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdHUpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR1KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlpZiAodHUgPiAweEZGRkYpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfWE1JVCwKIAkJCSJiYWQgZ2xvYmFsIHR4IHRpbWVvdXQgJXVcbiIsIHR1KTsKLQkJYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKKwkJYWgtPmdsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfR1RYVE8sIEFSX0dUWFRPX1RJTUVPVVRfTElNSVQsIHR1KTsKLQkJYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgPSB0dTsKKwkJYWgtPmdsb2JhbHR4dGltZW91dCA9IHR1OwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3VzZXJfc2V0dGluZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImFoLT5taXNjX21vZGUgMHgleFxuIiwKKwkJYWgtPm1pc2NfbW9kZSk7CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImFocC0+YWhfbWlzY01vZGUgMHgleFxuIiwKLQkJYWhwLT5haF9taXNjTW9kZSk7Ci0KLQlpZiAoYWhwLT5haF9taXNjTW9kZSAhPSAwKQorCWlmIChhaC0+bWlzY19tb2RlICE9IDApCiAJCVJFR19XUklURShhaCwgQVJfUENVX01JU0MsCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaHAtPmFoX21pc2NNb2RlKTsKLQlpZiAoYWhwLT5haF9zbG90dGltZSAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0c2xvdHRpbWUoYWgsIGFocC0+YWhfc2xvdHRpbWUpOwotCWlmIChhaHAtPmFoX2Fja3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWhwLT5haF9hY2t0aW1lb3V0KTsKLQlpZiAoYWhwLT5haF9jdHN0aW1lb3V0ICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoYWgsIGFocC0+YWhfY3RzdGltZW91dCk7Ci0JaWYgKGFocC0+YWhfZ2xvYmFsdHh0aW1lb3V0ICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChhaCwgYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQpOworCQkJICBSRUdfUkVBRChhaCwgQVJfUENVX01JU0MpIHwgYWgtPm1pc2NfbW9kZSk7CisJaWYgKGFoLT5zbG90dGltZSAhPSAodTMyKSAtMSkKKwkJYXRoOWtfaHdfc2V0c2xvdHRpbWUoYWgsIGFoLT5zbG90dGltZSk7CisJaWYgKGFoLT5hY2t0aW1lb3V0ICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoYWgsIGFoLT5hY2t0aW1lb3V0KTsKKwlpZiAoYWgtPmN0c3RpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9jdHNfdGltZW91dChhaCwgYWgtPmN0c3RpbWVvdXQpOworCWlmIChhaC0+Z2xvYmFsdHh0aW1lb3V0ICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChhaCwgYWgtPmdsb2JhbHR4dGltZW91dCk7CiB9CiAKIGNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKQpAQCAtMTE5Myw3ICsxMTM2LDcgQEAKIAkJYXRoOWtfaHdfZGV2bmFtZShkZXZpZCkgOiBOVUxMOwogfQogCi12b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCWF0aDlrX2h3X2FuaV9kZXRhY2goYWgpOwpAQCAtMTIwMywxOSArMTE0NiwxOSBAQAogCWtmcmVlKGFoKTsKIH0KIAotc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCXZvaWQgX19pb21lbSAqbWVtLCBpbnQgKmVycm9yKQorc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gTlVMTDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IE5VTEw7CiAKIAlzd2l0Y2ggKGRldmlkKSB7CiAJY2FzZSBBUjU0MTZfREVWSURfUENJOgogCWNhc2UgQVI1NDE2X0RFVklEX1BDSUU6CisJY2FzZSBBUjU0MTZfQVI5MTAwX0RFVklEOgogCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6CiAJY2FzZSBBUjkyODBfREVWSURfUENJRToKIAljYXNlIEFSOTI4NV9ERVZJRF9QQ0lFOgotCQlhaCA9IGF0aDlrX2h3X2RvX2F0dGFjaChkZXZpZCwgc2MsIG1lbSwgZXJyb3IpOworCQlhaCA9IGF0aDlrX2h3X2RvX2F0dGFjaChkZXZpZCwgc2MsIGVycm9yKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJKmVycm9yID0gLUVOWElPOwpAQCAtMTIyOSw3ICsxMTcyLDcgQEAKIC8qIElOSSAqLwogLyoqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19vdmVycmlkZV9pbmkoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAkvKgpAQCAtMTI0MCwyMCArMTE4MywyMCBAQAogCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiAKIAotCWlmICghQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgfHwKKwlpZiAoIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgfHwKIAkgICAgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuOwogCiAJUkVHX1dSSVRFKGFoLCAweDk4MDAgKyAoNjUxIDw8IDIpLCAweDExKTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfZGVmX2luaV9maXh1cChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEsCiAJCQkgICAgICB1MzIgcmVnLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyKTsKIAotCXN3aXRjaCAoYWgtPmFoX2RldmlkKSB7CisJc3dpdGNoIChhaC0+aHdfdmVyc2lvbi5kZXZpZCkgewogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAkJaWYgKHJlZyA9PSAweDc4OTQpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOWSwKQEAgLTEyODEsMjQgKzEyMjQsMzMgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB1MzIgYXRoOWtfaHdfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JaWYgKGFocC0+YWhfZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKKwlpZiAoYWgtPmVlcF9tYXAgPT0gRUVQX01BUF80S0JJVFMpCiAJCXJldHVybiB2YWx1ZTsKIAllbHNlCiAJCXJldHVybiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKGFoLCBwRWVwRGF0YSwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcHJvY2Vzc19pbmkoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfb2xjX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKQorCQlhaC0+b3JpZ2luYWxHYWluW2ldID0KKwkJCU1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQpLAorCQkJCQlBUl9QSFlfVFhfR0FJTik7CisJYWgtPlBEQURDZGVsdGEgPSAwOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCWVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQogewogCWludCBpLCByZWdXcml0ZXMgPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgbW9kZXNJbmRleCwgZnJlcUluZGV4OwogCWludCBzdGF0dXM7CiAKQEAgLTEzMzAsNDAgKzEyODIsMzggQEAKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWSgwKSwgMHgwMDAwMDAwNyk7Ci0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BRENfU0VSSUFMX0NUTCwgQVJfUEhZX1NFTF9FWFRFUk5BTF9SQURJTyk7CisJYWgtPmVlcF9vcHMtPnNldF9hZGRhYyhhaCwgY2hhbik7CiAKLQlhdGg5a19od19zZXRfYWRkYWMoYWgsIGNoYW4pOwotCi0JaWYgKEFSX1NSRVZfNTQxNl9WMjJfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgMSwgcmVnV3JpdGVzKTsKKwlpZiAoQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKGFoKSkgeworCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlBZGRhYywgMSwgcmVnV3JpdGVzKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgdGVtcDsKIAkJdTMyIGFkZGFjU2l6ZSA9Ci0JCQlzaXplb2YodTMyKSAqIGFocC0+YWhfaW5pQWRkYWMuaWFfcm93cyAqCi0JCQlhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnM7CisJCQlzaXplb2YodTMyKSAqIGFoLT5pbmlBZGRhYy5pYV9yb3dzICoKKwkJCWFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zOwogCi0JCW1lbWNweShhaHAtPmFoX2FkZGFjNTQxNl8yMSwKLQkJICAgICAgIGFocC0+YWhfaW5pQWRkYWMuaWFfYXJyYXksIGFkZGFjU2l6ZSk7CisJCW1lbWNweShhaC0+YWRkYWM1NDE2XzIxLAorCQkgICAgICAgYWgtPmluaUFkZGFjLmlhX2FycmF5LCBhZGRhY1NpemUpOwogCi0JCShhaHAtPmFoX2FkZGFjNTQxNl8yMSlbMzEgKiBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnMgKyAxXSA9IDA7CisJCShhaC0+YWRkYWM1NDE2XzIxKVszMSAqIGFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zICsgMV0gPSAwOwogCi0JCXRlbXAuaWFfYXJyYXkgPSBhaHAtPmFoX2FkZGFjNTQxNl8yMTsKLQkJdGVtcC5pYV9jb2x1bW5zID0gYWhwLT5haF9pbmlBZGRhYy5pYV9jb2x1bW5zOwotCQl0ZW1wLmlhX3Jvd3MgPSBhaHAtPmFoX2luaUFkZGFjLmlhX3Jvd3M7CisJCXRlbXAuaWFfYXJyYXkgPSBhaC0+YWRkYWM1NDE2XzIxOworCQl0ZW1wLmlhX2NvbHVtbnMgPSBhaC0+aW5pQWRkYWMuaWFfY29sdW1uczsKKwkJdGVtcC5pYV9yb3dzID0gYWgtPmluaUFkZGFjLmlhX3Jvd3M7CiAJCVJFR19XUklURV9BUlJBWSgmdGVtcCwgMSwgcmVnV3JpdGVzKTsKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BRENfU0VSSUFMX0NUTCwgQVJfUEhZX1NFTF9JTlRFUk5BTF9BRERBQyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKLQkJdTMyIHJlZyA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgMCk7Ci0JCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIG1vZGVzSW5kZXgpOworCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pTW9kZXMuaWFfcm93czsgaSsrKSB7CisJCXUzMiByZWcgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgMCk7CisJCXUzMiB2YWwgPSBJTklfUkEoJmFoLT5pbmlNb2RlcywgaSwgbW9kZXNJbmRleCk7CiAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKQEAgLTEzNzEsMTkgKzEzMjEsMjAgQEAKIAl9CiAKIAlpZiAoQVJfU1JFVl85MjgwKGFoKSkKLQkJUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOworCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwgbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CisJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgKEFSX1NSRVZfOTI4NShhaCkgJiYKKwkgICAgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkpCisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQ29tbW9uLmlhX3Jvd3M7IGkrKykgewotCQl1MzIgcmVnID0gSU5JX1JBKCZhaHAtPmFoX2luaUNvbW1vbiwgaSwgMCk7Ci0JCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pQ29tbW9uLCBpLCAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaUNvbW1vbi5pYV9yb3dzOyBpKyspIHsKKwkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaUNvbW1vbiwgaSwgMCk7CisJCXUzMiB2YWwgPSBJTklfUkEoJmFoLT5pbmlDb21tb24sIGksIDEpOwogCiAJCVJFR19XUklURShhaCwgcmVnLCB2YWwpOwogCiAJCWlmIChyZWcgPj0gMHg3ODAwICYmIHJlZyA8IDB4NzhhMAotCQkgICAgJiYgYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKKwkJICAgICYmIGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CiAJCQl1ZGVsYXkoMTAwKTsKIAkJfQogCkBAIC0xMzkzLDcgKzEzNDQsNyBAQAogCWF0aDlrX2h3X3dyaXRlX3JlZ3MoYWgsIG1vZGVzSW5kZXgsIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIElTX0NIQU5fQV81TUhaX1NQQUNFRChjaGFuKSkgewotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNBZGRpdGlvbmFsLCBtb2Rlc0luZGV4LAorCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsIG1vZGVzSW5kZXgsCiAJCQkJcmVnV3JpdGVzKTsKIAl9CiAKQEAgLTE0MDEsMTMgKzEzNTIsMTUgQEAKIAlhdGg5a19od19zZXRfcmVncyhhaCwgY2hhbiwgbWFjbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9jaGFpbl9tYXNrcyhhaCk7CiAKLQlzdGF0dXMgPSBhdGg5a19od19zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCQkgICAgICBhdGg5a19yZWdkX2dldF9jdGwoYWgsIGNoYW4pLAotCQkJCSAgICAgIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwKLQkJCQkJCQkJICAgICBjaGFuKSwKLQkJCQkgICAgICBjaGFuLT5tYXhSZWdUeFBvd2VyICogMiwKLQkJCQkgICAgICBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJCSAgKHUzMikgYWgtPmFoX3Bvd2VyTGltaXQpKTsKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpCisJCWF0aDlrX29sY19pbml0KGFoKTsKKworCXN0YXR1cyA9IGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCQkgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCisJCQkJICBjaGFubmVsLT5tYXhfYW50ZW5uYV9nYWluICogMiwKKwkJCQkgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkJICBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCisJCQkJICAgICAgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKIAkJCSJlcnJvciBpbml0J2luZyB0cmFuc21pdCBwb3dlclxuIik7CkBAIC0xNDI3LDcgKzEzODAsNyBAQAogLyogUmVzZXQgYW5kIENoYW5uZWwgU3dpdGNoaW5nIFJvdXRpbmVzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JmbW9kZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JmbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIHJmTW9kZSA9IDA7CiAKQEAgLTE0NDcsMTIgKzE0MDAsMTIgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NT0RFLCByZk1vZGUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19tYXJrX3BoeV9pbmFjdGl2ZShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19tYXJrX3BoeV9pbmFjdGl2ZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BQ1RJVkUsIEFSX1BIWV9BQ1RJVkVfRElTKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldF9kbWEoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldF9kbWEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHJlZ3ZhbDsKIApAQCAtMTQ2Miw3ICsxNDE1LDcgQEAKIAlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfVFhDRkcpICYgfkFSX1RYQ0ZHX0RNQVNaX01BU0s7CiAJUkVHX1dSSVRFKGFoLCBBUl9UWENGRywgcmVndmFsIHwgQVJfVFhDRkdfRE1BU1pfMTI4Qik7CiAKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9UWENGRywgQVJfRlRSSUcsIGFoLT5haF90eFRyaWdMZXZlbCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfVFhDRkcsIEFSX0ZUUklHLCBhaC0+dHhfdHJpZ19sZXZlbCk7CiAKIAlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUlhDRkcpICYgfkFSX1JYQ0ZHX0RNQVNaX01BU0s7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWENGRywgcmVndmFsIHwgQVJfUlhDRkdfRE1BU1pfMTI4Qik7CkBAIC0xNDc4LDcgKzE0MzEsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IG9wbW9kZSkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IG9wbW9kZSkKIHsKIAl1MzIgdmFsOwogCkBAIC0xNTAyLDcgKzE0NTUsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2dldF9kZWx0YV9zbG9wZV92YWxzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19nZXRfZGVsdGFfc2xvcGVfdmFscyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSB1MzIgY29lZl9zY2FsZWQsCiAJCQkJCQkgdTMyICpjb2VmX21hbnRpc3NhLAogCQkJCQkJIHUzMiAqY29lZl9leHBvbmVudCkKQEAgLTE1MjEsNyArMTQ3NCw3IEBACiAJKmNvZWZfZXhwb25lbnQgPSBjb2VmX2V4cCAtIDE2OwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlbHRhX3Nsb3BlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTMyIGNvZWZfc2NhbGVkLCBkc19jb2VmX2V4cCwgZHNfY29lZl9tYW47CkBAIC0xNTU1LDExICsxNTA4LDE5IEBACiAJCSAgICAgIEFSX1BIWV9IQUxGR0lfRFNDX0VYUCwgZHNfY29lZl9leHApOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgdHlwZSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHR5cGUpCiB7CiAJdTMyIHJzdF9mbGFnczsKIAl1MzIgdG1wUmVnOwogCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKKwkJdTMyIHZhbCA9IFJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOworCQl2YWwgJj0gfkFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0Q7CisJCXZhbCB8PSBTTSgxLCBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9SVENfREVSSVZFRF9DTEssIHZhbCk7CisJCSh2b2lkKVJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOworCX0KKwogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCkBAIC0xNTgyLDExICsxNTQzLDExIEBACiAJCQlyc3RfZmxhZ3MgfD0gQVJfUlRDX1JDX01BQ19DT0xEOwogCX0KIAotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SQyksIHJzdF9mbGFncyk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkMsIHJzdF9mbGFncyk7CiAJdWRlbGF5KDUwKTsKIAotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SQyksIDApOwotCWlmICghYXRoOWtfaHdfd2FpdChhaCwgKHUxNikgKEFSX1JUQ19SQyksIEFSX1JUQ19SQ19NLCAwKSkgeworCVJFR19XUklURShhaCwgQVJfUlRDX1JDLCAwKTsKKwlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1JUQ19SQywgQVJfUlRDX1JDX00sIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCiAJCQkiUlRDIHN0dWNrIGluIE1BQyByZXNldFxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE2MDMsMTggKzE1NjQsMjAgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3Bvd2VyX29uKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9wb3dlcl9vbihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLCBBUl9SVENfRk9SQ0VfV0FLRV9FTiB8CiAJCSAgQVJfUlRDX0ZPUkNFX1dBS0VfT05fSU5UKTsKIAotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SRVNFVCksIDApOwotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19SRVNFVCksIDEpOworCVJFR19XUklURShhaCwgQVJfUlRDX1JFU0VULCAwKTsKKwl1ZGVsYXkoMik7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDEpOwogCiAJaWYgKCFhdGg5a19od193YWl0KGFoLAogCQkJICAgQVJfUlRDX1NUQVRVUywKIAkJCSAgIEFSX1JUQ19TVEFUVVNfTSwKLQkJCSAgIEFSX1JUQ19TVEFUVVNfT04pKSB7CisJCQkgICBBUl9SVENfU1RBVFVTX09OLAorCQkJICAgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgIlJUQyBub3Qgd2FraW5nIHVwXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE2MjQsNyArMTU4Nyw3IEBACiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldChhaCwgQVRIOUtfUkVTRVRfV0FSTSk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdHlwZSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB0eXBlKQogewogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsCiAJCSAgQVJfUlRDX0ZPUkNFX1dBS0VfRU4gfCBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwpAQCAtMTY0MiwxMiArMTYwNSwxMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQogewogCXUzMiBwaHltb2RlOwogCXUzMiBlbmFibGVEYWNGaWZvID0gMDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCiAJCWVuYWJsZURhY0ZpZm8gPSAoUkVHX1JFQUQoYWgsIEFSX1BIWV9UVVJCTykgJgpAQCAtMTY2Myw3ICsxNjI1LDcgQEAKIAkJICAgIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0MFBMVVMpKQogCQkJcGh5bW9kZSB8PSBBUl9QSFlfRkNfRFlOMjA0MF9QUklfQ0g7CiAKLQkJaWYgKGFocC0+YWhfZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUpCisJCWlmIChhaC0+ZXh0cHJvdHNwYWNpbmcgPT0gQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUpCiAJCQlwaHltb2RlIHw9IEFSX1BIWV9GQ19EWU4yMDQwX0VYVF9DSDsKIAl9CiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVFVSQk8sIHBoeW1vZGUpOwpAQCAtMTY3NCw1NCArMTYzNiwzMCBAQAogCVJFR19XUklURShhaCwgQVJfQ1NULCAweEYgPDwgQVJfQ1NUX1RJTUVPVVRfTElNSVRfUyk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF9yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9XQVJNKSkKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9QT1dFUl9PTikpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfV0FSTSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gZmFsc2U7Ci0KKwlhaC0+Y2hpcF9mdWxsc2xlZXAgPSBmYWxzZTsKIAlhdGg5a19od19pbml0X3BsbChhaCwgY2hhbik7Ci0KIAlhdGg5a19od19zZXRfcmZtb2RlKGFoLCBjaGFuKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmF0aDlrX2h3X2NoZWNrX2NoYW4oc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmICghKElTX0NIQU5fMkdIWihjaGFuKSBeIElTX0NIQU5fNUdIWihjaGFuKSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm90IG1hcmtlZCBhcyAiCi0JCQkiMkdIeiBvciA1R0h6XG4iLCBjaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoIUlTX0NIQU5fT0ZETShjaGFuKSAmJgotCSAgICAhSVNfQ0hBTl9CKGNoYW4pICYmCi0JICAgICFJU19DSEFOX0hUMjAoY2hhbikgJiYKLQkgICAgIUlTX0NIQU5fSFQ0MChjaGFuKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBub3QgbWFya2VkIGFzICIKLQkJCSJPRkRNIG9yIENDSyBvciBIVDIwIG9yIEhUNDBQTFVTIG9yIEhUNDBNSU5VU1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19jaGFubmVsX2NoYW5nZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGFubmVsX2NoYW5nZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlKQogeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAJdTMyIHN5bnRoRGVsYXksIHFudW07CiAKIAlmb3IgKHFudW0gPSAwOyBxbnVtIDwgQVJfTlVNX1FDVTsgcW51bSsrKSB7CkBAIC0xNzM0LDcgKzE2NzIsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZCVVNfUkVRLCBBUl9QSFlfUkZCVVNfUkVRX0VOKTsKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9SRkJVU19HUkFOVCwgQVJfUEhZX1JGQlVTX0dSQU5UX0VOLAotCQkJICAgQVJfUEhZX1JGQlVTX0dSQU5UX0VOKSkgeworCQkJICAgQVJfUEhZX1JGQlVTX0dSQU5UX0VOLCBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKIAkJCSJDb3VsZCBub3Qga2lsbCBiYXNlYmFuZCBSWFxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE3NTYsMTIgKzE2OTQsMTIgQEAKIAkJfQogCX0KIAotCWlmIChhdGg5a19od19zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCQkgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKLQkJCQkgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKGFoLCBjaGFuKSwKLQkJCQkgY2hhbi0+bWF4UmVnVHhQb3dlciAqIDIsCi0JCQkJIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkgICAgICh1MzIpIGFoLT5haF9wb3dlckxpbWl0KSkgIT0gMCkgeworCWlmIChhaC0+ZWVwX29wcy0+c2V0X3R4cG93ZXIoYWgsIGNoYW4sCisJCQkgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCisJCQkgICAgIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAorCQkJICAgICBjaGFubmVsLT5tYXhfcG93ZXIgKiAyLAorCQkJICAgICBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCisJCQkJICh1MzIpIGFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0KSkgIT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCiAJCQkiZXJyb3IgaW5pdCdpbmcgdHJhbnNtaXQgcG93ZXJcbiIpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0xNzkxLDcgKzE3MjksNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od185MjgwX3NwdXJfbWl0aWdhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJaW50IGJiX3NwdXIgPSBBUl9OT19TUFVSOwogCWludCBmcmVxOwpAQCAtMTgyNSw5ICsxNzYzLDkgQEAKIAlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CiAJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwogCi0JYWgtPmFoX2NvbmZpZy5zcHVybW9kZSA9IFNQVVJfRU5BQkxFX0VFUFJPTTsKKwlhaC0+Y29uZmlnLnNwdXJtb2RlID0gU1BVUl9FTkFCTEVfRUVQUk9NOwogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQljdXJfYmJfc3B1ciA9IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKGFoLCBpLCBpczJHSHopOworCQljdXJfYmJfc3B1ciA9IGFoLT5lZXBfb3BzLT5nZXRfc3B1cl9jaGFubmVsKGFoLCBpLCBpczJHSHopOwogCiAJCWlmIChpczJHSHopCiAJCQljdXJfYmJfc3B1ciA9IChjdXJfYmJfc3B1ciAvIDEwKSArIEFSX0JBU0VfRlJFUV8yR0haOwpAQCAtMTkzOCw5ICsxODc2LDkgQEAKIAkJaWYgKChjdXJfdml0X21hc2sgPiBsb3dlcikgJiYgKGN1cl92aXRfbWFzayA8IHVwcGVyKSkgewogCiAJCQkvKiB3b3JrYXJvdW5kIGZvciBnY2MgYnVnICMzNzAxNCAqLwotCQkJdm9sYXRpbGUgaW50IHRtcCA9IGFicyhjdXJfdml0X21hc2sgLSBiaW4pOworCQkJdm9sYXRpbGUgaW50IHRtcF92ID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CiAKLQkJCWlmICh0bXAgPCA3NSkKKwkJCWlmICh0bXBfdiA8IDc1KQogCQkJCW1hc2tfYW10ID0gMTsKIAkJCWVsc2UKIAkJCQltYXNrX2FtdCA9IDA7CkBAIC0yMDQxLDcgKzE5NzksNyBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX01BU0syX1BfNjFfNDUsIHRtcF9tYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJaW50IGJiX3NwdXIgPSBBUl9OT19TUFVSOwogCWludCBiaW4sIGN1cl9iaW47CkBAIC0yMDcwLDcgKzIwMDgsNyBAQAogCW1lbXNldCgmbWFza19wLCAwLCBzaXplb2YoaW50OF90KSAqIDEyMyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKLQkJY3VyX2JiX3NwdXIgPSBhdGg5a19od19lZXByb21fZ2V0X3NwdXJfY2hhbihhaCwgaSwgaXMyR0h6KTsKKwkJY3VyX2JiX3NwdXIgPSBhaC0+ZWVwX29wcy0+Z2V0X3NwdXJfY2hhbm5lbChhaCwgaSwgaXMyR0h6KTsKIAkJaWYgKEFSX05PX1NQVVIgPT0gY3VyX2JiX3NwdXIpCiAJCQlicmVhazsKIAkJY3VyX2JiX3NwdXIgPSBjdXJfYmJfc3B1ciAtIChjaGFuLT5jaGFubmVsICogMTApOwpAQCAtMjEzOSw5ICsyMDc3LDkgQEAKIAkJaWYgKChjdXJfdml0X21hc2sgPiBsb3dlcikgJiYgKGN1cl92aXRfbWFzayA8IHVwcGVyKSkgewogCiAJCQkvKiB3b3JrYXJvdW5kIGZvciBnY2MgYnVnICMzNzAxNCAqLwotCQkJdm9sYXRpbGUgaW50IHRtcCA9IGFicyhjdXJfdml0X21hc2sgLSBiaW4pOworCQkJdm9sYXRpbGUgaW50IHRtcF92ID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CiAKLQkJCWlmICh0bXAgPCA3NSkKKwkJCWlmICh0bXBfdiA8IDc1KQogCQkJCW1hc2tfYW10ID0gMTsKIAkJCWVsc2UKIAkJCQltYXNrX2FtdCA9IDA7CkBAIC0yMjQyLDU4ICsyMTgwLDQ3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUFTSzJfUF82MV80NSwgdG1wX21hc2spOwogfQogCi1ib29sIGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCSAgICBlbnVtIGF0aDlrX2h0X21hY21vZGUgbWFjbW9kZSwKLQkJICAgIHU4IHR4Y2hhaW5tYXNrLCB1OCByeGNoYWlubWFzaywKLQkJICAgIGVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmcsCi0JCSAgICBib29sIGJDaGFubmVsQ2hhbmdlLCBpbnQgKnN0YXR1cykKK2ludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCSAgICBib29sIGJDaGFubmVsQ2hhbmdlKQogewogCXUzMiBzYXZlTGVkU3RhdGU7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY3VyY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYWgtPmFoX3NjOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmN1cmNoYW47CiAJdTMyIHNhdmVEZWZBbnRlbm5hOwogCXUzMiBtYWNTdGFJZDE7Ci0JaW50IGVjb2RlOwotCWludCBpLCByeF9jaGFpbm1hc2s7CisJaW50IGksIHJ4X2NoYWlubWFzaywgcjsKIAotCWFocC0+YWhfZXh0cHJvdHNwYWNpbmcgPSBleHRwcm90c3BhY2luZzsKLQlhaHAtPmFoX3R4Y2hhaW5tYXNrID0gdHhjaGFpbm1hc2s7Ci0JYWhwLT5haF9yeGNoYWlubWFzayA9IHJ4Y2hhaW5tYXNrOworCWFoLT5leHRwcm90c3BhY2luZyA9IHNjLT5odF9leHRwcm90c3BhY2luZzsKKwlhaC0+dHhjaGFpbm1hc2sgPSBzYy0+dHhfY2hhaW5tYXNrOworCWFoLT5yeGNoYWlubWFzayA9IHNjLT5yeF9jaGFpbm1hc2s7CiAKLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgewotCQlhaHAtPmFoX3R4Y2hhaW5tYXNrICY9IDB4MzsKLQkJYWhwLT5haF9yeGNoYWlubWFzayAmPSAweDM7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwkJYWgtPnR4Y2hhaW5tYXNrICY9IDB4MTsKKwkJYWgtPnJ4Y2hhaW5tYXNrICY9IDB4MTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKKwkJYWgtPnR4Y2hhaW5tYXNrICY9IDB4MzsKKwkJYWgtPnJ4Y2hhaW5tYXNrICY9IDB4MzsKIAl9CiAKLQlpZiAoYXRoOWtfaHdfY2hlY2tfY2hhbihhaCwgY2hhbikgPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJZWNvZGUgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKLQl9CisJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKQorCQlyZXR1cm4gLUVJTzsKIAogCWlmIChjdXJjaGFuKQogCQlhdGg5a19od19nZXRuZihhaCwgY3VyY2hhbik7CiAKIAlpZiAoYkNoYW5uZWxDaGFuZ2UgJiYKLQkgICAgKGFocC0+YWhfY2hpcEZ1bGxTbGVlcCAhPSB0cnVlKSAmJgotCSAgICAoYWgtPmFoX2N1cmNoYW4gIT0gTlVMTCkgJiYKLQkgICAgKGNoYW4tPmNoYW5uZWwgIT0gYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwpICYmCisJICAgIChhaC0+Y2hpcF9mdWxsc2xlZXAgIT0gdHJ1ZSkgJiYKKwkgICAgKGFoLT5jdXJjaGFuICE9IE5VTEwpICYmCisJICAgIChjaGFuLT5jaGFubmVsICE9IGFoLT5jdXJjaGFuLT5jaGFubmVsKSAmJgogCSAgICAoKGNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSA9PQotCSAgICAgKGFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FMTCkpICYmCisJICAgICAoYWgtPmN1cmNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSkgJiYKIAkgICAgKCFBUl9TUkVWXzkyODAoYWgpIHx8ICghSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGNoYW4pICYmCi0JCQkJICAgIUlTX0NIQU5fQV81TUhaX1NQQUNFRChhaC0+YWhfY3VyY2hhbikpKSkgeworCQkJCSAgICFJU19DSEFOX0FfNU1IWl9TUEFDRUQoYWgtPmN1cmNoYW4pKSkpIHsKIAotCQlpZiAoYXRoOWtfaHdfY2hhbm5lbF9jaGFuZ2UoYWgsIGNoYW4sIG1hY21vZGUpKSB7Ci0JCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5haF9jdXJjaGFuKTsKKwkJaWYgKGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKGFoLCBjaGFuLCBzYy0+dHhfY2hhbl93aWR0aCkpIHsKKwkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOwogCQkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOwotCQkJcmV0dXJuIHRydWU7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIApAQCAtMjMxMSwyOCArMjIzOCwzMiBAQAogCiAJaWYgKCFhdGg5a19od19jaGlwX3Jlc2V0KGFoLCBjaGFuKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKLQkJZWNvZGUgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKLQkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAotCQkJICAgIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLCBBUl9HUElPX0pUQUdfRElTQUJMRSk7CiAKLQkJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJCWlmIChJU19DSEFOXzVHSFooY2hhbikpCi0JCQkJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIDksIDApOwotCQkJZWxzZQotCQkJCWF0aDlrX2h3X3NldF9ncGlvKGFoLCA5LCAxKTsKLQkJfQotCQlhdGg5a19od19jZmdfb3V0cHV0KGFoLCA5LCBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQl9CisJciA9IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKGFoLCBjaGFuLCBzYy0+dHhfY2hhbl93aWR0aCk7CisJaWYgKHIpCisJCXJldHVybiByOwogCi0JZWNvZGUgPSBhdGg5a19od19wcm9jZXNzX2luaShhaCwgY2hhbiwgbWFjbW9kZSk7Ci0JaWYgKGVjb2RlICE9IDApIHsKLQkJZWNvZGUgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDsKLQl9CisJLyogU2V0dXAgTUZQIG9wdGlvbnMgZm9yIENDTVAgKi8KKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgeworCQkvKiBNYXNrIFJldHJ5KGIxMSksIFB3ck1ndChiMTIpLCBNb3JlRGF0YShiMTMpIHRvIDAgaW4gbWdtdAorCQkgKiBmcmFtZXMgd2hlbiBjb25zdHJ1Y3RpbmcgQ0NNUCBBQUQuICovCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0FFU19NVVRFX01BU0sxLCBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01ULAorCQkJICAgICAgMHhjN2ZmKTsKKwkJYWgtPnN3X21nbXRfY3J5cHRvID0gZmFsc2U7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7CisJCS8qIERpc2FibGUgaGFyZHdhcmUgY3J5cHRvIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkgICAgQVJfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BDVV9NSVNDX01PREUyLAorCQkJICAgIEFSX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUKTsKKwkJYWgtPnN3X21nbXRfY3J5cHRvID0gdHJ1ZTsKKwl9IGVsc2UKKwkJYWgtPnN3X21nbXRfY3J5cHRvID0gdHJ1ZTsKIAogCWlmIChJU19DSEFOX09GRE0oY2hhbikgfHwgSVNfQ0hBTl9IVChjaGFuKSkKIAkJYXRoOWtfaHdfc2V0X2RlbHRhX3Nsb3BlKGFoLCBjaGFuKTsKQEAgLTIzNDIsNjEgKzIyNzMsNTYgQEAKIAllbHNlCiAJCWF0aDlrX2h3X3NwdXJfbWl0aWdhdGUoYWgsIGNoYW4pOwogCi0JaWYgKCFhdGg5a19od19lZXByb21fc2V0X2JvYXJkX3ZhbHVlcyhhaCwgY2hhbikpIHsKKwlpZiAoIWFoLT5lZXBfb3BzLT5zZXRfYm9hcmRfdmFsdWVzKGFoLCBjaGFuKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCiAJCQkiZXJyb3Igc2V0dGluZyBib2FyZCBvcHRpb25zXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoYWgsIGNoYW4pOwogCi0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoYWhwLT5haF9tYWNhZGRyKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9tYWNhZGRyICsgNCkKKwlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaC0+bWFjYWRkcikpOworCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KGFoLT5tYWNhZGRyICsgNCkKIAkJICB8IG1hY1N0YUlkMQogCQkgIHwgQVJfU1RBX0lEMV9SVFNfVVNFX0RFRgotCQkgIHwgKGFoLT5haF9jb25maWcuCisJCSAgfCAoYWgtPmNvbmZpZy4KIAkJICAgICBhY2tfNm1iID8gQVJfU1RBX0lEMV9BQ0tDVFNfNk1CIDogMCkKLQkJICB8IGFocC0+YWhfc3RhSWQxRGVmYXVsdHMpOwotCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPmFoX29wbW9kZSk7CisJCSAgfCBhaC0+c3RhX2lkMV9kZWZhdWx0cyk7CisJYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKGFoLCBhaC0+b3Btb2RlKTsKIAotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7CisJUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShhaCwgQVJfQlNTTVNLVSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5ic3NpZG1hc2sgKyA0KSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCBzYXZlRGVmQW50ZW5uYSk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaHAtPmFoX2Jzc2lkKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZCArIDQpIHwKLQkJICAoKGFocC0+YWhfYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKHNjLT5jdXJic3NpZCkpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIAogCVJFR19XUklURShhaCwgQVJfSVNSLCB+MCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JTU0lfVEhSLCBJTklUX1JTU0lfVEhSKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmICghKGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChhaCwgY2hhbikpKSB7Ci0JCQllY29kZSA9IC1FSU87Ci0JCQlnb3RvIGJhZDsKLQkJfQorCQlpZiAoIShhdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoYWgsIGNoYW4pKSkKKwkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7Ci0JCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpIHsKLQkJCWVjb2RlID0gLUVJTzsKLQkJCWdvdG8gYmFkOwotCQl9CisJCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfTlVNX0RDVTsgaSsrKQogCQlSRUdfV1JJVEUoYWgsIEFSX0RRQ1VNQVNLKGkpLCAxIDw8IGkpOwogCi0JYWhwLT5haF9pbnRyVHhxcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBzLnRvdGFsX3F1ZXVlczsgaSsrKQorCWFoLT5pbnRyX3R4cXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy50b3RhbF9xdWV1ZXM7IGkrKykKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBpKTsKIAotCWF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKGFoLCBhaC0+YWhfb3Btb2RlKTsKKwlhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhhaCwgYWgtPm9wbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9xb3MoYWgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKICNlbmRpZgogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CkBAIC0yNDA4LDcgKzIzMzQsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9PQlMsIDgpOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikgewogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfTEFTVCwgNTAwKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9GSVJTVCwgMjAwMCk7CkBAIC0yNDE2LDEyICsyMzQyLDEwIEBACiAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAotCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKXsKLQkJZWNvZGUgPSAtRUlPOzsKLQkJZ290byBiYWQ7Ci0JfQorCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQorCQlyZXR1cm4gLUVJTzs7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKIAlpZiAoKHJ4X2NoYWlubWFzayA9PSAweDUpIHx8IChyeF9jaGFpbm1hc2sgPT0gMHgzKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CkBAIC0yNDQ4LDIyICsyMzcyLDE4IEBACiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKLWJhZDoKLQlpZiAoc3RhdHVzKQotCQkqc3RhdHVzID0gZWNvZGU7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleXJlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpCiB7CiAJdTMyIGtleVR5cGU7CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNDkwLDE3ICsyNDEwLDE3IEBACiAKIAl9CiAKLQlpZiAoYWgtPmFoX2N1cmNoYW4gPT0gTlVMTCkKKwlpZiAoYWgtPmN1cmNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpCitib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQogewogCXUzMiBtYWNIaSwgbWFjTG87CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNTI0LDE3ICsyNDQ0LDEzIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5LAorYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSkKKwkJCQkgY29uc3QgdTggKm1hYykKIHsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7Ci0JdTMyIHhvck1hc2sgPSB4b3JLZXkgPwotCQkoQVRIOUtfS0VZX1hPUiA8PCAyNCB8IEFUSDlLX0tFWV9YT1IgPDwgMTYgfCBBVEg5S19LRVlfWE9SIDw8IDgKLQkJIHwgQVRIOUtfS0VZX1hPUikgOiAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoZW50cnkgPj0gcENhcC0+a2V5Y2FjaGVfc2l6ZSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19LRVlDQUNIRSwKQEAgLTI1NTAsNyArMjQ2Niw3IEBACiAJCWlmICghKHBDYXAtPmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSkpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJCSJBRVMtQ0NNIG5vdCBzdXBwb3J0ZWQgYnkgbWFjIHJldiAweCV4XG4iLAotCQkJCWFoLT5haF9tYWNSZXYpOworCQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJa2V5VHlwZSA9IEFSX0tFWVRBQkxFX1RZUEVfQ0NNOwpAQCAtMjU4NiwyNiArMjUwMiw1NyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Ja2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKSBeIHhvck1hc2s7Ci0Ja2V5MSA9IChnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdmFsICsgNCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXkyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDYpIF4geG9yTWFzazsKLQlrZXkzID0gKGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXk0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDEyKSBeIHhvck1hc2s7CisJa2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKTsKKwlrZXkxID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDQpOworCWtleTIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgNik7CisJa2V5MyA9IGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCk7CisJa2V5NCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAxMik7CiAJaWYgKGstPmt2X2xlbiA8PSBMRU5fV0VQMTA0KQogCQlrZXk0ICY9IDB4ZmY7CiAKKwkvKgorCSAqIE5vdGU6IEtleSBjYWNoZSByZWdpc3RlcnMgYWNjZXNzIHNwZWNpYWwgbWVtb3J5IGFyZWEgdGhhdCByZXF1aXJlcworCSAqIHR3byAzMi1iaXQgd3JpdGVzIHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgdmFsdWVzIGluIHRoZSBpbnRlcm5hbAorCSAqIG1lbW9yeS4gQ29uc2VxdWVudGx5LCB0aGUgZXhhY3Qgb3JkZXIgYW5kIHBhaXJzIHVzZWQgaGVyZSBtdXN0IGJlCisJICogbWFpbnRhaW5lZC4KKwkgKi8KKwogCWlmIChrZXlUeXBlID09IEFSX0tFWVRBQkxFX1RZUEVfVEtJUCAmJiBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkpIHsKIAkJdTE2IG1pY2VudHJ5ID0gZW50cnkgKyA2NDsKIAorCQkvKgorCQkgKiBXcml0ZSBpbnZlcnRlZCBrZXlbNDc6MF0gZmlyc3QgdG8gYXZvaWQgTWljaGFlbCBNSUMgZXJyb3JzCisJCSAqIG9uIGZyYW1lcyB0aGF0IGNvdWxkIGJlIHNlbnQgb3IgcmVjZWl2ZWQgYXQgdGhlIHNhbWUgdGltZS4KKwkJICogVGhlIGNvcnJlY3Qga2V5IHdpbGwgYmUgd3JpdHRlbiBpbiB0aGUgZW5kIG9uY2UgZXZlcnl0aGluZworCQkgKiBlbHNlIGlzIHJlYWR5LgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwgfmtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCB+a2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKKworCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCi0JCWlmIChhaHAtPmFoX21pc2NNb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkgeworCQlpZiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpIHsKKwkJCS8qCisJCQkgKiBUS0lQIHVzZXMgdHdvIGtleSBjYWNoZSBlbnRyaWVzOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkKKwkJCSAqIChpZHggPSBtYWluIGluZGV4ICsgNjQpOgorCQkJICoga2V5MCBbMzE6MF0gPSBSWCBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFsxNTowXSA9IFRYIGtleSBbMzE6MTZdCisJCQkgKiBrZXkxIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5MiBbMzE6MF0gPSBSWCBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMTU6MF0gPSBUWCBrZXkgWzE1OjBdCisJCQkgKiBrZXkzIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSBUWCBrZXkgWzYzOjMyXQorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMSwgbWljMiwgbWljMywgbWljNDsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKQEAgLTI2MTMsNTEgKzI1NjAsOTAgQEAKIAkJCW1pYzEgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAyKSAmIDB4ZmZmZjsKIAkJCW1pYzMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAwKSAmIDB4ZmZmZjsKIAkJCW1pYzQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdHhtaWMgKyA0KTsKKworCQkJLyogV3JpdGUgUlhbMzE6MF0gYW5kIFRYWzMxOjE2XSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKG1pY2VudHJ5KSwgbWljMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEobWljZW50cnkpLCBtaWMxKTsKKworCQkJLyogV3JpdGUgUlhbNjM6MzJdIGFuZCBUWFsxNTowXSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKG1pY2VudHJ5KSwgbWljMik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCBtaWMzKTsKKworCQkJLyogV3JpdGUgVFhbNjM6MzJdIGFuZCBrZXlUeXBlKHJlc2VydmVkKSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgbWljNCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVEtJUCB1c2VzIGZvdXIga2V5IGNhY2hlIGVudHJpZXMgKHR3byBmb3IgZ3JvdXAKKwkJCSAqIGtleXMpOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBhcmUgaW4gZGlmZmVyZW50IGtleSBjYWNoZQorCQkJICogZW50cmllcyAoaWR4ID0gbWFpbiBpbmRleCArIDY0IGZvciBUWCBhbmQKKwkJCSAqIG1haW4gaW5kZXggKyAzMiArIDk2IGZvciBSWCk6CisJCQkgKiBrZXkwIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFszMTowXSA9IHJlc2VydmVkCisJCQkgKiBrZXkyIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoKKwkJCSAqIFVwcGVyIGxheWVyIGNvZGUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gc2VwYXJhdGVseQorCQkJICogZm9yIFRYIGFuZCBSWCBrZXlzIHdoZW4gdGhlc2UgcmVnaXN0ZXJzIG9mZnNldHMgYXJlCisJCQkgKiB1c2VkLgorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMjsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKIAkJCW1pYzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgNCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbMzE6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbNjM6MzJdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIobWljZW50cnkpLCBtaWMyKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMyhtaWNlbnRyeSksIDApOworCisJCQkvKiBXcml0ZSBUWFs2MzozMl0gYW5kIGtleVR5cGUocmVzZXJ2ZWQpICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQobWljZW50cnkpLCAwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CiAJCX0KKworCQkvKiBNQUMgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGZvciB0aGUgTUlDIGVudHJ5ICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMChtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzEobWljZW50cnkpLCAwKTsKKworCQkvKgorCQkgKiBXcml0ZSB0aGUgY29ycmVjdCAodW4taW52ZXJ0ZWQpIGtleVs0NzowXSBsYXN0IHRvIGVuYWJsZQorCQkgKiBUS0lQIG5vdyB0aGF0IGFsbCBvdGhlciByZWdpc3RlcnMgYXJlIHNldCB3aXRoIGNvcnJlY3QKKwkJICogdmFsdWVzLgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOwogCX0gZWxzZSB7CisJCS8qIFdyaXRlIGtleVs0NzowXSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKIAorCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCX0KIAotCWlmIChhaC0+YWhfY3VyY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSkKIHsKLQlpZiAoZW50cnkgPCBhaC0+YWhfY2Fwcy5rZXljYWNoZV9zaXplKSB7CisJaWYgKGVudHJ5IDwgYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZSkgewogCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX0tFWVRBQkxFX01BQzEoZW50cnkpKTsKIAkJaWYgKHZhbCAmIEFSX0tFWVRBQkxFX1ZBTElEKQogCQkJcmV0dXJuIHRydWU7CkBAIC0yNjY5LDcgKzI2NTUsNyBAQAogLyogUG93ZXIgTWFuYWdlbWVudCAoQ2hpcHNldCkgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX3NldF9wb3dlcl9zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgc2V0Q2hpcCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfU1RBX0lEMSwgQVJfU1RBX0lEMV9QV1JfU0FWKTsKIAlpZiAoc2V0Q2hpcCkgewpAQCAtMjY3OCwxNiArMjY2NCwxNiBAQAogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIgfCBBUl9SQ19IT1NUSUYpOwogCi0JCVJFR19DTFJfQklUKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwKKwkJUkVHX0NMUl9CSVQoYWgsIChBUl9SVENfUkVTRVQpLAogCQkJICAgIEFSX1JUQ19SRVNFVF9FTik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX25ldHdvcmtfc2xlZXAoc3RydWN0IGF0aF9odyAqYWgsIGludCBzZXRDaGlwKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9TVEFfSUQxLCBBUl9TVEFfSUQxX1BXUl9TQVYpOwogCWlmIChzZXRDaGlwKSB7Ci0JCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAKIAkJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLApAQCAtMjY5OSw4ICsyNjg1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBpbnQgc2V0Q2hpcCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHNldENoaXApCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTI3NDEsMjAgKzI3MjYsMTggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewogCQkiQVdBS0UiLAogCQkiRlVMTC1TTEVFUCIsCiAJCSJORVRXT1JLIFNMRUVQIiwKIAkJIlVOREVGSU5FRCIKIAl9OwotCWludCBzdGF0dXMgPSB0cnVlLCBzZXRDaGlwID0gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsICIlcyAtPiAlcyAoJXMpXG4iLAotCQltb2Rlc1thaHAtPmFoX3Bvd2VyTW9kZV0sIG1vZGVzW21vZGVdLAorCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdLAogCQlzZXRDaGlwID8gInNldCBjaGlwICIgOiAiIik7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTI3NjMsNyArMjc0Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfUE1fRlVMTF9TTEVFUDoKIAkJYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKGFoLCBzZXRDaGlwKTsKLQkJYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gdHJ1ZTsKKwkJYWgtPmNoaXBfZnVsbHNsZWVwID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19QTV9ORVRXT1JLX1NMRUVQOgogCQlhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChhaCwgc2V0Q2hpcCk7CkBAIC0yNzczLDQxICsyNzU2LDU3IEBACiAJCQkiVW5rbm93biBwb3dlciBtb2RlICV1XG4iLCBtb2RlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlhaHAtPmFoX3Bvd2VyTW9kZSA9IG1vZGU7CisJYWgtPnBvd2VyX21vZGUgPSBtb2RlOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSkKKy8qCisgKiBIZWxwZXIgZm9yIEFTUE0gc3VwcG9ydC4KKyAqCisgKiBEaXNhYmxlIFBMTCB3aGVuIGluIEwwcyBhcyB3ZWxsIGFzIHJlY2VpdmVyIGNsb2NrIHdoZW4gaW4gTDEuCisgKiBUaGlzIHBvd2VyIHNhdmluZyBvcHRpb24gbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggdGhlIFNlckRlcy4KKyAqCisgKiBQcm9ncmFtbWluZyB0aGUgU2VyRGVzIG11c3QgZ28gdGhyb3VnaCB0aGUgc2FtZSAyODggYml0IHNlcmlhbCBzaGlmdAorICogcmVnaXN0ZXIgYXMgdGhlIG90aGVyIGFuYWxvZyByZWdpc3RlcnMuICBIZW5jZSB0aGUgOSB3cml0ZXMuCisgKi8KK3ZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcmVzdG9yZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXU4IGk7CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcyAhPSB0cnVlKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcyAhPSB0cnVlKQogCQlyZXR1cm47CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwkvKiBEbyBub3QgdG91Y2ggU2VyRGVzIHJlZ2lzdGVycyAqLworCWlmIChhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9PSAyKQogCQlyZXR1cm47CiAKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIHJlc3RvcmUgZm9yIDExTiAqLwogCWlmIChyZXN0b3JlKQogCQlyZXR1cm47CiAKIAlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlQY2llU2VyZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJUkVHX1dSSVRFKGFoLCBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMCksCi0JCQkJICBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMSkpOworCQkvKgorCQkgKiBBUjkyODAgMi4wIG9yIGxhdGVyIGNoaXBzIHVzZSBTZXJEZXMgdmFsdWVzIGZyb20gdGhlCisJCSAqIGluaXR2YWxzLmggaW5pdGlhbGl6ZWQgZGVwZW5kaW5nIG9uIGNoaXBzZXQgZHVyaW5nCisJCSAqIGF0aDlrX2h3X2RvX2F0dGFjaCgpCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaVBjaWVTZXJkZXMuaWFfcm93czsgaSsrKSB7CisJCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDApLAorCQkJCSAgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMSkpOwogCQl9Ci0JCXVkZWxheSgxMDAwKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkgJiYKLQkJICAgKGFoLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzEwKSkgeworCQkgICAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmQwMCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjQ5MjQ5MjQpOwogCisJCS8qIFJYIHNodXQgb2ZmIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhhODAwMDAxOSk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MTMxNjA4MjApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGU1OTgwNTYwKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkKKwkJLyogU2h1dCBvZmYgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLworCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkKIAkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4NDAxZGVmZmMpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDQwMWRlZmZkKTsKQEAgLTI4MTYsNDIgKzI4MTUsNTkgQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhiZTEwNTU1NCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAwNDMwMDcpOwogCisJCS8qIExvYWQgdGhlIG5ldyBzZXR0aW5ncyAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiAKLQkJdWRlbGF5KDEwMDApOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDI0OTI0OTI0KTsKKworCQkvKiBSWCBzaHV0IG9mZiB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjgwMDAwMzkpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDUzMTYwODI0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhlNTk4MDU3OSk7CisKKwkJLyoKKwkJICogSWdub3JlIGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgc2V0dGluZyBmb3IKKwkJICogcHJlLUFSOTI4MCAxMW4KKwkJICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAxZGVmZmYpOworCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MWFhYWJlNDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGJlMTA1NTU0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgwMDBlMzAwNyk7CisKKwkJLyogTG9hZCB0aGUgbmV3IHNldHRpbmdzICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKIAl9CiAKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiBzZXQgYml0IDE5IHRvIGFsbG93IGZvcmNpbmcgb2YgcGNpZSBjb3JlIGludG8gTDEgc3RhdGUgKi8KIAlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBBUl9QQ0lFX1BNX0NUUkxfRU5BKTsKIAotCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfd2FlbikgewotCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+YWhfY29uZmlnLnBjaWVfd2Flbik7CisJLyogU2V2ZXJhbCBQQ0llIG1hc3NhZ2VzIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3VyICovCisJaWYgKGFoLT5jb25maWcucGNpZV93YWVuKSB7CisJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5jb25maWcucGNpZV93YWVuKTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKKwkJLyoKKwkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCisJCSAqIG90aGVyd2lzZSBjYXJkIG1heSBkaXNhcHBlYXIuCisJCSAqLwogCQllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQkJUkVHX1dSSVRFKGFoLCBBUl9XQSwgQVI5MjgwX1dBX0RFRkFVTFQpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBBUl9XQV9ERUZBVUxUKTsKIAl9Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIGhvc3RfaXNyOwogCkBAIC0yODcwLDE0ICsyODg2LDEzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpCitib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgKm1hc2tlZCkKIHsKIAl1MzIgaXNyID0gMDsKIAl1MzIgbWFzazIgPSAwOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAl1MzIgc3luY19jYXVzZSA9IDA7CiAJYm9vbCBmYXRhbF9pbnQgPSBmYWxzZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CiAJCWlmIChSRUdfUkVBRChhaCwgQVJfSU5UUl9BU1lOQ19DQVVTRSkgJiBBUl9JTlRSX01BQ19JUlEpIHsKQEAgLTI5MTUsNiArMjkzMCw4IEBACiAJCQkJbWFzazIgfD0gQVRIOUtfSU5UX0dUVDsKIAkJCWlmIChpc3IyICYgQVJfSVNSX1MyX0NTVCkKIAkJCQltYXNrMiB8PSBBVEg5S19JTlRfQ1NUOworCQkJaWYgKGlzcjIgJiBBUl9JU1JfUzJfVFNGT09SKQorCQkJCW1hc2syIHw9IEFUSDlLX0lOVF9UU0ZPT1I7CiAJCX0KIAogCQlpc3IgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1JBQyk7CkBAIC0yOTI1LDcgKzI5NDIsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKSB7CisJCWlmIChhaC0+aW50cl9taXRpZ2F0aW9uKSB7CiAJCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCiAJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CiAJCX0KQEAgLTI5NDAsMTIgKzI5NTcsMTIgQEAKIAkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX1RYOwogCiAJCQlzMF9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TMF9TKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWE9LKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWERFU0MpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYT0spOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYREVTQyk7CiAKIAkJCXMxX3MgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1MxX1MpOwotCQkJYWhwLT5haF9pbnRyVHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRVJSKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczFfcywgQVJfSVNSX1MxX1FDVV9UWEVPTCk7CisJCQlhaC0+aW50cl90eHFzIHw9IE1TKHMxX3MsIEFSX0lTUl9TMV9RQ1VfVFhFUlIpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRU9MKTsKIAkJfQogCiAJCWlmIChpc3IgJiBBUl9JU1JfUlhPUk4pIHsKQEAgLTMwMDIsMTcgKzMwMTksMTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitlbnVtIGF0aDlrX2ludCBhdGg5a19od19pbnRyZ2V0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXJldHVybiBBSDU0MTYoYWgpLT5haF9tYXNrUmVnOworCXJldHVybiBhaC0+bWFza19yZWc7CiB9CiAKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JdTMyIG9tYXNrID0gYWhwLT5haF9tYXNrUmVnOworCXUzMiBvbWFzayA9IGFoLT5tYXNrX3JlZzsKIAl1MzIgbWFzaywgbWFzazI7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSU5URVJSVVBULCAiMHgleCA9PiAweCV4XG4iLCBvbWFzaywgaW50cyk7CiAKQEAgLTMwMzMsMTggKzMwNDksMTggQEAKIAltYXNrMiA9IDA7CiAKIAlpZiAoaW50cyAmIEFUSDlLX0lOVF9UWCkgewotCQlpZiAoYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eG9rX2ludGVycnVwdF9tYXNrKQogCQkJbWFzayB8PSBBUl9JTVJfVFhPSzsKLQkJaWYgKGFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGRlc2NfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWERFU0M7Ci0JCWlmIChhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaykKIAkJCW1hc2sgfD0gQVJfSU1SX1RYRVJSOwotCQlpZiAoYWhwLT5haF90eEVvbEludGVycnVwdE1hc2spCisJCWlmIChhaC0+dHhlb2xfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWEVPTDsKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKQorCQlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKIAkJCW1hc2sgfD0gQVJfSU1SX1JYTUlOVFIgfCBBUl9JTVJfUlhJTlRNOwogCQllbHNlCiAJCQltYXNrIHw9IEFSX0lNUl9SWE9LIHwgQVJfSU1SX1JYREVTQzsKQEAgLTMwNjEsNyArMzA3Nyw5IEBACiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQogCQkJbWFzazIgfD0gQVJfSU1SX1MyX0RUSU1TWU5DOwogCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9DQUJFTkQpCi0JCQltYXNrMiB8PSAoQVJfSU1SX1MyX0NBQkVORCk7CisJCQltYXNrMiB8PSBBUl9JTVJfUzJfQ0FCRU5EOworCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9UU0ZPT1IpCisJCQltYXNrMiB8PSBBUl9JTVJfUzJfVFNGT09SOwogCX0KIAogCWlmIChpbnRzICYgKEFUSDlLX0lOVF9HVFQgfCBBVEg5S19JTlRfQ1NUKSkgewpAQCAtMzA4Miw3ICszMTAwLDcgQEAKIAkJCQkJICAgQVJfSU1SX1MyX1RTRk9PUiB8CiAJCQkJCSAgIEFSX0lNUl9TMl9HVFQgfCBBUl9JTVJfUzJfQ1NUKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgbWFzayB8IG1hc2syKTsKLQlhaHAtPmFoX21hc2tSZWcgPSBpbnRzOworCWFoLT5tYXNrX3JlZyA9IGludHM7CiAKIAlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpIHsKIAkJaWYgKGludHMgJiBBVEg5S19JTlRfVElNX1RJTUVSKQpAQCAtMzExNiwxNCArMzEzNCwxMyBAQAogLyogQmVhY29uIEhhbmRsaW5nICovCiAvKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKK3ZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBmbGFncyA9IDA7CiAKLQlhaHAtPmFoX2JlYWNvbkludGVydmFsID0gYmVhY29uX3BlcmlvZDsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gYmVhY29uX3BlcmlvZDsKIAotCXN3aXRjaCAoYWgtPmFoX29wbW9kZSkgeworCXN3aXRjaCAoYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKG5leHRfYmVhY29uKSk7CkBAIC0zMTM2LDE4ICszMTUzLDE4IEBACiAJCQkgICAgQVJfVFhDRkdfQURIT0NfQkVBQ09OX0FUSU1fVFhfUE9MSUNZKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX05EUF9USU1FUiwKIAkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiArCi0JCQkJICAgICAoYWhwLT5haF9hdGltV2luZG93ID8gYWhwLT4KLQkJCQkgICAgICBhaF9hdGltV2luZG93IDogMSkpKTsKKwkJCQkgICAgIChhaC0+YXRpbV93aW5kb3cgPyBhaC0+CisJCQkJICAgICAgYXRpbV93aW5kb3cgOiAxKSkpOwogCQlmbGFncyB8PSBBUl9ORFBfVElNRVJfRU47CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBkbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1NXQkEsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBzd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOwogCQlmbGFncyB8PQogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CkBAIC0zMTU1LDcgKzMxNzIsNyBAQAogCWRlZmF1bHQ6CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0JFQUNPTiwKIAkJCSIlczogdW5zdXBwb3J0ZWQgb3Btb2RlOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBhaC0+YWhfb3Btb2RlKTsKKwkJCV9fZnVuY19fLCBhaC0+b3Btb2RlKTsKIAkJcmV0dXJuOwogCQlicmVhazsKIAl9CkBAIC0zMTc0LDExICszMTkxLDExIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX1RJTUVSX01PREUsIGZsYWdzKTsKIH0KIAotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKQogewogCXUzMiBuZXh0VGJ0dCwgYmVhY29uaW50dmFsLCBkdGltcGVyaW9kLCBiZWFjb250aW1lb3V0OwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKGJzLT5ic19uZXh0dGJ0dCkpOwogCkBAIC0zMjMyLDQzICszMjQ5LDQ2IEBACiAJCSAgICBBUl9UQlRUX1RJTUVSX0VOIHwgQVJfVElNX1RJTUVSX0VOIHwKIAkJICAgIEFSX0RUSU1fVElNRVJfRU4pOwogCisJLyogVFNGIE91dCBvZiBSYW5nZSBUaHJlc2hvbGQgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1RTRk9PUl9USFJFU0hPTEQsIGJzLT5ic190c2Zvb3JfdGhyZXNob2xkKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKiovCiAvKiBIVyBDYXBhYmlsaXRpZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXUxNiBjYXBGaWVsZCA9IDAsIGVldmFsOwogCi0JZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7CisJYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9IGVldmFsOwogCi0JYWgtPmFoX2N1cnJlbnRSRCA9IGVldmFsOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7CisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCWVldmFsIHw9IEFSOTI4NV9SREVYVF9ERUZBVUxUOworCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7Ci0JYWgtPmFoX2N1cnJlbnRSREV4dCA9IGVldmFsOworCWNhcEZpZWxkID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PUF9DQVApOwogCi0JY2FwRmllbGQgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKLQotCWlmIChhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9zdWJ2ZW5kb3JpZCA9PSBBUl9TVUJWRU5ET1JfSURfTkVXX0EpIHsKLQkJaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg2NCB8fCBhaC0+YWhfY3VycmVudFJEID09IDB4NjUpCi0JCQlhaC0+YWhfY3VycmVudFJEICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg0MSkKLQkJCWFoLT5haF9jdXJyZW50UkQgPSAweDQzOworCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgeworCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCisJCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPmFoX2N1cnJlbnRSRCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkKTsKIAl9CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PUF9NT0RFKTsKKwllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CiAJYml0bWFwX3plcm8ocENhcC0+d2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsKIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFBLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7Ci0JCWlmIChhaC0+YWhfY29uZmlnLmh0X2VuYWJsZSkgeworCQlpZiAoYWgtPmNvbmZpZy5odF9lbmFibGUpIHsKIAkJCWlmICghKGVldmFsICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwKSkKIAkJCQlzZXRfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLAogCQkJCQlwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CkBAIC0zMjg0LDcgKzMzMDQsNyBAQAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKLQkJaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKSB7CisJCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkgewogCQkJaWYgKCEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjApKQogCQkJCXNldF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsCiAJCQkJCXBDYXAtPndpcmVsZXNzX21vZGVzKTsKQEAgLTMyOTcsMTggKzMzMTcsMTUgQEAKIAkJfQogCX0KIAotCXBDYXAtPnR4X2NoYWlubWFzayA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKLQlpZiAoKGFoLT5haF9pc1BjaUV4cHJlc3MpCi0JICAgIHx8IChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkpIHsKLQkJcENhcC0+cnhfY2hhaW5tYXNrID0KLQkJCWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKLQl9IGVsc2UgewotCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPQotCQkJKGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCAwKSkgPyAweDUgOiAweDc7Ci0JfQorCXBDYXAtPnR4X2NoYWlubWFzayA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhfTUFTSyk7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjU0MTZfREVWSURfUENJKSAmJgorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSkKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAotCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5haF9tYWNSZXYgPT0gMCkpKQotCQlhaHAtPmFoX21pc2NNb2RlIHw9IEFSX1BDVV9NSUNfTkVXX0xPQ19FTkE7CisJaWYgKCEoQVJfU1JFVl85MjgwKGFoKSAmJiAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IDApKSkKKwkJYWgtPm1pc2NfbW9kZSB8PSBBUl9QQ1VfTUlDX05FV19MT0NfRU5BOwogCiAJcENhcC0+bG93XzJnaHpfY2hhbiA9IDIzMTI7CiAJcENhcC0+aGlnaF8yZ2h6X2NoYW4gPSAyNzMyOwpAQCAtMzMyNiw3ICszMzQzLDcgQEAKIAogCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFEOwogCi0JaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKQorCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfSFQ7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfSFQ7CkBAIC0zMzUyLDcgKzMzNjksOSBAQAogCXBDYXAtPm51bV9tcl9yZXRyaWVzID0gNDsKIAlwQ2FwLT50eF90cmlnbGV2ZWxfbWF4ID0gTUFYX1RYX0ZJRk9fVEhSRVNIT0xEOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUjkyODVfTlVNX0dQSU87CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI4WF9OVU1fR1BJTzsKIAllbHNlCiAJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUl9OVU1fR1BJTzsKQEAgLTMzNzUsMjIgKzMzOTQsMjIgQEAKIAlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWFoLT5haF9yZnNpbGVudCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRl9TSUxFTlQpOwotCWlmIChhaC0+YWhfcmZzaWxlbnQgJiBFRVBfUkZTSUxFTlRfRU5BQkxFRCkgewotCQlhaC0+YWhfcmZraWxsX2dwaW8gPQotCQkJTVMoYWgtPmFoX3Jmc2lsZW50LCBFRVBfUkZTSUxFTlRfR1BJT19TRUwpOwotCQlhaC0+YWhfcmZraWxsX3BvbGFyaXR5ID0KLQkJCU1TKGFoLT5haF9yZnNpbGVudCwgRUVQX1JGU0lMRU5UX1BPTEFSSVRZKTsKKwlhaC0+cmZzaWxlbnQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JGX1NJTEVOVCk7CisJaWYgKGFoLT5yZnNpbGVudCAmIEVFUF9SRlNJTEVOVF9FTkFCTEVEKSB7CisJCWFoLT5yZmtpbGxfZ3BpbyA9CisJCQlNUyhhaC0+cmZzaWxlbnQsIEVFUF9SRlNJTEVOVF9HUElPX1NFTCk7CisJCWFoLT5yZmtpbGxfcG9sYXJpdHkgPQorCQkJTVMoYWgtPnJmc2lsZW50LCBFRVBfUkZTSUxFTlRfUE9MQVJJVFkpOwogCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1JGU0lMRU5UOwogCX0KICNlbmRpZgogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkgfHwKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApIHx8CisJICAgIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKIAkJcENhcC0+aHdfY2FwcyAmPSB+QVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKQEAgLTM0MDAsNyArMzQxOSw3IEBACiAJZWxzZQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUzsKIAotCWlmIChhaC0+YWhfY3VycmVudFJERXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgeworCWlmIChhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCAmICgxIDw8IFJFR19FWFRfSkFQQU5fTUlEQkFORCkpIHsKIAkJcENhcC0+cmVnX2NhcCA9CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSB8CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiB8CkBAIC0zNDE1LDE5ICszNDM0LDIyIEBACiAJcENhcC0+cmVnX2NhcCB8PSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQ7CiAKIAlwQ2FwLT5udW1fYW50Y2ZnXzVnaHogPQotCQlhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CisJCWFoLT5lZXBfb3BzLT5nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CiAJcENhcC0+bnVtX2FudGNmZ18yZ2h6ID0KLQkJYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgeworCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOworCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7CisJCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19nZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFUSDlLX0NBUF9DSVBIRVI6CiAJCXN3aXRjaCAoY2FwYWJpbGl0eSkgewpAQCAtMzQ0NiwyMyArMzQ2OCwxNyBAQAogCQljYXNlIDA6CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIChhaHAtPmFoX3N0YUlkMURlZmF1bHRzICYKKwkJCXJldHVybiAoYWgtPnN0YV9pZDFfZGVmYXVsdHMgJgogCQkJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKSA/IHRydWUgOgogCQkJZmFsc2U7CiAJCX0KIAljYXNlIEFUSDlLX0NBUF9US0lQX1NQTElUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKSA/CisJCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KIAkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9XTUVfVEtJUE1JQzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBBVEg5S19DQVBfUEhZQ09VTlRFUlM6Ci0JCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyAwIDogLUVOWElPOwogCWNhc2UgQVRIOUtfQ0FQX0RJVkVSU0lUWToKIAkJcmV0dXJuIChSRUdfUkVBRChhaCwgQVJfUEhZX0NDS19ERVRFQ1QpICYKIAkJCUFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpID8KIAkJCXRydWUgOiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9QSFlESUFHOgotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNIOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKIAkJY2FzZSAwOgpAQCAtMzQ3MSw1NyArMzQ4Nyw0OCBAQAogCQkJaWYgKFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSAmIEFSX1NUQV9JRDFfQURIT0MpIHsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCXJldHVybiAoYWhwLT5haF9zdGFJZDFEZWZhdWx0cyAmCisJCQkJcmV0dXJuIChhaC0+c3RhX2lkMV9kZWZhdWx0cyAmCiAJCQkJCUFSX1NUQV9JRDFfTUNBU1RfS1NSQ0gpID8gdHJ1ZSA6CiAJCQkJCWZhbHNlOwogCQkJfQogCQl9CiAJCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfVFhfQUREX1RTRikgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1JGU0lMRU5UOgotCQlpZiAoY2FwYWJpbGl0eSA9PSAzKQotCQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX0FOVF9DRkdfMkdIWjoKLQkJKnJlc3VsdCA9IHBDYXAtPm51bV9hbnRjZmdfMmdoejsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfQU5UX0NGR181R0haOgotCQkqcmVzdWx0ID0gcENhcC0+bnVtX2FudGNmZ181Z2h6OwotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9UWFBPVzoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3Bvd2VyTGltaXQ7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQ7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSAyOgotCQkJKnJlc3VsdCA9IGFoLT5haF9tYXhQb3dlckxldmVsOworCQkJKnJlc3VsdCA9IGFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3RwU2NhbGU7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBBVEg5S19DQVBfRFM6CisJCXJldHVybiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkNfQ0hBSU5fTUFTSykgPT0gMSkpCisJCQk/IGZhbHNlIDogdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgdjsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQVRIOUtfQ0FQX1RLSVBfTUlDOgogCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgfD0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzIHw9CiAJCQkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7CiAJCWVsc2UKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgJj0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzICY9CiAJCQkJfkFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9ESVZFUlNJVFk6CkBAIC0zNTM0LDE1ICszNTQxLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKIAkJaWYgKHNldHRpbmcpCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzIHw9IEFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CisJCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwogCQllbHNlCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzICY9IH5BUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7Ci0JCWVsc2UKLQkJCWFocC0+YWhfbWlzY01vZGUgJj0gfkFSX1BDVV9UWF9BRERfVFNGOworCQkJYWgtPnN0YV9pZDFfZGVmYXVsdHMgJj0gfkFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTM1NTMsNyArMzU1NCw3IEBACiAvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19ncGlvX2NmZ19vdXRwdXRfbXV4KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dwaW9fY2ZnX291dHB1dF9tdXgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSB1MzIgZ3BpbywgdTMyIHR5cGUpCiB7CiAJaW50IGFkZHI7CkBAIC0zNTgxLDExICszNTgyLDExIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pCit2b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAl1MzIgZ3Bpb19zaGlmdDsKIAotCUFTU0VSVChncGlvIDwgYWgtPmFoX2NhcHMubnVtX2dwaW9fcGlucyk7CisJQVNTRVJUKGdwaW8gPCBhaC0+Y2Fwcy5udW1fZ3Bpb19waW5zKTsKIAogCWdwaW9fc2hpZnQgPSBncGlvIDw8IDE7CiAKQEAgLTM1OTUsMjIgKzM1OTYsMjMgQEAKIAkJKEFSX0dQSU9fT0VfT1VUX0RSViA8PCBncGlvX3NoaWZ0KSk7CiB9CiAKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKQordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+PSBhaC0+YWhfY2Fwcy5udW1fZ3Bpb19waW5zKQorI2RlZmluZSBNU19SRUdfUkVBRCh4LCB5KSBcCisJKE1TKFJFR19SRUFEKGFoLCBBUl9HUElPX0lOX09VVCksIHgjI19HUElPX0lOX1ZBTCkgJiAoQVJfR1BJT19CSVQoeSkpKQorCisJaWYgKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlyZXR1cm4gKE1TCi0JCQkoUkVHX1JFQUQoYWgsIEFSX0dQSU9fSU5fT1VUKSwKLQkJCSBBUjkyOFhfR1BJT19JTl9WQUwpICYgQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChNUyhSRUdfUkVBRChhaCwgQVJfR1BJT19JTl9PVVQpLCBBUl9HUElPX0lOX1ZBTCkgJgotCQkJQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfQorCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5Mjg1LCBncGlvKSAhPSAwOworCWVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyOFgsIGdwaW8pICE9IDA7CisJZWxzZQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVIsIGdwaW8pICE9IDA7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKIAkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpCiB7CiAJdTMyIGdwaW9fc2hpZnQ7CkBAIC0zNjI1LDE0ICszNjI3LDE0IEBACiAJCShBUl9HUElPX09FX09VVF9EUlYgPDwgZ3Bpb19zaGlmdCkpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpCit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCkKIHsKIAlSRUdfUk1XKGFoLCBBUl9HUElPX0lOX09VVCwgKCh2YWwgJiAxKSA8PCBncGlvKSwKIAkJQVJfR1BJT19CSVQoZ3BpbykpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCiAJCSAgICBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQik7CkBAIC0zNjQwLDUwICszNjQyLDI4IEBACiAJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMiwKIAkJICAgIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCk7CiAKLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPnJma2lsbF9ncGlvKTsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RFU1QsIFJGU0lMRU5UX0JCKTsKIH0KICNlbmRpZgogCi1pbnQgYXRoOWtfaHdfc2VsZWN0X2FudGNvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjZmcpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOwotCXUxNiBhbnRfY29uZmlnOwotCXUzMiBoYWxOdW1BbnRDb25maWc7Ci0KLQloYWxOdW1BbnRDb25maWcgPSBJU19DSEFOXzJHSFooY2hhbikgPwotCQlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogOiBwQ2FwLT5udW1fYW50Y2ZnXzVnaHo7Ci0KLQlpZiAoY2ZnIDwgaGFsTnVtQW50Q29uZmlnKSB7Ci0JCWlmICghYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwKLQkJCQkJCSAgICAgY2ZnLCAmYW50X2NvbmZpZykpIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoKQordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIFJFR19SRUFEKGFoLCBBUl9ERUZfQU5URU5OQSkgJiAweDc7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBhbnRlbm5hKQordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCAoYW50ZW5uYSAmIDB4NykpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCiAJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKIAkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAogCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdGF0aWMgdTggdHhfY2hhaW5tYXNrX2NmZywgcnhfY2hhaW5tYXNrX2NmZzsKIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CkBAIC0zNzAwLDcgKzM2ODAsNyBAQAogCQkJKmFudGVubmFfY2ZnZCA9IHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVEg5S19BTlRfRklYRURfQjoKLQkJCWlmIChhaC0+YWhfY2Fwcy50eF9jaGFpbm1hc2sgPgorCQkJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayA+CiAJCQkgICAgQVRIOUtfQU5URU5OQTFfQ0hBSU5NQVNLKSB7CiAJCQkJKnR4X2NoYWlubWFzayA9IEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSzsKIAkJCX0KQEAgLTM3MTYsNyArMzY5Niw3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IHNldHRpbmdzOworCQlhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MjYsNyArMzcwNiw3IEBACiAvKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCkKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgYml0cyA9IFJFR19SRUFEKGFoLCBBUl9SWF9GSUxURVIpOwogCXUzMiBwaHliaXRzID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlIpOwpAQCAtMzczOSw3ICszNzE5LDcgQEAKIAlyZXR1cm4gYml0czsKIH0KIAotdm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBiaXRzKQordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpCiB7CiAJdTMyIHBoeWJpdHM7CiAKQEAgLTM3NTksMTIgKzM3MzksMTIgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19aTEZETUEpOwogfQogCi1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pOwogfQogCi1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzc3Miw4MiArMzc1Miw1NCBAQAogCXJldHVybiBhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9DT0xEKTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGxpbWl0KQorYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+YWhfcG93ZXJMaW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCWFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKLQlpZiAoYXRoOWtfaHdfc2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwgY2hhbiksCi0JCQkJIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICAgICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpICE9IDApCisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKQordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCW1lbWNweShtYWMsIGFocC0+YWhfbWFjYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhaC0+bWFjYWRkciwgbWFjLCBFVEhfQUxFTik7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYykKK3ZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQotCXJldHVybiB0cnVlOworCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPm9wbW9kZSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoYWgsIGFoLT5haF9vcG1vZGUpOwotfQotCi12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQogewogCVJFR19XUklURShhaCwgQVJfTUNBU1RfRklMMCwgZmlsdGVyMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NQ0FTVF9GSUwxLCBmaWx0ZXIxKTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFzaykKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkobWFzaywgYWhwLT5haF9ic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShzYy0+c2NfYWgsIEFSX0JTU01TS1UsIGdldF91bmFsaWduZWRfbGUxNihzYy0+YnNzaWRtYXNrICsgNCkpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGNvbnN0IHU4ICptYXNrKQordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9ic3NpZG1hc2ssIG1hc2ssIEVUSF9BTEVOKTsKLQotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmN1cmJzc2lkKSk7CisJUkVHX1dSSVRFKHNjLT5zY19haCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIH0KIAotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JbWVtY3B5KGFocC0+YWhfYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYWhwLT5haF9hc3NvY0lkID0gYXNzb2NJZDsKLQotCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWQpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDEsIGdldF91bmFsaWduZWRfbGUxNihhaHAtPmFoX2Jzc2lkICsgNCkgfAotCQkgICgoYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOwotfQotCi11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKQordTY0IGF0aDlrX2h3X2dldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXU2NCB0c2Y7CiAKQEAgLTM4NTcsNyArMzgwOSwxMyBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgsIHU2NCB0c2Y2NCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIHRzZjY0ICYgMHhmZmZmZmZmZik7CisJUkVHX1dSSVRFKGFoLCBBUl9UU0ZfVTMyLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBjb3VudDsKIApAQCAtMzg3NCw0MiArMzgzMiw2NSBAQAogCVJFR19XUklURShhaCwgQVJfUkVTRVRfVFNGLCBBUl9SRVNFVF9UU0ZfT05DRSk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKQorYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHNldHRpbmcpCi0JCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CisJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CiAJZWxzZQotCQlhaHAtPmFoX21pc2NNb2RlICY9IH5BUl9QQ1VfVFhfQUREX1RTRjsKKwkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1cykKK2Jvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOworCQlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX3Nsb3R0aW1lID0gdXM7CisJCWFoLT5zbG90dGltZSA9IHVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKQordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSkKIHsKIAl1MzIgbWFjbW9kZTsKIAogCWlmIChtb2RlID09IEFUSDlLX0hUX01BQ01PREVfMjA0MCAmJgotCSAgICAhYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSkKKwkgICAgIWFoLT5jb25maWcuY3dtX2lnbm9yZV9leHRjY2EpCiAJCW1hY21vZGUgPSBBUl8yMDQwX0pPSU5FRF9SWF9DTEVBUjsKIAllbHNlCiAJCW1hY21vZGUgPSAwOwogCiAJUkVHX1dSSVRFKGFoLCBBUl8yMDQwX01PREUsIG1hY21vZGUpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIEJsdWV0b290aCBDb2V4aXN0ZW5jZSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwkvKiBjb25uZWN0IGJ0X2FjdGl2ZSB0byBiYXNlYmFuZCAqLworCVJFR19DTFJfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYpKTsKKworCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIEdQSU8gcG9ydCBmb3IgVFhfRlJBTUUgb3V0cHV0ICovCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPndsYW5hY3RpdmVfZ3BpbywKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKaW5kZXggOTFkOGY1OTQuLmRjNjgxZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaApAQCAtMTksOTM2ICsxOSw0MyBAQAogCiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXN0cnVjdCBhcjU0MTZfZGVzYyB7Ci0JdTMyIGRzX2xpbms7Ci0JdTMyIGRzX2RhdGE7Ci0JdTMyIGRzX2N0bDA7Ci0JdTMyIGRzX2N0bDE7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTMyIGN0bDI7Ci0JCQl1MzIgY3RsMzsKLQkJCXUzMiBjdGw0OwotCQkJdTMyIGN0bDU7Ci0JCQl1MzIgY3RsNjsKLQkJCXUzMiBjdGw3OwotCQkJdTMyIGN0bDg7Ci0JCQl1MzIgY3RsOTsKLQkJCXUzMiBjdGwxMDsKLQkJCXUzMiBjdGwxMTsKLQkJCXUzMiBzdGF0dXMwOwotCQkJdTMyIHN0YXR1czE7Ci0JCQl1MzIgc3RhdHVzMjsKLQkJCXUzMiBzdGF0dXMzOwotCQkJdTMyIHN0YXR1czQ7Ci0JCQl1MzIgc3RhdHVzNTsKLQkJCXUzMiBzdGF0dXM2OwotCQkJdTMyIHN0YXR1czc7Ci0JCQl1MzIgc3RhdHVzODsKLQkJCXUzMiBzdGF0dXM5OwotCQl9IHR4OwotCQlzdHJ1Y3QgewotCQkJdTMyIHN0YXR1czA7Ci0JCQl1MzIgc3RhdHVzMTsKLQkJCXUzMiBzdGF0dXMyOwotCQkJdTMyIHN0YXR1czM7Ci0JCQl1MzIgc3RhdHVzNDsKLQkJCXUzMiBzdGF0dXM1OwotCQkJdTMyIHN0YXR1czY7Ci0JCQl1MzIgc3RhdHVzNzsKLQkJCXUzMiBzdGF0dXM4OwotCQl9IHJ4OwotCX0gdTsKLX0gX19wYWNrZWQ7CisjaW5jbHVkZSAibWFjLmgiCisjaW5jbHVkZSAiYW5pLmgiCisjaW5jbHVkZSAiZWVwcm9tLmgiCisjaW5jbHVkZSAiY2FsaWIuaCIKKyNpbmNsdWRlICJyZWdkLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAicGh5LmgiCiAKLSNkZWZpbmUgQVI1NDE2REVTQyhfZHMpICAgICAgICAgKChzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKLSNkZWZpbmUgQVI1NDE2REVTQ19DT05TVChfZHMpICAgKChjb25zdCBzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKyNkZWZpbmUgQVRIRVJPU19WRU5ET1JfSUQJMHgxNjhjCisjZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0kJMHgwMDIzCisjZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0lFCTB4MDAyNAorI2RlZmluZSBBUjkxNjBfREVWSURfUENJCTB4MDAyNworI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQorI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKKyNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCisjZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCisjZGVmaW5lCUFSX1NVQlZFTkRPUl9JRF9OT0cJMHgwZTExCisjZGVmaW5lIEFSX1NVQlZFTkRPUl9JRF9ORVdfQQkweDcwNjUKKyNkZWZpbmUgQVI1NDE2X01BR0lDCQkweDE5NjQxMDE0CiAKLSNkZWZpbmUgZHNfY3RsMiAgICAgdS50eC5jdGwyCi0jZGVmaW5lIGRzX2N0bDMgICAgIHUudHguY3RsMwotI2RlZmluZSBkc19jdGw0ICAgICB1LnR4LmN0bDQKLSNkZWZpbmUgZHNfY3RsNSAgICAgdS50eC5jdGw1Ci0jZGVmaW5lIGRzX2N0bDYgICAgIHUudHguY3RsNgotI2RlZmluZSBkc19jdGw3ICAgICB1LnR4LmN0bDcKLSNkZWZpbmUgZHNfY3RsOCAgICAgdS50eC5jdGw4Ci0jZGVmaW5lIGRzX2N0bDkgICAgIHUudHguY3RsOQotI2RlZmluZSBkc19jdGwxMCAgICB1LnR4LmN0bDEwCi0jZGVmaW5lIGRzX2N0bDExICAgIHUudHguY3RsMTEKKy8qIFJlZ2lzdGVyIHJlYWQvd3JpdGUgcHJpbWl0aXZlcyAqLworI2RlZmluZSBSRUdfV1JJVEUoX2FoLCBfcmVnLCBfdmFsKSBhdGg5a19pb3dyaXRlMzIoKF9haCksIChfcmVnKSwgKF92YWwpKQorI2RlZmluZSBSRUdfUkVBRChfYWgsIF9yZWcpIGF0aDlrX2lvcmVhZDMyKChfYWgpLCAoX3JlZykpCiAKLSNkZWZpbmUgZHNfdHhzdGF0dXMwICAgIHUudHguc3RhdHVzMAotI2RlZmluZSBkc190eHN0YXR1czEgICAgdS50eC5zdGF0dXMxCi0jZGVmaW5lIGRzX3R4c3RhdHVzMiAgICB1LnR4LnN0YXR1czIKLSNkZWZpbmUgZHNfdHhzdGF0dXMzICAgIHUudHguc3RhdHVzMwotI2RlZmluZSBkc190eHN0YXR1czQgICAgdS50eC5zdGF0dXM0Ci0jZGVmaW5lIGRzX3R4c3RhdHVzNSAgICB1LnR4LnN0YXR1czUKLSNkZWZpbmUgZHNfdHhzdGF0dXM2ICAgIHUudHguc3RhdHVzNgotI2RlZmluZSBkc190eHN0YXR1czcgICAgdS50eC5zdGF0dXM3Ci0jZGVmaW5lIGRzX3R4c3RhdHVzOCAgICB1LnR4LnN0YXR1czgKLSNkZWZpbmUgZHNfdHhzdGF0dXM5ICAgIHUudHguc3RhdHVzOQotCi0jZGVmaW5lIGRzX3J4c3RhdHVzMCAgICB1LnJ4LnN0YXR1czAKLSNkZWZpbmUgZHNfcnhzdGF0dXMxICAgIHUucnguc3RhdHVzMQotI2RlZmluZSBkc19yeHN0YXR1czIgICAgdS5yeC5zdGF0dXMyCi0jZGVmaW5lIGRzX3J4c3RhdHVzMyAgICB1LnJ4LnN0YXR1czMKLSNkZWZpbmUgZHNfcnhzdGF0dXM0ICAgIHUucnguc3RhdHVzNAotI2RlZmluZSBkc19yeHN0YXR1czUgICAgdS5yeC5zdGF0dXM1Ci0jZGVmaW5lIGRzX3J4c3RhdHVzNiAgICB1LnJ4LnN0YXR1czYKLSNkZWZpbmUgZHNfcnhzdGF0dXM3ICAgIHUucnguc3RhdHVzNwotI2RlZmluZSBkc19yeHN0YXR1czggICAgdS5yeC5zdGF0dXM4Ci0KLSNkZWZpbmUgQVJfRnJhbWVMZW4gICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1ZpcnRNb3JlRnJhZyAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBBUl9UeEN0bFJzdmQwMCAgICAgIDB4MDAwMGUwMDAKLSNkZWZpbmUgQVJfWG1pdFBvd2VyICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIEFSX1htaXRQb3dlcl9TICAgICAgMTYKLSNkZWZpbmUgQVJfUlRTRW5hYmxlICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIEFSX1ZFT0wgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBBUl9DbHJEZXN0TWFzayAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkMDEgICAgICAweDFlMDAwMDAwCi0jZGVmaW5lIEFSX1R4SW50clJlcSAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBBUl9EZXN0SWR4VmFsaWQgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgQVJfQ1RTRW5hYmxlICAgICAgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgQVJfQnVmTGVuICAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1R4TW9yZSAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBBUl9EZXN0SWR4ICAgICAgICAgIDB4MDAwZmUwMDAKLSNkZWZpbmUgQVJfRGVzdElkeF9TICAgICAgICAxMwotI2RlZmluZSBBUl9GcmFtZVR5cGUgICAgICAgIDB4MDBmMDAwMDAKLSNkZWZpbmUgQVJfRnJhbWVUeXBlX1MgICAgICAyMAotI2RlZmluZSBBUl9Ob0FjayAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgQVJfSW5zZXJ0VFMgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIEFSX0NvcnJ1cHRGQ1MgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBBUl9FeHRPbmx5ICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgQVJfRXh0QW5kQ3RsICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIEFSX01vcmVBZ2dyICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBBUl9Jc0FnZ3IgICAgICAgICAgIDB4NDAwMDAwMDAKLQotI2RlZmluZSBBUl9CdXJzdER1ciAgICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfQnVyc3REdXJfUyAgICAgICAwCi0jZGVmaW5lIEFSX0R1clVwZGF0ZUVuYSAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMCAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczBfUyAxNgotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMSAgIDB4MDBmMDAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczFfUyAyMAotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMiAgIDB4MGYwMDAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczJfUyAyNAotI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMyAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczNfUyAyOAotCi0jZGVmaW5lIEFSX1htaXRSYXRlMCAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9YbWl0UmF0ZTBfUyAgICAgIDAKLSNkZWZpbmUgQVJfWG1pdFJhdGUxICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMV9TICAgICAgOAotI2RlZmluZSBBUl9YbWl0UmF0ZTIgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfWG1pdFJhdGUyX1MgICAgICAxNgotI2RlZmluZSBBUl9YbWl0UmF0ZTMgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfWG1pdFJhdGUzX1MgICAgICAyNAotCi0jZGVmaW5lIEFSX1BhY2tldER1cjAgICAgICAgMHgwMDAwN2ZmZgotI2RlZmluZSBBUl9QYWNrZXREdXIwX1MgICAgIDAKLSNkZWZpbmUgQVJfUlRTQ1RTUXVhbDAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX1BhY2tldER1cjEgICAgICAgMHg3ZmZmMDAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIxX1MgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0NUU1F1YWwxICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX1BhY2tldER1cjIgICAgICAgMHgwMDAwN2ZmZgotI2RlZmluZSBBUl9QYWNrZXREdXIyX1MgICAgIDAKLSNkZWZpbmUgQVJfUlRTQ1RTUXVhbDIgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX1BhY2tldER1cjMgICAgICAgMHg3ZmZmMDAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIzX1MgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0NUU1F1YWwzICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0FnZ3JMZW4gICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBBUl9BZ2dyTGVuX1MgICAgICAgIDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkNjAgICAgICAweDAwMDMwMDAwCi0jZGVmaW5lIEFSX1BhZERlbGltICAgICAgICAgMHgwM2ZjMDAwMAotI2RlZmluZSBBUl9QYWREZWxpbV9TICAgICAgIDE4Ci0jZGVmaW5lIEFSX0VuY3JUeXBlICAgICAgICAgMHgwYzAwMDAwMAotI2RlZmluZSBBUl9FbmNyVHlwZV9TICAgICAgIDI2Ci0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDYxICAgICAgMHhmMDAwMDAwMAotCi0jZGVmaW5lIEFSXzIwNDBfMCAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUl9HSTAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfQ2hhaW5TZWwwICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIEFSX0NoYWluU2VsMF9TICAgICAgMgotI2RlZmluZSBBUl8yMDQwXzEgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfR0kxICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIEFSX0NoYWluU2VsMSAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBBUl9DaGFpblNlbDFfUyAgICAgIDcKLSNkZWZpbmUgQVJfMjA0MF8yICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEFSX0dJMiAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBBUl9DaGFpblNlbDIgICAgICAgIDB4MDAwMDcwMDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwyX1MgICAgICAxMgotI2RlZmluZSBBUl8yMDQwXzMgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgQVJfR0kzICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX0NoYWluU2VsMyAgICAgICAgMHgwMDBlMDAwMAotI2RlZmluZSBBUl9DaGFpblNlbDNfUyAgICAgIDE3Ci0jZGVmaW5lIEFSX1JUU0NUU1JhdGUgICAgICAgMHgwZmYwMDAwMAotI2RlZmluZSBBUl9SVFNDVFNSYXRlX1MgICAgIDIwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDcwICAgICAgMHhmMDAwMDAwMAotCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAwICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9UeFJTU0lBbnQwMF9TICAgIDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDEgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAxX1MgICAgOAotI2RlZmluZSBBUl9UeFJTU0lBbnQwMiAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDJfUyAgICAxNgotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMCAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgQVJfVHhCYVN0YXR1cyAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDAxICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0ZybVhtaXRPSyAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfRXhjZXNzaXZlUmV0cmllcyAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9GSUZPVW5kZXJydW4gICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX0ZpbHRlcmVkICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQVJfUlRTRmFpbENudCAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBBUl9SVFNGYWlsQ250X1MgICAgICAgICA0Ci0jZGVmaW5lIEFSX0RhdGFGYWlsQ250ICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgQVJfRGF0YUZhaWxDbnRfUyAgICAgICAgOAotI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnQgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIEFSX1ZpcnRSZXRyeUNudF9TICAgICAgIDEyCi0jZGVmaW5lIEFSX1R4RGVsaW1VbmRlcnJ1biAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgQVJfVHhEYXRhVW5kZXJydW4gICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9EZXNjQ2ZnRXJyICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIEFSX1R4VGltZXJFeHBpcmVkICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMTAgICAgICAgMHhmZmYwMDAwMAotCi0jZGVmaW5lIEFSX1NlbmRUaW1lc3RhbXAgICAgZHNfdHhzdGF0dXMyCi0jZGVmaW5lIEFSX0JhQml0bWFwTG93ICAgICAgZHNfdHhzdGF0dXMzCi0jZGVmaW5lIEFSX0JhQml0bWFwSGlnaCAgICAgZHNfdHhzdGF0dXM0Ci0KLSNkZWZpbmUgQVJfVHhSU1NJQW50MTAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1R4UlNTSUFudDEwX1MgICAgMAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMSAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTFfUyAgICA4Ci0jZGVmaW5lIEFSX1R4UlNTSUFudDEyICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMl9TICAgIDE2Ci0jZGVmaW5lIEFSX1R4UlNTSUNvbWJpbmVkICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZF9TIDI0Ci0KLSNkZWZpbmUgQVJfVHhFVk0wICAgICAgICAgICBkc190eHN0YXR1czUKLSNkZWZpbmUgQVJfVHhFVk0xICAgICAgICAgICBkc190eHN0YXR1czYKLSNkZWZpbmUgQVJfVHhFVk0yICAgICAgICAgICBkc190eHN0YXR1czcKLQotI2RlZmluZSBBUl9UeERvbmUgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfU2VxTnVtICAgICAgICAgICAweDAwMDAxZmZlCi0jZGVmaW5lIEFSX1NlcU51bV9TICAgICAgICAgMQotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MCAgIDB4MDAwMWUwMDAKLSNkZWZpbmUgQVJfVHhPcEV4Y2VlZGVkICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgxICAgMHgwMDFjMDAwMAotI2RlZmluZSBBUl9GaW5hbFR4SWR4ICAgICAgIDB4MDA2MDAwMDAKLSNkZWZpbmUgQVJfRmluYWxUeElkeF9TICAgICAyMQotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MiAgIDB4MDE4MDAwMDAKLSNkZWZpbmUgQVJfUG93ZXJNZ210ICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgzICAgMHhmYzAwMDAwMAotCi0jZGVmaW5lIEFSX1J4Q1RMUnN2ZDAwICAweGZmZmZmZmZmCi0KLSNkZWZpbmUgQVJfQnVmTGVuICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgQVJfUnhDdGxSc3ZkMDAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfUnhJbnRyUmVxICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgQVJfUnhDdGxSc3ZkMDEgIDB4ZmZmZmMwMDAKLQotI2RlZmluZSBBUl9SeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDBfUyAgICAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMV9TICAgIDgKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAyX1MgICAgMTYKLSNkZWZpbmUgQVJfUnhSYXRlICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEFSX1J4UmF0ZV9TICAgICAgICAgMjQKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMDAgICAweGZmMDAwMDAwCi0KLSNkZWZpbmUgQVJfRGF0YUxlbiAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1J4TW9yZSAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBBUl9OdW1EZWxpbSAgICAgICAgIDB4MDAzZmMwMDAKLSNkZWZpbmUgQVJfTnVtRGVsaW1fUyAgICAgICAxNAotI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQxMCAgIDB4ZmY4MDAwMDAKLQotI2RlZmluZSBBUl9SY3ZUaW1lc3RhbXAgICAgIGRzX3J4c3RhdHVzMgotCi0jZGVmaW5lIEFSX0dJICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUl8yMDQwICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfUGFyYWxsZWw0MCAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX1BhcmFsbGVsNDBfUyAgICAgMgotI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQzMCAgIDB4MDAwMDAwZjgKLSNkZWZpbmUgQVJfUnhBbnRlbm5hCSAgICAweGZmZmZmZjAwCi0jZGVmaW5lIEFSX1J4QW50ZW5uYV9TCSAgICA4Ci0KLSNkZWZpbmUgQVJfUnhSU1NJQW50MTAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1J4UlNTSUFudDEwX1MgICAgICAgICAgMAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMSAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTFfUyAgICAgICAgICA4Ci0jZGVmaW5lIEFSX1J4UlNTSUFudDEyICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMl9TICAgICAgICAgIDE2Ci0jZGVmaW5lIEFSX1J4UlNTSUNvbWJpbmVkICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZF9TICAgICAgIDI0Ci0KLSNkZWZpbmUgQVJfUnhFVk0wICAgICAgICAgICBkc19yeHN0YXR1czQKLSNkZWZpbmUgQVJfUnhFVk0xICAgICAgICAgICBkc19yeHN0YXR1czUKLSNkZWZpbmUgQVJfUnhFVk0yICAgICAgICAgICBkc19yeHN0YXR1czYKLQotI2RlZmluZSBBUl9SeERvbmUgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfUnhGcmFtZU9LICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX0NSQ0VyciAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9EZWNyeXB0Q1JDRXJyICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQVJfUEhZRXJyICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIEFSX01pY2hhZWxFcnIgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBBUl9QcmVEZWxpbUNSQ0VyciAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkNzAgICAweDAwMDAwMDgwCi0jZGVmaW5lIEFSX1J4S2V5SWR4VmFsaWQgICAgMHgwMDAwMDEwMAotI2RlZmluZSBBUl9LZXlJZHggICAgICAgICAgIDB4MDAwMGZlMDAKLSNkZWZpbmUgQVJfS2V5SWR4X1MgICAgICAgICA5Ci0jZGVmaW5lIEFSX1BIWUVyckNvZGUgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9QSFlFcnJDb2RlX1MgICAgIDgKLSNkZWZpbmUgQVJfUnhNb3JlQWdnciAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX1J4QWdnciAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9Qb3N0RGVsaW1DUkNFcnIgIDB4MDAwNDAwMDAKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkNzEgICAweDNmZjgwMDAwCi0jZGVmaW5lIEFSX0RlY3J5cHRCdXN5RXJyICAgMHg0MDAwMDAwMAotI2RlZmluZSBBUl9LZXlNaXNzICAgICAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUjU0MTZfTUFHSUMgICAgICAgIDB4MTk2NDEwMTQKLQotI2RlZmluZSBSWFNUQVRVU19SQVRFKGFoLCBhZHMpICAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgPwlcCi0JCQkJIE1TKGFkcy0+ZHNfcnhzdGF0dXMwLCBBUl9SeFJhdGUpIDoJXAotCQkJCSAoYWRzLT5kc19yeHN0YXR1czMgPj4gMikgJiAweEZGKQotCi0jZGVmaW5lIHNldDExblRyaWVzKF9zZXJpZXMsIF9pbmRleCkgXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5UcmllcywgQVJfWG1pdERhdGFUcmllcyMjX2luZGV4KSkKLQotI2RlZmluZSBzZXQxMW5SYXRlKF9zZXJpZXMsIF9pbmRleCkgXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5SYXRlLCBBUl9YbWl0UmF0ZSMjX2luZGV4KSkKLQotI2RlZmluZSBzZXQxMW5Qa3REdXJSVFNDVFMoX3NlcmllcywgX2luZGV4KQkJCQlcCi0JKFNNKChfc2VyaWVzKVtfaW5kZXhdLlBrdER1cmF0aW9uLCBBUl9QYWNrZXREdXIjI19pbmRleCkgfAlcCi0JKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgID8JXAotCQlBUl9SVFNDVFNRdWFsIyNfaW5kZXggOiAwKSkKLQotI2RlZmluZSBzZXQxMW5SYXRlRmxhZ3MoX3NlcmllcywgX2luZGV4KQkJCQlcCi0JKCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTXzIwNDAgPwkJXAotCSAgQVJfMjA0MF8jI19pbmRleCA6IDApCQkJCQkJXAotCSB8KChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJID8JXAotCSAgIEFSX0dJIyNfaW5kZXggOiAwKQkJCQkJCVwKLQkgfFNNKChfc2VyaWVzKVtfaW5kZXhdLkNoU2VsLCBBUl9DaGFpblNlbCMjX2luZGV4KSkKLQotI2RlZmluZSBBUl9TUkVWXzkxMDAoYWgpICgoYWgtPmFoX21hY1ZlcnNpb24pID09IEFSX1NSRVZfVkVSU0lPTl85MTAwKQotCi0jZGVmaW5lIElOSVRfQ09ORklHX1NUQVRVUyAgMHgwMDAwMDAwMAotI2RlZmluZSBJTklUX1JTU0lfVEhSICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgSU5JVF9CQ09OX0NOVFJMX1JFRyAweDAwMDAwMDAwCi0KLSNkZWZpbmUgTUlOX1RYX0ZJRk9fVEhSRVNIT0xEICAgMHgxCi0jZGVmaW5lIE1BWF9UWF9GSUZPX1RIUkVTSE9MRCAgICgoNDA5NiAvIDY0KSAtIDEpCi0jZGVmaW5lIElOSVRfVFhfRklGT19USFJFU0hPTEQgIE1JTl9UWF9GSUZPX1RIUkVTSE9MRAotCi1zdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgewotCXN0cnVjdCBhdGg5a19jaGFubmVsIGM7Ci0JdTggbm9pc2VJbW11bml0eUxldmVsOwotCXU4IHNwdXJJbW11bml0eUxldmVsOwotCXU4IGZpcnN0ZXBMZXZlbDsKLQl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKLQl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOwotCXUzMiBsaXN0ZW5UaW1lOwotCXUzMiBvZmRtVHJpZ0hpZ2g7Ci0JdTMyIG9mZG1UcmlnTG93OwotCWludDMyX3QgY2NrVHJpZ0hpZ2g7Ci0JaW50MzJfdCBjY2tUcmlnTG93OwotCWludDMyX3QgcnNzaVRockxvdzsKLQlpbnQzMl90IHJzc2lUaHJIaWdoOwotCXUzMiBub2lzZUZsb29yOwotCXUzMiB0eEZyYW1lQ291bnQ7Ci0JdTMyIHJ4RnJhbWVDb3VudDsKLQl1MzIgY3ljbGVDb3VudDsKLQl1MzIgb2ZkbVBoeUVyckNvdW50OwotCXUzMiBjY2tQaHlFcnJDb3VudDsKLQl1MzIgb2ZkbVBoeUVyckJhc2U7Ci0JdTMyIGNja1BoeUVyckJhc2U7Ci0JaW50MTZfdCBwa3RSc3NpWzJdOwotCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07Ci0JaW50MTZfdCBjY2tFcnJSc3NpWzJdOwotfTsKLQotI2RlZmluZSBIQUxfUFJPQ0VTU19BTkkgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRE9fQU5JKGFoKSBcCi0JKChBSDU0MTYoYWgpLT5haF9wcm9jUGh5RXJyICYgSEFMX1BST0NFU1NfQU5JKSkKLQotc3RydWN0IGFyNTQxNlN0YXRzIHsKLQl1MzIgYXN0X2FuaV9uaXVwOwotCXUzMiBhc3RfYW5pX25pZG93bjsKLQl1MzIgYXN0X2FuaV9zcHVydXA7Ci0JdTMyIGFzdF9hbmlfc3B1cmRvd247Ci0JdTMyIGFzdF9hbmlfb2ZkbW9uOwotCXUzMiBhc3RfYW5pX29mZG1vZmY7Ci0JdTMyIGFzdF9hbmlfY2NraGlnaDsKLQl1MzIgYXN0X2FuaV9jY2tsb3c7Ci0JdTMyIGFzdF9hbmlfc3RlcHVwOwotCXUzMiBhc3RfYW5pX3N0ZXBkb3duOwotCXUzMiBhc3RfYW5pX29mZG1lcnJzOwotCXUzMiBhc3RfYW5pX2Nja2VycnM7Ci0JdTMyIGFzdF9hbmlfcmVzZXQ7Ci0JdTMyIGFzdF9hbmlfbHplcm87Ci0JdTMyIGFzdF9hbmlfbG5lZzsKLQlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOwotfTsKLQotI2RlZmluZSBBUjU0MTZfT1BGTEFHU18xMUEgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFHICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQ0MCAgICAgMHgwNAotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUNDAgICAgIDB4MDgKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwICAgICAweDEwCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQyMCAgICAgMHgyMAotCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEICAgICAgICAweDAwMDEKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX0VOQUJMRURfUyAgICAgIDAKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZICAgICAgIDB4MDAwMgotI2RlZmluZSBFRVBfUkZTSUxFTlRfUE9MQVJJVFlfUyAgICAgMQotI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUwgICAgICAgMHgwMDFjCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9HUElPX1NFTF9TICAgICAyCi0KLSNkZWZpbmUgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUiAgICAgICAweDEKLSNkZWZpbmUgQVI1NDE2X0VFUF9WRVIgICAgICAgICAgICAgICAweEUKLSNkZWZpbmUgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSyAgICAweDBGRkYKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMiAgICAgICAweDIKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMyAgICAgICAweDMKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNyAgICAgICAweDcKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfOSAgICAgICAweDkKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTYgICAgICAweDEwCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3ICAgICAgMHgxMQotI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSAgICAgIDB4MTMKLQotI2RlZmluZSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUyAgICAgICAgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV8yR19DQUxfUElFUlMgICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUyAgOAotI2RlZmluZSBBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlMgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUyAzCi0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUyAgNAotI2RlZmluZSBBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDQKLSNkZWZpbmUgQVI1NDE2X05VTV9DVExTICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBBUjU0MTZfTlVNX0JBTkRfRURHRVMgICAgICAgICAgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUyAgICAgICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUyAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9NQVhfUkFURV9QT1dFUiAgICAgICAgICAgNjMKLSNkZWZpbmUgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgICAgICAgICAxMjgKLSNkZWZpbmUgQVI1NDE2X0JDSEFOX1VOVVNFRCAgICAgICAgICAgICAweEZGCi0jZGVmaW5lIEFSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREIgNjQKLSNkZWZpbmUgQVI1NDE2X01BWF9DSEFJTlMgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICAgICAgICAgLTUKLQotLyogUnggZ2FpbiB0eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl8yM0RCX0JBQ0tPRkYgICAgIDAKLSNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMTNEQl9CQUNLT0ZGICAgICAxCi0jZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOX09SSUcgICAgICAgICAgICAgMgotCi0vKiBUeCBnYWluIHR5cGUgdmFsdWVzICovCi0jZGVmaW5lIEFSNTQxNl9FRVBfVFhHQUlOX09SSUdJTkFMICAgICAgICAgMAotI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSICAgICAgIDEKLQotI2RlZmluZSBBUjU0MTZfRUVQNEtfU1RBUlRfTE9DICAgICAgICAgNjQKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlMgICAgICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDMKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR180MF9UQVJHRVRfUE9XRVJTICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQ1RMUyAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9CQU5EX0VER0VTICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fUERfR0FJTlMgICAgICAgICAgMgotI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSyAgICAgIDQKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTICAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19NQVhfQ0hBSU5TICAgICAgICAgICAgMQotCi1lbnVtIGVlcHJvbV9wYXJhbSB7Ci0JRUVQX05GVEhSRVNIXzUsCi0JRUVQX05GVEhSRVNIXzIsCi0JRUVQX01BQ19NU1csCi0JRUVQX01BQ19NSUQsCi0JRUVQX01BQ19MU1csCi0JRUVQX1JFR18wLAotCUVFUF9SRUdfMSwKLQlFRVBfT1BfQ0FQLAotCUVFUF9PUF9NT0RFLAotCUVFUF9SRl9TSUxFTlQsCi0JRUVQX09CXzUsCi0JRUVQX0RCXzUsCi0JRUVQX09CXzIsCi0JRUVQX0RCXzIsCi0JRUVQX01JTk9SX1JFViwKLQlFRVBfVFhfTUFTSywKLQlFRVBfUlhfTUFTSywKLQlFRVBfUlhHQUlOX1RZUEUsCi0JRUVQX1RYR0FJTl9UWVBFLAotfTsKLQotZW51bSBhcjU0MTZfcmF0ZXMgewotCXJhdGU2bWIsIHJhdGU5bWIsIHJhdGUxMm1iLCByYXRlMThtYiwKLQlyYXRlMjRtYiwgcmF0ZTM2bWIsIHJhdGU0OG1iLCByYXRlNTRtYiwKLQlyYXRlMWwsIHJhdGUybCwgcmF0ZTJzLCByYXRlNV81bCwKLQlyYXRlNV81cywgcmF0ZTExbCwgcmF0ZTExcywgcmF0ZVhyLAotCXJhdGVIdDIwXzAsIHJhdGVIdDIwXzEsIHJhdGVIdDIwXzIsIHJhdGVIdDIwXzMsCi0JcmF0ZUh0MjBfNCwgcmF0ZUh0MjBfNSwgcmF0ZUh0MjBfNiwgcmF0ZUh0MjBfNywKLQlyYXRlSHQ0MF8wLCByYXRlSHQ0MF8xLCByYXRlSHQ0MF8yLCByYXRlSHQ0MF8zLAotCXJhdGVIdDQwXzQsIHJhdGVIdDQwXzUsIHJhdGVIdDQwXzYsIHJhdGVIdDQwXzcsCi0JcmF0ZUR1cENjaywgcmF0ZUR1cE9mZG0sIHJhdGVFeHRDY2ssIHJhdGVFeHRPZmRtLAotCUFyNTQxNlJhdGVTaXplCi19OwotCi1lbnVtIGF0aDlrX2hhbF9mcmVxX2JhbmQgewotCUFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWiA9IDAsCi0JQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haID0gMQotfTsKLQotc3RydWN0IGJhc2VfZWVwX2hlYWRlciB7Ci0JdTE2IGxlbmd0aDsKLQl1MTYgY2hlY2tzdW07Ci0JdTE2IHZlcnNpb247Ci0JdTggb3BDYXBGbGFnczsKLQl1OCBlZXBNaXNjOwotCXUxNiByZWdEbW5bMl07Ci0JdTggbWFjQWRkcls2XTsKLQl1OCByeE1hc2s7Ci0JdTggdHhNYXNrOwotCXUxNiByZlNpbGVudDsKLQl1MTYgYmx1ZVRvb3RoT3B0aW9uczsKLQl1MTYgZGV2aWNlQ2FwOwotCXUzMiBiaW5CdWlsZE51bWJlcjsKLQl1OCBkZXZpY2VUeXBlOwotCXU4IHB3ZGNsa2luZDsKLQl1OCBmdXR1cmVCYXNlXzFbMl07Ci0JdTggcnhHYWluVHlwZTsKLQl1OCBmdXR1cmVCYXNlXzJbM107Ci0JdTggdHhHYWluVHlwZTsKLQl1OCBmdXR1cmVCYXNlXzNbMjVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayB7Ci0JdTE2IGxlbmd0aDsKLQl1MTYgY2hlY2tzdW07Ci0JdTE2IHZlcnNpb247Ci0JdTggb3BDYXBGbGFnczsKLQl1OCBlZXBNaXNjOwotCXUxNiByZWdEbW5bMl07Ci0JdTggbWFjQWRkcls2XTsKLQl1OCByeE1hc2s7Ci0JdTggdHhNYXNrOwotCXUxNiByZlNpbGVudDsKLQl1MTYgYmx1ZVRvb3RoT3B0aW9uczsKLQl1MTYgZGV2aWNlQ2FwOwotCXUzMiBiaW5CdWlsZE51bWJlcjsKLQl1OCBkZXZpY2VUeXBlOwotCXU4IGZ1dHVyZUJhc2VbMV07Ci19IF9fcGFja2VkOwotCi0KLXN0cnVjdCBzcHVyX2NoYW4gewotCXUxNiBzcHVyQ2hhbjsKLQl1OCBzcHVyUmFuZ2VMb3c7Ci0JdTggc3B1clJhbmdlSGlnaDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyIHsKLQl1MzIgYW50Q3RybENoYWluW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1MzIgYW50Q3RybENvbW1vbjsKLQl1OCBhbnRlbm5hR2FpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBzd2l0Y2hTZXR0bGluZzsKLQl1OCB0eFJ4QXR0ZW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggcnhUeE1hcmdpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBhZGNEZXNpcmVkU2l6ZTsKLQl1OCBwZ2FEZXNpcmVkU2l6ZTsKLQl1OCB4bG5hR2FpbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCB0eEVuZFRvWHBhT2ZmOwotCXU4IHR4RW5kVG9SeE9uOwotCXU4IHR4RnJhbWVUb1hwYU9uOwotCXU4IHRocmVzaDYyOwotCXU4IG5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggeHBkR2FpbjsKLQl1OCB4cGQ7Ci0JdTggaXFDYWxJQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IGlxQ2FsUUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBwZEdhaW5PdmVybGFwOwotCXU4IG9iOwotCXU4IGRiOwotCXU4IHhwYUJpYXNMdmw7Ci0JdTggcHdyRGVjcmVhc2VGb3IyQ2hhaW47Ci0JdTggcHdyRGVjcmVhc2VGb3IzQ2hhaW47Ci0JdTggdHhGcmFtZVRvRGF0YVN0YXJ0OwotCXU4IHR4RnJhbWVUb1BhT247Ci0JdTggaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0JdTggYnN3QXR0ZW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IGJzd01hcmdpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggc3dTZXR0bGVIdDQwOwotCXU4IHhhdHRlbjJEYltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggeGF0dGVuMk1hcmdpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggb2JfY2gxOwotCXU4IGRiX2NoMTsKLQl1OCB1c2VBbnQxOjEsCi0JICAgIGZvcmNlX3hwYW9uOjEsCi0JICAgIGxvY2FsX2JpYXM6MSwKLQkgICAgZmVtQmFuZFNlbGVjdFVzZWQ6MSwgeGxuYWJ1ZmluOjEsIHhsbmFpc2VsOjIsIHhsbmFidWZtb2RlOjE7Ci0JdTggZnV0dXJlTW9kYWxhcjkyODA7Ci0JdTE2IHhwYUJpYXNMdmxGcmVxWzNdOwotCXU4IGZ1dHVyZU1vZGFsWzZdOwotCi0Jc3RydWN0IHNwdXJfY2hhbiBzcHVyQ2hhbnNbQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciB7Ci0gICAgdTMyICBhbnRDdHJsQ2hhaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHUzMiAgYW50Q3RybENvbW1vbjsKLSAgICB1OCAgIGFudGVubmFHYWluQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgc3dpdGNoU2V0dGxpbmc7Ci0gICAgdTggICB0eFJ4QXR0ZW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICByeFR4TWFyZ2luQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgYWRjRGVzaXJlZFNpemU7Ci0gICAgdTggICBwZ2FEZXNpcmVkU2l6ZTsKLSAgICB1OCAgIHhsbmFHYWluQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgdHhFbmRUb1hwYU9mZjsKLSAgICB1OCAgIHR4RW5kVG9SeE9uOwotICAgIHU4ICAgdHhGcmFtZVRvWHBhT247Ci0gICAgdTggICB0aHJlc2g2MjsKLSAgICB1OCAgIG5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICB4cGRHYWluOwotICAgIHU4ICAgeHBkOwotICAgIHU4ICAgaXFDYWxJQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgaXFDYWxRQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgcGRHYWluT3ZlcmxhcDsKLSAgICB1OCAgIG9iXzAxOwotICAgIHU4ICAgZGIxXzAxOwotICAgIHU4ICAgeHBhQmlhc0x2bDsKLSAgICB1OCAgIHR4RnJhbWVUb0RhdGFTdGFydDsKLSAgICB1OCAgIHR4RnJhbWVUb1BhT247Ci0gICAgdTggICBodDQwUG93ZXJJbmNGb3JQZGFkYzsKLSAgICB1OCAgIGJzd0F0dGVuW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGJzd01hcmdpbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBzd1NldHRsZUh0NDA7Ci0gICAgdTggICB4YXR0ZW4yRGJbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgeGF0dGVuMk1hcmdpbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBkYjJfMDE7Ci0gICAgdTggICB2ZXJzaW9uOwotICAgIHUxNiAgb2JfMjM0OwotICAgIHUxNiAgZGIxXzIzNDsKLSAgICB1MTYgIGRiMl8yMzQ7Ci0gICAgdTggICBmdXR1cmVNb2RhbFs0XTsKLQotICAgIHN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgewotCXU4IHB3clBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwotCXU4IHZwZFBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrIHsKLQl1OCBwd3JQZGdbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU11bQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTXTsKLQl1OCB2cGRQZGdbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU11bQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB7Ci0JdTggYkNoYW5uZWw7Ci0JdTggdFBvdzJ4WzRdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgewotCXU4IGJDaGFubmVsOwotCXU4IHRQb3cyeFs4XTsKLX0gX19wYWNrZWQ7Ci0KLQotI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAotc3RydWN0IGNhbF9jdGxfZWRnZXMgewotCXU4IGJDaGFubmVsOwotCXU4IGZsYWc6MiwgdFBvd2VyOjY7Ci19IF9fcGFja2VkOwotI2Vsc2UKLXN0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCB0UG93ZXI6NiwgZmxhZzoyOwotfSBfX3BhY2tlZDsKLSNlbmRpZgotCi1zdHJ1Y3QgY2FsX2N0bF9kYXRhIHsKLQlzdHJ1Y3QgY2FsX2N0bF9lZGdlcwotCWN0bEVkZ2VzW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNX0JBTkRfRURHRVNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGNhbF9jdGxfZGF0YV80ayB7Ci0Jc3RydWN0IGNhbF9jdGxfZWRnZXMKLQljdGxFZGdlc1tBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU11bQVI1NDE2X0VFUDRLX05VTV9CQU5EX0VER0VTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiB7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciBiYXNlRWVwSGVhZGVyOwotCXU4IGN1c3REYXRhWzY0XTsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciBtb2RhbEhlYWRlclsyXTsKLQl1OCBjYWxGcmVxUGllcjVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKLQkgY2FsUGllckRhdGE1R1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV81R19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcQotCSBjYWxQaWVyRGF0YTJHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JIGNhbFRhcmdldFBvd2VyNUdbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjVHSFQyMFtBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JIGNhbFRhcmdldFBvd2VyNUdIVDQwW0FSNTQxNl9OVU1fNUdfNDBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JIGNhbFRhcmdldFBvd2VyQ2NrW0FSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlcjJHW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjJHSFQ0MFtBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlNdOwotCXU4IGN0bEluZGV4W0FSNTQxNl9OVU1fQ1RMU107Ci0Jc3RydWN0IGNhbF9jdGxfZGF0YSBjdGxEYXRhW0FSNTQxNl9OVU1fQ1RMU107Ci0JdTggcGFkZGluZzsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrIHsKLQlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyXzRrIGJhc2VFZXBIZWFkZXI7Ci0JdTggY3VzdERhdGFbMjBdOwotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyIG1vZGFsSGVhZGVyOwotCXU4IGNhbEZyZXFQaWVyMkdbQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80awotCWNhbFBpZXJEYXRhMkdbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQljYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfRUVQNEtfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQljYWxUYXJnZXRQb3dlcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQljYWxUYXJnZXRQb3dlcjJHSFQyMFtBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X0VFUDRLX05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKLQl1OCBjdGxJbmRleFtBUjU0MTZfRUVQNEtfTlVNX0NUTFNdOwotCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgY3RsRGF0YVtBUjU0MTZfRUVQNEtfTlVNX0NUTFNdOwotCXU4IHBhZGRpbmc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgewotCXUzMiAqaWFfYXJyYXk7Ci0JdTMyIGlhX3Jvd3M7Ci0JdTMyIGlhX2NvbHVtbnM7Ci19OwotCi0jZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCi0JCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCi0JCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAotCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAotCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQotCi0jZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAotCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKLQkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICgoX2FocCktPmFoX2NhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKLQkJCShfYWhwKS0+YWhfY2FsX2xpc3QgPQkJCQlcCi0JCQkJKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCi0JCQkoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJCSgoX2FocCktPmFoX2NhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCi0JCQkoX2FocCktPmFoX2NhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCi0JCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmFoX2NhbF9saXN0OwlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLWVudW0gaGFsX2NhbF90eXBlcyB7Ci0JQURDX0RDX0lOSVRfQ0FMID0gMHgxLAotCUFEQ19HQUlOX0NBTCA9IDB4MiwKLQlBRENfRENfQ0FMID0gMHg0LAotCUlRX01JU01BVENIX0NBTCA9IDB4OAotfTsKLQotZW51bSBoYWxfY2FsX3N0YXRlIHsKLQlDQUxfSU5BQ1RJVkUsCi0JQ0FMX1dBSVRJTkcsCi0JQ0FMX1JVTk5JTkcsCi0JQ0FMX0RPTkUKLX07Ci0KLSNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCi0jZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAotI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKLSNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCi0jZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAotCi1zdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKLQllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKLQl1MzIgY2FsTnVtU2FtcGxlczsKLQl1MzIgY2FsQ291bnRNYXg7Ci0Jdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2hhbCAqKTsKLQl2b2lkICgqY2FsUG9zdFByb2MpIChzdHJ1Y3QgYXRoX2hhbCAqLCB1OCk7Ci19OwotCi1zdHJ1Y3QgaGFsX2NhbF9saXN0IHsKLQljb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhICpjYWxEYXRhOwotCWVudW0gaGFsX2NhbF9zdGF0ZSBjYWxTdGF0ZTsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxOZXh0OwotfTsKLQotLyoKLSAqIEVudW0gdG8gaW5kZW50aWZ5IHRoZSBlZXByb20gbWFwcGluZ3MKLSAqLwotZW51bSBoYWxfZWVwX21hcCB7Ci0JRUVQX01BUF9ERUZBVUxUID0gMHgwLAotCUVFUF9NQVBfNEtCSVRTLAotCUVFUF9NQVBfTUFYCi19OwotCi0KLXN0cnVjdCBhdGhfaGFsXzU0MTYgewotCXN0cnVjdCBhdGhfaGFsIGFoOwotCXVuaW9uIHsKLQkJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmIGRlZjsKLQkJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgbWFwNGs7Ci0JfSBhaF9lZXByb207Ci0Jc3RydWN0IGFyNTQxNlN0YXRzIGFoX3N0YXRzOwotCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIGFoX3R4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKLQl2b2lkIF9faW9tZW0gKmFoX2NhbF9tZW07Ci0KLQl1OCBhaF9tYWNhZGRyW0VUSF9BTEVOXTsKLQl1OCBhaF9ic3NpZFtFVEhfQUxFTl07Ci0JdTggYWhfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MTYgYWhfYXNzb2NJZDsKLQotCWludDE2X3QgYWhfY3VyY2hhblJhZEluZGV4OwotCXUzMiBhaF9tYXNrUmVnOwotCXUzMiBhaF90eE9rSW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhFcnJJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eERlc2NJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eEVvbEludGVycnVwdE1hc2s7Ci0JdTMyIGFoX3R4VXJuSW50ZXJydXB0TWFzazsKLQlib29sIGFoX2NoaXBGdWxsU2xlZXA7Ci0JdTMyIGFoX2F0aW1XaW5kb3c7Ci0JdTE2IGFoX2FudGVubmFTd2l0Y2hTd2FwOwotCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBhaF9wb3dlck1vZGU7Ci0JZW51bSBhdGg5a19hbnRfc2V0dGluZyBhaF9kaXZlcnNpdHlDb250cm9sOwotCi0JLyogQ2FsaWJyYXRpb24gKi8KLQllbnVtIGhhbF9jYWxfdHlwZXMgYWhfc3VwcENhbHM7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9pcUNhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNHYWluQ2FsRGF0YTsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFoX2FkY0RjQ2FsSW5pdERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNEY0NhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3Q7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3RfbGFzdDsKLQlzdHJ1Y3QgaGFsX2NhbF9saXN0ICphaF9jYWxfbGlzdF9jdXJyOwotI2RlZmluZSBhaF90b3RhbFBvd2VyTWVhc0kgYWhfTWVhczAudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsUG93ZXJNZWFzUSBhaF9NZWFzMS51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxJcUNvcnJNZWFzIGFoX01lYXMyLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNJT2RkUGhhc2UgIGFoX01lYXMwLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0lFdmVuUGhhc2UgYWhfTWVhczEudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjUU9kZFBoYXNlICBhaF9NZWFzMi51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNRRXZlblBoYXNlIGFoX01lYXMzLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlICBhaF9NZWFzMC5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlIGFoX01lYXMxLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZSAgYWhfTWVhczIuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZSBhaF9NZWFzMy5zaWduCi0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMwOwotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMTsKLQl1bmlvbiB7Ci0JCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCX0gYWhfTWVhczI7Ci0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMzOwotCXUxNiBhaF9DYWxTYW1wbGVzOwotCi0JdTMyIGFoX3N0YUlkMURlZmF1bHRzOwotCXUzMiBhaF9taXNjTW9kZTsKLQllbnVtIHsKLQkJQVVUT18zMktIWiwKLQkJVVNFXzMyS0haLAotCQlET05UX1VTRV8zMktIWiwKLQl9IGFoX2VuYWJsZTMya0h6Q2xvY2s7Ci0KLQkvKiBSRiAqLwotCXUzMiAqYWhfYW5hbG9nQmFuazBEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazFEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazJEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazNEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazZEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazZUUENEYXRhOwotCXUzMiAqYWhfYW5hbG9nQmFuazdEYXRhOwotCXUzMiAqYWhfYWRkYWM1NDE2XzIxOwotCXUzMiAqYWhfYmFuazZUZW1wOwotCi0JaW50MTZfdCBhaF90eFBvd2VySW5kZXhPZmZzZXQ7Ci0JdTMyIGFoX2JlYWNvbkludGVydmFsOwotCXUzMiBhaF9zbG90dGltZTsKLQl1MzIgYWhfYWNrdGltZW91dDsKLQl1MzIgYWhfY3RzdGltZW91dDsKLQl1MzIgYWhfZ2xvYmFsdHh0aW1lb3V0OwotCXU4IGFoX2dCZWFjb25SYXRlOwotCXUzMiBhaF9ncGlvU2VsZWN0OwotCXUzMiBhaF9wb2xhcml0eTsKLQl1MzIgYWhfZ3Bpb0JpdDsKLQotCS8qIEFOSSAqLwotCXUzMiBhaF9wcm9jUGh5RXJyOwotCWJvb2wgYWhfaGFzSHdQaHlDb3VudGVyczsKLQl1MzIgYWhfYW5pUGVyaW9kOwotCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYWhfY3VyYW5pOwotCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSBhaF9hbmlbMjU1XTsKLQlpbnQgYWhfdG90YWxTaXplRGVzaXJlZFs1XTsKLQlpbnQgYWhfY29hcnNlSGlnaFs1XTsKLQlpbnQgYWhfY29hcnNlTG93WzVdOwotCWludCBhaF9maXJwd3JbNV07Ci0JZW51bSBhdGg5a19hbmlfY21kIGFoX2FuaV9mdW5jdGlvbjsKLQotCXUzMiBhaF9pbnRyVHhxczsKLQlib29sIGFoX2ludHJNaXRpZ2F0aW9uOwotCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgYWhfZXh0cHJvdHNwYWNpbmc7Ci0JdTggYWhfdHhjaGFpbm1hc2s7Ci0JdTggYWhfcnhjaGFpbm1hc2s7Ci0KLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pTW9kZXM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUNvbW1vbjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazA7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJCX1JmR2FpbjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazE7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmsyOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rMzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazY7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbms2VFBDOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rNzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQWRkYWM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaVBjaWVTZXJkZXM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzQWRkaXRpb25hbDsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pTW9kZXNSeEdhaW47Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzVHhHYWluOwotCS8qIFRvIGluZGljYXRlIEVFUFJPTSBtYXBwaW5nIHVzZWQgKi8KLQllbnVtIGhhbF9lZXBfbWFwIGFoX2VlcF9tYXA7Ci19OwotI2RlZmluZSBBSDU0MTYoX2FoKSAoKHN0cnVjdCBhdGhfaGFsXzU0MTYgKikoX2FoKSkKLQotI2RlZmluZSBGUkVRMkZCSU4oeCwgeSkgKCh5KSA/ICgoeCkgLSAyMzAwKSA6ICgoKHgpIC0gNDgwMCkgLyA1KSkKLQotI2RlZmluZSBhcjU0MTZSZkRldGFjaChhaCkgZG8gewkJCQkJXAotCQlpZiAoQUg1NDE2KGFoKS0+YWhfcmZIYWwucmZEZXRhY2ggIT0gTlVMTCkJXAotCQkJQUg1NDE2KGFoKS0+YWhfcmZIYWwucmZEZXRhY2goYWgpOwlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBhdGg5a19od191c2VfZmxhc2goX2FoKQkJCVwKLQkoIShfYWgtPmFoX2ZsYWdzICYgQUhfVVNFX0VFUFJPTSkpCi0KKyNkZWZpbmUgU00oX3YsIF9mKSAgKCgoX3YpIDw8IF9mIyNfUykgJiBfZikKKyNkZWZpbmUgTVMoX3YsIF9mKSAgKCgoX3YpICYgX2YpID4+IF9mIyNfUykKKyNkZWZpbmUgUkVHX1JNVyhfYSwgX3IsIF9zZXQsIF9jbHIpICAgIFwKKwlSRUdfV1JJVEUoX2EsIF9yLCAoUkVHX1JFQUQoX2EsIF9yKSAmIH4oX2NscikpIHwgKF9zZXQpKQorI2RlZmluZSBSRUdfUk1XX0ZJRUxEKF9hLCBfciwgX2YsIF92KSBcCisJUkVHX1dSSVRFKF9hLCBfciwgXAorCShSRUdfUkVBRChfYSwgX3IpICYgfl9mKSB8ICgoKF92KSA8PCBfZiMjX1MpICYgX2YpKQorI2RlZmluZSBSRUdfU0VUX0JJVChfYSwgX3IsIF9mKSBcCisJUkVHX1dSSVRFKF9hLCBfciwgUkVHX1JFQUQoX2EsIF9yKSB8IF9mKQorI2RlZmluZSBSRUdfQ0xSX0JJVChfYSwgX3IsIF9mKSBcCisJUkVHX1dSSVRFKF9hLCBfciwgUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikKIAogI2RlZmluZSBET19ERUxBWSh4KSBkbyB7CQkJXAogCQlpZiAoKCsrKHgpICUgNjQpID09IDApICAgICAgICAgIFwKQEAgLTk2NCwxMTcgKzcxLDU3NyBAQAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQgICAgICAgICAgICAgMAorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9BVFRFTlRJT05fTEVEIDEKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfUE9XRVJfTEVEICAgICAyCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19UWF9GUkFNRSAgICAgICAgICAgMworI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfTUFDX05FVFdPUktfTEVEICAgIDUKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19QT1dFUl9MRUQgICAgICA2CisKKyNkZWZpbmUgQVJfR1BJT0RfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgQVJfR1BJT19CSVQoX2dwaW8pICAgICAgICAgICgxIDw8IChfZ3BpbykpCisKICNkZWZpbmUgQkFTRV9BQ1RJVkFURV9ERUxBWSAgICAgICAgIDEwMAogI2RlZmluZSBSVENfUExMX1NFVFRMRV9ERUxBWSAgICAgICAgMTAwMAogI2RlZmluZSBDT0VGX1NDQUxFX1MgICAgICAgICAgICAgICAgMjQKICNkZWZpbmUgSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCAgIDEwCiAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQgIDB4MAorI2RlZmluZSBBVEg5S19BTlRFTk5BMF9DSEFJTk1BU0sgICAgMHgxCisjZGVmaW5lIEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSyAgICAweDIKIAotI2RlZmluZSBBUjU0MTZfRUVQUk9NX1MgICAgICAgICAgICAgMgotI2RlZmluZSBBUjU0MTZfRUVQUk9NX09GRlNFVCAgICAgICAgMHgyMDAwCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fU1RBUlRfQUREUiBcCi0JKEFSX1NSRVZfOTEwMChhaCkpID8gMHgxZmZmMTAwMCA6IDB4NTAzZjEyMDAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQVggICAgICAgICAgIDB4YWUwCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwX3ZlcihfYWhwKSBcCi0JKCgoX2FocCktPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4RikKLSNkZWZpbmUgYXI1NDE2X2dldF9lZXBfcmV2KF9haHApIFwKLQkoKChfYWhwKS0+YWhfZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpCi0jZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykgXAotCSgoKF90eGNoYWlubWFzayA+PiAyKSAmIDEpICsgXAotCQkoKF90eGNoYWlubWFzayA+PiAxKSAmIDEpICsgKF90eGNoYWlubWFzayAmIDEpKQorI2RlZmluZSBBVEg5S19OVU1fRE1BX0RFQlVHX1JFR1MgICAgOAorI2RlZmluZSBBVEg5S19OVU1fUVVFVUVTICAgICAgICAgICAgMTAKIAotLyogRUVQUk9NIDRLIGJpdCBtYXAgZGVmaW5hdGlvbnMgKi8KLSNkZWZpbmUgYXI1NDE2X2dldF9lZXA0a192ZXIoX2FocCkgICBcCi0gICAgKCgoX2FocCktPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKQotI2RlZmluZSBhcjU0MTZfZ2V0X2VlcDRrX3JldihfYWhwKSAgIFwKLSAgICAoKChfYWhwKS0+YWhfZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRikKKyNkZWZpbmUgTUFYX1JBVEVfUE9XRVIgICAgICAgICAgICAgIDYzCisjZGVmaW5lIEFIX1dBSVRfVElNRU9VVCAgICAgICAgICAgICAxMDAwMDAgLyogKHVzKSAqLworI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAgICAgICAgICAgIDEyOAorI2RlZmluZSBQT1dFUl9VUF9USU1FICAgICAgICAgICAgICAgMjAwMDAwCisjZGVmaW5lIFNQVVJfUlNTSV9USFJFU0ggICAgICAgICAgICA0MAogCisjZGVmaW5lIENBQl9USU1FT1VUX1ZBTCAgICAgICAgICAgICAxMAorI2RlZmluZSBCRUFDT05fVElNRU9VVF9WQUwgICAgICAgICAgMTAKKyNkZWZpbmUgTUlOX0JFQUNPTl9USU1FT1VUX1ZBTCAgICAgIDEKKyNkZWZpbmUgU0xFRVBfU0xPUCAgICAgICAgICAgICAgICAgIDMKIAotI2lmZGVmIF9fQklHX0VORElBTgotI2RlZmluZSBBUjU0MTZfRUVQUk9NX01BR0lDIDB4NWFhNQotI2Vsc2UKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweGE1NWEKKyNkZWZpbmUgSU5JVF9DT05GSUdfU1RBVFVTICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU5JVF9SU1NJX1RIUiAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgSU5JVF9CQ09OX0NOVFJMX1JFRyAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBUVV9UT19VU0VDKF90dSkgICAgICAgICAgICAgKChfdHUpIDw8IDEwKQorCitlbnVtIHdpcmVsZXNzX21vZGUgeworCUFUSDlLX01PREVfMTFBID0gMCwKKwlBVEg5S19NT0RFXzExQiA9IDIsCisJQVRIOUtfTU9ERV8xMUcgPSAzLAorCUFUSDlLX01PREVfMTFOQV9IVDIwID0gNiwKKwlBVEg5S19NT0RFXzExTkdfSFQyMCA9IDcsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTID0gOCwKKwlBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTID0gOSwKKwlBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgPSAxMCwKKwlBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTID0gMTEsCisJQVRIOUtfTU9ERV9NQVgKK307CisKK2VudW0gYXRoOWtfaHdfY2FwcyB7CisJQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFECQk9IEJJVCgwKSwKKwlBVEg5S19IV19DQVBfTUlDX0FFU0NDTSAgICAgICAgICAgICAgICAgPSBCSVQoMSksCisJQVRIOUtfSFdfQ0FQX01JQ19DS0lQICAgICAgICAgICAgICAgICAgID0gQklUKDIpLAorCUFUSDlLX0hXX0NBUF9NSUNfVEtJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgzKSwKKwlBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSAgICAgICAgICAgICAgPSBCSVQoNCksCisJQVRIOUtfSFdfQ0FQX0NJUEhFUl9DS0lQICAgICAgICAgICAgICAgID0gQklUKDUpLAorCUFUSDlLX0hXX0NBUF9DSVBIRVJfVEtJUCAgICAgICAgICAgICAgICA9IEJJVCg2KSwKKwlBVEg5S19IV19DQVBfVkVPTCAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoNyksCisJQVRIOUtfSFdfQ0FQX0JTU0lETUFTSyAgICAgICAgICAgICAgICAgID0gQklUKDgpLAorCUFUSDlLX0hXX0NBUF9NQ0FTVF9LRVlTRUFSQ0ggICAgICAgICAgICA9IEJJVCg5KSwKKwlBVEg5S19IV19DQVBfQ0hBTl9IQUxGUkFURSAgICAgICAgICAgICAgPSBCSVQoMTApLAorCUFUSDlLX0hXX0NBUF9DSEFOX1FVQVJURVJSQVRFICAgICAgICAgICA9IEJJVCgxMSksCisJQVRIOUtfSFdfQ0FQX0hUICAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEyKSwKKwlBVEg5S19IV19DQVBfR1RUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTMpLAorCUFUSDlLX0hXX0NBUF9GQVNUQ0MgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNCksCisJQVRIOUtfSFdfQ0FQX1JGU0lMRU5UICAgICAgICAgICAgICAgICAgID0gQklUKDE1KSwKKwlBVEg5S19IV19DQVBfV09XICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTYpLAorCUFUSDlLX0hXX0NBUF9DU1QgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNyksCisJQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0gICAgICAgICAgICAgICAgID0gQklUKDE4KSwKKwlBVEg5S19IV19DQVBfQVVUT1NMRUVQICAgICAgICAgICAgICAgICAgPSBCSVQoMTkpLAorCUFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUyAgICAgICAgICAgICA9IEJJVCgyMCksCisJQVRIOUtfSFdfQ0FQX1dPV19NQVRDSFBBVFRFUk5fRVhBQ1QgICAgID0gQklUKDIxKSwKKwlBVEg5S19IV19DQVBfQlRfQ09FWAkJCT0gQklUKDIyKQorfTsKKworZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgeworCUFUSDlLX0NBUF9DSVBIRVIgPSAwLAorCUFUSDlLX0NBUF9US0lQX01JQywKKwlBVEg5S19DQVBfVEtJUF9TUExJVCwKKwlBVEg5S19DQVBfRElWRVJTSVRZLAorCUFUSDlLX0NBUF9UWFBPVywKKwlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKKwlBVEg5S19DQVBfRFMKK307CisKK3N0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgeworCXUzMiBod19jYXBzOyAvKiBBVEg5S19IV19DQVBfKiBmcm9tIGF0aDlrX2h3X2NhcHMgKi8KKwlERUNMQVJFX0JJVE1BUCh3aXJlbGVzc19tb2RlcywgQVRIOUtfTU9ERV9NQVgpOyAvKiBBVEg5S19NT0RFXyogKi8KKwl1MTYgdG90YWxfcXVldWVzOworCXUxNiBrZXljYWNoZV9zaXplOworCXUxNiBsb3dfNWdoel9jaGFuLCBoaWdoXzVnaHpfY2hhbjsKKwl1MTYgbG93XzJnaHpfY2hhbiwgaGlnaF8yZ2h6X2NoYW47CisJdTE2IG51bV9tcl9yZXRyaWVzOworCXUxNiBydHNfYWdncl9saW1pdDsKKwl1OCB0eF9jaGFpbm1hc2s7CisJdTggcnhfY2hhaW5tYXNrOworCXUxNiB0eF90cmlnbGV2ZWxfbWF4OworCXUxNiByZWdfY2FwOworCXU4IG51bV9ncGlvX3BpbnM7CisJdTggbnVtX2FudGNmZ18yZ2h6OworCXU4IG51bV9hbnRjZmdfNWdoejsKK307CisKK3N0cnVjdCBhdGg5a19vcHNfY29uZmlnIHsKKwlpbnQgZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lOworCWludCBzd19iZWFjb25fcmVzcG9uc2VfdGltZTsKKwlpbnQgYWRkaXRpb25hbF9zd2JhX2JhY2tvZmY7CisJaW50IGFja182bWI7CisJaW50IGN3bV9pZ25vcmVfZXh0Y2NhOworCXU4IHBjaWVfcG93ZXJzYXZlX2VuYWJsZTsKKwl1OCBwY2llX2wxc2twX2VuYWJsZTsKKwl1OCBwY2llX2Nsb2NrX3JlcTsKKwl1MzIgcGNpZV93YWVuOworCWludCBwY2llX3Bvd2VyX3Jlc2V0OworCXU4IHBjaWVfcmVzdG9yZTsKKwl1OCBhbmFsb2dfc2hpZnRyZWc7CisJdTggaHRfZW5hYmxlOworCXUzMiBvZmRtX3RyaWdfbG93OworCXUzMiBvZmRtX3RyaWdfaGlnaDsKKwl1MzIgY2NrX3RyaWdfaGlnaDsKKwl1MzIgY2NrX3RyaWdfbG93OworCXUzMiBlbmFibGVfYW5pOworCXU4IG5vaXNlX2ltbXVuaXR5X2xldmVsOworCXUzMiBvZmRtX3dlYWtzaWduYWxfZGV0OworCXUzMiBjY2tfd2Vha3NpZ25hbF90aHI7CisJdTggc3B1cl9pbW11bml0eV9sZXZlbDsKKwl1OCBmaXJzdGVwX2xldmVsOworCWludDhfdCByc3NpX3Rocl9oaWdoOworCWludDhfdCByc3NpX3Rocl9sb3c7CisJdTE2IGRpdmVyc2l0eV9jb250cm9sOworCXUxNiBhbnRlbm5hX3N3aXRjaF9zd2FwOworCWludCBzZXJpYWxpemVfcmVnbW9kZTsKKwlpbnQgaW50cl9taXRpZ2F0aW9uOworI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCisjZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKKyNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgorI2RlZmluZSBBUl9FRVBST01fTU9EQUxfU1BVUlMgICA1CisjZGVmaW5lIEFSX1NQVVJfNTQxM18xICAgICAgCTE2NDAKKyNkZWZpbmUgQVJfU1BVUl81NDEzXzIgICAgICAJMTIwMAorI2RlZmluZSBBUl9OT19TUFVSICAgICAgCTB4ODAwMAorI2RlZmluZSBBUl9CQVNFX0ZSRVFfMkdIWiAgIAkyMzAwCisjZGVmaW5lIEFSX0JBU0VfRlJFUV81R0haICAgCTQ5MDAKKyNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUNDAgMTkKKyNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUMjAgMTAKKwlpbnQgc3B1cm1vZGU7CisJdTE2IHNwdXJjaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdWzJdOworfTsKKworZW51bSBhdGg5a19pbnQgeworCUFUSDlLX0lOVF9SWCA9IDB4MDAwMDAwMDEsCisJQVRIOUtfSU5UX1JYREVTQyA9IDB4MDAwMDAwMDIsCisJQVRIOUtfSU5UX1JYTk9GUk0gPSAweDAwMDAwMDA4LAorCUFUSDlLX0lOVF9SWEVPTCA9IDB4MDAwMDAwMTAsCisJQVRIOUtfSU5UX1JYT1JOID0gMHgwMDAwMDAyMCwKKwlBVEg5S19JTlRfVFggPSAweDAwMDAwMDQwLAorCUFUSDlLX0lOVF9UWERFU0MgPSAweDAwMDAwMDgwLAorCUFUSDlLX0lOVF9USU1fVElNRVIgPSAweDAwMDAwMTAwLAorCUFUSDlLX0lOVF9UWFVSTiA9IDB4MDAwMDA4MDAsCisJQVRIOUtfSU5UX01JQiA9IDB4MDAwMDEwMDAsCisJQVRIOUtfSU5UX1JYUEhZID0gMHgwMDAwNDAwMCwKKwlBVEg5S19JTlRfUlhLQ00gPSAweDAwMDA4MDAwLAorCUFUSDlLX0lOVF9TV0JBID0gMHgwMDAxMDAwMCwKKwlBVEg5S19JTlRfQk1JU1MgPSAweDAwMDQwMDAwLAorCUFUSDlLX0lOVF9CTlIgPSAweDAwMTAwMDAwLAorCUFUSDlLX0lOVF9USU0gPSAweDAwMjAwMDAwLAorCUFUSDlLX0lOVF9EVElNID0gMHgwMDQwMDAwMCwKKwlBVEg5S19JTlRfRFRJTVNZTkMgPSAweDAwODAwMDAwLAorCUFUSDlLX0lOVF9HUElPID0gMHgwMTAwMDAwMCwKKwlBVEg5S19JTlRfQ0FCRU5EID0gMHgwMjAwMDAwMCwKKwlBVEg5S19JTlRfVFNGT09SID0gMHgwNDAwMDAwMCwKKwlBVEg5S19JTlRfQ1NUID0gMHgxMDAwMDAwMCwKKwlBVEg5S19JTlRfR1RUID0gMHgyMDAwMDAwMCwKKwlBVEg5S19JTlRfRkFUQUwgPSAweDQwMDAwMDAwLAorCUFUSDlLX0lOVF9HTE9CQUwgPSAweDgwMDAwMDAwLAorCUFUSDlLX0lOVF9CTUlTQyA9IEFUSDlLX0lOVF9USU0gfAorCQlBVEg5S19JTlRfRFRJTSB8CisJCUFUSDlLX0lOVF9EVElNU1lOQyB8CisJCUFUSDlLX0lOVF9UU0ZPT1IgfAorCQlBVEg5S19JTlRfQ0FCRU5ELAorCUFUSDlLX0lOVF9DT01NT04gPSBBVEg5S19JTlRfUlhOT0ZSTSB8CisJCUFUSDlLX0lOVF9SWERFU0MgfAorCQlBVEg5S19JTlRfUlhFT0wgfAorCQlBVEg5S19JTlRfUlhPUk4gfAorCQlBVEg5S19JTlRfVFhVUk4gfAorCQlBVEg5S19JTlRfVFhERVNDIHwKKwkJQVRIOUtfSU5UX01JQiB8CisJCUFUSDlLX0lOVF9SWFBIWSB8CisJCUFUSDlLX0lOVF9SWEtDTSB8CisJCUFUSDlLX0lOVF9TV0JBIHwKKwkJQVRIOUtfSU5UX0JNSVNTIHwKKwkJQVRIOUtfSU5UX0dQSU8sCisJQVRIOUtfSU5UX05PQ0FSRCA9IDB4ZmZmZmZmZmYKK307CisKKyNkZWZpbmUgQ0hBTk5FTF9DV19JTlQgICAgMHgwMDAwMgorI2RlZmluZSBDSEFOTkVMX0NDSyAgICAgICAweDAwMDIwCisjZGVmaW5lIENIQU5ORUxfT0ZETSAgICAgIDB4MDAwNDAKKyNkZWZpbmUgQ0hBTk5FTF8yR0haICAgICAgMHgwMDA4MAorI2RlZmluZSBDSEFOTkVMXzVHSFogICAgICAweDAwMTAwCisjZGVmaW5lIENIQU5ORUxfUEFTU0lWRSAgIDB4MDAyMDAKKyNkZWZpbmUgQ0hBTk5FTF9EWU4gICAgICAgMHgwMDQwMAorI2RlZmluZSBDSEFOTkVMX0hBTEYgICAgICAweDA0MDAwCisjZGVmaW5lIENIQU5ORUxfUVVBUlRFUiAgIDB4MDgwMDAKKyNkZWZpbmUgQ0hBTk5FTF9IVDIwICAgICAgMHgxMDAwMAorI2RlZmluZSBDSEFOTkVMX0hUNDBQTFVTICAweDIwMDAwCisjZGVmaW5lIENIQU5ORUxfSFQ0ME1JTlVTIDB4NDAwMDAKKworI2RlZmluZSBDSEFOTkVMX0lOVEVSRkVSRU5DRSAgICAweDAxCisjZGVmaW5lIENIQU5ORUxfREZTICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ0hBTk5FTF80TVNfTElNSVQgICAgICAgMHgwNAorI2RlZmluZSBDSEFOTkVMX0RGU19DTEVBUiAgICAgICAweDA4CisjZGVmaW5lIENIQU5ORUxfRElTQUxMT1dfQURIT0MgIDB4MTAKKyNkZWZpbmUgQ0hBTk5FTF9QRVJfMTFEX0FESE9DICAgMHgyMAorCisjZGVmaW5lIENIQU5ORUxfQSAgICAgICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE0pCisjZGVmaW5lIENIQU5ORUxfQiAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0NDSykKKyNkZWZpbmUgQ0hBTk5FTF9HICAgICAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfT0ZETSkKKyNkZWZpbmUgQ0hBTk5FTF9HX0hUMjAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQyMCkKKyNkZWZpbmUgQ0hBTk5FTF9BX0hUMjAgICAgICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQyMCkKKyNkZWZpbmUgQ0hBTk5FTF9HX0hUNDBQTFVTICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQ0MFBMVVMpCisjZGVmaW5lIENIQU5ORUxfR19IVDQwTUlOVVMgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBNSU5VUykKKyNkZWZpbmUgQ0hBTk5FTF9BX0hUNDBQTFVTICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQ0MFBMVVMpCisjZGVmaW5lIENIQU5ORUxfQV9IVDQwTUlOVVMgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBNSU5VUykKKyNkZWZpbmUgQ0hBTk5FTF9BTEwJCQkJXAorCShDSEFOTkVMX09GRE18CQkJCVwKKwkgQ0hBTk5FTF9DQ0t8CQkJCVwKKwkgQ0hBTk5FTF8yR0haIHwJCQkJXAorCSBDSEFOTkVMXzVHSFogfAkJCQlcCisJIENIQU5ORUxfSFQyMCB8CQkJCVwKKwkgQ0hBTk5FTF9IVDQwUExVUyB8CQkJXAorCSBDSEFOTkVMX0hUNDBNSU5VUykKKworc3RydWN0IGF0aDlrX2NoYW5uZWwgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwl1MTYgY2hhbm5lbDsKKwl1MzIgY2hhbm5lbEZsYWdzOworCXUzMiBjaGFubW9kZTsKKwlpbnQzMl90IENhbFZhbGlkOworCWJvb2wgb25lVGltZUNhbHNEb25lOworCWludDhfdCBpQ29mZjsKKwlpbnQ4X3QgcUNvZmY7CisJaW50MTZfdCByYXdOb2lzZUZsb29yOworfTsKKworI2RlZmluZSBJU19DSEFOX0EoX2MpICgoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQSkgPT0gQ0hBTk5FTF9BKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQyMCkgPT0gQ0hBTk5FTF9BX0hUMjApIHx8IFwKKyAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQV9IVDQwUExVUykgPT0gQ0hBTk5FTF9BX0hUNDBQTFVTKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0ME1JTlVTKSA9PSBDSEFOTkVMX0FfSFQ0ME1JTlVTKSkKKyNkZWZpbmUgSVNfQ0hBTl9HKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiAoQ0hBTk5FTF9HKSkgPT0gQ0hBTk5FTF9HKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQyMCkgPT0gQ0hBTk5FTF9HX0hUMjApIHx8IFwKKyAgICAgICAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfR19IVDQwUExVUykgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0ME1JTlVTKSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKKyNkZWZpbmUgSVNfQ0hBTl9PRkRNKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfT0ZETSkgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl81R0haKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfNUdIWikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl8yR0haKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfMkdIWikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9QQVNTSVZFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfUEFTU0lWRSkgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9IQUxGX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9IQUxGKSAhPSAwKQorI2RlZmluZSBJU19DSEFOX1FVQVJURVJfUkFURShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1FVQVJURVIpICE9IDApCisjZGVmaW5lIElTX0NIQU5fQV81TUhaX1NQQUNFRChfYykJCQlcCisJKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF81R0haKSAhPSAwKSAmJglcCisJICgoKF9jKS0+Y2hhbm5lbCAlIDIwKSAhPSAwKSAmJgkJCVwKKwkgKCgoX2MpLT5jaGFubmVsICUgMTApICE9IDApKQorCisvKiBUaGVzZSBtYWNyb3MgY2hlY2sgY2hhbm1vZGUgYW5kIG5vdCBjaGFubmVsRmxhZ3MgKi8KKyNkZWZpbmUgSVNfQ0hBTl9CKF9jKSAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9CKQorI2RlZmluZSBJU19DSEFOX0hUMjAoX2MpICgoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUMjApIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKSkKKyNkZWZpbmUgSVNfQ0hBTl9IVDQwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fAlcCisJCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKKyNkZWZpbmUgSVNfQ0hBTl9IVChfYykgKElTX0NIQU5fSFQyMCgoX2MpKSB8fCBJU19DSEFOX0hUNDAoKF9jKSkpCisKK2VudW0gYXRoOWtfcG93ZXJfbW9kZSB7CisJQVRIOUtfUE1fQVdBS0UgPSAwLAorCUFUSDlLX1BNX0ZVTExfU0xFRVAsCisJQVRIOUtfUE1fTkVUV09SS19TTEVFUCwKKwlBVEg5S19QTV9VTkRFRklORUQKK307CisKK2VudW0gYXRoOWtfYW50X3NldHRpbmcgeworCUFUSDlLX0FOVF9WQVJJQUJMRSA9IDAsCisJQVRIOUtfQU5UX0ZJWEVEX0EsCisJQVRIOUtfQU5UX0ZJWEVEX0IKK307CisKK2VudW0gYXRoOWtfdHBfc2NhbGUgeworCUFUSDlLX1RQX1NDQUxFX01BWCA9IDAsCisJQVRIOUtfVFBfU0NBTEVfNTAsCisJQVRIOUtfVFBfU0NBTEVfMjUsCisJQVRIOUtfVFBfU0NBTEVfMTIsCisJQVRIOUtfVFBfU0NBTEVfTUlOCit9OworCitlbnVtIHNlcl9yZWdfbW9kZSB7CisJU0VSX1JFR19NT0RFX09GRiA9IDAsCisJU0VSX1JFR19NT0RFX09OID0gMSwKKwlTRVJfUkVHX01PREVfQVVUTyA9IDIsCit9OworCitzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlIHsKKwl1MzIgYnNfbmV4dHRidHQ7CisJdTMyIGJzX25leHRkdGltOworCXUzMiBic19pbnR2YWw7CisjZGVmaW5lIEFUSDlLX0JFQUNPTl9QRVJJT0QgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBBVEg5S19CRUFDT05fRU5BICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQVRIOUtfQkVBQ09OX1JFU0VUX1RTRiAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFUSDlLX1RTRk9PUl9USFJFU0hPTEQgICAgMHgwMDAwNDI0MCAvKiAxNmsgdXMgKi8KKwl1MzIgYnNfZHRpbXBlcmlvZDsKKwl1MTYgYnNfY2ZwcGVyaW9kOworCXUxNiBic19jZnBtYXhkdXJhdGlvbjsKKwl1MzIgYnNfY2ZwbmV4dDsKKwl1MTYgYnNfdGltb2Zmc2V0OworCXUxNiBic19ibWlzc3RocmVzaG9sZDsKKwl1MzIgYnNfc2xlZXBkdXJhdGlvbjsKKwl1MzIgYnNfdHNmb29yX3RocmVzaG9sZDsKK307CisKK3N0cnVjdCBjaGFuX2NlbnRlcnMgeworCXUxNiBzeW50aF9jZW50ZXI7CisJdTE2IGN0bF9jZW50ZXI7CisJdTE2IGV4dF9jZW50ZXI7Cit9OworCitlbnVtIHsKKwlBVEg5S19SRVNFVF9QT1dFUl9PTiwKKwlBVEg5S19SRVNFVF9XQVJNLAorCUFUSDlLX1JFU0VUX0NPTEQsCit9OworCitzdHJ1Y3QgYXRoOWtfaHdfdmVyc2lvbiB7CisJdTMyIG1hZ2ljOworCXUxNiBkZXZpZDsKKwl1MTYgc3VidmVuZG9yaWQ7CisJdTMyIG1hY1ZlcnNpb247CisJdTE2IG1hY1JldjsKKwl1MTYgcGh5UmV2OworCXUxNiBhbmFsb2c1R2h6UmV2OworCXUxNiBhbmFsb2cyR2h6UmV2OworfTsKKworc3RydWN0IGF0aF9odyB7CisJc3RydWN0IGF0aF9zb2Z0YyAqYWhfc2M7CisJc3RydWN0IGF0aDlrX2h3X3ZlcnNpb24gaHdfdmVyc2lvbjsKKwlzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyBjb25maWc7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyBjYXBzOworCXN0cnVjdCBhdGg5a19yZWd1bGF0b3J5IHJlZ3VsYXRvcnk7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgY2hhbm5lbHNbMzhdOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuOworCisJdW5pb24geworCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgZGVmOworCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayBtYXA0azsKKwl9IGVlcHJvbTsKKwljb25zdCBzdHJ1Y3QgZWVwcm9tX29wcyAqZWVwX29wczsKKwllbnVtIGF0aDlrX2VlcF9tYXAgZWVwX21hcDsKKworCWJvb2wgc3dfbWdtdF9jcnlwdG87CisJYm9vbCBpc19wY2lleHByZXNzOworCXU4IG1hY2FkZHJbRVRIX0FMRU5dOworCXUxNiB0eF90cmlnX2xldmVsOworCXUxNiByZnNpbGVudDsKKwl1MzIgcmZraWxsX2dwaW87CisJdTMyIHJma2lsbF9wb2xhcml0eTsKKwl1MzIgYnRhY3RpdmVfZ3BpbzsKKwl1MzIgd2xhbmFjdGl2ZV9ncGlvOworCXUzMiBhaF9mbGFnczsKKworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOworCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBwb3dlcl9tb2RlOworCWVudW0gYXRoOWtfcG93ZXJfbW9kZSByZXN0b3JlX21vZGU7CisKKwlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCBuZkNhbEhpc3RbTlVNX05GX1JFQURJTkdTXTsKKwlzdHJ1Y3QgYXI1NDE2U3RhdHMgc3RhdHM7CisJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOworCisJaW50MTZfdCBjdXJjaGFuX3JhZF9pbmRleDsKKwl1MzIgbWFza19yZWc7CisJdTMyIHR4b2tfaW50ZXJydXB0X21hc2s7CisJdTMyIHR4ZXJyX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGRlc2NfaW50ZXJydXB0X21hc2s7CisJdTMyIHR4ZW9sX2ludGVycnVwdF9tYXNrOworCXUzMiB0eHVybl9pbnRlcnJ1cHRfbWFzazsKKwlib29sIGNoaXBfZnVsbHNsZWVwOworCXUzMiBhdGltX3dpbmRvdzsKKwl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwllbnVtIGF0aDlrX2FudF9zZXR0aW5nIGRpdmVyc2l0eV9jb250cm9sOworCisJLyogQ2FsaWJyYXRpb24gKi8KKwllbnVtIGhhbF9jYWxfdHlwZXMgc3VwcF9jYWxzOworCXN0cnVjdCBoYWxfY2FsX2xpc3QgaXFfY2FsZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2dhaW5fY2FsZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2RjX2NhbGluaXRkYXRhOworCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWRjZGNfY2FsZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdDsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdF9sYXN0OworCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmNhbF9saXN0X2N1cnI7CisjZGVmaW5lIHRvdGFsUG93ZXJNZWFzSSBtZWFzMC51bnNpZ24KKyNkZWZpbmUgdG90YWxQb3dlck1lYXNRIG1lYXMxLnVuc2lnbgorI2RlZmluZSB0b3RhbElxQ29yck1lYXMgbWVhczIuc2lnbgorI2RlZmluZSB0b3RhbEFkY0lPZGRQaGFzZSAgbWVhczAudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjSUV2ZW5QaGFzZSBtZWFzMS51bnNpZ24KKyNkZWZpbmUgdG90YWxBZGNRT2RkUGhhc2UgIG1lYXMyLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY1FFdmVuUGhhc2UgbWVhczMudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2UgIG1lYXMwLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2UgbWVhczEuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlICBtZWFzMi5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlIG1lYXMzLnNpZ24KKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczA7CisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMxOworCXVuaW9uIHsKKwkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJfSBtZWFzMjsKKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczM7CisJdTE2IGNhbF9zYW1wbGVzOworCisJdTMyIHN0YV9pZDFfZGVmYXVsdHM7CisJdTMyIG1pc2NfbW9kZTsKKwllbnVtIHsKKwkJQVVUT18zMktIWiwKKwkJVVNFXzMyS0haLAorCQlET05UX1VTRV8zMktIWiwKKwl9IGVuYWJsZV8zMmtIel9jbG9jazsKKworCS8qIFJGICovCisJdTMyICphbmFsb2dCYW5rMERhdGE7CisJdTMyICphbmFsb2dCYW5rMURhdGE7CisJdTMyICphbmFsb2dCYW5rMkRhdGE7CisJdTMyICphbmFsb2dCYW5rM0RhdGE7CisJdTMyICphbmFsb2dCYW5rNkRhdGE7CisJdTMyICphbmFsb2dCYW5rNlRQQ0RhdGE7CisJdTMyICphbmFsb2dCYW5rN0RhdGE7CisJdTMyICphZGRhYzU0MTZfMjE7CisJdTMyICpiYW5rNlRlbXA7CisKKwlpbnQxNl90IHR4cG93ZXJfaW5kZXhvZmZzZXQ7CisJdTMyIGJlYWNvbl9pbnRlcnZhbDsKKwl1MzIgc2xvdHRpbWU7CisJdTMyIGFja3RpbWVvdXQ7CisJdTMyIGN0c3RpbWVvdXQ7CisJdTMyIGdsb2JhbHR4dGltZW91dDsKKwl1OCBnYmVhY29uX3JhdGU7CisKKwkvKiBBTkkgKi8KKwl1MzIgcHJvY19waHllcnI7CisJYm9vbCBoYXNfaHdfcGh5Y291bnRlcnM7CisJdTMyIGFuaXBlcmlvZDsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmN1cmFuaTsKKwlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgYW5pWzI1NV07CisJaW50IHRvdGFsU2l6ZURlc2lyZWRbNV07CisJaW50IGNvYXJzZV9oaWdoWzVdOworCWludCBjb2Fyc2VfbG93WzVdOworCWludCBmaXJwd3JbNV07CisJZW51bSBhdGg5a19hbmlfY21kIGFuaV9mdW5jdGlvbjsKKworCXUzMiBpbnRyX3R4cXM7CisJYm9vbCBpbnRyX21pdGlnYXRpb247CisJZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZzsKKwl1OCB0eGNoYWlubWFzazsKKwl1OCByeGNoYWlubWFzazsKKworCXUzMiBvcmlnaW5hbEdhaW5bMjJdOworCWludCBpbml0UERBREM7CisJaW50IFBEQURDZGVsdGE7CisKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUNvbW1vbjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazA7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJCX1JmR2FpbjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazE7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmsyOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rMzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazY7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbms2VFBDOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rNzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQWRkYWM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaVBjaWVTZXJkZXM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzQWRkaXRpb25hbDsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNSeEdhaW47CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzVHhHYWluOworfTsKKworLyogQXR0YWNoLCBEZXRhY2gsIFJlc2V0ICovCitjb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7Cit2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7CitzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcik7Cit2b2lkIGF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCSAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpOworYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKKwkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyICpyZXN1bHQpOworYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpOworCisvKiBLZXkgQ2FjaGUgTWFuYWdlbWVudCAqLworYm9vbCBhdGg5a19od19rZXlyZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5KTsKK2Jvb2wgYXRoOWtfaHdfa2V5c2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpOworYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKKwkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKKwkJCQkgY29uc3QgdTggKm1hYyk7Citib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSk7CisKKy8qIEdQSU8gLyBSRktJTEwgLyBBbnRlbm5hZSAqLwordm9pZCBhdGg5a19od19jZmdfZ3Bpb19pbnB1dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8pOwordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3Bpbyk7Cit2b2lkIGF0aDlrX2h3X2NmZ19vdXRwdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvLAorCQkJIHUzMiBhaF9zaWduYWxfdHlwZSk7Cit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7CisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQordm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaHcgKmFoKTsKICNlbmRpZgordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSk7Citib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9odyAqYWgsCisJCQkgICAgICAgZW51bSBhdGg5a19hbnRfc2V0dGluZyBzZXR0aW5ncywKKwkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgICB1OCAqdHhfY2hhaW5tYXNrLCB1OCAqcnhfY2hhaW5tYXNrLAorCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpOwogCi0jZGVmaW5lIEFUSDlLX1BPV19TTShfciwgX3MpICAgICAoKChfcikgJiAweDNmKSA8PCAoX3MpKQorLyogR2VuZXJhbCBPcGVyYXRpb24gKi8KK2Jvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwsIHUzMiB0aW1lb3V0KTsKK3UzMiBhdGg5a19od19yZXZlcnNlX2JpdHModTMyIHZhbCwgdTMyIG4pOworYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGZsYWdzLCB1MTYgKmxvdywgdTE2ICpoaWdoKTsKK3UxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVzLAorCQkJICAgdTMyIGZyYW1lTGVuLCB1MTYgcmF0ZWl4LCBib29sIHNob3J0UHJlYW1ibGUpOwordm9pZCBhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICBzdHJ1Y3QgY2hhbl9jZW50ZXJzICpjZW50ZXJzKTsKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3NldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYml0cyk7Citib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBsaW1pdCk7Cit2b2lkIGF0aDlrX2h3X3NldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgY29uc3QgdTggKm1hYyk7Cit2b2lkIGF0aDlrX2h3X3NldG9wbW9kZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZmlsdGVyMCwgdTMyIGZpbHRlcjEpOwordm9pZCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3U2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3NldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoLCB1NjQgdHNmNjQpOwordm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZyk7Citib29sIGF0aDlrX2h3X3NldHNsb3R0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpOwordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSk7Cit2b2lkIGF0aDlrX2h3X2JlYWNvbmluaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKTsKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSk7Cit2b2lkIGF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHJlc3RvcmUpOwogCi0jZGVmaW5lIEFUSDlLX0FOVEVOTkEwX0NIQUlOTUFTSyAgICAgICAgMHgxCi0jZGVmaW5lIEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSyAgICAgICAgMHgyCisvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19nZXRpc3Ioc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOworZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2h3ICphaCk7CitlbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgaW50cyk7CiAKLSNkZWZpbmUgQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTICAgICAgICA4Ci0jZGVmaW5lIEFUSDlLX05VTV9RVUVVRVMgICAgICAgICAgICAgICAgMTAKLQotI2RlZmluZSBIQUxfTk9JU0VfSU1NVU5FX01BWCAgICAgICAgICAgIDQKLSNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICA3Ci0jZGVmaW5lIEhBTF9GSVJTVF9TVEVQX01BWCAgICAgICAgICAgICAgMgotCi0jZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKLSNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAotI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCi0jZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKLSNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKLSNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKLSNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCi0jZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3Ci0jZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCi0jZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAotI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNwotI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCi0KLSNkZWZpbmUgQVJfR1BJT0RfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAxRkZGCi0jZGVmaW5lIEFSX0dQSU9fQklUKF9ncGlvKSAgICAgICAgICAgICAgKDEgPDwgKF9ncGlvKSkKLQotI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkgXAotCSgoKCh4KSUobXVsKSkgPj0gKChtdWwpLzIpKSA/ICgoeCkgKyAoKG11bCkgLSAxKSkgLyAobXVsKSA6ICh4KS8obXVsKSkKLSNkZWZpbmUgQkVBQ09OX1JTU0koYWhwKSBcCi0JSEFMX0VQX1JORChhaHAtPmFoX3N0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksIFwKLQkJQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQotCi0jZGVmaW5lIGFoX21pYlN0YXRzICAgICBhaF9zdGF0cy5hc3RfbWlic3RhdHMKLQotI2RlZmluZSBBSF9USU1FT1VUICAgICAgICAgMTAwMDAwCi0jZGVmaW5lIEFIX1RJTUVfUVVBTlRVTSAgICAgICAgMTAKLQotI2RlZmluZSBBUl9LRVlUQUJMRV9TSVpFIDEyOAotI2RlZmluZSBQT1dFUl9VUF9USU1FICAgIDIwMDAwMAotCi0jZGVmaW5lIEVYVF9BRERJVElWRSAoMHg4MDAwKQotI2RlZmluZSBDVExfMTFBX0VYVCAoQ1RMXzExQSB8IEVYVF9BRERJVElWRSkKLSNkZWZpbmUgQ1RMXzExR19FWFQgKENUTF8xMUcgfCBFWFRfQURESVRJVkUpCi0jZGVmaW5lIENUTF8xMUJfRVhUIChDVExfMTFCIHwgRVhUX0FERElUSVZFKQotCi0jZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzVHXzQwIDIKLSNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDAgMwotI2RlZmluZSBTUFVSX1JTU0lfVEhSRVNIIDQwCi0KLSNkZWZpbmUgVFVfVE9fVVNFQyhfdHUpICAgICAgICAgKChfdHUpIDw8IDEwKQotCi0jZGVmaW5lIENBQl9USU1FT1VUX1ZBTCAgICAgICAgIDEwCi0jZGVmaW5lIEJFQUNPTl9USU1FT1VUX1ZBTCAgICAgIDEwCi0jZGVmaW5lIE1JTl9CRUFDT05fVElNRU9VVF9WQUwgICAxCi0jZGVmaW5lIFNMRUVQX1NMT1AgICAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgQ0NLX1NJRlNfVElNRSAgICAgICAgMTAKLSNkZWZpbmUgQ0NLX1BSRUFNQkxFX0JJVFMgICAxNDQKLSNkZWZpbmUgQ0NLX1BMQ1BfQklUUyAgICAgICAgNDgKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRSAgICAgICAgMTYKLSNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FICAgIDIwCi0jZGVmaW5lIE9GRE1fUExDUF9CSVRTICAgICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FICAgICAgNAotCi0jZGVmaW5lIE9GRE1fU0lGU19USU1FX0hBTEYgICAgIDMyCi0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9IQUxGIDQwCi0jZGVmaW5lIE9GRE1fUExDUF9CSVRTX0hBTEYgICAgIDIyCi0jZGVmaW5lIE9GRE1fU1lNQk9MX1RJTUVfSEFMRiAgIDgKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSICAgICAgNjQKLSNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIgIDgwCi0jZGVmaW5lIE9GRE1fUExDUF9CSVRTX1FVQVJURVIgICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIgICAgMTYKLQotdTMyIGF0aDlrX2h3X2dldF9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJZW51bSBlZXByb21fcGFyYW0gcGFyYW0pOwordm9pZCBhdGg5a19od19idGNvZXhfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaAppbmRleCBmM2NmYTE2Li4xZDYwYzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmgKQEAgLTE0LDggKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotLyogQVI1NDE2IHRvIEZvd2wgYXI1MTQ2LmluaSAqLwotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZNb2Rlc185MTAwW11bNl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCkBAIC03OSw3ICs3OCw3IEBACiAgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbl85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0gewogICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAogICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LApAQCAtNDU3LDEyICs0NTYsMTIgQEAKICAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazBfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgxZTU3OTVlNSB9LAogICAgIHsgMHgwMDAwOThlMCwgMHgwMjAwODAyMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5fOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5bXVszXSA9IHsKICAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSwKICAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSwKQEAgLTUyOSwyMSArNTI4LDIxIEBACiAgICAgeyAweDAwMDA5YWZjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsxXzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFbXVsyXSA9IHsKICAgICB7IDB4MDAwMDk4YjAsIDB4MDIxMDg0MjEgfSwKICAgICB7IDB4MDAwMDk4ZWMsIDB4MDAwMDAwMDggfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwZTczZmYxNyB9LAogICAgIHsgMHgwMDAwOThlMCwgMHgwMDAwMDQyMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM185MTAwW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmszW11bM10gPSB7CiAgICAgeyAweDAwMDA5OGYwLCAweDAxNDAwMDE4LCAweDAxYzAwMDE4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZbXVszXSA9IHsKIAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNTgwLDcgKzU3OSw3IEBACiAgICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2VFBDXzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENbXVszXSA9IHsKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTYxNiwxMyArNjE1LDEzIEBACiAgICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3XzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdbXVsyXSA9IHsKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA1MDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA4MDAgfSwKICAgICB7IDB4MDAwMDk4Y2MsIDB4MDAwMDAwMGUgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY1tdWzJdID0gewogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMyB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LApAQCAtNjU5LDExICs2NTgsMTAgQEAKICAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgIDB4MDAwMDAwMDAgfSwKLSAgICB7MHgwMDAwOThjNCwgIDB4MDAwMDAwMDAgfSwKKyAgICB7MHgwMDAwOThjYywgIDB4MDAwMDAwMDAgfSwKIH07CiAKLS8qIGFyNTQxNiAtIGhvd2wgYXI1NDE2X2hvd2wuaW5pICovCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzW11bNl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxMDBbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKQEAgLTczNyw3ICs3MzUsNyBAQAogICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25bXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uXzkxMDBbXVsyXSA9IHsKICAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwMTUgfSwKICAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKQEAgLTExMTEsMTIgKzExMDksMTIgQEAKICAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazBfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgxZTU3OTVlNSB9LAogICAgIHsgMHgwMDAwOThlMCwgMHgwMjAwODAyMCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5bXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QkJfUmZHYWluXzkxMDBbXVszXSA9IHsKICAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSwKICAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSwKQEAgLTExODMsMjEgKzExODEsMjEgQEAKICAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMX0sCiAgICAgeyAweDAwMDA5OGVjLCAweDAwMDAwMDA4fSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazJfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwZTczZmYxN30sCiAgICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNfOTEwMFtdWzNdID0gewogICAgIHsgMHgwMDAwOThmMCwgMHgwMTQwMDAxOCwgMHgwMWMwMDAxOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNltdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNl85MTAwW11bM10gPSB7CiAKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTEyMzUsNyArMTIzMyw3IEBACiB9OwogCiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENfOTEwMFtdWzNdID0gewogCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCkBAIC0xMjcyLDEzICsxMjcwLDEzIEBACiAgICAgeyAweDAwMDA5OGQwLCAweDAwMDAwMDBmLCAweDAwMTAwMDBmIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms3XzkxMDBbXVsyXSA9IHsKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA1MDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDA4MDAgfSwKICAgICB7IDB4MDAwMDk4Y2MsIDB4MDAwMDAwMGUgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QWRkYWNfOTEwMFtdWzJdID0gewogICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCiAgICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LApAQCAtMTMxMyw3ICsxMzExLDYgQEAKICAgICB7MHgwMDAwOThjYywgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogQVI1NDE2IDkxNjAgU293bCBhcjU0MTZfc293bC5pbmkgKi8KIHN0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTE2MFtdWzZdID0gewogICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LApAQCAtMjU0OSw2ICsyNTQ2LDggQEAKICAgICB7IDB4MDAwMDEwZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDggfSwKICAgICB7IDB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDAsIDB4MDZlMDA2ZTAgfSwKICAgICB7IDB4MDAwMDgwMWMsIDB4MTI4ZDgwMjcsIDB4MTI4ZDgwNGYsIDB4MTJlMDAwNTcsIDB4MTJlMDAwMmIsIDB4MDk4ODAwNGYgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTAgfSwKKyAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGEgfSwKICAgICB7IDB4MDAwMDgzMTgsIDB4MDAwMDNlODAsIDB4MDAwMDdkMDAsIDB4MDAwMDY4ODAsIDB4MDAwMDM0NDAsIDB4MDAwMDY4ODAgfSwKICAgICB7IDB4MDAwMDk4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzMDMgfSwKICAgICB7IDB4MDAwMDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSwKQEAgLTI1ODcsNyArMjU4Niw2IEBACiAgICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCiAgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjUwLCAweDAwMWZmMDAwLCAweDAwMWZmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCi0gICAgeyAweDAwMDBhMjc0LCAweDBhMTljNjUyLCAweDBhMTljNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCiAgICAgeyAweDAwMDBhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA3ODk0LCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwLCAweDVhNTA4MDAwIH0sCkBAIC0yNzE5LDcgKzI3MTcsNiBAQAogICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAogICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAogICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCB9LAogICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LApAQCAtMjczNSw3ICsyNzMyLDYgQEAKICAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKICAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMTAgfSwKICAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKQEAgLTI4MTcsNyArMjgxMyw3IEBACiAgICAgeyAweDAwMDA5OTU4LCAweDIxMDhlY2ZmIH0sCiAgICAgeyAweDAwMDA5OTQwLCAweDE0NzUwNjA0IH0sCiAgICAgeyAweDAwMDBjOTVjLCAweDAwNGI2YThlIH0sCi0gICAgeyAweDAwMDA5OTY4LCAweDAwMDAwM2NlIH0sCisgICAgeyAweDAwMDBjOTY4LCAweDAwMDAwM2NlIH0sCiAgICAgeyAweDAwMDA5OTcwLCAweDE5MGZiNTE1IH0sCiAgICAgeyAweDAwMDA5OTc0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5OTc4LCAweDAwMDAwMDAxIH0sCkBAIC0yOTA5LDE2ICsyOTA1LDEyIEBACiAgICAgeyAweDAwMDA3ODBjLCAweDIxMDg0MjEwIH0sCiAgICAgeyAweDAwMDA3ODEwLCAweDZkODAxMzAwIH0sCiAgICAgeyAweDAwMDA3ODE4LCAweDA3ZTQxMDAwIH0sCi0gICAgeyAweDAwMDA3ODFjLCAweDAwMzkyMDAwIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDkyNTkyNDgwIH0sCiAgICAgeyAweDAwMDA3ODI0LCAweDAwMDQwMDAwIH0sCiAgICAgeyAweDAwMDA3ODI4LCAweGRiMDA1MDEyIH0sCiAgICAgeyAweDAwMDA3ODJjLCAweDA0OTI0OTE0IH0sCiAgICAgeyAweDAwMDA3ODMwLCAweDIxMDg0MjEwIH0sCiAgICAgeyAweDAwMDA3ODM0LCAweDZkODAxMzAwIH0sCiAgICAgeyAweDAwMDA3ODNjLCAweDA3ZTQwMDAwIH0sCi0gICAgeyAweDAwMDA3ODQwLCAweDAwMzkyMDAwIH0sCi0gICAgeyAweDAwMDA3ODQ0LCAweDkyNTkyNDgwIH0sCiAgICAgeyAweDAwMDA3ODQ4LCAweDAwMTAwMDAwIH0sCiAgICAgeyAweDAwMDA3ODRjLCAweDc3M2YwNTY3IH0sCiAgICAgeyAweDAwMDA3ODUwLCAweDU0MjE0NTE0IH0sCkBAIC0yOTU0LDcgKzI5NDYsNiBAQAogICAgIHsgMHgwMDAwOTg0NCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMSB9LAogICAgIHsgMHgwMDAwOTkxNCwgMHgwMDAwMDg5OCwgMHgwMDAwMTEzMCB9LAogICAgIHsgMHgwMDAwOTkxOCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNiB9LAotICAgIHsgMHgwMDAwOTk0NCwgMHhkZmJjMTIxMCwgMHhkZmJjMTIxMCB9LAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMltdWzZdID0gewpAQCAtMzM2NiwyMSArMzM1NywyNiBAQAogICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAxNTA0YSwgMHgwMDAxNTA0YSwgMHgwMDAxODIwYSwgMHgwMDAxODIwYSwgMHgwMDAxODIwYSB9LAogICAgIHsgMHgwMDAwYTMxYywgMHgwMDAxOTA0YywgMHgwMDAxOTA0YywgMHgwMDAxYjIxMSwgMHgwMDAxYjIxMSwgMHgwMDAxYjIxMSB9LAogICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAxYzA0ZSwgMHgwMDAxYzA0ZSwgMHgwMDAxZTIxMywgMHgwMDAxZTIxMywgMHgwMDAxZTIxMyB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAyMDA5MiwgMHgwMDAyMDA5MiwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAyNDEwYSwgMHgwMDAyNDEwYSwgMHgwMDAyNTQxMywgMHgwMDAyNTQxMywgMHgwMDAyNTQxMyB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAyNzEwYywgMHgwMDAyNzEwYywgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAyYjE4YiwgMHgwMDAyYjE4YiwgMHgwMDAyYzgxMywgMHgwMDAyYzgxMywgMHgwMDAyYzgxMyB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAyZTFjYywgMHgwMDAyZTFjYywgMHgwMDAzMGExNCwgMHgwMDAzMGExNCwgMHgwMDAzMGExNCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YyB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzMjFlYywgMHgwMDAzMjFlYywgMHgwMDA1M2ZkNSwgMHgwMDA1M2ZkNSwgMHgwMDA1M2ZkNSB9LAorICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAyMTA5MiwgMHgwMDAyMTA5MiwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSwgMHgwMDAyMjQxMSB9LAorICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAyNTEwYSwgMHgwMDAyNTEwYSwgMHgwMDAyNTQxMywgMHgwMDAyNTQxMywgMHgwMDAyNTQxMyB9LAorICAgIHsgMHgwMDAwYTMyYywgMHgwMDAyOTEwYywgMHgwMDAyOTEwYywgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSwgMHgwMDAyOTgxMSB9LAorICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAyYzE4YiwgMHgwMDAyYzE4YiwgMHgwMDAyYzgxMywgMHgwMDAyYzgxMywgMHgwMDAyYzgxMyB9LAorICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAyZjFjYywgMHgwMDAyZjFjYywgMHgwMDAzMGExNCwgMHgwMDAzMGExNCwgMHgwMDAzMGExNCB9LAorICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzMjFlYiwgMHgwMDAzMjFlYiwgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCwgMHgwMDAzNWE1MCB9LAorICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YywgMHgwMDAzOWM0YyB9LAorICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSwgMHgwMDAzZGU4YSB9LAorICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiwgMHgwMDA0MmU5MiB9LAorICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiwgMHgwMDA0NmVkMiB9LAorICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSwgMHgwMDA0YmVkNSB9LAorICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCwgMHgwMDA0ZmY1NCB9LAorICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzNDFlYywgMHgwMDAzNDFlYywgMHgwMDA1NWZkNSwgMHgwMDA1NWZkNSwgMHgwMDA1NWZkNSB9LAogICAgIHsgMHgwMDAwNzgxNCwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiB9LAogICAgIHsgMHgwMDAwNzgzOCwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiwgMHgwMDE5OGVmZiB9LAorICAgIHsgMHgwMDAwNzgxYywgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCB9LAorICAgIHsgMHgwMDAwNzg0MCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCwgMHgwMDE3MjAwMCB9LAorICAgIHsgMHgwMDAwNzgyMCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCB9LAorICAgIHsgMHgwMDAwNzg0NCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCwgMHhmMjU4YTQ4MCB9LAorICAgIHsgMHgwMDAwYTI3NCwgMHgwYTE5ZTY1MiwgMHgwYTE5ZTY1MiwgMHgwYTFhYTY1MiwgMHgwYTFhYTY1MiwgMHgwYTFhYTY1MiB9LAogICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MzljZSwgMHgwNTA3MzljZSwgMHgwNTA3MzljZSwgMHgwNTA3MzljZSwgMHgwNTA3MzljZSB9LAogfTsKIApAQCAtMzQwOSw2ICszNDA1LDExIEBACiAgICAgeyAweDAwMDBhMzU0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRiZjQyLCAweDAwMDRiZjQyLCAweDAwMDRiZjQyIH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmIH0sCiAgICAgeyAweDAwMDA3ODM4LCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmLCAweDAwMTliZWZmIH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwIH0sCisgICAgeyAweDAwMDA3ODQwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwLCAweDAwMzkyMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwLCAweDkyNTkyNDgwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTljNjUyLCAweDBhMTljNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlIH0sCiB9OwogCkBAIC00MTIwLDYgKzQxMjEsNyBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAorLyogQVI5Mjg1IHYxXzIgUENJIFJlZ2lzdGVyIFdyaXRlcy4gIENyZWF0ZWQ6IDAzLzA0LzA5ICovCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzXzkyODVfMV8yW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCkBAIC00MTM1LDExICs0MTM3LDExIEBACiAgICAgeyAweDAwMDA5ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCiAgICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCiAgICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCi0gICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIwMDIwLCAweDAzNzIwMDIwLCAweDAzNzIxNmEwIH0sCi0gICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAwMDU3LCAweDAwMDAwMDU3LCAweDAwMDAxMDU5IH0sCisgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNjIwLCAweDAzNzIxNjIwLCAweDAzNzIxNmEwIH0sCisgICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCiAgICAgeyAweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyIH0sCiAgICAgeyAweDAwMDA5ODU4LCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCi0gICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzY2MDVlLCAweDMxMzY2MDVlLCAweDMxMzk2MDVlIH0sCisgICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlIH0sCiAgICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCiAgICAgeyAweDAwMDA5ODY0LCAweDAwMDBmZTAwLCAweDAwMDBmZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCiAgICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCkBAIC00MTU0LDI5MSArNDE1NiwyNzIgQEAKICAgICB7IDB4MDAwMDk5YmMsIDB4MDAwMDA2MDAsIDB4MDAwMDA2MDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKICAgICB7IDB4MDAwMDk5YzAsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQgfSwKICAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcgfSwKLSAgICB7IDB4MDAwMDk5YzgsIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjksIDB4NjBmNjUzMjkgfSwKKyAgICB7IDB4MDAwMDk5YzgsIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjksIDB4NmFmNjUzMjkgfSwKICAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzgsIDB4MDhmMTg2YzggfSwKICAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQgfSwKICAgICB7IDB4MDAwMDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5ZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODQsIDB4MDAwNjgwODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODgsIDB4MDAwNjgwODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwOGMsIDB4MDAwNjgwOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDAsIDB4MDAwNjgxMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDQsIDB4MDAwNjgxMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDgsIDB4MDAwNjgxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMGMsIDB4MDAwNjgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTQsIDB4MDAwNjgxMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODAsIDB4MDAwNjgxODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODQsIDB4MDAwNjgxODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODgsIDB4MDAwNjgxODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOGMsIDB4MDAwNjgxOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTAsIDB4MDAwNjgxOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTQsIDB4MDAwNjgxOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTAsIDB4MDAwNjgxYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMGMsIDB4MDAwNjgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTgsIDB4MDAwNjgxYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyODQsIDB4MDAwNjgyODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyODgsIDB4MDAwNjgyODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMjAsIDB4MDAwNjgyMjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyOTAsIDB4MDAwNjgyOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDAsIDB4MDAwNjgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDQsIDB4MDAwNjgzMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDgsIDB4MDAwNjgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMGMsIDB4MDAwNjgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzODAsIDB4MDAwNjgzODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzODQsIDB4MDAwNjgzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODQsIDB4MDAwNTgwODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODgsIDB4MDAwNTgwODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwOGMsIDB4MDAwNTgwOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDAsIDB4MDAwNTgxMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDQsIDB4MDAwNTgxMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDgsIDB4MDAwNTgxMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMGMsIDB4MDAwNTgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTAsIDB4MDAwNTgxMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTQsIDB4MDAwNTgxMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODAsIDB4MDAwNTgxODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODQsIDB4MDAwNTgxODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODgsIDB4MDAwNTgxODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOGMsIDB4MDAwNTgxOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTAsIDB4MDAwNTgxOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTQsIDB4MDAwNTgxOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTAsIDB4MDAwNTgxYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMGMsIDB4MDAwNTgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTgsIDB4MDAwNTgxYTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODQsIDB4MDAwNTgyODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODgsIDB4MDAwNTgyODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMjAsIDB4MDAwNTgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyOTAsIDB4MDAwNTgyOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDAsIDB4MDAwNTgzMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDQsIDB4MDAwNTgzMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDgsIDB4MDAwNTgzMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMGMsIDB4MDAwNTgzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODAsIDB4MDAwNTgzODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODQsIDB4MDAwNTgzODQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDAsIDB4MDAwNjg3MDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDQsIDB4MDAwNjg3MDQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MGMsIDB4MDAwNjg3MGMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODAsIDB4MDAwNjg3ODAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDQsIDB4MDAwNjhiMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDgsIDB4MDAwNjhiMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMDgsIDB4MDAwNjhiMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiMGMsIDB4MDAwNjhiMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODAsIDB4MDAwNjhiODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODQsIDB4MDAwNjhiODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODgsIDB4MDAwNjhiODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOGMsIDB4MDAwNjhiOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhiOTAsIDB4MDAwYjhiOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODAsIDB4MDAwYjhmODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODgsIDB4MDAwYjhmODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmOGMsIDB4MDAwYjhmOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmOTAsIDB4MDAwYjhmOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMGMsIDB4MDAwYmIzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMTAsIDB4MDAwYmIzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODQsIDB4MDAwYmIzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODgsIDB4MDAwYmIzODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzMjQsIDB4MDAwYmIzMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmI3MDQsIDB4MDAwYmI3MDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk2YTQsIDB4MDAwZjk2YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk2YTgsIDB4MDAwZjk2YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTAsIDB4MDAwZjk3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTQsIDB4MDAwZjk3MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjAsIDB4MDAwZjk3MjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjQsIDB4MDAwZjk3MjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MjgsIDB4MDAwZjk3MjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MmMsIDB4MDAwZjk3MmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3YTAsIDB4MDAwZjk3YTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3YTQsIDB4MDAwZjk3YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTgsIDB4MDAwZmI3YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjAsIDB4MDAwZmI3YjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjQsIDB4MDAwZmI3YjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjgsIDB4MDAwZmI3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTUsIDB4MDAwZmI3YTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTksIDB4MDAwZmI3YTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWQsIDB4MDAwZmI3YWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjEsIDB4MDAwZmI3YjEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjUsIDB4MDAwZmI3YjUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjksIDB4MDAwZmI3YjksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzUsIDB4MDAwZmI3YzUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzksIDB4MDAwZmI3YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDEsIDB4MDAwZmI3ZDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDUsIDB4MDAwZmI3ZDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDksIDB4MDAwZmI3ZDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzYsIDB4MDAwZmI3YzYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2EsIDB4MDAwZmI3Y2EsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2UsIDB4MDAwZmI3Y2UsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDIsIDB4MDAwZmI3ZDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDYsIDB4MDAwZmI3ZDYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzMsIDB4MDAwZmI3YzMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzcsIDB4MDAwZmI3YzcsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2IsIDB4MDAwZmI3Y2IsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2YsIDB4MDAwZmI3Y2YsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDcsIDB4MDAwZmI3ZDcsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZGIsIDB4MDAwZmI3ZGIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwMWMsIDB4MDAwNjgwMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODAsIDB4MDAwNjgwODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODQsIDB4MDAwNjgwODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwODgsIDB4MDAwNjgwODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgwOGMsIDB4MDAwNjgwOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDAsIDB4MDAwNjgxMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDQsIDB4MDAwNjgxMDQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMDgsIDB4MDAwNjgxMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMGMsIDB4MDAwNjgxMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxMTAsIDB4MDAwNjgxMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODAsIDB4MDAwNjgxODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODQsIDB4MDAwNjgxODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxODgsIDB4MDAwNjgxODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOGMsIDB4MDAwNjgxOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTAsIDB4MDAwNjgxOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxOTQsIDB4MDAwNjgxOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTAsIDB4MDAwNjgxYTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMGMsIDB4MDAwNjgyMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYTgsIDB4MDAwNjgxYTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgxYWMsIDB4MDAwNjgxYWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMWMsIDB4MDAwNjgyMWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyMjQsIDB4MDAwNjgyMjQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgyOTAsIDB4MDAwNjgyOTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDAsIDB4MDAwNjgzMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMDgsIDB4MDAwNjgzMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMGMsIDB4MDAwNjgzMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjgzMTAsIDB4MDAwNjgzMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODgsIDB4MDAwNjg3ODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OGMsIDB4MDAwNjg3OGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTAsIDB4MDAwNjg3OTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTQsIDB4MDAwNjg3OTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OTgsIDB4MDAwNjg3OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3OWMsIDB4MDAwNjg3OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiODksIDB4MDAwNjhiODksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOGQsIDB4MDAwNjhiOGQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTEsIDB4MDAwNjhiOTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTUsIDB4MDAwNjhiOTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiOTksIDB4MDAwNjhiOTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYTUsIDB4MDAwNjhiYTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYTksIDB4MDAwNjhiYTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjhiYWQsIDB4MDAwNjhiYWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhiMGMsIDB4MDAwYjhiMGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmMTAsIDB4MDAwYjhmMTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmMTQsIDB4MDAwYjhmMTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODQsIDB4MDAwYjhmODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYjhmODgsIDB4MDAwYjhmODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODAsIDB4MDAwYmIzODAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODQsIDB4MDAwYmIzODQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzODgsIDB4MDAwYmIzODgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzOGMsIDB4MDAwYmIzOGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmIzOTQsIDB4MDAwYmIzOTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwYmI3OTgsIDB4MDAwYmI3OTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MGMsIDB4MDAwZjk3MGMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTAsIDB4MDAwZjk3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTQsIDB4MDAwZjk3MTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTgsIDB4MDAwZjk3MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MDUsIDB4MDAwZjk3MDUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MDksIDB4MDAwZjk3MDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MGQsIDB4MDAwZjk3MGQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTEsIDB4MDAwZjk3MTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTUsIDB4MDAwZjk3MTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZjk3MTksIDB4MDAwZjk3MTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTQsIDB4MDAwZmI3YTQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTgsIDB4MDAwZmI3YTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWMsIDB4MDAwZmI3YWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YWMsIDB4MDAwZmI3YWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjAsIDB4MDAwZmI3YjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjgsIDB4MDAwZmI3YjgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YmMsIDB4MDAwZmI3YmMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTEsIDB4MDAwZmI3YTEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTUsIDB4MDAwZmI3YTUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YTksIDB4MDAwZmI3YTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjEsIDB4MDAwZmI3YjEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YjUsIDB4MDAwZmI3YjUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YmQsIDB4MDAwZmI3YmQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzksIDB4MDAwZmI3YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2QsIDB4MDAwZmI3Y2QsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDEsIDB4MDAwZmI3ZDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDksIDB4MDAwZmI3ZDksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzIsIDB4MDAwZmI3YzIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzYsIDB4MDAwZmI3YzYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2EsIDB4MDAwZmI3Y2EsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2UsIDB4MDAwZmI3Y2UsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDIsIDB4MDAwZmI3ZDIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDYsIDB4MDAwZmI3ZDYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3YzMsIDB4MDAwZmI3YzMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3Y2IsIDB4MDAwZmI3Y2IsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZmI3ZDMsIDB4MDAwZmI3ZDMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDQsIDB4MDAwNzhiMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMGMsIDB4MDAwNzhiMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODAsIDB4MDAwNzhiODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODQsIDB4MDAwNzhiODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODgsIDB4MDAwNzhiODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOGMsIDB4MDAwNzhiOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOTAsIDB4MDAwNzhiOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODAsIDB4MDAwY2FmODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODQsIDB4MDAwY2FmODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODgsIDB4MDAwY2FmODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOGMsIDB4MDAwY2FmOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOTAsIDB4MDAwY2FmOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMGMsIDB4MDAwZGIzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMTAsIDB4MDAwZGIzMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODQsIDB4MDAwZGIzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODgsIDB4MDAwZGIzODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMjQsIDB4MDAwZGIzMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MDQsIDB4MDAwZWI3MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTQsIDB4MDAwZWI2YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTgsIDB4MDAwZWI2YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTAsIDB4MDAwZWI3MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTQsIDB4MDAwZWI3MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjAsIDB4MDAwZWI3MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjQsIDB4MDAwZWI3MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjgsIDB4MDAwZWI3MjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MmMsIDB4MDAwZWI3MmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTAsIDB4MDAwZWI3YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTQsIDB4MDAwZWI3YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTgsIDB4MDAwZWI3YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjAsIDB4MDAwZWI3YjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjQsIDB4MDAwZWI3YjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjgsIDB4MDAwZWI3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTUsIDB4MDAwZWI3YTUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTksIDB4MDAwZWI3YTksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YWQsIDB4MDAwZWI3YWQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjEsIDB4MDAwZWI3YjEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjUsIDB4MDAwZWI3YjUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjksIDB4MDAwZWI3YjksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzUsIDB4MDAwZWI3YzUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzksIDB4MDAwZWI3YzksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDEsIDB4MDAwZWI3ZDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDUsIDB4MDAwZWI3ZDUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDksIDB4MDAwZWI3ZDksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzYsIDB4MDAwZWI3YzYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2EsIDB4MDAwZWI3Y2EsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2UsIDB4MDAwZWI3Y2UsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDIsIDB4MDAwZWI3ZDIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDYsIDB4MDAwZWI3ZDYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzMsIDB4MDAwZWI3YzMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzcsIDB4MDAwZWI3YzcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2IsIDB4MDAwZWI3Y2IsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2YsIDB4MDAwZWI3Y2YsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDcsIDB4MDAwZWI3ZDcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODQsIDB4MDAwNTgwODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwODgsIDB4MDAwNTgwODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgwOGMsIDB4MDAwNTgwOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDAsIDB4MDAwNTgxMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDQsIDB4MDAwNTgxMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMDgsIDB4MDAwNTgxMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMGMsIDB4MDAwNTgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTAsIDB4MDAwNTgxMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxMTQsIDB4MDAwNTgxMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODAsIDB4MDAwNTgxODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODQsIDB4MDAwNTgxODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxODgsIDB4MDAwNTgxODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOGMsIDB4MDAwNTgxOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTAsIDB4MDAwNTgxOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxOTQsIDB4MDAwNTgxOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTAsIDB4MDAwNTgxYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMGMsIDB4MDAwNTgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgxYTgsIDB4MDAwNTgxYTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODQsIDB4MDAwNTgyODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyODgsIDB4MDAwNTgyODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyMjAsIDB4MDAwNTgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgyOTAsIDB4MDAwNTgyOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDAsIDB4MDAwNTgzMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDQsIDB4MDAwNTgzMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMDgsIDB4MDAwNTgzMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzMGMsIDB4MDAwNTgzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODAsIDB4MDAwNTgzODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTgzODQsIDB4MDAwNTgzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDAsIDB4MDAwNjg3MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDQsIDB4MDAwNjg3MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MDgsIDB4MDAwNjg3MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3MGMsIDB4MDAwNjg3MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODAsIDB4MDAwNjg3ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNjg3ODQsIDB4MDAwNjg3ODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDQsIDB4MDAwNzhiMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMDgsIDB4MDAwNzhiMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiMGMsIDB4MDAwNzhiMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODAsIDB4MDAwNzhiODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODQsIDB4MDAwNzhiODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiODgsIDB4MDAwNzhiODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOGMsIDB4MDAwNzhiOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNzhiOTAsIDB4MDAwNzhiOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODAsIDB4MDAwY2FmODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODQsIDB4MDAwY2FmODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmODgsIDB4MDAwY2FmODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOGMsIDB4MDAwY2FmOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwY2FmOTAsIDB4MDAwY2FmOTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMGMsIDB4MDAwZGIzMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMTAsIDB4MDAwZGIzMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODQsIDB4MDAwZGIzODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzODgsIDB4MDAwZGIzODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZGIzMjQsIDB4MDAwZGIzMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MDQsIDB4MDAwZWI3MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTQsIDB4MDAwZWI2YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI2YTgsIDB4MDAwZWI2YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTAsIDB4MDAwZWI3MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MTQsIDB4MDAwZWI3MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjAsIDB4MDAwZWI3MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjQsIDB4MDAwZWI3MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MjgsIDB4MDAwZWI3MjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3MmMsIDB4MDAwZWI3MmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTAsIDB4MDAwZWI3YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTQsIDB4MDAwZWI3YTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTgsIDB4MDAwZWI3YTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjAsIDB4MDAwZWI3YjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjQsIDB4MDAwZWI3YjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjgsIDB4MDAwZWI3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTUsIDB4MDAwZWI3YTUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YTksIDB4MDAwZWI3YTksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YWQsIDB4MDAwZWI3YWQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjEsIDB4MDAwZWI3YjEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjUsIDB4MDAwZWI3YjUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YjksIDB4MDAwZWI3YjksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzUsIDB4MDAwZWI3YzUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzksIDB4MDAwZWI3YzksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDEsIDB4MDAwZWI3ZDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDUsIDB4MDAwZWI3ZDUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDksIDB4MDAwZWI3ZDksIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzYsIDB4MDAwZWI3YzYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2EsIDB4MDAwZWI3Y2EsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2UsIDB4MDAwZWI3Y2UsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDIsIDB4MDAwZWI3ZDIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDYsIDB4MDAwZWI3ZDYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzMsIDB4MDAwZWI3YzMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3YzcsIDB4MDAwZWI3YzcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2IsIDB4MDAwZWI3Y2IsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3Y2YsIDB4MDAwZWI3Y2YsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZDcsIDB4MDAwZWI3ZDcsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwZWI3ZGIsIDB4MDAwZWI3ZGIsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSwKLSAgICB7IDB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWYwMDAgfSwKKyAgICB7IDB4MDAwMGEyMGMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDAsIDB4MDAwMWYwMDAgfSwKICAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKICAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyNTAsIDB4MDAwNGYwMDAsIDB4MDAwNGYwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGE4MWM2NTIsIDB4MGE4MWM2NTIsIDB4MGE4MjA2NTIsIDB4MGE4MjA2NTIsIDB4MGE4MmE2NTIgfSwKLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTA0MDgsIDB4MDAwMTA0MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2MGEsIDB4MDAwMTg2MGEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjA4MTgsIDB4MDAwMjA4MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQ4NTgsIDB4MDAwMjQ4NTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjY4NTksIDB4MDAwMjY4NTksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjk4NWIsIDB4MDAwMjk4NWIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmI4OWEsIDB4MDAwMmI4OWEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmQ4OWIsIDB4MDAwMmQ4OWIsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmY4OWMsIDB4MDAwMmY4OWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzE4OWQsIDB4MDAwMzE4OWQsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzM4OWUsIDB4MDAwMzM4OWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzY4ZGUsIDB4MDAwMzY4ZGUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKIH07CiAKQEAgLTQ1NjgsNyArNDU1MSw3IEBACiAgICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCiAgICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCiAgICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwIH0sCisgICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODEwIH0sCiAgICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCkBAIC00NTg0LDcgKzQ1NjcsNyBAQAogICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAogICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIwYSB9LAogICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LApAQCAtNDY3OSw3ICs0NjYyLDcgQEAKICAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKICAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKLSAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjEwMDAgfSwKKyAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjA0MDAgfSwKICAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKICAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKICAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKQEAgLTQ2ODgsNyArNDY3MSw3IEBACiAgICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCiAgICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCiAgICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDBhMjA4LCAweDgwM2U2Nzg4IH0sCisgICAgeyAweDAwMDBhMjA4LCAweDgwM2U2OGM4IH0sCiAgICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCiAgICAgeyAweDAwMDBhMjE0LCAweDAwMjA2YzEwIH0sCiAgICAgeyAweDAwMDBhMjE4LCAweDAwOWM0MDYwIH0sCkBAIC00NzA4LDggKzQ2OTEsNiBAQAogICAgIHsgMHgwMDAwYTI2OCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTI2YywgMHgwZWJhZTllNiB9LAogICAgIHsgMHgwMDAwZDI3MCwgMHgwZDgyMDgyMCB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgzMThjNjMxOCB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTBjMDMxOCB9LAogICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAogICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAogICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LApAQCAtNDcyNCw4ICs0NzA1LDYgQEAKICAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MzE4YzYzMTggfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAzMTggfSwKICAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKICAgICB7IDB4MDAwMGEzYTAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzYTQsIDB4MDAwMDAwMDAgfSwKQEAgLTQ3NDAsOCArNDcxOSw2IEBACiAgICAgeyAweDAwMDBhM2NjLCAweDIwMjAyMDIwIH0sCiAgICAgeyAweDAwMDBhM2QwLCAweDIwMjAyMDIwIH0sCiAgICAgeyAweDAwMDBhM2Q0LCAweDIwMjAyMDIwIH0sCi0gICAgeyAweDAwMDBhM2RjLCAweDMxOGM2MzE4IH0sCi0gICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzE4IH0sCiAgICAgeyAweDAwMDBhM2U0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhM2U4LCAweDE4YzQzNDMzIH0sCiAgICAgeyAweDAwMDBhM2VjLCAweDAwZjcwMDgxIH0sCkBAIC00NzUyLDEzICs0NzI5LDExIEBACiAgICAgeyAweDAwMDA3ODEwLCAweDcxYzBkMzg4IH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDkyNDkzNGE4IH0sCiAgICAgeyAweDAwMDA3ODFjLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0IH0sCiAgICAgeyAweDAwMDA3ODI0LCAweDAwZDg2ZmZmIH0sCiAgICAgeyAweDAwMDA3ODI4LCAweDI2ZDI0OTFiIH0sCiAgICAgeyAweDAwMDA3ODJjLCAweDZlMzZkOTdiIH0sCiAgICAgeyAweDAwMDA3ODMwLCAweGVkYjZkOTZlIH0sCiAgICAgeyAweDAwMDA3ODM0LCAweDcxNDAwMDg3IH0sCi0gICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxIH0sCiAgICAgeyAweDAwMDA3ODNjLCAweDAwMDFmZmZlIH0sCiAgICAgeyAweDAwMDA3ODQwLCAweGZmZWIxYTIwIH0sCiAgICAgeyAweDAwMDA3ODQ0LCAweDAwMGMwZGI2IH0sCkBAIC00NzcxLDEwICs0NzQ2LDgxIEBACiAgICAgeyAweDAwMDA3ODYwLCAweDIxMDg0MjEwIH0sCiAgICAgeyAweDAwMDA3ODY0LCAweGY3ZDdmZmRlIH0sCiAgICAgeyAweDAwMDA3ODY4LCAweGMyMDM0MDgwIH0sCi0gICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0IH0sCiAgICAgeyAweDAwMDA3ODcwLCAweDEwMTQyYzAwIH0sCiB9OwogCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA1MjAwLCAweDAwMDA1MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3MjAxLCAweDAwMDA3MjAxLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBiMjQwLCAweDAwMDBiMjQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBkMjQxLCAweDAwMDBkMjQxLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBmNDQwLCAweDAwMDBmNDQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0NjQwLCAweDAwMDE0NjQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4NjgwLCAweDAwMDE4NjgwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5ODQxLCAweDAwMDE5ODQxLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjYTQwLCAweDAwMDFjYTQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFmYTgwLCAweDAwMDFmYTgwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIzYWMwLCAweDAwMDIzYWMwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhYjQwLCAweDAwMDJhYjQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMzZDgyLCAweDAwMDMzZDgyLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAzLCAweGZhYzY4ODAzLCAweGZhYzY4ODAzLCAweGZhYzY4ODAzLCAweGZhYzY4ODAzIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlLCAweDA4NjA5ZWJlIH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjJhNjUyLCAweDBhMjJhNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlLCAweDA1MDcwMWNlIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlLCAweDAwMDAwMWNlIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzX29yaWdpbmFsX3R4X2dhaW5fOTI4NV8xXzJbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCwgMHgwMDAwOTIwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDIwOCwgMHgwMDAxMDIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxOTYwOCwgMHgwMDAxOTYwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMjYxOCwgMHgwMDAyMjYxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYTZjOSwgMHgwMDAyYTZjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMTcxMCwgMHgwMDAzMTcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNTcxOCwgMHgwMDAzNTcxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODc1OCwgMHgwMDAzODc1OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzYzc1YSwgMHgwMDAzYzc1YSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0MDc1YywgMHgwMDA0MDc1YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0NDc1ZSwgMHgwMDA0NDc1ZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0Njc5ZiwgMHgwMDA0Njc5ZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0ODdkZiwgMHgwMDA0ODdkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzgzOCwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSwgMHhmYWM2ODgwMSB9LAorICAgIHsgMHgwMDAwNzg2YywgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCwgMHg0ODYwOWViNCB9LAorICAgIHsgMHgwMDAwNzgyMCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCwgMHgwMDAwMGMwNCB9LAorICAgIHsgMHgwMDAwYTI3NCwgMHgwYTIxYzY1MiwgMHgwYTIxYzY1MiwgMHgwYTIxYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIyYTY1MiB9LAorICAgIHsgMHgwMDAwYTI3OCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAorICAgIHsgMHgwMDAwYTI3YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YywgMHgwNTBlMDM5YyB9LAorICAgIHsgMHgwMDAwYTM5NCwgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAorICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YyB9LAorICAgIHsgMHgwMDAwYTNkYywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YywgMHgzOWNlNzM5YyB9LAorICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YywgMHgwMDAwMDM5YyB9LAorfTsKKwogc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4NV8xXzJbXVsyXSA9IHsKICAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKICAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMKaW5kZXggYWYzMmQwOS4uZjc1N2JjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMKQEAgLTE0LDQ1ICsxNCw0MCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF90eHFfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19JTlRFUlJVUFQsCiAJCSJ0eCBvayAweCV4IGVyciAweCV4IGRlc2MgMHgleCBlb2wgMHgleCB1cm4gMHgleFxuIiwKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVyckludGVycnVwdE1hc2ssCi0JCWFocC0+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+ZHNfY3RsMSA9IHNpemUgJiBBUl9CdWZMZW47CiAJaWYgKGZsYWdzICYgQVRIOUtfUlhERVNDX0lOVFJFUSkKQEAgLTg3Nyw3ICs4NzgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCkKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpCiB7CiAJdTMyIHJlZzsKIApAQCAtODg1LDcgKzg4Niw4IEBACiAJCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJICAgIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAotCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLCAwKSkgeworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLAorCQkJCSAgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJCSAgICAoQVJfRElBR19SWF9ESVMgfAogCQkJCSAgICAgQVJfRElBR19SWF9BQk9SVCkpOwpAQCAtOTA0LDE3ICs5MDYsMTcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKQordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWERQLCByeGRwKTsKIH0KIAotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCkBAIC05MjMsMjQgKzkyNSw0MSBAQAogCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdG9wcGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfRElBR19TVywgQVJfRElBR19SWF9ESVMpOwogCiAJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwogfQogCi1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CisjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCisjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCisKKwlpbnQgaTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX0NSLCBBUl9DUl9SWEUsIDApKSB7CisJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KKwlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgeworCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CisJfQorCisJaWYgKGkgPT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwKLQkJCSJkbWEgZmFpbGVkIHRvIHN0b3AgaW4gMTBtc1xuIgotCQkJIkFSX0NSPTB4JTA4eFxuQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQlSRUdfUkVBRChhaCwgQVJfQ1IpLCBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJImRtYSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCisJCQkiQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwogCX0KKworI3VuZGVmIEFIX1JYX1RJTUVfUVVBTlRVTQorI3VuZGVmIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1ZjY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUFDX0gKKyNkZWZpbmUgTUFDX0gKKworI2RlZmluZSBSWFNUQVRVU19SQVRFKGFoLCBhZHMpIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpID8JCVwKKwkJCQlNUyhhZHMtPmRzX3J4c3RhdHVzMCwgQVJfUnhSYXRlKSA6CVwKKwkJCQkoYWRzLT5kc19yeHN0YXR1czMgPj4gMikgJiAweEZGKQorCisjZGVmaW5lIHNldDExblRyaWVzKF9zZXJpZXMsIF9pbmRleCkgXAorCShTTSgoX3NlcmllcylbX2luZGV4XS5UcmllcywgQVJfWG1pdERhdGFUcmllcyMjX2luZGV4KSkKKworI2RlZmluZSBzZXQxMW5SYXRlKF9zZXJpZXMsIF9pbmRleCkgXAorCShTTSgoX3NlcmllcylbX2luZGV4XS5SYXRlLCBBUl9YbWl0UmF0ZSMjX2luZGV4KSkKKworI2RlZmluZSBzZXQxMW5Qa3REdXJSVFNDVFMoX3NlcmllcywgX2luZGV4KQkJCQlcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlBrdER1cmF0aW9uLCBBUl9QYWNrZXREdXIjI19pbmRleCkgfAlcCisJICgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgICA/CVwKKwkgIEFSX1JUU0NUU1F1YWwjI19pbmRleCA6IDApKQorCisjZGVmaW5lIHNldDExblJhdGVGbGFncyhfc2VyaWVzLCBfaW5kZXgpCQkJCVwKKwkoKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCA/CQlcCisJICBBUl8yMDQwXyMjX2luZGV4IDogMCkJCQkJCQlcCisJIHwoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU19IQUxGR0kgPwlcCisJICAgQVJfR0kjI19pbmRleCA6IDApCQkJCQkJXAorCSB8U00oKF9zZXJpZXMpW19pbmRleF0uQ2hTZWwsIEFSX0NoYWluU2VsIyNfaW5kZXgpKQorCisjZGVmaW5lIENDS19TSUZTX1RJTUUgICAgICAgIDEwCisjZGVmaW5lIENDS19QUkVBTUJMRV9CSVRTICAgMTQ0CisjZGVmaW5lIENDS19QTENQX0JJVFMgICAgICAgIDQ4CisKKyNkZWZpbmUgT0ZETV9TSUZTX1RJTUUgICAgICAgIDE2CisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRSAgICAyMAorI2RlZmluZSBPRkRNX1BMQ1BfQklUUyAgICAgICAgMjIKKyNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRSAgICAgIDQKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRV9IQUxGICAgICAzMgorI2RlZmluZSBPRkRNX1BSRUFNQkxFX1RJTUVfSEFMRiA0MAorI2RlZmluZSBPRkRNX1BMQ1BfQklUU19IQUxGICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX0hBTEYgICA4CisKKyNkZWZpbmUgT0ZETV9TSUZTX1RJTUVfUVVBUlRFUiAgICAgIDY0CisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9RVUFSVEVSICA4MAorI2RlZmluZSBPRkRNX1BMQ1BfQklUU19RVUFSVEVSICAgICAgMjIKKyNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSICAgIDE2CisKKyNkZWZpbmUgSU5JVF9BSUZTICAgICAgIDIKKyNkZWZpbmUgSU5JVF9DV01JTiAgICAgIDE1CisjZGVmaW5lIElOSVRfQ1dNSU5fMTFCICAzMQorI2RlZmluZSBJTklUX0NXTUFYICAgICAgMTAyMworI2RlZmluZSBJTklUX1NIX1JFVFJZICAgMTAKKyNkZWZpbmUgSU5JVF9MR19SRVRSWSAgIDEwCisjZGVmaW5lIElOSVRfU1NIX1JFVFJZICAzMgorI2RlZmluZSBJTklUX1NMR19SRVRSWSAgMzIKKworI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfNiA2CisjZGVmaW5lIEFUSDlLX1NMT1RfVElNRV85IDkKKyNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzIwIDIwCisKKyNkZWZpbmUgQVRIOUtfVFhFUlJfWFJFVFJZICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19UWEVSUl9GSUxUICAgICAgICAgICAweDAyCisjZGVmaW5lIEFUSDlLX1RYRVJSX0ZJRk8gICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfVFhFUlJfWFRYT1AgICAgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEICAweDEwCisKKyNkZWZpbmUgQVRIOUtfVFhfQkEgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19UWF9QV1JNR01UICAgICAgICAgICAweDAyCisjZGVmaW5lIEFUSDlLX1RYX0RFU0NfQ0ZHX0VSUiAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfVFhfREFUQV9VTkRFUlJVTiAgICAgMHgwOAorI2RlZmluZSBBVEg5S19UWF9ERUxJTV9VTkRFUlJVTiAgICAweDEwCisjZGVmaW5lIEFUSDlLX1RYX1NXX0FCT1JURUQgICAgICAgIDB4NDAKKyNkZWZpbmUgQVRIOUtfVFhfU1dfRklMVEVSRUQgICAgICAgMHg4MAorCisjZGVmaW5lIE1JTl9UWF9GSUZPX1RIUkVTSE9MRCAgIDB4MQorI2RlZmluZSBNQVhfVFhfRklGT19USFJFU0hPTEQgICAoKDQwOTYgLyA2NCkgLSAxKQorI2RlZmluZSBJTklUX1RYX0ZJRk9fVEhSRVNIT0xEICBNSU5fVFhfRklGT19USFJFU0hPTEQKKworc3RydWN0IGF0aF90eF9zdGF0dXMgeworCXUzMiB0c190c3RhbXA7CisJdTE2IHRzX3NlcW51bTsKKwl1OCB0c19zdGF0dXM7CisJdTggdHNfcmF0ZWNvZGU7CisJdTggdHNfcmF0ZWluZGV4OworCWludDhfdCB0c19yc3NpOworCXU4IHRzX3Nob3J0cmV0cnk7CisJdTggdHNfbG9uZ3JldHJ5OworCXU4IHRzX3ZpcnRjb2w7CisJdTggdHNfYW50ZW5uYTsKKwl1OCB0c19mbGFnczsKKwlpbnQ4X3QgdHNfcnNzaV9jdGwwOworCWludDhfdCB0c19yc3NpX2N0bDE7CisJaW50OF90IHRzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgdHNfcnNzaV9leHQwOworCWludDhfdCB0c19yc3NpX2V4dDE7CisJaW50OF90IHRzX3Jzc2lfZXh0MjsKKwl1OCBwYWRbM107CisJdTMyIGJhX2xvdzsKKwl1MzIgYmFfaGlnaDsKKwl1MzIgZXZtMDsKKwl1MzIgZXZtMTsKKwl1MzIgZXZtMjsKK307CisKK3N0cnVjdCBhdGhfcnhfc3RhdHVzIHsKKwl1MzIgcnNfdHN0YW1wOworCXUxNiByc19kYXRhbGVuOworCXU4IHJzX3N0YXR1czsKKwl1OCByc19waHllcnI7CisJaW50OF90IHJzX3Jzc2k7CisJdTggcnNfa2V5aXg7CisJdTggcnNfcmF0ZTsKKwl1OCByc19hbnRlbm5hOworCXU4IHJzX21vcmU7CisJaW50OF90IHJzX3Jzc2lfY3RsMDsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwxOworCWludDhfdCByc19yc3NpX2N0bDI7CisJaW50OF90IHJzX3Jzc2lfZXh0MDsKKwlpbnQ4X3QgcnNfcnNzaV9leHQxOworCWludDhfdCByc19yc3NpX2V4dDI7CisJdTggcnNfaXNhZ2dyOworCXU4IHJzX21vcmVhZ2dyOworCXU4IHJzX251bV9kZWxpbXM7CisJdTggcnNfZmxhZ3M7CisJdTMyIGV2bTA7CisJdTMyIGV2bTE7CisJdTMyIGV2bTI7Cit9OworCisjZGVmaW5lIEFUSDlLX1JYRVJSX0NSQyAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19SWEVSUl9QSFkgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfUlhFUlJfRklGTyAgICAgICAgICAweDA0CisjZGVmaW5lIEFUSDlLX1JYRVJSX0RFQ1JZUFQgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19SWEVSUl9NSUMgICAgICAgICAgIDB4MTAKKworI2RlZmluZSBBVEg5S19SWF9NT1JFICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQVRIOUtfUlhfTU9SRV9BR0dSICAgICAgICAweDAyCisjZGVmaW5lIEFUSDlLX1JYX0dJICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19SWF8yMDQwICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BSRSAgICAweDEwCisjZGVmaW5lIEFUSDlLX1JYX0RFTElNX0NSQ19QT1NUICAgMHgyMAorI2RlZmluZSBBVEg5S19SWF9ERUNSWVBUX0JVU1kgICAgIDB4NDAKKworI2RlZmluZSBBVEg5S19SWEtFWUlYX0lOVkFMSUQJKCh1OCktMSkKKyNkZWZpbmUgQVRIOUtfVFhLRVlJWF9JTlZBTElECSgodTMyKS0xKQorCitzdHJ1Y3QgYXRoX2Rlc2MgeworCXUzMiBkc19saW5rOworCXUzMiBkc19kYXRhOworCXUzMiBkc19jdGwwOworCXUzMiBkc19jdGwxOworCXUzMiBkc19od1syMF07CisJdW5pb24geworCQlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0eDsKKwkJc3RydWN0IGF0aF9yeF9zdGF0dXMgcng7CisJCXZvaWQgKnN0YXRzOworCX0gZHNfdXM7CisJdm9pZCAqZHNfdmRhdGE7Cit9IF9fcGFja2VkOworCisjZGVmaW5lCWRzX3R4c3RhdAlkc191cy50eAorI2RlZmluZQlkc19yeHN0YXQJZHNfdXMucngKKyNkZWZpbmUgZHNfc3RhdAkJZHNfdXMuc3RhdHMKKworI2RlZmluZSBBVEg5S19UWERFU0NfQ0xSRE1BU0sJCTB4MDAwMQorI2RlZmluZSBBVEg5S19UWERFU0NfTk9BQ0sJCTB4MDAwMgorI2RlZmluZSBBVEg5S19UWERFU0NfUlRTRU5BCQkweDAwMDQKKyNkZWZpbmUgQVRIOUtfVFhERVNDX0NUU0VOQQkJMHgwMDA4CisvKiBBVEg5S19UWERFU0NfSU5UUkVRIGZvcmNlcyBhIHR4IGludGVycnVwdCB0byBiZSBnZW5lcmF0ZWQgZm9yCisgKiB0aGUgZGVzY3JpcHRvciBpdHMgbWFya2VkIG9uLiAgV2UgdGFrZSBhIHR4IGludGVycnVwdCB0byByZWFwCisgKiBkZXNjcmlwdG9ycyB3aGVuIHRoZSBoL3cgaGl0cyBhbiBFT0wgY29uZGl0aW9uIG9yCisgKiB3aGVuIHRoZSBkZXNjcmlwdG9yIGlzIHNwZWNpZmljYWxseSBtYXJrZWQgdG8gZ2VuZXJhdGUKKyAqIGFuIGludGVycnVwdCB3aXRoIHRoaXMgZmxhZy4gRGVzY3JpcHRvcnMgc2hvdWxkIGJlCisgKiBtYXJrZWQgcGVyaW9kaWNhbGx5IHRvIGluc3VyZSB0aW1lbHkgcmVwbGVuaXNoaW5nIG9mIHRoZQorICogc3VwcGx5IG5lZWRlZCBmb3Igc2VuZGluZyBmcmFtZXMuIERlZmVyaW5nIGludGVycnVwdHMKKyAqIHJlZHVjZXMgc3lzdGVtIGxvYWQgYW5kIHBvdGVudGlhbGx5IGFsbG93cyBtb3JlIGNvbmN1cnJlbnQKKyAqIHdvcmsgdG8gYmUgZG9uZSBidXQgaWYgZG9uZSB0byBhZ2dyZXNzaXZlbHkgY2FuIGNhdXNlCisgKiBzZW5kZXJzIHRvIGJhY2t1cC4gV2hlbiB0aGUgaGFyZHdhcmUgcXVldWUgaXMgbGVmdCB0b28KKyAqIGxhcmdlIHJhdGUgY29udHJvbCBpbmZvcm1hdGlvbiBtYXkgYWxzbyBiZSB0b28gb3V0IG9mCisgKiBkYXRlLiBBbiBBbHRlcm5hdGl2ZSBmb3IgdGhpcyBpcyBUWCBpbnRlcnJ1cHQgbWl0aWdhdGlvbgorICogYnV0IHRoaXMgbmVlZHMgbW9yZSB0ZXN0aW5nLiAqLworI2RlZmluZSBBVEg5S19UWERFU0NfSU5UUkVRCQkweDAwMTAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX1ZFT0wJCTB4MDAyMAorI2RlZmluZSBBVEg5S19UWERFU0NfRVhUX09OTFkJCTB4MDA0MAorI2RlZmluZSBBVEg5S19UWERFU0NfRVhUX0FORF9DVEwJMHgwMDgwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19WTUYJCTB4MDEwMAorI2RlZmluZSBBVEg5S19UWERFU0NfRlJBR19JU19PTiAJMHgwMjAwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19DQUIJCTB4MDQwMAorCisjZGVmaW5lIEFUSDlLX1JYREVTQ19JTlRSRVEJCTB4MDAyMAorCitzdHJ1Y3QgYXI1NDE2X2Rlc2MgeworCXUzMiBkc19saW5rOworCXUzMiBkc19kYXRhOworCXUzMiBkc19jdGwwOworCXUzMiBkc19jdGwxOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBjdGwyOworCQkJdTMyIGN0bDM7CisJCQl1MzIgY3RsNDsKKwkJCXUzMiBjdGw1OworCQkJdTMyIGN0bDY7CisJCQl1MzIgY3RsNzsKKwkJCXUzMiBjdGw4OworCQkJdTMyIGN0bDk7CisJCQl1MzIgY3RsMTA7CisJCQl1MzIgY3RsMTE7CisJCQl1MzIgc3RhdHVzMDsKKwkJCXUzMiBzdGF0dXMxOworCQkJdTMyIHN0YXR1czI7CisJCQl1MzIgc3RhdHVzMzsKKwkJCXUzMiBzdGF0dXM0OworCQkJdTMyIHN0YXR1czU7CisJCQl1MzIgc3RhdHVzNjsKKwkJCXUzMiBzdGF0dXM3OworCQkJdTMyIHN0YXR1czg7CisJCQl1MzIgc3RhdHVzOTsKKwkJfSB0eDsKKwkJc3RydWN0IHsKKwkJCXUzMiBzdGF0dXMwOworCQkJdTMyIHN0YXR1czE7CisJCQl1MzIgc3RhdHVzMjsKKwkJCXUzMiBzdGF0dXMzOworCQkJdTMyIHN0YXR1czQ7CisJCQl1MzIgc3RhdHVzNTsKKwkJCXUzMiBzdGF0dXM2OworCQkJdTMyIHN0YXR1czc7CisJCQl1MzIgc3RhdHVzODsKKwkJfSByeDsKKwl9IHU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFSNTQxNkRFU0MoX2RzKSAgICAgICAgICgoc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisjZGVmaW5lIEFSNTQxNkRFU0NfQ09OU1QoX2RzKSAgICgoY29uc3Qgc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisKKyNkZWZpbmUgZHNfY3RsMiAgICAgdS50eC5jdGwyCisjZGVmaW5lIGRzX2N0bDMgICAgIHUudHguY3RsMworI2RlZmluZSBkc19jdGw0ICAgICB1LnR4LmN0bDQKKyNkZWZpbmUgZHNfY3RsNSAgICAgdS50eC5jdGw1CisjZGVmaW5lIGRzX2N0bDYgICAgIHUudHguY3RsNgorI2RlZmluZSBkc19jdGw3ICAgICB1LnR4LmN0bDcKKyNkZWZpbmUgZHNfY3RsOCAgICAgdS50eC5jdGw4CisjZGVmaW5lIGRzX2N0bDkgICAgIHUudHguY3RsOQorI2RlZmluZSBkc19jdGwxMCAgICB1LnR4LmN0bDEwCisjZGVmaW5lIGRzX2N0bDExICAgIHUudHguY3RsMTEKKworI2RlZmluZSBkc190eHN0YXR1czAgICAgdS50eC5zdGF0dXMwCisjZGVmaW5lIGRzX3R4c3RhdHVzMSAgICB1LnR4LnN0YXR1czEKKyNkZWZpbmUgZHNfdHhzdGF0dXMyICAgIHUudHguc3RhdHVzMgorI2RlZmluZSBkc190eHN0YXR1czMgICAgdS50eC5zdGF0dXMzCisjZGVmaW5lIGRzX3R4c3RhdHVzNCAgICB1LnR4LnN0YXR1czQKKyNkZWZpbmUgZHNfdHhzdGF0dXM1ICAgIHUudHguc3RhdHVzNQorI2RlZmluZSBkc190eHN0YXR1czYgICAgdS50eC5zdGF0dXM2CisjZGVmaW5lIGRzX3R4c3RhdHVzNyAgICB1LnR4LnN0YXR1czcKKyNkZWZpbmUgZHNfdHhzdGF0dXM4ICAgIHUudHguc3RhdHVzOAorI2RlZmluZSBkc190eHN0YXR1czkgICAgdS50eC5zdGF0dXM5CisKKyNkZWZpbmUgZHNfcnhzdGF0dXMwICAgIHUucnguc3RhdHVzMAorI2RlZmluZSBkc19yeHN0YXR1czEgICAgdS5yeC5zdGF0dXMxCisjZGVmaW5lIGRzX3J4c3RhdHVzMiAgICB1LnJ4LnN0YXR1czIKKyNkZWZpbmUgZHNfcnhzdGF0dXMzICAgIHUucnguc3RhdHVzMworI2RlZmluZSBkc19yeHN0YXR1czQgICAgdS5yeC5zdGF0dXM0CisjZGVmaW5lIGRzX3J4c3RhdHVzNSAgICB1LnJ4LnN0YXR1czUKKyNkZWZpbmUgZHNfcnhzdGF0dXM2ICAgIHUucnguc3RhdHVzNgorI2RlZmluZSBkc19yeHN0YXR1czcgICAgdS5yeC5zdGF0dXM3CisjZGVmaW5lIGRzX3J4c3RhdHVzOCAgICB1LnJ4LnN0YXR1czgKKworI2RlZmluZSBBUl9GcmFtZUxlbiAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgQVJfVmlydE1vcmVGcmFnICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDAwICAgICAgMHgwMDAwZTAwMAorI2RlZmluZSBBUl9YbWl0UG93ZXIgICAgICAgIDB4MDAzZjAwMDAKKyNkZWZpbmUgQVJfWG1pdFBvd2VyX1MgICAgICAxNgorI2RlZmluZSBBUl9SVFNFbmFibGUgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQVJfVkVPTCAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEFSX0NsckRlc3RNYXNrICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBUl9UeEN0bFJzdmQwMSAgICAgIDB4MWUwMDAwMDAKKyNkZWZpbmUgQVJfVHhJbnRyUmVxICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHhWYWxpZCAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9DVFNFbmFibGUgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9CdWZMZW4gICAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgQVJfVHhNb3JlICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHggICAgICAgICAgMHgwMDBmZTAwMAorI2RlZmluZSBBUl9EZXN0SWR4X1MgICAgICAgIDEzCisjZGVmaW5lIEFSX0ZyYW1lVHlwZSAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBBUl9GcmFtZVR5cGVfUyAgICAgIDIwCisjZGVmaW5lIEFSX05vQWNrICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBUl9JbnNlcnRUUyAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQVJfQ29ycnVwdEZDUyAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIEFSX0V4dE9ubHkgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBBUl9FeHRBbmRDdGwgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQVJfTW9yZUFnZ3IgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEFSX0lzQWdnciAgICAgICAgICAgMHg0MDAwMDAwMAorCisjZGVmaW5lIEFSX0J1cnN0RHVyICAgICAgICAgMHgwMDAwN2ZmZgorI2RlZmluZSBBUl9CdXJzdER1cl9TICAgICAgIDAKKyNkZWZpbmUgQVJfRHVyVXBkYXRlRW5hICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwICAgMHgwMDBmMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMF9TIDE2CisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxICAgMHgwMGYwMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMV9TIDIwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyICAgMHgwZjAwMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzMl9TIDI0CisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzICAgMHhmMDAwMDAwMAorI2RlZmluZSBBUl9YbWl0RGF0YVRyaWVzM19TIDI4CisKKyNkZWZpbmUgQVJfWG1pdFJhdGUwICAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1htaXRSYXRlMF9TICAgICAgMAorI2RlZmluZSBBUl9YbWl0UmF0ZTEgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfWG1pdFJhdGUxX1MgICAgICA4CisjZGVmaW5lIEFSX1htaXRSYXRlMiAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTJfUyAgICAgIDE2CisjZGVmaW5lIEFSX1htaXRSYXRlMyAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTNfUyAgICAgIDI0CisKKyNkZWZpbmUgQVJfUGFja2V0RHVyMCAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX1BhY2tldER1cjBfUyAgICAgMAorI2RlZmluZSBBUl9SVFNDVFNRdWFsMCAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMSAgICAgICAweDdmZmYwMDAwCisjZGVmaW5lIEFSX1BhY2tldER1cjFfUyAgICAgMTYKKyNkZWZpbmUgQVJfUlRTQ1RTUXVhbDEgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQVJfUGFja2V0RHVyMiAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX1BhY2tldER1cjJfUyAgICAgMAorI2RlZmluZSBBUl9SVFNDVFNRdWFsMiAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMyAgICAgICAweDdmZmYwMDAwCisjZGVmaW5lIEFSX1BhY2tldER1cjNfUyAgICAgMTYKKyNkZWZpbmUgQVJfUlRTQ1RTUXVhbDMgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQVJfQWdnckxlbiAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEFSX0FnZ3JMZW5fUyAgICAgICAgMAorI2RlZmluZSBBUl9UeEN0bFJzdmQ2MCAgICAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgQVJfUGFkRGVsaW0gICAgICAgICAweDAzZmMwMDAwCisjZGVmaW5lIEFSX1BhZERlbGltX1MgICAgICAgMTgKKyNkZWZpbmUgQVJfRW5jclR5cGUgICAgICAgICAweDBjMDAwMDAwCisjZGVmaW5lIEFSX0VuY3JUeXBlX1MgICAgICAgMjYKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkNjEgICAgICAweGYwMDAwMDAwCisKKyNkZWZpbmUgQVJfMjA0MF8wICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX0dJMCAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9DaGFpblNlbDAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgQVJfQ2hhaW5TZWwwX1MgICAgICAyCisjZGVmaW5lIEFSXzIwNDBfMSAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBBUl9HSTEgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwxICAgICAgICAweDAwMDAwMzgwCisjZGVmaW5lIEFSX0NoYWluU2VsMV9TICAgICAgNworI2RlZmluZSBBUl8yMDQwXzIgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQVJfR0kyICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIEFSX0NoYWluU2VsMiAgICAgICAgMHgwMDAwNzAwMAorI2RlZmluZSBBUl9DaGFpblNlbDJfUyAgICAgIDEyCisjZGVmaW5lIEFSXzIwNDBfMyAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9HSTMgICAgICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwzICAgICAgICAweDAwMGUwMDAwCisjZGVmaW5lIEFSX0NoYWluU2VsM19TICAgICAgMTcKKyNkZWZpbmUgQVJfUlRTQ1RTUmF0ZSAgICAgICAweDBmZjAwMDAwCisjZGVmaW5lIEFSX1JUU0NUU1JhdGVfUyAgICAgMjAKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkNzAgICAgICAweGYwMDAwMDAwCisKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1R4UlNTSUFudDAwX1MgICAgMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDFfUyAgICA4CisjZGVmaW5lIEFSX1R4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMl9TICAgIDE2CisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDAwICAgMHgzZjAwMDAwMAorI2RlZmluZSBBUl9UeEJhU3RhdHVzICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDEgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgQVJfRnJtWG1pdE9LICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9FeGNlc3NpdmVSZXRyaWVzICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX0ZJRk9VbmRlcnJ1biAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfRmlsdGVyZWQgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9SVFNGYWlsQ250ICAgICAgICAgICAweDAwMDAwMGYwCisjZGVmaW5lIEFSX1JUU0ZhaWxDbnRfUyAgICAgICAgIDQKKyNkZWZpbmUgQVJfRGF0YUZhaWxDbnQgICAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBBUl9EYXRhRmFpbENudF9TICAgICAgICA4CisjZGVmaW5lIEFSX1ZpcnRSZXRyeUNudCAgICAgICAgIDB4MDAwMGYwMDAKKyNkZWZpbmUgQVJfVmlydFJldHJ5Q250X1MgICAgICAgMTIKKyNkZWZpbmUgQVJfVHhEZWxpbVVuZGVycnVuICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9UeERhdGFVbmRlcnJ1biAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFSX0Rlc2NDZmdFcnIgICAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQVJfVHhUaW1lckV4cGlyZWQgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQxMCAgICAgICAweGZmZjAwMDAwCisKKyNkZWZpbmUgQVJfU2VuZFRpbWVzdGFtcCAgICBkc190eHN0YXR1czIKKyNkZWZpbmUgQVJfQmFCaXRtYXBMb3cgICAgICBkc190eHN0YXR1czMKKyNkZWZpbmUgQVJfQmFCaXRtYXBIaWdoICAgICBkc190eHN0YXR1czQKKworI2RlZmluZSBBUl9UeFJTU0lBbnQxMCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTBfUyAgICAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDExICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQxMV9TICAgIDgKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTIgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDEyX1MgICAgMTYKKyNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWQgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUNvbWJpbmVkX1MgMjQKKworI2RlZmluZSBBUl9UeEVWTTAgICAgICAgICAgIGRzX3R4c3RhdHVzNQorI2RlZmluZSBBUl9UeEVWTTEgICAgICAgICAgIGRzX3R4c3RhdHVzNgorI2RlZmluZSBBUl9UeEVWTTIgICAgICAgICAgIGRzX3R4c3RhdHVzNworCisjZGVmaW5lIEFSX1R4RG9uZSAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9TZXFOdW0gICAgICAgICAgIDB4MDAwMDFmZmUKKyNkZWZpbmUgQVJfU2VxTnVtX1MgICAgICAgICAxCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgwICAgMHgwMDAxZTAwMAorI2RlZmluZSBBUl9UeE9wRXhjZWVkZWQgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODEgICAweDAwMWMwMDAwCisjZGVmaW5lIEFSX0ZpbmFsVHhJZHggICAgICAgMHgwMDYwMDAwMAorI2RlZmluZSBBUl9GaW5hbFR4SWR4X1MgICAgIDIxCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDgyICAgMHgwMTgwMDAwMAorI2RlZmluZSBBUl9Qb3dlck1nbXQgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODMgICAweGZjMDAwMDAwCisKKyNkZWZpbmUgQVJfUnhDVExSc3ZkMDAgIDB4ZmZmZmZmZmYKKworI2RlZmluZSBBUl9CdWZMZW4gICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9SeEN0bFJzdmQwMCAgMHgwMDAwMTAwMAorI2RlZmluZSBBUl9SeEludHJSZXEgICAgMHgwMDAwMjAwMAorI2RlZmluZSBBUl9SeEN0bFJzdmQwMSAgMHhmZmZmYzAwMAorCisjZGVmaW5lIEFSX1J4UlNTSUFudDAwICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9SeFJTU0lBbnQwMF9TICAgIDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDEgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDAxX1MgICAgOAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMiAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDJfUyAgICAxNgorI2RlZmluZSBBUl9SeFJhdGUgICAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfUnhSYXRlX1MgICAgICAgICAyNAorI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQwMCAgIDB4ZmYwMDAwMDAKKworI2RlZmluZSBBUl9EYXRhTGVuICAgICAgICAgIDB4MDAwMDBmZmYKKyNkZWZpbmUgQVJfUnhNb3JlICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX051bURlbGltICAgICAgICAgMHgwMDNmYzAwMAorI2RlZmluZSBBUl9OdW1EZWxpbV9TICAgICAgIDE0CisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDEwICAgMHhmZjgwMDAwMAorCisjZGVmaW5lIEFSX1JjdlRpbWVzdGFtcCAgICAgZHNfcnhzdGF0dXMyCisKKyNkZWZpbmUgQVJfR0kgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSXzIwNDAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9QYXJhbGxlbDQwICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfUGFyYWxsZWw0MF9TICAgICAyCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDMwICAgMHgwMDAwMDBmOAorI2RlZmluZSBBUl9SeEFudGVubmEJICAgIDB4ZmZmZmZmMDAKKyNkZWZpbmUgQVJfUnhBbnRlbm5hX1MJICAgIDgKKworI2RlZmluZSBBUl9SeFJTU0lBbnQxMCAgICAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTBfUyAgICAgICAgICAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDExICAgICAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9SeFJTU0lBbnQxMV9TICAgICAgICAgIDgKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTIgICAgICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDEyX1MgICAgICAgICAgMTYKKyNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWQgICAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1J4UlNTSUNvbWJpbmVkX1MgICAgICAgMjQKKworI2RlZmluZSBBUl9SeEVWTTAgICAgICAgICAgIGRzX3J4c3RhdHVzNAorI2RlZmluZSBBUl9SeEVWTTEgICAgICAgICAgIGRzX3J4c3RhdHVzNQorI2RlZmluZSBBUl9SeEVWTTIgICAgICAgICAgIGRzX3J4c3RhdHVzNgorCisjZGVmaW5lIEFSX1J4RG9uZSAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9SeEZyYW1lT0sgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfQ1JDRXJyICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFSX0RlY3J5cHRDUkNFcnIgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9QSFlFcnIgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVJfTWljaGFlbEVyciAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFSX1ByZURlbGltQ1JDRXJyICAgMHgwMDAwMDA0MAorI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQ3MCAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQVJfUnhLZXlJZHhWYWxpZCAgICAweDAwMDAwMTAwCisjZGVmaW5lIEFSX0tleUlkeCAgICAgICAgICAgMHgwMDAwZmUwMAorI2RlZmluZSBBUl9LZXlJZHhfUyAgICAgICAgIDkKKyNkZWZpbmUgQVJfUEhZRXJyQ29kZSAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1BIWUVyckNvZGVfUyAgICAgOAorI2RlZmluZSBBUl9SeE1vcmVBZ2dyICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQVJfUnhBZ2dyICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFSX1Bvc3REZWxpbUNSQ0VyciAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9SeFN0YXR1c1JzdmQ3MSAgIDB4M2ZmODAwMDAKKyNkZWZpbmUgQVJfRGVjcnlwdEJ1c3lFcnIgICAweDQwMDAwMDAwCisjZGVmaW5lIEFSX0tleU1pc3MgICAgICAgICAgMHg4MDAwMDAwMAorCitlbnVtIGF0aDlrX3R4X3F1ZXVlIHsKKwlBVEg5S19UWF9RVUVVRV9JTkFDVElWRSA9IDAsCisJQVRIOUtfVFhfUVVFVUVfREFUQSwKKwlBVEg5S19UWF9RVUVVRV9CRUFDT04sCisJQVRIOUtfVFhfUVVFVUVfQ0FCLAorCUFUSDlLX1RYX1FVRVVFX1VBUFNELAorCUFUSDlLX1RYX1FVRVVFX1BTUE9MTAorfTsKKworI2RlZmluZQlBVEg5S19OVU1fVFhfUVVFVUVTIDEwCisKK2VudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB7CisJQVRIOUtfV01FX0FDX0JLID0gMCwKKwlBVEg5S19XTUVfQUNfQkUsCisJQVRIOUtfV01FX0FDX1ZJLAorCUFUSDlLX1dNRV9BQ19WTywKKwlBVEg5S19XTUVfVVBTRAorfTsKKworZW51bSBhdGg5a190eF9xdWV1ZV9mbGFncyB7CisJVFhRX0ZMQUdfVFhPS0lOVF9FTkFCTEUgPSAweDAwMDEsCisJVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFID0gMHgwMDAxLAorCVRYUV9GTEFHX1RYREVTQ0lOVF9FTkFCTEUgPSAweDAwMDIsCisJVFhRX0ZMQUdfVFhFT0xJTlRfRU5BQkxFID0gMHgwMDA0LAorCVRYUV9GTEFHX1RYVVJOSU5UX0VOQUJMRSA9IDB4MDAwOCwKKwlUWFFfRkxBR19CQUNLT0ZGX0RJU0FCTEUgPSAweDAwMTAsCisJVFhRX0ZMQUdfQ09NUFJFU1NJT05fRU5BQkxFID0gMHgwMDIwLAorCVRYUV9GTEFHX1JEWVRJTUVfRVhQX1BPTElDWV9FTkFCTEUgPSAweDAwNDAsCisJVFhRX0ZMQUdfRlJBR19CVVJTVF9CQUNLT0ZGX0VOQUJMRSA9IDB4MDA4MCwKK307CisKKyNkZWZpbmUgQVRIOUtfVFhRX1VTRURFRkFVTFQgKCh1MzIpIC0xKQorI2RlZmluZSBBVEg5S19UWFFfVVNFX0xPQ0tPVVRfQktPRkZfRElTIDB4MDAwMDAwMDEKKworI2RlZmluZSBBVEg5S19ERUNPTVBfTUFTS19TSVpFICAgICAxMjgKKyNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCAgNTAKKyNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCAgOTYKKworZW51bSBhdGg5a19wa3RfdHlwZSB7CisJQVRIOUtfUEtUX1RZUEVfTk9STUFMID0gMCwKKwlBVEg5S19QS1RfVFlQRV9BVElNLAorCUFUSDlLX1BLVF9UWVBFX1BTUE9MTCwKKwlBVEg5S19QS1RfVFlQRV9CRUFDT04sCisJQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUCwKKwlBVEg5S19QS1RfVFlQRV9DSElSUCwKKwlBVEg5S19QS1RfVFlQRV9HUlBfUE9MTCwKK307CisKK3N0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHsKKwl1MzIgdHFpX3ZlcjsKKwllbnVtIGF0aDlrX3R4X3F1ZXVlIHRxaV90eXBlOworCWVudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB0cWlfc3VidHlwZTsKKwllbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHRxaV9xZmxhZ3M7CisJdTMyIHRxaV9wcmlvcml0eTsKKwl1MzIgdHFpX2FpZnM7CisJdTMyIHRxaV9jd21pbjsKKwl1MzIgdHFpX2N3bWF4OworCXUxNiB0cWlfc2hyZXRyeTsKKwl1MTYgdHFpX2xncmV0cnk7CisJdTMyIHRxaV9jYnJQZXJpb2Q7CisJdTMyIHRxaV9jYnJPdmVyZmxvd0xpbWl0OworCXUzMiB0cWlfYnVyc3RUaW1lOworCXUzMiB0cWlfcmVhZHlUaW1lOworCXUzMiB0cWlfcGh5c0NvbXBCdWY7CisJdTMyIHRxaV9pbnRGbGFnczsKK307CisKK2VudW0gYXRoOWtfcnhfZmlsdGVyIHsKKwlBVEg5S19SWF9GSUxURVJfVUNBU1QgPSAweDAwMDAwMDAxLAorCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVCA9IDB4MDAwMDAwMDIsCisJQVRIOUtfUlhfRklMVEVSX0JDQVNUID0gMHgwMDAwMDAwNCwKKwlBVEg5S19SWF9GSUxURVJfQ09OVFJPTCA9IDB4MDAwMDAwMDgsCisJQVRIOUtfUlhfRklMVEVSX0JFQUNPTiA9IDB4MDAwMDAwMTAsCisJQVRIOUtfUlhfRklMVEVSX1BST00gPSAweDAwMDAwMDIwLAorCUFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUSA9IDB4MDAwMDAwODAsCisJQVRIOUtfUlhfRklMVEVSX1BIWUVSUiA9IDB4MDAwMDAxMDAsCisJQVRIOUtfUlhfRklMVEVSX01ZQkVBQ09OID0gMHgwMDAwMDIwMCwKKwlBVEg5S19SWF9GSUxURVJfUFNQT0xMID0gMHgwMDAwNDAwMCwKKwlBVEg5S19SWF9GSUxURVJfUEhZUkFEQVIgPSAweDAwMDAyMDAwLAorCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEwgPSAweDAwMDA4MDAwLAorfTsKKworI2RlZmluZSBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgIDB4MDAwMQorI2RlZmluZSBBVEg5S19SQVRFU0VSSUVTXzIwNDAgICAgIDB4MDAwMgorI2RlZmluZSBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSAgIDB4MDAwNAorCitzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHsKKwl1MzIgVHJpZXM7CisJdTMyIFJhdGU7CisJdTMyIFBrdER1cmF0aW9uOworCXUzMiBDaFNlbDsKKwl1MzIgUmF0ZUZsYWdzOworfTsKKworc3RydWN0IGF0aDlrX2tleXZhbCB7CisJdTgga3ZfdHlwZTsKKwl1OCBrdl9wYWQ7CisJdTE2IGt2X2xlbjsKKwl1OCBrdl92YWxbMTZdOyAvKiBUSyAqLworCXU4IGt2X21pY1s4XTsgLyogTWljaGFlbCBNSUMga2V5ICovCisJdTgga3ZfdHhtaWNbOF07IC8qIE1pY2hhZWwgTUlDIFRYIGtleSAodXNlZCBvbmx5IGlmIHRoZSBoYXJkd2FyZQorCQkJICogc3VwcG9ydHMgYm90aCBNSUMga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnk7CisJCQkgKiBpbiB0aGF0IGNhc2UsIGt2X21pYyBpcyB0aGUgUlgga2V5KSAqLworfTsKKworZW51bSBhdGg5a19rZXlfdHlwZSB7CisJQVRIOUtfS0VZX1RZUEVfQ0xFQVIsCisJQVRIOUtfS0VZX1RZUEVfV0VQLAorCUFUSDlLX0tFWV9UWVBFX0FFUywKKwlBVEg5S19LRVlfVFlQRV9US0lQLAorfTsKKworZW51bSBhdGg5a19jaXBoZXIgeworCUFUSDlLX0NJUEhFUl9XRVAgPSAwLAorCUFUSDlLX0NJUEhFUl9BRVNfT0NCID0gMSwKKwlBVEg5S19DSVBIRVJfQUVTX0NDTSA9IDIsCisJQVRIOUtfQ0lQSEVSX0NLSVAgPSAzLAorCUFUSDlLX0NJUEhFUl9US0lQID0gNCwKKwlBVEg5S19DSVBIRVJfQ0xSID0gNSwKKwlBVEg5S19DSVBIRVJfTUlDID0gMTI3Cit9OworCitlbnVtIGF0aDlrX2h0X21hY21vZGUgeworCUFUSDlLX0hUX01BQ01PREVfMjAgPSAwLAorCUFUSDlLX0hUX01BQ01PREVfMjA0MCA9IDEsCit9OworCitlbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIHsKKwlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCA9IDAsCisJQVRIOUtfSFRfRVhUUFJPVFNQQUNJTkdfMjUgPSAxLAorfTsKKworc3RydWN0IGF0aF9odzsKK3N0cnVjdCBhdGg5a19jaGFubmVsOworc3RydWN0IGF0aF9yYXRlX3RhYmxlOworCit1MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK2Jvb2wgYXRoOWtfaHdfcHV0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxLCB1MzIgdHhkcCk7Citib29sIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK3UzMiBhdGg5a19od19udW10eHBlbmRpbmcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK2Jvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCk7Citib29sIGF0aDlrX2h3X3N0b3B0eGRtYShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19maWxsdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJIHUzMiBzZWdMZW4sIGJvb2wgZmlyc3RTZWcsCisJCQkgYm9vbCBsYXN0U2VnLCBjb25zdCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzMCk7Cit2b2lkIGF0aDlrX2h3X2NsZWFydHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK2ludCBhdGg5a19od190eHByb2NkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCSAgICB1MzIgcGt0TGVuLCBlbnVtIGF0aDlrX3BrdF90eXBlIHR5cGUsIHUzMiB0eFBvd2VyLAorCQkJICAgIHUzMiBrZXlJeCwgZW51bSBhdGg5a19rZXlfdHlwZSBrZXlUeXBlLCB1MzIgZmxhZ3MpOwordm9pZCBhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgc3RydWN0IGF0aF9kZXNjICpsYXN0ZHMsCisJCQkJICB1MzIgZHVyVXBkYXRlRW4sIHUzMiBydHNjdHNSYXRlLAorCQkJCSAgdTMyIHJ0c2N0c0R1cmF0aW9uLAorCQkJCSAgc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbXSwKKwkJCQkgIHUzMiBuc2VyaWVzLCB1MzIgZmxhZ3MpOwordm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCQl1MzIgYWdnckxlbik7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCQkgdTMyIG51bURlbGltcyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwordm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgIHUzMiBidXJzdER1cmF0aW9uKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCQkgICAgIHUzMiB2bWYpOwordm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnR4cXMpOworYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOworYm9vbCBhdGg5a19od19nZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKKwkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOworaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a190eF9xdWV1ZSB0eXBlLAorCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOworYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19yZXNldHR4cXVldWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKK2ludCBhdGg5a19od19yeHByb2NkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJdTMyIHBhLCBzdHJ1Y3QgYXRoX2Rlc2MgKm5kcywgdTY0IHRzZik7Citib29sIGF0aDlrX2h3X3NldHVwcnhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJICB1MzIgc2l6ZSwgdTMyIGZsYWdzKTsKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpOwordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApOwordm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0cGN1cmVjZWl2ZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0b3BwY3VyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogTUFDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYwppbmRleCAzYzA0MDQ0Li44ZGI3NWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCkBAIC0xNSw5ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEFUSF9QQ0lfVkVSU0lPTiAiMC4xIgogCkBAIC0yOCw4NCArMjYsMTI5IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLwotCXsgMCB9CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uIik7CisKKy8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLworCisjZGVmaW5lIENIQU4yRyhfZnJlcSwgX2lkeCkgIHsgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworI2RlZmluZSBDSEFONUcoX2ZyZXEsIF9pZHgpIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworLyogU29tZSAyIEdIeiByYWRpb3MgYXJlIGFjdHVhbGx5IHR1bmFibGUgb24gMjMxMi0yNzMyCisgKiBvbiA1IE1IeiBzdGVwcywgd2Ugc3VwcG9ydCB0aGUgY2hhbm5lbHMgd2hpY2ggd2Uga25vdworICogd2UgaGF2ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBhbGwgY2FyZHMgdGhvdWdoIHRvIG1ha2UKKyAqIHRoaXMgc3RhdGljICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGF0aDlrXzJnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjJHKDI0MTIsIDApLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNywgMSksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyLCAyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcsIDMpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiwgNCksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3LCA1KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIsIDYpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NywgNyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyLCA4KSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcsIDkpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIsIDEwKSwgLyogQ2hhbm5lbCAxMSAqLworCUNIQU4yRygyNDY3LCAxMSksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiwgMTIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQsIDEzKSwgLyogQ2hhbm5lbCAxNCAqLwogfTsKIAotc3RhdGljIHZvaWQgYXRoX2RldGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisvKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKKyAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93CisgKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQorICogdGhpcyBzdGF0aWMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KKwlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCisJQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCisJQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KKwlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLworCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KKwlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCisJQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCisJQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCisJQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCisJQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLworCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLworfTsKIAotLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLwotCi1zdGF0aWMgdm9pZCBidXNfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQorc3RhdGljIHZvaWQgYXRoX2NhY2hlX2NvbmZfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7Ci0JdTggdTh0bXA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShzYy0+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+c2NfY3VyYWlkID0gMDsKKwkJc2MtPmN1cmFpZCA9IDA7CiAJfQogfQogCkBAIC05NDcsNiArOTMzLDMyIEBACiAvKgkgTEVEIGZ1bmN0aW9ucwkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgYXRoX2xlZF9ibGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgYXRoX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX0FTU09DSUFURUQpKQorCQlyZXR1cm47CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCSAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPyAxIDogMCk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+YXRoX2xlZF9ibGlua193b3JrLAorCQkJICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPworCQkJICAgbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29mZl9kdXJhdGlvbikgOgorCQkJICAgbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29uX2R1cmF0aW9uKSk7CisKKwlzYy0+bGVkX29uX2R1cmF0aW9uID0KKwkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSk7CisJc2MtPmxlZF9vZmZfZHVyYXRpb24gPQorCQkJbWF4KChBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vZmZfY250KSwgMTApOworCXNjLT5sZWRfb25fY250ID0gc2MtPmxlZF9vZmZfY250ID0gMDsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKQorCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwllbHNlCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Cit9CisKIHN0YXRpYyB2b2lkIGF0aF9sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CkBAIC05NTYsMTYgKzk2OCwyNyBAQAogCXN3aXRjaCAoYnJpZ2h0bmVzcykgewogCWNhc2UgTEVEX09GRjoKIAkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQorCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCi0JCQkJKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgPyAxIDoKLQkJCQkhIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfQVNTT0NJQVRFRCkpOworCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb2ZmX2NudCsrOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTEVEX0ZVTEw6Ci0JCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpCisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJCSAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb25fY250Kys7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMDAxLDYgKzEwMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5hc3NvY19sZWQpOwogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKQEAgLTEwMjAsOSArMTA0NCwxMSBAQAogCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KIAlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOworCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cmFkaW9fbGVkLm5hbWUsIHNpemVvZihzYy0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cmFkaW9fbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKIAlpZiAocmV0KQpAQCAtMTAzMCw3ICsxMDU2LDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKHNjLT5odyk7CiAJc25wcmludGYoc2MtPmFzc29jX2xlZC5uYW1lLCBzaXplb2Yoc2MtPmFzc29jX2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKIAlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPmFzc29jX2xlZCwgdHJpZ2dlcik7CiAJc2MtPmFzc29jX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfQVNTT0M7CiAJaWYgKHJldCkKQEAgLTEwMzgsNyArMTA2NCw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShzYy0+aHcpOwogCXNucHJpbnRmKHNjLT50eF9sZWQubmFtZSwgc2l6ZW9mKHNjLT50eF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnR4Iiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CiAJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIHRyaWdnZXIpOwogCXNjLT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOwogCWlmIChyZXQpCkBAIC0xMDQ2LDcgKzEwNzIsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cnhfbGVkLm5hbWUsIHNpemVvZihzYy0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKIAlpZiAocmV0KQpAQCAtMTA1OCwzMiArMTA4NCwyMiBAQAogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyoJUmZraWxsCSAgICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKKwlpbnQgcjsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLAotCQkJICAgIGZhbHNlLCAmc3RhdHVzKSkgeworCisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCisJaWYgKHIpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIKLQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQlhdGg5a19od19taHoyaWVlZShhaCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIsCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKQEAgLTEwOTUsMTAgKzExMTEsMTAgQEAKIAl9CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIEFUSF9JRl9JRF9BTlkpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCS8qIFJlLUVuYWJsZSAgaW50ZXJydXB0cyAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCiAJLyogRW5hYmxlIExFRCAqLwogCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIEFUSF9MRURfUElOLApAQCAtMTEwNiwxNCArMTEyMiwxNiBAQAogCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBBVEhfTEVEX1BJTiwgMCk7CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHNjLT5ody0+Y29uZi5jaGFubmVsOworCWludCByOwogCi0KKwlhdGg5a19wc193YWtldXAoc2MpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KQEAgLTExMjMsMzggKzExNDEsMzcgQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CiAKLQlhdGhfZHJhaW50eHEoc2MsIGZhbHNlKTsJLyogY2xlYXIgcGVuZGluZyB0eCBmcmFtZXMgKi8KKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCWF0aF9zdG9wcmVjdihzYyk7CQkvKiB0dXJuIG9mZiBmcmFtZSByZWN2ICovCiAJYXRoX2ZsdXNocmVjdihzYyk7CQkvKiBmbHVzaCByZWN2IHF1ZXVlICovCiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX3J4X2NoYWlubWFzaywKLQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsCi0JCQkgICAgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCWlmIChyKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgJXUgKCV1TWh6KSAiCi0JCQkiZmxhZ3MgMHgleCBoYWwgc3RhdHVzICV1XG4iLAotCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyksCi0JCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MsIHN0YXR1cyk7CisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKIAlhdGg5a19od19waHlfZGlzYWJsZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPmFoX3Jma2lsbF9wb2xhcml0eTsKKwlyZXR1cm4gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIGFoLT5yZmtpbGxfZ3BpbykgPT0KKwkJCQkgIGFoLT5yZmtpbGxfcG9sYXJpdHk7CiB9CiAKIC8qIGgvdyByZmtpbGwgcG9sbCBmdW5jdGlvbiAqLwpAQCAtMTIzOCw3ICsxMjU1LDcgQEAKIAl9CiAKIAlzbnByaW50ZihzYy0+cmZfa2lsbC5yZmtpbGxfbmFtZSwgc2l6ZW9mKHNjLT5yZl9raWxsLnJma2lsbF9uYW1lKSwKLQkJImF0aDlrLSVzOnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXNjLT5yZl9raWxsLnJma2lsbC0+bmFtZSA9IHNjLT5yZl9raWxsLnJma2lsbF9uYW1lOwogCXNjLT5yZl9raWxsLnJma2lsbC0+ZGF0YSA9IHNjOwogCXNjLT5yZl9raWxsLnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gYXRoX3N3X3RvZ2dsZV9yYWRpbzsKQEAgLTEyNTEsNyArMTI2OCw3IEBACiAvKiBEZWluaXRpYWxpemUgcmZraWxsICovCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X3Jma2lsbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9SRktJTExfUkVHSVNURVJFRCkgewpAQCAtMTI2Myw3ICsxMjgwLDcgQEAKIAogc3RhdGljIGludCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JaWYgKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKIAkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAogCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7CiAKQEAgLTEyNzQsMTMgKzEyOTEsNyBAQAogCQkJcmZraWxsX2ZyZWUoc2MtPnJmX2tpbGwucmZraWxsKTsKIAogCQkJLyogRGVpbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KLQkJCWF0aF9kZXRhY2goc2MpOwotCQkJaWYgKHNjLT5wZGV2LT5pcnEpCi0JCQkJZnJlZV9pcnEoc2MtPnBkZXYtPmlycSwgc2MpOwotCQkJcGNpX2lvdW5tYXAoc2MtPnBkZXYsIHNjLT5tZW0pOwotCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHNjLT5wZGV2LCAwKTsKLQkJCXBjaV9kaXNhYmxlX2RldmljZShzYy0+cGRldik7Ci0JCQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCQkJYXRoX2NsZWFudXAoc2MpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSB7CiAJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQ7CkBAIC0xMjkxLDE4ICsxMzAyLDM5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JGS0lMTCAqLwogCi1zdGF0aWMgdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlhdGhfZGV0YWNoKHNjKTsKKwlmcmVlX2lycShzYy0+aXJxLCBzYyk7CisJYXRoX2J1c19jbGVhbnVwKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworfQorCit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJaW50IGkgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEFUSCBod1xuIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCiAJYXRoX2RlaW5pdF9yZmtpbGwoc2MpOwogI2VuZGlmCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKKwljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKKwl9CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGhfdHhfY2xlYW51cChzYyk7CkBAIC0xMzIwLDExICsxMzUyLDEyIEBACiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGhfaW5pdCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IE5VTEw7CisJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwogCWludCBzdGF0dXM7CiAJaW50IGVycm9yID0gMCwgaTsKIAlpbnQgY3N6ID0gMDsKQEAgLTEzMzUsNTUgKzEzNjgsNTIgQEAKIAlpZiAoYXRoOWtfaW5pdF9kZWJ1ZyhzYykgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmNvbl90YXNrbGV0LCBhdGg5a19iZWFjb25fdGFza2xldCwKKwl0YXNrbGV0X2luaXQoJnNjLT5iY29uX3Rhc2tsZXQsIGF0aF9iZWFjb25fdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylzYyk7CiAKIAkvKgogCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKIAkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCiAJICovCi0JYnVzX3JlYWRfY2FjaGVzaXplKHNjLCAmY3N6KTsKKwlhdGhfcmVhZF9jYWNoZXNpemUoc2MsICZjc3opOwogCS8qIFhYWCBhc3NlcnQgY3N6IGlzIG5vbi16ZXJvICovCi0Jc2MtPnNjX2NhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCBzYy0+bWVtLCAmc3RhdHVzKTsKKwlhaCA9IGF0aDlrX2h3X2F0dGFjaChkZXZpZCwgc2MsICZzdGF0dXMpOwogCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiVW5hYmxlIHRvIGF0dGFjaCBoYXJkd2FyZTsgSEFMIHN0YXR1cyAldVxuIiwgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gYXR0YWNoIGhhcmR3YXJlOyBIQUwgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQllcnJvciA9IC1FTlhJTzsKIAkJZ290byBiYWQ7CiAJfQogCXNjLT5zY19haCA9IGFoOwogCiAJLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQlzYy0+c2Nfa2V5bWF4ID0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoc2MtPnNjX2tleW1heCA+IEFUSF9LRVlNQVgpIHsKKwlzYy0+a2V5bWF4ID0gYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoc2MtPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgc2MtPnNjX2tleW1heCk7Ci0JCXNjLT5zY19rZXltYXggPSBBVEhfS0VZTUFYOworCQkJQVRIX0tFWU1BWCwgc2MtPmtleW1heCk7CisJCXNjLT5rZXltYXggPSBBVEhfS0VZTUFYOwogCX0KIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAogCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzYy0+c2Nfa2V5bWF4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNjLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQoYWgsICh1MTYpIGkpOwogCi0JLyogQ29sbGVjdCB0aGUgY2hhbm5lbCBsaXN0IHVzaW5nIHRoZSBkZWZhdWx0IGNvdW50cnkgY29kZSAqLwotCi0JZXJyb3IgPSBhdGhfc2V0dXBfY2hhbm5lbHMoc2MpOwotCWlmIChlcnJvcikKKwlpZiAoYXRoOWtfcmVnZF9pbml0KHNjLT5zY19haCkpCiAJCWdvdG8gYmFkOwogCiAJLyogZGVmYXVsdCB0byBNT05JVE9SIG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0KKwlzYy0+c2NfYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAKIAkvKiBTZXR1cCByYXRlIHRhYmxlcyAqLwogCkBAIC0xNDEyLDcgKzE0NDIsNyBAQAogCQlnb3RvIGJhZDI7CiAJfQogCi0Jc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIX0NBQlFfUkVBRFlfVElNRTsKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOwogCWF0aF9jYWJxX3VwZGF0ZShzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKQEAgLTE0NDksOCArMTQ3OSw4IEBACiAJLyogSW5pdGlhbGl6ZXMgdGhlIG5vaXNlIGZsb29yIHRvIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLgogCSAqIExhdGVyIG9uIHRoaXMgd2lsbCBiZSB1cGRhdGVkIGR1cmluZyBBTkkgcHJvY2Vzc2luZy4gKi8KIAotCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPSBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUjsKLQlzZXR1cF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKwlzYy0+YW5pLm5vaXNlX2Zsb29yID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CisJc2V0dXBfdGltZXIoJnNjLT5hbmkudGltZXIsIGF0aF9hbmlfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX0NJUEhFUiwKIAkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkpIHsKQEAgLTE0NzYsNjAgKzE1MDYsNjIgQEAKIAkJCQkgICAgICBBVEg5S19DSVBIRVJfTUlDLCBOVUxMKQogCSAgICAmJiBhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKIAkJCQkgICAgICAwLCBOVUxMKSkKLQkJc2MtPnNjX3NwbGl0bWljID0gMTsKKwkJc2MtPnNwbGl0bWljID0gMTsKIAogCS8qIHR1cm4gb24gbWNhc3Qga2V5IHNlYXJjaCBpZiBwb3NzaWJsZSAqLwogCWlmICghYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQogCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMSwKIAkJCQkJICAgICAxLCBOVUxMKTsKIAotCXNjLT5zY19jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKLQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXRfb3ZlcnJpZGUgPSAwOworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKIAogCS8qIDExbiBDYXBhYmlsaXRpZXMgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7CiAJfQogCi0Jc2MtPnNjX3R4X2NoYWlubWFzayA9IGFoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQlzYy0+c2NfcnhfY2hhaW5tYXNrID0gYWgtPmFoX2NhcHMucnhfY2hhaW5tYXNrOworCXNjLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7CisJc2MtPnJ4X2NoYWlubWFzayA9IGFoLT5jYXBzLnJ4X2NoYWlubWFzazsKIAogCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9ESVZFUlNJVFksIDEsIHRydWUsIE5VTEwpOwogCXNjLT5yeC5kZWZhbnQgPSBhdGg5a19od19nZXRkZWZhbnRlbm5hKGFoKTsKIAotCWF0aDlrX2h3X2dldG1hYyhhaCwgc2MtPnNjX215YWRkcik7Ci0JaWYgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKSB7Ci0JCWF0aDlrX2h3X2dldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCUFUSF9TRVRfVkFQX0JTU0lEX01BU0soc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JfQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJbWVtY3B5KHNjLT5ic3NpZG1hc2ssIGF0aF9iY2FzdF9tYWMsIEVUSF9BTEVOKTsKIAogCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBBVEg5S19TTE9UX1RJTUVfOTsJLyogZGVmYXVsdCB0byBzaG9ydCBzbG90IHRpbWUgKi8KIAogCS8qIGluaXRpYWxpemUgYmVhY29uIHNsb3RzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykKLQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IEFUSF9JRl9JRF9BTlk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9CiAKIAkvKiBzYXZlIE1JU0MgY29uZmlndXJhdGlvbnMgKi8KLQlzYy0+c2NfY29uZmlnLnN3QmVhY29uUHJvY2VzcyA9IDE7CisJc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MgPSAxOwogCiAJLyogc2V0dXAgY2hhbm5lbHMgYW5kIHJhdGVzICovCiAKLQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0KLQkJc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKIAlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0KIAkJc2MtPnJhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KKwkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CiAKLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHNjLT5zY19haC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5jaGFubmVscyA9Ci0JCQlzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKIAkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9CiAJCQlzYy0+cmF0ZXNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKKwkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCiAJcmV0dXJuIDA7CiBiYWQyOgogCS8qIGNsZWFudXAgdHggcXVldWVzICovCkBAIC0xNTQ0LDkgKzE1NzYsNDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQorCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKworCWh3LT53aXBoeS0+cmVnX25vdGlmaWVyID0gYXRoOWtfcmVnX25vdGlmaWVyOworCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmlmKTsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7CisKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworfQorCitpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCWludCBlcnJvciA9IDAsIGk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkF0dGFjaCBBVEggaHdcbiIpOwpAQCAtMTU1NywzNyArMTYyOCwxNiBAQAogCiAJLyogZ2V0IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgYW5kIHNldCBpbiBtYWM4MDIxMSAqLwogCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNjLT5zY19teWFkZHIpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPnF1ZXVlcyA9IDQ7Ci0JaHctPm1heF9yYXRlcyA9IDQ7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOwotCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmFwKTsKLQotCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7Ci0KLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKLQkJc2V0dXBfaHRfY2FwKCZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcCgmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5odF9jYXApOworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKIAl9CiAKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0JJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCiAJLyogaW5pdGlhbGl6ZSB0eC9yeCBlbmdpbmUgKi8KIAllcnJvciA9IGF0aF90eF9pbml0KHNjLCBBVEhfVFhCVUYpOwogCWlmIChlcnJvciAhPSAwKQpAQCAtMTU5OSw3ICsxNjQ5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKIAkvKiBJbml0aWFsemUgaC93IFJma2lsbCAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCiAJCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgYXRoX3Jma2lsbF9wb2xsKTsKIAogCS8qIEluaXRpYWxpemUgcy93IHJma2lsbCAqLwpAQCAtMTYwOCwxMSArMTY1OCwzOSBAQAogCQlnb3RvIGVycm9yX2F0dGFjaDsKICNlbmRpZgogCisJaWYgKGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgeworCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbikgZ2V0cworCQkgKiBzYXZlZCBvbiB0aGUgd2lwaHkgb3JpZ18qIHBhcmFtZXRlcnMgKi8KKwkJcmVnZCA9IGF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzYy0+c2NfYWgpOworCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCisJCSAqIGl0J3Mgb3VyIG93biBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4sIHNpbWlsYXIgdG8KKwkJICogY2ZnODAyMTEncyBidXQgd2UgZW5hYmxlIHBhc3NpdmUgc2Nhbm5pbmcgKi8KKwkJcmVnZCA9IGF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CisJfQorCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwgcmVnZCk7CisJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKGh3LT53aXBoeSk7CisJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUik7CisKKwlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAorCWlmICghYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwKKwkJCXNjLT5zY19haC0+cmVndWxhdG9yeS5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX2F0dGFjaDsKKwl9CisKIAkvKiBJbml0aWFsaXplIExFRCBjb250cm9sICovCiAJYXRoX2luaXRfbGVkcyhzYyk7CiAKKwogCXJldHVybiAwOwogCiBlcnJvcl9hdHRhY2g6CkBAIC0xNjI5LDI0ICsxNzA3LDIwIEBACiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlpbnQgcjsKIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQlhdGhfZHJhaW50eHEoc2MsIHJldHJ5X3R4KTsKKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CiAJYXRoX2ZsdXNocmVjdihzYyk7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIGZhbHNlKTsKKwlpZiAocikKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IGhhbCBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVJTzsKLQl9CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsIHIpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKQpAQCAtMTY1NywxNCArMTczMSwxNCBAQAogCSAqIHRoYXQgY2hhbmdlcyB0aGUgY2hhbm5lbCBzbyB1cGRhdGUgYW55IHN0YXRlIHRoYXQKIAkgKiBtaWdodCBjaGFuZ2UgYXMgYSByZXN1bHQuCiAJICovCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoc2MtPnNjX2FoLT5haF9jdXJjaGFuKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCWF0aF91cGRhdGVfdHhwb3coc2MpOwogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZKTsJLyogcmVzdGFydCBiZWFjb25zICovCisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsJLyogcmVzdGFydCBiZWFjb25zICovCiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKIAogCWlmIChyZXRyeV90eCkgewogCQlpbnQgaTsKQEAgLTE2NzcsNyArMTc1MSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHI7CiB9CiAKIC8qCkBAIC0xNzAxLDYgKzE3NzUsNyBAQAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BOiAldSBidWZmZXJzICV1IGRlc2MvYnVmXG4iLAogCQluYW1lLCBuYnVmLCBuZGVzYyk7CiAKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAkvKiBhdGhfZGVzYyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgRFdPUkRzICovCiAJaWYgKChzaXplb2Yoc3RydWN0IGF0aF9kZXNjKSAlIDQpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImF0aF9kZXNjIG5vdCBEV09SRCBhbGlnbmVkXG4iKTsKQEAgLTE3MTcsNyArMTc5Miw3IEBACiAJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCiAJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KIAkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJdTMyIG5kZXNjX3NraXBwZWQgPQogCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CiAJCXUzMiBkbWFfbGVuOwpAQCAtMTczMSw5ICsxODA2LDggQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBkZXNjcmlwdG9ycyAqLwotCWRkLT5kZF9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoc2MtPnBkZXYsCi0JCQkgICAgICBkZC0+ZGRfZGVzY19sZW4sCi0JCQkgICAgICAmZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRkLT5kZF9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwKKwkJCQkJICZkZC0+ZGRfZGVzY19wYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRkLT5kZF9kZXNjID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xNzQ1LDIwICsxODE5LDE4IEBACiAKIAkvKiBhbGxvY2F0ZSBidWZmZXJzICovCiAJYnNpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9idWYpICogbmJ1ZjsKLQliZiA9IGttYWxsb2MoYnNpemUsIEdGUF9LRVJORUwpOworCWJmID0ga3phbGxvYyhic2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KLQltZW1zZXQoYmYsIDAsIGJzaXplKTsKIAlkZC0+ZGRfYnVmcHRyID0gYmY7CiAKLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrLCBiZisrLCBkcyArPSBuZGVzYykgewogCQliZi0+YmZfZGVzYyA9IGRzOwogCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CiAKLQkJaWYgKCEoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJgorCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCiAJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJCS8qCiAJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKQEAgLTE3NzksOCArMTg1MSw4IEBACiAJfQogCXJldHVybiAwOwogZmFpbDI6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIGZhaWw6CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTc5Myw4ICsxODY1LDggQEAKIAkJCSBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAogCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIAogCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCWtmcmVlKGRkLT5kZF9idWZwdHIpOwpAQCAtMTg1MSwzMyArMTkyMyw4MSBAQAogCXJldHVybiBxbnVtOwogfQogCisvKiBYWFg6IFJlbW92ZSBtZSBvbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBhdGg5a19jaGFubmVsIGZvciBhbGwKKyAqIHRoaXMgcmVkdW5kYW50IGRhdGEgKi8KK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBody0+Y29uZi5jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWljaGFuLT5jaGFubmVsID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJaWNoYW4tPmNoYW4gPSBjaGFuOworCisJaWYgKGNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpY2hhbi0+Y2hhbm1vZGUgPSBDSEFOTkVMX0c7CisJCWljaGFuLT5jaGFubmVsRmxhZ3MgPSBDSEFOTkVMXzJHSFogfCBDSEFOTkVMX09GRE07CisJfSBlbHNlIHsKKwkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9BOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF81R0haIHwgQ0hBTk5FTF9PRkRNOworCX0KKworCXNjLT50eF9jaGFuX3dpZHRoID0gQVRIOUtfSFRfTUFDTU9ERV8yMDsKKworCWlmIChjb25mX2lzX2h0KGNvbmYpKSB7CisJCWlmIChjb25mX2lzX2h0NDAoY29uZikpCisJCQlzYy0+dHhfY2hhbl93aWR0aCA9IEFUSDlLX0hUX01BQ01PREVfMjA0MDsKKworCQlpY2hhbi0+Y2hhbm1vZGUgPSBhdGhfZ2V0X2V4dGNoYW5tb2RlKHNjLCBjaGFuLAorCQkJCQkgICAgY29uZi0+Y2hhbm5lbF90eXBlKTsKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGg5a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmluaXRfY2hhbm5lbDsKLQlpbnQgZXJyb3IgPSAwLCBwb3MsIHN0YXR1czsKKwlpbnQgciwgcG9zOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTdGFydGluZyBkcml2ZXIgd2l0aCAiCiAJCSJpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKworCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgeworCQlpZiAoc2MtPmNoYW5faWR4ID09IGN1cmNoYW4tPmh3X3ZhbHVlKSB7CisJCQkvKgorCQkJICogQWxyZWFkeSBvbiB0aGUgb3BlcmF0aW9uYWwgY2hhbm5lbCwgdGhlIG5ldyB3aXBoeQorCQkJICogY2FuIGJlIG1hcmtlZCBhY3RpdmUuCisJCQkgKi8KKwkJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQW5vdGhlciB3aXBoeSBpcyBvbiBhbm90aGVyIGNoYW5uZWwsIHN0YXJ0IHRoZSBuZXcKKwkJCSAqIHdpcGh5IGluIHBhdXNlZCBzdGF0ZS4KKwkJCSAqLworCQkJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwkJfQorCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9BQ1RJVkU7CisKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAotCXBvcyA9IGF0aF9nZXRfY2hhbm5lbChzYywgY3VyY2hhbik7Ci0JaWYgKHBvcyA9PSAtMSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCXBvcyA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCi0Jc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCShjdXJjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8gQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOwotCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc107CisJc2MtPmNoYW5faWR4ID0gcG9zOworCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc107CisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgaW5pdF9jaGFubmVsKTsKIAogCS8qIFJlc2V0IFNFUkRFUyByZWdpc3RlcnMgKi8KIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAwKTsKQEAgLTE4OTAsMTcgKzIwMTAsMTQgQEAKIAkgKiBhbmQgdGhlbiBzZXR1cCBvZiB0aGUgaW50ZXJydXB0IG1hc2suCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KHNjLT5zY19haCwgaW5pdF9jaGFubmVsLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLCBmYWxzZSwgJnN0YXR1cykpIHsKKwlyID0gYXRoOWtfaHdfcmVzZXQoc2MtPnNjX2FoLCBpbml0X2NoYW5uZWwsIGZhbHNlKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldSAiCi0JCQkiKGZyZXEgJXUgZmxhZ3MgMHgleClcbiIsIHN0YXR1cywKLQkJCWluaXRfY2hhbm5lbC0+Y2hhbm5lbCwgaW5pdF9jaGFubmVsLT5jaGFubmVsRmxhZ3MpOwotCQllcnJvciA9IC1FSU87CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXUgIgorCQkJIihmcmVxICV1IE1IeilcbiIsIHIsCisJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBtdXRleF91bmxvY2s7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIApAQCAtMTkyMCw2NiArMjAzNyw1NiBAQAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJCXIgPSAtRUlPOworCQlnb3RvIG11dGV4X3VubG9jazsKIAl9CiAKIAkvKiBTZXR1cCBvdXIgaW50ciBtYXNrLiAqLwotCXNjLT5zY19pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAorCXNjLT5pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAogCQl8IEFUSDlLX0lOVF9SWEVPTCB8IEFUSDlLX0lOVF9SWE9STgogCQl8IEFUSDlLX0lOVF9GQVRBTCB8IEFUSDlLX0lOVF9HTE9CQUw7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQotCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKIAotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9DU1Q7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0NTVDsKIAotCS8qCi0JICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KLQkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KLQkgKi8KLQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgICAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9NSUI7Ci0JLyoKLQkgKiBTb21lIGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgVElNIElFIGFuZCBmaXJlcyBhbgotCSAqIGludGVycnVwdCB3aGVuIHRoZSBUSU0gYml0IGlzIHNldC4gIEZvciBoYXJkd2FyZQotCSAqIHRoYXQgZG9lcywgaWYgbm90IG92ZXJyaWRkZW4gYnkgY29uZmlndXJhdGlvbiwKLQkgKiBlbmFibGUgdGhlIFRJTSBpbnRlcnJ1cHQgd2hlbiBvcGVyYXRpbmcgYXMgc3RhdGlvbi4KLQkgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0pICYmCi0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgotCSAgICAhc2MtPnNjX2NvbmZpZy5zd0JlYWNvblByb2Nlc3MpCi0JCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfVElNOwotCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoaW5pdF9jaGFubmVsKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfSU5WQUxJRDsKIAogCS8qIERpc2FibGUgQk1JU1MgaW50ZXJydXB0IHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQgKi8KLQlzYy0+c2NfaW1hc2sgJj0gfihBVEg5S19JTlRfU1dCQSB8IEFUSDlLX0lOVF9CTUlTUyk7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+c2NfaW1hc2spOworCXNjLT5pbWFzayAmPSB+KEFUSDlLX0lOVF9TV0JBIHwgQVRIOUtfSU5UX0JNSVNTKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWVycm9yID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKwlyID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKICNlbmRpZgogCi1lcnJvcjoKLQlyZXR1cm4gZXJyb3I7CittdXRleF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgaGRybGVuLCBwYWRzaXplOwogCisJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogVFggaW4gdW5leHBlY3RlZCB3aXBoeSBzdGF0ZSAiCisJCSAgICAgICAiJWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOworCQlnb3RvIGV4aXQ7CisJfQorCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOwogCiAJLyoKQEAgLTIwMTMsNyArMjEyMCw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOwogCi0JaWYgKGF0aF90eF9zdGFydChzYywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjAyNiwzMCArMjEzMywzOCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9JTkFDVElWRTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQ2xlYW5pbmcgdXBcbiIpOworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJaWYgKGF0aDlrX3dpcGh5X3N0YXJ0ZWQoc2MpKSB7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOyAvKiBhbm90aGVyIHdpcGh5IHN0aWxsIGluIHVzZSAqLworCX0KIAogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKIAogCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCWF0aF9kcmFpbnR4cShzYywgZmFsc2UpOworCQlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwogCQlhdGhfc3RvcHJlY3Yoc2MpOwogCQlhdGg5a19od19waHlfZGlzYWJsZShzYy0+c2NfYWgpOwogCX0gZWxzZQogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKICNlbmRpZgogCS8qIGRpc2FibGUgSEFMIGFuZCBwdXQgaC93IHRvIHNsZWVwICovCkBAIC0yMDU4LDEzNiArMjE3MywyMjcgQEAKIAogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCWludCByZXQgPSAwOwogCi0JLyogU3VwcG9ydCBvbmx5IHZhcCBmb3Igbm93ICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAotCWlmIChzYy0+c2NfbnZhcHMpCi0JCXJldHVybiAtRU5PQlVGUzsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spICYmCisJICAgIHNjLT5udmlmcyA+IDApIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoY29uZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKHNjLT5uYmNudmlmcyA+PSBBVEhfQkNCVUYpIHsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBvdXQ7CisJCX0KIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCWlmIChzYy0+bmJjbnZpZnMgPj0gQVRIX0JDQlVGKSB7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FQOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCBjb25mLT50eXBlKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CiAJfQogCi0JRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggYSBWQVAgb2YgdHlwZTogJWRcbiIsIGljX29wbW9kZSk7CisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggYSBWSUYgb2YgdHlwZTogJWRcbiIsIGljX29wbW9kZSk7CiAKLQkvKiBTZXQgdGhlIFZBUCBvcG1vZGUgKi8KKwkvKiBTZXQgdGhlIFZJRiBvcG1vZGUgKi8KIAlhdnAtPmF2X29wbW9kZSA9IGljX29wbW9kZTsKIAlhdnAtPmF2X2JzbG90ID0gLTE7CiAKLQlpZiAoaWNfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KHNjLT5zY19haCwgMSk7CisJc2MtPm52aWZzKys7CiAKLQlzYy0+c2NfdmFwc1swXSA9IGNvbmYtPnZpZjsKLQlzYy0+c2NfbnZhcHMrKzsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKQorCQlhdGg5a19zZXRfYnNzaWRfbWFzayhodyk7CisKKwlpZiAoc2MtPm52aWZzID4gMSkKKwkJZ290byBvdXQ7IC8qIHNraXAgZ2xvYmFsIHNldHRpbmdzIGZvciBzZWNvbmRhcnkgdmlmICovCisKKwlpZiAoaWNfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc2MtPnNjX2FoLCAxKTsKKwkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1RTRl9SRVNFVDsKKwl9CiAKIAkvKiBTZXQgdGhlIGRldmljZSBvcG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IGljX29wbW9kZTsKKwlzYy0+c2NfYWgtPm9wbW9kZSA9IGljX29wbW9kZTsKKworCS8qCisJICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KKwkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KKwkgKi8KKwlpZiAoKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSB7CisJCWlmIChhdGg5a19od19waHljb3VudGVycyhzYy0+c2NfYWgpKQorCQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVFNGT09SOworCX0KKworCS8qCisJICogU29tZSBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIFRJTSBJRSBhbmQgZmlyZXMgYW4KKwkgKiBpbnRlcnJ1cHQgd2hlbiB0aGUgVElNIGJpdCBpcyBzZXQuICBGb3IgaGFyZHdhcmUKKwkgKiB0aGF0IGRvZXMsIGlmIG5vdCBvdmVycmlkZGVuIGJ5IGNvbmZpZ3VyYXRpb24sCisJICogZW5hYmxlIHRoZSBUSU0gaW50ZXJydXB0IHdoZW4gb3BlcmF0aW5nIGFzIHN0YXRpb24uCisJICovCisJaWYgKChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNKSAmJgorCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAhc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MpCisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVElNOworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOwogCiAJaWYgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJLyogVE9ETzogaXMgdGhpcyBhIHN1aXRhYmxlIHBsYWNlIHRvIHN0YXJ0IEFOSSBmb3IgQVAgbW9kZT8gKi8KIAkJLyogU3RhcnQgQU5JICovCi0JCW1vZF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwKKwkJbW9kX3RpbWVyKCZzYy0+YW5pLnRpbWVyLAogCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEhfQU5JX1BPTExJTlRFUlZBTCkpOwogCX0KIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCWludCBpOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKIAorCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisKIAkvKiBTdG9wIEFOSSAqLwotCWRlbF90aW1lcl9zeW5jKCZzYy0+c2NfYW5pLnRpbWVyKTsKKwlkZWxfdGltZXJfc3luYygmc2MtPmFuaS50aW1lcik7CiAKIAkvKiBSZWNsYWltIGJlYWNvbiByZXNvdXJjZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKLQkgICAgc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBOVUxMOwotCXNjLT5zY19udmFwcy0tOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKKwkJaWYgKHNjLT5iZWFjb24uYnNsb3RbaV0gPT0gY29uZi0+dmlmKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHZpZiBoYWQgYWxsb2NhdGVkIGJlYWNvbiAiCisJCQkgICAgICAgInNsb3RcbiIsIF9fZnVuY19fKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwkJfQorCX0KKworCXNjLT5udmlmcy0tOworCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMIHwKLQkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVCkpIHsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZiAoKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpID09IDApIHsKKwkJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fQVdBS0UpOworCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlpZiAoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgeworCQkJCXNjLT5pbWFzayAmPSB+QVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwotCQlpbnQgcG9zOworCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CisKKwkJYXBoeS0+Y2hhbl9pZHggPSBwb3M7CisJCWFwaHktPmNoYW5faXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCWlmIChhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTiB8fAorCQkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBEbyBub3QgY2hhbmdlIG9wZXJhdGlvbmFsIGNoYW5uZWwgYmFzZWQgb24gYSBwYXVzZWQKKwkJCSAqIHdpcGh5IGNoYW5nZXMuCisJCQkgKi8KKwkJCWdvdG8gc2tpcF9jaGFuX2NoYW5nZTsKKwkJfQogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAotCQlwb3MgPSBhdGhfZ2V0X2NoYW5uZWwoc2MsIGN1cmNoYW4pOwotCQlpZiAocG9zID09IC0xKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwKLQkJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KKwkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKLQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCQlzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10uY2hhbm1vZGUgPQotCQkJKGN1cmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCQkJQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOworCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgY29uZl9pc19odChjb25mKSk7CiAKLQkJaWYgKGNvbmYtPmh0LmVuYWJsZWQpIHsKLQkJCWlmIChjb25mLT5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTIHx8Ci0JCQkgICAgY29uZi0+aHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCi0JCQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwNDA7Ci0KLQkJCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCQkJYXRoX2dldF9leHRjaGFubW9kZShzYywgY3VyY2hhbiwKLQkJCQkJCSAgICBjb25mLT5odC5jaGFubmVsX3R5cGUpOwotCQl9Ci0KLQkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmYtPmh0LmVuYWJsZWQpOwotCi0JCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10pIDwgMCkgeworCQlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCitza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQotCQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKworCS8qCisJICogVGhlIEhXIFRTRiBoYXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgYmVhY29uIGludGVydmFsIGNoYW5nZXMuCisJICogV2Ugc2V0IHRoZSBmbGFnIGhlcmUsIGFuZCBhdGhfYmVhY29uX2NvbmZpZ19hcCgpIHdvdWxkIHRha2UgdGhpcworCSAqIGludG8gYWNjb3VudCB3aGVuIGl0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIHN1YnNlcXVlbnQKKwkgKiBjb25maWdfaW50ZXJmYWNlKCkgY2FsbCAtIHdpdGggSUZDQ19CRUFDT04gaW4gdGhlIGNoYW5nZWQgZmllbGQuCisJICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE5NSwxOSArMjQwMSwyNCBAQAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJdTMyIHJmaWx0ID0gMDsKIAlpbnQgZXJyb3IsIGk7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogVE9ETzogTmVlZCB0byBkZWNpZGUgd2hpY2ggaHcgb3Btb2RlIHRvIHVzZSBmb3IgbXVsdGktaW50ZXJmYWNlCiAJICogY2FzZXMgKi8KIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJICAgIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7Ci0JCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoYWgsIHNjLT5zY19teWFkZHIsIDApOworCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwkJc2MtPmN1cmFpZCA9IDA7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQkvKiBSZXF1ZXN0IGZ1bGwgcmVzZXQgdG8gZ2V0IGh3IG9wbW9kZSBjaGFuZ2VkIHByb3Blcmx5ICovCiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwogCX0KQEAgLTIyMTgsMTcgKzI0MjksMTcgQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQkJLyogU2V0IEJTU0lEICovCi0JCQltZW1jcHkoc2MtPnNjX2N1cmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQkJc2MtPnNjX2N1cmFpZCA9IDA7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgc2MtPnNjX2N1cmJzc2lkLAotCQkJCQkgICAgICAgc2MtPnNjX2N1cmFpZCk7CisJCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQkJbWVtY3B5KGF2cC0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQlzYy0+Y3VyYWlkID0gMDsKKwkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCiAJCQkvKiBTZXQgYWdncmVnYXRpb24gcHJvdGVjdGlvbiBtb2RlIHBhcmFtZXRlcnMgKi8KLQkJCXNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCA9IDA7CisJCQlzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgPSAwOwogCiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKIAkJCQkiUlggZmlsdGVyIDB4JXggYnNzaWQgJXBNIGFpZCAweCV4XG4iLAotCQkJCXJmaWx0LCBzYy0+c2NfY3VyYnNzaWQsIHNjLT5zY19jdXJhaWQpOworCQkJCXJmaWx0LCBzYy0+Y3VyYnNzaWQsIHNjLT5jdXJhaWQpOwogCiAJCQkvKiBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBiZWFjb24gKi8KIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OUyA7CkBAIC0yMjM5LDI0ICsyNDUwLDI5IEBACiAJCX0KIAl9CiAKLQlpZiAoKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pICYmCi0JICAgICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAotCSAgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkpKSB7Ci0JCS8qCi0JCSAqIEFsbG9jYXRlIGFuZCBzZXR1cCB0aGUgYmVhY29uIGZyYW1lLgotCQkgKgotCQkgKiBTdG9wIGFueSBwcmV2aW91cyBiZWFjb24gRE1BLiAgVGhpcyBtYXkgYmUKLQkJICogbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBpYnNzIG1lcmdlCi0JCSAqIGNhdXNlcyByZWNvbmZpZ3VyYXRpb247IHdlIG1heSBiZSBjYWxsZWQKLQkJICogd2l0aCBiZWFjb24gdHJhbnNtaXNzaW9uIGFjdGl2ZS4KLQkJICovCi0JCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CisJaWYgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApKSB7CisJCWlmICgoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikgfHwKKwkJICAgIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQgJiYKKwkJICAgICBjb25mLT5lbmFibGVfYmVhY29uKSkgeworCQkJLyoKKwkJCSAqIEFsbG9jYXRlIGFuZCBzZXR1cCB0aGUgYmVhY29uIGZyYW1lLgorCQkJICoKKwkJCSAqIFN0b3AgYW55IHByZXZpb3VzIGJlYWNvbiBETUEuICBUaGlzIG1heSBiZQorCQkJICogbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBpYnNzIG1lcmdlCisJCQkgKiBjYXVzZXMgcmVjb25maWd1cmF0aW9uOyB3ZSBtYXkgYmUgY2FsbGVkCisJCQkgKiB3aXRoIGJlYWNvbiB0cmFuc21pc3Npb24gYWN0aXZlLgorCQkJICovCisJCQlhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi0JCWVycm9yID0gYXRoX2JlYWNvbl9hbGxvYyhzYywgMCk7Ci0JCWlmIChlcnJvciAhPSAwKQotCQkJcmV0dXJuIGVycm9yOworCQkJZXJyb3IgPSBhdGhfYmVhY29uX2FsbG9jKGFwaHksIHZpZik7CisJCQlpZiAoZXJyb3IgIT0gMCkgeworCQkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJCQlyZXR1cm4gZXJyb3I7CisJCQl9CiAKLQkJYXRoX2JlYWNvbl9zeW5jKHNjLCAwKTsKKwkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOworCQl9CiAJfQogCiAJLyogQ2hlY2sgZm9yIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gKi8KQEAgLTIyNjUsMTMgKzI0ODEsMTUgQEAKIAkJCWlmIChhdGg5a19od19rZXlpc3ZhbGlkKHNjLT5zY19haCwgKHUxNilpKSkKIAkJCQlhdGg5a19od19rZXlzZXRtYWMoc2MtPnNjX2FoLAogCQkJCQkJICAgKHUxNilpLAotCQkJCQkJICAgc2MtPnNjX2N1cmJzc2lkKTsKKwkJCQkJCSAgIHNjLT5jdXJic3NpZCk7CiAJfQogCiAJLyogT25seSBsZWdhY3kgSUJTUyBmb3Igbm93ICovCiAJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIDApOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyOTAsNyArMjUwOCw4IEBACiAJCQkJICAgaW50IG1jX2NvdW50LAogCQkJCSAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJdTMyIHJmaWx0OwogCiAJY2hhbmdlZF9mbGFncyAmPSBTVVBQT1JURURfRklMVEVSUzsKQEAgLTIzMDAsMTEgKzI1MTksNiBAQAogCXJmaWx0ID0gYXRoX2NhbGNyeGZpbHRlcihzYyk7CiAJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoc2MtPnNjX2FoLCByZmlsdCk7CiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoLCBhdGhfYmNhc3RfbWFjLCAwKTsKLQl9Ci0KIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIlNldCBIVyBSWCBmaWx0ZXI6IDB4JXhcbiIsIHNjLT5yeC5yeGZpbHRlcik7CiB9CiAKQEAgLTIzMTMsNyArMjUyNyw4IEBACiAJCQkgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU1RBX05PVElGWV9BREQ6CkBAIC0yMzI3LDE3ICsyNTQyLDE5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGF0aDlrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgdTE2IHF1ZXVlLAorc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHFpOwogCWludCByZXQgPSAwLCBxbnVtOwogCiAJaWYgKHF1ZXVlID49IFdNRV9OVU1fQUMpCiAJCXJldHVybiAwOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwogCXFpLnRxaV9haWZzID0gcGFyYW1zLT5haWZzOwogCXFpLnRxaV9jd21pbiA9IHBhcmFtcy0+Y3dfbWluOwogCXFpLnRxaV9jd21heCA9IHBhcmFtcy0+Y3dfbWF4OwpAQCAtMjM1NCwyOSArMjU3MSwzOSBAQAogCWlmIChyZXQpCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsICJUWFEgVXBkYXRlIGZhaWxlZFxuIik7CiAKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDlrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgY29uc3QgdTggKmxvY2FsX2FkZHIsCi0JCQkgY29uc3QgdTggKmFkZHIsCisJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWludCByZXQgPSAwOwogCisJaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwgIlNldCBIVyBLZXlcbiIpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNFVF9LRVk6Ci0JCXJldCA9IGF0aF9rZXlfY29uZmlnKHNjLCBhZGRyLCBrZXkpOworCQlyZXQgPSBhdGhfa2V5X2NvbmZpZyhzYywgdmlmLCBzdGEsIGtleSk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJa2V5LT5od19rZXlfaWR4ID0gcmV0OwogCQkJLyogcHVzaCBJViBhbmQgTWljaGFlbCBNSUMgZ2VuZXJhdGlvbiB0byBzdGFjayAqLwogCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CiAJCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCiAJCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzsKKwkJCWlmIChzYy0+c2NfYWgtPnN3X21nbXRfY3J5cHRvICYmIGtleS0+YWxnID09IEFMR19DQ01QKQorCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQ7CiAJCQlyZXQgPSAwOwogCQl9CiAJCWJyZWFrOwpAQCAtMjM4Nyw2ICsyNjE0LDkgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzk1LDcgKzI2MjUsMTAgQEAKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQkgICB1MzIgY2hhbmdlZCkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgUFJFQU1CTEUgJWRcbiIsCkBAIC0yNDIxLDMzICsyNjU0LDUwIEBACiAJCQlic3NfY29uZi0+YXNzb2MpOwogCQlhdGg5a19ic3NfYXNzb2NfaW5mbyhzYywgdmlmLCBic3NfY29uZik7CiAJfQorCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdTY0IGF0aDlrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJdTY0IHRzZjsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAotCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KGFoKTsKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KHNjLT5zY19haCk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCiAJcmV0dXJuIHRzZjsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZikKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfaHdfc2V0dHNmNjQoc2MtPnNjX2FoLCB0c2YpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKwogc3RhdGljIHZvaWQgYXRoOWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCi0JYXRoOWtfaHdfcmVzZXRfdHNmKGFoKTsKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX2h3X3Jlc2V0X3RzZihzYy0+c2NfYWgpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBhdGg5a19hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCSAgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CkBAIC0yNDgzLDcgKzI3MzMsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzID0geworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCisJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKKwkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfU0NBTjsKKwlhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHNjLCBhcGh5KTsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfU0NBTk5JTkc7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCitzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCiAJLnN0b3AgCQkgICAgPSBhdGg5a19zdG9wLApAQCAtMjQ5Nyw4ICsyNzgxLDExIEBACiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCisJLnNldF90c2YgCSAgICA9IGF0aDlrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgICAgICA9IGF0aDlrX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUgICA9IGF0aDlrX3N3X3NjYW5fY29tcGxldGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTI1MjcsNyArMjgxNCw3IEBACiAvKgogICogUmV0dXJuIHRoZSBNQUMvQkIgbmFtZS4gIj8/Pz8iIGlzIHJldHVybmVkIGlmIHRoZSBNQUMvQkIgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfbWFjX2JiX25hbWUodTMyIG1hY19iYl92ZXJzaW9uKQogewogCWludCBpOwpAQCAtMjU0NCw3ICsyODMxLDcgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIFJGIG5hbWUuICI/Pz8/IiBpcyByZXR1cm5lZCBpZiB0aGUgUkYgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbikKIHsKIAlpbnQgaTsKQEAgLTI1NTgsMjU0ICsyODQ1LDYyIEBACiAJcmV0dXJuICI/Pz8/IjsKIH0KIAotc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JdTggY3N6OwotCXUzMiB2YWw7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9ICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7Ci0JfQotCi0JcmV0ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBjb25zaXN0ZW50ICIKLQkJCSJETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gYmFkOwotCX0KLQotCS8qCi0JICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cwotCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmY3N6KTsKLQlpZiAoY3N6ID09IDApIHsKLQkJLyoKLQkJICogTGludXggMi40LjE4IChhdCBsZWFzdCkgd3JpdGVzIHRoZSBjYWNoZSBsaW5lIHNpemUKLQkJICogcmVnaXN0ZXIgYXMgYSAxNi1iaXQgd2lkZSByZWdpc3RlciB3aGljaCBpcyB3cm9uZy4KLQkJICogV2UgbXVzdCBoYXZlIHRoaXMgc2V0dXAgcHJvcGVybHkgZm9yIHJ4IGJ1ZmZlcgotCQkgKiBETUEgdG8gd29yayBzbyBmb3JjZSBhIHJlYXNvbmFibGUgdmFsdWUgaGVyZSBpZiBpdAotCQkgKiBjb21lcyB1cCB6ZXJvLgotCQkgKi8KLQkJY3N6ID0gTDFfQ0FDSEVfQllURVMgLyBzaXplb2YodTMyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIGNzeik7Ci0JfQotCS8qCi0JICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiBsYXRlbmN5IHRpbWVyIHlpZWxkcyBwb29yIHJlc3VsdHMsCi0JICogc2V0IGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IG90aGVyIHN5c3RlbXMuIEl0IG1heSBiZSB3b3J0aAotCSAqIHR3ZWFraW5nIHRoaXMgc2V0dGluZyBtb3JlLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhhOCk7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCS8qCi0JICogRGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAotCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOwotCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiYXRoOWsiKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSBtZW1vcnkgcmVnaW9uIHJlc2VydmUgZXJyb3JcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0kgbWVtb3J5IG1hcCBlcnJvclxuIikgOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDE7Ci0JfQotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKLQkJZ290byBiYWQyOwotCX0KLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwotCi0Jc2MgPSBody0+cHJpdjsKLQlzYy0+aHcgPSBodzsKLQlzYy0+cGRldiA9IHBkZXY7Ci0Jc2MtPm1lbSA9IG1lbTsKLQotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkMzsKLQl9Ci0KLQkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCi0KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDQ7Ci0JfQotCi0JYWggPSBzYy0+c2NfYWg7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKLQkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmFoX21hY1ZlcnNpb24pLAotCSAgICAgICBhaC0+YWhfbWFjUmV2LAotCSAgICAgICBhdGhfcmZfbmFtZSgoYWgtPmFoX2FuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCi0JICAgICAgIGFoLT5haF9waHlSZXYsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKLQotCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGhfZGV0YWNoKHNjKTsKLQlpZiAocGRldi0+aXJxKQotCQlmcmVlX2lycShwZGV2LT5pcnEsIHNjKTsKLQlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IGF0aF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnJmX2tpbGwucmZraWxsX3BvbGwpOwotI2VuZGlmCi0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JdTMyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQkvKgotCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KLQkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCi0JICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZQotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCAmdmFsKTsKLQlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAotCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCS8qCi0JICogY2hlY2sgdGhlIGgvdyByZmtpbGwgc3RhdGUgb24gcmVzdW1lCi0JICogYW5kIHN0YXJ0IHRoZSByZmtpbGwgcG9sbCB0aW1lcgotCSAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGhfcGNpX2lkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aF9wY2lfZHJpdmVyID0gewotCS5uYW1lICAgICAgID0gImF0aDlrIiwKLQkuaWRfdGFibGUgICA9IGF0aF9wY2lfaWRfdGFibGUsCi0JLnByb2JlICAgICAgPSBhdGhfcGNpX3Byb2JlLAotCS5yZW1vdmUgICAgID0gYXRoX3BjaV9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgICAgPSBhdGhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSBhdGhfcGNpX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRoX3BjaSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXRoOWtfaW5pdCh2b2lkKQogewogCWludCBlcnJvcjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2X2luZm8sIEFUSF9QQ0lfVkVSU0lPTik7Ci0KIAkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCiAJZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKGVycm9yICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLAorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAogCQkJZXJyb3IpOwotCQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKSA8IDApIHsKKwllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkJImF0aF9wY2k6IE5vIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7Ci0JCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCQkiYXRoOWs6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyByb290OiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJZ290byBlcnJfcmF0ZV91bnJlZ2lzdGVyOworCX0KKworCWVycm9yID0gYXRoX3BjaV9pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogTm8gUENJIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVtb3ZlX3Jvb3Q7CisJfQorCisJZXJyb3IgPSBhdGhfYWhiX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX2V4aXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChpbml0X2F0aF9wY2kpOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hdGhfcGNpKHZvaWQpCi17CisgZXJyX3BjaV9leGl0OgorCWF0aF9wY2lfZXhpdCgpOworCisgZXJyX3JlbW92ZV9yb290OgorCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisgZXJyX3JhdGVfdW5yZWdpc3RlcjoKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKKyBlcnJfb3V0OgorCXJldHVybiBlcnJvcjsKK30KK21vZHVsZV9pbml0KGF0aDlrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQoreworCWF0aF9haGJfZXhpdCgpOworCWF0aF9wY2lfZXhpdCgpOworCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwogfQotbW9kdWxlX2V4aXQoZXhpdF9hdGhfcGNpKTsKK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTU4YmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoX3BjaV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjMpIH0sIC8qIFBDSSAgICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjQpIH0sIC8qIFBDSS1FICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjcpIH0sIC8qIFBDSSAgICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMjkpIH0sIC8qIFBDSSAgICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkEpIH0sIC8qIFBDSS1FICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkIpIH0sIC8qIFBDSS1FICovCisJeyAwIH0KK307CisKKy8qIHJldHVybiBidXMgY2FjaGVzaXplIGluIDRCIHdvcmQgdW5pdHMgKi8KK3N0YXRpYyB2b2lkIGF0aF9wY2lfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQoreworCXU4IHU4dG1wOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUodG9fcGNpX2RldihzYy0+ZGV2KSwgUENJX0NBQ0hFX0xJTkVfU0laRSwKKwkJCSAgICAgKHU4ICopJnU4dG1wKTsKKwkqY3N6ID0gKGludCl1OHRtcDsKKworCS8qCisJICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgorCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgorCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKKwkgKi8KKworCWlmICgqY3N6ID09IDApCisJCSpjc3ogPSBERUZBVUxUX0NBQ0hFTElORSA+PiAyOyAgIC8qIFVzZSB0aGUgZGVmYXVsdCBzaXplICovCit9CisKK3N0YXRpYyB2b2lkIGF0aF9wY2lfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc2MtPmRldik7CisKKwlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOworfQorCitzdGF0aWMgYm9vbCBhdGhfcGNpX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJKHZvaWQpUkVHX1JFQUQoYWgsIEFSNTQxNl9FRVBST01fT0ZGU0VUICsgKG9mZiA8PCBBUjU0MTZfRUVQUk9NX1MpKTsKKworCWlmICghYXRoOWtfaHdfd2FpdChhaCwKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQSwKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9CVVNZIHwKKwkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUywgMCwKKwkJCSAgIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCSpkYXRhID0gTVMoUkVHX1JFQUQoYWgsIEFSX0VFUFJPTV9TVEFUVVNfREFUQSksCisJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX3BjaV9idXNfb3BzID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9wY2lfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfcGNpX2NsZWFudXAsCisJLmVlcHJvbV9yZWFkID0gYXRoX3BjaV9lZXByb21fcmVhZCwKK307CisKK3N0YXRpYyBpbnQgYXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXZvaWQgX19pb21lbSAqbWVtOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2M7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJdTggY3N6OworCXUzMiB2YWw7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGF0aF9odyAqYWg7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlnb3RvIGJhZDsKKwl9CisKKwlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIGNvbnNpc3RlbnQgIgorCQkJIkRNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBiYWQ7CisJfQorCisJLyoKKwkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCisJICogc3RydWN0dXJlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjc3opOworCWlmIChjc3ogPT0gMCkgeworCQkvKgorCQkgKiBMaW51eCAyLjQuMTggKGF0IGxlYXN0KSB3cml0ZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZQorCQkgKiByZWdpc3RlciBhcyBhIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIHdoaWNoIGlzIHdyb25nLgorCQkgKiBXZSBtdXN0IGhhdmUgdGhpcyBzZXR1cCBwcm9wZXJseSBmb3IgcnggYnVmZmVyCisJCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0CisJCSAqIGNvbWVzIHVwIHplcm8uCisJCSAqLworCQljc3ogPSBMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKKwl9CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIGxhdGVuY3kgdGltZXIgeWllbGRzIHBvb3IgcmVzdWx0cywKKwkgKiBzZXQgaXQgdG8gdGhlIHZhbHVlIHVzZWQgYnkgb3RoZXIgc3lzdGVtcy4gSXQgbWF5IGJlIHdvcnRoCisJICogdHdlYWtpbmcgdGhpcyBzZXR0aW5nIG1vcmUuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCisJICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZS4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgJnZhbCk7CisJaWYgKCh2YWwgJiAweDAwMDBmZjAwKSAhPSAwKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIHZhbCAmIDB4ZmZmZjAwZmYpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsICJhdGg5ayIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFkOworCX0KKworCW1lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1lbSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSSBtZW1vcnkgbWFwIGVycm9yXG4iKSA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkMTsKKwl9CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKworCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGhfcGNpOiBubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWdvdG8gYmFkMjsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIChhcGh5ICsgMSk7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5wcmlfd2lwaHkgPSBhcGh5OworCXNjLT5odyA9IGh3OworCXNjLT5kZXYgPSAmcGRldi0+ZGV2OworCXNjLT5tZW0gPSBtZW07CisJc2MtPmJ1c19vcHMgPSAmYXRoX3BjaV9idXNfb3BzOworCisJaWYgKGF0aF9hdHRhY2goaWQtPmRldmljZSwgc2MpICE9IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWQzOworCX0KKworCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aF9pc3IsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwKKwkJCXdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkNDsKKwl9CisKKwlzYy0+aXJxID0gcGRldi0+aXJxOworCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKKwkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAorCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiksCisJICAgICAgIGFoLT5od192ZXJzaW9uLm1hY1JldiwKKwkgICAgICAgYXRoX3JmX25hbWUoKGFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCisJICAgICAgIGFoLT5od192ZXJzaW9uLnBoeVJldiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbWVtLCBwZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CitiYWQ0OgorCWF0aF9kZXRhY2goc2MpOworYmFkMzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CitiYWQyOgorCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CitiYWQxOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKK2JhZDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfY2xlYW51cChzYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhdGhfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCk7CisjZW5kaWYKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCS8qCisJICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bworCSAqIHJlLWRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKKwkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlCisJICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOworCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKKworCS8qIEVuYWJsZSBMRUQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCisJLyoKKwkgKiBjaGVjayB0aGUgaC93IHJma2lsbCBzdGF0ZSBvbiByZXN1bWUKKwkgKiBhbmQgc3RhcnQgdGhlIHJma2lsbCBwb2xsIHRpbWVyCisJICovCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aF9wY2lfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRoX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiYXRoOWsiLAorCS5pZF90YWJsZSAgID0gYXRoX3BjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgICA9IGF0aF9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgPSBhdGhfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICA9IGF0aF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aF9wY2lfcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworfTsKKworaW50IGF0aF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CisKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCmluZGV4IDc2Njk4MmEuLmUxNDk0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCkBAIC0xNCwyMiArMTQsMTcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHZvaWQKLWF0aDlrX2h3X3dyaXRlX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgbW9kZXNJbmRleCwgdTMyIGZyZXFJbmRleCwKK2F0aDlrX2h3X3dyaXRlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiBtb2Rlc0luZGV4LCB1MzIgZnJlcUluZGV4LAogCQkgICAgaW50IHJlZ1dyaXRlcykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaUJCX1JmR2FpbiwgZnJlcUluZGV4LCByZWdXcml0ZXMpOworCVJFR19XUklURV9BUlJBWSgmYWgtPmluaUJCX1JmR2FpbiwgZnJlcUluZGV4LCByZWdXcml0ZXMpOwogfQogCiBib29sCi1hdGg5a19od19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBjaGFubmVsU2VsID0gMDsKIAl1MzIgYk1vZGVTeW50aCA9IDA7CkBAIC05NSwxNSArOTAsMTQgQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZKDB4MzcpLCByZWczMik7CiAKLQlhaC0+YWhfY3VyY2hhbiA9IGNoYW47Ci0KLQlBSDU0MTYoYWgpLT5haF9jdXJjaGFuUmFkSW5kZXggPSAtMTsKKwlhaC0+Y3VyY2hhbiA9IGNoYW47CisJYWgtPmN1cmNoYW5fcmFkX2luZGV4ID0gLTE7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbAotYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2F0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MTYgYk1vZGUsIGZyYWNNb2RlLCBhTW9kZVJlZlNlbCA9IDA7CkBAIC0xMzgsMjAgKzEzMiwyNyBAQAogCQliTW9kZSA9IDA7CiAJCWZyYWNNb2RlID0gMDsKIAotCQlpZiAoKGZyZXEgJSAyMCkgPT0gMCkgewotCQkJYU1vZGVSZWZTZWwgPSAzOwotCQl9IGVsc2UgaWYgKChmcmVxICUgMTApID09IDApIHsKLQkJCWFNb2RlUmVmU2VsID0gMjsKLQkJfSBlbHNlIHsKKwkJc3dpdGNoKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfRlJBQ19OXzVHKSkgeworCQljYXNlIDA6CisJCQlpZiAoKGZyZXEgJSAyMCkgPT0gMCkgeworCQkJCWFNb2RlUmVmU2VsID0gMzsKKwkJCX0gZWxzZSBpZiAoKGZyZXEgJSAxMCkgPT0gMCkgeworCQkJCWFNb2RlUmVmU2VsID0gMjsKKwkJCX0KKwkJCWlmIChhTW9kZVJlZlNlbCkKKwkJCQlicmVhazsKKwkJY2FzZSAxOgorCQlkZWZhdWx0OgogCQkJYU1vZGVSZWZTZWwgPSAwOwotCiAJCQlmcmFjTW9kZSA9IDE7CiAJCQlyZWZEaXZBID0gMTsKIAkJCWNoYW5uZWxTZWwgPSAoZnJlcSAqIDB4ODAwMCkgLyAxNTsKIAogCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fU1lOVEg5LAogCQkJCSAgICAgIEFSX0FOX1NZTlRIOV9SRUZESVZBLCByZWZEaXZBKTsKKwogCQl9CisKIAkJaWYgKCFmcmFjTW9kZSkgewogCQkJbmRpdiA9IChmcmVxICogKHJlZkRpdkEgPj4gYU1vZGVSZWZTZWwpKSAvIDYwOwogCQkJY2hhbm5lbFNlbCA9IG5kaXYgJiAweDFmZjsKQEAgLTE2Niw5ICsxNjcsOCBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1lOVEhfQ09OVFJPTCwgcmVnMzIpOwogCi0JYWgtPmFoX2N1cmNoYW4gPSBjaGFuOwotCi0JQUg1NDE2KGFoKS0+YWhfY3VyY2hhblJhZEluZGV4ID0gLTE7CisJYWgtPmN1cmNoYW4gPSBjaGFuOworCWFoLT5jdXJjaGFuX3JhZF9pbmRleCA9IC0xOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0yMDEsMTEgKzIwMSw5IEBACiB9CiAKIGJvb2wKLWF0aDlrX2h3X3NldF9yZl9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCithdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCSAgICAgdTE2IG1vZGVzSW5kZXgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCXUzMiBlZXBNaW5vclJldjsKIAl1MzIgb2I1R0h6ID0gMCwgZGI1R0h6ID0gMDsKIAl1MzIgb2IyR0h6ID0gMCwgZGIyR0h6ID0gMDsKQEAgLTIxNCwxNjEgKzIxMiwxNTYgQEAKIAlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuIHRydWU7CiAKLQllZXBNaW5vclJldiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpOworCWVlcE1pbm9yUmV2ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSwgJmFocC0+YWhfaW5pQmFuazAsIDEpOworCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmswRGF0YSwgJmFoLT5pbmlCYW5rMCwgMSk7CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazFEYXRhLCAmYWhwLT5haF9pbmlCYW5rMSwgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazFEYXRhLCAmYWgtPmluaUJhbmsxLCAxKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEsICZhaHAtPmFoX2luaUJhbmsyLCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMkRhdGEsICZhaC0+aW5pQmFuazIsIDEpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSwgJmFocC0+YWhfaW5pQmFuazMsCisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazNEYXRhLCAmYWgtPmluaUJhbmszLAogCQkgICAgICBtb2Rlc0luZGV4KTsKIAl7CiAJCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlCYW5rNlRQQy5pYV9yb3dzOyBpKyspIHsKLQkJCWFocC0+YWhfYW5hbG9nQmFuazZEYXRhW2ldID0KLQkJCSAgICBJTklfUkEoJmFocC0+YWhfaW5pQmFuazZUUEMsIGksIG1vZGVzSW5kZXgpOworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaUJhbms2VFBDLmlhX3Jvd3M7IGkrKykgeworCQkJYWgtPmFuYWxvZ0Jhbms2RGF0YVtpXSA9CisJCQkgICAgSU5JX1JBKCZhaC0+aW5pQmFuazZUUEMsIGksIG1vZGVzSW5kZXgpOwogCQl9CiAJfQogCiAJaWYgKGVlcE1pbm9yUmV2ID49IDIpIHsKIAkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQkJb2IyR0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX09CXzIpOwotCQkJZGIyR0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX0RCXzIpOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlvYjJHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09CXzIpOworCQkJZGIyR0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQl8yKTsKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBvYjJHSHosIDMsIDE5NywgMCk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBkYjJHSHosIDMsIDE5NCwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlvYjVHSHogPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT0JfNSk7Ci0JCQlkYjVHSHogPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfREJfNSk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCW9iNUdIeiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0JfNSk7CisJCQlkYjVHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0RCXzUpOworCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWgtPmFuYWxvZ0Jhbms2RGF0YSwKIAkJCQkJCSAgIG9iNUdIeiwgMywgMjAzLCAwKTsKLQkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhLAorCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWgtPmFuYWxvZ0Jhbms2RGF0YSwKIAkJCQkJCSAgIGRiNUdIeiwgMywgMjAwLCAwKTsKIAkJfQogCX0KIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEsICZhaHAtPmFoX2luaUJhbms3LCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rN0RhdGEsICZhaC0+aW5pQmFuazcsIDEpOwogCi0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYWgtPmFuYWxvZ0JhbmswRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsxLCBhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMSwgYWgtPmFuYWxvZ0JhbmsxRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMiwgYWgtPmFuYWxvZ0JhbmsyRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rMywgYWgtPmFuYWxvZ0JhbmszRGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rNlRQQywgYWgtPmFuYWxvZ0Jhbms2RGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7Ci0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSwKKwlSRUdfV1JJVEVfUkZfQVJSQVkoJmFoLT5pbmlCYW5rNywgYWgtPmFuYWxvZ0Jhbms3RGF0YSwKIAkJCSAgIHJlZ1dyaXRlcyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZAotYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQorYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazBEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazBEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmswRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rMERhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazFEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmsxRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rMURhdGEpOworCQlhaC0+YW5hbG9nQmFuazFEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rMkRhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazJEYXRhKTsKKwkJYWgtPmFuYWxvZ0JhbmsyRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazNEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazNEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmszRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rM0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazZEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0Jhbms2RGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rNkRhdGEpOworCQlhaC0+YW5hbG9nQmFuazZEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazZUUENEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazZUUENEYXRhKTsKKwkJYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazdEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazdEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms3RGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rN0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hZGRhYzU0MTZfMjEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FkZGFjNTQxNl8yMSk7Ci0JCWFocC0+YWhfYWRkYWM1NDE2XzIxID0gTlVMTDsKKwlpZiAoYWgtPmFkZGFjNTQxNl8yMSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hZGRhYzU0MTZfMjEpOworCQlhaC0+YWRkYWM1NDE2XzIxID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYmFuazZUZW1wICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9iYW5rNlRlbXApOwotCQlhaHAtPmFoX2Jhbms2VGVtcCA9IE5VTEw7CisJaWYgKGFoLT5iYW5rNlRlbXAgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YmFuazZUZW1wKTsKKwkJYWgtPmJhbms2VGVtcCA9IE5VTEw7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgKnN0YXR1cykKK2Jvb2wgYXRoOWtfaHdfaW5pdF9yZihzdHJ1Y3QgYXRoX2h3ICphaCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlhaC0+YW5hbG9nQmFuazBEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmswLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0JhbmsxRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMS5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rMkRhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazIuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazNEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmszLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0Jhbms2RGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazZUUEMuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazdEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbms3LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKIAotCQlhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazAuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazEuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazIuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazMuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazYuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazZUUEMuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSA9Ci0JCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCi0JCQkgICAgIGFocC0+YWhfaW5pQmFuazcuaWFfcm93cyksIEdGUF9LRVJORUwpOwotCi0JCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSA9PSBOVUxMCi0JCSAgICB8fCBhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSA9PSBOVUxMKSB7CisJCWlmIChhaC0+YW5hbG9nQmFuazBEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rMURhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0JhbmsyRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazNEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rNkRhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazdEYXRhID09IE5VTEwpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAogCQkJCSJDYW5ub3QgYWxsb2NhdGUgUkYgYmFua3NcbiIpOwogCQkJKnN0YXR1cyA9IC1FTk9NRU07CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAotCQlhaHAtPmFoX2FkZGFjNTQxNl8yMSA9CisJCWFoLT5hZGRhYzU0MTZfMjEgPQogCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUFkZGFjLmlhX3Jvd3MgKgotCQkJICAgICBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFocC0+YWhfYWRkYWM1NDE2XzIxID09IE5VTEwpIHsKKwkJCSAgICAgYWgtPmluaUFkZGFjLmlhX3Jvd3MgKgorCQkJICAgICBhaC0+aW5pQWRkYWMuaWFfY29sdW1ucyksIEdGUF9LRVJORUwpOworCQlpZiAoYWgtPmFkZGFjNTQxNl8yMSA9PSBOVUxMKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiQ2Fubm90IGFsbG9jYXRlIGFoX2FkZGFjNTQxNl8yMVxuIik7CisJCQkJIkNhbm5vdCBhbGxvY2F0ZSBhZGRhYzU0MTZfMjFcbiIpOwogCQkJKnN0YXR1cyA9IC1FTk9NRU07CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAotCQlhaHAtPmFoX2Jhbms2VGVtcCA9CisJCWFoLT5iYW5rNlRlbXAgPQogCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFocC0+YWhfYmFuazZUZW1wID09IE5VTEwpIHsKKwkJCSAgICAgYWgtPmluaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFoLT5iYW5rNlRlbXAgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkNhbm5vdCBhbGxvY2F0ZSBhaF9iYW5rNlRlbXBcbiIpOworCQkJCSJDYW5ub3QgYWxsb2NhdGUgYmFuazZUZW1wXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CkBAIC0zNzgsMjQgKzM3MSwyMyBAQAogfQogCiB2b2lkCi1hdGg5a19od19kZWNyZWFzZV9jaGFpbl9wb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCWludCBpLCByZWdXcml0ZXMgPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIGJhbms2U2VsTWFzazsKLQl1MzIgKmJhbms2VGVtcCA9IGFocC0+YWhfYmFuazZUZW1wOworCXUzMiAqYmFuazZUZW1wID0gYWgtPmJhbms2VGVtcDsKIAotCXN3aXRjaCAoYWhwLT5haF9kaXZlcnNpdHlDb250cm9sKSB7CisJc3dpdGNoIChhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wpIHsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9BOgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFocC0+Ci0JCSAgICAgYWhfYW50ZW5uYVN3aXRjaFN3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8wIDoKKwkJICAgIChhaC0+CisJCSAgICAgYW50ZW5uYV9zd2l0Y2hfc3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzAgOgogCQkgICAgUkVEVUNFX0NIQUlOXzE7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfQU5UX0ZJWEVEX0I6CiAJCWJhbms2U2VsTWFzayA9Ci0JCSAgICAoYWhwLT4KLQkJICAgICBhaF9hbnRlbm5hU3dpdGNoU3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzEgOgorCQkgICAgKGFoLT4KKwkJICAgICBhbnRlbm5hX3N3aXRjaF9zd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMSA6CiAJCSAgICBSRURVQ0VfQ0hBSU5fMDsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19BTlRfVkFSSUFCTEU6CkBAIC00MDYsOCArMzk4LDggQEAKIAkJYnJlYWs7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQmFuazYuaWFfcm93czsgaSsrKQotCQliYW5rNlRlbXBbaV0gPSBhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YVtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaUJhbms2LmlhX3Jvd3M7IGkrKykKKwkJYmFuazZUZW1wW2ldID0gYWgtPmFuYWxvZ0Jhbms2RGF0YVtpXTsKIAogCVJFR19XUklURShhaCwgQVJfUEhZX0JBU0UgKyAweEQ4LCBiYW5rNlNlbE1hc2spOwogCkBAIC00MjEsNyArNDEzLDcgQEAKIAlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihiYW5rNlRlbXAsIDEsIDEsIDI0NiwgMCk7CiAJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYmFuazZUZW1wLCAxLCAxLCAyNDcsIDApOwogCi0JUkVHX1dSSVRFX1JGX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2LCBiYW5rNlRlbXAsIHJlZ1dyaXRlcyk7CisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazYsIGJhbms2VGVtcCwgcmVnV3JpdGVzKTsKIAogCVJFR19XUklURShhaCwgQVJfUEhZX0JBU0UgKyAweEQ4LCAweDAwMDAwMDUzKTsKICNpZmRlZiBBTFRFUl9TV0lUQ0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmgKaW5kZXggM2E0MDZhNS4uMWVhYzhjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGh5LmgKQEAgLTE3LDE5ICsxNywxOSBAQAogI2lmbmRlZiBQSFlfSAogI2RlZmluZSBQSFlfSAogCi1ib29sIGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitib29sIGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwKIAkJCQkgKmNoYW4pOwotYm9vbCBhdGg5a19od19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitib29sIGF0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci12b2lkIGF0aDlrX2h3X3dyaXRlX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgbW9kZXNJbmRleCwKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG1vZGVzSW5kZXgsCiAJCQkgdTMyIGZyZXFJbmRleCwgaW50IHJlZ1dyaXRlcyk7Ci1ib29sIGF0aDlrX2h3X3NldF9yZl9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJICB1MTYgbW9kZXNJbmRleCk7Ci12b2lkIGF0aDlrX2h3X2RlY3JlYXNlX2NoYWluX3Bvd2VyKHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfaW5pdF9yZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgaW50ICpzdGF0dXMpOwogCiAjZGVmaW5lIEFSX1BIWV9CQVNFICAgICAweDk4MDAKQEAgLTM4Nyw2ICszODcsOCBAQAogCiAjZGVmaW5lIEFSX1BIWV9DQ0tfVFhfQ1RSTCAgICAgICAweEEyMDQKICNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX0pBUEFOIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0sgICAgICAgICAweDAwMDAwMDBDCisjZGVmaW5lIEFSX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLX1MgICAgICAgMgogCiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhBMjA4CiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0sgICAgICAgICAgMHgwMDAwMDAzRgpAQCAtNDQ0LDYgKzQ0NiwzMiBAQAogI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMyAgICAweDAwMzAwMDAwCiAjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zX1MgIDIwCiAKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9DQUxfRU5BQkxFICAgMHgwMDQwMDAwMAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEVfUyAyMgorCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNCAgICAgICAweGEyNjQKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX1ZBTElEICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19WQUxJRF9TICAgMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUICAgICAgIDB4MDAwMDAxRkUKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX09VVF9TICAgICAxCisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw2XzAgICAgIDB4YTI3MAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDZfMSAgICAgMHhiMjcwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERSAgICAgMHgwMzAwMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREVfUyAgIDI0CisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw3ICAgICAgIDB4YTI3NAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU4gICAgIDB4MDFGODAwMDAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfSU5JVF9UWF9HQUlOX1MgICAxOQorCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOSAgICAgICAweGEyN0MKKyNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLICAgICAgICAweDAwMDA3QzAwCisjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDS19TICAgICAgMTAKKworI2RlZmluZSBBUl9QSFlfVFhfR0FJTl9UQkwxICAgICAgMHhhMzAwCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOICAgICAgICAgICAgICAgICAgICAgMHgwMDA3RjAwMAorI2RlZmluZSBBUl9QSFlfVFhfR0FJTl9TICAgICAgICAgICAgICAgICAgIDEyCisKICNkZWZpbmUgQVJfUEhZX1ZJVF9NQVNLMl9NXzQ2XzYxIDB4YTNhMAogI2RlZmluZSBBUl9QSFlfTUFTSzJfTV8zMV80NSAgICAgMHhhM2E0CiAjZGVmaW5lIEFSX1BIWV9NQVNLMl9NXzE2XzMwICAgICAweGEzYTgKQEAgLTQ4NSw2ICs1MTMsMTEgQEAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQgICAgMHgwRkMwMDAwMAogI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNF9TICAyMgogCisvKiBDYXJyaWVyIGxlYWsgY2FsaWJyYXRpb24gY29udHJvbCwgZG8gaXQgYWZ0ZXIgQUdDIGNhbGlicmF0aW9uICovCisjZGVmaW5lIEFSX1BIWV9DTF9DQUxfQ1RMICAgICAgIDB4QTM1OAorI2RlZmluZSBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BIWV9QQVJBTExFTF9DQUxfRU5BQkxFICAgIDB4MDAwMDAwMDEKKwogI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTUgICAweEEzOEMKICNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU2ICAgMHhBMzkwCiAKQEAgLTUzMCwxMCArNTYzLDggQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBBVEg5S19LRVlfWE9SICAgICAgICAgICAgICAgICAweGFhCi0KICNkZWZpbmUgQVRIOUtfSVNfTUlDX0VOQUJMRUQoYWgpCQkJCQlcCi0JKEFINTQxNihhaCktPmFoX3N0YUlkMURlZmF1bHRzICYgQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEUpCisJKChhaCktPnN0YV9pZDFfZGVmYXVsdHMgJiBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRSkKIAogI2RlZmluZSBBTlRTV0FQX0FCIDB4MDAwMQogI2RlZmluZSBSRURVQ0VfQ0hBSU5fMCAweDAwMDAwMDUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYwppbmRleCAxYjcxYjkzLi44MzI3MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMKQEAgLTE1LDE2ICsxNSwxNSBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmFfcmF0ZXRhYmxlID0gewogCTQyLAotCXswfSwKIAl7CiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCiAJCQk1NDAwLCAweDBiLCAweDAwLCAxMiwKIAkJCTAsIDIsIDEsIDAsIDAsIDAsIDAsIDAgfSwKLQkJeyBWQUxJRCwJVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KKwkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsICAweDBmLCAweDAwLCAxOCwKIAkJCTAsIDMsIDEsIDEsIDEsIDEsIDEsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLwpAQCAtMTU4LDcgKzE1Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmdfcmF0ZXRhYmxlID0gewogCTQ2LAotCXswfSwKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzA2LDcgKzMwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYV9yYXRldGFibGUgPSB7CiAJOCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwgLyogNiBNYiAqLwogCQkJNTQwMCwgMHgwYiwgMHgwMCwgKDB4ODB8MTIpLApAQCAtMzQwLDcgKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExZ19yYXRldGFibGUgPSB7CiAJMTIsCi0JezB9LAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzg2LDcgKzM4Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7CiAJNCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCiAJCQk5MDAsIDB4MWIsICAweDAwLCAoMHg4MHwyKSwKQEAgLTYzNiw4ICs2MzEsNyBAQAogc3RhdGljIHU4IGF0aF9yY19yYXRlZmluZF9odChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIGludCBwcm9iZV9hbGxvd2VkLCBpbnQgKmlzX3Byb2JpbmcsCi0JCQkgICAgIGludCBpc19yZXRyeSkKKwkJCSAgICAgaW50ICppc19wcm9iaW5nKQogewogCXUzMiBkdCwgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7CkBAIC03MTksMTMgKzcxMyw2IEBACiAJfQogCiAJcmF0ZSA9IGJlc3RfcmF0ZTsKLQotCS8qIGlmIHdlIGFyZSByZXRyeWluZyBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIG51bWJlcgotCSAqIG9mIG1heCByZXRyaWVzLCB1c2UgdGhlIG1pbiByYXRlIGZvciB0aGUgbmV4dCByZXRyeQotCSAqLwotCWlmIChpc19yZXRyeSkKLQkJcmF0ZSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W21pbmluZGV4XTsKLQogCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKQEAgLTczMywxMyArNzIwLDEyIEBACiAJICogbm9uLW1vbm90aWNpdHkgb2YgMTFnJ3MgcmF0ZSB0YWJsZQogCSAqLwogCi0JaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSAmJiBwcm9iZV9hbGxvd2VkKSB7CisJaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSkgewogCQlyYXRlID0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeTsKIAogCQkvKiBQcm9iZSB0aGUgbmV4dCBhbGxvd2VkIHBoeSBzdGF0ZSAqLwotCQkvKiBGSVhNRTpYWFhYIENoZWNrIHRvIG1ha2Ugc3VyZSByYXRNYXggaXMgY2hlY2tlZCBwcm9wZXJseSAqLwogCQlpZiAoYXRoX3JjX2dldF9uZXh0dmFsaWRfdHhyYXRlKHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdiwgcmF0ZSwgJm5leHRfcmF0ZSkgJiYKKwkJCQkJYXRoX3JjX3ByaXYsIHJhdGUsICZuZXh0X3JhdGUpICYmCiAJCSAgICAobm93X21zZWMgLSBhdGhfcmNfcHJpdi0+cHJvYmVfdGltZSA+CiAJCSAgICAgcmF0ZV90YWJsZS0+cHJvYmVfaW50ZXJ2YWwpICYmCiAJCSAgICAoYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA+PSAxKSkgewpAQCAtNzYxLDE0ICs3NDcsMTcgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgLAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjLAogCQkJCSAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUpCiB7CiAJcmF0ZS0+Y291bnQgPSB0cmllczsKIAlyYXRlLT5pZHggPSByaXg7CiAKLQlpZiAocnRzY3RzZW5hYmxlKQorCWlmICh0eHJjLT5zaG9ydF9wcmVhbWJsZSkKKwkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTsKKwlpZiAodHhyYy0+cnRzIHx8IHJ0c2N0c2VuYWJsZSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwogCWlmIChXTEFOX1JDX1BIWV80MChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKQEAgLTc3OCw2ICs3NjcsNDMgQEAKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3J0c2N0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWludCBpID0gMCwgcml4ID0gMCwgY2l4LCBlbmFibGVfZ19wcm90ZWN0aW9uID0gMDsKKworCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7CisJCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCQlicmVhazsKKwkJfQorCX0KKwljaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uY3RybF9yYXRlOworCisJLyogQWxsIHByb3RlY3Rpb24gZnJhbWVzIGFyZSB0cmFuc21pdGVkIGF0IDJNYi9zIGZvciA4MDIuMTFnLAorCSAqIG90aGVyd2lzZSB3ZSB0cmFuc21pdCB0aGVtIGF0IDFNYi9zICovCisJaWYgKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgIWNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWVuYWJsZV9nX3Byb3RlY3Rpb24gPSAxOworCisJLyoKKwkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKKwkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KKwkgKi8KKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1BST1RFQ1RfRU5BQkxFKSAmJgorCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCisJICAgIChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5ID09IFdMQU5fUkNfUEhZX09GRE0gfHwKKwkgICAgIFdMQU5fUkNfUEhZX0hUKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKSkgeworCQlyYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOworCQljaXggPSByYXRlX3RhYmxlLT5pbmZvW2VuYWJsZV9nX3Byb3RlY3Rpb25dLmN0cmxfcmF0ZTsKKwl9CisKKwl0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPSBjaXg7Cit9CisKIHN0YXRpYyB1OCBhdGhfcmNfcmF0ZV9nZXRpZHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLApAQCAtODA5LDU0ICs4MzUsNTYgQEAKIAogc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVmaW5kKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICBpbnQgbnVtX3RyaWVzLCBpbnQgbnVtX3JhdGVzLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywgaW50ICppc19wcm9iZSwKLQkJCSAgICBpbnQgaXNfcmV0cnkpCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKKwlpbnQgaXNfcHJvYmUgPSAwOwogCiAJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQlyaXggPSBhdGhfcmNfcmF0ZWZpbmRfaHQoc2MsIGF0aF9yY19wcml2LCByYXRlX3RhYmxlLCAxLAotCQkJCSBpc19wcm9iZSwgaXNfcmV0cnkpOworCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAotCWlmICgqaXNfcHJvYmUpIHsKKwlpZiAoaXNfcHJvYmUpIHsKIAkJLyogc2V0IG9uZSB0cnkgZm9yIHByb2JlIHJhdGVzLiBGb3IgdGhlCiAJCSAqIHByb2JlcyBkb24ndCBlbmFibGUgcnRzICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCAxLCBucml4LCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKG51bV90cmllcy9udW1fcmF0ZXMpOworCQl0cnlfcGVyX3JhdGUgPSAoQVRIXzExTl9UWE1BWFRSWS80KTsKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsCi0JCQlhdGhfcmNfcHJpdiwgcmF0ZV90YWJsZSwgbnJpeCwgMSwgMCk7Ci0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKKwkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgdHJ5X3Blcl9yYXRlLCBucml4LCAwKTsKIAl9IGVsc2UgewotCQl0cnlfcGVyX3JhdGUgPSAobnVtX3RyaWVzL251bV9yYXRlcyk7CisJCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAorCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIG90aGVyIHJhdGVzIGZvciBtdWx0aXJhdGUgcmV0cnkgKi8KLQlmb3IgKCA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCWZvciAoIDsgaSA8IDQ7IGkrKykgewogCQl1OCB0cnlfbnVtOwogCQl1OCBtaW5fcmF0ZTsKIAotCQl0cnlfbnVtID0gKChpICsgMSkgPT0gbnVtX3JhdGVzKSA/Ci0JCQludW1fdHJpZXMgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSBudW1fcmF0ZXMpICYmIDApOworCQl0cnlfbnVtID0gKChpICsgMSkgPT0gNCkgPworCQkJQVRIXzExTl9UWE1BWFRSWSAtICh0cnlfcGVyX3JhdGUgKiBpKSA6IHRyeV9wZXJfcmF0ZSA7CisJCW1pbl9yYXRlID0gKCgoaSArIDEpID09IDQpICYmIDApOwogCiAJCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsIGF0aF9yY19wcml2LAogCQkJCQkgIHJhdGVfdGFibGUsIG5yaXgsIDEsIG1pbl9yYXRlKTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwotCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsCi0JCQkJICAgICAgICZyYXRlc1tpXSwgdHJ5X251bSwgbnJpeCwgMSk7CisJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAorCQkJCSAgICAgICB0cnlfbnVtLCBucml4LCAxKTsKIAl9CiAKIAkvKgpAQCAtODc1LDcgKzkwMyw3IEBACiAJICogYWJvdmUgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopICYmCi0JICAgIChzYy0+aHctPmNvbmYuaHQuZW5hYmxlZCkpIHsKKwkgICAgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpKSB7CiAJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5kb3QxMXJhdGU7CiAJCXU4IHBoeSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5waHk7CiAJCWlmIChpID09IDQgJiYKQEAgLTg4NSw2ICs5MTMsMjQgQEAKIAkJCXJhdGVzWzNdLmZsYWdzID0gcmF0ZXNbMl0uZmxhZ3M7CiAJCX0KIAl9CisKKwkvKgorCSAqIEZvcmNlIGhhcmR3YXJlIHRvIHVzZSBjb21wdXRlZCBkdXJhdGlvbiBmb3IgbmV4dAorCSAqIGZyYWdtZW50IGJ5IGRpc2FibGluZyBtdWx0aS1yYXRlIHJldHJ5LCB3aGljaAorCSAqIHVwZGF0ZXMgZHVyYXRpb24gYmFzZWQgb24gdGhlIG11bHRpLXJhdGUgZHVyYXRpb24gdGFibGUuCisJICoKKwkgKiBGSVhNRTogRml4IGR1cmF0aW9uCisJICovCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKKwkgICAgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSB8fAorCSAgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpKSB7CisJCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7CisJCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7CisJCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOworCX0KKworCS8qIFNldHVwIFJUUy9DVFMgKi8KKwlhdGhfcmNfcmF0ZV9zZXRfcnRzY3RzKHNjLCByYXRlX3RhYmxlLCB0eF9pbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoX3JjX3VwZGF0ZV9wZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCkBAIC0xMjIxLDYgKzEyNjcsOSBAQAogCQlhdGhfcmNfcHJpdi0+cGVyX2Rvd25fdGltZSA9IG5vd19tc2VjOwogCX0KIAorCWF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc2MsIHR4X3JhdGUsIHhyZXRyaWVzLCByZXRyaWVzLAorCQkJICAgICAgIGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIpOworCiAjdW5kZWYgQ0hLX1JTU0kKIH0KIApAQCAtMTMzOCwzNiArMTM4NywxOCBAQAogc3RhdGljIHZvaWQgYXRoX3JjX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQogewotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IE5VTEw7CiAJc3RydWN0IGF0aF9yYXRlc2V0ICpyYXRlc2V0ID0gJmF0aF9yY19wcml2LT5uZWdfcmF0ZXM7CiAJdTggKmh0X21jcyA9ICh1OCAqKSZhdGhfcmNfcHJpdi0+bmVnX2h0X3JhdGVzOwogCXU4IGksIGosIGssIGhpID0gMCwgaHRoaSA9IDA7CiAKLQkvKiBGSVhNRTogQWRob2MgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQkJYm9vbCBpc19jd180MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKLQkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKLQkJCQkJCSAgIGlzX2N3XzQwKTsKLQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KLQkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQl9Ci0KIAlpZiAoIXJhdGVfdGFibGUpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlJhdGUgdGFibGUgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJYXRoX3JjX3ByaXYtPmh0X2NhcCA9IChXTEFOX1JDX0hUX0ZMQUcgfCBXTEFOX1JDX0RTX0ZMQUcpOwotCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCi0JCQlhdGhfcmNfcHJpdi0+aHRfY2FwIHw9IFdMQU5fUkNfNDBfRkxBRzsKLQl9Ci0KIAkvKiBJbml0aWFsIHJhdGUgdGFibGUgc2l6ZS4gV2lsbCBjaGFuZ2UgZGVwZW5kaW5nCiAJICogb24gdGhlIHdvcmtpbmcgcmF0ZSBzZXQgKi8KIAlhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplID0gUkFURV9UQUJMRV9TSVpFOwpAQCAtMTM4Nyw3ICsxNDE4LDcgQEAKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWlkeFtpXVtqXSA9IDA7CiAJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWNudFtpXSA9IDA7CiAJfQotCWF0aF9yY19wcml2LT5yY19waHlfbW9kZSA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKTsKKwlhdGhfcmNfcHJpdi0+cmNfcGh5X21vZGUgPSBhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHOwogCiAJLyogU2V0IHN0cmVhbSBjYXBhYmlsaXR5ICovCiAJYXRoX3JjX3ByaXYtPnNpbmdsZV9zdHJlYW0gPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykgPyAwIDogMTsKQEAgLTEzOTUsMTYgKzE0MjYsMTYgQEAKIAlpZiAoIXJhdGVzZXQtPnJzX25yYXRlcykgewogCQkvKiBObyB3b3JraW5nIHJhdGUsIGp1c3QgaW5pdGlhbGl6ZSB2YWxpZCByYXRlcyAqLwogCQloaSA9IGF0aF9yY19pbml0X3ZhbGlkcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgIGF0aF9yY19wcml2LT5odF9jYXApOwogCX0gZWxzZSB7CiAJCS8qIFVzZSBpbnRlcnNlY3Rpb24gb2Ygd29ya2luZyByYXRlcyBhbmQgdmFsaWQgcmF0ZXMgKi8KIAkJaGkgPSBhdGhfcmNfc2V0dmFsaWRfcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICByYXRlc2V0LCBhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgcmF0ZXNldCwgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCWlmIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19IVF9GTEFHKSB7CiAJCQlodGhpID0gYXRoX3JjX3NldHZhbGlkX2h0cmF0ZXMoYXRoX3JjX3ByaXYsCi0JCQkJCQkJICAgcmF0ZV90YWJsZSwKLQkJCQkJCQkgICBodF9tY3MsCi0JCQkJCQkJICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CisJCQkJCQkgICAgICAgcmF0ZV90YWJsZSwKKwkJCQkJCSAgICAgICBodF9tY3MsCisJCQkJCQkgICAgICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCX0KIAkJaGkgPSBBX01BWChoaSwgaHRoaSk7CiAJfQpAQCAtMTQzMiw5ICsxNDYzLDM0IEBACiAJYXRoX3JjX3NvcnRfdmFsaWRyYXRlcyhyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdik7CiAJYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2stNF07CiAJc2MtPmN1cl9yYXRlX3RhYmxlID0gcmF0ZV90YWJsZTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiUkMgSW5pdGlhbGl6ZWQgd2l0aCBjYXBhYmlsaXRpZXM6IDB4JXhcbiIsCisJCWF0aF9yY19wcml2LT5odF9jYXApOwogfQogCi0vKiBSYXRlIENvbnRyb2wgY2FsbGJhY2tzICovCitzdGF0aWMgdTggYXRoX3JjX2J1aWxkX2h0X2NhcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgaXNfaHQsIGJvb2wgaXNfY3c0MCwKKwkJCSAgICAgICBib29sIGlzX3NnaTQwKQoreworCXU4IGNhcHMgPSAwOworCisJaWYgKGlzX2h0KSB7CisJCWNhcHMgPSBXTEFOX1JDX0hUX0ZMQUc7CisJCWlmIChzYy0+c2NfYWgtPmNhcHMudHhfY2hhaW5tYXNrICE9IDEgJiYKKwkJICAgIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfRFMsIDAsIE5VTEwpKQorCQkJY2FwcyB8PSBXTEFOX1JDX0RTX0ZMQUc7CisJCWlmIChpc19jdzQwKQorCQkJY2FwcyB8PSBXTEFOX1JDXzQwX0ZMQUc7CisJCWlmIChpc19zZ2k0MCkKKwkJCWNhcHMgfD0gV0xBTl9SQ19TR0lfRkxBRzsKKwl9CisKKwlyZXR1cm4gY2FwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFjODAyMTEgUmF0ZSBDb250cm9sIGNhbGxiYWNrcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhfc3RhdHVzKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjcsNyArMTUyMyw3IEBACiAJICovCiAJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfZmxhZ3MgJgogCSAgICAoQVRIOUtfVFhfREFUQV9VTkRFUlJVTiB8IEFUSDlLX1RYX0RFTElNX1VOREVSUlVOKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfdHhUcmlnTGV2ZWwpID49IGF0aF9yY19wcml2LT50eF90cmlnbGV2ZWxfbWF4KSkgeworCSAgICAoKHNjLT5zY19haC0+dHhfdHJpZ19sZXZlbCkgPj0gYXRoX3JjX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXgpKSB7CiAJCXR4X3N0YXR1cyA9IDE7CiAJCWlzX3VuZGVycnVuID0gMTsKIAl9CkBAIC0xNDgwLDYgKzE1MzYsMjMgQEAKIAkJCSAoaXNfdW5kZXJydW4pID8gQVRIXzExTl9UWE1BWFRSWSA6CiAJCQkgdHhfaW5mb19wcml2LT50eC50c19sb25ncmV0cnkpOwogCisJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYKKwkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMsIHRpZDsKKwkJCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwkJCWlmKGF0aF90eF9hZ2dyX2NoZWNrKHNjLCBhbiwgdGlkKSkKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzYy0+aHcsIGhkci0+YWRkcjEsIHRpZCk7CisJCX0KKwl9CisKKwlhdGhfZGVidWdfc3RhdF9yYyhzYywgc2tiKTsKIGV4aXQ6CiAJa2ZyZWUodHhfaW5mb19wcml2KTsKIH0KQEAgLTE0OTAsMTEgKzE1NjMsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGlzX3Byb2JlID0gMDsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCiAJLyogbG93ZXN0IHJhdGUgZm9yIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzICovCkBAIC0xNTA3LDIzICsxNTc4LDcgQEAKIAl9CiAKIAkvKiBGaW5kIHR4IHJhdGUgZm9yIHVuaWNhc3QgZnJhbWVzICovCi0JYXRoX3JjX3JhdGVmaW5kKHNjLCBhdGhfcmNfcHJpdiwgQVRIXzExTl9UWE1BWFRSWSwgNCwKLQkJCXR4X2luZm8sICZpc19wcm9iZSwgZmFsc2UpOwotCi0JLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCi0JaWYgKGh3LT5jb25mLmh0LmVuYWJsZWQpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCXU4ICpxYywgdGlkOwotCQkJc3RydWN0IGF0aF9ub2RlICphbjsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCQkJaWYoYXRoX3R4X2FnZ3JfY2hlY2soc2MsIGFuLCB0aWQpKQotCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKGh3LCBoZHItPmFkZHIxLCB0aWQpOwotCQl9Ci0JfQorCWF0aF9yY19yYXRlZmluZChzYywgYXRoX3JjX3ByaXYsIHR4cmMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLApAQCAtMTUzMSw2ICsxNTg2LDggQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaTQwOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xNTUyLDEyICsxNjA5LDcyIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEpOworCWlzX2N3NDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwlpc19zZ2k0MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkgeworCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIGlzX2N3NDApOworCX0gZWxzZSBpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJLyogY3VyX3JhdGVfdGFibGUgd291bGQgYmUgc2V0IG9uIGluaXQgdGhyb3VnaCBjb25maWcoKSAqLworCQlyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCX0KKworCWF0aF9yY19wcml2LT5odF9jYXAgPSBhdGhfcmNfYnVpbGRfaHRfY2FwcyhzYywgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkLAorCQkJCQkJICAgaXNfY3c0MCwgaXNfc2dpNDApOworCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9yYXRlX3VwZGF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIG9wZXJfY3c0MCA9IGZhbHNlLCBvcGVyX3NnaTQwOworCWJvb2wgbG9jYWxfY3c0MCA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX3NnaTQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKworCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuOworCisJCWlmIChzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKKwkJICAgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQl0cnVlIDogZmFsc2U7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIG9wZXJfY3c0MCk7CisJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsCisJCQkJCQkgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQsCisJCQkJCQkgICBvcGVyX2N3NDAsIG9wZXJfc2dpNDApOworCQkJYXRoX3JjX2luaXQoc2MsIHByaXZfc3RhLCBzYmFuZCwgc3RhLCByYXRlX3RhYmxlKTsKKworCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCQkJIk9wZXJhdGluZyBIVCBCYW5kd2lkdGggY2hhbmdlZCB0bzogJWRcbiIsCisJCQkJc2MtPmh3LT5jb25mLmNoYW5uZWxfdHlwZSk7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyB2b2lkICphdGhfcmF0ZV9hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKIHsKLQlyZXR1cm4gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXJldHVybiBhcGh5LT5zYzsKIH0KIAogc3RhdGljIHZvaWQgYXRoX3JhdGVfZnJlZSh2b2lkICpwcml2KQpAQCAtMTU3OCw3ICsxNjk1LDcgQEAKIAl9CiAKIAlyYXRlX3ByaXYtPnJzc2lfZG93bl90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmFoX2NhcHMudHhfdHJpZ2xldmVsX21heDsKKwlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmNhcHMudHhfdHJpZ2xldmVsX21heDsKIAogCXJldHVybiByYXRlX3ByaXY7CiB9CkBAIC0xNTk2LDQxICsxNzEzLDEzIEBACiAJLnR4X3N0YXR1cyA9IGF0aF90eF9zdGF0dXMsCiAJLmdldF9yYXRlID0gYXRoX2dldF9yYXRlLAogCS5yYXRlX2luaXQgPSBhdGhfcmF0ZV9pbml0LAorCS5yYXRlX3VwZGF0ZSA9IGF0aF9yYXRlX3VwZGF0ZSwKIAkuYWxsb2MgPSBhdGhfcmF0ZV9hbGxvYywKIAkuZnJlZSA9IGF0aF9yYXRlX2ZyZWUsCiAJLmFsbG9jX3N0YSA9IGF0aF9yYXRlX2FsbG9jX3N0YSwKIAkuZnJlZV9zdGEgPSBhdGhfcmF0ZV9mcmVlX3N0YSwKIH07CiAKLXN0YXRpYyB2b2lkIGF0aF9zZXR1cF9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0JCXJhdGVfdGFibGUtPnJhdGVDb2RlVG9JbmRleFtpXSA9ICh1OCktMTsKLQotCWZvciAoaSA9IDA7IGkgPCByYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7Ci0JCXU4IGNvZGUgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlOwotCQl1OCBjaXggPSByYXRlX3RhYmxlLT5pbmZvW2ldLmN0cmxfcmF0ZTsKLQkJdTggc2ggPSByYXRlX3RhYmxlLT5pbmZvW2ldLnNob3J0X3ByZWFtYmxlOwotCi0JCXJhdGVfdGFibGUtPnJhdGVDb2RlVG9JbmRleFtjb2RlXSA9IGk7Ci0JCXJhdGVfdGFibGUtPnJhdGVDb2RlVG9JbmRleFtjb2RlIHwgc2hdID0gaTsKLQotCQlyYXRlX3RhYmxlLT5pbmZvW2ldLmxwQWNrRHVyYXRpb24gPQotCQkJYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICBXTEFOX0NUUkxfRlJBTUVfU0laRSwKLQkJCQkJICAgICAgIGNpeCwKLQkJCQkJICAgICAgIGZhbHNlKTsKLQkJcmF0ZV90YWJsZS0+aW5mb1tpXS5zcEFja0R1cmF0aW9uID0KLQkJCWF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLAotCQkJCQkgICAgICAgV0xBTl9DVFJMX0ZSQU1FX1NJWkUsCi0JCQkJCSAgICAgICBjaXgsCi0JCQkJCSAgICAgICB0cnVlKTsKLQl9Ci19Ci0KIHZvaWQgYXRoX3JhdGVfYXR0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFCXSA9CkBAIC0xNjUxLDEyICsxNzQwLDYgQEAKIAkJJmFyNTQxNl8xMW5nX3JhdGV0YWJsZTsKIAlzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTXSA9CiAJCSZhcjU0MTZfMTFuZ19yYXRldGFibGU7Ci0KLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMWJfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMWFfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMWdfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMW5hX3JhdGV0YWJsZSk7Ci0JYXRoX3NldHVwX3JhdGVfdGFibGUoc2MsICZhcjU0MTZfMTFuZ19yYXRldGFibGUpOwogfQogCiBpbnQgYXRoX3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmgKaW5kZXggOTdjNjBkMS4uZGI5YjBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oCkBAIC0xOSwxMyArMTksMTIgQEAKICNpZm5kZWYgUkNfSAogI2RlZmluZSBSQ19ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCiBzdHJ1Y3QgYXRoX3NvZnRjOwogCiAjZGVmaW5lIEFUSF9SQVRFX01BWCAgICAgMzAKICNkZWZpbmUgUkFURV9UQUJMRV9TSVpFICA2NAogI2RlZmluZSBNQVhfVFhfUkFURV9QSFkgIDQ4CisjZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQogCiAvKiBWQUxJRF9BTEwgLSB2YWxpZCBmb3IgMjAvNDAvTGVnYWN5LAogICogVkFMSUQgLSBMZWdhY3kgb25seSwKQEAgLTM5LDYgKzM4LDIwIEBACiAjZGVmaW5lIFZBTElEXzIwNDAgKFZBTElEXzIwfFZBTElEXzQwKQogI2RlZmluZSBWQUxJRF9BTEwgIChWQUxJRF8yMDQwfFZBTElEKQogCitlbnVtIHsKKwlXTEFOX1JDX1BIWV9PRkRNLAorCVdMQU5fUkNfUEhZX0NDSywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9EUywKKwlXTEFOX1JDX1BIWV9IVF80MF9TUywKKwlXTEFOX1JDX1BIWV9IVF80MF9EUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCisJV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKKwlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCisJV0xBTl9SQ19QSFlfTUFYCit9OworCiAjZGVmaW5lIFdMQU5fUkNfUEhZX0RTKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCkBAIC05MCw3ICsxMDMsNiBAQAogICovCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgewogCWludCByYXRlX2NudDsKLQl1OCByYXRlQ29kZVRvSW5kZXhbMjU2XTsKIAlzdHJ1Y3QgewogCQlpbnQgdmFsaWQ7CiAJCWludCB2YWxpZF9zaW5nbGVfc3RyZWFtOwpAQCAtMTA4LDggKzEyMCw2IEBACiAJCXU4IHNnaV9pbmRleDsKIAkJdTggaHRfaW5kZXg7CiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwotCQl1MTYgbHBBY2tEdXJhdGlvbjsKLQkJdTE2IHNwQWNrRHVyYXRpb247CiAJfSBpbmZvW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiByc3NpX3JlZHVjZV9pbnRlcnZhbDsKQEAgLTE4NCwxMSArMTk0LDE5IEBACiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CiB9OwogCitlbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgeworCUFUSDlLX05PVF9JTlRFUk5BTCwKKwlBVEg5S19JTlRfUEFVU0UsCisJQVRIOUtfSU5UX1VOUEFVU0UKK307CisKIHN0cnVjdCBhdGhfdHhfaW5mb19wcml2IHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwogCWludCBuX2ZyYW1lczsKIAlpbnQgbl9iYWRfZnJhbWVzOwogCWJvb2wgdXBkYXRlX3JjOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOwogfTsKIAogI2RlZmluZSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYwppbmRleCA0NjJlMDhjLi4wYmJhMTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVjdi5jCkBAIC0xNCw3ICsxNCwyOCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2h3ICogYXRoX2dldF92aXJ0X2h3KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+cHJpX3dpcGh5LT5odzsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMSwgYXBoeS0+aHctPndpcGh5LT5wZXJtX2FkZHIpCisJCSAgICA9PSAwKSB7CisJCQlodyA9IGFwaHktPmh3OworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gaHc7Cit9CiAKIC8qCiAgKiBTZXR1cCBhbmQgbGluayBkZXNjcmlwdG9ycy4KQEAgLTI2LDcgKzQ3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgYXRoX3J4X2J1Zl9saW5rKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfZGVzYyAqZHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtNzksNyArMTAwLDcgQEAKIAlyZXR1cm4gKHRzZiAmIH4weDdmZmYpIHwgcnN0YW1wOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXRoX3J4YnVmX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MzIgbGVuLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUzMiBvZmY7CkBAIC05NywxMSArMTE4LDExIEBACiAJICogVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHdlIG1heSBnZXQgOCBLQiBoZXJlIGZyb20gdGhlCiAJICoga2VybmVsLi4uIGFuZCB0aGF0IGlzIGFjdHVhbGx5IHdoYXQgaXMgb2JzZXJ2ZWQgb24gc29tZQogCSAqIHN5c3RlbXMgOiggKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHNjLT5zY19jYWNoZWxzeiAtIDEpOworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4gKyBzYy0+Y2FjaGVsc3ogLSAxLCBnZnBfbWFzayk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7Ci0JCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIHNjLT5zY19jYWNoZWxzejsKKwkJb2ZmID0gKCh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEpICUgc2MtPmNhY2hlbHN6OwogCQlpZiAob2ZmICE9IDApCi0JCQlza2JfcmVzZXJ2ZShza2IsIHNjLT5zY19jYWNoZWxzeiAtIG9mZik7CisJCQlza2JfcmVzZXJ2ZShza2IsIHNjLT5jYWNoZWxzeiAtIG9mZik7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJza2J1ZmYgYWxsb2Mgb2Ygc2l6ZSAldSBmYWlsZWRcbiIsIGxlbik7CkBAIC0xMjMsMTAgKzE0NCwxMiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTggcmF0ZWNvZGU7CiAJX19sZTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCW1lbXNldChyeF9zdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykpOworCWh3ID0gYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpOwogCiAJaWYgKGRzLT5kc19yeHN0YXQucnNfbW9yZSkgewogCQkvKgpAQCAtMTM1LDcgKzE1OCw3IEBACiAJCSAqIGRpc2NhcmQgdGhlIGZyYW1lLiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUKIAkJICogZXJyb3IgZnJhbWVzIGluIE1vbml0b3IgbW9kZS4KIAkJICovCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCWdvdG8gcnhfbmV4dDsKIAl9IGVsc2UgaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICE9IDApIHsKIAkJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfQ1JDKQpAQCAtMTYxLDcgKzE4NCw3IEBACiAJCSAqIGRlY3J5cHRpb24gYW5kIE1JQyBmYWlsdXJlcy4gRm9yIG1vbml0b3IgbW9kZSwKIAkJICogd2UgYWxzbyBpZ25vcmUgdGhlIENSQyBlcnJvci4KIAkJICovCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCQlpZiAoZHMtPmRzX3J4c3RhdC5yc19zdGF0dXMgJgogCQkJICAgIH4oQVRIOUtfUlhFUlJfREVDUllQVCB8IEFUSDlLX1JYRVJSX01JQyB8CiAJCQkgICAgICBBVEg5S19SWEVSUl9DUkMpKQpAQCAtMTg2LDcgKzIwOSw2IEBACiAJCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSByYXRlY29kZSAmIDB4N2Y7CiAJfSBlbHNlIHsKIAkJaW50IGkgPSAwLCBjdXJfYmFuZCwgbl9yYXRlczsKLQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAKIAkJY3VyX2JhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOwogCQluX3JhdGVzID0gc2MtPnNiYW5kc1tjdXJfYmFuZF0ubl9iaXRyYXRlczsKQEAgLTIwOCw5ICsyMzAsOSBAQAogCX0KIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IGF0aF9leHRlbmRfdHNmKHNjLCBkcy0+ZHNfcnhzdGF0LnJzX3RzdGFtcCk7Ci0Jcnhfc3RhdHVzLT5iYW5kID0gc2MtPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0Jcnhfc3RhdHVzLT5mcmVxID0gIHNjLT5ody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKLQlyeF9zdGF0dXMtPm5vaXNlID0gc2MtPnNjX2FuaS5zY19ub2lzZV9mbG9vcjsKKwlyeF9zdGF0dXMtPmJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOworCXJ4X3N0YXR1cy0+ZnJlcSA9IGh3LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCXJ4X3N0YXR1cy0+bm9pc2UgPSBzYy0+YW5pLm5vaXNlX2Zsb29yOwogCXJ4X3N0YXR1cy0+c2lnbmFsID0gcnhfc3RhdHVzLT5ub2lzZSArIGRzLT5kc19yeHN0YXQucnNfcnNzaTsKIAlyeF9zdGF0dXMtPmFudGVubmEgPSBkcy0+ZHNfcnhzdGF0LnJzX2FudGVubmE7CiAKQEAgLTIzMyw3ICsyNTUsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfb3Btb2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXUzMiByZmlsdCwgbWZpbHRbMl07CiAKIAkvKiBjb25maWd1cmUgcnggZmlsdGVyICovCkBAIC0yNDEsMTQgKzI2MywxNCBAQAogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCByZmlsdCk7CiAKIAkvKiBjb25maWd1cmUgYnNzaWQgbWFzayAqLwotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKLQkJYXRoOWtfaHdfc2V0YnNzaWRtYXNrKGFoLCBzYy0+c2NfYnNzaWRtYXNrKTsKKwlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCisJCWF0aDlrX2h3X3NldGJzc2lkbWFzayhzYyk7CiAKIAkvKiBjb25maWd1cmUgb3BlcmF0aW9uYWwgbW9kZSAqLwogCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7CiAKIAkvKiBIYW5kbGUgYW55IGxpbmstbGV2ZWwgYWRkcmVzcyBjaGFuZ2UuICovCi0JYXRoOWtfaHdfc2V0bWFjKGFoLCBzYy0+c2NfbXlhZGRyKTsKKwlhdGg5a19od19zZXRtYWMoYWgsIHNjLT5zY19haC0+bWFjYWRkcik7CiAKIAkvKiBjYWxjdWxhdGUgYW5kIGluc3RhbGwgbXVsdGljYXN0IGZpbHRlciAqLwogCW1maWx0WzBdID0gbWZpbHRbMV0gPSB+MDsKQEAgLTI2NywxMSArMjg5LDExIEBACiAJCXNwaW5fbG9ja19pbml0KCZzYy0+cngucnhidWZsb2NrKTsKIAogCQlzYy0+cnguYnVmc2l6ZSA9IHJvdW5kdXAoSUVFRTgwMjExX01BWF9NUERVX0xFTiwKLQkJCQkJICAgbWluKHNjLT5zY19jYWNoZWxzeiwKKwkJCQkJICAgbWluKHNjLT5jYWNoZWxzeiwKIAkJCQkJICAgICAgICh1MTYpNjQpKTsKIAogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgImNhY2hlbHN6ICV1IHJ4YnVmc2l6ZSAldVxuIiwKLQkJCXNjLT5zY19jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOworCQkJc2MtPmNhY2hlbHN6LCBzYy0+cnguYnVmc2l6ZSk7CiAKIAkJLyogSW5pdGlhbGl6ZSByeCBkZXNjcmlwdG9ycyAqLwogCkBAIC0yODQsMjIgKzMwNiwyMiBAQAogCQl9CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT5yeC5yeGJ1ZiwgbGlzdCkgewotCQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSk7CisJCQlza2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJYmYtPmJmX21wZHUgPSBza2I7Ci0JCQliZi0+YmZfYnVmX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLAorCQkJYmYtPmJmX2J1Zl9hZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAogCQkJCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsCisJCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwKIAkJCQkgIGJmLT5iZl9idWZfYWRkcikpKSB7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWCBpbml0XG4iKTsKKwkJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzYwLDI2ICszODIsMzkgQEAKIAkJfCBBVEg5S19SWF9GSUxURVJfTUNBU1Q7CiAKIAkvKiBJZiBub3QgYSBTVEEsIGVuYWJsZSBwcm9jZXNzaW5nIG9mIFByb2JlIFJlcXVlc3RzICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUTsKIAotCS8qIENhbid0IHNldCBIT1NUQVAgaW50byBwcm9taXNjb3VzIG1vZGUgKi8KLQlpZiAoKChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgJiYKKwkvKgorCSAqIFNldCBwcm9taXNjdW91cyBtb2RlIHdoZW4gRklGX1BST01JU0NfSU5fQlNTIGlzIGVuYWJsZWQgZm9yIHN0YXRpb24KKwkgKiBtb2RlIGludGVyZmFjZSBvciB3aGVuIGluIG1vbml0b3IgbW9kZS4gQVAgbW9kZSBkb2VzIG5vdCBuZWVkIHRoaXMKKwkgKiBzaW5jZSBpdCByZWNlaXZlcyBhbGwgaW4tQlNTIGZyYW1lcyBhbnl3YXkuCisJICovCisJaWYgKCgoc2MtPnNjX2FoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCiAJICAgICAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX1BST01JU0NfSU5fQlNTKSkgfHwKLQkgICAgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpKSB7CisJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX1BST007Ci0JCS8qID8/PyBUbyBwcmV2ZW50IGZyb20gc2VuZGluZyBBQ0sgKi8KLQkJcmZpbHQgJj0gfkFUSDlLX1JYX0ZJTFRFUl9VQ0FTVDsKLQl9CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0NPTlRST0wpCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9DT05UUk9MOworCisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAhKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSkKKwkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX01ZQkVBQ09OOworCWVsc2UKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX0JFQUNPTjsKIAotCS8qIElmIGluIEhPU1RBUCBtb2RlLCB3YW50IHRvIGVuYWJsZSByZWNlcHRpb24gb2YgUFNQT0xMIGZyYW1lcwotCSAgICYgYmVhY29uIGZyYW1lcyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmZpbHQgfD0gKEFUSDlLX1JYX0ZJTFRFUl9CRUFDT04gfCBBVEg5S19SWF9GSUxURVJfUFNQT0xMKTsKKwkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMgKi8KKwlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QU1BPTEw7CisKKwlpZiAoc2MtPnNlY193aXBoeSkgeworCQkvKiBUT0RPOiBvbmx5IG5lZWRlZCBpZiBtb3JlIHRoYW4gb25lIEJTU0lEIGlzIGluIHVzZSBpbgorCQkgKiBzdGF0aW9uL2FkaG9jIG1vZGUgKi8KKwkJLyogVE9ETzogZm9yIG9sZGVyIGNoaXBzLCBtYXkgbmVlZCB0byBhZGQgQVRIOUtfUlhfRklMVEVSX1BST00KKwkJICovCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEw7CisJfQogCiAJcmV0dXJuIHJmaWx0OwogCkBAIC0zODgsNyArNDIzLDcgQEAKIAogaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfYnVmICpiZiwgKnRiZjsKIAogCXNwaW5fbG9ja19iaCgmc2MtPnJ4LnJ4YnVmbG9jayk7CkBAIC00MTgsMTMgKzQ1MywxMiBAQAogCiBib29sIGF0aF9zdG9wcmVjdihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBzdG9wcGVkOwogCiAJYXRoOWtfaHdfc3RvcHBjdXJlY3YoYWgpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCAwKTsKIAlzdG9wcGVkID0gYXRoOWtfaHdfc3RvcGRtYXJlY3YoYWgpOwotCW1kZWxheSgzKTsgLyogM21zIGlzIGxvbmcgZW5vdWdoIGZvciAxIGZyYW1lICovCiAJc2MtPnJ4LnJ4bGluayA9IE5VTEw7CiAKIAlyZXR1cm4gc3RvcHBlZDsKQEAgLTQ0OSw3ICs0ODMsNyBAQAogCXN0cnVjdCBhdGhfZGVzYyAqZHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEwsICpyZXF1ZXVlX3NrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IGhkcmxlbiwgcGFkc2l6ZSwgcmV0dmFsOwogCWJvb2wgZGVjcnlwdF9lcnJvciA9IGZhbHNlOwpAQCAtNTI0LDkgKzU1OCw5IEBACiAJCSAqIDEuIGFjY2Vzc2luZyB0aGUgZnJhbWUKIAkJICogMi4gcmVxdWV1ZWluZyB0aGUgc2FtZSBidWZmZXIgdG8gaC93CiAJCSAqLwotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkciwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAogCQkJCXNjLT5yeC5idWZzaXplLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJRE1BX0ZST01fREVWSUNFKTsKIAogCQkvKgogCQkgKiBJZiB3ZSdyZSBhc2tlZCB0byBmbHVzaCByZWNlaXZlIHF1ZXVlLCBkaXJlY3RseQpAQCAtNTQ3LDcgKzU4MSw3IEBACiAKIAkJLyogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGFuIHNrYiB0byByZXF1ZXVlIG9uY2Ugd2UgYXJlIGRvbmUKIAkJICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBidWZmZXIncyBza2IgKi8KLQkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplKTsKKwkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplLCBHRlBfQVRPTUlDKTsKIAogCQkvKiBJZiB0aGVyZSBpcyBubyBtZW1vcnkgd2UgaWdub3JlIHRoZSBjdXJyZW50IFJYJ2QgZnJhbWUsCiAJCSAqIHRlbGwgaGFyZHdhcmUgaXQgY2FuIGdpdmUgdXMgYSBuZXcgZnJhbWUgdXNpbmcgdGhlIG9sZApAQCAtNTU3LDkgKzU5MSw5IEBACiAJCQlnb3RvIHJlcXVldWU7CiAKIAkJLyogVW5tYXAgdGhlIGZyYW1lICovCi0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkciwKKwkJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIsCiAJCQkJIHNjLT5yeC5idWZzaXplLAotCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCXNrYl9wdXQoc2tiLCBkcy0+ZHNfcnhzdGF0LnJzX2RhdGFsZW4pOwogCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQ09OVFJPTCk7CkBAIC01OTAsMjQgKzYyNCw1MiBAQAogCQkJICAgJiYgIWRlY3J5cHRfZXJyb3IgJiYgc2tiLT5sZW4gPj0gaGRybGVuICsgNCkgewogCQkJa2V5aXggPSBza2ItPmRhdGFbaGRybGVuICsgM10gPj4gNjsKIAotCQkJaWYgKHRlc3RfYml0KGtleWl4LCBzYy0+c2Nfa2V5bWFwKSkKKwkJCWlmICh0ZXN0X2JpdChrZXlpeCwgc2MtPmtleW1hcCkpCiAJCQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAJCX0KKwkJaWYgKGFoLT5zd19tZ210X2NyeXB0byAmJgorCQkgICAgKHJ4X3N0YXR1cy5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJCSAgICBpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkvKiBVc2Ugc29mdHdhcmUgZGVjcnlwdCBmb3IgbWFuYWdlbWVudCBmcmFtZXMuICovCisJCQlyeF9zdGF0dXMuZmxhZyAmPSB+UlhfRkxBR19ERUNSWVBURUQ7CisJCX0KIAogCQkvKiBTZW5kIHRoZSBmcmFtZSB0byBtYWM4MDIxMSAqLwotCQlfX2llZWU4MDIxMV9yeChzYy0+aHcsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCWlmIChoZHItPmFkZHIxWzVdICYgMHgwMSkgeworCQkJaW50IGk7CisJCQkvKgorCQkJICogRGVsaXZlciBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lcyB0byBhbGwgc3VpdGFibGUKKwkJCSAqIHZpcnR1YWwgd2lwaHlzLgorCQkJICovCisJCQkvKiBUT0RPOiBmaWx0ZXIgYmFzZWQgb24gY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJCQlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQkJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQkJCXN0cnVjdCBza19idWZmICpuc2tiOworCQkJCWlmIChhcGh5ID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJCW5za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQkJCWlmIChuc2tiKQorCQkJCQlfX2llZWU4MDIxMV9yeChhcGh5LT5odywgbnNrYiwKKwkJCQkJCSAgICAgICAmcnhfc3RhdHVzKTsKKwkJCX0KKwkJCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCAmcnhfc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERlbGl2ZXIgdW5pY2FzdCBmcmFtZXMgYmFzZWQgb24gcmVjZWl2ZXIgYWRkcmVzcyAqLworCQkJX19pZWVlODAyMTFfcngoYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpLCBza2IsCisJCQkJICAgICAgICZyeF9zdGF0dXMpOworCQl9CiAKIAkJLyogV2Ugd2lsbCBub3cgZ2l2ZSBoYXJkd2FyZSBvdXIgc2hpbnkgbmV3IGFsbG9jYXRlZCBza2IgKi8KIAkJYmYtPmJmX21wZHUgPSByZXF1ZXVlX3NrYjsKLQkJYmYtPmJmX2J1Zl9hZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHJlcXVldWVfc2tiLT5kYXRhLAorCQliZi0+YmZfYnVmX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCByZXF1ZXVlX3NrYi0+ZGF0YSwKIAkJCQkJIHNjLT5yeC5idWZzaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihzYy0+cGRldiwKKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LAogCQkJICBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQkJZGV2X2tmcmVlX3NrYl9hbnkocmVxdWV1ZV9za2IpOwogCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIFJYXG4iKTsKKwkJCQkiZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWFxuIik7CiAJCQlicmVhazsKIAkJfQogCQliZi0+YmZfZG1hY29udGV4dCA9IGJmLT5iZl9idWZfYWRkcjsKQEAgLTYyMiw2ICs2ODQsMTIgQEAKIAkJfSBlbHNlIHsKIAkJCXNjLT5yeC5yeG90aGVyYW50ID0gMDsKIAkJfQorCisJCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJCQkoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQkVBQ09OKSkgeworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX05FVFdPUktfU0xFRVApOworCQl9CiByZXF1ZXVlOgogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZzYy0+cngucnhidWYpOwogCQlhdGhfcnhfYnVmX2xpbmsoc2MsIGJmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmgKaW5kZXggOWZlZGI0OS4uZDg2ZTkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnLmgKQEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUgQVJfRE1BU0laRV81MTJCICAgICAgMHgwMDAwMDAwNwogCiAjZGVmaW5lIEFSX1RYQ0ZHICAgICAgICAgICAgIDB4MDAzMAotI2RlZmluZSBBUl9UWENGR19ETUFTWl9NQVNLICAweDAwMDAwMDAzCisjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaX01BU0sgIDB4MDAwMDAwMDcKICNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfNEIgICAgMAogI2RlZmluZSBBUl9UWENGR19ETUFTWl84QiAgICAxCiAjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaXzE2QiAgIDIKQEAgLTE1OCwxMyArMTU4LDYgQEAKICNkZWZpbmUgQVJfQ1NUX1RJTUVPVVRfTElNSVQgICAgICAweEZGRkYwMDAwCiAjZGVmaW5lIEFSX0NTVF9USU1FT1VUX0xJTUlUX1MgICAgMTYKIAotI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTEwMCAgICAgICAgICAgICAgICAgIDB4MDE0Ci0KLSNkZWZpbmUgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihfYWgpIFwKLQkoQVJfU1JFVl85MTAwKChfYWgpKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoX2FoKSkKLSNkZWZpbmUgQVJfU1JFVl81NDE2X1YyMl9PUl9MQVRFUihfYWgpIFwKLQkoQVJfU1JFVl85MTAwKChfYWgpKSB8fCBBUl9TUkVWXzU0MTZfMjJfT1JfTEFURVIoX2FoKSkKLQogI2RlZmluZSBBUl9JU1IgICAgICAgICAgICAgICAweDAwODAKICNkZWZpbmUgQVJfSVNSX1JYT0sgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9JU1JfUlhERVNDICAgICAgICAweDAwMDAwMDAyCkBAIC03MzMsNiArNzI2LDcgQEAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzEwICAgICAgICAgICAgICAgMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkxMDAgICAgICAgICAgICAgICAgICAweDE0CiAjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTYwICAgICAgICAJICAgICAgMHg0MAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTAgICAgCSAgICAgIDAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExICAgIAkgICAgICAxCkBAIC03NDUsNDUgKzczOSw2MCBAQAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTEgICAgICAgICAgICAgIDEKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEyICAgICAgICAgICAgICAyCiAKLSNkZWZpbmUgQVJfU1JFVl85MTAwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkpCisjZGVmaW5lIEFSX1NSRVZfNTQxNihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpKQogI2RlZmluZSBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwgXAotCQkoKF9haCktPmFoX21hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjApKQorCSgoKEFSX1NSRVZfNTQxNihfYWgpKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIwKSkgfHwgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCiAjZGVmaW5lIEFSX1NSRVZfNTQxNl8yMl9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMikpCi0jZGVmaW5lIEFSX1NSRVZfOTE2MChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkKLSNkZWZpbmUgQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQotI2RlZmluZSBBUl9TUkVWXzkxNjBfMTEoX2FoKSBcCi0JKEFSX1NSRVZfOTE2MChfYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMSkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKLSNkZWZpbmUgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMjAoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkgJiYgXAotCQkoKF9haCktPmFoX21hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85MjgwKSB8fCBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkgJiYgXAotCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpKQorCSgoKEFSX1NSRVZfNTQxNihfYWgpKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyKSkgfHwgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCiAKLSNkZWZpbmUgQVJfU1JFVl85Mjg1KF9haCkgKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCisjZGVmaW5lIEFSX1NSRVZfOTEwMChhaCkgXAorCSgoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbikgPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApCisjZGVmaW5lIEFSX1NSRVZfOTEwMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxMDApKQorCisjZGVmaW5lIEFSX1NSRVZfOTE2MChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQorI2RlZmluZSBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkKKyNkZWZpbmUgQVJfU1JFVl85MTYwXzExKF9haCkgXAorCShBUl9TUkVWXzkxNjAoX2FoKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCisjZGVmaW5lIEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQorI2RlZmluZSBBUl9TUkVWXzkyODBfMjAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCisJCSgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzIwKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85MjgwKSB8fCBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCisJKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKSkKKworI2RlZmluZSBBUl9TUkVWXzkyODUoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkyODUpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMShfYWgpIFwKLQkoQVJfU1JFVl85MjgwKGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTEpKQorCShBUl9TUkVWXzkyODUoYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTEpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCi0JIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCisJIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gXAorCQkJICAgICAgIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTIoX2FoKSBcCi0JKEFSX1NSRVZfOTI4MChhaCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEyKSkKKwkoQVJfU1JFVl85Mjg1KGFoKSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEyKSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NSkgfHwgXAotCSAoQVJfU1JFVl85Mjg1KGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKSkKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NSkgfHwgXAorCSAoQVJfU1JFVl85Mjg1KGFoKSAmJiAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IFwKKwkJCSAgICAgICBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKSkKIAogI2RlZmluZSBBUl9SQURJT19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAgIDB4ZjAKICNkZWZpbmUgQVJfUkFENTEzM19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAweGMwCkBAIC04NzUsMTIgKzg4NCwxNSBAQAogCiAjZGVmaW5lIEFSX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKICNkZWZpbmUgQVI5MjhYX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUjkyODVfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEyCiAKICNkZWZpbmUgQVJfR1BJT19JTl9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwNDgKICNkZWZpbmUgQVJfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGRkZDMDAwCiAjZGVmaW5lIEFSX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAgICAgMTQKICNkZWZpbmUgQVI5MjhYX0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwMEZGQzAwCiAjZGVmaW5lIEFSOTI4WF9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGMDAwCisjZGVmaW5lIEFSOTI4NV9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTIKIAogI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0YwogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlYgICAgICAgICAgICAgICAgICAgICAgIDB4MwpAQCAtODk0LDE0ICs5MDYsMjQgQEAKICNkZWZpbmUgQVJfR1BJT19JTlRSX1BPTF9WQUxfUyAgICAgICAgICAgICAgICAgICAwCiAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUwgICAgICAgICAgICAgICAgICAgICAweDQwNTQKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfREVGICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX1BSSU9SSVRZX1MgICAgICAgMgorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfREVGICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfRlJFUVVFTkNZX1MgICAgICAzCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9ERUYgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfUyAgICAgICAgIDQKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfREVGICAgICAgICAweDAwMDAwMDgwCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0RFRl9TICAgICAgNworI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkIgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0JCX1MgICAgICAxMgogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQiAgICAgICAgIDB4MDAwMDgwMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfQkJfUyAgICAgICAxNQogI2RlZmluZSBBUl9HUElPX1JUQ19SRVNFVF9PVkVSUklERV9FTkFCTEUgICAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgQVJfR1BJT19KVEFHX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCiAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxICAgICAgICAgICAgICAgICAgICAgICAweDQwNTgKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRSAgICAgICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9BQ1RJVkVfUyAgICAgICAgICAgMTYKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1YwogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfQ0xLMjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKQEAgLTk0MCw3ICs5NjIsNyBAQAogCiAjZGVmaW5lIEFSX1JUQ19CQVNFICAgICAgICAgICAgIDB4MDAwMjAwMDAKICNkZWZpbmUgQVJfUlRDX1JDIFwKLQkoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwMDApIDogMHg3MDAwCisJKChBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAwMCkgOiAweDcwMDApCiAjZGVmaW5lIEFSX1JUQ19SQ19NCQkweDAwMDAwMDAzCiAjZGVmaW5lIEFSX1JUQ19SQ19NQUNfV0FSTSAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVJfUlRDX1JDX01BQ19DT0xEICAgICAgMHgwMDAwMDAwMgpAQCAtOTQ4LDcgKzk3MCw3IEBACiAjZGVmaW5lIEFSX1JUQ19SQ19XQVJNX1JFU0VUICAgIDB4MDAwMDAwMDgKIAogI2RlZmluZSBBUl9SVENfUExMX0NPTlRST0wgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAxNCkgOiAweDcwMTQKKwkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDE0KSA6IDB4NzAxNCkKIAogI2RlZmluZSBBUl9SVENfUExMX0RJViAgICAgICAgICAweDAwMDAwMDFmCiAjZGVmaW5lIEFSX1JUQ19QTExfRElWX1MgICAgICAgIDAKQEAgLTk1Nyw4ICs5NzksNiBAQAogI2RlZmluZSBBUl9SVENfUExMX0NMS1NFTCAgICAgICAweDAwMDAwMzAwCiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMX1MgICAgIDgKIAotCi0KICNkZWZpbmUgQVJfUlRDX1JFU0VUIFwKIAkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDQwKSA6IDB4NzA0MCkKICNkZWZpbmUgQVJfUlRDX1JFU0VUX0VOCQkoMHgwMDAwMDAwMSkKQEAgLTk5NSw2ICsxMDE1LDEyIEBACiAjZGVmaW5lIEFSX1JUQ19JTlRSX01BU0sgXAogCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwNTgpIDogMHg3MDU4KQogCisvKiBSVENfREVSSVZFRF8qIC0gb25seSBmb3IgQVI5MTAwICovCisKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLICAgICAgICAgICAoQVJfUlRDX0JBU0UgKyAweDAwMzgpCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QgICAgMHgwMDAwZmZmZQorI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EX1MgIDEKKwogI2RlZmluZQlBUl9TRVFfTUFTSwkweDgwNjAKIAogI2RlZmluZSBBUl9BTl9SRjJHMV9DSDAgICAgICAgICAweDc4MTAKQEAgLTEwMjEsNiArMTA0NywxMCBAQAogI2RlZmluZSBBUl9BTl9SRjVHMV9DSDFfREI1ICAgICAweDAwMzgwMDAwCiAjZGVmaW5lIEFSX0FOX1JGNUcxX0NIMV9EQjVfUyAgIDE5CiAKKyNkZWZpbmUgQVJfQU5fVE9QMSAgICAgICAgICAgICAgICAgIDB4Nzg5MAorI2RlZmluZSBBUl9BTl9UT1AxX0RBQ0lQTU9ERQkgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9BTl9UT1AxX0RBQ0lQTU9ERV9TCSAgICAxOAorCiAjZGVmaW5lIEFSX0FOX1RPUDIgICAgICAgICAgICAgICAgICAweDc4OTQKICNkZWZpbmUgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCAgICAgIDB4QzAwMDAwMDAKICNkZWZpbmUgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTF9TICAgIDMwCkBAIC0xMTgxLDE4ICsxMjExLDcgQEAKICNkZWZpbmUgQVJfQ0ZQX1ZBTCAgICAgICAgICAweDAwMDBGRkZGCiAKICNkZWZpbmUgQVJfUlhfRklMVEVSICAgICAgICAweDgwM0MKLSNkZWZpbmUgQVJfUlhfRklMVEVSX0FMTCAgICAweDAwMDAwMDAwCi0jZGVmaW5lIEFSX1JYX1VDQVNUICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBUl9SWF9NQ0FTVCAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfUlhfQkNBU1QgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEFSX1JYX0NPTlRST0wgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBBUl9SWF9CRUFDT04gICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQVJfUlhfUFJPTSAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEFSX1JYX1BST0JFX1JFUSAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBBUl9SWF9NWV9CRUFDT04gICAgIDB4MDAwMDAyMDAKICNkZWZpbmUgQVJfUlhfQ09NUFJfQkFSICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEFSX1JYX0NPTVBSX0JBICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBBUl9SWF9VTkNPTV9CQV9CQVIgIDB4MDAwMDEwMDAKIAogI2RlZmluZSBBUl9NQ0FTVF9GSUwwICAgICAgIDB4ODA0MAogI2RlZmluZSBBUl9NQ0FTVF9GSUwxICAgICAgIDB4ODA0NApAQCAtMTIzNiw2ICsxMjU1LDggQEAKIAogI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMSAgICAgICAweDgwNjAKICNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzFfU0VRICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01UIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzFfRkNfTUdNVF9TIDE2CiAKICNkZWZpbmUgQVJfR0FURURfQ0xLUyAgICAgICAweDgwNjQKICNkZWZpbmUgQVJfR0FURURfQ0xLU19UWCAgICAweDAwMDAwMDAyCkBAIC0xMzcwLDggKzEzOTEsOCBAQAogI2RlZmluZSBBUl9QSFlfQ09VTlRNQVggICAgICAgICgzIDw8IDIyKQogI2RlZmluZSBBUl9NSUJDTlRfSU5UUk1BU0sgICAgICgzIDw8IDIyKQogCi0jZGVmaW5lIEFSX1RTRl9USFJFU0hPTEQgICAgICAgMHg4MTNjCi0jZGVmaW5lIEFSX1RTRl9USFJFU0hPTERfVkFMICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9UU0ZPT1JfVEhSRVNIT0xEICAgICAgIDB4ODEzYworI2RlZmluZSBBUl9UU0ZPT1JfVEhSRVNIT0xEX1ZBTCAgIDB4MDAwMEZGRkYKIAogI2RlZmluZSBBUl9QSFlfRVJSX0VJRlNfTUFTSyAgIDgxNDQKIApAQCAtMTQ2MCw2ICsxNDgxLDEwIEBACiAjZGVmaW5lIEFSX1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFICAgMHg3MDAKICNkZWZpbmUgQVJfOTI4NV9QQ1VfVFhCVUZfQ1RSTF9VU0FCTEVfU0laRSAgIDB4MzgwCiAKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTIgICAgICAgICAgICAgICAweDgzNDQKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUICAgMHgwMDAwMDAwNAorCiAjZGVmaW5lIEFSX0tFWVRBQkxFXzAgICAgICAgICAgIDB4ODgwMAogI2RlZmluZSBBUl9LRVlUQUJMRShfbikgICAgICAgICAoQVJfS0VZVEFCTEVfMCArICgoX24pKjMyKSkKICNkZWZpbmUgQVJfS0VZX0NBQ0hFX1NJWkUgICAgICAgMTI4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMKaW5kZXggNjQwNDNlOS4uYjhmOWI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYwpAQCAtMTYsNjMgKzE2LDM1OSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+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+YWhfaXNvWzJdOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oCmluZGV4IDUxMmQ5OTAuLjhmODg1ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmgKQEAgLTE3LDEyNyArMTcsOCBAQAogI2lmbmRlZiBSRUdEX0gKICNkZWZpbmUgUkVHRF9ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCi0jZGVmaW5lIEJNTEVOIDIKLSNkZWZpbmUgQk1aRVJPIHsodTY0KSAwLCAodTY0KSAwfQotCi0jZGVmaW5lIEJNKF9mYSwgX2ZiLCBfZmMsIF9mZCwgX2ZlLCBfZmYsIF9mZywgX2ZoLCBfZmksIF9maiwgX2ZrLCBfZmwpIFwKLQl7KCgoKF9mYSA+PSAwKSAmJiAoX2ZhIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmEpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZiID49IDApICYmIChfZmIgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mYikgOiAodTY0KSAwKSB8IFwKLQkoKChfZmMgPj0gMCkgJiYgKF9mYyA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZjKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZCA+PSAwKSAmJiAoX2ZkIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmQpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZlID49IDApICYmIChfZmUgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mZSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmYgPj0gMCkgJiYgKF9mZiA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZmKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZyA+PSAwKSAmJiAoX2ZnIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmcpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZoID49IDApICYmIChfZmggPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maCkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmkgPj0gMCkgJiYgKF9maSA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maiA+PSAwKSAmJiAoX2ZqIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmopIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZrID49IDApICYmIChfZmsgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maykgOiAodTY0KSAwKSB8IFwKLQkoKChfZmwgPj0gMCkgJiYgKF9mbCA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZsKSA6ICh1NjQpIDApIHwgXAotCQkJKCgoKF9mYSA+IDYzKSAmJiAoX2ZhIDwgMTI4KSkgPyBcCi0JCQkoKCh1NjQpIDEpIDw8IChfZmEgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZiID4gNjMpICYmIChfZmIgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZiIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYyA+IDYzKSAmJiAoX2ZjIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mYyAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmQgPiA2MykgJiYgKF9mZCA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmQgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZlID4gNjMpICYmIChfZmUgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZlIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZiA+IDYzKSAmJiAoX2ZmIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mZiAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmcgPiA2MykgJiYgKF9mZyA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmcgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZoID4gNjMpICYmIChfZmggPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZoIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maSA+IDYzKSAmJiAoX2ZpIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9maSAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmogPiA2MykgJiYgKF9maiA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmogLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZrID4gNjMpICYmIChfZmsgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZrIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mbCA+IDYzKSAmJiAoX2ZsIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mbCAtIDY0KSkgOiAodTY0KSAwKSkpfQotCi0jZGVmaW5lIERFRl9SRUdETU4gICAgICBGQ0MxX0ZDQ0EKLSNkZWZpbmUgREVGX0RNTl81ICAgICAgIEZDQzEKLSNkZWZpbmUgREVGX0RNTl8yICAgICAgIEZDQ0EKICNkZWZpbmUgQ09VTlRSWV9FUkRfRkxBRyAgICAgICAgMHg4MDAwCiAjZGVmaW5lIFdPUkxEV0lERV9ST0FNSU5HX0ZMQUcgIDB4NDAwMAotI2RlZmluZSBTVVBFUl9ET01BSU5fTUFTSyAgIDB4MGZmZgotI2RlZmluZSBDT1VOVFJZX0NPREVfTUFTSyAgIDB4M2ZmZgotI2RlZmluZSBDRl9JTlRFUkZFUkVOQ0UgICAgIChDSEFOTkVMX0NXX0lOVCB8IENIQU5ORUxfUkFEQVJfSU5UKQotI2RlZmluZSBDSEFOTkVMXzE0ICAgICAgKDI0ODQpCi0jZGVmaW5lIElTXzExR19DSDE0KF9jaCxfY2YpIFwKLSAgICAoKChfY2gpID09IENIQU5ORUxfMTQpICYmICgoX2NmKSA9PSBDSEFOTkVMX0cpKQotCi0jZGVmaW5lIE5PX1BTQ0FOICAgIDB4MFVMTAotI2RlZmluZSBQU0NBTl9GQ0MgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwKLSNkZWZpbmUgUFNDQU5fRkNDX1QgMHgwMDAwMDAwMDAwMDAwMDAyVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0kgIDB4MDAwMDAwMDAwMDAwMDAwNFVMTAotI2RlZmluZSBQU0NBTl9NS0sxICAweDAwMDAwMDAwMDAwMDAwMDhVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMiAgMHgwMDAwMDAwMDAwMDAwMDEwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0EgIDB4MDAwMDAwMDAwMDAwMDAyMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBX0cgICAgMHgwMDAwMDAwMDAwMDAwMDQwVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0lBIDB4MDAwMDAwMDAwMDAwMDA4MFVMTAotI2RlZmluZSBQU0NBTl9FVFNJQiAweDAwMDAwMDAwMDAwMDAxMDBVTEwKLSNkZWZpbmUgUFNDQU5fRVRTSUMgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCi0jZGVmaW5lIFBTQ0FOX1dXUiAgIDB4MDAwMDAwMDAwMDAwMDQwMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBMSAweDAwMDAwMDAwMDAwMDA4MDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTFfRyAgIDB4MDAwMDAwMDAwMDAwMTAwMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBMiAweDAwMDAwMDAwMDAwMDIwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTJfRyAgIDB4MDAwMDAwMDAwMDAwNDAwMFVMTAotI2RlZmluZSBQU0NBTl9NS0szICAweDAwMDAwMDAwMDAwMDgwMDBVTEwKLSNkZWZpbmUgUFNDQU5fREVGRVIgMHg3RkZGRkZGRkZGRkZGRkZGVUxMCi0jZGVmaW5lIElTX0VDTV9DSEFOIDB4ODAwMDAwMDAwMDAwMDAwMFVMTAotCi0jZGVmaW5lIGlzV3dyU0tVKF9haCkgXAotCSgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKChfYWgpKSAmIFdPUkxEX1NLVV9NQVNLKSA9PSBcCi0JCVdPUkxEX1NLVV9QUkVGSVgpIHx8IFwKLQkJKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKF9haCkgPT0gV09STEQpKQotCi0jZGVmaW5lIGlzV3dyU0tVX05vTWlkYmFuZChfYWgpIFwKLQkoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKChfYWgpKSA9PSBXT1IzX1dPUkxEKSB8fCBcCi0JKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKF9haCkgPT0gV09SNF9XT1JMRCkgfHwgXAotCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUjVfRVRTSUMpKQotCi0jZGVmaW5lIGlzVU5JSTFPZGRDaGFuKGNoKSBcCi0JKChjaCA9PSA1MTcwKSB8fCAoY2ggPT0gNTE5MCkgfHwgKGNoID09IDUyMTApIHx8IChjaCA9PSA1MjMwKSkKLQotI2RlZmluZSBJU19IVDQwX01PREUoX21vZGUpCQkJCQlcCi0JKCgoX21vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTICB8fAkJXAotCSAgIF9tb2RlID09IEFUSDlLX01PREVfMTFOR19IVDQwUExVUyAgICB8fAkJXAotCSAgIF9tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMgICB8fAkJXAotCSAgIF9tb2RlID09IEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMpID8gdHJ1ZSA6IGZhbHNlKSkKLQotI2RlZmluZSBDSEFOX0ZMQUdTICAgICAgKENIQU5ORUxfQUxMfENIQU5ORUxfSEFMRnxDSEFOTkVMX1FVQVJURVIpCi0KLSNkZWZpbmUgc3dhcF9hcnJheShfYSwgX2IsIF9zaXplKSB7ICAgICAgICAgICAgICAgICAgIFwKLQl1OCAqcyA9IF9iOyAgICAgICAgICAgICAgICAgICAgICAgXAotCWludCBpID0gX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJdTggdG1wID0gKl9hOyAgICAgICAgICAgICBcCi0JCSpfYSsrID0gKnM7ICAgICAgICAgICAgICAgICAgICAgXAotCQkqcysrID0gdG1wOyAgICAgICAgICAgICAgICAgICAgIFwKLQl9IHdoaWxlICgtLWkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9hIC09IF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLQotI2RlZmluZSBIQUxGX01BWENIQU5CVyAgICAgICAgICAxMAogCiAjZGVmaW5lIE1VTFRJX0RPTUFJTl9NQVNLIDB4RkYwMAogCkBAIC0xNDcsODEgKzI4LDI3IEBACiAjZGVmaW5lIENIQU5ORUxfSEFMRl9CVyAgICAgICAgIDEwCiAjZGVmaW5lIENIQU5ORUxfUVVBUlRFUl9CVyAgICAgIDUKIAotdHlwZWRlZiBpbnQgYXRoX2hhbF9jbXBfdChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0KIHN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyB7CiAJdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ0RtbjVHSHo7Ci0JdTE2IHJlZ0RtbjJHSHo7Ci0JdTMyIGZsYWdzNUdIejsKLQl1MzIgZmxhZ3MyR0h6OwotCXU2NCBwc2Nhbk1hc2s7Ci0JdTE2IHNpbmdsZUNDOwotfTsKLQotc3RydWN0IGNjbWFwIHsKLQljaGFyIGlzb05hbWVbM107Ci0JdTE2IGNvdW50cnlDb2RlOworCXUxNiByZWdfNWdoel9jdGw7CisJdTE2IHJlZ18yZ2h6X2N0bDsKIH07CiAKIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCB7CiAJdTE2IGNvdW50cnlDb2RlOwogCXUxNiByZWdEbW5FbnVtOwogCWNvbnN0IGNoYXIgKmlzb05hbWU7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlib29sIGFsbG93MTFnOwotCWJvb2wgYWxsb3cxMWFUdXJibzsKLQlib29sIGFsbG93MTFnVHVyYm87Ci0JYm9vbCBhbGxvdzExbmcyMDsKLQlib29sIGFsbG93MTFuZzQwOwotCWJvb2wgYWxsb3cxMW5hMjA7Ci0JYm9vbCBhbGxvdzExbmE0MDsKLQl1MTYgb3V0ZG9vckNoYW5TdGFydDsKIH07CiAKLXN0cnVjdCBSZWdEbW5GcmVxQmFuZCB7Ci0JdTE2IGxvd0NoYW5uZWw7Ci0JdTE2IGhpZ2hDaGFubmVsOwotCXU4IHBvd2VyRGZzOwotCXU4IGFudGVubmFNYXg7Ci0JdTggY2hhbm5lbEJXOwotCXU4IGNoYW5uZWxTZXA7Ci0JdTY0IHVzZURmczsKLQl1NjQgdXNlUGFzc1NjYW47Ci0JdTggcmVnQ2xhc3NJZDsKLX07Ci0KLXN0cnVjdCByZWdEb21haW4gewotCXUxNiByZWdEbW5FbnVtOwotCXU4IGNvbmZvcm1hbmNlVGVzdExpbWl0OwotCXU2NCBkZnNNYXNrOwotCXU2NCBwc2NhbjsKLQl1MzIgZmxhZ3M7Ci0JdTY0IGNoYW4xMWFbQk1MRU5dOwotCXU2NCBjaGFuMTFhX3R1cmJvW0JNTEVOXTsKLQl1NjQgY2hhbjExYV9keW5fdHVyYm9bQk1MRU5dOwotCXU2NCBjaGFuMTFiW0JNTEVOXTsKLQl1NjQgY2hhbjExZ1tCTUxFTl07Ci0JdTY0IGNoYW4xMWdfdHVyYm9bQk1MRU5dOwotfTsKLQotc3RydWN0IGNtb2RlIHsKLQl1MzIgbW9kZTsKLQl1MzIgZmxhZ3M7Ci19OwotCi0jZGVmaW5lIFlFUyB0cnVlCi0jZGVmaW5lIE5PICBmYWxzZQotCi1zdHJ1Y3QgamFwYW5fYmFuZGNoZWNrIHsKLQl1MTYgZnJlcWJhbmRiaXQ7Ci0JdTMyIGVlcHJvbWZsYWd0b2NoZWNrOwotfTsKLQotc3RydWN0IGNvbW1vbl9tb2RlX3Bvd2VyIHsKLQl1MTYgbGNoYW47Ci0JdTE2IGhjaGFuOwotCXU4IHB3cmx2bDsKK3N0cnVjdCBhdGg5a19yZWd1bGF0b3J5IHsKKwljaGFyIGFscGhhMlsyXTsKKwl1MTYgY291bnRyeV9jb2RlOworCXUxNiBtYXhfcG93ZXJfbGV2ZWw7CisJdTMyIHRwX3NjYWxlOworCXUxNiBjdXJyZW50X3JkOworCXUxNiBjdXJyZW50X3JkX2V4dDsKKwlpbnQxNl90IHBvd2VyX2xpbWl0OworCXN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyAqcmVncGFpcjsKIH07CiAKIGVudW0gQ291bnRyeUNvZGUgewpAQCAtNDA2LDcgKzIzMywxNSBAQAogCUNUUllfQkVMR0lVTTIgPSA1MDAyCiB9OwogCi12b2lkIGF0aDlrX3JlZ2RfZ2V0X2N1cnJlbnRfY291bnRyeShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5ICpjdHJ5KTsKK2Jvb2wgYXRoOWtfaXNfd29ybGRfcmVnZChzdHJ1Y3QgYXRoX2h3ICphaCk7Citjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICphdGg5a19kZWZhdWx0X3dvcmxkX3JlZ2RvbWFpbih2b2lkKTsKK3ZvaWQgYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcik7Cit2b2lkIGF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKK2ludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19yZWdkX2lzX2VlcHJvbV92YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfcmVnZF9nZXRfY3RsKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQgYXRoOWtfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oCmluZGV4IDZkZjFiM2IuLmI0MWQwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZF9jb21tb24uaApAQCAtMTUwLDE3NjYgKzE1MCwzMjQgQEAKIAlNS0s5X01LS0MgPSAweEZFLAogCU1LSzlfTUtLQTIgPSAweEZGLAogCi0JQVBMMSA9IDB4MDE1MCwKLQlBUEwyID0gMHgwMjUwLAotCUFQTDMgPSAweDAzNTAsCi0JQVBMNCA9IDB4MDQ1MCwKLQlBUEw1ID0gMHgwNTUwLAotCUFQTDYgPSAweDA2NTAsCi0JQVBMNyA9IDB4MDc1MCwKLQlBUEw4ID0gMHgwODUwLAotCUFQTDkgPSAweDA5NTAsCi0JQVBMMTAgPSAweDEwNTAsCi0KLQlFVFNJMSA9IDB4MDEzMCwKLQlFVFNJMiA9IDB4MDIzMCwKLQlFVFNJMyA9IDB4MDMzMCwKLQlFVFNJNCA9IDB4MDQzMCwKLQlFVFNJNSA9IDB4MDUzMCwKLQlFVFNJNiA9IDB4MDYzMCwKLQlFVFNJQSA9IDB4MEEzMCwKLQlFVFNJQiA9IDB4MEIzMCwKLQlFVFNJQyA9IDB4MEMzMCwKLQotCUZDQzEgPSAweDAxMTAsCi0JRkNDMiA9IDB4MDEyMCwKLQlGQ0MzID0gMHgwMTYwLAotCUZDQzQgPSAweDAxNjUsCi0JRkNDNSA9IDB4MDUxMCwKLQlGQ0M2ID0gMHgwNjEwLAotCUZDQ0EgPSAweDBBMTAsCi0KLQlBUExEID0gMHgwRDUwLAotCi0JTUtLMSA9IDB4MDE0MCwKLQlNS0syID0gMHgwMjQwLAotCU1LSzMgPSAweDAzNDAsCi0JTUtLNCA9IDB4MDQ0MCwKLQlNS0s1ID0gMHgwNTQwLAotCU1LSzYgPSAweDA2NDAsCi0JTUtLNyA9IDB4MDc0MCwKLQlNS0s4ID0gMHgwODQwLAotCU1LSzkgPSAweDA5NDAsCi0JTUtLMTAgPSAweDBCNDAsCi0JTUtLMTEgPSAweDExNDAsCi0JTUtLMTIgPSAweDEyNDAsCi0JTUtLMTMgPSAweDBDNDAsCi0JTUtLMTQgPSAweDE0NDAsCi0JTUtLMTUgPSAweDE1NDAsCi0JTUtLQSA9IDB4MEE0MCwKLQlNS0tDID0gMHgwQTUwLAotCi0JTlVMTDEgPSAweDAxOTgsCiAJV09STEQgPSAweDAxOTksCiAJREVCVUdfUkVHX0RNTiA9IDB4MDFmZiwKIH07CiAKLWVudW0gewotCUZDQyA9IDB4MTAsCi0JTUtLID0gMHg0MCwKLQlFVFNJID0gMHgzMCwKK2VudW0gY3RsX2dyb3VwIHsKKwlDVExfRkNDID0gMHgxMCwKKwlDVExfTUtLID0gMHg0MCwKKwlDVExfRVRTSSA9IDB4MzAsCiB9OwogCi1lbnVtIHsKLQlOT19SRVEgPSAweDAwMDAwMDAwLAotCURJU0FMTE9XX0FESE9DXzExQSA9IDB4MDAwMDAwMDEsCi0JRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgPSAweDAwMDAwMDAyLAotCU5FRURfTkZDID0gMHgwMDAwMDAwNCwKLQotCUFESE9DX1BFUl8xMUQgPSAweDAwMDAwMDA4LAotCUFESE9DX05PXzExQSA9IDB4MDAwMDAwMTAsCi0KLQlQVUJMSUNfU0FGRVRZX0RPTUFJTiA9IDB4MDAwMDAwMjAsCi0JTElNSVRfRlJBTUVfNE1TID0gMHgwMDAwMDA0MCwKLQotCU5PX0hPU1RBUCA9IDB4MDAwMDAwODAsCi0KLQlSRVFfTUFTSyA9IDB4MDAwMDAwRkYsCi19OwotCi0jZGVmaW5lIFJFR19ET01BSU5fMkdIWl9NQVNLICAgIChSRVFfTUFTSyAmIFwKLQkofihBREhPQ19OT18xMUEgfCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQikpKQotI2RlZmluZSBSRUdfRE9NQUlOXzVHSFpfTUFTSyAgICBSRVFfTUFTSwotCisvKiBSZWdwYWlyIHRvIENUTCBiYW5kIG1hcHBpbmcgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgcmVnRG9tYWluUGFpcnNbXSA9IHsKLQl7Tk9fRU5VTVJELCBERUJVR19SRUdfRE1OLCBERUJVR19SRUdfRE1OLCBOT19SRVEsIE5PX1JFUSwKLQkgUFNDQU5fREVGRVIsIDB9LAotCXtOVUxMMV9XT1JMRCwgTlVMTDEsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtOVUxMMV9FVFNJQiwgTlVMTDEsIEVUU0lCLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtOVUxMMV9FVFNJQywgTlVMTDEsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCS8qIHJlZ3BhaXIsIDUgR0h6IENUTCwgMiBHSHogQ1RMICovCisJe05PX0VOVU1SRCwgREVCVUdfUkVHX0RNTiwgREVCVUdfUkVHX0RNTn0sCisJe05VTEwxX1dPUkxELCBOT19DVEwsIENUTF9FVFNJfSwKKwl7TlVMTDFfRVRTSUIsIE5PX0NUTCwgQ1RMX0VUU0l9LAorCXtOVUxMMV9FVFNJQywgTk9fQ1RMLCBDVExfRVRTSX0sCiAKLQl7RkNDMl9GQ0NBLCBGQ0MyLCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MyX1dPUkxELCBGQ0MyLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDMl9FVFNJQywgRkNDMiwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzNfRkNDQSwgRkNDMywgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDM19XT1JMRCwgRkNDMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzRfRkNDQSwgRkNDNCwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtGQ0M1X0ZDQ0EsIEZDQzUsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzZfRkNDQSwgRkNDNiwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNl9XT1JMRCwgRkNDNiwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJe0ZDQzJfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzJfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7RkNDMl9FVFNJQywgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtGQ0MzX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzRfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzVfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzZfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzZfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKIAotCXtFVFNJMV9XT1JMRCwgRVRTSTEsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0kyX1dPUkxELCBFVFNJMiwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTNfV09STEQsIEVUU0kzLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJNF9XT1JMRCwgRVRTSTQsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0k1X1dPUkxELCBFVFNJNSwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTZfV09STEQsIEVUU0k2LCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAorCXtFVFNJMV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTJfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0kzX1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJNF9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTVfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0k2X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0VUU0kzX0VUU0lBLCBFVFNJMywgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RlJBTkNFX1JFUywgRVRTSTMsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCS8qIFhYWDogRm9yIEVUU0kzX0VUU0lBLCBXYXMgTk9fQ1RMIG1lYW50IGZvciB0aGUgMiBHSHogYmFuZCA/ICovCisJe0VUU0kzX0VUU0lBLCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtGUkFOQ0VfUkVTLCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0ZDQzFfV09STEQsIEZDQzEsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MxX0ZDQ0EsIEZDQzEsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDFfV09STEQsIEFQTDEsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX1dPUkxELCBBUEwyLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMM19XT1JMRCwgQVBMMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDRfV09STEQsIEFQTDQsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw1X1dPUkxELCBBUEw1LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMNl9XT1JMRCwgQVBMNiwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDhfV09STEQsIEFQTDgsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw5X1dPUkxELCBBUEw5LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKKwl7RkNDMV9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MxX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEwxX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMM19XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEw0X1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDVfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMNl9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7QVBMOF9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7QVBMOV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKIAotCXtBUEwzX0ZDQ0EsIEFQTDMsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDFfRVRTSUMsIEFQTDEsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX0VUU0lDLCBBUEwyLCBFVFNJQywgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMl9BUExELCBBUEwyLCBBUExELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsfSwKKwl7QVBMM19GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7QVBMMV9FVFNJQywgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEwyX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfQVBMRCwgQ1RMX0ZDQywgTk9fQ1RMfSwKIAotCXtNS0sxX01LS0EsIE1LSzEsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQSwgQ1RSWV9KQVBBTn0sCi0Je01LSzFfTUtLQiwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMX0sCi0Je01LSzFfRkNDQSwgTUtLMSwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEsIENUUllfSkFQQU4yfSwKLQl7TUtLMV9NS0tBMSwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40fSwKLQl7TUtLMV9NS0tBMiwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU41fSwKLQl7TUtLMV9NS0tDLCBNS0sxLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjZ9LAorCXtNS0sxX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0sxX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMl9NS0tBLCBNS0syLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMiB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4zfSwKKwl7TUtLMl9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAogCi0Je01LSzNfTUtLQSwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EsIENUUllfSkFQQU4yNX0sCi0Je01LSzNfTUtLQiwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU43fSwKLQl7TUtLM19NS0tBMSwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjI2fSwKLQl7TUtLM19NS0tBMiwgTUtLMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjh9LAotCXtNS0szX01LS0MsIE1LSzMsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjl9LAotCXtNS0szX0ZDQ0EsIE1LSzMsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjI3fSwKKwl7TUtLNF9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAogCi0Je01LSzRfTUtLQSwgTUtLNCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU4zNn0sCi0Je01LSzRfTUtLQiwgTUtLNCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMTB9LAotCXtNS0s0X01LS0ExLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjI4fSwKLQl7TUtLNF9NS0tBMiwgTUtLNCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU4xMX0sCi0Je01LSzRfTUtLQywgTUtLNCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU4xMn0sCi0Je01LSzRfRkNDQSwgTUtLNCwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU4yOX0sCisJe01LSzVfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzVfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s1X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzVfTUtLQiwgTUtLNSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMTN9LAotCXtNS0s1X01LS0EyLCBNS0s1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjE0fSwKLQl7TUtLNV9NS0tDLCBNS0s1LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjE1fSwKKwl7TUtLNl9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNl9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAogCi0Je01LSzZfTUtLQiwgTUtLNiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLCBDVFJZX0pBUEFOMTZ9LAotCXtNS0s2X01LS0ExLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjMwfSwKLQl7TUtLNl9NS0tBMiwgTUtLNiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU4xN30sCi0Je01LSzZfTUtLQywgTUtLNiwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEsIENUUllfSkFQQU4xOH0sCi0Je01LSzZfRkNDQSwgTUtLNiwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMzF9LAorCXtNS0s3X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s3X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLN19NS0tCLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMTl9LAotCXtNS0s3X01LS0ExLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjMyfSwKLQl7TUtLN19NS0tBMiwgTUtLNywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLAotCSBDVFJZX0pBUEFOMjB9LAotCXtNS0s3X01LS0MsIE1LSzcsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjIxfSwKLQl7TUtLN19GQ0NBLCBNS0s3LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU4zM30sCisJe01LSzhfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzhfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s4X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzhfTUtLQiwgTUtLOCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjIyfSwKLQl7TUtLOF9NS0tBMiwgTUtLOCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLAotCSBDVFJZX0pBUEFOMjN9LAotCXtNS0s4X01LS0MsIE1LSzgsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjI0fSwKKwl7TUtLOV9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOV9GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKKwl7TUtLOV9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzlfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s5X01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzlfTUtLQSwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjM0fSwKLQl7TUtLOV9GQ0NBLCBNS0s5LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zN30sCi0Je01LSzlfTUtLQTEsIE1LSzksIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU4zOH0sCi0Je01LSzlfTUtLQTIsIE1LSzksIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU40MH0sCi0Je01LSzlfTUtLQywgTUtLOSwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMzl9LAorCXtNS0sxMF9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTBfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzEwX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTBfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMF9NS0tBLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMzV9LAotCXtNS0sxMF9GQ0NBLCBNS0sxMCwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDF9LAotCXtNS0sxMF9NS0tBMSwgTUtLMTAsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40Mn0sCi0Je01LSzEwX01LS0EyLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQ0fSwKLQl7TUtLMTBfTUtLQywgTUtLMTAsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjQzfSwKKwl7TUtLMTFfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzExX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0sxMV9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzExX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMTFfTUtLQSwgTUtLMTEsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFONDV9LAotCXtNS0sxMV9GQ0NBLCBNS0sxMSwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU40Nn0sCi0Je01LSzExX01LS0ExLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40N30sCi0Je01LSzExX01LS0EyLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU40OX0sCi0Je01LSzExX01LS0MsIE1LSzExLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjQ4fSwKKwl7TUtLMTJfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEyX0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0sxMl9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEyX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMTJfTUtLQSwgTUtLMTIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjUwfSwKLQl7TUtLMTJfRkNDQSwgTUtLMTIsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjUxfSwKLQl7TUtLMTJfTUtLQTEsIE1LSzEyLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csCi0JIENUUllfSkFQQU41Mn0sCi0Je01LSzEyX01LS0EyLCBNS0sxMiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLAotCSBDVFJZX0pBUEFONTR9LAotCXtNS0sxMl9NS0tDLCBNS0sxMiwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTN9LAorCXtNS0sxM19NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTRfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxNV9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLMTNfTUtLQiwgTUtLMTMsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfAotCSBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU41N30sCi0KLQl7TUtLMTRfTUtLQTEsIE1LSzE0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjU4fSwKLQl7TUtLMTVfTUtLQTEsIE1LSzE1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjU5fSwKLQotCXtXT1IwX1dPUkxELCBXT1IwX1dPUkxELCBXT1IwX1dPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1IxX1dPUkxELCBXT1IxX1dPUkxELCBXT1IxX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjJfV09STEQsIFdPUjJfV09STEQsIFdPUjJfV09STEQsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SM19XT1JMRCwgV09SM19XT1JMRCwgV09SM19XT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SNF9XT1JMRCwgV09SNF9XT1JMRCwgV09SNF9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1I1X0VUU0lDLCBXT1I1X0VUU0lDLCBXT1I1X0VUU0lDLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjAxX1dPUkxELCBXT1IwMV9XT1JMRCwgV09SMDFfV09STEQsIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je1dPUjAyX1dPUkxELCBXT1IwMl9XT1JMRCwgV09SMDJfV09STEQsIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je0VVMV9XT1JMRCwgRVUxX1dPUkxELCBFVTFfV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je1dPUjlfV09STEQsIFdPUjlfV09STEQsIFdPUjlfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SQV9XT1JMRCwgV09SQV9XT1JMRCwgV09SQV9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1JCX1dPUkxELCBXT1JCX1dPUkxELCBXT1JCX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCisJe1dPUjBfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1IyX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjNfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SNF9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I1X0VUU0lDLCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjAxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjAyX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe0VVMV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I5X1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUkFfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SQl9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAogfTsKIAotI2RlZmluZQlOT19JTlRFUlNFQ1RfUkVRCTB4RkZGRkZGRkYKLSNkZWZpbmUJTk9fVU5JT05fUkVRCQkwCi0KIHN0YXRpYyBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgYWxsQ291bnRyaWVzW10gPSB7Ci0Je0NUUllfREVCVUcsIE5PX0VOVU1SRCwgIkRCIiwgIkRFQlVHIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ERUZBVUxULCBERUZfUkVHRE1OLCAiTkEiLCAiTk9fQ09VTlRSWV9TRVQiLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FMQkFOSUEsIE5VTEwxX1dPUkxELCAiQUwiLCAiQUxCQU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLCBOTywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BTEdFUklBLCBOVUxMMV9XT1JMRCwgIkRaIiwgIkFMR0VSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgTk8sCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfQVJHRU5USU5BLCBBUEwzX1dPUkxELCAiQVIiLCAiQVJHRU5USU5BIiwgWUVTLCBOTywgTk8sIFlFUywKLQkgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0FSTUVOSUEsIEVUU0k0X1dPUkxELCAiQU0iLCAiQVJNRU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfQVVTVFJBTElBLCBGQ0MyX1dPUkxELCAiQVUiLCAiQVVTVFJBTElBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUkFMSUEyLCBGQ0M2X1dPUkxELCAiQVUiLCAiQVVTVFJBTElBMiIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQVVTVFJJQSwgRVRTSTFfV09STEQsICJBVCIsICJBVVNUUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FaRVJCQUlKQU4sIEVUU0k0X1dPUkxELCAiQVoiLCAiQVpFUkJBSUpBTiIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkFIUkFJTiwgQVBMNl9XT1JMRCwgIkJIIiwgIkJBSFJBSU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9CRUxBUlVTLCBFVFNJMV9XT1JMRCwgIkJZIiwgIkJFTEFSVVMiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMR0lVTSwgRVRTSTFfV09STEQsICJCRSIsICJCRUxHSVVNIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JFTEdJVU0yLCBFVFNJNF9XT1JMRCwgIkJMIiwgIkJFTEdJVU0iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMSVpFLCBBUEwxX0VUU0lDLCAiQloiLCAiQkVMSVpFIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CT0xJVklBLCBBUEwxX0VUU0lDLCAiQk8iLCAiQk9MVklBIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CT1NOSUFfSEVSWiwgRVRTSTFfV09STEQsICJCQSIsICJCT1NOSUFfSEVSWkdPV0lOQSIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JSQVpJTCwgRkNDM19XT1JMRCwgIkJSIiwgIkJSQVpJTCIsIFlFUywgTk8sIE5PLCBZRVMsIE5PLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9CUlVORUlfREFSVVNTQUxBTSwgQVBMMV9XT1JMRCwgIkJOIiwgIkJSVU5FSSBEQVJVU1NBTEFNIiwKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CVUxHQVJJQSwgRVRTSTZfV09STEQsICJCRyIsICJCVUxHQVJJQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DQU5BREEsIEZDQzJfRkNDQSwgIkNBIiwgIkNBTkFEQSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ0FOQURBMiwgRkNDNl9GQ0NBLCAiQ0EiLCAiQ0FOQURBMiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ0hJTEUsIEFQTDZfV09STEQsICJDTCIsICJDSElMRSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ0hJTkEsIEFQTDFfV09STEQsICJDTiIsICJDSElOQSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQ09MT01CSUEsIEZDQzFfRkNDQSwgIkNPIiwgIkNPTE9NQklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQ09TVEFfUklDQSwgRkNDMV9XT1JMRCwgIkNSIiwgIkNPU1RBIFJJQ0EiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DUk9BVElBLCBFVFNJM19XT1JMRCwgIkhSIiwgIkNST0FUSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DWVBSVVMsIEVUU0kxX1dPUkxELCAiQ1kiLCAiQ1lQUlVTIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DWkVDSCwgRVRTSTNfV09STEQsICJDWiIsICJDWkVDSCBSRVBVQkxJQyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ERU5NQVJLLCBFVFNJMV9XT1JMRCwgIkRLIiwgIkRFTk1BUksiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRE9NSU5JQ0FOX1JFUFVCTElDLCBGQ0MxX0ZDQ0EsICJETyIsICJET01JTklDQU4gUkVQVUJMSUMiLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0VDVUFET1IsIEZDQzFfV09STEQsICJFQyIsICJFQ1VBRE9SIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9FR1lQVCwgRVRTSTNfV09STEQsICJFRyIsICJFR1lQVCIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VMX1NBTFZBRE9SLCBGQ0MxX1dPUkxELCAiU1YiLCAiRUwgU0FMVkFET1IiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9FU1RPTklBLCBFVFNJMV9XT1JMRCwgIkVFIiwgIkVTVE9OSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRklOTEFORCwgRVRTSTFfV09STEQsICJGSSIsICJGSU5MQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0ZSQU5DRSwgRVRTSTFfV09STEQsICJGUiIsICJGUkFOQ0UiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfR0VPUkdJQSwgRVRTSTRfV09STEQsICJHRSIsICJHRU9SR0lBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HRVJNQU5ZLCBFVFNJMV9XT1JMRCwgIkRFIiwgIkdFUk1BTlkiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfR1JFRUNFLCBFVFNJMV9XT1JMRCwgIkdSIiwgIkdSRUVDRSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HVUFURU1BTEEsIEZDQzFfRkNDQSwgIkdUIiwgIkdVQVRFTUFMQSIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSE9ORFVSQVMsIE5VTEwxX1dPUkxELCAiSE4iLCAiSE9ORFVSQVMiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0hPTkdfS09ORywgRkNDMl9XT1JMRCwgIkhLIiwgIkhPTkcgS09ORyIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSFVOR0FSWSwgRVRTSTFfV09STEQsICJIVSIsICJIVU5HQVJZIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lDRUxBTkQsIEVUU0kxX1dPUkxELCAiSVMiLCAiSUNFTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9JTkRJQSwgQVBMNl9XT1JMRCwgIklOIiwgIklORElBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfSU5ET05FU0lBLCBBUEwxX1dPUkxELCAiSUQiLCAiSU5ET05FU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfSVJBTiwgQVBMMV9XT1JMRCwgIklSIiwgIklSQU4iLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIDcwMDB9LAotCXtDVFJZX0lSRUxBTkQsIEVUU0kxX1dPUkxELCAiSUUiLCAiSVJFTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9JU1JBRUwsIE5VTEwxX1dPUkxELCAiSUwiLCAiSVNSQUVMIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9JVEFMWSwgRVRTSTFfV09STEQsICJJVCIsICJJVEFMWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQU1BSUNBLCBFVFNJMV9XT1JMRCwgIkpNIiwgIkpBTUFJQ0EiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCisJe0NUUllfREVCVUcsIE5PX0VOVU1SRCwgIkRCIn0sCisJe0NUUllfREVGQVVMVCwgRkNDMV9GQ0NBLCAiQ08ifSwKKwl7Q1RSWV9BTEJBTklBLCBOVUxMMV9XT1JMRCwgIkFMIn0sCisJe0NUUllfQUxHRVJJQSwgTlVMTDFfV09STEQsICJEWiJ9LAorCXtDVFJZX0FSR0VOVElOQSwgQVBMM19XT1JMRCwgIkFSIn0sCisJe0NUUllfQVJNRU5JQSwgRVRTSTRfV09STEQsICJBTSJ9LAorCXtDVFJZX0FVU1RSQUxJQSwgRkNDMl9XT1JMRCwgIkFVIn0sCisJe0NUUllfQVVTVFJBTElBMiwgRkNDNl9XT1JMRCwgIkFVIn0sCisJe0NUUllfQVVTVFJJQSwgRVRTSTFfV09STEQsICJBVCJ9LAorCXtDVFJZX0FaRVJCQUlKQU4sIEVUU0k0X1dPUkxELCAiQVoifSwKKwl7Q1RSWV9CQUhSQUlOLCBBUEw2X1dPUkxELCAiQkgifSwKKwl7Q1RSWV9CRUxBUlVTLCBFVFNJMV9XT1JMRCwgIkJZIn0sCisJe0NUUllfQkVMR0lVTSwgRVRTSTFfV09STEQsICJCRSJ9LAorCXtDVFJZX0JFTEdJVU0yLCBFVFNJNF9XT1JMRCwgIkJMIn0sCisJe0NUUllfQkVMSVpFLCBBUEwxX0VUU0lDLCAiQloifSwKKwl7Q1RSWV9CT0xJVklBLCBBUEwxX0VUU0lDLCAiQk8ifSwKKwl7Q1RSWV9CT1NOSUFfSEVSWiwgRVRTSTFfV09STEQsICJCQSJ9LAorCXtDVFJZX0JSQVpJTCwgRkNDM19XT1JMRCwgIkJSIn0sCisJe0NUUllfQlJVTkVJX0RBUlVTU0FMQU0sIEFQTDFfV09STEQsICJCTiJ9LAorCXtDVFJZX0JVTEdBUklBLCBFVFNJNl9XT1JMRCwgIkJHIn0sCisJe0NUUllfQ0FOQURBLCBGQ0MyX0ZDQ0EsICJDQSJ9LAorCXtDVFJZX0NBTkFEQTIsIEZDQzZfRkNDQSwgIkNBIn0sCisJe0NUUllfQ0hJTEUsIEFQTDZfV09STEQsICJDTCJ9LAorCXtDVFJZX0NISU5BLCBBUEwxX1dPUkxELCAiQ04ifSwKKwl7Q1RSWV9DT0xPTUJJQSwgRkNDMV9GQ0NBLCAiQ08ifSwKKwl7Q1RSWV9DT1NUQV9SSUNBLCBGQ0MxX1dPUkxELCAiQ1IifSwKKwl7Q1RSWV9DUk9BVElBLCBFVFNJM19XT1JMRCwgIkhSIn0sCisJe0NUUllfQ1lQUlVTLCBFVFNJMV9XT1JMRCwgIkNZIn0sCisJe0NUUllfQ1pFQ0gsIEVUU0kzX1dPUkxELCAiQ1oifSwKKwl7Q1RSWV9ERU5NQVJLLCBFVFNJMV9XT1JMRCwgIkRLIn0sCisJe0NUUllfRE9NSU5JQ0FOX1JFUFVCTElDLCBGQ0MxX0ZDQ0EsICJETyJ9LAorCXtDVFJZX0VDVUFET1IsIEZDQzFfV09STEQsICJFQyJ9LAorCXtDVFJZX0VHWVBULCBFVFNJM19XT1JMRCwgIkVHIn0sCisJe0NUUllfRUxfU0FMVkFET1IsIEZDQzFfV09STEQsICJTViJ9LAorCXtDVFJZX0VTVE9OSUEsIEVUU0kxX1dPUkxELCAiRUUifSwKKwl7Q1RSWV9GSU5MQU5ELCBFVFNJMV9XT1JMRCwgIkZJIn0sCisJe0NUUllfRlJBTkNFLCBFVFNJMV9XT1JMRCwgIkZSIn0sCisJe0NUUllfR0VPUkdJQSwgRVRTSTRfV09STEQsICJHRSJ9LAorCXtDVFJZX0dFUk1BTlksIEVUU0kxX1dPUkxELCAiREUifSwKKwl7Q1RSWV9HUkVFQ0UsIEVUU0kxX1dPUkxELCAiR1IifSwKKwl7Q1RSWV9HVUFURU1BTEEsIEZDQzFfRkNDQSwgIkdUIn0sCisJe0NUUllfSE9ORFVSQVMsIE5VTEwxX1dPUkxELCAiSE4ifSwKKwl7Q1RSWV9IT05HX0tPTkcsIEZDQzJfV09STEQsICJISyJ9LAorCXtDVFJZX0hVTkdBUlksIEVUU0kxX1dPUkxELCAiSFUifSwKKwl7Q1RSWV9JQ0VMQU5ELCBFVFNJMV9XT1JMRCwgIklTIn0sCisJe0NUUllfSU5ESUEsIEFQTDZfV09STEQsICJJTiJ9LAorCXtDVFJZX0lORE9ORVNJQSwgQVBMMV9XT1JMRCwgIklEIn0sCisJe0NUUllfSVJBTiwgQVBMMV9XT1JMRCwgIklSIn0sCisJe0NUUllfSVJFTEFORCwgRVRTSTFfV09STEQsICJJRSJ9LAorCXtDVFJZX0lTUkFFTCwgTlVMTDFfV09STEQsICJJTCJ9LAorCXtDVFJZX0lUQUxZLCBFVFNJMV9XT1JMRCwgIklUIn0sCisJe0NUUllfSkFNQUlDQSwgRVRTSTFfV09STEQsICJKTSJ9LAogCi0Je0NUUllfSkFQQU4sIE1LSzFfTUtLQSwgIkpQIiwgIkpBUEFOIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xLCBNS0sxX01LS0IsICJKUCIsICJKQVBBTjEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIsIE1LSzFfRkNDQSwgIkpQIiwgIkpBUEFOMiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMywgTUtLMl9NS0tBLCAiSlAiLCAiSkFQQU4zIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40LCBNS0sxX01LS0ExLCAiSlAiLCAiSkFQQU40IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41LCBNS0sxX01LS0EyLCAiSlAiLCAiSkFQQU41IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU42LCBNS0sxX01LS0MsICJKUCIsICJKQVBBTjYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKKwl7Q1RSWV9KQVBBTiwgTUtLMV9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEsIE1LSzFfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4yLCBNS0sxX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMywgTUtLMl9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQsIE1LSzFfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONSwgTUtLMV9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU42LCBNS0sxX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONywgTUtLM19NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjgsIE1LSzNfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOOSwgTUtLM19NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEwLCBNS0s0X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTEsIE1LSzRfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTIsIE1LSzRfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4xMywgTUtLNV9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE0LCBNS0s1X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE1LCBNS0s1X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTYsIE1LSzZfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4xNywgTUtLNl9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4xOCwgTUtLNl9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE5LCBNS0s3X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjAsIE1LSzdfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjEsIE1LSzdfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4yMiwgTUtLOF9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIzLCBNS0s4X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI0LCBNS0s4X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjUsIE1LSzNfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4yNiwgTUtLM19NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4yNywgTUtLM19GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI4LCBNS0s0X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI5LCBNS0s0X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzAsIE1LSzZfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzEsIE1LSzZfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMiwgTUtLN19NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMywgTUtLN19GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM0LCBNS0s5X01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzUsIE1LSzEwX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzYsIE1LSzRfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNywgTUtLOV9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM4LCBNS0s5X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM5LCBNS0s5X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDAsIE1LSzlfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONDEsIE1LSzEwX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONDIsIE1LSzEwX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQzLCBNS0sxMF9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ0LCBNS0sxMF9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU40NSwgTUtLMTFfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU40NiwgTUtLMTFfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU40NywgTUtLMTFfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONDgsIE1LSzExX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDksIE1LSzExX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUwLCBNS0sxMl9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUxLCBNS0sxMl9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUyLCBNS0sxMl9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU41MywgTUtLMTJfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU41NCwgTUtLMTJfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONTcsIE1LSzEzX01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFONTgsIE1LSzE0X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjU5LCBNS0sxNV9NS0tBMSwgIkpQIn0sCiAKLQl7Q1RSWV9KQVBBTjcsIE1LSzNfTUtLQiwgIkpQIiwgIkpBUEFONyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOOCwgTUtLM19NS0tBMiwgIkpQIiwgIkpBUEFOOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOOSwgTUtLM19NS0tDLCAiSlAiLCAiSkFQQU45IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjEwLCBNS0s0X01LS0IsICJKUCIsICJKQVBBTjEwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xMSwgTUtLNF9NS0tBMiwgIkpQIiwgIkpBUEFOMTEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjEyLCBNS0s0X01LS0MsICJKUCIsICJKQVBBTjEyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjEzLCBNS0s1X01LS0IsICJKUCIsICJKQVBBTjEzIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xNCwgTUtLNV9NS0tBMiwgIkpQIiwgIkpBUEFOMTQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE1LCBNS0s1X01LS0MsICJKUCIsICJKQVBBTjE1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjE2LCBNS0s2X01LS0IsICJKUCIsICJKQVBBTjE2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4xNywgTUtLNl9NS0tBMiwgIkpQIiwgIkpBUEFOMTciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE4LCBNS0s2X01LS0MsICJKUCIsICJKQVBBTjE4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjE5LCBNS0s3X01LS0IsICJKUCIsICJKQVBBTjE5IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yMCwgTUtLN19NS0tBMiwgIkpQIiwgIkpBUEFOMjAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIxLCBNS0s3X01LS0MsICJKUCIsICJKQVBBTjIxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjIyLCBNS0s4X01LS0IsICJKUCIsICJKQVBBTjIyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yMywgTUtLOF9NS0tBMiwgIkpQIiwgIkpBUEFOMjMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI0LCBNS0s4X01LS0MsICJKUCIsICJKQVBBTjI0IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KQVBBTjI1LCBNS0szX01LS0EsICJKUCIsICJKQVBBTjI1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yNiwgTUtLM19NS0tBMSwgIkpQIiwgIkpBUEFOMjYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI3LCBNS0szX0ZDQ0EsICJKUCIsICJKQVBBTjI3IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4yOCwgTUtLNF9NS0tBMSwgIkpQIiwgIkpBUEFOMjgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI5LCBNS0s0X0ZDQ0EsICJKUCIsICJKQVBBTjI5IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zMCwgTUtLNl9NS0tBMSwgIkpQIiwgIkpBUEFOMzAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMxLCBNS0s2X0ZDQ0EsICJKUCIsICJKQVBBTjMxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zMiwgTUtLN19NS0tBMSwgIkpQIiwgIkpBUEFOMzIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMzLCBNS0s3X0ZDQ0EsICJKUCIsICJKQVBBTjMzIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNCwgTUtLOV9NS0tBLCAiSlAiLCAiSkFQQU4zNCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzUsIE1LSzEwX01LS0EsICJKUCIsICJKQVBBTjM1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNiwgTUtLNF9NS0tBLCAiSlAiLCAiSkFQQU4zNiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzcsIE1LSzlfRkNDQSwgIkpQIiwgIkpBUEFOMzciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM4LCBNS0s5X01LS0ExLCAiSlAiLCAiSkFQQU4zOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzksIE1LSzlfTUtLQywgIkpQIiwgIkpBUEFOMzkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQwLCBNS0s5X01LS0EyLCAiSlAiLCAiSkFQQU40MCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDEsIE1LSzEwX0ZDQ0EsICJKUCIsICJKQVBBTjQxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MiwgTUtLMTBfTUtLQTEsICJKUCIsICJKQVBBTjQyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MywgTUtLMTBfTUtLQywgIkpQIiwgIkpBUEFONDMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ0LCBNS0sxMF9NS0tBMiwgIkpQIiwgIkpBUEFONDQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ1LCBNS0sxMV9NS0tBLCAiSlAiLCAiSkFQQU40NSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDYsIE1LSzExX0ZDQ0EsICJKUCIsICJKQVBBTjQ2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40NywgTUtLMTFfTUtLQTEsICJKUCIsICJKQVBBTjQ3IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40OCwgTUtLMTFfTUtLQywgIkpQIiwgIkpBUEFONDgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ5LCBNS0sxMV9NS0tBMiwgIkpQIiwgIkpBUEFONDkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUwLCBNS0sxMl9NS0tBLCAiSlAiLCAiSkFQQU41MCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTEsIE1LSzEyX0ZDQ0EsICJKUCIsICJKQVBBTjUxIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MiwgTUtLMTJfTUtLQTEsICJKUCIsICJKQVBBTjUyIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MywgTUtLMTJfTUtLQywgIkpQIiwgIkpBUEFONTMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU0LCBNS0sxMl9NS0tBMiwgIkpQIiwgIkpBUEFONTQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFONTcsIE1LSzEzX01LS0IsICJKUCIsICJKQVBBTjU3IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41OCwgTUtLMTRfTUtLQTEsICJKUCIsICJKQVBBTjU4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41OSwgTUtLMTVfTUtLQTEsICJKUCIsICJKQVBBTjU5IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0KLQl7Q1RSWV9KT1JEQU4sIEVUU0kyX1dPUkxELCAiSk8iLCAiSk9SREFOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS0FaQUtIU1RBTiwgTlVMTDFfV09STEQsICJLWiIsICJLQVpBS0hTVEFOIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9OT1JUSCwgQVBMOV9XT1JMRCwgIktQIiwgIk5PUlRIIEtPUkVBIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfS09SRUFfUk9DLCBBUEw5X1dPUkxELCAiS1IiLCAiS09SRUEgUkVQVUJMSUMiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS09SRUFfUk9DMiwgQVBMMl9XT1JMRCwgIksyIiwgIktPUkVBIFJFUFVCTElDMiIsIFlFUywgTk8sIE5PLAotCSBZRVMsIE5PLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MzLCBBUEw5X1dPUkxELCAiSzMiLCAiS09SRUEgUkVQVUJMSUMzIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0tVV0FJVCwgTlVMTDFfV09STEQsICJLVyIsICJLVVdBSVQiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0xBVFZJQSwgRVRTSTFfV09STEQsICJMViIsICJMQVRWSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTEVCQU5PTiwgTlVMTDFfV09STEQsICJMQiIsICJMRUJBTk9OIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9MSUVDSFRFTlNURUlOLCBFVFNJMV9XT1JMRCwgIkxJIiwgIkxJRUNIVEVOU1RFSU4iLCBZRVMsIE5PLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTElUSFVBTklBLCBFVFNJMV9XT1JMRCwgIkxUIiwgIkxJVEhVQU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MVVhFTUJPVVJHLCBFVFNJMV9XT1JMRCwgIkxVIiwgIkxVWEVNQk9VUkciLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTUFDQVUsIEZDQzJfV09STEQsICJNTyIsICJNQUNBVSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTUFDRURPTklBLCBOVUxMMV9XT1JMRCwgIk1LIiwgIk1BQ0VET05JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfTUFMQVlTSUEsIEFQTDhfV09STEQsICJNWSIsICJNQUxBWVNJQSIsIFlFUywgTk8sIE5PLCBZRVMsIE5PLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9NQUxUQSwgRVRTSTFfV09STEQsICJNVCIsICJNQUxUQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NRVhJQ08sIEZDQzFfRkNDQSwgIk1YIiwgIk1FWElDTyIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTU9OQUNPLCBFVFNJNF9XT1JMRCwgIk1DIiwgIk1PTkFDTyIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTU9ST0NDTywgTlVMTDFfV09STEQsICJNQSIsICJNT1JPQ0NPIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9ORVBBTCwgQVBMMV9XT1JMRCwgIk5QIiwgIk5FUEFMIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX05FVEhFUkxBTkRTLCBFVFNJMV9XT1JMRCwgIk5MIiwgIk5FVEhFUkxBTkRTIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX05FVEhFUkxBTkRTX0FOVElMTEVTLCBFVFNJMV9XT1JMRCwgIkFOIiwKLQkgIk5FVEhFUkxBTkRTLUFOVElMTEVTIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX05FV19aRUFMQU5ELCBGQ0MyX0VUU0lDLCAiTloiLCAiTkVXIFpFQUxBTkQiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9OT1JXQVksIEVUU0kxX1dPUkxELCAiTk8iLCAiTk9SV0FZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX09NQU4sIEFQTDZfV09STEQsICJPTSIsICJPTUFOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBOTywgNzAwMH0sCi0Je0NUUllfUEFLSVNUQU4sIE5VTEwxX1dPUkxELCAiUEsiLCAiUEFLSVNUQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1BBTkFNQSwgRkNDMV9GQ0NBLCAiUEEiLCAiUEFOQU1BIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QQVBVQV9ORVdfR1VJTkVBLCBGQ0MxX1dPUkxELCAiUEciLCAiUEFQVUEgTkVXIEdVSU5FQSIsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUEVSVSwgQVBMMV9XT1JMRCwgIlBFIiwgIlBFUlUiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIE5PLCA3MDAwfSwKLQl7Q1RSWV9QSElMSVBQSU5FUywgQVBMMV9XT1JMRCwgIlBIIiwgIlBISUxJUFBJTkVTIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QT0xBTkQsIEVUU0kxX1dPUkxELCAiUEwiLCAiUE9MQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BPUlRVR0FMLCBFVFNJMV9XT1JMRCwgIlBUIiwgIlBPUlRVR0FMIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BVRVJUT19SSUNPLCBGQ0MxX0ZDQ0EsICJQUiIsICJQVUVSVE8gUklDTyIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUUFUQVIsIE5VTEwxX1dPUkxELCAiUUEiLCAiUUFUQVIiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1JPTUFOSUEsIE5VTEwxX1dPUkxELCAiUk8iLCAiUk9NQU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUlVTU0lBLCBOVUxMMV9XT1JMRCwgIlJVIiwgIlJVU1NJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfU0FVRElfQVJBQklBLCBOVUxMMV9XT1JMRCwgIlNBIiwgIlNBVURJIEFSQUJJQSIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfU0VSQklBX01PTlRFTkVHUk8sIEVUU0kxX1dPUkxELCAiQ1MiLCAiU0VSQklBICYgTU9OVEVORUdSTyIsCi0JIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TSU5HQVBPUkUsIEFQTDZfV09STEQsICJTRyIsICJTSU5HQVBPUkUiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NMT1ZBS0lBLCBFVFNJMV9XT1JMRCwgIlNLIiwgIlNMT1ZBSyBSRVBVQkxJQyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TTE9WRU5JQSwgRVRTSTFfV09STEQsICJTSSIsICJTTE9WRU5JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TT1VUSF9BRlJJQ0EsIEZDQzNfV09STEQsICJaQSIsICJTT1VUSCBBRlJJQ0EiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9TUEFJTiwgRVRTSTFfV09STEQsICJFUyIsICJTUEFJTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9TUklfTEFOS0EsIEZDQzNfV09STEQsICJMSyIsICJTUkkgTEFOS0EiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9TV0VERU4sIEVUU0kxX1dPUkxELCAiU0UiLCAiU1dFREVOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NXSVRaRVJMQU5ELCBFVFNJMV9XT1JMRCwgIkNIIiwgIlNXSVRaRVJMQU5EIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NZUklBLCBOVUxMMV9XT1JMRCwgIlNZIiwgIlNZUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9UQUlXQU4sIEFQTDNfRkNDQSwgIlRXIiwgIlRBSVdBTiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfVEhBSUxBTkQsIE5VTEwxX1dPUkxELCAiVEgiLCAiVEhBSUxBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1RSSU5JREFEX1lfVE9CQUdPLCBFVFNJNF9XT1JMRCwgIlRUIiwgIlRSSU5JREFEICYgVE9CQUdPIiwKLQkgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVFVOSVNJQSwgRVRTSTNfV09STEQsICJUTiIsICJUVU5JU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVFVSS0VZLCBFVFNJM19XT1JMRCwgIlRSIiwgIlRVUktFWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1VLUkFJTkUsIE5VTEwxX1dPUkxELCAiVUEiLCAiVUtSQUlORSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfVUFFLCBOVUxMMV9XT1JMRCwgIkFFIiwgIlVOSVRFRCBBUkFCIEVNSVJBVEVTIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9VTklURURfS0lOR0RPTSwgRVRTSTFfV09STEQsICJHQiIsICJVTklURUQgS0lOR0RPTSIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9VTklURURfU1RBVEVTLCBGQ0MzX0ZDQ0EsICJVUyIsICJVTklURUQgU1RBVEVTIiwgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA1ODI1fSwKLQl7Q1RSWV9VTklURURfU1RBVEVTX0ZDQzQ5LCBGQ0M0X0ZDQ0EsICJQUyIsCi0JICJVTklURUQgU1RBVEVTIChQVUJMSUMgU0FGRVRZKSIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfVVJVR1VBWSwgQVBMMl9XT1JMRCwgIlVZIiwgIlVSVUdVQVkiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9VWkJFS0lTVEFOLCBGQ0MzX0ZDQ0EsICJVWiIsICJVWkJFS0lTVEFOIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9WRU5FWlVFTEEsIEFQTDJfRVRTSUMsICJWRSIsICJWRU5FWlVFTEEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9WSUVUX05BTSwgTlVMTDFfV09STEQsICJWTiIsICJWSUVUIE5BTSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfWUVNRU4sIE5VTEwxX1dPUkxELCAiWUUiLCAiWUVNRU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1pJTUJBQldFLCBOVUxMMV9XT1JMRCwgIlpXIiwgIlpJTUJBQldFIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfQorCXtDVFJZX0pPUkRBTiwgRVRTSTJfV09STEQsICJKTyJ9LAorCXtDVFJZX0tBWkFLSFNUQU4sIE5VTEwxX1dPUkxELCAiS1oifSwKKwl7Q1RSWV9LT1JFQV9OT1JUSCwgQVBMOV9XT1JMRCwgIktQIn0sCisJe0NUUllfS09SRUFfUk9DLCBBUEw5X1dPUkxELCAiS1IifSwKKwl7Q1RSWV9LT1JFQV9ST0MyLCBBUEwyX1dPUkxELCAiSzIifSwKKwl7Q1RSWV9LT1JFQV9ST0MzLCBBUEw5X1dPUkxELCAiSzMifSwKKwl7Q1RSWV9LVVdBSVQsIE5VTEwxX1dPUkxELCAiS1cifSwKKwl7Q1RSWV9MQVRWSUEsIEVUU0kxX1dPUkxELCAiTFYifSwKKwl7Q1RSWV9MRUJBTk9OLCBOVUxMMV9XT1JMRCwgIkxCIn0sCisJe0NUUllfTElFQ0hURU5TVEVJTiwgRVRTSTFfV09STEQsICJMSSJ9LAorCXtDVFJZX0xJVEhVQU5JQSwgRVRTSTFfV09STEQsICJMVCJ9LAorCXtDVFJZX0xVWEVNQk9VUkcsIEVUU0kxX1dPUkxELCAiTFUifSwKKwl7Q1RSWV9NQUNBVSwgRkNDMl9XT1JMRCwgIk1PIn0sCisJe0NUUllfTUFDRURPTklBLCBOVUxMMV9XT1JMRCwgIk1LIn0sCisJe0NUUllfTUFMQVlTSUEsIEFQTDhfV09STEQsICJNWSJ9LAorCXtDVFJZX01BTFRBLCBFVFNJMV9XT1JMRCwgIk1UIn0sCisJe0NUUllfTUVYSUNPLCBGQ0MxX0ZDQ0EsICJNWCJ9LAorCXtDVFJZX01PTkFDTywgRVRTSTRfV09STEQsICJNQyJ9LAorCXtDVFJZX01PUk9DQ08sIE5VTEwxX1dPUkxELCAiTUEifSwKKwl7Q1RSWV9ORVBBTCwgQVBMMV9XT1JMRCwgIk5QIn0sCisJe0NUUllfTkVUSEVSTEFORFMsIEVUU0kxX1dPUkxELCAiTkwifSwKKwl7Q1RSWV9ORVRIRVJMQU5EU19BTlRJTExFUywgRVRTSTFfV09STEQsICJBTiJ9LAorCXtDVFJZX05FV19aRUFMQU5ELCBGQ0MyX0VUU0lDLCAiTloifSwKKwl7Q1RSWV9OT1JXQVksIEVUU0kxX1dPUkxELCAiTk8ifSwKKwl7Q1RSWV9PTUFOLCBBUEw2X1dPUkxELCAiT00ifSwKKwl7Q1RSWV9QQUtJU1RBTiwgTlVMTDFfV09STEQsICJQSyJ9LAorCXtDVFJZX1BBTkFNQSwgRkNDMV9GQ0NBLCAiUEEifSwKKwl7Q1RSWV9QQVBVQV9ORVdfR1VJTkVBLCBGQ0MxX1dPUkxELCAiUEcifSwKKwl7Q1RSWV9QRVJVLCBBUEwxX1dPUkxELCAiUEUifSwKKwl7Q1RSWV9QSElMSVBQSU5FUywgQVBMMV9XT1JMRCwgIlBIIn0sCisJe0NUUllfUE9MQU5ELCBFVFNJMV9XT1JMRCwgIlBMIn0sCisJe0NUUllfUE9SVFVHQUwsIEVUU0kxX1dPUkxELCAiUFQifSwKKwl7Q1RSWV9QVUVSVE9fUklDTywgRkNDMV9GQ0NBLCAiUFIifSwKKwl7Q1RSWV9RQVRBUiwgTlVMTDFfV09STEQsICJRQSJ9LAorCXtDVFJZX1JPTUFOSUEsIE5VTEwxX1dPUkxELCAiUk8ifSwKKwl7Q1RSWV9SVVNTSUEsIE5VTEwxX1dPUkxELCAiUlUifSwKKwl7Q1RSWV9TQVVESV9BUkFCSUEsIE5VTEwxX1dPUkxELCAiU0EifSwKKwl7Q1RSWV9TRVJCSUFfTU9OVEVORUdSTywgRVRTSTFfV09STEQsICJDUyJ9LAorCXtDVFJZX1NJTkdBUE9SRSwgQVBMNl9XT1JMRCwgIlNHIn0sCisJe0NUUllfU0xPVkFLSUEsIEVUU0kxX1dPUkxELCAiU0sifSwKKwl7Q1RSWV9TTE9WRU5JQSwgRVRTSTFfV09STEQsICJTSSJ9LAorCXtDVFJZX1NPVVRIX0FGUklDQSwgRkNDM19XT1JMRCwgIlpBIn0sCisJe0NUUllfU1BBSU4sIEVUU0kxX1dPUkxELCAiRVMifSwKKwl7Q1RSWV9TUklfTEFOS0EsIEZDQzNfV09STEQsICJMSyJ9LAorCXtDVFJZX1NXRURFTiwgRVRTSTFfV09STEQsICJTRSJ9LAorCXtDVFJZX1NXSVRaRVJMQU5ELCBFVFNJMV9XT1JMRCwgIkNIIn0sCisJe0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kifSwKKwl7Q1RSWV9UQUlXQU4sIEFQTDNfRkNDQSwgIlRXIn0sCisJe0NUUllfVEhBSUxBTkQsIE5VTEwxX1dPUkxELCAiVEgifSwKKwl7Q1RSWV9UUklOSURBRF9ZX1RPQkFHTywgRVRTSTRfV09STEQsICJUVCJ9LAorCXtDVFJZX1RVTklTSUEsIEVUU0kzX1dPUkxELCAiVE4ifSwKKwl7Q1RSWV9UVVJLRVksIEVUU0kzX1dPUkxELCAiVFIifSwKKwl7Q1RSWV9VS1JBSU5FLCBOVUxMMV9XT1JMRCwgIlVBIn0sCisJe0NUUllfVUFFLCBOVUxMMV9XT1JMRCwgIkFFIn0sCisJe0NUUllfVU5JVEVEX0tJTkdET00sIEVUU0kxX1dPUkxELCAiR0IifSwKKwl7Q1RSWV9VTklURURfU1RBVEVTLCBGQ0MzX0ZDQ0EsICJVUyJ9LAorCS8qIFRoaXMgIlBTIiBpcyBmb3IgVVMgcHVibGljIHNhZmV0eSBhY3R1YWxseS4uLiB0byBzdXBwb3J0IHRoaXMgd2UKKwkgKiB3b3VsZCBuZWVkIHRvIGFzc2lnbiBuZXcgc3BlY2lhbCBhbHBoYTIgdG8gQ1JEQSBkYiBhcyB3aXRoIHRoZSB3b3JsZAorCSAqIHJlZ2RvbWFpbiBhbmQgdXNlIGFub3RoZXIgYWxwaGEyICovCisJe0NUUllfVU5JVEVEX1NUQVRFU19GQ0M0OSwgRkNDNF9GQ0NBLCAiUFMifSwKKwl7Q1RSWV9VUlVHVUFZLCBBUEwyX1dPUkxELCAiVVkifSwKKwl7Q1RSWV9VWkJFS0lTVEFOLCBGQ0MzX0ZDQ0EsICJVWiJ9LAorCXtDVFJZX1ZFTkVaVUVMQSwgQVBMMl9FVFNJQywgIlZFIn0sCisJe0NUUllfVklFVF9OQU0sIE5VTEwxX1dPUkxELCAiVk4ifSwKKwl7Q1RSWV9ZRU1FTiwgTlVMTDFfV09STEQsICJZRSJ9LAorCXtDVFJZX1pJTUJBQldFLCBOVUxMMV9XT1JMRCwgIlpXIn0sCiB9OwogCi1lbnVtIHsKLQlOT19ERlMgPSAweDAwMDAwMDAwMDAwMDAwMDBVTEwsCi0JREZTX0ZDQzMgPSAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCi0JREZTX0VUU0kgPSAweDAwMDAwMDAwMDAwMDAwMDJVTEwsCi0JREZTX01LSzQgPSAweDAwMDAwMDAwMDAwMDAwMDRVTEwsCi19OwotCi1lbnVtIHsKLQlGMV80OTE1XzQ5MjUsCi0JRjFfNDkzNV80OTQ1LAotCUYxXzQ5MjBfNDk4MCwKLQlGMV80OTQyXzQ5ODcsCi0JRjFfNDk0NV80OTg1LAotCUYxXzQ5NTBfNDk4MCwKLQlGMV81MDM1XzUwNDAsCi0JRjFfNTA0MF81MDgwLAotCUYxXzUwNTVfNTA1NSwKLQotCUYxXzUxMjBfNTI0MCwKLQotCUYxXzUxNzBfNTIzMCwKLQlGMl81MTcwXzUyMzAsCi0KLQlGMV81MTgwXzUyNDAsCi0JRjJfNTE4MF81MjQwLAotCUYzXzUxODBfNTI0MCwKLQlGNF81MTgwXzUyNDAsCi0JRjVfNTE4MF81MjQwLAotCUY2XzUxODBfNTI0MCwKLQlGN181MTgwXzUyNDAsCi0JRjhfNTE4MF81MjQwLAotCi0JRjFfNTE4MF81MzIwLAotCi0JRjFfNTI0MF81MjgwLAotCi0JRjFfNTI2MF81MjgwLAotCi0JRjFfNTI2MF81MzIwLAotCUYyXzUyNjBfNTMyMCwKLQlGM181MjYwXzUzMjAsCi0JRjRfNTI2MF81MzIwLAotCUY1XzUyNjBfNTMyMCwKLQlGNl81MjYwXzUzMjAsCi0KLQlGMV81MjYwXzU3MDAsCi0KLQlGMV81MjgwXzUzMjAsCi0KLQlGMV81NTAwXzU1ODAsCi0KLQlGMV81NTAwXzU2MjAsCi0KLQlGMV81NTAwXzU3MDAsCi0JRjJfNTUwMF81NzAwLAotCUYzXzU1MDBfNTcwMCwKLQlGNF81NTAwXzU3MDAsCi0JRjVfNTUwMF81NzAwLAotCi0JRjFfNTY2MF81NzAwLAotCi0JRjFfNTc0NV81ODA1LAotCUYyXzU3NDVfNTgwNSwKLQlGM181NzQ1XzU4MDUsCi0KLQlGMV81NzQ1XzU4MjUsCi0JRjJfNTc0NV81ODI1LAotCUYzXzU3NDVfNTgyNSwKLQlGNF81NzQ1XzU4MjUsCi0JRjVfNTc0NV81ODI1LAotCUY2XzU3NDVfNTgyNSwKLQotCVcxXzQ5MjBfNDk4MCwKLQlXMV81MDQwXzUwODAsCi0JVzFfNTE3MF81MjMwLAotCVcxXzUxODBfNTI0MCwKLQlXMV81MjYwXzUzMjAsCi0JVzFfNTc0NV81ODI1LAotCVcxXzU1MDBfNTcwMCwKLQlBX0RFTU9fQUxMX0NIQU5ORUxTCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjVHaHpGcmVxW10gPSB7Ci0JezQ5MTUsIDQ5MjUsIDIzLCAwLCAxMCwgNSwgTk9fREZTLCBQU0NBTl9NS0syLCAxNn0sCi0JezQ5MzUsIDQ5NDUsIDIzLCAwLCAxMCwgNSwgTk9fREZTLCBQU0NBTl9NS0syLCAxNn0sCi0JezQ5MjAsIDQ5ODAsIDIzLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMiwgN30sCi0JezQ5NDIsIDQ5ODcsIDI3LCA2LCA1LCA1LCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezQ5NDUsIDQ5ODUsIDMwLCA2LCAxMCwgNSwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs0OTUwLCA0OTgwLCAzMywgNiwgMjAsIDUsIE5PX0RGUywgUFNDQU5fRkNDLCAwfSwKLQl7NTAzNSwgNTA0MCwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDEyfSwKLQl7NTA0MCwgNTA4MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0syLCAyfSwKLQl7NTA1NSwgNTA1NSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDEyfSwKLQotCXs1MTIwLCA1MjQwLCA1LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezUxNzAsIDUyMzAsIDIzLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzIsIDF9LAotCXs1MTcwLCA1MjMwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0syLCAxfSwKLQotCXs1MTgwLCA1MjQwLCAxNSwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAxNywgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAxfSwKLQl7NTE4MCwgNTI0MCwgMTgsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjMsIDYsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs1MTgwLCA1MjQwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCAwfSwKLQl7NTE4MCwgNTI0MCwgMjMsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTE4MCwgNTMyMCwgMjAsIDYsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjQwLCA1MjgwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTI2MCwgNTI4MCwgMjMsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTI2MCwgNTMyMCwgMTgsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTI2MCwgNTMyMCwgMjAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSB8IERGU19NS0s0LAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJIHwgUFNDQU5fTUtLMywgMH0sCi0KLQotCXs1MjYwLCA1MzIwLCAyMCwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAyfSwKLQl7NTI2MCwgNTMyMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAyfSwKLQl7NTI2MCwgNTMyMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAwfSwKLQl7NTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTI2MCwgNTcwMCwgNSwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBOT19QU0NBTiwgMH0sCi0KLQl7NTI4MCwgNTMyMCwgMTcsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAwfSwKLQotCXs1NTAwLCA1NTgwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDLCAwfSwKLQotCXs1NTAwLCA1NjIwLCAzMCwgNiwgMjAsIDIwLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTUwMCwgNTcwMCwgMjAsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCA0fSwKLQl7NTUwMCwgNTcwMCwgMjcsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezU1MDAsIDU3MDAsIDMwLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1NTAwLCA1NzAwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsCi0JIFBTQ0FOX01LSzMgfCBQU0NBTl9GQ0MsIDB9LAotCXs1NTAwLCA1NzAwLCAzMCwgNiwgMjAsIDIwLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwgMH0sCi0KLQl7NTY2MCwgNTcwMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgMH0sCi0KLQl7NTc0NSwgNTgwNSwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MDUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODA1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0VUU0ksIDB9LAotCXs1NzQ1LCA1ODI1LCA1LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAxNywgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgyNSwgMjAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAzfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQotCXs0OTIwLCA0OTgwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUwNDAsIDUwODAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTE3MCwgNTIzMCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1MTgwLCA1MjQwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUyNjAsIDUzMjAsIDMwLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTUwMCwgNTcwMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwfSwKLQl7NDkyMCwgNjEwMCwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlUMV81MTMwXzU2NTAsCi0JVDFfNTE1MF81NjcwLAotCi0JVDFfNTIwMF81MjAwLAotCVQyXzUyMDBfNTIwMCwKLQlUM181MjAwXzUyMDAsCi0JVDRfNTIwMF81MjAwLAotCVQ1XzUyMDBfNTIwMCwKLQlUNl81MjAwXzUyMDAsCi0JVDdfNTIwMF81MjAwLAotCVQ4XzUyMDBfNTIwMCwKLQotCVQxXzUyMDBfNTI4MCwKLQlUMl81MjAwXzUyODAsCi0JVDNfNTIwMF81MjgwLAotCVQ0XzUyMDBfNTI4MCwKLQlUNV81MjAwXzUyODAsCi0JVDZfNTIwMF81MjgwLAotCi0JVDFfNTIwMF81MjQwLAotCVQxXzUyMTBfNTIxMCwKLQlUMl81MjEwXzUyMTAsCi0JVDNfNTIxMF81MjEwLAotCVQ0XzUyMTBfNTIxMCwKLQlUNV81MjEwXzUyMTAsCi0JVDZfNTIxMF81MjEwLAotCVQ3XzUyMTBfNTIxMCwKLQlUOF81MjEwXzUyMTAsCi0JVDlfNTIxMF81MjEwLAotCVQxMF81MjEwXzUyMTAsCi0JVDFfNTI0MF81MjQwLAotCi0JVDFfNTIxMF81MjUwLAotCVQxXzUyMTBfNTI5MCwKLQlUMl81MjEwXzUyOTAsCi0JVDNfNTIxMF81MjkwLAotCi0JVDFfNTI4MF81MjgwLAotCVQyXzUyODBfNTI4MCwKLQlUMV81MjkwXzUyOTAsCi0JVDJfNTI5MF81MjkwLAotCVQzXzUyOTBfNTI5MCwKLQlUMV81MjUwXzUyOTAsCi0JVDJfNTI1MF81MjkwLAotCVQzXzUyNTBfNTI5MCwKLQlUNF81MjUwXzUyOTAsCi0KLQlUMV81NTQwXzU2NjAsCi0JVDJfNTU0MF81NjYwLAotCVQzXzU1NDBfNTY2MCwKLQlUMV81NzYwXzU4MDAsCi0JVDJfNTc2MF81ODAwLAotCVQzXzU3NjBfNTgwMCwKLQlUNF81NzYwXzU4MDAsCi0JVDVfNTc2MF81ODAwLAotCVQ2XzU3NjBfNTgwMCwKLQlUN181NzYwXzU4MDAsCi0KLQlUMV81NzY1XzU4MDUsCi0JVDJfNTc2NV81ODA1LAotCVQzXzU3NjVfNTgwNSwKLQlUNF81NzY1XzU4MDUsCi0JVDVfNTc2NV81ODA1LAotCVQ2XzU3NjVfNTgwNSwKLQlUN181NzY1XzU4MDUsCi0JVDhfNTc2NV81ODA1LAotCVQ5XzU3NjVfNTgwNSwKLQotCVdUMV81MjEwXzUyNTAsCi0JV1QxXzUyOTBfNTI5MCwKLQlXVDFfNTU0MF81NjYwLAotCVdUMV81NzYwXzU4MDAsCi19OwotCi1lbnVtIHsKLQlGMV8yMzEyXzIzNzIsCi0JRjJfMjMxMl8yMzcyLAotCi0JRjFfMjQxMl8yNDcyLAotCUYyXzI0MTJfMjQ3MiwKLQlGM18yNDEyXzI0NzIsCi0KLQlGMV8yNDEyXzI0NjIsCi0JRjJfMjQxMl8yNDYyLAotCi0JRjFfMjQzMl8yNDQyLAotCi0JRjFfMjQ1N18yNDcyLAotCi0JRjFfMjQ2N18yNDcyLAotCi0JRjFfMjQ4NF8yNDg0LAotCUYyXzI0ODRfMjQ4NCwKLQotCUYxXzI1MTJfMjczMiwKLQotCVcxXzIzMTJfMjM3MiwKLQlXMV8yNDEyXzI0MTIsCi0JVzFfMjQxN18yNDMyLAotCVcxXzI0MzdfMjQ0MiwKLQlXMV8yNDQ3XzI0NTcsCi0JVzFfMjQ2Ml8yNDYyLAotCVcxXzI0NjdfMjQ2NywKLQlXMl8yNDY3XzI0NjcsCi0JVzFfMjQ3Ml8yNDcyLAotCVcyXzI0NzJfMjQ3MiwKLQlXMV8yNDg0XzI0ODQsCi0JVzJfMjQ4NF8yNDg0LAotfTsKLQotc3RhdGljIHN0cnVjdCBSZWdEbW5GcmVxQmFuZCByZWdEbW4yR2h6RnJlcVtdID0gewotCXsyMzEyLCAyMzcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ3MiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMH0sCi0JezI0MTIsIDI0NzIsIDMwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ2MiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EsIDB9LAotCi0JezI0MzIsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQ1NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBLCAwfSwKLQotCXsyNDg0LCAyNDg0LCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLAotCSBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMiwgMH0sCi0KLQl7MjUxMiwgMjczMiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0MTIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTcsIDI0MzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MzcsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0NDcsIDI0NTcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0NjIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlHMV8yMzEyXzIzNzIsCi0JRzJfMjMxMl8yMzcyLAotCi0JRzFfMjQxMl8yNDcyLAotCUcyXzI0MTJfMjQ3MiwKLQlHM18yNDEyXzI0NzIsCi0KLQlHMV8yNDEyXzI0NjIsCi0JRzJfMjQxMl8yNDYyLAotCi0JRzFfMjQzMl8yNDQyLAotCi0JRzFfMjQ1N18yNDcyLAotCi0JRzFfMjUxMl8yNzMyLAotCi0JRzFfMjQ2N18yNDcyLAotCi0JV0cxXzIzMTJfMjM3MiwKLQlXRzFfMjQxMl8yNDYyLAotCVdHMV8yNDY3XzI0NzIsCi0JV0cyXzI0NjdfMjQ3MiwKLQlHX0RFTU9fQUxMX0NIQU5ORUxTCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjJHaHoxMWdGcmVxW10gPSB7Ci0JezIzMTIsIDIzNzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBX0csIDB9LAotCXsyNDEyLCAyNDcyLCAzMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0MTIsIDI0NjIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBX0csIDB9LAotCi0JezI0MzIsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQ1NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNTEyLCAyNzMyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQSwgMH0sCi0KLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyMzEyLCAyNzMyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotfTsKLQotZW51bSB7Ci0JVDFfMjMxMl8yMzcyLAotCVQxXzI0MzdfMjQzNywKLQlUMl8yNDM3XzI0MzcsCi0JVDNfMjQzN18yNDM3LAotCVQxXzI1MTJfMjczMgotfTsKLQotc3RhdGljIHN0cnVjdCByZWdEb21haW4gcmVnRG9tYWluc1tdID0gewotCi0Je0RFQlVHX1JFR19ETU4sIEZDQywgREZTX0ZDQzMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEFfREVNT19BTExfQ0hBTk5FTFMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzUxMzBfNTY1MCwgVDFfNTE1MF81NjcwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzUyMDBfNTI0MCwgVDFfNTI4MF81MjgwLCBUMV81NTQwXzU2NjAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRjFfMjMxMl8yMzcyLCBGMV8yNDEyXzI0NzIsIEYxXzI0ODRfMjQ4NCwgRjFfMjUxMl8yNzMyLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHX0RFTU9fQUxMX0NIQU5ORUxTLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV8yMzEyXzIzNzIsIFQxXzI0MzdfMjQzNywgVDFfMjUxMl8yNzMyLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7QVBMMSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEY0XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDIsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMV81NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEwzLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjFfNTI4MF81MzIwLCBGMl81NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTI5MF81MjkwLCBUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw0LCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjRfNTE4MF81MjQwLCBGM181NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIxMF81MjEwLCBUM181NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIwMF81MjAwLCBUM181NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYyXzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDRfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDYsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9GQ0NfVCB8IFBTQ0FOX0ZDQywgTk9fUkVRLAotCSBCTShGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjNfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIxMF81MjEwLCBUMV81MjUwXzUyOTAsIFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgVDVfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDcsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLCBOT19SRVEsCi0JIEJNKEYxXzUyODBfNTMyMCwgRjVfNTUwMF81NzAwLCBGM181NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjkwXzUyOTAsIFQ1XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NTQwXzU2NjAsIFQ2XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw4LCBFVFNJLCBOT19ERlMsIE5PX1BTQ0FOLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjZfNTI2MF81MzIwLCBGNF81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDJfNTI5MF81MjkwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTI4MF81MjgwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMOSwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUzMjAsIEYxXzU1MDBfNTYyMCwgRjNfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTI5MF81MjkwLCBUNV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTU0MF81NjYwLCBUNl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMMTAsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE4MF81MzIwLCBGNV81NTAwXzU3MDAsIEYzXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyOTBfNTI5MCwgVDVfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzU1NDBfNTY2MCwgVDZfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0kxLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGMl81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzUyMDBfNTI4MCwgVDJfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0kyLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYzXzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0kzLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNCwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGM181MTgwXzUyNDAsIEYxXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl81MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTUsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTYsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjVfNTE4MF81MjQwLCBGMV81MjYwXzUyODAsIEYzXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMTBfNTI1MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDRfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MxLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjJfNTE4MF81MjQwLCBGNF81MjYwXzUzMjAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTI1MF81MjkwLCBUNl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDdfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDMiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEY2XzUxODBfNTI0MCwgRjVfNTI2MF81MzIwLCBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIFQzXzUyNTBfNTI5MCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIwMF81MjAwLCBUMV81MjQwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MzLCBGQ0MsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9GQ0NfVCwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEYzXzUyNjBfNTMyMCwgRjFfNTUwMF81NzAwLCBGNV81NzQ1XzU4MjUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ0XzUyMDBfNTIwMCwgVDhfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzQsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0ZDQ19ULCBOT19SRVEsCi0JIEJNKEYxXzQ5NDJfNDk4NywgRjFfNDk0NV80OTg1LCBGMV80OTUwXzQ5ODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUOF81MjEwXzUyMTAsIFQ0XzUyNTBfNTI5MCwgVDdfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjQwLCBUMV81MjgwXzUyODAsIFQ5XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzUsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUNl81MjEwXzUyMTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUOF81MjAwXzUyMDAsIFQ3XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0M2LCBGQ0MsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIE5PX1JFUSwKLQkgQk0oRjhfNTE4MF81MjQwLCBGNV81MjYwXzUzMjAsIEYxXzU1MDBfNTU4MCwgRjFfNTY2MF81NzAwLAotCSAgICBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCBUM181MjUwXzUyOTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMDBfNTIwMCwgVDFfNTI0MF81MjQwLCBUMl81MjgwXzUyODAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7TUtLMSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtNS0syLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMiwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLAotCSAgICBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMywgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNF81MTgwXzUyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ5XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzQsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMTBfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNl81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgVDNfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNiwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMl81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUM181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s3LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s4LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyODAsIFQzXzU1NDBfNTY2MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzksIE1LSywgTk9fREZTLCBQU0NBTl9NS0syIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDlfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTAsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTEsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwKLQkgICAgRjRfNTUwMF81NzAwLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTIsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsCi0JICAgIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMywgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTcwXzUyMzAsIEY3XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzE0LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDQwXzUwODAsIEYxXzUwNTVfNTA1NSwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTUsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNDBfNTA4MCwgRjFfNTA1NV81MDU1LCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwKLQkgICAgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7QVBMRCwgTk9fQ1RMLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYyXzIzMTJfMjM3MiwgRjJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKEcyXzIzMTJfMjM3MiwgRzJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVST30sCi0KLQl7RVRTSUEsIE5PX0NUTCwgTk9fREZTLCBQU0NBTl9FVFNJQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYxXzI0NTdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzFfMjQ1N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0VUU0lCLCBFVFNJLCBOT19ERlMsIFBTQ0FOX0VUU0lCLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQzMl8yNDQyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDMyXzI0NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7RVRTSUMsIEVUU0ksIE5PX0RGUywgUFNDQU5fRVRTSUMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGM18yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEczXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtGQ0NBLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7TUtLQSwgTUtLLCBOT19ERlMsCi0JIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0cgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0cgfAotCSBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NjIsIEYxXzI0NjdfMjQ3MiwgRjJfMjQ4NF8yNDg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzJfMjQxMl8yNDYyLCBHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtNS0tDLCBNS0ssIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09STEQsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMF9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgVzFfMjQ4NF8yNDg0LCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwMV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsCi0JIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0MTdfMjQzMiwKLQkgICAgVzFfMjQ0N18yNDU3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMDJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLAotCSBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsCi0JICAgIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtFVTFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsCi0JICAgIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMl8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMl8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMl8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsCi0JICAgIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgVzFfMjQ4NF8yNDg0LCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IzX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMl8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1I0X1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1I1X0VUU0lDLCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjlfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JBX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCBXMV81NTAwXzU3MDAsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdHMV8yNDEyXzI0NjIsIFdHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JCX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je05VTEwxLCBOT19DVEwsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY21vZGUgbW9kZXNbXSA9IHsKLQl7QVRIOUtfTU9ERV8xMUEsIENIQU5ORUxfQX0sCi0Je0FUSDlLX01PREVfMTFCLCBDSEFOTkVMX0J9LAotCXtBVEg5S19NT0RFXzExRywgQ0hBTk5FTF9HfSwKLQl7QVRIOUtfTU9ERV8xMU5HX0hUMjAsIENIQU5ORUxfR19IVDIwfSwKLQl7QVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTLCBDSEFOTkVMX0dfSFQ0MFBMVVN9LAotCXtBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTLCBDSEFOTkVMX0dfSFQ0ME1JTlVTfSwKLQl7QVRIOUtfTU9ERV8xMU5BX0hUMjAsIENIQU5ORUxfQV9IVDIwfSwKLQl7QVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTLCBDSEFOTkVMX0FfSFQ0MFBMVVN9LAotCXtBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBDSEFOTkVMX0FfSFQ0ME1JTlVTfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgamFwYW5fYmFuZGNoZWNrIGpfYmFuZGNoZWNrW10gPSB7Ci0Je0YxXzUxNzBfNTIzMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERH0sCi0Je0Y0XzUxODBfNTI0MCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU59LAotCXtGMl81MjYwXzUzMjAsIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMn0sCi0Je0Y0XzU1MDBfNTcwMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkR9Ci19OwotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvdmlydHVhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvdmlydHVhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjQyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMKQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXRoOWsuaCIKKworc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgeworCWludCBjb3VudDsKKwl1OCAqYWRkcjsKK307CisKK3N0YXRpYyB2b2lkIGF0aDlrX3ZpZl9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgKml0ZXJfZGF0YSA9IGRhdGE7CisJdTggKm5idWY7CisKKwluYnVmID0ga3JlYWxsb2MoaXRlcl9kYXRhLT5hZGRyLCAoaXRlcl9kYXRhLT5jb3VudCArIDEpICogRVRIX0FMRU4sCisJCQlHRlBfQVRPTUlDKTsKKwlpZiAobmJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltZW1jcHkobmJ1ZiArIGl0ZXJfZGF0YS0+Y291bnQgKiBFVEhfQUxFTiwgbWFjLCBFVEhfQUxFTik7CisJaXRlcl9kYXRhLT5hZGRyID0gbmJ1ZjsKKwlpdGVyX2RhdGEtPmNvdW50Kys7Cit9CisKK3ZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aDlrX3ZpZl9pdGVyX2RhdGEgaXRlcl9kYXRhOworCWludCBpLCBqOworCXU4IG1hc2tbRVRIX0FMRU5dOworCisJLyoKKwkgKiBBZGQgcHJpbWFyeSBNQUMgYWRkcmVzcyBldmVuIGlmIGl0IGlzIG5vdCBpbiBhY3RpdmUgdXNlIHNpbmNlIGl0CisJICogd2lsbCBiZSBjb25maWd1cmVkIHRvIHRoZSBoYXJkd2FyZSBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgYW5kIHRoZQorCSAqIEJTU0lEIG1hc2sgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgYW5vdGhlciBhZGRyZXNzIGlzIGFjdGl2ZS4KKwkgKi8KKwlpdGVyX2RhdGEuYWRkciA9IGttYWxsb2MoRVRIX0FMRU4sIEdGUF9BVE9NSUMpOworCWlmIChpdGVyX2RhdGEuYWRkcikgeworCQltZW1jcHkoaXRlcl9kYXRhLmFkZHIsIHNjLT5zY19haC0+bWFjYWRkciwgRVRIX0FMRU4pOworCQlpdGVyX2RhdGEuY291bnQgPSAxOworCX0gZWxzZQorCQlpdGVyX2RhdGEuY291bnQgPSAwOworCisJLyogR2V0IGxpc3Qgb2YgYWxsIGFjdGl2ZSBNQUMgYWRkcmVzc2VzICovCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKHNjLT5odywgYXRoOWtfdmlmX2l0ZXIsCisJCQkJCQkgICAmaXRlcl9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYygKKwkJCXNjLT5zZWNfd2lwaHlbaV0tPmh3LCBhdGg5a192aWZfaXRlciwgJml0ZXJfZGF0YSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwkvKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIG1hc2sgdG8gY292ZXIgYWxsIGFjdGl2ZSBhZGRyZXNzZXMgKi8KKwltZW1zZXQobWFzaywgMCwgRVRIX0FMRU4pOworCWZvciAoaSA9IDA7IGkgPCBpdGVyX2RhdGEuY291bnQ7IGkrKykgeworCQl1OCAqYTEgPSBpdGVyX2RhdGEuYWRkciArIGkgKiBFVEhfQUxFTjsKKwkJZm9yIChqID0gaSArIDE7IGogPCBpdGVyX2RhdGEuY291bnQ7IGorKykgeworCQkJdTggKmEyID0gaXRlcl9kYXRhLmFkZHIgKyBqICogRVRIX0FMRU47CisJCQltYXNrWzBdIHw9IGExWzBdIF4gYTJbMF07CisJCQltYXNrWzFdIHw9IGExWzFdIF4gYTJbMV07CisJCQltYXNrWzJdIHw9IGExWzJdIF4gYTJbMl07CisJCQltYXNrWzNdIHw9IGExWzNdIF4gYTJbM107CisJCQltYXNrWzRdIHw9IGExWzRdIF4gYTJbNF07CisJCQltYXNrWzVdIHw9IGExWzVdIF4gYTJbNV07CisJCX0KKwl9CisKKwlrZnJlZShpdGVyX2RhdGEuYWRkcik7CisKKwkvKiBJbnZlcnQgdGhlIG1hc2sgYW5kIGNvbmZpZ3VyZSBoYXJkd2FyZSAqLworCXNjLT5ic3NpZG1hc2tbMF0gPSB+bWFza1swXTsKKwlzYy0+YnNzaWRtYXNrWzFdID0gfm1hc2tbMV07CisJc2MtPmJzc2lkbWFza1syXSA9IH5tYXNrWzJdOworCXNjLT5ic3NpZG1hc2tbM10gPSB+bWFza1szXTsKKwlzYy0+YnNzaWRtYXNrWzRdID0gfm1hc2tbNF07CisJc2MtPmJzc2lkbWFza1s1XSA9IH5tYXNrWzVdOworCisJYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHNjKTsKK30KKworaW50IGF0aDlrX3dpcGh5X2FkZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaSwgZXJyb3I7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwl1OCBhZGRyW0VUSF9BTEVOXTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5KSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHNjLT5udW1fc2VjX3dpcGh5KSB7CisJCS8qIE5vIGVtcHR5IHNsb3QgYXZhaWxhYmxlOyBpbmNyZWFzZSBhcnJheSBsZW5ndGggKi8KKwkJc3RydWN0IGF0aF93aXBoeSAqKm47CisJCW4gPSBrcmVhbGxvYyhzYy0+c2VjX3dpcGh5LAorCQkJICAgICAoc2MtPm51bV9zZWNfd2lwaHkgKyAxKSAqCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5ICopLAorCQkJICAgICBHRlBfQVRPTUlDKTsKKwkJaWYgKG4gPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW5baV0gPSBOVUxMOworCQlzYy0+c2VjX3dpcGh5ID0gbjsKKwkJc2MtPm51bV9zZWNfd2lwaHkrKzsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgc2MtPmRldik7CisKKwlhcGh5ID0gaHctPnByaXY7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5zZWNfd2lwaHlbaV0gPSBhcGh5OworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwltZW1jcHkoYWRkciwgc2MtPnNjX2FoLT5tYWNhZGRyLCBFVEhfQUxFTik7CisJYWRkclswXSB8PSAweDAyOyAvKiBMb2NhbGx5IG1hbmFnZWQgYWRkcmVzcyAqLworCS8qCisJICogWE9SIHZpcnR1YWwgd2lwaHkgaW5kZXggaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyB0byBnZW5lcmF0ZQorCSAqIGEgZGlmZmVyZW50IE1BQyBhZGRyZXNzIGZvciBlYWNoIHZpcnR1YWwgd2lwaHkuCisJICovCisJYWRkcls1XSBePSBpICYgMHhmZjsKKwlhZGRyWzRdIF49IChpICYgMHhmZjAwKSA+PiA4OworCWFkZHJbM10gXj0gKGkgJiAweGZmMDAwMCkgPj4gMTY7CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgYWRkcik7CisKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CisKKwllcnJvciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisKKwlpZiAoZXJyb3IgPT0gMCkgeworCQkvKiBNYWtlIHN1cmUgd2lwaHkgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQgKGlmIGVuYWJsZWQpICovCisJCWF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc2MsIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBhdGg5a193aXBoeV9kZWwoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWludCBpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKGFwaHkgPT0gc2MtPnNlY193aXBoeVtpXSkgeworCQkJc2MtPnNlY193aXBoeVtpXSA9IE5VTEw7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXBoeS0+aHcpOworCQkJaWVlZTgwMjExX2ZyZWVfaHcoYXBoeS0+aHcpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBhdGg5a19zZW5kX251bGxmdW5jKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgICAgIGludCBwcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJX19sZTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKworCXNrYiA9IGRldl9hbGxvY19za2IoMjQpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KGhkciwgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwcykKKwkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShoZHItPmFkZHIxLCBic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIyLCBhcGh5LT5ody0+d2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIzLCBic3NpZCwgRVRIX0FMRU4pOworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaW5mby0+ZmxhZ3MgPSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CisJaW5mby0+Y29udHJvbC52aWYgPSB2aWY7CisJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSAwOworCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPSA0OworCWluZm8tPmNvbnRyb2wucmF0ZXNbMV0uaWR4ID0gLTE7CisKKwltZW1zZXQoJnR4Y3RsLCAwLCBzaXplb2Yoc3RydWN0IGF0aF90eF9jb250cm9sKSk7CisJdHhjdGwudHhxID0gJnNjLT50eC50eHFbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPXV07CisJdHhjdGwuZnJhbWVfdHlwZSA9IHBzID8gQVRIOUtfSU5UX1BBVVNFIDogQVRIOUtfSU5UX1VOUEFVU0U7CisKKwlpZiAoYXRoX3R4X3N0YXJ0KGFwaHktPmh3LCBza2IsICZ0eGN0bCkgIT0gMCkKKwkJZ290byBleGl0OworCisJcmV0dXJuIDA7CitleGl0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgYm9vbCBfX2F0aDlrX3dpcGh5X3BhdXNpbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9QQVVTSU5HKQorCQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhdGg5a193aXBoeV9wYXVzaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWJvb2wgcmV0OworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYyk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBfX2F0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTikKKwkJcmV0dXJuIHRydWU7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBhdGg5a193aXBoeV9zY2FubmluZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlib29sIHJldDsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3NjYW5uaW5nKHNjKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19hdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOworCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fYXRoOWtfd2lwaHlfdW5wYXVzZV9jaChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWlmIChhcGh5ID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoYXBoeS0+Y2hhbl9pZHggIT0gYXBoeS0+c2MtPmNoYW5faWR4KQorCQlyZXR1cm47IC8qIHdpcGh5IG5vdCBvbiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCAqLworCV9fYXRoOWtfd2lwaHlfdW5wYXVzZShhcGh5KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfd2lwaHlfdW5wYXVzZV9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCV9fYXRoOWtfd2lwaHlfdW5wYXVzZV9jaChzYy0+cHJpX3dpcGh5KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykKKwkJX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHNjLT5zZWNfd2lwaHlbaV0pOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLCBjaGFuX3dvcmspOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+bmV4dF93aXBoeTsKKworCWlmIChhcGh5ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogQWxsIHBlbmRpbmcgaW50ZXJmYWNlcyBwYXVzZWQ7IHJlYWR5IHRvIGNoYW5nZQorCSAqIGNoYW5uZWxzLgorCSAqLworCisJLyogQ2hhbmdlIGNoYW5uZWxzICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbGx5ICovCisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBhcGh5LT5odywKKwkJCSAgICAgICZzYy0+c2NfYWgtPmNoYW5uZWxzW3NjLT5jaGFuX2lkeF0pOworCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCBzYy0+Y2hhbl9pc19odCk7CisJaWYgKGF0aF9zZXRfY2hhbm5lbChzYywgYXBoeS0+aHcsCisJCQkgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNldCBjaGFubmVsIGZvciBuZXcgIgorCQkgICAgICAgInZpcnR1YWwgd2lwaHlcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJYXRoOWtfd2lwaHlfdW5wYXVzZV9jaGFubmVsKHNjKTsKK30KKworLyoKKyAqIGF0aDlrIHZlcnNpb24gb2YgaWVlZTgwMjExX3R4X3N0YXR1cygpIGZvciBUWCBmcmFtZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCisgKiBpbnRlcm5hbGx5IGluIHRoZSBkcml2ZXIuCisgKi8KK3ZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCisJaWYgKHR4X2luZm9fcHJpdiAmJiB0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPT0gQVRIOUtfSU5UX1BBVVNFICYmCisJICAgIGFwaHktPnN0YXRlID09IEFUSF9XSVBIWV9QQVVTSU5HKSB7CisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogbm8gQUNLIGZvciBwYXVzZSAiCisJCQkgICAgICAgImZyYW1lXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJLyoKKwkJCSAqIFRoZSBBUCBkaWQgbm90IHJlcGx5OyBpZ25vcmUgdGhpcyB0byBhbGxvdyB1cyB0bworCQkJICogY29udGludWUuCisJCQkgKi8KKwkJfQorCQlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJCWlmICghYXRoOWtfd2lwaHlfcGF1c2luZyhhcGh5LT5zYykpIHsKKwkJCS8qCisJCQkgKiBEcm9wIGZyb20gdGFza2xldCB0byB3b3JrIHRvIGFsbG93IG11dGV4IGZvciBjaGFubmVsCisJCQkgKiBjaGFuZ2UuCisJCQkgKi8KKwkJCXF1ZXVlX3dvcmsoYXBoeS0+c2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCQl9CisJfQorCisJa2ZyZWUodHhfaW5mb19wcml2KTsKKwl0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gTlVMTDsKKworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfbWFya19wYXVzZWQoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwlpZiAoIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpCisJCXF1ZXVlX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+Y2hhbl93b3JrKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfcGF1c2VfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBkYXRhOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKSB2aWYtPmRydl9wcml2OworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmICghdmlmLT5ic3NfY29uZi5hc3NvYykgeworCQkJYXRoOWtfbWFya19wYXVzZWQoYXBoeSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBUT0RPOiBjb3VsZCBhdm9pZCB0aGlzIGlmIGFscmVhZHkgaW4gUFMgbW9kZSAqLworCQlpZiAoYXRoOWtfc2VuZF9udWxsZnVuYyhhcGh5LCB2aWYsIGF2cC0+YnNzaWQsIDEpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZW5kIFBTIG51bGxmdW5jXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCWF0aDlrX21hcmtfcGF1c2VkKGFwaHkpOworCQl9CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCS8qIEJlYWNvbiB0cmFuc21pc3Npb24gaXMgcGF1c2VkIGJ5IGFwaHktPnN0YXRlIGNoYW5nZSAqLworCQlhdGg5a19tYXJrX3BhdXNlZChhcGh5KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyBpbnQgX19hdGg5a193aXBoeV9wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhhcGh5LT5odyk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0lORzsKKwkvKgorCSAqIFRPRE86IGhhbmRsZSBQQVVTSU5HLT5QQVVTRUQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZQorCSAqIGFjdGl2ZSB2aWZzIChub3cgd2UgZG8gaXQgb24gdGhlIGZpcnN0IHZpZiBnZXR0aW5nIHJlYWR5OyBzaG91bGQgYmUKKwkgKiBvbiB0aGUgbGFzdCkKKwkgKi8KKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoYXBoeS0+aHcsIGF0aDlrX3BhdXNlX2l0ZXIsCisJCQkJCQkgICBhcGh5KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaW50IHJldDsKKwlzcGluX2xvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3BhdXNlKGFwaHkpOworCXNwaW5fdW5sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfdW5wYXVzZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGRhdGE7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopIHZpZi0+ZHJ2X3ByaXY7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKCF2aWYtPmJzc19jb25mLmFzc29jKQorCQkJYnJlYWs7CisJCWF0aDlrX3NlbmRfbnVsbGZ1bmMoYXBoeSwgdmlmLCBhdnAtPmJzc2lkLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJLyogQmVhY29uIHRyYW5zbWlzc2lvbiBpcyByZS1lbmFibGVkIGJ5IGFwaHktPnN0YXRlIGNoYW5nZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoYXBoeS0+aHcsCisJCQkJCQkgICBhdGg5a191bnBhdXNlX2l0ZXIsIGFwaHkpOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoYXBoeS0+aHcpOworCXJldHVybiAwOworfQorCitpbnQgYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWludCByZXQ7CisJc3Bpbl9sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0ID0gX19hdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworCXNwaW5fdW5sb2NrX2JoKCZhcGh5LT5zYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV9tYXJrX2FsbF9wYXVzZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJc2MtPnByaV93aXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpCisJCQlzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdpcGh5X2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fYXRoOWtfd2lwaHlfcGF1c2VfYWxsKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQlfX2F0aDlrX3dpcGh5X3BhdXNlKHNjLT5wcmlfd2lwaHkpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQkJX19hdGg5a193aXBoeV9wYXVzZShzYy0+c2VjX3dpcGh5W2ldKTsKKwl9Cit9CisKK2ludCBhdGg5a193aXBoeV9zZWxlY3Qoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWJvb2wgbm93OworCisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWYgKF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc2MpKSB7CisJCS8qCisJCSAqIEZvciBub3csIHdlIGFyZSB1c2luZyBtYWM4MDIxMSBzdyBzY2FuIGFuZCBpdCBleHBlY3RzIHRvCisJCSAqIGhhdmUgZnVsbCBjb250cm9sIG92ZXIgY2hhbm5lbCBjaGFuZ2VzLCBzbyBhdm9pZCB3aXBoeQorCQkgKiBzY2hlZHVsaW5nIGR1cmluZyBhIHNjYW4uIFRoaXMgY291bGQgYmUgb3B0aW1pemVkIGlmIHRoZQorCQkgKiBzY2FubmluZyBjb250cm9sIHdlcmUgbW92ZWQgaW50byB0aGUgZHJpdmVyLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpIHsKKwkJaWYgKHNjLT53aXBoeV9zZWxlY3RfZmFpbHVyZXMgPT0gMCkKKwkJCXNjLT53aXBoeV9zZWxlY3RfZmlyc3RfZmFpbCA9IGppZmZpZXM7CisJCXNjLT53aXBoeV9zZWxlY3RfZmFpbHVyZXMrKzsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2MtPndpcGh5X3NlbGVjdF9maXJzdF9mYWlsICsgSFogLyAyKSkKKwkJeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBQcmV2aW91cyB3aXBoeSBzZWxlY3QgdGltZWQgIgorCQkJICAgICAgICJvdXQ7IGRpc2FibGUvZW5hYmxlIGh3IHRvIHJlY292ZXJcbiIpOworCQkJX19hdGg5a193aXBoeV9tYXJrX2FsbF9wYXVzZWQoc2MpOworCQkJLyoKKwkJCSAqIFRPRE86IHRoaXMgd29ya2Fyb3VuZCB0byBmaXggaGFyZHdhcmUgaXMgdW5saWtlbHkgdG8KKwkJCSAqIGJlIHNwZWNpZmljIHRvIHZpcnR1YWwgd2lwaHkgY2hhbmdlcy4gSXQgY2FuIGhhcHBlbgorCQkJICogb24gbm9ybWFsIGNoYW5uZWwgY2hhbmdlLCB0b28sIGFuZCBhcyBzdWNoLCB0aGlzCisJCQkgKiBzaG91bGQgcmVhbGx5IGJlIG1hZGUgbW9yZSBnZW5lcmljLiBGb3IgZXhhbXBsZSwKKwkJCSAqIHRyaWNrZXIgcmFkaW8gZGlzYWJsZS9lbmFibGUgb24gR1RUIGludGVycnVwdCBidXJzdAorCQkJICogKHNheSwgMTAgR1RUIGludGVycnVwdHMgcmVjZWl2ZWQgd2l0aG91dCBhbnkgVFgKKwkJCSAqIGZyYW1lIGJlaW5nIGNvbXBsZXRlZCkKKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJCWF0aF9yYWRpb19kaXNhYmxlKHNjKTsKKwkJCWF0aF9yYWRpb19lbmFibGUoc2MpOworCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwkJfQorCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwl9CisJc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcyA9IDA7CisKKwkvKiBTdG9yZSB0aGUgbmV3IGNoYW5uZWwgKi8KKwlzYy0+Y2hhbl9pZHggPSBhcGh5LT5jaGFuX2lkeDsKKwlzYy0+Y2hhbl9pc19odCA9IGFwaHktPmNoYW5faXNfaHQ7CisJc2MtPm5leHRfd2lwaHkgPSBhcGh5OworCisJX19hdGg5a193aXBoeV9wYXVzZV9hbGwoc2MpOworCW5vdyA9ICFfX2F0aDlrX3dpcGh5X3BhdXNpbmcoYXBoeS0+c2MpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwlpZiAobm93KSB7CisJCS8qIFJlYWR5IHRvIHJlcXVlc3QgY2hhbm5lbCBjaGFuZ2UgaW1tZWRpYXRlbHkgKi8KKwkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCX0KKworCS8qCisJICogd2lwaHlzIHdpbGwgYmUgdW5wYXVzZWQgaW4gYXRoOWtfdHhfc3RhdHVzKCkgb25jZSBjaGFubmVsIGhhcyBiZWVuCisJICogY2hhbmdlZCBpZiBhbnkgd2lwaHkgbmVlZHMgdGltZSB0byBiZWNvbWUgcGF1c2VkLgorCSAqLworCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgYXRoOWtfd2lwaHlfc3RhcnRlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybiB0cnVlOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2NoYW4oc3RydWN0IGF0aF93aXBoeSAqYXBoeSwKKwkJCQkgICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCkKK3sKKwlpZiAoc2VsZWN0ZWQtPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKSB7CisJCWlmIChhcGh5ID09IHNlbGVjdGVkKQorCQkJcmV0dXJuOworCQkvKgorCQkgKiBQYXVzZSBhbGwgb3RoZXIgd2lwaHlzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHNjYW4gZXZlbiBpZgorCQkgKiB0aGV5IGFyZSBvbiB0aGUgY3VycmVudCBjaGFubmVsIG5vdy4KKwkJICovCisJfSBlbHNlIGlmIChhcGh5LT5jaGFuX2lkeCA9PSBzZWxlY3RlZC0+Y2hhbl9pZHgpCisJCXJldHVybjsKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGFwaHktPmh3KTsKK30KKwordm9pZCBhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgc3RydWN0IGF0aF93aXBoeSAqc2VsZWN0ZWQpCit7CisJaW50IGk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCWF0aDlrX3dpcGh5X3BhdXNlX2NoYW4oc2MtPnByaV93aXBoeSwgc2VsZWN0ZWQpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQorCQkJYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzYy0+c2VjX3dpcGh5W2ldLCBzZWxlY3RlZCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywKKwkJCQkJICAgIHdpcGh5X3dvcmsud29yayk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IE5VTEw7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9PSAwKSB7CisJCS8qIHdpcGh5IHNjaGVkdWxlciBpcyBkaXNhYmxlZCAqLworCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm47CisJfQorCit0cnlfYWdhaW46CisJc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCsrOworCXdoaWxlIChzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4IDw9IHNjLT5udW1fc2VjX3dpcGh5KSB7CisJCWFwaHkgPSBzYy0+c2VjX3dpcGh5W3NjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggLSAxXTsKKwkJaWYgKGFwaHkgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKQorCQkJYnJlYWs7CisKKwkJc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCsrOworCQlhcGh5ID0gTlVMTDsKKwl9CisJaWYgKGFwaHkgPT0gTlVMTCkgeworCQlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4ID0gMDsKKwkJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9JTkFDVElWRSkgeworCQkJaWYgKGZpcnN0KSB7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJCX0KKwkJCS8qIE5vIHdpcGh5IGlzIHJlYWR5IHRvIGJlIHNjaGVkdWxlZCAqLworCQl9IGVsc2UKKwkJCWFwaHkgPSBzYy0+cHJpX3dpcGh5OworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwlpZiAoYXBoeSAmJgorCSAgICBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfQUNUSVZFICYmIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9TQ0FOICYmCisJICAgIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6IEZhaWxlZCB0byBzY2hlZHVsZSB2aXJ0dWFsIHdpcGh5ICIKKwkJICAgICAgICJjaGFuZ2VcbiIpOworCX0KKworCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT53aXBoeV93b3JrLAorCQkJICAgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworfQorCit2b2lkIGF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtc2VjX2ludCkKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMobXNlY19pbnQpOworCWlmIChzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCkKKwkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPndpcGh5X3dvcmssCisJCQkJICAgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jCmluZGV4IGM5MmYwYzYuLmUzZjM3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEJJVFNfUEVSX0JZVEUgICAgICAgICAgIDgKICNkZWZpbmUgT0ZETV9QTENQX0JJVFMgICAgICAgICAgMjIKQEAgLTU1LDk0ICs1NSwxOSBAQAogCiAjZGVmaW5lIElTX0hUX1JBVEUoX3JhdGUpICAgICAoKF9yYXRlKSAmIDB4ODApCiAKLS8qCi0gKiBJbnNlcnQgYSBjaGFpbiBvZiBhdGhfYnVmIChkZXNjcmlwdG9ycykgb24gYSB0eHEgYW5kCi0gKiBhc3N1bWUgdGhlIGRlc2NyaXB0b3JzIGFyZSBhbHJlYWR5IGNoYWluZWQgdG9nZXRoZXIgYnkgY2FsbGVyLgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpOwogc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmOworCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZik7CiAKLQkvKgotCSAqIEluc2VydCB0aGUgZnJhbWUgb24gdGhlIG91dGJvdW5kIGxpc3QgYW5kCi0JICogcGFzcyBpdCBvbiB0byB0aGUgaGFyZHdhcmUuCi0JICovCi0KLQlpZiAobGlzdF9lbXB0eShoZWFkKSkKLQkJcmV0dXJuOwotCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQotCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChoZWFkLCAmdHhxLT5heHFfcSk7Ci0JdHhxLT5heHFfZGVwdGgrKzsKLQl0eHEtPmF4cV90b3RhbHF1ZXVlZCsrOwotCXR4cS0+YXhxX2xpbmtidWYgPSBsaXN0X2VudHJ5KHR4cS0+YXhxX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwKLQkJInFudW06ICVkLCB0eHEgZGVwdGg6ICVkXG4iLCB0eHEtPmF4cV9xbnVtLCB0eHEtPmF4cV9kZXB0aCk7Ci0KLQlpZiAodHhxLT5heHFfbGluayA9PSBOVUxMKSB7Ci0JCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtLCBiZi0+YmZfZGFkZHIpOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCi0JCQkiVFhEUFsldV0gPSAlbGx4ICglcClcbiIsCi0JCQl0eHEtPmF4cV9xbnVtLCBpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7Ci0JfSBlbHNlIHsKLQkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImxpbmtbJXVdICglcCk9JWxseCAoJXApXG4iLAotCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKLQkJCWl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKLQl9Ci0JdHhxLT5heHFfbGluayA9ICYoYmYtPmJmX2xhc3RiZi0+YmZfZGVzYy0+ZHNfbGluayk7Ci0JYXRoOWtfaHdfdHhzdGFydChhaCwgdHhxLT5heHFfcW51bSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzICp0eF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOwotCWludCBoZHJsZW4sIHBhZHNpemU7Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBjb21wbGV0ZTogc2tiOiAlcFxuIiwgc2tiKTsKLQotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLIHx8Ci0JICAgIHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQpIHsKLQkJa2ZyZWUodHhfaW5mb19wcml2KTsKLQkJdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IE5VTEw7Ci0JfQotCi0JaWYgKHR4X3N0YXR1cy0+ZmxhZ3MgJiBBVEhfVFhfQkFSKSB7Ci0JCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0s7Ci0JCXR4X3N0YXR1cy0+ZmxhZ3MgJj0gfkFUSF9UWF9CQVI7Ci0JfQotCi0JaWYgKCEodHhfc3RhdHVzLT5mbGFncyAmIChBVEhfVFhfRVJST1IgfCBBVEhfVFhfWFJFVFJZKSkpIHsKLQkJLyogRnJhbWUgd2FzIEFDS2VkICovCi0JCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQl9Ci0KLQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSB0eF9zdGF0dXMtPnJldHJpZXMgKyAxOwotCi0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlwYWRzaXplID0gaGRybGVuICYgMzsKLQlpZiAocGFkc2l6ZSAmJiBoZHJsZW4gPj0gMjQpIHsKLQkJLyoKLQkJICogUmVtb3ZlIE1BQyBoZWFkZXIgcGFkZGluZyBiZWZvcmUgZ2l2aW5nIHRoZSBmcmFtZSBiYWNrIHRvCi0JCSAqIG1hYzgwMjExLgotCQkgKi8KLQkJbWVtbW92ZShza2ItPmRhdGEgKyBwYWRzaXplLCBza2ItPmRhdGEsIGhkcmxlbik7Ci0JCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7Ci0JfQotCi0JaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKLX0KLQotLyogQ2hlY2sgaWYgaXQncyBva2F5IHRvIHNlbmQgb3V0IGFnZ3JlZ2F0ZXMgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBBZ2dyZWdhdGlvbiBsb2dpYyAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGhfYWdncl9xdWVyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkbm8pCiB7CkBAIC0xNTYsMjMyICs4MSwxOSBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoX2dldF9iZWFjb25jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCwKLQkJCQkgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCi0JLyogZmlsbCBpbiBiZWFjb24gY29uZmlnIGRhdGEgKi8KLQotCWNvbmYtPmJlYWNvbl9pbnRlcnZhbCA9IGh3LT5jb25mLmJlYWNvbl9pbnQ7Ci0JY29uZi0+bGlzdGVuX2ludGVydmFsID0gMTAwOwotCWNvbmYtPmR0aW1fY291bnQgPSAxOwotCWNvbmYtPmJtaXNzX3RpbWVvdXQgPSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAqIGNvbmYtPmxpc3Rlbl9pbnRlcnZhbDsKLX0KLQotLyogQ2FsY3VsYXRlIEF0aGVyb3MgcGFja2V0IHR5cGUgZnJvbSBJRUVFODAyMTEgcGFja2V0IGhlYWRlciAqLwotCi1zdGF0aWMgZW51bSBhdGg5a19wa3RfdHlwZSBnZXRfaHdfcGFja2V0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWVudW0gYXRoOWtfcGt0X3R5cGUgaHR5cGU7Ci0JX19sZTE2IGZjOwotCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0JFQUNPTjsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUDsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfYXRpbShmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfQVRJTTsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfcHNwb2xsKGZjKSkKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9QU1BPTEw7Ci0JZWxzZQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX05PUk1BTDsKLQotCXJldHVybiBodHlwZTsKLX0KLQotc3RhdGljIGJvb2wgaXNfcGFlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlfX2xlMTYgZmM7Ci0KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpIHx8Ci0JCSAgICAvKiBQb3J0IEFjY2VzcyBFbnRpdHkgKElFRUUgODAyLjFYKSAqLwotCQkgICAgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50IGdldF9od19jcnlwdG9fa2V5dHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCWlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleSkgewotCQlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfV0VQKQotCQkJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX1dFUDsKLQkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9US0lQOwotCQllbHNlIGlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19DQ01QKQotCQkJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0FFUzsKLQl9Ci0KLQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfQ0xFQVI7Ci19Ci0KLS8qIENhbGxlZCBvbmx5IHdoZW4gdHggYWdncmVnYXRpb24gaXMgZW5hYmxlZCBhbmQgSFQgaXMgc3VwcG9ydGVkICovCi0KLXN0YXRpYyB2b2lkIGFzc2lnbl9hZ2dyX3RpZF9zZXFubyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7Ci0JX19sZTE2IGZjOwotCXU4ICpxYzsKLQotCWlmICghdHhfaW5mby0+Y29udHJvbC5zdGEpCi0JCXJldHVybjsKLQotCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0KLQkvKiBHZXQgdGlkbm8gKi8KLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7Ci0JCWJmLT5iZl90aWRubyA9IHFjWzBdICYgMHhmOwotCX0KLQotCS8qIEdldCBzZXFubyAqLwotCS8qIEZvciBIVCBjYXBhYmxlIHN0YXRpb25zLCB3ZSBzYXZlIHRpZG5vIGZvciBsYXRlciB1c2UuCi0JICogV2UgYWxzbyBvdmVycmlkZSBzZXFubyBzZXQgYnkgdXBwZXIgbGF5ZXIgd2l0aCB0aGUgb25lCi0JICogaW4gdHggYWdncmVnYXRpb24gc3RhdGUuCi0JICoKLQkgKiBJZiBmcmFnbWVudGF0aW9uIGlzIG9uLCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzCi0JICogbm90IG92ZXJyaWRkZW4sIHNpbmNlIGl0IGhhcyBiZWVuCi0JICogaW5jcmVtZW50ZWQgYnkgdGhlIGZyYWdtZW50YXRpb24gcm91dGluZS4KLQkgKgotCSAqIEZJWE1FOiBjaGVjayBpZiB0aGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgZXhjZWVkcwotCSAqIElFRUU4MDIxMSBtYXguCi0JICovCi0JdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0aWQtPnNlcV9uZXh0IDw8Ci0JCQlJRUVFODAyMTFfU0VRX1NFUV9TSElGVCk7Ci0JYmYtPmJmX3NlcW5vID0gdGlkLT5zZXFfbmV4dDsKLQlJTkNSKHRpZC0+c2VxX25leHQsIElFRUU4MDIxMV9TRVFfTUFYKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF90eF9mbGFncyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGZsYWdzID0gMDsKLQotCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19DTFJETUFTSzsgLyogbmVlZGVkIGZvciBjcnlwdG8gZXJyb3JzICovCi0JZmxhZ3MgfD0gQVRIOUtfVFhERVNDX0lOVFJFUTsKLQotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQotCQlmbGFncyB8PSBBVEg5S19UWERFU0NfTk9BQ0s7Ci0JaWYgKHR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19SVFNFTkE7Ci0KLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX3R4X2dldF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idWYgKmJmID0gTlVMTDsKLQotCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmc2MtPnR4LnR4YnVmKSkpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWxpc3RfZGVsKCZiZi0+bGlzdCk7Ci0KLQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQlyZXR1cm4gYmY7Ci19Ci0KLS8qIFRvIGNvbXBsZXRlIGEgY2hhaW4gb2YgYnVmZmVycyBhc3NvY2lhdGVkIGEgZnJhbWUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsCi0JCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKLQkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfeG1pdF9zdGF0dXMgdHhfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIFNldCByZXRyeSBpbmZvcm1hdGlvbi4KLQkgKiBOQjogRG9uJ3QgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGVzY3JpcHRvciwgYmVjYXVzZSB0aGUgZnJhbWUKLQkgKiBjb3VsZCBiZSBzb2Z0d2FyZSByZXRyaWVkLgotCSAqLwotCXR4X3N0YXR1cy5yZXRyaWVzID0gYmYtPmJmX3JldHJpZXM7Ci0JdHhfc3RhdHVzLmZsYWdzID0gMDsKLQotCWlmIChzZW5kYmFyKQotCQl0eF9zdGF0dXMuZmxhZ3MgPSBBVEhfVFhfQkFSOwotCi0JaWYgKCF0eG9rKSB7Ci0JCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfRVJST1I7Ci0KLQkJaWYgKGJmX2lzeHJldHJpZWQoYmYpKQotCQkJdHhfc3RhdHVzLmZsYWdzIHw9IEFUSF9UWF9YUkVUUlk7Ci0JfQotCi0JLyogVW5tYXAgdGhpcyBmcmFtZSAqLwotCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsCi0JCQkgYmYtPmJmX2RtYWNvbnRleHQsCi0JCQkgc2tiLT5sZW4sCi0JCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JLyogY29tcGxldGUgdGhpcyBmcmFtZSAqLwotCWF0aF90eF9jb21wbGV0ZShzYywgc2tiLCAmdHhfc3RhdHVzKTsKLQotCS8qCi0JICogUmV0dXJuIHRoZSBsaXN0IG9mIGF0aF9idWYgb2YgdGhpcyBtcGR1IHRvIGZyZWUgcXVldWUKLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOwotCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChiZl9xLCAmc2MtPnR4LnR4YnVmKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHgudHhidWZsb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBxdWV1ZSB1cCBhIGRlc3QvYWMgcGFpciBmb3IgdHggc2NoZWR1bGluZwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KIHN0YXRpYyB2b2lkIGF0aF90eF9xdWV1ZV90aWQoc3RydWN0IGF0aF90eHEgKnR4cSwgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF9hdHhfYWMgKmFjID0gdGlkLT5hYzsKIAotCS8qCi0JICogaWYgdGlkIGlzIHBhdXNlZCwgaG9sZCBvZmYKLQkgKi8KIAlpZiAodGlkLT5wYXVzZWQpCiAJCXJldHVybjsKIAotCS8qCi0JICogYWRkIHRpZCB0byBhYyBhdG1vc3Qgb25jZQotCSAqLwogCWlmICh0aWQtPnNjaGVkKQogCQlyZXR1cm47CiAKIAl0aWQtPnNjaGVkID0gdHJ1ZTsKIAlsaXN0X2FkZF90YWlsKCZ0aWQtPmxpc3QsICZhYy0+dGlkX3EpOwogCi0JLyoKLQkgKiBhZGQgbm9kZSBhYyB0byB0eHEgYXRtb3N0IG9uY2UKLQkgKi8KIAlpZiAoYWMtPnNjaGVkKQogCQlyZXR1cm47CiAKQEAgLTM4OSwyMiArMTAxLDE2IEBACiAJbGlzdF9hZGRfdGFpbCgmYWMtPmxpc3QsICZ0eHEtPmF4cV9hY3EpOwogfQogCi0vKiBwYXVzZSBhIHRpZCAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfcGF1c2VfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CiAKIAlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCiAJdGlkLT5wYXVzZWQrKzsKLQogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogcmVzdW1lIGEgdGlkIGFuZCBzY2hlZHVsZSBhZ2dyZWdhdGUgKi8KLQotdm9pZCBhdGhfdHhfcmVzdW1lX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCitzdGF0aWMgdm9pZCBhdGhfdHhfcmVzdW1lX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3RpZC0+YWMtPnFudW1dOwogCkBAIC00MTksMjgwICsxMjUsMTIgQEAKIAlpZiAobGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpCiAJCWdvdG8gdW5sb2NrOwogCi0JLyoKLQkgKiBBZGQgdGhpcyBUSUQgdG8gc2NoZWR1bGVyIGFuZCB0cnkgdG8gc2VuZCBvdXQgYWdncmVnYXRlcwotCSAqLwogCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwogCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogfQogCi0vKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYmFkIGZyYW1lcyAqLwotCi1zdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJICAgICAgaW50IHR4b2spCi17Ci0Jc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOwotCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOwotCXUxNiBzZXFfc3QgPSAwOwotCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07Ci0JaW50IGJhX2luZGV4OwotCWludCBuYmFkID0gMDsKLQlpbnQgaXNhZ2dyID0gMDsKLQotCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCi0JCXJldHVybiAwOwotCi0JaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKLQlpZiAoaXNhZ2dyKSB7Ci0JCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOwotCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7Ci0JfQotCi0Jd2hpbGUgKGJmKSB7Ci0JCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKLQkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKLQkJCW5iYWQrKzsKLQotCQliZiA9IGJmLT5iZl9uZXh0OwotCX0KLQotCXJldHVybiBuYmFkOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfc2V0X3JldHJ5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCi0JYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1JFVFJZOwotCWJmLT5iZl9yZXRyaWVzKys7Ci0KLQlza2IgPSBiZi0+YmZfbXBkdTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZKTsKLX0KLQotLyogVXBkYXRlIGJsb2NrIGFjayB3aW5kb3cgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X3VwZGF0ZV9iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICAgaW50IHNlcW5vKQotewotCWludCBpbmRleCwgY2luZGV4OwotCi0JaW5kZXggID0gQVRIX0JBX0lOREVYKHRpZC0+c2VxX3N0YXJ0LCBzZXFubyk7Ci0JY2luZGV4ID0gKHRpZC0+YmF3X2hlYWQgKyBpbmRleCkgJiAoQVRIX1RJRF9NQVhfQlVGUyAtIDEpOwotCi0JdGlkLT50eF9idWZbY2luZGV4XSA9IE5VTEw7Ci0KLQl3aGlsZSAodGlkLT5iYXdfaGVhZCAhPSB0aWQtPmJhd190YWlsICYmICF0aWQtPnR4X2J1Zlt0aWQtPmJhd19oZWFkXSkgewotCQlJTkNSKHRpZC0+c2VxX3N0YXJ0LCBJRUVFODAyMTFfU0VRX01BWCk7Ci0JCUlOQ1IodGlkLT5iYXdfaGVhZCwgQVRIX1RJRF9NQVhfQlVGUyk7Ci0JfQotfQotCi0vKgotICogYXRoX3BrdF9kdXIgLSBjb21wdXRlIHBhY2tldCBkdXJhdGlvbiAoTkI6IG5vdCBOQVYpCi0gKgotICogcml4IC0gcmF0ZSBpbmRleAotICogcGt0bGVuIC0gdG90YWwgYnl0ZXMgKGRlbGltcyArIGRhdGEgKyBmY3MgKyBwYWRzICsgcGFkIGRlbGltcykKLSAqIHdpZHRoICAtIDAgZm9yIDIwIE1IeiwgMSBmb3IgNDAgTUh6Ci0gKiBoYWxmX2dpIC0gdG8gdXNlIDR1cyB2L3MgMy42IHVzIGZvciBzeW1ib2wgdGltZQotICovCi1zdGF0aWMgdTMyIGF0aF9wa3RfZHVyYXRpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IHJpeCwgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJICAgIGludCB3aWR0aCwgaW50IGhhbGZfZ2ksIGJvb2wgc2hvcnRQcmVhbWJsZSkKLXsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7Ci0JdTMyIG5iaXRzLCBuc3ltYml0cywgZHVyYXRpb24sIG5zeW1ib2xzOwotCXU4IHJjOwotCWludCBzdHJlYW1zLCBwa3RsZW47Ci0KLQlwa3RsZW4gPSBiZl9pc2FnZ3IoYmYpID8gYmYtPmJmX2FsIDogYmYtPmJmX2ZybWxlbjsKLQlyYyA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5yYXRlY29kZTsKLQotCS8qIGZvciBsZWdhY3kgcmF0ZXMsIHVzZSBvbGQgZnVuY3Rpb24gdG8gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKi8KLQlpZiAoIUlTX0hUX1JBVEUocmMpKQotCQlyZXR1cm4gYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsIHBrdGxlbiwKLQkJCQkJICAgICAgcml4LCBzaG9ydFByZWFtYmxlKTsKLQotCS8qIGZpbmQgbnVtYmVyIG9mIHN5bWJvbHM6IFBMQ1AgKyBkYXRhICovCi0JbmJpdHMgPSAocGt0bGVuIDw8IDMpICsgT0ZETV9QTENQX0JJVFM7Ci0JbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07Ci0JbnN5bWJvbHMgPSAobmJpdHMgKyBuc3ltYml0cyAtIDEpIC8gbnN5bWJpdHM7Ci0KLQlpZiAoIWhhbGZfZ2kpCi0JCWR1cmF0aW9uID0gU1lNQk9MX1RJTUUobnN5bWJvbHMpOwotCWVsc2UKLQkJZHVyYXRpb24gPSBTWU1CT0xfVElNRV9IQUxGR0kobnN5bWJvbHMpOwotCi0JLyogYWRkdXAgZHVyYXRpb24gZm9yIGxlZ2FjeS9odCB0cmFpbmluZyBhbmQgc2lnbmFsIGZpZWxkcyAqLwotCXN0cmVhbXMgPSBIVF9SQ18yX1NUUkVBTVMocmMpOwotCWR1cmF0aW9uICs9IExfU1RGICsgTF9MVEYgKyBMX1NJRyArIEhUX1NJRyArIEhUX1NURiArIEhUX0xURihzdHJlYW1zKTsKLQotCXJldHVybiBkdXJhdGlvbjsKLX0KLQotLyogUmF0ZSBtb2R1bGUgZnVuY3Rpb24gdG8gc2V0IHJhdGUgcmVsYXRlZCBmaWVsZHMgaW4gdHggZGVzY3JpcHRvciAqLwotCi1zdGF0aWMgdm9pZCBhdGhfYnVmX3NldF9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCi17Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmLT5iZl9kZXNjOwotCXN0cnVjdCBhdGhfZGVzYyAqbGFzdGRzID0gYmYtPmJmX2xhc3RiZi0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1s0XTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JaW50IGksIGZsYWdzLCBydHNjdHNlbmEgPSAwOwotCXUzMiBjdHNkdXJhdGlvbiA9IDA7Ci0JdTggcml4ID0gMCwgY2l4LCBjdHNyYXRlID0gMDsKLQlfX2xlMTYgZmM7Ci0KLQltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKLQotCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKLQotCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykgfHwKLQkgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpIHsKLQkJcmF0ZXNbMV0uY291bnQgPSByYXRlc1syXS5jb3VudCA9IHJhdGVzWzNdLmNvdW50ID0gMDsKLQkJcmF0ZXNbMV0uaWR4ID0gcmF0ZXNbMl0uaWR4ID0gcmF0ZXNbM10uaWR4ID0gMDsKLQkJcmF0ZXNbMF0uY291bnQgPSBBVEhfVFhNQVhUUlk7Ci0JfQotCi0JLyogZ2V0IHRoZSBjaXggZm9yIHRoZSBsb3dlc3QgdmFsaWQgcml4ICovCi0JcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7Ci0JZm9yIChpID0gMzsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKHJhdGVzW2ldLmNvdW50ICYmIChyYXRlc1tpXS5pZHggPj0gMCkpIHsKLQkJCXJpeCA9IHJhdGVzW2ldLmlkeDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZmxhZ3MgPSAoYmYtPmJmX2ZsYWdzICYgKEFUSDlLX1RYREVTQ19SVFNFTkEgfCBBVEg5S19UWERFU0NfQ1RTRU5BKSk7Ci0JY2l4ID0gcnQtPmluZm9bcml4XS5jdHJsX3JhdGU7Ci0KLQkvKgotCSAqIElmIDgwMi4xMWcgcHJvdGVjdGlvbiBpcyBlbmFibGVkLCBkZXRlcm1pbmUgd2hldGhlciB0byB1c2UgUlRTL0NUUyBvcgotCSAqIGp1c3QgQ1RTLiAgTm90ZSB0aGF0IHRoaXMgaXMgb25seSBkb25lIGZvciBPRkRNL0hUIHVuaWNhc3QgZnJhbWVzLgotCSAqLwotCWlmIChzYy0+c2NfcHJvdG1vZGUgIT0gUFJPVF9NX05PTkUgJiYgIShiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spCi0JICAgICYmIChydC0+aW5mb1tyaXhdLnBoeSA9PSBXTEFOX1JDX1BIWV9PRkRNIHx8Ci0JCVdMQU5fUkNfUEhZX0hUKHJ0LT5pbmZvW3JpeF0ucGh5KSkpIHsKLQkJaWYgKHNjLT5zY19wcm90bW9kZSA9PSBQUk9UX01fUlRTQ1RTKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCQllbHNlIGlmIChzYy0+c2NfcHJvdG1vZGUgPT0gUFJPVF9NX0NUU09OTFkpCi0JCQlmbGFncyA9IEFUSDlLX1RYREVTQ19DVFNFTkE7Ci0KLQkJY2l4ID0gcnQtPmluZm9bc2MtPnNjX3Byb3RyaXhdLmN0cmxfcmF0ZTsKLQkJcnRzY3RzZW5hID0gMTsKLQl9Ci0KLQkvKiBGb3IgMTFuLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBlbmFibGUgUlRTIGZvciBodyByZXRyaWVkIGZyYW1lcy4KLQkgKiBXZSBlbmFibGUgdGhlIGdsb2JhbCBmbGFnIGhlcmUgYW5kIGxldCByYXRlIHNlcmllcyBmbGFncyBkZXRlcm1pbmUKLQkgKiB3aGljaCByYXRlcyB3aWxsIGFjdHVhbGx5IHVzZSBSVFMuCi0JICovCi0JaWYgKChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSAmJiBiZl9pc2RhdGEoYmYpKSB7Ci0JCS8qIDgwMi4xMWcgcHJvdGVjdGlvbiBub3QgbmVlZGVkLCB1c2Ugb3VyIGRlZmF1bHQgYmVoYXZpb3IgKi8KLQkJaWYgKCFydHNjdHNlbmEpCi0JCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7Ci0JfQotCi0JLyogU2V0IHByb3RlY3Rpb24gaWYgYWdncmVnYXRlIHByb3RlY3Rpb24gb24gKi8KLQlpZiAoc2MtPnNjX2NvbmZpZy5hdGhfYWdncl9wcm90ICYmCi0JICAgICghYmZfaXNhZ2dyKGJmKSB8fCAoYmZfaXNhZ2dyKGJmKSAmJiBiZi0+YmZfYWwgPCA4MTkyKSkpIHsKLQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCQljaXggPSBydC0+aW5mb1tzYy0+c2NfcHJvdHJpeF0uY3RybF9yYXRlOwotCQlydHNjdHNlbmEgPSAxOwotCX0KLQotCS8qIEZvciBBUjU0MTYgLSBSVFMgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgZnJhbWUgbGFyZ2VyIHRoYW4gOEsgKi8KLQlpZiAoYmZfaXNhZ2dyKGJmKSAmJiAoYmYtPmJmX2FsID4gYWgtPmFoX2NhcHMucnRzX2FnZ3JfbGltaXQpKQotCQlmbGFncyAmPSB+KEFUSDlLX1RYREVTQ19SVFNFTkEpOwotCi0JLyoKLQkgKiBDVFMgdHJhbnNtaXQgcmF0ZSBpcyBkZXJpdmVkIGZyb20gdGhlIHRyYW5zbWl0IHJhdGUgYnkgbG9va2luZyBpbiB0aGUKLQkgKiBoL3cgcmF0ZSB0YWJsZS4gIFdlIG11c3QgYWxzbyBmYWN0b3IgaW4gd2hldGhlciBvciBub3QgYSBzaG9ydAotCSAqIHByZWFtYmxlIGlzIHRvIGJlIHVzZWQuIE5COiBjaXggaXMgc2V0IGFib3ZlIHdoZXJlIFJUUy9DVFMgaXMgZW5hYmxlZAotCSAqLwotCWN0c3JhdGUgPSBydC0+aW5mb1tjaXhdLnJhdGVjb2RlIHwKLQkJKGJmX2lzc2hwcmVhbWJsZShiZikgPyBydC0+aW5mb1tjaXhdLnNob3J0X3ByZWFtYmxlIDogMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmICghcmF0ZXNbaV0uY291bnQgfHwgKHJhdGVzW2ldLmlkeCA8IDApKQotCQkJY29udGludWU7Ci0KLQkJcml4ID0gcmF0ZXNbaV0uaWR4OwotCi0JCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZSB8Ci0JCQkoYmZfaXNzaHByZWFtYmxlKGJmKSA/IHJ0LT5pbmZvW3JpeF0uc2hvcnRfcHJlYW1ibGUgOiAwKTsKLQotCQlzZXJpZXNbaV0uVHJpZXMgPSByYXRlc1tpXS5jb3VudDsKLQotCQlzZXJpZXNbaV0uUmF0ZUZsYWdzID0gKAotCQkJKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTIDogMCkgfAotCQkJKChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpID8KLQkJCQlBVEg5S19SQVRFU0VSSUVTXzIwNDAgOiAwKSB8Ci0JCQkoKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU19IQUxGR0kgOiAwKTsKLQotCQlzZXJpZXNbaV0uUGt0RHVyYXRpb24gPSBhdGhfcGt0X2R1cmF0aW9uKHNjLCByaXgsIGJmLAotCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpICE9IDAsCi0JCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSwKLQkJCSBiZl9pc3NocHJlYW1ibGUoYmYpKTsKLQotCQlzZXJpZXNbaV0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOwotCi0JCWlmIChydHNjdHNlbmEpCi0JCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKLQl9Ci0KLQkvKiBzZXQgZHVyX3VwZGF0ZV9lbiBmb3IgbC1zaWcgY29tcHV0YXRpb24gZXhjZXB0IGZvciBQUy1Qb2xsIGZyYW1lcyAqLwotCWF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oYWgsIGRzLCBsYXN0ZHMsICFiZl9pc3BzcG9sbChiZiksCi0JCQkJICAgICBjdHNyYXRlLCBjdHNkdXJhdGlvbiwKLQkJCQkgICAgIHNlcmllcywgNCwgZmxhZ3MpOwotCi0JaWYgKHNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCAmJiBmbGFncykKLQkJYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oYWgsIGRzLCA4MTkyKTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uIHRvIHNlbmQgYSBub3JtYWwgSFQgKG5vbi1BTVBEVSkgZnJhbWUKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotc3RhdGljIGludCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJICAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKQotewotCXN0cnVjdCBhdGhfYnVmICpiZjsKLQotCUJVR19PTihsaXN0X2VtcHR5KGJmX2hlYWQpKTsKLQotCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9BTVBEVTsgLyogcmVndWxhciBIVCBmcmFtZSAqLwotCi0JLyogdXBkYXRlIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciBmb3Igc3Vic2VxdWVudCBBRERCQSByZXF1ZXN0ICovCi0JSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOwotCi0JLyogUXVldWUgdG8gaC93IHdpdGhvdXQgYWdncmVnYXRpb24gKi8KLQliZi0+YmZfbmZyYW1lcyA9IDE7Ci0JYmYtPmJmX2xhc3RiZiA9IGJmLT5iZl9sYXN0ZnJtOyAvKiBvbmUgc2luZ2xlIGZyYW1lICovCi0JYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwotCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgYmZfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZmx1c2ggdGlkJ3Mgc29mdHdhcmUgcXVldWUgYW5kIHNlbmQgZnJhbWVzIGFzIG5vbi1hbXBkdSdzICovCi0KIHN0YXRpYyB2b2lkIGF0aF90eF9mbHVzaF90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0aWQtPmFjLT5xbnVtXTsKQEAgLTcxMyw0NjggKzE1MSwzMCBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpIHsKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAJCUFTU0VSVCghYmZfaXNyZXRyaWVkKGJmKSk7Ci0JCWxpc3RfY3V0X3Bvc2l0aW9uKCZiZl9oZWFkLCAmdGlkLT5idWZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKLQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogQ29tcGxldGlvbiByb3V0aW5lIG9mIGFuIGFnZ3JlZ2F0ZSAqLwotCi1zdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYWdncl9yaWZzKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSAgICAgIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkJICAgICAgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCi0JCQkJICAgICAgaW50IHR4b2spCitzdGF0aWMgdm9pZCBhdGhfdHhfdXBkYXRlX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkgICAgICBpbnQgc2Vxbm8pCiB7Ci0Jc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQgPSBOVUxMOwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbmV4dCwgKmJmX2xhc3RxID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQsIGJmX3BlbmRpbmc7Ci0JdTE2IHNlcV9zdCA9IDA7Ci0JdTMyIGJhW1dNRV9CQV9CTVBfU0laRSA+PiA1XTsKLQlpbnQgaXNhZ2dyLCB0eGZhaWwsIHR4cGVuZGluZywgc2VuZGJhciA9IDAsIG5lZWRyZXNldCA9IDA7CisJaW50IGluZGV4LCBjaW5kZXg7CiAKLQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWluZGV4ICA9IEFUSF9CQV9JTkRFWCh0aWQtPnNlcV9zdGFydCwgc2Vxbm8pOworCWNpbmRleCA9ICh0aWQtPmJhd19oZWFkICsgaW5kZXgpICYgKEFUSF9USURfTUFYX0JVRlMgLSAxKTsKIAotCWlmICh0eF9pbmZvLT5jb250cm9sLnN0YSkgewotCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7Ci0JCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKLQl9CisJdGlkLT50eF9idWZbY2luZGV4XSA9IE5VTEw7CiAKLQlpc2FnZ3IgPSBiZl9pc2FnZ3IoYmYpOwotCWlmIChpc2FnZ3IpIHsKLQkJaWYgKHR4b2spIHsKLQkJCWlmIChBVEhfRFNfVFhfQkEoZHMpKSB7Ci0JCQkJLyoKLQkJCQkgKiBleHRyYWN0IHN0YXJ0aW5nIHNlcXVlbmNlIGFuZAotCQkJCSAqIGJsb2NrLWFjayBiaXRtYXAKLQkJCQkgKi8KLQkJCQlzZXFfc3QgPSBBVEhfRFNfQkFfU0VRKGRzKTsKLQkJCQltZW1jcHkoYmEsCi0JCQkJCUFUSF9EU19CQV9CSVRNQVAoZHMpLAotCQkJCQlXTUVfQkFfQk1QX1NJWkUgPj4gMyk7Ci0JCQl9IGVsc2UgewotCQkJCW1lbXNldChiYSwgMCwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCi0JCQkJLyoKLQkJCQkgKiBBUjU0MTYgY2FuIGJlY29tZSBkZWFmL211dGUgd2hlbiBCQQotCQkJCSAqIGlzc3VlIGhhcHBlbnMuIENoaXAgbmVlZHMgdG8gYmUgcmVzZXQuCi0JCQkJICogQnV0IEFQIGNvZGUgbWF5IGhhdmUgc3ljaHJvbml6YXRpb24gaXNzdWVzCi0JCQkJICogd2hlbiBwZXJmb3JtIGludGVybmFsIHJlc2V0IGluIHRoaXMgcm91dGluZS4KLQkJCQkgKiBPbmx5IGVuYWJsZSByZXNldCBpbiBTVEEgbW9kZSBmb3Igbm93LgotCQkJCSAqLwotCQkJCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PQotCQkJCQkgICAgTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCQkJbmVlZHJlc2V0ID0gMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW1lbXNldChiYSwgMCwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCQl9Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmJmX3BlbmRpbmcpOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCXdoaWxlIChiZikgewotCQl0eGZhaWwgPSB0eHBlbmRpbmcgPSAwOwotCQliZl9uZXh0ID0gYmYtPmJmX25leHQ7Ci0KLQkJaWYgKEFUSF9CQV9JU1NFVChiYSwgQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKSkpIHsKLQkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24sIHN1YmZyYW1lIGlzCi0JCQkgKiBhY2tlZCBieSBibG9jayBhY2sgKi8KLQkJfSBlbHNlIGlmICghaXNhZ2dyICYmIHR4b2spIHsKLQkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24gKi8KLQkJfSBlbHNlIHsKLQotCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKLQkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKLQkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKLQkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOwotCQkJCQl0eHBlbmRpbmcgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7Ci0JCQkJCXR4ZmFpbCA9IDE7Ci0JCQkJCXNlbmRiYXIgPSAxOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBjbGVhbnVwIGluIHByb2dyZXNzLCBqdXN0IGZhaWwKLQkJCQkgKiB0aGUgdW4tYWNrZWQgc3ViLWZyYW1lcwotCQkJCSAqLwotCQkJCXR4ZmFpbCA9IDE7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGlzIHN1Yi1mcmFtZSBmcm9tIGFnZ3JlZ2F0ZSBxdWV1ZS4KLQkJICovCi0JCWlmIChiZl9uZXh0ID09IE5VTEwpIHsgIC8qIGxhc3Qgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCQkJQVNTRVJUKGJmLT5iZl9sYXN0ZnJtID09IGJmX2xhc3QpOwotCi0JCQkvKgotCQkJICogVGhlIGxhc3QgZGVzY3JpcHRvciBvZiB0aGUgbGFzdCBzdWIgZnJhbWUgY291bGQgYmUKLQkJCSAqIGEgaG9sZGluZyBkZXNjcmlwdG9yIGZvciBoL3cuIElmIHRoYXQncyB0aGUgY2FzZSwKLQkJCSAqIGJmLT5iZl9sYXN0ZnJtIHdvbid0IGJlIGluIHRoZSBiZl9xLgotCQkJICogTWFrZSBzdXJlIHdlIGhhbmRsZSBiZl9xIHByb3Blcmx5IGhlcmUuCi0JCQkgKi8KLQotCQkJaWYgKCFsaXN0X2VtcHR5KGJmX3EpKSB7Ci0JCQkJYmZfbGFzdHEgPSBsaXN0X2VudHJ5KGJmX3EtPnByZXYsCi0JCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCQkJYmZfcSwgJmJmX2xhc3RxLT5saXN0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBYWFg6IGlmIHRoZSBsYXN0IHN1YmZyYW1lIG9ubHkgaGFzIG9uZQotCQkJCSAqIGRlc2NyaXB0b3Igd2hpY2ggaXMgYWxzbyBiZWluZyB1c2VkIGFzCi0JCQkJICogYSBob2xkaW5nIGRlc2NyaXB0b3IuIFRoZW4gdGhlIGF0aF9idWYKLQkJCQkgKiBpcyBub3QgaW4gdGhlIGJmX3EgYXQgYWxsLgotCQkJCSAqLwotCQkJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCUFTU0VSVCghbGlzdF9lbXB0eShiZl9xKSk7Ci0JCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCQliZl9xLCAmYmYtPmJmX2xhc3Rmcm0tPmxpc3QpOwotCQl9Ci0KLQkJaWYgKCF0eHBlbmRpbmcpIHsKLQkJCS8qCi0JCQkgKiBjb21wbGV0ZSB0aGUgYWNrZWQtb25lcy94cmV0cmllZCBvbmVzOyB1cGRhdGUKLQkJCSAqIGJsb2NrLWFjayB3aW5kb3cKLQkJCSAqLwotCQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCS8qIGNvbXBsZXRlIHRoaXMgc3ViLWZyYW1lICovCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIHJldHJ5IHRoZSB1bi1hY2tlZCBvbmVzCi0JCQkgKi8KLQkJCS8qCi0JCQkgKiBYWFg6IGlmIHRoZSBsYXN0IGRlc2NyaXB0b3IgaXMgaG9sZGluZyBkZXNjcmlwdG9yLAotCQkJICogaW4gb3JkZXIgdG8gcmVxdWV1ZSB0aGUgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUsIHdlCi0JCQkgKiBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IGRlc2NyaXB0b3IgYW5kCi0JCQkgKiBjb3B5IHRoZSBjb250ZW50IG9mIGhvbGRpbmcgZGVzY3JpcHRvciB0byBpdC4KLQkJCSAqLwotCQkJaWYgKGJmLT5iZl9uZXh0ID09IE5VTEwgJiYKLQkJCSAgICBiZl9sYXN0LT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7Ci0JCQkJc3RydWN0IGF0aF9idWYgKnRiZjsKLQotCQkJCS8qIGFsbG9jYXRlIG5ldyBkZXNjcmlwdG9yICovCi0JCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJCQlBU1NFUlQoIWxpc3RfZW1wdHkoKCZzYy0+dHgudHhidWYpKSk7Ci0JCQkJdGJmID0gbGlzdF9maXJzdF9lbnRyeSgmc2MtPnR4LnR4YnVmLAotCQkJCQkJc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQkJCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQotCQkJCUFUSF9UWEJVRl9SRVNFVCh0YmYpOwotCi0JCQkJLyogY29weSBkZXNjcmlwdG9yIGNvbnRlbnQgKi8KLQkJCQl0YmYtPmJmX21wZHUgPSBiZl9sYXN0LT5iZl9tcGR1OwotCQkJCXRiZi0+YmZfYnVmX2FkZHIgPSBiZl9sYXN0LT5iZl9idWZfYWRkcjsKLQkJCQkqKHRiZi0+YmZfZGVzYykgPSAqKGJmX2xhc3QtPmJmX2Rlc2MpOwotCi0JCQkJLyogbGluayBpdCB0byB0aGUgZnJhbWUgKi8KLQkJCQlpZiAoYmZfbGFzdHEpIHsKLQkJCQkJYmZfbGFzdHEtPmJmX2Rlc2MtPmRzX2xpbmsgPQotCQkJCQkJdGJmLT5iZl9kYWRkcjsKLQkJCQkJYmYtPmJmX2xhc3Rmcm0gPSB0YmY7Ci0JCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwKLQkJCQkJCWJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0YmYtPmJmX3N0YXRlID0gYmZfbGFzdC0+YmZfc3RhdGU7Ci0JCQkJCXRiZi0+YmZfbGFzdGZybSA9IHRiZjsKLQkJCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLAotCQkJCQkJdGJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjKTsKLQotCQkJCQkvKiBjb3B5IHRoZSBETUEgY29udGV4dCAqLwotCQkJCQl0YmYtPmJmX2RtYWNvbnRleHQgPQotCQkJCQkJYmZfbGFzdC0+YmZfZG1hY29udGV4dDsKLQkJCQl9Ci0JCQkJbGlzdF9hZGRfdGFpbCgmdGJmLT5saXN0LCAmYmZfaGVhZCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogQ2xlYXIgZGVzY3JpcHRvciBzdGF0dXMgd29yZHMgZm9yCi0JCQkJICogc29mdHdhcmUgcmV0cnkKLQkJCQkgKi8KLQkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsCi0JCQkJCQkgICAgIGJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFB1dCB0aGlzIGJ1ZmZlciB0byB0aGUgdGVtcG9yYXJ5IHBlbmRpbmcKLQkJCSAqIHF1ZXVlIHRvIHJldGFpbiBvcmRlcmluZwotCQkJICovCi0JCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmX2hlYWQsICZiZl9wZW5kaW5nKTsKLQkJfQotCi0JCWJmID0gYmZfbmV4dDsKLQl9Ci0KLQlpZiAodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgewotCQkvKiBjaGVjayB0byBzZWUgaWYgd2UncmUgZG9uZSB3aXRoIGNsZWFuaW5nIHRoZSBoL3cgcXVldWUgKi8KLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlpZiAodGlkLT5iYXdfaGVhZCA9PSB0aWQtPmJhd190YWlsKSB7Ci0JCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwotCi0JCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCi0JCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0aWQpOwotCQl9IGVsc2UKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBwcmVwZW5kIHVuLWFja2VkIGZyYW1lcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwZW5kaW5nIGZyYW1lIHF1ZXVlCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZiZl9wZW5kaW5nKSkgewotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkvKiBOb3RlOiB3ZSBfcHJlcGVuZF8sIHdlIF9kb19ub3RfIGF0IHRvCi0JCSAqIHRoZSBlbmQgb2YgdGhlIHF1ZXVlICEgKi8KLQkJbGlzdF9zcGxpY2UoJmJmX3BlbmRpbmcsICZ0aWQtPmJ1Zl9xKTsKLQkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQl9Ci0KLQlpZiAobmVlZHJlc2V0KQotCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXRoX3R4X3JjX3N0YXR1cyhzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHN0cnVjdCBhdGhfZGVzYyAqZHMsIGludCBuYmFkKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7Ci0KLQl0eF9pbmZvX3ByaXYtPnVwZGF0ZV9yYyA9IGZhbHNlOwotCWlmIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX0ZJTFQpCi0JCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEOwotCi0JaWYgKChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX0ZJTFQpID09IDAgJiYKLQkgICAgKGJmLT5iZl9mbGFncyAmIEFUSDlLX1RYREVTQ19OT0FDSykgPT0gMCkgewotCQlpZiAoYmZfaXNkYXRhKGJmKSkgewotCQkJbWVtY3B5KCZ0eF9pbmZvX3ByaXYtPnR4LCAmZHMtPmRzX3R4c3RhdCwKLQkJCSAgICAgICBzaXplb2YodHhfaW5mb19wcml2LT50eCkpOwotCQkJdHhfaW5mb19wcml2LT5uX2ZyYW1lcyA9IGJmLT5iZl9uZnJhbWVzOwotCQkJdHhfaW5mb19wcml2LT5uX2JhZF9mcmFtZXMgPSBuYmFkOwotCQkJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSB0cnVlOwotCQl9CisJd2hpbGUgKHRpZC0+YmF3X2hlYWQgIT0gdGlkLT5iYXdfdGFpbCAmJiAhdGlkLT50eF9idWZbdGlkLT5iYXdfaGVhZF0pIHsKKwkJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOworCQlJTkNSKHRpZC0+YmF3X2hlYWQsIEFUSF9USURfTUFYX0JVRlMpOwogCX0KIH0KIAotLyogUHJvY2VzcyBjb21wbGV0ZWQgeG1pdCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBzcGVjaWZpZWQgcXVldWUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X3Byb2Nlc3NxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICpsYXN0YmYsICpiZl9oZWxkID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkczsKLQlpbnQgdHhvaywgbmJhZCA9IDA7Ci0JaW50IHN0YXR1czsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsICJ0eCBxdWV1ZSAlZCAoJXgpLCBsaW5rICVwXG4iLAotCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pLAotCQl0eHEtPmF4cV9saW5rKTsKLQotCWZvciAoOzspIHsKLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX3EpKSB7Ci0JCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKLQkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0KLQkJLyoKLQkJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGEgQkggZ2V0cyBzY2hlZHVsZWQKLQkJICogYWZ0ZXIgc3cgd3JpdGVzIFR4RSBhbmQgYmVmb3JlIGh3IHJlLWxvYWQgdGhlIGxhc3QKLQkJICogZGVzY3JpcHRvciB0byBnZXQgdGhlIG5ld2x5IGNoYWluZWQgb25lLgotCQkgKiBTb2Z0d2FyZSBtdXN0IGtlZXAgdGhlIGxhc3QgRE9ORSBkZXNjcmlwdG9yIGFzIGEKLQkJICogaG9sZGluZyBkZXNjcmlwdG9yIC0gc29mdHdhcmUgZG9lcyBzbyBieSBtYXJraW5nCi0JCSAqIGl0IHdpdGggdGhlIFNUQUxFIGZsYWcuCi0JCSAqLwotCQliZl9oZWxkID0gTlVMTDsKLQkJaWYgKGJmLT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7Ci0JCQliZl9oZWxkID0gYmY7Ci0JCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKLQkJCQkvKiBGSVhNRToKLQkJCQkgKiBUaGUgaG9sZGluZyBkZXNjcmlwdG9yIGlzIHRoZSBsYXN0Ci0JCQkJICogZGVzY3JpcHRvciBpbiBxdWV1ZS4gSXQncyBzYWZlIHRvIHJlbW92ZQotCQkJCSAqIHRoZSBsYXN0IGhvbGRpbmcgZGVzY3JpcHRvciBpbiBCSCBjb250ZXh0LgotCQkJCSAqLwotCQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogTGV0cyB3b3JrIHdpdGggdGhlIG5leHQgYnVmZmVyIG5vdyAqLwotCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCi0JCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCX0KLQkJfQotCi0JCWxhc3RiZiA9IGJmLT5iZl9sYXN0YmY7Ci0JCWRzID0gbGFzdGJmLT5iZl9kZXNjOyAgICAvKiBOQjogbGFzdCBkZWNyaXB0b3IgKi8KLQotCQlzdGF0dXMgPSBhdGg5a19od190eHByb2NkZXNjKGFoLCBkcyk7Ci0JCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoYmYtPmJmX2Rlc2MgPT0gdHhxLT5heHFfbGFzdGRzV2l0aENUUykKLQkJCXR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMgPSBOVUxMOwotCQlpZiAoZHMgPT0gdHhxLT5heHFfZ2F0aW5nZHMpCi0JCQl0eHEtPmF4cV9nYXRpbmdkcyA9IE5VTEw7Ci0KLQkJLyoKLQkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGUgc2FtZSB0cmFuc21pdCB1bml0IGZyb20gdHhxLAotCQkgKiBob3dldmVyIGxlYXZlIHRoZSBsYXN0IGRlc2NyaXB0b3IgYmFjayBhcyB0aGUgaG9sZGluZwotCQkgKiBkZXNjcmlwdG9yIGZvciBody4KLQkJICovCi0JCWxhc3RiZi0+YmZfc3RhdHVzIHw9IEFUSF9CVUZTVEFUVVNfU1RBTEU7Ci0JCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCQlpZiAoIWxpc3RfaXNfc2luZ3VsYXIoJmxhc3RiZi0+bGlzdCkpCi0JCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCQkmdHhxLT5heHFfcSwgbGFzdGJmLT5saXN0LnByZXYpOwotCi0JCXR4cS0+YXhxX2RlcHRoLS07Ci0KLQkJaWYgKGJmX2lzYWdncihiZikpCi0JCQl0eHEtPmF4cV9hZ2dyX2RlcHRoLS07Ci0KLQkJdHhvayA9IChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyA9PSAwKTsKLQotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJaWYgKGJmX2hlbGQpIHsKLQkJCWxpc3RfZGVsKCZiZl9oZWxkLT5saXN0KTsKLQkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZiZl9oZWxkLT5saXN0LCAmc2MtPnR4LnR4YnVmKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJfQotCi0JCWlmICghYmZfaXNhbXBkdShiZikpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGZyYW1lIGlzIHNlbnQgb3V0IGFzIGEgc2luZ2xlIGZyYW1lLgotCQkJICogVXNlIGhhcmR3YXJlIHJldHJ5IHN0YXR1cyBmb3IgdGhpcyBmcmFtZS4KLQkJCSAqLwotCQkJYmYtPmJmX3JldHJpZXMgPSBkcy0+ZHNfdHhzdGF0LnRzX2xvbmdyZXRyeTsKLQkJCWlmIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkKLQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwotCQkJbmJhZCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQluYmFkID0gYXRoX3R4X251bV9iYWRmcm1zKHNjLCBiZiwgdHhvayk7Ci0JCX0KLQotCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCk7Ci0KLQkJLyoKLQkJICogQ29tcGxldGUgdGhpcyB0cmFuc21pdCB1bml0Ci0JCSAqLwotCQlpZiAoYmZfaXNhbXBkdShiZikpCi0JCQlhdGhfdHhfY29tcGxldGVfYWdncl9yaWZzKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgdHhvayk7Ci0JCWVsc2UKLQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgdHhvaywgMCk7Ci0KLQkJLyogV2FrZSB1cCBtYWM4MDIxMSBxdWV1ZSAqLwotCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmICh0eHEtPnN0b3BwZWQgJiYgYXRoX3R4cV9kZXB0aChzYywgdHhxLT5heHFfcW51bSkgPD0KLQkJCQkoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCQlpbnQgcW51bTsKLQkJCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfcW51bSwgc2MpOwotCQkJaWYgKHFudW0gIT0gLTEpIHsKLQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShzYy0+aHcsIHFudW0pOwotCQkJCXR4cS0+c3RvcHBlZCA9IDA7Ci0JCQl9Ci0KLQkJfQotCi0JCS8qCi0JCSAqIHNjaGVkdWxlIGFueSBwZW5kaW5nIHBhY2tldHMgaWYgYWdncmVnYXRpb24gaXMgZW5hYmxlZAotCQkgKi8KLQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikKLQkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9zdG9wZG1hKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQotCSh2b2lkKSBhdGg5a19od19zdG9wdHhkbWEoYWgsIHR4cS0+YXhxX3FudW0pOwotCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgInR4IHF1ZXVlIFsldV0gJXgsIGxpbmsgJXBcbiIsCi0JCXR4cS0+YXhxX3FudW0sIGF0aDlrX2h3X2dldHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtKSwKLQkJdHhxLT5heHFfbGluayk7Ci19Ci0KLS8qIERyYWluIG9ubHkgdGhlIGRhdGEgcXVldWVzICovCi0KLXN0YXRpYyB2b2lkIGF0aF9kcmFpbl90eGRhdGFxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgaSwgc3RhdHVzLCBucGVuZCA9IDA7Ci0KLQlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKLQkJCQlhdGhfdHhfc3RvcGRtYShzYywgJnNjLT50eC50eHFbaV0pOwotCQkJCS8qIFRoZSBUeERNQSBtYXkgbm90IHJlYWxseSBiZSBzdG9wcGVkLgotCQkJCSAqIERvdWJsZSBjaGVjayB0aGUgaGFsIHR4IHBlbmRpbmcgY291bnQgKi8KLQkJCQlucGVuZCArPSBhdGg5a19od19udW10eHBlbmRpbmcoYWgsCi0JCQkJCQkgICAgICAgc2MtPnR4LnR4cVtpXS5heHFfcW51bSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAobnBlbmQpIHsKLQkJLyogVHhETUEgbm90IHN0b3BwZWQsIHJlc2V0IHRoZSBoYWwgKi8KLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVW5hYmxlIHRvIHN0b3AgVHhETUEuIFJlc2V0IEhBTCFcbiIpOwotCi0JCXNwaW5fbG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0JCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsCi0JCQkJICAgIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCQkgICAgc2MtPnR4X2NoYW5fd2lkdGgsCi0JCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgdHJ1ZSwgJnN0YXR1cykpIHsKLQotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyBoYWwgc3RhdHVzICV1XG4iLAotCQkJCXN0YXR1cyk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKLQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQotCQkJYXRoX3R4X2RyYWludHhxKHNjLCAmc2MtPnR4LnR4cVtpXSwgcmV0cnlfdHgpOwotCX0KLX0KLQotLyogQWRkIGEgc3ViLWZyYW1lIHRvIGJsb2NrIGFjayB3aW5kb3cgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2FkZHRvX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCitzdGF0aWMgdm9pZCBhdGhfdHhfYWRkdG9fYmF3KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKIAkJCSAgICAgc3RydWN0IGF0aF9idWYgKmJmKQogewogCWludCBpbmRleCwgY2luZGV4OwpAQCAtMTE5Niw1OCArMTk2LDIyNyBAQAogfQogCiAvKgotICogRnVuY3Rpb24gdG8gc2VuZCBhbiBBLU1QRFUKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKKyAqIFRPRE86IEZvciBmcmFtZShzKSB0aGF0IGFyZSBpbiB0aGUgcmV0cnkgc3RhdGUsIHdlIHdpbGwgcmV1c2UgdGhlCisgKiBzZXF1ZW5jZSBudW1iZXIocykgd2l0aG91dCBzZXR0aW5nIHRoZSByZXRyeSBiaXQuIFRoZQorICogYWx0ZXJuYXRpdmUgaXMgdG8gZ2l2ZSB1cCBvbiB0aGVzZSBhbmQgQkFSIHRoZSByZWNlaXZlcidzIHdpbmRvdworICogZm9yd2FyZC4KICAqLwotc3RhdGljIGludCBhdGhfdHhfc2VuZF9hbXBkdShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQsCi0JCQkgICAgIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCitzdGF0aWMgdm9pZCBhdGhfdGlkX2RyYWluKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKKwogewogCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7CisJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JQlVHX09OKGxpc3RfZW1wdHkoYmZfaGVhZCkpOworCWZvciAoOzspIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQorCQkJYnJlYWs7CiAKLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BTVBEVTsKKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOwogCi0JLyoKLQkgKiBEbyBub3QgcXVldWUgdG8gaC93IHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgotCSAqIC0gdGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzIGluIHNvZnR3YXJlIHF1ZXVlCi0JICogLSB0aGUgVElEIGlzIGN1cnJlbnRseSBwYXVzZWQgZm9yIEFEREJBL0JBUiByZXF1ZXN0Ci0JICogLSBzZXFubyBpcyBub3Qgd2l0aGluIGJsb2NrLWFjayB3aW5kb3cKLQkgKiAtIGgvdyBxdWV1ZSBkZXB0aCBleGNlZWRzIGxvdyB3YXRlciBtYXJrCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSB8fCB0aWQtPnBhdXNlZCB8fAotCSAgICAhQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSB8fAotCSAgICB0eGN0bC0+dHhxLT5heHFfZGVwdGggPj0gQVRIX0FHR1JfTUlOX1FERVBUSCkgewotCQkvKgotCQkgKiBBZGQgdGhpcyBmcmFtZSB0byBzb2Z0d2FyZSBxdWV1ZSBmb3Igc2NoZWR1bGluZyBsYXRlcgotCQkgKiBmb3IgYWdncmVnYXRpb24uCi0JCSAqLwotCQlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfaGVhZCwgJnRpZC0+YnVmX3EpOwotCQlhdGhfdHhfcXVldWVfdGlkKHR4Y3RsLT50eHEsIHRpZCk7Ci0JCXJldHVybiAwOworCQlpZiAoYmZfaXNyZXRyaWVkKGJmKSkKKwkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7CisKKwkJc3Bpbl91bmxvY2soJnR4cS0+YXhxX2xvY2spOworCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOworCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOwogCX0KIAotCS8qIEFkZCBzdWItZnJhbWUgdG8gQkFXICovCi0JYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7Ci0KLQkvKiBRdWV1ZSB0byBoL3cgd2l0aG91dCBhZ2dyZWdhdGlvbiAqLwotCWJmLT5iZl9uZnJhbWVzID0gMTsKLQliZi0+YmZfbGFzdGJmID0gYmYtPmJmX2xhc3Rmcm07IC8qIG9uZSBzaW5nbGUgZnJhbWUgKi8KLQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7Ci0JYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgYmZfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKKwl0aWQtPnNlcV9uZXh0ID0gdGlkLT5zZXFfc3RhcnQ7CisJdGlkLT5iYXdfdGFpbCA9IHRpZC0+YmF3X2hlYWQ7CiB9CiAKLS8qCi0gKiBsb29rcyB1cCB0aGUgcmF0ZQotICogcmV0dXJucyBhZ2dyIGxpbWl0IGJhc2VkIG9uIGxvd2VzdCBvZiB0aGUgcmF0ZXMKLSAqLwotc3RhdGljIHUzMiBhdGhfbG9va3VwX3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCitzdGF0aWMgdm9pZCBhdGhfdHhfc2V0X3JldHJ5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCisJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1JFVFJZOworCWJmLT5iZl9yZXRyaWVzKys7CisKKwlza2IgPSBiZi0+YmZfbXBkdTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1JFVFJZKTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVmKiBhdGhfY2xvbmVfdHhidWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqdGJmOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwlBU1NFUlQoIWxpc3RfZW1wdHkoKCZzYy0+dHgudHhidWYpKSk7CisJdGJmID0gbGlzdF9maXJzdF9lbnRyeSgmc2MtPnR4LnR4YnVmLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJbGlzdF9kZWwoJnRiZi0+bGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJQVRIX1RYQlVGX1JFU0VUKHRiZik7CisKKwl0YmYtPmJmX21wZHUgPSBiZi0+YmZfbXBkdTsKKwl0YmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2J1Zl9hZGRyOworCSoodGJmLT5iZl9kZXNjKSA9ICooYmYtPmJmX2Rlc2MpOworCXRiZi0+YmZfc3RhdGUgPSBiZi0+YmZfc3RhdGU7CisJdGJmLT5iZl9kbWFjb250ZXh0ID0gYmYtPmJmX2RtYWNvbnRleHQ7CisKKwlyZXR1cm4gdGJmOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYWdncihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAorCQkJCSBpbnQgdHhvaykKK3sKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCA9IE5VTEw7CisJc3RydWN0IGF0aF9idWYgKmJmX25leHQsICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQsIGJmX3BlbmRpbmc7CisJdTE2IHNlcV9zdCA9IDA7CisJdTMyIGJhW1dNRV9CQV9CTVBfU0laRSA+PiA1XTsKKwlpbnQgaXNhZ2dyLCB0eGZhaWwsIHR4cGVuZGluZywgc2VuZGJhciA9IDAsIG5lZWRyZXNldCA9IDA7CisKKwlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEoc2MtPmh3LCBoZHItPmFkZHIxKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKKworCWlmIChpc2FnZ3IgJiYgdHhvaykgeworCQlpZiAoQVRIX0RTX1RYX0JBKGRzKSkgeworCQkJc2VxX3N0ID0gQVRIX0RTX0JBX1NFUShkcyk7CisJCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLAorCQkJICAgICAgIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBBUjU0MTYgY2FuIGJlY29tZSBkZWFmL211dGUgd2hlbiBCQQorCQkJICogaXNzdWUgaGFwcGVucy4gQ2hpcCBuZWVkcyB0byBiZSByZXNldC4KKwkJCSAqIEJ1dCBBUCBjb2RlIG1heSBoYXZlIHN5Y2hyb25pemF0aW9uIGlzc3VlcworCQkJICogd2hlbiBwZXJmb3JtIGludGVybmFsIHJlc2V0IGluIHRoaXMgcm91dGluZS4KKwkJCSAqIE9ubHkgZW5hYmxlIHJlc2V0IGluIFNUQSBtb2RlIGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJCW5lZWRyZXNldCA9IDE7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmYmZfcGVuZGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOworCisJd2hpbGUgKGJmKSB7CisJCXR4ZmFpbCA9IHR4cGVuZGluZyA9IDA7CisJCWJmX25leHQgPSBiZi0+YmZfbmV4dDsKKworCQlpZiAoQVRIX0JBX0lTU0VUKGJhLCBBVEhfQkFfSU5ERVgoc2VxX3N0LCBiZi0+YmZfc2Vxbm8pKSkgeworCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiwgc3ViZnJhbWUgaXMKKwkJCSAqIGFja2VkIGJ5IGJsb2NrIGFjayAqLworCQl9IGVsc2UgaWYgKCFpc2FnZ3IgJiYgdHhvaykgeworCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiAqLworCQl9IGVsc2UgeworCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKKwkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKKwkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQl0eHBlbmRpbmcgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCXR4ZmFpbCA9IDE7CisJCQkJCXNlbmRiYXIgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBjbGVhbnVwIGluIHByb2dyZXNzLCBqdXN0IGZhaWwKKwkJCQkgKiB0aGUgdW4tYWNrZWQgc3ViLWZyYW1lcworCQkJCSAqLworCQkJCXR4ZmFpbCA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoYmZfbmV4dCA9PSBOVUxMKSB7CisJCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CisJCX0gZWxzZSB7CisJCQlBU1NFUlQoIWxpc3RfZW1wdHkoYmZfcSkpOworCQkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCX0KKworCQlpZiAoIXR4cGVuZGluZykgeworCQkJLyoKKwkJCSAqIGNvbXBsZXRlIHRoZSBhY2tlZC1vbmVzL3hyZXRyaWVkIG9uZXM7IHVwZGF0ZQorCQkJICogYmxvY2stYWNrIHdpbmRvdworCQkJICovCisJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHRpZCwgYmYtPmJmX3NlcW5vKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAhdHhmYWlsLCBzZW5kYmFyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJldHJ5IHRoZSB1bi1hY2tlZCBvbmVzICovCisJCQlpZiAoYmYtPmJmX25leHQgPT0gTlVMTCAmJgorCQkJICAgIGJmX2xhc3QtPmJmX3N0YXR1cyAmIEFUSF9CVUZTVEFUVVNfU1RBTEUpIHsKKwkJCQlzdHJ1Y3QgYXRoX2J1ZiAqdGJmOworCisJCQkJdGJmID0gYXRoX2Nsb25lX3R4YnVmKHNjLCBiZl9sYXN0KTsKKwkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7CisJCQkJbGlzdF9hZGRfdGFpbCgmdGJmLT5saXN0LCAmYmZfaGVhZCk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogQ2xlYXIgZGVzY3JpcHRvciBzdGF0dXMgd29yZHMgZm9yCisJCQkJICogc29mdHdhcmUgcmV0cnkKKwkJCQkgKi8KKwkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFB1dCB0aGlzIGJ1ZmZlciB0byB0aGUgdGVtcG9yYXJ5IHBlbmRpbmcKKwkJCSAqIHF1ZXVlIHRvIHJldGFpbiBvcmRlcmluZworCQkJICovCisJCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmX2hlYWQsICZiZl9wZW5kaW5nKTsKKwkJfQorCisJCWJmID0gYmZfbmV4dDsKKwl9CisKKwlpZiAodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgeworCQlpZiAodGlkLT5iYXdfaGVhZCA9PSB0aWQtPmJhd190YWlsKSB7CisJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKKworCQkJLyogc2VuZCBidWZmZXJlZCBmcmFtZXMgYXMgc2luZ2xlcyAqLworCQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdGlkKTsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHByZXBlbmQgdW4tYWNrZWQgZnJhbWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBlbmRpbmcgZnJhbWUgcXVldWUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmJmX3BlbmRpbmcpKSB7CisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWxpc3Rfc3BsaWNlKCZiZl9wZW5kaW5nLCAmdGlkLT5idWZfcSk7CisJCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAobmVlZHJlc2V0KQorCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKK30KKworc3RhdGljIHUzMiBhdGhfbG9va3VwX3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKIAkJCSAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKQEAgLTEyNTUsMTUgKzQyNCwxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzOwogCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXY7Ci0JdTMyIG1heF80bXNfZnJhbWVsZW4sIGZyYW1lX2xlbmd0aDsKKwl1MzIgbWF4XzRtc19mcmFtZWxlbiwgZnJtbGVuOwogCXUxNiBhZ2dyX2xpbWl0LCBsZWdhY3kgPSAwLCBtYXhhbXBkdTsKIAlpbnQgaTsKIAogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwogCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOwotCXR4X2luZm9fcHJpdiA9Ci0JCShzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF07CisJdHhfaW5mb19wcml2ID0gKHN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXTsKIAogCS8qCiAJICogRmluZCB0aGUgbG93ZXN0IGZyYW1lIGxlbmd0aCBhbW9uZyB0aGUgcmF0ZSBzZXJpZXMgdGhhdCB3aWxsIGhhdmUgYQpAQCAtMTI3OSw5ICs0NDcsOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlmcmFtZV9sZW5ndGggPQotCQkJCXJhdGVfdGFibGUtPmluZm9bcmF0ZXNbaV0uaWR4XS5tYXhfNG1zX2ZyYW1lbGVuOwotCQkJbWF4XzRtc19mcmFtZWxlbiA9IG1pbihtYXhfNG1zX2ZyYW1lbGVuLCBmcmFtZV9sZW5ndGgpOworCQkJZnJtbGVuID0gcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tpXS5pZHhdLm1heF80bXNfZnJhbWVsZW47CisJCQltYXhfNG1zX2ZyYW1lbGVuID0gbWluKG1heF80bXNfZnJhbWVsZW4sIGZybWxlbik7CiAJCX0KIAl9CiAKQEAgLTEyOTMsOCArNDYwLDcgQEAKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRSB8fCBsZWdhY3kpCiAJCXJldHVybiAwOwogCi0JYWdncl9saW1pdCA9IG1pbihtYXhfNG1zX2ZyYW1lbGVuLAotCQkodTMyKUFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUKTsKKwlhZ2dyX2xpbWl0ID0gbWluKG1heF80bXNfZnJhbWVsZW4sICh1MzIpQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQpOwogCiAJLyoKIAkgKiBoL3cgY2FuIGFjY2VwdCBhZ2dyZWdhdGVzIHVwdG8gMTYgYml0IGxlbmd0aHMgKDY1NTM1KS4KQEAgLTEzMDksMTQgKzQ3NSwxMiBAQAogfQogCiAvKgotICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlbGltaXRlcnMgdG8gYmUgYWRkZWQgdG8KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWxpbWl0ZXJzIHRvIGJlIGFkZGVkIHRvCiAgKiBtZWV0IHRoZSBtaW5pbXVtIHJlcXVpcmVkIG1wZHVkZW5zaXR5LgotICogY2FsbGVyIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcmF0ZSBpcyAgSFQgcmF0ZSAuCisgKiBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByYXRlIGlzIEhUIHJhdGUgLgogICovCi1zdGF0aWMgaW50IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQkgIHUxNiBmcm1sZW4pCitzdGF0aWMgaW50IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmLCB1MTYgZnJtbGVuKQogewogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5iZl9tcGR1OwpAQCAtMTM3MCw5ICs1MzQsNyBAQAogCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOwogCW1pbmxlbiA9IChuc3ltYm9scyAqIG5zeW1iaXRzKSAvIEJJVFNfUEVSX0JZVEU7CiAKLQkvKiBJcyBmcmFtZSBzaG9ydGVyIHRoYW4gcmVxdWlyZWQgbWluaW11bSBsZW5ndGg/ICovCiAJaWYgKGZybWxlbiA8IG1pbmxlbikgewotCQkvKiBHZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGRlbGltaXRlcnMgcmVxdWlyZWQuICovCiAJCW1pbmRlbGltID0gKG1pbmxlbiAtIGZybWxlbikgLyBBVEhfQUdHUl9ERUxJTV9TWjsKIAkJbmRlbGltID0gbWF4KG1pbmRlbGltLCBuZGVsaW0pOwogCX0KQEAgLTEzODAsMzcgKzU0MiwyMyBAQAogCXJldHVybiBuZGVsaW07CiB9CiAKLS8qCi0gKiBGb3IgYWdncmVnYXRpb24gZnJvbSBzb2Z0d2FyZSBidWZmZXIgcXVldWUuCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KIHN0YXRpYyBlbnVtIEFUSF9BR0dSX1NUQVRVUyBhdGhfdHhfZm9ybV9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKLQkJCQkJc3RydWN0IGF0aF9idWYgKipiZl9sYXN0LAotCQkJCQlzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtICpwYXJhbSwKLQkJCQkJaW50ICpwcmV2X2ZyYW1lcykKKwkJCQkJICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xKQogewogI2RlZmluZSBQQURCWVRFUyhfbGVuKSAoKDQgLSAoKF9sZW4pICUgNCkpICUgNCkKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmYsICpiZl9maXJzdCwgKmJmX3ByZXYgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKLQlpbnQgcmwgPSAwLCBuZnJhbWVzID0gMCwgbmRlbGltOworCXN0cnVjdCBhdGhfYnVmICpiZiwgKmJmX2ZpcnN0LCAqYmZfcHJldiA9IE5VTEw7CisJaW50IHJsID0gMCwgbmZyYW1lcyA9IDAsIG5kZWxpbSwgcHJldl9hbCA9IDA7CiAJdTE2IGFnZ3JfbGltaXQgPSAwLCBhbCA9IDAsIGJwYWQgPSAwLAogCQlhbF9kZWx0YSwgaF9iYXcgPSB0aWQtPmJhd19zaXplIC8gMjsKIAllbnVtIEFUSF9BR0dSX1NUQVRVUyBzdGF0dXMgPSBBVEhfQUdHUl9ET05FOwotCWludCBwcmV2X2FsID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQlCVUdfT04obGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKIAlkbyB7CiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCi0JCS8qCi0JCSAqIGRvIG5vdCBzdGVwIG92ZXIgYmxvY2stYWNrIHdpbmRvdwotCQkgKi8KKwkJLyogZG8gbm90IHN0ZXAgb3ZlciBibG9jay1hY2sgd2luZG93ICovCiAJCWlmICghQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSkgewogCQkJc3RhdHVzID0gQVRIX0FHR1JfQkFXX0NMT1NFRDsKIAkJCWJyZWFrOwpAQCAtMTQyMSwyOSArNTY5LDIzIEBACiAJCQlybCA9IDE7CiAJCX0KIAotCQkvKgotCQkgKiBkbyBub3QgZXhjZWVkIGFnZ3JlZ2F0aW9uIGxpbWl0Ci0JCSAqLworCQkvKiBkbyBub3QgZXhjZWVkIGFnZ3JlZ2F0aW9uIGxpbWl0ICovCiAJCWFsX2RlbHRhID0gQVRIX0FHR1JfREVMSU1fU1ogKyBiZi0+YmZfZnJtbGVuOwogCi0JCWlmIChuZnJhbWVzICYmIChhZ2dyX2xpbWl0IDwKLQkJCShhbCArIGJwYWQgKyBhbF9kZWx0YSArIHByZXZfYWwpKSkgeworCQlpZiAobmZyYW1lcyAmJgorCQkgICAgKGFnZ3JfbGltaXQgPCAoYWwgKyBicGFkICsgYWxfZGVsdGEgKyBwcmV2X2FsKSkpIHsKIAkJCXN0YXR1cyA9IEFUSF9BR0dSX0xJTUlURUQ7CiAJCQlicmVhazsKIAkJfQogCi0JCS8qCi0JCSAqIGRvIG5vdCBleGNlZWQgc3ViZnJhbWUgbGltaXQKLQkJICovCi0JCWlmICgobmZyYW1lcyArICpwcmV2X2ZyYW1lcykgPj0KLQkJICAgIG1pbigoaW50KWhfYmF3LCBBVEhfQU1QRFVfU1VCRlJBTUVfREVGQVVMVCkpIHsKKwkJLyogZG8gbm90IGV4Y2VlZCBzdWJmcmFtZSBsaW1pdCAqLworCQlpZiAobmZyYW1lcyA+PSBtaW4oKGludCloX2JhdywgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQpKSB7CiAJCQlzdGF0dXMgPSBBVEhfQUdHUl9MSU1JVEVEOwogCQkJYnJlYWs7CiAJCX0KKwkJbmZyYW1lcysrOwogCi0JCS8qCi0JCSAqIGFkZCBwYWRkaW5nIGZvciBwcmV2aW91cyBmcmFtZSB0byBhZ2dyZWdhdGlvbiBsZW5ndGgKLQkJICovCisJCS8qIGFkZCBwYWRkaW5nIGZvciBwcmV2aW91cyBmcmFtZSB0byBhZ2dyZWdhdGlvbiBsZW5ndGggKi8KIAkJYWwgKz0gYnBhZCArIGFsX2RlbHRhOwogCiAJCS8qCkBAIC0xNDUxLDY5ICs1OTMsMzUgQEAKIAkJICogZGVuc2l0eSBmb3IgdGhpcyBub2RlLgogCQkgKi8KIAkJbmRlbGltID0gYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzYywgdGlkLCBiZl9maXJzdCwgYmYtPmJmX2ZybWxlbik7Ci0KIAkJYnBhZCA9IFBBREJZVEVTKGFsX2RlbHRhKSArIChuZGVsaW0gPDwgMik7CiAKIAkJYmYtPmJmX25leHQgPSBOVUxMOwotCQliZi0+YmZfbGFzdGZybS0+YmZfZGVzYy0+ZHNfbGluayA9IDA7CisJCWJmLT5iZl9kZXNjLT5kc19saW5rID0gMDsKIAotCQkvKgotCQkgKiB0aGlzIHBhY2tldCBpcyBwYXJ0IG9mIGFuIGFnZ3JlZ2F0ZQotCQkgKiAtIHJlbW92ZSBhbGwgZGVzY3JpcHRvcnMgYmVsb25naW5nIHRvIHRoaXMgZnJhbWUgZnJvbQotCQkgKiAgIHNvZnR3YXJlIHF1ZXVlCi0JCSAqIC0gYWRkIGl0IHRvIGJsb2NrIGFjayB3aW5kb3cKLQkJICogLSBzZXQgdXAgZGVzY3JpcHRvcnMgZm9yIGFnZ3JlZ2F0aW9uCi0JCSAqLwotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7CisJCS8qIGxpbmsgYnVmZmVycyBvZiB0aGlzIGZyYW1lIHRvIHRoZSBhZ2dyZWdhdGUgKi8KIAkJYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YmYsICZiZl9oZWFkLCBsaXN0KSB7Ci0JCQlhdGg5a19od19zZXQxMW5fYWdncl9taWRkbGUoc2MtPnNjX2FoLAotCQkJCXRiZi0+YmZfZGVzYywgbmRlbGltKTsKLQkJfQotCi0JCS8qCi0JCSAqIGxpbmsgYnVmZmVycyBvZiB0aGlzIGZyYW1lIHRvIHRoZSBhZ2dyZWdhdGUKLQkJICovCi0JCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYmZfaGVhZCwgYmZfcSk7Ci0JCW5mcmFtZXMrKzsKLQorCQlhdGg5a19od19zZXQxMW5fYWdncl9taWRkbGUoc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywgbmRlbGltKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCBiZl9xKTsKIAkJaWYgKGJmX3ByZXYpIHsKIAkJCWJmX3ByZXYtPmJmX25leHQgPSBiZjsKLQkJCWJmX3ByZXYtPmJmX2xhc3Rmcm0tPmJmX2Rlc2MtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7CisJCQliZl9wcmV2LT5iZl9kZXNjLT5kc19saW5rID0gYmYtPmJmX2RhZGRyOwogCQl9CiAJCWJmX3ByZXYgPSBiZjsKLQotI2lmZGVmIEFHR1JfTk9TSE9SVAotCQkvKgotCQkgKiB0ZXJtaW5hdGUgYWdncmVnYXRpb24gb24gYSBzbWFsbCBwYWNrZXQgYm91bmRhcnkKLQkJICovCi0JCWlmIChiZi0+YmZfZnJtbGVuIDwgQVRIX0FHR1JfTUlOUExFTikgewotCQkJc3RhdHVzID0gQVRIX0FHR1JfU0hPUlRQS1Q7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCiAJfSB3aGlsZSAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKTsKIAogCWJmX2ZpcnN0LT5iZl9hbCA9IGFsOwogCWJmX2ZpcnN0LT5iZl9uZnJhbWVzID0gbmZyYW1lczsKLQkqYmZfbGFzdCA9IGJmX3ByZXY7CisKIAlyZXR1cm4gc3RhdHVzOwogI3VuZGVmIFBBREJZVEVTCiB9CiAKLS8qCi0gKiBwcm9jZXNzIHBlbmRpbmcgZnJhbWVzIHBvc3NpYmx5IGRvaW5nIGEtbXBkdSBhZ2dyZWdhdGlvbgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi1zdGF0aWMgdm9pZCBhdGhfdHhfc2NoZWRfYWdncihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKK3N0YXRpYyB2b2lkIGF0aF90eF9zY2hlZF9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7Ci0Jc3RydWN0IGF0aF9idWYgKmJmLCAqdGJmLCAqYmZfbGFzdCwgKmJmX2xhc3RhZ2dyID0gTlVMTDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJZW51bSBBVEhfQUdHUl9TVEFUVVMgc3RhdHVzOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfcTsKLQlzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtIHBhcmFtID0gezAsIDAsIDAsIDAsIE5VTEx9OwotCWludCBwcmV2X2ZyYW1lcyA9IDA7CiAKIAlkbyB7CiAJCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKQEAgLTE1MjEsMTIwICs2MjksMTQ5IEBACiAKIAkJSU5JVF9MSVNUX0hFQUQoJmJmX3EpOwogCi0JCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHRpZCwgJmJmX3EsICZiZl9sYXN0YWdnciwgJnBhcmFtLAotCQkJCQkgICZwcmV2X2ZyYW1lcyk7CisJCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHRpZCwgJmJmX3EpOwogCiAJCS8qCi0JCSAqIG5vIGZyYW1lcyBwaWNrZWQgdXAgdG8gYmUgYWdncmVnYXRlZDsgYmxvY2stYWNrCi0JCSAqIHdpbmRvdyBpcyBub3Qgb3BlbgorCQkgKiBubyBmcmFtZXMgcGlja2VkIHVwIHRvIGJlIGFnZ3JlZ2F0ZWQ7CisJCSAqIGJsb2NrLWFjayB3aW5kb3cgaXMgbm90IG9wZW4uCiAJCSAqLwogCQlpZiAobGlzdF9lbXB0eSgmYmZfcSkpCiAJCQlicmVhazsKIAogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJmJmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJYmZfbGFzdCA9IGxpc3RfZW50cnkoYmZfcS5wcmV2LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCWJmLT5iZl9sYXN0YmYgPSBiZl9sYXN0OworCQliZi0+YmZfbGFzdGJmID0gbGlzdF9lbnRyeShiZl9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAotCQkvKgotCQkgKiBpZiBvbmx5IG9uZSBmcmFtZSwgc2VuZCBhcyBub24tYWdncmVnYXRlCi0JCSAqLworCQkvKiBpZiBvbmx5IG9uZSBmcmFtZSwgc2VuZCBhcyBub24tYWdncmVnYXRlICovCiAJCWlmIChiZi0+YmZfbmZyYW1lcyA9PSAxKSB7Ci0JCQlBU1NFUlQoYmYtPmJmX2xhc3Rmcm0gPT0gYmZfbGFzdCk7Ci0KIAkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQUdHUjsKLQkJCS8qCi0JCQkgKiBjbGVhciBhZ2dyIGJpdHMgZm9yIGV2ZXJ5IGRlc2NyaXB0b3IKLQkJCSAqIFhYWCBUT0RPOiBpcyB0aGVyZSBhIHdheSB0byBvcHRpbWl6ZSBpdD8KLQkJCSAqLwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YmYsICZiZl9xLCBsaXN0KSB7Ci0JCQkJYXRoOWtfaHdfY2xyMTFuX2FnZ3Ioc2MtPnNjX2FoLCB0YmYtPmJmX2Rlc2MpOwotCQkJfQotCisJCQlhdGg5a19od19jbHIxMW5fYWdncihzYy0+c2NfYWgsIGJmLT5iZl9kZXNjKTsKIAkJCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKIAkJCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgJmJmX3EpOwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBzZXR1cCBmaXJzdCBkZXNjIHdpdGggcmF0ZSBhbmQgYWdnciBpbmZvCi0JCSAqLworCQkvKiBzZXR1cCBmaXJzdCBkZXNjIG9mIGFnZ3JlZ2F0ZSAqLwogCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQUdHUjsKIAkJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwogCQlhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBiZi0+YmZfYWwpOwogCi0JCS8qCi0JCSAqIGFuY2hvciBsYXN0IGZyYW1lIG9mIGFnZ3JlZ2F0ZSBjb3JyZWN0bHkKLQkJICovCi0JCUFTU0VSVChiZl9sYXN0YWdncik7Ci0JCUFTU0VSVChiZl9sYXN0YWdnci0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQkJdGJmID0gYmZfbGFzdGFnZ3I7Ci0JCWF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc2MtPnNjX2FoLCB0YmYtPmJmX2Rlc2MpOwotCi0JCS8qIFhYWDogV2UgZG9uJ3QgZW50ZXIgaW50byB0aGlzIGxvb3AsIGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgKi8KLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZiZl9xKSAmJiAhbGlzdF9pc19sYXN0KCZ0YmYtPmxpc3QsICZiZl9xKSkgewotCQkJdGJmID0gbGlzdF9lbnRyeSh0YmYtPmxpc3QubmV4dCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0JCX0KKwkJLyogYW5jaG9yIGxhc3QgZGVzYyBvZiBhZ2dyZWdhdGUgKi8KKwkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MpOwogCiAJCXR4cS0+YXhxX2FnZ3JfZGVwdGgrKzsKLQotCQkvKgotCQkgKiBOb3JtYWwgYWdncmVnYXRlLCBxdWV1ZSB0byBoYXJkd2FyZQotCQkgKi8KIAkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCAmYmZfcSk7CiAKIAl9IHdoaWxlICh0eHEtPmF4cV9kZXB0aCA8IEFUSF9BR0dSX01JTl9RREVQVEggJiYKIAkJIHN0YXR1cyAhPSBBVEhfQUdHUl9CQVdfQ0xPU0VEKTsKIH0KIAotLyogQ2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZCAqLwotCi1zdGF0aWMgdm9pZCBhdGhfdGlkX2RyYWluKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKLQoraW50IGF0aF90eF9hZ2dyX3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICB1MTYgdGlkLCB1MTYgKnNzbikKIHsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgeworCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfUFJPR1JFU1M7CisJCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKwkJKnNzbiA9IHR4dGlkLT5zZXFfc3RhcnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQoreworCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0eHRpZC0+YWMtPnFudW1dOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7CiAJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JZm9yICg7OykgewotCQlpZiAobGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpCi0JCQlicmVhazsKLQkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJaWYgKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkKKwkJcmV0dXJuIDA7CiAKLQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsICZ0aWQtPmJ1Zl9xLCAmYmYtPmJmX2xhc3Rmcm0tPmxpc3QpOwotCi0JCS8qIHVwZGF0ZSBiYXcgZm9yIHNvZnR3YXJlIHJldHJpZWQgZnJhbWUgKi8KLQkJaWYgKGJmX2lzcmV0cmllZChiZikpCi0JCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwotCi0JCS8qCi0JCSAqIGRvIG5vdCBpbmRpY2F0ZSBwYWNrZXRzIHdoaWxlIGhvbGRpbmcgdHhxIHNwaW5sb2NrLgotCQkgKiB1bmxvY2sgaXMgaW50ZW50aW9uYWwgaGVyZQotCQkgKi8KLQkJc3Bpbl91bmxvY2soJnR4cS0+YXhxX2xvY2spOwotCi0JCS8qIGNvbXBsZXRlIHRoaXMgc3ViLWZyYW1lICovCi0JCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7Ci0KLQkJc3Bpbl9sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX0NPTVBMRVRFKSkgeworCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogVE9ETzogRm9yIGZyYW1lKHMpIHRoYXQgYXJlIGluIHRoZSByZXRyeSBzdGF0ZSwgd2Ugd2lsbCByZXVzZSB0aGUKLQkgKiBzZXF1ZW5jZSBudW1iZXIocykgd2l0aG91dCBzZXR0aW5nIHRoZSByZXRyeSBiaXQuIFRoZQotCSAqIGFsdGVybmF0aXZlIGlzIHRvIGdpdmUgdXAgb24gdGhlc2UgYW5kIEJBUiB0aGUgcmVjZWl2ZXIncyB3aW5kb3cKLQkgKiBmb3J3YXJkLgotCSAqLwotCXRpZC0+c2VxX25leHQgPSB0aWQtPnNlcV9zdGFydDsKLQl0aWQtPmJhd190YWlsID0gdGlkLT5iYXdfaGVhZDsKKwlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7CisKKwkvKiBkcm9wIGFsbCBzb2Z0d2FyZSByZXRyaWVkIGZyYW1lcyBhbmQgbWFyayB0aGlzIFRJRCAqLworCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0eHRpZC0+YnVmX3EpKSB7CisJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdHh0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCWlmICghYmZfaXNyZXRyaWVkKGJmKSkgeworCQkJLyoKKwkJCSAqIE5COiBpdCdzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQKKwkJCSAqIHNvZnR3YXJlIHJldHJpZWQgZnJhbWUgd2lsbCBhbHdheXMgc3RheQorCQkJICogYXQgdGhlIGhlYWQgb2Ygc29mdHdhcmUgcXVldWUuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOworCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdHh0aWQsIGJmLT5iZl9zZXFubyk7CisJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCWlmICh0eHRpZC0+YmF3X2hlYWQgIT0gdHh0aWQtPmJhd190YWlsKSB7CisJCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0NMRUFOVVA7CisJfSBlbHNlIHsKKwkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJCWF0aF90eF9mbHVzaF90aWQoc2MsIHR4dGlkKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIERyYWluIGFsbCBwZW5kaW5nIGJ1ZmZlcnMKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwordm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCisJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKKworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpIHsKKwkJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CisJCXR4dGlkLT5iYXdfc2l6ZSA9CisJCQlJRUVFODAyMTFfTUlOX0FNUERVX0JVRiA8PCBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisJCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX0NPTVBMRVRFOworCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7CisJCWF0aF90eF9yZXN1bWVfdGlkKHNjLCB0eHRpZCk7CisJfQorfQorCitib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKK3sKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKKwkJcmV0dXJuIGZhbHNlOworCisJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKKworCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7CisJCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCisJCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKKwkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqLworLyogUXVldWUgTWFuYWdlbWVudCAqLworLyoqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhxX2RyYWluX3BlbmRpbmdfYnVmZmVycyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCQkJICBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQogewpAQCAtMTY1MiwyNTEgKzc4OSw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0Jc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKLQlpbnQgaGRybGVuOwotCV9fbGUxNiBmYzsKLQotCXR4X2luZm9fcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCp0eF9pbmZvX3ByaXYpLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIXR4X2luZm9fcHJpdikpCi0JCXJldHVybiAtRU5PTUVNOwotCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSB0eF9pbmZvX3ByaXY7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCUFUSF9UWEJVRl9SRVNFVChiZik7Ci0KLQkvKiBGcmFtZSB0eXBlICovCi0KLQliZi0+YmZfZnJtbGVuID0gc2tiLT5sZW4gKyBGQ1NfTEVOIC0gKGhkcmxlbiAmIDMpOwotCi0JaWVlZTgwMjExX2lzX2RhdGEoZmMpID8KLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9EQVRBKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0RBVEEpOwotCWllZWU4MDIxMV9pc19iYWNrX3JlcShmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0JBUikgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9CQVIpOwotCWllZWU4MDIxMV9pc19wc3BvbGwoZmMpID8KLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9QU1BPTEwpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfUFNQT0xMKTsKLQkoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpID8KLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9TSE9SVF9QUkVBTUJMRSkgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9TSE9SVF9QUkVBTUJMRSk7Ci0JKHNjLT5ody0+Y29uZi5odC5lbmFibGVkICYmICFpc19wYWUoc2tiKSAmJgotCSAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0hUKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0hUKTsKLQotCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOwotCi0JLyogQ3J5cHRvICovCi0KLQliZi0+YmZfa2V5dHlwZSA9IGdldF9od19jcnlwdG9fa2V5dHlwZShza2IpOwotCi0JaWYgKGJmLT5iZl9rZXl0eXBlICE9IEFUSDlLX0tFWV9UWVBFX0NMRUFSKSB7Ci0JCWJmLT5iZl9mcm1sZW4gKz0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47Ci0JCWJmLT5iZl9rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwotCX0gZWxzZSB7Ci0JCWJmLT5iZl9rZXlpeCA9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKLQl9Ci0KLQkvKiBBc3NpZ24gc2Vxbm8sIHRpZG5vICovCi0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSAmJiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKLQkJYXNzaWduX2FnZ3JfdGlkX3NlcW5vKHNrYiwgYmYpOwotCi0JLyogRE1BIHNldHVwICovCi0JYmYtPmJmX21wZHUgPSBza2I7Ci0KLQliZi0+YmZfZG1hY29udGV4dCA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJCSAgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCkpKSB7Ci0JCWJmLT5iZl9tcGR1ID0gTlVMTDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gVFhcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQliZi0+YmZfYnVmX2FkZHIgPSBiZi0+YmZfZG1hY29udGV4dDsKLQlyZXR1cm4gMDsKLX0KLQotLyogRklYTUU6IHR4IHBvd2VyICovCi1zdGF0aWMgdm9pZCBhdGhfdHhfc3RhcnRfZG1hKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCi0JCQkgICAgIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9ICBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCXN0cnVjdCBhdGhfZGVzYyAqZHM7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBmcm1fdHlwZTsKLQotCWZybV90eXBlID0gZ2V0X2h3X3BhY2tldF90eXBlKHNrYik7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0JbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKLQotCS8qIHNldHVwIGRlc2NyaXB0b3IgKi8KLQotCWRzID0gYmYtPmJmX2Rlc2M7Ci0JZHMtPmRzX2xpbmsgPSAwOwotCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwotCi0JLyogRm9ybXVsYXRlIGZpcnN0IHR4IGRlc2NyaXB0b3Igd2l0aCB0eCBjb250cm9scyAqLwotCi0JYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhhaCwgZHMsIGJmLT5iZl9mcm1sZW4sIGZybV90eXBlLCBNQVhfUkFURV9QT1dFUiwKLQkJCSAgICAgICBiZi0+YmZfa2V5aXgsIGJmLT5iZl9rZXl0eXBlLCBiZi0+YmZfZmxhZ3MpOwotCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgc2tiLT5sZW4sCS8qIHNlZ21lbnQgbGVuZ3RoICovCi0JCQkgICAgdHJ1ZSwJLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsCS8qIGxhc3Qgc2VnbWVudCAqLwotCQkJICAgIGRzKTsJLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCi0JYmYtPmJmX2xhc3Rmcm0gPSBiZjsKLQotCXNwaW5fbG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOwotCi0JaWYgKGJmX2lzaHQoYmYpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpICYmCi0JICAgIHR4X2luZm8tPmNvbnRyb2wuc3RhKSB7Ci0JCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKLQkJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCi0JCWlmIChhdGhfYWdncl9xdWVyeShzYywgYW4sIGJmLT5iZl90aWRubykpIHsKLQkJCS8qCi0JCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQotCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgotCQkJICovCi0JCQlhdGhfdHhfc2VuZF9hbXBkdShzYywgdGlkLCAmYmZfaGVhZCwgdHhjdGwpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFNlbmQgdGhpcyBmcmFtZSBhcyByZWd1bGFyIHdoZW4gQUREQkEKLQkJCSAqIGV4Y2hhbmdlIGlzIG5laXRoZXIgY29tcGxldGUgbm9yIHBlbmRpbmcuCi0JCQkgKi8KLQkJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwKLQkJCQkJICAgdGlkLCAmYmZfaGVhZCk7Ci0JCX0KLQl9IGVsc2UgewotCQliZi0+YmZfbGFzdGJmID0gYmY7Ci0JCWJmLT5iZl9uZnJhbWVzID0gMTsKLQotCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7Ci0JCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOwotfQotCi0vKiBVcG9uIGZhaWx1cmUgY2FsbGVyIHNob3VsZCBmcmVlIHNrYiAqLwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCi17Ci0Jc3RydWN0IGF0aF9idWYgKmJmOwotCWludCByOwotCi0JLyogQ2hlY2sgaWYgYSB0eCBidWZmZXIgaXMgYXZhaWxhYmxlICovCi0KLQliZiA9IGF0aF90eF9nZXRfYnVmZmVyKHNjKTsKLQlpZiAoIWJmKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlRYIGJ1ZmZlcnMgYXJlIGZ1bGxcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JciA9IGF0aF90eF9zZXR1cF9idWZmZXIoc2MsIGJmLCBza2IsIHR4Y3RsKTsKLQlpZiAodW5saWtlbHkocikpIHsKLQkJc3RydWN0IGF0aF90eHEgKnR4cSA9IHR4Y3RsLT50eHE7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlRYIG1lbSBhbGxvYyBmYWlsdXJlXG4iKTsKLQotCQkvKiB1cG9uIGF0aF90eF9wcm9jZXNzcSgpIHRoaXMgVFggcXVldWUgd2lsbCBiZSByZXN1bWVkLCB3ZQotCQkgKiBndWFyYW50ZWUgdGhpcyB3aWxsIGhhcHBlbiBieSBrbm93aW5nIGJlZm9yZWhhbmQgdGhhdAotCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCi0JCSAqIG9uIHRoZSBxdWV1ZSAqLwotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAoYXRoX3R4cV9kZXB0aChzYywgdHhxLT5heHFfcW51bSkgPiAxKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsCi0JCQkJc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCQkJdHhxLT5zdG9wcGVkID0gMTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHgudHhidWYpOwotCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJcmV0dXJuIHI7Ci0JfQotCi0JYXRoX3R4X3N0YXJ0X2RtYShzYywgYmYsIHR4Y3RsKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBJbml0aWFsaXplIFRYIHF1ZXVlIGFuZCBoL3cgKi8KLQotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpCi17Ci0JaW50IGVycm9yID0gMDsKLQotCWRvIHsKLQkJc3Bpbl9sb2NrX2luaXQoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JCS8qIFNldHVwIHR4IGRlc2NyaXB0b3JzICovCi0JCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYsCi0JCQkidHgiLCBuYnVmcywgMSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzY3JpcHRvcnM6ICVkXG4iLAotCQkJCWVycm9yKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogWFhYIGFsbG9jYXRlIGJlYWNvbiBzdGF0ZSB0b2dldGhlciB3aXRoIHZhcCAqLwotCQllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmLAotCQkJCQkgICJiZWFjb24iLCBBVEhfQkNCVUYsIDEpOwotCQlpZiAoZXJyb3IgIT0gMCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIGJlYWNvbiBkZXNjcmlwdG9yczogJWRcbiIsCi0JCQkJZXJyb3IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCX0gd2hpbGUgKDApOwotCi0JaWYgKGVycm9yICE9IDApCi0JCWF0aF90eF9jbGVhbnVwKHNjKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyogUmVjbGFpbSBhbGwgdHggcXVldWUgcmVzb3VyY2VzICovCi0KLWludCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQkvKiBjbGVhbnVwIGJlYWNvbiBkZXNjcmlwdG9ycyAqLwotCWlmIChzYy0+YmVhY29uLmJkbWEuZGRfZGVzY19sZW4gIT0gMCkKLQkJYXRoX2Rlc2NkbWFfY2xlYW51cChzYywgJnNjLT5iZWFjb24uYmRtYSwgJnNjLT5iZWFjb24uYmJ1Zik7Ci0KLQkvKiBjbGVhbnVwIHR4IGRlc2NyaXB0b3JzICovCi0JaWYgKHNjLT50eC50eGRtYS5kZF9kZXNjX2xlbiAhPSAwKQotCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBTZXR1cCBhIGgvdyB0cmFuc21pdCBxdWV1ZSAqLwotCiBzdHJ1Y3QgYXRoX3R4cSAqYXRoX3R4cV9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgc3VidHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAJaW50IHFudW07CiAKQEAgLTE5NTksNDMgKzg1NCw3IEBACiAJcmV0dXJuICZzYy0+dHgudHhxW3FudW1dOwogfQogCi0vKiBSZWNsYWltIHJlc291cmNlcyBmb3IgYSBzZXR1cCBxdWV1ZSAqLwotCi12b2lkIGF0aF90eF9jbGVhbnVwcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlhdGg5a19od19yZWxlYXNldHhxdWV1ZShzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pOwotCXNjLT50eC50eHFzZXR1cCAmPSB+KDE8PHR4cS0+YXhxX3FudW0pOwotfQotCi0vKgotICogU2V0dXAgYSBoYXJkd2FyZSBkYXRhIHRyYW5zbWl0IHF1ZXVlIGZvciB0aGUgc3BlY2lmaWVkCi0gKiBhY2Nlc3MgY29udHJvbC4gIFRoZSBoYWwgbWF5IG5vdCBzdXBwb3J0IGFsbCByZXF1ZXN0ZWQKLSAqIHF1ZXVlcyBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEKLSAqIHByZXZpb3VzbHkgc2V0dXAgcXVldWUuICBXZSByZWNvcmQgdGhlIG1hcHBpbmcgZnJvbSBhYydzCi0gKiB0byBoL3cgcXVldWVzIGZvciB1c2UgYnkgYXRoX3R4X3N0YXJ0IGFuZCBhbHNvIHRyYWNrCi0gKiB0aGUgc2V0IG9mIGgvdyBxdWV1ZXMgYmVpbmcgdXNlZCB0byBvcHRpbWl6ZSB3b3JrIGluIHRoZQotICogdHJhbnNtaXQgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHJlbGF0ZWQgcm91dGluZXMuCi0gKi8KLQotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpCi17Ci0Jc3RydWN0IGF0aF90eHEgKnR4cTsKLQotCWlmIChoYWx0eXBlID49IEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiSEFMIEFDICV1IG91dCBvZiByYW5nZSwgbWF4ICV6dSFcbiIsCi0JCQkgaGFsdHlwZSwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JdHhxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgaGFsdHlwZSk7Ci0JaWYgKHR4cSAhPSBOVUxMKSB7Ci0JCXNjLT50eC5od3FfbWFwW2hhbHR5cGVdID0gdHhxLT5heHFfcW51bTsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlCi0JCXJldHVybiAwOwotfQotCi1pbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKQorc3RhdGljIGludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpCiB7CiAJaW50IHFudW07CiAKQEAgLTIwMjEsOCArODgwLDYgQEAKIAlyZXR1cm4gcW51bTsKIH0KIAotLyogR2V0IGEgdHJhbnNtaXQgcXVldWUsIGlmIGF2YWlsYWJsZSAqLwotCiBzdHJ1Y3QgYXRoX3R4cSAqYXRoX3Rlc3RfZ2V0X3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gTlVMTDsKQEAgLTIwMzMsOSArODkwLDggQEAKIAogCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKLQkvKiBUcnkgdG8gYXZvaWQgcnVubmluZyBvdXQgb2YgZGVzY3JpcHRvcnMgKi8KIAlpZiAodHhxLT5heHFfZGVwdGggPj0gKEFUSF9UWEJVRiAtIDIwKSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCiAJCQkiVFggcXVldWU6ICVkIGlzIGZ1bGwsIGRlcHRoOiAlZFxuIiwKIAkJCXFudW0sIHR4cS0+YXhxX2RlcHRoKTsKIAkJaWVlZTgwMjExX3N0b3BfcXVldWUoc2MtPmh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CkBAIC0yMDQ5LDEyICs5MDUsMTAgQEAKIAlyZXR1cm4gdHhxOwogfQogCi0vKiBVcGRhdGUgcGFyYW1ldGVycyBmb3IgYSB0cmFuc21pdCBxdWV1ZSAqLwotCiBpbnQgYXRoX3R4cV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtLAogCQkgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKQEAgLTIwODIsNyArOTM2LDcgQEAKIAkJCSJVbmFibGUgdG8gdXBkYXRlIGhhcmR3YXJlIHF1ZXVlICV1IVxuIiwgcW51bSk7CiAJCWVycm9yID0gLUVJTzsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHFudW0pOyAvKiBwdXNoIHRvIGgvdyAqLworCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHFudW0pOwogCX0KIAogCXJldHVybiBlcnJvcjsKQEAgLTIwOTIsNTUgKzk0NiwzNiBAQAogewogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHFpOwogCWludCBxbnVtID0gc2MtPmJlYWNvbi5jYWJxLT5heHFfcW51bTsKLQlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY29uZjsKIAogCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoc2MtPnNjX2FoLCBxbnVtLCAmcWkpOwogCS8qCiAJICogRW5zdXJlIHRoZSByZWFkeXRpbWUgJSBpcyB3aXRoaW4gdGhlIGJvdW5kcy4KIAkgKi8KLQlpZiAoc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lIDwgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCkKLQkJc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORDsKLQllbHNlIGlmIChzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPiBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EKQotCQlzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EOworCWlmIChzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPCBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EKQorCQlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EOworCWVsc2UgaWYgKHNjLT5jb25maWcuY2FicVJlYWR5dGltZSA+IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQpCisJCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQ7CiAKLQlhdGhfZ2V0X2JlYWNvbmNvbmZpZyhzYywgQVRIX0lGX0lEX0FOWSwgJmNvbmYpOwotCXFpLnRxaV9yZWFkeVRpbWUgPQotCQkoY29uZi5iZWFjb25faW50ZXJ2YWwgKiBzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUpIC8gMTAwOworCXFpLnRxaV9yZWFkeVRpbWUgPSAoc2MtPmh3LT5jb25mLmJlYWNvbl9pbnQgKgorCQkJICAgIHNjLT5jb25maWcuY2FicVJlYWR5dGltZSkgLyAxMDA7CiAJYXRoX3R4cV91cGRhdGUoc2MsIHFudW0sICZxaSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogRGVmZXJyZWQgcHJvY2Vzc2luZyBvZiB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KLQotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlpbnQgaTsKLQl1MzIgcWN1bWFzayA9ICgoMSA8PCBBVEg5S19OVU1fVFhfUVVFVUVTKSAtIDEpOwotCi0JYXRoOWtfaHdfZ2V0dHhpbnRydHhxcyhzYy0+c2NfYWgsICZxY3VtYXNrKTsKLQotCS8qCi0JICogUHJvY2VzcyBlYWNoIGFjdGl2ZSBxdWV1ZS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSAmJiAocWN1bWFzayAmICgxIDw8IGkpKSkKLQkJCWF0aF90eF9wcm9jZXNzcShzYywgJnNjLT50eC50eHFbaV0pOwotCX0KLX0KLQotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0Jc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCkKKy8qCisgKiBEcmFpbiBhIGdpdmVuIFRYIHF1ZXVlIChjb3VsZCBiZSBCZWFjb24gb3IgRGF0YSkKKyAqCisgKiBUaGlzIGFzc3VtZXMgb3V0cHV0IGhhcyBiZWVuIHN0b3BwZWQgYW5kCisgKiB3ZSBkbyBub3QgbmVlZCB0byBibG9jayBhdGhfdHhfdGFza2xldC4KKyAqLwordm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsIGJvb2wgcmV0cnlfdHgpCiB7CiAJc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKIAogCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAotCS8qCi0JICogTkI6IHRoaXMgYXNzdW1lcyBvdXRwdXQgaGFzIGJlZW4gc3RvcHBlZCBhbmQKLQkgKiAgICAgd2UgZG8gbm90IG5lZWQgdG8gYmxvY2sgYXRoX3R4X3Rhc2tsZXQKLQkgKi8KIAlmb3IgKDs7KSB7CiAJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKQEAgLTIxNzUsNyArMTAxMCw3IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAogCQlpZiAoYmZfaXNhbXBkdShiZikpCi0JCQlhdGhfdHhfY29tcGxldGVfYWdncl9yaWZzKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CisJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsIDApOwogCQllbHNlCiAJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOwogCX0KQEAgLTIxOTAsMTgxICsxMDI1LDY2IEBACiAJfQogfQogCi0vKiBEcmFpbiB0aGUgdHJhbnNtaXQgcXVldWVzIGFuZCByZWNsYWltIHJlc291cmNlcyAqLwotCi12b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKK3ZvaWQgYXRoX2RyYWluX2FsbF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0JLyogc3RvcCBiZWFjb24gcXVldWUuIFRoZSBiZWFjb24gd2lsbCBiZSBmcmVlZCB3aGVuCi0JICogd2UgZ28gdG8gSU5JVCBzdGF0ZSAqLwotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCSh2b2lkKSBhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJiZWFjb24gcXVldWUgJXhcbiIsCi0JCQlhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSkpOwotCX0KKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCWludCBpLCBucGVuZCA9IDA7CiAKLQlhdGhfZHJhaW5fdHhkYXRhcShzYywgcmV0cnlfdHgpOwotfQorCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKQorCQlyZXR1cm47CiAKLXUzMiBhdGhfdHhxX2RlcHRoKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSkKLXsKLQlyZXR1cm4gc2MtPnR4LnR4cVtxbnVtXS5heHFfZGVwdGg7Ci19CisJLyogU3RvcCBiZWFjb24gcXVldWUgKi8KKwlhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi11MzIgYXRoX3R4cV9hZ2dyX2RlcHRoKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSkKLXsKLQlyZXR1cm4gc2MtPnR4LnR4cVtxbnVtXS5heHFfYWdncl9kZXB0aDsKLX0KLQotYm9vbCBhdGhfdHhfYWdncl9jaGVjayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkbm8pCi17Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKLQotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpCi0JCXJldHVybiBmYWxzZTsKLQotCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWRubyk7Ci0KLQlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX0NPTVBMRVRFKSkgewotCQlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX1BST0dSRVNTKSAmJgotCQkgICAgKHR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzIDwgQUREQkFfRVhDSEFOR0VfQVRURU1QVFMpKSB7Ci0JCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cysrOwotCQkJcmV0dXJuIHRydWU7CisJLyogU3RvcCBkYXRhIHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKSB7CisJCQl0eHEgPSAmc2MtPnR4LnR4cVtpXTsKKwkJCWF0aDlrX2h3X3N0b3B0eGRtYShhaCwgdHhxLT5heHFfcW51bSk7CisJCQlucGVuZCArPSBhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHR4cS0+YXhxX3FudW0pOwogCQl9CiAJfQogCi0JcmV0dXJuIGZhbHNlOworCWlmIChucGVuZCkgeworCQlpbnQgcjsKKworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJVbmFibGUgdG8gc3RvcCBUeERNQS4gUmVzZXQgSEFMIVxuIik7CisKKwkJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKwkJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIHRydWUpOworCQlpZiAocikKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICV1XG4iLAorCQkJCXIpOworCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCisJCQlhdGhfZHJhaW50eHEoc2MsICZzYy0+dHgudHhxW2ldLCByZXRyeV90eCk7CisJfQogfQogCi0vKiBTdGFydCBUWCBhZ2dyZWdhdGlvbiAqLwotCi1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQordm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCi0JYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpIHsKLQkJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7Ci0JCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7Ci0JfQotCi0JcmV0dXJuIDA7CisJYXRoOWtfaHdfcmVsZWFzZXR4cXVldWUoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKTsKKwlzYy0+dHgudHhxc2V0dXAgJj0gfigxPDx0eHEtPmF4cV9xbnVtKTsKIH0KIAotLyogU3RvcCB0eCBhZ2dyZWdhdGlvbiAqLwotCi1pbnQgYXRoX3R4X2FnZ3Jfc3RvcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Ci0KLQlhdGhfdHhfYWdncl90ZWFyZG93bihzYywgYW4sIHRpZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlc3VtZSB0eCBhZ2dyZWdhdGlvbiAqLwotCi12b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwotCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgewotCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQkJdHh0aWQtPmJhd19zaXplID0KLQkJCUlFRUU4MDIxMV9NSU5fQU1QRFVfQlVGIDw8IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKLQkJYXRoX3R4X3Jlc3VtZV90aWQoc2MsIHR4dGlkKTsKLQl9Ci19Ci0KLS8qCi0gKiBQZXJmb3JtcyB0cmFuc21pdCBzaWRlIGNsZWFudXAgd2hlbiBUSUQgY2hhbmdlcyBmcm9tIGFnZ3JlZ2F0ZWQgdG8KLSAqIHVuYWdncmVnYXRlZC4KLSAqIC0gUGF1c2UgdGhlIFRJRCBhbmQgbWFyayBjbGVhbnVwIGluIHByb2dyZXNzCi0gKiAtIERpc2NhcmQgYWxsIHJldHJ5IGZyYW1lcyBmcm9tIHRoZSBzL3cgcXVldWUuCi0gKi8KLQotdm9pZCBhdGhfdHhfYWdncl90ZWFyZG93bihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwgdTggdGlkKQotewotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7Ci0Jc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3R4dGlkLT5hYy0+cW51bV07Ci0Jc3RydWN0IGF0aF9idWYgKmJmOwotCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQlpZiAodHh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSAvKiBjbGVhbnVwIGlzIGluIHByb2dyZXNzICovCi0JCXJldHVybjsKLQotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFRJRCBtdXN0IGJlIHBhdXNlZCBmaXJzdCAqLwotCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKLQotCS8qIGRyb3AgYWxsIHNvZnR3YXJlIHJldHJpZWQgZnJhbWVzIGFuZCBtYXJrIHRoaXMgVElEICovCi0Jc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4dGlkLT5idWZfcSkpIHsKLQkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJaWYgKCFiZl9pc3JldHJpZWQoYmYpKSB7Ci0JCQkvKgotCQkJICogTkI6IGl0J3MgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdAotCQkJICogc29mdHdhcmUgcmV0cmllZCBmcmFtZSB3aWxsIGFsd2F5cyBzdGF5Ci0JCQkgKiBhdCB0aGUgaGVhZCBvZiBzb2Z0d2FyZSBxdWV1ZS4KLQkJCSAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkmdHh0aWQtPmJ1Zl9xLCAmYmYtPmJmX2xhc3Rmcm0tPmxpc3QpOwotCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdHh0aWQsIGJmLT5iZl9zZXFubyk7Ci0KLQkJLyogY29tcGxldGUgdGhpcyBzdWItZnJhbWUgKi8KLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKLQl9Ci0KLQlpZiAodHh0aWQtPmJhd19oZWFkICE9IHR4dGlkLT5iYXdfdGFpbCkgewotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0NMRUFOVVA7Ci0JfSBlbHNlIHsKLQkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQl0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdHh0aWQpOwotCX0KLX0KLQotLyoKLSAqIFR4IHNjaGVkdWxpbmcgbG9naWMKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotCiB2b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CiAJc3RydWN0IGF0aF9hdHhfYWMgKmFjOwogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwogCi0JLyogbm90aGluZyB0byBzY2hlZHVsZSAqLwogCWlmIChsaXN0X2VtcHR5KCZ0eHEtPmF4cV9hY3EpKQogCQlyZXR1cm47Ci0JLyoKLQkgKiBnZXQgdGhlIGZpcnN0IG5vZGUvYWMgcGFpciBvbiB0aGUgcXVldWUKLQkgKi8KKwogCWFjID0gbGlzdF9maXJzdF9lbnRyeSgmdHhxLT5heHFfYWNxLCBzdHJ1Y3QgYXRoX2F0eF9hYywgbGlzdCk7CiAJbGlzdF9kZWwoJmFjLT5saXN0KTsKIAlhYy0+c2NoZWQgPSBmYWxzZTsKIAotCS8qCi0JICogcHJvY2VzcyBhIHNpbmdsZSB0aWQgcGVyIGRlc3RpbmF0aW9uCi0JICovCiAJZG8gewotCQkvKiBub3RoaW5nIHRvIHNjaGVkdWxlICovCiAJCWlmIChsaXN0X2VtcHR5KCZhYy0+dGlkX3EpKQogCQkJcmV0dXJuOwogCkBAIC0yMzcyLDcgKzEwOTIsNyBAQAogCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKIAkJdGlkLT5zY2hlZCA9IGZhbHNlOwogCi0JCWlmICh0aWQtPnBhdXNlZCkgICAgLyogY2hlY2sgbmV4dCB0aWQgdG8ga2VlcCBoL3cgYnVzeSAqLworCQlpZiAodGlkLT5wYXVzZWQpCiAJCQljb250aW51ZTsKIAogCQlpZiAoKHR4cS0+YXhxX2RlcHRoICUgMikgPT0gMCkKQEAgLTIzODUsMTcgKzExMDUsMTAgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKIAkJCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwogCi0JCS8qIG9ubHkgc2NoZWR1bGUgb25lIFRJRCBhdCBhIHRpbWUgKi8KIAkJYnJlYWs7CiAJfSB3aGlsZSAoIWxpc3RfZW1wdHkoJmFjLT50aWRfcSkpOwogCi0JLyoKLQkgKiBzY2hlZHVsZSBBQyBpZiBtb3JlIFRJRHMgbmVlZCBwcm9jZXNzaW5nCi0JICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhYy0+dGlkX3EpKSB7Ci0JCS8qCi0JCSAqIGFkZCBkZXN0IGFjIHRvIHR4cSBpZiBub3QgYWxyZWFkeSBhZGRlZAotCQkgKi8KIAkJaWYgKCFhYy0+c2NoZWQpIHsKIAkJCWFjLT5zY2hlZCA9IHRydWU7CiAJCQlsaXN0X2FkZF90YWlsKCZhYy0+bGlzdCwgJnR4cS0+YXhxX2FjcSk7CkBAIC0yNDAzLDEwOSArMTExNiw1NzMgQEAKIAl9CiB9CiAKLS8qIEluaXRpYWxpemUgcGVyLW5vZGUgdHJhbnNtaXQgc3RhdGUgKi8KLQotdm9pZCBhdGhfdHhfbm9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQoraW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpCiB7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7Ci0Jc3RydWN0IGF0aF9hdHhfYWMgKmFjOwotCWludCB0aWRubywgYWNubzsKLQotCS8qCi0JICogSW5pdCBwZXIgdGlkIHR4IHN0YXRlCi0JICovCi0JZm9yICh0aWRubyA9IDAsIHRpZCA9ICZhbi0+dGlkW3RpZG5vXTsKLQkgICAgIHRpZG5vIDwgV01FX05VTV9USUQ7Ci0JICAgICB0aWRubysrLCB0aWQrKykgewotCQl0aWQtPmFuICAgICAgICA9IGFuOwotCQl0aWQtPnRpZG5vICAgICA9IHRpZG5vOwotCQl0aWQtPnNlcV9zdGFydCA9IHRpZC0+c2VxX25leHQgPSAwOwotCQl0aWQtPmJhd19zaXplICA9IFdNRV9NQVhfQkE7Ci0JCXRpZC0+YmF3X2hlYWQgID0gdGlkLT5iYXdfdGFpbCA9IDA7Ci0JCXRpZC0+c2NoZWQgICAgID0gZmFsc2U7Ci0JCXRpZC0+cGF1c2VkID0gZmFsc2U7Ci0JCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQkJSU5JVF9MSVNUX0hFQUQoJnRpZC0+YnVmX3EpOwotCi0JCWFjbm8gPSBUSURfVE9fV01FX0FDKHRpZG5vKTsKLQkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107Ci0KLQkJLyogQUREQkEgc3RhdGUgKi8KLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKLQkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQl9Ci0KLQkvKgotCSAqIEluaXQgcGVyIGFjIHR4IHN0YXRlCi0JICovCi0JZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOwotCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgewotCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKLQkJSU5JVF9MSVNUX0hFQUQoJmFjLT50aWRfcSk7Ci0KLQkJc3dpdGNoIChhY25vKSB7Ci0JCWNhc2UgV01FX0FDX0JFOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9BQ19CSzoKLQkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAotCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CSyk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUVfQUNfVkk6Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVkkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01FX0FDX1ZPOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX1ZPKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKiBDbGVhbnVwdGhlIHBlbmRpbmcgYnVmZmVycyBmb3IgdGhlIG5vZGUuICovCi0KLXZvaWQgYXRoX3R4X25vZGVfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWMsICphY190bXA7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsICp0aWRfdG1wOwogCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgewotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKLQkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOwogCi0JCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOwotCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWMsCi0JCQkJCWFjX3RtcCwgJnR4cS0+YXhxX2FjcSwgbGlzdCkgewotCQkJCXRpZCA9IGxpc3RfZmlyc3RfZW50cnkoJmFjLT50aWRfcSwKLQkJCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCwgbGlzdCk7Ci0JCQkJaWYgKHRpZCAmJiB0aWQtPmFuICE9IGFuKQotCQkJCQljb250aW51ZTsKLQkJCQlsaXN0X2RlbCgmYWMtPmxpc3QpOwotCQkJCWFjLT5zY2hlZCA9IGZhbHNlOwotCi0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpZCwKLQkJCQkJCXRpZF90bXAsICZhYy0+dGlkX3EsIGxpc3QpIHsKLQkJCQkJbGlzdF9kZWwoJnRpZC0+bGlzdCk7Ci0JCQkJCXRpZC0+c2NoZWQgPSBmYWxzZTsKLQkJCQkJYXRoX3RpZF9kcmFpbihzYywgdHhxLCB0aWQpOwotCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQkJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7Ci0JCQkJfQotCQkJfQotCi0JCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7Ci0JCX0KKwlpZiAoaGFsdHlwZSA+PSBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSkgeworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJIkhBTCBBQyAldSBvdXQgb2YgcmFuZ2UsIG1heCAlenUhXG4iLAorCQkJIGhhbHR5cGUsIEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKTsKKwkJcmV0dXJuIDA7CiAJfQorCXR4cSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0RBVEEsIGhhbHR5cGUpOworCWlmICh0eHEgIT0gTlVMTCkgeworCQlzYy0+dHguaHdxX21hcFtoYWx0eXBlXSA9IHR4cS0+YXhxX3FudW07CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKIH0KIAotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKKy8qKioqKioqKioqKi8KKy8qIFRYLCBETUEgKi8KKy8qKioqKioqKioqKi8KKworLyoKKyAqIEluc2VydCBhIGNoYWluIG9mIGF0aF9idWYgKGRlc2NyaXB0b3JzKSBvbiBhIHR4cSBhbmQKKyAqIGFzc3VtZSB0aGUgZGVzY3JpcHRvcnMgYXJlIGFscmVhZHkgY2hhaW5lZCB0b2dldGhlciBieSBjYWxsZXIuCisgKi8KK3N0YXRpYyB2b2lkIGF0aF90eF90eHFhZGRidWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJLyoKKwkgKiBJbnNlcnQgdGhlIGZyYW1lIG9uIHRoZSBvdXRib3VuZCBsaXN0IGFuZAorCSAqIHBhc3MgaXQgb24gdG8gdGhlIGhhcmR3YXJlLgorCSAqLworCisJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCXJldHVybjsKKworCWJmID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoaGVhZCwgJnR4cS0+YXhxX3EpOworCXR4cS0+YXhxX2RlcHRoKys7CisJdHhxLT5heHFfdG90YWxxdWV1ZWQrKzsKKwl0eHEtPmF4cV9saW5rYnVmID0gbGlzdF9lbnRyeSh0eHEtPmF4cV9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsCisJCSJxbnVtOiAlZCwgdHhxIGRlcHRoOiAlZFxuIiwgdHhxLT5heHFfcW51bSwgdHhxLT5heHFfZGVwdGgpOworCisJaWYgKHR4cS0+YXhxX2xpbmsgPT0gTlVMTCkgeworCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSwgYmYtPmJmX2RhZGRyKTsKKwkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULAorCQkJIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAorCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOworCX0gZWxzZSB7CisJCSp0eHEtPmF4cV9saW5rID0gYmYtPmJmX2RhZGRyOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJsaW5rWyV1XSAoJXApPSVsbHggKCVwKVxuIiwKKwkJCXR4cS0+YXhxX3FudW0sIHR4cS0+YXhxX2xpbmssCisJCQlpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7CisJfQorCXR4cS0+YXhxX2xpbmsgPSAmKGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MtPmRzX2xpbmspOworCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHR4cS0+YXhxX3FudW0pOworfQorCitzdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF90eF9nZXRfYnVmZmVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfYnVmICpiZiA9IE5VTEw7CisKKwlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHgudHhidWYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwlsaXN0X2RlbCgmYmYtPmxpc3QpOworCisJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJcmV0dXJuIGJmOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9hbXBkdShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkLAorCQkJICAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BTVBEVTsKKworCS8qCisJICogRG8gbm90IHF1ZXVlIHRvIGgvdyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKwkgKiAtIHRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcyBpbiBzb2Z0d2FyZSBxdWV1ZQorCSAqIC0gdGhlIFRJRCBpcyBjdXJyZW50bHkgcGF1c2VkIGZvciBBRERCQS9CQVIgcmVxdWVzdAorCSAqIC0gc2Vxbm8gaXMgbm90IHdpdGhpbiBibG9jay1hY2sgd2luZG93CisJICogLSBoL3cgcXVldWUgZGVwdGggZXhjZWVkcyBsb3cgd2F0ZXIgbWFyaworCSAqLworCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgfHwgdGlkLT5wYXVzZWQgfHwKKwkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGJmLT5iZl9zZXFubykgfHwKKwkgICAgdHhjdGwtPnR4cS0+YXhxX2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKKwkJLyoKKwkJICogQWRkIHRoaXMgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUgZm9yIHNjaGVkdWxpbmcgbGF0ZXIKKwkJICogZm9yIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmdGlkLT5idWZfcSk7CisJCWF0aF90eF9xdWV1ZV90aWQodHhjdGwtPnR4cSwgdGlkKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFkZCBzdWItZnJhbWUgdG8gQkFXICovCisJYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7CisKKwkvKiBRdWV1ZSB0byBoL3cgd2l0aG91dCBhZ2dyZWdhdGlvbiAqLworCWJmLT5iZl9uZnJhbWVzID0gMTsKKwliZi0+YmZfbGFzdGJmID0gYmY7CisJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOworCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsIGJmX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9odF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkJICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQpCit7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwliZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0FNUERVOworCisJLyogdXBkYXRlIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciBmb3Igc3Vic2VxdWVudCBBRERCQSByZXF1ZXN0ICovCisJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOworCisJYmYtPmJmX25mcmFtZXMgPSAxOworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X3NlbmRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQpCit7CisJc3RydWN0IGF0aF9idWYgKmJmOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwliZi0+YmZfbmZyYW1lcyA9IDE7CisJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOworCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgYmZfaGVhZCk7Cit9CisKK3N0YXRpYyBlbnVtIGF0aDlrX3BrdF90eXBlIGdldF9od19wYWNrZXRfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJZW51bSBhdGg5a19wa3RfdHlwZSBodHlwZTsKKwlfX2xlMTYgZmM7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfQkVBQ09OOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9QUk9CRV9SRVNQOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9BVElNOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19wc3BvbGwoZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BTUE9MTDsKKwllbHNlCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfTk9STUFMOworCisJcmV0dXJuIGh0eXBlOworfQorCitzdGF0aWMgYm9vbCBpc19wYWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCV9fbGUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgfHwKKwkJICAgIC8qIFBvcnQgQWNjZXNzIEVudGl0eSAoSUVFRSA4MDIuMVgpICovCisJCSAgICAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCWlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19XRVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfV0VQOworCQllbHNlIGlmICh0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKQorCQkJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX1RLSVA7CisJCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX0NDTVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfQUVTOworCX0KKworCXJldHVybiBBVEg5S19LRVlfVFlQRV9DTEVBUjsKK30KKworc3RhdGljIHZvaWQgYXNzaWduX2FnZ3JfdGlkX3NlcW5vKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKKwlfX2xlMTYgZmM7CisJdTggKnFjOworCisJaWYgKCF0eF9pbmZvLT5jb250cm9sLnN0YSkKKwkJcmV0dXJuOworCisJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCWJmLT5iZl90aWRubyA9IHFjWzBdICYgMHhmOworCX0KKworCS8qCisJICogRm9yIEhUIGNhcGFibGUgc3RhdGlvbnMsIHdlIHNhdmUgdGlkbm8gZm9yIGxhdGVyIHVzZS4KKwkgKiBXZSBhbHNvIG92ZXJyaWRlIHNlcW5vIHNldCBieSB1cHBlciBsYXllciB3aXRoIHRoZSBvbmUKKwkgKiBpbiB0eCBhZ2dyZWdhdGlvbiBzdGF0ZS4KKwkgKgorCSAqIElmIGZyYWdtZW50YXRpb24gaXMgb24sIHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMKKwkgKiBub3Qgb3ZlcnJpZGRlbiwgc2luY2UgaXQgaGFzIGJlZW4KKwkgKiBpbmNyZW1lbnRlZCBieSB0aGUgZnJhZ21lbnRhdGlvbiByb3V0aW5lLgorCSAqCisJICogRklYTUU6IGNoZWNrIGlmIHRoZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBleGNlZWRzCisJICogSUVFRTgwMjExIG1heC4KKwkgKi8KKwl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7CisJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHRpZC0+c2VxX25leHQgPDwKKwkJCUlFRUU4MDIxMV9TRVFfU0VRX1NISUZUKTsKKwliZi0+YmZfc2Vxbm8gPSB0aWQtPnNlcV9uZXh0OworCUlOQ1IodGlkLT5zZXFfbmV4dCwgSUVFRTgwMjExX1NFUV9NQVgpOworfQorCitzdGF0aWMgaW50IHNldHVwX3R4X2ZsYWdzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbnQgZmxhZ3MgPSAwOworCisJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX0NMUkRNQVNLOyAvKiBuZWVkZWQgZm9yIGNyeXB0byBlcnJvcnMgKi8KKwlmbGFncyB8PSBBVEg5S19UWERFU0NfSU5UUkVROworCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCisJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19OT0FDSzsKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIHJpeCAtIHJhdGUgaW5kZXgKKyAqIHBrdGxlbiAtIHRvdGFsIGJ5dGVzIChkZWxpbXMgKyBkYXRhICsgZmNzICsgcGFkcyArIHBhZCBkZWxpbXMpCisgKiB3aWR0aCAgLSAwIGZvciAyMCBNSHosIDEgZm9yIDQwIE1IegorICogaGFsZl9naSAtIHRvIHVzZSA0dXMgdi9zIDMuNiB1cyBmb3Igc3ltYm9sIHRpbWUKKyAqLworc3RhdGljIHUzMiBhdGhfcGt0X2R1cmF0aW9uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1OCByaXgsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCSAgICBpbnQgd2lkdGgsIGludCBoYWxmX2dpLCBib29sIHNob3J0UHJlYW1ibGUpCit7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCXUzMiBuYml0cywgbnN5bWJpdHMsIGR1cmF0aW9uLCBuc3ltYm9sczsKKwl1OCByYzsKKwlpbnQgc3RyZWFtcywgcGt0bGVuOworCisJcGt0bGVuID0gYmZfaXNhZ2dyKGJmKSA/IGJmLT5iZl9hbCA6IGJmLT5iZl9mcm1sZW47CisJcmMgPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0ucmF0ZWNvZGU7CisKKwkvKiBmb3IgbGVnYWN5IHJhdGVzLCB1c2Ugb2xkIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcGFja2V0IGR1cmF0aW9uICovCisJaWYgKCFJU19IVF9SQVRFKHJjKSkKKwkJcmV0dXJuIGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLCBwa3RsZW4sCisJCQkJCSAgICAgIHJpeCwgc2hvcnRQcmVhbWJsZSk7CisKKwkvKiBmaW5kIG51bWJlciBvZiBzeW1ib2xzOiBQTENQICsgZGF0YSAqLworCW5iaXRzID0gKHBrdGxlbiA8PCAzKSArIE9GRE1fUExDUF9CSVRTOworCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOworCW5zeW1ib2xzID0gKG5iaXRzICsgbnN5bWJpdHMgLSAxKSAvIG5zeW1iaXRzOworCisJaWYgKCFoYWxmX2dpKQorCQlkdXJhdGlvbiA9IFNZTUJPTF9USU1FKG5zeW1ib2xzKTsKKwllbHNlCisJCWR1cmF0aW9uID0gU1lNQk9MX1RJTUVfSEFMRkdJKG5zeW1ib2xzKTsKKworCS8qIGFkZHVwIGR1cmF0aW9uIGZvciBsZWdhY3kvaHQgdHJhaW5pbmcgYW5kIHNpZ25hbCBmaWVsZHMgKi8KKwlzdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKKwlkdXJhdGlvbiArPSBMX1NURiArIExfTFRGICsgTF9TSUcgKyBIVF9TSUcgKyBIVF9TVEYgKyBIVF9MVEYoc3RyZWFtcyk7CisKKwlyZXR1cm4gZHVyYXRpb247Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOworCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlpbnQgaSwgZmxhZ3MgPSAwOworCXU4IHJpeCA9IDAsIGN0c3JhdGUgPSAwOworCWJvb2wgaXNfcHNwb2xsOworCisJbWVtc2V0KHNlcmllcywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMpICogNCk7CisKKwlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaXNfcHNwb2xsID0gaWVlZTgwMjExX2lzX3BzcG9sbChoZHItPmZyYW1lX2NvbnRyb2wpOworCisJLyoKKwkgKiBXZSBjaGVjayBpZiBTaG9ydCBQcmVhbWJsZSBpcyBuZWVkZWQgZm9yIHRoZSBDVFMgcmF0ZSBieQorCSAqIGNoZWNraW5nIHRoZSBCU1MncyBnbG9iYWwgZmxhZy4KKwkgKiBCdXQgZm9yIHRoZSByYXRlIHNlcmllcywgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSBpcyB1c2VkLgorCSAqLworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkKKwkJY3RzcmF0ZSA9IHJ0LT5pbmZvW3R4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeF0ucmF0ZWNvZGUgfAorCQkJcnQtPmluZm9bdHhfaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XS5zaG9ydF9wcmVhbWJsZTsKKwllbHNlCisJCWN0c3JhdGUgPSBydC0+aW5mb1t0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHhdLnJhdGVjb2RlOworCisJLyoKKwkgKiBBVEg5S19UWERFU0NfUlRTRU5BIGFuZCBBVEg5S19UWERFU0NfQ1RTRU5BIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisJICogQ2hlY2sgdGhlIGZpcnN0IHJhdGUgaW4gdGhlIHNlcmllcyB0byBkZWNpZGUgd2hldGhlciBSVFMvQ1RTCisJICogb3IgQ1RTLXRvLXNlbGYgaGFzIHRvIGJlIHVzZWQuCisJICovCisJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkKKwkJZmxhZ3MgPSBBVEg5S19UWERFU0NfQ1RTRU5BOworCWVsc2UgaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQorCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7CisKKwkvKiBGSVhNRTogSGFuZGxlIGFnZ3JlZ2F0aW9uIHByb3RlY3Rpb24gKi8KKwlpZiAoc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ICYmCisJICAgICghYmZfaXNhZ2dyKGJmKSB8fCAoYmZfaXNhZ2dyKGJmKSAmJiBiZi0+YmZfYWwgPCA4MTkyKSkpIHsKKwkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOworCX0KKworCS8qIEZvciBBUjU0MTYgLSBSVFMgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgZnJhbWUgbGFyZ2VyIHRoYW4gOEsgKi8KKwlpZiAoYmZfaXNhZ2dyKGJmKSAmJiAoYmYtPmJmX2FsID4gc2MtPnNjX2FoLT5jYXBzLnJ0c19hZ2dyX2xpbWl0KSkKKwkJZmxhZ3MgJj0gfihBVEg5S19UWERFU0NfUlRTRU5BKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKCFyYXRlc1tpXS5jb3VudCB8fCAocmF0ZXNbaV0uaWR4IDwgMCkpCisJCQljb250aW51ZTsKKworCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCXNlcmllc1tpXS5UcmllcyA9IHJhdGVzW2ldLmNvdW50OworCQlzZXJpZXNbaV0uQ2hTZWwgPSBzYy0+dHhfY2hhaW5tYXNrOworCisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCQlzZXJpZXNbaV0uUmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZWNvZGUgfAorCQkJCXJ0LT5pbmZvW3JpeF0uc2hvcnRfcHJlYW1ibGU7CisJCWVsc2UKKwkJCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZTsKKworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKKwkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU18yMDQwOworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCisJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJOworCisJCXNlcmllc1tpXS5Qa3REdXJhdGlvbiA9IGF0aF9wa3RfZHVyYXRpb24oc2MsIHJpeCwgYmYsCisJCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkgIT0gMCwKKwkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpLAorCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpKTsKKwl9CisKKwkvKiBzZXQgZHVyX3VwZGF0ZV9lbiBmb3IgbC1zaWcgY29tcHV0YXRpb24gZXhjZXB0IGZvciBQUy1Qb2xsIGZyYW1lcyAqLworCWF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywKKwkJCQkgICAgIGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MsCisJCQkJICAgICAhaXNfcHNwb2xsLCBjdHNyYXRlLAorCQkJCSAgICAgMCwgc2VyaWVzLCA0LCBmbGFncyk7CisKKwlpZiAoc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ICYmIGZsYWdzKQorCQlhdGg5a19od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCA4MTkyKTsKK30KKworc3RhdGljIGludCBhdGhfdHhfc2V0dXBfYnVmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXY7CisJaW50IGhkcmxlbjsKKwlfX2xlMTYgZmM7CisKKwl0eF9pbmZvX3ByaXYgPSBremFsbG9jKHNpemVvZigqdHhfaW5mb19wcml2KSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCF0eF9pbmZvX3ByaXYpKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gdHhfaW5mb19wcml2OworCXR4X2luZm9fcHJpdi0+YXBoeSA9IGFwaHk7CisJdHhfaW5mb19wcml2LT5mcmFtZV90eXBlID0gdHhjdGwtPmZyYW1lX3R5cGU7CisJaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCUFUSF9UWEJVRl9SRVNFVChiZik7CisKKwliZi0+YmZfZnJtbGVuID0gc2tiLT5sZW4gKyBGQ1NfTEVOIC0gKGhkcmxlbiAmIDMpOworCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYgIWlzX3BhZShza2IpKQorCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfSFQ7CisKKwliZi0+YmZfZmxhZ3MgPSBzZXR1cF90eF9mbGFncyhzYywgc2tiLCB0eGN0bC0+dHhxKTsKKworCWJmLT5iZl9rZXl0eXBlID0gZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7CisJaWYgKGJmLT5iZl9rZXl0eXBlICE9IEFUSDlLX0tFWV9UWVBFX0NMRUFSKSB7CisJCWJmLT5iZl9mcm1sZW4gKz0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47CisJCWJmLT5iZl9rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OworCX0gZWxzZSB7CisJCWJmLT5iZl9rZXlpeCA9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSAmJiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKKwkJYXNzaWduX2FnZ3JfdGlkX3NlcW5vKHNrYiwgYmYpOworCisJYmYtPmJmX21wZHUgPSBza2I7CisKKwliZi0+YmZfZG1hY29udGV4dCA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCkpKSB7CisJCWJmLT5iZl9tcGR1ID0gTlVMTDsKKwkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCQkiZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBUWFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0OworCXJldHVybiAwOworfQorCisvKiBGSVhNRTogdHggcG93ZXIgKi8KK3N0YXRpYyB2b2lkIGF0aF90eF9zdGFydF9kbWEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCSAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCWludCBmcm1fdHlwZTsKKwlfX2xlMTYgZmM7CisKKwlmcm1fdHlwZSA9IGdldF9od19wYWNrZXRfdHlwZShza2IpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOworCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisKKwlkcyA9IGJmLT5iZl9kZXNjOworCWRzLT5kc19saW5rID0gMDsKKwlkcy0+ZHNfZGF0YSA9IGJmLT5iZl9idWZfYWRkcjsKKworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBiZi0+YmZfZnJtbGVuLCBmcm1fdHlwZSwgTUFYX1JBVEVfUE9XRVIsCisJCQkgICAgICAgYmYtPmJmX2tleWl4LCBiZi0+YmZfa2V5dHlwZSwgYmYtPmJmX2ZsYWdzKTsKKworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLAorCQkJICAgIHNrYi0+bGVuLAkvKiBzZWdtZW50IGxlbmd0aCAqLworCQkJICAgIHRydWUsCS8qIGZpcnN0IHNlZ21lbnQgKi8KKwkJCSAgICB0cnVlLAkvKiBsYXN0IHNlZ21lbnQgKi8KKwkJCSAgICBkcyk7CS8qIGZpcnN0IGRlc2NyaXB0b3IgKi8KKworCXNwaW5fbG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOworCisJaWYgKGJmX2lzaHQoYmYpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpICYmCisJICAgIHR4X2luZm8tPmNvbnRyb2wuc3RhKSB7CisJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKKwkJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOworCisJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLCAmYmZfaGVhZCk7CisJCQlnb3RvIHR4X2RvbmU7CisJCX0KKworCQlpZiAoYXRoX2FnZ3JfcXVlcnkoc2MsIGFuLCBiZi0+YmZfdGlkbm8pKSB7CisJCQkvKgorCQkJICogVHJ5IGFnZ3JlZ2F0aW9uIGlmIGl0J3MgYSB1bmljYXN0IGRhdGEgZnJhbWUKKwkJCSAqIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgSFQgY2FwYWJsZS4KKwkJCSAqLworCQkJYXRoX3R4X3NlbmRfYW1wZHUoc2MsIHRpZCwgJmJmX2hlYWQsIHR4Y3RsKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBTZW5kIHRoaXMgZnJhbWUgYXMgcmVndWxhciB3aGVuIEFEREJBCisJCQkgKiBleGNoYW5nZSBpcyBuZWl0aGVyIGNvbXBsZXRlIG5vciBwZW5kaW5nLgorCQkJICovCisJCQlhdGhfdHhfc2VuZF9odF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsCisJCQkJCSAgICAgIHRpZCwgJmJmX2hlYWQpOworCQl9CisJfSBlbHNlIHsKKwkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLCAmYmZfaGVhZCk7CisJfQorCit0eF9kb25lOgorCXNwaW5fdW5sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Cit9CisKKy8qIFVwb24gZmFpbHVyZSBjYWxsZXIgc2hvdWxkIGZyZWUgc2tiICovCitpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJaW50IHI7CisKKwliZiA9IGF0aF90eF9nZXRfYnVmZmVyKHNjKTsKKwlpZiAoIWJmKSB7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlRYIGJ1ZmZlcnMgYXJlIGZ1bGxcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJciA9IGF0aF90eF9zZXR1cF9idWZmZXIoaHcsIGJmLCBza2IsIHR4Y3RsKTsKKwlpZiAodW5saWtlbHkocikpIHsKKwkJc3RydWN0IGF0aF90eHEgKnR4cSA9IHR4Y3RsLT50eHE7CisKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlRYIG1lbSBhbGxvYyBmYWlsdXJlXG4iKTsKKworCQkvKiB1cG9uIGF0aF90eF9wcm9jZXNzcSgpIHRoaXMgVFggcXVldWUgd2lsbCBiZSByZXN1bWVkLCB3ZQorCQkgKiBndWFyYW50ZWUgdGhpcyB3aWxsIGhhcHBlbiBieSBrbm93aW5nIGJlZm9yZWhhbmQgdGhhdAorCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCisJCSAqIG9uIHRoZSBxdWV1ZSAqLworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAoc2MtPnR4LnR4cVt0eHEtPmF4cV9xbnVtXS5heHFfZGVwdGggPiAxKSB7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsCisJCQkJc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCQkJdHhxLT5zdG9wcGVkID0gMTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHgudHhidWYpOworCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwkJcmV0dXJuIHI7CisJfQorCisJYXRoX3R4X3N0YXJ0X2RtYShzYywgYmYsIHR4Y3RsKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWludCBoZHJsZW4sIHBhZHNpemU7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKQEAgLTI1NDIsNyArMTcxOSw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgQ0FCUSBwYWNrZXQsIHNrYjogJXBcbiIsIHNrYik7CiAKLQlpZiAoYXRoX3R4X3N0YXJ0KHNjLCBza2IsICZ0eGN0bCkgIT0gMCkgeworCWlmIChhdGhfdHhfc3RhcnQoaHcsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIkNBQlEgVFggZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KQEAgLTI1NTEsMyArMTcyOCw0MzcgQEAKIGV4aXQ6CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KKworLyoqKioqKioqKioqKioqKioqLworLyogVFggQ29tcGxldGlvbiAqLworLyoqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgc3RydWN0IGF0aF94bWl0X3N0YXR1cyAqdHhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKKwlpbnQgaGRybGVuLCBwYWRzaXplOworCWludCBmcmFtZV90eXBlID0gQVRIOUtfTk9UX0lOVEVSTkFMOworCisJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7CisKKwlpZiAodHhfaW5mb19wcml2KSB7CisJCWh3ID0gdHhfaW5mb19wcml2LT5hcGh5LT5odzsKKwkJZnJhbWVfdHlwZSA9IHR4X2luZm9fcHJpdi0+ZnJhbWVfdHlwZTsKKwl9CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAorCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSB7CisJCWtmcmVlKHR4X2luZm9fcHJpdik7CisJCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOworCX0KKworCWlmICh0eF9zdGF0dXMtPmZsYWdzICYgQVRIX1RYX0JBUikgeworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOworCQl0eF9zdGF0dXMtPmZsYWdzICY9IH5BVEhfVFhfQkFSOworCX0KKworCWlmICghKHR4X3N0YXR1cy0+ZmxhZ3MgJiAoQVRIX1RYX0VSUk9SIHwgQVRIX1RYX1hSRVRSWSkpKSB7CisJCS8qIEZyYW1lIHdhcyBBQ0tlZCAqLworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJfQorCisJdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdHhfc3RhdHVzLT5yZXRyaWVzICsgMTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJcGFkc2l6ZSA9IGhkcmxlbiAmIDM7CisJaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7CisJCS8qCisJCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bworCQkgKiBtYWM4MDIxMS4KKwkJICovCisJCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHBhZHNpemUpOworCX0KKworCWlmIChmcmFtZV90eXBlID09IEFUSDlLX05PVF9JTlRFUk5BTCkKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwllbHNlCisJCWF0aDlrX3R4X3N0YXR1cyhodywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCisJCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKKwlzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzIHR4X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBTZXQgcmV0cnkgaW5mb3JtYXRpb24uCisJICogTkI6IERvbid0IHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRlc2NyaXB0b3IsIGJlY2F1c2UgdGhlIGZyYW1lCisJICogY291bGQgYmUgc29mdHdhcmUgcmV0cmllZC4KKwkgKi8KKwl0eF9zdGF0dXMucmV0cmllcyA9IGJmLT5iZl9yZXRyaWVzOworCXR4X3N0YXR1cy5mbGFncyA9IDA7CisKKwlpZiAoc2VuZGJhcikKKwkJdHhfc3RhdHVzLmZsYWdzID0gQVRIX1RYX0JBUjsKKworCWlmICghdHhvaykgeworCQl0eF9zdGF0dXMuZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOworCisJCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKKwkJCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfWFJFVFJZOworCX0KKworCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgJnR4X3N0YXR1cyk7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOworCXUxNiBzZXFfc3QgPSAwOworCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07CisJaW50IGJhX2luZGV4OworCWludCBuYmFkID0gMDsKKwlpbnQgaXNhZ2dyID0gMDsKKworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCisJCXJldHVybiAwOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwlpZiAoaXNhZ2dyKSB7CisJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJfQorCisJd2hpbGUgKGJmKSB7CisJCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKKwkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKKwkJCW5iYWQrKzsKKworCQliZiA9IGJmLT5iZl9uZXh0OworCX0KKworCXJldHVybiBuYmFkOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcmNfc3RhdHVzKHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF9kZXNjICpkcywgaW50IG5iYWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCisJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSBmYWxzZTsKKwlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKQorCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKKworCWlmICgoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKSA9PSAwICYmCisJICAgIChiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spID09IDApIHsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCW1lbWNweSgmdHhfaW5mb19wcml2LT50eCwgJmRzLT5kc190eHN0YXQsCisJCQkgICAgICAgc2l6ZW9mKHR4X2luZm9fcHJpdi0+dHgpKTsKKwkJCXR4X2luZm9fcHJpdi0+bl9mcmFtZXMgPSBiZi0+YmZfbmZyYW1lczsKKwkJCXR4X2luZm9fcHJpdi0+bl9iYWRfZnJhbWVzID0gbmJhZDsKKwkJCXR4X2luZm9fcHJpdi0+dXBkYXRlX3JjID0gdHJ1ZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJaW50IHFudW07CisKKwlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCWlmICh0eHEtPnN0b3BwZWQgJiYKKwkgICAgc2MtPnR4LnR4cVt0eHEtPmF4cV9xbnVtXS5heHFfZGVwdGggPD0gKEFUSF9UWEJVRiAtIDIwKSkgeworCQlxbnVtID0gYXRoX2dldF9tYWM4MDIxMV9xbnVtKHR4cS0+YXhxX3FudW0sIHNjKTsKKwkJaWYgKHFudW0gIT0gLTEpIHsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHNjLT5odywgcW51bSk7CisJCQl0eHEtPnN0b3BwZWQgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X3Byb2Nlc3NxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfYnVmICpiZiwgKmxhc3RiZiwgKmJmX2hlbGQgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOworCWludCB0eG9rLCBuYmFkID0gMDsKKwlpbnQgc3RhdHVzOworCisJRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwgInR4IHF1ZXVlICVkICgleCksIGxpbmsgJXBcbiIsCisJCXR4cS0+YXhxX3FudW0sIGF0aDlrX2h3X2dldHR4YnVmKHNjLT5zY19haCwgdHhxLT5heHFfcW51bSksCisJCXR4cS0+YXhxX2xpbmspOworCisJZm9yICg7OykgeworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmdHhxLT5heHFfcSkpIHsKKwkJCXR4cS0+YXhxX2xpbmsgPSBOVUxMOworCQkJdHhxLT5heHFfbGlua2J1ZiA9IE5VTEw7CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnR4cS0+YXhxX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgYSBCSCBnZXRzIHNjaGVkdWxlZAorCQkgKiBhZnRlciBzdyB3cml0ZXMgVHhFIGFuZCBiZWZvcmUgaHcgcmUtbG9hZCB0aGUgbGFzdAorCQkgKiBkZXNjcmlwdG9yIHRvIGdldCB0aGUgbmV3bHkgY2hhaW5lZCBvbmUuCisJCSAqIFNvZnR3YXJlIG11c3Qga2VlcCB0aGUgbGFzdCBET05FIGRlc2NyaXB0b3IgYXMgYQorCQkgKiBob2xkaW5nIGRlc2NyaXB0b3IgLSBzb2Z0d2FyZSBkb2VzIHNvIGJ5IG1hcmtpbmcKKwkJICogaXQgd2l0aCB0aGUgU1RBTEUgZmxhZy4KKwkJICovCisJCWJmX2hlbGQgPSBOVUxMOworCQlpZiAoYmYtPmJmX3N0YXR1cyAmIEFUSF9CVUZTVEFUVVNfU1RBTEUpIHsKKwkJCWJmX2hlbGQgPSBiZjsKKwkJCWlmIChsaXN0X2lzX2xhc3QoJmJmX2hlbGQtPmxpc3QsICZ0eHEtPmF4cV9xKSkgeworCQkJCXR4cS0+YXhxX2xpbmsgPSBOVUxMOworCQkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQkJCS8qCisJCQkJICogVGhlIGhvbGRpbmcgZGVzY3JpcHRvciBpcyB0aGUgbGFzdAorCQkJCSAqIGRlc2NyaXB0b3IgaW4gcXVldWUuIEl0J3Mgc2FmZSB0byByZW1vdmUKKwkJCQkgKiB0aGUgbGFzdCBob2xkaW5nIGRlc2NyaXB0b3IgaW4gQkggY29udGV4dC4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQkJCWxpc3RfbW92ZV90YWlsKCZiZl9oZWxkLT5saXN0LCAmc2MtPnR4LnR4YnVmKTsKKwkJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJYmYgPSBsaXN0X2VudHJ5KGJmX2hlbGQtPmxpc3QubmV4dCwKKwkJCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwkJCX0KKwkJfQorCisJCWxhc3RiZiA9IGJmLT5iZl9sYXN0YmY7CisJCWRzID0gbGFzdGJmLT5iZl9kZXNjOworCisJCXN0YXR1cyA9IGF0aDlrX2h3X3R4cHJvY2Rlc2MoYWgsIGRzKTsKKwkJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChiZi0+YmZfZGVzYyA9PSB0eHEtPmF4cV9sYXN0ZHNXaXRoQ1RTKQorCQkJdHhxLT5heHFfbGFzdGRzV2l0aENUUyA9IE5VTEw7CisJCWlmIChkcyA9PSB0eHEtPmF4cV9nYXRpbmdkcykKKwkJCXR4cS0+YXhxX2dhdGluZ2RzID0gTlVMTDsKKworCQkvKgorCQkgKiBSZW1vdmUgYXRoX2J1ZidzIG9mIHRoZSBzYW1lIHRyYW5zbWl0IHVuaXQgZnJvbSB0eHEsCisJCSAqIGhvd2V2ZXIgbGVhdmUgdGhlIGxhc3QgZGVzY3JpcHRvciBiYWNrIGFzIHRoZSBob2xkaW5nCisJCSAqIGRlc2NyaXB0b3IgZm9yIGh3LgorCQkgKi8KKwkJbGFzdGJmLT5iZl9zdGF0dXMgfD0gQVRIX0JVRlNUQVRVU19TVEFMRTsKKwkJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOworCQlpZiAoIWxpc3RfaXNfc2luZ3VsYXIoJmxhc3RiZi0+bGlzdCkpCisJCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKKwkJCQkmdHhxLT5heHFfcSwgbGFzdGJmLT5saXN0LnByZXYpOworCisJCXR4cS0+YXhxX2RlcHRoLS07CisJCWlmIChiZl9pc2FnZ3IoYmYpKQorCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOworCisJCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQlpZiAoYmZfaGVsZCkgeworCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZiZl9oZWxkLT5saXN0LCAmc2MtPnR4LnR4YnVmKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJfQorCisJCWlmICghYmZfaXNhbXBkdShiZikpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGZyYW1lIGlzIHNlbnQgb3V0IGFzIGEgc2luZ2xlIGZyYW1lLgorCQkJICogVXNlIGhhcmR3YXJlIHJldHJ5IHN0YXR1cyBmb3IgdGhpcyBmcmFtZS4KKwkJCSAqLworCQkJYmYtPmJmX3JldHJpZXMgPSBkcy0+ZHNfdHhzdGF0LnRzX2xvbmdyZXRyeTsKKwkJCWlmIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkKKwkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOworCQkJbmJhZCA9IDA7CisJCX0gZWxzZSB7CisJCQluYmFkID0gYXRoX3R4X251bV9iYWRmcm1zKHNjLCBiZiwgdHhvayk7CisJCX0KKworCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCk7CisKKwkJaWYgKGJmX2lzYW1wZHUoYmYpKQorCQkJYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc2MsIHR4cSwgYmYsICZiZl9oZWFkLCB0eG9rKTsKKwkJZWxzZQorCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCB0eG9rLCAwKTsKKworCQlhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzYywgdHhxKTsKKworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKQorCQkJYXRoX3R4cV9zY2hlZHVsZShzYywgdHhxKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCX0KK30KKworCit2b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXUzMiBxY3VtYXNrID0gKCgxIDw8IEFUSDlLX05VTV9UWF9RVUVVRVMpIC0gMSk7CisKKwlhdGg5a19od19nZXR0eGludHJ0eHFzKHNjLT5zY19haCwgJnFjdW1hc2spOworCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkgJiYgKHFjdW1hc2sgJiAoMSA8PCBpKSkpCisJCQlhdGhfdHhfcHJvY2Vzc3Eoc2MsICZzYy0+dHgudHhxW2ldKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKi8KKy8qIEluaXQsIENsZWFudXAgKi8KKy8qKioqKioqKioqKioqKioqKi8KKworaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpCit7CisJaW50IGVycm9yID0gMDsKKworCWRvIHsKKwkJc3Bpbl9sb2NrX2luaXQoJnNjLT50eC50eGJ1ZmxvY2spOworCisJCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYsCisJCQkidHgiLCBuYnVmcywgMSk7CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzY3JpcHRvcnM6ICVkXG4iLAorCQkJCWVycm9yKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyb3IgPSBhdGhfZGVzY2RtYV9zZXR1cChzYywgJnNjLT5iZWFjb24uYmRtYSwgJnNjLT5iZWFjb24uYmJ1ZiwKKwkJCQkJICAiYmVhY29uIiwgQVRIX0JDQlVGLCAxKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBiZWFjb24gZGVzY3JpcHRvcnM6ICVkXG4iLAorCQkJCWVycm9yKTsKKwkJCWJyZWFrOworCQl9CisKKwl9IHdoaWxlICgwKTsKKworCWlmIChlcnJvciAhPSAwKQorCQlhdGhfdHhfY2xlYW51cChzYyk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBhdGhfdHhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoc2MtPmJlYWNvbi5iZG1hLmRkX2Rlc2NfbGVuICE9IDApCisJCWF0aF9kZXNjZG1hX2NsZWFudXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYpOworCisJaWYgKHNjLT50eC50eGRtYS5kZF9kZXNjX2xlbiAhPSAwKQorCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCWludCB0aWRubywgYWNubzsKKworCWZvciAodGlkbm8gPSAwLCB0aWQgPSAmYW4tPnRpZFt0aWRub107CisJICAgICB0aWRubyA8IFdNRV9OVU1fVElEOworCSAgICAgdGlkbm8rKywgdGlkKyspIHsKKwkJdGlkLT5hbiAgICAgICAgPSBhbjsKKwkJdGlkLT50aWRubyAgICAgPSB0aWRubzsKKwkJdGlkLT5zZXFfc3RhcnQgPSB0aWQtPnNlcV9uZXh0ID0gMDsKKwkJdGlkLT5iYXdfc2l6ZSAgPSBXTUVfTUFYX0JBOworCQl0aWQtPmJhd19oZWFkICA9IHRpZC0+YmF3X3RhaWwgPSAwOworCQl0aWQtPnNjaGVkICAgICA9IGZhbHNlOworCQl0aWQtPnBhdXNlZCAgICA9IGZhbHNlOworCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7CisJCUlOSVRfTElTVF9IRUFEKCZ0aWQtPmJ1Zl9xKTsKKwkJYWNubyA9IFRJRF9UT19XTUVfQUModGlkbm8pOworCQl0aWQtPmFjID0gJmFuLT5hY1thY25vXTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJdGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwl9CisKKwlmb3IgKGFjbm8gPSAwLCBhYyA9ICZhbi0+YWNbYWNub107CisJICAgICBhY25vIDwgV01FX05VTV9BQzsgYWNubysrLCBhYysrKSB7CisJCWFjLT5zY2hlZCAgICA9IGZhbHNlOworCQlJTklUX0xJU1RfSEVBRCgmYWMtPnRpZF9xKTsKKworCQlzd2l0Y2ggKGFjbm8pIHsKKwkJY2FzZSBXTUVfQUNfQkU6CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOworCQkJYnJlYWs7CisJCWNhc2UgV01FX0FDX0JLOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JLKTsKKwkJCWJyZWFrOworCQljYXNlIFdNRV9BQ19WSToKKwkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAorCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19WSSk7CisJCQlicmVhazsKKwkJY2FzZSBXTUVfQUNfVk86CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVk8pOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgYXRoX3R4X25vZGVfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWMsICphY190bXA7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsICp0aWRfdG1wOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgeworCQkJdHhxID0gJnNjLT50eC50eHFbaV07CisKKwkJCXNwaW5fbG9jaygmdHhxLT5heHFfbG9jayk7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhYywKKwkJCQkJYWNfdG1wLCAmdHhxLT5heHFfYWNxLCBsaXN0KSB7CisJCQkJdGlkID0gbGlzdF9maXJzdF9lbnRyeSgmYWMtPnRpZF9xLAorCQkJCQkJc3RydWN0IGF0aF9hdHhfdGlkLCBsaXN0KTsKKwkJCQlpZiAodGlkICYmIHRpZC0+YW4gIT0gYW4pCisJCQkJCWNvbnRpbnVlOworCQkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7CisJCQkJYWMtPnNjaGVkID0gZmFsc2U7CisKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGlkLAorCQkJCQkJdGlkX3RtcCwgJmFjLT50aWRfcSwgbGlzdCkgeworCQkJCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKKwkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOworCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7CisJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKKwkJCQl9CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDQyMjM2NzIuLjg1N2Q4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtMiw4ICsyLDggQEAKIAogICAgICBEcml2ZXIgZm9yIEF0bWVsIGF0NzZjNTAyIGF0NzZjNTA0IGFuZCBhdDc2YzUwNiB3aXJlbGVzcyBjYXJkcy4KIAotICAgICAgICBDb3B5cmlnaHQgMjAwMC0yMDAxIEFUTUVMIENvcnBvcmF0aW9uLgotICAgICAgICBDb3B5cmlnaHQgMjAwMy0yMDA0IFNpbW9uIEtlbGxleS4KKwlDb3B5cmlnaHQgMjAwMC0yMDAxIEFUTUVMIENvcnBvcmF0aW9uLgorCUNvcHlyaWdodCAyMDAzLTIwMDQgU2ltb24gS2VsbGV5LgogCiAgICAgVGhpcyBjb2RlIHdhcyBkZXZlbG9wZWQgZnJvbSB2ZXJzaW9uIDIuMS4xIG9mIHRoZSBBdG1lbCBkcml2ZXJzLAogICAgIHJlbGVhc2VkIGJ5IEF0bWVsIGNvcnAuIHVuZGVyIHRoZSBHUEwgaW4gRGVjZW1iZXIgMjAwMi4gSXQgYWxzbwpAQCAtODksMTUgKzg5LDE1IEBACiAJY29uc3QgY2hhciAqZndfZmlsZTsKIAljb25zdCBjaGFyICpmd19maWxlX2V4dDsKIH0gZndfdGFibGVbXSA9IHsKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyLCAgICAgICJhdG1lbF9hdDc2YzUwMiIsICAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyRCwgICAgICJhdG1lbF9hdDc2YzUwMmQiLCAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyRSwgICAgICJhdG1lbF9hdDc2YzUwMmUiLCAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sICJhdG1lbF9hdDc2YzUwMl8zY29tIiwgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA0LCAgICAgICJhdG1lbF9hdDc2YzUwNCIsICAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsICJhdG1lbF9hdDc2YzUwNF8yOTU4IiwgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA0QV8yOTU4LCJhdG1lbF9hdDc2YzUwNGFfMjk1OCIsImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfNTA2LCAgICAgICJhdG1lbF9hdDc2YzUwNiIsICAgICAgImJpbiIgfSwKLQl7IEFUTUVMX0ZXX1RZUEVfTk9ORSwgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEwgfQorCXsgQVRNRUxfRldfVFlQRV81MDIsCQkiYXRtZWxfYXQ3NmM1MDIiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDJELAkJImF0bWVsX2F0NzZjNTAyZCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwMkUsCQkiYXRtZWxfYXQ3NmM1MDJlIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sCSJhdG1lbF9hdDc2YzUwMl8zY29tIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA0LAkJImF0bWVsX2F0NzZjNTA0IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsCSJhdG1lbF9hdDc2YzUwNF8yOTU4IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA0QV8yOTU4LAkiYXRtZWxfYXQ3NmM1MDRhXzI5NTgiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDYsCQkiYXRtZWxfYXQ3NmM1MDYiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV9OT05FLAkJTlVMTCwJCQlOVUxMIH0KIH07CiAKICNkZWZpbmUgTUFYX1NTSURfTEVOR1RIIDMyCkBAIC0xMDYsNjAgKzEwNiw2MCBAQAogI2RlZmluZSBNQVhfQlNTX0VOVFJJRVMJNjQKIAogLyogcmVnaXN0ZXJzICovCi0jZGVmaW5lIEdDUiAgMHgwMCAgICAvLyAgICAgIChTSVIwKSAgR2VuZXJhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0jZGVmaW5lIEJTUiAgMHgwMiAgICAvLyAgICAgIChTSVIxKSAgQmFuayBTd2l0Y2hpbmcgU2VsZWN0IFJlZ2lzdGVyCisjZGVmaW5lIEdDUiAgMHgwMCAgICAvKiAoU0lSMCkgIEdlbmVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBCU1IgIDB4MDIgICAgLyogKFNJUjEpICBCYW5rIFN3aXRjaGluZyBTZWxlY3QgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVIgICAweDA0CiAjZGVmaW5lIERSICAgMHgwOAotI2RlZmluZSBNUjEgIDB4MTIgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMQotI2RlZmluZSBNUjIgIDB4MTQgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMgotI2RlZmluZSBNUjMgIDB4MTYgICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgMwotI2RlZmluZSBNUjQgIDB4MTggICAgLy8gICAgICBNaXJyb3IgUmVnaXN0ZXIgNAorI2RlZmluZSBNUjEgIDB4MTIgICAgLyogTWlycm9yIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTVIyICAweDE0ICAgIC8qIE1pcnJvciBSZWdpc3RlciAyICovCisjZGVmaW5lIE1SMyAgMHgxNiAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBNUjQgIDB4MTggICAgLyogTWlycm9yIFJlZ2lzdGVyIDQgKi8KIAogI2RlZmluZSBHUFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMKICNkZWZpbmUgR1BSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBlCiAjZGVmaW5lIEdQUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAotLy8KLS8vIENvbnN0YW50cyBmb3IgdGhlIEdDUiByZWdpc3Rlci4KLS8vCi0jZGVmaW5lIEdDUl9SRU1BUCAgICAgMHgwNDAwICAgICAgICAgIC8vIFJlbWFwIGludGVybmFsIFNSQU0gdG8gMAotI2RlZmluZSBHQ1JfU1dSRVMgICAgIDB4MDA4MCAgICAgICAgICAvLyBCSVUgcmVzZXQgKEFSTSBhbmQgUEFJIGFyZSBOT1QgcmVzZXQpCi0jZGVmaW5lIEdDUl9DT1JFUyAgICAgMHgwMDYwICAgICAgICAgIC8vIENvcmUgUmVzZXQgKEFSTSBhbmQgUEFJIGFyZSByZXNldCkKLSNkZWZpbmUgR0NSX0VOSU5UICAgICAweDAwMDIgICAgICAgICAgLy8gRW5hYmxlIEludGVycnVwdHMKLSNkZWZpbmUgR0NSX0FDS0lOVCAgICAweDAwMDggICAgICAgICAgLy8gQWNrbm93bGVkZ2UgSW50ZXJydXB0cworLyoKKyAqIENvbnN0YW50cyBmb3IgdGhlIEdDUiByZWdpc3Rlci4KKyAqLworI2RlZmluZSBHQ1JfUkVNQVAgICAgIDB4MDQwMCAgICAgICAgICAvKiBSZW1hcCBpbnRlcm5hbCBTUkFNIHRvIDAgKi8KKyNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLyogQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KSAqLworI2RlZmluZSBHQ1JfQ09SRVMgICAgIDB4MDA2MCAgICAgICAgICAvKiBDb3JlIFJlc2V0IChBUk0gYW5kIFBBSSBhcmUgcmVzZXQpICovCisjZGVmaW5lIEdDUl9FTklOVCAgICAgMHgwMDAyICAgICAgICAgIC8qIEVuYWJsZSBJbnRlcnJ1cHRzICovCisjZGVmaW5lIEdDUl9BQ0tJTlQgICAgMHgwMDA4ICAgICAgICAgIC8qIEFja25vd2xlZGdlIEludGVycnVwdHMgKi8KIAotI2RlZmluZSBCU1NfU1JBTSAgICAgIDB4MDIwMCAgICAgICAgICAvLyBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IFNSQU0KLSNkZWZpbmUgQlNTX0lSQU0gICAgICAweDAxMDAgICAgICAgICAgLy8gQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBJUkFNCi0vLwotLy8gQ29uc3RhbnRzIGZvciB0aGUgTVIgcmVnaXN0ZXJzLgotLy8KLSNkZWZpbmUgTUFDX0lOSVRfQ09NUExFVEUgICAgICAgMHgwMDAxICAgICAgICAvLyBNQUMgaW5pdCBoYXMgYmVlbiBjb21wbGV0ZWQKLSNkZWZpbmUgTUFDX0JPT1RfQ09NUExFVEUgICAgICAgMHgwMDEwICAgICAgICAvLyBNQUMgYm9vdCBoYXMgYmVlbiBjb21wbGV0ZWQKLSNkZWZpbmUgTUFDX0lOSVRfT0sgICAgICAgICAgICAgMHgwMDAyICAgICAgICAvLyBNQUMgYm9vdCBoYXMgYmVlbiBjb21wbGV0ZWQKKyNkZWZpbmUgQlNTX1NSQU0gICAgICAweDAyMDAgICAgICAgICAgLyogQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBTUkFNICovCisjZGVmaW5lIEJTU19JUkFNICAgICAgMHgwMTAwICAgICAgICAgIC8qIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gSVJBTSAqLworLyoKKyAqQ29uc3RhbnRzIGZvciB0aGUgTVIgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIE1BQ19JTklUX0NPTVBMRVRFICAgICAgIDB4MDAwMSAgICAgICAgLyogTUFDIGluaXQgaGFzIGJlZW4gY29tcGxldGVkICovCisjZGVmaW5lIE1BQ19CT09UX0NPTVBMRVRFICAgICAgIDB4MDAxMCAgICAgICAgLyogTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkICovCisjZGVmaW5lIE1BQ19JTklUX09LICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgLyogTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkICovCiAKICNkZWZpbmUgTUlCX01BWF9EQVRBX0JZVEVTICAgIDIxMgogI2RlZmluZSBNSUJfSEVBREVSX1NJWkUgICAgICAgNCAgICAvKiBmaXJzdCBmb3VyIGZpZWxkcyAqLwogCiBzdHJ1Y3QgZ2V0X3NldF9taWIgewotICAgICAgICB1OCB0eXBlOwotICAgICAgICB1OCBzaXplOwotICAgICAgICB1OCBpbmRleDsKLSAgICAgICAgdTggcmVzZXJ2ZWQ7Ci0gICAgICAgIHU4IGRhdGFbTUlCX01BWF9EQVRBX0JZVEVTXTsKKwl1OCB0eXBlOworCXU4IHNpemU7CisJdTggaW5kZXg7CisJdTggcmVzZXJ2ZWQ7CisJdTggZGF0YVtNSUJfTUFYX0RBVEFfQllURVNdOwogfTsKIAogc3RydWN0IHJ4X2Rlc2MgewotICAgICAgICB1MzIgICAgICAgICAgTmV4dDsKLSAgICAgICAgdTE2ICAgICAgICAgIE1zZHVQb3M7Ci0gICAgICAgIHUxNiAgICAgICAgICBNc2R1U2l6ZTsKKwl1MzIgICAgICAgICAgTmV4dDsKKwl1MTYgICAgICAgICAgTXNkdVBvczsKKwl1MTYgICAgICAgICAgTXNkdVNpemU7CiAKLSAgICAgICAgdTggICAgICAgICAgIFN0YXRlOwotICAgICAgICB1OCAgICAgICAgICAgU3RhdHVzOwotICAgICAgICB1OCAgICAgICAgICAgUmF0ZTsKLSAgICAgICAgdTggICAgICAgICAgIFJzc2k7Ci0gICAgICAgIHU4ICAgICAgICAgICBMaW5rUXVhbGl0eTsKLSAgICAgICAgdTggICAgICAgICAgIFByZWFtYmxlVHlwZTsKLSAgICAgICAgdTE2ICAgICAgICAgIER1cmF0aW9uOwotICAgICAgICB1MzIgICAgICAgICAgUnhUaW1lOworCXU4ICAgICAgICAgICBTdGF0ZTsKKwl1OCAgICAgICAgICAgU3RhdHVzOworCXU4ICAgICAgICAgICBSYXRlOworCXU4ICAgICAgICAgICBSc3NpOworCXU4ICAgICAgICAgICBMaW5rUXVhbGl0eTsKKwl1OCAgICAgICAgICAgUHJlYW1ibGVUeXBlOworCXUxNiAgICAgICAgICBEdXJhdGlvbjsKKwl1MzIgICAgICAgICAgUnhUaW1lOwogfTsKIAogI2RlZmluZSBSWF9ERVNDX0ZMQUdfVkFMSUQgICAgICAgMHg4MApAQCAtMTkyLDcgKzE5Miw3IEBACiAJdTggICAgICAgIEtleUluZGV4OwogCXU4ICAgICAgICBDaGlwZXJUeXBlOwogCXU4ICAgICAgICBDaGlwcmVMZW5ndGg7Ci0gICAgICAgIHU4ICAgICAgICBSZXNlcnZlZDE7CisJdTggICAgICAgIFJlc2VydmVkMTsKIAogCXU4ICAgICAgICBSZXNlcnZlZDsKIAl1OCAgICAgICAgUGFja2V0VHlwZTsKQEAgLTIxMiw5ICsyMTIsOSBAQAogI2RlZmluZSBUWF9ERVNDX1BBQ0tFVF9UWVBFX09GRlNFVCAgIDE3CiAjZGVmaW5lIFRYX0RFU0NfSE9TVF9MRU5HVEhfT0ZGU0VUICAgMTgKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gSG9zdC1NQUMgaW50ZXJmYWNlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICogSG9zdC1NQUMgaW50ZXJmYWNlCisgKi8KIAogI2RlZmluZSBUWF9TVEFUVVNfU1VDQ0VTUyAgICAgICAweDAwCiAKQEAgLTIyNiwxNCArMjI2LDE0IEBACiAjZGVmaW5lIFRYX1BBQ0tFVF9UWVBFX0RBVEEgICAgIDB4MDEKICNkZWZpbmUgVFhfUEFDS0VUX1RZUEVfTUdNVCAgICAgMHgwMgogCi0jZGVmaW5lIElTUl9FTVBUWSAgICAgICAgICAgICAgIDB4MDAgICAgICAgIC8vIG5vIGJpdHMgc2V0IGluIElTUgotI2RlZmluZSBJU1JfVHhDT01QTEVURSAgICAgICAgICAweDAxICAgICAgICAvLyBwYWNrZXQgdHJhbnNtaXR0ZWQKLSNkZWZpbmUgSVNSX1J4Q09NUExFVEUgICAgICAgICAgMHgwMiAgICAgICAgLy8gcGFja2V0IHJlY2VpdmVkCi0jZGVmaW5lIElTUl9SeEZSQU1FTE9TVCAgICAgICAgIDB4MDQgICAgICAgIC8vIFJ4IEZyYW1lIGxvc3QKLSNkZWZpbmUgSVNSX0ZBVEFMX0VSUk9SICAgICAgICAgMHgwOCAgICAgICAgLy8gRmF0YWwgZXJyb3IKLSNkZWZpbmUgSVNSX0NPTU1BTkRfQ09NUExFVEUgICAgMHgxMCAgICAgICAgLy8gY29tbWFuZCBjb21wbGV0ZWQKLSNkZWZpbmUgSVNSX09VVF9PRl9SQU5HRSAgICAgICAgMHgyMCAgICAgICAgLy8gY29tbWFuZCBjb21wbGV0ZWQKLSNkZWZpbmUgSVNSX0lCU1NfTUVSR0UgICAgICAgICAgMHg0MCAgICAgICAgLy8gKDQuMS4yLjMwKTogSUJTUyBtZXJnZQorI2RlZmluZSBJU1JfRU1QVFkgICAgICAgICAgICAgICAweDAwICAgICAgICAvKiBubyBiaXRzIHNldCBpbiBJU1IgKi8KKyNkZWZpbmUgSVNSX1R4Q09NUExFVEUgICAgICAgICAgMHgwMSAgICAgICAgLyogcGFja2V0IHRyYW5zbWl0dGVkICovCisjZGVmaW5lIElTUl9SeENPTVBMRVRFICAgICAgICAgIDB4MDIgICAgICAgIC8qIHBhY2tldCByZWNlaXZlZCAqLworI2RlZmluZSBJU1JfUnhGUkFNRUxPU1QgICAgICAgICAweDA0ICAgICAgICAvKiBSeCBGcmFtZSBsb3N0ICovCisjZGVmaW5lIElTUl9GQVRBTF9FUlJPUiAgICAgICAgIDB4MDggICAgICAgIC8qIEZhdGFsIGVycm9yICovCisjZGVmaW5lIElTUl9DT01NQU5EX0NPTVBMRVRFICAgIDB4MTAgICAgICAgIC8qIGNvbW1hbmQgY29tcGxldGVkICovCisjZGVmaW5lIElTUl9PVVRfT0ZfUkFOR0UgICAgICAgIDB4MjAgICAgICAgIC8qIGNvbW1hbmQgY29tcGxldGVkICovCisjZGVmaW5lIElTUl9JQlNTX01FUkdFICAgICAgICAgIDB4NDAgICAgICAgIC8qICg0LjEuMi4zMCk6IElCU1MgbWVyZ2UgKi8KICNkZWZpbmUgSVNSX0dFTkVSSUNfSVJRICAgICAgICAgMHg4MAogCiAjZGVmaW5lIExvY2FsX01pYl9UeXBlICAgICAgICAgIDB4MDEKQEAgLTMxMSwyMiArMzExLDIyIEBACiAjZGVmaW5lIE1BWF9FTkNSWVBUSU9OX0tFWVMgNAogI2RlZmluZSBNQVhfRU5DUllQVElPTl9LRVlfU0laRSA0MAogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIDgwMi4xMSByZWxhdGVkIGRlZmluaXRpb25zCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qCisgKiA4MDIuMTEgcmVsYXRlZCBkZWZpbml0aW9ucworICovCiAKLS8vCi0vLyBSZWd1bGF0b3J5IERvbWFpbnMKLS8vCisvKgorICogUmVndWxhdG9yeSBEb21haW5zCisgKi8KIAotI2RlZmluZSBSRUdfRE9NQUlOX0ZDQwkJMHgxMAkvL0NoYW5uZWxzCTEtMTEJVVNBCi0jZGVmaW5lIFJFR19ET01BSU5fRE9DCQkweDIwCS8vQ2hhbm5lbAkxLTExCUNhbmFkYQotI2RlZmluZSBSRUdfRE9NQUlOX0VUU0kJCTB4MzAJLy9DaGFubmVsCTEtMTMJRXVyb3BlIChleCBTcGFpbi9GcmFuY2UpCi0jZGVmaW5lIFJFR19ET01BSU5fU1BBSU4JMHgzMQkvL0NoYW5uZWwJMTAtMTEJU3BhaW4KLSNkZWZpbmUgUkVHX0RPTUFJTl9GUkFOQ0UJMHgzMgkvL0NoYW5uZWwJMTAtMTMJRnJhbmNlCi0jZGVmaW5lIFJFR19ET01BSU5fTUtLCQkweDQwCS8vQ2hhbm5lbAkxNAlKYXBhbgotI2RlZmluZSBSRUdfRE9NQUlOX01LSzEJCTB4NDEJLy9DaGFubmVsCTEtMTQJSmFwYW4oTUtLMSkKLSNkZWZpbmUgUkVHX0RPTUFJTl9JU1JBRUwJMHg1MAkvL0NoYW5uZWwJMy05CUlTUkFFTAorI2RlZmluZSBSRUdfRE9NQUlOX0ZDQwkJMHgxMAkvKiBDaGFubmVscwkxLTExCVVTQQkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0RPQwkJMHgyMAkvKiBDaGFubmVsCTEtMTEJQ2FuYWRhCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fRVRTSQkJMHgzMAkvKiBDaGFubmVsCTEtMTMJRXVyb3BlIChleCBTcGFpbi9GcmFuY2UpCSovCisjZGVmaW5lIFJFR19ET01BSU5fU1BBSU4JMHgzMQkvKiBDaGFubmVsCTEwLTExCVNwYWluCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fRlJBTkNFCTB4MzIJLyogQ2hhbm5lbAkxMC0xMwlGcmFuY2UJCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9NS0sJCTB4NDAJLyogQ2hhbm5lbAkxNAlKYXBhbgkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX01LSzEJCTB4NDEJLyogQ2hhbm5lbAkxLTE0CUphcGFuKE1LSzEpCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9JU1JBRUwJMHg1MAkvKiBDaGFubmVsCTMtOQlJU1JBRUwJCQkJKi8KIAogI2RlZmluZSBCU1NfVFlQRV9BRF9IT0MJCTEKICNkZWZpbmUgQlNTX1RZUEVfSU5GUkFTVFJVQ1RVUkUgMgpAQCAtMzY0LDEzICszNjQsMTMgQEAKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX0NDWCAgICAgIDQKICNkZWZpbmUgQ0lQSEVSX1NVSVRFX1dFUF8xMjggIDUKIAotLy8KLS8vIElGQUNFIE1BQ1JPUyAmIGRlZmluaXRpb25zCi0vLwotLy8KKy8qCisgKiBJRkFDRSBNQUNST1MgJiBkZWZpbml0aW9ucworICovCiAKLS8vIEZ1bmNDdHJsIGZpZWxkOgotLy8KKy8qCisgKiBGdW5jQ3RybCBmaWVsZDoKKyAqLwogI2RlZmluZSBGVU5DX0NUUkxfVHhFTkFCTEUJCTB4MTAKICNkZWZpbmUgRlVOQ19DVFJMX1J4RU5BQkxFCQkweDIwCiAjZGVmaW5lIEZVTkNfQ1RSTF9JTklUX0NPTVBMRVRFCQkweDAxCkBAIC0zNzgsNDggKzM3OCw0OCBAQAogLyogQSBzdHViIGZpcm13YXJlIGltYWdlIHdoaWNoIHJlYWRzIHRoZSBNQUMgYWRkcmVzcyBmcm9tIE5WUkFNIG9uIHRoZSBjYXJkLgogICAgRm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbiBhbmQgc291cmNlIHNlZSB0aGUgZW5kIG9mIHRoaXMgZmlsZS4gKi8KIHN0YXRpYyB1OCBtYWNfcmVhZGVyW10gPSB7Ci0JMHgwNiwweDAwLDB4MDAsMHhlYSwweDA0LDB4MDAsMHgwMCwweGVhLDB4MDMsMHgwMCwweDAwLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHhlYSwKLQkweDAxLDB4MDAsMHgwMCwweGVhLDB4MDAsMHgwMCwweDAwLDB4ZWEsMHhmZiwweGZmLDB4ZmYsMHhlYSwweGZlLDB4ZmYsMHhmZiwweGVhLAotCTB4ZDMsMHgwMCwweGEwLDB4ZTMsMHgwMCwweGYwLDB4MjEsMHhlMSwweDBlLDB4MDQsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsCi0JMHg4MSwweDExLDB4YTAsMHhlMSwweDAwLDB4MTAsMHg4MSwweGUzLDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgxYywweDEwLDB4OTAsMHhlNSwKLQkweDEwLDB4MTAsMHhjMSwweGUzLDB4MWMsMHgxMCwweDgwLDB4ZTUsMHgwMSwweDEwLDB4YTAsMHhlMywweDA4LDB4MTAsMHg4MCwweGU1LAotCTB4MDIsMHgwMywweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywweGIwLDB4MTAsMHhjMCwweGUxLDB4YjQsMHgxMCwweGMwLDB4ZTEsCi0JMHhiOCwweDEwLDB4YzAsMHhlMSwweGJjLDB4MTAsMHhjMCwweGUxLDB4NTYsMHhkYywweGEwLDB4ZTMsMHgyMSwweDAwLDB4MDAsMHhlYiwKLQkweDBhLDB4MDAsMHhhMCwweGUzLDB4MWEsMHgwMCwweDAwLDB4ZWIsMHgxMCwweDAwLDB4MDAsMHhlYiwweDA3LDB4MDAsMHgwMCwweGViLAotCTB4MDIsMHgwMywweGEwLDB4ZTMsMHgwMiwweDE0LDB4YTAsMHhlMywweGI0LDB4MTAsMHhjMCwweGUxLDB4NGMsMHgxMCwweDlmLDB4ZTUsCi0JMHhiYywweDEwLDB4YzAsMHhlMSwweDEwLDB4MTAsMHhhMCwweGUzLDB4YjgsMHgxMCwweGMwLDB4ZTEsMHhmZSwweGZmLDB4ZmYsMHhlYSwKLQkweDAwLDB4NDAsMHgyZCwweGU5LDB4MDAsMHgyMCwweGEwLDB4ZTMsMHgwMiwweDNjLDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLAotCTB4MjgsMHgwMCwweDlmLDB4ZTUsMHgzNywweDAwLDB4MDAsMHhlYiwweDAwLDB4NDAsMHhiZCwweGU4LDB4MWUsMHhmZiwweDJmLDB4ZTEsCi0JMHgwMCwweDQwLDB4MmQsMHhlOSwweDEyLDB4MmUsMHhhMCwweGUzLDB4MDYsMHgzMCwweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywKLQkweDAyLDB4MDQsMHhhMCwweGUzLDB4MmYsMHgwMCwweDAwLDB4ZWIsMHgwMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLAotCTB4MDAsMHgwMiwweDAwLDB4MDIsMHg4MCwweDAxLDB4OTAsMHhlMCwweDAxLDB4MDAsMHgwMCwweDBhLDB4MDEsMHgwMCwweDUwLDB4ZTIsCi0JMHhmYywweGZmLDB4ZmYsMHhlYSwweDFlLDB4ZmYsMHgyZiwweGUxLDB4ODAsMHgxMCwweGEwLDB4ZTMsMHhmMywweDA2LDB4YTAsMHhlMywKLQkweDAwLDB4MTAsMHg4MCwweGU1LDB4MDAsMHgxMCwweGEwLDB4ZTMsMHgwMCwweDEwLDB4ODAsMHhlNSwweDAxLDB4MTAsMHhhMCwweGUzLAotCTB4MDQsMHgxMCwweDgwLDB4ZTUsMHgwMCwweDEwLDB4ODAsMHhlNSwweDBlLDB4MzQsMHhhMCwweGUzLDB4MWMsMHgxMCwweDkzLDB4ZTUsCi0JMHgwMiwweDFhLDB4ODEsMHhlMywweDFjLDB4MTAsMHg4MywweGU1LDB4NTgsMHgxMSwweDlmLDB4ZTUsMHgzMCwweDEwLDB4ODAsMHhlNSwKLQkweDU0LDB4MTEsMHg5ZiwweGU1LDB4MzQsMHgxMCwweDgwLDB4ZTUsMHgzOCwweDEwLDB4ODAsMHhlNSwweDNjLDB4MTAsMHg4MCwweGU1LAotCTB4MTAsMHgxMCwweDkwLDB4ZTUsMHgwOCwweDAwLDB4OTAsMHhlNSwweDFlLDB4ZmYsMHgyZiwweGUxLDB4ZjMsMHgxNiwweGEwLDB4ZTMsCi0JMHgwOCwweDAwLDB4OTEsMHhlNSwweDA1LDB4MDAsMHhhMCwweGUzLDB4MGMsMHgwMCwweDgxLDB4ZTUsMHgxMCwweDAwLDB4OTEsMHhlNSwKLQkweDAyLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHhmZiwweDAwLDB4YTAsMHhlMywweDBjLDB4MDAsMHg4MSwweGU1LAotCTB4MTAsMHgwMCwweDkxLDB4ZTUsMHgwMiwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHgwMCwweDkxLDB4ZTUsCi0JMHgxMCwweDAwLDB4OTEsMHhlNSwweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDAwLDB4OTEsMHhlNSwKLQkweGZmLDB4MDAsMHgwMCwweGUyLDB4MWUsMHhmZiwweDJmLDB4ZTEsMHgzMCwweDQwLDB4MmQsMHhlOSwweDAwLDB4NTAsMHhhMCwweGUxLAotCTB4MDMsMHg0MCwweGEwLDB4ZTEsMHhhMiwweDAyLDB4YTAsMHhlMSwweDA4LDB4MDAsMHgwMCwweGUyLDB4MDMsMHgwMCwweDgwLDB4ZTIsCi0JMHhkOCwweDEwLDB4OWYsMHhlNSwweDAwLDB4MDAsMHhjMSwweGU1LDB4MDEsMHgyMCwweGMxLDB4ZTUsMHhlMiwweGZmLDB4ZmYsMHhlYiwKLQkweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MWEsMHgxNCwweDAwLDB4YTAsMHhlMywweGM0LDB4ZmYsMHhmZiwweGViLAotCTB4MDQsMHgyMCwweGEwLDB4ZTEsMHgwNSwweDEwLDB4YTAsMHhlMSwweDAyLDB4MDAsMHhhMCwweGUzLDB4MDEsMHgwMCwweDAwLDB4ZWIsCi0JMHgzMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLDB4NzAsMHg0MCwweDJkLDB4ZTksMHhmMywweDQ2LDB4YTAsMHhlMywKLQkweDAwLDB4MzAsMHhhMCwweGUzLDB4MDAsMHgwMCwweDUwLDB4ZTMsMHgwOCwweDAwLDB4MDAsMHg5YSwweDhjLDB4NTAsMHg5ZiwweGU1LAotCTB4MDMsMHg2MCwweGQ1LDB4ZTcsMHgwYywweDYwLDB4ODQsMHhlNSwweDEwLDB4NjAsMHg5NCwweGU1LDB4MDIsMHgwMCwweDE2LDB4ZTMsCi0JMHhmYywweGZmLDB4ZmYsMHgwYSwweDAxLDB4MzAsMHg4MywweGUyLDB4MDAsMHgwMCwweDUzLDB4ZTEsMHhmNywweGZmLDB4ZmYsMHgzYSwKLQkweGZmLDB4MzAsMHhhMCwweGUzLDB4MGMsMHgzMCwweDg0LDB4ZTUsMHgwOCwweDAwLDB4OTQsMHhlNSwweDEwLDB4MDAsMHg5NCwweGU1LAotCTB4MDEsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4MDAsMHg5NCwweGU1LDB4MDAsMHgwMCwweGEwLDB4ZTMsCi0JMHgwMCwweDAwLDB4NTIsMHhlMywweDBiLDB4MDAsMHgwMCwweDlhLDB4MTAsMHg1MCwweDk0LDB4ZTUsMHgwMiwweDAwLDB4MTUsMHhlMywKLQkweGZjLDB4ZmYsMHhmZiwweDBhLDB4MGMsMHgzMCwweDg0LDB4ZTUsMHgxMCwweDUwLDB4OTQsMHhlNSwweDAxLDB4MDAsMHgxNSwweGUzLAotCTB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDUwLDB4OTQsMHhlNSwweDAxLDB4NTAsMHhjMSwweGU0LDB4MDEsMHgwMCwweDgwLDB4ZTIsCi0JMHgwMiwweDAwLDB4NTAsMHhlMSwweGYzLDB4ZmYsMHhmZiwweDNhLDB4YzgsMHgwMCwweGEwLDB4ZTMsMHg5OCwweGZmLDB4ZmYsMHhlYiwKLQkweDcwLDB4NDAsMHhiZCwweGU4LDB4MWUsMHhmZiwweDJmLDB4ZTEsMHgwMSwweDBjLDB4MDAsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAyLAotCTB4MDAsMHgwMSwweDAwLDB4MDIKKwkweDA2LCAweDAwLCAweDAwLCAweGVhLCAweDA0LCAweDAwLCAweDAwLCAweGVhLCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDAwLCAweGVhLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisJMHhkMywgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgwZSwgMHgwNCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDgxLCAweDExLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgxLCAweGUzLCAweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDFjLCAweDEwLCAweDkwLCAweGU1LAorCTB4MTAsIDB4MTAsIDB4YzEsIDB4ZTMsIDB4MWMsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDgsIDB4MTAsIDB4ODAsIDB4ZTUsCisJMHgwMiwgMHgwMywgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHhiMCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhiNCwgMHgxMCwgMHhjMCwgMHhlMSwKKwkweGI4LCAweDEwLCAweGMwLCAweGUxLCAweGJjLCAweDEwLCAweGMwLCAweGUxLCAweDU2LCAweGRjLCAweGEwLCAweGUzLCAweDIxLCAweDAwLCAweDAwLCAweGViLAorCTB4MGEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHgwMiwgMHgwMywgMHhhMCwgMHhlMywgMHgwMiwgMHgxNCwgMHhhMCwgMHhlMywgMHhiNCwgMHgxMCwgMHhjMCwgMHhlMSwgMHg0YywgMHgxMCwgMHg5ZiwgMHhlNSwKKwkweGJjLCAweDEwLCAweGMwLCAweGUxLCAweDEwLCAweDEwLCAweGEwLCAweGUzLCAweGI4LCAweDEwLCAweGMwLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorCTB4MDAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MDAsIDB4MjAsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4M2MsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHgyOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgzNywgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKKwkweDAwLCAweDQwLCAweDJkLCAweGU5LCAweDEyLCAweDJlLCAweGEwLCAweGUzLCAweDA2LCAweDMwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorCTB4MDIsIDB4MDQsIDB4YTAsIDB4ZTMsIDB4MmYsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMSwgMHg5MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHgwMCwgMHg1MCwgMHhlMiwKKwkweGZjLCAweGZmLCAweGZmLCAweGVhLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweDEwLCAweGEwLCAweGUzLCAweGYzLCAweDA2LCAweGEwLCAweGUzLAorCTB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHgwNCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwZSwgMHgzNCwgMHhhMCwgMHhlMywgMHgxYywgMHgxMCwgMHg5MywgMHhlNSwKKwkweDAyLCAweDFhLCAweDgxLCAweGUzLCAweDFjLCAweDEwLCAweDgzLCAweGU1LCAweDU4LCAweDExLCAweDlmLCAweGU1LCAweDMwLCAweDEwLCAweDgwLCAweGU1LAorCTB4NTQsIDB4MTEsIDB4OWYsIDB4ZTUsIDB4MzQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MzgsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4M2MsIDB4MTAsIDB4ODAsIDB4ZTUsCisJMHgxMCwgMHgxMCwgMHg5MCwgMHhlNSwgMHgwOCwgMHgwMCwgMHg5MCwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmMywgMHgxNiwgMHhhMCwgMHhlMywKKwkweDA4LCAweDAwLCAweDkxLCAweGU1LCAweDA1LCAweDAwLCAweGEwLCAweGUzLCAweDBjLCAweDAwLCAweDgxLCAweGU1LCAweDEwLCAweDAwLCAweDkxLCAweGU1LAorCTB4MDIsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4ZmYsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MDAsIDB4ODEsIDB4ZTUsCisJMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweDEwLCAweDAwLCAweDkxLCAweGU1LCAweDAxLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDA4LCAweDAwLCAweDkxLCAweGU1LAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzAsIDB4NDAsIDB4MmQsIDB4ZTksIDB4MDAsIDB4NTAsIDB4YTAsIDB4ZTEsCisJMHgwMywgMHg0MCwgMHhhMCwgMHhlMSwgMHhhMiwgMHgwMiwgMHhhMCwgMHhlMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMywgMHgwMCwgMHg4MCwgMHhlMiwKKwkweGQ4LCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweGMxLCAweGU1LCAweDAxLCAweDIwLCAweGMxLCAweGU1LCAweGUyLCAweGZmLCAweGZmLCAweGViLAorCTB4MDEsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MTQsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4YzQsIDB4ZmYsIDB4ZmYsIDB4ZWIsCisJMHgwNCwgMHgyMCwgMHhhMCwgMHhlMSwgMHgwNSwgMHgxMCwgMHhhMCwgMHhlMSwgMHgwMiwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweDMwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDcwLCAweDQwLCAweDJkLCAweGU5LCAweGYzLCAweDQ2LCAweGEwLCAweGUzLAorCTB4MDAsIDB4MzAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OWEsIDB4OGMsIDB4NTAsIDB4OWYsIDB4ZTUsCisJMHgwMywgMHg2MCwgMHhkNSwgMHhlNywgMHgwYywgMHg2MCwgMHg4NCwgMHhlNSwgMHgxMCwgMHg2MCwgMHg5NCwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNiwgMHhlMywKKwkweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDAxLCAweDMwLCAweDgzLCAweGUyLCAweDAwLCAweDAwLCAweDUzLCAweGUxLCAweGY3LCAweGZmLCAweGZmLCAweDNhLAorCTB4ZmYsIDB4MzAsIDB4YTAsIDB4ZTMsIDB4MGMsIDB4MzAsIDB4ODQsIDB4ZTUsIDB4MDgsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MTAsIDB4MDAsIDB4OTQsIDB4ZTUsCisJMHgwMSwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5NCwgMHhlNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywKKwkweDAwLCAweDAwLCAweDUyLCAweGUzLCAweDBiLCAweDAwLCAweDAwLCAweDlhLCAweDEwLCAweDUwLCAweDk0LCAweGU1LCAweDAyLCAweDAwLCAweDE1LCAweGUzLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MGMsIDB4MzAsIDB4ODQsIDB4ZTUsIDB4MTAsIDB4NTAsIDB4OTQsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MTUsIDB4ZTMsCisJMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHg1MCwgMHg5NCwgMHhlNSwgMHgwMSwgMHg1MCwgMHhjMSwgMHhlNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwKKwkweDAyLCAweDAwLCAweDUwLCAweGUxLCAweGYzLCAweGZmLCAweGZmLCAweDNhLCAweGM4LCAweDAwLCAweGEwLCAweGUzLCAweDk4LCAweGZmLCAweGZmLCAweGViLAorCTB4NzAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMgogfTsKIAogc3RydWN0IGF0bWVsX3ByaXZhdGUgewpAQCAtNDMzLDcgKzQzMyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2OwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKLQlzcGlubG9ja190IGlycWxvY2ssIHRpbWVybG9jazsJLy8gc3BpbmxvY2tzCisJc3BpbmxvY2tfdCBpcnFsb2NrLCB0aW1lcmxvY2s7CS8qIHNwaW5sb2NrcyAqLwogCWVudW0geyBCVVNfVFlQRV9QQ0NBUkQsIEJVU19UWVBFX1BDSSB9IGJ1c190eXBlOwogCWVudW0gewogCQlDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0gsCkBAIC01NDEsNyArNTQxLDcgQEAKIAl1OCByeF9idWZbTUFYX1dJUkVMRVNTX0JPRFldOwogfTsKIAotc3RhdGljIHU4IGF0bWVsX2Jhc2ljX3JhdGVzWzRdID0gezB4ODIsMHg4NCwweDBiLDB4MTZ9Oworc3RhdGljIHU4IGF0bWVsX2Jhc2ljX3JhdGVzWzRdID0gezB4ODIsIDB4ODQsIDB4MGIsIDB4MTZ9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAlpbnQgcmVnX2RvbWFpbjsKQEAgLTEyODMsMTcgKzEyODMsMTcgQEAKIAogc3RhdGljIGludCBhdG1lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewotICAgICAgICBpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAyMzEyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgZGV2LT5tdHUgPSBuZXdfbXR1OwotICAgICAgICByZXR1cm4gMDsKKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAyMzEyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0bWVsX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAKLSAgICAgICAgbWVtY3B5IChkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkgKGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCXJldHVybiBhdG1lbF9vcGVuKGRldik7CiB9CiAKQEAgLTE0MjAsMTAgKzE0MjAsMTcgQEAKIAkJCQkgICAgIHByaXYtPmZpcm13YXJlX2lkKTsKIAogCQlzd2l0Y2ggKHByaXYtPmNhcmRfdHlwZSkgewotCQljYXNlIENBUkRfVFlQRV9QQVJBTExFTF9GTEFTSDogYyA9ICJQYXJhbGxlbCBmbGFzaCI7IGJyZWFrOwotCQljYXNlIENBUkRfVFlQRV9TUElfRkxBU0g6IGMgPSAiU1BJIGZsYXNoXG4iOyBicmVhazsKLQkJY2FzZSBDQVJEX1RZUEVfRUVQUk9NOiBjID0gIkVFUFJPTSI7IGJyZWFrOwotCQlkZWZhdWx0OiBjID0gIjx1bmtub3duPiI7CisJCWNhc2UgQ0FSRF9UWVBFX1BBUkFMTEVMX0ZMQVNIOgorCQkJYyA9ICJQYXJhbGxlbCBmbGFzaCI7CisJCQlicmVhazsKKwkJY2FzZSBDQVJEX1RZUEVfU1BJX0ZMQVNIOgorCQkJYyA9ICJTUEkgZmxhc2hcbiI7CisJCQlicmVhazsKKwkJY2FzZSBDQVJEX1RZUEVfRUVQUk9NOgorCQkJYyA9ICJFRVBST00iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljID0gIjx1bmtub3duPiI7CiAJCX0KIAogCQlyID0gIjx1bmtub3duPiI7CkBAIC0xNDM5LDE2ICsxNDQ2LDMzIEBACiAJCQkgICAgIHByaXYtPnVzZV93cGEgPyAiWWVzIiA6ICJObyIpOwogCX0KIAotCXN3aXRjaChwcml2LT5zdGF0aW9uX3N0YXRlKSB7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1NDQU5OSU5HOiBzID0gIlNjYW5uaW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HOiBzID0gIkpvaW5pbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfQVVUSEVOVElDQVRJTkc6IHMgPSAiQXV0aGVudGljYXRpbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfQVNTT0NJQVRJTkc6IHMgPSAiQXNzb2NpYXRpbmciOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfUkVBRFk6IHMgPSAiUmVhZHkiOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfUkVBU1NPQ0lBVElORzogcyA9ICJSZWFzc29jaWF0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1I6IHMgPSAiTWFuYWdlbWVudCBlcnJvciI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9ET1dOOiBzID0gIkRvd24iOyBicmVhazsKLQlkZWZhdWx0OiBzID0gIjx1bmtub3duPiI7CisJc3dpdGNoIChwcml2LT5zdGF0aW9uX3N0YXRlKSB7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1NDQU5OSU5HOgorCQlzID0gIlNjYW5uaW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0pPSU5OSU5HOgorCQlzID0gIkpvaW5pbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfQVVUSEVOVElDQVRJTkc6CisJCXMgPSAiQXV0aGVudGljYXRpbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfQVNTT0NJQVRJTkc6CisJCXMgPSAiQXNzb2NpYXRpbmciOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfUkVBRFk6CisJCXMgPSAiUmVhZHkiOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfUkVBU1NPQ0lBVElORzoKKwkJcyA9ICJSZWFzc29jaWF0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX01HTVRfRVJST1I6CisJCXMgPSAiTWFuYWdlbWVudCBlcnJvciI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9ET1dOOgorCQlzID0gIkRvd24iOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzID0gIjx1bmtub3duPiI7CiAJfQogCiAJcCArPSBzcHJpbnRmKHAsICJDdXJyZW50IHN0YXRlOlx0XHQlc1xuIiwgcyk7CkBAIC0xNDU4LDE2ICsxNDgyLDMwIEBACiBzdGF0aWMgaW50IGF0bWVsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCSAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0gICAgICAgIHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IGRhdGE7CiAJaW50IGxlbiA9IGF0bWVsX3Byb2Nfb3V0cHV0IChwYWdlLCBwcml2KTsKLSAgICAgICAgaWYgKGxlbiA8PSBvZmYrY291bnQpICplb2YgPSAxOwotICAgICAgICAqc3RhcnQgPSBwYWdlICsgb2ZmOwotICAgICAgICBsZW4gLT0gb2ZmOwotICAgICAgICBpZiAobGVuPmNvdW50KSBsZW4gPSBjb3VudDsKLSAgICAgICAgaWYgKGxlbjwwKSBsZW4gPSAwOwotICAgICAgICByZXR1cm4gbGVuOworCWlmIChsZW4gPD0gb2ZmK2NvdW50KQorCQkqZW9mID0gMTsKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCWxlbiAtPSBvZmY7CisJaWYgKGxlbiA+IGNvdW50KQorCQlsZW4gPSBjb3VudDsKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gMDsKKwlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF0bWVsX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBhdG1lbF9vcGVuLAorCS5uZG9fc3RvcAkJPSBhdG1lbF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgCT0gYXRtZWxfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBhdG1lbF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zdGFydF94bWl0IAk9IHN0YXJ0X3R4LAorCS5uZG9fZG9faW9jdGwgCQk9IGF0bWVsX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0cnVjdCBuZXRfZGV2aWNlICppbml0X2F0bWVsX2NhcmQodW5zaWduZWQgc2hvcnQgaXJxLCB1bnNpZ25lZCBsb25nIHBvcnQsCiAJCQkJICAgY29uc3QgQXRtZWxGV1R5cGUgZndfdHlwZSwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2LApAQCAtMTQ3OSwxMSArMTUxNywxMSBAQAogCWludCByYzsKIAogCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2Ugb2JqZWN0LiAqLwotICAgICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnByaXYpKTsKLSAgICAgICAgaWYgKCFkZXYpIHsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnByaXYpKTsKKwlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsOiBDb3VsZG4ndCBhbGxvY19ldGhlcmRldlxuIik7CiAJCXJldHVybiBOVUxMOwotICAgICAgICB9CisJfQogCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRtZWw6IENvdWxkbid0IGdldCBuYW1lIVxuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlOwpAQCAtMTU1MiwxMyArMTU5MCw4IEBACiAJcHJpdi0+bWFuYWdlbWVudF90aW1lci5mdW5jdGlvbiA9IGF0bWVsX21hbmFnZW1lbnRfdGltZXI7CiAJcHJpdi0+bWFuYWdlbWVudF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAotCWRldi0+b3BlbiA9IGF0bWVsX29wZW47Ci0JZGV2LT5zdG9wID0gYXRtZWxfY2xvc2U7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gYXRtZWxfY2hhbmdlX210dTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGF0bWVsX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN0YXJ0X3R4OwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJmF0bWVsX2hhbmRsZXJfZGVmOwotCWRldi0+ZG9faW9jdGwgPSBhdG1lbF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXRtZWxfbmV0ZGV2X29wczsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmF0bWVsX2hhbmRsZXJfZGVmOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+YmFzZV9hZGRyID0gcG9ydDsKIApAQCAtMTU3Nyw3ICsxNjEwLDcgQEAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCiAJCWdvdG8gZXJyX291dF9yZXM7CiAKLQlpZiAoIXByb2JlX2F0bWVsX2NhcmQoZGV2KSl7CisJaWYgKCFwcm9iZV9hdG1lbF9jYXJkKGRldikpIHsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CkBAIC0xNTk0LDcgKzE2MjcsNyBAQAogCXJldHVybiBkZXY7CiAKIGVycl9vdXRfcmVzOgotCXJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgMzIpOworCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCAzMik7CiBlcnJfb3V0X2lycToKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIGVycl9vdXRfZnJlZToKQEAgLTE2MzIsNyArMTY2NSw3IEBACiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQ2hlY2sgaWYgd2UgYXNrZWQgZm9yIGBhbnknICovCi0JaWYoZHdycS0+ZmxhZ3MgPT0gMCkgeworCWlmIChkd3JxLT5mbGFncyA9PSAwKSB7CiAJCXByaXYtPmNvbm5lY3RfdG9fYW55X0JTUyA9IDE7CiAJfSBlbHNlIHsKIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CkBAIC0xNzY4LDcgKzE4MDEsNyBAQAogCX0KIAlpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7Ci0JaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKwlpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CiAKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwpAQCAtMTc5Nyw3ICsxODMwLDcgQEAKIAkvKiBDb3B5IHRoZSBrZXkgdG8gdGhlIHVzZXIgYnVmZmVyICovCiAJZHdycS0+bGVuZ3RoID0gcHJpdi0+d2VwX2tleV9sZW5baW5kZXhdOwogCWlmIChkd3JxLT5sZW5ndGggPiAxNikgewotCQlkd3JxLT5sZW5ndGg9MDsKKwkJZHdycS0+bGVuZ3RoID0gMDsKIAl9IGVsc2UgewogCQltZW1zZXQoZXh0cmEsIDAsIDE2KTsKIAkJbWVtY3B5KGV4dHJhLCBwcml2LT53ZXBfa2V5c1tpbmRleF0sIGR3cnEtPmxlbmd0aCk7CkBAIC0yMDEzLDExICsyMDQ2LDIwIEBACiAJCX0gZWxzZSB7CiAJCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5IHZhbHVlICovCiAJCQlzd2l0Y2ggKHZ3cnEtPnZhbHVlKSB7Ci0JCQljYXNlICAxMDAwMDAwOiBwcml2LT50eF9yYXRlID0gMDsgYnJlYWs7Ci0JCQljYXNlICAyMDAwMDAwOiBwcml2LT50eF9yYXRlID0gMTsgYnJlYWs7Ci0JCQljYXNlICA1NTAwMDAwOiBwcml2LT50eF9yYXRlID0gMjsgYnJlYWs7Ci0JCQljYXNlIDExMDAwMDAwOiBwcml2LT50eF9yYXRlID0gMzsgYnJlYWs7Ci0JCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKKwkJCWNhc2UgIDEwMDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlICAyMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAgNTUwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTEwMDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CiAJfQpAQCAtMjA2MiwxMSArMjEwNCwxOSBAQAogCQl2d3JxLT52YWx1ZSA9IDExMDAwMDAwOwogCX0gZWxzZSB7CiAJCXZ3cnEtPmZpeGVkID0gMTsKLQkJc3dpdGNoKHByaXYtPnR4X3JhdGUpIHsKLQkJY2FzZSAwOiB2d3JxLT52YWx1ZSA9ICAxMDAwMDAwOyBicmVhazsKLQkJY2FzZSAxOiB2d3JxLT52YWx1ZSA9ICAyMDAwMDAwOyBicmVhazsKLQkJY2FzZSAyOiB2d3JxLT52YWx1ZSA9ICA1NTAwMDAwOyBicmVhazsKLQkJY2FzZSAzOiB2d3JxLT52YWx1ZSA9IDExMDAwMDAwOyBicmVhazsKKwkJc3dpdGNoIChwcml2LT50eF9yYXRlKSB7CisJCWNhc2UgMDoKKwkJCXZ3cnEtPnZhbHVlID0gIDEwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdndycS0+dmFsdWUgPSAgMjAwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl2d3JxLT52YWx1ZSA9ICA1NTAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXZ3cnEtPnZhbHVlID0gMTEwMDAwMDA7CisJCQlicmVhazsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTIyMDQsOSArMjI1NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBsb25nIGZyZXF1ZW5jeV9saXN0W10gPSB7IDI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCi0JCQkJMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NCB9OwotCiBzdGF0aWMgaW50IGF0bWVsX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHN0cnVjdCBpd19mcmVxICpmd3JxLApAQCAtMjIxNiwxNiArMjI2MywxMiBAQAogCWludCByYyA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIElmIHNldHRpbmcgYnkgZnJlcXVlbmN5LCBjb252ZXJ0IHRvIGEgY2hhbm5lbCAqLwotCWlmICgoZndycS0+ZSA9PSAxKSAmJgotCSAgICAoZndycS0+bSA+PSAoaW50KSAyNDEyMDAwMDApICYmCi0JICAgIChmd3JxLT5tIDw9IChpbnQpIDI0ODcwMDAwMCkpIHsKKwlpZiAoZndycS0+ZSA9PSAxKSB7CiAJCWludCBmID0gZndycS0+bSAvIDEwMDAwMDsKLQkJaW50IGMgPSAwOwotCQl3aGlsZSAoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQotCQkJYysrOworCiAJCS8qIEhhY2sgdG8gZmFsbCB0aHJvdWdoLi4uICovCiAJCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gYyArIDE7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZik7CiAJfQogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KIAlpZiAoKGZ3cnEtPm0gPiAxMDAwKSB8fCAoZndycS0+ZSA+IDApKQpAQCAtMjM4NCw4ICsyNDI3LDExIEBACiAJaWYgKHJhbmdlLT5udW1fY2hhbm5lbHMgIT0gMCkgewogCQlmb3IgKGsgPSAwLCBpID0gY2hhbm5lbF90YWJsZVtqXS5taW47IGkgPD0gY2hhbm5lbF90YWJsZVtqXS5tYXg7IGkrKykgewogCQkJcmFuZ2UtPmZyZXFba10uaSA9IGk7IC8qIExpc3QgaW5kZXggKi8KLQkJCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpIC0gMV0gKiAxMDAwMDA7Ci0JCQlyYW5nZS0+ZnJlcVtrKytdLmUgPSAxOwkvKiBWYWx1ZXMgaW4gdGFibGUgaW4gTUh6IC0+ICogMTBeNSAqIDEwICovCisKKwkJCS8qIFZhbHVlcyBpbiBNSHogLT4gKiAxMF41ICogMTAgKi8KKwkJCXJhbmdlLT5mcmVxW2tdLm0gPSAoaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkpICoKKwkJCQkJICAgIDEwMDAwMCk7CisJCQlyYW5nZS0+ZnJlcVtrKytdLmUgPSAxOwogCQl9CiAJCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKIAl9CkBAIC0yNTgwLDggKzI2MjYsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0bWVsX2hhbmRsZXJfZGVmID0KLXsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgYXRtZWxfaGFuZGxlcl9kZWYgPSB7CiAJLm51bV9zdGFuZGFyZAk9IEFSUkFZX1NJWkUoYXRtZWxfaGFuZGxlciksCiAJLm51bV9wcml2YXRlCT0gQVJSQVlfU0laRShhdG1lbF9wcml2YXRlX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShhdG1lbF9wcml2YXRlX2FyZ3MpLApAQCAtMjgzOCw3ICsyODgzLDcgQEAKIAogCWlmIChwcml2LT53ZXBfaXNfb24gJiYgcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSAhPSAxKQogCQkvKiBubyBXRVAgZm9yIGF1dGhlbnRpY2F0aW9uIGZyYW1lcyB3aXRoIFRyU2VxTm8gMSAqLwotICAgICAgICAgICAgICAgIGhlYWRlci5mcmFtZV9jb250cm9sIHw9ICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCQloZWFkZXIuZnJhbWVfY29udHJvbCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAogCWF1dGguYWxnID0gY3B1X3RvX2xlMTYoc3lzdGVtKTsKIApAQCAtMjk3Myw3ICszMDE4LDcgQEAKIAkJaWYgKG1lbWNtcChic3MsIHByaXYtPkJTU2luZm9baV0uQlNTSUQsIDYpID09IDApCiAJCQlpbmRleCA9IGk7CiAKLSAgICAgICAgLyogSWYgd2UgcHJvY2VzcyBhIHByb2JlIGFuZCBhbiBlbnRyeSBmcm9tIHRoaXMgQlNTIGV4aXN0cworCS8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKIAkgICB3ZSB3aWxsIHVwZGF0ZSB0aGUgQlNTIGVudHJ5IHdpdGggdGhlIGluZm8gZnJvbSB0aGlzIEJTUy4KIAkgICBJZiB3ZSBwcm9jZXNzIGEgYmVhY29uIHdlIHdpbGwgb25seSB1cGRhdGUgUlNTSSAqLwogCkBAIC0yOTk5LDcgKzMwNDQsNyBAQAogCWlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpCiAJCXByaXYtPkJTU2luZm9baW5kZXhdLkJTU3R5cGUgPSBJV19NT0RFX0FESE9DOwogCWVsc2UgaWYgKGNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID1JV19NT0RFX0lORlJBOworCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9JTkZSQTsKIAogCXByaXYtPkJTU2luZm9baW5kZXhdLnByZWFtYmxlID0gY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSA/CiAJCVNIT1JUX1BSRUFNQkxFIDogTE9OR19QUkVBTUJMRTsKQEAgLTMwNDYsNyArMzA5MSw3IEBACiAJCX0KIAogCQlpZiAoc2hvdWxkX2Fzc29jaWF0ZSkgewotCQkJaWYocHJpdi0+c3RhdGlvbl93YXNfYXNzb2NpYXRlZCkgeworCQkJaWYgKHByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQpIHsKIAkJCQlhdG1lbF9lbnRlcl9zdGF0ZShwcml2LCBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkcpOwogCQkJCXNlbmRfYXNzb2NpYXRpb25fcmVxdWVzdChwcml2LCAxKTsKIAkJCQlyZXR1cm47CkBAIC0zMDY3LDggKzMxMTIsOCBAQAogCQkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7CiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgV0xBTl9BVVRIX1NIQVJFRF9LRVksIE5VTEwsIDApOwogCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYgKCAgIHN5c3RlbSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWQotCQkgICAgICAgICAgICYmIHByaXYtPndlcF9pc19vbikgeworCQl9IGVsc2UgaWYgKHN5c3RlbSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWQorCQkJICAgJiYgcHJpdi0+d2VwX2lzX29uKSB7CiAJCQlwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gMHgwMDE7CiAJCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMDsKIAkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBXTEFOX0FVVEhfT1BFTiwgTlVMTCwgMCk7CkBAIC0zMjU2LDExICszMzAxLDExIEBACiAJdTggbWF4X3Jzc2kgPSA0MjsgLyogNTAyLXJtZmQtcmV2ZCBtYXggYnkgZXhwZXJpbWVudCwgZGVmYXVsdCBmb3Igbm93ICovCiAKIAlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQkJY2FzZSBBVE1FTF9GV19UWVBFXzUwMkU6Ci0JCQltYXhfcnNzaSA9IDYzOyAvKiA1MDItcm1mZC1yZXZlIG1heCBieSBleHBlcmltZW50ICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCWNhc2UgQVRNRUxfRldfVFlQRV81MDJFOgorCQltYXhfcnNzaSA9IDYzOyAvKiA1MDItcm1mZC1yZXZlIG1heCBieSBleHBlcmltZW50ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXJzc2kgPSByc3NpICogMTAwIC8gbWF4X3Jzc2k7CkBAIC0zNDc3LDggKzM1MjIsNyBAQAogCSAgICBzdGF0dXMgPT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUykKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChjb21tYW5kKXsKLQorCXN3aXRjaCAoY29tbWFuZCkgewogCWNhc2UgQ01EX1N0YXJ0OgogCQlpZiAoc3RhdHVzID09IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKIAkJCXByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQgPSBwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQ7CkBAIC0zNzEzLDcgKzM3NTcsNyBAQAogCiAJaWYgKHJjKSB7CiAJCWlmIChkZXYtPmRldl9hZGRyWzBdID09IDB4RkYpIHsKLQkJCXU4IGRlZmF1bHRfbWFjW10gPSB7MHgwMCwweDA0LCAweDI1LCAweDAwLCAweDAwLCAweDAwfTsKKwkJCXU4IGRlZmF1bHRfbWFjW10gPSB7MHgwMCwgMHgwNCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH07CiAJCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6ICoqKiBJbnZhbGlkIE1BQyBhZGRyZXNzLiBVUEdSQURFIEZpcm13YXJlICoqKipcbiIsIGRldi0+bmFtZSk7CiAJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGVmYXVsdF9tYWMsIDYpOwogCQl9CkBAIC0zODA3LDcgKzM4NTEsNyBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCW1pYi5ncm91cF9rZXkgPSBpOwogCQkJCQlwcml2LT5ncm91cF9jaXBoZXJfc3VpdGUgPSBwcml2LT5wYWlyd2lzZV9jaXBoZXJfc3VpdGU7Ci0JCQkJICAgICAgICBtaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTFdID0gMTsKKwkJCQkJbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0xXSA9IDE7CiAJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMl0gPSBwcml2LT5ncm91cF9jaXBoZXJfc3VpdGU7CiAJCQkJfQogCQkJfQpAQCAtMzkxNyw3ICszOTYxLDcgQEAKIAkJCWxlbiA9IGZ3X2VudHJ5LT5zaXplOwogCQl9CiAKLQkgICAgICAgIGlmIChsZW4gPD0gMHg2MDAwKSB7CisJCWlmIChsZW4gPD0gMHg2MDAwKSB7CiAJCQlhdG1lbF93cml0ZTE2KHByaXYtPmRldiwgQlNSLCBCU1NfSVJBTSk7CiAJCQlhdG1lbF9jb3B5X3RvX2NhcmQocHJpdi0+ZGV2LCAwLCBmdywgbGVuKTsKIAkJCWF0bWVsX3NldF9nY3IocHJpdi0+ZGV2LCBHQ1JfUkVNQVApOwpAQCAtMzk0Niw3ICszOTkwLDcgQEAKIAlwcml2LT51c2Vfd3BhID0gKHByaXYtPmhvc3RfaW5mby5tYWpvcl92ZXJzaW9uID09IDQpOwogCXByaXYtPnJhZGlvX29uX2Jyb2tlbiA9IChwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiA9PSA1KTsKIAotICAgICAgICAvKiB1bm1hc2sgYWxsIGlycSBzb3VyY2VzICovCisJLyogdW5tYXNrIGFsbCBpcnEgc291cmNlcyAqLwogCWF0bWVsX3dtZW04KHByaXYsIGF0bWVsX2hpKHByaXYsIElGQUNFX0lOVF9NQVNLX09GRlNFVCksIDB4ZmYpOwogCiAJLyogaW50IFR4IHN5c3RlbSBhbmQgZW5hYmxlIFR4ICovCkBAIC0zOTc5LDcgKzQwMjMsNyBAQAogCQkgICAgQ01EX1NUQVRVU19SRUpFQ1RFRF9SQURJT19PRkYpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdHVybiB0aGUgcmFkaW8gb24uXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCkBAIC00MDAzLDggKzQwNDcsNyBAQAogCWVsc2UKIAkJYnVpbGRfd2VwX21pYihwcml2KTsKIAotCWlmIChvbGRfc3RhdGUgPT0gU1RBVElPTl9TVEFURV9SRUFEWSkKLQl7CisJaWYgKG9sZF9zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX1JFQURZKSB7CiAJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKQEAgLTQyODEsMjQgKzQzMjQsMjQgQEAKIAkuc2V0IE5WUkFNX0xFTkdUSCwgMHgwMjAwCiAJLnNldCBNQUNfQUREUkVTU19NSUIsIFNSQU1fQkFTRQogCS5zZXQgTUFDX0FERFJFU1NfTEVOR1RILCA2Ci0gICAgICAgIC5zZXQgTUFDX0JPT1RfRkxBRywgMHgxMAorCS5zZXQgTUFDX0JPT1RfRkxBRywgMHgxMAogCS5zZXQgTVIxLCAwCiAJLnNldCBNUjIsIDQKIAkuc2V0IE1SMywgOAogCS5zZXQgTVI0LCAweEMKIFJFU0VUX1ZFQ1RPUjoKLSAgICAgICAgYiBSRVNFVF9IQU5ETEVSCisJYiBSRVNFVF9IQU5ETEVSCiBVTkRFRl9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBTV0lfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogSUFCT1JUX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIERBQk9SVF9WRUNUT1I6CiBSRVNFUlZFRF9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBJUlFfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogRklRX1ZFQ1RPUjoKIAliIEhBTFQxCiBIQUxUMToJYiBIQUxUMQpAQCAtNDMxMCw3ICs0MzUzLDcgQEAKIAlsZHIJcjAsID1TUElfQ0dFTl9CQVNFCiAJbW92CXIxLCAjMAogCW1vdglyMSwgcjEsIGxzbCAjMwotCW9ycglyMSxyMSwgIzAKKwlvcnIJcjEsIHIxLCAjMAogCXN0cglyMSwgW3IwXQogCWxkcglyMSwgW3IwLCAjMjhdCiAJYmljCXIxLCByMSwgIzE2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCmluZGV4IDFmODFkMzYuLmFhYjcxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCkBAIC0xMTAsMTAgKzExMCwxOCBAQAogCWJvb2wgIkJyb2FkY29tIDQzeHggZGVidWdnaW5nIgogCWRlcGVuZHMgb24gQjQzCiAJLS0taGVscC0tLQotCSAgQnJvYWRjb20gNDN4eCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICBCcm9hZGNvbSA0M3h4IGRlYnVnZ2luZy4KIAotCSAgU2F5IFksIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHdoeSB0aGUgZHJpdmVyIGRvZXMgbm90Ci0JICB3b3JrIGZvciB5b3UuCisJICBUaGlzIGFkZHMgYWRkaXRpb25hbCBydW50aW1lIHNhbml0eSBjaGVja3MgYW5kIHN0YXRpc3RpY3MgdG8gdGhlIGRyaXZlci4KKwkgIFRoZXNlIGNoZWNrcyBhbmQgc3RhdGlzdGljcyBtaWdodCBtZSBleHBlbnNpdmUgYW5kIGh1cnQgcnVudGltZSBwZXJmb3JtYW5jZQorCSAgb2YgeW91ciBzeXN0ZW0uCisJICBUaGlzIGFsc28gYWRkcyB0aGUgYjQzIGRlYnVnZnMgaW50ZXJmYWNlLgorCisJICBEbyBub3QgZW5hYmxlIHRoaXMsIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZyB0aGUgZHJpdmVyLgorCisJICBTYXkgTiwgaWYgeW91IGFyZSBhIGRpc3RyaWJ1dG9yIG9yIHVzZXIgYnVpbGRpbmcgYSByZWxlYXNlIGtlcm5lbAorCSAgZm9yIHByb2R1Y3Rpb24gdXNlLgorCSAgT25seSBzYXkgWSwgaWYgeW91IGFyZSBkZWJ1Z2dpbmcgYSBwcm9ibGVtIGluIHRoZSBiNDMgZHJpdmVyIHNvdXJjZWNvZGUuCiAKIGNvbmZpZyBCNDNfRk9SQ0VfUElPCiAJYm9vbCAiRm9yY2UgdXNhZ2Ugb2YgUElPIGluc3RlYWQgb2YgRE1BIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCmluZGV4IDE0YTAyYjMuLjI4MWVmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiBiNDMteQkJCQkrPSBwaHlfYS5vCiBiNDMtJChDT05GSUdfQjQzX05QSFkpCQkrPSBwaHlfbi5vCiBiNDMtJChDT05GSUdfQjQzX1BIWV9MUCkJKz0gcGh5X2xwLm8KK2I0My0kKENPTkZJR19CNDNfUEhZX0xQKQkrPSB0YWJsZXNfbHBwaHkubwogYjQzLXkJCQkJKz0gc3lzZnMubwogYjQzLXkJCQkJKz0geG1pdC5vCiBiNDMteQkJCQkrPSBsby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggYTUzYzM3OC4uYmVhZjE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtMTIwLDYgKzEyMCw5IEBACiAjZGVmaW5lIEI0M19NTUlPX0lGU0NUTAkJCTB4Njg4IC8qIEludGVyZnJhbWUgc3BhY2UgY29udHJvbCAqLwogI2RlZmluZSAgQjQzX01NSU9fSUZTQ1RMX1VTRV9FRENGCTB4MDAwNAogI2RlZmluZSBCNDNfTU1JT19QT1dFUlVQX0RFTEFZCQkweDZBOAorI2RlZmluZSBCNDNfTU1JT19CVENPRVhfQ1RMCQkweDZCNCAvKiBCbHVldG9vdGggQ29leGlzdGVuY2UgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTU1JT19CVENPRVhfU1RBVAkJMHg2QjYgLyogQmx1ZXRvb3RoIENvZXhpc3RlbmNlIFN0YXR1cyAqLworI2RlZmluZSBCNDNfTU1JT19CVENPRVhfVFhDVEwJCTB4NkI4IC8qIEJsdWV0b290aCBDb2V4aXN0ZW5jZSBUcmFuc21pdCBDb250cm9sICovCiAKIC8qIFNQUk9NIGJvYXJkZmxhZ3NfbG8gdmFsdWVzICovCiAjZGVmaW5lIEI0M19CRkxfQlRDT0VYSVNUCQkweDAwMDEJLyogaW1wbGVtZW50cyBCbHVldG9vdGggY29leGlzdGFuY2UgKi8KQEAgLTU0Nyw5ICs1NTAsNiBAQAogCiBzdHJ1Y3QgYjQzX3N0YXRzIHsKIAl1OCBsaW5rX25vaXNlOwotCS8qIFN0b3JlIHRoZSBsYXN0IFRYL1JYIHRpbWVzIGhlcmUgZm9yIHVwZGF0aW5nIHRoZSBsZWRzLiAqLwotCXVuc2lnbmVkIGxvbmcgbGFzdF90eDsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CiB9OwogCiBzdHJ1Y3QgYjQzX2tleSB7CkBAIC02NTUsMTAgKzY1NSwzOSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eHBvd2VyX2FkanVzdF93b3JrOwogfTsKIAorLyogVGhlIHR5cGUgb2YgdGhlIGZpcm13YXJlIGZpbGUuICovCitlbnVtIGI0M19maXJtd2FyZV9maWxlX3R5cGUgeworCUI0M19GV1RZUEVfUFJPUFJJRVRBUlksCisJQjQzX0ZXVFlQRV9PUEVOU09VUkNFLAorCUI0M19OUl9GV1RZUEVTLAorfTsKKworLyogQ29udGV4dCBkYXRhIGZvciBmZXRjaGluZyBmaXJtd2FyZS4gKi8KK3N0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0IHsKKwkvKiBUaGUgZGV2aWNlIHdlIGFyZSByZXF1ZXN0aW5nIHRoZSBmdyBmb3IuICovCisJc3RydWN0IGI0M193bGRldiAqZGV2OworCS8qIFRoZSB0eXBlIG9mIGZpcm13YXJlIHRvIHJlcXVlc3QuICovCisJZW51bSBiNDNfZmlybXdhcmVfZmlsZV90eXBlIHJlcV90eXBlOworCS8qIEVycm9yIG1lc3NhZ2VzIGZvciBlYWNoIGZpcm13YXJlIHR5cGUuICovCisJY2hhciBlcnJvcnNbQjQzX05SX0ZXVFlQRVNdWzEyOF07CisJLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgZmlybXdhcmUgbmFtZS4gKi8KKwljaGFyIGZ3bmFtZVs2NF07CisJLyogQSBmYXRhbCBlcnJvciBvY2N1cmVkIHdoaWxlIHJlcXVlc3RpbmcuIEZpcm13YXJlIHJlcWVzdAorCSAqIGNhbiBub3QgY29udGludWUsIGFzIGFueSBvdGhlciByZXFlc3Qgd2lsbCBhbHNvIGZhaWwuICovCisJaW50IGZhdGFsX2ZhaWx1cmU7Cit9OworCiAvKiBJbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgYSBjYWNoZWQgbWljcm9jb2RlIGZpbGUuICovCiBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgewogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZGF0YTsKKwkvKiBUeXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlIG5hbWUuIE5vdGUgdGhhdCB0aGlzIGRvZXMgb25seSBpbmRpY2F0ZQorCSAqIHRoZSB0eXBlIGJ5IHRoZSBmaXJtd2FyZSBuYW1lLiBOT1QgdGhlIGZpbGUgY29udGVudHMuCisJICogSWYgeW91IHdhbnQgdG8gY2hlY2sgZm9yIHByb3ByaWV0YXJ5IHZzIG9wZW5zb3VyY2UsIHVzZSAoc3RydWN0IGI0M19maXJtd2FyZSktPm9wZW5zb3VyY2UKKwkgKiBpbnN0ZWFkISBUaGUgKHN0cnVjdCBiNDNfZmlybXdhcmUpLT5vcGVuc291cmNlIGZsYWcgaXMgZGVyaXZlZCBmcm9tIHRoZSBhY3R1YWwgZmlybXdhcmUKKwkgKiBiaW5hcnkgY29kZSwgbm90IGp1c3QgdGhlIGZpbGVuYW1lLgorCSAqLworCWVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSB0eXBlOwogfTsKIAogLyogUG9pbnRlcnMgdG8gdGhlIGZpcm13YXJlIGRhdGEgYW5kIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgaXQuICovCkBAIC02NzcsNyArNzA2LDggQEAKIAkvKiBGaXJtd2FyZSBwYXRjaGxldmVsICovCiAJdTE2IHBhdGNoOwogCi0JLyogU2V0IHRvIHRydWUsIGlmIHdlIGFyZSB1c2luZyBhbiBvcGVuc291cmNlIGZpcm13YXJlLiAqLworCS8qIFNldCB0byB0cnVlLCBpZiB3ZSBhcmUgdXNpbmcgYW4gb3BlbnNvdXJjZSBmaXJtd2FyZS4KKwkgKiBVc2UgdGhpcyB0byBjaGVjayBmb3IgcHJvcHJpZXRhcnkgdnMgb3BlbnNvdXJjZS4gKi8KIAlib29sIG9wZW5zb3VyY2U7CiAJLyogU2V0IHRvIHRydWUsIGlmIHRoZSBjb3JlIG5lZWRzIGEgUENNIGZpcm13YXJlLCBidXQKIAkgKiB3ZSBmYWlsZWQgdG8gbG9hZCBvbmUuIFRoaXMgaXMgYWx3YXlzIGZhbHNlIGZvcgpAQCAtODQ4LDEyICs4NzgsOSBAQAogICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOwogdm9pZCBiNDN3YXJuKHN0cnVjdCBiNDNfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKLSNpZiBCNDNfREVCVUcKIHZvaWQgYjQzZGJnKHN0cnVjdCBiNDNfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKLSNlbHNlIC8qIERFQlVHICovCi0jIGRlZmluZSBiNDNkYmcod2wsIGZtdC4uLikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCi0jZW5kaWYgLyogREVCVUcgKi8KKwogCiAvKiBBIFdBUk5fT04gdmFyaWFudCB0aGF0IHZhbmlzaGVzIHdoZW4gYjQzIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KICAqIFRoaXMgX2Fsc29fIGV2YWx1YXRlcyB0aGUgYXJnIHdpdGggZGVidWdnaW5nIGRpc2FibGVkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKaW5kZXggZTA0ZmM5MS4uNDVlM2Q2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCkBAIC01MSw4ICs1MSw4IEBACiB9OwogCiBzdGF0aWMgaW5saW5lCi1zdHJ1Y3QgYjQzX2Rmc19maWxlICogZm9wc190b19kZnNfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfZGVidWdmc19mb3BzICpkZm9wcykKK3N0cnVjdCBiNDNfZGZzX2ZpbGUgKmZvcHNfdG9fZGZzX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfZGVidWdmc19mb3BzICpkZm9wcykKIHsKIAl2b2lkICpwOwogCkBAIC0zNjcsMzQgKzM2Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHdsLT5pcnFfbG9jayBpcyBsb2NrZWQgKi8KLXN0YXRpYyBzc2l6ZV90IHRzZl9yZWFkX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICAgICBjaGFyICpidWYsIHNpemVfdCBidWZzaXplKQotewotCXNzaXplX3QgY291bnQgPSAwOwotCXU2NCB0c2Y7Ci0KLQliNDNfdHNmX3JlYWQoZGV2LCAmdHNmKTsKLQlmYXBwZW5kKCIweCUwOHglMDh4XG4iLAotCQkodW5zaWduZWQgaW50KSgodHNmICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMiksCi0JCSh1bnNpZ25lZCBpbnQpKHRzZiAmIDB4RkZGRkZGRkZVTEwpKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotLyogd2wtPmlycV9sb2NrIGlzIGxvY2tlZCAqLwotc3RhdGljIGludCB0c2Zfd3JpdGVfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXU2NCB0c2Y7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nICopKCZ0c2YpKSAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQliNDNfdHNmX3dyaXRlKGRldiwgdHNmKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3NpemVfdCB0eHN0YXRfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQljaGFyICpidWYsIHNpemVfdCBidWZzaXplKQogewpAQCAtNjkxLDE1ICs2NjMsMjMgQEAKIEI0M19ERUJVR0ZTX0ZPUFMobW1pbzE2d3JpdGUsIE5VTEwsIG1taW8xNndyaXRlX193cml0ZV9maWxlLCAxKTsKIEI0M19ERUJVR0ZTX0ZPUFMobW1pbzMycmVhZCwgbW1pbzMycmVhZF9fcmVhZF9maWxlLCBtbWlvMzJyZWFkX193cml0ZV9maWxlLCAxKTsKIEI0M19ERUJVR0ZTX0ZPUFMobW1pbzMyd3JpdGUsIE5VTEwsIG1taW8zMndyaXRlX193cml0ZV9maWxlLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFModHNmLCB0c2ZfcmVhZF9maWxlLCB0c2Zfd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKHR4c3RhdCwgdHhzdGF0X3JlYWRfZmlsZSwgTlVMTCwgMCk7CiBCNDNfREVCVUdGU19GT1BTKHJlc3RhcnQsIE5VTEwsIHJlc3RhcnRfd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKGxvY3RscywgbG9jdGxzX3JlYWRfZmlsZSwgTlVMTCwgMCk7CiAKIAotaW50IGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKQorYm9vbCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKIHsKLQlyZXR1cm4gISEoZGV2LT5kZnNlbnRyeSAmJiBkZXYtPmRmc2VudHJ5LT5keW5fZGVidWdbZmVhdHVyZV0pOworCWJvb2wgZW5hYmxlZDsKKworCWVuYWJsZWQgPSAoZGV2LT5kZnNlbnRyeSAmJiBkZXYtPmRmc2VudHJ5LT5keW5fZGVidWdbZmVhdHVyZV0pOworCWlmICh1bmxpa2VseShlbmFibGVkKSkgeworCQkvKiBGb3JjZSBmdWxsIGRlYnVnZ2luZyBtZXNzYWdlcywgaWYgdGhlIHVzZXIgZW5hYmxlZAorCQkgKiBzb21lIGR5bmFtaWMgZGVidWdnaW5nIGZlYXR1cmUuICovCisJCWI0M19tb2RwYXJhbV92ZXJib3NlID0gQjQzX1ZFUkJPU0lUWV9NQVg7CisJfQorCisJcmV0dXJuIGVuYWJsZWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19yZW1vdmVfZHluYW1pY19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC04MDUsNyArNzg1LDYgQEAKIAlBRERfRklMRShtbWlvMTZ3cml0ZSwgMDIwMCk7CiAJQUREX0ZJTEUobW1pbzMycmVhZCwgMDYwMCk7CiAJQUREX0ZJTEUobW1pbzMyd3JpdGUsIDAyMDApOwotCUFERF9GSUxFKHRzZiwgMDYwMCk7CiAJQUREX0ZJTEUodHhzdGF0LCAwNDAwKTsKIAlBRERfRklMRShyZXN0YXJ0LCAwMjAwKTsKIAlBRERfRklMRShsb2N0bHMsIDA0MDApOwpAQCAtODM0LDcgKzgxMyw2IEBACiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9tbWlvMTZ3cml0ZS5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzMycmVhZC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzMyd3JpdGUuZGVudHJ5KTsKLQlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3RzZi5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfdHhzdGF0LmRlbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9yZXN0YXJ0LmRlbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoZS0+ZmlsZV9sb2N0bHMuZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCmluZGV4IDc4ODZjYmUuLmI5ZDRkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaApAQCAtNDYsNyArNDYsNiBAQAogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV9tbWlvMTZ3cml0ZTsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzMycmVhZDsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzMyd3JpdGU7Ci0Jc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3RzZjsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfdHhzdGF0OwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90eHBvd2VyX2c7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3Jlc3RhcnQ7CkBAIC03Miw3ICs3MSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZHluX2RlYnVnX2RlbnRyaWVzW19fQjQzX05SX0RZTkRCR107CiB9OwogCi1pbnQgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpOworYm9vbCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSk7CiAKIHZvaWQgYjQzX2RlYnVnZnNfaW5pdCh2b2lkKTsKIHZvaWQgYjQzX2RlYnVnZnNfZXhpdCh2b2lkKTsKQEAgLTgzLDcgKzgyLDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX0I0M19ERUJVRyAqLwogCi1zdGF0aWMgaW5saW5lIGludCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCA2ZDY1YTAyLi4wY2M4MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC00MSw2ICs0MSwxMiBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAKKy8qIFJlcXVpcmVkIG51bWJlciBvZiBUWCBETUEgc2xvdHMgcGVyIFRYIGZyYW1lLgorICogVGhpcyBjdXJyZW50bHkgaXMgMiwgYmVjYXVzZSB3ZSBwdXQgdGhlIGhlYWRlciBhbmQgdGhlIGllZWU4MDIxMSBmcmFtZQorICogaW50byBzZXBhcmF0ZSBzbG90cy4gKi8KKyNkZWZpbmUgVFhfU0xPVFNfUEVSX0ZSQU1FCTIKKworCiAvKiAzMmJpdCBETUEgb3BzLiAqLwogc3RhdGljCiBzdHJ1Y3QgYjQzX2RtYWRlc2NfZ2VuZXJpYyAqb3AzMl9pZHgyZGVzYyhzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsCkBAIC03NCw4ICs4MCw3IEBACiAJYWRkcmV4dCA9ICh1MzIpIChkbWFhZGRyICYgU1NCX0RNQV9UUkFOU0xBVElPTl9NQVNLKQogCSAgICA+PiBTU0JfRE1BX1RSQU5TTEFUSU9OX1NISUZUOwogCWFkZHIgfD0gc3NiX2RtYV90cmFuc2xhdGlvbihyaW5nLT5kZXYtPmRldik7Ci0JY3RsID0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkgICAgJiBCNDNfRE1BMzJfRENUTF9CWVRFQ05UOworCWN0bCA9IGJ1ZnNpemUgJiBCNDNfRE1BMzJfRENUTF9CWVRFQ05UOwogCWlmIChzbG90ID09IHJpbmctPm5yX3Nsb3RzIC0gMSkKIAkJY3RsIHw9IEI0M19ETUEzMl9EQ1RMX0RUQUJMRUVORDsKIAlpZiAoc3RhcnQpCkBAIC0xNzcsOCArMTgyLDcgQEAKIAkJY3RsMCB8PSBCNDNfRE1BNjRfRENUTDBfRlJBTUVFTkQ7CiAJaWYgKGlycSkKIAkJY3RsMCB8PSBCNDNfRE1BNjRfRENUTDBfSVJROwotCWN0bDEgfD0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKLQkgICAgJiBCNDNfRE1BNjRfRENUTDFfQllURUNOVDsKKwljdGwxIHw9IGJ1ZnNpemUgJiBCNDNfRE1BNjRfRENUTDFfQllURUNOVDsKIAljdGwxIHw9IChhZGRyZXh0IDw8IEI0M19ETUE2NF9EQ1RMMV9BRERSRVhUX1NISUZUKQogCSAgICAmIEI0M19ETUE2NF9EQ1RMMV9BRERSRVhUX01BU0s7CiAKQEAgLTU3NiwxMiArNTgwLDExIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZG1hYWRkciA9IG1hcF9kZXNjYnVmZmVyKHJpbmcsIHNrYi0+ZGF0YSwKIAkJCQkJIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwotCX0KLQotCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKLQkJYjQzZXJyKHJpbmctPmRldi0+d2wsICJSWCBETUEgYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIC1FSU87CisJCWlmIChiNDNfZG1hX21hcHBpbmdfZXJyb3IocmluZywgZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCkpIHsKKwkJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiUlggRE1BIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAl9CiAKIAltZXRhLT5za2IgPSBza2I7CkBAIC04MzAsOSArODMzLDYgQEAKIAkJaWYgKHJpbmctPmluZGV4ID09IDApIHsKIAkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCNDNfRE1BMF9SWF9CVUZGRVJTSVpFOwogCQkJcmluZy0+ZnJhbWVvZmZzZXQgPSBCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVDsKLQkJfSBlbHNlIGlmIChyaW5nLT5pbmRleCA9PSAzKSB7Ci0JCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQjQzX0RNQTNfUlhfQlVGRkVSU0laRTsKLQkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQjQzX0RNQTNfUlhfRlJBTUVPRkZTRVQ7CiAJCX0gZWxzZQogCQkJQjQzX1dBUk5fT04oMSk7CiAJfQpAQCAtODQyLDcgKzg0MiwxMCBAQAogI2VuZGlmCiAKIAlpZiAoZm9yX3R4KSB7Ci0JCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhyaW5nLT5ucl9zbG90cywKKwkJLyogQXNzdW1wdGlvbjogQjQzX1RYUklOR19TTE9UUyBjYW4gYmUgZGl2aWRlZCBieSBUWF9TTE9UU19QRVJfRlJBTUUgKi8KKwkJQlVJTERfQlVHX09OKEI0M19UWFJJTkdfU0xPVFMgJSBUWF9TTE9UU19QRVJfRlJBTUUgIT0gMCk7CisKKwkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FLAogCQkJCQkgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQpAQCAtODU4LDcgKzg2MSw3IEBACiAJCQkJCSAgYjQzX3R4aGRyX3NpemUoZGV2KSwgMSkpIHsKIAkJCS8qIHVnaCByZWFsbG9jICovCiAJCQlrZnJlZShyaW5nLT50eGhkcl9jYWNoZSk7Ci0JCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMsCisJCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUUsCiAJCQkJCQkgICAgYjQzX3R4aGRyX3NpemUoZGV2KSwKIAkJCQkJCSAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCQlpZiAoIXJpbmctPnR4aGRyX2NhY2hlKQpAQCAtMTE0OSw3ICsxMTUyLDEwIEBACiAJdTE2IGNvb2tpZTsKIAlzaXplX3QgaGRyc2l6ZSA9IGI0M190eGhkcl9zaXplKHJpbmctPmRldik7CiAKLSNkZWZpbmUgU0xPVFNfUEVSX1BBQ0tFVCAgMgorCS8qIEltcG9ydGFudCBub3RlOiBJZiB0aGUgbnVtYmVyIG9mIHVzZWQgRE1BIHNsb3RzIHBlciBUWCBmcmFtZQorCSAqIGlzIGNoYW5nZWQgaGVyZSwgdGhlIFRYX1NMT1RTX1BFUl9GUkFNRSBkZWZpbml0aW9uIGF0IHRoZSB0b3Agb2YKKwkgKiB0aGUgZmlsZSBoYXMgdG8gYmUgdXBkYXRlZCwgdG9vIQorCSAqLwogCiAJb2xkX3RvcF9zbG90ID0gcmluZy0+Y3VycmVudF9zbG90OwogCW9sZF91c2VkX3Nsb3RzID0gcmluZy0+dXNlZF9zbG90czsKQEAgLTExNTksNyArMTE2NSw3IEBACiAJZGVzYyA9IG9wcy0+aWR4MmRlc2MocmluZywgc2xvdCwgJm1ldGFfaGRyKTsKIAltZW1zZXQobWV0YV9oZHIsIDAsIHNpemVvZigqbWV0YV9oZHIpKTsKIAotCWhlYWRlciA9ICYocmluZy0+dHhoZHJfY2FjaGVbc2xvdCAqIGhkcnNpemVdKTsKKwloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlWyhzbG90IC8gVFhfU0xPVFNfUEVSX0ZSQU1FKSAqIGhkcnNpemVdKTsKIAljb29raWUgPSBnZW5lcmF0ZV9jb29raWUocmluZywgc2xvdCk7CiAJZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKHJpbmctPmRldiwgaGVhZGVyLAogCQkJCSBza2ItPmRhdGEsIHNrYi0+bGVuLCBpbmZvLCBjb29raWUpOwpAQCAtMTI1NCw4ICsxMjYwLDggQEAKIH0KIAogLyogU3RhdGljIG1hcHBpbmcgb2YgbWFjODAyMTEncyBxdWV1ZXMgKHByaW9yaXRpZXMpIHRvIGI0MyBETUEgcmluZ3MuICovCi1zdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICogc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgIHU4IHF1ZXVlX3ByaW8pCitzdGF0aWMgc3RydWN0IGI0M19kbWFyaW5nICpzZWxlY3RfcmluZ19ieV9wcmlvcml0eShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICB1OCBxdWV1ZV9wcmlvKQogewogCXN0cnVjdCBiNDNfZG1hcmluZyAqcmluZzsKIApAQCAtMTMwNiwxNyArMTMxMiwxOSBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CisKIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwotCWlmICh1bmxpa2VseShmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkpIHsKLQkJYjQzd2FybihkZXYtPndsLCAiRE1BIHF1ZXVlIG92ZXJmbG93XG4iKTsKLQkJZXJyID0gLUVOT1NQQzsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KIAkvKiBDaGVjayBpZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQgaW4gbWFjODAyMTEsCiAJICogYnV0IHdlIGdvdCBjYWxsZWQgbmV2ZXJ0aGVsZXNzLgogCSAqIFRoYXQgd291bGQgYmUgYSBtYWM4MDIxMSBidWcuICovCiAJQjQzX1dBUk5fT04ocmluZy0+c3RvcHBlZCk7CiAKKwlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFRYX1NMT1RTX1BFUl9GUkFNRSkpIHsKKwkJYjQzd2FybihkZXYtPndsLCAiRE1BIHF1ZXVlIG92ZXJmbG93XG4iKTsKKwkJZXJyID0gLUVOT1NQQzsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCS8qIEFzc2lnbiB0aGUgcXVldWUgbnVtYmVyIHRvIHRoZSByaW5nIChpZiBub3QgYWxyZWFkeSBkb25lIGJlZm9yZSkKIAkgKiBzbyBUWCBzdGF0dXMgaGFuZGxpbmcgY2FuIHVzZSBpdC4gVGhlIHF1ZXVlIHRvIHJpbmcgbWFwcGluZyBpcwogCSAqIHN0YXRpYywgc28gd2UgZG9uJ3QgbmVlZCB0byBzdG9yZSBpdCBwZXIgZnJhbWUuICovCkBAIC0xMzM1LDcgKzEzNDMsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCXJpbmctPm5yX3R4X3BhY2tldHMrKzsKLQlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBTTE9UU19QRVJfUEFDS0VUKSB8fAorCWlmICgoZnJlZV9zbG90cyhyaW5nKSA8IFRYX1NMT1RTX1BFUl9GUkFNRSkgfHwKIAkgICAgc2hvdWxkX2luamVjdF9vdmVyZmxvdyhyaW5nKSkgewogCQkvKiBUaGlzIFRYIHJpbmcgaXMgZnVsbC4gKi8KIAkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LT53bC0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKQEAgLTE0MTcsOSArMTQyNSw4IEBACiAJCQlicmVhazsKIAkJc2xvdCA9IG5leHRfc2xvdChyaW5nLCBzbG90KTsKIAl9Ci0JZGV2LT5zdGF0cy5sYXN0X3R4ID0gamlmZmllczsKIAlpZiAocmluZy0+c3RvcHBlZCkgewotCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCk7CisJCUI0M19XQVJOX09OKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpOwogCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYtPndsLT5odywgcmluZy0+cXVldWVfcHJpbyk7CiAJCXJpbmctPnN0b3BwZWQgPSAwOwogCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkgewpAQCAtMTQ0Miw4ICsxNDQ5LDggQEAKIAkJcmluZyA9IHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KGRldiwgaSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKLQkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFNMT1RTX1BFUl9QQUNLRVQ7Ci0JCXN0YXRzW2ldLmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOworCQlzdGF0c1tpXS5sZW4gPSByaW5nLT51c2VkX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FOworCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FOwogCQlzdGF0c1tpXS5jb3VudCA9IHJpbmctPm5yX3R4X3BhY2tldHM7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKaW5kZXggZDFlYjVjMC4uMDVkZGU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaApAQCAtMSwxNCArMSwxMiBAQAogI2lmbmRlZiBCNDNfRE1BX0hfCiAjZGVmaW5lIEI0M19ETUFfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJiNDMuaCIKIAorCiAvKiBETUEtSW50ZXJydXB0IHJlYXNvbnMuICovCiAjZGVmaW5lIEI0M19ETUFJUlFfRkFUQUxNQVNLCSgoMSA8PCAxMCkgfCAoMSA8PCAxMSkgfCAoMSA8PCAxMikgXAogCQkJCQkgfCAoMSA8PCAxNCkgfCAoMSA8PCAxNSkpCkBAIC0xNjEsMTQgKzE1OSwxMyBAQAogCiAvKiBNaXNjIERNQSBjb25zdGFudHMgKi8KICNkZWZpbmUgQjQzX0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCi0jZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCTMwCi0jZGVmaW5lIEI0M19ETUEzX1JYX0ZSQU1FT0ZGU0VUCTAKKyNkZWZpbmUgQjQzX0RNQTBfUlhfRlJBTUVPRkZTRVQJCTMwCiAKIC8qIERNQSBlbmdpbmUgdHVuaW5nIGtub2JzICovCi0jZGVmaW5lIEI0M19UWFJJTkdfU0xPVFMJCTEyOAorI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkyNTYKICNkZWZpbmUgQjQzX1JYUklOR19TTE9UUwkJNjQKLSNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkoMjMwNCArIDEwMCkKLSNkZWZpbmUgQjQzX0RNQTNfUlhfQlVGRkVSU0laRQkxNgorI2RlZmluZSBCNDNfRE1BMF9SWF9CVUZGRVJTSVpFCQlJRUVFODAyMTFfTUFYX0ZSQU1FX0xFTgorCiAKIHN0cnVjdCBza19idWZmOwogc3RydWN0IGI0M19wcml2YXRlOwpAQCAtMjE1LDcgKzIxMiw3IEBACiAJdm9pZCAqZGVzY2Jhc2U7CiAJLyogTWV0YSBkYXRhIGFib3V0IGFsbCBkZXNjcmlwdG9ycy4gKi8KIAlzdHJ1Y3QgYjQzX2RtYWRlc2NfbWV0YSAqbWV0YTsKLQkvKiBDYWNoZSBvZiBUWCBoZWFkZXJzIGZvciBlYWNoIHNsb3QuCisJLyogQ2FjaGUgb2YgVFggaGVhZGVycyBmb3IgZWFjaCBUWCBmcmFtZS4KIAkgKiBUaGlzIGlzIHRvIGF2b2lkIGFuIGFsbG9jYXRpb24gb24gZWFjaCBUWC4KIAkgKiBUaGlzIGlzIE5VTEwgZm9yIGFuIFJYIHJpbmcuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCmluZGV4IDZhMThhMTQuLjIyZDBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogCi1zdGF0aWMgc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorc3RhdGljIHN0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19maW5kX2xvX2NhbGliKHN0cnVjdCBiNDNfdHhwb3dlcl9sb19jb250cm9sICpsbywKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCiAJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgKiAicGFkX21peF9nYWluIiBpcyB0aGUgUEFEIE1peGVyIEdhaW4uCiAgKi8KIHN0YXRpYyB1MTYgbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHUxNiAqIHZhbHVlLCB1MTYgKiBwYWRfbWl4X2dhaW4pCisJCQkJICAgdTE2ICp2YWx1ZSwgdTE2ICpwYWRfbWl4X2dhaW4pCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAl1MTYgcmVnLCB2LCBwYWRtaXg7CkBAIC0yMjUsMTQgKzIyNSwxMiBAQAogCQkJCXJhZGlvX3BjdGxfcmVnID0gdG1wOwogCQl9CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCSAgICAgICYgMHhGRkYwKSB8IHJhZGlvX3BjdGxfcmVnKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgcmFkaW9fcGN0bF9yZWcpOwogCWI0M19ncGh5X3NldF9iYXNlYmFuZF9hdHRlbnVhdGlvbihkZXYsIDIpOwogCiAJcmVnID0gbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoZGV2LCAmbWFzaywgTlVMTCk7CiAJbWFzayA9IH5tYXNrOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgcmVnLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgcmVnKQotCQkJICAmIG1hc2spOworCWI0M19yYWRpb19tYXNrKGRldiwgcmVnLCBtYXNrKTsKIAogCWlmIChoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7CiAJCWludCBpLCBqOwpAQCAtMjQyLDE0ICsyNDAsMTAgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eF9tYWduX3ZhbHVlcyk7IGkrKykgewogCQkJdHhfbWFnbiA9IHR4X21hZ25fdmFsdWVzW2ldOwotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgJiAweEZGMEYpIHwgdHhfbWFnbik7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkYwRiwgdHhfbWFnbik7CiAJCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRSh0eF9iaWFzX3ZhbHVlcyk7IGorKykgewogCQkJCXR4X2JpYXMgPSB0eF9iaWFzX3ZhbHVlc1tqXTsKLQkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJCSAgICYgMHhGRkYwKSB8IHR4X2JpYXMpOworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg1MiwgMHhGRkYwLCB0eF9iaWFzKTsKIAkJCQlmZWVkdGhyb3VnaCA9CiAJCQkJICAgIGxvX21lYXN1cmVfZmVlZHRocm91Z2goZGV2LCAwLCBwZ2EsCiAJCQkJCQkJICAgdHJzd19yeCk7CkBAIC0yNjksOCArMjYzLDcgQEAKIAl9IGVsc2UgewogCQlsby0+dHhfbWFnbiA9IDA7CiAJCWxvLT50eF9iaWFzID0gMDsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkgICYgMHhGRkYwKTsJLyogVFggYmlhcyA9PSAwICovCisJCWI0M19yYWRpb19tYXNrKGRldiwgMHg1MiwgMHhGRkYwKTsJLyogVFggYmlhcyA9PSAwICovCiAJfQogCWxvLT50eGN0bF9tZWFzdXJlZF90aW1lID0gamlmZmllczsKIH0KQEAgLTQwNiwxOCArMzk5LDEwIEBACiAJCXNhdi0+cGh5X2Nja18xNCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MTQpKTsKIAkJc2F2LT5waHlfaHB3cl90c3NpY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0hQV1JfVFNTSUNUTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMKQotCQkJICAgICAgfCAweDEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4NDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9EQUNDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgIHwgMHg0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDE0KSwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MTQpKQotCQkJICAgICAgfCAweDIwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwsIDB4MTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksIDB4NDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfREFDQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSwgMHgyMDApOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IgJiYKIAkgICAgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwICYmIHBoeS0+cmFkaW9fcmV2IDwgNikgewpAQCAtNDM0LDE3ICs0MTksMTAgQEAKIAkJc2F2LT5waHlfY2NrXzNFID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzRSkpOwogCQlzYXYtPnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DTEFTU0NUTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikKLQkJCSAgICAgIHwgMHgwMDAzKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkKLQkJCSAgICAgICYgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DTEFTU0NUTCwgMHhGRkZDKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCAweDdGRkYpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOwogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0cpIHsKIAkJCWlmICgocGh5LT5yZXYgPj0gNykgJiYKIAkJCSAgICAoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkpIHsKQEAgLTU1OCw4ICs1MzYsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg3QSwgc2F2LT5yYWRpb183QSk7CiAJaWYgKCFoYXNfdHhfbWFnbmlmaWNhdGlvbihwaHkpKSB7CiAJCXRtcCA9IHNhdi0+cmFkaW9fNTI7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUyKQotCQkJCQkgICAgICAmIDB4RkYwRikgfCB0bXApOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkYwRiwgdG1wKTsKIAl9CiAJYjQzX3dyaXRlMTYoZGV2LCAweDNFMiwgc2F2LT5yZWdfM0UyKTsKIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IgJiYKQEAgLTc1NCw5ICs3MzEsOSBAQAogfQogCiBzdGF0aWMKLXN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKK3N0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19jYWxpYnJhdGVfbG9fc2V0dGluZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwogCXN0cnVjdCBiNDNfcGh5X2cgKmdwaHkgPSBwaHktPmc7CkBAIC03NzgsMTIgKzc1NSw4IEBACiAKIAl0eGN0bF9yZWcgPSBsb190eGN0bF9yZWdpc3Rlcl90YWJsZShkZXYsICZ0eGN0bF92YWx1ZSwgJnBhZF9taXhfZ2Fpbik7CiAKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykgJiAweEZGRjApCi0JCQkgIHwgcmZhdHQtPmF0dCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0eGN0bF9yZWcsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgdHhjdGxfcmVnKSAmIH50eGN0bF92YWx1ZSkKLQkJCSAgfCAocmZhdHQtPndpdGhfcGFkbWl4KSA/IHR4Y3RsX3ZhbHVlIDogMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIHJmYXR0LT5hdHQpOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgdHhjdGxfcmVnLCB+dHhjdGxfdmFsdWUsIChyZmF0dC0+d2l0aF9wYWRtaXggPyB0eGN0bF92YWx1ZSA6MCkpOwogCiAJbWF4X3J4X2dhaW4gPSByZmF0dC0+YXR0ICogMjsKIAltYXhfcnhfZ2FpbiArPSBiYmF0dC0+YXR0IC8gMjsKQEAgLTgyNCw5ICs3OTcsOSBAQAogLyogR2V0IGEgY2FsaWJyYXRlZCBMTyBzZXR0aW5nIGZvciB0aGUgZ2l2ZW4gYXR0ZW51YXRpb24gdmFsdWVzLgogICogTWlnaHQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIHVuZGVyIE9PTSEgKi8KIHN0YXRpYwotc3RydWN0IGI0M19sb19jYWxpYiAqIGI0M19nZXRfY2FsaWJfbG9fc2V0dGluZ3Moc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCi0JCQkJCQljb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKK3N0cnVjdCBiNDNfbG9fY2FsaWIgKmI0M19nZXRfY2FsaWJfbG9fc2V0dGluZ3Moc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19iYmF0dCAqYmJhdHQsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX3JmYXR0ICpyZmF0dCkKIHsKIAlzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8gPSBkZXYtPnBoeS5nLT5sb19jb250cm9sOwogCXN0cnVjdCBiNDNfbG9fY2FsaWIgKmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCBjNzg4YmFkLi5iNzJlZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTQsNyArNCw3IEBACiAKICAgQ29weXJpZ2h0IChjKSAyMDA1IE1hcnRpbiBMYW5nZXIgPG1hcnRpbi1sYW5nZXJAZ214LmRlPgogICBDb3B5cmlnaHQgKGMpIDIwMDUgU3RlZmFubyBCcml2aW8gPHN0ZWZhbm8uYnJpdmlvQHBvbGltaS5pdD4KLSAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAgIENvcHlyaWdodCAoYykgMjAwNSBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KICAgQ29weXJpZ2h0IChjKSAyMDA1IEFuZHJlYXMgSmFnZ2kgPGFuZHJlYXMuamFnZ2lAd2F0ZXJ3YXZlLmNoPgogCkBAIC04OCw2ICs4OCwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGJ0Y29leCwgbW9kcGFyYW1fYnRjb2V4LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidGNvZXgsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlIChkZWZhdWx0IG9uKSIpOwogCitpbnQgYjQzX21vZHBhcmFtX3ZlcmJvc2UgPSBCNDNfVkVSQk9TSVRZX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW1fbmFtZWQodmVyYm9zZSwgYjQzX21vZHBhcmFtX3ZlcmJvc2UsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZlcmJvc2UsICJMb2cgbWVzc2FnZSB2ZXJib3NpdHk6IDA9ZXJyb3IsIDE9d2FybiwgMj1pbmZvKGRlZmF1bHQpLCAzPWRlYnVnIik7CisKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzc2JfZGV2aWNlX2lkIGI0M19zc2JfdGJsW10gPSB7CiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCA1KSwKQEAgLTk3LDYgKzEwMSw4IEBACiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMCksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMSksCiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxMyksCisJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxNSksCisJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCAxNiksCiAJU1NCX0RFVlRBQkxFX0VORAogfTsKIApAQCAtMjk4LDYgKzMwNCw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9JTkZPKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMTEsNiArMzE5LDggQEAKIHsKIAl2YV9saXN0IGFyZ3M7CiAKKwlpZiAoYjQzX21vZHBhcmFtX3ZlcmJvc2UgPCBCNDNfVkVSQk9TSVRZX0VSUk9SKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMjQsNiArMzM0LDggQEAKIHsKIAl2YV9saXN0IGFyZ3M7CiAKKwlpZiAoYjQzX21vZHBhcmFtX3ZlcmJvc2UgPCBCNDNfVkVSQk9TSVRZX1dBUk4pCisJCXJldHVybjsKIAlpZiAoIWI0M19yYXRlbGltaXQod2wpKQogCQlyZXR1cm47CiAJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTMzMywxOCArMzQ1LDE4IEBACiAJdmFfZW5kKGFyZ3MpOwogfQogCi0jaWYgQjQzX0RFQlVHCiB2b2lkIGI0M2RiZyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9ERUJVRykKKwkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgImI0My0lcyBkZWJ1ZzogIiwKIAkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iKTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogfQotI2VuZGlmIC8qIERFQlVHICovCiAKIHN0YXRpYyB2b2lkIGI0M19yYW1fd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MzIgdmFsKQogewpAQCAtNTAwLDcgKzUxMiw3IEBACiB9CiAKIC8qIFJlYWQgSG9zdEZsYWdzICovCi11NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqIGRldikKK3U2NCBiNDNfaGZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJdTY0IHJldDsKIApAQCAtNTI2LDUyICs1MzgsMjAgQEAKIAliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9IT1NURkhJLCBoaSk7CiB9CiAKLXZvaWQgYjQzX3RzZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0ICogdHNmKQordm9pZCBiNDNfdHNmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgKnRzZikKIHsKLQkvKiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwuIEFzIHdlIHJlYWQgdGhlIFRTRiBmcm9tIG11bHRpcGxlCi0JICogcmVnaXN0ZXJzLCB3ZSBzaG91bGQgdGFrZSBjYXJlIG9mIHJlZ2lzdGVyIG92ZXJmbG93cy4KLQkgKiBJbiB0aGVvcnksIHRoZSB3aG9sZSB0c2YgcmVhZCBwcm9jZXNzIHNob3VsZCBiZSBhdG9taWMuCi0JICogV2UgdHJ5IHRvIGJlIGF0b21pYyBoZXJlLCBieSByZXN0YXJpbmcgdGhlIHJlYWQgcHJvY2VzcywKLQkgKiBpZiBhbnkgb2YgdGhlIGhpZ2ggcmVnaXN0ZXJzIGNoYW5nZWQgKG92ZXJmbGV3KS4KLQkgKi8KLQlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDMpIHsKLQkJdTMyIGxvdywgaGlnaCwgaGlnaDI7CisJdTMyIGxvdywgaGlnaDsKIAotCQlkbyB7Ci0JCQloaWdoID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKLQkJCWxvdyA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XKTsKLQkJCWhpZ2gyID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKLQkJfSB3aGlsZSAodW5saWtlbHkoaGlnaCAhPSBoaWdoMikpOworCUI0M19XQVJOX09OKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDMpOwogCi0JCSp0c2YgPSBoaWdoOwotCQkqdHNmIDw8PSAzMjsKLQkJKnRzZiB8PSBsb3c7Ci0JfSBlbHNlIHsKLQkJdTY0IHRtcDsKLQkJdTE2IHYwLCB2MSwgdjIsIHYzOwotCQl1MTYgdGVzdDEsIHRlc3QyLCB0ZXN0MzsKKwkvKiBUaGUgaGFyZHdhcmUgZ3VhcmFudGVlcyB1cyBhbiBhdG9taWMgcmVhZCwgaWYgd2UKKwkgKiByZWFkIHRoZSBsb3cgcmVnaXN0ZXIgZmlyc3QuICovCisJbG93ID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1cpOworCWhpZ2ggPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0hJR0gpOwogCi0JCWRvIHsKLQkJCXYzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8zKTsKLQkJCXYyID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8yKTsKLQkJCXYxID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8xKTsKLQkJCXYwID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8wKTsKLQotCQkJdGVzdDMgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fVFNGXzMpOwotCQkJdGVzdDIgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fVFNGXzIpOwotCQkJdGVzdDEgPSBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fVFNGXzEpOwotCQl9IHdoaWxlICh2MyAhPSB0ZXN0MyB8fCB2MiAhPSB0ZXN0MiB8fCB2MSAhPSB0ZXN0MSk7Ci0KLQkJKnRzZiA9IHYzOwotCQkqdHNmIDw8PSA0ODsKLQkJdG1wID0gdjI7Ci0JCXRtcCA8PD0gMzI7Ci0JCSp0c2YgfD0gdG1wOwotCQl0bXAgPSB2MTsKLQkJdG1wIDw8PSAxNjsKLQkJKnRzZiB8PSB0bXA7Ci0JCSp0c2YgfD0gdjA7Ci0JfQorCSp0c2YgPSBoaWdoOworCSp0c2YgPDw9IDMyOworCSp0c2YgfD0gbG93OwogfQogCiBzdGF0aWMgdm9pZCBiNDNfdGltZV9sb2NrKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTU5OCwzNSArNTc4LDE4IEBACiAKIHN0YXRpYyB2b2lkIGI0M190c2Zfd3JpdGVfbG9ja2VkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHRzZikKIHsKLQkvKiBCZSBjYXJlZnVsIHdpdGggdGhlIGluLXByb2dyZXNzIHRpbWVyLgotCSAqIEZpcnN0IHplcm8gb3V0IHRoZSBsb3cgcmVnaXN0ZXIsIHNvIHdlIGhhdmUgYSBmdWxsCi0JICogcmVnaXN0ZXItb3ZlcmZsb3cgZHVyYXRpb24gdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbi4KLQkgKi8KLQlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDMpIHsKLQkJdTMyIGxvID0gKHRzZiAmIDB4MDAwMDAwMDBGRkZGRkZGRlVMTCk7Ci0JCXUzMiBoaSA9ICh0c2YgJiAweEZGRkZGRkZGMDAwMDAwMDBVTEwpID4+IDMyOworCXUzMiBsb3csIGhpZ2g7CiAKLQkJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XLCAwKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0hJR0gsIGhpKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgbG8pOwotCX0gZWxzZSB7Ci0JCXUxNiB2MCA9ICh0c2YgJiAweDAwMDAwMDAwMDAwMEZGRkZVTEwpOwotCQl1MTYgdjEgPSAodHNmICYgMHgwMDAwMDAwMEZGRkYwMDAwVUxMKSA+PiAxNjsKLQkJdTE2IHYyID0gKHRzZiAmIDB4MDAwMEZGRkYwMDAwMDAwMFVMTCkgPj4gMzI7Ci0JCXUxNiB2MyA9ICh0c2YgJiAweEZGRkYwMDAwMDAwMDAwMDBVTEwpID4+IDQ4OworCUI0M19XQVJOX09OKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDMpOwogCi0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzAsIDApOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMywgdjMpOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMiwgdjIpOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMSwgdjEpOwotCQltbWlvd2IoKTsKLQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19UU0ZfMCwgdjApOwotCX0KKwlsb3cgPSB0c2Y7CisJaGlnaCA9ICh0c2YgPj4gMzIpOworCS8qIFRoZSBoYXJkd2FyZSBndWFyYW50ZWVzIHVzIGFuIGF0b21pYyB3cml0ZSwgaWYgd2UKKwkgKiB3cml0ZSB0aGUgbG93IHJlZ2lzdGVyIGZpcnN0LiAqLworCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgbG93KTsKKwltbWlvd2IoKTsKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdILCBoaWdoKTsKKwltbWlvd2IoKTsKIH0KIAogdm9pZCBiNDNfdHNmX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHRzZikKQEAgLTYzNyw3ICs2MDAsNyBAQAogfQogCiBzdGF0aWMKLXZvaWQgYjQzX21hY2ZpbHRlcl9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCBjb25zdCB1OCAqIG1hYykKK3ZvaWQgYjQzX21hY2ZpbHRlcl9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCBjb25zdCB1OCAqbWFjKQogewogCXN0YXRpYyBjb25zdCB1OCB6ZXJvX2FkZHJbRVRIX0FMRU5dID0geyAwIH07CiAJdTE2IGRhdGE7CkBAIC04MjcsNyArNzkwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQga2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJICAgICAgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwgY29uc3QgdTggKiBrZXkpCisJCSAgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sIGNvbnN0IHU4ICprZXkpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJdTMyIG9mZnNldDsKQEAgLTg0OSw3ICs4MTIsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQga2V5bWFjX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggaW5kZXgsIGNvbnN0IHU4ICogYWRkcikKK3N0YXRpYyB2b2lkIGtleW1hY193cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGluZGV4LCBjb25zdCB1OCAqYWRkcikKIHsKIAl1MzIgYWRkcnRtcFsyXSA9IHsgMCwgMCwgfTsKIAl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OwpAQCAtODk5LDcgKzg2Miw3IEBACiAKIHN0YXRpYyB2b2lkIGRvX2tleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgdTggaW5kZXgsIHU4IGFsZ29yaXRobSwKLQkJCSBjb25zdCB1OCAqIGtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICogbWFjX2FkZHIpCisJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAl1OCBidWZbQjQzX1NFQ19LRVlTSVpFXSA9IHsgMCwgfTsKIAl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OwpAQCAtOTIzLDggKzg4Niw4IEBACiAKIHN0YXRpYyBpbnQgYjQzX2tleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgaW50IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgY29uc3QgdTggKiBrZXksIHNpemVfdCBrZXlfbGVuLAotCQkJIGNvbnN0IHU4ICogbWFjX2FkZHIsCisJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sCisJCQkgY29uc3QgdTggKm1hY19hZGRyLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYpCiB7CiAJaW50IGk7CkBAIC05MzcsOCArOTAwLDcgQEAKIAkJQjQzX1dBUk5fT04oZGV2LT5rZXlbaV0ua2V5Y29uZiA9PSBrZXljb25mKTsKIAl9CiAJaWYgKGluZGV4IDwgMCkgewotCQkvKiBFaXRoZXIgcGFpcndpc2Uga2V5IG9yIGFkZHJlc3MgaXMgMDA6MDA6MDA6MDA6MDA6MDAKLQkJICogZm9yIHRyYW5zbWl0LW9ubHkga2V5cy4gU2VhcmNoIHRoZSBpbmRleC4gKi8KKwkJLyogUGFpcndpc2Uga2V5LiBHZXQgYW4gZW1wdHkgc2xvdCBmb3IgdGhlIGtleS4gKi8KIAkJaWYgKGI0M19uZXdfa2lkeF9hcGkoZGV2KSkKIAkJCXN0YV9rZXlzX3N0YXJ0ID0gNDsKIAkJZWxzZQpAQCAtOTUxLDcgKzkxMyw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKGluZGV4IDwgMCkgewotCQkJYjQzZXJyKGRldi0+d2wsICJPdXQgb2YgaGFyZHdhcmUga2V5IG1lbW9yeVxuIik7CisJCQliNDN3YXJuKGRldi0+d2wsICJPdXQgb2YgaGFyZHdhcmUga2V5IG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCX0gZWxzZQpAQCAtMTMyNCw3ICsxMjg2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYjQzX3dyaXRlX3RlbXBsYXRlX2NvbW1vbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgY29uc3QgdTggKiBkYXRhLCB1MTYgc2l6ZSwKKwkJCQkgICAgICBjb25zdCB1OCAqZGF0YSwgdTE2IHNpemUsCiAJCQkJICAgICAgdTE2IHJhbV9vZmZzZXQsCiAJCQkJICAgICAgdTE2IHNobV9zaXplX29mZnNldCwgdTggcmF0ZSkKIHsKQEAgLTE1MTQsOSArMTQ3Niw5IEBACiAgKiAyKSBQYXRjaGluZyBkdXJhdGlvbiBmaWVsZAogICogMykgU3RyaXBwaW5nIFRJTQogICovCi1zdGF0aWMgY29uc3QgdTggKiBiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCSAgdTE2ICpkZXN0X3NpemUsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQorc3RhdGljIGNvbnN0IHU4ICpiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSB1MTYgKmRlc3Rfc2l6ZSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKIAljb25zdCB1OCAqc3JjX2RhdGE7CiAJdTggKmRlc3RfZGF0YTsKQEAgLTE5ODIsNyArMTk0NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZG9fcmVsZWFzZV9mdyhzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQordm9pZCBiNDNfZG9fcmVsZWFzZV9mdyhzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQogewogCXJlbGVhc2VfZmlybXdhcmUoZnctPmRhdGEpOwogCWZ3LT5kYXRhID0gTlVMTDsKQEAgLTE5OTEsMzEgKzE5NTMsMzAgQEAKIAogc3RhdGljIHZvaWQgYjQzX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWRvX3JlbGVhc2VfZncoJmRldi0+ZncudWNvZGUpOwotCWRvX3JlbGVhc2VfZncoJmRldi0+ZncucGNtKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LmluaXR2YWxzKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LmluaXR2YWxzX2JhbmQpOworCWI0M19kb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnVjb2RlKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5wY20pOworCWI0M19kb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LmluaXR2YWxzKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFsc19iYW5kKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3ByaW50X2Z3X2hlbHB0ZXh0KHN0cnVjdCBiNDNfd2wgKndsLCBib29sIGVycm9yKQogewotCWNvbnN0IGNoYXIgKnRleHQ7CisJY29uc3QgY2hhciB0ZXh0W10gPQorCQkiWW91IG11c3QgZ28gdG8gIiBcCisJCSJodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2I0MyNkZXZpY2VmaXJtd2FyZSAiIFwKKwkJImFuZCBkb3dubG9hZCB0aGUgY29ycmVjdCBmaXJtd2FyZSBmb3IgdGhpcyBkcml2ZXIgdmVyc2lvbi4gIiBcCisJCSJQbGVhc2UgY2FyZWZ1bGx5IHJlYWQgYWxsIGluc3RydWN0aW9ucyBvbiB0aGlzIHdlYnNpdGUuXG4iOwogCi0JdGV4dCA9ICJZb3UgbXVzdCBnbyB0byAiCi0JICAgICAgICJodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvZW4vdXNlcnMvRHJpdmVycy9iNDMjZGV2aWNlZmlybXdhcmUgIgotCSAgICAgICAiYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgZmlybXdhcmUgKHZlcnNpb24gNCkuXG4iOwogCWlmIChlcnJvcikKIAkJYjQzZXJyKHdsLCB0ZXh0KTsKIAllbHNlCiAJCWI0M3dhcm4od2wsIHRleHQpOwogfQogCi1zdGF0aWMgaW50IGRvX3JlcXVlc3RfZncoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdywKLQkJCSBib29sIHNpbGVudCkKK2ludCBiNDNfZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4LAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KQogewotCWNoYXIgcGF0aFtzaXplb2YobW9kcGFyYW1fZndwb3N0Zml4KSArIDMyXTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJsb2I7CiAJc3RydWN0IGI0M19md19oZWFkZXIgKmhkcjsKIAl1MzIgc2l6ZTsKQEAgLTIwMjMsMjkgKzE5ODQsNDkgQEAKIAogCWlmICghbmFtZSkgewogCQkvKiBEb24ndCBmZXRjaCBhbnl0aGluZy4gRnJlZSBwb3NzaWJseSBjYWNoZWQgZmlybXdhcmUuICovCi0JCWRvX3JlbGVhc2VfZncoZncpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGtlZXAgaXQgYW55d2F5LCB0byBzYXZlIHNvbWUgaGVhZGFjaGUKKwkJICogb24gc3VzcGVuZC9yZXN1bWUgd2l0aCBtdWx0aWJhbmQgZGV2aWNlcy4gKi8KKwkJYjQzX2RvX3JlbGVhc2VfZncoZncpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGZ3LT5maWxlbmFtZSkgewotCQlpZiAoc3RyY21wKGZ3LT5maWxlbmFtZSwgbmFtZSkgPT0gMCkKKwkJaWYgKChmdy0+dHlwZSA9PSBjdHgtPnJlcV90eXBlKSAmJgorCQkgICAgKHN0cmNtcChmdy0+ZmlsZW5hbWUsIG5hbWUpID09IDApKQogCQkJcmV0dXJuIDA7IC8qIEFscmVhZHkgaGF2ZSB0aGlzIGZ3LiAqLwogCQkvKiBGcmVlIHRoZSBjYWNoZWQgZmlybXdhcmUgZmlyc3QuICovCi0JCWRvX3JlbGVhc2VfZncoZncpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGRvIHRoaXMgbGF0ZXIgYWZ0ZXIgd2Ugc3VjY2Vzc2Z1bGx5CisJCSAqIGdvdCB0aGUgbmV3IGZ3LiBUaGlzIGNvdWxkIHJlZHVjZSBoZWFkYWNoZSB3aXRoIG11bHRpYmFuZCBkZXZpY2VzLgorCQkgKiBXZSBjb3VsZCBhbHNvIHJlZGVzaWduIHRoaXMgdG8gY2FjaGUgdGhlIGZpcm13YXJlIGZvciBhbGwgcG9zc2libGUKKwkJICogYmFuZHMgYWxsIHRoZSB0aW1lLiAqLworCQliNDNfZG9fcmVsZWFzZV9mdyhmdyk7CiAJfQogCi0Jc25wcmludGYocGF0aCwgQVJSQVlfU0laRShwYXRoKSwKLQkJICJiNDMlcy8lcy5mdyIsCi0JCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOwotCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmJsb2IsIHBhdGgsIGRldi0+ZGV2LT5kZXYpOworCXN3aXRjaCAoY3R4LT5yZXFfdHlwZSkgeworCWNhc2UgQjQzX0ZXVFlQRV9QUk9QUklFVEFSWToKKwkJc25wcmludGYoY3R4LT5md25hbWUsIHNpemVvZihjdHgtPmZ3bmFtZSksCisJCQkgImI0MyVzLyVzLmZ3IiwKKwkJCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOworCQlicmVhazsKKwljYXNlIEI0M19GV1RZUEVfT1BFTlNPVVJDRToKKwkJc25wcmludGYoY3R4LT5md25hbWUsIHNpemVvZihjdHgtPmZ3bmFtZSksCisJCQkgImI0My1vcGVuJXMvJXMuZnciLAorCQkJIG1vZHBhcmFtX2Z3cG9zdGZpeCwgbmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYmxvYiwgY3R4LT5md25hbWUsIGN0eC0+ZGV2LT5kZXYtPmRldik7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7Ci0JCWlmICghc2lsZW50KSB7Ci0JCQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIG5vdCBmb3VuZFxuIiwKLQkJCSAgICAgICBwYXRoKTsKLQkJfQorCQlzbnByaW50ZihjdHgtPmVycm9yc1tjdHgtPnJlcV90eXBlXSwKKwkJCSBzaXplb2YoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0pLAorCQkJICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBub3QgZm91bmRcbiIsIGN0eC0+ZnduYW1lKTsKIAkJcmV0dXJuIGVycjsKIAl9IGVsc2UgaWYgKGVycikgewotCQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIHJlcXVlc3QgZmFpbGVkIChlcnI9JWQpXG4iLAotCQkgICAgICAgcGF0aCwgZXJyKTsKKwkJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJCSAiRmlybXdhcmUgZmlsZSBcIiVzXCIgcmVxdWVzdCBmYWlsZWQgKGVycj0lZClcbiIsCisJCQkgY3R4LT5md25hbWUsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChibG9iLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBiNDNfZndfaGVhZGVyKSkKQEAgLTIwNjgsMjAgKzIwNDksMjQgQEAKIAogCWZ3LT5kYXRhID0gYmxvYjsKIAlmdy0+ZmlsZW5hbWUgPSBuYW1lOworCWZ3LT50eXBlID0gY3R4LT5yZXFfdHlwZTsKIAogCXJldHVybiAwOwogCiBlcnJfZm9ybWF0OgotCWI0M2VycihkZXYtPndsLCAiRmlybXdhcmUgZmlsZSBcIiVzXCIgZm9ybWF0IGVycm9yLlxuIiwgcGF0aCk7CisJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCSBzaXplb2YoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0pLAorCQkgIkZpcm13YXJlIGZpbGUgXCIlc1wiIGZvcm1hdCBlcnJvci5cbiIsIGN0eC0+ZnduYW1lKTsKIAlyZWxlYXNlX2Zpcm13YXJlKGJsb2IpOwogCiAJcmV0dXJuIC1FUFJPVE87CiB9CiAKLXN0YXRpYyBpbnQgYjQzX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIGludCBiNDNfdHJ5X3JlcXVlc3RfZncoc3RydWN0IGI0M19yZXF1ZXN0X2Z3X2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgYjQzX2Zpcm13YXJlICpmdyA9ICZkZXYtPmZ3OwotCWNvbnN0IHU4IHJldiA9IGRldi0+ZGV2LT5pZC5yZXZpc2lvbjsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzdHJ1Y3QgYjQzX2Zpcm13YXJlICpmdyA9ICZjdHgtPmRldi0+Znc7CisJY29uc3QgdTggcmV2ID0gY3R4LT5kZXYtPmRldi0+aWQucmV2aXNpb247CiAJY29uc3QgY2hhciAqZmlsZW5hbWU7CiAJdTMyIHRtc2hpZ2g7CiAJaW50IGVycjsKQEAgLTIwOTYsNyArMjA4MSw3IEBACiAJCWZpbGVuYW1lID0gInVjb2RlMTMiOwogCWVsc2UKIAkJZ290byBlcnJfbm9fdWNvZGU7Ci0JZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPnVjb2RlLCAwKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPnVjb2RlKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCkBAIC0yMTA4LDcgKzIwOTMsNyBAQAogCWVsc2UKIAkJZ290byBlcnJfbm9fcGNtOwogCWZ3LT5wY21fcmVxdWVzdF9mYWlsZWQgPSAwOwotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5wY20sIDEpOworCWVyciA9IGI0M19kb19yZXF1ZXN0X2Z3KGN0eCwgZmlsZW5hbWUsICZmdy0+cGNtKTsKIAlpZiAoZXJyID09IC1FTk9FTlQpIHsKIAkJLyogV2UgZGlkIG5vdCBmaW5kIGEgUENNIGZpbGU/IE5vdCBmYXRhbCwgYnV0CiAJCSAqIGNvcmUgcmV2IDw9IDEwIG11c3QgZG8gd2l0aG91dCBod2NyeXB0byB0aGVuLiAqLwpAQCAtMjE0NCw3ICsyMTI5LDcgQEAKIAlkZWZhdWx0OgogCQlnb3RvIGVycl9ub19pbml0dmFsczsKIAl9Ci0JZXJyID0gZG9fcmVxdWVzdF9mdyhkZXYsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzLCAwKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCkBAIC0yMTc4LDMwICsyMTYzLDM0IEBACiAJZGVmYXVsdDoKIAkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJfQotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFsc19iYW5kLCAwKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPmluaXR2YWxzX2JhbmQpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2xvYWQ7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2xvYWQ6Ci0JYjQzX3ByaW50X2Z3X2hlbHB0ZXh0KGRldi0+d2wsIDEpOwotCWdvdG8gZXJyb3I7Ci0KIGVycl9ub191Y29kZToKLQllcnIgPSAtRU5PREVWOwotCWI0M2VycihkZXYtPndsLCAiTm8gbWljcm9jb2RlIGF2YWlsYWJsZSBmb3IgY29yZSByZXYgJXVcbiIsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKHVjb2RlKSAiCisJICAgICAgICJpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgKHdsLWNvcmUgcmV2ICV1KVxuIiwgcmV2KTsKIAlnb3RvIGVycm9yOwogCiBlcnJfbm9fcGNtOgotCWVyciA9IC1FTk9ERVY7Ci0JYjQzZXJyKGRldi0+d2wsICJObyBQQ00gYXZhaWxhYmxlIGZvciBjb3JlIHJldiAldVxuIiwgcmV2KTsKKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmUgPSAtRU9QTk9UU1VQUDsKKwliNDNlcnIoZGV2LT53bCwgIlRoZSBkcml2ZXIgZG9lcyBub3Qga25vdyB3aGljaCBmaXJtd2FyZSAoUENNKSAiCisJICAgICAgICJpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgKHdsLWNvcmUgcmV2ICV1KVxuIiwgcmV2KTsKIAlnb3RvIGVycm9yOwogCiBlcnJfbm9faW5pdHZhbHM6Ci0JZXJyID0gLUVOT0RFVjsKLQliNDNlcnIoZGV2LT53bCwgIk5vIEluaXRpYWwgVmFsdWVzIGZpcm13YXJlIGZpbGUgZm9yIFBIWSAldSwgIgotCSAgICAgICAiY29yZSByZXYgJXVcbiIsIGRldi0+cGh5LnR5cGUsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKGluaXR2YWxzKSAiCisJICAgICAgICJpcyByZXF1aXJlZCBmb3IgeW91ciBkZXZpY2UgKHdsLWNvcmUgcmV2ICV1KVxuIiwgcmV2KTsKKwlnb3RvIGVycm9yOworCitlcnJfbG9hZDoKKwkvKiBXZSBmYWlsZWQgdG8gbG9hZCB0aGlzIGZpcm13YXJlIGltYWdlLiBUaGUgZXJyb3IgbWVzc2FnZQorCSAqIGFscmVhZHkgaXMgaW4gY3R4LT5lcnJvcnMuIFJldHVybiBhbmQgbGV0IG91ciBjYWxsZXIgZGVjaWRlCisJICogd2hhdCB0byBkby4gKi8KIAlnb3RvIGVycm9yOwogCiBlcnJvcjoKQEAgLTIyMDksNiArMjE5OCw0OCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYjQzX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0ICpjdHg7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVycjsKKwljb25zdCBjaGFyICplcnJtc2c7CisKKwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCWN0eC0+ZGV2ID0gZGV2OworCisJY3R4LT5yZXFfdHlwZSA9IEI0M19GV1RZUEVfUFJPUFJJRVRBUlk7CisJZXJyID0gYjQzX3RyeV9yZXF1ZXN0X2Z3KGN0eCk7CisJaWYgKCFlcnIpCisJCWdvdG8gb3V0OyAvKiBTdWNjZXNzZnVsbHkgbG9hZGVkIGl0LiAqLworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWN0eC0+cmVxX3R5cGUgPSBCNDNfRldUWVBFX09QRU5TT1VSQ0U7CisJZXJyID0gYjQzX3RyeV9yZXF1ZXN0X2Z3KGN0eCk7CisJaWYgKCFlcnIpCisJCWdvdG8gb3V0OyAvKiBTdWNjZXNzZnVsbHkgbG9hZGVkIGl0LiAqLworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIENvdWxkIG5vdCBmaW5kIGEgdXNhYmxlIGZpcm13YXJlLiBQcmludCB0aGUgZXJyb3JzLiAqLworCWZvciAoaSA9IDA7IGkgPCBCNDNfTlJfRldUWVBFUzsgaSsrKSB7CisJCWVycm1zZyA9IGN0eC0+ZXJyb3JzW2ldOworCQlpZiAoc3RybGVuKGVycm1zZykpCisJCQliNDNlcnIoZGV2LT53bCwgZXJybXNnKTsKKwl9CisJYjQzX3ByaW50X2Z3X2hlbHB0ZXh0KGRldi0+d2wsIDEpOworCWVyciA9IC1FTk9FTlQ7CisKK291dDoKKwlrZnJlZShjdHgpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYjQzX3VwbG9hZF9taWNyb2NvZGUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCWNvbnN0IHNpemVfdCBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBiNDNfZndfaGVhZGVyKTsKQEAgLTIzMTksOCArMjM1MCwxMSBAQAogCX0KIAogCWlmIChiNDNfaXNfb2xkX3R4aGRyX2Zvcm1hdChkZXYpKSB7CisJCS8qIFdlJ3JlIG92ZXIgdGhlIGRlYWRsaW5lLCBidXQgd2Uga2VlcCBzdXBwb3J0IGZvciBvbGQgZncKKwkJICogdW50aWwgaXQgdHVybnMgb3V0IHRvIGJlIGluIG1ham9yIGNvbmZsaWN0IHdpdGggc29tZXRoaW5nIG5ldy4gKi8KIAkJYjQzd2FybihkZXYtPndsLCAiWW91IGFyZSB1c2luZyBhbiBvbGQgZmlybXdhcmUgaW1hZ2UuICIKLQkJCSJTdXBwb3J0IGZvciBvbGQgZmlybXdhcmUgd2lsbCBiZSByZW1vdmVkIGluIEp1bHkgMjAwOC5cbiIpOworCQkJIlN1cHBvcnQgZm9yIG9sZCBmaXJtd2FyZSB3aWxsIGJlIHJlbW92ZWQgc29vbiAiCisJCQkiKG9mZmljaWFsIGRlYWRsaW5lIHdhcyBKdWx5IDIwMDgpLlxuIik7CiAJCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAwKTsKIAl9CiAKQEAgLTI5NDYsNyArMjk4MCw3IEBACiAJYjQzX2NsZWFyX2tleXMoZGV2KTsKIH0KIAotc3RhdGljIGludCBiNDNfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqIGRhdGEpCitzdGF0aWMgaW50IGI0M19ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdTMyICpkYXRhKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gKHN0cnVjdCBiNDNfd2wgKilybmctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMyMjEsNiArMzI1NSw0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IGI0M19vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisJdTY0IHRzZjsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKQorCQliNDNfdHNmX3JlYWQoZGV2LCAmdHNmKTsKKwllbHNlCisJCXRzZiA9IDA7CisKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHRzZjsKK30KKworc3RhdGljIHZvaWQgYjQzX29wX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKQorCQliNDNfdHNmX3dyaXRlKGRldiwgdHNmKTsKKworCXNwaW5fdW5sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIGI0M19wdXRfcGh5X2ludG9fcmVzZXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBzc2JfZGV2aWNlICpzZGV2ID0gZGV2LT5kZXY7CkBAIC0zMjQwLDcgKzMzMTEsNyBAQAogCW1zbGVlcCgxKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBiYW5kX3RvX3N0cmluZyhlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCitzdGF0aWMgY29uc3QgY2hhciAqYmFuZF90b19zdHJpbmcoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXN3aXRjaCAoYmFuZCkgewogCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKQEAgLTM0NDIsNyArMzUxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCBicmF0ZXMpCitzdGF0aWMgdm9pZCBiNDNfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGJyYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiAJCWRldi0+d2wtPmh3LT53aXBoeS0+YmFuZHNbYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKV07CkBAIC0zNTIwLDIxICszNTkxLDI5IEBACiB9CiAKIHN0YXRpYyBpbnQgYjQzX29wX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGFsZ29yaXRobTsKIAl1OCBpbmRleDsKIAlpbnQgZXJyOworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCiAJaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKIAkJcmV0dXJuIC1FTk9TUEM7IC8qIFVzZXIgZGlzYWJsZWQgSFctY3J5cHRvICovCiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOworCXdyaXRlX2xvY2soJndsLT50eF9sb2NrKTsKKwkvKiBXaHkgZG8gd2UgbmVlZCBhbGwgdGhpcyBsb2NraW5nIGhlcmU/CisJICogbXV0ZXggICAgIC0+IEV2ZXJ5IGNvbmZpZyBvcGVyYXRpb24gbXVzdCB0YWtlIGl0LgorCSAqIGlycV9sb2NrICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAorCSAqICAgICAgICAgICAgICBpbiB0aGUgSVJRIGhhbmRsZXJzLgorCSAqIHR4X2xvY2sgICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAorCSAqICAgICAgICAgICAgICBpbiB0aGUgVFggaGFuZGxlci4KKwkgKi8KIAogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAllcnIgPSAtRU5PREVWOwpAQCAtMzU1MSw3ICszNjMwLDcgQEAKIAllcnIgPSAtRUlOVkFMOwogCXN3aXRjaCAoa2V5LT5hbGcpIHsKIAljYXNlIEFMR19XRVA6Ci0JCWlmIChrZXktPmtleWxlbiA9PSA1KQorCQlpZiAoa2V5LT5rZXlsZW4gPT0gTEVOX1dFUDQwKQogCQkJYWxnb3JpdGhtID0gQjQzX1NFQ19BTEdPX1dFUDQwOwogCQllbHNlCiAJCQlhbGdvcml0aG0gPSBCNDNfU0VDX0FMR09fV0VQMTA0OwpAQCAtMzU3OCwxNyArMzY1NywxOSBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKLQkJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKSB7Ci0JCQkvKiBhZGRyIGlzIEZGOkZGOkZGOkZGOkZGOkZGIGZvciBkZWZhdWx0IGtleXMgKi8KKwkJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIHsKKwkJCWlmIChXQVJOX09OKCFzdGEpKSB7CisJCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQkJLyogUGFpcndpc2Uga2V5IHdpdGggYW4gYXNzaWduZWQgTUFDIGFkZHJlc3MuICovCisJCQllcnIgPSBiNDNfa2V5X3dyaXRlKGRldiwgLTEsIGFsZ29yaXRobSwKKwkJCQkJICAgIGtleS0+a2V5LCBrZXktPmtleWxlbiwKKwkJCQkJICAgIHN0YS0+YWRkciwga2V5KTsKKwkJfSBlbHNlIHsKKwkJCS8qIEdyb3VwIGtleSAqLwogCQkJZXJyID0gYjQzX2tleV93cml0ZShkZXYsIGluZGV4LCBhbGdvcml0aG0sCiAJCQkJCSAgICBrZXktPmtleSwga2V5LT5rZXlsZW4sIE5VTEwsIGtleSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogZWl0aGVyIHBhaXJ3aXNlIGtleSBvciBhZGRyZXNzIGlzIDAwOjAwOjAwOjAwOjAwOjAwCi0JCQkgKiBmb3IgdHJhbnNtaXQtb25seSBrZXlzCi0JCQkgKi8KLQkJCWVyciA9IGI0M19rZXlfd3JpdGUoZGV2LCAtMSwgYWxnb3JpdGhtLAotCQkJCQkgICAga2V5LT5rZXksIGtleS0+a2V5bGVuLCBhZGRyLCBrZXkpOwogCQl9CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bmxvY2s7CkBAIC0zNjE3LDEwICszNjk4LDExIEBACiAJCWI0M2RiZyh3bCwgIiVzIGhhcmR3YXJlIGJhc2VkIGVuY3J5cHRpb24gZm9yIGtleWlkeDogJWQsICIKIAkJICAgICAgICJtYWM6ICVwTVxuIiwKIAkJICAgICAgIGNtZCA9PSBTRVRfS0VZID8gIlVzaW5nIiA6ICJEaXNhYmxpbmciLCBrZXktPmtleWlkeCwKLQkJICAgICAgIGFkZHIpOworCQkgICAgICAgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkcik7CiAJCWI0M19kdW1wX2tleW1lbW9yeShkZXYpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwl3cml0ZV91bmxvY2soJndsLT50eF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKQEAgLTM3OTYsNiArMzg3OCwxMiBAQAogCQlicmVhazsKICNpZmRlZiBDT05GSUdfQjQzX05QSFkKIAljYXNlIEI0M19QSFlUWVBFX046CisJCWlmIChwaHlfcmV2ID4gNCkKKwkJCXVuc3VwcG9ydGVkID0gMTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQjQzX1BIWV9MUAorCWNhc2UgQjQzX1BIWVRZUEVfTFA6CiAJCWlmIChwaHlfcmV2ID4gMSkKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CkBAIC0zODQ5LDcgKzM5MzcsMTEgQEAKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBCNDNfUEhZVFlQRV9OOgotCQlpZiAocmFkaW9fdmVyICE9IDB4MjA1NSkKKwkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNTUgJiYgcmFkaW9fdmVyICE9IDB4MjA1NikKKwkJCXVuc3VwcG9ydGVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfUEhZVFlQRV9MUDoKKwkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNjIpCiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00MDc4LDExICs0MTcwLDIxIEBACiAJCQloZiB8PSBCNDNfSEZfR0RDVzsKIAkJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpCiAJCQloZiB8PSBCNDNfSEZfT0ZETVBBQk9PU1Q7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQloZiB8PSBCNDNfSEZfU1lNVzsKLQkJaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQkJaGYgJj0gfkI0M19IRl9HRENXOwogCX0KKwlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7CisJCWlmIChwaHktPnJhZGlvX3JldiA9PSA2KQorCQkJaGYgfD0gQjQzX0hGXzQzMThUU1NJOworCQlpZiAocGh5LT5yYWRpb19yZXYgPCA2KQorCQkJaGYgfD0gQjQzX0hGX1ZDT1JFQ0FMQzsKKwl9CisJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9YVEFMX05PU0xPVykKKwkJaGYgfD0gQjQzX0hGX0RTQ1JROyAvKiBEaXNhYmxlIHNsb3djbG9jayByZXF1ZXN0cyBmcm9tIHVjb2RlLiAqLworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlpZiAoKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpICYmCisJICAgIChidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpCisJCWhmIHw9IEI0M19IRl9QQ0lTQ1c7IC8qIFBDSSBzbG93IGNsb2NrIHdvcmthcm91bmQuICovCisjZW5kaWYKKwloZiAmPSB+QjQzX0hGX1NLQ0ZQVVA7CiAJYjQzX2hmX3dyaXRlKGRldiwgaGYpOwogCiAJYjQzX3NldF9yZXRyeV9saW1pdHMoZGV2LCBCNDNfREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTQxMjEsNyArNDIyMyw3IEBACiAJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKLQlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLworCXNzYl9idXNfcG93ZXJ1cChidXMsICEoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1hUQUxfTk9TTE9XKSk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKIAliNDNfc2VjdXJpdHlfaW5pdChkZXYpOwogCWlmICghZGV2LT5zdXNwZW5kX2luX3Byb2dyZXNzKQpAQCAtNDMwNSw2ICs0NDA3LDM0IEBACiAJQjQzX1dBUk5fT04oIXZpZiB8fCB3bC0+dmlmICE9IHZpZik7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKSB7CisJCS8qIERpc2FibGUgQ0ZQIHVwZGF0ZSBkdXJpbmcgc2NhbiBvbiBvdGhlciBjaGFubmVscy4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9TS0NGUFVQKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkgeworCQkvKiBSZS1lbmFibGUgQ0ZQIHVwZGF0ZS4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfU0tDRlBVUCk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGI0M19od19vcHMgPSB7CiAJLnR4CQkJPSBiNDNfb3BfdHgsCiAJLmNvbmZfdHgJCT0gYjQzX29wX2NvbmZfdHgsCkBAIC00MzE3LDEwICs0NDQ3LDE0IEBACiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKKwkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZgkJPSBiNDNfb3Bfc2V0X3RzZiwKIAkuc3RhcnQJCQk9IGI0M19vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzX29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzX29wX2JlYWNvbl9zZXRfdGltLAogCS5zdGFfbm90aWZ5CQk9IGI0M19vcF9zdGFfbm90aWZ5LAorCS5zd19zY2FuX3N0YXJ0CQk9IGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyLAorCS5zd19zY2FuX2NvbXBsZXRlCT0gYjQzX29wX3N3X3NjYW5fY29tcGxldGVfbm90aWZpZXIsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtNDQ0Niw2ICs0NTgwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NjU3LDkgKzQ3OTIsMTAgQEAKIAlJTklUX1dPUksoJndsLT50eHBvd2VyX2FkanVzdF93b3JrLCBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmspOwogCiAJc3NiX3NldF9kZXZ0eXBlZGF0YShkZXYsIHdsKTsKLQliNDNpbmZvKHdsLCAiQnJvYWRjb20gJTA0WCBXTEFOIGZvdW5kXG4iLCBkZXYtPmJ1cy0+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+MHhGMDAwLCAweDMwMDApOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgpICYgMHg4MDgwKSB8IDB4Nzg3NCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZTUkNISURYLCAweDgwODAsIDB4Nzg3NCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhFKSwgMHgxQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwgfjB4MEYwMCwgMHgwNjAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhCKSwgMHgwMDVFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKSAmIH4weDAwRkYpIHwgMHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIH4weDAwRkYsIDB4MDAxRSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4RCksIDB4MDAwMik7CiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MzX1IxLCAwLCAwKTsKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzNfUjEsIDEsIDcpOwpAQCAtNDY5LDEwICs0MzMsOCBAQAogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMywgMywgMjgpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDAwMDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDEwMDApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDAwMDMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDEwMDApOwogCX0KIAliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1ZFUlNJT05fT0ZETSk7IC8qIER1bW15IHJlYWQgKi8KIH0KQEAgLTUzOCw4ICs1MDAsNyBAQAogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAyLCAweDAwMDEpOwogCQkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgJiYKIAkJCSAgICAocGh5LT5yZXYgPj0gNykpIHsKLQkJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MTEpLAotCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSkpICYgMHhGN0ZGKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSksIDB4RjdGRik7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjAsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjEsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjIsIDB4MDAwMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCBlYWU5YjgwLi4wZjUzYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTUzOCw4ICs1MzgsMTQgQEAKIAljaGFuc3RhdCA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5jaGFubmVsKTsKIAlwaHl0eXBlID0gY2hhbnN0YXQgJiBCNDNfUlhfQ0hBTl9QSFlUWVBFOwogCi0JaWYgKG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikKKwlpZiAodW5saWtlbHkobWFjc3RhdCAmIEI0M19SWF9NQUNfRkNTRVJSKSkgewogCQlkZXYtPndsLT5pZWVlX3N0YXRzLmRvdDExRkNTRXJyb3JDb3VudCsrOworCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCX0KKwlpZiAodW5saWtlbHkocGh5c3RhdDAgJiAoQjQzX1JYX1BIWVNUMF9QTENQSENGIHwgQjQzX1JYX1BIWVNUMF9QTENQRlYpKSkKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfUExDUF9DUkM7CisJaWYgKHBoeXN0YXQwICYgQjQzX1JYX1BIWVNUMF9TSE9SVFBSTUJMKQorCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwogCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19ERUNFUlIpIHsKIAkJLyogRGVjcnlwdGlvbiB3aXRoIHRoZSBnaXZlbiBrZXkgZmFpbGVkLgogCQkgKiBEcm9wIHRoZSBwYWNrZXQuIFdlIGFsc28gd29uJ3QgYmUgYWJsZSB0byBkZWNyeXB0IGl0IHdpdGgKQEAgLTYwNiw4ICs2MTIsMTIgQEAKIAkJCQkJCXBoeXR5cGUgPT0gQjQzX1BIWVRZUEVfQSk7CiAJZWxzZQogCQlzdGF0dXMucmF0ZV9pZHggPSBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfY2NrKHBsY3ApOwotCWlmICh1bmxpa2VseShzdGF0dXMucmF0ZV9pZHggPT0gLTEpKQotCQlnb3RvIGRyb3A7CisJaWYgKHVubGlrZWx5KHN0YXR1cy5yYXRlX2lkeCA9PSAtMSkpIHsKKwkJLyogUExDUCBzZWVtcyB0byBiZSBjb3JydXB0ZWQuCisJCSAqIERyb3AgdGhlIGZyYW1lLCBpZiB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY29ycnVwdGVkIGZyYW1lcy4gKi8KKwkJaWYgKCEoZGV2LT53bC0+ZmlsdGVyX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSkKKwkJCWdvdG8gZHJvcDsKKwl9CiAJc3RhdHVzLmFudGVubmEgPSAhIShwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfQU5UKTsKIAogCS8qCkBAIC02NjEsNyArNjcxLDYgQEAKIAkJZ290byBkcm9wOwogCX0KIAotCWRldi0+c3RhdHMubGFzdF9yeCA9IGppZmZpZXM7CiAJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LT53bC0+aHcsIHNrYiwgJnN0YXR1cyk7CiAKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYwppbmRleCBjYWNiNzg2Li4zZWE1NWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmMKQEAgLTE0NiwxMiArMTQ2LDEyIEBACiAJY2FzZSBCNDNsZWdhY3lfTEVEX1RSQU5TRkVSOgogCWNhc2UgQjQzbGVnYWN5X0xFRF9BUFRSQU5TRkVSOgogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczp0eCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3R4LCBuYW1lLAogCQkJCSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGh3KSwKIAkJCQkgbGVkX2luZGV4LCBhY3RpdmVsb3cpOwogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczpyeCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3J4LCBuYW1lLAogCQkJCSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSwKIAkJCQkgbGVkX2luZGV4LCBhY3RpdmVsb3cpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJY2FzZSBCNDNsZWdhY3lfTEVEX1JBRElPX0I6CiAJY2FzZSBCNDNsZWdhY3lfTEVEX01PREVfQkc6CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiYjQzbGVnYWN5LSVzOnJhZGlvIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCSAiYjQzbGVnYWN5LSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAJCWI0M2xlZ2FjeV9yZWdpc3Rlcl9sZWQoZGV2LCAmZGV2LT5sZWRfcmFkaW8sIG5hbWUsCiAJCQkJIGI0M2xlZ2FjeV9yZmtpbGxfbGVkX25hbWUoZGV2KSwKIAkJCQkgbGVkX2luZGV4LCBhY3RpdmVsb3cpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJY2FzZSBCNDNsZWdhY3lfTEVEX1dFSVJEOgogCWNhc2UgQjQzbGVnYWN5X0xFRF9BU1NPQzoKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6YXNzb2MiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OmFzc29jIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF9hc3NvYywgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IGZiOTk2YzIuLjg3OWVkYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMjY1MCw3ICsyNjUwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwgdTY0IGJyYXRlcykKK3N0YXRpYyB2b2lkIGI0M2xlZ2FjeV91cGRhdGVfYmFzaWNfcmF0ZXMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LCB1MzIgYnJhdGVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KIAkJZGV2LT53bC0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaAppbmRleCAyNDUzZGVhLi5jZTg3MjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCkBAIC0zMSw3ICszMSw3IEBACiB2b2lkIGhvc3RhcF9kdW1wX3R4X2hlYWRlcihjb25zdCBjaGFyICpuYW1lLAogCQkJICAgY29uc3Qgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUgKnR4KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBob3N0YXBfODAyMTFfb3BzOwotaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHUxNiBmYyk7CitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKTsKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpob3N0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBob3N0YXBfc2V0dXBfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGxvY2FsX2luZm9fdCAqbG9jYWwsCiAJCSAgICAgIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaAppbmRleCAzYTk0NzRkLi4yZTlmYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBIT1NUQVBfODAyMTFfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIHN0cnVjdCBob3N0YXBfaWVlZTgwMjExX21nbXQgewogCV9fbGUxNiBmcmFtZV9jb250cm9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCmluZGV4IDE5YjFiZjAuLjM4MTZkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAogI2luY2x1ZGUgImhvc3RhcF84MDIxMS5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgpAQCAtMTcsMTAgKzE4LDEwIEBACiB2b2lkIGhvc3RhcF9kdW1wX3J4XzgwMjExKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBzaWduYWw9JWQgbm9pc2U9JWQgcmF0ZT0lZCBsZW49JWQgIgogCSAgICAgICAiamlmZmllcz0lbGRcbiIsCkBAIC0zMCw5ICszMSwxMCBAQAogCWlmIChza2ItPmxlbiA8IDIpCiAJCXJldHVybjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgRkM9MHglMDR4ICh0eXBlPSVkOiVkKSVzJXMiLAotCSAgICAgICBmYywgV0xBTl9GQ19HRVRfVFlQRShmYykgPj4gMiwgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID4+IDQsCisJICAgICAgIGZjLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMiwKKwkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUyA/ICIgW1RvRFNdIiA6ICIiLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgW0Zyb21EU10iIDogIiIpOwogCkBAIC00Miw3ICs0NCw3IEBACiAJfQogCiAJcHJpbnRrKCIgZHVyPTB4JTA0eCBzZXE9MHglMDR4XG4iLCBsZTE2X3RvX2NwdShoZHItPmR1cmF0aW9uX2lkKSwKLQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgICBBMT0lcE0iLCBoZHItPmFkZHIxKTsKIAlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKQEAgLTYzLDcgKzY1LDcgQEAKIAlpbnQgaGRybGVuLCBwaGRybGVuLCBoZWFkX25lZWQsIHRhaWxfbmVlZDsKIAl1MTYgZmM7CiAJaW50IHByaXNtX2hlYWRlciwgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpmaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmaGRyOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtODQsOCArODYsOCBAQAogCQlwaGRybGVuID0gMDsKIAl9CiAKLQlmaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGZoZHItPmZyYW1lX2N0bCk7CisJZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShmaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmICh0eXBlID09IFBSSVNNMl9SWF9NR01UICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBtYW5hZ2VtZW50IGZyYW1lIHdpdGggaGVhZGVyICIKQEAgLTk0LDcgKzk2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIGV4dHJhIGRhdGE7IGlmIG5vdCwgZXhwYW5kIHNrYgogCSAqIGJ1ZmZlciB0byBiZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBjaGFuZ2VzICovCkBAIC0xOTMsNyArMTk1LDcgQEAKIAlpZiAocHJpc21faGVhZGVyKQogCQlza2JfcHVsbChza2IsIHBoZHJsZW4pOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8yKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpOwogCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwogCW5ldGlmX3J4KHNrYik7CiAKQEAgLTIwNSwxMyArMjA3LDExIEBACiBzdGF0aWMgdm9pZCBtb25pdG9yX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCWludCBsZW47CiAKIAlsZW4gPSBwcmlzbTJfcnhfODAyMTEoZGV2LCBza2IsIHJ4X3N0YXRzLCBQUklTTTJfUlhfTU9OSVRPUik7Ci0Jc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7Ci0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogfQogCiAKQEAgLTI0NywyMSArMjQ3LDIxIEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICoKLXByaXNtMl9mcmFnX2NhY2hlX2dldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorcHJpc20yX2ZyYWdfY2FjaGVfZ2V0KGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBmcmFnLCBzZXE7CiAJc3RydWN0IHByaXNtMl9mcmFnX2VudHJ5ICplbnRyeTsKIAotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlmcmFnID0gV0xBTl9HRVRfU0VRX0ZSQUcoc2MpOwotCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQ7CisJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKKwlmcmFnID0gc2MgJiBJRUVFODAyMTFfU0NUTF9GUkFHOworCXNlcSA9IChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKIAogCWlmIChmcmFnID09IDApIHsKIAkJLyogUmVzZXJ2ZSBlbm91Z2ggc3BhY2UgdG8gZml0IG1heGltdW0gZnJhbWUgbGVuZ3RoICovCiAJCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmRldi0+bXR1ICsKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyKSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikgKwogCQkJCSAgICA4IC8qIExMQyAqLyArCiAJCQkJICAgIDIgLyogYWxpZ25tZW50ICovICsKIAkJCQkgICAgOCAvKiBXRVAgKi8gKyBFVEhfQUxFTiAvKiBXRFMgKi8pOwpAQCAtMjk5LDE0ICsyOTksMTQgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCiBzdGF0aWMgaW50IHByaXNtMl9mcmFnX2NhY2hlX2ludmFsaWRhdGUobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAl1MTYgc2M7CiAJdW5zaWduZWQgaW50IHNlcTsKIAlzdHJ1Y3QgcHJpc20yX2ZyYWdfZW50cnkgKmVudHJ5OwogCi0Jc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOwotCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpID4+IDQ7CisJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKKwlzZXEgPSAoc2MgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CiAKIAllbnRyeSA9IHByaXNtMl9mcmFnX2NhY2hlX2ZpbmQobG9jYWwsIHNlcSwgLTEsIGhkci0+YWRkcjIsIGhkci0+YWRkcjEpOwogCkBAIC00NzIsMTAgKzQ3Miw4IEBACiAJCSAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzLCB1MTYgdHlwZSwKIAkJICAgICB1MTYgc3R5cGUpCiB7Ci0JaWYgKGxvY2FsLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSB7Ci0JCWhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsLCAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikKLQkJCQkgICAgIHNrYi0+ZGF0YSk7Ci0JfQorCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikKKwkJaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWwsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGEpOwogCiAJaWYgKGxvY2FsLT5ob3N0YXBkICYmIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpIHsKIAkJaWYgKHN0eXBlID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04gJiYKQEAgLTU1Miw4ICs1NTAsOCBAQAogCiAKIHN0YXRpYyBpbnQKLWhvc3RhcF9yeF9mcmFtZV93ZHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKLQkJICAgIHUxNiBmYywgc3RydWN0IG5ldF9kZXZpY2UgKip3ZHMpCitob3N0YXBfcnhfZnJhbWVfd2RzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHUxNiBmYywKKwkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICoqd2RzKQogewogCS8qIEZJWDogaXMgdGhpcyByZWFsbHkgc3VwcG9zZWQgdG8gYWNjZXB0IFdEUyBmcmFtZXMgb25seSBpbiBNYXN0ZXIKIAkgKiBtb2RlPyBXaGF0IGFib3V0IFJlcGVhdGVyIG9yIE1hbmFnZWQgd2l0aCBXRFMgZnJhbWVzPyAqLwpAQCAtNjExLDE0ICs2MDksMTQgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIAl1MTYgZmMsIGV0aGVydHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTggKnBvczsKIAogCWlmIChza2ItPmxlbiA8IDI0KQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAkvKiBjaGVjayB0aGF0IHRoZSBmcmFtZSBpcyB1bmljYXN0IGZyYW1lIHRvIHVzICovCiAJaWYgKChmYyAmIChJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgPT0KQEAgLTY1MSwxNCArNjQ5LDE0IEBACiBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21wZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKGxvY2FsLT50a2lwX2NvdW50ZXJtZWFzdXJlcyAmJgogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7CkBAIC02ODksMTQgKzY4NywxNCBAQAogaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHRfbXNkdShsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICBpbnQga2V5aWR4LCBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWludCByZXMsIGhkcmxlbjsKIAogCWlmIChjcnlwdCA9PSBOVUxMIHx8IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXNkdSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKIAlyZXMgPSBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUoc2tiLCBrZXlpZHgsIGhkcmxlbiwgY3J5cHQtPnByaXYpOwpAQCAtNzIwLDExICs3MTgsMTAgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc2l6ZV90IGhkcmxlbjsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlLCBzYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqd2RzID0gTlVMTDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGZyYWc7CiAJdTggKnBheWxvYWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOwpAQCAtNzQ3LDE4ICs3NDQsMTcgQEAKIAlkZXYgPSBsb2NhbC0+ZGRldjsKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlpZiAoc2tiLT5sZW4gPCAxMCkKIAkJZ290byByeF9kcm9wcGVkOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOwotCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKTsKLQlmcmFnID0gV0xBTl9HRVRfU0VRX0ZSQUcoc2MpOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CisJc3R5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CisJZnJhZyA9IHNjICYgSUVFRTgwMjExX1NDVExfRlJBRzsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogUHV0IHRoaXMgY29kZSBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgZHVwbGljYXRpbmcgaXQgaW4gYWxsCiAJICogUnggcGF0aHMuIC0gSmVhbiBJSSAqLwpAQCAtODY2LDEwICs4NjIsOCBAQAogCiAJaWYgKGhvc3RhcF9yeF9mcmFtZV93ZHMobG9jYWwsIGhkciwgZmMsICZ3ZHMpKQogCQlnb3RvIHJ4X2Ryb3BwZWQ7Ci0JaWYgKHdkcykgeworCWlmICh3ZHMpCiAJCXNrYi0+ZGV2ID0gZGV2ID0gd2RzOwotCQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKLQl9CiAKIAlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9NQVNURVIgJiYgIXdkcyAmJgogCSAgICAoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUykpID09CkBAIC04NzgsNyArODcyLDYgQEAKIAkgICAgbWVtY21wKGhkci0+YWRkcjIsIGxvY2FsLT5hc3NvY19hcF9hZGRyLCBFVEhfQUxFTikgPT0gMCkgewogCQkvKiBGcmFtZSBmcm9tIEJTU0lEIG9mIHRoZSBBUCBmb3Igd2hpY2ggd2UgYXJlIGEgY2xpZW50ICovCiAJCXNrYi0+ZGV2ID0gZGV2ID0gbG9jYWwtPnN0YWRldjsKLQkJc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7CiAJCWZyb21fYXNzb2NfYXAgPSAxOwogCX0KIApAQCAtOTE4LDcgKzkxMSw3IEBACiAJaWYgKGxvY2FsLT5ob3N0X2RlY3J5cHQgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJgogCSAgICAoa2V5aWR4ID0gaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHQobG9jYWwsIHNrYiwgY3J5cHQpKSA8IDApCiAJCWdvdG8gcnhfZHJvcHBlZDsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAkvKiBza2I6IGhkciArIChwb3NzaWJseSBmcmFnbWVudGVkKSBwbGFpbnRleHQgcGF5bG9hZCAqLwogCkBAIC05MzEsNyArOTI0LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUnggY2Fubm90IGdldCBza2IgZnJvbSAiCiAJCQkgICAgICAgImZyYWdtZW50IGNhY2hlIChtb3JlZnJhZz0lZCBzZXE9JXUgZnJhZz0ldSlcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpICE9IDAsCi0JCQkgICAgICAgV0xBTl9HRVRfU0VRX1NFUShzYykgPj4gNCwgZnJhZyk7CisJCQkgICAgICAgKHNjICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0LCBmcmFnKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCkBAIC05NzIsNyArOTY1LDcgQEAKIAkJLyogdGhpcyB3YXMgdGhlIGxhc3QgZnJhZ21lbnQgYW5kIHRoZSBmcmFtZSB3aWxsIGJlCiAJCSAqIGRlbGl2ZXJlZCwgc28gcmVtb3ZlIHNrYiBmcm9tIGZyYWdtZW50IGNhY2hlICovCiAJCXNrYiA9IGZyYWdfc2tiOwotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCQlwcmlzbTJfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGxvY2FsLCBoZHIpOwogCX0KIApAQCAtOTgzLDcgKzk3Niw3IEBACiAJICAgIGhvc3RhcF9yeF9mcmFtZV9kZWNyeXB0X21zZHUobG9jYWwsIHNrYiwga2V5aWR4LCBjcnlwdCkpCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlpZiAoY3J5cHQgJiYgIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYgIWxvY2FsLT5vcGVuX3dlcCkgewogCQlpZiAobG9jYWwtPmllZWVfODAyXzF4ICYmCiAJCSAgICBob3N0YXBfaXNfZWFwb2xfZnJhbWUobG9jYWwsIHNrYikpIHsKQEAgLTEwNjksOCArMTA2Miw4IEBACiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBFVEhfQUxFTik7CiAJfQogCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogCWlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUiAmJiAhd2RzICYmCiAJICAgIGxvY2FsLT5hcC0+YnJpZGdlX3BhY2tldHMpIHsKQEAgLTEwOTQsNyArMTA4Nyw3IEBACiAJaWYgKHNrYjIgIT0gTlVMTCkgewogCQkvKiBzZW5kIHRvIHdpcmVsZXNzIG1lZGlhICovCiAJCXNrYjItPmRldiA9IGRldjsKLQkJc2tiMi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKTsKKwkJc2tiMi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyk7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYjIpOwogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiMik7CiAJCS8qIHNrYjItPm5ldHdvcmtfaGVhZGVyICs9IEVUSF9ITEVOOyAqLwpAQCAtMTExNSw3ICsxMTA4LDcgQEAKICByeF9kcm9wcGVkOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJZ290byByeF9leGl0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKaW5kZXggMDc4YTAxMC4uNjY5MzQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYwpAQCAtMTUsMTAgKzE1LDEwIEBACiAKIHZvaWQgaG9zdGFwX2R1bXBfdHhfODAyMTEoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUWCBsZW49JWQgamlmZmllcz0lbGRcbiIsCiAJICAgICAgIG5hbWUsIHNrYi0+bGVuLCBqaWZmaWVzKTsKQEAgLTI2LDkgKzI2LDEwIEBACiAJaWYgKHNrYi0+bGVuIDwgMikKIAkJcmV0dXJuOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpJXMlcyIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTID8gIiBbRnJvbURTXSIgOiAiIik7CiAKQEAgLTM4LDcgKzM5LDcgQEAKIAl9CiAKIAlwcmludGsoIiBkdXI9MHglMDR4IHNlcT0weCUwNHhcbiIsIGxlMTZfdG9fY3B1KGhkci0+ZHVyYXRpb25faWQpLAotCSAgICAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpKTsKKwkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEExPSVwTSIsIGhkci0+YWRkcjEpOwogCXByaW50aygiIEEyPSVwTSIsIGhkci0+YWRkcjIpOwpAQCAtNTcsNyArNTgsNyBAQAogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwogCWludCBuZWVkX2hlYWRyb29tLCBuZWVkX3RhaWxyb29tID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciBoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyOwogCXUxNiBmYywgZXRoZXJ0eXBlID0gMDsKIAllbnVtIHsKIAkJV0RTX05PID0gMCwgV0RTX09XTl9GUkFNRSwgV0RTX0NPTVBMSUFOVF9GUkFNRQpAQCAtMjAxLDcgKzIwMiw3IEBACiAJCW1lbWNweSgmaGRyLmFkZHIzLCBsb2NhbC0+YnNzaWQsIEVUSF9BTEVOKTsKIAl9CiAKLQloZHIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCWhkci5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCiAJc2tiX3B1bGwoc2tiLCBza2lwX2hlYWRlcl9ieXRlcyk7CiAJbmVlZF9oZWFkcm9vbSA9IGxvY2FsLT5mdW5jLT5uZWVkX3R4X2hlYWRyb29tICsgaGRyX2xlbiArIGVuY2Fwc19sZW47CkBAIC0yNjUsNyArMjY2LDcgQEAKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmM7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yODcsMTAgKzI4OCwxMCBAQAogCW1ldGEtPmlmYWNlID0gaWZhY2U7CiAKIAlpZiAoc2tiLT5sZW4gPj0gSUVFRTgwMjExX0RBVEFfSERSM19MRU4gKyBzaXplb2YocmZjMTA0Ml9oZWFkZXIpICsgMikgewotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQkJaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCi0JCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPT0gSUVFRTgwMjExX1NUWVBFX0RBVEEpIHsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9EQVRBKSB7CiAJCQl1OCAqcG9zID0gJnNrYi0+ZGF0YVtJRUVFODAyMTFfREFUQV9IRFIzX0xFTiArCiAJCQkJCSAgICAgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKV07CiAJCQltZXRhLT5ldGhlcnR5cGUgPSAocG9zWzBdIDw8IDgpIHwgcG9zWzFdOwpAQCAtMzEwLDggKzMxMSw3IEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKLQl1MTYgZmM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgcHJlZml4X2xlbiwgcG9zdGZpeF9sZW4sIGhkcl9sZW4sIHJlczsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAKIAlpZiAobG9jYWwtPnRraXBfY291bnRlcm1lYXN1cmVzICYmCiAJICAgIHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiVEtJUCIpID09IDApIHsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCiAJCQkgICAgICAgIlRYIHBhY2tldCB0byAlcE1cbiIsCkBAIC0zNDksOSArMzQ5LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLSAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaGRyX2xlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWhkcl9sZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogSG9zdC1iYXNlZCBJRUVFIDgwMi4xMSBmcmFnbWVudGF0aW9uIGZvciBUWCBpcyBub3QgeWV0IHN1cHBvcnRlZCwgc28KIAkgKiBjYWxsIGJvdGggTVNEVSBhbmQgTVBEVSBlbmNyeXB0aW9uIGZ1bmN0aW9ucyBmcm9tIGhlcmUuICovCkBAIC0zODQsNyArMzgzLDcgQEAKIAlhcF90eF9yZXQgdHhfcmV0OwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAJaW50IG5vX2VuY3J5cHQgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTQyNywxNCArNDI2LDE0IEBACiAJdHhfcmV0ID0gaG9zdGFwX2hhbmRsZV9zdGFfdHgobG9jYWwsICZ0eCk7CiAJc2tiID0gdHguc2tiOwogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0gCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXN3aXRjaCAodHhfcmV0KSB7CiAJY2FzZSBBUF9UWF9DT05USU5VRToKIAkJYnJlYWs7CiAJY2FzZSBBUF9UWF9DT05USU5VRV9OT1RfQVVUSE9SSVpFRDoKIAkJaWYgKGxvY2FsLT5pZWVlXzgwMl8xeCAmJgotCQkgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKKwkJICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkJICAgIG1ldGEtPmV0aGVydHlwZSAhPSBFVEhfUF9QQUUgJiYKIAkJICAgICEobWV0YS0+ZmxhZ3MgJiBIT1NUQVBfVFhfRkxBR1NfV0RTKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIGZyYW1lIHRvIHVuYXV0aG9yaXplZCAiCkBAIC00NjksMTAgKzQ2OCwxMCBAQAogCiAJCS8qIHJlbW92ZSBzcGVjaWFsIHZlcnNpb24gZnJvbSB0aGUgZnJhbWUgaGVhZGVyICovCiAJCWZjICY9IH5JRUVFODAyMTFfRkNUTF9WRVJTOwotCQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCX0KIAotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkgeworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlub19lbmNyeXB0ID0gMTsKIAkJdHguY3J5cHQgPSBOVUxMOwogCX0KQEAgLTQ5Myw5ICs0OTIsOSBAQAogCQkvKiBBZGQgSVNXRVAgZmxhZyBib3RoIGZvciBmaXJtd2FyZSBhbmQgaG9zdCBiYXNlZCBlbmNyeXB0aW9uCiAJCSAqLwogCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7Ci0JCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7CiAJfSBlbHNlIGlmIChsb2NhbC0+ZHJvcF91bmVuY3J5cHRlZCAmJgotCQkgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgorCQkgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgIG1ldGEtPmV0aGVydHlwZSAhPSBFVEhfUF9QQUUpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIHVuZW5jcnlwdGVkIFRYIGRhdGEgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCmluZGV4IDA5MDNkYjcuLmEyYTIwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCiAjaW5jbHVkZSAiaG9zdGFwLmgiCkBAIC01ODgsMjggKzU4OSwyNCBAQAogc3RhdGljIHZvaWQgaG9zdGFwX2FwX3R4X2NiKHN0cnVjdCBza19idWZmICpza2IsIGludCBvaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwotCXUxNiBmYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZiAoIWFwLT5sb2NhbC0+aG9zdGFwZCB8fCAhYXAtPmxvY2FsLT5hcGRldikgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCiAJLyogUGFzcyB0aGUgVFggY2FsbGJhY2sgZnJhbWUgdG8gdGhlIGhvc3RhcGQ7IHVzZSA4MDIuMTEgaGVhZGVyIHZlcnNpb24KIAkgKiAxIHRvIGluZGljYXRlIGZhaWx1cmUgKG5vIEFDSykgYW5kIDIgc3VjY2VzcyAoZnJhbWUgQUNLZWQpICovCiAKLQlmYyAmPSB+SUVFRTgwMjExX0ZDVExfVkVSUzsKLQlmYyB8PSBvayA/IEJJVCgxKSA6IEJJVCgwKTsKLQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWhkci0+ZnJhbWVfY29udHJvbCAmPSBjcHVfdG9fbGUxNih+SUVFRTgwMjExX0ZDVExfVkVSUyk7CisJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KG9rID8gQklUKDEpIDogQklUKDApKTsKIAogCXNrYi0+ZGV2ID0gYXAtPmxvY2FsLT5hcGRldjsKLQlza2JfcHVsbChza2IsIGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKSk7CisJc2tiX3B1bGwoc2tiLCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtNjIxLDggKzYxOCw4IEBACiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXAtPmxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKLQl1MTYgZmMsIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1czsKIAlfX2xlMTYgKnBvczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CiAJY2hhciAqdHh0ID0gTlVMTDsKQEAgLTYzMiwxMCArNjI5LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UIHx8Ci0JICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfQVVUSCB8fAorCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJaWYgKCFpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpIHx8CiAJICAgIHNrYi0+bGVuIDwgSUVFRTgwMjExX01HTVRfSERSX0xFTiArIDYpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfYXBfdHhfY2JfYXV0aCByZWNlaXZlZCBpbnZhbGlkICIKIAkJICAgICAgICJmcmFtZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTY5MSw3ICs2ODYsNyBAQAogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFwLT5sb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmMsIHN0YXR1czsKIAlfX2xlMTYgKnBvczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CkBAIC03MDIsMTEgKzY5NywxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgfHwKLQkgICAgKFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCAmJgotCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICE9IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1ApIHx8CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJaWYgKCghaWVlZTgwMjExX2lzX2Fzc29jX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAgIWllZWU4MDIxMV9pc19yZWFzc29jX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgfHwKIAkgICAgc2tiLT5sZW4gPCBJRUVFODAyMTFfTUdNVF9IRFJfTEVOICsgNCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3RhcF9hcF90eF9jYl9hc3NvYyByZWNlaXZlZCBpbnZhbGlkICIKIAkJICAgICAgICJmcmFtZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTc1NywxMiArNzUxLDEyIEBACiBzdGF0aWMgdm9pZCBob3N0YXBfYXBfdHhfY2JfcG9sbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJZ290byBmYWlsOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlpZiAob2spIHsKIAkJc3Bpbl9sb2NrKCZhcC0+c3RhX3RhYmxlX2xvY2spOwogCQlzdGEgPSBhcF9nZXRfc3RhKGFwLCBoZHItPmFkZHIxKTsKQEAgLTkxNyw3ICs5MTEsNyBAQAogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAl1MTYgZmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwpAQCAtOTQyLDggKzkzNiw4IEBACiAJfQogCiAJZmMgPSB0eXBlX3N1YnR5cGU7Ci0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2JfcHV0KHNrYiwgaGRybGVuKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihjcHVfdG9fbGUxNih0eXBlX3N1YnR5cGUpKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIGhkcmxlbik7CiAJaWYgKGJvZHkpCiAJCW1lbWNweShza2JfcHV0KHNrYiwgYm9keV9sZW4pLCBib2R5LCBib2R5X2xlbik7CiAKQEAgLTk1NCwxMSArOTQ4LDExIEBACiAKIAogCW1lbWNweShoZHItPmFkZHIxLCBhZGRyLCBFVEhfQUxFTik7IC8qIERBIC8gUkEgKi8KLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9GUk9NRFM7CiAJCW1lbWNweShoZHItPmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IC8qIEJTU0lEICovCiAJCW1lbWNweShoZHItPmFkZHIzLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IC8qIFNBICovCi0JfSBlbHNlIGlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKSB7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY3RsKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJLyogY29udHJvbDpBQ0sgZG9lcyBub3QgaGF2ZSBhZGRyMiBvciBhZGRyMyAqLwogCQltZW1zZXQoaGRyLT5hZGRyMiwgMCwgRVRIX0FMRU4pOwogCQltZW1zZXQoaGRyLT5hZGRyMywgMCwgRVRIX0FMRU4pOwpAQCAtOTY3LDcgKzk2MSw3IEBACiAJCW1lbWNweShoZHItPmFkZHIzLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IC8qIEJTU0lEICovCiAJfQogCi0JaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CiAJbWVtc2V0KG1ldGEsIDAsIHNpemVvZigqbWV0YSkpOwpAQCAtMTI4NCwyMiArMTI3OCwyMSBAQAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJc2l6ZV90IGhkcmxlbjsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBsb2NhbC0+YXA7CiAJY2hhciBib2R5WzggKyBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTl0sICpjaGFsbGVuZ2UgPSBOVUxMOwogCWludCBsZW4sIG9sZW47CiAJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKIAlfX2xlMTYgKnBvczsKLQl1MTYgcmVzcCA9IFdMQU5fU1RBVFVTX1NVQ0NFU1MsIGZjOworCXUxNiByZXNwID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7CiAJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OwogCWNoYXIgKnR4dCA9ICIiOwogCiAJbGVuID0gc2tiLT5sZW4gLSBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAobGVuIDwgNikgewogCQlQREVCVUcoREVCVUdfQVAsICIlczogaGFuZGxlX2F1dGhlbiAtIHRvbyBzaG9ydCBwYXlsb2FkICIKQEAgLTE0MzUsNyArMTQyOCw3IEBACiAJCQkgICAgY2hhbGxlbmdlID09IE5VTEwgfHwKIAkJCSAgICBtZW1jbXAoc3RhLT51LnN0YS5jaGFsbGVuZ2UsIGNoYWxsZW5nZSwKIAkJCQkgICBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTikgIT0gMCB8fAotCQkJICAgICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKSB7CisJCQkgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJCQl0eHQgPSAiY2hhbGxlbmdlIHJlc3BvbnNlIGluY29ycmVjdCI7CiAJCQkJcmVzcCA9IFdMQU5fU1RBVFVTX0NIQUxMRU5HRV9GQUlMOwogCQkJCWdvdG8gZmFpbDsKQEAgLTE0ODgsNyArMTQ4MSw3IEBACiAJCSAgICAgICAidHJhbnMjPSVkIHN0YXQ9JWQgbGVuPSVkIGZjPSUwNHgpID09PiAlZCAoJXMpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBoZHItPmFkZHIyLAogCQkgICAgICAgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlLCBsZW4sCi0JCSAgICAgICBmYywgcmVzcCwgdHh0KTsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCksIHJlc3AsIHR4dCk7CiAJfQogfQogCkBAIC0xNDk4LDcgKzE0OTEsNyBAQAogCQkJIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywgaW50IHJlYXNzb2MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJY2hhciBib2R5WzEyXSwgKnAsICpscG9zOwogCWludCBsZW4sIGxlZnQ7CiAJX19sZTE2ICpwb3M7CkBAIC0xNzA3LDcgKzE3MDAsNyBAQAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJY2hhciAqYm9keSA9IChjaGFyICopIChza2ItPmRhdGEgKyBJRUVFODAyMTFfTUdNVF9IRFJfTEVOKTsKIAlpbnQgbGVuOwogCXUxNiByZWFzb25fY29kZTsKQEAgLTE3NDksNyArMTc0Miw3IEBACiAJCQkgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSBza2ItPmRhdGEgKyBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCWludCBsZW47CiAJdTE2IHJlYXNvbl9jb2RlOwpAQCAtMTc4OCw3ICsxNzgxLDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBhcF9oYW5kbGVfZGF0YV9udWxsZnVuYyhsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogCkBAIC0xODA1LDcgKzE3OTgsNyBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHNjaGVkdWxlZCB0YXNrIGZvciBwZW5kaW5nIEFQIGZyYW1lcy4gKi8KIHN0YXRpYyB2b2lkIGFwX2hhbmRsZV9kcm9wcGVkX2RhdGEobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC0xODYzLDcgKzE4NTYsNyBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHNjaGVkdWxlZCB0YXNrIGZvciBwZW5kaW5nIEFQIGZyYW1lcy4gKi8KIHN0YXRpYyB2b2lkIGhhbmRsZV9wc3BvbGwobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwpAQCAtMTg3Miw4ICsxODY1LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJUERFQlVHKERFQlVHX1BTMiwgImhhbmRsZV9wc3BvbGw6IEJTU0lEPSVwTSwgVEE9JXBNIFBXUk1HVD0lZFxuIiwKLQkgICAgICAgaGRyLT5hZGRyMSwgaGRyLT5hZGRyMiwKLQkgICAgICAgISEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpICYgSUVFRTgwMjExX0ZDVExfUE0pKTsKKwkgICAgICAgaGRyLT5hZGRyMSwgaGRyLT5hZGRyMiwgISFpZWVlODAyMTFfaGFzX3BtKGhkci0+ZnJhbWVfY29udHJvbCkpOwogCiAJaWYgKG1lbWNtcChoZHItPmFkZHIxLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpIHsKIAkJUERFQlVHKERFQlVHX0FQLApAQCAtMTk4NCw3ICsxOTc2LDcgQEAKIHN0YXRpYyB2b2lkIGhhbmRsZV9iZWFjb24obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSBza2ItPmRhdGEgKyBJRUVFODAyMTFfTUdNVF9IRFJfTEVOOwogCWludCBsZW4sIGxlZnQ7CiAJdTE2IGJlYWNvbl9pbnQsIGNhcGFiaWxpdHk7CkBAIC0yMTQzLDE0ICsyMTM1LDE0IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwogCXUxNiBmYywgdHlwZSwgc3R5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJLyogRklYOiBzaG91bGQgZ2l2ZSBza2ItPmxlbiB0byBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgY2hlY2sgdGhhdCB0aGUKIAkgKiBidWZmZXIgaXMgbG9uZyBlbm91Z2ggKi8KLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKLQlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKKwlzdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAKICNpZm5kZWYgUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVAogCWlmICghbG9jYWwtPmhvc3RhcGQgJiYgdHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgewpAQCAtMjI2Miw4ICsyMjU0LDcgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQl1MTYgZmM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwpAQCAtMjI3MSwxNyArMjI2MiwxNSBAQAogCWlmIChza2ItPmxlbiA8IDE2KQogCQlnb3RvIGRyb3A7CiAKLQlsb2NhbC0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJaWYgKGxvY2FsLT5hcC0+YXBfcG9saWN5ID09IEFQX09USEVSX0FQX1NLSVBfQUxMICYmCi0JICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9NR01UICYmCi0JICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQorCSAgICBpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCWdvdG8gZHJvcDsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hPU1RBUCk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0hPU1RBUCk7CiAJaGFuZGxlX2FwX2l0ZW0obG9jYWwsIHNrYiwgcnhfc3RhdHMpOwogCXJldHVybjsKIApAQCAtMjI5NCw3ICsyMjgzLDcgQEAKIHN0YXRpYyB2b2lkIHNjaGVkdWxlX3BhY2tldF9zZW5kKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXRzOwogCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT50eF9idWYpKQpAQCAtMjMwNywxMCArMjI5NiwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYl9wdXQoc2tiLCAxNik7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAxNik7CiAKIAkvKiBHZW5lcmF0ZSBhIGZha2UgcHNwb2xsIGZyYW1lIHRvIHN0YXJ0IHBhY2tldCBkZWxpdmVyeSAqLwotCWhkci0+ZnJhbWVfY3RsID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKIAkJSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOwogCW1lbWNweShoZHItPmFkZHIxLCBsb2NhbC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKQEAgLTI2ODksNyArMjY3OCw3IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwogCWludCBzZXRfdGltLCByZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKQEAgLTI2OTgsNyArMjY4Nyw3IEBACiAJICAgIG1ldGEtPmlmYWNlLT50eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfU1RBKQogCQlnb3RvIG91dDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCWlmIChoZHItPmFkZHIxWzBdICYgMHgwMSkgewogCQkvKiBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lIC0gbm8gQVAgcmVsYXRlZCBwcm9jZXNzaW5nICovCkBAIC0yNzUzLDggKzI3NDIsOCBAQAogCiAJaWYgKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX0FERF9NT1JFREFUQSkgewogCQkvKiBpbmRpY2F0ZSB0byBTVEEgdGhhdCBtb3JlIGZyYW1lcyBmb2xsb3cgKi8KLQkJaGRyLT5mcmFtZV9jdGwgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOworCQloZHItPmZyYW1lX2NvbnRyb2wgfD0KKwkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAl9CiAKIAlpZiAobWV0YS0+ZmxhZ3MgJiBIT1NUQVBfVFhfRkxBR1NfQlVGRkVSRURfRlJBTUUpIHsKQEAgLTI4MjgsMTAgKzI4MTcsMTAgQEAKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfdHhfZXhjKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKm1ldGE7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CiAKIAlzcGluX2xvY2soJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwpAQCAtMjg5OCw4ICsyODg3LDggQEAKIAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuIENhbGxlZCBmb3IgZWFjaCBSWCBmcmFtZSB0byB1cGRhdGUKLSAqIFNUQSBwb3dlciBzYXZpbmcgc3RhdGUuIHB3cm1ndCBpcyBhIGZsYWcgZnJvbSA4MDIuMTEgZnJhbWVfY3RsIGZpZWxkLiAqLwotaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCisgKiBTVEEgcG93ZXIgc2F2aW5nIHN0YXRlLiBwd3JtZ3QgaXMgYSBmbGFnIGZyb20gODAyLjExIGZyYW1lX2NvbnRyb2wgZmllbGQuICovCitpbnQgaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmM7CkBAIC0yOTEzLDkgKzI5MDIsMTAgQEAKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIC0xOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCWhvc3RhcF91cGRhdGVfc3RhX3BzMihsb2NhbCwgc3RhLCBmYyAmIElFRUU4MDIxMV9GQ1RMX1BNLAotCQkJICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYyksIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSk7CisJCQkgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFLAorCQkJICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSk7CiAKIAlhdG9taWNfZGVjKCZzdGEtPnVzZXJzKTsKIAlyZXR1cm4gMDsKQEAgLTI5MzIsMTYgKzI5MjIsMTYgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUxNiBmYywgdHlwZSwgc3R5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWYgKGxvY2FsLT5hcCA9PSBOVUxMKQogCQlyZXR1cm4gQVBfUlhfQ09OVElOVUU7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7Ci0Jc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFOworCXN0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKIAogCXNwaW5fbG9jaygmbG9jYWwtPmFwLT5zdGFfdGFibGVfbG9jayk7CiAJc3RhID0gYXBfZ2V0X3N0YShsb2NhbC0+YXAsIGhkci0+YWRkcjIpOwpAQCAtMzA2NCw3ICszMDU0LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCiBpbnQgaG9zdGFwX2hhbmRsZV9zdGFfY3J5cHRvKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICAgIHN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQsCiAJCQkgICAgIHZvaWQgKipzdGFfcHRyKQogewpAQCAtMzE2Niw3ICszMTU2LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCiBpbnQgaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgYXBfZGF0YSAqYXAsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaAppbmRleCBkMzZlNGIxLi42NTVjZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCkBAIC0yMzUsNyArMjM1LDcgQEAKIGFwX3R4X3JldCBob3N0YXBfaGFuZGxlX3N0YV90eChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaG9zdGFwX3R4X2RhdGEgKnR4KTsKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfcmVsZWFzZSh2b2lkICpwdHIpOwogdm9pZCBob3N0YXBfaGFuZGxlX3N0YV90eF9leGMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcik7CitpbnQgaG9zdGFwX3VwZGF0ZV9zdGFfcHMobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CiB0eXBlZGVmIGVudW0gewogCUFQX1JYX0NPTlRJTlVFLCBBUF9SWF9EUk9QLCBBUF9SWF9FWElULCBBUF9SWF9DT05USU5VRV9OT1RfQVVUSE9SSVpFRAogfSBhcF9yeF9yZXQ7CkBAIC0yNDMsMTMgKzI0MywxMyBAQAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzLAogCQkJICAgICAgIGludCB3ZHMpOwotaW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAoraW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0LAogCQkJICAgICB2b2lkICoqc3RhX3B0cik7CiBpbnQgaG9zdGFwX2lzX3N0YV9hc3NvYyhzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7CiBpbnQgaG9zdGFwX2lzX3N0YV9hdXRob3JpemVkKHN0cnVjdCBhcF9kYXRhICphcCwgdTggKnN0YV9hZGRyKTsKIGludCBob3N0YXBfYWRkX3N0YShzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7Ci1pbnQgaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgYXBfZGF0YSAqYXAsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCitpbnQgaG9zdGFwX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgYXBfZGF0YSAqYXAsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpOwogdm9pZCBob3N0YXBfdXBkYXRlX3JhdGVzKGxvY2FsX2luZm9fdCAqbG9jYWwpOwogdm9pZCBob3N0YXBfYWRkX3dkc19saW5rcyhsb2NhbF9pbmZvX3QgKmxvY2FsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwppbmRleCAwZjI3MDU5Li4zZGFkMWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTE2ODMsNyArMTY4Miw3IEBACiAKIAlQREVCVUcoREVCVUdfRVhUUkEyLCAicHJpc20yX2dldF90eGZpZF9pZHg6IG5vIHJvb20gaW4gdHhmaWQgYnVmOiAiCiAJICAgICAgICJwYWNrZXQgZHJvcHBlZFxuIik7Ci0JbG9jYWwtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlsb2NhbC0+ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNzg4LDExICsxNzg3LDkgQEAKIAkJcHJpc20yX3RyYW5zbWl0X2NiLCAobG9uZykgaWR4KTsKIAogCWlmIChyZXMpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByaXNtMl90cmFuc21pdDogQ01EQ09ERV9UUkFOU01JVCAiCiAJCSAgICAgICAiZmFpbGVkIChyZXM9JWQpXG4iLCBkZXYtPm5hbWUsIHJlcyk7Ci0JCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwotCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTg0MCw4ICsxODM3LDggQEAKIAloZHJfbGVuID0gMjQ7CiAJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsICZ0eGRlc2MuZnJhbWVfY29udHJvbCwgaGRyX2xlbik7CiAgCWZjID0gbGUxNl90b19jcHUodHhkZXNjLmZyYW1lX2NvbnRyb2wpOwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgotCSAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpICYmCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKHR4ZGVzYy5mcmFtZV9jb250cm9sKSAmJgorCSAgICBpZWVlODAyMTFfaGFzX2E0KHR4ZGVzYy5mcmFtZV9jb250cm9sKSAmJgogCSAgICBza2ItPmxlbiA+PSAzMCkgewogCQkvKiBBZGRyNCAqLwogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIGhkcl9sZW4sIHR4ZGVzYy5hZGRyNCwKQEAgLTE5NDAsMTIgKzE5MzcsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIAlpbnQgcmVzLCByeF9wZW5kaW5nID0gMDsKIAl1MTYgbGVuLCBoZHJfbGVuLCByeGZpZCwgc3RhdHVzLCBtYWNwb3J0OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlzdHJ1Y3QgaGZhMzg0eF9yeF9mcmFtZSByeGRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAKIAlwcmlzbTJfY2FsbGJhY2sobG9jYWwsIFBSSVNNMl9DQUxMQkFDS19SWF9TVEFSVCk7Ci0Jc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzKGRldik7CiAKIAlyeGZpZCA9IHByaXNtMl9yZWFkX2ZpZF9yZWcoZGV2LCBIRkEzODRYX1JYRklEX09GRik7CiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KQEAgLTIwMzIsNyArMjAyNyw3IEBACiAJcmV0dXJuOwogCiAgcnhfZHJvcHBlZDoKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlnb3RvIHJ4X2V4aXQ7CkBAIC0yMDgyLDcgKzIwNzcsNyBAQAogCXN0YXRzLnJhdGUgPSByeGRlc2MtPnJhdGU7CiAKIAkvKiBDb252ZXJ0IFByaXNtMiBSWCBzdHJ1Y3R1cmUgaW50byBJRUVFIDgwMi4xMSBoZWFkZXIgKi8KLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShyeGRlc2MtPmZyYW1lX2NvbnRyb2wpKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWlmIChoZHJsZW4gPiByeF9oZHJsZW4pCiAJCWhkcmxlbiA9IHJ4X2hkcmxlbjsKIApAQCAtMjIwNCw3ICsyMTk5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZnJhbWVfY29udHJvbCkpOworCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHR4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CiAJbGVuID0gbGUxNl90b19jcHUodHhkZXNjLT5kYXRhX2xlbik7CiAJc2tiID0gZGV2X2FsbG9jX3NrYihoZHJsZW4gKyBsZW4pOwogCWlmIChza2IgPT0gTlVMTCkgewpAQCAtMjMxNSw4ICsyMzEwLDcgQEAKIAkJaWYgKHNrYi0+bGVuID49IHNpemVvZigqdHhkZXNjKSkgewogCQkJLyogQ29udmVydCBQcmlzbTIgUlggc3RydWN0dXJlIGludG8gSUVFRSA4MDIuMTEgaGVhZGVyCiAJCQkgKi8KLQkJCXUxNiBmYyA9IGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZnJhbWVfY29udHJvbCk7Ci0JCQlpbnQgaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oZmMpOworCQkJaW50IGhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHR4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CiAJCQltZW1tb3ZlKHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCp0eGRlc2MpIC0gaGRybGVuKSwKIAkJCQkmdHhkZXNjLT5mcmFtZV9jb250cm9sLCBoZHJsZW4pOwogCkBAIC0yMzM3LDcgKzIzMzEsNyBAQAogCXN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lIHR4ZGVzYzsKIAogCXNob3dfZHVtcCA9IGxvY2FsLT5mcmFtZV9kdW1wICYgUFJJU00yX0RVTVBfVFhFWENfSERSOwotCWxvY2FsLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCiAJcmVzID0gaG9zdGFwX3R4X2NvbXBsX3JlYWQobG9jYWwsIDEsICZ0eGRlc2MsICZwYXlsb2FkKTsKIAlIRkEzODRYX09VVFcoSEZBMzg0WF9FVl9UWEVYQywgSEZBMzg0WF9FVkFDS19PRkYpOwpAQCAtMjM5NCwxMiArMjM4OCwxMiBAQAogCVBERUJVRyhERUJVR19FWFRSQSwgIiAgIHJldHJ5X2NvdW50PSVkIHR4X3JhdGU9JWQgZmM9MHglMDR4ICIKIAkgICAgICAgIiglcyVzJXM6OiVkJXMlcylcbiIsCiAJICAgICAgIHR4ZGVzYy5yZXRyeV9jb3VudCwgdHhkZXNjLnR4X3JhdGUsIGZjLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCA/ICJNZ210IiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMID8gIkN0cmwiIDogIiIsCi0JICAgICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBID8gIkRhdGEiIDogIiIsCi0JICAgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAotCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFRvRFMiIDogIiIsCi0JICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTID8gIiBGcm9tRFMiIDogIiIpOworCSAgICAgICBpZWVlODAyMTFfaXNfbWdtdCh0eGRlc2MuZnJhbWVfY29udHJvbCkgPyAiTWdtdCIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2lzX2N0bCh0eGRlc2MuZnJhbWVfY29udHJvbCkgPyAiQ3RybCIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2lzX2RhdGEodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIkRhdGEiIDogIiIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAorCSAgICAgICBpZWVlODAyMTFfaGFzX3RvZHModHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIiBUb0RTIiA6ICIiLAorCSAgICAgICBpZWVlODAyMTFfaGFzX2Zyb21kcyh0eGRlc2MuZnJhbWVfY29udHJvbCkgPyAiIEZyb21EUyIgOiAiIik7CiAJUERFQlVHKERFQlVHX0VYVFJBLCAiICAgQTE9JXBNIEEyPSVwTSBBMz0lcE0gQTQ9JXBNXG4iLAogCSAgICAgICB0eGRlc2MuYWRkcjEsIHR4ZGVzYy5hZGRyMiwKIAkgICAgICAgdHhkZXNjLmFkZHIzLCB0eGRlc2MuYWRkcjQpOwpAQCAtMzIyOCw3ICszMjIyLDYgQEAKIAogCWhvc3RhcF9zZXR1cF9kZXYoZGV2LCBsb2NhbCwgSE9TVEFQX0lOVEVSRkFDRV9NQVNURVIpOwogCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQ7CiAJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmaG9zdGFwXzgwMjExX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYwppbmRleCA5OWI0Y2Y0Li42ZmExNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYwpAQCAtMSw1ICsxLDYgQEAKIC8qIEhvc3QgQVAgZHJpdmVyIEluZm8gRnJhbWUgcHJvY2Vzc2luZyAocGFydCBvZiBob3N0YXAubyBtb2R1bGUpICovCiAKKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgogI2luY2x1ZGUgImhvc3RhcF9hcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCmluZGV4IGM0MGZkZjQuLjNmMmJkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKQEAgLTIsNiArMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KIAogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCkBAIC0xNjM4LDcgKzE2MzksNyBAQAogCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwogCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KGxvY2FsLT5jaGFubmVsX21hc2sgJgogCQkJCQkgICAgbG9jYWwtPnNjYW5fY2hhbm5lbF9tYXNrKTsKLQlzY2FuX3JlcS50eHJhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOworCXNjYW5fcmVxLnR4cmF0ZSA9IGNwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOwogCWlmIChzc2lkKSB7CiAJCWlmIChzc2lkX2xlbiA+IDMyKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjY4LDcgKzE2NjksNyBAQAogCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwogCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KGxvY2FsLT5jaGFubmVsX21hc2sgJgogCQkJCQkgICAgbG9jYWwtPnNjYW5fY2hhbm5lbF9tYXNrKTsKLQlzY2FuX3JlcS50eHJhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOworCXNjYW5fcmVxLnR4cmF0ZSA9IGNwdV90b19sZTE2KEhGQTM4NFhfUkFURVNfMU1CUFMpOwogCiAJLyogRklYOgogCSAqIEl0IHNlZW1zIHRvIGJlIGVub3VnaCB0byBzZXQgcm9hbWluZyBtb2RlIGZvciBhIHNob3J0IG1vbWVudCB0bwpAQCAtMjUxNCw3ICsyNTE1LDcgQEAKIAkJdTE2IHJhdGU7CiAKIAkJbWVtc2V0KCZzY2FuX3JlcSwgMCwgc2l6ZW9mKHNjYW5fcmVxKSk7Ci0JCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgzZmZmKTsKKwkJc2Nhbl9yZXEuY2hhbm5lbF9saXN0ID0gY3B1X3RvX2xlMTYoMHgzZmZmKTsKIAkJc3dpdGNoICh2YWx1ZSkgewogCQljYXNlIDE6IHJhdGUgPSBIRkEzODRYX1JBVEVTXzFNQlBTOyBicmVhazsKIAkJY2FzZSAyOiByYXRlID0gSEZBMzg0WF9SQVRFU18yTUJQUzsgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDAyYTMxMmMuLjZmZTEyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTU0Myw3ICs1NDIsOCBAQAogCWZjID0gX19sZTE2X3RvX2NwdShyeC0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCkgZHVyPTB4JTA0eCBzZXE9MHglMDR4ICIKIAkgICAgICAgImRhdGFfbGVuPSVkJXMlc1xuIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBfX2xlMTZfdG9fY3B1KHJ4LT5kdXJhdGlvbl9pZCksIF9fbGUxNl90b19jcHUocngtPnNlcV9jdHJsKSwKIAkgICAgICAgX19sZTE2X3RvX2NwdShyeC0+ZGF0YV9sZW4pLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKQEAgLTU3MCw3ICs1NzAsOCBAQAogCWZjID0gX19sZTE2X3RvX2NwdSh0eC0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCkgZHVyPTB4JTA0eCBzZXE9MHglMDR4ICIKIAkgICAgICAgImRhdGFfbGVuPSVkJXMlc1xuIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBfX2xlMTZfdG9fY3B1KHR4LT5kdXJhdGlvbl9pZCksIF9fbGUxNl90b19jcHUodHgtPnNlcV9jdHJsKSwKIAkgICAgICAgX19sZTE2X3RvX2NwdSh0eC0+ZGF0YV9sZW4pLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKQEAgLTU5MywzNyArNTk0LDE2IEBACiB9CiAKIAotaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKHUxNiBmYykKK2ludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihfX2xlMTYgZmMpCiB7Ci0JaW50IGhkcmxlbiA9IDI0OworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgJiYgaWVlZTgwMjExX2hhc19hNCAoZmMpKQorCQlyZXR1cm4gMzA7IC8qIEFkZHI0ICovCisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0cyhmYykgfHwgaWVlZTgwMjExX2lzX2FjayhmYykpCisJCXJldHVybiAxMDsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfY3RsKGZjKSkKKwkJcmV0dXJuIDE2OwogCi0Jc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpKQotCQkJaGRybGVuID0gMzA7IC8qIEFkZHI0ICovCi0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShmYykpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6Ci0JCQloZHJsZW4gPSAxMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaGRybGVuID0gMTY7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGRybGVuOwotfQotCi0KLXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpob3N0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwotCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmlmYWNlLT5zdGF0czsKKwlyZXR1cm4gMjQ7CiB9CiAKIApAQCAtODM1LDYgKzgxNSw0NiBAQAogfTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwXzgwMjExX29wcyk7CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBob3N0YXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJCT0gaG9zdGFwX2RhdGFfc3RhcnRfeG1pdCwKKworCS5uZG9fb3BlbgkJPSBwcmlzbTJfb3BlbiwKKwkubmRvX3N0b3AJCT0gcHJpc20yX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gaG9zdGFwX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcHJpc20yX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGhvc3RhcF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IHByaXNtMl9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCAJPSBwcmlzbTJfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX21nbXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJCT0gaG9zdGFwX21nbXRfc3RhcnRfeG1pdCwKKworCS5uZG9fb3BlbgkJPSBwcmlzbTJfb3BlbiwKKwkubmRvX3N0b3AJCT0gcHJpc20yX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gaG9zdGFwX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcHJpc20yX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGhvc3RhcF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IHByaXNtMl9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCAJPSBwcmlzbTJfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX21hc3Rlcl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdCwKKworCS5uZG9fb3BlbgkJPSBwcmlzbTJfb3BlbiwKKwkubmRvX3N0b3AJCT0gcHJpc20yX2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJCT0gaG9zdGFwX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcHJpc20yX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGhvc3RhcF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1IAk9IHByaXNtMl9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dCAJPSBwcmlzbTJfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHZvaWQgaG9zdGFwX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBsb2NhbF9pbmZvX3QgKmxvY2FsLAogCQkgICAgICBpbnQgdHlwZSkKIHsKQEAgLTg0NCwzNyArODY0LDMxIEBACiAJZXRoZXJfc2V0dXAoZGV2KTsKIAogCS8qIGtlcm5lbCBjYWxsYmFja3MgKi8KLQlkZXYtPmdldF9zdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHM7CiAJaWYgKGlmYWNlKSB7CiAJCS8qIEN1cnJlbnRseSwgd2UgcG9pbnQgdG8gdGhlIHByb3BlciBzcHlfZGF0YSBvbmx5IG9uCiAJCSAqIHRoZSBtYWluX2Rldi4gVGhpcyBjb3VsZCBiZSBmaXhlZC4gSmVhbiBJSSAqLwogCQlpZmFjZS0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZpZmFjZS0+c3B5X2RhdGE7CiAJCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZpZmFjZS0+d2lyZWxlc3NfZGF0YTsKIAl9Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9Ci0JCShzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikgJmhvc3RhcF9pd19oYW5kbGVyX2RlZjsKLQlkZXYtPmRvX2lvY3RsID0gaG9zdGFwX2lvY3RsOwotCWRldi0+b3BlbiA9IHByaXNtMl9vcGVuOwotCWRldi0+c3RvcCA9IHByaXNtMl9jbG9zZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IHByaXNtMl9jaGFuZ2VfbXR1OwotCWRldi0+dHhfdGltZW91dCA9IHByaXNtMl90eF90aW1lb3V0OworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaG9zdGFwX2l3X2hhbmRsZXJfZGVmOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCi0JaWYgKHR5cGUgPT0gSE9TVEFQX0lOVEVSRkFDRV9BUCkgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQ7CisJc3dpdGNoKHR5cGUpIHsKKwljYXNlIEhPU1RBUF9JTlRFUkZBQ0VfQVA6CisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbWdtdF9uZXRkZXZfb3BzOwogCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwogCQlkZXYtPmhlYWRlcl9vcHMgPSAmaG9zdGFwXzgwMjExX29wczsKLQl9IGVsc2UgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQ7CisJCWJyZWFrOworCWNhc2UgSE9TVEFQX0lOVEVSRkFDRV9NQVNURVI6CisJCWRldi0+dHhfcXVldWVfbGVuID0gMDsJLyogdXNlIG1haW4gcmFkaW8gZGV2aWNlIHF1ZXVlICovCisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbWFzdGVyX29wczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmhvc3RhcF9uZXRkZXZfb3BzOwogCX0KIAogCWRldi0+bXR1ID0gbG9jYWwtPm10dTsKLQlpZiAodHlwZSAhPSBIT1NUQVBfSU5URVJGQUNFX01BU1RFUikgewotCQkvKiB1c2UgbWFpbiByYWRpbyBkZXZpY2UgcXVldWUgKi8KLQkJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwotCX0KKwogCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJnByaXNtMl9ldGh0b29sX29wcyk7CiAKQEAgLTExMjQsNyArMTEzOCw2IEBACiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9kdW1wX3J4X2hlYWRlcik7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9kdW1wX3R4X2hlYWRlcik7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2dldF9zdGF0cyk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9zZXR1cF9kZXYpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0X211bHRpY2FzdF9saXN0X3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9ob3N0YXBkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmgKaW5kZXggNGQ4ZDUxYTMuLjNkMjM4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCkBAIC02ODQsNyArNjg0LDYgQEAKIAl1MTYgY2hhbm5lbF9tYXNrOyAvKiBtYXNrIG9mIGFsbG93ZWQgY2hhbm5lbHMgKi8KIAl1MTYgc2Nhbl9jaGFubmVsX21hc2s7IC8qIG1hc2sgb2YgY2hhbm5lbHMgdG8gYmUgc2Nhbm5lZCAqLwogCXN0cnVjdCBjb21tX3RhbGxpZXNfc3VtcyBjb21tX3RhbGxpZXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwogCWludCBpd19tb2RlOyAvKiBvcGVyYXRpbmcgbW9kZSAoSVdfTU9ERV8qKSAqLwogCWludCBwc2V1ZG9fYWRob2M7IC8qIDA6IElXX01PREVfQURIT0MgaXMgcmVhbCA4MDIuMTEgY29tcGxpYW50IElCU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZwppbmRleCAzZDVjYzQ0Li44NWNjNzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCkBAIC0xNTAsNiArMTUwLDcgQEAKIAogY29uZmlnIExJQklQVwogCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTl84MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19BUkM0CkBAIC0xODUsNyArMTg2LDcgQEAKIAkgICUgZWNobyAweDAwMDAwRkZPID4gL3Byb2MvbmV0L2llZWU4MDIxMS9kZWJ1Z19sZXZlbAogCiAJICBGb3IgYSBsaXN0IG9mIHZhbHVlcyB5b3UgY2FuIGFzc2lnbiB0byBkZWJ1Z19sZXZlbCwgeW91Ci0JICBjYW4gbG9vayBhdCB0aGUgYml0IG1hc2sgdmFsdWVzIGluIDxuZXQvaWVlZTgwMjExLmg+CisJICBjYW4gbG9vayBhdCB0aGUgYml0IG1hc2sgdmFsdWVzIGluIGllZWU4MDIxMS5oCiAKIAkgIElmIHlvdSBhcmUgbm90IHRyeWluZyB0byBkZWJ1ZyBvciBkZXZlbG9wIHRoZSBsaWJpcHcKIAkgIGNvbXBvbmVudCwgeW91IG1vc3QgbGlrZWx5IHdhbnQgdG8gc2F5IE4gaGVyZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL25ldC9pZWVlODAyMTEuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaAppbmRleCBhZGI3Y2YzLi43MDc1NWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oCkBAIC01NCw2NSArNTQsMTIgQEAKICNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAyNTZVCiAjZGVmaW5lCU1BWF9GUkFHX1RIUkVTSE9MRCAgICAgMjM0NlUKIAotLyogRnJhbWUgY29udHJvbCBmaWVsZCBjb25zdGFudHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVkVSUwkJMHgwMDAzCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZUWVBFCQkweDAwMGMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfU1RZUEUJCTB4MDBmMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9UT0RTCQkweDAxMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfRlJPTURTCQkweDAyMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTCTB4MDQwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9SRVRSWQkJMHgwODAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1BNCQkweDEwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEJCTB4MjAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQJMHg0MDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX09SREVSCQkweDgwMDAKLQotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfTUdNVAkJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9DVEwJCTB4MDAwNAotI2RlZmluZSBJRUVFODAyMTFfRlRZUEVfREFUQQkJMHgwMDA4Ci0KLS8qIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgCTB4MDAxMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEJMHgwMDIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1AJMHgwMDMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEJMHgwMDQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQCTB4MDA1MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OCQkweDAwODAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FUSU0JCTB4MDA5MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MJMHgwMEEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BVVRICQkweDAwQjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RFQVVUSAkJMHgwMEMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04JCTB4MDBEMAotCi0vKiBjb250cm9sICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9QU1BPTEwJCTB4MDBBMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfUlRTCQkweDAwQjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NUUwkJMHgwMEMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9BQ0sJCTB4MDBEMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkQJCTB4MDBFMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0sJMHgwMEYwCi0KLS8qIGRhdGEgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEEJCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDSwkweDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZQT0xMCTB4MDAyMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDS1BPTEwJMHgwMDMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQwkweDAwNDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGQUNLCQkweDAwNTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGUE9MTAkJMHgwMDYwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDS1BPTEwJMHgwMDcwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSAgICAgICAgMHgwMDgwCi0KLSNkZWZpbmUgSUVFRTgwMjExX1NDVExfRlJBRwkJMHgwMDBGCi0jZGVmaW5lIElFRUU4MDIxMV9TQ1RMX1NFUQkJMHhGRkYwCi0KIC8qIFFPUyBjb250cm9sICovCiAjZGVmaW5lIElFRUU4MDIxMV9RQ1RMX1RJRAkJMHgwMDBGCiAKIC8qIGRlYnVnIG1hY3JvcyAqLwogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIGV4dGVybiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsOwogI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAogZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXApAQCAtMTI4LDcgKzc1LDcgQEAKIHsKIAlyZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KIAogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOgpAQCAtMTUyLDcgKzk5LDcgQEAKICAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaWVlZTgwMjExX2RlYnVnX2xldmVsIGFycmF5LgogICoKICAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pZWVlODAyMTEgdGhlbiB5b3UgZG8gbm90IGhhdmUKLSAqIENPTkZJR19JRUVFODAyMTFfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCisgKiBDT05GSUdfTElCSVBXX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgogICoKICAqLwogCkBAIC0yMTcsMjMgKzE2NCw2IEBACiAjZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgSUVFRTgwMjExX1NDVExfRlJBRykKICNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUShzZXEpICAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQogCi0vKiBBY3Rpb24gY2F0ZWdvcmllcyAtIDgwMi4xMWggKi8KLWVudW0gaWVlZTgwMjExX2FjdGlvbmNhdGVnb3JpZXMgewotCVdMQU5fQUNUSU9OX1NQRUNUUlVNX01HTVQgPSAwLAotCS8qIFJlc2VydmVkIDEtMTI3ICAqLwotCS8qIEVycm9yICAgIDEyOC0yNTUgKi8KLX07Ci0KLS8qIEFjdGlvbiBkZXRhaWxzIC0gODAyLjExaCAqLwotZW51bSBpZWVlODAyMTFfYWN0aW9uZGV0YWlscyB7Ci0JV0xBTl9BQ1RJT05fQ0FURUdPUllfTUVBU1VSRV9SRVFVRVNUID0gMCwKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9NRUFTVVJFX1JFUE9SVCA9IDEsCi0JV0xBTl9BQ1RJT05fQ0FURUdPUllfVFBDX1JFUVVFU1QgPSAyLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX1RQQ19SRVBPUlQgPSAzLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX0NIQU5ORUxfU1dJVENIID0gNCwKLQkvKiA1IC0gMjU1IFJlc2VydmVkICovCi19OwotCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgKDE8PDApCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJICgxPDwxKQogI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgKDE8PDIpCkBAIC00MTEsMzcgKzM0MSw2IEBACiAKICNkZWZpbmUgQkVBQ09OX1BST0JFX1NTSURfSURfUE9TSVRJT04gMTIKIAotLyogTWFuYWdlbWVudCBGcmFtZSBJbmZvcm1hdGlvbiBFbGVtZW50IFR5cGVzICovCi1lbnVtIGllZWU4MDIxMV9tZmllIHsKLQlNRklFX1RZUEVfU1NJRCA9IDAsCi0JTUZJRV9UWVBFX1JBVEVTID0gMSwKLQlNRklFX1RZUEVfRkhfU0VUID0gMiwKLQlNRklFX1RZUEVfRFNfU0VUID0gMywKLQlNRklFX1RZUEVfQ0ZfU0VUID0gNCwKLQlNRklFX1RZUEVfVElNID0gNSwKLQlNRklFX1RZUEVfSUJTU19TRVQgPSA2LAotCU1GSUVfVFlQRV9DT1VOVFJZID0gNywKLQlNRklFX1RZUEVfSE9QX1BBUkFNUyA9IDgsCi0JTUZJRV9UWVBFX0hPUF9UQUJMRSA9IDksCi0JTUZJRV9UWVBFX1JFUVVFU1QgPSAxMCwKLQlNRklFX1RZUEVfQ0hBTExFTkdFID0gMTYsCi0JTUZJRV9UWVBFX1BPV0VSX0NPTlNUUkFJTlQgPSAzMiwKLQlNRklFX1RZUEVfUE9XRVJfQ0FQQUJJTElUWSA9IDMzLAotCU1GSUVfVFlQRV9UUENfUkVRVUVTVCA9IDM0LAotCU1GSUVfVFlQRV9UUENfUkVQT1JUID0gMzUsCi0JTUZJRV9UWVBFX1NVUFBfQ0hBTk5FTFMgPSAzNiwKLQlNRklFX1RZUEVfQ1NBID0gMzcsCi0JTUZJRV9UWVBFX01FQVNVUkVfUkVRVUVTVCA9IDM4LAotCU1GSUVfVFlQRV9NRUFTVVJFX1JFUE9SVCA9IDM5LAotCU1GSUVfVFlQRV9RVUlFVCA9IDQwLAotCU1GSUVfVFlQRV9JQlNTX0RGUyA9IDQxLAotCU1GSUVfVFlQRV9FUlBfSU5GTyA9IDQyLAotCU1GSUVfVFlQRV9SU04gPSA0OCwKLQlNRklFX1RZUEVfUkFURVNfRVggPSA1MCwKLQlNRklFX1RZUEVfR0VORVJJQyA9IDIyMSwKLQlNRklFX1RZUEVfUU9TX1BBUkFNRVRFUiA9IDIyMiwKLX07Ci0KIHN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyIHsKIAlfX2xlMTYgZnJhbWVfY3RsOwogCV9fbGUxNiBkdXJhdGlvbl9pZDsKQEAgLTg4Nyw3ICs3ODYsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjOwogCiAJLyogQm9va2tlZXBpbmcgc3RydWN0dXJlcyAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgaWVlZV9zdGF0czsKIAogCXN0cnVjdCBpZWVlODAyMTFfZ2VvIGdlbzsKQEAgLTExMTgsNiArMTAxNiwxMCBAQAogLyogaWVlZTgwMjExLmMgKi8KIGV4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOworCitleHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwogCiBleHRlcm4gaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggODIzYzJiZi4uMTE1YjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTE2OTIsNyArMTY5MiwxMyBAQAogCXUzMiBsb2NrOwogCXUzMiBvcmRfbGVuID0gc2l6ZW9mKGxvY2spOwogCi0JLyogUXVpdGUgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCisJLyogUXVpZXQgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSB7CiAJCUlQV19ERUJVR19JTkZPKCIlczogUmFkaW8gaXMgZGlzYWJsZWQgYnkgTWFudWFsIERpc2FibGUgIgogCQkJICAgICAgICJzd2l0Y2hcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOwpAQCAtMTkxMCw3ICsxOTE2LDggQEAKIHsKIAogI2RlZmluZSBNQUNfQVNTT0NJQVRJT05fUkVBRF9ERUxBWSAoSFopCi0JaW50IHJldCwgbGVuLCBlc3NpZF9sZW47CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBlc3NpZF9sZW47CiAJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CiAJdTMyIHR4cmF0ZTsKIAl1MzIgY2hhbjsKQEAgLTIzODQsMTMgKzIzOTEsMTQgQEAKICNlbmRpZgogCiAJcHJpdi0+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+IERUSU0gcGVyaW9kIHRoZW4KLSAqIHVjb2RlIGFzc3VtZSBzbGVlcCBvdmVyIERUSU0gaXMgYWxsb3dlZCBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3YWtldXAKLSAqIGZvciBldmVyeSBEVElNLgotICovCi0jZGVmaW5lIElXTF9QT1dFUl9WRUNfU0laRSA1Ci0KLSNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyKQotI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTMyKDEgPDwgMykKLXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyoKLSAqIFBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICogMzk0NSBhbmQgNDk2NSBpZGVudGljYWwuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiB7Ci0JdTggcG1fc2xlZXBfbW9kZTsKLQl1OCBwbV93YWtldXBfc3JjOwotCV9fbGUxNiByZXNlcnZlZDsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgYmNvbl90aW1lcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBTbGVlcCBzdGF0ZXMuICAzOTQ1IGFuZCA0OTY1IGlkZW50aWNhbC4gKi8KLWVudW0gewotCUlXTF9QTV9OT19TTEVFUCA9IDAsCi0JSVdMX1BNX1NMUF9NQUMgPSAxLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfVU5BU1NPQ0lBVEUgPSAyLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfQ0FSRF9TVEFURSA9IDMsCi0JSVdMX1BNX1NMUF9QSFkgPSA0LAotCUlXTF9QTV9TTFBfUkVQRU5UID0gNSwKLQlJV0xfUE1fV0FLRVVQX0JZX1RJTUVSID0gNiwKLQlJV0xfUE1fV0FLRVVQX0JZX0RSSVZFUiA9IDcsCi0JSVdMX1BNX1dBS0VVUF9CWV9SRktJTEwgPSA4LAotCS8qIDMgcmVzZXJ2ZWQgKi8KLQlJV0xfUE1fTlVNX09GX01PREVTID0gMTIsCi19OwotCi0vKgotICogUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfRElTQUJMRSAweDAwCS8qIFB1dCBjYXJkIHRvIHNsZWVwICovCi0jZGVmaW5lIENBUkRfU1RBVEVfQ01EX0VOQUJMRSAgMHgwMQkvKiBXYWtlIHVwIGNhcmQgKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfSEFMVCAgICAweDAyCS8qIFBvd2VyIGRvd24gcGVybWFuZW50bHkgKi8KLXN0cnVjdCBpd2wzOTQ1X2NhcmRfc3RhdGVfY21kIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogQ0FSRF9TVEFURV9DTURfKiByZXF1ZXN0IG5ldyBwb3dlciBzdGF0ZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBDQVJEX1NUQVRFX05PVElGSUNBVElPTiA9IDB4YTEgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jYXJkX3N0YXRlX25vdGlmIHsKLQlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBIV19DQVJEX0RJU0FCTEVEICAgMHgwMQotI2RlZmluZSBTV19DQVJEX0RJU0FCTEVEICAgMHgwMgotI2RlZmluZSBSRl9DQVJEX0RJU0FCTEVEICAgMHgwNAotI2RlZmluZSBSWE9OX0NBUkRfRElTQUJMRUQgMHgxMAotCi1zdHJ1Y3QgaXdsMzk0NV9jdF9raWxsX2NvbmZpZyB7Ci0JX19sZTMyICAgcmVzZXJ2ZWQ7Ci0JX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfTTsKLQlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9SOwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOCkKLSAqIFNjYW4gQ29tbWFuZHMsIFJlc3BvbnNlcywgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIC0gZW50cnkgaW4gUkVQTFlfU0NBTl9DTUQgY2hhbm5lbCB0YWJsZQotICoKLSAqIE9uZSBmb3IgZWFjaCBjaGFubmVsIGluIHRoZSBzY2FuIGxpc3QuCi0gKiBFYWNoIGNoYW5uZWwgY2FuIGluZGVwZW5kZW50bHkgc2VsZWN0OgotICogMSkgIFNTSUQgZm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucwotICogMikgIFR4cG93ZXIgc2V0dGluZyAoZm9yIHJhdGUgc3BlY2lmaWVkIHdpdGhpbiBUeCBjb21tYW5kKQotICogMykgIEhvdyBsb25nIHRvIHN0YXkgb24tY2hhbm5lbCAoYmVoYXZpb3IgbWF5IGJlIG1vZGlmaWVkIGJ5IHF1aWV0X3RpbWUsCi0gKiAgICAgcXVpZXRfcGxjcF90aCwgZ29vZF9DUkNfdGgpCi0gKgotICogVG8gYXZvaWQgdUNvZGUgZXJyb3JzLCBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSAoc2VlIGNvbW1lbnRzCi0gKiB1bmRlciBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCBhYm91dCBtYXhfb3V0X3RpbWUgYW5kIHF1aWV0X3RpbWUpOgotICogMSkgIElmIHVzaW5nIHBhc3NpdmVfZHdlbGwgKGkuZS4gcGFzc2l2ZV9kd2VsbCAhPSAwKToKLSAqICAgICBhY3RpdmVfZHdlbGwgPD0gcGFzc2l2ZV9kd2VsbCAoPCBtYXhfb3V0X3RpbWUgaWYgbWF4X291dF90aW1lICE9IDApCi0gKiAyKSAgcXVpZXRfdGltZSA8PSBhY3RpdmVfZHdlbGwKLSAqIDMpICBJZiByZXN0cmljdGluZyBvZmYtY2hhbm5lbCB0aW1lIChpLmUuIG1heF9vdXRfdGltZSAhPTApOgotICogICAgIHBhc3NpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqICAgICBhY3RpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIHsKLQkvKgotCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKLQkgKiAwOjAgMSA9IGFjdGl2ZSwgMCA9IHBhc3NpdmUKLQkgKiAxOjQgU1NJRCBkaXJlY3QgYml0IG1hcDsgaWYgYSBiaXQgaXMgc2V0LCB0aGVuIGNvcnJlc3BvbmRpbmcKLQkgKiAgICAgU1NJRCBJRSBpcyB0cmFuc21pdHRlZCBpbiBwcm9iZSByZXF1ZXN0LgotCSAqIDU6NyByZXNlcnZlZAotCSAqLwotCXU4IHR5cGU7Ci0JdTggY2hhbm5lbDsJLyogYmFuZCBpcyBzZWxlY3RlZCBieSBpd2wzOTQ1X3NjYW5fY21kICJmbGFncyIgZmllbGQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7Ci0JX19sZTE2IGFjdGl2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDUtNTAgKi8KLQlfX2xlMTYgcGFzc2l2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDIwLTUwMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc3NpZF9pZSAtIGRpcmVjdGVkIHNjYW4gbmV0d29yayBpbmZvcm1hdGlvbiBlbGVtZW50Ci0gKgotICogVXAgdG8gNCBvZiB0aGVzZSBtYXkgYXBwZWFyIGluIFJFUExZX1NDQU5fQ01ELCBzZWxlY3RlZCBieSAidHlwZSIgZmllbGQKLSAqIGluIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbDsgZWFjaCBjaGFubmVsIG1heSBzZWxlY3QgZGlmZmVyZW50IHNzaWRzIGZyb20KLSAqIGFtb25nIHRoZSA0IGVudHJpZXMuICBTU0lEIElFcyBnZXQgdHJhbnNtaXR0ZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBlbnRyeS4KLSAqLwotc3RydWN0IGl3bDM5NDVfc3NpZF9pZSB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IHNzaWRbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUFJPQkVfT1BUSU9OX01BWCAgICAgICAgMHg0Ci0jZGVmaW5lIFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEUJY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikKLSNkZWZpbmUgSVdMX0dPT0RfQ1JDX1RICQljcHVfdG9fbGUxNigxKQotI2RlZmluZSBJV0xfTUFYX1NDQU5fU0laRSAxMDI0Ci0KLS8qCi0gKiBSRVBMWV9TQ0FOX0NNRCA9IDB4ODAgKGNvbW1hbmQpCi0gKgotICogVGhlIGhhcmR3YXJlIHNjYW4gY29tbWFuZCBpcyB2ZXJ5IHBvd2VyZnVsOyB0aGUgZHJpdmVyIGNhbiBzZXQgaXQgdXAgdG8KLSAqIG1haW50YWluIChyZWxhdGl2ZWx5KSBub3JtYWwgbmV0d29yayB0cmFmZmljIHdoaWxlIGRvaW5nIGEgc2NhbiBpbiB0aGUKLSAqIGJhY2tncm91bmQuICBUaGUgbWF4X291dF90aW1lIGFuZCBzdXNwZW5kX3RpbWUgY29udHJvbCB0aGUgcmF0aW8gb2YgaG93Ci0gKiBsb25nIHRoZSBkZXZpY2Ugc3RheXMgb24gYW4gYXNzb2NpYXRlZCBuZXR3b3JrIGNoYW5uZWwgKCJzZXJ2aWNlIGNoYW5uZWwiKQotICogdnMuIGhvdyBsb25nIGl0J3MgYXdheSBmcm9tIHRoZSBzZXJ2aWNlIGNoYW5uZWwsIHR1bmVkIHRvIG90aGVyIGNoYW5uZWxzCi0gKiBmb3Igc2Nhbm5pbmcuCi0gKgotICogbWF4X291dF90aW1lIGlzIHRoZSBtYXggdGltZSBvZmYtY2hhbm5lbCAoaW4gdXNlYyksIGFuZCBzdXNwZW5kX3RpbWUKLSAqIGlzIGhvdyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uIiBmb3JtYXQpIHRoYXQgdGhlIHNjYW4gaXMgInN1c3BlbmRlZCIKLSAqIGFmdGVyIHJldHVybmluZyB0byB0aGUgc2VydmljZSBjaGFubmVsLiAgVGhhdCBpcywgc3VzcGVuZF90aW1lIGlzIHRoZQotICogdGltZSB0aGF0IHdlIHN0YXkgb24gdGhlIHNlcnZpY2UgY2hhbm5lbCwgZG9pbmcgbm9ybWFsIHdvcmssIGJldHdlZW4KLSAqIHNjYW4gc2VnbWVudHMuICBUaGUgZHJpdmVyIG1heSBzZXQgdGhlc2UgcGFyYW1ldGVycyBkaWZmZXJlbnRseSB0byBzdXBwb3J0Ci0gKiBzY2FubmluZyB3aGVuIGFzc29jaWF0ZWQgdnMuIG5vdCBhc3NvY2lhdGVkLCBhbmQgbGlnaHQgdnMuIGhlYXZ5IHRyYWZmaWMKLSAqIGxvYWRzIHdoZW4gYXNzb2NpYXRlZC4KLSAqCi0gKiBBZnRlciByZWNlaXZpbmcgdGhpcyBjb21tYW5kLCB0aGUgZGV2aWNlJ3Mgc2NhbiBlbmdpbmUgZG9lcyB0aGUgZm9sbG93aW5nOwotICoKLSAqIDEpICBTZW5kcyBTQ0FOX1NUQVJUIG5vdGlmaWNhdGlvbiB0byBkcml2ZXIKLSAqIDIpICBDaGVja3MgdG8gc2VlIGlmIGl0IGhhcyB0aW1lIHRvIGRvIHNjYW4gZm9yIG9uZSBjaGFubmVsCi0gKiAzKSAgU2VuZHMgTlVMTCBwYWNrZXQsIHdpdGggcG93ZXItc2F2ZSAoUFMpIGJpdCBzZXQgdG8gMSwKLSAqICAgICB0byB0ZWxsIEFQIHRoYXQgd2UncmUgZ29pbmcgb2ZmLWNoYW5uZWwKLSAqIDQpICBUdW5lcyB0byBmaXJzdCBjaGFubmVsIGluIHNjYW4gbGlzdCwgZG9lcyBhY3RpdmUgb3IgcGFzc2l2ZSBzY2FuCi0gKiA1KSAgU2VuZHMgU0NBTl9SRVNVTFQgbm90aWZpY2F0aW9uIHRvIGRyaXZlcgotICogNikgIENoZWNrcyB0byBzZWUgaWYgaXQgaGFzIHRpbWUgdG8gZG8gc2NhbiBvbiAqbmV4dCogY2hhbm5lbCBpbiBsaXN0Ci0gKiA3KSAgUmVwZWF0cyA0LTYgdW50aWwgaXQgbm8gbG9uZ2VyIGhhcyB0aW1lIHRvIHNjYW4gdGhlIG5leHQgY2hhbm5lbAotICogICAgIGJlZm9yZSBtYXhfb3V0X3RpbWUgZXhwaXJlcwotICogOCkgIFJldHVybnMgdG8gc2VydmljZSBjaGFubmVsCi0gKiA5KSAgU2VuZHMgTlVMTCBwYWNrZXQgd2l0aCBQUz0wIHRvIHRlbGwgQVAgdGhhdCB3ZSdyZSBiYWNrCi0gKiAxMCkgU3RheXMgb24gc2VydmljZSBjaGFubmVsIHVudGlsIHN1c3BlbmRfdGltZSBleHBpcmVzCi0gKiAxMSkgUmVwZWF0cyBlbnRpcmUgcHJvY2VzcyAyLTEwIHVudGlsIGxpc3QgaXMgY29tcGxldGUKLSAqIDEyKSBTZW5kcyBTQ0FOX0NPTVBMRVRFIG5vdGlmaWNhdGlvbgotICoKLSAqIEZvciBmYXN0LCBlZmZpY2llbnQgc2NhbnMsIHRoZSBzY2FuIGNvbW1hbmQgYWxzbyBoYXMgc3VwcG9ydCBmb3Igc3RheWluZyBvbgotICogYSBjaGFubmVsIGZvciBqdXN0IGEgc2hvcnQgdGltZSwgaWYgZG9pbmcgYWN0aXZlIHNjYW5uaW5nIGFuZCBnZXR0aW5nIG5vCi0gKiByZXNwb25zZXMgdG8gdGhlIHRyYW5zbWl0dGVkIHByb2JlIHJlcXVlc3QuICBUaGlzIHRpbWUgaXMgY29udHJvbGxlZCBieQotICogcXVpZXRfdGltZSwgYW5kIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBiZWxvdyB3aGljaCBhIGNoYW5uZWwgaXMKLSAqIGNvbnNpZGVyZWQgInF1aWV0IiBpcyBjb250cm9sbGVkIGJ5IHF1aWV0X3BsY3BfdGhyZXNob2xkLgotICoKLSAqIEZvciBhY3RpdmUgc2Nhbm5pbmcgb24gY2hhbm5lbHMgdGhhdCBoYXZlIHJlZ3VsYXRvcnkgcmVzdHJpY3Rpb25zIGFnYWluc3QKLSAqIGJsaW5kbHkgdHJhbnNtaXR0aW5nLCB0aGUgc2NhbiBjYW4gbGlzdGVuIGJlZm9yZSB0cmFuc21pdHRpbmcsIHRvIG1ha2Ugc3VyZQotICogdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGxlZ2l0aW1hdGUgYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwuICBJZiBlbm91Z2gKLSAqIHBhY2tldHMgYXJlIGNsZWFubHkgcmVjZWl2ZWQgb24gdGhlIGNoYW5uZWwgKGNvbnRyb2xsZWQgYnkgZ29vZF9DUkNfdGgsCi0gKiB0eXBpY2FsIHZhbHVlIDEpLCB0aGUgc2NhbiBlbmdpbmUgc3RhcnRzIHRyYW5zbWl0dGluZyBwcm9iZSByZXF1ZXN0cy4KLSAqCi0gKiBEcml2ZXIgbXVzdCB1c2Ugc2VwYXJhdGUgc2NhbiBjb21tYW5kcyBmb3IgMi40IHZzLiA1IEdIeiBiYW5kcy4KLSAqCi0gKiBUbyBhdm9pZCB1Q29kZSBlcnJvcnMsIHNlZSB0aW1pbmcgcmVzdHJpY3Rpb25zIGRlc2NyaWJlZCB1bmRlcgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7Ci0JX19sZTE2IGxlbjsKLQl1OCByZXNlcnZlZDA7Ci0JdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KLQlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKLQkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCi0JX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLwotCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCi0JCQkJICogY2hhbm5lbCAqLwotCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCi0JCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgotCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCi0JCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KLQkJCQkgKi8KLQlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCi0JX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLwotCi0JLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCi0JICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOwotCi0JLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCi0Jc3RydWN0IGl3bDM5NDVfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXTsKLQotCS8qCi0JICogUHJvYmUgcmVxdWVzdCBmcmFtZSwgZm9sbG93ZWQgYnkgY2hhbm5lbCBsaXN0LgotCSAqCi0JICogU2l6ZSBvZiBwcm9iZSByZXF1ZXN0IGZyYW1lIGlzIHNwZWNpZmllZCBieSBieXRlIGNvdW50IGluIHR4X2NtZC4KLQkgKiBDaGFubmVsIGxpc3QgZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciBwcm9iZSByZXF1ZXN0IGZyYW1lLgotCSAqIE51bWJlciBvZiBjaGFubmVscyBpbiBsaXN0IGlzIHNwZWNpZmllZCBieSBjaGFubmVsX2NvdW50LgotCSAqIEVhY2ggY2hhbm5lbCBpbiBsaXN0IGlzIG9mIHR5cGU6Ci0JICoKLQkgKiBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWwgY2hhbm5lbHNbMF07Ci0JICoKLQkgKiBOT1RFOiAgT25seSBvbmUgYmFuZCBvZiBjaGFubmVscyBjYW4gYmUgc2Nhbm5lZCBwZXIgcGFzcy4gIFlvdQotCSAqIG11c3Qgbm90IG1peCAyLjRHSHogY2hhbm5lbHMgYW5kIDUuMkdIeiBjaGFubmVscywgYW5kIHlvdSBtdXN0IHdhaXQKLQkgKiBmb3Igb25lIHNjYW4gdG8gY29tcGxldGUgKGkuZS4gcmVjZWl2ZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTikKLQkgKiBiZWZvcmUgcmVxdWVzdGluZyBhbm90aGVyIHNjYW4uCi0JICovCi0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBDYW4gYWJvcnQgd2lsbCBub3RpZnkgYnkgY29tcGxldGUgbm90aWZpY2F0aW9uIHdpdGggYWJvcnQgc3RhdHVzLiAqLwotI2RlZmluZSBDQU5fQUJPUlRfU1RBVFVTCWNwdV90b19sZTMyKDB4MSkKLS8qIGNvbXBsZXRlIG5vdGlmaWNhdGlvbiBzdGF0dXNlcyAqLwotI2RlZmluZSBBQk9SVF9TVEFUVVMgICAgICAgICAgICAweDIKLQotLyoKLSAqIFJFUExZX1NDQU5fQ01EID0gMHg4MCAocmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMTogb2theSwgMjogY2Fubm90IGZ1bGZpbGwgcmVxdWVzdCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTQ0FOX1NUQVJUX05PVElGSUNBVElPTiA9IDB4ODIgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci0JX19sZTMyIGJlYWNvbl90aW1lcjsKLQl1OCBjaGFubmVsOwotCXU4IGJhbmQ7Ci0JdTggcmVzZXJ2ZWRbMl07Ci0JX19sZTMyIHN0YXR1czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lICBTQ0FOX09XTkVSX1NUQVRVUyAweDE7Ci0jZGVmaW5lICBNRUFTVVJFX09XTkVSX1NUQVRVUyAweDI7Ci0KLSNkZWZpbmUgTlVNQkVSX09GX1NUQVRJU1RJQ1MgMQkvKiBmaXJzdCBfX2xlMzIgaXMgZ29vZCBDUkMgKi8KLS8qCi0gKiBTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OID0gMHg4MyAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiB7Ci0JdTggY2hhbm5lbDsKLQl1OCBiYW5kOwotCXU4IHJlc2VydmVkWzJdOwotCV9fbGUzMiB0c2ZfbG93OwotCV9fbGUzMiB0c2ZfaGlnaDsKLQlfX2xlMzIgc3RhdGlzdGljc1tOVU1CRVJfT0ZfU1RBVElTVElDU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gewotCXU4IHNjYW5uZWRfY2hhbm5lbHM7Ci0JdTggc3RhdHVzOwotCXU4IHJlc2VydmVkOwotCXU4IGxhc3RfY2hhbm5lbDsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOSkKLSAqIElCU1MvQVAgQ29tbWFuZHMgYW5kIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogQkVBQ09OX05PVElGSUNBVElPTiA9IDB4OTAgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4OwotCV9fbGUxNiB0aW1faWR4OwotCXU4IHRpbV9zaXplOwotCXU4IHJlc2VydmVkMTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBmcmFtZVswXTsJLyogYmVhY29uIGZyYW1lICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEwKQotICogU3RhdGlzdGljcyBDb21tYW5kcyBhbmQgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSVdMX1RFTVBfQ09OVkVSVCAyNjAKLQotI2RlZmluZSBTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMUyAgOAotI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAotI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKLQotLyogVXNlZCBmb3IgcGFzc2luZyB0byBkcml2ZXIgbnVtYmVyIG9mIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgcGVyIHJhdGUgKi8KLXN0cnVjdCByYXRlX2hpc3RvZ3JhbSB7Ci0JdW5pb24gewotCQlfX2xlMzIgYVtTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMU107Ci0JCV9fbGUzMiBiW1NVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGdbU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFNdOwotCX0gc3VjY2VzczsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBhW1NVUF9SQVRFXzExQV9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGJbU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFNdOwotCQlfX2xlMzIgZ1tTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMU107Ci0JfSBmYWlsZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogc3RhdGlzdGljcyBjb21tYW5kIHJlc3BvbnNlICovCi0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7Ci0JX19sZTMyIGluYV9jbnQ7Ci0JX19sZTMyIGZpbmFfY250OwotCV9fbGUzMiBwbGNwX2VycjsKLQlfX2xlMzIgY3JjMzJfZXJyOwotCV9fbGUzMiBvdmVycnVuX2VycjsKLQlfX2xlMzIgZWFybHlfb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGNyYzMyX2dvb2Q7Ci0JX19sZTMyIGZhbHNlX2FsYXJtX2NudDsKLQlfX2xlMzIgZmluYV9zeW5jX2Vycl9jbnQ7Ci0JX19sZTMyIHNmZF90aW1lb3V0OwotCV9fbGUzMiBmaW5hX3RpbWVvdXQ7Ci0JX19sZTMyIHVucmVzcG9uZGVkX3J0czsKLQlfX2xlMzIgcnhlX2ZyYW1lX2xpbWl0X292ZXJydW47Ci0JX19sZTMyIHNlbnRfYWNrX2NudDsKLQlfX2xlMzIgc2VudF9jdHNfY250OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4IHsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgb2ZkbTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgY2NrOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc190eCB7Ci0JX19sZTMyIHByZWFtYmxlX2NudDsKLQlfX2xlMzIgcnhfZGV0ZWN0ZWRfY250OwotCV9fbGUzMiBidF9wcmlvX2RlZmVyX2NudDsKLQlfX2xlMzIgYnRfcHJpb19raWxsX2NudDsKLQlfX2xlMzIgZmV3X2J5dGVzX2NudDsKLQlfX2xlMzIgY3RzX3RpbWVvdXQ7Ci0JX19sZTMyIGFja190aW1lb3V0OwotCV9fbGUzMiBleHBlY3RlZF9hY2tfY250OwotCV9fbGUzMiBhY3R1YWxfYWNrX2NudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewotCV9fbGUzMiBidXJzdF9jaGVjazsKLQlfX2xlMzIgYnVyc3RfY291bnQ7Ci0JX19sZTMyIHJlc2VydmVkWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX2RpdiB7Ci0JX19sZTMyIHR4X29uX2E7Ci0JX19sZTMyIHR4X29uX2I7Ci0JX19sZTMyIGV4ZWNfdGltZTsKLQlfX2xlMzIgcHJvYmVfdGltZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnIGRiZzsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgc2xvdHNfb3V0OwotCV9fbGUzMiBzbG90c19pZGxlOwotCV9fbGUzMiB0dGxfdGltZXN0YW1wOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLSAqIDM5NDUgYW5kIDQ5NjUgaWRlbnRpY2FsLgotICoKLSAqIFRoaXMgY29tbWFuZCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgcmVzcG9uc2UgY29udGFpbmluZyB1Q29kZSBzdGF0aXN0aWNzLgotICogVGhlIHJlc3BvbnNlIGlzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBTVEFUSVNUSUNTX05PVElGSUNBVElPTiAweDlkLCBiZWxvdy4KLSAqCi0gKiBJZiB0aGUgQ0xFQVJfU1RBVFMgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBjbGVhciBpdHMKLSAqIGludGVybmFsIGNvcHkgb2YgdGhlIHN0YXRpc3RpY3MgKGNvdW50ZXJzKSBhZnRlciBpc3N1aW5nIHRoZSByZXNwb25zZS4KLSAqIFRoaXMgZmxhZyBkb2VzIG5vdCBhZmZlY3QgU1RBVElTVElDU19OT1RJRklDQVRJT05zIGFmdGVyIGJlYWNvbnMgKHNlZSBiZWxvdykuCi0gKgotICogSWYgdGhlIERJU0FCTEVfTk9USUYgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBub3QgaXNzdWUKLSAqIFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OcyBhZnRlciByZWNlaXZlZCBiZWFjb25zIChzZWUgYmVsb3cpLiAgVGhpcyBmbGFnCi0gKiBkb2VzIG5vdCBhZmZlY3QgdGhlIHJlc3BvbnNlIHRvIHRoZSBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljIGl0c2VsZi4KLSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9DTEVBUl9TVEFUUyBjcHVfdG9fbGUzMigweDEpCS8qIHNlZSBhYm92ZSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9ESVNBQkxFX05PVElGIGNwdV90b19sZTMyKDB4MikvKiBzZWUgYWJvdmUgKi8KLXN0cnVjdCBpd2wzOTQ1X3N0YXRpc3RpY3NfY21kIHsKLQlfX2xlMzIgY29uZmlndXJhdGlvbl9mbGFnczsJLyogSVdMX1NUQVRTX0NPTkZfKiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIEJ5IGRlZmF1bHQsIHVDb2RlIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBiZWFjb24KLSAqIHdoaWxlIGFzc29jaWF0ZWQuICBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCBESVNBQkxFX05PVElGIGZsYWcgaW4gdGhlCi0gKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljLCBhYm92ZS4KLSAqCi0gKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbnRpbnVlIHRvIGluY3JlbWVudCBiZWFjb24gYWZ0ZXIgYmVhY29uLCBidXQgYXJlCi0gKiBjbGVhcmVkIHdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgb3Igd2hlbiBkcml2ZXIgaXNzdWVzIFJFUExZX1NUQVRJU1RJQ1NfQ01ECi0gKiAweDljIHdpdGggQ0xFQVJfU1RBVFMgYml0IHNldCAoc2VlIGFib3ZlKS4KLSAqCi0gKiB1Q29kZSBhbHNvIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBkdXJpbmcgc2NhbnMuICB1Q29kZSBjbGVhcnMgc3RhdGlzdGljcwotICogYXBwcm9wcmlhdGVseSBzbyB0aGF0IGVhY2ggbm90aWZpY2F0aW9uIGNvbnRhaW5zIHN0YXRpc3RpY3MgZm9yIG9ubHkgdGhlCi0gKiBvbmUgY2hhbm5lbCB0aGF0IGhhcyBqdXN0IGJlZW4gc2Nhbm5lZC4KLSAqLwotI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDIpCi0jZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4OCkKLXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgewotCV9fbGUzMiBmbGFnOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4IHJ4OwotCXN0cnVjdCBzdGF0aXN0aWNzX3R4IHR4OwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qCi0gKiBNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04gPSAweGEyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotLyogaWYgdWNvZGUgbWlzc2VkIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCBiZWFjb25zIGluIGEgcm93LAotICogdGhlbiB0aGlzIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQuICovCi0jZGVmaW5lIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCAyMAotCi1zdHJ1Y3QgaXdsMzk0NV9taXNzZWRfYmVhY29uX25vdGlmIHsKLQlfX2xlMzIgY29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnM7Ci0JX19sZTMyIHRvdGFsX21pc3NlZF9iZWNvbnM7Ci0JX19sZTMyIG51bV9leHBlY3RlZF9iZWFjb25zOwotCV9fbGUzMiBudW1fcmVjdmRfYmVhY29uczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMTEpCi0gKiBSeCBDYWxpYnJhdGlvbiBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgUEhZX0NBTElCUkFURV9ESUZGX0dBSU5fQ01EICg3KQotI2RlZmluZSBIRF9UQUJMRV9TSVpFICAoMTEpCi0KLXN0cnVjdCBpd2wzOTQ1X3NlbnNpdGl2aXR5X2NtZCB7Ci0JX19sZTE2IGNvbnRyb2w7Ci0JX19sZTE2IHRhYmxlW0hEX1RBQkxFX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X2NhbGlicmF0aW9uX2NtZCB7Ci0JdTggb3BDb2RlOwotCXU4IGZsYWdzOwotCV9fbGUxNiByZXNlcnZlZDsKLQlzOCBkaWZmX2dhaW5fYTsKLQlzOCBkaWZmX2dhaW5fYjsKLQlzOCBkaWZmX2dhaW5fYzsKLQl1OCByZXNlcnZlZDE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEyKQotICogTWlzY2VsbGFuZW91cyBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBMRURzIENvbW1hbmQgJiBSZXNwb25zZQotICogUkVQTFlfTEVEU19DTUQgPSAweDQ4IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogRm9yIGVhY2ggb2YgMyBwb3NzaWJsZSBMRURzIChBY3Rpdml0eS9MaW5rL1RlY2gsIHNlbGVjdGVkIGJ5ICJpZCIgZmllbGQpLAotICogdGhpcyBjb21tYW5kIHR1cm5zIGl0IG9uIG9yIG9mZiwgb3Igc2V0cyB1cCBhIHBlcmlvZGljIGJsaW5raW5nIGN5Y2xlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIHsKLQlfX2xlMzIgaW50ZXJ2YWw7CS8qICJpbnRlcnZhbCIgaW4gdVNlYyAqLwotCXU4IGlkOwkJCS8qIDE6IEFjdGl2aXR5LCAyOiBMaW5rLCAzOiBUZWNoICovCi0JdTggb2ZmOwkJCS8qICMgaW50ZXJ2YWxzIG9mZiB3aGlsZSBibGlua2luZzsKLQkJCQkgKiAiMCIsIHdpdGggPjAgIm9uIiB2YWx1ZSwgdHVybnMgTEVEIG9uICovCi0JdTggb247CQkJLyogIyBpbnRlcnZhbHMgb24gd2hpbGUgYmxpbmtpbmc7Ci0JCQkJICogIjAiLCByZWdhcmRsZXNzIG9mICJvZmYiLCB0dXJucyBMRUQgb2ZmICovCi0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEzKQotICogVW5pb24gb2YgYWxsIGV4cGVjdGVkIG5vdGlmaWNhdGlvbnMvcmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0IHsKLQlfX2xlMzIgbGVuOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKLQkJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgcnhfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgdHhfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIHNwZWN0cnVtX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIGNzYV9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfZXJyb3JfcmVzcCBlcnJfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfY2FyZF9zdGF0ZV9ub3RpZiBjYXJkX3N0YXRlX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgYmVhY29uX3N0YXR1czsKLQkJc3RydWN0IGl3bDM5NDVfYWRkX3N0YV9yZXNwIGFkZF9zdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiBzbGVlcF9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fcmVzcCBzcGVjdHJ1bTsKLQkJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0czsKLQkJX19sZTMyIHN0YXR1czsKLQkJdTggcmF3WzBdOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIElXTF9SWF9GUkFNRV9TSVpFICAgICAgICAoNCArIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSkpCi0KLSNlbmRpZgkJCQkvKiBfX2l3bDM5NDVfMzk0NV9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlYjc3OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDM5NDVfZGVidWdfaF9fCi0jZGVmaW5lIF9faXdsMzk0NV9kZWJ1Z19oX18KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1leHRlcm4gdTMyIGl3bDM5NDVfZGVidWdfbGV2ZWw7Ci0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAotCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpIFwKLSAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKLXsKLQlpZiAoIShpd2wzOTQ1X2RlYnVnX2xldmVsICYgbGV2ZWwpKQotCQlyZXR1cm47Ci0KLQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiaXdsIGRhdGE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCi0JCQlwLCBsZW4sIDEpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUcoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBJV0xfREVCVUdfTElNSVQoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3ByaW50X2hleF9kdW1wKGludCBsZXZlbCwgdm9pZCAqcCwgdTMyIGxlbikKLXsKLX0KLSNlbmRpZgkvKiBDT05GSUdfSVdMMzk0NV9ERUJVRyAqLwotCi0KLQotLyoKLSAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwotICoKLSAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKLSAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKLSAqCi0gKiAjZGVmaW5lIElXTF9ETF94eHh4IFZBTFVFCi0gKgotICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCi0gKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCi0gKgotICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSVdMX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCi0gKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElXTF9ERUJVRyhJV0xfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAotICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KLSAqCi0gKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCi0gKgotICogJSBjYXQgL3Byb2MvbmV0L2l3bC9kZWJ1Z19sZXZlbAotICoKLSAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaXdsMzk0NV9kZWJ1Z19sZXZlbHMgYXJyYXkuCi0gKgotICogSWYgeW91IGRvIG5vdCBzZWUgZGVidWdfbGV2ZWwgaW4gL3Byb2MvbmV0L2l3bCB0aGVuIHlvdSBkbyBub3QgaGF2ZQotICogQ09ORklHX0lXTDM5NDVfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCi0gKgotICovCi0KLSNkZWZpbmUgSVdMX0RMX0lORk8gICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSVdMX0RMX01BQzgwMjExICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSVdMX0RMX0hPU1RfQ09NTUFORCAgKDEgPDwgMikKLSNkZWZpbmUgSVdMX0RMX1NUQVRFICAgICAgICAgKDEgPDwgMykKLQotI2RlZmluZSBJV0xfRExfUkFESU8gICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJV0xfRExfUE9XRVIgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJV0xfRExfVEVNUCAgICAgICAgICAoMSA8PCA5KQotCi0jZGVmaW5lIElXTF9ETF9OT1RJRiAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBJV0xfRExfU0NBTiAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgSVdMX0RMX0FTU09DICAgICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIElXTF9ETF9EUk9QICAgICAgICAgICgxIDw8IDEzKQotCi0jZGVmaW5lIElXTF9ETF9UWFBPV0VSICAgICAgICgxIDw8IDE0KQotCi0jZGVmaW5lIElXTF9ETF9BUCAgICAgICAgICAgICgxIDw8IDE1KQotCi0jZGVmaW5lIElXTF9ETF9GVyAgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBJV0xfRExfUkZfS0lMTCAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgSVdMX0RMX0ZXX0VSUk9SUyAgICAgKDEgPDwgMTgpCi0KLSNkZWZpbmUgSVdMX0RMX0xFRCAgICAgICAgICAgKDEgPDwgMTkpCi0KLSNkZWZpbmUgSVdMX0RMX1JBVEUgICAgICAgICAgKDEgPDwgMjApCi0KLSNkZWZpbmUgSVdMX0RMX0NBTElCICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIElXTF9ETF9XRVAgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBJV0xfRExfVFggICAgICAgICAgICAoMSA8PCAyMykKLSNkZWZpbmUgSVdMX0RMX1JYICAgICAgICAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIElXTF9ETF9JU1IgICAgICAgICAgICgxIDw8IDI1KQotI2RlZmluZSBJV0xfRExfSFQgICAgICAgICAgICAoMSA8PCAyNikKLSNkZWZpbmUgSVdMX0RMX0lPICAgICAgICAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIElXTF9ETF8xMUggICAgICAgICAgICgxIDw8IDI4KQotCi0jZGVmaW5lIElXTF9ETF9TVEFUUyAgICAgICAgICgxIDw8IDI5KQotI2RlZmluZSBJV0xfRExfVFhfUkVQTFkgICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgSVdMX0RMX1FPUyAgICAgICAgICAgKDEgPDwgMzEpCi0KLSNkZWZpbmUgSVdMX0VSUk9SKGYsIGEuLi4pIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCi0jZGVmaW5lIElXTF9XQVJOSU5HKGYsIGEuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSU5GTyhmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSVdMX0RFQlVHX01BQzgwMjExKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX01BQzgwMjExLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVEVNUChmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfVEVNUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NDQU4oZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1NDQU4sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RYKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX1RYLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSVNSKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfSVNSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTEVEKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTEVELCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfV0VQKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfV0VQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSEMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IT1NUX0NPTU1BTkQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19DQUxJQihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0NBTElCLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRlcoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9GVywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19EUk9QX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FQKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lPKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9SQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTk9USUYoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IVChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hULCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU1RBVFMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUU9TKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9RT1MsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQURJTyhmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9SQURJTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1BPV0VSKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfMTFIKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMXzExSCwgZiwgIyMgYSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjZTI1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaApAQCAtMCwwICsxLDE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9faXdsXzM5NDVfZmhfaF9fCisjZGVmaW5lIF9faXdsXzM5NDVfZmhfaF9fCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBpd2wzOTQ1IEZsb3cgSGFuZGxlciBEZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIEkvTyBhcmVhIGlzIGRpcmVjdGx5IHJlYWQvd3JpdGFibGUgYnkgZHJpdmVyIChlLmcuIExpbnV4IHVzZXMgd3JpdGVsKCkpCisgKiBBZGRyZXNzZXMgYXJlIG9mZnNldHMgZnJvbSBkZXZpY2UncyBQQ0kgaGFyZHdhcmUgYmFzZSBhZGRyZXNzLgorICovCisjZGVmaW5lIEZIMzlfTUVNX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgICgweDA4MDApCisjZGVmaW5lIEZIMzlfTUVNX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgICgweDEwMDApCisKKyNkZWZpbmUgRkgzOV9DQkNDX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDE0MCkKKyNkZWZpbmUgRkgzOV9URkRCX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDE4MCkKKyNkZWZpbmUgRkgzOV9SQ1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDQwMCkKKyNkZWZpbmUgRkgzOV9SU1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDRjMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDUwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RBQkxFCQkoRkgzOV9NRU1fTE9XRVJfQk9VTkQgKyAweDY4MCkKKworLyogVEZEQiAoVHJhbnNtaXQgRnJhbWUgQnVmZmVyIERlc2NyaXB0b3IpICovCisjZGVmaW5lIEZIMzlfVEZEQihfY2gsIGJ1ZikJCQkoRkgzOV9URkRCX1RBQkxFICsgXAorCQkJCQkJICgoX2NoKSAqIDIgKyAoYnVmKSkgKiAweDI4KQorI2RlZmluZSBGSDM5X1RGREJfQ0hOTF9CVUZfQ1RSTF9SRUcoX2NoKQkoRkgzOV9URkRCX1RBQkxFICsgMHg1MCAqIChfY2gpKQorCisvKiBDQkNDIGNoYW5uZWwgaXMgWzAsMl0gKi8KKyNkZWZpbmUgRkgzOV9DQkNDKF9jaCkJCShGSDM5X0NCQ0NfVEFCTEUgKyAoX2NoKSAqIDB4OCkKKyNkZWZpbmUgRkgzOV9DQkNDX0NUUkwoX2NoKQkoRkgzOV9DQkNDKF9jaCkgKyAweDAwKQorI2RlZmluZSBGSDM5X0NCQ0NfQkFTRShfY2gpCShGSDM5X0NCQ0MoX2NoKSArIDB4MDQpCisKKy8qIFJDU1IgY2hhbm5lbCBpcyBbMCwyXSAqLworI2RlZmluZSBGSDM5X1JDU1IoX2NoKQkJCShGSDM5X1JDU1JfVEFCTEUgKyAoX2NoKSAqIDB4NDApCisjZGVmaW5lIEZIMzlfUkNTUl9DT05GSUcoX2NoKQkJKEZIMzlfUkNTUihfY2gpICsgMHgwMCkKKyNkZWZpbmUgRkgzOV9SQ1NSX1JCRF9CQVNFKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MDQpCisjZGVmaW5lIEZIMzlfUkNTUl9XUFRSKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MjApCisjZGVmaW5lIEZIMzlfUkNTUl9SUFRSX0FERFIoX2NoKQkoRkgzOV9SQ1NSKF9jaCkgKyAweDI0KQorCisjZGVmaW5lIEZIMzlfUlNDU1JfQ0hOTDBfV1BUUgkJKEZIMzlfUkNTUl9XUFRSKDApKQorCisvKiBSU1NSICovCisjZGVmaW5lIEZIMzlfUlNTUl9DVFJMCQkJKEZIMzlfUlNTUl9UQUJMRSArIDB4MDAwKQorI2RlZmluZSBGSDM5X1JTU1JfU1RBVFVTCQkoRkgzOV9SU1NSX1RBQkxFICsgMHgwMDQpCisKKy8qIFRDU1IgKi8KKyNkZWZpbmUgRkgzOV9UQ1NSKF9jaCkJCQkoRkgzOV9UQ1NSX1RBQkxFICsgKF9jaCkgKiAweDIwKQorI2RlZmluZSBGSDM5X1RDU1JfQ09ORklHKF9jaCkJCShGSDM5X1RDU1IoX2NoKSArIDB4MDApCisjZGVmaW5lIEZIMzlfVENTUl9DUkVESVQoX2NoKQkJKEZIMzlfVENTUihfY2gpICsgMHgwNCkKKyNkZWZpbmUgRkgzOV9UQ1NSX0JVRkZfU1RUUyhfY2gpCShGSDM5X1RDU1IoX2NoKSArIDB4MDgpCisKKy8qIFRTU1IgKi8KKyNkZWZpbmUgRkgzOV9UU1NSX0NCQl9CQVNFICAgICAgICAoRkgzOV9UU1NSX1RBQkxFICsgMHgwMDApCisjZGVmaW5lIEZIMzlfVFNTUl9NU0dfQ09ORklHICAgICAgKEZIMzlfVFNTUl9UQUJMRSArIDB4MDA4KQorI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTICAgICAgIChGSDM5X1RTU1JfVEFCTEUgKyAweDAxMCkKKworCisvKiBEQk0gKi8KKworI2RlZmluZSBGSDM5X1NSVkNfQ0hOTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNikKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFICAgICAoMjApCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19JUlFfUkJUSCAgICAgICg0KQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOICAgICgweDA4MDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgICAgICAgICgweDgwMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgICAgICAgICAgICgweDIwMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NQVhfRlJBR19TSVpFXzEyOAkJKDB4MDEwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUCQkoMHgwMDAwMTAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgJCQkoMHgwMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0RSSVZFUgkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRElTQUJMRV9WQUwJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwJKDB4MDAwMDAwMDgpCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRAkJKDB4MDAyMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UCQkoMHgwMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UJCSgweDAwMDAwMDAwKQorI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFCQkoMHg4MDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1RDU1JfQ0hOTF9UWF9CVUZfU1RTX1JFR19WQUxfVEZEQl9WQUxJRAkJKDB4MDAwMDQwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfQklUX1RGREJfV1BUUgkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9UWFBEX09OCSgweEZGMDAwMDAwKQorI2RlZmluZSBGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX1RYUERfT04JKDB4MDBGRjAwMDApCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9NQVhfRlJBR19TSVpFXzEyOEIJKDB4MDAwMDA0MDApCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04JCSgweDAwMDAwMTAwKQorI2RlZmluZSBGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTgkJKDB4MDAwMDAwODApCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SU1BfV0FJVF9USAkoMHgwMDAwMDAyMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9SU1BfV0FJVF9USAkJKDB4MDAwMDAwMDUpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoKQkoQklUKF9jaCkgPDwgMjQpCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2gpCShCSVQoX2NoKSA8PCAxNikKKworI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKF9jaCkgXAorCShGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2gpIHwgXAorCSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoKSkKKworI2RlZmluZSBGSDM5X1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRQkJCSgweDAxMDAwMDAwKQorCitzdHJ1Y3QgaXdsMzk0NV90ZmRfdGIgeworCV9fbGUzMiBhZGRyOworCV9fbGUzMiBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfdGZkIHsKKwlfX2xlMzIgY29udHJvbF9mbGFnczsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmRfdGIgdGJzWzRdOworCXU4IF9fcGFkWzI4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNlbmRpZiAvKiBfX2l3bF8zOTQ1X2ZoX2hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKaW5kZXggOTRlYTBlNi4uMjA1NjAzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY5LDc3ICs2OSwyNiBAQAogI2lmbmRlZiBfX2l3bF8zOTQ1X2h3X18KICNkZWZpbmUgX19pd2xfMzk0NV9od19fCiAKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisKIC8qCiAgKiB1Q29kZSBxdWV1ZSBtYW5hZ2VtZW50IGRlZmluaXRpb25zIC4uLgogICogUXVldWUgIzQgaXMgdGhlIGNvbW1hbmQgcXVldWUgZm9yIDM5NDUgYW5kIDQ5NjUuCiAgKi8KLSNkZWZpbmUgSVdMX0NNRF9RVUVVRV9OVU0gICAgICAgNAotCi0vKiBUeCByYXRlcyAqLwotI2RlZmluZSBJV0xfQ0NLX1JBVEVTIDQKLSNkZWZpbmUgSVdMX09GRE1fUkFURVMgOAotI2RlZmluZSBJV0xfSFRfUkFURVMgMAotI2RlZmluZSBJV0xfTUFYX1JBVEVTICAoSVdMX0NDS19SQVRFUytJV0xfT0ZETV9SQVRFUytJV0xfSFRfUkFURVMpCisjZGVmaW5lIElXTF9DTURfUVVFVUVfTlVNCTQKIAogLyogVGltZSBjb25zdGFudHMgKi8KICNkZWZpbmUgU0hPUlRfU0xPVF9USU1FIDkKICNkZWZpbmUgTE9OR19TTE9UX1RJTUUgMjAKIAogLyogUlNTSSB0byBkQm0gKi8KLSNkZWZpbmUgSVdMX1JTU0lfT0ZGU0VUCTk1CisjZGVmaW5lIElXTDM5X1JTU0lfT0ZGU0VUCTk1CiAKIC8qCiAgKiBFRVBST00gcmVsYXRlZCBjb25zdGFudHMsIGVudW1zLCBhbmQgc3RydWN0dXJlcy4KICAqLwotCi0vKgotICogRUVQUk9NIGFjY2VzcyB0aW1lIHZhbHVlczoKLSAqCi0gKiBEcml2ZXIgaW5pdGlhdGVzIEVFUFJPTSByZWFkIGJ5IHdyaXRpbmcgYnl0ZSBhZGRyZXNzIDw8IDEgdG8gQ1NSX0VFUFJPTV9SRUcsCi0gKiAgIHRoZW4gY2xlYXJpbmcgKHdpdGggc3Vic2VxdWVudCByZWFkL21vZGlmeS93cml0ZSkgQ1NSX0VFUFJPTV9SRUcgYml0Ci0gKiAgIENTUl9FRVBST01fUkVHX0JJVF9DTUQgKDB4MikuCi0gKiBEcml2ZXIgdGhlbiBwb2xscyBDU1JfRUVQUk9NX1JFRyBmb3IgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0sgKDB4MSkuCi0gKiBXaGVuIHBvbGxpbmcsIHdhaXQgMTAgdVNlYyBiZXR3ZWVuIHBvbGxpbmcgbG9vcHMsIHVwIHRvIGEgbWF4aW11bSA1MDAwIHVTZWMuCi0gKiBEcml2ZXIgcmVhZHMgMTYtYml0IHZhbHVlIGZyb20gYml0cyAzMS0xNiBvZiBDU1JfRUVQUk9NX1JFRy4KLSAqLwotI2RlZmluZSBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUCTUwMDAgLyogdVNlYyAqLwotCi0vKgotICogUmVndWxhdG9yeSBjaGFubmVsIHVzYWdlIGZsYWdzIGluIEVFUFJPTSBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsLmZsYWdzLgotICoKLSAqIElCU1MgYW5kL29yIEFQIG9wZXJhdGlvbiBpcyBhbGxvd2VkICpvbmx5KiBvbiB0aG9zZSBjaGFubmVscyB3aXRoCi0gKiAoVkFMSUQgJiYgSUJTUyAmJiBBQ1RJVkUgJiYgIVJBREFSKS4gIFRoaXMgcmVzdHJpY3Rpb24gaXMgaW4gcGxhY2UgYmVjYXVzZQotICogUkFEQVIgZGV0ZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIDM5NDUgZHJpdmVyLCBidXQgaXMgYQotICogcmVxdWlyZW1lbnQgZm9yIGVzdGFibGlzaGluZyBhIG5ldyBuZXR3b3JrIGZvciBsZWdhbCBvcGVyYXRpb24gb24gY2hhbm5lbHMKLSAqIHJlcXVpcmluZyBSQURBUiBkZXRlY3Rpb24gb3IgcmVzdHJpY3RpbmcgQUNUSVZFIHNjYW5uaW5nLgotICoKLSAqIE5PVEU6ICAiV0lERSIgZmxhZyBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCBpcyBzdXBwb3J0ZWQ7Ci0gKiAgICAgICAgMzk0NSBkb2VzIG5vdCBzdXBwb3J0IEZBVCA0MCBNSHotd2lkZSBjaGFubmVscy4KLSAqCi0gKiBOT1RFOiAgVXNpbmcgYSBjaGFubmVsIGluYXBwcm9wcmlhdGVseSB3aWxsIHJlc3VsdCBpbiBhIHVDb2RlIGVycm9yIQotICovCi1lbnVtIHsKLQlFRVBST01fQ0hBTk5FTF9WQUxJRCA9ICgxIDw8IDApLAkvKiB1c2FibGUgZm9yIHRoaXMgU0tVL2dlbyAqLwotCUVFUFJPTV9DSEFOTkVMX0lCU1MgPSAoMSA8PCAxKSwJCS8qIHVzYWJsZSBhcyBhbiBJQlNTIGNoYW5uZWwgKi8KLQkvKiBCaXQgMiBSZXNlcnZlZCAqLwotCUVFUFJPTV9DSEFOTkVMX0FDVElWRSA9ICgxIDw8IDMpLAkvKiBhY3RpdmUgc2Nhbm5pbmcgYWxsb3dlZCAqLwotCUVFUFJPTV9DSEFOTkVMX1JBREFSID0gKDEgPDwgNCksCS8qIHJhZGFyIGRldGVjdGlvbiByZXF1aXJlZCAqLwotCUVFUFJPTV9DSEFOTkVMX1dJREUgPSAoMSA8PCA1KSwJCS8qIDIwIE1IeiBjaGFubmVsIG9rYXkgKi8KLQkvKiBCaXQgNiBSZXNlcnZlZCAod2FzIE5hcnJvdyBDaGFubmVsKSAqLwotCUVFUFJPTV9DSEFOTkVMX0RGUyA9ICgxIDw8IDcpLAkvKiBkeW5hbWljIGZyZXEgc2VsZWN0aW9uIGNhbmRpZGF0ZSAqLwotfTsKLQotLyogU0tVIENhcGFiaWxpdGllcyAqLwotI2RlZmluZSBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBFRVBST01fU0tVX0NBUF9IV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogCi0vKiAqcmVndWxhdG9yeSogY2hhbm5lbCBkYXRhIGZyb20gZWVwcm9tLCBvbmUgZm9yIGVhY2ggY2hhbm5lbCAqLwotc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgewotCXU4IGZsYWdzOwkJLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCi0JczggbWF4X3Bvd2VyX2F2ZzsJLyogbWF4IHBvd2VyIChkQm0pIG9uIHRoaXMgY2hubCwgbGltaXQgMzEgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiAvKgogICogTWFwcGluZyBvZiBhIFR4IHBvd2VyIGxldmVsLCBhdCBmYWN0b3J5IGNhbGlicmF0aW9uIHRlbXBlcmF0dXJlLAogICogICB0byBhIHJhZGlvL0RTUCBnYWluIHRhYmxlIGluZGV4LgpAQCAtMjMzLDcgKzE4Miw3IEBACiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNAogICovCiAJdTE2IGJhbmRfMV9jb3VudDsJLyogYWJzLm9mczogMTk2ICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF8xX2NoYW5uZWxzWzE0XTsgIC8qIGFicy5vZnM6IDE5NiAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgYmFuZF8xX2NoYW5uZWxzWzE0XTsgIC8qIGFicy5vZnM6IDE5OCAqLwogCiAvKgogICogNC45IEdIeiBjaGFubmVscyAxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5LCAxOTIsIDE5NiwKQEAgLTI0MSwyOCArMTkwLDI4IEBACiAgKiAoNDkxNS01MDgwTUh6KSAobm9uZSBvZiB0aGVzZSBpcyBldmVyIHN1cHBvcnRlZCkKICAqLwogCXUxNiBiYW5kXzJfY291bnQ7CS8qIGFicy5vZnM6IDIyNiAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfMl9jaGFubmVsc1sxM107ICAvKiBhYnMub2ZzOiAyMjggKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfMl9jaGFubmVsc1sxM107ICAvKiBhYnMub2ZzOiAyMjggKi8KIAogLyoKICAqIDUuMiBHSHogY2hhbm5lbHMgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAogICogKDUxNzAtNTMyME1IeikKICAqLwogCXUxNiBiYW5kXzNfY291bnQ7CS8qIGFicy5vZnM6IDI1NCAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfM19jaGFubmVsc1sxMl07ICAvKiBhYnMub2ZzOiAyNTYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfM19jaGFubmVsc1sxMl07ICAvKiBhYnMub2ZzOiAyNTYgKi8KIAogLyoKICAqIDUuNSBHSHogY2hhbm5lbHMgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKICAqICg1NTAwLTU3MDBNSHopCiAgKi8KIAl1MTYgYmFuZF80X2NvdW50OwkvKiBhYnMub2ZzOiAyODAgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzRfY2hhbm5lbHNbMTFdOyAgLyogYWJzLm9mczogMjgyICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzRfY2hhbm5lbHNbMTFdOyAgLyogYWJzLm9mczogMjgyICovCiAKIC8qCiAgKiA1LjcgR0h6IGNoYW5uZWxzIDE0NSwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUKICAqICg1NzI1LTU4MjVNSHopCiAgKi8KIAl1MTYgYmFuZF81X2NvdW50OwkvKiBhYnMub2ZzOiAzMDQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzVfY2hhbm5lbHNbNl07ICAvKiBhYnMub2ZzOiAzMDYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfNV9jaGFubmVsc1s2XTsgIC8qIGFicy5vZnM6IDMwNiAqLwogCiAJdTggcmVzZXJ2ZWQ5WzE5NF07CiAKQEAgLTI3NiwxMjUgKzIyNSwxNSBAQAogCXU4IHJlc2VydmVkMTZbMTcyXTsJLyogZmlsbCBvdXQgdG8gZnVsbCAxMDI0IGJ5dGUgYmxvY2sgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElXTF9FRVBST01fSU1BR0VfU0laRSAxMDI0CisjZGVmaW5lIElXTDM5NDVfRUVQUk9NX0lNR19TSVpFIDEwMjQKIAogLyogRW5kIG9mIEVFUFJPTSAqLwogCi0KLSNpbmNsdWRlICJpd2wtMzk0NS1jb21tYW5kcy5oIgotCi0jZGVmaW5lIFBDSV9MSU5LX0NUUkwgICAgICAweDBGMAotI2RlZmluZSBQQ0lfUE9XRVJfU09VUkNFICAgMHgwQzgKLSNkZWZpbmUgUENJX1JFR19XVU04ICAgICAgIDB4MEU4Ci0jZGVmaW5lIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUICAgICAgICAgKDB4ODAwMDAwMDApCi0KLS8qPT09IEZIIChkYXRhIEZsb3cgSGFuZGxlcikgPT09Ki8KLSNkZWZpbmUgRkhfQkFTRSAgICAgKDB4ODAwKQotCi0jZGVmaW5lIEZIX0NCQ0NfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4MTQwKQotI2RlZmluZSBGSF9URkRCX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDE4MCkKLSNkZWZpbmUgRkhfUkNTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg0MDApCi0jZGVmaW5lIEZIX1JTU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NGMwKQotI2RlZmluZSBGSF9UQ1NSX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDUwMCkKLSNkZWZpbmUgRkhfVFNTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg2ODApCi0KLS8qIFRGREIgKFRyYW5zbWl0IEZyYW1lIEJ1ZmZlciBEZXNjcmlwdG9yKSAqLwotI2RlZmluZSBGSF9URkRCKF9jaGFubmVsLCBidWYpIFwKLQkoRkhfVEZEQl9UQUJMRSsoKF9jaGFubmVsKSoyKyhidWYpKSoweDI4KQotI2RlZmluZSBBTE1fRkhfVEZEQl9DSE5MX0JVRl9DVFJMX1JFRyhfY2hhbm5lbCkgXAotCShGSF9URkRCX1RBQkxFICsgMHg1MCAqIF9jaGFubmVsKQotLyogQ0JDQyBfY2hhbm5lbCBpcyBbMCwyXSAqLwotI2RlZmluZSBGSF9DQkNDKF9jaGFubmVsKSAgICAgICAgICAgKEZIX0NCQ0NfVEFCTEUrKF9jaGFubmVsKSoweDgpCi0jZGVmaW5lIEZIX0NCQ0NfQ1RSTChfY2hhbm5lbCkgICAgICAoRkhfQ0JDQyhfY2hhbm5lbCkrMHgwMCkKLSNkZWZpbmUgRkhfQ0JDQ19CQVNFKF9jaGFubmVsKSAgICAgIChGSF9DQkNDKF9jaGFubmVsKSsweDA0KQotCi0vKiBSQ1NSIF9jaGFubmVsIGlzIFswLDJdICovCi0jZGVmaW5lIEZIX1JDU1IoX2NoYW5uZWwpICAgICAgICAgICAoRkhfUkNTUl9UQUJMRSsoX2NoYW5uZWwpKjB4NDApCi0jZGVmaW5lIEZIX1JDU1JfQ09ORklHKF9jaGFubmVsKSAgICAoRkhfUkNTUihfY2hhbm5lbCkrMHgwMCkKLSNkZWZpbmUgRkhfUkNTUl9SQkRfQkFTRShfY2hhbm5lbCkgIChGSF9SQ1NSKF9jaGFubmVsKSsweDA0KQotI2RlZmluZSBGSF9SQ1NSX1dQVFIoX2NoYW5uZWwpICAgICAgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MjApCi0jZGVmaW5lIEZIX1JDU1JfUlBUUl9BRERSKF9jaGFubmVsKSAoRkhfUkNTUihfY2hhbm5lbCkrMHgyNCkKLQotI2RlZmluZSBGSF9SU0NTUl9DSE5MMF9XUFRSICAgICAgICAoRkhfUkNTUl9XUFRSKDApKQotCi0vKiBSU1NSICovCi0jZGVmaW5lIEZIX1JTU1JfQ1RSTCAgICAgICAgICAgIChGSF9SU1NSX1RBQkxFKzB4MDAwKQotI2RlZmluZSBGSF9SU1NSX1NUQVRVUyAgICAgICAgICAoRkhfUlNTUl9UQUJMRSsweDAwNCkKLSNkZWZpbmUgRkhfUlNTUl9DSE5MMF9SWF9TVEFUVVNfQ0hOTF9JRExFCSgweDAxMDAwMDAwKQotLyogVENTUiAqLwotI2RlZmluZSBGSF9UQ1NSKF9jaGFubmVsKSAgICAgICAgICAgKEZIX1RDU1JfVEFCTEUrKF9jaGFubmVsKSoweDIwKQotI2RlZmluZSBGSF9UQ1NSX0NPTkZJRyhfY2hhbm5lbCkgICAgKEZIX1RDU1IoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX1RDU1JfQ1JFRElUKF9jaGFubmVsKSAgICAoRkhfVENTUihfY2hhbm5lbCkrMHgwNCkKLSNkZWZpbmUgRkhfVENTUl9CVUZGX1NUVFMoX2NoYW5uZWwpIChGSF9UQ1NSKF9jaGFubmVsKSsweDA4KQotLyogVFNTUiAqLwotI2RlZmluZSBGSF9UU1NSX0NCQl9CQVNFICAgICAgICAoRkhfVFNTUl9UQUJMRSsweDAwMCkKLSNkZWZpbmUgRkhfVFNTUl9NU0dfQ09ORklHICAgICAgKEZIX1RTU1JfVEFCTEUrMHgwMDgpCi0jZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTICAgICAgIChGSF9UU1NSX1RBQkxFKzB4MDEwKQotCi0KLS8qIERCTSAqLwotCi0jZGVmaW5lIEFMTV9GSF9TUlZDX0NITkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFICAgICAoMjApCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIICAgICAgKDQpCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19CSVRfV1JfU1RUU19FTiAgICAoMHgwODAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSAgICAgICAgICAgKDB4MjAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggICAgICAgICAoMHgwMTAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9JUlFfREVTVF9JTlRfSE9TVCAgICAgICAgICgweDAwMDAxMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0ZIICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRFJJVkVSICAgICAgICAgICAoMHgwMDAwMDAwMSkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMICAgICgweDAwMDAwMDAwKQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgICAgICgweDAwMDAwMDA4KQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRCAgICAgICAgICAgKDB4MDAyMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9QQVVTRSAgICAgICAgICAgICgweDAwMDAwMDAwKQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUgICAgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQgICAgICAgICAgKDB4MDAwMDQwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfQ0hOTF9UWF9CVUZfU1RTX1JFR19CSVRfVEZEQl9XUFRSICAgICAgICAgICAoMHgwMDAwMDAwMSkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiAgICAgICgweEZGMDAwMDAwKQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiAgICAgICgweDAwRkYwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9NQVhfRlJBR19TSVpFXzEyOEIgICAgKDB4MDAwMDA0MDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1NOT09QX1JEX1RGRF9PTiAgICAgICAoMHgwMDAwMDEwMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiAgICAgICAoMHgwMDAwMDA4MCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggICAgICgweDAwMDAwMDIwKQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfUlNQX1dBSVRfVEggICAgICAgICAgICgweDAwMDAwMDA1KQotCi0jZGVmaW5lIEFMTV9UQl9NQVhfQllURVNfQ09VTlQgICAgICAoMHhGRkYwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoYW5uZWwpIFwKLQkoKDFMVSA8PCBfY2hhbm5lbCkgPDwgMjQpCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaGFubmVsKSBcCi0JKCgxTFUgPDwgX2NoYW5uZWwpIDw8IDE2KQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShfY2hhbm5lbCkgXAotCShBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaGFubmVsKSB8IFwKLQkgQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoYW5uZWwpKQogI2RlZmluZSBQQ0lfQ0ZHX1JFVl9JRF9CSVRfQkFTSUNfU0tVICAgICAgICAgICAgICAgICgweDQwKQkvKiBiaXQgNiAgICAqLwogI2RlZmluZSBQQ0lfQ0ZHX1JFVl9JRF9CSVRfUlRQICAgICAgICAgICAgICAgICAgICAgICgweDgwKQkvKiBiaXQgNyAgICAqLwogCiAjZGVmaW5lIFRGRF9RVUVVRV9NSU4gICAgICAgICAgIDAKICNkZWZpbmUgVEZEX1FVRVVFX01BWCAgICAgICAgICAgNgotI2RlZmluZSBURkRfUVVFVUVfU0laRV9NQVggICAgICAoMjU2KQogCiAjZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQogCkBAIC00MTYsMTIgKzI1NSw2IEBACiAjZGVmaW5lIFRGRF9DVExfUEFEX1NFVChuKSAgICAgICAgIChuIDw8IDI4KQogI2RlZmluZSBURkRfQ1RMX1BBRF9HRVQoY3RsKSAgICAgICAoY3RsID4+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+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOwpAQCAtNDEwLDMgKzQxMCw0IEBACiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sIDEpOwogfQogCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCmluZGV4IDc0OWFjMDMuLjNiNjU2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw0OCArMjcsMjAgQEAKICNpZm5kZWYgSVdMMzk0NV9MRURTX0gKICNkZWZpbmUgSVdMMzk0NV9MRURTX0gKIAotc3RydWN0IGl3bDM5NDVfcHJpdjsKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKLSNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQotI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCi0jZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCi0jZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCi0jZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCisjaW5jbHVkZSAiaXdsLWxlZC5oIgogCi1lbnVtIGxlZF90eXBlIHsKLQlJV0xfTEVEX1RSR19UWCwKLQlJV0xfTEVEX1RSR19SWCwKLQlJV0xfTEVEX1RSR19BU1NPQywKLQlJV0xfTEVEX1RSR19SQURJTywKLQlJV0xfTEVEX1RSR19NQVgsCi19OwotCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotCi1zdHJ1Y3QgaXdsMzk0NV9sZWQgewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwotCWNoYXIgbmFtZVszMl07Ci0KLQlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKLQlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7Ci0JaW50ICgqbGVkX3BhdHRlcm4pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwotCi0JZW51bSBsZWRfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwotfTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfTEVEUyAqLworc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CiAKKyNlbmRpZiAvKiBJV0xXSUZJX0xFRFMqLwogI2VuZGlmIC8qIElXTDM5NDVfTEVEU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKaW5kZXggMjFjODQxOC4uZjY1YzMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTM5NDUtcnMiCkBAIC01MSw2ICs1Miw3IEBACiAKIHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSB7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzMzIgKmV4cGVjdGVkX3RwdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcGFydGlhbF9mbHVzaDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfZmx1c2g7CkBAIC02Miw3ICs2NCw3IEBACiAJdTggc3RhcnRfcmF0ZTsKIAl1OCBpYnNzX3N0YV9hZGRlZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByYXRlX3NjYWxlX2ZsdXNoOwotCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRdOworCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZTsKICNlbmRpZgpAQCAtNzEsMTkgKzczLDE5IEBACiAJaW50IGxhc3RfdHhyYXRlX2lkeDsKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfZ1tJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJNywgMTMsIDM1LCA1OCwgMCwgMCwgNzYsIDEwNCwgMTMwLCAxNjgsIDE5MSwgMjAyCiB9OwogCi1zdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCA4MCwgOTMsIDExMywgMTIzLCAxMjUKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYVtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2FbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJMCwgMCwgMCwgMCwgNDAsIDU3LCA3MiwgOTgsIDEyMSwgMTU0LCAxNzcsIDE4NgogfTsKIAotc3RhdGljIHMzMiBpd2wzOTQ1X2V4cGVjdGVkX3RwdF9iW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYltJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OwogCkBAIC0xMTksMTIgKzEyMSwxMyBAQAogI2RlZmluZSBJV0xfUkFURV9NQVhfV0lORE9XICAgICAgICAgIDYyCiAjZGVmaW5lIElXTF9SQVRFX0ZMVVNIICAgICAgIAkgKDMqSFopCiAjZGVmaW5lIElXTF9SQVRFX1dJTl9GTFVTSCAgICAgICAoSFovMikKLSNkZWZpbmUgSVdMX1JBVEVfSElHSF9USCAgICAgICAgICAxMTUyMAorI2RlZmluZSBJV0wzOV9SQVRFX0hJR0hfVEggICAgICAgICAgMTE1MjAKICNkZWZpbmUgSVdMX1NVQ0NFU1NfVVBfVEgJICAgODk2MAogI2RlZmluZSBJV0xfU1VDQ0VTU19ET1dOX1RICSAgMTA4ODAKICNkZWZpbmUgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEggICAgICAgOAogI2RlZmluZSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCAgICAgICA4CiAjZGVmaW5lIElXTF9SQVRFX0RFQ1JFQVNFX1RIICAgICAgIDE5MjAKKyNkZWZpbmUgSVdMX1JBVEVfUkVUUllfVEgJICAgICAxNQogCiBzdGF0aWMgdTggaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHMzMiByc3NpLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CkBAIC0xNjUsNyArMTY4LDcgQEAKIAl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA9IDA7CiAJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gLTE7CiAJd2luZG93LT5jb3VudGVyID0gMDsKLQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVl9UUFQ7CisJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOwogCXdpbmRvdy0+c3RhbXAgPSAwOwogfQogCkBAIC0xODEsMjAgKzE4NCwyMSBAQAogCWludCB1bmZsdXNoZWQgPSAwOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJLyoKIAkgKiBGb3IgZWFjaCByYXRlLCBpZiB3ZSBoYXZlIGNvbGxlY3RlZCBkYXRhIG9uIHRoYXQgcmF0ZQogCSAqIGFuZCBpdCBoYXMgYmVlbiBtb3JlIHRoYW4gSVdMX1JBVEVfV0lOX0ZMVVNICiAJICogc2luY2Ugd2UgZmx1c2hlZCwgY2xlYXIgb3V0IHRoZSBnYXRoZXJlZCBzdGF0aXN0aWNzCiAJICovCi0JZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaSsrKSB7CiAJCWlmICghcnNfc3RhLT53aW5baV0uY291bnRlcikKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcnNfc3RhLT53aW5baV0uc3RhbXAgKwogCQkJICAgICAgIElXTF9SQVRFX1dJTl9GTFVTSCkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJmbHVzaGluZyAlZCBzYW1wbGVzIG9mIHJhdGUgIgorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImZsdXNoaW5nICVkIHNhbXBsZXMgb2YgcmF0ZSAiCiAJCQkJICAgICAgICJpbmRleCAlZFxuIiwKIAkJCQkgICAgICAgcnNfc3RhLT53aW5baV0uY291bnRlciwgaSk7CiAJCQlpd2wzOTQ1X2NsZWFyX3dpbmRvdygmcnNfc3RhLT53aW5baV0pOwpAQCAtMjEzLDExICsyMTcsMTIgQEAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmF0ZV9zY2FsZV9mbHVzaCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCWludCB1bmZsdXNoZWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHBhY2tldF9jb3VudCwgZHVyYXRpb24sIHBwczsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXVuZmx1c2hlZCA9IGl3bDM5NDVfcmF0ZV9zY2FsZV9mbHVzaF93aW5kb3dzKHJzX3N0YSk7CiAKQEAgLTIzMiw3ICsyMzcsNyBAQAogCQlkdXJhdGlvbiA9CiAJCSAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSByc19zdGEtPmxhc3RfcGFydGlhbF9mbHVzaCk7CiAKLQkJSVdMX0RFQlVHX1JBVEUoIlR4J2QgJWQgcGFja2V0cyBpbiAlZG1zXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiVHgnZCAlZCBwYWNrZXRzIGluICVkbXNcbiIsCiAJCQkgICAgICAgcGFja2V0X2NvdW50LCBkdXJhdGlvbik7CiAKIAkJLyogRGV0ZXJtaW5lIHBhY2tldHMgcGVyIHNlY29uZCAqLwpAQCAtMjUyLDcgKzI1Nyw3IEBACiAKIAkJcnNfc3RhLT5mbHVzaF90aW1lID0gbXNlY3NfdG9famlmZmllcyhkdXJhdGlvbik7CiAKLQkJSVdMX0RFQlVHX1JBVEUoIm5ldyBmbHVzaCBwZXJpb2Q6ICVkIG1zZWMgYXZlICVkXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAibmV3IGZsdXNoIHBlcmlvZDogJWQgbXNlYyBhdmUgJWRcbiIsCiAJCQkgICAgICAgZHVyYXRpb24sIHBhY2tldF9jb3VudCk7CiAKIAkJbW9kX3RpbWVyKCZyc19zdGEtPnJhdGVfc2NhbGVfZmx1c2gsIGppZmZpZXMgKwpAQCAtMjcwLDcgKzI3NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogLyoqCkBAIC0yODYsNTAgKzI5MSw3MCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJczMyIGZhaWxfY291bnQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJaWYgKCFyZXRyaWVzKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogcmV0cmllcyA9PSAwIC0tIHNob3VsZCBiZSBhdCBsZWFzdCAxXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByZXRyaWVzID09IDAgLS0gc2hvdWxkIGJlIGF0IGxlYXN0IDFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwotCXdoaWxlIChyZXRyaWVzLS0pIHsKIAotCQkvKiBJZiB3ZSBoYXZlIGZpbGxlZCB1cCB0aGUgd2luZG93IHRoZW4gc3VidHJhY3Qgb25lIGZyb20gdGhlCi0JCSAqIHN1Y2Nlc3MgY291bnRlciBpZiB0aGUgaGlnaC1iaXQgaXMgY291bnRpbmcgdG93YXJkCi0JCSAqIHN1Y2Nlc3MgKi8KLQkJaWYgKHdpbmRvdy0+Y291bnRlciA9PSBJV0xfUkFURV9NQVhfV0lORE9XKSB7Ci0JCQlpZiAod2luZG93LT5kYXRhICYgKDFVTEwgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSkpCisJLyoKKwkgKiBLZWVwIHRyYWNrIG9mIG9ubHkgdGhlIGxhdGVzdCA2MiB0eCBmcmFtZSBhdHRlbXB0cyBpbiB0aGlzIHJhdGUncworCSAqIGhpc3Rvcnkgd2luZG93OyBhbnl0aGluZyBvbGRlciBpc24ndCByZWFsbHkgcmVsZXZhbnQgYW55IG1vcmUuCisJICogSWYgd2UgaGF2ZSBmaWxsZWQgdXAgdGhlIHNsaWRpbmcgd2luZG93LCBkcm9wIHRoZSBvbGRlc3QgYXR0ZW1wdDsKKwkgKiBpZiB0aGUgb2xkZXN0IGF0dGVtcHQgKGhpZ2hlc3QgYml0IGluIGJpdG1hcCkgc2hvd3MgInN1Y2Nlc3MiLAorCSAqIHN1YnRyYWN0ICIxIiBmcm9tIHRoZSBzdWNjZXNzIGNvdW50ZXIgKHRoaXMgaXMgdGhlIG1haW4gcmVhc29uCisJICogd2Uga2VlcCB0aGVzZSBiaXRtYXBzISkuCisJICogKi8KKwl3aGlsZSAocmV0cmllcyA+IDApIHsKKwkJaWYgKHdpbmRvdy0+Y291bnRlciA+PSBJV0xfUkFURV9NQVhfV0lORE9XKSB7CisKKwkJCS8qIHJlbW92ZSBlYXJsaWVzdCAqLworCQkJd2luZG93LT5jb3VudGVyID0gSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDE7CisKKwkJCWlmICh3aW5kb3ctPmRhdGEgJiAoMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKSkgeworCQkJCXdpbmRvdy0+ZGF0YSAmPSB+KDFVTEwgPDwgKElXTF9SQVRFX01BWF9XSU5ET1cgLSAxKSk7CiAJCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXItLTsKLQkJfSBlbHNlCi0JCQl3aW5kb3ctPmNvdW50ZXIrKzsKLQotCQkvKiBTbGlkZSB0aGUgd2luZG93IHRvIHRoZSBsZWZ0IG9uZSBiaXQgKi8KLQkJd2luZG93LT5kYXRhID0gKHdpbmRvdy0+ZGF0YSA8PCAxKTsKLQotCQkvKiBJZiB0aGlzIHBhY2tldCB3YXMgYSBzdWNjZXNzIHRoZW4gc2V0IHRoZSBsb3cgYml0IGhpZ2ggKi8KLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyKys7Ci0JCQl3aW5kb3ctPmRhdGEgfD0gMTsKKwkJCX0KIAkJfQogCi0JCS8qIHdpbmRvdy0+Y291bnRlciBjYW4ndCBiZSAwIC0tIGl0IGlzIGVpdGhlciA+MCBvcgotCQkgKiBJV0xfUkFURV9NQVhfV0lORE9XICovCi0JCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IDEyODAwICogd2luZG93LT5zdWNjZXNzX2NvdW50ZXIgLwotCQkgICAgd2luZG93LT5jb3VudGVyOworCQkvKiBJbmNyZW1lbnQgZnJhbWVzLWF0dGVtcHRlZCBjb3VudGVyICovCisJCXdpbmRvdy0+Y291bnRlcisrOwogCi0JCS8qIFRhZyB0aGlzIHdpbmRvdyBhcyBoYXZpbmcgYmVlbiB1cGRhdGVkICovCi0JCXdpbmRvdy0+c3RhbXAgPSBqaWZmaWVzOworCQkvKiBTaGlmdCBiaXRtYXAgYnkgb25lIGZyYW1lICh0aHJvdyBhd2F5IG9sZGVzdCBoaXN0b3J5KSwKKwkJICogT1IgaW4gIjEiLCBhbmQgaW5jcmVtZW50ICJzdWNjZXNzIiBpZiB0aGlzCisJCSAqIGZyYW1lIHdhcyBzdWNjZXNzZnVsLiAqLworCQl3aW5kb3ctPmRhdGEgPDw9IDE7CisJCWlmIChzdWNjZXNzID4gMCkgeworCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIrKzsKKwkJCXdpbmRvdy0+ZGF0YSB8PSAweDE7CisJCQlzdWNjZXNzLS07CisJCX0KIAorCQlyZXRyaWVzLS07CiAJfQogCisJLyogQ2FsY3VsYXRlIGN1cnJlbnQgc3VjY2VzcyByYXRpbywgYXZvaWQgZGl2aWRlLWJ5LTAhICovCisJaWYgKHdpbmRvdy0+Y291bnRlciA+IDApCisJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IDEyOCAqICgxMDAgKiB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcikKKwkJCQkJLyB3aW5kb3ctPmNvdW50ZXI7CisJZWxzZQorCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKKworCS8qIENhbGN1bGF0ZSBhdmVyYWdlIHRocm91Z2hwdXQsIGlmIHdlIGhhdmUgZW5vdWdoIGhpc3RvcnkuICovCiAJaWYgKChmYWlsX2NvdW50ID49IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSB8fAogCSAgICAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPj0gSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKQogCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gKgogCQkJCXJzX3N0YS0+ZXhwZWN0ZWRfdHB0W2luZGV4XSArIDY0KSAvIDEyOCk7CiAJZWxzZQotCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVl9UUFQ7CisJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKKworCS8qIFRhZyB0aGlzIHdpbmRvdyBhcyBoYXZpbmcgYmVlbiB1cGRhdGVkICovCisJd2luZG93LT5zdGFtcCA9IGppZmZpZXM7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIApAQCAtMzM5LDEwICszNjQsMTAgQEAKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9IHByaXZfc3RhOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKXByaXZfcjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCWludCBpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJLyogVE9ETzogd2hhdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcmF0ZSBmb3IgU1RBPyBBYm91dCBtaWRkbGU/IE1heWJlIG5vdAogCSAqIHRoZSBsb3dlc3Qgb3IgdGhlIGhpZ2hlc3QgcmF0ZS4uIENvdWxkIGNvbnNpZGVyIHVzaW5nIFJTU0kgZnJvbQpAQCAtMzY1LDcgKzM5MCw3IEBACiAJfQogCiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkICpyc19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKQEAgLTM3OSwxMCArNDA0LDExIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCAqcnNfYWxsb2Nfc3RhKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCkKK3N0YXRpYyB2b2lkICpyc19hbGxvY19zdGEodm9pZCAqaXdsX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YSA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaXdsX3ByaXY7CiAJaW50IGk7CiAKIAkvKgpAQCAtMzkwLDExICs0MTYsMTEgQEAKIAkgKglhcyB3ZWxsIGp1c3QgcHV0IGFsbCB0aGUgaW5mb3JtYXRpb24gdGhlcmUuCiAJICovCiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAlyc19zdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yc19zdGEpLCBnZnApOwogCWlmICghcnNfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogRU5PTUVNXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBFTk9NRU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQwMiw2ICs0MjgsOCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnJzX3N0YS0+bG9jayk7CiAKKwlyc19zdGEtPnByaXYgPSBwcml2OworCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gSVdMX1JBVEVfSU5WQUxJRDsKIAogCS8qIGRlZmF1bHQgdG8ganVzdCA4MDIuMTFiICovCkBAIC00MTcsMzMgKzQ0NSwzNCBAQAogCXJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcnNfc3RhOwogCXJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaC5mdW5jdGlvbiA9ICZpd2wzOTQ1X2JnX3JhdGVfc2NhbGVfZmx1c2g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaSsrKQogCQlpd2wzOTQ1X2NsZWFyX3dpbmRvdygmcnNfc3RhLT53aW5baV0pOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIHJzX3N0YTsKIH0KIAotc3RhdGljIHZvaWQgcnNfZnJlZV9zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKK3N0YXRpYyB2b2lkIHJzX2ZyZWVfc3RhKHZvaWQgKml3bF9wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJdm9pZCAqcHJpdl9zdGEpCiB7CiAJc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYgKnBzdGEgPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJcHN0YS0+cnNfc3RhID0gTlVMTDsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAlkZWxfdGltZXJfc3luYygmcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoKTsKIAlrZnJlZShyc19zdGEpOwotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogCiAvKioKICAqIHJzX3R4X3N0YXR1cyAtIFVwZGF0ZSByYXRlIGNvbnRyb2wgdmFsdWVzIGJhc2VkIG9uIFR4IHJlc3VsdHMKICAqCi0gKiBOT1RFOiBVc2VzIGl3bDM5NDVfcHJpdi0+cmV0cnlfcmF0ZSBmb3IgdGhlICMgb2YgcmV0cmllcyBhdHRlbXB0ZWQgYnkKKyAqIE5PVEU6IFVzZXMgaXdsX3ByaXYtPnJldHJ5X3JhdGUgZm9yIHRoZSAjIG9mIHJldHJpZXMgYXR0ZW1wdGVkIGJ5CiAgKiB0aGUgaGFyZHdhcmUgZm9yIGVhY2ggcmF0ZS4KICAqLwogc3RhdGljIHZvaWQgcnNfdHhfc3RhdHVzKHZvaWQgKnByaXZfcmF0ZSwgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCkBAIC00NTMsMjIgKzQ4MiwyNSBAQAogCXM4IHJldHJpZXMgPSAwLCBjdXJyZW50X2NvdW50OwogCWludCBzY2FsZV9yYXRlX2luZGV4LCBmaXJzdF9pbmRleCwgbGFzdF9pbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKXByaXZfcmF0ZTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCi0JcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudDsKKwlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKKwkvKiBTYW5pdHkgQ2hlY2sgZm9yIHJldHJpZXMgKi8KKwlpZiAocmV0cmllcyA+IElXTF9SQVRFX1JFVFJZX1RIKQorCQlyZXRyaWVzID0gSVdMX1JBVEVfUkVUUllfVEg7CiAKIAlmaXJzdF9pbmRleCA9IHNiYW5kLT5iaXRyYXRlc1tpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4XS5od192YWx1ZTsKLQlpZiAoKGZpcnN0X2luZGV4IDwgMCkgfHwgKGZpcnN0X2luZGV4ID49IElXTF9SQVRFX0NPVU5UKSkgewotCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IFJhdGUgb3V0IG9mIGJvdW5kczogJWRcbiIsIGZpcnN0X2luZGV4KTsKKwlpZiAoKGZpcnN0X2luZGV4IDwgMCkgfHwgKGZpcnN0X2luZGV4ID49IElXTF9SQVRFX0NPVU5UXzM5NDUpKSB7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlZFxuIiwgZmlyc3RfaW5kZXgpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKCFwcml2X3N0YSkgewotCQlJV0xfREVCVUdfUkFURSgibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTAyLDcgKzUzNCw3IEBACiAJCWl3bDM5NDVfY29sbGVjdF90eF9kYXRhKHJzX3N0YSwKIAkJCQkgICAgJnJzX3N0YS0+d2luW3NjYWxlX3JhdGVfaW5kZXhdLAogCQkJCSAgICAwLCBjdXJyZW50X2NvdW50LCBzY2FsZV9yYXRlX2luZGV4KTsKLQkJSVdMX0RFQlVHX1JBVEUoIlVwZGF0ZSByYXRlICVkIGZvciAlZCByZXRyaWVzLlxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlVwZGF0ZSByYXRlICVkIGZvciAlZCByZXRyaWVzLlxuIiwKIAkJCSAgICAgICBzY2FsZV9yYXRlX2luZGV4LCBjdXJyZW50X2NvdW50KTsKIAogCQlyZXRyaWVzIC09IGN1cnJlbnRfY291bnQ7CkBAIC01MTIsNyArNTQ0LDcgQEAKIAogCiAJLyogVXBkYXRlIHRoZSBsYXN0IGluZGV4IHdpbmRvdyB3aXRoIHN1Y2Nlc3MvZmFpbHVyZSBiYXNlZCBvbiBBQ0sgKi8KLQlJV0xfREVCVUdfUkFURSgiVXBkYXRlIHJhdGUgJWQgd2l0aCAlcy5cbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlVwZGF0ZSByYXRlICVkIHdpdGggJXMuXG4iLAogCQkgICAgICAgbGFzdF9pbmRleCwKIAkJICAgICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykgPwogCQkgICAgICAgInN1Y2Nlc3MiIDogImZhaWx1cmUiKTsKQEAgLTUzNyw3ICs1NjksNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm47CiB9CkBAIC01NDcsNiArNTc5LDcgQEAKIHsKIAl1OCBoaWdoID0gSVdMX1JBVEVfSU5WQUxJRDsKIAl1OCBsb3cgPSBJV0xfUkFURV9JTlZBTElEOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiBfX21heWJlX3VudXNlZCA9IHJzX3N0YS0+cHJpdjsKIAogCS8qIDgwMi4xMUEgd2Fsa3MgdG8gdGhlIG5leHQgbGl0ZXJhbCBhZGphY2VudCByYXRlIGluCiAJICogdGhlIHJhdGUgdGFibGUgKi8KQEAgLTU2NSw3ICs1OTgsOCBAQAogCiAJCS8qIEZpbmQgdGhlIG5leHQgcmF0ZSB0aGF0IGlzIGluIHRoZSByYXRlIG1hc2sgKi8KIAkJaSA9IGluZGV4ICsgMTsKLQkJZm9yIChtYXNrID0gKDEgPDwgaSk7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrLCBtYXNrIDw8PSAxKSB7CisJCWZvciAobWFzayA9ICgxIDw8IGkpOyBpIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsKKwkJICAgICBpKyssIG1hc2sgPDw9IDEpIHsKIAkJCWlmIChyYXRlX21hc2sgJiBtYXNrKSB7CiAJCQkJaGlnaCA9IGk7CiAJCQkJYnJlYWs7CkBAIC01ODUsNyArNjE5LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbG93KSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOwogCX0KIAogCWhpZ2ggPSBpbmRleDsKQEAgLTU5OCw3ICs2MzIsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBoaWdoKSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGhpZ2hlciByYXRlOiAlZFxuIiwgaGlnaCk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKIAl9CiAKIAlyZXR1cm4gKGhpZ2ggPDwgOCkgfCBsb3c7CkBAIC02MzEsMTkgKzY2NSwyMCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9IHByaXZfc3RhOwogCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSAqd2luZG93ID0gTlVMTDsKLQlpbnQgY3VycmVudF90cHQgPSBJV0xfSU5WX1RQVDsKLQlpbnQgbG93X3RwdCA9IElXTF9JTlZfVFBUOwotCWludCBoaWdoX3RwdCA9IElXTF9JTlZfVFBUOworCWludCBjdXJyZW50X3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOworCWludCBsb3dfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJaW50IGhpZ2hfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJdTMyIGZhaWxfY291bnQ7CiAJczggc2NhbGVfYWN0aW9uID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJdTE2IGZjOwogCXUxNiByYXRlX21hc2sgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKXByaXZfcjsKKwlzOCBtYXhfcmF0ZV9pZHggPSAtMTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCWlmIChzdGEpCiAJCXJhdGVfbWFzayA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC02NTQsNyArNjg5LDcgQEAKIAlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CiAJICAgICFzdGEgfHwgIXByaXZfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOwogCQlpZiAoIXJhdGVfbWFzaykKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0KIAkJCQkJcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIE5VTEwpOwpAQCAtNjY0LDcgKzY5OSwxNCBAQAogCQlyZXR1cm47CiAJfQogCi0JaW5kZXggPSBtaW4ocnNfc3RhLT5sYXN0X3R4cmF0ZV9pZHggJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CisJLyogZ2V0IHVzZXIgbWF4IHJhdGUgaWYgc2V0ICovCisJbWF4X3JhdGVfaWR4ID0gdHhyYy0+bWF4X3JhdGVfaWR4OworCWlmICgoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgJiYgKG1heF9yYXRlX2lkeCAhPSAtMSkpCisJCW1heF9yYXRlX2lkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCWlmICgobWF4X3JhdGVfaWR4IDwgMCkgfHwgKG1heF9yYXRlX2lkeCA+PSBJV0xfUkFURV9DT1VOVCkpCisJCW1heF9yYXRlX2lkeCA9IC0xOworCisJaW5kZXggPSBtaW4ocnNfc3RhLT5sYXN0X3R4cmF0ZV9pZHggJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UXzM5NDUgLSAxKTsKIAogCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyYXRlX21hc2sgPSByYXRlX21hc2sgPDwgSVdMX0ZJUlNUX09GRE1fUkFURTsKQEAgLTY3NCw3ICs3MTYsNyBAQAogCQl1OCBzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBtXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcG1cbiIsCiAJCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQkJc3RhX2lkID0gaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LAogCQkJCSAgICBoZHItPmFkZHIxLCAwLCBDTURfQVNZTkMpOwpAQCAtNjk1LDIxICs3MzcsMzAgQEAKIAkJcnNfc3RhLT5zdGFydF9yYXRlID0gSVdMX1JBVEVfSU5WQUxJRDsKIAl9CiAKKwkvKiBmb3JjZSB1c2VyIG1heCByYXRlIGlmIHNldCBieSB1c2VyICovCisJaWYgKChtYXhfcmF0ZV9pZHggIT0gLTEpICYmIChtYXhfcmF0ZV9pZHggPCBpbmRleCkpIHsKKwkJaWYgKHJhdGVfbWFzayAmICgxIDw8IG1heF9yYXRlX2lkeCkpCisJCQlpbmRleCA9IG1heF9yYXRlX2lkeDsKKwl9CisKIAl3aW5kb3cgPSAmKHJzX3N0YS0+d2luW2luZGV4XSk7CiAKIAlmYWlsX2NvdW50ID0gd2luZG93LT5jb3VudGVyIC0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXI7CiAKLQlpZiAoKChmYWlsX2NvdW50IDw9IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgorCWlmICgoKGZhaWxfY291bnQgPCBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKIAkgICAgICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7CiAKLQkJSVdMX0RFQlVHX1JBVEUoIkludmFsaWQgYXZlcmFnZV90cHQgb24gcmF0ZSAlZDogIgorCQlJV0xfREVCVUdfUkFURShwcml2LCAiSW52YWxpZCBhdmVyYWdlX3RwdCBvbiByYXRlICVkOiAiCiAJCQkgICAgICAgImNvdW50ZXI6ICVkLCBzdWNjZXNzX2NvdW50ZXI6ICVkLCAiCiAJCQkgICAgICAgImV4cGVjdGVkX3RwdCBpcyAlc05VTExcbiIsCiAJCQkgICAgICAgaW5kZXgsCiAJCQkgICAgICAgd2luZG93LT5jb3VudGVyLAogCQkJICAgICAgIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyLAogCQkJICAgICAgIHJzX3N0YS0+ZXhwZWN0ZWRfdHB0ID8gIm5vdCAiIDogIiIpOworCisJICAgLyogQ2FuJ3QgY2FsY3VsYXRlIHRoaXMgeWV0OyBub3QgZW5vdWdoIGhpc3RvcnkgKi8KKwkJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOwogCQlnb3RvIG91dDsKIAogCX0KQEAgLTcyMSw2ICs3NzIsMTEgQEAKIAlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJaGlnaCA9IChoaWdoX2xvdyA+PiA4KSAmIDB4ZmY7CiAKKwkvKiBJZiB1c2VyIHNldCBtYXggcmF0ZSwgZG9udCBhbGxvdyBoaWdoZXIgdGhhbiB1c2VyIGNvbnN0cmFpbiAqLworCWlmICgobWF4X3JhdGVfaWR4ICE9IC0xKSAmJiAobWF4X3JhdGVfaWR4IDwgaGlnaCkpCisJCWhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOworCisJLyogQ29sbGVjdCBNZWFzdXJlZCB0aHJvdWdocHV0cyBvZiBhZGphY2VudCByYXRlcyAqLwogCWlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJbG93X3RwdCA9IHJzX3N0YS0+d2luW2xvd10uYXZlcmFnZV90cHQ7CiAKQEAgLTcyOSw1NiArNzg1LDc5IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCXNjYWxlX2FjdGlvbiA9IDE7CisJc2NhbGVfYWN0aW9uID0gMDsKIAorCS8qIExvdyBzdWNjZXNzIHJhdGlvICwgbmVlZCB0byBkcm9wIHRoZSByYXRlICovCiAJaWYgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPCBJV0xfUkFURV9ERUNSRUFTRV9USCkgfHwgIWN1cnJlbnRfdHB0KSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKIAkJc2NhbGVfYWN0aW9uID0gLTE7Ci0JfSBlbHNlIGlmICgobG93X3RwdCA9PSBJV0xfSU5WX1RQVCkgJiYgKGhpZ2hfdHB0ID09IElXTF9JTlZfVFBUKSkKLQkJc2NhbGVfYWN0aW9uID0gMTsKLQllbHNlIGlmICgobG93X3RwdCAhPSBJV0xfSU5WX1RQVCkgJiYgKGhpZ2hfdHB0ICE9IElXTF9JTlZfVFBUKSAmJgorCisJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzLAorCSAqIHRyeSBpbmNyZWFzZSAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpIHsKKworCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKQorCQkJc2NhbGVfYWN0aW9uID0gMTsKKwkJZWxzZSBpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCisJCQlzY2FsZV9hY3Rpb24gPSAtMTsKKworCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzCisJICogYmV0dGVyIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZQorCSAqIGl0ISAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAoaGlnaF90cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAobG93X3RwdCA8IGN1cnJlbnRfdHB0KSAmJiAoaGlnaF90cHQgPCBjdXJyZW50X3RwdCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIk5vIGFjdGlvbiAtLSBsb3cgWyVkXSAmIGhpZ2ggWyVkXSA8ICIKKworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CisKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhdGVzIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCX0gZWxzZSB7Ci0JCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgewotCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCisJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgeworCisJCQkvKiBIaWdoIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0LCBJbmNyZWFzZQorCQkJICogcmF0ZSAqLworCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQgJiYKKwkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCWVsc2UgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKKwkJCQlJV0xfREVCVUdfUkFURShwcml2LAorCQkJCSAgICAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAkJCX0KLQkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZfVFBUKSB7CisJCX0gZWxzZSBpZiAobG93X3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgewogCQkJaWYgKGxvd190cHQgPiBjdXJyZW50X3RwdCkgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyB0cHRcbiIpOworCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJICAgICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CiAJCQkJc2NhbGVfYWN0aW9uID0gLTE7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSBpZiAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKKwkJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIKKwkJCQkgKiB0aHJvdWdocHV0LGRlY3JlYXNlIHJhdGUgKi8KIAkJCQlzY2FsZV9hY3Rpb24gPSAxOworCQkJfQogCQl9CiAJfQogCi0JaWYgKHNjYWxlX2FjdGlvbiA9PSAtMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvID4gSVdMX1NVQ0NFU1NfRE9XTl9USCkKLQkJCXNjYWxlX2FjdGlvbiA9IDA7Ci0JfSBlbHNlIGlmIChzY2FsZV9hY3Rpb24gPT0gMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvIDwgSVdMX1NVQ0NFU1NfVVBfVEgpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJObyBhY3Rpb24gLS0gc3VjY2Vzc19yYXRpbyBbJWRdIDwgIgotCQkJICAgICAgICJTVUNDRVNTIFVQXG4iLCB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8pOwotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQkJfQotCX0KKwkvKiBTYW5pdHkgY2hlY2s7IGFza2VkIGZvciBkZWNyZWFzZSwgYnV0IHN1Y2Nlc3MgcmF0ZSBvciB0aHJvdWdocHV0CisJICogaGFzIGJlZW4gZ29vZCBhdCBvbGQgcmF0ZS4gIERvbid0IGNoYW5nZSBpdC4gKi8KKwlpZiAoKHNjYWxlX2FjdGlvbiA9PSAtMSkgJiYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKSAmJgorCQkgICAgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPiBJV0xfUkFURV9ISUdIX1RIKSB8fAorCQkgICAgIChjdXJyZW50X3RwdCA+ICgxMDAgKiByc19zdGEtPmV4cGVjdGVkX3RwdFtsb3ddKSkpKQorCQlzY2FsZV9hY3Rpb24gPSAwOwogCiAJc3dpdGNoIChzY2FsZV9hY3Rpb24pIHsKIAljYXNlIC0xOgorCisJCS8qIERlY3Jlc2UgcmF0ZSAqLwogCQlpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCiAJCQlpbmRleCA9IGxvdzsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CisJCS8qIEluY3JlYXNlIHJhdGUgKi8KIAkJaWYgKGhpZ2ggIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWluZGV4ID0gaGlnaDsKIApAQCAtNzg2LDEwICs4NjUsMTEgQEAKIAogCWNhc2UgMDoKIAlkZWZhdWx0OgorCQkvKiBObyBjaGFuZ2UgKi8KIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCiAJCSAgICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gpOwogCiAgb3V0OgpAQCAtODAxLDcgKzg4MSw3IEBACiAJZWxzZQogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJzX3N0YS0+bGFzdF90eHJhdGVfaWR4OwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogJWRcbiIsIGluZGV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCkBAIC04MTUsMjQgKzg5NSwzMSBAQAogCQkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgajsKKwlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZXNjICs9IHNwcmludGYoYnVmZiArIGRlc2MsICJ0eCBwYWNrZXRzPSVkIGxhc3QgcmF0ZSBpbmRleD0lZFxuIgogCQkJInJhdGU9MHglWCBmbHVzaCB0aW1lICVkXG4iLAogCQkJbHFfc3RhLT50eF9wYWNrZXRzLAogCQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHgsCiAJCQlscV9zdGEtPnN0YXJ0X3JhdGUsIGppZmZpZXNfdG9fbXNlY3MobHFfc3RhLT5mbHVzaF90aW1lKSk7Ci0JZm9yIChqID0gMDsgaiA8IElXTF9SQVRFX0NPVU5UOyBqKyspIHsKKwlmb3IgKGogPSAwOyBqIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaisrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsCiAJCQkJImNvdW50ZXI9JWQgc3VjY2Vzcz0lZCAlJT0lZFxuIiwKIAkJCQlscV9zdGEtPndpbltqXS5jb3VudGVyLAogCQkJCWxxX3N0YS0+d2luW2pdLnN1Y2Nlc3NfY291bnRlciwKIAkJCQlscV9zdGEtPndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpAQCAtODc3LDE4ICs5NjQsMTggQEAKIAogdm9pZCBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJczMyIHJzc2kgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MjQsMTEgKzEwMTEsMTEgQEAKIAlpZiAocnNzaSA9PSAwKQogCQlyc3NpID0gSVdMX01JTl9SU1NJX1ZBTDsKIAotCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SQVRFLCAiTmV0d29yayBSU1NJOiAlZFxuIiwgcnNzaSk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIk5ldHdvcmsgUlNTSTogJWRcbiIsIHJzc2kpOwogCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHJzc2ksIHByaXYtPmJhbmQpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCiAJCSAgICAgICAiJWQgKHBsY3AgMHgleClcbiIsIHJzc2ksIHJzX3N0YS0+c3RhcnRfcmF0ZSwKIAkJICAgICAgIGl3bDM5NDVfcmF0ZXNbcnNfc3RhLT5zdGFydF9yYXRlXS5wbGNwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjYxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9yc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9yc19oX18KLQotc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKLQl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwotCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLwotCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KLQl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLwotCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0JdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwotCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLwotCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KLX07Ci0KLS8qCi0gKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLSAqLwotZW51bSB7Ci0JSVdMX1JBVEVfMU1fSU5ERVggPSAwLAotCUlXTF9SQVRFXzJNX0lOREVYLAotCUlXTF9SQVRFXzVNX0lOREVYLAotCUlXTF9SQVRFXzExTV9JTkRFWCwKLQlJV0xfUkFURV82TV9JTkRFWCwKLQlJV0xfUkFURV85TV9JTkRFWCwKLQlJV0xfUkFURV8xMk1fSU5ERVgsCi0JSVdMX1JBVEVfMThNX0lOREVYLAotCUlXTF9SQVRFXzI0TV9JTkRFWCwKLQlJV0xfUkFURV8zNk1fSU5ERVgsCi0JSVdMX1JBVEVfNDhNX0lOREVYLAotCUlXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfUkFURV9DT1VOVCwKLQlJV0xfUkFURV9JTlZNX0lOREVYLAotCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9JTlZNX0lOREVYCi19OwotCi1lbnVtIHsKLQlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCi0JSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYLAotfTsKLQotZW51bSB7Ci0JSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAotCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKLQlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKLX07Ci0KLS8qICNkZWZpbmUgdnMuIGVudW0gdG8ga2VlcCBmcm9tIGRlZmF1bHRpbmcgdG8gJ2xhcmdlIGludGVnZXInICovCi0jZGVmaW5lCUlXTF9SQVRFXzZNX01BU0sgICAoMSA8PCBJV0xfUkFURV82TV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfOU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzlNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTJNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xOE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMThNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8yNE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMjRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8zNk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMzZNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV80OE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNDhNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV81NE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNTRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xTV9NQVNLICAgKDEgPDwgSVdMX1JBVEVfMU1fSU5ERVgpCi0jZGVmaW5lCUlXTF9SQVRFXzJNX01BU0sgICAoMSA8PCBJV0xfUkFURV8yTV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfNU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzVNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMU1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTFNX0lOREVYKQotCi0vKiAzOTQ1IHVDb2RlIEFQSSB2YWx1ZXMgZm9yIChsZWdhY3kpIGJpdCByYXRlcywgYm90aCBPRkRNIGFuZCBDQ0sgKi8KLWVudW0gewotCUlXTF9SQVRFXzZNX1BMQ1AgPSAxMywKLQlJV0xfUkFURV85TV9QTENQID0gMTUsCi0JSVdMX1JBVEVfMTJNX1BMQ1AgPSA1LAotCUlXTF9SQVRFXzE4TV9QTENQID0gNywKLQlJV0xfUkFURV8yNE1fUExDUCA9IDksCi0JSVdMX1JBVEVfMzZNX1BMQ1AgPSAxMSwKLQlJV0xfUkFURV80OE1fUExDUCA9IDEsCi0JSVdMX1JBVEVfNTRNX1BMQ1AgPSAzLAotCUlXTF9SQVRFXzFNX1BMQ1AgPSAxMCwKLQlJV0xfUkFURV8yTV9QTENQID0gMjAsCi0JSVdMX1JBVEVfNU1fUExDUCA9IDU1LAotCUlXTF9SQVRFXzExTV9QTENQID0gMTEwLAotfTsKLQotLyogTUFDIGhlYWRlciB2YWx1ZXMgZm9yIGJpdCByYXRlcyAqLwotZW51bSB7Ci0JSVdMX1JBVEVfNk1fSUVFRSA9IDEyLAotCUlXTF9SQVRFXzlNX0lFRUUgPSAxOCwKLQlJV0xfUkFURV8xMk1fSUVFRSA9IDI0LAotCUlXTF9SQVRFXzE4TV9JRUVFID0gMzYsCi0JSVdMX1JBVEVfMjRNX0lFRUUgPSA0OCwKLQlJV0xfUkFURV8zNk1fSUVFRSA9IDcyLAotCUlXTF9SQVRFXzQ4TV9JRUVFID0gOTYsCi0JSVdMX1JBVEVfNTRNX0lFRUUgPSAxMDgsCi0JSVdMX1JBVEVfMU1fSUVFRSA9IDIsCi0JSVdMX1JBVEVfMk1fSUVFRSA9IDQsCi0JSVdMX1JBVEVfNU1fSUVFRSA9IDExLAotCUlXTF9SQVRFXzExTV9JRUVFID0gMjIsCi19OwotCi0jZGVmaW5lIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSyAgICBcCi0gICAgICAgKElXTF9SQVRFXzFNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMk1fTUFTSykKLQotI2RlZmluZSBJV0xfQ0NLX1JBVEVTX01BU0sgICAgICAgICAgXAotICAgICAgIChJV0xfQkFTSUNfUkFURVNfTUFTSyAgICAgIHwgXAotCUlXTF9SQVRFXzVNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMTFNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyAgIFwKLQkoSVdMX1JBVEVfNk1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzEyTV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMjRNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fUkFURVNfTUFTSyAgICAgICAgIFwKLSAgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJV0xfUkFURV85TV9NQVNLICAgICAgICAgIHwgXAotCUlXTF9SQVRFXzE4TV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMzZNX01BU0sgICAgICAgICB8IFwKLQlJV0xfUkFURV80OE1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzU0TV9NQVNLKQotCi0jZGVmaW5lIElXTF9CQVNJQ19SQVRFU19NQVNLICAgICAgICAgXAotCShJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAotCSBJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSVdMX1JBVEVTX01BU0sgKCgxIDw8IElXTF9SQVRFX0NPVU5UKSAtIDEpCi0KLSNkZWZpbmUgSVdMX0lOVl9UUFQgICAgLTEKLQotI2RlZmluZSBJV0xfTUlOX1JTU0lfVkFMICAgICAgICAgICAgICAgICAtMTAwCi0jZGVmaW5lIElXTF9NQVhfUlNTSV9WQUwgICAgICAgICAgICAgICAgICAgIDAKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLQotc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQotewotCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKLQotCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCi0JCXJhdGUgPSByYXRlX2luZGV4OwotCXJldHVybiByYXRlOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCi0gKgotICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCi0gKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCi0gKgotICogU2luY2UgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gaXMgaGFyZHdhcmUgc3BlY2lmaWMsIHRoZXJlIGlzIG5vIG5lZWQKLSAqIG9yIHJlYXNvbiB0byBwbGFjZSBpdCBhcyBhIHN0YW5kIGFsb25lIG1vZHVsZS4gIFRoZSBkcml2ZXIgY2FuIGNhbGwKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKiB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICBUaGlzIHNob3VsZCBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gY2FsbGluZwotICogaWVlZTgwMjExX3JlZ2lzdGVyX2h3Ci0gKgotICovCi1leHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcsIGJ1dCBiZWZvcmUKLSAqIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCi0gKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDQ1Y2ZhMWNmLi5iYTdlNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM4LDEwICszOCwxNSBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIml3bC0zOTQ1LWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1maC5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtMzk0NS5oIgorI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtYWduLXJzLmgiCiAKICNkZWZpbmUgSVdMX0RFQ0xBUkVfUkFURV9JTkZPKHIsIGlwLCBpbiwgcnAsIHJuLCBwcCwgbnApICAgIFwKIAlbSVdMX1JBVEVfIyNyIyNNX0lOREVYXSA9IHsgSVdMX1JBVEVfIyNyIyNNX1BMQ1AsICAgXApAQCAtNjMsNyArNjgsNyBAQAogICogbWFwcyB0byBJV0xfUkFURV9JTlZBTElECiAgKgogICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF0gPSB7Citjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAlJV0xfREVDTEFSRV9SQVRFX0lORk8oMSwgSU5WLCAyLCBJTlYsIDIsIElOViwgMiksICAgIC8qICAxbWJwcyAqLwogCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygyLCAxLCA1LCAxLCA1LCAxLCA1KSwgICAgICAgICAgLyogIDJtYnBzICovCiAJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDUsIDIsIDYsIDIsIDExLCAyLCAxMSksICAgICAgICAvKjUuNW1icHMgKi8KQEAgLTkxLDcgKzk2LDcgQEAKICAqIFVzZSBmb3Igb25seSBzcGVjaWFsIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyIGFzLWlzLAogICogICB5b3UnbGwgbmVlZCB0byBwcm92aWRlIHRoZSBzcGVjaWFsIGJpdHMhIC4uLgogICogICAuLi4gYW5kIHNldCBJV0xfRVZUX0RJU0FCTEUgdG8gMS4gKi8KLXZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMTUwLDM0ICsxNTUsMzQgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZGlzYWJsZV9wdHIgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICg0ICogc2l6ZW9mKHUzMikpKTsKLQlhcnJheV9zaXplID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoNSAqIHNpemVvZih1MzIpKSk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJZGlzYWJsZV9wdHIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkpOworCWFycmF5X3NpemUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDUgKiBzaXplb2YodTMyKSkpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoSVdMX0VWVF9ESVNBQkxFICYmIChhcnJheV9zaXplID09IElXTF9FVlRfRElTQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIHNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgYXQgMHgleFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBzZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIGF0IDB4JXhcbiIsCiAJCQkgICAgICAgZGlzYWJsZV9wdHIpOwotCQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAkJZm9yIChpID0gMDsgaSA8IElXTF9FVlRfRElTQUJMRV9TSVpFOyBpKyspCi0JCQlpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHByaXYsCisJCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwKIAkJCQkJICAgZGlzYWJsZV9wdHIgKyAoaSAqIHNpemVvZih1MzIpKSwKIAkJCQkJICAgZXZ0X2Rpc2FibGVbaV0pOwogCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIG1heSBiZSBkaXNhYmxlZFxuIik7Ci0JCUlXTF9ERUJVR19JTkZPKCIgIGJ5IHdyaXRpbmcgXCIxXCJzIGludG8gZGlzYWJsZSBiaXRtYXBcbiIpOwotCQlJV0xfREVCVUdfSU5GTygiICBpbiBTUkFNIGF0IDB4JXgsIHNpemUgJWQgdTMyc1xuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgbWF5IGJlIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiAgYnkgd3JpdGluZyBcIjFcInMgaW50byBkaXNhYmxlIGJpdG1hcFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIgIGluIFNSQU0gYXQgMHgleCwgc2l6ZSAlZCB1MzJzXG4iLAogCQkJICAgICAgIGRpc2FibGVfcHRyLCBhcnJheV9zaXplKTsKIAl9CiAKQEAgLTE5Myw0MCArMTk4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qKgotICogaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyAtIEdldCBhbnRlbm5hIGZsYWdzIGZvciBSWE9OIGNvbW1hbmQKLSAqIEBwcml2OiBlZXByb20gYW5kIGFudGVubmEgZmllbGRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBhbnRlbm5hIGZsYWdzCi0gKgotICogcHJpdi0+ZWVwcm9tICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAotICogcHJpdi0+YW50ZW5uYSBzcGVjaWZpZXMgdGhlIGFudGVubmEgZGl2ZXJzaXR5IG1vZGU6Ci0gKgotICogSVdMX0FOVEVOTkFfRElWRVJTSVRZIC0gTklDIHNlbGVjdHMgYmVzdCBhbnRlbm5hIGJ5IGl0c2VsZgotICogSVdMX0FOVEVOTkFfTUFJTiAgICAgIC0gRm9yY2UgTUFJTiBhbnRlbm5hCi0gKiBJV0xfQU5URU5OQV9BVVggICAgICAgLSBGb3JjZSBBVVggYW50ZW5uYQotICovCi1fX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN3aXRjaCAocHJpdi0+YW50ZW5uYSkgewotCWNhc2UgSVdMX0FOVEVOTkFfRElWRVJTSVRZOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgSVdMX0FOVEVOTkFfTUFJTjoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7Ci0KLQljYXNlIElXTF9BTlRFTk5BX0FVWDoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7Ci0JfQotCi0JLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KLQlJV0xfRVJST1IoIkJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICgweCV4KVxuIiwgcHJpdi0+YW50ZW5uYSk7Ci0JcmV0dXJuIDA7CQkvKiAiZGl2ZXJzaXR5IiBpcyBkZWZhdWx0IGlmIGVycm9yICovCi19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKml3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCkBAIC0yNjYsNyArMjM4LDcgQEAKICAqIGZvciBBIGFuZCBCIG1vZGUgd2UgbmVlZCB0byBvdmVycmlnaHQgcHJldgogICogdmFsdWUKICAqLwotaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCByYXRlKQoraW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpCiB7CiAJaW50IG5leHRfcmF0ZSA9IGl3bDM5NDVfZ2V0X3ByZXZfaWVlZV9yYXRlKHJhdGUpOwogCkBAIC0yNzksNyArMjUxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCQlpZiAocmF0ZSA9PSBJV0xfUkFURV8xMU1fSU5ERVgpCiAJCQkJbmV4dF9yYXRlID0gSVdMX1JBVEVfNU1fSU5ERVg7CiAJCX0KQEAgLTMwMCwxMiArMjcyLDEyIEBACiAgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuIElmIHRoZXJlIGlzCiAgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKKwlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4X2luZm87CiAKIAlCVUdfT04odHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKTsKIApAQCAtMzE1LDEwICsyODcsMTAgQEAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYlswXSk7CiAJCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7Ci0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCX0KIAotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiAodHhxX2lkID49IDApICYmCiAJCQkodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSAmJgogCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKIAkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CkBAIC0zMjcsMjIgKzI5OSwyMiBAQAogLyoqCiAgKiBpd2wzOTQ1X3J4X3JlcGx5X3R4IC0gSGFuZGxlIFR4IHJlc3BvbnNlCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfdHgoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJdTE2IHNlcXVlbmNlID0gbGUxNl90b19jcHUocGt0LT5oZHIuc2VxdWVuY2UpOwogCWludCB0eHFfaWQgPSBTRVFfVE9fUVVFVUUoc2VxdWVuY2UpOwogCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgKnR4X3Jlc3AgPSAodm9pZCAqKSZwa3QtPnUucmF3WzBdOwogCXUzMiAgc3RhdHVzID0gbGUzMl90b19jcHUodHhfcmVzcC0+c3RhdHVzKTsKIAlpbnQgcmF0ZV9pZHg7CiAJaW50IGZhaWw7CiAKLQlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsMzk0NV94Ml9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCisJaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgeworCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0zNjYsMTUgKzMzOCwxNSBAQAogCWluZm8tPmZsYWdzIHw9ICgoc3RhdHVzICYgVFhfU1RBVFVTX01TSykgPT0gVFhfU1RBVFVTX1NVQ0NFU1MpID8KIAkJCQlJRUVFODAyMTFfVFhfU1RBVF9BQ0sgOiAwOwogCi0JSVdMX0RFQlVHX1RYKCJUeCBxdWV1ZSAlZCBTdGF0dXMgJXMgKDB4JTA4eCkgcGxjcCByYXRlICVkIHJldHJpZXMgJWRcbiIsCisJSVdMX0RFQlVHX1RYKHByaXYsICJUeCBxdWV1ZSAlZCBTdGF0dXMgJXMgKDB4JTA4eCkgcGxjcCByYXRlICVkIHJldHJpZXMgJWRcbiIsCiAJCQl0eHFfaWQsIGl3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHN0YXR1cyksIHN0YXR1cywKIAkJCXR4X3Jlc3AtPnJhdGUsIHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUpOwogCi0JSVdMX0RFQlVHX1RYX1JFUExZKCJUeCBxdWV1ZSByZWNsYWltICVkXG4iLCBpbmRleCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUeCBxdWV1ZSByZWNsYWltICVkXG4iLCBpbmRleCk7CiAJaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwogCiAJaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKLQkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CiB9CiAKIApAQCAtMzg3LDE0ICszNTksMTQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3ZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SWCgiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKIAkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKSwKIAkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbikpOwogCi0JbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLCBwa3QtPnUucmF3LCBzaXplb2YocHJpdi0+c3RhdGlzdGljcykpOworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljc18zOSwgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3NfMzkpKTsKIAogCWl3bDM5NDVfbGVkX2JhY2tncm91bmQocHJpdik7CiAKQEAgLTQwNiw3ICszNzgsNyBAQAogICogTWlzYy4gaW50ZXJuYWwgc3RhdGUgYW5kIGhlbHBlciBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAogLyoqCiAgKiBpd2wzOTQ1X3JlcG9ydF9mcmFtZSAtIGR1bXAgZnJhbWUgdG8gc3lzbG9nIGR1cmluZyBkZWJ1ZyBzZXNzaW9ucwpAQCAtNDE1LDggKzM4Nyw4IEBACiAgKiBpbmNsdWRpbmcgc2VsZWN0aXZlIGZyYW1lIGR1bXBzLgogICogZ3JvdXAxMDAgcGFyYW1ldGVyIHNlbGVjdHMgd2hldGhlciB0byBzaG93IDEgb3V0IG9mIDEwMCBnb29kIGZyYW1lcy4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0LAorc3RhdGljIHZvaWQgX2l3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKIHsKIAl1MzIgdG9fdXM7CkBAIC01MjQsMTMgKzQ5NiwxMyBAQAogCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCiAJCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwogCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgogCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0lZCwgXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKIAkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgcmF0ZSk7CiAJCWVsc2UgewogCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLwotCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCisJCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiAweCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJzcmM9MHglMDJ4LCByc3NpPSV1LCB0aW09JWx1IHVzZWMsICIKIAkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKQEAgLTU0MCwxOCArNTEyLDI3IEBACiAJCX0KIAl9CiAJaWYgKHByaW50X2R1bXApCi0JCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JYLCBkYXRhLCBsZW5ndGgpOworCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JYLCBkYXRhLCBsZW5ndGgpOwogfQorCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCit7CisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX1JYKQorCQlfaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHBrdCwgaGVhZGVyLCBncm91cDEwMCk7Cit9CisKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0LAorc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKIHsKIH0KICNlbmRpZgogCiAvKiBUaGlzIGlzIG5lY2Vzc2FyeSBvbmx5IGZvciBhIG51bWJlciBvZiBzdGF0aXN0aWNzLCBzZWUgdGhlIGNhbGxlci4gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2lzX25ldHdvcmtfcGFja2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcikKIHsKIAkvKiBGaWx0ZXIgaW5jb21pbmcgcGFja2V0cyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgdGFyZ2V0ZWQgdG93YXJkCkBAIC01NjgsMTIgKzU0OSwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopSVdMX1JYX0RBVEEocGt0KTsKICNlbmRpZgogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciAqcnhfaGRyID0gSVdMX1JYX0hEUihwa3QpOwpAQCAtNTgxLDE1ICs1NjIsMTUgQEAKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7CiAKIAkvKiBXZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIEhXLCBzbyBzdG9wIHRoZSB3YXRjaGRvZyAqLwotCWlmICh1bmxpa2VseSgobGVuICsgSVdMX1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AoIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhXG4iKTsKKwlpZiAodW5saWtlbHkoKGxlbiArIElXTDM5X1JYX0ZSQU1FX1NJWkUpID4gc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkNvcnJ1cHRpb24gZGV0ZWN0ZWQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewotCQlJV0xfREVCVUdfRFJPUF9MSU1JVAotCQkgICAgKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7CisJCUlXTF9ERUJVR19EUk9QX0xJTUlUKHByaXYsCisJCQkiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01OTcsMTEgKzU3OCwxMiBAQAogCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgc2tiIHRvIHRoZSBzaXplIG9mIHRoZSBmcmFtZSAqLwogCXNrYl9wdXQocnhiLT5za2IsIGxlMTZfdG9fY3B1KHJ4X2hkci0+bGVuKSk7CiAKLQlpZiAoaXdsMzk0NV9wYXJhbV9od2NyeXB0bykKLQkJaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcocHJpdiwgcnhiLT5za2IsCisJaWYgKCFpd2wzOTQ1X21vZF9wYXJhbXMuc3dfY3J5cHRvKQorCQlpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHByaXYsCisJCQkJICAgICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4Yi0+c2tiLT5kYXRhLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShyeF9lbmQtPnN0YXR1cyksIHN0YXRzKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlbjsKICNlbmRpZgpAQCAtNjExLDEyICs1OTMsMTIgQEAKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOX0FGVEVSX0FTU09DIChIWio2KQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3J4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzICpyeF9zdGF0cyA9IElXTF9SWF9TVEFUUyhwa3QpOwogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciAqcnhfaGRyID0gSVdMX1JYX0hEUihwa3QpOwogCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2VuZCAqcnhfZW5kID0gSVdMX1JYX0VORChwa3QpOwpAQCAtNjQ0LDIyICs2MjYsMjEgQEAKIAkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAogCWlmICgodW5saWtlbHkocnhfc3RhdHMtPnBoeV9jb3VudCA+IDIwKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AKLQkJICAgICgiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogIgotCQkgICAgICIlZC9uIiwgcnhfc3RhdHMtPnBoeV9jb3VudCk7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAlZC9uIiwKKwkJCQlyeF9zdGF0cy0+cGh5X2NvdW50KTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghKHJ4X2VuZC0+c3RhdHVzICYgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUikKIAkgICAgfHwgIShyeF9lbmQtPnN0YXR1cyAmIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XKSkgewotCQlJV0xfREVCVUdfUlgoIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwgcnhfZW5kLT5zdGF0dXMpOworCQlJV0xfREVCVUdfUlgocHJpdiwgIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwgcnhfZW5kLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAKIAogCS8qIENvbnZlcnQgMzk0NSdzIHJzc2kgaW5kaWNhdG9yIHRvIGRCbSAqLwotCXJ4X3N0YXR1cy5zaWduYWwgPSByeF9zdGF0cy0+cnNzaSAtIElXTF9SU1NJX09GRlNFVDsKKwlyeF9zdGF0dXMuc2lnbmFsID0gcnhfc3RhdHMtPnJzc2kgLSBJV0wzOV9SU1NJX09GRlNFVDsKIAogCS8qIFNldCBkZWZhdWx0IG5vaXNlIHZhbHVlIHRvIC0xMjcgKi8KIAlpZiAocHJpdi0+bGFzdF9yeF9ub2lzZSA9PSAwKQpAQCAtNjkxLDcgKzY3Miw3IEBACiAJfQogCiAKLQlJV0xfREVCVUdfU1RBVFMoIlJzc2kgJWQgbm9pc2UgJWQgcXVhbCAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpICVkIG5vaXNlICVkIHF1YWwgJWQgc2lnX2F2ZyAlZCBub2lzZV9kaWZmICVkXG4iLAogCQkJcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMucXVhbCwKIAkJCXJ4X3N0YXRzX3NpZ19hdmcsIHJ4X3N0YXRzX25vaXNlX2RpZmYpOwogCkBAIC02OTksMTcgKzY4MCwxNCBAQAogCiAJbmV0d29ya19wYWNrZXQgPSBpd2wzOTQ1X2lzX25ldHdvcmtfcGFja2V0KHByaXYsIGhlYWRlcik7CiAKLQlJV0xfREVCVUdfU1RBVFNfTElNSVQoIlslY10gJWQgUlNTSTolZCBTaWduYWw6JXUsIE5vaXNlOiV1LCBSYXRlOiV1XG4iLAorCUlXTF9ERUJVR19TVEFUU19MSU1JVChwcml2LCAiWyVjXSAlZCBSU1NJOiVkIFNpZ25hbDoldSwgTm9pc2U6JXUsIFJhdGU6JXVcbiIsCiAJCQkgICAgICBuZXR3b3JrX3BhY2tldCA/ICcqJyA6ICcgJywKIAkJCSAgICAgIGxlMTZfdG9fY3B1KHJ4X2hkci0+Y2hhbm5lbCksCiAJCQkgICAgICByeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMuc2lnbmFsLAogCQkJICAgICAgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMucmF0ZV9pZHgpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfUlgpKQotCQkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KLQkJaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHBrdCwgaGVhZGVyLCAxKTsKLSNlbmRpZgorCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLworCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7CiAKIAlpZiAobmV0d29ya19wYWNrZXQpIHsKIAkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7CkBAIC03MjEsMjQgKzY5OSwzMSBAQAogCWl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEocHJpdiwgcnhiLCAmcnhfc3RhdHVzKTsKIH0KIAotaW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHZvaWQgKnB0ciwKLQkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQoraW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbiwgdTggcmVzZXQsIHU4IHBhZCkKIHsKIAlpbnQgY291bnQ7Ci0JdTMyIHBhZDsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKilwdHI7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZCwgKnRmZF90bXA7CisKKwlxID0gJnR4cS0+cTsKKwl0ZmRfdG1wID0gKHN0cnVjdCBpd2wzOTQ1X3RmZCAqKXR4cS0+dGZkczsKKwl0ZmQgPSAmdGZkX3RtcFtxLT53cml0ZV9wdHJdOworCisJaWYgKHJlc2V0KQorCQltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOwogCiAJY291bnQgPSBURkRfQ1RMX0NPVU5UX0dFVChsZTMyX3RvX2NwdSh0ZmQtPmNvbnRyb2xfZmxhZ3MpKTsKLQlwYWQgPSBURkRfQ1RMX1BBRF9HRVQobGUzMl90b19jcHUodGZkLT5jb250cm9sX2ZsYWdzKSk7CiAKIAlpZiAoKGNvdW50ID49IE5VTV9URkRfQ0hVTktTKSB8fCAoY291bnQgPCAwKSkgewotCQlJV0xfRVJST1IoIkVycm9yIGNhbiBub3Qgc2VuZCBtb3JlIHRoYW4gJWQgY2h1bmtzXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKIAkJCSAgTlVNX1RGRF9DSFVOS1MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl0ZmQtPnBhW2NvdW50XS5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7Ci0JdGZkLT5wYVtjb3VudF0ubGVuID0gY3B1X3RvX2xlMzIobGVuKTsKKwl0ZmQtPnRic1tjb3VudF0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworCXRmZC0+dGJzW2NvdW50XS5sZW4gPSBjcHVfdG9fbGUzMihsZW4pOwogCiAJY291bnQrKzsKIApAQCAtNzUzLDEwICs3MzgsMTEgQEAKICAqCiAgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBpbmRleGVzCiAgKi8KLWludCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKQordm9pZCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKikmdHhxLT5iZFswXTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkID0gJmJkX3RtcFt0eHEtPnEucmVhZF9wdHJdOworCXN0cnVjdCBpd2wzOTQ1X3RmZCAqdGZkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmQgKil0eHEtPnRmZHM7CisJaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOworCXN0cnVjdCBpd2wzOTQ1X3RmZCAqdGZkID0gJnRmZF90bXBbaW5kZXhdOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwogCWludCBpOwogCWludCBjb3VudGVyOwpAQCAtNzY0LDIxICs3NTAsMjggQEAKIAkvKiBjbGFzc2lmeSBiZCAqLwogCWlmICh0eHEtPnEuaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCS8qIG5vdGhpbmcgdG8gY2xlYW51cCBhZnRlciBmb3IgaG9zdCBjb21tYW5kcyAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJLyogc2FuaXR5IGNoZWNrICovCi0JY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KGJkLT5jb250cm9sX2ZsYWdzKSk7CisJY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCWlmIChjb3VudGVyID4gTlVNX1RGRF9DSFVOS1MpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBjb3VudGVyKTsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgY291bnRlcik7CiAJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAorCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChjb3VudGVyKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKIAkvKiB1bm1hcCBjaHVua3MgaWYgYW55ICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgY291bnRlcjsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdShiZC0+cGFbaV0uYWRkciksCi0JCQkJIGxlMzJfdG9fY3B1KGJkLT5wYVtpXS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmFkZHIpLAorCQkJIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXTsKIAkJCWlmICh0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSkgewpAQCAtNzg4LDEwICs3ODEsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gOwogfQogCi11OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3U4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGksIHN0YXJ0ID0gSVdMX0FQX0lEOwogCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtODAyLDE4ICs3OTUsMTggQEAKIAkJc3RhcnQgPSBJV0xfU1RBX0lEOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQlpZiAoKHByaXYtPnN0YXRpb25zW2ldLnVzZWQpICYmCisJZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCisJCWlmICgocHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCkgJiYKIAkJICAgICghY29tcGFyZV9ldGhlcl9hZGRyCi0JCSAgICAgKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CisJCSAgICAgKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CiAJCQlyZXQgPSBpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19JTkZPKCJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAogCQkgICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTgyNCwxMiArODE3LDEwIEBACiAgKiBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlIC0gQWRkIHJhdGUgcG9ydGlvbiB0byBUWF9DTUQ6CiAgKgogKi8KLXZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGh3X3ZhbHVlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAJdTE2IHJhdGVfaW5kZXggPSBtaW4oaHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CiAJdTE2IHJhdGVfbWFzazsKQEAgLTgzOCwyNSArODI5LDE1IEBACiAJdTggZGF0YV9yZXRyeV9saW1pdDsKIAlfX2xlMzIgdHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAogCXJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnBsY3A7Ci0JdHhfZmxhZ3MgPSBjbWQtPmNtZC50eC50eF9mbGFnczsKKwl0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAogCS8qIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzdGEtPnN1cHBfcmF0ZXMgd2hpbGUKIAkgKiBpbiB0aGlzIHJ1bm5pbmcgY29udGV4dCAqLwogCXJhdGVfbWFzayA9IElXTF9SQVRFU19NQVNLOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSByYXRlOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgotCSAgICAoc3RhX2lkICE9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkKSAmJgotCQkoc3RhX2lkICE9IElXTF9NVUxUSUNBU1RfSUQpKQotCQlwcml2LT5zdGF0aW9uc1tJV0xfU1RBX0lEXS5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzID0gcmF0ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAodHhfaWQgPj0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCXJ0c19yZXRyeV9saW1pdCA9IDM7CiAJZWxzZQpAQCAtODg4LDI1ICs4NjksMjUgQEAKIAkJfQogCX0KIAotCWNtZC0+Y21kLnR4LnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5yYXRlID0gcmF0ZTsKLQljbWQtPmNtZC50eC50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4LT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7CisJdHgtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OworCXR4LT5yYXRlID0gcmF0ZTsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKIAogCS8qIE9GRE0gKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzBdID0KKwl0eC0+c3VwcF9yYXRlc1swXSA9CiAJICAgKChyYXRlX21hc2sgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CiAKIAkvKiBDQ0sgKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzFdID0gKHJhdGVfbWFzayAmIDB4Rik7CisJdHgtPnN1cHBfcmF0ZXNbMV0gPSAocmF0ZV9tYXNrICYgMHhGKTsKIAotCUlXTF9ERUJVR19SQVRFKCJUeCBzdGEgaWQ6ICVkLCByYXRlOiAlZCAocGxjcCksIGZsYWdzOiAweCU0WCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlR4IHN0YSBpZDogJWQsIHJhdGU6ICVkIChwbGNwKSwgZmxhZ3M6IDB4JTRYICIKIAkJICAgICAgICJjY2svb2ZkbSBtYXNrOiAweCV4LzB4JXhcbiIsIHN0YV9pZCwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnJhdGUsIGxlMzJfdG9fY3B1KGNtZC0+Y21kLnR4LnR4X2ZsYWdzKSwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMV0sIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMF0pOworCQkgICAgICAgdHgtPnJhdGUsIGxlMzJfdG9fY3B1KHR4LT50eF9mbGFncyksCisJCSAgICAgICB0eC0+c3VwcF9yYXRlc1sxXSwgdHgtPnN1cHBfcmF0ZXNbMF0pOwogfQogCi11OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHUxNiB0eF9yYXRlLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgKnN0YXRpb247CkBAIC05MTUsMTM4ICs4OTYsMTMzIEBACiAJCXJldHVybiBJV0xfSU5WQUxJRF9TVEFUSU9OOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CisJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdOwogCiAJc3RhdGlvbi0+c3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfVFhfUkFURV9NU0s7CiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHR4X3JhdGUpOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSB0eF9yYXRlOwogCXN0YXRpb24tPnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAotCWl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmc3RhdGlvbi0+c3RhLCBmbGFncyk7Ci0JSVdMX0RFQlVHX1JBVEUoIlNDQUxFIHN5bmMgc3RhdGlvbiAlZCB0byByYXRlICVkXG4iLAorCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTQ0FMRSBzeW5jIHN0YXRpb24gJWQgdG8gcmF0ZSAlZFxuIiwKIAkJCXN0YV9pZCwgdHhfcmF0ZSk7CiAJcmV0dXJuIHN0YV9pZDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaXdsX3B3cl9zcmMgc3JjKQogewotCWludCByYzsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghcHdyX21heCkgewotCQl1MzIgdmFsOwotCi0JCXJjID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsCi0JCQkJUENJX1BPV0VSX1NPVVJDRSwgJnZhbCk7Ci0JCWlmICh2YWwgJiBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCkgewotCQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKKwkJaWYgKHBjaV9wbWVfY2FwYWJsZShwcml2LT5wY2lfZGV2LCBQQ0lfRDNjb2xkKSkgeworCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJfkFQTUdfUFNfQ1RSTF9NU0tfUFdSX1NSQyk7Ci0JCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKLQkJCWl3bDM5NDVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCisJCQlpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCiAJCQkJICAgICBDU1JfR1BJT19JTl9WQUxfVkFVWF9QV1JfU1JDLAogCQkJCSAgICAgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiwgNTAwMCk7Ci0JCX0gZWxzZQotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCX0gZWxzZSB7CisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQl9CiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WTUFJTiwKIAkJCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKIAotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCiAJCQkgICAgIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIsIDUwMDApOwkvKiB1UyAqLwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3J4X2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyBpbnQgaXdsMzk0NV9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmRtYV9hZGRyKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfUlBUUl9BRERSKDApLAotCQkJICAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzICsKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkLCByeF9yZWFkX3B0clswXSkpOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUkNTUl9XUFRSKDApLCAwKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggfAotCQkoUlhfUVVFVUVfU0laRV9MT0cgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFKSB8Ci0JCUFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKLQkJKDEgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEgpIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUkJEX0JBU0UoMCksIHJ4cS0+ZG1hX2FkZHIpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUlBUUl9BRERSKDApLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1dQVFIoMCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfQ09ORklHKDApLAorCQlGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4IHwKKwkJKFJYX1FVRVVFX1NJWkVfTE9HIDw8IEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19SQkRDX1NJWkUpIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKKwkJKDEgPDwgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIKSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCk7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYgSS9PICovCi0JaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEZIX1JTU1JfQ1RSTCk7CisJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgRkgzOV9SU1NSX0NUUkwpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogYnlwYXNzIG1vZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMHgyKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX01PREVfUkVHLCAweDIpOwogCiAJLyogUkEgMCBpcyBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CiAKIAkvKiBhbGwgNiBmaWZvIGFyZSBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEZBQ1RfUkVHLCAweDNmKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRkFDVF9SRUcsIDB4M2YpOwogCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHLCAweDAxMDAwMCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfVFhGNE1GX1JFRywgMHgwMDAwMDQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRjVNRl9SRUcsIDB4MDAwMDA1KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1NCWVBfTU9ERV8xX1JFRywgMHgwMTAwMDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY0TUZfUkVHLCAweDAwMDAwNCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY1TUZfUkVHLCAweDAwMDAwNSk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UsCi0JCQkgICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RTU1JfQ0JCX0JBU0UsCisJCQkgICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVFNTUl9NU0dfQ09ORklHLAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4QiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfQ0JCX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UU1NSX01TR19DT05GSUcsCisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCIHwKKwkJRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDU3LDcgKzEwMzMsNyBAQAogICoKICAqIERlc3Ryb3lzIGFsbCBETUEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtIGFnYWluCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhxX2N0eF9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCWludCB0eHFfaWQsIHNsb3RzX251bTsKQEAgLTEwNzMsMTAgKzEwNDksMTAgQEAKIAlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IFRGRF9RVUVVRV9NQVg7IHR4cV9pZCsrKSB7CiAJCXNsb3RzX251bSA9ICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pID8KIAkJCQlURkRfQ01EX1NMT1RTIDogVEZEX1RYX0NNRF9TTE9UUzsKLQkJcmMgPSBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdLCBzbG90c19udW0sCi0JCQkJdHhxX2lkKTsKKwkJcmMgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKKwkJCQkgICAgICAgdHhxX2lkKTsKIAkJaWYgKHJjKSB7Ci0JCQlJV0xfRVJST1IoIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOworCQkJSVdMX0VSUihwcml2LCAiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQpAQCAtMTA4OCwxMTEgKzEwNjQsMTQwIEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWl3bF9wb3dlcl9pbml0aWFsaXplKHByaXYpOworCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCQkgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfRElTX0wwU19FWElUX1RJTUVSKTsKKworCS8qIGRpc2FibGUgTDBzIHdpdGhvdXQgYWZmZWN0aW5nIEwxIDpkb24ndCB3YWl0IGZvciBJQ0ggTDBzIGJ1ZyBXL0EpICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCQkgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCk7CisKKwkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCisJKiBEMFUqIC0tPiBEMEEqIHN0YXRlICovCisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKKworCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogZW5hYmxlIERNQSAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHLCBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAorCQkJCQkJQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKKworCXVkZWxheSgyMCk7CisKKwkvKiBkaXNhYmxlIEwxLUFjdGl2ZSAqLworCWl3bF9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCisJCQkgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcmV2X2lkID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmV2X2lkICYgUENJX0NGR19SRVZfSURfQklUX1JUUCkKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJUUCB0eXBlIFxuIik7CisJZWxzZSBpZiAocmV2X2lkICYgUENJX0NGR19SRVZfSURfQklUX0JBU0lDX1NLVSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NSBSQURJTy1NQiB0eXBlXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NQik7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIjM5NDUgUkFESU8tTU0gdHlwZVxuIik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOworCX0KKworCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBlZXByb20tPnNrdV9jYXApIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNLVSBPUCBtb2RlIGlzIG1yY1xuIik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOworCX0gZWxzZQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOworCisJaWYgKChlZXByb20tPmJvYXJkX3JldmlzaW9uICYgMHhGMCkgPT0gMHhEMCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NUFCRyByZXZpc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24pOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKKwl9IGVsc2UgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NUFCRyByZXZpc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24pOworCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfQk9BUkRfVFlQRSk7CisJfQorCisJaWYgKGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbiA8PSAxKSB7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQSk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDYXJkIE0gdHlwZSBBIHZlcnNpb24gaXMgMHglWFxuIiwKKwkJCSAgICAgICBlZXByb20tPmFsbWdvcl9tX3ZlcnNpb24pOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDYXJkIE0gdHlwZSBCIHZlcnNpb24gaXMgMHglWFxuIiwKKwkJCSAgICAgICBlZXByb20tPmFsbWdvcl9tX3ZlcnNpb24pOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0IpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZWVwcm9tLT5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKKworCWlmIChlZXByb20tPnNrdV9jYXAgJiBFRVBST01fU0tVX0NBUF9IV19SRl9LSUxMX0VOQUJMRSkKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkhXIFJGIEtJTEwgc3VwcG9ydGVkIGluIEVFUFJPTS5cbiIpOworfQorCitpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTggcmV2X2lkOwogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCi0JaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1IzOV9BTkFfUExMX0NGR19WQUwpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKLQkJICAgIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCk7Ci0KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQlyYyA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKLQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKLQlpZiAocmMgPCAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAotCQkJCSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAotCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwotCXVkZWxheSgyMCk7Ci0JaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCi0JCQkJICAgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIERldGVybWluZSBIVyB0eXBlICovCiAJcmMgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwcml2LT5wY2lfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXZfaWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCUlXTF9ERUJVR19JTkZPKCJIVyBSZXZpc2lvbiBJRCA9IDB4JVhcbiIsIHJldl9pZCk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKIAotCWl3bDM5NDVfbmljX3NldF9wd3Jfc3JjKHByaXYsIDEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmMgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnNldF9wd3Jfc3JjKHByaXYsIElXTF9QV1JfU1JDX1ZNQUlOKTsKKwlpZihyYykKKwkJcmV0dXJuIHJjOwogCi0JaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFApCi0JCUlXTF9ERUJVR19JTkZPKCJSVFAgdHlwZSBcbiIpOwotCWVsc2UgaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UpIHsKLQkJSVdMX0RFQlVHX0lORk8oIjM5NDUgUkFESU8tTUIgdHlwZVxuIik7Ci0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOwotCX0KLQotCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBwcml2LT5lZXByb20uc2t1X2NhcCkgewotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOwotCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOwotCi0JaWYgKChwcml2LT5lZXByb20uYm9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOwotCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKLQl9Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24gPD0gMSkgewotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAotCQkJICAgICAgIHByaXYtPmVlcHJvbS5hbG1nb3JfbV92ZXJzaW9uKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBNIHR5cGUgQiB2ZXJzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24pOwotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9CKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHByaXYtPmVlcHJvbS5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCi0JCUlXTF9ERUJVR19SRl9LSUxMKCJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKLQotCWlmIChwcml2LT5lZXByb20uc2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQotCQlJV0xfREVCVUdfUkZfS0lMTCgiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5jb25maWcocHJpdik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUlggcXVldWUsIG9yIHJlc2V0IGlmIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkICovCiAJaWYgKCFyeHEtPmJkKSB7Ci0JCXJjID0gaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhwcml2KTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfYWxsb2MocHJpdik7CiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQotCQlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9yZXNldChwcml2LCByeHEpOwogCiAJaXdsMzk0NV9yeF9yZXBsZW5pc2gocHJpdik7CiAKQEAgLTEyMDIsMTYgKzEyMDcsMTYgQEAKIAogCS8qIExvb2sgYXQgdXNpbmcgdGhpcyBpbnN0ZWFkOgogCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwotCWl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJKi8KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1dQVFIoMCksIHJ4cS0+d3JpdGUgJiB+Nyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9XUFRSKDApLCByeHEtPndyaXRlICYgfjcpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjksMTE2ICsxMjM0LDEyMSBAQAogICoKICAqIERlc3Ryb3kgYWxsIFRYIERNQSBxdWV1ZXMgYW5kIHN0cnVjdHVyZXMKICAqLwotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwogCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgVEZEX1FVRVVFX01BWDsgdHhxX2lkKyspCi0JCWl3bDM5NDVfdHhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0pOworCQlpd2xfdHhfcXVldWVfZnJlZShwcml2LCB0eHFfaWQpOwogfQogCi12b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcXVldWU7CisJaW50IHR4cV9pZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwlpZiAoaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWl3bDM5NDVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwogCQlyZXR1cm47CiAJfQogCiAJLyogc3RvcCBTQ0QgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMCk7CiAKIAkvKiByZXNldCBURkQgcXVldWVzICovCi0JZm9yIChxdWV1ZSA9IFRGRF9RVUVVRV9NSU47IHF1ZXVlIDwgVEZEX1FVRVVFX01BWDsgcXVldWUrKykgewotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RDU1JfQ09ORklHKHF1ZXVlKSwgMHgwKTsKLQkJaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkhfVFNTUl9UWF9TVEFUVVMsCi0JCQkJQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKHF1ZXVlKSwKKwlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IFRGRF9RVUVVRV9NQVg7IHR4cV9pZCsrKSB7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RDU1JfQ09ORklHKHR4cV9pZCksIDB4MCk7CisJCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgRkgzOV9UU1NSX1RYX1NUQVRVUywKKwkJCQlGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19NU0tfQ0hOTF9JRExFKHR4cV9pZCksCiAJCQkJMTAwMCk7CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIH0KIAotaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfYXBtX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmMgPSAwOwotCXUzMiByZWdfdmFsOworCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogc2V0IHN0b3AgbWFzdGVyIGJpdCAqLwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TVE9QX01BU1RFUik7CisJaXdsX3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1RPUF9NQVNURVIpOwogCi0JcmVnX3ZhbCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCk7CisJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfUkVTRVQsCisJCQkgICAgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAotCWlmIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX1BPV0VSX1NBVkUgPT0KLQkgICAgKHJlZ192YWwgJiBDU1JfR1BfQ05UUkxfUkVHX01TS19QT1dFUl9TQVZFX1RZUEUpKQotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBpbiBwb3dlciBzYXZlLCBtYXN0ZXIgaXMgYWxyZWFkeSAiCi0JCQkgICAgICAgInN0b3BwZWRcbiIpOwotCWVsc2UgewotCQlyYyA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9SRVNFVCwKLQkJCQkgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7Ci0JCWlmIChyYyA8IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiByYzsKLQkJfQotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKK291dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0lORk8oInN0b3AgbWFzdGVyXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAic3RvcCBtYXN0ZXJcbiIpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9hcG1fc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWl3bDM5NDVfYXBtX3N0b3BfbWFzdGVyKHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKworCXVkZWxheSgxMCk7CisJLyogY2xlYXIgImluaXQgY29tcGxldGUiICBtb3ZlIGFkYXB0ZXIgRDBBKiAtLT4gRDBVIHN0YXRlICovCisJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X2FwbV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpd2wzOTQ1X2h3X25pY19zdG9wX21hc3Rlcihwcml2KTsKKwlpd2wzOTQ1X2FwbV9zdG9wX21hc3Rlcihwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKwl1ZGVsYXkoMTApOwogCi0JaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisKKwlpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCSBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAoIXJjKSB7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19DVFJMX1JFRywKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsCiAJCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwogCi0JCXVkZWxheSgxMCk7Ci0KLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX01TS19SRUcsIDB4MCk7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX1JUQ19JTlRfU1RUX1JFRywKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX01TS19SRUcsIDB4MCk7CisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9TVFRfUkVHLAogCQkJCQkweEZGRkZGRkZGKTsKIAogCQkvKiBlbmFibGUgRE1BICovCi0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0VOX1JFRywKIAkJCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8CiAJCQkJCSBBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOwogCQl1ZGVsYXkoMTApOwogCi0JCWl3bDM5NDVfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQlpd2xfc2V0X2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKIAkJdWRlbGF5KDUpOwotCQlpd2wzOTQ1X2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAorCQlpd2xfY2xlYXJfYml0c19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCiAJCQkJQVBNR19QU19DVFJMX1ZBTF9SRVNFVF9SRVEpOwotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAl9CiAKIAkvKiBDbGVhciB0aGUgJ2hvc3QgY29tbWFuZCBhY3RpdmUnIGJpdC4uLiAqLwpAQCAtMTM2NywzMyArMTM3NywzNCBAQAogCXJldHVybiAoKHRlbXBlcmF0dXJlIDwgLTI2MCkgfHwgKHRlbXBlcmF0dXJlID4gMjUpKSA/IDEgOiAwOwogfQogCi1pbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2h3X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcmV0dXJuIGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AyKTsKKwlyZXR1cm4gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMik7CiB9CiAKIC8qKgogICogaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUKICAqIGdldCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBieSByZWFkaW5nIGZyb20gTklDCiAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ190eHBvd2VyX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ190eHBvd2VyX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWludCB0ZW1wZXJhdHVyZTsKIAogCXRlbXBlcmF0dXJlID0gaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUocHJpdik7CiAKIAkvKiBkcml2ZXIncyBva2F5IHJhbmdlIGlzIC0yNjAgdG8gKzI1LgogCSAqICAgaHVtYW4gcmVhZGFibGUgb2theSByYW5nZSBpcyAwIHRvICsyODUgKi8KLQlJV0xfREVCVUdfSU5GTygiVGVtcGVyYXR1cmU6ICVkXG4iLCB0ZW1wZXJhdHVyZSArIElXTF9URU1QX0NPTlZFUlQpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJUZW1wZXJhdHVyZTogJWRcbiIsIHRlbXBlcmF0dXJlICsgSVdMX1RFTVBfQ09OVkVSVCk7CiAKIAkvKiBoYW5kbGUgaW5zYW5lIHRlbXAgcmVhZGluZyAqLwogCWlmIChpd2wzOTQ1X2h3X3JlZ190ZW1wX291dF9vZl9yYW5nZSh0ZW1wZXJhdHVyZSkpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBiYWQgdGVtcGVyYXR1cmUgdmFsdWUgICVkXG4iLCB0ZW1wZXJhdHVyZSk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGJhZCB0ZW1wZXJhdHVyZSB2YWx1ZSAgJWRcbiIsIHRlbXBlcmF0dXJlKTsKIAogCQkvKiBpZiByZWFsbHkgcmVhbGx5IGhvdCg/KSwKIAkJICogICBzdWJzdGl0dXRlIHRoZSAzcmQgYmFuZC9ncm91cCdzIHRlbXAgbWVhc3VyZWQgYXQgZmFjdG9yeSAqLwogCQlpZiAocHJpdi0+bGFzdF90ZW1wZXJhdHVyZSA+IDEwMCkKLQkJCXRlbXBlcmF0dXJlID0gcHJpdi0+ZWVwcm9tLmdyb3Vwc1syXS50ZW1wZXJhdHVyZTsKKwkJCXRlbXBlcmF0dXJlID0gZWVwcm9tLT5ncm91cHNbMl0udGVtcGVyYXR1cmU7CiAJCWVsc2UgLyogZWxzZSB1c2UgbW9zdCByZWNlbnQgInNhbmUiIHZhbHVlIGZyb20gZHJpdmVyICovCiAJCQl0ZW1wZXJhdHVyZSA9IHByaXYtPmxhc3RfdGVtcGVyYXR1cmU7CiAJfQpAQCAtMTQxMiw3ICsxNDIzLDcgQEAKICAqIHJlY29yZHMgbmV3IHRlbXBlcmF0dXJlIGluIHR4X21nci0+dGVtcGVyYXR1cmUuCiAgKiByZXBsYWNlcyB0eF9tZ3ItPmxhc3RfdGVtcGVyYXR1cmUgKm9ubHkqIGlmIGNhbGliIG5lZWRlZAogICogICAgKGFzc3VtZXMgY2FsbGVyIHdpbGwgYWN0dWFsbHkgZG8gdGhlIGNhbGlicmF0aW9uISkuICovCi1zdGF0aWMgaW50IGlzX3RlbXBfY2FsaWJfbmVlZGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGlzX3RlbXBfY2FsaWJfbmVlZGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgdGVtcF9kaWZmOwogCkBAIC0xNDIxLDIwICsxNDMyLDIwIEBACiAKIAkvKiBnZXQgYWJzb2x1dGUgdmFsdWUgKi8KIAlpZiAodGVtcF9kaWZmIDwgMCkgewotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiR2V0dGluZyBjb29sZXIsIGRlbHRhICVkLFxuIiwgdGVtcF9kaWZmKTsKIAkJdGVtcF9kaWZmID0gLXRlbXBfZGlmZjsKIAl9IGVsc2UgaWYgKHRlbXBfZGlmZiA9PSAwKQotCQlJV0xfREVCVUdfUE9XRVIoIlNhbWUgdGVtcCxcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNhbWUgdGVtcCxcbiIpOwogCWVsc2UKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIHdhcm1lciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgd2FybWVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CiAKIAkvKiBpZiB3ZSBkb24ndCBuZWVkIGNhbGlicmF0aW9uLCAqZG9uJ3QqIHVwZGF0ZSBsYXN0X3RlbXBlcmF0dXJlICovCiAJaWYgKHRlbXBfZGlmZiA8IElXTF9URU1QRVJBVFVSRV9MSU1JVF9USU1FUikgewotCQlJV0xfREVCVUdfUE9XRVIoIlRpbWVkIHRoZXJtYWwgY2FsaWIgbm90IG5lZWRlZFxuIik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGltZWQgdGhlcm1hbCBjYWxpYiBub3QgbmVlZGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX1BPV0VSKCJUaW1lZCB0aGVybWFsIGNhbGliIG5lZWRlZFxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaW1lZCB0aGVybWFsIGNhbGliIG5lZWRlZFxuIik7CiAKIAkvKiBhc3N1bWUgdGhhdCBjYWxsZXIgd2lsbCBhY3R1YWxseSBkbyBjYWxpYiAuLi4KIAkgKiAgIHVwZGF0ZSB0aGUgImxhc3QgdGVtcGVyYXR1cmUiIHZhbHVlICovCkBAIC0xNjI3LDkgKzE2MzgsOSBAQAogICogU2V0IChpbiBvdXIgY2hhbm5lbCBpbmZvIGRhdGFiYXNlKSB0aGUgZGlyZWN0IHNjYW4gVHggcG93ZXIgZm9yIDEgTWJpdCAoQ0NLKQogICogb3IgNiBNYml0IChPRkRNKSByYXRlcy4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfc2V0X3NjYW5fcG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHNjYW5fdGJsX2luZGV4LAorc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfc2V0X3NjYW5fcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgc2Nhbl90YmxfaW5kZXgsCiAJCQkgICAgICAgczMyIHJhdGVfaW5kZXgsIGNvbnN0IHM4ICpjbGlwX3B3cnMsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvLAogCQkJICAgICAgIGludCBiYW5kX2luZGV4KQogewogCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyAqc2Nhbl9wb3dlcl9pbmZvOwpAQCAtMTY0Niw3ICsxNjU3LDcgQEAKIAkvKiBmdXJ0aGVyIGxpbWl0IHRvIHVzZXIncyBtYXggcG93ZXIgcHJlZmVyZW5jZS4KIAkgKiBGSVhNRTogIE90aGVyIHNwZWN0cnVtIG1hbmFnZW1lbnQgcG93ZXIgbGltaXRhdGlvbnMgZG8gbm90CiAJICogICBzZWVtIHRvIGFwcGx5Pz8gKi8KLQlwb3dlciA9IG1pbihwb3dlciwgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKKwlwb3dlciA9IG1pbihwb3dlciwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpOwogCXNjYW5fcG93ZXJfaW5mby0+cmVxdWVzdGVkX3Bvd2VyID0gcG93ZXI7CiAKIAkvKiBmaW5kIGRpZmZlcmVuY2UgYmV0d2VlbiBuZXcgc2NhbiAqcG93ZXIqIGFuZCBjdXJyZW50ICJub3JtYWwiCkBAIC0xNjc4LDMyICsxNjg5LDMyIEBACiB9CiAKIC8qKgotICogaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyIC0gZmlsbCBpbiBUeCBQb3dlciBjb21tYW5kIHdpdGggZ2FpbiBzZXR0aW5ncworICogaXdsMzk0NV9zZW5kX3R4X3Bvd2VyIC0gZmlsbCBpbiBUeCBQb3dlciBjb21tYW5kIHdpdGggZ2FpbiBzZXR0aW5ncwogICoKICAqIENvbmZpZ3VyZXMgcG93ZXIgc2V0dGluZ3MgZm9yIGFsbCByYXRlcyBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbCwKICAqIHVzaW5nIHZhbHVlcyBmcm9tIGNoYW5uZWwgaW5mbyBzdHJ1Y3QsIGFuZCBzZW5kIHRvIE5JQwogICovCi1pbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJhdGVfaWR4LCBpOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOwogCXN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQgdHhwb3dlciA9IHsKIAkJLmNoYW5uZWwgPSBwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsLAogCX07CiAKIAl0eHBvd2VyLmJhbmQgPSAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/IDAgOiAxOwotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwKIAkJCQkgICAgICAgcHJpdi0+YmFuZCwKIAkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwogCWlmICghY2hfaW5mbykgewotCQlJV0xfRVJST1IKLQkJICAgICgiRmFpbGVkIHRvIGdldCBjaGFubmVsIGluZm8gZm9yIGNoYW5uZWwgJWQgWyVkXVxuIiwKLQkJICAgICBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwgcHJpdi0+YmFuZCk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJGYWlsZWQgdG8gZ2V0IGNoYW5uZWwgaW5mbyBmb3IgY2hhbm5lbCAlZCBbJWRdXG4iLAorCQkJbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksIHByaXYtPmJhbmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJOb3QgY2FsbGluZyBUWF9QV1JfVEFCTEVfQ01EIG9uICIKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJOb3QgY2FsbGluZyBUWF9QV1JfVEFCTEVfQ01EIG9uICIKIAkJCQkibm9uLVR4IGNoYW5uZWwuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTcxMSwxMiArMTcyMiwxMiBAQAogCS8qIGZpbGwgY21kIHdpdGggcG93ZXIgc2V0dGluZ3MgZm9yIGFsbCByYXRlcyBmb3IgY3VycmVudCBjaGFubmVsICovCiAJLyogRmlsbCBPRkRNIHJhdGUgKi8KIAlmb3IgKHJhdGVfaWR4ID0gSVdMX0ZJUlNUX09GRE1fUkFURSwgaSA9IDA7Ci0JICAgICByYXRlX2lkeCA8PSBJV0xfTEFTVF9PRkRNX1JBVEU7IHJhdGVfaWR4KyssIGkrKykgeworCSAgICAgcmF0ZV9pZHggPD0gSVdMMzlfTEFTVF9PRkRNX1JBVEU7IHJhdGVfaWR4KyssIGkrKykgewogCiAJCXR4cG93ZXIucG93ZXJbaV0udHBjID0gY2hfaW5mby0+cG93ZXJfaW5mb1tpXS50cGM7CiAJCXR4cG93ZXIucG93ZXJbaV0ucmF0ZSA9IGl3bDM5NDVfcmF0ZXNbcmF0ZV9pZHhdLnBsY3A7CiAKLQkJSVdMX0RFQlVHX1BPV0VSKCJjaCAlZDolZCByZiAlZCBkc3AgJTNkIHJhdGUgY29kZSAweCUwMnhcbiIsCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAogCQkJCWxlMTZfdG9fY3B1KHR4cG93ZXIuY2hhbm5lbCksCiAJCQkJdHhwb3dlci5iYW5kLAogCQkJCXR4cG93ZXIucG93ZXJbaV0udHBjLnR4X2dhaW4sCkBAIC0xNzI5LDcgKzE3NDAsNyBAQAogCQl0eHBvd2VyLnBvd2VyW2ldLnRwYyA9IGNoX2luZm8tPnBvd2VyX2luZm9baV0udHBjOwogCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaWR4XS5wbGNwOwogCi0JCUlXTF9ERUJVR19QT1dFUigiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKIAkJCQlsZTE2X3RvX2NwdSh0eHBvd2VyLmNoYW5uZWwpLAogCQkJCXR4cG93ZXIuYmFuZCwKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnRwYy50eF9nYWluLApAQCAtMTczNyw4ICsxNzQ4LDkgQEAKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUpOwogCX0KIAotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELAotCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQpLCAmdHhwb3dlcik7CisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCwKKwkJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCksCisJCQkJJnR4cG93ZXIpOwogCiB9CiAKQEAgLTE3NTgsOCArMTc3MCw4IEBACiAgKgkgcHJvcGVybHkgZmlsbCBvdXQgdGhlIHNjYW4gcG93ZXJzLCBhbmQgYWN0dWFsIGgvdyBnYWluIHNldHRpbmdzLAogICoJIGFuZCBzZW5kIGNoYW5nZXMgdG8gTklDCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfc2V0X25ld19wb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX3NldF9uZXdfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gKnBvd2VyX2luZm87CiAJaW50IHBvd2VyX2NoYW5nZWQgPSAwOwpAQCAtMTc2OCw3ICsxNzgwLDcgQEAKIAlpbnQgcG93ZXI7CiAKIAkvKiBHZXQgdGhpcyBjaG5sZ3JwJ3MgcmF0ZS10by1tYXgvY2xpcC1wb3dlcnMgdGFibGUgKi8KLQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcDM5X2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CiAKIAkvKiBHZXQgdGhpcyBjaGFubmVsJ3MgcmF0ZS10by1jdXJyZW50LXBvd2VyIHNldHRpbmdzIHRhYmxlICovCiAJcG93ZXJfaW5mbyA9IGNoX2luZm8tPnBvd2VyX2luZm87CkBAIC0xODIxLDcgKzE4MzMsNyBAQAogICoJIGJhc2VkIHN0cmljdGx5IG9uIHJlZ3VsYXRvcnkgKGVlcHJvbSBhbmQgc3BlY3RydW0gbWd0KSBsaW1pdGF0aW9ucwogICoJIChubyBjb25zaWRlcmF0aW9uIGZvciBoL3cgY2xpcHBpbmcgbGltaXRhdGlvbnMpLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9jaF90eHBvd2VyX2xpbWl0KHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKK3N0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfZ2V0X2NoX3R4cG93ZXJfbGltaXQoc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7CiAJczggbWF4X3Bvd2VyOwogCkBAIC0xODQ5LDkgKzE4NjEsMTAgQEAKICAqCiAgKiBJZiBSeE9uIGlzICJhc3NvY2lhdGVkIiwgdGhpcyBzZW5kcyB0aGUgbmV3IFR4cG93ZXIgdG8gTklDIQogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJaW50IGRlbHRhX2luZGV4OwogCWNvbnN0IHM4ICpjbGlwX3B3cnM7IC8qIGFycmF5IG9mIGgvdyBtYXggcG93ZXIgbGV2ZWxzIGZvciBlYWNoIHJhdGUgKi8KIAl1OCBhX2JhbmQ7CkBAIC0xODY3LDcgKzE4ODAsNyBAQAogCQlhX2JhbmQgPSBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKTsKIAogCQkvKiBHZXQgdGhpcyBjaG5sZ3JwJ3MgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSAqLwotCQlyZWZfdGVtcCA9IChzMTYpcHJpdi0+ZWVwcm9tLmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCisJCXJlZl90ZW1wID0gKHMxNillZXByb20tPmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCiAJCSAgICB0ZW1wZXJhdHVyZTsKIAogCQkvKiBnZXQgcG93ZXIgaW5kZXggYWRqdXN0bWVudCBiYXNlZCBvbiBjdXJyZW50IGFuZCBmYWN0b3J5CkBAIC0xODkzLDcgKzE5MDYsNyBAQAogCQl9CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtdG8tbWF4L2NsaXAtcG93ZXJzIHRhYmxlICovCi0JCWNsaXBfcHdycyA9IHByaXYtPmNsaXBfZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS5jbGlwX3Bvd2VyczsKKwkJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcDM5X2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CiAKIAkJLyogc2V0IHNjYW4gdHggcG93ZXIsIDFNYml0IGZvciBDQ0ssIDZNYml0IGZvciBPRkRNICovCiAJCWZvciAoc2Nhbl90YmxfaW5kZXggPSAwOwpAQCAtMTkwNywyNCArMTkyMCwyNCBAQAogCX0KIAogCS8qIHNlbmQgVHhwb3dlciBjb21tYW5kIGZvciBjdXJyZW50IGNoYW5uZWwgdG8gdWNvZGUgKi8KLQlyZXR1cm4gaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOworCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKHByaXYpOwogfQogCi1pbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgczggcG93ZXIpCitpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCBwb3dlcikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJczggbWF4X3Bvd2VyOwogCXU4IGFfYmFuZDsKIAl1OCBpOwogCi0JaWYgKHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9PSBwb3dlcikgewotCQlJV0xfREVCVUdfUE9XRVIoIlJlcXVlc3RlZCBUeCBwb3dlciBzYW1lIGFzIGN1cnJlbnQgIgorCWlmIChwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9PSBwb3dlcikgeworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlJlcXVlc3RlZCBUeCBwb3dlciBzYW1lIGFzIGN1cnJlbnQgIgogCQkJCSJsaW1pdDogJWRkQm0uXG4iLCBwb3dlcik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiU2V0dGluZyB1cHBlciBsaW1pdCBjbGFtcCB0byAlZGRCbS5cbiIsIHBvd2VyKTsKLQlwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPSBwb3dlcjsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNldHRpbmcgdXBwZXIgbGltaXQgY2xhbXAgdG8gJWRkQm0uXG4iLCBwb3dlcik7CisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBwb3dlcjsKIAogCS8qIHNldCB1cCBuZXcgVHggcG93ZXJzIGZvciBlYWNoIGFuZCBldmVyeSBjaGFubmVsLCAyLjQgYW5kIDUueCAqLwogCkBAIC0xOTUzLDcgKzE5NjYsNyBAQAogfQogCiAvKiB3aWxsIGFkZCAzOTQ1IGNoYW5uZWwgc3dpdGNoIGNtZCBoYW5kbGluZyBsYXRlciAqLwotaW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpCitpbnQgaXdsMzk0NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQogewogCXJldHVybiAwOwogfQpAQCAtMTk2OCw3ICsxOTgxLDcgQEAKICAqICAgICAtLSBzZW5kIG5ldyBzZXQgb2YgZ2FpbiBzZXR0aW5ncyB0byBOSUMKICAqIE5PVEU6ICBUaGlzIHNob3VsZCBjb250aW51ZSB3b3JraW5nLCBldmVuIHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQsCiAgKiAgIHNvIHdlIGNhbiBrZWVwIG91ciBpbnRlcm5hbCB0YWJsZSBvZiBzY2FuIHBvd2VycyBjdXJyZW50LiAqLwotdm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIFRoaXMgd2lsbCBraWNrIGluIHRoZSAiYnJ1dGUgZm9yY2UiCiAJICogaXdsMzk0NV9od19yZWdfY29tcF90eHBvd2VyX3RlbXAoKSBiZWxvdyAqLwpAQCAtMTk4Nyw3ICsyMDAwLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LAorCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCiAJCQkJCSAgICAgdGhlcm1hbF9wZXJpb2RpYy53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKQEAgLTIwMDksMTAgKzIwMjIsMTEgQEAKICAqCSBvbiBBLWJhbmQsIEVFUFJPTSdzICJncm91cCBmcmVxdWVuY3kiIGVudHJpZXMgcmVwcmVzZW50IHRoZSB0b3AKICAqCSBjaGFubmVsIGluIGVhY2ggZ3JvdXAgMS00LiAgR3JvdXAgNSBBbGwgQi9HIGNoYW5uZWxzIGFyZSBpbiBncm91cCAwLgogICovCi1zdGF0aWMgdTE2IGl3bDM5NDVfaHdfcmVnX2dldF9jaF9ncnBfaW5kZXgoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIHUxNiBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7Ci0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNoX2dycCA9ICZwcml2LT5lZXByb20uZ3JvdXBzWzBdOworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fdHhwb3dlcl9ncm91cCAqY2hfZ3JwID0gJmVlcHJvbS0+Z3JvdXBzWzBdOwogCXU4IGdyb3VwOwogCXUxNiBncm91cF9pbmRleCA9IDA7CS8qIGJhc2VkIG9uIGZhY3RvcnkgY2FsaWIgZnJlcXVlbmNpZXMgKi8KIAl1OCBncnBfY2hhbm5lbDsKQEAgLTIwMzIsNyArMjA0Niw3IEBACiAJfSBlbHNlCiAJCWdyb3VwX2luZGV4ID0gMDsJLyogMi40IEdIeiwgZ3JvdXAgMCAqLwogCi0JSVdMX0RFQlVHX1BPV0VSKCJDaG5sICVkIG1hcHBlZCB0byBncnAgJWRcbiIsIGNoX2luZm8tPmNoYW5uZWwsCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJDaG5sICVkIG1hcHBlZCB0byBncnAgJWRcbiIsIGNoX2luZm8tPmNoYW5uZWwsCiAJCQlncm91cF9pbmRleCk7CiAJcmV0dXJuIGdyb3VwX2luZGV4OwogfQpAQCAtMjA0MywxMSArMjA1NywxMiBAQAogICogSW50ZXJwb2xhdGUgdG8gZ2V0IG5vbWluYWwgKGkuZS4gYXQgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSkgaW5kZXgKICAqICAgaW50byByYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyB0YWJsZSBmb3IgcmVxdWVzdGVkIHBvd2VyLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9tYXRjaGVkX3Bvd2VyX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9tYXRjaGVkX3Bvd2VyX2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgczggcmVxdWVzdGVkX3Bvd2VyLAogCQkJCSAgICAgICBzMzIgc2V0dGluZ19pbmRleCwgczMyICpuZXdfaW5kZXgpCiB7CiAJY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNobmxfZ3JwID0gTlVMTDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJczMyIGluZGV4MCwgaW5kZXgxOwogCXMzMiBwb3dlciA9IDIgKiByZXF1ZXN0ZWRfcG93ZXI7CiAJczMyIGk7CkBAIC0yMDU2LDcgKzIwNzEsNyBAQAogCXMzMiByZXM7CiAJczMyIGRlbm9taW5hdG9yOwogCi0JY2hubF9ncnAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1tzZXR0aW5nX2luZGV4XTsKKwljaG5sX2dycCA9ICZlZXByb20tPmdyb3Vwc1tzZXR0aW5nX2luZGV4XTsKIAlzYW1wbGVzID0gY2hubF9ncnAtPnNhbXBsZXM7CiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAocG93ZXIgPT0gc2FtcGxlc1tpXS5wb3dlcikgewpAQCAtMjA5MSwyMiArMjEwNiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2h3X3JlZ19pbml0X2NoYW5uZWxfZ3JvdXBzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2h3X3JlZ19pbml0X2NoYW5uZWxfZ3JvdXBzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgaTsKIAlzMzIgcmF0ZV9pbmRleDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmdyb3VwOwogCi0JSVdMX0RFQlVHX1BPV0VSKCJJbml0aWFsaXppbmcgZmFjdG9yeSBjYWxpYiBpbmZvIGZyb20gRUVQUk9NXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemluZyBmYWN0b3J5IGNhbGliIGluZm8gZnJvbSBFRVBST01cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9OVU1fVFhfQ0FMSUJfR1JPVVBTOyBpKyspIHsKIAkJczggKmNsaXBfcHdyczsJLyogdGFibGUgb2YgcG93ZXIgbGV2ZWxzIGZvciBlYWNoIHJhdGUgKi8KIAkJczggc2F0dXJfcHdyOwkvKiBzYXR1cmF0aW9uIHBvd2VyIGZvciBlYWNoIGNobmwgZ3JvdXAgKi8KLQkJZ3JvdXAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1tpXTsKKwkJZ3JvdXAgPSAmZWVwcm9tLT5ncm91cHNbaV07CiAKIAkJLyogc2FuaXR5IGNoZWNrIG9uIGZhY3Rvcnkgc2F0dXJhdGlvbiBwb3dlciB2YWx1ZSAqLwogCQlpZiAoZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIgPCA0MCkgewotCQkJSVdMX1dBUk5JTkcoIkVycm9yOiBzYXR1cmF0aW9uIHBvd2VyIGlzICVkLCAiCisJCQlJV0xfV0FSTihwcml2LCAiRXJyb3I6IHNhdHVyYXRpb24gcG93ZXIgaXMgJWQsICIKIAkJCQkgICAgImxlc3MgdGhhbiBtaW5pbXVtIGV4cGVjdGVkIDQwXG4iLAogCQkJCSAgICBncm91cC0+c2F0dXJhdGlvbl9wb3dlcik7CiAJCQlyZXR1cm47CkBAIC0yMTIxLDcgKzIxMzcsNyBAQAogCQkgKiAgIHBvd2VyIHBlYWtzLCB3aXRob3V0IHRvbyBtdWNoIGRpc3RvcnRpb24gKGNsaXBwaW5nKS4KIAkJICovCiAJCS8qIHdlJ2xsIGZpbGwgaW4gdGhpcyBhcnJheSB3aXRoIGgvdyBtYXggcG93ZXIgbGV2ZWxzICovCi0JCWNsaXBfcHdycyA9IChzOCAqKSBwcml2LT5jbGlwX2dyb3Vwc1tpXS5jbGlwX3Bvd2VyczsKKwkJY2xpcF9wd3JzID0gKHM4ICopIHByaXYtPmNsaXAzOV9ncm91cHNbaV0uY2xpcF9wb3dlcnM7CiAKIAkJLyogZGl2aWRlIGZhY3Rvcnkgc2F0dXJhdGlvbiBwb3dlciBieSAyIHRvIGZpbmQgLTNkQiBsZXZlbCAqLwogCQlzYXR1cl9wd3IgPSAoczgpIChncm91cC0+c2F0dXJhdGlvbl9wb3dlciA+PiAxKTsKQEAgLTIxNzEsMTAgKzIxODcsMTEgQEAKICAqCiAgKiBUaGlzIGRvZXMgKm5vdCogd3JpdGUgdmFsdWVzIHRvIE5JQywganVzdCBzZXRzIHVwIG91ciBpbnRlcm5hbCB0YWJsZS4KICAqLwotaW50IGl3bDM5NDVfdHhwb3dlcl9zZXRfZnJvbV9lZXByb20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gKnB3cl9pbmZvOworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKIAlpbnQgZGVsdGFfaW5kZXg7CiAJdTggcmF0ZV9pbmRleDsKIAl1OCBzY2FuX3RibF9pbmRleDsKQEAgLTIyMDQsMTUgKzIyMjEsMTUgQEAKIAkJCWl3bDM5NDVfaHdfcmVnX2dldF9jaF9ncnBfaW5kZXgocHJpdiwgY2hfaW5mbyk7CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtPm1heC9jbGlwLXBvd2VycyB0YWJsZSAqLwotCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJCS8qIGNhbGN1bGF0ZSBwb3dlciBpbmRleCAqYWRqdXN0bWVudCogdmFsdWUgYWNjb3JkaW5nIHRvCiAJCSAqICBkaWZmIGJldHdlZW4gY3VycmVudCB0ZW1wZXJhdHVyZSBhbmQgZmFjdG9yeSB0ZW1wZXJhdHVyZSAqLwogCQlkZWx0YV9pbmRleCA9IGl3bDM5NDVfaHdfcmVnX2FkanVzdF9wb3dlcl9ieV90ZW1wKHRlbXBlcmF0dXJlLAotCQkJCXByaXYtPmVlcHJvbS5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgorCQkJCWVlcHJvbS0+Z3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS4KIAkJCQl0ZW1wZXJhdHVyZSk7CiAKLQkJSVdMX0RFQlVHX1BPV0VSKCJEZWx0YSBpbmRleCBmb3IgY2hhbm5lbCAlZDogJWQgWyVkXVxuIiwKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJEZWx0YSBpbmRleCBmb3IgY2hhbm5lbCAlZDogJWQgWyVkXVxuIiwKIAkJCQljaF9pbmZvLT5jaGFubmVsLCBkZWx0YV9pbmRleCwgdGVtcGVyYXR1cmUgKwogCQkJCUlXTF9URU1QX0NPTlZFUlQpOwogCkBAIC0yMjM1LDcgKzIyNTIsNyBAQAogCQkJCQkJCSBjaF9pbmZvLT5ncm91cF9pbmRleCwKIAkJCQkJCQkgJnBvd2VyX2lkeCk7CiAJCQlpZiAocmMpIHsKLQkJCQlJV0xfRVJST1IoIkludmFsaWQgcG93ZXIgaW5kZXhcbiIpOworCQkJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgcG93ZXIgaW5kZXhcbiIpOwogCQkJCXJldHVybiByYzsKIAkJCX0KIAkJCXB3cl9pbmZvLT5iYXNlX3Bvd2VyX2luZGV4ID0gKHU4KSBwb3dlcl9pZHg7CkBAIC0yMjk1LDc1ICsyMzEyLDkwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3J4cV9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLCAwKTsKLQlyYyA9IGl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX1JTU1JfU1RBVFVTLAotCQkJRkhfUlNTUl9DSE5MMF9SWF9TVEFUVVNfQ0hOTF9JRExFLCAxMDAwKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX0NPTkZJRygwKSwgMCk7CisJcmMgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIMzlfUlNTUl9TVEFUVVMsCisJCQlGSDM5X1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRSwgMTAwMCk7CiAJaWYgKHJjIDwgMCkKLQkJSVdMX0VSUk9SKCJDYW4ndCBzdG9wIFJ4IERNQS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJDYW4ndCBzdG9wIFJ4IERNQS5cbiIpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKQoraW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwogCi0Jc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQ7CisJc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPnNoYXJlZF92aXJ0OwogCiAJc2hhcmVkX2RhdGEtPnR4X2Jhc2VfcHRyW3R4cV9pZF0gPSBjcHVfdG9fbGUzMigodTMyKXR4cS0+cS5kbWFfYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9DQkNDX0NUUkwodHhxX2lkKSwgMCk7Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9DQkNDX0JBU0UodHhxX2lkKSwgMCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfQ0JDQ19DVFJMKHR4cV9pZCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X0NCQ0NfQkFTRSh0eHFfaWQpLCAwKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVENTUl9DT05GSUcodHhxX2lkKSwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9UWEYgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgfAotCQlBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUpOwotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RDU1JfQ09ORklHKHR4cV9pZCksCisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX1JUQ19OT0lOVCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9UWEYgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9IT1NUX0lGVEZEIHwKKwkJRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DUkVESVRfRU5BQkxFX1ZBTCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTkFCTEUpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYuIHdyaXRlcyAqLwotCWl3bDM5NDVfcmVhZDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UpOworCWl3bF9yZWFkMzIocHJpdiwgRkgzOV9UU1NSX0NCQl9CQVNFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfZ2V0X3J4X3JlYWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKKy8qCisgKiBIQ01EIHV0aWxzCisgKi8KK3N0YXRpYyB1MTYgaXdsMzk0NV9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQgKnNoYXJlZF9kYXRhID0gcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydDsKKwlzd2l0Y2ggKGNtZF9pZCkgeworCWNhc2UgUkVQTFlfUlhPTjoKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCk7CisJY2FzZSBQT1dFUl9UQUJMRV9DTUQ6CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQpOworCWRlZmF1bHQ6CisJCXJldHVybiBsZW47CisJfQorfQogCi0JcmV0dXJuIGxlMzJfdG9fY3B1KHNoYXJlZF9kYXRhLT5yeF9yZWFkX3B0clswXSk7CitzdGF0aWMgdTE2IGl3bDM5NDVfYnVpbGRfYWRkc3RhX2hjbWQoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsIHU4ICpkYXRhKQoreworCXUxNiBzaXplID0gKHUxNilzaXplb2Yoc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCk7CisJbWVtY3B5KGRhdGEsIGNtZCwgc2l6ZSk7CisJcmV0dXJuIHNpemU7CiB9CiAKIC8qKgogICogaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUgLSBJbml0aWFsaXplIHRoZSBoYXJkd2FyZSByYXRlIGZhbGxiYWNrIHRhYmxlCiAgKi8KLWludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMsIGksIGluZGV4LCBwcmV2X2luZGV4OwogCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19jbWQgcmF0ZV9jbWQgPSB7CkBAIC0yMzg0LDcgKzI0MTYsNyBAQAogCiAJc3dpdGNoIChwcml2LT5iYW5kKSB7CiAJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgotCQlJV0xfREVCVUdfUkFURSgiU2VsZWN0IEEgbW9kZSByYXRlIHNjYWxlXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdCBBIG1vZGUgcmF0ZSBzY2FsZVxuIik7CiAJCS8qIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIENDSyByYXRlcyBpcyB1c2VkLAogCQkgKiBoYXZlIGl0IGZhbGwgYmFjayB0byB0aGUgNk0gT0ZETSByYXRlICovCiAJCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYX1RBQkxFOwpAQCAtMjQwMiwxMiArMjQzNCwxMiBAQAogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKLQkJSVdMX0RFQlVHX1JBVEUoIlNlbGVjdCBCL0cgbW9kZSByYXRlIHNjYWxlXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdCBCL0cgbW9kZSByYXRlIHNjYWxlXG4iKTsKIAkJLyogSWYgYW4gT0ZETSByYXRlIGlzIHVzZWQsIGhhdmUgaXQgZmFsbCBiYWNrIHRvIHRoZQogCQkgKiAxTSBDQ0sgcmF0ZXMgKi8KIAogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAKIAkJCWluZGV4ID0gSVdMX0ZJUlNUX0NDS19SQVRFOwogCQkJZm9yIChpID0gSVdMX1JBVEVfNk1fSU5ERVhfVEFCTEU7CkBAIC0yNDI4LDQ3ICsyNDYwLDQ4IEBACiAKIAkvKiBVcGRhdGUgdGhlIHJhdGUgc2NhbGluZyBmb3IgY29udHJvbCBmcmFtZSBUeCAqLwogCXJhdGVfY21kLnRhYmxlX2lkID0gMDsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCiAJCQkgICAgICAmcmF0ZV9jbWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCiAJLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGRhdGEgZnJhbWUgVHggKi8KIAlyYXRlX2NtZC50YWJsZV9pZCA9IDE7Ci0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUkFURV9TQ0FMRSwgc2l6ZW9mKHJhdGVfY21kKSwKIAkJCQkmcmF0ZV9jbWQpOwogfQogCiAvKiBDYWxsZWQgd2hlbiBpbml0aWFsaXppbmcgZHJpdmVyICovCi1pbnQgaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JbWVtc2V0KCh2b2lkICopJnByaXYtPmh3X3NldHRpbmcsIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbykpOworCW1lbXNldCgodm9pZCAqKSZwcml2LT5od19wYXJhbXMsIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2h3X3BhcmFtcykpOwogCi0JcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCA9CisJcHJpdi0+c2hhcmVkX3ZpcnQgPQogCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAogCQkJCSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgJnByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCQkJCSAmcHJpdi0+c2hhcmVkX3BoeXMpOwogCi0JaWYgKCFwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0KSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCWlmICghcHJpdi0+c2hhcmVkX3ZpcnQpIHsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcHJpdi0+aHdfc2V0dGluZy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRTsKLQlwcml2LT5od19zZXR0aW5nLm1heF9wa3Rfc2l6ZSA9IDIzNDI7Ci0JcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCk7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcnhxX3NpemUgPSBSWF9RVUVVRV9TSVpFOwotCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKLQlwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9ucyA9IElXTDM5NDVfU1RBVElPTl9DT1VOVDsKLQlwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZCA9IElXTDM5NDVfQlJPQURDQVNUX0lEOworCXByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90ZmQpOworCXByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSA9IElXTF9SWF9CVUZfU0laRV8zSzsKKwlwcml2LT5od19wYXJhbXMubWF4X3BrdF9zaXplID0gMjM0MjsKKwlwcml2LT5od19wYXJhbXMubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKKwlwcml2LT5od19wYXJhbXMubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKKwlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMMzk0NV9TVEFUSU9OX0NPVU5UOworCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0wzOTQ1X0JST0FEQ0FTVF9JRDsKIAotCXByaXYtPmh3X3NldHRpbmcudHhfYW50X251bSA9IDI7CisJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkgzOV9SU0NTUl9DSE5MMF9XUFRSOworCiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCit1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kICp0eF9iZWFjb25fY21kOwpAQCAtMjQ3Nyw3ICsyNTEwLDcgQEAKIAl0eF9iZWFjb25fY21kID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgKikmZnJhbWUtPnU7CiAJbWVtc2V0KHR4X2JlYWNvbl9jbWQsIDAsIHNpemVvZigqdHhfYmVhY29uX2NtZCkpOwogCi0JdHhfYmVhY29uX2NtZC0+dHguc3RhX2lkID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJdHhfYmVhY29uX2NtZC0+dHguc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl0eF9iZWFjb25fY21kLT50eC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAogCWZyYW1lX3NpemUgPSBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHByaXYsCkBAIC0yNTAxLDM3ICsyNTM0LDI2MiBAQAogCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCkgKyBmcmFtZV9zaXplOwogfQogCi12b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1RYXSA9IGl3bDM5NDVfcnhfcmVwbHlfdHg7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfMzk0NV9SWF0gPSBpd2wzOTQ1X3J4X3JlcGx5X3J4OwogfQogCi12b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT50aGVybWFsX3BlcmlvZGljLAogCQkJICBpd2wzOTQ1X2JnX3JlZ190eHBvd2VyX3BlcmlvZGljKTsKIH0KIAotdm9pZCBpd2wzOTQ1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnRoZXJtYWxfcGVyaW9kaWMpOwogfQogCi1zdGF0aWMgc3RydWN0IGl3bF8zOTQ1X2NmZyBpd2wzOTQ1X2JnX2NmZyA9IHsKKy8qIGNoZWNrIGNvbnRlbnRzIG9mIHNwZWNpYWwgYm9vdHN0cmFwIHVDb2RlIFNSQU0gKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfYnNtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKyB7CisJX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKKwl1MzIgcmVnOworCXUzMiB2YWw7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CisKKwkvKiB2ZXJpZnkgQlNNIFNSQU0gY29udGVudHMgKi8KKwl2YWwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7CisJZm9yIChyZWcgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKKwkgICAgIHJlZyA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOworCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CisJCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKKwkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CisJCQlJV0xfRVJSKHByaXYsICJCU00gdUNvZGUgdmVyaWZpY2F0aW9uIGZhaWxlZCBhdCAiCisJCQkJICAiYWRkciAweCUwOFgrJXUgKG9mICV1KSwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCisJCQkJICBCU01fU1JBTV9MT1dFUl9CT1VORCwKKwkJCQkgIHJlZyAtIEJTTV9TUkFNX0xPV0VSX0JPVU5ELCBsZW4sCisJCQkJICB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlNNIGJvb3RzdHJhcCB1Q29kZSBpbWFnZSBPS1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRUVQUk9NIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENsZWFyIHRoZSBPV05FUl9NU0ssIHRvIGVzdGFibGlzaCBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUgcnVubmluZyBvbgorICogZW1iZWRkZWQgY29udHJvbGxlcikgYXMgRUVQUk9NIHJlYWRlcjsgZWFjaCByZWFkIGlzIGEgc2VyaWVzIG9mIHB1bHNlcworICogdG8vZnJvbSB0aGUgRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdAorICogaWYgdGhleSB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgc29tZSBvd25lcnNoaXAgbWVjaGFuaXNtLiAgSGVyZSwgdGhlIGRyaXZlcgorICogc2ltcGx5IGNsYWltcyBvd25lcnNoaXAsIHdoaWNoIHNob3VsZCBiZSBzYWZlIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyAqIChpLmUuIGJlZm9yZSBsb2FkaW5nIHVDb2RlISkuCisgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCV9pd2xfY2xlYXJfYml0KHByaXYsIENTUl9FRVBST01fR1AsIENTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuOworfQorCisgLyoqCisgICogaXdsMzk0NV9sb2FkX2JzbSAtIExvYWQgYm9vdHN0cmFwIGluc3RydWN0aW9ucworICAqCisgICogQlNNIG9wZXJhdGlvbjoKKyAgKgorICAqIFRoZSBCb290c3RyYXAgU3RhdGUgTWFjaGluZSAoQlNNKSBzdG9yZXMgYSBzaG9ydCBib290c3RyYXAgdUNvZGUgcHJvZ3JhbQorICAqIGluIHNwZWNpYWwgU1JBTSB0aGF0IGRvZXMgbm90IHBvd2VyIGRvd24gZHVyaW5nIFJGS0lMTC4gIFdoZW4gcG93ZXJpbmcgYmFjaworICAqIHVwIGFmdGVyIHBvd2VyLXNhdmluZyBzbGVlcHMgKG9yIGR1cmluZyBpbml0aWFsIHVDb2RlIGxvYWQpLCB0aGUgQlNNIGxvYWRzCisgICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtIGludG8gdGhlIG9uLWJvYXJkIHByb2Nlc3NvciwgYW5kIHN0YXJ0cyBpdC4KKyAgKgorICAqIFRoZSBib290c3RyYXAgcHJvZ3JhbSBsb2FkcyAodmlhIERNQSkgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGZvciBhIG5ldworICAqIHByb2dyYW0gZnJvbSBob3N0IERSQU0gbG9jYXRpb25zIGluZGljYXRlZCBieSB0aGUgaG9zdCBkcml2ZXIgaW4gdGhlCisgICogQlNNX0RSQU1fKiByZWdpc3RlcnMuICBPbmNlIHRoZSBuZXcgcHJvZ3JhbSBpcyBsb2FkZWQsIGl0IHN0YXJ0cworICAqIGF1dG9tYXRpY2FsbHkuCisgICoKKyAgKiBXaGVuIGluaXRpYWxpemluZyB0aGUgTklDLCB0aGUgaG9zdCBkcml2ZXIgcG9pbnRzIHRoZSBCU00gdG8gdGhlCisgICogImluaXRpYWxpemUiIHVDb2RlIGltYWdlLiAgVGhpcyB1Q29kZSBzZXRzIHVwIHNvbWUgaW50ZXJuYWwgZGF0YSwgdGhlbgorICAqIG5vdGlmaWVzIGhvc3QgdmlhICJpbml0aWFsaXplIGFsaXZlIiB0aGF0IGl0IGlzIGNvbXBsZXRlLgorICAqCisgICogVGhlIGhvc3QgdGhlbiByZXBsYWNlcyB0aGUgQlNNX0RSQU1fKiBwb2ludGVyIHZhbHVlcyB0byBwb2ludCB0byB0aGUKKyAgKiBub3JtYWwgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIGEgYmFja3VwIHVDb2RlIGRhdGEgY2FjaGUgYnVmZmVyCisgICogKGZpbGxlZCBpbml0aWFsbHkgd2l0aCBzdGFydGluZyBkYXRhIHZhbHVlcyBmb3IgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciksCisgICogdGhlbiB0cmlnZ2VycyB0aGUgImluaXRpYWxpemUiIHVDb2RlIHRvIGxvYWQgYW5kIGxhdW5jaCB0aGUgcnVudGltZSB1Q29kZSwKKyAgKiB3aGljaCBiZWdpbnMgbm9ybWFsIG9wZXJhdGlvbi4KKyAgKgorICAqIFdoZW4gZG9pbmcgYSBwb3dlci1zYXZlIHNodXRkb3duLCBydW50aW1lIHVDb2RlIHNhdmVzIGRhdGEgU1JBTSBpbnRvCisgICogdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGluIERSQU0gYmVmb3JlIFNSQU0gaXMgcG93ZXJlZCBkb3duLgorICAqCisgICogV2hlbiBwb3dlcmluZyBiYWNrIHVwLCB0aGUgQlNNIGxvYWRzIHRoZSBib290c3RyYXAgcHJvZ3JhbS4gIFRoaXMgcmVsb2FkcworICAqIHRoZSBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGludG8gU1JBTSwKKyAgKiBhbmQgcmUtbGF1bmNoZXMgdGhlIHJ1bnRpbWUgdUNvZGUgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4KKyAgKi8KK3N0YXRpYyBpbnQgaXdsMzk0NV9sb2FkX2JzbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOworCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKKwlkbWFfYWRkcl90IHBpbnN0OworCWRtYV9hZGRyX3QgcGRhdGE7CisJdTMyIGluc3RfbGVuOworCXUzMiBkYXRhX2xlbjsKKwlpbnQgcmM7CisJaW50IGk7CisJdTMyIGRvbmU7CisJdTMyIHJlZ19vZmZzZXQ7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gbG9hZCBic21cbiIpOworCisJLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLworCWlmIChsZW4gPiBJV0wzOV9NQVhfQlNNX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCisJKiAgIGluIGhvc3QgRFJBTSAuLi4gaG9zdCBEUkFNIHBoeXNpY2FsIGFkZHJlc3MgYml0cyAzMTowIGZvciAzOTQ1LgorCSogTk9URTogIGl3bDM5NDVfaW5pdGlhbGl6ZV9hbGl2ZV9zdGFydCgpIHdpbGwgcmVwbGFjZSB0aGVzZSB2YWx1ZXMsCisJKiAgICAgICAgYWZ0ZXIgdGhlICJpbml0aWFsaXplIiB1Q29kZSBoYXMgcnVuLCB0byBwb2ludCB0bworCSogICAgICAgIHJ1bnRpbWUvcHJvdG9jb2wgaW5zdHJ1Y3Rpb25zIGFuZCBiYWNrdXAgZGF0YSBjYWNoZS4gKi8KKwlwaW5zdCA9IHByaXYtPnVjb2RlX2luaXQucF9hZGRyOworCXBkYXRhID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLnBfYWRkcjsKKwlpbnN0X2xlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOworCWRhdGFfbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKKworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfUFRSX1JFRywgcGRhdGEpOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywgaW5zdF9sZW4pOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywgZGF0YV9sZW4pOworCisJLyogRmlsbCBCU00gbWVtb3J5IHdpdGggYm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLworCWZvciAocmVnX29mZnNldCA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOworCSAgICAgcmVnX29mZnNldCA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOworCSAgICAgcmVnX29mZnNldCArPSBzaXplb2YodTMyKSwgaW1hZ2UrKykKKwkJX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZ19vZmZzZXQsCisJCQkJCSAgbGUzMl90b19jcHUoKmltYWdlKSk7CisKKwlyYyA9IGl3bDM5NDVfdmVyaWZ5X2JzbShwcml2KTsKKwlpZiAocmMpIHsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLAorCQkJCSBJV0wzOV9SVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7CisKKwkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCisJICogICB0byBwcmVwYXJlIHRvIGxvYWQgImluaXRpYWxpemUiIHVDb2RlICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAorCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKTsKKworCS8qIFdhaXQgZm9yIGxvYWQgb2YgYm9vdHN0cmFwIHVDb2RlIHRvIGZpbmlzaCAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlkb25lID0gaXdsX3JlYWRfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcpOworCQlpZiAoIShkb25lICYgQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaWYgKGkgPCAxMDApCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CisJZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgdHJpZ2dlcnMgaXQKKwkgKiAgIChlLmcuIHdoZW4gcG93ZXJpbmcgYmFjayB1cCBhZnRlciBwb3dlci1zYXZlIHNodXRkb3duKSAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRywKKwkJQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVF9FTik7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsMzk0NV9saWIgPSB7CisJLnR4cV9hdHRhY2hfYnVmX3RvX3RmZCA9IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQsCisJLmxvYWRfdWNvZGUgPSBpd2wzOTQ1X2xvYWRfYnNtLAorCS5hcG1fb3BzID0geworCQkuaW5pdCA9IGl3bDM5NDVfYXBtX2luaXQsCisJCS5yZXNldCA9IGl3bDM5NDVfYXBtX3Jlc2V0LAorCQkuc3RvcCA9IGl3bDM5NDVfYXBtX3N0b3AsCisJCS5jb25maWcgPSBpd2wzOTQ1X25pY19jb25maWcsCisJCS5zZXRfcHdyX3NyYyA9IGl3bDM5NDVfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzFfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzJfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzVfQ0hBTk5FTFMsCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCwKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFULAorCQl9LAorCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAorCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKKwkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsMzk0NV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCisJCS5xdWVyeV9hZGRyID0gaXdsY29yZV9lZXByb21fcXVlcnlfYWRkciwKKwl9LAorCS5zZW5kX3R4X3Bvd2VyCT0gaXdsMzk0NV9zZW5kX3R4X3Bvd2VyLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsMzk0NV9oY21kX3V0aWxzID0geworCS5nZXRfaGNtZF9zaXplID0gaXdsMzk0NV9nZXRfaGNtZF9zaXplLAorCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDM5NDVfYnVpbGRfYWRkc3RhX2hjbWQsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsMzk0NV9vcHMgPSB7CisJLmxpYiA9ICZpd2wzOTQ1X2xpYiwKKwkudXRpbHMgPSAmaXdsMzk0NV9oY21kX3V0aWxzLAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfY2ZnIGl3bDM5NDVfYmdfY2ZnID0gewogCS5uYW1lID0gIjM5NDVCRyIsCiAJLmZ3X25hbWVfcHJlID0gSVdMMzk0NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0wzOTQ1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0wzOTQ1X1VDT0RFX0FQSV9NSU4sCiAJLnNrdSA9IElXTF9TS1VfRywKKwkuZWVwcm9tX3NpemUgPSBJV0wzOTQ1X0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV8zOTQ1X0VFUFJPTV9WRVJTSU9OLAorCS5vcHMgPSAmaXdsMzk0NV9vcHMsCisJLm1vZF9wYXJhbXMgPSAmaXdsMzk0NV9tb2RfcGFyYW1zCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF8zOTQ1X2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CitzdGF0aWMgc3RydWN0IGl3bF9jZmcgaXdsMzk0NV9hYmdfY2ZnID0gewogCS5uYW1lID0gIjM5NDVBQkciLAogCS5md19uYW1lX3ByZSA9IElXTDM5NDVfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMMzk0NV9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMMzk0NV9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HLAorCS5lZXByb21fc2l6ZSA9IElXTDM5NDVfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCisJLm9wcyA9ICZpd2wzOTQ1X29wcywKKwkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMKIH07CiAKIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDM5NDVfaHdfY2FyZF9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAppbmRleCAyYzBkZGM1Li5hYjdhYWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQzLDExICs0MywxMyBAQAogLyogSGFyZHdhcmUgc3BlY2lmaWMgZmlsZSBkZWZpbmVzIHRoZSBQQ0kgSURzIHRhYmxlIGZvciB0aGF0IGhhcmR3YXJlIG1vZHVsZSAqLwogZXh0ZXJuIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl3bDM5NDVfaHdfY2FyZF9pZHNbXTsKIAotI2RlZmluZSBEUlZfTkFNRQkiaXdsMzk0NSIKICNpbmNsdWRlICJpd2wtY3NyLmgiCiAjaW5jbHVkZSAiaXdsLXBycGguaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKICNpbmNsdWRlICJpd2wtMzk0NS1ody5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCisjaW5jbHVkZSAiaXdsLXBvd2VyLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWxlZC5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwpAQCAtNzQsOCArNzYsNyBAQAogI2RlZmluZSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFICgtMTI3KQogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyBhY2Nlc3NpYmxlIGZyb20gaXdsLSouYyAqLwotZXh0ZXJuIGludCBpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvOwotZXh0ZXJuIGludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW07CitleHRlcm4gc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDM5NDVfbW9kX3BhcmFtczsKIAogc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYgewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhOwpAQCAtOTUsNyArOTYsNiBAQAogICogZWxzZSBSVFMgZm9yIGRhdGEvbWFuYWdlbWVudCBmcmFtZXMgd2hlcmUgTVBEVSBpcyBsYXJnZXIKICAqICAgdGhhbiBSVFMgdmFsdWUuCiAgKi8KLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFICAgICAgICAgICAzMDAwVQogI2RlZmluZSBERUZBVUxUX1JUU19USFJFU0hPTEQgICAgIDIzNDdVCiAjZGVmaW5lIE1JTl9SVFNfVEhSRVNIT0xEICAgICAgICAgMFUKICNkZWZpbmUgTUFYX1JUU19USFJFU0hPTEQgICAgICAgICAyMzQ3VQpAQCAtMTA1LDEzNiArMTA1LDcgQEAKICNkZWZpbmUJREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCA3VQogI2RlZmluZQlERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgIDRVCiAKLXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgewotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKgotICogR2VuZXJpYyBxdWV1ZSBzdHJ1Y3R1cmUKLSAqCi0gKiBDb250YWlucyBjb21tb24gZGF0YSBmb3IgUnggYW5kIFR4IHF1ZXVlcwotICovCi1zdHJ1Y3QgaXdsMzk0NV9xdWV1ZSB7Ci0JaW50IG5fYmQ7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgQkRzIGluIHRoaXMgcXVldWUgKi8KLQlpbnQgd3JpdGVfcHRyOyAgICAgICAvKiAxLXN0IGVtcHR5IGVudHJ5IChpbmRleCkgaG9zdF93Ki8KLQlpbnQgcmVhZF9wdHI7ICAgICAgICAgLyogbGFzdCB1c2VkIGVudHJ5IChpbmRleCkgaG9zdF9yKi8KLQlkbWFfYWRkcl90IGRtYV9hZGRyOyAgIC8qIHBoeXNpY2FsIGFkZHIgZm9yIEJEJ3MgKi8KLQlpbnQgbl93aW5kb3c7CSAgICAgICAvKiBzYWZlIHF1ZXVlIHdpbmRvdyAqLwotCXUzMiBpZDsKLQlpbnQgbG93X21hcms7CSAgICAgICAvKiBsb3cgd2F0ZXJtYXJrLCByZXN1bWUgcXVldWUgaWYgZnJlZQotCQkJCSogc3BhY2UgbW9yZSB0aGFuIHRoaXMgKi8KLQlpbnQgaGlnaF9tYXJrOyAgICAgICAgIC8qIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHF1ZXVlIGlmIGZyZWUKLQkJCQkqIHNwYWNlIGxlc3MgdGhhbiB0aGlzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotaW50IGl3bDM5NDVfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcXVldWUgKnEpOwotaW50IGl3bDM5NDVfeDJfcXVldWVfdXNlZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwgaW50IGkpOwotCi0jZGVmaW5lIE1BWF9OVU1fT0ZfVEJTICAgICAgICAgICgyMCkKLQotLyogT25lIGZvciBlYWNoIFRGRCAqLwotc3RydWN0IGl3bDM5NDVfdHhfaW5mbyB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYltNQVhfTlVNX09GX1RCU107Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlIC0gVHggUXVldWUgZm9yIERNQQotICogQHE6IGdlbmVyaWMgUngvVHggcXVldWUgZGVzY3JpcHRvcgotICogQGJkOiBiYXNlIG9mIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzCi0gKiBAY21kOiBhcnJheSBvZiBjb21tYW5kL1R4IGJ1ZmZlcnMKLSAqIEBkbWFfYWRkcl9jbWQ6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kL3R4IGJ1ZmZlciBhcnJheQotICogQHR4YjogYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YQotICogQG5lZWRfdXBkYXRlOiBpbmRpY2F0ZXMgbmVlZCB0byB1cGRhdGUgcmVhZC93cml0ZSBpbmRleAotICoKLSAqIEEgVHggcXVldWUgY29uc2lzdHMgb2YgY2lyY3VsYXIgYnVmZmVyIG9mIEJEcyAoYS5rLmEuIFRGRHMsIHRyYW5zbWl0IGZyYW1lCi0gKiBkZXNjcmlwdG9ycykgYW5kIHJlcXVpcmVkIGxvY2tpbmcgc3RydWN0dXJlcy4KLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgewotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlIHE7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZDsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyX2NtZDsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eGI7Ci0JaW50IG5lZWRfdXBkYXRlOwotCWludCBhY3RpdmU7Ci19OwotCi0jZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQotCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3RnZF9pbmZvIHsKLQl1OCB0eXBlOwotCXM4IG1heF9wb3dlcjsKLX07Ci0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdoX2luZm8gewotCXM2NCBsYXN0X3JhZGFyX3RpbWU7Ci19OwotCi0vKiBjdXJyZW50IFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCByYXRlIGZvciBlYWNoIGNoYW5uZWwuCi0gKiByZXF1ZXN0ZWQgcG93ZXIgaXMgbGltaXRlZCBieToKLSAqIC0tIHJlZ3VsYXRvcnkgRUVQUk9NIGxpbWl0cyBmb3IgdGhpcyBjaGFubmVsCi0gKiAtLSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGNsaXAtcG93ZXJzKQotICogLS0gc3BlY3RydW0gbWFuYWdlbWVudAotICogLS0gdXNlciBwcmVmZXJlbmNlIChlLmcuIGl3Y29uZmlnKQotICogd2hlbiByZXF1ZXN0ZWQgcG93ZXIgaXMgc2V0LCBiYXNlIHBvd2VyIGluZGV4IG11c3QgYWxzbyBiZSBzZXQuICovCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IGJhc2VfcG93ZXJfaW5kZXg7CS8qIGdhaW4gaW5kZXggZm9yIHBvd2VyIGF0IGZhY3RvcnkgdGVtcC4gKi8KLQlzOCByZXF1ZXN0ZWRfcG93ZXI7CS8qIHBvd2VyIChkQm0pIHJlcXVlc3RlZCBmb3IgdGhpcyBjaG5sL3JhdGUgKi8KLX07Ci0KLS8qIGN1cnJlbnQgc2NhbiBUeCBwb3dlciB2YWx1ZXMgdG8gdXNlLCBvbmUgZm9yIGVhY2ggc2NhbiByYXRlIGZvciBlYWNoCi0gKiBjaGFubmVsLiAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9wb3dlcl9pbmZvIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7CS8qIGFjdHVhbCByYWRpbyBhbmQgRFNQIGdhaW4gc2V0dGluZ3MgKi8KLQlzOCBwb3dlcl90YWJsZV9pbmRleDsJLyogYWN0dWFsIChjb21wZW5zdCdkKSBpbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KLQlzOCByZXF1ZXN0ZWRfcG93ZXI7CS8qIHNjYW4gcHdyIChkQm0pIHJlcXVlc3RlZCBmb3IgY2hubC9yYXRlICovCi19OwotCi0vKgotICogT25lIGZvciBlYWNoIGNoYW5uZWwsIGhvbGRzIGFsbCBjaGFubmVsIHNldHVwIGRhdGEKLSAqIFNvbWUgb2YgdGhlIGZpZWxkcyAoZS5nLiBlZXByb20gYW5kIGZsYWdzL21heF9wb3dlcl9hdmcpIGFyZSByZWR1bmRhbnQKLSAqICAgICB3aXRoIG9uZSBhbm90aGVyIQotICovCi0jZGVmaW5lIElXTDQ5NjVfTUFYX1JBVEUgKDMzKQotCi1zdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdkX2luZm8gdGdkOwotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdoX2luZm8gdGdoOwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBmYXRfZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCBmb3IKLQkJCQkJCSAqIEZBVCBjaGFubmVsICovCi0KLQl1OCBjaGFubmVsOwkgIC8qIGNoYW5uZWwgbnVtYmVyICovCi0JdTggZmxhZ3M7CSAgLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCi0JczggbWF4X3Bvd2VyX2F2ZzsgLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgbm9ybWFsIFR4LCBhbnkgcmF0ZSAqLwotCXM4IGN1cnJfdHhwb3c7CSAgLyogKGRCbSkgcmVndWxhdG9yeS9zcGVjdHJ1bS91c2VyIChub3QgaC93KSAqLwotCXM4IG1pbl9wb3dlcjsJICAvKiBhbHdheXMgMCAqLwotCXM4IHNjYW5fcG93ZXI7CSAgLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwotCi0JdTggZ3JvdXBfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gZ3JvdXAxLzIvMy80LzUgKi8KLQl1OCBiYW5kX2luZGV4OwkgIC8qIDAtNCwgbWFwcyBjaGFubmVsIHRvIGJhbmQxLzIvMy80LzUgKi8KLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCi0JICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCi0JICogICByZW1lbWJlcmluZy9tb2RpZnlpbmcgZ2FpbiBzZXR0aW5ncyAoaW5kZXhlcykuICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHBvd2VyX2luZm9bSVdMNDk2NV9NQVhfUkFURV07Ci0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOwotfTsKLQotc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCB7Ci0JLyogbWF4aW11bSBwb3dlciBsZXZlbCB0byBwcmV2ZW50IGNsaXBwaW5nIGZvciBlYWNoIHJhdGUsIGRlcml2ZWQgYnkKLQkgKiAgIHVzIGZyb20gdGhpcyBiYW5kJ3Mgc2F0dXJhdGlvbiBwb3dlciBpbiBFRVBST00gKi8KLQljb25zdCBzOCBjbGlwX3Bvd2Vyc1tJV0xfTUFYX1JBVEVTXTsKLX07Ci0KLSNpbmNsdWRlICJpd2wtMzk0NS1ycy5oIgorI2luY2x1ZGUgIml3bC1hZ24tcnMuaCIKIAogI2RlZmluZSBJV0xfVFhfRklGT19BQzAJMAogI2RlZmluZSBJV0xfVFhfRklGT19BQzEJMQpAQCAtMjQ3LDMzICsxMTgsNiBAQAogLyogTWluaW11bSBudW1iZXIgb2YgcXVldWVzLiBNQVhfTlVNIGlzIGRlZmluZWQgaW4gaHcgc3BlY2lmaWMgZmlsZXMgKi8KICNkZWZpbmUgSVdMX01JTl9OVU1fUVVFVUVTCTQKIAotLyogUG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSBzdHJ1Y3R1cmVzICovCi0KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSB7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgY21kOwotCXU4IG5vX2R0aW07Ci19OwotI2RlZmluZSBJV0xfUE9XRVJfUkFOR0VfMCAgKDApCi0jZGVmaW5lIElXTF9QT1dFUl9SQU5HRV8xICAoMSkKLQotI2RlZmluZSBJV0xfUE9XRVJfTU9ERV9DQU0JMHgwMAkvKiBDb250aW51b3VzbHkgQXdhcmUgTW9kZSwgYWx3YXlzIG9uICovCi0jZGVmaW5lIElXTF9QT1dFUl9JTkRFWF8zCTB4MDMKLSNkZWZpbmUgSVdMX1BPV0VSX0lOREVYXzUJMHgwNQotI2RlZmluZSBJV0xfUE9XRVJfQUMJCTB4MDYKLSNkZWZpbmUgSVdMX1BPV0VSX0JBVFRFUlkJMHgwNwotI2RlZmluZSBJV0xfUE9XRVJfTElNSVQJCTB4MDcKLSNkZWZpbmUgSVdMX1BPV0VSX01BU0sJCTB4MEYKLSNkZWZpbmUgSVdMX1BPV0VSX0VOQUJMRUQJMHgxMAotI2RlZmluZSBJV0xfUE9XRVJfTEVWRUwoeCkJKCh4KSAmIElXTF9QT1dFUl9NQVNLKQotCi1zdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgewotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcHdyX3JhbmdlXzBbSVdMX1BPV0VSX0FDXTsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcHdyX3JhbmdlXzFbSVdMX1BPV0VSX0FDXTsKLQl1OCBhY3RpdmVfaW5kZXg7Ci0JdTMyIGR0aW1fdmFsOwotfTsKLQogI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4gICAgICAgICAgICAgIDIzMDQKICNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAgICAgICAgICAgICAzMAogI2RlZmluZSBJRUVFODAyMTFfSExFTiAgICAgICAgICAgICAgICAgIChJRUVFODAyMTFfNEFERFJfTEVOKQpAQCAtMjg5LDgxICsxMzMsMTAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi0jZGVmaW5lIFNFUV9UT19RVUVVRSh4KSAgKCh4ID4+IDgpICYgMHhiZikKLSNkZWZpbmUgUVVFVUVfVE9fU0VRKHgpICAoKHggJiAweGJmKSA8PCA4KQotI2RlZmluZSBTRVFfVE9fSU5ERVgoeCkgKCh1OCkoeCAmIDB4ZmYpKQotI2RlZmluZSBJTkRFWF9UT19TRVEoeCkgKCh1OCkoeCAmIDB4ZmYpKQotI2RlZmluZSBTRVFfSFVHRV9GUkFNRSAgKDB4NDAwMCkKLSNkZWZpbmUgU0VRX1JYX0ZSQU1FICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQogI2RlZmluZSBTRVFfVE9fU04oc2VxKSAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQogI2RlZmluZSBTTl9UT19TRVEoc3NuKSAoKChzc24pIDw8IDQpICYgSUVFRTgwMjExX1NDVExfU0VRKQogI2RlZmluZSBNQVhfU04gKChJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCiAKLWVudW0gewotCS8qIENNRF9TSVpFX05PUk1BTCA9IDAsICovCi0JQ01EX1NJWkVfSFVHRSA9ICgxIDw8IDApLAotCS8qIENNRF9TWU5DID0gMCwgKi8KLQlDTURfQVNZTkMgPSAoMSA8PCAxKSwKLQkvKiBDTURfTk9fU0tCID0gMCwgKi8KLQlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKLX07Ci0KLXN0cnVjdCBpd2wzOTQ1X2NtZDsKLXN0cnVjdCBpd2wzOTQ1X3ByaXY7Ci0KLXN0cnVjdCBpd2wzOTQ1X2NtZF9tZXRhIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSAqc291cmNlOwotCXVuaW9uIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJaW50ICgqY2FsbGJhY2spKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDM5NDVfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHU7Ci0KLQkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZAotCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KLQl1MzIgZmxhZ3M7Ci0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X2NtZAotICoKLSAqIEZvciBhbGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kIGFuZCB0eCBxdWV1ZXMsIHRoaXMgZXN0YWJsaXNoZXMgdGhlIG92ZXJhbGwKLSAqIHNpemUgb2YgdGhlIGxhcmdlc3QgY29tbWFuZCB3ZSBzZW5kIHRvIHVDb2RlLCBleGNlcHQgZm9yIGEgc2NhbiBjb21tYW5kCi0gKiAod2hpY2ggaXMgcmVsYXRpdmVseSBodWdlOyBzcGFjZSBpcyBhbGxvY2F0ZWQgc2VwYXJhdGVseSkuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfY21kX21ldGEgbWV0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfaGVhZGVyIGhkcjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgYWRkc3RhOwotCQlzdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIGxlZDsKLQkJdTMyIGZsYWdzOwotCQl1OCB2YWw4OwotCQl1MTYgdmFsMTY7Ci0JCXUzMiB2YWwzMjsKLQkJc3RydWN0IGl3bDM5NDVfYnRfY21kIGJ0OwotCQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kIHJ4b25fdGltZTsKLQkJc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgcG93ZXJ0YWJsZTsKLQkJc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kIHFvc3BhcmFtOwotCQlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgdHhfYmVhY29uOwotCQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCQl1OCAqaW5kaXJlY3Q7Ci0JCXU4IHBheWxvYWRbMzYwXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjbWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgewotCXU4IGlkOwotCXUxNiBsZW47Ci0Jc3RydWN0IGl3bDM5NDVfY21kX21ldGEgbWV0YTsKLQljb25zdCB2b2lkICpkYXRhOwotfTsKLQotI2RlZmluZSBURkRfTUFYX1BBWUxPQURfU0laRSAoc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX21ldGEpKQotCiAvKgogICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKICAqLwpAQCAtMzc0LDMzICsxNDcsNiBAQAogI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAogI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKIAotLyoqCi0gKiBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAtIFJ4IHF1ZXVlCi0gKiBAcHJvY2Vzc2VkOiBJbnRlcm5hbCBpbmRleCB0byBsYXN0IGhhbmRsZWQgUnggcGFja2V0Ci0gKiBAcmVhZDogU2hhcmVkIGluZGV4IHRvIG5ld2VzdCBhdmFpbGFibGUgUnggYnVmZmVyCi0gKiBAd3JpdGU6IFNoYXJlZCBpbmRleCB0byBvbGRlc3Qgd3JpdHRlbiBSeCBwYWNrZXQKLSAqIEBmcmVlX2NvdW50OiBOdW1iZXIgb2YgcHJlLWFsbG9jYXRlZCBidWZmZXJzIGluIHJ4X2ZyZWUKLSAqIEByeF9mcmVlOiBsaXN0IG9mIGZyZWUgU0tCcyBmb3IgdXNlCi0gKiBAcnhfdXNlZDogTGlzdCBvZiBSeCBidWZmZXJzIHdpdGggbm8gU0tCCi0gKiBAbmVlZF91cGRhdGU6IGZsYWcgdG8gaW5kaWNhdGUgd2UgbmVlZCB0byB1cGRhdGUgcmVhZC93cml0ZSBpbmRleAotICoKLSAqIE5PVEU6ICByeF9mcmVlIGFuZCByeF91c2VkIGFyZSB1c2VkIGFzIGEgRklGTyBmb3IgaXdsMzk0NV9yeF9tZW1fYnVmZmVycwotICovCi1zdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSB7Ci0JX19sZTMyICpiZDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgcG9vbFtSWF9RVUVVRV9TSVpFICsgUlhfRlJFRV9CVUZGRVJTXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpxdWV1ZVtSWF9RVUVVRV9TSVpFXTsKLQl1MzIgcHJvY2Vzc2VkOwotCXUzMiByZWFkOwotCXUzMiB3cml0ZTsKLQl1MzIgZnJlZV9jb3VudDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X2ZyZWU7Ci0Jc3RydWN0IGxpc3RfaGVhZCByeF91c2VkOwotCWludCBuZWVkX3VwZGF0ZTsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCiAjZGVmaW5lIElXTF9TVVBQT1JURURfUkFURVNfSUVfTEVOICAgICAgICAgOAogCiAjZGVmaW5lIFNDQU5fSU5URVJWQUwgMTAwCkBAIC00MzAsODcgKzE3Niw5IEBACiAjZGVmaW5lIElXTF9JTlZBTElEX1JBVEUgICAgIDB4RkYKICNkZWZpbmUgSVdMX0lOVkFMSURfVkFMVUUgICAgLTEKIAotc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgewotCXUxNiBzZXFfbnVtYmVyOwotfTsKLQotc3RydWN0IGl3bDM5NDVfaHdfa2V5IHsKLQllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKLQlpbnQga2V5bGVuOwotCXU4IGtleVszMl07Ci19OwotCi11bmlvbiBpd2wzOTQ1X2h0X3JhdGVfc3VwcCB7Ci0JdTE2IHJhdGVzOwotCXN0cnVjdCB7Ci0JCXU4IHNpc29fcmF0ZTsKLQkJdTggbWltb19yYXRlOwotCX07Ci19OwotCi11bmlvbiBpd2wzOTQ1X3Fvc19jYXBhYml0eSB7Ci0Jc3RydWN0IHsKLQkJdTggZWRjYV9jb3VudDo0OwkvKiBiaXQgMC0zICovCi0JCXU4IHFfYWNrOjE7CQkvKiBiaXQgNCAqLwotCQl1OCBxdWV1ZV9yZXF1ZXN0OjE7CS8qIGJpdCA1ICovCi0JCXU4IHR4b3BfcmVxdWVzdDoxOwkvKiBiaXQgNiAqLwotCQl1OCByZXNlcnZlZDoxOwkJLyogYml0IDcgKi8KLQl9IHFfQVA7Ci0Jc3RydWN0IHsKLQkJdTggYWN2b19BUFNEOjE7CQkvKiBiaXQgMCAqLwotCQl1OCBhY3ZpX0FQU0Q6MTsJCS8qIGJpdCAxICovCi0JCXU4IGFjX2JrX0FQU0Q6MTsJLyogYml0IDIgKi8KLQkJdTggYWNfYmVfQVBTRDoxOwkvKiBiaXQgMyAqLwotCQl1OCBxX2FjazoxOwkJLyogYml0IDQgKi8KLQkJdTggbWF4X2xlbjoyOwkJLyogYml0IDUtNiAqLwotCQl1OCBtb3JlX2RhdGFfYWNrOjE7CS8qIGJpdCA3ICovCi0JfSBxX1NUQTsKLQl1OCB2YWw7Ci19OwotCi0vKiBRb1Mgc3RydWN0dXJlcyAqLwotc3RydWN0IGl3bDM5NDVfcW9zX2luZm8gewotCWludCBxb3NfYWN0aXZlOwotCXVuaW9uIGl3bDM5NDVfcW9zX2NhcGFiaXR5IHFvc19jYXA7Ci0Jc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kIGRlZl9xb3NfcGFybTsKLX07Ci0KICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKIAotc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSB7Ci0Jc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBzdGE7Ci0Jc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgdGlkW01BWF9USURfQ09VTlRdOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXU4IHJhdGU7Ci0JCQl1OCBmbGFnczsKLQkJfSBzOwotCQl1MTYgcmF0ZV9uX2ZsYWdzOwotCX0gY3VycmVudF9yYXRlOwotCXU4IHVzZWQ7Ci0JdTggcHNfc3RhdHVzOwotCXN0cnVjdCBpd2wzOTQ1X2h3X2tleSBrZXlpbmZvOwotfTsKLQotLyogb25lIGZvciBlYWNoIHVDb2RlIGltYWdlIChpbnN0L2RhdGEsIGJvb3QvaW5pdC9ydW50aW1lKSAqLwotc3RydWN0IGZ3X2Rlc2MgewotCXZvaWQgKnZfYWRkcjsJCS8qIGFjY2VzcyBieSBkcml2ZXIgKi8KLQlkbWFfYWRkcl90IHBfYWRkcjsJLyogYWNjZXNzIGJ5IGNhcmQncyBidXNtYXN0ZXIgRE1BICovCi0JdTMyIGxlbjsJCS8qIGJ5dGVzICovCi19OwotCi0vKiB1Q29kZSBmaWxlIGxheW91dCAqLwotc3RydWN0IGl3bDM5NDVfdWNvZGUgewotCV9fbGUzMiB2ZXI7CQkvKiBtYWpvci9taW5vci9BUEkvc2VyaWFsICovCi0JX19sZTMyIGluc3Rfc2l6ZTsJLyogYnl0ZXMgb2YgcnVudGltZSBpbnN0cnVjdGlvbnMgKi8KLQlfX2xlMzIgZGF0YV9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGRhdGEgKi8KLQlfX2xlMzIgaW5pdF9zaXplOwkvKiBieXRlcyBvZiBpbml0aWFsaXphdGlvbiBpbnN0cnVjdGlvbnMgKi8KLQlfX2xlMzIgaW5pdF9kYXRhX3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGRhdGEgKi8KLQlfX2xlMzIgYm9vdF9zaXplOwkvKiBieXRlcyBvZiBib290c3RyYXAgaW5zdHJ1Y3Rpb25zICovCi0JdTggZGF0YVswXTsJCS8qIGRhdGEgaW4gc2FtZSBvcmRlciBhcyAic2l6ZSIgZWxlbWVudHMgKi8KLX07Ci0KIHN0cnVjdCBpd2wzOTQ1X2lic3Nfc2VxIHsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCXUxNiBzZXFfbnVtOwpAQCAtNTE5LDM0ICsxODcsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLS8qKgotICogc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8KLSAqIEBtYXhfdHhxX251bTogTWF4ICMgVHggcXVldWVzIHN1cHBvcnRlZAotICogQHR4X2NtZF9sZW46IFNpemUgb2YgVHggY29tbWFuZCAoYnV0IG5vdCBpbmNsdWRpbmcgZnJhbWUgaXRzZWxmKQotICogQHR4X2FudF9udW06IE51bWJlciBvZiBUWCBhbnRlbm5hcwotICogQG1heF9yeHFfc2l6ZTogTWF4ICMgUnggZnJhbWVzIGluIFJ4IHF1ZXVlIChtdXN0IGJlIHBvd2VyLW9mLTIpCi0gKiBAcnhfYnVmX3NpemU6Ci0gKiBAbWF4X3BrdF9zaXplOgotICogQG1heF9yeHFfbG9nOiBMb2ctYmFzZS0yIG9mIG1heF9yeHFfc2l6ZQotICogQG1heF9zdGF0aW9uczoKLSAqIEBiY2FzdF9zdGFfaWQ6Ci0gKiBAc2hhcmVkX3ZpcnQ6IFBvaW50ZXIgdG8gZHJpdmVyL3VDb2RlIHNoYXJlZCBUeCBCeXRlIENvdW50cyBhbmQgUnggc3RhdHVzCi0gKiBAc2hhcmVkX3BoeXM6IFBoeXNpY2FsIFBvaW50ZXIgdG8gVHggQnl0ZSBDb3VudHMgYW5kIFJ4IHN0YXR1cwotICovCi1zdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbyB7Ci0JdTE2IG1heF90eHFfbnVtOwotCXUxNiB0eF9jbWRfbGVuOwotCXUxNiB0eF9hbnRfbnVtOwotCXUxNiBtYXhfcnhxX3NpemU7Ci0JdTMyIHJ4X2J1Zl9zaXplOwotCXUzMiBtYXhfcGt0X3NpemU7Ci0JdTE2IG1heF9yeHFfbG9nOwotCXU4ICBtYXhfc3RhdGlvbnM7Ci0JdTggIGJjYXN0X3N0YV9pZDsKLQl2b2lkICpzaGFyZWRfdmlydDsKLQlkbWFfYWRkcl90IHNoYXJlZF9waHlzOwotfTsKLQogI2RlZmluZSBJV0xfUlhfSERSKHgpICgoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyICopKFwKIAkJICAgICAgIHgtPnUucnhfZnJhbWUuc3RhdHMucGF5bG9hZCArIFwKIAkJICAgICAgIHgtPnUucnhfZnJhbWUuc3RhdHMucGh5X2NvdW50KSkKQEAgLTU2NCw0MCArMjA0LDMwIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZDsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitleHRlcm4gaW50IGl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncyk7Ci1leHRlcm4gdTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQsCitleHRlcm4gdTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCwKIAkJCSAgaW50IGlzX2FwLCB1OCBmbGFncyk7Ci1leHRlcm4gaW50IGl3bDM5NDVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfZWVwcm9tX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfcnhfcXVldWVfYWxsb2Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSk7CitleHRlcm4gaW50IGl3bDM5NDVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogZXh0ZXJuIGludCBpd2wzOTQ1X2NhbGNfZGJfZnJvbV9yYXRpbyhpbnQgc2lnX3JhdGlvKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9jYWxjX3NpZ19xdWFsKGludCByc3NpX2RibSwgaW50IG5vaXNlX2RibSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxLCBpbnQgY291bnQsIHUzMiBpZCk7CitleHRlcm4gaW50IGl3bDM5NDVfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwgaW50IGNvdW50LCB1MzIgaWQpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGlkLCB1MTYgbGVuLAorZXh0ZXJuIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwKIAkJCSAgICBjb25zdCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsaW50IGxlZnQpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgdTMyIGRlY3J5cHRfcmVzLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7Ci1leHRlcm4gY29uc3QgdTggaXdsMzk0NV9icm9hZGNhc3RfYWRkcltFVEhfQUxFTl07CiAKIC8qCiAgKiBDdXJyZW50bHkgdXNlZCBieSBpd2wtMzk0NS1ycy4uLiBsb29rIGF0IHJlc3RydWN0dXJpbmcgc28gdGhhdCBpdCBkb2Vzbid0CiAgKiBjYWxsIHRoaXMuLi4gdG9kby4uLiBmaXggdGhhdC4KICovCi1leHRlcm4gdTggaXdsMzk0NV9zeW5jX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKK2V4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCQkgICB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MTYsMzYgKzI0NiwzNyBAQAogICogaXdsMzk0NV9tYWNfICAgICA8LS0gbWFjODAyMTEgY2FsbGJhY2sKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHZvaWQgKnRmZCwKLQkJCQkJZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkJICAgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbiwKKwkJCQkJICAgIHU4IHJlc2V0LCB1OCBwYWQpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gdW5zaWduZWQgaW50IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkgICAgIGludCBzdGFfaWQsIGludCB0eF9pZCk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgczggcG93ZXIpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4Yik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w0OTY1X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKioKICAqIGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uIC0gRmluZCBzdGF0aW9uIGlkIGZvciBhIGdpdmVuIEJTU0lECkBAIC02NTUsMzAyICsyODYsMjYgQEAKICAqIG5vdCB5ZXQgYmVlbiBtZXJnZWQgaW50byBhIHNpbmdsZSBjb21tb24gbGF5ZXIgZm9yIG1hbmFnaW5nIHRoZQogICogc3RhdGlvbiB0YWJsZXMuCiAgKi8KLWV4dGVybiB1OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOworZXh0ZXJuIHU4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkKTsKIAotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKIAogLyoKICAqIEZvcndhcmQgZGVjbGFyZSBpd2wtMzk0NS5jIGZ1bmN0aW9ucyBmb3IgaXdsLWJhc2UuYwogICovCi1leHRlcm4gX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsCitleHRlcm4gX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLAogCQkgdTE2IHR4X3JhdGUsIHU4IGZsYWdzKTsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICppd2wzOTQ1X2dldF9jaGFubmVsX2luZm8oCisJY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCitleHRlcm4gaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpOwogCi1lbnVtIHsKLQlNRUFTVVJFTUVOVF9SRUFEWSA9ICgxIDw8IDApLAotCU1FQVNVUkVNRU5UX0FDVElWRSA9ICgxIDw8IDEpLAotfTsKLQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9SRktJTEwKLXN0cnVjdCBpd2wzOTQ1X3ByaXY7Ci0KLXZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotdm9pZCBpd2wzOTQ1X3Jma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotaW50IGl3bDM5NDVfcmZraWxsX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfcmZraWxsX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLSNkZWZpbmUgSVdMX01BWF9OVU1fUVVFVUVTIElXTDM5X01BWF9OVU1fUVVFVUVTCi0KLXN0cnVjdCBpd2wzOTQ1X3ByaXYgewotCi0JLyogaWVlZSBkZXZpY2UgdXNlZCBieSBnZW5lcmljIGllZWUgcHJvY2Vzc2luZyBjb2RlICovCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICppZWVlX2NoYW5uZWxzOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqaWVlZV9yYXRlczsKLQlzdHJ1Y3QgaXdsXzM5NDVfY2ZnICpjZmc7IC8qIGRldmljZSBjb25maWd1cmF0aW9uICovCi0KLQkvKiB0ZW1wb3JhcnkgZnJhbWUgc3RvcmFnZSBsaXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBmcmVlX2ZyYW1lczsKLQlpbnQgZnJhbWVzX2NvdW50OwotCi0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBhbGxvY19yeGJfc2tiOwotCi0Jdm9pZCAoKnJ4X2hhbmRsZXJzW1JFUExZX01BWF0pKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4Yik7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKLQl1OCBtZWFzdXJlbWVudF9zdGF0dXM7Ci0jZW5kaWYKLQkvKiB1Y29kZSBiZWFjb24gdGltZSAqLwotCXUzMiB1Y29kZV9iZWFjb25fdGltZTsKLQotCS8qIHdlIGFsbG9jYXRlIGFycmF5IG9mIGl3bDM5NDVfY2hhbm5lbF9pbmZvIGZvciBOSUMncyB2YWxpZCBjaGFubmVscy4KLQkgKiAgICBBY2Nlc3MgdmlhIGNoYW5uZWwgIyB1c2luZyBpbmRpcmVjdCBpbmRleCBhcnJheSAqLwotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hhbm5lbF9pbmZvOwkvKiBjaGFubmVsIGluZm8gYXJyYXkgKi8KLQl1OCBjaGFubmVsX2NvdW50OwkvKiAjIG9mIGNoYW5uZWxzICovCi0KLQkvKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlIEVFUFJPTSBoYXMgYSBkZXJpdmVkCi0JICogY2xpcCBzZXR0aW5nIGZvciBlYWNoIHJhdGUuICovCi0JY29uc3Qgc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCBjbGlwX2dyb3Vwc1s1XTsKLQotCS8qIHRoZXJtYWwgY2FsaWJyYXRpb24gKi8KLQlzMzIgdGVtcGVyYXR1cmU7CS8qIGRlZ3JlZXMgS2VsdmluICovCi0JczMyIGxhc3RfdGVtcGVyYXR1cmU7Ci0KLQkvKiBTY2FuIHJlbGF0ZWQgdmFyaWFibGVzICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5famlmZmllczsKLQl1bnNpZ25lZCBsb25nIG5leHRfc2Nhbl9qaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydDsKLQl1bnNpZ25lZCBsb25nIHNjYW5fcGFzc19zdGFydDsKLQl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnRfdHNmOwotCWludCBzY2FuX2JhbmRzOwotCWludCBvbmVfZGlyZWN0X3NjYW47Ci0JdTggZGlyZWN0X3NzaWRfbGVuOwotCXU4IGRpcmVjdF9zc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCAqc2NhbjsKLQotCS8qIHNwaW5sb2NrICovCi0Jc3BpbmxvY2tfdCBsb2NrOwkvKiBwcm90ZWN0IGdlbmVyYWwgc2hhcmVkIGRhdGEgKi8KLQlzcGlubG9ja190IGhjbWRfbG9jazsJLyogcHJvdGVjdCBoY21kICovCi0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JLyogYmFzaWMgcGNpLW5ldHdvcmsgZHJpdmVyIHN0dWZmICovCi0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0KLQkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCi0Jdm9pZCBfX2lvbWVtICpod19iYXNlOwotCi0JLyogdUNvZGUgaW1hZ2VzLCBzYXZlIHRvIHJlbG9hZCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KLQl1MzIgdWNvZGVfdmVyOwkJCS8qIHVjb2RlIHZlcnNpb24sIGNvcHkgb2YKLQkJCQkJICAgaXdsMzk0NV91Y29kZS52ZXIgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9jb2RlOwkvKiBydW50aW1lIGluc3QgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9kYXRhOwkvKiBydW50aW1lIGRhdGEgb3JpZ2luYWwgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9kYXRhX2JhY2t1cDsJLyogcnVudGltZSBkYXRhIHNhdmUvcmVzdG9yZSAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2luaXQ7CS8qIGluaXRpYWxpemF0aW9uIGluc3QgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9pbml0X2RhdGE7CS8qIGluaXRpYWxpemF0aW9uIGRhdGEgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9ib290OwkvKiBib290c3RyYXAgaW5zdCAqLwotCi0KLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kIHJ4b25fdGltaW5nOwotCi0JLyogV2UgZGVjbGFyZSB0aGlzIGNvbnN0IHNvIGl0IGNhbiBvbmx5IGJlCi0JICogY2hhbmdlZCB2aWEgZXhwbGljaXQgY2FzdCB3aXRoaW4gdGhlCi0JICogcm91dGluZXMgdGhhdCBhY3R1YWxseSB1cGRhdGUgdGhlIHBoeXNpY2FsCi0JICogaGFyZHdhcmUgKi8KLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCBhY3RpdmVfcnhvbjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCBzdGFnaW5nX3J4b247Ci0KLQlpbnQgZXJyb3JfcmVjb3ZlcmluZzsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCByZWNvdmVyeV9yeG9uOwotCi0JLyogMXN0IHJlc3BvbnNlcyBmcm9tIGluaXRpYWxpemUgYW5kIHJ1bnRpbWUgdUNvZGUgaW1hZ2VzLgotCSAqIDQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwotCXN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZTsKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUwotCXN0cnVjdCBpd2wzOTQ1X2xlZCBsZWRbSVdMX0xFRF9UUkdfTUFYXTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfYmxpbmtfdGltZTsKLQl1OCBsYXN0X2JsaW5rX3JhdGU7Ci0JdTggYWxsb3dfYmxpbmtpbmc7Ci0JdW5zaWduZWQgaW50IHJ4dHhwYWNrZXRzOwotCXU2NCBsZWRfdHB0OwotI2VuZGlmCi0KLQotCXUxNiBhY3RpdmVfcmF0ZTsKLQl1MTYgYWN0aXZlX3JhdGVfYmFzaWM7Ci0KLQl1MzIgc3RhX3N1cHBfcmF0ZXM7Ci0KLQl1OCBjYWxsX3Bvc3RfYXNzb2NfZnJvbV9iZWFjb247Ci0JLyogUmF0ZSBzY2FsaW5nIGRhdGEgKi8KLQlzOCBkYXRhX3JldHJ5X2xpbWl0OwotCXU4IHJldHJ5X3JhdGU7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2NvbW1hbmRfcXVldWU7Ci0KLQlpbnQgYWN0aXZpdHlfdGltZXJfYWN0aXZlOwotCi0JLyogUnggYW5kIFR4IERNQSBwcm9jZXNzaW5nIHF1ZXVlcyAqLwotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIHJ4cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSB0eHFbSVdMX01BWF9OVU1fUVVFVUVTXTsKLQotCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwotCi0JaW50IGxhc3RfcnhfcnNzaTsJLyogRnJvbSBSeCBwYWNrZXQgc3RhdGlzaXRpY3MgKi8KLQlpbnQgbGFzdF9yeF9ub2lzZTsJLyogRnJvbSBiZWFjb24gc3RhdGlzdGljcyAqLwotCi0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfbWdyIHBvd2VyX2RhdGE7Ci0KLQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3M7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3N0YXRpc3RpY3NfdGltZTsKLQotCS8qIGNvbnRleHQgaW5mb3JtYXRpb24gKi8KLQl1MTYgcmF0ZXNfbWFzazsKLQotCXUzMiBwb3dlcl9tb2RlOwotCXUzMiBhbnRlbm5hOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1MTYgcnRzX3RocmVzaG9sZDsKLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0KLQkvKnN0YXRpb24gdGFibGUgdmFyaWFibGVzICovCi0Jc3BpbmxvY2tfdCBzdGFfbG9jazsKLQlpbnQgbnVtX3N0YXRpb25zOwotCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgc3RhdGlvbnNbSVdMX1NUQVRJT05fQ09VTlRdOwotCi0JLyogSW5kaWNhdGlvbiBpZiBpZWVlODAyMTFfb3BzLT5vcGVuIGhhcyBiZWVuIGNhbGxlZCAqLwotCXU4IGlzX29wZW47Ci0KLQl1OCBtYWM4MDIxMV9yZWdpc3RlcmVkOwotCi0JLyogUngnZCBwYWNrZXQgdGltaW5nIGluZm9ybWF0aW9uICovCi0JdTMyIGxhc3RfYmVhY29uX3RpbWU7Ci0JdTY0IGxhc3RfdHNmOwotCi0JLyogZWVwcm9tICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tIGVlcHJvbTsKLQotCWVudW0gbmw4MDIxMV9pZnR5cGUgaXdfbW9kZTsKLQotCXN0cnVjdCBza19idWZmICppYnNzX2JlYWNvbjsKLQotCS8qIExhc3QgUngnZCBiZWFjb24gdGltZXN0YW1wICovCi0JdTMyIHRpbWVzdGFtcDA7Ci0JdTMyIHRpbWVzdGFtcDE7Ci0JdTE2IGJlYWNvbl9pbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8gaHdfc2V0dGluZzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCi0JLyogQ3VycmVudCBhc3NvY2lhdGlvbiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uZmlndXJlIHRoZQotCSAqIGhhcmR3YXJlICovCi0JdTE2IGFzc29jX2lkOwotCXUxNiBhc3NvY19jYXBhYmlsaXR5OwotCXU4IHBzX21vZGU7Ci0KLQlzdHJ1Y3QgaXdsMzk0NV9xb3NfaW5mbyBxb3NfZGF0YTsKLQotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXA7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlc3RhcnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGNhbGlicmF0ZWRfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl9jb21wbGV0ZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJ4X3JlcGxlbmlzaDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmZfa2lsbDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWJvcnRfc2NhbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXBkYXRlX2xpbmtfbGVkOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhdXRoX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlcG9ydF93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X3NjYW47Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl91cGRhdGU7Ci0KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxX3Rhc2tsZXQ7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGFjdGl2aXR5X3RpbWVyOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGdhdGhlcl9zdGF0czsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7Ci0KLSNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgotCXM4IHVzZXJfdHhwb3dlcl9saW1pdDsKLQlzOCBtYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0OwotCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCS8qIGRlYnVnZ2luZyBpbmZvICovCi0JdTMyIGZyYW1lY250X3RvX3VzOwotCWF0b21pY190IHJlc3RyaWN0X3JlZmNudDsKLSNlbmRpZgotfTsJCQkJLyppd2wzOTQ1X3ByaXYgKi8KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIChwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfdmFsaWQoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQotewotCWlmIChjaF9pbmZvID09IE5VTEwpCi0JCXJldHVybiAwOwotCXJldHVybiAoY2hfaW5mby0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9WQUxJRCkgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9yYWRhcihjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JcmV0dXJuIChjaF9pbmZvLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGlzX2NoYW5uZWxfYV9iYW5kKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gY2hfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IGlzX2NoYW5uZWxfYmdfYmFuZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JcmV0dXJuIGNoX2luZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9wYXNzaXZlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2gpCi17Ci0JcmV0dXJuICghKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0FDVElWRSkpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfaWJzcyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoKQotewotCXJldHVybiAoKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKSA/IDEgOiAwOwotfQotCi1leHRlcm4gY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICppd2wzOTQ1X2dldF9jaGFubmVsX2luZm8oCi0JY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCk7Ci0KLWV4dGVybiBpbnQgaXdsMzk0NV9yc19uZXh0X3JhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHJhdGUpOwotCi0vKiBSZXF1aXJlcyBmdWxsIGRlY2xhcmF0aW9uIG9mIGl3bDM5NDVfcHJpdiBiZWZvcmUgaW5jbHVkaW5nICovCi0jaW5jbHVkZSAiaXdsLTM5NDUtaW8uaCIKKy8qIFJlcXVpcmVzIGZ1bGwgZGVjbGFyYXRpb24gb2YgaXdsX3ByaXYgYmVmb3JlIGluY2x1ZGluZyAqLworI2luY2x1ZGUgIml3bC1pby5oIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCA2NjQ5ZjdiLi5hNzFhNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODksNjQgKzg5LDQzIEBACiAjZGVmaW5lIExPTkdfU0xPVF9USU1FIDIwCiAKIC8qIFJTU0kgdG8gZEJtICovCi0jZGVmaW5lIElXTF9SU1NJX09GRlNFVAk0NAotCisjZGVmaW5lIElXTDQ5X1JTU0lfT0ZGU0VUCTQ0CiAKIAogLyogUENJIHJlZ2lzdGVycyAqLwogI2RlZmluZSBQQ0lfQ0ZHX1JFVFJZX1RJTUVPVVQJMHgwNDEKLSNkZWZpbmUgUENJX0NGR19QT1dFUl9TT1VSQ0UJMHgwQzgKLSNkZWZpbmUgUENJX1JFR19XVU04CQkweDBFOAotI2RlZmluZSBQQ0lfQ0ZHX0xJTktfQ1RSTAkweDBGMAogCiAvKiBQQ0kgcmVnaXN0ZXIgdmFsdWVzICovCiAjZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMFNfRU4JMHgwMQogI2RlZmluZSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4JMHgwMgotI2RlZmluZSBQQ0lfQ0ZHX0NNRF9SRUdfSU5UX0RJU19NU0sJMHgwNAotI2RlZmluZSBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCAgICAgICAgICgweDgwMDAwMDAwKQotCiAKICNkZWZpbmUgSVdMX05VTV9TQ0FOX1JBVEVTICAgICAgICAgKDIpCiAKICNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUkVUUlkgIDE1CiAKLSNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKLSNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKLSNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgVEZEX1RYX0NNRF9TTE9UUyAyNTYKLSNkZWZpbmUgVEZEX0NNRF9TTE9UUyAzMgotCi0vKgotICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKLSAqLwotI2RlZmluZSBSWF9GUkVFX0JVRkZFUlMgNjQKLSNkZWZpbmUgUlhfTE9XX1dBVEVSTUFSSyA4Ci0KLS8qIFNpemUgb2Ygb25lIFJ4IGJ1ZmZlciBpbiBob3N0IERSQU0gKi8KLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKIAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogNDk2NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwotI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKKyNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQJCSgweDAwMDAwMCkKICNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfVVBQRVJfQk9VTkQJCSgweDAxODAwMCkKIAotI2RlZmluZSBSVENfREFUQV9MT1dFUl9CT1VORAkJCSgweDgwMDAwMCkKKyNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKICNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgwQTAwMCkKIAotI2RlZmluZSBJV0w0OV9SVENfSU5TVF9TSVpFICAoSVdMNDlfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfU0laRSAgKElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDQ5X1JUQ19JTlNUX1NJWkUgIChJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNDlfUlRDX0RBVEFfU0laRSAgKElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDQ5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKQogCi0jZGVmaW5lIElXTF9NQVhfSU5TVF9TSVpFIElXTDQ5X1JUQ19JTlNUX1NJWkUKLSNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgSVdMNDlfUlRDX0RBVEFfU0laRQorI2RlZmluZSBJV0w0OV9NQVhfSU5TVF9TSVpFIElXTDQ5X1JUQ19JTlNUX1NJWkUKKyNkZWZpbmUgSVdMNDlfTUFYX0RBVEFfU0laRSBJV0w0OV9SVENfREFUQV9TSVpFCiAKIC8qIFNpemUgb2YgdUNvZGUgaW5zdHJ1Y3Rpb24gbWVtb3J5IGluIGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lICovCi0jZGVmaW5lIElXTF9NQVhfQlNNX1NJWkUgQlNNX1NSQU1fU0laRQorI2RlZmluZSBJV0w0OV9NQVhfQlNNX1NJWkUgQlNNX1NSQU1fU0laRQogCiBzdGF0aWMgaW5saW5lIGludCBpd2w0OTY1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyID49IFJUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgorCXJldHVybiAoYWRkciA+PSBJV0w0OV9SVENfREFUQV9MT1dFUl9CT1VORCkgJiYKIAkgICAgICAgKGFkZHIgPCBJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwppbmRleCA1YTcyYmMwLi5iZDAxNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTc2LDcgKzc2LDcgQEAKIAl1MzIgcmVnOwogCXUzMiB2YWw7CiAKLQlJV0xfREVCVUdfSU5GTygiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJlZ2luIHZlcmlmeSBic21cbiIpOwogCiAJLyogdmVyaWZ5IEJTTSBTUkFNIGNvbnRlbnRzICovCiAJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcpOwpAQCAtODUsNyArODUsNyBAQAogCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CiAJCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKIAkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAogCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKQEAgLTk0LDcgKzk0LDcgQEAKIAkJfQogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlNNIGJvb3RzdHJhcCB1Q29kZSBpbWFnZSBPS1xuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NCwxMiArMTQ0LDEyIEBACiAJdTMyIHJlZ19vZmZzZXQ7CiAJaW50IHJldDsKIAotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiBsb2FkIGJzbVxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJlZ2luIGxvYWQgYnNtXG4iKTsKIAogCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9SVDsKIAogCS8qIG1ha2Ugc3VyZSBib290c3RyYXAgcHJvZ3JhbSBpcyBubyBsYXJnZXIgdGhhbiBCU00ncyBTUkFNIHNpemUgKi8KLQlpZiAobGVuID4gSVdMX01BWF9CU01fU0laRSkKKwlpZiAobGVuID4gSVdMNDlfTUFYX0JTTV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgdGhlICJJbml0aWFsaXplIiB1Q29kZQpAQCAtMTg2LDcgKzE4Niw3IEBACiAKIAkvKiBUZWxsIEJTTSB0byBjb3B5IGZyb20gQlNNIFNSQU0gaW50byBpbnN0cnVjdGlvbiBTUkFNLCB3aGVuIGFza2VkICovCiAJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9TUkNfUkVHLCAweDApOwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRywgbGVuIC8gc2l6ZW9mKHUzMikpOwogCiAJLyogTG9hZCBib290c3RyYXAgY29kZSBpbnRvIGluc3RydWN0aW9uIFNSQU0gbm93LApAQCAtMjAxLDkgKzIwMSw5IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChpIDwgMTAwKQotCQlJV0xfREVCVUdfSU5GTygiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwogCWVsc2UgewotCQlJV0xfRVJST1IoIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjU3LDcgKzI1Nyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgcG9pbnRlcnMgYXJlIHNldC5cbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3OSw3ICsyNzksNyBAQAogCWlmIChwcml2LT5jYXJkX2FsaXZlX2luaXQuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTI4OSw3ICsyODksNyBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMjk5LDExICsyOTksMTEgQEAKIAkvKiBTZW5kIHBvaW50ZXJzIHRvIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgaW1hZ2UgLi4uIGluaXQgY29kZSB3aWxsCiAJICogbG9hZCBhbmQgbGF1bmNoIHJ1bnRpbWUgdUNvZGUsIHdoaWNoIHdpbGwgc2VuZCB1cyBhbm90aGVyICJBbGl2ZSIKIAkgKiBub3RpZmljYXRpb24uICovCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJaWYgKGl3bDQ5NjVfc2V0X3Vjb2RlX3B0cnMocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdvbid0IGhhcHBlbjsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQ291bGRuJ3Qgc2V0IHVwIHVDb2RlIHBvaW50ZXJzLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAlyZXR1cm47CkBAIC0zNTQsNyArMzU0LDcgQEAKIAlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkgewotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM4MSwyNyArMzgxLDIwIEBACiBzdGF0aWMgdm9pZCBpd2w0OTY1X25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHZhbDsKIAl1MTYgcmFkaW9fY2ZnOwotCXUxNiBsaW5rOworCXUxNiBsY3RsOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmICgocHJpdi0+cmV2X2lkICYgMHg4MCkgPT0gMHg4MCAmJiAocHJpdi0+cmV2X2lkICYgMHg3ZikgPCA4KSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfUkVHX1dVTTgsICZ2YWwpOwotCQkvKiBFbmFibGUgTm8gU25vb3AgZmllbGQgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfUkVHX1dVTTgsCi0JCQkJICAgICAgIHZhbCAmIH4oMSA8PCAxMSkpOwotCX0KKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ0ZHX0xJTktfQ1RSTCwgJmxpbmspOwotCi0JLyogTDEgaXMgZW5hYmxlZCBieSBCSU9TICovCi0JaWYgKChsaW5rICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pCi0JCS8qIGRpc2FibGUgTDBTIGRpc2FibGVkIEwxQSBlbmFibGVkICovCisJLyogSFcgYnVnIFcvQSAtIG5lZ2xpZ2libGUgcG93ZXIgY29uc3VtcHRpb24gKi8KKwkvKiBMMS1BU1BNIGlzIGVuYWJsZWQgYnkgQklPUyAqLworCWlmICgobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0gUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKQorCQkvKiBMMS1BU1BNIGVuYWJsZWQ6IGRpc2FibGUgTDBTICAqLwogCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAllbHNlCi0JCS8qIEwwUyBlbmFibGVkIEwxQSBkaXNhYmxlZCAqLworCQkvKiBMMS1BU1BNIGRpc2FibGVkOiBlbmFibGUgTDBTICovCiAJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAKIAlyYWRpb19jZmcgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1JBRElPX0NPTkZJRyk7CkBAIC00MzcsNyArNDMwLDcgQEAKIAkJCUNTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0lORk8oInN0b3AgbWFzdGVyXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAic3RvcCBtYXN0ZXJcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjMsOSArNTE2LDEwIEBACiAJCWNtZC5kaWZmX2dhaW5fYyA9IDA7CiAJCWlmIChpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCiAJCQkJIHNpemVvZihjbWQpLCAmY21kKSkKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkNvdWxkIG5vdCBzZW5kIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTURcbiIpOwogCQlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9BQ0NVTVVMQVRFOwotCQlJV0xfREVCVUdfQ0FMSUIoIlJ1biBjaGFpbl9ub2lzZV9jYWxpYnJhdGVcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIlJ1biBjaGFpbl9ub2lzZV9jYWxpYnJhdGVcbiIpOwogCX0KIH0KIApAQCAtNTU3LDcgKzU1MSw3IEBACiAJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gPSAwOwogCQl9CiAJfQotCUlXTF9ERUJVR19DQUxJQigiZGVsdGFfZ2Fpbl9jb2RlczogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJkZWx0YV9nYWluX2NvZGVzOiBhICVkIGIgJWQgYyAlZFxuIiwKIAkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMF0sCiAJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzFdLAogCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVsyXSk7CkBAIC01NzUsNyArNTY5LDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01ELAogCQkJCSAgICAgIHNpemVvZihjbWQpLCAmY21kKTsKIAkJaWYgKHJldCkKLQkJCUlXTF9ERUJVR19DQUxJQigiZmFpbCBzZW5kaW5nIGNtZCAiCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImZhaWwgc2VuZGluZyBjbWQgIgogCQkJCSAgICAgIlJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQgXG4iKTsKIAogCQkvKiBUT0RPIHdlIG1pZ2h0IHdhbnQgcmVjYWxjdWxhdGUKQEAgLTY2OCw3ICs2NjIsNyBAQAogCiAJdHhxLT5zY2hlZF9yZXRyeSA9IHNjZF9yZXRyeTsKIAotCUlXTF9ERUJVR19JTkZPKCIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJXMgJXMgUXVldWUgJWQgb24gQUMgJWRcbiIsCiAJCSAgICAgICBhY3RpdmUgPyAiQWN0aXZhdGUiIDogIkRlYWN0aXZhdGUiLAogCQkgICAgICAgc2NkX3JldHJ5ID8gIkJBIiA6ICJBQyIsIHR4cV9pZCwgdHhfZmlmb19pZCk7CiB9CkBAIC04MDQsOCArNzk4LDkgQEAKIAogCWlmICgocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gSVdMNDlfTlVNX1FVRVVFUykgfHwKIAkgICAgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w0OV9OVU1fUVVFVUVTKTsKKwkJSVdMX0VSUihwcml2LAorCQkJImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAorCQkJSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w0OV9OVU1fUVVFVUVTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MTMsNiArODA4LDcgQEAKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg0OV9UQ1NSX0NITkxfTlVNOwogCXByaXYtPmh3X3BhcmFtcy5zY2RfYmNfdGJsc19zaXplID0KIAkJCUlXTDQ5X05VTV9RVUVVRVMgKiBzaXplb2Yoc3RydWN0IGl3bDQ5NjVfc2NkX2JjX3RibCk7CisJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKIAlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNDk2NV9TVEFUSU9OX0NPVU5UOwogCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w0OTY1X0JST0FEQ0FTVF9JRDsKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDQ5X1JUQ19EQVRBX1NJWkU7CkBAIC04MjAsNiArODE2LDggQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gQlNNX1NSQU1fU0laRTsKIAlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7CiAKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOworCiAJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAyOwogCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gMjsKIAlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0EgfCBBTlRfQjsKQEAgLTkwMiw3ICs5MDAsNiBAQAogCSAgICBjaGFubmVsIDw9IENBTElCX0lXTF9UWF9BVFRFTl9HUjRfTENIKQogCQlyZXR1cm4gQ0FMSUJfQ0hfR1JPVVBfNDsKIAotCUlXTF9FUlJPUigiQ2FuJ3QgZmluZCB0eGF0dGVuIGdyb3VwIGZvciBjaGFubmVsICVkLlxuIiwgY2hhbm5lbCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC05NTYsNyArOTUzLDcgQEAKIAogCXMgPSBpd2w0OTY1X2dldF9zdWJfYmFuZChwcml2LCBjaGFubmVsKTsKIAlpZiAocyA+PSBFRVBST01fVFhfUE9XRVJfQkFORFMpIHsKLQkJSVdMX0VSUk9SKCJUeCBQb3dlciBjYW4gbm90IGZpbmQgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7CisJCUlXTF9FUlIocHJpdiwgIlR4IFBvd2VyIGNhbiBub3QgZmluZCBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtOTY0LDcgKzk2MSw3IEBACiAJY2hfaTIgPSBwcml2LT5jYWxpYl9pbmZvLT5iYW5kX2luZm9bc10uY2gyLmNoX251bTsKIAljaGFuX2luZm8tPmNoX251bSA9ICh1OCkgY2hhbm5lbDsKIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFubmVsICVkIHN1YmJhbmQgJWQgZmFjdG9yeSBjYWwgY2ggJWQgJiAlZFxuIiwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBzdWJiYW5kICVkIGZhY3RvcnkgY2FsIGNoICVkICYgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHMsIGNoX2kxLCBjaF9pMik7CiAKIAlmb3IgKGMgPSAwOyBjIDwgRUVQUk9NX1RYX1BPV0VSX1RYX0NIQUlOUzsgYysrKSB7CkBAIC05OTQsMTkgKzk5MSwxOSBAQAogCQkJCQkJCSAgIG0xLT5wYV9kZXQsIGNoX2kyLAogCQkJCQkJCSAgIG0yLT5wYV9kZXQpOwogCi0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCBBUDE9JWQgQVAyPSVkIEFQPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+YWN0dWFsX3BvdywgbTItPmFjdHVhbF9wb3csIG9tZWFzLT5hY3R1YWxfcG93KTsKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkIE5JMT0lZCBOSTI9JWQgTkk9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT5nYWluX2lkeCwgbTItPmdhaW5faWR4LCBvbWVhcy0+Z2Fpbl9pZHgpOwotCQkJSVdMX0RFQlVHX1RYUE9XRVIKLQkJCSAgICAoImNoYWluICVkIG1lYXMgJWQgUEExPSVkIFBBMj0lZCBQQT0lZFxuIiwgYywgbSwKLQkJCSAgICAgbTEtPnBhX2RldCwgbTItPnBhX2RldCwgb21lYXMtPnBhX2RldCk7Ci0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCAgVDE9JWQgIFQyPSVkICBUPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+dGVtcGVyYXR1cmUsIG0yLT50ZW1wZXJhdHVyZSwKLQkJCSAgICAgb21lYXMtPnRlbXBlcmF0dXJlKTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgQVAxPSVkIEFQMj0lZCBBUD0lZFxuIiwgYywgbSwKKwkJCQltMS0+YWN0dWFsX3BvdywgbTItPmFjdHVhbF9wb3csIG9tZWFzLT5hY3R1YWxfcG93KTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgTkkxPSVkIE5JMj0lZCBOST0lZFxuIiwgYywgbSwKKwkJCQltMS0+Z2Fpbl9pZHgsIG0yLT5nYWluX2lkeCwgb21lYXMtPmdhaW5faWR4KTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgUEExPSVkIFBBMj0lZCBQQT0lZFxuIiwgYywgbSwKKwkJCQltMS0+cGFfZGV0LCBtMi0+cGFfZGV0LCBvbWVhcy0+cGFfZGV0KTsKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsCisJCQkJImNoYWluICVkIG1lYXMgJWQgIFQxPSVkICBUMj0lZCAgVD0lZFxuIiwgYywgbSwKKwkJCQltMS0+dGVtcGVyYXR1cmUsIG0yLT50ZW1wZXJhdHVyZSwKKwkJCQlvbWVhcy0+dGVtcGVyYXR1cmUpOwogCQl9CiAJfQogCkBAIC0xMzAzLDEyICsxMzAwLDEyIEBACiAJczMyIGZhY3RvcnlfYWN0dWFsX3B3clsyXTsKIAlzMzIgcG93ZXJfaW5kZXg7CiAKLQkvKiB1c2VyX3R4cG93ZXJfbGltaXQgaXMgaW4gZEJtLCBjb252ZXJ0IHRvIGhhbGYtZEJtIChoYWxmLWRCIHVuaXRzCisJLyogdHhfcG93ZXJfdXNlcl9sbXQgaXMgaW4gZEJtLCBjb252ZXJ0IHRvIGhhbGYtZEJtIChoYWxmLWRCIHVuaXRzCiAJICogICBhcmUgdXNlZCBmb3IgaW5kZXhpbmcgaW50byB0eHBvd2VyIHRhYmxlKSAqLwogCXVzZXJfdGFyZ2V0X3Bvd2VyID0gMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10OwogCiAJLyogR2V0IGN1cnJlbnQgKFJYT04pIGNoYW5uZWwsIGJhbmQsIHdpZHRoICovCi0JSVdMX0RFQlVHX1RYUE9XRVIoImNoYW4gJWQgYmFuZCAlZCBpc19mYXQgJWRcbiIsIGNoYW5uZWwsIGJhbmQsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW4gJWQgYmFuZCAlZCBpc19mYXQgJWRcbiIsIGNoYW5uZWwsIGJhbmQsCiAJCQkgIGlzX2ZhdCk7CiAKIAljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7CkBAIC0xMzE5LDEwICsxMzE2LDEzIEBACiAJLyogZ2V0IHR4YXR0ZW4gZ3JvdXAsIHVzZWQgdG8gc2VsZWN0IDEpIHRoZXJtYWwgdHhwb3dlciBhZGp1c3RtZW50CiAJICogICBhbmQgMikgbWltbyB0eHBvd2VyIGJhbGFuY2UgYmV0d2VlbiBUeCBjaGFpbnMuICovCiAJdHhhdHRlbl9ncnAgPSBpd2w0OTY1X2dldF90eF9hdHRlbl9ncnAoY2hhbm5lbCk7Ci0JaWYgKHR4YXR0ZW5fZ3JwIDwgMCkKKwlpZiAodHhhdHRlbl9ncnAgPCAwKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbid0IGZpbmQgdHhhdHRlbiBncm91cCBmb3IgY2hhbm5lbCAlZC5cbiIsCisJCQkgIGNoYW5uZWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlJV0xfREVCVUdfVFhQT1dFUigiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW5uZWwgJWQgYmVsb25ncyB0byB0eGF0dGVuIGdyb3VwICVkXG4iLAogCQkJICBjaGFubmVsLCB0eGF0dGVuX2dycCk7CiAKIAlpZiAoaXNfZmF0KSB7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCXZvbHRhZ2VfY29tcGVuc2F0aW9uID0KIAkgICAgaXdsNDk2NV9nZXRfdm9sdGFnZV9jb21wZW5zYXRpb24odm9sdGFnZSwgaW5pdF92b2x0YWdlKTsKIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjdXJyIHZvbHQgJWQgZWVwcm9tIHZvbHQgJWQgdm9sdCBjb21wICVkXG4iLAorCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjdXJyIHZvbHQgJWQgZWVwcm9tIHZvbHQgJWQgdm9sdCBjb21wICVkXG4iLAogCQkJICBpbml0X3ZvbHRhZ2UsCiAJCQkgIHZvbHRhZ2UsIHZvbHRhZ2VfY29tcGVuc2F0aW9uKTsKIApAQCAtMTQwMywxMyArMTQwMywxMyBAQAogCQlmYWN0b3J5X2dhaW5faW5kZXhbY10gPSBtZWFzdXJlbWVudC0+Z2Fpbl9pZHg7CiAJCWZhY3RvcnlfYWN0dWFsX3B3cltjXSA9IG1lYXN1cmVtZW50LT5hY3R1YWxfcG93OwogCi0JCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFpbiA9ICVkXG4iLCBjKTsKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImZjdHJ5IHRtcCAlZCwgIgorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhaW4gPSAlZFxuIiwgYyk7CisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJmY3RyeSB0bXAgJWQsICIKIAkJCQkgICJjdXJyIHRtcCAlZCwgY29tcCAlZCBzdGVwc1xuIiwKIAkJCQkgIGZhY3RvcnlfdGVtcCwgY3VycmVudF90ZW1wLAogCQkJCSAgdGVtcGVyYXR1cmVfY29tcFtjXSk7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImZjdHJ5IGlkeCAlZCwgZmN0cnkgcHdyICVkXG4iLAorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiZmN0cnkgaWR4ICVkLCBmY3RyeSBwd3IgJWRcbiIsCiAJCQkJICBmYWN0b3J5X2dhaW5faW5kZXhbY10sCiAJCQkJICBmYWN0b3J5X2FjdHVhbF9wd3JbY10pOwogCX0KQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAJCWlmICh0YXJnZXRfcG93ZXIgPiBwb3dlcl9saW1pdCkKIAkJCXRhcmdldF9wb3dlciA9IHBvd2VyX2xpbWl0OwogCi0JCUlXTF9ERUJVR19UWFBPV0VSKCJyYXRlICVkIHNhdCAlZCByZWcgJWQgdXNyICVkIHRndCAlZFxuIiwKKwkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgInJhdGUgJWQgc2F0ICVkIHJlZyAlZCB1c3IgJWQgdGd0ICVkXG4iLAogCQkJCSAgaSwgc2F0dXJhdGlvbl9wb3dlciAtIGJhY2tfb2ZmX3RhYmxlW2ldLAogCQkJCSAgY3VycmVudF9yZWd1bGF0b3J5LCB1c2VyX3RhcmdldF9wb3dlciwKIAkJCQkgIHRhcmdldF9wb3dlcik7CkBAIC0xNDY2LDcgKzE0NjYsNyBAQAogCQkJCQkgICAgdm9sdGFnZV9jb21wZW5zYXRpb24gKwogCQkJCQkgICAgYXR0ZW5fdmFsdWUpOwogCi0vKgkJCUlXTF9ERUJVR19UWFBPV0VSKCJjYWxjdWxhdGVkIHR4cG93ZXIgaW5kZXggJWRcbiIsCisvKgkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjYWxjdWxhdGVkIHR4cG93ZXIgaW5kZXggJWRcbiIsCiAJCQkJCQlwb3dlcl9pbmRleCk7ICovCiAKIAkJCWlmIChwb3dlcl9pbmRleCA8IGdldF9taW5fcG93ZXJfaW5kZXgoaSwgYmFuZCkpCkBAIC0xNDgzLDEyICsxNDgzLDEyIEBACiAKIAkJCS8qIHN0YXkgd2l0aGluIHRoZSB0YWJsZSEgKi8KIAkJCWlmIChwb3dlcl9pbmRleCA+IDEwNykgewotCQkJCUlXTF9XQVJOSU5HKCJ0eHBvd2VyIGluZGV4ICVkID4gMTA3XG4iLAorCQkJCUlXTF9XQVJOKHByaXYsICJ0eHBvd2VyIGluZGV4ICVkID4gMTA3XG4iLAogCQkJCQkgICAgcG93ZXJfaW5kZXgpOwogCQkJCXBvd2VyX2luZGV4ID0gMTA3OwogCQkJfQogCQkJaWYgKHBvd2VyX2luZGV4IDwgMCkgewotCQkJCUlXTF9XQVJOSU5HKCJ0eHBvd2VyIGluZGV4ICVkIDwgMFxuIiwKKwkJCQlJV0xfV0FSTihwcml2LCAidHhwb3dlciBpbmRleCAlZCA8IDBcbiIsCiAJCQkJCSAgICBwb3dlcl9pbmRleCk7CiAJCQkJcG93ZXJfaW5kZXggPSAwOwogCQkJfQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAKIAkJCXR4X3Bvd2VyLnMuZHNwX3ByZWRpc19hdHRlbltjXSA9CiAJCQkJZ2Fpbl90YWJsZVtiYW5kXVtwb3dlcl9pbmRleF0uZHNwOwogCi0JCQlJV0xfREVCVUdfVFhQT1dFUigiY2hhaW4gJWQgbWltbyAlZCBpbmRleCAlZCAiCisJCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhaW4gJWQgbWltbyAlZCBpbmRleCAlZCAiCiAJCQkJCSAgImdhaW4gMHglMDJ4IGRzcCAlZFxuIiwKIAkJCQkJICBjLCBhdHRlbl92YWx1ZSwgcG93ZXJfaW5kZXgsCiAJCQkJCXR4X3Bvd2VyLnMucmFkaW9fdHhfZ2FpbltjXSwKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJCS8qIElmIHRoaXMgZ2V0cyBoaXQgYSBsb3QsIHN3aXRjaCBpdCB0byBhIEJVRygpIGFuZCBjYXRjaAogCQkgKiB0aGUgc3RhY2sgdHJhY2UgdG8gZmluZCBvdXQgd2hvIGlzIGNhbGxpbmcgdGhpcyBkdXJpbmcKIAkJICogYSBzY2FuLiAqLwotCQlJV0xfV0FSTklORygiVFggUG93ZXIgcmVxdWVzdGVkIHdoaWxlIHNjYW5uaW5nIVxuIik7CisJCUlXTF9XQVJOKHByaXYsICJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0xNTc0LDcgKzE1NzQsNyBAQAogCSAgICAgcnhvbjItPm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCiAJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYzMSw3ICsxNjMxLDcgQEAKIAlyYyA9IGl3bDQ5NjVfZmlsbF90eHBvd2VyX3RibChwcml2LCBiYW5kLCBjaGFubmVsLCBpc19mYXQsCiAJCQkJICAgICAgY3RybF9jaGFuX2hpZ2gsICZjbWQudHhfcG93ZXIpOwogCWlmIChyYykgewotCQlJV0xfREVCVUdfMTFIKCJlcnJvcjolZCAgZmlsbCB0eHBvd2VyX3RibFxuIiwgcmMpOworCQlJV0xfREVCVUdfMTFIKHByaXYsICJlcnJvcjolZCAgZmlsbCB0eHBvd2VyX3RibFxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0xNjk2LDEzICsxNjk2LDEzIEBACiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1RFTVBFUkFUVVJFLCAmcHJpdi0+c3RhdHVzKSAmJgogCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkgewotCQlJV0xfREVCVUdfVEVNUCgiUnVubmluZyBGQVQgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOworCQlJV0xfREVCVUdfVEVNUChwcml2LCAiUnVubmluZyBGQVQgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOwogCQlSMSA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IxWzFdKTsKIAkJUjIgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMlsxXSk7CiAJCVIzID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjNbMV0pOwogCQlSNCA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yNFsxXSk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX1RFTVAoIlJ1bm5pbmcgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOworCQlJV0xfREVCVUdfVEVNUChwcml2LCAiUnVubmluZyB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMF0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzBdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1swXSk7CkBAIC0xNzIyLDEwICsxNzIyLDEwIEBACiAJCXZ0ID0gc2lnbl9leHRlbmQoCiAJCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwudGVtcGVyYXR1cmUpLCAyMyk7CiAKLQlJV0xfREVCVUdfVEVNUCgiQ2FsaWIgdmFsdWVzIFJbMS0zXTogJWQgJWQgJWQgUjQ6ICVkXG4iLCBSMSwgUjIsIFIzLCB2dCk7CisJSVdMX0RFQlVHX1RFTVAocHJpdiwgIkNhbGliIHZhbHVlcyBSWzEtM106ICVkICVkICVkIFI0OiAlZFxuIiwgUjEsIFIyLCBSMywgdnQpOwogCiAJaWYgKFIzID09IFIxKSB7Ci0JCUlXTF9FUlJPUigiQ2FsaWJyYXRpb24gY29uZmxpY3QgUjEgPT0gUjNcbiIpOworCQlJV0xfRVJSKHByaXYsICJDYWxpYnJhdGlvbiBjb25mbGljdCBSMSA9PSBSM1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE3MzUsNyArMTczNSw3IEBACiAJdGVtcGVyYXR1cmUgLz0gKFIzIC0gUjEpOwogCXRlbXBlcmF0dXJlID0gKHRlbXBlcmF0dXJlICogOTcpIC8gMTAwICsgVEVNUEVSQVRVUkVfQ0FMSUJfS0VMVklOX09GRlNFVDsKIAotCUlXTF9ERUJVR19URU1QKCJDYWxpYnJhdGVkIHRlbXBlcmF0dXJlOiAlZEssICVkQ1xuIiwKKwlJV0xfREVCVUdfVEVNUChwcml2LCAiQ2FsaWJyYXRlZCB0ZW1wZXJhdHVyZTogJWRLLCAlZENcbiIsCiAJCQl0ZW1wZXJhdHVyZSwgS0VMVklOX1RPX0NFTFNJVVModGVtcGVyYXR1cmUpKTsKIAogCXJldHVybiB0ZW1wZXJhdHVyZTsKQEAgLTE3NTgsNyArMTc1OCw3IEBACiAJaW50IHRlbXBfZGlmZjsKIAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19URU1QKCJUZW1wZXJhdHVyZSBub3QgdXBkYXRlZCAtLSBubyBzdGF0aXN0aWNzLlxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSBub3QgdXBkYXRlZCAtLSBubyBzdGF0aXN0aWNzLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTc2NiwxOSArMTc2NiwxOSBAQAogCiAJLyogZ2V0IGFic29sdXRlIHZhbHVlICovCiAJaWYgKHRlbXBfZGlmZiA8IDApIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsIFxuIiwgdGVtcF9kaWZmKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsIFxuIiwgdGVtcF9kaWZmKTsKIAkJdGVtcF9kaWZmID0gLXRlbXBfZGlmZjsKIAl9IGVsc2UgaWYgKHRlbXBfZGlmZiA9PSAwKQotCQlJV0xfREVCVUdfUE9XRVIoIlNhbWUgdGVtcCwgXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTYW1lIHRlbXAsIFxuIik7CiAJZWxzZQotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgd2FybWVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgd2FybWVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOwogCiAJaWYgKHRlbXBfZGlmZiA8IElXTF9URU1QRVJBVFVSRV9USFJFU0hPTEQpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbm90IG5lZWRlZFxuIik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5vdCBuZWVkZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfUE9XRVIoIlRoZXJtYWwgdHhwb3dlciBjYWxpYiBuZWVkZWRcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5lZWRlZFxuIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE3OTMsMTIgKzE3OTMsMTIgQEAKIAogCWlmIChwcml2LT50ZW1wZXJhdHVyZSAhPSB0ZW1wKSB7CiAJCWlmIChwcml2LT50ZW1wZXJhdHVyZSkKLQkJCUlXTF9ERUJVR19URU1QKCJUZW1wZXJhdHVyZSBjaGFuZ2VkICIKKwkJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSBjaGFuZ2VkICIKIAkJCQkgICAgICAgImZyb20gJWRDIHRvICVkQ1xuIiwKIAkJCQkgICAgICAgS0VMVklOX1RPX0NFTFNJVVMocHJpdi0+dGVtcGVyYXR1cmUpLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wKSk7CiAJCWVsc2UKLQkJCUlXTF9ERUJVR19URU1QKCJUZW1wZXJhdHVyZSAiCisJCQlJV0xfREVCVUdfVEVNUChwcml2LCAiVGVtcGVyYXR1cmUgIgogCQkJCSAgICAgICAiaW5pdGlhbGl6ZWQgdG8gJWRDXG4iLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wKSk7CiAJfQpAQCAtMTgzNyw3ICsxODM3LDggQEAKIAogCWlmICgoSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CiAJICAgIChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgPD0gdHhxX2lkKSkgewotCQlJV0xfV0FSTklORygicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCisJCUlXTF9XQVJOKHByaXYsCisJCQkicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCiAJCQl0eHFfaWQsIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFLAogCQkJSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w0OV9OVU1fQU1QRFVfUVVFVUVTIC0gMSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTkwOCw3ICsxOTA5LDggQEAKIAogCWlmICgoSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CiAJICAgIChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgPD0gdHhxX2lkKSkgewotCQlJV0xfV0FSTklORygicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCisJCUlXTF9XQVJOKHByaXYsCisJCQkicXVldWUgbnVtYmVyIG91dCBvZiByYW5nZTogJWQsIG11c3QgYmUgJWQgdG8gJWRcbiIsCiAJCQl0eHFfaWQsIElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFLAogCQkJSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w0OV9OVU1fQU1QRFVfUVVFVUVTIC0gMSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTk4Niw4ICsxOTg4LDggQEAKIAlhZGRzdGEtPmFkZF9pbW1lZGlhdGVfYmFfdGlkID0gY21kLT5hZGRfaW1tZWRpYXRlX2JhX3RpZDsKIAlhZGRzdGEtPnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkID0gY21kLT5yZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKIAlhZGRzdGEtPmFkZF9pbW1lZGlhdGVfYmFfc3NuID0gY21kLT5hZGRfaW1tZWRpYXRlX2JhX3NzbjsKLQlhZGRzdGEtPnJlc2VydmVkMSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7Ci0JYWRkc3RhLT5yZXNlcnZlZDIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOworCWFkZHN0YS0+cmVzZXJ2ZWQxID0gY3B1X3RvX2xlMTYoMCk7CisJYWRkc3RhLT5yZXNlcnZlZDIgPSBjcHVfdG9fbGUzMigwKTsKIAogCXJldHVybiAodTE2KXNpemVvZihzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kKTsKIH0KQEAgLTIwMTMsNyArMjAxNSw3IEBACiAJaW50IGksIHNoLCBpZHg7CiAJdTE2IHNlcTsKIAlpZiAoYWdnLT53YWl0X2Zvcl9iYSkKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJnb3QgdHggcmVzcG9uc2Ugdy9vIGJsb2NrLWFja1xuIik7CisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOwogCiAJYWdnLT5mcmFtZV9jb3VudCA9IHR4X3Jlc3AtPmZyYW1lX2NvdW50OwogCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnRfaWR4OwpAQCAtMjAyNyw3ICsyMDI5LDcgQEAKIAkJaWR4ID0gc3RhcnRfaWR4OwogCiAJCS8qIEZJWE1FOiBjb2RlIHJlcGV0aXRpb24gKi8KLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LCBpZHgpOwogCiAJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHByaXYtPnR4cVt0eHFfaWRdLnR4YltpZHhdLnNrYlswXSk7CkBAIC0yMDM4LDkgKzIwNDAsOSBAQAogCQlpd2xfaHdyYXRlX3RvX3R4X2NvbnRyb2wocHJpdiwgcmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiBlbmQgKi8KIAotCQlJV0xfREVCVUdfVFhfUkVQTFkoIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICIxIEZyYW1lIDB4JXggZmFpbHVyZSA6JWRcbiIsCiAJCQkJICAgIHN0YXR1cyAmIDB4ZmYsIHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUpOwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIlJhdGUgSW5mbyByYXRlX25fZmxhZ3M9JXhcbiIsIHJhdGVfbl9mbGFncyk7CisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKIAogCQlhZ2ctPndhaXRfZm9yX2JhID0gMDsKIAl9IGVsc2UgewpAQCAtMjA2MCwyMSArMjA2MiwyMSBAQAogCQkJCSAgICAgIEFHR19UWF9TVEFURV9BQk9SVF9NU0spKQogCQkJCWNvbnRpbnVlOwogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIHR4cV9pZD0lZCBpZHg9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIHR4cV9pZD0lZCBpZHg9JWRcbiIsCiAJCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIHR4cV9pZCwgaWR4KTsKIAogCQkJaGRyID0gaXdsX3R4X3F1ZXVlX2dldF9oZHIocHJpdiwgdHhxX2lkLCBpZHgpOwogCiAJCQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwogCQkJaWYgKGlkeCAhPSAoU0VRX1RPX1NOKHNjKSAmIDB4ZmYpKSB7Ci0JCQkJSVdMX0VSUk9SKCJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCi0JCQkJCSAgIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKLQkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCi0JCQkJCSAgaGRyLT5zZXFfY3RybCk7CisJCQkJSVdMX0VSUihwcml2LAorCQkJCQkiQlVHX09OIGlkeCBkb2Vzbid0IG1hdGNoIHNlcSBjb250cm9sIgorCQkJCQkiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCQlpZHgsIFNFUV9UT19TTihzYyksIGhkci0+c2VxX2N0cmwpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJBR0cgRnJhbWUgaT0lZCBpZHggJWQgc2VxPSVkXG4iLAorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJBR0cgRnJhbWUgaT0lZCBpZHggJWQgc2VxPSVkXG4iLAogCQkJCQkgICBpLCBpZHgsIFNFUV9UT19TTihzYykpOwogCiAJCQlzaCA9IGlkeCAtIHN0YXJ0OwpAQCAtMjA5MiwxMyArMjA5NCwxMyBAQAogCQkJCXNoID0gMDsKIAkJCX0KIAkJCWJpdG1hcCB8PSAxVUxMIDw8IHNoOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJzdGFydD0lZCBiaXRtYXA9MHglbGx4XG4iLAorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJzdGFydD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCQkgICBzdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOwogCQl9CiAKIAkJYWdnLT5iaXRtYXAgPSBiaXRtYXA7CiAJCWFnZy0+c3RhcnRfaWR4ID0gc3RhcnQ7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lcyAlZCBzdGFydF9pZHg9JWQgYml0bWFwPTB4JWxseFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwKIAkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKIApAQCAtMjEyOSw3ICsyMTMxLDcgQEAKIAl1OCAqcWMgPSBOVUxMOwogCiAJaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKCZ0eHEtPnEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCisJCUlXTF9FUlIocHJpdiwgIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHFfaWQgKCVkKSBpbmRleCAlZCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkXG4iLCB0eHFfaWQsCiAJCQkgIGluZGV4LCB0eHEtPnEubl9iZCwgdHhxLT5xLndyaXRlX3B0ciwKIAkJCSAgdHhxLT5xLnJlYWRfcHRyKTsKQEAgLTIxNDcsNyArMjE0OSw3IEBACiAKIAlzdGFfaWQgPSBpd2xfZ2V0X3JhX3N0YV9pZChwcml2LCBoZHIpOwogCWlmICh0eHEtPnNjaGVkX3JldHJ5ICYmIHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkgewotCQlJV0xfRVJST1IoIlN0YXRpb24gbm90IGtub3duXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdGlvbiBub3Qga25vd25cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMTY3LDcgKzIxNjksNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gc2NkX3NzbiAiCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlJldHJ5IHNjaGVkdWxlciByZWNsYWltIHNjZF9zc24gIgogCQkJCQkgICAiJWQgaW5kZXggJWRcbiIsIHNjZF9zc24gLCBpbmRleCk7CiAJCQlmcmVlZCA9IGl3bF90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwogCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlIC09IGZyZWVkOwpAQCAtMjE5MCw3ICsyMTkyLDcgQEAKIAkJCQkJbGUzMl90b19jcHUodHhfcmVzcC0+cmF0ZV9uX2ZsYWdzKSwKIAkJCQkJaW5mbyk7CiAKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJUWFEgJWQgc3RhdHVzICVzICgweCUwOHgpICIKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUWFEgJWQgc3RhdHVzICVzICgweCUwOHgpICIKIAkJCQkgICAicmF0ZV9uX2ZsYWdzIDB4JXggcmV0cmllcyAlZFxuIiwKIAkJCQkgICB0eHFfaWQsCiAJCQkJICAgaXdsX2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCkBAIC0yMjEwLDcgKzIyMTIsNyBAQAogCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCB0eHFfaWQpOwogCiAJaWYgKGl3bF9jaGVja19iaXRzKHN0YXR1cywgVFhfQUJPUlRfUkVRVUlSRURfTVNLKSkKLQkJSVdMX0VSUk9SKCJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9jYWxjX3Jzc2koc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMjIzOCwxMyArMjI0MCwxMyBAQAogCQlpZiAodmFsaWRfYW50ZW5uYWUgJiAoMSA8PCBpKSkKIAkJCW1heF9yc3NpID0gbWF4KG5jcGh5LT5yc3NpX2luZm9baSA8PCAxXSwgbWF4X3Jzc2kpOwogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCiAJCW5jcGh5LT5yc3NpX2luZm9bMF0sIG5jcGh5LT5yc3NpX2luZm9bMl0sIG5jcGh5LT5yc3NpX2luZm9bNF0sCiAJCW1heF9yc3NpLCBhZ2MpOwogCiAJLyogZEJtID0gbWF4X3Jzc2kgZEIgLSBhZ2MgZEIgLSBjb25zdGFudC4KIAkgKiBIaWdoZXIgQUdDIChoaWdoZXIgcmFkaW8gZ2FpbikgbWVhbnMgbG93ZXIgc2lnbmFsLiAqLwotCXJldHVybiBtYXhfcnNzaSAtIGFnYyAtIElXTF9SU1NJX09GRlNFVDsKKwlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0w0OV9SU1NJX09GRlNFVDsKIH0KIAogCkBAIC0yMjg3LDYgKzIyODksOSBAQAogCS50eHFfc2V0X3NjaGVkID0gaXdsNDk2NV90eHFfc2V0X3NjaGVkLAogCS50eHFfYWdnX2VuYWJsZSA9IGl3bDQ5NjVfdHhxX2FnZ19lbmFibGUsCiAJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDQ5NjVfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNDk2NV9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNDk2NV9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5jYW5jZWxfZGVmZXJyZWRfd29yayA9IGl3bDQ5NjVfY2FuY2VsX2RlZmVycmVkX3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKaW5kZXggODJjMzg1OS4uMTVjYWM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY4LDEwICs2OCwxNiBAQAogI2lmbmRlZiBfX2l3bF81MDAwX2h3X2hfXwogI2RlZmluZSBfX2l3bF81MDAwX2h3X2hfXwogCisjZGVmaW5lIElXTDUwX1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCiAjZGVmaW5lIElXTDUwX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMjAwMDApCisKKyNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKICNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgwQzAwMCkKLSNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfU0laRSAoSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfU0laRSAoSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBSVENfREFUQV9MT1dFUl9CT1VORCkKKworI2RlZmluZSBJV0w1MF9SVENfSU5TVF9TSVpFIChJV0w1MF9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0w1MF9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNTBfUlRDX0RBVEFfU0laRSAoSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKIC8qIEVFUFJPTSAqLwogI2RlZmluZSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUJCQkyMDQ4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggNjZkMDUzZC4uMDhjMTliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDMsMTAgKzQzLDExIEBACiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKKyNpbmNsdWRlICJpd2wtNjAwMC1ody5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NQVggMQotI2RlZmluZSBJV0w1MTUwX1VDT0RFX0FQSV9NQVggMQorI2RlZmluZSBJV0w1MTUwX1VDT0RFX0FQSV9NQVggMgogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01JTiAxCkBAIC04NCw3ICs4NSw3IEBACiAJCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInN0b3AgbWFzdGVyXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA4LDcgKzEwOSw4IEBACiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBKTsKIAotCWl3bF9zZXRfYml0KHByaXYsIENTUl9BTkFfUExMX0NGRywgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMKTsKKwlpZiAocHJpdi0+Y2ZnLT5uZWVkX3BsbF9jZmcpCisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9BTkFfUExMX0NGRywgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMKTsKIAogCS8qIHNldCAiaW5pdGlhbGl6YXRpb24gY29tcGxldGUiIGJpdCB0byBtb3ZlIGFkYXB0ZXIKIAkgKiBEMFUqIC0tPiBEMEEqIHN0YXRlICovCkBAIC0xMTgsNyArMTIwLDcgQEAKIAlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkgewotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTc2LDcgKzE3OCw4IEBACiAKIAkvKiBGSVhNRTogcHV0IGhlcmUgTDFBIC1MMFMgdy9hICovCiAKLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CisJaWYgKHByaXYtPmNmZy0+bmVlZF9wbGxfY2ZnKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CiAKIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCiAJICogRDBVKiAtLT4gRDBBKiBzdGF0ZSAqLwpAQCAtMTg2LDcgKzE4OSw3IEBACiAJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTYsMTggKzIxOSwxOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHJhZGlvX2NmZzsKLQl1MTYgbGluazsKKwl1MTYgbGN0bDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ0ZHX0xJTktfQ1RSTCwgJmxpbmspOworCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCS8qIEwxIGlzIGVuYWJsZWQgYnkgQklPUyAqLwotCWlmICgobGluayAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0gUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKQotCQkvKiBkaXNhYmxlIEwwUyBkaXNhYmxlZCBMMUEgZW5hYmxlZCAqLworCS8qIEhXIGJ1ZyBXL0EgKi8KKwkvKiBMMS1BU1BNIGlzIGVuYWJsZWQgYnkgQklPUyAqLworCWlmICgobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0gUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKQorCQkvKiBMMS1BUFNNIGVuYWJsZWQ6IGRpc2FibGUgTDBTICAqLwogCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAllbHNlCi0JCS8qIEwwUyBlbmFibGVkIEwxQSBkaXNhYmxlZCAqLworCQkvKiBMMS1BU1BNIGRpc2FibGVkOiBlbmFibGUgTDBTICovCiAJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAKIAlyYWRpb19jZmcgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1JBRElPX0NPTkZJRyk7CkBAIC0yODksNyArMjkzLDcgQEAKIAkJb2Zmc2V0ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV81MDAwX0xJTktfT1RIRVJTKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJpbGxlZ2FsIGluZGlyZWN0IHR5cGU6IDB4JVhcbiIsCisJCUlXTF9FUlIocHJpdiwgImlsbGVnYWwgaW5kaXJlY3QgdHlwZTogMHglWFxuIiwKIAkJYWRkcmVzcyAmIElORElSRUNUX1RZUEVfTVNLKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzM4LDcgKzM0Miw3IEBACiAJCQlkYXRhLT5kZWx0YV9nYWluX2NvZGVbaV0gfD0gKDEgPDwgMik7CiAJfQogCi0JSVdMX0RFQlVHX0NBTElCKCJEZWx0YSBnYWluczogQU5UX0IgPSAlZCAgQU5UX0MgPSAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIkRlbHRhIGdhaW5zOiBBTlRfQiA9ICVkICBBTlRfQyA9ICVkXG4iLAogCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzFdLCBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMl0pOwogCiAJaWYgKCFkYXRhLT5yYWRpb193cml0ZSkgewpAQCAtMzg0LDEzICszODgsMTQgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01ELAogCQkJCQlzaXplb2YoY21kKSwgJmNtZCk7CiAJCWlmIChyZXQpCi0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTURcbiIpOworCQkJSVdMX0VSUihwcml2LAorCQkJCSJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKIAkJZGF0YS0+c3RhdGUgPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURTsKLQkJSVdMX0RFQlVHX0NBTElCKCJSdW4gY2hhaW5fbm9pc2VfY2FsaWJyYXRlXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJSdW4gY2hhaW5fbm9pc2VfY2FsaWJyYXRlXG4iKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKK3ZvaWQgaXdsNTAwMF9ydHNfdHhfY21kX2ZsYWcoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJX19sZTMyICp0eF9mbGFncykKIHsKIAlpZiAoKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHx8CkBAIC01MDcsNyArNTEyLDcgQEAKIAkJaW5kZXggPSBJV0xfQ0FMSUJfQkFTRV9CQU5EOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVua25vd24gY2FsaWJyYXRpb24gbm90aWZpY2F0aW9uICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGNhbGlicmF0aW9uIG5vdGlmaWNhdGlvbiAlZFxuIiwKIAkJCSAgaGRyLT5vcF9jb2RlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTUxNyw3ICs1MjIsNyBAQAogc3RhdGljIHZvaWQgaXdsNTAwMF9yeF9jYWxpYl9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0JSVdMX0RFQlVHX0lORk8oIkluaXQuIGNhbGlicmF0aW9uIGlzIGNvbXBsZXRlZCwgcmVzdGFydGluZyBmdy5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0LiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQsIHJlc3RhcnRpbmcgZncuXG4iKTsKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwogfQogCkBAIC01ODAsNDAgKzU4NSw0MSBAQAogewogCWludCByZXQgPSAwOwogCi0JcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24ocHJpdiwgaW5zdF9pbWFnZSwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHByaXYsIGluc3RfaW1hZ2UsCisJCQkJICAgSVdMNTBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlJV0xfREVCVUdfSU5GTygiSU5TVCB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIklOU1QgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOwogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKIAkJCQkJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUsIDUgKiBIWik7CiAJaWYgKHJldCA9PSAtRVJFU1RBUlRTWVMpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKIAkJCSJ0byBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlpZiAoIXJldCkgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb25cbiIpOworCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOwogCiAJcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24oCi0JCXByaXYsIGRhdGFfaW1hZ2UsIFJUQ19EQVRBX0xPV0VSX0JPVU5EKTsKKwkJcHJpdiwgZGF0YV9pbWFnZSwgSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlJV0xfREVCVUdfSU5GTygiREFUQSB1Q29kZSBzZWN0aW9uIGJlaW5nIGxvYWRlZC4uLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOwogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAogCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwogCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCiAJCQkidG8gaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgaWYgKCFyZXQpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgREFUQSB1Q29kZSBzZWN0aW9uXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0gZWxzZQogCQlyZXQgPSAwOwpAQCAtNjI5LDIwICs2MzUsMjAgQEAKIAogCS8qIGNoZWNrIHdoZXRoZXIgaW5pdCB1Y29kZSBzaG91bGQgYmUgbG9hZGVkLCBvciByYXRoZXIgcnVudGltZSB1Y29kZSAqLwogCWlmIChwcml2LT51Y29kZV9pbml0LmxlbiAmJiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9OT05FKSkgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdCB1Y29kZSBmb3VuZC4gTG9hZGluZyBpbml0IHVjb2RlLi4uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXQgdWNvZGUgZm91bmQuIExvYWRpbmcgaW5pdCB1Y29kZS4uLlxuIik7CiAJCXJldCA9IGl3bDUwMDBfbG9hZF9naXZlbl91Y29kZShwcml2LAogCQkJJnByaXYtPnVjb2RlX2luaXQsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwogCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXQgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwogCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX0lOSVQ7CiAJCX0KIAl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIG5vdCBmb3VuZCwgb3IgYWxyZWFkeSBsb2FkZWQuICIKIAkJCSJMb2FkaW5nIHJ1bnRpbWUgdWNvZGUuLi5cbiIpOwogCQlyZXQgPSBpd2w1MDAwX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKIAkJCSZwcml2LT51Y29kZV9jb2RlLCAmcHJpdi0+dWNvZGVfZGF0YSk7CiAJCWlmICghcmV0KSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Y29kZSBsb2FkIGNvbXBsZXRlLlxuIik7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Y29kZSBsb2FkIGNvbXBsZXRlLlxuIik7CiAJCQlwcml2LT51Y29kZV90eXBlID0gVUNPREVfUlQ7CiAJCX0KIAl9CkBAIC02NTgsNyArNjY0LDcgQEAKIAlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC02NjgsMTQgKzY3NCwxNSBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCWl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hbGl2ZV9ub3RpZnkocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfV0FSTklORygiQ291bGQgbm90IGNvbXBsZXRlIEFMSVZFIHRyYW5zaXRpb246ICVkXG4iLCByZXQpOworCQlJV0xfV0FSTihwcml2LAorCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNzEwLDcgKzcxNyw3IEBACiAKIAl0eHEtPnNjaGVkX3JldHJ5ID0gc2NkX3JldHJ5OwogCi0JSVdMX0RFQlVHX0lORk8oIiVzICVzIFF1ZXVlICVkIG9uIEFDICVkXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKIAkJICAgICAgIGFjdGl2ZSA/ICJBY3RpdmF0ZSIgOiAiRGVhY3RpdmF0ZSIsCiAJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKIH0KQEAgLTgyNCw4ICs4MzEsOSBAQAogewogCWlmICgocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gSVdMNTBfTlVNX1FVRVVFUykgfHwKIAkgICAgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w1MF9OVU1fUVVFVUVTKTsKKwkJSVdMX0VSUihwcml2LAorCQkJImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAorCQkJSVdMX01JTl9OVU1fUVVFVUVTLCBJV0w1MF9OVU1fUVVFVUVTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MzMsNjMgKzg0MSw0NyBAQAogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CiAJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQogCQkJSVdMNTBfTlVNX1FVRVVFUyAqIHNpemVvZihzdHJ1Y3QgaXdsNTAwMF9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7CiAJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOwotCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNTBfUlRDX0RBVEFfU0laRTsKLQlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDUwX1JUQ19JTlNUX1NJWkU7CisKKwlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDAwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzZ4NTA6CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNjBfUlRDX0RBVEFfU0laRTsKKwkJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w2MF9SVENfSU5TVF9TSVpFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDUwX1JUQ19EQVRBX1NJWkU7CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNTBfUlRDX0lOU1RfU0laRTsKKwl9CisKIAlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKIAlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKIAkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKIAlwcml2LT5od19wYXJhbXMuc2VucyA9ICZpd2w1MDAwX3NlbnNpdGl2aXR5OwogCi0Jc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAxOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDI7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQjsKLQkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IEFOVF9BQjsKLQkJYnJlYWs7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTE1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAxOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDI7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQTsKLQkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IEFOVF9BQjsKLQkJYnJlYWs7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzUwOgotCQlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IDM7Ci0JCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gMzsKLQkJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IEFOVF9BQkM7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUJDOwotCQlicmVhazsKLQl9CisJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfdHhfYW50KTsKKwlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IG51bV9vZl9hbnQocHJpdi0+Y2ZnLT52YWxpZF9yeF9hbnQpOworCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBwcml2LT5jZmctPnZhbGlkX3R4X2FudDsKKwlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF9yeF9hbnQ7CiAKIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJLyogNVgwMCBhbmQgNTM1MCB3YW50cyBpbiBDZWxzaXVzICovCi0JCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOwotCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgogCQkvKiA1MTUwIHdhbnRzIGluIEtlbHZpbiAqLwogCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPQogCQkJCWl3bDUxNTBfZ2V0X2N0X3RocmVzaG9sZChwcml2KTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogYWxsIG90aGVycyB3YW50IENlbHNpdXMgKi8KKwkJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0gQ1RfS0lMTF9USFJFU0hPTEQ7CisJCWJyZWFrOwogCX0KIAogCS8qIFNldCBpbml0aWFsIGNhbGlicmF0aW9uIHNldCAqLwogCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzUwOgotCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQotCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAotCQkJQklUKElXTF9DQUxJQl9MTykJCXwKLQkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAotCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8Ci0JCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7Ci0JCWJyZWFrOwogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxNTA6CiAJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyA9CiAJCQlCSVQoSVdMX0NBTElCX0RDKQkJfApAQCAtODk4LDYgKzg5MCwxNCBAQAogCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOwogCiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyA9CisJCQlCSVQoSVdMX0NBTElCX1hUQUwpCQl8CisJCQlCSVQoSVdMX0NBTElCX0xPKQkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUSkgCQl8CisJCQlCSVQoSVdMX0NBTElCX1RYX0lRX1BFUkQpCXwKKwkJCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKKwkJYnJlYWs7CiAJfQogCiAKQEAgLTEwMTEsNyArMTAxMSw4IEBACiAKIAlpZiAoKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAogCSAgICAoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w1MF9OVU1fQU1QRFVfUVVFVUVTIDw9IHR4cV9pZCkpIHsKLQkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAorCQlJV0xfV0FSTihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNzYsNyArMTA3Nyw4IEBACiAKIAlpZiAoKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAogCSAgICAoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgKyBJV0w1MF9OVU1fQU1QRFVfUVVFVUVTIDw9IHR4cV9pZCkpIHsKLQkJSVdMX1dBUk5JTkcoInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAorCQlJV0xfV0FSTihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDQsNyArMTEwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCit1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCiB7CiAJdTE2IHNpemUgPSAodTE2KXNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpOwogCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOwpAQCAtMTE0Miw3ICsxMTQ0LDcgQEAKIAl1MTYgc2VxOwogCiAJaWYgKGFnZy0+d2FpdF9mb3JfYmEpCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKIAogCWFnZy0+ZnJhbWVfY291bnQgPSB0eF9yZXNwLT5mcmFtZV9jb3VudDsKIAlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeDsKQEAgLTExNTYsNyArMTE1OCw3IEBACiAJCWlkeCA9IHN0YXJ0X2lkeDsKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uICovCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOwpAQCAtMTE2OCw5ICsxMTcwLDkgQEAKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0xMTkwLDIxICsxMTkyLDIyIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKKwkJCQkJIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKIAkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCiAJCQkJCSAgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0xMjIyLDEzICsxMjI1LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0xMjU0LDcgKzEyNTcsNyBAQAogCWludCBmcmVlZDsKIAogCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0xMjgxLDcgKzEyODQsNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gIgorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSAiCiAJCQkJCSJzY2Rfc3NuPSVkIGlkeD0lZCB0eHE9JWQgc3dxPSVkXG4iLAogCQkJCQlzY2Rfc3NuICwgaW5kZXgsIHR4cV9pZCwgdHhxLT5zd3FfaWQpOwogCkBAIC0xMzA4LDcgKzEzMTEsNyBAQAogCQkJCQlsZTMyX3RvX2NwdSh0eF9yZXNwLT5yYXRlX25fZmxhZ3MpLAogCQkJCQlpbmZvKTsKIAotCQlJV0xfREVCVUdfVFhfUkVQTFkoIlRYUSAlZCBzdGF0dXMgJXMgKDB4JTA4eCkgcmF0ZV9uX2ZsYWdzICIKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUWFEgJWQgc3RhdHVzICVzICgweCUwOHgpIHJhdGVfbl9mbGFncyAiCiAJCQkJICAgIjB4JXggcmV0cmllcyAlZFxuIiwKIAkJCQkgICB0eHFfaWQsCiAJCQkJICAgaXdsX2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCkBAIC0xMzI4LDExICsxMzMxLDExIEBACiAJCWl3bF90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CiAKIAlpZiAoaXdsX2NoZWNrX2JpdHMoc3RhdHVzLCBUWF9BQk9SVF9SRVFVSVJFRF9NU0spKQotCQlJV0xfRVJST1IoIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOworCQlJV0xfRVJSKHByaXYsICJUT0RPOiAgSW1wbGVtZW50IFR4IEFCT1JUIFJFUVVJUkVEISEhXG4iKTsKIH0KIAogLyogQ3VycmVudGx5IDUwMDAgaXMgdGhlIHN1cGVyc2V0IG9mIGV2ZXJ5dGhpbmcgKi8KLXN0YXRpYyB1MTYgaXdsNTAwMF9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbikKK3UxNiBpd2w1MDAwX2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQogewogCXJldHVybiBsZW47CiB9CkBAIC0xMzU2LDcgKzEzNTksNyBAQAogCiBzdGF0aWMgaW50IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKLQlyZXR1cm4gKGFkZHIgPj0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCisJcmV0dXJuIChhZGRyID49IElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgogCQkoYWRkciA8IElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIApAQCAtMTM3OSw3ICsxMzgyLDcgQEAKIAkgICAgKHJ4b24xLT5hY3F1aXNpdGlvbl9kYXRhID09IHJ4b24yLT5hY3F1aXNpdGlvbl9kYXRhKSAmJgogCSAgICAocnhvbjEtPnJ4X2NoYWluID09IHJ4b24yLT5yeF9jaGFpbikgJiYKIAkgICAgKHJ4b24xLT5vZmRtX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5vZmRtX2Jhc2ljX3JhdGVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiVXNpbmcgY3VycmVudCBSWE9OX0FTU09DLiAgTm90IHJlc2VuZGluZy5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVXNpbmcgY3VycmVudCBSWE9OX0FTU09DLiAgTm90IHJlc2VuZGluZy5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0MDksMTIgKzE0MTIsMTkgQEAKIHN0YXRpYyBpbnQgIGl3bDUwMDBfc2VuZF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDUwMDBfdHhfcG93ZXJfZGJtX2NtZCB0eF9wb3dlcl9jbWQ7CisJdTggdHhfYW50X2NmZ19jbWQ7CiAKIAkvKiBoYWxmIGRCbSBuZWVkIHRvIG11bHRpcGx5ICovCiAJdHhfcG93ZXJfY21kLmdsb2JhbF9sbXQgPSAoczgpKDIgKiBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CiAJdHhfcG93ZXJfY21kLmZsYWdzID0gSVdMNTBfVFhfUE9XRVJfTk9fQ0xPU0VEOwogCXR4X3Bvd2VyX2NtZC5zcnZfY2hhbl9sbXQgPSBJV0w1MF9UWF9QT1dFUl9BVVRPOwotCXJldHVybiAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9UWF9QT1dFUl9EQk1fQ01ELAorCisJaWYgKElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSA9PSAxKQorCQl0eF9hbnRfY2ZnX2NtZCA9IFJFUExZX1RYX1BPV0VSX0RCTV9DTURfVjE7CisJZWxzZQorCQl0eF9hbnRfY2ZnX2NtZCA9IFJFUExZX1RYX1BPV0VSX0RCTV9DTUQ7CisKKwlyZXR1cm4gIGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgdHhfYW50X2NmZ19jbWQsCiAJCQkJICAgICAgIHNpemVvZih0eF9wb3dlcl9jbWQpLCAmdHhfcG93ZXJfY21kLAogCQkJCSAgICAgICBOVUxMKTsKIH0KQEAgLTE0MjYsNyArMTQzNiw3IEBACiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwotc3RhdGljIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitpbnQgaXdsNTAwMF9jYWxjX3Jzc2koc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnJ4X3Jlc3ApCiB7CiAJLyogZGF0YSBmcm9tIFBIWS9EU1AgcmVnYXJkaW5nIHNpZ25hbCBzdHJlbmd0aCwgZXRjLiwKQEAgLTE0NTUsMTkgKzE0NjUsMTkgQEAKIAltYXhfcnNzaSA9IG1heF90KHUzMiwgcnNzaV9hLCByc3NpX2IpOwogCW1heF9yc3NpID0gbWF4X3QodTMyLCBtYXhfcnNzaSwgcnNzaV9jKTsKIAotCUlXTF9ERUJVR19TVEFUUygiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAogCQlyc3NpX2EsIHJzc2lfYiwgcnNzaV9jLCBtYXhfcnNzaSwgYWdjKTsKIAogCS8qIGRCbSA9IG1heF9yc3NpIGRCIC0gYWdjIGRCIC0gY29uc3RhbnQuCiAJICogSGlnaGVyIEFHQyAoaGlnaGVyIHJhZGlvIGdhaW4pIG1lYW5zIGxvd2VyIHNpZ25hbC4gKi8KLQlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZCA9IHsKK3N0cnVjdCBpd2xfaGNtZF9vcHMgaXdsNTAwMF9oY21kID0gewogCS5yeG9uX2Fzc29jID0gaXdsNTAwMF9zZW5kX3J4b25fYXNzb2MsCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w1MDAwX2hjbWRfdXRpbHMgPSB7CitzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlscyA9IHsKIAkuZ2V0X2hjbWRfc2l6ZSA9IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSwKIAkuYnVpbGRfYWRkc3RhX2hjbWQgPSBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kLAogCS5nYWluX2NvbXB1dGF0aW9uID0gaXdsNTAwMF9nYWluX2NvbXB1dGF0aW9uLApAQCAtMTQ3NiwxMyArMTQ4NiwxNiBAQAogCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNTAwMF9saWIgPSB7CitzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNTAwMF9saWIgPSB7CiAJLnNldF9od19wYXJhbXMgPSBpd2w1MDAwX2h3X3NldF9od19wYXJhbXMsCiAJLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKIAkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bDUwMDBfdHhxX3NldF9zY2hlZCwKIAkudHhxX2FnZ19lbmFibGUgPSBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlLAogCS50eHFfYWdnX2Rpc2FibGUgPSBpd2w1MDAwX3R4cV9hZ2dfZGlzYWJsZSwKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKKwkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bDUwMDBfcnhfaGFuZGxlcl9zZXR1cCwKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bDUwMDBfc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKQEAgLTE1MTcsMTMgKzE1MzAsMTMgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0geworc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CiAJLmxpYiA9ICZpd2w1MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCiAJLnV0aWxzID0gJml3bDUwMDBfaGNtZF91dGlscywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtcyA9IHsKK3N0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zID0gewogCS5udW1fb2ZfcXVldWVzID0gSVdMNTBfTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTDUwX05VTV9BTVBEVV9RVUVVRVMsCiAJLmFtc2R1X3NpemVfOEsgPSAxLApAQCAtMTU0Myw2ICsxNTU2LDkgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKIAkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUJDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUJDLAorCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ19jZmcgPSB7CkBAIC0xNTU2LDYgKzE1NzIsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmcgPSB7CkBAIC0xNTY5LDYgKzE1ODgsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Fnbl9jZmcgPSB7CkBAIC0xNTgyLDYgKzE2MDQsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzUwX2Fnbl9jZmcgPSB7CkBAIC0xNTk1LDYgKzE2MjAsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTA1MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmcgPSB7CkBAIC0xNjA4LDYgKzE2MzYsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTA1MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBNT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWNvcmUuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCmluZGV4IDZmNDYzNTUuLjkwMTg1NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTgsNDcgKzU4LDI0IEBACiAgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9faXdsXzM5NDVfZGV2X2hfXwotI2RlZmluZSBfX2l3bF8zOTQ1X2Rldl9oX18KLQotI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCi0JLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsICAuZGV2aWNlID0gKGRldiksIFwKLQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IChzdWJkZXYpLCBcCi0JLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQotCi0jZGVmaW5lIElXTF9TS1VfRyAgICAgICAweDEKLSNkZWZpbmUgSVdMX1NLVV9BICAgICAgIDB4MgotCi0vKioKLSAqIHN0cnVjdCBpd2xfMzk0NV9jZmcKLSAqIEBmd19uYW1lX3ByZTogRmlybXdhcmUgZmlsZW5hbWUgcHJlZml4LiBUaGUgYXBpIHZlcnNpb24gYW5kIGV4dGVuc2lvbgotICogCSgudWNvZGUpIHdpbGwgYmUgYWRkZWQgdG8gZmlsZW5hbWUgYmVmb3JlIGxvYWRpbmcgZnJvbSBkaXNrLiBUaGUKLSAqIAlmaWxlbmFtZSBpcyBjb25zdHJ1Y3RlZCBhcyBmd19uYW1lX3ByZTxhcGk+LnVjb2RlLgotICogQHVjb2RlX2FwaV9tYXg6IEhpZ2hlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqIEB1Y29kZV9hcGlfbWluOiBMb3dlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqCi0gKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCi0gKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCi0gKiBoaWdoZXN0IGFuZCBAdWNvZGVfYXBpX21pbiB0aGUgbG93ZXN0KS4gRmlybXdhcmUgd2lsbCBvbmx5IGJlIGxvYWRlZCBpZgotICogaXQgaGFzIGEgc3VwcG9ydGVkIEFQSSB2ZXJzaW9uLiBUaGUgZmlybXdhcmUncyBBUEkgdmVyc2lvbiB3aWxsIGJlCi0gKiBzdG9yZWQgaW4gQGl3bF9wcml2LCBlbmFibGluZyB0aGUgZHJpdmVyIHRvIG1ha2UgcnVudGltZSBjaGFuZ2VzIGJhc2VkCi0gKiBvbiBmaXJtd2FyZSB2ZXJzaW9uIHVzZWQuCi0gKgotICogRm9yIGV4YW1wbGUsCi0gKiBpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKLSAqIAlEcml2ZXIgaW50ZXJhY3RzIHdpdGggRmlybXdhcmUgQVBJIHZlcnNpb24gPj0gMi4KLSAqIH0gZWxzZSB7Ci0gKiAJRHJpdmVyIGludGVyYWN0cyB3aXRoIEZpcm13YXJlIEFQSSB2ZXJzaW9uIDEuCi0gKiB9CisvKgorICogUGxlYXNlIHVzZSB0aGlzIGZpbGUgKGl3bC02MDAwLWh3LmgpIG9ubHkgZm9yIGhhcmR3YXJlLXJlbGF0ZWQgZGVmaW5pdGlvbnMuCisgKiBVc2UgaXdsLTUwMDAtY29tbWFuZHMuaCBmb3IgdUNvZGUgQVBJIGRlZmluaXRpb25zLgogICovCi1zdHJ1Y3QgaXdsXzM5NDVfY2ZnIHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKmZ3X25hbWVfcHJlOwotCWNvbnN0IHVuc2lnbmVkIGludCB1Y29kZV9hcGlfbWF4OwotCWNvbnN0IHVuc2lnbmVkIGludCB1Y29kZV9hcGlfbWluOwotCXVuc2lnbmVkIGludCBza3U7Ci19OwogCi0jZW5kaWYgLyogX19pd2xfZGV2X2hfXyAqLworI2lmbmRlZiBfX2l3bF82MDAwX2h3X2hfXworI2RlZmluZSBfX2l3bF82MDAwX2h3X2hfXworCisjZGVmaW5lIElXTDYwX1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCisjZGVmaW5lIElXTDYwX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwNDAwMDApCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX0xPV0VSX0JPVU5ECQkoMHg4MDAwMDApCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX1VQUEVSX0JPVU5ECQkoMHg4MTQwMDApCisjZGVmaW5lIElXTDYwX1JUQ19JTlNUX1NJWkUgXAorCShJV0w2MF9SVENfSU5TVF9VUFBFUl9CT1VORCAtIElXTDYwX1JUQ19JTlNUX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w2MF9SVENfREFUQV9TSVpFIFwKKwkoSVdMNjBfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBJV0w2MF9SVENfREFUQV9MT1dFUl9CT1VORCkKKworI2VuZGlmIC8qIF9faXdsXzYwMDBfaHdfaF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZhNWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC0wLDAgKzEsMTU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDgtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWlvLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKKworLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgSVdMNjAwMF9VQ09ERV9BUElfTUFYIDIKKyNkZWZpbmUgSVdMNjA1MF9VQ09ERV9BUElfTUFYIDIKKworLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4gMQorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4gMQorCisjZGVmaW5lIElXTDYwMDBfRldfUFJFICJpd2x3aWZpLTYwMDAtIgorI2RlZmluZSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCisjZGVmaW5lIElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKworI2RlZmluZSBJV0w2MDUwX0ZXX1BSRSAiaXdsd2lmaS02MDUwLSIKKyNkZWZpbmUgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjA1MF9GV19QUkUgI2FwaSAiLnVjb2RlIgorI2RlZmluZSBJV0w2MDUwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w2MDUwX01PRFVMRV9GSVJNV0FSRShhcGkpCisKK3N0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDYwMDBfaGNtZF91dGlscyA9IHsKKwkuZ2V0X2hjbWRfc2l6ZSA9IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSwKKwkuYnVpbGRfYWRkc3RhX2hjbWQgPSBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kLAorCS5ydHNfdHhfY21kX2ZsYWcgPSBpd2w1MDAwX3J0c190eF9jbWRfZmxhZywKKwkuY2FsY19yc3NpID0gaXdsNTAwMF9jYWxjX3Jzc2ksCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7CisJLmxpYiA9ICZpd2w1MDAwX2xpYiwKKwkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCisJLnV0aWxzID0gJml3bDYwMDBfaGNtZF91dGlscywKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUciLAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAorCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnbl9jZmcgPSB7CisJLm5hbWUgPSAiNjAwMCBTZXJpZXMgMngyIEFHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmcgPSB7CisJLm5hbWUgPSAiNjA1MCBTZXJpZXMgMngyIEFHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmcgPSB7CisJLm5hbWUgPSAiNjAwMCBTZXJpZXMgM3gzIEFHTiIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCisJLmVlcHJvbV9zaXplID0gSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAorCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8zYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDUwIFNlcmllcyAzeDMgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCit9OworCitNT0RVTEVfRklSTVdBUkUoSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNjAwMF9VQ09ERV9BUElfTUFYKSk7CitNT0RVTEVfRklSTVdBUkUoSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoSVdMNjA1MF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQtY2hlY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxMzdlZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHUEwgTElDRU5TRSBTVU1NQVJZCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKLSAqIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgIml3bC1kZXYuaCIKLSNpbmNsdWRlICJpd2wtZGVidWcuaCIKLSNpbmNsdWRlICJpd2wtY29tbWFuZHMuaCIKLQotCi0vKioKLSAqIGl3bF9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCi0gKgotICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKLSAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKLSAqIG1ha2luZyBjaGFuZ2VzCi0gKi8KLWludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24pCi17Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgY291bnRlciA9IDE7Ci0KLQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJgotCQkJCShSWE9OX0ZMR19UR0pfTkFSUk9XX0JBTkRfTVNLIHwKLQkJCQkgUlhPTl9GTEdfUkFEQVJfREVURUNUX01TSykpOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgMjRHIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9IGVsc2UgewotCQllcnJvciB8PSAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPwotCQkJCTAgOiBsZTMyX3RvX2NwdShSWE9OX0ZMR19TSE9SVF9TTE9UX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBDQ0sgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfQotCWVycm9yIHw9IChyeG9uLT5ub2RlX2FkZHJbMF0gfCByeG9uLT5ic3NpZF9hZGRyWzBdKSAmIDB4MTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBtYWMgYWRkciAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwotCWVycm9yIHw9ICgoKHJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV82TV9NQVNLKSA9PSAwKSAmJgotCQkgICgocnhvbi0+Y2NrX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfMU1fTUFTSykgPT0gMCkpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGJhc2ljIHJhdGUgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAobGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpID4gMjAwNyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYXNzb2MgaWQgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLIGFuZCBzaG9ydCBzbG90ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgJiBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfAotCQkJUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBUR0cgYW5kIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJUdW5pbmcgdG8gY2hhbm5lbCAlZFxuIiwKLQkJCSAgICBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0KLQlpZiAoZXJyb3IpIHsKLQkJSVdMX0VSUk9SKCJOb3QgYSB2YWxpZCBpd2w0OTY1X3J4b25fYXNzb2NfY21kIGZpZWxkIHZhbHVlc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggMjdmNTA0Ny4uY2FiNzg0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDksNiArNDksOCBAQAogI2RlZmluZSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USAkJNgkvKiBtaW4gZmFpbHVyZXMgdG8gY2FsYyB0cHQgKi8KICNkZWZpbmUgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgJCTgJLyogbWluIHN1Y2Nlc3NlcyB0byBjYWxjIHRwdCAqLwogCisvKiBtYXggYWxsb3dlZCByYXRlIG1pc3MgYmVmb3JlIHN5bmMgTFEgY21kICovCisjZGVmaW5lIElXTF9NSVNTRURfUkFURV9NQVgJCTE1CiAvKiBtYXggdGltZSB0byBhY2N1bSBoaXN0b3J5IDIgc2Vjb25kcyAqLwogI2RlZmluZSBJV0xfUkFURV9TQ0FMRV9GTFVTSF9JTlRWTCAgICgyKkhaKQogCkBAIC0xNDgsNiArMTUwLDggQEAKIAl1MTYgYWN0aXZlX21pbW8yX3JhdGU7CiAJdTE2IGFjdGl2ZV9taW1vM19yYXRlOwogCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKKwlzOCBtYXhfcmF0ZV9pZHg7ICAgICAvKiBNYXggcmF0ZSBzZXQgYnkgdXNlciAqLworCXU4IG1pc3NlZF9yYXRlX2NvdW50ZXI7CiAKIAlzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgbHE7CiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyBscV9pbmZvW0xRX1NJWkVdOyAvKiAiYWN0aXZlIiwgInNlYXJjaCIgKi8KQEAgLTM1Niw3ICszNjAsNyBAQAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJaWYgKHJzX3RsX2dldF9sb2FkKGxxX2RhdGEsIHRpZCkgPiBJV0xfQUdHX0xPQURfVEhSRVNIT0xEKSB7Ci0JCUlXTF9ERUJVR19IVCgiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAorCQlJV0xfREVCVUdfSFQocHJpdiwgIlN0YXJ0aW5nIFR4IGFnZzogU1RBOiAlcE0gdGlkOiAlZFxuIiwKIAkJCQlzdGEtPmFkZHIsIHRpZCk7CiAJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHByaXYtPmh3LCBzdGEtPmFkZHIsIHRpZCk7CiAJfQpAQCAtNDYzLDggKzQ2Nyw5IEBACiAgKiBGaWxsIHVDb2RlIEFQSSByYXRlX25fZmxhZ3MgZmllbGQsIGJhc2VkIG9uICJzZWFyY2giIG9yICJhY3RpdmUiIHRhYmxlLgogICovCiAvKiBGSVhNRTpSUzpyZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgcHV0IHRoZSBmbGFncyBzdGF0aWNhbGx5IGluIHRoZSB0YWJsZSAqLwotc3RhdGljIHUzMiByYXRlX25fZmxhZ3NfZnJvbV90Ymwoc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAotCQkJCSAgICAgICBpbnQgaW5kZXgsIHU4IHVzZV9ncmVlbikKK3N0YXRpYyB1MzIgcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAorCQkJCSBpbnQgaW5kZXgsIHU4IHVzZV9ncmVlbikKIHsKIAl1MzIgcmF0ZV9uX2ZsYWdzID0gMDsKIApAQCAtNDc1LDcgKzQ4MCw3IEBACiAKIAl9IGVsc2UgaWYgKGlzX0h0KHRibC0+bHFfdHlwZSkpIHsKIAkJaWYgKGluZGV4ID4gSVdMX0xBU1RfT0ZETV9SQVRFKSB7Ci0JCQlJV0xfRVJST1IoImludmFsaWQgSFQgcmF0ZSBpbmRleCAlZFxuIiwgaW5kZXgpOworCQkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBIVCByYXRlIGluZGV4ICVkXG4iLCBpbmRleCk7CiAJCQlpbmRleCA9IElXTF9MQVNUX09GRE1fUkFURTsKIAkJfQogCQlyYXRlX25fZmxhZ3MgPSBSQVRFX01DU19IVF9NU0s7CkBAIC00ODcsNyArNDkyLDcgQEAKIAkJZWxzZQogCQkJcmF0ZV9uX2ZsYWdzIHw9CWl3bF9yYXRlc1tpbmRleF0ucGxjcF9taW1vMzsKIAl9IGVsc2UgewotCQlJV0xfRVJST1IoIkludmFsaWQgdGJsLT5scV90eXBlICVkXG4iLCB0YmwtPmxxX3R5cGUpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIHRibC0+bHFfdHlwZSAlZFxuIiwgdGJsLT5scV90eXBlKTsKIAl9CiAKIAlyYXRlX25fZmxhZ3MgfD0gKCh0YmwtPmFudF90eXBlIDw8IFJBVEVfTUNTX0FOVF9QT1MpICYKQEAgLTUwNyw3ICs1MTIsNyBAQAogCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0dGX01TSzsKIAkJCWlmIChpc19zaXNvKHRibC0+bHFfdHlwZSkgJiYgdGJsLT5pc19TR0kpIHsKIAkJCQlyYXRlX25fZmxhZ3MgJj0gflJBVEVfTUNTX1NHSV9NU0s7Ci0JCQkJSVdMX0VSUk9SKCJHRiB3YXMgc2V0IHdpdGggU0dJOlNJU09cbiIpOworCQkJCUlXTF9FUlIocHJpdiwgIkdGIHdhcyBzZXQgd2l0aCBTR0k6U0lTT1xuIik7CiAJCQl9CiAJCX0KIAl9CkBAIC02ODgsNyArNjkzLDcgQEAKIAkJCWJyZWFrOwogCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbG93KSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiU2tpcHBpbmcgbWFza2VkIGxvd2VyIHJhdGU6ICVkXG4iLCBsb3cpOwogCX0KIAogCWhpZ2ggPSBpbmRleDsKQEAgLTY5OCw3ICs3MDMsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBoaWdoKSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURSgiU2tpcHBpbmcgbWFza2VkIGhpZ2hlciByYXRlOiAlZFxuIiwgaGlnaCk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKIAl9CiAKIAlyZXR1cm4gKGhpZ2ggPDwgOCkgfCBsb3c7CkBAIC03NTgsNyArNzYzLDcgQEAKIAkJbG93ID0gc2NhbGVfaW5kZXg7CiAKIG91dDoKLQlyZXR1cm4gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgbG93LCBpc19ncmVlbik7CisJcmV0dXJuIHJhdGVfbl9mbGFnc19mcm9tX3RibChscV9zdGEtPmRydiwgdGJsLCBsb3csIGlzX2dyZWVuKTsKIH0KIAogLyoKQEAgLTc4NSw3ICs3OTAsNyBAQAogCXU4IGFjdGl2ZV9pbmRleCA9IDA7CiAJczMyIHRwdCA9IDA7CiAKLQlJV0xfREVCVUdfUkFURV9MSU1JVCgiZ2V0IGZyYW1lIGFjayByZXNwb25zZSwgdXBkYXRlIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKKwlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAiZ2V0IGZyYW1lIGFjayByZXNwb25zZSwgdXBkYXRlIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKIAogCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKQEAgLTc5Niw3ICs4MDEsMTAgQEAKIAkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVKSkKIAkJcmV0dXJuOwogCi0JcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCAtIDE7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCisJCXJldHJpZXMgPSAwOworCWVsc2UKKwkJcmV0cmllcyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCAtIDE7CiAKIAlpZiAocmV0cmllcyA+IDE1KQogCQlyZXRyaWVzID0gMTU7CkBAIC04MzUsMTQgKzg0MywxOSBAQAogCSAgICAoISEodHhfcmF0ZSAmIFJBVEVfTUNTX0dGX01TSykgIT0gISEoaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKSkgfHwKIAkgICAgKGh3LT53aXBoeS0+YmFuZHNbcHJpdi0+YmFuZF0tPmJpdHJhdGVzW3JzX2luZGV4XS5iaXRyYXRlICE9CiAJICAgICBody0+d2lwaHktPmJhbmRzW2luZm8tPmJhbmRdLT5iaXRyYXRlc1tpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4XS5iaXRyYXRlKSkgewotCQlJV0xfREVCVUdfUkFURSgiaW5pdGlhbCByYXRlIGRvZXMgbm90IG1hdGNoIDB4JXhcbiIsIHR4X3JhdGUpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiaW5pdGlhbCByYXRlIGRvZXMgbm90IG1hdGNoIDB4JXhcbiIsIHR4X3JhdGUpOwogCQkvKiB0aGUgbGFzdCBMUSBjb21tYW5kIGNvdWxkIGZhaWxlZCBzbyB0aGUgTFEgaW4gdWNvZGUgbm90CiAJCSAqIHRoZSBzYW1lIGluIGRyaXZlciBzeW5jIHVwCiAJCSAqLwotCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CisJCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlcisrOworCQlpZiAobHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID4gSVdMX01JU1NFRF9SQVRFX01BWCkgeworCQkJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID0gMDsKKwkJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwkJfQogCQlnb3RvIG91dDsKIAl9CiAKKwlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSAwOwogCS8qIFVwZGF0ZSBmcmFtZSBoaXN0b3J5IHdpbmRvdyB3aXRoICJmYWlsdXJlIiBmb3IgZWFjaCBUeCByZXRyeS4gKi8KIAl3aGlsZSAocmV0cmllcykgewogCQkvKiBMb29rIHVwIHRoZSByYXRlIGFuZCBvdGhlciBpbmZvIHVzZWQgZm9yIGVhY2ggdHggYXR0ZW1wdC4KQEAgLTkwMyw3ICs5MTYsNyBAQAogCQkJdHB0ID0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEoc2VhcmNoX3dpbiwgcnNfaW5kZXgsIHRwdCwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4sCiAJCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKQEAgLTkxOSw3ICs5MzIsNyBAQAogCQkJdHB0ID0gY3Vycl90YmwtPmV4cGVjdGVkX3RwdFtyc19pbmRleF07CiAJCWVsc2UKIAkJCXRwdCA9IDA7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVKQogCQkJcnNfY29sbGVjdF90eF9kYXRhKHdpbmRvdywgcnNfaW5kZXgsIHRwdCwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4sCiAJCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKQEAgLTkzMSw3ICs5NDQsNyBAQAogCS8qIElmIG5vdCBzZWFyY2hpbmcgZm9yIG5ldyBtb2RlLCBpbmNyZW1lbnQgc3VjY2Vzcy9mYWlsZWQgY291bnRlcgogCSAqIC4uLiB0aGVzZSBoZWxwIGRldGVybWluZSB3aGVuIHRvIHN0YXJ0IHNlYXJjaGluZyBhZ2FpbiAqLwogCWlmIChscV9zdGEtPnN0YXlfaW5fdGJsKSB7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpIHsKIAkJCWxxX3N0YS0+dG90YWxfc3VjY2VzcyArPSBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX21hcDsKIAkJCWxxX3N0YS0+dG90YWxfZmFpbGVkICs9CiAJCQkgICAgIChpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiAtIGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwKTsKQEAgLTk2MSw3ICs5NzQsNyBAQAogc3RhdGljIHZvaWQgcnNfc2V0X3N0YXlfaW5fdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpc19sZWdhY3ksCiAJCQkJIHN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEpCiB7Ci0JSVdMX0RFQlVHX1JBVEUoIndlIGFyZSBzdGF5aW5nIGluIHRoZSBzYW1lIHRhYmxlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAid2UgYXJlIHN0YXlpbmcgaW4gdGhlIHNhbWUgdGFibGVcbiIpOwogCWxxX3N0YS0+c3RheV9pbl90YmwgPSAxOwkvKiBvbmx5IHBsYWNlIHRoaXMgZ2V0cyBzZXQgKi8KIAlpZiAoaXNfbGVnYWN5KSB7CiAJCWxxX3N0YS0+dGFibGVfY291bnRfbGltaXQgPSBJV0xfTEVHQUNZX1RBQkxFX0NPVU5UOwpAQCAtMTEyOSw3ICsxMTQyLDcgQEAKIAlzMzIgcmF0ZTsKIAlzOCBpc19ncmVlbiA9IGxxX3N0YS0+aXNfZ3JlZW47CiAKLQlpZiAoIWNvbmYtPmh0LmVuYWJsZWQgfHwgIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwlpZiAoIWNvbmZfaXNfaHQoY29uZikgfHwgIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKCgoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TTV9QUykgPj4gMikKQEAgLTExNDAsNyArMTE1Myw3IEBACiAJaWYgKHByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtIDwgMikKIAkJcmV0dXJuIC0xOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiB0cnkgdG8gc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHRyeSB0byBzd2l0Y2ggdG8gTUlNTzJcbiIpOwogCiAJdGJsLT5scV90eXBlID0gTFFfTUlNTzI7CiAJdGJsLT5pc19kdXAgPSBscV9zdGEtPmlzX2R1cDsKQEAgLTExNjksMTYgKzExODIsMTYgQEAKIAogCXJhdGUgPSByc19nZXRfYmVzdF9yYXRlKHByaXYsIGxxX3N0YSwgdGJsLCByYXRlX21hc2ssIGluZGV4KTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogTUlNTzIgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBNSU1PMiBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKIAogCWlmICgocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKSB8fCAhKCgxIDw8IHJhdGUpICYgcmF0ZV9tYXNrKSkgewotCQlJV0xfREVCVUdfUkFURSgiQ2FuJ3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiQ2FuJ3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAogCQkJCQkJcmF0ZSwgcmF0ZV9tYXNrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGUsIGlzX2dyZWVuKTsKKwl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIHJhdGUsIGlzX2dyZWVuKTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKIAkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZSwgaXNfZ3JlZW4pOwogCXJldHVybiAwOwogfQpAQCAtMTE5NiwxMCArMTIwOSwxMCBAQAogCXU4IGlzX2dyZWVuID0gbHFfc3RhLT5pc19ncmVlbjsKIAlzMzIgcmF0ZTsKIAotCWlmICghY29uZi0+aHQuZW5hYmxlZCB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCWlmICghY29uZl9pc19odChjb25mKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQogCQlyZXR1cm4gLTE7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6IHRyeSB0byBzd2l0Y2ggdG8gU0lTT1xuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiB0cnkgdG8gc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJdGJsLT5pc19kdXAgPSBscV9zdGEtPmlzX2R1cDsKIAl0YmwtPmxxX3R5cGUgPSBMUV9TSVNPOwpAQCAtMTIzMCwxNCArMTI0MywxNCBAQAogCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOwogCXJhdGUgPSByc19nZXRfYmVzdF9yYXRlKHByaXYsIGxxX3N0YSwgdGJsLCByYXRlX21hc2ssIGluZGV4KTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogZ2V0IGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogZ2V0IGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOwogCWlmICgocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKSB8fCAhKCgxIDw8IHJhdGUpICYgcmF0ZV9tYXNrKSkgewotCQlJV0xfREVCVUdfUkFURSgiY2FuIG5vdCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJjYW4gbm90IHN3aXRjaCB3aXRoIGluZGV4ICVkIHJhdGUgbWFzayAleFxuIiwKIAkJCSAgICAgcmF0ZSwgcmF0ZV9tYXNrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGUsIGlzX2dyZWVuKTsKLQlJV0xfREVCVUdfUkFURSgiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAorCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgcmF0ZSwgaXNfZ3JlZW4pOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCiAJCSAgICAgdGJsLT5jdXJyZW50X3JhdGUsIGlzX2dyZWVuKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjYsNyArMTI3OSw3IEBACiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BMToKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9BTlRFTk5BMjoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHRvZ2dsZSBBbnRlbm5hXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHRvZ2dsZSBBbnRlbm5hXG4iKTsKIAogCQkJbHFfc3RhLT5hY3Rpb25fY291bnRlcisrOwogCkBAIC0xMjkwLDcgKzEzMDMsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX0xFR0FDWV9TV0lUQ0hfU0lTTzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHN3aXRjaCB0byBTSVNPXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHN3aXRjaCB0byBTSVNPXG4iKTsKIAogCQkJLyogU2V0IHVwIHNlYXJjaCB0YWJsZSB0byB0cnkgU0lTTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTMwNiw3ICsxMzE5LDcgQEAKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMl9BQjoKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMl9BQzoKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9NSU1PMl9CQzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTGVnYWN5IHN3aXRjaCB0byBNSU1PMlxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IExlZ2FjeSBzd2l0Y2ggdG8gTUlNTzJcbiIpOwogCiAJCQkvKiBTZXQgdXAgc2VhcmNoIHRhYmxlIHRvIHRyeSBNSU1PICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xMzc1LDcgKzEzODgsNyBAQAogCQlzd2l0Y2ggKHRibC0+YWN0aW9uKSB7CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0FOVEVOTkExOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9BTlRFTk5BMjoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyB0b2dnbGUgQW50ZW5uYVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNJU08gdG9nZ2xlIEFudGVubmFcbiIpOwogCiAJCQlpZiAoKHRibC0+YWN0aW9uID09IElXTF9TSVNPX1NXSVRDSF9BTlRFTk5BMSAmJgogCQkJCQkJCXR4X2NoYWluc19udW0gPD0gMSkgfHwKQEAgLTEzOTQsNyArMTQwNyw3IEBACiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU8yX0FCOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9NSU1PMl9BQzoKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfTUlNTzJfQkM6Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNJU08gc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU0lTTyBzd2l0Y2ggdG8gTUlNTzJcbiIpOwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwogCQkJc2VhcmNoX3RibC0+aXNfU0dJID0gMDsKIApAQCAtMTQyMywxNCArMTQzNiwxNSBAQAogCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQogCQkJCWJyZWFrOwogCi0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNJU08gdG9nZ2xlIFNHSS9OR0lcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHRvZ2dsZSBTR0kvTkdJXG4iKTsKIAogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwogCQkJaWYgKGlzX2dyZWVuKSB7CiAJCQkJaWYgKCF0YmwtPmlzX1NHSSkKIAkJCQkJYnJlYWs7CiAJCQkJZWxzZQotCQkJCQlJV0xfRVJST1IoIlNHSSB3YXMgc2V0IGluIEdGK1NJU09cbiIpOworCQkJCQlJV0xfRVJSKHByaXYsCisJCQkJCQkiU0dJIHdhcyBzZXQgaW4gR0YrU0lTT1xuIik7CiAJCQl9CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAhdGJsLT5pc19TR0k7CiAJCQlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgc2VhcmNoX3RibCk7CkBAIC0xNDM5LDggKzE0NTMsOSBAQAogCQkJCWlmICh0cHQgPj0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W2luZGV4XSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwoCi0JCQkJCQlzZWFyY2hfdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0KKwkJCQlyYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgc2VhcmNoX3RibCwKKwkJCQkJCSAgICAgIGluZGV4LCBpc19ncmVlbik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl0YmwtPmFjdGlvbisrOwpAQCAtMTQ4Niw3ICsxNTAxLDcgQEAKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfQU5URU5OQTE6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9BTlRFTk5BMjoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTUlNTyB0b2dnbGUgQW50ZW5uYXNcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBNSU1PIHRvZ2dsZSBBbnRlbm5hc1xuIik7CiAKIAkJCWlmICh0eF9jaGFpbnNfbnVtIDw9IDIpCiAJCQkJYnJlYWs7CkBAIC0xNTAyLDcgKzE1MTcsNyBAQAogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfU0lTT19BOgogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfU0lTT19COgogCQljYXNlIElXTF9NSU1PMl9TV0lUQ0hfU0lTT19DOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBzd2l0Y2ggdG8gU0lTT1xuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8yIHN3aXRjaCB0byBTSVNPXG4iKTsKIAogCQkJLyogU2V0IHVwIG5ldyBzZWFyY2ggdGFibGUgZm9yIFNJU08gKi8KIAkJCW1lbWNweShzZWFyY2hfdGJsLCB0YmwsIHN6KTsKQEAgLTE1MzQsNyArMTU0OSw3IEBACiAJCQkJCQlIVF9TSE9SVF9HSV80ME1IWikpCiAJCQkJYnJlYWs7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogTUlNTyB0b2dnbGUgU0dJL05HSVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8gdG9nZ2xlIFNHSS9OR0lcbiIpOwogCiAJCQkvKiBTZXQgdXAgbmV3IHNlYXJjaCB0YWJsZSBmb3IgTUlNTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTU1MSw4ICsxNTY2LDkgQEAKIAkJCQlpZiAodHB0ID49IHNlYXJjaF90YmwtPmV4cGVjdGVkX3RwdFtpbmRleF0pCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKAotCQkJCQkJc2VhcmNoX3RibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9CisJCQkJcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHNlYXJjaF90YmwsCisJCQkJCQkgICAgICBpbmRleCwgaXNfZ3JlZW4pOwogCQkJZ290byBvdXQ7CiAKIAkJfQpAQCAtMTYxNiw3ICsxNjMyLDcgQEAKIAkJICAgIChscV9zdGEtPnRvdGFsX3N1Y2Nlc3MgPiBscV9zdGEtPm1heF9zdWNjZXNzX2xpbWl0KSB8fAogCQkgICAgKCghbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCkgJiYgKGxxX3N0YS0+Zmx1c2hfdGltZXIpCiAJCSAgICAgJiYgKGZsdXNoX2ludGVydmFsX3Bhc3NlZCkpKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IHN0YXkgaXMgZXhwaXJlZCAlZCAlZCAlZFxuOiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHN0YXkgaXMgZXhwaXJlZCAlZCAlZCAlZFxuOiIsCiAJCQkJICAgICBscV9zdGEtPnRvdGFsX2ZhaWxlZCwKIAkJCQkgICAgIGxxX3N0YS0+dG90YWxfc3VjY2VzcywKIAkJCQkgICAgIGZsdXNoX2ludGVydmFsX3Bhc3NlZCk7CkBAIC0xNjM5LDcgKzE2NTUsNyBAQAogCQkJICAgIGxxX3N0YS0+dGFibGVfY291bnRfbGltaXQpIHsKIAkJCQlscV9zdGEtPnRhYmxlX2NvdW50ID0gMDsKIAotCQkJCUlXTF9ERUJVR19SQVRFKCJMUTogc3RheSBpbiB0YWJsZSBjbGVhciB3aW5cbiIpOworCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RheSBpbiB0YWJsZSBjbGVhciB3aW5cbiIpOwogCQkJCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrKQogCQkJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygKIAkJCQkJCSYodGJsLT53aW5baV0pKTsKQEAgLTE2ODcsOCArMTcwMyw5IEBACiAJdTE2IGhpZ2hfbG93OwogCXMzMiBzcjsKIAl1OCB0aWQgPSBNQVhfVElEX0NPVU5UOworCXN0cnVjdCBpd2xfdGlkX2RhdGEgKnRpZF9kYXRhOwogCi0JSVdMX0RFQlVHX1JBVEUoInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJyYXRlIHNjYWxlIGNhbGN1bGF0ZSBuZXcgcmF0ZSBmb3Igc2tiXG4iKTsKIAogCS8qIFNlbmQgbWFuYWdlbWVudCBmcmFtZXMgYW5kIGJyb2FkY2FzdC9tdWx0aWNhc3QgZGF0YSB1c2luZwogCSAqIGxvd2VzdCByYXRlLiAqLwpAQCAtMTcyMCwxMyArMTczNywxMyBAQAogCS8qIGN1cnJlbnQgdHggcmF0ZSAqLwogCWluZGV4ID0gbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHg7CiAKLQlJV0xfREVCVUdfUkFURSgiUmF0ZSBzY2FsZSBpbmRleCAlZCBmb3IgdHlwZSAlZFxuIiwgaW5kZXgsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlJhdGUgc2NhbGUgaW5kZXggJWQgZm9yIHR5cGUgJWRcbiIsIGluZGV4LAogCQkgICAgICAgdGJsLT5scV90eXBlKTsKIAogCS8qIHJhdGVzIGF2YWlsYWJsZSBmb3IgdGhpcyBhc3NvY2lhdGlvbiwgYW5kIGZvciBtb2R1bGF0aW9uIG1vZGUgKi8KIAlyYXRlX21hc2sgPSByc19nZXRfc3VwcG9ydGVkX3JhdGVzKGxxX3N0YSwgaGRyLCB0YmwtPmxxX3R5cGUpOwogCi0JSVdMX0RFQlVHX1JBVEUoIm1hc2sgMHglMDRYIFxuIiwgcmF0ZV9tYXNrKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibWFzayAweCUwNFggXG4iLCByYXRlX21hc2spOwogCiAJLyogbWFzayB3aXRoIHN0YXRpb24gcmF0ZSByZXN0cmljdGlvbiAqLwogCWlmIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgewpAQCAtMTc0NSwxNiArMTc2MiwyNSBAQAogCQlyYXRlX3NjYWxlX2luZGV4X21zayA9IHJhdGVfbWFzazsKIAogCWlmICghKCgxIDw8IGluZGV4KSAmIHJhdGVfc2NhbGVfaW5kZXhfbXNrKSkgewotCQlJV0xfRVJST1IoIkN1cnJlbnQgUmF0ZSBpcyBub3QgdmFsaWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJDdXJyZW50IFJhdGUgaXMgbm90IHZhbGlkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEdldCBleHBlY3RlZCB0aHJvdWdocHV0IHRhYmxlIGFuZCBoaXN0b3J5IHdpbmRvdyBmb3IgY3VycmVudCByYXRlICovCiAJaWYgKCF0YmwtPmV4cGVjdGVkX3RwdCkgewotCQlJV0xfRVJST1IoInRibC0+ZXhwZWN0ZWRfdHB0IGlzIE5VTExcbiIpOworCQlJV0xfRVJSKHByaXYsICJ0YmwtPmV4cGVjdGVkX3RwdCBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCS8qIGZvcmNlIHVzZXIgbWF4IHJhdGUgaWYgc2V0IGJ5IHVzZXIgKi8KKwlpZiAoKGxxX3N0YS0+bWF4X3JhdGVfaWR4ICE9IC0xKSAmJgorCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggPCBpbmRleCkpIHsKKwkJaW5kZXggPSBscV9zdGEtPm1heF9yYXRlX2lkeDsKKwkJdXBkYXRlX2xxID0gMTsKKwkJd2luZG93ID0gJih0YmwtPndpbltpbmRleF0pOworCQlnb3RvIGxxX3VwZGF0ZTsKKwl9CisKIAl3aW5kb3cgPSAmKHRibC0+d2luW2luZGV4XSk7CiAKIAkvKgpAQCAtMTc2Nyw3ICsxNzkzLDcgQEAKIAlmYWlsX2NvdW50ID0gd2luZG93LT5jb3VudGVyIC0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXI7CiAJaWYgKChmYWlsX2NvdW50IDwgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCiAJCQkod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPCBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGlsbCBiZWxvdyBUSC4gc3VjYz0lZCB0b3RhbD0lZCAiCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RpbGwgYmVsb3cgVEguIHN1Y2M9JWQgdG90YWw9JWQgIgogCQkJICAgICAgICJmb3IgaW5kZXggJWRcbiIsCiAJCQkgICAgICAgd2luZG93LT5zdWNjZXNzX2NvdW50ZXIsIHdpbmRvdy0+Y291bnRlciwgaW5kZXgpOwogCkBAIC0xNzk1LDcgKzE4MjEsNyBAQAogCQkgKiBjb250aW51aW5nIHRvIHVzZSB0aGUgc2V0dXAgdGhhdCB3ZSd2ZSBiZWVuIHRyeWluZy4gKi8KIAkJaWYgKHdpbmRvdy0+YXZlcmFnZV90cHQgPiBscV9zdGEtPmxhc3RfdHB0KSB7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU1dJVENISU5HIFRPIE5FVyBUQUJMRSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNXSVRDSElORyBUTyBORVcgVEFCTEUgIgogCQkJCQkic3VjPSVkIGN1ci10cHQ9JWQgb2xkLXRwdD0lZFxuIiwKIAkJCQkJd2luZG93LT5zdWNjZXNzX3JhdGlvLAogCQkJCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0LApAQCAtMTgxMSw3ICsxODM3LDcgQEAKIAkJLyogRWxzZSBwb29yIHN1Y2Nlc3M7IGdvIGJhY2sgdG8gbW9kZSBpbiAiYWN0aXZlIiB0YWJsZSAqLwogCQl9IGVsc2UgewogCi0JCQlJV0xfREVCVUdfUkFURSgiTFE6IEdPSU5HIEJBQ0sgVE8gVEhFIE9MRCBUQUJMRSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEdPSU5HIEJBQ0sgVE8gVEhFIE9MRCBUQUJMRSAiCiAJCQkJCSJzdWM9JWQgY3VyLXRwdD0lZCBvbGQtdHB0PSVkXG4iLAogCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCiAJCQkJCXdpbmRvdy0+YXZlcmFnZV90cHQsCkBAIC0xODQ2LDYgKzE4NzIsMTEgQEAKIAlsb3cgPSBoaWdoX2xvdyAmIDB4ZmY7CiAJaGlnaCA9IChoaWdoX2xvdyA+PiA4KSAmIDB4ZmY7CiAKKwkvKiBJZiB1c2VyIHNldCBtYXggcmF0ZSwgZG9udCBhbGxvdyBoaWdoZXIgdGhhbiB1c2VyIGNvbnN0cmFpbiAqLworCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpICYmCisJICAgIChscV9zdGEtPm1heF9yYXRlX2lkeCA8IGhpZ2gpKQorCQloaWdoID0gSVdMX1JBVEVfSU5WQUxJRDsKKwogCXNyID0gd2luZG93LT5zdWNjZXNzX3JhdGlvOwogCiAJLyogQ29sbGVjdCBtZWFzdXJlZCB0aHJvdWdocHV0cyBmb3IgY3VycmVudCBhbmQgYWRqYWNlbnQgcmF0ZXMgKi8KQEAgLTE4NTksNyArMTg5MCw3IEBACiAKIAkvKiBUb28gbWFueSBmYWlsdXJlcywgZGVjcmVhc2UgcmF0ZSAqLwogCWlmICgoc3IgPD0gSVdMX1JBVEVfREVDUkVBU0VfVEgpIHx8IChjdXJyZW50X3RwdCA9PSAwKSkgewotCQlJV0xfREVCVUdfUkFURSgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CiAJCXNjYWxlX2FjdGlvbiA9IC0xOwogCiAJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzOyB0cnkgaW5jcmVhc2UuICovCkBAIC0xODY5LDcgKzE5MDAsNyBAQAogCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKQogCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJZWxzZSBpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCi0JCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwkJCXNjYWxlX2FjdGlvbiA9IDA7CiAJfQogCiAJLyogQm90aCBhZGphY2VudCB0aHJvdWdocHV0cyBhcmUgbWVhc3VyZWQsIGJ1dCBuZWl0aGVyIG9uZSBoYXMgYmV0dGVyCkBAIC0xODkwLDE3ICsxOTIxLDE1IEBACiAJCQkJCXNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKSB7CiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCX0gZWxzZSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgaGlnaCB0cHRcbiIpOwotCQkJCXNjYWxlX2FjdGlvbiA9IC0xOworCQkJCXNjYWxlX2FjdGlvbiA9IDA7CiAJCQl9CiAKIAkJLyogTG93ZXIgYWRqYWNlbnQgcmF0ZSdzIHRocm91Z2hwdXQgaXMgbWVhc3VyZWQgKi8KIAkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CiAJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCQkJaWYgKGxvd190cHQgPiBjdXJyZW50X3RwdCkgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyB0cHRcbiIpOworCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJICAgICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CiAJCQkJc2NhbGVfYWN0aW9uID0gLTE7CiAJCQl9IGVsc2UgaWYgKHNyID49IElXTF9SQVRFX0lOQ1JFQVNFX1RIKSB7CiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKQEAgLTE5MzcsMTQgKzE5NjYsMTQgQEAKIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoImNob29zZSByYXRlIHNjYWxlIGluZGV4ICVkIGFjdGlvbiAlZCBsb3cgJWQgIgorCUlXTF9ERUJVR19SQVRFKHByaXYsICJjaG9vc2UgcmF0ZSBzY2FsZSBpbmRleCAlZCBhY3Rpb24gJWQgbG93ICVkICIKIAkJICAgICJoaWdoICVkIHR5cGUgJWRcbiIsCiAJCSAgICAgaW5kZXgsIHNjYWxlX2FjdGlvbiwgbG93LCBoaWdoLCB0YmwtPmxxX3R5cGUpOwogCiBscV91cGRhdGU6CiAJLyogUmVwbGFjZSB1Q29kZSdzIHJhdGUgdGFibGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBzdGF0aW9uLiAqLwogCWlmICh1cGRhdGVfbHEpIHsKLQkJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIGluZGV4LCBpc19ncmVlbik7CisJCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOwogCQlyc19maWxsX2xpbmtfY21kKHByaXYsIGxxX3N0YSwgcmF0ZSk7CiAJCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKIAl9CkBAIC0xOTgxLDcgKzIwMTAsNyBAQAogCQkJLyogVXNlIG5ldyAic2VhcmNoIiBzdGFydCByYXRlICovCiAJCQlpbmRleCA9IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodGJsLT5jdXJyZW50X3JhdGUpOwogCi0JCQlJV0xfREVCVUdfUkFURSgiU3dpdGNoIGN1cnJlbnQgIG1jczogJVggaW5kZXg6ICVkXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlN3aXRjaCBjdXJyZW50ICBtY3M6ICVYIGluZGV4OiAlZFxuIiwKIAkJCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLCBpbmRleCk7CiAJCQlyc19maWxsX2xpbmtfY21kKHByaXYsIGxxX3N0YSwgdGJsLT5jdXJyZW50X3JhdGUpOwogCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwpAQCAtMTk5MywxMCArMjAyMiwxMCBAQAogCQkgKiBzdGF5IHdpdGggYmVzdCBhbnRlbm5hIGxlZ2FjeSBtb2R1bGF0aW9uIGZvciBhIHdoaWxlCiAJCSAqIGJlZm9yZSBuZXh0IHJvdW5kIG9mIG1vZGUgY29tcGFyaXNvbnMuICovCiAJCXRibDEgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKLQkJaWYgKGlzX2xlZ2FjeSh0YmwxLT5scV90eXBlKSAmJiAhY29uZi0+aHQuZW5hYmxlZCAmJgorCQlpZiAoaXNfbGVnYWN5KHRibDEtPmxxX3R5cGUpICYmICFjb25mX2lzX2h0KGNvbmYpICYmCiAJCSAgICBscV9zdGEtPmFjdGlvbl9jb3VudGVyID49IDEpIHsKIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTVEFZIGluIGxlZ2FjeSB0YWJsZVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNUQVkgaW4gbGVnYWN5IHRhYmxlXG4iKTsKIAkJCXJzX3NldF9zdGF5X2luX3RhYmxlKHByaXYsIDEsIGxxX3N0YSk7CiAJCX0KIApAQCAtMjAwOCw4ICsyMDM3LDE1IEBACiAJCQlpZiAoKGxxX3N0YS0+bGFzdF90cHQgPiBJV0xfQUdHX1RQVF9USFJFSE9MRCkgJiYKIAkJCSAgICAobHFfc3RhLT50eF9hZ2dfdGlkX2VuICYgKDEgPDwgdGlkKSkgJiYKIAkJCSAgICAodGlkICE9IE1BWF9USURfQ09VTlQpKSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUoInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLCB0aWQpOwotCQkJCXJzX3RsX3R1cm5fb25fYWdnKHByaXYsIHRpZCwgbHFfc3RhLCBzdGEpOworCQkJCXRpZF9kYXRhID0KKwkJCQkgICAmcHJpdi0+c3RhdGlvbnNbbHFfc3RhLT5scS5zdGFfaWRdLnRpZFt0aWRdOworCQkJCWlmICh0aWRfZGF0YS0+YWdnLnN0YXRlID09IElXTF9BR0dfT0ZGKSB7CisJCQkJCUlXTF9ERUJVR19SQVRFKHByaXYsCisJCQkJCQkgICAgICAgInRyeSB0byBhZ2dyZWdhdGUgdGlkICVkXG4iLAorCQkJCQkJICAgICAgIHRpZCk7CisJCQkJCXJzX3RsX3R1cm5fb25fYWdnKHByaXYsIHRpZCwKKwkJCQkJCQkgIGxxX3N0YSwgc3RhKTsKKwkJCQl9CiAJCQl9CiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyID0gMDsKIAkJCXJzX3NldF9zdGF5X2luX3RhYmxlKHByaXYsIDAsIGxxX3N0YSk7CkBAIC0yMDI4LDcgKzIwNjQsNyBAQAogCX0KIAogb3V0OgotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIGluZGV4LCBpc19ncmVlbik7CiAJaSA9IGluZGV4OwogCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gaTsKIApAQCAtMjA4MSw3ICsyMTE3LDcgQEAKIAlpZiAoIXJzX2lzX3ZhbGlkX2FudCh2YWxpZF90eF9hbnQsIHRibC0+YW50X3R5cGUpKQogCSAgICByc190b2dnbGVfYW50ZW5uYSh2YWxpZF90eF9hbnQsICZyYXRlLCB0YmwpOwogCi0JcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCh0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOworCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCByYXRlX2lkeCwgdXNlX2dyZWVuKTsKIAl0YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGU7CiAJcnNfc2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHRibCk7CiAJcnNfZmlsbF9saW5rX2NtZChOVUxMLCBscV9zdGEsIHJhdGUpOwpAQCAtMjEwNCw3ICsyMTQwLDE4IEBACiAJaW50IHJhdGVfaWR4OwogCXU2NCBtYXNrX2JpdCA9IDA7CiAKLQlJV0xfREVCVUdfUkFURV9MSU1JVCgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisJSVdMX0RFQlVHX1JBVEVfTElNSVQocHJpdiwgInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOworCisJLyogR2V0IG1heCByYXRlIGlmIHVzZXIgc2V0IG1heCByYXRlICovCisJaWYgKGxxX3N0YSkgeworCQlscV9zdGEtPm1heF9yYXRlX2lkeCA9IHR4cmMtPm1heF9yYXRlX2lkeDsKKwkJaWYgKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJgorCQkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4ICE9IC0xKSkKKwkJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggPCAwKSB8fAorCQkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4ID49IElXTF9SQVRFX0NPVU5UKSkKKwkJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gLTE7CisJfQogCiAJaWYgKHN0YSkKIAkJbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOwpAQCAtMjEyOSw3ICsyMTc2LDcgQEAKIAkJdTggc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLAorCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsCiAJCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIGhkci0+YWRkcjEsCiAJCQkJCQkJMCwgQ01EX0FTWU5DLCBOVUxMKTsKQEAgLTIxNTgsNyArMjIwNSw3IEBACiAJaW50IGksIGo7CiAKIAlwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKXByaXZfcmF0ZTsKLQlJV0xfREVCVUdfUkFURSgiY3JlYXRlIHN0YXRpb24gcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CiAKIAlscV9zdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX2xxX3N0YSksIGdmcCk7CiAKQEAgLTIxODIsNiArMjIyOSw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnByaXYtPmh3LT5jb25mOwogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBwcml2X3N0YTsKIAl1MTYgbWFza19iaXQgPSAwOworCWludCBjb3VudDsKKwlpbnQgc3RhcnRfcmF0ZSA9IDA7CiAKIAlscV9zdGEtPmZsdXNoX3RpbWVyID0gMDsKIAlscV9zdGEtPnN1cHBfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOwpAQCAtMjE4OSw3ICsyMjM4LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQlyc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdygmbHFfc3RhLT5scV9pbmZvW2pdLndpbltpXSk7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6ICoqKiByYXRlIHNjYWxlIHN0YXRpb24gZ2xvYmFsIGluaXQgKioqXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6ICoqKiByYXRlIHNjYWxlIHN0YXRpb24gZ2xvYmFsIGluaXQgKioqXG4iKTsKIAkvKiBUT0RPOiB3aGF0IGlzIGEgZ29vZCBzdGFydGluZyByYXRlIGZvciBTVEE/IEFib3V0IG1pZGRsZT8gTWF5YmUgbm90CiAJICogdGhlIGxvd2VzdCBvciB0aGUgaGlnaGVzdCByYXRlLi4gQ291bGQgY29uc2lkZXIgdXNpbmcgUlNTSSBmcm9tCiAJICogcHJldmlvdXMgcGFja2V0cz8gTmVlZCB0byBoYXZlIElFRUUgODAyLjFYIGF1dGggc3VjY2VlZCBpbW1lZGlhdGVseQpAQCAtMjIwMCwxMCArMjI0OSwxMCBAQAogCQl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHN0YS0+YWRkcik7CiAKIAkJLyogZm9yIElCU1MgdGhlIGNhbGwgYXJlIGZyb20gdGFza2xldCAqLwotCQlJV0xfREVCVUdfUkFURSgiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAKIAkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOwogCQkJc3RhX2lkID0gaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHByaXYsIHN0YS0+YWRkciwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwogCQl9CkBAIC0yMjE2LDYgKzIyNjUsOCBAQAogCX0KIAogCWxxX3N0YS0+aXNfZHVwID0gMDsKKwlscV9zdGEtPm1heF9yYXRlX2lkeCA9IC0xOworCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA9IElXTF9NSVNTRURfUkFURV9NQVg7CiAJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihwcml2LCBjb25mKTsKIAlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSA9IHByaXYtPmFjdGl2ZV9yYXRlICYgfigweDEwMDApOwogCWxxX3N0YS0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYzsKQEAgLTIyNDAsNyArMjI5MSw3IEBACiAJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSAmPSB+KCh1MTYpMHgyKTsKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCi0JSVdMX0RFQlVHX1JBVEUoIlNJU08tUkFURT0lWCBNSU1PMi1SQVRFPSVYIE1JTU8zLVJBVEU9JVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNJU08tUkFURT0lWCBNSU1PMi1SQVRFPSVYIE1JTU8zLVJBVEU9JVhcbiIsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlLAogCQkgICAgIGxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSk7CkBAIC0yMjU0LDE2ICsyMzA1LDIwIEBACiAJbHFfc3RhLT5kcnYgPSBwcml2OwogCiAJLyogRmluZCBoaWdoZXN0IHR4IHJhdGUgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlIGFuZCBkZXN0aW5hdGlvbiBzdGF0aW9uICovCi0JbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdICYgbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGU7Ci0JbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSAzOwotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKQorCW1hc2tfYml0ID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKKwljb3VudCA9IHNiYW5kLT5uX2JpdHJhdGVzOworCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCWNvdW50ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCXN0YXJ0X3JhdGUgPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCQltYXNrX2JpdCA8PD0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwl9CisKKwltYXNrX2JpdCA9IG1hc2tfYml0ICYgbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGU7CisJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSA0OworCWZvciAoaSA9IHN0YXJ0X3JhdGU7IGkgPCBjb3VudDsgaSsrKQogCQlpZiAobWFza19iaXQgJiBCSVQoaSkpCiAJCQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IGk7CiAKLQkvKiBGb3IgTU9ERV9JRUVFODAyMTFBLCBza2lwIG92ZXIgY2NrIHJhdGVzIGluIGdsb2JhbCByYXRlIHRhYmxlICovCi0JaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0KIAlyc19pbml0aWFsaXplX2xxKHByaXYsIGNvbmYsIHN0YSwgbHFfc3RhKTsKIH0KIApAQCAtMjQwMiw5ICsyNDU3LDkgQEAKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcHJpdl9yOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCWtmcmVlKGxxX3N0YSk7Ci0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAKQEAgLTI0MTgsMjAgKzI0NzMsMjcgQEAKIAkJCSAgICAgdTMyICpyYXRlX25fZmxhZ3MsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CisJdTggdmFsaWRfdHhfYW50OworCXU4IGFudF9zZWxfdHg7CiAKIAlwcml2ID0gbHFfc3RhLT5kcnY7CisJdmFsaWRfdHhfYW50ID0gcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudDsKIAlpZiAobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSkgewotCQlpZiAoaW5kZXggPCAxMikgeworCQlhbnRfc2VsX3R4ID0KKwkJICAoKGxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUgJiBSQVRFX01DU19BTlRfQUJDX01TSykKKwkJICA+PiBSQVRFX01DU19BTlRfUE9TKTsKKwkJaWYgKCh2YWxpZF90eF9hbnQgJiBhbnRfc2VsX3R4KSA9PSBhbnRfc2VsX3R4KSB7CiAJCQkqcmF0ZV9uX2ZsYWdzID0gbHFfc3RhLT5kYmdfZml4ZWRfcmF0ZTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9OXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChscV9zdGEtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJCQkqcmF0ZV9uX2ZsYWdzID0gMHg4MDBEOwotCQkJZWxzZQotCQkJCSpyYXRlX25fZmxhZ3MgPSAweDgyMEE7CisJCQlscV9zdGEtPmRiZ19maXhlZF9yYXRlID0gMDsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCSAgICAiSW52YWxpZCBhbnRlbm5hIHNlbGVjdGlvbiAweCVYLCBWYWxpZCBpcyAweCVYXG4iLAorCQkJICAgIGFudF9zZWxfdHgsIHZhbGlkX3R4X2FudCk7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiRml4ZWQgcmF0ZSBPRkZcbiIpOwogCQl9Ci0JCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9OXG4iKTsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfUkFURSgiRml4ZWQgcmF0ZSBPRkZcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiRml4ZWQgcmF0ZSBPRkZcbiIpOwogCX0KIH0KIApAQCAtMjQ2MCw3ICsyNTIyLDcgQEAKIAlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICA9IDB4MUZEMDsJLyogNiAtIDYwIE1CaXRzLCBubyA5LCBubyBDQ0sgKi8KIAotCUlXTF9ERUJVR19SQVRFKCJzdGFfaWQgJWQgcmF0ZSAweCVYXG4iLAorCUlXTF9ERUJVR19SQVRFKHByaXYsICJzdGFfaWQgJWQgcmF0ZSAweCVYXG4iLAogCQlscV9zdGEtPmxxLnN0YV9pZCwgbHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSk7CiAKIAlpZiAobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSkgewpAQCAtMjQ3NCwxMSArMjUzNiwxOSBAQAogc3RhdGljIHNzaXplX3QgcnNfc3RhX2RiZ2ZzX3NjYWxlX3RhYmxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgaSA9IDA7CisJc3NpemVfdCByZXQ7CiAKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKKworCXByaXYgPSBscV9zdGEtPmRydjsKKwlidWZmID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgInN0YV9pZCAlZFxuIiwgbHFfc3RhLT5scS5zdGFfaWQpOwogCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJmYWlsZWQ9JWQgc3VjY2Vzcz0lZCByYXRlPTAlWFxuIiwKQEAgLTI0ODYsNiArMjU1NiwyMCBAQAogCQkJbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGUpOwogCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJmaXhlZCByYXRlIDB4JVhcbiIsCiAJCQlscV9zdGEtPmRiZ19maXhlZF9yYXRlKTsKKwlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAidmFsaWRfdHhfYW50ICVzJXMlc1xuIiwKKwkgICAgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBBTlRfQSkgPyAiQU5UX0EsIiA6ICIiLAorCSAgICAocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCAmIEFOVF9CKSA/ICJBTlRfQiwiIDogIiIsCisJICAgIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQU5UX0MpID8gIkFOVF9DIiA6ICIiKTsKKwlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAibHEgdHlwZSAlc1xuIiwKKwkgICAoaXNfbGVnYWN5KHRibC0+bHFfdHlwZSkpID8gImxlZ2FjeSIgOiAiSFQiKTsKKwlpZiAoaXNfSHQodGJsLT5scV90eXBlKSkgeworCQlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKKwkJICAgKGlzX3Npc28odGJsLT5scV90eXBlKSkgPyAiU0lTTyIgOgorCQkgICAoKGlzX21pbW8yKHRibC0+bHFfdHlwZSkpID8gIk1JTU8yIiA6ICJNSU1PMyIpKTsKKwkJICAgZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiAlcyIsCisJCSAgICh0YmwtPmlzX2ZhdCkgPyAiNDBNSHoiIDogIjIwTUh6Iik7CisJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXNcbiIsICh0YmwtPmlzX1NHSSkgPyAiU0dJIiA6ICIiKTsKKwl9CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImdlbmVyYWw6IgogCQkiZmxhZ3M9MHglWCBtaW1vLWQ9JWQgcy1hbnQweCV4IGQtYW50PTB4JXhcbiIsCiAJCWxxX3N0YS0+bHEuZ2VuZXJhbF9wYXJhbXMuZmxhZ3MsCkBAIC0yNTExLDcgKzI1OTUsOSBAQAogCQlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiIHJhdGVbJWRdIDB4JVhcbiIsCiAJCQlpLCBsZTMyX3RvX2NwdShscV9zdGEtPmxxLnJzX3RhYmxlW2ldLnJhdGVfbl9mbGFncykpOwogCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfb3BzID0gewpAQCAtMjUyMiwxMSArMjYwOCwxNyBAQAogc3RhdGljIHNzaXplX3QgcnNfc3RhX2RiZ2ZzX3N0YXRzX3RhYmxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgaSwgajsKKwlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlidWZmID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiAtRU5PTUVNOworCiAJZm9yIChpID0gMDsgaSA8IExRX1NJWkU7IGkrKykgewogCQlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiJXMgdHlwZT0lZCBTR0k9JWQgRkFUPSVkIERVUD0lZFxuIgogCQkJCSJyYXRlPTB4JVhcbiIsCkBAIC0yNTQ0LDcgKzI2MzYsOSBAQAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS53aW5bal0uc3VjY2Vzc19yYXRpbyk7CiAJCX0KIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaAppbmRleCA3OGVlODNhLi5hYjU5YWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw4ICsyNyw2IEBACiAjaWZuZGVmIF9faXdsX2Fnbl9yc19oX18KICNkZWZpbmUgX19pd2xfYWduX3JzX2hfXwogCi0jaW5jbHVkZSAiaXdsLWRldi5oIgotCiBzdHJ1Y3QgaXdsX3JhdGVfaW5mbyB7CiAJdTggcGxjcDsJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwogCXU4IHBsY3Bfc2lzbzsJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfU0lTT182TV9QTENQLCBldGMuICovCkBAIC00Myw2ICs0MSwxOSBAQAogCXU4IG5leHRfcnNfdGdnOyAgLyogbmV4dCByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KIH07CiAKK3N0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyB7CisJdTggcGxjcDsJCS8qIHVDb2RlIEFQSTogIElXTF9SQVRFXzZNX1BMQ1AsIGV0Yy4gKi8KKwl1OCBpZWVlOwkJLyogTUFDIGhlYWRlcjogIElXTF9SQVRFXzZNX0lFRUUsIGV0Yy4gKi8KKwl1OCBwcmV2X2llZWU7CQkvKiBwcmV2aW91cyByYXRlIGluIElFRUUgc3BlZWRzICovCisJdTggbmV4dF9pZWVlOwkJLyogbmV4dCByYXRlIGluIElFRUUgc3BlZWRzICovCisJdTggcHJldl9yczsJCS8qIHByZXZpb3VzIHJhdGUgdXNlZCBpbiBycyBhbGdvICovCisJdTggbmV4dF9yczsJCS8qIG5leHQgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KKwl1OCBwcmV2X3JzX3RnZzsJCS8qIHByZXZpb3VzIHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLworCXU4IG5leHRfcnNfdGdnOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KKwl1OCB0YWJsZV9yc19pbmRleDsJLyogaW5kZXggaW4gcmF0ZSBzY2FsZSB0YWJsZSBjbWQgKi8KKwl1OCBwcmV2X3RhYmxlX3JzOwkvKiBwcmV2IGluIHJhdGUgdGFibGUgY21kICovCit9OworCiAvKgogICogVGhlc2Ugc2VydmUgYXMgaW5kZXhlcyBpbnRvCiAgKiBzdHJ1Y3QgaXdsX3JhdGVfaW5mbyBpd2xfcmF0ZXNbSVdMX1JBVEVfQ09VTlRdOwpAQCAtNjIsMTIgKzczLDMwIEBACiAJSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfUkFURV9DT1VOVCwgLypGSVhNRTpSUzpjaGFuZ2UgdG8gSVdMX1JBVEVfSU5ERVhfQ09VTlQsKi8KKwlJV0xfUkFURV9DT1VOVF8zOTQ1ID0gSVdMX1JBVEVfQ09VTlQgLSAxLAogCUlXTF9SQVRFX0lOVk1fSU5ERVggPSBJV0xfUkFURV9DT1VOVCwKIAlJV0xfUkFURV9JTlZBTElEID0gSVdMX1JBVEVfQ09VTlQsCiB9OwogCiBlbnVtIHsKKwlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCisJSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYIC0gMSwKK307CisKK2VudW0gewogCUlXTF9GSVJTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV82TV9JTkRFWCwKKwlJV0wzOV9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKIAlJV0xfTEFTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV82ME1fSU5ERVgsCiAJSVdMX0ZJUlNUX0NDS19SQVRFID0gSVdMX1JBVEVfMU1fSU5ERVgsCiAJSVdMX0xBU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xMU1fSU5ERVgsCkBAIC0yMDIsNyArMjMxLDcgQEAKICNkZWZpbmUgSVdMX1JTX0dPT0RfUkFUSU8JCTEyODAwCS8qIDEwMCUgKi8KICNkZWZpbmUgSVdMX1JBVEVfU0NBTEVfU1dJVENICQkxMDg4MAkvKiAgODUlICovCiAjZGVmaW5lIElXTF9SQVRFX0hJR0hfVEgJCTEwODgwCS8qICA4NSUgKi8KLSNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEggICAgICAgICAgICA4OTYwCS8qICA3MCUgKi8KKyNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEgJCTY0MDAJLyogIDUwJSAqLwogI2RlZmluZSBJV0xfUkFURV9ERUNSRUFTRV9USAkJMTkyMAkvKiAgMTUlICovCiAKIC8qIHBvc3NpYmxlIGFjdGlvbnMgd2hlbiBpbiBsZWdhY3kgbW9kZSAqLwpAQCAtMjQ4LDYgKzI3Nyw3IEBACiAjZGVmaW5lIFRJTUVfV1JBUF9BUk9VTkQoeCwgeSkgKCgoeSkgPiAoeCkpID8gKHkpIC0gKHgpIDogKDAtKHgpKSArICh5KSkKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF07CitleHRlcm4gY29uc3Qgc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIGl3bDM5NDVfcmF0ZXNbSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAKIGVudW0gaXdsX3RhYmxlX3R5cGUgewogCUxRX05PTkUsCkBAIC0zMDMsNiArMzMzLDIzIEBACiAJcmV0dXJuIHJhdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggaXdsMzk0NV9nZXRfcHJldl9pZWVlX3JhdGUodTggcmF0ZV9pbmRleCkKK3sKKwl1OCByYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlX2luZGV4XS5wcmV2X2llZWU7CisKKwlpZiAocmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKQorCQlyYXRlID0gcmF0ZV9pbmRleDsKKwlyZXR1cm4gcmF0ZTsKK30KKworLyoqCisgKiBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdCAtIEluaXRpYWxpemUgdGhlIHJhdGUgc2NhbGUgdGFibGUgYmFzZWQgb24gYXNzb2MgaW5mbworICoKKyAqIFRoZSBzcGVjaWZpYyB0aHJvdWdocHV0IHRhYmxlIHVzZWQgaXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgbmV0d29yaworICogdGhlIGFzc29jaWF0ZWQgd2l0aCwgaW5jbHVkaW5nIEEsIEIsIEcsIGFuZCBHIHcvIFRHRyBwcm90ZWN0aW9uCisgKi8KK2V4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzMzIgc3RhX2lkKTsKKwogLyoqCiAgKiBpd2xfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCiAgKgpAQCAtMzE0LDYgKzM2MSw3IEBACiAgKgogICovCiBleHRlcm4gaW50IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwogCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBjYWxsYmFja3MKQEAgLTMyMiw1ICszNzAsNiBAQAogICogdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4KICAqLwogZXh0ZXJuIHZvaWQgaXdsYWduX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcih2b2lkKTsKIAogI2VuZGlmIC8qIF9faXdsX2Fnbl9fcnNfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAxMjllMmQzLi4wZGIzYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDQsNiArNDQsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKKyNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpd2xhZ24iCisKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC1jb3JlLmgiCkBAIC02MSw5ICs2Myw3IEBACiAKIC8qCiAgKiBtb2R1bGUgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuCi0gKiBOT1RFOiBEUlZfTkFNRSBpcyBkZWZpbmVkIGluIGl3bHdpZmkuaCBmb3IgdXNlIGJ5IGl3bC1kZWJ1Zy5oIGFuZCBwcmludGsKICAqLwotCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgV2lyZWxlc3MgV2lGaSBMaW5rIEFHTiBkcml2ZXIgZm9yIExpbnV4IgogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTcyLDcgKzcyLDcgQEAKICNkZWZpbmUgVkQKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCiAjZGVmaW5lIFZTICJzIgogI2Vsc2UKICNkZWZpbmUgVlMKQEAgLTk0LDY2ICs5NCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCi0KLXN0YXRpYyB2b2lkIGl3bF9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQotewotCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCi0JaWYgKGh3X2RlY3J5cHQpCi0JCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCWVsc2UKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKLQotfQotCi0vKioKLSAqIGl3bF9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKLSAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KLSAqCi0gKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKLSAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAotICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KLSAqLwotc3RhdGljIGludCBpd2xfZnVsbF9yeG9uX3JlcXVpcmVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQotCS8qIFRoZXNlIGl0ZW1zIGFyZSBvbmx5IHNldHRhYmxlIGZyb20gdGhlIGZ1bGwgUlhPTiBjb21tYW5kICovCi0JaWYgKCEoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ub2RlX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLndsYXBfYnNzaWRfYWRkcikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSAhPSBwcml2LT5hY3RpdmVfcnhvbi5kZXZfdHlwZSkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsICE9IHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYWlyX3Byb3BhZ2F0aW9uICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5haXJfcHJvcGFnYXRpb24pIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyAhPQotCSAgICAgcHJpdi0+YWN0aXZlX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5hc3NvY19pZCAhPSBwcml2LT5hY3RpdmVfcnhvbi5hc3NvY19pZCkpCi0JCXJldHVybiAxOwotCi0JLyogZmxhZ3MsIGZpbHRlcl9mbGFncywgb2ZkbV9iYXNpY19yYXRlcywgYW5kIGNja19iYXNpY19yYXRlcyBjYW4KLQkgKiBiZSB1cGRhdGVkIHdpdGggdGhlIFJYT05fQVNTT0MgY29tbWFuZCAtLSBob3dldmVyIG9ubHkgc29tZQotCSAqIGZsYWcgdHJhbnNpdGlvbnMgYXJlIGFsbG93ZWQgdXNpbmcgUlhPTl9BU1NPQyAqLwotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIG5vdCBzd2l0Y2hpbmcgYmFuZHMgKi8KLQlpZiAoKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgIT0KLQkgICAgKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgc3dpdGNoaW5nIGFzc29jaWF0aW9uIHRvZ2dsZSAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgIT0KLQkJKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaXdsX2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQogICoKQEAgLTE3OSw5ICsxMTksOSBAQAogCSAqIDUwMDAsIGJ1dCB3aWxsIG5vdCBkYW1hZ2UgNDk2NSAqLwogCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TRUxGX0NUU19FTjsKIAotCXJldCA9IGl3bF9hZ25fY2hlY2tfcnhvbl9jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmV0ID0gaXdsX2NoZWNrX3J4b25fY21kKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gIE5vdCBjb21taXR0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xOTEsNyArMTMxLDcgQEAKIAlpZiAoIWl3bF9mdWxsX3J4b25fcmVxdWlyZWQocHJpdikpIHsKIAkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgKCVkKVxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAoJWQpXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC0yMDcsNyArMTQ3LDcgQEAKIAkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAJICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCiAJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIG5ld19hc3NvYykgewotCQlJV0xfREVCVUdfSU5GTygiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlRvZ2dsaW5nIGFzc29jaWF0ZWQgYml0IG9uIGN1cnJlbnQgUlhPTlxuIik7CiAJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCkBAIC0yMTgsMTIgKzE1OCwxMiBAQAogCQkgKiBhY3RpdmVfcnhvbiBiYWNrIHRvIHdoYXQgaXQgd2FzIHByZXZpb3VzbHkgKi8KIAkJaWYgKHJldCkgewogCQkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7Ci0JCQlJV0xfRVJST1IoIkVycm9yIGNsZWFyaW5nIEFTU09DX01TSyAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlNlbmRpbmcgUlhPTlxuIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZW5kaW5nIFJYT05cbiIKIAkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKIAkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgogCQkgICAgICAgIiogYnNzaWQgPSAlcE1cbiIsCkBAIC0yNDIsNyArMTgyLDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwpAQCAtMjU2LDcgKzE5Niw3IEBACiAJLyogQWRkIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzbyB3ZSBjYW4gc2VuZCBicm9hZGNhc3QgZnJhbWVzICovCiAJaWYgKGl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwKSA9PQogCQkJCQkJSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfRVJST1IoIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI2NywxMyArMjA3LDE1IEBACiAJCQlyZXQgPSBpd2xfcnhvbl9hZGRfc3RhdGlvbihwcml2LAogCQkJCQkgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyLCAxKTsKIAkJCWlmIChyZXQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIFRYLlxuIik7CisJCQkJSVdMX0VSUihwcml2LAorCQkJCQkiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIFRYLlxuIik7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCQlwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkID0gMTsKIAkJCWlmIChwcml2LT5kZWZhdWx0X3dlcF9rZXkgJiYKIAkJCSAgICBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAwKSkKLQkJCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBzZW5kIFdFUCBzdGF0aWMga2V5LlxuIik7CisJCQkJSVdMX0VSUihwcml2LAorCQkJCQkiQ291bGQgbm90IHNlbmQgV0VQIHN0YXRpYyBrZXkuXG4iKTsKIAkJfQogCiAJCS8qIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbgpAQCAtMjgyLDcgKzIyNCw3IEBACiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKIAkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fY21kKSwgJnByaXYtPnN0YWdpbmdfcnhvbik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQltZW1jcHkoYWN0aXZlX3J4b24sICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKQEAgLTI5NCw3ICsyMzYsNyBAQAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwogCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nIFRYIHBvd2VyICglZClcbiIsIHJldCk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTMwOCwyNSArMjUwLDExIEBACiAJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogfQogCi1zdGF0aWMgaW50IGl3bF9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bF9idF9jbWQgYnRfY21kID0gewotCQkuZmxhZ3MgPSAzLAotCQkubGVhZF90aW1lID0gMHhBQSwKLQkJLm1heF9raWxsID0gMSwKLQkJLmtpbGxfYWNrX21hc2sgPSAwLAotCQkua2lsbF9jdHNfbWFzayA9IDAsCi0JfTsKLQotCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKLQkJCQlzaXplb2Yoc3RydWN0IGl3bF9idF9jbWQpLCAmYnRfY21kKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCi0JSVdMX0RFQlVHX0lORk8oIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlZCBmcmFtZXMgb24gcHJlLWFsbG9jYXRlZCBoZWFwIG9uIGNsZWFyLlxuIiwKIAkJICAgICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewpAQCAtMzM3LDcgKzI2NSw3IEBACiAJfQogCiAJaWYgKHByaXYtPmZyYW1lc19jb3VudCkgewotCQlJV0xfV0FSTklORygiJWQgZnJhbWVzIHN0aWxsIGluIHVzZS4gIERpZCB3ZSBsb3NlIG9uZT9cbiIsCisJCUlXTF9XQVJOKHByaXYsICIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKIAkJCSAgICBwcml2LT5mcmFtZXNfY291bnQpOwogCQlwcml2LT5mcmFtZXNfY291bnQgPSAwOwogCX0KQEAgLTM1MCw3ICsyNzgsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKIAkJZnJhbWUgPSBremFsbG9jKHNpemVvZigqZnJhbWUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFmcmFtZSkgewotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgZnJhbWUhXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMzg2LDMxICszMTQsNiBAQAogCXJldHVybiBwcml2LT5pYnNzX2JlYWNvbi0+bGVuOwogfQogCi1zdGF0aWMgdTggaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgaTsKLQlpbnQgcmF0ZV9tYXNrOwotCi0JLyogU2V0IHJhdGUgbWFzayovCi0JaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKLQkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfQ0NLX1JBVEVTX01BU0s7Ci0JZWxzZQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX1JBVEVTX01BU0s7Ci0KLQkvKiBGaW5kIGxvd2VzdCB2YWxpZCByYXRlICovCi0JZm9yIChpID0gSVdMX1JBVEVfMU1fSU5ERVg7IGkgIT0gSVdMX1JBVEVfSU5WQUxJRDsKLQkJCQkJaSA9IGl3bF9yYXRlc1tpXS5uZXh0X2llZWUpIHsKLQkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGkpKQotCQkJcmV0dXJuIGl3bF9yYXRlc1tpXS5wbGNwOwotCX0KLQotCS8qIE5vIHZhbGlkIHJhdGUgd2FzIGZvdW5kLiBBc3NpZ24gdGhlIGxvd2VzdCBvbmUgKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyZXR1cm4gSVdMX1JBVEVfMU1fUExDUDsKLQllbHNlCi0JCXJldHVybiBJV0xfUkFURV82TV9QTENQOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGl3bF9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpd2xfZnJhbWUgKmZyYW1lLCB1OCByYXRlKQogewpAQCAtNDUyLDcgKzM1NSw3IEBACiAJZnJhbWUgPSBpd2xfZ2V0X2ZyZWVfZnJhbWUocHJpdik7CiAKIAlpZiAoIWZyYW1lKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IG9idGFpbiBmcmVlIGZyYW1lIGJ1ZmZlciBmb3IgYmVhY29uICIKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IG9idGFpbiBmcmVlIGZyYW1lIGJ1ZmZlciBmb3IgYmVhY29uICIKIAkJCSAgImNvbW1hbmQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDY5LDYgKzM3MiwxNTkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpd2xfdGZkX3RiX2dldF9hZGRyKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKworCWRtYV9hZGRyX3QgYWRkciA9IGdldF91bmFsaWduZWRfbGUzMigmdGItPmxvKTsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCisJCWFkZHIgfD0KKwkJKChkbWFfYWRkcl90KShsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pICYgMHhGKSA8PCAxNikgPDwgMTY7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1MTYgaXdsX3RmZF90Yl9nZXRfbGVuKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKworCXJldHVybiBsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pID4+IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdGZkX3NldF90YihzdHJ1Y3QgaXdsX3RmZCAqdGZkLCB1OCBpZHgsCisJCQkJICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCit7CisJc3RydWN0IGl3bF90ZmRfdGIgKnRiID0gJnRmZC0+dGJzW2lkeF07CisJdTE2IGhpX25fbGVuID0gbGVuIDw8IDQ7CisKKwlwdXRfdW5hbGlnbmVkX2xlMzIoYWRkciwgJnRiLT5sbyk7CisJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKQorCQloaV9uX2xlbiB8PSAoKGFkZHIgPj4gMTYpID4+IDE2KSAmIDB4RjsKKworCXRiLT5oaV9uX2xlbiA9IGNwdV90b19sZTE2KGhpX25fbGVuKTsKKworCXRmZC0+bnVtX3RicyA9IGlkeCArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggaXdsX3RmZF9nZXRfbnVtX3RicyhzdHJ1Y3QgaXdsX3RmZCAqdGZkKQoreworCXJldHVybiB0ZmQtPm51bV90YnMgJiAweDFmOworfQorCisvKioKKyAqIGl3bF9od190eHFfZnJlZV90ZmQgLSBGcmVlIGFsbCBjaHVua3MgcmVmZXJlbmNlZCBieSBURkQgW3R4cS0+cS5yZWFkX3B0cl0KKyAqIEBwcml2IC0gZHJpdmVyIHByaXZhdGUgZGF0YQorICogQHR4cSAtIHR4IHF1ZXVlCisgKgorICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgVEZEIGNpcmN1bGFyIGJ1ZmZlciByZWFkL3dyaXRlIGluZGV4ZXMKKyAqIERvZXMgTk9UIGZyZWUgdGhlIFRGRCBpdHNlbGYgKHdoaWNoIGlzIHdpdGhpbiBjaXJjdWxhciBidWZmZXIpCisgKi8KK3ZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3sKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkX3RtcCA9IChzdHJ1Y3QgaXdsX3RmZCAqKXR4cS0+dGZkczsKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OworCWludCBpbmRleCA9IHR4cS0+cS5yZWFkX3B0cjsKKwlpbnQgaTsKKwlpbnQgbnVtX3RiczsKKworCXRmZCA9ICZ0ZmRfdG1wW2luZGV4XTsKKworCS8qIFNhbml0eSBjaGVjayBvbiBudW1iZXIgb2YgY2h1bmtzICovCisJbnVtX3RicyA9IGl3bF90ZmRfZ2V0X251bV90YnModGZkKTsKKworCWlmIChudW1fdGJzID49IElXTF9OVU1fT0ZfVEJTKSB7CisJCUlXTF9FUlIocHJpdiwgIlRvbyBtYW55IGNodW5rczogJWlcbiIsIG51bV90YnMpOworCQkvKiBAdG9kbyBpc3N1ZSBmYXRhbCBlcnJvciwgaXQgaXMgcXVpdGUgc2VyaW91cyBzaXR1YXRpb24gKi8KKwkJcmV0dXJuOworCX0KKworCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChudW1fdGJzKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCS8qIFVubWFwIGNodW5rcywgaWYgYW55LiAqLworCWZvciAoaSA9IDE7IGkgPCBudW1fdGJzOyBpKyspIHsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGl3bF90ZmRfdGJfZ2V0X2FkZHIodGZkLCBpKSwKKwkJCQlpd2xfdGZkX3RiX2dldF9sZW4odGZkLCBpKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJaWYgKHR4cS0+dHhiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSk7CisJCQl0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0gPSBOVUxMOworCQl9CisJfQorfQorCitpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLAorCQkJCSB1OCByZXNldCwgdTggcGFkKQoreworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bF90ZmQgKnRmZCwgKnRmZF90bXA7CisJdTMyIG51bV90YnM7CisKKwlxID0gJnR4cS0+cTsKKwl0ZmRfdG1wID0gKHN0cnVjdCBpd2xfdGZkICopdHhxLT50ZmRzOworCXRmZCA9ICZ0ZmRfdG1wW3EtPndyaXRlX3B0cl07CisKKwlpZiAocmVzZXQpCisJCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7CisKKwludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOworCisJLyogRWFjaCBURkQgY2FuIHBvaW50IHRvIGEgbWF4aW11bSAyMCBUeCBidWZmZXJzICovCisJaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCisJCQkgIElXTF9OVU1fT0ZfVEJTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJQlVHX09OKGFkZHIgJiB+RE1BX0JJVF9NQVNLKDM2KSk7CisJaWYgKHVubGlrZWx5KGFkZHIgJiB+SVdMX1RYX0RNQV9NQVNLKSkKKwkJSVdMX0VSUihwcml2LCAiVW5hbGlnbmVkIGFkZHJlc3MgPSAlbGx4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOworCisJaXdsX3RmZF9zZXRfdGIodGZkLCBudW1fdGJzLCBhZGRyLCBsZW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUZWxsIG5pYyB3aGVyZSB0byBmaW5kIGNpcmN1bGFyIGJ1ZmZlciBvZiBUeCBGcmFtZSBEZXNjcmlwdG9ycyBmb3IKKyAqIGdpdmVuIFR4IHF1ZXVlLCBhbmQgZW5hYmxlIHRoZSBETUEgY2hhbm5lbCB1c2VkIGZvciB0aGF0IHF1ZXVlLgorICoKKyAqIDQ5NjUgc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQorICogY2hhbm5lbHMgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgorICovCitpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBDaXJjdWxhciBidWZmZXIgKFRGRCBxdWV1ZSBpbiBEUkFNKSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX0NCQkNfUVVFVUUodHhxX2lkKSwKKwkJCSAgICAgdHhxLT5xLmRtYV9hZGRyID4+IDgpOworCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogTWlzYy4gaW50ZXJuYWwgc3RhdGUgYW5kIGhlbHBlciBmdW5jdGlvbnMKQEAgLTQ4Miw3ICs1MzgsNyBAQAogCXN0cnVjdCBpd2xfaHRfaW5mbyAqaXdsX2NvbmYgPSAmcHJpdi0+Y3VycmVudF9odF9jb25maWc7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IFxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogXG4iKTsKIAogCWlmICghaXdsX2NvbmYtPmlzX2h0KQogCQlyZXR1cm47CkBAIC01MjAsOSArNTc2LDkgQEAKIAkgKi8KIAogCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOwotCWlmIChwcml2LT5ody0+Y29uZi5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUykKKwlpZiAoY29uZl9pc19odDQwX21pbnVzKCZwcml2LT5ody0+Y29uZikpCiAJCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19CRUxPVzsKLQllbHNlIGlmKHByaXYtPmh3LT5jb25mLmh0LmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMpCisJZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoJnByaXYtPmh3LT5jb25mKSkKIAkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0FCT1ZFOwogCiAJLyogSWYgbm8gYWJvdmUgb3IgYmVsb3cgY2hhbm5lbCBzdXBwbGllZCBkaXNhYmxlIEZBVCBjaGFubmVsICovCkBAIC01NDIsMzkgKzU5OCw3IEBACiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotfQotCi0vKgotICogUW9TICBzdXBwb3J0Ci0qLwotc3RhdGljIHZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKQotewotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnF1ZXVlX3JlcXVlc3QgJiYKLQkgICAgIXByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC50eG9wX3JlcXVlc3QpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSzsKLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7Ci0KLQlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOwotCi0JaWYgKGZvcmNlIHx8IGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19RT1MoInNlbmQgUW9TIGNtZCB3aXRoIFFvcyBhY3RpdmU9JWQgRkxBR1M9MHglWFxuIiwKLQkJCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlLAotCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MpOwotCi0JCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUU9TX1BBUkFNLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAotCQkJCSAgICAgICAmcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLCBOVUxMKTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKICNkZWZpbmUgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTAk0MDk2CkBAIC01ODgsNiArNjEyLDkgQEAKIAkJCQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKIAorCWlmICghbmV3X3ZhbCkKKwkJbmV3X3ZhbCA9IE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CisKIAlyZXR1cm4gbmV3X3ZhbDsKIH0KIApAQCAtNjI0LDExNyArNjUxLDE2IEBACiAJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsID0gY3B1X3RvX2xlMzIoaW50ZXJ2YWxfdG0gLSByZW0pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19BU1NPQygiYmVhY29uIGludGVydmFsICVkIGJlYWNvbiB0aW1lciAlZCBiZWFjb24gdGltICVkXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiYmVhY29uIGludGVydmFsICVkIGJlYWNvbiB0aW1lciAlZCBiZWFjb24gdGltICVkXG4iLAogCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSwKIAkJCWxlMzJfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCksCiAJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdykpOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KLQkJICAgIH4oUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLCi0JCSAgICAgIHwgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQl9IGVsc2UgewotCQkvKiBDb3BpZWQgZnJvbSBpd2xfcG9zdF9hc3NvY2lhdGUoKSAqLwotCQlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JCWVsc2UKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfQ0NLX01TSzsKLQl9Ci19Ci0KLS8qCi0gKiBpbml0aWFsaXplIHJ4b24gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMgZnJvbSBlZXByb20KLSAqLwotc3RhdGljIHZvaWQgaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0FQOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9FU1M7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0lCU1M7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyA9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLIHwKLQkJCQkJCSAgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX1NOSUZGRVI7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyB8Ci0JCSAgICBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgfCBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSAlZFxuIiwgbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotI2lmIDAKLQkvKiBUT0RPOiAgRmlndXJlIG91dCB3aGVuIHNob3J0X3ByZWFtYmxlIHdvdWxkIGJlIHNldCBhbmQgY2FjaGUgZnJvbQotCSAqIHRoYXQgKi8KLQlpZiAoIWh3X3RvX2xvY2FsKHByaXYtPmh3KS0+c2hvcnRfcHJlYW1ibGUpCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLSNlbmRpZgotCi0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsCi0JCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKLQotCWlmICghY2hfaW5mbykKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQkvKgotCSAqIGluIHNvbWUgY2FzZSBBIGNoYW5uZWxzIGFyZSBhbGwgbm9uIElCU1MKLQkgKiBpbiB0aGlzIGNhc2UgZm9yY2UgQi9HIGNoYW5uZWwKLQkgKi8KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCi0JICAgICEoaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSkKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoX2luZm8tPmNoYW5uZWwpOwotCXByaXYtPmJhbmQgPSBjaF9pbmZvLT5iYW5kOwotCi0JaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBwcml2LT5iYW5kKTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkgICAgKElXTF9PRkRNX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jY2tfYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX0NDS19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gfihSWE9OX0ZMR19DSEFOTkVMX01PREVfTUlYRURfTVNLIHwKLQkJCQkJUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX1BVUkVfNDBfTVNLKTsKLQltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLndsYXBfYnNzaWRfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKLQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyA9IDB4ZmY7Ci0JaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwotfQotCiBzdGF0aWMgaW50IGl3bF9zZXRfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQogewogCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIG1vZGUpOworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAltZW1jcHkocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAogCWl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKQEAgLTc0NSw4ICs2NzEsOCBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CiAJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAwbXNcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTc1NSw1NCArNjgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsX3NldF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpodyA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwotCWludCBpOwotCi0JaHcgPSBpd2xfZ2V0X2h3X21vZGUocHJpdiwgcHJpdi0+YmFuZCk7Ci0JaWYgKCFodykgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBzZXQgcmF0ZTogdW5hYmxlIHRvIGdldCBodyBtb2RlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPmFjdGl2ZV9yYXRlID0gMDsKLQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaHctPm5fYml0cmF0ZXM7IGkrKykgewotCQlyYXRlID0gJihody0+Yml0cmF0ZXNbaV0pOwotCQlpZiAocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVCkKLQkJCXByaXYtPmFjdGl2ZV9yYXRlIHw9ICgxIDw8IHJhdGUtPmh3X3ZhbHVlKTsKLQl9Ci0KLQlJV0xfREVCVUdfUkFURSgiU2V0IGFjdGl2ZV9yYXRlID0gJTB4LCBhY3RpdmVfcmF0ZV9iYXNpYyA9ICUweFxuIiwKLQkJICAgICAgIHByaXYtPmFjdGl2ZV9yYXRlLCBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyk7Ci0KLQkvKgotCSAqIElmIGEgYmFzaWMgcmF0ZSBpcyBjb25maWd1cmVkLCB0aGVuIHVzZSBpdCAoYWRkaW5nIElXTF9SQVRFXzFNX01BU0spCi0JICogb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZGVmYXVsdCBvZiBhbGwgQ0NLIHJhdGVzIGFuZCA2LCAxMiwgMjQgZm9yCi0JICogT0ZETQotCSAqLwotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSykKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgSVdMX0NDS19SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfQ0NLX1JBVEUpICYgMHhGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgKElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBJV0xfUkFURV82TV9NQVNLKSkgPj4KLQkJICAgICAgSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCQkgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci19Ci0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEdlbmVyaWMgUlggaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMKQEAgLTgxNywxOSArNjk1LDE5IEBACiAKIAlwYWxpdmUgPSAmcGt0LT51LmFsaXZlX2ZyYW1lOwogCi0JSVdMX0RFQlVHX0lORk8oIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKIAkJICAgICAgICIweCUwMVggMHglMDFYXG4iLAogCQkgICAgICAgcGFsaXZlLT5pc192YWxpZCwgcGFsaXZlLT52ZXJfdHlwZSwKIAkJICAgICAgIHBhbGl2ZS0+dmVyX3N1YnR5cGUpOwogCiAJaWYgKHBhbGl2ZS0+dmVyX3N1YnR5cGUgPT0gSU5JVElBTElaRV9TVUJUWVBFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsCiAJCSAgICAgICAmcGt0LT51LmFsaXZlX2ZyYW1lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfaW5pdF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmluaXRfYWxpdmVfc3RhcnQ7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlLCAmcGt0LT51LmFsaXZlX2ZyYW1lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfYWxpdmVfcmVzcCkpOwogCQlwd29yayA9ICZwcml2LT5hbGl2ZV9zdGFydDsKQEAgLTg0MSw1NSArNzE5LDcgQEAKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgcHdvcmssCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyg1KSk7CiAJZWxzZQotCQlJV0xfV0FSTklORygidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9yZXBseV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCi0JSVdMX0VSUk9SKCJFcnJvciBSZXBseSB0eXBlIDB4JTA4WCBjbWQgJXMgKDB4JTAyWCkgIgotCQkic2VxIDB4JTA0WCBzZXIgMHglMDhYXG4iLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfdHlwZSksCi0JCWdldF9jbWRfc3RyaW5nKHBrdC0+dS5lcnJfcmVzcC5jbWRfaWQpLAotCQlwa3QtPnUuZXJyX3Jlc3AuY21kX2lkLAotCQlsZTE2X3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuYmFkX2NtZF9zZXFfbnVtKSwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX2luZm8pKTsKLX0KLQotI2RlZmluZSBUWF9TVEFUVVNfRU5UUlkoeCkgY2FzZSBUWF9TVEFUVVNfRkFJTF8gIyMgeDogcmV0dXJuICN4Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiAqY3NhID0gJihwa3QtPnUuY3NhX25vdGlmKTsKLQlJV0xfREVCVUdfMTFIKCJDU0Egbm90aWY6IGNoYW5uZWwgJWQsIHN0YXR1cyAlZFxuIiwKLQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSwgbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpKTsKLQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotfQotCi1zdGF0aWMgdm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2xfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKLQlJV0xfREVCVUdfUlgoInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAotCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUkFESU8oIkR1bXBpbmcgJWQgYnl0ZXMgb2YgdW5oYW5kbGVkICIKLQkJCSJub3RpZmljYXRpb24gZm9yICVzOlxuIiwKLQkJCWxlMzJfdG9fY3B1KHBrdC0+bGVuKSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSk7Ci0JaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKKwkJSVdMX1dBUk4ocHJpdiwgInVDb2RlIGRpZCBub3QgcmVzcG9uZCBPSy5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCBpd2xfYmdfYmVhY29uX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC05MDIsNyArNzMyLDcgQEAKIAliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LT5odywgcHJpdi0+dmlmKTsKIAogCWlmICghYmVhY29uKSB7Ci0JCUlXTF9FUlJPUigidXBkYXRlIGJlYWNvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk1MCw3ICs3ODAsNyBAQAogCQkoc3RydWN0IGl3bDQ5NjVfYmVhY29uX25vdGlmICopcGt0LT51LnJhdzsKIAl1OCByYXRlID0gaXdsX2h3X2dldF9yYXRlKGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIucmF0ZV9uX2ZsYWdzKTsKIAotCUlXTF9ERUJVR19SWCgiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCisJSVdMX0RFQlVHX1JYKHByaXYsICJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKIAkJInRzZiAlZCAlZCByYXRlICVkXG4iLAogCQlsZTMyX3RvX2NwdShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnUuc3RhdHVzKSAmIFRYX1NUQVRVU19NU0ssCiAJCWJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIuZmFpbHVyZV9mcmFtZSwKQEAgLTk3Myw3ICs4MDMsNyBAQAogCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KHBrdC0+dS5jYXJkX3N0YXRlX25vdGlmLmZsYWdzKTsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCiAJCQkgIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIiwKIAkJCSAgKGZsYWdzICYgU1dfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iKTsKIApAQCAtMTA0NiwxMSArODc2LDcgQEAKIAkJZ290byBlcnI7CiAKIAlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKLQkJdTMyIHZhbDsKLQkJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DRkdfUE9XRVJfU09VUkNFLAotCQkJCQkgICAgJnZhbCk7Ci0KLQkJaWYgKHZhbCAmIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUKQorCQlpZiAocGNpX3BtZV9jYXBhYmxlKHByaXYtPnBjaV9kZXYsIFBDSV9EM2NvbGQpKQogCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQkgICAgICAgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZBVVgsCiAJCQkJCSAgICAgICB+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKQEAgLTExMzUsNyArOTYxLDcgQEAKIAogCS8qIFJ4IGludGVycnVwdCwgYnV0IG5vdGhpbmcgc2VudCBmcm9tIHVDb2RlICovCiAJaWYgKGkgPT0gcikKLQkJSVdMX0RFQlVHKElXTF9ETF9SWCwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CiAKIAlpZiAoaXdsX3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAoUlhfUVVFVUVfU0laRSAvIDIpKQogCQlmaWxsX3J4ID0gMTsKQEAgLTExNzUsMTIgKzEwMDEsMTIgQEAKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgogCQkgKiAgIHJ4X2hhbmRsZXJzIHRhYmxlLiAgU2VlIGl3bF9zZXR1cF9yeF9oYW5kbGVycygpICovCiAJCWlmIChwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdKSB7Ci0JCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsCisJCQlJV0xfREVCVUdfUlgocHJpdiwgInIgPSAlZCwgaSA9ICVkLCAlcywgMHglMDJ4XG4iLCByLAogCQkJCWksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksIHBrdC0+aGRyLmNtZCk7CiAJCQlwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdIChwcml2LCByeGIpOwogCQl9IGVsc2UgewogCQkJLyogTm8gaGFuZGxpbmcgbmVlZGVkICovCi0JCQlJV0xfREVCVUcoSVdMX0RMX1JYLAorCQkJSVdMX0RFQlVHX1JYKHByaXYsCiAJCQkJInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CkBAIC0xMTkzLDcgKzEwMTksNyBAQAogCQkJaWYgKHJ4YiAmJiByeGItPnNrYikKIAkJCQlpd2xfdHhfY21kX2NvbXBsZXRlKHByaXYsIHJ4Yik7CiAJCQllbHNlCi0JCQkJSVdMX1dBUk5JTkcoIkNsYWltIG51bGwgcnhiP1xuIik7CisJCQkJSVdMX1dBUk4ocHJpdiwgIkNsYWltIG51bGwgcnhiP1xuIik7CiAJCX0KIAogCQkvKiBGb3Igbm93IHdlIGp1c3QgZG9uJ3QgcmUtdXNlIGFueXRoaW5nLiAgV2UgY2FuIHR3ZWFrIHRoaXMKQEAgLTEyMjksMjcgKzEwNTUsNiBAQAogCWl3bF9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyB2b2lkIGl3bF9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKLQotCUlXTF9ERUJVR19SQURJTygiUlggQ09ORklHOlxuIik7Ci0JaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SQURJTywgKHU4ICopIHJ4b24sIHNpemVvZigqcnhvbikpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGNoYW5uZWw6IDB4JXhcbiIsIGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpKTsKLQlJV0xfREVCVUdfUkFESU8oInUzMiBmbGFnczogMHglMDhYXG4iLCBsZTMyX3RvX2NwdShyeG9uLT5mbGFncykpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZpbHRlcl9mbGFnczogMHglMDh4XG4iLAotCQkJbGUzMl90b19jcHUocnhvbi0+ZmlsdGVyX2ZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBkZXZfdHlwZTogMHgleFxuIiwgcnhvbi0+ZGV2X3R5cGUpOwotCUlXTF9ERUJVR19SQURJTygidTggb2ZkbV9iYXNpY19yYXRlczogMHglMDJ4XG4iLAotCQkJcnhvbi0+b2ZkbV9iYXNpY19yYXRlcyk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBjY2tfYmFzaWNfcmF0ZXM6IDB4JTAyeFxuIiwgcnhvbi0+Y2NrX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4WzZdIG5vZGVfYWRkcjogJXBNXG4iLCByeG9uLT5ub2RlX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gYnNzaWRfYWRkcjogJXBNXG4iLCByeG9uLT5ic3NpZF9hZGRyKTsKLQlJV0xfREVCVUdfUkFESU8oInUxNiBhc3NvY19pZDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpKTsKLX0KLSNlbmRpZgotCiAvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC0xMjU4LDQ1ICsxMDYzLDYgQEAKIAl0YXNrbGV0X2tpbGwoJnByaXYtPmlycV90YXNrbGV0KTsKIH0KIAotLyoqCi0gKiBpd2xfaXJxX2hhbmRsZV9lcnJvciAtIGNhbGxlZCBmb3IgSFcgb3IgU1cgZXJyb3IgaW50ZXJydXB0IGZyb20gY2FyZAotICovCi1zdGF0aWMgdm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsX2Rvd24gKi8KLQlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLwotCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7Ci0JCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7Ci0JCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdik7Ci0JCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOwotCX0KLSNlbmRpZgotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KLQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9GV19FUlJPUlMsCi0JCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7Ci0KLQkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOwotCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7Ci0JCX0KLQkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBpd2xfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzQxLDcgKzExMDcsNyBAQAogCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKIAkJLyoganVzdCBmb3IgZGVidWcgKi8KIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwotCQlJV0xfREVCVUdfSVNSKCJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCiAJCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwogCX0KICNlbmRpZgpAQCAtMTM1Nyw3ICsxMTIzLDcgQEAKIAogCS8qIE5vdyBzZXJ2aWNlIGFsbCBpbnRlcnJ1cHQgYml0cyBkaXNjb3ZlcmVkIGFib3ZlLiAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfSFdfRVJSKSB7Ci0JCUlXTF9FUlJPUigiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CiAKIAkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CkBAIC0xMzc1LDEyICsxMTQxLDEyIEBACiAJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CiAJCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KIAkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpCi0JCQlJV0xfREVCVUdfSVNSKCJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgorCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKIAkJCQkgICAgICAidGhlIGZyYW1lL2ZyYW1lcy5cbiIpOwogCiAJCS8qIEFsaXZlIG5vdGlmaWNhdGlvbiB2aWEgUnggaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlYWwgd29yayAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0FMSVZFKQotCQkJSVdMX0RFQlVHX0lTUigiQWxpdmUgaW50ZXJydXB0XG4iKTsKKwkJCUlXTF9ERUJVR19JU1IocHJpdiwgIkFsaXZlIGludGVycnVwdFxuIik7CiAJfQogI2VuZGlmCiAJLyogU2FmZWx5IGlnbm9yZSB0aGVzZSBiaXRzIGZvciBkZWJ1ZyBjaGVja3MgYmVsb3cgKi8KQEAgLTEzOTMsMTcgKzExNTksMjAgQEAKIAkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykpCiAJCQlod19yZl9raWxsID0gMTsKIAotCQlJV0xfREVCVUcoSVdMX0RMX1JGX0tJTEwsICJSRl9LSUxMIGJpdCB0b2dnbGVkIHRvICVzLlxuIiwKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAogCQkJCWh3X3JmX2tpbGwgPyAiZGlzYWJsZSByYWRpbyIgOiAiZW5hYmxlIHJhZGlvIik7CiAKIAkJLyogZHJpdmVyIG9ubHkgbG9hZHMgdWNvZGUgb25jZSBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgdXAuCi0JCSAqIHRoZSBkcml2ZXIgYXMgd2VsbCB3b24ndCBhbGxvdyBsb2FkaW5nIGlmIFJGS0lMTCBpcyBzZXQKLQkJICogdGhlcmVmb3JlIG5vIG5lZWQgdG8gcmVzdGFydCB0aGUgZHJpdmVyIGZyb20gdGhpcyBoYW5kbGVyCisJCSAqIHRoZSBkcml2ZXIgYWxsb3dzIGxvYWRpbmcgdGhlIHVjb2RlIGV2ZW4gaWYgdGhlIHJhZGlvCisJCSAqIGlzIGtpbGxlZC4gSGVuY2UgdXBkYXRlIHRoZSBraWxsc3dpdGNoIHN0YXRlIGhlcmUuIFRoZQorCQkgKiByZmtpbGwgaGFuZGxlciB3aWxsIGNhcmUgYWJvdXQgcmVzdGFydGluZyBpZiBuZWVkZWQuCiAJCSAqLwotCQlpZiAoIWh3X3JmX2tpbGwgJiYgIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Ci0JCQlpZiAocHJpdi0+aXNfb3BlbiAmJiAhaXdsX2lzX3Jma2lsbChwcml2KSkKLQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKKwkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKSB7CisJCQlpZiAoaHdfcmZfa2lsbCkKKwkJCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwkJCWVsc2UKKwkJCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZl9raWxsKTsKIAkJfQogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfUkZfS0lMTDsKQEAgLTE0MTEsMjEgKzExODAsMjEgQEAKIAogCS8qIENoaXAgZ290IHRvbyBob3QgYW5kIHN0b3BwZWQgaXRzZWxmICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9DVF9LSUxMKSB7Ci0JCUlXTF9FUlJPUigiTWljcm9jb2RlIENUIGtpbGwgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIENUIGtpbGwgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9DVF9LSUxMOwogCX0KIAogCS8qIEVycm9yIGRldGVjdGVkIGJ5IHVDb2RlICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nIDB4JVguXG4iLAotCQkJICBpbnRhKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIFNXIGVycm9yIGRldGVjdGVkLiAiCisJCQkiIFJlc3RhcnRpbmcgMHglWC5cbiIsIGludGEpOwogCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7CiAJfQogCiAJLyogdUNvZGUgd2FrZXMgdXAgYWZ0ZXIgcG93ZXItZG93biBzbGVlcCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IoIldha2V1cCBpbnRlcnJ1cHRcbiIpOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJXYWtldXAgaW50ZXJydXB0XG4iKTsKIAkJaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7CiAJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKIAkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOwpAQCAtMTQ0Niw3ICsxMjE1LDcgQEAKIAl9CiAKIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0ZIX1RYKSB7Ci0JCUlXTF9ERUJVR19JU1IoIlR4IGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIlR4IGludGVycnVwdFxuIik7CiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfRkhfVFg7CiAJCS8qIEZIIGZpbmlzaGVkIHRvIHdyaXRlLCBzZW5kIGV2ZW50ICovCiAJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlID0gMTsKQEAgLTE0NTQsMTIgKzEyMjMsMTIgQEAKIAl9CiAKIAlpZiAoaW50YSAmIH5oYW5kbGVkKQotCQlJV0xfRVJST1IoIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOworCQlJV0xfRVJSKHByaXYsICJVbmhhbmRsZWQgSU5UQSBiaXRzIDB4JTA4eFxuIiwgaW50YSAmIH5oYW5kbGVkKTsKIAogCWlmIChpbnRhICYgfkNTUl9JTklfU0VUX01BU0spIHsKLQkJSVdMX1dBUk5JTkcoIkRpc2FibGVkIElOVEEgYml0cyAweCUwOHggd2VyZSBwZW5kaW5nXG4iLAorCQlJV0xfV0FSTihwcml2LCAiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCiAJCQkgaW50YSAmIH5DU1JfSU5JX1NFVF9NQVNLKTsKLQkJSVdMX1dBUk5JTkcoIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKKwkJSVdMX1dBUk4ocHJpdiwgIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KQEAgLTE0NzIsNzEgKzEyNDEsMTMgQEAKIAkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCQlJV0xfREVCVUdfSVNSKCJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCiAJCQkiZmxhZ3MgMHglMDhseFxuIiwgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoLCBmbGFncyk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXdsX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JdTMyIGludGEsIGludGFfbWFzazsKLQl1MzIgaW50YV9maDsKLQlpZiAoIXByaXYpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLQkvKiBEaXNhYmxlIChidXQgZG9uJ3QgY2xlYXIhKSBpbnRlcnJ1cHRzIGhlcmUgdG8gYXZvaWQKLQkgKiAgICBiYWNrLXRvLWJhY2sgSVNScyBhbmQgc3BvcmFkaWMgaW50ZXJydXB0cyBmcm9tIG91ciBOSUMuCi0JICogSWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gc2VydmljZSwgdGhlIHRhc2tsZXQgd2lsbCByZS1lbmFibGUgaW50cy4KLQkgKiBJZiB3ZSAqZG9uJ3QqIGhhdmUgc29tZXRoaW5nLCB3ZSdsbCByZS1lbmFibGUgYmVmb3JlIGxlYXZpbmcgaGVyZS4gKi8KLQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQotCS8qIElnbm9yZSBpbnRlcnJ1cHQgaWYgdGhlcmUncyBub3RoaW5nIGluIE5JQyB0byBzZXJ2aWNlLgotCSAqIFRoaXMgbWF5IGJlIGR1ZSB0byBJUlEgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UsCi0JICogb3IgZHVlIHRvIHNwb3JhZGljIGludGVycnVwdHMgdGhyb3duIGZyb20gb3VyIE5JQy4gKi8KLQlpZiAoIWludGEgJiYgIWludGFfZmgpIHsKLQkJSVdMX0RFQlVHX0lTUigiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOwotCQlnb3RvIG5vbmU7Ci0JfQotCi0JaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7Ci0JCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkLiBJdCBtaWdodCBoYXZlIGFscmVhZHkgcmFpc2VkCi0JCSAqIGFuIGludGVycnVwdCAqLwotCQlJV0xfV0FSTklORygiSEFSRFdBUkUgR09ORT8/IElOVEEgPT0gMHglMDh4XG4iLCBpbnRhKTsKLQkJZ290byB1bnBsdWdnZWQ7Ci0JfQotCi0JSVdMX0RFQlVHX0lTUigiSVNSIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAotCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwotCi0JaW50YSAmPSB+Q1NSX0lOVF9CSVRfU0NEOwotCi0JLyogaXdsX2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCi0JaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci0KLSB1bnBsdWdnZWQ6Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLQotIG5vbmU6Ci0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaGVyZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHNlcnZpY2UuICovCi0JLyogb25seSBSZS1lbmFibGUgaWYgZGlhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB1Q29kZSBkb3dubG9hZCBmdW5jdGlvbnMKQEAgLTE1ODQsNyArMTI5NSw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMlZCVzIiwgbmFtZV9wcmUsIGluZGV4LCAiLnVjb2RlIik7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVjb2RlX3JhdywgYnVmLCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiBSZWFzb24gJWRcbiIsCisJCQlJV0xfRVJSKHByaXYsICIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6ICVkXG4iLAogCQkJCSAgYnVmLCByZXQpOwogCQkJaWYgKHJldCA9PSAtRU5PRU5UKQogCQkJCWNvbnRpbnVlOwpAQCAtMTU5Miw5ICsxMzAzLDEyIEBACiAJCQkJZ290byBlcnJvcjsKIAkJfSBlbHNlIHsKIAkJCWlmIChpbmRleCA8IGFwaV9tYXgpCi0JCQkJSVdMX0VSUk9SKCJMb2FkZWQgZmlybXdhcmUgJXMsIHdoaWNoIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKKwkJCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgZmlybXdhcmUgJXMsICIKKwkJCQkJIndoaWNoIGlzIGRlcHJlY2F0ZWQuICIKKwkJCQkJIlBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKIAkJCQkJICBidWYsIGFwaV9tYXgpOwotCQkJSVdMX0RFQlVHX0lORk8oIkdvdCBmaXJtd2FyZSAnJXMnIGZpbGUgKCV6ZCBieXRlcykgZnJvbSBkaXNrXG4iLAorCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCiAJCQkJICAgICAgIGJ1ZiwgdWNvZGVfcmF3LT5zaXplKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjA1LDcgKzEzMTksNyBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgZ290IGF0IGxlYXN0IG91ciBoZWFkZXIhICovCiAJaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IHNpemVvZigqdWNvZGUpKSB7Ci0JCUlXTF9FUlJPUigiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC0xNjI2LDcgKzEzNDAsNyBAQAogCSAqIG9uIHRoZSBBUEkgdmVyc2lvbiByZWFkIGZyb20gZmlyd2FyZSBoZWFkZXIgZnJvbSBoZXJlIG9uIGZvcndhcmQgKi8KIAogCWlmIChhcGlfdmVyIDwgYXBpX21pbiB8fCBhcGlfdmVyID4gYXBpX21heCkgewotCQlJV0xfRVJST1IoIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgorCQlJV0xfRVJSKHByaXYsICJEcml2ZXIgdW5hYmxlIHRvIHN1cHBvcnQgeW91ciBmaXJtd2FyZSBBUEkuICIKIAkJCSAgIkRyaXZlciBzdXBwb3J0cyB2JXUsIGZpcm13YXJlIGlzIHYldS5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCQlwcml2LT51Y29kZV92ZXIgPSAwOwpAQCAtMTYzNCwyOCArMTM0OCwyOCBAQAogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAlpZiAoYXBpX3ZlciAhPSBhcGlfbWF4KQotCQlJV0xfRVJST1IoIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkIHYldSwgIgorCQlJV0xfRVJSKHByaXYsICJGaXJtd2FyZSBoYXMgb2xkIEFQSSB2ZXJzaW9uLiBFeHBlY3RlZCB2JXUsICIKIAkJCSAgImdvdCB2JXUuIE5ldyBmaXJtd2FyZSBjYW4gYmUgb2J0YWluZWQgIgogCQkJICAiZnJvbSBodHRwOi8vd3d3LmludGVsbGludXh3aXJlbGVzcy5vcmcuXG4iLAogCQkJICBhcGlfbWF4LCBhcGlfdmVyKTsKIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiBsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKLQkJICAgICAgIElXTF9VQ09ERV9NQUpPUihwcml2LT51Y29kZV92ZXIpLAotCQkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfU0VSSUFMKHByaXYtPnVjb2RlX3ZlcikpOworCUlXTF9JTkZPKHByaXYsICJsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKKwkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9NSU5PUihwcml2LT51Y29kZV92ZXIpLAorCSAgICAgICBJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CiAKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHVjb2RlIHZlcnNpb24gcmF3ID0gMHgleFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHVjb2RlIHZlcnNpb24gcmF3ID0gMHgleFxuIiwKIAkJICAgICAgIHByaXYtPnVjb2RlX3Zlcik7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBpbnN0IHNpemUgPSAldVxuIiwKIAkJICAgICAgIGluc3Rfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBkYXRhIHNpemUgPSAldVxuIiwKIAkJICAgICAgIGRhdGFfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBpbml0IGluc3Qgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwKIAkJICAgICAgIGluaXRfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBkYXRhIHNpemUgPSAldVxuIiwKIAkJICAgICAgIGluaXRfZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBib290IGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgYm9vdF9zaXplKTsKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCkBAIC0xNjYzLDcgKzEzNzcsNyBAQAogCQlpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemUgKwogCQlpbml0X2RhdGFfc2l6ZSArIGJvb3Rfc2l6ZSkgewogCi0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICVkIHRvbyBzbWFsbFxuIiwKIAkJCSAgICAgICAoaW50KXVjb2RlX3Jhdy0+c2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CkBAIC0xNjcxLDM2ICsxMzg1LDMzIEBACiAKIAkvKiBWZXJpZnkgdGhhdCB1Q29kZSBpbWFnZXMgd2lsbCBmaXQgaW4gY2FyZCdzIFNSQU0gKi8KIAlpZiAoaW5zdF9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgaW5zdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAlpZiAoZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWRhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChpbml0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTwotCQkgICAgKCJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAotCQkgICAgICBpbml0X3NpemUpOworCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgaW5pdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJCWluaXRfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChpbml0X2RhdGFfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJSVdMX0lORk8ocHJpdiwgInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJICAgICAgaW5pdF9kYXRhX3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAlpZiAoYm9vdF9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTwotCQkgICAgKCJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAotCQkgICAgICBib290X3NpemUpOworCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgYm9vdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJCWJvb3Rfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQpAQCAtMTc0OSwxNiArMTQ2MCwxNiBAQAogCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb25zIChmaXJzdCBibG9jayBvZiBkYXRhIGluIGZpbGUpICovCiAJc3JjID0gJnVjb2RlLT5kYXRhWzBdOwogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfY29kZS52X2FkZHIsIHNyYywgbGVuKTsKLQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGluc3RyIGJ1ZiB2YWRkciA9IDB4JXAsIHBhZGRyID0gMHglMDh4XG4iLAogCQlwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgKHUzMilwcml2LT51Y29kZV9jb2RlLnBfYWRkcik7CiAKIAkvKiBSdW50aW1lIGRhdGEgKDJuZCBibG9jaykKIAkgKiBOT1RFOiAgQ29weSBpbnRvIGJhY2t1cCBidWZmZXIgd2lsbCBiZSBkb25lIGluIGl3bF91cCgpICAqLwogCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2RhdGEubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgc3JjLCBsZW4pOwogCkBAIC0xNzY2LDcgKzE0NzcsNyBAQAogCWlmIChpbml0X3NpemUpIHsKIAkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07CiAJCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlWmRcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICVaZFxuIiwKIAkJCQlsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdC52X2FkZHIsIHNyYywgbGVuKTsKIAl9CkBAIC0xNzc1LDcgKzE0ODYsNyBAQAogCWlmIChpbml0X2RhdGFfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKLQkJSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlWmRcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgZGF0YSBsZW4gJVpkXG4iLAogCQkJICAgICAgIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0X2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJfQpAQCAtMTc4Myw3ICsxNDk0LDcgQEAKIAkvKiBCb290c3RyYXAgaW5zdHJ1Y3Rpb25zICg1dGggYmxvY2spICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArIGluaXRfZGF0YV9zaXplXTsKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgYm9vdCBpbnN0ciBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9ib290LnZfYWRkciwgc3JjLCBsZW4pOwogCiAJLyogV2UgaGF2ZSBvdXIgY29waWVzIG5vdywgYWxsb3cgT1MgcmVsZWFzZSBpdHMgY29waWVzICovCkBAIC0xNzkxLDcgKzE1MDIsNyBAQAogCXJldHVybiAwOwogCiAgZXJyX3BjaV9hbGxvYzoKLQlJV0xfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKKwlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcGNpIG1lbW9yeVxuIik7CiAJcmV0ID0gLUVOT01FTTsKIAlpd2xfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKQEAgLTE4MTUsMTIgKzE1MjYsMTIgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAogCWlmIChwcml2LT5jYXJkX2FsaXZlLmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTE4MzAsMTUgKzE1NDEsMTUgQEAKIAlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCiAJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFsaXZlX25vdGlmeShwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsCi0JCQkgICAgcmV0KTsKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsIHJldCk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTE4NjMsNiArMTU3NCw3IEBACiAJfSBlbHNlIHsKIAkJLyogSW5pdGlhbGl6ZSBvdXIgcnhfY29uZmlnIGRhdGEgKi8KIAkJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgcHJpdi0+aXdfbW9kZSk7CisJCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAkJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCkBAIC0xODc5LDcgKzE1OTEsNyBAQAogCiAJaXdsX2xlZHNfcmVnaXN0ZXIocHJpdik7CiAKLQlJV0xfREVCVUdfSU5GTygiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7CiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIApAQCAtMTkxMyw3ICsxNjI1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBleGl0X3BlbmRpbmcgPSB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBnb2luZyBkb3duXG4iKTsKIAogCWlmICghZXhpdF9wZW5kaW5nKQogCQlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwpAQCAtMjAyNCwxMiArMTczNiwxMiBAQAogCWludCByZXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX1dBUk5JTkcoIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoIXByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciB8fCAhcHJpdi0+dWNvZGVfZGF0YS52X2FkZHIpIHsKLQkJSVdMX0VSUk9SKCJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZ3VwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMDQxLDcgKzE3NTMsNyBAQAogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgJXMgUkYgS2lsbCBzd2l0Y2hcbiIsCisJCUlXTF9XQVJOKHByaXYsICJSYWRpbyBkaXNhYmxlZCBieSAlcyBSRiBLaWxsIHN3aXRjaFxuIiwKIAkJICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSA/ICJIVyIgOiAiU1ciKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjA1MCw3ICsxNzYyLDcgQEAKIAogCXJldCA9IGl3bF9od19uaWNfaW5pdChwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXQgbmljXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXQgbmljXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIwODMsNyArMTc5NSw4IEBACiAJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmxvYWRfdWNvZGUocHJpdik7CiAKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsCisJCQkJcmV0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIwOTMsNyArMTgwNiw3IEBACiAJCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwogCQlpd2xfbmljX3N0YXJ0KHByaXYpOwogCi0JCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBjb21pbmcgdXBcbiIpOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTIxMDQsNyArMTgxNyw3IEBACiAKIAkvKiB0cmllZCB0byByZXN0YXJ0IGFuZCBjb25maWcgdGhlIGRldmljZSBmb3IgYXMgbG9uZyBhcyBvdXIKIAkgKiBwYXRpZW5jZSBjb3VsZCB3aXRoc3RhbmQgKi8KLQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIGRldmljZSBhZnRlciAlZCBhdHRlbXB0cy5cbiIsIGkpOworCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIGRldmljZSBhZnRlciAlZCBhdHRlbXB0cy5cbiIsIGkpOwogCXJldHVybiAtRUlPOwogfQogCkBAIC0yMTQxLDQwICsxODU0LDYgQEAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsX2JnX3JmX2tpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIHJmX2tpbGwpOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLAotCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCi0JCQkgICJkZXZpY2VcbiIpOwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9IGVsc2UgewotCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCi0JCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQotCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKLQotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKLQkJCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKLQkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKLQkJZWxzZQotCQkJSVdMX1dBUk5JTkcoIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKLQkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgotCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7Ci0JfQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfYmdfcnVuX3RpbWVfY2FsaWJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKQEAgLTIyNDQsMTEgKzE5MjMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCUlXTF9ERUJVR19BU1NPQygiQXNzb2NpYXRlZCBhcyAlZCB0bzogJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQXNzb2NpYXRlZCBhcyAlZCB0bzogJXBNXG4iLAogCQkJcHJpdi0+YXNzb2NfaWQsIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpOwogCiAKQEAgLTIyNzEsNyArMTk1MCw3IEBACiAJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCSAgICAgIHNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CiAJaWYgKHJldCkKLQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCSAgICAiQXR0ZW1wdGluZyB0byBjb250aW51ZS5cbiIpOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CkBAIC0yMjgxLDcgKzE5NjAsNyBAQAogCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAlwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgPSBjcHVfdG9fbGUxNihwcml2LT5hc3NvY19pZCk7CiAKLQlJV0xfREVCVUdfQVNTT0MoImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5iZWFjb25faW50KTsKIAogCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKQpAQCAtMjMxNyw3ICsxOTk2LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCiAJCQkgIF9fZnVuY19fLCBwcml2LT5pd19tb2RlKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjM1MywzMCArMjAzMiw4IEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJldDsKLQl1MTYgcGNpX2NtZDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpKSB7Ci0JCUlXTF9FUlJPUigiRmFpbCB0byBwY2lfZW5hYmxlX2RldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwY2lfcmVzdG9yZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7Ci0JaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKLQkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgaXdsX2lzciwgSVJRRl9TSEFSRUQsCi0JCQkgIERSVl9OQU1FLCBwcml2KTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7Ci0JCWdvdG8gb3V0X2Rpc2FibGVfbXNpOwotCX0KKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCS8qIHdlIHNob3VsZCBiZSB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyByZWFkeSB0byBiZSBvcGVuZWQgKi8KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CkBAIC0yMzg4LDkgKzIwNDUsOSBAQAogCWlmICghcHJpdi0+dWNvZGVfY29kZS5sZW4pIHsKIAkJcmV0ID0gaXdsX3JlYWRfdWNvZGUocHJpdik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHJlYWQgbWljcm9jb2RlOiAlZFxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtMjQwMSwxMiArMjA1OCwxMiBAQAogCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogCiAJaWYgKHJldCkKLQkJZ290byBvdXRfcmVsZWFzZV9pcnE7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJZ290byBvdXQ7CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhcnQgVVAgd29yayBkb25lLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0IFVQIHdvcmsgZG9uZS5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CkBAIC0yNDE4LDM2ICsyMDc1LDI2IEBACiAJCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCiAJCQkJamlmZmllc190b19tc2VjcyhVQ09ERV9SRUFEWV9USU1FT1VUKSk7Ci0JCQlyZXQgPSAtRVRJTUVET1VUOwotCQkJZ290byBvdXRfcmVsZWFzZV9pcnE7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCX0KIAogb3V0OgogCXByaXYtPmlzX29wZW4gPSAxOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwotCi1vdXRfcmVsZWFzZV9pcnE6Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLW91dF9kaXNhYmxlX21zaToKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwotCXByaXYtPmlzX29wZW4gPSAwOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBmYWlsZWRcbiIpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFwcml2LT5pc19vcGVuKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBza2lwXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNraXBcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDY1LDI3ICsyMTEyLDI3IEBACiAJaXdsX2Rvd24ocHJpdik7CiAKIAlmbHVzaF93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKLQlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOwotCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQlwY2lfc2F2ZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGNpX2Rldik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwkvKiBlbmFibGUgaW50ZXJydXB0cyBhZ2FpbiBpbiBvcmRlciB0byByZWNlaXZlIHJma2lsbCBjaGFuZ2VzICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUNEVU1QKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQ0RVTVAocHJpdiwgImVudGVyXG4iKTsKIAotCUlXTF9ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCisJSVdMX0RFQlVHX1RYKHByaXYsICJkZXYtPnhtaXQoJWQgYnl0ZXMpIGF0IHJhdGUgMHglMDJ4XG4iLCBza2ItPmxlbiwKIAkJICAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSktPmJpdHJhdGUpOwogCiAJaWYgKGl3bF90eF9za2IocHJpdiwgc2tiKSkKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAotCUlXTF9ERUJVR19NQUNEVU1QKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQ0RVTVAocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0yNDk1LDEwICsyMTQyLDEwIEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOwogCiAJaWYgKHByaXYtPnZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC0yNTExLDcgKzIxNTgsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChjb25mLT5tYWNfYWRkcikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIlNldCAlcE1cbiIsIGNvbmYtPm1hY19hZGRyKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJTZXQgJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CiAJCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9CiAKQEAgLTI1MjEsNyArMjE2OCw3IEBACiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTQyLDEyICsyMTg5LDEyIEBACiAJdTE2IGNoYW5uZWw7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CiAKLQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCA9IGNvbmYtPmh0LmVuYWJsZWQ7CisJcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOwogCiAJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRi1LSUxMIC0gd2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYtS0lMTCAtIHdhaXRpbmcgZm9yIHVDb2RlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTU1LDE0ICsyMjAyLDE0IEBACiAJCWl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8ocHJpdik7CiAKIAlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICh1bmxpa2VseSghcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4gJiYKIAkJICAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2Nhbm5pbmdcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gc2Nhbm5pbmdcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjU3MCwxNCArMjIxNywxNCBAQAogCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLCBjaGFubmVsKTsKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGludmFsaWQgY2hhbm5lbFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgogCSAgICAhaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSB7Ci0JCUlXTF9FUlJPUigiY2hhbm5lbCAlZCBpbiBiYW5kICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCisJCUlXTF9FUlIocHJpdiwgImNoYW5uZWwgJWQgaW4gYmFuZCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAogCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTI2MTUsMTIgKzIyNjIsMTIgQEAKICNlbmRpZgogCiAJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBraWxsXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIGtpbGxcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNjMwLDIyICsyMjc3LDI1IEBACiAJZWxzZQogCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTU9ERV9DQU0pOwogCWlmIChyZXQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoIlRYIFBvd2VyIG9sZD0lZCBuZXc9JWRcbiIsCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJUWCBQb3dlciBvbGQ9JWQgbmV3PSVkXG4iLAogCQkJICAgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIGNvbmYtPnBvd2VyX2xldmVsKTsKIAogCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgY29uZi0+cG93ZXJfbGV2ZWwsIGZhbHNlKTsKIAogCWl3bF9zZXRfcmF0ZShwcml2KTsKIAorCS8qIGNhbGwgdG8gZW5zdXJlIHRoYXQgNDk2NSByeF9jaGFpbiBpcyBzZXQgcHJvcGVybHkgaW4gbW9uaXRvciBtb2RlICovCisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOworCiAJaWYgKG1lbWNtcCgmcHJpdi0+YWN0aXZlX3J4b24sCiAJCSAgICZwcml2LT5zdGFnaW5nX3J4b24sIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKSkKIAkJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogCWVsc2UKLQkJSVdMX0RFQlVHX0lORk8oIk5vIHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vIHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CkBAIC0yNjcyLDcgKzIzMjIsNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAogCQkJCXNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CiAJCWlmIChyZXQpCi0JCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgorCQkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCQkJIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CkBAIC0yNzI2LDcgKzIzNzYsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChwcml2LT52aWYgIT0gdmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI3NDgsNyArMjM5OCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGNvbmYtPmJzc2lkKQotCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkOiAlcE1cbiIsIGNvbmYtPmJzc2lkKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CiAKIC8qCiAgKiB2ZXJ5IGR1YmlvdXMgY29kZSB3YXMgaGVyZTsgdGhlIHByb2JlIGZpbHRlcmluZyBmbGFnIGlzIG5ldmVyIHNldDoKQEAgLTI3NjEsNyArMjQxMSw3IEBACiAJCWlmICghY29uZi0+YnNzaWQpIHsKIAkJCWNvbmYtPmJzc2lkID0gcHJpdi0+bWFjX2FkZHI7CiAJCQltZW1jcHkocHJpdi0+YnNzaWQsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQgd2FzIHNldCB0bzogJXBNXG4iLAogCQkJCQkgICBjb25mLT5ic3NpZCk7CiAJCX0KIAkJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtMjc3OCw5ICsyNDI4LDkgQEAKIAkJLyogSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgSFcgc2NhbiBnb2luZyBvbiBpbiB0aGUgYmFja2dyb3VuZAogCQkgKiB0aGVuIHdlIG5lZWQgdG8gY2FuY2VsIGl0IGVsc2UgdGhlIFJYT04gYmVsb3cgd2lsbCBmYWlsLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCisJCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzICIKIAkJCQkgICAgImFmdGVyIDEwMG1zXG4iKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQpAQCAtMjgwOCw2NCArMjQ1OCwxOCBAQAogCX0KIAogIGRvbmU6Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKLQkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7Ci0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCX0KLQotCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncwotCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgotCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCi0JICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgotCSAqLwotCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAotCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKLX0KLQogc3RhdGljIHZvaWQgaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIApAQCAtMjg4MCw3ICsyNDg0LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogfQogCkBAIC0yODkyLDEwICsyNDk2LDEwIEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRVJQX1BSRUFNQkxFICVkXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9QUkVBTUJMRSAlZFxuIiwKIAkJCQkgICBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKIAkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwpAQCAtMjkwNCw3ICsyNTA4LDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCAmJiAocHJpdi0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAJCWVsc2UKQEAgLTI5MTcsNyArMjUyMSw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYXMgdGhpcyBmdW5jdGlvbiBzaG91bGQKIAkJICogbmV2ZXIgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICovCiAJCWlmIChXQVJOX09OX09OQ0UoaW5faW50ZXJydXB0KCkpKQpAQCAtMjkzOSwxMDggKzI1NDMsNDkgQEAKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQl9IGVsc2UgewogCQkJcHJpdi0+YXNzb2NfaWQgPSAwOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJESVNBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CiAJCX0KIAl9IGVsc2UgaWYgKGNoYW5nZXMgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+YXNzb2NfaWQpIHsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKIAkJCWl3bF9zZW5kX3J4b25fYXNzb2MocHJpdik7CiAJfQogCiB9CiAKLXN0YXRpYyBpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlyZXQgPSAtRUlPOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBXZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QuCi0JICogQXZvaWQgc2Nhbm5pbmcgZHVyaW5nIHBvc3NpYmxlIEVBUE9MIGV4Y2hhbmdlLCByZXR1cm4KLQkgKiBzdWNjZXNzIGltbWVkaWF0ZWx5LgotCSAqLwotCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgewotCQlJV0xfREVCVUdfU0NBTigic2NhbiByZWplY3RlZDogd2l0aGluIG5leHQgc2NhbiBwZXJpb2RcbiIpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5ICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCi0JICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLCBqaWZmaWVzKSkgewotCQlJV0xfREVCVUdfU0NBTigic2NhbiByZWplY3RlZDogd2l0aGluIHByZXZpb3VzIHNjYW4gcGVyaW9kXG4iKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoc3NpZF9sZW4pIHsKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKLQkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gIG1pbl90KHU4LCBzc2lkX2xlbiwgSVdfRVNTSURfTUFYX1NJWkUpOwotCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7Ci0JfSBlbHNlIHsKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKLQl9Ci0KLQlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2KTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgY29uc3QgdTggKmFkZHIsCiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCiB7CiAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWl3bF91cGRhdGVfdGtpcF9rZXkocHJpdiwga2V5Y29uZiwgYWRkciwgaXYzMiwgcGhhc2Uxa2V5KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bF9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgICBjb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQl1OCBzdGFfaWQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwotCXU4IGlzX2RlZmF1bHRfd2VwX2tleSA9IDA7CisJY29uc3QgdTggKmFkZHI7CisJaW50IHJldDsKKwl1OCBzdGFfaWQ7CisJYm9vbCBpc19kZWZhdWx0X3dlcF9rZXkgPSBmYWxzZTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKHByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikpCi0JCS8qIG9ubHkgc3VwcG9ydCBwYWlyd2lzZSBrZXlzICovCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQorCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBpd2xfYmNhc3RfYWRkcjsKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwogCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKIAkJCQkgICBhZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMwNzAsNyArMjYxNSw3IEBACiAJCWVsc2UKIAkJCXJldCA9IGl3bF9zZXRfZHluYW1pY19rZXkocHJpdiwga2V5LCBzdGFfaWQpOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6CiAJCWlmIChpc19kZWZhdWx0X3dlcF9rZXkpCkBAIC0zMDc4LDEzICsyNjIzLDEzIEBACiAJCWVsc2UKIAkJCXJldCA9IGl3bF9yZW1vdmVfZHluYW1pY19rZXkocHJpdiwga2V5LCBzdGFfaWQpOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiZGlzYWJsZSBod2NyeXB0byBrZXlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMDk2LDE1ICsyNjQxLDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocXVldWUgPj0gQUNfTlVNKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHF1ZXVlID49IEFDX05VTSAlZFxuIiwgcXVldWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMxMjgsNyArMjY3Myw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEzOCw3ICsyNjgzLDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19IVCgiQS1NUERVIGFjdGlvbiBvbiBhZGRyICVwTSB0aWQgJWRcbiIsCisJSVdMX0RFQlVHX0hUKHByaXYsICJBLU1QRFUgYWN0aW9uIG9uIGFkZHIgJXBNIHRpZCAlZFxuIiwKIAkJICAgICBzdGEtPmFkZHIsIHRpZCk7CiAKIAlpZiAoIShwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikpCkBAIC0zMTQ2LDE5ICsyNjkxLDE5IEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFJ4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBSeFxuIik7CiAJCXJldHVybiBpd2xfc3RhX3J4X2FnZ19zdGFydChwcml2LCBzdGEtPmFkZHIsIHRpZCwgKnNzbik7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJSVdMX0RFQlVHX0hUKCJzdG9wIFJ4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdG9wIFJ4XG4iKTsKIAkJcmV0dXJuIGl3bF9zdGFfcnhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFR4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0YXJ0KHByaXYsIHN0YS0+YWRkciwgdGlkLCBzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBUeFxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAic3RvcCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOwogCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IVCgidW5rbm93blxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAidW5rbm93blxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAl9CkBAIC0zMTc0LDEwICsyNzE5LDEwIEBACiAJc3RydWN0IGl3bF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzE5NSw3ICsyNzQwLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMDYsOCArMjc1MSw4IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKIAlwcml2ID0gaHctPnByaXY7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMTgsNyArMjc2Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJbWVtc2V0KCZwcml2LT5jdXJyZW50X2h0X2NvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfaHRfaW5mbykpOwpAQCAtMzI0NSw3ICsyNzkwLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMzI3NCw3ICsyODE5LDcgQEAKIAkJCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUkFEQVIpKQogCQkJCWl3bF9wb3dlcl9kaXNhYmxlX21hbmFnZW1lbnQocHJpdiwgMzAwMCk7CiAKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCBpbiBJQlNTXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBpbiBJQlNTXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CkBAIC0zMjgzLDcgKzI4MjgsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2xfbWFjX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0zMjkyLDE1ICsyODM3LDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX2xlNjQgdGltZXN0YW1wOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgSUJTU1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzMxNSw3ICsyODYwLDcgQEAKIAl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKIAlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKQEAgLTMzNTksOCArMjkwNCw3IEBACiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJICAgICAgICI6ICVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwkJSVdMX0VSUihwcml2LCAiJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKIAkJcHJpdi0+ZGVidWdfbGV2ZWwgPSB2YWw7CiAKQEAgLTM0MzksOCArMjk4Myw3IEBACiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwkJSVdMX0lORk8ocHJpdiwgIiVzIGlzIG5vdCBpbiBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKIAkJaXdsX3NldF90eF9wb3dlcihwcml2LCB2YWwsIGZhbHNlKTsKIApAQCAtMzQ3Myw5ICszMDE2LDkgQEAKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzKSAhPSBmbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCiAJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXQgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwgZmxhZ3MpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdCByeG9uLmZsYWdzID0gMHglMDRYXG4iLCBmbGFncyk7CiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CiAJCQlpd2xfY29tbWl0X3J4b24ocHJpdik7CiAJCX0KQEAgLTM1MTIsOSArMzA1NSw5IEBACiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MpICE9IGZpbHRlcl9mbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCiAJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOwogCQllbHNlIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdHRpbmcgcnhvbi5maWx0ZXJfZmxhZ3MgPSAiCiAJCQkJICAgICAgICIweCUwNFhcbiIsIGZpbHRlcl9mbGFncyk7CiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0KIAkJCQljcHVfdG9fbGUzMihmaWx0ZXJfZmxhZ3MpOwpAQCAtMzUyOSwzMSArMzA3Miw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoZmlsdGVyX2ZsYWdzLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19maWx0ZXJfZmxhZ3MsCiAJCSAgIHN0b3JlX2ZpbHRlcl9mbGFncyk7CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JbG9uZyB2YWw7Ci0JaW50IHJldCAgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmICghcmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcHJpdi0+cmV0cnlfcmF0ZSA9ICh2YWwgPiAwKSA/IHZhbCA6IDE7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcmV0cnlfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cmV0cnlfcmF0ZSk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihyZXRyeV9yYXRlLCBTX0lXVVNSIHwgU19JUlVTUiwgc2hvd19yZXRyeV9yYXRlLAotCQkgICBzdG9yZV9yZXRyeV9yYXRlKTsKLQogc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMzU3Niw3ICszMDk0LDcgQEAKIAogCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY291bnQ7CkBAIC0zNjU2LDE2ICszMTc0LDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHN0YXRpc3RpY3MsIFNfSVJVR08sIHNob3dfc3RhdGlzdGljcywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzY3NSw3ICszMTgzLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOworCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTM3MTksOSArMzIyNyw3IEBACiAJJmRldl9hdHRyX2ZsYWdzLmF0dHIsCiAJJmRldl9hdHRyX2ZpbHRlcl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9wb3dlcl9sZXZlbC5hdHRyLAotCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKLQkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3RlbXBlcmF0dXJlLmF0dHIsCiAJJmRldl9hdHRyX3R4X3Bvd2VyLmF0dHIsCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTM3NjQsNiArMzI3MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBwY2lfY21kOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDEuIEFsbG9jYXRpbmcgSFcgZGF0YQpAQCAtMzc4OCw3ICszMjk1LDcgQEAKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CiAJcHJpdi0+Y2ZnID0gY2ZnOwogCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogCkBAIC0zODE2LDggKzMzMjMsNyBAQAogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQkvKiBib3RoIGF0dGVtcHRzIGZhaWxlZDogKi8KIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAotCQkJCURSVl9OQU1FKTsKKwkJCUlXTF9XQVJOKHByaXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJCX0KIAl9CkBAIC0zODM4LDEzICszMzQ0LDEyIEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOwogCiAJaXdsX2h3X2RldGVjdChwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlcyBSRVY9MHglWFxuIiwKKwlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzIFJFVj0weCVYXG4iLAogCQlwcml2LT5jZmctPm5hbWUsIHByaXYtPmh3X3Jldik7CiAKIAkvKiBXZSBkaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0zODU0LDcgKzMzNTksNyBAQAogCS8qIGFtcCBpbml0ICovCiAJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCBBUE1HXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCS8qKioqKioqKioqKioqKioqKgpAQCAtMzg2Myw3ICszMzY4LDcgQEAKIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KIAllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCWVyciA9IGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihwcml2KTsKQEAgLTM4NzIsMTQgKzMzNzcsMTQgQEAKIAogCS8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi8KIAlpd2xfZWVwcm9tX2dldF9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cwogCSAqKioqKioqKioqKioqKioqKioqKioqKiovCiAJaWYgKGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKIAkJZ290byBvdXRfZnJlZV9lZXByb207CiAJfQogCkBAIC0zODk5LDcgKzM0MDQsNyBAQAogCS8qIERpc2FibGUgcmFkaW8gKFNXIFJGIEtJTEwpIHZpYSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIGRyaXZlciAqLwogCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGUpIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCUlXTF9ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioKQEAgLTM5MDksMzggKzM0MTQsNTcgQEAKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAorCXBjaV9lbmFibGVfbXNpKHByaXYtPnBjaV9kZXYpOworCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2xfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJWX05BTUUsIHByaXYpOworCWlmIChlcnIpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CisJCWdvdG8gb3V0X2Rpc2FibGVfbXNpOworCX0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF91bmluaXRfZHJ2OworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCi0KIAlpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQkvKioqKioqKioqKioqKioqKioqKioKLQkgKiA5LiBDb25jbHVkZQotCSAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqIDEwLiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKKwkgKiA5LiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKKwkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOworCX0KKworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwogCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwogCiAJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisKKwkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLworCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJiBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKKwkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwllbHNlCisJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCiAJZXJyID0gaXdsX3Jma2lsbF9pbml0KHByaXYpOwogCWlmIChlcnIpCi0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzk0OCw3ICszNDcyLDEwIEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2xfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfdW5pbml0X2RydjoKKyBvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKKyBvdXRfZGlzYWJsZV9tc2k6CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwogIG91dF9mcmVlX2VlcHJvbToKIAlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CkBAIC0zOTczLDcgKzM1MDAsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CkBAIC00MDE5LDYgKzM1NDYsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDA0NCwxOSArMzU3Myw4IEBACiAJCXByaXYtPmlzX29wZW4gPSAxOwogCX0KIAotCS8qIHBjaSBkcml2ZXIgYXNzdW1lcyBzdGF0ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogcGNpIHN0YXRlIGlzIHNhdmVkIGFuZCBkZXZpY2UgZGlzYWJsZWQgd2hlbiBpbnRlcmZhY2UgaXMKLQkgKiBzdG9wcGVkLCBzbyBhdCB0aGlzIHRpbWUgcGNpIGRldmljZSB3aWxsIGFsd2F5cyBiZSBkaXNhYmxlZCAtCi0JICogd2hldGhlciBpbnRlcmZhY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90LiBzYXZpbmcgcGNpIHN0YXRlIG5vdyB3aWxsCi0JICogY2F1c2Ugc2F2ZWQgc3RhdGUgYmUgdGhhdCBvZiBhIGRpc2FibGVkIGRldmljZSwgd2hpY2ggd2lsbCBjYXVzZQotCSAqIHByb2JsZW1zIGR1cmluZyByZXN1bWUgaW4gdGhhdCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgZGlzYWJsZWQgZGV2aWNlLgotCSAqCi0JICogaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBzYXZlZCBzdGF0ZSAoZnJvbSB3aGVuIGludGVyZmFjZSB3YXMKLQkgKiBzdG9wcGVkKSBpcyB2YWxpZC4gaWYgaW50ZXJmYWNlIHdhcyBuZXZlciB1cCBhdCB0aW1lIG9mIHN1c3BlbmQKLQkgKiB0aGVuIHRoZSBzYXZlZCBzdGF0ZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGl0IHdhcyBzYXZlZCBkdXJpbmcKLQkgKiAucHJvYmUuICovCi0JcGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwotCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwpAQCAtNDA2NSw4ICszNTgzLDE0IEBACiBzdGF0aWMgaW50IGl3bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bF9tYWNfc3RhcnQocHJpdi0+aHcpOwpAQCAtNDEwNyw2ICszNjMxLDIxIEBACiAvKiA1MTUwIFdpZmkvV2lNYXggKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNDLCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNELCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKKy8qIDYwMDAvNjA1MCBTZXJpZXMgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDExMDIsIGl3bDYwMDBfMmFnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTExMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTIyLCBpd2w2MDAwXzJhZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJCLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOCwgUENJX0FOWV9JRCwgaXdsNjAwMF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NiwgUENJX0FOWV9JRCwgaXdsNjA1MF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODcsIFBDSV9BTllfSUQsIGl3bDYwNTBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg4LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4OSwgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAorLyogMTAwMCBTZXJpZXMgV2lGaSAqLworCXtJV0xfUENJX0RFVklDRSgweDAwODMsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODQsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAogI2VuZGlmIC8qIENPTkZJR19JV0w1MDAwICovCiAKIAl7MH0KQEAgLTQxMzMsMTMgKzM2NzIsMTQgQEAKIAogCXJldCA9IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggZjgzNmVjYy4uNzM1ZjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCXJldHVybiAwOwogZXJyOgotCUlXTF9FUlJPUigiRXJyb3IgJWQgaXRlcmF0aW9uICVkXG4iLCByZXQsIGkpOworCUlXTF9FUlIocHJpdiwgIkVycm9yICVkIGl0ZXJhdGlvbiAlZFxuIiwgcmV0LCBpKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQl2YWwgPSBkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldOwogCQlzaWxlbmNlX3JlZiA9IG1heChzaWxlbmNlX3JlZiwgdmFsKTsKIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCiAJCQlzaWxlbmNlX3Jzc2lfYSwgc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jLAogCQkJc2lsZW5jZV9yZWYpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKIAltYXhfbnJnX2NjayArPSA2OwogCi0JSVdMX0RFQlVHX0NBTElCKCJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCiAJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKIAkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKIApAQCAtMjM2LDE1ICsyMzYsMTUgQEAKIAkJZGF0YS0+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+IDI0KQogI2RlZmluZSBJV0xfVUNPREVfTUlOT1IodmVyKQkoKCh2ZXIpICYgMHgwMEZGMDAwMCkgPj4gMTYpCiAjZGVmaW5lIElXTF9VQ09ERV9BUEkodmVyKQkoKCh2ZXIpICYgMHgwMDAwRkYwMCkgPj4gOCkKICNkZWZpbmUgSVdMX1VDT0RFX1NFUklBTCh2ZXIpCSgodmVyKSAmIDB4MDAwMDAwRkYpCiAKKworLyogVHggcmF0ZXMgKi8KKyNkZWZpbmUgSVdMX0NDS19SQVRFUwk0CisjZGVmaW5lIElXTF9PRkRNX1JBVEVTCTgKKyNkZWZpbmUgSVdMX01BWF9SQVRFUwkoSVdMX0NDS19SQVRFUyArIElXTF9PRkRNX1JBVEVTKQorCiBlbnVtIHsKIAlSRVBMWV9BTElWRSA9IDB4MSwKIAlSRVBMWV9FUlJPUiA9IDB4MiwKQEAgLTEzNiw5ICsxNDQsMTEgQEAKIAlXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OID0gMHg5NCwJLyogbm90IHVzZWQgKi8KIAogCS8qIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMgKi8KKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5NSwKIAlRVUlFVF9OT1RJRklDQVRJT04gPSAweDk2LAkJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NywKLQlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OCwKKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EX1YxID0gMHg5OCwJLyogb2xkIHZlcnNpb24gb2YgQVBJICovCisJVFhfQU5UX0NPTkZJR1VSQVRJT05fQ01EID0gMHg5OCwJLyogbm90IHVzZWQgKi8KIAlNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTiA9IDB4OTksCS8qIG5vdCB1c2VkICovCiAKIAkvKiBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIGNvbmZpZyBjb21tYW5kICovCkBAIC0yMTksNiArMjI5LDM3IEBACiAJdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAorICoKKyAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKKyAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAorICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAorICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCisgKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCisgKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgorICoKKyAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7CisJdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLworCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICisgKi8KK3N0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKKwl1OCByYXRlOwkJLyogcGxjcCAqLworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGl3bGFnbiByYXRlX25fZmxhZ3MgYml0IGZpZWxkcwogICoKQEAgLTMwMCwxMSArMzQxLDEyIEBACiAgKiA1MzUwIGhhcyAzIHRyYW5zbWl0dGVycwogICogYml0MTQ6MTYKICAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfUE9TICAgICAgMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLICAgIDB4MDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLICAgIDB4MDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0NfTVNLICAgIDB4MTAwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCQ19NU0sgIDB4MUMwMDAKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX1BPUwkxNAorI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sJMHgwNDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sJMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQ19NU0sJMHgxMDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCShSQVRFX01DU19BTlRfQV9NU0sgfCBSQVRFX01DU19BTlRfQl9NU0spCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9BQkNfTVNLCShSQVRFX01DU19BTlRfQUJfTVNLIHwgUkFURV9NQ1NfQU5UX0NfTVNLKQogI2RlZmluZSBSQVRFX0FOVF9OVU0gMwogCiAjZGVmaW5lIFBPV0VSX1RBQkxFX05VTV9FTlRSSUVTCQkJMzMKQEAgLTQ5Miw4ICs1MzQsNiBAQAogCV9fbGUzMiBpc192YWxpZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KLQogLyoKICAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQogICovCkBAIC01MjUsNiArNTY1LDcgQEAKIAogCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSwkJY3B1X3RvX2xlMTYoMHgxIDw8IDApCisjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUwkJKDApCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfTVNLCQkJY3B1X3RvX2xlMTYoMHg3IDw8IDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TCQkJKDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRk9SQ0VfU0VMX01TSwkJY3B1X3RvX2xlMTYoMHg3IDw8IDQpCkBAIC02MTEsNiArNjUyLDI2IEBACiAgKiAgICAgICAgaXNzdWUgYSBuZXcgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCBhZnRlciBlYWNoIFJFUExZX1JYT04gKDB4MTApLAogICogICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgaXMgc2V0LgogICovCisKK3N0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHsKKwl1OCBub2RlX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMTsKKwl1OCBic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDI7CisJdTggd2xhcF9ic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDM7CisJdTggZGV2X3R5cGU7CisJdTggYWlyX3Byb3BhZ2F0aW9uOworCV9fbGUxNiByZXNlcnZlZDQ7CisJdTggb2ZkbV9iYXNpY19yYXRlczsKKwl1OCBjY2tfYmFzaWNfcmF0ZXM7CisJX19sZTE2IGFzc29jX2lkOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUxNiByZXNlcnZlZDU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgewogCXU4IG5vZGVfYWRkcls2XTsKIAlfX2xlMTYgcmVzZXJ2ZWQxOwpAQCAtNjU2LDYgKzcxNywyOCBAQAogCV9fbGUxNiByZXNlcnZlZDY7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCisgKi8KK3N0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIGZpbHRlcl9mbGFnczsKKwl1OCBvZmRtX2Jhc2ljX3JhdGVzOworCXU4IGNja19iYXNpY19yYXRlczsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCXU4IG9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOworCV9fbGUxNiByeF9jaGFpbl9zZWxlY3RfZmxhZ3M7CisJX19sZTE2IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKIAlfX2xlMzIgZmxhZ3M7CiAJX19sZTMyIGZpbHRlcl9mbGFnczsKQEAgLTY3MSwyMCArNzU0LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qCi0gKiBSRVBMWV9SWE9OX0FTU09DID0gMHgxMSAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JdTggb2ZkbV9iYXNpY19yYXRlczsKLQl1OCBjY2tfYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JX19sZTE2IHJ4X2NoYWluX3NlbGVjdF9mbGFnczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCiAKIC8qCkBAIC03MDIsNiArNzcxLDE2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7CisJdTggYmFuZDsKKwl1OCBleHBlY3RfYmVhY29uOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUzMiByeG9uX2ZsYWdzOworCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKKwlfX2xlMzIgc3dpdGNoX3RpbWU7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9jaGFubmVsX3N3aXRjaF9jbWQgewogCXU4IGJhbmQ7CiAJdTggZXhwZWN0X2JlYWNvbjsKQEAgLTc4Myw2ICs4NjIsOCBAQAogI2RlZmluZQlJV0xfQVBfSUQJCTAKICNkZWZpbmUgSVdMX01VTFRJQ0FTVF9JRAkxCiAjZGVmaW5lCUlXTF9TVEFfSUQJCTIKKyNkZWZpbmUJSVdMMzk0NV9CUk9BRENBU1RfSUQJMjQKKyNkZWZpbmUgSVdMMzk0NV9TVEFUSU9OX0NPVU5UCTI1CiAjZGVmaW5lIElXTDQ5NjVfQlJPQURDQVNUX0lECTMxCiAjZGVmaW5lCUlXTDQ5NjVfU1RBVElPTl9DT1VOVAkzMgogI2RlZmluZSBJV0w1MDAwX0JST0FEQ0FTVF9JRAkxNQpAQCAtNzkxLDYgKzg3Miw4IEBACiAjZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCisjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CisjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwogI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKQEAgLTkwMSw2ICs5ODQsMzUgQEAKICAqICAgICAgICB1c2VkIGFzIEFQLCBvciBpbiBhbiBJQlNTIG5ldHdvcmssIGRyaXZlciBtdXN0IHNldCB1cCBzdGF0aW9uIHRhYmxlCiAgKiAgICAgICAgZW50cmllcyBmb3IgYWxsIFNUQXMgaW4gbmV0d29yaywgc3RhcnRpbmcgd2l0aCBpbmRleCBJV0xfU1RBX0lELgogICovCisKK3N0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgeworCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKKwlzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvIGtleTsKKwlfX2xlMzIgc3RhdGlvbl9mbGFnczsJCS8qIFNUQV9GTEdfKiAqLworCV9fbGUzMiBzdGF0aW9uX2ZsYWdzX21zazsJLyogU1RBX0ZMR18qICovCisKKwkvKiBiaXQgZmllbGQgdG8gZGlzYWJsZSAoMSkgb3IgZW5hYmxlICgwKSBUeCBmb3IgVHJhZmZpYyBJRCAoVElEKQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYml0IChlLmcuIGJpdCA1IGNvbnRyb2xzIFRJRCA1KS4KKwkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfVElEX0RJU0FCTEVfVFggdG8gdXNlIHRoaXMgZmllbGQuICovCisJX19sZTE2IHRpZF9kaXNhYmxlX3R4OworCisJX19sZTE2IHJhdGVfbl9mbGFnczsKKworCS8qIFRJRCBmb3Igd2hpY2ggdG8gYWRkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCXU4IGFkZF9pbW1lZGlhdGVfYmFfdGlkOworCisJLyogVElEIGZvciB3aGljaCB0byByZW1vdmUgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJdTggcmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQ7CisKKwkvKiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZm9yIGFkZGVkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCV9fbGUxNiBhZGRfaW1tZWRpYXRlX2JhX3NzbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kIHsKIAl1OCBtb2RlOwkJLyogMTogbW9kaWZ5IGV4aXN0aW5nLCAwOiBhZGQgbmV3IHN0YXRpb24gKi8KIAl1OCByZXNlcnZlZFszXTsKQEAgLTEwNTQsNiArMTE2Niw0OCBAQAogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSwkoMSA8PCA3KQogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLCSgweDgwMCkKIAorCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyB7CisJdTggcGh5X2NvdW50OworCXU4IGlkOworCXU4IHJzc2k7CisJdTggYWdjOworCV9fbGUxNiBzaWdfYXZnOworCV9fbGUxNiBub2lzZV9kaWZmOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKKwlfX2xlMTYgY2hhbm5lbDsKKwlfX2xlMTYgcGh5X2ZsYWdzOworCXU4IHJlc2VydmVkMTsKKwl1OCByYXRlOworCV9fbGUxNiBsZW47CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgeworCV9fbGUzMiBzdGF0dXM7CisJX19sZTY0IHRpbWVzdGFtcDsKKwlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCisgKgorICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCisgKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCisgKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCisgKiBzdGF0cy5waHlfY291bnQKKyAqLworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgeworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7CisJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIElXTDM5X1JYX0ZSQU1FX1NJWkUJKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQorCiAvKiBGaXhlZCAobm9uLWNvbmZpZ3VyYWJsZSkgcnggZGF0YSBmcm9tIHBoeSAqLwogCiAjZGVmaW5lIElXTDQ5X1JYX1JFU19QSFlfQ05UIDE0CkBAIC0xMjM0LDYgKzEzODgsODQgQEAKICNkZWZpbmUgVEtJUF9JQ1ZfTEVOIDQKIAogLyoKKyAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKKyAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgeworCS8qCisJICogTVBEVSBieXRlIGNvdW50OgorCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAorCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKKwkgKiArIERhdGEgcGF5bG9hZAorCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCisJICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAorCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCisJICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCisJICovCisJX19sZTE2IGxlbjsKKworCS8qCisJICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCisJICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgorCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgorCSAqLworCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKKworCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCisKKwl1OCByYXRlOworCisJLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCisJdTggc3RhX2lkOworCXU4IHRpZF90c3BlYzsKKwl1OCBzZWNfY3RsOworCXU4IGtleVsxNl07CisJdW5pb24geworCQl1OCBieXRlWzhdOworCQlfX2xlMTYgd29yZFs0XTsKKwkJX19sZTMyIGR3WzJdOworCX0gdGtpcF9taWM7CisJX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKKwl1bmlvbiB7CisJCV9fbGUzMiBsaWZlX3RpbWU7CisJCV9fbGUzMiBhdHRlbXB0OworCX0gc3RvcF90aW1lOworCXU4IHN1cHBfcmF0ZXNbMl07CisJdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KKwl1bmlvbiB7CisJCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OworCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKKwl9IHRpbWVvdXQ7CisKKwkvKgorCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCisJICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCisJICovCisJX19sZTE2IGRyaXZlcl90eG9wOworCisJLyoKKwkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKKwkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQorCSAqLworCXU4IHBheWxvYWRbMF07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKKwl1OCBmYWlsdXJlX3J0czsKKwl1OCBmYWlsdXJlX2ZyYW1lOworCXU4IGJ0X2tpbGxfY291bnQ7CisJdTggcmF0ZTsKKwlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKKwlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KICAqIERyaXZlciBzaG91bGQgc2V0IHRoZXNlIGZpZWxkcyB0byAwLgpAQCAtMTI0NCw5ICsxNDc2LDYgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyoKLSAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKLSAqLwogc3RydWN0IGl3bF90eF9jbWQgewogCS8qCiAJICogTVBEVSBieXRlIGNvdW50OgpAQCAtMTU4NCw2ICsxODEzLDE0IEBACiAgKgogICogU2VlIGRldGFpbHMgdW5kZXIgIlRYUE9XRVIiIGluIGl3bC00OTY1LWh3LmguCiAgKi8KKworc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCB7CisJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IGNoYW5uZWw7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCB7CiAJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCiAJdTggcmVzZXJ2ZWQ7CkBAIC0xNTkxLDYgKzE4MjgsMzUgQEAKIAlzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB0eF9wb3dlcjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKKyAqCisgKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQorICoKKyAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKKyAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCisgKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKKyAqIG1hc2tzLCBldGMuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAorICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKKyAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgorICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQorICovCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB7CisJX19sZTE2IHJhdGVfbl9mbGFnczsKKwl1OCB0cnlfY250OworCXU4IG5leHRfcmF0ZV9pbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKKwl1OCB0YWJsZV9pZDsKKwl1OCByZXNlcnZlZFszXTsKKwlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIC8qUlNfTkVXX0FQSTogb25seSBUTENfUlRTIHJlbWFpbnMgYW5kIG1vdmVkIHRvIGJpdCAwICovCiAjZGVmaW5lICBMSU5LX1FVQUxfRkxBR1NfU0VUX1NUQV9UTENfUlRTX01TSwkoMSA8PCAwKQogCkBAIC0yMDQ0LDE1ICsyMzEwLDIzIEBACiAgKi8KICNkZWZpbmUgSVdMX1BPV0VSX1ZFQ19TSVpFIDUKIAotI2RlZmluZSBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSwljcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lIElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLCQljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIElXTF9QT1dFUl9QQ0lfUE1fTVNLCQkJY3B1X3RvX2xlMTYoMSA8PCAzKQotI2RlZmluZSBJV0xfUE9XRVJfRkFTVF9QRAkJCWNwdV90b19sZTE2KDEgPDwgNCkKKyNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMTYoQklUKDApKQorI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMTYoQklUKDIpKQorI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTE2KEJJVCgzKSkKKyNkZWZpbmUgSVdMX1BPV0VSX0ZBU1RfUEQJCQljcHVfdG9fbGUxNihCSVQoNCkpCisKK3N0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKKwlfX2xlMTYgZmxhZ3M7CisJdTggcmVzZXJ2ZWRbMl07CisJX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKKwlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgewogCV9fbGUxNiBmbGFnczsKLQl1OCBrZWVwX2FsaXZlX3NlY29uZHM7Ci0JdTggZGVidWdfZmxhZ3M7CisJdTgga2VlcF9hbGl2ZV9zZWNvbmRzOwkJLyogMzk0NSByZXNlcnZlZCAqLworCXU4IGRlYnVnX2ZsYWdzOwkJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KIAlfX2xlMzIgcnhfZGF0YV90aW1lb3V0OwogCV9fbGUzMiB0eF9kYXRhX3RpbWVvdXQ7CiAJX19sZTMyIHNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRV07CkBAIC0yMTQzLDYgKzI0MTcsMjYgQEAKICAqICAgICBwYXNzaXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKiAgICAgYWN0aXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKi8KKworLyogRklYTUU6IHJlbmFtZSB0byBBUDEsIHJlbW92ZSB0cGMgKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCB7CisJLyoKKwkgKiB0eXBlIGlzIGRlZmluZWQgYXM6CisJICogMDowIDEgPSBhY3RpdmUsIDAgPSBwYXNzaXZlCisJICogMTo0IFNTSUQgZGlyZWN0IGJpdCBtYXA7IGlmIGEgYml0IGlzIHNldCwgdGhlbiBjb3JyZXNwb25kaW5nCisJICogICAgIFNTSUQgSUUgaXMgdHJhbnNtaXR0ZWQgaW4gcHJvYmUgcmVxdWVzdC4KKwkgKiA1OjcgcmVzZXJ2ZWQKKwkgKi8KKwl1OCB0eXBlOworCXU4IGNoYW5uZWw7CS8qIGJhbmQgaXMgc2VsZWN0ZWQgYnkgaXdsMzk0NV9zY2FuX2NtZCAiZmxhZ3MiIGZpZWxkICovCisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOworCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCisJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLworI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCisKIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTIxNTksNiArMjQ1Myw5IEBACiAJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgX19sZTMyIHR5cGUgKi8KKyNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3NzaWRfaWUgLSBkaXJlY3RlZCBzY2FuIG5ldHdvcmsgaW5mb3JtYXRpb24gZWxlbWVudAogICoKQEAgLTIxNzIsNiArMjQ2OSw3IEBACiAJdTggc3NpZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYX0FQSTEJCTB4NAogI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYICAgICAgICAJMHgxNAogI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCWNwdV90b19sZTMyKDB4RkZGRkZGRkYpCiAjZGVmaW5lIElXTF9HT09EX0NSQ19USAkJCWNwdV90b19sZTE2KDEpCkBAIC0yMjI5LDYgKzI1MjcsNTEgQEAKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgc2VlIHRpbWluZyByZXN0cmljdGlvbnMgZGVzY3JpYmVkIHVuZGVyCiAgKiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbC4KICAqLworCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7CisJX19sZTE2IGxlbjsKKwl1OCByZXNlcnZlZDA7CisJdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KKwlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKKwkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCisJX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLworCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCisJCQkJICogY2hhbm5lbCAqLworCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCisJCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgorCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCisJCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KKwkJCQkgKi8KKwlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCisJX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLworCisJLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCisJICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOworCisJLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCisJc3RydWN0IGl3bF9zc2lkX2llIGRpcmVjdF9zY2FuW1BST0JFX09QVElPTl9NQVhfQVBJMV07CisKKwkvKgorCSAqIFByb2JlIHJlcXVlc3QgZnJhbWUsIGZvbGxvd2VkIGJ5IGNoYW5uZWwgbGlzdC4KKwkgKgorCSAqIFNpemUgb2YgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBjb3VudCBpbiB0eF9jbWQuCisJICogQ2hhbm5lbCBsaXN0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvYmUgcmVxdWVzdCBmcmFtZS4KKwkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gbGlzdCBpcyBzcGVjaWZpZWQgYnkgY2hhbm5lbF9jb3VudC4KKwkgKiBFYWNoIGNoYW5uZWwgaW4gbGlzdCBpcyBvZiB0eXBlOgorCSAqCisJICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIGNoYW5uZWxzWzBdOworCSAqCisJICogTk9URTogIE9ubHkgb25lIGJhbmQgb2YgY2hhbm5lbHMgY2FuIGJlIHNjYW5uZWQgcGVyIHBhc3MuICBZb3UKKwkgKiBtdXN0IG5vdCBtaXggMi40R0h6IGNoYW5uZWxzIGFuZCA1LjJHSHogY2hhbm5lbHMsIGFuZCB5b3UgbXVzdCB3YWl0CisJICogZm9yIG9uZSBzY2FuIHRvIGNvbXBsZXRlIChpLmUuIHJlY2VpdmUgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pCisJICogYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBzY2FuLgorCSAqLworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9zY2FuX2NtZCB7CiAJX19sZTE2IGxlbjsKIAl1OCByZXNlcnZlZDA7CkBAIC0yMzM2LDYgKzI2NzksMTQgQEAKIC8qCiAgKiBCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKi8KKworc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOworCV9fbGUzMiBsb3dfdHNmOworCV9fbGUzMiBoaWdoX3RzZjsKKwlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w0OTY1X2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCBiZWFjb25fbm90aWZ5X2hkcjsKIAlfX2xlMzIgbG93X3RzZjsKQEAgLTIzNDYsNiArMjY5NywxNSBAQAogLyoKICAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7CisJX19sZTE2IHRpbV9pZHg7CisJdTggdGltX3NpemU7CisJdTggcmVzZXJ2ZWQxOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGZyYW1lWzBdOwkvKiBiZWFjb24gZnJhbWUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMjM4Miw2ICsyNzQyLDc2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgeworCV9fbGUzMiBpbmFfY250OworCV9fbGUzMiBmaW5hX2NudDsKKwlfX2xlMzIgcGxjcF9lcnI7CisJX19sZTMyIGNyYzMyX2VycjsKKwlfX2xlMzIgb3ZlcnJ1bl9lcnI7CisJX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOworCV9fbGUzMiBjcmMzMl9nb29kOworCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7CisJX19sZTMyIGZpbmFfc3luY19lcnJfY250OworCV9fbGUzMiBzZmRfdGltZW91dDsKKwlfX2xlMzIgZmluYV90aW1lb3V0OworCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7CisJX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOworCV9fbGUzMiBzZW50X2Fja19jbnQ7CisJX19sZTMyIHNlbnRfY3RzX2NudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IHsKKwlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLworCV9fbGUzMiBib2d1c19hY2s7CS8qIEFDSyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQUNLICovCisJX19sZTMyIG5vbl9ic3NpZF9mcmFtZXM7CS8qIG51bWJlciBvZiBmcmFtZXMgd2l0aCBCU1NJRCB0aGF0CisJCQkJCSAqIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBTVEEgQlNTSUQgKi8KKwlfX2xlMzIgZmlsdGVyZWRfZnJhbWVzOwkvKiBjb3VudCBmcmFtZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbiB0aGUKKwkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLworCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCisJCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCB7CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IGNjazsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggeworCV9fbGUzMiBwcmVhbWJsZV9jbnQ7CisJX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKKwlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7CisJX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7CisJX19sZTMyIGZld19ieXRlc19jbnQ7CisJX19sZTMyIGN0c190aW1lb3V0OworCV9fbGUzMiBhY2tfdGltZW91dDsKKwlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKKwlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHN0YXRpc3RpY3NfZGJnIHsKKwlfX2xlMzIgYnVyc3RfY2hlY2s7CisJX19sZTMyIGJ1cnN0X2NvdW50OworCV9fbGUzMiByZXNlcnZlZFs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgeworCV9fbGUzMiB0eF9vbl9hOworCV9fbGUzMiB0eF9vbl9iOworCV9fbGUzMiBleGVjX3RpbWU7CisJX19sZTMyIHByb2JlX3RpbWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCB7CisJX19sZTMyIHRlbXBlcmF0dXJlOworCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CisJX19sZTMyIHNsZWVwX3RpbWU7CisJX19sZTMyIHNsb3RzX291dDsKKwlfX2xlMzIgc2xvdHNfaWRsZTsKKwlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgZGl2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7CiAJX19sZTMyIGluYV9jbnQ7CiAJX19sZTMyIGZpbmFfY250OwpAQCAtMjQxOCw3ICsyODQ4LDcgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMigxKQorI2RlZmluZSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUgICAgICBjcHVfdG9fbGUzMigxKQogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IHsKIAlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLwpAQCAtMjQ5MywxMSArMjkyMyw2IEBACiAJc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBzdGF0aXN0aWNzX2RiZyB7Ci0JX19sZTMyIGJ1cnN0X2NoZWNrOwotCV9fbGUzMiBidXJzdF9jb3VudDsKLQlfX2xlMzIgcmVzZXJ2ZWRbNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHN0YXRpc3RpY3NfZGl2IHsKIAlfX2xlMzIgdHhfb25fYTsKQEAgLTI1NjEsNiArMjk4NiwxNCBAQAogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKICNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorCitzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgZmxhZzsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCByeDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc190eCB0eDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTMwMTIsNiArMzQ0NSwxMCBAQAogCV9fbGUzMiBsZW47CiAJc3RydWN0IGl3bF9jbWRfaGVhZGVyIGhkcjsKIAl1bmlvbiB7CisJCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHJ4X2ZyYW1lOworCQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHR4X3Jlc3A7CisJCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiBiZWFjb25fc3RhdHVzOworCiAJCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKIAkJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gc3BlY3RydW1fbm90aWY7CiAJCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7CkBAIC0zMDI5LDYgKzM0NjYsNiBAQAogCX0gdTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1pbnQgaXdsX2Fnbl9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uKTsKK2ludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKICNlbmRpZgkJCQkvKiBfX2l3bF9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA3M2Q3OTczLi4wODVlOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+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+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOworCX0KKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7CisJCWVsc2UKKwkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOworCX0KKworCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncworCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgorCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCisJICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgorCSAqLworCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2NvbmZpZ3VyZV9maWx0ZXIpOworCiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKQEAgLTgwNiwxMiArMTI5NywxNCBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOworCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKLQlody0+d2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAKIAkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KIAlody0+cXVldWVzID0gNDsKQEAgLTgzMSw3ICsxMzI0LDcgQEAKIAogCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBodyAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CkBAIC04NjMsNyArMTM1Niw2IEBACiB7CiAJaW50IHJldDsKIAotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKQEAgLTg5NywyMSArMTM4OSwyMiBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCi0JcHJpdi0+cG93ZXJfbW9kZSA9IElXTF9QT1dFUl9BQzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CisJaXdsY29yZV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTkyNiwxNCArMTQxOSwxNiBAQAogewogCWludCByZXQgPSAwOwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh0eF9wb3dlciA+IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIHVwcGVyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTcwLDE4ICsxNDY1LDkyIEBACiAJICogZnJvbSB1Q29kZSBvciBmbG93IGhhbmRsZXIgKFJ4L1R4IERNQSkgKi8KIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweGZmZmZmZmZmKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JSVdMX0RFQlVHX0lTUigiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7CisJSVdMX0RFQlVHX0lTUihwcml2LCAiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9kaXNhYmxlX2ludGVycnVwdHMpOwogCiB2b2lkIGl3bF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JSVdMX0RFQlVHX0lTUigiRW5hYmxpbmcgaW50ZXJydXB0c1xuIik7CisJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5hYmxpbmcgaW50ZXJydXB0c1xuIik7CiAJc2V0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOSV9TRVRfTUFTSyk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9lbmFibGVfaW50ZXJydXB0cyk7CiAKK2lycXJldHVybl90IGl3bF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOworCXUzMiBpbnRhLCBpbnRhX21hc2s7CisJdTMyIGludGFfZmg7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogRGlzYWJsZSAoYnV0IGRvbid0IGNsZWFyISkgaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkCisJICogICAgYmFjay10by1iYWNrIElTUnMgYW5kIHNwb3JhZGljIGludGVycnVwdHMgZnJvbSBvdXIgTklDLgorCSAqIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlcnZpY2UsIHRoZSB0YXNrbGV0IHdpbGwgcmUtZW5hYmxlIGludHMuCisJICogSWYgd2UgKmRvbid0KiBoYXZlIHNvbWV0aGluZywgd2UnbGwgcmUtZW5hYmxlIGJlZm9yZSBsZWF2aW5nIGhlcmUuICovCisJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOyAgLyoganVzdCBmb3IgZGVidWcgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOworCisJLyogRGlzY292ZXIgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlL3BlbmRpbmcgKi8KKwlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKKwlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CisKKwkvKiBJZ25vcmUgaW50ZXJydXB0IGlmIHRoZXJlJ3Mgbm90aGluZyBpbiBOSUMgdG8gc2VydmljZS4KKwkgKiBUaGlzIG1heSBiZSBkdWUgdG8gSVJRIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLAorCSAqIG9yIGR1ZSB0byBzcG9yYWRpYyBpbnRlcnJ1cHRzIHRocm93biBmcm9tIG91ciBOSUMuICovCisJaWYgKCFpbnRhICYmICFpbnRhX2ZoKSB7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIklnbm9yZSBpbnRlcnJ1cHQsIGludGEgPT0gMCwgaW50YV9maCA9PSAwXG4iKTsKKwkJZ290byBub25lOworCX0KKworCWlmICgoaW50YSA9PSAweEZGRkZGRkZGKSB8fCAoKGludGEgJiAweEZGRkZGRkYwKSA9PSAweGE1YTVhNWEwKSkgeworCQkvKiBIYXJkd2FyZSBkaXNhcHBlYXJlZC4gSXQgbWlnaHQgaGF2ZSBhbHJlYWR5IHJhaXNlZAorCQkgKiBhbiBpbnRlcnJ1cHQgKi8KKwkJSVdMX1dBUk4ocHJpdiwgIkhBUkRXQVJFIEdPTkU/PyBJTlRBID09IDB4JTA4eFxuIiwgaW50YSk7CisJCWdvdG8gdW5wbHVnZ2VkOworCX0KKworCUlXTF9ERUJVR19JU1IocHJpdiwgIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKKworCWludGEgJj0gfkNTUl9JTlRfQklUX1NDRDsKKworCS8qIGl3bF9pcnFfdGFza2xldCgpIHdpbGwgc2VydmljZSBpbnRlcnJ1cHRzIGFuZCByZS1lbmFibGUgdGhlbSAqLworCWlmIChsaWtlbHkoaW50YSB8fCBpbnRhX2ZoKSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+aXJxX3Rhc2tsZXQpOworCisgdW5wbHVnZ2VkOgorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKyBub25lOgorCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCisJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9OT05FOworfQorRVhQT1JUX1NZTUJPTChpd2xfaXNyKTsKKworaW50IGl3bF9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9idF9jbWQgYnRfY21kID0geworCQkuZmxhZ3MgPSAzLAorCQkubGVhZF90aW1lID0gMHhBQSwKKwkJLm1heF9raWxsID0gMSwKKwkJLmtpbGxfYWNrX21hc2sgPSAwLAorCQkua2lsbF9jdHNfbWFzayA9IDAsCisJfTsKKworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKKwkJCQlzaXplb2Yoc3RydWN0IGl3bF9idF9jbWQpLCAmYnRfY21kKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfYnRfY29uZmlnKTsKKwogaW50IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzKQogewogCXUzMiBzdGF0X2ZsYWdzID0gMDsKQEAgLTEwMDcsNyArMTU3Niw3IEBACiAJdTMyIGVycmNudCA9IDA7CiAJdTMyIGk7CiAKLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKIAlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpCkBAIC0xMDE4LDcgKzE1ODcsNyBAQAogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKLQkJCWkgKyBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJCQlpICsgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CiAJCQlyZXQgPSAtRUlPOwpAQCAtMTA0NSwxMyArMTYxNCwxNCBAQAogCWludCByZXQgPSAwOwogCXUzMiBlcnJjbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKIAlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJICAgSVdMNDlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCiAJZXJyY250ID0gMDsKIAlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CkBAIC0xMDYwLDcgKzE2MzAsNyBAQAogCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCiAJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwogCQkJcmV0ID0gLUVJTzsKQEAgLTEwNzMsOCArMTY0Myw4IEBACiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmICghZXJyY250KQotCQlJV0xfREVCVUdfSU5GTwotCQkgICAgKCJ1Y29kZSBpbWFnZSBpbiBJTlNUUlVDVElPTiBtZW1vcnkgaXMgZ29vZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCSAgICAidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwOTQsNyArMTY2NCw3IEBACiAJbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CiAJcmV0ID0gaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkJvb3RzdHJhcCB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExMDMsNyArMTY3Myw3IEBACiAJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CiAJcmV0ID0gaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTExMiwxMSArMTY4MiwxMSBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfRVJST1IoIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CisJSVdMX0VSUihwcml2LCAiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKIAogCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KIAkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgpAQCAtMTE4OCwyMSArMTc1OCwyMiBAQAogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5lcnJvcl9ldmVudF90YWJsZV9wdHIpOwogCiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAKIAlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlJPUigiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsIHByaXYtPnN0YXR1cywgY291bnQpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsCisJCQlwcml2LT5zdGF0dXMsIGNvdW50KTsKIAl9CiAKIAlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDEgKiBzaXplb2YodTMyKSk7CkBAIC0xMjE1LDEyICsxNzg2LDEyIEBACiAJbGluZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA5ICogc2l6ZW9mKHUzMikpOwogCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMTEgKiBzaXplb2YodTMyKSk7CiAKLQlJV0xfRVJST1IoIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCisJSVdMX0VSUihwcml2LCAiRGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lICAgICAgICIKIAkJImRhdGExICAgICAgZGF0YTIgICAgICBsaW5lXG4iKTsKLQlJV0xfRVJST1IoIiUtMjhzICgjJTAyZCkgJTAxMHUgMHglMDhYIDB4JTA4WCAldVxuIiwKKwlJV0xfRVJSKHByaXYsICIlLTI4cyAoIyUwMmQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCiAJCWRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBkYXRhMSwgZGF0YTIsIGxpbmUpOwotCUlXTF9FUlJPUigiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKLQlJV0xfRVJST1IoIjB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WFxuIiwgYmxpbmsxLCBibGluazIsCisJSVdMX0VSUihwcml2LCAiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKKwlJV0xfRVJSKHByaXYsICIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAogCQlpbGluazEsIGlsaW5rMik7CiAKIAlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwpAQCAtMTI2NiwxMSArMTgzNywxMSBAQAogCQlwdHIgKz0gc2l6ZW9mKHUzMik7CiAJCWlmIChtb2RlID09IDApIHsKIAkJCS8qIGRhdGEsIGV2ICovCi0JCQlJV0xfRVJST1IoIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKIAkJfSBlbHNlIHsKIAkJCWRhdGEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQkJcHRyICs9IHNpemVvZih1MzIpOwotCQkJSVdMX0VSUk9SKCJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAogCQkJCQl0aW1lLCBkYXRhLCBldik7CiAJCX0KIAl9CkBAIC0xMjkyLDEzICsxODYzLDEzIEBACiAJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKIAlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzEyLDEyICsxODgzLDEyIEBACiAKIAkvKiBiYWlsIG91dCBpZiBub3RoaW5nIGluIGxvZyAqLwogCWlmIChzaXplID09IDApIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CiAJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCisJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKIAkJCXNpemUsIG51bV93cmFwcyk7CiAKIAkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCkBAIC0xMzQ5LDkgKzE5MjAsOSBAQAogCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01ELAogCQkJICAgICAgIHNpemVvZihjbWQpLCAmY21kKTsKIAlpZiAocmV0KQotCQlJV0xfRVJST1IoIlJFUExZX0NUX0tJTExfQ09ORklHX0NNRCBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19JTkZPKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgc3VjY2VlZGVkLCAiCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgc3VjY2VlZGVkLCAiCiAJCQkiY3JpdGljYWwgdGVtcGVyYXR1cmUgaXMgJWRcbiIsCiAJCQljbWQuY3JpdGljYWxfdGVtcGVyYXR1cmVfUik7CiB9CkBAIC0xMzY4LDcgKzE5MzksNyBAQAogICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKICAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCiAgKi8KLXN0YXRpYyBpbnQgaXdsX3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQoraW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsIHU4IG1ldGFfZmxhZykKIHsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCkBAIC0xMzc5LDYgKzE5NTAsNyBAQAogCiAJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfY2FyZF9zdGF0ZSk7CiAKIHZvaWQgaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC0xMzg3LDcgKzE5NTksNyBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9GRlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gT0ZGXG4iKTsKIAogCWl3bF9zY2FuX2NhbmNlbChwcml2KTsKIAkvKiBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIEFQICovCkBAIC0xNDE2LDcgKzE5ODgsNyBAQAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9OXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPTlxuIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwpAQCAtMTQ0MSw3ICsyMDEzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgogCQkJCSAgImRpc2FibGVkIGJ5IEhXIHN3aXRjaFxuIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTE0NjMsMyArMjAzNSw3OCBAQAogCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8pOworCit2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCByZl9raWxsKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKCFpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsCisJCQkgICJIVyBhbmQvb3IgU1cgUkYgS2lsbCBubyBsb25nZXIgYWN0aXZlLCByZXN0YXJ0aW5nICIKKwkJCSAgImRldmljZVxuIik7CisJCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgJiYKKwkJICAgIHRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpCisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOworCX0gZWxzZSB7CisJCS8qIG1ha2Ugc3VyZSBtYWM4MDIxMSBzdG9wIHNlbmRpbmcgVHggZnJhbWUgKi8KKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOworCisJCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQorCQkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgorCQkJCQkgICJkaXNhYmxlZCBieSBTVyBzd2l0Y2hcbiIpOworCQllbHNlCisJCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gRnJlcXVlbmN5IEtpbGwgU3dpdGNoIGlzIE9uOlxuIgorCQkJCSAgICAiS2lsbCBzd2l0Y2ggbXVzdCBiZSB0dXJuZWQgb2ZmIGZvciAiCisJCQkJICAgICJ3aXJlbGVzcyBuZXR3b3JraW5nIHRvIHdvcmsuXG4iKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9iZ19yZl9raWxsKTsKKwordm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOworCUlXTF9ERUJVR19SWChwcml2LCAic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCisJCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcG1fc2xlZXBfbm90aWYpOworCit2b2lkIGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJEdW1waW5nICVkIGJ5dGVzIG9mIHVuaGFuZGxlZCAiCisJCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsCisJCQlsZTMyX3RvX2NwdShwa3QtPmxlbiksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKTsKKwordm9pZCBpd2xfcnhfcmVwbHlfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCisJSVdMX0VSUihwcml2LCAiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKKwkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKKwkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX3R5cGUpLAorCQlnZXRfY21kX3N0cmluZyhwa3QtPnUuZXJyX3Jlc3AuY21kX2lkKSwKKwkJcGt0LT51LmVycl9yZXNwLmNtZF9pZCwKKwkJbGUxNl90b19jcHUocGt0LT51LmVycl9yZXNwLmJhZF9jbWRfc2VxX251bSksCisJCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl9pbmZvKSk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9yeF9yZXBseV9lcnJvcik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCA3YzNhMjBhLi4yNzMxMGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03MSw3ICs3MSw3IEBACiAKIAogI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gIjEuMy4yN2siCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDggSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDkgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIERSVl9BVVRIT1IgICAgICI8aWx3QGxpbnV4LmludGVsLmNvbT4iCiAKICNkZWZpbmUgSVdMX1BDSV9ERVZJQ0UoZGV2LCBzdWJkZXYsIGNmZykgXApAQCAtMTEwLDYgKzExMCwxNCBAQAogCXZvaWQgKCp0eHFfaW52YWxfYnl0ZV9jbnRfdGJsKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CiAJdm9pZCAoKnR4cV9zZXRfc2NoZWQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG1hc2spOworCWludCAoKnR4cV9hdHRhY2hfYnVmX3RvX3RmZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSAgICAgdTE2IGxlbiwgdTggcmVzZXQsIHU4IHBhZCk7CisJdm9pZCAoKnR4cV9mcmVlX3RmZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworCWludCAoKnR4cV9pbml0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCS8qIGFnZ3JlZ2F0aW9ucyAqLwogCWludCAoKnR4cV9hZ2dfZW5hYmxlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCB0eF9maWZvLAogCQkJICAgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpOwpAQCAtMjAzLDYgKzIxMSw5IEBACiAJdTE2ICBlZXByb21fY2FsaWJfdmVyOwogCWNvbnN0IHN0cnVjdCBpd2xfb3BzICpvcHM7CiAJY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zOworCXU4ICAgdmFsaWRfdHhfYW50OworCXU4ICAgdmFsaWRfcnhfYW50OworCWJvb2wgbmVlZF9wbGxfY2ZnOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjEzLDExICsyMjQsMjYgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9vcHMgKmh3X29wcyk7CiB2b2lkIGl3bF9od19kZXRlY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3Jlc2V0X3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpOwordm9pZCBpd2xfc2V0X3J4b25faHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCk7CitpbnQgaXdsX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfc2V0X3J4b25fY2hhaW4oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2V0X3J4b25fY2hhbm5lbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2gpOwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pOwogdTggaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpOwordm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK3ZvaWQgaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSk7CitpbnQgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJICAgdTMyIGRlY3J5cHRfcmVzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKTsKK3ZvaWQgaXdsX2lycV9oYW5kbGVfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKIGludCBpd2xfaHdfbmljX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTIyNSw2ICsyNTEsMTYgQEAKIHZvaWQgaXdsX3VuaW5pdF9kcnYoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSWCBoYW5kbGVycy4KKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpd2xfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwordm9pZCBpd2xfcnhfcmVwbHlfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogUlgKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgaXdsX3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwpAQCAtMjQ1LDYgKzI4MSw3IEBACiAJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Cit2b2lkIGl3bF9yeF9jc2Eoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAKIC8qIFRYIGhlbHBlcnMgKi8KIApAQCAtMjUyLDkgKzI4OSwxOCBAQAogKiBUWAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGl3bF90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworaW50IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbiwgdTggcmVzZXQsIHU4IHBhZCk7CiBpbnQgaXdsX3R4X3NrYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpd2xfaHdfdHhxX2N0eF9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CiBpbnQgaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2ludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJICAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCk7Cit2b2lkIGl3bF90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCk7CiBpbnQgaXdsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCwgdTE2ICpzc24pOwogaW50IGl3bF90eF9hZ2dfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgLCBjb25zdCB1OCAqcmEsIHUxNiB0aWQpOwogaW50IGl3bF90eHFfY2hlY2tfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1OCB0aWQsIGludCB0eHFfaWQpOwpAQCAtMjY3LDcgKzMxMyw3IEBACiAgKiBSRiAtS2lsbCAtIGhlcmUgYW5kIG5vdCBpbiBpd2wtcmZraWxsLmggdG8gYmUgYXZhaWxhYmxlIHdoZW4KICAqIFJGLWtpbGwgc3Vic3lzdGVtIGlzIG5vdCBjb21waWxlZC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBpd2xfcmZfa2lsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfYmdfcmZfa2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKQEAgLTI3OSw2ICszMjUsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyk7CiBpbnQgaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzKTsKIAordTggaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKK3ZvaWQgaXdsX3NldF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKIHU4IGl3bF90b2dnbGVfdHhfYW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYW50X2lkeCk7CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGl3bF9hbnRfaWR4X3RvX2ZsYWdzKHU4IGFudF9pZHgpCkBAIC0zMDYsOCArMzU2LDMwIEBACiBpbnQgaXdsX3NjYW5fY2FuY2VsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG1zKTsKIGludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKK3UxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLCBpbnQgbGVmdCk7CiB2b2lkIGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgICB1OCBuX3Byb2Jlcyk7Cit1MTYgaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Cit2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7Cit2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCisvKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCisgKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCisgKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAorICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncworICogbm8gb3RoZXIgdHJhZmZpYykuCisgKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCisjZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBjcHVfdG9fbGUxNigxMCkgIC8qIG1zZWMgKi8KKyNkZWZpbmUgSVdMX1BMQ1BfUVVJRVRfVEhSRVNIICAgICAgIGNwdV90b19sZTE2KDEpICAvKiBwYWNrZXRzICovCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENhbGlicmF0aW9ucyAtIGltcGxlbWVudGVkIGluIGl3bC1jYWxpYi5jCkBAIC0zMTksNyArMzkxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTcGVjdHJ1bSBNZWFzdXJlZW10bnMgaW4gIGl3bC1zcGVjdHJ1bS5jCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19JV0xBR05fU1BFQ1RSVU1fTUVBU1VSRU1FTlQKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVAogdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikge30KQEAgLTM0MiwxMSArNDE0LDIzIEBACiAKIGludCBpd2xfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9ob3N0X2NtZCAqY21kKTsKIAoraW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsCisJCQl1OCBtZXRhX2ZsYWcpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBDSQkJCQkJCSAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaXJxcmV0dXJuX3QgaXdsX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbmxpbmUgdTE2IGl3bF9wY2llX2xpbmtfY3RsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcG9zOworCXUxNiBwY2lfbG5rX2N0bDsKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHByaXYtPnBjaV9kZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnBjaV9sbmtfY3RsKTsKKwlyZXR1cm4gcGNpX2xua19jdGw7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXJyb3IgSGFuZGxpbmcgRGVidWdnaW5nCkBAIC0zNTQsNiArNDM4LDExIEBACiB2b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEdFT1MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBpd2xjb3JlX2luaXRfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xjb3JlX2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCiAKQEAgLTQyMiw2ICs1MTEsNyBAQAogfQogCiBleHRlcm4gdm9pZCBpd2xfcmZfa2lsbF9jdF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsX3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZsYWdzKTsKIGV4dGVybiBpbnQgaXdsX3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogZXh0ZXJuIGludCBpd2xfc2VuZF9scV9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAppbmRleCBmMzRlZGU0Li4yZjEyNDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIxMSw2ICsyMTEsOSBAQAogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTM1MCAgICAgICAgICAgKDB4MDAwMDAzMCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxMDAgICAgICAgICAgICgweDAwMDAwNTApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MTUwICAgICAgICAgICAoMHgwMDAwMDQwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfMTAwMCAgICAgICAgICAgKDB4MDAwMDA2MCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4MDAgICAgICAgICAgICgweDAwMDAwNzApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV82eDUwICAgICAgICAgICAoMHgwMDAwMDgwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfTk9ORSAgICAgICAgICAgKDB4MDAwMDBGMCkKIAogLyogRUVQUk9NIFJFRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKaW5kZXggNTZjMTNiNC4uNjVkMWE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgogICoKQEAgLTI5LDE2ICsyOSwyOSBAQAogI2lmbmRlZiBfX2l3bF9kZWJ1Z19oX18KICNkZWZpbmUgX19pd2xfZGVidWdfaF9fCiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotI2RlZmluZSBJV0xfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCi0gIGRldl9wcmludGsoS0VSTl9FUlIsICYocHJpdi0+aHctPndpcGh5LT5kZXYpLCAiJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCitzdHJ1Y3QgaXdsX3ByaXY7CiAKLSNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKChwcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpICYmIG5ldF9yYXRlbGltaXQoKSkgXAotICBkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKHByaXYtPmh3LT53aXBoeS0+ZGV2KSwgIiVjICVzICIgZm10LCBcCi0JIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorI2RlZmluZSBJV0xfRVJSKHAsIGYsIGEuLi4pIGRldl9lcnIoJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisjZGVmaW5lIElXTF9XQVJOKHAsIGYsIGEuLi4pIGRldl93YXJuKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfSU5GTyhwLCBmLCBhLi4uKSBkZXZfaW5mbygmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0NSSVQocCwgZiwgYS4uLikgZGV2X2NyaXQoJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChfX3ByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkJCQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKF9fcHJpdi0+aHctPndpcGh5LT5kZXYpLAkJXAorCQkJICIlYyAlcyAiIGZtdCwgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsCVwKKwkJCV9fZnVuY19fICwgIyMgYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKF9fcHJpdiwgbGV2ZWwsIGZtdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICgoX19wcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpICYmIG5ldF9yYXRlbGltaXQoKSkJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJihfX3ByaXYtPmh3LT53aXBoeS0+ZGV2KSwJCVwKKwkJCSIlYyAlcyAiIGZtdCwgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsCVwKKwkJCSBfX2Z1bmNfXyAsICMjIGFyZ3MpOwkJCQlcCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIGl3bF9wcmludF9oZXhfZHVtcChwcml2LCBsZXZlbCwgcCwgbGVuKSAJCQlcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCkBAIC02MSw2ICs3NCw3IEBACiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfdHhfc3RhdGlzdGljczsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9sb2dfZXZlbnQ7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfY2hhbm5lbHM7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3RhdHVzOwogCX0gZGJnZnNfZGF0YV9maWxlczsKIAlzdHJ1Y3QgZGlyX3JmX2ZpbGVzIHsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX3NlbnNpdGl2aXR5OwpAQCAtNzYsOCArOTAsOCBAQAogI2VuZGlmCiAKICNlbHNlCi0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKQotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikKKyNkZWZpbmUgSVdMX0RFQlVHKF9fcHJpdiwgbGV2ZWwsIGZtdCwgYXJncy4uLikKKyNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKF9fcHJpdiwgbGV2ZWwsIGZtdCwgYXJncy4uLikKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfcHJpbnRfaGV4X2R1bXAoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgdm9pZCAqcCwgdTMyIGxlbikKIHt9CkBAIC0xMTcsODQgKzEzMSw4NSBAQAogICogd2hlbiBDT05GSUdfSVdMV0lGSV9ERUJVRz15LgogICovCiAKKy8qIDB4MDAwMDAwMEYgLSAweDAwMDAwMDAxICovCiAjZGVmaW5lIElXTF9ETF9JTkZPCQkoMSA8PCAwKQogI2RlZmluZSBJV0xfRExfTUFDODAyMTEJCSgxIDw8IDEpCiAjZGVmaW5lIElXTF9ETF9IQ01ECQkoMSA8PCAyKQogI2RlZmluZSBJV0xfRExfU1RBVEUJCSgxIDw8IDMpCisvKiAweDAwMDAwMEYwIC0gMHgwMDAwMDAxMCAqLwogI2RlZmluZSBJV0xfRExfTUFDRFVNUAkJKDEgPDwgNCkKICNkZWZpbmUgSVdMX0RMX0hDTURfRFVNUAkoMSA8PCA1KQotI2RlZmluZSBJV0xfRExfUkFESU8gICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBJV0xfRExfUE9XRVIgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBJV0xfRExfVEVNUCAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJV0xfRExfUkFESU8JCSgxIDw8IDcpCisvKiAweDAwMDAwRjAwIC0gMHgwMDAwMDEwMCAqLworI2RlZmluZSBJV0xfRExfUE9XRVIJCSgxIDw8IDgpCisjZGVmaW5lIElXTF9ETF9URU1QCQkoMSA8PCA5KQorI2RlZmluZSBJV0xfRExfTk9USUYJCSgxIDw8IDEwKQorI2RlZmluZSBJV0xfRExfU0NBTgkJKDEgPDwgMTEpCisvKiAweDAwMDBGMDAwIC0gMHgwMDAwMTAwMCAqLworI2RlZmluZSBJV0xfRExfQVNTT0MJCSgxIDw8IDEyKQorI2RlZmluZSBJV0xfRExfRFJPUAkJKDEgPDwgMTMpCisjZGVmaW5lIElXTF9ETF9UWFBPV0VSCQkoMSA8PCAxNCkKKyNkZWZpbmUgSVdMX0RMX0FQCQkoMSA8PCAxNSkKKy8qIDB4MDAwRjAwMDAgLSAweDAwMDEwMDAwICovCisjZGVmaW5lIElXTF9ETF9GVwkJKDEgPDwgMTYpCisjZGVmaW5lIElXTF9ETF9SRl9LSUxMCQkoMSA8PCAxNykKKyNkZWZpbmUgSVdMX0RMX0ZXX0VSUk9SUwkoMSA8PCAxOCkKKyNkZWZpbmUgSVdMX0RMX0xFRAkJKDEgPDwgMTkpCisvKiAweDAwRjAwMDAwIC0gMHgwMDEwMDAwMCAqLworI2RlZmluZSBJV0xfRExfUkFURQkJKDEgPDwgMjApCisjZGVmaW5lIElXTF9ETF9DQUxJQgkJKDEgPDwgMjEpCisjZGVmaW5lIElXTF9ETF9XRVAJCSgxIDw8IDIyKQorI2RlZmluZSBJV0xfRExfVFgJCSgxIDw8IDIzKQorLyogMHgwRjAwMDAwMCAtIDB4MDEwMDAwMDAgKi8KKyNkZWZpbmUgSVdMX0RMX1JYCQkoMSA8PCAyNCkKKyNkZWZpbmUgSVdMX0RMX0lTUgkJKDEgPDwgMjUpCisjZGVmaW5lIElXTF9ETF9IVAkJKDEgPDwgMjYpCisjZGVmaW5lIElXTF9ETF9JTwkJKDEgPDwgMjcpCisvKiAweEYwMDAwMDAwIC0gMHgxMDAwMDAwMCAqLworI2RlZmluZSBJV0xfRExfMTFICQkoMSA8PCAyOCkKKyNkZWZpbmUgSVdMX0RMX1NUQVRTCQkoMSA8PCAyOSkKKyNkZWZpbmUgSVdMX0RMX1RYX1JFUExZCQkoMSA8PCAzMCkKKyNkZWZpbmUgSVdMX0RMX1FPUwkJKDEgPDwgMzEpCiAKLSNkZWZpbmUgSVdMX0RMX05PVElGICAgICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIElXTF9ETF9TQ0FOICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBJV0xfRExfQVNTT0MgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgSVdMX0RMX0RST1AgICAgICAgICAgKDEgPDwgMTMpCi0KLSNkZWZpbmUgSVdMX0RMX1RYUE9XRVIgICAgICAgKDEgPDwgMTQpCi0KLSNkZWZpbmUgSVdMX0RMX0FQICAgICAgICAgICAgKDEgPDwgMTUpCi0KLSNkZWZpbmUgSVdMX0RMX0ZXICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIElXTF9ETF9SRl9LSUxMICAgICAgICgxIDw8IDE3KQotI2RlZmluZSBJV0xfRExfRldfRVJST1JTICAgICAoMSA8PCAxOCkKLQotI2RlZmluZSBJV0xfRExfTEVEICAgICAgICAgICAoMSA8PCAxOSkKLQotI2RlZmluZSBJV0xfRExfUkFURSAgICAgICAgICAoMSA8PCAyMCkKLQotI2RlZmluZSBJV0xfRExfQ0FMSUIgICAgICAgICAoMSA8PCAyMSkKLSNkZWZpbmUgSVdMX0RMX1dFUCAgICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIElXTF9ETF9UWCAgICAgICAgICAgICgxIDw8IDIzKQotI2RlZmluZSBJV0xfRExfUlggICAgICAgICAgICAoMSA8PCAyNCkKLSNkZWZpbmUgSVdMX0RMX0lTUiAgICAgICAgICAgKDEgPDwgMjUpCi0jZGVmaW5lIElXTF9ETF9IVCAgICAgICAgICAgICgxIDw8IDI2KQotI2RlZmluZSBJV0xfRExfSU8gICAgICAgICAgICAoMSA8PCAyNykKLSNkZWZpbmUgSVdMX0RMXzExSCAgICAgICAgICAgKDEgPDwgMjgpCi0KLSNkZWZpbmUgSVdMX0RMX1NUQVRTICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIElXTF9ETF9UWF9SRVBMWSAgICAgICgxIDw8IDMwKQotI2RlZmluZSBJV0xfRExfUU9TICAgICAgICAgICAoMSA8PCAzMSkKLQotI2RlZmluZSBJV0xfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAiIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTkZPKGYsIGEuLi4pICAgIElXTF9ERUJVRyhJV0xfRExfSU5GTywgZiwgIyMgYSkKLQotI2RlZmluZSBJV0xfREVCVUdfTUFDODAyMTEoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfTUFDODAyMTEsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19NQUNEVU1QKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX01BQ0RVTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19URU1QKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9URU1QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU0NBTihmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfU0NBTiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JYKGYsIGEuLi4pICAgICBJV0xfREVCVUcoSVdMX0RMX1JYLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfVFgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JU1IoZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JU1IsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19MRUQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9MRUQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19XRVAoZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9XRVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hDTUQsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IQ19EVU1QKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSENNRF9EVU1QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0ZXKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfRlcsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0RST1AoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0lPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFURShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1JBVEUsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX05PVElGKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTk9USUYsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChmLCBhLi4uKSBcCi0JSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSFQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IVCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TVEFUU19MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUU9TKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9RT1MsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQURJTyhmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9SQURJTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1BPV0VSKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfMTFIKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMXzExSCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0lORk8ocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9JTkZPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTUFDODAyMTEocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX01BQ0RVTVAocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9NQUNEVU1QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVEVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RFTVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TQ0FOKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfU0NBTiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JYKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUlgsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RYLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSVNSKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSVNSLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTEVEKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfTEVELCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfV0VQKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfV0VQLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSEMocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9IQ01ELCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSENfRFVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hDTURfRFVNUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0NBTElCKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfQ0FMSUIsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19GVyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0ZXLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUkZfS0lMTChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JGX0tJTEwsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19EUk9QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0RST1BfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX0RST1AsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19BUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0FQLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUkFURShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKHAsIGYsIGEuLi4pCVwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9SQVRFLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTk9USUYocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKHAsIGYsIGEuLi4pCVwKKwkJSVdMX0RFQlVHKHAsIElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0NfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IVChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hULCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU1RBVFMocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9TVEFUUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHAsIGYsIGEuLi4pCVwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9TVEFUUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWV9MSU1JVChwLCBmLCBhLi4uKSBcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19RT1MocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9RT1MsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQURJTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JBRElPLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUE9XRVIocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9QT1dFUiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHXzExSChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMXzExSCwgZiwgIyMgYSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKaW5kZXggZDUyNTNhMS4uMzZjZmVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC02Myw2ICs2MywxNCBAQAogCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgREVCVUdGU19BRERfWDMyKG5hbWUsIHBhcmVudCwgcHRyKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lID0gICAgICAgICAgICAgICAgICAgICBcCisJZGVidWdmc19jcmVhdGVfeDMyKCNuYW1lLCAwNDQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgICAgXAorCWlmIChJU19FUlIoZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCQlcCisJCQl8fCAhZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCVwKKwkJZ290byBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIERFQlVHRlNfUkVNT1ZFKG5hbWUpICBkbyB7ICAgICAgICAgICAgICBcCiAJZGVidWdmc19yZW1vdmUobmFtZSk7ICAgICAgICAgICAgICAgICAgIFwKIAluYW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTY0LDkgKzE3Miw2IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJvZmZzZXQgaXM6IDB4JXhcdGxlbiBpczogMHgleFxuIiwKLQlwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQsIHByaXYtPmRiZ2ZzLT5zcmFtX2xlbik7Ci0KIAlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWZvciAoaSA9IHByaXYtPmRiZ2ZzLT5zcmFtX2xlbjsgaSA+IDA7IGkgLT0gNCkgewogCQl2YWwgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgKyBcCkBAIC0zMDEsMTQgKzMwNiwxNCBAQAogCWJ1Zl9zaXplID0gNCAqIGVlcHJvbV9sZW4gKyAyNTY7CiAKIAlpZiAoZWVwcm9tX2xlbiAlIDE2KSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDE2LlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVFUFJPTSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAxNi5cbiIpOwogCQlyZXR1cm4gLUVOT0RBVEE7CiAJfQogCiAJLyogNCBjaGFyYWN0ZXJzIGZvciBieXRlIDB4WVkgKi8KIAlidWYgPSBremFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTM2NSw3ICszNzAsNyBAQAogCiAJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJSVdMX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC00MjAsNyArNDI1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhzcmFtKTsKIERFQlVHRlNfV1JJVEVfRklMRV9PUFMobG9nX2V2ZW50KTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhlZXByb20pOwpAQCAtNDYyLDYgKzQ2Niw3IEBACiAJREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkYXRhKTsKIAlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoY2hhbm5lbHMsIGRhdGEpOworCURFQlVHRlNfQUREX1gzMihzdGF0dXMsIGRhdGEsICh1MzIgKikmcHJpdi0+c3RhdHVzKTsKIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIHJmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7CiAJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCByZiwKIAkJCSAmcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwpOwpAQCAtNDY5LDcgKzQ3NCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLQlJV0xfRVJST1IoIkNhbid0IG9wZW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKKwlJV0xfRVJSKHByaXYsICJDYW4ndCBvcGVuIHRoZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CiAJaXdsX2RiZ2ZzX3VucmVnaXN0ZXIocHJpdik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggMDQ2OGZjYy4uMGJhYWU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzYsMTMgKzM2LDE1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCi0jZGVmaW5lIERSVl9OQU1FICAgICAgICAiaXdsYWduIgotI2luY2x1ZGUgIml3bC1yZmtpbGwuaCIKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCi0jaW5jbHVkZSAiaXdsLTQ5NjUtaHcuaCIKICNpbmNsdWRlICJpd2wtY3NyLmgiCiAjaW5jbHVkZSAiaXdsLXBycGguaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKICNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtcmZraWxsLmgiCisjaW5jbHVkZSAiaXdsLTQ5NjUtaHcuaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1ody5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWxlZC5oIgogI2luY2x1ZGUgIml3bC1sZWQuaCIKICNpbmNsdWRlICJpd2wtcG93ZXIuaCIKICNpbmNsdWRlICJpd2wtYWduLXJzLmgiCkBAIC01NSw2ICs1NywyOCBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfM2Fnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnOworCisvKiBzaGFyZWQgc3RydWN0dXJlcyBmcm9tIGl3bC01MDAwLmMgKi8KK2V4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtczsKK2V4dGVybiBzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wczsKK2V4dGVybiBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNTAwMF9saWI7CitleHRlcm4gc3RydWN0IGl3bF9oY21kX29wcyBpd2w1MDAwX2hjbWQ7CitleHRlcm4gc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w1MDAwX2hjbWRfdXRpbHM7CisKKy8qIHNoYXJlZCBmdW5jdGlvbnMgZnJvbSBpd2wtNTAwMC5jICovCitleHRlcm4gdTE2IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pOworZXh0ZXJuIHUxNiBpd2w1MDAwX2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLAorCQkJCSAgICAgdTggKmRhdGEpOworZXh0ZXJuIHZvaWQgaXdsNTAwMF9ydHNfdHhfY21kX2ZsYWcoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJCSAgICBfX2xlMzIgKnR4X2ZsYWdzKTsKK2V4dGVybiBpbnQgaXdsNTAwMF9jYWxjX3Jzc2koc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnJ4X3Jlc3ApOwogCiAvKiBDVC1LSUxMIGNvbnN0YW50cyAqLwogI2RlZmluZSBDVF9LSUxMX1RIUkVTSE9MRAkxMTAgLyogaW4gQ2Vsc2l1cyAqLwpAQCAtMTMyLDkgKzE1NiwxMiBAQAogICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKICAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgogICovCisjZGVmaW5lIFRGRF9UWF9DTURfU0xPVFMgMjU2CisjZGVmaW5lIFRGRF9DTURfU0xPVFMgMzIKKwogc3RydWN0IGl3bF90eF9xdWV1ZSB7CiAJc3RydWN0IGl3bF9xdWV1ZSBxOwotCXN0cnVjdCBpd2xfdGZkICp0ZmRzOworCXZvaWQgKnRmZHM7CiAJc3RydWN0IGl3bF9jbWQgKmNtZFtURkRfVFhfQ01EX1NMT1RTXTsKIAlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4YjsKIAl1OCBuZWVkX3VwZGF0ZTsKQEAgLTE1NCw2ICsxODEsMzYgQEAKIAlzNjQgbGFzdF9yYWRhcl90aW1lOwogfTsKIAorI2RlZmluZSBJV0w0OTY1X01BWF9SQVRFICgzMykKKworc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCB7CisJLyogbWF4aW11bSBwb3dlciBsZXZlbCB0byBwcmV2ZW50IGNsaXBwaW5nIGZvciBlYWNoIHJhdGUsIGRlcml2ZWQgYnkKKwkgKiAgIHVzIGZyb20gdGhpcyBiYW5kJ3Mgc2F0dXJhdGlvbiBwb3dlciBpbiBFRVBST00gKi8KKwljb25zdCBzOCBjbGlwX3Bvd2Vyc1tJV0xfTUFYX1JBVEVTXTsKK307CisKKy8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KKyAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgorICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKKyAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCisgKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50CisgKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCisgKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7CisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCisJczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCisJczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLworCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLworfTsKKworLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKKyAqIGNoYW5uZWwuICovCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8geworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLworCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLworCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KK307CisKIC8qCiAgKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQogICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudApAQCAtMTg0LDggKzI0MSwxNSBAQAogCXM4IGZhdF9zY2FuX3Bvd2VyOwkvKiAoZEJtKSBlZXByb20sIGRpcmVjdCBzY2FucywgYW55IHJhdGUgKi8KIAl1OCBmYXRfZmxhZ3M7CQkvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KIAl1OCBmYXRfZXh0ZW5zaW9uX2NoYW5uZWw7IC8qIEhUX0lFX0VYVF9DSEFOTkVMXyogKi8KLX07CiAKKwkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCisJICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCisJICogICByZW1lbWJlcmluZy9tb2RpZnlpbmcgZ2FpbiBzZXR0aW5ncyAoaW5kZXhlcykuICovCisJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHBvd2VyX2luZm9bSVdMNDk2NV9NQVhfUkFURV07CisKKwkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOworfTsKIAogI2RlZmluZSBJV0xfVFhfRklGT19BQzAJMAogI2RlZmluZSBJV0xfVFhfRklGT19BQzEJMQpAQCAtMzcwLDcgKzQzNCw3IEBACiAJdTgga2V5WzMyXTsKIH07CiAKLXVuaW9uIGl3bDQ5NjVfaHRfcmF0ZV9zdXBwIHsKK3VuaW9uIGl3bF9odF9yYXRlX3N1cHAgewogCXUxNiByYXRlczsKIAlzdHJ1Y3QgewogCQl1OCBzaXNvX3JhdGU7CkBAIC00MzAsNiArNDk0LDI0IEBACiAjZGVmaW5lIFNUQV9QU19TVEFUVVNfV0FLRSAgICAgICAgICAgICAwCiAjZGVmaW5lIFNUQV9QU19TVEFUVVNfU0xFRVAgICAgICAgICAgICAxCiAKK3N0cnVjdCBpd2wzOTQ1X3RpZF9kYXRhIHsKKwl1MTYgc2VxX251bWJlcjsKK307CisKK3N0cnVjdCBpd2wzOTQ1X2h3X2tleSB7CisJZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGc7CisJaW50IGtleWxlbjsKKwl1OCBrZXlbMzJdOworfTsKKworc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSB7CisJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBzdGE7CisJc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgdGlkW01BWF9USURfQ09VTlRdOworCXU4IHVzZWQ7CisJdTggcHNfc3RhdHVzOworCXN0cnVjdCBpd2wzOTQ1X2h3X2tleSBrZXlpbmZvOworfTsKKwogc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5IHsKIAlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgc3RhOwogCXN0cnVjdCBpd2xfdGlkX2RhdGEgdGlkW01BWF9USURfQ09VTlRdOwpAQCAtNDk3LDExICs1NzksMTMgQEAKICAqIEBtYXhfdHhxX251bTogTWF4ICMgVHggcXVldWVzIHN1cHBvcnRlZAogICogQGRtYV9jaG5sX251bTogTnVtYmVyIG9mIFR4IERNQS9GSUZPIGNoYW5uZWxzCiAgKiBAc2NkX2JjX3RibHNfc2l6ZTogc2l6ZSBvZiBzY2hlZHVsZXIgYnl0ZSBjb3VudCB0YWJsZXMKKyAqIEB0ZmRfc2l6ZTogVEZEIHNpemUKICAqIEB0eC9yeF9jaGFpbnNfbnVtOiBOdW1iZXIgb2YgVFgvUlggY2hhaW5zCiAgKiBAdmFsaWRfdHgvcnhfYW50OiB1c2FibGUgYW50ZW5uYXMKICAqIEBtYXhfcnhxX3NpemU6IE1heCAjIFJ4IGZyYW1lcyBpbiBSeCBxdWV1ZSAobXVzdCBiZSBwb3dlci1vZi0yKQogICogQG1heF9yeHFfbG9nOiBMb2ctYmFzZS0yIG9mIG1heF9yeHFfc2l6ZQogICogQHJ4X2J1Zl9zaXplOiBSeCBidWZmZXIgc2l6ZQorICogQHJ4X3dydF9wdHJfcmVnOiBGSHszOX1fUlNDU1JfQ0hOTDBfV1BUUgogICogQG1heF9zdGF0aW9uczoKICAqIEBiY2FzdF9zdGFfaWQ6CiAgKiBAZmF0X2NoYW5uZWw6IGlzIDQwTUh6IHdpZHRoIHBvc3NpYmxlIGluIGJhbmQgMi40CkBAIC01MTYsNiArNjAwLDcgQEAKIAl1OCBtYXhfdHhxX251bTsKIAl1OCBkbWFfY2hubF9udW07CiAJdTE2IHNjZF9iY190YmxzX3NpemU7CisJdTMyIHRmZF9zaXplOwogCXU4ICB0eF9jaGFpbnNfbnVtOwogCXU4ICByeF9jaGFpbnNfbnVtOwogCXU4ICB2YWxpZF90eF9hbnQ7CkBAIC01MjMsNiArNjA4LDcgQEAKIAl1MTYgbWF4X3J4cV9zaXplOwogCXUxNiBtYXhfcnhxX2xvZzsKIAl1MzIgcnhfYnVmX3NpemU7CisJdTMyIHJ4X3dydF9wdHJfcmVnOwogCXUzMiBtYXhfcGt0X3NpemU7CiAJdTggIG1heF9zdGF0aW9uczsKIAl1OCAgYmNhc3Rfc3RhX2lkOwpAQCAtNzU1LDcgKzg0MSw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpIHx8IGRlZmluZWQoQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpCiAJLyogc3BlY3RydW0gbWVhc3VyZW1lbnQgcmVwb3J0IGNhY2hpbmcgKi8KIAlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKIAl1OCBtZWFzdXJlbWVudF9zdGF0dXM7CkBAIC03NjgsNiArODU0LDEwIEBACiAJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoYW5uZWxfaW5mbzsJLyogY2hhbm5lbCBpbmZvIGFycmF5ICovCiAJdTggY2hhbm5lbF9jb3VudDsJLyogIyBvZiBjaGFubmVscyAqLwogCisJLyogZWFjaCBjYWxpYnJhdGlvbiBjaGFubmVsIGdyb3VwIGluIHRoZSBFRVBST00gaGFzIGEgZGVyaXZlZAorCSAqIGNsaXAgc2V0dGluZyBmb3IgZWFjaCByYXRlLiAzOTQ1IG9ubHkuKi8KKwljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIGNsaXAzOV9ncm91cHNbNV07CisKIAkvKiB0aGVybWFsIGNhbGlicmF0aW9uICovCiAJczMyIHRlbXBlcmF0dXJlOwkvKiBkZWdyZWVzIEtlbHZpbiAqLwogCXMzMiBsYXN0X3RlbXBlcmF0dXJlOwpAQCAtNzgxLDcgKzg3MSw3IEBACiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9wYXNzX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydF90c2Y7Ci0Jc3RydWN0IGl3bF9zY2FuX2NtZCAqc2NhbjsKKwl2b2lkICpzY2FuOwogCWludCBzY2FuX2JhbmRzOwogCWludCBvbmVfZGlyZWN0X3NjYW47CiAJdTggZGlyZWN0X3NzaWRfbGVuOwpAQCAtODMyLDE4ICs5MjIsMTggQEAKIAkgKiA0OTY1J3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCiAJc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwogCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOwotI2lmZGVmIENPTkZJR19JV0xXSUZJX1JGS0lMTAorI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfUkZLSUxMKQogCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwotCXN0cnVjdCBpd2xfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwogCXU4IGxhc3RfYmxpbmtfcmF0ZTsKIAl1OCBhbGxvd19ibGlua2luZzsKIAl1NjQgbGVkX3RwdDsKKwlzdHJ1Y3QgaXdsX2xlZCBsZWRbSVdMX0xFRF9UUkdfTUFYXTsKKwl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7CiAjZW5kaWYKLQogCXUxNiBhY3RpdmVfcmF0ZTsKIAl1MTYgYWN0aXZlX3JhdGVfYmFzaWM7CiAKQEAgLTg5Myw3ICs5ODMsNiBAQAogCXUxNiByYXRlc19tYXNrOwogCiAJdTMyIHBvd2VyX21vZGU7Ci0JdTMyIGFudGVubmE7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXUxNiBydHNfdGhyZXNob2xkOwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKQEAgLTkyOSw2ICsxMDE4LDEwIEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAorCS8qQWRkZWQgZm9yIDM5NDUgKi8KKwl2b2lkICpzaGFyZWRfdmlydDsKKwlkbWFfYWRkcl90IHNoYXJlZF9waHlzOworCS8qRW5kKi8KIAlzdHJ1Y3QgaXdsX2h3X3BhcmFtcyBod19wYXJhbXM7CiAKIApAQCAtOTYwLDYgKzEwNTMsMTEgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7CisKKwkvKkZvciAzOTQ1IG9ubHkqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKIAlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKQEAgLTk4Miw2ICsxMDgwLDE1IEBACiAJdTMyIGRpc2FibGVfdHhfcG93ZXJfY2FsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CisKKwkvKkZvciAzOTQ1Ki8KKyNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgorCisJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzXzM5OworCisJc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc18zOVtJV0xfU1RBVElPTl9DT1VOVF07CisKKwl1MzIgc3RhX3N1cHBfcmF0ZXM7CiB9OyAvKml3bF9wcml2ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IGNlMmY0NzMuLjc1NTE3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKIAkJCQlFRVBST01fU0VNX1RJTUVPVVQpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCUlXTF9ERUJVR19JTygiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKKwkJCUlXTF9ERUJVR19JTyhwcml2LCAiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKIAkJCQljb3VudCsxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAogCQkJCQkgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOworCQkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLAorCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSBWRVI9MHgleCA8IDB4JXggQ0FMSUI9MHgleCA8IDB4JXhcbiIsCiAJCSAgZWVwcm9tX3ZlciwgcHJpdi0+Y2ZnLT5lZXByb21fdmVyLAogCQkgIGNhbGliX3ZlciwgIHByaXYtPmNmZy0+ZWVwcm9tX2NhbGliX3Zlcik7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19JTkZPKCJGQVQgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC00MzIsMTEgKzQzMiwxMSBAQAogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCiAJaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCXByaXYtPmNoYW5uZWxfY291bnQgPQogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKSArCkBAIC00NDUsMTIgKzQ0NSwxMiBAQAogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF80KSArCiAJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzUpOwogCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwogCiAJcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9jaGFubmVsX2luZm8pICoKIAkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwogCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJIElFRUU4MDIxMV9DSEFOX05PX0ZBVF9CRUxPVyk7CiAKIAkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgorCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKIAkJCQkJICAgICAgICJObyB0cmFmZmljXG4iLAogCQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGNoX2luZm8tPmZsYWdzLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CiAJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwogCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKIAkJCQkgICAgICAgIiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCiAJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB1c2VyX3R4cG93ZXJfbGltaXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCS8qIFNldCB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKIAkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwogCQkJaWYgKGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnID4KIAkJCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQpAQCAtNTMxLDYgKzUzMSwxMyBAQAogCQl9CiAJfQogCisJLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09CisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMucmVndWxhdG9yeV9iYW5kc1s2XSA9PQorCSAgICBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCkKKwkJcmV0dXJuIDA7CisKIAkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCiAJZm9yIChiYW5kID0gNjsgYmFuZCA8PSA3OyBiYW5kKyspIHsKIAkJZW51bSBpZWVlODAyMTFfYmFuZCBpZWVlYmFuZDsKQEAgLTU4Miw2ICs1ODksNyBAQAogCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7CiAJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NoYW5uZWxfbWFwKTsKIAogLyoqCiAgKiBpd2xfZ2V0X2NoYW5uZWxfaW5mbyAtIEZpbmQgZHJpdmVyJ3MgcHJpdmF0ZSBjaGFubmVsIGluZm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggNjAzYzg0Yi4uMzQ3OTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExOCw2ICsxMTgsOSBAQAogCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogMzk0NSBTcGVjaWZpYyAqLworI2RlZmluZSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTgkoMHgyZikKKwogLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLwogI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCiAKQEAgLTM2Nyw2ICszNzAsOCBAQAogICovCiAjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMgKDIqMHhBOCkJLyogMjIgYnl0ZXMgKi8KIAorI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVAkJCSgwKQorCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwogCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggZDdkYTE5OC4uNjVmYThhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5OSw2ICszOTksMjEgQEAKICAqLwogI2RlZmluZSBGSF9UWF9DSElDS0VOX0JJVFNfU0NEX0FVVE9fUkVUUllfRU4JKDB4MDAwMDAwMDIpCiAKKyNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4CisKKy8qCisgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAorI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKKworLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLworI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfM0sgKDMgKiAxMDAwKSAvKiAzOTQ1IG9ubHkgKi8KKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3JiX3N0YXR1cyAtIHJlc2V2ZSBidWZmZXIgc3RhdHVzCiAgKiAJaG9zdCBtZW1vcnkgbWFwcGVkIEZIIHJlZ2lzdGVycwpAQCAtNDE0LDYgKzQyOSw3IEBACiAJX19sZTE2IGNsb3NlZF9mcl9udW07CiAJX19sZTE2IGZpbmlzaGVkX3JiX251bTsKIAlfX2xlMTYgZmluaXNoZWRfZnJfbmFtOworCV9fbGUzMiBfX3VudXNlZDsgLyogMzk0NSBvbmx5ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00NzcsNyArNDkzLDYgQEAKIAlfX2xlMzIgX19wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCiAvKiBLZWVwIFdhcm0gU2l6ZSAqLwogI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyogNGsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDRiMzViMzAuLjE3ZDYxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTA5LDE0ICsxMDksMTQgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXJldHVybiAxOwogCX0KIAogCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlzd2l0Y2ggKGNtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJCQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiYmFjayBmcm9tICVzICgweCUwOFgpXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAl9CiAjZW5kaWYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJcmV0ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzQsOCArMTc0LDkgQEAKIAlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODgsNyArMTg5LDcgQEAKIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nICVzOiBlbnF1ZXVlX2hjbWQgZmFpbGVkOiAlZFxuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5OCw5ICsxOTksMTAgQEAKIAkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CiAKIAkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKQEAgLTIwOSwxOSArMjExLDE5IEBACiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUNBTkNFTEVEOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGNhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCBjYTRmNjM4Li5mYjY0ZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwYTkyZTc0Li4wODNlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgdTMyIG9mcywgdTMyIHZhbCkKIHsKLQlJV0xfREVCVUdfSU8oIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwogfQogI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXApAQCAtNzksNyArNzksNyBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiBzdGF0aWMgaW5saW5lIHUzMiBfX2l3bF9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcykKIHsKLQlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglMDhYKSAtICVzICVkXG4iLCBvZnMsIGYsIGwpOworCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7CiAJcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7CiB9CiAjZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJCQkgdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKIHsKIAlpbnQgcmV0ID0gX2l3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCiAJCSAgICAgYWRkciwgYml0cywgbWFzaywKIAkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwogCXJldHVybiByZXQ7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAl1MzIgdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2s7Ci0JSVdMX0RFQlVHX0lPKCJzZXRfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOworCUlXTF9ERUJVR19JTyhwcml2LCAic2V0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfc2V0X2JpdChwLCByLCBtKSBfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiB7CiAJdTMyIHZhbCA9IF9pd2xfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfY2xlYXJfYml0KHAsIHIsIG0pIF9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCkBAIC0xNTYsNiArMTU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OworCXUzMiB2YWw7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCiAJCXJldHVybiAwOwpAQCAtMTY1LDkgKzE2NiwxMCBAQAogCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKIAkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCA1MCk7CisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgMTUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiTUFDIGlzIGluIGRlZXAgc2xlZXAhXG4iKTsKKwkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE4Miw5ICsxODQsOSBAQAogCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkICVzICVkLlxuIiwgZiwgbCk7CisJCUlXTF9FUlIocHJpdiwgIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CiAJcmV0dXJuIF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogfQogI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKQEAgLTIwNyw5ICsyMDksOSBAQAogCQkJCQkgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlcyAlZC5cbiIsIGYsIGwpOworCQlJV0xfRVJSKHByaXYsICJSZWxlYXNlIHVuaGVsZCBuaWMgYWNjZXNzIGF0IGxpbmUgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CisJSVdMX0RFQlVHX0lPKHByaXYsICJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKIAlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KICNkZWZpbmUgaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCkBAIC0yMjksOCArMjMxLDggQEAKIHsKIAl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyAlZFxuIiwgZiwgbCk7Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTRYKSA9IDB4JTA4eCAtICVzICVkIFxuIiwgcmVnLCB2YWx1ZSwKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWQgXG4iLCByZWcsIHZhbHVlLAogCQkgICAgIGYsIGwpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTI1MCw3ICsyNTIsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsIHZhbHVlKTsKIH0KICNkZWZpbmUgaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpIFwKQEAgLTI4NCwxMCArMjg2LDEwIEBACiAJaW50IHJldCAgPSBfaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKKwkJSVdMX0RFQlVHX0lPKHByaXYsICJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpIC0gIgogCQkJICAgICAidGltZWRvdXQgLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgZiwgbCk7CiAJZWxzZQotCQlJV0xfREVCVUdfSU8oInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgorCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgogCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA4LDcgKzMxMCw3IEBACiAJCQkJICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlyZXR1cm4gX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIH0KIApAQCAtMzMxLDcgKzMzMyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlfaXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKIH0KIApAQCAtMzQ5LDcgKzM1MSw3IEBACiAJCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAKIAlfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKIH0KQEAgLTM2Nyw3ICszNjksNyBAQAogCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKIHsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOwogCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7CiB9CiAjZGVmaW5lIGl3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDExZWNjZDcuLjE5NjgwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTEyMyw3ICsxMjMsNyBAQAogLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb25fcmVnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb24gJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9uICVkXG4iLCBsZWRfaWQpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCQkub2ZmID0gMCwKIAkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCiAJfTsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb2ZmICVkXG4iLCBsZWRfaWQpOworCUlXTF9ERUJVR19MRUQocHJpdiwgImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CiAJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOwogfQogI2VuZGlmCkBAIC0xNTksNyArMTU5LDcgQEAKIC8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCUlXTF9ERUJVR19MRUQoIkxFRCBSZWcgb2ZmXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgUmVnIG9mZlxuIik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIENTUl9MRURfUkVHX1RSVU5fT0ZGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQAogICovCiBzdGF0aWMgaW50IGl3bF9sZWRfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJBc3NvY2lhdGVkXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJBc3NvY2lhdGVkXG4iKTsKIAlwcml2LT5hbGxvd19ibGlua2luZyA9IDE7CiAJcmV0dXJuIGl3bDQ5NjVfbGVkX29uX3JlZyhwcml2LCBsZWRfaWQpOwogfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJldHVybjsKIAogCi0JSVdMX0RFQlVHX0xFRCgiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCiAJCQlsZWRfdHlwZV9zdHJbbGVkLT50eXBlXSwgYnJpZ2h0bmVzcyk7CiAJc3dpdGNoIChicmlnaHRuZXNzKSB7CiAJY2FzZSBMRURfRlVMTDoKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAJaWYgKHRwdCA8IDApIC8qIHdyYXBhcm91bmQgKi8KIAkJdHB0ID0gLXRwdDsKIAotCUlXTF9ERUJVR19MRUQoInRwdCAlbGxkIGN1cnJlbnRfdHB0ICVsbHVcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAidHB0ICVsbGQgY3VycmVudF90cHQgJWxsdVxuIiwKIAkJKGxvbmcgbG9uZyl0cHQsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudF90cHQpOwogCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQkJaWYgKHRwdCAgPiAoYmxpbmtfdGJsW2ldLnRwdCAqIElXTF8xTUJfUkFURSkpCiAJCQkJYnJlYWs7CiAKLQlJV0xfREVCVUdfTEVEKCJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKIAlyZXR1cm4gaTsKIH0KIApAQCAtMzUyLDcgKzM1Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6cmFkaW8iLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6OnJhZGlvIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDQ5NjVfbGVkX29uX3JlZzsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLApAQCAtMzgyLDcgKzM4Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6UlgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6OlJYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2xfbGVkc19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczpUWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczo6VFgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKaW5kZXggMDIxZTAwYi4uZWY5YjE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIElXTF9MRURfU09MSUQgMTEKICNkZWZpbmUgSVdMX0xFRF9OQU1FX0xFTiAzMQotI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgX19jb25zdGFudF9jcHVfdG9fbGUzMigxMDAwKQorI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgY3B1X3RvX2xlMzIoMTAwMCkKIAogI2RlZmluZSBJV0xfTEVEX0FDVElWSVRZICAgICAgICgwPDwxKQogI2RlZmluZSBJV0xfTEVEX0xJTksgICAgICAgICAgICgxPDwxKQpAQCAtNDcsNyArNDcsOSBAQAogCUlXTF9MRURfVFJHX1JBRElPLAogCUlXTF9MRURfVFJHX01BWCwKIH07CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAogc3RydWN0IGl3bF9sZWQgewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IDc1Y2E2YTUuLjE4YjdlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNjAsMTQgKzYwLDYgQEAKICNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzFfTUFYICAoMTApCiAKIAotI2RlZmluZSBOT1NMUCBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLCAwLCAwCi0jZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSywgMCwgMAotI2RlZmluZSBTTFBfVE9VVChUKSBfX2NvbnN0YW50X2NwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKLSNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKFgwKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMSksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDIpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgzKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYNCl9CiAKICNkZWZpbmUgSVdMX1BPV0VSX09OX0JBVFRFUlkJCUlXTF9QT1dFUl9JTkRFWF81CiAjZGVmaW5lIElXTF9QT1dFUl9PTl9BQ19ESVNBU1NPQwlJV0xfUE9XRVJfTU9ERV9DQU0KQEAgLTExMCw2ICsxMDIsNyBAQAogCXt7U0xQLCBTTFBfVE9VVCgyNSksIFNMUF9UT1VUKDI1KSwgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDB4RkYpfSwgMH0KIH07CiAKKwogLyogc2V0IGNhcmQgcG93ZXIgY29tbWFuZCAqLwogc3RhdGljIGludCBpd2xfc2V0X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqY21kKQogewpAQCAtMTM0LDEzICsxMjcsNiBAQAogCQllbHNlCiAJCQltb2RlID0gSVdMX1BPV0VSX09OX0FDX0RJU0FTU09DOwogCQlicmVhazsKLQkvKiBGSVhNRTogcmVtb3ZlIGJhdHRlcnkgYW5kIGFjIGZyb20gaGVyZSAqLwotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKIAkJYnJlYWs7CkBAIC0xNDksMTcgKzEzNSwxNyBAQAogfQogCiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnBvd19kYXRhOwogCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5KSAqIElXTF9QT1dFUl9NQVg7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kOwogCWludCBpOwotCXUxNiBwY2lfcG07CisJdTE2IGxjdGw7CiAKLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKIAotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKwlwb3dfZGF0YSA9ICZwcml2LT5wb3dlcl9kYXRhOwogCiAJbWVtc2V0KHBvd19kYXRhLCAwLCBzaXplb2YoKnBvd19kYXRhKSk7CiAKQEAgLTE2NywzOCArMTUzLDM3IEBACiAJbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKIAltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMlswXSwgJnJhbmdlXzJbMF0sIHNpemUpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZwY2lfcG0pOworCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9NQVg7IGkrKykgewogCQljbWQgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wW2ldLmNtZDsKIAotCQlpZiAocGNpX3BtICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTikKKwkJaWYgKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKQogCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJCWVsc2UKIAkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJfQotCXJldHVybiAwOwogfQogCiAvKiBhZGp1c3QgcG93ZXIgY29tbWFuZCBhY2NvcmRpbmcgdG8gRFRJTSBwZXJpb2QgYW5kIHBvd2VyIGxldmVsKi8KLXN0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jb21tYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLAotCQkJCSAgICB1MTYgbW9kZSkKK3N0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTE2IG1vZGUpCiB7Ci0JaW50IHJldCA9IDAsIGk7Ci0JdTggc2tpcDsKLQl1MzIgbWF4X3NsZWVwID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSAqcmFuZ2U7Ci0JdTggcGVyaW9kID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7CisJaW50IGk7CisJdTMyIG1heF9zbGVlcCA9IDA7CisJdTggcGVyaW9kOworCWJvb2wgc2tpcDsKIAogCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC0xOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOworCisJcG93X2RhdGEgPSAmcHJpdi0+cG93ZXJfZGF0YTsKIAogCWlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzBfTUFYKQogCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07CkBAIC0yMTIsMTQgKzE5NywxMiBAQAogCiAJaWYgKHBlcmlvZCA9PSAwKSB7CiAJCXBlcmlvZCA9IDE7Ci0JCXNraXAgPSAwOwotCX0gZWxzZQotCQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKLQotCWlmIChza2lwID09IDApIHsKLQkJbWF4X3NsZWVwID0gcGVyaW9kOwotCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwkJc2tpcCA9IGZhbHNlOwogCX0gZWxzZSB7CisJCXNraXAgPSAhIXJhbmdlW21vZGVdLm5vX2R0aW07CisJfQorCisJaWYgKHNraXApIHsKIAkJX19sZTMyIHNscF9pdHJ2bCA9IGNtZC0+c2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFIC0gMV07CiAJCW1heF9zbGVlcCA9IGxlMzJfdG9fY3B1KHNscF9pdHJ2bCk7CiAJCWlmIChtYXhfc2xlZXAgPT0gMHhGRikKQEAgLTIyNywyNCArMjEwLDI2IEBACiAJCWVsc2UgaWYgKG1heF9zbGVlcCA+ICBwZXJpb2QpCiAJCQltYXhfc2xlZXAgPSAobGUzMl90b19jcHUoc2xwX2l0cnZsKSAvIHBlcmlvZCkgKiBwZXJpb2Q7CiAJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7CisJfSBlbHNlIHsKKwkJbWF4X3NsZWVwID0gcGVyaW9kOworCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspCiAJCWlmIChsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW2ldKSA+IG1heF9zbGVlcCkKIAkJCWNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0gPSBjcHVfdG9fbGUzMihtYXhfc2xlZXApOwotCX0KIAotCUlXTF9ERUJVR19QT1dFUigiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwotCUlXTF9ERUJVR19QT1dFUigiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiU2xlZXAgaW50ZXJ2YWwgdmVjdG9yID0geyAlZCAsICVkICwgJWQgLCAlZCAsICVkIH1cbiIsCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yOTUsNyArMjgwLDcgQEAKIAkJaWYgKGZpbmFsX21vZGUgIT0gSVdMX1BPV0VSX01PREVfQ0FNKQogCQkJc2V0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKIAotCQlpd2xfdXBkYXRlX3Bvd2VyX2NvbW1hbmQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7CisJCWl3bF91cGRhdGVfcG93ZXJfY21kKHByaXYsICZjbWQsIGZpbmFsX21vZGUpOwogCQljbWQua2VlcF9hbGl2ZV9iZWFjb25zID0gMDsKIAogCQlpZiAoZmluYWxfbW9kZSA9PSBJV0xfUE9XRVJfSU5ERVhfNSkKQEAgLTMxMSw3ICsyOTYsNyBAQAogCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzICYmIHVwZGF0ZV9jaGFpbnMpCiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7CiAJCWVsc2UKLQkJCUlXTF9ERUJVR19QT1dFUigiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKKwkJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKIAkJCQkJImNhbGlicmF0aW9uIHJ1bm5pbmc6ICVkXG4iLAogCQkJCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlKTsKIAkJaWYgKCFyZXQpCkBAIC0zNjYsNyArMzUxLDcgQEAKIC8qIHNldCB1c2VyX3Bvd2VyX3NldHRpbmcgKi8KIGludCBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKQogewotCWlmIChtb2RlID4gSVdMX1BPV0VSX0xJTUlUKQorCWlmIChtb2RlID4gSVdMX1BPV0VSX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IG1vZGU7CkBAIC0zODAsMTEgKzM2NSwxMCBAQAogICovCiBpbnQgaXdsX3Bvd2VyX3NldF9zeXN0ZW1fbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKQogewotCWlmIChtb2RlID4gSVdMX1BPV0VSX0xJTUlUKQorCWlmIChtb2RlIDwgSVdMX1BPV0VSX1NZU19NQVgpCisJCXByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmcgPSBtb2RlOworCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcml2LT5wb3dlcl9kYXRhLnN5c3RlbV9wb3dlcl9zZXR0aW5nID0gbW9kZTsKLQogCXJldHVybiBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl9zZXRfc3lzdGVtX21vZGUpOwpAQCAtMzkyLDEzICszNzYsMTEgQEAKIC8qIGluaXRpYWxpemUgdG8gZGVmYXVsdCAqLwogdm9pZCBpd2xfcG93ZXJfaW5pdGlhbGl6ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0KIAlpd2xfcG93ZXJfaW5pdF9oYW5kbGUocHJpdik7CiAJcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmcgPSBJV0xfUE9XRVJfQVVUTzsKLQlwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkID0gMDsKIAlwcml2LT5wb3dlcl9kYXRhLnN5c3RlbV9wb3dlcl9zZXR0aW5nID0gSVdMX1BPV0VSX1NZU19BVVRPOwotCXByaXYtPnBvd2VyX2RhdGEuaXNfYmF0dGVyeV9hY3RpdmUgPSAwOwogCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfZGlzYWJsZWQgPSAwOworCXByaXYtPnBvd2VyX2RhdGEuaXNfYmF0dGVyeV9hY3RpdmUgPSAwOwogCXByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZyA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl9pbml0aWFsaXplKTsKQEAgLTQwNyw4ICszODksOCBAQAogaW50IGl3bF9wb3dlcl90ZW1wZXJhdHVyZV9jaGFuZ2Uoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwotCXUxNiBuZXdfY3JpdGljYWwgPSBwcml2LT5wb3dlcl9kYXRhLmNyaXRpY2FsX3Bvd2VyX3NldHRpbmc7CiAJczMyIHRlbXBlcmF0dXJlID0gS0VMVklOX1RPX0NFTFNJVVMocHJpdi0+bGFzdF90ZW1wZXJhdHVyZSk7CisJdTE2IG5ld19jcml0aWNhbCA9IHByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZzsKIAogCWlmICh0ZW1wZXJhdHVyZSA+IElXTF9DVF9LSUxMX1RFTVBFUkFUVVJFKQogCQlyZXR1cm4gMDsKQEAgLTQzNCw3ICs0MTYsNyBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCXN0cnVjdCBpd2xfcHJpdiwgc2V0X3Bvd2VyX3NhdmUud29yayk7Ci0JSVdMX0RFQlVHKElXTF9ETF9TVEFURSwgInVwZGF0ZSBwb3dlclxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJ1cGRhdGUgcG93ZXJcbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAppbmRleCBmYTA5OGQ4Li4xODk2MzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQyLDIyICs0MiwyNiBAQAogCUlXTF9QT1dFUl9JTkRFWF81LAogCUlXTF9QT1dFUl9BVVRPLAogCUlXTF9QT1dFUl9NQVggPSBJV0xfUE9XRVJfQVVUTywKLQlJV0xfUE9XRVJfQUMsCi0JSVdMX1BPV0VSX0JBVFRFUlksCiB9OwogCiBlbnVtIHsKIAlJV0xfUE9XRVJfU1lTX0FVVE8sCiAJSVdMX1BPV0VSX1NZU19BQywKIAlJV0xfUE9XRVJfU1lTX0JBVFRFUlksCisJSVdMX1BPV0VSX1NZU19NQVgsCiB9OwogCi0jZGVmaW5lIElXTF9QT1dFUl9MSU1JVAkJMHgwOAotI2RlZmluZSBJV0xfUE9XRVJfTUFTSwkJMHgwRgotI2RlZmluZSBJV0xfUE9XRVJfRU5BQkxFRAkweDEwCiAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgc3RydWN0dXJlcyAqLwogCisjZGVmaW5lIE5PU0xQIGNwdV90b19sZTE2KDApLCAwLCAwCisjZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSywgMCwgMAorI2RlZmluZSBTTFBfVE9VVChUKSBjcHVfdG9fbGUzMigoVCkgKiBNU0VDX1RPX1VTRUMpCisjZGVmaW5lIFNMUF9WRUMoWDAsIFgxLCBYMiwgWDMsIFg0KSB7Y3B1X3RvX2xlMzIoWDApLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYMSksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFgyKSwgXAorCQkJCSAgICAgY3B1X3RvX2xlMzIoWDMpLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYNCl9CiBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSB7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7CiAJdTggbm9fZHRpbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAppbmRleCBiN2E1ZjIzLi4zYjljYWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYwppbmRleCA0YjY5ZGEzLi4yYWQ5ZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDcsNyArNDcsNyBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgid2UgcmVjZWl2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIndlIHJlY2VpdmVkIHNvZnQgUkZLSUxMIHNldCB0byBzdGF0ZSAlZFxuIiwgc3RhdGUpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCXN3aXRjaCAoc3RhdGUpIHsKQEAgLTYyLDcgKzYyLDggQEAKIAkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIndlIHJlY2VpdmVkIHVuZXhwZWN0ZWQgUkZLSUxMIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJCUlXTF9XQVJOKHByaXYsICJ3ZSByZWNlaXZlZCB1bmV4cGVjdGVkIFJGS0lMTCBzdGF0ZSAlZFxuIiwKKwkJCXN0YXRlKTsKIAkJYnJlYWs7CiAJfQogb3V0X3VubG9jazoKQEAgLTc4LDEwICs3OSwxMCBAQAogCiAJQlVHX09OKGRldmljZSA9PSBOVUxMKTsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJJbml0aWFsaXppbmcgUkZLSUxMLlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKIAlwcml2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKIAlpZiAoIXByaXYtPnJma2lsbCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBSRktJTEwgZGV2aWNlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBSRktJTEwgZGV2aWNlLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtOTcsMTEgKzk4LDExIEBACiAKIAlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocHJpdi0+cmZraWxsKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIFJGS0lMTDogJWRcbiIsIHJldCk7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byByZWdpc3RlciBSRktJTEw6ICVkXG4iLCByZXQpOwogCQlnb3RvIGZyZWVfcmZraWxsOwogCX0KIAotCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CiAJcmV0dXJuIHJldDsKIAogZnJlZV9yZmtpbGw6CkBAIC0xMTAsNyArMTExLDcgQEAKIAlwcml2LT5yZmtpbGwgPSBOVUxMOwogCiBlcnJvcjoKLQlJV0xfREVCVUdfUkZfS0lMTCgiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZmtpbGxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oCmluZGV4IDg2ZGMwNTUuLjYzM2RhZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCBjNWYxYWEwLi44ZjY1OTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTEyNSw5ICsxMjUsMTAgQEAKICAqLwogaW50IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSkKIHsKLQl1MzIgcmVnID0gMDsKLQlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByeF93cnRfcHRyX3JlZyA9IHByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZzsKKwl1MzIgcmVnOworCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTQ5LDE1ICsxNTAsMTQgQEAKIAkJCWdvdG8gZXhpdF91bmxvY2s7CiAKIAkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLAotCQkJCSAgICAgcS0+d3JpdGUgJiB+MHg3KTsKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJ4X3dydF9wdHJfcmVnLCBxLT53cml0ZSAmIH4weDcpOwogCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogRWxzZSBkZXZpY2UgaXMgYXNzdW1lZCB0byBiZSBhd2FrZSAqLwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2xfd3JpdGUzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLCBxLT53cml0ZSAmIH4weDcpOwotCisJCWl3bF93cml0ZTMyKHByaXYsIHJ4X3dydF9wdHJfcmVnLCBxLT53cml0ZSAmIH4weDcpOworCX0KIAogCXEtPm5lZWRfdXBkYXRlID0gMDsKIApAQCAtMjYyLDggKzI2Miw3IEBACiAJCXJ4Yi0+c2tiID0gYWxsb2Nfc2tiKHByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSArIDI1NiwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXJ4Yi0+c2tiKSB7Ci0JCQlwcmludGsoS0VSTl9DUklUIERSVl9OQU1FCi0JCQkJICAgIkNhbiBub3QgYWxsb2NhdGUgU0tCIGJ1ZmZlcnNcbiIpOworCQkJSVdMX0NSSVQocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgU0tCIGJ1ZmZlcnNcbiIpOwogCQkJLyogV2UgZG9uJ3QgcmVzY2hlZHVsZSByZXBsZW5pc2ggd29yayBoZXJlIC0tIHdlIHdpbGwKIAkJCSAqIGNhbGwgdGhlIHJlc3RvY2sgbWV0aG9kIGFuZCBpZiBpdCBzdGlsbCBuZWVkcwogCQkJICogbW9yZSBidWZmZXJzIGl0IHdpbGwgc2NoZWR1bGUgcmVwbGVuaXNoICovCkBAIC00OTUsNyArNDk0LDcgQEAKIAogCW1pc3NlZF9iZWFjb24gPSAmcGt0LT51Lm1pc3NlZF9iZWFjb247CiAJaWYgKGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSA+IDUpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJtaXNzZWQgYmNuIGNuc3EgJWQgdG90bCAlZCByY2QgJWQgZXhwY3RkICVkXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pc3NlZCBiY24gY25zcSAlZCB0b3RsICVkIHJjZCAlZCBleHBjdGQgJWRcbiIsCiAJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucyksCiAJCSAgICBsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT50b3RhbF9taXNzZWRfYmVjb25zKSwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPm51bV9yZWN2ZF9iZWFjb25zKSwKQEAgLTU0Miw3ICs1NDEsNyBAQAogCWVsc2UKIAkJcHJpdi0+bGFzdF9yeF9ub2lzZSA9IElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEU7CiAKLQlJV0xfREVCVUdfQ0FMSUIoImluYmFuZCBzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIGRCbSAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImluYmFuZCBzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIGRCbSAlZFxuIiwKIAkJCWJjbl9zaWxlbmNlX2EsIGJjbl9zaWxlbmNlX2IsIGJjbl9zaWxlbmNlX2MsCiAJCQlwcml2LT5sYXN0X3J4X25vaXNlKTsKIH0KQEAgLTU1NSw3ICs1NTQsNyBAQAogCWludCBjaGFuZ2U7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCi0JSVdMX0RFQlVHX1JYKCJTdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAoJWQgdnMgJWQpLlxuIiwKKwlJV0xfREVCVUdfUlgocHJpdiwgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAogCQkgICAgIChpbnQpc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpLCBwa3QtPmxlbik7CiAKIAljaGFuZ2UgPSAoKHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSAhPQpAQCAtNzQyLDEzICs3NDEsMTMgQEAKIAkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAogCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KIAkJaWYgKGRhdGFmcmFtZSkKLQkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JXUsIFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCiAJCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIGJpdHJhdGUpOwogCQllbHNlIHsKIAkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KLQkJCUlXTF9ERUJVR19SWCgiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgc3JjPTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCBzcmM9MHglMDJ4LCAiCiAJCQkJICAgICAibGVuPSV1LCByc3NpPSVkLCB0aW09JWx1IHVzZWMsICIKIAkJCQkgICAgICJwaHk9MHglMDJ4LCBjaG5sPSVkXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKQEAgLTc3MywxMCArNzcyLDEwIEBACiAvKgogICogcmV0dXJucyBub24temVybyBpZiBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQKICAqLwotc3RhdGljIGludCBpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAotCQkJCSAgICAgIHUzMiBkZWNyeXB0X3JlcywKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCitpbnQgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJICAgdTMyIGRlY3J5cHRfcmVzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQogewogCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKQEAgLTc4Niw3ICs3ODUsNyBAQAogCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUlgoImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKIAlzd2l0Y2ggKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKIAljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKIAkJLyogVGhlIHVDb2RlIGhhcyBnb3QgYSBiYWQgcGhhc2UgMSBLZXksIHB1c2hlcyB0aGUgcGFja2V0LgpAQCAtODAwLDEzICs3OTksMTMgQEAKIAkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMpIHsKIAkJCS8qIGJhZCBJQ1YsIHRoZSBwYWNrZXQgaXMgZGVzdHJveWVkIHNpbmNlIHRoZQogCQkJICogZGVjcnlwdGlvbiBpcyBpbnBsYWNlLCBkcm9wIGl0ICovCi0JCQlJV0xfREVCVUdfUlgoIlBhY2tldCBkZXN0cm95ZWRcbiIpOworCQkJSVdMX0RFQlVHX1JYKHByaXYsICJQYWNrZXQgZGVzdHJveWVkXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QOgogCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQogCQkgICAgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LKSB7Ci0JCQlJV0xfREVCVUdfUlgoImh3IGRlY3J5cHQgc3VjY2Vzc2Z1bGx5ISEhXG4iKTsKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiaHcgZGVjcnlwdCBzdWNjZXNzZnVsbHkhISFcbiIpOwogCQkJc3RhdHMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CiAJCX0KIAkJYnJlYWs7CkBAIC04MTYsNiArODE1LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcpOwogCiBzdGF0aWMgdTMyIGl3bF90cmFuc2xhdGVfcnhfc3RhdHVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGRlY3J5cHRfaW4pCiB7CkBAIC04NzAsNyArODcwLDcgQEAKIAkJYnJlYWs7CiAJfTsKIAotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9pbjoweCV4ICBkZWNyeXB0X291dCA9IDB4JXhcbiIsCisJSVdMX0RFQlVHX1JYKHByaXYsICJkZWNyeXB0X2luOjB4JXggIGRlY3J5cHRfb3V0ID0gMHgleFxuIiwKIAkJCQkJZGVjcnlwdF9pbiwgZGVjcnlwdF9vdXQpOwogCiAJcmV0dXJuIGRlY3J5cHRfb3V0OwpAQCAtODk1LDcgKzg5NSw3IEBACiAJCXJ4X3N0YXJ0ID0gKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKSZwcml2LT5sYXN0X3BoeV9yZXNbMV07CiAKIAlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlJPUigiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOworCQlJV0xfRVJSKHByaXYsICJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CiAJCXJldHVybjsKIAl9CiAJaWYgKGluY2x1ZGVfcGh5KSB7CkBAIC05MzQsOCArOTM0LDggQEAKIAogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewotCQlJV0xfREVCVUdfRFJPUF9MSU1JVAotCQkgICAgKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7CisJCUlXTF9ERUJVR19EUk9QX0xJTUlUKHByaXYsCisJCSAgICAiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCS8qcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19UU0ZUOyovCiAKIAlpZiAoKHVubGlrZWx5KHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCA+IDIwKSkpIHsKLQkJSVdMX0RFQlVHX0RST1AoImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICVkL24iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCiAJCQkJcnhfc3RhcnQtPmNmZ19waHlfY250KTsKIAkJcmV0dXJuOwogCX0KQEAgLTEwMjEsNyArMTAyMSw3IEBACiAJfQogCiAJaWYgKCFyeF9zdGFydCkgewotCQlJV0xfRVJST1IoIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDQ1LDcgKzEwNDUsNyBAQAogCiAJaWYgKCEoKnJ4X2VuZCAmIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IpIHx8CiAJICAgICEoKnJ4X2VuZCAmIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XKSkgewotCQlJV0xfREVCVUdfUlgoIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsCiAJCQkJbGUzMl90b19jcHUoKnJ4X2VuZCkpOwogCQlyZXR1cm47CiAJfQpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKIAlpZiAodW5saWtlbHkocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKQogCQlpd2xfZGJnX3JlcG9ydF9mcmFtZShwcml2LCByeF9zdGFydCwgbGVuLCBoZWFkZXIsIDEpOwogI2VuZGlmCi0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCisJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCiAJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwppbmRleCAzYzgwM2Y2Li4yMzY0NGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQ2LDE1ICs0Niw2IEBACiAjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICgzKQogI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl81MkdIWiAoMikKIAotLyogRm9yIGZhc3RlciBhY3RpdmUgc2Nhbm5pbmcsIHNjYW4gd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYW5uZWwgaWYgZmV3ZXIgdGhhbgotICogUExDUF9RVUlFVF9USFJFU0ggcGFja2V0cyBhcmUgaGVhcmQgb24gdGhpcyBjaGFubmVsIHdpdGhpbgotICogQUNUSVZFX1FVSUVUX1RJTUUgYWZ0ZXIgc2VuZGluZyBwcm9iZSByZXF1ZXN0LiAgVGhpcyBzaG9ydGVucyB0aGUgZHdlbGwKLSAqIHRpbWUgaWYgaXQncyBhIHF1aWV0IGNoYW5uZWwgKG5vdGhpbmcgcmVzcG9uZGVkIHRvIG91ciBwcm9iZSwgYW5kIHRoZXJlJ3MKLSAqIG5vIG90aGVyIHRyYWZmaWMpLgotICogRGlzYWJsZSAicXVpZXQiIGZlYXR1cmUgYnkgc2V0dGluZyBQTENQX1FVSUVUX1RIUkVTSCB0byAwLiAqLwotI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxKSAgLyogcGFja2V0cyAqLwotI2RlZmluZSBJV0xfQUNUSVZFX1FVSUVUX1RJTUUgICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxMCkgIC8qIG1zZWMgKi8KLQogLyogRm9yIHBhc3NpdmUgc2NhbiwgbGlzdGVuIFBBU1NJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsLgogICogTXVzdCBiZSBzZXQgbG9uZ2VyIHRoYW4gYWN0aXZlIGR3ZWxsIHRpbWUuCiAgKiBGb3IgdGhlIG1vc3QgcmVsaWFibGUgc2Nhbiwgc2V0ID4gQVAgYmVhY29uIGludGVydmFsICh0eXBpY2FsbHkgMTAwbXNlYykuICovCkBAIC02Myw3ICs1NCw2IEBACiAjZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQogI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQogCi0jZGVmaW5lIElXTF9TQ0FOX1BST0JFX01BU0sobikgCWNwdV90b19sZTMyKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCiAKIAogLyoqCkBAIC04MCwxMiArNzAsMTIgQEAKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CiAJCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiUXVldWluZyBzY2FuIGFib3J0LlxuIik7CisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiUXVldWluZyBzY2FuIGFib3J0LlxuIik7CiAJCQlzZXRfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7CiAKIAkJfSBlbHNlCi0JCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CiAKIAkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CiAJfQpAQCAtMTE5LDcgKzEwOSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KTsKIAotc3RhdGljIGludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzOwpAQCAtMTUwLDcgKzE0MCw3IEBACiAJCSAqIGNhbiBvY2N1ciBpZiB3ZSBzZW5kIHRoZSBzY2FuIGFib3J0IGJlZm9yZSB3ZQogCQkgKiB0aGUgbWljcm9jb2RlIGhhcyBub3RpZmllZCB1cyB0aGF0IGEgc2NhbiBpcwogCQkgKiBjb21wbGV0ZWQuICovCi0JCUlXTF9ERUJVR19JTkZPKCJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7CiAJfQpAQCAtMTYwLDcgKzE1MCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX3NjYW5fYWJvcnQpOwogCiAvKiBTZXJ2aWNlIHJlc3BvbnNlIHRvIFJFUExZX1NDQU5fQ01EICgweDgwKSAqLwogc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMTcxLDcgKzE2MSw3IEBACiAJc3RydWN0IGl3bF9zY2FucmVxX25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bF9zY2FucmVxX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CiAKLQlJV0xfREVCVUdfUlgoIlNjYW4gcmVxdWVzdCBzdGF0dXMgPSAweCV4XG4iLCBub3RpZi0+c3RhdHVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgIlNjYW4gcmVxdWVzdCBzdGF0dXMgPSAweCV4XG4iLCBub3RpZi0+c3RhdHVzKTsKICNlbmRpZgogfQogCkBAIC0xODMsNyArMTczLDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYW5zdGFydF9ub3RpZmljYXRpb24gKm5vdGlmID0KIAkgICAgKHN0cnVjdCBpd2xfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CiAJcHJpdi0+c2Nhbl9zdGFydF90c2YgPSBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyk7Ci0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gc3RhcnQ6ICIKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBzdGFydDogIgogCQkgICAgICAgIiVkIFs4MDIuMTElc10gIgogCQkgICAgICAgIihUU0Y6IDB4JTA4WDolMDhYKSAtICVkIChiZWFjb24gdGltZXIgJXUpXG4iLAogCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCkBAIC0yMDIsNyArMTkyLDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bF9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwogCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY2gucmVzOiAiCisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gY2gucmVzOiAiCiAJCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCiAJCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgIgogCQkgICAgICAgImVsYXBzZWQ9JWx1IHVzZWMgKCVkbXMgc2luY2UgbGFzdClcbiIsCkBAIC0yMjgsNyArMjE4LDcgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAJc3RydWN0IGl3bF9zY2FuY29tcGxldGVfbm90aWZpY2F0aW9uICpzY2FuX25vdGlmID0gKHZvaWQgKilwa3QtPnUucmF3OwogCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY29tcGxldGU6ICVkIGNoYW5uZWxzIChUU0YgMHglMDhYOiUwOFgpIC0gJWRcbiIsCisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gY29tcGxldGU6ICVkIGNoYW5uZWxzIChUU0YgMHglMDhYOiUwOFgpIC0gJWRcbiIsCiAJCSAgICAgICBzY2FuX25vdGlmLT5zY2FubmVkX2NoYW5uZWxzLAogCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2xvdywKIAkJICAgICAgIHNjYW5fbm90aWYtPnRzZl9oaWdoLCBzY2FuX25vdGlmLT5zdGF0dXMpOwpAQCAtMjQwLDcgKzIzMCw3IEBACiAJLyogVGhlIHNjYW4gY29tcGxldGlvbiBub3RpZmljYXRpb24gY2FtZSBpbiwgc28ga2lsbCB0aGF0IHRpbWVyLi4uICovCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CiAKLQlJV0xfREVCVUdfSU5GTygiU2NhbiBwYXNzIG9uICVzR0h6IHRvb2sgJWRtc1xuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2NhbiBwYXNzIG9uICVzR0h6IHRvb2sgJWRtc1xuIiwKIAkJICAgICAgIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKSA/CiAJCQkJCQkiMi40IiA6ICI1LjIiLAogCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKQEAgLTI1OCw3ICsyNDgsNyBAQAogCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAogCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7CiAJCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7CiAJfSBlbHNlIHsKIAkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLwpAQCAtMjY4LDExICsyNTgsMTEgQEAKIAogCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKIAlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci0JSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIHNjYW4gdG8gb2ZmXG4iKTsKIAogCWNsZWFyX2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwogCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gdG9vayAlZG1zXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FuIHRvb2sgJWRtc1xuIiwKIAkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKIAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwpAQCAtMjk2LDkgKzI4Niw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKTsKIAotc3RhdGljIGlubGluZSB1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJCSAgICB1OCBuX3Byb2JlcykKK2lubGluZSB1MTYgaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICAgICB1OCBuX3Byb2JlcykKIHsKIAlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzUyICsKQEAgLTMwNyw5ICsyOTcsMTAgQEAKIAkJcmV0dXJuIElXTF9BQ1RJVkVfRFdFTExfVElNRV8yNCArCiAJCQlJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl8yNEdIWiAqIChuX3Byb2JlcyArIDEpOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKTsKIAotc3RhdGljIHUxNiBpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQordTE2IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJdTE2IHBhc3NpdmUgPSAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSA/CiAJICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0IDoKQEAgLTMyNyw2ICszMTgsNyBAQAogCiAJcmV0dXJuIHBhc3NpdmU7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKTsKIAogc3RhdGljIGludCBpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKQEAgLTM2Myw3ICszNTUsNyBAQAogCiAJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKTsKIAkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAorCQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKIAkJCQkJY2hhbm5lbCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMzkyLDcgKzM4NCw3IEBACiAJCWVsc2UKIAkJCXNjYW5fY2gtPnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoNSA8PCAzKSk7CiAKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW5uaW5nIGNoPSVkIHByb2I9MHglWCBbJXMgJWRdXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2Nhbm5pbmcgY2g9JWQgcHJvYj0weCVYIFslcyAlZF1cbiIsCiAJCQkgICAgICAgY2hhbm5lbCwgbGUzMl90b19jcHUoc2Nhbl9jaC0+dHlwZSksCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiBTQ0FOX0NIQU5ORUxfVFlQRV9BQ1RJVkUpID8KIAkJCQkiQUNUSVZFIiA6ICJQQVNTSVZFIiwKQEAgLTQwMyw3ICszOTUsNyBAQAogCQlhZGRlZCsrOwogCX0KIAotCUlXTF9ERUJVR19TQ0FOKCJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOworCUlXTF9ERUJVR19TQ0FOKHByaXYsICJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOwogCXJldHVybiBhZGRlZDsKIH0KIApAQCAtNDE5LDIxICs0MTEsMjEgQEAKIGludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vdCByZWFkeS5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJTdGFydGluZyBzY2FuLi4uXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnRpbmcgc2Nhbi4uLlxuIik7CiAJaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9HKQogCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF8yR0haKTsKIAlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpCkBAIC00NDgsOSArNDQwLDc3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2luaXRpYXRlKTsKIAorI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQorCitpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CisJdTggKnNzaWQgPSBOVUxMOworCXNpemVfdCBzc2lkX2xlbiA9IDA7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7CisJCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJcmV0ID0gLUVJTzsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogV2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kLgorCSAqIEF2b2lkIHNjYW5uaW5nIGR1cmluZyBwb3NzaWJsZSBFQVBPTCBleGNoYW5nZSwgcmV0dXJuCisJICogc3VjY2VzcyBpbW1lZGlhdGVseS4KKwkgKi8KKwlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKKwkgICAgdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBuZXh0IHNjYW4gcGVyaW9kXG4iKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLworCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgorCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOworCQlyZXQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJaWYgKHNzaWRfbGVuKSB7CisJCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7CisJCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICBzc2lkX2xlbjsKKwkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOworCX0gZWxzZSB7CisJCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDA7CisJfQorCisJcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd2xfbWFjX2h3X3NjYW4pOworCiAjZGVmaW5lIElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HICg3ICogSFopCiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3ZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHNjYW5fY2hlY2sud29yayk7CkBAIC00NjEsNyArNTIxLDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKIAkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfU0NBTiwgIlNjYW4gY29tcGxldGlvbiB3YXRjaGRvZyByZXNldHRpbmcgIgorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCiAJCQkiYWRhcHRlciAoJWRtcylcbiIsCiAJCQlqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7CiAKQEAgLTQ3MCw2ICs1MzAsOCBAQAogCX0KIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2JnX3NjYW5fY2hlY2spOworCiAvKioKICAqIGl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZSAtIGZpbGwgaW4gdGhlIHN1cHBvcnRlZCByYXRlIGluIElFIGZpZWxkCiAgKgpAQCAtNTI3LDEwICs1ODksMTAgQEAKICAqIGl3bF9maWxsX3Byb2JlX3JlcSAtIGZpbGwgaW4gYWxsIHJlcXVpcmVkIGZpZWxkcyBhbmQgSUUgZm9yIHByb2JlIHJlcXVlc3QKICAqLwogCi1zdGF0aWMgdTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmZyYW1lLAotCQkJCSAgaW50IGxlZnQpCit1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCisJCSAgICAgICBpbnQgbGVmdCkKIHsKIAlpbnQgbGVuID0gMDsKIAl1OCAqcG9zID0gTlVMTDsKQEAgLTYyNCw2ICs2ODYsNyBAQAogCiAJcmV0dXJuICh1MTYpbGVuOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZmlsbF9wcm9iZV9yZXEpOwogCiBzdGF0aWMgdm9pZCBpd2xfYmdfcmVxdWVzdF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKQEAgLTY1MCw3ICs3MTMsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9XQVJOSU5HKCJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjYyLDM0ICs3MjUsMzQgQEAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb3Igc2NoZWR1bGVkIGlmIHRoZXJlIGlzIGN1cnJlbnRseQogCSAqIGEgc2NhbiBhY3RpdmUgaW4gdGhlIGhhcmR3YXJlLiAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyBpbiBwYXJhbGxlbC4gIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCiAJCQkgICAgICAgIklnbm9yaW5nIHNlY29uZCByZXF1ZXN0LlxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghcHJpdi0+c2Nhbl9iYW5kcykgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNzE0LDcgKzc3Nyw3IEBACiAJCXUzMiBzY2FuX3N1c3BlbmRfdGltZSA9IDEwMDsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQlJV0xfREVCVUdfSU5GTygiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpbnRlcnZhbCA9IHByaXYtPmJlYWNvbl9pbnQ7CkBAIC03MjksMTMgKzc5MiwxMyBAQAogCQlzY2FuX3N1c3BlbmRfdGltZSA9IChleHRyYSB8CiAJCSAgICAoKHN1c3BlbmRfdGltZSAlIGludGVydmFsKSAqIDEwMjQpKTsKIAkJc2Nhbi0+c3VzcGVuZF90aW1lID0gY3B1X3RvX2xlMzIoc2Nhbl9zdXNwZW5kX3RpbWUpOwotCQlJV0xfREVCVUdfU0NBTigic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJICAgICAgIHNjYW5fc3VzcGVuZF90aW1lLCBpbnRlcnZhbCk7CiAJfQogCiAJLyogV2Ugc2hvdWxkIGFkZCB0aGUgYWJpbGl0eSBmb3IgdXNlciB0byBsb2NrIHRvIFBBU1NJVkUgT05MWSAqLwogCWlmIChwcml2LT5vbmVfZGlyZWN0X3NjYW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlN0YXJ0IGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU3RhcnQgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCiAJCQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZCwKIAkJCQkJICAgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKSk7CiAJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmlkID0gV0xBTl9FSURfU1NJRDsKQEAgLTc0NCw3ICs4MDcsNyBAQAogCQkgICAgICAgcHJpdi0+ZGlyZWN0X3NzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CiAJCW5fcHJvYmVzKys7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlN0YXJ0IGluZGlyZWN0IHNjYW4uXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN0YXJ0IGluZGlyZWN0IHNjYW4uXG4iKTsKIAl9CiAKIAlzY2FuLT50eF9jbWQudHhfZmxhZ3MgPSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwpAQCAtNzczLDcgKzgzNiw3IEBACiAJCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpCiAJCQlyeF9jaGFpbiA9IDB4NjsKIAl9IGVsc2UgewotCQlJV0xfV0FSTklORygiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOworCQlJV0xfV0FSTihwcml2LCAiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC04MDYsNyArODY5LDcgQEAKIAkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKIAogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKLQkJSVdMX0RFQlVHX1NDQU4oImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTgzOSw3ICs5MDIsNyBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBhYm9ydF9zY2FuKTsKIApAQCAtODUzLDE4ICs5MTYsMTkgQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfYWJvcnRfc2Nhbik7CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgc2Nhbl9jb21wbGV0ZWQpOwogCi0JSVdMX0RFQlVHX1NDQU4oIlNDQU4gY29tcGxldGUgc2NhblxuIik7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNDQU4gY29tcGxldGUgc2NhblxuIik7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odyk7CisJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CiAKIAkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKIAkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KQEAgLTg3Miw3ICs5MzYsNyBAQAogCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQotCitFWFBPUlRfU1lNQk9MKGl3bF9iZ19zY2FuX2NvbXBsZXRlZCk7CiAKIHZvaWQgaXdsX3NldHVwX3NjYW5fZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uYwppbmRleCA4MzZjM2M4Li4wMjJiY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKIAl9CiAKQEAgLTE1NCw5ICsxNTQsOSBAQAogCXN3aXRjaCAoc3BlY3RydW1fcmVzcF9zdGF0dXMpIHsKIAljYXNlIDA6CQkvKiBDb21tYW5kIHdpbGwgYmUgaGFuZGxlZCAqLwogCQlpZiAocmVzLT51LnNwZWN0cnVtLmlkICE9IDB4ZmYpIHsKLQkJCUlXTF9ERUJVR19JTkZPCi0JCQkgICAgKCJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCi0JCQkgICAgIHJlcy0+dS5zcGVjdHJ1bS5pZCk7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCisJCQkJcmVzLT51LnNwZWN0cnVtLmlkKTsKIAkJCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyAmPSB+TUVBU1VSRU1FTlRfUkVBRFk7CiAJCX0KIAkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzIHw9IE1FQVNVUkVNRU5UX0FDVElWRTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uICpyZXBvcnQgPSAmKHBrdC0+dS5zcGVjdHJ1bV9ub3RpZik7CiAKIAlpZiAoIXJlcG9ydC0+c3RhdGUpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF8xMUgsCisJCUlXTF9ERUJVR18xMUgocHJpdiwKIAkJCSJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKaW5kZXggYjdkNzk0My4uYTc3YzFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCA3MGE4YjIxLi4xNjg0NDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNjAsNyArNjAsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19BU1NPQ19MSU1JVCgiY2FuIG5vdCBmaW5kIFNUQSAlcE0gdG90YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DX0xJTUlUKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSB0b3RhbCAlZFxuIiwKIAkJCSAgICAgIGFkZHIsIHByaXYtPm51bV9zdGF0aW9ucyk7CiAKICBvdXQ6CkBAIC04NiwxMSArODYsMTMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkKLQkJSVdMX0VSUk9SKCJBQ1RJVkFURSBhIG5vbiBEUklWRVIgYWN0aXZlIHN0YXRpb24gJWRcbiIsIHN0YV9pZCk7CisJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSAmJgorCSAgICAhKHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCisJCUlXTF9FUlIocHJpdiwgIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwKKwkJCXN0YV9pZCk7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgfD0gSVdMX1NUQV9VQ09ERV9BQ1RJVkU7Ci0JSVdMX0RFQlVHX0FTU09DKCJBZGRlZCBTVEEgdG8gVWNvZGU6ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZGVkIFNUQSB0byBVY29kZTogJXBNXG4iLAogCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTEwNSwxMyArMTA3LDEzIEBACiAJdTggc3RhX2lkID0gYWRkc3RhLT5zdGEuc3RhX2lkOwogCiAJaWYgKCFza2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9BRERfU1RBLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAorCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xMjEsNyArMTIzLDcgQEAKIAkJaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShwcml2LCBzdGFfaWQpOwogCQkgLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOigweCUwOFgpXG4iLAorCQlJV0xfREVCVUdfSEMocHJpdiwgIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6KDB4JTA4WClcbiIsCiAJCQkgICAgIHJlcy0+dS5hZGRfc3RhLnN0YXR1cyk7CiAJCWJyZWFrOwogCX0KQEAgLTEzMCw3ICsxMzIsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAoraW50IGl3bF9zZW5kX2FkZF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqc3RhLCB1OCBmbGFncykKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKQEAgLTE1NSw3ICsxNTcsNyBAQAogCiAJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7CiAJCXJldCA9IC1FSU87CiAJfQpAQCAtMTY0LDExICsxNjYsMTEgQEAKIAkJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKIAkJY2FzZSBBRERfU1RBX1NVQ0NFU1NfTVNLOgogCQkJaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShwcml2LCBzdGEtPnN0YS5zdGFfaWQpOwotCQkJSVdMX0RFQlVHX0lORk8oIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSRVBMWV9BRERfU1RBIFBBU1NFRFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU87Ci0JCQlJV0xfV0FSTklORygiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX0FERF9TVEEgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTc4LDYgKzE4MCw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9hZGRfc3RhKTsKIAogc3RhdGljIHZvaWQgaXdsX3NldF9odF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGluZGV4LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqc3RhX2h0X2luZikKQEAgLTIwNCw3ICsyMDcsNyBAQAogCWNhc2UgV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIE1JTU8gUFMgbW9kZSAlZFxuIiwgbWltb19wc19tb2RlKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkludmFsaWQgTUlNTyBQUyBtb2RlICVkXG4iLCBtaW1vX3BzX21vZGUpOwogCQlicmVhazsKIAl9CiAKQEAgLTI2OSw3ICsyNzIsNyBAQAogCiAJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdOwogCXN0YXRpb24tPnVzZWQgPSBJV0xfU1RBX0RSSVZFUl9BQ1RJVkU7Ci0JSVdMX0RFQlVHX0FTU09DKCJBZGQgU1RBIHRvIGRyaXZlciBJRCAlZDogJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQWRkIFNUQSB0byBkcml2ZXIgSUQgJWQ6ICVwTVxuIiwKIAkJCXN0YV9pZCwgYWRkcik7CiAJcHJpdi0+bnVtX3N0YXRpb25zKys7CiAKQEAgLTMwMSwxMyArMzA0LDEzIEBACiAKIAlCVUdfT04oc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pOwogCi0JSVdMX0RFQlVHX0FTU09DKCJSZW1vdmVkIFNUQSBmcm9tIFVjb2RlOiAlcE1cbiIsIGFkZHIpOworCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUmVtb3ZlZCBTVEEgZnJvbSBVY29kZTogJXBNXG4iLCBhZGRyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJLyogVWNvZGUgbXVzdCBiZSBhY3RpdmUgYW5kIGRyaXZlciBtdXN0IGJlIG5vbiBhY3RpdmUgKi8KIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICE9IElXTF9TVEFfVUNPREVfQUNUSVZFKQotCQlJV0xfRVJST1IoInJlbW92ZWQgbm9uIGFjdGl2ZSBTVEEgJWRcbiIsIHN0YV9pZCk7CisJCUlXTF9FUlIocHJpdiwgInJlbW92ZWQgbm9uIGFjdGl2ZSBTVEEgJWRcbiIsIHN0YV9pZCk7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJj0gfklXTF9TVEFfVUNPREVfQUNUSVZFOwogCkBAIC0zMjQsMTMgKzMyNywxMyBAQAogCWNvbnN0IGNoYXIgKmFkZHIgPSBybV9zdGEtPmFkZHI7CiAKIAlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX1JFTU9WRV9TVEEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLAogCQlyZXMtPmhkci5mbGFncyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTM0MCw3ICszNDMsNyBAQAogCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgYWRkcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiUkVQTFlfUkVNT1ZFX1NUQSBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzc4LDcgKzM4MSw3IEBACiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0ID0gLUVJTzsKIAl9CkBAIC0zODcsMTEgKzM5MCwxMSBAQAogCQlzd2l0Y2ggKHJlcy0+dS5yZW1fc3RhLnN0YXR1cykgewogCQljYXNlIFJFTV9TVEFfU1VDQ0VTU19NU0s6CiAJCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgYWRkcik7Ci0JCQlJV0xfREVCVUdfQVNTT0MoIlJFUExZX1JFTU9WRV9TVEEgUEFTU0VEXG4iKTsKKwkJCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUkVQTFlfUkVNT1ZFX1NUQSBQQVNTRURcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtRUlPOwotCQkJSVdMX0VSUk9SKCJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CisJCQlJV0xfRVJSKHByaXYsICJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQyOSwxNyArNDMyLDE3IEBACiAJaWYgKHVubGlrZWx5KHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJZ290byBvdXQ7CiAKLQlJV0xfREVCVUdfQVNTT0MoIlJlbW92aW5nIFNUQSBmcm9tIGRyaXZlcjolZCAgJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiUmVtb3ZpbmcgU1RBIGZyb20gZHJpdmVyOiVkICAlcE1cbiIsCiAJCXN0YV9pZCwgYWRkcik7CiAKIAlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKSB7Ci0JCUlXTF9FUlJPUigiUmVtb3ZpbmcgJXBNIGJ1dCBub24gRFJJVkVSIGFjdGl2ZVxuIiwKKwkJSVdMX0VSUihwcml2LCAiUmVtb3ZpbmcgJXBNIGJ1dCBub24gRFJJVkVSIGFjdGl2ZVxuIiwKIAkJCQlhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9VQ09ERV9BQ1RJVkUpKSB7Ci0JCUlXTF9FUlJPUigiUmVtb3ZpbmcgJXBNIGJ1dCBub24gVUNPREUgYWN0aXZlXG4iLAorCQlJV0xfRVJSKHByaXYsICJSZW1vdmluZyAlcE0gYnV0IG5vbiBVQ09ERSBhY3RpdmVcbiIsCiAJCQkJYWRkcik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ2OSwxMyArNDcyLDE0IEBACiB2b2lkIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGl3bF9pc19hbGl2ZShwcml2KSAmJgogCSAgICF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSAmJgogCSAgIGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgUkVQTFlfUkVNT1ZFX0FMTF9TVEEsIDAsIE5VTEwsIE5VTEwpKQotCQlJV0xfRVJST1IoIkNvdWxkbid0IGNsZWFyIHRoZSBzdGF0aW9uIHRhYmxlXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGRuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGVcbiIpOwogCiAJcHJpdi0+bnVtX3N0YXRpb25zID0gMDsKIAltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOwpAQCAtNDgzLDExICs0ODcsMTcgQEAKIAkvKiBjbGVhbiB1Y29kZSBrZXkgdGFibGUgYml0IG1hcCAqLwogCXByaXYtPnVjb2RlX2tleV90YWJsZSA9IDA7CiAKKwkvKiBrZWVwIHRyYWNrIG9mIHN0YXRpYyBrZXlzICovCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTX01BWCA7IGkrKykgeworCQlpZiAocHJpdi0+d2VwX2tleXNbaV0ua2V5X3NpemUpCisJCQl0ZXN0X2FuZF9zZXRfYml0KGksICZwcml2LT51Y29kZV9rZXlfdGFibGUpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZSk7CiAKLXN0YXRpYyBpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IGk7CiAKQEAgLTQ5Nyw2ICs1MDcsNyBAQAogCiAJcmV0dXJuIFdFUF9JTlZBTElEX09GRlNFVDsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleCk7CiAKIGludCBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHNlbmRfaWZfZW1wdHkpCiB7CkBAIC01NTEsMTMgKzU2MiwxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoa2V5Y29uZi0+a2V5aWR4LCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKLQkJSVdMX0VSUk9SKCJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbmRleCAlZCBub3QgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAogCQkJICBrZXljb25mLT5rZXlpZHgpOwogCiAJcHJpdi0+ZGVmYXVsdF93ZXBfa2V5LS07CiAJbWVtc2V0KCZwcml2LT53ZXBfa2V5c1trZXljb25mLT5rZXlpZHhdLCAwLCBzaXplb2YocHJpdi0+d2VwX2tleXNbMF0pKTsKIAlyZXQgPSBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAxKTsKLQlJV0xfREVCVUdfV0VQKCJSZW1vdmUgZGVmYXVsdCBXRVAga2V5OiBpZHg9JWQgcmV0PSVkXG4iLAorCUlXTF9ERUJVR19XRVAocHJpdiwgIlJlbW92ZSBkZWZhdWx0IFdFUCBrZXk6IGlkeD0lZCByZXQ9JWRcbiIsCiAJCSAgICAgIGtleWNvbmYtPmtleWlkeCwgcmV0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCkBAIC01NzMsNyArNTg0LDcgQEAKIAogCWlmIChrZXljb25mLT5rZXlsZW4gIT0gV0VQX0tFWV9MRU5fMTI4ICYmCiAJICAgIGtleWNvbmYtPmtleWxlbiAhPSBXRVBfS0VZX0xFTl82NCkgewotCQlJV0xfREVCVUdfV0VQKCJCYWQgV0VQIGtleSBsZW5ndGggJWRcbiIsIGtleWNvbmYtPmtleWxlbik7CisJCUlXTF9ERUJVR19XRVAocHJpdiwgIkJhZCBXRVAga2V5IGxlbmd0aCAlZFxuIiwga2V5Y29uZi0+a2V5bGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01ODUsNyArNTk2LDcgQEAKIAlwcml2LT5kZWZhdWx0X3dlcF9rZXkrKzsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGtleWNvbmYtPmtleWlkeCwgJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCi0JCUlXTF9FUlJPUigiaW5kZXggJWQgYWxyZWFkeSB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCisJCUlXTF9FUlIocHJpdiwgImluZGV4ICVkIGFscmVhZHkgdXNlZCBpbiB1Q29kZSBrZXkgdGFibGUuXG4iLAogCQkJa2V5Y29uZi0+a2V5aWR4KTsKIAogCXByaXYtPndlcF9rZXlzW2tleWNvbmYtPmtleWlkeF0ua2V5X3NpemUgPSBrZXljb25mLT5rZXlsZW47CkBAIC01OTMsNyArNjA0LDcgQEAKIAkJCQkJCQlrZXljb25mLT5rZXlsZW4pOwogCiAJcmV0ID0gaXdsX3NlbmRfc3RhdGljX3dlcGtleV9jbWQocHJpdiwgMCk7Ci0JSVdMX0RFQlVHX1dFUCgiU2V0IGRlZmF1bHQgV0VQIGtleTogbGVuPSVkIGlkeD0lZCByZXQ9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiU2V0IGRlZmF1bHQgV0VQIGtleTogbGVuPSVkIGlkeD0lZCByZXQ9JWRcbiIsCiAJCWtleWNvbmYtPmtleWxlbiwga2V5Y29uZi0+a2V5aWR4LCByZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKQEAgLTY0MSw3ICs2NTIsNyBAQAogCSAqIGluIHVDb2RlLiAqLwogCiAJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCi0JCSJubyBzcGFjZSBmb3IgbmV3IGtldyIpOworCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOwogCiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOwpAQCAtNjg5LDcgKzcwMCw3IEBACiAJICogaW4gdUNvZGUuICovCiAKIAlXQVJOKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCwKLQkJIm5vIHNwYWNlIGZvciBuZXcga2V3Iik7CisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CkBAIC03MjUsNyArNzM2LDcgQEAKIAkgKiBpbiB1Q29kZS4gKi8KIAogCVdBUk4ocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAotCQkibm8gc3BhY2UgZm9yIG5ldyBrZXciKTsKKwkJIm5vIHNwYWNlIGZvciBhIG5ldyBrZXkiKTsKIAogCS8qIFRoaXMgY29weSBpcyBhY3V0YWxseSBub3QgbmVlZGVkOiB3ZSBnZXQgdGhlIGtleSB3aXRoIGVhY2ggVFggKi8KIAltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LCAxNik7CkBAIC03NDksNyArNzYwLDcgQEAKIAogCXN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAogCQkJCSAgIGFkZHIpOwogCQlyZXR1cm47CiAJfQpAQCAtODAxLDcgKzgxMiw3IEBACiAJa2V5X2ZsYWdzID0gbGUxNl90b19jcHUocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyk7CiAJa2V5aWR4ID0gKGtleV9mbGFncyA+PiBTVEFfS0VZX0ZMR19LRVlJRF9QT1MpICYgMHgzOwogCi0JSVdMX0RFQlVHX1dFUCgiUmVtb3ZlIGR5bmFtaWMga2V5OiBpZHg9JWQgc3RhPSVkXG4iLAorCUlXTF9ERUJVR19XRVAocHJpdiwgIlJlbW92ZSBkeW5hbWljIGtleTogaWR4PSVkIHN0YT0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+a2V5aWR4LCBzdGFfaWQpOwogCiAJaWYgKGtleWNvbmYtPmtleWlkeCAhPSBrZXlpZHgpIHsKQEAgLTgxNSw3ICs4MjYsNyBAQAogCX0KIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQpIHsKLQkJSVdMX1dBUk5JTkcoIlJlbW92aW5nIHdyb25nIGtleSAlZCAweCV4XG4iLAorCQlJV0xfV0FSTihwcml2LCAiUmVtb3Zpbmcgd3Jvbmcga2V5ICVkIDB4JXhcbiIsCiAJCQkgICAga2V5Y29uZi0+a2V5aWR4LCBrZXlfZmxhZ3MpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKQEAgLTgyMyw3ICs4MzQsNyBAQAogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQsCiAJCSZwcml2LT51Y29kZV9rZXlfdGFibGUpKQotCQlJV0xfRVJST1IoImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCisJCUlXTF9FUlIocHJpdiwgImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCk7CiAJbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8sIDAsCiAJCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2h3X2tleSkpOwpAQCAtODYwLDExICs4NzEsMTIgQEAKIAkJcmV0ID0gaXdsX3NldF93ZXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXljb25mLCBzdGFfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleWNvbmYtPmFsZyk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCUlXTF9ERUJVR19XRVAoIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiU2V0IGR5bmFtaWMga2V5OiBhbGc9ICVkIGxlbj0lZCBpZHg9JWQgc3RhPSVkIHJldD0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+YWxnLCBrZXljb25mLT5rZXlsZW4sIGtleWNvbmYtPmtleWlkeCwKIAkJICAgICAgc3RhX2lkLCByZXQpOwogCkBAIC04NzcsMTMgKzg4OSwxMyBAQAogCQkJICAgc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICpscSkKIHsKIAlpbnQgaTsKLQlJV0xfREVCVUdfUkFURSgibHEgc3RhdGlvbiBpZCAweCV4XG4iLCBscS0+c3RhX2lkKTsKLQlJV0xfREVCVUdfUkFURSgibHEgYW50IDB4JVggMHglWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAibHEgc3RhdGlvbiBpZCAweCV4XG4iLCBscS0+c3RhX2lkKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibHEgYW50IDB4JVggMHglWFxuIiwKIAkJICAgICAgIGxxLT5nZW5lcmFsX3BhcmFtcy5zaW5nbGVfc3RyZWFtX2FudF9tc2ssCiAJCSAgICAgICBscS0+Z2VuZXJhbF9wYXJhbXMuZHVhbF9zdHJlYW1fYW50X21zayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTElOS19RVUFMX01BWF9SRVRSWV9OVU07IGkrKykKLQkJSVdMX0RFQlVHX1JBVEUoImxxIGluZGV4ICVkIDB4JVhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJscSBpbmRleCAlZCAweCVYXG4iLAogCQkJICAgICAgIGksIGxxLT5yc190YWJsZVtpXS5yYXRlX25fZmxhZ3MpOwogfQogI2Vsc2UKQEAgLTEwNjAsNyArMTA3Miw3IEBACiAJCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKIAkJCXJldHVybiBzdGFfaWQ7CiAKLQkJSVdMX0RFQlVHX0RST1AoIlN0YXRpb24gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCiAJCQkgICAgICAgIkRlZmF1bHRpbmcgdG8gYnJvYWRjYXN0Li4uXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwogCQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7CkBAIC0xMDcyLDcgKzEwODQsOCBAQAogCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwgcHJpdi0+aXdfbW9kZSk7CisJCUlXTF9XQVJOKHByaXYsICJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwKKwkJCXByaXYtPml3X21vZGUpOwogCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCmluZGV4IDliYjdjZWYuLjU5YTU4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC01NCw4ICs1NCwxMSBAQAogaW50IGl3bF9yeG9uX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCk7CiBpbnQgaXdsX3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGludCBpc19hcCk7CiB2b2lkIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogaW50IGl3bF9nZXRfcmFfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CitpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgc3RydWN0IGl3bF9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKTsKIHU4IGl3bF9hZGRfc3RhdGlvbl9mbGFncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLAogCQkJaW50IGlzX2FwLCB1OCBmbGFncywKIAkJCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCBhYjEzZmYyLi5kZmY2MGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTc2LDExNiArNzYsNiBAQAogCW1lbXNldChwdHIsIDAsIHNpemVvZigqcHRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpd2xfdGZkX3RiX2dldF9hZGRyKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKLXsKLQlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKLQotCWRtYV9hZGRyX3QgYWRkciA9IGdldF91bmFsaWduZWRfbGUzMigmdGItPmxvKTsKLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCi0JCWFkZHIgfD0KLQkJKChkbWFfYWRkcl90KShsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pICYgMHhGKSA8PCAxNikgPDwgMTY7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgaXdsX3RmZF90Yl9nZXRfbGVuKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCkKLXsKLQlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKLQotCXJldHVybiBsZTE2X3RvX2NwdSh0Yi0+aGlfbl9sZW4pID4+IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdGZkX3NldF90YihzdHJ1Y3QgaXdsX3RmZCAqdGZkLCB1OCBpZHgsCi0JCQkJICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCi17Ci0Jc3RydWN0IGl3bF90ZmRfdGIgKnRiID0gJnRmZC0+dGJzW2lkeF07Ci0JdTE2IGhpX25fbGVuID0gbGVuIDw8IDQ7Ci0KLQlwdXRfdW5hbGlnbmVkX2xlMzIoYWRkciwgJnRiLT5sbyk7Ci0JaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKQotCQloaV9uX2xlbiB8PSAoKGFkZHIgPj4gMTYpID4+IDE2KSAmIDB4RjsKLQotCXRiLT5oaV9uX2xlbiA9IGNwdV90b19sZTE2KGhpX25fbGVuKTsKLQotCXRmZC0+bnVtX3RicyA9IGlkeCArIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXdsX3RmZF9nZXRfbnVtX3RicyhzdHJ1Y3QgaXdsX3RmZCAqdGZkKQotewotCXJldHVybiB0ZmQtPm51bV90YnMgJiAweDFmOwotfQotCi0vKioKLSAqIGl3bF9od190eHFfZnJlZV90ZmQgLSBGcmVlIGFsbCBjaHVua3MgcmVmZXJlbmNlZCBieSBURkQgW3R4cS0+cS5yZWFkX3B0cl0KLSAqIEBwcml2IC0gZHJpdmVyIHByaXZhdGUgZGF0YQotICogQHR4cSAtIHR4IHF1ZXVlCi0gKgotICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgVEZEIGNpcmN1bGFyIGJ1ZmZlciByZWFkL3dyaXRlIGluZGV4ZXMKLSAqIERvZXMgTk9UIGZyZWUgdGhlIFRGRCBpdHNlbGYgKHdoaWNoIGlzIHdpdGhpbiBjaXJjdWxhciBidWZmZXIpCi0gKi8KLXN0YXRpYyB2b2lkIGl3bF9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCi17Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZF90bXAgPSAoc3RydWN0IGl3bF90ZmQgKikmdHhxLT50ZmRzWzBdOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOwotCWludCBpOwotCWludCBudW1fdGJzOwotCi0JdGZkID0gJnRmZF90bXBbaW5kZXhdOwotCi0JLyogU2FuaXR5IGNoZWNrIG9uIG51bWJlciBvZiBjaHVua3MgKi8KLQludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOwotCi0JaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBudW1fdGJzKTsKLQkJLyogQHRvZG8gaXNzdWUgZmF0YWwgZXJyb3IsIGl0IGlzIHF1aXRlIHNlcmlvdXMgc2l0dWF0aW9uICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBVbm1hcCB0eF9jbWQgKi8KLQlpZiAobnVtX3RicykKLQkJcGNpX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbWFwcGluZyksCi0JCQkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBsZW4pLAotCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQkvKiBVbm1hcCBjaHVua3MsIGlmIGFueS4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgbnVtX3RiczsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBpd2xfdGZkX3RiX2dldF9hZGRyKHRmZCwgaSksCi0JCQkJaXdsX3RmZF90Yl9nZXRfbGVuKHRmZCwgaSksIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCWlmICh0eHEtPnR4YikgewotCQkJZGV2X2tmcmVlX3NrYih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0pOwotCQkJdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaSAtIDFdID0gTlVMTDsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJc3RydWN0IGl3bF90ZmQgKnRmZCwKLQkJCQkJZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuKQotewotCi0JdTMyIG51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7Ci0KLQkvKiBFYWNoIFRGRCBjYW4gcG9pbnQgdG8gYSBtYXhpbXVtIDIwIFR4IGJ1ZmZlcnMgKi8KLQlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgewotCQlJV0xfRVJST1IoIkVycm9yIGNhbiBub3Qgc2VuZCBtb3JlIHRoYW4gJWQgY2h1bmtzXG4iLAotCQkJICBJV0xfTlVNX09GX1RCUyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCUJVR19PTihhZGRyICYgfkRNQV9CSVRfTUFTSygzNikpOwotCWlmICh1bmxpa2VseShhZGRyICYgfklXTF9UWF9ETUFfTUFTSykpCi0JCUlXTF9FUlJPUigiVW5hbGlnbmVkIGFkZHJlc3MgPSAlbGx4XG4iLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOwotCi0JaXdsX3RmZF9zZXRfdGIodGZkLCBudW1fdGJzLCBhZGRyLCBsZW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKICAqLwpAQCAtMjA2LDcgKzk2LDcgQEAKIAkJcmVnID0gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CiAKIAkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKIAkJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKIAkJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAkJCXJldHVybiByZXQ7CkBAIC0yNDEsNyArMTMxLDcgQEAKICAqIEZyZWUgYWxsIGJ1ZmZlcnMuCiAgKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKQordm9pZCBpd2xfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCiB7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwpAQCAtMjU0LDcgKzE0NCw3IEBACiAJLyogZmlyc3QsIGVtcHR5IGFsbCBCRCdzICovCiAJZm9yICg7IHEtPndyaXRlX3B0ciAhPSBxLT5yZWFkX3B0cjsKIAkgICAgIHEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkKLQkJaXdsX2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKIAogCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKIApAQCAtMjY0LDcgKzE1NCw3IEBACiAKIAkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwogCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3RmZCkgKgorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICoKIAkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+dGZkcywgdHhxLT5xLmRtYV9hZGRyKTsKIAogCS8qIERlLWFsbG9jIGFycmF5IG9mIHBlci1URkQgZHJpdmVyIGRhdGEgKi8KQEAgLTI3NCw3ICsxNjQsNyBAQAogCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3F1ZXVlX2ZyZWUpOwogCiAvKioKICAqIGl3bF9jbWRfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgpAQCAtMzg4LDYgKzI3OCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzaXplX3QgdGZkX3N6ID0gcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogVEZEX1FVRVVFX1NJWkVfTUFYOwogCiAJLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCiAJICogbm90IHNoYXJlZCB3aXRoIGRldmljZS4gKi8KQEAgLTM5NSwyMiArMjg2LDIwIEBACiAJCXR4cS0+dHhiID0ga21hbGxvYyhzaXplb2YodHhxLT50eGJbMF0pICoKIAkJCQkgICBURkRfUVVFVUVfU0laRV9NQVgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+dHhiKSB7Ci0JCQlJV0xfRVJST1IoImttYWxsb2MgZm9yIGF1eGlsaWFyeSBCRCAiCisJCQlJV0xfRVJSKHByaXYsICJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgogCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQl9IGVsc2UKKwl9IGVsc2UgewogCQl0eHEtPnR4YiA9IE5VTEw7CisJfQogCiAJLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKIAkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPnRmZHMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsCi0JCQlzaXplb2YodHhxLT50ZmRzWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCwKLQkJCSZ0eHEtPnEuZG1hX2FkZHIpOworCXR4cS0+dGZkcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgdGZkX3N6LCAmdHhxLT5xLmRtYV9hZGRyKTsKIAogCWlmICghdHhxLT50ZmRzKSB7Ci0JCUlXTF9FUlJPUigicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsCi0JCQkgIHNpemVvZih0eHEtPnRmZHNbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKKwkJSVdMX0VSUihwcml2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsIHRmZF9zeik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXR4cS0+cS5pZCA9IGlkOwpAQCAtNDI0LDQyICszMTMsMTEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotLyoKLSAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgotICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCi0gKgotICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCi0gKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBDaXJjdWxhciBidWZmZXIgKFRGRCBxdWV1ZSBpbiBEUkFNKSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX0NCQkNfUVVFVUUodHhxX2lkKSwKLQkJCSAgICAgdHhxLT5xLmRtYV9hZGRyID4+IDgpOwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfdHhfcXVldWVfaW5pdCAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSB0eC9jbWQgcXVldWUKICAqLwotc3RhdGljIGludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKLQkJCSAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKK2ludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJICAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKIHsKIAlpbnQgaSwgbGVuOwogCWludCByZXQ7CkBAIC01MDEsNyArMzU5LDcgQEAKIAlpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKIAogCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUgKi8KLQlpd2xfaHdfdHhfcXVldWVfaW5pdChwcml2LCB0eHEpOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbml0KHByaXYsIHR4cSk7CiAKIAlyZXR1cm4gMDsKIGVycjoKQEAgLTUxNiw2ICszNzQsOCBAQAogCX0KIAlyZXR1cm4gLUVOT01FTTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3F1ZXVlX2luaXQpOworCiAvKioKICAqIGl3bF9od190eHFfY3R4X2ZyZWUgLSBGcmVlIFRYUSBDb250ZXh0CiAgKgpAQCAtNTU3LDEzICs0MTcsMTMgQEAKIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+c2NkX2JjX3RibHMsCiAJCQkJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2JjX3RibHM7CiAJfQogCS8qIEFsbG9jIGtlZXAtd2FybSBidWZmZXIgKi8KIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+a3csIElXTF9LV19TSVpFKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9rdzsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTU4OSw3ICs0NDksNyBAQAogCQlyZXQgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKIAkJCQkgICAgICAgdHhxX2lkKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKKwkJCUlXTF9FUlIocHJpdiwgIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTc3OCwxNCArNjM4LDE0IEBACiAJCW1lbWNweSh0eF9jbWQtPmtleSwga2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0FHR19DQ01QX01TSzsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKIAkJdHhfY21kLT5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwogCQlpZWVlODAyMTFfZ2V0X3RraXBfa2V5KGtleWNvbmYsIHNrYl9mcmFnLAogCQkJSUVFRTgwMjExX1RLSVBfUDJfS0VZLCB0eF9jbWQtPmtleSk7Ci0JCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfV0VQOgpAQCAtNzk3LDEyICs2NTcsMTIgQEAKIAogCQltZW1jcHkoJnR4X2NtZC0+a2V5WzNdLCBrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CiAKLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKIAkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXljb25mLT5rZXlpZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXljb25mLT5hbGcpOworCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWNvbmYtPmFsZyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTgyMiw3ICs2ODIsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CkBAIC04NDQsMTMgKzcwMywxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJaWYgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZSAmIDB4RkYpID09CiAJICAgICBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODU4LDExICs3MTcsMTEgQEAKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCkBAIC04NzIsNyArNzMxLDcgQEAKIAkgICAgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fAogCSAgICAgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmICFwcml2LT5hc3NvY19pZCkgfHwKIAkgICAgICFwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkKSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODgzLDEyICs3NDIsMTIgQEAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwogCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJZ290byBkcm9wOwogCX0KIAotCUlXTF9ERUJVR19UWCgic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKKwlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CiAKIAlzd3FfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eHFfaWQgPSBzd3FfaWQ7CkBAIC04OTgsNyArNzU3LDcgQEAKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlcjsKIAkJc2VxX251bWJlciAmPSBJRUVFODAyMTFfU0NUTF9TRVE7CiAJCWhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOworCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwogCQloZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpOwogCQlzZXFfbnVtYmVyICs9IDB4MTA7CiAJCS8qIGFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aGlzIDxzdGEsdGlkPiAqLwpAQCAtOTEzLDEwICs3NzIsNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBURkQgd2l0aGluIHRoaXMgcXVldWUncyBjaXJjdWxhciBURkQgYnVmZmVyICovCi0JdGZkID0gJnR4cS0+dGZkc1txLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KIAkvKiBTZXQgdXAgZHJpdmVyIGRhdGEgZm9yIHRoaXMgVEZEICovCiAJbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2luZm8pKTsKIAl0eHEtPnR4YltxLT53cml0ZV9wdHJdLnNrYlswXSA9IHNrYjsKQEAgLTk3MCw3ICs4MjUsOCBAQAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAl0eGNtZF9waHlzICs9IG9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwotCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICB0eGNtZF9waHlzLCBsZW4sIDEsIDApOwogCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQlpd2xfdHhfY21kX2J1aWxkX2h3Y3J5cHRvKHByaXYsIGluZm8sIHR4X2NtZCwgc2tiLCBzdGFfaWQpOwpAQCAtOTgxLDcgKzgzNyw5IEBACiAJaWYgKGxlbikgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAogCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIDAsIDApOwogCX0KIAogCS8qIFRlbGwgTklDIGFib3V0IGFueSAyLWJ5dGUgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCkBAIC0xMDYzLDcgKzkyMSw2IEBACiB7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV07CiAJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZDsKIAlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZDsKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA4MSwyMSArOTM4LDE3IEBACiAJICAgICAgICEoY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJOb3Qgc2VuZGluZyBjb21tYW5kIC0gUkYgS0lMTCIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7Ci0JCUlXTF9FUlJPUigiTm8gc3BhY2UgZm9yIFR4XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgZm9yIFR4XG4iKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwogCi0JdGZkID0gJnR4cS0+dGZkc1txLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KLQogCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCBjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKIApAQCAtMTEyMCwxMyArOTczLDE1IEBACiAJcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgbGVuKTsKIAlwaHlzX2FkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7CiAKLQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBmaXhfc2l6ZSk7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCSAgIHBoeXNfYWRkciwgZml4X3NpemUsIDEsCisJCQkJCQkgICBVMzJfUEFEKGNtZC0+bGVuKSk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCXN3aXRjaCAob3V0X2NtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKIAkJCQkiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAogCQkJCW91dF9jbWQtPmhkci5jbWQsCkBAIC0xMTM0LDcgKzk4OSw3IEBACiAJCQkJcS0+d3JpdGVfcHRyLCBpZHgsIElXTF9DTURfUVVFVUVfTlVNKTsKIAkJCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJTZW5kaW5nIGNvbW1hbmQgJXMgKCMleCksIHNlcTogMHglMDRYLCAiCiAJCQkJIiVkIGJ5dGVzIGF0ICVkWyVkXTolZFxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhvdXRfY21kLT5oZHIuY21kKSwKIAkJCQlvdXRfY21kLT5oZHIuY21kLApAQCAtMTE0NCw4ICs5OTksOSBAQAogI2VuZGlmCiAJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAKLQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLwotCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgMCk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKQorCQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwogCiAJLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwpAQCAtMTE2Myw3ICsxMDE5LDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHEgaWQgKCVkKSwgaW5kZXggJWQsICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm4gMDsKQEAgLTExODAsNyArMTAzNiw3IEBACiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ludmFsX2J5dGVfY250X3RibChwcml2LCB0eHEpOwogCi0JCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAJCW5mcmVlZCsrOwogCX0KIAlyZXR1cm4gbmZyZWVkOwpAQCAtMTIwMyw3ICsxMDU5LDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaWR4ID49IHEtPm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZChxLCBpZHgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAogCQkJICBpZHgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm47CkBAIC0xMjE4LDcgKzEwNzQsNyBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJaWYgKG5mcmVlZCsrID4gMCkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGlkeCwKKwkJCUlXTF9FUlIocHJpdiwgIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaWR4LAogCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKIAkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiAJCX0KQEAgLTEzMDYsNyArMTE2Miw3IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCUlXTF9XQVJOSU5HKCIlcyBvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwKKwlJV0xfV0FSTihwcml2LCAiJXMgb24gcmEgPSAlcE0gdGlkID0gJWRcbiIsCiAJCQlfX2Z1bmNfXywgcmEsIHRpZCk7CiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHJhKTsKQEAgLTEzMTQsNyArMTE3MCw3IEBACiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PRkYpIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgSVdMX0FHR19PRkYgIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IEFHRyB3aGVuIHN0YXRlIGlzIG5vdCBJV0xfQUdHX09GRiAhXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKQEAgLTEzMzQsMTEgKzExOTAsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSFcgcXVldWUgaXMgZW1wdHlcbiIpOworCQlJV0xfRVJSKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOwogCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgcmEsIHRpZCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBOT1QgZW1wdHk6ICVkIHBhY2tldHMgaW4gSFcgcXVldWVcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgaXMgTk9UIGVtcHR5OiAlZCBwYWNrZXRzIGluIEhXIHF1ZXVlXG4iLAogCQkJICAgICB0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSk7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE7CiAJfQpAQCAtMTM1NCw3ICsxMjEwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFyYSkgewotCQlJV0xfRVJST1IoInJhID0gTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInJhID0gTlVMTFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTM2OSw3ICsxMjI1LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSAhPSBJV0xfQUdHX09OKQotCQlJV0xfV0FSTklORygiU3RvcHBpbmcgQUdHIHdoaWxlIHN0YXRlIG5vdCBJV0xfQUdHX09OXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CiAKIAl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwogCXNzbiA9ICh0aWRfZGF0YS0+c2VxX251bWJlciAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKQEAgLTEzNzksMTMgKzEyMzUsMTMgQEAKIAogCS8qIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHkgKi8KIAlpZiAod3JpdGVfcHRyICE9IHJlYWRfcHRyKSB7Ci0JCUlXTF9ERUJVR19IVCgiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJTdG9wcGluZyBhIG5vbiBlbXB0eSBBR0cgSFcgUVVFVUVcbiIpOwogCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9CiAJCQkJSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKKwlJV0xfREVCVUdfSFQocHJpdiwgIkhXIHF1ZXVlIGlzIGVtcHR5XG4iKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTE0MTYsNyArMTI3Miw3IEBACiAJCSAgICAocS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyKSkgewogCQkJdTE2IHNzbiA9IFNFUV9UT19TTih0aWRfZGF0YS0+c2VxX251bWJlcik7CiAJCQlpbnQgdHhfZmlmbyA9IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bdGlkXTsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIERFTEJBIGZsb3dcbiIpOworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgREVMQkEgZmxvd1xuIik7CiAJCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLAogCQkJCQkJCSAgICAgc3NuLCB0eF9maWZvKTsKIAkJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKQEAgLTE0MjYsNyArMTI4Miw3IEBACiAJY2FzZSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE6CiAJCS8qIFdlIGFyZSByZWNsYWltaW5nIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgcXVldWUgKi8KIAkJaWYgKHRpZF9kYXRhLT50ZmRzX2luX3F1ZXVlID09IDApIHsKLQkJCUlXTF9ERUJVR19IVCgiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIEFEREJBIGZsb3dcbiIpOworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgQUREQkEgZmxvd1xuIik7CiAJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PTjsKIAkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHByaXYtPmh3LCBhZGRyLCB0aWQpOwogCQl9CkBAIC0xNDU1LDEzICsxMzExLDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCiAJaWYgKHVubGlrZWx5KCFhZ2ctPndhaXRfZm9yX2JhKSkgIHsKLQkJSVdMX0VSUk9SKCJSZWNlaXZlZCBCQSB3aGVuIG5vdCBleHBlY3RlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIlJlY2VpdmVkIEJBIHdoZW4gbm90IGV4cGVjdGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogTWFyayB0aGF0IHRoZSBleHBlY3RlZCBibG9jay1hY2sgcmVzcG9uc2UgYXJyaXZlZCAqLwogCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiQkEgJWQgJWRcbiIsIGFnZy0+c3RhcnRfaWR4LCBiYV9yZXNwLT5zZXFfY3RsKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CiAKIAkvKiBDYWxjdWxhdGUgc2hpZnQgdG8gYWxpZ24gYmxvY2stYWNrIGJpdHMgd2l0aCBvdXIgVHggd2luZG93IGJpdHMgKi8KIAlzaCA9IGFnZy0+c3RhcnRfaWR4IC0gU0VRX1RPX0lOREVYKHNlcV9jdGwgPj4gNCk7CkBAIC0xNDcyLDcgKzEzMjgsNyBAQAogCWJpdG1hcCA9IGxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCkgPj4gc2g7CiAKIAlpZiAoYWdnLT5mcmFtZV9jb3VudCA+ICg2NCAtIHNoKSkgewotCQlJV0xfREVCVUdfVFhfUkVQTFkoIm1vcmUgZnJhbWVzIHRoYW4gYml0bWFwIHNpemUiKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE0ODUsNyArMTM0MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGFnZy0+ZnJhbWVfY291bnQgOyBpKyspIHsKIAkJYWNrID0gYml0bWFwICYgKDFVTEwgPDwgaSk7CiAJCXN1Y2Nlc3NlcyArPSAhIWFjazsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCIlcyBPTiBpPSVkIGlkeD0lZCByYXc9JWRcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAogCQkJYWNrID8gIkFDSyIgOiAiTkFDSyIsIGksIChhZ2ctPnN0YXJ0X2lkeCArIGkpICYgMHhmZiwKIAkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7CiAJfQpAQCAtMTQ5OCw3ICsxMzU0LDcgQEAKIAlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7CiAJaXdsX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiQml0bWFwICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYml0bWFwKTsKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJpdG1hcCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MjgsNyArMTM4NCw4IEBACiAJdTE2IGJhX3Jlc3Bfc2NkX3NzbiA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNjZF9zc24pOwogCiAJaWYgKHNjZF9mbG93ID49IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSkgewotCQlJV0xfRVJST1IoIkJVR19PTiBzY2RfZmxvdyBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcXVldWVzXG4iKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkJVR19PTiBzY2RfZmxvdyBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcXVldWVzXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU0MiwxOSArMTM5OSwxOSBAQAogCiAJLyogVE9ETzogTmVlZCB0byBnZXQgdGhpcyBjb3B5IG1vcmUgc2FmZWx5IC0gbm93IGdvb2QgZm9yIGRlYnVnICovCiAKLQlJV0xfREVCVUdfVFhfUkVQTFkoIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXSBSZWNlaXZlZCBmcm9tICVwTSwgIgorCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUkVQTFlfQ09NUFJFU1NFRF9CQSBbJWRdIFJlY2VpdmVkIGZyb20gJXBNLCAiCiAJCQkgICAic3RhX2lkID0gJWRcbiIsCiAJCQkgICBhZ2ctPndhaXRfZm9yX2JhLAogCQkJICAgKHU4ICopICZiYV9yZXNwLT5zdGFfYWRkcl9sbzMyLAogCQkJICAgYmFfcmVzcC0+c3RhX2lkKTsKLQlJV0xfREVCVUdfVFhfUkVQTFkoIlRJRCA9ICVkLCBTZXFDdGwgPSAlZCwgYml0bWFwID0gMHglbGx4LCBzY2RfZmxvdyA9ICIKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRJRCA9ICVkLCBTZXFDdGwgPSAlZCwgYml0bWFwID0gMHglbGx4LCBzY2RfZmxvdyA9ICIKIAkJCSAgICIlZCwgc2NkX3NzbiA9ICVkXG4iLAogCQkJICAgYmFfcmVzcC0+dGlkLAogCQkJICAgYmFfcmVzcC0+c2VxX2N0bCwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSwKIAkJCSAgIGJhX3Jlc3AtPnNjZF9mbG93LAogCQkJICAgYmFfcmVzcC0+c2NkX3Nzbik7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJEQVQgc3RhcnRfaWR4ID0gJWQsIGJpdG1hcCA9IDB4JWxseCBcbiIsCisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJEQVQgc3RhcnRfaWR4ID0gJWQsIGJpdG1hcCA9IDB4JWxseCBcbiIsCiAJCQkgICBhZ2ctPnN0YXJ0X2lkeCwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA1N2RkMzRlLi40NDY1MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTQ2LDQwICs0NiwyNSBAQAogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlICJpd2wtMzk0NS1jb3JlLmgiCisjZGVmaW5lIERSVl9OQU1FCSJpd2wzOTQ1IgorCisjaW5jbHVkZSAiaXdsLWZoLmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtZmguaCIKKyNpbmNsdWRlICJpd2wtY29tbWFuZHMuaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXUzMiBpd2wzOTQ1X2RlYnVnX2xldmVsOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIG1vZHVsZSBib2lsZXIgcGxhdGUKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBtb2R1bGUgcGFyYW1ldGVycyAqLwotc3RhdGljIGludCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbjsgLyogZGVmOiAwID0gdXNlIDM5NDUncyBoL3cgc2NhbiAqLwotc3RhdGljIHUzMiBpd2wzOTQ1X3BhcmFtX2RlYnVnOyAgICAvKiBkZWY6IDAgPSBtaW5pbWFsIGRlYnVnIGxvZyBtZXNzYWdlcyAqLwotc3RhdGljIGludCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGU7ICAvKiBkZWY6IDAgPSBlbmFibGUgcmFkaW8gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9hbnRlbm5hOyAgLyogZGVmOiAwID0gYm90aCBhbnRlbm5hcyAodXNlIGRpdmVyc2l0eSkgKi8KLWludCBpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvOyAgICAgICAgLyogZGVmOiAwID0gdXNlIHNvZnR3YXJlIGVuY3J5cHRpb24gKi8KLWludCBpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPSBJV0wzOV9NQVhfTlVNX1FVRVVFUzsgLyogZGVmOiA4IFR4IHF1ZXVlcyAqLworI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgotICogTk9URTogRFJWX05BTUUgaXMgZGVmaW5lZCBpbiBpd2x3aWZpLmggZm9yIHVzZSBieSBpd2wtZGVidWcuaCBhbmQgcHJpbnRrCiAgKi8KIAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JXAogIkludGVsKFIpIFBSTy9XaXJlbGVzcyAzOTQ1QUJHL0JHIE5ldHdvcmsgQ29ubmVjdGlvbiBkcml2ZXIgZm9yIExpbnV4IgogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogI2RlZmluZSBWRCAiZCIKICNlbHNlCiAjZGVmaW5lIFZECkBAIC05MSwxMCArNzYsMTAgQEAKICNkZWZpbmUgVlMKICNlbmRpZgogCi0jZGVmaW5lIElXTFdJRklfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgSVdMMzlfVkVSU0lPTiAiMS4yLjI2ayIgVkQgVlMKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTgorI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVdMMzlfVkVSU0lPTgogCiAKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMTAyLDIzNSArODcsMTMgQEAKIE1PRFVMRV9BVVRIT1IoRFJWX0NPUFlSSUdIVCAiICIgRFJWX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICppd2wzOTQ1X2dldF9iYW5kKAotCQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JcmV0dXJuIHByaXYtPmh3LT53aXBoeS0+YmFuZHNbYmFuZF07Ci19Ci0KLS8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgotICogRE1BIHNlcnZpY2VzCi0gKgotICogVGhlb3J5IG9mIG9wZXJhdGlvbgotICoKLSAqIEEgVHggb3IgUnggcXVldWUgcmVzaWRlcyBpbiBob3N0IERSQU0sIGFuZCBpcyBjb21wcmlzZWQgb2YgYSBjaXJjdWxhciBidWZmZXIKLSAqIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycywgZWFjaCBvZiB3aGljaCBwb2ludHMgdG8gb25lIG9yIG1vcmUgZGF0YSBidWZmZXJzIGZvcgotICogdGhlIGRldmljZSB0byByZWFkIGZyb20gb3IgZmlsbC4gIERyaXZlciBhbmQgZGV2aWNlIGV4Y2hhbmdlIHN0YXR1cyBvZiBlYWNoCi0gKiBxdWV1ZSB2aWEgInJlYWQiIGFuZCAid3JpdGUiIHBvaW50ZXJzLiAgRHJpdmVyIGtlZXBzIG1pbmltdW0gb2YgMiBlbXB0eQotICogZW50cmllcyBpbiBlYWNoIGNpcmN1bGFyIGJ1ZmZlciwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmZ1c2luZyBlbXB0eSBhbmQgZnVsbAotICogcXVldWUgc3RhdGVzLgotICoKLSAqIFRoZSBkZXZpY2UgcmVhZHMgb3Igd3JpdGVzIHRoZSBkYXRhIGluIHRoZSBxdWV1ZXMgdmlhIHRoZSBkZXZpY2UncyBzZXZlcmFsCi0gKiBETUEvRklGTyBjaGFubmVscy4gIEVhY2ggcXVldWUgaXMgbWFwcGVkIHRvIGEgc2luZ2xlIERNQSBjaGFubmVsLgotICoKLSAqIEZvciBUeCBxdWV1ZSwgdGhlcmUgYXJlIGxvdyBtYXJrIGFuZCBoaWdoIG1hcmsgbGltaXRzLiBJZiwgYWZ0ZXIgcXVldWluZwotICogdGhlIHBhY2tldCBmb3IgVHgsIGZyZWUgc3BhY2UgYmVjb21lIDwgbG93IG1hcmssIFR4IHF1ZXVlIHN0b3BwZWQuIFdoZW4KLSAqIHJlY2xhaW1pbmcgcGFja2V0cyAob24gJ3R4IGRvbmUgSVJRKSwgaWYgZnJlZSBzcGFjZSBiZWNvbWUgPiBoaWdoIG1hcmssCi0gKiBUeCBxdWV1ZSByZXN1bWVkLgotICoKLSAqIFRoZSAzOTQ1IG9wZXJhdGVzIHdpdGggc2l4IHF1ZXVlczogIE9uZSByZWNlaXZlIHF1ZXVlLCBvbmUgdHJhbnNtaXQgcXVldWUKLSAqICgjNCkgZm9yIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIGRldmljZSBmaXJtd2FyZSwgYW5kIGZvdXIgdHJhbnNtaXQgcXVldWVzCi0gKiAoIzAtMykgZm9yIGRhdGEgdHggdmlhIEVEQ0EuICBBbiBhZGRpdGlvbmFsIDIgSENDQSBxdWV1ZXMgYXJlIHVudXNlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBpd2wzOTQ1X3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxKQotewotCWludCBzID0gcS0+cmVhZF9wdHIgLSBxLT53cml0ZV9wdHI7Ci0KLQlpZiAocS0+cmVhZF9wdHIgPiBxLT53cml0ZV9wdHIpCi0JCXMgLT0gcS0+bl9iZDsKLQotCWlmIChzIDw9IDApCi0JCXMgKz0gcS0+bl93aW5kb3c7Ci0JLyoga2VlcCBzb21lIHJlc2VydmUgdG8gbm90IGNvbmZ1c2UgZW1wdHkgYW5kIGZ1bGwgc2l0dWF0aW9ucyAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi1pbnQgaXdsMzk0NV94Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSkKLXsKLQlyZXR1cm4gcS0+d3JpdGVfcHRyID4gcS0+cmVhZF9wdHIgPwotCQkoaSA+PSBxLT5yZWFkX3B0ciAmJiBpIDwgcS0+d3JpdGVfcHRyKSA6Ci0JCSEoaSA8IHEtPnJlYWRfcHRyICYmIGkgPj0gcS0+d3JpdGVfcHRyKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIHU4IGdldF9jbWRfaW5kZXgoc3RydWN0IGl3bDM5NDVfcXVldWUgKnEsIHUzMiBpbmRleCwgaW50IGlzX2h1Z2UpCi17Ci0JLyogVGhpcyBpcyBmb3Igc2NhbiBjb21tYW5kLCB0aGUgYmlnIGJ1ZmZlciBhdCBlbmQgb2YgY29tbWFuZCBhcnJheSAqLwotCWlmIChpc19odWdlKQotCQlyZXR1cm4gcS0+bl93aW5kb3c7CS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwotCi0JLyogT3RoZXJ3aXNlLCB1c2Ugbm9ybWFsIHNpemUgYnVmZmVycyAqLwotCXJldHVybiBpbmRleCAmIChxLT5uX3dpbmRvdyAtIDEpOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcXVldWVfaW5pdCAtIEluaXRpYWxpemUgcXVldWUncyBoaWdoL2xvdy13YXRlciBhbmQgcmVhZC93cml0ZSBpbmRleGVzCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLAotCQkJICBpbnQgY291bnQsIGludCBzbG90c19udW0sIHUzMiBpZCkKLXsKLQlxLT5uX2JkID0gY291bnQ7Ci0JcS0+bl93aW5kb3cgPSBzbG90c19udW07Ci0JcS0+aWQgPSBpZDsKLQotCS8qIGNvdW50IG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZSBpd2xfcXVldWVfaW5jX3dyYXAKLQkgKiBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKGNvdW50KSk7Ci0KLQkvKiBzbG90c19udW0gbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlCi0JICogZ2V0X2NtZF9pbmRleCBpcyBicm9rZW4uICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKHNsb3RzX251bSkpOwotCi0JcS0+bG93X21hcmsgPSBxLT5uX3dpbmRvdyAvIDQ7Ci0JaWYgKHEtPmxvd19tYXJrIDwgNCkKLQkJcS0+bG93X21hcmsgPSA0OwotCi0JcS0+aGlnaF9tYXJrID0gcS0+bl93aW5kb3cgLyA4OwotCWlmIChxLT5oaWdoX21hcmsgPCAyKQotCQlxLT5oaWdoX21hcmsgPSAyOwotCi0JcS0+d3JpdGVfcHRyID0gcS0+cmVhZF9wdHIgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyAtIEFsbG9jIGRyaXZlciBkYXRhIGFuZCBURkQgQ0IgZm9yIG9uZSBUeC9jbWQgcXVldWUKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0KLQkvKiBEcml2ZXIgcHJpdmF0ZSBkYXRhLCBvbmx5IGZvciBUeCAobm90IGNvbW1hbmQpIHF1ZXVlcywKLQkgKiBub3Qgc2hhcmVkIHdpdGggZGV2aWNlLiAqLwotCWlmIChpZCAhPSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQl0eHEtPnR4YiA9IGttYWxsb2Moc2l6ZW9mKHR4cS0+dHhiWzBdKSAqCi0JCQkJICAgVEZEX1FVRVVFX1NJWkVfTUFYLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0eHEtPnR4YikgewotCQkJSVdMX0VSUk9SKCJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgotCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2UKLQkJdHhxLT50eGIgPSBOVUxMOwotCi0JLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKLQkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LAotCQkJc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYLAotCQkJJnR4cS0+cS5kbWFfYWRkcik7Ci0KLQlpZiAoIXR4cS0+YmQpIHsKLQkJSVdMX0VSUk9SKCJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwKLQkJCSAgc2l6ZW9mKHR4cS0+YmRbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdHhxLT5xLmlkID0gaWQ7Ci0KLQlyZXR1cm4gMDsKLQotIGVycm9yOgotCWtmcmVlKHR4cS0+dHhiKTsKLQl0eHEtPnR4YiA9IE5VTEw7Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBvbmUgdHgvY21kIHF1ZXVlCi0gKi8KLWludCBpd2wzOTQ1X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJICAgICAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSwgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgbGVuOwotCWludCByYyA9IDA7Ci0KLQkvKgotCSAqIEFsbG9jIGJ1ZmZlciBhcnJheSBmb3IgY29tbWFuZHMgKFR4IG9yIG90aGVyIHR5cGVzIG9mIGNvbW1hbmRzKS4KLQkgKiBGb3IgdGhlIGNvbW1hbmQgcXVldWUgKCM0KSwgYWxsb2NhdGUgY29tbWFuZCBzcGFjZSArIG9uZSBiaWcKLQkgKiBjb21tYW5kIGZvciBzY2FuLCBzaW5jZSBzY2FuIGNvbW1hbmQgaXMgdmVyeSBodWdlOyB0aGUgc3lzdGVtIHdpbGwKLQkgKiBub3QgaGF2ZSB0d28gc2NhbnMgYXQgdGhlIHNhbWUgdGltZSwgc28gb25seSBvbmUgaXMgbmVlZGVkLgotCSAqIEZvciBkYXRhIFR4IHF1ZXVlcyAoYWxsIG90aGVyIHF1ZXVlcyksIG5vIHN1cGVyLXNpemUgY29tbWFuZAotCSAqIHNwYWNlIGlzIG5lZWRlZC4KLQkgKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIHNsb3RzX251bTsKLQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQotCQlsZW4gKz0gIElXTF9NQVhfU0NBTl9TSVpFOwotCXR4cS0+Y21kID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBsZW4sICZ0eHEtPmRtYV9hZGRyX2NtZCk7Ci0JaWYgKCF0eHEtPmNtZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBBbGxvYyBkcml2ZXIgZGF0YSBhcnJheSBhbmQgVEZEIGNpcmN1bGFyIGJ1ZmZlciAqLwotCXJjID0gaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyhwcml2LCB0eHEsIHR4cV9pZCk7Ci0JaWYgKHJjKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXR4cS0+bmVlZF91cGRhdGUgPSAwOwotCi0JLyogVEZEX1FVRVVFX1NJWkVfTUFYIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGl3bF9xdWV1ZV9pbmNfd3JhcCBhbmQgaXdsX3F1ZXVlX2RlY193cmFwIGFyZSBicm9rZW4uICovCi0JQlVJTERfQlVHX09OKFRGRF9RVUVVRV9TSVpFX01BWCAmIChURkRfUVVFVUVfU0laRV9NQVggLSAxKSk7Ci0KLQkvKiBJbml0aWFsaXplIHF1ZXVlIGhpZ2gvbG93LXdhdGVyLCBoZWFkL3RhaWwgaW5kZXhlcyAqLwotCWl3bDM5NDVfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKLQotCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUsIGVuYWJsZSBETUEgY2hhbm5lbC4gKi8KLQlpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQocHJpdiwgdHhxKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfZnJlZSAtIERlYWxsb2NhdGUgRE1BIHF1ZXVlLgotICogQHR4cTogVHJhbnNtaXQgcXVldWUgdG8gZGVhbGxvY2F0ZS4KLSAqCi0gKiBFbXB0eSBxdWV1ZSBieSByZW1vdmluZyBhbmQgZGVzdHJveWluZyBhbGwgQkQncy4KLSAqIEZyZWUgYWxsIGJ1ZmZlcnMuCi0gKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAqLwotdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGxlbjsKLQotCWlmIChxLT5uX2JkID09IDApCi0JCXJldHVybjsKLQotCS8qIGZpcnN0LCBlbXB0eSBhbGwgQkQncyAqLwotCWZvciAoOyBxLT53cml0ZV9wdHIgIT0gcS0+cmVhZF9wdHI7Ci0JICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpCi0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7Ci0KLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAqIHEtPm5fd2luZG93OwotCWlmIChxLT5pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJbGVuICs9IElXTF9NQVhfU0NBTl9TSVpFOwotCi0JLyogRGUtYWxsb2MgYXJyYXkgb2YgY29tbWFuZC90eCBidWZmZXJzICovCi0JcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIGxlbiwgdHhxLT5jbWQsIHR4cS0+ZG1hX2FkZHJfY21kKTsKLQotCS8qIERlLWFsbG9jIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzICovCi0JaWYgKHR4cS0+cS5uX2JkKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZSkgKgotCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT5iZCwgdHhxLT5xLmRtYV9hZGRyKTsKLQotCS8qIERlLWFsbG9jIGFycmF5IG9mIHBlci1URkQgZHJpdmVyIGRhdGEgKi8KLQlrZnJlZSh0eHEtPnR4Yik7Ci0JdHhxLT50eGIgPSBOVUxMOwotCi0JLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCi0JbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKLX0KLQotY29uc3QgdTggaXdsMzk0NV9icm9hZGNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKKyAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDM5NDVfbW9kX3BhcmFtcyA9IHsKKwkubnVtX29mX3F1ZXVlcyA9IElXTDM5X01BWF9OVU1fUVVFVUVTLAorCS5zd19jcnlwdG8gPSAxLAorCS5yZXN0YXJ0X2Z3ID0gMSwKKwkvKiB0aGUgcmVzdCBhcmUgMCBieSBkZWZhdWx0ICovCit9OwogCiAvKioqKioqKioqKioqKioqIFNUQVRJT04gVEFCTEUgTUFOQUdFTUVOVCAqKioqCiAgKiBtYWM4MDIxMSBzaG91bGQgYmUgZXhhbWluZWQgdG8gZGV0ZXJtaW5lIGlmIHN0YV9pbmZvIGlzIGR1cGxpY2F0aW5nCkBAIC0zNDQsNyArMTA3LDcgQEAKICAqCiAgKiBOT1RFOiAgVGhpcyBkb2VzIG5vdCByZW1vdmUgc3RhdGlvbiBmcm9tIGRldmljZSdzIHN0YXRpb24gdGFibGUuCiAgKi8KLXN0YXRpYyB1OCBpd2wzOTQ1X3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCitzdGF0aWMgdTggaXdsMzk0NV9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXApCiB7CiAJaW50IGluZGV4ID0gSVdMX0lOVkFMSURfU1RBVElPTjsKIAlpbnQgaTsKQEAgLTM1NSwxMSArMTE4LDExIEBACiAJaWYgKGlzX2FwKQogCQlpbmRleCA9IElXTF9BUF9JRDsKIAllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJaW5kZXggPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJaW5kZXggPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCWVsc2UKLQkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3NldHRpbmcubWF4X3N0YXRpb25zOyBpKyspCi0JCQlpZiAocHJpdi0+c3RhdGlvbnNbaV0udXNlZCAmJgotCQkJICAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLAorCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsgaSsrKQorCQkJaWYgKHByaXYtPnN0YXRpb25zXzM5W2ldLnVzZWQgJiYKKwkJCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwogCQkJCWJyZWFrOwpAQCAtMzY4LDggKzEzMSw4IEBACiAJaWYgKHVubGlrZWx5KGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pKQogCQlnb3RvIG91dDsKIAotCWlmIChwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCkgewotCQlwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCA9IDA7CisJaWYgKHByaXYtPnN0YXRpb25zXzM5W2luZGV4XS51c2VkKSB7CisJCXByaXYtPnN0YXRpb25zXzM5W2luZGV4XS51c2VkID0gMDsKIAkJcHJpdi0+bnVtX3N0YXRpb25zLS07CiAJfQogCkBAIC0zODYsMTQgKzE0OSwxNCBAQAogICoKICAqIE5PVEU6ICBUaGlzIGRvZXMgbm90IGNsZWFyIG9yIG90aGVyd2lzZSBhbHRlciB0aGUgZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZS4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+bnVtX3N0YXRpb25zID0gMDsKLQltZW1zZXQocHJpdi0+c3RhdGlvbnMsIDAsIHNpemVvZihwcml2LT5zdGF0aW9ucykpOworCW1lbXNldChwcml2LT5zdGF0aW9uc18zOSwgMCwgc2l6ZW9mKHByaXYtPnN0YXRpb25zXzM5KSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogfQpAQCAtNDAxLDcgKzE2NCw3IEBACiAvKioKICAqIGl3bDM5NDVfYWRkX3N0YXRpb24gLSBBZGQgc3RhdGlvbiB0byBzdGF0aW9uIHRhYmxlcyBpbiBkcml2ZXIgYW5kIGRldmljZQogICovCi11OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXAsIHU4IGZsYWdzKQordTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLCBpbnQgaXNfYXAsIHU4IGZsYWdzKQogewogCWludCBpOwogCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047CkBAIC00MTMsMTYgKzE3NiwxNiBAQAogCWlmIChpc19hcCkKIAkJaW5kZXggPSBJV0xfQVBfSUQ7CiAJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCWluZGV4ID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWluZGV4ID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAllbHNlCi0JCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKSB7Ci0JCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpXS5zdGEuc3RhLmFkZHIsCisJCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwKIAkJCQkJCWFkZHIpKSB7CiAJCQkJaW5kZXggPSBpOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIXByaXYtPnN0YXRpb25zW2ldLnVzZWQgJiYKKwkJCWlmICghcHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCAmJgogCQkJICAgIGluZGV4ID09IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQkJaW5kZXggPSBpOwogCQl9CkBAIC00MzQsMTQgKzE5NywxNCBAQAogCQlyZXR1cm4gaW5kZXg7CiAJfQogCi0JaWYgKHByaXYtPnN0YXRpb25zW2luZGV4XS51c2VkICYmCi0JICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc1tpbmRleF0uc3RhLnN0YS5hZGRyLCBhZGRyKSkgeworCWlmIChwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCAmJgorCSAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdLnN0YS5zdGEuYWRkciwgYWRkcikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzX3NwaW4pOwogCQlyZXR1cm4gaW5kZXg7CiAJfQogCi0JSVdMX0RFQlVHX0FTU09DKCJBZGQgU1RBIElEICVkOiAlcE1cbiIsIGluZGV4LCBhZGRyKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW2luZGV4XTsKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZCBTVEEgSUQgJWQ6ICVwTVxuIiwgaW5kZXgsIGFkZHIpOworCXN0YXRpb24gPSAmcHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdOwogCXN0YXRpb24tPnVzZWQgPSAxOwogCXByaXYtPm51bV9zdGF0aW9ucysrOwogCkBAIC00NjAsNTMxICsyMjMsMzUgQEAKIAkvKiBUdXJuIG9uIGJvdGggYW50ZW5uYXMgZm9yIHRoZSBzdGF0aW9uLi4uICovCiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9CiAJCQlpd2wzOTQ1X2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZSwgUkFURV9NQ1NfQU5UX0FCX01TSyk7Ci0Jc3RhdGlvbi0+Y3VycmVudF9yYXRlLnJhdGVfbl9mbGFncyA9Ci0JCQlsZTE2X3RvX2NwdShzdGF0aW9uLT5zdGEucmF0ZV9uX2ZsYWdzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAogCS8qIEFkZCBzdGF0aW9uIHRvIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOwogCXJldHVybiBpbmRleDsKIAogfQogCi0vKioqKioqKioqKioqKioqIERSSVZFUiBTVEFUVVMgRlVOQ1RJT05TICAgKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmVhZHkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQkvKiBUaGUgYWRhcHRlciBpcyAncmVhZHknIGlmIFJFQURZIGFuZCBHRU9fQ09ORklHVVJFRCBiaXRzIGFyZQotCSAqIHNldCBidXQgRVhJVF9QRU5ESU5HIGlzIG5vdCAqLwotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpICYmCi0JICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgJiYKLQkgICAgICAgIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2FsaXZlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmZraWxsX3N3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZmtpbGxfaHcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3Jma2lsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSB8fAotCQlpd2wzOTQ1X2lzX3Jma2lsbF9zdyhwcml2KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZWFkeV9yZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpd2wzOTQ1X2lzX3JlYWR5KHByaXYpOwotfQotCi0vKioqKioqKioqKioqKioqIEhPU1QgQ09NTUFORCBRVUVVRSBGVU5DVElPTlMgICAqKioqKi8KLQotI2RlZmluZSBJV0xfQ01EKHgpIGNhc2UgeDogcmV0dXJuICN4Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfY21kX3N0cmluZyh1OCBjbWQpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQkJSVdMX0NNRChSRVBMWV9BTElWRSk7Ci0JCUlXTF9DTUQoUkVQTFlfRVJST1IpOwotCQlJV0xfQ01EKFJFUExZX1JYT04pOwotCQlJV0xfQ01EKFJFUExZX1JYT05fQVNTT0MpOwotCQlJV0xfQ01EKFJFUExZX1FPU19QQVJBTSk7Ci0JCUlXTF9DTUQoUkVQTFlfUlhPTl9USU1JTkcpOwotCQlJV0xfQ01EKFJFUExZX0FERF9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1JFTU9WRV9TVEEpOwotCQlJV0xfQ01EKFJFUExZX1JFTU9WRV9BTExfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV8zOTQ1X1JYKTsKLQkJSVdMX0NNRChSRVBMWV9UWCk7Ci0JCUlXTF9DTUQoUkVQTFlfUkFURV9TQ0FMRSk7Ci0JCUlXTF9DTUQoUkVQTFlfTEVEU19DTUQpOwotCQlJV0xfQ01EKFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQpOwotCQlJV0xfQ01EKFJBREFSX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfUVVJRVRfQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9DSEFOTkVMX1NXSVRDSCk7Ci0JCUlXTF9DTUQoQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQpOwotCQlJV0xfQ01EKFNQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChQT1dFUl9UQUJMRV9DTUQpOwotCQlJV0xfQ01EKFBNX1NMRUVQX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMpOwotCQlJV0xfQ01EKFJFUExZX1NDQU5fQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9TQ0FOX0FCT1JUX0NNRCk7Ci0JCUlXTF9DTUQoU0NBTl9TVEFSVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChCRUFDT05fTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9UWF9CRUFDT04pOwotCQlJV0xfQ01EKFdIT19JU19BV0FLRV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFFVSUVUX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCk7Ci0JCUlXTF9DTUQoTUVBU1VSRV9BQk9SVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX0JUX0NPTkZJRyk7Ci0JCUlXTF9DTUQoUkVQTFlfU1RBVElTVElDU19DTUQpOwotCQlJV0xfQ01EKFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9DQVJEX1NUQVRFX0NNRCk7Ci0JCUlXTF9DTUQoQ0FSRF9TVEFURV9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKE1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJVTktOT1dOIjsKLQotCX0KLX0KLQotI2RlZmluZSBIT1NUX0NPTVBMRVRFX1RJTUVPVVQgKEhaIC8gMikKLQotLyoqCi0gKiBpd2wzOTQ1X2VucXVldWVfaGNtZCAtIGVucXVldWUgYSB1Q29kZSBjb21tYW5kCi0gKiBAcHJpdjogZGV2aWNlIHByaXZhdGUgZGF0YSBwb2ludAotICogQGNtZDogYSBwb2ludCB0byB0aGUgdWNvZGUgY29tbWFuZCBzdHJ1Y3R1cmUKLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyA8IDAgdmFsdWVzIHRvIGluZGljYXRlIHRoZSBvcGVyYXRpb24gaXMKLSAqIGZhaWxlZC4gT24gc3VjY2VzcywgaXQgdHVybnMgdGhlIGluZGV4ICg+IDApIG9mIGNvbW1hbmQgaW4gdGhlCi0gKiBjb21tYW5kIHF1ZXVlLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfZW5xdWV1ZV9oY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZDsKLQl1MzIgKmNvbnRyb2xfZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfY21kICpvdXRfY21kOwotCXUzMiBpZHg7Ci0JdTE2IGZpeF9zaXplID0gKHUxNikoY21kLT5sZW4gKyBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci0JaW50IHBhZDsKLQl1MTYgY291bnQ7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCi0JICogdGhlIFRGRF9NQVhfUEFZTE9BRF9TSVpFLCBhbmQgaXQgc2VudCBhcyBhICdzbWFsbCcgY29tbWFuZCB0aGVuCi0JICogd2Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBURkQgZW50cmllcyAqLwotCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKLQkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7Ci0KLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGl3bDM5NDVfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0KLQl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7Ci0KLQlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSk7Ci0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOwotCi0Jb3V0X2NtZC0+aGRyLmNtZCA9IGNtZC0+aWQ7Ci0JbWVtY3B5KCZvdXRfY21kLT5tZXRhLCAmY21kLT5tZXRhLCBzaXplb2YoY21kLT5tZXRhKSk7Ci0JbWVtY3B5KCZvdXRfY21kLT5jbWQucGF5bG9hZCwgY21kLT5kYXRhLCBjbWQtPmxlbik7Ci0KLQkvKiBBdCB0aGlzIHBvaW50LCB0aGUgb3V0X2NtZCBub3cgaGFzIGFsbCBvZiB0aGUgaW5jb21pbmcgY21kCi0JICogaW5mb3JtYXRpb24gKi8KLQotCW91dF9jbWQtPmhkci5mbGFncyA9IDA7Ci0Jb3V0X2NtZC0+aGRyLnNlcXVlbmNlID0gY3B1X3RvX2xlMTYoUVVFVUVfVE9fU0VRKElXTF9DTURfUVVFVUVfTlVNKSB8Ci0JCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSk7Ci0JaWYgKG91dF9jbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKQotCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gY3B1X3RvX2xlMTYoU0VRX0hVR0VfRlJBTUUpOwotCi0JcGh5c19hZGRyID0gdHhxLT5kbWFfYWRkcl9jbWQgKyBzaXplb2YodHhxLT5jbWRbMF0pICogaWR4ICsKLQkJCW9mZnNldG9mKHN0cnVjdCBpd2wzOTQ1X2NtZCwgaGRyKTsKLQlpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHBoeXNfYWRkciwgZml4X3NpemUpOwotCi0JcGFkID0gVTMyX1BBRChjbWQtPmxlbik7Ci0JY291bnQgPSBURkRfQ1RMX0NPVU5UX0dFVCgqY29udHJvbF9mbGFncyk7Ci0JKmNvbnRyb2xfZmxhZ3MgPSBURkRfQ1RMX0NPVU5UX1NFVChjb3VudCkgfCBURkRfQ1RMX1BBRF9TRVQocGFkKTsKLQotCUlXTF9ERUJVR19IQygiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgotCQkgICAgICIlZCBieXRlcyBhdCAlZFslZF06JWRcbiIsCi0JCSAgICAgZ2V0X2NtZF9zdHJpbmcob3V0X2NtZC0+aGRyLmNtZCksCi0JCSAgICAgb3V0X2NtZC0+aGRyLmNtZCwgbGUxNl90b19jcHUob3V0X2NtZC0+aGRyLnNlcXVlbmNlKSwKLQkJICAgICBmaXhfc2l6ZSwgcS0+d3JpdGVfcHRyLCBpZHgsIElXTF9DTURfUVVFVUVfTlVNKTsKLQotCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCi0JLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwotCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwotCXJldCA9IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldCA/IHJldCA6IGlkeDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfY21kX2FzeW5jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0JaW50IHJldDsKLQotCUJVR19PTighKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykpOwotCi0JLyogQW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBleHBlY3QgYW4gU0tCIHRvIGJlIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKTsKLQotCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIE1VU1QgaGF2ZSBhIGNhbGxiYWNrLiAqLwotCUJVR19PTighY21kLT5tZXRhLnUuY2FsbGJhY2spOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0ID0gaXdsMzk0NV9lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGl3bDM5NDVfZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfY21kX3N5bmMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCkKLXsKLQlpbnQgY21kX2lkeDsKLQlpbnQgcmV0OwotCi0JQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQyk7Ci0KLQkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZXRfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKQotCQljbWQtPm1ldGEuc291cmNlID0gJmNtZC0+bWV0YTsKLQotCWNtZF9pZHggPSBpd2wzOTQ1X2VucXVldWVfaGNtZChwcml2LCBjbWQpOwotCWlmIChjbWRfaWR4IDwgMCkgewotCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGl3bDM5NDVfZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCi0JCQkhdGVzdF9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSwKLQkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7Ci0JaWYgKCFyZXQpIHsKLQkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7Ci0KLQkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gY2FuY2VsOwotCQl9Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKLQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FQ0FOQ0VMRUQ7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgZmFpbGVkOiBGVyBFcnJvclxuIiwKLQkJCSAgICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPm1ldGEudS5za2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAnJXMnXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gY2FuY2VsOwotCX0KLQotCXJldCA9IDA7Ci0JZ290byBvdXQ7Ci0KLWNhbmNlbDoKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCXN0cnVjdCBpd2wzOTQ1X2NtZCAqcWNtZDsKLQotCQkvKiBDYW5jZWwgdGhlIENNRF9XQU5UX1NLQiBmbGFnIGZvciB0aGUgY21kIGluIHRoZQotCQkgKiBUWCBjbWQgcXVldWUuIE90aGVyd2lzZSBpbiBjYXNlIHRoZSBjbWQgY29tZXMKLQkJICogaW4gbGF0ZXIsIGl0IHdpbGwgcG9zc2libHkgc2V0IGFuIGludmFsaWQKLQkJICogYWRkcmVzcyAoY21kLT5tZXRhLnNvdXJjZSkuICovCi0JCXFjbWQgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5jbWRbY21kX2lkeF07Ci0JCXFjbWQtPm1ldGEuZmxhZ3MgJj0gfkNNRF9XQU5UX1NLQjsKLQl9Ci1mYWlsOgotCWlmIChjbWQtPm1ldGEudS5za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5tZXRhLnUuc2tiKTsKLQkJY21kLT5tZXRhLnUuc2tiID0gTlVMTDsKLQl9Ci1vdXQ6Ci0JY2xlYXJfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpCi0JCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsIGNtZCk7Ci19Ci0KLWludCBpd2wzOTQ1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IGlkLAotCQkubGVuID0gbGVuLAotCQkuZGF0YSA9IGRhdGEsCi0JfTsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGl3bDM5NDVfc2VuZF9jbWRfdTMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGlkLCB1MzIgdmFsKQotewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gaWQsCi0JCS5sZW4gPSBzaXplb2YodmFsKSwKLQkJLmRhdGEgPSAmdmFsLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3UzMihwcml2LCBSRVBMWV9TVEFUSVNUSUNTX0NNRCwgMCk7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsIC0gU2V0IHRoZSBwaHltb2RlIGFuZCBjaGFubmVsIHZhbHVlcyBpbiBzdGFnaW5nIFJYT04KLSAqIEBiYW5kOiAyLjQgb3IgNSBHSHogYmFuZAotICogQGNoYW5uZWw6IEFueSBjaGFubmVsIHZhbGlkIGZvciB0aGUgcmVxdWVzdGVkIGJhbmQKLQotICogSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgc3RhZ2luZyBSWE9OLCBwcml2LT5iYW5kIGlzIGFsc28gc2V0LgotICoKLSAqIE5PVEU6ICBEb2VzIG5vdCBjb21taXQgdG8gdGhlIGhhcmR3YXJlOyBpdCBzZXRzIGFwcHJvcHJpYXRlIGJpdCBmaWVsZHMKLSAqIGluIHRoZSBzdGFnaW5nIFJYT04gZmxhZyBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIGJhbmQKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAotCQkJCSAgICB1MTYgY2hhbm5lbCkKLXsKLQlpZiAoIWl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCi0JCQkgICAgICAgY2hhbm5lbCwgYmFuZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpID09IGNoYW5uZWwpICYmCi0JICAgIChwcml2LT5iYW5kID09IGJhbmQpKQotCQlyZXR1cm4gMDsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbm5lbCk7Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19CQU5EXzI0R19NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCi0JcHJpdi0+YmFuZCA9IGJhbmQ7Ci0KLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQgLSB2YWxpZGF0ZSBSWE9OIHN0cnVjdHVyZSBpcyB2YWxpZAotICoKLSAqIE5PVEU6ICBUaGlzIGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIGNhbiBldmVudHVhbGx5Ci0gKiBiZSAjaWZkZWYnZCBvdXQgb25jZSB0aGUgZHJpdmVyIGlzIHN0YWJsZSBhbmQgZm9sa3MgYXJlbid0IGFjdGl2ZWx5Ci0gKiBtYWtpbmcgY2hhbmdlcwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnJ4b24pCi17Ci0JaW50IGVycm9yID0gMDsKLQlpbnQgY291bnRlciA9IDE7Ci0KLQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJgotCQkJCShSWE9OX0ZMR19UR0pfTkFSUk9XX0JBTkRfTVNLIHwKLQkJCQkgUlhPTl9GTEdfUkFEQVJfREVURUNUX01TSykpOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgMjRHIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9IGVsc2UgewotCQllcnJvciB8PSAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPwotCQkJCTAgOiBsZTMyX3RvX2NwdShSWE9OX0ZMR19TSE9SVF9TTE9UX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayA1MiBDQ0sgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfQotCWVycm9yIHw9IChyeG9uLT5ub2RlX2FkZHJbMF0gfCByeG9uLT5ic3NpZF9hZGRyWzBdKSAmIDB4MTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBtYWMgYWRkciAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwotCWVycm9yIHw9ICgoKHJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV82TV9NQVNLKSA9PSAwKSAmJgotCQkgICgocnhvbi0+Y2NrX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfMU1fTUFTSykgPT0gMCkpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGJhc2ljIHJhdGUgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAobGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpID4gMjAwNyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYXNzb2MgaWQgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLIGFuZCBzaG9ydCBzbG90ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgJiBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfAotCQkJUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBUR0cgYW5kIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfRElTX0RJVl9NU0spKQotCQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FOVF9CX01TSyB8Ci0JCQkJUlhPTl9GTEdfQU5UX0FfTVNLKSkgPT0gMCk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYW50ZW5uYSAlZCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJUdW5pbmcgdG8gY2hhbm5lbCAlZFxuIiwKLQkJCSAgICBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0KLQlpZiAoZXJyb3IpIHsKLQkJSVdMX0VSUk9SKCJOb3QgYSB2YWxpZCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIGZpZWxkIHZhbHVlc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKLSAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KLSAqCi0gKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKLSAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAotICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2Z1bGxfcnhvbl9yZXF1aXJlZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KLQlpZiAoIShpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLm5vZGVfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi5ub2RlX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLndsYXBfYnNzaWRfYWRkcikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSAhPSBwcml2LT5hY3RpdmVfcnhvbi5kZXZfdHlwZSkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsICE9IHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYWlyX3Byb3BhZ2F0aW9uICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5haXJfcHJvcGFnYXRpb24pIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uYXNzb2NfaWQgIT0gcHJpdi0+YWN0aXZlX3J4b24uYXNzb2NfaWQpKQotCQlyZXR1cm4gMTsKLQotCS8qIGZsYWdzLCBmaWx0ZXJfZmxhZ3MsIG9mZG1fYmFzaWNfcmF0ZXMsIGFuZCBjY2tfYmFzaWNfcmF0ZXMgY2FuCi0JICogYmUgdXBkYXRlZCB3aXRoIHRoZSBSWE9OX0FTU09DIGNvbW1hbmQgLS0gaG93ZXZlciBvbmx5IHNvbWUKLQkgKiBmbGFnIHRyYW5zaXRpb25zIGFyZSBhbGxvd2VkIHVzaW5nIFJYT05fQVNTT0MgKi8KLQotCS8qIENoZWNrIGlmIHdlIGFyZSBub3Qgc3dpdGNoaW5nIGJhbmRzICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICE9Ci0JICAgIChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykpCi0JCXJldHVybiAxOwotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIHN3aXRjaGluZyBhc3NvY2lhdGlvbiB0b2dnbGUgKi8KLQlpZiAoKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spICE9Ci0JCShwcml2LT5hY3RpdmVfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfUlhPTl9BU1NPQywKIAkJLmxlbiA9IHNpemVvZihyeG9uX2Fzc29jKSwKIAkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCiAJCS5kYXRhID0gJnJ4b25fYXNzb2MsCiAJfTsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uMiA9ICZwcml2LT5hY3RpdmVfcnhvbjsKKwljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjIgPSAmcHJpdi0+YWN0aXZlX3J4b247CiAKIAlpZiAoKHJ4b24xLT5mbGFncyA9PSByeG9uMi0+ZmxhZ3MpICYmCiAJICAgIChyeG9uMS0+ZmlsdGVyX2ZsYWdzID09IHJ4b24yLT5maWx0ZXJfZmxhZ3MpICYmCiAJICAgIChyeG9uMS0+Y2NrX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5jY2tfYmFzaWNfcmF0ZXMpICYmCiAJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05OTQsMTMgKzI2MSwxMyBAQAogCXJ4b25fYXNzb2MuY2NrX2Jhc2ljX3JhdGVzID0gcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlczsKIAlyeG9uX2Fzc29jLnJlc2VydmVkID0gMDsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYT05fQVNTT0MgY29tbWFuZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWE9OX0FTU09DIGNvbW1hbmRcbiIpOwogCQlyYyA9IC1FSU87CiAJfQogCkBAIC0xMDExLDYgKzI3OCw0MyBAQAogfQogCiAvKioKKyAqIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MgLSBHZXQgYW50ZW5uYSBmbGFncyBmb3IgUlhPTiBjb21tYW5kCisgKiBAcHJpdjogZWVwcm9tIGFuZCBhbnRlbm5hIGZpZWxkcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgYW50ZW5uYSBmbGFncworICoKKyAqIHByaXYtPmVlcHJvbTM5ICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAorICogaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEgc3BlY2lmaWVzIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBtb2RlOgorICoKKyAqIElXTF9BTlRFTk5BX0RJVkVSU0lUWSAtIE5JQyBzZWxlY3RzIGJlc3QgYW50ZW5uYSBieSBpdHNlbGYKKyAqIElXTF9BTlRFTk5BX01BSU4gICAgICAtIEZvcmNlIE1BSU4gYW50ZW5uYQorICogSVdMX0FOVEVOTkFfQVVYICAgICAgIC0gRm9yY2UgQVVYIGFudGVubmEKKyAqLworX19sZTMyIGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKworCXN3aXRjaCAoaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEpIHsKKwljYXNlIElXTF9BTlRFTk5BX0RJVkVSU0lUWToKKwkJcmV0dXJuIDA7CisKKwljYXNlIElXTF9BTlRFTk5BX01BSU46CisJCWlmIChlZXByb20tPmFudGVubmFfc3dpdGNoX3R5cGUpCisJCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7CisJCXJldHVybiBSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9BX01TSzsKKworCWNhc2UgSVdMX0FOVEVOTkFfQVVYOgorCQlpZiAoZWVwcm9tLT5hbnRlbm5hX3N3aXRjaF90eXBlKQorCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOworCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7CisJfQorCisJLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KKwlJV0xfRVJSKHByaXYsICJCYWQgYW50ZW5uYSBzZWxlY3RvciB2YWx1ZSAoMHgleClcbiIsCisJCWl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKTsKKworCXJldHVybiAwOwkJLyogImRpdmVyc2l0eSIgaXMgZGVmYXVsdCBpZiBlcnJvciAqLworfQorCisvKioKICAqIGl3bDM5NDVfY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgogICogVGhlIFJYT04gY29tbWFuZCBpbiBzdGFnaW5nX3J4b24gaXMgY29tbWl0dGVkIHRvIHRoZSBoYXJkd2FyZSBhbmQKQEAgLTEwMTgsNDEgKzMyMiw0NCBAQAogICogZnVuY3Rpb24gY29ycmVjdGx5IHRyYW5zaXRpb25zIG91dCBvZiB0aGUgUlhPTl9BU1NPQ19NU0sgc3RhdGUgaWYKICAqIGEgSFcgdHVuZSBpcyByZXF1aXJlZCBiYXNlZCBvbiB0aGUgUlhPTiBzdHJ1Y3R1cmUgY2hhbmdlcy4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIGNhc3QgYXdheSB0aGUgY29uc3QgZm9yIGFjdGl2ZV9yeG9uIGluIHRoaXMgZnVuY3Rpb24gKi8KIAlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqc3RhZ2luZ19yeG9uID0gKHZvaWQgKikmcHJpdi0+c3RhZ2luZ19yeG9uOwogCWludCByYyA9IDA7CisJYm9vbCBuZXdfYXNzb2MgPQorCQkhIShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKTsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC0xOwogCiAJLyogYWx3YXlzIGdldCB0aW1lc3RhbXAgd2l0aCBSeCBmcmFtZSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CisJc3RhZ2luZ19yeG9uLT5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7CiAKIAkvKiBzZWxlY3QgYW50ZW5uYSAqLwotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQorCXN0YWdpbmdfcnhvbi0+ZmxhZ3MgJj0KIAkgICAgfihSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9TRUxfTVNLKTsKLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhwcml2KTsKKwlzdGFnaW5nX3J4b24tPmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CiAKLQlyYyA9IGl3bDM5NDVfY2hlY2tfcnhvbl9jbWQoJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmMgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gIE5vdCBjb21taXR0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIElmIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBhIGZ1bGwgUlhPTiwgd2UgY2FuIHVzZQogCSAqIGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgd2hpY2ggaXMgdXNlZCB0byByZWNvbmZpZ3VyZSBmaWx0ZXIKIAkgKiBhbmQgb3RoZXIgZmxhZ3MgZm9yIHRoZSBjdXJyZW50IHJhZGlvIGNvbmZpZ3VyYXRpb24uICovCi0JaWYgKCFpd2wzOTQ1X2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgeworCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewogCQlyYyA9IGl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICIKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAKLQkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJCW1lbWNweShhY3RpdmVfcnhvbiwgc3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA2MSwxMiArMzY4LDE3IEBACiAJICogYW4gUlhPTl9BU1NPQyBhbmQgdGhlIG5ldyBjb25maWcgd2FudHMgdGhlIGFzc29jaWF0ZWQgbWFzayBlbmFibGVkLAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpICYmCi0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkgewotCQlJV0xfREVCVUdfSU5GTygiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOwogCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAorCQkvKgorCQkgKiByZXNlcnZlZDQgYW5kIDUgY291bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgaXdsY29yZSBjb2RlLgorCQkgKiBMZXQncyBjbGVhciB0aGVtIGJlZm9yZSBwdXNoaW5nIHRvIHRoZSAzOTQ1LgorCQkgKi8KKwkJYWN0aXZlX3J4b24tPnJlc2VydmVkNCA9IDA7CisJCWFjdGl2ZV9yeG9uLT5yZXNlcnZlZDUgPSAwOworCQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKIAkJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLAogCQkJCSAgICAgICZwcml2LT5hY3RpdmVfcnhvbik7CiAKQEAgLTEwNzQsMjkwICszODYsMjEzIEBACiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwogCQlpZiAocmMpIHsKIAkJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCQkJSVdMX0VSUk9SKCJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gY3VycmVudCAiCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gY3VycmVudCAiCiAJCQkJICAiY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlNlbmRpbmcgUlhPTlxuIgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZW5kaW5nIFJYT05cbiIKIAkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKIAkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgogCQkgICAgICAgIiogYnNzaWQgPSAlcE1cbiIsCi0JCSAgICAgICAoKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJgotCQkJIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAiIiA6ICJvdXQiKSwKLQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSwKLQkJICAgICAgIHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyKTsKKwkJICAgICAgIChuZXdfYXNzb2MgPyAiIiA6ICJvdXQiKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KHN0YWdpbmdfcnhvbi0+Y2hhbm5lbCksCisJCSAgICAgICBzdGFnaW5nX3J4b24tPmJzc2lkX2FkZHIpOworCisJLyoKKwkgKiByZXNlcnZlZDQgYW5kIDUgY291bGQgaGF2ZSBiZWVuIGZpbGxlZCBieSB0aGUgaXdsY29yZSBjb2RlLgorCSAqIExldCdzIGNsZWFyIHRoZW0gYmVmb3JlIHB1c2hpbmcgdG8gdGhlIDM5NDUuCisJICovCisJc3RhZ2luZ19yeG9uLT5yZXNlcnZlZDQgPSAwOworCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ1ID0gMDsKKworCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCksCisJCQkgICAgICBzdGFnaW5nX3J4b24pOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgY29uZmlndXJhdGlvbiAoJWQpLlxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJbWVtY3B5KGFjdGl2ZV9yeG9uLCBzdGFnaW5nX3J4b24sIHNpemVvZigqYWN0aXZlX3J4b24pKTsKIAogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKIAkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwotCXJjID0gaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOworCXJjID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcihwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIFR4IHBvd2VyICglZCkuXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgVHggcG93ZXIgKCVkKS5cbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIEFkZCB0aGUgYnJvYWRjYXN0IGFkZHJlc3Mgc28gd2UgY2FuIHNlbmQgYnJvYWRjYXN0IGZyYW1lcyAqLwotCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIDAsIDApID09CisJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDAsIDApID09CiAJICAgIElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGFkZGluZyBCUk9BRENBU1QgYWRkcmVzcyBmb3IgdHJhbnNtaXQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogSWYgd2UgaGF2ZSBzZXQgdGhlIEFTU09DX01TSyBhbmQgd2UgYXJlIGluIEJTUyBtb2RlIHRoZW4KIAkgKiBhZGQgdGhlIElXTF9BUF9JRCB0byB0aGUgc3RhdGlvbiByYXRlIHRhYmxlICovCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJgorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJgogCSAgICAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKLQkJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwgMSwgMCkKKwkJaWYgKGl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkciwKKwkJCQkJMSwgMCkKIAkJICAgID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgdHJhbnNtaXRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCS8qIEluaXQgdGhlIGhhcmR3YXJlJ3MgcmF0ZSBmYWxsYmFjayBvcmRlciBiYXNlZCBvbiB0aGUgYmFuZCAqLwogCXJjID0gaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBIVyByYXRlIHRhYmxlOiAlMDJYXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgSFcgcmF0ZSB0YWJsZTogJTAyWFxuIiwgcmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bDM5NDVfYnRfY21kIGJ0X2NtZCA9IHsKLQkJLmZsYWdzID0gMywKLQkJLmxlYWRfdGltZSA9IDB4QUEsCi0JCS5tYXhfa2lsbCA9IDEsCi0JCS5raWxsX2Fja19tYXNrID0gMCwKLQkJLmtpbGxfY3RzX21hc2sgPSAwLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV9idF9jbWQpLCAmYnRfY21kKTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXM7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9TQ0FOX0FCT1JUX0NNRCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCi0JfTsKLQotCS8qIElmIHRoZXJlIGlzbid0IGEgc2NhbiBhY3RpdmVseSBnb2luZyBvbiBpbiB0aGUgaGFyZHdhcmUKLQkgKiB0aGVuIHdlIGFyZSBpbiBiZXR3ZWVuIHNjYW4gYmFuZHMgYW5kIG5vdCBhY3R1YWxseQotCSAqIGFjdGl2ZWx5IHNjYW5uaW5nLCBzbyBkb24ndCBzZW5kIHRoZSBhYm9ydCBjb21tYW5kICovCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7Ci0JaWYgKHJjKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7Ci0JaWYgKHJlcy0+dS5zdGF0dXMgIT0gQ0FOX0FCT1JUX1NUQVRVUykgewotCQkvKiBUaGUgc2NhbiBhYm9ydCB3aWxsIHJldHVybiAxIGZvciBzdWNjZXNzIG9yCi0JCSAqIDIgZm9yICJmYWlsdXJlIi4gIEEgZmFpbHVyZSBjb25kaXRpb24gY2FuIGJlCi0JCSAqIGR1ZSB0byBzaW1wbHkgbm90IGJlaW5nIGluIGFuIGFjdGl2ZSBzY2FuIHdoaWNoCi0JCSAqIGNhbiBvY2N1ciBpZiB3ZSBzZW5kIHRoZSBzY2FuIGFib3J0IGJlZm9yZSB3ZQotCQkgKiB0aGUgbWljcm9jb2RlIGhhcyBub3RpZmllZCB1cyB0aGF0IGEgc2NhbiBpcwotCQkgKiBjb21wbGV0ZWQuICovCi0JCUlXTF9ERUJVR19JTkZPKCJTQ0FOX0FCT1JUIHJldHVybmVkICVkLlxuIiwgcmVzLT51LnN0YXR1cyk7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfY2FyZF9zdGF0ZV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCXN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAxOwotfQotCi0vKgotICogQ0FSRF9TVEFURV9DTUQKLSAqCi0gKiBVc2U6IFNldHMgdGhlIGRldmljZSdzIGludGVybmFsIGNhcmQgc3RhdGUgdG8gZW5hYmxlLCBkaXNhYmxlLCBvciBoYWx0Ci0gKgotICogV2hlbiBpbiB0aGUgJ2VuYWJsZScgc3RhdGUgdGhlIGNhcmQgb3BlcmF0ZXMgYXMgbm9ybWFsLgotICogV2hlbiBpbiB0aGUgJ2Rpc2FibGUnIHN0YXRlLCB0aGUgY2FyZCBlbnRlcnMgaW50byBhIGxvdyBwb3dlciBtb2RlLgotICogV2hlbiBpbiB0aGUgJ2hhbHQnIHN0YXRlLCB0aGUgY2FyZCBpcyBzaHV0IGRvd24gYW5kIG11c3QgYmUgZnVsbHkKLSAqIHJlc3RhcnRlZCB0byBjb21lIGJhY2sgb24uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGZsYWdzLCB1OCBtZXRhX2ZsYWcpCi17Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9DQVJEX1NUQVRFX0NNRCwKLQkJLmxlbiA9IHNpemVvZih1MzIpLAotCQkuZGF0YSA9ICZmbGFncywKLQkJLm1ldGEuZmxhZ3MgPSBtZXRhX2ZsYWcsCi0JfTsKLQotCWlmIChtZXRhX2ZsYWcgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2NhcmRfc3RhdGVfc3luY19jYWxsYmFjazsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kKHByaXYsICZjbWQpOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7Ci0KLQlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKLQlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcmVzLT5oZHIuZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewotCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyogV2UgZGlkbid0IGNhY2hlIHRoZSBTS0I7IGxldCB0aGUgY2FsbGVyIGZyZWUgaXQgKi8KLQlyZXR1cm4gMTsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJIHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9BRERfU1RBLAotCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQpLAotCQkubWV0YS5mbGFncyA9IGZsYWdzLAotCQkuZGF0YSA9IHN0YSwKLQl9OwotCi0JaWYgKGZsYWdzICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsMzk0NV9hZGRfc3RhX3N5bmNfY2FsbGJhY2s7Ci0JZWxzZQotCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7Ci0KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7Ci0KLQlpZiAocmMgfHwgKGZsYWdzICYgQ01EX0FTWU5DKSkKLQkJcmV0dXJuIHJjOwotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAotCQkJICByZXMtPmhkci5mbGFncyk7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlpZiAocmMgPT0gMCkgewotCQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewotCQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyYyA9IC1FSU87Ci0JCQlJV0xfV0FSTklORygiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfdXBkYXRlX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCiAJCQkJICAgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTE2IGtleV9mbGFncyA9IDA7CisJaW50IHJldDsKIAotCXN3aXRjaCAoa2V5Y29uZi0+YWxnKSB7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfRkxHX0NDTVA7Ci0JCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNigKLQkJCQlrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKLQkJa2V5X2ZsYWdzICY9IH5TVEFfS0VZX0ZMR19JTlZBTElEOwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCWNhc2UgQUxHX1dFUDoKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJa2V5X2ZsYWdzIHw9IChTVEFfS0VZX0ZMR19DQ01QIHwgU1RBX0tFWV9GTEdfTUFQX0tFWV9NU0spOworCWtleV9mbGFncyB8PSBjcHVfdG9fbGUxNihrZXljb25mLT5rZXlpZHggPDwgU1RBX0tFWV9GTEdfS0VZSURfUE9TKTsKKworCWlmIChzdGFfaWQgPT0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCkKKwkJa2V5X2ZsYWdzIHw9IFNUQV9LRVlfTVVMVElDQVNUX01TSzsKKworCWtleWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwlrZXljb25mLT5od19rZXlfaWR4ID0ga2V5Y29uZi0+a2V5aWR4OworCWtleV9mbGFncyAmPSB+U1RBX0tFWV9GTEdfSU5WQUxJRDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKLQltZW1jcHkocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LAorCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5hbGcgPSBrZXljb25mLT5hbGc7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleWxlbiA9IGtleWNvbmYtPmtleWxlbjsKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvLmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOwogCi0JbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXksIGtleWNvbmYtPmtleSwKKwltZW1jcHkocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleSwga2V5Y29uZi0+a2V5LAogCSAgICAgICBrZXljb25mLT5rZXlsZW4pOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKworCWlmICgocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyAmIFNUQV9LRVlfRkxHX0VOQ1JZUFRfTVNLKQorCQkJPT0gU1RBX0tFWV9GTEdfTk9fRU5DKQorCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9CisJCQkJIGl3bF9nZXRfZnJlZV91Y29kZV9rZXlfaW5kZXgocHJpdik7CisJLyogZWxzZSwgd2UgYXJlIG92ZXJyaWRpbmcgYW4gZXhpc3Rpbmcga2V5ID0+IG5vIG5lZWQgdG8gYWxsb2NhdGVkIHJvb20KKwkqIGluIHVDb2RlLiAqLworCisJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CisKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiaHdjcnlwdG86IG1vZGlmeSB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKKworCXJldCA9IGl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgQ01EX0FTWU5DKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiaHdjcnlwdG86IG1vZGlmeSB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICB1OCBzdGFfaWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICB1OCBzdGFfaWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc3RhX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2h3X2tleSkpOwotCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfa2V5aW5mbykpOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2h3X2tleSkpOworCW1lbXNldCgmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LCAwLAorCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfa2V5aW5mbykpOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBTVEFfS0VZX0ZMR19OT19FTkM7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKLQlpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24ocHJpdiwgJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLCAwKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiaHdjcnlwdG86IGNsZWFyIHVjb2RlIHN0YXRpb24ga2V5IGluZm9cbiIpOworCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YSwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfZHluYW1pY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgdTggc3RhX2lkKQoreworCWludCByZXQgPSAwOworCisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IEhXX0tFWV9EWU5BTUlDOworCisJc3dpdGNoIChrZXljb25mLT5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlyZXQgPSBpd2wzOTQ1X3NldF9jY21wX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfVEtJUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfdGtpcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1dFUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfd2VwX2R5bmFtaWNfa2V5X2luZm8ocHJpdiwga2V5Y29uZiwgc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0VSUihwcml2LCJVbmtub3duIGFsZzogJXMgYWxnID0gJWRcbiIsIF9fZnVuY19fLCBrZXljb25mLT5hbGcpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCUlXTF9ERUJVR19XRVAocHJpdiwgIlNldCBkeW5hbWljIGtleTogYWxnPSAlZCBsZW49JWQgaWR4PSVkIHN0YT0lZCByZXQ9JWRcbiIsCisJCSAgICAgIGtleWNvbmYtPmFsZywga2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsCisJCSAgICAgIHN0YV9pZCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9yZW1vdmVfc3RhdGljX2tleShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldF9zdGF0aWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJaWYgKGtleS0+YWxnID09IEFMR19XRVApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCUlXTF9FUlIocHJpdiwgIlN0YXRpYyBrZXkgaW52YWxpZDogYWxnICVkXG4iLCBrZXktPmFsZyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAogCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CkBAIC0xMzY4LDIwICs2MDMsMjAgQEAKIAl9CiAKIAlpZiAocHJpdi0+ZnJhbWVzX2NvdW50KSB7Ci0JCUlXTF9XQVJOSU5HKCIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKKwkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAogCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAJCXByaXYtPmZyYW1lc19jb3VudCA9IDA7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGl3bDM5NDVfZnJhbWUgKml3bDM5NDVfZ2V0X2ZyZWVfZnJhbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqaXdsMzk0NV9nZXRfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewogCQlmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKCpmcmFtZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWZyYW1lKSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOworCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0xMzk0LDE4ICs2MjksMTggQEAKIAlyZXR1cm4gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSwgbGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWUpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2ZyZWVfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWUpCiB7CiAJbWVtc2V0KGZyYW1lLCAwLCBzaXplb2YoKmZyYW1lKSk7CiAJbGlzdF9hZGQoJmZyYW1lLT5saXN0LCAmcHJpdi0+ZnJlZV9mcmFtZXMpOwogfQogCi11bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAordW5zaWduZWQgaW50IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkJaW50IGxlZnQpCiB7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSB8fCAhcHJpdi0+aWJzc19iZWFjb24gfHwKKwlpZiAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8ICFwcml2LT5pYnNzX2JlYWNvbiB8fAogCSAgICAoKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCiAJICAgICAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkpKQogCQlyZXR1cm4gMDsKQEAgLTE0MTgsMzEgKzY1Myw3IEBACiAJcmV0dXJuIHByaXYtPmlic3NfYmVhY29uLT5sZW47CiB9CiAKLXN0YXRpYyB1OCBpd2wzOTQ1X3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JdTggaTsKLQlpbnQgcmF0ZV9tYXNrOwotCi0JLyogU2V0IHJhdGUgbWFzayovCi0JaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKLQkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfQ0NLX1JBVEVTX01BU0s7Ci0JZWxzZQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX1JBVEVTX01BU0s7Ci0KLQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWDsgaSAhPSBJV0xfUkFURV9JTlZBTElEOwotCSAgICAgaSA9IGl3bDM5NDVfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7Ci0JCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKLQkJCXJldHVybiBpd2wzOTQ1X3JhdGVzW2ldLnBsY3A7Ci0JfQotCi0JLyogTm8gdmFsaWQgcmF0ZSB3YXMgZm91bmQuIEFzc2lnbiB0aGUgbG93ZXN0IG9uZSAqLwotCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCi0JCXJldHVybiBJV0xfUkFURV8xTV9QTENQOwotCWVsc2UKLQkJcmV0dXJuIElXTF9SQVRFXzZNX1BMQ1A7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZTsKIAl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKQEAgLTE0NTIsMTYgKzY2MywxNiBAQAogCWZyYW1lID0gaXdsMzk0NV9nZXRfZnJlZV9mcmFtZShwcml2KTsKIAogCWlmICghZnJhbWUpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgogCQkJICAiY29tbWFuZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyYXRlID0gaXdsMzk0NV9yYXRlX2dldF9sb3dlc3RfcGxjcChwcml2KTsKKwlyYXRlID0gaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHByaXYpOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQocHJpdiwgZnJhbWUsIHJhdGUpOwogCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9UWF9CRUFDT04sIGZyYW1lX3NpemUsCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX0JFQUNPTiwgZnJhbWVfc2l6ZSwKIAkJCSAgICAgICZmcmFtZS0+dS5jbWRbMF0pOwogCiAJaXdsMzk0NV9mcmVlX2ZyYW1lKHByaXYsIGZyYW1lKTsKQEAgLTE0NjksNTY2ICs2ODAsMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBFRVBST00gcmVsYXRlZCBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBnZXRfZWVwcm9tX21hYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCAqbWFjKQorc3RhdGljIHZvaWQgaXdsMzk0NV91bnNldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCW1lbWNweShtYWMsIHByaXYtPmVlcHJvbS5tYWNfYWRkcmVzcywgNik7Ci19Ci0KLS8qCi0gKiBDbGVhciB0aGUgT1dORVJfTVNLLCB0byBlc3RhYmxpc2ggZHJpdmVyIChpbnN0ZWFkIG9mIHVDb2RlIHJ1bm5pbmcgb24KLSAqIGVtYmVkZGVkIGNvbnRyb2xsZXIpIGFzIEVFUFJPTSByZWFkZXI7IGVhY2ggcmVhZCBpcyBhIHNlcmllcyBvZiBwdWxzZXMKLSAqIHRvL2Zyb20gdGhlIEVFUFJPTSBjaGlwLCBub3QgYSBzaW5nbGUgZXZlbnQsIHNvIGV2ZW4gcmVhZHMgY291bGQgY29uZmxpY3QKLSAqIGlmIHRoZXkgd2VyZW4ndCBhcmJpdHJhdGVkIGJ5IHNvbWUgb3duZXJzaGlwIG1lY2hhbmlzbS4gIEhlcmUsIHRoZSBkcml2ZXIKLSAqIHNpbXBseSBjbGFpbXMgb3duZXJzaGlwLCB3aGljaCBzaG91bGQgYmUgc2FmZSB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCi0gKiAoaS5lLiBiZWZvcmUgbG9hZGluZyB1Q29kZSEpLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfRUVQUk9NX0dQLCBDU1JfRUVQUk9NX0dQX0lGX09XTkVSX01TSyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9lZXByb21faW5pdCAtIHJlYWQgRUVQUk9NIGNvbnRlbnRzCi0gKgotICogTG9hZCB0aGUgRUVQUk9NIGNvbnRlbnRzIGZyb20gYWRhcHRlciBpbnRvIHByaXYtPmVlcHJvbQotICoKLSAqIE5PVEU6ICBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgbm9uLWRlYnVnIElPIGFjY2VzcyBmdW5jdGlvbnMuCi0gKi8KLWludCBpd2wzOTQ1X2VlcHJvbV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JdTE2ICplID0gKHUxNiAqKSZwcml2LT5lZXByb207Ci0JdTMyIGdwID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCk7Ci0JaW50IHN6ID0gc2l6ZW9mKHByaXYtPmVlcHJvbSk7Ci0JaW50IHJldDsKLQl1MTYgYWRkcjsKLQotCS8qIFRoZSBFRVBST00gc3RydWN0dXJlIGhhcyBzZXZlcmFsIHBhZGRpbmcgYnVmZmVycyB3aXRoaW4gaXQKLQkgKiBhbmQgd2hlbiBhZGRpbmcgbmV3IEVFUFJPTSBtYXBzIGlzIHN1YmplY3QgdG8gcHJvZ3JhbW1lciBlcnJvcnMKLQkgKiB3aGljaCBtYXkgYmUgdmVyeSBkaWZmaWN1bHQgdG8gaWRlbnRpZnkgd2l0aG91dCBleHBsaWNpdGx5Ci0JICogY2hlY2tpbmcgdGhlIHJlc3VsdGluZyBzaXplIG9mIHRoZSBlZXByb20gbWFwLiAqLwotCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+ZWVwcm9tKSAhPSBJV0xfRUVQUk9NX0lNQUdFX1NJWkUpOwotCi0JaWYgKChncCAmIENTUl9FRVBST01fR1BfVkFMSURfTVNLKSA9PSBDU1JfRUVQUk9NX0dQX0JBRF9TSUdOQVRVUkUpIHsKLQkJSVdMX0VSUk9SKCJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KLQlyZXQgPSBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShwcml2KTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBhY3F1aXJlIEVFUFJPTSBzZW1hcGhvcmUuXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogZWVwcm9tIGlzIGFuIGFycmF5IG9mIDE2Yml0IHZhbHVlcyAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzejsgYWRkciArPSBzaXplb2YodTE2KSkgewotCQl1MzIgcjsKLQotCQlfaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9FRVBST01fUkVHLAotCQkJCSBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKLQkJX2l3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9FRVBST01fUkVHLCBDU1JfRUVQUk9NX1JFR19CSVRfQ01EKTsKLQkJcmV0ID0gaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0VFUFJPTV9SRUcsCi0JCQkJCSAgICAgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAotCQkJCQkgICAgICBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyID0gX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7Ci0JCWVbYWRkciAvIDJdID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdW5zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0KQorCWlmIChwcml2LT5zaGFyZWRfdmlydCkKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgICAgcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCwKLQkJCQkgICAgcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfcGh5cyk7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZSAtIGZpbGwgaW4gdGhlIHN1cHBvcnRlZCByYXRlIGluIElFIGZpZWxkCi0gKgotICogcmV0dXJuIDogc2V0IHRoZSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIHJhdGUgaW5zZXJ0IGluIGllCi0gKi8KLXN0YXRpYyB1MTYgaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZSh1OCAqaWUsIHUxNiBzdXBwb3J0ZWRfcmF0ZSwKLQkJCQkgICAgdTE2IGJhc2ljX3JhdGUsIGludCAqbGVmdCkKLXsKLQl1MTYgcmV0X3JhdGVzID0gMCwgYml0OwotCWludCBpOwotCXU4ICpjbnQgPSBpZTsKLQl1OCAqcmF0ZXMgPSBpZSArIDE7Ci0KLQlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKywgYml0IDw8PSAxKSB7Ci0JCWlmIChiaXQgJiBzdXBwb3J0ZWRfcmF0ZSkgewotCQkJcmV0X3JhdGVzIHw9IGJpdDsKLQkJCXJhdGVzWypjbnRdID0gaXdsMzk0NV9yYXRlc1tpXS5pZWVlIHwKLQkJCQkoKGJpdCAmIGJhc2ljX3JhdGUpID8gMHg4MCA6IDB4MDApOwotCQkJKCpjbnQpKys7Ci0JCQkoKmxlZnQpLS07Ci0JCQlpZiAoKCpsZWZ0IDw9IDApIHx8Ci0JCQkgICAgKCpjbnQgPj0gSVdMX1NVUFBPUlRFRF9SQVRFU19JRV9MRU4pKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldF9yYXRlczsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2ZpbGxfcHJvYmVfcmVxIC0gZmlsbCBpbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFuZCBJRSBmb3IgcHJvYmUgcmVxdWVzdAotICovCi1zdGF0aWMgdTE2IGl3bDM5NDVfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCi0JCQkgICAgICBpbnQgbGVmdCkKLXsKLQlpbnQgbGVuID0gMDsKLQl1OCAqcG9zID0gTlVMTDsKLQl1MTYgYWN0aXZlX3JhdGVzLCByZXRfcmF0ZXMsIGNja19yYXRlczsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBwcm9iZSByZXF1ZXN0LAotCSAqIHR3byBtYW5kYXRvcnkgSUVzIGFuZCB0aGUgZGF0YSAqLwotCWxlZnQgLT0gMjQ7Ci0JaWYgKGxlZnQgPCAwKQotCQlyZXR1cm4gMDsKLQlsZW4gKz0gMjQ7Ci0KLQlmcmFtZS0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwotCW1lbWNweShmcmFtZS0+ZGEsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkoZnJhbWUtPnNhLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShmcmFtZS0+YnNzaWQsIGl3bDM5NDVfYnJvYWRjYXN0X2FkZHIsIEVUSF9BTEVOKTsKLQlmcmFtZS0+c2VxX2N0cmwgPSAwOwotCi0JLyogZmlsbCBpbiBvdXIgaW5kaXJlY3QgU1NJRCBJRSAqLwotCS8qIC4uLm5leHQgSUUuLi4gKi8KLQotCWxlZnQgLT0gMjsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCWxlbiArPSAyOwotCXBvcyA9ICYoZnJhbWUtPnUucHJvYmVfcmVxLnZhcmlhYmxlWzBdKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IDA7Ci0KLQkvKiBmaWxsIGluIHN1cHBvcnRlZCByYXRlICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCWxlZnQgLT0gMjsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCi0JLyogLi4uIGZpbGwgaXQgaW4uLi4gKi8KLQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCSpwb3MgPSAwOwotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSBwcml2LT5yYXRlc19tYXNrOwotCWFjdGl2ZV9yYXRlcyA9IHByaXYtPmFjdGl2ZV9yYXRlOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+cmF0ZXNfbWFzayAmIElXTF9CQVNJQ19SQVRFU19NQVNLOwotCi0JY2NrX3JhdGVzID0gSVdMX0NDS19SQVRFU19NQVNLICYgYWN0aXZlX3JhdGVzOwotCXJldF9yYXRlcyA9IGl3bDM5NDVfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBjY2tfcmF0ZXMsCi0JCQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwotCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOwotCi0JcmV0X3JhdGVzID0gaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGFjdGl2ZV9yYXRlcywKLQkJCQkgcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMsICZsZWZ0KTsKLQlhY3RpdmVfcmF0ZXMgJj0gfnJldF9yYXRlczsKLQotCWxlbiArPSAyICsgKnBvczsKLQlwb3MgKz0gKCpwb3MpICsgMTsKLQlpZiAoYWN0aXZlX3JhdGVzID09IDApCi0JCWdvdG8gZmlsbF9lbmQ7Ci0KLQkvKiBmaWxsIGluIHN1cHBvcnRlZCBleHRlbmRlZCByYXRlICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCWxlZnQgLT0gMjsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCi0JKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JKnBvcyA9IDA7Ci0JaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGFjdGl2ZV9yYXRlcywKLQkJCQkgcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMsICZsZWZ0KTsKLQlpZiAoKnBvcyA+IDApCi0JCWxlbiArPSAyICsgKnBvczsKLQotIGZpbGxfZW5kOgotCXJldHVybiAodTE2KWxlbjsKLX0KLQotLyoKLSAqIFFvUyAgc3VwcG9ydAotKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgKnFvcykKLXsKLQotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Fvc3BhcmFtX2NtZCksIHFvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcmVzZXRfcW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JdTE2IGN3X21pbiA9IDE1OwotCXUxNiBjd19tYXggPSAxMDIzOwotCXU4IGFpZnMgPSAyOwotCXU4IGlzX2xlZ2FjeSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDA7Ci0KLQkvKiBRb1MgYWx3YXlzIGFjdGl2ZSBpbiBBUCBhbmQgQURIT0MgbW9kZQotCSAqIEluIFNUQSBtb2RlIHdhaXQgZm9yIGFzc29jaWF0aW9uCi0JICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkgICAgcHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IDE7Ci0JZWxzZQotCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKLQotCi0JLyogY2hlY2sgZm9yIGxlZ2FjeSBtb2RlICovCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgICAocHJpdi0+YWN0aXZlX3JhdGUgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA9PSAwKSB8fAotCSAgICAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID09IDApKSB7Ci0JCWN3X21pbiA9IDMxOwotCQlpc19sZWdhY3kgPSAxOwotCX0KLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlhaWZzID0gMzsKLQotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5jd19taW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5jd19tYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOwotCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1swXS5haWZzbiA9IGFpZnM7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmVkY2FfdHhvcCA9IDA7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLnJlc2VydmVkMSA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSkgewotCQlpID0gMTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSA3OwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0gMDsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0KLQkJaSA9IDI7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQotCQkJY3B1X3RvX2xlMTYoKGN3X21pbiArIDEpIC8gMiAtIDEpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KLQkJCWNwdV90b19sZTE2KGN3X21heCk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDI7Ci0JCWlmIChpc19sZWdhY3kpCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNig2MDE2KTsKLQkJZWxzZQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoMzAwOCk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCi0JCWkgPSAzOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0KLQkJCWNwdV90b19sZTE2KChjd19taW4gKyAxKSAvIDQgLSAxKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9Ci0JCQljcHVfdG9fbGUxNigoY3dfbWF4ICsgMSkgLyAyIC0gMSk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDI7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwotCQlpZiAoaXNfbGVnYWN5KQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoMzI2NCk7Ci0JCWVsc2UKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDE1MDQpOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQotCQkJCWNwdV90b19sZTE2KGN3X21pbik7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KLQkJCQljcHVfdG9fbGUxNihjd19tYXgpOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gYWlmczsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPSAwOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0JCX0KLQl9Ci0JSVdMX0RFQlVHX1FPUygic2V0IFFvUyB0byBkZWZhdWx0IFxuIik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4IGZvcmNlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyA9IDA7Ci0KLQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnF1ZXVlX3JlcXVlc3QgJiYKLQkgICAgIXByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC50eG9wX3JlcXVlc3QpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSzsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSzsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChmb3JjZSB8fCBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9TIGFjdGl2ZSAlZCBcbiIsCi0JCQkgICAgICBwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKTsKLQotCQlpd2wzOTQ1X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHByaXYsCi0JCQkJJihwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0pKTsKLQl9Ci19Ci0KLS8qCi0gKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIhKSBmdW5jdGlvbnMKLSAqLwotI2RlZmluZSBNU0VDX1RPX1VTRUMgMTAyNAotCi0jZGVmaW5lIE5PU0xQIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCkKLSNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLCi0jZGVmaW5lIFNMUF9USU1FT1VUKFQpIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoKFQpICogTVNFQ19UT19VU0VDKQotI2RlZmluZSBTTFBfVkVDKFgwLCBYMSwgWDIsIFgzLCBYNCkge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDApLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgxKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMiksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDMpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFg0KX0KLQotCi0vKiBkZWZhdWx0IHBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgdGFibGUgdmFsdWVzICovCi0vKiBmb3IgVElNICAwLTEwICovCi1zdGF0aWMgc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHJhbmdlXzBbSVdMX1BPV0VSX0FDXSA9IHsKLQl7e05PU0xQLCBTTFBfVElNRU9VVCgwKSwgU0xQX1RJTUVPVVQoMCksIFNMUF9WRUMoMCwgMCwgMCwgMCwgMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoNTAwKSwgU0xQX1ZFQygxLCAyLCAzLCA0LCA0KX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCgzMDApLCBTTFBfVkVDKDIsIDQsIDYsIDcsIDcpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMTAwKSwgU0xQX1ZFQygyLCA2LCA5LCA5LCAxMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoMiwgNywgOSwgOSwgMTApfSwgMX0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDI1KSwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMTApfSwgMX0KLX07Ci0KLS8qIGZvciBUSU0gPiAxMCAqLwotc3RhdGljIHN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8xW0lXTF9QT1dFUl9BQ10gPSB7Ci0Je3tOT1NMUCwgU0xQX1RJTUVPVVQoMCksIFNMUF9USU1FT1VUKDApLCBTTFBfVkVDKDAsIDAsIDAsIDAsIDApfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDUwMCksCi0JCSBTTFBfVkVDKDEsIDIsIDMsIDQsIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDMwMCksCi0JCSBTTFBfVkVDKDIsIDQsIDYsIDcsIDB4RkYpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDUwKSwgU0xQX1RJTUVPVVQoMTAwKSwKLQkJIFNMUF9WRUMoMiwgNiwgOSwgOSwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoMiwgNywgOSwgOSwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVElNRU9VVCgyNSksCi0JCSBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQotfTsKLQotaW50IGl3bDM5NDVfcG93ZXJfaW5pdF9oYW5kbGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwLCBpOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX21nciAqcG93X2RhdGE7Ci0JaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5KSAqIElXTF9QT1dFUl9BQzsKLQl1MTYgcGNpX3BtOwotCi0JSVdMX0RFQlVHX1BPV0VSKCJJbml0aWFsaXplIHBvd2VyIFxuIik7Ci0KLQlwb3dfZGF0YSA9ICYocHJpdi0+cG93ZXJfZGF0YSk7Ci0KLQltZW1zZXQocG93X2RhdGEsIDAsIHNpemVvZigqcG93X2RhdGEpKTsKLQotCXBvd19kYXRhLT5hY3RpdmVfaW5kZXggPSBJV0xfUE9XRVJfUkFOR0VfMDsKLQlwb3dfZGF0YS0+ZHRpbV92YWwgPSAweGZmZmY7Ci0KLQltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXSwgJnJhbmdlXzBbMF0sIHNpemUpOwotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8xWzBdLCAmcmFuZ2VfMVswXSwgc2l6ZSk7Ci0KLQlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9MSU5LX0NUUkwsICZwY2lfcG0pOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gMDsKLQllbHNlIHsKLQkJc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgKmNtZDsKLQotCQlJV0xfREVCVUdfUE9XRVIoImFkanVzdCBwb3dlciBjb21tYW5kIGZsYWdzXG4iKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX0FDOyBpKyspIHsKLQkJCWNtZCA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbaV0uY21kOwotCi0JCQlpZiAocGNpX3BtICYgMHgxKQotCQkJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCQkJZWxzZQotCQkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfdXBkYXRlX3Bvd2VyX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kICpjbWQsIHUzMiBtb2RlKQotewotCWludCByYyA9IDAsIGk7Ci0JdTggc2tpcDsKLQl1MzIgbWF4X3NsZWVwID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgKnJhbmdlOwotCXU4IHBlcmlvZCA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfbWdyICpwb3dfZGF0YTsKLQotCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlwb3dfZGF0YSA9ICYocHJpdi0+cG93ZXJfZGF0YSk7Ci0KLQlpZiAocG93X2RhdGEtPmFjdGl2ZV9pbmRleCA9PSBJV0xfUE9XRVJfUkFOR0VfMCkKLQkJcmFuZ2UgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdOwotCWVsc2UKLQkJcmFuZ2UgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8xWzFdOwotCi0JbWVtY3B5KGNtZCwgJnJhbmdlW21vZGVdLmNtZCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kKSk7Ci0KLSNpZmRlZiBJV0xfTUFDODAyMTFfRElTQUJMRQotCWlmIChwcml2LT5hc3NvY19uZXR3b3JrICE9IE5VTEwpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlwZXJpb2QgPSBwcml2LT5hc3NvY19uZXR3b3JrLT50aW0udGltX3BlcmlvZDsKLQl9Ci0jZW5kaWYJLypJV0xfTUFDODAyMTFfRElTQUJMRSAqLwotCXNraXAgPSByYW5nZVttb2RlXS5ub19kdGltOwotCi0JaWYgKHBlcmlvZCA9PSAwKSB7Ci0JCXBlcmlvZCA9IDE7Ci0JCXNraXAgPSAwOwotCX0KLQotCWlmIChza2lwID09IDApIHsKLQkJbWF4X3NsZWVwID0gcGVyaW9kOwotCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKLQl9IGVsc2UgewotCQlfX2xlMzIgc2xwX2l0cnZsID0gY21kLT5zbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkUgLSAxXTsKLQkJbWF4X3NsZWVwID0gKGxlMzJfdG9fY3B1KHNscF9pdHJ2bCkgLyBwZXJpb2QpICogcGVyaW9kOwotCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfVkVDX1NJWkU7IGkrKykgewotCQlpZiAobGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFtpXSkgPiBtYXhfc2xlZXApCi0JCQljbWQtPnNsZWVwX2ludGVydmFsW2ldID0gY3B1X3RvX2xlMzIobWF4X3NsZWVwKTsKLQl9Ci0KLQlJV0xfREVCVUdfUE9XRVIoIkZsYWdzIHZhbHVlID0gMHglMDhYXG4iLCBjbWQtPmZsYWdzKTsKLQlJV0xfREVCVUdfUE9XRVIoIlR4IHRpbWVvdXQgPSAldVxuIiwgbGUzMl90b19jcHUoY21kLT50eF9kYXRhX3RpbWVvdXQpKTsKLQlJV0xfREVCVUdfUE9XRVIoIlJ4IHRpbWVvdXQgPSAldVxuIiwgbGUzMl90b19jcHUoY21kLT5yeF9kYXRhX3RpbWVvdXQpKTsKLQlJV0xfREVCVUdfUE9XRVIoIlNsZWVwIGludGVydmFsIHZlY3RvciA9IHsgJWQgLCAlZCAsICVkICwgJWQgLCAlZCB9XG4iLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFswXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzFdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMl0pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFszXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzRdKSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3Bvd2VyX21vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIG1vZGUpCi17Ci0JdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKGZpbmFsX21vZGUpOwotCWludCByYzsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0KLQkvKiBJZiBvbiBiYXR0ZXJ5LCBzZXQgdG8gMywKLQkgKiBpZiBwbHVnZ2VkIGludG8gQUMgcG93ZXIsIHNldCB0byBDQU0gKCJjb250aW51b3VzbHkgYXdhcmUgbW9kZSIpLAotCSAqIGVsc2UgdXNlciBsZXZlbCAqLwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWZpbmFsX21vZGUgPSBtb2RlOwotCQlicmVhazsKLQl9Ci0KLQlpd2wzOTQ1X3VwZGF0ZV9wb3dlcl9jbWQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7Ci0KLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFBPV0VSX1RBQkxFX0NNRCwgc2l6ZW9mKGNtZCksICZjbWQpOwotCi0JaWYgKGZpbmFsX21vZGUgPT0gSVdMX1BPV0VSX01PREVfQ0FNKQotCQljbGVhcl9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7Ci0JZWxzZQotCQlzZXRfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc2Nhbl9jYW5jZWwgLSBDYW5jZWwgYW55IGN1cnJlbnRseSBleGVjdXRpbmcgSFcgc2NhbgotICoKLSAqIE5PVEU6IHByaXYtPm11dGV4IGlzIG5vdCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQkJSVdMX0RFQlVHX1NDQU4oIlF1ZXVpbmcgc2NhbiBhYm9ydC5cbiIpOwotCQkJc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFib3J0X3NjYW4pOwotCi0JCX0gZWxzZQotCQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWJvcnQgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwotCi0JCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dCAtIENhbmNlbCBhbnkgY3VycmVudGx5IGV4ZWN1dGluZyBIVyBzY2FuCi0gKiBAbXM6IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHNjYW4gdG8gYWJvcnQKLSAqCi0gKiBOT1RFOiBwcml2LT5tdXRleCBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG1zKQotewotCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKLQlpZiAocmV0ICYmIG1zKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgbm93ICsgbXNlY3NfdG9famlmZmllcyhtcykpICYmCi0JCQkJdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCW1zbGVlcCgxKTsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCX0KLQotCXJldHVybiByZXQ7CisJCQkJICAgIHByaXYtPnNoYXJlZF92aXJ0LAorCQkJCSAgICBwcml2LT5zaGFyZWRfcGh5cyk7CiB9CiAKICNkZWZpbmUgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTAkxMDI0Ci0jZGVmaW5lIElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhBKQorI2RlZmluZSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTAljcHVfdG9fbGUxNigweEEpCiAKIHN0YXRpYyBfX2xlMTYgaXdsMzk0NV9hZGp1c3RfYmVhY29uX2ludGVydmFsKHUxNiBiZWFjb25fdmFsKQogewpAQCAtMjA0Myw3ICs3MDUsNyBAQAogCXJldHVybiBjcHVfdG9fbGUxNihuZXdfdmFsKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTY0IGludGVydmFsX3RtX3VuaXQ7CiAJdTY0IHRzZiwgcmVzdWx0OwpAQCAtMjA1NCwxMyArNzE2LDEwIEBACiAJY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcC5kd1sxXSA9IGNwdV90b19sZTMyKHByaXYtPnRpbWVzdGFtcDEpOwotCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcC5kd1swXSA9IGNwdV90b19sZTMyKHByaXYtPnRpbWVzdGFtcDApOwotCisJcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wID0gY3B1X3RvX2xlNjQocHJpdi0+dGltZXN0YW1wKTsKIAlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTDsKIAotCXRzZiA9IHByaXYtPnRpbWVzdGFtcDE7Ci0JdHNmID0gKCh0c2YgPDwgMzIpIHwgcHJpdi0+dGltZXN0YW1wMCk7CisJdHNmID0gcHJpdi0+dGltZXN0YW1wOwogCiAJYmVhY29uX2ludCA9IHByaXYtPmJlYWNvbl9pbnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMjA5MiwxODMgKzc1MSw0MSBAQAogCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9CiAJICAgIGNwdV90b19sZTMyKCh1MzIpICgodTY0KSBpbnRlcnZhbF90bV91bml0IC0gcmVzdWx0KSk7CiAKLQlJV0xfREVCVUdfQVNTT0MKLQkgICAgKCJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsCisJCSJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCiAJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCksCiAJCWxlMzJfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCksCiAJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93KSk7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gICIKLQkJCSAgICAgICAiUXVldWluZy5cbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlJV0xfREVCVUdfSU5GTygiU3RhcnRpbmcgc2Nhbi4uLlxuIik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9HKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF8yR0haKTsKLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpCi0JCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwotCXNldF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQlwcml2LT5zY2FuX3N0YXJ0ID0gamlmZmllczsKLQlwcml2LT5zY2FuX3Bhc3Nfc3RhcnQgPSBwcml2LT5zY2FuX3N0YXJ0OwotCi0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0KLQlpZiAoaHdfZGVjcnlwdCkKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0JZWxzZQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9Ci0JCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSwotCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JfSBlbHNlIHsKLQkJLyogQ29waWVkIGZyb20gaXdsMzk0NV9iZ19wb3N0X2Fzc29jaWF0ZSgpICovCi0JCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQkJZWxzZQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0FVVE9fREVURUNUX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19DQ0tfTVNLOwotCX0KLX0KLQotLyoKLSAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfQVA7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0VTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfSUJTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0sgfAotCQkJCQkJICBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfU05JRkZFUjsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLIHwKLQkJICAgIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyB8IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0jaWYgMAotCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCi0JICogdGhhdCAqLwotCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotI2VuZGlmCi0KLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsCi0JCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKLQotCWlmICghY2hfaW5mbykKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQkvKgotCSAqIGluIHNvbWUgY2FzZSBBIGNoYW5uZWxzIGFyZSBhbGwgbm9uIElCU1MKLQkgKiBpbiB0aGlzIGNhc2UgZm9yY2UgQi9HIGNoYW5uZWwKLQkgKi8KLQlpZiAoKG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmICEoaXNfY2hhbm5lbF9pYnNzKGNoX2luZm8pKSkKLQkJY2hfaW5mbyA9ICZwcml2LT5jaGFubmVsX2luZm9bMF07Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoX2luZm8tPmNoYW5uZWwpOwotCWlmIChpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSkKLQkJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0JZWxzZQotCQlwcml2LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQotCWl3bDM5NDVfc2V0X2ZsYWdzX2Zvcl9waHltb2RlKHByaXYsIHByaXYtPmJhbmQpOwotCi0JcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NldF9tb2RlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBtb2RlKQorc3RhdGljIGludCBpd2wzOTQ1X3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJaWYgKG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCQljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAotCQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAogCQkJcHJpdi0+YmFuZCwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSk7CiAKIAkJaWYgKCFjaF9pbmZvIHx8ICFpc19jaGFubmVsX2lic3MoY2hfaW5mbykpIHsKLQkJCUlXTF9FUlJPUigiY2hhbm5lbCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAorCQkJSVdMX0VSUihwcml2LCAiY2hhbm5lbCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAogCQkJCSAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi0JaXdsMzk0NV9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIG1vZGUpOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIG1vZGUpOwogCiAJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAogCS8qIGRvbid0IGNvbW1pdCByeG9uIGlmIHJmLWtpbGwgaXMgb24qLwotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKLQlpZiAoaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKKwkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtMjI3Nyw0OSArNzk0LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJCSAgICAgIHN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAorCQkJCSAgICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnLAotCQkJCSAgICAgIGludCBsYXN0X2ZyYWcpCisJCQkJICAgICAgaW50IHN0YV9pZCkKIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKnR4ID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqKWNtZC0+Y21kLnBheWxvYWQ7CiAJc3RydWN0IGl3bDM5NDVfaHdfa2V5ICprZXlpbmZvID0KLQkgICAgJnByaXYtPnN0YXRpb25zW2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4XS5rZXlpbmZvOworCSAgICAmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5rZXlpbmZvOwogCiAJc3dpdGNoIChrZXlpbmZvLT5hbGcpIHsKIAljYXNlIEFMR19DQ01QOgotCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19DQ007Ci0JCW1lbWNweShjbWQtPmNtZC50eC5rZXksIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOworCQl0eC0+c2VjX2N0bCA9IFRYX0NNRF9TRUNfQ0NNOworCQltZW1jcHkodHgtPmtleSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOworCQlJV0xfREVCVUdfVFgocHJpdiwgInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKLSNpZiAwCi0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX1RLSVA7Ci0KLQkJaWYgKGxhc3RfZnJhZykKLQkJCW1lbWNweShjbWQtPmNtZC50eC50a2lwX21pYy5ieXRlLCBza2JfZnJhZy0+dGFpbCAtIDgsCi0JCQkgICAgICAgOCk7Ci0JCWVsc2UKLQkJCW1lbXNldChjbWQtPmNtZC50eC50a2lwX21pYy5ieXRlLCAwLCA4KTsKLSNlbmRpZgogCQlicmVhazsKIAogCWNhc2UgQUxHX1dFUDoKLQkJY21kLT5jbWQudHguc2VjX2N0bCA9IFRYX0NNRF9TRUNfV0VQIHwKKwkJdHgtPnNlY19jdGwgPSBUWF9DTURfU0VDX1dFUCB8CiAJCSAgICAoaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHggJiBUWF9DTURfU0VDX01TSykgPDwgVFhfQ01EX1NFQ19TSElGVDsKIAogCQlpZiAoa2V5aW5mby0+a2V5bGVuID09IDEzKQotCQkJY21kLT5jbWQudHguc2VjX2N0bCB8PSBUWF9DTURfU0VDX0tFWTEyODsKKwkJCXR4LT5zZWNfY3RsIHw9IFRYX0NNRF9TRUNfS0VZMTI4OwogCi0JCW1lbWNweSgmY21kLT5jbWQudHgua2V5WzNdLCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CisJCW1lbWNweSgmdHgtPmtleVszXSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOwogCi0JCUlXTF9ERUJVR19UWCgiQ29uZmlndXJpbmcgcGFja2V0IGZvciBXRVAgZW5jcnlwdGlvbiAiCisJCUlXTF9ERUJVR19UWChwcml2LCAiQ29uZmlndXJpbmcgcGFja2V0IGZvciBXRVAgZW5jcnlwdGlvbiAiCiAJCQkgICAgICJ3aXRoIGtleSAlZFxuIiwgaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXlpbmZvLT5hbGcpOworCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWluZm8tPmFsZyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIzMjcsMTcgKzgzNiwxNyBAQAogLyoKICAqIGhhbmRsZSBidWlsZCBSRVBMWV9UWCBjb21tYW5kIG5vdGlmaWNhdGlvbi4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kLAorc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJICBpbnQgaXNfdW5pY2FzdCwgdTggc3RkX2lkKQorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTggc3RkX2lkKQogeworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKKwlfX2xlMzIgdHhfZmxhZ3MgPSB0eC0+dHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCV9fbGUzMiB0eF9mbGFncyA9IGNtZC0+Y21kLnR4LnR4X2ZsYWdzOwogCXU4IHJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKIAotCWNtZC0+Y21kLnR4LnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOworCXR4LT5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDS19NU0s7CiAJCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpCkBAIC0yMzUwLDEzICs4NTksMTMgQEAKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKIAl9CiAKLQljbWQtPmNtZC50eC5zdGFfaWQgPSBzdGRfaWQ7CisJdHgtPnN0YV9pZCA9IHN0ZF9pZDsKIAlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpKQogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX01PUkVfRlJBR19NU0s7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJY21kLT5jbWQudHgudGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CisJCXR4LT50aWRfdHNwZWMgPSBxY1swXSAmIDB4ZjsKIAkJdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CiAJfSBlbHNlIHsKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKQEAgLTIzNzYsMjUgKzg4NSwyNSBAQAogCXR4X2ZsYWdzICY9IH4oVFhfQ01EX0ZMR19BTlRfU0VMX01TSyk7CiAJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgewogCQlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykgfHwgaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDMpOworCQkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDMpOwogCQllbHNlCi0JCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigyKTsKKwkJCXR4LT50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSBjcHVfdG9fbGUxNigyKTsKIAl9IGVsc2UgewotCQljbWQtPmNtZC50eC50aW1lb3V0LnBtX2ZyYW1lX3RpbWVvdXQgPSAwOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKKwkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZTE2X3RvX2NwdShjbWQtPmNtZC50eC5sZW4pOwogI2VuZGlmCiAJfQogCi0JY21kLT5jbWQudHguZHJpdmVyX3R4b3AgPSAwOwotCWNtZC0+Y21kLnR4LnR4X2ZsYWdzID0gdHhfZmxhZ3M7Ci0JY21kLT5jbWQudHgubmV4dF9mcmFtZV9sZW4gPSAwOworCXR4LT5kcml2ZXJfdHhvcCA9IDA7CisJdHgtPnR4X2ZsYWdzID0gdHhfZmxhZ3M7CisJdHgtPm5leHRfZnJhbWVfbGVuID0gMDsKIH0KIAogLyoqCiAgKiBpd2wzOTQ1X2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQorc3RhdGljIGludCBpd2wzOTQ1X2dldF9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCWludCBzdGFfaWQ7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKQEAgLTI0MDIsNyArOTExLDcgQEAKIAkvKiBJZiB0aGlzIGZyYW1lIGlzIGJyb2FkY2FzdCBvciBtYW5hZ2VtZW50LCB1c2UgYnJvYWRjYXN0IHN0YXRpb24gaWQgKi8KIAlpZiAoKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSAhPSBJRUVFODAyMTFfRlRZUEVfREFUQSkgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAKIAlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKIApAQCAtMjQxNiw3ICs5MjUsNyBAQAogCQlzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJcmV0dXJuIHN0YV9pZDsKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCS8qIElmIHRoaXMgZnJhbWUgaXMgZ29pbmcgb3V0IHRvIGFuIElCU1MgbmV0d29yaywgZmluZCB0aGUgc3RhdGlvbiwKIAkgKiBvciBjcmVhdGUgYSBuZXcgc3RhdGlvbiB0YWJsZSBlbnRyeSAqLwpAQCAtMjQzMSwzOCArOTQwLDM4IEBACiAJCWlmIChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikKIAkJCXJldHVybiBzdGFfaWQ7CiAKLQkJSVdMX0RFQlVHX0RST1AoIlN0YXRpb24gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC4gIgorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCiAJCQkgICAgICAgIkRlZmF1bHRpbmcgdG8gYnJvYWRjYXN0Li4uXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwotCQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9EUk9QLCAodTggKikgaGRyLCBzaXplb2YoKmhkcikpOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJfQogCS8qIElmIHdlIGFyZSBpbiBtb25pdG9yIG1vZGUsIHVzZSBCQ0FTVC4gVGhpcyBpcyByZXF1aXJlZCBmb3IKIAkgKiBwYWNrZXQgaW5qZWN0aW9uLiAqLwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCWRlZmF1bHQ6Ci0JCUlXTF9XQVJOSU5HKCJVbmtub3duIG1vZGUgb2Ygb3BlcmF0aW9uOiAlZFxuIiwgcHJpdi0+aXdfbW9kZSk7Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJSVdMX1dBUk4ocHJpdiwgIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLAorCQkJcHJpdi0+aXdfbW9kZSk7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCX0KIH0KIAogLyoKICAqIHN0YXJ0IFJFUExZX1RYIGNvbW1hbmQgcHJvY2VzcwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdHhfc2tiKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKnRmZDsKLQl1MzIgKmNvbnRyb2xfZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSBOVUxMOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKnR4OworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9IE5VTEw7CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9IE5VTEw7CisJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQgPSBOVUxMOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKm91dF9jbWQgPSBOVUxMOworCWludCB0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl1MTYgbGVuLCBpZHgsIGxlbl9vcmcsIGhkcl9sZW47CiAJdTggaWQ7CiAJdTggdW5pY2FzdDsKQEAgLTI0NzYsMTMgKzk4NSwxMyBAQAogCWludCByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIFJGIEtJTExcbiIpOworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIFJGIEtJTExcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIAogCWlmICgoaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWUgJiAweEZGKSA9PSBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtMjQ5MSwyMSArMTAwMCwyMSBAQAogCiAJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSAmJgogCSAgICAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSAmJiAvKiBwYWNrZXQgaW5qZWN0aW9uICovCi0JICAgICghaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8CisJICAgICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKIAkgICAgICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJiAhcHJpdi0+YXNzb2NfaWQpKSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsMzk0NV9pc19hc3NvY2lhdGVkXG4iKTsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gIWl3bF9pc19hc3NvY2lhdGVkXG4iKTsKIAkJZ290byBkcm9wX3VubG9jazsKIAl9CiAKQEAgLTI1MTYsMjEgKzEwMjUsMjEgQEAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwogCXN0YV9pZCA9IGl3bDM5NDVfZ2V0X3N0YV9pZChwcml2LCBoZHIpOwogCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCiAJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlJV0xfREVCVUdfUkFURSgic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9IHFjWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Ci0JCXNlcV9udW1iZXIgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgJgorCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyICYKIAkJCQlJRUVFODAyMTFfU0NUTF9TRVE7CiAJCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihzZXFfbnVtYmVyKSB8CiAJCQkoaGRyLT5zZXFfY3RybCAmCi0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSk7CisJCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpOwogCQlzZXFfbnVtYmVyICs9IDB4MTA7CiAJfQogCkBAIC0yNTQwLDIwICsxMDQ5LDE3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyogU2V0IHVwIGZpcnN0IGVtcHR5IFRGRCB3aXRoaW4gdGhpcyBxdWV1ZSdzIGNpcmN1bGFyIFRGRCBidWZmZXIgKi8KLQl0ZmQgPSAmdHhxLT5iZFtxLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0JY29udHJvbF9mbGFncyA9ICh1MzIgKikgdGZkOwogCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCAwKTsKIAogCS8qIFNldCB1cCBkcml2ZXIgZGF0YSBmb3IgdGhpcyBURkQgKi8KLQltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4X2luZm8pKTsKKwltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHhfaW5mbykpOwogCXR4cS0+dHhiW3EtPndyaXRlX3B0cl0uc2tiWzBdID0gc2tiOwogCiAJLyogSW5pdCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCi0Jb3V0X2NtZCA9ICZ0eHEtPmNtZFtpZHhdOworCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOworCXR4ID0gKHN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqKW91dF9jbWQtPmNtZC5wYXlsb2FkOwogCW1lbXNldCgmb3V0X2NtZC0+aGRyLCAwLCBzaXplb2Yob3V0X2NtZC0+aGRyKSk7Ci0JbWVtc2V0KCZvdXRfY21kLT5jbWQudHgsIDAsIHNpemVvZihvdXRfY21kLT5jbWQudHgpKTsKKwltZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTsKIAogCS8qCiAJICogU2V0IHVwIHRoZSBUeC1jb21tYW5kIChub3QgTUFDISkgaGVhZGVyLgpAQCAtMjU2Niw3ICsxMDcyLDcgQEAKIAkJCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSkpOwogCiAJLyogQ29weSBNQUMgaGVhZGVyIGZyb20gc2tiIGludG8gY29tbWFuZCBidWZmZXIgKi8KLQltZW1jcHkob3V0X2NtZC0+Y21kLnR4LmhkciwgaGRyLCBoZHJfbGVuKTsKKwltZW1jcHkodHgtPmhkciwgaGRyLCBoZHJfbGVuKTsKIAogCS8qCiAJICogVXNlIHRoZSBmaXJzdCBlbXB0eSBlbnRyeSBpbiB0aGlzIHF1ZXVlJ3MgY29tbWFuZCBidWZmZXIgYXJyYXkKQEAgLTI1NzcsOCArMTA4Myw4IEBACiAJICogb2YgdGhlIE1BQyBoZWFkZXIgKGRldmljZSByZWFkcyBvbiBkd29yZCBib3VuZGFyaWVzKS4KIAkgKiBXZSdsbCB0ZWxsIGRldmljZSBhYm91dCB0aGlzIHBhZGRpbmcgbGF0ZXIuCiAJICovCi0JbGVuID0gcHJpdi0+aHdfc2V0dGluZy50eF9jbWRfbGVuICsKLQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKKwlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhfY21kKSArCisJCQlzaXplb2Yoc3RydWN0IGl3bF9jbWRfaGVhZGVyKSArIGhkcl9sZW47CiAKIAlsZW5fb3JnID0gbGVuOwogCWxlbiA9IChsZW4gKyAzKSAmIH4zOwpAQCAtMjU5MCwxNSArMTA5NiwyMiBAQAogCiAJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIFR4IGNvbW1hbmQncyBoZWFkZXIgKG5vdCBNQUMgaGVhZGVyISksCiAJICogd2l0aGluIGNvbW1hbmQgYnVmZmVyIGFycmF5LiAqLwotCXR4Y21kX3BoeXMgPSB0eHEtPmRtYV9hZGRyX2NtZCArIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9jbWQpICogaWR4ICsKLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaXdsMzk0NV9jbWQsIGhkcik7CisJdHhjbWRfcGh5cyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJICAgIG91dF9jbWQsIHNpemVvZihzdHJ1Y3QgaXdsX2NtZCksCisJCQkJICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBjaV91bm1hcF9hZGRyX3NldCgmb3V0X2NtZC0+bWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7CisJcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSk7CisJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKKwkgKiBmaXJzdCBlbnRyeSAqLworCXR4Y21kX3BoeXMgKz0gb2Zmc2V0b2Yoc3RydWN0IGl3bF9jbWQsIGhkcik7CiAKIAkvKiBBZGQgYnVmZmVyIGNvbnRhaW5pbmcgVHggY29tbWFuZCBhbmQgTUFDKCEpIGhlYWRlciB0byBURkQncwogCSAqIGZpcnN0IGVudHJ5ICovCi0JaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICB0eGNtZF9waHlzLCBsZW4sIDEsIDApOwogCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQotCQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhwcml2LCBpbmZvLCBvdXRfY21kLCBza2IsIDApOworCQlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9od2NyeXB0byhwcml2LCBpbmZvLCBvdXRfY21kLCBza2IsIHN0YV9pZCk7CiAKIAkvKiBTZXQgdXAgVEZEJ3MgMm5kIGVudHJ5IHRvIHBvaW50IGRpcmVjdGx5IHRvIHJlbWFpbmRlciBvZiBza2IsCiAJICogaWYgYW55ICg4MDIuMTEgbnVsbCBmcmFtZXMgaGF2ZSBubyBwYXlsb2FkKS4gKi8KQEAgLTI2MDYsNjAgKzExMTksNTIgQEAKIAlpZiAobGVuKSB7CiAJCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIGhkcl9sZW4sCiAJCQkJCSAgIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWl3bDM5NDVfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIDAsIFUzMl9QQUQobGVuKSk7CiAJfQogCi0JaWYgKCFsZW4pCi0JCS8qIElmIHRoZXJlIGlzIG5vIHBheWxvYWQsIHRoZW4gd2UgdXNlIG9ubHkgb25lIFR4IGJ1ZmZlciAqLwotCQkqY29udHJvbF9mbGFncyA9IFRGRF9DVExfQ09VTlRfU0VUKDEpOwotCWVsc2UKLQkJLyogRWxzZSB1c2UgMiBidWZmZXJzLgotCQkgKiBUZWxsIDM5NDUgYWJvdXQgYW55IHBhZGRpbmcgYWZ0ZXIgTUFDIGhlYWRlciAqLwotCQkqY29udHJvbF9mbGFncyA9IFRGRF9DVExfQ09VTlRfU0VUKDIpIHwKLQkJCVRGRF9DVExfUEFEX1NFVChVMzJfUEFEKGxlbikpOwotCiAJLyogVG90YWwgIyBieXRlcyB0byBiZSB0cmFuc21pdHRlZCAqLwogCWxlbiA9ICh1MTYpc2tiLT5sZW47Ci0Jb3V0X2NtZC0+Y21kLnR4LmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJdHgtPmxlbiA9IGNwdV90b19sZTE2KGxlbik7CiAKIAkvKiBUT0RPIG5lZWQgdGhpcyBmb3IgYnVyc3QgbW9kZSBsYXRlciBvbiAqLwotCWl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgdW5pY2FzdCwgc3RhX2lkKTsKKwlpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhwcml2LCBvdXRfY21kLCBpbmZvLCBoZHIsIHN0YV9pZCk7CiAKIAkvKiBzZXQgaXNfaGNjYSB0byAwOyBpdCBwcm9iYWJseSB3aWxsIG5ldmVyIGJlIGltcGxlbWVudGVkICovCiAJaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShwcml2LCBvdXRfY21kLCBpbmZvLCBoZHIsIHN0YV9pZCwgMCk7CiAKLQlvdXRfY21kLT5jbWQudHgudHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0FfTVNLOwotCW91dF9jbWQtPmNtZC50eC50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQl9NU0s7CisJdHgtPnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9BX01TSzsKKwl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0JfTVNLOwogCiAJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwogCQlpZiAocWMpCi0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOworCQkJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKIAl9IGVsc2UgewogCQl3YWl0X3dyaXRlX3B0ciA9IDE7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAwOwogCX0KIAotCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1RYLCBvdXRfY21kLT5jbWQucGF5bG9hZCwKLQkJCSAgIHNpemVvZihvdXRfY21kLT5jbWQudHgpKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1RYLCB0eCwgc2l6ZW9mKCp0eCkpOwogCi0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsICh1OCAqKW91dF9jbWQtPmNtZC50eC5oZHIsCisJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9UWCwgKHU4ICopdHgtPmhkciwKIAkJCSAgIGllZWU4MDIxMV9oZHJsZW4oZmMpKTsKIAogCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7Ci0JcmMgPSBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwlyYyA9IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQorCWlmICgoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKQogCSAgICAmJiBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKSB7CiAJCWlmICh3YWl0X3dyaXRlX3B0cikgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CisJCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfQogCkBAIC0yNjc0LDE0MiArMTE3OSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlpbnQgaTsKLQotCXNiYW5kID0gaXdsMzk0NV9nZXRfYmFuZChwcml2LCBwcml2LT5iYW5kKTsKLQlpZiAoIXNiYW5kKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKLQotCUlXTF9ERUJVR19SQVRFKCJTZXR0aW5nIHJhdGVzIGZvciAlcyBHSHpcbiIsCi0JCSAgICAgICBzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haID8gIjIuNCIgOiAiNSIpOwotCi0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWlmICgocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVCkgJiYKLQkJICAgICEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJBZGRpbmcgcmF0ZSBpbmRleCAlZCAocGxjcCAlZClcbiIsCi0JCQkJICAgICAgIHJhdGUtPmh3X3ZhbHVlLCBpd2wzOTQ1X3JhdGVzW3JhdGUtPmh3X3ZhbHVlXS5wbGNwKTsKLQkJCXByaXYtPmFjdGl2ZV9yYXRlIHw9ICgxIDw8IHJhdGUtPmh3X3ZhbHVlKTsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAotCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKLQotCS8qCi0JICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKLQkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKLQkgKiBPRkRNCi0JICovCi0JaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgotCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yYWRpb19raWxsX3N3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBkaXNhYmxlX3JhZGlvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISFkaXNhYmxlX3JhZGlvID09IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gJXNcbiIsCi0JCQkgIGRpc2FibGVfcmFkaW8gPyAiT0ZGIiA6ICJPTiIpOwotCi0JaWYgKGRpc2FibGVfcmFkaW8pIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKLQkJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwotCQlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCi0JCQkJICAgIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCWl3bDM5NDVfc2VuZF9jYXJkX3N0YXRlKHByaXYsIENBUkRfU1RBVEVfQ01EX0RJU0FCTEUsIDApOwotCQkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCi0JY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWtlIHVwIHVjb2RlICovCi0JbXNsZWVwKDEwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCWlmICghaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCSAgImRpc2FibGVkIGJ5IEhXIHN3aXRjaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocHJpdi0+aXNfb3BlbikKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICB1MzIgZGVjcnlwdF9yZXMsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKLXsKLQl1MTYgZmMgPQotCSAgICBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhKS0+ZnJhbWVfY29udHJvbCk7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLKQotCQlyZXR1cm47Ci0KLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCi0JCXJldHVybjsKLQotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOwotCXN3aXRjaCAoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgewotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQOgotCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQotCQkgICAgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQykKLQkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQOgotCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QOgotCQlpZiAoKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19ERUNSWVBUX1RZUEVfTVNLKSA9PQotCQkgICAgUlhfUkVTX1NUQVRVU19ERUNSWVBUX09LKSB7Ci0JCQlJV0xfREVCVUdfUlgoImh3IGRlY3J5cHQgc3VjY2Vzc2Z1bGx5ISEhXG4iKTsKLQkJCXN0YXRzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCiAjaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAogI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgpAQCAtMjg2MywxMyArMTIzMiwxMyBAQAogCXJldHVybiBjcHVfdG9fbGUzMihyZXMpOwogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X21lYXN1cmVtZW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgICAgIHU4IHR5cGUpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fY21kIHNwZWN0cnVtOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX3NwZWN0cnVtX2NtZCBzcGVjdHJ1bTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcmVzOworCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQsCiAJCS5kYXRhID0gKHZvaWQgKikmc3BlY3RydW0sCiAJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLApAQCAtMjg3OSw3ICsxMjQ4LDcgQEAKIAlpbnQgc3BlY3RydW1fcmVzcF9zdGF0dXM7CiAJaW50IGR1cmF0aW9uID0gbGUxNl90b19jcHUocGFyYW1zLT5kdXJhdGlvbik7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKQorCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKIAkJYWRkX3RpbWUgPQogCQkgICAgaXdsMzk0NV91c2Vjc190b19iZWFjb25zKAogCQkJbGU2NF90b19jcHUocGFyYW1zLT5zdGFydF90aW1lKSAtIHByaXYtPmxhc3RfdHNmLApAQCAtMjg5NCw3ICsxMjYzLDcgQEAKIAljbWQubGVuID0gc2l6ZW9mKHNwZWN0cnVtKTsKIAlzcGVjdHJ1bS5sZW4gPSBjcHVfdG9fbGUxNihjbWQubGVuIC0gc2l6ZW9mKHNwZWN0cnVtLmxlbikpOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCXNwZWN0cnVtLnN0YXJ0X3RpbWUgPQogCQkgICAgaXdsMzk0NV9hZGRfYmVhY29uX3RpbWUocHJpdi0+bGFzdF9iZWFjb25fdGltZSwKIAkJCQlhZGRfdGltZSwKQEAgLTI5MDksMTMgKzEyNzgsMTMgQEAKIAkJc3BlY3RydW0uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwKIAkJICAgIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOworCXJjID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKIAl9CiAKQEAgLTI5MjMsNyArMTI5Miw3IEBACiAJc3dpdGNoIChzcGVjdHJ1bV9yZXNwX3N0YXR1cykgewogCWNhc2UgMDoJCS8qIENvbW1hbmQgd2lsbCBiZSBoYW5kbGVkICovCiAJCWlmIChyZXMtPnUuc3BlY3RydW0uaWQgIT0gMHhmZikgewotCQkJSVdMX0RFQlVHX0lORk8oIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCiAJCQkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwogCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKIAkJfQpAQCAtMjk0MiwzMCArMTMxMSwyOSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCAqcGFsaXZlOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCAqcGFsaXZlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgKnB3b3JrOwogCiAJcGFsaXZlID0gJnBrdC0+dS5hbGl2ZV9mcmFtZTsKIAotCUlXTF9ERUJVR19JTkZPKCJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCiAJCSAgICAgICAiMHglMDFYIDB4JTAxWFxuIiwKIAkJICAgICAgIHBhbGl2ZS0+aXNfdmFsaWQsIHBhbGl2ZS0+dmVyX3R5cGUsCiAJCSAgICAgICBwYWxpdmUtPnZlcl9zdWJ0eXBlKTsKIAogCWlmIChwYWxpdmUtPnZlcl9zdWJ0eXBlID09IElOSVRJQUxJWkVfU1VCVFlQRSkgewotCQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKLQkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsCi0JCSAgICAgICAmcGt0LT51LmFsaXZlX2ZyYW1lLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCkpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlX2luaXQsICZwa3QtPnUuYWxpdmVfZnJhbWUsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmluaXRfYWxpdmVfc3RhcnQ7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAkJbWVtY3B5KCZwcml2LT5jYXJkX2FsaXZlLCAmcGt0LT51LmFsaXZlX2ZyYW1lLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3ApKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApKTsKIAkJcHdvcmsgPSAmcHJpdi0+YWxpdmVfc3RhcnQ7CiAJCWl3bDM5NDVfZGlzYWJsZV9ldmVudHMocHJpdik7CiAJfQpAQCAtMjk3Niw5NSArMTM0NCwzMSBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCBwd29yaywKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUpKTsKIAllbHNlCi0JCUlXTF9XQVJOSU5HKCJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgInVDb2RlIGRpZCBub3QgcmVzcG9uZCBPSy5cbiIpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FkZF9zdGEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisjZW5kaWYKIAotCUlXTF9ERUJVR19SWCgiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTogMHglMDJYXG4iLCBwa3QtPnUuc3RhdHVzKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6IDB4JTAyWFxuIiwgcGt0LT51LnN0YXR1cyk7CiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQotCUlXTF9FUlJPUigiRXJyb3IgUmVwbHkgdHlwZSAweCUwOFggY21kICVzICgweCUwMlgpICIKLQkJInNlcSAweCUwNFggc2VyIDB4JTA4WFxuIiwKLQkJbGUzMl90b19jcHUocGt0LT51LmVycl9yZXNwLmVycm9yX3R5cGUpLAotCQlnZXRfY21kX3N0cmluZyhwa3QtPnUuZXJyX3Jlc3AuY21kX2lkKSwKLQkJcGt0LT51LmVycl9yZXNwLmNtZF9pZCwKLQkJbGUxNl90b19jcHUocGt0LT51LmVycl9yZXNwLmJhZF9jbWRfc2VxX251bSksCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl9pbmZvKSk7Ci19Ci0KLSNkZWZpbmUgVFhfU1RBVFVTX0VOVFJZKHgpIGNhc2UgVFhfU1RBVFVTX0ZBSUxfICMjIHg6IHJldHVybiAjeAotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2NzYShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0Jc3RydWN0IGl3bDM5NDVfY3NhX25vdGlmaWNhdGlvbiAqY3NhID0gJihwa3QtPnUuY3NhX25vdGlmKTsKLQlJV0xfREVCVUdfMTFIKCJDU0Egbm90aWY6IGNoYW5uZWwgJWQsIHN0YXR1cyAlZFxuIiwKLQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSwgbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpKTsKLQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uICpyZXBvcnQgPSAmKHBrdC0+dS5zcGVjdHJ1bV9ub3RpZik7Ci0KLQlpZiAoIXJlcG9ydC0+c3RhdGUpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF8xMUggfCBJV0xfRExfSU5GTywKLQkJCSAgIlNwZWN0cnVtIE1lYXN1cmUgTm90aWZpY2F0aW9uOiBTdGFydFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoJnByaXYtPm1lYXN1cmVfcmVwb3J0LCByZXBvcnQsIHNpemVvZigqcmVwb3J0KSk7Ci0JcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzIHw9IE1FQVNVUkVNRU5UX1JFQURZOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcG1fc2xlZXBfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWCgic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SQURJTywgcGt0LT51LnJhdywgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIGJlYWNvbl91cGRhdGUpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGJlYWNvbl91cGRhdGUpOwogCXN0cnVjdCBza19idWZmICpiZWFjb247CiAKIAkvKiBQdWxsIHVwZGF0ZWQgQVAgYmVhY29uIGZyb20gbWFjODAyMTEuIHdpbGwgZmFpbCBpZiBub3QgaW4gQVAgbW9kZSAqLwogCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKLQkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzA3OSwxNSArMTM4MywxNSBAQAogCWl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfYmVhY29uX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiAqYmVhY29uID0gJihwa3QtPnUuYmVhY29uX3N0YXR1cyk7CiAJdTggcmF0ZSA9IGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIucmF0ZTsKIAotCUlXTF9ERUJVR19SWCgiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCisJSVdMX0RFQlVHX1JYKHByaXYsICJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKIAkJInRzZiAlZCAlZCByYXRlICVkXG4iLAogCQlsZTMyX3RvX2NwdShiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnN0YXR1cykgJiBUWF9TVEFUVVNfTVNLLAogCQliZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLmZhaWx1cmVfZnJhbWUsCkBAIC0zMTAxLDEzNyArMTQwNSwyMCBAQAogCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmJlYWNvbl91cGRhdGUpOwogfQogCi0vKiBTZXJ2aWNlIHJlc3BvbnNlIHRvIFJFUExZX1NDQU5fQ01EICgweDgwKSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9zY2FuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnJlcV9ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQotCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwotI2VuZGlmCi19Ci0KLS8qIFNlcnZpY2UgU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gKDB4ODIpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKLQlwcml2LT5zY2FuX3N0YXJ0X3RzZiA9IGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KTsKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBzdGFydDogIgotCQkgICAgICAgIiVkIFs4MDIuMTElc10gIgotCQkgICAgICAgIihUU0Y6IDB4JTA4WDolMDhYKSAtICVkIChiZWFjb24gdGltZXIgJXUpXG4iLAotCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCi0JCSAgICAgICBub3RpZi0+YmFuZCA/ICJiZyIgOiAiYSIsCi0JCSAgICAgICBub3RpZi0+dHNmX2hpZ2gsCi0JCSAgICAgICBub3RpZi0+dHNmX2xvdywgbm90aWYtPnN0YXR1cywgbm90aWYtPmJlYWNvbl90aW1lcik7Ci19Ci0KLS8qIFNlcnZpY2UgU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTiAoMHg4MykgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9yZXN1bHRzX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKm5vdGlmID0KLQkgICAgKHN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjaC5yZXM6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCi0JCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9oaWdoKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT5zdGF0aXN0aWNzWzBdKSwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KSAtIHByaXYtPnNjYW5fc3RhcnRfdHNmLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkpOwotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLX0KLQotLyogU2VydmljZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTiAoMHg4NCkgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfc2Nhbl9jb21wbGV0ZV9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gKnNjYW5fbm90aWYgPSAodm9pZCAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKLQkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCi0JCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgSFcgaXMgbm8gbG9uZ2VyIHNjYW5uaW5nICovCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIFRoZSBzY2FuIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGNhbWUgaW4sIHNvIGtpbGwgdGhhdCB0aW1lci4uLiAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCi0JSVdMX0RFQlVHX0lORk8oIlNjYW4gcGFzcyBvbiAlc0dIeiB0b29rICVkbXNcbiIsCi0JCSAgICAgICAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkgPwotCQkJCQkJCSIyLjQiIDogIjUuMiIsCi0JCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwotCQkJCQkocHJpdi0+c2Nhbl9wYXNzX3N0YXJ0LCBqaWZmaWVzKSkpOwotCi0JLyogUmVtb3ZlIHRoaXMgc2Nhbm5lZCBiYW5kIGZyb20gdGhlIGxpc3Qgb2YgcGVuZGluZwotCSAqIGJhbmRzIHRvIHNjYW4sIGJhbmQgRyBwcmVjZWRlcyBBIGluIG9yZGVyIG9mIHNjYW5uaW5nCi0JICogYXMgc2VlbiBpbiBpd2wzOTQ1X2JnX3JlcXVlc3Rfc2NhbiAqLwotCWlmIChwcml2LT5zY2FuX2JhbmRzICYgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JZWxzZSBpZiAocHJpdi0+c2Nhbl9iYW5kcyAmICBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikpCi0JCXByaXYtPnNjYW5fYmFuZHMgJj0gfkJJVChJRUVFODAyMTFfQkFORF81R0haKTsKLQotCS8qIElmIGEgcmVxdWVzdCB0byBhYm9ydCB3YXMgZ2l2ZW4sIG9yIHRoZSBzY2FuIGRpZCBub3Qgc3VjY2VlZAotCSAqIHRoZW4gd2UgcmVzZXQgdGhlIHNjYW4gc3RhdGUgbWFjaGluZSBhbmQgdGVybWluYXRlLAotCSAqIHJlLXF1ZXVpbmcgYW5vdGhlciBzY2FuIGlmIG9uZSBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJBYm9ydGVkIHNjYW4gY29tcGxldGVkLlxuIik7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlcmUgYXJlIG1vcmUgYmFuZHMgb24gdGhpcyBzY2FuIHBhc3MgcmVzY2hlZHVsZSAqLwotCQlpZiAocHJpdi0+c2Nhbl9iYW5kcyA+IDApCi0JCQlnb3RvIHJlc2NoZWR1bGU7Ci0JfQotCi0JcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwotCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7Ci0KLQljbGVhcl9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHRvb2sgJWRtc1xuIiwKLQkJamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMocHJpdi0+c2Nhbl9zdGFydCwgamlmZmllcykpKTsKLQotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCi0JcmV0dXJuOwotCi1yZXNjaGVkdWxlOgotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IGppZmZpZXM7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOwotfQotCiAvKiBIYW5kbGUgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUgdGhhdCBjYXJkJ3MgcG93ZXIgc3RhdGUgaXMgY2hhbmdpbmcKICAqIGR1ZSB0byBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGNyaXRpY2FsIHRlbXBlcmF0dXJlIFJGS0lMTCAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAogCQkJICAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCiAJCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIik7CiAKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAorCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAKIAlpZiAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKQpAQCAtMzI0NSw3ICsxNDMyLDcgQEAKIAllbHNlCiAJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7CiAKLQlpd2wzOTQ1X3NjYW5fY2FuY2VsKHByaXYpOworCWl3bF9zY2FuX2NhbmNlbChwcml2KTsKIAogCWlmICgodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZzdGF0dXMpICE9CiAJICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHx8CkBAIC0zMjY1LDE3ICsxNDUyLDE1IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNoYWlucyBpbnRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaWxlcyBmb3IgdGhlbSB0byBzZXR1cAogICogYW55IGhhcmR3YXJlIHNwZWNpZmljIGhhbmRsZXJzIGFzIHdlbGwuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FMSVZFXSA9IGl3bDM5NDVfcnhfcmVwbHlfYWxpdmU7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfQUREX1NUQV0gPSBpd2wzOTQ1X3J4X3JlcGx5X2FkZF9zdGE7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfRVJST1JdID0gaXdsMzk0NV9yeF9yZXBseV9lcnJvcjsKLQlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9jc2E7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU1BFQ1RSVU1fTUVBU1VSRV9OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmOwotCXByaXYtPnJ4X2hhbmRsZXJzW1BNX1NMRUVQX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3BtX3NsZWVwX25vdGlmOworCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bF9yeF9yZXBseV9lcnJvcjsKKwlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsX3J4X2NzYTsKKwlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsX3J4X3BtX3NsZWVwX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW1BNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDXSA9Ci0JICAgIGl3bDM5NDVfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKKwkgICAgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbQkVBQ09OX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZjsKIAogCS8qCkBAIC0zMjg2LDkwICsxNDcxLDE0IEBACiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfU1RBVElTVElDU19DTURdID0gaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzOwogCXByaXYtPnJ4X2hhbmRsZXJzW1NUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NDQU5fQ01EXSA9IGl3bDM5NDVfcnhfcmVwbHlfc2NhbjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX1NUQVJUX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X3NjYW5fc3RhcnRfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9SRVNVTFRTX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTl0gPQotCSAgICBpd2wzOTQ1X3J4X3NjYW5fY29tcGxldGVfbm90aWY7CisJaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHByaXYpOworCWl3bF9zZXR1cF9yeF9zY2FuX2hhbmRsZXJzKHByaXYpOwogCXByaXYtPnJ4X2hhbmRsZXJzW0NBUkRfU1RBVEVfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZjsKIAogCS8qIFNldCB1cCBoYXJkd2FyZSBzcGVjaWZpYyBSeCBoYW5kbGVycyAqLwogCWl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltIC0gUmVjbGFpbSBDTUQgcXVldWUgZW50cmllcwotICogV2hlbiBGVyBhZHZhbmNlcyAnUicgaW5kZXgsIGFsbCBlbnRyaWVzIGJldHdlZW4gb2xkIGFuZCBuZXcgJ1InIGluZGV4Ci0gKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4KLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlpbnQgbmZyZWVkID0gMDsKLQotCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZChxLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCi0JCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAotCQkJICBpbmRleCwgcS0+bl9iZCwgcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGluZGV4ID0gaXdsX3F1ZXVlX2luY193cmFwKGluZGV4LCBxLT5uX2JkKTsgcS0+cmVhZF9wdHIgIT0gaW5kZXg7Ci0JCXEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewotCQlpZiAobmZyZWVkID4gMSkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGluZGV4LAotCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JCQlicmVhazsKLQkJfQotCQluZnJlZWQrKzsKLQl9Ci19Ci0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZSAtIFB1bGwgdW51c2VkIGJ1ZmZlcnMgb2ZmIHRoZSBxdWV1ZSBhbmQgcmVjbGFpbSB0aGVtCi0gKiBAcnhiOiBSeCBidWZmZXIgdG8gcmVjbGFpbQotICoKLSAqIElmIGFuIFJ4IGJ1ZmZlciBoYXMgYW4gYXN5bmMgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIGl0IHRoZSBjYWxsYmFjawotICogd2lsbCBiZSBleGVjdXRlZC4gIFRoZSBhdHRhY2hlZCBza2IgKGlmIHByZXNlbnQpIHdpbGwgb25seSBiZSBmcmVlZAotICogaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgMQotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQl1MTYgc2VxdWVuY2UgPSBsZTE2X3RvX2NwdShwa3QtPmhkci5zZXF1ZW5jZSk7Ci0JaW50IHR4cV9pZCA9IFNFUV9UT19RVUVVRShzZXF1ZW5jZSk7Ci0JaW50IGluZGV4ID0gU0VRX1RPX0lOREVYKHNlcXVlbmNlKTsKLQlpbnQgaHVnZSA9IHNlcXVlbmNlICYgU0VRX0hVR0VfRlJBTUU7Ci0JaW50IGNtZF9pbmRleDsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZDsKLQotCUJVR19PTih0eHFfaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pOwotCi0JY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7Ci0JY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pbmRleF07Ci0KLQkvKiBJbnB1dCBlcnJvciBjaGVja2luZyBpcyBkb25lIHdoZW4gY29tbWFuZHMgYXJlIGFkZGVkIHRvIHF1ZXVlLiAqLwotCWlmIChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpIHsKLQkJY21kLT5tZXRhLnNvdXJjZS0+dS5za2IgPSByeGItPnNrYjsKLQkJcnhiLT5za2IgPSBOVUxMOwotCX0gZWxzZSBpZiAoY21kLT5tZXRhLnUuY2FsbGJhY2sgJiYKLQkJICAgIWNtZC0+bWV0YS51LmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpKQotCQlyeGItPnNrYiA9IE5VTEw7Ci0KLQlpd2wzOTQ1X2NtZF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwotCi0JaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgewotCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCX0KLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIFJYLUZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIFJ4IHRoZW9yeSBvZiBvcGVyYXRpb24KQEAgLTM0MTcsNyArMTUyNiw2IEBACiAgKgogICogRHJpdmVyIHNlcXVlbmNlOgogICoKLSAqIGl3bDM5NDVfcnhfcXVldWVfYWxsb2MoKSAgIEFsbG9jYXRlcyByeF9mcmVlCiAgKiBpd2wzOTQ1X3J4X3JlcGxlbmlzaCgpICAgICBSZXBsZW5pc2hlcyByeF9mcmVlIGxpc3QgZnJvbSByeF91c2VkLCBhbmQgY2FsbHMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jawogICogaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKCkgTW92ZXMgYXZhaWxhYmxlIGJ1ZmZlcnMgZnJvbSByeF9mcmVlIGludG8gUngKQEAgLTM0MjYsNyArMTUzNCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYXZhaWxhYmxlLCBzY2hlZHVsZXMgaXdsMzk0NV9yeF9yZXBsZW5pc2gKICAqCiAgKiAtLSBlbmFibGUgaW50ZXJydXB0cyAtLQotICogSVNSIC0gaXdsMzk0NV9yeCgpICAgICAgICAgRGV0YWNoIGl3bDM5NDVfcnhfbWVtX2J1ZmZlcnMgZnJvbSBwb29sIHVwIHRvIHRoZQorICogSVNSIC0gaXdsMzk0NV9yeCgpICAgICAgICAgRGV0YWNoIGl3bF9yeF9tZW1fYnVmZmVycyBmcm9tIHBvb2wgdXAgdG8gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEIElOREVYLCBkZXRhY2hpbmcgdGhlIFNLQiBmcm9tIHRoZSBwb29sLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZXMgdGhlIHBhY2tldCBidWZmZXIgZnJvbSBxdWV1ZSB0byByeF91c2VkLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbHMgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrIHRvIHJlZmlsbCBhbnkgZW1wdHkKQEAgLTM0MzYsNzAgKzE1NDQsOSBAQAogICovCiAKIC8qKgotICogaXdsMzk0NV9yeF9xdWV1ZV9zcGFjZSAtIFJldHVybiBudW1iZXIgb2YgZnJlZSBzbG90cyBhdmFpbGFibGUgaW4gcXVldWUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcSkKLXsKLQlpbnQgcyA9IHEtPnJlYWQgLSBxLT53cml0ZTsKLQlpZiAocyA8PSAwKQotCQlzICs9IFJYX1FVRVVFX1NJWkU7Ci0JLyoga2VlcCBzb21lIGJ1ZmZlciB0byBub3QgY29uZnVzZSBmdWxsIGFuZCBlbXB0eSBxdWV1ZSAqLwotCXMgLT0gMjsKLQlpZiAocyA8IDApCi0JCXMgPSAwOwotCXJldHVybiBzOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCi0gKi8KLWludCBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChxLT5uZWVkX3VwZGF0ZSA9PSAwKQotCQlnb3RvIGV4aXRfdW5sb2NrOwotCi0JLyogSWYgcG93ZXItc2F2aW5nIGlzIGluIHVzZSwgbWFrZSBzdXJlIGRldmljZSBpcyBhd2FrZSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewotCQlyZWcgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCQl9Ci0KLQkJcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQkJaWYgKHJjKQotCQkJZ290byBleGl0X3VubG9jazsKLQotCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SU0NTUl9DSE5MMF9XUFRSLAotCQkJCSAgICAgcS0+d3JpdGUgJiB+MHg3KTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCi0JfSBlbHNlCi0JCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLwotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwgcS0+d3JpdGUgJiB+MHg3KTsKLQotCi0JcS0+bmVlZF91cGRhdGUgPSAwOwotCi0gZXhpdF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIgLSBjb252ZXJ0IGEgRE1BIGFkZHJlc3MgdG8gYSB1Q29kZSByZWFkIGJ1ZmZlciBwdHIKICAqLwotc3RhdGljIGlubGluZSBfX2xlMzIgaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgaW5saW5lIF9fbGUzMiBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIGNwdV90b19sZTMyKCh1MzIpZG1hX2FkZHIpOwpAQCAtMzUxNiwyNCArMTU2MywyNCBAQAogICogYWxzbyB1cGRhdGVzIHRoZSBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgZmlybXdhcmUgdG8gcmVmZXJlbmNlIHRoZSBuZXcKICAqIHRhcmdldCBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB3cml0ZSwgcmM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJd3JpdGUgPSByeHEtPndyaXRlICYgfjB4NzsKLQl3aGlsZSAoKGl3bDM5NDVfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CisJd2hpbGUgKChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IDApICYmIChyeHEtPmZyZWVfY291bnQpKSB7CiAJCS8qIEdldCBuZXh0IGZyZWUgUnggYnVmZmVyLCByZW1vdmUgZnJvbSBmcmVlIGxpc3QgKi8KIAkJZWxlbWVudCA9IHJ4cS0+cnhfZnJlZS5uZXh0OwotCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIsIGxpc3QpOworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCiAJCS8qIFBvaW50IHRvIFJ4IGJ1ZmZlciB2aWEgbmV4dCBSQkQgaW4gY2lyY3VsYXIgYnVmZmVyICovCi0JCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIocHJpdiwgcnhiLT5kbWFfYWRkcik7CisJCXJ4cS0+YmRbcnhxLT53cml0ZV0gPSBpd2wzOTQ1X2RtYV9hZGRyMnJiZF9wdHIocHJpdiwgcnhiLT5yZWFsX2RtYV9hZGRyKTsKIAkJcnhxLT5xdWV1ZVtyeHEtPndyaXRlXSA9IHJ4YjsKIAkJcnhxLT53cml0ZSA9IChyeHEtPndyaXRlICsgMSkgJiBSWF9RVUVVRV9NQVNLOwogCQlyeHEtPmZyZWVfY291bnQtLTsKQEAgLTM1NTIsNyArMTU5OSw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJcnhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCQlyYyA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CkBAIC0zNTY4LDI0ICsxNjE1LDI0IEBACiAgKiBBbHNvIHJlc3RvY2sgdGhlIFJ4IHF1ZXVlIHZpYSBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2suCiAgKiBUaGlzIGlzIGNhbGxlZCBhcyBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gKGV4Y2VwdCBmb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uKQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2FsbG9jYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2FsbG9jYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiOworCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcnhxLT5yeF91c2VkKSkgewogCQllbGVtZW50ID0gcnhxLT5yeF91c2VkLm5leHQ7Ci0JCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CisJCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyLCBsaXN0KTsKIAogCQkvKiBBbGxvYyBhIG5ldyByZWNlaXZlIGJ1ZmZlciAqLwogCQlyeGItPnNrYiA9Ci0JCSAgICBhbGxvY19za2IoSVdMX1JYX0JVRl9TSVpFLCBfX0dGUF9OT1dBUk4gfCBHRlBfQVRPTUlDKTsKKwkJICAgIGFsbG9jX3NrYihwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJX19HRlBfTk9XQVJOIHwgR0ZQX0FUT01JQyk7CiAJCWlmICghcnhiLT5za2IpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZfTkFNRQotCQkJCSAgICAgICAiOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKKwkJCQlJV0xfQ1JJVChwcml2LCAiOiBDYW4gbm90IGFsbG9jYXRlIFNLQiBidWZmZXJzXG4iKTsKIAkJCS8qIFdlIGRvbid0IHJlc2NoZWR1bGUgcmVwbGVuaXNoIHdvcmsgaGVyZSAtLSB3ZSB3aWxsCiAJCQkgKiBjYWxsIHRoZSByZXN0b2NrIG1ldGhvZCBhbmQgaWYgaXQgc3RpbGwgbmVlZHMKIAkJCSAqIG1vcmUgYnVmZmVycyBpdCB3aWxsIHNjaGVkdWxlIHJlcGxlbmlzaCAqLwpAQCAtMzYwNCw5ICsxNjUxLDEwIEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCiAJCS8qIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIFJCL1NLQiAqLwotCQlyeGItPmRtYV9hZGRyID0KLQkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+c2tiLT5kYXRhLAotCQkJCSAgIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhiLT5yZWFsX2RtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKKwkJCQkJCXJ4Yi0+c2tiLT5kYXRhLAorCQkJCQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcnhxLT5yeF9mcmVlKTsKIAkJcnhxLT5mcmVlX2NvdW50Kys7CiAJfQpAQCAtMzYxOCw3ICsxNjY2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pd2wzOTQ1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7CiAKIAlpd2wzOTQ1X3J4X2FsbG9jYXRlKHByaXYpOwogCWl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKQEAgLTM2MjcsNyArMTY3NSw3IEBACiAKIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpd2wzOTQ1X3J4X2FsbG9jYXRlKHByaXYpOwpAQCAtMzYzNyw4NCArMTY4NSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi0vKiBBc3N1bWVzIHRoYXQgdGhlIHNrYiBmaWVsZCBvZiB0aGUgYnVmZmVycyBpbiAncG9vbCcgaXMga2VwdCBhY2N1cmF0ZS4KLSAqIElmIGFuIFNLQiBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIFBPT0wgbmVlZHMgdG8gaGF2ZSBpdHMgU0tCIHNldCB0byBOVUxMCi0gKiBUaGlzIGZyZWUgcm91dGluZSB3YWxrcyB0aGUgbGlzdCBvZiBQT09MIGVudHJpZXMgYW5kIGlmIFNLQiBpcyBzZXQgdG8KLSAqIG5vbiBOVUxMIGl0IGlzIHVubWFwcGVkIGFuZCBmcmVlZAotICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfU0laRSArIFJYX0ZSRUVfQlVGRkVSUzsgaSsrKSB7Ci0JCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkJIHJ4cS0+cG9vbFtpXS5kbWFfYWRkciwKLQkJCQkJIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWRldl9rZnJlZV9za2IocnhxLT5wb29sW2ldLnNrYik7Ci0JCX0KLQl9Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAotCQkJICAgIHJ4cS0+ZG1hX2FkZHIpOwotCXJ4cS0+YmQgPSBOVUxMOwotfQotCi1pbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnJ4cS0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfZnJlZSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJ4cS0+cnhfdXNlZCk7Ci0KLQkvKiBBbGxvYyB0aGUgY2lyY3VsYXIgYnVmZmVyIG9mIFJlYWQgQnVmZmVyIERlc2NyaXB0b3JzIChSQkRzKSAqLwotCXJ4cS0+YmQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCAmcnhxLT5kbWFfYWRkcik7Ci0JaWYgKCFyeHEtPmJkKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspCi0JCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0JcnhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwotCS8qIEZpbGwgdGhlIHJ4X3VzZWQgcXVldWUgd2l0aCBfYWxsXyBvZiB0aGUgUnggYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBSWF9GUkVFX0JVRkZFUlMgKyBSWF9RVUVVRV9TSVpFOyBpKyspIHsKLQkJLyogSW4gdGhlIHJlc2V0IGZ1bmN0aW9uLCB0aGVzZSBidWZmZXJzIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkCi0JCSAqIHRvIGFuIFNLQiwgc28gd2UgbmVlZCB0byB1bm1hcCBhbmQgZnJlZSBwb3RlbnRpYWwgc3RvcmFnZSAqLwotCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQkJcnhxLT5wb29sW2ldLnNrYiA9IE5VTEw7Ci0JCX0KLQkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwotCX0KLQotCS8qIFNldCB1cyBzbyB0aGF0IHdlIGhhdmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGFsbCBidWZmZXJzLCBidXQgaGF2ZQotCSAqIG5vdCByZXN0b2NrZWQgdGhlIFJ4IHF1ZXVlIHdpdGggZnJlc2ggYnVmZmVycyAqLwotCXJ4cS0+cmVhZCA9IHJ4cS0+d3JpdGUgPSAwOwotCXJ4cS0+ZnJlZV9jb3VudCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIENvbnZlcnQgbGluZWFyIHNpZ25hbC10by1ub2lzZSByYXRpbyBpbnRvIGRCICovCiBzdGF0aWMgdTggcmF0aW8yZEJbMTAwXSA9IHsKIC8qCSAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICovCkBAIC0zODAwLDExICsxNzcwLDExIEBACiAgKiB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMsIGluY2x1ZGluZyBjb21tYW5kIHJlc3BvbnNlcywKICAqIGZyYW1lLXJlY2VpdmVkIG5vdGlmaWNhdGlvbnMsIGFuZCBvdGhlciBub3RpZmljYXRpb25zLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0OworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJdTMyIHIsIGk7CiAJaW50IHJlY2xhaW07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM4MTMsMTQgKzE3ODMsMTQgQEAKIAogCS8qIHVDb2RlJ3MgcmVhZCBpbmRleCAoc3RvcmVkIGluIHNoYXJlZCBEUkFNKSBpbmRpY2F0ZXMgdGhlIGxhc3QgUngKIAkgKiBidWZmZXIgdGhhdCB0aGUgZHJpdmVyIG1heSBwcm9jZXNzIChsYXN0IGJ1ZmZlciBmaWxsZWQgYnkgdWNvZGUpLiAqLwotCXIgPSBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHByaXYpOworCXIgPSBsZTE2X3RvX2NwdShyeHEtPnJiX3N0dHMtPmNsb3NlZF9yYl9udW0pICYgIDB4MEZGRjsKIAlpID0gcnhxLT5yZWFkOwogCi0JaWYgKGl3bDM5NDVfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCisJaWYgKGl3bF9yeF9xdWV1ZV9zcGFjZShyeHEpID4gKFJYX1FVRVVFX1NJWkUgLyAyKSkKIAkJZmlsbF9yeCA9IDE7CiAJLyogUnggaW50ZXJydXB0LCBidXQgbm90aGluZyBzZW50IGZyb20gdUNvZGUgKi8KIAlpZiAoaSA9PSByKQotCQlJV0xfREVCVUcoSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CiAKIAl3aGlsZSAoaSAhPSByKSB7CiAJCXJ4YiA9IHJ4cS0+cXVldWVbaV07CkBAIC0zODMyLDEwICsxODAyLDEwIEBACiAKIAkJcnhxLT5xdWV1ZVtpXSA9IE5VTEw7CiAKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHByaXYtPnBjaV9kZXYsIHJ4Yi0+ZG1hX2FkZHIsCi0JCQkJCSAgICBJV0xfUlhfQlVGX1NJWkUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPnJlYWxfZG1hX2FkZHIsCisJCQkJCSAgICBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJCS8qIFJlY2xhaW0gYSBjb21tYW5kIGJ1ZmZlciBvbmx5IGlmIHRoaXMgcGFja2V0IGlzIGEgcmVzcG9uc2UKIAkJICogICB0byBhIChkcml2ZXItb3JpZ2luYXRlZCkgY29tbWFuZC4KQEAgLTM4NTEsMTMgKzE4MjEsMTMgQEAKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgogCQkgKiAgIHJ4X2hhbmRsZXJzIHRhYmxlLiAgU2VlIGl3bDM5NDVfc2V0dXBfcnhfaGFuZGxlcnMoKSAqLwogCQlpZiAocHJpdi0+cnhfaGFuZGxlcnNbcGt0LT5oZHIuY21kXSkgewotCQkJSVdMX0RFQlVHKElXTF9ETF9IT1NUX0NPTU1BTkQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAorCQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9IQ01EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKIAkJCQkiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsIGksCiAJCQkJZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKKwkJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfSENNRCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCiAJCQkJInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CkBAIC0zODY1LDEyICsxODM1LDEyIEBACiAKIAkJaWYgKHJlY2xhaW0pIHsKIAkJCS8qIEludm9rZSBhbnkgY2FsbGJhY2tzLCB0cmFuc2ZlciB0aGUgc2tiIHRvIGNhbGxlciwgYW5kCi0JCQkgKiBmaXJlIG9mZiB0aGUgKHBvc3NpYmx5KSBibG9ja2luZyBpd2wzOTQ1X3NlbmRfY21kKCkKKwkJCSAqIGZpcmUgb2ZmIHRoZSAocG9zc2libHkpIGJsb2NraW5nIGl3bF9zZW5kX2NtZCgpCiAJCQkgKiBhcyB3ZSByZWNsYWltIHRoZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSAqLwogCQkJaWYgKHJ4YiAmJiByeGItPnNrYikKLQkJCQlpd2wzOTQ1X3R4X2NtZF9jb21wbGV0ZShwcml2LCByeGIpOworCQkJCWl3bF90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKIAkJCWVsc2UKLQkJCQlJV0xfV0FSTklORygiQ2xhaW0gbnVsbCByeGI/XG4iKTsKKwkJCQlJV0xfV0FSTihwcml2LCAiQ2xhaW0gbnVsbCByeGI/XG4iKTsKIAkJfQogCiAJCS8qIEZvciBub3cgd2UganVzdCBkb24ndCByZS11c2UgYW55dGhpbmcuICBXZSBjYW4gdHdlYWsgdGhpcwpAQCAtMzg4Miw4ICsxODUyLDkgQEAKIAkJCXJ4Yi0+c2tiID0gTlVMTDsKIAkJfQogCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKLQkJCQkgSVdMX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+cmVhbF9kbWFfYWRkciwKKwkJCQlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUsCisJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCQlsaXN0X2FkZF90YWlsKCZyeGItPmxpc3QsICZwcml2LT5yeHEucnhfdXNlZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwpAQCAtMzkwNSwxMDIgKzE4NzYsMTQgQEAKIAlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpCi17Ci0JdTMyIHJlZyA9IDA7Ci0JaW50IHJjID0gMDsKLQlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOwotCi0JaWYgKHR4cS0+bmVlZF91cGRhdGUgPT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JLyogaWYgd2UncmUgdHJ5aW5nIHRvIHNhdmUgcG93ZXIgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpIHsKLQkJLyogd2FrZSB1cCBuaWMgaWYgaXQncyBwb3dlcmVkIGRvd24gLi4uCi0JCSAqIHVDb2RlIHdpbGwgd2FrZSB1cCwgYW5kIGludGVycnVwdCB1cyBhZ2Fpbiwgc28gbmV4dAotCQkgKiB0aW1lIHdlJ2xsIHNraXAgdGhpcyBwYXJ0LiAqLwotCQlyZWcgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwgcmVnKTsKLQkJCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQkvKiByZXN0b3JlIHRoaXMgcXVldWUncyBwYXJhbWV0ZXJzIGluIG5pYyBoYXJkd2FyZS4gKi8KLQkJcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKLQkJCQkgICAgIHR4cS0+cS53cml0ZV9wdHIgfCAodHhxX2lkIDw8IDgpKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQkvKiBlbHNlIG5vdCBpbiBwb3dlci1zYXZlIG1vZGUsIHVDb2RlIHdpbGwgbmV2ZXIgc2xlZXAgd2hlbiB3ZSdyZQotCSAqIHRyeWluZyB0byB0eCAoZHVyaW5nIFJGS0lMTCwgd2UncmUgbm90IHRyeWluZyB0byB0eCkuICovCi0JfSBlbHNlCi0JCWl3bDM5NDVfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOwotCi0JdHhxLT5uZWVkX3VwZGF0ZSA9IDA7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIHZvaWQgaXdsMzk0NV9wcmludF9yeF9jb25maWdfY21kKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uKQotewotCUlXTF9ERUJVR19SQURJTygiUlggQ09ORklHOlxuIik7Ci0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sICh1OCAqKSByeG9uLCBzaXplb2YoKnJ4b24pKTsKLQlJV0xfREVCVUdfUkFESU8oInUxNiBjaGFubmVsOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmxhZ3M6IDB4JTA4WFxuIiwgbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInUzMiBmaWx0ZXJfZmxhZ3M6IDB4JTA4eFxuIiwKLQkJCWxlMzJfdG9fY3B1KHJ4b24tPmZpbHRlcl9mbGFncykpOwotCUlXTF9ERUJVR19SQURJTygidTggZGV2X3R5cGU6IDB4JXhcbiIsIHJ4b24tPmRldl90eXBlKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IG9mZG1fYmFzaWNfcmF0ZXM6IDB4JTAyeFxuIiwKLQkJCXJ4b24tPm9mZG1fYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidTggY2NrX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsIHJ4b24tPmNja19iYXNpY19yYXRlcyk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBub2RlX2FkZHI6ICVwTVxuIiwgcnhvbi0+bm9kZV9hZGRyKTsKLQlJV0xfREVCVUdfUkFESU8oInU4WzZdIGJzc2lkX2FkZHI6ICVwTVxuIiwgcnhvbi0+YnNzaWRfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgYXNzb2NfaWQ6IDB4JXhcbiIsIGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCUlXTF9ERUJVR19JU1IoIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwotCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBDU1JfSU5JX1NFVF9NQVNLKTsKLX0KLQotCiAvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9zeW5jaHJvbml6ZV9pcnEoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIHdhaXQgdG8gbWFrZSBzdXJlIHdlIGZsdXNoIHBlbmRpbmcgdGFza2xldCovCiAJc3luY2hyb25pemVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSk7CiAJdGFza2xldF9raWxsKCZwcml2LT5pcnFfdGFza2xldCk7CiB9CiAKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JY2xlYXJfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBkaXNhYmxlIGludGVycnVwdHMgZnJvbSB1Q29kZS9OSUMgdG8gaG9zdCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOwotCi0JLyogYWNrbm93bGVkZ2UvY2xlYXIvcmVzZXQgYW55IGludGVycnVwdHMgc3RpbGwgcGVuZGluZwotCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4ZmZmZmZmZmYpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JSVdMX0RFQlVHX0lTUigiRGlzYWJsZWQgaW50ZXJydXB0c1xuIik7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKIHsKIAlzd2l0Y2ggKGkpIHsKQEAgLTQwMjQsNyArMTkwNyw3IEBACiAjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKICNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBpOwogCXUzMiBkZXNjLCB0aW1lLCBjb3VudCwgYmFzZSwgZGF0YTE7CkBAIC00MDM0LDQ5ICsxOTE3LDUwIEBACiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiTm90IHZhbGlkIGVycm9yIGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWNvdW50ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAKIAlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlJPUigiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsIHByaXYtPnN0YXR1cywgY291bnQpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKKwkJSVdMX0VSUihwcml2LCAiU3RhdHVzOiAweCUwOGxYLCBjb3VudDogJWRcbiIsCisJCQlwcml2LT5zdGF0dXMsIGNvdW50KTsKIAl9CiAKLQlJV0xfRVJST1IoIkRlc2MgICAgICAgVGltZSAgICAgICBhc3J0UEMgIGJsaW5rMiAiCisJSVdMX0VSUihwcml2LCAiRGVzYyAgICAgICBUaW1lICAgICAgIGFzcnRQQyAgYmxpbmsyICIKIAkJICAiaWxpbmsxICBubWlQQyAgIExpbmVcbiIpOwogCWZvciAoaSA9IEVSUk9SX1NUQVJUX09GRlNFVDsKIAkgICAgIGkgPCAoY291bnQgKiBFUlJPUl9FTEVNX1NJWkUpICsgRVJST1JfU1RBUlRfT0ZGU0VUOwogCSAgICAgaSArPSBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJZGVzYyA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSk7CisJCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSk7CiAJCXRpbWUgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKIAkJYmxpbmsxID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDIgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDIgKiBzaXplb2YodTMyKSk7CiAJCWJsaW5rMiA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAzICogc2l6ZW9mKHUzMikpOwogCQlpbGluazEgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKIAkJaWxpbmsyID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDUgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDUgKiBzaXplb2YodTMyKSk7CiAJCWRhdGExID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDYgKiBzaXplb2YodTMyKSk7CiAKLQkJSVdMX0VSUk9SCi0JCSAgICAoIiUtMTNzICgjJWQpICUwMTB1IDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WCAldVxuXG4iLAotCQkgICAgIGRlc2NfbG9va3VwKGRlc2MpLCBkZXNjLCB0aW1lLCBibGluazEsIGJsaW5rMiwKLQkJICAgICBpbGluazEsIGlsaW5rMiwgZGF0YTEpOworCQlJV0xfRVJSKHByaXYsCisJCQkiJS0xM3MgKCMlZCkgJTAxMHUgMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYICV1XG5cbiIsCisJCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgYmxpbmsxLCBibGluazIsCisJCQlpbGluazEsIGlsaW5rMiwgZGF0YTEpOwogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIH0KIApAQCAtNDA4NSw5ICsxOTY5LDkgQEAKIC8qKgogICogaXdsMzk0NV9wcmludF9ldmVudF9sb2cgLSBEdW1wIGVycm9yIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqCi0gKiBOT1RFOiBNdXN0IGJlIGNhbGxlZCB3aXRoIGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKCkgYWxyZWFkeSBvYnRhaW5lZCEKKyAqIE5PVEU6IE11c3QgYmUgY2FsbGVkIHdpdGggaXdsX2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCiAJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQogewogCXUzMiBpOwpAQCAtNDExMSwyMSArMTk5NSwyMiBAQAogCS8qICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KIAkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCXRpbWUgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJaWYgKG1vZGUgPT0gMCkKLQkJCUlXTF9FUlJPUigiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7IC8qIGRhdGEsIGV2ICovCi0JCWVsc2UgewotCQkJZGF0YSA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlpZiAobW9kZSA9PSAwKSB7CisJCQkvKiBkYXRhLCBldiAqLworCQkJSVdMX0VSUihwcml2LCAiMHglMDh4XHQlMDR1XG4iLCB0aW1lLCBldik7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOworCQkJSVdMX0VSUihwcml2LCAiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1MzIgYmFzZTsgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgZXZlbnQgbG9nIGhlYWRlciAqLwpAQCAtNDEzNywzMiArMjAyMiwzMiBAQAogCiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJaWYgKCFpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKLQkJSVdMX0VSUk9SKCJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCi0JY2FwYWNpdHkgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7Ci0JbW9kZSA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOwotCW51bV93cmFwcyA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOwotCW5leHRfZW50cnkgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgzICogc2l6ZW9mKHUzMikpKTsKKwljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOworCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CisJbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CiAKIAlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OwogCiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJcmV0dXJuOwogCX0KIAotCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKKwlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAogCQkgIHNpemUsIG51bV93cmFwcyk7CiAKIAkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCkBAIC00MTc0LDQ4ICsyMDU5LDEwIEBACiAJLyogKHRoZW4vZWxzZSkgc3RhcnQgYXQgdG9wIG9mIGxvZyAqLwogCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsMzk0NV9kb3duICovCi0Jc2V0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOwotCi0JLyogQ2FuY2VsIGN1cnJlbnRseSBxdWV1ZWQgY29tbWFuZC4gKi8KLQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7Ci0JCWl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCQlpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsMzk0NV9wcmludF9yeF9jb25maWdfY21kKCZwcml2LT5zdGFnaW5nX3J4b24pOwotCX0KLSNlbmRpZgotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwotCi0JLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KLQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX0ZXX0VSUk9SUywKLQkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKLQotCQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOwotCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7Ci0JCX0KLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQyMzIsMTIgKzIwNzksMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBpbnRhLCBoYW5kbGVkID0gMDsKIAl1MzIgaW50YV9maDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAl1MzIgaW50YV9tYXNrOwogI2VuZGlmCiAKQEAgLTQyNDYsMjAgKzIwOTMsMjAgQEAKIAkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyB1Q29kZSBpbnRlcnJ1cHRzLgogCSAqIE5vdGU6ICBTb21lIGJpdHMgaW4gQ1NSX0lOVCBhcmUgIk9SIiBvZiBiaXRzIGluIENTUl9GSF9JTlRfU1RBVFVTLAogCSAqICBhbmQgd2lsbCBjbGVhciBvbmx5IHdoZW4gQ1NSX0ZIX0lOVF9TVEFUVVMgZ2V0cyBjbGVhcmVkLiAqLwotCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgaW50YSk7CisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgaW50YSk7CiAKIAkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyBmbG93LWhhbmRsZXIgKERNQSkgaW50ZXJydXB0cy4KIAkgKiBBbnkgbmV3IGludGVycnVwdHMgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhpcywgZWl0aGVyIHdoaWxlIHdlJ3JlCiAJICogaW4gdGhpcyB0YXNrbGV0LCBvciBsYXRlciwgd2lsbCBzaG93IHVwIGluIG5leHQgSVNSL3Rhc2tsZXQuICovCi0JaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOworCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgaW50YV9maCk7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCQlpbnRhX21hc2sgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwotCQlJV0xfREVCVUdfSVNSKCJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKKwkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKIAkJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CiAJfQogI2VuZGlmCkBAIC00Mjc1LDEyICsyMTIyLDEyIEBACiAKIAkvKiBOb3cgc2VydmljZSBhbGwgaW50ZXJydXB0IGJpdHMgZGlzY292ZXJlZCBhYm92ZS4gKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0hXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOwogCiAJCS8qIFRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAotCQlpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IocHJpdik7CisJCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwogCiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfSFdfRVJSOwogCkBAIC00Mjg5LDE2ICsyMTM2LDE2IEBACiAJCXJldHVybjsKIAl9CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkKLQkJCUlXTF9ERUJVR19JU1IoIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCisJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgogCQkJCSAgICAgICJ0aGUgZnJhbWUvZnJhbWVzLlxuIik7CiAKIAkJLyogQWxpdmUgbm90aWZpY2F0aW9uIHZpYSBSeCBpbnRlcnJ1cHQgd2lsbCBkbyB0aGUgcmVhbCB3b3JrICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfQUxJVkUpCi0JCQlJV0xfREVCVUdfSVNSKCJBbGl2ZSBpbnRlcnJ1cHRcbiIpOworCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiQWxpdmUgaW50ZXJydXB0XG4iKTsKIAl9CiAjZW5kaWYKIAkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwpAQCAtNDMwNiwyMiArMjE1MywyMiBAQAogCiAJLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcgMHglWC5cbiIsCi0JCQkgIGludGEpOwotCQlpd2wzOTQ1X2lycV9oYW5kbGVfZXJyb3IocHJpdik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIgorCQkJIlJlc3RhcnRpbmcgMHglWC5cbiIsIGludGEpOworCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7CiAJfQogCiAJLyogdUNvZGUgd2FrZXMgdXAgYWZ0ZXIgcG93ZXItZG93biBzbGVlcCAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IoIldha2V1cCBpbnRlcnJ1cHRcbiIpOwotCQlpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsyXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzNdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNF0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs1XSk7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOworCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMF0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsxXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzJdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbM10pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs0XSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzVdKTsKIAogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1dBS0VVUDsKIAl9CkBAIC00MzM1LDQzMiArMjE4Miw2MyBAQAogCX0KIAogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJSVdMX0RFQlVHX0lTUigiVHggaW50ZXJydXB0XG4iKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiVHggaW50ZXJydXB0XG4iKTsKIAotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsICgxIDw8IDYpKTsKLQkJaWYgKCFpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LAotCQkJCQkgICAgIEZIX1RDU1JfQ1JFRElUCi0JCQkJCSAgICAgKEFMTV9GSF9TUlZDX0NITkwpLCAweDApOwotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAoMSA8PCA2KSk7CisJCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfVENTUl9DUkVESVQKKwkJCQkJICAgICAoRkgzOV9TUlZDX0NITkwpLCAweDApOworCQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAkJfQogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0ZIX1RYOwogCX0KIAogCWlmIChpbnRhICYgfmhhbmRsZWQpCi0JCUlXTF9FUlJPUigiVW5oYW5kbGVkIElOVEEgYml0cyAweCUwOHhcbiIsIGludGEgJiB+aGFuZGxlZCk7CisJCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwogCiAJaWYgKGludGEgJiB+Q1NSX0lOSV9TRVRfTUFTSykgewotCQlJV0xfV0FSTklORygiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCisJCUlXTF9XQVJOKHByaXYsICJEaXNhYmxlZCBJTlRBIGJpdHMgMHglMDh4IHdlcmUgcGVuZGluZ1xuIiwKIAkJCSBpbnRhICYgfkNTUl9JTklfU0VUX01BU0spOwotCQlJV0xfV0FSTklORygiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOworCQlJV0xfV0FSTihwcml2LCAiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOwogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7Ci0JCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQkJaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQkJSVdMX0RFQlVHX0lTUigiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKKwkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2wzOTQ1X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkYXRhOwotCXUzMiBpbnRhLCBpbnRhX21hc2s7Ci0JdTMyIGludGFfZmg7Ci0JaWYgKCFwcml2KQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwotCi0JLyogRGlzYWJsZSAoYnV0IGRvbid0IGNsZWFyISkgaW50ZXJydXB0cyBoZXJlIHRvIGF2b2lkCi0JICogICAgYmFjay10by1iYWNrIElTUnMgYW5kIHNwb3JhZGljIGludGVycnVwdHMgZnJvbSBvdXIgTklDLgotCSAqIElmIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlcnZpY2UsIHRoZSB0YXNrbGV0IHdpbGwgcmUtZW5hYmxlIGludHMuCi0JICogSWYgd2UgKmRvbid0KiBoYXZlIHNvbWV0aGluZywgd2UnbGwgcmUtZW5hYmxlIGJlZm9yZSBsZWF2aW5nIGhlcmUuICovCi0JaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfSU5UKTsKLQlpbnRhX2ZoID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCi0JLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCi0JICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKLQkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLwotCWlmICghaW50YSAmJiAhaW50YV9maCkgewotCQlJV0xfREVCVUdfSVNSKCJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7Ci0JCWdvdG8gbm9uZTsKLQl9Ci0KLQlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKLQkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQgKi8KLQkJSVdMX1dBUk5JTkcoIkhBUkRXQVJFIEdPTkU/PyBJTlRBID09IDB4JTA4eFxuIiwgaW50YSk7Ci0JCWdvdG8gdW5wbHVnZ2VkOwotCX0KLQotCUlXTF9ERUJVR19JU1IoIklTUiBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKLQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKLQotCWludGEgJj0gfkNTUl9JTlRfQklUX1NDRDsKLQotCS8qIGl3bDM5NDVfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KLQlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLXVucGx1Z2dlZDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLSBub25lOgotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFRVBST00gQkFORFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoZSBpd2wzOTQ1X2VlcHJvbV9iYW5kIGRlZmluaXRpb25zIGJlbG93IHByb3ZpZGUgdGhlIG1hcHBpbmcgZnJvbSB0aGUKLSAqIEVFUFJPTSBjb250ZW50cyB0byB0aGUgc3BlY2lmaWMgY2hhbm5lbCBudW1iZXIgc3VwcG9ydGVkIGZvciBlYWNoCi0gKiBiYW5kLgotICoKLSAqIEZvciBleGFtcGxlLCBpd2wzOTQ1X3ByaXYtPmVlcHJvbS5iYW5kXzNfY2hhbm5lbHNbNF0gZnJvbSB0aGUgYmFuZF8zCi0gKiBkZWZpbml0aW9uIGJlbG93IG1hcHMgdG8gcGh5c2ljYWwgY2hhbm5lbCA0MiBpbiB0aGUgNS4yR0h6IHNwZWN0cnVtLgotICogVGhlIHNwZWNpZmljIGdlb2dyYXBoeSBhbmQgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoYXQgY2hhbm5lbAotICogaXMgY29udGFpbmVkIGluIHRoZSBlZXByb20gbWFwIGl0c2VsZi4KLSAqCi0gKiBEdXJpbmcgaW5pdCwgd2UgY29weSB0aGUgZWVwcm9tIGluZm9ybWF0aW9uIGFuZCBjaGFubmVsIG1hcAotICogaW5mb3JtYXRpb24gaW50byBwcml2LT5jaGFubmVsX2luZm9fMjQvNTIgYW5kIHByaXYtPmNoYW5uZWxfbWFwXzI0LzUyCi0gKgotICogY2hhbm5lbF9tYXBfMjQvNTIgcHJvdmlkZXMgdGhlIGluZGV4IGluIHRoZSBjaGFubmVsX2luZm8gYXJyYXkgZm9yIGEKLSAqIGdpdmVuIGNoYW5uZWwuICBXZSBoYXZlIHRvIGhhdmUgdHdvIHNlcGFyYXRlIG1hcHMgYXMgdGhlcmUgaXMgY2hhbm5lbAotICogb3ZlcmxhcCB3aXRoIHRoZSAyLjRHSHogYW5kIDUuMkdIeiBzcGVjdHJ1bSBhcyBzZWVuIGluIGJhbmRfMSBhbmQKLSAqIGJhbmRfMgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZiBzdG9yZWQgaW4gdGhlIGNoYW5uZWxfbWFwIGluZGljYXRlcyB0aGF0IHRoZSBjaGFubmVsCi0gKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhdCBhbGwuCi0gKgotICogQSB2YWx1ZSBvZiAweGZlIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbCBpcyBub3QKLSAqIHZhbGlkIGZvciBUeCB3aXRoIHRoZSBjdXJyZW50IGhhcmR3YXJlLiAgVGhpcyBtZWFucyB0aGF0Ci0gKiB3aGlsZSB0aGUgc3lzdGVtIGNhbiB0dW5lIGFuZCByZWNlaXZlIG9uIGEgZ2l2ZW4gY2hhbm5lbCwgaXQgbWF5IG5vdAotICogYmUgYWJsZSB0byBhc3NvY2lhdGUgb3IgdHJhbnNtaXQgYW55IGZyYW1lcyBvbiB0aGF0Ci0gKiBjaGFubmVsLiAgVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBjaGFubmVsIGluZm9ybWF0aW9uIGZvciB0aGF0Ci0gKiBlbnRyeS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAyLjQgR0h6ICovCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8xWzE0XSA9IHsKLQkxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKLX07Ci0KLS8qIDUuMiBHSHogYmFuZHMgKi8KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzJbXSA9IHsJLyogNDkxNS01MDgwTUh6ICovCi0JMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsIDcsIDgsIDExLCAxMiwgMTYKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzNbXSA9IHsJLyogNTE3MC01MzIwTUh6ICovCi0JMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfNFtdID0gewkvKiA1NTAwLTU3MDBNSHogKi8KLQkxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfNVtdID0gewkvKiA1NzI1LTU4MjVNSHogKi8KLQkxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1Ci19OwotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfYmFuZF9yZWZlcmVuY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGJhbmQsCi0JCQkJICAgIGludCAqZWVwcm9tX2NoX2NvdW50LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbAotCQkJCSAgICAqKmVlcHJvbV9jaF9pbmZvLAotCQkJCSAgICBjb25zdCB1OCAqKmVlcHJvbV9jaF9pbmRleCkKLXsKLQlzd2l0Y2ggKGJhbmQpIHsKLQljYXNlIDE6CQkvKiAyLjRHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8xX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8xOwotCQlicmVhazsKLQljYXNlIDI6CQkvKiA0LjlHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzIpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8yX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8yOwotCQlicmVhazsKLQljYXNlIDM6CQkvKiA1LjJHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzMpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF8zOwotCQlicmVhazsKLQljYXNlIDQ6CQkvKiA1LjVHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzQpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF80X2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF80OwotCQlicmVhazsKLQljYXNlIDU6CQkvKiA1LjdHSHogYmFuZCAqLwotCQkqZWVwcm9tX2NoX2NvdW50ID0gQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzUpOwotCQkqZWVwcm9tX2NoX2luZm8gPSBwcml2LT5lZXByb20uYmFuZF81X2NoYW5uZWxzOwotCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsMzk0NV9lZXByb21fYmFuZF81OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8gLSBGaW5kIGRyaXZlcidzIHByaXZhdGUgY2hhbm5lbCBpbmZvCi0gKgotICogQmFzZWQgb24gYmFuZCBhbmQgY2hhbm5lbCBudW1iZXIuCi0gKi8KLWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCXN3aXRjaCAoYmFuZCkgewotCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJZm9yIChpID0gMTQ7IGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKLQkJCWlmIChwcml2LT5jaGFubmVsX2luZm9baV0uY2hhbm5lbCA9PSBjaGFubmVsKQotCQkJCXJldHVybiAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQlpZiAoY2hhbm5lbCA+PSAxICYmIGNoYW5uZWwgPD0gMTQpCi0JCQlyZXR1cm4gJnByaXYtPmNoYW5uZWxfaW5mb1tjaGFubmVsIC0gMV07Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX05VTV9CQU5EUzoKLQkJV0FSTl9PTigxKTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotI2RlZmluZSBDSEVDS19BTkRfUFJJTlQoeCkgKChlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF8jI3gpIFwKLQkJCSAgICA/ICMgeCAiICIgOiAiIikKLQotLyoqCi0gKiBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAgLSBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgYWxsIHBvc3NpYmxlIGNoYW5uZWxzCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaW50IGVlcHJvbV9jaF9jb3VudCA9IDA7Ci0JY29uc3QgdTggKmVlcHJvbV9jaF9pbmRleCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaF9pbmZvID0gTlVMTDsKLQlpbnQgYmFuZCwgY2g7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHByaXYtPmVlcHJvbS52ZXJzaW9uIDwgMHgyZikgewotCQlJV0xfV0FSTklORygiVW5zdXBwb3J0ZWQgRUVQUk9NIHZlcnNpb246IDB4JTA0WFxuIiwKLQkJCSAgICBwcml2LT5lZXByb20udmVyc2lvbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKLQotCXByaXYtPmNoYW5uZWxfY291bnQgPQotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSkgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMikgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMykgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfNCkgKwotCSAgICBBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfNSk7Ci0KLQlJV0xfREVCVUdfSU5GTygiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwotCi0JcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvKSAqCi0JCQkJICAgICBwcml2LT5jaGFubmVsX2NvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmNoYW5uZWxfaW5mbykgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwotCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2hfaW5mbyA9IHByaXYtPmNoYW5uZWxfaW5mbzsKLQotCS8qIExvb3AgdGhyb3VnaCB0aGUgNSBFRVBST00gYmFuZHMgYWRkaW5nIHRoZW0gaW4gb3JkZXIgdG8gdGhlCi0JICogY2hhbm5lbCBtYXAgd2UgbWFpbnRhaW4gKHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGFuCi0JICogd2hhdCBqdXN0IGluIHRoZSBFRVBST00pICovCi0JZm9yIChiYW5kID0gMTsgYmFuZCA8PSA1OyBiYW5kKyspIHsKLQotCQlpd2wzOTQ1X2luaXRfYmFuZF9yZWZlcmVuY2UocHJpdiwgYmFuZCwgJmVlcHJvbV9jaF9jb3VudCwKLQkJCQkJJmVlcHJvbV9jaF9pbmZvLCAmZWVwcm9tX2NoX2luZGV4KTsKLQotCQkvKiBMb29wIHRocm91Z2ggZWFjaCBiYW5kIGFkZGluZyBlYWNoIG9mIHRoZSBjaGFubmVscyAqLwotCQlmb3IgKGNoID0gMDsgY2ggPCBlZXByb21fY2hfY291bnQ7IGNoKyspIHsKLQkJCWNoX2luZm8tPmNoYW5uZWwgPSBlZXByb21fY2hfaW5kZXhbY2hdOwotCQkJY2hfaW5mby0+YmFuZCA9IChiYW5kID09IDEpID8gSUVFRTgwMjExX0JBTkRfMkdIWiA6Ci0JCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWjsKLQotCQkJLyogcGVybWFuZW50bHkgc3RvcmUgRUVQUk9NJ3MgY2hhbm5lbCByZWd1bGF0b3J5IGZsYWdzCi0JCQkgKiAgIGFuZCBtYXggcG93ZXIgaW4gY2hhbm5lbCBpbmZvIGRhdGFiYXNlLiAqLwotCQkJY2hfaW5mby0+ZWVwcm9tID0gZWVwcm9tX2NoX2luZm9bY2hdOwotCi0JCQkvKiBDb3B5IHRoZSBydW4tdGltZSBmbGFncyBzbyB0aGV5IGFyZSB0aGVyZSBldmVuIG9uCi0JCQkgKiBpbnZhbGlkIGNoYW5uZWxzICovCi0JCQljaF9pbmZvLT5mbGFncyA9IGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFnczsKLQotCQkJaWYgKCEoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkpIHsKLQkJCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIEZsYWdzICV4IFslc0dIel0gLSAiCi0JCQkJCSAgICAgICAiTm8gdHJhZmZpY1xuIiwKLQkJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCi0JCQkJCSAgICAgICBjaF9pbmZvLT5mbGFncywKLQkJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KLQkJCQkJICAgICAgICI1LjIiIDogIjIuNCIpOwotCQkJCWNoX2luZm8rKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogSW5pdGlhbGl6ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KLQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KLQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPnNjYW5fcG93ZXIgPSBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQkJCWNoX2luZm8tPm1pbl9wb3dlciA9IDA7Ci0KLQkJCUlXTF9ERUJVR19JTkZPKCJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4IgotCQkJCSAgICAgICAiICVkZEJtKTogQWQtSG9jICVzc3VwcG9ydGVkXG4iLAotCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAotCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkJICAgICAgICI1LjIiIDogIjIuNCIsCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChWQUxJRCksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChJQlNTKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKEFDVElWRSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChSQURBUiksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChXSURFKSwKLQkJCQkgICAgICAgQ0hFQ0tfQU5EX1BSSU5UKERGUyksCi0JCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5mbGFncywKLQkJCQkgICAgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcsCi0JCQkJICAgICAgICgoZWVwcm9tX2NoX2luZm9bY2hdLgotCQkJCQkgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9JQlNTKQotCQkJCQkmJiAhKGVlcHJvbV9jaF9pbmZvW2NoXS4KLQkJCQkJICAgICBmbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKSkKLQkJCQkgICAgICAgPyAiIiA6ICJub3QgIik7Ci0KLQkJCS8qIFNldCB0aGUgdXNlcl90eHBvd2VyX2xpbWl0IHRvIHRoZSBoaWdoZXN0IHBvd2VyCi0JCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KLQkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+Ci0JCQkgICAgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KQotCQkJCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9Ci0JCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwotCi0JCQljaF9pbmZvKys7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdXAgdHhwb3dlciBzZXR0aW5ncyBpbiBkcml2ZXIgZm9yIGFsbCBjaGFubmVscyAqLwotCWlmIChpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHByaXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwIC0gdW5kbyBhbGxvY2F0aW9ucyBpbiBpd2wzOTQ1X2luaXRfY2hhbm5lbF9tYXAKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2NoYW5uZWxfbWFwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+Y2hhbm5lbF9pbmZvKTsKLQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKLX0KLQotLyogRm9yIGFjdGl2ZSBzY2FuLCBsaXN0ZW4gQUNUSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbCBhZnRlcgotICogc2VuZGluZyBwcm9iZSByZXEuICBUaGlzIHNob3VsZCBiZSBzZXQgbG9uZyBlbm91Z2ggdG8gaGVhciBwcm9iZSByZXNwb25zZXMKLSAqIGZyb20gbW9yZSB0aGFuIG9uZSBBUC4gICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV8yNCAgICAoMzApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfVElNRV81MiAgICAoMjApCi0KLSNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKDMpCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICgyKQotCi0vKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCi0gKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCi0gKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAotICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncwotICogbm8gb3RoZXIgdHJhZmZpYykuCi0gKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCi0jZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpCS8qIHBhY2tldHMgKi8KLSNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTApCS8qIG1zZWMgKi8KLQotLyogRm9yIHBhc3NpdmUgc2NhbiwgbGlzdGVuIFBBU1NJVkVfRFdFTExfVElNRSAobXNlYykgb24gZWFjaCBjaGFubmVsLgotICogTXVzdCBiZSBzZXQgbG9uZ2VyIHRoYW4gYWN0aXZlIGR3ZWxsIHRpbWUuCi0gKiBGb3IgdGhlIG1vc3QgcmVsaWFibGUgc2Nhbiwgc2V0ID4gQVAgYmVhY29uIGludGVydmFsICh0eXBpY2FsbHkgMTAwbXNlYykuICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgICAoMjApCS8qIGFsbCB0aW1lcyBpbiBtc2VjICovCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTIgICAoMTApCi0jZGVmaW5lIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgICAgICAoMTAwKQotI2RlZmluZSBJV0xfQ0hBTk5FTF9UVU5FX1RJTUUgICAgICAgNQotCi0jZGVmaW5lIElXTF9TQ0FOX1BST0JFX01BU0sobikJIChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkKLQotc3RhdGljIGlubGluZSB1MTYgaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkJCXU4IG5fcHJvYmVzKQotewotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgKwotCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfNTJHSFogKiAobl9wcm9iZXMgKyAxKTsKLQllbHNlCi0JCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQgKwotCQkJSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKiAobl9wcm9iZXMgKyAxKTsKLX0KLQotc3RhdGljIHUxNiBpd2wzOTQ1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JdTE2IHBhc3NpdmUgPSAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSA/Ci0JICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0IDoKLQkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfNTI7Ci0KLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7Ci0JCS8qIElmIHdlJ3JlIGFzc29jaWF0ZWQsIHdlIGNsYW1wIHRoZSBtYXhpbXVtIHBhc3NpdmUKLQkJICogZHdlbGwgdGltZSB0byBiZSA5OCUgb2YgdGhlIGJlYWNvbiBpbnRlcnZhbCAobWludXMKLQkJICogMiAqIGNoYW5uZWwgdHVuZSB0aW1lKSAqLwotCQlwYXNzaXZlID0gcHJpdi0+YmVhY29uX2ludDsKLQkJaWYgKChwYXNzaXZlID4gSVdMX1BBU1NJVkVfRFdFTExfQkFTRSkgfHwgIXBhc3NpdmUpCi0JCQlwYXNzaXZlID0gSVdMX1BBU1NJVkVfRFdFTExfQkFTRTsKLQkJcGFzc2l2ZSA9IChwYXNzaXZlICogOTgpIC8gMTAwIC0gSVdMX0NIQU5ORUxfVFVORV9USU1FICogMjsKLQl9Ci0KLQlyZXR1cm4gcGFzc2l2ZTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2dldF9jaGFubmVsc19mb3Jfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJICAgICB1OCBpc19hY3RpdmUsIHU4IG5fcHJvYmVzLAogCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAl1MTYgcGFzc2l2ZV9kd2VsbCA9IDA7CiAJdTE2IGFjdGl2ZV9kd2VsbCA9IDA7CiAJaW50IGFkZGVkLCBpOwogCi0Jc2JhbmQgPSBpd2wzOTQ1X2dldF9iYW5kKHByaXYsIGJhbmQpOworCXNiYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIGJhbmQpOwogCWlmICghc2JhbmQpCiAJCXJldHVybiAwOwogCiAJY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7CiAKLQlhY3RpdmVfZHdlbGwgPSBpd2wzOTQ1X2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7Ci0JcGFzc2l2ZV9kd2VsbCA9IGl3bDM5NDVfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kKTsKKwlhY3RpdmVfZHdlbGwgPSBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQsIG5fcHJvYmVzKTsKKwlwYXNzaXZlX2R3ZWxsID0gaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CiAKIAlpZiAocGFzc2l2ZV9kd2VsbCA8PSBhY3RpdmVfZHdlbGwpCiAJCXBhc3NpdmVfZHdlbGwgPSBhY3RpdmVfZHdlbGwgKyAxOwpAQCAtNDc3MSw5ICsyMjQ5LDkgQEAKIAogCQlzY2FuX2NoLT5jaGFubmVsID0gY2hhbm5lbHNbaV0uaHdfdmFsdWU7CiAKLQkJY2hfaW5mbyA9IGl3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBzY2FuX2NoLT5jaGFubmVsKTsKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIHNjYW5fY2gtPmNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAogCQkJCSAgICAgICBzY2FuX2NoLT5jaGFubmVsKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00Nzk4LDEyICsyMjc2LDEyIEBACiAJCSAqIGhlYXJpbmcgY2xlYXIgUnggcGFja2V0KS4qLwogCQlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKIAkJCWlmIChuX3Byb2JlcykKLQkJCQlzY2FuX2NoLT50eXBlIHw9IElXTF9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOworCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMMzlfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHVDb2RlIHYxIGRvZXMgbm90IGFsbG93IHNldHRpbmcgZGlyZWN0IHByb2JlIGJpdHMgb24KIAkJCSAqIHBhc3NpdmUgY2hhbm5lbC4gKi8KIAkJCWlmICgoc2Nhbl9jaC0+dHlwZSAmIDEpICYmIG5fcHJvYmVzKQotCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMX1NDQU5fUFJPQkVfTUFTSyhuX3Byb2Jlcyk7CisJCQkJc2Nhbl9jaC0+dHlwZSB8PSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOwogCQl9CiAKIAkJLyogU2V0IHR4cG93ZXIgbGV2ZWxzIHRvIGRlZmF1bHRzICovCkBAIC00ODIxLDcgKzIyOTksNyBAQAogCQkJICovCiAJCX0KIAotCQlJV0xfREVCVUdfU0NBTigiU2Nhbm5pbmcgJWQgWyVzICVkXVxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW5uaW5nICVkIFslcyAlZF1cbiIsCiAJCQkgICAgICAgc2Nhbl9jaC0+Y2hhbm5lbCwKIAkJCSAgICAgICAoc2Nhbl9jaC0+dHlwZSAmIDEpID8gIkFDVElWRSIgOiAiUEFTU0lWRSIsCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiAxKSA/CkBAIC00ODMxLDExICsyMzA5LDExIEBACiAJCWFkZGVkKys7CiAJfQogCi0JSVdMX0RFQlVHX1NDQU4oInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CiAJcmV0dXJuIGFkZGVkOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfaHdfcmF0ZXMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9od19yYXRlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzKQogewogCWludCBpOwpAQCAtNDg0NSw3ICsyMzIzLDcgQEAKIAkJcmF0ZXNbaV0uaHdfdmFsdWUgPSBpOyAvKiBSYXRlIHNjYWxpbmcgd2lsbCB3b3JrIG9uIGluZGV4ZXMgKi8KIAkJcmF0ZXNbaV0uaHdfdmFsdWVfc2hvcnQgPSBpOwogCQlyYXRlc1tpXS5mbGFncyA9IDA7Ci0JCWlmICgoaSA+IElXTF9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgeworCQlpZiAoKGkgPiBJV0wzOV9MQVNUX09GRE1fUkFURSkgfHwgKGkgPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkgewogCQkJLyoKIAkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCiAJCQkgKi8KQEAgLTQ4NTUsMTQ1ICsyMzMzLDEzIEBACiAJfQogfQogCi0vKioKLSAqIGl3bDM5NDVfaW5pdF9nZW9zIC0gSW5pdGlhbGl6ZSBtYWM4MDIxMSdzIGdlby9jaGFubmVsIGluZm8gYmFzZWQgZnJvbSBlZXByb20KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2luaXRfZ2VvcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmdlb19jaDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGVzOwotCWludCBpID0gMDsKLQotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8Ci0JICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7Ci0JCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpICoKLQkJCSAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwotCWlmICghY2hhbm5lbHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmF0ZXMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYXRlKSAqIChJV0xfUkFURV9DT1VOVCArIDEpKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghcmF0ZXMpIHsKLQkJa2ZyZWUoY2hhbm5lbHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiA1LjJHSHogY2hhbm5lbHMgc3RhcnQgYWZ0ZXIgdGhlIDIuNEdIeiBjaGFubmVscyAqLwotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9ICZjaGFubmVsc1tBUlJBWV9TSVpFKGl3bDM5NDVfZWVwcm9tX2JhbmRfMSldOwotCS8qIGp1c3QgT0ZETSAqLwotCXNiYW5kLT5iaXRyYXRlcyA9ICZyYXRlc1tJV0xfRklSU1RfT0ZETV9SQVRFXTsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UIC0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQotCXNiYW5kID0gJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCXNiYW5kLT5jaGFubmVscyA9IGNoYW5uZWxzOwotCS8qIE9GRE0gJiBDQ0sgKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSByYXRlczsKLQlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UOwotCi0JcHJpdi0+aWVlZV9jaGFubmVscyA9IGNoYW5uZWxzOwotCXByaXYtPmllZWVfcmF0ZXMgPSByYXRlczsKLQotCWl3bDM5NDVfaW5pdF9od19yYXRlcyhwcml2LCByYXRlcyk7Ci0KLQlmb3IgKGkgPSAwOyAgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgewotCQljaCA9ICZwcml2LT5jaGFubmVsX2luZm9baV07Ci0KLQkJLyogRklYTUU6IG1pZ2h0IGJlIHJlbW92ZWQgaWYgc2NhbiBpcyBPSyovCi0JCWlmICghaXNfY2hhbm5lbF92YWxpZChjaCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaXNfY2hhbm5lbF9hX2JhbmQoY2gpKQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCQllbHNlCi0JCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0KLQkJZ2VvX2NoID0gJnNiYW5kLT5jaGFubmVsc1tzYmFuZC0+bl9jaGFubmVscysrXTsKLQotCQlnZW9fY2gtPmNlbnRlcl9mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGNoLT5jaGFubmVsKTsKLQkJZ2VvX2NoLT5tYXhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKLQkJZ2VvX2NoLT5tYXhfYW50ZW5uYV9nYWluID0gMHhmZjsKLQkJZ2VvX2NoLT5od192YWx1ZSA9IGNoLT5jaGFubmVsOwotCi0JCWlmIChpc19jaGFubmVsX3ZhbGlkKGNoKSkgewotCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JQlNTOwotCi0JCQlpZiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOwotCi0JCQlpZiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpCi0JCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9SQURBUjsKLQotCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT5tYXhfY2hhbm5lbF90eHBvd2VyX2xpbWl0ID0KLQkJCQkgICAgY2gtPm1heF9wb3dlcl9hdmc7Ci0JCX0gZWxzZSB7Ci0JCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwotCQl9Ci0KLQkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwotCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwotCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MCVYXG4iLAotCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAotCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAotCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/Ci0JCQkJInJlc3RyaWN0ZWQiIDogInZhbGlkIiwKLQkJCQkgZ2VvX2NoLT5mbGFncyk7Ci0JfQotCi0JaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCi0JICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKLQkJIHByaXYtPmNmZy0+c2t1ICY9IH5JV0xfU0tVX0E7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCSAgICAgICAiOiBUdW5hYmxlIGNoYW5uZWxzOiAlZCA4MDIuMTFiZywgJWQgODAyLjExYSBjaGFubmVsc1xuIiwKLQkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscywKLQkgICAgICAgcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyk7Ci0KLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscykKLQkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9Ci0JCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpCi0JCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQotCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0Jc2V0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpd2wzOTQ1X2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsMzk0NV9pbml0X2dlb3MKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2dlb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlrZnJlZShwcml2LT5pZWVlX2NoYW5uZWxzKTsKLQlrZnJlZShwcml2LT5pZWVlX3JhdGVzKTsKLQljbGVhcl9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2koc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2koc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2NvZGUpOwogCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGEpOwpAQCAtNTAwNywyOSArMjM1MywzMCBAQAogICogaXdsMzk0NV92ZXJpZnlfaW5zdF9mdWxsIC0gdmVyaWZ5IHJ1bnRpbWUgdUNvZGUgaW1hZ2UgaW4gY2FyZCB2cy4gaG9zdCwKICAqICAgICBsb29raW5nIGF0IGFsbCBkYXRhLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X2Z1bGwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQogewogCXUzMiB2YWw7CiAJdTMyIHNhdmVfbGVuID0gbGVuOwogCWludCByYyA9IDA7CiAJdTMyIGVycmNudDsKIAotCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCQkgICAgICAgSVdMMzlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwogCiAJZXJyY250ID0gMDsKIAlmb3IgKDsgbGVuID4gMDsgbGVuIC09IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7CiAJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQl2YWwgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwogCQkJcmMgPSAtRUlPOwpAQCAtNTAzOSwxMCArMjM4NiwxMSBAQAogCQl9CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmICghZXJyY250KQotCQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUwNTMsMTYgKzI0MDEsMTYgQEAKICAqICAgdXNpbmcgc2FtcGxlIGRhdGEgMTAwIGJ5dGVzIGFwYXJ0LiAgSWYgdGhlc2Ugc2FtcGxlIHBvaW50cyBhcmUgZ29vZCwKICAqICAgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGVtIGlzIGdvb2QsIHRvby4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsIHUzMiBsZW4pCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwogCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTUwNzAsMTIgKzI0MTgsMTIgQEAKIAkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCiAJCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZwogCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCi0JCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKLQkJCWkgKyBSVENfSU5TVF9MT1dFUl9CT1VORCk7Ci0JCXZhbCA9IF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCisJCQlpICsgSVdMMzlfUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7CiAjaWYgMCAvKiBFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBzZWUgZGV0YWlscyAqLwotCQkJSVdMX0VSUk9SKCJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCisJCQlJV0xfRVJSKHByaXYsICJ1Q29kZSBJTlNUIHNlY3Rpb24gaXMgaW52YWxpZCBhdCAiCiAJCQkJICAib2Zmc2V0IDB4JXgsIGlzIDB4JXgsIHMvYiAweCV4XG4iLAogCQkJCSAgaSwgdmFsLCAqaW1hZ2UpOwogI2VuZGlmCkBAIC01MDg2LDcgKzI0MzQsNyBAQAogCQl9CiAJfQogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTUwOTYsNyArMjQ0NCw3IEBACiAgKiBpd2wzOTQ1X3ZlcmlmeV91Y29kZSAtIGRldGVybWluZSB3aGljaCBpbnN0cnVjdGlvbiBpbWFnZSBpcyBpbiBTUkFNLAogICogICAgYW5kIHZlcmlmeSBpdHMgY29udGVudHMKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJX19sZTMyICppbWFnZTsKIAl1MzIgbGVuOwpAQCAtNTEwNyw3ICsyNDU1LDcgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MTE2LDcgKzI0NjQsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwogCXJjID0gaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKHJjID09IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTEyNSwxMSArMjQ3MywxMSBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwogCXJjID0gaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2UocHJpdiwgaW1hZ2UsIGxlbik7CiAJaWYgKHJjID09IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9FUlJPUigiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKKwlJV0xfRVJSKHByaXYsICJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOwogCiAJLyogU2luY2Ugbm90aGluZyBzZWVtcyB0byBtYXRjaCwgc2hvdyBmaXJzdCBzZXZlcmFsIGRhdGEgZW50cmllcyBpbgogCSAqIGluc3RydWN0aW9uIFNSQU0sIHNvIG1heWJlIHZpc3VhbCBpbnNwZWN0aW9uIHdpbGwgZ2l2ZSBhIGNsdWUuCkBAIC01MTQxLDE2MCArMjQ4OSwxMCBAQAogCXJldHVybiByYzsKIH0KIAotCi0vKiBjaGVjayBjb250ZW50cyBvZiBzcGVjaWFsIGJvb3RzdHJhcCB1Q29kZSBTUkFNICovCi1zdGF0aWMgaW50IGl3bDM5NDVfdmVyaWZ5X2JzbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCV9fbGUzMiAqaW1hZ2UgPSBwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQl1MzIgbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47Ci0JdTMyIHJlZzsKLQl1MzIgdmFsOwotCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIHZlcmlmeSBic21cbiIpOwotCi0JLyogdmVyaWZ5IEJTTSBTUkFNIGNvbnRlbnRzICovCi0JdmFsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKLQlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47Ci0JICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKLQkJdmFsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgcmVnKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKLQkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKLQkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAotCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKLQkJCQkgIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfbG9hZF9ic20gLSBMb2FkIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMKLSAqCi0gKiBCU00gb3BlcmF0aW9uOgotICoKLSAqIFRoZSBCb290c3RyYXAgU3RhdGUgTWFjaGluZSAoQlNNKSBzdG9yZXMgYSBzaG9ydCBib290c3RyYXAgdUNvZGUgcHJvZ3JhbQotICogaW4gc3BlY2lhbCBTUkFNIHRoYXQgZG9lcyBub3QgcG93ZXIgZG93biBkdXJpbmcgUkZLSUxMLiAgV2hlbiBwb3dlcmluZyBiYWNrCi0gKiB1cCBhZnRlciBwb3dlci1zYXZpbmcgc2xlZXBzIChvciBkdXJpbmcgaW5pdGlhbCB1Q29kZSBsb2FkKSwgdGhlIEJTTSBsb2FkcwotICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtIGludG8gdGhlIG9uLWJvYXJkIHByb2Nlc3NvciwgYW5kIHN0YXJ0cyBpdC4KLSAqCi0gKiBUaGUgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgKHZpYSBETUEpIGluc3RydWN0aW9ucyBhbmQgZGF0YSBmb3IgYSBuZXcKLSAqIHByb2dyYW0gZnJvbSBob3N0IERSQU0gbG9jYXRpb25zIGluZGljYXRlZCBieSB0aGUgaG9zdCBkcml2ZXIgaW4gdGhlCi0gKiBCU01fRFJBTV8qIHJlZ2lzdGVycy4gIE9uY2UgdGhlIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCwgaXQgc3RhcnRzCi0gKiBhdXRvbWF0aWNhbGx5LgotICoKLSAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBwb2ludHMgdGhlIEJTTSB0byB0aGUKLSAqICJpbml0aWFsaXplIiB1Q29kZSBpbWFnZS4gIFRoaXMgdUNvZGUgc2V0cyB1cCBzb21lIGludGVybmFsIGRhdGEsIHRoZW4KLSAqIG5vdGlmaWVzIGhvc3QgdmlhICJpbml0aWFsaXplIGFsaXZlIiB0aGF0IGl0IGlzIGNvbXBsZXRlLgotICoKLSAqIFRoZSBob3N0IHRoZW4gcmVwbGFjZXMgdGhlIEJTTV9EUkFNXyogcG9pbnRlciB2YWx1ZXMgdG8gcG9pbnQgdG8gdGhlCi0gKiBub3JtYWwgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIGEgYmFja3VwIHVDb2RlIGRhdGEgY2FjaGUgYnVmZmVyCi0gKiAoZmlsbGVkIGluaXRpYWxseSB3aXRoIHN0YXJ0aW5nIGRhdGEgdmFsdWVzIGZvciB0aGUgb24tYm9hcmQgcHJvY2Vzc29yKSwKLSAqIHRoZW4gdHJpZ2dlcnMgdGhlICJpbml0aWFsaXplIiB1Q29kZSB0byBsb2FkIGFuZCBsYXVuY2ggdGhlIHJ1bnRpbWUgdUNvZGUsCi0gKiB3aGljaCBiZWdpbnMgbm9ybWFsIG9wZXJhdGlvbi4KLSAqCi0gKiBXaGVuIGRvaW5nIGEgcG93ZXItc2F2ZSBzaHV0ZG93biwgcnVudGltZSB1Q29kZSBzYXZlcyBkYXRhIFNSQU0gaW50bwotICogdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGluIERSQU0gYmVmb3JlIFNSQU0gaXMgcG93ZXJlZCBkb3duLgotICoKLSAqIFdoZW4gcG93ZXJpbmcgYmFjayB1cCwgdGhlIEJTTSBsb2FkcyB0aGUgYm9vdHN0cmFwIHByb2dyYW0uICBUaGlzIHJlbG9hZHMKLSAqIHRoZSBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgdGhlIGJhY2t1cCBkYXRhIGNhY2hlIGludG8gU1JBTSwKLSAqIGFuZCByZS1sYXVuY2hlcyB0aGUgcnVudGltZSB1Q29kZSBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbG9hZF9ic20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCWRtYV9hZGRyX3QgcGluc3Q7Ci0JZG1hX2FkZHJfdCBwZGF0YTsKLQl1MzIgaW5zdF9sZW47Ci0JdTMyIGRhdGFfbGVuOwotCWludCByYzsKLQlpbnQgaTsKLQl1MzIgZG9uZTsKLQl1MzIgcmVnX29mZnNldDsKLQotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiBsb2FkIGJzbVxuIik7Ci0KLQkvKiBtYWtlIHN1cmUgYm9vdHN0cmFwIHByb2dyYW0gaXMgbm8gbGFyZ2VyIHRoYW4gQlNNJ3MgU1JBTSBzaXplICovCi0JaWYgKGxlbiA+IElXTF9NQVhfQlNNX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCi0JICogICBpbiBob3N0IERSQU0gLi4uIGhvc3QgRFJBTSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgMzE6MCBmb3IgMzk0NS4KLQkgKiBOT1RFOiAgaXdsMzk0NV9pbml0aWFsaXplX2FsaXZlX3N0YXJ0KCkgd2lsbCByZXBsYWNlIHRoZXNlIHZhbHVlcywKLQkgKiAgICAgICAgYWZ0ZXIgdGhlICJpbml0aWFsaXplIiB1Q29kZSBoYXMgcnVuLCB0byBwb2ludCB0bwotCSAqICAgICAgICBydW50aW1lL3Byb3RvY29sIGluc3RydWN0aW9ucyBhbmQgYmFja3VwIGRhdGEgY2FjaGUuICovCi0JcGluc3QgPSBwcml2LT51Y29kZV9pbml0LnBfYWRkcjsKLQlwZGF0YSA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5wX2FkZHI7Ci0JaW5zdF9sZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlkYXRhX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47Ci0KLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfUFRSX1JFRywgcGluc3QpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywgZGF0YV9sZW4pOwotCi0JLyogRmlsbCBCU00gbWVtb3J5IHdpdGggYm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLwotCWZvciAocmVnX29mZnNldCA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOwotCSAgICAgcmVnX29mZnNldCA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnX29mZnNldCArPSBzaXplb2YodTMyKSwgaW1hZ2UrKykKLQkJX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWdfb2Zmc2V0LAotCQkJCQkgIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCi0JcmMgPSBpd2wzOTQ1X3ZlcmlmeV9ic20ocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fRFNUX1JFRywKLQkJCQkgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKLQotCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKLQkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAotCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKTsKLQotCS8qIFdhaXQgZm9yIGxvYWQgb2YgYm9vdHN0cmFwIHVDb2RlIHRvIGZpbmlzaCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlkb25lID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHKTsKLQkJaWYgKCEoZG9uZSAmIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCWlmIChpIDwgMTAwKQotCQlJV0xfREVCVUdfSU5GTygiQlNNIHdyaXRlIGNvbXBsZXRlLCBwb2xsICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwotCWVsc2UgewotCQlJV0xfRVJST1IoIkJTTSB3cml0ZSBkaWQgbm90IGNvbXBsZXRlIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBwb3dlciBtYW5hZ2VtZW50IHVuaXQgdHJpZ2dlcnMgaXQKLQkgKiAgIChlLmcuIHdoZW4gcG93ZXJpbmcgYmFjayB1cCBhZnRlciBwb3dlci1zYXZlIHNodXRkb3duKSAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCi0JCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4pOwotCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9uaWNfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbmljX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBSZW1vdmUgYWxsIHJlc2V0cyB0byBhbGxvdyBOSUMgdG8gb3BlcmF0ZSAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgMCk7CiB9CiAKIC8qKgpAQCAtNTMwMiw5ICsyNTAwLDkgQEAKICAqCiAgKiBDb3B5IGludG8gYnVmZmVycyBmb3IgY2FyZCB0byBmZXRjaCB2aWEgYnVzLW1hc3RlcmluZwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcmVhZF91Y29kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3Vjb2RlICp1Y29kZTsKKwlzdHJ1Y3QgaXdsX3Vjb2RlICp1Y29kZTsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaW5kZXg7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXc7CiAJLyogZmlybXdhcmUgZmlsZSBuYW1lIGNvbnRhaW5zIHVDb2RlL2RyaXZlciBjb21wYXRpYmlsaXR5IHZlcnNpb24gKi8KQEAgLTUzMjIsNyArMjUyMCw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMldSVzIiwgbmFtZV9wcmUsIGluZGV4LCAiLnVjb2RlIik7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnVjb2RlX3JhdywgYnVmLCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCUlXTF9FUlJPUigiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiBSZWFzb24gJWRcbiIsCisJCQlJV0xfRVJSKHByaXYsICIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6ICVkXG4iLAogCQkJCSAgYnVmLCByZXQpOwogCQkJaWYgKHJldCA9PSAtRU5PRU5UKQogCQkJCWNvbnRpbnVlOwpAQCAtNTMzMCw5ICsyNTI4LDEyIEBACiAJCQkJZ290byBlcnJvcjsKIAkJfSBlbHNlIHsKIAkJCWlmIChpbmRleCA8IGFwaV9tYXgpCi0JCQkJSVdMX0VSUk9SKCJMb2FkZWQgZmlybXdhcmUgJXMsIHdoaWNoIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgQVBJIHYldSBpbnN0ZWFkLlxuIiwKKwkJCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgZmlybXdhcmUgJXMsICIKKwkJCQkJIndoaWNoIGlzIGRlcHJlY2F0ZWQuICIKKwkJCQkJIiBQbGVhc2UgdXNlIEFQSSB2JXUgaW5zdGVhZC5cbiIsCiAJCQkJCSAgYnVmLCBhcGlfbWF4KTsKLQkJCUlXTF9ERUJVR19JTkZPKCJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICIKKwkJCQkgICAgICAgIiglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKIAkJCQkgICAgICAgYnVmLCB1Y29kZV9yYXctPnNpemUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUzNDMsNyArMjU0NCw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KIAlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKLQkJSVdMX0VSUk9SKCJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOworCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTUzNjQsNyArMjU2NSw3IEBACiAJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLwogCiAJaWYgKGFwaV92ZXIgPCBhcGlfbWluIHx8IGFwaV92ZXIgPiBhcGlfbWF4KSB7Ci0JCUlXTF9FUlJPUigiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCisJCUlXTF9FUlIocHJpdiwgIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgogCQkJICAiRHJpdmVyIHN1cHBvcnRzIHYldSwgZmlybXdhcmUgaXMgdiV1LlxuIiwKIAkJCSAgYXBpX21heCwgYXBpX3Zlcik7CiAJCXByaXYtPnVjb2RlX3ZlciA9IDA7CkBAIC01MzcyLDIzICsyNTczLDI5IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChhcGlfdmVyICE9IGFwaV9tYXgpCi0JCUlXTF9FUlJPUigiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgJXUsICIKKwkJSVdMX0VSUihwcml2LCAiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgJXUsICIKIAkJCSAgImdvdCAldS4gTmV3IGZpcm13YXJlIGNhbiBiZSBvYnRhaW5lZCAiCiAJCQkgICJmcm9tIGh0dHA6Ly93d3cuaW50ZWxsaW51eHdpcmVsZXNzLm9yZy5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAotCQkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfTUlOT1IocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciB1Y29kZSB2ZXJzaW9uIHJhdyA9IDB4JXhcbiIsCisJSVdMX0lORk8ocHJpdiwgImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAorCQlJV0xfVUNPREVfTUFKT1IocHJpdi0+dWNvZGVfdmVyKSwKKwkJSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKKwkJSVdMX1VDT0RFX1NFUklBTChwcml2LT51Y29kZV92ZXIpKTsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAogCQkgICAgICAgcHJpdi0+dWNvZGVfdmVyKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgaW5zdCBzaXplID0gJXVcbiIsIGluc3Rfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLCBkYXRhX3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwgaW5pdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgZGF0YSBzaXplID0gJXVcbiIsIGluaXRfZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsIGJvb3Rfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgaW5zdF9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgZGF0YSBzaXplID0gJXVcbiIsCisJCSAgICAgICBkYXRhX3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluaXRfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgaW5pdF9kYXRhX3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgYm9vdCBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGJvb3Rfc2l6ZSk7CiAKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCkBAIC01Mzk2LDQwICsyNjAzLDQzIEBACiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgKGludCl1Y29kZV9yYXctPnNpemUpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICV6ZCB0b28gc21hbGxcbiIsCisJCQkgICAgICAgdWNvZGVfcmF3LT5zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBWZXJpZnkgdGhhdCB1Q29kZSBpbWFnZXMgd2lsbCBmaXQgaW4gY2FyZCdzIFNSQU0gKi8KLQlpZiAoaW5zdF9zaXplID4gSVdMX01BWF9JTlNUX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbnN0X3NpemUgPiBJV0wzOV9NQVhfSU5TVF9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBpbnN0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAotCWlmIChkYXRhX3NpemUgPiBJV0xfTUFYX0RBVEFfU0laRSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoZGF0YV9zaXplID4gSVdMMzlfTUFYX0RBVEFfU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBkYXRhX3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KLQlpZiAoaW5pdF9zaXplID4gSVdMX01BWF9JTlNUX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGluaXRfc2l6ZSA+IElXTDM5X01BWF9JTlNUX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgaW5pdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlpbml0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KLQlpZiAoaW5pdF9kYXRhX3NpemUgPiBJV0xfTUFYX0RBVEFfU0laRSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbml0X2RhdGFfc2l6ZSA+IElXTDM5X01BWF9EQVRBX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWluaXRfZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGJvb3Rfc2l6ZSA+IElXTF9NQVhfQlNNX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGJvb3QgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGJvb3Rfc2l6ZSA+IElXTDM5X01BWF9CU01fU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkJCWJvb3Rfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CkBAIC01NDc5LDE2ICsyNjg5LDE4IEBACiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbMF07CiAJbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBpbnN0ciBsZW4gJXpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgc3JjLCBsZW4pOwotCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCiAJCXByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCAodTMyKXByaXYtPnVjb2RlX2NvZGUucF9hZGRyKTsKIAogCS8qIFJ1bnRpbWUgZGF0YSAoMm5kIGJsb2NrKQogCSAqIE5PVEU6ICBDb3B5IGludG8gYmFja3VwIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW4gaXdsMzk0NV91cCgpICAqLwogCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2RhdGEubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgc3JjLCBsZW4pOwogCkBAIC01NDk2LDggKzI3MDgsOCBAQAogCWlmIChpbml0X3NpemUpIHsKIAkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07CiAJCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlWmRcbiIsCi0JCQkgICAgICAgbGVuKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXQudl9hZGRyLCBzcmMsIGxlbik7CiAJfQogCkBAIC01NTA1LDE2ICsyNzE3LDE2IEBACiAJaWYgKGluaXRfZGF0YV9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVkXG4iLAotCQkJICAgICAgIChpbnQpbGVuKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgZGF0YSBsZW4gJXpkXG4iLCBsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCX0KIAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVkXG4iLAotCQkgICAgICAgKGludClsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfYm9vdC52X2FkZHIsIHNyYywgbGVuKTsKIAogCS8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqLwpAQCAtNTUyMiw3ICsyNzM0LDcgQEAKIAlyZXR1cm4gMDsKIAogIGVycl9wY2lfYWxsb2M6Ci0JSVdMX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgcGNpIG1lbW9yeVxuIik7CisJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOwogCXJldCA9IC1FTk9NRU07CiAJaXdsMzk0NV9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIApAQCAtNTU0Myw3ICsyNzU1LDcgQEAKICAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGVtIHRvIGxvYWQgcnVudGltZSB1Q29kZSBpbnN0IGFuZCBkYXRhLAogICogYW5kIHRvIHNhdmUgcnVudGltZSBkYXRhIHdoZW4gcG93ZXJpbmcgZG93bi4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NldF91Y29kZV9wdHJzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3Vjb2RlX3B0cnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWRtYV9hZGRyX3QgcGluc3Q7CiAJZG1hX2FkZHJfdCBwZGF0YTsKQEAgLTU1NTUsMjggKzI3NjcsMjggQEAKIAlwZGF0YSA9IHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnBfYWRkcjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJjKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgaW1hZ2UgdG8gbG9hZCAqLwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfQllURUNPVU5UX1JFRywKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX1BUUl9SRUcsIHBkYXRhKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCiAJCQkJIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKIAogCS8qIEluc3QgYnl0ZSBjb3VudCBtdXN0IGJlIGxhc3QgdG8gc2V0IHVwLCBiaXQgMzEgc2lnbmFscyB1Q29kZQogCSAqICAgdGhhdCBhbGwgbmV3IHB0ci9zaXplIGluZm8gaXMgaW4gcGxhY2UgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLAorCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywKIAkJCQkgcHJpdi0+dWNvZGVfY29kZS5sZW4gfCBCU01fRFJBTV9JTlNUX0xPQUQpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIHBvaW50ZXJzIGFyZSBzZXQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01NTg4LDEzICsyODAwLDEzIEBACiAgKgogICogVGVsbCAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gZ28gYWhlYWQgYW5kIGxvYWQgdGhlIHJ1bnRpbWUgdUNvZGUuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBDaGVjayBhbGl2ZSByZXNwb25zZSBmb3IgInZhbGlkIiBzaWduIGZyb20gdUNvZGUgKi8KIAlpZiAocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemUgQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC01NjA0LDE4ICsyODE2LDE4IEBACiAJaWYgKGl3bDM5NDVfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCS8qIFNlbmQgcG9pbnRlcnMgdG8gcHJvdG9jb2wvcnVudGltZSB1Q29kZSBpbWFnZSAuLi4gaW5pdCBjb2RlIHdpbGwKIAkgKiBsb2FkIGFuZCBsYXVuY2ggcnVudGltZSB1Q29kZSwgd2hpY2ggd2lsbCBzZW5kIHVzIGFub3RoZXIgIkFsaXZlIgogCSAqIG5vdGlmaWNhdGlvbi4gKi8KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAlpZiAoaXdsMzk0NV9zZXRfdWNvZGVfcHRycyhwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd29uJ3QgaGFwcGVuOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvdWxkbid0IHNldCB1cCB1Q29kZSBwb2ludGVycy5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXJldHVybjsKQEAgLTU2MzQsMTggKzI4NDYsMTggQEAKICAqICAgICAgICAgICAgICAgICAgIGZyb20gcHJvdG9jb2wvcnVudGltZSB1Q29kZSAoaW5pdGlhbGl6YXRpb24gdUNvZGUncwogICogICAgICAgICAgICAgICAgICAgQWxpdmUgZ2V0cyBoYW5kbGVkIGJ5IGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgdGhlcm1hbF9zcGluID0gMDsKIAl1MzIgcmZraWxsOwogCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCiAJaWYgKHByaXYtPmNhcmRfYWxpdmUuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNTY1NSwyMSArMjg2NywyMSBAQAogCWlmIChpd2wzOTQ1X3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCiAJaXdsMzk0NV9jbGVhcl9zdGF0aW9uc190YWJsZShwcml2KTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIFJGS0lMTCBzdGF0dXMgZnJvbSBhZGFwdGVyXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBSRktJTEwgc3RhdHVzIGZyb20gYWRhcHRlclxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlyZmtpbGwgPSBpd2wzOTQ1X3JlYWRfcHJwaChwcml2LCBBUE1HX1JGS0lMTF9SRUcpOwotCUlXTF9ERUJVR19JTkZPKCJSRktJTEwgc3RhdHVzOiAweCV4XG4iLCByZmtpbGwpOwotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXJma2lsbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19SRktJTExfUkVHKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkZLSUxMIHN0YXR1czogMHgleFxuIiwgcmZraWxsKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJaWYgKHJma2lsbCAmIDB4MSkgewogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtNTY4MSw3ICsyODkzLDcgQEAKIAkJfQogCiAJCWlmICh0aGVybWFsX3NwaW4pCi0JCQlJV0xfREVCVUdfSU5GTygiVGhlcm1hbCBjYWxpYnJhdGlvbiB0b29rICVkdXNcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVGhlcm1hbCBjYWxpYnJhdGlvbiB0b29rICVkdXNcbiIsCiAJCQkJICAgICAgIHRoZXJtYWxfc3BpbiAqIDEwKTsKIAl9IGVsc2UKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CkBAIC01NjkyLDcgKzI5MDQsNyBAQAogCS8qIENsZWFyIG91dCB0aGUgdUNvZGUgZXJyb3IgYml0IGlmIGl0IGlzIHNldCAqLwogCWNsZWFyX2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpOwogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlyZXR1cm47CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOwpAQCAtNTcwMCw5ICsyOTEyLDkgQEAKIAlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7CiAJcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7CiAKLQlpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSkpOworCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICphY3RpdmVfcnhvbiA9CiAJCQkJKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICopKCZwcml2LT5hY3RpdmVfcnhvbik7CiAKQEAgLTU3MTEsMTIgKzI5MjMsMTEgQEAKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCX0gZWxzZSB7CiAJCS8qIEluaXRpYWxpemUgb3VyIHJ4X2NvbmZpZyBkYXRhICovCi0JCWl3bDM5NDVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBwcml2LT5pd19tb2RlKTsKLQkJbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIHByaXYtPml3X21vZGUpOwogCX0KIAogCS8qIENvbmZpZ3VyZSBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIHN1cHBvcnQgKi8KLQlpd2wzOTQ1X3NlbmRfYnRfY29uZmlnKHByaXYpOworCWl3bF9zZW5kX2J0X2NvbmZpZyhwcml2KTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBmb3IgdW5hc3NvY2lhdGVkIG9wZXJhdGlvbiAqLwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CkBAIC01NzI1LDcgKzI5MzYsNyBAQAogCiAJaXdsMzk0NV9sZWRfcmVnaXN0ZXIocHJpdik7CiAKLQlJV0xfREVCVUdfSU5GTygiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7CiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIApAQCAtNTc0NiwxNSArMjk1NywxNSBAQAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7CitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV9kb3duKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBfX2l3bDM5NDVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKIAotCUlXTF9ERUJVR19JTkZPKERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBnb2luZyBkb3duXG4iKTsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCkBAIC01NzczLDExICsyOTg0LDExIEBACiAJCWNsZWFyX2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAogCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CiAKIAkvKiB0ZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CiAKQEAgLTU3ODYsNyArMjk5Nyw3IEBACiAKIAkvKiBJZiB3ZSBoYXZlIG5vdCBwcmV2aW91c2x5IGNhbGxlZCBpd2wzOTQ1X2luaXQoKSB0aGVuCiAJICogY2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsIGFuZCBTVVNQRU5EIGJpdHMgYW5kIHJldHVybiAqLwotCWlmICghaXdsMzk0NV9pc19pbml0KHByaXYpKSB7CisJaWYgKCFpd2xfaXNfaW5pdChwcml2KSkgewogCQlwcml2LT5zdGF0dXMgPSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPDwKIAkJCQkJU1RBVFVTX1JGX0tJTExfSFcgfAogCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSA8PApAQCAtNTgxNSwyOSArMzAyNiwzMSBAQAogCQkJdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgPDwKIAkJCQlTVEFUVVNfRVhJVF9QRU5ESU5HOwogCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5yZXNldChwcml2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKwlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChwcml2KTsKIAlpd2wzOTQ1X2h3X3J4cV9zdG9wKHByaXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7Ci0JCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAorCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgeworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXVkZWxheSg1KTsKIAotCWl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHByaXYpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7Ci0JaXdsMzk0NV9od19uaWNfcmVzZXQocHJpdik7CisJaWYgKGV4aXRfcGVuZGluZyB8fCB0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc3RvcChwcml2KTsKKwllbHNlCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMucmVzZXQocHJpdik7CiAKICBleGl0OgotCW1lbXNldCgmcHJpdi0+Y2FyZF9hbGl2ZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3ApKTsKKwltZW1zZXQoJnByaXYtPmNhcmRfYWxpdmUsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApKTsKIAogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5pYnNzX2JlYWNvbik7CkBAIC01ODQ3LDcgKzMwNjAsNyBAQAogCWl3bDM5NDVfY2xlYXJfZnJlZV9mcmFtZXMocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfZG93bihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9kb3duKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJX19pd2wzOTQ1X2Rvd24ocHJpdik7CkBAIC01ODU4LDU4ICszMDcxLDU4IEBACiAKICNkZWZpbmUgTUFYX0hXX1JFU1RBUlRTIDUKIAotc3RhdGljIGludCBfX2l3bDM5NDVfdXAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgX19pd2wzOTQ1X3VwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMsIGk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX1dBUk5JTkcoIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBTVyBSRiBraWxsIChtb2R1bGUgIgorCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgU1cgUkYga2lsbCAobW9kdWxlICIKIAkJCSAgICAicGFyYW1ldGVyKVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICghcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkcikgewotCQlJV0xfRVJST1IoInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZyB1cFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVjb2RlIG5vdCBhdmFpbGFibGUgZm9yIGRldmljZSBicmluZyB1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCi0JaWYgKGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgorCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCWVsc2UgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBIVyBSRiBLaWxsIHN3aXRjaFxuIik7CisJCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CiAKIAlyYyA9IGl3bDM5NDVfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGludCBuaWNcbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW50IG5pY1xuIik7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAogCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX0NNRF9CTE9DS0VEKTsKIAogCS8qIGNsZWFyIChhZ2FpbiksIHRoZW4gZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQlpd2wzOTQ1X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCS8qIHJlYWxseSBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKIAogCS8qIENvcHkgb3JpZ2luYWwgdWNvZGUgZGF0YSBpbWFnZSBmcm9tIGRpc2sgaW50byBiYWNrdXAgY2FjaGUuCiAJICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgb24tYm9hcmQgcHJvY2Vzc29yJ3MKQEAgLTU5MjgsMTcgKzMxNDEsMTggQEAKIAkJLyogbG9hZCBib290c3RyYXAgc3RhdGUgbWFjaGluZSwKIAkJICogbG9hZCBib290c3RyYXAgcHJvZ3JhbSBpbnRvIHByb2Nlc3NvcidzIG1lbW9yeSwKIAkJICogcHJlcGFyZSB0byBsb2FkIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KLQkJcmMgPSBpd2wzOTQ1X2xvYWRfYnNtKHByaXYpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gc2V0IHVwIGJvb3RzdHJhcCB1Q29kZTogJWRcbiIsIHJjKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByYyk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwogCQlpd2wzOTQ1X25pY19zdGFydChwcml2KTsKIAotCQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC01OTQ5LDcgKzMxNjMsNyBAQAogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNTk2Miw4ICszMTc2LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIGluaXRfYWxpdmVfc3RhcnQud29yayk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgaW5pdF9hbGl2ZV9zdGFydC53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNTk3NSw4ICszMTg5LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19hbGl2ZV9zdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNTk4Niw2NiArMzIwMCwzMSBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3JmX2tpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yZmtpbGxfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByZl9raWxsKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZmtpbGxfcG9sbC53b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHByaXYtPnN0YXR1czsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKKwlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpCisJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJZWxzZQorCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOworCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnN0YXR1cykgIT0gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQorCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwpOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMiAqIEhaKSk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SRl9LSUxMLAotCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCi0JCQkgICJkZXZpY2VcbiIpOwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9IGVsc2UgewotCi0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKQotCQkJSVdMX0RFQlVHX1JGX0tJTEwoIkNhbiBub3QgdHVybiByYWRpbyBiYWNrIG9uIC0gIgotCQkJCQkgICJkaXNhYmxlZCBieSBTVyBzd2l0Y2hcbiIpOwotCQllbHNlCi0JCQlJV0xfV0FSTklORygiUmFkaW8gRnJlcXVlbmN5IEtpbGwgU3dpdGNoIGlzIE9uOlxuIgotCQkJCSAgICAiS2lsbCBzd2l0Y2ggbXVzdCBiZSB0dXJuZWQgb2ZmIGZvciAiCi0JCQkJICAgICJ3aXJlbGVzcyBuZXR3b3JraW5nIHRvIHdvcmsuXG4iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiB9CiAKICNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHNjYW5fY2hlY2sud29yayk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sCi0JCQkgICJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nIGFkYXB0ZXIgKCVkbXMpXG4iLAotCQkJICBqaWZmaWVzX3RvX21zZWNzKElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HKSk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCWl3bDM5NDVfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgcmVxdWVzdF9zY2FuKTsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVxdWVzdF9zY2FuKTsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQpLAogCQkubWV0YS5mbGFncyA9IENNRF9TSVpFX0hVR0UsCkBAIC02MDYxLDggKzMyNDAsOCBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9XQVJOSU5HKCJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9XQVJOKHByaXYsICJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02MDc0LDM0ICszMjUzLDM2IEBACiAJLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9yIHNjaGVkdWxlZCBpZiB0aGVyZSBpcyBjdXJyZW50bHkKIAkgKiBhIHNjYW4gYWN0aXZlIGluIHRoZSBoYXJkd2FyZS4gKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKLQkJCSAgICAgICAiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk11bHRpcGxlIGNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0cyAgIgorCQkJCSJJZ25vcmluZyBzZWNvbmQgcmVxdWVzdC5cbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwKKwkJCSJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgdW5pbml0aWFsaXplZC4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsCisJCQkiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghcHJpdi0+c2Nhbl9iYW5kcykgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjExOSwxNCArMzMwMCwxNCBAQAogCXNjYW4tPnF1aWV0X3BsY3BfdGggPSBJV0xfUExDUF9RVUlFVF9USFJFU0g7CiAJc2Nhbi0+cXVpZXRfdGltZSA9IElXTF9BQ1RJVkVfUVVJRVRfVElNRTsKIAotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKIAkJdTE2IGludGVydmFsID0gMDsKIAkJdTMyIGV4dHJhOwogCQl1MzIgc3VzcGVuZF90aW1lID0gMTAwOwogCQl1MzIgc2Nhbl9zdXNwZW5kX3RpbWUgPSAxMDA7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJSVdMX0RFQlVHX0lORk8oIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2Nhbm5pbmcgd2hpbGUgYXNzb2NpYXRlZC4uLlxuIik7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJaW50ZXJ2YWwgPSBwcml2LT5iZWFjb25faW50OwpAQCAtNjE0OCwxNSArMzMyOSwxNCBAQAogCQkgICAgKGV4dHJhIHwgKChzdXNwZW5kX3RpbWUgJSBpbnRlcnZhbCkgKiAxMDI0KSk7CiAKIAkJc2Nhbi0+c3VzcGVuZF90aW1lID0gY3B1X3RvX2xlMzIoc2Nhbl9zdXNwZW5kX3RpbWUpOwotCQlJV0xfREVCVUdfU0NBTigic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAic3VzcGVuZF90aW1lIDB4JVggYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJICAgICAgIHNjYW5fc3VzcGVuZF90aW1lLCBpbnRlcnZhbCk7CiAJfQogCiAJLyogV2Ugc2hvdWxkIGFkZCB0aGUgYWJpbGl0eSBmb3IgdXNlciB0byBsb2NrIHRvIFBBU1NJVkUgT05MWSAqLwogCWlmIChwcml2LT5vbmVfZGlyZWN0X3NjYW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4KLQkJICAgICgiS2lja2luZyBvZmYgb25lIGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAotCQkgICAgIHByaW50X3NzaWQoc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWQsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJLaWNraW5nIG9mZiBvbmUgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCisJCQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZCwKIAkJCQlwcml2LT5kaXJlY3Rfc3NpZF9sZW4pKTsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uaWQgPSBXTEFOX0VJRF9TU0lEOwogCQlzY2FuLT5kaXJlY3Rfc2NhblswXS5sZW4gPSBwcml2LT5kaXJlY3Rfc3NpZF9sZW47CkBAIC02MTY0LDE1ICszMzQ0LDEyIEBACiAJCSAgICAgICBwcml2LT5kaXJlY3Rfc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKIAkJbl9wcm9iZXMrKzsKIAl9IGVsc2UKLQkJSVdMX0RFQlVHX1NDQU4oIktpY2tpbmcgb2ZmIG9uZSBpbmRpcmVjdCBzY2FuLlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJLaWNraW5nIG9mZiBvbmUgaW5kaXJlY3Qgc2Nhbi5cbiIpOwogCiAJLyogV2UgZG9uJ3QgYnVpbGQgYSBkaXJlY3Qgc2NhbiBwcm9iZSByZXF1ZXN0OyB0aGUgdUNvZGUgd2lsbCBkbwogCSAqIHRoYXQgYmFzZWQgb24gdGhlIGRpcmVjdF9tYXNrIGFkZGVkIHRvIGVhY2ggY2hhbm5lbCBlbnRyeSAqLwotCXNjYW4tPnR4X2NtZC5sZW4gPSBjcHVfdG9fbGUxNigKLQkJaXdsMzk0NV9maWxsX3Byb2JlX3JlcShwcml2LCAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKLQkJCUlXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOwogCXNjYW4tPnR4X2NtZC50eF9mbGFncyA9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7Ci0Jc2Nhbi0+dHhfY21kLnN0YV9pZCA9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXNjYW4tPnR4X2NtZC5zdG9wX3RpbWUubGlmZV90aW1lID0gVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURTsKIAogCS8qIGZsYWdzICsgcmF0ZSBzZWxlY3Rpb24gKi8KQEAgLTYxODcsMTAgKzMzNjQsMTUgQEAKIAkJc2Nhbi0+Z29vZF9DUkNfdGggPSBJV0xfR09PRF9DUkNfVEg7CiAJCWJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwogCX0gZWxzZSB7Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCisJCWl3bF9maWxsX3Byb2JlX3JlcShwcml2LCBiYW5kLAorCQkJCSAgIChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCSAgIElXTF9NQVhfU0NBTl9TSVpFIC0gc2l6ZW9mKCpzY2FuKSkpOworCiAJLyogc2VsZWN0IFJ4IGFudGVubmFzICovCiAJc2Nhbi0+ZmxhZ3MgfD0gaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhwcml2KTsKIApAQCAtNjIwMyw3ICszMzg1LDcgQEAKIAkJCSh2b2lkICopJnNjYW4tPmRhdGFbbGUxNl90b19jcHUoc2Nhbi0+dHhfY21kLmxlbildKTsKIAogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKLQkJSVdMX0RFQlVHX1NDQU4oImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTYyMTMsNyArMzM5NSw3IEBACiAJc2Nhbi0+bGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbik7CiAKIAlzZXRfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJZ290byBkb25lOwogCkBAIC02MjM5LDcgKzM0MjEsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHVwKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCB1cCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTYyNDcsMTIgKzM0MjksMTIgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJX19pd2wzOTQ1X3VwKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHJlc3RhcnQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlc3RhcnQpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02MjYzLDggKzM0NDUsOCBAQAogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByeF9yZXBsZW5pc2gpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJ4X3JlcGxlbmlzaCk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTYyNzYsMTggKzM0NTgsMTggQEAKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQlJV0xfRVJST1IoIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKKwkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCiAKLQlJV0xfREVCVUdfQVNTT0MoIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKQEAgLTYyOTYsMjYgKzM0NzgsMjYgQEAKIAlpZiAoIXByaXYtPnZpZiB8fCAhcHJpdi0+aXNfb3BlbikKIAkJcmV0dXJuOwogCi0JaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CisJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMjAwKTsKIAogCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAKLQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl90aW1lX2NtZCkpOworCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKIAlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOwotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAogCQkJICAgICAgc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwgJnByaXYtPnJ4b25fdGltaW5nKTsKIAlpZiAocmMpCi0JCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gY3B1X3RvX2xlMTYocHJpdi0+YXNzb2NfaWQpOwogCi0JSVdMX0RFQlVHX0FTU09DKCJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YmVhY29uX2ludCk7CiAKIAlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTYzNTUsNTYgKzM1MzcsMTkgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQkgSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAorCQkgSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKIAkJCSAgIF9fZnVuY19fLCBwcml2LT5pd19tb2RlKTsKIAkJYnJlYWs7CiAJfQogCi0JaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CisJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKIAogCS8qIHdlIGhhdmUganVzdCBhc3NvY2lhdGVkLCBkb24ndCBzdGFydCBzY2FuIHRvbyBlYXJseSAqLwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArIElXTF9ERUxBWV9ORVhUX1NDQU47CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYWJvcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBhYm9ydF9zY2FuKTsKLQotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0Jc2V0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JaXdsMzk0NV9zZW5kX3NjYW5fYWJvcnQocHJpdik7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBzY2FuX2NvbXBsZXRlZCk7Ci0KLQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfU0NBTiwgIlNDQU4gY29tcGxldGUgc2NhblxuIik7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9tYWNfY29uZmlnKHByaXYtPmh3LCAwKTsKLQotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odyk7Ci0KLQkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKLQkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHByaXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBtYWM4MDIxMSBlbnRyeSBwb2ludCBmdW5jdGlvbnMKQEAgLTY0MTUsMzYgKzM1NjAsMjIgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJldDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpKSB7Ci0JCUlXTF9FUlJPUigiRmFpbCB0byBwY2lfZW5hYmxlX2RldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwY2lfcmVzdG9yZV9zdGF0ZShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgaXdsMzk0NV9pc3IsIElSUUZfU0hBUkVELAotCQkJICBEUlZfTkFNRSwgcHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOwotCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCkpOworCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSk7CiAJLyogZmV0Y2ggdWNvZGUgZmlsZSBmcm9tIGRpc2ssIGFsbG9jIGFuZCBjb3B5IHRvIGJ1cy1tYXN0ZXIgYnVmZmVycyAuLi4KIAkgKiB1Y29kZSBmaWxlbmFtZSBhbmQgbWF4IHNpemVzIGFyZSBjYXJkLXNwZWNpZmljLiAqLwogCiAJaWYgKCFwcml2LT51Y29kZV9jb2RlLmxlbikgewogCQlyZXQgPSBpd2wzOTQ1X3JlYWRfdWNvZGUocHJpdik7CiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHJlYWQgbWljcm9jb2RlOiAlZFxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCQl9CkBAIC02NDU0LDEyICszNTg1LDEyIEBACiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCWl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKKwlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0IFVQIHdvcmsuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnQgVVAgd29yay5cbiIpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTl9TVVNQRU5ELCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CkBAIC02NDcxLDg2ICszNjAyLDg3IEBACiAJCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKIAlpZiAoIXJldCkgewogCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiV2FpdCBmb3IgU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOworCQkJSVdMX0VSUihwcml2LAorCQkJCSJXYWl0IGZvciBTVEFSVF9BTElWRSB0aW1lb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCQl9CiAJfQogCisJLyogdWNvZGUgaXMgcnVubmluZyBhbmQgd2lsbCBzZW5kIHJma2lsbCBub3RpZmljYXRpb25zLAorCSAqIG5vIG5lZWQgdG8gcG9sbCB0aGUga2lsbHN3aXRjaCBzdGF0ZSBhbnltb3JlICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZraWxsX3BvbGwpOworCiAJcHJpdi0+aXNfb3BlbiA9IDE7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiAKIG91dF9yZWxlYXNlX2lycToKLQlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOwotb3V0X2Rpc2FibGVfbXNpOgotCXBjaV9kaXNhYmxlX21zaShwcml2LT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocHJpdi0+cGNpX2Rldik7CiAJcHJpdi0+aXNfb3BlbiA9IDA7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGZhaWxlZFxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGZhaWxlZFxuIik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghcHJpdi0+aXNfb3BlbikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2tpcFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBza2lwXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaXYtPmlzX29wZW4gPSAwOwogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CiAJCS8qIHN0b3AgbWFjLCBjYW5jZWwgYW55IHNjYW4gcmVxdWVzdCBhbmQgY2xlYXIKIAkJICogUlhPTl9GSUxURVJfQVNTT0NfTVNLIEJJVAogCQkgKi8KIAkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJfQogCiAJaXdsMzk0NV9kb3duKHByaXYpOwogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX3NhdmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJLyogc3RhcnQgcG9sbGluZyB0aGUga2lsbHN3aXRjaCBzdGF0ZSBhZ2FpbiAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZmtpbGxfcG9sbCwKKwkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMiAqIEhaKSk7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCUlXTF9ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCisJSVdMX0RFQlVHX1RYKHByaXYsICJkZXYtPnhtaXQoJWQgYnl0ZXMpIGF0IHJhdGUgMHglMDJ4XG4iLCBza2ItPmxlbiwKIAkJICAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSktPmJpdHJhdGUpOwogCiAJaWYgKGl3bDM5NDVfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlcjogdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CiAKIAlpZiAocHJpdi0+dmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKQEAgLTY1NjMsMTYgKzM2OTUsMTYgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJTZXQ6ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIlNldDogJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CiAJCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9CiAKLQlpZiAoaXdsMzk0NV9pc19yZWFkeShwcml2KSkKKwlpZiAoaXdsX2lzX3JlYWR5KHByaXYpKQogCQlpd2wzOTQ1X3NldF9tb2RlKHByaXYsIGNvbmYtPnR5cGUpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU4NSwyNCArMzcxNywyNSBAQAogICovCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodW5saWtlbHkoIWl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuICYmCisJaWYgKHVubGlrZWx5KCFpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuICYmCiAJCSAgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAkJc2V0X2JpdChTVEFUVVNfQ09ORl9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwpAQCAtNjYxMCwyNSArMzc0MywyNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKLQkJCQkJICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOworCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLAorCQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIFslZF0gaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKLQkJCSAgICAgICBjb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LAorCQkJCSJDaGFubmVsICVkIFslZF0gaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKKwkJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbCk7CiAKLQlpd2wzOTQ1X3NldF9mbGFnc19mb3JfcGh5bW9kZShwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwogCiAJLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAogCSAqIGZvciBlYWNoIHBoeW1vZGU7IHNpbmNlIHRoZSBwaHltb2RlIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0CiAJICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTY2MzksMjggKzM3NzMsMzIgQEAKIAl9CiAjZW5kaWYKIAotCWl3bDM5NDVfcmFkaW9fa2lsbF9zdyhwcml2LCAhY29uZi0+cmFkaW9fZW5hYmxlZCk7Ci0KLQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHJhZGlvIGRpc2FibGVkXG4iKTsKKwlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJiBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSB3YWl0aW5nIGZvciB1Q29kZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7CisJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7CisJCWl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8ocHJpdik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBraWxsXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAlpZiAobWVtY21wKCZwcml2LT5hY3RpdmVfcnhvbiwKIAkJICAgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpKQogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCWVsc2UKLQkJSVdMX0RFQlVHX0lORk8oIk5vIHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vdCByZS1zZW5kaW5nIHNhbWUgUlhPTiBjb25maWd1cmF0aW9uXG4iKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiBvdXQ6CiAJY2xlYXJfYml0KFNUQVRVU19DT05GX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwpAQCAtNjY2OCw3ICszODA2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NvbmZpZ19hcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CiAKQEAgLTY2NzYsMTkgKzM4MTQsMjAgQEAKIAkJcmV0dXJuOwogCiAJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZG9uZSBvbmx5IGF0IEFQIGJyaW5nIHVwICovCi0JaWYgKCEoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSkgeworCWlmICghKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSkgewogCiAJCS8qIFJYT04gLSB1bmFzc29jICh0byBzZXQgdGltaW5nIGNvbW1hbmQpICovCiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAogCQkvKiBSWE9OIFRpbWluZyAqLwotCQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl90aW1lX2NtZCkpOworCQltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX3RpbWVfY21kKSk7CiAJCWl3bDM5NDVfc2V0dXBfcnhvbl90aW1pbmcocHJpdik7Ci0JCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCi0JCQkJc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwgJnByaXYtPnJ4b25fdGltaW5nKTsKKwkJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAorCQkJCSAgICAgIHNpemVvZihwcml2LT5yeG9uX3RpbWluZyksCisJCQkJICAgICAgJnByaXYtPnJ4b25fdGltaW5nKTsKIAkJaWYgKHJjKQotCQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkJCSJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAkJLyogRklYTUU6IHdoYXQgc2hvdWxkIGJlIHRoZSBhc3NvY19pZCBmb3IgQVA/ICovCkBAIC02NzE2LDcgKzM4NTUsNyBAQAogCQkvKiByZXN0b3JlIFJYT04gYXNzb2MgKi8KIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7Ci0JCWl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsMzk0NV9icm9hZGNhc3RfYWRkciwgMCwgMCk7CisJCWl3bDM5NDVfYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDAsIDApOwogCX0KIAlpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChwcml2KTsKIApAQCAtNjcyNywxNiArMzg2NiwxNiBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmM7CiAKIAlpZiAoY29uZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChwcml2LT52aWYgIT0gdmlmKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTY3NTMsMTMgKzM4OTIsMTMgQEAKIAkJCXJldHVybiByYzsKIAl9CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGNvbmYtPmJzc2lkKQotCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkOiAlcE1cbiIsIGNvbmYtPmJzc2lkKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CiAKIC8qCiAgKiB2ZXJ5IGR1YmlvdXMgY29kZSB3YXMgaGVyZTsgdGhlIHByb2JlIGZpbHRlcmluZyBmbGFnIGlzIG5ldmVyIHNldDoKQEAgLTY3NzIsNyArMzkxMSw3IEBACiAJCWlmICghY29uZi0+YnNzaWQpIHsKIAkJCWNvbmYtPmJzc2lkID0gcHJpdi0+bWFjX2FkZHI7CiAJCQltZW1jcHkocHJpdi0+YnNzaWQsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQgd2FzIHNldCB0bzogJXBNXG4iLAogCQkJCQkgICBjb25mLT5ic3NpZCk7CiAJCX0KIAkJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtNjc4MSwxNyArMzkyMCwxNyBAQAogCQlwcml2LT5pYnNzX2JlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOwogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJZ290byBkb25lOwogCiAJaWYgKGNvbmYtPmJzc2lkICYmICFpc196ZXJvX2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpICYmCiAJICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihjb25mLT5ic3NpZCkpIHsKIAkJLyogSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgSFcgc2NhbiBnb2luZyBvbiBpbiB0aGUgYmFja2dyb3VuZAogCQkgKiB0aGVuIHdlIG5lZWQgdG8gY2FuY2VsIGl0IGVsc2UgdGhlIFJYT04gYmVsb3cgd2lsbCBmYWlsLiAqLwotCQlpZiAoaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgIgorCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgeworCQkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCiAJCQkJICAgICJhZnRlciAxMDBtc1xuIik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nOnNjYW4gYWJvcnQgZmFpbGVkXG4iKTsKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KQEAgLTY4MTMsNzUgKzM5NTIsMjkgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAl9CiAKICBkb25lOgotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKLQkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7Ci0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCX0KLQotCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncwotCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgotCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCi0JICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgotCSAqLwotCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAotCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJfQpAQCAtNjg5MSw3ICszOTg0LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOX0FGVEVSX0FTU09DIChIWio2KQpAQCAtNjkwMSwyMSArMzk5NCwyMyBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCQkJICAgICB1MzIgY2hhbmdlcykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRVJQX1BSRUFNQkxFICVkXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9QUkVBTUJMRSAlZFxuIiwKIAkJCQkgICBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKIAkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCQllbHNlCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKKwkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQorCQkJCX5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfQ1RTICVkXG4iLAorCQkJCSAgIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCAmJiAocHJpdi0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAJCWVsc2UKQEAgLTY5MjMsNyArNDAxOCw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYXMgdGhpcyBmdW5jdGlvbiBzaG91bGQKIAkJICogbmV2ZXIgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICovCiAJCWlmIChXQVJOX09OX09OQ0UoaW5faW50ZXJydXB0KCkpKQpAQCAtNjkzMSwxMCArNDAyNiw5IEBACiAJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKIAkJCXByaXYtPmFzc29jX2lkID0gYnNzX2NvbmYtPmFpZDsKIAkJCXByaXYtPmJlYWNvbl9pbnQgPSBic3NfY29uZi0+YmVhY29uX2ludDsKLQkJCXByaXYtPnRpbWVzdGFtcDAgPSBic3NfY29uZi0+dGltZXN0YW1wICYgMHhGRkZGRkZGRjsKLQkJCXByaXYtPnRpbWVzdGFtcDEgPSAoYnNzX2NvbmYtPnRpbWVzdGFtcCA+PiAzMikgJgotCQkJCQkgICAgIDB4RkZGRkZGRkY7CisJCQlwcml2LT50aW1lc3RhbXAgPSBic3NfY29uZi0+dGltZXN0YW1wOwogCQkJcHJpdi0+YXNzb2NfY2FwYWJpbGl0eSA9IGJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5OworCQkJcHJpdi0+cG93ZXJfZGF0YS5kdGltX3BlcmlvZCA9IGJzc19jb25mLT5kdGltX3BlcmlvZDsKIAkJCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gamlmZmllcyArCiAJCQkJCUlXTF9ERUxBWV9ORVhUX1NDQU5fQUZURVJfQVNTT0M7CiAJCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CkBAIC02OTQyLDE0MyArNDAzNiw5MSBAQAogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCX0gZWxzZSB7CiAJCQlwcml2LT5hc3NvY19pZCA9IDA7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsCisJCQkJCSJESVNBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKIAkJfQotCX0gZWxzZSBpZiAoY2hhbmdlcyAmJiBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+YXNzb2NfaWQpIHsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKKwl9IGVsc2UgaWYgKGNoYW5nZXMgJiYgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgcHJpdi0+YXNzb2NfaWQpIHsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LAorCQkJCQkiQXNzb2NpYXRlZCBDaGFuZ2VzICVkXG4iLCBjaGFuZ2VzKTsKIAkJCWl3bDM5NDVfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCX0KIAogfQogCi1zdGF0aWMgaW50IGl3bDM5NDVfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzc2lkLCBzaXplX3QgbGVuKQotewotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JREVDTEFSRV9TU0lEX0JVRihzc2lkX2J1Zik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCXJjID0gLUVJTzsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogd2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kICovCi0JaWYgKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzICYmCi0JCQl0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgewotCQlyYyA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JLyogaWYgd2UganVzdCBmaW5pc2hlZCBzY2FuIGFzayBmb3IgZGVsYXkgZm9yIGEgYnJvYWRjYXN0IHNjYW4gKi8KLQlpZiAoKGxlbiA9PSAwKSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwKLQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCXJjID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlpZiAobGVuKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJkaXJlY3Qgc2NhbiBmb3IgJXMgWyVkXVxuICIsCi0JCQkgICAgICAgcHJpbnRfc3NpZChzc2lkX2J1Ziwgc3NpZCwgbGVuKSwgKGludClsZW4pOwotCi0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICh1OCkKLQkJICAgIG1pbigodTgpIGxlbiwgKHU4KSBJV19FU1NJRF9NQVhfU0laRSk7Ci0JCW1lbWNweShwcml2LT5kaXJlY3Rfc3NpZCwgc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKLQl9IGVsc2UKLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKLQotCXJjID0gaXdsMzk0NV9zY2FuX2luaXRpYXRlKHByaXYpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByYyA9IDA7Ci0JdTggc3RhX2lkOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQgPSAwOworCXU4IHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047CisJdTggc3RhdGljX2tleTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X3BhcmFtX2h3Y3J5cHRvKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CisJaWYgKGl3bDM5NDVfbW9kX3BhcmFtcy5zd19jcnlwdG8pIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikpCi0JCS8qIG9ubHkgc3VwcG9ydCBwYWlyd2lzZSBrZXlzICovCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogaXdsX2JjYXN0X2FkZHI7CisJc3RhdGljX2tleSA9ICFpd2xfaXNfYXNzb2NpYXRlZChwcml2KTsKIAotCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCi0JCQkJICAgYWRkcik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmICghc3RhdGljX2tleSkgeworCQlzdGFfaWQgPSBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKKwkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNbm90IGluIHN0YXRpb24gbWFwLlxuIiwKKwkJCQkJICAgIGFkZHIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlICBTRVRfS0VZOgotCQlyYyA9IGl3bDM5NDVfdXBkYXRlX3N0YV9rZXlfaW5mbyhwcml2LCBrZXksIHN0YV9pZCk7Ci0JCWlmICghcmMpIHsKLQkJCWl3bDM5NDVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMSk7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJa2V5LT5od19rZXlfaWR4ID0gc3RhX2lkOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJzZXRfa2V5IHN1Y2Nlc3MsIHVzaW5nIGh3Y3J5cHRvXG4iKTsKLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwotCQl9CisJY2FzZSBTRVRfS0VZOgorCQlpZiAoc3RhdGljX2tleSkKKwkJCXJldCA9IGl3bDM5NDVfc2V0X3N0YXRpY19rZXkocHJpdiwga2V5KTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsMzk0NV9zZXRfZHluYW1pY19rZXkocHJpdiwga2V5LCBzdGFfaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOgotCQlyYyA9IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHByaXYsIHN0YV9pZCk7Ci0JCWlmICghcmMpIHsKLQkJCWl3bDM5NDVfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgMCk7Ci0JCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7Ci0JCX0KKwkJaWYgKHN0YXRpY19rZXkpCisJCQlyZXQgPSBpd2wzOTQ1X3JlbW92ZV9zdGF0aWNfa2V5KHByaXYpOworCQllbHNlCisJCQlyZXQgPSBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhwcml2LCBzdGFfaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCi0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocXVldWUgPj0gQUNfTlVNKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHF1ZXVlID49IEFDX05VTSAlZFxuIiwgcXVldWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTcwOTksMjkgKzQxNDEsMjkgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJaXdsMzk0NV9hY3RpdmF0ZV9xb3MocHJpdiwgMSk7Ci0JZWxzZSBpZiAocHJpdi0+YXNzb2NfaWQgJiYgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKQotCQlpd2wzOTQ1X2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKKwkJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKKwllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKKwkJaXdsX2FjdGl2YXRlX3Fvcyhwcml2LCAwKTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgaSwgYXZhaWw7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cTsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHE7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzEzMCw3ICs0MTcyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQUNfTlVNOyBpKyspIHsKIAkJdHhxID0gJnByaXYtPnR4cVtpXTsKIAkJcSA9ICZ0eHEtPnE7Ci0JCWF2YWlsID0gaXdsMzk0NV9xdWV1ZV9zcGFjZShxKTsKKwkJYXZhaWwgPSBpd2xfcXVldWVfc3BhY2UocSk7CiAKIAkJc3RhdHNbaV0ubGVuID0gcS0+bl93aW5kb3cgLSBhdmFpbDsKIAkJc3RhdHNbaV0ubGltaXQgPSBxLT5uX3dpbmRvdyAtIHEtPmhpZ2hfbWFyazsKQEAgLTcxMzksMzQgKzQxODEsMjQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X21hY19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X21hY19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKKwlpd2xfcmVzZXRfcW9zKHByaXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT5hc3NvY19pZCA9IDA7CiAJcHJpdi0+YXNzb2NfY2FwYWJpbGl0eSA9IDA7Ci0JcHJpdi0+Y2FsbF9wb3N0X2Fzc29jX2Zyb21fYmVhY29uID0gMDsKIAogCS8qIG5ldyBhc3NvY2lhdGlvbiBnZXQgcmlkIG9mIGlic3MgYmVhY29uIHNrYiAqLwogCWlmIChwcml2LT5pYnNzX2JlYWNvbikKQEAgLTcxNzUsMTUgKzQyMDcsMTQgQEAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKIAlwcml2LT5iZWFjb25faW50ID0gcHJpdi0+aHctPmNvbmYuYmVhY29uX2ludDsKLQlwcml2LT50aW1lc3RhbXAxID0gMDsKLQlwcml2LT50aW1lc3RhbXAwID0gMDsKKwlwcml2LT50aW1lc3RhbXAgPSAwOwogCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcHJpdi0+YmVhY29uX2ludCA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtNzE5Miw3ICs0MjIzLDcgQEAKIAkgKiBjbGVhciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgYml0CiAJKi8KIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCX0KQEAgLTcyMDAsMzMgKzQyMzEsMzQgQEAKIAkvKiBQZXIgbWFjODAyMTEuaDogVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLi4uICovCiAJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IGluIElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IGluIElCU1NcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KIAotCWl3bDM5NDVfc2V0X3JhdGUocHJpdik7CisJaXdsX3NldF9yYXRlKHByaXYpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAogfQogCiBzdGF0aWMgaW50IGl3bDM5NDVfbWFjX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX19sZTY0IHRpbWVzdGFtcDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IElCU1NcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTcyMzgsMTEgKzQyNzAsMTMgQEAKIAlwcml2LT5pYnNzX2JlYWNvbiA9IHNrYjsKIAogCXByaXYtPmFzc29jX2lkID0gMDsKKwl0aW1lc3RhbXAgPSAoKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YSktPnUuYmVhY29uLnRpbWVzdGFtcDsKKwlwcml2LT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdSh0aW1lc3RhbXApOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsMzk0NV9yZXNldF9xb3MocHJpdik7CisJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKIAogCWl3bDM5NDVfcG9zdF9hc3NvY2lhdGUocHJpdik7CiAKQEAgLTcyNTYsNyArNDI5MCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCiAvKgogICogVGhlIGZvbGxvd2luZyBhZGRzIGEgbmV3IGF0dHJpYnV0ZSB0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24KQEAgLTcyNjUsMzggKzQyOTksNDEgQEAKICAqCiAgKiBTZWUgdGhlIGxldmVsIGRlZmluaXRpb25zIGluIGl3bCBmb3IgZGV0YWlscy4KICAqLwotCi1zdGF0aWMgc3NpemVfdCBzaG93X2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOFhcbiIsIGl3bDM5NDVfZGVidWdfbGV2ZWwpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBwcml2LT5kZWJ1Z19sZXZlbCk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKLQl1MzIgdmFsOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CiAKLQl2YWwgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMCk7Ci0JaWYgKHAgPT0gYnVmKQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlJV0xfSU5GTyhwcml2LCAiJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKLQkJaXdsMzk0NV9kZWJ1Z19sZXZlbCA9IHZhbDsKKwkJcHJpdi0+ZGVidWdfbGV2ZWwgPSB2YWw7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIERSSVZFUl9BVFRSKGRlYnVnX2xldmVsLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgc2hvd19kZWJ1Z19sZXZlbCwgc3RvcmVfZGVidWdfbGV2ZWwpOworc3RhdGljIERFVklDRV9BVFRSKGRlYnVnX2xldmVsLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfZGVidWdfbGV2ZWwsIHN0b3JlX2RlYnVnX2xldmVsKTsKIAotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X0RFQlVHICovCisjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KIAogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wZXJhdHVyZShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCi0JaWYgKCFpd2wzOTQ1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpd2wzOTQ1X2h3X2dldF90ZW1wZXJhdHVyZShwcml2KSk7CkBAIC03MzA3LDIyICs0MzQ0LDIxIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3R4X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3R4X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAJdTMyIHZhbDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxMCk7CiAJaWYgKHAgPT0gYnVmKQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwkJSVdMX0lORk8ocHJpdiwgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQogCQlpd2wzOTQ1X2h3X3JlZ19zZXRfdHhwb3dlcihwcml2LCB2YWwpOwogCkBAIC03MzM0LDcgKzQzNzAsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19mbGFncyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WFxuIiwgcHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MpOwogfQpAQCAtNzM0MywxNiArNDM3OSwxNiBAQAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAJdTMyIGZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzKSAhPSBmbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCi0JCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCisJCQlJV0xfV0FSTihwcml2LCAiQ291bGQgbm90IGNhbmNlbCBzY2FuLlxuIik7CiAJCWVsc2UgewotCQkJSVdMX0RFQlVHX0lORk8oIkNvbW1pdHRpbmcgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsCiAJCQkJICAgICAgIGZsYWdzKTsKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzKTsKIAkJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CkBAIC03MzY4LDcgKzQ0MDQsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19maWx0ZXJfZmxhZ3Moc3RydWN0IGRldmljZSAqZCwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNFhcbiIsCiAJCWxlMzJfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncykpOwpAQCAtNzM3OCwxNiArNDQxNCwxNiBAQAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAJdTMyIGZpbHRlcl9mbGFncyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MpICE9IGZpbHRlcl9mbGFncykgewogCQkvKiBDYW5jZWwgYW55IGN1cnJlbnRseSBydW5uaW5nIHNjYW5zLi4uICovCi0JCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpCisJCQlJV0xfV0FSTihwcml2LCAiQ291bGQgbm90IGNhbmNlbCBzY2FuLlxuIik7CiAJCWVsc2UgewotCQkJSVdMX0RFQlVHX0lORk8oIkNvbW1pdHRpbmcgcnhvbi5maWx0ZXJfZmxhZ3MgPSAiCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKIAkJCQkgICAgICAgIjB4JTA0WFxuIiwgZmlsdGVyX2ZsYWdzKTsKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPQogCQkJCWNwdV90b19sZTMyKGZpbHRlcl9mbGFncyk7CkBAIC03NDA3LDggKzQ0NDMsOCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19tZWFzdXJlbWVudChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9ub3RpZmljYXRpb24gbWVhc3VyZV9yZXBvcnQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwogCXUzMiBzaXplID0gc2l6ZW9mKG1lYXN1cmVfcmVwb3J0KSwgbGVuID0gMCwgb2ZzID0gMDsKIAl1OCAqZGF0YSA9ICh1OCAqKSZtZWFzdXJlX3JlcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzQ0MCw3ICs0NDc2LDcgQEAKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtcyA9IHsKIAkJLmNoYW5uZWwgPSBsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwKIAkJLnN0YXJ0X3RpbWUgPSBjcHVfdG9fbGU2NChwcml2LT5sYXN0X3RzZiksCkBAIC03NDY0LDcgKzQ1MDAsNyBAQAogCQkJdHlwZSA9IHNpbXBsZV9zdHJ0b3VsKHAgKyAxLCBOVUxMLCAwKTsKIAl9CiAKLQlJV0xfREVCVUdfSU5GTygiSW52b2tpbmcgbWVhc3VyZW1lbnQgb2YgdHlwZSAlZCBvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkludm9raW5nIG1lYXN1cmVtZW50IG9mIHR5cGUgJWQgb24gIgogCQkgICAgICAgImNoYW5uZWwgJWQgKGZvciAnJXMnKVxuIiwgdHlwZSwgcGFyYW1zLmNoYW5uZWwsIGJ1Zik7CiAJaXdsMzk0NV9nZXRfbWVhc3VyZW1lbnQocHJpdiwgJnBhcmFtcywgdHlwZSk7CiAKQEAgLTc0NzksNyArNDUxNSw3IEBACiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAKIAlwcml2LT5yZXRyeV9yYXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAlpZiAocHJpdi0+cmV0cnlfcmF0ZSA8PSAwKQpAQCAtNzQ5MSw1MCArNDUyNyw3NyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19yZXRyeV9yYXRlKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHByaXYtPnJldHJ5X3JhdGUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIocmV0cnlfcmF0ZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcmV0cnlfcmF0ZSwKIAkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7CiAKKwogc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JaW50IHJjOwotCWludCBtb2RlOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgbW9kZTsKIAotCW1vZGUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5KHByaXYpKSB7Ci0JCXJjID0gLUVBR0FJTjsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoKG1vZGUgPCAxKSB8fCAobW9kZSA+IElXTF9QT1dFUl9MSU1JVCkgfHwgKG1vZGUgPT0gSVdMX1BPV0VSX0FDKSkKLQkJbW9kZSA9IElXTF9QT1dFUl9BQzsKLQllbHNlCi0JCW1vZGUgfD0gSVdMX1BPV0VSX0VOQUJMRUQ7CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCi0JaWYgKG1vZGUgIT0gcHJpdi0+cG93ZXJfbW9kZSkgewotCQlyYyA9IGl3bDM5NDVfc2VuZF9wb3dlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9MRVZFTChtb2RlKSk7Ci0JCWlmIChyYykgewotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlwcml2LT5wb3dlcl9tb2RlID0gbW9kZTsKKwlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBtb2RlKTsKKwlpZiAocmV0KSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOworCQlnb3RvIG91dDsKIAl9Ci0KLQlyYyA9IGNvdW50OworCXJldCA9IGNvdW50OwogCiAgb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJaW50IG1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKKwlpbnQgc3lzdGVtID0gcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZzsKKwlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7CisJY2hhciAqcCA9IGJ1ZjsKKworCXN3aXRjaCAoc3lzdGVtKSB7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0FVVE86CisJCXAgKz0gc3ByaW50ZihwLCAiU1lTVEVNOmF1dG8iKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0FDOgorCQlwICs9IHNwcmludGYocCwgIlNZU1RFTTphYyIpOworCQlicmVhazsKKwljYXNlIElXTF9QT1dFUl9TWVNfQkFUVEVSWToKKwkJcCArPSBzcHJpbnRmKHAsICJTWVNURU06YmF0dGVyeSIpOworCQlicmVhazsKKwl9CisKKwlwICs9IHNwcmludGYocCwgIlx0TU9ERTolcyIsIChtb2RlIDwgSVdMX1BPV0VSX0FVVE8pID8KKwkJCSJmaXhlZCIgOiAiYXV0byIpOworCXAgKz0gc3ByaW50ZihwLCAiXHRJTkRFWDolZCIsIGxldmVsKTsKKwlwICs9IHNwcmludGYocCwgIlxuIik7CisJcmV0dXJuIHAgLSBidWYgKyAxOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVVNSLAorCQkgICBzaG93X3Bvd2VyX2xldmVsLCBzdG9yZV9wb3dlcl9sZXZlbCk7CisKICNkZWZpbmUgTUFYX1dYX1NUUklORyA4MAogCiAvKiBWYWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kICovCkBAIC03NTUzLDQxICs0NjE2LDYgQEAKIAkxMDAwMDAwCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWludCBsZXZlbCA9IElXTF9QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKLQljaGFyICpwID0gYnVmOwotCi0JcCArPSBzcHJpbnRmKHAsICIlZCAiLCBsZXZlbCk7Ci0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgSVdMX1BPV0VSX01PREVfQ0FNOgotCWNhc2UgSVdMX1BPV0VSX0FDOgotCQlwICs9IHNwcmludGYocCwgIihBQykiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKLQkJcCArPSBzcHJpbnRmKHAsICIoQkFUVEVSWSkiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcCArPSBzcHJpbnRmKHAsCi0JCQkgICAgICIoVGltZW91dCAlZG1zLCBQZXJpb2QgJWRtcykiLAotCQkJICAgICB0aW1lb3V0X2R1cmF0aW9uW2xldmVsIC0gMV0gLyAxMDAwLAotCQkJICAgICBwZXJpb2RfZHVyYXRpb25bbGV2ZWwgLSAxXSAvIDEwMDApOwotCX0KLQotCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJV0xfUE9XRVJfRU5BQkxFRCkpCi0JCXAgKz0gc3ByaW50ZihwLCAiIE9GRlxuIik7Ci0JZWxzZQotCQlwICs9IHNwcmludGYocCwgIiBcbiIpOwotCi0JcmV0dXJuIHAgLSBidWYgKyAxOwotCi19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcG93ZXJfbGV2ZWwsCi0JCSAgIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQogc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVscyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzYwMCwxNyArNDYyOCwxNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0aXN0aWNzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAl1MzIgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKTsKIAl1MzIgbGVuID0gMCwgb2ZzID0gMDsKLQl1OCAqZGF0YSA9ICh1OCAqKSZwcml2LT5zdGF0aXN0aWNzOworCXU4ICpkYXRhID0gKHU4ICopJnByaXYtPnN0YXRpc3RpY3NfMzk7CiAJaW50IHJjID0gMDsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYpOworCXJjID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKHJjKSB7CkBAIC03NjM4LDM0ICs0NjY2LDM0IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2FudGVubmEoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX2FsaXZlKHByaXYpKQorCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcml2LT5hbnRlbm5hKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9hbnRlbm5hKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJaW50IGFudDsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAwOwogCiAJaWYgKHNzY2FuZihidWYsICIlMWkiLCAmYW50KSAhPSAxKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAibm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAogCWlmICgoYW50ID49IDApICYmIChhbnQgPD0gMikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgYW50ZW5uYSBzZWxlY3QgdG8gJWQuXG4iLCBhbnQpOwotCQlwcml2LT5hbnRlbm5hID0gKGVudW0gaXdsMzk0NV9hbnRlbm5hKWFudDsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgYW50ZW5uYSBzZWxlY3QgdG8gJWQuXG4iLCBhbnQpOworCQlpd2wzOTQ1X21vZF9wYXJhbXMuYW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlhbnQ7CiAJfSBlbHNlCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgYW50ZW5uYSBzZWxlY3QgdmFsdWUgJWQuXG4iLCBhbnQpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIGFudGVubmEgc2VsZWN0IHZhbHVlICVkLlxuIiwgYW50KTsKIAogCiAJcmV0dXJuIGNvdW50OwpAQCAtNzY3Niw4ICs0NzA0LDggQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgKGludClwcml2LT5zdGF0dXMpOwogfQpAQCAtNzY5MSw3ICs0NzE5LDcgQEAKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAKIAlpZiAocFswXSA9PSAnMScpCi0JCWl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOworCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC03NzA1LDcgKzQ3MzMsNyBAQAogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAogCWlmIChwWzBdID09ICcxJykKLQkJaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7CisJCWl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KQEAgLTc3MTgsMjMgKzQ3NDYsMjQgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKKwlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShEUlZfTkFNRSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCiAJSU5JVF9XT1JLKCZwcml2LT51cCwgaXdsMzk0NV9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2wzOTQ1X2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsMzk0NV9iZ19zY2FuX2NvbXBsZXRlZCk7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZXF1ZXN0X3NjYW4sIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKTsKLQlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bDM5NDVfYmdfYWJvcnRfc2Nhbik7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpd2wzOTQ1X2JnX3JmX2tpbGwpOworCUlOSVRfV09SSygmcHJpdi0+cmZfa2lsbCwgaXdsX2JnX3JmX2tpbGwpOwogCUlOSVRfV09SSygmcHJpdi0+YmVhY29uX3VwZGF0ZSwgaXdsMzk0NV9iZ19iZWFjb25fdXBkYXRlKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCwgaXdsMzk0NV9iZ19pbml0X2FsaXZlX3N0YXJ0KTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+YWxpdmVfc3RhcnQsIGl3bDM5NDVfYmdfYWxpdmVfc3RhcnQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX2NoZWNrLCBpd2wzOTQ1X2JnX3NjYW5fY2hlY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yZmtpbGxfcG9sbCwgaXdsMzk0NV9yZmtpbGxfcG9sbCk7CisJSU5JVF9XT1JLKCZwcml2LT5zY2FuX2NvbXBsZXRlZCwgaXdsX2JnX3NjYW5fY29tcGxldGVkKTsKKwlJTklUX1dPUksoJnByaXYtPnJlcXVlc3Rfc2NhbiwgaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4pOworCUlOSVRfV09SSygmcHJpdi0+YWJvcnRfc2NhbiwgaXdsX2JnX2Fib3J0X3NjYW4pOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5zY2FuX2NoZWNrLCBpd2xfYmdfc2Nhbl9jaGVjayk7CiAKIAlpd2wzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CiAKQEAgLTc3NDIsNyArNDc3MSw3IEBACiAJCSAgICAgaXdsMzk0NV9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CiAKQEAgLTc3NjgsNyArNDc5Nyw5IEBACiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAogCSZkZXZfYXR0cl90eF9wb3dlci5hdHRyLAotCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwkmZGV2X2F0dHJfZGVidWdfbGV2ZWwuYXR0ciwKKyNlbmRpZgogCU5VTEwKIH07CiAKQEAgLTc3ODUsNzAgKzQ4MTYsOTMgQEAKIAkucmVtb3ZlX2ludGVyZmFjZSA9IGl3bDM5NDVfbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZyA9IGl3bDM5NDVfbWFjX2NvbmZpZywKIAkuY29uZmlnX2ludGVyZmFjZSA9IGl3bDM5NDVfbWFjX2NvbmZpZ19pbnRlcmZhY2UsCi0JLmNvbmZpZ3VyZV9maWx0ZXIgPSBpd2wzOTQ1X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBpd2xfY29uZmlndXJlX2ZpbHRlciwKIAkuc2V0X2tleSA9IGl3bDM5NDVfbWFjX3NldF9rZXksCi0JLmdldF9zdGF0cyA9IGl3bDM5NDVfbWFjX2dldF9zdGF0cywKIAkuZ2V0X3R4X3N0YXRzID0gaXdsMzk0NV9tYWNfZ2V0X3R4X3N0YXRzLAogCS5jb25mX3R4ID0gaXdsMzk0NV9tYWNfY29uZl90eCwKIAkucmVzZXRfdHNmID0gaXdsMzk0NV9tYWNfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsMzk0NV9ic3NfaW5mb19jaGFuZ2VkLAotCS5od19zY2FuID0gaXdsMzk0NV9tYWNfaHdfc2NhbgorCS5od19zY2FuID0gaXdsX21hY19od19zY2FuCiB9OwogCi1zdGF0aWMgaW50IGl3bDM5NDVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBpd2wzOTQ1X2luaXRfZHJ2KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsXzM5NDVfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAKLQkvKioqKioqKioqKioqKioqKioqKioqKioKLQkgKiAxLiBBbGxvY2F0aW5nIEhXIGRhdGEKLQkgKiAqKioqKioqKioqKioqKioqKioqKi8KKwlwcml2LT5yZXRyeV9yYXRlID0gMTsKKwlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKLQkvKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwotCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLiAqLwotCWlmIChpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbikgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIGh3X3NjYW5cbiIpOwotCQlpd2wzOTQ1X2h3X29wcy5od19zY2FuID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CisKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisKKwkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLworCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisKKwlwcml2LT5kYXRhX3JldHJ5X2xpbWl0ID0gLTE7CisJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CisJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CisJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCWl3bF9yZXNldF9xb3MocHJpdik7CisKKwlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKKwlwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnZhbCA9IDA7CisKKwlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7CisJLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQ0FNIG1vZGUgKi8KKwlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CisKKwlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKKwkJSVdMX1dBUk4ocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCisJCQkgZWVwcm9tLT52ZXJzaW9uKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CiAJfQogCi0JaWYgKChpd2wzOTQ1X3BhcmFtX3F1ZXVlc19udW0gPiBJV0wzOV9NQVhfTlVNX1FVRVVFUykgfHwKLQkgICAgKGl3bDM5NDVfcGFyYW1fcXVldWVzX251bSA8IElXTF9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKLQkJCSAgSVdMX01JTl9OVU1fUVVFVUVTLCBJV0wzOV9NQVhfTlVNX1FVRVVFUyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCS8qIFNldCB1cCB0eHBvd2VyIHNldHRpbmdzIGluIGRyaXZlciBmb3IgYWxsIGNoYW5uZWxzICovCisJaWYgKGl3bDM5NDVfdHhwb3dlcl9zZXRfZnJvbV9lZXByb20ocHJpdikpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CiAKLQkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCi0JICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9wcml2KSwgJml3bDM5NDVfaHdfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyBnZW9zIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfY2hhbm5lbF9tYXA7CiAJfQorCWl3bDM5NDVfaW5pdF9od19yYXRlcyhwcml2LCBwcml2LT5pZWVlX3JhdGVzKTsKIAotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKIAotCXByaXYgPSBody0+cHJpdjsKLQlwcml2LT5odyA9IGh3OwotCXByaXYtPnBjaV9kZXYgPSBwZGV2OwotCXByaXYtPmNmZyA9IGNmZzsKK2Vycl9mcmVlX2NoYW5uZWxfbWFwOgorCWl3bF9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOworZXJyOgorCXJldHVybiByZXQ7Cit9CiAKLQlJV0xfREVCVUdfSU5GTygiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CitzdGF0aWMgaW50IGl3bDM5NDVfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CisKIAlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtMzk0NS1ycyI7CiAJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYpOwogCi0JLyogU2VsZWN0IGFudGVubmEgKG1heSBiZSBoZWxwZnVsIGlmIG9ubHkgb25lIGFudGVubmEgaXMgY29ubmVjdGVkKSAqLwotCXByaXYtPmFudGVubmEgPSAoZW51bSBpd2wzOTQ1X2FudGVubmEpaXdsMzk0NV9wYXJhbV9hbnRlbm5hOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaXdsMzk0NV9kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfcGFyYW1fZGVidWc7Ci0JYXRvbWljX3NldCgmcHJpdi0+cmVzdHJpY3RfcmVmY250LCAwKTsKLSNlbmRpZgotCiAJLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKQEAgLTc4NTcsMTEgKzQ5MTEsODMgQEAKIAkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKIAkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAotCWh3LT53aXBoeS0+ZndfaGFuZGxlc19yZWd1bGF0b3J5ID0gdHJ1ZTsKKwlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKIAotCS8qIDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLworCS8qIERlZmF1bHQgdmFsdWU7IDQgRURDQSBRT1MgcHJpb3JpdGllcyAqLwogCWh3LT5xdWV1ZXMgPSA0OwogCisJaHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKKworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKworCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKQorCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqCisJICogMS4gQWxsb2NhdGluZyBIVyBkYXRhCisJICogKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCisJICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcsICZpd2wzOTQ1X2h3X29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYgPSBody0+cHJpdjsKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisKKwlpZiAoKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID4gSVdMMzlfTUFYX05VTV9RVUVVRVMpIHx8CisJICAgICAoaXdsMzk0NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMMzlfTUFYX05VTV9RVUVVRVMpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9pZWVlODAyMTFfZnJlZV9odzsKKwl9CisKKwkvKgorCSAqIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCisJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uCisJICovCisJaWYgKGl3bDM5NDVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBod19zY2FuXG4iKTsKKwkJaXdsMzk0NV9od19vcHMuaHdfc2NhbiA9IE5VTEw7CisJfQorCisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CisJcHJpdi0+Y2ZnID0gY2ZnOworCXByaXYtPnBjaV9kZXYgPSBwZGV2OworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlwcml2LT5kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZzsKKwlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOworI2VuZGlmCisKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICogMi4gSW5pdGlhbGl6aW5nIFBDSSBidXMKIAkgKiAqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzg3Niw3ICs1MDAyLDcgQEAKIAlpZiAoIWVycikKIAkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJfQogCkBAIC03ODk0LDk4ICs1MDIwLDU4IEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfYmFzZSA9ICVwXG4iLCBwcml2LT5od19iYXNlKTsKIAogCS8qIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKIAkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDB4MDApOwogCi0JLyogbmljIGluaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCi0JCQlDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUik7Ci0KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQllcnIgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCS8qIGFtcCBpbml0ICovCisJZXJyID0gcHJpdi0+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+cmZfb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoKGNoYXIgKilidWYsIE5VTEwsIDE2KTsKKwlwcml2LT5yZl9vZmZzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlyZXMgPSBjb3VudDsKIG91dF91bmxvY2s6CiAJZnJlZV9wYWdlKGFkZHIpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAKIH0KIAogc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHBlcm07CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKIAl7ICJpbmZvIiwgMDQ0NCwgRk9QUyhsYnNfZGV2X2luZm8sIHdyaXRlX2ZpbGVfZHVtbXkpLCB9LAogCXsgImdldHNjYW50YWJsZSIsIDA0NDQsIEZPUFMobGJzX2dldHNjYW50YWJsZSwKIAkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJCQlsYnNfc2xlZXBwYXJhbXNfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0gewogCXsibG93X3Jzc2kiLCAwNjQ0LCBGT1BTKGxic19sb3dyc3NpX3JlYWQsCiAJCQkJbGJzX2xvd3Jzc2lfd3JpdGUpLCB9LAogCXsibG93X3NuciIsIDA2NDQsIEZPUFMobGJzX2xvd3Nucl9yZWFkLApAQCAtNzA4LDcgKzcwOCw3IEBACiAJCQkJbGJzX2hpZ2hzbnJfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX3JlZ3NfZmlsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CiAJeyJyZG1hYyIsIDA2NDQsIEZPUFMobGJzX3JkbWFjX3JlYWQsIGxic19yZG1hY193cml0ZSksIH0sCiAJeyJ3cm1hYyIsIDA2MDAsIEZPUFMoTlVMTCwgbGJzX3dybWFjX3dyaXRlKSwgfSwKIAl7InJkYmJwIiwgMDY0NCwgRk9QUyhsYnNfcmRiYnBfcmVhZCwgbGJzX3JkYmJwX3dyaXRlKSwgfSwKQEAgLTczNSw3ICs3MzUsNyBAQAogdm9pZCBsYnNfZGVidWdmc19pbml0X29uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzICpmaWxlczsKKwljb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgKmZpbGVzOwogCWlmICghbGJzX2RpcikKIAkJZ290byBleGl0OwogCkBAIC05MzgsNyArOTM4LDcgQEAKIAlyZXR1cm4gKHNzaXplX3QpY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsYnNfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxic19kZWJ1Z19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCiAJLndyaXRlID0gbGJzX2RlYnVnZnNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggYzM2NGU0Yy4uZThkZmRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBMQlNfREVCX0hFWAkweDAwMjAwMDAwCiAjZGVmaW5lIExCU19ERUJfU0RJTwkweDAwNDAwMDAwCiAjZGVmaW5lIExCU19ERUJfU1lTRlMJMHgwMDgwMDAwMAorI2RlZmluZSBMQlNfREVCX1NQSQkweDAxMDAwMDAwCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbGJzX2RlYnVnOwogCkBAIC04NCw2ICs4NSw3IEBACiAjZGVmaW5lIGxic19kZWJfdGhyZWFkKGZtdCwgYXJncy4uLikgICAgTEJTX0RFQl9MTChMQlNfREVCX1RIUkVBRCwgIiB0aHJlYWQiLCBmbXQsICMjYXJncykKICNkZWZpbmUgbGJzX2RlYl9zZGlvKGZtdCwgYXJncy4uLikgICAgICBMQlNfREVCX0xMKExCU19ERUJfU0RJTywgIiBzZGlvIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfc3lzZnMoZm10LCBhcmdzLi4uKSAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NZU0ZTLCAiIHN5c2ZzIiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIGxic19kZWJfc3BpKGZtdCwgYXJncy4uLikgICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NQSSwgIiBzcGkiLCBmbXQsICMjYXJncykKIAogI2RlZmluZSBsYnNfcHJfaW5mbyhmb3JtYXQsIGFyZ3MuLi4pIFwKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FIjogIiBmb3JtYXQsICMjIGFyZ3MpCkBAIC0yNjMsNiArMjY1LDcgQEAKIAogI2RlZmluZQlDTURfRl9IT1NUQ01ECQkoMSA8PCAwKQogI2RlZmluZSBGV19DQVBJTkZPX1dQQSAgCSgxIDw8IDApCisjZGVmaW5lIEZXX0NBUElORk9fUFMgIAkJKDEgPDwgMSkKICNkZWZpbmUgRldfQ0FQSU5GT19GSVJNV0FSRV9VUEdSQURFCSgxIDw8IDEzKQogI2RlZmluZSBGV19DQVBJTkZPX0JPT1QyX1VQR1JBREUJKDE8PDE0KQogI2RlZmluZSBGV19DQVBJTkZPX1BFUlNJU1RFTlRfQ09ORklHCSgxPDwxNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKaW5kZXggZGQ2ODJjNC4uMjdlODFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKQEAgLTEwOSw3ICsxMDksNiBAQAogCXZvaWQgKmNhcmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2RldjsgLyogVmlydHVhbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqcnRhcF9uZXRfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKaW5kZXggMjc3ZmYxOS4uZDQ0NTdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaApAQCAtNjYsNiArNjYsNyBAQAogI2RlZmluZSBDTURfODAyXzExX0xFRF9HUElPX0NUUkwJCTB4MDA0ZQogI2RlZmluZSBDTURfODAyXzExX0VFUFJPTV9BQ0NFU1MJCTB4MDA1OQogI2RlZmluZSBDTURfODAyXzExX0JBTkRfQ09ORklHCQkJMHgwMDU4CisjZGVmaW5lIENNRF9HU1BJX0JVU19DT05GSUcJCQkweDAwNWEKICNkZWZpbmUgQ01EXzgwMl8xMURfRE9NQUlOX0lORk8JCQkweDAwNWIKICNkZWZpbmUgQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwJCQkweDAwNWUKICNkZWZpbmUgQ01EXzgwMl8xMV9TTEVFUF9QQVJBTVMJCQkweDAwNjYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaAppbmRleCBmNmE3OWE2Li5hODk5YWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCkBAIC0yMjEsNiArMjIxLDE0IEBACiAJdTggbWFjbGlzdFtFVEhfQUxFTiAqIE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGNtZF9kc19nc3BpX2J1c19jb25maWcgeworCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBidXNfZGVsYXlfbW9kZTsKKwlfX2xlMTYgaG9zdF90aW1lX2RlbGF5X3RvX3JlYWRfcG9ydDsKKwlfX2xlMTYgaG9zdF90aW1lX2RlbGF5X3RvX3JlYWRfcmVnaXN0ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlIHsKIAl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKIAl1OCBhdXRodHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCmluZGV4IDg0MmEwOGQuLmNlZGVhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CiAJCXU4IHZhbCA9IGlmX2NzX3JlYWQ4KGNhcmQsIGFkZHIpOwogCQlpZiAodmFsID09IHJlZykKLQkJCXJldHVybiBpOworCQkJcmV0dXJuIDA7CiAJCXVkZWxheSg1KTsKIAl9CiAJcmV0dXJuIC1FVElNRTsKQEAgLTQyMSw3ICs0MjEsNyBAQAogCWxlbiA9IGlmX2NzX3JlYWQxNihwcml2LT5jYXJkLCBJRl9DU19SRUFEX0xFTik7CiAJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7CiAJCWxic19wcl9lcnIoImNhcmQgZGF0YSBidWZmZXIgaGFzIGludmFsaWQgIyBvZiBieXRlcyAoJWQpXG4iLCBsZW4pOwotCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlnb3RvIGRhdF9lcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggNDUxOWQ3My4uNzZmNGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwpAQCAtOTUsNiArOTUsOCBAQAogCiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgaWZfc2Rpb19wYWNrZXQJKnBhY2tldHM7CisKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlwYWNrZXRfd29ya2VyOwogfTsKIApAQCAtMjA5LDYgKzIxMSw5IEBACiAJCWV2ZW50ID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBJRl9TRElPX0VWRU5ULCAmcmV0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OworCisJCS8qIHJpZ2h0IHNoaWZ0IDMgYml0cyB0byBnZXQgdGhlIGV2ZW50IGlkICovCisJCWV2ZW50ID4+PSAzOwogCX0gZWxzZSB7CiAJCWlmIChzaXplIDwgNCkgewogCQkJbGJzX2RlYl9zZGlvKCJldmVudCBwYWNrZXQgdG9vIHNtYWxsICglZCBieXRlcylcbiIsCkBAIC03NDMsNyArNzQ4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAotCXNjaGVkdWxlX3dvcmsoJmNhcmQtPnBhY2tldF93b3JrZXIpOworCXF1ZXVlX3dvcmsoY2FyZC0+d29ya3F1ZXVlLCAmY2FyZC0+cGFja2V0X3dvcmtlcik7CiAKIAlyZXQgPSAwOwogCkBAIC04MzMsNiArODM4LDcgQEAKIAljYXJkLT5mdW5jID0gZnVuYzsKIAljYXJkLT5tb2RlbCA9IG1vZGVsOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKwljYXJkLT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJsaWJlcnRhc19zZGlvIik7CiAJSU5JVF9XT1JLKCZjYXJkLT5wYWNrZXRfd29ya2VyLCBpZl9zZGlvX2hvc3RfdG9fY2FyZF93b3JrZXIpOwogCiAJZm9yIChpID0gMDtpIDwgQVJSQVlfU0laRShpZl9zZGlvX21vZGVscyk7aSsrKSB7CkBAIC05MjEsMTUgKzkyNywxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FjdGl2YXRlX2NhcmQ7CiAKKwlpZiAocHJpdi0+ZndjYXBpbmZvICYgRldfQ0FQSU5GT19QUykKKwkJcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKKwogb3V0OgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIAogZXJyX2FjdGl2YXRlX2NhcmQ6Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlmcmVlX25ldGRldihwcml2LT5kZXYpOwotCWtmcmVlKHByaXYpOworCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsKIHJlY2xhaW06CiAJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwogcmVsZWFzZV9pbnQ6CkBAIC05MzksNiArOTQ3LDcgQEAKIHJlbGVhc2U6CiAJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CiBmcmVlOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAJd2hpbGUgKGNhcmQtPnBhY2tldHMpIHsKIAkJcGFja2V0ID0gY2FyZC0+cGFja2V0czsKIAkJY2FyZC0+cGFja2V0cyA9IGNhcmQtPnBhY2tldHMtPm5leHQ7CkBAIC05NjUsNyArOTc0LDggQEAKIAlsYnNfc3RvcF9jYXJkKGNhcmQtPnByaXYpOwogCWxic19yZW1vdmVfY2FyZChjYXJkLT5wcml2KTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKIAogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIAlzZGlvX3JlbGVhc2VfaXJxKGZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzMxMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKQEAgLTAsMCArMSwxMjE4IEBACisvKgorICoJbGludXgvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKyAqCisgKglEcml2ZXIgZm9yIE1hcnZlbGwgU1BJIFdMQU4gY2FyZHMuCisgKgorICoJQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqCUF1dGhvcnM6CisgKglBbmRyZXkgWXVyb3Zza3kgPGFuZHJleUBjb3p5Yml0LmNvbT4KKyAqCUNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+CisgKgorICoJSW5zcGlyZWQgYnkgaWZfc2Rpby5jLCBDb3B5cmlnaHQgMjAwNy0yMDA4IFBpZXJyZSBPc3NtYW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlICJob3N0LmgiCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJkZXYuaCIKKyNpbmNsdWRlICJpZl9zcGkuaCIKKworc3RydWN0IGlmX3NwaV9wYWNrZXQgeworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CisJdTE2CQkJCWJsZW47CisJdTgJCQkJYnVmZmVyWzBdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKK307CisKK3N0cnVjdCBpZl9zcGlfY2FyZCB7CisJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJc3RydWN0IGxic19wcml2YXRlCQkqcHJpdjsKKwlzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJY2hhcgkJCQloZWxwZXJfZndfbmFtZVtGSVJNV0FSRV9OQU1FX01BWF07CisJY2hhcgkJCQltYWluX2Z3X25hbWVbRklSTVdBUkVfTkFNRV9NQVhdOworCisJLyogVGhlIGNhcmQgSUQgYW5kIGNhcmQgcmV2aXNpb24sIGFzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gKi8KKwl1MTYJCQkJY2FyZF9pZDsKKwl1OAkJCQljYXJkX3JldjsKKworCS8qIFBpbiBudW1iZXIgZm9yIG91ciBHUElPIGNoaXAtc2VsZWN0LiAqLworCS8qIFRPRE86IE9uY2UgdGhlIGdlbmVyaWMgU1BJIGxheWVyIGhhcyBzb21lIGFkZGl0aW9uYWwgZmVhdHVyZXMsIHdlCisJICogc2hvdWxkIHRha2UgdGhpcyBvdXQgYW5kIHVzZSB0aGUgbm9ybWFsIGNoaXAgc2VsZWN0IGhlcmUuCisJICogV2UgbmVlZCBzdXBwb3J0IGZvciBjaGlwIHNlbGVjdCBkZWxheXMsIGFuZCBub3QgZHJvcHBpbmcgY2hpcHNlbGVjdAorCSAqIGFmdGVyIGVhY2ggd29yZC4gKi8KKwlpbnQJCQkJZ3Bpb19jczsKKworCS8qIFRoZSBsYXN0IHRpbWUgdGhhdCB3ZSBpbml0aWF0ZWQgYW4gU1BVIG9wZXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJCQlwcmV2X3hmZXJfdGltZTsKKworCWludAkJCQl1c2VfZHVtbXlfd3JpdGVzOworCXVuc2lnbmVkIGxvbmcJCQlzcHVfcG9ydF9kZWxheTsKKwl1bnNpZ25lZCBsb25nCQkJc3B1X3JlZ19kZWxheTsKKworCS8qIEhhbmRsZXMgYWxsIFNQSSBjb21tdW5pY2F0aW9uIChleGNlcHQgZm9yIEZXIGxvYWQpICovCisJc3RydWN0IHRhc2tfc3RydWN0CQkqc3BpX3RocmVhZDsKKwlpbnQJCQkJcnVuX3RocmVhZDsKKworCS8qIFVzZWQgdG8gd2FrZSB1cCB0aGUgc3BpX3RocmVhZCAqLworCXN0cnVjdCBzZW1hcGhvcmUJCXNwaV9yZWFkeTsKKwlzdHJ1Y3Qgc2VtYXBob3JlCQlzcGlfdGhyZWFkX3Rlcm1pbmF0ZWQ7CisKKwl1OAkJCQljbWRfYnVmZmVyW0lGX1NQSV9DTURfQlVGX1NJWkVdOworCisJLyogQSBidWZmZXIgb2YgaW5jb21pbmcgcGFja2V0cyBmcm9tIGxpYmVydGFzIGNvcmUuCisJICogU2luY2Ugd2UgY2FuJ3Qgc2xlZXAgaW4gaHdfaG9zdF90b19jYXJkLCB3ZSBoYXZlIHRvIGJ1ZmZlcgorCSAqIHRoZW0uICovCisJc3RydWN0IGxpc3RfaGVhZAkJY21kX3BhY2tldF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCWRhdGFfcGFja2V0X2xpc3Q7CisKKwkvKiBQcm90ZWN0cyBjbWRfcGFja2V0X2xpc3QgYW5kIGRhdGFfcGFja2V0X2xpc3QgKi8KKwlzcGlubG9ja190CQkJYnVmZmVyX2xvY2s7Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX2lmX3NwaV9jYXJkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXJzb3IsICpuZXh0OworCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisKKwlCVUdfT04oY2FyZC0+cnVuX3RocmVhZCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnNvciwgbmV4dCwgJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCkgeworCQlwYWNrZXQgPSBjb250YWluZXJfb2YoY3Vyc29yLCBzdHJ1Y3QgaWZfc3BpX3BhY2tldCwgbGlzdCk7CisJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQlrZnJlZShwYWNrZXQpOworCX0KKwlsaXN0X2Zvcl9lYWNoX3NhZmUoY3Vyc29yLCBuZXh0LCAmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCkgeworCQlwYWNrZXQgPSBjb250YWluZXJfb2YoY3Vyc29yLCBzdHJ1Y3QgaWZfc3BpX3BhY2tldCwgbGlzdCk7CisJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQlrZnJlZShwYWNrZXQpOworCX0KKwlzcGlfc2V0X2RydmRhdGEoY2FyZC0+c3BpLCBOVUxMKTsKKwlrZnJlZShjYXJkKTsKK30KKworc3RhdGljIHN0cnVjdCBjaGlwX2lkZW50IGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbXSA9IHsKKwl7IC5jaGlwX2lkID0gMHgwNCwgLm5hbWUgPSA4Mzg1IH0sCisJeyAuY2hpcF9pZCA9IDB4MGIsIC5uYW1lID0gODY4NiB9LAorfTsKKworLyoKKyAqIFNQSSBJbnRlcmZhY2UgVW5pdCBSb3V0aW5lcworICoKKyAqIFRoZSBTUFUgc2l0cyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgV0xBTiBtb2R1bGUuCisgKiBBbGwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBmaXJtd2FyZSBpcyB0aHJvdWdoIFNQVSB0cmFuc2FjdGlvbnMuCisgKgorICogRmlyc3Qgd2UgaGF2ZSB0byBwdXQgYSBTUFUgcmVnaXN0ZXIgbmFtZSBvbiB0aGUgYnVzLiBUaGVuIHdlIGNhbgorICogZWl0aGVyIHJlYWQgZnJvbSBvciB3cml0ZSB0byB0aGF0IHJlZ2lzdGVyLgorICoKKyAqIEZvciAxNi1iaXQgdHJhbnNhY3Rpb25zLCBieXRlIG9yZGVyIG9uIHRoZSBidXMgaXMgYmlnLWVuZGlhbi4KKyAqIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhhdCBoZXJlLCB0aG91Z2guCisgKiBUaGUgdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UgaW4gdGhlIFNQSSByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgdm9pZCBzcHVfdHJhbnNhY3Rpb25faW5pdChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGNhcmQtPnByZXZfeGZlcl90aW1lICsgMSkpIHsKKwkJLyogVW5mb3J0dW5hdGVseSwgdGhlIFNQVSByZXF1aXJlcyBhIGRlbGF5IGJldHdlZW4gc3VjY2Vzc2l2ZQorCQkgKiB0cmFuc2FjdGlvbnMuIElmIG91ciBsYXN0IHRyYW5zYWN0aW9uIHdhcyBtb3JlIHRoYW4gYSBqaWZmeQorCQkgKiBhZ28sIHdlIGhhdmUgb2J2aW91c2x5IGFscmVhZHkgZGVsYXllZCBlbm91Z2guCisJCSAqIElmIG5vdCwgd2UgaGF2ZSB0byBidXN5LXdhaXQgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gKi8KKwkJbmRlbGF5KDQwMCk7CisJfQorCWdwaW9fc2V0X3ZhbHVlKGNhcmQtPmdwaW9fY3MsIDApOyAvKiBhc3NlcnQgQ1MgKi8KK30KKworc3RhdGljIHZvaWQgc3B1X3RyYW5zYWN0aW9uX2ZpbmlzaChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJZ3Bpb19zZXRfdmFsdWUoY2FyZC0+Z3Bpb19jcywgMSk7IC8qIGRyb3AgQ1MgKi8KKwljYXJkLT5wcmV2X3hmZXJfdGltZSA9IGppZmZpZXM7Cit9CisKKy8qIFdyaXRlIG91dCBhIGJ5dGUgYnVmZmVyIHRvIGFuIFNQSSByZWdpc3RlciwKKyAqIHVzaW5nIGEgc2VyaWVzIG9mIDE2LWJpdCB0cmFuc2ZlcnMuICovCitzdGF0aWMgaW50IHNwdV93cml0ZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCit7CisJaW50IGVyciA9IDA7CisJdTE2IHJlZ19vdXQgPSByZWcgfCBJRl9TUElfV1JJVEVfT1BFUkFUSU9OX01BU0s7CisKKwkvKiBZb3UgbXVzdCBnaXZlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBTUFUsIGV2ZW4gaWYgaXQKKwkgKiBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGxhc3Qgb25lLiAgKi8KKwlCVUdfT04obGVuICYgMHgxKTsKKworCXNwdV90cmFuc2FjdGlvbl9pbml0KGNhcmQpOworCisJLyogd3JpdGUgU1BVIHJlZ2lzdGVyIGluZGV4ICovCisJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnJlZ19vdXQsIHNpemVvZih1MTYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksIGJ1ZiwgbGVuKTsKKworb3V0OgorCXNwdV90cmFuc2FjdGlvbl9maW5pc2goY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3B1X3dyaXRlX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJcmV0dXJuIHNwdV93cml0ZShjYXJkLCByZWcsICh1OCAqKSZ2YWwsIHNpemVvZih1MTYpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3B1X3dyaXRlX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJLyogVGhlIGxvd2VyIDE2IGJpdHMgYXJlIHdyaXR0ZW4gZmlyc3QuICovCisJdTE2IG91dFsyXTsKKwlvdXRbMF0gPSB2YWwgJiAweGZmZmY7CisJb3V0WzFdID0gKHZhbCAmIDB4ZmZmZjAwMDApID4+IDE2OworCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmb3V0LCBzaXplb2YodTMyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV9yZWdfaXNfcG9ydF9yZWcodTE2IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgSUZfU1BJX0lPX1JEV1JQT1JUX1JFRzoKKwljYXNlIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHOgorCWNhc2UgSUZfU1BJX0RBVEFfUkRXUlBPUlRfUkVHOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3B1X3JlYWQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1OCAqYnVmLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBpLCBkZWxheTsKKwlpbnQgZXJyID0gMDsKKwl1MTYgemVybyA9IDA7CisJdTE2IHJlZ19vdXQgPSByZWcgfCBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSzsKKworCS8qIFlvdSBtdXN0IHRha2UgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgU1BVLCBldmVuIGlmIHlvdQorCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGxhc3Qgb25lLiAgKi8KKwlCVUdfT04obGVuICYgMHgxKTsKKworCXNwdV90cmFuc2FjdGlvbl9pbml0KGNhcmQpOworCisJLyogd3JpdGUgU1BVIHJlZ2lzdGVyIGluZGV4ICovCisJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnJlZ19vdXQsIHNpemVvZih1MTYpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWRlbGF5ID0gc3B1X3JlZ19pc19wb3J0X3JlZyhyZWcpID8gY2FyZC0+c3B1X3BvcnRfZGVsYXkgOgorCQkJCQkJY2FyZC0+c3B1X3JlZ19kZWxheTsKKwlpZiAoY2FyZC0+dXNlX2R1bW15X3dyaXRlcykgeworCQkvKiBDbG9jayBpbiBkdW1teSBjeWNsZXMgd2hpbGUgdGhlIFNQVSBmaWxscyB0aGUgRklGTyAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGVsYXkgLyAxNjsgKytpKSB7CisJCQllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCAodTggKikmemVybywgc2l6ZW9mKHUxNikpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJLyogQnVzeS13YWl0IHdoaWxlIHRoZSBTUFUgZmlsbHMgdGhlIEZJRk8gKi8KKwkJbmRlbGF5KDEwMCArIChkZWxheSAqIDEwKSk7CisJfQorCisJLyogcmVhZCBpbiBkYXRhICovCisJZXJyID0gc3BpX3JlYWQoY2FyZC0+c3BpLCBidWYsIGxlbik7CisKK291dDoKKwlzcHVfdHJhbnNhY3Rpb25fZmluaXNoKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFJlYWQgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciAqLworc3RhdGljIGlubGluZSBpbnQgc3B1X3JlYWRfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2ICp2YWwpCit7CisJcmV0dXJuIHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopdmFsLCBzaXplb2YodTE2KSk7Cit9CisKKy8qIFJlYWQgMzIgYml0cyBmcm9tIGFuIFNQSSByZWdpc3Rlci4KKyAqIFRoZSBsb3cgMTYgYml0cyBhcmUgcmVhZCBmaXJzdC4gKi8KK3N0YXRpYyBpbnQgc3B1X3JlYWRfdTMyKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTMyICp2YWwpCit7CisJdTE2IGJ1ZlsyXTsKKwlpbnQgZXJyOworCWVyciA9IHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopYnVmLCBzaXplb2YodTMyKSk7CisJaWYgKCFlcnIpCisJCSp2YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDE2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBLZWVwIHJlYWRpbmcgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciB1bnRpbCB5b3UgZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdC4KKyAqCisgKiBJZiBtYXNrID0gMCwgdGhlIGNvcnJlY3QgcmVzdWx0IGlzIGFueSBub24temVybyBudW1iZXIuCisgKiBJZiBtYXNrICE9IDAsIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyBhbnkgbnVtYmVyIHdoZXJlCisgKiBudW1iZXIgJiB0YXJnZXRfbWFzayA9PSB0YXJnZXQKKyAqCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSBzZWNvbmQgcGFzc2VzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcmVzdWx0LiAqLworc3RhdGljIGludCBzcHVfd2FpdF9mb3JfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywKKwkJCXUxNiB0YXJnZXRfbWFzaywgdTE2IHRhcmdldCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyA1KkhaOworCXdoaWxlICgxKSB7CisJCXUxNiB2YWw7CisJCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCByZWcsICZ2YWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHRhcmdldF9tYXNrKSB7CisJCQlpZiAoKHZhbCAmIHRhcmdldF9tYXNrKSA9PSB0YXJnZXQpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAodmFsKQorCQkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxMDApOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJbGJzX3ByX2VycigiJXM6IHRpbWVvdXQgd2l0aCB2YWw9JTAyeCwgIgorCQkJICAgICAgICJ0YXJnZXRfbWFzaz0lMDJ4LCB0YXJnZXQ9JTAyeFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgdmFsLCB0YXJnZXRfbWFzaywgdGFyZ2V0KTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorfQorCisvKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IHJlY2VpdmUgYSBzcGVjaWZpYyB2YWx1ZS4KKyAqIFJldHVybnMgLUVUSU1FRE9VVCBpZiBhIDQgdHJpZXMgcGFzcyB3aXRob3V0IHN1Y2Nlc3MuICovCitzdGF0aWMgaW50IHNwdV93YWl0X2Zvcl91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MzIgcmVnLCB1MzIgdGFyZ2V0KQoreworCWludCBlcnIsIHRyeTsKKwlmb3IgKHRyeSA9IDA7IHRyeSA8IDQ7ICsrdHJ5KSB7CisJCXUzMiB2YWwgPSAwOworCQllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgcmVnLCAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmICh2YWwgPT0gdGFyZ2V0KQorCQkJcmV0dXJuIDA7CisJCW1kZWxheSgxMDApOworCX0KKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBzcHVfc2V0X2ludGVycnVwdF9tb2RlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCSAgIGludCBzdXBwcmVzc19ob3N0X2ludCwKKwkJCSAgIGludCBhdXRvX2ludCkKK3sKKwlpbnQgZXJyID0gMDsKKworCS8qIFdlIGNhbiBzdXBwcmVzcyBhIGhvc3QgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBhcHByb3ByaWF0ZQorCSAqIGJpdCBpbiB0aGUgImhvc3QgaW50ZXJydXB0IHN0YXR1cyBtYXNrIiByZWdpc3RlciAqLworCWlmIChzdXBwcmVzc19ob3N0X2ludCkgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsCisJCQkgICAgICBJRl9TUElfSElTTV9UWF9ET1dOTE9BRF9SRFkgfAorCQkJICAgICAgSUZfU1BJX0hJU01fUlhfVVBMT0FEX1JEWSB8CisJCQkgICAgICBJRl9TUElfSElTTV9DTURfRE9XTkxPQURfUkRZIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX0NBUkRFVkVOVCB8CisJCQkgICAgICBJRl9TUElfSElTTV9DTURfVVBMT0FEX1JEWSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIElmIGF1dG8taW50ZXJydXB0cyBhcmUgb24sIHRoZSBjb21wbGV0aW9uIG9mIGNlcnRhaW4gdHJhbnNhY3Rpb25zCisJICogd2lsbCB0cmlnZ2VyIGFuIGludGVycnVwdCBhdXRvbWF0aWNhbGx5LiBJZiBhdXRvLWludGVycnVwdHMKKwkgKiBhcmUgb2ZmLCB3ZSBuZWVkIHRvIHNldCB0aGUgIkNhcmQgSW50ZXJydXB0IENhdXNlIiByZWdpc3RlciB0bworCSAqIHRyaWdnZXIgYSBjYXJkIGludGVycnVwdC4gKi8KKwlpZiAoYXV0b19pbnQpIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfQ1RSTF9SRUcsCisJCQkJSUZfU1BJX0hJQ1RfVFhfRE9XTkxPQURfT1ZFUl9BVVRPIHwKKwkJCQlJRl9TUElfSElDVF9SWF9VUExPQURfT1ZFUl9BVVRPIHwKKwkJCQlJRl9TUElfSElDVF9DTURfRE9XTkxPQURfT1ZFUl9BVVRPIHwKKwkJCQlJRl9TUElfSElDVF9DTURfVVBMT0FEX09WRVJfQVVUTyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNwdV9nZXRfY2hpcF9yZXZpc2lvbihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkJICB1MTYgKmNhcmRfaWQsIHU4ICpjYXJkX3JldikKK3sKKwlpbnQgZXJyID0gMDsKKwl1MzIgZGV2X2N0cmw7CisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRywgJmRldl9jdHJsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCSpjYXJkX2lkID0gSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfSUQoZGV2X2N0cmwpOworCSpjYXJkX3JldiA9IElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX1JFVihkZXZfY3RybCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzcHVfc2V0X2J1c19tb2RlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IG1vZGUpCit7CisJaW50IGVyciA9IDA7CisJdTE2IHJ2YWw7CisJLyogc2V0IGJ1cyBtb2RlICovCisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU1BVX0JVU19NT0RFX1JFRywgbW9kZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKiBDaGVjayB0aGF0IHdlIHdlcmUgYWJsZSB0byByZWFkIGJhY2sgd2hhdCB3ZSBqdXN0IHdyb3RlLiAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU1BVX0JVU19NT0RFX1JFRywgJnJ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKHJ2YWwgIT0gbW9kZSkgeworCQlsYnNfcHJfZXJyKCJDYW4ndCByZWFkIGJ1cyBtb2RlIHJlZ2lzdGVyLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcHVfaW5pdChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIGludCB1c2VfZHVtbXlfd3JpdGVzKQoreworCWludCBlcnIgPSAwOworCXUzMiBkZWxheTsKKworCS8qIFdlIGhhdmUgdG8gc3RhcnQgdXAgaW4gdGltZWQgZGVsYXkgbW9kZSBzbyB0aGF0IHdlIGNhbiBzYWZlbHkKKwkgKiByZWFkIHRoZSBEZWxheSBSZWFkIFJlZ2lzdGVyLiAqLworCWNhcmQtPnVzZV9kdW1teV93cml0ZXMgPSAwOworCWVyciA9IHNwdV9zZXRfYnVzX21vZGUoY2FyZCwKKwkJCQlJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyB8CisJCQkJSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9USU1FRCB8CisJCQkJSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhcmQtPnNwdV9wb3J0X2RlbGF5ID0gMTAwMDsKKwljYXJkLT5zcHVfcmVnX2RlbGF5ID0gMTAwMDsKKwllcnIgPSBzcHVfcmVhZF91MzIoY2FyZCwgSUZfU1BJX0RFTEFZX1JFQURfUkVHLCAmZGVsYXkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FyZC0+c3B1X3BvcnRfZGVsYXkgPSBkZWxheSAmIDB4MDAwMGZmZmY7CisJY2FyZC0+c3B1X3JlZ19kZWxheSA9IChkZWxheSAmIDB4ZmZmZjAwMDApID4+IDE2OworCisJLyogSWYgZHVtbXkgY2xvY2sgZGVsYXkgbW9kZSBoYXMgYmVlbiByZXF1ZXN0ZWQsIHN3aXRjaCB0byBpdCBub3cgKi8KKwlpZiAodXNlX2R1bW15X3dyaXRlcykgeworCQljYXJkLT51c2VfZHVtbXlfd3JpdGVzID0gMTsKKwkJZXJyID0gc3B1X3NldF9idXNfbW9kZShjYXJkLAorCQkJCUlGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfUklTSU5HIHwKKwkJCQlJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX0RVTU1ZX0NMT0NLIHwKKwkJCQlJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMTZfQklUX0RBVEEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlsYnNfZGViX3NwaSgiSW5pdGlhbGl6ZWQgU1BVIHVuaXQuICIKKwkJICAgICJzcHVfcG9ydF9kZWxheT0weCUwNGx4LCBzcHVfcmVnX2RlbGF5PTB4JTA0bHhcbiIsCisJCSAgICBjYXJkLT5zcHVfcG9ydF9kZWxheSwgY2FyZC0+c3B1X3JlZ19kZWxheSk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZpcm13YXJlIExvYWRpbmcKKyAqLworCitzdGF0aWMgaW50IGlmX3NwaV9wcm9nX2hlbHBlcl9maXJtd2FyZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaW50IGVyciA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisJaW50IGJ5dGVzX3JlbWFpbmluZzsKKwljb25zdCB1OCAqZnc7CisJdTggdGVtcFtIRUxQRVJfRldfTE9BRF9DSFVOS19TWl07CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNhcmQtPnNwaTsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJZXJyID0gc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShjYXJkLCAxLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwkvKiBHZXQgaGVscGVyIGZpcm13YXJlIGltYWdlICovCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsIGNhcmQtPmhlbHBlcl9md19uYW1lLCAmc3BpLT5kZXYpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigicmVxdWVzdF9maXJtd2FyZSBmYWlsZWQgd2l0aCBlcnIgPSAlZFxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCWJ5dGVzX3JlbWFpbmluZyA9IGZpcm13YXJlLT5zaXplOworCWZ3ID0gZmlybXdhcmUtPmRhdGE7CisKKwkvKiBMb2FkIGhlbHBlciBmaXJtd2FyZSBpbWFnZSAqLworCXdoaWxlIChieXRlc19yZW1haW5pbmcgPiAwKSB7CisJCS8qIFNjcmF0Y2ggcGFkIDEgc2hvdWxkIGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZQorCQkgKiB3YW50IHRvIGRvd25sb2FkIHRvIHRoZSBmaXJtd2FyZSAqLworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLAorCQkJCQlIRUxQRVJfRldfTE9BRF9DSFVOS19TWik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKKwkJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSwKKwkJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJLyogRmVlZCB0aGUgZGF0YSBpbnRvIHRoZSBjb21tYW5kIHJlYWQvd3JpdGUgcG9ydCByZWcKKwkJICogaW4gY2h1bmtzIG9mIDY0IGJ5dGVzICovCisJCW1lbXNldCh0ZW1wLCAwLCBzaXplb2YodGVtcCkpOworCQltZW1jcHkodGVtcCwgZncsCisJCSAgICAgICBtaW4oYnl0ZXNfcmVtYWluaW5nLCBIRUxQRVJfRldfTE9BRF9DSFVOS19TWikpOworCQltZGVsYXkoMTApOworCQllcnIgPSBzcHVfd3JpdGUoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJCXRlbXAsIEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCQkvKiBJbnRlcnJ1cHQgdGhlIGJvb3QgY29kZSAqLworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHLAorCQkJCSAgICAgICBJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJYnl0ZXNfcmVtYWluaW5nIC09IEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaOworCQlmdyArPSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWjsKKwl9CisKKwkvKiBPbmNlIHRoZSBoZWxwZXIgLyBzaW5nbGUgc3RhZ2UgZmlybXdhcmUgZG93bmxvYWQgaXMgY29tcGxldGUsCisJICogd3JpdGUgMCB0byBzY3JhdGNoIHBhZCAxIGFuZCBpbnRlcnJ1cHQgdGhlCisJICogYm9vdGxvYWRlci4gVGhpcyBjb21wbGV0ZXMgdGhlIGhlbHBlciBkb3dubG9hZC4gKi8KKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLCBGSVJNV0FSRV9ETkxEX09LKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRywKKwkJCQlJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSKTsKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJbGJzX2RlYl9zcGkoIndhaXRpbmcgZm9yIGhlbHBlciB0byBib290Li4uXG4iKTsKKworcmVsZWFzZV9maXJtd2FyZToKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBoZWxwZXIgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgcGFja2V0IHRoZSBmaXJtd2FyZSBleHBlY3RzIHVzIHRvIHNlbmQKKyAqIFNldHMgY3JjX2VyciBpZiB0aGUgcHJldmlvdXMgdHJhbnNmZXIgaGFkIGEgQ1JDIGVycm9yLiAqLworc3RhdGljIGludCBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlX2NoZWNrX2xlbihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkJCQlpbnQgKmNyY19lcnIpCit7CisJdTE2IGxlbjsKKwlpbnQgZXJyID0gMDsKKworCS8qIHdhaXQgdW50aWwgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBpbmRpY2F0ZXMKKwkgKiB0aGF0IHdlIGFyZSByZWFkeSB0byBkb3dubG9hZCAqLworCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCisJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSwKKwkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoInRpbWVkIG91dCB3YWl0aW5nIGZvciBob3N0X2ludF9zdGF0dXNcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEFzayB0aGUgZGV2aWNlIGhvdyBtYW55IGJ5dGVzIG9mIGZpcm13YXJlIGl0IHdhbnRzLiAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgJmxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7CisJCWxic19wcl9lcnIoImZpcm13YXJlIGxvYWQgZGV2aWNlIHJlcXVlc3RlZCBhIGxhcmdlciAiCisJCQkgICAidHJhbmZlciB0aGFuIHdlIGFyZSBwcmVwYXJlZCB0byAiCisJCQkgICAiaGFuZGxlLiAobGVuID0gJWQpXG4iLCBsZW4pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGxlbiAmIDB4MSkgeworCQlsYnNfZGViX3NwaSgiJXM6IGNyYyBlcnJvclxuIiwgX19mdW5jX18pOworCQlsZW4gJj0gfjB4MTsKKwkJKmNyY19lcnIgPSAxOworCX0gZWxzZQorCQkqY3JjX2VyciA9IDA7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWludCBsZW4sIHByZXZfbGVuOworCWludCBieXRlcywgY3JjX2VyciA9IDAsIGVyciA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisJY29uc3QgdTggKmZ3OworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjYXJkLT5zcGk7CisJdTE2IG51bV9jcmNfZXJyczsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJZXJyID0gc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShjYXJkLCAxLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIEdldCBmaXJtd2FyZSBpbWFnZSAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBjYXJkLT5tYWluX2Z3X25hbWUsICZzcGktPmRldik7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGZpcm13YXJlICclcycgZnJvbSBrZXJuZWwuICIKKwkJCSJlcnIgPSAlZFxuIiwgX19mdW5jX18sIGNhcmQtPm1haW5fZndfbmFtZSwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgMCwgMCk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGluaXRpYWwgIgorCQkJICAgInNjcmF0Y2ggcmVnID0gMFxuIiwgX19mdW5jX18pOworCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJfQorCisJbnVtX2NyY19lcnJzID0gMDsKKwlwcmV2X2xlbiA9IDA7CisJYnl0ZXMgPSBmaXJtd2FyZS0+c2l6ZTsKKwlmdyA9IGZpcm13YXJlLT5kYXRhOworCXdoaWxlICgobGVuID0gaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZV9jaGVja19sZW4oY2FyZCwgJmNyY19lcnIpKSkgeworCQlpZiAobGVuIDwgMCkgeworCQkJZXJyID0gbGVuOworCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQl9CisJCWlmIChieXRlcyA8IDApIHsKKwkJCS8qIElmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGxlZnQsIHdlIHdvdWxkIG5vcm1hbGx5CisJCQkgKiBleHBlY3QgdG8gaGF2ZSB0ZXJtaW5hdGVkIHdpdGggbGVuID0gMCAqLworCQkJbGJzX3ByX2VycigiRmlybXdhcmUgbG9hZCB3YW50cyBtb3JlIGJ5dGVzICIKKwkJCQkgICAidGhhbiB3ZSBoYXZlIHRvIG9mZmVyLlxuIik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY3JjX2VycikgeworCQkJLyogUHJldmlvdXMgdHJhbnNmZXIgZmFpbGVkLiAqLworCQkJaWYgKCsrbnVtX2NyY19lcnJzID4gTUFYX01BSU5fRldfTE9BRF9DUkNfRVJSKSB7CisJCQkJbGJzX3ByX2VycigiVG9vIG1hbnkgQ1JDIGVycm9ycyBlbmNvdW50ZXJlZCAiCisJCQkJCSAgICJpbiBmaXJtd2FyZSBsb2FkLlxuIik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBQcmV2aW91cyB0cmFuc2ZlciBzdWNjZWVkZWQuIEFkdmFuY2UgY291bnRlcnMuICovCisJCQlieXRlcyAtPSBwcmV2X2xlbjsKKwkJCWZ3ICs9IHByZXZfbGVuOworCQl9CisJCWlmIChieXRlcyA8IGxlbikgeworCQkJbWVtc2V0KGNhcmQtPmNtZF9idWZmZXIsIDAsIGxlbik7CisJCQltZW1jcHkoY2FyZC0+Y21kX2J1ZmZlciwgZncsIGJ5dGVzKTsKKwkJfSBlbHNlCisJCQltZW1jcHkoY2FyZC0+Y21kX2J1ZmZlciwgZncsIGxlbik7CisKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWVyciA9IHNwdV93cml0ZShjYXJkLCBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRywKKwkJCQljYXJkLT5jbWRfYnVmZmVyLCBsZW4pOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcgLAorCQkJCQlJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJcHJldl9sZW4gPSBsZW47CisJfQorCWlmIChieXRlcyA+IHByZXZfbGVuKSB7CisJCWxic19wcl9lcnIoImZpcm13YXJlIGxvYWQgd2FudHMgZmV3ZXIgYnl0ZXMgdGhhbiAiCisJCQkgICAid2UgaGF2ZSB0byBvZmZlci5cbiIpOworCX0KKworCS8qIENvbmZpcm0gZmlybXdhcmUgZG93bmxvYWQgKi8KKwllcnIgPSBzcHVfd2FpdF9mb3JfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzRfUkVHLAorCQkJCQlTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoImZhaWxlZCB0byBjb25maXJtIHRoZSBmaXJtd2FyZSBkb3dubG9hZFxuIik7CisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwl9CisKK3JlbGVhc2VfZmlybXdhcmU6CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwgZXJyKTsKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnIgJWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTUEkgVHJhbnNmZXIgVGhyZWFkCisgKgorICogVGhlIFNQSSB0aHJlYWQgaGFuZGxlcyBhbGwgU1BJIHRyYW5zZmVycywgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBsb2NrLgorICovCisKKy8qIE1vdmUgYSBjb21tYW5kIGZyb20gdGhlIGNhcmQgdG8gdGhlIGhvc3QgKi8KK3N0YXRpYyBpbnQgaWZfc3BpX2MyaF9jbWQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKwl1MTYgbGVuOworCXU4IGk7CisKKwkvKiBXZSBuZWVkIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaGFuZGxlIHdoYXRldmVyIHBlb3BsZSBzZW5kIHRvCisJICogaHdfaG9zdF90b19jYXJkICovCisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgPCBMQlNfQ01EX0JVRkZFUl9TSVpFKTsKKwlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSA8IExCU19VUExEX1NJWkUpOworCisJLyogSXQncyBqdXN0IGFubm95aW5nIGlmIHRoZSBidWZmZXIgc2l6ZSBpc24ndCBhIG11bHRpcGxlIG9mIDQsIGJlY2F1c2UKKwkgKiB0aGVuIHdlIG1pZ2h0IGhhdmUgbGVuIDwgIElGX1NQSV9DTURfQlVGX1NJWkUgYnV0CisJICogQUxJR04obGVuLCA0KSA+IElGX1NQSV9DTURfQlVGX1NJWkUgKi8KKwlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSAlIDQgIT0gMCk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCS8qIEhvdyBtYW55IGJ5dGVzIGFyZSB0aGVyZSB0byByZWFkPyAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8yX1JFRywgJmxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJaWYgKCFsZW4pIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAorCQkJICAgX19mdW5jX18pOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGxlbiA+IElGX1NQSV9DTURfQlVGX1NJWkUpIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiByZXNwb25zZSBwYWNrZXQgdG9vIGxhcmdlOiAiCisJCQkgICAiJWQgYnl0ZXMsIGJ1dCBtYXhpbXVtIGlzICVkXG4iLAorCQkJICAgX19mdW5jX18sIGxlbiwgSUZfU1BJX0NNRF9CVUZfU0laRSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUgaW50byBvdXIgY29tbWFuZCBidWZmZXIgKi8KKwllcnIgPSBzcHVfcmVhZChjYXJkLCBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRywKKwkJCQljYXJkLT5jbWRfYnVmZmVyLCBBTElHTihsZW4sIDQpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCWkgPSAocHJpdi0+cmVzcF9pZHggPT0gMCkgPyAxIDogMDsKKwlCVUdfT04ocHJpdi0+cmVzcF9sZW5baV0pOworCXByaXYtPnJlc3BfbGVuW2ldID0gbGVuOworCW1lbWNweShwcml2LT5yZXNwX2J1ZltpXSwgY2FyZC0+Y21kX2J1ZmZlciwgbGVuKTsKKwlsYnNfbm90aWZ5X2NvbW1hbmRfcmVzcG9uc2UocHJpdiwgaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIE1vdmUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBob3N0ICovCitzdGF0aWMgaW50IGlmX3NwaV9jMmhfZGF0YShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwljaGFyICpkYXRhOworCXUxNiBsZW47CisJaW50IGVyciA9IDA7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCS8qIEhvdyBtYW55IGJ5dGVzIGFyZSB0aGVyZSB0byByZWFkPyAqLworCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgJmxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJaWYgKCFsZW4pIHsKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAorCQkJICAgX19mdW5jX18pOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgJWQgYnl0ZXMgb2YgZGF0YSwgYnV0ICIKKwkJCSAgICJvdXIgbWF4aW11bSBza2Igc2l6ZSBpcyAldVxuIiwKKwkJCSAgIF9fZnVuY19fLCBsZW4sIE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVE9ETzogc2hvdWxkIHdlIGFsbG9jYXRlIGEgc21hbGxlciBza2IgaWYgd2UgaGF2ZSBsZXNzIGRhdGE/ICovCisJc2tiID0gZGV2X2FsbG9jX3NrYihNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CisJaWYgKCFza2IpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKwlza2JfcmVzZXJ2ZShza2IsIElQRklFTERfQUxJR05fT0ZGU0VUKTsKKwlkYXRhID0gc2tiX3B1dChza2IsIGxlbik7CisKKwkvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlIGludG8gb3VyIHNrYi4uLiAqLworCWVyciA9IHNwdV9yZWFkKGNhcmQsIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRywgZGF0YSwgQUxJR04obGVuLCA0KSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3NrYjsKKworCS8qIHBhc3MgdGhlIFNLQiB0byBsaWJlcnRhcyAqLworCWVyciA9IGxic19wcm9jZXNzX3J4ZWRfcGFja2V0KGNhcmQtPnByaXYsIHNrYik7CisJaWYgKGVycikKKwkJZ290byBmcmVlX3NrYjsKKworCS8qIHN1Y2Nlc3MgKi8KKwlnb3RvIG91dDsKKworZnJlZV9za2I6CisJZGV2X2tmcmVlX3NrYihza2IpOworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOworCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIE1vdmUgZGF0YSBvciBhIGNvbW1hbmQgZnJvbSB0aGUgaG9zdCB0byB0aGUgY2FyZC4gKi8KK3N0YXRpYyB2b2lkIGlmX3NwaV9oMmMoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldCwgaW50IHR5cGUpCit7CisJaW50IGVyciA9IDA7CisJdTE2IGludF90eXBlLCBwb3J0X3JlZzsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTVZNU19EQVQ6CisJCWludF90eXBlID0gSUZfU1BJX0NJQ19UWF9ET1dOTE9BRF9PVkVSOworCQlwb3J0X3JlZyA9IElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRzsKKwkJYnJlYWs7CisJY2FzZSBNVk1TX0NNRDoKKwkJaW50X3R5cGUgPSBJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSOworCQlwb3J0X3JlZyA9IElGX1NQSV9DTURfUkRXUlBPUlRfUkVHOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsYnNfcHJfZXJyKCJjYW4ndCB0cmFuc2ZlciBidWZmZXIgb2YgdHlwZSAlZFxuIiwgdHlwZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBjYXJkICovCisJZXJyID0gc3B1X3dyaXRlKGNhcmQsIHBvcnRfcmVnLCBwYWNrZXQtPmJ1ZmZlciwgcGFja2V0LT5ibGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworb3V0OgorCWtmcmVlKHBhY2tldCk7CisKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworfQorCisvKiBJbmZvcm0gdGhlIGhvc3QgYWJvdXQgYSBjYXJkIGV2ZW50ICovCitzdGF0aWMgdm9pZCBpZl9zcGlfZTJoKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjYXVzZTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzNfUkVHLCAmY2F1c2UpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJbGJzX3F1ZXVlX2V2ZW50KHByaXYsIGNhdXNlICYgMHhmZik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKworb3V0OgorCWlmIChlcnIpCisJCWxic19wcl9lcnIoIiVzOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7Cit9CisKK3N0YXRpYyBpbnQgbGJzX3NwaV90aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IGRhdGE7CisJdTE2IGhpU3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldDsKKworCXdoaWxlICgxKSB7CisJCS8qIFdhaXQgdG8gYmUgd29rZW4gdXAgYnkgb25lIG9mIHR3byB0aGluZ3MuICBGaXJzdCwgb3VyIElTUgorCQkgKiBjb3VsZCB0ZWxsIHVzIHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkIG9uIHRoZSBXTEFOLgorCQkgKiBTZWNvbmRseSwgbGliZXJ0YXMgY291bGQgY2FsbCBod19ob3N0X3RvX2NhcmQgd2l0aCBtb3JlCisJCSAqIGRhdGEsIHdoaWNoIHdlIG1pZ2h0IGJlIGFibGUgdG8gc2VuZC4KKwkJICovCisJCWRvIHsKKwkJCWVyciA9IGRvd25faW50ZXJydXB0aWJsZSgmY2FyZC0+c3BpX3JlYWR5KTsKKwkJCWlmICghY2FyZC0+cnVuX3RocmVhZCkgeworCQkJCXVwKCZjYXJkLT5zcGlfdGhyZWFkX3Rlcm1pbmF0ZWQpOworCQkJCWRvX2V4aXQoMCk7CisJCQl9CisJCX0gd2hpbGUgKGVyciA9PSBFSU5UUik7CisKKwkJLyogUmVhZCB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSB3aGF0IHdlCisJCSAqIGNhbiBkby4gKi8KKwkJZXJyID0gc3B1X3JlYWRfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLAorCQkJCQkmaGlTdGF0dXMpOworCQlpZiAoZXJyKSB7CisJCQlsYnNfcHJfZXJyKCJJL08gZXJyb3JcbiIpOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DTURfVVBMT0FEX1JEWSkKKwkJCWVyciA9IGlmX3NwaV9jMmhfY21kKGNhcmQpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycjsKKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfUlhfVVBMT0FEX1JEWSkKKwkJCWVyciA9IGlmX3NwaV9jMmhfZGF0YShjYXJkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpIHsKKwkJCS8qIFRoaXMgbWVhbnMgdHdvIHRoaW5ncy4gRmlyc3Qgb2YgYWxsLAorCQkJICogaWYgdGhlcmUgd2FzIGEgcHJldmlvdXMgY29tbWFuZCBzZW50LCB0aGUgY2FyZCBoYXMKKwkJCSAqIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBpdC4KKwkJCSAqIFNlY29uZGx5LCBpdCBpcyBub3cgcmVhZHkgdG8gZG93bmxvYWQgYW5vdGhlcgorCQkJICogY29tbWFuZC4KKwkJCSAqLworCQkJbGJzX2hvc3RfdG9fY2FyZF9kb25lKGNhcmQtPnByaXYpOworCisJCQkvKiBEbyB3ZSBoYXZlIGFueSBjb21tYW5kIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bworCQkJICogc2VuZD8gKi8KKwkJCXBhY2tldCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+Y21kX3BhY2tldF9saXN0KSkgeworCQkJCXBhY2tldCA9IChzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqKShjYXJkLT4KKwkJCQkJCWNtZF9wYWNrZXRfbGlzdC5uZXh0KTsKKwkJCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwkJCWlmIChwYWNrZXQpCisJCQkJaWZfc3BpX2gyYyhjYXJkLCBwYWNrZXQsIE1WTVNfQ01EKTsKKwkJfQorCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9UWF9ET1dOTE9BRF9SRFkpIHsKKwkJCS8qIERvIHdlIGhhdmUgYW55IGRhdGEgcGFja2V0cyBmcm9tIHRoZSBob3N0IHRvCisJCQkgKiBzZW5kPyAqLworCQkJcGFja2V0ID0gTlVMTDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5kYXRhX3BhY2tldF9saXN0KSkgeworCQkJCXBhY2tldCA9IChzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqKShjYXJkLT4KKwkJCQkJCWRhdGFfcGFja2V0X2xpc3QubmV4dCk7CisJCQkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocGFja2V0KQorCQkJCWlmX3NwaV9oMmMoY2FyZCwgcGFja2V0LCBNVk1TX0RBVCk7CisJCX0KKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ0FSRF9FVkVOVCkKKwkJCWlmX3NwaV9lMmgoY2FyZCk7CisKK2VycjoKKwkJaWYgKGVycikKKwkJCWxic19wcl9lcnIoIiVzOiBnb3QgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCX0KK30KKworLyogQmxvY2sgdW50aWwgbGJzX3NwaV90aHJlYWQgdGhyZWFkIGhhcyB0ZXJtaW5hdGVkICovCitzdGF0aWMgdm9pZCBpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCS8qIEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIGt0aHJlYWRfc3RvcCBoZXJlLCBidXQgdGhhdCBmdW5jdGlvbgorCSAqIGNhbid0IHdha2UgdGhyZWFkcyB3YWl0aW5nIGZvciBhIHNlbWFwaG9yZS4gKi8KKwljYXJkLT5ydW5fdGhyZWFkID0gMDsKKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKKwlkb3duKCZjYXJkLT5zcGlfdGhyZWFkX3Rlcm1pbmF0ZWQpOworfQorCisvKgorICogSG9zdCB0byBDYXJkCisgKgorICogQ2FsbGVkIGZyb20gTGliZXJ0YXMgdG8gdHJhbnNmZXIgc29tZSBkYXRhIHRvIHRoZSBXTEFOIGRldmljZQorICogV2UgY2FuJ3Qgc2xlZXAgaGVyZS4gKi8KK3N0YXRpYyBpbnQgaWZfc3BpX2hvc3RfdG9fY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCisJCQkJdTggdHlwZSwgdTggKmJ1ZiwgdTE2IG5iKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKKwlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCXUxNiBibGVuOworCisJbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfU1BJLCAidHlwZSAlZCwgYnl0ZXMgJWQiLCB0eXBlLCBuYik7CisKKwlpZiAobmIgPT0gMCkgeworCQlsYnNfcHJfZXJyKCIlczogaW52YWxpZCBzaXplIHJlcXVlc3RlZDogJWRcbiIsIF9fZnVuY19fLCBuYik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlibGVuID0gQUxJR04obmIsIDQpOworCXBhY2tldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl9zcGlfcGFja2V0KSArIGJsZW4sIEdGUF9BVE9NSUMpOworCWlmICghcGFja2V0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlwYWNrZXQtPmJsZW4gPSBibGVuOworCW1lbWNweShwYWNrZXQtPmJ1ZmZlciwgYnVmLCBuYik7CisJbWVtc2V0KHBhY2tldC0+YnVmZmVyICsgbmIsIDAsIGJsZW4gLSBuYik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1WTVNfQ01EOgorCQlwcml2LT5kbmxkX3NlbnQgPSBETkxEX0NNRF9TRU5UOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmY2FyZC0+Y21kX3BhY2tldF9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBNVk1TX0RBVDoKKwkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9EQVRBX1NFTlQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZwYWNrZXQtPmxpc3QsICZjYXJkLT5kYXRhX3BhY2tldF9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWQiLCB0eXBlKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJLyogV2FrZSB1cCB0aGUgc3BpIHRocmVhZCAqLworCXVwKCZjYXJkLT5zcGlfcmVhZHkpOworb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVycj0lZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEhvc3QgSW50ZXJydXB0cworICoKKyAqIFNlcnZpY2UgaW5jb21pbmcgaW50ZXJydXB0cyBmcm9tIHRoZSBXTEFOIGRldmljZS4gV2UgY2FuJ3Qgc2xlZXAgaGVyZSwgc28KKyAqIGRvbid0IHRyeSB0byB0YWxrIG9uIHRoZSBTUEkgYnVzLCBqdXN0IHdha2UgdXAgdGhlIFNQSSB0aHJlYWQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpZl9zcGlfaG9zdF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IGRldl9pZDsKKworCXVwKCZjYXJkLT5zcGlfcmVhZHkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFNQSSBjYWxsYmFja3MKKyAqLworCitzdGF0aWMgaW50IGlmX3NwaV9jYWxjdWxhdGVfZndfbmFtZXModTE2IGNhcmRfaWQsCisJCQkgICAgICBjaGFyICpoZWxwZXJfZncsIGNoYXIgKm1haW5fZncpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcF9pZF90b19kZXZpY2VfbmFtZSk7ICsraSkgeworCQlpZiAoY2FyZF9pZCA9PSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLmNoaXBfaWQpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShjaGlwX2lkX3RvX2RldmljZV9uYW1lKSkgeworCQlsYnNfcHJfZXJyKCJVbnN1cHBvcnRlZCBjaGlwX2lkOiAweCUwMnhcbiIsIGNhcmRfaWQpOworCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKwl9CisJc25wcmludGYoaGVscGVyX2Z3LCBGSVJNV0FSRV9OQU1FX01BWCwgImxpYmVydGFzL2dzcGklZF9obHAuYmluIiwKKwkJIGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbaV0ubmFtZSk7CisJc25wcmludGYobWFpbl9mdywgRklSTVdBUkVfTkFNRV9NQVgsICJsaWJlcnRhcy9nc3BpJWQuYmluIiwKKwkJIGNoaXBfaWRfdG9fZGV2aWNlX25hbWVbaV0ubmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlmX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBOVUxMOworCXN0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBlcnIgPSAwOworCXUzMiBzY3JhdGNoOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwlpZiAoIXBkYXRhKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGF0YS0+c2V0dXApIHsKKwkJZXJyID0gcGRhdGEtPnNldHVwKHNwaSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhpcyBzcGVjaWZpYyBkZXZpY2UgKi8KKwljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlmX3NwaV9jYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBjYXJkKTsKKwljYXJkLT5wZGF0YSA9IHBkYXRhOworCWNhcmQtPnNwaSA9IHNwaTsKKwljYXJkLT5ncGlvX2NzID0gcGRhdGEtPmdwaW9fY3M7CisJY2FyZC0+cHJldl94ZmVyX3RpbWUgPSBqaWZmaWVzOworCisJc2VtYV9pbml0KCZjYXJkLT5zcGlfcmVhZHksIDApOworCXNlbWFfaW5pdCgmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkLCAwKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y21kX3BhY2tldF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmJ1ZmZlcl9sb2NrKTsKKworCS8qIHNldCB1cCBHUElPIENTIGxpbmUuIFRPRE86IHVzZSAgcmVndWxhciBDUyBsaW5lICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KGNhcmQtPmdwaW9fY3MsICJpZl9zcGlfZ3Bpb19jaGlwX3NlbGVjdCIpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9jYXJkOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjYXJkLT5ncGlvX2NzLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKworCS8qIEluaXRpYWxpemUgdGhlIFNQSSBJbnRlcmZhY2UgVW5pdCAqLworCWVyciA9IHNwdV9pbml0KGNhcmQsIHBkYXRhLT51c2VfZHVtbXlfd3JpdGVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfZ3BpbzsKKwllcnIgPSBzcHVfZ2V0X2NoaXBfcmV2aXNpb24oY2FyZCwgJmNhcmQtPmNhcmRfaWQsICZjYXJkLT5jYXJkX3Jldik7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBGaXJtd2FyZSBsb2FkICovCisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzRfUkVHLCAmc2NyYXRjaCk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisJaWYgKHNjcmF0Y2ggPT0gU1VDQ0VTU0ZVTF9GV19ET1dOTE9BRF9NQUdJQykKKwkJbGJzX2RlYl9zcGkoIkZpcm13YXJlIGlzIGFscmVhZHkgbG9hZGVkIGZvciAiCisJCQkgICAgIk1hcnZlbGwgV0xBTiA4MDIuMTEgYWRhcHRlclxuIik7CisJZWxzZSB7CisJCWVyciA9IGlmX3NwaV9jYWxjdWxhdGVfZndfbmFtZXMoY2FyZC0+Y2FyZF9pZCwKKwkJCQljYXJkLT5oZWxwZXJfZndfbmFtZSwgY2FyZC0+bWFpbl9md19uYW1lKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9ncGlvOworCisJCWxic19kZWJfc3BpKCJJbml0aWFsaXppbmcgRlcgZm9yIE1hcnZlbGwgV0xBTiA4MDIuMTEgYWRhcHRlciAiCisJCQkJIihjaGlwX2lkID0gMHglMDR4LCBjaGlwX3JldiA9IDB4JTAyeCkgIgorCQkJCSJhdHRhY2hlZCB0byBTUEkgYnVzX251bSAlZCwgY2hpcF9zZWxlY3QgJWQuICIKKwkJCQkic3BpLT5tYXhfc3BlZWRfaHo9JWRcbiIsCisJCQkJY2FyZC0+Y2FyZF9pZCwgY2FyZC0+Y2FyZF9yZXYsCisJCQkJc3BpLT5tYXN0ZXItPmJ1c19udW0sIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkJc3BpLT5tYXhfc3BlZWRfaHopOworCQllcnIgPSBpZl9zcGlfcHJvZ19oZWxwZXJfZmlybXdhcmUoY2FyZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKwkJZXJyID0gaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZShjYXJkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9ncGlvOworCQlsYnNfZGViX3NwaSgibG9hZGVkIEZXIGZvciBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIpOworCX0KKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMCwgMSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBSZWdpc3RlciBvdXIgY2FyZCB3aXRoIGxpYmVydGFzLgorCSAqIFRoaXMgd2lsbCBjYWxsIGFsbG9jX2V0aGVyZGV2ICovCisJcHJpdiA9IGxic19hZGRfY2FyZChjYXJkLCAmc3BpLT5kZXYpOworCWlmICghcHJpdikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZ3BpbzsKKwl9CisJY2FyZC0+cHJpdiA9IHByaXY7CisJcHJpdi0+Y2FyZCA9IGNhcmQ7CisJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfc3BpX2hvc3RfdG9fY2FyZDsKKwlwcml2LT5md19yZWFkeSA9IDE7CisJcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKKworCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGhhbmRsaW5nIHN0dWZmLiAqLworCWNhcmQtPnJ1bl90aHJlYWQgPSAxOworCWNhcmQtPnNwaV90aHJlYWQgPSBrdGhyZWFkX3J1bihsYnNfc3BpX3RocmVhZCwgY2FyZCwgImxic19zcGlfdGhyZWFkIik7CisJaWYgKElTX0VSUihjYXJkLT5zcGlfdGhyZWFkKSkgeworCQljYXJkLT5ydW5fdGhyZWFkID0gMDsKKwkJZXJyID0gUFRSX0VSUihjYXJkLT5zcGlfdGhyZWFkKTsKKwkJbGJzX3ByX2VycigiZXJyb3IgY3JlYXRpbmcgU1BJIHRocmVhZDogZXJyPSVkXG4iLCBlcnIpOworCQlnb3RvIHJlbW92ZV9jYXJkOworCX0KKwllcnIgPSByZXF1ZXN0X2lycShzcGktPmlycSwgaWZfc3BpX2hvc3RfaW50ZXJydXB0LAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsICJsaWJlcnRhc19zcGkiLCBjYXJkKTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoImNhbid0IGdldCBob3N0IGlycSBsaW5lLS0gcmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJZ290byB0ZXJtaW5hdGVfdGhyZWFkOworCX0KKworCS8qIFN0YXJ0IHRoZSBjYXJkLgorCSAqIFRoaXMgd2lsbCBjYWxsIHJlZ2lzdGVyX25ldGRldiwgYW5kIHdlJ2xsIHN0YXJ0CisJICogZ2V0dGluZyBpbnRlcnJ1cHRzLi4uICovCisJZXJyID0gbGJzX3N0YXJ0X2NhcmQocHJpdik7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2lycTsKKworCWxic19kZWJfc3BpKCJGaW5pc2hlZCBpbml0aWFsaXppbmcgV0xBTiBtb2R1bGUuXG4iKTsKKworCS8qIHN1Y2Nlc3NmdWwgZXhpdCAqLworCWdvdG8gb3V0OworCityZWxlYXNlX2lycToKKwlmcmVlX2lycShzcGktPmlycSwgY2FyZCk7Cit0ZXJtaW5hdGVfdGhyZWFkOgorCWlmX3NwaV90ZXJtaW5hdGVfc3BpX3RocmVhZChjYXJkKTsKK3JlbW92ZV9jYXJkOgorCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCitmcmVlX2dwaW86CisJZ3Bpb19mcmVlKGNhcmQtPmdwaW9fY3MpOworZnJlZV9jYXJkOgorCWZyZWVfaWZfc3BpX2NhcmQoY2FyZCk7CitvdXQ6CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxpYmVydGFzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCisJbGJzX2RlYl9zcGkoImxpYmVydGFzX3NwaV9yZW1vdmVcbiIpOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXByaXYtPnN1cnByaXNlcmVtb3ZlZCA9IDE7CisKKwlsYnNfc3RvcF9jYXJkKHByaXYpOworCWZyZWVfaXJxKHNwaS0+aXJxLCBjYXJkKTsKKwlpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoY2FyZCk7CisJbGJzX3JlbW92ZV9jYXJkKHByaXYpOyAvKiB3aWxsIGNhbGwgZnJlZV9uZXRkZXYgKi8KKwlncGlvX2ZyZWUoY2FyZC0+Z3Bpb19jcyk7CisJaWYgKGNhcmQtPnBkYXRhLT50ZWFyZG93bikKKwkJY2FyZC0+cGRhdGEtPnRlYXJkb3duKHNwaSk7CisJZnJlZV9pZl9zcGlfY2FyZChjYXJkKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxpYmVydGFzX3NwaV9kcml2ZXIgPSB7CisJLnByb2JlCT0gaWZfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsaWJlcnRhc19zcGlfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJsaWJlcnRhc19zcGkiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qCisgKiBNb2R1bGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBfX2luaXQgaWZfc3BpX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibGliZXJ0YXNfc3BpOiBMaWJlcnRhcyBTUEkgZHJpdmVyXG4iKTsKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZsaWJlcnRhc19zcGlfZHJpdmVyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWZfc3BpX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsaWJlcnRhc19zcGlfZHJpdmVyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKK30KKworbW9kdWxlX2luaXQoaWZfc3BpX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGlmX3NwaV9leGl0X21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGliZXJ0YXMgU1BJIFdMQU4gRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXkgWXVyb3Zza3kgPGFuZHJleUBjb3p5Yml0LmNvbT4sICIKKwkgICAgICAiQ29saW4gTWNDYWJlIDxjb2xpbkBjb3p5Yml0LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwMzg2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICoJbGludXgvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKyAqCisgKglEcml2ZXIgZm9yIE1hcnZlbGwgU1BJIFdMQU4gY2FyZHMuCisgKgorICoJQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqCUF1dGhvcnM6CisgKglBbmRyZXkgWXVyb3Zza3kgPGFuZHJleUBjb3p5Yml0LmNvbT4KKyAqCUNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9MQlNfSUZfU1BJX0hfCisjZGVmaW5lIF9MQlNfSUZfU1BJX0hfCisKKyNkZWZpbmUgSVBGSUVMRF9BTElHTl9PRkZTRVQgMgorI2RlZmluZSBJRl9TUElfQ01EX0JVRl9TSVpFIDI0MDAKKworLyoqKioqKioqKioqKioqKioqIEZpcm13YXJlICoqKioqKioqKioqKioqKioqLworc3RydWN0IGNoaXBfaWRlbnQgeworCXUxNiBjaGlwX2lkOworCXUxNiBuYW1lOworfTsKKworI2RlZmluZSBNQVhfTUFJTl9GV19MT0FEX0NSQ19FUlIgMTAKKworLyogQ2h1bmsgc2l6ZSB3aGVuIGxvYWRpbmcgdGhlIGhlbHBlciBmaXJtd2FyZSAqLworI2RlZmluZSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWiA2NAorCisvKiBWYWx1ZSB0byB3cml0ZSB0byBpbmRpY2F0ZSBlbmQgb2YgaGVscGVyIGZpcm13YXJlIGRubGQgKi8KKyNkZWZpbmUgRklSTVdBUkVfRE5MRF9PSyAweDAwMDAKKworLyogVmFsdWUgdG8gY2hlY2sgb25jZSB0aGUgbWFpbiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkICovCisjZGVmaW5lIFNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMgMHg4ODg4ODg4OAorCisvKioqKioqKioqKioqKioqKiogU1BJIEludGVyZmFjZSBVbml0ICoqKioqKioqKioqKioqKioqLworLyogTWFza3MgdXNlZCBpbiBTUEkgcmVnaXN0ZXIgcmVhZC93cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIElGX1NQSV9SRUFEX09QRVJBVElPTl9NQVNLIDB4MAorI2RlZmluZSBJRl9TUElfV1JJVEVfT1BFUkFUSU9OX01BU0sgMHg4MDAwCisKKy8qIFNQSSByZWdpc3RlciBvZmZzZXRzLiA0LWJ5dGUgYWxpZ25lZC4gKi8KKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHIDB4MDAJLyogRGV2aWNlSUQgY29udHJvbGxlciByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1JFQURCQVNFX1JFRyAweDA0IAkvKiBSZWFkIEkvTyBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSU9fV1JJVEVCQVNFX1JFRyAweDA4CS8qIFdyaXRlIEkvTyBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSU9fUkRXUlBPUlRfUkVHIDB4MEMJLyogUmVhZC9Xcml0ZSBJL08gcG9ydCByZWcgKi8KKworI2RlZmluZSBJRl9TUElfQ01EX1JFQURCQVNFX1JFRyAweDEwCS8qIFJlYWQgY29tbWFuZCBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ01EX1dSSVRFQkFTRV9SRUcgMHgxNAkvKiBXcml0ZSBjb21tYW5kIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHIDB4MTgJLyogUmVhZC9Xcml0ZSBjb21tYW5kIHBvcnQgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0RBVEFfUkVBREJBU0VfUkVHIDB4MUMJLyogUmVhZCBkYXRhIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9EQVRBX1dSSVRFQkFTRV9SRUcgMHgyMAkvKiBXcml0ZSBkYXRhIGJhc2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRyAweDI0CS8qIFJlYWQvV3JpdGUgZGF0YSBwb3J0IHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzFfUkVHIDB4MjgJLyogU2NyYXRjaCByZWcgMSAqLworI2RlZmluZSBJRl9TUElfU0NSQVRDSF8yX1JFRyAweDJDCS8qIFNjcmF0Y2ggcmVnIDIgKi8KKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfM19SRUcgMHgzMAkvKiBTY3JhdGNoIHJlZyAzICovCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzRfUkVHIDB4MzQJLyogU2NyYXRjaCByZWcgNCAqLworCisjZGVmaW5lIElGX1NQSV9UWF9GUkFNRV9TRVFfTlVNX1JFRyAweDM4IC8qIFR4IGZyYW1lIHNlcXVlbmNlIG51bWJlciByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX1RYX0ZSQU1FX1NUQVRVU19SRUcgMHgzQwkvKiBUeCBmcmFtZSBzdGF0dXMgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHIDB4NDAJLyogSG9zdCBpbnRlcnJ1cHQgY29udHJvbGxlciByZWcgKi8KKworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHIDB4NDQJLyogQ2FyZCBpbnRlcnJ1cHQgY2F1c2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfUkVHIDB4NDggLyogQ2FyZCBpbnRlcnVwdCBzdGF0dXMgcmVnICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9FVkVOVF9NQVNLX1JFRyAweDRDIC8qIENhcmQgaW50ZXJydXB0IGV2ZW50IG1hc2sgKi8KKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX1NUQVRVU19NQVNLX1JFRwkweDUwIC8qIENhcmQgaW50ZXJydXB0IHN0YXR1cyBtYXNrICovCisKKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX1JFU0VUX1NFTEVDVF9SRUcgMHg1NCAvKiBDYXJkIGludGVycnVwdCByZXNldCBzZWxlY3QgKi8KKworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfQ0FVU0VfUkVHIDB4NTgJLyogSG9zdCBpbnRlcnJ1cHQgY2F1c2UgcmVnICovCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHIDB4NUMJLyogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfRVZFTlRfTUFTS19SRUcgMHg2MCAvKiBIb3N0IGludGVycnVwdCBldmVudCBtYXNrICovCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcJMHg2NCAvKiBIb3N0IGludGVycnVwdCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfUkVTRVRfU0VMRUNUX1JFRyAweDY4IC8qIEhvc3QgaW50ZXJydXB0IHJlc2V0IHNlbGVjdCAqLworCisjZGVmaW5lIElGX1NQSV9ERUxBWV9SRUFEX1JFRyAweDZDCS8qIERlbGF5IHJlYWQgcmVnICovCisjZGVmaW5lIElGX1NQSV9TUFVfQlVTX01PREVfUkVHIDB4NzAJLyogU1BVIEJVUyBtb2RlIHJlZyAqLworCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHICoqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9JRChkYykgKChkYyAmIDB4ZmZmZjAwMDApPj4xNikKKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfUkVWKGRjKSAoZGMgJiAweDAwMDAwMGZmKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHICoqKioqKioqKioqKioqKioqLworLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogV2FrZSB1cCAqLworI2RlZmluZSBJRl9TUElfSElDVF9XQUtFX1VQCQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogV0xBTiByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElDVF9XTEFOX1JFQURZCQkJCSgxPDwxKQorLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fRklSU1RfSEFMRl9FTVBUWQkJKDE8PDIpICovCisvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfRklGT19TRUNPTkRfSEFMRl9FTVBUWQkJKDE8PDMpICovCisvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfSVJRU1JDX1dMQU4JCQkoMTw8NCkgKi8KKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFR4IGF1dG8gZG93bmxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfVFhfRE9XTkxPQURfT1ZFUl9BVVRPCQkoMTw8NSkKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFJ4IGF1dG8gdXBsb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1JYX1VQTE9BRF9PVkVSX0FVVE8JCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byBkb3dubG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9DTURfRE9XTkxPQURfT1ZFUl9BVVRPCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byB1cGxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX1VQTE9BRF9PVkVSX0FVVE8JCSgxPDw4KQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFR4IGRvd25sb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19UWF9ET1dOTE9BRF9PVkVSCQkJKDE8PDApCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBSeCB1cGxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX1JYX1VQTE9BRF9PVkVSCQkJKDE8PDEpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBDb21tYW5kIGRvd25sb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUgkJCSgxPDwyKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogSG9zdCBldmVudCAqLworI2RlZmluZSBJRl9TUElfQ0lDX0hPU1RfRVZFTlQJCQkJKDE8PDMpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBDb21tYW5kIHVwbG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfQ01EX1VQTE9BRF9PVkVSCQkJKDE8PDQpCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBQb3dlciBkb3duICovCisjZGVmaW5lIElGX1NQSV9DSUNfUE9XRVJfRE9XTgkJCQkoMTw8NSkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfUkVHICoqKioqKioqKioqKioqKioqLworI2RlZmluZSBJRl9TUElfQ0lTX1RYX0RPV05MT0FEX09WRVIJCQkoMTw8MCkKKyNkZWZpbmUgSUZfU1BJX0NJU19SWF9VUExPQURfT1ZFUgkJCSgxPDwxKQorI2RlZmluZSBJRl9TUElfQ0lTX0NNRF9ET1dOTE9BRF9PVkVSCQkJKDE8PDIpCisjZGVmaW5lIElGX1NQSV9DSVNfSE9TVF9FVkVOVAkJCQkoMTw8MykKKyNkZWZpbmUgSUZfU1BJX0NJU19DTURfVVBMT0FEX09WRVIJCQkoMTw8NCkKKyNkZWZpbmUgSUZfU1BJX0NJU19QT1dFUl9ET1dOCQkJCSgxPDw1KQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX0NBVVNFX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1VfVFhfRE9XTkxPQURfUkRZCQkJKDE8PDApCisjZGVmaW5lIElGX1NQSV9ISUNVX1JYX1VQTE9BRF9SRFkJCQkoMTw8MSkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorI2RlZmluZSBJRl9TUElfSElDVV9DQVJEX0VWRU5UCQkJCSgxPDwzKQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQorI2RlZmluZSBJRl9TUElfSElDVV9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisjZGVmaW5lIElGX1NQSV9ISUNVX0lPX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8NikKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfREFUQV9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDgpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogVHggZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfVFhfRE9XTkxPQURfUkRZCQkJKDE8PDApCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IFJ4IHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDYXJkIGV2ZW50ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NBUkRfRVZFTlQJCQkJKDE8PDMpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0lPX1dSX0ZJRk9fT1ZFUkZMT1cJCQkoMTw8NSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfSU9fUkRfRklGT19VTkRSRkxPVwkJCSgxPDw2KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw5KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHICoqKioqKioqKioqKioqKioqLworLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IFJ4IHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfRE9XTkxPQURfUkRZCQkJKDE8PDIpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ2FyZCBldmVudCAqLworI2RlZmluZSBJRl9TUElfSElTTV9DQVJERVZFTlQJCQkJKDE8PDMpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fSU9fUkRfRklGT19VTkRFUkZMT1cJCSgxPDw2KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9EQVRBX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw3KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fREFUQV9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDgpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcgKioqKioqKioqKioqKioqKiovCisvKiBTQ0sgZWRnZSBvbiB3aGljaCB0aGUgV0xBTiBtb2R1bGUgb3V0cHV0cyBkYXRhIG9uIE1JU08gKi8KKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9GQUxMSU5HIDB4OAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyAweDAKKworLyogSW4gYSBTUFUgcmVhZCBvcGVyYXRpb24sIHRoZXJlIGlzIGEgZGVsYXkgYmV0d2VlbiB3cml0aW5nIHRoZSBTUFUKKyAqIHJlZ2lzdGVyIG5hbWUgYW5kIGdldHRpbmcgYmFjayBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlLgorICogVGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRlcm1zIG9mIG5hbm9zZWNvbmRzIG9yIGluIHRlcm1zIG9mIGR1bW15CisgKiBjbG9jayBjeWNsZXMgd2hpY2ggdGhlIG1hc3RlciBtdXN0IG91dHB1dCBiZWZvcmUgcmVjZWl2aW5nIGEgcmVzcG9uc2UuICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfRFVNTVlfQ0xPQ0sgMHg0CisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfVElNRUQgMHgwCisKKy8qIFNvbWUgZGlmZmVyZW50IG1vZGVzIG9mIFNQSSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzhfQklUX0FERFJFU1NfMTZfQklUX0RBVEEgMHgwMAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfOF9CSVRfQUREUkVTU18zMl9CSVRfREFUQSAweDAxCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18xNl9CSVRfREFUQSAweDAyCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18zMl9CSVRfREFUQSAweDAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGY3NjYyM2UuLjhhZTkzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTU4MiwyMCArNTgyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxic19ob3N0X3RvX2NhcmRfZG9uZSk7CiAKLS8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5ldHdvcmsgc3RhdGlzdGljcwotICoKLSAqICBAcGFyYW0gZGV2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdHVyZQotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxic19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCiBzdGF0aWMgaW50IGxic19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTEwMDYsOSArOTkyLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19yZXN1bWUpOwogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgZmlybXdhcmUgaW1hZ2UsIGdldHMKLSAqICBIVyBzcGVjIGZyb20gZmlybXdhcmUgYW5kIHNldCBiYXNpYyBwYXJhbWV0ZXJzIHRvCi0gKiAgZmlybXdhcmUuCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBIVyBzcGVjIGZyb20gdGhlIGZpcm13YXJlIGFuZCBzZXRzCisgKiAgICAgICAgc29tZSBiYXNpYyBwYXJhbWV0ZXJzLgogICoKICAqICBAcGFyYW0gcHJpdiAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICogIEByZXR1cm4gCSAgIDAgb3IgLTEKQEAgLTExNjMsNiArMTE0OCwxNyBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9NQUlOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsYnNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGxic19kZXZfb3BlbiwKKwkubmRvX3N0b3AJCT0gbGJzX2V0aF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsYnNfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbGJzX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3R4X3RpbWVvdXQgCT0gbGJzX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgY2FyZC4gaXQgd2lsbCBwcm9iZSB0aGUKICAqIGNhcmQsIGFsbG9jYXRlIHRoZSBsYnNfcHJpdiBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgpAQCAtMTE5NywxOSArMTE5MywxMyBAQAogCXByaXYtPmluZnJhX29wZW4gPSAwOwogCiAJLyogU2V0dXAgdGhlIE9TIEludGVyZmFjZSB0byBvdXIgZnVuY3Rpb25zICovCi0JZGV2LT5vcGVuID0gbGJzX2Rldl9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPnN0b3AgPSBsYnNfZXRoX3N0b3A7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYnNfc2V0X21hY19hZGRyZXNzOwotCWRldi0+dHhfdGltZW91dCA9IGxic190eF90aW1lb3V0OwotCWRldi0+Z2V0X3N0YXRzID0gbGJzX2dldF9zdGF0czsKKyAJZGV2LT5uZXRkZXZfb3BzID0gJmxic19uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZsYnNfZXRodG9vbF9vcHM7CiAjaWZkZWYJV0lSRUxFU1NfRVhUCi0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbGJzX2hhbmRsZXJfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmbGJzX2hhbmRsZXJfZGVmOwogI2VuZGlmCiAJZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsIGRtZGV2KTsKIApAQCAtMTQxOSw2ICsxNDA5LDE0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfc3RvcF9jYXJkKTsKIAogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1lc2hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbGJzX2Rldl9vcGVuLAorCS5uZG9fc3RvcCAJCT0gbGJzX21lc2hfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogLyoqCiAgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhZGRzIG1zaFggaW50ZXJmYWNlCiAgKgpAQCAtMTQ0MSwxMSArMTQzOSw3IEBACiAJbWVzaF9kZXYtPm1sX3ByaXYgPSBwcml2OwogCXByaXYtPm1lc2hfZGV2ID0gbWVzaF9kZXY7CiAKLQltZXNoX2Rldi0+b3BlbiA9IGxic19kZXZfb3BlbjsKLQltZXNoX2Rldi0+aGFyZF9zdGFydF94bWl0ID0gbGJzX2hhcmRfc3RhcnRfeG1pdDsKLQltZXNoX2Rldi0+c3RvcCA9IGxic19tZXNoX3N0b3A7Ci0JbWVzaF9kZXYtPmdldF9zdGF0cyA9IGxic19nZXRfc3RhdHM7Ci0JbWVzaF9kZXYtPnNldF9tYWNfYWRkcmVzcyA9IGxic19zZXRfbWFjX2FkZHJlc3M7CisJbWVzaF9kZXYtPm5ldGRldl9vcHMgPSAmbWVzaF9uZXRkZXZfb3BzOwogCW1lc2hfZGV2LT5ldGh0b29sX29wcyA9ICZsYnNfZXRodG9vbF9vcHM7CiAJbWVtY3B5KG1lc2hfZGV2LT5kZXZfYWRkciwgcHJpdi0+ZGV2LT5kZXZfYWRkciwKIAkJCXNpemVvZihwcml2LT5kZXYtPmRldl9hZGRyKSk7CkBAIC0xNDU2LDcgKzE0NTAsNiBAQAogCW1lc2hfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmbWVzaF9oYW5kbGVyX2RlZjsKICNlbmRpZgogCW1lc2hfZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKLQltZXNoX2Rldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdDsKIAkvKiBSZWdpc3RlciB2aXJ0dWFsIG1lc2ggaW50ZXJmYWNlICovCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG1lc2hfZGV2KTsKIAlpZiAocmV0KSB7CkBAIC0xNjQ5LDE0ICsxNjQyLDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGJzX3J0YXBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9ORVQpOwotCXJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQgbGJzX3JlbW92ZV9ydGFwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CkBAIC0xNjY5LDYgKzE2NTQsMTIgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRhcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGxic19ydGFwX29wZW4sCisJLm5kb19zdG9wID0gbGJzX3J0YXBfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgaW50IGxic19hZGRfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xNjg4LDEwICsxNjc5LDcgQEAKIAogCW1lbWNweShydGFwX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmN1cnJlbnRfYWRkciwgRVRIX0FMRU4pOwogCXJ0YXBfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKLQlydGFwX2Rldi0+b3BlbiA9IGxic19ydGFwX29wZW47Ci0JcnRhcF9kZXYtPnN0b3AgPSBsYnNfcnRhcF9zdG9wOwotCXJ0YXBfZGV2LT5nZXRfc3RhdHMgPSBsYnNfcnRhcF9nZXRfc3RhdHM7Ci0JcnRhcF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19ydGFwX2hhcmRfc3RhcnRfeG1pdDsKKwlydGFwX2Rldi0+bmV0ZGV2X29wcyA9ICZydGFwX25ldGRldl9vcHM7CiAJcnRhcF9kZXYtPm1sX3ByaXYgPSBwcml2OwogCVNFVF9ORVRERVZfREVWKHJ0YXBfZGV2LCBwcml2LT5kZXYtPmRldi5wYXJlbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwppbmRleCAwNzllNmFhLi40ZjYwOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKEVUSF9ITEVOICsgOCArIHNpemVvZihzdHJ1Y3QgcnhwZCkpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgbGVuZ3RoXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE3OSw3ICsxNzksNyBAQAogCWlmICghKHBfcnhfcGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgc3RhdHVzXG4iKTsKIAkJbGJzX3ByX2FsZXJ0KCJyeHBkIG5vdCBva1xuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXQgPSAwOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjQzLDggKzI0Myw4IEBACiAJbGJzX2NvbXB1dGVfcnNzaShwcml2LCBwX3J4X3BkKTsKIAogCWxic19kZWJfcngoInJ4IGRhdGE6IHNpemUgb2YgYWN0dWFsIHBhY2tldCAlZFxuIiwgc2tiLT5sZW4pOwotCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAlpZiAoaW5faW50ZXJydXB0KCkpCkBAIC0zMTEsNyArMzExLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByZXQgPSAwOwotCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKIAlzdHJ1Y3Qgcng4MDIxMXBhY2tldGhkciAqcF9yeF9wa3Q7CiAJc3RydWN0IHJ4cGQgKnByeHBkOwogCXN0cnVjdCByeF9yYWRpb3RhcF9oZHIgcmFkaW90YXBfaGRyOwpAQCAtMzI2LDcgKzMyNiw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCAoRVRIX0hMRU4gKyA4ICsgc2l6ZW9mKHN0cnVjdCByeHBkKSkpIHsKIAkJbGJzX2RlYl9yeCgicnggZXJyOiBmcmFtZSByZWNlaXZlZCB3aXRoIGJhZCBsZW5ndGhcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlyZXQgPSAtRUlOVkFMOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBkb25lOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJICovCiAJaWYgKCEocHJ4cGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKSB7CiAJCS8vbGJzX2RlYl9yeCgicnggZXJyOiBmcmFtZSByZWNlaXZlZCB3aXRoIGJhZCBzdGF0dXNcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAl9CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBza2ItPmxlbi1zaXplb2YoUnhQZCkgPSAlZC0lemQgPSAlemRcbiIsCkBAIC0zODksOCArMzg5LDggQEAKIAlsYnNfY29tcHV0ZV9yc3NpKHByaXYsIHByeHBkKTsKIAogCWxic19kZWJfcngoInJ4IGRhdGE6IHNpemUgb2YgYWN0dWFsIHBhY2tldCAlZFxuIiwgc2tiLT5sZW4pOwotCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdi0+cnRhcF9uZXRfZGV2KTsKIAluZXRpZl9yeChza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCmluZGV4IDkwMTQ5NTAuLjgxMjRkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKQEAgLTY5Miw3ICs2OTIsNyBAQAogCQkJCQkgICAgYnNzLT53cGFfaWVfbGVuKTsKIAkJCX0gZWxzZSBpZiAocG9zWzFdID49IE1BUlZFTExfTUVTSF9JRV9MRU5HVEggJiYKIAkJCQkgICBwb3NbMl0gPT0gMHgwMCAmJiBwb3NbM10gPT0gMHg1MCAmJgotCQkJCSAgIHBvc1s0XSA9PSAweDQzICYmIHBvc1s0XSA9PSAweDA0KSB7CisJCQkJICAgcG9zWzRdID09IDB4NDMgJiYgcG9zWzVdID09IDB4MDQpIHsKIAkJCQlsYnNfZGViX3NjYW4oImdvdCBtZXNoIElFXG4iKTsKIAkJCQlic3MtPm1lc2ggPSAxOwogCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCmluZGV4IDY4YmVjMzEuLmYxMGFhMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtODIsOCArODIsOCBAQAogCQkgICAgICAgc2tiLT5sZW4sIE1SVkRSVl9FVEhfVFhfUEFDS0VUX0JVRkZFUl9TSVpFKTsKIAkJLyogV2UnbGwgbmV2ZXIgbWFuYWdlIHRvIHNlbmQgdGhpcyBvbmU7IGRyb3AgaXQgYW5kIHJldHVybiAnT0snICovCiAKLQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWdvdG8gZnJlZTsKIAl9CiAKQEAgLTE0Niw4ICsxNDYsOCBAQAogCiAJbGJzX2RlYl90eCgiJXMgbGluZWQgdXAgcGFja2V0XG4iLCBfX2Z1bmNfXyk7CiAKLQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKaW5kZXggZjE2ZDEzNi4uOGJjMTkwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKQEAgLTgzMCw3ICs4MzAsNyBAQAogCXF1YWxpdHkgPSByc3NpX3F1YWw7CiAKIAkvKiBRdWFsaXR5IGJ5IFRYIGVycm9ycyAqLwotCXByaXYtPndzdGF0cy5kaXNjYXJkLnJldHJpZXMgPSBwcml2LT5zdGF0cy50eF9lcnJvcnM7CisJcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IGRldi0+c3RhdHMudHhfZXJyb3JzOwogCiAJbWVtc2V0KCZsb2csIDAsIHNpemVvZihsb2cpKTsKIAlsb2cuaGRyLnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YobG9nKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2NtZC5jCmluZGV4IDNkMzkxNGMuLjI4NzkwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2NtZC5jCkBAIC0yODYsNyArMjg2LDcgQEAKIAlsYnRmX2NtZF9hc3luYyhwcml2LCBDTURfODAyXzExX1NFVF9NT0RFLCAmY21kLmhkciwgc2l6ZW9mKGNtZCkpOwogfQogCi12b2lkIGxidGZfc2V0X2Jzc2lkKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGJvb2wgYWN0aXZhdGUsIHU4ICpic3NpZCkKK3ZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgY29uc3QgdTggKmJzc2lkKQogewogCXN0cnVjdCBjbWRfZHNfc2V0X2Jzc2lkIGNtZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKaW5kZXggODk5NWNkNy4uNGNjNDJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCkBAIC00NjMsNyArNDYzLDcgQEAKIGludCBsYnRmX3VwZGF0ZV9od19zcGVjKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYpOwogaW50IGxidGZfY21kX3NldF9tYWNfbXVsdGljYXN0X2FkZHIoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdik7CiB2b2lkIGxidGZfc2V0X21vZGUoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgZW51bSBsYnRmX21vZGUgbW9kZSk7Ci12b2lkIGxidGZfc2V0X2Jzc2lkKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGJvb2wgYWN0aXZhdGUsIHU4ICpic3NpZCk7Cit2b2lkIGxidGZfc2V0X2Jzc2lkKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIGJvb2wgYWN0aXZhdGUsIGNvbnN0IHU4ICpic3NpZCk7CiBpbnQgbGJ0Zl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgdWludDhfdCAqbWFjX2FkZHIpOwogCiBpbnQgbGJ0Zl9zZXRfY2hhbm5lbChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCB1OCBjaGFubmVsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCmluZGV4IGY4M2Q2OWUuLjIzNjhiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpAQCAtMTAsNyArMTAsNiBAQAogLyoKICAqIFRPRE86CiAgKiAtIElCU1MgbW9kZSBzaW11bGF0aW9uIChCZWFjb24gdHJhbnNtaXNzaW9uIHdpdGggY29tcGV0aXRpb24gZm9yICJhaXIgdGltZSIpCi0gKiAtIElFRUUgODAyLjExYSBhbmQgODAyLjExbiBtb2RlcwogICogLSBSWCBmaWx0ZXJpbmcgYmFzZWQgb24gZmlsdGVyIGNvbmZpZ3VyYXRpb24gKGRhdGEtPnJ4X2ZpbHRlcikKICAqLwogCkBAIC0zMSw2ICszMCwxMTIgQEAKIG1vZHVsZV9wYXJhbShyYWRpb3MsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvcywgIk51bWJlciBvZiBzaW11bGF0ZWQgcmFkaW9zIik7CiAKKy8qKgorICogZW51bSBod3NpbV9yZWd0ZXN0IC0gdGhlIHR5cGUgb2YgcmVndWxhdG9yeSB0ZXN0cyB3ZSBvZmZlcgorICoKKyAqIFRoZXNlIGFyZSB0aGUgZGlmZmVyZW50IHZhbHVlcyB5b3UgY2FuIHVzZSBmb3IgdGhlIHJlZ3Rlc3QKKyAqIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgaXMgdXNlZnVsIHRvIGhlbHAgdGVzdCB3b3JsZCByb2FtaW5nCisgKiBhbmQgdGhlIGRyaXZlciByZWd1bGF0b3J5X2hpbnQoKSBjYWxsIGFuZCBjb21iaW5hdGlvbnMgb2YgdGhlc2UuCisgKiBJZiB5b3Ugd2FudCB0byBkbyBzcGVjaWZpYyBhbHBoYTIgcmVndWxhdG9yeSBkb21haW4gdGVzdHMgc2ltcGx5CisgKiB1c2UgdGhlIHVzZXJzcGFjZSByZWd1bGF0b3J5IHJlcXVlc3QgYXMgdGhhdCB3aWxsIGJlIHJlc3BlY3RlZCBhcworICogd2VsbCB3aXRob3V0IHRoZSBuZWVkIG9mIHRoaXMgbW9kdWxlIHBhcmFtZXRlci4gVGhpcyBpcyBkZXNpZ25lZAorICogb25seSBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdCwgd29ybGQgcm9hbWluZworICogYW5kIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMuCisgKgorICogQEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6IE5vIHJlZ3VsYXRvcnkgdGVzdHMgYXJlIHBlcmZvcm1lZCwKKyAqIAl0aGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLgorICogQEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19GT0xMT1c6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5CisgKgloaW50LCBvbmx5IG9uZSBkcml2ZXIgcmVndWxhdG9yeSBoaW50IHdpbGwgYmUgc2VudCBhcyBzdWNoIHRoZQorICogCXNlY29uZGFyeSByYWRpb3MgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdy4KKyAqIEBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeQorICogCXJlcXVlc3Qgd2l0aCBhbGwgcmFkaW9zIHJlcG9ydGluZyB0aGUgc2FtZSByZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBIV1NJTV9SRUdURVNUX0RJRkZfQ09VTlRSWTogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVycyBjYWxsaW5nCisgKiAJZGlmZmVyZW50IHJlZ3VsYXRvcnkgZG9tYWlucyByZXF1ZXN0cy4gRXhwZWN0ZWQgYmVoYXZpb3VyIGlzIGZvcgorICogCWFuIGludGVyc2VjdGlvbiB0byBvY2N1ciBidXQgZWFjaCBkZXZpY2Ugd2lsbCBzdGlsbCB1c2UgdGhlaXIKKyAqIAlyZXNwZWN0aXZlIHJlZ3VsYXRvcnkgcmVxdWVzdGVkIGRvbWFpbnMuIFN1YnNlcXVlbnQgcmFkaW9zIHdpbGwKKyAqIAl1c2UgdGhlIHJlc3VsdGluZyBpbnRlcnNlY3Rpb24uCisgKiBASFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSB3b3JsZCByb2FtaW5nLiBXZSBhY29tcGxpc2gKKyAqCXRoaXMgYnkgdXNpbmcgYSBjdXN0b20gYmVhY29uLWNhcGFibGUgcmVndWxhdG9yeSBkb21haW4gZm9yIHRoZSBmaXJzdAorICoJcmFkaW8uIEFsbCBvdGhlciBkZXZpY2Ugd29ybGQgcm9hbS4KKyAqIEBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDogVXNlZCBmb3IgdGVzdGluZyB0aGUgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4gcmVxdWVzdHMuIEFsbCByYWRpb3Mgd2lsbCBhZGhlcmUgdG8gdGhpcyBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbi4KKyAqIEBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRF8yOiBVc2VkIGZvciB0ZXN0aW5nIDIgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4gcmVxdWVzdHMuIFRoZSBmaXJzdCByYWRpbyB3aWxsIGFkaGVyZSB0byB0aGUgZmlyc3QgY3VzdG9tIHdvcmxkCisgKiAJcmVndWxhdG9yeSBkb21haW4sIHRoZSBzZWNvbmQgb25lIHRvIHRoZSBzZWNvbmQgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uIEFsbCBvdGhlciBkZXZpY2VzIHdpbGwgd29ybGQgcm9hbS4KKyAqIEBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1dfOiBVc2VkIGZvciB0ZXN0aW5nIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbgorICoJc2V0dGluZ3MsIG9ubHkgdGhlIGZpcnN0IHJhZGlvIHdpbGwgc2VuZCBhIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqCWFuZCB1c2Ugc3RyaWN0IHNldHRpbmdzLiBUaGUgcmVzdCBvZiB0aGUgcmFkaW9zIGFyZSBleHBlY3RlZCB0byBmb2xsb3cuCisgKiBASFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMOiBVc2VkIGZvciB0ZXN0aW5nIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbgorICoJc2V0dGluZ3MuIEFsbCByYWRpb3Mgd2lsbCBhZGhlcmUgdG8gdGhpcy4KKyAqIEBIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRzogVXNlZCBmb3IgdGVzdGluZyBzdHJpY3QgcmVndWxhdG9yeQorICoJZG9tYWluIHNldHRpbmdzLCBjb21iaW5lZCB3aXRoIHNlY29uZGFyeSBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4KKyAqCXNldHRpbmdzLiBUaGUgZmlyc3QgcmFkaW8gd2lsbCBnZXQgYSBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4gc2V0dGluZworICoJdXNpbmcgdGhlIGZpcnN0IGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QgYW5kIHRoZSBzZWNvbmQgcmFkaW8gd2lsbCB1c2UKKyAqCW5vbi1zdHJpY3Qgc2V0dGluZ3MgdXNpbmcgdGhlIHNlY29uZCBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0LiBBbGwKKyAqCW90aGVyIGRldmljZXMgc2hvdWxkIGZvbGxvdyB0aGUgaW50ZXJzZWN0aW9uIGNyZWF0ZWQgYmV0d2VlbiB0aGUKKyAqCWZpcnN0IHR3by4KKyAqIEBIV1NJTV9SRUdURVNUX0FMTDogVXNlZCBmb3IgdGVzdGluZyBldmVyeSBwb3NzaWJsZSBtaXguIFlvdSB3aWxsIG5lZWQKKyAqIAlhdCBsZWFzdCA2IHJhZGlvcyBmb3IgYSBjb21wbGV0ZSB0ZXN0LiBXZSB3aWxsIHRlc3QgaW4gdGhpcyBvcmRlcjoKKyAqIAkxIC0gZHJpdmVyIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbgorICogCTIgLSBzZWNvbmQgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJMyAtIGZpcnN0IGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKiAJNCAtIHNlY29uZCBkcml2ZXIgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICogCTUgLSBzdHJpY3QgcmVndWxhdG9yeSBkb21haW4gc2V0dGluZ3MgdXNpbmcgdGhlIHRoaXJkIGRyaXZlciByZWd1bGF0b3J5CisgKiAJICAgIGRvbWFpbiByZXF1ZXN0CisgKiAJNiBhbmQgb24gLSBzaG91bGQgZm9sbG93IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIDNyZCwgNHJ0aCBhbmQgNXRoIHJhZGlvCisgKiAJICAgICAgICAgICByZWd1bGF0b3J5IHJlcXVlc3RzLgorICovCitlbnVtIGh3c2ltX3JlZ3Rlc3QgeworCUhXU0lNX1JFR1RFU1RfRElTQUJMRUQgPSAwLAorCUhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19GT0xMT1cgPSAxLAorCUhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEwgPSAyLAorCUhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZID0gMywKKwlIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU0gPSA0LAorCUhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEID0gNSwKKwlIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRF8yID0gNiwKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1cgPSA3LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTCA9IDgsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUcgPSA5LAorCUhXU0lNX1JFR1RFU1RfQUxMID0gMTAsCit9OworCisvKiBTZXQgdG8gb25lIG9mIHRoZSBIV1NJTV9SRUdURVNUXyogdmFsdWVzIGFib3ZlICovCitzdGF0aWMgaW50IHJlZ3Rlc3QgPSBIV1NJTV9SRUdURVNUX0RJU0FCTEVEOworbW9kdWxlX3BhcmFtKHJlZ3Rlc3QsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlZ3Rlc3QsICJUaGUgdHlwZSBvZiByZWd1bGF0b3J5IHRlc3Qgd2Ugd2FudCB0byBydW4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmh3c2ltX2FscGhhMnNbXSA9IHsKKwkiRkkiLAorCSJBTCIsCisJIlVTIiwKKwkiREUiLAorCSJKUCIsCisJIkFMIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCAwLCAyMCwgMCksCisJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDQwLCAwLCAyMCwgMCksCisJCVJFR19SVUxFKDUxNTAtMTAsIDUyNDArMTAsIDQwLCAwLCAzMCwgMCksCisJCVJFR19SVUxFKDU3NDUtMTAsIDU4MjUrMTAsIDQwLCAwLCAzMCwgMCksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIgPSB7CisJLm5fcmVnX3J1bGVzID0gMiwKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoNTcyNS0xMCwgNTg1MCsxMCwgNDAsIDAsIDMwLAorCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fSUJTUyksCisJfQorfTsKKwogc3RydWN0IGh3c2ltX3ZpZl9wcml2IHsKIAl1MzIgbWFnaWM7CiAJdTggYnNzaWRbRVRIX0FMRU5dOwpAQCAtODYsMjIgKzE5MSw2NSBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmh3c2ltX21vbjsgLyogZ2xvYmFsIG1vbml0b3IgbmV0ZGV2ICovCiAKKyNkZWZpbmUgQ0hBTjJHKF9mcmVxKSAgeyBcCisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCBcCisJLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAorCS5od192YWx1ZSA9IChfZnJlcSksIFwKKwkubWF4X3Bvd2VyID0gMjAsIFwKK30KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBod3NpbV9jaGFubmVsc1tdID0gewotCXsgLmNlbnRlcl9mcmVxID0gMjQxMiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQxNyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyMiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyNyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzMiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzNyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0NyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1NyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2NyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCB9LAorI2RlZmluZSBDSEFONUcoX2ZyZXEpIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2ZyZXEpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgaHdzaW1fY2hhbm5lbHNfMmdoeltdID0geworCUNIQU4yRygyNDEyKSwgLyogQ2hhbm5lbCAxICovCisJQ0hBTjJHKDI0MTcpLCAvKiBDaGFubmVsIDIgKi8KKwlDSEFOMkcoMjQyMiksIC8qIENoYW5uZWwgMyAqLworCUNIQU4yRygyNDI3KSwgLyogQ2hhbm5lbCA0ICovCisJQ0hBTjJHKDI0MzIpLCAvKiBDaGFubmVsIDUgKi8KKwlDSEFOMkcoMjQzNyksIC8qIENoYW5uZWwgNiAqLworCUNIQU4yRygyNDQyKSwgLyogQ2hhbm5lbCA3ICovCisJQ0hBTjJHKDI0NDcpLCAvKiBDaGFubmVsIDggKi8KKwlDSEFOMkcoMjQ1MiksIC8qIENoYW5uZWwgOSAqLworCUNIQU4yRygyNDU3KSwgLyogQ2hhbm5lbCAxMCAqLworCUNIQU4yRygyNDYyKSwgLyogQ2hhbm5lbCAxMSAqLworCUNIQU4yRygyNDY3KSwgLyogQ2hhbm5lbCAxMiAqLworCUNIQU4yRygyNDcyKSwgLyogQ2hhbm5lbCAxMyAqLworCUNIQU4yRygyNDg0KSwgLyogQ2hhbm5lbCAxNCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBod3NpbV9jaGFubmVsc181Z2h6W10gPSB7CisJQ0hBTjVHKDUxODApLCAvKiBDaGFubmVsIDM2ICovCisJQ0hBTjVHKDUyMDApLCAvKiBDaGFubmVsIDQwICovCisJQ0hBTjVHKDUyMjApLCAvKiBDaGFubmVsIDQ0ICovCisJQ0hBTjVHKDUyNDApLCAvKiBDaGFubmVsIDQ4ICovCisKKwlDSEFONUcoNTI2MCksIC8qIENoYW5uZWwgNTIgKi8KKwlDSEFONUcoNTI4MCksIC8qIENoYW5uZWwgNTYgKi8KKwlDSEFONUcoNTMwMCksIC8qIENoYW5uZWwgNjAgKi8KKwlDSEFONUcoNTMyMCksIC8qIENoYW5uZWwgNjQgKi8KKworCUNIQU41Ryg1NTAwKSwgLyogQ2hhbm5lbCAxMDAgKi8KKwlDSEFONUcoNTUyMCksIC8qIENoYW5uZWwgMTA0ICovCisJQ0hBTjVHKDU1NDApLCAvKiBDaGFubmVsIDEwOCAqLworCUNIQU41Ryg1NTYwKSwgLyogQ2hhbm5lbCAxMTIgKi8KKwlDSEFONUcoNTU4MCksIC8qIENoYW5uZWwgMTE2ICovCisJQ0hBTjVHKDU2MDApLCAvKiBDaGFubmVsIDEyMCAqLworCUNIQU41Ryg1NjIwKSwgLyogQ2hhbm5lbCAxMjQgKi8KKwlDSEFONUcoNTY0MCksIC8qIENoYW5uZWwgMTI4ICovCisJQ0hBTjVHKDU2NjApLCAvKiBDaGFubmVsIDEzMiAqLworCUNIQU41Ryg1NjgwKSwgLyogQ2hhbm5lbCAxMzYgKi8KKwlDSEFONUcoNTcwMCksIC8qIENoYW5uZWwgMTQwICovCisKKwlDSEFONUcoNTc0NSksIC8qIENoYW5uZWwgMTQ5ICovCisJQ0hBTjVHKDU3NjUpLCAvKiBDaGFubmVsIDE1MyAqLworCUNIQU41Ryg1Nzg1KSwgLyogQ2hhbm5lbCAxNTcgKi8KKwlDSEFONUcoNTgwNSksIC8qIENoYW5uZWwgMTYxICovCisJQ0hBTjVHKDU4MjUpLCAvKiBDaGFubmVsIDE2NSAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBod3NpbV9yYXRlc1tdID0gewpAQCAtMTI2LDggKzI3NCw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzW0FSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHMpXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRzWzJdOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc18yZ2h6W0FSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfMmdoeildOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc181Z2h6W0FSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfNWdoeildOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1tBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKV07CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CkBAIC01OTAsMTAgKzczOSwxNiBAQAogCS5uYW1lID0gIm1hYzgwMjExX2h3c2ltIgogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBod3NpbV9uZXRkZXZfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBod3NpbV9tb25feG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIHZvaWQgaHdzaW1fbW9uX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBod3NpbV9tb25feG1pdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaHdzaW1fbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKIAlldGhlcl9zZXR1cChkZXYpOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKQEAgLTcyOCw2ICs4ODMsNyBAQAogCXU4IGFkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAogCWlmIChyYWRpb3MgPCAxIHx8IHJhZGlvcyA+IDEwMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NzksMjkgKzkzNSwxMTEgQEAKIAkJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKIAkJaHctPmFtcGR1X3F1ZXVlcyA9IDE7CiAKKwkJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCiAJCS8qIGFzayBtYWM4MDIxMSB0byByZXNlcnZlIHNwYWNlIGZvciBtYWdpYyAqLwogCQlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYpOwogCQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHdzaW1fc3RhX3ByaXYpOwogCi0JCW1lbWNweShkYXRhLT5jaGFubmVscywgaHdzaW1fY2hhbm5lbHMsIHNpemVvZihod3NpbV9jaGFubmVscykpOworCQltZW1jcHkoZGF0YS0+Y2hhbm5lbHNfMmdoeiwgaHdzaW1fY2hhbm5lbHNfMmdoeiwKKwkJCXNpemVvZihod3NpbV9jaGFubmVsc18yZ2h6KSk7CisJCW1lbWNweShkYXRhLT5jaGFubmVsc181Z2h6LCBod3NpbV9jaGFubmVsc181Z2h6LAorCQkJc2l6ZW9mKGh3c2ltX2NoYW5uZWxzXzVnaHopKTsKIAkJbWVtY3B5KGRhdGEtPnJhdGVzLCBod3NpbV9yYXRlcywgc2l6ZW9mKGh3c2ltX3JhdGVzKSk7Ci0JCWRhdGEtPmJhbmQuY2hhbm5lbHMgPSBkYXRhLT5jaGFubmVsczsKLQkJZGF0YS0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShod3NpbV9jaGFubmVscyk7Ci0JCWRhdGEtPmJhbmQuYml0cmF0ZXMgPSBkYXRhLT5yYXRlczsKLQkJZGF0YS0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShod3NpbV9yYXRlcyk7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmh0X3N1cHBvcnRlZCA9IHRydWU7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmNhcCA9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8Ci0JCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8Ci0JCQlJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKLQkJZGF0YS0+YmFuZC5odF9jYXAuYW1wZHVfZmFjdG9yID0gMHgzOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5hbXBkdV9kZW5zaXR5ID0gMHg2OwotCQltZW1zZXQoJmRhdGEtPmJhbmQuaHRfY2FwLm1jcywgMCwKLQkJICAgICAgIHNpemVvZihkYXRhLT5iYW5kLmh0X2NhcC5tY3MpKTsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MucnhfbWFza1sxXSA9IDB4ZmY7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy50eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7Ci0JCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmZGF0YS0+YmFuZDsKKworCQlmb3IgKGJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9ICZkYXRhLT5iYW5kc1tiYW5kXTsKKwkJCXN3aXRjaCAoYmFuZCkgeworCQkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQkJCXNiYW5kLT5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzXzJnaHo7CisJCQkJc2JhbmQtPm5fY2hhbm5lbHMgPQorCQkJCQlBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzJnaHopOworCQkJCWJyZWFrOworCQkJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQkJCXNiYW5kLT5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzXzVnaHo7CisJCQkJc2JhbmQtPm5fY2hhbm5lbHMgPQorCQkJCQlBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzXzVnaHopOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2JhbmQtPmJpdHJhdGVzID0gZGF0YS0+cmF0ZXM7CisJCQlzYmFuZC0+bl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpOworCisJCQlzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCA9IHRydWU7CisJCQlzYmFuZC0+aHRfY2FwLmNhcCA9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwIHwKKwkJCQlJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKKwkJCQlJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKKwkJCXNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yID0gMHgzOworCQkJc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ID0gMHg2OworCQkJbWVtc2V0KCZzYmFuZC0+aHRfY2FwLm1jcywgMCwKKwkJCSAgICAgICBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPSAweGZmOworCQkJc2JhbmQtPmh0X2NhcC5tY3MucnhfbWFza1sxXSA9IDB4ZmY7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy50eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7CisKKwkJCWh3LT53aXBoeS0+YmFuZHNbYmFuZF0gPSBzYmFuZDsKKwkJfQorCisJCS8qIFdvcmsgdG8gYmUgZG9uZSBwcmlvciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKSAqLworCQlzd2l0Y2ggKHJlZ3Rlc3QpIHsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RJU0FCTEVEOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19GT0xMT1c6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RJRkZfQ09VTlRSWToKKwkJCS8qCisJCQkgKiBOb3RoaW5nIHRvIGJlIGRvbmUgZm9yIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgorCQkJICogaGludHMgcHJpb3IgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkKKwkJCSAqLworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNOgorCQkJaWYgKGkgPT0gMCkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQ6CisJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRF8yOgorCQkJaWYgKGkgPT0gMCkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEpOworCQkJfSBlbHNlIGlmIChpID09IDEpIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FMTDoKKwkJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfRk9MTE9XOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHOgorCQkJaWYgKGkgPT0gMCkKKwkJCQlody0+d2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQUxMOgorCQkJaWYgKGkgPT0gMCkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEpOworCQkJfSBlbHNlIGlmIChpID09IDEpIHsKKwkJCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJCQl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeShody0+d2lwaHksCisJCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAyKTsKKwkJCX0gZWxzZSBpZiAoaSA9PSA0KQorCQkJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCiAJCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CiAJCWlmIChlcnIgPCAwKSB7CkBAIC04MTAsNiArMTA0OCw1MiBAQAogCQkJZ290byBmYWlsZWRfaHc7CiAJCX0KIAorCQkvKiBXb3JrIHRvIGJlIGRvbmUgYWZ0ZXIgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkgKi8KKwkJc3dpdGNoIChyZWd0ZXN0KSB7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOgorCQkJaWYgKCFpKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+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+cmVzZXRfd29yayk7CisJCWVyciA9IDA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBvcmlub2NvX3ByaXZ0YWJbXSA9IHsKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MCwgMCwgMCwgImZvcmNlX3Jlc2V0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgxLCAwLCAwLCAiY2FyZF9yZXNldCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAwLCAic2V0X3BvcnQzIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgzLCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICJnZXRfcG9ydDMiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDQsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgMCwgInNldF9wcmVhbWJsZSIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NSwgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAiZ2V0X3ByZWFtYmxlIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg2LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIDAsICJzZXRfaWJzc3BvcnQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDcsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgImdldF9pYnNzcG9ydCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4OSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBNQVhfUklEX0xFTiwKKwkgICJnZXRfcmlkIiB9LAorfTsKKworCisvKgorICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCisgKi8KKworI2RlZmluZSBTVERfSVdfSEFORExFUihpZCwgZnVuYykgXAorCVtJV19JT0NUTF9JRFgoaWQpXSA9IChpd19oYW5kbGVyKSBmdW5jCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX2hhbmRsZXJbXSA9IHsKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQ09NTUlULAlvcmlub2NvX2lvY3RsX2NvbW1pdCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCW9yaW5vY29faW9jdGxfZ2V0bmFtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsCW9yaW5vY29faW9jdGxfc2V0ZnJlcSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsCW9yaW5vY29faW9jdGxfZ2V0ZnJlcSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCW9yaW5vY29faW9jdGxfc2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCW9yaW5vY29faW9jdGxfZ2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NFTlMsCW9yaW5vY29faW9jdGxfc2V0c2VucyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NFTlMsCW9yaW5vY29faW9jdGxfZ2V0c2VucyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLAlvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2UpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTUFksCWl3X2hhbmRsZXJfc2V0X3NweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NQWSwJaXdfaGFuZGxlcl9nZXRfc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXVEhSU1BZLAlpd19oYW5kbGVyX3NldF90aHJzcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdUSFJTUFksCWl3X2hhbmRsZXJfZ2V0X3RocnNweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FQLAlvcmlub2NvX2lvY3RsX3NldHdhcCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FQLAlvcmlub2NvX2lvY3RsX2dldHdhcCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCW9yaW5vY29faW9jdGxfc2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCW9yaW5vY29faW9jdGxfZ2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VTU0lELAlvcmlub2NvX2lvY3RsX3NldGVzc2lkKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRVNTSUQsCW9yaW5vY29faW9jdGxfZ2V0ZXNzaWQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9zZXRuaWNrKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTklDS04sCW9yaW5vY29faW9jdGxfZ2V0bmljayksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JBVEUsCW9yaW5vY29faW9jdGxfc2V0cmF0ZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBVEUsCW9yaW5vY29faW9jdGxfZ2V0cmF0ZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JUUywJb3Jpbm9jb19pb2N0bF9zZXRydHMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSVFMsCW9yaW5vY29faW9jdGxfZ2V0cnRzKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRlJBRywJb3Jpbm9jb19pb2N0bF9zZXRmcmFnKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRlJBRywJb3Jpbm9jb19pb2N0bF9nZXRmcmFnKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkVUUlksCW9yaW5vY29faW9jdGxfZ2V0cmV0cnkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREUsCW9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREUsCW9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9zZXRwb3dlciksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLAlvcmlub2NvX2lvY3RsX2dldHBvd2VyKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXR0VOSUUsCW9yaW5vY29faW9jdGxfc2V0X2dlbmllKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXR0VOSUUsCW9yaW5vY29faW9jdGxfZ2V0X2dlbmllKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXTUxNRSwJb3Jpbm9jb19pb2N0bF9zZXRfbWxtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsCW9yaW5vY29faW9jdGxfc2V0X2F1dGgpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBVVRILAlvcmlub2NvX2lvY3RsX2dldF9hdXRoKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dCksCit9OworCisKKy8qCisgIEFkZGVkIHR5cGVjYXN0aW5nIHNpbmNlIHdlIG5vIGxvbmdlciB1c2UgaXdyZXFfZGF0YSAtLSBNb3VzdGFmYQorICovCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX3ByaXZhdGVfaGFuZGxlcltdID0geworCVswXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAorCVsxXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAorCVsyXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHBvcnQzLAorCVszXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHBvcnQzLAorCVs0XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlLAorCVs1XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlLAorCVs2XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0LAorCVs3XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0LAorCVs5XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHJpZCwKK307CisKK2NvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKG9yaW5vY29faGFuZGxlciksCisJLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZhdGVfaGFuZGxlciksCisJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdnRhYiksCisJLnN0YW5kYXJkID0gb3Jpbm9jb19oYW5kbGVyLAorCS5wcml2YXRlID0gb3Jpbm9jb19wcml2YXRlX2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyA9IG9yaW5vY29fcHJpdnRhYiwKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDc5ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmgKQEAgLTAsMCArMSwxMyBAQAorLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyBzdXBwb3J0LgorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX1dFWFRfSF8KKyNkZWZpbmUgX09SSU5PQ09fV0VYVF9IXworCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworLyogU3RydWN0dXJlIGRlZmluaW5nIGFsbCBvdXIgV0VYVCBoYW5kbGVycyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmOworCisjZW5kaWYgLyogX09SSU5PQ09fV0VYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwppbmRleCBkMzQ2OWQwLi5jZmM1ZjQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWcKQEAgLTYxLDMgKzYxLDEzIEBACiAJICBodHRwOi8vcHJpc201NC5vcmcvCiAKIAkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRwY2kuCisKK2NvbmZpZyBQNTRfU1BJCisJdHJpc3RhdGUgIlByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFA1NF9DT01NT04gJiYgU1BJX01BU1RFUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciBzdGxjNDU1MCBvciBzdGxjNDU2MCBiYXNlZCB3aXJlbGVzcyBjaGlwcy4KKwkgIFRoaXMgZHJpdmVyIGlzIGV4cGVyaW1lbnRhbCwgdW50ZXN0ZWQgYW5kIHdpbGwgcHJvYmFibHkgb25seSB3b3JrIG9uCisJICBOb2tpYSdzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuCisKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRzcGkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKaW5kZXggNGZhOWNlNy4uYzIwNTBkZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiBvYmotJChDT05GSUdfUDU0X0NPTU1PTikJKz0gcDU0Y29tbW9uLm8KIG9iai0kKENPTkZJR19QNTRfVVNCKQkJKz0gcDU0dXNiLm8KIG9iai0kKENPTkZJR19QNTRfUENJKQkJKz0gcDU0cGNpLm8KK29iai0kKENPTkZJR19QNTRfU1BJKQkJKz0gcDU0c3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAppbmRleCBhYjc5ZTMyLi4yZGRhNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCkBAIC0xNCw2ICsxNCwxMCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCisKIGVudW0gcDU0X2NvbnRyb2xfZnJhbWVfdHlwZXMgewogCVA1NF9DT05UUk9MX1RZUEVfU0VUVVAgPSAwLAogCVA1NF9DT05UUk9MX1RZUEVfU0NBTiwKQEAgLTQ0LDYgKzQ4LDE4IEBACiAJUDU0X0NPTlRST0xfVFlQRV9CVF9PUFRJT05TID0gMzUKIH07CiAKKy8qIHByb3ZpZGUgMTYgYnl0ZXMgZm9yIHRoZSB0cmFuc3BvcnQgYmFjay1lbmQgKi8KKyNkZWZpbmUgUDU0X1RYX0lORk9fREFUQV9TSVpFCQkxNgorCisvKiBzdG9yZWQgaW4gaWVlZTgwMjExX3R4X2luZm8ncyByYXRlX2RyaXZlcl9kYXRhICovCitzdHJ1Y3QgcDU0X3R4X2luZm8geworCXUzMiBzdGFydF9hZGRyOworCXUzMiBlbmRfYWRkcjsKKwl2b2lkICpkYXRhW1A1NF9UWF9JTkZPX0RBVEFfU0laRSAvIHNpemVvZih2b2lkICopXTsKK307CisKKyNkZWZpbmUgUDU0X01BWF9DVFJMX0ZSQU1FX0xFTgkJMHgxMDAwCisKICNkZWZpbmUgUDU0X0hEUl9GTEFHX0NPTlRST0wJCUJJVCgxNSkKICNkZWZpbmUgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQJKEJJVCgxNSkgKyBCSVQoMCkpCiAKQEAgLTc1LDYgKzkxLDE0IEBACiAJczE2IGxvbmdib3dfdW5rMjsKIH07CiAKK3N0cnVjdCBwNTRfY2FsX2RhdGFiYXNlIHsKKwlzaXplX3QgZW50cmllczsKKwlzaXplX3QgZW50cnlfc2l6ZTsKKwlzaXplX3Qgb2Zmc2V0OworCXNpemVfdCBsZW47CisJdTggZGF0YVswXTsKK307CisKICNkZWZpbmUgRUVQUk9NX1JFQURCQUNLX0xFTiAweDNmYwogCiAjZGVmaW5lIElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFIgMHgyMDAwMApAQCAtODQsNiArMTA4LDI5IEBACiAjZGVmaW5lIEZXX0xNODcgMHg0YzRkMzgzNwogI2RlZmluZSBGV19MTTIwIDB4NGM0ZDMyMzAKIAorZW51bSBmd19zdGF0ZSB7CisJRldfU1RBVEVfT0ZGLAorCUZXX1NUQVRFX0JPT1RJTkcsCisJRldfU1RBVEVfUkVBRFksCisJRldfU1RBVEVfUkVTRVQsCisJRldfU1RBVEVfUkVTRVRUSU5HLAorfTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisKKyNkZWZpbmUgUDU0X0xFRF9NQVhfTkFNRV9MRU4gMzEKKworc3RydWN0IHA1NF9sZWRfZGV2IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpod19kZXY7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OworCWNoYXIgbmFtZVtQNTRfTEVEX01BWF9OQU1FX0xFTiArIDFdOworCisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOworfTsKKworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCisKIHN0cnVjdCBwNTRfY29tbW9uIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAl1MzIgcnhfc3RhcnQ7CkBAIC05OSwxMSArMTQ2LDEyIEBACiAJc3RydWN0IG11dGV4IGNvbmZfbXV0ZXg7CiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCByeF9kaXZlcnNpdHlfbWFzazsKKwl1OCB0eF9kaXZlcnNpdHlfbWFzazsKIAlzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgKmlxX2F1dG9jYWw7CiAJdW5zaWduZWQgaW50IGlxX2F1dG9jYWxfbGVuOwotCXN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgKm91dHB1dF9saW1pdDsKLQl1bnNpZ25lZCBpbnQgb3V0cHV0X2xpbWl0X2xlbjsKLQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGE7CisJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKm91dHB1dF9saW1pdDsKKwlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqY3VydmVfZGF0YTsKIAlzdHJ1Y3QgcDU0X3Jzc2lfbGluZWFyX2FwcHJveGltYXRpb24gcnNzaWNhbF9kYltJRUVFODAyMTFfTlVNX0JBTkRTXTsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzOwogCWJvb2wgdXNlX3Nob3J0X3Nsb3Q7CkBAIC0xMTUsNyArMTYzLDcgQEAKIAl1bnNpZ25lZCBpbnQgb3V0cHV0X3Bvd2VyOwogCXUzMiB0c2ZfbG93MzI7CiAJdTMyIHRzZl9oaWdoMzI7Ci0JdTY0IGJhc2ljX3JhdGVfbWFzazsKKwl1MzIgYmFzaWNfcmF0ZV9tYXNrOwogCXUxNiB3YWtldXBfdGltZXI7CiAJdTE2IGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzWzhdOwpAQCAtMTI4LDEzICsxNzYsMjEgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBlZXByb21fY29tcDsKIAl1OCBwcml2YWN5X2NhcHM7CiAJdTggcnhfa2V5Y2FjaGVfc2l6ZTsKKwkvKiBMRUQgbWFuYWdlbWVudCAqLworCSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCXN0cnVjdCBwNTRfbGVkX2RldiBhc3NvY19sZWQ7CisJc3RydWN0IHA1NF9sZWRfZGV2IHR4X2xlZDsKKwkjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwl1MTYgc29mdGxlZF9zdGF0ZTsJCS8qIGJpdCBmaWVsZCBvZiBnbG93aW5nIExFRHMgKi8KIH07CiAKIGludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcDU0X2ZyZWVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CitpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7CiBpbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pOworaW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKIHZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiAKICNlbmRpZiAvKiBQNTRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmluZGV4IGYxNzAxMDYuLjBhOTg5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKQEAgLTIxLDYgKzIxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KIAogI2luY2x1ZGUgInA1NC5oIgogI2luY2x1ZGUgInA1NGNvbW1vbi5oIgpAQCAtMjM5LDExICsyNDIsMTEgQEAKIAogCWlmIChwcml2LT5md192YXIgPj0gMHgzMDApIHsKIAkJLyogRmlybXdhcmUgc3VwcG9ydHMgUW9TLCB1c2UgaXQhICovCi0JCXByaXYtPnR4X3N0YXRzWzRdLmxpbWl0ID0gMzsJCS8qIEFDX1ZPICovCi0JCXByaXYtPnR4X3N0YXRzWzVdLmxpbWl0ID0gNDsJCS8qIEFDX1ZJICovCi0JCXByaXYtPnR4X3N0YXRzWzZdLmxpbWl0ID0gMzsJCS8qIEFDX0JFICovCi0JCXByaXYtPnR4X3N0YXRzWzddLmxpbWl0ID0gMjsJCS8qIEFDX0JLICovCi0JCWRldi0+cXVldWVzID0gNDsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZPXS5saW1pdCA9IDM7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WSV0ubGltaXQgPSA0OworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQkVdLmxpbWl0ID0gMzsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JLXS5saW1pdCA9IDI7CisJCWRldi0+cXVldWVzID0gUDU0X1FVRVVFX0FDX05VTTsKIAl9CiAKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKQEAgLTI3MiwxMyArMjc1LDE5IEBACiAJdW5zaWduZWQgaW50IGksIGo7CiAJdm9pZCAqc291cmNlLCAqdGFyZ2V0OwogCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2MoY2RfbGVuLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpICsgY2RfbGVuLAorCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCisJCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOworCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKKwltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CiAJc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CiAJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKIAkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwpAQCAtMzE4LDEzICszMjcsMTkgQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAl2b2lkICpzb3VyY2UsICp0YXJnZXQ7CiAKLQlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhjZF9sZW4sIEdGUF9LRVJORUwpOworCXByaXYtPmN1cnZlX2RhdGEgPSBremFsbG9jKGNkX2xlbiArIHNpemVvZigqcHJpdi0+Y3VydmVfZGF0YSksCisJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5jdXJ2ZV9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzID0gY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSA9IHNpemVvZihfX2xlMTYpICsKKwkJc2l6ZW9mKCpkc3QpICogY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCXByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSwgZGF0YSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+bGVuID0gY2RfbGVuOworCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKIAlzb3VyY2UgPSBjdXJ2ZV9kYXRhLT5kYXRhOwotCXRhcmdldCA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisJdGFyZ2V0ID0gKChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSktPmRhdGE7CiAJZm9yIChpID0gMDsgaSA8IGN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKIAkJX19sZTE2ICpmcmVxID0gc291cmNlOwogCQlzb3VyY2UgKz0gc2l6ZW9mKF9fbGUxNik7CkBAIC0zNzYsNyArMzkxLDEwMiBAQAogCX0KIH0KIAotc3RhdGljIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcGRhX2NvdW50cnkgKmNvdW50cnk7CisKKwlpZiAobGVuICE9IHNpemVvZigqY291bnRyeSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZm91bmQgcG9zc2libGUgaW52YWxpZCBkZWZhdWx0IGNvdW50cnkgIgorCQkJCSJlZXByb20gZW50cnkuIChlbnRyeSBzaXplOiAlZClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZW4pOworCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJjb3VudHJ5OiIsIERVTVBfUFJFRklYX05PTkUsCisJCQkJICAgICBkYXRhLCBsZW4pOworCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50cnkgPSAoc3RydWN0IHBkYV9jb3VudHJ5ICopIGRhdGE7CisJaWYgKGNvdW50cnktPmZsYWdzID09IFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9QU0VVRE8pCisJCXJlZ3VsYXRvcnlfaGludChkZXYtPndpcGh5LCBjb3VudHJ5LT5hbHBoYTIpOworCWVsc2UgeworCQkvKiBUT0RPOgorCQkgKiB3cml0ZSBhIHNoYXJlZC9jb21tb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cworCQkgKiAiUmVndWxhdG9yeSBkb21haW4gY29kZXMiICg4MDIuMTEtMjAwNyAxNC44LjIuMikKKwkJICogaW50byBJU08vSUVDIDMxNjYtMSBhbHBoYTIgZm9yIHJlZ3VsYXRvcnlfaGludC4KKwkJICovCisJfQorfQorCitzdGF0aWMgaW50IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgdTggKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gb3V0cHV0IHBvd2VyIGRiIHJldmlzaW9uOiV4XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgZGF0YVswXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgyICsgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSA+IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5vdXRwdXRfbGltaXQgPSBrbWFsbG9jKGRhdGFbMV0gKgorCQlzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgKworCQlzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCksIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQgPSAwOworCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcyA9IGRhdGFbMV07CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpOworCXByaXYtPm91dHB1dF9saW1pdC0+bGVuID0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICoKKwkJCQkgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcyArCisJCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldDsKKworCW1lbWNweShwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEsICZkYXRhWzJdLAorCSAgICAgICBkYXRhWzFdICogc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKnA1NF9jb252ZXJ0X2RiKHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnNyYywKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pCit7CisJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKmRzdDsKKwlzaXplX3QgcGF5bG9hZF9sZW4sIGVudHJpZXMsIGVudHJ5X3NpemUsIG9mZnNldDsKKworCXBheWxvYWRfbGVuID0gbGUxNl90b19jcHUoc3JjLT5sZW4pOworCWVudHJpZXMgPSBsZTE2X3RvX2NwdShzcmMtPmVudHJpZXMpOworCWVudHJ5X3NpemUgPSBsZTE2X3RvX2NwdShzcmMtPmVudHJ5X3NpemUpOworCW9mZnNldCA9IGxlMTZfdG9fY3B1KHNyYy0+b2Zmc2V0KTsKKwlpZiAoKChlbnRyaWVzICogZW50cnlfc2l6ZSArIG9mZnNldCkgIT0gcGF5bG9hZF9sZW4pIHx8CisJICAgICAocGF5bG9hZF9sZW4gKyBzaXplb2YoKnNyYykgIT0gdG90YWxfbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc3QgPSBrbWFsbG9jKHNpemVvZigqZHN0KSArIHBheWxvYWRfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc3QtPmVudHJpZXMgPSBlbnRyaWVzOworCWRzdC0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CisJZHN0LT5vZmZzZXQgPSBvZmZzZXQ7CisJZHN0LT5sZW4gPSBwYXlsb2FkX2xlbjsKKworCW1lbWNweShkc3QtPmRhdGEsIHNyYy0+ZGF0YSwgcGF5bG9hZF9sZW4pOworCXJldHVybiBkc3Q7Cit9CisKK2ludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBlZXByb21fcGRhX3dyYXAgKndyYXAgPSBOVUxMOwpAQCAtNDAxLDMwICs1MTEsMTcgQEAKIAogCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSkgewogCQljYXNlIFBEUl9NQUNfQUREUkVTUzoKKwkJCWlmIChkYXRhX2xlbiAhPSBFVEhfQUxFTikKKwkJCQlicmVhazsKIAkJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZW50cnktPmRhdGEpOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTOgotCQkJaWYgKGRhdGFfbGVuIDwgMikgewotCQkJCWVyciA9IC1FSU5WQUw7CisJCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0KQorCQkJCWJyZWFrOworCQkJZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LT5kYXRhLAorCQkJCQkJCWRhdGFfbGVuKTsKKwkJCWlmIChlcnIpCiAJCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWlmICgyICsgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpID4gZGF0YV9sZW4pIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlwcml2LT5vdXRwdXRfbGltaXQgPSBrbWFsbG9jKGVudHJ5LT5kYXRhWzFdICoKLQkJCQlzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCksIEdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXByaXYtPm91dHB1dF9saW1pdCkgewotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCW1lbWNweShwcml2LT5vdXRwdXRfbGltaXQsICZlbnRyeS0+ZGF0YVsyXSwKLQkJCSAgICAgICBlbnRyeS0+ZGF0YVsxXSpzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCkpOwotCQkJcHJpdi0+b3V0cHV0X2xpbWl0X2xlbiA9IGVudHJ5LT5kYXRhWzFdOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBOiB7CiAJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQpAQCAtNDYzLDYgKzU2MCw5IEBACiAJCQltZW1jcHkocHJpdi0+aXFfYXV0b2NhbCwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKIAkJCXByaXYtPmlxX2F1dG9jYWxfbGVuID0gZGF0YV9sZW4gLyBzaXplb2Yoc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5KTsKIAkJCWJyZWFrOworCQljYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6CisJCQlwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKKwkJCWJyZWFrOwogCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKIAkJCXRtcCA9IGVudHJ5LT5kYXRhOwogCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKQEAgLTQ3Myw2ICs1NzMsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRDoKKwkJCWlmIChkYXRhX2xlbiA8IDIpCisJCQkJYnJlYWs7CiAJCQlwcml2LT52ZXJzaW9uID0gKih1OCAqKShlbnRyeS0+ZGF0YSArIDEpOwogCQkJYnJlYWs7CiAJCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT046CkBAIC00ODEsNiArNTgzLDM0IEBACiAJCQlwNTRfcGFyc2VfcnNzaWNhbChkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbiwKIAkJCQkJICBsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpOwogCQkJYnJlYWs7CisJCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NOiB7CisJCQlfX2xlMTYgKnNyYyA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJczE2ICpkc3QgPSAodm9pZCAqKSAmcHJpdi0+cnNzaWNhbF9kYjsKKwkJCWludCBpOworCisJCQlpZiAoZGF0YV9sZW4gIT0gc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHJpdi0+cnNzaWNhbF9kYikgLworCQkJCQlzaXplb2YoKnNyYyk7IGkrKykKKwkJCQkqKGRzdCsrKSA9IChzMTYpIGxlMTZfdG9fY3B1KCooc3JjKyspKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT006IHsKKwkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCB8fCBkYXRhX2xlbiA8IHNpemVvZigqcGRhKSkKKwkJCQlicmVhazsKKwkJCXByaXYtPm91dHB1dF9saW1pdCA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTTogeworCQkJc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqcGRhID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlpZiAocHJpdi0+Y3VydmVfZGF0YSB8fCBkYXRhX2xlbiA8IHNpemVvZigqcGRhKSkKKwkJCQlicmVhazsKKwkJCXByaXYtPmN1cnZlX2RhdGEgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFBEUl9FTkQ6CiAJCQkvKiBtYWtlIGl0IG92ZXJydW4gKi8KIAkJCWVudHJ5X2xlbiA9IGxlbjsKQEAgLTQ5Nyw3ICs2MjcsNiBAQAogCQljYXNlIFBEUl9VVEY4X09FTV9OQU1FOgogCQljYXNlIFBEUl9VVEY4X1BST0RVQ1RfTkFNRToKIAkJY2FzZSBQRFJfQ09VTlRSWV9MSVNUOgotCQljYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6CiAJCWNhc2UgUERSX0FOVEVOTkFfR0FJTjoKIAkJY2FzZSBQRFJfUFJJU01fSU5ESUdPX1BBX0NBTElCUkFUSU9OX0RBVEE6CiAJCWNhc2UgUERSX1JFR1VMQVRPUllfUE9XRVJfTElNSVRTOgpAQCAtNTI1LDEyICs2NTQsMTYgQEAKIAl9CiAKIAlwcml2LT5yeGh3ID0gc3ludGggJiBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSzsKLQlpZiAocHJpdi0+cnhodyA9PSA0KQorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKQogCQlwNTRfaW5pdF94Ym93X3N5bnRoKGRldik7CiAJaWYgKCEoc3ludGggJiBQRFJfU1lOVEhfMjRfR0haX0RJU0FCTEVEKSkKIAkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmYmFuZF8yR0h6OwogCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzVfR0haX0RJU0FCTEVEKSkKIAkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmYmFuZF81R0h6OworCWlmICgoc3ludGggJiBQRFJfU1lOVEhfUlhfRElWX01BU0spID09IFBEUl9TWU5USF9SWF9ESVZfU1VQUE9SVEVEKQorCQlwcml2LT5yeF9kaXZlcnNpdHlfbWFzayA9IDM7CisJaWYgKChzeW50aCAmIFBEUl9TWU5USF9UWF9ESVZfTUFTSykgPT0gUERSX1NZTlRIX1RYX0RJVl9TVVBQT1JURUQpCisJCXByaXYtPnR4X2RpdmVyc2l0eV9tYXNrID0gMzsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPndpcGh5LT5wZXJtX2FkZHIpKSB7CiAJCXU4IHBlcm1fYWRkcltFVEhfQUxFTl07CkBAIC01NjgsMTMgKzcwMSwyMSBAQAogCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7CiAKIHN0YXRpYyBpbnQgcDU0X3Jzc2lfdG9fZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHJzc2kpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAotCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCisJaWYgKHByaXYtPnJ4aHcgIT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpCisJCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCisJCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKKwllbHNlCisJCS8qCisJCSAqIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgZm9ybXVsYQorCQkgKi8KKwkJcmV0dXJuICgocnNzaSAqIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKSAvIDY0ICsKIAkJCSBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCkgLyA0OwogfQogCkBAIC01OTcsMTAgKzczOCw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCEoaGRyLT5mbGFncyAmIGNwdV90b19sZTE2KFA1NF9IRFJfRkxBR19EQVRBX0lOX0ZDU19HT09EKSkpIHsKLQkJaWYgKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9GQ1NGQUlMKQotCQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQkJZWxzZQotCQkJcmV0dXJuIDA7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX09LKQpAQCAtNjU1LDcgKzc5Myw4IEBACiAJCXJldHVybiA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5xdWV1ZXM7IGkrKykKLQkJaWYgKHByaXYtPnR4X3N0YXRzW2kgKyA0XS5sZW4gPCBwcml2LT50eF9zdGF0c1tpICsgNF0ubGltaXQpCisJCWlmIChwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxlbiA8CisJCSAgICBwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxpbWl0KQogCQkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LCBpKTsKIH0KIApAQCAtNjYzLDcgKzgwMiw3IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgZnJlZWQgPSAwLCBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIApAQCAtNjgxLDE4ICs4MjAsMTggQEAKIAlyYW5nZSA9ICh2b2lkICopaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKIAlpZiAoc2tiLT5wcmV2ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKIAogCQluaSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiLT5wcmV2KTsKLQkJbXIgPSAoc3RydWN0IG1lbXJlY29yZCAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOworCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJbGFzdF9hZGRyID0gbXItPmVuZF9hZGRyOwogCX0KIAlpZiAoc2tiLT5uZXh0ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKIAogCQluaSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiLT5uZXh0KTsKLQkJbXIgPSAoc3RydWN0IG1lbXJlY29yZCAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOworCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJZnJlZWQgPSBtci0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKIAl9IGVsc2UKIAkJZnJlZWQgPSBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHI7CkBAIC03MzUsNyArODc0LDcgQEAKIAlzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgKnBheWxvYWQgPSAoc3RydWN0IHA1NF9mcmFtZV9zZW50ICopIGhkci0+ZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CiAJdTMyIGFkZHIgPSBsZTMyX3RvX2NwdShoZHItPnJlcV9pZCkgLSBwcml2LT5oZWFkcm9vbTsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZSA9IE5VTEw7CisJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZSA9IE5VTEw7CiAJdTMyIGZyZWVkID0gMDsKIAl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc1OCwxMCArODk3LDEwIEBACiAKIAkJaWYgKGVudHJ5LT5uZXh0ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewogCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJCXN0cnVjdCBtZW1yZWNvcmQgKm1yOworCQkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKIAogCQkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5uZXh0KTsKLQkJCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwogCQkJZnJlZWQgPSBtci0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKIAkJfSBlbHNlCiAJCQlmcmVlZCA9IHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcjsKQEAgLTc3Niw5ICs5MTUsMTYgQEAKIAkJcHJpdi0+dHhfc3RhdHNbZW50cnlfZGF0YS0+aHdfcXVldWVdLmxlbi0tOwogCQlwcml2LT5zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCArPSBwYXlsb2FkLT50cmllcyAtIDE7CiAKLQkJaWYgKHVubGlrZWx5KGVudHJ5ID09IHByaXYtPmNhY2hlZF9iZWFjb24pKSB7CisJCS8qCisJCSAqIEZyYW1lcyBpbiBQNTRfUVVFVUVfRldTQ0FOIGFuZCBQNTRfUVVFVUVfQkVBQ09OIGFyZQorCQkgKiBnZW5lcmF0ZWQgYnkgdGhlIGRyaXZlci4gVGhlcmVmb3JlIHR4X3N0YXR1cyBpcyBib2d1cworCQkgKiBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHRoZSBtYWM4MDIxMSBzdGFjay4KKwkJICovCisJCWlmICh1bmxpa2VseShlbnRyeV9kYXRhLT5od19xdWV1ZSA8IFA1NF9RVUVVRV9GV1NDQU4pKSB7CisJCQlpZiAoZW50cnlfZGF0YS0+aHdfcXVldWUgPT0gUDU0X1FVRVVFX0JFQUNPTikKKwkJCQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKKwogCQkJa2ZyZWVfc2tiKGVudHJ5KTsKLQkJCXByaXYtPmNhY2hlZF9iZWFjb24gPSBOVUxMOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtOTcxLDggKzExMTcsOCBAQAogICogY2FuIGZpbmQgc29tZSB1bnVzZWQgbWVtb3J5IHRvIHVwbG9hZCBvdXIgcGFja2V0cyB0by4gSG93ZXZlciwgZGF0YSB0aGF0IHdlCiAgKiB3YW50IHRoZSBjYXJkIHRvIFRYIG5lZWRzIHRvIHN0YXkgaW50YWN0IHVudGlsIHRoZSBjYXJkIGhhcyB0b2xkIHVzIHRoYXQKICAqIGl0IGlzIGRvbmUgd2l0aCBpdC4gVGhpcyBmdW5jdGlvbiBmaW5kcyBlbXB0eSBwbGFjZXMgd2UgY2FuIHVwbG9hZCB0byBhbmQKLSAqIG1hcmtzIGFsbG9jYXRlZCBhcmVhcyBhcyByZXNlcnZlZCBpZiBuZWNlc3NhcnkuIHA1NF9yeF9mcmFtZV9zZW50IGZyZWVzCi0gKiBhbGxvY2F0ZWQgYXJlYXMuCisgKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfcnhfZnJhbWVfc2VudCBvcgorICogcDU0X2ZyZWVfc2tiIGZyZWVzIGFsbG9jYXRlZCBhcmVhcy4KICAqLwogc3RhdGljIGludCBwNTRfYXNzaWduX2FkZHJlc3Moc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBwNTRfaGRyICpkYXRhLCB1MzIgbGVuKQpAQCAtOTgxLDcgKzExMjcsNyBAQAogCXN0cnVjdCBza19idWZmICplbnRyeTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFyZ2V0X3NrYiA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBtZW1yZWNvcmQgKnJhbmdlOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7CiAJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwogCXUzMiBsYXJnZXN0X2hvbGUgPSAwOwogCXUzMiB0YXJnZXRfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwpAQCAtMTA2MywyNSArMTIwOSwyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQl1MTYgaGRyX2ZsYWdzLCB1MTYgbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgaGRyX2ZsYWdzLAorCQkJCSAgICAgdTE2IHBheWxvYWRfbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBmcmFtZV9sZW4gPSBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbjsKIAotCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW4gKyBwcml2LT50eF9oZHJfbGVuLCBtZW1mbGFncyk7CisJaWYgKGZyYW1lX2xlbiA+IFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4pCisJCXJldHVybiBOVUxMOworCisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKHByaXYtPnR4X2hkcl9sZW4gKyBmcmFtZV9sZW4sIG1lbWZsYWdzKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5VTEw7CiAJc2tiX3Jlc2VydmUoc2tiLCBwcml2LT50eF9oZHJfbGVuKTsKIAogCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKIAloZHItPmZsYWdzID0gY3B1X3RvX2xlMTYoaGRyX2ZsYWdzKTsKLQloZHItPmxlbiA9IGNwdV90b19sZTE2KGxlbiAtIHNpemVvZigqaGRyKSk7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihwYXlsb2FkX2xlbik7CiAJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7CiAJaGRyLT50cmllcyA9IGhkci0+cnRzX3RyaWVzID0gMDsKIAotCWlmICh1bmxpa2VseShwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBza2IsIGhkciwgbGVuKSkpIHsKKwlpZiAocDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgc2tiLCBoZHIsIGZyYW1lX2xlbikpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTEwOTEsNyArMTI0MSw2IEBACiBpbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gTlVMTDsKIAlzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICplZXByb21faGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTsKQEAgLTExMDQsOSArMTI1Myw5IEBACiAJZWxzZQogCQltYXhibG9ja3NpemUgLT0gMHg0OwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2YoKmhkcikgKwotCQkJICAgIHNpemVvZigqZWVwcm9tX2hkcikgKyBtYXhibG9ja3NpemUsCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssIEdGUF9LRVJORUwpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgc2l6ZW9mKCplZXByb21faGRyKSArCisJCQkgICAgbWF4YmxvY2tzaXplLCBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSywKKwkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJZ290byBmcmVlOwogCXByaXYtPmVlcHJvbSA9IGt6YWxsb2MoRUVQUk9NX1JFQURCQUNLX0xFTiwgR0ZQX0tFUk5FTCk7CkBAIC0xMTYyLDkgKzEzMTEsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF90aW0gKnRpbTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqdGltKSwKLQkJICAgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp0aW0pLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTExODEsOSArMTMyOSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKnN0YTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqc3RhKSwKLQkJUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnN0YSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjIzLDkgKzEzNzAsOCBAQAogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHA1NF90eGNhbmNlbCAqY2FuY2VsOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULAotCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsgc2l6ZW9mKCpjYW5jZWwpLAotCQlQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqY2FuY2VsKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyNDIsNDYgKzEzODgsNzMgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCByZXQgPSAwOwotCi0JaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMDsKLQkJCSpleHRyYV9sZW4gPSBJRUVFODAyMTFfTUFYX1RJTV9MRU47Ci0JCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQkJKmFpZCA9IDA7Ci0JCQkqcXVldWUgPSAyOwotCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUCB8Ci0JCQkJIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJKnF1ZXVlID0gMjsKLQkJCXJldCA9IDA7Ci0JCX0KLQl9IGVsc2UgewotCQkqcXVldWUgKz0gNDsKLQkJcmV0ID0gMTsKLQl9CisJaW50IHJldCA9IDE7CiAKIAlzd2l0Y2ggKHByaXYtPm1vZGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gc2V0IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDIGZvcgorCQkgKiBldmVyeSBmcmFtZSBpbiBwcm9taXNjdW91cy9tb25pdG9yIG1vZGUuCisJCSAqIHNlZSBTVFNXNDV4MEMgTE1BQyBBUEkgLSBwYWdlIDEyLgorCQkgKi8KKwkJKmFpZCA9IDA7CisJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDOworCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJKmFpZCA9IDE7CisJCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7CisJCQlyZXQgPSAwOworCQl9IGVsc2UKKwkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKIAkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMzsKKwkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9DQUI7CiAJCQlyZXR1cm4gMDsKIAkJfQorCisJCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCQkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCQkqYWlkID0gMDsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKKwkJCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QIHwKKwkJCQkJIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkJKmFpZCA9IDA7CisKKwkJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSB7CisJCQkJCS8qCisJCQkJCSAqIEluamVjdGluZyBiZWFjb25zIG9uIHRvcCBvZiBhIEFQIGlzCisJCQkJCSAqIG5vdCBhIGdvb2QgaWRlYS4uLiBuZXZlcnRoZWxlc3MsCisJCQkJCSAqIGl0IHNob3VsZCBiZSBkb2FibGUuCisJCQkJCSAqLworCisJCQkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCisJCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUDsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfQkVBQ09OOworCQkJCSpleHRyYV9sZW4gPSBJRUVFODAyMTFfTUFYX1RJTV9MRU47CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOworCQkJCXJldCA9IDA7CisJCQl9CisJCX0gZWxzZQorCQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOworCiAJCWlmIChpbmZvLT5jb250cm9sLnN0YSkKIAkJCSphaWQgPSBpbmZvLT5jb250cm9sLnN0YS0+YWlkOwogCQllbHNlCiAJCQkqZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOworCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEzMDMsNyArMTQ3Niw3IEBACiBzdGF0aWMgaW50IHA1NF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKmN1cnJlbnRfcXVldWUgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKmN1cnJlbnRfcXVldWU7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOwpAQCAtMTQ0NiwxNSArMTYxOSwxNyBAQAogCX0KIAl0eGhkci0+Y3J5cHRfb2Zmc2V0ID0gY3J5cHRfb2Zmc2V0OwogCXR4aGRyLT5od19xdWV1ZSA9IHF1ZXVlOwotCWlmIChjdXJyZW50X3F1ZXVlKQotCQl0eGhkci0+YmFja2xvZyA9IGN1cnJlbnRfcXVldWUtPmxlbjsKLQllbHNlCi0JCXR4aGRyLT5iYWNrbG9nID0gMDsKKwl0eGhkci0+YmFja2xvZyA9IGN1cnJlbnRfcXVldWUtPmxlbjsKIAltZW1zZXQodHhoZHItPmR1cmF0aW9ucywgMCwgc2l6ZW9mKHR4aGRyLT5kdXJhdGlvbnMpKTsKLQl0eGhkci0+dHhfYW50ZW5uYSA9IChpbmZvLT5hbnRlbm5hX3NlbF90eCA9PSAwKSA/Ci0JCTIgOiBpbmZvLT5hbnRlbm5hX3NlbF90eCAtIDE7Ci0JdHhoZHItPm91dHB1dF9wb3dlciA9IHByaXYtPm91dHB1dF9wb3dlcjsKLQl0eGhkci0+Y3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwl0eGhkci0+dHhfYW50ZW5uYSA9ICgoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPworCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxKSAmIHByaXYtPnR4X2RpdmVyc2l0eV9tYXNrOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCXR4aGRyLT5sb25nYm93LmN0c19yYXRlID0gY3RzX3JhdGU7CisJCXR4aGRyLT5sb25nYm93Lm91dHB1dF9wb3dlciA9IGNwdV90b19sZTE2KHByaXYtPm91dHB1dF9wb3dlcik7CisJfSBlbHNlIHsKKwkJdHhoZHItPm5vcm1hbC5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7CisJCXR4aGRyLT5ub3JtYWwuY3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwl9CiAJaWYgKHBhZGRpbmcpCiAJCXR4aGRyLT5hbGlnblswXSA9IHBhZGRpbmc7CiAKQEAgLTE0NjcsMTQgKzE2NDIsMTIgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLAogCQkJICAgbXNlY3NfdG9famlmZmllcyhQNTRfVFhfRlJBTUVfTElGRVRJTUUpKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKICBlcnI6CiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikgKyBzaXplb2YoKnR4aGRyKSArIHBhZGRpbmcpOwotCWlmIChjdXJyZW50X3F1ZXVlKSB7Ci0JCWN1cnJlbnRfcXVldWUtPmxlbi0tOwotCQljdXJyZW50X3F1ZXVlLT5jb3VudC0tOwotCX0KKwljdXJyZW50X3F1ZXVlLT5sZW4tLTsKKwljdXJyZW50X3F1ZXVlLT5jb3VudC0tOwogCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIApAQCAtMTQ4NSw5ICsxNjU4LDggQEAKIAlzdHJ1Y3QgcDU0X3NldHVwX21hYyAqc2V0dXA7CiAJdTE2IG1vZGU7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApICsKLQkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLAotCQkJICAgIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzZXR1cCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNTA0LDE5ICsxNjc2LDI5IEBACiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSUJTUzsKIAkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX05PTkU7CisJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCisKKwkJLyoKKwkJICogIlRSQU5TUEFSRU5UIGFuZCBQUk9NSVNDVU9VUyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorCQkgKiBTVFNXNDVYMEMgTE1BQyBBUEkgLSBwYWdlIDEyCisJCSAqLworCQlpZiAoKChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHx8CisJCSAgICAgKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9PVEhFUl9CU1MpKSAmJgorCQkgICAgKG1vZGUgIT0gUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTKSkKIAkJCW1vZGUgfD0gUDU0X0ZJTFRFUl9UWVBFX1RSQU5TUEFSRU5UOwogCX0gZWxzZQotCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1JYX0RJU0FCTEVEOworCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTsKIAogCXNldHVwLT5tYWNfbW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwogCW1lbWNweShzZXR1cC0+bWFjX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHNldHVwLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKLQlzZXR1cC0+cnhfYW50ZW5uYSA9IDI7IC8qIGF1dG9tYXRpYyAqLworCXNldHVwLT5yeF9hbnRlbm5hID0gMiAmIHByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrOyAvKiBhdXRvbWF0aWMgKi8KIAlzZXR1cC0+cnhfYWxpZ24gPSAwOwogCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgewogCQlzZXR1cC0+djEuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKQEAgLTE1NDksNzkgKzE3MzEsMTM3IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X3NjYW4gKmNoYW47CisJc3RydWN0IHA1NF9oZHIgKmhkcjsKKwlzdHJ1Y3QgcDU0X3NjYW5faGVhZCAqaGVhZDsKKwlzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgKmlxX2F1dG9jYWw7CisJdW5pb24gcDU0X3NjYW5fYm9keV91bmlvbiAqYm9keTsKKwlzdHJ1Y3QgcDU0X3NjYW5fdGFpbF9yYXRlICpyYXRlOworCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKnJzc2k7CiAJdW5zaWduZWQgaW50IGk7CiAJdm9pZCAqZW50cnk7Ci0JX19sZTE2IGZyZXEgPSBjcHVfdG9fbGUxNihkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisJX19sZTE2IGZyZXEgPSBjcHVfdG9fbGUxNihkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNoYW4pICsKLQkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX1NDQU4sCi0JCQkgICAgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmhlYWQpICsKKwkJCSAgICAyICsgc2l6ZW9mKCppcV9hdXRvY2FsKSArIHNpemVvZigqYm9keSkgKworCQkJICAgIHNpemVvZigqcmF0ZSkgKyAyICogc2l6ZW9mKCpyc3NpKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NDQU4sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNoYW4gPSAoc3RydWN0IHA1NF9zY2FuICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmNoYW4pKTsKLQltZW1zZXQoY2hhbi0+cGFkZGluZzEsIDAsIHNpemVvZihjaGFuLT5wYWRkaW5nMSkpOwotCWNoYW4tPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQljaGFuLT5kd2VsbCA9IGNwdV90b19sZTE2KGR3ZWxsKTsKKwloZWFkID0gKHN0cnVjdCBwNTRfc2Nhbl9oZWFkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWQpKTsKKwltZW1zZXQoaGVhZC0+c2Nhbl9wYXJhbXMsIDAsIHNpemVvZihoZWFkLT5zY2FuX3BhcmFtcykpOworCWhlYWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKwloZWFkLT5kd2VsbCA9IGNwdV90b19sZTE2KGR3ZWxsKTsKKwloZWFkLT5mcmVxID0gZnJlcTsKIAorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCV9fbGUxNiAqcGFfcG93ZXJfcG9pbnRzID0gKF9fbGUxNiAqKSBza2JfcHV0KHNrYiwgMik7CisJCSpwYV9wb3dlcl9wb2ludHMgPSBjcHVfdG9fbGUxNigweDBjKTsKKwl9CisKKwlpcV9hdXRvY2FsID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaXFfYXV0b2NhbCkpOwogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5pcV9hdXRvY2FsX2xlbjsgaSsrKSB7CiAJCWlmIChwcml2LT5pcV9hdXRvY2FsW2ldLmZyZXEgIT0gZnJlcSkKIAkJCWNvbnRpbnVlOwogCi0JCW1lbWNweSgmY2hhbi0+aXFfYXV0b2NhbCwgJnByaXYtPmlxX2F1dG9jYWxbaV0sCi0JCSAgICAgICBzaXplb2YoKnByaXYtPmlxX2F1dG9jYWwpKTsKKwkJbWVtY3B5KGlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLnBhcmFtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkpKTsKIAkJYnJlYWs7CiAJfQogCWlmIChpID09IHByaXYtPmlxX2F1dG9jYWxfbGVuKQogCQlnb3RvIGVycjsKIAotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXRfbGVuOyBpKyspIHsKLQkJaWYgKHByaXYtPm91dHB1dF9saW1pdFtpXS5mcmVxICE9IGZyZXEpCisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpCisJCWJvZHkgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKGJvZHktPmxvbmdib3cpKTsKKwllbHNlCisJCWJvZHkgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKGJvZHktPm5vcm1hbCkpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllczsgaSsrKSB7CisJCV9fbGUxNiAqZW50cnlfZnJlcSA9ICh2b2lkICopIChwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEgKworCQkJCSAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICogaSk7CisKKwkJaWYgKCplbnRyeV9mcmVxICE9IGZyZXEpCiAJCQljb250aW51ZTsKIAotCQljaGFuLT52YWxfYmFya2VyID0gMHgzODsKLQkJY2hhbi0+dmFsX2Jwc2sgPSBjaGFuLT5kdXBfYnBzayA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsX2Jwc2s7Ci0JCWNoYW4tPnZhbF9xcHNrID0gY2hhbi0+ZHVwX3Fwc2sgPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF9xcHNrOwotCQljaGFuLT52YWxfMTZxYW0gPSBjaGFuLT5kdXBfMTZxYW0gPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF8xNnFhbTsKLQkJY2hhbi0+dmFsXzY0cWFtID0gY2hhbi0+ZHVwXzY0cWFtID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfNjRxYW07CisJCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCQltZW1jcHkoJmJvZHktPmxvbmdib3cucG93ZXJfbGltaXRzLAorCQkJICAgICAgICh2b2lkICopIGVudHJ5X2ZyZXEgKyBzaXplb2YoX19sZTE2KSwKKwkJCSAgICAgICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqbGltaXRzID0KKwkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxOworCisJCQlib2R5LT5ub3JtYWwudmFsX2JhcmtlciA9IDB4Mzg7CisJCQlib2R5LT5ub3JtYWwudmFsX2Jwc2sgPSBib2R5LT5ub3JtYWwuZHVwX2Jwc2sgPQorCQkJCWxpbWl0cy0+dmFsX2Jwc2s7CisJCQlib2R5LT5ub3JtYWwudmFsX3Fwc2sgPSBib2R5LT5ub3JtYWwuZHVwX3Fwc2sgPQorCQkJCWxpbWl0cy0+dmFsX3Fwc2s7CisJCQlib2R5LT5ub3JtYWwudmFsXzE2cWFtID0gYm9keS0+bm9ybWFsLmR1cF8xNnFhbSA9CisJCQkJbGltaXRzLT52YWxfMTZxYW07CisJCQlib2R5LT5ub3JtYWwudmFsXzY0cWFtID0gYm9keS0+bm9ybWFsLmR1cF82NHFhbSA9CisJCQkJbGltaXRzLT52YWxfNjRxYW07CisJCX0KIAkJYnJlYWs7CiAJfQotCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdF9sZW4pCisJaWYgKGkgPT0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzKQogCQlnb3RvIGVycjsKIAotCWVudHJ5ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgeworCWVudHJ5ID0gKHZvaWQgKikocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSArIHByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCk7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXM7IGkrKykgewogCQlpZiAoKigoX19sZTE2ICopZW50cnkpICE9IGZyZXEpIHsKLQkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOwotCQkJZW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKLQkJCQkgcHJpdi0+Y3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCQkJZW50cnkgKz0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCWNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUgPSA4OwotCQltZW1zZXQoY2hhbi0+Y3VydmVfZGF0YSwgMCwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSk7Ci0JCW1lbWNweShjaGFuLT5jdXJ2ZV9kYXRhLCBlbnRyeSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCi0JCSAgICAgICBtaW4oKHU4KTgsIHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCkpOworCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LmN1cnZlX2RhdGEsCisJCQkJKHZvaWQgKikgZW50cnkgKyBzaXplb2YoX19sZTE2KSwKKwkJCQlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwNTRfc2Nhbl9ib2R5ICpjaGFuID0gJmJvZHktPm5vcm1hbDsKKwkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CisJCQkJKHZvaWQgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKworCQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7CisJCQljaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlID0gODsKKwkJCW1lbXNldChjaGFuLT5jdXJ2ZV9kYXRhLCAwLCBzaXplb2YoKmNoYW4tPmN1cnZlX2RhdGEpKTsKKwkJCW1lbWNweShjaGFuLT5jdXJ2ZV9kYXRhLCBlbnRyeSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgorCQkJICAgICAgIG1pbigodTgpOCwgY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKSk7CisJCX0KIAkJYnJlYWs7CiAJfQorCWlmIChpID09IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMpCisJCWdvdG8gZXJyOwogCi0JaWYgKHByaXYtPmZ3X3ZhciA8IDB4NTAwKSB7Ci0JCWNoYW4tPnYxX3Jzc2kubXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpOwotCQljaGFuLT52MV9yc3NpLmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKTsKLQl9IGVsc2UgewotCQljaGFuLT52Mi5yc3NpLm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKLQkJY2hhbi0+djIucnNzaS5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7Ci0JCWNoYW4tPnYyLmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7Ci0JCW1lbXNldChjaGFuLT52Mi5ydHNfcmF0ZXMsIDAsIDgpOworCWlmICgocHJpdi0+ZndfdmFyID49IDB4NTAwKSAmJiAocHJpdi0+ZndfdmFyIDwgMHg1MDkpKSB7CisJCXJhdGUgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyYXRlKSk7CisJCXJhdGUtPmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmF0ZS0+cnRzX3JhdGVzKTsgaSsrKQorCQkJcmF0ZS0+cnRzX3JhdGVzW2ldID0gaTsKIAl9CisKKwlyc3NpID0gKHN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKikgc2tiX3B1dChza2IsIHNpemVvZigqcnNzaSkpOworCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKKwlyc3NpLT5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7CisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJLyogTG9uZ2JvdyBmcm9udGVuZCBuZWVkcyBldmVyIG1vcmUgKi8KKwkJcnNzaSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwkJcnNzaS0+bXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3Vua24pOworCQlyc3NpLT5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmxvbmdib3dfdW5rMik7CisJfQorCisJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwOSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CisJfQorCisJaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gc2l6ZW9mKCpoZHIpKTsKKwogCXByaXYtPnR4KGRldiwgc2tiKTsKIAlyZXR1cm4gMDsKIApAQCAtMTYzMSwyMyArMTg3MSwyMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBtb2RlLCBpbnQgbGluaywgaW50IGFjdCkKK3N0YXRpYyBpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfbGVkICpsZWQ7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqbGVkKSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLAlQNTRfQ09OVFJPTF9UWVBFX0xFRCwKLQkJCUdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpsZWQpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsZWQgPSAoc3RydWN0IHA1NF9sZWQgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpsZWQpKTsKLQlsZWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQlsZWQtPmxlZF9wZXJtYW5lbnQgPSBjcHVfdG9fbGUxNihsaW5rKTsKLQlsZWQtPmxlZF90ZW1wb3JhcnkgPSBjcHVfdG9fbGUxNihhY3QpOwotCWxlZC0+ZHVyYXRpb24gPSBjcHVfdG9fbGUxNigxMDAwKTsKKwlsZWQgPSAoc3RydWN0IHA1NF9sZWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqbGVkKSk7CisJbGVkLT5mbGFncyA9IGNwdV90b19sZTE2KDB4MDAwMyk7CisJbGVkLT5tYXNrWzBdID0gbGVkLT5tYXNrWzFdID0gY3B1X3RvX2xlMTYocHJpdi0+c29mdGxlZF9zdGF0ZSk7CisJbGVkLT5kZWxheVswXSA9IGNwdV90b19sZTE2KDEpOworCWxlZC0+ZGVsYXlbMV0gPSBjcHVfdG9fbGUxNigwKTsKIAlwcml2LT50eChkZXYsIHNrYik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjY2LDkgKzE5MDUsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF9lZGNmICplZGNmOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpICsKLQkJCXNpemVvZihzdHJ1Y3QgcDU0X2hkciksIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwKLQkJCUdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCplZGNmKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTY5Miw2ICsxOTMwLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcDU0X3NldF9wcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3BzbSAqcHNtOworCXUxNiBtb2RlOworCWludCBpOworCisJaWYgKGRldi0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQorCQltb2RlID0gUDU0X1BTTSB8IFA1NF9QU01fRFRJTSB8IFA1NF9QU01fTUNCQzsKKwllbHNlCisJCW1vZGUgPSBQNTRfUFNNX0NBTTsKKworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpwc20pLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwc20gPSAoc3RydWN0IHA1NF9wc20gKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpwc20pKTsKKwlwc20tPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKwlwc20tPmFpZCA9IGNwdV90b19sZTE2KHByaXYtPmFpZCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHNtLT5pbnRlcnZhbHMpOyBpKyspIHsKKwkJcHNtLT5pbnRlcnZhbHNbaV0uaW50ZXJ2YWwgPQorCQkJY3B1X3RvX2xlMTYoZGV2LT5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLnBlcmlvZHMgPSBjcHVfdG9fbGUxNigxKTsKKwl9CisKKwlwc20tPmJlYWNvbl9yc3NpX3NraXBfbWF4ID0gNjA7CisJcHNtLT5yc3NpX2RlbHRhX3RocmVzaG9sZCA9IDA7CisJcHNtLT5uciA9IDA7CisKKwlwcml2LT50eChkZXYsIHNrYik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwNTRfYmVhY29uX3RpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCkBAIC0xNzk2LDYgKzIwNzAsOSBAQAogCiAJcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywgMCk7CiAKKwlwcml2LT5zb2Z0bGVkX3N0YXRlID0gMDsKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcmV0dXJuIGVycjsKQEAgLTE4MDgsNiArMjA4NSw5IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJcDU0X3NldF9sZWRzKGRldik7CisKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCWlmIChwcml2LT5jYWNoZWRfYmVhY29uKQogCQlwNTRfdHhfY2FuY2VsKGRldiwgcHJpdi0+Y2FjaGVkX2JlYWNvbik7CkBAIC0xODQ1LDcgKzIxMjUsNiBAQAogCiAJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCXA1NF9zZXR1cF9tYWMoZGV2KTsKLQlwNTRfc2V0X2xlZHMoZGV2LCAxLCAwLCAwKTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtMTg4NCw2ICsyMTYzLDExIEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJcmV0ID0gcDU0X3NldF9wcyhkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKQEAgLTE5MjAsOCArMjIwNCw2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBwNTRfc2V0X2xlZHMoZGV2LCAxLCAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpLCAwKTsKLQogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTE5MzUsMTIgKzIyMTcsMTEgQEAKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAogCSp0b3RhbF9mbGFncyAmPSBGSUZfUFJPTUlTQ19JTl9CU1MgfAotCQkJKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgPwotCQkJCUZJRl9GQ1NGQUlMIDogMDsKKwkJCUZJRl9PVEhFUl9CU1M7CiAKIAlwcml2LT5maWx0ZXJfZmxhZ3MgPSAqdG90YWxfZmxhZ3M7CiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTKSkKIAkJcDU0X3NldHVwX21hYyhkZXYpOwogfQogCkBAIC0xOTY3LDEwICsyMjQ4LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfeGJvd19zeW50aCAqeGJvdzsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp4Ym93KSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLAotCQkJICAgIEdGUF9LRVJORUwpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp4Ym93KSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5OTksNyArMjI3OCw3IEBACiAJICogICAgICAyLiBjYW5jZWwgc3R1Y2sgZnJhbWVzIC8gcmVzZXQgdGhlIGRldmljZSBpZiBuZWNlc3NhcnkuCiAJICovCiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9zdGF0aXN0aWNzKSwKIAkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NUQVRfUkVBREJBQ0ssIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQpAQCAtMjAyMiw4ICsyMzAxLDggQEAKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCW1lbWNweShzdGF0cywgJnByaXYtPnR4X3N0YXRzWzRdLCBzaXplb2Yoc3RhdHNbMF0pICogZGV2LT5xdWV1ZXMpOwotCisJbWVtY3B5KHN0YXRzLCAmcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLAorCSAgICAgICBzaXplb2Yoc3RhdHNbMF0pICogZGV2LT5xdWV1ZXMpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDU5LDcgKzIzMzgsNyBAQAogfQogCiBzdGF0aWMgaW50IHA1NF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwpAQCAtMjExMCw5ICsyMzg5LDggQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcnhrZXkpICsKLQkJCXNpemVvZihzdHJ1Y3QgcDU0X2hkciksCVA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcnhrZXkpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjEyMyw4ICsyNDAxLDggQEAKIAlyeGtleS0+ZW50cnkgPSBrZXktPmtleWlkeDsKIAlyeGtleS0+a2V5X2lkID0ga2V5LT5rZXlpZHg7CiAJcnhrZXktPmtleV90eXBlID0gYWxnbzsKLQlpZiAoYWRkcmVzcykKLQkJbWVtY3B5KHJ4a2V5LT5tYWMsIGFkZHJlc3MsIEVUSF9BTEVOKTsKKwlpZiAoc3RhKQorCQltZW1jcHkocnhrZXktPm1hYywgc3RhLT5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZQogCQltZW1zZXQocnhrZXktPm1hYywgfjAsIEVUSF9BTEVOKTsKIAlpZiAoa2V5LT5hbGcgIT0gQUxHX1RLSVApIHsKQEAgLTIxNDIsNiArMjQyMCw5NiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKK3N0YXRpYyB2b2lkIHA1NF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2RldiwKKwkJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IHA1NF9sZWRfZGV2LAorCQkJCQkgICAgICAgbGVkX2Rldik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gbGVkLT5od19kZXY7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGVycjsKKworCS8qIERvbid0IHRvZ2dsZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KKwlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwkJcmV0dXJuIDsKKworCWlmIChicmlnaHRuZXNzICE9IExFRF9PRkYpCisJCXByaXYtPnNvZnRsZWRfc3RhdGUgfD0gQklUKGxlZC0+aW5kZXgpOworCWVsc2UKKwkJcHJpdi0+c29mdGxlZF9zdGF0ZSAmPSB+QklUKGxlZC0+aW5kZXgpOworCisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisJaWYgKGVyciAmJiBuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byB1cGRhdGUgJXMgTEVELlxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSksIGxlZF9kZXYtPm5hbWUpOworfQorCitzdGF0aWMgaW50IHA1NF9yZWdpc3Rlcl9sZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJICAgIHN0cnVjdCBwNTRfbGVkX2RldiAqbGVkLAorCQkJICAgIHVuc2lnbmVkIGludCBsZWRfaW5kZXgsCisJCQkgICAgY2hhciAqbmFtZSwgY2hhciAqdHJpZ2dlcikKK3sKKwlpbnQgZXJyOworCisJaWYgKGxlZC0+cmVnaXN0ZXJlZCkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlzbnByaW50ZihsZWQtPm5hbWUsIHNpemVvZihsZWQtPm5hbWUpLCAicDU0LSVzOjolcyIsCisJCSB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBuYW1lKTsKKwlsZWQtPmh3X2RldiA9IGRldjsKKwlsZWQtPmluZGV4ID0gbGVkX2luZGV4OworCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHA1NF9sZWRfYnJpZ2h0bmVzc19zZXQ7CisKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KGRldi0+d2lwaHkpLCAmbGVkLT5sZWRfZGV2KTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgTEVELlxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSksIG5hbWUpOworCWVsc2UKKwkJbGVkLT5yZWdpc3RlcmVkID0gMTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2luaXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGVycjsKKworCS8qCisJICogVE9ETzoKKwkgKiBGaWd1cmUgb3V0IGlmIHRoZSBFRVBST00gY29udGFpbnMgc29tZSBoaW50cyBhYm91dCB0aGUgbnVtYmVyCisJICogb2YgYXZhaWxhYmxlL3Byb2dyYW1tYWJsZSBMRURzIG9mIHRoZSBkZXZpY2UuCisJICogQnV0IGZvciBub3csIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlIHR3byBwcm9ncmFtbWFibGUgTEVEcy4KKwkgKi8KKworCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQoZGV2LCAmcHJpdi0+YXNzb2NfbGVkLCAwLCAiYXNzb2MiLAorCQkJICAgICAgIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoZGV2KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQoZGV2LCAmcHJpdi0+dHhfbGVkLCAxLCAidHgiLAorCQkJICAgICAgIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoZGV2KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKHByaXYtPnR4X2xlZC5yZWdpc3RlcmVkKQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcHJpdi0+dHhfbGVkLmxlZF9kZXYpOworCWlmIChwcml2LT5hc3NvY19sZWQucmVnaXN0ZXJlZCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnByaXYtPmFzc29jX2xlZC5sZWRfZGV2KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcDU0X29wcyA9IHsKIAkudHgJCQk9IHA1NF90eCwKIAkuc3RhcnQJCQk9IHA1NF9zdGFydCwKQEAgLTIxNzUsNiArMjU0Myw4IEBACiAJcHJpdi0+YmFzaWNfcmF0ZV9tYXNrID0gMHgxNWY7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcXVldWUpOwogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CiAJCSAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CiAKQEAgLTIxODQsMTEgKzI1NTQsMTEgQEAKIAkJCQkgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7CiAKIAlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwkvKiBUT0RPOiBmaW5kIGFjdHVhbCB2YWx1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzBdLmxpbWl0ID0gMTsJCS8qIEJlYWNvbiBxdWV1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzFdLmxpbWl0ID0gMTsJCS8qIFByb2JlIHF1ZXVlIGZvciBIVyBzY2FuICovCi0JcHJpdi0+dHhfc3RhdHNbMl0ubGltaXQgPSAzOwkJLyogcXVldWUgZm9yIE1MTUVzICovCi0JcHJpdi0+dHhfc3RhdHNbM10ubGltaXQgPSAzOwkJLyogQnJvYWRjYXN0IC8gTUMgcXVldWUgKi8KLQlwcml2LT50eF9zdGF0c1s0XS5saW1pdCA9IDU7CQkvKiBEYXRhICovCisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0JFQUNPTl0ubGltaXQgPSAxOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9GV1NDQU5dLmxpbWl0ID0gMTsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfTUdNVF0ubGltaXQgPSAzOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9DQUJdLmxpbWl0ID0gMzsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0ubGltaXQgPSA1OwogCWRldi0+cXVldWVzID0gMTsKIAlwcml2LT5ub2lzZSA9IC05NDsKIAkvKgpAQCAtMjIxMiwxMiArMjU4MiwzNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKIAoraW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocGRldiwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2UgKCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJZXJyID0gcDU0X2luaXRfbGVkcyhkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9MRURTICovCisKKwlkZXZfaW5mbyhwZGV2LCAiaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWdpc3Rlcl9jb21tb24pOworCiB2b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7CiAJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKIAlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKKworCSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCXA1NF91bnJlZ2lzdGVyX2xlZHMoZGV2KTsKKwkjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9mcmVlX2NvbW1vbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAppbmRleCBmNTcyOWRlLi43NWVhZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCkBAIC0yNiwxMiArMjYsMTcgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX01BU0sJCTB4MDAwNworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMwkweDAwMDEKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0RVRVRURTIJMHgwMDAyCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9GUklTQkVFCTB4MDAwMworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVwkJMHgwMDA0CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XCTB4MDAwNQogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX01BU0sJCTB4MDAxOAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1BBX0RFVEVDVE9SCTB4MDAwMAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX0RJU0FCTEVECTB4MDAwOAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1pJRgkJMHgwMDEwCiAjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX01BU0sJMHgwMDIwCi0jZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDAxCisjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDIwCiAjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfTUFTSwkJMHgwMDQwCiAjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfRElTQUJMRUQJMHgwMDQwCiAjZGVmaW5lIFBEUl9TWU5USF81X0dIWl9NQVNLCQkweDAwODAKQEAgLTEyNSw5ICsxMzAsMTMgQEAKIAl1OCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSB7CisJX19sZTE2IGlxX3BhcmFtWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7CiAgICAgICAgIF9fbGUxNiBmcmVxOwotICAgICAgICBfX2xlMTYgaXFfcGFyYW1bNF07CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHBhcmFtczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0IHsKQEAgLTE4MCw2ICsxODksMzUgQEAKIAlfX2xlMTYgYWRkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBwZGFfY291bnRyeSB7CisJdTggcmVnZG9tYWluOworCXU4IGFscGhhMlsyXTsKKwl1OCBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogV2FybmluZzogTG9uZ2JvdydzIHN0cnVjdHVyZXMgYXJlIGJvZ3VzLgorICovCitzdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgeworCV9fbGUxNiByZl9wb3dlcl9wb2ludHNbMTJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGVfbG9uZ2JvdyB7CisJX19sZTE2IHJmX3Bvd2VyOworCV9fbGUxNiBwYV9kZXRlY3RvcjsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgZGF0YVs0XTsKKwl9IHBvaW50c1szXSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciB7CisJX19sZTE2IGVudHJpZXM7CisJX19sZTE2IGVudHJ5X3NpemU7CisJX19sZTE2IG9mZnNldDsKKwlfX2xlMTYgbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoKICAqIHRoaXMgZGVmaW5lcyB0aGUgUERSIGNvZGVzIHVzZWQgdG8gYnVpbGQgUERBcyBhcyBkZWZpbmVkIGluIGRvY3VtZW50CiAgKiBudW1iZXIgNTUzMTU1LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtaXJyb3JzIHZlcnNpb24gMS4xIG9mIHRoZQpAQCAtMjI1LDggKzI2MywxMyBAQAogLyogcmVzZXJ2ZWQgcmFuZ2UgKDB4MjAwMCAtIDB4N2ZmZikgKi8KIAogLyogY3VzdG9tZXIgcmFuZ2UgKDB4ODAwMCAtIDB4ZmZmZikgKi8KLSNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCTB4ODAwMAotI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCTB4ODAwMQorI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJCTB4ODAwMAorI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCQkweDgwMDEKKworLyogdXNlZCBieSBvdXIgbW9kaWZpY2F0ZWQgZWVwcm9tIGltYWdlICovCisjZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTQkJMHhERUFECisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT00JMHhCRUVGCisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT00JCTB4QjA1RAogCiAvKiBQRFIgZGVmaW5pdGlvbnMgZm9yIGRlZmF1bHQgY291bnRyeSAmIGNvdW50cnkgbGlzdCAqLwogI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0NPREUJCTB4ODAKQEAgLTI0MSwxMiArMjg0LDYgQEAKICNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1JfT1VURE9PUgkweDMwCiAjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU5ERVgJCTB4MEYKIAotLyogc3RvcmVkIGluIHNrYi0+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+PSA0KQorCQlyZXR1cm4gMDsKKwogCXF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcXVldWVfaWR4KTsKIAogCS8qIFVwZGF0ZSBXTU0gVFhPUCByZWdpc3RlciAqLwotCWlmIChxdWV1ZV9pZHggPCAyKSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKKwlvZmZzZXQgPSBBQ19UWE9QX0NTUjAgKyAoc2l6ZW9mKHUzMikgKiAoISEocXVldWVfaWR4ICYgMikpKTsKKwlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAmIDEpICogMTY7CisJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKIAotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsIHJlZyk7Ci0JfSBlbHNlIGlmIChxdWV1ZV9pZHggPCA0KSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4IC0gMikgKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKLQotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsIHJlZyk7Ci0JfQorCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CiAKIAkvKiBVcGRhdGUgV01NIHJlZ2lzdGVycyAqLwogCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiA0OwpAQCAtMjcxNyw3ICsyNzU0LDcgQEAKIAkuaXJxX2hhbmRsZXIJCT0gcnQ2MXBjaV9pbnRlcnJ1cHQsCiAJLnByb2JlX2h3CQk9IHJ0NjFwY2lfcHJvYmVfaHcsCiAJLmdldF9maXJtd2FyZV9uYW1lCT0gcnQ2MXBjaV9nZXRfZmlybXdhcmVfbmFtZSwKLQkuZ2V0X2Zpcm13YXJlX2NyYwk9IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX2NyYywKKwkuY2hlY2tfZmlybXdhcmUJCT0gcnQ2MXBjaV9jaGVja19maXJtd2FyZSwKIAkubG9hZF9maXJtd2FyZQkJPSBydDYxcGNpX2xvYWRfZmlybXdhcmUsCiAJLmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX2luaXRpYWxpemUsCiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDBwY2lfdW5pbml0aWFsaXplLApAQCAtMjczMiw2ICsyNzY5LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0NjFwY2lfd3JpdGVfYmVhY29uLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NjFwY2lfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDYxcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NjFwY2lfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQ2MXBjaV9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0NjFwY2lfY29uZmlnX3BhaXJ3aXNlX2tleSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IDY1ZmUzMzMuLjQxZTg5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUwLDggKzUwLDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwODAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCkBAIC04OCw4ICs4OCwxMCBAQAogCiAvKgogICogU09GVF9SRVNFVF9DU1IKKyAqIEZPUkNFX0NMT0NLX09OOiBIb3N0IGZvcmNlIE1BQyBjbG9jayBPTgogICovCiAjZGVmaW5lIFNPRlRfUkVTRVRfQ1NSCQkJMHgwMDEwCisjZGVmaW5lIFNPRlRfUkVTRVRfQ1NSX0ZPUkNFX0NMT0NLX09OCUZJRUxEMzIoMHgwMDAwMDAwMikKIAogLyoKICAqIE1DVV9JTlRfU09VUkNFX0NTUjogTUNVIGludGVycnVwdCBzb3VyY2UvbWFzayByZWdpc3Rlci4KQEAgLTEwNTQsOCArMTA1NiwxMCBAQAogCiAvKgogICogSU9fQ05UTF9DU1IKKyAqIFJGX1BTOiBTZXQgUkYgaW50ZXJmYWNlIHZhbHVlIHRvIHBvd2VyIHNhdmUKICAqLwogI2RlZmluZSBJT19DTlRMX0NTUgkJCTB4MzQ5OAorI2RlZmluZSBJT19DTlRMX0NTUl9SRl9QUwkJRklFTEQzMigweDAwMDAwMDA0KQogCiAvKgogICogVUFSVF9JTlRfU09VUkNFX0NTUgpAQCAtMTE4Niw3ICsxMTkwLDggQEAKICNkZWZpbmUgRUVQUk9NX05JQwkJCTB4MDAxMQogI2RlZmluZSBFRVBST01fTklDX0VOQUJMRV9ESVZFUlNJVFkJRklFTEQxNigweDAwMDEpCiAjZGVmaW5lIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZCQlGSUVMRDE2KDB4MDAwMikKLSNkZWZpbmUgRUVQUk9NX05JQ19UWF9SWF9GSVhFRAkJRklFTEQxNigweDAwMGMpCisjZGVmaW5lIEVFUFJPTV9OSUNfUlhfRklYRUQJCUZJRUxEMTYoMHgwMDA0KQorI2RlZmluZSBFRVBST01fTklDX1RYX0ZJWEVECQlGSUVMRDE2KDB4MDAwOCkKICNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQkcJRklFTEQxNigweDAwMTApCiAjZGVmaW5lIEVFUFJPTV9OSUNfQ0FSREJVU19BQ0NFTAlGSUVMRDE2KDB4MDAyMCkKICNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQQlGSUVMRDE2KDB4MDA0MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGNlZmVlMWIuLjI0ZmRmZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyMiw5ICsxMjIsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC0xODYsNiArMTgzLDE4IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAorI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorc3RhdGljIGludCBydDczdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdTMyIHJlZzsKKworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjEzLCAmcmVnKTsKKwlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEzX0JJVDcpOworfQorI2Vsc2UKKyNkZWZpbmUgcnQ3M3VzYl9yZmtpbGxfcG9sbAlOVUxMCisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDczdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKQEAgLTg0NCw2ICs4NTMsNDQgQEAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAxMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCA1KTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfREVWSUNFX01PREUsIDAsCisJCQkJCSAgICBVU0JfTU9ERV9TTEVFUCwgUkVHSVNURVJfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAorCQkJCQkgICAgVVNCX01PREVfV0FLRVVQLCBSRUdJU1RFUl9USU1FT1VUKTsKKworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBydDczdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtODYxLDYgKzkwOCw4IEBACiAJCXJ0NzN1c2JfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQ3M3VzYl9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0NzN1c2JfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIC8qCkBAIC04ODQsMjEgKzkzMywyOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFNUQV9DU1IxX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NzN1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDczdXNiX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHgyMCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4MjA7CisJaWYgKHF1YWwtPnZnY19sZXZlbCAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQ3M3VzYl9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDczdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDIwKTsKK30KKworc3RhdGljIHZvaWQgcnQ3M3VzYl9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCXU4IHVwX2JvdW5kOwogCXU4IGxvd19ib3VuZDsKIAotCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwpAQCAtOTExLDEwICs5NjcsMTAgQEAKIAkJCXVwX2JvdW5kICs9IDB4MTA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAocnNzaSA+IC04MikgeworCQlpZiAocXVhbC0+cnNzaSA+IC04MikgewogCQkJbG93X2JvdW5kID0gMHgxYzsKIAkJCXVwX2JvdW5kID0gMHg0MDsKLQkJfSBlbHNlIGlmIChyc3NpID4gLTg0KSB7CisJCX0gZWxzZSBpZiAocXVhbC0+cnNzaSA+IC04NCkgewogCQkJbG93X2JvdW5kID0gMHgxYzsKIAkJCXVwX2JvdW5kID0gMHgyMDsKIAkJfSBlbHNlIHsKQEAgLTkzOCwzNyArOTk0LDMyIEBACiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHZlcnkgc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+IC0zNSkgewotCQlpZiAocjE3ICE9IDB4NjApCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDYwKTsKKwlpZiAocXVhbC0+cnNzaSA+IC0zNSkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDYwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IHVwX2JvdW5kKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgbWlkZGxlLXNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTY2KSB7Ci0JCWxvd19ib3VuZCArPSAweDEwOwotCQlpZiAocjE3ICE9IGxvd19ib3VuZCkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTY2KSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlpZiAocjE3ICE9IChsb3dfYm91bmQgKyAweDEwKSkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCArIDB4MDgpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDA4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTc2LDEyICsxMDI3LDEyIEBACiAJICogU3BlY2lhbCBjYXNlOiBDaGFuZ2UgdXBfYm91bmQgYmFzZWQgb24gdGhlIHJzc2kuCiAJICogTG93ZXIgdXBfYm91bmQgd2hlbiByc3NpIGlzIHdlYWtlciB0aGVuIC03NCBkQm0uCiAJICovCi0JdXBfYm91bmQgLT0gMiAqICgtNzQgLSByc3NpKTsKKwl1cF9ib3VuZCAtPSAyICogKC03NCAtIHF1YWwtPnJzc2kpOwogCWlmIChsb3dfYm91bmQgPiB1cF9ib3VuZCkKIAkJdXBfYm91bmQgPSBsb3dfYm91bmQ7CiAKLQlpZiAocjE3ID4gdXBfYm91bmQpIHsKLQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgPiB1cF9ib3VuZCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk5MSwxNyArMTA0MiwxMiBAQAogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCB1cF9ib3VuZCkgewotCQlyMTcgKz0gNDsKLQkJaWYgKHIxNyA+IHVwX2JvdW5kKQotCQkJcjE3ID0gdXBfYm91bmQ7Ci0JCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gbG93X2JvdW5kKSB7Ci0JCXIxNyAtPSA0OwotCQlpZiAocjE3IDwgbG93X2JvdW5kKQotCQkJcjE3ID0gbG93X2JvdW5kOwotCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0KKwlpZiAoKHF1YWwtPmZhbHNlX2NjYSA+IDUxMikgJiYgKHF1YWwtPnZnY19sZXZlbCA8IHVwX2JvdW5kKSkKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwKKwkJCQltaW5fdCh1OCwgcXVhbC0+dmdjX2xldmVsICsgNCwgdXBfYm91bmQpKTsKKwllbHNlIGlmICgocXVhbC0+ZmFsc2VfY2NhIDwgMTAwKSAmJiAocXVhbC0+dmdjX2xldmVsID4gbG93X2JvdW5kKSkKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwKKwkJCQltYXhfdCh1OCwgcXVhbC0+dmdjX2xldmVsIC0gNCwgbG93X2JvdW5kKSk7CiB9CiAKIC8qCkBAIC0xMDEyLDI1ICsxMDU4LDM3IEBACiAJcmV0dXJuIEZJUk1XQVJFX1JUMjU3MTsKIH0KIAotc3RhdGljIHUxNiBydDczdXNiX2dldF9maXJtd2FyZV9jcmMoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ3M3VzYl9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CisJdTE2IGZ3X2NyYzsKIAl1MTYgY3JjOwogCiAJLyoKLQkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICogT25seSBzdXBwb3J0IDJrYiBmaXJtd2FyZSBmaWxlcy4KKwkgKi8KKwlpZiAobGVuICE9IDIwNDgpCisJCXJldHVybiBGV19CQURfTEVOR1RIOworCisJLyoKIAkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCiAJICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwogCSAqIGFsZ29yaXRobS4KIAkgKi8KKwlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7CisKKwkvKgorCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKi8KIAljcmMgPSBjcmNfaXR1X3QoMCwgZGF0YSwgbGVuIC0gMik7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCi0JcmV0dXJuIGNyYzsKKwlyZXR1cm4gKGZ3X2NyYyA9PSBjcmMpID8gRldfT0sgOiBGV19CQURfQ1JDOwogfQogCi1zdGF0aWMgaW50IHJ0NzN1c2JfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB2b2lkICpkYXRhLAotCQkJCSBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDczdXNiX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHN0YXR1czsKQEAgLTE0NDksNyArMTUwNyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFVFJZX01PREUsICZ0eGRlc2MtPmZsYWdzKSk7CkBAIC0xODE2LDYgKzE4NzQsMTQgQEAKIAkJX19zZXRfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgorCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQorCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKKwkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldC4KIAkgKi8KIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fRlJFUSwgJmVlcHJvbSk7CkBAIC0yMDIwLDcgKzIwODYsOSBAQAogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0yMTIxLDYgKzIxODksNyBAQAogCXN0cnVjdCBydDJ4MDBfZmllbGQzMiBmaWVsZDsKIAlpbnQgcmV0dmFsOwogCXUzMiByZWc7CisJdTMyIG9mZnNldDsKIAogCS8qCiAJICogRmlyc3QgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIHJ0MngwMGxpYiwgdGhhdCB3aWxsCkBAIC0yMTMyLDI0ICsyMjAxLDIzIEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCS8qCisJICogV2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCByZWdpc3RlciBpbml0aWFsaXphdGlvbgorCSAqIGZvciBXTU0gcXVldWVzLworCSAqLworCWlmIChxdWV1ZV9pZHggPj0gNCkKKwkJcmV0dXJuIDA7CisKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlX2lkeCk7CiAKIAkvKiBVcGRhdGUgV01NIFRYT1AgcmVnaXN0ZXIgKi8KLQlpZiAocXVldWVfaWR4IDwgMikgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CisJb2Zmc2V0ID0gQUNfVFhPUF9DU1IwICsgKHNpemVvZih1MzIpICogKCEhKHF1ZXVlX2lkeCAmIDIpKSk7CisJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggJiAxKSAqIDE2OworCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CiAKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCByZWcpOwotCX0gZWxzZSBpZiAocXVldWVfaWR4IDwgNCkgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAtIDIpICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7Ci0KLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCByZWcpOwotCX0KKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCiAJLyogVXBkYXRlIFdNTSByZWdpc3RlcnMgKi8KIAlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogNDsKQEAgLTIxNzAsMTMgKzIyMzgsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotLyoKLSAqIE1hYzgwMjExIGRlbWFuZHMgZ2V0X3RzZiBtdXN0IGJlIGF0b21pYy4KLSAqIFRoaXMgaXMgbm90IHBvc3NpYmxlIGZvciBydDczdXNiIHNpbmNlIGFsbCByZWdpc3RlciBhY2Nlc3MKLSAqIGZ1bmN0aW9ucyByZXF1aXJlIHNsZWVwaW5nLiBVbnRpbGwgbWFjODAyMTEgbm8gbG9uZ2VyIG5lZWRzCi0gKiBnZXRfdHNmIHRvIGJlIGF0b21pYywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuCi0gKi8KIHN0YXRpYyB1NjQgcnQ3M3VzYl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKQEAgLTIxOTAsOSArMjI1MSw2IEBACiAKIAlyZXR1cm4gdHNmOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQ3M3VzYl9nZXRfdHNmCU5VTEwKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnQ3M3VzYl9tYWM4MDIxMV9vcHMgPSB7CiAJLnR4CQkJPSBydDJ4MDBtYWNfdHgsCkBAIC0yMjE0LDEyICsyMjcyLDEzIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ3M3VzYl9ydDJ4MDBfb3BzID0gewogCS5wcm9iZV9odwkJPSBydDczdXNiX3Byb2JlX2h3LAogCS5nZXRfZmlybXdhcmVfbmFtZQk9IHJ0NzN1c2JfZ2V0X2Zpcm13YXJlX25hbWUsCi0JLmdldF9maXJtd2FyZV9jcmMJPSBydDczdXNiX2dldF9maXJtd2FyZV9jcmMsCisJLmNoZWNrX2Zpcm13YXJlCQk9IHJ0NzN1c2JfY2hlY2tfZmlybXdhcmUsCiAJLmxvYWRfZmlybXdhcmUJCT0gcnQ3M3VzYl9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwdXNiX3VuaW5pdGlhbGl6ZSwKIAkuY2xlYXJfZW50cnkJCT0gcnQyeDAwdXNiX2NsZWFyX2VudHJ5LAogCS5zZXRfZGV2aWNlX3N0YXRlCT0gcnQ3M3VzYl9zZXRfZGV2aWNlX3N0YXRlLAorCS5yZmtpbGxfcG9sbAkJPSBydDczdXNiX3Jma2lsbF9wb2xsLAogCS5saW5rX3N0YXRzCQk9IHJ0NzN1c2JfbGlua19zdGF0cywKIAkucmVzZXRfdHVuZXIJCT0gcnQ3M3VzYl9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDczdXNiX2xpbmtfdHVuZXIsCkBAIC0yMjI4LDYgKzIyODcsNyBAQAogCS53cml0ZV9iZWFjb24JCT0gcnQ3M3VzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0NzN1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NzN1c2Jfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ3M3VzYl9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDczdXNiX2NvbmZpZ19zaGFyZWRfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQ3M3VzYl9jb25maWdfcGFpcndpc2Vfa2V5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKaW5kZXggNDZlMTQwNS4uYzgwMTZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTAsOCArNTAsOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDEwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA4MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KQEAgLTI2Nyw2ICsyNjcsMTkgQEAKICAqIE1BQ19DU1IxMzogR1BJTy4KICAqLwogI2RlZmluZSBNQUNfQ1NSMTMJCQkweDMwMzQKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDAJCQlGSUVMRDMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxCQkJRklFTEQzMigweDAwMDAwMDAyKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMgkJCUZJRUxEMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDMJCQlGSUVMRDMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ0CQkJRklFTEQzMigweDAwMDAwMDEwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNQkJCUZJRUxEMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDYJCQlGSUVMRDMyKDB4MDAwMDAwNDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ3CQkJRklFTEQzMigweDAwMDAwMDgwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUOAkJCUZJRUxEMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDkJCQlGSUVMRDMyKDB4MDAwMDAyMDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxMAkJCUZJRUxEMzIoMHgwMDAwMDQwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDExCQkJRklFTEQzMigweDAwMDAwODAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMTIJCQlGSUVMRDMyKDB4MDAwMDEwMDApCiAKIC8qCiAgKiBNQUNfQ1NSMTQ6IExFRCBjb250cm9sIHJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaAppbmRleCAzYjFlMWMyLi45NzE4ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaApAQCAtMTAwLDYgKzEwMCw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJdTMyIHJ4X2NvbmY7CiAJc3RydWN0IHVzYl9hbmNob3IgYW5jaG9yZWQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKIAl1MTYgdHhwd3JfYmFzZTsKIAl1OCBhc2ljX3JldjsKIAl1OCBpc19ydGw4MTg3YjsKQEAgLTExNyw3ICsxMTksNyBAQAogCXN0cnVjdCB7CiAJCV9fbGU2NCBidWY7CiAJCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7Ci0JfSBiX3R4X3N0YXR1czsKKwl9IGJfdHhfc3RhdHVzOyAvKiBUaGlzIHF1ZXVlIGlzIHVzZWQgYnkgYm90aCAtYiBhbmQgbm9uLWIgZGV2aWNlcyAqLwogfTsKIAogdm9pZCBydGw4MTg3X3dyaXRlX3BoeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwppbmRleCBmNDc0N2ExLi5mZDgxODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCkBAIC0xODksMjUgKzE4OSwzMyBAQAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRsODE4N190eF9oZHIpKTsKIAlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CiAKLQlpZiAoIXVyYi0+c3RhdHVzICYmCi0JICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKLQkgICAgcHJpdi0+aXNfcnRsODE4N2IpIHsKLQkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOworCWlmICghKHVyYi0+c3RhdHVzKSAmJiAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CisJCWlmIChwcml2LT5pc19ydGw4MTg3YikgeworCQkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOwogCi0JCS8qIHF1ZXVlIGlzICJmdWxsIiwgZGlzY2FyZCBsYXN0IGl0ZW1zICovCi0JCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYjsKKwkJCS8qIHF1ZXVlIGlzICJmdWxsIiwgZGlzY2FyZCBsYXN0IGl0ZW1zICovCisJCQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpID4gNSkgeworCQkJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOwogCi0JCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCi0JCQkJInRyYW5zbWl0IHN0YXR1cyBxdWV1ZSBmdWxsXG4iKTsKKwkJCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCisJCQkJCSJ0cmFuc21pdCBzdGF0dXMgcXVldWUgZnVsbFxuIik7CiAKLQkJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOwotCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBvbGRfc2tiKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmICF1cmItPnN0YXR1cykKKwkJCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKKwkJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOworCQkJfQorCQkJcmV0dXJuOworCQl9IGVsc2UgewogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQl9CisJfQorCWlmIChwcml2LT5pc19ydGw4MTg3YikKIAkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCWVsc2UgeworCQkvKiBSZXRyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIFJUSTgxODcgaXMgb25seSBhdmFpbGFibGUgYnkKKwkJICogcmVhZGluZyBhIHJlZ2lzdGVyIGluIHRoZSBkZXZpY2UuIFdlIGFyZSBpbiBpbnRlcnJ1cHQgbW9kZQorCQkgKiBoZXJlLCB0aHVzIHF1ZXVlIHRoZSBza2IgYW5kIGZpbmlzaCBvbiBhIHdvcmsgcXVldWUuICovCisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT53b3JrLCAwKTsKIAl9CiB9CiAKQEAgLTQwMyw3ICs0MTEsNyBAQAogCXN0cnVjdCBydGw4MTg3X3J4X2luZm8gKmluZm87CiAJaW50IHJldCA9IDA7CiAKLQl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcXVldWUpIDwgOCkgeworCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9xdWV1ZSkgPCAxNikgewogCQlza2IgPSBfX2Rldl9hbGxvY19za2IoUlRMODE4N19NQVhfUlgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNrYikgewogCQkJcmV0ID0gLUVOT01FTTsKQEAgLTY1Nyw3ICs2NjUsNyBAQAogCiAJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SU5UX1RJTUVPVVQsIDApOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgMHg4MSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCAwKTsKIAogCS8vIFRPRE86IHNldCBSRVNQX1JBVEUgYW5kIEJSU1IgcHJvcGVybHkKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJFU1BfUkFURSwgKDggPDwgNCkgfCAwKTsKQEAgLTc3Nyw5ICs3ODUsNiBAQAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCwgcmVnKTsKIAogCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkUwLCAweDBGRkYsIDEpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLKTsKLQlyZWcgfD0gUlRMODE4WF9SQVRFX0ZBTExCQUNLX0VOQUJMRTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIHJlZyk7CiAKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CRUFDT05fSU5URVJWQUwsIDEwMCk7CiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QVRJTV9XTkQsIDIpOwpAQCAtODY3LDYgKzg3MiwzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBydGw4MTg3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIFRoZSBSVEw4MTg3IHJldHVybnMgdGhlIHJldHJ5IGNvdW50IHRocm91Z2ggcmVnaXN0ZXIgMHhGRkZBLiBJbgorCSAqIGFkZGl0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgY3VtdWxhdGl2ZSByZXRyeSBjb3VudCwgbm90IHRoZQorCSAqIHZhbHVlIGZvciB0aGUgY3VycmVudCBUWCBwYWNrZXQuIFdoZW4gbXVsdGlwbGUgVFggZW50cmllcyBhcmUKKwkgKiBxdWV1ZWQsIHRoZSByZXRyeSBjb3VudCB3aWxsIGJlIHZhbGlkIGZvciB0aGUgbGFzdCBvbmUgaW4gdGhlIHF1ZXVlLgorCSAqIFRoZSAiZXJyb3IiIHNob3VsZCBub3QgbWF0dGVyIGZvciBwdXJwb3NlcyBvZiByYXRlIHNldHRpbmcuICovCisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE4N19wcml2LAorCQkJCSAgICB3b3JrLndvcmspOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwcml2LT5kZXY7CisJc3RhdGljIHUxNiByZXRyeTsKKwl1MTYgdG1wOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJdG1wID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAoX19sZTE2ICopMHhGRkZBKTsKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpID4gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYjsKKworCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Iob2xkX3NrYik7CisJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHRtcCAtIHJldHJ5ICsgMTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgb2xkX3NrYik7CisJfQorCXJldHJ5ID0gdG1wOworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgcnRsODE4N19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKQEAgLTg4MSw2ICs5MTQsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCiAJaW5pdF91c2JfYW5jaG9yKCZwcml2LT5hbmNob3JlZCk7CisJcHJpdi0+ZGV2ID0gZGV2OwogCiAJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CiAJCXJlZyA9IFJUTDgxOFhfUlhfQ09ORl9NR01UIHwKQEAgLTk0OCw2ICs5ODIsNyBAQAogCXJlZyB8PSBSVEw4MThYX0NNRF9UWF9FTkFCTEU7CiAJcmVnIHw9IFJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgcnRsODE4N193b3JrKTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC05NzgsNiArMTAxMyw4IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwcml2LT5hbmNob3JlZCk7CisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogfQogCkBAIC05ODYsMTkgKzEwMjMsMjEgQEAKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCWludCBpOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAorCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJZ290byBleGl0OwogCiAJc3dpdGNoIChjb25mLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CiAJfQogCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcmV0ID0gMDsKIAlwcml2LT52aWYgPSBjb25mLT52aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwpAQCAtMTAwNyw4ICsxMDQ2LDkgQEAKIAkJCQkgKCh1OCAqKWNvbmYtPm1hY19hZGRyKVtpXSk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKIAorZXhpdDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxODdfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCA3MDE1ZjI0Li5mOTUyMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTk1MCw2ICs5NTAsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqc3RyaXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKFJDVSkKIHsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcmV0dXJuICpwb3MgPyBzdHJpcF9nZXRfaWR4KCpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKQEAgLTk3Myw2ICs5NzQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzdHJpcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKFJDVSkKIHsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTExMjUsNyArMTEyNyw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdHJpcF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdHJpcF9zZXFfb3BzID0gewogCS5zdGFydCA9IHN0cmlwX3NlcV9zdGFydCwKIAkubmV4dCAgPSBzdHJpcF9zZXFfbmV4dCwKIAkuc3RvcCAgPSBzdHJpcF9zZXFfc3RvcCwKQEAgLTI0NzUsNiArMjQ3NywxNiBAQAogCS5yZWJ1aWxkID0gc3RyaXBfcmVidWlsZF9oZWFkZXIsCiB9OwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3RyaXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCT0gc3RyaXBfb3Blbl9sb3csCisJLm5kb19zdG9wIAk9IHN0cmlwX2Nsb3NlX2xvdywKKwkubmRvX3N0YXJ0X3htaXQgPSBzdHJpcF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gc3RyaXBfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZ2V0X3N0YXRzCT0gc3RyaXBfZ2V0X3N0YXRzLAorCS5uZG9fY2hhbmdlX210dSA9IHN0cmlwX2NoYW5nZV9tdHUsCit9OworCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSBEREkgd2hlbiB0aGUKICAqIChkeW5hbWljYWxseSBhc3NpZ25lZCkgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKQEAgLTI1MDEsMTggKzI1MTMsOCBAQAogCWRldi0+ZGV2X2FkZHJbMF0gPSAwOwogCWRldi0+YWRkcl9sZW4gPSBzaXplb2YoTWV0cmljb21BZGRyZXNzKTsKIAotCS8qCi0JICogUG9pbnRlcnMgdG8gaW50ZXJmYWNlIHNlcnZpY2Ugcm91dGluZXMuCi0JICovCi0KLQlkZXYtPm9wZW4gPSBzdHJpcF9vcGVuX2xvdzsKLQlkZXYtPnN0b3AgPSBzdHJpcF9jbG9zZV9sb3c7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdHJpcF94bWl0OwotCWRldi0+aGVhZGVyX29wcyA9ICZzdHJpcF9oZWFkZXJfb3BzOwotCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzdHJpcF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMgPSBzdHJpcF9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gc3RyaXBfY2hhbmdlX210dTsKKwlkZXYtPmhlYWRlcl9vcHMgPSAmc3RyaXBfaGVhZGVyX29wcywKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RyaXBfbmV0ZGV2X29wczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwppbmRleCA4MzI2NzkzLi5iNzI4NTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCkBAIC00MCwxMSArNDAsMTEgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgd3ZfcHNhX3RvX2lycSh1OCBpcnF2YWwpCiB7Ci0JaW50IGlycTsKKwlpbnQgaTsKIAotCWZvciAoaXJxID0gMDsgaXJxIDwgQVJSQVlfU0laRShpcnF2YWxzKTsgaXJxKyspCi0JCWlmIChpcnF2YWxzW2lycV0gPT0gaXJxdmFsKQotCQkJcmV0dXJuIGlycTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnF2YWxzKTsgaSsrKQorCQlpZiAoaXJxdmFsc1tpXSA9PSBpcnF2YWwpCisJCQlyZXR1cm4gaTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTQyODEsOCArNDI4MSw3IEBACiAKIAogCS8qIExvb3Agb24gYWxsIHBvc3NpYmxlIGJhc2UgYWRkcmVzc2VzLiAqLwotCWkgPSAtMTsKLQl3aGlsZSAoKGlvWysraV0gIT0gMCkgJiYgKGkgPCBBUlJBWV9TSVpFKGlvKSkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbykgJiYgaW9baV0gIT0gMDsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YobmV0X2xvY2FsKSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKaW5kZXggZGU3MTdmOC4uZTU1YjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwpAQCAtODM4LDkgKzgzOCw4IEBACiAgICAgfQogICB3aGlsZSgoKHN0YXR1cyAmIFNSM19FWEVDX1NUQVRFX01BU0spICE9IFNSM19FWEVDX0lETEUpICYmIChzcGluLS0gPiAwKSk7CiAKLSAgLyogSWYgdGhlIGludGVycnVwdCBoYXNuJ3QgYmUgcG9zdGVkICovCi0gIGlmKHNwaW4gPD0gMCkKLSAgICB7CisgIC8qIElmIHRoZSBpbnRlcnJ1cHQgaGFzbid0IGJlZW4gcG9zdGVkICovCisgIGlmIChzcGluIDwgMCkgewogI2lmZGVmIERFQlVHX0lOVEVSUlVQVF9FUlJPUgogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAid3ZfODI1OTNfY21kOiAlcyB0aW1lb3V0IChwcmV2aW91cyBjb21tYW5kKSwgc3RhdHVzIDB4JTAyeFxuIiwKIAkgICAgIHN0ciwgc3RhdHVzKTsKQEAgLTEzNTMsMjEgKzEzNTIsNiBAQAogICogb3Igd2lyZWxlc3MgZXh0ZW5zaW9ucwogICovCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgZXRoZXJuZXQgc3RhdGlzdGljcy4gVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlCi0gKiBjYXJkIG9wZW4gb3IgY2xvc2VkLgotICogVXNlZCB3aGVuIHRoZSB1c2VyIHJlYWQgL3Byb2MvbmV0L2RldgotICovCi1zdGF0aWMgZW5fc3RhdHMJKgotd2F2ZWxhbl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCi17Ci0jaWZkZWYgREVCVUdfSU9DVExfVFJBQ0UKLSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8PndhdmVsYW5fZ2V0X3N0YXRzKClcbiIsIGRldi0+bmFtZSk7Ci0jZW5kaWYKLQotICByZXR1cm4oJigobmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzKTsKLX0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKQEAgLTI4MTgsNyArMjgwMiw3IEBACiAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogd3ZfcGFja2V0X3JlYWQoKTogY291bGQgbm90IGFsbG9jX3NrYiglZCwgR0ZQX0FUT01JQylcbiIsCiAJICAgICBkZXYtPm5hbWUsIHNrc2l6ZSk7CiAjZW5kaWYKLSAgICAgIGxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisgICAgICBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKICAgICAgIC8qCiAgICAgICAgKiBOb3Qgb25seSBkbyB3ZSB3YW50IHRvIHJldHVybiBoZXJlLCBidXQgd2UgYWxzbyBuZWVkIHRvIGRyb3AgdGhlCiAgICAgICAgKiBwYWNrZXQgb24gdGhlIGZsb29yIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQuCkBAIC0yODc4LDggKzI4NjIsOCBAQAogICBuZXRpZl9yeChza2IpOwogCiAgIC8qIEtlZXAgc3RhdHMgdXAgdG8gZGF0ZSAqLwotICBscC0+c3RhdHMucnhfcGFja2V0cysrOwotICBscC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tzaXplOworICBkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKyAgZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza3NpemU7CiAKICNpZmRlZiBERUJVR19SWF9UUkFDRQogICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IDwtd3ZfcGFja2V0X3JlYWQoKVxuIiwgZGV2LT5uYW1lKTsKQEAgLTI5ODEsMTMgKzI5NjUsMTMgQEAKICAgICAgIC8qIENoZWNrIHN0YXR1cyAqLwogICAgICAgaWYoKHN0YXR1cyAmIFJYX1JDVl9PSykgIT0gUlhfUkNWX09LKQogCXsKLQkgIGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkgIGRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJICBpZihzdGF0dXMgJiBSWF9OT19TRkQpCi0JICAgIGxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkgIGlmKHN0YXR1cyAmIFJYX0NSQ19FUlIpCi0JICAgIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJICAgIGRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCSAgaWYoc3RhdHVzICYgUlhfT1ZSUlVOKQotCSAgICBscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkgICAgZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCiAjaWZkZWYgREVCVUdfUlhfRkFJTAogCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9wYWNrZXRfcmN2KCk6IHBhY2tldCBub3QgcmVjZWl2ZWQgb2ssIHN0YXR1cyA9IDB4JXhcbiIsCkBAIC0zMDc0LDcgKzMwNTgsNyBAQAogICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogICAvKiBLZWVwIHN0YXRzIHVwIHRvIGRhdGUgKi8KLSAgbHAtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKKyAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CiAKICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPnNwaW5sb2NrLCBmbGFncyk7CiAKQEAgLTQxMDcsNyArNDA5MSw3IEBACiAJICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHd2X2ludGVycnVwdCgpOiByZWNlaXZlIGJ1ZmZlciBvdmVyZmxvd1xuIiwKIAkJICAgICBkZXYtPm5hbWUpOwogI2VuZGlmCi0JICAgICAgbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJICAgICAgZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCSAgICAgIGxwLT5vdmVycnVubmluZyA9IDE7CiAgICAgICAJICAgIH0KIApAQCAtNDE1Niw3ICs0MTQwLDcgQEAKIAkgIC8qIENoZWNrIGZvciBwb3NzaWJsZSBlcnJvcnMgKi8KIAkgIGlmKCh0eF9zdGF0dXMgJiBUWF9PSykgIT0gVFhfT0spCiAJICAgIHsKLQkgICAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisJICAgICAgZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0ZSVEwpCiAJCXsKQEAgLTQxNzEsMTQgKzQxNTUsMTQgQEAKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2ludGVycnVwdCgpOiBETUEgdW5kZXJydW5cbiIsCiAJCQkgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkgIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0xPU1RfQ1RTKQogCQl7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogd3ZfaW50ZXJydXB0KCk6IG5vIENUU1xuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkgIGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJfQogCSAgICAgIGlmKHR4X3N0YXR1cyAmIFRYX0xPU1RfQ1JTKQogCQl7CkBAIC00MTg2LDE0ICs0MTcwLDE0IEBACiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogbm8gY2FycmllclxuIiwKIAkJCSBkZXYtPm5hbWUpOwogI2VuZGlmCi0JCSAgbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCSAgZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQl9CiAJICAgICAgaWYodHhfc3RhdHVzICYgVFhfSFJUX0JFQVQpCiAJCXsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3dl9pbnRlcnJ1cHQoKTogaGVhcnQgYmVhdFxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkgIGxwLT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCSAgZGV2LT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CiAJCX0KIAkgICAgICBpZih0eF9zdGF0dXMgJiBUWF9ERUZFUikKIAkJewpAQCAtNDIxNywxNCArNDIwMSwxNCBAQAogI2VuZGlmCiAJCSAgICAgIGlmKCEodHhfc3RhdHVzICYgVFhfTkNPTF9NQVNLKSkKIAkJCXsKLQkJCSAgbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gMHgxMDsKKwkJCSAgZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IDB4MTA7CiAJCQl9CiAJCSAgICB9CiAJCX0KIAkgICAgfQkvKiBpZighKHR4X3N0YXR1cyAmIFRYX09LKSkgKi8KIAotCSAgbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKHR4X3N0YXR1cyAmIFRYX05DT0xfTUFTSyk7Ci0JICBscC0+c3RhdHMudHhfcGFja2V0cysrOworCSAgZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgJiBUWF9OQ09MX01BU0spOworCSAgZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAKIAkgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkgIG91dGIoQ1IwX0lOVF9BQ0sgfCBPUDBfTk9QLCBMQ0NSKGJhc2UpKTsJLyogQWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLwpAQCAtNDQ1Miw2ICs0NDM2LDE5IEBACiAgIHJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdhdmVsYW5fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IHdhdmVsYW5fb3BlbiwKKwkubmRvX3N0b3AJCT0gd2F2ZWxhbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gd2F2ZWxhbl9wYWNrZXRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHdhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0LAorI2lmZGVmIFNFVF9NQUNfQUREUkVTUworCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3MsCisjZW5kaWYKKwkubmRvX3R4X3RpbWVvdXQJCT0gd2F2ZWxhbl93YXRjaGRvZywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogd2F2ZWxhbl9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtNDUxMiwxNyArNDUwOSw3IEBACiAgIGxwLT5kZXYgPSBkZXY7CiAKICAgLyogd2F2ZWxhbiBORVQzIGNhbGxiYWNrcyAqLwotICBkZXYtPm9wZW4gPSAmd2F2ZWxhbl9vcGVuOwotICBkZXYtPnN0b3AgPSAmd2F2ZWxhbl9jbG9zZTsKLSAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmd2F2ZWxhbl9wYWNrZXRfeG1pdDsKLSAgZGV2LT5nZXRfc3RhdHMgPSAmd2F2ZWxhbl9nZXRfc3RhdHM7Ci0gIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJndhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0OwotI2lmZGVmIFNFVF9NQUNfQUREUkVTUwotICBkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZ3YXZlbGFuX3NldF9tYWNfYWRkcmVzczsKLSNlbmRpZgkvKiBTRVRfTUFDX0FERFJFU1MgKi8KLQotICAvKiBTZXQgdGhlIHdhdGNoZG9nIHRpbWVyICovCi0gIGRldi0+dHhfdGltZW91dAk9ICZ3YXZlbGFuX3dhdGNoZG9nOworICBkZXYtPm5ldGRldl9vcHMgPSAmd2F2ZWxhbl9uZXRkZXZfb3BzOwogICBkZXYtPndhdGNoZG9nX3RpbWVvCT0gV0FUQ0hET0dfSklGRklFUzsKICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm9wcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKaW5kZXggNjI4MTkyZC4uNzA2ZmQzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCkBAIC01NzYsNyArNTc2LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTaG9ydGN1dHMgKi8KLXR5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJZW5fc3RhdHM7CiB0eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzCWl3X3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfcXVhbGl0eQlpd19xdWFsOwogdHlwZWRlZiBzdHJ1Y3QgaXdfZnJlcQkJaXdfZnJlcTsKQEAgLTU5Miw4ICs1OTEsNiBAQAogICogRm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UsIExpbnV4IGtlZXAgZGF0YSBpbiB0d28gc3RydWN0dXJlLiAiZGV2aWNlIgogICoga2VlcCB0aGUgZ2VuZXJpYyBkYXRhIChzYW1lIGZvcm1hdCBmb3IgZXZlcnlib2R5KSBhbmQgIm5ldF9sb2NhbCIga2VlcAogICogdGhlIGFkZGl0aW9uYWwgc3BlY2lmaWMgZGF0YS4KLSAqIE5vdGUgdGhhdCBzb21lIG9mIHRoaXMgc3BlY2lmaWMgZGF0YSBpcyBpbiBmYWN0IGdlbmVyaWMgKGVuX3N0YXRzLCBmb3IKLSAqIGV4YW1wbGUpLgogICovCiBzdHJ1Y3QgbmV0X2xvY2FsCiB7CkBAIC02MDEsNyArNTk4LDYgQEAKICAgc3RydWN0IG5ldF9kZXZpY2UgKglkZXY7CQkvKiBSZXZlcnNlIGxpbmsuLi4gKi8KICAgc3BpbmxvY2tfdAlzcGlubG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgKFNNUCkgKi8KICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKglsaW5rOwkJLyogcGNtY2lhIHN0cnVjdHVyZSAqLwotICBlbl9zdGF0cwlzdGF0czsJCS8qIEV0aGVybmV0IGludGVyZmFjZSBzdGF0aXN0aWNzICovCiAgIGludAkJbnJlc2V0czsJLyogTnVtYmVyIG9mIGh3IHJlc2V0cyAqLwogICB1X2NoYXIJY29uZmlndXJlZDsJLyogSWYgaXQgaXMgY29uZmlndXJlZCAqLwogICB1X2NoYXIJcmVjb25maWdfODI1OTM7CS8qIE5lZWQgdG8gcmVjb25maWd1cmUgdGhlIGNvbnRyb2xsZXIgKi8KQEAgLTY5NCw4ICs2OTAsNiBAQAogc3RhdGljIHZvaWQKIAl3dl9pbml0X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKik7CS8qIGRpc3BsYXkgc3RhcnR1cCBpbmZvICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIElPQ1RMLCBTVEFUUyAmIFJFQ09ORklHIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBlbl9zdGF0cwkqCi0Jd2F2ZWxhbl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CS8qIEdpdmUgc3RhdHMgL3Byb2MvbmV0L2RldiAqLwogc3RhdGljIGl3X3N0YXRzICoKIAl3YXZlbGFuX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBBQ0tFVCBSRUNFUFRJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmgKaW5kZXggNTliYjNhNS4uOGJjZTFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxLmgKQEAgLTYwNiw3ICs2MDYsNyBAQAogCXU4CQkJCXJlZ19kb21haW47CiAJdTgJCQkJdmVyc2lvblsyXTsKIAlzdHJ1Y3Qgd2wzNTAxX3NjYW5fY29uZmlybQlic3Nfc2V0WzIwXTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAJc3RhdHM7CisKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcwkJd3N0YXRzOwogCXN0cnVjdCBpd19zcHlfZGF0YQkJc3B5X2RhdGE7CiAJc3RydWN0IGl3X3B1YmxpY19kYXRhCQl3aXJlbGVzc19kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwppbmRleCBjOTlhMWI2Li4xZjY0ZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIApAQCAtMTExLDEyICsxMTIsNiBAQAogICovCiBzdGF0aWMgZGV2X2luZm9fdCB3bDM1MDFfZGV2X2luZm8gPSAid2wzNTAxX2NzIjsKIAotc3RhdGljIGludCB3bDM1MDFfY2hhbjJmcmVxW10gPSB7Ci0JWzBdICA9IDI0MTIsIFsxXSAgPSAyNDE3LCBbMl0gID0gMjQyMiwgWzNdICA9IDI0MjcsIFs0XSA9IDI0MzIsCi0JWzVdICA9IDI0MzcsIFs2XSAgPSAyNDQyLCBbN10gID0gMjQ0NywgWzhdICA9IDI0NTIsIFs5XSA9IDI0NTcsCi0JWzEwXSA9IDI0NjIsIFsxMV0gPSAyNDY3LCBbMTJdID0gMjQ3MiwgWzEzXSA9IDI0NzcsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAlpbnQgcmVnX2RvbWFpbjsKIAlpbnQgbWluLCBtYXgsIGRlZmx0OwpAQCAtMTAwNSw3ICsxMDAwLDcgQEAKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2MgYSBza19idWZmIG9mIHNpemUgJWQuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBwa3RfbGVuKTsKLQkJdGhpcy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAl9IGVsc2UgewogCQlza2ItPmRldiA9IGRldjsKIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsgLyogSVAgaGVhZGVycyBvbiAxNiBieXRlcyBib3VuZGFyaWVzICovCkBAIC0xMDEzLDggKzEwMDgsOCBAQAogCQl3bDM1MDFfcmVjZWl2ZSh0aGlzLCBza2ItPmRhdGEsIHBrdF9sZW4pOwogCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCXNrYi0+cHJvdG9jb2wJPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCXRoaXMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJdGhpcy0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQluZXRpZl9yeChza2IpOwogCX0KIH0KQEAgLTEzMTYsNyArMTMxMSw3IEBACiBzdGF0aWMgdm9pZCB3bDM1MDFfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnRoaXMtPnN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwogCkBAIC0xMzUxLDExICsxMzQ2LDExIEBACiAJaWYgKGVuYWJsZWQpCiAJCXdsMzUwMV91bmJsb2NrX2ludGVycnVwdCh0aGlzKTsKIAlpZiAocmMpIHsKLQkJKyt0aGlzLT5zdGF0cy50eF9kcm9wcGVkOworCQkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0gZWxzZSB7Ci0JCSsrdGhpcy0+c3RhdHMudHhfcGFja2V0czsKLQkJdGhpcy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlrZnJlZV9za2Ioc2tiKTsKIAogCQlpZiAodGhpcy0+dHhfYnVmZmVyX2NudCA8IDIpCkBAIC0xNDA1LDEzICsxNDAwLDYgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp3bDM1MDFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmdGhpcy0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd2wzNTAxX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xNTEwLDcgKzE0OTgsNyBAQAogewogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7CiAKLQl3cnF1LT5mcmVxLm0gPSB3bDM1MDFfY2hhbjJmcmVxW3RoaXMtPmNoYW4gLSAxXSAqIDEwMDAwMDsKKwl3cnF1LT5mcmVxLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEodGhpcy0+Y2hhbikgKiAxMDAwMDA7CiAJd3JxdS0+ZnJlcS5lID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4OTUsNiArMTg4MywxNiBAQAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSB3bDM1MDFfZ2V0X3dpcmVsZXNzX3N0YXRzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3bDM1MDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gd2wzNTAxX29wZW4sCisJLm5kb19zdG9wCQk9IHdsMzUwMV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gd2wzNTAxX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gd2wzNTAxX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKgogICogd2wzNTAxX2F0dGFjaCAtIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyCiAgKgpAQCAtMTkyNywxNyArMTkyNSwxNiBAQAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgd2wzNTAxX2NhcmQpKTsKIAlpZiAoIWRldikKIAkJZ290byBvdXRfbGluazsKLQlkZXYtPm9wZW4JCT0gd2wzNTAxX29wZW47Ci0JZGV2LT5zdG9wCQk9IHdsMzUwMV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHdsMzUwMV9oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IHdsMzUwMV90eF90aW1lb3V0OworCisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJndsMzUwMV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSA1ICogSFo7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gd2wzNTAxX2dldF9zdGF0czsKKwogCXRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXRoaXMtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmdGhpcy0+c3B5X2RhdGE7CiAJdGhpcy0+cF9kZXYgPSBwX2RldjsKIAlkZXYtPndpcmVsZXNzX2RhdGEJPSAmdGhpcy0+d2lyZWxlc3NfZGF0YTsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzCT0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZ3bDM1MDFfaGFuZGxlcl9kZWY7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycwk9ICZ3bDM1MDFfaGFuZGxlcl9kZWY7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm9wcyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXBfZGV2LT5wcml2ID0gcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKaW5kZXggYjQ1YzI3ZC4uOWIyNDRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKQEAgLTMyOCw4ICszMjgsOCBAQAogCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwgJmRhdGFbZGF0YWxlbi0yNF0sIDIpOwogCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhLCBsZW4pOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7Ci0JCQl6ZC0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJemQtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJemQtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJemQtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCQluZXRpZl9yeChza2IpOwogCQkJZ290byByZXN1Ym1pdDsKIAkJfQpAQCAtMzg0LDggKzM4NCw4IEBACiAJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGErOCwgbGVuKTsKIAkJfQogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB6ZC0+ZGV2KTsKLQkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJemQtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQl6ZC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCXpkLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQluZXRpZl9yeChza2IpOwogCX0KIHJlc3VibWl0OgpAQCAtNzg3LDcgKzc4Nyw3IEBACiAJc3RydWN0IHVyYiAqdXJiID0gemQtPnR4X3VyYjsKIAogCWlmICghemQtPm1hY19lbmFibGVkIHx8IHpkLT5tb25pdG9yKSB7Ci0JCXpkLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODE3LDEyICs4MTcsMTIgQEAKIAogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHpkLT50eF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChlcnIpIHsKLQkJemQtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KLQl6ZC0+c3RhdHMudHhfcGFja2V0cysrOwotCXpkLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWtmcmVlX3NrYihza2IpOwogCkBAIC04MzgsNyArODM4LDcgQEAKIAlkZXZfd2FybigmemQtPnVzYi0+ZGV2LCAiJXM6IFRYIHRpbWVvdXQsIHNob290aW5nIGRvd24gdXJiXG4iLAogCSAgICBkZXYtPm5hbWUpOwogCXVzYl91bmxpbmtfdXJiKHpkLT50eF91cmIpOwotCXpkLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCS8qIFJlc3RhcnQgdGhlIHRpbWVvdXQgdG8gcXVpZXQgdGhlIHdhdGNoZG9nOiAqLwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogfQpAQCAtODYxLDEzICs4NjEsNiBAQAogCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp6ZDEyMDFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHpkMTIwMSAqemQgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZ6ZC0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqemQxMjAxX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB6ZDEyMDEgKnpkID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTkxOSwxMCArOTEyLDkgQEAKIAlpZiAoZnJlcS0+ZSA9PSAwKQogCQljaGFubmVsID0gZnJlcS0+bTsKIAllbHNlIHsKLQkJaWYgKGZyZXEtPm0gPj0gMjQ4MikKLQkJCWNoYW5uZWwgPSAxNDsKLQkJaWYgKGZyZXEtPm0gPj0gMjQwNykKLQkJCWNoYW5uZWwgPSAoZnJlcS0+bS0yNDA3KS81OworCQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGZyZXEtPm0pOworCQlpZiAoY2hhbm5lbCA8IDApCisJCQljaGFubmVsID0gMDsKIAl9CiAKIAllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GT1dOQ0hBTk5FTCwgY2hhbm5lbCk7CkBAIC0xNzI1LDYgKzE3MTcsMTggQEAKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzCT0gemQxMjAxX2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgemQxMjAxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHpkMTIwMV9uZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gemQxMjAxX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB6ZDEyMDFfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB6ZDEyMDFfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gemQxMjAxX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCB6ZDEyMDFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTE3NzcsMTYgKzE3ODEsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3N0YXJ0OwogCi0JZGV2LT5vcGVuID0gemQxMjAxX25ldF9vcGVuOwotCWRldi0+c3RvcCA9IHpkMTIwMV9uZXRfc3RvcDsKLQlkZXYtPmdldF9zdGF0cyA9IHpkMTIwMV9nZXRfc3RhdHM7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9Ci0JICAgIChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmemQxMjAxX2l3X2hhbmRsZXJzOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gemQxMjAxX2hhcmRfc3RhcnRfeG1pdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmemQxMjAxX25ldGRldl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZ6ZDEyMDFfaXdfaGFuZGxlcnM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFpEMTIwMV9UWF9USU1FT1VUOwotCWRldi0+dHhfdGltZW91dCA9IHpkMTIwMV90eF90aW1lb3V0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gemQxMjAxX3NldF9tdWx0aWNhc3Q7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB6ZDEyMDFfc2V0X21hY19hZGRyZXNzOwogCXN0cmNweShkZXYtPm5hbWUsICJ3bGFuJWQiKTsKIAogCWVyciA9IHpkMTIwMV9nZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GT1dOTUFDQUREUiwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5oCmluZGV4IDIzNWYwZWUuLmRkN2VhMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5oCkBAIC0yNiw3ICsyNiw2IEBACiAJc3RydWN0IHVzYl9kZXZpY2UJKnVzYjsKIAlpbnQJCQlyZW1vdmVkOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IGl3X3N0YXRpc3RpY3MJaXdzdGF0czsKIAogCWludAkJCWVuZHBfaW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKaW5kZXggZjE1MTkxNC4uMmM4MTNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwpAQCAtMTYxNiwzICsxNjE2LDI0IEBACiAKIAlyZXR1cm4gemRfaW93cml0ZTMyYShjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CiB9CisKK3U2NCB6ZF9jaGlwX2dldF90c2Yoc3RydWN0IHpkX2NoaXAgKmNoaXApCit7CisJaW50IHI7CisJc3RhdGljIGNvbnN0IHpkX2FkZHJfdCBhd19wdF9iaV9hZGRyW10gPQorCQl7IENSX1RTRl9MT1dfUEFSVCwgQ1JfVFNGX0hJR0hfUEFSVCB9OworCXUzMiB2YWx1ZXNbMl07CisJdTY0IHRzZjsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwlyID0gemRfaW9yZWFkMzJ2X2xvY2tlZChjaGlwLCB2YWx1ZXMsIChjb25zdCB6ZF9hZGRyX3QgKilhd19wdF9iaV9hZGRyLAorCSAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoYXdfcHRfYmlfYWRkcikpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCWlmIChyKQorCQlyZXR1cm4gMDsKKworCXRzZiA9IHZhbHVlc1sxXTsKKwl0c2YgPSAodHNmIDw8IDMyKSB8IHZhbHVlc1swXTsKKworCXJldHVybiB0c2Y7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKaW5kZXggZjhjMDYxYS4uZWU0Mjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaApAQCAtOTUwLDQgKzk1MCw2IEBACiBpbnQgemRfY2hpcF9zZXRfbXVsdGljYXN0X2hhc2goc3RydWN0IHpkX2NoaXAgKmNoaXAsCiAJICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgemRfbWNfaGFzaCAqaGFzaCk7CiAKK3U2NCB6ZF9jaGlwX2dldF90c2Yoc3RydWN0IHpkX2NoaXAgKmNoaXApOworCiAjZW5kaWYgLyogX1pEX0NISVBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9kZWYuaAppbmRleCA1MjAwZGI0Li42YWM1OTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9kZWYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9kZWYuaApAQCAtMzMsOCArMzMsMTMgQEAKICNpZmRlZiBERUJVRwogIyAgZGVmaW5lIGRldl9kYmdfZihkZXYsIGZtdCwgYXJncy4uLikgXAogCSAgZGV2X3ByaW50a19mKEtFUk5fREVCVUcsIGRldiwgZm10LCAjIyBhcmdzKQorIyAgZGVmaW5lIGRldl9kYmdfZl9saW1pdChkZXYsIGZtdCwgYXJncy4uLikgZG8geyBcCisJaWYgKG5ldF9yYXRlbGltaXQoKSkgXAorCQlkZXZfcHJpbnRrX2YoS0VSTl9ERUJVRywgZGV2LCBmbXQsICMjIGFyZ3MpOyBcCit9IHdoaWxlICgwKQogI2Vsc2UKICMgIGRlZmluZSBkZXZfZGJnX2YoZGV2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgKHZvaWQpKGRldik7IH0gd2hpbGUgKDApCisjICBkZWZpbmUgZGV2X2RiZ19mX2xpbWl0KGRldiwgZm10LCBhcmdzLi4uKSBkbyB7ICh2b2lkKShkZXYpOyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIERFQlVHICovCiAKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwppbmRleCA4NDcwNTdkLi5jM2E1MTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwpAQCAtMTcwLDEwICsxNzAsMTAgQEAKIAkJZ290byBkaXNhYmxlX2ludDsKIAogCXIgPSB6ZF9yZWcyYWxwaGEyKG1hYy0+cmVnZG9tYWluLCBhbHBoYTIpOwotCWlmICghcikKLQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgYWxwaGEyKTsKKwlpZiAocikKKwkJZ290byBkaXNhYmxlX2ludDsKIAotCXIgPSAwOworCXIgPSByZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBhbHBoYTIpOwogZGlzYWJsZV9pbnQ6CiAJemRfY2hpcF9kaXNhYmxlX2ludChjaGlwKTsKIG91dDoKQEAgLTc3MiwxMyArNzcyLDIzIEBACiAJCQlpZiAoIWJlYWNvbikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCXIgPSB6ZF9tYWNfY29uZmlnX2JlYWNvbihodywgYmVhY29uKTsKLQkJCWlmIChyIDwgMCkKLQkJCQlyZXR1cm4gcjsKLQkJCXIgPSB6ZF9zZXRfYmVhY29uX2ludGVydmFsKCZtYWMtPmNoaXAsIEJDTl9NT0RFX0lCU1MgfAotCQkJCQlody0+Y29uZi5iZWFjb25faW50KTsKLQkJCWlmIChyIDwgMCkKLQkJCQlyZXR1cm4gcjsKIAkJCWtmcmVlX3NrYihiZWFjb24pOworCisJCQlpZiAociA8IDApCisJCQkJcmV0dXJuIHI7CisJCX0KKworCQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSB7CisJCQl1MzIgaW50ZXJ2YWw7CisKKwkJCWlmIChjb25mLT5lbmFibGVfYmVhY29uKQorCQkJCWludGVydmFsID0gQkNOX01PREVfSUJTUyB8IGh3LT5jb25mLmJlYWNvbl9pbnQ7CisJCQllbHNlCisJCQkJaW50ZXJ2YWwgPSAwOworCisJCQlyID0gemRfc2V0X2JlYWNvbl9pbnRlcnZhbCgmbWFjLT5jaGlwLCBpbnRlcnZhbCk7CisJCQlpZiAociA8IDApCisJCQkJcmV0dXJuIHI7CiAJCX0KIAl9IGVsc2UKIAkJYXNzb2NpYXRlZCA9IGlzX3ZhbGlkX2V0aGVyX2FkZHIoY29uZi0+YnNzaWQpOwpAQCAtNzk3LDEwICs4MDcsOSBAQAogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemRfbWFjLCBwcm9jZXNzX2ludHIpOwogCiAJaW50X3N0YXR1cyA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopKG1hYy0+aW50cl9idWZmZXIrNCkpOwotCWlmIChpbnRfc3RhdHVzICYgSU5UX0NGR19ORVhUX0JDTikgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIklOVF9DRkdfTkVYVF9CQ05cbiIpOwotCX0gZWxzZQorCWlmIChpbnRfc3RhdHVzICYgSU5UX0NGR19ORVhUX0JDTikKKwkJZGV2X2RiZ19mX2xpbWl0KHpkX21hY19kZXYobWFjKSwgIklOVF9DRkdfTkVYVF9CQ05cbiIpOworCWVsc2UKIAkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIlVuc3VwcG9ydGVkIGludGVycnVwdFxuIik7CiAKIAl6ZF9jaGlwX2VuYWJsZV9od2ludCgmbWFjLT5jaGlwKTsKQEAgLTkzMCw2ICs5MzksMTIgQEAKIAl9CiB9CiAKK3N0YXRpYyB1NjQgemRfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOworCXJldHVybiB6ZF9jaGlwX2dldF90c2YoJm1hYy0+Y2hpcCk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB6ZF9vcHMgPSB7CiAJLnR4CQkJPSB6ZF9vcF90eCwKIAkuc3RhcnQJCQk9IHpkX29wX3N0YXJ0LApAQCAtOTQwLDYgKzk1NSw3IEBACiAJLmNvbmZpZ19pbnRlcmZhY2UJPSB6ZF9vcF9jb25maWdfaW50ZXJmYWNlLAogCS5jb25maWd1cmVfZmlsdGVyCT0gemRfb3BfY29uZmlndXJlX2ZpbHRlciwKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHpkX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLmdldF90c2YJCT0gemRfb3BfZ2V0X3RzZiwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnpkX21hY19hbGxvY19odyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTk3MSw3ICs5ODcsNyBAQAogCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmbWFjLT5iYW5kOwogCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCOworCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUM7CiAKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IGNkNjE4NGUuLjlmMTAyYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IG5ldGZyb250X3R4X3Nsb3RfYXZhaWxhYmxlKHN0cnVjdCBuZXRmcm9udF9pbmZvICpucCkKQEAgLTMyOCw3ICszMjgsNyBAQAogCQl4ZW5uZXRfYWxsb2NfcnhfYnVmZmVycyhkZXYpOwogCQlucC0+cnguc3JpbmctPnJzcF9ldmVudCA9IG5wLT5yeC5yc3BfY29ucyArIDE7CiAJCWlmIChSSU5HX0hBU19VTkNPTlNVTUVEX1JFU1BPTlNFUygmbnAtPnJ4KSkKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZucC0+cnhfbG9jayk7CiAKQEAgLTk3OSw3ICs5NzksNyBAQAogCiAJCVJJTkdfRklOQUxfQ0hFQ0tfRk9SX1JFU1BPTlNFUygmbnAtPnJ4LCBtb3JlX3RvX2RvKTsKIAkJaWYgKCFtb3JlX3RvX2RvKQotCQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQpAQCAtMTMxNyw3ICsxMzE3LDcgQEAKIAkJeGVubmV0X3R4X2J1Zl9nYyhkZXYpOwogCQkvKiBVbmRlciB0eF9sb2NrOiBwcm90ZWN0cyBhY2Nlc3MgdG8gcnggc2hhcmVkLXJpbmcgaW5kZXhlcy4gKi8KIAkJaWYgKFJJTkdfSEFTX1VOQ09OU1VNRURfUkVTUE9OU0VTKCZucC0+cngpKQotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+dHhfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveHRzb25pYy5jIGIvZHJpdmVycy9uZXQveHRzb25pYy5jCmluZGV4IDAzYTNmMzQuLmExMmE3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3h0c29uaWMuYworKysgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCiAJaWYgKGxwLT5kZXNjcmlwdG9ycyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yICIKLQkJCQkiIGRlc2NyaXB0b3JzLlxuIiwgbHAtPmRldmljZS0+YnVzX2lkKTsKKwkJCQkiIGRlc2NyaXB0b3JzLlxuIiwgZGV2X25hbWUobHAtPmRldmljZSkpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKaW5kZXggMmYxNjQ1ZC4uNzQ3N2ZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKKysrIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKQEAgLTEwNyw5ICsxMDcsOSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4wNSAgMS8wOS8yMDAxICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCi1LRVJOX0lORk8gIiAgKHVub2ZmaWNpYWwgMi40LnggcG9ydCwgIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKyAgS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4wNSAgMS8wOS8yMDAxICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCisgIEtFUk5fSU5GTyAiICAodW5vZmZpY2lhbCAyLjQueCBwb3J0LCAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBhY2tldCBFbmdpbmVzIFllbGxvd2ZpbiBHLU5JQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvem5ldC5jIGIvZHJpdmVycy9uZXQvem5ldC5jCmluZGV4IGYwYjE1YzkuLjBhNjk5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3puZXQuYworKysgYi9kcml2ZXJzL25ldC96bmV0LmMKQEAgLTM1OCw2ICszNTgsMTcgQEAKIAkgKiBtdWx0aWNhc3QgYWRkcmVzcyBjb25maWd1cmVkIGlzbid0IGVxdWFsIHRvIElGRl9BTExNVUxUSSAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gem5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB6bmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB6bmV0X3NlbmRfcGFja2V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gem5ldF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IHpuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyogVGhlIFotTm90ZSBwcm9iZSBpcyBwcmV0dHkgZWFzeS4gIFRoZSBORVRJREJMSyBleGlzdHMgaW4gdGhlIHNhZmUtdG8tcHJvYmUKICAgIEJJT1MgYXJlYS4gIFdlIGp1c3Qgc2NhbiBmb3IgdGhlIHNpZ25hdHVyZSwgYW5kIHB1bGwgdGhlIHZpdGFsIHBhcmFtZXRlcnMKICAgIG91dCBvZiB0aGUgc3RydWN0dXJlLiAqLwpAQCAtNDQwLDExICs0NTEsNyBAQAogCXpuZXQtPnR4X2VuZCA9IHpuZXQtPnR4X3N0YXJ0ICsgem5ldC0+dHhfYnVmX2xlbjsKIAogCS8qIFRoZSBaTkVULXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJnpuZXRfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ6bmV0X3NlbmRfcGFja2V0OwotCWRldi0+c3RvcCA9ICZ6bmV0X2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnpuZXRfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IHpuZXRfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmem5ldF9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYwppbmRleCBhMTNhYmY1Li44NDUwZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKQEAgLTIyNSw3ICsyMjUsOCBAQAogCiB2b2lkIGNwcWhwX2NyZWF0ZV9kZWJ1Z2ZzX2ZpbGVzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCWN0cmwtPmRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoY3RybC0+cGNpX2Rldi0+ZGV2LmJ1c19pZCwgU19JUlVHTywgcm9vdCwgY3RybCwgJmRlYnVnX29wcyk7CisJY3RybC0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShkZXZfbmFtZSgmY3RybC0+cGNpX2Rldi0+ZGV2KSwKKwkJCQkJICAgU19JUlVHTywgcm9vdCwgY3RybCwgJmRlYnVnX29wcyk7CiB9CiAKIHZvaWQgY3BxaHBfcmVtb3ZlX2RlYnVnZnNfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA0NWVmZmM1Li5iNzIxYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAl1OCAgaXJ0ZV9tYXNrOwogfTsKIAotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIHN0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmdldF9vbmVfZnJlZV9pcnFfMl9pb21tdShpbnQgY3B1KQogewogCXN0cnVjdCBpcnFfMl9pb21tdSAqaW9tbXU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwppbmRleCBmYzFkZTQ2Li45MDAxMzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKQEAgLTQ2OCwxMyArNDY4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGF1MXgwMF9kcnZfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJnBjbWNpYV9zb2NrZXRzX2xvY2spOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2luZm8tPm5za3Q7IGkrKykgewogCQlzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCA9IFBDTUNJQV9TT0NLRVQoaSk7CkBAIC00OTgsMTMgKzQ5OCwxMyBAQAogICogUENNQ0lBICJEcml2ZXIiIEFQSQogICovCiAKLXN0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGksIHJldCA9IC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZwY21jaWFfc29ja2V0c19sb2NrKTsKIAlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUoYXUxeDAwX3BjbWNpYV9od19pbml0KTsgaSsrKSB7Ci0JCXJldCA9IGF1MXgwMF9wY21jaWFfaHdfaW5pdFtpXShkZXYpOworCQlyZXQgPSBhdTF4MDBfcGNtY2lhX2h3X2luaXRbaV0oJmRldi0+ZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtNTEyLDE0ICs1MTIsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxeDAwX3BjbWNpYV9kcml2ZXIgPSB7CitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTF4MDBfcGNtY2lhX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxeDAwLXBjbWNpYSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZSwKIAkucmVtb3ZlCQk9IGF1MXgwMF9kcnZfcGNtY2lhX3JlbW92ZSwKLQkubmFtZQkJPSAiYXUxeDAwLXBjbWNpYSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQJPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorCS5zdXNwZW5kIAk9IGF1MXgwMF9kcnZfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSAJPSBhdTF4MDBfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiAKQEAgLTUzMyw4ICs1NDUsNyBAQAogc3RhdGljIGludCBfX2luaXQgYXUxeDAwX3BjbWNpYV9pbml0KHZvaWQpCiB7CiAJaW50IGVycm9yID0gMDsKLQlpZiAoKGVycm9yID0gZHJpdmVyX3JlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcikpKQotCQlyZXR1cm4gZXJyb3I7CisJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTU0NCw3ICs1NTUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXUxeDAwX3BjbWNpYV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhdTF4MDBfcGNtY2lhX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCA3MTY1M2FiLi40MGQ0OTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtMTIzOCw2ICsxMjM4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaTgyMzY1X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgaTgyMzY1X2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiBzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIHBjaWNfb3BlcmF0aW9ucyA9IHsKIAkuaW5pdAkJCT0gcGNpY19pbml0LAogCS5nZXRfc3RhdHVzCQk9IHBjaWNfZ2V0X3N0YXR1cywKQEAgLTEyNDgsMTEgKzEyNTgsMTMgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpODIzNjVfZHJpdmVyID0gewotCS5uYW1lID0gImk4MjM2NSIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZSA9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGk4MjM2NV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaTgyMzY1IiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gaTgyMzY1X2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGk4MjM2NV9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppODIzNjVfZGV2aWNlOwpAQCAtMTI2MSw3ICsxMjczLDcgQEAKIHsKICAgICBpbnQgaSwgcmV0OwogCi0gICAgcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKKyAgICByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogICAgIGlmIChyZXQpCiAJZ290byBlcnJfb3V0OwogCkBAIC0xMzM3LDcgKzEzNDksNyBAQAogCXBucF9kaXNhYmxlX2RldihpODIzNjVfcG5wZGV2KTsKICNlbmRpZgogZXJyX2RyaXZlcl91bnJlZ2lzdGVyOgotICAgIGRyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKKyAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiBlcnJfb3V0OgogICAgIHJldHVybiByZXQ7CiB9IC8qIGluaXRfaTgyMzY1ICovCkBAIC0xMzY1LDcgKzEzNzcsNyBAQAogICAgIGlmIChpODIzNjVfcG5wZGV2KQogICAgIAkJcG5wX2Rpc2FibGVfZGV2KGk4MjM2NV9wbnBkZXYpOwogI2VuZGlmCi0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIH0gLyogZXhpdF9pODIzNjUgKi8KIAogbW9kdWxlX2luaXQoaW5pdF9pODIzNjUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggMmFiNGYyMi4uNjJiNGVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCkBAIC02OTYsMTMgKzY5NiwyNSBAQAogCS5zZXRfbWVtX21hcAkJPSBwY2Nfc2V0X21lbV9tYXAsCiB9OwogCitzdGF0aWMgaW50IGNmY19kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IGNmY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBwY2NfZHJpdmVyID0gewotCS5uYW1lID0gImNmYyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZSA9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBjY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImNmYyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kIAk9IGNmY19kcnZfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSAJPSBjZmNfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY2NfZGV2aWNlID0gewpAQCAtNzE2LDEzICs3MjgsMTMgQEAKIHsKIAlpbnQgaSwgcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjY19kZXZpY2UpOwogCWlmIChyZXQpewotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTc1NCw3ICs3NjYsNyBAQAogCWlmIChwY2Nfc29ja2V0cyA9PSAwKSB7CiAJCXByaW50aygic29ja2V0IGlzIG5vdCBmb3VuZC5cbiIpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmcGNjX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTgwMiw3ICs4MTQsNyBAQAogCWlmIChwb2xsX2ludGVydmFsICE9IDApCiAJCWRlbF90aW1lcl9zeW5jKCZwb2xsX3RpbWVyKTsKIAotCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiB9IC8qIGV4aXRfbTMycl9wY2MgKi8KIAogbW9kdWxlX2luaXQoaW5pdF9tMzJyX3BjYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwppbmRleCAyZjEwOGMyLi4xMjAzNGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKQEAgLTY3MiwxMyArNjcyLDI1IEBACiAJLnNldF9tZW1fbWFwCQk9IHBjY19zZXRfbWVtX21hcCwKIH07CiAKK3N0YXRpYyBpbnQgcGNjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGNjX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBjY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAicGNjIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAicGNjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gcGNjX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHBjY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjY19kZXZpY2UgPSB7CkBAIC02OTIsMTMgKzcwNCwxMyBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNjX2RldmljZSk7CiAJaWYgKHJldCl7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzE1LDcgKzcyNyw3IEBACiAJaWYgKHBjY19zb2NrZXRzID09IDApIHsKIAkJcHJpbnRrKCJzb2NrZXQgaXMgbm90IGZvdW5kLlxuIik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzYzLDcgKzc3NSw3IEBACiAJaWYgKHBvbGxfaW50ZXJ2YWwgIT0gMCkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfdGltZXIpOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIH0gLyogZXhpdF9tMzJyX3BjYyAqLwogCiBtb2R1bGVfaW5pdChpbml0X20zMnJfcGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCmluZGV4IGMwZTJhZmMuLmU1OTJlMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gbWFrZV9yZXNvdXJjZSgwLCBudW0sIElPUkVTT1VSQ0VfSU8sCi0JCQkJCSAgICAgcy0+ZGV2LmJ1c19pZCk7CisJCQkJCSAgICAgZGV2X25hbWUoJnMtPmRldikpOwogCXN0cnVjdCBwY21jaWFfYWxpZ25fZGF0YSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgbWluID0gYmFzZTsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKaW5kZXggYzViMmE0NC4uZDhkYTVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCkBAIC02NSw3ICs2NSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGksIHJldCA9IC1FTk9ERVY7CiAKQEAgLTczLDcgKzczLDcgQEAKIAkgKiBJbml0aWFsaXNlIGFueSAib24tYm9hcmQiIFBDTUNJQSBzb2NrZXRzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhMTF4MF9wY21jaWFfaHdfaW5pdCk7IGkrKykgewotCQlyZXQgPSBzYTExeDBfcGNtY2lhX2h3X2luaXRbaV0oZGV2KTsKKwkJcmV0ID0gc2ExMXgwX3BjbWNpYV9od19pbml0W2ldKCZkZXYtPmRldik7CiAJCWlmIChyZXQgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTgxLDEzICs4MSwzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExeDBfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExeDBfcGNtY2lhX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUsCi0JLm5hbWUJCT0gInNhMTF4MC1wY21jaWEiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kIAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZSAJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCisJLnJlbW92ZQkJPSBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUsCisJLnN1c3BlbmQgCT0gc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHNhMTF4MF9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIC8qIHNhMTF4MF9wY21jaWFfaW5pdCgpCkBAIC0xMDAsNyArMTE4LDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgc2ExMXgwX3BjbWNpYV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTF4MF9wY21jaWFfZHJpdmVyKTsKIH0KIAogLyogc2ExMXgwX3BjbWNpYV9leGl0KCkKQEAgLTExMCw3ICsxMjgsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2ExMXgwX3BjbWNpYV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4MF9wY21jaWFfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJKb2huIERvcnNleSA8am9obitAY3MuY211LmVkdT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwppbmRleCAyYTYxM2U5Li45YWQ5N2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCkBAIC0zNjMsMTMgKzM2MywyNSBAQAogICAgIHJldHVybiBpZDsKIH0KIAorc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgdGNpY19kcnZfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB0Y2ljX2RyaXZlciA9IHsKLQkubmFtZSA9ICJ0Y2ljLXBjbWNpYSIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZSA9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRjaWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRjaWMtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gdGNpY19kcnZfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSAJPSB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGNpY19kZXZpY2UgPSB7CkBAIC0zODMsNyArMzk1LDcgQEAKICAgICBpbnQgaSwgc29jaywgcmV0ID0gMDsKICAgICB1X2ludCBtYXNrLCBzY2FuOwogCi0gICAgaWYgKGRyaXZlcl9yZWdpc3RlcigmdGNpY19kcml2ZXIpKQorICAgIGlmIChwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRjaWNfZHJpdmVyKSkKIAlyZXR1cm4gLTE7CiAgICAgCiAgICAgcHJpbnRrKEtFUk5fSU5GTyAiRGF0YWJvb2sgVENJQy0yIFBDTUNJQSBwcm9iZTogIik7CkBAIC0zOTEsNyArNDAzLDcgQEAKIAogICAgIGlmICghcmVxdWVzdF9yZWdpb24odGNpY19iYXNlLCAxNiwgInRjaWMtMiIpKSB7CiAJcHJpbnRrKCJjb3VsZCBub3QgYWxsb2NhdGUgcG9ydHMsXG4gIik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTQxNCw3ICs0MjYsNyBAQAogICAgIGlmIChzb2NrID09IDApIHsKIAlwcmludGsoIm5vdCBmb3VuZC5cbiIpOwogCXJlbGVhc2VfcmVnaW9uKHRjaWNfYmFzZSwgMTYpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9CiAKQEAgLTU0Miw3ICs1NTQsNyBAQAogICAgIH0KIAogICAgIHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ0Y2ljX2RldmljZSk7Ci0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKyAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogfSAvKiBleGl0X3RjaWMgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCmluZGV4IGIyYzQxMjQuLjY1OTQyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCkBAIC03MDQsMjQgKzcwNCwzNyBAQAogCiBfX3NldHVwKCJ2cmM0MTcxX2NhcmQ9IiwgdnJjNDE3MV9jYXJkX3NldHVwKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHZyYzQxNzFfY2FyZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gdnJjNDE3MV9jYXJkX25hbWUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQJPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIGludCB2cmM0MTcxX2NhcmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgdnJjNDE3MV9jYXJkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cmM0MTcxX2NhcmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IHZyYzQxNzFfY2FyZF9uYW1lLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZAk9IHZyYzQxNzFfY2FyZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdnJjNDE3MV9jYXJkX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyYzQxNzFfY2FyZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAogCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7CiAJaWYgKHJldHZhbCA8IDApIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC03MzUsMTEgKzc0OCwxMiBAQAogCWlmIChyZXR2YWwgPCAwKSB7CiAJCXZyYzQxNzFfcmVtb3ZlX3NvY2tldHMoKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcywgY29ubmVjdGVkIHRvIElSUSAlZFxuIiwgdnJjNDE3MV9jYXJkX2RyaXZlci5uYW1lLCB2cmM0MTcxX2lycSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMsIGNvbm5lY3RlZCB0byBJUlEgJWRcbiIsCisJCXZyYzQxNzFfY2FyZF9kcml2ZXIuZHJpdmVyLm5hbWUsIHZyYzQxNzFfaXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzQ5LDcgKzc2Myw3IEBACiAJZnJlZV9pcnEodnJjNDE3MV9pcnEsIHZyYzQxNzFfc29ja2V0cyk7CiAJdnJjNDE3MV9yZW1vdmVfc29ja2V0cygpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh2cmM0MTcxX2NhcmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCA1Mzc5NTlkLi5iYzg5OTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTE5MTcsMTIgKzE5MTcsNyBAQAogCiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2NvbXBhdC5maWZvX2FzeW5jKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMpOwogfQogCiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYwppbmRleCBhZGRiODdjLi4zMjIyZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZSByaW9fYnVzID0gewotCS5idXNfaWQgPSAicmFwaWRpbyIsCisJLmluaXRfbmFtZSA9ICJyYXBpZGlvIiwKIH07CiAKIHN0cnVjdCBidXNfdHlwZSByaW9fYnVzX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCmluZGV4IGQ1ZTRlNjMuLjg2YzYxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkvKiByZWdpc3RlciBpcnEgaGFuZGxlciBhZnRlciB3ZSBrbm93IHdoYXQgbmFtZSB3ZSdsbCB1c2UgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShBVDkxX0lEX1NZUywgYXQ5MV9ydGNfaW50ZXJydXB0LAogCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJCQlydGMtPnJ0Y2Rldi0+ZGV2LmJ1c19pZCwgcnRjKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5ydGNkZXYtPmRldiksIHJ0Yyk7CiAJaWYgKHJldCkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBzaGFyZSBJUlEgJWQ/XG4iLCBBVDkxX0lEX1NZUyk7CiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMtPnJ0Y2Rldik7CkBAIC0zNjYsNyArMzY2LDcgQEAKIAogCWlmIChncGJyX3JlYWRsKHJ0YykgPT0gMCkKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiVzOiBTRVQgVElNRSFcbiIsCi0JCQkJcnRjLT5ydGNkZXYtPmRldi5idXNfaWQpOworCQkJCWRldl9uYW1lKCZydGMtPnJ0Y2Rldi0+ZGV2KSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggMmNiZWIwNy4uYmQxY2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC0zNzcsMTMgKzM3NywxMyBAQAogCiAJLyogaGFuZGxlIHBlcmlvZGljIGFuZCBhbGFybSBpcnFzICovCiAJaWYgKHJlcXVlc3RfaXJxKG9tYXBfcnRjX3RpbWVyLCBydGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpKSB7CisJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIHRpbWVyIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y190aW1lcik7CiAJCWdvdG8gZmFpbDA7CiAJfQogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y19hbGFybSwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKSkgeworCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyBhbGFybSBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAogCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfYWxhcm0pOwogCQlnb3RvIGZhaWwxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAxYzNmYzZiLi40ODk4ZjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9ydGMuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2gtcnRjIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yLjAiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMSIKIAogI2RlZmluZSBSVENfUkVHKHIpCSgocikgKiBydGNfcmVnX3NpemUpCiAKQEAgLTk5LDU2ICs5OSw1MSBAQAogCXVuc2lnbmVkIHNob3J0IHBlcmlvZGljX2ZyZXE7CiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IF9fc2hfcnRjX2ludGVycnVwdChzdHJ1Y3Qgc2hfcnRjICpydGMpCiB7Ci0Jc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IxX0NGOwogCXRtcCAmPSB+UkNSMV9DRjsKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKIAogCS8qIFVzZXJzIGhhdmUgcmVxdWVzdGVkIE9uZSB4IFNlY29uZCBJUlEgKi8KLQlpZiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKQorCWlmIChwZW5kaW5nICYmIHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykKIAkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfVUYgfCBSVENfSVJRRik7CiAKLQlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gcGVuZGluZzsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19hbGFybShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IF9fc2hfcnRjX2FsYXJtKHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisJcGVuZGluZyA9IHRtcCAmIFJDUjFfQUY7CiAJdG1wICY9IH4oUkNSMV9BRiB8IFJDUjFfQUlFKTsKLQkJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKLQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKKwlpZiAocGVuZGluZykKKwkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CiAKLQlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gcGVuZGluZzsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IF9fc2hfcnRjX3BlcmlvZGljKHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Y19kZXYgPSBydGMtPnJ0Y19kZXY7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlzdHJ1Y3QgcnRjX3Rhc2sgKmlycV90YXNrOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMl9QRUY7CiAJdG1wICY9IH5SQ1IyX1BFRjsKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKIAorCWlmICghcGVuZGluZykKKwkJcmV0dXJuIDA7CisKIAkvKiBIYWxmIHBlcmlvZCBlbmFibGVkIHRoYW4gb25lIHNraXBwZWQgYW5kIHRoZSBuZXh0IG5vdGlmaWVkICovCiAJaWYgKChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9IUCkgJiYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0NPVU5UKSkKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9DT1VOVDsKQEAgLTE1NywxNiArMTUyLDY1IEBACiAJCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gUEZfQ09VTlQ7CiAJCWlmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9LT1UpIHsKIAkJCXNwaW5fbG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7Ci0JCQlpZiAocnRjX2Rldi0+aXJxX3Rhc2spCi0JCQkJcnRjX2Rldi0+aXJxX3Rhc2stPmZ1bmMocnRjX2Rldi0+aXJxX3Rhc2stPnByaXZhdGVfZGF0YSk7CisJCQlpcnFfdGFzayA9IHJ0Y19kZXYtPmlycV90YXNrOworCQkJaWYgKGlycV90YXNrKQorCQkJCWlycV90YXNrLT5mdW5jKGlycV90YXNrLT5wcml2YXRlX2RhdGEpOwogCQkJc3Bpbl91bmxvY2soJnJ0Y19kZXYtPmlycV90YXNrX2xvY2spOwogCQl9IGVsc2UKIAkJCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX1BGIHwgUlRDX0lSUUYpOwogCX0KIAorCXJldHVybiBwZW5kaW5nOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfaW50ZXJydXB0KHJ0Yyk7CiAJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19hbGFybShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfYWxhcm0ocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfcGVyaW9kaWMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXJldCA9IF9fc2hfcnRjX3BlcmlvZGljKHJ0Yyk7CisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3NoYXJlZChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfaW50ZXJydXB0KHJ0Yyk7CisJcmV0IHw9IF9fc2hfcnRjX2FsYXJtKHJ0Yyk7CisJcmV0IHw9IF9fc2hfcnRjX3BlcmlvZGljKHJ0Yyk7CisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfcnRjX3NldHBpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCkBAIC0yNzUsNiArMzE5LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9ydGNfc2V0Y2llKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKKworCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJaWYgKCFlbmFibGUpCisJCXRtcCAmPSB+UkNSMV9DSUU7CisJZWxzZQorCQl0bXAgfD0gUkNSMV9DSUU7CisKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKK30KKwogc3RhdGljIGludCBzaF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTI5MSw5ICszNTQsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9PWFM7CisJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09OOgogCQlydGMtPnBlcmlvZGljX2ZyZXEgfD0gUEZfT1hTOworCQlzaF9ydGNfc2V0Y2llKGRldiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgUlRDX0lSUVBfUkVBRDoKIAkJcmV0ID0gcHV0X3VzZXIocnRjLT5ydGNfZGV2LT5pcnFfZnJlcSwKQEAgLTM1NiwxOCArNDIxLDE3IEBACiAJCXRtLT50bV9zZWMtLTsKICNlbmRpZgogCisJLyogb25seSBrZWVwIHRoZSBjYXJyeSBpbnRlcnJ1cHQgZW5hYmxlZCBpZiBVSUUgaXMgb24gKi8KKwlpZiAoIShydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpKQorCQlzaF9ydGNfc2V0Y2llKGRldiwgMCk7CisKIAlkZXZfZGJnKGRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAogCQlfX2Z1bmNfXywKIAkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uICsgMSwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAotCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewotCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGF0ZVxuIik7Ci0JCXJ0Y190aW1lX3RvX3RtKDAsIHRtKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKIH0KIAogc3RhdGljIGludCBzaF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtNTcyLDcgKzYzNiw3IEBACiB7CiAJc3RydWN0IHNoX3J0YyAqcnRjOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXVuc2lnbmVkIGludCB0bXA7CisJc3RydWN0IHJ0Y190aW1lIHI7CiAJaW50IHJldDsKIAogCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9ydGMpLCBHRlBfS0VSTkVMKTsKQEAgLTU4NSwyNiArNjQ5LDEyIEBACiAJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7CiAJCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgcGVyaW9kXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIHJlc291cmNlXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KIAlydGMtPnBlcmlvZGljX2lycSA9IHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JaWYgKHVubGlrZWx5KHJldCA8PSAwKSkgewotCQlyZXQgPSAtRU5PRU5UOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGNhcnJ5XG4iKTsKLQkJZ290byBlcnJfYmFkcmVzOwotCX0KLQlydGMtPmNhcnJ5X2lycSA9IHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7Ci0JaWYgKHVubGlrZWx5KHJldCA8PSAwKSkgewotCQlyZXQgPSAtRU5PRU5UOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGFsYXJtXG4iKTsKLQkJZ290byBlcnJfYmFkcmVzOwotCX0KLQlydGMtPmFsYXJtX2lycSA9IHJldDsKKwlydGMtPmNhcnJ5X2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJcnRjLT5hbGFybV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwogCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpIHsKQEAgLTY0Niw0NyArNjk2LDY2IEBACiAJfQogCiAJcnRjLT5ydGNfZGV2LT5tYXhfdXNlcl9mcmVxID0gMjU2OwotCXJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEgPSAxOwotCXJ0Yy0+cGVyaW9kaWNfZnJlcSA9IDB4NjA7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCi0JLyogcmVnaXN0ZXIgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxcyAqLwotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfcGVyaW9kaWMsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgcGVyaW9kIiwgcnRjKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkicmVxdWVzdCBwZXJpb2QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKLQkJCXJ0Yy0+cGVyaW9kaWNfaXJxKTsKLQkJZ290byBlcnJfdW5tYXA7CisJaWYgKHJ0Yy0+Y2FycnlfaXJxIDw9IDApIHsKKwkJLyogcmVnaXN0ZXIgc2hhcmVkIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycSAqLworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3NoYXJlZCwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMiLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCisJCQkJcnRjLT5wZXJpb2RpY19pcnEpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKwl9IGVsc2UgeworCQkvKiByZWdpc3RlciBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfcGVyaW9kaWMsCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIHBlcmlvZCIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgcGVyaW9kIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5wZXJpb2RpY19pcnEpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KKworCQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmNhcnJ5X2lycSwgc2hfcnRjX2ludGVycnVwdCwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgY2FycnkiLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IGNhcnJ5IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5jYXJyeV9pcnEpOworCQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sCisJCQkJICBJUlFGX0RJU0FCTEVELCAic2gtcnRjIGFsYXJtIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBhbGFybSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKKwkJCQlyZXQsIHJ0Yy0+YWxhcm1faXJxKTsKKwkJCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOworCQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBzaF9ydGNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJICAic2gtcnRjIGNhcnJ5IiwgcnRjKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkicmVxdWVzdCBjYXJyeSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5jYXJyeV9pcnEpOwotCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQkJZ290byBlcnJfdW5tYXA7CisJLyogZXZlcnl0aGluZyBkaXNhYmxlZCBieSBkZWZhdWx0ICovCisJcnRjLT5wZXJpb2RpY19mcmVxID0gMDsKKwlydGMtPnJ0Y19kZXYtPmlycV9mcmVxID0gMDsKKwlzaF9ydGNfc2V0cGllKCZwZGV2LT5kZXYsIDApOworCXNoX3J0Y19zZXRhaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGNpZSgmcGRldi0+ZGV2LCAwKTsKKworCS8qIHJlc2V0IHJ0YyB0byBlcG9jaCAwIGlmIHRpbWUgaXMgaW52YWxpZCAqLworCWlmIChydGNfcmVhZF90aW1lKHJ0Yy0+cnRjX2RldiwgJnIpIDwgMCkgeworCQlydGNfdGltZV90b190bSgwLCAmcik7CisJCXJ0Y19zZXRfdGltZShydGMtPnJ0Y19kZXYsICZyKTsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShydGMtPmFsYXJtX2lycSwgc2hfcnRjX2FsYXJtLCBJUlFGX0RJU0FCTEVELAotCQkJICAic2gtcnRjIGFsYXJtIiwgcnRjKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkicmVxdWVzdCBhbGFybSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5hbGFybV9pcnEpOwotCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKLQkJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KLQotCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwotCXRtcCAmPSB+UkNSMV9DRjsKLQl0bXAgfD0gUkNSMV9DSUU7Ci0Jd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7Ci0KKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAJcmV0dXJuIDA7CiAKIGVycl91bm1hcDoKQEAgLTcwOCwxMCArNzc3LDEzIEBACiAKIAlzaF9ydGNfc2V0cGllKCZwZGV2LT5kZXYsIDApOwogCXNoX3J0Y19zZXRhaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGNpZSgmcGRldi0+ZGV2LCAwKTsKIAotCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOwogCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCWZyZWVfaXJxKHJ0Yy0+YWxhcm1faXJxLCBydGMpOworCWlmIChydGMtPmNhcnJ5X2lycSA+IDApIHsKKwkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CisJCWZyZWVfaXJxKHJ0Yy0+YWxhcm1faXJxLCBydGMpOworCX0KIAogCXJlbGVhc2VfcmVzb3VyY2UocnRjLT5yZXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jIGIvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYwppbmRleCBhZDM1Zjc2Li5hNjM0MWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB0d2w0MDMwX3J0Y19pbnRlcnJ1cHQsCiAJCQkJSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCQlydGMtPmRldi5idXNfaWQsIHJ0Yyk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJUlEgaXMgbm90IGZyZWUuXG4iKTsKIAkJZ290byBvdXQxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL01ha2VmaWxlCmluZGV4IGQwZWFlNTkuLjk1YmNjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKQEAgLTIsOSArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgUy8zOTAgc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMKICMKIAotQ0ZMQUdTX3N5c2luZm8ubyArPSAtSWluY2x1ZGUvbWF0aC1lbXUgLUlhcmNoL3MzOTAvbWF0aC1lbXUgLXcKLQotb2JqLXkgKz0gczM5MG1hY2gubyBzeXNpbmZvLm8KIG9iai15ICs9IGNpby8gYmxvY2svIGNoYXIvIGNyeXB0by8gbmV0LyBzY3NpLyBrdm0vCiAKIGRyaXZlcnMteSArPSBkcml2ZXJzL3MzOTAvYnVpbHQtaW4ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMDhjMjNhOS4uMmZkNjRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC05LDYgKzksOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTIyLDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAjaW5jbHVkZSA8YXNtL3RvZGNsay5oPgorI2luY2x1ZGUgPGFzbS9pdGN3Lmg+CiAKIC8qIFRoaXMgaXMgdWdseS4uLiAqLwogI2RlZmluZSBQUklOVEtfSEVBREVSICJkYXNkOiIKQEAgLTIyMSw3ICsyMjUsNyBAQAogCQkJcmV0dXJuIHJjOwogCX0KIAkvKiByZWdpc3RlciAnZGV2aWNlJyBkZWJ1ZyBhcmVhLCB1c2VkIGZvciBhbGwgREJGX0RFVl9YWFggY2FsbHMgKi8KLQlkZXZpY2UtPmRlYnVnX2FyZWEgPSBkZWJ1Z19yZWdpc3RlcihkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCAxLCAxLAorCWRldmljZS0+ZGVidWdfYXJlYSA9IGRlYnVnX3JlZ2lzdGVyKGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIDQsIDEsCiAJCQkJCSAgICA4ICogc2l6ZW9mKGxvbmcpKTsKIAlkZWJ1Z19yZWdpc3Rlcl92aWV3KGRldmljZS0+ZGVidWdfYXJlYSwgJmRlYnVnX3NwcmludGZfdmlldyk7CiAJZGVidWdfc2V0X2xldmVsKGRldmljZS0+ZGVidWdfYXJlYSwgREJGX1dBUk5JTkcpOwpAQCAtNzYyLDcgKzc2Niw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWRldmljZSA9IGNxci0+c3RhcnRkZXY7CiAJaWYgKHN0cm5jbXAoKGNoYXIgKikgJmNxci0+bWFnaWMsIGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgNCkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKIAkJCSAgICAiIGRhc2RfY2N3X3JlcSAweCUwOHggbWFnaWMgZG9lc24ndCBtYXRjaCIKIAkJCSAgICAiIGRpc2NpcGxpbmUgMHglMDh4IiwKIAkJCSAgICBjcXItPm1hZ2ljLApAQCAtNzgyLDYgKzc4Niw3IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJldHJpZXMsIHJjOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJLyogQ2hlY2sgdGhlIGNxciAqLwogCXJjID0gZGFzZF9jaGVja19jcXIoY3FyKTsKQEAgLTgxNSwxMCArODIwLDEwIEBACiAJCQkJICAgICAgImRldmljZSBidXN5LCByZXRyeSBsYXRlciIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAibGluZSAlZCB1bmtub3duIFJDPSVkLCBwbGVhc2UgIgotCQkJCSAgICAicmVwb3J0IHRvIGxpbnV4MzkwQGRlLmlibS5jb20iLAotCQkJCSAgICBfX0xJTkVfXywgcmMpOworCQkJLyogaW50ZXJuYWwgZXJyb3IgMTAgLSB1bmtub3duIHJjKi8KKwkJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjEwICVkIiwgcmMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgIgorCQkJCSJEQVNEIGRldmljZSBkcml2ZXIsIHJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQkJQlVHKCk7CiAJCQlicmVhazsKIAkJfQpAQCAtODM2LDYgKzg0MSw3IEBACiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHJjOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJLyogQ2hlY2sgdGhlIGNxciAqLwogCXJjID0gZGFzZF9jaGVja19jcXIoY3FyKTsKQEAgLTg0MywxNyArODQ5LDIzIEBACiAJCXJldHVybiByYzsKIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CiAJaWYgKGNxci0+cmV0cmllcyA8IDApIHsKLQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAotCQkJICAgICJzdGFydF9JTzogcmVxdWVzdCAlcCAoJTAyeC8laSkgLSBubyByZXRyeSBsZWZ0LiIsCi0JCQkgICAgY3FyLCBjcXItPnN0YXR1cywgY3FyLT5yZXRyaWVzKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTQgLSBzdGFydF9JTyBydW4gb3V0IG9mIHJldHJpZXMgKi8KKwkJc3ByaW50ZihlcnJvcnN0cmluZywgIjE0ICVwIiwgY3FyKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCAiCisJCQkiZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRVJST1I7CiAJCXJldHVybiAtRUlPOwogCX0KIAljcXItPnN0YXJ0Y2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGFydHRpbWUgPSBqaWZmaWVzOwogCWNxci0+cmV0cmllcy0tOwotCXJjID0gY2N3X2RldmljZV9zdGFydChkZXZpY2UtPmNkZXYsIGNxci0+Y3BhZGRyLCAobG9uZykgY3FyLAotCQkJICAgICAgY3FyLT5scG0sIDApOworCWlmIChjcXItPmNwbW9kZSA9PSAxKSB7CisJCXJjID0gY2N3X2RldmljZV90bV9zdGFydChkZXZpY2UtPmNkZXYsIGNxci0+Y3BhZGRyLAorCQkJCQkgKGxvbmcpIGNxciwgY3FyLT5scG0pOworCX0gZWxzZSB7CisJCXJjID0gY2N3X2RldmljZV9zdGFydChkZXZpY2UtPmNkZXYsIGNxci0+Y3BhZGRyLAorCQkJCSAgICAgIChsb25nKSBjcXIsIGNxci0+bHBtLCAwKTsKKwl9CiAJc3dpdGNoIChyYykgewogCWNhc2UgMDoKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9JTl9JTzsKQEAgLTg2MiwxMSArODc0LDExIEBACiAJCQkgICAgICBjcXIpOwogCQlicmVhazsKIAljYXNlIC1FQlVTWToKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IGRldmljZSBidXN5LCByZXRyeSBsYXRlciIpOwogCQlicmVhazsKIAljYXNlIC1FVElNRURPVVQ6Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiByZXF1ZXN0IHRpbWVvdXQsIHJldHJ5IGxhdGVyIik7CiAJCWJyZWFrOwogCWNhc2UgLUVBQ0NFUzoKQEAgLTg3NiwxOSArODg4LDI0IEBACiAJCSAqIERvIGEgcmV0cnkgd2l0aCBhbGwgYXZhaWxhYmxlIHBhdGhlcy4KIAkJICovCiAJCWNxci0+bHBtID0gTFBNX0FOWVBBVEg7Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiBzZWxlY3RlZCBwYXRoZXMgZ29uZSwiCiAJCQkgICAgICAiIHJldHJ5IG9uIGFsbCBwYXRoZXMiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRU5PREVWOgorCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgInN0YXJ0X0lPOiAtRU5PREVWIGRldmljZSBnb25lLCByZXRyeSIpOworCQlicmVhazsKIAljYXNlIC1FSU86Ci0JCURCRl9ERVZfRVZFTlQoREJGX0VSUiwgZGV2aWNlLCAiJXMiLAotCQkJICAgICAgInN0YXJ0X0lPOiBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJzdGFydF9JTzogLUVJTyBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCSAgICAibGluZSAlZCB1bmtub3duIFJDPSVkLCBwbGVhc2UgcmVwb3J0IgotCQkJICAgICIgdG8gbGludXgzOTBAZGUuaWJtLmNvbSIsIF9fTElORV9fLCByYyk7CisJCS8qIGludGVybmFsIGVycm9yIDExIC0gdW5rbm93biByYyAqLworCQlzbnByaW50ZihlcnJvcnN0cmluZywgRVJST1JMRU5HVEgsICIxMSAlZCIsIHJjKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIERBU0QgZGV2aWNlIGRyaXZlciwgIgorCQkJInJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQpAQCAtOTQ1LDcgKzk2Miw3IEBACiAJCXJldHVybjsKIAljcXIgPSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKSBpbnRwYXJtOwogCWlmIChjcXItPnN0YXR1cyAhPSBEQVNEX0NRUl9JTl9JTykgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsCisJCURCRl9FVkVOVChEQkZfREVCVUcsCiAJCQkiaW52YWxpZCBzdGF0dXMgaW4gaGFuZGxlX2tpbGxlZF9yZXF1ZXN0OiAiCiAJCQkiYnVzX2lkICVzLCBzdGF0dXMgJTAyeCIsCiAJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOwpAQCAtOTU2LDggKzk3Myw4IEBACiAJaWYgKGRldmljZSA9PSBOVUxMIHx8CiAJICAgIGRldmljZSAhPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpIHx8CiAJICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogYnVzX2lkICVzIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6ICIKKwkJCSAgICAgICJidXNfaWQgJXMiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk5NiwxMSArMTAxMywxMSBAQAogCQljYXNlIC1FSU86CiAJCQlicmVhazsKIAkJY2FzZSAtRVRJTUVET1VUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlcyglcyk6IHJlcXVlc3QgdGltZWQgb3V0XG4iLAorCQkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiJXMoJXMpOiByZXF1ZXN0IHRpbWVkIG91dFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzKCVzKTogdW5rbm93biBlcnJvciAlbGRcbiIsCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyglcyk6IHVua25vd24gZXJyb3IgJWxkXG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgUFRSX0VSUihpcmIpKTsKIAkJfQogCQlkYXNkX2hhbmRsZV9raWxsZWRfcmVxdWVzdChjZGV2LCBpbnRwYXJtKTsKQEAgLTEwMDksMTUgKzEwMjYsMTEgQEAKIAogCW5vdyA9IGdldF9jbG9jaygpOwogCi0JREJGX0VWRU5UKERCRl9FUlIsICJJbnRlcnJ1cHQ6IGJ1c19pZCAlcyBDUy9EUyAlMDR4IGlwICUwOHgiLAotCQkgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCAoKGlyYi0+c2Nzdy5jbWQuY3N0YXQgPDwgOCkgfAotCQkgIGlyYi0+c2Nzdy5jbWQuZHN0YXQpLCAodW5zaWduZWQgaW50KSBpbnRwYXJtKTsKLQogCS8qIGNoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzICovCiAJY3FyID0gKHN0cnVjdCBkYXNkX2Njd19yZXEgKikgaW50cGFybTsKLQlpZiAoIWNxciB8fCAoKGlyYi0+c2Nzdy5jbWQuY2MgPT0gMSkgJiYKLQkJICAgICAoaXJiLT5zY3N3LmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCi0JCSAgICAgKGlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpIHsKKwlpZiAoIWNxciB8fCAoKHNjc3dfY2MoJmlyYi0+c2NzdykgPT0gMSkgJiYKKwkJICAgICAoc2Nzd19mY3RsKCZpcmItPnNjc3cpICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCisJCSAgICAgKHNjc3dfc3RjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpIHsKIAkJaWYgKGNxciAmJiBjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9JTl9JTykKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwogCQlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpOwpAQCAtMTAzMywxNCArMTA0NiwxNCBAQAogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoIWRldmljZSB8fAogCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6IGJ1c19pZCAlcyIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiAiCisJCQkgICAgICAiYnVzX2lkICVzIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm47CiAJfQogCiAJLyogQ2hlY2sgZm9yIGNsZWFyIHBlbmRpbmcgKi8KIAlpZiAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfQ0xFQVJfUEVORElORyAmJgotCSAgICBpcmItPnNjc3cuY21kLmZjdGwgJiBTQ1NXX0ZDVExfQ0xFQVJfRlVOQykgeworCSAgICBzY3N3X2ZjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0ZDVExfQ0xFQVJfRlVOQykgewogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0NMRUFSRUQ7CiAJCWRhc2RfZGV2aWNlX2NsZWFyX3RpbWVyKGRldmljZSk7CiAJCXdha2VfdXAoJmRhc2RfZmx1c2hfd3EpOwpAQCAtMTA0OCwxOSArMTA2MSwxNyBAQAogCQlyZXR1cm47CiAJfQogCi0gCS8qIGNoZWNrIHN0YXR1cyAtIHRoZSByZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQgYnkgZHluIGRldGFjaCAqLworCS8qIGNoZWNrIHN0YXR1cyAtIHRoZSByZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBraWxsZWQgYnkgZHluIGRldGFjaCAqLwogCWlmIChjcXItPnN0YXR1cyAhPSBEQVNEX0NRUl9JTl9JTykgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsCi0JCQkiaW52YWxpZCBzdGF0dXM6IGJ1c19pZCAlcywgc3RhdHVzICUwMngiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgc3RhdHVzOiBidXNfaWQgJXMsICIKKwkJCSAgICAgICJzdGF0dXMgJTAyeCIsIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9Ci0JREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIkludDogQ1MvRFMgMHglMDR4IGZvciBjcXIgJXAiLAotCQkgICAgICAoKGlyYi0+c2Nzdy5jbWQuY3N0YXQgPDwgOCkgfCBpcmItPnNjc3cuY21kLmRzdGF0KSwgY3FyKTsKKwogCW5leHQgPSBOVUxMOwogCWV4cGlyZXMgPSAwOwotCWlmIChpcmItPnNjc3cuY21kLmRzdGF0ID09IChERVZfU1RBVF9DSE5fRU5EIHwgREVWX1NUQVRfREVWX0VORCkgJiYKLQkgICAgaXJiLT5zY3N3LmNtZC5jc3RhdCA9PSAwICYmICFpcmItPmVzdy5lc3cwLmVydy5jb25zKSB7CisJaWYgKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgPT0gKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSAmJgorCSAgICBzY3N3X2NzdGF0KCZpcmItPnNjc3cpID09IDApIHsKIAkJLyogcmVxdWVzdCB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1NVQ0NFU1M7CiAJCWNxci0+c3RvcGNsayA9IG5vdzsKQEAgLTEwNzEsMTggKzEwODIsMjMgQEAKIAkJfQogCX0gZWxzZSB7ICAvKiBlcnJvciAqLwogCQltZW1jcHkoJmNxci0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CisJCS8qIGxvZyBzZW5zZSBmb3IgZXZlcnkgZmFpbGVkIEkvTyB0byBzMzkwIGRlYnVnZmVhdHVyZSAqLworCQlkYXNkX2xvZ19zZW5zZV9kYmYoY3FyLCBpcmIpOwogCQlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKIAkJCWRhc2RfbG9nX3NlbnNlKGNxciwgaXJiKTsKIAkJfQorCiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IHdhbnQgY29tcGxleCBFUlAgZm9yIHRoaXMgcmVxdWVzdCwgdGhlbiBqdXN0CiAJCSAqIHJlc2V0IHRoaXMgYW5kIHJldHJ5IGl0IGluIHRoZSBmYXN0cGF0aAogCQkgKi8KIAkJaWYgKCF0ZXN0X2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncykgJiYKIAkJICAgIGNxci0+cmV0cmllcyA+IDApIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwKLQkJCQkgICAgImRlZmF1bHQgRVJQIGluIGZhc3RwYXRoICglaSByZXRyaWVzIGxlZnQpIiwKLQkJCQkgICAgY3FyLT5yZXRyaWVzKTsKKwkJCWlmIChjcXItPmxwbSA9PSBMUE1fQU5ZUEFUSCkKKwkJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAorCQkJCQkgICAgICAiZGVmYXVsdCBFUlAgaW4gZmFzdHBhdGggIgorCQkJCQkgICAgICAiKCVpIHJldHJpZXMgbGVmdCkiLAorCQkJCQkgICAgICBjcXItPnJldHJpZXMpOwogCQkJY3FyLT5scG0gICAgPSBMUE1fQU5ZUEFUSDsKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOwogCQkJbmV4dCA9IGNxcjsKQEAgLTEwOTMsMTAgKzExMDksNiBAQAogCSAgICAoIWRldmljZS0+c3RvcHBlZCkpIHsKIAkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+c3RhcnRfSU8obmV4dCkgPT0gMCkKIAkJCWV4cGlyZXMgPSBuZXh0LT5leHBpcmVzOwotCQllbHNlCi0JCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCi0JCQkJICAgICJJbnRlcnJ1cHQgZmFzdHBhdGggIgotCQkJCSAgICAiZmFpbGVkISIpOwogCX0KIAlpZiAoZXhwaXJlcyAhPSAwKQogCQlkYXNkX2RldmljZV9zZXRfdGltZXIoZGV2aWNlLCBleHBpcmVzKTsKQEAgLTExNjksNiArMTE4MSw3IEBACiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrOwogCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCB2b2lkICpkYXRhKTsKIAl2b2lkICpjYWxsYmFja19kYXRhOworCWNoYXIgZXJyb3JzdHJpbmdbRVJST1JMRU5HVEhdOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGwsIG4sIGZpbmFsX3F1ZXVlKSB7CiAJCWNxciA9IGxpc3RfZW50cnkobCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgZGV2bGlzdCk7CkBAIC0xMTg5LDEwICsxMjAyLDExIEBACiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1RFUk1JTkFURUQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJ3cm9uZyBjcXIgc3RhdHVzIGluIF9fZGFzZF9wcm9jZXNzX2ZpbmFsX3F1ZXVlICIKLQkJCQkgICAgImZvciBjcXIgJXAsIHN0YXR1cyAleCIsCi0JCQkJICAgIGNxciwgY3FyLT5zdGF0dXMpOworCQkJLyogaW50ZXJuYWwgZXJyb3IgMTIgLSB3cm9uZyBjcXIgc3RhdHVzKi8KKwkJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjEyICVwICV4MDIiLCBjcXIsIGNxci0+c3RhdHVzKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkJInJlYXNvbj0lc1xuIiwgZXJyb3JzdHJpbmcpOwogCQkJQlVHKCk7CiAJCX0KIAkJaWYgKGNxci0+Y2FsbGJhY2sgIT0gTlVMTCkKQEAgLTEyMTcsMTggKzEyMzEsMTcgQEAKIAkgICAgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgY3FyLT5leHBpcmVzICsgY3FyLT5zdGFydHRpbWUpKSkgewogCQlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcikgIT0gMCkgewogCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDUgc2VjICovCi0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiaW50ZXJuYWwgZXJyb3IgLSB0aW1lb3V0ICglaXMpIGV4cGlyZWQgIgotCQkJCSAgICAiZm9yIGNxciAlcCwgdGVybWluYXRpb24gZmFpbGVkLCAiCi0JCQkJICAgICJyZXRyeWluZyBpbiA1cyIsCi0JCQkJICAgIChjcXItPmV4cGlyZXMvSFopLCBjcXIpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJImNxciAlcCB0aW1lZCBvdXQgKCVpcykgYnV0IGNhbm5vdCBiZSAiCisJCQkJImVuZGVkLCByZXRyeWluZyBpbiA1IHNcbiIsCisJCQkJY3FyLCAoY3FyLT5leHBpcmVzL0haKSk7CiAJCQljcXItPmV4cGlyZXMgKz0gNSpIWjsKIAkJCWRhc2RfZGV2aWNlX3NldF90aW1lcihkZXZpY2UsIDUqSFopOwogCQl9IGVsc2UgewotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgImludGVybmFsIGVycm9yIC0gdGltZW91dCAoJWlzKSBleHBpcmVkICIKLQkJCQkgICAgImZvciBjcXIgJXAgKCVpIHJldHJpZXMgbGVmdCkiLAotCQkJCSAgICAoY3FyLT5leHBpcmVzL0haKSwgY3FyLCBjcXItPnJldHJpZXMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJImNxciAlcCB0aW1lZCBvdXQgKCVpcyksICVpIHJldHJpZXMgIgorCQkJCSJyZW1haW5pbmdcbiIsIGNxciwgKGNxci0+ZXhwaXJlcy9IWiksCisJCQkJY3FyLT5yZXRyaWVzKTsKIAkJfQogCX0KIH0KQEAgLTEyOTAsMTAgKzEzMDMsOSBAQAogCQkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKIAkJCWlmIChyYykgewogCQkJCS8qIHVuYWJsZSB0byB0ZXJtaW5hdGUgcmVxdWV1c3QgKi8KLQkJCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCQkgICAgImRhc2QgZmx1c2ggY2N3X3F1ZXVlIGlzIHVuYWJsZSAiCi0JCQkJCSAgICAiIHRvIHRlcm1pbmF0ZSByZXF1ZXN0ICVwIiwKLQkJCQkJICAgIGNxcik7CisJCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSJGbHVzaGluZyB0aGUgREFTRCByZXF1ZXN0IHF1ZXVlICIKKwkJCQkJImZhaWxlZCBmb3IgcmVxdWVzdCAlcFxuIiwgY3FyKTsKIAkJCQkvKiBzdG9wIGZsdXNoIHByb2Nlc3NpbmcgKi8KIAkJCQlnb3RvIGZpbmlzaGVkOwogCQkJfQpAQCAtMTUzNywxMCArMTU0OSw5IEBACiAJCS8qIHJlcXVlc3QgaW4gSU8gLSB0ZXJtaW5hdGUgSU8gYW5kIHJlbGVhc2UgYWdhaW4gKi8KIAkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKIAkJaWYgKHJjKSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiZGFzZF9jYW5jZWxfcmVxIGlzIHVuYWJsZSAiCi0JCQkJICAgICIgdG8gdGVybWluYXRlIHJlcXVlc3QgJXAsIHJjID0gJWQiLAotCQkJCSAgICBjcXIsIHJjKTsKKwkJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJCSJDYW5jZWxsaW5nIHJlcXVlc3QgJXAgZmFpbGVkIHdpdGggcmM9JWRcbiIsCisJCQkJY3FyLCByYyk7CiAJCX0gZWxzZSB7CiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKIAkJCXJjID0gMTsKQEAgLTE2MTcsNyArMTYyOCw3IEBACiAJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0RPTkUpCiAJCURCRl9ERVZfRVZFTlQoREJGX05PVElDRSwgZGV2aWNlLCAiJXMiLCAiRVJQIHN1Y2Nlc3NmdWwiKTsKIAllbHNlCi0JCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsICJFUlAgdW5zdWNjZXNzZnVsIik7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiRVJQIGZhaWxlZCBmb3IgdGhlIERBU0RcbiIpOwogCWVycF9mbiA9IGRldmljZS0+ZGlzY2lwbGluZS0+ZXJwX3Bvc3RhY3Rpb24oY3FyKTsKIAllcnBfZm4oY3FyKTsKIH0KQEAgLTE5OTEsOCArMjAwMiwxMSBAQAogCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgbWF4KTsKIAlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwkvKiB3aXRoIHBhZ2Ugc2l6ZWQgc2VnbWVudHMgd2UgY2FuIHRyYW5zbGF0ZSBlYWNoIHNlZ2VtZW50IGludG8KKwkgKiBvbmUgaWRhdy90aWRhdworCSAqLworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBQQUdFX1NJWkUpOworCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBQQUdFX1NJWkUgLSAxKTsKIAlibGtfcXVldWVfb3JkZXJlZChibG9jay0+cmVxdWVzdF9xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CiB9CiAKQEAgLTIwNDMsOCArMjA1Nyw5IEBACiAJfQogCiAJaWYgKGRhc2RfcHJvYmVvbmx5KSB7Ci0JCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgYmFzZSwgIiVzIiwKLQkJCSAgICAiTm8gYWNjZXNzIHRvIGRldmljZSBkdWUgdG8gcHJvYmVvbmx5IG1vZGUiKTsKKwkJZGV2X2luZm8oJmJhc2UtPmNkZXYtPmRldiwKKwkJCSAiQWNjZXNzaW5nIHRoZSBEQVNEIGZhaWxlZCBiZWNhdXNlIGl0IGlzIGluICIKKwkJCSAicHJvYmVvbmx5IG1vZGVcbiIpOwogCQlyYyA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjEwMSw3ICsyMTE2LDggQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gZGFzZF9vcGVuLAogCS5yZWxlYXNlCT0gZGFzZF9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBkYXNkX2lvY3RsLAorCS5pb2N0bAkJPSBkYXNkX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBkYXNkX2lvY3RsLAogCS5nZXRnZW8JCT0gZGFzZF9nZXRnZW8sCiB9OwogCkBAIC0yMTQzLDE0ICsyMTU5LDE0IEBACiAKIAlyZXQgPSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKGNkZXYsIENDV0RFVl9ET19QQVRIR1JPVVApOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCSAgICAgICAiZGFzZF9nZW5lcmljX3Byb2JlOiBjb3VsZCBub3Qgc2V0IGNjdy1kZXZpY2Ugb3B0aW9ucyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IGRhc2RfYWRkX3N5c2ZzX2ZpbGVzKGNkZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCSAgICAgICAiZGFzZF9nZW5lcmljX3Byb2JlOiBjb3VsZCBub3QgYWRkIHN5c2ZzIGVudHJpZXMgIgogCQkgICAgICAgImZvciAlc1xuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm4gcmV0OwpAQCAtMjE2Niw5ICsyMTgyLDcgQEAKIAkgICAgKGRhc2RfYXV0b2RldGVjdCAmJiBkYXNkX2J1c2lkX2tub3duKGRldl9uYW1lKCZjZGV2LT5kZXYpKSAhPSAwKSkKIAkJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNkZXYpOwogCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBpbml0aWFsbHkgIgotCQkgICAgICAgIm9ubGluZSBjY3ctZGV2aWNlICVzOyByZXR1cm4gY29kZTogJWRcbiIsCisJCXByX3dhcm5pbmcoIiVzOiBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgd2l0aCByYz0lZFxuIiwKIAkJICAgICAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCByZXQpOwogCXJldHVybiAwOwogfQpAQCAtMjIzMiwxMCArMjI0Niw5IEBACiAJZGlzY2lwbGluZSA9IGJhc2VfZGlzY2lwbGluZTsKIAlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9VU0VESUFHKSB7CiAJICAJaWYgKCFkYXNkX2RpYWdfZGlzY2lwbGluZV9wb2ludGVyKSB7Ci0JCSAgICAgICAgcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCQkiZGFzZF9nZW5lcmljIGNvdWxkbid0IG9ubGluZSBkZXZpY2UgJXMgIgotCQkJCSItIGRpc2NpcGxpbmUgRElBRyBub3QgYXZhaWxhYmxlXG4iLAotCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCBiZWNhdXNlICIKKwkJCQkgICAib2YgbWlzc2luZyBESUFHIGRpc2NpcGxpbmVcbiIsCisJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtMjI1NiwxMCArMjI2OSw5IEBACiAJLyogY2hlY2tfZGV2aWNlIHdpbGwgYWxsb2NhdGUgYmxvY2sgZGV2aWNlIGlmIG5lY2Vzc2FyeSAqLwogCXJjID0gZGlzY2lwbGluZS0+Y2hlY2tfZGV2aWNlKGRldmljZSk7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HCi0JCQkiZGFzZF9nZW5lcmljIGNvdWxkbid0IG9ubGluZSBkZXZpY2UgJXMgIgotCQkJIndpdGggZGlzY2lwbGluZSAlcyByYz0laVxuIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBkaXNjaXBsaW5lLT5uYW1lLCByYyk7CisJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIHdpdGggZGlzY2lwbGluZSAlcyAiCisJCQkgICAiZmFpbGVkIHdpdGggcmM9JWlcbiIsCisJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgZGlzY2lwbGluZS0+bmFtZSwgcmMpOwogCQltb2R1bGVfcHV0KGRpc2NpcGxpbmUtPm93bmVyKTsKIAkJbW9kdWxlX3B1dChiYXNlX2Rpc2NpcGxpbmUtPm93bmVyKTsKIAkJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CkBAIC0yMjY4LDkgKzIyODAsOCBAQAogCiAJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9PTkxJTkUpOwogCWlmIChkZXZpY2UtPnN0YXRlIDw9IERBU0RfU1RBVEVfS05PV04pIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCSJkYXNkX2dlbmVyaWMgZGlzY2lwbGluZSBub3QgZm91bmQgZm9yICVzXG4iLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlwcl93YXJuaW5nKCIlcyBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgYmVjYXVzZSBvZiBhICIKKwkJCSAgICJtaXNzaW5nIGRpc2NpcGxpbmVcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmMgPSAtRU5PREVWOwogCQlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX05FVyk7CiAJCWlmIChkZXZpY2UtPmJsb2NrKQpAQCAtMjMxNCwxMyArMjMyNSwxMyBAQAogCQlvcGVuX2NvdW50ID0gYXRvbWljX3JlYWQoJmRldmljZS0+YmxvY2stPm9wZW5fY291bnQpOwogCQlpZiAob3Blbl9jb3VudCA+IG1heF9jb3VudCkgewogCQkJaWYgKG9wZW5fY291bnQgPiAwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IG9mZmxpbmUgZGFzZCAiCi0JCQkJICAgICAgICJkZXZpY2Ugd2l0aCBvcGVuIGNvdW50ID0gJWkuXG4iLAotCQkJCSAgICAgICBvcGVuX2NvdW50KTsKKwkJCQlwcl93YXJuaW5nKCIlczogVGhlIERBU0QgY2Fubm90IGJlIHNldCBvZmZsaW5lICIKKwkJCQkJICAgIndpdGggb3BlbiBjb3VudCAlaVxuIiwKKwkJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldiksIG9wZW5fY291bnQpOwogCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIiwKLQkJCQkgICAgICAgIkNhbid0IG9mZmxpbmUgZGFzZCBkZXZpY2UgZHVlICIKLQkJCQkgICAgICAgInRvIGludGVybmFsIHVzZVxuIik7CisJCQkJcHJfd2FybmluZygiJXM6IFRoZSBEQVNEIGNhbm5vdCBiZSBzZXQgb2ZmbGluZSAiCisJCQkJCSAgICJ3aGlsZSBpdCBpcyBpbiB1c2VcbiIsCisJCQkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWNsZWFyX2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmRldmljZS0+ZmxhZ3MpOwogCQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjM5Myw4ICsyNDA0LDEwIEBACiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QobWFnaWMsIDEgLyogUkRDICovLCByZGNfYnVmZmVyX3NpemUsIGRldmljZSk7CiAKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBSREMgcmVxdWVzdCIpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxMyAtIEFsbG9jYXRpbmcgdGhlIFJEQyByZXF1ZXN0IGZhaWxlZCovCisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJICJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkgInJlYXNvbj0lc1xuIiwgIjEzIik7CiAJCXJldHVybiBjcXI7CiAJfQogCkBAIC0yNDMxLDYgKzI0NDQsNDAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyk7CiAKKy8qCisgKiAgIEluIGNvbW1hbmQgbW9kZSBhbmQgdHJhbnNwb3J0IG1vZGUgd2UgbmVlZCB0byBsb29rIGZvciBzZW5zZQorICogICBkYXRhIGluIGRpZmZlcmVudCBwbGFjZXMuIFRoZSBzZW5zZSBkYXRhIGl0c2VsZiBpcyBhbGx3YXlzCisgKiAgIGFuIGFycmF5IG9mIDMyIGJ5dGVzLCBzbyB3ZSBjYW4gdW5pZnkgdGhlIHNlbnNlIGRhdGEgYWNjZXNzCisgKiAgIGZvciBib3RoIG1vZGVzLgorICovCitjaGFyICpkYXNkX2dldF9zZW5zZShzdHJ1Y3QgaXJiICppcmIpCit7CisJc3RydWN0IHRzYiAqdHNiID0gTlVMTDsKKwljaGFyICpzZW5zZSA9IE5VTEw7CisKKwlpZiAoc2Nzd19pc190bSgmaXJiLT5zY3N3KSAmJiAoaXJiLT5zY3N3LnRtLmZjeHMgPT0gMHgwMSkpIHsKKwkJaWYgKGlyYi0+c2Nzdy50bS50Y3cpCisJCQl0c2IgPSB0Y3dfZ2V0X3RzYigoc3RydWN0IHRjdyAqKSh1bnNpZ25lZCBsb25nKQorCQkJCQkgIGlyYi0+c2Nzdy50bS50Y3cpOworCQlpZiAodHNiICYmIHRzYi0+bGVuZ3RoID09IDY0ICYmIHRzYi0+ZmxhZ3MpCisJCQlzd2l0Y2ggKHRzYi0+ZmxhZ3MgJiAweDA3KSB7CisJCQljYXNlIDE6CS8qIHRzYV9pb3N0YXQgKi8KKwkJCQlzZW5zZSA9IHRzYi0+dHNhLmlvc3RhdC5zZW5zZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogLyogdHNhX2RkcGMgKi8KKwkJCQlzZW5zZSA9IHRzYi0+dHNhLmRkcGMuc2Vuc2U7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGN1cnJlbnRseSB3ZSBkb24ndCB1c2UgaW50ZXJyb2dhdGUgZGF0YSAqLworCQkJCWJyZWFrOworCQkJfQorCX0gZWxzZSBpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykgeworCQlzZW5zZSA9IGlyYi0+ZWN3OworCX0KKwlyZXR1cm4gc2Vuc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dldF9zZW5zZSk7CisKIHN0YXRpYyBpbnQgX19pbml0IGRhc2RfaW5pdCh2b2lkKQogewogCWludCByYzsKQEAgLTI0NzIsNyArMjUxOSw3IEBACiAKIAlyZXR1cm4gMDsKIGZhaWxlZDoKLQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgImluaXRpYWxpemF0aW9uIG5vdCBwZXJmb3JtZWQgZHVlIHRvIGVycm9ycyIpOworCXByX2luZm8oIlRoZSBEQVNEIGRldmljZSBkcml2ZXIgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iKTsKIAlkYXNkX2V4aXQoKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCBkODJhYWQ1Li4yNzk5MWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTcsNiArNyw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KQEAgLTc1LDcgKzc3LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGVycC0+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+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZzY2gtPmRldiwgMCk7CiAJCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC01MTAsNiArNTMzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgcmVwcm9iZV9hZnRlcl9pZGxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdW51c2VkKQoreworCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLworCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAorCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAobmVlZF9yZXByb2JlKQorCQljc3Nfc2NoZWR1bGVfcmVwcm9iZSgpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlcHJvYmVfaWRsZV93b3JrLCByZXByb2JlX2FmdGVyX2lkbGUpOworCiAvKiBXb3JrIGZ1bmN0aW9uIHVzZWQgdG8gcmVwcm9iZSBhbGwgdW5yZWdpc3RlcmVkIHN1YmNoYW5uZWxzLiAqLwogc3RhdGljIHZvaWQgcmVwcm9iZV9hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCiB7CkBAIC01MTcsMTAgKzU1MSwxMiBAQAogCiAJQ0lPX01TR19FVkVOVCg0LCAicmVwcm9iZSBzdGFydFxuIik7CiAKLQluZWVkX3JlcHJvYmUgPSAwOwogCS8qIE1ha2Ugc3VyZSBpbml0aWFsIHN1YmNoYW5uZWwgc2NhbiBpcyBkb25lLiAqLwotCXdhaXRfZXZlbnQoY2N3X2RldmljZV9pbml0X3dxLAotCQkgICBhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSA9PSAwKTsKKwlpZiAoYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgIT0gMCkgeworCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJnJlcHJvYmVfaWRsZV93b3JrKTsKKwkJcmV0dXJuOworCX0KKwluZWVkX3JlcHJvYmUgPSAwOwogCXJldCA9IGZvcl9lYWNoX3N1YmNoYW5uZWxfc3RhZ2VkKE5VTEwsIHJlcHJvYmVfc3ViY2hhbm5lbCwgTlVMTCk7CiAKIAlDSU9fTVNHX0VWRU5UKDQsICJyZXByb2JlIGRvbmUgKHJjPSVkLCBuZWVkX3JlcHJvYmU9JWQpXG4iLCByZXQsCkBAIC02MTksNyArNjU1LDcgQEAKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guZXh0X2Nzc2lkLmNzc2lkID0gY3NzLT5jc3NpZDsKIAl9IGVsc2UgewogI2lmZGVmIENPTkZJR19TTVAKLQkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guY3B1X2FkZHIgPSBzdGFwKCk7CiAjZWxzZQogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IDA7CiAjZW5kaWYKQEAgLTc2NSw3ICs4MDEsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gczM5MF9yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX1NDSCwgY3NzX3Byb2Nlc3NfY3J3KTsKKwlyZXQgPSBjcndfcmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX1NDSCwgY3NzX3Byb2Nlc3NfY3J3KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtODQ1LDcgKzg4MSw3IEBACiBvdXRfYnVzOgogCWJ1c191bnJlZ2lzdGVyKCZjc3NfYnVzX3R5cGUpOwogb3V0OgotCXMzOTBfdW5yZWdpc3Rlcl9jcndfaGFuZGxlcihDUldfUlNDX0NTUyk7CisJY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUyk7CiAJY2hzY19mcmVlX3NlaV9hcmVhKCk7CiAJa2ZyZWUoc2xvd19zdWJjaGFubmVsX3NldCk7CiAJcHJfYWxlcnQoIlRoZSBDU1MgZGV2aWNlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCAyM2Q1NzUyLi5jNGQyZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTQ1NywxMiArNDU3LDEzIEBACiAJcmV0dXJuIChyZXQgPT0gMCkgPyAtRU5PREVWIDogcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCitzdGF0aWMgaW50IG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRCkKIAkJY2N3X2RldmljZV9yZW1vdmVfZGlzY29ubmVjdGVkKGNkZXYpOwotCWVsc2UgaWYgKGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnNldF9vZmZsaW5lKQotCQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNkZXYpOworCWVsc2UgaWYgKGNkZXYtPm9ubGluZSAmJiBjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5zZXRfb2ZmbGluZSkKKwkJcmV0dXJuIGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2Rldik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb25saW5lX3N0b3JlX3JlY29nX2FuZF9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCkBAIC01MzAsMTMgKzUzMSwxMCBAQAogCQlnb3RvIG91dDsKIAlzd2l0Y2ggKGkpIHsKIAljYXNlIDA6Ci0JCW9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShjZGV2KTsKLQkJcmV0ID0gY291bnQ7CisJCXJldCA9IG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShjZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlyZXQgPSBvbmxpbmVfc3RvcmVfaGFuZGxlX29ubGluZShjZGV2LCBmb3JjZSk7Ci0JCWlmICghcmV0KQotCQkJcmV0ID0gY291bnQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC01NDUsNyArNTQzLDcgQEAKIAlpZiAoY2Rldi0+ZHJ2KQogCQltb2R1bGVfcHV0KGNkZXYtPmRydi0+b3duZXIpOwogCWF0b21pY19zZXQoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3VudDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTY4MSwzNSArNjc5LDIyIEBACiAJcmV0dXJuIGRldiA/IHRvX2Njd2RldihkZXYpIDogTlVMTDsKIH0KIAotc3RhdGljIHZvaWQKLWNjd19kZXZpY2VfYWRkX2NoYW5nZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7Ci0KLQlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7Ci0JY2RldiA9IHByaXYtPmNkZXY7Ci0JaWYgKGRldmljZV9hZGQoJmNkZXYtPmRldikpIHsKLQkJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKLQkJcmV0dXJuOwotCX0KLQlzZXRfYml0KDEsICZjZGV2LT5wcml2YXRlLT5yZWdpc3RlcmVkKTsKLX0KLQotdm9pZCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgY2N3X2RldmljZV9kb191bmJpbmRfYmluZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByZXQ7CiAKIAlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7CiAJY2RldiA9IHByaXYtPmNkZXY7CiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAotCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKLQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJICAgICBjY3dfZGV2aWNlX2FkZF9jaGFuZ2VkKTsKLQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CisJaWYgKHRlc3RfYml0KDEsICZjZGV2LT5wcml2YXRlLT5yZWdpc3RlcmVkKSkgeworCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJmNkZXYtPmRldik7CisJCXJldCA9IGRldmljZV9hdHRhY2goJmNkZXYtPmRldik7CisJCVdBUk5fT04ocmV0ID09IC1FTk9ERVYpOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTc5OSw3ICs3ODQsNyBAQAogCQlyZXR1cm47CiAJb3RoZXJfc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAkvKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudCAqLwotCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2LCBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRpc2Nvbm5lY3RlZCBkZXZpY2UgMC4leC4lMDR4IGZhaWxlZCAiCiAJCQkgICAgICAiKHJldD0lZCkhXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTgzMCw3ICs4MTUsNyBAQAogCSAqIFRyeSB0byBtb3ZlIHRoZSBjY3cgZGV2aWNlIHRvIGl0cyBuZXcgc3ViY2hhbm5lbC4KIAkgKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudAogCSAqLwotCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2LCBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggZnJvbSBvcnBoYW5hZ2UgIgogCQkJICAgICAgImZhaWxlZCAocmV0PSVkKSFcbiIsCkBAIC04OTcsNyArODgyLDggQEAKIAkgKiBjY3cgZGV2aWNlIGNhbiB0YWtlIGl0cyBwbGFjZSBvbiB0aGUgc3ViY2hhbm5lbC4KIAkgKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudAogCSAqLwotCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZjc3MtPnBzZXVkb19zdWJjaGFubmVsLT5kZXYpOworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZjc3MtPnBzZXVkb19zdWJjaGFubmVsLT5kZXYsCisJCURQTV9PUkRFUl9OT05FKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IHRvIG9ycGhhbmFnZSBmYWlsZWQgIgogCQkJICAgICAgIihyZXQ9JWQpIVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCkBAIC05ODEsNyArOTY3LDcgQEAKIAkgKiBOb3cgd2Uga25vdyB0aGlzIHN1YmNoYW5uZWwgd2lsbCBzdGF5LCB3ZSBjYW4gdGhyb3cKIAkgKiBvdXIgZGVsYXllZCB1ZXZlbnQuCiAJICovCi0Jc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJLyogbWFrZSBpdCBrbm93biB0byB0aGUgc3lzdGVtICovCiAJcmV0ID0gY2N3X2RldmljZV9yZWdpc3RlcihjZGV2KTsKQEAgLTEwMzQsOCArMTAyMCw2IEBACiB2b2lkCiBpb19zdWJjaGFubmVsX3JlY29nX2RvbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKLQogCWlmIChjc3NfaW5pdF9kb25lID09IDApIHsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CiAJCXJldHVybjsKQEAgLTEwNDYsNyArMTAzMCw2IEBACiAJCS8qIFJlbW92ZSBkZXZpY2UgZm91bmQgbm90IG9wZXJhdGlvbmFsLiAqLwogCQlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCiAJCQlicmVhazsKLQkJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCiAJCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3Rlcik7CiAJCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKQEAgLTExMjksNyArMTExMiw3IEBACiAJICogVHJ5IHRvIG1vdmUgdGhlIGNjdyBkZXZpY2UgdG8gaXRzIG5ldyBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmMgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCXJjID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2LCBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYpOwogCW11dGV4X3VubG9jaygmc2NoLT5yZWdfbXV0ZXgpOwogCWlmIChyYykgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCB0byBzdWJjaGFubmVsICIKQEAgLTEyNDMsNyArMTIyNiw3IEBACiAJCSAqIHRoZSBjY3dfZGV2aWNlIGFuZCBleGl0LiBUaGlzIGhhcHBlbnMgZm9yIGFsbCBlYXJseQogCQkgKiBkZXZpY2VzLCBlLmcuIHRoZSBjb25zb2xlLgogCQkgKi8KLQkJc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAkJY2Rldi0+ZGV2Lmdyb3VwcyA9IGNjd2Rldl9hdHRyX2dyb3VwczsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmNkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCAwZjJlNjNlLi44NWUwMTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTgwLDcgKzgwLDcgQEAKIAogaW50IGNjd19kZXZpY2VfY2FuY2VsX2hhbHRfY2xlYXIoc3RydWN0IGNjd19kZXZpY2UgKik7CiAKLXZvaWQgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQoc3RydWN0IHdvcmtfc3RydWN0ICopOwogdm9pZCBjY3dfZGV2aWNlX21vdmVfdG9fb3JwaGFuYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGludCBjY3dfZGV2aWNlX2lzX29ycGhhbihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCA4ZGY1ZWFhLi44N2I0YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICAgIGNkZXYtPmlkLmRldl90eXBlICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuZGV2X3R5cGUgfHwKIAkgICAgY2Rldi0+aWQuZGV2X21vZGVsICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuZGV2X21vZGVsKSB7CiAJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkJICAgICBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKTsKKwkJCSAgICAgY2N3X2RldmljZV9kb191bmJpbmRfYmluZCk7CiAJCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzY2LDcgKzM2Niw3IEBACiAJfQogCS8qIERyaXZlciBkb2Vzbid0IHdhbnQgZGV2aWNlIGJhY2suICovCiAJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKLQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyk7CisJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQpOwogCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIH0KIApAQCAtNzI4LDcgKzcyOCw3IEBACiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAotCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOworCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7CiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAljc3Nfc2NoZWR1bGVfZXZhbChzY2gtPnNjaGlkKTsKIH0KQEAgLTEwNTIsNyArMTA1Miw3IEBACiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAkvKgogCSAqIEFuIGludGVycnVwdCBpbiBzdGF0ZSBvZmZsaW5lIG1lYW5zIGEgcHJldmlvdXMgZGlzYWJsZSB3YXMgbm90Ci0JICogc3VjY2Vzc2Z1bC4gVHJ5IGFnYWluLgorCSAqIHN1Y2Nlc3NmdWwgLSBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIHRyeSB0byBkaXNhYmxlIGFnYWluLgogCSAqLwogCWNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKaW5kZXggZWFiY2M0Mi4uMTUxNzU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKQEAgLTY4MCw3ICs2ODAsNyBAQAogCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAoIXNjc3dfaXNfdG0oJnNjaC0+c2NoaWIuc2NzdykgfHwKLQkgICAgIShzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgfCBTQ1NXX0FDVExfU1RBUlRfUEVORCkpCisJICAgICEoc2Nzd19hY3RsKCZzY2gtPnNjaGliLnNjc3cpICYgU0NTV19BQ1RMX1NUQVJUX1BFTkQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gY2lvX3RtX2ludHJnKHNjaCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDQyZjJiMDkuLjEzYmNiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0xODYsNiArMTg2LDkgQEAKIAkvKiBpbnB1dCBidWZmZXIgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KIAlpbnQgcG9sbGluZzsKIAorCS8qIGZpcnN0IEFDSydlZCBidWZmZXIgKi8KKwlpbnQgYWNrX3N0YXJ0OworCiAJLyogaG93IG11Y2ggc2JhbHMgYXJlIGFja25vd2xlZGdlZCB3aXRoIHFlYnNtICovCiAJaW50IGFja19jb3VudDsKIApAQCAtMjM0LDcgKzIzNyw3IEBACiAJaW50IGZpcnN0X3RvX2NoZWNrOwogCiAJLyogZmlyc3RfdG9fY2hlY2sgb2YgdGhlIGxhc3QgdGltZSAqLwotCWludCBsYXN0X21vdmVfZnRjOworCWludCBsYXN0X21vdmU7CiAKIAkvKiBiZWdpbm5pbmcgcG9zaXRpb24gZm9yIGNhbGxpbmcgdGhlIHByb2dyYW0gKi8KIAlpbnQgZmlyc3RfdG9fa2ljazsKQEAgLTI0NCw3ICsyNDcsNiBAQAogCiAJc3RydWN0IHFkaW9faXJxICppcnFfcHRyOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwotCXNwaW5sb2NrX3QgbG9jazsKIAogCS8qIGVycm9yIGNvbmRpdGlvbiBkdXJpbmcgYSBkYXRhIHRyYW5zZmVyICovCiAJdW5zaWduZWQgaW50IHFkaW9fZXJyb3I7CkBAIC0zNTQsNyArMzU2LDcgQEAKIAkJICBpbnQgYXV0b19hY2spOwogdm9pZCBxZGlvX2NoZWNrX291dGJvdW5kX2FmdGVyX3RoaW5pbnQoc3RydWN0IHFkaW9fcSAqcSk7CiBpbnQgcWRpb19pbmJvdW5kX3FfbW92ZWQoc3RydWN0IHFkaW9fcSAqcSk7Ci12b2lkIHFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSk7Cit2b2lkIHFkaW9fa2lja19oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpOwogdm9pZCBxZGlvX3N0b3BfcG9sbGluZyhzdHJ1Y3QgcWRpb19xICpxKTsKIGludCBxZGlvX3NpZ2Ffc3luY19xKHN0cnVjdCBxZGlvX3EgKnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IGRhN2FmYjAuLmUzNDM0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC02Myw4ICs2Myw5IEBACiAJc2VxX3ByaW50ZihtLCAiZGV2aWNlIHN0YXRlIGluZGljYXRvcjogJWRcbiIsICoodTMyICopcS0+aXJxX3B0ci0+ZHNjaSk7CiAJc2VxX3ByaW50ZihtLCAibnJfdXNlZDogJWRcbiIsIGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpOwogCXNlcV9wcmludGYobSwgImZ0YzogJWRcbiIsIHEtPmZpcnN0X3RvX2NoZWNrKTsKLQlzZXFfcHJpbnRmKG0sICJsYXN0X21vdmVfZnRjOiAlZFxuIiwgcS0+bGFzdF9tb3ZlX2Z0Yyk7CisJc2VxX3ByaW50ZihtLCAibGFzdF9tb3ZlOiAlZFxuIiwgcS0+bGFzdF9tb3ZlKTsKIAlzZXFfcHJpbnRmKG0sICJwb2xsaW5nOiAlZFxuIiwgcS0+dS5pbi5wb2xsaW5nKTsKKwlzZXFfcHJpbnRmKG0sICJhY2sgc3RhcnQ6ICVkXG4iLCBxLT51LmluLmFja19zdGFydCk7CiAJc2VxX3ByaW50ZihtLCAiYWNrIGNvdW50OiAlZFxuIiwgcS0+dS5pbi5hY2tfY291bnQpOwogCXNlcV9wcmludGYobSwgInNsc2IgYnVmZmVyIHN0YXRlczpcbiIpOwogCXNlcV9wcmludGYobSwgInwwICAgICAgfDggICAgICB8MTYgICAgIHwyNCAgICAgfDMyICAgICB8NDAgICAgIHw0OCAgICAgfDU2ICA2M3xcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggMTBjYjBmOC4uOWU4YTI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCiAJLyogc2hvdyB0aGUgY2FyZCB0aGF0IHdlIGFyZSBub3QgcG9sbGluZyBhbnltb3JlICovCiAJaWYgKGlzX3FlYnNtKHEpKSB7Ci0JCXNldF9idWZfc3RhdGVzKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKKwkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJCSAgICAgICBxLT51LmluLmFja19jb3VudCk7CiAJCXEtPnUuaW4uYWNrX2NvdW50ID0gMDsKIAl9IGVsc2UKLQkJc2V0X2J1Zl9zdGF0ZShxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOworCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOwogfQogCiBzdGF0aWMgdm9pZCBhbm5vdW5jZV9idWZmZXJfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQpAQCAtNDE5LDE1ICs0MTksMTUgQEAKIAkJaWYgKCFxLT51LmluLnBvbGxpbmcpIHsKIAkJCXEtPnUuaW4ucG9sbGluZyA9IDE7CiAJCQlxLT51LmluLmFja19jb3VudCA9IGNvdW50OwotCQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IHEtPmZpcnN0X3RvX2NoZWNrOworCQkJcS0+dS5pbi5hY2tfc3RhcnQgPSBxLT5maXJzdF90b19jaGVjazsKIAkJCXJldHVybjsKIAkJfQogCiAJCS8qIGRlbGV0ZSB0aGUgcHJldmlvdXMgQUNLJ3MgKi8KLQkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkJICAgICAgIHEtPnUuaW4uYWNrX2NvdW50KTsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSBjb3VudDsKLQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IHEtPmZpcnN0X3RvX2NoZWNrOworCQlxLT51LmluLmFja19zdGFydCA9IHEtPmZpcnN0X3RvX2NoZWNrOwogCQlyZXR1cm47CiAJfQogCkBAIC00MzksMTQgKzQzOSwxMyBAQAogCWlmIChxLT51LmluLnBvbGxpbmcpIHsKIAkJLyogcmVzZXQgdGhlIHByZXZpb3VzIEFDSyBidXQgZmlyc3Qgc2V0IHRoZSBuZXcgb25lICovCiAJCXNldF9idWZfc3RhdGUocSwgbmV3LCBTTFNCX1BfSU5QVVRfQUNLKTsKLQkJc2V0X2J1Zl9zdGF0ZShxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOwotCX0KLQllbHNlIHsKKwkJc2V0X2J1Zl9zdGF0ZShxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKKwl9IGVsc2UgewogCQlxLT51LmluLnBvbGxpbmcgPSAxOwotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmZpcnN0X3RvX2NoZWNrLCBTTFNCX1BfSU5QVVRfQUNLKTsKKwkJc2V0X2J1Zl9zdGF0ZShxLCBuZXcsIFNMU0JfUF9JTlBVVF9BQ0spOwogCX0KIAotCXEtPmxhc3RfbW92ZV9mdGMgPSBuZXc7CisJcS0+dS5pbi5hY2tfc3RhcnQgPSBuZXc7CiAJY291bnQtLTsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm47CkBAIC00NTUsNyArNDU0LDcgQEAKIAkgKiBOZWVkIHRvIGNoYW5nZSBhbGwgUFJJTUVEIGJ1ZmZlcnMgdG8gTk9UX0lOSVQsIG90aGVyd2lzZQogCSAqIHdlJ3JlIGxvb3NpbmcgaW5pdGlhdGl2ZSBpbiB0aGUgdGhpbmludCBjb2RlLgogCSAqLwotCXNldF9idWZfc3RhdGVzKHEsIG5leHRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrKSwgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCXNldF9idWZfc3RhdGVzKHEsIHEtPmZpcnN0X3RvX2NoZWNrLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCSAgICAgICBjb3VudCk7CiB9CiAKQEAgLTUyMyw3ICs1MjIsOCBAQAogCiAJYnVmbnIgPSBnZXRfaW5ib3VuZF9idWZmZXJfZnJvbnRpZXIocSk7CiAKLQlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZV9mdGMpIHx8IHEtPnFkaW9fZXJyb3IpIHsKKwlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZSkgfHwgcS0+cWRpb19lcnJvcikgeworCQlxLT5sYXN0X21vdmUgPSBidWZucjsKIAkJaWYgKCFuZWVkX3NpZ2Ffc3luYyhxKSAmJiAhcGNpX291dF9zdXBwb3J0ZWQocSkpCiAJCQlxLT51LmluLnRpbWVzdGFtcCA9IGdldF91c2VjcygpOwogCkBAIC01NzAsMjkgKzU3MCwzMCBAQAogCX0KIH0KIAotdm9pZCBxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpCit2b2lkIHFkaW9fa2lja19oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7Ci0JaW50IGNvdW50LCBzdGFydCwgZW5kOwotCi0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7Ci0KLQlzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7Ci0JZW5kID0gcS0+Zmlyc3RfdG9fY2hlY2s7Ci0JaWYgKGVuZCA+PSBzdGFydCkKLQkJY291bnQgPSBlbmQgLSBzdGFydDsKLQllbHNlCi0JCWNvdW50ID0gZW5kICsgUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIHN0YXJ0OwotCi0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7CisJaW50IHN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKKwlpbnQgZW5kID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJaW50IGNvdW50OwogCiAJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkpCiAJCXJldHVybjsKIAotCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsCi0JCSAgIHN0YXJ0LCBjb3VudCwgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOworCWNvdW50ID0gc3ViX2J1ZihlbmQsIHN0YXJ0KTsKKworCWlmIChxLT5pc19pbnB1dF9xKSB7CisJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5pbmJvdW5kX2hhbmRsZXIpOworCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2loIHM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia29oOiBucjolMWQiLCBxLT5ucik7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7CisJfQorCisJcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwgc3RhcnQsIGNvdW50LAorCQkgICBxLT5pcnFfcHRyLT5pbnRfcGFybSk7CiAKIAkvKiBmb3IgdGhlIG5leHQgdGltZSAqLwotCXEtPmZpcnN0X3RvX2tpY2sgPSBxLT5maXJzdF90b19jaGVjazsKKwlxLT5maXJzdF90b19raWNrID0gZW5kOwogCXEtPnFkaW9fZXJyb3IgPSAwOwogfQogCkBAIC02MDMsNyArNjA0LDcgQEAKIAlpZiAoIXFkaW9faW5ib3VuZF9xX21vdmVkKHEpKQogCQlyZXR1cm47CiAKLQlxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHEpOworCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCiAJaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKQogCQkvKiBtZWFucyBwb2xsIHRpbWUgaXMgbm90IHlldCBvdmVyICovCkBAIC02OTgsMjEgKzY5OSwyMSBAQAogCiAJYnVmbnIgPSBnZXRfb3V0Ym91bmRfYnVmZmVyX2Zyb250aWVyKHEpOwogCi0JaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmVfZnRjKSB8fCBxLT5xZGlvX2Vycm9yKSB7Ci0JCXEtPmxhc3RfbW92ZV9mdGMgPSBidWZucjsKKwlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZSkgfHwgcS0+cWRpb19lcnJvcikgeworCQlxLT5sYXN0X21vdmUgPSBidWZucjsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIm91dCBtb3ZlZDolMWQiLCBxLT5ucik7CiAJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcWRpb19raWNrX291dGJvdW5kX3Eoc3RydWN0IHFkaW9fcSAqcSkKK3N0YXRpYyBpbnQgcWRpb19raWNrX291dGJvdW5kX3Eoc3RydWN0IHFkaW9fcSAqcSkKIHsKIAl1bnNpZ25lZCBpbnQgYnVzeV9iaXQ7CiAJaW50IGNjOwogCiAJaWYgKCFuZWVkX3NpZ2Ffb3V0KHEpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdzolMWQiLCBxLT5ucik7CiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnNpZ2Ffb3V0KTsKQEAgLTcyNCw3NSArNzI1LDM3IEBACiAJY2FzZSAyOgogCQlpZiAoYnVzeV9iaXQpIHsKIAkJCURCRl9FUlJPUigiJTR4IGNjMiBSRVA6JTFkIiwgU0NIX05PKHEpLCBxLT5ucik7Ci0JCQlxLT5xZGlvX2Vycm9yID0gY2MgfCBRRElPX0VSUk9SX1NJR0FfQlVTWTsKLQkJfSBlbHNlIHsKLQkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXcgY2MyOiUxZCIsCi0JCQkJICAgICAgcS0+bnIpOwotCQkJcS0+cWRpb19lcnJvciA9IGNjOwotCQl9CisJCQljYyB8PSBRRElPX0VSUk9SX1NJR0FfQlVTWTsKKwkJfSBlbHNlCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13IGNjMjolMWQiLCBxLT5ucik7CiAJCWJyZWFrOwogCWNhc2UgMToKIAljYXNlIDM6CiAJCURCRl9FUlJPUigiJTR4IFNJR0EtVzolMWQiLCBTQ0hfTk8ocSksIGNjKTsKLQkJcS0+cWRpb19lcnJvciA9IGNjOwogCQlicmVhazsKIAl9Ci19Ci0KLXN0YXRpYyB2b2lkIHFkaW9fa2lja19vdXRib3VuZF9oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpCi17Ci0JaW50IHN0YXJ0LCBlbmQsIGNvdW50OwotCi0Jc3RhcnQgPSBxLT5maXJzdF90b19raWNrOwotCWVuZCA9IHEtPmxhc3RfbW92ZV9mdGM7Ci0JaWYgKGVuZCA+PSBzdGFydCkKLQkJY291bnQgPSBlbmQgLSBzdGFydDsKLQllbHNlCi0JCWNvdW50ID0gZW5kICsgUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIHN0YXJ0OwotCi0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpY2tvdXRoOiAlMWQiLCBxLT5ucik7Ci0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKLQotCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9BQ1RJVkUpKQotCQlyZXR1cm47Ci0KLQlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLCBzdGFydCwgY291bnQsCi0JCSAgIHEtPmlycV9wdHItPmludF9wYXJtKTsKLQotCS8qIGZvciB0aGUgbmV4dCB0aW1lOiAqLwotCXEtPmZpcnN0X3RvX2tpY2sgPSBxLT5sYXN0X21vdmVfZnRjOwotCXEtPnFkaW9fZXJyb3IgPSAwOworCXJldHVybiBjYzsKIH0KIAogc3RhdGljIHZvaWQgX19xZGlvX291dGJvdW5kX3Byb2Nlc3Npbmcoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRhc2tsZXRfb3V0Ym91bmQpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0KIAlCVUdfT04oYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSA8IDApOwogCiAJaWYgKHFkaW9fb3V0Ym91bmRfcV9tb3ZlZChxKSkKLQkJcWRpb19raWNrX291dGJvdW5kX2hhbmRsZXIocSk7CisJCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19aRkNQX1FGTVQpIHsKKwlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX1pGQ1BfUUZNVCkKIAkJaWYgKCFwY2lfb3V0X3N1cHBvcnRlZChxKSAmJiAhcWRpb19vdXRib3VuZF9xX2RvbmUocSkpCi0JCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKLQkJcmV0dXJuOwotCX0KKwkJCWdvdG8gc2NoZWQ7CiAKIAkvKiBiYWlsIG91dCBmb3IgSGlwZXJTb2NrZXRzIHVuaWNhc3QgcXVldWVzICovCiAJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UICYmICFtdWx0aWNhc3Rfb3V0Ym91bmQocSkpCiAJCXJldHVybjsKIAogCWlmICgocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQpICYmCi0JICAgIChhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpKSA+IFFESU9fSVFESU9fUE9MTF9MVkwpIHsKLQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7Ci0JCXJldHVybjsKLQl9CisJICAgIChhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpKSA+IFFESU9fSVFESU9fUE9MTF9MVkwpCisJCWdvdG8gc2NoZWQ7CiAKIAlpZiAocS0+dS5vdXQucGNpX291dF9lbmFibGVkKQogCQlyZXR1cm47CkBAIC04MTAsNiArNzczLDEyIEBACiAJCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZGVidWdfdGxfb3V0X3RpbWVyKTsKIAkJfQogCX0KKwlyZXR1cm47CisKK3NjaGVkOgorCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSA9PSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJcmV0dXJuOworCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogfQogCiAvKiBvdXRib3VuZCB0YXNrbGV0ICovCkBAIC04MjIsNiArNzkxLDkgQEAKIHZvaWQgcWRpb19vdXRib3VuZF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHFkaW9fcSAqcSA9IChzdHJ1Y3QgcWRpb19xICopZGF0YTsKKworCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSA9PSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJcmV0dXJuOwogCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogfQogCkBAIC04NjMsNiArODM1LDkgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcWRpb19xICpxOwogCisJaWYgKHVubGlrZWx5KGlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CisKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMucGNpX2ludCk7CiAKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQpAQCAtMTA2NSw4ICsxMDQwLDkgQEAKICAqIEBjZGV2OiBhc3NvY2lhdGVkIGNjdyBkZXZpY2UKICAqIEBob3c6IHVzZSBoYWx0IG9yIGNsZWFyIHRvIHNodXRkb3duCiAgKgotICogVGhpcyBmdW5jdGlvbiBjYWxscyBxZGlvX3NodXRkb3duKCkgZm9yIEBjZGV2IHdpdGggbWV0aG9kIEBob3cKLSAqIGFuZCBvbiBzdWNjZXNzIHFkaW9fZnJlZSgpIGZvciBAY2Rldi4KKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgcWRpb19zaHV0ZG93bigpIGZvciBAY2RldiB3aXRoIG1ldGhvZCBAaG93LgorICogYW5kIHFkaW9fZnJlZSgpLiBUaGUgcWRpb19mcmVlKCkgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgc2luY2UKKyAqICFpcnFfcHRyIGlzIGFscmVhZHkgY2hlY2tlZC4KICAqLwogaW50IHFkaW9fY2xlYW51cChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGhvdykKIHsKQEAgLTEwNzcsOCArMTA1Myw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJcmMgPSBxZGlvX3NodXRkb3duKGNkZXYsIGhvdyk7Ci0JaWYgKHJjID09IDApCi0JCXJjID0gcWRpb19mcmVlKGNkZXYpOworCisJcWRpb19mcmVlKGNkZXYpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fY2xlYW51cCk7CkBAIC0xMDkwLDExICsxMDY2LDExIEBACiAJaW50IGk7CiAKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQotCQl0YXNrbGV0X2Rpc2FibGUoJnEtPnRhc2tsZXQpOworCQl0YXNrbGV0X2tpbGwoJnEtPnRhc2tsZXQpOwogCiAJZm9yX2VhY2hfb3V0cHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpIHsKLQkJdGFza2xldF9kaXNhYmxlKCZxLT50YXNrbGV0KTsKIAkJZGVsX3RpbWVyKCZxLT51Lm91dC50aW1lcik7CisJCXRhc2tsZXRfa2lsbCgmcS0+dGFza2xldCk7CiAJfQogfQogCkBAIC0xMTEyLDYgKzEwODgsNyBAQAogCWlmICghaXJxX3B0cikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIAlEQkZfRVZFTlQoInFzaHV0ZG93bjolNHgiLCBjZGV2LT5wcml2YXRlLT5zY2hpZC5zY2hfbm8pOwogCiAJbXV0ZXhfbG9jaygmaXJxX3B0ci0+c2V0dXBfbXV0ZXgpOwpAQCAtMTEyNCw2ICsxMTAxLDEyIEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIGlzIGdvaW5nIGRvd24uIFNjaGVkdWxpbmcgdGhlIHF1ZXVlCisJICogdGFza2xldHMgaXMgZm9yYmlkZGVuIGZyb20gaGVyZSBvbi4KKwkgKi8KKwlxZGlvX3NldF9zdGF0ZShpcnFfcHRyLCBRRElPX0lSUV9TVEFURV9TVE9QUEVEKTsKKwogCXRpcWRpb19yZW1vdmVfaW5wdXRfcXVldWVzKGlycV9wdHIpOwogCXFkaW9fc2h1dGRvd25fcXVldWVzKGNkZXYpOwogCXFkaW9fc2h1dGRvd25fZGVidWdfZW50cmllcyhpcnFfcHRyLCBjZGV2KTsKQEAgLTE0MDMsOSArMTM4Niw4IEBACiAJc3dpdGNoIChpcnFfcHRyLT5zdGF0ZSkgewogCWNhc2UgUURJT19JUlFfU1RBVEVfU1RPUFBFRDoKIAljYXNlIFFESU9fSVJRX1NUQVRFX0VSUjoKLQkJbXV0ZXhfdW5sb2NrKCZpcnFfcHRyLT5zZXR1cF9tdXRleCk7Ci0JCXFkaW9fc2h1dGRvd24oY2RldiwgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmMgPSAtRUlPOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlxZGlvX3NldF9zdGF0ZShpcnFfcHRyLCBRRElPX0lSUV9TVEFURV9BQ1RJVkUpOwogCQlyYyA9IDA7CkBAIC0xNDQyLDEwICsxNDI0LDEwIEBACiAgKiBAYnVmbnI6IGZpcnN0IGJ1ZmZlciB0byBwcm9jZXNzCiAgKiBAY291bnQ6IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIGVtcHRpZWQKICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2luYm91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKLQkJCSAgIGludCBidWZuciwgaW50IGNvdW50KQorc3RhdGljIGludCBoYW5kbGVfaW5ib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAorCQkJICBpbnQgYnVmbnIsIGludCBjb3VudCkKIHsKLQlpbnQgdXNlZCwgY2MsIGRpZmY7CisJaW50IHVzZWQsIGRpZmY7CiAKIAlpZiAoIXEtPnUuaW4ucG9sbGluZykKIAkJZ290byBzZXQ7CkBAIC0xNDU2LDE5ICsxNDM4LDE4IEBACiAJCXEtPnUuaW4ucG9sbGluZyA9IDA7CiAJCXEtPnUuaW4uYWNrX2NvdW50ID0gMDsKIAkJZ290byBzZXQ7Ci0JfSBlbHNlIGlmIChidWZfaW5fYmV0d2VlbihxLT5sYXN0X21vdmVfZnRjLCBidWZuciwgY291bnQpKSB7CisJfSBlbHNlIGlmIChidWZfaW5fYmV0d2VlbihxLT51LmluLmFja19zdGFydCwgYnVmbnIsIGNvdW50KSkgewogCQlpZiAoaXNfcWVic20ocSkpIHsKLQkJCS8qIHBhcnRpYWwgb3ZlcndyaXRlLCBqdXN0IHVwZGF0ZSBsYXN0X21vdmVfZnRjICovCisJCQkvKiBwYXJ0aWFsIG92ZXJ3cml0ZSwganVzdCB1cGRhdGUgYWNrX3N0YXJ0ICovCiAJCQlkaWZmID0gYWRkX2J1ZihidWZuciwgY291bnQpOwotCQkJZGlmZiA9IHN1Yl9idWYoZGlmZiwgcS0+bGFzdF9tb3ZlX2Z0Yyk7CisJCQlkaWZmID0gc3ViX2J1ZihkaWZmLCBxLT51LmluLmFja19zdGFydCk7CiAJCQlxLT51LmluLmFja19jb3VudCAtPSBkaWZmOwogCQkJaWYgKHEtPnUuaW4uYWNrX2NvdW50IDw9IDApIHsKIAkJCQlxLT51LmluLnBvbGxpbmcgPSAwOwogCQkJCXEtPnUuaW4uYWNrX2NvdW50ID0gMDsKLQkJCQkvKiBUT0RPOiBtdXN0IHdlIHNldCBsYXN0X21vdmVfZnRjIHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsPyAqLwogCQkJCWdvdG8gc2V0OwogCQkJfQotCQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IGFkZF9idWYocS0+bGFzdF9tb3ZlX2Z0YywgZGlmZik7CisJCQlxLT51LmluLmFja19zdGFydCA9IGFkZF9idWYocS0+dS5pbi5hY2tfc3RhcnQsIGRpZmYpOwogCQl9CiAJCWVsc2UKIAkJCS8qIHRoZSBvbmx5IEFDSyB3aWxsIGJlIGRlbGV0ZWQsIHNvIHN0b3AgcG9sbGluZyAqLwpAQCAtMTQ4MywxMyArMTQ2NCwxMSBAQAogCiAJLyogbm8gbmVlZCB0byBzaWduYWwgYXMgbG9uZyBhcyB0aGUgYWRhcHRlciBoYWQgZnJlZSBidWZmZXJzICovCiAJaWYgKHVzZWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKLQlpZiAobmVlZF9zaWdhX2luKHEpKSB7Ci0JCWNjID0gcWRpb19zaWdhX2lucHV0KHEpOwotCQlpZiAoY2MpCi0JCQlxLT5xZGlvX2Vycm9yID0gY2M7Ci0JfQorCWlmIChuZWVkX3NpZ2FfaW4ocSkpCisJCXJldHVybiBxZGlvX3NpZ2FfaW5wdXQocSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTQ5OSwxMSArMTQ3OCwxMSBAQAogICogQGJ1Zm5yOiBmaXJzdCBidWZmZXIgdG8gcHJvY2VzcwogICogQGNvdW50OiBob3cgbWFueSBidWZmZXJzIGFyZSBmaWxsZWQKICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCi0JCQkgICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGhhbmRsZV9vdXRib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAorCQkJICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0ZTsKLQlpbnQgdXNlZDsKKwlpbnQgdXNlZCwgcmMgPSAwOwogCiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXIpOwogCkBAIC0xNTE4LDI3ICsxNDk3LDI2IEBACiAKIAlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQpIHsKIAkJaWYgKG11bHRpY2FzdF9vdXRib3VuZChxKSkKLQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKIAkJZWxzZQogCQkJaWYgKChxLT5pcnFfcHRyLT5zc3FkX2Rlc2MubW13YyA+IDEpICYmCiAJCQkgICAgKGNvdW50ID4gMSkgJiYKIAkJCSAgICAoY291bnQgPD0gcS0+aXJxX3B0ci0+c3NxZF9kZXNjLm1td2MpKSB7CiAJCQkJLyogZXhwbG9pdCBlbmhhbmNlZCBTSUdBICovCiAJCQkJcS0+dS5vdXQudXNlX2VuaF9zaWdhID0gMTsKLQkJCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSogT25lIHNpZ2EtdyBwZXIgYnVmZmVyIHJlcXVpcmVkIGZvciB1bmljYXN0CiAJCQkJKiBIaXBlclNvY2tldHMuCiAJCQkJKi8KIAkJCQlxLT51Lm91dC51c2VfZW5oX3NpZ2EgPSAwOwotCQkJCXdoaWxlIChjb3VudC0tKQotCQkJCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCQl3aGlsZSAoY291bnQtLSkgeworCQkJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCQlpZiAocmMpCisJCQkJCQlnb3RvIG91dDsKKwkJCQl9CiAJCQl9Ci0KLQkJLyogcmVwb3J0IENDPTIgY29uZGl0aW9ucyBzeW5jaHJvbm91c2x5ICovCi0JCWlmIChxLT5xZGlvX2Vycm9yKQotCQkJX19xZGlvX291dGJvdW5kX3Byb2Nlc3NpbmcocSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU1MCwxNCArMTUyOCwxNCBAQAogCS8qIHRyeSB0byBmYXN0IHJlcXVldWUgYnVmZmVycyAqLwogCWdldF9idWZfc3RhdGUocSwgcHJldl9idWYoYnVmbnIpLCAmc3RhdGUsIDApOwogCWlmIChzdGF0ZSAhPSBTTFNCX0NVX09VVFBVVF9QUklNRUQpCi0JCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCWVsc2UgewogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiZmFzdC1yZXEiKTsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmZhc3RfcmVxdWV1ZSk7CiAJfQogb3V0OgotCS8qIEZpeG1lOiBjb3VsZCB3YWl0IGZvcmV2ZXIgaWYgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovCiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTE1OTYsMTQgKzE1NzQsMTIgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfU1lOQ19JTlBVVCkKLQkJaGFuZGxlX2luYm91bmQoaXJxX3B0ci0+aW5wdXRfcXNbcV9ucl0sIGNhbGxmbGFncywgYnVmbnIsCi0JCQkgICAgICAgY291bnQpOworCQlyZXR1cm4gaGFuZGxlX2luYm91bmQoaXJxX3B0ci0+aW5wdXRfcXNbcV9ucl0sCisJCQkJICAgICAgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOwogCWVsc2UgaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX09VVFBVVCkKLQkJaGFuZGxlX291dGJvdW5kKGlycV9wdHItPm91dHB1dF9xc1txX25yXSwgY2FsbGZsYWdzLCBidWZuciwKLQkJCQljb3VudCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwkJcmV0dXJuIGhhbmRsZV9vdXRib3VuZChpcnFfcHRyLT5vdXRwdXRfcXNbcV9ucl0sCisJCQkJICAgICAgIGNhbGxmbGFncywgYnVmbnIsIGNvdW50KTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRvX1FESU8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IGMwODM1NmIuLjE4ZDU0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0xMTcsNyArMTE3LDYgQEAKIAlxLT5tYXNrID0gMSA8PCAoMzEgLSBpKTsKIAlxLT5uciA9IGk7CiAJcS0+aGFuZGxlciA9IGhhbmRsZXI7Ci0Jc3Bpbl9sb2NrX2luaXQoJnEtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9zdG9yYWdlX2xpc3RzKHN0cnVjdCBxZGlvX3EgKnEsIHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCmluZGV4IDhlOTBlMTQuLmM2NTVkMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAvKiBsaXN0IG9mIHRoaW4gaW50ZXJydXB0IGlucHV0IHF1ZXVlcyAqLwogc3RhdGljIExJU1RfSEVBRCh0aXFfbGlzdCk7CitERUZJTkVfTVVURVgodGlxX2xpc3RfbG9jayk7CiAKIC8qIGFkYXB0ZXIgbG9jYWwgc3VtbWFyeSBpbmRpY2F0b3IgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyICp0aXFkaW9fYWxzaTsKQEAgLTk1LDEyICs5NiwxMSBAQAogCWlmICghY3NzX3FkaW9fb21pdF9zdnMgJiYgaXJxX3B0ci0+c2lnYV9mbGFnLnN5bmMpCiAJCWNzc19xZGlvX29taXRfc3ZzID0gMTsKIAotCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpIHsKKwltdXRleF9sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKKwlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQogCQlsaXN0X2FkZF9yY3UoJnEtPmVudHJ5LCAmdGlxX2xpc3QpOwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQl9CisJbXV0ZXhfdW5sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAl4Y2hnKGlycV9wdHItPmRzY2ksIDEpOwotCXRhc2tsZXRfc2NoZWR1bGUoJnRpcWRpb190YXNrbGV0KTsKIH0KIAogLyoKQEAgLTExOCw3ICsxMTgsMTAgQEAKIAkJLyogaWYgZXN0YWJsaXNoIHRyaWdnZXJlZCBhbiBlcnJvciAqLwogCQlpZiAoIXEgfHwgIXEtPmVudHJ5LnByZXYgfHwgIXEtPmVudHJ5Lm5leHQpCiAJCQljb250aW51ZTsKKworCQltdXRleF9sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAkJbGlzdF9kZWxfcmN1KCZxLT5lbnRyeSk7CisJCW11dGV4X3VubG9jaygmdGlxX2xpc3RfbG9jayk7CiAJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIH0KQEAgLTE1NSwxNSArMTU4LDE1IEBACiAJICovCiAJcWRpb19jaGVja19vdXRib3VuZF9hZnRlcl90aGluaW50KHEpOwogCi1hZ2FpbjoKIAlpZiAoIXFkaW9faW5ib3VuZF9xX21vdmVkKHEpKQogCQlyZXR1cm47CiAKLQlxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHEpOworCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCiAJaWYgKCF0aXFkaW9faW5ib3VuZF9xX2RvbmUocSkpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRoaW5pbnRfaW5ib3VuZF9sb29wKTsKLQkJZ290byBhZ2FpbjsKKwkJaWYgKGxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCX0KIAogCXFkaW9fc3RvcF9wb2xsaW5nKHEpOwpAQCAtMTczLDcgKzE3Niw4IEBACiAJICovCiAJaWYgKCF0aXFkaW9faW5ib3VuZF9xX2RvbmUocSkpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRoaW5pbnRfaW5ib3VuZF9sb29wMik7Ci0JCWdvdG8gYWdhaW47CisJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CiB9CiAKQEAgLTM2NiwxMCArMzcwLDExIEBACiAKIHZvaWQgX19leGl0IHRpcWRpb191bnJlZ2lzdGVyX3RoaW5pbnRzKHZvaWQpCiB7Ci0JdGFza2xldF9kaXNhYmxlKCZ0aXFkaW9fdGFza2xldCk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmdGlxX2xpc3QpKTsKIAogCWlmICh0aXFkaW9fYWxzaSkgewogCQlzMzkwX3VucmVnaXN0ZXJfYWRhcHRlcl9pbnRlcnJ1cHQodGlxZGlvX2Fsc2ksIFFESU9fQUlSUV9JU0MpOwogCQlpc2NfdW5yZWdpc3RlcihRRElPX0FJUlFfSVNDKTsKIAl9CisJdGFza2xldF9raWxsKCZ0aXFkaW9fdGFza2xldCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCmluZGV4IGNiMjJiOTcuLjY1YjZhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlpZiAobCA9PSB6ZGV2LT5saXN0LnByZXYpCiAJCXJldHVybjsKIAkvKiBNb3ZlIHpkZXYgYmVoaW5kIGwgKi8KLQlsaXN0X2RlbCgmemRldi0+bGlzdCk7Ci0JbGlzdF9hZGQoJnpkZXYtPmxpc3QsIGwpOworCWxpc3RfbW92ZSgmemRldi0+bGlzdCwgbCk7CiB9CiAKIC8qKgpAQCAtMTU3LDggKzE1Niw3IEBACiAJaWYgKGwgPT0gemRldi0+bGlzdC5uZXh0KQogCQlyZXR1cm47CiAJLyogTW92ZSB6ZGV2IGJlZm9yZSBsICovCi0JbGlzdF9kZWwoJnpkZXYtPmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJnpkZXYtPmxpc3QsIGwpOworCWxpc3RfbW92ZV90YWlsKCZ6ZGV2LT5saXN0LCBsKTsKIH0KIAogc3RhdGljIHZvaWQgemNyeXB0X2RldmljZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwppbmRleCBlN2ExZTIyLi5jMjBkNDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwpAQCAtNzgxLDggKzc4MSw3IEBACiAJCS8qIFNpZ25hbCBwZW5kaW5nLiAqLwogCQlhcF9jYW5jZWxfbWVzc2FnZSh6ZGV2LT5hcF9kZXYsICZhcF9tc2cpOwogb3V0X2ZyZWU6Ci0JbWVtc2V0KGFwX21zZy5tZXNzYWdlLCAweDAsIGFwX21zZy5sZW5ndGgpOwotCWtmcmVlKGFwX21zZy5tZXNzYWdlKTsKKwlremZyZWUoYXBfbXNnLm1lc3NhZ2UpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2ViY2RpYy5jIGIvZHJpdmVycy9zMzkwL2ViY2RpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWM5OGRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9lYmNkaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvZWJjZGljLmMKLSAqICAgIEVDQkRJQyAtPiBBU0NJSSwgQVNDSUkgLT4gRUNCRElDIGNvbnZlcnNpb24gdGFibGVzLgotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotLyoKLSAqIEFTQ0lJIC0+IEVCQ0RJQwotICovCi1fX3U4IF9hc2NlYmNbMjU2XSA9Ci17Ci0gLyowMCAgTkwgICAgU0ggICAgU1ggICAgRVggICAgRVQgICAgTlEgICAgQUsgICAgQkwgKi8KLSAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgzNywgMHgyRCwgMHgyRSwgMHgyRiwKLSAvKjA4ICBCUyAgICBIVCAgICBMRiAgICBWVCAgICBGRiAgICBDUiAgICBTTyAgICBTSSAqLwotICAgICAweDE2LCAweDA1LCAweDE1LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotIC8qMTAgIERMICAgIEQxICAgIEQyICAgIEQzICAgIEQ0ICAgIE5LICAgIFNOICAgIEVCICovCi0gICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4M0MsIDB4MTUsIDB4MzIsIDB4MjYsCi0gLyoxOCAgQ04gICAgRU0gICAgU0IgICAgRUMgICAgRlMgICAgR1MgICAgUlMgICAgVVMgKi8KLSAgICAgMHgxOCwgMHgxOSwgMHgzRiwgMHgyNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwKLSAvKjIwICBTUCAgICAgISAgICAgIiAgICAgIyAgICAgJCAgICAgJSAgICAgJiAgICAgJyAqLwotICAgICAweDQwLCAweDVBLCAweDdGLCAweDdCLCAweDVCLCAweDZDLCAweDUwLCAweDdELAotIC8qMjggICAoICAgICApICAgICAqICAgICArICAgICAsICAgICAtICAgIC4gICAgICAvICovCi0gICAgIDB4NEQsIDB4NUQsIDB4NUMsIDB4NEUsIDB4NkIsIDB4NjAsIDB4NEIsIDB4NjEsCi0gLyozMCAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNywKLSAvKjM4ICAgOCAgICAgOSAgICAgOiAgICAgOyAgICAgPCAgICAgPSAgICAgPiAgICAgPyAqLwotICAgICAweEY4LCAweEY5LCAweDdBLCAweDVFLCAweDRDLCAweDdFLCAweDZFLCAweDZGLAotIC8qNDAgICBAICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgIDB4N0MsIDB4QzEsIDB4QzIsIDB4QzMsIDB4QzQsIDB4QzUsIDB4QzYsIDB4QzcsCi0gLyo0OCAgIEggICAgIEkgICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gKi8KLSAgICAgMHhDOCwgMHhDOSwgMHhEMSwgMHhEMiwgMHhEMywgMHhENCwgMHhENSwgMHhENiwKLSAvKjUwICAgUCAgICAgUSAgICAgUiAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAqLwotICAgICAweEQ3LCAweEQ4LCAweEQ5LCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LAotIC8qNTggICBYICAgICBZICAgICBaICAgICBbICAgICBcICAgICBdICAgICBeICAgICBfICovCi0gICAgIDB4RTcsIDB4RTgsIDB4RTksIDB4QUQsIDB4RTAsIDB4QkQsIDB4NUYsIDB4NkQsCi0gLyo2MCAgIGAgICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KLSAgICAgMHg3OSwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKLSAvKjY4ICAgaCAgICAgaSAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAqLwotICAgICAweDg4LCAweDg5LCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LAotIC8qNzAgICBwICAgICBxICAgICByICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICovCi0gICAgIDB4OTcsIDB4OTgsIDB4OTksIDB4QTIsIDB4QTMsIDB4QTQsIDB4QTUsIDB4QTYsCi0gLyo3OCAgIHggICAgIHkgICAgIHogICAgIHsgICAgIHwgICAgIH0gICAgIH4gICAgREwgKi8KLSAgICAgMHhBNywgMHhBOCwgMHhBOSwgMHhDMCwgMHg0RiwgMHhEMCwgMHhBMSwgMHgwNywKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHhGRgotfTsKLQotLyoKLSAqIEVCQ0RJQyAtPiBBU0NJSQotICovCi1fX3U4IF9lYmNhc2NbMjU2XSA9Ci17Ci0gLyogMHgwMCAgIE5VTCAgIFNPSCAgIFNUWCAgIEVUWCAgKlNFTCAgICBIVCAgKlJOTCAgIERFTCAqLwotICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MDksIDB4MDcsIDB4N0YsCi0gLyogMHgwOCAgIC1HRSAgLVNQUyAgLVJQVCAgICBWVCAgICBGRiAgICBDUiAgICBTTyAgICBTSSAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gLyogMHgxMCAgIERMRSAgIERDMSAgIERDMiAgIERDMyAgLVJFUyAgIC1OTCAgICBCUyAgLVBPQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FTlAgIC0+TEYgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDA3LCAweDBBLCAweDA4LCAweDA3LAotIC8qIDB4MTggICBDQU4gICAgRU0gIC1VQlMgIC1DVTEgIC1JRlMgIC1JR1MgIC1JUlMgIC1JVEIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSVVTICovCi0gICAgICAgICAgMHgxOCwgMHgxOSwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweDIwICAgLURTICAtU09TICAgIEZTICAtV1VTICAtQllQICAgIExGICAgRVRCICAgRVNDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlOUCAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MUMsIDB4MDcsIDB4MDcsIDB4MEEsIDB4MTcsIDB4MUIsCi0gLyogMHgyOCAgIC1TQSAgLVNGRSAgIC1TTSAgLUNTUCAgLU1GQSAgIEVOUSAgIEFDSyAgIEJFTAotICAgICAgICAgICAgICAgICAgICAgICAtU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNSwgMHgwNiwgMHgwNywKLSAvKiAweDMwICAtLS0tICAtLS0tICAgU1lOICAgLUlSICAgLVBQICAtVFJOICAtTkJTICAgRU9UICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxNiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNCwKLSAvKiAweDM4ICAtU0JTICAgLUlUICAtUkZGICAtQ1UzICAgREM0ICAgTkFLICAtLS0tICAgU1VCICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgxNCwgMHgxNSwgMHgwNywgMHgxQSwKLSAvKiAweDQwICAgIFNQICAgUlNQICAgICAgICAgICCB5CAgICAgICAgICAgICAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MjAsIDB4RkYsIDB4ODMsIDB4ODQsIDB4ODUsIDB4QTAsIDB4MDcsIDB4ODYsCi0gLyogMHg0OCAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgPCAgICAgKCAgICAgKyAgICAgfCAqLwotICAgICAgICAgIDB4ODcsIDB4QTQsIDB4OUIsIDB4MkUsIDB4M0MsIDB4MjgsIDB4MkIsIDB4N0MsCi0gLyogMHg1MCAgICAgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4MjYsIDB4ODIsIDB4ODgsIDB4ODksIDB4OEEsIDB4QTEsIDB4OEMsIDB4MDcsCi0gLyogMHg1OCAgICAgICAgICAggd8gICAgICEgICAgICQgICAgICogICAgICkgICAgIDsgICAgICAgKi8KLSAgICAgICAgICAweDhELCAweEUxLCAweDIxLCAweDI0LCAweDJBLCAweDI5LCAweDNCLCAweEFBLAotIC8qIDB4NjAgICAgIC0gICAgIC8gIC0tLS0gICAgIIHEICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyRCwgMHgyRiwgMHgwNywgMHg4RSwgMHgwNywgMHgwNywgMHgwNywgMHg4RiwKLSAvKiAweDY4ICAgICAgICAgICAgICAtLS0tICAgICAsICAgICAlICAgICBfICAgICA+ICAgICA/ICovIAotICAgICAgICAgIDB4ODAsIDB4QTUsIDB4MDcsIDB4MkMsIDB4MjUsIDB4NUYsIDB4M0UsIDB4M0YsCi0gLyogMHg3MCAgLS0tLSAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MDcsIDB4OTAsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHg3OCAgICAgKiAgICAgYCAgICAgOiAgICAgIyAgICAgQCAgICAgJyAgICAgPSAgICAgIiAqLwotICAgICAgICAgIDB4NzAsIDB4NjAsIDB4M0EsIDB4MjMsIDB4NDAsIDB4MjcsIDB4M0QsIDB4MjIsCi0gLyogMHg4MCAgICAgKiAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAgICAgIDB4MDcsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0gLyogMHg4OCAgICAgaCAgICAgaSAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NjgsIDB4NjksIDB4QUUsIDB4QUYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4RjEsCi0gLyogMHg5MCAgICAggbAgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gICAgIHAgKi8KLSAgICAgICAgICAweEY4LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotIC8qIDB4OTggICAgIHEgICAgIHIgICAgICAgICAgICAgICAgICAgIC0tLS0gICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweEE2LCAweEE3LCAweDkxLCAweDA3LCAweDkyLCAweDA3LAotIC8qIDB4QTAgICAgICAgICAgIH4gICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgICAgIHggKi8KLSAgICAgICAgICAweEU2LCAweDdFLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotIC8qIDB4QTggICAgIHkgICAgIHogICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEFELCAweEFCLCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4QjAgICAgIF4gICAgICAgICAgICAgICAgICAgIC0tLS0gICAgIIGnICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg1RSwgMHg5QywgMHg5RCwgMHhGQSwgMHgwNywgMHgwNywgMHgwNywgMHhBQywKLSAvKiAweEI4ICAgICAgICAtLS0tICAgICBbICAgICBdICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHhBQiwgMHgwNywgMHg1QiwgMHg1RCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweEMwICAgICB7ICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgICAgICAgMHg3QiwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKLSAvKiAweEM4ICAgICBIICAgICBJICAtLS0tICAgICAgICAgICCB9iAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NDgsIDB4NDksIDB4MDcsIDB4OTMsIDB4OTQsIDB4OTUsIDB4QTIsIDB4MDcsCi0gLyogMHhEMCAgICAgfSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAgICAgUCAqLwotICAgICAgICAgIDB4N0QsIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCi0gLyogMHhEOCAgICAgUSAgICAgUiAgLS0tLSAgICAgICAgICAggfwgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDUxLCAweDUyLCAweDA3LCAweDk2LCAweDgxLCAweDk3LCAweEEzLCAweDk4LAotIC8qIDB4RTAgICAgIFwgICAgICAgICAgIFMgICAgIFQgICAgIFUgICAgIFYgICAgIFcgICAgIFggKi8KLSAgICAgICAgICAweDVDLCAweEY2LCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAotIC8qIDB4RTggICAgIFkgICAgIFogICAgICAgIC0tLS0gICAgIIHWICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg1OSwgMHg1QSwgMHhGRCwgMHgwNywgMHg5OSwgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweEYwICAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgICAgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLSAvKiAweEY4ICAgICA4ICAgICA5ICAtLS0tICAtLS0tICAgICCB3CAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MzgsIDB4MzksIDB4MDcsIDB4MDcsIDB4OUEsIDB4MDcsIDB4MDcsIDB4MDcKLX07Ci0KLS8qCi0gKiBFQkNESUMgKGNhcGl0YWxzKSAtPiBBU0NJSSAoc21hbGwgY2FzZSkKLSAqLwotX191OCBfZWJjYXNjX3JlZHVjZV9jYXNlWzI1Nl0gPQotewotIC8qIDB4MDAgICBOVUwgICBTT0ggICBTVFggICBFVFggICpTRUwgICAgSFQgICpSTkwgICBERUwgKi8KLSAgICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA3LCAweDA5LCAweDA3LCAweDdGLAotCi0gLyogMHgwOCAgIC1HRSAgLVNQUyAgLVJQVCAgICBWVCAgICBGRiAgICBDUiAgICBTTyAgICBTSSAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0KLSAvKiAweDEwICAgRExFICAgREMxICAgREMyICAgREMzICAtUkVTICAgLU5MICAgIEJTICAtUE9DCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUVOUCAgLT5MRiAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MDcsIDB4MEEsIDB4MDgsIDB4MDcsCi0KLSAvKiAweDE4ICAgQ0FOICAgIEVNICAtVUJTICAtQ1UxICAtSUZTICAtSUdTICAtSVJTICAtSVRCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlVUyAqLwotICAgICAgICAgIDB4MTgsIDB4MTksIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweDIwICAgLURTICAtU09TICAgIEZTICAtV1VTICAtQllQICAgIExGICAgRVRCICAgRVNDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlOUCAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MUMsIDB4MDcsIDB4MDcsIDB4MEEsIDB4MTcsIDB4MUIsCi0KLSAvKiAweDI4ICAgLVNBICAtU0ZFICAgLVNNICAtQ1NQICAtTUZBICAgRU5RICAgQUNLICAgQkVMCi0gICAgICAgICAgICAgICAgICAgICAgIC1TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA1LCAweDA2LCAweDA3LAotCi0gLyogMHgzMCAgLS0tLSAgLS0tLSAgIFNZTiAgIC1JUiAgIC1QUCAgLVRSTiAgLU5CUyAgIEVPVCAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MTYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDQsCi0KLSAvKiAweDM4ICAtU0JTICAgLUlUICAtUkZGICAtQ1UzICAgREM0ICAgTkFLICAtLS0tICAgU1VCICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgxNCwgMHgxNSwgMHgwNywgMHgxQSwKLQotIC8qIDB4NDAgICAgU1AgICBSU1AgICAgICAgICAgIIHkICAgICAgICAgICAgICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyMCwgMHhGRiwgMHg4MywgMHg4NCwgMHg4NSwgMHhBMCwgMHgwNywgMHg4NiwKLQotIC8qIDB4NDggICAgICAgICAgICAgICAgICAgICAgIC4gICAgIDwgICAgICggICAgICsgICAgIHwgKi8KLSAgICAgICAgICAweDg3LCAweEE0LCAweDlCLCAweDJFLCAweDNDLCAweDI4LCAweDJCLCAweDdDLAotCi0gLyogMHg1MCAgICAgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4MjYsIDB4ODIsIDB4ODgsIDB4ODksIDB4OEEsIDB4QTEsIDB4OEMsIDB4MDcsCi0KLSAvKiAweDU4ICAgICAgICAgICCB3yAgICAgISAgICAgJCAgICAgKiAgICAgKSAgICAgOyAgICAgICAqLwotICAgICAgICAgIDB4OEQsIDB4RTEsIDB4MjEsIDB4MjQsIDB4MkEsIDB4MjksIDB4M0IsIDB4QUEsCi0KLSAvKiAweDYwICAgICAtICAgICAvICAtLS0tICAgICCBxCAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MkQsIDB4MkYsIDB4MDcsIDB4ODQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OEYsCi0KLSAvKiAweDY4ICAgICAgICAgICAgICAtLS0tICAgICAsICAgICAlICAgICBfICAgICA+ICAgICA/ICovIAotICAgICAgICAgIDB4ODAsIDB4QTUsIDB4MDcsIDB4MkMsIDB4MjUsIDB4NUYsIDB4M0UsIDB4M0YsCi0KLSAvKiAweDcwICAtLS0tICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgwNywgMHg5MCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4NzggICAgICogICAgIGAgICAgIDogICAgICMgICAgIEAgICAgICcgICAgID0gICAgICIgKi8KLSAgICAgICAgICAweDcwLCAweDYwLCAweDNBLCAweDIzLCAweDQwLCAweDI3LCAweDNELCAweDIyLAotCi0gLyogMHg4MCAgICAgKiAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAgICAgIDB4MDcsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0KLSAvKiAweDg4ICAgICBoICAgICBpICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHhBRSwgMHhBRiwgMHgwNywgMHgwNywgMHgwNywgMHhGMSwKLQotIC8qIDB4OTAgICAgIIGwICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICAgICBwICovCi0gICAgICAgICAgMHhGOCwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgMHg3MCwKLQotIC8qIDB4OTggICAgIHEgICAgIHIgICAgICAgICAgICAgICAgICAgIC0tLS0gICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweEE2LCAweEE3LCAweDkxLCAweDA3LCAweDkyLCAweDA3LAotCi0gLyogMHhBMCAgICAgICAgICAgfiAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAgICAgeCAqLwotICAgICAgICAgIDB4RTYsIDB4N0UsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0KLSAvKiAweEE4ICAgICB5ICAgICB6ICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg3OSwgMHg3QSwgMHhBRCwgMHhBQiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4QjAgICAgIF4gICAgICAgICAgICAgICAgICAgIC0tLS0gICAgIIGnICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg1RSwgMHg5QywgMHg5RCwgMHhGQSwgMHgwNywgMHgwNywgMHgwNywgMHhBQywKLQotIC8qIDB4QjggICAgICAgIC0tLS0gICAgIFsgICAgIF0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweEFCLCAweDA3LCAweDVCLCAweDVELCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhDMCAgICAgeyAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLwotICAgICAgICAgIDB4N0IsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0KLSAvKiAweEM4ICAgICBIICAgICBJICAtLS0tICAgICAgICAgICCB9iAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NjgsIDB4NjksIDB4MDcsIDB4OTMsIDB4OTQsIDB4OTUsIDB4QTIsIDB4MDcsCi0KLSAvKiAweEQwICAgICB9ICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICAgICBQICovCi0gICAgICAgICAgMHg3RCwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgMHg3MCwKLQotIC8qIDB4RDggICAgIFEgICAgIFIgIC0tLS0gICAgICAgICAgIIH8ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHg3MSwgMHg3MiwgMHgwNywgMHg5NiwgMHg4MSwgMHg5NywgMHhBMywgMHg5OCwKLQotIC8qIDB4RTAgICAgIFwgICAgICAgICAgIFMgICAgIFQgICAgIFUgICAgIFYgICAgIFcgICAgIFggKi8KLSAgICAgICAgICAweDVDLCAweEY2LCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotCi0gLyogMHhFOCAgICAgWSAgICAgWiAgICAgICAgLS0tLSAgICAggdYgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEZELCAweDA3LCAweDk0LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhGMCAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAgICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0KLSAvKiAweEY4ICAgICA4ICAgICA5ICAtLS0tICAtLS0tICAgICCB3CAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MzgsIDB4MzksIDB4MDcsIDB4MDcsIDB4ODEsIDB4MDcsIDB4MDcsIDB4MDcKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQppbmRleCA2MzgyYzA0Li45NmVkZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiBvYmotJChDT05GSUdfU01TR0lVQ1YpICs9IHNtc2dpdWN2Lm8KIG9iai0kKENPTkZJR19MQ1MpICs9IGxjcy5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfQ0xBVykgKz0gY2xhdy5vIGN1MzA4OC5vCi1xZXRoLXkgKz0gcWV0aF9jb3JlX3N5cy5vIHFldGhfY29yZV9tYWluLm8gcWV0aF9jb3JlX21wYy5vIHFldGhfY29yZV9vZmZsLm8KK3FldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8KIG9iai0kKENPTkZJR19RRVRIKSArPSBxZXRoLm8KIHFldGhfbDIteSArPSBxZXRoX2wyX21haW4ubwogb2JqLSQoQ09ORklHX1FFVEhfTDIpICs9IHFldGhfbDIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCBmNWU2MTg1Li4zMGE0M2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtNjAsNiArNjAsOSBAQAogICogICAgMS4yNSAgQWRkZWQgUGFja2luZyBzdXBwb3J0CiAgKiAgICAxLjUKICAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJjbGF3IgorCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jY3dncm91cC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgpAQCAtOTQsNyArOTcsNyBAQAogICAgQ0xBVyB1c2VzIHRoZSBzMzkwZGJmIGZpbGUgc3lzdGVtICBzZWUgY2xhd190cmFjZSBhbmQgY2xhd19zZXR1cAogKi8KIAotCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9ICJDTEFXIGRyaXZlciI7CiBzdGF0aWMgY2hhciBkZWJ1Z19idWZmZXJbMjU1XTsKIC8qKgogICogRGVidWcgRmFjaWxpdHkgU3R1ZmYKQEAgLTIwNiwyMCArMjA5LDMwIEBACiBzdGF0aWMgaW50IHBhZ2VzX3RvX29yZGVyX29mX21hZyhpbnQgbnVtX29mX3BhZ2VzKTsKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2xhd19wYWNrX3NrYihzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHIpOwogLyogc3lzZnMgRnVuY3Rpb25zICovCi1zdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIHN0YXRpYyBpbnQgY2xhd19hZGRfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGNsYXdfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0yOTgsOCArMzExLDggQEAKIAlpZiAocmMpIHsKIAkJcHJvYmVfZXJyb3IoY2dkZXYpOwogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWRkX2ZpbGVzIGZhaWxlZCAlcyAlcyBFeGl0IExpbmUgJWQgXG4iLAotCQkJZGV2X25hbWUoJmNnZGV2LT5jZGV2WzBdLT5kZXYpLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlkZXZfZXJyKCZjZ2Rldi0+ZGV2LCAiQ3JlYXRpbmcgdGhlIC9wcm9jIGZpbGVzIGZvciBhIG5ldyIKKwkJIiBDTEFXIGRldmljZSBmYWlsZWRcbiIpOwogCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgInByb2JleCVkIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMzM1LDYgKzM0OCw4IEBACiAgICAgICAgIHJjPWNsYXdfaHdfdHgoIHNrYiwgZGV2LCAxICk7CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHBfY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogCUNMQVdfREJGX1RFWFRfKDQsIHRyYWNlLCAiY2xhd3R4JWQiLCByYyk7CisJaWYgKHJjKQorCQlyYyA9IE5FVERFVl9UWF9CVVNZOwogICAgICAgICByZXR1cm4gcmM7CiB9ICAgLyogIGVuZCBvZiBjbGF3X3R4ICovCiAKQEAgLTQ5Niw3ICs1MTEsOCBAQAogICAgICAgICAgICB+KERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkgIT0gMHgwMCkgfHwKICAgICAgICAgICAgKCgocHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5mbGFnIHwKIAkgICAJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0uZmxhZykgJiBDTEFXX1RJTUVSKSAhPSAweDAwKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiByZW1vdGUgc2lkZSBpcyBub3QgcmVhZHlcbiIsIGRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldiwKKwkJCSIlczogcmVtb3RlIHNpZGUgaXMgbm90IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAibm90cmR5Iik7CiAKICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDI7ICBpKyspIHsKQEAgLTU4MiwxMCArNTk4LDkgQEAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xhd2lycSIpOwogICAgICAgICAvKiBCeXBhc3MgYWxsICd1bnNvbGljaXRlZCBpbnRlcnJ1cHRzJyAqLwogCWlmICghY2Rldi0+ZGV2LmRyaXZlcl9kYXRhKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogdW5zb2xpY2l0ZWQgaW50ZXJydXB0IGZvciBkZXZpY2U6IgotCQkgCSIlcyByZWNlaXZlZCBjLSUwMnggZC0lMDJ4XG4iLAotCQkgICAgICAgZGV2X25hbWUoJmNkZXYtPmRldiksIGlyYi0+c2Nzdy5jbWQuY3N0YXQsCi0JCSAgICAgICBpcmItPnNjc3cuY21kLmRzdGF0KTsKKwkJZGV2X3dhcm4oJmNkZXYtPmRldiwgIkFuIHVuaW5pdGlhbGl6ZWQgQ0xBVyBkZXZpY2UgcmVjZWl2ZWQgYW4iCisJCQkiIElSUSwgYy0lMDJ4IGQtJTAyeFxuIiwKKwkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiYmFkaXJxIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01OTcsOCArNjEyLDcgQEAKIAllbHNlIGlmIChwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5jZGV2ID09IGNkZXYpCiAJCXBfY2ggPSAmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IENhbid0IGRldGVybWluZSBjaGFubmVsIGZvciAiCi0JCQkiaW50ZXJydXB0LCBkZXZpY2UgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJZGV2X3dhcm4oJmNkZXYtPmRldiwgIlRoZSBkZXZpY2UgaXMgbm90IGEgQ0xBVyBkZXZpY2VcbiIpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiYmFkY2hhbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNjEyLDcgKzYyNiw4IEBACiAKIAkvKiBDaGVjayBmb3IgZ29vZCBzdWJjaGFubmVsIHJldHVybiBjb2RlLCBvdGhlcndpc2UgaW5mbyBtZXNzYWdlICovCiAJaWYgKGlyYi0+c2Nzdy5jbWQuY3N0YXQgJiYgIShpcmItPnNjc3cuY21kLmNzdGF0ICYgU0NITl9TVEFUX1BDSSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogc3ViY2hhbm5lbCBjaGVjayBmb3IgZGV2aWNlOiAlMDR4IC0iCisJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkiJXM6IHN1YmNoYW5uZWwgY2hlY2sgZm9yIGRldmljZTogJTA0eCAtIgogCQkJIiBTY2ggU3RhdCAlMDJ4ICBEZXYgU3RhdCAlMDJ4IENQQSAtICUwNHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfY2gtPmRldm5vLAogCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5kc3RhdCwKQEAgLTY1MSw3ICs2NjYsNyBAQAogCQkJd2FrZV91cCgmcF9jaC0+d2FpdCk7IC8qIHdha2UgY2xhd19vcGVuIChSRUFEKSovCiAJCX0gZWxzZSBpZiAocF9jaC0+ZmxhZyA9PSBDTEFXX1dSSVRFKSB7CiAJCQlwX2NoLT5jbGF3X3N0YXRlID0gQ0xBV19TVEFSVF9XUklURTsKLQkJCS8qCXNlbmQgU1lTVEVNX1ZBTElEQVRFCQkJKi8KKwkJCS8qICAgICAgc2VuZCBTWVNURU1fVkFMSURBVEUgICAgICAgICAgICAgICAgICAgICovCiAJCQljbGF3X3N0cnRfcmVhZChkZXYsIExPQ0tfTk8pOwogCQkJY2xhd19zZW5kX2NvbnRyb2woZGV2LAogCQkJCVNZU1RFTV9WQUxJREFURV9SRVFVRVNULApAQCAtNjU5LDEwICs2NzQsOSBAQAogCQkJCXBfZW52LT5ob3N0X25hbWUsCiAJCQkJcF9lbnYtPmFkYXB0ZXJfbmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiB1bnNvbGljaXRlZCAiCi0JCQkJImludGVycnVwdCBmb3IgZGV2aWNlOiIKLQkJCQkiJXMgcmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwKKwkJCWRldl93YXJuKCZjZGV2LT5kZXYsICJUaGUgQ0xBVyBkZXZpY2UgcmVjZWl2ZWQiCisJCQkJIiBhbiB1bmV4cGVjdGVkIElSUSwgIgorCQkJCSJjLSUwMnggZC0lMDJ4XG4iLAogCQkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsCiAJCQkJaXJiLT5zY3N3LmNtZC5kc3RhdCk7CiAJCQlyZXR1cm47CkBAIC02NzcsOCArNjkxLDggQEAKIAkJCSAgICAocF9jaC0+aXJiLT5lY3dbMF0gJiAweDQwKSA9PSAweDQwIHx8CiAJCQkgICAgKHBfY2gtPmlyYi0+ZWN3WzBdKSAgICAgICAgPT0gMCkgewogCQkJCXByaXZwdHItPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXN0YXJ0IGlzICIKLQkJCQkJInJlcXVpcmVkIGFmdGVyIHJlbW90ZSAiCisJCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkJIiVzOiBSZXN0YXJ0IGlzIHJlcXVpcmVkIGFmdGVyIHJlbW90ZSAiCiAJCQkJCSJzaWRlIHJlY292ZXJzIFxuIiwKIAkJCQkJZGV2LT5uYW1lKTsKIAkJCX0KQEAgLTcxMywxMSArNzI3LDEzIEBACiAJCXJldHVybjsKIAljYXNlIENMQVdfU1RBUlRfV1JJVEU6CiAJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgQ2hlY2sgT2NjdXJlZCBpbiAiCisJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCSIlczogVW5pdCBDaGVjayBPY2N1cmVkIGluICIKIAkJCQkid3JpdGUgY2hhbm5lbFxuIiwgZGV2LT5uYW1lKTsKIAkJCWNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwogCQkJaWYgKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg4MCkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXNldHRpbmcgRXZlbnQgIgorCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJCSIlczogUmVzZXR0aW5nIEV2ZW50ICIKIAkJCQkJIm9jY3VycmVkOlxuIiwgZGV2LT5uYW1lKTsKIAkJCQlpbml0X3RpbWVyKCZwX2NoLT50aW1lcik7CiAJCQkJcF9jaC0+dGltZXIuZnVuY3Rpb24gPQpAQCAtNzI1LDcgKzc0MSw4IEBACiAJCQkJcF9jaC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBfY2g7CiAJCQkJcF9jaC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAxMCpIWjsKIAkJCQlhZGRfdGltZXIoJnBfY2gtPnRpbWVyKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogd3JpdGUgY29ubmVjdGlvbiAiCisJCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkJIiVzOiB3cml0ZSBjb25uZWN0aW9uICIKIAkJCQkJInJlc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CiAJCQl9CiAJCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAicnN0cnR3cnQiKTsKQEAgLTczMyw5ICs3NTAsMTAgQEAKIAkJfQogCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfRVhDRVApIHsKIAkJCWNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgRXhjZXB0aW9uICIKLQkJCSAgICAgICAiT2NjdXJlZCBpbiB3cml0ZSBjaGFubmVsXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCSIlczogVW5pdCBFeGNlcHRpb24gIgorCQkJCSJvY2N1cnJlZCBpbiB3cml0ZSBjaGFubmVsXG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJaWYgKCEoKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpIHx8CiAJCShwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsID09IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpIHx8CkBAIC03NTcsOCArNzc1LDkgQEAKIAkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIlN0V3RFeGl0Iik7CiAJCXJldHVybjsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd3Jvbmcgc2VsZWN0aW9uIGNvZGUgLSBpcnEgIgotCQkJInN0YXRlPSVkXG4iLCBkZXYtPm5hbWUsIHBfY2gtPmNsYXdfc3RhdGUpOworCQlkZXZfd2FybigmY2Rldi0+ZGV2LAorCQkJIlRoZSBDTEFXIGRldmljZSBmb3IgJXMgcmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBJUlFcbiIsCisJCQkgZGV2LT5uYW1lKTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZElSUSIpOwogCQlyZXR1cm47CiAgICAgICAgIH0KQEAgLTkxMCw4ICs5MjksMTAgQEAKICAgICAgICAgaWYgKCgocHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5sYXN0X2RzdGF0IHwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0ubGFzdF9kc3RhdCkgJgogCQl+KERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkgIT0gMHgwMCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjaGFubmVsIHByb2JsZW1zIGR1cmluZyBjbG9zZSAtICIKLQkJCSJyZWFkOiAlMDJ4IC0gIHdyaXRlOiAlMDJ4XG4iLAorCQlkZXZfd2FybigmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXYsCisJCQkiRGVhY3RpdmF0aW5nICVzIGNvbXBsZXRlZCB3aXRoIGluY29ycmVjdCIKKwkJCSIgc3ViY2hhbm5lbCBzdGF0dXMgIgorCQkJIihyZWFkICUwMngsIHdyaXRlICUwMngpXG4iLAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5sYXN0X2RzdGF0LAogCQlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5sYXN0X2RzdGF0KTsKQEAgLTEwMTIsNyArMTAzMyw3IEBACiBwYWdlc190b19vcmRlcl9vZl9tYWcoaW50IG51bV9vZl9wYWdlcykKIHsKIAlpbnQJb3JkZXJfb2ZfbWFnPTE7CQkvKiBhc3N1bWUgMiBwYWdlcyAqLwotCWludAludW1wPTI7CisJaW50CW51bXA7CiAKIAlDTEFXX0RCRl9URVhUXyg1LCB0cmFjZSwgInBhZ2VzJWQiLCBudW1fb2ZfcGFnZXMpOwogCWlmIChudW1fb2ZfcGFnZXMgPT0gMSkgICB7cmV0dXJuIDA7IH0gIC8qIG1hZ25pdHVkZSBvZiAwID0gMSBwYWdlICovCkBAIC0xMDc2LDggKzEwOTcsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdCA9PU5VTEwgKSB7Ci0gICAgICAgICAgICAgICAgcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3Q9IHBfZmlyc3Q7ICAvKiAgICBzZXQgbmV3IGZpcnN0ICovCi0gICAgICAgICAgICAgICAgcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfbGFzdCA9IHBfbGFzdDsgICAvKiAgICBzZXQgbmV3IGxhc3QgICovCisJCXByaXZwdHItPnBfcmVhZF9hY3RpdmVfZmlyc3QgPSBwX2ZpcnN0OyAgLyogIHNldCBuZXcgZmlyc3QgKi8KKwkJcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0ICA9IHBfbGFzdDsgICAvKiAgc2V0IG5ldyBsYXN0ICAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogCkBAIC0xMTEzLDcgKzExMzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0LT5yX1RJQ18yLmNkYT0KIAkJCQkoX191MzIpX19wYSgmcF9maXJzdC0+cmVhZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qICAgICAgY2hhaW4gaW4gbmV3IHNldCBvZiBibG9ja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkvKiAgICAgIGNoYWluIGluIG5ldyBzZXQgb2YgYmxvY2tzICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0LT5uZXh0ID0gcF9maXJzdDsKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3Q9cF9sYXN0OwogICAgICAgICB9IC8qIGVuZCBvZiBpZiAoIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09TlVMTCkgICovCkBAIC0xMTM1LDIxICsxMTU2LDE4IEBACiAJCWNhc2UgLUVCVVNZOiAvKiBCVVNZIGlzIGEgdHJhbnNpZW50IHN0YXRlIG5vIGFjdGlvbiBuZWVkZWQgKi8KIAkJCWJyZWFrOwogCQljYXNlIC1FTk9ERVY6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IE1pc3NpbmcgZGV2aWNlIGNhbGxlZCAiCi0JCQkJImZvciBJTyBFTk9ERVZcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FSU86Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFN0YXR1cyBwZW5kaW5nLi4uIEVJTyBcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJZGV2X2VycigmY2Rldi0+ZGV2LCAiVGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIgaXMgbm90IgorCQkJCSIgYXZhaWxhYmxlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FSU5WQUw6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IEludmFsaWQgRGV2IFN0YXRlIEVJTlZBTCBcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJZGV2X2VycigmY2Rldi0+ZGV2LAorCQkJCSJUaGUgc3RhdHVzIG9mIHRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIgorCQkJCSIgaXMgbm90IHZhbGlkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBVbmtub3duIGVycm9yIGluICIKLQkJCQkgIkRvX0lPICVkXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwKLQkJCSAgICAgICByZXR1cm5fY29kZSk7CisJCQlkZXZfZXJyKCZjZGV2LT5kZXYsICJUaGUgY29tbW9uIGRldmljZSBsYXllciIKKwkJCQkiIHJldHVybmVkIGVycm9yIGNvZGUgJWRcbiIsCisJCQkJICByZXR1cm5fY29kZSk7CiAJCX0KIAl9CiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImNjd3JldCIpOwpAQCAtMTE2Myw0MiArMTE4MSwzNyBAQAogY2N3X2NoZWNrX3VuaXRfY2hlY2soc3RydWN0IGNoYmsgKiBwX2NoLCB1bnNpZ25lZCBjaGFyIHNlbnNlICkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBfY2gtPm5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBfY2gtPmNkZXYtPmRldjsKIAogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJ1bml0Y2hlayIpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBDaGVjayB3aXRoIHNlbnNlIGJ5dGU6MHglMDR4XG4iLAotCSAgICAgICBuZGV2LT5uYW1lLCBzZW5zZSk7CisJZGV2X3dhcm4oZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyBkaXNjb25uZWN0ZWRcbiIsCisJCW5kZXYtPm5hbWUpOwogCi0gICAgICAgIGlmIChzZW5zZSAmIDB4NDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW50ZXJmYWNlIGRpc2Nvbm5lY3Qgb3IgIgotCQkJCSJTZWxlY3RpdmUgcmVzZXQgIgotCQkJCSJvY2N1cnJlZCAocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogU3lzdGVtIHJlc2V0IG9jY3VyZWQiCi0JCQkJIiAocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2Vuc2UgJiAweDIwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbnNlICYgMHgwNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERhdGEtc3RyZWFtaW5nICIKLQkJCQkidGltZW91dClcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogRGF0YS10cmFuc2ZlciBwYXJpdHkiCi0JCQkJIiBlcnJvclxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBIYXJkd2FyZSBtYWxmdW5jdGlvbiAiCi0JCQkJIihyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWFkLWRhdGEgcGFyaXR5IGVycm9yICIKLQkJCQkiKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKHNlbnNlICYgMHg0MCkgeworCQlpZiAoc2Vuc2UgJiAweDAxKSB7CisJCQlkZXZfd2FybihkZXYsICJUaGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciBmb3IiCisJCQkJIiAlcyBoYXMgYmVlbiByZXNldFxuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAoc2Vuc2UgJiAweDIwKSB7CisJCWlmIChzZW5zZSAmIDB4MDQpIHsKKwkJCWRldl93YXJuKGRldiwgIkEgZGF0YSBzdHJlYW1pbmcgdGltZW91dCBvY2N1cnJlZCIKKwkJCQkiIGZvciAlc1xuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfSBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKKwkJCWRldl93YXJuKGRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGZvciAlcyIKKwkJCQkiIGlzIGZhdWx0eVxuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKGRldiwgIkEgZGF0YSB0cmFuc2ZlciBwYXJpdHkgZXJyb3Igb2NjdXJyZWQiCisJCQkJIiBmb3IgJXNcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgeworCQlkZXZfd2FybihkZXYsICJBIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQiCisJCQkiIGZvciAlc1xuIiwKKwkJCW5kZXYtPm5hbWUpOworCX0KIAogfSAgIC8qICAgIGVuZCBvZiBjY3dfY2hlY2tfdW5pdF9jaGVjayAgICAqLwogCkBAIC0xMjM1LDcgKzEyNDgsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiByYzsKIH0gICAgLyogICAgZW5kIG9mIGZpbmRfbGluayAgICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzQ3LDcgKzEzNjAsMTAgQEAKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3dyaXRlX2ZyZWVfY2hhaW49cF90aGlzX2Njdy0+bmV4dDsKICAgICAgICAgICAgICAgICBwX3RoaXNfY2N3LT5uZXh0PU5VTEw7CiAgICAgICAgICAgICAgICAgLS1wcml2cHRyLT53cml0ZV9mcmVlX2NvdW50OyAvKiAtMSAqLwotICAgICAgICAgICAgICAgIGJ5dGVzSW5UaGlzQnVmZmVyPWxlbl9vZl9kYXRhOworCQlpZiAobGVuX29mX2RhdGEgPj0gcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpCisJCQlieXRlc0luVGhpc0J1ZmZlciA9IHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOworCQllbHNlCisJCQlieXRlc0luVGhpc0J1ZmZlciA9IGxlbl9vZl9kYXRhOwogICAgICAgICAgICAgICAgIG1lbWNweSggcF90aGlzX2Njdy0+cF9idWZmZXIscERhdGFBZGRyZXNzLCBieXRlc0luVGhpc0J1ZmZlcik7CiAgICAgICAgICAgICAgICAgbGVuX29mX2RhdGEtPWJ5dGVzSW5UaGlzQnVmZmVyOwogICAgICAgICAgICAgICAgIHBEYXRhQWRkcmVzcys9KHVuc2lnbmVkIGxvbmcpYnl0ZXNJblRoaXNCdWZmZXI7CkBAIC0xMzc1LDcgKzEzOTEsNyBAQAogICAgICAgICAqLwogCiAgICAgICAgIGlmIChwX2ZpcnN0X2NjdyE9TlVMTCkgewotICAgICAgICAgICAgICAgIC8qICAgICAgc2V0dXAgZW5kaW5nIGNjdyBzZXF1ZW5jZSBmb3IgdGhpcyBzZWdtZW50ICAgICAgICAgICAgICAqLworCQkvKiAgICAgIHNldHVwIGVuZGluZyBjY3cgc2VxdWVuY2UgZm9yIHRoaXMgc2VnbWVudCAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBwRW5kPXByaXZwdHItPnBfZW5kX2NjdzsKICAgICAgICAgICAgICAgICBpZiAocEVuZC0+d3JpdGUxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwRW5kLT53cml0ZTE9MHgwMDsgICAvKiBzZWNvbmQgZW5kIGNjdyBpcyBub3cgYWN0aXZlICovCkBAIC0xNjk3LDEwICsxNzEzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+IHdfVElDXzEuZmxhZ3MgICAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+IHdfVElDXzEuY291bnQgICAgICA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmK3ByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSA+PQorCQkJaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYgKworCQkJCQkgICAgcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpID49CiAJCQkgICAoKHVuc2lnbmVkIGxvbmcpKHBfYnVmZisyKgotCQkJCShwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgLTEpICYgUEFHRV9NQVNLKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmPSBwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CisJCQkgICAgKHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSAtIDEpICYgUEFHRV9NQVNLKSkgeworCQkJCXBfYnVmZiA9IHBfYnVmZitwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KQEAgLTE4NDAsMTUgKzE4NTcsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT5oZWFkZXIub3Bjb2RlPTB4ZmY7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+aGVhZGVyLmZsYWc9Q0xBV19QRU5ESU5HOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZitwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSA+PQotCQkJCSgodW5zaWduZWQgbG9uZykocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpIC0xKQotCQkJCSAmIFBBR0VfTUFTSykgKSB7CisJCQlpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZitwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSA+PQorCQkJICAoKHVuc2lnbmVkIGxvbmcpKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKQorCQkJCSAtMSkKKwkJCSAgICYgUEFHRV9NQVNLKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmY9IHBfYnVmZitwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZj0KIAkJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykKLQkJCQkJKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSAtMSkKKwkJCQkJKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKS0xKQogCQkJCQkgJiBQQUdFX01BU0spIDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLyogZm9yIHJlYWRfYnVmZmVycyAgICovCkBAIC0xODU2LDI0ICsxODc0LDI4IEBACiAgICAgICAgICAgZWxzZSB7ICAvKiByZWFkIFNpemUgPj0gUEFHRV9TSVpFICAqLwogICAgICAgICAgICAgICAgIGZvciAoaT0wIDsgaTwgcHJpdnB0ci0+cF9lbnYtPnJlYWRfYnVmZmVycyA7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX0RNQSwKLQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCkgKTsKKwkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKKwkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX2J1ZmY9PU5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwcml2cHRyLT5wX2J1ZmZfY2N3LAotCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfY2N3X251bSkpOworCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT4KKwkJCQkJcF9idWZmX2Njd19udW0pKTsKIAkJCQkvKiBmcmVlIHRoZSB3cml0ZSBwYWdlcyAgKi8KIAkgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX2J1ZmZfd3JpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAotCQkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCi0JCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUgKSk7CisJCQkJCWZyZWVfcGFnZXMoCisJCQkJCSAgICAodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCisJCQkJCSAgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKKwkJCQkJICAgIHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXBfYnVmLT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAJCQkJLyogZnJlZSBhbnkgcmVhZCBwYWdlcyBhbHJlYWR5IGFsbG9jICAqLwogCSAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXByaXZwdHItPnBfYnVmZl9yZWFkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocF9idWYhPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKLQkJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAotCQkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQgKSk7CisJCQkJCWZyZWVfcGFnZXMoCisJCQkJCSAgICAodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCisJCQkJCSAgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKKwkJCQkJICAgICBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXBfYnVmLT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnBfYnVmZl9jY3c9TlVMTDsKQEAgLTIwMDMsNyArMjAyNSw3IEBACiAJdGRldiA9ICZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldjsKIAltZW1jcHkoICZ0ZW1wX2hvc3RfbmFtZSwgcF9lbnYtPmhvc3RfbmFtZSwgOCk7CiAgICAgICAgIG1lbWNweSggJnRlbXBfd3NfbmFtZSwgcF9lbnYtPmFkYXB0ZXJfbmFtZSAsIDgpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogIgorCWRldl9pbmZvKHRkZXYsICIlczogQ0xBVyBkZXZpY2UgJS44czogIgogCQkiUmVjZWl2ZWQgQ29udHJvbCBQYWNrZXRcbiIsCiAJCWRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKICAgICAgICAgaWYgKHByaXZwdHItPnJlbGVhc2VfcGVuZD09MSkgewpAQCAtMjAyMiwzMiArMjA0NCwzMCBAQAogCQlpZiAocF9jdGxiay0+dmVyc2lvbiAhPSBDTEFXX1ZFUlNJT05fSUQpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfV1JPTkdfVkVSU0lPTik7Ci0JCQlwcmludGsoIiVzOiAlZCBpcyB3cm9uZyB2ZXJzaW9uIGlkLiAiCi0JCQkgICAgICAgIkV4cGVjdGVkICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKLQkJCSAgICAgICBDTEFXX1ZFUlNJT05fSUQpOworCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMiCisJCQkJIiB1c2VzIGFuIGluY29ycmVjdCBBUEkgdmVyc2lvbiAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24pOwogCQl9CiAJCXBfc3lzdmFsID0gKHN0cnVjdCBzeXN2YWwgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoIiVzOiBSZWN2IFN5cyBWYWxpZGF0ZSBSZXF1ZXN0OiAiCi0JCSAgICAgICAiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWQsV1MgbmFtZT0lLiIKLQkJICAgICAgICI4cyxIb3N0IG5hbWU9JS44c1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKLQkJICAgICAgIHBfY3RsYmstPmxpbmtpZCwKLQkJICAgICAgIHBfY3RsYmstPmNvcnJlbGF0b3IsCi0JCSAgICAgICBwX3N5c3ZhbC0+V1NfbmFtZSwKLQkJICAgICAgIHBfc3lzdmFsLT5ob3N0X25hbWUpOworCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlcXVlc3Q6ICIKKwkJCSJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZCxXUyBuYW1lPSUuOHMsIgorCQkJIkhvc3QgbmFtZT0lLjhzXG4iLAorCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAorCQkJcF9jdGxiay0+bGlua2lkLAorCQkJcF9jdGxiay0+Y29ycmVsYXRvciwKKwkJCXBfc3lzdmFsLT5XU19uYW1lLAorCQkJcF9zeXN2YWwtPmhvc3RfbmFtZSk7CiAJCWlmIChtZW1jbXAodGVtcF9ob3N0X25hbWUsIHBfc3lzdmFsLT5ob3N0X25hbWUsIDgpKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX05BTUVfTUlTTUFUQ0gpOwogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIkhTVEJBRCIpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHBfc3lzdmFsLT5ob3N0X25hbWUpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHRlbXBfaG9zdF9uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgSG9zdCBuYW1lIG1pc21hdGNoXG4iLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgOiVzOiAiCi0JCQkJImV4cGVjdGVkIDolczogXG4iLAotCQkJCWRldi0+bmFtZSwKKwkJCWRldl93YXJuKHRkZXYsCisJCQkJIkhvc3QgbmFtZSAlcyBmb3IgJXMgZG9lcyBub3QgbWF0Y2ggdGhlIgorCQkJCSIgcmVtb3RlIGFkYXB0ZXIgbmFtZSAlc1xuIiwKIAkJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lLAorCQkJCWRldi0+bmFtZSwKIAkJCQl0ZW1wX2hvc3RfbmFtZSk7CiAJCX0KIAkJaWYgKG1lbWNtcCh0ZW1wX3dzX25hbWUsIHBfc3lzdmFsLT5XU19uYW1lLCA4KSkgewpAQCAtMjA1NiwzNSArMjA3NiwzOCBAQAogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIldTTkJBRCIpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHBfc3lzdmFsLT5XU19uYW1lKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCB0ZW1wX3dzX25hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdTIG5hbWUgbWlzbWF0Y2hcbiIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKLQkJCSAgICAgICAiZXhwZWN0ZWQgOiVzOiBcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLAotCQkJICAgICAgIHBfc3lzdmFsLT5XU19uYW1lLAotCQkJICAgICAgIHRlbXBfd3NfbmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LCAiQWRhcHRlciBuYW1lICVzIGZvciAlcyBkb2VzIG5vdCBtYXRjaCIKKwkJCQkiIHRoZSByZW1vdGUgaG9zdCBuYW1lICVzXG4iLAorCQkJCXBfc3lzdmFsLT5XU19uYW1lLAorCQkJCWRldi0+bmFtZSwKKwkJCQl0ZW1wX3dzX25hbWUpOwogCQl9CiAJCWlmICgocF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPCBwX2Vudi0+d3JpdGVfc2l6ZSkgJiYKIAkJICAgIChwX2Vudi0+cGFja2luZyA9PSAwKSkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEwpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhvc3Qgd3JpdGUgc2l6ZSBpcyB0b28gIgotCQkJCSJzbWFsbFxuIiwgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsCisJCQkJIlRoZSBsb2NhbCB3cml0ZSBidWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSIKKwkJCQkiIHJlbW90ZSByZWFkIGJ1ZmZlclxuIik7CiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAid3J0c3piYWQiKTsKIAkJfQogCQlpZiAoKHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPCBwX2Vudi0+cmVhZF9zaXplKSAmJgogCQkgICAgKHBfZW52LT5wYWNraW5nID09IDApKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCByZWFkIHNpemUgaXMgdG9vICIKLQkJCQkic21hbGxcbiIsIGRldi0+bmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LAorCQkJCSJUaGUgbG9jYWwgcmVhZCBidWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSIKKwkJCQkiIHJlbW90ZSB3cml0ZSBidWZmZXJcbiIpOwogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgInJkc2l6YmFkIik7CiAJCX0KIAkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssIDApOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogU3lzdGVtIHZhbGlkYXRlICIKLQkJCSJjb21wbGV0ZWQuXG4iLCBkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7Ci0JCXByaW50aygiJXM6IHN5cyBWYWxpZGF0ZSBSc2l6ZTolZCBXc2l6ZTolZFxuIiwgZGV2LT5uYW1lLAotCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSwgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUpOworCQlkZXZfaW5mbyh0ZGV2LAorCQkJIkNMQVcgZGV2aWNlICUuOHM6IFN5c3RlbSB2YWxpZGF0ZSIKKwkJCSIgY29tcGxldGVkLlxuIiwgdGVtcF93c19uYW1lKTsKKwkJZGV2X2luZm8odGRldiwKKwkJCSIlczogc3lzIFZhbGlkYXRlIFJzaXplOiVkIFdzaXplOiVkXG4iLAorCQkJZGV2LT5uYW1lLCBwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplLAorCQkJcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUpOwogCQlwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9IDE7CiAJCWlmIChzdHJuY21wKHBfZW52LT5hcGlfdHlwZSwgV1NfQVBQTF9OQU1FX1BBQ0tFRCwgNikgPT0gMCkKIAkJCXBfZW52LT5wYWNraW5nID0gUEFDS0lOR19BU0s7CkBAIC0yMDkyLDggKzIxMTUsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBTWVNURU1fVkFMSURBVEVfUkVTUE9OU0U6CiAJCXBfc3lzdmFsID0gKHN0cnVjdCBzeXN2YWwgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoIiVzOiBSZWN2IFN5cyBWYWxpZGF0ZSBSZXNwOiBWZXJzPSVkLENvcnI9JWQsUkM9JWQsIgotCQkJIldTIG5hbWU9JS44cyxIb3N0IG5hbWU9JS44c1xuIiwKKwkJZGV2X2luZm8odGRldiwKKwkJCSJTZXR0aW5ncyBmb3IgJXMgdmFsaWRhdGVkICh2ZXJzaW9uPSVkLCAiCisJCQkicmVtb3RlIGRldmljZT0lZCwgcmM9JWQsIGFkYXB0ZXIgbmFtZT0lLjhzLCAiCisJCQkiaG9zdCBuYW1lPSUuOHMpXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKIAkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCkBAIC0yMTAyLDQxICsyMTI3LDM5IEBACiAJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKIAkJc3dpdGNoIChwX2N0bGJrLT5yYykgewogCQljYXNlIDA6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgIgotCQkJCSIlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgotCQkJCSJjb21wbGV0ZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKKwkJCWRldl9pbmZvKHRkZXYsICIlczogQ0xBVyBkZXZpY2UgIgorCQkJCSIlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgY29tcGxldGVkLlxuIiwKKwkJCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CiAJCQlpZiAocHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPT0gMCkKIAkJCQljbGF3X3N0cnRfY29ubl9yZXEoZGV2KTsKIAkJCXByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIENMQVdfUkNfTkFNRV9NSVNNQVRDSDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJSZXNwIDogSG9zdCwgV1MgbmFtZSBpcyAiCi0JCQkJIm1pc21hdGNoXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVmFsaWRhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiIKKwkJCQkiIGEgaG9zdCBvciBhZGFwdGVyIG5hbWUgbWlzbWF0Y2hcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIENMQVdfUkNfV1JPTkdfVkVSU0lPTjoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJSZXNwIDogV3JvbmcgdmVyc2lvblxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJWYWxpZGF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIGEiCisJCQkJIiB2ZXJzaW9uIGNvbmZsaWN0XG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJSZXNwIDogYmFkIGZyYW1lIHNpemVcbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiVmFsaWRhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiBhIgorCQkJCSIgZnJhbWUgc2l6ZSBjb25mbGljdFxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiZXJyb3IgY29kZT0lZCBcbiIsCi0JCQkJIGRldi0+bmFtZSwgcF9jdGxiay0+cmMpOworCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgcmVqZWN0ZWQiCisJCQkJIiB0aGUgY29ubmVjdGlvblxuIiwKKwkJCQkgZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBDT05ORUNUSU9OX1JFUVVFU1Q6CiAJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2IENvbm4gUmVxOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IFJlY3YgQ29ubiBSZXE6IFZlcnM9JWQsbGlua19pZD0lZCwiCiAJCQkiQ29ycj0lZCxIT1NUIGFwcGw9JS44cyxXUyBhcHBsPSUuOHNcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLApAQCAtMjE0NiwyMSArMjE2OSwyMSBAQAogCQkJcF9jb25uZWN0LT5XU19uYW1lKTsKIAkJaWYgKHByaXZwdHItPmFjdGl2ZV9saW5rX0lEICE9IDApIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlcSBlcnJvciA6ICIKLQkJCQkiYWxyZWFkeSBsb2dpY2FsIGxpbmsgaXMgYWN0aXZlIFxuIiwKKwkJCWRldl9pbmZvKHRkZXYsICIlcyByZWplY3RlZCBhIGNvbm5lY3Rpb24gcmVxdWVzdCIKKwkJCQkiIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBhY3RpdmVcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQlpZiAocF9jdGxiay0+bGlua2lkICE9IDEpIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlcSBlcnJvciA6ICIKLQkJCQkicmVxIGxvZ2ljYWwgbGluayBpZCBpcyBub3QgMVxuIiwKKwkJCWRldl9pbmZvKHRkZXYsICIlcyByZWplY3RlZCBhIHJlcXVlc3QgdG8gb3BlbiBtdWx0aXBsZSIKKwkJCQkiIGNvbm5lY3Rpb25zXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJcmMgPSBmaW5kX2xpbmsoZGV2LCBwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKIAkJaWYgKHJjICE9IDApIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6ICIKLQkJCQkicmVxIGFwcGwgbmFtZSBkb2VzIG5vdCBtYXRjaFxuIiwKKwkJCWRldl9pbmZvKHRkZXYsICIlcyByZWplY3RlZCBhIGNvbm5lY3Rpb24gcmVxdWVzdCIKKwkJCQkiIGJlY2F1c2Ugb2YgYSB0eXBlIG1pc21hdGNoXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJY2xhd19zZW5kX2NvbnRyb2woZGV2LApAQCAtMjE3Miw3ICsyMTk1LDcgQEAKIAkJCXBfZW52LT5wYWNraW5nID0gUEFDS19TRU5EOwogCQkJY2xhd19zbmRfY29ubl9yZXEoZGV2LCAwKTsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogQ29ubmVjdGlvbiAiCisJCWRldl9pbmZvKHRkZXYsICIlczogQ0xBVyBkZXZpY2UgJS44czogQ29ubmVjdGlvbiAiCiAJCQkiY29tcGxldGVkIGxpbmtfaWQ9JWQuXG4iLAogCQkJZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUsCiAJCQlwX2N0bGJrLT5saW5raWQpOwpAQCAtMjE4Miw3ICsyMjA1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDT05ORUNUSU9OX1JFU1BPTlNFOgogCQlwX2Nvbm5lY3QgPSAoc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmV2YyBDb25uIFJlc3A6IFZlcnM9JWQsbGlua19pZD0lZCwiCisJCWRldl9pbmZvKHRkZXYsICIlczogUmVjdiBDb25uIFJlc3A6IFZlcnM9JWQsbGlua19pZD0lZCwiCiAJCQkiQ29ycj0lZCxSQz0lZCxIb3N0IGFwcGw9JS44cywgV1MgYXBwbD0lLjhzXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKQEAgLTIxOTMsMTYgKzIyMTYsMTggQEAKIAkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CiAKIAkJaWYgKHBfY3RsYmstPnJjICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6IHJjPSVkIFxuIiwKLQkJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnJjKTsKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIHJlamVjdGVkIgorCQkJCSIgYSBjb25uZWN0aW9uIHJlcXVlc3RcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXJjID0gZmluZF9saW5rKGRldiwKIAkJCXBfY29ubmVjdC0+aG9zdF9uYW1lLCBwX2Nvbm5lY3QtPldTX25hbWUpOwogCQlpZiAocmMgIT0gMCkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogIgotCQkJCSJyZXEgYXBwbCBuYW1lIGRvZXMgbm90IG1hdGNoXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMiCisJCQkJIiByZWplY3RlZCBhIGNvbm5lY3Rpb24gIgorCQkJCSJyZXF1ZXN0IGJlY2F1c2Ugb2YgYSB0eXBlIG1pc21hdGNoXG4iLAogCQkJCSBkZXYtPm5hbWUpOwogCQl9CiAJCS8qIHNob3VsZCBiZSB1bnRpbCBDT05ORUNUSU9OX0NPTkZJUk0gKi8KQEAgLTIyMTAsNyArMjIzNSw4IEBACiAJCWJyZWFrOwogCWNhc2UgQ09OTkVDVElPTl9DT05GSVJNOgogCQlwX2Nvbm5lY3QgPSAoc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjdiBDb25uIENvbmZpcm06VmVycz0lZCxsaW5rX2lkPSVkLCIKKwkJZGV2X2luZm8odGRldiwKKwkJCSIlczogUmVjdiBDb25uIENvbmZpcm06VmVycz0lZCxsaW5rX2lkPSVkLCIKIAkJCSJDb3JyPSVkLEhvc3QgYXBwbD0lLjhzLFdTIGFwcGw9JS44c1xuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCkBAIC0yMjIxLDIxICsyMjQ3LDIxIEBACiAJCWlmIChwX2N0bGJrLT5saW5raWQgPT0gLShwcml2cHRyLT5hY3RpdmVfbGlua19JRCkpIHsKIAkJCXByaXZwdHItPmFjdGl2ZV9saW5rX0lEID0gcF9jdGxiay0+bGlua2lkOwogCQkJaWYgKHBfZW52LT5wYWNraW5nID4gUEFDS0lOR19BU0spIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlybWVkIE5vdyBwYWNraW5nXG4iLAotCQkJCQlkZXYtPm5hbWUpOworCQkJCWRldl9pbmZvKHRkZXYsCisJCQkJIiVzOiBDb25maXJtZWQgTm93IHBhY2tpbmdcbiIsIGRldi0+bmFtZSk7CiAJCQkJcF9lbnYtPnBhY2tpbmcgPSBET19QQUNLRUQ7CiAJCQl9CiAJCQlwX2NoID0gJnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwogCQkJd2FrZV91cCgmcF9jaC0+d2FpdCk7CiAJCX0gZWxzZSB7Ci0JCSAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBjb25maXJtOiAiCi0JCQkJInVuZXhwZWN0ZWQgbGlua2lkPSVkIFxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJBY3RpdmF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIgorCQkJCSIgYW4gaW5jb3JyZWN0IGxpbmsgSUQ9JWRcbiIsCiAJCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT5saW5raWQpOwogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRElTQ09OTkVDVDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2Nvbm5lY3Q6ICIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBEaXNjb25uZWN0OiAiCiAJCQkiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWRcbiIsCiAJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCiAJCQlwX2N0bGJrLT5saW5raWQsIHBfY3RsYmstPmNvcnJlbGF0b3IpOwpAQCAtMjI0NywxMiArMjI3MywxMyBAQAogCQkJcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSAwOwogCQlicmVhazsKIAljYXNlIENMQVdfRVJST1I6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIEVSUk9SIGRldGVjdGVkXG4iLAorCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyBmYWlsZWRcbiIsCiAJCQlkZXYtPm5hbWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogIFVuZXhwZWN0ZWQgY29tbWFuZCBjb2RlPSVkIFxuIiwKLQkJCWRldi0+bmFtZSwgIHBfY3RsYmstPmNvbW1hbmQpOworCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyBzZW50IgorCQkJIiBhbiB1bmtub3duIGNvbW1hbmQgY29kZVxuIiwKKwkJCWRldi0+bmFtZSk7CiAJCWJyZWFrOwogICAgICAgICB9CiAKQEAgLTIyOTQsMTIgKzIzMjEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcF9zeXN2YWwtPmhvc3RfbmFtZSwgbG9jYWxfbmFtZSwgOCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnBfc3lzdmFsLT5XU19uYW1lLCByZW1vdGVfbmFtZSwgOCk7CiAJCQlpZiAocHJpdnB0ci0+cF9lbnYtPnBhY2tpbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZT1ERUZfUEFDS19CVUZTSVpFOwotCSAgICAgICAgICAgICAgICAgICAgICAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplPURFRl9QQUNLX0JVRlNJWkU7CisJCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSA9IERFRl9QQUNLX0JVRlNJWkU7CisJCQkJcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPSBERUZfUEFDS19CVUZTSVpFOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBob3cgYmlnIGlzIHRoZSBiaWdnZXN0IGdyb3VwIG9mIHBhY2tldHMgKi8KLQkJCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplPXByaXZwdHItPnBfZW52LT5yZWFkX3NpemU7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemU9cHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CisJCQkgICBwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplID0KKwkJCQlwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOworCQkJICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPQorCQkJCXByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOwogCQkJfQogICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZwX3N5c3ZhbC0+cmVzZXJ2ZWQsIDB4MDAsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDg1LDcgKzI1MTQsNiBAQAogCXBfZGV2ID0gJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2OwogCXBfZW52ID0gcHJpdnB0ci0+cF9lbnY7CiAgICAgICAgIHBfdGhpc19jY3c9cHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdDsKLSAgICAgICAgaT0wOwogCXdoaWxlIChwX3RoaXNfY2N3IT1OVUxMICYmIHBfdGhpc19jY3ctPmhlYWRlci5mbGFnIT1DTEFXX1BFTkRJTkcpIHsKIAkJcGFja19vZmYgPSAwOwogCQlwID0gMDsKQEAgLTI1MTEsOCArMjUzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbXRjX3RoaXNfZnJtPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF90aGlzX2Njdy0+aGVhZGVyLmxlbmd0aCE9CiAJCQkJcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiICVzOiBJbnZhbGlkIGZyYW1lIGRldGVjdGVkICIKLQkJCQkJImxlbmd0aCBpcyAlMDJ4XG4iICwKKwkJCQlkZXZfd2FybihwX2RldiwKKwkJCQkJIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMiCisJCQkJCSIgc2VudCBhIGZhdWx0eSIKKwkJCQkJIiBmcmFtZSBvZiBsZW5ndGggJTAyeFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfdGhpc19jY3ctPmhlYWRlci5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI1NDQsNyArMjU3NCw3IEBACiAJCQkJZ290byBOZXh0RnJhbWU7CiAJCQlwX3BhY2tkID0gcF90aGlzX2Njdy0+cF9idWZmZXIrcGFja19vZmY7CiAJCQlwX3BhY2toID0gKHN0cnVjdCBjbGF3cGggKikgcF9wYWNrZDsKLQkJCWlmICgocF9wYWNraC0+bGVuID09IDApIHx8IC8qIGFsbCBkb25lIHdpdGggdGhpcyBmcmFtZT8gKi8KKwkJCWlmICgocF9wYWNraC0+bGVuID09IDApIHx8IC8qIGRvbmUgd2l0aCB0aGlzIGZyYW1lPyAqLwogCQkJICAgIChwX3BhY2toLT5mbGFnICE9IDApKQogCQkJCWdvdG8gTmV4dEZyYW1lOwogCQkJYnl0ZXNfdG9fbW92ID0gcF9wYWNraC0+bGVuOwpAQCAtMjU5NCw5ICsyNjI0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCQkJCWRldl9pbmZvKHBfZGV2LCAiQWxsb2NhdGluZyBhIGJ1ZmZlciBmb3IiCisJCQkJCSIgaW5jb21pbmcgZGF0YSBmYWlsZWRcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcygpIGxvdyBvbiBtZW1vcnlcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPm10Y19vZmZzZXQ9MDsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPm10Y19sb2dpY2FsX2xpbms9LTE7CkBAIC0yNzIwLDggKzI3NTAsOCBAQAogICAgICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpID09IDApIHsKICAgICAgICAgICAgICAgICBwYXJtID0gKHVuc2lnbmVkIGxvbmcpIHBfY2g7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJTdFdydElPIik7Ci0gICAgICAgICAgICAgICAgcmMgPSBjY3dfZGV2aWNlX3N0YXJ0IChwX2NoLT5jZGV2LCZwX2ZpcnN0X2Njdy0+d3JpdGUsIHBhcm0sCi0JCQkJICAgICAgIDB4ZmYsIDApOworCQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQocF9jaC0+Y2RldiwgJnBfZmlyc3RfY2N3LT53cml0ZSwgcGFybSwKKwkJCQkgICAgICAweGZmLCAwKTsKICAgICAgICAgICAgICAgICBpZiAocmMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2N3X2NoZWNrX3JldHVybl9jb2RlKHBfY2gtPmNkZXYsIHJjKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yODE2LDIyICsyODQ2LDI2IEBACiAgKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgb2YgdGhlIG5ldCBkZXZpY2UgZXhjZXB0IHRoZSBuYW1lIGFuZCB0aGUKICAqIGNoYW5uZWwgc3RydWN0cy4KICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjbGF3X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGNsYXdfb3BlbiwKKwkubmRvX3N0b3AJCT0gY2xhd19yZWxlYXNlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGNsYXdfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGNsYXdfdHgsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGNsYXdfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyB2b2lkCiBjbGF3X2luaXRfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0X2RldiIpOwogCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBkZXYtPm5hbWUpOwogCWRldi0+bXR1ID0gQ0xBV19ERUZBVUxUX01UVV9TSVpFOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY2xhd190eDsKLQlkZXYtPm9wZW4gPSBjbGF3X29wZW47Ci0JZGV2LT5zdG9wID0gY2xhd19yZWxlYXNlOwotCWRldi0+Z2V0X3N0YXRzID0gY2xhd19zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBjbGF3X2NoYW5nZV9tdHU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwogCWRldi0+YWRkcl9sZW4gPSAwOwogCWRldi0+dHlwZSA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuID0gMTMwMDsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworCWRldi0+bmV0ZGV2X29wcyA9ICZjbGF3X25ldGRldl9vcHM7CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRvayIpOwogCXJldHVybjsKIH0KQEAgLTI4ODAsOCArMjkxNCw4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZfaWQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiBhZGQgZm9yICVzXG4iLAotCSAgICAgICBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbUkVBRF0tPmRldikpOworCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiYWRkIGZvciAlc1xuIiwKKwkJIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltSRUFEXS0+ZGV2KSk7CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIm5ld19kZXYiKTsKIAlwcml2cHRyID0gY2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAljZ2Rldi0+Y2RldltSRUFEXS0+ZGV2LmRyaXZlcl9kYXRhID0gcHJpdnB0cjsKQEAgLTI4OTcsMjkgKzI5MzEsMjggQEAKIAlpZiAocmV0ID09IDApCiAJCXJldCA9IGFkZF9jaGFubmVsKGNnZGV2LT5jZGV2WzFdLDEscHJpdnB0cik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJhZGQgY2hhbm5lbCBmYWlsZWQgd2l0aCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsICJDcmVhdGluZyBhIENMQVcgZ3JvdXAgZGV2aWNlIgorCQkJIiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2W1JFQURdKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNsYXc6IGNjd19kZXZpY2Vfc2V0X29ubGluZSAlcyBSRUFEIGZhaWxlZCAiCi0JCSAgICAgICAid2l0aCByZXQgPSAlZFxuIiwgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1JFQURdLT5kZXYpLAotCQkgICAgICAgcmV0KTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsCisJCQkiU2V0dGluZyB0aGUgcmVhZCBzdWJjaGFubmVsIG9ubGluZSIKKwkJCSIgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZ2Rldi0+Y2RldltXUklURV0pOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFdSSVRFIGZhaWxlZCAiCi0JCSAgICAgICAid2l0aCByZXQgPSAlZFxuIiwgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1dSSVRFXS0+ZGV2KSwKLQkJICAgICAgIHJldCk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LAorCQkJIlNldHRpbmcgdGhlIHdyaXRlIHN1YmNoYW5uZWwgb25saW5lICIKKwkJCSJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsImNsYXclZCIsY2xhd19pbml0X25ldGRldmljZSk7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6YWxsb2NfbmV0ZGV2IGZhaWxlZFxuIixfX2Z1bmNfXyk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LAorCQkJIkFjdGl2YXRpbmcgdGhlIENMQVcgZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlkZXYtPm1sX3ByaXYgPSBwcml2cHRyOwpAQCAtMjk0NywxMyArMjk4MCwxMyBAQAogCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLm5kZXYgPSBkZXY7CiAJcHJpdnB0ci0+cF9lbnYtPm5kZXYgPSBkZXY7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczpyZWFkc2l6ZT0lZCAgd3JpdGVzaXplPSVkICIKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiVzOnJlYWRzaXplPSVkICB3cml0ZXNpemU9JWQgIgogCQkicmVhZGJ1ZmZlcj0lZCB3cml0ZWJ1ZmZlcj0lZCByZWFkPTB4JTA0eCB3cml0ZT0weCUwNHhcbiIsCiAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX2Vudi0+cmVhZF9zaXplLAogCQlwX2Vudi0+d3JpdGVfc2l6ZSwgcF9lbnYtPnJlYWRfYnVmZmVycywKICAgICAgICAgICAgICAgICBwX2Vudi0+d3JpdGVfYnVmZmVycywgcF9lbnYtPmRldm5vW1JFQURdLAogCQlwX2Vudi0+ZGV2bm9bV1JJVEVdKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6aG9zdF9uYW1lOiUuOHMsIGFkYXB0ZXJfbmFtZSAiCisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIlczpob3N0X25hbWU6JS44cywgYWRhcHRlcl9uYW1lICIKIAkJIjolLjhzIGFwaV90eXBlOiAlLjhzXG4iLAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9lbnYtPmhvc3RfbmFtZSwKIAkJcF9lbnYtPmFkYXB0ZXJfbmFtZSAsIHBfZW52LT5hcGlfdHlwZSk7CkBAIC0yOTk3LDggKzMwMzAsOCBAQAogCW5kZXYgPSBwcml2LT5jaGFubmVsW1JFQURdLm5kZXY7CiAJaWYgKG5kZXYpIHsKIAkJLyogQ2xvc2UgdGhlIGRldmljZSAqLwotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IHNodXRpbmcgZG93biBcbiIsbmRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiJXM6IHNodXR0aW5nIGRvd24gXG4iLAorCQkJbmRldi0+bmFtZSk7CiAJCWlmIChuZGV2LT5mbGFncyAmIElGRl9SVU5OSU5HKQogCQkJcmV0ID0gY2xhd19yZWxlYXNlKG5kZXYpOwogCQluZGV2LT5mbGFncyAmPX5JRkZfUlVOTklORzsKQEAgLTMwMjMsOCArMzA1Niw3IEBACiAJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIGRldl9uYW1lKCZjZ2Rldi0+ZGV2KSk7CiAJcHJpdiA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJQlVHX09OKCFwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpIGNhbGxlZCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iLAotCQkJX19mdW5jX18sIGRldl9uYW1lKCZjZ2Rldi0+Y2RldlswXS0+ZGV2KSk7CisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIgd2lsbCBiZSByZW1vdmVkLlxuIik7CiAJaWYgKGNnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PTkxJTkUpCiAJCWNsYXdfc2h1dGRvd25fZGV2aWNlKGNnZGV2KTsKIAljbGF3X3JlbW92ZV9maWxlcygmY2dkZXYtPmRldik7CkBAIC0zMDYzLDcgKzMwOTUsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMxMDAsNyArMzEzMyw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMTM4LDcgKzMxNzIsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMTg1LDcgKzMyMjAsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzIyNiw3ICszMjYyLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqcF9lbnY7CkBAIC0zMjg5LDcgKzMzMjYsNyBAQAogewogCXVucmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmNsYXdfZ3JvdXBfZHJpdmVyKTsKIAljbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiBEcml2ZXIgdW5sb2FkZWRcbiIpOworCXByX2luZm8oIkRyaXZlciB1bmxvYWRlZFxuIik7CiAKIH0KIApAQCAtMzMwMywxMiArMzM0MCwxMiBAQAogY2xhd19pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogc3RhcnRpbmcgZHJpdmVyXG4iKTsKIAorCXByX2luZm8oIkxvYWRpbmcgJXNcbiIsIHZlcnNpb24pOwogCXJldCA9IGNsYXdfcmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6ICVzKCkgZGVidWdfcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkJX19mdW5jX18scmV0KTsKKwkJcHJfZXJyKCJSZWdpc3RlcmluZyB3aXRoIHRoZSBTLzM5MCBkZWJ1ZyBmZWF0dXJlIgorCQkJIiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9tb2QiKTsKQEAgLTMzMTYsOCArMzM1Myw4IEBACiAJaWYgKHJldCkgewogCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9iYWQiKTsKIAkJY2xhd191bnJlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc7ICVzKCkgY3UzMDg4IHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKLQkJCV9fZnVuY19fLHJldCk7CisJCXByX2VycigiUmVnaXN0ZXJpbmcgd2l0aCB0aGUgY3UzMDg4IGRldmljZSBkcml2ZXIgZmFpbGVkICIKKwkJCSAgICJ3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwppbmRleCBmMjljNzA4Li40ZGVkOWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKQEAgLTQxMCw5ICs0MTAsOCBAQAogCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJCQlnb3RvIGFnYWluOwogCX0KLQlibG9ja19sZW4gLT0gMjsKLQlpZiAoYmxvY2tfbGVuID4gMCkgewotCQkqKChfX3UxNiAqKXNrYi0+ZGF0YSkgPSBibG9ja19sZW47CisJaWYgKGJsb2NrX2xlbiA+IDIpIHsKKwkJKigoX191MTYgKilza2ItPmRhdGEpID0gYmxvY2tfbGVuIC0gMjsKIAkJY3RjbV91bnBhY2tfc2tiKGNoLCBza2IpOwogCX0KICBhZ2FpbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCmluZGV4IDI2Nzg1NzMuLjc3ZjQwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwpAQCAtMTA1LDcgKzEwNSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJcHNrYi0+cHJvdG9jb2wgPSBudG9ocyhoZWFkZXItPnR5cGUpOwotCQlpZiAoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgeworCQlpZiAoKGhlYWRlci0+bGVuZ3RoIDw9IExMX0hFQURFUl9MRU5HVEgpIHx8CisJCSAgICAobGVuIDw9IExMX0hFQURFUl9MRU5HVEgpKSB7CiAJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMU0laRSkpIHsKIAkJCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKIAkJCQkJIiVzKCVzKTogSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCglZCwlZCkiCkBAIC0xNjcsMTEgKzE2OCw5IEBACiAJCWlmIChsZW4gPiAwKSB7CiAJCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPmxlbmd0aCk7CiAJCQlpZiAoc2tiX3RhaWxyb29tKHBza2IpIDwgTExfSEVBREVSX0xFTkdUSCkgewotCQkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX09WRVJSVU4pKSB7Ci0JCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCi0JCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKLQkJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47Ci0JCQkJfQorCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCisJCQkJCSJPdmVycnVuIGluIGN0Y21fdW5wYWNrX3NrYiIpOworCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYl9wdXQocHNrYiwgTExfSEVBREVSX0xFTkdUSCk7CkBAIC05MDYsMTEgKzkwNSwxMSBAQAogCX0KIAogCWlmIChjdGNtX3Rlc3RfYW5kX3NldF9idXN5KGRldikpCi0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk5LDEyICsxMDk4LDI0IEBACiAKIHN0cnVjdCBtcGNfZ3JvdXAgKmN0Y21wY19pbml0X21wY19ncm91cChzdHJ1Y3QgY3RjbV9wcml2ICpwcml2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdGNtX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGN0Y21fb3BlbiwKKwkubmRvX3N0b3AJCT0gY3RjbV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjdGNtX3N0YXRzLAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBjdGNtX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGN0Y21fdHgsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN0Y21fbXBjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGN0Y21fb3BlbiwKKwkubmRvX3N0b3AJCT0gY3RjbV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjdGNtX3N0YXRzLAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBjdGNtX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGN0Y21wY190eCwKK307CisKIHZvaWQgc3RhdGljIGN0Y21fZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5vcGVuID0gY3RjbV9vcGVuOwotCWRldi0+c3RvcCA9IGN0Y21fY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBjdGNtX3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSA9IGN0Y21fY2hhbmdlX210dTsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOwpAQCAtMTE1NywxMiArMTE2OCwxMiBAQAogCQlkZXYtPm10dSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQgLQogCQkJCVRIX0hFQURFUl9MRU5HVEggLSBQRFVfSEVBREVSX0xFTkdUSDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21wY190eDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmN0Y21fbXBjX25ldGRldl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOwogCQlwcml2LT5idWZmZXJfc2l6ZSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQ7CiAJfSBlbHNlIHsKIAkJZGV2LT5tdHUgPSBDVENNX0JVRlNJWkVfREVGQVVMVCAtIExMX0hFQURFUl9MRU5HVEggLSAyOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21fdHg7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZjdGNtX25ldGRldl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gTExfSEVBREVSX0xFTkdUSCArIDI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggM2RiNWY4NC4uNzgxZTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiB0aGVyZSBhcmUgcHJvYmxlbXMuLi5iYWlsIG91dAkgICAgKi8KIAkJCS8qIHRoZXJlIG1heSBiZSBhIHN0YXRlIG1pc21hdGNoIHNvIHJlc3RhcnQgKi8KLQkJCWdycC0+cG9ydF9wZXJzaXN0ID0gMTsKIAkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCQkJZ3JwLT5hbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllcyA9IDA7CiAJCX0KQEAgLTY5OSwxMSArNjk4LDkgQEAKIAlyZXR1cm47CiAKIGRvbmU6Ci0JaWYgKHJjICE9IDApIHsKLQkJZ3JwLT5pbl9zd2VlcCA9IDA7Ci0JCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOwotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKLQl9CisJZ3JwLT5pbl9zd2VlcCA9IDA7CisJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CisJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMTE4LDcgKzExMTUsNiBAQAogCiAJCWlmICh1bmxpa2VseShmc21fZ2V0c3RhdGUoZ3JwLT5mc20pICE9IE1QQ0dfU1RBVEVfUkVBRFkpKQogCQkJCQlnb3RvIGRvbmU7Ci0JCXBkdV9sYXN0X3NlZW4gPSAwOwogCQl3aGlsZSAoKHBza2ItPmxlbiA+IDApICYmICFwZHVfbGFzdF9zZWVuKSB7CiAJCQljdXJyX3BkdSA9IChzdHJ1Y3QgcGR1ICopcHNrYi0+ZGF0YTsKIApAQCAtMTM5Niw4ICsxMzkyLDcgQEAKIAkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJaWYgKChncnAtPnNhdmVkX3N0YXRlICE9IE1QQ0dfU1RBVEVfUkVTRVQpIHx8CiAJCS8qIGRlYWxsb2NfY2hhbm5lbCBoYXMgYmVlbiBjYWxsZWQgKi8KLQkJCSgoZ3JwLT5zYXZlZF9zdGF0ZSA9PSBNUENHX1NUQVRFX1JFU0VUKSAmJgotCQkJCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKKwkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKQogCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOwogCiAJd2NoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CkBAIC0xOTE3LDEwICsxOTEyLDggQEAKIAogCWlmIChwcml2KQogCQlncnAgPSBwcml2LT5tcGNnOwotCWlmIChncnAgPT0gTlVMTCkgewotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwlpZiAoZ3JwID09IE5VTEwpCiAJCXJldHVybjsKLQl9CiAKIAlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspCXsKIAkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggNDljM2JmYS4uYTQ1YmMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC0xMjU5LDcgKzEyNjAsNiBAQAogCXN0cnVjdCBpbl9kZXZpY2UgKmluNF9kZXY7CiAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkYXRhOwotCWRhZW1vbml6ZSgicmVnaXBtIik7CiAKIAlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChjYXJkLT5zdGF0ZSAhPSBERVZfU1RBVEVfVVApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJY2FyZC0+dHhfYnVmZmVyID0gbGNzX2dldF9idWZmZXIoJmNhcmQtPndyaXRlKTsKIAkJaWYgKGNhcmQtPnR4X2J1ZmZlciA9PSBOVUxMKSB7CiAJCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyYyA9IC1FQlVTWTsKKwkJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljYXJkLT50eF9idWZmZXItPmNhbGxiYWNrID0gbGNzX3R4YnVmZmVyX2NiOwpAQCAtMTc1MywxMSArMTc1MywxMCBAQAogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGNzX2NhcmQsIGtlcm5lbF90aHJlYWRfc3RhcnRlcik7CiAJTENTX0RCRl9URVhUKDUsIHRyYWNlLCAia3JudGhyZCIpOwogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19yZWNvdmVyeSwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWt0aHJlYWRfcnVuKGxjc19yZWNvdmVyeSwgY2FyZCwgImxjc19yZWNvdmVyIik7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLAotCQkJCSh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCQlrdGhyZWFkX3J1bihsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLCBjYXJkLCAicmVnaXBtIik7CiAjZW5kaWYKIH0KIApAQCAtMjEwMSw2ICsyMTAwLDIwIEBACiAvKioKICAqIGxjc19uZXdfZGV2aWNlIHdpbGwgYmUgY2FsbGVkIGJ5IHNldHRpbmcgdGhlIGdyb3VwIGRldmljZSBvbmxpbmUuCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGNzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxjc19vcGVuX2RldmljZSwKKwkubmRvX3N0b3AJCT0gbGNzX3N0b3BfZGV2aWNlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGxjc19nZXRzdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGNzX3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxjc19tY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsY3Nfb3Blbl9kZXZpY2UsCisJLm5kb19zdG9wCQk9IGxjc19zdG9wX2RldmljZSwKKwkubmRvX2dldF9zdGF0cwkJPSBsY3NfZ2V0c3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGxjc19zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGNzX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CiAKIHN0YXRpYyBpbnQKIGxjc19uZXdfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYpCkBAIC0yMTY4LDE0ICsyMTgxLDExIEBACiAJCWdvdG8gb3V0OwogCWNhcmQtPmRldiA9IGRldjsKIAljYXJkLT5kZXYtPm1sX3ByaXYgPSBjYXJkOwotCWNhcmQtPmRldi0+b3BlbiA9IGxjc19vcGVuX2RldmljZTsKLQljYXJkLT5kZXYtPnN0b3AgPSBsY3Nfc3RvcF9kZXZpY2U7Ci0JY2FyZC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsY3Nfc3RhcnRfeG1pdDsKLQljYXJkLT5kZXYtPmdldF9zdGF0cyA9IGxjc19nZXRzdGF0czsKKwljYXJkLT5kZXYtPm5ldGRldl9vcHMgPSAmbGNzX25ldGRldl9vcHM7CiAJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNhcmQtPm1hYywgTENTX01BQ19MRU5HVEgpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAoIWxjc19jaGVja19tdWx0aWNhc3Rfc3VwcG9ydChjYXJkKSkKLQkJY2FyZC0+ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsY3Nfc2V0X211bHRpY2FzdF9saXN0OworCQljYXJkLT5kZXYtPm5ldGRldl9vcHMgPSAmbGNzX21jX25ldGRldl9vcHM7CiAjZW5kaWYKIG5ldGRldl9vdXQ6CiAJbGNzX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwweGZmZmZmZmZmKTsKQEAgLTIyNTgsNyArMjI2OCw2IEBACiAgICAgICAgIGludCByYzsKIAogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIHB0cjsKLQlkYWVtb25pemUoImxjc19yZWNvdmVyIik7CiAKIAlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJyZWNvdmVyMSIpOwogCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1JFQ09WRVJZX1RIUkVBRCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDkzMGUyZmMuLmJlNzE2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC0xMzEyLDcgKzEzMTIsNyBAQAogCiAJaWYgKG5ldGl1Y3ZfdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkgewogCQlJVUNWX0RCRl9URVhUKGRhdGEsIDIsICJFQlVTWSBmcm9tIG5ldGl1Y3ZfdHhcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJjID0gbmV0aXVjdl90cmFuc21pdF9za2IocHJpdnB0ci0+Y29ubiwgc2tiKSAhPSAwOwpAQCAtMTg3NiwyMCArMTg3NiwyNCBAQAogLyoqCiAgKiBJbml0aWFsaXplIGEgbmV0IGRldmljZS4gKENhbGxlZCBmcm9tIGtlcm5lbCBpbiBhbGxvY19uZXRkZXYoKSkKICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRpdWN2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5ldGl1Y3Zfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0aXVjdl9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXRpdWN2X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRpdWN2X3R4LAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBuZXRpdWN2X2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCBuZXRpdWN2X3NldHVwX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bXR1CSAgICAgICAgID0gTkVUSVVDVl9NVFVfREVGQVVMVDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICAgPSBuZXRpdWN2X3R4OwotCWRldi0+b3BlbgkgICAgICAgICA9IG5ldGl1Y3Zfb3BlbjsKLQlkZXYtPnN0b3AJICAgICAgICAgPSBuZXRpdWN2X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzCSAgICAgICAgID0gbmV0aXVjdl9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgICAgICAgICAgPSBuZXRpdWN2X2NoYW5nZV9tdHU7CiAJZGV2LT5kZXN0cnVjdG9yICAgICAgICAgID0gbmV0aXVjdl9mcmVlX25ldGRldmljZTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiAgICAgPSBORVRJVUNWX0hEUkxFTjsKIAlkZXYtPmFkZHJfbGVuICAgICAgICAgICAgPSAwOwogCWRldi0+dHlwZSAgICAgICAgICAgICAgICA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuICAgICAgICA9IE5FVElVQ1ZfUVVFVUVMRU5fREVGQVVMVDsKIAlkZXYtPmZsYWdzCSAgICAgICAgID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworCWRldi0+bmV0ZGV2X29wcwkJID0gJm5ldGl1Y3ZfbmV0ZGV2X29wczsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCBlMGM0NTU3Li40NDdlMWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogCXVuc2lnbmVkIGludCBzZ19za2JzX3J4OwogCXVuc2lnbmVkIGludCBzZ19mcmFnc19yeDsKIAl1bnNpZ25lZCBpbnQgc2dfYWxsb2NfcGFnZV9yeDsKKwl1bnNpZ25lZCBpbnQgdHhfY3N1bTsKIH07CiAKIC8qIFJvdXRpbmcgc3R1ZmYgKi8KQEAgLTQwMyw3ICs0MDQsNiBAQAogLyogcG9zc2libGUgdHlwZXMgb2YgcWV0aCBsYXJnZV9zZW5kIHN1cHBvcnQgKi8KIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHsKIAlRRVRIX0xBUkdFX1NFTkRfTk8sCi0JUUVUSF9MQVJHRV9TRU5EX0VERFAsCiAJUUVUSF9MQVJHRV9TRU5EX1RTTywKIH07CiAKQEAgLTgzOCwxMSArODM4LDkgQEAKIGludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICosIGludCwgaW50KTsKIGludCBxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICosIHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50LAotCQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCwgaW50KTsKKwkJCXN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQsIGludCwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkgICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCSAgICBpbnQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKKwkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQpOwogaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCXN0cnVjdCBldGh0b29sX3N0YXRzICosIHU2NCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCBkMWI1YmViLi5jODI3ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC0yNiw3ICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJxZXRoX2NvcmUuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgogCiBzdHJ1Y3QgcWV0aF9kYmZfaW5mbyBxZXRoX2RiZltRRVRIX0RCRl9JTkZPU10gPSB7CiAJLyogZGVmaW5lIGRiZiAtIE5hbWUsIFBhZ2VzLCBBcmVhcywgTWF4bGVuLCBMZXZlbCwgVmlldywgSGFuZGxlICovCkBAIC0yODUsMTcgKzI4Myw2IEBACiAJCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKIAljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwogCXN3aXRjaCAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kKSB7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfRUREUDoKLQkJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJTkVUSUZfRl9IV19DU1VNOwotCQl9IGVsc2UgewotCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCQlORVRJRl9GX0hXX0NTVU0pOwotCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJfQotCQlicmVhazsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9UU086CiAJCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfVFNPKSkgewogCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfApAQCAtOTU2LDcgKzk0Myw2IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKIAl9Ci0JcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKGJ1Zik7CiAJZm9yIChpID0gMDsgaSA8IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCk7ICsraSkgewogCQlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciAmJiBidWYtPmlzX2hlYWRlcltpXSkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLApAQCAtMTY5MCw3ICsxNjc2LDcgQEAKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHkgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGV2ZW50X3RpbWVvdXQ7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInNlbmRjdGwiKTsKQEAgLTE3MTUsOSArMTcwMSwxMCBAQAogCXFldGhfcHJlcGFyZV9jb250cm9sX2RhdGEoY2FyZCwgbGVuLCBpb2IpOwogCiAJaWYgKElTX0lQQShpb2ItPmRhdGEpKQotCQl0aW1lb3V0ID0gamlmZmllcyArIFFFVEhfSVBBX1RJTUVPVVQ7CisJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX0lQQV9USU1FT1VUOwogCWVsc2UKLQkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX1RJTUVPVVQ7CisJCWV2ZW50X3RpbWVvdXQgPSBRRVRIX1RJTUVPVVQ7CisJdGltZW91dCA9IGppZmZpZXMgKyBldmVudF90aW1lb3V0OwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgIm5vaXJxcG5kIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKQEAgLTE3NDUsNyArMTczMiw3IEBACiAJaWYgKChjbWQtPmhkci5jb21tYW5kID09IElQQV9DTURfU0VUSVApICYmCiAJICAgIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjQpKSB7CiAJCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHJlcGx5LT53YWl0X3EsCi0JCSAgICBhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSwgdGltZW91dCkpCisJCSAgICBhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSwgZXZlbnRfdGltZW91dCkpCiAJCQlnb3RvIHRpbWVfZXJyOwogCX0gZWxzZSB7CiAJCXdoaWxlICghYXRvbWljX3JlYWQoJnJlcGx5LT5yZWNlaXZlZCkpIHsKQEAgLTI2OTMsNDAgKzI2ODAsMjEgQEAKIAkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGludCBxZGlvX2VycikKIHsKIAlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmY7Ci0JaW50IGNjID0gcWRpb19lcnIgJiAzOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImhkc25kZXJyIik7CiAJcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwgcWRpb19lcnIsICJxb3V0ZXJyIik7Ci0Jc3dpdGNoIChjYykgewotCWNhc2UgMDoKLQkJaWYgKHFkaW9fZXJyKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAibG5rZmFpbCIpOwotCQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJTA0eCAlMDJ4IiwKLQkJCQkgICAgICAgKHUxNilxZGlvX2VyciwgKHU4KXNiYWxmMTUpOwotCQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JCX0KKworCWlmICghcWRpb19lcnIpCiAJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTk9ORTsKLQljYXNlIDI6Ci0JCWlmIChxZGlvX2VyciAmIFFESU9fRVJST1JfU0lHQV9CVVNZKSB7Ci0JCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAxLCAiU0lHQWNjMkIiKTsKLQkJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7Ci0JCX0KLQkJaWYgKChzYmFsZjE1ID49IDE1KSAmJiAoc2JhbGYxNSA8PSAzMSkpCi0JCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX1JFVFJZOwotCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0xJTktfRkFJTFVSRTsKLQkJLyogbG9vayBhdCBxZGlvX2Vycm9yIGFuZCBzYmFsZiAxNSAqLwotCWNhc2UgMToKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMSwgIlNJR0FjYzEiKTsKLQkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7Ci0JY2FzZSAzOgotCWRlZmF1bHQ6Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJTSUdBY2MzIik7Ci0JCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAxLCAiJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCXJldHVybiBRRVRIX1NFTkRfRVJST1JfS0lDS19JVDsKLQl9CisKKwlpZiAoKHNiYWxmMTUgPj0gMTUpICYmIChzYmFsZjE1IDw9IDMxKSkKKwkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9SRVRSWTsKKworCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDEsICJsbmtmYWlsIik7CisJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDEsICIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMSwgIiUwNHggJTAyeCIsCisJCSAgICAgICAodTE2KXFkaW9fZXJyLCAodTgpc2JhbGYxNSk7CisJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9MSU5LX0ZBSUxVUkU7CiB9CiAKIC8qCkBAIC0yODYyLDEwICsyODMwLDE0IEBACiAJCQlxZXRoX2dldF9taWNyb3MoKSAtCiAJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CiAJaWYgKHJjKSB7CisJCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisJCS8qIGlnbm9yZSB0ZW1wb3JhcnkgU0lHQSBlcnJvcnMgd2l0aG91dCBidXN5IGNvbmRpdGlvbiAqLworCQlpZiAocmMgPT0gUURJT19FUlJPUl9TSUdBX1RBUkdFVCkKKwkJCXJldHVybjsKIAkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImZsdXNoYnVmIik7CiAJCVFFVEhfREJGX1RFWFRfKFRSQUNFLCAyLCAiIGVyciVkIiwgcmMpOwogCQlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMiwgIiVzIiwgQ0FSRF9EREVWX0lEKHF1ZXVlLT5jYXJkKSk7Ci0JCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CisKIAkJLyogdGhpcyBtdXN0IG5vdCBoYXBwZW4gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIGlmIGl0CiAJCSAqIGhhcHBlbnMgc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZyAtPiByZWNvdmVyICovCiAJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkocXVldWUtPmNhcmQpOwpAQCAtMjk0MCwxMyArMjkxMiw3IEBACiAJfQogCWZvciAoaSA9IGZpcnN0X2VsZW1lbnQ7IGkgPCAoZmlyc3RfZWxlbWVudCArIGNvdW50KTsgKytpKSB7CiAJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JCS8qd2Ugb25seSBoYW5kbGUgdGhlIEtJQ0tfSVQgZXJyb3IgYnkgZG9pbmcgYSByZWNvdmVyeSAqLwotCQlpZiAocWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpCi0JCQkJPT0gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQpewotCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwotCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKLQkJCXJldHVybjsKLQkJfQorCQlxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKGNhcmQsIGJ1ZmZlciwgcWRpb19lcnJvcik7CiAJCXFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihxdWV1ZSwgYnVmZmVyKTsKIAl9CiAJYXRvbWljX3N1Yihjb3VudCwgJnF1ZXVlLT51c2VkX2J1ZmZlcnMpOwpAQCAtMzE4NywxMSArMzE1Myw5IEBACiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlzdHJ1Y3QgcWV0aF9oZHIgKmhkciwgaW50IGVsZW1lbnRzX25lZWRlZCwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIGludCBvZmZzZXQsIGludCBoZF9sZW4pCisJCWludCBvZmZzZXQsIGludCBoZF9sZW4pCiB7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7Ci0JaW50IGJ1ZmZlcnNfbmVlZGVkID0gMDsKLQlpbnQgZmx1c2hfY250ID0gMDsKIAlpbnQgaW5kZXg7CiAKIAkvKiBzcGluIHVudGlsIHdlIGdldCB0aGUgcXVldWUgLi4uICovCkBAIC0zMjA2LDI3ICszMTcwLDExIEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKQogCQlnb3RvIG91dDsKLQlpZiAoY3R4ID09IE5VTEwpCi0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQorCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0gKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQogCQkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JZWxzZSB7Ci0JCWJ1ZmZlcnNfbmVlZGVkID0gcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQocXVldWUsCi0JCQkJCQkJCQljdHgpOwotCQlpZiAoYnVmZmVyc19uZWVkZWQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KLQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIGJ1ZmZlcnNfbmVlZGVkKSAlCi0JCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCWlmIChjdHggPT0gTlVMTCkgewotCQlxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCBvZmZzZXQsIGhkX2xlbik7Ci0JCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOwotCX0gZWxzZSB7Ci0JCWZsdXNoX2NudCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LCBpbmRleCk7Ci0JCVdBUk5fT04oYnVmZmVyc19uZWVkZWQgIT0gZmx1c2hfY250KTsKLQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBpbmRleCwgZmx1c2hfY250KTsKLQl9CisJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgb2Zmc2V0LCBoZF9sZW4pOworCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOwogCXJldHVybiAwOwogb3V0OgogCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CkBAIC0zMjM2LDcgKzMxODQsNyBAQAogCiBpbnQgcWV0aF9kb19zZW5kX3BhY2tldChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpoZHIsCi0JCWludCBlbGVtZW50c19uZWVkZWQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQorCQlpbnQgZWxlbWVudHNfbmVlZGVkKQogewogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwogCWludCBzdGFydF9pbmRleDsKQEAgLTMyNjIsNTMgKzMyMTAsMzIgQEAKIAlxZXRoX3N3aXRjaF90b19wYWNraW5nX2lmX25lZWRlZChxdWV1ZSk7CiAJaWYgKHF1ZXVlLT5kb19wYWNrKSB7CiAJCWRvX3BhY2sgPSAxOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KLQkJCWlmICgoUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0KLQkJCSAgICBidWZmZXItPm5leHRfZWxlbWVudF90b19maWxsKSA8IGVsZW1lbnRzX25lZWRlZCkgewotCQkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCi0JCQkJYXRvbWljX3NldCgmYnVmZmVyLT5zdGF0ZSwKLQkJCQkJUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJCWZsdXNoX2NvdW50Kys7Ci0JCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQotCQkJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCi0JCQkJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1E7Ci0JCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKLQkJCQkvKiB3ZSBkaWQgYSBzdGVwIGZvcndhcmQsIHNvIGNoZWNrIGJ1ZmZlciBzdGF0ZQotCQkJCSAqIGFnYWluICovCi0JCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQotCQkJCQkJUUVUSF9RRElPX0JVRl9FTVBUWSl7Ci0JCQkJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgc3RhcnRfaW5kZXgsCisJCS8qIGRvZXMgcGFja2V0IGZpdCBpbiBjdXJyZW50IGJ1ZmZlcj8gKi8KKwkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkgLQorCQkgICAgYnVmZmVyLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkgPCBlbGVtZW50c19uZWVkZWQpIHsKKwkJCS8qIC4uLiBubyAtPiBzZXQgc3RhdGUgUFJJTUVEICovCisJCQlhdG9taWNfc2V0KCZidWZmZXItPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7CisJCQlmbHVzaF9jb3VudCsrOworCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPQorCQkJCShxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCArIDEpICUKKwkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCQkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW3F1ZXVlLT5uZXh0X2J1Zl90b19maWxsXTsKKwkJCS8qIHdlIGRpZCBhIHN0ZXAgZm9yd2FyZCwgc28gY2hlY2sgYnVmZmVyIHN0YXRlCisJCQkgKiBhZ2FpbiAqLworCQkJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPQorCQkJICAgIFFFVEhfUURJT19CVUZfRU1QVFkpIHsKKwkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIHN0YXJ0X2luZGV4LAogCQkJCQkJCSAgIGZsdXNoX2NvdW50KTsKLQkJCQkJYXRvbWljX3NldCgmcXVldWUtPnN0YXRlLAorCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwKIAkJCQkJCVFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIGVsZW1lbnRzIChpbmNsdWRpbmcgZm9sbG93aW5nCi0JCQkgKiBmcmVlIGJ1ZmZlcnMpIHRvIGhhbmRsZSBlZGRwIGNvbnRleHQgKi8KLQkJCWlmIChxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChxdWV1ZSwgY3R4KQotCQkJCTwgMCkgewotCQkJCXJjID0gLUVCVVNZOwotCQkJCWdvdG8gb3V0OworCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0KIAl9Ci0JaWYgKGN0eCA9PSBOVUxMKQotCQl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCAtMSwgMCk7Ci0JZWxzZSB7Ci0JCXRtcCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSwgY3R4LAotCQkJCQkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwpOwotCQlpZiAodG1wIDwgMCkgewotCQkJcmMgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KKwl0bXAgPSBxZXRoX2ZpbGxfYnVmZmVyKHF1ZXVlLCBidWZmZXIsIHNrYiwgaGRyLCAtMSwgMCk7CiAJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyB0bXApICUKIAkJCQkgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJZmx1c2hfY291bnQgKz0gdG1wOwotb3V0OgogCWlmIChmbHVzaF9jb3VudCkKIAkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOwogCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQpAQCAtNDMyNyw2ICs0MjU0LDcgQEAKIC8qIDMwICoveyJ0eCBjb3VudCJ9LAogCXsidHggZG9fUURJTyB0aW1lIn0sCiAJeyJ0eCBkb19RRElPIGNvdW50In0sCisJeyJ0eCBjc3VtIn0sCiB9OwogCiBpbnQgcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDM3OCw2ICs0MzA2LDcgQEAKIAlkYXRhWzMwXSA9IGNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfY250OwogCWRhdGFbMzFdID0gY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWU7CiAJZGF0YVszMl0gPSBjYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250OworCWRhdGFbMzNdID0gY2FyZC0+cGVyZl9zdGF0cy50eF9jc3VtOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCmluZGV4IDQwODAxMjYuLmU2OWRlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKQEAgLTEsNjk5ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3Ci0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCi0gKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KLQotI2luY2x1ZGUgInFldGhfY29yZS5oIgotI2luY2x1ZGUgInFldGhfY29yZV9tcGMuaCIKLSNpbmNsdWRlICJxZXRoX2NvcmVfb2ZmbC5oIgotCi1pbnQgcWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWludCBpbmRleCA9IHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsOwotCWludCBlbGVtZW50c19uZWVkZWQgPSBjdHgtPm51bV9lbGVtZW50czsKLQlpbnQgZWxlbWVudHNfaW5fYnVmZmVyOwotCWludCBza2JzX2luX2J1ZmZlcjsKLQlpbnQgYnVmZmVyc19uZWVkZWQgPSAwOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjYmZjIik7Ci0Jd2hpbGUgKGVsZW1lbnRzX25lZWRlZCA+IDApIHsKLQkJYnVmZmVyc19uZWVkZWQrKzsKLQkJaWYgKGF0b21pY19yZWFkKCZxdWV1ZS0+YnVmc1tpbmRleF0uc3RhdGUpICE9Ci0JCQkJUUVUSF9RRElPX0JVRl9FTVBUWSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJZWxlbWVudHNfaW5fYnVmZmVyID0gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSAtCi0JCQkJICAgICBxdWV1ZS0+YnVmc1tpbmRleF0ubmV4dF9lbGVtZW50X3RvX2ZpbGw7Ci0JCXNrYnNfaW5fYnVmZmVyID0gZWxlbWVudHNfaW5fYnVmZmVyIC8gY3R4LT5lbGVtZW50c19wZXJfc2tiOwotCQllbGVtZW50c19uZWVkZWQgLT0gc2tic19pbl9idWZmZXIgKiBjdHgtPmVsZW1lbnRzX3Blcl9za2I7Ci0JCWluZGV4ID0gKGluZGV4ICsgMSkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCX0KLQlyZXR1cm4gYnVmZmVyc19uZWVkZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHFldGhfZWRkcF9mcmVlX2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZjdHgiKTsKLQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fcGFnZXM7ICsraSkKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+cGFnZXNbaV0pOwotCWtmcmVlKGN0eC0+cGFnZXMpOwotCWtmcmVlKGN0eC0+ZWxlbWVudHMpOwotCWtmcmVlKGN0eCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2dldF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4KQotewotCWF0b21pY19pbmMoJmN0eC0+cmVmY250KTsKLX0KLQotdm9pZCBxZXRoX2VkZHBfcHV0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgpCi17Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjdHgtPnJlZmNudCkgPT0gMCkKLQkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9lZGRwX3B1dF9jb250ZXh0KTsKLQotdm9pZCBxZXRoX2VkZHBfYnVmX3JlbGVhc2VfY29udGV4dHMoc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSAqcmVmOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImVkZHByY3R4Iik7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZidWYtPmN0eF9saXN0KSkgewotCQlyZWYgPSBsaXN0X2VudHJ5KGJ1Zi0+Y3R4X2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHFldGhfZWRkcF9jb250ZXh0X3JlZmVyZW5jZSwgbGlzdCk7Ci0JCXFldGhfZWRkcF9wdXRfY29udGV4dChyZWYtPmN0eCk7Ci0JCWxpc3RfZGVsKCZyZWYtPmxpc3QpOwotCQlrZnJlZShyZWYpOwotCX0KLX0KLQotc3RhdGljIGludCBxZXRoX2VkZHBfYnVmX3JlZl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCkKLXsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlICpyZWY7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiZWRkcHJmY3giKTsKLQlyZWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHRfcmVmZXJlbmNlKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlZiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlxZXRoX2VkZHBfZ2V0X2NvbnRleHQoY3R4KTsKLQlyZWYtPmN0eCA9IGN0eDsKLQlsaXN0X2FkZF90YWlsKCZyZWYtPmxpc3QsICZidWYtPmN0eF9saXN0KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHFldGhfZWRkcF9maWxsX2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXI7Ci0JaW50IGVsZW1lbnRzID0gY3R4LT5udW1fZWxlbWVudHM7Ci0JaW50IGVsZW1lbnQgPSAwOwotCWludCBmbHVzaF9jbnQgPSAwOwotCWludCBtdXN0X3JlZmNudCA9IDE7Ci0JaW50IGk7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZpYnUiKTsKLQl3aGlsZSAoZWxlbWVudHMgPiAwKSB7Ci0JCWJ1ZiA9ICZxdWV1ZS0+YnVmc1tpbmRleF07Ci0JCWlmIChhdG9taWNfcmVhZCgmYnVmLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgewotCQkJLyogbm9ybWFsbHkgdGhpcyBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSB3ZSBjaGVja2VkIGZvcgotCQkJICogYXZhaWxhYmxlIGVsZW1lbnRzIGluIHFldGhfY2hlY2tfZWxlbWVudHNfZm9yX2NvbnRleHQKLQkJCSAqLwotCQkJaWYgKGVsZW1lbnQgPT0gMCkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJZWxzZSB7Ci0JCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGQgb25seSBwYXJ0aWFsbHkgZmlsbCIKLQkJCQkJImVkZHAgYnVmZmVyIVxuIik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQkJLyogY2hlY2sgaWYgdGhlIHdob2xlIG5leHQgc2tiIGZpdHMgaW50byBjdXJyZW50IGJ1ZmZlciAqLwotCQlpZiAoKFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhxdWV1ZS0+Y2FyZCkgLQotCQkJCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKQotCQkJCTwgY3R4LT5lbGVtZW50c19wZXJfc2tiKXsKLQkJCS8qIG5vIC0+IGdvIHRvIG5leHQgYnVmZmVyICovCi0JCQlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX1BSSU1FRCk7Ci0JCQlpbmRleCA9IChpbmRleCArIDEpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQkJCWZsdXNoX2NudCsrOwotCQkJLyogbmV3IGJ1ZmZlciwgc28gd2UgaGF2ZSB0byBhZGQgY3R4IHRvIGJ1ZmZlcidjdHhfbGlzdAotCQkJICogYW5kIGluY3JlbWVudCBjdHgncyByZWZjbnQgKi8KLQkJCW11c3RfcmVmY250ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChtdXN0X3JlZmNudCkgewotCQkJbXVzdF9yZWZjbnQgPSAwOwotCQkJaWYgKHFldGhfZWRkcF9idWZfcmVmX2NvbnRleHQoYnVmLCBjdHgpKSB7Ci0JCQkJZ290byBvdXRfY2hlY2s7Ci0JCQl9Ci0JCX0KLQkJYnVmZmVyID0gYnVmLT5idWZmZXI7Ci0JCS8qIGZpbGwgb25lIHNrYiBpbnRvIGJ1ZmZlciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5lbGVtZW50c19wZXJfc2tiOyArK2kpIHsKLQkJCWlmIChjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmxlbmd0aCAhPSAwKSB7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWFkZHIgPSBjdHgtPmVsZW1lbnRzW2VsZW1lbnRdLmFkZHI7Ci0JCQkJYnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGxdLgotCQkJCWxlbmd0aCA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0ubGVuZ3RoOwotCQkJCWJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsXS4KLQkJCQlmbGFncyA9IGN0eC0+ZWxlbWVudHNbZWxlbWVudF0uZmxhZ3M7Ci0JCQkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwotCQkJfQotCQkJZWxlbWVudCsrOwotCQkJZWxlbWVudHMtLTsKLQkJfQotCX0KLW91dF9jaGVjazoKLQlpZiAoIXF1ZXVlLT5kb19wYWNrKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJmaWxsYmZucCIpOwotCQkvKiBzZXQgc3RhdGUgdG8gUFJJTUVEIC0+IHdpbGwgYmUgZmx1c2hlZCAqLwotCQlpZiAoYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA+IDApIHsKLQkJCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfUFJJTUVEKTsKLQkJCWZsdXNoX2NudCsrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQotCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImZpbGxiZnBhIik7Ci0JCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID49Ci0JCQkJUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSkgewotCQkJLyoKLQkJCSAqIHBhY2tlZCBidWZmZXIgaWYgZnVsbCAtPiBzZXQgc3RhdGUgUFJJTUVECi0JCQkgKiAtPiB3aWxsIGJlIGZsdXNoZWQKLQkJCSAqLwotCQkJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9QUklNRUQpOwotCQkJZmx1c2hfY250Kys7Ci0JCX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIGZsdXNoX2NudDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2hkcnMoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwgaW50IGRhdGFfbGVuKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0JaW50IHBrdF9sZW47Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjcnNoIik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXBrdF9sZW4gPSBlZGRwLT5uaGwgKyBlZGRwLT50aGwgKyBkYXRhX2xlbjsKLQkvKiBGSVhNRTogbGF5ZXIyIGFuZCBWTEFOICEhISAqLwotCWlmIChlZGRwLT5xaC5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpCi0JCXBrdF9sZW4gKz0gRVRIX0hMRU47Ci0JaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQlwa3RfbGVuICs9IFZMQU5fSExFTjsKLQkvKiBkb2VzIGNvbXBsZXRlIHBhY2tldCBmaXQgaW4gY3VycmVudCBwYWdlID8gKi8KLQlwYWdlX3JlbWFpbmRlciA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwotCWlmIChwYWdlX3JlbWFpbmRlciA8IChzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIHBrdF9sZW4pKSB7Ci0JCS8qIG5vIC0+IGdvIHRvIHN0YXJ0IG9mIG5leHQgcGFnZSAqLwotCQljdHgtPm9mZnNldCArPSBwYWdlX3JlbWFpbmRlcjsKLQkJcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JCXBhZ2Vfb2Zmc2V0ID0gMDsKLQl9Ci0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgJmVkZHAtPnFoLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JZWxlbWVudC0+YWRkciA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQllbGVtZW50LT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQljdHgtPm9mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQlwYWdlX29mZnNldCArPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQkvKiBhZGQgbWFjIGhlYWRlciAoPykgKi8KLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICZlZGRwLT5tYWMsIEVUSF9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IEVUSF9ITEVOOwotCQljdHgtPm9mZnNldCArPSBFVEhfSExFTjsKLQkJcGFnZV9vZmZzZXQgKz0gRVRIX0hMRU47Ci0JfQotCS8qIGFkZCBWTEFOIHRhZyAqLwotCWlmIChlZGRwLT5tYWMuaF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgewotCQltZW1jcHkocGFnZSArIHBhZ2Vfb2Zmc2V0LCAmZWRkcC0+dmxhbiwgVkxBTl9ITEVOKTsKLQkJZWxlbWVudC0+bGVuZ3RoICs9IFZMQU5fSExFTjsKLQkJY3R4LT5vZmZzZXQgKz0gVkxBTl9ITEVOOwotCQlwYWdlX29mZnNldCArPSBWTEFOX0hMRU47Ci0JfQotCS8qIGFkZCBuZXR3b3JrIGhlYWRlciAqLwotCW1lbWNweShwYWdlICsgcGFnZV9vZmZzZXQsICh1OCAqKSZlZGRwLT5uaCwgZWRkcC0+bmhsKTsKLQllbGVtZW50LT5sZW5ndGggKz0gZWRkcC0+bmhsOwotCWVkZHAtPm5oX2luX2N0eCA9IHBhZ2UgKyBwYWdlX29mZnNldDsKLQljdHgtPm9mZnNldCArPSBlZGRwLT5uaGw7Ci0JcGFnZV9vZmZzZXQgKz0gZWRkcC0+bmhsOwotCS8qIGFkZCB0cmFuc3BvcnQgaGVhZGVyICovCi0JbWVtY3B5KHBhZ2UgKyBwYWdlX29mZnNldCwgKHU4ICopJmVkZHAtPnRoLCBlZGRwLT50aGwpOwotCWVsZW1lbnQtPmxlbmd0aCArPSBlZGRwLT50aGw7Ci0JZWRkcC0+dGhfaW5fY3R4ID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCWN0eC0+b2Zmc2V0ICs9IGVkZHAtPnRobDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AoY2hhciAqZHN0LCBzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsCi0JCWludCBsZW4sIF9fd3N1bSAqaGNzdW0pCi17Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKLQlpbnQgbGVmdF9pbl9mcmFnOwotCWludCBjb3B5X2xlbjsKLQl1OCAqc3JjOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjZHRjIik7Ci0JaWYgKHNrYl9zaGluZm8oZWRkcC0+c2tiKS0+bnJfZnJhZ3MgPT0gMCkgewotCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChlZGRwLT5za2IsIGVkZHAtPnNrYl9vZmZzZXQsCi0JCQkJCQkgZHN0LCBsZW4pOwotCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldCwgbGVuLAotCQkJCSAgICAgICpoY3N1bSk7Ci0JCWVkZHAtPnNrYl9vZmZzZXQgKz0gbGVuOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChsZW4gPiAwKSB7Ci0JCQlpZiAoZWRkcC0+ZnJhZyA8IDApIHsKLQkJCQkvKiB3ZSdyZSBpbiBza2ItPmRhdGEgKi8KLQkJCQlsZWZ0X2luX2ZyYWcgPSAoZWRkcC0+c2tiLT5sZW4gLQotCQkJCQkJZWRkcC0+c2tiLT5kYXRhX2xlbikKLQkJCQkJCS0gZWRkcC0+c2tiX29mZnNldDsKLQkJCQlzcmMgPSBlZGRwLT5za2ItPmRhdGEgKyBlZGRwLT5za2Jfb2Zmc2V0OwotCQkJfSBlbHNlIHsKLQkJCQlmcmFnID0gJnNrYl9zaGluZm8oZWRkcC0+c2tiKS0+ZnJhZ3NbCi0JCQkJCWVkZHAtPmZyYWddOwotCQkJCWxlZnRfaW5fZnJhZyA9IGZyYWctPnNpemUgLSBlZGRwLT5mcmFnX29mZnNldDsKLQkJCQlzcmMgPSAodTggKikoKHBhZ2VfdG9fcGZuKGZyYWctPnBhZ2UpIDw8Ci0JCQkJCVBBR0VfU0hJRlQpICsgZnJhZy0+cGFnZV9vZmZzZXQgKwotCQkJCQllZGRwLT5mcmFnX29mZnNldCk7Ci0JCQl9Ci0JCQlpZiAobGVmdF9pbl9mcmFnIDw9IDApIHsKLQkJCQllZGRwLT5mcmFnKys7Ci0JCQkJZWRkcC0+ZnJhZ19vZmZzZXQgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY29weV9sZW4gPSBtaW4obGVmdF9pbl9mcmFnLCBsZW4pOwotCQkJbWVtY3B5KGRzdCwgc3JjLCBjb3B5X2xlbik7Ci0JCQkqaGNzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBjb3B5X2xlbiwgKmhjc3VtKTsKLQkJCWRzdCArPSBjb3B5X2xlbjsKLQkJCWVkZHAtPmZyYWdfb2Zmc2V0ICs9IGNvcHlfbGVuOwotCQkJZWRkcC0+c2tiX29mZnNldCArPSBjb3B5X2xlbjsKLQkJCWxlbiAtPSBjb3B5X2xlbjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2RhdGFfdGNwKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbiwgX193c3VtIGhjc3VtKQotewotCXU4ICpwYWdlOwotCWludCBwYWdlX3JlbWFpbmRlcjsKLQlpbnQgcGFnZV9vZmZzZXQ7Ci0Jc3RydWN0IHFldGhfZWRkcF9lbGVtZW50ICplbGVtZW50OwotCWludCBmaXJzdF9sYXAgPSAxOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjc2R0Iik7Ci0JcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JcGFnZV9vZmZzZXQgPSBjdHgtPm9mZnNldCAlIFBBR0VfU0laRTsKLQllbGVtZW50ID0gJmN0eC0+ZWxlbWVudHNbY3R4LT5udW1fZWxlbWVudHNdOwotCXdoaWxlIChkYXRhX2xlbikgewotCQlwYWdlX3JlbWFpbmRlciA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwotCQlpZiAocGFnZV9yZW1haW5kZXIgPCBkYXRhX2xlbikgewotCQkJcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AocGFnZSArIHBhZ2Vfb2Zmc2V0LCBlZGRwLAotCQkJCQkJcGFnZV9yZW1haW5kZXIsICZoY3N1bSk7Ci0JCQllbGVtZW50LT5sZW5ndGggKz0gcGFnZV9yZW1haW5kZXI7Ci0JCQlpZiAoZmlyc3RfbGFwKQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19GSVJTVF9GUkFHOwotCQkJZWxzZQotCQkJCWVsZW1lbnQtPmZsYWdzID0gU0JBTF9GTEFHU19NSURETEVfRlJBRzsKLQkJCWN0eC0+bnVtX2VsZW1lbnRzKys7Ci0JCQllbGVtZW50Kys7Ci0JCQlkYXRhX2xlbiAtPSBwYWdlX3JlbWFpbmRlcjsKLQkJCWN0eC0+b2Zmc2V0ICs9IHBhZ2VfcmVtYWluZGVyOwotCQkJcGFnZSA9IGN0eC0+cGFnZXNbY3R4LT5vZmZzZXQgPj4gUEFHRV9TSElGVF07Ci0JCQlwYWdlX29mZnNldCA9IDA7Ci0JCQllbGVtZW50LT5hZGRyID0gcGFnZSArIHBhZ2Vfb2Zmc2V0OwotCQl9IGVsc2UgewotCQkJcWV0aF9lZGRwX2NvcHlfZGF0YV90Y3AocGFnZSArIHBhZ2Vfb2Zmc2V0LCBlZGRwLAotCQkJCQkJZGF0YV9sZW4sICZoY3N1bSk7Ci0JCQllbGVtZW50LT5sZW5ndGggKz0gZGF0YV9sZW47Ci0JCQlpZiAoIWZpcnN0X2xhcCkKLQkJCQllbGVtZW50LT5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9GUkFHOwotCQkJY3R4LT5udW1fZWxlbWVudHMrKzsKLQkJCWN0eC0+b2Zmc2V0ICs9IGRhdGFfbGVuOwotCQkJZGF0YV9sZW4gPSAwOwotCQl9Ci0JCWZpcnN0X2xhcCA9IDA7Ci0JfQotCSgoc3RydWN0IHRjcGhkciAqKWVkZHAtPnRoX2luX2N0eCktPmNoZWNrID0gY3N1bV9mb2xkKGhjc3VtKTsKLX0KLQotc3RhdGljIF9fd3N1bSBxZXRoX2VkZHBfY2hlY2tfdGNwNF9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgZGF0YV9sZW4pCi17Ci0JX193c3VtIHBoY3N1bTsgLyogcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBja3Q0Iik7Ci0JZWRkcC0+dGgudGNwLmguY2hlY2sgPSAwOwotCS8qIGNvbXB1dGUgcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwotCXBoY3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChlZGRwLT5uaC5pcDQuaC5zYWRkciwgZWRkcC0+bmguaXA0LmguZGFkZHIsCi0JCQkJICAgIGVkZHAtPnRobCArIGRhdGFfbGVuLCBJUFBST1RPX1RDUCwgMCk7Ci0JLyogY29tcHV0ZSBjaGVja3N1bSBvZiB0Y3AgaGVhZGVyICovCi0JcmV0dXJuIGNzdW1fcGFydGlhbCgmZWRkcC0+dGgsIGVkZHAtPnRobCwgcGhjc3VtKTsKLX0KLQotc3RhdGljIF9fd3N1bSBxZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLAotCQlpbnQgZGF0YV9sZW4pCi17Ci0JX19iZTMyIHByb3RvOwotCV9fd3N1bSBwaGNzdW07IC8qIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2t0NiIpOwotCWVkZHAtPnRoLnRjcC5oLmNoZWNrID0gMDsKLQkvKiBjb21wdXRlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gKi8KLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJmVkZHAtPm5oLmlwNi5oLnNhZGRyLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIDApOwotCXBoY3N1bSA9IGNzdW1fcGFydGlhbCgmZWRkcC0+bmguaXA2LmguZGFkZHIsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgcGhjc3VtKTsKLQlwcm90byA9IGh0b25sKElQUFJPVE9fVENQKTsKLQlwaGNzdW0gPSBjc3VtX3BhcnRpYWwoJnByb3RvLCBzaXplb2YodTMyKSwgcGhjc3VtKTsKLQlyZXR1cm4gcGhjc3VtOwotfQotCi1zdGF0aWMgc3RydWN0IHFldGhfZWRkcF9kYXRhICpxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShzdHJ1Y3QgcWV0aF9oZHIgKnFoLAotCQl1OCAqbmgsIHU4IG5obCwgdTggKnRoLCB1OCB0aGwpCi17Ci0Jc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwOwotCi0JUUVUSF9EQkZfVEVYVChUUkFDRSwgNSwgImVkZHBjcmRhIik7Ci0JZWRkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSksIEdGUF9BVE9NSUMpOwotCWlmIChlZGRwKSB7Ci0JCWVkZHAtPm5obCA9IG5obDsKLQkJZWRkcC0+dGhsID0gdGhsOwotCQltZW1jcHkoJmVkZHAtPnFoLCBxaCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCQltZW1jcHkoJmVkZHAtPm5oLCBuaCwgbmhsKTsKLQkJbWVtY3B5KCZlZGRwLT50aCwgdGgsIHRobCk7Ci0JCWVkZHAtPmZyYWcgPSAtMTsgLyogaW5pdGlhbGx5IHdlJ3JlIGluIHNrYi0+ZGF0YSAqLwotCX0KLQlyZXR1cm4gZWRkcDsKLX0KLQotc3RhdGljIHZvaWQgX19xZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwKQotewotCXN0cnVjdCB0Y3BoZHIgKnRjcGg7Ci0JaW50IGRhdGFfbGVuOwotCV9fd3N1bSBoY3N1bTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwZnRjcCIpOwotCWVkZHAtPnNrYl9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIGVkZHAtPm5obCArIGVkZHAtPnRobDsKLQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCWVkZHAtPnNrYl9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpOwotCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCQllZGRwLT5za2Jfb2Zmc2V0ICs9IFZMQU5fSExFTjsKLQl9Ci0JdGNwaCA9IHRjcF9oZHIoZWRkcC0+c2tiKTsKLQl3aGlsZSAoZWRkcC0+c2tiX29mZnNldCA8IGVkZHAtPnNrYi0+bGVuKSB7Ci0JCWRhdGFfbGVuID0gbWluKChpbnQpc2tiX3NoaW5mbyhlZGRwLT5za2IpLT5nc29fc2l6ZSwKLQkJCSAgICAgICAoaW50KShlZGRwLT5za2ItPmxlbiAtIGVkZHAtPnNrYl9vZmZzZXQpKTsKLQkJLyogcHJlcGFyZSBxZGlvIGhkciAqLwotCQlpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7Ci0JCQllZGRwLT5xaC5oZHIubDIucGt0X2xlbmd0aCA9IGRhdGFfbGVuICsgRVRIX0hMRU4gKwotCQkJCQkJICAgICBlZGRwLT5uaGwgKyBlZGRwLT50aGw7Ci0JCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpCi0JCQkJZWRkcC0+cWguaGRyLmwyLnBrdF9sZW5ndGggKz0gVkxBTl9ITEVOOwotCQl9IGVsc2UKLQkJCWVkZHAtPnFoLmhkci5sMy5sZW5ndGggPSBkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsOwotCQkvKiBwcmVwYXJlIGlwIGhkciAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJCWVkZHAtPm5oLmlwNC5oLnRvdF9sZW4gPSBodG9ucyhkYXRhX2xlbiArIGVkZHAtPm5obCArCi0JCQkJCQkgZWRkcC0+dGhsKTsKLQkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0gMDsKLQkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0KLQkJCQlpcF9mYXN0X2NzdW0oKHU4ICopJmVkZHAtPm5oLmlwNC5oLAotCQkJCQkJZWRkcC0+bmguaXA0LmguaWhsKTsKLQkJfSBlbHNlCi0JCQllZGRwLT5uaC5pcDYuaC5wYXlsb2FkX2xlbiA9IGh0b25zKGRhdGFfbGVuICsKLQkJCQkJCQkJZWRkcC0+dGhsKTsKLQkJLyogcHJlcGFyZSB0Y3AgaGRyICovCi0JCWlmIChkYXRhX2xlbiA9PSAoZWRkcC0+c2tiLT5sZW4gLSBlZGRwLT5za2Jfb2Zmc2V0KSkgewotCQkJLyogbGFzdCBzZWdtZW50IC0+IHNldCBGSU4gYW5kIFBTSCBmbGFncyAqLwotCQkJZWRkcC0+dGgudGNwLmguZmluID0gdGNwaC0+ZmluOwotCQkJZWRkcC0+dGgudGNwLmgucHNoID0gdGNwaC0+cHNoOwotCQl9Ci0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDRfaGRyKGVkZHAsIGRhdGFfbGVuKTsKLQkJZWxzZQotCQkJaGNzdW0gPSBxZXRoX2VkZHBfY2hlY2tfdGNwNl9oZHIoZWRkcCwgZGF0YV9sZW4pOwotCQkvKiBmaWxsIHRoZSBuZXh0IHNlZ21lbnQgaW50byB0aGUgY29udGV4dCAqLwotCQlxZXRoX2VkZHBfY3JlYXRlX3NlZ21lbnRfaGRycyhjdHgsIGVkZHAsIGRhdGFfbGVuKTsKLQkJcWV0aF9lZGRwX2NyZWF0ZV9zZWdtZW50X2RhdGFfdGNwKGN0eCwgZWRkcCwgZGF0YV9sZW4sIGhjc3VtKTsKLQkJaWYgKGVkZHAtPnNrYl9vZmZzZXQgPj0gZWRkcC0+c2tiLT5sZW4pCi0JCQlicmVhazsKLQkJLyogcHJlcGFyZSBoZWFkZXJzIGZvciBuZXh0IHJvdW5kICovCi0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJCWVkZHAtPm5oLmlwNC5oLmlkID0gaHRvbnMobnRvaHMoZWRkcC0+bmguaXA0LmguaWQpICsgMSk7Ci0JCWVkZHAtPnRoLnRjcC5oLnNlcSA9IGh0b25sKG50b2hsKGVkZHAtPnRoLnRjcC5oLnNlcSkgKwotCQkJZGF0YV9sZW4pOwotCX0KLX0KLQotc3RhdGljIGludCBxZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCA9IE5VTEw7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAiZWRkcGZpY3giKTsKLQkvKiBjcmVhdGUgb3VyIHNlZ21lbnRhdGlvbiBoZWFkZXJzIGFuZCBjb3B5IG9yaWdpbmFsIGhlYWRlcnMgKi8KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCi0JCWVkZHAgPSBxZXRoX2VkZHBfY3JlYXRlX2VkZHBfZGF0YShxaGRyLAotCQkJCQkJICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwKLQkJCQkJCSAgaXBfaGRybGVuKHNrYiksCi0JCQkJCQkgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHRjcF9oZHJsZW4oc2tiKSk7Ci0JZWxzZQotCQllZGRwID0gcWV0aF9lZGRwX2NyZWF0ZV9lZGRwX2RhdGEocWhkciwKLQkJCQkJCSAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCi0JCQkJCQkgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksCi0JCQkJCQkgIHRjcF9oZHJsZW4oc2tiKSk7Ci0KLQlpZiAoZWRkcCA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJlZGRwZmNubSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKHFoZHItPmhkci5sMi5pZCA9PSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMikgewotCQlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0JCW1lbWNweSgmZWRkcC0+bWFjLCBldGhfaGRyKHNrYiksIEVUSF9ITEVOKTsKLQkJaWYgKGVkZHAtPm1hYy5oX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCQllZGRwLT52bGFuWzBdID0gc2tiLT5wcm90b2NvbDsKLQkJCWVkZHAtPnZsYW5bMV0gPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCX0KLQl9Ci0JLyogdGhlIG5leHQgZmxhZ3Mgd2lsbCBvbmx5IGJlIHNldCBvbiB0aGUgbGFzdCBzZWdtZW50ICovCi0JZWRkcC0+dGgudGNwLmguZmluID0gMDsKLQllZGRwLT50aC50Y3AuaC5wc2ggPSAwOwotCWVkZHAtPnNrYiA9IHNrYjsKLQkvKiBiZWdpbiBzZWdtZW50YXRpb24gYW5kIGZpbGwgY29udGV4dCAqLwotCV9fcWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3AoY3R4LCBlZGRwKTsKLQlrZnJlZShlZGRwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbikKLXsKLQlpbnQgc2tic19wZXJfcGFnZTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJlZGRwY2FucCIpOwotCS8qIGNhbiB3ZSBwdXQgbXVsdGlwbGUgc2ticyBpbiBvbmUgcGFnZT8gKi8KLQlza2JzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuKTsKLQlpZiAoc2tic19wZXJfcGFnZSA+IDEpIHsKLQkJY3R4LT5udW1fcGFnZXMgPSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpIC8KLQkJCQkgc2tic19wZXJfcGFnZSArIDE7Ci0JCWN0eC0+ZWxlbWVudHNfcGVyX3NrYiA9IDE7Ci0JfSBlbHNlIHsKLQkJLyogbm8gLT4gaG93IG1hbnkgZWxlbWVudHMgcGVyIHNrYj8gKi8KLQkJY3R4LT5lbGVtZW50c19wZXJfc2tiID0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgKyBoZHJfbGVuICsKLQkJCQkgICAgIFBBR0VfU0laRSkgPj4gUEFHRV9TSElGVDsKLQkJY3R4LT5udW1fcGFnZXMgPSBjdHgtPmVsZW1lbnRzX3Blcl9za2IgKgotCQkJCSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyArIDEpOwotCX0KLQljdHgtPm51bV9lbGVtZW50cyA9IGN0eC0+ZWxlbWVudHNfcGVyX3NrYiAqCi0JCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoCi0JCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQl1OCAqYWRkcjsKLQlpbnQgaTsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjZyIpOwotCS8qIGNyZWF0ZSB0aGUgY29udGV4dCBhbmQgYWxsb2NhdGUgcGFnZXMgKi8KLQljdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24xIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQlxZXRoX2VkZHBfY2FsY19udW1fcGFnZXMoY3R4LCBza2IsIGhkcl9sZW4pOwotCWlmIChjdHgtPmVsZW1lbnRzX3Blcl9za2IgPiBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY2lzIik7Ci0JCWtmcmVlKGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQljdHgtPnBhZ2VzID0ga2NhbGxvYyhjdHgtPm51bV9wYWdlcywgc2l6ZW9mKHU4ICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoY3R4LT5wYWdlcyA9PSBOVUxMKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcGNuMiIpOwotCQlrZnJlZShjdHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGN0eC0+bnVtX3BhZ2VzOyArK2kpIHsKLQkJYWRkciA9ICh1OCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKGFkZHIgPT0gTlVMTCkgewotCQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY24zIik7Ci0JCQljdHgtPm51bV9wYWdlcyA9IGk7Ci0JCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQljdHgtPnBhZ2VzW2ldID0gYWRkcjsKLQl9Ci0JY3R4LT5lbGVtZW50cyA9IGtjYWxsb2MoY3R4LT5udW1fZWxlbWVudHMsCi0JCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCksIEdGUF9BVE9NSUMpOwotCWlmIChjdHgtPmVsZW1lbnRzID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNlZGRwY240Iik7Ci0JCXFldGhfZWRkcF9mcmVlX2NvbnRleHQoY3R4KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCS8qIHJlc2V0IG51bV9lbGVtZW50czsgd2lsbCBiZSBpbmNyZW1lbnRlZCBhZ2FpbiBpbiBmaWxsX2J1ZmZlciB0bwotCSAqIHJlZmxlY3QgbnVtYmVyIG9mIGFjdHVhbGx5IHVzZWQgZWxlbWVudHMgKi8KLQljdHgtPm51bV9lbGVtZW50cyA9IDA7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RhdGljIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X3RjcCgKLQkJc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJc3RydWN0IHFldGhfaGRyICpxaGRyKQotewotCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKLQotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjdCIpOwotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLAotCQkJCQkJKHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsKLQkJCQkJCWlwX2hkcmxlbihza2IpICsKLQkJCQkJCXRjcF9oZHJsZW4oc2tiKSkpOwotCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKLQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArCi0JCQl0Y3BfaGRybGVuKHNrYikpOwotCWVsc2UKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNldGNwaW52Iik7Ci0KLQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImNyZWRkcG5sIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAocWV0aF9lZGRwX2ZpbGxfY29udGV4dF90Y3AoY3R4LCBza2IsIHFoZHIpKSB7Ci0JCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsICJjZWRkcHRmZSIpOwotCQlxZXRoX2VkZHBfZnJlZV9jb250ZXh0KGN0eCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlhdG9taWNfc2V0KCZjdHgtPnJlZmNudCwgMSk7Ci0JcmV0dXJuIGN0eDsKLX0KLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHFldGhfaGRyICpxaGRyLAotCQl1bnNpZ25lZCBjaGFyIHNrX3Byb3RvY29sKQotewotCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDUsICJjcmVkZHBjIik7Ci0Jc3dpdGNoIChza19wcm90b2NvbCkgewotCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCXJldHVybiBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHRfdGNwKGNhcmQsIHNrYiwgcWhkcik7Ci0JZGVmYXVsdDoKLQkJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgImVkZHBpbnZwIik7Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KTsKLQotdm9pZCBxZXRoX3Rzb19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIsCi0JCXN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHFldGhfaGRyX3RzbyAqaGRyID0gKHN0cnVjdCBxZXRoX2hkcl90c28gKilxaGRyOwotCXN0cnVjdCB0Y3BoZHIgKnRjcGggPSB0Y3BfaGRyKHNrYik7Ci0Jc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7Ci0KLQlRRVRIX0RCRl9URVhUKFRSQUNFLCA1LCAidHNvZmhkciIpOwotCi0JLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KLQloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKLQkvKnNldCB2YWx1ZXMgd2hpY2ggYXJlIGZpeCBmb3IgdGhlIGZpcnN0IGFwcHJvYWNoIC4uLiovCi0JaGRyLT5leHQuaGRyX3RvdF9sZW4gPSAoX191MTYpIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfZXh0X3Rzbyk7Ci0JaGRyLT5leHQuaW1iX2hkcl9ubyAgPSAxOwotCWhkci0+ZXh0Lmhkcl90eXBlICAgID0gMTsKLQloZHItPmV4dC5oZHJfdmVyc2lvbiA9IDE7Ci0JaGRyLT5leHQuaGRyX2xlbiAgICAgPSAyODsKLQkvKmluc2VydCBub24tZml4IHZhbHVlcyAqLwotCWhkci0+ZXh0Lm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7Ci0JaGRyLT5leHQuZGdfaGRyX2xlbiA9IChfX3UxNikoaXBoLT5paGwqNCArIHRjcGgtPmRvZmYqNCk7Ci0JaGRyLT5leHQucGF5bG9hZF9sZW4gPSAoX191MTYpKHNrYi0+bGVuIC0gaGRyLT5leHQuZGdfaGRyX2xlbiAtCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7Ci0JdGNwaC0+Y2hlY2sgPSAwOwotCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKLQkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOwotCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCi0JCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JfSBlbHNlIHsKLQkJLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCi0JCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCi0JCQkJCSAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JCWlwaC0+dG90X2xlbiA9IDA7Ci0JCWlwaC0+Y2hlY2sgPSAwOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfdHNvX2ZpbGxfaGVhZGVyKTsKLQotdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgdGxlbjsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJdGxlbiA9IG50b2hzKGlwX2hkcihza2IpLT50b3RfbGVuKSAtIChpcF9oZHIoc2tiKS0+aWhsIDw8IDIpOwotCQlzd2l0Y2ggKGlwX2hkcihza2IpLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoCi0JCQkJaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIsCi0JCQkJdGxlbiwgaXBfaGRyKHNrYiktPnByb3RvY29sLAotCQkJCXNrYl9jaGVja3N1bShza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYiksCi0JCQkJCXRsZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7Ci0JCXN3aXRjaCAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcikgewotCQljYXNlIElQUFJPVE9fVENQOgotCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQljYXNlIElQUFJPVE9fVURQOgotCQkJdWRwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0JCQl1ZHBfaGRyKHNrYiktPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKAotCQkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAotCQkJCWlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuLAotCQkJCWlwdjZfaGRyKHNrYiktPm5leHRoZHIsCi0JCQkJc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKLQkJCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4sIDApKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF90eF9jc3VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAppbmRleCA4NmJmN2RmLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA3Ci0gKiAgICBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4sCi0gKgkJIEZyYW5rIEJsYXNjaGthIDxmcmFuay5ibGFzY2hrYUBkZS5pYm0uY29tPgotICovCi0KLSNpZm5kZWYgX19RRVRIX0NPUkVfT0ZGTF9IX18KLSNkZWZpbmUgX19RRVRIX0NPUkVfT0ZGTF9IX18KLQotc3RydWN0IHFldGhfZWRkcF9lbGVtZW50IHsKLQl1MzIgZmxhZ3M7Ci0JdTMyIGxlbmd0aDsKLQl2b2lkICphZGRyOwotfTsKLQotc3RydWN0IHFldGhfZWRkcF9jb250ZXh0IHsKLQlhdG9taWNfdCByZWZjbnQ7Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgdHlwZTsKLQlpbnQgbnVtX3BhZ2VzOwkJCSAgICAvKiAjIG9mIGFsbG9jYXRlZCBwYWdlcyAqLwotCXU4ICoqcGFnZXM7CQkJICAgIC8qIHBvaW50ZXJzIHRvIHBhZ2VzICovCi0JaW50IG9mZnNldDsJCQkgICAgLyogb2Zmc2V0IGluIGN0eCBkdXJpbmcgY3JlYXRpb24gKi8KLQlpbnQgbnVtX2VsZW1lbnRzOwkJICAgIC8qICMgb2YgcmVxdWlyZWQgJ1NCQUxFcycgKi8KLQlzdHJ1Y3QgcWV0aF9lZGRwX2VsZW1lbnQgKmVsZW1lbnRzOyAvKiBhcnJheSBvZiAnU0JBTEVzJyAqLwotCWludCBlbGVtZW50c19wZXJfc2tiOwkJICAgIC8qICMgb2YgJ1NCQUxFcycgcGVyIHNrYiAqKi8KLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eDsKLX07Ci0KLXN0cnVjdCBxZXRoX2VkZHBfZGF0YSB7Ci0Jc3RydWN0IHFldGhfaGRyIHFoOwotCXN0cnVjdCBldGhoZHIgbWFjOwotCV9fYmUxNiB2bGFuWzJdOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBpcGhkciBoOwotCQkJdTggb3B0aW9uc1s0MF07Ci0JCX0gaXA0OwotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGlwdjZoZHIgaDsKLQkJfSBpcDY7Ci0JfSBuaDsKLQl1OCBuaGw7Ci0Jdm9pZCAqbmhfaW5fY3R4OwkvKiBhZGRyZXNzIG9mIG5oIHdpdGhpbiB0aGUgY3R4ICovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IHRjcGhkciBoOwotCQkJdTggb3B0aW9uc1s0MF07Ci0JCX0gdGNwOwotCX0gdGg7Ci0JdTggdGhsOwotCXZvaWQgKnRoX2luX2N0eDsJLyogYWRkcmVzcyBvZiB0aCB3aXRoaW4gdGhlIGN0eCAqLwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHNrYl9vZmZzZXQ7Ci0JaW50IGZyYWc7Ci0JaW50IGZyYWdfb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWV4dGVybiBzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKnFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICosCi0JCSBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgdW5zaWduZWQgY2hhcik7Ci1leHRlcm4gdm9pZCBxZXRoX2VkZHBfcHV0X2NvbnRleHQoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOwotZXh0ZXJuIGludCBxZXRoX2VkZHBfZmlsbF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKiwgaW50KTsKLWV4dGVybiB2b2lkIHFldGhfZWRkcF9idWZfcmVsZWFzZV9jb250ZXh0cyhzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKik7Ci1leHRlcm4gaW50IHFldGhfZWRkcF9jaGVja19idWZmZXJzX2Zvcl9jb250ZXh0KHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKLQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICopOwotCi12b2lkIHFldGhfdHNvX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCXN0cnVjdCBza19idWZmICopOwotdm9pZCBxZXRoX3R4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLSNlbmRpZiAvKiBfX1FFVEhfQ09SRV9FRERQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwppbmRleCBjMjZlODQyLi41Njg0NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwpAQCAtNDI3LDggKzQyNyw2IEBACiAJc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9OTzoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJubyIpOwotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX0VERFA6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiRUREUCIpOwogCWNhc2UgUUVUSF9MQVJHRV9TRU5EX1RTTzoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJUU08iKTsKIAlkZWZhdWx0OgpAQCAtNDQ5LDggKzQ0Nyw2IEBACiAJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKIAlpZiAoIXN0cmNtcCh0bXAsICJubyIpKSB7CiAJCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIkVERFAiKSkgewotCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CiAJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIlRTTyIpKSB7CiAJCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfVFNPOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAwN2FiOGE1Li4xNzIwMzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogCiAjaW5jbHVkZSAicWV0aF9jb3JlLmgiCi0jaW5jbHVkZSAicWV0aF9jb3JlX29mZmwuaCIKIAogc3RhdGljIGludCBxZXRoX2wyX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTMyOCw2ICszMjcsMTAgQEAKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQ7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImFpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiYWlkUkVDIik7CisJCXJldHVybjsKKwl9CiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwogCWlmIChpZCkgewogCQlpZC0+dmlkID0gdmlkOwpAQCAtMzQ0LDYgKzM0NywxMCBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImtpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmNhcmQtPnZpZF9saXN0LCBsaXN0KSB7CiAJCWlmIChpZC0+dmlkID09IHZpZCkgewpAQCAtMzc5LDcgKzM4Niw4IEBACiAJCQlkZXZfY2xvc2UoY2FyZC0+ZGV2KTsKIAkJCXJ0bmxfdW5sb2NrKCk7CiAJCX0KLQkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wKSB7CisJCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCB8fAorCQkJcmVjb3ZlcnlfbW9kZSkgewogCQkJX191OCAqbWFjID0gJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF07CiAJCQlyYyA9IHFldGhfbDJfc2VuZF9kZWxtYWMoY2FyZCwgbWFjKTsKIAkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiTGVyciVkIiwgcmMpOwpAQCAtMzg4LDcgKzM5Niw4IEBACiAJfQogCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1NPRlRTRVRVUCkgewogCQlxZXRoX2wyX3Byb2Nlc3NfdmxhbnMoY2FyZCwgMSk7Ci0JCWlmICghY2FyZC0+dXNlX2hhcmRfc3RvcCkKKwkJaWYgKCFjYXJkLT51c2VfaGFyZF9zdG9wIHx8CisJCQlyZWNvdmVyeV9tb2RlKQogCQkJcWV0aF9sMl9kZWxfYWxsX21jKGNhcmQpOwogCQlxZXRoX2NsZWFyX2lwYWNtZF9saXN0KGNhcmQpOwogCQljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOwpAQCAtNTkzLDYgKzYwMiwxMCBAQAogCX0KIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgMywgIiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwogCVFFVEhfREJGX0hFWChUUkFDRSwgMywgYWRkci0+c2FfZGF0YSwgT1NBX0FERFJfTEVOKTsKKwlpZiAocWV0aF93YWl0X2Zvcl90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKSB7CisJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtY1JFQyIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KIAlyYyA9IHFldGhfbDJfc2VuZF9kZWxtYWMoY2FyZCwgJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF0pOwogCWlmICghcmMpCiAJCXJjID0gcWV0aF9sMl9zZW5kX3NldG1hYyhjYXJkLCBhZGRyLT5zYV9kYXRhKTsKQEAgLTYwOCw2ICs2MjEsOSBAQAogCQlyZXR1cm4gOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMywgInNldG11bHRpIik7CisJaWYgKHFldGhfdGhyZWFkc19ydW5uaW5nKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSkKKwkJcmV0dXJuOwogCXFldGhfbDJfZGVsX2FsbF9tYyhjYXJkKTsKIAlzcGluX2xvY2tfYmgoJmNhcmQtPm1jbG9jayk7CiAJZm9yIChkbSA9IGRldi0+bWNfbGlzdDsgZG07IGRtID0gZG0tPm5leHQpCkBAIC02MzQsOCArNjUwLDYgQEAKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCiAJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CiAJaW50IGRhdGFfb2Zmc2V0ID0gLTE7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CiAJaW50IGhkX2xlbiA9IDA7CkBAIC02NTUsMTQgKzY2OSwxMCBAQAogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlpZiAoc2tiX2lzX2dzbyhza2IpKQotCQlsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7Ci0KIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKXNrYi0+ZGF0YTsKIAllbHNlIHsKLQkJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCi0JCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkgeworCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQkJbmV3X3NrYiA9IHNrYjsKIAkJCWRhdGFfb2Zmc2V0ID0gRVRIX0hMRU47CiAJCQloZF9sZW4gPSBFVEhfSExFTjsKQEAgLTY4OSw1OSArNjk5LDI2IEBACiAJCX0KIAl9CiAKLQlpZiAobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfRUREUCkgewotCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoY2FyZCwgbmV3X3NrYiwgaGRyLAotCQkJCQkJc2tiLT5zay0+c2tfcHJvdG9jb2wpOwotCQlpZiAoY3R4ID09IE5VTEwpIHsKLQkJCVFFVEhfREJGX01FU1NBR0UoMiwgImNvdWxkIG5vdCBjcmVhdGUgZWRkcCBjb250ZXh0XG4iKTsKLQkJCWdvdG8gdHhfZHJvcDsKLQkJfQotCX0gZWxzZSB7Ci0JCWVsZW1lbnRzID0gcWV0aF9nZXRfZWxlbWVudHNfbm8oY2FyZCwgKHZvaWQgKiloZHIsIG5ld19za2IsCisJZWxlbWVudHMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKIAkJCQkJCWVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbWVudHMpIHsKLQkJCWlmIChkYXRhX29mZnNldCA+PSAwKQotCQkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9CisJaWYgKCFlbGVtZW50cykgeworCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKKwkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOworCQlnb3RvIHR4X2Ryb3A7CiAJfQogCi0JaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykgJiYKLQkgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQotCQlxZXRoX3R4X2NzdW0obmV3X3NrYik7Ci0KIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSBlbGVtZW50cywgY3R4KTsKKwkJCQkJIGVsZW1lbnRzKTsKIAllbHNlCiAJCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCWVsZW1lbnRzLCBjdHgsIGRhdGFfb2Zmc2V0LCBoZF9sZW4pOworCQkJCQllbGVtZW50cywgZGF0YV9vZmZzZXQsIGhkX2xlbik7CiAJaWYgKCFyYykgewogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOwogCQlpZiAobmV3X3NrYiAhPSBza2IpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewotCQkJaWYgKGxhcmdlX3NlbmQgIT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7Ci0JCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwotCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKLQkJCX0KLQkJCWlmIChza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyA+IDApIHsKLQkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCsrOwotCQkJCS8qIG5yX2ZyYWdzICsgc2tiLT5kYXRhICovCi0JCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9Ci0JCQkJCXNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMTsKLQkJCX0KLQkJfQotCi0JCWlmIChjdHggIT0gTlVMTCkgewotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChjdHggIT0gTlVMTCkKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CiAKQEAgLTg3OCwzMCArODU1LDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sMl9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSB7Ci0JCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfRUREUDsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCX0KLQl9IGVsc2UgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBxZXRoX2wyX2V0aHRvb2xfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBxZXRoX2NvcmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3RhdHNfY291bnQgPSBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggM2QwNDkyMC4uMGJhMzgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0xOSwxNSArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAicWV0aF9sMy5oIgotI2luY2x1ZGUgInFldGhfY29yZV9vZmZsLmgiCiAKIHN0YXRpYyBpbnQgcWV0aF9sM19zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICopOwogc3RhdGljIGludCBxZXRoX2wzX3JlY292ZXIodm9pZCAqKTsKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJcmMgPSBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKIAlpZiAocmMpIHsKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgY291bGRuJ3Qgc2V0IGFkYXB0ZXIgcGFyYW1ldGVyczogIgotCQkJIjB4JXhcbiIsIGNhcmQtPmdkZXYtPmRldi5idXNfaWQsIHJjKTsKKwkJCSIweCV4XG4iLCBkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUykpIHsKQEAgLTE4MzgsNiArMTgzOCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlRRVRIX0RCRl9URVhUXyhUUkFDRSwgNCwgImtpZDolZCIsIHZpZCk7CisJaWYgKHFldGhfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkgeworCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAia2lkUkVDIik7CisJCXJldHVybjsKKwl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CiAJLyogdW5yZWdpc3RlciBJUCBhZGRyZXNzZXMgb2YgdmxhbiBkZXZpY2UgKi8KIAlxZXRoX2wzX2ZyZWVfdmxhbl9hZGRyZXNzZXMoY2FyZCwgdmlkKTsKQEAgLTIxMDEsNiArMjEwNSw5IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICJzZXRtdWx0aSIpOworCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCisJCXJldHVybjsKIAlxZXRoX2wzX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CiAJcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgpAQCAtMjU3NywxMiArMjU4NCw2MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcWV0aF90c29fZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfaGRyICpxaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBxZXRoX2hkcl90c28gKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHJfdHNvICopcWhkcjsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gdGNwX2hkcihza2IpOworCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KKwloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKKwkvKnNldCB2YWx1ZXMgd2hpY2ggYXJlIGZpeCBmb3IgdGhlIGZpcnN0IGFwcHJvYWNoIC4uLiovCisJaGRyLT5leHQuaGRyX3RvdF9sZW4gPSAoX191MTYpIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfZXh0X3Rzbyk7CisJaGRyLT5leHQuaW1iX2hkcl9ubyAgPSAxOworCWhkci0+ZXh0Lmhkcl90eXBlICAgID0gMTsKKwloZHItPmV4dC5oZHJfdmVyc2lvbiA9IDE7CisJaGRyLT5leHQuaGRyX2xlbiAgICAgPSAyODsKKwkvKmluc2VydCBub24tZml4IHZhbHVlcyAqLworCWhkci0+ZXh0Lm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaGRyLT5leHQuZGdfaGRyX2xlbiA9IChfX3UxNikoaXBoLT5paGwqNCArIHRjcGgtPmRvZmYqNCk7CisJaGRyLT5leHQucGF5bG9hZF9sZW4gPSAoX191MTYpKHNrYi0+bGVuIC0gaGRyLT5leHQuZGdfaGRyX2xlbiAtCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CisJdGNwaC0+Y2hlY2sgPSAwOworCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpIHsKKwkJaXA2aC0+cGF5bG9hZF9sZW4gPSAwOworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLCAmaXA2aC0+ZGFkZHIsCisJCQkJCSAgICAgICAwLCBJUFBST1RPX1RDUCwgMCk7CisJfSBlbHNlIHsKKwkJLypPU0Egd2FudCB1cyB0byBzZXQgdGhlc2UgdmFsdWVzIC4uLiovCisJCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCSAwLCBJUFBST1RPX1RDUCwgMCk7CisJCWlwaC0+dG90X2xlbiA9IDA7CisJCWlwaC0+Y2hlY2sgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcWV0aF90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCit7CisJX193c3VtIGNzdW07CisJaW50IG9mZnNldDsKKworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpKTsKKwlvZmZzZXQgPSBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKKwlCVUdfT04ob2Zmc2V0ID49IHNrYl9oZWFkbGVuKHNrYikpOworCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKTsKKworCW9mZnNldCArPSBza2ItPmNzdW1fb2Zmc2V0OworCUJVR19PTihvZmZzZXQgKyBzaXplb2YoX19zdW0xNikgPiBza2JfaGVhZGxlbihza2IpKTsKKwkqKF9fc3VtMTYgKikoc2tiLT5kYXRhICsgb2Zmc2V0KSA9IGNzdW1fZm9sZChjc3VtKTsKK30KKwogc3RhdGljIGludCBxZXRoX2wzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCByYzsKIAl1MTYgKnRhZzsKIAlzdHJ1Y3QgcWV0aF9oZHIgKmhkciA9IE5VTEw7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CisJaW50IGVsZW1zOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBOVUxMOwogCWludCBpcHYgPSBxZXRoX2dldF9pcF92ZXJzaW9uKHNrYik7CkBAIC0yNTkxLDggKzI2NDksOCBAQAogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwogCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0Jc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCBkYXRhX29mZnNldCA9IC0xOworCWludCBucl9mcmFnczsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYKIAkgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpICYmCkBAIC0yNjE1LDYgKzI2NzMsMTIgQEAKIAogCWlmIChza2JfaXNfZ3NvKHNrYikpCiAJCWxhcmdlX3NlbmQgPSBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQ7CisJZWxzZQorCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkJcWV0aF90eF9jc3VtKHNrYik7CisJCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCQljYXJkLT5wZXJmX3N0YXRzLnR4X2NzdW0rKzsKKwkJfQogCiAJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCiAJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApKSB7CkBAIC0yNjYxLDEyICsyNzI1LDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJLyogZml4IGhhcmR3YXJlIGxpbWl0YXRpb246IGFzIGxvbmcgYXMgd2UgZG8gbm90IGhhdmUgc2JhbAotCSAqIGNoYWluaW5nIHdlIGNhbiBub3Qgc2VuZCBsb25nIGZyYWcgbGlzdHMgc28gd2UgdGVtcG9yYXJ5Ci0JICogc3dpdGNoIHRvIEVERFAKKwkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzCiAJICovCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCi0JCSgoc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3MgKyAyKSA+IDE2KSkKLQkJbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCSAgICAoKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzICsgMikgPiAxNikpIHsKKwkJaWYgKHNrYl9saW5lYXJpemUobmV3X3NrYikpCisJCQlnb3RvIHR4X2Ryb3A7CisJfQogCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCiAJICAgIChjYXN0X3R5cGUgPT0gUlROX1VOU1BFQykpIHsKQEAgLTI2ODksMzcgKzI3NTQsMjIgQEAKIAkJfQogCX0KIAotCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9FRERQKSB7Ci0JCS8qIG5ld19za2IgaXMgbm90IG93bmVkIGJ5IGEgc29ja2V0IHNvIHdlIHVzZSBza2IgdG8gZ2V0Ci0JCSAqIHRoZSBwcm90b2NvbAotCQkgKi8KLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkciwKLQkJCQkJCXNrYi0+c2stPnNrX3Byb3RvY29sKTsKLQkJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJjb3VsZCBub3QgY3JlYXRlIGVkZHAgY29udGV4dFxuIik7Ci0JCQlnb3RvIHR4X2Ryb3A7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCAodm9pZCAqKWhkciwgbmV3X3NrYiwKKwllbGVtcyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsICh2b2lkICopaGRyLCBuZXdfc2tiLAogCQkJCQkJIGVsZW1lbnRzX25lZWRlZCk7Ci0JCWlmICghZWxlbXMpIHsKLQkJCWlmIChkYXRhX29mZnNldCA+PSAwKQotCQkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwotCQkJZ290byB0eF9kcm9wOwotCQl9Ci0JCWVsZW1lbnRzX25lZWRlZCArPSBlbGVtczsKKwlpZiAoIWVsZW1zKSB7CisJCWlmIChkYXRhX29mZnNldCA+PSAwKQorCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CisJCWdvdG8gdHhfZHJvcDsKIAl9Ci0KLQlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSAmJgotCSAgICAobmV3X3NrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQotCQlxZXRoX3R4X2NzdW0obmV3X3NrYik7CisJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhuZXdfc2tiKS0+bnJfZnJhZ3M7CiAKIAlpZiAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0KGNhcmQsIHF1ZXVlLCBuZXdfc2tiLCBoZHIsCi0JCQkJCSBlbGVtZW50c19uZWVkZWQsIGN0eCk7CisJCQkJCSBlbGVtZW50c19uZWVkZWQpOwogCWVsc2UKIAkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKLQkJCQkJZWxlbWVudHNfbmVlZGVkLCBjdHgsIGRhdGFfb2Zmc2V0LCAwKTsKKwkJCQkJZWxlbWVudHNfbmVlZGVkLCBkYXRhX29mZnNldCwgMCk7CiAKIAlpZiAoIXJjKSB7CiAJCWNhcmQtPnN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTI3MzEsMjIgKzI3ODEsMTMgQEAKIAkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwogCQkJfQotCQkJaWYgKHNrYl9zaGluZm8obmV3X3NrYiktPm5yX2ZyYWdzID4gMCkgeworCQkJaWYgKG5yX2ZyYWdzKSB7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKIAkJCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwotCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPQotCQkJCQlza2Jfc2hpbmZvKG5ld19za2IpLT5ucl9mcmFncyArIDE7CisJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9IG5yX2ZyYWdzICsgMTsKIAkJCX0KIAkJfQotCi0JCWlmIChjdHggIT0gTlVMTCkgewotCQkJcWV0aF9lZGRwX3B1dF9jb250ZXh0KGN0eCk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChjdHggIT0gTlVMTCkKLQkJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwotCiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CiAKQEAgLTI4NDEsNyArMjg4Miw3IEBACiAJaWYgKGRhdGEpIHsKIAkJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pIHsKIAkJCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKQotCQkJCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9FRERQOworCQkJCXJldHVybiAtRVBFUk07CiAJCQllbHNlCiAJCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX1RTTzsKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaCBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzlmOGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKLSAqICAgUy8zOTAgZGF0YSBkZWZpbml0aW9ucyBmb3IgbWFjaGluZSBjaGVjayBwcm9jZXNzaW5nCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgKGFkbHVuZ0BkZS5pYm0uY29tKQotICovCi0KLSNpZm5kZWYgX19zMzkwbWFjaF9oCi0jZGVmaW5lIF9fczM5MG1hY2hfaAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBtY2kgewotCV9fdTMyICAgc2QgICAgICAgICAgICAgIDogIDE7IC8qIDAwIHN5c3RlbSBkYW1hZ2UgKi8KLQlfX3UzMiAgIHBkICAgICAgICAgICAgICA6ICAxOyAvKiAwMSBpbnN0cnVjdGlvbi1wcm9jZXNzaW5nIGRhbWFnZSAqLwotCV9fdTMyICAgc3IgICAgICAgICAgICAgIDogIDE7IC8qIDAyIHN5c3RlbSByZWNvdmVyeSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8xIDogIDE7IC8qIDAzICovCi0JX191MzIgICBjZCAgICAgICAgICAgICAgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLwotCV9fdTMyICAgZWQgICAgICAgICAgICAgIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8yIDogIDE7IC8qIDA2ICovCi0JX191MzIgICBkZyAgICAgICAgICAgICAgOiAgMTsgLyogMDcgZGVncmFkYXRpb24gKi8KLQlfX3UzMiAgIHcgICAgICAgICAgICAgICA6ICAxOyAvKiAwOCB3YXJuaW5nIHBlbmRpbmcgKi8KLQlfX3UzMiAgIGNwICAgICAgICAgICAgICA6ICAxOyAvKiAwOSBjaGFubmVsLXJlcG9ydCBwZW5kaW5nICovCi0JX191MzIgICBzcCAgICAgICAgICAgICAgOiAgMTsgLyogMTAgc2VydmljZS1wcm9jZXNzb3IgZGFtYWdlICovCi0JX191MzIgICBjayAgICAgICAgICAgICAgOiAgMTsgLyogMTEgY2hhbm5lbC1zdWJzeXN0ZW0gZGFtYWdlICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzMgOiAgMjsgLyogMTItMTMgKi8KLQlfX3UzMiAgIGIgICAgICAgICAgICAgICA6ICAxOyAvKiAxNCBiYWNrZWQgdXAgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNCA6ICAxOyAvKiAxNSAqLwotCV9fdTMyICAgc2UgICAgICAgICAgICAgIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIHNjICAgICAgICAgICAgICA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLwotCV9fdTMyICAga2UgICAgICAgICAgICAgIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCi0JX191MzIgICBkcyAgICAgICAgICAgICAgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLwotCV9fdTMyICAgd3AgICAgICAgICAgICAgIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIG1zICAgICAgICAgICAgICA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCi0JX191MzIgICBwbSAgICAgICAgICAgICAgOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGlhICAgICAgICAgICAgICA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLwotCV9fdTMyICAgZmEgICAgICAgICAgICAgIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzUgOiAgMTsgLyogMjUgKi8KLQlfX3UzMiAgIGVjICAgICAgICAgICAgICA6ICAxOyAvKiAyNiBleHRlcm5hbCBkYW1hZ2UgY29kZSB2YWxpZGl0eSAqLwotCV9fdTMyICAgZnAgICAgICAgICAgICAgIDogIDE7IC8qIDI3IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBnciAgICAgICAgICAgICAgOiAgMTsgLyogMjggZ2VuZXJhbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgY3IgICAgICAgICAgICAgIDogIDE7IC8qIDI5IGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNiA6ICAxOyAvKiAzMCAqLwotCV9fdTMyICAgc3QgICAgICAgICAgICAgIDogIDE7IC8qIDMxIHN0b3JhZ2UgbG9naWNhbCB2YWxpZGl0eSAqLwotCV9fdTMyICAgaWUgICAgICAgICAgICAgIDogIDE7IC8qIDMyIGluZGlyZWN0IHN0b3JhZ2UgZXJyb3IgKi8KLQlfX3UzMiAgIGFyICAgICAgICAgICAgICA6ICAxOyAvKiAzMyBhY2Nlc3MgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGRhICAgICAgICAgICAgICA6ICAxOyAvKiAzNCBkZWxheWVkIGFjY2VzcyBleGNlcHRpb24gKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNyA6ICA3OyAvKiAzNS00MSAqLwotCV9fdTMyICAgcHIgICAgICAgICAgICAgIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZjICAgICAgICAgICAgICA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBhcCAgICAgICAgICAgICAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF84IDogIDE7IC8qIDQ1ICovCi0JX191MzIgICBjdCAgICAgICAgICAgICAgOiAgMTsgLyogNDYgY3B1IHRpbWVyIHZhbGlkaXR5ICovCi0JX191MzIgICBjYyAgICAgICAgICAgICAgOiAgMTsgLyogNDcgY2xvY2sgY29tcGFyYXRvciB2YWxpZGl0eSAqLwotCV9fdTMyCXRvX2JlX2RlZmluZWRfOSA6IDE2OyAvKiA0Ny02MyAqLwotfTsKLQotLyoKLSAqIENoYW5uZWwgUmVwb3J0IFdvcmQKLSAqLwotc3RydWN0IGNydyB7Ci0JX191MzIgcmVzMSAgICA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KLQlfX3UzMiBzbGN0ICAgIDogIDE7ICAgLyogc29saWNpdGVkICovCi0JX191MzIgb2ZsdyAgICA6ICAxOyAgIC8qIG92ZXJmbG93ICovCi0JX191MzIgY2huICAgICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KLQlfX3UzMiByc2MgICAgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCi0JX191MzIgYW5jICAgICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KLQlfX3UzMiByZXMyICAgIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLwotCV9fdTMyIGVyYyAgICAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCi0JX191MzIgcnNpZCAgICA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi10eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKLQotZXh0ZXJuIGludCBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7Ci1leHRlcm4gdm9pZCBzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYyk7Ci0KLSNkZWZpbmUgTlJfUlNDUyAxNgotCi0jZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCi0jZGVmaW5lIENSV19SU0NfU0NIICAgICAgMHgzICAvKiBzdWJjaGFubmVsICovCi0jZGVmaW5lIENSV19SU0NfQ1BBVEggICAgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KLSNkZWZpbmUgQ1JXX1JTQ19DT05GSUcgICAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KLSNkZWZpbmUgQ1JXX1JTQ19DU1MgICAgICAweEIgIC8qIGNoYW5uZWwgc3Vic3lzdGVtICovCi0KLSNkZWZpbmUgQ1JXX0VSQ19FVkVOVCAgICAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KLSNkZWZpbmUgQ1JXX0VSQ19BVkFJTCAgICAweDAxIC8qIGF2YWlsYWJsZSAqLwotI2RlZmluZSBDUldfRVJDX0lOSVQgICAgIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJST1IgICAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLwotI2RlZmluZSBDUldfRVJDX0lQQVJNICAgIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJNICAgICAweDA1IC8qIHRlcm1pbmFsICovCi0jZGVmaW5lIENSV19FUkNfUEVSUk4gICAgMHgwNiAvKiBwZXJtLiBlcnJvciwgZmFjLiBub3QgaW5pdCAqLwotI2RlZmluZSBDUldfRVJDX1BFUlJJICAgIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QTU9EICAgICAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncgKQotewotCWludCBjY29kZTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkic3RjcncgMCglMilcblx0IgotCQkiaXBtICUwXG5cdCIKLQkJInNybCAlMCwyOFxuXHQiCi0JCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKLQkJOiAiYSIgKHBjcncpCi0JCTogImNjIiApOwotCXJldHVybiBjY29kZTsKLX0KLQotI2RlZmluZSBFRF9FVFJfU1lOQwkxMgkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN5bmMgY2hlY2sgKi8KLSNkZWZpbmUgRURfRVRSX1NXSVRDSAkxMwkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN3aXRjaCB0byBsb2NhbCAqLwotCi0jZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCi0jZGVmaW5lIEVEX1NUUF9JU0xBTkQJNgkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIGlzbGFuZCBjaGVjayAqLwotCi1zdHJ1Y3QgcHRfcmVnczsKLQotdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwotdm9pZCBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmIC8qIF9fczM5MG1hY2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hNDAwMHQuYyBiL2RyaXZlcnMvc2NzaS9hNDAwMHQuYwppbmRleCBkNGJkYTIwLi42MWFmM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYTQwMDB0LmMKKysrIGIvZHJpdmVycy9zY3NpL2E0MDAwdC5jCkBAIC0zNSw3ICszNSw3IEBACiAKICNkZWZpbmUgQTQwMDBUX1NDU0lfQUREUiAweGRkMDA0MAogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhNDAwMHRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgYTQwMDB0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CkBAIC02MSw3ICs2MSw4IEBACiAJaG9zdGRhdGEtPmRjbnRsX2V4dHJhID0gRUFfNzEwOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZhNDAwMHRfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLCBkZXYpOworCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYTQwMDB0X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwKKwkJCSAgICAgICZkZXYtPmRldik7CiAJaWYgKCFob3N0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYTQwMDB0LXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC03OCw3ICs3OSw3IEBACiAJCWdvdG8gb3V0X3B1dF9ob3N0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTkzLDkgKzk0LDkgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIF9fZGV2ZXhpdCBpbnQgYTQwMDB0X2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIF9fZGV2ZXhpdCBpbnQgYTQwMDB0X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhID0gc2hvc3RfcHJpdihob3N0KTsKIAogCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7CkBAIC0xMDgsMjUgKzEwOSwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYTQwMDB0X3Njc2lfZHJpdmVyID0gewotCS5uYW1lCT0gImE0MDAwdC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IGE0MDAwdF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AoYTQwMDB0X2RldmljZV9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYTQwMDB0X3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJhNDAwMHQtc2NzaSIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlICAgICAgICAgID0gYTQwMDB0X3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKGE0MDAwdF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGE0MDAwdF9zY3NpX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJYTQwMDB0X3Njc2lfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYTQwMDB0LXNjc2kiLAogCQkJLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIoYTQwMDB0X3Njc2lfZGV2aWNlKSkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogCQlyZXR1cm4gUFRSX0VSUihhNDAwMHRfc2NzaV9kZXZpY2UpOwogCX0KIApAQCAtMTM2LDcgKzEzOSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgYTQwMDB0X3Njc2lfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGE0MDAwdF9zY3NpX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGE0MDAwdF9zY3NpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKaW5kZXggOTNiNjFmMS4uMDQ3MWY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCkBAIC04NDQsNyArODQ0LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKK3N0YXRpYyBpbnQgX19pbml0IE5DUjUzODBfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IGZsYWdzKQogewogCWludCBpOwogCVNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCmluZGV4IDIxZmUwN2YuLmFkN2EyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwpAQCAtNTg5LDcgKzU4OSw3IEBACiAjZW5kaWYKIAogCi1pbnQgYXRhcmlfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdCkKK2ludCBfX2luaXQgYXRhcmlfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdCkKIHsKIAlzdGF0aWMgaW50IGNhbGxlZCA9IDA7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYwppbmRleCBkODU4ZjNkLi41Nzk5Y2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpidm1lNjAwMF9zY3NpX2RldmljZTsKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQKLWJ2bWU2MDAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2J2bWU2MDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CkBAIC01OCw3ICs1OCw4IEBACiAJaG9zdGRhdGEtPmN0ZXN0N19leHRyYSA9IENURVNUN19UVDE7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwKKwkJCSAgICAgICZkZXYtPmRldik7CiAJaWYgKCFob3N0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnZtZTYwMDAtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTczLDcgKzc0LDcgQEAKIAkJZ290byBvdXRfcHV0X2hvc3Q7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtODcsOSArODgsOSBAQAogfQogCiBzdGF0aWMgX19kZXZleGl0IGludAotYnZtZTYwMDBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwpAQCAtMTAwLDI1ICsxMDEsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGJ2bWU2MDAwX3Njc2lfZHJpdmVyID0gewotCS5uYW1lCT0gImJ2bWU2MDAwLXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gYnZtZTYwMDBfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJ2bWU2MDAwX2RldmljZV9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnZtZTYwMDBfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImJ2bWU2MDAwLXNjc2kiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYnZtZTYwMDBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJ2bWU2MDAwX3Njc2lfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJYnZtZTYwMDBfc2NzaV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJidm1lNjAwMC1zY3NpIiwKIAkJCQkJCQkgICAgICAgLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIoYnZtZTYwMDBfc2NzaV9kZXZpY2UpKSB7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTEyOCw3ICsxMzEsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGJ2bWU2MDAwX3Njc2lfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJ2bWU2MDAwX3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKaW5kZXggYjI2NGI0OS4uYjVmYmZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYwpAQCAtMzQsNyArMzQsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12bWUxNnhfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1tdm1lMTZ4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK212bWUxNnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKiBob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjQsNyArNjQsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZtdm1lMTZ4X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJm12bWUxNnhfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLAorCQkJICAgICAgJmRldi0+ZGV2KTsKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtdm1lMTZ4LXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC04OCw3ICs4OSw3IEBACiAJCW91dF9iZTMyKDB4ZmZmNDIwMmMsIHYpOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMiw5ICsxMDMsOSBAQAogfQogCiBzdGF0aWMgX19kZXZleGl0IGludAotbXZtZTE2eF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK212bWUxNnhfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJLyogRGlzYWJsZSBzY3NpIGNoaXAgaW50cyAqLwpAQCAtMTIzLDI1ICsxMjQsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12bWUxNnhfc2NzaV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAibXZtZTE2eC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IG12bWUxNnhfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG12bWUxNnhfZGV2aWNlX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm1lMTZ4X3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJtdm1lMTZ4LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IG12bWUxNnhfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AobXZtZTE2eF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG12bWUxNnhfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJbXZtZTE2eF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm12bWUxNngtc2NzaSIsCiAJCQkJCQkJICAgICAgLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIobXZtZTE2eF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKG12bWUxNnhfc2NzaV9kZXZpY2UpOwogCX0KIApAQCAtMTUxLDcgKzE1NCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbXZtZTE2eF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihtdm1lMTZ4X3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtdm1lMTZ4X3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDVmNzc0MTcuLjNlZTRlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC01MzMsMTIgKzUzMyw4IEBACiAJZXZlbnQtPmV2ZW50X2NvZGUgPSBldmVudF9jb2RlOwogCWV2ZW50LT5ldmVudF9kYXRhID0gZXZlbnRfZGF0YTsKIAotCWVyciA9IG5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVyciAmJiAoZXJyICE9IC1FU1JDSCkpCS8qIGZpbHRlciBubyByZWNpcGllbnQgZXJyb3JzICovCi0JCS8qIG5sbXNnX211bHRpY2FzdCBhbHJlYWR5IGtmcmVlX3NrYidkICovCi0JCWdvdG8gc2VuZF9mYWlsOwotCisJbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCisJCQlHRlBfS0VSTkVMKTsKIAlyZXR1cm47CiAKIHNlbmRfZmFpbF9za2I6CkBAIC02MDcsMTIgKzYwMyw4IEBACiAJZXZlbnQtPmV2ZW50X2NvZGUgPSBGQ0hfRVZUX1ZFTkRPUl9VTklRVUU7CiAJbWVtY3B5KCZldmVudC0+ZXZlbnRfZGF0YSwgZGF0YV9idWYsIGRhdGFfbGVuKTsKIAotCWVyciA9IG5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVyciAmJiAoZXJyICE9IC1FU1JDSCkpCS8qIGZpbHRlciBubyByZWNpcGllbnQgZXJyb3JzICovCi0JCS8qIG5sbXNnX211bHRpY2FzdCBhbHJlYWR5IGtmcmVlX3NrYidkICovCi0JCWdvdG8gc2VuZF92ZW5kb3JfZmFpbDsKLQorCW5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAorCQkJR0ZQX0tFUk5FTCk7CiAJcmV0dXJuOwogCiBzZW5kX3ZlbmRvcl9mYWlsX3NrYjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggNzVjOTI5Ny4uMmFkZmFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTk2NiwxNSArOTY2LDcgQEAKIHN0YXRpYyBpbnQKIGlzY3NpX2Jyb2FkY2FzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKQogewotCWludCByYzsKLQotCXJjID0gbmV0bGlua19icm9hZGNhc3QobmxzLCBza2IsIDAsIDEsIGdmcCk7Ci0JaWYgKHJjIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImlzY3NpOiBjYW4gbm90IGJyb2FkY2FzdCBza2IgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCAxLCBnZnApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjA3LDcgKzExOTksNyBAQAogCSAqIHRoZSB1c2VyIGFuZCB3aGVuIHRoZSBkYWVtb24gaXMgcmVzdGFydGVkIGl0IHdpbGwgaGFuZGxlIGl0CiAJICovCiAJcmMgPSBpc2NzaV9icm9hZGNhc3Rfc2tiKHNrYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJjIDwgMCkKKwlpZiAocmMgPT0gLUVTUkNIKQogCQlpc2NzaV9jbHNfc2Vzc2lvbl9wcmludGsoS0VSTl9FUlIsIHNlc3Npb24sCiAJCQkJCSAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2Ygc2Vzc2lvbiAiCiAJCQkJCSAiZXZlbnQgJXUuIENoZWNrIGlzY3NpIGRhZW1vblxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNTE2OTI1ZC4uYjRlZjJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTExNTQsNyArMTE1NCw2IEBACiBzdGF0aWMgaW50CiBzZ19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG1vZGUpCiB7Ci0JaW50IHJldHZhbDsKIAlTZ19kZXZpY2UgKnNkcDsKIAlTZ19mZCAqc2ZwOwogCkBAIC0xMTYzLDggKzExNjIsNyBAQAogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19mYXN5bmM6ICVzLCBtb2RlPSVkXG4iLAogCQkJCSAgIHNkcC0+ZGlzay0+ZGlza19uYW1lLCBtb2RlKSk7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBtb2RlLCAmc2ZwLT5hc3luY19xcCk7Ci0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG1vZGUsICZzZnAtPmFzeW5jX3FwKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA1NTdiNTRhLi5kYmY1MzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJfSB3aGlsZSAoIShzdGF0dXMgJiBTQ3hTUl9URHhFKHBvcnQpKSk7CiAKIAlzY2lfaW4ocG9ydCwgU0N4U1IpOyAgICAgICAgICAgIC8qIER1bW15IHJlYWQgKi8KLQlzY2lfb3V0KHBvcnQsIFNDeFNSLCBTQ3hTUl9URHhFX0NMRUFSKHBvcnQpKTsKKwlzY2lfb3V0KHBvcnQsIFNDeFNSLCBTQ3hTUl9URHhFX0NMRUFSKHBvcnQpICYgflNDeFNSX1RFTkQocG9ydCkpOwogCXNjaV9vdXQocG9ydCwgU0N4VERSLCBjKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQ09OU09MRV9QT0xMIHx8IENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUgKi8KQEAgLTI2Myw2ICsyNjMsNyBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogc3RhdGljIGlubGluZSB2b2lkIHNjaV9pbml0X3BpbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQogewpAQCAtMjg0LDcgKzI4NSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogc3RhdGljIGlubGluZSBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZik7CkBAIC0xMDk1LDYgKzEwOTcsNyBAQAogCQkJCSB1bnNpZ25lZCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnNlcmlhbF9jb25zb2xlX3BvcnQtPnBvcnQ7CisJdW5zaWduZWQgc2hvcnQgYml0czsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC0xMTAzLDYgKzExMDYsMTEgQEAKIAogCQlzY2lfcG9sbF9wdXRfY2hhcihwb3J0LCAqcysrKTsKIAl9CisKKwkvKiB3YWl0IHVudGlsIGZpZm8gaXMgZW1wdHkgYW5kIGxhc3QgYml0IGhhcyBiZWVuIHRyYW5zbWl0dGVkICovCisJYml0cyA9IFNDeFNSX1REeEUocG9ydCkgfCBTQ3hTUl9URU5EKHBvcnQpOworCXdoaWxlICgoc2NpX2luKHBvcnQsIFNDeFNSKSAmIGJpdHMpICE9IGJpdHMpCisJCWNwdV9yZWxheCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzZXJpYWxfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IDAyMmU4OWYuLmQwYWE4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19IODMwMDcpIHx8IGRlZmluZWQoQ09ORklHX0g4MzA2OCkKICNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KQEAgLTEyNiw3ICsxMjYsOCBAQAogIyBkZWZpbmUgU0NTUFRSMQkweGZmZTEwMDI0CS8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ0lGX09SRVIJMHgwMDAxCQkvKiBPdmVycnVuIGVycm9yIGJpdCAqLwogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KQkweDNhCS8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSxSRUlFPTEgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogIyBkZWZpbmUgU0NTUFRSMAkweGZmZWEwMDI0CS8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ1NQVFIxCTB4ZmZlYjAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjIJMHhmZmVjMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwpAQCAtMTgyLDYgKzE4Myw3IEBACiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSAgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpICB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KSAgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiAjZGVmaW5lIFNDSV9DVFJMX0ZMQUdTX1JFSUUgMHgwOCAvKiA3NzUwIFNDSUYgKi8KICNlbHNlCkBAIC00MTMsNyArNDE1LDggQEAKIFNDSUZfRk5TKFNDRkNSLCAgICAgICAgICAgICAgICAgICAgICAweDBjLCAgOCwgMHgxOCwgMTYpCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIFNDSUZfRk5TKFNDRkRSLAkJCSAgICAgMHgwZSwgMTYsIDB4MUMsIDE2KQogU0NJRl9GTlMoU0NURkRSLAkJICAgICAweDBlLCAxNiwgMHgxQywgMTYpCiBTQ0lGX0ZOUyhTQ1JGRFIsCQkgICAgIDB4MGUsIDE2LCAweDIwLCAxNikKQEAgLTY0NCw3ICs2NDcsOCBAQAogCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVhMDAwMCkKQEAgLTc0Niw3ICs3NTAsOCBAQAogICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKChjbGsrMTYqYnBzKS8oMTYqYnBzKS0xKQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IDQ1YTI5OWYuLmUwOWQzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwpAQCAtMTQzOCwxMiArMTQzOCwxMiBAQAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBLZXlib2FyZCBhdCBNTUlPIDB4JWxseCAoaXJxID0gJWQpICIKIAkJICAgICAgICJpcyBhICVzXG4iLAotCQkgICAgICAgb3AtPmRldi5idXNfaWQsCisJCSAgICAgICBkZXZfbmFtZSgmb3AtPmRldiksCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB1cFswXS5wb3J0Lm1hcGJhc2UsCiAJCSAgICAgICBvcC0+aXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMF0ucG9ydCkpOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogTW91c2UgYXQgTU1JTyAweCVsbHggKGlycSA9ICVkKSAiCiAJCSAgICAgICAiaXMgYSAlc1xuIiwKLQkJICAgICAgIG9wLT5kZXYuYnVzX2lkLAorCQkgICAgICAgZGV2X25hbWUoJm9wLT5kZXYpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdXBbMV0ucG9ydC5tYXBiYXNlLAogCQkgICAgICAgb3AtPmlycXNbMF0sIHN1bnppbG9nX3R5cGUoJnVwWzFdLnBvcnQpKTsKIAkJa2JtX2luc3QrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvaW50Yy5jIGIvZHJpdmVycy9zaC9pbnRjLmMKaW5kZXggNThkMjRjNS4uMjI2OWZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjLmMKKysrIGIvZHJpdmVycy9zaC9pbnRjLmMKQEAgLTU2OCw2ICs1NjgsMTAgQEAKIAlpZiAoIWRhdGFbMF0gJiYgZGF0YVsxXSkKIAkJcHJpbWFyeSA9IDE7CiAKKwlpZiAoIWRhdGFbMF0gJiYgIWRhdGFbMV0pCisJCXByX3dhcm5pbmcoImludGM6IG1pc3NpbmcgdW5pcXVlIGlycSBtYXNrIGZvciAiCisJCQkgICAiaXJxICVkICh2ZWN0IDB4JTA0eClcbiIsIGlycSwgaXJxMmV2dChpcnEpKTsKKwogCWRhdGFbMF0gPSBkYXRhWzBdID8gZGF0YVswXSA6IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwogCWRhdGFbMV0gPSBkYXRhWzFdID8gZGF0YVsxXSA6IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwogCkBAIC02NDEsNiArNjQ1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICppbnRjX2V2dDJpcnFfdGFibGU7CisKK3Vuc2lnbmVkIGludCBpbnRjX2V2dDJpcnEodW5zaWduZWQgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxID0gZXZ0MmlycSh2ZWN0b3IpOworCisJaWYgKGludGNfZXZ0MmlycV90YWJsZSAmJiBpbnRjX2V2dDJpcnFfdGFibGVbaXJxXSkKKwkJaXJxID0gaW50Y19ldnQyaXJxX3RhYmxlW2lycV07CisKKwlyZXR1cm4gaXJxOworfQogCiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYykKIHsKQEAgLTcwNSw4ICs3MjAsNDAgQEAKIAogCUJVR19PTihrID4gMjU2KTsgLyogX0lOVENfQUREUl9FKCkgYW5kIF9JTlRDX0FERFJfRCgpIGFyZSA4IGJpdHMgKi8KIAorCS8qIGtlZXAgdGhlIGZpcnN0IHZlY3RvciBvbmx5IGlmIHNhbWUgZW51bSBpcyB1c2VkIG11bHRpcGxlIHRpbWVzICovCiAJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgewogCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisJCWludCBmaXJzdF9pcnEgPSBldnQyaXJxKHZlY3QtPnZlY3QpOworCisJCWlmICghdmVjdC0+ZW51bV9pZCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoayA9IGkgKyAxOyBrIDwgZGVzYy0+bnJfdmVjdG9yczsgaysrKSB7CisJCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0MiA9IGRlc2MtPnZlY3RvcnMgKyBrOworCisJCQlpZiAodmVjdC0+ZW51bV9pZCAhPSB2ZWN0Mi0+ZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJdmVjdDItPmVudW1faWQgPSAwOworCisJCQlpZiAoIWludGNfZXZ0MmlycV90YWJsZSkKKwkJCQlpbnRjX2V2dDJpcnFfdGFibGUgPSBhbGxvY19ib290bWVtKE5SX0lSUVMpOworCisJCQlpZiAoIWludGNfZXZ0MmlycV90YWJsZSkgeworCQkJCXByX3dhcm5pbmcoImludGM6IGNhbm5vdCBhbGxvY2F0ZSBldnQyaXJxIVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWludGNfZXZ0MmlycV90YWJsZVtldnQyaXJxKHZlY3QyLT52ZWN0KV0gPSBmaXJzdF9pcnE7CisJCX0KKwl9CisKKwkvKiByZWdpc3RlciB0aGUgdmVjdG9ycyBvbmUgYnkgb25lICovCisJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisKKwkJaWYgKCF2ZWN0LT5lbnVtX2lkKQorCQkJY29udGludWU7CiAKIAkJaW50Y19yZWdpc3Rlcl9pcnEoZGVzYywgZCwgdmVjdC0+ZW51bV9pZCwgZXZ0MmlycSh2ZWN0LT52ZWN0KSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jIGIvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCmluZGV4IDYzZjBkZTIuLmNhYjFhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYworKysgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKQEAgLTEsMTYgKzEsMTAgQEAKIC8qCiAgKiBDb3JlIG1hcGxlIGJ1cyBmdW5jdGlvbmFsaXR5CiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBZHJpYW4gTWNNZW5hbWluCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBBZHJpYW4gTWNNZW5hbWluCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwOCBQYXVsIE11bmR0Ci0gKgotICogQmFzZWQgb24gMi40IGNvZGUgYnk6Ci0gKgotICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFlBRUdBU0hJIFRha2VzaGkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDAxIFlBRUdBU0hJIFRha2VzaGkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgTS4gUi4gQnJvd24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGF1bCBNdW5kdAotICoKLSAqIGFuZCBvdGhlcnMuCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTMyLDcgKzI2LDcgQEAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvc3lzYXNpYy5oPgogCi1NT0RVTEVfQVVUSE9SKCJZYWVnYXNoaSBUYWtlc2hpLCBQYXVsIE11bmR0LCBNLiBSLiBCcm93biwgQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiA8YWRyaWFuQG1jbWVuLmRlbW9uLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXBsZSBidXMgZHJpdmVyIGZvciBEcmVhbWNhc3QiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1NFR0EsIERyZWFtY2FzdC9NYXBsZX19Iik7CkBAIC00OSw3ICs0Myw3IEBACiAvKiBtdXRleCB0byBwcm90ZWN0IHF1ZXVlIG9mIHdhaXRpbmcgcGFja2V0cyAqLwogc3RhdGljIERFRklORV9NVVRFWChtYXBsZV93bGlzdF9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBtYXBsZV9kcml2ZXIgbWFwbGVfZHVtbXlfZHJpdmVyOworc3RhdGljIHN0cnVjdCBtYXBsZV9kcml2ZXIgbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlOwogc3RhdGljIHN0cnVjdCBkZXZpY2UgbWFwbGVfYnVzOwogc3RhdGljIGludCBzdWJkZXZpY2VfbWFwW01BUExFX1BPUlRTXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICptYXBsZV9zZW5kYnVmLCAqbWFwbGVfc2VuZHB0ciwgKm1hcGxlX2xhc3RwdHI7CkBAIC02Miw4ICs1Niw5IEBACiAJaW50IHVuaXQ7CiB9OwogCi1zdGF0aWMgYm9vbCBjaGVja2VkWzRdOwotc3RhdGljIHN0cnVjdCBtYXBsZV9kZXZpY2UgKmJhc2V1bml0c1s0XTsKK3N0YXRpYyBib29sIGNoZWNrZWRbTUFQTEVfUE9SVFNdOworc3RhdGljIGJvb2wgZW1wdHlbTUFQTEVfUE9SVFNdOworc3RhdGljIHN0cnVjdCBtYXBsZV9kZXZpY2UgKmJhc2V1bml0c1tNQVBMRV9QT1JUU107CiAKIC8qKgogICogbWFwbGVfZHJpdmVyX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBtYXBsZSBkcml2ZXIKQEAgLTk3LDEyICs5MiwyMCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobWFwbGVfZHJpdmVyX3VucmVnaXN0ZXIpOwogCiAvKiBzZXQgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIGVuYWJsZSBuZXh0IHJvdW5kIG9mIGRtYSAqLwotc3RhdGljIHZvaWQgbWFwbGVidXNfZG1hX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBtYXBsZV9kbWFfcmVzZXQodm9pZCkKIHsKIAljdHJsX291dGwoTUFQTEVfTUFHSUMsIE1BUExFX1JFU0VUKTsKIAkvKiBzZXQgdHJpZyB0eXBlIHRvIDAgZm9yIHNvZnR3YXJlIHRyaWdnZXIsIDEgZm9yIGhhcmR3YXJlIChWQkxBTkspICovCiAJY3RybF9vdXRsKDEsIE1BUExFX1RSSUdUWVBFKTsKLQljdHJsX291dGwoTUFQTEVfMk1CUFMgfCBNQVBMRV9USU1FT1VUKDUwMDAwKSwgTUFQTEVfU1BFRUQpOworCS8qCisJKiBNYXBsZSBzeXN0ZW0gcmVnaXN0ZXIKKwkqIGJpdHMgMzEgLSAxNgl0aW1lb3V0IGluIHVuaXRzIG9mIDIwbnNlYworCSogYml0IDEyCWhhcmQgdHJpZ2dlciAtIHNldCAwIHRvIGtlZXAgcmVzcG9uZGluZyB0byBWQkxBTksKKwkqIGJpdHMgOSAtIDgJc2V0IDAwIGZvciAyIE1icHMsIDAxIGZvciAxIE1icHMKKwkqIGJpdHMgMyAtIDAJZGVsYXkgKGluIDEuM21zKSBiZXR3ZWVuIFZCTEFOSyBhbmQgc3RhcnQgb2YgRE1BCisJKiBtYXggZGVsYXkgaXMgMTEKKwkqLworCWN0cmxfb3V0bChNQVBMRV8yTUJQUyB8IE1BUExFX1RJTUVPVVQoMHhGRkZGKSwgTUFQTEVfU1BFRUQpOwogCWN0cmxfb3V0bChQSFlTQUREUihtYXBsZV9zZW5kYnVmKSwgTUFQTEVfRE1BQUREUik7CiAJY3RybF9vdXRsKDEsIE1BUExFX0VOQUJMRSk7CiB9CkBAIC0xMzQsMjEgKzEzNywxNiBAQAogewogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IG1hcGxlcSAqbXE7Ci0JaWYgKCFkZXYpCi0JCXJldHVybjsKKwogCW1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKIAltcSA9IG1kZXYtPm1xOwotCWlmIChtcSkgewotCQlpZiAobXEtPnJlY3ZidWZkY3NwKQotCQkJa21lbV9jYWNoZV9mcmVlKG1hcGxlX3F1ZXVlX2NhY2hlLCBtcS0+cmVjdmJ1ZmRjc3ApOwotCQlrZnJlZShtcSk7Ci0JCW1xID0gTlVMTDsKLQl9CisJa21lbV9jYWNoZV9mcmVlKG1hcGxlX3F1ZXVlX2NhY2hlLCBtcS0+cmVjdmJ1Zik7CisJa2ZyZWUobXEpOwogCWtmcmVlKG1kZXYpOwogfQogCiAvKioKLSAqIG1hcGxlX2FkZF9wYWNrZXQgLSBhZGQgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIHF1ZXVlCisgKiBtYXBsZV9hZGRfcGFja2V0IC0gYWRkIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIHRoZSBtYXBsZSBidXMgcXVldWUKICAqIEBtZGV2OiBtYXBsZSBkZXZpY2UKICAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gZGV2aWNlIGJlaW5nIHF1ZXJpZWQKICAqIEBjb21tYW5kOiBtYXBsZSBjb21tYW5kIHRvIGFkZApAQCAtMTU4LDIzICsxNTYsMTIgQEAKIGludCBtYXBsZV9hZGRfcGFja2V0KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHUzMiBmdW5jdGlvbiwgdTMyIGNvbW1hbmQsCiAJc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgbG9ja2luZywgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAl2b2lkICpzZW5kYnVmID0gTlVMTDsKIAotCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCS8qIGJvdW5jZSBpZiBkZXZpY2UgYWxyZWFkeSBsb2NrZWQgKi8KLQlsb2NraW5nID0gbXV0ZXhfaXNfbG9ja2VkKCZtZGV2LT5tcS0+bXV0ZXgpOwotCWlmIChsb2NraW5nKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmbWRldi0+bXEtPm11dGV4KTsKLQogCWlmIChsZW5ndGgpIHsKLQkJc2VuZGJ1ZiA9IGttYWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CisJCXNlbmRidWYgPSBremFsbG9jKGxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlbmRidWYpIHsKLQkJCW11dGV4X3VubG9jaygmbWRldi0+bXEtPm11dGV4KTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTg3LDg0ICsxNzQsMzYgQEAKIAkJbWVtY3B5KHNlbmRidWYgKyA0LCBkYXRhLCAobGVuZ3RoIC0gMSkgKiA0KTsKIAltZGV2LT5tcS0+c2VuZGJ1ZiA9IHNlbmRidWY7CiAKLQlsaXN0X2FkZCgmbWRldi0+bXEtPmxpc3QsICZtYXBsZV93YWl0cSk7Ci1vdXQ6CisJbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbWRldi0+bXEtPmxpc3QsICZtYXBsZV93YWl0cSk7CiAJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWFwbGVfYWRkX3BhY2tldCk7CiAKLS8qKgotICogbWFwbGVfYWRkX3BhY2tldF9zbGVlcHMgLSBhZGQgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIHF1ZXVlCi0gKiBAbWRldjogbWFwbGUgZGV2aWNlCi0gKiBAZnVuY3Rpb246IGZ1bmN0aW9uIG9uIGRldmljZSBiZWluZyBxdWVyaWVkCi0gKiBAY29tbWFuZDogbWFwbGUgY29tbWFuZCB0byBhZGQKLSAqIEBsZW5ndGg6IGxlbmd0aCBvZiBjb21tYW5kIHN0cmluZyAoaW4gMzIgYml0IHdvcmRzKQotICogQGRhdGE6IHJlbWFpbmRlciBvZiBjb21tYW5kIHN0cmluZwotICoKLSAqIFNhbWUgYXMgbWFwbGVfYWRkX3BhY2tldCgpLCBidXQgd2FpdHMgZm9yIHRoZSBsb2NrIHRvIGJlY29tZSBmcmVlLgotICovCi1pbnQgbWFwbGVfYWRkX3BhY2tldF9zbGVlcHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAotCXUzMiBjb21tYW5kLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQotewotCWludCBsb2NraW5nLCByZXQgPSAwOwotCXZvaWQgKnNlbmRidWYgPSBOVUxMOwotCi0JbG9ja2luZyA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbWRldi0+bXEtPm11dGV4KTsKLQlpZiAobG9ja2luZykgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobGVuZ3RoKSB7Ci0JCXNlbmRidWYgPSBrbWFsbG9jKGxlbmd0aCAqIDQsIEdGUF9LRVJORUwpOwotCQlpZiAoIXNlbmRidWYpIHsKLQkJCW11dGV4X3VubG9jaygmbWRldi0+bXEtPm11dGV4KTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkoKF9fYmUzMiAqKXNlbmRidWYpWzBdID0gY3B1X3RvX2JlMzIoZnVuY3Rpb24pOwotCX0KLQotCW1kZXYtPm1xLT5jb21tYW5kID0gY29tbWFuZDsKLQltZGV2LT5tcS0+bGVuZ3RoID0gbGVuZ3RoOwotCWlmIChsZW5ndGggPiAxKQotCQltZW1jcHkoc2VuZGJ1ZiArIDQsIGRhdGEsIChsZW5ndGggLSAxKSAqIDQpOwotCW1kZXYtPm1xLT5zZW5kYnVmID0gc2VuZGJ1ZjsKLQotCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWxpc3RfYWRkKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKLQltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyk7Ci0KIHN0YXRpYyBzdHJ1Y3QgbWFwbGVxICptYXBsZV9hbGxvY3Eoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKIAotCW1xID0ga21hbGxvYyhzaXplb2YoKm1xKSwgR0ZQX0tFUk5FTCk7CisJbXEgPSBremFsbG9jKHNpemVvZigqbXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1xKQogCQlnb3RvIGZhaWxlZF9ub21lbTsKIAorCUlOSVRfTElTVF9IRUFEKCZtcS0+bGlzdCk7CiAJbXEtPmRldiA9IG1kZXY7Ci0JbXEtPnJlY3ZidWZkY3NwID0ga21lbV9jYWNoZV96YWxsb2MobWFwbGVfcXVldWVfY2FjaGUsIEdGUF9LRVJORUwpOwotCW1xLT5yZWN2YnVmID0gKHZvaWQgKikgUDJTRUdBRERSKG1xLT5yZWN2YnVmZGNzcCk7CisJbXEtPnJlY3ZidWYgPSBrbWVtX2NhY2hlX3phbGxvYyhtYXBsZV9xdWV1ZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtcS0+cmVjdmJ1ZikKIAkJZ290byBmYWlsZWRfcDI7Ci0JLyoKLQkgKiBtb3N0IGRldmljZXMgZG8gbm90IG5lZWQgdGhlIG11dGV4IC0gYnV0Ci0JICogYW55dGhpbmcgdGhhdCBpbmplY3RzIGJsb2NrIHJlYWRzIG9yIHdyaXRlcwotCSAqIHdpbGwgcmVseSBvbiBpdAotCSAqLwotCW11dGV4X2luaXQoJm1xLT5tdXRleCk7CisJbXEtPnJlY3ZidWYtPmJ1ZiA9ICYoKG1xLT5yZWN2YnVmLT5idWZ4KVswXSk7CiAKIAlyZXR1cm4gbXE7CiAKIGZhaWxlZF9wMjoKIAlrZnJlZShtcSk7CiBmYWlsZWRfbm9tZW06CisJZGV2X2VycigmbWRldi0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGV2aWNlICglZCwgJWQpXG4iLAorCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjcyLDEyICsyMTEsMTYgQEAKIHsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OwogCisJLyogemVybyB0aGlzIG91dCB0byBhdm9pZCBrb2JqIHN1YnN5c3RlbQorCSogdGhpbmtpbmcgaXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkICovCisKIAltZGV2ID0ga3phbGxvYyhzaXplb2YoKm1kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1kZXYpCiAJCXJldHVybiBOVUxMOwogCiAJbWRldi0+cG9ydCA9IHBvcnQ7CiAJbWRldi0+dW5pdCA9IHVuaXQ7CisKIAltZGV2LT5tcSA9IG1hcGxlX2FsbG9jcShtZGV2KTsKIAogCWlmICghbWRldi0+bXEpIHsKQEAgLTI4NiwxOSArMjI5LDE0IEBACiAJfQogCW1kZXYtPmRldi5idXMgPSAmbWFwbGVfYnVzX3R5cGU7CiAJbWRldi0+ZGV2LnBhcmVudCA9ICZtYXBsZV9idXM7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWRldi0+bWFwbGVfd2FpdCk7CiAJcmV0dXJuIG1kZXY7CiB9CiAKIHN0YXRpYyB2b2lkIG1hcGxlX2ZyZWVfZGV2KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpCiB7Ci0JaWYgKCFtZGV2KQotCQlyZXR1cm47Ci0JaWYgKG1kZXYtPm1xKSB7Ci0JCWlmIChtZGV2LT5tcS0+cmVjdmJ1ZmRjc3ApCi0JCQlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsCi0JCQkJbWRldi0+bXEtPnJlY3ZidWZkY3NwKTsKLQkJa2ZyZWUobWRldi0+bXEpOwotCX0KKwlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1kZXYtPm1xLT5yZWN2YnVmKTsKKwlrZnJlZShtZGV2LT5tcSk7CiAJa2ZyZWUobWRldik7CiB9CiAKQEAgLTMyMCw3ICsyNTgsNyBAQAogCW1hcGxlX2xhc3RwdHIgPSBtYXBsZV9zZW5kcHRyOwogCiAJKm1hcGxlX3NlbmRwdHIrKyA9IChwb3J0IDw8IDE2KSB8IGxlbiB8IDB4ODAwMDAwMDA7Ci0JKm1hcGxlX3NlbmRwdHIrKyA9IFBIWVNBRERSKG1xLT5yZWN2YnVmKTsKKwkqbWFwbGVfc2VuZHB0cisrID0gUEhZU0FERFIobXEtPnJlY3ZidWYtPmJ1Zik7CiAJKm1hcGxlX3NlbmRwdHIrKyA9CiAJICAgIG1xLT5jb21tYW5kIHwgKHRvIDw8IDgpIHwgKGZyb20gPDwgMTYpIHwgKGxlbiA8PCAyNCk7CiAJd2hpbGUgKGxlbi0tID4gMCkKQEAgLTMzMywyMCArMjcxLDI4IEBACiAJaW50IGksIG1hcGxlX3BhY2tldHMgPSAwOwogCXN0cnVjdCBtYXBsZXEgKm1xLCAqbm1xOwogCisJaWYgKCFtYXBsZV9kbWFfZG9uZSgpKQorCQlyZXR1cm47CisKKwkvKiBkaXNhYmxlIERNQSAqLworCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOworCiAJaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpCi0JCXJldHVybjsKKwkJZ290byBmaW5pc2g7CisKIAltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpIHx8ICFtYXBsZV9kbWFfZG9uZSgpKSB7CisJaWYgKGxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSkgewogCQltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCQlyZXR1cm47CisJCWdvdG8gZmluaXNoOwogCX0KLQltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOworCiAJbWFwbGVfbGFzdHB0ciA9IG1hcGxlX3NlbmRidWY7CiAJbWFwbGVfc2VuZHB0ciA9IG1hcGxlX3NlbmRidWY7Ci0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXEsIG5tcSwgJm1hcGxlX3dhaXRxLCBsaXN0KSB7CiAJCW1hcGxlX2J1aWxkX2Jsb2NrKG1xKTsKLQkJbGlzdF9tb3ZlKCZtcS0+bGlzdCwgJm1hcGxlX3NlbnRxKTsKKwkJbGlzdF9kZWxfaW5pdCgmbXEtPmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZtcS0+bGlzdCwgJm1hcGxlX3NlbnRxKTsKIAkJaWYgKG1hcGxlX3BhY2tldHMrKyA+IE1BUExFX01BWFBBQ0tFVFMpCiAJCQlicmVhazsKIAl9CkBAIC0zNTYsMTAgKzMwMiwxMyBAQAogCQkJZG1hX2NhY2hlX3N5bmMoMCwgbWFwbGVfc2VuZGJ1ZiArIGkgKiBQQUdFX1NJWkUsCiAJCQkJICAgICAgIFBBR0VfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOwogCX0KKworZmluaXNoOgorCW1hcGxlX2RtYV9yZXNldCgpOwogfQogCiAvKiBjaGVjayBpZiB0aGVyZSBpcyBhIGRyaXZlciByZWdpc3RlcmVkIGxpa2VseSB0byBtYXRjaCB0aGlzIGRldmljZSAqLwotc3RhdGljIGludCBjaGVja19tYXRjaGluZ19tYXBsZV9kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgbWFwbGVfY2hlY2tfbWF0Y2hpbmdfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCiAJCQkJCXZvaWQgKmRldnB0cikKIHsKIAlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptYXBsZV9kcnY7CkBAIC0zNzQsMTAgKzMyMyw3IEBACiAKIHN0YXRpYyB2b2lkIG1hcGxlX2RldGFjaF9kcml2ZXIoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKLQlpZiAoIW1kZXYpCi0JCXJldHVybjsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWRldi0+ZGV2KTsKLQltZGV2ID0gTlVMTDsKIH0KIAogLyogcHJvY2VzcyBpbml0aWFsIE1BUExFX0NPTU1BTkRfREVWSU5GTyBmb3IgZWFjaCBkZXZpY2Ugb3IgcG9ydCAqLwpAQCAtMzg1LDkgKzMzMSw5IEBACiB7CiAJY2hhciAqcCwgKnJlY3ZidWY7CiAJdW5zaWduZWQgbG9uZyBmdW5jdGlvbjsKLQlpbnQgbWF0Y2hlZCwgcmV0dmFsOworCWludCBtYXRjaGVkLCBlcnJvcjsKIAotCXJlY3ZidWYgPSBtZGV2LT5tcS0+cmVjdmJ1ZjsKKwlyZWN2YnVmID0gbWRldi0+bXEtPnJlY3ZidWYtPmJ1ZjsKIAkvKiBjb3B5IHRoZSBkYXRhIGFzIGluZGl2aWR1YWwgZWxlbWVudHMgaW4KIAkqIGNhc2Ugb2YgbWVtb3J5IG9wdGltaXNhdGlvbiAqLwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5mdW5jdGlvbiwgcmVjdmJ1ZiArIDQsIDQpOwpAQCAtMzk1LDcgKzM0MSw2IEBACiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmFyZWFfY29kZSwgcmVjdmJ1ZiArIDIwLCAxKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8uY29ubmVjdG9yX2RpcmVjdGlvbiwgcmVjdmJ1ZiArIDIxLCAxKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8ucHJvZHVjdF9uYW1lWzBdLCByZWN2YnVmICsgMjIsIDMwKTsKLQltZW1jcHkoJm1kZXYtPmRldmluZm8ucHJvZHVjdF9saWNlbmNlWzBdLCByZWN2YnVmICsgNTIsIDYwKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8uc3RhbmRieV9wb3dlciwgcmVjdmJ1ZiArIDExMiwgMik7CiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLm1heF9wb3dlciwgcmVjdmJ1ZiArIDExNCwgMik7CiAJbWVtY3B5KG1kZXYtPnByb2R1Y3RfbmFtZSwgbWRldi0+ZGV2aW5mby5wcm9kdWN0X25hbWUsIDMwKTsKQEAgLTQxNCw0MyArMzU5LDM5IEBACiAJCWVsc2UKIAkJCWJyZWFrOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgZGV2aWNlIGRldGVjdGVkOiAlc1xuIiwKLQkJbWRldi0+cHJvZHVjdF9uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBkZXZpY2U6ICVzXG4iLCBtZGV2LT5wcm9kdWN0X2xpY2VuY2UpOwotCiAJZnVuY3Rpb24gPSBiZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKTsKIAorCWRldl9pbmZvKCZtZGV2LT5kZXYsICJkZXRlY3RlZCAlczogZnVuY3Rpb24gMHglbFg6IGF0ICglZCwgJWQpXG4iLAorCQltZGV2LT5wcm9kdWN0X25hbWUsIGZ1bmN0aW9uLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwogCWlmIChmdW5jdGlvbiA+IDB4MjAwKSB7CiAJCS8qIERvIHRoaXMgc2lsZW50bHkgLSBhcyBub3QgYSByZWFsIGRldmljZSAqLwogCQlmdW5jdGlvbiA9IDA7Ci0JCW1kZXYtPmRyaXZlciA9ICZtYXBsZV9kdW1teV9kcml2ZXI7Ci0JCXNwcmludGYobWRldi0+ZGV2LmJ1c19pZCwgIiVkOjAucG9ydCIsIG1kZXYtPnBvcnQpOworCQltZGV2LT5kcml2ZXIgPSAmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlOworCQlkZXZfc2V0X25hbWUoJm1kZXYtPmRldiwgIiVkOjAucG9ydCIsIG1kZXYtPnBvcnQpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJNYXBsZSBidXMgYXQgKCVkLCAlZCk6IEZ1bmN0aW9uIDB4JWxYXG4iLAotCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCwgZnVuY3Rpb24pOwotCiAJCW1hdGNoZWQgPQogCQkJYnVzX2Zvcl9lYWNoX2RydigmbWFwbGVfYnVzX3R5cGUsIE5VTEwsIG1kZXYsCi0JCQkJY2hlY2tfbWF0Y2hpbmdfbWFwbGVfZHJpdmVyKTsKKwkJCQltYXBsZV9jaGVja19tYXRjaGluZ19kcml2ZXIpOwogCiAJCWlmIChtYXRjaGVkID09IDApIHsKIAkJCS8qIERyaXZlciBkb2VzIG5vdCBleGlzdCB5ZXQgKi8KLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiTm8gbWFwbGUgZHJpdmVyIGZvdW5kLlxuIik7Ci0JCQltZGV2LT5kcml2ZXIgPSAmbWFwbGVfZHVtbXlfZHJpdmVyOworCQkJZGV2X2luZm8oJm1kZXYtPmRldiwgIm5vIGRyaXZlciBmb3VuZFxuIik7CisJCQltZGV2LT5kcml2ZXIgPSAmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlOwogCQl9Ci0JCXNwcmludGYobWRldi0+ZGV2LmJ1c19pZCwgIiVkOjAlZC4lbFgiLCBtZGV2LT5wb3J0LAotCQkJbWRldi0+dW5pdCwgZnVuY3Rpb24pOworCQlkZXZfc2V0X25hbWUoJm1kZXYtPmRldiwgIiVkOjAlZC4lbFgiLCBtZGV2LT5wb3J0LAorCQkJICAgICBtZGV2LT51bml0LCBmdW5jdGlvbik7CiAJfQorCiAJbWRldi0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAltZGV2LT5kZXYucmVsZWFzZSA9ICZtYXBsZV9yZWxlYXNlX2RldmljZTsKLQlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJm1kZXYtPmRldik7Ci0JaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSJNYXBsZSBidXM6IEF0dGVtcHQgdG8gcmVnaXN0ZXIgZGV2aWNlIgotCQkiICgleCwgJXgpIGZhaWxlZC5cbiIsCi0JCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCisJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIoJm1kZXYtPmRldik7CisJaWYgKGVycm9yKSB7CisJCWRldl93YXJuKCZtZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgZGV2aWNlIGF0IgorCQkJIiAoJWQsICVkKSwgd2l0aCBlcnJvciAweCVYXG4iLCBtZGV2LT51bml0LAorCQkJbWRldi0+cG9ydCwgZXJyb3IpOwogCQltYXBsZV9mcmVlX2RldihtZGV2KTsKIAkJbWRldiA9IE5VTEw7CiAJCXJldHVybjsKQEAgLTQ2Miw3ICs0MDMsNyBAQAogICogcG9ydCBhbmQgdW5pdCB0aGVuIHJldHVybiAxIC0gYWxsb3dzIGlkZW50aWZpY2F0aW9uCiAgKiBvZiB3aGljaCBkZXZpY2VzIG5lZWQgdG8gYmUgYXR0YWNoZWQgb3IgZGV0YWNoZWQKICAqLwotc3RhdGljIGludCBkZXRhY2hfbWFwbGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqcG9ydHB0cikKK3N0YXRpYyBpbnQgY2hlY2tfbWFwbGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqcG9ydHB0cikKIHsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlX3NwZWNpZnkgKmRzOwogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CkBAIC00NzcsMjEgKzQxOCwyNSBAQAogc3RhdGljIGludCBzZXR1cF9tYXBsZV9jb21tYW5kcyhzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKmlnbm9yZWQpCiB7CiAJaW50IGFkZDsKLQlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptYXBsZV9kZXYgPSB0b19tYXBsZV9kZXYoZGV2aWNlKTsKLQotCWlmICgobWFwbGVfZGV2LT5pbnRlcnZhbCA+IDApCi0JICAgICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbWFwbGVfZGV2LT53aGVuKSkgewotCQkvKiBib3VuY2UgaWYgd2UgY2Fubm90IGxvY2sgKi8KLQkJYWRkID0gbWFwbGVfYWRkX3BhY2tldChtYXBsZV9kZXYsCi0JCQliZTMyX3RvX2NwdShtYXBsZV9kZXYtPmRldmluZm8uZnVuY3Rpb24pLAorCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2aWNlKTsKKwlpZiAobWRldi0+aW50ZXJ2YWwgPiAwICYmIGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwICYmCisJCXRpbWVfYWZ0ZXIoamlmZmllcywgbWRldi0+d2hlbikpIHsKKwkJLyogYm91bmNlIGlmIHdlIGNhbm5vdCBhZGQgKi8KKwkJYWRkID0gbWFwbGVfYWRkX3BhY2tldChtZGV2LAorCQkJYmUzMl90b19jcHUobWRldi0+ZGV2aW5mby5mdW5jdGlvbiksCiAJCQlNQVBMRV9DT01NQU5EX0dFVENPTkQsIDEsIE5VTEwpOwogCQlpZiAoIWFkZCkKLQkJCW1hcGxlX2Rldi0+d2hlbiA9IGppZmZpZXMgKyBtYXBsZV9kZXYtPmludGVydmFsOworCQkJbWRldi0+d2hlbiA9IGppZmZpZXMgKyBtZGV2LT5pbnRlcnZhbDsKIAl9IGVsc2UgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9wbnBfdGltZSkpCi0JCQkvKiBUaGlzIHdpbGwgYWxzbyBib3VuY2UgKi8KLQkJCW1hcGxlX2FkZF9wYWNrZXQobWFwbGVfZGV2LCAwLAotCQkJCU1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CisJCQkvKiBFbnN1cmUgd2UgZG9uJ3QgaGF2ZSBibG9jayByZWFkcyBhbmQgZGV2aW5mbworCQkJKiBjYWxscyBpbnRlcmZlcmluZyB3aXRoIG9uZSBhbm90aGVyIC0gc28gZmxhZyB0aGUKKwkJCSogZGV2aWNlIGFzIGJ1c3kgKi8KKwkJCWlmIChhdG9taWNfcmVhZCgmbWRldi0+YnVzeSkgPT0gMCkgeworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCQkJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwKKwkJCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00OTksMjkgKzQ0NCw1MCBAQAogLyogVkJMQU5LIGJvdHRvbSBoYWxmIC0gaW1wbGVtZW50ZWQgdmlhIHdvcmtxdWV1ZSAqLwogc3RhdGljIHZvaWQgbWFwbGVfdmJsYW5rX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpIHx8ICFtYXBsZV9kbWFfZG9uZSgpKQorCWludCB4LCBsb2NraW5nOworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CisKKwlpZiAoIW1hcGxlX2RtYV9kb25lKCkpCiAJCXJldHVybjsKIAogCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOwogCisJaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpCisJCWdvdG8gZmluaXNoOworCisJLyoKKwkqIFNldCB1cCBlc3NlbnRpYWwgY29tbWFuZHMgLSB0byBmZXRjaCBkYXRhIGFuZAorCSogY2hlY2sgZGV2aWNlcyBhcmUgc3RpbGwgcHJlc2VudAorCSovCiAJYnVzX2Zvcl9lYWNoX2RldigmbWFwbGVfYnVzX3R5cGUsIE5VTEwsIE5VTEwsCi0JCQkgc2V0dXBfbWFwbGVfY29tbWFuZHMpOworCQlzZXR1cF9tYXBsZV9jb21tYW5kcyk7CiAKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9wbnBfdGltZSkpCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWFwbGVfcG5wX3RpbWUpKSB7CisJCS8qCisJCSogU2NhbiB0aGUgZW1wdHkgcG9ydHMgLSBidXMgaXMgZmxha2V5IGFuZCBtYXkgaGF2ZQorCQkqIG1pcy1yZXBvcnRlZCBlbXB0eW5lc3MKKwkJKi8KKwkJZm9yICh4ID0gMDsgeCA8IE1BUExFX1BPUlRTOyB4KyspIHsKKwkJCWlmIChjaGVja2VkW3hdICYmIGVtcHR5W3hdKSB7CisJCQkJbWRldiA9IGJhc2V1bml0c1t4XTsKKwkJCQlpZiAoIW1kZXYpCisJCQkJCWJyZWFrOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDEpOworCQkJCWxvY2tpbmcgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsIDAsCisJCQkJCU1BUExFX0NPTU1BTkRfREVWSU5GTywgMCwgTlVMTCk7CisJCQkJaWYgKCFsb2NraW5nKQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKIAkJbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzICsgTUFQTEVfUE5QX0lOVEVSVkFMOwotCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkgJiYgbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKSB7Ci0JCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JCW1hcGxlX3NlbmQoKTsKLQl9IGVsc2UgewotCQltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOwogCX0KIAotCW1hcGxlYnVzX2RtYV9yZXNldCgpOworZmluaXNoOgorCW1hcGxlX3NlbmQoKTsKIH0KIAotLyogaGFuZGxlIGRldmljZXMgYWRkZWQgdmlhIGhvdHBsdWdzIC0gcGxhY2luZyB0aGVtIG9uIHF1ZXVlIGZvciBERVZJTkZPKi8KKy8qIGhhbmRsZSBkZXZpY2VzIGFkZGVkIHZpYSBob3RwbHVncyAtIHBsYWNpbmcgdGhlbSBvbiBxdWV1ZSBmb3IgREVWSU5GTyAqLwogc3RhdGljIHZvaWQgbWFwbGVfbWFwX3N1YnVuaXRzKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIGludCBzdWJtYXNrKQogewogCWludCByZXR2YWwsIGssIGRldmNoZWNrOwpAQCAtNTMzLDcgKzQ5OSw3IEBACiAJCWRzLnVuaXQgPSBrICsgMTsKIAkJcmV0dmFsID0KIAkJICAgIGJ1c19mb3JfZWFjaF9kZXYoJm1hcGxlX2J1c190eXBlLCBOVUxMLCAmZHMsCi0JCQkJICAgICBkZXRhY2hfbWFwbGVfZGV2aWNlKTsKKwkJCQkgICAgIGNoZWNrX21hcGxlX2RldmljZSk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCXN1Ym1hc2sgPSBzdWJtYXNrID4+IDE7CiAJCQljb250aW51ZTsKQEAgLTU0Myw2ICs1MDksNyBAQAogCQkJbWRldl9hZGQgPSBtYXBsZV9hbGxvY19kZXYobWRldi0+cG9ydCwgayArIDEpOwogCQkJaWYgKCFtZGV2X2FkZCkKIAkJCQlyZXR1cm47CisJCQlhdG9taWNfc2V0KCZtZGV2X2FkZC0+YnVzeSwgMSk7CiAJCQltYXBsZV9hZGRfcGFja2V0KG1kZXZfYWRkLCAwLCBNQVBMRV9DT01NQU5EX0RFVklORk8sCiAJCQkJMCwgTlVMTCk7CiAJCQkvKiBtYXJrIHRoYXQgd2UgYXJlIGNoZWNraW5nIHN1YiBkZXZpY2VzICovCkBAIC01NjQsMjcgKzUzMSw0NSBAQAogfQogCiAvKiBoYW5kbGUgZW1wdHkgcG9ydCBvciBob3RwbHVnIHJlbW92YWwgKi8KLXN0YXRpYyB2b2lkIG1hcGxlX3Jlc3BvbnNlX25vbmUoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwKLQkJCQlzdHJ1Y3QgbWFwbGVxICptcSkKK3N0YXRpYyB2b2lkIG1hcGxlX3Jlc3BvbnNlX25vbmUoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKLQlpZiAobWRldi0+dW5pdCAhPSAwKSB7Ci0JCWxpc3RfZGVsKCZtcS0+bGlzdCk7Ci0JCW1hcGxlX2NsZWFuX3N1Ym1hcChtZGV2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1cyBkZXZpY2UgZGV0YWNoaW5nIGF0ICglZCwgJWQpXG4iLAotCQkgICAgICAgbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOworCisJaWYgKGxpa2VseShtZGV2LT51bml0ICE9IDApKSB7CisJCS8qCisJCSogQmxvY2sgZGV2aWNlcyBwbGF5IHVwCisJCSogYW5kIGdpdmUgdGhlIGltcHJlc3Npb24gdGhleSBoYXZlCisJCSogYmVlbiByZW1vdmVkIGV2ZW4gd2hlbiBzdGlsbCBpbiBwbGFjZSBvcgorCQkqIHRyaXAgdGhlIG10ZCBsYXllciB3aGVuIHRoZXkgaGF2ZQorCQkqIHJlYWxseSBnb25lIC0gdGhpcyBjb2RlIHRyYXBzIHRoYXQgZXZlbnR1YWxpdHkKKwkJKiBhbmQgZW5zdXJlcyB3ZSBhcmVuJ3Qgb3ZlcmxvYWRlZCB3aXRoIHVzZWxlc3MKKwkJKiBlcnJvciBtZXNzYWdlcworCQkqLworCQlpZiAobWRldi0+Y2FuX3VubG9hZCkgeworCQkJaWYgKCFtZGV2LT5jYW5fdW5sb2FkKG1kZXYpKSB7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMik7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJZGV2X2luZm8oJm1kZXYtPmRldiwgImRldGFjaGluZyBkZXZpY2UgYXQgKCVkLCAlZClcbiIsCisJCQltZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKIAkJbWFwbGVfZGV0YWNoX2RyaXZlcihtZGV2KTsKIAkJcmV0dXJuOwotCX0KLQlpZiAoIXN0YXJ0ZWQgfHwgIWZ1bGxzY2FuKSB7Ci0JCWlmIChjaGVja2VkW21kZXYtPnBvcnRdID09IGZhbHNlKSB7Ci0JCQljaGVja2VkW21kZXYtPnBvcnRdID0gdHJ1ZTsKLQkJCXByaW50ayhLRVJOX0lORk8gIk5vIG1hcGxlIGRldmljZXMgYXR0YWNoZWQiCi0JCQkJIiB0byBwb3J0ICVkXG4iLCBtZGV2LT5wb3J0KTsKKwl9IGVsc2UgeworCQlpZiAoIXN0YXJ0ZWQgfHwgIWZ1bGxzY2FuKSB7CisJCQlpZiAoY2hlY2tlZFttZGV2LT5wb3J0XSA9PSBmYWxzZSkgeworCQkJCWNoZWNrZWRbbWRldi0+cG9ydF0gPSB0cnVlOworCQkJCWVtcHR5W21kZXYtPnBvcnRdID0gdHJ1ZTsKKwkJCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAibm8gZGV2aWNlcyIKKwkJCQkJIiB0byBwb3J0ICVkXG4iLCBtZGV2LT5wb3J0KTsKKwkJCX0KKwkJCXJldHVybjsKIAkJfQotCQlyZXR1cm47CiAJfQotCW1hcGxlX2NsZWFuX3N1Ym1hcChtZGV2KTsKKwkvKiBTb21lIGhhcmR3YXJlIGRldmljZXMgZ2VuZXJhdGUgZmFsc2UgZGV0YWNoIG1lc3NhZ2VzIG9uIHVuaXQgMCAqLworCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogfQogCiAvKiBwcmVwcm9jZXNzIGhvdHBsdWdzIG9yIHNjYW5zICovCkBAIC01OTksOCArNTg0LDExIEBACiAJCX0gZWxzZSB7CiAJCQlpZiAobWRldi0+dW5pdCAhPSAwKQogCQkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCQlpZiAobWRldi0+dW5pdCA9PSAwKSB7CisJCQkJZW1wdHlbbWRldi0+cG9ydF0gPSBmYWxzZTsKKwkJCQltYXBsZV9hdHRhY2hfZHJpdmVyKG1kZXYpOworCQkJfQogCQl9Ci0JCXJldHVybjsKIAl9CiAJaWYgKG1kZXYtPnVuaXQgPT0gMCkgewogCQlzdWJtYXNrID0gcmVjdmJ1ZlsyXSAmIDB4MUY7CkBAIC02MTEsNiArNTk5LDE3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtYXBsZV9yZXNwb25zZV9maWxlZXJyKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHZvaWQgKnJlY3ZidWYpCit7CisJaWYgKG1kZXYtPmZpbGVlcnJfaGFuZGxlcikgeworCQltZGV2LT5maWxlZXJyX2hhbmRsZXIobWRldiwgcmVjdmJ1Zik7CisJCXJldHVybjsKKwl9IGVsc2UKKwkJZGV2X3dhcm4oJm1kZXYtPmRldiwgImRldmljZSBhdCAoJWQsICVkKSByZXBvcnRzIgorCQkJImZpbGUgZXJyb3IgMHglWFxuIiwgbWRldi0+cG9ydCwgbWRldi0+dW5pdCwKKwkJCSgoaW50ICopcmVjdmJ1ZilbMV0pOworfQorCiBzdGF0aWMgdm9pZCBtYXBsZV9wb3J0X3Jlc2Nhbih2b2lkKQogewogCWludCBpOwpAQCAtNjIxLDEyICs2MjAsNiBAQAogCQlpZiAoY2hlY2tlZFtpXSA9PSBmYWxzZSkgewogCQkJZnVsbHNjYW4gPSAwOwogCQkJbWRldiA9IGJhc2V1bml0c1tpXTsKLQkJCS8qCi0JCQkgKiAgdGVzdCBsb2NrIGluIGNhc2Ugc2NhbiBoYXMgZmFpbGVkCi0JCQkgKiAgYnV0IGRldmljZSBpcyBzdGlsbCBsb2NrZWQKLQkJCSAqLwotCQkJaWYgKG11dGV4X2lzX2xvY2tlZCgmbWRldi0+bXEtPm11dGV4KSkKLQkJCQltdXRleF91bmxvY2soJm1kZXYtPm1xLT5tdXRleCk7CiAJCQltYXBsZV9hZGRfcGFja2V0KG1kZXYsIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywKIAkJCQkwLCBOVUxMKTsKIAkJfQpAQCAtNjM3LDcgKzYzMCw3IEBACiBzdGF0aWMgdm9pZCBtYXBsZV9kbWFfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG1hcGxlcSAqbXEsICpubXE7Ci0Jc3RydWN0IG1hcGxlX2RldmljZSAqZGV2OworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CiAJY2hhciAqcmVjdmJ1ZjsKIAllbnVtIG1hcGxlX2NvZGUgY29kZTsKIApAQCAtNjQ2LDQzICs2MzksNTYgQEAKIAljdHJsX291dGwoMCwgTUFQTEVfRU5BQkxFKTsKIAlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXEsIG5tcSwgJm1hcGxlX3NlbnRxLCBsaXN0KSB7Ci0JCQlyZWN2YnVmID0gbXEtPnJlY3ZidWY7CisJCQltZGV2ID0gbXEtPmRldjsKKwkJCXJlY3ZidWYgPSBtcS0+cmVjdmJ1Zi0+YnVmOworCQkJZG1hX2NhY2hlX3N5bmMoJm1kZXYtPmRldiwgcmVjdmJ1ZiwgMHg0MDAsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKIAkJCWNvZGUgPSByZWN2YnVmWzBdOwotCQkJZGV2ID0gbXEtPmRldjsKIAkJCWtmcmVlKG1xLT5zZW5kYnVmKTsKLQkJCW11dGV4X3VubG9jaygmbXEtPm11dGV4KTsKIAkJCWxpc3RfZGVsX2luaXQoJm1xLT5saXN0KTsKLQogCQkJc3dpdGNoIChjb2RlKSB7CiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX05PTkU6Ci0JCQkJbWFwbGVfcmVzcG9uc2Vfbm9uZShkZXYsIG1xKTsKKwkJCQltYXBsZV9yZXNwb25zZV9ub25lKG1kZXYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0RFVklORk86Ci0JCQkJbWFwbGVfcmVzcG9uc2VfZGV2aW5mbyhkZXYsIHJlY3ZidWYpOworCQkJCW1hcGxlX3Jlc3BvbnNlX2RldmluZm8obWRldiwgcmVjdmJ1Zik7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfREFUQVRSRjoKLQkJCQlpZiAoZGV2LT5jYWxsYmFjaykKLQkJCQkJZGV2LT5jYWxsYmFjayhtcSk7CisJCQkJaWYgKG1kZXYtPmNhbGxiYWNrKQorCQkJCQltZGV2LT5jYWxsYmFjayhtcSk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfRklMRUVSUjoKKwkJCQltYXBsZV9yZXNwb25zZV9maWxlZXJyKG1kZXYsIHJlY3ZidWYpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOworCQkJCWJyZWFrOworCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0FHQUlOOgogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9CQURDTUQ6CiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0JBREZVTkM6Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkgICAgICAgIk1hcGxlIG5vbi1mYXRhbCBlcnJvciAweCVYXG4iLAotCQkJCSAgICAgICBjb2RlKTsKKwkJCQlkZXZfd2FybigmbWRldi0+ZGV2LCAibm9uLWZhdGFsIGVycm9yIgorCQkJCQkiIDB4JVggYXQgKCVkLCAlZClcbiIsIGNvZGUsCisJCQkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0FMTElORk86Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkgICAgICAgIk1hcGxlIC0gZXh0ZW5kZWQgZGV2aWNlIGluZm9ybWF0aW9uIgotCQkJCQkiIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCWRldl9ub3RpY2UoJm1kZXYtPmRldiwgImV4dGVuZGVkIgorCQkJCSIgZGV2aWNlIGluZm9ybWF0aW9uIHJlcXVlc3QgZm9yICglZCwgJWQpIgorCQkJCSIgYnV0IGNhbGwgaXMgbm90IHN1cHBvcnRlZFxuIiwgbWRldi0+cG9ydCwKKwkJCQltZGV2LT51bml0KTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9PSzoKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKQEAgLTY5OSwyMCArNzA1LDE5IEBACiAJCWlmICghZnVsbHNjYW4pCiAJCQltYXBsZV9wb3J0X3Jlc2NhbigpOwogCQkvKiBtYXJrIHRoYXQgd2UgaGF2ZSBiZWVuIHRocm91Z2ggdGhlIGZpcnN0IHNjYW4gKi8KLQkJaWYgKHN0YXJ0ZWQgPT0gMCkKLQkJCXN0YXJ0ZWQgPSAxOworCQlzdGFydGVkID0gMTsKIAl9Ci0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7CisJbWFwbGVfc2VuZCgpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVidXNfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJLyogTG9hZCBldmVyeXRoaW5nIGludG8gdGhlIGJvdHRvbSBoYWxmICovCiAJc2NoZWR1bGVfd29yaygmbWFwbGVfZG1hX3Byb2Nlc3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IG1hcGxlYnVzX3ZibGFua19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IG1hcGxlX3ZibGFua19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXNjaGVkdWxlX3dvcmsoJm1hcGxlX3ZibGFua19wcm9jZXNzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC03MjAsMTQgKzcyNSwxNCBAQAogCiBzdGF0aWMgaW50IG1hcGxlX3NldF9kbWFfaW50ZXJydXB0X2hhbmRsZXIodm9pZCkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfTUFQTEVfRE1BLCBtYXBsZWJ1c19kbWFfaW50ZXJydXB0LAotCQlJUlFGX1NIQVJFRCwgIm1hcGxlIGJ1cyBETUEiLCAmbWFwbGVfZHVtbXlfZHJpdmVyKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfTUFQTEVfRE1BLCBtYXBsZV9kbWFfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgIm1hcGxlIGJ1cyBETUEiLCAmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlKTsKIH0KIAogc3RhdGljIGludCBtYXBsZV9zZXRfdmJsYW5rX2ludGVycnVwdF9oYW5kbGVyKHZvaWQpCiB7Ci0JcmV0dXJuIHJlcXVlc3RfaXJxKEhXX0VWRU5UX1ZTWU5DLCBtYXBsZWJ1c192YmxhbmtfaW50ZXJydXB0LAotCQlJUlFGX1NIQVJFRCwgIm1hcGxlIGJ1cyBWQkxBTksiLCAmbWFwbGVfZHVtbXlfZHJpdmVyKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfVlNZTkMsIG1hcGxlX3ZibGFua19pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIFZCTEFOSyIsICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UpOwogfQogCiBzdGF0aWMgaW50IG1hcGxlX2dldF9kbWFfYnVmZmVyKHZvaWQpCkBAIC03NDAsNyArNzQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtYXRjaF9tYXBsZV9idXNfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKK3N0YXRpYyBpbnQgbWFwbGVfbWF0Y2hfYnVzX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2cHRyKQogewogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1hcGxlX2RydiA9IHRvX21hcGxlX2RyaXZlcihkcnZwdHIpOwpAQCAtNzY1LDIyICs3NzAsMjQgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBtYXBsZV9kcml2ZXIgbWFwbGVfZHVtbXlfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBtYXBsZV9kcml2ZXIgbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlID0gewogCS5kcnYgPSB7Ci0JCS5uYW1lID0gIm1hcGxlX2R1bW15X2RyaXZlciIsCisJCS5uYW1lID0gIm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSIsCiAJCS5idXMgPSAmbWFwbGVfYnVzX3R5cGUsCiAJfSwKIH07Ci0KKy8qKgorICogbWFwbGVfYnVzX3R5cGUgLSBjb3JlIG1hcGxlIGJ1cyBzdHJ1Y3R1cmUKKyAqLwogc3RydWN0IGJ1c190eXBlIG1hcGxlX2J1c190eXBlID0gewogCS5uYW1lID0gIm1hcGxlIiwKLQkubWF0Y2ggPSBtYXRjaF9tYXBsZV9idXNfZHJpdmVyLAorCS5tYXRjaCA9IG1hcGxlX21hdGNoX2J1c19kcml2ZXIsCiAJLnVldmVudCA9IG1hcGxlX2J1c191ZXZlbnQsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwobWFwbGVfYnVzX3R5cGUpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZSBtYXBsZV9idXMgPSB7Ci0JLmJ1c19pZCA9ICJtYXBsZSIsCisJLmluaXRfbmFtZSA9ICJtYXBsZSIsCiAJLnJlbGVhc2UgPSBtYXBsZV9idXNfcmVsZWFzZSwKIH07CiAKQEAgLTc4OCw3ICs3OTUsOCBAQAogewogCWludCByZXR2YWwsIGk7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldltNQVBMRV9QT1JUU107Ci0JY3RybF9vdXRsKDAsIE1BUExFX1NUQVRFKTsKKworCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZtYXBsZV9idXMpOwogCWlmIChyZXR2YWwpCkBAIC03OTgsMzYgKzgwNiwzMyBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gY2xlYW51cF9kZXZpY2U7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm1hcGxlX2R1bW15X2RyaXZlci5kcnYpOworCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlLmRydik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBjbGVhbnVwX2J1czsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWFwbGUgYnVzIGRtYSAqLwogCXJldHZhbCA9IG1hcGxlX2dldF9kbWFfYnVmZmVyKCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgTWFwbGUgRE1BIGJ1ZmZlcnNcbiIpOworCQlkZXZfZXJyKCZtYXBsZV9idXMsICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlcnNcbiIpOwogCQlnb3RvIGNsZWFudXBfYmFzaWM7CiAJfQogCiAJLyogc2V0IHVwIERNQSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXJldHZhbCA9IG1hcGxlX3NldF9kbWFfaW50ZXJydXB0X2hhbmRsZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJNYXBsZSBidXM6IEZhaWxlZCB0byBncmFiIG1hcGxlIERNQSBJUlFcbiIpOworCQlkZXZfZXJyKCZtYXBsZV9idXMsICJidXMgZmFpbGVkIHRvIGdyYWIgbWFwbGUgIgorCQkJIkRNQSBJUlFcbiIpOwogCQlnb3RvIGNsZWFudXBfZG1hOwogCX0KIAogCS8qIHNldCB1cCBWQkxBTksgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlyZXR2YWwgPSBtYXBsZV9zZXRfdmJsYW5rX2ludGVycnVwdF9oYW5kbGVyKCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXM6IEZhaWxlZCB0byBncmFiIFZCTEFOSyBJUlFcbiIpOworCQlkZXZfZXJyKCZtYXBsZV9idXMsICJidXMgZmFpbGVkIHRvIGdyYWIgVkJMQU5LIElSUVxuIik7CiAJCWdvdG8gY2xlYW51cF9pcnE7CiAJfQogCi0JbWFwbGVfcXVldWVfY2FjaGUgPQotCSAgICBrbWVtX2NhY2hlX2NyZWF0ZSgibWFwbGVfcXVldWVfY2FjaGUiLCAweDQwMCwgMCwKLQkJCSAgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJbWFwbGVfcXVldWVfY2FjaGUgPSBLTUVNX0NBQ0hFKG1hcGxlX2J1ZmZlciwgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKIAogCWlmICghbWFwbGVfcXVldWVfY2FjaGUpCiAJCWdvdG8gY2xlYW51cF9ib3RoaXJxczsKQEAgLTgzOCwyMyArODQzLDIzIEBACiAJLyogc2V0dXAgbWFwbGUgcG9ydHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFQTEVfUE9SVFM7IGkrKykgewogCQljaGVja2VkW2ldID0gZmFsc2U7CisJCWVtcHR5W2ldID0gZmFsc2U7CiAJCW1kZXZbaV0gPSBtYXBsZV9hbGxvY19kZXYoaSwgMCk7Ci0JCWJhc2V1bml0c1tpXSA9IG1kZXZbaV07CiAJCWlmICghbWRldltpXSkgewogCQkJd2hpbGUgKGktLSA+IDApCiAJCQkJbWFwbGVfZnJlZV9kZXYobWRldltpXSk7CiAJCQlnb3RvIGNsZWFudXBfY2FjaGU7CiAJCX0KKwkJYmFzZXVuaXRzW2ldID0gbWRldltpXTsKKwkJYXRvbWljX3NldCgmbWRldltpXS0+YnVzeSwgMSk7CiAJCW1hcGxlX2FkZF9wYWNrZXQobWRldltpXSwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKIAkJc3ViZGV2aWNlX21hcFtpXSA9IDA7CiAJfQogCi0JLyogc2V0dXAgbWFwbGVidXMgaGFyZHdhcmUgKi8KLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKLQkvKiBpbml0aWFsIGRldGVjdGlvbiAqLworCW1hcGxlX3BucF90aW1lID0gamlmZmllcyArIEhaOworCS8qIHByZXBhcmUgaW5pdGlhbCBxdWV1ZSAqLwogCW1hcGxlX3NlbmQoKTsKLQltYXBsZV9wbnBfdGltZSA9IGppZmZpZXM7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzIGNvcmUgbm93IHJlZ2lzdGVyZWQuXG4iKTsKKwlkZXZfaW5mbygmbWFwbGVfYnVzLCAiYnVzIGNvcmUgbm93IHJlZ2lzdGVyZWRcbiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTg3MSw3ICs4NzYsNyBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIG1hcGxlX3NlbmRidWYsIE1BUExFX0RNQV9QQUdFUyk7CiAKIGNsZWFudXBfYmFzaWM6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1hcGxlX2R1bW15X2RyaXZlci5kcnYpOworCWRyaXZlcl91bnJlZ2lzdGVyKCZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UuZHJ2KTsKIAogY2xlYW51cF9idXM6CiAJYnVzX3VucmVnaXN0ZXIoJm1hcGxlX2J1c190eXBlKTsKQEAgLTg4MCw3ICs4ODUsNyBAQAogCWRldmljZV91bnJlZ2lzdGVyKCZtYXBsZV9idXMpOwogCiBjbGVhbnVwOgotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1cyByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIk1hcGxlIGJ1cyByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogLyogUHVzaCBpbml0IHRvIGxhdGVyIHRvIGVuc3VyZSBoYXJkd2FyZSBnZXRzIGRldGVjdGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jIGIvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYwppbmRleCA0ZDAyODJiLi4yZDllN2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCisrKyBiL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKQEAgLTIyLDcgKzIyLDcgQEAKIHN0YXRpYyBpbnQgc3VwZXJoeXdheV9kZXZpY2VzOwogCiBzdGF0aWMgc3RydWN0IGRldmljZSBzdXBlcmh5d2F5X2J1c19kZXZpY2UgPSB7Ci0JLmJ1c19pZCA9ICJzdXBlcmh5d2F5IiwKKwkuaW5pdF9uYW1lID0gInN1cGVyaHl3YXkiLAogfTsKIAogc3RhdGljIHZvaWQgc3VwZXJoeXdheV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC04Myw3ICs4Myw3IEBACiAJZGV2LT5pZC5pZAkJPSBkZXYtPnZjci5tb2RfaWQ7CiAKIAlzcHJpbnRmKGRldi0+bmFtZSwgIlN1cGVySHl3YXkgZGV2aWNlICUwNHgiLCBkZXYtPmlkLmlkKTsKLQlzcHJpbnRmKGRldi0+ZGV2LmJ1c19pZCwgIiUwMngiLCBzdXBlcmh5d2F5X2RldmljZXMpOworCWRldl9zZXRfbmFtZSgmZGV2LT5kZXYsICIlMDJ4Iiwgc3VwZXJoeXdheV9kZXZpY2VzKTsKIAogCXN1cGVyaHl3YXlfZGV2aWNlcysrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCmluZGV4IDU2ZmYzZTYuLjEyZTQ0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlzcGkgPSBtc2ctPnNwaTsKIAogCWRldl9kYmcobWFzdGVyLT5kZXYucGFyZW50LCAic3RhcnQgbWVzc2FnZSAlcCBmb3IgJXNcbiIsCi0JCQltc2csIHNwaS0+ZGV2LmJ1c19pZCk7CisJCQltc2csIGRldl9uYW1lKCZzcGktPmRldikpOwogCiAJLyogc2VsZWN0IGNoaXAgaWYgaXQncyBub3Qgc3RpbGwgYWN0aXZlICovCiAJaWYgKGFzLT5zdGF5KSB7CkBAIC02MjcsNyArNjI3LDcgQEAKIAkJaWYgKCFhc2QpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlyZXQgPSBncGlvX3JlcXVlc3QobnBjc19waW4sIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXJldCA9IGdwaW9fcmVxdWVzdChucGNzX3BpbiwgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCWlmIChyZXQpIHsKIAkJCWtmcmVlKGFzZCk7CiAJCQlyZXR1cm4gcmV0OwpAQCAtNjY4LDcgKzY2OCw3IEBACiAJYXMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAogCWRldl9kYmcoY29udHJvbGxlciwgIm5ldyBtZXNzYWdlICVwIHN1Ym1pdHRlZCBmb3IgJXNcbiIsCi0JCQltc2csIHNwaS0+ZGV2LmJ1c19pZCk7CisJCQltc2csIGRldl9uYW1lKCZzcGktPmRldikpOwogCiAJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJm1zZy0+dHJhbnNmZXJzKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAzLDcgKzgwMyw3IEBACiAJYXMtPmNsayA9IGNsazsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtZWxfc3BpX2ludGVycnVwdCwgMCwKLQkJCXBkZXYtPmRldi5idXNfaWQsIG1hc3Rlcik7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgbWFzdGVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bm1hcF9yZWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCmluZGV4IDNiOTc4MDMuLjY4Yzc3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCkBAIC00MjksNyArNDI5LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbXBzLT5xdWV1ZSk7CiAKIAltcHMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQltYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJCWRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChtcHMtPndvcmtxdWV1ZSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBmcmVlX2lycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IDQ1NGEyNzEuLjFjNjVlMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAkJZ290byBlcnIxOwogCX0KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEsCi0JCQlwZGV2LT5kZXYuYnVzX2lkKSkgeworCQkJZGV2X25hbWUoJnBkZXYtPmRldikpKSB7CiAJCXN0YXR1cyA9IC1FQlVTWTsKIAkJZ290byBlcnIxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwppbmRleCBiYWI2ZmYwLi42MGI1MzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogI2lmZGVmCVZFUkJPU0UKIAkJCXByX2RlYnVnKCIlczogd3JpdGUtJWQgPSUwNHhcbiIsCi0JCQkJCXNwaS0+ZGV2LmJ1c19pZCwgYml0cywgdmFsKTsKKwkJCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgYml0cywgdmFsKTsKICNlbmRpZgogCQkJaWYgKHdhaXRfdXdpcmVfY3NyX2ZsYWcoQ1NSQiwgMCwgMCkpCiAJCQkJZ290byBlaW87CkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJCXN0YXR1cyArPSBieXRlczsKICNpZmRlZglWRVJCT1NFCiAJCQlwcl9kZWJ1ZygiJXM6IHJlYWQtJWQgPSUwNHhcbiIsCi0JCQkJCXNwaS0+ZGV2LmJ1c19pZCwgYml0cywgdmFsKTsKKwkJCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgYml0cywgdmFsKTsKICNlbmRpZgogCiAJCX0KQEAgLTMzMSw3ICszMzEsNyBAQAogCXV3aXJlID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAKIAlpZiAoc3BpLT5jaGlwX3NlbGVjdCA+IDMpIHsKLQkJcHJfZGVidWcoIiVzOiBjcyVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJcHJfZGVidWcoIiVzOiBjcyVkP1xuIiwgZGV2X25hbWUoJnNwaS0+ZGV2KSwgc3BpLT5jaGlwX3NlbGVjdCk7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJYml0cyA9IDg7CiAKIAlpZiAoYml0cyA+IDE2KSB7Ci0JCXByX2RlYnVnKCIlczogd29yZHNpemUgJWQ/XG4iLCBzcGktPmRldi5idXNfaWQsIGJpdHMpOworCQlwcl9kZWJ1ZygiJXM6IHdvcmRzaXplICVkP1xuIiwgZGV2X25hbWUoJnNwaS0+ZGV2KSwgYml0cyk7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0zNzgsNyArMzc4LDcgQEAKIAkJaHogPSB0LT5zcGVlZF9oejsKIAogCWlmICghaHopIHsKLQkJcHJfZGVidWcoIiVzOiB6ZXJvIHNwZWVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkKTsKKwkJcHJfZGVidWcoIiVzOiB6ZXJvIHNwZWVkP1xuIiwgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC00MDYsNyArNDA2LDcgQEAKIAl9CiAJaWYgKGRpdjFfaWR4ID09IDQpIHsKIAkJcHJfZGVidWcoIiVzOiBsb3dlc3QgY2xvY2sgJWxkLCBuZWVkICVkXG4iLAotCQkJc3BpLT5kZXYuYnVzX2lkLCByYXRlIC8gMTAgLyA4LCBoeik7CisJCQlkZXZfbmFtZSgmc3BpLT5kZXYpLCByYXRlIC8gMTAgLyA4LCBoeik7CiAJCXN0YXR1cyA9IC1FRE9NOwogCQlnb3RvIGRvbmU7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMgYi9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYwppbmRleCAwMTRiZWNiLi5jOGIwYmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxLAotCQkJCXBkZXYtPmRldi5idXNfaWQpKSB7CisJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpKSB7CiAJCXN0YXR1cyA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCmluZGV4IGQwZmM0Y2EuLmVjMjRmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKQEAgLTEzMzMsNyArMTMzMyw3IEBACiAKIAlJTklUX1dPUksoJmRydl9kYXRhLT5wdW1wX21lc3NhZ2VzLCBwdW1wX21lc3NhZ2VzKTsKIAlkcnZfZGF0YS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCQkJCWRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJCQkJZGV2X25hbWUoZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChkcnZfZGF0YS0+d29ya3F1ZXVlID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTE0NjIsNyArMTQ2Miw3IEBACiAJCWRydl9kYXRhLT5tYXNrX3NyID0gU1NTUl9USU5UIHwgU1NTUl9SRlMgfCBTU1NSX1RGUyB8IFNTU1JfUk9SOwogCX0KIAotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHNzcC0+aXJxLCBzc3BfaW50LCAwLCBkZXYtPmJ1c19pZCwgZHJ2X2RhdGEpOworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHNzcC0+aXJxLCBzc3BfaW50LCAwLCBkZXZfbmFtZShkZXYpLCBkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBJUlEgJWRcbiIsIHNzcC0+aXJxKTsKIAkJZ290byBvdXRfZXJyb3JfbWFzdGVyX2FsbG9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKaW5kZXggN2ZlYTNjZi4uMzQxMGIwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCkBAIC0xMTYwLDggKzExNjAsOCBAQAogCiAJLyogaW5pdCBtZXNzYWdlcyB3b3JrcXVldWUgKi8KIAlJTklUX1dPUksoJmRydl9kYXRhLT5wdW1wX21lc3NhZ2VzLCBwdW1wX21lc3NhZ2VzKTsKLQlkcnZfZGF0YS0+d29ya3F1ZXVlID0KLQkgICAgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwlkcnZfZGF0YS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJZGV2X25hbWUoZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChkcnZfZGF0YS0+d29ya3F1ZXVlID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMgYi9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCmluZGV4IGY1ZWQ5NzIuLmQyODY2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpIHsKLQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBzcGktPmRldi5idXNfaWQpOworCQlzdGF0dXMgPSBncGlvX3JlcXVlc3QoY3MsIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlpZiAoc3RhdHVzKQogCQkJcmV0dXJuIHN0YXR1czsKIAkJc3RhdHVzID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGNzLCBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKaW5kZXggMjY5YTU1ZS4uMDQ4MGQ4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKQEAgLTEzODEsNyArMTM4MSw3IEBACiAKIAlJTklUX1dPUksoJmRydl9kYXRhLT53b3JrLCBwdW1wX21lc3NhZ2VzKTsKIAlkcnZfZGF0YS0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCQkJCWRydl9kYXRhLT5tYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJCQkJZGV2X25hbWUoZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChkcnZfZGF0YS0+d29ya3F1ZXVlID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTE1MjUsNyArMTUyNSw4IEBACiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX25vX2lycXJlczsKIAl9Ci0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoaXJxLCBzcGlfaW50LCBJUlFGX0RJU0FCTEVELCBkZXYtPmJ1c19pZCwgZHJ2X2RhdGEpOworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3BpX2ludCwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgZGV2X25hbWUoZGV2KSwgZHJ2X2RhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JlIC0gY2Fubm90IGdldCBJUlEgKCVkKVxuIiwgc3RhdHVzKTsKIAkJZ290byBlcnJfbm9faXJxcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKaW5kZXggYWMwZTNlNC4uNDRhMmI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCkBAIC02MzcsNyArNjM3LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbXBjODN4eF9zcGktPnF1ZXVlKTsKIAogCW1wYzgzeHhfc3BpLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJbWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKIAlpZiAobXBjODN4eF9zcGktPndvcmtxdWV1ZSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBmcmVlX2lycTsKQEAgLTY0OSw3ICs2NDksNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiJXM6IE1QQzgzeHggU1BJIENvbnRyb2xsZXIgZHJpdmVyIGF0IDB4JXAgKGlycSA9ICVkKVxuIiwKLQkgICAgICAgZGV2LT5kZXYuYnVzX2lkLCBtcGM4M3h4X3NwaS0+YmFzZSwgbXBjODN4eF9zcGktPmlycSk7CisJICAgICAgIGRldl9uYW1lKCZkZXYtPmRldiksIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKIAogCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMgYi9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCmluZGV4IDIyOTZmMzcuLjI5Y2JiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwpAQCAtNDA0LDcgKzQwNCw4IEBACiAJaWYgKHJldCkKIAkJZ290byBleGl0OwogCi0JYy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCWMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAorCQkJCWRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmICghYy0+d29ya3F1ZXVlKQogCQlnb3RvIGV4aXRfYnVzeTsKIAljLT5sYXN0X2NoaXBzZWxlY3QgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL01ha2VmaWxlIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKaW5kZXggNmYyNTVlOS4uY2ZiYjc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiAKICMgYnVpbHQtaW4gZHJpdmVycwogc3NiLXkJCQkJCSs9IGRyaXZlcl9jaGlwY29tbW9uLm8KK3NzYi15CQkJCQkrPSBkcml2ZXJfY2hpcGNvbW1vbl9wbXUubwogc3NiLSQoQ09ORklHX1NTQl9EUklWRVJfTUlQUykJCSs9IGRyaXZlcl9taXBzY29yZS5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9FWFRJRikJCSs9IGRyaXZlcl9leHRpZi5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFKQkrPSBkcml2ZXJfcGNpY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jIGIvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYwppbmRleCAyZDI3ZDZkLi4yN2E2Nzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jCisrKyBiL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzA3KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxMikgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE1KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTgpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxOSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzIwKSB9LApAQCAtMjksNiArMzAsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyOCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI5KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMmIpIH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiNDNfcGNpX2JyaWRnZV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKaW5kZXggNTcxZjRmZC4uOTY4MTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCkBAIC0yNiwxOSArMjYsNiBAQAogfTsKIAogCi1zdGF0aWMgaW5saW5lIHUzMiBjaGlwY29fcmVhZDMyKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCi0JCQkJdTE2IG9mZnNldCkKLXsKLQlyZXR1cm4gc3NiX3JlYWQzMihjYy0+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+ZGVzYykpCiAJCWRpcmVjdGlvbiA9ICJpbiI7CiAJZWxzZQogCQlkaXJlY3Rpb24gPSAib3V0IjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDNjNzExZGIuLjgxZmE4NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMjc5LDkgKzI3OSw5IEBACiAgKiBoZWxwZXIgcm91dGluZSBmb3IgcmV0dXJuaW5nIHN0cmluZyBkZXNjcmlwdG9ycyBpbiBVVEYtMTZMRQogICogaW5wdXQgY2FuIGFjdHVhbGx5IGJlIElTTy04ODU5LTE7IEFTQ0lJIGlzIGl0cyA3LWJpdCBzdWJzZXQKICAqLwotc3RhdGljIGludCBhc2NpaTJ1dGYgKGNoYXIgKnMsIHU4ICp1dGYsIGludCB1dGZtYXgpCitzdGF0aWMgdW5zaWduZWQgYXNjaWkydXRmKGNoYXIgKnMsIHU4ICp1dGYsIGludCB1dGZtYXgpCiB7Ci0JaW50IHJldHZhbDsKKwl1bnNpZ25lZCByZXR2YWw7CiAKIAlmb3IgKHJldHZhbCA9IDA7ICpzICYmIHV0Zm1heCA+IDE7IHV0Zm1heCAtPSAyLCByZXR2YWwgKz0gMikgewogCQkqdXRmKysgPSAqcysrOwpAQCAtMzA0LDE5ICszMDQsMTUgQEAKICAqIFByb2R1Y2VzIGVpdGhlciBhIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBvciBzZXJpYWwgbnVtYmVyIHN0cmluZyBmb3IgdGhlCiAgKiB2aXJ0dWFsIHJvb3QgaHViIGRldmljZS4KICAqLwotc3RhdGljIGludCByaF9zdHJpbmcgKAotCWludAkJaWQsCi0Jc3RydWN0IHVzYl9oY2QJKmhjZCwKLQl1OAkJKmRhdGEsCi0JaW50CQlsZW4KLSkgeworc3RhdGljIHVuc2lnbmVkIHJoX3N0cmluZyhpbnQgaWQsIHN0cnVjdCB1c2JfaGNkICpoY2QsIHU4ICpkYXRhLCB1bnNpZ25lZCBsZW4pCit7CiAJY2hhciBidWYgWzEwMF07CiAKIAkvLyBsYW5ndWFnZSBpZHMKIAlpZiAoaWQgPT0gMCkgewogCQlidWZbMF0gPSA0OyAgICBidWZbMV0gPSAzOwkvKiA0IGJ5dGVzIHN0cmluZyBkYXRhICovCiAJCWJ1ZlsyXSA9IDB4MDk7IGJ1ZlszXSA9IDB4MDQ7CS8qIE1TRlQtc3BlYWsgZm9yICJlbi11cyIgKi8KLQkJbGVuID0gbWluIChsZW4sIDQpOworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCwgbGVuLCA0KTsKIAkJbWVtY3B5IChkYXRhLCBidWYsIGxlbik7CiAJCXJldHVybiBsZW47CiAKQEAgLTMzMiwxMCArMzI4LDcgQEAKIAl9IGVsc2UgaWYgKGlkID09IDMpIHsKIAkJc25wcmludGYgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzICVzICVzIiwgaW5pdF91dHNuYW1lKCktPnN5c25hbWUsCiAJCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwgaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uKTsKLQotCS8vIHVuc3VwcG9ydGVkIElEcyAtLT4gInByb3RvY29sIHN0YWxsIgotCX0gZWxzZQotCQlyZXR1cm4gLUVQSVBFOworCX0KIAogCXN3aXRjaCAobGVuKSB7CQkvKiBBbGwgY2FzZXMgZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKQEAgLTM2MCw5ICszNTMsOCBAQAogCXU4CQl0YnVmIFtzaXplb2YgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IpXQogCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7CiAJY29uc3QgdTgJKmJ1ZnAgPSB0YnVmOwotCWludAkJbGVuID0gMDsKKwl1bnNpZ25lZAlsZW4gPSAwOwogCWludAkJc3RhdHVzOwotCWludAkJbjsKIAl1OAkJcGF0Y2hfd2FrZXVwID0gMDsKIAl1OAkJcGF0Y2hfcHJvdG9jb2wgPSAwOwogCkBAIC00NTYsMTAgKzQ0OCwxMSBAQAogCQkJCXBhdGNoX3dha2V1cCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfRFRfU1RSSU5HIDw8IDg6Ci0JCQluID0gcmhfc3RyaW5nICh3VmFsdWUgJiAweGZmLCBoY2QsIHVidWYsIHdMZW5ndGgpOwotCQkJaWYgKG4gPCAwKQorCQkJaWYgKCh3VmFsdWUgJiAweGZmKSA8IDQpCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gcmhfc3RyaW5nKHdWYWx1ZSAmIDB4ZmYsCisJCQkJCQloY2QsIHVidWYsIHdMZW5ndGgpOworCQkJZWxzZSAvKiB1bnN1cHBvcnRlZCBJRHMgLS0+ICJwcm90b2NvbCBzdGFsbCIgKi8KIAkJCQlnb3RvIGVycm9yOwotCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZ290byBlcnJvcjsKQEAgLTYyOSw3ICs2MjIsNyBAQAogewogCWludAkJcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0JaW50CQlsZW4gPSAxICsgKHVyYi0+ZGV2LT5tYXhjaGlsZCAvIDgpOworCXVuc2lnbmVkCWxlbiA9IDEgKyAodXJiLT5kZXYtPm1heGNoaWxkIC8gOCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7CiAJaWYgKGhjZC0+c3RhdHVzX3VyYiB8fCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCBsZW4pIHsKQEAgLTkwMSw3ICs4OTQsNyBAQAogCiAJbXV0ZXhfbG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCi0JdXNiX2Rldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwl1c2JfZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KTsKIAlyZXR2YWwgPSB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9ERVZJQ0VfU0laRSk7CiAJaWYgKHJldHZhbCAhPSBzaXplb2YgdXNiX2Rldi0+ZGVzY3JpcHRvcikgewogCQltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGNkNTBkODYuLmJlODZhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVyYi0+Y29udGV4dDsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0JaW50IGk7CisJdW5zaWduZWQgaTsKIAl1bnNpZ25lZCBsb25nIGJpdHM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewpAQCAtMTMwNSw2ICsxMzA1LDcgQEAKIAkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCh1ZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NldF9kZXZpY2Vfc3RhdGUpOwogCiAvKgogICogV1VTQiBkZXZpY2VzIGFyZSBzaW1wbGU6IHRoZXkgaGF2ZSBubyBodWJzIGJlaGluZCwgc28gdGhlIG1hcHBpbmcKQEAgLTI0NzEsMjAgKzI0NzIsMjAgQEAKIAkgKi8KIAlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CiAJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CS8qIGZpeGVkIGF0IDUxMiAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig1MTIpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgkJLyogZml4ZWQgYXQgNjQgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CQkvKiA4LCAxNiwgMzIsIG9yIDY0ICovCiAJCS8qIHRvIGRldGVybWluZSB0aGUgZXAwIG1heHBhY2tldCBzaXplLCB0cnkgdG8gcmVhZAogCQkgKiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgdG8gZ2V0IGJNYXhQYWNrZXRTaXplMCBhbmQKIAkJICogdGhlbiBjb3JyZWN0IG91ciBpbml0aWFsIGd1ZXNzLgogCQkgKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNig2NCk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0xPVzoJCS8qIGZpeGVkIGF0IDggKi8KLQkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDgpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlnb3RvIGZhaWw7CkBAIC0zMzkyLDEwICszMzkzLDEwIEBACiAJCXVkZXYtPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwkvKiBmb3IgZGlzY29ubmVjdCgpIGNhbGxzICovCiAJCWdvdG8gcmVfZW51bWVyYXRlOwogICAJfQotICAKKworCS8qIFJlc3RvcmUgdGhlIGRldmljZSdzIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoIXVkZXYtPmFjdGNvbmZpZykKIAkJZ290byBkb25lOwotCiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsCiAJCQl1ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMCwKQEAgLTM0MDgsMTYgKzM0MDksMjUgQEAKICAgCX0KIAl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfQ09ORklHVVJFRCk7CiAKKwkvKiBQdXQgaW50ZXJmYWNlcyBiYWNrIGludG8gdGhlIHNhbWUgYWx0c2V0dGluZ3MgYXMgYmVmb3JlLgorCSAqIERvbid0IGJvdGhlciB0byBzZW5kIHRoZSBTZXQtSW50ZXJmYWNlIHJlcXVlc3QgZm9yIGludGVyZmFjZXMKKwkgKiB0aGF0IHdlcmUgYWxyZWFkeSBpbiBhbHRzZXR0aW5nIDA7IGJlc2lkZXMgYmVpbmcgdW5uZWNlc3NhcnksCisJICogbWFueSBkZXZpY2VzIGNhbid0IGhhbmRsZSBpdC4gIEluc3RlYWQganVzdCByZXNldCB0aGUgaG9zdC1zaWRlCisJICogZW5kcG9pbnQgc3RhdGUuCisJICovCiAJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmRlc2M7CiAKLQkJLyogc2V0X2ludGVyZmFjZSByZXNldHMgaG9zdCBzaWRlIHRvZ2dsZSBldmVuCi0JCSAqIGZvciBhbHRzZXR0aW5nIHplcm8uICB0aGUgaW50ZXJmYWNlIG1heSBoYXZlIG5vIGRyaXZlci4KLQkJICovCiAJCWRlc2MgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0JCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCi0JCQlkZXNjLT5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWlmIChkZXNjLT5iQWx0ZXJuYXRlU2V0dGluZyA9PSAwKSB7CisJCQl1c2JfZGlzYWJsZV9pbnRlcmZhY2UodWRldiwgaW50ZiwgdHJ1ZSk7CisJCQl1c2JfZW5hYmxlX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCB0cnVlKTsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCQlkZXNjLT5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCX0KIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoJnVkZXYtPmRldiwgImZhaWxlZCB0byByZXN0b3JlIGludGVyZmFjZSAlZCAiCiAJCQkJImFsdHNldHRpbmcgJWQgKGVycm9yPSVkKVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggNDllN2Y1Ni4uMzBhMDY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAkJcmV0dmFsID0gKGN0eC5zdGF0dXMgPT0gLUVOT0VOVCA/IC1FVElNRURPVVQgOiBjdHguc3RhdHVzKTsKIAogCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAotCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSVkLyVkXG4iLAorCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSV1LyV1XG4iLAogCQkJY3VycmVudC0+Y29tbSwKIAkJCXVzYl9lbmRwb2ludF9udW0oJnVyYi0+ZXAtPmRlc2MpLAogCQkJdXNiX3VyYl9kaXJfaW4odXJiKSA/ICJpbiIgOiAib3V0IiwKQEAgLTgwNCwxOCArODA0LDE2IEBACiAJCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCQkic3RyaW5nIGRlc2NyaXB0b3IgMCByZWFkIGVycm9yOiAlZFxuIiwKIAkJCQllcnIpOwotCQkJZ290byBlcnJvdXQ7CiAJCX0gZWxzZSBpZiAoZXJyIDwgNCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJzdHJpbmcgZGVzY3JpcHRvciAwIHRvbyBzaG9ydFxuIik7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvdXQ7CiAJCX0gZWxzZSB7Ci0JCQlkZXYtPmhhdmVfbGFuZ2lkID0gMTsKIAkJCWRldi0+c3RyaW5nX2xhbmdpZCA9IHRidWZbMl0gfCAodGJ1ZlszXSA8PCA4KTsKIAkJCS8qIGFsd2F5cyB1c2UgdGhlIGZpcnN0IGxhbmdpZCBsaXN0ZWQgKi8KIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAiZGVmYXVsdCBsYW5ndWFnZSAweCUwNHhcbiIsCiAJCQkJZGV2LT5zdHJpbmdfbGFuZ2lkKTsKIAkJfQorCisJCWRldi0+aGF2ZV9sYW5naWQgPSAxOwogCX0KIAogCWVyciA9IHVzYl9zdHJpbmdfc3ViKGRldiwgZGV2LT5zdHJpbmdfbGFuZ2lkLCBpbmRleCwgdGJ1Zik7CkBAIC0xNzE5LDcgKzE3MTcsOCBAQAogCX0KIAlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CiAKLQlpZiAoY3AtPnN0cmluZyA9PSBOVUxMKQorCWlmIChjcC0+c3RyaW5nID09IE5VTEwgJiYKKwkJCSEoZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUykpCiAJCWNwLT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKGRldiwgY3AtPmRlc2MuaUNvbmZpZ3VyYXRpb24pOwogCiAJLyogTm93IHRoYXQgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBzZXQgdXAsIHJlZ2lzdGVyIHRoZW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IGMwNzBiMzQuLmFiOTM5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNTQsNiArNTQsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNjM4LCAweDBhMTMpLCAuZHJpdmVyX2luZm8gPQogCSAgVVNCX1FVSVJLX1NUUklOR19GRVRDSF8yNTUgfSwKIAorCS8qIFNhaXRlayBDeWJvcmcgR29sZCBKb3lzdGljayAqLworCXsgVVNCX0RFVklDRSgweDA2YTMsIDB4MDAwNiksIC5kcml2ZXJfaW5mbyA9CisJCQlVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUyB9LAorCiAJLyogTS1TeXN0ZW1zIEZsYXNoIERpc2sgUGlvbmVlcnMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOGVjLCAweDEwMDApLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCA0Y2MyNDU2Li5jNjY3ODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgogI2luY2x1ZGUgInVzYi5oIgogCiAvKiBBY3RpdmUgY29uZmlndXJhdGlvbiBmaWVsZHMgKi8KQEAgLTgxMyw3ICs4MTQsOCBAQAogCWlmIChpbnRmLT5zeXNmc19maWxlc19jcmVhdGVkIHx8IGludGYtPnVucmVnaXN0ZXJpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKGFsdC0+c3RyaW5nID09IE5VTEwpCisJaWYgKGFsdC0+c3RyaW5nID09IE5VTEwgJiYKKwkJCSEodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MpKQogCQlhbHQtPnN0cmluZyA9IHVzYl9jYWNoZV9zdHJpbmcodWRldiwgYWx0LT5kZXNjLmlJbnRlcmZhY2UpOwogCWlmIChhbHQtPnN0cmluZykKIAkJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKaW5kZXggNThiYzVlMy4uMzM3NjA1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91cmIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlpZiAoIXVyYiB8fCB1cmItPmhjcHJpdiB8fCAhdXJiLT5jb21wbGV0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2ID0gdXJiLT5kZXY7Ci0JaWYgKCghZGV2KSB8fCAoZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9ERUZBVUxUKSkKKwlpZiAoKCFkZXYpIHx8IChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogRm9yIG5vdywgZ2V0IHRoZSBlbmRwb2ludCBmcm9tIHRoZSBwaXBlLiAgRXZlbnR1YWxseSBkcml2ZXJzCkBAIC0zNzAsNyArMzcwLDcgQEAKIAl9CiAKIAkvKiB0aGUgSS9PIGJ1ZmZlciBtdXN0IGJlIG1hcHBlZC91bm1hcHBlZCwgZXhjZXB0IHdoZW4gbGVuZ3RoPTAgKi8KLQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgMCkKKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gSU5UX01BWCkKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IGU1NWZlZjUuLjc3MGIzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0yNTQsNiArMjU0LDcgQEAKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAogCWJvb2xlYW4gIlBYQSAyN3giCiAJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKKwlzZWxlY3QgVVNCX09UR19VVElMUwogCWhlbHAKIAkgICBJbnRlbCdzIFBYQSAyN3ggc2VyaWVzIFhTY2FsZSBBUk0gdjVURSBwcm9jZXNzb3JzIGluY2x1ZGUKIAkgICBhbiBpbnRlZ3JhdGVkIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCmluZGV4IGFiZjgxOTIuLjgyNmYzYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwpAQCAtNTUxLDcgKzU1MSw3IEBACiAJCWRtYV9kZXNjLT5zdGF0dXMgPSBBTURfQUREQklUUyhkbWFfZGVzYy0+c3RhdHVzLAogCQkJCQkJVURDX0RNQV9TVFBfU1RTX0JTX0hPU1RfQlVTWSwKIAkJCQkJCVVEQ19ETUFfU1RQX1NUU19CUyk7Ci0JCWRtYV9kZXNjLT5idWZwdHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKERNQV9ET05UX1VTRSk7CisJCWRtYV9kZXNjLT5idWZwdHIgPSBjcHVfdG9fbGUzMihETUFfRE9OVF9VU0UpOwogCQlyZXEtPnRkX2RhdGEgPSBkbWFfZGVzYzsKIAkJcmVxLT50ZF9kYXRhX2xhc3QgPSBOVUxMOwogCQlyZXEtPmNoYWluX2xlbiA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCmluZGV4IDY1YjAzZTMuLmMyMmZhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPSAwLAogCS5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAotCS53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCS53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KSwKIAkvKiBGSVhNRTogSSBoYXZlIG5vIGlkZWEgd2hhdCB0byBwdXQgaGVyZSAqLwogCS5iSW50ZXJ2YWwgPSAxLAogfTsKQEAgLTEyMDcsMjEgKzEyMDcsMjEgQEAKIC8qIEF2b2lkIG92ZXJseSBsb25nIGV4cHJlc3Npb25zICovCiBzdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZV9pc19kZXZfcmVtb3RlX3dha2V1cChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcnEpCiB7Ci0JaWYgKGNycS0+d1ZhbHVlID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZV9pc19kZXZfdGVzdF9tb2RlKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVWSUNFX1RFU1RfTU9ERSkpCisJaWYgKGNycS0+d1ZhbHVlID09IGNwdV90b19sZTE2KFVTQl9ERVZJQ0VfVEVTVF9NT0RFKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZV9pc19lcF9oYWx0KHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRU5EUE9JTlRfSEFMVCkpCisJaWYgKGNycS0+d1ZhbHVlID09IGNwdV90b19sZTE2KFVTQl9FTkRQT0lOVF9IQUxUKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAkJCXN0YXR1cyA9IGNwdV90b19sZTE2KHVkYy0+ZGV2c3RhdHVzKTsKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZQogCQkJCT09IChVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpIHsKLQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7CisJCQlzdGF0dXMgPSBjcHVfdG9fbGUxNigwKTsKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZQogCQkJCT09IChVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKQEAgLTEyNTAsMTIgKzEyNTAsMTIgQEAKIAogCQkJc3RhdHVzID0gMDsKIAkJCWlmIChpc19zdGFsbGVkKHVkYywgdGFyZ2V0KSkKLQkJCQlzdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUxNigxKTsKKwkJCQlzdGF0dXMgfD0gY3B1X3RvX2xlMTYoMSk7CiAJCX0gZWxzZQogCQkJZ290byBkZWxlZ2F0ZTsKIAogCQkvKiBXcml0ZSBkaXJlY3RseSB0byB0aGUgRklGTy4gTm8gcXVldWVpbmcgaXMgZG9uZS4gKi8KLQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHNpemVvZihzdGF0dXMpKSkKKwkJaWYgKGNycS0+d0xlbmd0aCAhPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RhdHVzKSkpCiAJCQlnb3RvIHN0YWxsOwogCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX0lOOwogCQlfX3Jhd193cml0ZXcoc3RhdHVzLCBlcC0+Zmlmbyk7CkBAIC0xMjc0LDcgKzEyNzQsNyBAQAogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKIAotCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApCisJCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApCiAJCQkJCXx8ICFmZWF0dXJlX2lzX2VwX2hhbHQoY3JxKSkKIAkJCQlnb3RvIHN0YWxsOwogCQkJdGFyZ2V0ID0gZ2V0X2VwX2J5X2FkZHIodWRjLCBsZTE2X3RvX2NwdShjcnEtPndJbmRleCkpOwpAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAkJfSBlbHNlIGlmIChjcnEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfRU5EUE9JTlQpIHsKIAkJCXN0cnVjdCB1c2JhX2VwICp0YXJnZXQ7CiAKLQkJCWlmIChjcnEtPndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKQorCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKQogCQkJCQl8fCAhZmVhdHVyZV9pc19lcF9oYWx0KGNycSkpCiAJCQkJZ290byBzdGFsbDsKIApAQCAtMTUxNCw3ICsxNTE0LDcgQEAKIAkJCSAqLwogCQkJZXAtPnN0YXRlID0gREFUQV9TVEFHRV9JTjsKIAkJfSBlbHNlIHsKLQkJCWlmIChjcnEuY3JxLndMZW5ndGggIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSkKKwkJCWlmIChjcnEuY3JxLndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkpCiAJCQkJZXAtPnN0YXRlID0gREFUQV9TVEFHRV9PVVQ7CiAJCQllbHNlCiAJCQkJZXAtPnN0YXRlID0gU1RBVFVTX1NUQUdFX0lOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKaW5kZXggNTQ5NWIxNy4uOTI4MTM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCkBAIC02Niw3ICs2Niw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKQEAgLTc0LDggKzc0LDggQEAKIAkvKiAuYk1heFBhY2tldFNpemUwID0gZihoYXJkd2FyZSkgKi8KIAogCS8qIFZlbmRvciBhbmQgcHJvZHVjdCBpZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycy4gICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0RDX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDRENfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihDRENfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihDRENfUFJPRFVDVF9OVU0pLAogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwogCS8qIC5pUHJvZHVjdCA9IERZTkFNSUMgKi8KQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJCWdhZGdldC0+bmFtZSwKIAkJCQljZGNfY29uZmlnX2RyaXZlci5sYWJlbCk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CisJCQljcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IGJlYmY5MTEuLjIyYzY1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI2MjYsNyArMjYyNSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOwogCXVkYy0+Z2FkZ2V0LmVwMCA9IE5VTEw7CiAKLQlzdHJjcHkodWRjLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCWRldl9zZXRfbmFtZSgmdWRjLT5nYWRnZXQuZGV2LCAiZ2FkZ2V0Iik7CiAJdWRjLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gZGV2LT5kbWFfbWFzazsKIAl1ZGMtPmdhZGdldC5kZXYucGFyZW50ICAgPSBkZXY7CiAJdWRjLT5nYWRnZXQuZGV2LnJlbGVhc2UgID0gdWRjX3JlbGVhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggNWQxMWMyOS4uNTllODUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtMTQ5LDE2ICsxNDksMTcgQEAKIGludCB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKIHsKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBmdW5jdGlvbi0+Y29uZmlnLT5jZGV2OworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKIAlpbnQJCQkJc3RhdHVzID0gMDsKIAotCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChjZGV2LT5kZWFjdGl2YXRpb25zID09IDApCiAJCXN0YXR1cyA9IHVzYl9nYWRnZXRfZGlzY29ubmVjdChjZGV2LT5nYWRnZXQpOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJY2Rldi0+ZGVhY3RpdmF0aW9ucysrOwogCi0Jc3Bpbl91bmxvY2soJmNkZXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMDEzLDcgKzEwMTQsNyBAQAogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwogCXN0cnVjdCB1c2JfZnVuY3Rpb24JCSpmOwogCi0JLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBsZXZlbAogCSAqIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcz8KIAkgKi8KIAlEQkcoY2RldiwgInN1c3BlbmRcbiIpOwpAQCAtMTAyMyw2ICsxMDI0LDggQEAKIAkJCQlmLT5zdXNwZW5kKGYpOwogCQl9CiAJfQorCWlmIChjb21wb3NpdGUtPnN1c3BlbmQpCisJCWNvbXBvc2l0ZS0+c3VzcGVuZChjZGV2KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwMzEsMTAgKzEwMzQsMTIgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKIAlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCQkqZjsKIAotCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgYW5kIGRldmljZSBsZXZlbAorCS8qIFJFVklTSVQ6ICBzaG91bGQgd2UgaGF2ZSBjb25maWcgbGV2ZWwKIAkgKiBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3M/CiAJICovCiAJREJHKGNkZXYsICJyZXN1bWVcbiIpOworCWlmIChjb21wb3NpdGUtPnJlc3VtZSkKKwkJY29tcG9zaXRlLT5yZXN1bWUoY2Rldik7CiAJaWYgKGNkZXYtPmNvbmZpZykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsICZjZGV2LT5jb25maWctPmZ1bmN0aW9ucywgbGlzdCkgewogCQkJaWYgKGYtPnJlc3VtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA5MDY0Njk2Li5hNTZiMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC0xNDM3LDcgKzE0MzcsNyBAQAogCQkJCQl9CiAJCQkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAxKQogCQkJCQkJYnVmIFsxXSA9IDA7Ci0JCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1pbiAoMiwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWluX3QodTMyLCAyLAogCQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAkJCQkJdmFsdWUgPSAwOwogCQkJCQlzdGF0dXMgPSAwOwpAQCAtMTYyNiw3ICsxNjI2LDcgQEAKIAkJaHViX2Rlc2NyaXB0b3IgKChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CiAJCWJyZWFrOwogCWNhc2UgR2V0SHViU3RhdHVzOgotCQkqKF9fbGUzMiAqKSBidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKihfX2xlMzIgKikgYnVmID0gY3B1X3RvX2xlMzIgKDApOwogCQlicmVhazsKIAljYXNlIEdldFBvcnRTdGF0dXM6CiAJCWlmICh3SW5kZXggIT0gMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCmluZGV4IGEzNmIxMTcuLmNkMDkxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQkvKiBCT1RIOiAgImhpZ2ggYmFuZHdpZHRoIiB3b3JrcyBvbmx5IGF0IGhpZ2ggc3BlZWQgKi8KLQkJaWYgKChkZXNjLT53TWF4UGFja2V0U2l6ZSAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMzw8MTEpKSkgeworCQlpZiAoKGRlc2MtPndNYXhQYWNrZXRTaXplICYgY3B1X3RvX2xlMTYoMzw8MTEpKSkgewogCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKIAkJCQlyZXR1cm4gMDsKIAkJCS8qIGNvbmZpZ3VyZSB5b3VyIGhhcmR3YXJlIHdpdGggZW5vdWdoIGJ1ZmZlcmluZyEhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDM3MjUyZDAuLmQwMDZkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNiAoMHgwMjAwKSwKIAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCkBAIC0xNjcsOCArMTY3LDggQEAKIAkgKiB3ZSBzdXBwb3J0LiAgKEFzIGRvZXMgYk51bUNvbmZpZ3VyYXRpb25zLikgIFRoZXNlIHZhbHVlcyBjYW4KIAkgKiBhbHNvIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMuCiAJICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2IChDRENfVkVORE9SX05VTSksCisJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNiAoQ0RDX1BST0RVQ1RfTlVNKSwKIAkvKiAuYmNkRGV2aWNlID0gZihoYXJkd2FyZSkgKi8KIAkvKiAuaU1hbnVmYWN0dXJlciA9IERZTkFNSUMgKi8KIAkvKiAuaVByb2R1Y3QgPSBEWU5BTUlDICovCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJCQlnYWRnZXQtPm5hbWUsCiAJCQkJZXRoX2NvbmZpZ19kcml2ZXIubGFiZWwpOwogCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOworCQkJY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYwppbmRleCBjMWQzNGRmLi43OTUzOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mKGFjbV9oZWFkZXJfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yCkBAIC0xNTksNyArMTU5LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KEdTX05PVElGWV9NQVhQQUNLRVQpLAogCS5iSW50ZXJ2YWwgPQkJMSA8PCBHU19MT0cyX05PVElGWV9JTlRFUlZBTCwKIH07CiAKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCiAJLmJJbnRlcnZhbCA9CQlHU19MT0cyX05PVElGWV9JTlRFUlZBTCs0LAogfTsKIApAQCAtMjA1LDE0ICsyMDUsMTQgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgYWNtX2hzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqYWNtX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKaW5kZXggNGFlNTc5OS4uZWNmNWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgZWNtX3VuaW9uX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTE0OCw5ICsxNDgsOSBAQAogCiAJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLwogCS8qIC5pTUFDQWRkcmVzcyA9IERZTkFNSUMgKi8KLQkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCi0JLndNYXhTZWdtZW50U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCi0JLndOdW1iZXJNQ0ZpbHRlcnMgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLAorCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CWNwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCisJLndNYXhTZWdtZW50U2l6ZSA9CWNwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAorCS53TnVtYmVyTUNGaWx0ZXJzID0JY3B1X3RvX2xlMTYoMCksCiAJLmJOdW1iZXJQb3dlckZpbHRlcnMgPQkwLAogfTsKIApAQCAtMTkyLDcgKzE5Miw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAogfTsKIApAQCAtMjM2LDcgKzIzNiw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoRUNNX1NUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQyArIDQsCiB9Owogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21fb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZWNtX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCmluZGV4IDhhZmZlMWQuLmViNmRkZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfbG9vcF9zaW5rX2Rlc2MgPSB7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2xvb3BiYWNrX2Rlc2NzW10gPSB7CkBAIC0zNTksNyArMzU5LDcgQEAKICAqIGxvb3BiYWNrX2FkZCAtIGFkZCBhIGxvb3BiYWNrIHRlc3RpbmcgY29uZmlndXJhdGlvbiB0byBhIGRldmljZQogICogQGNkZXY6IHRoZSBkZXZpY2UgdG8gc3VwcG9ydCB0aGUgbG9vcGJhY2sgY29uZmlndXJhdGlvbgogICovCi1pbnQgX19pbml0IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitpbnQgX19pbml0IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSkKIHsKIAlpbnQgaWQ7CiAKQEAgLTM3Miw2ICszNzIsMTAgQEAKIAlsb29wYmFja19pbnRmLmlJbnRlcmZhY2UgPSBpZDsKIAlsb29wYmFja19kcml2ZXIuaUNvbmZpZ3VyYXRpb24gPSBpZDsKIAorCS8qIHN1cHBvcnQgYXV0b3Jlc3VtZSBmb3IgcmVtb3RlIHdha2V1cCB0ZXN0aW5nICovCisJaWYgKGF1dG9yZXN1bWUpCisJCXNvdXJjZXNpbmtfZHJpdmVyLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisKIAkvKiBzdXBwb3J0IE9URyBzeXN0ZW1zICovCiAJaWYgKGdhZGdldF9pc19vdGcoY2Rldi0+Z2FkZ2V0KSkgewogCQlsb29wYmFja19kcml2ZXIuZGVzY3JpcHRvcnMgPSBvdGdfZGVzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwppbmRleCAzOGFhODk2Li40NmQ2MjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jZGNfaGVhZGVyX2Rlc2MpLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX0hFQURFUl9UWVBFLAotCS5iY2RDREMJCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTIwKSwKKwkuYmNkQ0RDCQkJPSBjcHVfdG9fbGUxNigweDAxMjApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2Mgb2JleF9jZGNfdW5pb25fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTM4LDcgKzEzOCw3IEBACiAJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfT0JFWF9UWVBFLAotCS5iY2RWZXJzaW9uCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkuYmNkVmVyc2lvbgkJPSBjcHVfdG9fbGUxNigweDAxMDApLAogfTsKIAogLyogSGlnaC1TcGVlZCBTdXBwb3J0ICovCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplCQk9IGNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfaHNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplCQk9IGNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYwppbmRleCBjMDkxNmM3Li5jMWFiZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYwpAQCAtNzksNyArNzksNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBwbl9oZWFkZXJfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MKQEAgLTg3LDcgKzg3LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgcG5fcGhvbmV0X2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfUEhPTkVUX1RZUEUsCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MTUwNSksIC8qID8/PyAqLworCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgxNTA1KSwgLyogPz8/ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19wbl9mdW5jdGlvbltdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKaW5kZXggM2E4YmI1My4uMzI3OWE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKIAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvciBjYWxsX21nbXRfZGVzY3JpcHRvciBfX2luaXRkYXRhID0gewpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTIzOSw3ICsyMzksNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKQEAgLTQzNyw3ICs0MzcsNyBAQAogCQlEQkcoY2RldiwgInJuZGlzIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCiAJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAogCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOwotCQlyZXEtPnplcm8gPSAwOworCQlyZXEtPnplcm8gPSAodmFsdWUgPCB3X2xlbmd0aCk7CiAJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CiAJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGNkZXYtPmdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAodmFsdWUgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYwppbmRleCBmZTU2NzRkYi4uZGIwYWE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKQEAgLTg5LDE0ICs4OSwxNCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc2VyX2hzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3Nlcl9oc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKaW5kZXggZGM4NGQyNi4uYmZmZTkxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwpAQCAtNTksNyArNTksNiBAQAogCiAJc3RydWN0IHVzYl9lcAkJKmluX2VwOwogCXN0cnVjdCB1c2JfZXAJCSpvdXRfZXA7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJcmVzdW1lOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9zb3VyY2VzaW5rICpmdW5jX3RvX3NzKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCkBAIC02NywxMCArNjYsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfc291cmNlc2luaywgZnVuY3Rpb24pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgYXV0b3Jlc3VtZTsKLW1vZHVsZV9wYXJhbShhdXRvcmVzdW1lLCB1aW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoYXV0b3Jlc3VtZSwgInplcm8sIG9yIHNlY29uZHMgYmVmb3JlIHJlbW90ZSB3YWtldXAiKTsKLQogc3RhdGljIHVuc2lnbmVkIHBhdHRlcm47CiBtb2R1bGVfcGFyYW0ocGF0dGVybiwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBhdHRlcm4sICIwID0gYWxsIHplcm9lcywgMSA9IG1vZDYzICIpOwpAQCAtMTE4LDcgKzExMyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc2lua19kZXNjID0gewpAQCAtMTI2LDcgKzEyMSw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19zb3VyY2Vfc2lua19kZXNjc1tdID0gewpAQCAtMTU1LDIxICsxNTAsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX2F1dG9yZXN1bWUodW5zaWduZWQgbG9uZyBfYykKLXsKLQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSAodm9pZCAqKV9jOwotCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnID0gY2Rldi0+Z2FkZ2V0OwotCi0JLyogTm9ybWFsbHkgdGhlIGhvc3Qgd291bGQgYmUgd29rZW4gdXAgZm9yIHNvbWV0aGluZwotCSAqIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBqdXN0IGEgdGltZXIgZmlyaW5nOyBsaWtlbHkKLQkgKiBiZWNhdXNlIG9mIHNvbWUgZGlyZWN0IHVzZXIgcmVxdWVzdC4KLQkgKi8KLQlpZiAoZy0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKLQkJaW50IHN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwKGcpOwotCQlEQkcoY2RldiwgIiVzIC0tPiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JfQotfQotCiBzdGF0aWMgaW50IF9faW5pdAogc291cmNlc2lua19iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKIHsKQEAgLTE5OCw5ICsxNzgsNiBAQAogCQlnb3RvIGF1dG9jb25mX2ZhaWw7CiAJc3MtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLwogCi0Jc2V0dXBfdGltZXIoJnNzLT5yZXN1bWUsIHNvdXJjZXNpbmtfYXV0b3Jlc3VtZSwKLQkJCSh1bnNpZ25lZCBsb25nKSBjLT5jZGV2KTsKLQogCS8qIHN1cHBvcnQgaGlnaCBzcGVlZCBoYXJkd2FyZSAqLwogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKIAkJaHNfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CkBAIC0zNTksNyArMzM2LDYgQEAKIAogCWNkZXYgPSBzcy0+ZnVuY3Rpb24uY29uZmlnLT5jZGV2OwogCWRpc2FibGVfZW5kcG9pbnRzKGNkZXYsIHNzLT5pbl9lcCwgc3MtPm91dF9lcCk7Ci0JZGVsX3RpbWVyKCZzcy0+cmVzdW1lKTsKIAlWREJHKGNkZXYsICIlcyBkaXNhYmxlZFxuIiwgc3MtPmZ1bmN0aW9uLm5hbWUpOwogfQogCkBAIC00MjYsMzAgKzQwMiw2IEBACiAJZGlzYWJsZV9zb3VyY2Vfc2luayhzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNvdXJjZXNpbmtfc3VzcGVuZChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQotewotCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKLQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7Ci0KLQlpZiAoY2Rldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKLQkJcmV0dXJuOwotCi0JaWYgKGF1dG9yZXN1bWUpIHsKLQkJbW9kX3RpbWVyKCZzcy0+cmVzdW1lLCBqaWZmaWVzICsgKEhaICogYXV0b3Jlc3VtZSkpOwotCQlEQkcoY2RldiwgInN1c3BlbmQsIHdha2V1cCBpbiAlZCBzZWNvbmRzXG4iLCBhdXRvcmVzdW1lKTsKLQl9IGVsc2UKLQkJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOwotfQotCi1zdGF0aWMgdm9pZCBzb3VyY2VzaW5rX3Jlc3VtZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQotewotCXN0cnVjdCBmX3NvdXJjZXNpbmsJKnNzID0gZnVuY190b19zcyhmKTsKLQlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7Ci0KLQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JZGVsX3RpbWVyKCZzcy0+cmVzdW1lKTsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBfX2luaXQgc291cmNlc2lua19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCkBAIC00NjcsOCArNDE5LDYgQEAKIAlzcy0+ZnVuY3Rpb24udW5iaW5kID0gc291cmNlc2lua191bmJpbmQ7CiAJc3MtPmZ1bmN0aW9uLnNldF9hbHQgPSBzb3VyY2VzaW5rX3NldF9hbHQ7CiAJc3MtPmZ1bmN0aW9uLmRpc2FibGUgPSBzb3VyY2VzaW5rX2Rpc2FibGU7Ci0Jc3MtPmZ1bmN0aW9uLnN1c3BlbmQgPSBzb3VyY2VzaW5rX3N1c3BlbmQ7Ci0Jc3MtPmZ1bmN0aW9uLnJlc3VtZSA9IHNvdXJjZXNpbmtfcmVzdW1lOwogCiAJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmc3MtPmZ1bmN0aW9uKTsKIAlpZiAoc3RhdHVzKQpAQCAtNTU5LDcgKzUwOSw3IEBACiAgKiBzb3VyY2VzaW5rX2FkZCAtIGFkZCBhIHNvdXJjZS9zaW5rIHRlc3RpbmcgY29uZmlndXJhdGlvbiB0byBhIGRldmljZQogICogQGNkZXY6IHRoZSBkZXZpY2UgdG8gc3VwcG9ydCB0aGUgY29uZmlndXJhdGlvbgogICovCi1pbnQgX19pbml0IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK2ludCBfX2luaXQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpCiB7CiAJaW50IGlkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCmluZGV4IGZlMTgzMjguLmE5Yzk4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKIAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY19tZGxtX2Rlc2MgbWRsbV9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xMTYsNyArMTE2LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19NRExNX1RZUEUsCiAKLQkuYmNkVmVyc2lvbiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCisJLmJjZFZlcnNpb24gPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKIAkuYkdVSUQgPSB7CiAJCTB4NWQsIDB4MzQsIDB4Y2YsIDB4NjYsIDB4MTEsIDB4MTgsIDB4MTEsIDB4ZDYsCiAJCTB4YTIsIDB4MWEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2EsIDB4OWEsIDB4N2YsCkBAIC0xNDQsOSArMTQ0LDkgQEAKIAogCS8qIHRoaXMgZGVzY3JpcHRvciBhY3R1YWxseSBhZGRzIHZhbHVlLCBzdXJwcmlzZSEgKi8KIAkvKiAuaU1BQ0FkZHJlc3MgPSBEWU5BTUlDICovCi0JLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JX19jb25zdGFudF9jcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLwotCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAotCS53TnVtYmVyTUNGaWx0ZXJzID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSwKKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQljcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQljcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CWNwdV90b19sZTE2KDApLAogCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKIH07CiAKQEAgLTE4Niw3ICsxODYsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTk0LDcgKzE5NCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IDFhYjlkYWMuLjVjMDMwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTg0NywxMyArODQ3LDEzIEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCiAKIAkvKiBUaGUgbmV4dCB0aHJlZSB2YWx1ZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX0lEKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfSUQpLAotCS5iY2REZXZpY2UgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX0lEKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKKwkuYmNkRGV2aWNlID0JCWNwdV90b19sZTE2KDB4ZmZmZiksCiAKIAkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCiAJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULApAQCAtOTI2LDcgKzkyNiw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNigyKSwKIAkuYkludGVydmFsID0JCTMyLAkvLyBmcmFtZXMgLT4gMzIgbXMKIH07CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCkBAIC05NjcsNyArOTY3LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfYnVsa19pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgpAQCAtOTc3LDcgKzk3Nyw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfb3V0X2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiAJLmJJbnRlcnZhbCA9CQkxLAkvLyBOQUsgZXZlcnkgMSB1ZnJhbWUKIH07CiAKQEAgLTk4OCw3ICs5ODgsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19pbnRyX2luX2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDIpLAogCS5iSW50ZXJ2YWwgPQkJOSwJLy8gMioqKDktMSkgPSAyNTYgdWZyYW1lcyAtPiAzMiBtcwogfTsKIApAQCAtMTcxMSw3ICsxNzExLDkgQEAKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfV1JJVEVfUFJPVEVDVEVEOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJc3Bpbl9sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CiAJY3VybHVuLT5maWxwLT5mX2ZsYWdzICY9IH5PX1NZTkM7CS8vIERlZmF1bHQgaXMgbm90IHRvIHdhaXQKKwlzcGluX3VubG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCiAJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncwogCSAqIG5vdCB0b28gYmlnICovCkBAIC0xNzI4LDggKzE3MzAsMTEgQEAKIAkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpCS8vIEZVQQorCQlpZiAoZnNnLT5jbW5kWzFdICYgMHgwOCkgewkvLyBGVUEKKwkJCXNwaW5fbG9jaygmY3VybHVuLT5maWxwLT5mX2xvY2spOwogCQkJY3VybHVuLT5maWxwLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJCXNwaW5fdW5sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CisJCX0KIAl9CiAJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CkBAIC0yNjQ2LDcgKzI2NTEsNyBAQAogCQlzdHJ1Y3QgYnVsa19jc193cmFwCSpjc3cgPSBiaC0+YnVmOwogCiAJCS8qIFN0b3JlIGFuZCBzZW5kIHRoZSBCdWxrLW9ubHkgQ1NXICovCi0JCWNzdy0+U2lnbmF0dXJlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOworCQljc3ctPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTQl9CVUxLX0NTX1NJRyk7CiAJCWNzdy0+VGFnID0gZnNnLT50YWc7CiAJCWNzdy0+UmVzaWR1ZSA9IGNwdV90b19sZTMyKGZzZy0+cmVzaWR1ZSk7CiAJCWNzdy0+U3RhdHVzID0gc3RhdHVzOwpAQCAtMzA4OSw3ICszMDk0LDcgQEAKIAogCS8qIElzIHRoZSBDQlcgdmFsaWQ/ICovCiAJaWYgKHJlcS0+YWN0dWFsICE9IFVTQl9CVUxLX0NCX1dSQVBfTEVOIHx8Ci0JCQljYnctPlNpZ25hdHVyZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJY2J3LT5TaWduYXR1cmUgIT0gY3B1X3RvX2xlMzIoCiAJCQkJVVNCX0JVTEtfQ0JfU0lHKSkgewogCQlEQkcoZnNnLCAiaW52YWxpZCBDQlc6IGxlbiAldSBzaWcgMHgleFxuIiwKIAkJCQlyZXEtPmFjdHVhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwppbmRleCBkOGQ5YTUyLi45ZDdiOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCkBAIC0xODAyLDcgKzE4MDIsOCBAQAogCiBvdXQ6CiAJaWYgKHJldHZhbCkKLQkJcHJpbnRrKCJnYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTE4NDcsNyArMTg0OCw4IEBACiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKIAotCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMjQ1NSw3ICsyNDU3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKLQlwcmludGsoIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIHVucmVnaXN0ZXJlZFxuIiwgZHJpdmVyX2Rlc2MpOwogfQogCiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKaW5kZXggZGQyZjE2YS4uZTg0YjNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaApAQCAtMTksNyArMTksNyBAQAogCQlzdHJ1Y3QgdXNiX2VwICppbiwgc3RydWN0IHVzYl9lcCAqb3V0KTsKIAogLyogY29uZmlndXJhdGlvbi1zcGVjaWZpYyBsaW5rdXAgKi8KLWludCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwotaW50IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOworaW50IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKTsKK2ludCBsb29wYmFja19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpOwogCiAjZW5kaWYgLyogX19HX1pFUk9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwppbmRleCA2MGQzZjllLi5iOTMxMmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMTk5LDEwICsxOTksMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9ERVZJQ0VfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKQEAgLTI0MSw4ICsyNDEsOCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKLQkuYmNkQURDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpKSwKKwkuYmNkQURDID0JCWNwdV90b19sZTE2KDB4MDEwMCksCisJLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAogCS5iSW5Db2xsZWN0aW9uID0JMSwKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUdNSURJX01TX0lOVEVSRkFDRSwKQEAgLTI2NSw4ICsyNjUsOCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9NU19IRUFERVJfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0hFQURFUiwKLQkuYmNkTVNDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQkud1RvdGFsTGVuZ3RoID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoVVNCX0RUX01TX0hFQURFUl9TSVpFCisJLmJjZE1TQyA9CQljcHVfdG9fbGUxNigweDAxMDApLAorCS53VG90YWxMZW5ndGggPQkJY3B1X3RvX2xlMTYoVVNCX0RUX01TX0hFQURFUl9TSVpFCiAJCQkJKyAyKlVTQl9EVF9NSURJX0lOX1NJWkUKIAkJCQkrIDIqVVNCX0RUX01JRElfT1VUX1NJWkUoMSkpLAogfTsKQEAgLTEwOTksMTAgKzEwOTksOSBAQAogCQkuZGV2X2ZyZWUgPSBnbWlkaV9zbmRfZnJlZSwKIAl9OwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpIHsKLQkJRVJST1IoZGV2LCAic25kX2NhcmRfbmV3IGZhaWxlZFxuIik7Ci0JCWVyciA9IC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlFUlJPUihkZXYsICJzbmRfY2FyZF9jcmVhdGUgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAlkZXYtPmNhcmQgPSBjYXJkOwpAQCAtMTIyNyw3ICsxMjI2LDcgQEAKIAkJICovCiAJCXByX3dhcm5pbmcoIiVzOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCiAJCQlzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7Ci0JCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg5OTk5KTsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHg5OTk5KTsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA2MzQxOWM0Li5kZTAxMGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKIAkJCQkvKiBhY3RpdmUgZW5kcG9pbnQgKi8KIAkJCQlpZiAodG1wID4gMyB8fCAoIWRldi0+ZXBbdG1wXS5kZXNjICYmIHRtcCAhPSAwKSkKIAkJCQkJZ290byBzdGFsbDsKLQkJCQlpZiAoY3RybC53SW5kZXggJiBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQkJCWlmIChjdHJsLndJbmRleCAmIGNwdV90b19sZTE2KAogCQkJCQkJVVNCX0RJUl9JTikpIHsKIAkJCQkJaWYgKCFkZXYtPmVwW3RtcF0uaXNfaW4pCiAJCQkJCQlnb3RvIHN0YWxsOwpAQCAtMTQ4MCw3ICsxNDgwLDcgQEAKIAkJCQkJaWYgKGRldi0+ZXBbdG1wXS5pc19pbikKIAkJCQkJCWdvdG8gc3RhbGw7CiAJCQkJfQotCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KAorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigKIAkJCQkJCVVTQl9FTkRQT0lOVF9IQUxUKSkKIAkJCQkJZ290byBzdGFsbDsKIAkJCQlpZiAodG1wKQpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIAkJCQlyZXR1cm47CiAJCQljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CiAJCQkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXA6IGFsd2F5cyBjbGVhciAqLwotCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpKQorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigxKSkKIAkJCQkJZ290byBzdGFsbDsKIAkJCQlWREJHKGRldiwgImNsZWFyIGRldiByZW1vdGUgd2FrZXVwXG4iKTsKIAkJCQlnb3RvIHN1Y2NlZWQ7CkBAIC0xNTE5LDcgKzE1MTksNyBAQAogCWRldi0+cmVxX2NvbmZpZyA9IChjdHJsLmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04KIAkJCQkmJiBjdHJsLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKIAlpZiAodW5saWtlbHkoZGV2LT5yZXFfY29uZmlnKSkKLQkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpOworCQlkZXYtPmNvbmZpZ3VyZWQgPSAoY3RybC53VmFsdWUgIT0gY3B1X3RvX2xlMTYoMCkpOwogCiAJLyogZGVsZWdhdGUgZXZlcnl0aGluZyB0byB0aGUgZ2FkZ2V0IGRyaXZlci4KIAkgKiBpdCBtYXkgcmVzcG9uZCBhZnRlciB0aGlzIGlycSBoYW5kbGVyIHJldHVybnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwppbmRleCA3N2M1ZDBhLi4xNjg2NThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJZHJpdmVyL3VzYi9nYWRnZXQvaW14X3VkYy5jCiAgKgotICoJQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgTGVlKGVlbWlrZUBnbWFpbC5jb20pCisgKglDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBMZWUgPGVlbWlrZUBnbWFpbC5jb20+CiAgKglDb3B5cmlnaHQgKEMpIDIwMDggRGFyaXVzIEF1Z3VsaXMgPGF1Z3VsaXMuZGFyaXVzQGdtYWlsLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KQEAgLTUxLDcgKzUyLDggQEAKIHZvaWQgaW14X3VkY19lbmFibGUoc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQogewogCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfRkVfRU5BIHwgQ1RSTF9BRkVfRU5BLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9GRV9FTkEgfCBDVFJMX0FGRV9FTkEsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwogfQogCkBAIC0xMjYsNyArMTI4LDggQEAKIAkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKIAkJCQlfX3Jhd193cml0ZWIoZXBfY29uZltqXSwKIAkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9EREFUKTsKLQkJCQlkbyB7fSB3aGlsZSAoX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9EQURSKQorCQkJCWRvIHt9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlCisJCQkJCQkJCSsgVVNCX0RBRFIpCiAJCQkJCSYgREFEUl9CU1kpOwogCQkJfQogCQl9CkBAIC0xODMsNyArMTg2LDggQEAKIAkJdGVtcCA9IChFUF9ESVIoaW14X2VwKSA8PCA3KSB8IChtYXggPDwgNSkKIAkJCXwgKGlteF9lcC0+Ym1BdHRyaWJ1dGVzIDw8IDMpOwogCQlfX3Jhd193cml0ZWwodGVtcCwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKLQkJX19yYXdfd3JpdGVsKHRlbXAgfCBFUFNUQVRfRkxVU0gsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSk7CisJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgRVBTVEFUX0ZMVVNILAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKIAkJRF9JTkkoaW14X3VzYi0+ZGV2LCAiPCVzPiBlcCVkX3N0YXQgJTA4eFxuIiwgX19mdW5jX18sIGksCiAJCQlfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpKTsKIAl9CkBAIC0yNzgsMTUgKzI4MiwxOCBAQAogCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGlteF9lcC0+aW14X3VzYjsKIAlpbnQgdGVtcCwgaTsKIAotCURfRVJSKGlteF91c2ItPmRldiwgIjwlcz4gRm9yY2VkIHN0YWxsIG9uICVzXG4iLCBfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKKwlEX0VSUihpbXhfdXNiLT5kZXYsCisJCSI8JXM+IEZvcmNlZCBzdGFsbCBvbiAlc1xuIiwgX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CiAKIAlpbXhfZmx1c2goaW14X2VwKTsKIAogCS8qIFNwZWNpYWwgY2FyZSBmb3IgZXAwICovCi0JaWYgKEVQX05PKGlteF9lcCkpIHsKKwlpZiAoIUVQX05PKGlteF9lcCkpIHsKIAkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7Ci0JCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSIHwgQ1RSTF9DTURFUlJPUiwgaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJZG8geyB9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpICYgQ1RSTF9DTURPVkVSKTsKKwkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIgfCBDVFJMX0NNREVSUk9SLAorCQkJCQkJaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKKwkJZG8geyB9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpCisJCQkJCQkmIENUUkxfQ01ET1ZFUik7CiAJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCQlfX3Jhd193cml0ZWwodGVtcCAmIH5DVFJMX0NNREVSUk9SLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCX0KQEAgLTI5NiwxMiArMzAzLDEzIEBACiAJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkgKyspIHsKLQkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOworCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOwogCQkJaWYgKCEodGVtcCAmIEVQU1RBVF9TVEFMTCkpCiAJIAkJCWJyZWFrOwogCSAJCXVkZWxheSgyMCk7CiAJIAl9Ci0JCWlmIChpID09IDUwKQorCQlpZiAoaSA9PSAxMDApCiAJCQlEX0VSUihpbXhfdXNiLT5kZXYsICI8JXM+IE5vbiBmaW5pc2hlZCBzdGFsbCBvbiAlc1xuIiwKIAkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKIAl9CkBAIC0zMjUsNyArMzMzLDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotc3RhdGljIHZvaWQgZXBfYWRkX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9hZGRfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLAorCQkJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQogewogCWlmICh1bmxpa2VseSghcmVxKSkKIAkJcmV0dXJuOwpAQCAtMzM0LDcgKzM0Myw4IEBACiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmlteF9lcC0+cXVldWUpOwogfQogCi1zdGF0aWMgdm9pZCBlcF9kZWxfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwX2RlbF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCiB7CiAJaWYgKHVubGlrZWx5KCFyZXEpKQogCQlyZXR1cm47CkBAIC0zNDMsNyArMzUzLDggQEAKIAlyZXEtPmluX3VzZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCXN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQogewogCWVwX2RlbF9yZXF1ZXN0KGlteF9lcCwgcmVxKTsKIApAQCAtNDk0LDcgKzUwNSw4IEBACiAJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSwgcmVxLAogCQkJCWNvbXBsZXRlZCA/ICJjb21wbGV0ZWQiIDogIm5vdCBjb21wbGV0ZWQiKTsKIAkJCWlmICghRVBfTk8oaW14X2VwKSkKLQkJCQllcDBfY2hnX3N0YXQoX19mdW5jX18sIGlteF9lcC0+aW14X3VzYiwgRVAwX0lETEUpOworCQkJCWVwMF9jaGdfc3RhdChfX2Z1bmNfXywKKwkJCQkJCWlteF9lcC0+aW14X3VzYiwgRVAwX0lETEUpOwogCQl9CiAJfQogCkBAIC01MzksMTAgKzU1MSw5IEBACiAJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZpbXhfZXAtPnF1ZXVlKSkKKwlpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoaW14X2VwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgaW14X3JlcXVlc3QsIHF1ZXVlKTsKIAotCWlmIChyZXEpIHsKIAkJc3dpdGNoIChpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlKSB7CiAKIAkJY2FzZSBFUDBfSU5fREFUQV9QSEFTRToJCQkvKiBHRVRfREVTQ1JJUFRPUiAqLwpAQCAtNTYxLDYgKzU3MiwxMCBAQAogCQl9CiAJfQogCisJZWxzZQorCQlEX0VSUihpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gbm8gcmVxdWVzdCBvbiAlc1xuIiwKKwkJCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgzLDcgKzU5OCw4IEBACiAJCQkJIjwlcz4gbm8gc2V0dXAgcGFja2V0IHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHN0YWxsOwogCQl9Ci0JCXUud29yZFtpXSA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKwlVU0JfRVBfRkRBVChFUF9OTyhpbXhfZXApKSk7CisJCXUud29yZFtpXSA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0ZEQVQoRVBfTk8oaW14X2VwKSkpOwogCX0KIAogCXRlbXAgPSBpbXhfZXBfZW1wdHkoaW14X2VwKTsKQEAgLTc1OSw3ICs3NzUsNyBAQAogCSovCiAJaWYgKGlteF91c2ItPnNldF9jb25maWcgJiYgIUVQX05PKGlteF9lcCkpIHsKIAkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCURfRVBYKGlteF91c2ItPmRldiwKKwkJRF9FUlIoaW14X3VzYi0+ZGV2LAogCQkJIjwlcz4gZ2FkZ2V0IHJlcGx5IHNldCBjb25maWdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzc5LDI4ICs3OTUsMjkgQEAKIAkJcmV0dXJuIC1FU0hVVERPV047CiAJfQogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJLyogRGVidWcgKi8KIAlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IGVwJWQgJXMgcmVxdWVzdCBmb3IgWyVkXSBieXRlc1xuIiwKIAkJX19mdW5jX18sIEVQX05PKGlteF9lcCksCi0JCSgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRSkKLQkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKSA/ICJJTiIgOiAiT1VUIiwgdXNiX3JlcS0+bGVuZ3RoKTsKKwkJKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlCisJCQkJCQkJPT0gRVAwX0lOX0RBVEFfUEhBU0UpCisJCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkKKwkJCQkJPyAiSU4iIDogIk9VVCIsIHVzYl9yZXEtPmxlbmd0aCk7CiAJZHVtcF9yZXEoX19mdW5jX18sIGlteF9lcCwgdXNiX3JlcSk7CiAKIAlpZiAoaW14X2VwLT5zdG9wcGVkKSB7CiAJCXVzYl9yZXEtPnN0YXR1cyA9IC1FU0hVVERPV047Ci0JCXJldCA9IC1FU0hVVERPV047Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVTSFVURE9XTjsKIAl9CiAKIAlpZiAocmVxLT5pbl91c2UpIHsKIAkJRF9FUlIoaW14X3VzYi0+ZGV2LAogCQkJIjwlcz4gcmVmdXNpbmcgdG8gcXVldWUgcmVxICVwIChhbHJlYWR5IHF1ZXVlZClcbiIsCiAJCQlfX2Z1bmNfXywgcmVxKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCXVzYl9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAl1c2JfcmVxLT5hY3R1YWwgPSAwOwogCkBAIC04MTAsNyArODI3LDcgQEAKIAkJcmV0ID0gaGFuZGxlX2VwMChpbXhfZXApOwogCWVsc2UKIAkJcmV0ID0gaGFuZGxlX2VwKGlteF9lcCk7Ci1vdXQ6CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk5Nyw3MSArMTAxNCwzMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQorLyoKKyAqIENhbGxlZCB3aGVuIHRpbWVyIGV4cGlyZXMuCisgKiBUaW1lciBpcyBzdGFydGVkIHdoZW4gQ0ZHX0NIRyBpcyByZWNlaXZlZC4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbmZpZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9ICh2b2lkICopZGF0YTsKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHU7CiAJaW50IHRlbXAsIGNmZywgaW50ZiwgYWx0OwotCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKIAotCWlmIChpbnRyICYgKElOVFJfV0FLRVVQIHwgSU5UUl9TVVNQRU5EIHwgSU5UUl9SRVNVTUUgfCBJTlRSX1JFU0VUX1NUQVJUCi0JCQl8IElOVFJfUkVTRVRfU1RPUCB8IElOVFJfQ0ZHX0NIRykpIHsKLQkJCQlkdW1wX2ludHIoX19mdW5jX18sIGludHIsIGlteF91c2ItPmRldik7Ci0JCQkJZHVtcF91c2Jfc3RhdChfX2Z1bmNfXywgaW14X3VzYik7Ci0JfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZiAoIWlteF91c2ItPmRyaXZlcikgewotCQkvKmlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsqLwotCQlnb3RvIGVuZF9pcnE7Ci0JfQorCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOworCWNmZyAgPSAodGVtcCAmIFNUQVRfQ0ZHKSA+PiA1OworCWludGYgPSAodGVtcCAmIFNUQVRfSU5URikgPj4gMzsKKwlhbHQgID0gIHRlbXAgJiBTVEFUX0FMVFNFVDsKIAotCWlmIChpbnRyICYgSU5UUl9XQUtFVVApIHsKLQkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTgotCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+cmVzdW1lKQotCQkJCWlteF91c2ItPmRyaXZlci0+cmVzdW1lKCZpbXhfdXNiLT5nYWRnZXQpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Ci0JfQorCURfUkVRKGlteF91c2ItPmRldiwKKwkJIjwlcz4gb3JpZyBjb25maWcgQz0lZCwgST0lZCwgQT0lZCAvICIKKwkJInJlcSBjb25maWcgQz0lZCwgST0lZCwgQT0lZFxuIiwKKwkJX19mdW5jX18sIGlteF91c2ItPmNmZywgaW14X3VzYi0+aW50ZiwgaW14X3VzYi0+YWx0LAorCQljZmcsIGludGYsIGFsdCk7CiAKLQlpZiAoaW50ciAmIElOVFJfU1VTUEVORCkgewotCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCi0JCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKQotCQkJCWlteF91c2ItPmRyaXZlci0+c3VzcGVuZCgmaW14X3VzYi0+Z2FkZ2V0KTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCX0KKwlpZiAoY2ZnID09IDEgfHwgY2ZnID09IDIpIHsKIAotCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVEFSVCkgewotCQlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKLQkJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgaW14X3VzYi0+ZHJpdmVyKTsKLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCX0KLQotCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVE9QKQotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKLQotCWlmIChpbnRyICYgSU5UUl9DRkdfQ0hHKSB7Ci0JCV9fcmF3X3dyaXRlbChJTlRSX0NGR19DSEcsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7Ci0JCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX1NUQVQpOwotCQljZmcgID0gKHRlbXAgJiBTVEFUX0NGRykgPj4gNTsKLQkJaW50ZiA9ICh0ZW1wICYgU1RBVF9JTlRGKSA+PiAzOwotCQlhbHQgID0gIHRlbXAgJiBTVEFUX0FMVFNFVDsKLQotCQlEX1JFUShpbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBvcmlnIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkIC8gIgotCQkJInJlcSBjb25maWcgQz0lZCwgST0lZCwgQT0lZFxuIiwKLQkJCV9fZnVuY19fLCBpbXhfdXNiLT5jZmcsIGlteF91c2ItPmludGYsIGlteF91c2ItPmFsdCwKLQkJCWNmZywgaW50ZiwgYWx0KTsKLQotCQlpZiAoY2ZnICE9IDEgJiYgY2ZnICE9IDIpCi0JCQlnb3RvIGVuZF9pcnE7Ci0KLQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0KLQkJLyogQ29uZmlnIHNldHVwICovCiAJCWlmIChpbXhfdXNiLT5jZmcgIT0gY2ZnKSB7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBjb25maWcgc3RhcnRcbiIsX19mdW5jX18pOwogCQkJdS5iUmVxdWVzdCA9IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT047CiAJCQl1LmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKIAkJCQkJVVNCX1RZUEVfU1RBTkRBUkQgfApAQCAtMTA3MCwxNCArMTA0OCwxMCBAQAogCQkJdS53SW5kZXggPSAwOwogCQkJdS53TGVuZ3RoID0gMDsKIAkJCWlteF91c2ItPmNmZyA9IGNmZzsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAxOwogCQkJaW14X3VzYi0+ZHJpdmVyLT5zZXR1cCgmaW14X3VzYi0+Z2FkZ2V0LCAmdSk7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGNvbmZpZyBkb25lXG4iLF9fZnVuY19fKTsKIAogCQl9CiAJCWlmIChpbXhfdXNiLT5pbnRmICE9IGludGYgfHwgaW14X3VzYi0+YWx0ICE9IGFsdCkgewotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgaW50ZXJmYWNlIHN0YXJ0XG4iLF9fZnVuY19fKTsKIAkJCXUuYlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U7CiAJCQl1LmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwKIAkJCQkJICBVU0JfVFlQRV9TVEFOREFSRCB8CkBAIC0xMDg3LDIwICsxMDYxLDkyIEBACiAJCQl1LndMZW5ndGggPSAwOwogCQkJaW14X3VzYi0+aW50ZiA9IGludGY7CiAJCQlpbXhfdXNiLT5hbHQgPSBhbHQ7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMTsKIAkJCWlteF91c2ItPmRyaXZlci0+c2V0dXAoJmlteF91c2ItPmdhZGdldCwgJnUpOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBpbnRlcmZhY2UgZG9uZVxuIixfX2Z1bmNfXyk7CiAJCX0KIAl9CiAKKwlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlteF91ZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOworCWludCB0ZW1wOworCisJaWYgKGludHIgJiAoSU5UUl9XQUtFVVAgfCBJTlRSX1NVU1BFTkQgfCBJTlRSX1JFU1VNRSB8IElOVFJfUkVTRVRfU1RBUlQKKwkJCXwgSU5UUl9SRVNFVF9TVE9QIHwgSU5UUl9DRkdfQ0hHKSkgeworCQkJCWR1bXBfaW50cihfX2Z1bmNfXywgaW50ciwgaW14X3VzYi0+ZGV2KTsKKwkJCQlkdW1wX3VzYl9zdGF0KF9fZnVuY19fLCBpbXhfdXNiKTsKKwl9CisKKwlpZiAoIWlteF91c2ItPmRyaXZlcikKKwkJZ290byBlbmRfaXJxOworCiAJaWYgKGludHIgJiBJTlRSX1NPRikgeworCQkvKiBDb3B5IGZyb20gRnJlZXNjYWxlIEJTUC4KKwkJICAgV2UgbXVzdCBlbmFibGUgU09GIGludHIgYW5kIHNldCBDTURPVkVSLgorCQkgICBEYXRhc2hlZXQgZG9uJ3Qgc3BlY2lmaXkgdGhpcyBhY3Rpb24sIGJ1dCBpdAorCQkgICBpcyBkb25lIGluIEZyZWVzY2FsZSBCU1AsIHNvIGp1c3QgY29weSBpdC4KKwkJKi8KIAkJaWYgKGlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JRExFKSB7CiAJCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9DTURPVkVSLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwogCQl9CiAJfQogCisJaWYgKGludHIgJiBJTlRSX0NGR19DSEcpIHsKKwkJLyogQSB3b3JrYXJvdW5kIG9mIHNlcmlvdXMgSU1YIFVEQyBidWcuCisJCSAgIEhhbmRsaW5nIG9mIENGR19DSEcgc2hvdWxkIGJlIGRlbGF5ZWQgZm9yIHNvbWUgdGltZSwgYmVjYXVzZQorCQkgICBJTVggZG9lcyBub3QgTkFDSyB0aGUgaG9zdCB3aGVuIENGR19DSEcgaW50ZXJydXB0IGlzIHBlbmRpbmcuCisJCSAgIFRoZXJlIGlzIG5vIHRpbWUgdG8gaGFuZGxlIGN1cnJlbnQgQ0ZHX0NIRworCQkgICBpZiBuZXh0IENGR19DSEcgb3IgU0VUVVAgcGFja2VkIGlzIHNlbmQgaW1tZWRpYXRlbHkuCisJCSAgIFdlIGhhdmUgdG8gY2xlYXIgQ0ZHX0NIRywgc3RhcnQgdGhlIHRpbWVyIGFuZAorCQkgICBOQUNLIHRoZSBob3N0IGJ5IHNldHRpbmcgQ1RSTF9DTURPVkVSCisJCSAgIGlmIGl0IHNlbmRzIGFueSBTRVRVUCBwYWNrZXQuCisJCSAgIFdoZW4gdGltZXIgZXhwaXJlcywgaGFuZGxlciBpcyBjYWxsZWQgdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24KKwkJICAgY2hhbmdlcy4gV2hpbGUgQ0ZHX0NIRyBpcyBub3QgaGFuZGxlZCAoc2V0X2NvbmZpZz0xKSwKKwkJICAgd2UgbXVzdCBOQUNLIHRoZSBob3N0IHRvIGV2ZXJ5IFNFVFVQIHBhY2tlZC4KKwkJICAgVGhpcyBkZWxheSBwcmV2ZW50cyBmcm9tIGdvaW5nIG91dCBvZiBzeW5jIHdpdGggaG9zdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbChJTlRSX0NGR19DSEcsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAxOworCQltb2RfdGltZXIoJmlteF91c2ItPnRpbWVyLCBqaWZmaWVzICsgNSk7CisJCWdvdG8gZW5kX2lycTsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfV0FLRVVQKSB7CisJCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSkKKwkJCQlpbXhfdXNiLT5kcml2ZXItPnJlc3VtZSgmaW14X3VzYi0+Z2FkZ2V0KTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfU1VTUEVORCkgeworCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOCisJCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKQorCQkJCWlteF91c2ItPmRyaXZlci0+c3VzcGVuZCgmaW14X3VzYi0+Z2FkZ2V0KTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RBUlQpIHsKKwkJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJCXVkY19zdG9wX2FjdGl2aXR5KGlteF91c2IsIGlteF91c2ItPmRyaXZlcik7CisJCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCQlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJfQorCisJaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUT1ApCisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCiBlbmRfaXJxOgogCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTExMDksNiArMTE1NSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19jdHJsX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OworCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAgPSAmaW14X3VzYi0+aW14X2VwWzBdOwogCWludCBpbnRyID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKDApKTsKIAogCWR1bXBfZXBfaW50cihfX2Z1bmNfXywgMCwgaW50ciwgaW14X3VzYi0+ZGV2KTsKQEAgLTExMTgsMTYgKzExNjUsMTUgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCS8qIERFVlJFUSBJUlEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwkvKiBERVZSRVEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KIAlpZiAoaW50ciAmIChFUElOVFJfREVWUkVRIHwgRVBJTlRSX01ERVZSRVEpKQogCQloYW5kbGVfZXAwX2RldnJlcShpbXhfdXNiKTsKIAkvKiBTZWVtIGkuTVggaXMgbWlzc2luZyBFT0YgaW50ZXJydXB0IHNvbWV0aW1lcy4KLQkgKiBUaGVyZWZvcmUgd2UgbW9uaXRvciBib3RoIEVPRiBhbmQgRklGT19FTVBUWSBpbnRlcnJ1cHMKLQkgKiB3aGVuIHRyYW5zbWl0aW5nLCBhbmQgYm90aCBFT0YgYW5kIEZJRk9fRlVMTCB3aGVuCi0JICogcmVjZWl2aW5nIGRhdGEuCisJICogVGhlcmVmb3JlIHdlIGRvbid0IG1vbml0b3IgRU9GLgorCSAqIFdlIGNhbGwgaGFuZGxlX2VwMCgpIG9ubHkgaWYgYSByZXF1ZXN0IGlzIHF1ZXVlZCBmb3IgZXAwLgogCSAqLwotCWVsc2UgaWYgKGludHIgJiAoRVBJTlRSX0VPRiB8IEVQSU5UUl9GSUZPX0VNUFRZIHwgRVBJTlRSX0ZJRk9fRlVMTCkpCi0JCWhhbmRsZV9lcDAoJmlteF91c2ItPmlteF9lcFswXSk7CisJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKQorCQloYW5kbGVfZXAwKGlteF9lcCk7CiAKIAlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKDApKTsKIApAQCAtMTE4Niw4ICsxMjMyLDggQEAKIAkJLmVwMAkJPSAmY29udHJvbGxlci5pbXhfZXBbMF0uZXAsCiAJCS5uYW1lCQk9IGRyaXZlcl9uYW1lLAogCQkuZGV2ID0gewotCQkJIC5idXNfaWQJPSAiZ2FkZ2V0IiwKLQkJIH0sCisJCQkuaW5pdF9uYW1lCT0gImdhZGdldCIsCisJCX0sCiAJfSwKIAogCS5pbXhfZXBbMF0gPSB7CkBAIC0xMzE4LDYgKzEzNjQsNyBAQAogCiAJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgZHJpdmVyKTsKIAlpbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7CisJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CiAKIAlkcml2ZXItPnVuYmluZCgmaW14X3VzYi0+Z2FkZ2V0KTsKIAlpbXhfdXNiLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CkBAIC0xNDM1LDYgKzE0ODIsMTAgQEAKIAl1c2JfaW5pdF9kYXRhKGlteF91c2IpOwogCWlteF91ZGNfaW5pdChpbXhfdXNiKTsKIAorCWluaXRfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKKwlpbXhfdXNiLT50aW1lci5mdW5jdGlvbiA9IGhhbmRsZV9jb25maWc7CisJaW14X3VzYi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlteF91c2I7CisKIAlyZXR1cm4gMDsKIAogZmFpbDM6CkBAIC0xNDU3LDYgKzE1MDgsNyBAQAogCWludCBpOwogCiAJaW14X3VkY19kaXNhYmxlKGlteF91c2IpOworCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IElNWF9VU0JfTkJfRVAgKyAxOyBpKyspCiAJCWZyZWVfaXJxKGlteF91c2ItPnVzYmRfaW50W2ldLCBpbXhfdXNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCmluZGV4IDg1MDA3NjkuLmI0OGFkNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaApAQCAtMjMsNyArMjMsOCBAQAogLyogSGVscGVyIG1hY3JvcyAqLwogI2RlZmluZSBFUF9OTyhlcCkJKChlcC0+YkVuZHBvaW50QWRkcmVzcykgJiB+VVNCX0RJUl9JTikgLyogSU46MSwgT1VUOjAgKi8KICNkZWZpbmUgRVBfRElSKGVwKQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzKSAmIFVTQl9ESVJfSU4gPyAxIDogMCkKLSNkZWZpbmUgaXJxX3RvX2VwKGlycSkJKCgoaXJxKSA+PSBVU0JEX0lOVDApIHx8ICgoaXJxKSA8PSBVU0JEX0lOVDYpID8gKChpcnEpIC0gVVNCRF9JTlQwKSA6IChVU0JEX0lOVDYpKSAvKnNob3VsZCBub3QgaGFwcGVuKi8KKyNkZWZpbmUgaXJxX3RvX2VwKGlycSkJKCgoaXJxKSA+PSBVU0JEX0lOVDApIHx8ICgoaXJxKSA8PSBVU0JEX0lOVDYpIFwKKwkJPyAoKGlycSkgLSBVU0JEX0lOVDApIDogKFVTQkRfSU5UNikpIC8qc2hvdWxkIG5vdCBoYXBwZW4qLwogI2RlZmluZSBlcF90b19pcnEoZXApCShFUF9OTygoZXApKSArIFVTQkRfSU5UMCkKICNkZWZpbmUgSU1YX1VTQl9OQl9FUAk2CiAKQEAgLTU4LDYgKzU5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CiAJc3RydWN0IGlteF9lcF9zdHJ1Y3QJCQlpbXhfZXBbSU1YX1VTQl9OQl9FUF07CiAJc3RydWN0IGNsawkJCQkqY2xrOworCXN0cnVjdCB0aW1lcl9saXN0CQkJdGltZXI7CiAJZW51bSBlcDBfc3RhdGUJCQkJZXAwc3RhdGU7CiAJc3RydWN0IHJlc291cmNlCQkJCSpyZXM7CiAJdm9pZCBfX2lvbWVtCQkJCSpiYXNlOwpAQCAtODgsOCArOTAsOCBAQAogI2RlZmluZSAgVVNCX0VQX0ZEQVQzKHgpCSgweDNGICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGRhdGEgKi8KICNkZWZpbmUgIFVTQl9FUF9GU1RBVCh4KQkoMHg0MCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBzdGF0dXMgKi8KICNkZWZpbmUgIFVTQl9FUF9GQ1RSTCh4KQkoMHg0NCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBjb250cm9sICovCi0jZGVmaW5lICBVU0JfRVBfTFJGUCh4KQkJKDB4NDggKyAoeCoweDMwKSkgLyogVVNCIGxhc3QgcmVhZCBmcmFtZSBwb2ludGVyICovCi0jZGVmaW5lICBVU0JfRVBfTFdGUCh4KQkJKDB4NEMgKyAoeCoweDMwKSkgLyogVVNCIGxhc3Qgd3JpdGUgZnJhbWUgcG9pbnRlciAqLworI2RlZmluZSAgVVNCX0VQX0xSRlAoeCkJCSgweDQ4ICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHJkIGYuIHBvaW50ZXIgKi8KKyNkZWZpbmUgIFVTQl9FUF9MV0ZQKHgpCQkoMHg0QyArICh4KjB4MzApKSAvKiBVU0IgbGFzdCB3ciBmLiBwb2ludGVyICovCiAjZGVmaW5lICBVU0JfRVBfRkFMUk0oeCkJKDB4NTAgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gYWxhcm0gKi8KICNkZWZpbmUgIFVTQl9FUF9GUkRQKHgpCQkoMHg1NCArICh4KjB4MzApKSAvKiBVU0IgRklGTyByZWFkIHBvaW50ZXIgKi8KICNkZWZpbmUgIFVTQl9FUF9GV1JQKHgpCQkoMHg1OCArICh4KjB4MzApKSAvKiBVU0IgRklGTyB3cml0ZSBwb2ludGVyICovCkBAIC0xNzAsNyArMTcyLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfSVJRICovCiAvKiAjZGVmaW5lIERFQlVHX0VQSVJRICovCiAvKiAjZGVmaW5lIERFQlVHX0RVTVAgKi8KLSNkZWZpbmUgREVCVUdfRVJSCisvKiAjZGVmaW5lIERFQlVHX0VSUiAqLwogCiAjaWZkZWYgREVCVUdfUkVRCiAJI2RlZmluZSBEX1JFUShkZXYsIGFyZ3MuLi4pCWRldl9kYmcoZGV2LCAjIyBhcmdzKQpAQCAtMjI4LDcgKzIzMCw4IEBACiAjZW5kaWYgLyogREVCVUdfSVJRICovCiAKICNpZmRlZiBERUJVR19FUElSUQotCXN0YXRpYyB2b2lkIGR1bXBfZXBfaW50cihjb25zdCBjaGFyICpsYWJlbCwgaW50IG5yLCBpbnQgaXJxcmVnLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCisJc3RhdGljIHZvaWQgZHVtcF9lcF9pbnRyKGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgbnIsIGludCBpcnFyZWcsCisJCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KQogCXsKIAkJZGV2X2RiZyhkZXYsICI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIG5yLAogCQkJKGlycXJlZyAmIEVQSU5UUl9GSUZPX0ZVTEwpID8gIiBmdWxsIiA6ICIiLApAQCAtMjQ2LDcgKzI0OSw4IEBACiAjZW5kaWYgLyogREVCVUdfSVJRICovCiAKICNpZmRlZiBERUJVR19EVU1QCi0Jc3RhdGljIHZvaWQgZHVtcF91c2Jfc3RhdChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiKQorCXN0YXRpYyB2b2lkIGR1bXBfdXNiX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsCisJCQkJCQlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCiAJewogCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7CiAKQEAgLTI1OSwxMiArMjYzLDE1IEBACiAJCQkodGVtcCAmIFNUQVRfQUxUU0VUKSk7CiAJfQogCi0Jc3RhdGljIHZvaWQgZHVtcF9lcF9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwKQorCXN0YXRpYyB2b2lkIGR1bXBfZXBfc3RhdChjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkJCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXApCiAJewotCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9JTlRSKEVQX05PKGlteF9lcCkpKTsKKwkJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0lOVFIoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0ZVTEwpID8gIiBmdWxsIiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19FTVBUWSkgPyAiIGZlbXB0eSIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRVJST1IpID8gIiBmZXJyIiA6ICIiLApAQCAtMjc1LDE4ICsyODIsMjIgQEAKIAkJCSh0ZW1wICYgRVBJTlRSX0RFVlJFUSkgPyAiIGRldnJlcSIgOiAiIiwKIAkJCSh0ZW1wICYgRVBJTlRSX0VPVCkgPyAiIGVvdCIgOiAiIik7CiAKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfU1RBVD1bJXMlcyBiY291bnQ9JWRdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfU1RBVD1bJXMlcyBiY291bnQ9JWRdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEVQU1RBVF9TSVApID8gIiBzaXAiIDogIiIsCiAJCQkodGVtcCAmIEVQU1RBVF9TVEFMTCkgPyAiIHN0YWxsIiA6ICIiLAogCQkJKHRlbXAgJiBFUFNUQVRfQkNPVU5UKSA+PiAxNik7CiAKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZSArIFVTQl9FUF9GU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfZXAtPmlteF91c2ItPmJhc2UKKwkJCQkJCSsgVVNCX0VQX0ZTVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9GU1RBVD1bJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgRVBfTk8oaW14X2VwKSwKKwkJCSI8JXM+IEVQJWRfRlNUQVQ9WyVzJXMlcyVzJXMlcyVzXVxuIiwKKwkJCWxhYmVsLCBFUF9OTyhpbXhfZXApLAogCQkJKHRlbXAgJiBGU1RBVF9FUlIpID8gIiBmZXJyIiA6ICIiLAogCQkJKHRlbXAgJiBGU1RBVF9VRikgPyAiIGZ1bmRlciIgOiAiIiwKIAkJCSh0ZW1wICYgRlNUQVRfT0YpID8gIiBmb3ZlciIgOiAiIiwKQEAgLTI5NiwxOSArMzA3LDIzIEBACiAJCQkodGVtcCAmIEZTVEFUX0VNUFRZKSA/ICIgZmVtcHR5IiA6ICIiKTsKIAl9CiAKLQlzdGF0aWMgdm9pZCBkdW1wX3JlcShjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCisJc3RhdGljIHZvaWQgZHVtcF9yZXEoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCiAJewogCQlpbnQgaTsKIAogCQlpZiAoIXJlcSB8fCAhcmVxLT5idWYpIHsKLQkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IHJlcSBvciByZXEgYnVmIGlzIGZyZWVcbiIsIGxhYmVsKTsKKwkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCisJCQkJCSI8JXM+IHJlcSBvciByZXEgYnVmIGlzIGZyZWVcbiIsIGxhYmVsKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmICgoIUVQX05PKGlteF9lcCkgJiYgaW14X2VwLT5pbXhfdXNiLT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRSkKKwkJaWYgKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlCisJCQk9PSBFUDBfSU5fREFUQV9QSEFTRSkKIAkJCXx8IChFUF9OTyhpbXhfZXApICYmIEVQX0RJUihpbXhfZXApKSkgewogCi0JCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiByZXF1ZXN0IGR1bXAgPCIsIGxhYmVsKTsKKwkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCisJCQkJCQkiPCVzPiByZXF1ZXN0IGR1bXAgPCIsIGxhYmVsKTsKIAkJCWZvciAoaSA9IDA7IGkgPCByZXEtPmxlbmd0aDsgaSsrKQogCQkJCXByaW50aygiJTAyeC0iLCAqKCh1OCAqKXJlcS0+YnVmICsgaSkpOwogCQkJcHJpbnRrKCI+XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggMzE3YjQ4Zi4uZDIwOTM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTEzMzQsNyArMTMzNCw3IEBACiAKIAlxdWFsLmJMZW5ndGggPSBzaXplb2YgcXVhbDsKIAlxdWFsLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOwotCXF1YWwuYmNkVVNCID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKTsKKwlxdWFsLmJjZFVTQiA9IGNwdV90b19sZTE2ICgweDAyMDApOwogCiAJZGVzYyA9IGRldi0+ZGV2OwogCXF1YWwuYkRldmljZUNsYXNzID0gZGVzYy0+YkRldmljZUNsYXNzOwpAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAkJCXx8IGRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKIAkJZ290byBmYWlsOwogCWRldi0+ZGV2LT5iTnVtQ29uZmlndXJhdGlvbnMgPSAxOwotCWRldi0+ZGV2LT5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCWRldi0+ZGV2LT5iY2RVU0IgPSBjcHVfdG9fbGUxNiAoMHgwMjAwKTsKIAogCS8qIHRyaWdnZXJzIGdhZGdldGZzX2JpbmQoKTsgdGhlbiB3ZSBjYW4gZW51bWVyYXRlLiAqLwogCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IGQ1NTRiMDguLjZjZDNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC00MzIsOCArNDMyLDggQEAKIAlkZXZpY2VfYWRkKCZkZXYtPmdhZGdldC5kZXYpOwogCXJldHZhbCA9IGRyaXZlci0+YmluZCgmZGV2LT5nYWRnZXQpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKCIlczogYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLCBkZXYtPmdhZGdldC5uYW1lLAotCQkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJpbmQgdG8gZHJpdmVyICVzIC0tPiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGRldi0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CiAJCWRldmljZV9kZWwoJmRldi0+Z2FkZ2V0LmRldik7CiAKIAkJZGV2LT5kcml2ZXIgPSAwOwpAQCAtNDQ1LDggKzQ0NSw4IEBACiAJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KIAkgKiBOT1RFOiAgdGhpcyBzaG91bGRuJ3QgcG93ZXIgdXAgdW50aWwgbGF0ZXIuCiAJICovCi0JcHJpbnRrKCIlczogcmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCi0JICAgICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKKwkgICAgICAgZGV2LT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIAl1ZGNfZW5hYmxlKGRldik7CiAKQEAgLTU4MSw3ICs1ODEsOCBAQAogCQkJICogZGlzY2FyZCB0aGUgZXh0cmEgZGF0YS4KIAkJCSAqLwogCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQotCQkJCXByaW50aygiJXMgb3ZlcmZsb3cgJWRcbiIsIGVwLT5lcC5uYW1lLCBjb3VudCk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgb3ZlcmZsb3cgJWRcbiIsCisJCQkJICAgICAgIGVwLT5lcC5uYW1lLCBjb3VudCk7CiAJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOwogCQl9IGVsc2UgewogCQkJKmJ1ZisrID0gYnl0ZTsKQEAgLTgzMSw3ICs4MzIsOCBAQAogCQkJCQkJICAgICAgIHF1ZXVlKTsKIAogCQkJCWlmICghcmVxKSB7Ci0JCQkJCXByaW50aygiJXM6IE5VTEwgUkVRICVkXG4iLAorCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICAgICAiJXM6IE5VTEwgUkVRICVkXG4iLAogCQkJCQkgICAgICAgX19mdW5jX18sIGVwX2lkeCk7CiAJCQkJCWZsdXNoKGVwKTsKIAkJCQkJYnJlYWs7CkBAIC04NDQsNyArODQ2LDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIFRocm93IHBhY2tldCBhd2F5Li4gKi8KLQkJcHJpbnRrKCIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gZGVzY3JpcHRvcj8hP1xuIiwgX19mdW5jX18pOwogCQlmbHVzaChlcCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggMTJjNmQ4My4uOTQ5OGJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0xNDIsOCArMTQyLDggQEAKIAogI2luY2x1ZGUgIm5ldDIyODAuaCIKIAotI2RlZmluZSB2YWxpZF9iaXQJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBWQUxJRF9CSVQpCi0jZGVmaW5lIGRtYV9kb25lX2llCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKKyNkZWZpbmUgdmFsaWRfYml0CWNwdV90b19sZTMyICgxIDw8IFZBTElEX0JJVCkKKyNkZWZpbmUgZG1hX2RvbmVfaWUJY3B1X3RvX2xlMzIgKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNDI1LDcgKzQyNSw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KLQkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWFkZHIgPSBjcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CiAJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CiAJCXJlcS0+dGQgPSB0ZDsKIAl9CkBAIC03NzUsNyArNzc1LDcgQEAKIAlmaWxsX2RtYV9kZXNjIChlcCwgcmVxLCAxKTsKIAogCWlmICghdXNlX2RtYV9jaGFpbmluZykKLQkJcmVxLT50ZC0+ZG1hY291bnQgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCQlyZXEtPnRkLT5kbWFjb3VudCB8PSBjcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOwogCiAJc3RhcnRfcXVldWUgKGVwLCB0bXAsIHJlcS0+dGRfZG1hKTsKIH0KQEAgLTI0MDcsOSArMjQwNyw5IEBACiAKIAkJCWlmIChyZWFkbCAoJmUtPnJlZ3MtPmVwX3JzcCkKIAkJCQkJJiAoMSA8PCBTRVRfRU5EUE9JTlRfSEFMVCkpCi0JCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJCQkJc3RhdHVzID0gY3B1X3RvX2xlMzIgKDEpOwogCQkJZWxzZQotCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJCXN0YXR1cyA9IGNwdV90b19sZTMyICgwKTsKIAogCQkJLyogZG9uJ3QgYm90aGVyIHdpdGggYSByZXF1ZXN0IG9iamVjdCEgKi8KIAkJCXdyaXRlbCAoMCwgJmRldi0+ZXByZWdzIFswXS5lcF9pcnFlbmIpOwpAQCAtMjY2Nyw3ICsyNjY3LDcgQEAKIAkJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKIAkJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKIAkJCQlkbWFjb3VudCA9IHJlcS0+dGQtPmRtYWNvdW50OwotCQkJCWRtYWNvdW50ICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJCWRtYWNvdW50ICY9IGNwdV90b19sZTMyICgKIAkJCQkJCSgxIDw8IFZBTElEX0JJVCkKIAkJCQkJCXwgRE1BX0JZVEVfQ09VTlRfTUFTSyk7CiAJCQkJaWYgKGRtYWNvdW50ICYmIChkbWFjb3VudCAmIHZhbGlkX2JpdCkgPT0gMCkKQEAgLTI4ODEsNyArMjg4MSw3IEBACiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJdGQtPmRtYWNvdW50ID0gMDsJLyogbm90IFZBTElEICovCi0JCXRkLT5kbWFhZGRyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CisJCXRkLT5kbWFhZGRyID0gY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOwogCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOwogCQlkZXYtPmVwIFtpXS5kdW1teSA9IHRkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDVhMzAzNGYuLjI5NTAwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMjI1LDEyICsyMjUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKIAkuYkRldmljZVByb3RvY29sID0JMCwKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoUFJJTlRFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pLAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCiAJLmlTZXJpYWxOdW1iZXIgPQlTVFJJTkdfU0VSSUFMTlVNLApAQCAtMjk5LDIwICsyOTksMjAgQEAKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMikKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VwX291dF9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKQorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIGRldl9xdWFsaWZpZXIgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QUklOVEVSLAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxCiB9OwpAQCAtMTQwNiwxNiArMTQwNiwxNiBAQAogCQkJZ2FkZ2V0LT5uYW1lKTsKIAkJLyogdW5yZWNvZ25pemVkLCBidXQgc2FmZSB1bmxlc3MgYnVsayBpcyBSRUFMTFkgcXVpcmt5ICovCiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4RkZGRik7CisJCQljcHVfdG9fbGUxNigweEZGRkYpOwogCX0KIAlzbnByaW50ZihtYW51ZmFjdHVyZXIsIHNpemVvZihtYW51ZmFjdHVyZXIpLCAiJXMgJXMgd2l0aCAlcyIsCiAJCWluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJZ2FkZ2V0LT5uYW1lKTsKIAogCWRldmljZV9kZXNjLmlkVmVuZG9yID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pOworCQljcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pOwogCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSk7CisJCWNwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pOwogCiAJLyogc3VwcG9ydCBvcHRpb25hbCB2ZW5kb3IvZGlzdHJvIGN1c3RvbWl6YXRpb24gKi8KIAlpZiAoaWRWZW5kb3IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDk5MGY0MGYuLjhjYzY3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMjc4LDcgKzI3OSw3IEBACiAJCWdvdG8gZXJyX3F1ZXVlczsKIAllcHMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlcHN0YXRlIiwgMDQwMCwgcm9vdCwgdWRjLAogCQkJJmVwc19kYmdfZm9wcyk7Ci0JaWYgKCFxdWV1ZXMpCisJaWYgKCFlcHMpCiAJCWdvdG8gZXJyX2VwczsKIAogCXVkYy0+ZGVidWdmc19yb290ID0gcm9vdDsKQEAgLTc0NywxMyArNzQ4LDEzIEBACiB9CiAKIC8qKgotICogZXBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgaW4gcmVxdWVzdAorICogZXBfZW5kX291dF9yZXEgLSBFbmRzIGVuZHBvaW50IE9VVCByZXF1ZXN0CiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50CiAgKiBAcmVxOiBweGEgcmVxdWVzdAogICoKICAqIENvbnRleHQ6IGVwLT5sb2NrIGhlbGQKICAqCi0gKiBFbmRzIGVuZHBvaW50IGluIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCisgKiBFbmRzIGVuZHBvaW50IE9VVCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgogICovCiBzdGF0aWMgdm9pZCBlcF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCiB7CkBAIC03NjIsMTMgKzc2MywxMyBAQAogfQogCiAvKioKLSAqIGVwMF9lbmRfb3V0X3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBpbiByZXF1ZXN0IChlbmRzIGRhdGEgc3RhZ2UpCisgKiBlcDBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgY29udHJvbCBlbmRwb2ludCBpbiByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cworICogRW5kcyBjb250cm9sIGVuZHBvaW50IE9VVCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cwogICogY29udHJvbCBlbmRwb2ludCBpbnRvIGlkbGUgc3RhdGUKICAqLwogc3RhdGljIHZvaWQgZXAwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKQEAgLTc3OSwxMyArNzgwLDEzIEBACiB9CiAKIC8qKgotICogZXBfZW5kX2luX3JlcSAtIEVuZHMgZW5kcG9pbnQgb3V0IHJlcXVlc3QKKyAqIGVwX2VuZF9pbl9yZXEgLSBFbmRzIGVuZHBvaW50IElOIHJlcXVlc3QKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKgogICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAogICoKLSAqIEVuZHMgZW5kcG9pbnQgb3V0IHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCisgKiBFbmRzIGVuZHBvaW50IElOIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCiAgKi8KIHN0YXRpYyB2b2lkIGVwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewpAQCAtNzk0LDIwICs3OTUsMTggQEAKIH0KIAogLyoqCi0gKiBlcDBfZW5kX2luX3JlcSAtIEVuZHMgY29udHJvbCBlbmRwb2ludCBvdXQgcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQorICogZXAwX2VuZF9pbl9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgSU4gcmVxdWVzdCAoZW5kcyBkYXRhIHN0YWdlKQogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKICAqCiAgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCiAgKgotICogRW5kcyBjb250cm9sIGVuZHBvaW50IG91dCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cworICogRW5kcyBjb250cm9sIGVuZHBvaW50IElOIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCiAgKiBjb250cm9sIGVuZHBvaW50IGludG8gc3RhdHVzIHN0YXRlCiAgKi8KIHN0YXRpYyB2b2lkIGVwMF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gZXAtPmRldjsKLQotCXNldF9lcDBzdGF0ZSh1ZGMsIElOX1NUQVRVU19TVEFHRSk7CisJc2V0X2VwMHN0YXRlKGVwLT5kZXYsIElOX1NUQVRVU19TVEFHRSk7CiAJZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKIH0KIApAQCAtMTE2Nyw3ICsxMTY2LDcgQEAKIAkJCQllcF9lbmRfaW5fcmVxKGVwLCByZXEpOwogCQkJfSBlbHNlIHsKIAkJCQllcF9lcnIoZXAsICJnb3QgYSByZXF1ZXN0IG9mICVkIGJ5dGVzIHdoaWxlIgotCQkJCQkiaW4gc3RhdGUgV0FUSV9BQ0tfU0VUX0NPTkZfSU5URVJGXG4iLAorCQkJCQkiaW4gc3RhdGUgV0FJVF9BQ0tfU0VUX0NPTkZfSU5URVJGXG4iLAogCQkJCQlsZW5ndGgpOwogCQkJCWVwX2RlbF9yZXF1ZXN0KGVwLCByZXEpOwogCQkJCXJjID0gLUVMMkhMVDsKQEAgLTEyMTMsMzAgKzEyMTIsMjYgQEAKIAlzdHJ1Y3QgdWRjX3VzYl9lcAkqdWRjX3VzYl9lcDsKIAlzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QJKnJlcTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlpbnQJCQlyYzsKKwlpbnQJCQlyYyA9IC1FSU5WQUw7CiAKIAlpZiAoIV9lcCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByYzsKIAl1ZGNfdXNiX2VwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHVkY191c2JfZXAsIHVzYl9lcCk7CiAJZXAgPSB1ZGNfdXNiX2VwLT5weGFfZXA7CiAJaWYgKCFlcCB8fCBpc19lcDAoZXApKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewotCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkgeworCQkJcmVxX2RvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQkJcmMgPSAwOwogCQkJYnJlYWs7CisJCX0KIAl9CiAKLQlyYyA9IC1FSU5WQUw7Ci0JaWYgKCZyZXEtPnJlcSAhPSBfcmVxKQotCQlnb3RvIG91dDsKLQotCXJjID0gMDsKLQlyZXFfZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7Ci1vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDcxLDYgKzE0NjYsMzIgQEAKIAkuZmlmb19mbHVzaAk9IHB4YV9lcF9maWZvX2ZsdXNoLAogfTsKIAorLyoqCisgKiBkcGx1c19wdWxsdXAgLSBDb25uZWN0IG9yIGRpc2Nvbm5lY3QgcHVsbHVwIHJlc2lzdG9yIHRvIEQrIHBpbgorICogQHVkYzogdWRjIGRldmljZQorICogQG9uOiAwIGlmIGRpc2Nvbm5lY3QgcHVsbHVwIHJlc2lzdG9yLCAxIG90aGVyd2lzZQorICogQ29udGV4dDogYW55CisgKgorICogSGFuZGxlIEQrIHB1bGx1cCByZXNpc3RvciwgbWFrZSB0aGUgZGV2aWNlIHZpc2libGUgdG8gdGhlIHVzYiBidXMsIGFuZAorICogZGVjbGFyZSBpdCBhcyBhIGZ1bGwgc3BlZWQgdXNiIGRldmljZQorICovCitzdGF0aWMgdm9pZCBkcGx1c19wdWxsdXAoc3RydWN0IHB4YV91ZGMgKnVkYywgaW50IG9uKQoreworCWlmIChvbikgeworCQlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXAsCisJCQkJICAgICAgICF1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwX2ludmVydGVkKTsKKwkJaWYgKHVkYy0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOworCX0gZWxzZSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXApKQorCQkJZ3Bpb19zZXRfdmFsdWUodWRjLT5tYWNoLT5ncGlvX3B1bGx1cCwKKwkJCQkgICAgICAgdWRjLT5tYWNoLT5ncGlvX3B1bGx1cF9pbnZlcnRlZCk7CisJCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQorCQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUKTsKKwl9CisJdWRjLT5wdWxsdXBfb24gPSBvbjsKK30KIAogLyoqCiAgKiBweGFfdWRjX2dldF9mcmFtZSAtIFJldHVybnMgdXNiIGZyYW1lIG51bWJlcgpAQCAtMTUwMCwyMSArMTUyMSwxNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKTsKK3N0YXRpYyB2b2lkIHVkY19kaXNhYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworCisvKioKKyAqIHNob3VsZF9lbmFibGVfdWRjIC0gVGVsbHMgaWYgVURDIHNob3VsZCBiZSBlbmFibGVkCisgKiBAdWRjOiB1ZGMgZGV2aWNlCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBUaGUgVURDIHNob3VsZCBiZSBlbmFibGVkIGlmIDoKKworICogIC0gdGhlIHB1bGx1cCByZXNpc3RvciBpcyBjb25uZWN0ZWQKKyAqICAtIGFuZCBhIGdhZGdldCBkcml2ZXIgaXMgYm91bmQKKyAqICAtIGFuZCB2YnVzIGlzIHNlbnNlZCAob3Igbm8gdmJ1cyBzZW5zZSBpcyBhdmFpbGFibGUpCisgKgorICogUmV0dXJucyAxIGlmIFVEQyBzaG91bGQgYmUgZW5hYmxlZCwgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBzaG91bGRfZW5hYmxlX3VkYyhzdHJ1Y3QgcHhhX3VkYyAqdWRjKQoreworCWludCBwdXRfb247CisKKwlwdXRfb24gPSAoKHVkYy0+cHVsbHVwX29uKSAmJiAodWRjLT5kcml2ZXIpKTsKKwlwdXRfb24gJj0gKCh1ZGMtPnZidXNfc2Vuc2VkKSB8fCAoIXVkYy0+dHJhbnNjZWl2ZXIpKTsKKwlyZXR1cm4gcHV0X29uOworfQorCisvKioKKyAqIHNob3VsZF9kaXNhYmxlX3VkYyAtIFRlbGxzIGlmIFVEQyBzaG91bGQgYmUgZGlzYWJsZWQKKyAqIEB1ZGM6IHVkYyBkZXZpY2UKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIFRoZSBVREMgc2hvdWxkIGJlIGRpc2FibGVkIGlmIDoKKyAqICAtIHRoZSBwdWxsdXAgcmVzaXN0b3IgaXMgbm90IGNvbm5lY3RlZAorICogIC0gb3Igbm8gZ2FkZ2V0IGRyaXZlciBpcyBib3VuZAorICogIC0gb3Igbm8gdmJ1cyBpcyBzZW5zZWQgKHdoZW4gdmJ1cyBzZXNpbmcgaXMgYXZhaWxhYmxlKQorICoKKyAqIFJldHVybnMgMSBpZiBVREMgc2hvdWxkIGJlIGRpc2FibGVkCisgKi8KK3N0YXRpYyBpbnQgc2hvdWxkX2Rpc2FibGVfdWRjKHN0cnVjdCBweGFfdWRjICp1ZGMpCit7CisJaW50IHB1dF9vZmY7CisKKwlwdXRfb2ZmID0gKCghdWRjLT5wdWxsdXBfb24pIHx8ICghdWRjLT5kcml2ZXIpKTsKKwlwdXRfb2ZmIHw9ICgoIXVkYy0+dmJ1c19zZW5zZWQpICYmICh1ZGMtPnRyYW5zY2VpdmVyKSk7CisJcmV0dXJuIHB1dF9vZmY7Cit9CisKKy8qKgorICogcHhhX3VkY19wdWxsdXAgLSBPZmZlciBtYW51YWwgRCsgcHVsbHVwIGNvbnRyb2wKKyAqIEBfZ2FkZ2V0OiB1c2IgZ2FkZ2V0IHVzaW5nIHRoZSBjb250cm9sCisgKiBAaXNfYWN0aXZlOiAwIGlmIGRpc2Nvbm5lY3QsIGVsc2UgY29ubmVjdCBEKyBwdWxsdXAgcmVzaXN0b3IKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldHVybnMgMCBpZiBPSywgLUVPUE5PVFNVUFAgaWYgdWRjIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBEKyBwdWxsdXAKKyAqLworc3RhdGljIGludCBweGFfdWRjX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gdG9fZ2FkZ2V0X3VkYyhfZ2FkZ2V0KTsKKworCWlmICghZ3Bpb19pc192YWxpZCh1ZGMtPm1hY2gtPmdwaW9fcHVsbHVwKSAmJiAhdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZHBsdXNfcHVsbHVwKHVkYywgaXNfYWN0aXZlKTsKKworCWlmIChzaG91bGRfZW5hYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZW5hYmxlKHVkYyk7CisJaWYgKHNob3VsZF9kaXNhYmxlX3VkYyh1ZGMpKQorCQl1ZGNfZGlzYWJsZSh1ZGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpOworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YV91ZGMgKnVkYyk7CisKKy8qKgorICogcHhhX3VkY192YnVzX3Nlc3Npb24gLSBDYWxsZWQgYnkgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgdG8gZW5hYmxlL2Rpc2FibGUgdWRjCisgKiBAX2dhZGdldDogdXNiIGdhZGdldAorICogQGlzX2FjdGl2ZTogMCBpZiBzaG91bGQgZGlzYWJsZSB0aGUgdWRjLCAxIGlmIHNob3VsZCBlbmFibGUKKyAqCisgKiBFbmFibGVzIHRoZSB1ZGMsIGFuZCBvcHRpb25uYWx5IGFjdGl2YXRlcyBEKyBwdWxsdXAgcmVzaXN0b3IuIE9yIGRpc2FibGVzIHRoZQorICogdWRjLCBhbmQgZGVhY3RpdmF0ZXMgRCsgcHVsbHVwIHJlc2lzdG9yLgorICoKKyAqIFJldHVybnMgMAorICovCitzdGF0aWMgaW50IHB4YV91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBweGFfdWRjICp1ZGMgPSB0b19nYWRnZXRfdWRjKF9nYWRnZXQpOworCisJdWRjLT52YnVzX3NlbnNlZCA9IGlzX2FjdGl2ZTsKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOworCWlmIChzaG91bGRfZGlzYWJsZV91ZGModWRjKSkKKwkJdWRjX2Rpc2FibGUodWRjKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB4YV91ZGNfdmJ1c19kcmF3IC0gQ2FsbGVkIGJ5IGdhZGdldCBkcml2ZXIgYWZ0ZXIgU0VUX0NPTkZJR1VSQVRJT04gY29tcGxldGVkCisgKiBAX2dhZGdldDogdXNiIGdhZGdldAorICogQG1BOiBjdXJyZW50IGRyYXduCisgKgorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQ2FsbGVkIGFmdGVyIGEgY29uZmlndXJhdGlvbiB3YXMgY2hvc2VuIGJ5IGEgVVNCIGhvc3QsIHRvIGluZm9ybSBob3cgbXVjaAorICogY3VycmVudCBjYW4gYmUgZHJhd24gYnkgdGhlIGRldmljZSBmcm9tIFZCdXMgbGluZS4KKyAqCisgKiBSZXR1cm5zIDAgb3IgLUVPUE5PVFNVUFAgaWYgbm8gdHJhbnNjZWl2ZXIgaXMgaGFuZGxpbmcgdGhlIHVkYworICovCitzdGF0aWMgaW50IHB4YV91ZGNfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3QgcHhhX3VkYyAqdWRjOworCisJdWRjID0gdG9fZ2FkZ2V0X3VkYyhfZ2FkZ2V0KTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJcmV0dXJuIG90Z19zZXRfcG93ZXIodWRjLT50cmFuc2NlaXZlciwgbUEpOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBweGFfdWRjX29wcyA9IHsKIAkuZ2V0X2ZyYW1lCT0gcHhhX3VkY19nZXRfZnJhbWUsCiAJLndha2V1cAkJPSBweGFfdWRjX3dha2V1cCwKLQkvKiBjdXJyZW50IHZlcnNpb25zIG11c3QgYWx3YXlzIGJlIHNlbGYtcG93ZXJlZCAqLworCS5wdWxsdXAJCT0gcHhhX3VkY19wdWxsdXAsCisJLnZidXNfc2Vzc2lvbgk9IHB4YV91ZGNfdmJ1c19zZXNzaW9uLAorCS52YnVzX2RyYXcJPSBweGFfdWRjX3ZidXNfZHJhdywKIH07CiAKIC8qKgogICogdWRjX2Rpc2FibGUgLSBkaXNhYmxlIHVkYyBkZXZpY2UgY29udHJvbGxlcgogICogQHVkYzogdWRjIGRldmljZQorICogQ29udGV4dDogYW55CiAgKgogICogRGlzYWJsZXMgdGhlIHVkYyBkZXZpY2UgOiBkaXNhYmxlcyBjbG9ja3MsIHVkYyBpbnRlcnJ1cHRzLCBjb250cm9sIGVuZHBvaW50CiAgKiBpbnRlcnJ1cHRzLgogICovCiBzdGF0aWMgdm9pZCB1ZGNfZGlzYWJsZShzdHJ1Y3QgcHhhX3VkYyAqdWRjKQogeworCWlmICghdWRjLT5lbmFibGVkKQorCQlyZXR1cm47CisKIAl1ZGNfd3JpdGVsKHVkYywgVURDSUNSMCwgMCk7CiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjEsIDApOwogCkBAIC0xNTIzLDggKzE2NjgsOCBAQAogCiAJZXAwX2lkbGUodWRjKTsKIAl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwotCWlmICh1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQotCQl1ZGMtPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworCisJdWRjLT5lbmFibGVkID0gMDsKIH0KIAogLyoqCkBAIC0xNTU1LDEwICsxNzAwLDkgQEAKIAl9CiAKIAkvKiBVU0IgZW5kcG9pbnRzIGluaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfVVNCX0VORFBPSU5UUzsgaSsrKQotCQlpZiAoaSAhPSAwKQotCQkJbGlzdF9hZGRfdGFpbCgmZGV2LT51ZGNfdXNiX2VwW2ldLnVzYl9lcC5lcF9saXN0LAotCQkJCQkmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJZm9yIChpID0gMTsgaSA8IE5SX1VTQl9FTkRQT0lOVFM7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmZGV2LT51ZGNfdXNiX2VwW2ldLnVzYl9lcC5lcF9saXN0LAorCQkJCSZkZXYtPmdhZGdldC5lcF9saXN0KTsKIH0KIAogLyoqCkBAIC0xNTcwLDYgKzE3MTQsOSBAQAogICovCiBzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBweGFfdWRjICp1ZGMpCiB7CisJaWYgKHVkYy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJdWRjX3dyaXRlbCh1ZGMsIFVEQ0lDUjAsIDApOwogCXVkY193cml0ZWwodWRjLCBVRENJQ1IxLCAwKTsKIAl1ZGNfY2xlYXJfbWFza19VRENDUih1ZGMsIFVEQ0NSX1VERSk7CkBAIC0xNTk4LDkgKzE3NDUsNyBAQAogCS8qIGVuYWJsZSBlcDAgaXJxcyAqLwogCXBpb19pcnFfZW5hYmxlKCZ1ZGMtPnB4YV9lcFswXSk7CiAKLQlkZXZfaW5mbyh1ZGMtPmRldiwgIlVEQyBjb25uZWN0aW5nXG4iKTsKLQlpZiAodWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKLQkJdWRjLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9DT05ORUNUKTsKKwl1ZGMtPmVuYWJsZWQgPSAxOwogfQogCiAvKioKQEAgLTE2MTIsNiArMTc1Nyw5IEBACiAgKiB1c2IgdHJhZmZpYyBmb2xsb3dzIHVudGlsIGEgZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIFRoZW4gYSBob3N0IG1heSBjb25uZWN0CiAgKiBhZ2Fpbiwgb3IgdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KICAqCisgKiBOb3RlIHRoYXQgdGhlIHVkYyBpcyBub3QgYXV0b21hdGljYWxseSBlbmFibGVkLiBDaGVjayBmdW5jdGlvbgorICogc2hvdWxkX2VuYWJsZV91ZGMoKS4KKyAqCiAgKiBSZXR1cm5zIDAgaWYgbm8gZXJyb3IsIC1FSU5WQUwsIC1FTk9ERVYsIC1FQlVTWSBvdGhlcndpc2UKICAqLwogaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQpAQCAtMTYzMCw2ICsxNzc4LDcgQEAKIAkvKiBmaXJzdCBob29rIHVwIHRoZSBkcml2ZXIgLi4uICovCiAJdWRjLT5kcml2ZXIgPSBkcml2ZXI7CiAJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwlkcGx1c19wdWxsdXAodWRjLCAxKTsKIAogCXJldHZhbCA9IGRldmljZV9hZGQoJnVkYy0+Z2FkZ2V0LmRldik7CiAJaWYgKHJldHZhbCkgewpAQCAtMTY0NSw5ICsxNzk0LDIxIEBACiAJZGV2X2RiZyh1ZGMtPmRldiwgInJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAogCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKIAotCXVkY19lbmFibGUodWRjKTsKKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlyZXR2YWwgPSBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgJnVkYy0+Z2FkZ2V0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOworCQkJZ290byB0cmFuc2NlaXZlcl9mYWlsOworCQl9CisJfQorCisJaWYgKHNob3VsZF9lbmFibGVfdWRjKHVkYykpCisJCXVkY19lbmFibGUodWRjKTsKIAlyZXR1cm4gMDsKIAordHJhbnNjZWl2ZXJfZmFpbDoKKwlpZiAoZHJpdmVyLT51bmJpbmQpCisJCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CiBiaW5kX2ZhaWw6CiAJZGV2aWNlX2RlbCgmdWRjLT5nYWRnZXQuZGV2KTsKIGFkZF9mYWlsOgpAQCAtMTY5OSwxNCArMTg2MCwxNyBAQAogCiAJc3RvcF9hY3Rpdml0eSh1ZGMsIGRyaXZlcik7CiAJdWRjX2Rpc2FibGUodWRjKTsKKwlkcGx1c19wdWxsdXAodWRjLCAwKTsKIAogCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CiAJdWRjLT5kcml2ZXIgPSBOVUxMOwogCiAJZGV2aWNlX2RlbCgmdWRjLT5nYWRnZXQuZGV2KTsKLQogCWRldl9pbmZvKHVkYy0+ZGV2LCAidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKIAkJIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCisJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpCisJCXJldHVybiBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTgyMywxNCArMTk4NywxNCBAQAogCXN0cnVjdCBweGEyN3hfcmVxdWVzdAkqcmVxID0gTlVMTDsKIAlpbnQJCQljb21wbGV0ZWQgPSAwOwogCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QsIHF1ZXVlKTsKKwogCXVkY2NzcjAgPSB1ZGNfZXBfcmVhZGwoZXAsIFVEQ0NTUik7CiAJZXBfZGJnKGVwLCAic3RhdGU9JXMsIHJlcT0lcCwgdWRjY3NyMD0weCUwM3gsIHVkY2Jjcj0lZCwgaXJxX21zaz0leFxuIiwKIAkJRVAwX1NUTkFNRSh1ZGMpLCByZXEsIHVkY2NzcjAsIHVkY19lcF9yZWFkbChlcCwgVURDQkNSKSwKIAkJKGZpZm9faXJxIDw8IDEgfCBvcGNfaXJxKSk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCi0JCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcXVldWUpOwotCiAJaWYgKHVkY2NzcjAgJiBVRENDU1IwX1NTVCkgewogCQllcF9kYmcoZXAsICJjbGVhcmluZyBzdGFsbCBzdGF0dXNcbiIpOwogCQludWtlKGVwLCAtRVBJUEUpOwpAQCAtMjIxMiw3ICsyMzc2LDcgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CiAJc3RydWN0IHB4YV91ZGMgKnVkYyA9ICZtZW1vcnk7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMCwgZ3BpbzsKIAogCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVncykKQEAgLTIyMjMsNiArMjM4NywyMCBAQAogCiAJdWRjLT5kZXYgPSAmcGRldi0+ZGV2OwogCXVkYy0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVkYy0+dHJhbnNjZWl2ZXIgPSBvdGdfZ2V0X3RyYW5zY2VpdmVyKCk7CisKKwlncGlvID0gdWRjLT5tYWNoLT5ncGlvX3B1bGx1cDsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgeworCQlyZXR2YWwgPSBncGlvX3JlcXVlc3QoZ3BpbywgIlVTQiBEKyBwdWxsdXAiKTsKKwkJaWYgKHJldHZhbCA9PSAwKQorCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sCisJCQkJICAgICAgIHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXBfaW52ZXJ0ZWQpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IHJlcXVlc3QgZ3BpbyAlZCA6ICVkXG4iLAorCQkJZ3BpbywgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAl1ZGMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUih1ZGMtPmNsaykpIHsKQEAgLTIyNDAsNiArMjQxOCw3IEBACiAJZGV2aWNlX2luaXRpYWxpemUoJnVkYy0+Z2FkZ2V0LmRldik7CiAJdWRjLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJdWRjLT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gTlVMTDsKKwl1ZGMtPnZidXNfc2Vuc2VkID0gMDsKIAogCXRoZV9jb250cm9sbGVyID0gdWRjOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHVkYyk7CkBAIC0yMjczLDE0ICsyNDUyLDIxIEBACiBzdGF0aWMgaW50IF9fZXhpdCBweGFfdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBweGFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlpbnQgZ3BpbyA9IHVkYy0+bWFjaC0+Z3Bpb19wdWxsdXA7CiAKIAl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHVkYy0+ZHJpdmVyKTsKIAlmcmVlX2lycSh1ZGMtPmlycSwgdWRjKTsKIAlweGFfY2xlYW51cF9kZWJ1Z2ZzKHVkYyk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpCisJCWdwaW9fZnJlZShncGlvKTsKIAorCW90Z19wdXRfdHJhbnNjZWl2ZXIodWRjLT50cmFuc2NlaXZlcik7CisKKwl1ZGMtPnRyYW5zY2VpdmVyID0gTlVMTDsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJY2xrX3B1dCh1ZGMtPmNsayk7CisJaW91bm1hcCh1ZGMtPnJlZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzE5LDYgKzI1MDUsOCBAQAogCX0KIAogCXVkY19kaXNhYmxlKHVkYyk7CisJdWRjLT5wdWxsdXBfcmVzdW1lID0gdWRjLT5wdWxsdXBfb247CisJZHBsdXNfcHVsbHVwKHVkYywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNDYsNyArMjUzNCw5IEBACiAJCQkJZXAtPnVkY2Nzcl92YWx1ZSwgZXAtPnVkY2NyX3ZhbHVlKTsKIAl9CiAKLQl1ZGNfZW5hYmxlKHVkYyk7CisJZHBsdXNfcHVsbHVwKHVkYywgdWRjLT5wdWxsdXBfcmVzdW1lKTsKKwlpZiAoc2hvdWxkX2VuYWJsZV91ZGModWRjKSkKKwkJdWRjX2VuYWJsZSh1ZGMpOwogCS8qCiAJICogV2UgZG8gbm90IGhhbmRsZSBPVEcgeWV0LgogCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaAppbmRleCAxZDFiNzkzLi5kYjU4MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAKIC8qCiAgKiBSZWdpc3RlciBkZWZpbml0aW9ucwpAQCAtNDIxLDEwICs0MjIsMTQgQEAKICAqIEBkcml2ZXI6IGJvdW5kIGdhZGdldCAoemVybywgZ19ldGhlciwgZ19maWxlX3N0b3JhZ2UsIC4uLikKICAqIEBkZXY6IGRldmljZQogICogQG1hY2g6IG1hY2hpbmUgaW5mbywgdXNlZCB0byBhY3RpdmF0ZSBzcGVjaWZpYyBHUElPCisgKiBAdHJhbnNjZWl2ZXI6IGV4dGVybmFsIHRyYW5zY2VpdmVyIHRvIGhhbmRsZSB2YnVzIHNlbnNlIGFuZCBEKyBwdWxsdXAKICAqIEBlcDBzdGF0ZTogY29udHJvbCBlbmRwb2ludCBzdGF0ZSBtYWNoaW5lIHN0YXRlCiAgKiBAc3RhdHM6IHN0YXRpc3RpY3Mgb24gdWRjIHVzYWdlCiAgKiBAdWRjX3VzYl9lcDogYXJyYXkgb2YgdXNiIGVuZHBvaW50cyBvZmZlcmVkIGJ5IHRoZSBnYWRnZXQKICAqIEBweGFfZXA6IGFycmF5IG9mIHB4YSBhdmFpbGFibGUgZW5kcG9pbnRzCisgKiBAZW5hYmxlZDogVURDIHdhcyBlbmFibGVkIGJ5IGEgcHJldmlvdXMgdWRjX2VuYWJsZSgpCisgKiBAcHVsbHVwX29uOiBpZiBwdWxsdXAgcmVzaXN0b3IgY29ubmVjdGVkIHRvIEQrIHBpbgorICogQHB1bGx1cF9yZXN1bWU6IGlmIHB1bGx1cCByZXNpc3RvciBzaG91bGQgYmUgY29ubmVjdGVkIHRvIEQrIHBpbiBvbiByZXN1bWUKICAqIEBjb25maWc6IFVEQyBhY3RpdmUgY29uZmlndXJhdGlvbgogICogQGxhc3RfaW50ZXJmYWNlOiBVREMgaW50ZXJmYWNlIG9mIHRoZSBsYXN0IFNFVF9JTlRFUkZBQ0UgaG9zdCByZXF1ZXN0CiAgKiBAbGFzdF9hbHRlcm5hdGU6IFVEQyBhbHRzZXR0aW5nIG9mIHRoZSBsYXN0IFNFVF9JTlRFUkZBQ0UgaG9zdCByZXF1ZXN0CkBAIC00NDMsNiArNDQ4LDcgQEAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJCSpkcml2ZXI7CiAJc3RydWN0IGRldmljZQkJCQkqZGV2OwogCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2g7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkJCSp0cmFuc2NlaXZlcjsKIAogCWVudW0gZXAwX3N0YXRlCQkJCWVwMHN0YXRlOwogCXN0cnVjdCB1ZGNfc3RhdHMJCQlzdGF0czsKQEAgLTQ1MCw2ICs0NTYsMTAgQEAKIAlzdHJ1Y3QgdWRjX3VzYl9lcAkJCXVkY191c2JfZXBbTlJfVVNCX0VORFBPSU5UU107CiAJc3RydWN0IHB4YV9lcAkJCQlweGFfZXBbTlJfUFhBX0VORFBPSU5UU107CiAKKwl1bnNpZ25lZAkJCQllbmFibGVkOjE7CisJdW5zaWduZWQJCQkJcHVsbHVwX29uOjE7CisJdW5zaWduZWQJCQkJcHVsbHVwX3Jlc3VtZToxOworCXVuc2lnbmVkCQkJCXZidXNfc2Vuc2VkOjE7CiAJdW5zaWduZWQJCQkJY29uZmlnOjI7CiAJdW5zaWduZWQJCQkJbGFzdF9pbnRlcmZhY2U6MzsKIAl1bnNpZ25lZAkJCQlsYXN0X2FsdGVybmF0ZTozOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwppbmRleCA4YzI2ZjVlLi4yYjQ2NjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpAQCAtNjMsNyArNjMsNyBAQAogc3RhdGljIHJuZGlzX3BhcmFtcyBybmRpc19wZXJfZGV2X3BhcmFtcyBbUk5ESVNfTUFYX0NPTkZJR1NdOwogCiAvKiBEcml2ZXIgVmVyc2lvbiAqLwotc3RhdGljIGNvbnN0IF9fbGUzMiBybmRpc19kcml2ZXJfdmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworc3RhdGljIGNvbnN0IF9fbGUzMiBybmRpc19kcml2ZXJfdmVyc2lvbiA9IGNwdV90b19sZTMyICgxKTsKIAogLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwogc3RhdGljIHJuZGlzX3Jlc3BfdCAqcm5kaXNfYWRkX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJaW50CQkJaSwgY291bnQ7CiAJcm5kaXNfcXVlcnlfY21wbHRfdHlwZQkqcmVzcDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCSpzdGF0czsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkqc3RhdHM7CiAKIAlpZiAoIXIpIHJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CkBAIC0xOTAsMTMgKzE5MCwxMCBAQAogCiAJLyogcmVzcG9uc2UgZ29lcyBoZXJlLCByaWdodCBhZnRlciB0aGUgaGVhZGVyICovCiAJb3V0YnVmID0gKF9fbGUzMiAqKSAmcmVzcFsxXTsKLQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgxNik7CiAKIAluZXQgPSBybmRpc19wZXJfZGV2X3BhcmFtc1tjb25maWdOcl0uZGV2OwotCWlmIChuZXQtPmdldF9zdGF0cykKLQkJc3RhdHMgPSBuZXQtPmdldF9zdGF0cyhuZXQpOwotCWVsc2UKLQkJc3RhdHMgPSBOVUxMOworCXN0YXRzID0gZGV2X2dldF9zdGF0cyhuZXQpOwogCiAJc3dpdGNoIChPSUQpIHsKIApAQCAtMjIxLDcgKzIxOCw3IEBACiAJCSAqIHJlZGRpdGUgZXJnbyBxdWFlIHN1bnQgQ2Flc2FyaXMgQ2Flc2FyaQogCQkgKiBldCBxdWFlIHN1bnQgRGVpIERlbyEKIAkJICovCi0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTI1Niw3ICsyNTMsNyBAQAogCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX0xJTktfU1BFRURcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaWFfc3RhdGUKIAkJCQk9PSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCkKLQkJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCWVsc2UKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zcGVlZCk7CkBAIC0zMTcsNyArMzE0LDcgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFJORElTX01BWF9UT1RBTF9TSVpFKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKFJORElTX01BWF9UT1RBTF9TSVpFKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTMzMiw3ICszMjksNyBAQAogCiAJY2FzZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTToKIAkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1BIWVNJQ0FMX01FRElVTVxuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC0zNDIsNyArMzM5LDcgQEAKIAkgKi8KIAljYXNlIE9JRF9HRU5fTUFDX09QVElPTlM6CQkvKiBmcm9tIFdpbk1FICovCiAJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQUNfT1BUSU9OU1xuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKAogCQkJICBORElTX01BQ19PUFRJT05fUkVDRUlWRV9TRVJJQUxJWkVECiAJCQl8IE5ESVNfTUFDX09QVElPTl9GVUxMX0RVUExFWCk7CiAJCXJldHZhbCA9IDA7CkBAIC00MzEsNyArNDI4LDcgQEAKIAljYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKIAkJLyogTXVsdGljYXN0IGJhc2UgYWRkcmVzcyBvbmx5ICovCi0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgweEUwMDAwMDAwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgweEUwMDAwMDAwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTQzOSw3ICs0MzYsNyBAQAogCWNhc2UgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDEpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtNDYxLDE0ICs0NTgsMTQgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTlxuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlM6CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTU3MiwyNCArNTY5LDI0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfaW5pdF9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoCiAJCQlSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoNTIpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoNTIpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCi0JcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCXJlc3AtPk1ham9yVmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01BSk9SX1ZFUlNJT04pOwotCXJlc3AtPk1pbm9yVmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01JTk9SX1ZFUlNJT04pOwotCXJlc3AtPkRldmljZUZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfREZfQ09OTkVDVElPTkxFU1MpOwotCXJlc3AtPk1lZGl1bSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01FRElVTV84MDJfMyk7Ci0JcmVzcC0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwlyZXNwLT5NYWpvclZlcnNpb24gPSBjcHVfdG9fbGUzMiAoUk5ESVNfTUFKT1JfVkVSU0lPTik7CisJcmVzcC0+TWlub3JWZXJzaW9uID0gY3B1X3RvX2xlMzIgKFJORElTX01JTk9SX1ZFUlNJT04pOworCXJlc3AtPkRldmljZUZsYWdzID0gY3B1X3RvX2xlMzIgKFJORElTX0RGX0NPTk5FQ1RJT05MRVNTKTsKKwlyZXNwLT5NZWRpdW0gPSBjcHVfdG9fbGUzMiAoUk5ESVNfTUVESVVNXzgwMl8zKTsKKwlyZXNwLT5NYXhQYWNrZXRzUGVyVHJhbnNmZXIgPSBjcHVfdG9fbGUzMiAoMSk7CiAJcmVzcC0+TWF4VHJhbnNmZXJTaXplID0gY3B1X3RvX2xlMzIgKAogCQkgIHBhcmFtcy0+ZGV2LT5tdHUKIAkJKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpCiAJCSsgc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKQogCQkrIDIyKTsKLQlyZXNwLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQlyZXNwLT5BRkxpc3RPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQlyZXNwLT5BRkxpc3RTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPkFGTGlzdE9mZnNldCA9IGNwdV90b19sZTMyICgwKTsKKwlyZXNwLT5BRkxpc3RTaXplID0gY3B1X3RvX2xlMzIgKDApOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC02MTcsNyArNjE0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1FVRVJZX0NNUExUKTsKIAlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLwogCiAJaWYgKGdlbl9uZGlzX3F1ZXJ5X3Jlc3AgKGNvbmZpZ05yLCBsZTMyX3RvX2NwdSAoYnVmLT5PSUQpLApAQCAtNjI2LDEzICs2MjMsMTMgQEAKIAkJCWxlMzJfdG9fY3B1KGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpLAogCQkJcikpIHsKIAkJLyogT0lEIG5vdCBzdXBwb3J0ZWQgKi8KLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyICgKIAkJCQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCk7Ci0JCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChzaXplb2YgKnJlc3ApOwotCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKHNpemVvZiAqcmVzcCk7CisJCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDApOworCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgwKTsKIAl9IGVsc2UKLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC02NjUsMTQgKzY2MiwxNCBAQAogCXByX2RlYnVnKCJcbiIpOwogI2VuZGlmCiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMTYpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCiAJaWYgKGdlbl9uZGlzX3NldF9yZXNwIChjb25maWdOciwgbGUzMl90b19jcHUgKGJ1Zi0+T0lEKSwKIAkJCSgodTggKikgYnVmKSArIDggKyBCdWZPZmZzZXQsIEJ1Zkxlbmd0aCwgcikpCi0JCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKIAllbHNlCi0JCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNjg5LDExICs2ODYsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19yZXNldF9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7Ci0JcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCS8qIHJlc2VudCBpbmZvcm1hdGlvbiAqLwotCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IGNwdV90b19sZTMyICgxKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNzEzLDExICs3MTAsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZSAqKSByLT5idWY7CiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKAogCQkJUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMTYpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCi0JcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTc0MiwxMiArNzM5LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZ190eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoCiAJCQlSRU1PVEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMjApOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMjApOwogCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChzdGF0dXMpOwotCXJlc3AtPlN0YXR1c0J1ZmZlckxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCXJlc3AtPlN0YXR1c0J1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPlN0YXR1c0J1ZmZlckxlbmd0aCA9IGNwdV90b19sZTMyICgwKTsKKwlyZXNwLT5TdGF0dXNCdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMCk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTk2Myw5ICs5NjAsOSBAQAogCQlyZXR1cm47CiAJaGVhZGVyID0gKHZvaWQgKikgc2tiX3B1c2ggKHNrYiwgc2l6ZW9mICpoZWFkZXIpOwogCW1lbXNldCAoaGVhZGVyLCAwLCBzaXplb2YgKmhlYWRlcik7Ci0JaGVhZGVyLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRyk7CisJaGVhZGVyLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpOwogCWhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKLQloZWFkZXItPkRhdGFPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgzNik7CisJaGVhZGVyLT5EYXRhT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDM2KTsKIAloZWFkZXItPkRhdGFMZW5ndGggPSBjcHVfdG9fbGUzMihza2ItPmxlbiAtIHNpemVvZiAqaGVhZGVyKTsKIH0KIApAQCAtMTAyOSw3ICsxMDI2LDcgQEAKIAlfX2xlMzIJCSp0bXAgPSAodm9pZCAqKSBza2ItPmRhdGE7CiAKIAkvKiBNZXNzYWdlVHlwZSwgTWVzc2FnZUxlbmd0aCAqLwotCWlmIChfX2NvbnN0YW50X2NwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpCisJaWYgKGNwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpCiAJCQkhPSBnZXRfdW5hbGlnbmVkKHRtcCsrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdG1wKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggMzc4NzlhZi4uZjQ2YTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtODcsMTIgKzg3LDEyIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfREVWSUNFX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS8qIC5iRGV2aWNlQ2xhc3MgPSBmKHVzZV9hY20pICovCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCiAJLmJEZXZpY2VQcm90b2NvbCA9CTAsCiAJLyogLmJNYXhQYWNrZXRTaXplMCA9IGYoaGFyZHdhcmUpICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVORE9SX0lEKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoR1NfVkVORE9SX0lEKSwKIAkvKiAuaWRQcm9kdWN0ID0JZih1c2VfYWNtKSAqLwogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXByX3dhcm5pbmcoImdzX2JpbmQ6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCWdhZGdldC0+bmFtZSk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNIHwgMHgwMDk5KTsKIAl9CiAKIAlpZiAoZ2FkZ2V0X2lzX290ZyhjZGV2LT5nYWRnZXQpKSB7CkBAIC0yNTUsMTkgKzI1NSwxOSBAQAogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMjsKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CisJCQkJY3B1X3RvX2xlMTYoR1NfQ0RDX1BST0RVQ1RfSUQpOwogCX0gZWxzZSBpZiAodXNlX29iZXgpIHsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiQ0RDIE9CRVggY29uZmlnIjsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDM7CiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19DT01NOwogCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfT0JFWF9QUk9EVUNUX0lEKTsKKwkJCWNwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOwogCX0gZWxzZSB7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkdlbmVyaWMgU2VyaWFsIGNvbmZpZyI7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxOwogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19QUk9EVUNUX0lEKTsKKwkJCQljcHVfdG9fbGUxNihHU19QUk9EVUNUX0lEKTsKIAl9CiAJc3RyaW5nc19kZXZbU1RSSU5HX0RFU0NSSVBUSU9OX0lEWF0ucyA9IHNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCmluZGV4IDUzZDU5MjguLjBhNGQ5OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCkBAIC0xMDkyLDcgKzEwOTIsNyBAQAogCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7CiAJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKIAotCWNvZGluZy5kd0RURVJhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDk2MDApOworCWNvZGluZy5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMig5NjAwKTsKIAljb2RpbmcuYkNoYXJGb3JtYXQgPSA4OwogCWNvZGluZy5iUGFyaXR5VHlwZSA9IFVTQl9DRENfTk9fUEFSSVRZOwogCWNvZGluZy5iRGF0YUJpdHMgPSBVU0JfQ0RDXzFfU1RPUF9CSVRTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKaW5kZXggMzYxZDk2NS4uMmQ3NzI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCkBAIC0xMDIsMjIgKzEwMiwzMiBAQAogI2lmbmRlZglDT05GSUdfVVNCX1pFUk9fSE5QVEVTVAogI2RlZmluZSBEUklWRVJfVkVORE9SX05VTQkweDA1MjUJCS8qIE5ldENoaXAgKi8KICNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfTlVNCTB4YTRhMAkJLyogTGludXgtVVNCICJHYWRnZXQgWmVybyIgKi8KKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVTVU1FCTAKICNlbHNlCiAjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MWEwYQkJLyogT1RHIHRlc3QgZGV2aWNlIElEcyAqLwogI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhiYWRkCisjZGVmaW5lIERFRkFVTFRfQVVUT1JFU1VNRQk1CiAjZW5kaWYKIAorLyogSWYgdGhlIG9wdGlvbmFsICJhdXRvcmVzdW1lIiBtb2RlIGlzIGVuYWJsZWQsIGl0IHByb3ZpZGVzIGdvb2QKKyAqIGZ1bmN0aW9uYWwgY292ZXJhZ2UgZm9yIHRoZSAiVVNCQ1YiIHRlc3QgaGFybmVzcyBmcm9tIFVTQi1JRi4KKyAqIEl0J3MgYWx3YXlzIHNldCBpZiBPVEcgbW9kZSBpcyBlbmFibGVkLgorICovCit1bnNpZ25lZCBhdXRvcmVzdW1lID0gREVGQVVMVF9BVVRPUkVTVU1FOworbW9kdWxlX3BhcmFtKGF1dG9yZXN1bWUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhhdXRvcmVzdW1lLCAiemVybywgb3Igc2Vjb25kcyBiZWZvcmUgcmVtb3RlIHdha2V1cCIpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCiAKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTIsCiB9OwogCkBAIC0yMTIsNiArMjIyLDQ3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdAlhdXRvcmVzdW1lX3RpbWVyOworCitzdGF0aWMgdm9pZCB6ZXJvX2F1dG9yZXN1bWUodW5zaWduZWQgbG9uZyBfYykKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSAodm9pZCAqKV9jOworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZyA9IGNkZXYtPmdhZGdldDsKKworCS8qIHVuY29uZmlndXJlZCBkZXZpY2VzIGNhbid0IGlzc3VlIHdha2V1cHMgKi8KKwlpZiAoIWNkZXYtPmNvbmZpZykKKwkJcmV0dXJuOworCisJLyogTm9ybWFsbHkgdGhlIGhvc3Qgd291bGQgYmUgd29rZW4gdXAgZm9yIHNvbWV0aGluZworCSAqIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBqdXN0IGEgdGltZXIgZmlyaW5nOyBsaWtlbHkKKwkgKiBiZWNhdXNlIG9mIHNvbWUgZGlyZWN0IHVzZXIgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZy0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJaW50IHN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwKGcpOworCQlJTkZPKGNkZXYsICIlcyAtLT4gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgemVyb19zdXNwZW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlpZiAoY2Rldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuOworCisJaWYgKGF1dG9yZXN1bWUpIHsKKwkJbW9kX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyLCBqaWZmaWVzICsgKEhaICogYXV0b3Jlc3VtZSkpOworCQlEQkcoY2RldiwgInN1c3BlbmQsIHdha2V1cCBpbiAlZCBzZWNvbmRzXG4iLCBhdXRvcmVzdW1lKTsKKwl9IGVsc2UKKwkJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCB6ZXJvX3Jlc3VtZShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOworCWRlbF90aW1lcigmYXV0b3Jlc3VtZV90aW1lcik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyBpbnQgX19pbml0IHplcm9fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CiAJaW50CQkJZ2NudW07CkBAIC0yMzksMTcgKzI5MCwxOSBAQAogCXN0cmluZ3NfZGV2W1NUUklOR19TRVJJQUxfSURYXS5pZCA9IGlkOwogCWRldmljZV9kZXNjLmlTZXJpYWxOdW1iZXIgPSBpZDsKIAorCXNldHVwX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyLCB6ZXJvX2F1dG9yZXN1bWUsICh1bnNpZ25lZCBsb25nKSBjZGV2KTsKKwogCS8qIFJlZ2lzdGVyIHByaW1hcnksIHRoZW4gc2Vjb25kYXJ5IGNvbmZpZ3VyYXRpb24uICBOb3RlIHRoYXQKIAkgKiBTSDMgb25seSBhbGxvd3Mgb25lIGNvbmZpZy4uLgogCSAqLwogCWlmIChsb29wZGVmYXVsdCkgewotCQlsb29wYmFja19hZGQoY2Rldik7CisJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJc291cmNlc2lua19hZGQoY2Rldik7CisJCQlzb3VyY2VzaW5rX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCX0gZWxzZSB7Ci0JCXNvdXJjZXNpbmtfYWRkKGNkZXYpOworCQlzb3VyY2VzaW5rX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJbG9vcGJhY2tfYWRkKGNkZXYpOworCQkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJfQogCiAJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CkBAIC0yNjUsNyArMzE4LDcgQEAKIAkJICovCiAJCXByX3dhcm5pbmcoIiVzOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCiAJCQlsb25nbmFtZSwgZ2FkZ2V0LT5uYW1lKTsKLQkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDk5OTkpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNigweDk5OTkpOwogCX0KIAogCkBAIC0yNzgsMTEgKzMzMSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHplcm9fdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlkZWxfdGltZXJfc3luYygmYXV0b3Jlc3VtZV90aW1lcik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgemVyb19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInplcm8iLAogCS5kZXYJCT0gJmRldmljZV9kZXNjLAogCS5zdHJpbmdzCT0gZGV2X3N0cmluZ3MsCiAJLmJpbmQJCT0gemVyb19iaW5kLAorCS51bmJpbmQJCT0gemVyb191bmJpbmQsCisJLnN1c3BlbmQJPSB6ZXJvX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB6ZXJvX3Jlc3VtZSwKIH07CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIEJyb3duZWxsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKaW5kZXggMmM2M2JmYi4uODQ1NDc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtMjQsMTAgKzI0LDcgQEAKIAkgIFRoZSBFbmhhbmNlZCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChFSENJKSBpcyBzdGFuZGFyZCBmb3IgVVNCIDIuMAogCSAgImhpZ2ggc3BlZWQiICg0ODAgTWJpdC9zZWMsIDYwIE1ieXRlL3NlYykgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLgogCSAgSWYgeW91ciBVU0IgaG9zdCBjb250cm9sbGVyIHN1cHBvcnRzIFVTQiAyLjAsIHlvdSB3aWxsIGxpa2VseSB3YW50IHRvCi0JICBjb25maWd1cmUgdGhpcyBIb3N0IENvbnRyb2xsZXIgRHJpdmVyLiAgQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCAKLQkgIHRoZSBwcmltYXJ5IGltcGxlbWVudGF0aW9uIG9mIEVIQ0kgaXMgYSBjaGlwIGZyb20gTkVDLCB3aWRlbHkgYXZhaWxhYmxlCi0JICBpbiBhZGQtb24gUENJIGNhcmRzLCBidXQgaW1wbGVtZW50YXRpb25zIGFyZSBpbiB0aGUgd29ya3MgZnJvbSBvdGhlciAKLQkgIHZlbmRvcnMgaW5jbHVkaW5nIEludGVsIGFuZCBQaGlsaXBzLiAgTW90aGVyYm9hcmQgc3VwcG9ydCBpcyBhcHBlYXJpbmcuCisJICBjb25maWd1cmUgdGhpcyBIb3N0IENvbnRyb2xsZXIgRHJpdmVyLgogCiAJICBFSENJIGNvbnRyb2xsZXJzIGFyZSBwYWNrYWdlZCB3aXRoICJjb21wYW5pb24iIGhvc3QgY29udHJvbGxlcnMgKE9IQ0kKIAkgIG9yIFVIQ0kpIHRvIGhhbmRsZSBVU0IgMS4xIGRldmljZXMgY29ubmVjdGVkIHRvIHJvb3QgaHViIHBvcnRzLiAgUG9ydHMKQEAgLTEyMyw3ICsxMjAsNyBAQAogCiBjb25maWcgVVNCX0lTUDE3NjBfSENECiAJdHJpc3RhdGUgIklTUCAxNzYwIEhDRCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTCAmJiAoUENJIHx8IFBQQ19PRikKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCiAJICBUaGUgSVNQMTc2MCBjaGlwIGlzIGEgVVNCIDIuMCBob3N0IGNvbnRyb2xsZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCBlNTUxYmIzLi5mMjYxOGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0xMTAsNiArMTEwLDQyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyB2b2lkCit0aW1lcl9hY3Rpb24oc3RydWN0IGVoY2lfaGNkICplaGNpLCBlbnVtIGVoY2lfdGltZXJfYWN0aW9uIGFjdGlvbikKK3sKKwkvKiBEb24ndCBvdmVycmlkZSB0aW1lb3V0cyB3aGljaCBzaHJpbmsgb3IgKGxhdGVyKSBkaXNhYmxlCisJICogdGhlIGFzeW5jIHJpbmc7IGp1c3QgdGhlIEkvTyB3YXRjaGRvZy4gIE5vdGUgdGhhdCBpZiBhCisJICogU0hSSU5LIHdlcmUgcGVuZGluZywgT0ZGIHdvdWxkIG5ldmVyIGJlIHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAodGltZXJfcGVuZGluZygmZWhjaS0+d2F0Y2hkb2cpCisJCQkmJiAoKEJJVChUSU1FUl9BU1lOQ19TSFJJTkspIHwgQklUKFRJTUVSX0FTWU5DX09GRikpCisJCQkJJiBlaGNpLT5hY3Rpb25zKSkKKwkJcmV0dXJuOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpKSB7CisJCXVuc2lnbmVkIGxvbmcgdDsKKworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIFRJTUVSX0lPX1dBVENIRE9HOgorCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVSX0FTWU5DX09GRjoKKwkJCXQgPSBFSENJX0FTWU5DX0pJRkZJRVM7CisJCQlicmVhazsKKwkJLyogY2FzZSBUSU1FUl9BU1lOQ19TSFJJTks6ICovCisJCWRlZmF1bHQ6CisJCQkvKiBhZGQgYSBqaWZmaWUgc2luY2Ugd2Ugc3luY2ggYWdhaW5zdCB0aGUKKwkJCSAqIDggS0h6IHVmcmFtZSBjb3VudGVyLgorCQkJICovCisJCQl0ID0gRElWX1JPVU5EX1VQKEVIQ0lfU0hSSU5LX0ZSQU1FUyAqIEhaLCAxMDAwKSArIDE7CisJCQlicmVhazsKKwkJfQorCQltb2RfdGltZXIoJmVoY2ktPndhdGNoZG9nLCB0ICsgamlmZmllcyk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKgogICogaGFuZHNoYWtlIC0gc3BpbiByZWFkaW5nIGhjIHVudGlsIGhhbmRzaGFrZSBjb21wbGV0ZXMgb3IgZmFpbHMKICAqIEBwdHI6IGFkZHJlc3Mgb2YgaGMgcmVnaXN0ZXIgdG8gYmUgcmVhZApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggZWNjOWI2Ni4uMTk3NmIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0zMzMsMTIgKzMzMyw0MCBAQAogCQl0b2tlbiA9IGhjMzJfdG9fY3B1KGVoY2ksIHF0ZC0+aHdfdG9rZW4pOwogCiAJCS8qIGFsd2F5cyBjbGVhbiB1cCBxdGRzIHRoZSBoYyBkZS1hY3RpdmF0ZWQgKi8KKyByZXRyeV94YWN0ZXJyOgogCQlpZiAoKHRva2VuICYgUVREX1NUU19BQ1RJVkUpID09IDApIHsKIAogCQkJLyogb24gU1RBTEwsIGVycm9yLCBhbmQgc2hvcnQgcmVhZHMgdGhpcyB1cmIgbXVzdAogCQkJICogY29tcGxldGUgYW5kIGFsbCBpdHMgcXRkcyBtdXN0IGJlIHJlY3ljbGVkLgogCQkJICovCiAJCQlpZiAoKHRva2VuICYgUVREX1NUU19IQUxUKSAhPSAwKSB7CisKKwkJCQkvKiByZXRyeSB0cmFuc2FjdGlvbiBlcnJvcnMgdW50aWwgd2UKKwkJCQkgKiByZWFjaCB0aGUgc29mdHdhcmUgeGFjdGVyciBsaW1pdAorCQkJCSAqLworCQkJCWlmICgodG9rZW4gJiBRVERfU1RTX1hBQ1QpICYmCisJCQkJCQlRVERfQ0VSUih0b2tlbikgPT0gMCAmJgorCQkJCQkJLS1xaC0+eGFjdGVycnMgPiAwICYmCisJCQkJCQkhdXJiLT51bmxpbmtlZCkgeworCQkJCQllaGNpX2RiZyhlaGNpLAorCSJkZXRlY3RlZCBYYWN0RXJyIGxlbiAlenUvJXp1IHJldHJ5ICVkXG4iLAorCXF0ZC0+bGVuZ3RoIC0gUVREX0xFTkdUSCh0b2tlbiksIHF0ZC0+bGVuZ3RoLAorCVFIX1hBQ1RFUlJfTUFYIC0gcWgtPnhhY3RlcnJzKTsKKworCQkJCQkvKiByZXNldCB0aGUgdG9rZW4gaW4gdGhlIHF0ZCBhbmQgdGhlCisJCQkJCSAqIHFoIG92ZXJsYXkgKHdoaWNoIHN0aWxsIGNvbnRhaW5zCisJCQkJCSAqIHRoZSBxdGQpIHNvIHRoYXQgd2UgcGljayB1cCBmcm9tCisJCQkJCSAqIHdoZXJlIHdlIGxlZnQgb2ZmCisJCQkJCSAqLworCQkJCQl0b2tlbiAmPSB+UVREX1NUU19IQUxUOworCQkJCQl0b2tlbiB8PSBRVERfU1RTX0FDVElWRSB8CisJCQkJCQkJKEVIQ0lfVFVORV9DRVJSIDw8IDEwKTsKKwkJCQkJcXRkLT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksCisJCQkJCQkJdG9rZW4pOworCQkJCQl3bWIoKTsKKwkJCQkJcWgtPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwgdG9rZW4pOworCQkJCQlnb3RvIHJldHJ5X3hhY3RlcnI7CisJCQkJfQogCQkJCXN0b3BwZWQgPSAxOwogCiAJCQkvKiBtYWdpYyBkdW1teSBmb3Igc29tZSBzaG9ydCByZWFkczsgcWggd29uJ3QgYWR2YW5jZS4KQEAgLTQyMSw2ICs0NDksOSBAQAogCQkvKiByZW1vdmUgcXRkOyBpdCdzIHJlY3ljbGVkIGFmdGVyIHBvc3NpYmxlIHVyYiBjb21wbGV0aW9uICovCiAJCWxpc3RfZGVsICgmcXRkLT5xdGRfbGlzdCk7CiAJCWxhc3QgPSBxdGQ7CisKKwkJLyogcmVpbml0IHRoZSB4YWN0ZXJyIGNvdW50ZXIgZm9yIHRoZSBuZXh0IHF0ZCAqLworCQlxaC0+eGFjdGVycnMgPSBRSF9YQUNURVJSX01BWDsKIAl9CiAKIAkvKiBsYXN0IHVyYidzIGNvbXBsZXRpb24gbWlnaHQgc3RpbGwgbmVlZCBjYWxsaW5nICovCkBAIC04NjIsNiArODkzLDcgQEAKIAloZWFkLT5xaF9uZXh0LnFoID0gcWg7CiAJaGVhZC0+aHdfbmV4dCA9IGRtYTsKIAorCXFoLT54YWN0ZXJycyA9IFFIX1hBQ1RFUlJfTUFYOwogCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0xJTktFRDsKIAkvKiBxdGQgY29tcGxldGlvbnMgcmVwb3J0ZWQgbGF0ZXIgYnkgaW50ZXJydXB0ICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IDFkMGI0OWUuLmFkYTVkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC01NjMsNyArNTYzLDcgQEAKIAkvLyAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKIAkvLyAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCiAJLy8gVEhFTgotCS8vICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2hjMzIoMSA8PCA3IC8qICJpZ25vcmUiICovKTsKKwkvLyAgIHFoLT5od19pbmZvMSB8PSBjcHVfdG9faGMzMigxIDw8IDcgLyogImlnbm9yZSIgKi8pOwogCiAJLyogaGlnaCBiYW5kd2lkdGgsIG9yIG90aGVyd2lzZSBwYXJ0IG9mIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KIAlpZiAoKHBlcmlvZCA9IHFoLT5wZXJpb2QpID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDI2MmIwMGMuLjZjZmYxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC0xOTAsNDAgKzE5MCw2IEBACiAJY2xlYXJfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi10aW1lcl9hY3Rpb24gKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCi17Ci0JLyogRG9uJ3Qgb3ZlcnJpZGUgdGltZW91dHMgd2hpY2ggc2hyaW5rIG9yIChsYXRlcikgZGlzYWJsZQotCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQotCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCi0JICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdCAoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucykpIHsKLQkJdW5zaWduZWQgbG9uZyB0OwotCi0JCXN3aXRjaCAoYWN0aW9uKSB7Ci0JCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6Ci0JCQl0ID0gRUhDSV9JT19KSUZGSUVTOwotCQkJYnJlYWs7Ci0JCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgotCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKLQkJCWJyZWFrOwotCQkvLyBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzoKLQkJZGVmYXVsdDoKLQkJCS8qIGFkZCBhIGppZmZpZSBzaW5jZSB3ZSBzeW5jaCBhZ2FpbnN0IHRoZQotCQkJICogOCBLSHogdWZyYW1lIGNvdW50ZXIuCi0JCQkgKi8KLQkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGZyZWVfY2FjaGVkX2l0ZF9saXN0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yODcsNyArMjUzLDcgQEAKIAogLyoKICAqIE5vdyB0aGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIG5vdCBjb252ZXJ0ZWQgdXNpbmcgdGhlCi0gKiBfX2NvbnN0YW50X2NwdV90b19sZTMyKCkgbWFjcm8gYW55bW9yZSwgc2luY2Ugd2UgaGF2ZSB0byBzdXBwb3J0CisgKiBjcHVfdG9fbGUzMigpIG1hY3JvIGFueW1vcmUsIHNpbmNlIHdlIGhhdmUgdG8gc3VwcG9ydAogICogImR5bmFtaWMiIHN3aXRjaGluZyBiZXR3ZWVuIGJlIGFuZCBsZSBzdXBwb3J0LCBzbyB0aGF0IHRoZSBkcml2ZXIKICAqIGNhbiBiZSB1c2VkIG9uIG9uZSBzeXN0ZW0gd2l0aCBTb0MgRUhDSSBjb250cm9sbGVyIHVzaW5nIGJpZy1lbmRpYW4KICAqIGRlc2NyaXB0b3JzIGFzIHdlbGwgYXMgYSBub3JtYWwgbGl0dGxlLWVuZGlhbiBQQ0kgRUhDSSBjb250cm9sbGVyLgpAQCAtMzc2LDYgKzM0Miw5IEBACiAjZGVmaW5lCVFIX1NUQVRFX1VOTElOS19XQUlUCTQJCS8qIExJTktFRCBhbmQgb24gcmVjbGFpbSBxICovCiAjZGVmaW5lCVFIX1NUQVRFX0NPTVBMRVRJTkcJNQkJLyogZG9uJ3QgdG91Y2ggdG9rZW4uSEFMVCAqLwogCisJdTgJCQl4YWN0ZXJyczsJLyogWGFjdEVyciByZXRyeSBjb3VudGVyICovCisjZGVmaW5lCVFIX1hBQ1RFUlJfTUFYCQkzMgkJLyogWGFjdEVyciByZXRyeSBsaW1pdCAqLworCiAJLyogcGVyaW9kaWMgc2NoZWR1bGUgaW5mbyAqLwogCXU4CQkJdXNlY3M7CQkvKiBpbnRyIGJhbmR3aWR0aCAqLwogCXU4CQkJZ2FwX3VmOwkJLyogdWZyYW1lcyBzcGxpdC9jc3BsaXQgZ2FwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMKaW5kZXggMzRlMTRlZC4uZWE4YTQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZmhjaV90b19oY2QoZmhjaSktPnNlbGYuY29udHJvbGxlcjsKIAotCWZoY2ktPmRmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldi0+YnVzX2lkLCBOVUxMKTsKKwlmaGNpLT5kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShkZXYpLCBOVUxMKTsKIAlpZiAoIWZoY2ktPmRmc19yb290KSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwppbmRleCBiYTYyMmNjLi4wOTUxODE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAlpZiAoc3Byb3AgJiYgc3RyY21wKHNwcm9wLCAiaG9zdCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZmaGNpX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmZoY2lfZHJpdmVyLCBkZXYsIGRldl9uYW1lKGRldikpOwogCWlmICghaGNkKSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGNyZWF0ZSBoY2RcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY1MCw3ICs2NTAsNyBAQAogCQkJfQogCQl9CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGdwaW8gJWQiLCBpKTsKIAkJCWdvdG8gZXJyX2dwaW9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKaW5kZXggODU4MjIzNi4uY2JmMzBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCkBAIC00NjQsOCArNDY0LDcgQEAKIAkJCXBvcnRfaWR4IDw8IDggfCBpZmFjZV9ubywKIAkJCWtleWQsIGtleWRfbGVuLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOwogCi0JbWVtc2V0KGtleWQsIDAsIHNpemVvZigqa2V5ZCkpOwkvKiBjbGVhciBrZXlzIGV0Yy4gKi8KLQlrZnJlZShrZXlkKTsKKwlremZyZWUoa2V5ZCk7IC8qIGNsZWFyIGtleXMgZXRjLiAqLwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwppbmRleCA0ZGRhMzFiLi5hMmIzMDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCkBAIC03NzIsNyArNzcyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBQSVBFX0lOVEVSUlVQVDoKIAkJdXJiLT5pbnRlcnZhbCA9IGVwLT5wZXJpb2Q7Ci0JCWVwLT5sZW5ndGggPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCQllcC0+bGVuZ3RoID0gbWluX3QodTMyLCBlcC0+bWF4cGFja2V0LAogCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCiAJCS8qIHVyYiBzdWJtaXR0ZWQgZm9yIGFscmVhZHkgZXhpc3RpbmcgZW5kcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKaW5kZXggYWEyMTFiYS4uMTJkYjk2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKQEAgLTU2Myw3ICs1NjMsNyBAQAogKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3B0ZChzdHJ1Y3QgcHRkICpwdGQpCiB7Ci0JcHJpbnRrKCJ0ZDogJXggJWQlYyVkICVkLCVkLCVkICAleCAleCV4JXhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAidGQ6ICV4ICVkJWMlZCAlZCwlZCwlZCAgJXggJXgleCV4XG4iLAogCSAgICAgICBQVERfR0VUX0NDKHB0ZCksIFBURF9HRVRfRkEocHRkKSwKIAkgICAgICAgUFREX0RJUl9TVFIocHRkKSwgUFREX0dFVF9FUChwdGQpLAogCSAgICAgICBQVERfR0VUX0NPVU5UKHB0ZCksIFBURF9HRVRfTEVOKHB0ZCksIFBURF9HRVRfTVBTKHB0ZCksCkBAIC01NzYsNyArNTc2LDcgQEAKIAlpbnQgazsKIAogCWlmIChQVERfR0VUX0RJUihwdGQpICE9IFBURF9ESVJfSU4gJiYgUFREX0dFVF9MRU4ocHRkKSkgewotCQlwcmludGsoIi0+ICIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICItPiAiKTsKIAkJZm9yIChrID0gMDsgayA8IFBURF9HRVRfTEVOKHB0ZCk7ICsraykKIAkJCXByaW50aygiJTAyeCAiLCAoKHU4ICopIGJ1Zilba10pOwogCQlwcmludGsoIlxuIik7CkBAIC01ODgsMTMgKzU4OCwxMyBAQAogCWludCBrOwogCiAJaWYgKFBURF9HRVRfRElSKHB0ZCkgPT0gUFREX0RJUl9JTiAmJiBQVERfR0VUX0NPVU5UKHB0ZCkpIHsKLQkJcHJpbnRrKCI8LSAiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiPC0gIik7CiAJCWZvciAoayA9IDA7IGsgPCBQVERfR0VUX0NPVU5UKHB0ZCk7ICsraykKIAkJCXByaW50aygiJTAyeCAiLCAoKHU4ICopIGJ1Zilba10pOwogCQlwcmludGsoIlxuIik7CiAJfQogCWlmIChQVERfR0VUX0xBU1QocHRkKSkKLQkJcHJpbnRrKCItXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiLVxuIik7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggYjg5OWYxYS4uY2QwN2VhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAKIAlpZiAodXJiLT5kZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7CiAJCS8qIHNwbGl0ICovCi0JCXB0ZC0+ZHc1ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigweDFjKTsKKwkJcHRkLT5kdzUgPSBjcHVfdG9fbGUzMigweDFjKTsKIAogCQlpZiAocWgtPnBlcmlvZCA+PSAzMikKIAkJCXBlcmlvZCA9IHFoLT5wZXJpb2QgLyAyOwpAQCAtODE5LDYgKzgxOSwxMyBAQAogCXUzMiBhdGxfcmVncywgcGF5bG9hZDsKIAl1MzIgYnVmZnN0YXR1czsKIAorCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCisJICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjaworCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKKwkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgorCSAqLworCW5kZWxheSgxOTUpOwogCXNraXBfbWFwID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19BVExfUFREX1NLSVBNQVBfUkVHKTsKIAogCUJVR19PTighc2tpcF9tYXApOwpAQCAtODUzLDYgKzg2MCwxMyBAQAogCXUzMiBpbnRfcmVncywgcGF5bG9hZDsKIAl1MzIgYnVmZnN0YXR1czsKIAorCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCisJICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjaworCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKKwkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgorCSAqLworCW5kZWxheSgxOTUpOwogCXNraXBfbWFwID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19JTlRfUFREX1NLSVBNQVBfUkVHKTsKIAogCUJVR19PTighc2tpcF9tYXApOwpAQCAtMTA1NCw3ICsxMDY4LDcgQEAKIAkJCXByaXZfd3JpdGVfY29weShwcml2LCAodTMyICopJnB0ZCwgdXNiX2hjZC0+cmVncyArCiAJCQkJCWF0bF9yZWdzLCBzaXplb2YocHRkKSk7CiAKLQkJCXB0ZC5kdzAgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihQVERfVkFMSUQpOworCQkJcHRkLmR3MCB8PSBjcHVfdG9fbGUzMihQVERfVkFMSUQpOwogCQkJcHJpdl93cml0ZV9jb3B5KHByaXYsICh1MzIgKikmcHRkLCB1c2JfaGNkLT5yZWdzICsKIAkJCQkJYXRsX3JlZ3MsIHNpemVvZihwdGQpKTsKIApAQCAtMjIzNSw5ICsyMjQ5LDEwIEBACiAJa21lbV9jYWNoZV9kZXN0cm95KHFoX2NhY2hlcCk7CiB9CiAKLXN0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHU2NCByZXNfc3RhcnQsIHU2NCByZXNfbGVuLCBpbnQgaXJxLAotCQl1NjQgaXJxZmxhZ3MsIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKLQkJdW5zaWduZWQgaW50IGRldmZsYWdzKQorc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIocGh5c19hZGRyX3QgcmVzX3N0YXJ0LCByZXNvdXJjZV9zaXplX3QgcmVzX2xlbiwKKwkJCQkgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKaW5kZXggYTlkYWVhNS4uNDYyZjQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaApAQCAtMiw5ICsyLDEwIEBACiAjZGVmaW5lIF9JU1AxNzYwX0hDRF9IXwogCiAvKiBleHBvcnRzIGZvciBpZiAqLwotc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIodTY0IHJlc19zdGFydCwgdTY0IHJlc19sZW4sIGludCBpcnEsCi0JCXU2NCBpcnFmbGFncywgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAotCQl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpOworc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIocGh5c19hZGRyX3QgcmVzX3N0YXJ0LCByZXNvdXJjZV9zaXplX3QgcmVzX2xlbiwKKwkJCQkgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpOwogaW50IGluaXRfa21lbV9vbmNlKHZvaWQpOwogdm9pZCBkZWluaXRfa21lbV9jYWNoZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwppbmRleCA0Y2Y3Y2E0Li4zZmEzYTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwpAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAiaXNwMTc2MC1oY2QuaCIKQEAgLTMwMCwzOSArMzAxLDEwMSBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpc3AxNzYwX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXM7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQ7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbV9yZXMpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogTWVtb3J5IHJlc291cmNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSwgImlzcDE3NjAiKSkgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBDYW5ub3QgcmVzZXJ2ZSB0aGUgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWlycV9yZXMpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogSVJRIHJlc291cmNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaXJxZmxhZ3MgfD0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKworCWhjZCA9IGlzcDE3NjBfcmVnaXN0ZXIobWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplLCBpcnFfcmVzLT5zdGFydCwKKwkJCSAgICAgICBpcnFmbGFncywgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldiksIDApOworCWlmIChJU19FUlIoaGNkKSkgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIEhDRCBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcHJfaW5mbygiSVNQMTc2MCBVU0IgZGV2aWNlIGluaXRpYWxpc2VkXG4iKTsKKwlyZXR1cm4gcmV0OworCitjbGVhbnVwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlzcDE3NjBfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzcDE3NjBfcGxhdF9kcml2ZXIgPSB7CisJLnByb2JlCT0gaXNwMTc2MF9wbGF0X3Byb2JlLAorCS5yZW1vdmUJPSBpc3AxNzYwX3BsYXRfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImlzcDE3NjAiLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpc3AxNzYwX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIGFueV9yZXQgPSAtRU5PREVWOwogCiAJaW5pdF9rbWVtX29uY2UoKTsKIAorCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNwMTc2MF9wbGF0X2RyaXZlcik7CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2lmZGVmIENPTkZJR19QUENfT0YKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlzcDE3NjBfb2ZfZHJpdmVyKTsKLQlpZiAocmV0KSB7Ci0JCWRlaW5pdF9rbWVtX2NhY2hlKCk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmICghcmV0KQorCQlhbnlfcmV0ID0gMDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QQ0kKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpc3AxNzYxX3BjaV9kcml2ZXIpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5yZWdfb2Y7CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2VuZGlmCi0JcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19QQ0kKLXVucmVnX29mOgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpc3AxNzYwX29mX2RyaXZlcik7Ci0jZW5kaWYKLQlkZWluaXRfa21lbV9jYWNoZSgpOwotCXJldHVybiByZXQ7CisJaWYgKGFueV9yZXQpCisJCWRlaW5pdF9rbWVtX2NhY2hlKCk7CisJcmV0dXJuIGFueV9yZXQ7CiB9CiBtb2R1bGVfaW5pdChpc3AxNzYwX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXNwMTc2MF9leGl0KHZvaWQpCiB7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDE3NjBfcGxhdF9kcml2ZXIpOwogI2lmZGVmIENPTkZJR19QUENfT0YKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXNwMTc2MF9vZl9kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNWNmNWYxZS4uMjVkYjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtOTk3LDcgKzk5Nyw3IEBACiAjZGVmaW5lIFNBMTExMV9EUklWRVIJCW9oY2lfaGNkX3NhMTExMV9kcml2ZXIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfUzNDMjQxMAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfUzNDMjQxMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9TM0M2NFhYKQogI2luY2x1ZGUgIm9oY2ktczNjMjQxMC5jIgogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCW9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyCiAjZW5kaWYKQEAgLTEwNDksNyArMTA0OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogI2luY2x1ZGUgIm9oY2ktc2guYyIKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9zaF9kcml2ZXIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggZjQ2YWY3YS4uYTY4YWYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC0yMSw5ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CisjaW5jbHVkZSA8cGxhdC91c2ItY29udHJvbC5oPgogCiAjZGVmaW5lIHZhbGlkX3BvcnQoaWR4KSAoKGlkeCkgPT0gMSB8fCAoaWR4KSA9PSAyKQogCkBAIC0zNzIsNyArMzcwLDcgQEAKIAogCXVzYl9jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgInVzYi1idXMtaG9zdCIpOwogCWlmIChJU19FUlIodXNiX2NsaykpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1ob3N0IGNsb2NrXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1idXMtaG9zdCBjbG9ja1xuIik7CiAJCXJldHZhbCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyX2NsazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwppbmRleCA3NTU0OGY3Li41YWM0ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKQEAgLTg0NSwxNCArODQ1LDE0IEBACiAJCWlzX291dCA9ICEocXRkLT5od190b2tlbiAmIGNwdV90b19sZTMyKDEgPDwgOCkpOwogCQllcG51bSA9IChsZTMyX3RvX2NwdXAoJnFoLT5od19pbmZvMSkgPj4gOCkgJiAweDBmOwogCQlpZiAodW5saWtlbHkoIXVzYl9nZXR0b2dnbGUocWgtPmRldiwgZXBudW0sIGlzX291dCkpKSB7Ci0JCQlxaC0+aHdfdG9rZW4gJj0gfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX1RPR0dMRSk7CisJCQlxaC0+aHdfdG9rZW4gJj0gfmNwdV90b19sZTMyKFFURF9UT0dHTEUpOwogCQkJdXNiX3NldHRvZ2dsZShxaC0+ZGV2LCBlcG51bSwgaXNfb3V0LCAxKTsKIAkJfQogCX0KIAogCS8qIEhDIG11c3Qgc2VlIGxhdGVzdCBxdGQgYW5kIHFoIGRhdGEgYmVmb3JlIHdlIGNsZWFyIEFDVElWRStIQUxUICovCiAJd21iKCk7Ci0JcWgtPmh3X3Rva2VuICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7CisJcWgtPmh3X3Rva2VuICY9IGNwdV90b19sZTMyKFFURF9UT0dHTEUgfCBRVERfU1RTX1BJTkcpOwogfQogCiAvKiBJZiBpdCB3ZXJlbid0IGZvciBhIGNvbW1vbiBzaWxpY29uIHF1aXJrICh3cml0aW5nIHRoZSBkdW1teSBpbnRvIHRoZSBxaApAQCAtOTM3LDcgKzkzNyw3IEBACiAJCXN0cnVjdCBlaGNpX3FoCSpxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKSB1cmItPmhjcHJpdjsKIAogCQkvKiBTLW1hc2sgaW4gYSBRSCBtZWFucyBpdCdzIGFuIGludGVycnVwdCB1cmIgKi8KLQkJaWYgKChxaC0+aHdfaW5mbzIgJiBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX1NNQVNLKSkgIT0gMCkgeworCQlpZiAoKHFoLT5od19pbmZvMiAmIGNwdV90b19sZTMyKFFIX1NNQVNLKSkgIT0gMCkgewogCiAJCQkvKiAuLi4gdXBkYXRlIGhjLXdpZGUgcGVyaW9kaWMgc3RhdHMgKGZvciB1c2JmcykgKi8KIAkJCW94dV90b19oY2Qob3h1KS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMtLTsKQEAgLTk4MSw3ICs5ODEsNyBAQAogc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlKHN0cnVjdCBveHVfaGNkICpveHUsIHN0cnVjdCBlaGNpX3FoICpxaCk7CiBzdGF0aWMgaW50IHFoX3NjaGVkdWxlKHN0cnVjdCBveHVfaGNkICpveHUsIHN0cnVjdCBlaGNpX3FoICpxaCk7CiAKLSNkZWZpbmUgSEFMVF9CSVQgX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfU1RTX0hBTFQpCisjZGVmaW5lIEhBTFRfQklUIGNwdV90b19sZTMyKFFURF9TVFNfSEFMVCkKIAogLyogUHJvY2VzcyBhbmQgZnJlZSBjb21wbGV0ZWQgcXRkcyBmb3IgYSBxaCwgcmV0dXJuaW5nIFVSQnMgdG8gZHJpdmVycy4KICAqIENoYXNlcyB1cCB0byBxaC0+aHdfY3VycmVudC4gIFJldHVybnMgbnVtYmVyIG9mIGNvbXBsZXRpb25zIGNhbGxlZCwKQEAgLTExNjAsNyArMTE2MCw3IEBACiAJCQkvKiBzaG91bGQgYmUgcmFyZSBmb3IgcGVyaW9kaWMgdHJhbnNmZXJzLAogCQkJICogZXhjZXB0IG1heWJlIGhpZ2ggYmFuZHdpZHRoIC4uLgogCQkJICovCi0JCQlpZiAoKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spCisJCQlpZiAoKGNwdV90b19sZTMyKFFIX1NNQVNLKQogCQkJCQkmIHFoLT5od19pbmZvMikgIT0gMCkgewogCQkJCWludHJfZGVzY2hlZHVsZShveHUsIHFoKTsKIAkJCQkodm9pZCkgcWhfc2NoZWR1bGUob3h1LCBxaCk7CkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCX0KIAogCS8qIGJ5IGRlZmF1bHQsIGVuYWJsZSBpbnRlcnJ1cHQgb24gdXJiIGNvbXBsZXRpb24gKi8KLQkJcXRkLT5od190b2tlbiB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9JT0MpOworCQlxdGQtPmh3X3Rva2VuIHw9IGNwdV90b19sZTMyKFFURF9JT0MpOwogCXJldHVybiBoZWFkOwogCiBjbGVhbnVwOgpAQCAtMTUzOSw3ICsxNTM5LDcgQEAKIAkvKiBxdGQgY29tcGxldGlvbnMgcmVwb3J0ZWQgbGF0ZXIgYnkgaW50ZXJydXB0ICovCiB9CiAKLSNkZWZpbmUJUUhfQUREUl9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHg3ZikKKyNkZWZpbmUJUUhfQUREUl9NQVNLCWNwdV90b19sZTMyKDB4N2YpCiAKIC8qCiAgKiBGb3IgY29udHJvbC9idWxrL2ludGVycnVwdCwgcmV0dXJuIFFIIHdpdGggdGhlc2UgVERzIGFwcGVuZGVkLgpAQCAtMjAxMiw3ICsyMDEyLDcgQEAKIAkgKiAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKIAkgKiAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCiAJICogVEhFTgotCSAqICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCA3ICJpZ25vcmUiKTsKKwkgKiAgIHFoLT5od19pbmZvMSB8PSBjcHVfdG9fbGUzMigxIDw8IDcgImlnbm9yZSIpOwogCSAqLwogCiAJLyogaGlnaCBiYW5kd2lkdGgsIG9yIG90aGVyd2lzZSBwYXJ0IG9mIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KQEAgLTIwNTcsNyArMjA1Nyw3IEBACiAJICogYWN0aXZlIGhpZ2ggc3BlZWQgcXVldWVzIG1heSBuZWVkIGJpZ2dlciBkZWxheXMuLi4KIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KQotCQl8fCAoX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9DTUFTSykgJiBxaC0+aHdfaW5mbzIpICE9IDApCisJCXx8IChjcHVfdG9fbGUzMihRSF9DTUFTSykgJiBxaC0+aHdfaW5mbzIpICE9IDApCiAJCXdhaXQgPSAyOwogCWVsc2UKIAkJd2FpdCA9IDU1OwkvKiB3b3JzdCBjYXNlOiAzICogMTAyNCAqLwpAQCAtMjE4MywxMCArMjE4MywxMCBAQAogCQlxaC0+c3RhcnQgPSBmcmFtZTsKIAogCQkvKiByZXNldCBTLWZyYW1lIGFuZCAobWF5YmUpIEMtZnJhbWUgbWFza3MgKi8KLQkJcWgtPmh3X2luZm8yICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIofihRSF9DTUFTSyB8IFFIX1NNQVNLKSk7CisJCXFoLT5od19pbmZvMiAmPSBjcHVfdG9fbGUzMih+KFFIX0NNQVNLIHwgUUhfU01BU0spKTsKIAkJcWgtPmh3X2luZm8yIHw9IHFoLT5wZXJpb2QKIAkJCT8gY3B1X3RvX2xlMzIoMSA8PCB1ZnJhbWUpCi0JCQk6IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spOworCQkJOiBjcHVfdG9fbGUzMihRSF9TTUFTSyk7CiAJCXFoLT5od19pbmZvMiB8PSBjX21hc2s7CiAJfSBlbHNlCiAJCW94dV9kYmcob3h1LCAicmV1c2VkIHFoICVwIHNjaGVkdWxlXG4iLCBxaCk7CkBAIC0yNjg0LDcgKzI2ODQsNyBAQAogCW94dS0+dXJiX2xlbiA9IDA7CiAKIAkvKiBGSU1YRSAqLwotCWhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzayA9IDBVTDsKKwloY2QtPnNlbGYuY29udHJvbGxlci0+ZG1hX21hc2sgPSBOVUxMOwogCiAJaWYgKG94dS0+aXNfb3RnKSB7CiAJCW94dS0+Y2FwcyA9IGhjZC0+cmVncyArIE9YVV9PVEdfQ0FQX09GRlNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaAppbmRleCA4OTEwZTI3Li4xYzIxNmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oCkBAIC0yMzUsMjEgKzIzNSwyMSBAQAogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKTsKIAogLyogbWFzayBOYWtDbnQrVCBpbiBxaC0+aHdfYWx0X25leHQgKi8KLSNkZWZpbmUgUVREX01BU0sgX19jb25zdGFudF9jcHVfdG9fbGUzMiAofjB4MWYpCisjZGVmaW5lIFFURF9NQVNLIGNwdV90b19sZTMyICh+MHgxZikKIAogI2RlZmluZSBJU19TSE9SVF9SRUFEKHRva2VuKSAoUVREX0xFTkdUSCh0b2tlbikgIT0gMCAmJiBRVERfUElEKHRva2VuKSA9PSAxKQogCiAvKiBUeXBlIHRhZyBmcm9tIHtxaCwgaXRkLCBzaXRkLCBmc3RufS0+aHdfbmV4dCAqLwotI2RlZmluZSBRX05FWFRfVFlQRShkbWEpICgoZG1hKSAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDMgPDwgMSkpCisjZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgY3B1X3RvX2xlMzIgKDMgPDwgMSkpCiAKIC8qIHZhbHVlcyBmb3IgdGhhdCB0eXBlIHRhZyAqLwotI2RlZmluZSBRX1RZUEVfUUgJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCAxKQorI2RlZmluZSBRX1RZUEVfUUgJY3B1X3RvX2xlMzIgKDEgPDwgMSkKIAogLyogbmV4dCBhc3luYyBxdWV1ZSBlbnRyeSwgb3IgcG9pbnRlciB0byBpbnRlcnJ1cHQvcGVyaW9kaWMgUUggKi8KICNkZWZpbmUJUUhfTkVYVChkbWEpCShjcHVfdG9fbGUzMigoKHUzMilkbWEpJn4weDAxZil8UV9UWVBFX1FIKQogCiAvKiBmb3IgcGVyaW9kaWMvYXN5bmMgc2NoZWR1bGVzIGFuZCBxdGQgbGlzdHMsIG1hcmsgZW5kIG9mIGxpc3QgKi8KLSNkZWZpbmUJRUhDSV9MSVNUX0VORAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpIC8qICJudWxsIHBvaW50ZXIiIHRvIGh3ICovCisjZGVmaW5lCUVIQ0lfTElTVF9FTkQJY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KIAogLyoKICAqIEVudHJpZXMgaW4gcGVyaW9kaWMgc2hhZG93IHRhYmxlIGFyZSBwb2ludGVycyB0byBvbmUgb2YgZm91ciBraW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCA3NWI2OTg0Li4wMzNjMjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJICovCiAJaGNjX3BhcmFtcyA9IHJlYWRsKGJhc2UgKyBFSENJX0hDQ19QQVJBTVMpOwogCW9mZnNldCA9IChoY2NfcGFyYW1zID4+IDgpICYgMHhmZjsKLQl3aGlsZSAob2Zmc2V0ICYmIGNvdW50LS0pIHsKKwl3aGlsZSAob2Zmc2V0ICYmIC0tY291bnQpIHsKIAkJdTMyCQljYXA7CiAJCWludAkJbXNlYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggMzE5MDQxMi4uZjE2MjZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC02NjAsOSArNjYwLDkgQEAKIAl1MTYgYXJyYXlbUjhBNjY1OTdfTUFYX05VTV9QSVBFXSwgaSA9IDAsIG1pbjsKIAogCW1lbXNldChhcnJheSwgMCwgc2l6ZW9mKGFycmF5KSk7Ci0Jc3dpdGNoIChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGVwKSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKLQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCQlhcnJheVtpKytdID0gNDsKIAkJZWxzZSB7CiAJCQlhcnJheVtpKytdID0gMzsKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgotCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spIHsKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKSB7CiAJCQlhcnJheVtpKytdID0gNjsKIAkJCWFycmF5W2krK10gPSA3OwogCQkJYXJyYXlbaSsrXSA9IDg7CkBAIC02NzgsNyArNjc4LDcgQEAKIAkJCWFycmF5W2krK10gPSA5OwogCQlicmVhazsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6Ci0JCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKQogCQkJYXJyYXlbaSsrXSA9IDI7CiAJCWVsc2UKIAkJCWFycmF5W2krK10gPSAxOwpAQCAtOTI4LDEwICs5MjgsOSBAQAogCiAJaW5mby5waXBlbnVtID0gZ2V0X2VtcHR5X3BpcGVudW0ocjhhNjY1OTcsIGVwKTsKIAlpbmZvLmFkZHJlc3MgPSBnZXRfdXJiX3RvX3I4YTY2NTk3X2FkZHIocjhhNjY1OTcsIHVyYik7Ci0JaW5mby5lcG51bSA9IGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCWluZm8uZXBudW0gPSB1c2JfZW5kcG9pbnRfbnVtKGVwKTsKIAlpbmZvLm1heHBhY2tldCA9IGxlMTZfdG9fY3B1KGVwLT53TWF4UGFja2V0U2l6ZSk7Ci0JaW5mby50eXBlID0gZ2V0X3I4YTY2NTk3X3R5cGUoZXAtPmJtQXR0cmlidXRlcwotCQkJCSAgICAgICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCWluZm8udHlwZSA9IGdldF9yOGE2NjU5N190eXBlKHVzYl9lbmRwb2ludF90eXBlKGVwKSk7CiAJaW5mby5idWZudW0gPSBnZXRfYnVmbnVtKGluZm8ucGlwZW51bSk7CiAJaW5mby5idWZfYnNpemUgPSBnZXRfYnVmX2JzaXplKGluZm8ucGlwZW51bSk7CiAJaWYgKGluZm8udHlwZSA9PSBSOEE2NjU5N19CVUxLKSB7CkBAIC05NDEsNyArOTQwLDcgQEAKIAkJaW5mby5pbnRlcnZhbCA9IGdldF9pbnRlcnZhbCh1cmIsIGVwLT5iSW50ZXJ2YWwpOwogCQlpbmZvLnRpbWVyX2ludGVydmFsID0gZ2V0X3RpbWVyX2ludGVydmFsKHVyYiwgZXAtPmJJbnRlcnZhbCk7CiAJfQotCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCWluZm8uZGlyX2luID0gMTsKIAllbHNlCiAJCWluZm8uZGlyX2luID0gMDsKQEAgLTEwMTQsNiArMTAxMyw5IEBACiAKIAlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKIAlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCisJaWYgKHI4YTY2NTk3LT5idXNfc3VzcGVuZGVkKQorCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTM5NSw3ICsxMzk3LDcgQEAKIAkJCSAgIChpbnQpdXJiLT5pc29fZnJhbWVfZGVzY1t0ZC0+aXNvX2NudF0ubGVuZ3RoKTsKIAl9IGVsc2UgewogCQlidWYgPSAodTE2ICopKHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJc2l6ZSA9IG1pbigoaW50KWJ1ZnNpemUsCisJCXNpemUgPSBtaW5fdCh1MzIsIGJ1ZnNpemUsCiAJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KIApAQCAtMTYxNSw2ICsxNjE3LDExIEBACiAJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBEVENIRSwgSU5URU5CMik7CiAJCQlyOGE2NjU5N191c2JfZGlzY29ubmVjdChyOGE2NjU5NywgMSk7CiAJCX0KKwkJaWYgKG1hc2syICYgQkNIRykgeworCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5CQ0hHLCBJTlRTVFMyKTsKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEJDSEdFLCBJTlRFTkIyKTsKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOworCQl9CiAJfQogCiAJaWYgKG1hc2sxKSB7CkBAIC0xNjMwLDYgKzE2MzcsMTIgQEAKIAkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIERUQ0hFLCBJTlRFTkIxKTsKIAkJCXI4YTY2NTk3X3VzYl9kaXNjb25uZWN0KHI4YTY2NTk3LCAwKTsKIAkJfQorCQlpZiAobWFzazEgJiBCQ0hHKSB7CisJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkJDSEcsIElOVFNUUzEpOworCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgQkNIR0UsIElOVEVOQjEpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJCX0KKwogCQlpZiAobWFzazEgJiBTSUdOKSB7CiAJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgflNJR04sIElOVFNUUzEpOwogCQkJc3RhdHVzID0gZ2V0X3VyYl9lcnJvcihyOGE2NjU5NywgMCk7CkBAIC0yMTQxLDcgKzIxNTQsNyBAQAogCiAJCXN3aXRjaCAod1ZhbHVlKSB7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6Ci0JCQlyaC0+cG9ydCAmPSAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwkJCXJoLT5wb3J0ICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKIAkJCWJyZWFrOwpAQCAtMjIxMyw2ICsyMjI2LDY4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BNKQorc3RhdGljIGludCByOGE2NjU5N19idXNfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcgPSBoY2RfdG9fcjhhNjY1OTcoaGNkKTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisJCXVuc2lnbmVkIGxvbmcgZHZzdGN0cl9yZWcgPSBnZXRfZHZzdGN0cl9yZWcocG9ydCk7CisKKwkJaWYgKCEocmgtPnBvcnQgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpKQorCQkJY29udGludWU7CisKKwkJZGJnKCJzdXNwZW5kIHBvcnQgPSAlZCIsIHBvcnQpOworCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBVQUNULCBkdnN0Y3RyX3JlZyk7CS8qIHN1c3BlbmQgKi8KKwkJcmgtPnBvcnQgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisKKwkJaWYgKHJoLT5kZXYtPnVkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKKwkJCW1zbGVlcCgzKTsJLyogd2FpdGluZyBsYXN0IFNPRiAqLworCQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgUldVUEUsIGR2c3RjdHJfcmVnKTsKKwkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QkNIRywgZ2V0X2ludHN0c19yZWcocG9ydCkpOworCQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgQkNIR0UsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKKwkJfQorCX0KKworCXI4YTY2NTk3LT5idXNfc3VzcGVuZGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHI4YTY2NTk3X2J1c19yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3ID0gaGNkX3RvX3I4YTY2NTk3KGhjZCk7CisJaW50IHBvcnQ7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFI4QTY2NTk3X01BWF9ST09UX0hVQjsgcG9ydCsrKSB7CisJCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOworCQl1bnNpZ25lZCBsb25nIGR2c3RjdHJfcmVnID0gZ2V0X2R2c3RjdHJfcmVnKHBvcnQpOworCisJCWlmICghKHJoLT5wb3J0ICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkpCisJCQljb250aW51ZTsKKworCQlkYmcoInJlc3VtZSBwb3J0ID0gJWQiLCBwb3J0KTsKKwkJcmgtPnBvcnQgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJCXJoLT5wb3J0IHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ7CisJCXI4YTY2NTk3X21kZnkocjhhNjY1OTcsIFJFU1VNRSwgUkVTVU1FIHwgVUFDVCwgZHZzdGN0cl9yZWcpOworCQltc2xlZXAoNTApOworCQlyOGE2NjU5N19tZGZ5KHI4YTY2NTk3LCBVQUNULCBSRVNVTUUgfCBVQUNULCBkdnN0Y3RyX3JlZyk7CisJfQorCisJcmV0dXJuIDA7CisKK30KKyNlbHNlCisjZGVmaW5lCXI4YTY2NTk3X2J1c19zdXNwZW5kCU5VTEwKKyNkZWZpbmUJcjhhNjY1OTdfYnVzX3Jlc3VtZQlOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgcjhhNjY1OTdfaGNfZHJpdmVyID0gewogCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKIAkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgcjhhNjY1OTcpLApAQCAtMjI0MywxNiArMjMxOCwzOSBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlyOGE2NjU5N19odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCXI4YTY2NTk3X2h1Yl9jb250cm9sLAorCS5idXNfc3VzcGVuZCA9CQlyOGE2NjU5N19idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlyOGE2NjU5N19idXNfcmVzdW1lLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKQogc3RhdGljIGludCByOGE2NjU5N19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlzdHJ1Y3QgcjhhNjY1OTcJCSpyOGE2NjU5NyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlkaXNhYmxlX2NvbnRyb2xsZXIocjhhNjY1OTcpOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFI4QTY2NTk3X01BWF9ST09UX0hVQjsgcG9ydCsrKSB7CisJCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOworCisJCXJoLT5wb3J0ID0gMHgwMDAwMDAwMDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByOGE2NjU5N19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgcjhhNjY1OTcJCSpyOGE2NjU5NyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5Nyk7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZW5hYmxlX2NvbnRyb2xsZXIocjhhNjY1OTcpOworCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CisKIAlyZXR1cm4gMDsKIH0KICNlbHNlCS8qIGlmIGRlZmluZWQoQ09ORklHX1BNKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oCmluZGV4IGVjYWNkZTQuLmY0OTIwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmgKQEAgLTUwNCw2ICs1MDQsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZF9kZXZpY2U7CiAJdW5zaWduZWQgbG9uZyBjaGlsZF9jb25uZWN0X21hcFs0XTsKKworCXVuc2lnbmVkIGJ1c19zdXNwZW5kZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHI4YTY2NTk3ICpoY2RfdG9fcjhhNjY1OTcoc3RydWN0IHVzYl9oY2QgKmhjZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGUxMDZlOWQuLmE5NDkyNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJd3JpdGViKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksIGRhdGFfcmVnKTsKIAogCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfSE9TVENUTFJFRywgY29udHJvbCk7Ci0JZXAtPmxlbmd0aCA9IG1pbigoaW50KWxlbiwKKwllcC0+bGVuZ3RoID0gbWluX3QodTMyLCBsZW4sCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCVBBQ0tFVCgiSU4lcy8lZCBxaCVwIGxlbiVkXG4iLCBlcC0+bmFrX2NvdW50ID8gIi9yZXRyeSIgOiAiIiwKIAkJCSEhdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAwKSwgZXAsIGxlbik7CkBAIC0yNTUsNyArMjU1LDcgQEAKIAlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKIAlwcmVmZXRjaChidWYpOwogCi0JbGVuID0gbWluKChpbnQpZXAtPm1heHBhY2tldCwKKwlsZW4gPSBtaW5fdCh1MzIsIGVwLT5tYXhwYWNrZXQsCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAJaWYgKCEoY29udHJvbCAmIFNMMTFIX0hDVExNQVNLX0lTT0NIKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwppbmRleCAyMGNjNThiLi5lNTJiOTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwpAQCAtMTE4LDcgKzExOCw5IEBACiAJfQogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiJXMlcyIsIHB0eXBlLCAodXJicC0+ZnNiciA/ICIgRlNCUiIgOiAiIikpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIiBBY3RsZW49JWQiLCB1cmJwLT51cmItPmFjdHVhbF9sZW5ndGgpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiBBY3RsZW49JWQlcyIsIHVyYnAtPnVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSh1cmJwLT5xaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MID8KKwkJCQkiLTgiIDogIiIpKTsKIAogCWlmICh1cmJwLT51cmItPnVubGlua2VkKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgVW5saW5rZWQ9JWQiLCB1cmJwLT51cmItPnVubGlua2VkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAppbmRleCA3ZDAxYzU2Li4yNmJkMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCkBAIC03MywxMSArNzMsMTEgQEAKICNkZWZpbmUgICBVU0JMRUdTVVBfUldDCQkweDhmMDAJLyogdGhlIFIvV0MgYml0cyAqLwogI2RlZmluZSAgIFVTQkxFR1NVUF9STwkJMHg1MDQwCS8qIFIvTyBhbmQgcmVzZXJ2ZWQgYml0cyAqLwogCi0jZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDBGKQotI2RlZmluZSBVSENJX1BUUl9URVJNCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMSkKLSNkZWZpbmUgVUhDSV9QVFJfUUgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAyKQotI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDQpCi0jZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDApCisjZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCWNwdV90b19sZTMyKDB4MDAwRikKKyNkZWZpbmUgVUhDSV9QVFJfVEVSTQkJY3B1X3RvX2xlMzIoMHgwMDAxKQorI2RlZmluZSBVSENJX1BUUl9RSAkJY3B1X3RvX2xlMzIoMHgwMDAyKQorI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJY3B1X3RvX2xlMzIoMHgwMDA0KQorI2RlZmluZSBVSENJX1BUUl9CUkVBRFRICWNwdV90b19sZTMyKDB4MDAwMCkKIAogI2RlZmluZSBVSENJX05VTUZSQU1FUwkJMTAyNAkvKiBpbiB0aGUgZnJhbWUgbGlzdCBbYXJyYXldICovCiAjZGVmaW5lIFVIQ0lfTUFYX1NPRl9OVU1CRVIJMjA0NwkvKiBpbiBhbiBTT0YgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCA1NjMxZDg5Li4zZTU4MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCQkvKiBPdGhlcndpc2UgYWxsIHRoZSB0b2dnbGVzIGluIHRoZSBVUkIgaGF2ZSB0byBiZSBzd2l0Y2hlZCAqLwogCQl9IGVsc2UgewogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKLQkJCQl0ZC0+dG9rZW4gXj0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCQl0ZC0+dG9rZW4gXj0gY3B1X3RvX2xlMzIoCiAJCQkJCQkJVERfVE9LRU5fVE9HR0xFKTsKIAkJCQl0b2dnbGUgXj0gMTsKIAkJCX0KQEAgLTg4Myw3ICs4ODMsNyBAQAogCiAJdWhjaV9maWxsX3RkKHRkLCAwLCBVU0JfUElEX09VVCB8IHVoY2lfZXhwbGVuKDApLCAwKTsKIAl3bWIoKTsKLQlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKKwlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CiAJcWgtPmR1bW15X3RkID0gdGQ7CiAKIAkvKiBMb3ctc3BlZWQgdHJhbnNmZXJzIGdldCBhIGRpZmZlcmVudCBxdWV1ZSwgYW5kIHdvbid0IGhvZyB0aGUgYnVzLgpAQCAtODk5LDggKzg5OSw2IEBACiAJfQogCWlmIChxaC0+c3RhdGUgIT0gUUhfU1RBVEVfQUNUSVZFKQogCQlxaC0+c2tlbCA9IHNrZWw7Ci0KLQl1cmItPmFjdHVhbF9sZW5ndGggPSAtODsJLyogQWNjb3VudCBmb3IgdGhlIFNFVFVQIHBhY2tldCAqLwogCXJldHVybiAwOwogCiBub21lbToKQEAgLTEwMDMsNyArMTAwMSw3IEBACiAJICogZmFzdCBzaWRlIGJ1dCBub3QgZW5vdWdoIHRvIGp1c3RpZnkgZGVsYXlpbmcgYW4gaW50ZXJydXB0CiAJICogbW9yZSB0aGFuIDIgb3IgMyBVUkJzLCBzbyB3ZSB3aWxsIGlnbm9yZSB0aGUgVVJCX05PX0lOVEVSUlVQVAogCSAqIGZsYWcgc2V0dGluZy4gKi8KLQl0ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOwogCiAJLyoKIAkgKiBCdWlsZCB0aGUgbmV3IGR1bW15IFREIGFuZCBhY3RpdmF0ZSB0aGUgb2xkIG9uZQpAQCAtMTAxNSw3ICsxMDEzLDcgQEAKIAogCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAJd21iKCk7Ci0JcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOwogCXFoLT5kdW1teV90ZCA9IHRkOwogCiAJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLApAQCAtMTMxNyw3ICsxMzE1LDcgQEAKIAl9CiAKIAkvKiBTZXQgdGhlIGludGVycnVwdC1vbi1jb21wbGV0aW9uIGZsYWcgb24gdGhlIGxhc3QgcGFja2V0LiAqLwotCXRkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiAKIAkvKiBBZGQgdGhlIFREcyB0byB0aGUgZnJhbWUgbGlzdCAqLwogCWZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKQEAgLTE0OTQsMTEgKzE0OTIsMTAgQEAKIAogCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CiAKLQkJLyogdXJiLT5hY3R1YWxfbGVuZ3RoIDwgMCBtZWFucyB0aGUgc2V0dXAgdHJhbnNhY3Rpb24gZGlkbid0Ci0JCSAqIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4gIEVpdGhlciBpdCBmYWlsZWQgb3IgdGhlIFVSQiB3YXMKLQkJICogdW5saW5rZWQgZmlyc3QuICBSZWdhcmRsZXNzLCBkb24ndCBjb25mdXNlIHBlb3BsZSB3aXRoIGEKLQkJICogbmVnYXRpdmUgbGVuZ3RoLiAqLwotCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtYXgodXJiLT5hY3R1YWxfbGVuZ3RoLCAwKTsKKwkJLyogU3VidHJhY3Qgb2ZmIHRoZSBsZW5ndGggb2YgdGhlIFNFVFVQIHBhY2tldCBmcm9tCisJCSAqIHVyYi0+YWN0dWFsX2xlbmd0aC4KKwkJICovCisJCXVyYi0+YWN0dWFsX2xlbmd0aCAtPSBtaW5fdCh1MzIsIDgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCiAJLyogV2hlbiBnaXZpbmcgYmFjayB0aGUgZmlyc3QgVVJCIGluIGFuIElzb2Nocm9ub3VzIHF1ZXVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwppbmRleCA5NzJmMjBiLi5lY2EzNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPQkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9CTB4MDEsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKLQkJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoOCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTE5OCw3ICsxOTgsNyBAQAogCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODIsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMywKLQkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig4KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMjA4LDcgKzIwOCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHgwMywKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig2NCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODQsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKLQkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkud01heFBhY2tldFNpemUgPSAJY3B1X3RvX2xlMTYoNjQpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKaW5kZXggZTQ2M2RiNS4uYTY4ZDkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwpAQCAtMTM1LDQ1ICsxMzUsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3l0aGVybS4KIAotY29uZmlnIFVTQl9QSElER0VUCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0cyBkcml2ZXJzIgotCWRlcGVuZHMgb24gVVNCCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIHZhcmlvdXMgZHJpdmVycyBmb3IgZGV2aWNlcyBmcm9tCi0JICBQaGlkZ2V0cyBpbmMuCi0KLWNvbmZpZyBVU0JfUEhJREdFVEtJVAotCXRyaXN0YXRlICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0SW50ZXJmYWNlS2l0IFVTQiBkZXZpY2UKLQkgIGZyb20gUGhpZGdldHMgSW5jLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0a2l0LgotCi1jb25maWcgVVNCX1BISURHRVRNT1RPUkNPTlRST0wKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9QSElER0VUCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgUGhpZGdldE1vdG9yQ29udHJvbCBVU0IgZGV2aWNlCi0JICBmcm9tIFBoaWRnZXRzIEluYy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGhpZGdldG1vdG9yY29udHJvbC4KLQotY29uZmlnIFVTQl9QSElER0VUU0VSVk8KLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRTZXJ2byBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gMSBvciA0IE1vdG9yIFBoaWRnZXRTZXJ2byAKLQkgIHNlcnZvIGNvbnRyb2xsZXIgdmVyc2lvbiAyLjAgb3IgMy4wLgotCi0JICBQaGlkZ2V0cyBJbmMuIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0c2Vydm8uCi0KIGNvbmZpZyBVU0JfSURNT1VTRQogCXRyaXN0YXRlICJTaWVtZW5zIElEIFVTQiBNb3VzZSBGaW5nZXJwcmludCBzZW5zb3Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKaW5kZXggMTMzNGY3Yi4uMDgyNmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCkBAIC0xOCwxMCArMTgsNiBAQAogb2JqLSQoQ09ORklHX1VTQl9MRCkJCSs9IGxkdXNiLm8KIG9iai0kKENPTkZJR19VU0JfTEVEKQkJKz0gdXNibGVkLm8KIG9iai0kKENPTkZJR19VU0JfTEVHT1RPV0VSKQkrPSBsZWdvdXNidG93ZXIubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUKQkrPSBwaGlkZ2V0Lm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVEtJVCkJKz0gcGhpZGdldGtpdC5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVRNT1RPUkNPTlRST0wpCSs9IHBoaWRnZXRtb3RvcmNvbnRyb2wubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUU0VSVk8pCSs9IHBoaWRnZXRzZXJ2by5vCiBvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gcmlvNTAwLm8KIG9iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IHVzYnRlc3Qubwogb2JqLSQoQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUikJKz0gdHJhbmNldmlicmF0b3IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggNzlhNzY2OC4uOWQwNjc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHg4MiB8IChlZCA8PCA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdfbGVuZ3RoID09IDApIHsKQEAgLTE3MDIsNyArMTcwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZHJlc3MgPDwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gbWluKDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gbWluX3QodTMyLCAxMDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKICAgICAgICAgICAgICAgICBtdXRleF9sb2NrKCZmdGRpLT51MTMyX2xvY2spOwogICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmVtYWluaW5nX2xlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzVlZDMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIFVTQiBQaGlkZ2V0cyBjbGFzcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KLXN0cnVjdCBjbGFzcyAqcGhpZGdldF9jbGFzczsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9waGlkZ2V0KHZvaWQpCi17Ci0JcGhpZGdldF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInBoaWRnZXQiKTsKLQotCWlmIChJU19FUlIocGhpZGdldF9jbGFzcykpCi0JCXJldHVybiBQVFJfRVJSKHBoaWRnZXRfY2xhc3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3BoaWRnZXQodm9pZCkKLXsKLQljbGFzc19kZXN0cm95KHBoaWRnZXRfY2xhc3MpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChwaGlkZ2V0X2NsYXNzKTsKLQotbW9kdWxlX2luaXQoaW5pdF9waGlkZ2V0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfcGhpZGdldCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbnRhaW5lciBtb2R1bGUgZm9yIHBoaWRnZXQgY2xhc3MiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0LmggYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMTE5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldHMgY2xhc3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi1leHRlcm4gc3RydWN0IGNsYXNzICpwaGlkZ2V0X2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4ZTBhOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgL2Rldi9udWxsCkBAIC0xLDc0MCArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgZHJpdmVyIDEuMAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IERhbmllbCBTYWFrZXMgPGRhbmllbEBzYWFrZXMubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IERyaXZlciIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAwNAkweDAwNDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMTYxNgkweDAwNDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgJMHgwMDQ1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDQ3CTB4MDA1MQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OAkweDAwNTMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg0CTB4ODIwMQotCi0jZGVmaW5lIE1BWF9JTlRFUkZBQ0VTCQkJMTYKLQotI2RlZmluZSBVUkJfSU5UX1NJWkUJCQk4Ci0KLXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHsKLQlpbnQgc2Vuc29yczsKLQlpbnQgaW5wdXRzOwotCWludCBvdXRwdXRzOwotCWludCBoYXNfbGNkOwotCWludCBhbW5lc2lhYzsKLX07Ci0KLSNkZWZpbmUgaWZraXQoX3NlbnNvcnMsIF9pbnB1dHMsIF9vdXRwdXRzLCBfbGNkLCBfYW1uZXNpYWMpCQlcCi17CQkJCQkJCQkJXAotCS5zZW5zb3JzCT0gX3NlbnNvcnMsCQkJCQlcCi0JLmlucHV0cwkJPSBfaW5wdXRzLAkJCQkJXAotCS5vdXRwdXRzCT0gX291dHB1dHMsCQkJCQlcCi0JLmhhc19sY2QJPSBfbGNkLAkJCQkJCVwKLQkuYW1uZXNpYWMJPSBfYW1uZXNpYWMJCQkJCVwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF8wMDQgPSBpZmtpdCgwLCAwLCA0LCAwLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF84ODhuID0gaWZraXQoOCwgOCwgOCwgMCwgMSk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfODg4byA9IGlma2l0KDgsIDgsIDgsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzA0NyA9IGlma2l0KDAsIDQsIDcsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzg4NCA9IGlma2l0KDgsIDgsIDQsIDAsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzA4OCA9IGlma2l0KDAsIDgsIDgsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzAxNjE2ID0gaWZraXQoMCwgMTYsIDE2LCAwLCAwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgaW50ZXJmYWNla2l0IHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXVuc2lnbmVkIGxvbmcgb3V0cHV0czsKLQlpbnQgZGV2X25vOwotCXU4IGlucHV0c1tNQVhfSU5URVJGQUNFU107Ci0JdTE2IHNlbnNvcnNbTUFYX0lOVEVSRkFDRVNdOwotCXU4IGxjZF9maWxlc19vbjsKLQotCXN0cnVjdCB1cmIgKmlycTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX25vdGlmeTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX3Jlc3VibWl0OwotCXVuc2lnbmVkIGxvbmcgaW5wdXRfZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgc2Vuc29yX2V2ZW50czsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAwNH0sCi0Je1VTQl9ERVZJQ0VfVkVSKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgsIDAsIDB4ODE0KSwKLQkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODhvfSwKLQl7VVNCX0RFVklDRV9WRVIoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCwgMHgwODE1LCAweGZmZmYpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4OG59LAotCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwNDcpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzA0N30sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDg4fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDE2MTYpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAxNjE2fSwKLQl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODQpLAotCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4NH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgaW50IHNldF9vdXRwdXRzKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCkKLXsKLQl1OCAqYnVmZmVyOwotCWludCByZXR2YWw7Ci0KLQlidWZmZXIgPSBremFsbG9jKDQsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlidWZmZXJbMF0gPSAodTgpa2l0LT5vdXRwdXRzOwotCWJ1ZmZlclsxXSA9ICh1OCkoa2l0LT5vdXRwdXRzID4+IDgpOwotCi0JZGV2X2RiZygma2l0LT51ZGV2LT5kZXYsICJzZW5kaW5nIGRhdGE6IDB4JTA0eFxuIiwgKHUxNilraXQtPm91dHB1dHMpOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGtpdC0+dWRldiwKLQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA0LCAyMDAwKTsKLQotCWlmIChyZXR2YWwgIT0gNCkKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIAotCQkJCXJldHZhbCk7Ci0Ja2ZyZWUoYnVmZmVyKTsKLQotCWlmIChraXQtPmlma2l0LT5hbW5lc2lhYykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZraXQtPmRvX3Jlc3VibWl0LCBIWiAvIDIpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi1zdGF0aWMgaW50IGNoYW5nZV9zdHJpbmcoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0LCBjb25zdCBjaGFyICpkaXNwbGF5LCB1bnNpZ25lZCBjaGFyIHJvdykKLXsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqZm9ybV9idWZmZXI7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JaW50IGksaiwgbGVuLCBidWZfcHRyOwotCQotCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JZm9ybV9idWZmZXIgPSBrbWFsbG9jKDMwLCBHRlBfS0VSTkVMKTsKLQlpZiAoKCFidWZmZXIpIHx8ICghZm9ybV9idWZmZXIpKSB7Ci0JCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlsZW4gPSBzdHJsZW4oZGlzcGxheSk7Ci0JaWYgKGxlbiA+IDIwKQotCQlsZW4gPSAyMDsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBMQ0QgbGluZSAlZCB0byAlc1xuIiwgcm93LCBkaXNwbGF5KTsKLQotCWZvcm1fYnVmZmVyWzBdID0gcm93ICogMHg0MCArIDB4ODA7Ci0JZm9ybV9idWZmZXJbMV0gPSAweDAyOwotCWJ1Zl9wdHIgPSAyOwotCWZvciAoaSA9IDA7IGk8bGVuOyBpKyspCi0JCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSBkaXNwbGF5W2ldOwotCi0JZm9yIChpID0gMDsgaSA8ICgyMCAtIGxlbik7IGkrKykKLQkJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MjA7Ci0JZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MDE7Ci0JZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IHJvdyAqIDB4NDAgKyAweDgwICsgc3RybGVuKGRpc3BsYXkpOwotCi0JZm9yIChpID0gMDsgaSA8IGJ1Zl9wdHI7IGkgKz0gNykgewotCQlpZiAoKGJ1Zl9wdHIgLSBpKSA+IDcpCi0JCQlsZW4gPSA3OwotCQllbHNlCi0JCQlsZW4gPSAoYnVmX3B0ciAtIGkpOwotCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCi0JCQlidWZmZXJbal0gPSBmb3JtX2J1ZmZlcltpICsgal07Ci0JCWJ1ZmZlcls3XSA9IGxlbjsKLQotCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAotCQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IDA7Ci1leGl0OgotCWtmcmVlKGJ1ZmZlcik7Ci0Ja2ZyZWUoZm9ybV9idWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSBzZXRfbGNkX2xpbmUobnVtYmVyKQlcCi1zdGF0aWMgc3NpemVfdCBsY2RfbGluZV8jI251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKLQljaGFuZ2Vfc3RyaW5nKGtpdCwgYnVmLCBudW1iZXIgLSAxKTsJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQotCi0jZGVmaW5lIGxjZF9saW5lX2F0dHIobnVtYmVyKQkJCQkJCVwKLQlfX0FUVFIobGNkX2xpbmVfIyNudW1iZXIsIFNfSVdVR08sIE5VTEwsIGxjZF9saW5lXyMjbnVtYmVyKQotCi1zZXRfbGNkX2xpbmUoMSk7Ci1zZXRfbGNkX2xpbmUoMik7Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCWludCByZXR2YWwgPSAtRU5PTUVNOwotCQotCWJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlZCkgPCAxKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JaWYgKGVuYWJsZWQpCi0JCWJ1ZmZlclswXSA9IDB4MDE7Ci0JYnVmZmVyWzddID0gMHgxMTsKLQotCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBiYWNrbGlnaHQgdG8gJXNcbiIsIGVuYWJsZWQgPyAib24iIDogIm9mZiIpOwotCQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCi0JCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZXhpdDsKLQotCXJldHZhbCA9IGNvdW50OwotZXhpdDoKLQlrZnJlZShidWZmZXIpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfbGNkX2xpbmVfYXR0cnNbXSA9IHsKLQlsY2RfbGluZV9hdHRyKDEpLAotCWxjZF9saW5lX2F0dHIoMiksCi0JX19BVFRSKGJhY2tsaWdodCwgU19JV1VHTywgTlVMTCwgc2V0X2JhY2tsaWdodCkKLX07Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9sY2RfZmlsZXMoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0KQotewotCWludCBpOwotCi0JaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiUmVtb3ZpbmcgbGNkIGZpbGVzXG4iKTsKLQotCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9sY2RfbGluZV9hdHRycyk7IGkrKykKLQkJCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9sY2RfbGluZV9hdHRyc1tpXSk7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdCBlbmFibGVfbGNkX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBlbmFibGU7Ci0JaW50IGksIHJjOwotCQotCWlmIChraXQtPmlma2l0LT5oYXNfbGNkID09IDApCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmICgha2l0LT5sY2RfZmlsZXNfb24pIHsKLQkJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiQWRkaW5nIGxjZCBmaWxlc1xuIik7Ci0JCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9sY2RfbGluZV9hdHRycyk7IGkrKykgewotCQkJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LAotCQkJCQkmZGV2X2xjZF9saW5lX2F0dHJzW2ldKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJa2l0LT5sY2RfZmlsZXNfb24gPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7Ci0JCQlyZW1vdmVfbGNkX2ZpbGVzKGtpdCk7Ci0JCQlraXQtPmxjZF9maWxlc19vbiA9IDA7Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIGNvdW50Owotb3V0OgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfbGNkX2xpbmVfYXR0cnNbaV0pOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobGNkLCBTX0lXVUdPLCBOVUxMLCBlbmFibGVfbGNkX2ZpbGVzKTsKLQotc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2lycShzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGtpdC0+ZGF0YTsKLQlpbnQgaSwgbGV2ZWwsIHNlbnNvcjsKLQlpbnQgcmV0dmFsOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCi0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJcmV0dXJuOwotCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwotCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlnb3RvIHJlc3VibWl0OwotCX0KLQotCS8qIGRpZ2l0YWwgaW5wdXRzICovCi0JaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSAxNikgewotCQlmb3IgKGk9MDsgaSA8IDg7IGkrKykgewotCQkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1tpXSAhPSBsZXZlbCkgewotCQkJCWtpdC0+aW5wdXRzW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQkJbGV2ZWwgPSAoYnVmZmVyWzFdID4+IGkpICYgMTsKLQkJCWlmIChraXQtPmlucHV0c1s4ICsgaV0gIT0gbGV2ZWwpIHsKLQkJCQlraXQtPmlucHV0c1s4ICsgaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KDggKyBpLCAma2l0LT5pbnB1dF9ldmVudHMpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UgaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSA4KSB7Ci0JCWZvciAoaT0wOyBpIDwgODsgaSsrKSB7Ci0JCQlsZXZlbCA9IChidWZmZXJbMV0gPj4gaSkgJiAxOwotCQkJaWYgKGtpdC0+aW5wdXRzW2ldICE9IGxldmVsKSB7Ci0JCQkJa2l0LT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCQlzZXRfYml0KGksICZraXQtPmlucHV0X2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBhbmFsb2cgaW5wdXRzICovCi0JaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMpIHsKLQkJc2Vuc29yID0gKGJ1ZmZlclswXSAmIDEpID8gNCA6IDA7Ci0KLQkJbGV2ZWwgPSBidWZmZXJbMl0gKyAoYnVmZmVyWzNdICYgMHgwZikgKiAyNTY7Ci0JCWlmIChsZXZlbCAhPSBraXQtPnNlbnNvcnNbc2Vuc29yXSkgewotCQkJa2l0LT5zZW5zb3JzW3NlbnNvcl0gPSBsZXZlbDsKLQkJCXNldF9iaXQoc2Vuc29yLCAma2l0LT5zZW5zb3JfZXZlbnRzKTsKLQkJfQotCQlzZW5zb3IrKzsKLQkJbGV2ZWwgPSBidWZmZXJbNF0gKyAoYnVmZmVyWzNdICYgMHhmMCkgKiAxNjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls1XSArIChidWZmZXJbNl0gJiAweDBmKSAqIDI1NjsKLQkJaWYgKGxldmVsICE9IGtpdC0+c2Vuc29yc1tzZW5zb3JdKSB7Ci0JCQlraXQtPnNlbnNvcnNbc2Vuc29yXSA9IGxldmVsOwotCQkJc2V0X2JpdChzZW5zb3IsICZraXQtPnNlbnNvcl9ldmVudHMpOwotCQl9Ci0JCXNlbnNvcisrOwotCQlsZXZlbCA9IGJ1ZmZlcls3XSArIChidWZmZXJbNl0gJiAweGYwKSAqIDE2OwotCQlpZiAobGV2ZWwgIT0ga2l0LT5zZW5zb3JzW3NlbnNvcl0pIHsKLQkJCWtpdC0+c2Vuc29yc1tzZW5zb3JdID0gbGV2ZWw7Ci0JCQlzZXRfYml0KHNlbnNvciwgJmtpdC0+c2Vuc29yX2V2ZW50cyk7Ci0JCX0KLQl9Ci0KLQlpZiAoa2l0LT5pbnB1dF9ldmVudHMgfHwga2l0LT5zZW5zb3JfZXZlbnRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fbm90aWZ5LCAwKTsKLQotcmVzdWJtaXQ6Ci0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0dmFsKQotCQllcnIoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2ludGVyZmFjZWtpdDAsIHJldHZhbCAlZCIsCi0JCQlraXQtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQlraXQtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX25vdGlmeShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlcmZhY2VraXQsIGRvX25vdGlmeS53b3JrKTsKLQlpbnQgaTsKLQljaGFyIHN5c2ZzX2ZpbGVbOF07Ci0KLQlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5pbnB1dHM7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPmlucHV0X2V2ZW50cykpIHsKLQkJCXNwcmludGYoc3lzZnNfZmlsZSwgImlucHV0JWQiLCBpICsgMSk7Ci0JCQlzeXNmc19ub3RpZnkoJmtpdC0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKLQkJfQotCX0KLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPnNlbnNvcnM7IGkrKykgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPnNlbnNvcl9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzZW5zb3IlZCIsIGkgKyAxKTsKLQkJCXN5c2ZzX25vdGlmeSgma2l0LT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkb19yZXN1Ym1pdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbnRlcmZhY2VraXQsIGRvX3Jlc3VibWl0LndvcmspOwotCXNldF9vdXRwdXRzKGtpdCk7Ci19Ci0KLSNkZWZpbmUgc2hvd19zZXRfb3V0cHV0KHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X291dHB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JaW50IGVuYWJsZTsJCQkJCQkJXAotCWludCByZXR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZSkgPCAxKQkJCQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoZW5hYmxlKQkJCQkJCQlcCi0JCXNldF9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKTsJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQljbGVhcl9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKTsgCQkJXAotCQkJCQkJCQkJXAotCXJldHZhbCA9IHNldF9vdXRwdXRzKGtpdCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhdGVzdF9iaXQodmFsdWUgLSAxLCAma2l0LT5vdXRwdXRzKSk7XAotfQotCi0jZGVmaW5lIG91dHB1dF9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIob3V0cHV0IyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAotCQlzaG93X291dHB1dCMjdmFsdWUsIHNldF9vdXRwdXQjI3ZhbHVlKQotCi1zaG93X3NldF9vdXRwdXQoMSk7Ci1zaG93X3NldF9vdXRwdXQoMik7Ci1zaG93X3NldF9vdXRwdXQoMyk7Ci1zaG93X3NldF9vdXRwdXQoNCk7Ci1zaG93X3NldF9vdXRwdXQoNSk7Ci1zaG93X3NldF9vdXRwdXQoNik7Ci1zaG93X3NldF9vdXRwdXQoNyk7Ci1zaG93X3NldF9vdXRwdXQoOCk7Ci1zaG93X3NldF9vdXRwdXQoOSk7Ci1zaG93X3NldF9vdXRwdXQoMTApOwotc2hvd19zZXRfb3V0cHV0KDExKTsKLXNob3dfc2V0X291dHB1dCgxMik7Ci1zaG93X3NldF9vdXRwdXQoMTMpOwotc2hvd19zZXRfb3V0cHV0KDE0KTsKLXNob3dfc2V0X291dHB1dCgxNSk7Ci1zaG93X3NldF9vdXRwdXQoMTYpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X291dHB1dF9hdHRyc1tdID0gewotCW91dHB1dF9hdHRyKDEpLCBvdXRwdXRfYXR0cigyKSwgb3V0cHV0X2F0dHIoMyksIG91dHB1dF9hdHRyKDQpLAotCW91dHB1dF9hdHRyKDUpLCBvdXRwdXRfYXR0cig2KSwgb3V0cHV0X2F0dHIoNyksIG91dHB1dF9hdHRyKDgpLAotCW91dHB1dF9hdHRyKDkpLCBvdXRwdXRfYXR0cigxMCksIG91dHB1dF9hdHRyKDExKSwgb3V0cHV0X2F0dHIoMTIpLAotCW91dHB1dF9hdHRyKDEzKSwgb3V0cHV0X2F0dHIoMTQpLCBvdXRwdXRfYXR0cigxNSksIG91dHB1dF9hdHRyKDE2KQotfTsKLQotI2RlZmluZSBzaG93X2lucHV0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2lucHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJCVwKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpa2l0LT5pbnB1dHNbdmFsdWUgLSAxXSk7CVwKLX0KLQotI2RlZmluZSBpbnB1dF9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19pbnB1dCgxKTsKLXNob3dfaW5wdXQoMik7Ci1zaG93X2lucHV0KDMpOwotc2hvd19pbnB1dCg0KTsKLXNob3dfaW5wdXQoNSk7Ci1zaG93X2lucHV0KDYpOwotc2hvd19pbnB1dCg3KTsKLXNob3dfaW5wdXQoOCk7Ci1zaG93X2lucHV0KDkpOwotc2hvd19pbnB1dCgxMCk7Ci1zaG93X2lucHV0KDExKTsKLXNob3dfaW5wdXQoMTIpOwotc2hvd19pbnB1dCgxMyk7Ci1zaG93X2lucHV0KDE0KTsKLXNob3dfaW5wdXQoMTUpOwotc2hvd19pbnB1dCgxNik7Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfaW5wdXRfYXR0cnNbXSA9IHsKLQlpbnB1dF9hdHRyKDEpLCBpbnB1dF9hdHRyKDIpLCBpbnB1dF9hdHRyKDMpLCBpbnB1dF9hdHRyKDQpLAotCWlucHV0X2F0dHIoNSksIGlucHV0X2F0dHIoNiksIGlucHV0X2F0dHIoNyksIGlucHV0X2F0dHIoOCksCi0JaW5wdXRfYXR0cig5KSwgaW5wdXRfYXR0cigxMCksIGlucHV0X2F0dHIoMTEpLCBpbnB1dF9hdHRyKDEyKSwKLQlpbnB1dF9hdHRyKDEzKSwgaW5wdXRfYXR0cigxNCksIGlucHV0X2F0dHIoMTUpLCBpbnB1dF9hdHRyKDE2KQotfTsKLQotI2RlZmluZSBzaG93X3NlbnNvcih2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zZW5zb3IjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNoYXIgKmJ1ZikJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWtpdC0+c2Vuc29yc1t2YWx1ZSAtIDFdKTsJXAotfQotCi0jZGVmaW5lIHNlbnNvcl9hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoc2Vuc29yIyN2YWx1ZSwgU19JUlVHTywgc2hvd19zZW5zb3IjI3ZhbHVlLCBOVUxMKQotCi1zaG93X3NlbnNvcigxKTsKLXNob3dfc2Vuc29yKDIpOwotc2hvd19zZW5zb3IoMyk7Ci1zaG93X3NlbnNvcig0KTsKLXNob3dfc2Vuc29yKDUpOwotc2hvd19zZW5zb3IoNik7Ci1zaG93X3NlbnNvcig3KTsKLXNob3dfc2Vuc29yKDgpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X3NlbnNvcl9hdHRyc1tdID0gewotCXNlbnNvcl9hdHRyKDEpLCBzZW5zb3JfYXR0cigyKSwgc2Vuc29yX2F0dHIoMyksIHNlbnNvcl9hdHRyKDQpLAotCXNlbnNvcl9hdHRyKDUpLCBzZW5zb3JfYXR0cig2KSwgc2Vuc29yX2F0dHIoNyksIHNlbnNvcl9hdHRyKDgpCi19OwotCi1zdGF0aWMgaW50IGludGVyZmFjZWtpdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdDsKLQlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7Ci0JaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKLQlpbnQgYml0LCB2YWx1ZSwgaTsKLQotCWlma2l0ID0gKHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICopaWQtPmRyaXZlcl9pbmZvOwotCWlmICghaWZraXQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOwotCWlmICghdXNiX2VuZHBvaW50X2Rpcl9pbihlbmRwb2ludCkpCi0JCXJldHVybiAtRU5PREVWOwotCS8qCi0JICogYm1BdHRyaWJ1dGVzCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCQotCWtpdCA9IGt6YWxsb2Moc2l6ZW9mKCpraXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtpdCkKLQkJZ290byBvdXQ7Ci0KLQlraXQtPmRldl9ubyA9IC0xOwotCWtpdC0+aWZraXQgPSBpZmtpdDsKLQlraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgVVJCX0lOVF9TSVpFLCBHRlBfQVRPTUlDLCAma2l0LT5kYXRhX2RtYSk7Ci0JaWYgKCFraXQtPmRhdGEpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICgha2l0LT5pcnEpCi0JCWdvdG8gb3V0OwotCi0Ja2l0LT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKLQlraXQtPmludGYgPSBpbnRmOwotCUlOSVRfREVMQVlFRF9XT1JLKCZraXQtPmRvX25vdGlmeSwgZG9fbm90aWZ5KTsKLQlJTklUX0RFTEFZRURfV09SSygma2l0LT5kb19yZXN1Ym1pdCwgZG9fcmVzdWJtaXQpOwotCXVzYl9maWxsX2ludF91cmIoa2l0LT5pcnEsIGtpdC0+dWRldiwgcGlwZSwga2l0LT5kYXRhLAotCQkJbWF4cCA+IFVSQl9JTlRfU0laRSA/IFVSQl9JTlRfU0laRSA6IG1heHAsCi0JCQlpbnRlcmZhY2VraXRfaXJxLCBraXQsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCWtpdC0+aXJxLT50cmFuc2Zlcl9kbWEgPSBraXQtPmRhdGFfZG1hOwotCWtpdC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2l0KTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0gICAgICAgIH0gd2hpbGUodmFsdWUpOwotICAgICAgICBraXQtPmRldl9ubyA9IGJpdDsKLQotCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAma2l0LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAotCQkJCSBraXQsICJpbnRlcmZhY2VraXQlZCIsIGtpdC0+ZGV2X25vKTsKLSAgICAgICAgaWYgKElTX0VSUihraXQtPmRldikpIHsKLSAgICAgICAgICAgICAgICByYyA9IFBUUl9FUlIoa2l0LT5kZXYpOwotICAgICAgICAgICAgICAgIGtpdC0+ZGV2ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0JaWYgKHVzYl9zdWJtaXRfdXJiKGtpdC0+aXJxLCBHRlBfS0VSTkVMKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5vdXRwdXRzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0MjsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxpZmtpdC0+aW5wdXRzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2lucHV0X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQzOwotCX0KLQotCWZvciAoaT0wOyBpPGlma2l0LT5zZW5zb3JzOyBpKysgKSB7Ci0JCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0NDsKLQl9Ci0KLQlpZiAoaWZraXQtPmhhc19sY2QpIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfYXR0cl9sY2QpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDQ7Ci0KLQl9Ci0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgYXR0YWNoZWRcbiIsCi0JCQlpZmtpdC0+c2Vuc29ycywgaWZraXQtPmlucHV0cywgaWZraXQtPm91dHB1dHMpOwotCi0JcmV0dXJuIDA7Ci0KLW91dDQ6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9zZW5zb3JfYXR0cnNbaV0pOwotCi0JaSA9IGlma2l0LT5pbnB1dHM7Ci1vdXQzOgotCXdoaWxlIChpLS0gPiAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCi0JaSA9IGlma2l0LT5vdXRwdXRzOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7Ci1vdXQ6Ci0JaWYgKGtpdCkgewotCQl1c2JfZnJlZV91cmIoa2l0LT5pcnEpOwotCQlpZiAoa2l0LT5kYXRhKQotCQkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOwotCQlpZiAoa2l0LT5kZXYpCi0JCQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7Ci0JCWlmIChraXQtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCQlrZnJlZShraXQpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgaW50ZXJmYWNla2l0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQ7Ci0JaW50IGk7Ci0KLQlraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCWlmICgha2l0KQotCQlyZXR1cm47Ci0KLQl1c2Jfa2lsbF91cmIoa2l0LT5pcnEpOwotCXVzYl9mcmVlX3VyYihraXQtPmlycSk7Ci0JdXNiX2J1ZmZlcl9mcmVlKGtpdC0+dWRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygma2l0LT5kb19ub3RpZnkpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fcmVzdWJtaXQpOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+b3V0cHV0czsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfb3V0cHV0X2F0dHJzW2ldKTsKLQotCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPmlucHV0czsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOwotCi0JZm9yIChpPTA7IGk8a2l0LT5pZmtpdC0+c2Vuc29yczsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfc2Vuc29yX2F0dHJzW2ldKTsKLQotCWlmIChraXQtPmlma2l0LT5oYXNfbGNkKSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9hdHRyX2xjZCk7Ci0JCXJlbW92ZV9sY2RfZmlsZXMoa2l0KTsKLQl9Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7Ci0KLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCAlZC8lZC8lZCBkZXRhY2hlZFxuIiwKLQkJa2l0LT5pZmtpdC0+c2Vuc29ycywga2l0LT5pZmtpdC0+aW5wdXRzLCBraXQtPmlma2l0LT5vdXRwdXRzKTsKLQotCXVzYl9wdXRfZGV2KGtpdC0+dWRldik7Ci0JY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQotCWtmcmVlKGtpdCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbnRlcmZhY2VraXRfZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRraXQiLAotCS5wcm9iZSA9IGludGVyZmFjZWtpdF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IGludGVyZmFjZWtpdF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlcmZhY2VraXRfaW5pdCh2b2lkKQotewotCWludCByZXR2YWwgPSAwOwotCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpbnRlcmZhY2VraXRfZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaW50ZXJmYWNla2l0X2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmaW50ZXJmYWNla2l0X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGludGVyZmFjZWtpdF9pbml0KTsKLW1vZHVsZV9leGl0KGludGVyZmFjZWtpdF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA4OGI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY1ICswLDAgQEAKLS8qCi0gKiBVU0IgUGhpZGdldCBNb3RvckNvbnRyb2wgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSAicGhpZGdldC5oIgotCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgotI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgRHJpdmVyIgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTU9UT1JDT05UUk9MCTB4MDA1OAotCi0jZGVmaW5lIFVSQl9JTlRfU0laRQkJCTgKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOwotCi1zdHJ1Y3QgbW90b3Jjb250cm9sIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldl9ubzsKLQl1OCBpbnB1dHNbNF07Ci0JczggZGVzaXJlZF9zcGVlZFsyXTsKLQlzOCBzcGVlZFsyXTsKLQlzMTYgX2N1cnJlbnRbMl07Ci0JczggYWNjZWxlcmF0aW9uWzJdOwotCXN0cnVjdCB1cmIgKmlycTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGRvX25vdGlmeTsKLQl1bnNpZ25lZCBsb25nIGlucHV0X2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHNwZWVkX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIGV4Y2VlZF9ldmVudHM7Ci19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX01PVE9SQ09OVFJPTCkgfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgc2V0X21vdG9yKHN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jLCBpbnQgbW90b3IpCi17Ci0JdTggKmJ1ZmZlcjsKLQlpbnQgc3BlZWQsIHNwZWVkMiwgYWNjZWxlcmF0aW9uOwotCWludCByZXR2YWw7Ci0KLQlidWZmZXIgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JYWNjZWxlcmF0aW9uID0gbWMtPmFjY2VsZXJhdGlvblttb3Rvcl0gKiAxMDsKLQkvKiAtMTI3IDw9IHNwZWVkIDw9IDEyNyAqLwotCXNwZWVkID0gKG1jLT5kZXNpcmVkX3NwZWVkW21vdG9yXSAqIDEyNykgLyAxMDA7Ci0JLyogLTB4NzMwMCA8PSBzcGVlZDIgPD0gMHg3MzAwICovCi0Jc3BlZWQyID0gKG1jLT5kZXNpcmVkX3NwZWVkW21vdG9yXSAqIDIzMCAqIDEyOCkgLyAxMDA7Ci0KLQlidWZmZXJbMF0gPSBtb3RvcjsKLQlidWZmZXJbMV0gPSBzcGVlZDsKLQlidWZmZXJbMl0gPSBhY2NlbGVyYXRpb24gPj4gODsKLQlidWZmZXJbM10gPSBhY2NlbGVyYXRpb247Ci0JYnVmZmVyWzRdID0gc3BlZWQyID4+IDg7Ci0JYnVmZmVyWzVdID0gc3BlZWQyOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKG1jLT51ZGV2LAotCQkJIHVzYl9zbmRjdHJscGlwZShtYy0+dWRldiwgMCksCi0JCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7Ci0KLQlpZiAocmV0dmFsICE9IDgpCi0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCi0JCQkJcmV0dmFsKTsKLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBtb3RvcmNvbnRyb2xfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBtYy0+ZGF0YTsKLQlpbnQgaSwgbGV2ZWw7Ci0JaW50IHJldHZhbDsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7OwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQlyZXR1cm47Ci0JLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCi0JZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCWdvdG8gcmVzdWJtaXQ7Ci0JfQotCi0JLyogZGlnaXRhbCBpbnB1dHMgKi8KLQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKLQkJaWYgKG1jLT5pbnB1dHNbaV0gIT0gbGV2ZWwpIHsKLQkJCW1jLT5pbnB1dHNbaV0gPSBsZXZlbDsKLQkJCXNldF9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpOwotCQl9Ci0JfQotCi0JLyogbW90b3Igc3BlZWQgKi8KLQlpZiAoYnVmZmVyWzJdID09IDApIHsKLQkJZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWxldmVsID0gKChzOClidWZmZXJbNCtpXSkgKiAxMDAgLyAxMjc7Ci0JCQlpZiAobWMtPnNwZWVkW2ldICE9IGxldmVsKSB7Ci0JCQkJbWMtPnNwZWVkW2ldID0gbGV2ZWw7Ci0JCQkJc2V0X2JpdChpLCAmbWMtPnNwZWVkX2V2ZW50cyk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgaW5kZXggPSBidWZmZXJbM10gJiAxOwotCi0JCWxldmVsID0gKChzOClidWZmZXJbNF0gPDwgOCkgfCBidWZmZXJbNV07Ci0JCWxldmVsID0gbGV2ZWwgKiAxMDAgLyAyOTQ0MDsKLQkJaWYgKG1jLT5zcGVlZFtpbmRleF0gIT0gbGV2ZWwpIHsKLQkJCW1jLT5zcGVlZFtpbmRleF0gPSBsZXZlbDsKLQkJCXNldF9iaXQoaW5kZXgsICZtYy0+c3BlZWRfZXZlbnRzKTsKLQkJfQotCi0JCWxldmVsID0gKChzOClidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107Ci0JCW1jLT5fY3VycmVudFtpbmRleF0gPSBsZXZlbCAqIDEwMCAvIDE1NzI7Ci0JfQotCi0JaWYgKGJ1ZmZlclsxXSAmIDEpCi0JCXNldF9iaXQoMCwgJm1jLT5leGNlZWRfZXZlbnRzKTsKLQotCWlmIChidWZmZXJbMV0gJiAyKQotCQlzZXRfYml0KDEsICZtYy0+ZXhjZWVkX2V2ZW50cyk7Ci0KLQlpZiAobWMtPmlucHV0X2V2ZW50cyB8fCBtYy0+ZXhjZWVkX2V2ZW50cyB8fCBtYy0+c3BlZWRfZXZlbnRzKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1jLT5kb19ub3RpZnksIDApOwotCi1yZXN1Ym1pdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpCi0JCWRldl9lcnIoJm1jLT5pbnRmLT5kZXYsCi0JCQkiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvbW90b3Jjb250cm9sMCwgcmV0dmFsICVkXG4iLAotCQkJbWMtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQltYy0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbW90b3Jjb250cm9sLCBkb19ub3RpZnkud29yayk7Ci0JaW50IGk7Ci0JY2hhciBzeXNmc19maWxlWzhdOwotCi0JZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJpbnB1dCVkIiwgaSk7Ci0JCQlzeXNmc19ub3RpZnkoJm1jLT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5zcGVlZF9ldmVudHMpKSB7Ci0JCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzcGVlZCVkIiwgaSk7Ci0JCQlzeXNmc19ub3RpZnkoJm1jLT5kZXYtPmtvYmosIE5VTEwsIHN5c2ZzX2ZpbGUpOwotCQl9Ci0JfQotCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJm1jLT5leGNlZWRfZXZlbnRzKSkKLQkJCWRldl93YXJuKCZtYy0+aW50Zi0+ZGV2LAotCQkJCSJtb3RvciAjJWQgZXhjZWVkcyAxLjUgQW1wIGN1cnJlbnQgbGltaXRcbiIsIGkpOwotCX0KLX0KLQotI2RlZmluZSBzaG93X3NldF9zcGVlZCh2YWx1ZSkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9zcGVlZCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IHNwZWVkOwkJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmc3BlZWQpIDwgMSkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKHNwZWVkIDwgLTEwMCB8fCBzcGVlZCA+IDEwMCkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbWMtPmRlc2lyZWRfc3BlZWRbdmFsdWVdID0gc3BlZWQ7CQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR2YWwgPSBzZXRfbW90b3IobWMsIHZhbHVlKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zcGVlZCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1jLT5zcGVlZFt2YWx1ZV0pOwkJCVwKLX0KLQotI2RlZmluZSBzcGVlZF9hdHRyKHZhbHVlKSAJCQkJCQlcCi0JX19BVFRSKHNwZWVkIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIAkJCVwKLQkJc2hvd19zcGVlZCMjdmFsdWUsIHNldF9zcGVlZCMjdmFsdWUpCi0KLXNob3dfc2V0X3NwZWVkKDApOwotc2hvd19zZXRfc3BlZWQoMSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfYWNjZWxlcmF0aW9uKHZhbHVlKQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X2FjY2VsZXJhdGlvbiMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCAJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JaW50IGFjY2VsZXJhdGlvbjsJCQkJCQlcCi0JaW50IHJldHZhbDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmYWNjZWxlcmF0aW9uKSA8IDEpCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKGFjY2VsZXJhdGlvbiA8IDAgfHwgYWNjZWxlcmF0aW9uID4gMTAwKQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCW1jLT5hY2NlbGVyYXRpb25bdmFsdWVdID0gYWNjZWxlcmF0aW9uOwkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dmFsID0gc2V0X21vdG9yKG1jLCB2YWx1ZSk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfYWNjZWxlcmF0aW9uIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCSAJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQkJCWNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbWMtPmFjY2VsZXJhdGlvblt2YWx1ZV0pOwkJXAotfQotCi0jZGVmaW5lIGFjY2VsZXJhdGlvbl9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGFjY2VsZXJhdGlvbiMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKLQkJc2hvd19hY2NlbGVyYXRpb24jI3ZhbHVlLCBzZXRfYWNjZWxlcmF0aW9uIyN2YWx1ZSkKLQotc2hvd19zZXRfYWNjZWxlcmF0aW9uKDApOwotc2hvd19zZXRfYWNjZWxlcmF0aW9uKDEpOwotCi0jZGVmaW5lIHNob3dfY3VycmVudCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19jdXJyZW50IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQljaGFyICpidWYpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZG1BXG4iLCAoaW50KW1jLT5fY3VycmVudFt2YWx1ZV0pOwlcCi19Ci0KLSNkZWZpbmUgY3VycmVudF9hdHRyKHZhbHVlKQlcCi0JX19BVFRSKGN1cnJlbnQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2N1cnJlbnQjI3ZhbHVlLCBOVUxMKQotCi1zaG93X2N1cnJlbnQoMCk7Ci1zaG93X2N1cnJlbnQoMSk7Ci0KLSNkZWZpbmUgc2hvd19pbnB1dCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19pbnB1dCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpbWMtPmlucHV0c1t2YWx1ZV0pOwkJXAotfQotCi0jZGVmaW5lIGlucHV0X2F0dHIodmFsdWUpCVwKLQlfX0FUVFIoaW5wdXQjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X2lucHV0IyN2YWx1ZSwgTlVMTCkKLQotc2hvd19pbnB1dCgwKTsKLXNob3dfaW5wdXQoMSk7Ci1zaG93X2lucHV0KDIpOwotc2hvd19pbnB1dCgzKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyc1tdID0gewotCWlucHV0X2F0dHIoMCksCi0JaW5wdXRfYXR0cigxKSwKLQlpbnB1dF9hdHRyKDIpLAotCWlucHV0X2F0dHIoMyksCi0Jc3BlZWRfYXR0cigwKSwKLQlzcGVlZF9hdHRyKDEpLAotCWFjY2VsZXJhdGlvbl9hdHRyKDApLAotCWFjY2VsZXJhdGlvbl9hdHRyKDEpLAotCWN1cnJlbnRfYXR0cigwKSwKLQljdXJyZW50X2F0dHIoMSkKLX07Ci0KLXN0YXRpYyBpbnQgbW90b3Jjb250cm9sX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWM7Ci0JaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKLQlpbnQgYml0LCB2YWx1ZSwgaTsKLQotCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKLQlpZiAoIXVzYl9lbmRwb2ludF9kaXJfaW4oZW5kcG9pbnQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JICogYm1BdHRyaWJ1dGVzCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCi0JbWMgPSBremFsbG9jKHNpemVvZigqbWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1jKQotCQlnb3RvIG91dDsKLQotCW1jLT5kZXZfbm8gPSAtMTsKLQltYy0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBVUkJfSU5UX1NJWkUsIEdGUF9BVE9NSUMsICZtYy0+ZGF0YV9kbWEpOwotCWlmICghbWMtPmRhdGEpCi0JCWdvdG8gb3V0OwotCi0JbWMtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYy0+aXJxKQotCQlnb3RvIG91dDsKLQotCW1jLT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKLQltYy0+aW50ZiA9IGludGY7Ci0JbWMtPmFjY2VsZXJhdGlvblswXSA9IG1jLT5hY2NlbGVyYXRpb25bMV0gPSAxMDsKLQlJTklUX0RFTEFZRURfV09SSygmbWMtPmRvX25vdGlmeSwgZG9fbm90aWZ5KTsKLQl1c2JfZmlsbF9pbnRfdXJiKG1jLT5pcnEsIG1jLT51ZGV2LCBwaXBlLCBtYy0+ZGF0YSwKLQkJCW1heHAgPiBVUkJfSU5UX1NJWkUgPyBVUkJfSU5UX1NJWkUgOiBtYXhwLAotCQkJbW90b3Jjb250cm9sX2lycSwgbWMsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwotCW1jLT5pcnEtPnRyYW5zZmVyX2RtYSA9IG1jLT5kYXRhX2RtYTsKLQltYy0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWMpOwotCi0JZG8gewotCQliaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLQkJdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7Ci0JfSB3aGlsZSh2YWx1ZSk7Ci0JbWMtPmRldl9ubyA9IGJpdDsKLQotCW1jLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwgbWMsCi0JCQkJIm1vdG9yY29udHJvbCVkIiwgbWMtPmRldl9ubyk7Ci0JaWYgKElTX0VSUihtYy0+ZGV2KSkgewotCQlyYyA9IFBUUl9FUlIobWMtPmRldik7Ci0JCW1jLT5kZXYgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodXNiX3N1Ym1pdF91cmIobWMtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9hdHRycyk7IGkrKykgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQyOwotCX0KLQotCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBhdHRhY2hlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLW91dDI6Ci0Jd2hpbGUgKGktLSA+IDApCi0JCWRldmljZV9yZW1vdmVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAobWMpIHsKLQkJdXNiX2ZyZWVfdXJiKG1jLT5pcnEpOwotCQlpZiAobWMtPmRhdGEpCi0JCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBVUkJfSU5UX1NJWkUsIG1jLT5kYXRhLCBtYy0+ZGF0YV9kbWEpOwotCQlpZiAobWMtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKG1jLT5kZXYpOwotCQlpZiAobWMtPmRldl9ubyA+PSAwKQotCQkJY2xlYXJfYml0KG1jLT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKG1jKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vdG9yY29udHJvbF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IG1vdG9yY29udHJvbCAqbWM7Ci0JaW50IGk7Ci0KLQltYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0JaWYgKCFtYykKLQkJcmV0dXJuOwotCi0JdXNiX2tpbGxfdXJiKG1jLT5pcnEpOwotCXVzYl9mcmVlX3VyYihtYy0+aXJxKTsKLQl1c2JfYnVmZmVyX2ZyZWUobWMtPnVkZXYsIFVSQl9JTlRfU0laRSwgbWMtPmRhdGEsIG1jLT5kYXRhX2RtYSk7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrKCZtYy0+ZG9fbm90aWZ5KTsKLQotCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2F0dHJzKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUobWMtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihtYy0+ZGV2KTsKLQotCXVzYl9wdXRfZGV2KG1jLT51ZGV2KTsKLQljbGVhcl9iaXQobWMtPmRldl9ubywgJmRldmljZV9ubyk7Ci0Ja2ZyZWUobWMpOwotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgZGV0YWNoZWRcbiIpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbW90b3Jjb250cm9sX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwaGlkZ2V0bW90b3Jjb250cm9sIiwKLQkucHJvYmUgPSBtb3RvcmNvbnRyb2xfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBtb3RvcmNvbnRyb2xfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPSBpZF90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQgbW90b3Jjb250cm9sX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbW90b3Jjb250cm9sX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1vdG9yY29udHJvbF9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJm1vdG9yY29udHJvbF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChtb3RvcmNvbnRyb2xfaW5pdCk7Ci1tb2R1bGVfZXhpdChtb3RvcmNvbnRyb2xfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZjZmZTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKgotICogVVNCIFBoaWRnZXRTZXJ2byBkcml2ZXIgMS4wCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRTZXJ2byB2ZXJzaW9uIDIuMCBhbmQgMy4wIHNlcnZvIAotICogY29udHJvbGxlcnMgYXZhaWxhYmxlIGF0OiBodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8gCi0gKgotICogTm90ZSB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5wdXQgYXM6IGRlZ3JlZXMubWludXRlcwotICoKLSAqIENBVVRJT046IEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSAwIDwgZGVncmVlcyA8IDE4MCBhcyBhbnl0aGluZyBlbHNlCi0gKiBpcyBwcm9iYWJseSBiZXlvbmQgdGhlIHJhbmdlIG9mIHlvdXIgc2Vydm8gYW5kIG1heSBkYW1hZ2UgaXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgInBoaWRnZXQuaCIKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0U2Vydm8gRHJpdmVyIgotCi0jZGVmaW5lIFZFTkRPUl9JRF9HTEFCCQkJCTB4MDZjMgotI2RlZmluZSBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRAkweDAwMzgKLSNkZWZpbmUgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSQkJMHgwMDM5Ci0KLSNkZWZpbmUgVkVORE9SX0lEX1dJU0VHUk9VUAkJCTB4MDkyNQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19RVUFECTB4ODEwMQotI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19VTkkJMHg4MTA0Ci0KLSNkZWZpbmUgU0VSVk9fVkVSU0lPTl8zMAkJCTB4MDEKLSNkZWZpbmUgU0VSVk9fQ09VTlRfUVVBRAkJCTB4MDIKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0JewotCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9HTEFCLCBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fUVVBRCksIAotCQkuZHJpdmVyX2luZm8gPSBTRVJWT19WRVJTSU9OXzMwIHwgU0VSVk9fQ09VTlRfUVVBRCAKLQl9LAotCXsKLQkJVVNCX0RFVklDRShWRU5ET1JfSURfR0xBQiwgREVWSUNFX0lEX0dMQUJfUEhJREdFVFNFUlZPX1VOSSksCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX1ZFUlNJT05fMzAgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCi0JCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fUVVBRCksCi0JCS5kcml2ZXJfaW5mbyA9IFNFUlZPX0NPVU5UX1FVQUQgCi0JfSwKLQl7Ci0JCVVTQl9ERVZJQ0UoVkVORE9SX0lEX1dJU0VHUk9VUCwgCi0JCQkJVkVORE9SX0lEX1dJU0VHUk9VUF9QSElER0VUU0VSVk9fVU5JKSwKLQkJLmRyaXZlcl9pbmZvID0gMAotCX0sCi0Je30KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87Ci0KLXN0cnVjdCBwaGlkZ2V0X3NlcnZvIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGRldl9ubzsKLQl1bG9uZyB0eXBlOwotCWludCBwdWxzZVs0XTsKLQlpbnQgZGVncmVlc1s0XTsKLQlpbnQgbWludXRlc1s0XTsKLX07Ci0KLXN0YXRpYyBpbnQKLWNoYW5nZV9wb3NpdGlvbl92MzAoc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvLCBpbnQgc2Vydm9fbm8sIGludCBkZWdyZWVzLCAKLQkJCQkJCQkJaW50IG1pbnV0ZXMpCi17Ci0JaW50IHJldHZhbDsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0KLQlpZiAoZGVncmVlcyA8IC0yMyB8fCBkZWdyZWVzID4gMzYyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1ZmZlciA9IGttYWxsb2MoNiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZGV2X2Vycigmc2Vydm8tPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiBwdWxzZSA9IDAgLSA0MDk1Ci0JICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKLQkgKgotCSAqIHB1bHNlID0gYW5nbGUgKiAxMC42ICsgMjQzLjgJCi0JICovCi0Jc2Vydm8tPnB1bHNlW3NlcnZvX25vXSA9ICgoZGVncmVlcyo2MCArIG1pbnV0ZXMpKjEwNiArIDI0MzgqNjApLzYwMDsJCi0Jc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOwotCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gbWludXRlczsJCi0KLQkvKiAKLQkgKiBUaGUgUGhpZGdldFNlcnZvIHYzLjAgaXMgY29udHJvbGxlZCBieSBzZW5kaW5nIDYgYnl0ZXMsCi0JICogNCAqIDEyIGJpdHMgZm9yIGVhY2ggc2Vydm8uCi0JICoKLQkgKiBsb3cgPSBsb3dlciA4IGJpdHMgcHVsc2UKLQkgKiBoaWdoID0gaGlnaGVyIDQgYml0cyBwdWxzZQotCSAqCi0JICogb2Zmc2V0ICAgICBiaXRzCi0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IDAgfCAgICAgIGxvdyAwICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCAxIHwgaGlnaCAxIHwgaGlnaCAwIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgMiB8ICAgICAgbG93IDEgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiB8IDMgfCAgICAgIGxvdyAyICAgICAgfAotCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi0JICogfCA0IHwgaGlnaCAzIHwgaGlnaCAyIHwKLQkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotCSAqIHwgNSB8ICAgICAgbG93IDMgICAgICB8Ci0JICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQkgKi8KLQotCWJ1ZmZlclswXSA9IHNlcnZvLT5wdWxzZVswXSAmIDB4ZmY7Ci0JYnVmZmVyWzFdID0gKHNlcnZvLT5wdWxzZVswXSA+PiA4ICYgMHgwZikKLQkgICAgfCAoc2Vydm8tPnB1bHNlWzFdID4+IDQgJiAweGYwKTsKLQlidWZmZXJbMl0gPSBzZXJ2by0+cHVsc2VbMV0gJiAweGZmOwotCWJ1ZmZlclszXSA9IHNlcnZvLT5wdWxzZVsyXSAmIDB4ZmY7Ci0JYnVmZmVyWzRdID0gKHNlcnZvLT5wdWxzZVsyXSA+PiA4ICYgMHgwZikKLQkgICAgfCAoc2Vydm8tPnB1bHNlWzNdID4+IDQgJiAweGYwKTsKLQlidWZmZXJbNV0gPSBzZXJ2by0+cHVsc2VbM10gJiAweGZmOwotCi0JZGV2X2RiZygmc2Vydm8tPnVkZXYtPmRldiwKLQkJImRhdGE6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQlidWZmZXJbMF0sIGJ1ZmZlclsxXSwgYnVmZmVyWzJdLAotCQlidWZmZXJbM10sIGJ1ZmZlcls0XSwgYnVmZmVyWzVdKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgNiwgMjAwMCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludAotY2hhbmdlX3Bvc2l0aW9uX3YyMChzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8sIGludCBzZXJ2b19ubywgaW50IGRlZ3JlZXMsCi0JCQkJCQkJCWludCBtaW51dGVzKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCi0JaWYgKGRlZ3JlZXMgPCAtMjMgfHwgZGVncmVlcyA+IDI3OCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOwotCWlmICghYnVmZmVyKSB7Ci0JCWRldl9lcnIoJnNlcnZvLT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKLQkgKiBwdWxzZSA9IGFuZ2xlICsgMjMKLQkgKi8KLQlzZXJ2by0+cHVsc2Vbc2Vydm9fbm9dPSBkZWdyZWVzICsgMjM7Ci0Jc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOwotCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gMDsKLQotCS8qCi0JICogVGhlIFBoaWRnZXRTZXJ2byB2Mi4wIGlzIGNvbnRyb2xsZWQgYnkgc2VuZGluZyB0d28gYnl0ZXMuIFRoZQotCSAqIGZpcnN0IGJ5dGUgaXMgdGhlIHNlcnZvIG51bWJlciB4b3InZWQgd2l0aCAyOgotCSAqCi0JICogc2Vydm8gMCA9IDIKLQkgKiBzZXJ2byAxID0gMwotCSAqIHNlcnZvIDIgPSAwCi0JICogc2Vydm8gMyA9IDEKLQkgKgotCSAqIFRoZSBzZWNvbmQgYnl0ZSBpcyB0aGUgcG9zaXRpb24uCi0JICovCi0KLQlidWZmZXJbMF0gPSBzZXJ2b19ubyBeIDI7Ci0JYnVmZmVyWzFdID0gc2Vydm8tPnB1bHNlW3NlcnZvX25vXTsKLQotCWRldl9kYmcoJnNlcnZvLT51ZGV2LT5kZXYsICJkYXRhOiAlMDJ4ICUwMnhcbiIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKLQkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgMiwgMjAwMCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotI2RlZmluZSBzaG93X3NldCh2YWx1ZSkJXAotc3RhdGljIHNzaXplX3Qgc2V0X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LCAJCQlcCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCi0JCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCWludCBkZWdyZWVzLCBtaW51dGVzLCByZXR2YWw7CQkJCQlcCi0Jc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQlcCi0JCQkJCQkJCQlcCi0JbWludXRlcyA9IDA7CQkJCQkJCVwKLQkvKiBtdXN0IGF0IGxlYXN0IGNvbnZlcnQgZGVncmVlcyAqLwkJCQlcCi0JaWYgKHNzY2FuZihidWYsICIlZC4lZCIsICZkZWdyZWVzLCAmbWludXRlcykgPCAxKSB7CQlcCi0JCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChzZXJ2by0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApCQkJCVwKLQkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YzMChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCi0JCQkJCQkJbWludXRlcyk7CVwKLQllbHNlIAkJCQkJCQkJXAotCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjIwKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKLQkJCQkJCQltaW51dGVzKTsJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogY291bnQ7CQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X3NlcnZvIyN2YWx1ZSAoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJY2hhciAqYnVmKSAJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwMmRcbiIsIHNlcnZvLT5kZWdyZWVzW3ZhbHVlXSwJCVwKLQkJCQlzZXJ2by0+bWludXRlc1t2YWx1ZV0pOwkJCVwKLX0KLQotI2RlZmluZSBzZXJ2b19hdHRyKHZhbHVlKQkJCQkJCVwKLQlfX0FUVFIoc2Vydm8jI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQkJXAotCQlzaG93X3NlcnZvIyN2YWx1ZSwgc2V0X3NlcnZvIyN2YWx1ZSkKLXNob3dfc2V0KDApOwotc2hvd19zZXQoMSk7Ci1zaG93X3NldCgyKTsKLXNob3dfc2V0KDMpOwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJzW10gPSB7Ci0Jc2Vydm9fYXR0cigwKSwgc2Vydm9fYXR0cigxKSwgc2Vydm9fYXR0cigyKSwgc2Vydm9fYXR0cigzKQotfTsKLQotc3RhdGljIGludAotc2Vydm9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7Ci0JaW50IGJpdCwgdmFsdWUsIHJjOwotCWludCBzZXJ2b19jb3VudCwgaTsKLQotCWRldiA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGhpZGdldF9zZXJ2byksIEdGUF9LRVJORUwpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwotCWRldi0+dHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKLQlkZXYtPmRldl9ubyA9IC0xOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBiaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlc3RfYW5kX3NldF9iaXQoYml0LCAmZGV2aWNlX25vKTsKLSAgICAgICAgfSB3aGlsZSAodmFsdWUpOwotCWRldi0+ZGV2X25vID0gYml0OwotCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZkZXYtPnVkZXYtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJIGRldiwgInNlcnZvJWQiLCBkZXYtPmRldl9ubyk7Ci0JaWYgKElTX0VSUihkZXYtPmRldikpIHsKLQkJcmMgPSBQVFJfRVJSKGRldi0+ZGV2KTsKLQkJZGV2LT5kZXYgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKLQotCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspIHsKLQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDI7Ci0JfQotCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBhdHRhY2hlZFxuIiwKLQkJc2Vydm9fY291bnQsIGRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7Ci0KLQlpZiAoIShkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwKSkKLQkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAotCQkJICJXQVJOSU5HOiB2Mi4wIG5vdCB0ZXN0ZWQhIFBsZWFzZSByZXBvcnQgaWYgaXQgd29ya3MuXG4iKTsKLQotCXJldHVybiAwOwotb3V0MjoKLQl3aGlsZSAoaS0tID4gMCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldi0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKLW91dDoKLQlpZiAoZGV2KSB7Ci0JCWlmIChkZXYtPmRldikKLQkJCWRldmljZV91bnJlZ2lzdGVyKGRldi0+ZGV2KTsKLQkJaWYgKGRldi0+ZGV2X25vID49IDApCi0JCQljbGVhcl9iaXQoZGV2LT5kZXZfbm8sICZkZXZpY2Vfbm8pOwotCi0JCWtmcmVlKGRldik7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZAotc2Vydm9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpkZXY7Ci0JaW50IHNlcnZvX2NvdW50LCBpOwotCi0JZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCWlmICghZGV2KQotCQlyZXR1cm47Ci0KLQlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKLQotCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYtPmRldik7Ci0JdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiAlZC1Nb3RvciBQaGlkZ2V0U2Vydm8gdiVkLjAgZGV0YWNoZWRcbiIsCi0JCXNlcnZvX2NvdW50LCBkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOwotCi0JY2xlYXJfYml0KGRldi0+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQlrZnJlZShkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2Vydm9fZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRzZXJ2byIsCi0JLnByb2JlID0gc2Vydm9fcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBzZXJ2b19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdAotcGhpZGdldF9zZXJ2b19pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXBoaWRnZXRfc2Vydm9fZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChwaGlkZ2V0X3NlcnZvX2luaXQpOwotbW9kdWxlX2V4aXQocGhpZGdldF9zZXJ2b19leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCA0Y2YyN2M3Li5mOGQ5MDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTM3LDEwICszNywxMyBAQAogI2RlZmluZSBNT05fSU9DWF9HRVQgICBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fYmluX2dldCkKICNkZWZpbmUgTU9OX0lPQ1hfTUZFVENIIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fYmluX21mZXRjaCkKICNkZWZpbmUgTU9OX0lPQ0hfTUZMVVNIIF9JTyhNT05fSU9DX01BR0lDLCA4KQorLyogIzkgd2FzIE1PTl9JT0NUX1NFVEFQSSAqLworI2RlZmluZSBNT05fSU9DWF9HRVRYICAgX0lPVyhNT05fSU9DX01BR0lDLCAxMCwgc3RydWN0IG1vbl9iaW5fZ2V0KQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2RlZmluZSBNT05fSU9DWF9HRVQzMiBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fYmluX2dldDMyKQogI2RlZmluZSBNT05fSU9DWF9NRkVUQ0gzMiBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX2Jpbl9tZmV0Y2gzMikKKyNkZWZpbmUgTU9OX0lPQ1hfR0VUWDMyICAgX0lPVyhNT05fSU9DX01BR0lDLCAxMCwgc3RydWN0IG1vbl9iaW5fZ2V0MzIpCiAjZW5kaWYKIAogLyoKQEAgLTkyLDcgKzk1LDI5IEBACiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgbGVuX3VyYjsJLyogTGVuZ3RoIG9mIGRhdGEgKHN1Ym1pdHRlZCBvciBhY3R1YWwpICovCiAJdW5zaWduZWQgaW50IGxlbl9jYXA7CS8qIERlbGl2ZXJlZCBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHNldHVwW1NFVFVQX0xFTl07CS8qIE9ubHkgZm9yIENvbnRyb2wgUy10eXBlICovCisJdW5pb24geworCQl1bnNpZ25lZCBjaGFyIHNldHVwW1NFVFVQX0xFTl07CS8qIE9ubHkgZm9yIENvbnRyb2wgUy10eXBlICovCisJCXN0cnVjdCBpc29fcmVjIHsKKwkJCWludCBlcnJvcl9jb3VudDsKKwkJCWludCBudW1kZXNjOworCQl9IGlzbzsKKwl9IHM7CisJaW50IGludGVydmFsOworCWludCBzdGFydF9mcmFtZTsKKwl1bnNpZ25lZCBpbnQgeGZlcl9mbGFnczsKKwl1bnNpZ25lZCBpbnQgbmRlc2M7CS8qIEFjdHVhbCBudW1iZXIgb2YgSVNPIGRlc2NyaXB0b3JzICovCit9OworCisvKgorICogSVNPIHZlY3RvciwgcGFja2VkIGludG8gdGhlIGhlYWQgb2YgZGF0YSBzdHJlYW0uCisgKiBUaGlzIGhhcyB0byB0YWtlIDE2IGJ5dGVzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbmQgb2YgYnVmZmVyCisgKiB3cmFwIGlzIG5vdCBoYXBwZW5pbmcgaW4gdGhlIG1pZGRsZSBvZiBhIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCBtb25fYmluX2lzb2Rlc2MgeworCWludCAgICAgICAgICBpc29fc3RhdHVzOworCXVuc2lnbmVkIGludCBpc29fb2ZmOworCXVuc2lnbmVkIGludCBpc29fbGVuOworCXUzMiBfcGFkOwogfTsKIAogLyogcGVyIGZpbGUgc3RhdGlzdGljICovCkBAIC0xMDIsNyArMTI3LDcgQEAKIH07CiAKIHN0cnVjdCBtb25fYmluX2dldCB7Ci0Jc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyOwkvKiBPbmx5IDQ4IGJ5dGVzLCBub3QgNjQuICovCisJc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyOwkvKiBDYW4gYmUgNDggYnl0ZXMgb3IgNjQuICovCiAJdm9pZCBfX3VzZXIgKmRhdGE7CiAJc2l6ZV90IGFsbG9jOwkJLyogTGVuZ3RoIG9mIGRhdGEgKGNhbiBiZSB6ZXJvKSAqLwogfTsKQEAgLTEzMSw2ICsxNTYsMTEgQEAKICNkZWZpbmUgUEtUX0FMSUdOICAgNjQKICNkZWZpbmUgUEtUX1NJWkUgICAgNjQKIAorI2RlZmluZSBQS1RfU1pfQVBJMCA0OAkvKiBBUEkgMCAoMi42LjIwKSBzaXplICovCisjZGVmaW5lIFBLVF9TWl9BUEkxIDY0CS8qIEFQSSAxIHNpemU6IGV4dHJhIGZpZWxkcyAqLworCisjZGVmaW5lIElTT0RFU0NfTUFYICAgMTI4CS8qIFNhbWUgbnVtYmVyIGFzIHVzYmZzIGFsbG93cywgMjA0OCBieXRlcy4gKi8KKwogLyogbWF4IG51bWJlciBvZiBVU0IgYnVzIHN1cHBvcnRlZCAqLwogI2RlZmluZSBNT05fQklOX01BWF9NSU5PUiAxMjgKIApAQCAtMzYwLDEyICszOTAsOCBAQAogICAgIGNvbnN0IHN0cnVjdCB1cmIgKnVyYiwgY2hhciBldl90eXBlKQogewogCi0JaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ1cmItPmVwLT5kZXNjKSB8fCBldl90eXBlICE9ICdTJykKLQkJcmV0dXJuICctJzsKLQogCWlmICh1cmItPnNldHVwX3BhY2tldCA9PSBOVUxMKQogCQlyZXR1cm4gJ1onOwotCiAJbWVtY3B5KHNldHVwYiwgdXJiLT5zZXR1cF9wYWNrZXQsIFNFVFVQX0xFTik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zODcsNiArNDEzLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1vbl9iaW5fZ2V0X2lzb2Rlc2MoY29uc3Qgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgdXJiICp1cmIsIGNoYXIgZXZfdHlwZSwgdW5zaWduZWQgaW50IG5kZXNjKQoreworCXN0cnVjdCBtb25fYmluX2lzb2Rlc2MgKmRwOworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcDsKKworCWZwID0gdXJiLT5pc29fZnJhbWVfZGVzYzsKKwl3aGlsZSAobmRlc2MtLSAhPSAwKSB7CisJCWRwID0gKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MgKikKKwkJICAgIChycC0+Yl92ZWNbb2Zmc2V0IC8gQ0hVTktfU0laRV0ucHRyICsgb2Zmc2V0ICUgQ0hVTktfU0laRSk7CisJCWRwLT5pc29fc3RhdHVzID0gZnAtPnN0YXR1czsKKwkJZHAtPmlzb19vZmYgPSBmcC0+b2Zmc2V0OworCQlkcC0+aXNvX2xlbiA9IChldl90eXBlID09ICdTJykgPyBmcC0+bGVuZ3RoIDogZnAtPmFjdHVhbF9sZW5ndGg7CisJCWRwLT5fcGFkID0gMDsKKwkJaWYgKChvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MpKSA+PSBycC0+Yl9zaXplKQorCQkJb2Zmc2V0ID0gMDsKKwkJZnArKzsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG1vbl9iaW5fZXZlbnQoc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwgc3RydWN0IHVyYiAqdXJiLAogICAgIGNoYXIgZXZfdHlwZSwgaW50IHN0YXR1cykKIHsKQEAgLTM5Niw2ICs0NDIsNyBAQAogCXVuc2lnbmVkIGludCB1cmJfbGVuZ3RoOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgbmRlc2MsIGxlbmRlc2M7CiAJdW5zaWduZWQgY2hhciBkaXI7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKIAljaGFyIGRhdGFfdGFnID0gMDsKQEAgLTQwNyw2ICs0NTQsMTkgQEAKIAkvKgogCSAqIEZpbmQgdGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCwgdGhlbiBhbGxvY2F0ZSBzcGFjZS4KIAkgKi8KKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpKSB7CisJCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzIDwgMCkgeworCQkJbmRlc2MgPSAwOworCQl9IGVsc2UgaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPj0gSVNPREVTQ19NQVgpIHsKKwkJCW5kZXNjID0gSVNPREVTQ19NQVg7CisJCX0gZWxzZSB7CisJCQluZGVzYyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCX0KKwl9IGVsc2UgeworCQluZGVzYyA9IDA7CisJfQorCWxlbmRlc2MgPSBuZGVzYypzaXplb2Yoc3RydWN0IG1vbl9iaW5faXNvZGVzYyk7CisKIAl1cmJfbGVuZ3RoID0gKGV2X3R5cGUgPT0gJ1MnKSA/CiAJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA6IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAlsZW5ndGggPSB1cmJfbGVuZ3RoOwpAQCAtNDI5LDEwICs0ODksMTIgQEAKIAkJZGlyID0gMDsKIAl9CiAKLQlpZiAocnAtPm1tYXBfYWN0aXZlKQotCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jX2NvbnRpZ3VvdXMocnAsIGxlbmd0aCArIFBLVF9TSVpFKTsKLQllbHNlCi0JCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2MocnAsIGxlbmd0aCArIFBLVF9TSVpFKTsKKwlpZiAocnAtPm1tYXBfYWN0aXZlKSB7CisJCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2NfY29udGlndW91cyhycCwKKwkJCQkJCSBsZW5ndGggKyBQS1RfU0laRSArIGxlbmRlc2MpOworCX0gZWxzZSB7CisJCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2MocnAsIGxlbmd0aCArIFBLVF9TSVpFICsgbGVuZGVzYyk7CisJfQogCWlmIChvZmZzZXQgPT0gfjApIHsKIAkJcnAtPmNudF9sb3N0Kys7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKQEAgLTQ1Niw5ICs1MTgsMzEgQEAKIAllcC0+dHNfdXNlYyA9IHRzLnR2X3VzZWM7CiAJZXAtPnN0YXR1cyA9IHN0YXR1czsKIAllcC0+bGVuX3VyYiA9IHVyYl9sZW5ndGg7Ci0JZXAtPmxlbl9jYXAgPSBsZW5ndGg7CisJZXAtPmxlbl9jYXAgPSBsZW5ndGggKyBsZW5kZXNjOworCWVwLT54ZmVyX2ZsYWdzID0gdXJiLT50cmFuc2Zlcl9mbGFnczsKIAotCWVwLT5mbGFnX3NldHVwID0gbW9uX2Jpbl9nZXRfc2V0dXAoZXAtPnNldHVwLCB1cmIsIGV2X3R5cGUpOworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSkgeworCQllcC0+aW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCX0gZWxzZSBpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpKSB7CisJCWVwLT5pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJCWVwLT5zdGFydF9mcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CisJCWVwLT5zLmlzby5lcnJvcl9jb3VudCA9IHVyYi0+ZXJyb3JfY291bnQ7CisJCWVwLT5zLmlzby5udW1kZXNjID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbChlcGQpICYmIGV2X3R5cGUgPT0gJ1MnKSB7CisJCWVwLT5mbGFnX3NldHVwID0gbW9uX2Jpbl9nZXRfc2V0dXAoZXAtPnMuc2V0dXAsIHVyYiwgZXZfdHlwZSk7CisJfSBlbHNlIHsKKwkJZXAtPmZsYWdfc2V0dXAgPSAnLSc7CisJfQorCisJaWYgKG5kZXNjICE9IDApIHsKKwkJZXAtPm5kZXNjID0gbmRlc2M7CisJCW1vbl9iaW5fZ2V0X2lzb2Rlc2MocnAsIG9mZnNldCwgdXJiLCBldl90eXBlLCBuZGVzYyk7CisJCWlmICgob2Zmc2V0ICs9IGxlbmRlc2MpID49IHJwLT5iX3NpemUpCisJCQlvZmZzZXQgLT0gcnAtPmJfc2l6ZTsKKwl9CisKIAlpZiAobGVuZ3RoICE9IDApIHsKIAkJZXAtPmZsYWdfZGF0YSA9IG1vbl9iaW5fZ2V0X2RhdGEocnAsIG9mZnNldCwgdXJiLCBsZW5ndGgpOwogCQlpZiAoZXAtPmZsYWdfZGF0YSAhPSAwKSB7CS8qIFllcywgaXQncyAweDAwLCBub3QgJzAnICovCkBAIC01OTIsNyArNjc2LDggQEAKICAqIFJldHVybnMgemVybyBvciBlcnJvci4KICAqLwogc3RhdGljIGludCBtb25fYmluX2dldF9ldmVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKLSAgICBzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHIsIHZvaWQgX191c2VyICpkYXRhLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorICAgIHN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkciwgdW5zaWduZWQgaW50IGhkcmJ5dGVzLAorICAgIHZvaWQgX191c2VyICpkYXRhLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKQEAgLTYwOSw3ICs2OTQsNyBAQAogCiAJZXAgPSBNT05fT0ZGMkhEUihycCwgcnAtPmJfb3V0KTsKIAotCWlmIChjb3B5X3RvX3VzZXIoaGRyLCBlcCwgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpKSB7CisJaWYgKGNvcHlfdG9fdXNlcihoZHIsIGVwLCBoZHJieXRlcykpIHsKIAkJbXV0ZXhfdW5sb2NrKCZycC0+ZmV0Y2hfbG9jayk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTY1Nyw2ICs3NDIsNyBAQAogICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBoZHJieXRlcyA9IFBLVF9TWl9BUEkwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwpAQCAtNjc0LDggKzc2MCw4IEBACiAKIAllcCA9IE1PTl9PRkYySERSKHJwLCBycC0+Yl9vdXQpOwogCi0JaWYgKHJwLT5iX3JlYWQgPCBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSkgewotCQlzdGVwX2xlbiA9IG1pbihuYnl0ZXMsIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpIC0gcnAtPmJfcmVhZCk7CisJaWYgKHJwLT5iX3JlYWQgPCBoZHJieXRlcykgeworCQlzdGVwX2xlbiA9IG1pbihuYnl0ZXMsIChzaXplX3QpKGhkcmJ5dGVzIC0gcnAtPmJfcmVhZCkpOwogCQlwdHIgPSAoKGNoYXIgKillcCkgKyBycC0+Yl9yZWFkOwogCQlpZiAoc3RlcF9sZW4gJiYgY29weV90b191c2VyKGJ1ZiwgcHRyLCBzdGVwX2xlbikpIHsKIAkJCW11dGV4X3VubG9jaygmcnAtPmZldGNoX2xvY2spOwpAQCAtNjg3LDEzICs3NzMsMTMgQEAKIAkJZG9uZSArPSBzdGVwX2xlbjsKIAl9CiAKLQlpZiAocnAtPmJfcmVhZCA+PSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSkgeworCWlmIChycC0+Yl9yZWFkID49IGhkcmJ5dGVzKSB7CiAJCXN0ZXBfbGVuID0gZXAtPmxlbl9jYXA7Ci0JCXN0ZXBfbGVuIC09IHJwLT5iX3JlYWQgLSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKTsKKwkJc3RlcF9sZW4gLT0gcnAtPmJfcmVhZCAtIGhkcmJ5dGVzOwogCQlpZiAoc3RlcF9sZW4gPiBuYnl0ZXMpCiAJCQlzdGVwX2xlbiA9IG5ieXRlczsKIAkJb2Zmc2V0ID0gcnAtPmJfb3V0ICsgUEtUX1NJWkU7Ci0JCW9mZnNldCArPSBycC0+Yl9yZWFkIC0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcik7CisJCW9mZnNldCArPSBycC0+Yl9yZWFkIC0gaGRyYnl0ZXM7CiAJCWlmIChvZmZzZXQgPj0gcnAtPmJfc2l6ZSkKIAkJCW9mZnNldCAtPSBycC0+Yl9zaXplOwogCQlpZiAoY29weV9mcm9tX2J1ZihycCwgb2Zmc2V0LCBidWYsIHN0ZXBfbGVuKSkgewpAQCAtNzA5LDcgKzc5NSw3IEBACiAJLyoKIAkgKiBDaGVjayBpZiB3aG9sZSBwYWNrZXQgd2FzIHJlYWQsIGFuZCBpZiBzbywganVtcCB0byB0aGUgbmV4dCBvbmUuCiAJICovCi0JaWYgKHJwLT5iX3JlYWQgPj0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikgKyBlcC0+bGVuX2NhcCkgeworCWlmIChycC0+Yl9yZWFkID49IGhkcmJ5dGVzICsgZXAtPmxlbl9jYXApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKIAkJbW9uX2J1ZmZfYXJlYV9mcmVlKHJwLCBQS1RfU0laRSArIGVwLT5sZW5fY2FwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnAtPmJfbG9jaywgZmxhZ3MpOwpAQCAtOTA4LDYgKzk5NCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNT05fSU9DWF9HRVQ6CisJY2FzZSBNT05fSU9DWF9HRVRYOgogCQl7CiAJCXN0cnVjdCBtb25fYmluX2dldCBnZXRiOwogCkBAIC05MTcsOCArMTAwNCw5IEBACiAKIAkJaWYgKGdldGIuYWxsb2MgPiAweDEwMDAwMDAwKQkvKiBXYW50IHRvIGNhc3QgdG8gdTMyICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsCi0JCQkgIGdldGIuaGRyLCBnZXRiLmRhdGEsICh1bnNpZ25lZCBpbnQpZ2V0Yi5hbGxvYyk7CisJCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLCBnZXRiLmhkciwKKwkJICAgIChjbWQgPT0gTU9OX0lPQ1hfR0VUKT8gUEtUX1NaX0FQSTA6IFBLVF9TWl9BUEkxLAorCQkgICAgZ2V0Yi5kYXRhLCAodW5zaWduZWQgaW50KWdldGIuYWxsb2MpOwogCQl9CiAJCWJyZWFrOwogCkBAIC05ODQsMTYgKzEwNzIsMTggQEAKIAogCXN3aXRjaCAoY21kKSB7CiAKLQljYXNlIE1PTl9JT0NYX0dFVDMyOiB7CisJY2FzZSBNT05fSU9DWF9HRVQzMjoKKwljYXNlIE1PTl9JT0NYX0dFVFgzMjoKKwkJewogCQlzdHJ1Y3QgbW9uX2Jpbl9nZXQzMiBnZXRiOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0YiwgKHZvaWQgX191c2VyICopYXJnLAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2dldDMyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwKLQkJICAgIGNvbXBhdF9wdHIoZ2V0Yi5oZHIzMiksIGNvbXBhdF9wdHIoZ2V0Yi5kYXRhMzIpLAotCQkgICAgZ2V0Yi5hbGxvYzMyKTsKKwkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsIGNvbXBhdF9wdHIoZ2V0Yi5oZHIzMiksCisJCSAgICAoY21kID09IE1PTl9JT0NYX0dFVDMyKT8gUEtUX1NaX0FQSTA6IFBLVF9TWl9BUEkxLAorCQkgICAgY29tcGF0X3B0cihnZXRiLmRhdGEzMiksIGdldGIuYWxsb2MzMik7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IDk5ODVkYjAuLmI2NmU4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKQEAgLTIwLDggKzIwLDggQEAKIAkgIGl0J3MgYmVpbmcgdXNlZCB3aXRoLCBpbmNsdWRpbmcgdGhlIFVTQiBwZXJpcGhlcmFsIHJvbGUsCiAJICBvciB0aGUgVVNCIGhvc3Qgcm9sZSwgb3IgYm90aC4KIAotCSAgVGV4YXMgSW5zdHJ1bWVudHMgcGFydHMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIERhVmluY2kgNjQ0eCwKLQkgIE9NQVAgMjQzeCwgT01BUCAzNDN4LCBhbmQgVFVTQiA2MDEwLgorCSAgVGV4YXMgSW5zdHJ1bWVudHMgZmFtaWxpaWVzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBEYVZpbmNpCisJICAoMzV4LCA2NDR4IC4uLiksIE9NQVAgMjQzeCwgT01BUCAzLCBhbmQgVFVTQiA2MDEwLgogCiAJICBBbmFsb2cgRGV2aWNlcyBwYXJ0cyB1c2luZyB0aGlzIElQIGluY2x1ZGUgQmxhY2tmaW4gQkY1NHgsCiAJICBCRjUyNSBhbmQgQkY1MjcuCkBAIC00MCw3ICs0MCw3IEBACiAJZGVmYXVsdCB5IGlmIChCRjU0eCAmJiAhQkY1NDQpCiAJZGVmYXVsdCB5IGlmIChCRjUyeCAmJiAhQkY1MjIgJiYgIUJGNTIzKQogCi1jb21tZW50ICJEYVZpbmNpIDY0NHggVVNCIHN1cHBvcnQiCitjb21tZW50ICJEYVZpbmNpIDM1eCBhbmQgNjQ0eCBVU0Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9EQVZJTkNJCiAKIGNvbW1lbnQgIk9NQVAgMjQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwppbmRleCAyZGM3NjA2Li4xMGQxMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwpAQCAtNDgsNiArNDgsOSBAQAogI2luY2x1ZGUgImNwcGlfZG1hLmgiCiAKIAorI2RlZmluZSBVU0JfUEhZX0NUUkwJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKQorI2RlZmluZSBETTM1NV9ERUVQU0xFRVAJSU9fQUREUkVTUyhETTM1NV9ERUVQU0xFRVBfUEFERFIpCisKIC8qIFJFVklTSVQgKFBNKSB3ZSBzaG91bGQgYmUgYWJsZSB0byBrZWVwIHRoZSBQSFkgaW4gbG93IHBvd2VyIG1vZGUgbW9zdAogICogb2YgdGhlIHRpbWUgKDI0IE1IWiBvc2NpbGxhdG9yIGFuZCBQTEwgb2ZmLCBldGMpIGJ5IHNldHRpbmcgUE9XRVIuRDAKICAqIGFuZCwgd2hlbiBpbiBob3N0IG1vZGUsIGF1dG9zdXNwZW5kaW5nIGlkbGUgcm9vdCBwb3J0cy4uLiBQSFlQTExPTgpAQCAtNTYsMjAgKzU5LDI2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfb24odm9pZCkKIHsKLQkvKiBzdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwgKi8KLQlfX3Jhd193cml0ZWwoVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT04sCi0JCQkodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikgSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSk7Ci0Jd2hpbGUgKChfX3Jhd19yZWFkbCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKQotCQkJJiBVU0JQSFlfUEhZQ0xLR0QpID09IDApCisJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCS8qIHBvd2VyIGV2ZXJ5dGhpbmcgdXA7IHN0YXJ0IHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIFBMTCAqLworCXBoeV9jdHJsICY9IH4oVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfT1RHUERXTiB8IFVTQlBIWV9QSFlQRFdOKTsKKwlwaHlfY3RybCB8PSBVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTjsKKwlfX3Jhd193cml0ZWwocGh5X2N0cmwsIFVTQl9QSFlfQ1RSTCk7CisKKwkvKiB3YWl0IGZvciBQTEwgdG8gbG9jayBiZWZvcmUgcHJvY2VlZGluZyAqLworCXdoaWxlICgoX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKSAmIFVTQlBIWV9QSFlDTEtHRCkgPT0gMCkKIAkJY3B1X3JlbGF4KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfb2ZmKHZvaWQpCiB7Ci0JLyogcG93ZXJkb3duIHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIG9zY2lsbGF0b3IgKi8KLQlfX3Jhd193cml0ZWwoVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfUEhZUERXTiwgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKTsKKwl1MzIJcGh5X2N0cmwgPSBfX3Jhd19yZWFkbChVU0JfUEhZX0NUUkwpOworCisJLyogcG93ZXJkb3duIHRoZSBvbi1jaGlwIFBIWSwgaXRzIFBMTCwgYW5kIHRoZSBPVEcgYmxvY2sgKi8KKwlwaHlfY3RybCAmPSB+KFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OKTsKKwlwaHlfY3RybCB8PSBVU0JQSFlfT1NDUERXTiB8IFVTQlBIWV9PVEdQRFdOIHwgVVNCUEhZX1BIWVBEV047CisJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOwogfQogCiBzdGF0aWMgaW50IGRtYV9vZmYgPSAxOwpAQCAtMTI2LDEwICsxMzUsNiBAQAogfQogCiAKLS8qIFJFVklTSVQgaXQncyBub3QgY2xlYXIgd2hldGhlciBEYVZpbmNpIGNhbiBzdXBwb3J0IGZ1bGwgT1RHLiAgKi8KLQotc3RhdGljIGludCB2YnVzX3N0YXRlID0gLTE7Ci0KICNpZmRlZiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QKICNkZWZpbmUJcG9ydHN0YXRlKHN0bXQpCQlzdG10CiAjZWxzZQpAQCAtMTM3LDEwICsxNDIsMTkgQEAKICNlbmRpZgogCiAKLS8qIFZCVVMgU1dJVENISU5HIElTIEJPQVJELVNQRUNJRklDICovCisvKgorICogVkJVUyBTV0lUQ0hJTkcgSVMgQk9BUkQtU1BFQ0lGSUMgLi4uIGF0IGxlYXN0IGZvciB0aGUgRE02NDQ2IEVWTSwKKyAqIHdoaWNoIGRvZXNuJ3Qgd2lyZSBEUlZWQlVTIHRvIHRoZSBGRVQgdGhhdCBzd2l0Y2hlcyBpdC4gIFVuY2xlYXIKKyAqIGlmIHRoYXQncyBhIHByb2JsZW0gd2l0aCB0aGUgRE02NDQ2IGNoaXAgb3IganVzdCB3aXRoIHRoYXQgYm9hcmQuCisgKgorICogSW4gZWl0aGVyIGNhc2UsIHRoZSBETTM1NSBFVk0gYXV0b21hdGVzIERSVlZCVVMgdGhlIG5vcm1hbCB3YXksCisgKiB3aGVuIEoxMCBpcyBvdXQsIGFuZCBUSSBkb2N1bWVudHMgaXQgYXMgaGFuZGxpbmcgT1RHLgorICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCitzdGF0aWMgaW50IHZidXNfc3RhdGUgPSAtMTsKKwogLyogSTJDIG9wZXJhdGlvbnMgYXJlIGFsd2F5cyBzeW5jaHJvbm91cywgYW5kIHJlcXVpcmUgYSB0YXNrIGNvbnRleHQuCiAgKiBXaXRoIHVubG9hZGVkIHN5c3RlbXMsIHVzaW5nIHRoZSBzaGFyZWQgd29ya3F1ZXVlIHNlZW1zIHRvIHN1ZmZpY2UKICAqIHRvIHNhdGlzZnkgdGhlIDEwMG1zZWMgQV9XQUlUX1ZSSVNFIHRpbWVvdXQuLi4KQEAgLTE1MCwxMiArMTY0LDEyIEBACiAJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoR1BJT19uVkJVU19EUlYsIHZidXNfc3RhdGUpOwogCXZidXNfc3RhdGUgPSAhdmJ1c19zdGF0ZTsKIH0KLXN0YXRpYyBERUNMQVJFX1dPUksoZXZtX3ZidXNfd29yaywgZXZtX2RlZmVycmVkX2RydnZidXMpOwogCiAjZW5kaWYJLyogRVZNICovCiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24sIGludCBpbW1lZGlhdGUpCiB7CisjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAlpZiAoaXNfb24pCiAJCWlzX29uID0gMTsKIApAQCAtMTYzLDE2ICsxNzcsMTcgQEAKIAkJcmV0dXJuOwogCXZidXNfc3RhdGUgPSAhaXNfb247CQkvKiAwLzEgdnMgIi0xID09IHVua25vd24vaW5pdCIgKi8KIAotI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKG1hY2hpbmVfaXNfZGF2aW5jaV9ldm0oKSkgeworCQlzdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKKwogCQlpZiAoaW1tZWRpYXRlKQogCQkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoR1BJT19uVkJVU19EUlYsIHZidXNfc3RhdGUpOwogCQllbHNlCiAJCQlzY2hlZHVsZV93b3JrKCZldm1fdmJ1c193b3JrKTsKIAl9Ci0jZW5kaWYKIAlpZiAoaW1tZWRpYXRlKQogCQl2YnVzX3N0YXRlID0gaXNfb247CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZGF2aW5jaV9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQpAQCAtMzkxLDYgKzQwNiwxNyBAQAogCW11c2ItPmJvYXJkX3NldF92YnVzID0gZGF2aW5jaV9zZXRfdmJ1czsKIAlkYXZpbmNpX3NvdXJjZV9wb3dlcihtdXNiLCAwLCAxKTsKIAorCS8qIGRtMzU1IEVWTSBzd2FwcyBEKy9ELSBmb3Igc2lnbmFsIGludGVncml0eSwgYW5kCisJICogaXMgY2xvY2tlZCBmcm9tIHRoZSBtYWluIDI0IE1IeiBjcnlzdGFsLgorCSAqLworCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZG0zNTVfZXZtKCkpIHsKKwkJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCQlwaHlfY3RybCAmPSB+KDMgPDwgOSk7CisJCXBoeV9jdHJsIHw9IFVTQlBIWV9EQVRBUE9MOworCQlfX3Jhd193cml0ZWwocGh5X2N0cmwsIFVTQl9QSFlfQ1RSTCk7CisJfQorCiAJLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgKi8KIAltdXNiX3dyaXRlbCh0aWJhc2UsIERBVklOQ0lfVVNCX0NUUkxfUkVHLCAweDEpOwogCkBAIC00MDEsOCArNDI3LDcgQEAKIAogCS8qIE5PVEU6ICBpcnFzIGFyZSBpbiBtaXhlZCBtb2RlLCBub3QgYnlwYXNzIHRvIHB1cmUtbXVzYiAqLwogCXByX2RlYnVnKCJEYVZpbmNpIE9URyByZXZpc2lvbiAlMDh4IHBoeSAlMDN4IGNvbnRyb2wgJTAyeFxuIiwKLQkJcmV2aXNpb24sIF9fcmF3X3JlYWRsKCh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpLAorCQlyZXZpc2lvbiwgX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKSwKIAkJbXVzYl9yZWFkYih0aWJhc2UsIERBVklOQ0lfVVNCX0NUUkxfUkVHKSk7CiAKIAltdXNiLT5pc3IgPSBkYXZpbmNpX2ludGVycnVwdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKaW5kZXggN2ZiNjIzOC4uMDQ2Yzg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKQEAgLTE1LDE0ICsxNSwyMSBAQAogICovCiAKIC8qIEludGVncmF0ZWQgaGlnaHNwZWVkL290ZyBQSFkgKi8KLSNkZWZpbmUJVVNCUEhZX0NUTF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM0KQotI2RlZmluZQlVU0JQSFlfUEhZQ0xLR0QJCSgxIDw8IDgpCi0jZGVmaW5lCVVTQlBIWV9TRVNOREVOCQkoMSA8PCA3KQkvKiB2KHNlc3NfZW5kKSBjb21wYXJhdG9yICovCi0jZGVmaW5lCVVTQlBIWV9WQkRUQ1RFTgkJKDEgPDwgNikJLyogdihidXMpIGNvbXBhcmF0b3IgKi8KLSNkZWZpbmUJVVNCUEhZX1BIWVBMTE9OCQkoMSA8PCA0KQkvKiBvdmVycmlkZSBwbGwgc3VzcGVuZCAqLwotI2RlZmluZQlVU0JQSFlfQ0xLTzFTRUwJCSgxIDw8IDMpCi0jZGVmaW5lCVVTQlBIWV9PU0NQRFdOCQkoMSA8PCAyKQotI2RlZmluZQlVU0JQSFlfUEhZUERXTgkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCUEhZX0NUTF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM0KQorI2RlZmluZSBVU0JQSFlfREFUQVBPTAkJQklUKDExKQkvKiAoZG0zNTUpIHN3aXRjaCBEKy9ELSAqLworI2RlZmluZSBVU0JQSFlfUEhZQ0xLR0QJCUJJVCg4KQorI2RlZmluZSBVU0JQSFlfU0VTTkRFTgkJQklUKDcpCS8qIHYoc2Vzc19lbmQpIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgVVNCUEhZX1ZCRFRDVEVOCQlCSVQoNikJLyogdihidXMpIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgVVNCUEhZX1ZCVVNTRU5TCQlCSVQoNSkJLyogKGRtMzU1LHJvKSBpcyB2YnVzID4gMC41ViAqLworI2RlZmluZSBVU0JQSFlfUEhZUExMT04JCUJJVCg0KQkvKiBvdmVycmlkZSBwbGwgc3VzcGVuZCAqLworI2RlZmluZSBVU0JQSFlfQ0xLTzFTRUwJCUJJVCgzKQorI2RlZmluZSBVU0JQSFlfT1NDUERXTgkJQklUKDIpCisjZGVmaW5lIFVTQlBIWV9PVEdQRFdOCQlCSVQoMSkKKyNkZWZpbmUgVVNCUEhZX1BIWVBEV04JCUJJVCgwKQorCisjZGVmaW5lIERNMzU1X0RFRVBTTEVFUF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDQ4KQorI2RlZmluZSBEUlZWQlVTX0ZPUkNFCQlCSVQoMikKKyNkZWZpbmUgRFJWVkJVU19PVkVSUklERQlCSVQoMSkKIAogLyogRm9yIG5vdyBpbmNsdWRlIHVzYiBPVEcgbW9kdWxlIHJlZ2lzdGVycyBoZXJlICovCiAjZGVmaW5lIERBVklOQ0lfVVNCX1ZFUlNJT05fUkVHCQkweDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCBhZjc3ZTQ2Li4zMzhjZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTc2OSw3ICs3NjksNyBAQAogCQljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihtdXNiX3RvX2hjZChtdXNiKSk7CiAJCQltdXNiX3Jvb3RfZGlzY29ubmVjdChtdXNiKTsKLQkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwKQorCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDAgJiYgaXNfb3RnX2VuYWJsZWQobXVzYikpCiAJCQkJbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShtdXNiLCBqaWZmaWVzCiAJCQkJCSsgbXNlY3NfdG9famlmZmllcyhtdXNiLT5hX3dhaXRfYmNvbikpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCA2MzA5NDZhLi5lZmIzOWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTMzMSw3ICszMzEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJY29udHJvbDsJLyogb2YgbXVzYl9xaCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaW5fYnVsazsJLyogb2YgbXVzYl9xaCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJb3V0X2J1bGs7CS8qIG9mIG11c2JfcWggKi8KLQlzdHJ1Y3QgbXVzYl9xaAkJKnBlcmlvZGljWzMyXTsJLyogdHJlZSBvZiBpbnRlcnJ1cHQraXNvICovCiAjZW5kaWYKIAogCS8qIGNhbGxlZCB3aXRoIElSUXMgYmxvY2tlZDsgT04vbm9uemVybyBpbXBsaWVzIHN0YXJ0aW5nIGEgc2Vzc2lvbiwKQEAgLTQ3OSwxMCArNDc4LDExIEBACiBzdGF0aWMgaW5saW5lIGludCBtdXNiX3JlYWRfZmlmb3NpemUoc3RydWN0IG11c2IgKm11c2IsCiAJCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTggZXBudW0pCiB7CisJdm9pZCAqbWJhc2UgPSBtdXNiLT5tcmVnczsKIAl1OCByZWcgPSAwOwogCiAJLyogcmVhZCBmcm9tIGNvcmUgdXNpbmcgaW5kZXhlZCBtb2RlbCAqLwotCXJlZyA9IG11c2JfcmVhZGIoaHdfZXAtPnJlZ3MsIDB4MTAgKyBNVVNCX0ZJRk9TSVpFKTsKKwlyZWcgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0VQX09GRlNFVChlcG51bSwgTVVTQl9GSUZPU0laRSkpOwogCS8qIDAncyByZXR1cm5lZCB3aGVuIG5vIG1vcmUgZW5kcG9pbnRzICovCiAJaWYgKCFyZWcpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTA5LDYgKzUwOSw3IEBACiB7CiAJbXVzYi0+ZW5kcG9pbnRzWzBdLm1heF9wYWNrZXRfc3pfdHggPSBNVVNCX0VQMF9GSUZPU0laRTsKIAltdXNiLT5lbmRwb2ludHNbMF0ubWF4X3BhY2tldF9zel9yeCA9IE1VU0JfRVAwX0ZJRk9TSVpFOworCW11c2ItPmVuZHBvaW50c1swXS5pc19zaGFyZWRfZmlmbyA9IHRydWU7CiB9CiAjZW5kaWYgLyogQ09ORklHX0JMQUNLRklOICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IDZkYmJkMDcuLjQ5OWM0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtNjQsMTEgKzY0LDggQEAKICAqCiAgKiAtIERNQSAoTWVudG9yL09NQVApIC4uLmhhcyBhdCBsZWFzdCB0b2dnbGUgdXBkYXRlIHByb2JsZW1zCiAgKgotICogLSBTdGlsbCBubyB0cmFmZmljIHNjaGVkdWxpbmcgY29kZSB0byBtYWtlIE5BS2luZyBmb3IgYnVsayBvciBjb250cm9sCi0gKiAgIHRyYW5zZmVycyB1bmFibGUgdG8gc3RhcnZlIG90aGVyIHJlcXVlc3RzOyBvciB0byBtYWtlIGVmZmljaWVudCB1c2UKLSAqICAgb2YgaGFyZHdhcmUgd2l0aCBwZXJpb2RpYyB0cmFuc2ZlcnMuICAoTm90ZSB0aGF0IG5ldHdvcmsgZHJpdmVycwotICogICBjb21tb25seSBwb3N0IGJ1bGsgcmVhZHMgdGhhdCBzdGF5IHBlbmRpbmcgZm9yIGEgbG9uZyB0aW1lOyB0aGVzZQotICogICB3b3VsZCBtYWtlIHZlcnkgdmlzaWJsZSB0cm91YmxlLikKKyAqIC0gWzIzLWZlYi0yMDA5XSBtaW5pbWFsIHRyYWZmaWMgc2NoZWR1bGluZyB0byBhdm9pZCBidWxrIFJYIHBhY2tldAorICogICBzdGFydmF0aW9uIC4uLiBub3RoaW5nIHlldCBmb3IgVFgsIGludGVycnVwdCwgb3IgYnVsay4KICAqCiAgKiAtIE5vdCB0ZXN0ZWQgd2l0aCBITlAsIGJ1dCBzb21lIFNSUCBwYXRocyBzZWVtIHRvIGJlaGF2ZS4KICAqCkBAIC04OCwxMSArODUsOCBAQAogICoKICAqIENPTlRST0wgdHJhbnNmZXJzIGFsbCBnbyB0aHJvdWdoIGVwMC4gIEJVTEsgb25lcyBnbyB0aHJvdWdoIGRlZGljYXRlZCBJTgogICogYW5kIE9VVCBlbmRwb2ludHMgLi4uIGhhcmR3YXJlIGlzIGRlZGljYXRlZCBmb3IgdGhvc2UgImFzeW5jIiBxdWV1ZShzKS4KLSAqCiAgKiAoWWVzLCBidWxrIF9jb3VsZF8gdXNlIG1vcmUgb2YgdGhlIGVuZHBvaW50cyB0aGFuIHRoYXQsIGFuZCB3b3VsZCBldmVuCi0gKiBiZW5lZml0IGZyb20gaXQgLi4uIG9uZSByZW1vdGUgZGV2aWNlIG1heSBlYXNpbHkgYmUgTkFLaW5nIHdoaWxlIG90aGVycwotICogbmVlZCB0byBwZXJmb3JtIHRyYW5zZmVycyBpbiB0aGF0IHNhbWUgZGlyZWN0aW9uLiAgVGhlIHNhbWUgdGhpbmcgY291bGQKLSAqIGJlIGRvbmUgaW4gc29mdHdhcmUgdGhvdWdoLCBhc3N1bWluZyBkbWEgY29vcGVyYXRlcy4pCisgKiBiZW5lZml0IGZyb20gaXQuKQogICoKICAqIElOVEVSVVBQVCBhbmQgSVNPQ0hST05PVVMgdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQgdG8gdGhlIG90aGVyIGVuZHBvaW50cy4KICAqIFNvIGZhciB0aGF0IHNjaGVkdWxpbmcgaXMgYm90aCBkdW1iIGFuZCBvcHRpbWlzdGljOiAgdGhlIGVuZHBvaW50IHdpbGwgYmUKQEAgLTIwMSw4ICsxOTUsOSBAQAogCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoJCS8qIGJ1bGssIGludGVycnVwdCAqLwotCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkvKiBhY3R1YWxfbGVuZ3RoIG1heSBiZSBub256ZXJvIG9uIHJldHJ5IHBhdGhzICovCisJCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJfQogCiAJREJHKDQsICJxaCAlcCB1cmIgJXAgZGV2JWQgZXAlZCVzJXMsIGh3X2VwICVkLCAlcC8lZFxuIiwKQEAgLTM5NSw3ICszOTAsNiBAQAogCQkJICogZGUtYWxsb2NhdGVkIGlmIGl0J3MgdHJhY2tlZCBhbmQgYWxsb2NhdGVkOwogCQkJICogYW5kIHdoZXJlIHdlJ2QgdXBkYXRlIHRoZSBzY2hlZHVsZSB0cmVlLi4uCiAJCQkgKi8KLQkJCW11c2ItPnBlcmlvZGljW2VwLT5lcG51bV0gPSBOVUxMOwogCQkJa2ZyZWUocWgpOwogCQkJcWggPSBOVUxMOwogCQkJYnJlYWs7CkBAIC0xMDQ1LDcgKzEwMzksOCBAQAogCiAJCS8qIE5PVEU6ICB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQogCQkgKiBjb250cm9sIHRyYW5zZmVyLCBpZiBhbm90aGVyIG9uZSBpcyBxdWV1ZWQsIHNvIHRoYXQKLQkJICogZXAwIGlzIG1vcmUgbGlrZWx5IHRvIHN0YXkgYnVzeS4KKwkJICogZXAwIGlzIG1vcmUgbGlrZWx5IHRvIHN0YXkgYnVzeS4gIFRoYXQncyBhbHJlYWR5IGRvbmUKKwkJICogZm9yIGJ1bGsgUlggdHJhbnNmZXJzLgogCQkgKgogCQkgKiBpZiAocWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+Y29udHJvbCksIHRoZW4KIAkJICogd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IKQEAgLTExOTcsNiArMTE5Miw3IEBACiAJCS8qIE5PVEU6ICB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQogCQkgKiB0cmFuc2ZlciwgaWYgdGhlcmUncyBzb21lIG90aGVyIChub25wZXJpb2RpYykgdHggdXJiCiAJCSAqIHRoYXQgY291bGQgdXNlIHRoaXMgZmlmby4gIChkbWEgY29tcGxpY2F0ZXMgaXQuLi4pCisJCSAqIFRoYXQncyBhbHJlYWR5IGRvbmUgZm9yIGJ1bGsgUlggdHJhbnNmZXJzLgogCQkgKgogCQkgKiBpZiAoYnVsayAmJiBxaC0+cmluZy5uZXh0ICE9ICZtdXNiLT5vdXRfYnVsayksIHRoZW4KIAkJICogd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IKQEAgLTEzNTgsNiArMTM1NCw1MCBAQAogCiAjZW5kaWYKIAorLyogU2NoZWR1bGUgbmV4dCBRSCBmcm9tIG11c2ItPmluX2J1bGsgYW5kIG1vdmUgdGhlIGN1cnJlbnQgcWggdG8KKyAqIHRoZSBlbmQ7IGF2b2lkcyBzdGFydmF0aW9uIGZvciBvdGhlciBlbmRwb2ludHMuCisgKi8KK3N0YXRpYyB2b2lkIG11c2JfYnVsa19yeF9uYWtfdGltZW91dChzdHJ1Y3QgbXVzYiAqbXVzYiwgc3RydWN0IG11c2JfaHdfZXAgKmVwKQoreworCXN0cnVjdCBkbWFfY2hhbm5lbAkqZG1hOworCXN0cnVjdCB1cmIJCSp1cmI7CisJdm9pZCBfX2lvbWVtCQkqbWJhc2UgPSBtdXNiLT5tcmVnczsKKwl2b2lkIF9faW9tZW0JCSplcGlvID0gZXAtPnJlZ3M7CisJc3RydWN0IG11c2JfcWgJCSpjdXJfcWgsICpuZXh0X3FoOworCXUxNgkJCXJ4X2NzcjsKKworCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcC0+ZXBudW0pOworCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBlcC0+cnhfY2hhbm5lbCA6IE5VTEw7CisKKwkvKiBjbGVhciBuYWsgdGltZW91dCBiaXQgKi8KKwlyeF9jc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOworCXJ4X2NzciB8PSBNVVNCX1JYQ1NSX0hfV1pDX0JJVFM7CisJcnhfY3NyICY9IH5NVVNCX1JYQ1NSX0RBVEFFUlJPUjsKKwltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCByeF9jc3IpOworCisJY3VyX3FoID0gZmlyc3RfcWgoJm11c2ItPmluX2J1bGspOworCWlmIChjdXJfcWgpIHsKKwkJdXJiID0gbmV4dF91cmIoY3VyX3FoKTsKKwkJaWYgKGRtYV9jaGFubmVsX3N0YXR1cyhkbWEpID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CisJCQlkbWEtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19DT1JFX0FCT1JUOworCQkJbXVzYi0+ZG1hX2NvbnRyb2xsZXItPmNoYW5uZWxfYWJvcnQoZG1hKTsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBkbWEtPmFjdHVhbF9sZW47CisJCQlkbWEtPmFjdHVhbF9sZW4gPSAwTDsKKwkJfQorCQltdXNiX3NhdmVfdG9nZ2xlKGVwLCAxLCB1cmIpOworCisJCS8qIG1vdmUgY3VyX3FoIHRvIGVuZCBvZiBxdWV1ZSAqLworCQlsaXN0X21vdmVfdGFpbCgmY3VyX3FoLT5yaW5nLCAmbXVzYi0+aW5fYnVsayk7CisKKwkJLyogZ2V0IHRoZSBuZXh0IHFoIGZyb20gbXVzYi0+aW5fYnVsayAqLworCQluZXh0X3FoID0gZmlyc3RfcWgoJm11c2ItPmluX2J1bGspOworCisJCS8qIHNldCByeF9yZWluaXQgYW5kIHNjaGVkdWxlIHRoZSBuZXh0IHFoICovCisJCWVwLT5yeF9yZWluaXQgPSAxOworCQltdXNiX3N0YXJ0X3VyYihtdXNiLCAxLCBuZXh0X3FoKTsKKwl9Cit9CisKIC8qCiAgKiBTZXJ2aWNlIGFuIFJYIGludGVycnVwdCBmb3IgdGhlIGdpdmVuIElOIGVuZHBvaW50OyBkb2NzIGNvdmVyIGJ1bGssIGlzbywKICAqIGFuZCBoaWdoLWJhbmR3aWR0aCBJTiB0cmFuc2ZlciBjYXNlcy4KQEAgLTE0MjEsMTggKzE0NjEsMjYgQEAKIAl9IGVsc2UgaWYgKHJ4X2NzciAmIE1VU0JfUlhDU1JfREFUQUVSUk9SKSB7CiAKIAkJaWYgKFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MgIT0gcWgtPnR5cGUpIHsKLQkJCS8qIE5PVEUgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKLQkJCSAqIHRyYW5zZmVyLCBpZiB0aGVyZSdzIHNvbWUgb3RoZXIgKG5vbnBlcmlvZGljKSByeCB1cmIKLQkJCSAqIHRoYXQgY291bGQgdXNlIHRoaXMgZmlmby4gIChkbWEgY29tcGxpY2F0ZXMgaXQuLi4pCi0JCQkgKgotCQkJICogaWYgKGJ1bGsgJiYgcWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+aW5fYnVsayksIHRoZW4KLQkJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCi0JCQkgKi8KIAkJCURCRyg2LCAiUlggZW5kICVkIE5BSyB0aW1lb3V0XG4iLCBlcG51bSk7CisKKwkJCS8qIE5PVEU6IE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvciwgc28gd2Ugd2FudCB0bworCQkJICogY29udGludWUuICBFeGNlcHQgLi4uIGlmIHRoZXJlJ3MgYSByZXF1ZXN0IGZvcgorCQkJICogYW5vdGhlciBRSCwgdXNlIHRoYXQgaW5zdGVhZCBvZiBzdGFydmluZyBpdC4KKwkJCSAqCisJCQkgKiBEZXZpY2VzIGxpa2UgRXRoZXJuZXQgYW5kIHNlcmlhbCBhZGFwdGVycyBrZWVwCisJCQkgKiByZWFkcyBwb3N0ZWQgYXQgYWxsIHRpbWVzLCB3aGljaCB3aWxsIHN0YXJ2ZQorCQkJICogb3RoZXIgZGV2aWNlcyB3aXRob3V0IHRoaXMgbG9naWMuCisJCQkgKi8KKwkJCWlmICh1c2JfcGlwZWJ1bGsodXJiLT5waXBlKQorCQkJCQkmJiBxaC0+bXV4ID09IDEKKwkJCQkJJiYgIWxpc3RfaXNfc2luZ3VsYXIoJm11c2ItPmluX2J1bGspKSB7CisJCQkJbXVzYl9idWxrX3J4X25ha190aW1lb3V0KG11c2IsIGh3X2VwKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCQltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXBudW0pOwotCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwKLQkJCQkJTVVTQl9SWENTUl9IX1daQ19CSVRTCi0JCQkJCXwgTVVTQl9SWENTUl9IX1JFUVBLVCk7CisJCQlyeF9jc3IgfD0gTVVTQl9SWENTUl9IX1daQ19CSVRTOworCQkJcnhfY3NyICY9IH5NVVNCX1JYQ1NSX0RBVEFFUlJPUjsKKwkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsIHJ4X2Nzcik7CiAKIAkJCWdvdG8gZmluaXNoOwogCQl9IGVsc2UgewpAQCAtMTcxMSwzMSArMTc1OSwyNyBAQAogCiAJLyogZWxzZSwgcGVyaW9kaWMgdHJhbnNmZXJzIGdldCBtdXhlZCB0byBvdGhlciBlbmRwb2ludHMgKi8KIAotCS8qIEZJWE1FIHRoaXMgZG9lc24ndCBjb25zaWRlciBkaXJlY3Rpb24sIHNvIGl0IGNhbiBvbmx5Ci0JICogd29yayBmb3Igb25lIGhhbGYgb2YgdGhlIGVuZHBvaW50IGhhcmR3YXJlLCBhbmQgYXNzdW1lcwotCSAqIHRoZSBwcmV2aW91cyBjYXNlcyBoYW5kbGVkIGFsbCBub24tc2hhcmVkIGVuZHBvaW50cy4uLgotCSAqLwotCi0JLyogd2Uga25vdyB0aGlzIHFoIGhhc24ndCBiZWVuIHNjaGVkdWxlZCwgc28gYWxsIHdlIG5lZWQgdG8gZG8KKwkvKgorCSAqIFdlIGtub3cgdGhpcyBxaCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsIHNvIGFsbCB3ZSBuZWVkIHRvIGRvCiAJICogaXMgY2hvb3NlIHdoaWNoIGhhcmR3YXJlIGVuZHBvaW50IHRvIHB1dCBpdCBvbiAuLi4KIAkgKgogCSAqIFJFVklTSVQgd2hhdCB3ZSByZWFsbHkgd2FudCBoZXJlIGlzIGEgcmVndWxhciBzY2hlZHVsZSB0cmVlCi0JICogbGlrZSBlLmcuIE9IQ0kgdXNlcywgYnV0IGZvciBub3cgbXVzYi0+cGVyaW9kaWMgaXMganVzdCBhbgotCSAqIGFycmF5IG9mIHRoZSBfc2luZ2xlXyBsb2dpY2FsIGVuZHBvaW50IGFzc29jaWF0ZWQgd2l0aCBhCi0JICogZ2l2ZW4gcGh5c2ljYWwgb25lIChpZGVudGl0eSBtYXBwaW5nIGxvZ2ljYWwtPnBoeXNpY2FsKS4KLQkgKgotCSAqIHRoYXQgc2ltcGxpc3RpYyBhcHByb2FjaCBtYWtlcyBUVCBzY2hlZHVsaW5nIGEgbG90IHNpbXBsZXI7Ci0JICogdGhlcmUgaXMgbm9uZSwgYW5kIHRodXMgbm9uZSBvZiBpdHMgY29tcGxleGl0eS4uLgorCSAqIGxpa2UgZS5nLiBPSENJIHVzZXMuCiAJICovCiAJYmVzdF9kaWZmID0gNDA5NjsKIAliZXN0X2VuZCA9IC0xOwogCi0JZm9yIChlcG51bSA9IDE7IGVwbnVtIDwgbXVzYi0+bnJfZW5kcG9pbnRzOyBlcG51bSsrKSB7CisJZm9yIChlcG51bSA9IDEsIGh3X2VwID0gbXVzYi0+ZW5kcG9pbnRzICsgMTsKKwkJCWVwbnVtIDwgbXVzYi0+bnJfZW5kcG9pbnRzOworCQkJZXBudW0rKywgaHdfZXArKykgewogCQlpbnQJZGlmZjsKIAotCQlpZiAobXVzYi0+cGVyaW9kaWNbZXBudW1dKQorCQlpZiAoaXNfaW4gfHwgaHdfZXAtPmlzX3NoYXJlZF9maWZvKSB7CisJCQlpZiAoaHdfZXAtPmluX3FoICAhPSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UJaWYgKGh3X2VwLT5vdXRfcWggIT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQlod19lcCA9ICZtdXNiLT5lbmRwb2ludHNbZXBudW1dOworCiAJCWlmIChod19lcCA9PSBtdXNiLT5idWxrX2VwKQogCQkJY29udGludWU7CiAKQEAgLTE3NTYsNiArMTgwMCwxNyBAQAogCQkJaGVhZCA9ICZtdXNiLT5pbl9idWxrOwogCQllbHNlCiAJCQloZWFkID0gJm11c2ItPm91dF9idWxrOworCisJCS8qIEVuYWJsZSBidWxrIFJYIE5BSyB0aW1lb3V0IHNjaGVtZSB3aGVuIGJ1bGsgcmVxdWVzdHMgYXJlCisJCSAqIG11bHRpcGxleGVkLiAgVGhpcyBzY2hlbWUgZG9lbid0IHdvcmsgaW4gaGlnaCBzcGVlZCB0byBmdWxsCisJCSAqIHNwZWVkIHNjZW5hcmlvIGFzIE5BSyBpbnRlcnJ1cHRzIGFyZSBub3QgY29taW5nIGZyb20gYQorCQkgKiBmdWxsIHNwZWVkIGRldmljZSBjb25uZWN0ZWQgdG8gYSBoaWdoIHNwZWVkIGRldmljZS4KKwkJICogTkFLIHRpbWVvdXQgaW50ZXJ2YWwgaXMgOCAoMTI4IHVmcmFtZSBvciAxNm1zKSBmb3IgSFMgYW5kCisJCSAqIDQgKDggZnJhbWUgb3IgOG1zKSBmb3IgRlMgZGV2aWNlLgorCQkgKi8KKwkJaWYgKGlzX2luICYmIHFoLT5kZXYpCisJCQlxaC0+aW50dl9yZWcgPQorCQkJCShVU0JfU1BFRURfSElHSCA9PSBxaC0+ZGV2LT5zcGVlZCkgPyA4IDogNDsKIAkJZ290byBzdWNjZXNzOwogCX0gZWxzZSBpZiAoYmVzdF9lbmQgPCAwKSB7CiAJCXJldHVybiAtRU5PU1BDOwpAQCAtMTc2NCw3ICsxODE5LDYgQEAKIAlpZGxlID0gMTsKIAlxaC0+bXV4ID0gMDsKIAlod19lcCA9IG11c2ItPmVuZHBvaW50cyArIGJlc3RfZW5kOwotCW11c2ItPnBlcmlvZGljW2Jlc3RfZW5kXSA9IHFoOwogCURCRyg0LCAicWggJXAgcGVyaW9kaWMgc2xvdCAlZFxuIiwgcWgsIGJlc3RfZW5kKTsKIHN1Y2Nlc3M6CiAJaWYgKGhlYWQpIHsKQEAgLTE4ODgsMTMgKzE5NDIsMTEgQEAKIAkJICoKIAkJICogVGhlIGRvd25zaWRlIG9mIGRpc2FibGluZyB0aGlzIGlzIHRoYXQgdHJhbnNmZXIgc2NoZWR1bGluZwogCQkgKiBnZXRzIFZFUlkgdW5mYWlyIGZvciBub25wZXJpb2RpYyB0cmFuc2ZlcnM7IGEgbWlzYmVoYXZpbmcKLQkJICogcGVyaXBoZXJhbCBjb3VsZCBtYWtlIHRoYXQgaHVydC4gIE9yIGZvciByZWFkcywgb25lIHRoYXQncwotCQkgKiBwZXJmZWN0bHkgbm9ybWFsOiAgbmV0d29yayBhbmQgb3RoZXIgZHJpdmVycyBrZWVwIHJlYWRzCi0JCSAqIHBvc3RlZCBhdCBhbGwgdGltZXMsIGhhdmluZyBvbmUgcGVuZGluZyBmb3IgYSB3ZWVrIHNob3VsZAotCQkgKiBiZSBwZXJmZWN0bHkgc2FmZS4KKwkJICogcGVyaXBoZXJhbCBjb3VsZCBtYWtlIHRoYXQgaHVydC4gIFRoYXQncyBwZXJmZWN0bHkgbm9ybWFsCisJCSAqIGZvciByZWFkcyBmcm9tIG5ldHdvcmsgb3Igc2VyaWFsIGFkYXB0ZXJzIC4uLiBzbyB3ZSBoYXZlCisJCSAqIHBhcnRpYWwgTkFLbGltaXQgc3VwcG9ydCBmb3IgYnVsayBSWC4KIAkJICoKLQkJICogVGhlIHVwc2lkZSBvZiBkaXNhYmxpbmcgaXQgaXMgYXZvaWRuZyB0cmFuc2ZlciBzY2hlZHVsaW5nCi0JCSAqIGNvZGUgdG8gcHV0IHRoaXMgYXNpZGUgZm9yIHdoaWxlLgorCQkgKiBUaGUgdXBzaWRlIG9mIGRpc2FibGluZyBpdCBpcyBzaW1wbGVyIHRyYW5zZmVyIHNjaGVkdWxpbmcuCiAJCSAqLwogCQlpbnRlcnZhbCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKaW5kZXggZTBlOWNlNS4uYmY2NzdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJZGVzYy0+YkRlc2NMZW5ndGggPSA5OwogCQlkZXNjLT5iRGVzY3JpcHRvclR5cGUgPSAweDI5OwogCQlkZXNjLT5iTmJyUG9ydHMgPSAxOwotCQlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IGNwdV90b19sZTE2KAogCQkJCSAgMHgwMDAxCS8qIHBlci1wb3J0IHBvd2VyIHN3aXRjaGluZyAqLwogCQkJCXwgMHgwMDEwCS8qIG5vIG92ZXJjdXJyZW50IHJlcG9ydGluZyAqLwogCQkJCSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IGVlNTViNDQuLmFhODg0ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC00Myw3ICs0Myw3IEBACiAKIGNvbmZpZyBUV0w0MDMwX1VTQgogCXRyaXN0YXRlICJUV0w0MDMwIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKKwlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRSAmJiBSRUdVTEFUT1JfVFdMNDAzMAogCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgVVNCIE9URyB0cmFuc2NlaXZlciBvbiBUV0w0MDMwCkBAIC01MSw0ICs1MSwxMiBAQAogCSAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cywKIAkgIGluIGhvc3QgbW9kZSwgbG93IHNwZWVkLgogCitjb25maWcgTk9QX1VTQl9YQ0VJVgorCXRyaXN0YXRlICJOT1AgVVNCIFRyYW5zY2VpdmVyIERyaXZlciIKKwlzZWxlY3QgVVNCX09UR19VVElMUworCWhlbHAKKwkgdGhpcyBkcml2ZXIgaXMgdG8gYmUgdXNlZCBieSBhbGwgdGhlIHVzYiB0cmFuc2NlaXZlciB3aGljaCBhcmUgZWl0aGVyCisJIGJ1aWx0LWluIHdpdGggdXNiIGlwIG9yIHdoaWNoIGFyZSBhdXRvbm9tb3VzIGFuZCBkb2Vzbid0IHJlcXVpcmUgYW55CisJIHBoeSBwcm9ncmFtbWluZyBzdWNoIGFzIElTUDF4MDQgZXRjLgorCiBlbmRpZiAjIFVTQiB8fCBPVEcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQppbmRleCBkNzNjN2NmLi4yMDgxNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogb2JqLSQoQ09ORklHX1VTQl9HUElPX1ZCVVMpCSs9IGdwaW9fdmJ1cy5vCiBvYmotJChDT05GSUdfSVNQMTMwMV9PTUFQKQkrPSBpc3AxMzAxX29tYXAubwogb2JqLSQoQ09ORklHX1RXTDQwMzBfVVNCKQkrPSB0d2w0MDMwLXVzYi5vCitvYmotJChDT05GSUdfTk9QX1VTQl9YQ0VJVikJKz0gbm9wLXVzYi14Y2Vpdi5vCiAKIGNjZmxhZ3MtJChDT05GSUdfVVNCX0RFQlVHKQkrPSAtRERFQlVHCiBjY2ZsYWdzLSQoQ09ORklHX1VTQl9HQURHRVRfREVCVUcpICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYyBiL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYwppbmRleCA2M2E2MDM2Li4xYzI2Yzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKQEAgLTM0LDYgKzM1LDcgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yICAgICAgICp2YnVzX2RyYXc7CiAJaW50CQkJdmJ1c19kcmF3X2VuYWJsZWQ7CiAJdW5zaWduZWQJCW1BOworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKIAogCkBAIC03NiwyNCArNzgsMjYgQEAKIAlncGlvX3ZidXMtPm1BID0gbUE7CiB9CiAKLS8qIFZCVVMgY2hhbmdlIElSUSBoYW5kbGVyICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb192YnVzX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpc192YnVzX3Bvd2VyZWQoc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gKnBkYXRhKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOwotCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBncGlvX3ZidXNfZGF0YSAqZ3Bpb192YnVzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGdwaW8sIHZidXM7CisJaW50IHZidXM7CiAKIAl2YnVzID0gZ3Bpb19nZXRfdmFsdWUocGRhdGEtPmdwaW9fdmJ1cyk7CiAJaWYgKHBkYXRhLT5ncGlvX3ZidXNfaW52ZXJ0ZWQpCiAJCXZidXMgPSAhdmJ1czsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIlZCVVMgJXMgKGdhZGdldDogJXMpXG4iLAotCQl2YnVzID8gInN1cHBsaWVkIiA6ICJpbmFjdGl2ZSIsCi0JCWdwaW9fdmJ1cy0+b3RnLmdhZGdldCA/IGdwaW9fdmJ1cy0+b3RnLmdhZGdldC0+bmFtZSA6ICJub25lIik7CisJcmV0dXJuIHZidXM7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fdmJ1c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEgKmdwaW9fdmJ1cyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3Bpb192YnVzX2RhdGEsIHdvcmspOworCXN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvICpwZGF0YSA9IGdwaW9fdmJ1cy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCWludCBncGlvOwogCiAJaWYgKCFncGlvX3ZidXMtPm90Zy5nYWRnZXQpCi0JCXJldHVybiBJUlFfSEFORExFRDsKKwkJcmV0dXJuOwogCiAJLyogUGVyaXBoZXJhbCBjb250cm9sbGVycyB3aGljaCBtYW5hZ2UgdGhlIHB1bGx1cCB0aGVtc2VsdmVzIHdvbid0IGhhdmUKIAkgKiBncGlvX3B1bGx1cCBjb25maWd1cmVkIGhlcmUuICBJZiBpdCdzIGNvbmZpZ3VyZWQgaGVyZSwgd2UnbGwgZG8gd2hhdApAQCAtMTAxLDcgKzEwNSw3IEBACiAJICogdGhhdCBtYXkgY29tcGxpY2F0ZSB1c2JfZ2FkZ2V0X3ssZGlzfWNvbm5lY3QoKSBzdXBwb3J0LgogCSAqLwogCWdwaW8gPSBwZGF0YS0+Z3Bpb19wdWxsdXA7Ci0JaWYgKHZidXMpIHsKKwlpZiAoaXNfdmJ1c19wb3dlcmVkKHBkYXRhKSkgewogCQlncGlvX3ZidXMtPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7CiAJCXVzYl9nYWRnZXRfdmJ1c19jb25uZWN0KGdwaW9fdmJ1cy0+b3RnLmdhZGdldCk7CiAKQEAgLTEyMSw2ICsxMjUsMjEgQEAKIAkJdXNiX2dhZGdldF92YnVzX2Rpc2Nvbm5lY3QoZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KTsKIAkJZ3Bpb192YnVzLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOwogCX0KK30KKworLyogVkJVUyBjaGFuZ2UgSVJRIGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRhdGE7CisJc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGdwaW9fdmJ1c19kYXRhICpncGlvX3ZidXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIlZCVVMgJXMgKGdhZGdldDogJXMpXG4iLAorCQlpc192YnVzX3Bvd2VyZWQocGRhdGEpID8gInN1cHBsaWVkIiA6ICJpbmFjdGl2ZSIsCisJCWdwaW9fdmJ1cy0+b3RnLmdhZGdldCA/IGdwaW9fdmJ1cy0+b3RnLmdhZGdldC0+bmFtZSA6ICJub25lIik7CisKKwlpZiAoZ3Bpb192YnVzLT5vdGcuZ2FkZ2V0KQorCQlzY2hlZHVsZV93b3JrKCZncGlvX3ZidXMtPndvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjU3LDYgKzI3Niw3IEBACiAJCQlpcnEsIGVycik7CiAJCWdvdG8gZXJyX2lycTsKIAl9CisJSU5JVF9XT1JLKCZncGlvX3ZidXMtPndvcmssIGdwaW9fdmJ1c193b3JrKTsKIAogCS8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqLwogCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJmdwaW9fdmJ1cy0+b3RnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTMzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYworICoKKyAqIE5PUCBVU0IgdHJhbnNjZWl2ZXIgZm9yIGFsbCBVU0IgdHJhbnNjZWl2ZXIgd2hpY2ggYXJlIGVpdGhlciBidWlsdC1pbgorICogaW50byBVU0IgSVAgb3Igd2hpY2ggYXJlIG1vc3RseSBhdXRvbm9tb3VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogQWpheSBLdW1hciBHdXB0YSA8YWpheS5ndXB0YUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogQ3VycmVudCBzdGF0dXM6CisgKiAJdGhpcyBpcyB0byBhZGQgIm5vcCIgdHJhbnNjZWl2ZXIgZm9yIGFsbCB0aG9zZSBwaHkgd2hpY2ggaXMKKyAqIAlhdXRvbm9tb3VzIHN1Y2ggYXMgaXNwMTUwNCBldGMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorCitzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiB7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcglvdGc7CisJc3RydWN0IGRldmljZQkJKmRldjsKK307CisKK3N0YXRpYyB1NjQgbm9wX3hjZWl2X2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9wX3hjZWl2X2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAibm9wX3VzYl94Y2VpdiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmbm9wX3hjZWl2X2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BXzMyQklUX01BU0ssCisJCS5wbGF0Zm9ybV9kYXRhICAgICAgICAgID0gTlVMTCwKKwl9LAorfTsKKwordm9pZCB1c2Jfbm9wX3hjZWl2X3JlZ2lzdGVyKHZvaWQpCit7CisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmbm9wX3hjZWl2X2RldmljZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIHVzYiBub3AgdHJhbnNjZWl2ZXJcbiIpOworCQlyZXR1cm47CisJfQorfQorCit2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZub3BfeGNlaXZfZGV2aWNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiAqeGNlaXZfdG9fbm9wKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgbm9wX3VzYl94Y2Vpdiwgb3RnKTsKK30KKworc3RhdGljIGludCBub3Bfc2V0X3N1c3BlbmQoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwgaW50IHN1c3BlbmQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm9wX3NldF9wZXJpcGhlcmFsKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsCisJCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcDsKKworCWlmICgheCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlub3AgPSB4Y2Vpdl90b19ub3AoeCk7CisKKwlpZiAoIWdhZGdldCkgeworCQlub3AtPm90Zy5nYWRnZXQgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlub3AtPm90Zy5nYWRnZXQgPSBnYWRnZXQ7CisJbm9wLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vcF9zZXRfaG9zdChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdCkKK3sKKwlzdHJ1Y3Qgbm9wX3VzYl94Y2VpdiAqbm9wOworCisJaWYgKCF4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5vcCA9IHhjZWl2X3RvX25vcCh4KTsKKworCWlmICghaG9zdCkgeworCQlub3AtPm90Zy5ob3N0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbm9wLT5vdGcuaG9zdCA9IGhvc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5vcF91c2JfeGNlaXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgbm9wX3VzYl94Y2Vpdgkqbm9wOworCWludCBlcnI7CisKKwlub3AgPSBremFsbG9jKHNpemVvZiAqbm9wLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5vcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlub3AtPmRldgkJPSAmcGRldi0+ZGV2OworCW5vcC0+b3RnLmRldgkJPSBub3AtPmRldjsKKwlub3AtPm90Zy5sYWJlbAkJPSAibm9wLXhjZWl2IjsKKwlub3AtPm90Zy5zdGF0ZQkJPSBPVEdfU1RBVEVfVU5ERUZJTkVEOworCW5vcC0+b3RnLnNldF9ob3N0CT0gbm9wX3NldF9ob3N0OworCW5vcC0+b3RnLnNldF9wZXJpcGhlcmFsCT0gbm9wX3NldF9wZXJpcGhlcmFsOworCW5vcC0+b3RnLnNldF9zdXNwZW5kCT0gbm9wX3NldF9zdXNwZW5kOworCisJZXJyID0gb3RnX3NldF90cmFuc2NlaXZlcigmbm9wLT5vdGcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgdHJhbnNjZWl2ZXIsIGVycjogJWRcbiIsCisJCQllcnIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbm9wKTsKKworCXJldHVybiAwOworZXhpdDoKKwlrZnJlZShub3ApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG5vcF91c2JfeGNlaXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5vcF91c2JfeGNlaXYgKm5vcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJb3RnX3NldF90cmFuc2NlaXZlcihOVUxMKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKG5vcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbm9wX3VzYl94Y2Vpdl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG5vcF91c2JfeGNlaXZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChub3BfdXNiX3hjZWl2X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm5vcF91c2JfeGNlaXYiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm9wX3VzYl94Y2Vpdl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmbm9wX3VzYl94Y2Vpdl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG5vcF91c2JfeGNlaXZfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBub3BfdXNiX3hjZWl2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmbm9wX3VzYl94Y2Vpdl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobm9wX3VzYl94Y2Vpdl9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpub3BfdXNiX3hjZWl2Iik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyBJbmMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTk9QIFVTQiBUcmFuc2NlaXZlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKaW5kZXggNDE2ZTQ0MS4uZDk0NzhkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAKIC8qIFJlZ2lzdGVyIGRlZmluZXMgKi8KQEAgLTI0Niw2ICsyNDgsMTEgQEAKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCW90ZzsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCisJLyogVFdMNDAzMCBpbnRlcm5hbCBVU0IgcmVndWxhdG9yIHN1cHBsaWVzICovCisJc3RydWN0IHJlZ3VsYXRvcgkqdXNiMXY1OworCXN0cnVjdCByZWd1bGF0b3IJKnVzYjF2ODsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp1c2IzdjE7CisKIAkvKiBmb3IgdmJ1cyByZXBvcnRpbmcgd2l0aCBpcnFzIGRpc2FibGVkICovCiAJc3BpbmxvY2tfdAkJbG9jazsKIApAQCAtNDM0LDYgKzQ0MSwxOCBAQAogCiAJcHdyID0gdHdsNDAzMF91c2JfcmVhZCh0d2wsIFBIWV9QV1JfQ1RSTCk7CiAJaWYgKG9uKSB7CisJCXJlZ3VsYXRvcl9lbmFibGUodHdsLT51c2IzdjEpOworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiMXY4KTsKKwkJLyoKKwkJICogRGlzYWJsaW5nIHVzYjN2MSByZWd1bGF0b3IgKD0gd3JpdGluZyAwIHRvIFZVU0IzVjFfREVWX0dSUAorCQkgKiBpbiB0d2w0MDMwKSByZXNldHMgdGhlIFZVU0JfREVESUNBVEVEMiByZWdpc3Rlci4gVGhpcyByZXNldAorCQkgKiBlbmFibGVzIFZVU0IzVjFfU0xFRVAgYml0IHRoYXQgcmVtYXBzIHVzYjN2MSBBQ1RJVkUgc3RhdGUgdG8KKwkJICogU0xFRVAuIFdlIHdvcmsgYXJvdW5kIHRoaXMgYnkgY2xlYXJpbmcgdGhlIGJpdCBhZnRlciB1c3YzdjEKKwkJICogaXMgcmUtYWN0aXZhdGVkLiBUaGlzIGVuc3VyZXMgdGhhdCBWVVNCM1YxIGlzIHJlYWxseSBhY3RpdmUuCisJCSAqLworCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwKKwkJCQkJCQlWVVNCX0RFRElDQVRFRDIpOworCQlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiMXY1KTsKIAkJcHdyICY9IH5QSFlfUFdSX1BIWVBXRDsKIAkJV0FSTl9PTih0d2w0MDMwX3VzYl93cml0ZV92ZXJpZnkodHdsLCBQSFlfUFdSX0NUUkwsIHB3cikgPCAwKTsKIAkJdHdsNDAzMF91c2Jfd3JpdGUodHdsLCBQSFlfQ0xLX0NUUkwsCkBAIC00NDMsNiArNDYyLDkgQEAKIAl9IGVsc2UgIHsKIAkJcHdyIHw9IFBIWV9QV1JfUEhZUFdEOwogCQlXQVJOX09OKHR3bDQwMzBfdXNiX3dyaXRlX3ZlcmlmeSh0d2wsIFBIWV9QV1JfQ1RSTCwgcHdyKSA8IDApOworCQlyZWd1bGF0b3JfZGlzYWJsZSh0d2wtPnVzYjF2NSk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiMXY4KTsKKwkJcmVndWxhdG9yX2Rpc2FibGUodHdsLT51c2IzdjEpOwogCX0KIH0KIApAQCAtNDY4LDcgKzQ5MCw3IEBACiAJdHdsLT5hc2xlZXAgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0d2w0MDMwX3VzYl9sZG9faW5pdChzdHJ1Y3QgdHdsNDAzMF91c2IgKnR3bCkKK3N0YXRpYyBpbnQgdHdsNDAzMF91c2JfbGRvX2luaXQoc3RydWN0IHR3bDQwMzBfdXNiICp0d2wpCiB7CiAJLyogRW5hYmxlIHdyaXRpbmcgdG8gcG93ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIDB4QzAsIFBST1RFQ1RfS0VZKTsKQEAgLTQ4MCwyMCArNTAyLDQ1IEBACiAJLyogaW5wdXQgdG8gVlVTQjNWMSBMRE8gaXMgZnJvbSBWQkFULCBub3QgVkJVUyAqLwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDE0LCBWVVNCX0RFRElDQVRFRDEpOwogCi0JLyogdHVybiBvbiAzLjFWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCM1YxX0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMy4xViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjNWMV9ERVZfR1JQKTsKKworCXR3bC0+dXNiM3YxID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjN2MSIpOworCWlmIChJU19FUlIodHdsLT51c2IzdjEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCM1YxX1RZUEUpOwogCi0JLyogdHVybiBvbiAxLjVWIHJlZ3VsYXRvciAqLwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDIwLCBWVVNCMVY1X0RFVl9HUlApOworCS8qIEluaXRpYWxpemUgMS41ViByZWd1bGF0b3IgKi8KKwl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWNV9ERVZfR1JQKTsKKworCXR3bC0+dXNiMXY1ID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInVzYjF2NSIpOworCWlmIChJU19FUlIodHdsLT51c2IxdjUpKQorCQlnb3RvIGZhaWwxOworCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDAsIFZVU0IxVjVfVFlQRSk7CiAKLQkvKiB0dXJuIG9uIDEuOFYgcmVndWxhdG9yICovCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4MjAsIFZVU0IxVjhfREVWX0dSUCk7CisJLyogSW5pdGlhbGl6ZSAxLjhWIHJlZ3VsYXRvciAqLworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLCAwLCBWVVNCMVY4X0RFVl9HUlApOworCisJdHdsLT51c2IxdjggPSByZWd1bGF0b3JfZ2V0KHR3bC0+ZGV2LCAidXNiMXY4Iik7CisJaWYgKElTX0VSUih0d2wtPnVzYjF2OCkpCisJCWdvdG8gZmFpbDI7CisKIAl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwgMCwgVlVTQjFWOF9UWVBFKTsKIAogCS8qIGRpc2FibGUgYWNjZXNzIHRvIHBvd2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCAwLCBQUk9URUNUX0tFWSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2NSk7CisJdHdsLT51c2IxdjUgPSBOVUxMOworZmFpbDE6CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjN2MSk7CisJdHdsLT51c2IzdjEgPSBOVUxMOworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgc3NpemVfdCB0d2w0MDMwX3VzYl92YnVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtNTk4LDcgKzY0NSw3IEBACiB7CiAJc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHR3bDQwMzBfdXNiCSp0d2w7Ci0JaW50CQkJc3RhdHVzOworCWludAkJCXN0YXR1cywgZXJyOwogCiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwbGF0Zm9ybV9kYXRhIG5vdCBhdmFpbGFibGVcbiIpOwpAQCAtNjIyLDcgKzY2OSwxMiBAQAogCS8qIGluaXQgc3BpbmxvY2sgZm9yIHdvcmtxdWV1ZSAqLwogCXNwaW5fbG9ja19pbml0KCZ0d2wtPmxvY2spOwogCi0JdHdsNDAzMF91c2JfbGRvX2luaXQodHdsKTsKKwllcnIgPSB0d2w0MDMwX3VzYl9sZG9faW5pdCh0d2wpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibGRvIGluaXQgZmFpbGVkXG4iKTsKKwkJa2ZyZWUodHdsKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJb3RnX3NldF90cmFuc2NlaXZlcigmdHdsLT5vdGcpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHdsKTsKQEAgLTY4OCw2ICs3NDAsOSBAQAogCXR3bDQwMzBfdXNiX2NsZWFyX2JpdHModHdsLCBQT1dFUl9DVFJMLCBQT1dFUl9DVFJMX09UR19FTkFCKTsKIAogCXR3bDQwMzBfcGh5X3Bvd2VyKHR3bCwgMCk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2NSk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2OCk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjN2MSk7CiAKIAlrZnJlZSh0d2wpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGIzNjFmMDUuLmE2NWY5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC0xMTYsMTQgKzExNiwxNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGlnaV9hY2NlbGVwb3J0LgogCi1jb25maWcgVVNCX1NFUklBTF9DUDIxMDEKLQl0cmlzdGF0ZSAiVVNCIENQMjEwMSBVQVJUIEJyaWRnZSBDb250cm9sbGVyIgorY29uZmlnIFVTQl9TRVJJQUxfQ1AyMTBYCisJdHJpc3RhdGUgIlVTQiBDUDIxMHggZmFtaWx5IG9mIFVBUlQgQnJpZGdlIENvbnRyb2xsZXJzIgogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQ1AyMTAxL0NQMjEwMiBiYXNlZCBVU0IgdG8gUlMyMzIKLQkgIGNvbnZlcnRlci4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQ1AyMTAxL0NQMjEwMi9DUDIxMDMgYmFzZWQgVVNCCisJICB0byBSUzIzMiBjb252ZXJ0ZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjcDIxMDEuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3AyMTB4LgogCiBjb25maWcgVVNCX1NFUklBTF9DWVBSRVNTX004CiAJdHJpc3RhdGUgIlVTQiBDeXByZXNzIE04IFVTQiBTZXJpYWwgRHJpdmVyIgpAQCAtNDcyLDYgKzQ3MiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3RpNjg1OC4KIAorY29uZmlnIFVTQl9TRVJJQUxfUVVBTENPTU0KKwl0cmlzdGF0ZSAiVVNCIFF1YWxjb21tIFNlcmlhbCBtb2RlbSIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUXVhbGNvbW0gVVNCIG1vZGVtIGRldmljZS4gIFRoZXNlIGFyZQorCSAgdXN1YWxseSB3aXJlbGVzcyBjZWxsdWxhciBtb2RlbXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFjc2VyaWFsLgorCiBjb25maWcgVVNCX1NFUklBTF9TUENQOFg1CiAJdHJpc3RhdGUgIlVTQiBTUENQOHg1IFVTQiBUbyBTZXJpYWwgRHJpdmVyIgogCWhlbHAKQEAgLTUxNSw2ICs1MjQsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpZXJyYS4KIAorY29uZmlnIFVTQl9TRVJJQUxfU1lNQk9MCisJdHJpc3RhdGUgIlVTQiBTeW1ib2wgQmFyY29kZSBkcml2ZXIgKHNlcmlhbCBtb2RlKSIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFN5bWJvbCBVU0IgQmFyY29kZSBkZXZpY2UKKwkgIGluIHNlcmlhbCBlbXVsYXRpb24gbW9kZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3ltYm9sc2VyaWFsLgorCiBjb25maWcgVVNCX1NFUklBTF9USQogCXRyaXN0YXRlICJVU0IgVEkgMzQxMC81MDUyIFNlcmlhbCBEcml2ZXIiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IGI3NWJlOTEuLjY2NjE5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYpCQkrPSBhcmszMTE2Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTikJCQkrPSBiZWxraW5fc2Eubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEpCQkJKz0gY2gzNDEubwotb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxKQkJCSs9IGNwMjEwMS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9DUDIxMFgpCQkJKz0gY3AyMTB4Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSykJCSs9IGN5YmVyamFjay5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004KQkJKz0gY3lwcmVzc19tOC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9ERUJVRykJCQkrPSB1c2JfZGVidWcubwpAQCAtNDUsMTAgKzQ1LDEyIEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PUFRJT04pCQkJKz0gb3B0aW9uLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX09USTY4NTgpCQkrPSBvdGk2ODU4Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMykJCQkrPSBwbDIzMDMubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0pCQkrPSBxY3NlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TQUZFKQkJCSs9IHNhZmVfc2VyaWFsLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJKQkJKz0gc2llbWVuc19tcGkubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MpCQkrPSBzaWVycmEubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSkJCSs9IHNwY3A4eDUubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MKQkJCSs9IHN5bWJvbHNlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9USSkJCQkrPSB0aV91c2JfMzQxMF81MDUyLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1ZJU09SKQkJCSs9IHZpc29yLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCkJCSs9IHdoaXRlaGVhdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCmluZGV4IGY2MWUzY2EuLmFiNGNjMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAyMDA3LCBGcmFuayBBIEtpbmdzd29vZCA8ZnJhbmtAa2luZ3N3b29kLWNvbnN1bHRpbmcuY28udWs+CisgKiBDb3B5cmlnaHQgMjAwNywgV2VybmVyIENvcm5lbGl1cyA8d2VybmVyQGNvcm5lbGl1cy1jb25zdWx0LmRlPgorICogQ29weXJpZ2h0IDIwMDksIEJvcmlzIEhhamR1ayA8Ym9yaXNAaGFqZHVrLm9yZz4KICAqCiAgKiBjaDM0MS5jIGltcGxlbWVudHMgYSBzZXJpYWwgcG9ydCBkcml2ZXIgZm9yIHRoZSBXaW5jaGlwaGVhZCBDSDM0MS4KICAqCkBAIC0yMSw5ICsyMywzOSBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KIAotI2RlZmluZSBERUZBVUxUX0JBVURfUkFURSAyNDAwCisjZGVmaW5lIERFRkFVTFRfQkFVRF9SQVRFIDk2MDAKICNkZWZpbmUgREVGQVVMVF9USU1FT1VUICAgMTAwMAogCisvKiBmbGFncyBmb3IgSU8tQml0cyAqLworI2RlZmluZSBDSDM0MV9CSVRfUlRTICgxIDw8IDYpCisjZGVmaW5lIENIMzQxX0JJVF9EVFIgKDEgPDwgNSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGludGVycnVwdCBwaXBlIGRlZmluaXRpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYWx3YXlzIDQgaW50ZXJydXB0IGJ5dGVzICovCisvKiBmaXJzdCBpcnEgYnl0ZSBub3JtYWxseSAweDA4ICovCisvKiBzZWNvbmQgaXJxIGJ5dGUgYmFzZSAweDdkICsgYmVsb3cgKi8KKy8qIHRoaXJkIGlycSBieXRlIGJhc2UgMHg5NCArIGJlbG93ICovCisvKiBmb3VydGggaXJxIGJ5dGUgbm9ybWFsbHkgMHhlZSAqLworCisvKiBzZWNvbmQgaW50ZXJydXB0IGJ5dGUgKi8KKyNkZWZpbmUgQ0gzNDFfTVVMVF9TVEFUIDB4MDQgLyogbXVsdGlwbGUgc3RhdHVzIHNpbmNlIGxhc3QgaW50ZXJydXB0IGV2ZW50ICovCisKKy8qIHN0YXR1cyByZXR1cm5lZCBpbiB0aGlyZCBpbnRlcnJ1cHQgYW5zd2VyIGJ5dGUsIGludmVydGVkIGluIGRhdGEKKyAgIGZyb20gaXJxICovCisjZGVmaW5lIENIMzQxX0JJVF9DVFMgMHgwMQorI2RlZmluZSBDSDM0MV9CSVRfRFNSIDB4MDIKKyNkZWZpbmUgQ0gzNDFfQklUX1JJICAweDA0CisjZGVmaW5lIENIMzQxX0JJVF9EQ0QgMHgwOAorI2RlZmluZSBDSDM0MV9CSVRTX01PREVNX1NUQVQgMHgwZiAvKiBhbGwgYml0cyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGJhdWRyYXRlIGNhbGN1bGF0aW9uIGZhY3RvciAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENIMzQxX0JBVURCQVNFX0ZBQ1RPUiAxNTMyNjIwODAwCisjZGVmaW5lIENIMzQxX0JBVURCQVNFX0RJVk1BWCAzCisKIHN0YXRpYyBpbnQgZGVidWc7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKQEAgLTM0LDkgKzY2LDEyIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCiBzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSB7Ci0JdW5zaWduZWQgYmF1ZF9yYXRlOwotCXU4IGR0cjsKLQl1OCBydHM7CisJc3BpbmxvY2tfdCBsb2NrOyAvKiBhY2Nlc3MgbG9jayAqLworCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OyAvKiB3YWl0IHF1ZXVlIGZvciBtb2RlbSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBiYXVkX3JhdGU7IC8qIHNldCBiYXVkIHJhdGUgKi8KKwl1OCBsaW5lX2NvbnRyb2w7IC8qIHNldCBsaW5lIGNvbnRyb2wgdmFsdWUgUlRTL0RUUiAqLworCXU4IGxpbmVfc3RhdHVzOyAvKiBhY3RpdmUgc3RhdHVzIG9mIG1vZGVtIGNvbnRyb2wgaW5wdXRzICovCisJdTggbXVsdGlfc3RhdHVzX2NoYW5nZTsgLyogc3RhdHVzIGNoYW5nZWQgbXVsdGlwbGUgc2luY2UgbGFzdCBjYWxsICovCiB9OwogCiBzdGF0aWMgaW50IGNoMzQxX2NvbnRyb2xfb3V0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IHJlcXVlc3QsCkBAIC03MiwzNyArMTA3LDI4IEBACiB7CiAJc2hvcnQgYSwgYjsKIAlpbnQgcjsKKwl1bnNpZ25lZCBsb25nIGZhY3RvcjsKKwlzaG9ydCBkaXZpc29yOwogCiAJZGJnKCJjaDM0MV9zZXRfYmF1ZHJhdGUoJWQpIiwgcHJpdi0+YmF1ZF9yYXRlKTsKLQlzd2l0Y2ggKHByaXYtPmJhdWRfcmF0ZSkgewotCWNhc2UgMjQwMDoKLQkJYSA9IDB4ZDkwMTsKLQkJYiA9IDB4MDAzODsKLQkJYnJlYWs7Ci0JY2FzZSA0ODAwOgotCQlhID0gMHg2NDAyOwotCQliID0gMHgwMDFmOwotCQlicmVhazsKLQljYXNlIDk2MDA6Ci0JCWEgPSAweGIyMDI7Ci0JCWIgPSAweDAwMTM7Ci0JCWJyZWFrOwotCWNhc2UgMTkyMDA6Ci0JCWEgPSAweGQ5MDI7Ci0JCWIgPSAweDAwMGQ7Ci0JCWJyZWFrOwotCWNhc2UgMzg0MDA6Ci0JCWEgPSAweDY0MDM7Ci0JCWIgPSAweDAwMGE7Ci0JCWJyZWFrOwotCWNhc2UgMTE1MjAwOgotCQlhID0gMHhjYzAzOwotCQliID0gMHgwMDA4OwotCQlicmVhazsKLQlkZWZhdWx0OgorCisJaWYgKCFwcml2LT5iYXVkX3JhdGUpCiAJCXJldHVybiAtRUlOVkFMOworCWZhY3RvciA9IChDSDM0MV9CQVVEQkFTRV9GQUNUT1IgLyBwcml2LT5iYXVkX3JhdGUpOworCWRpdmlzb3IgPSBDSDM0MV9CQVVEQkFTRV9ESVZNQVg7CisKKwl3aGlsZSAoKGZhY3RvciA+IDB4ZmZmMCkgJiYgZGl2aXNvcikgeworCQlmYWN0b3IgPj49IDM7CisJCWRpdmlzb3ItLTsKIAl9CiAKKwlpZiAoZmFjdG9yID4gMHhmZmYwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZhY3RvciA9IDB4MTAwMDAgLSBmYWN0b3I7CisJYSA9IChmYWN0b3IgJiAweGZmMDApIHwgZGl2aXNvcjsKKwliID0gZmFjdG9yICYgMHhmZjsKKwogCXIgPSBjaDM0MV9jb250cm9sX291dChkZXYsIDB4OWEsIDB4MTMxMiwgYSk7CiAJaWYgKCFyKQogCQlyID0gY2gzNDFfY29udHJvbF9vdXQoZGV2LCAweDlhLCAweDBmMmMsIGIpOwpAQCAtMTEwLDE5ICsxMzYsMTggQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGludCBjaDM0MV9zZXRfaGFuZHNoYWtlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgaW50IGNoMzQxX3NldF9oYW5kc2hha2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggY29udHJvbCkKIHsKLQlkYmcoImNoMzQxX3NldF9oYW5kc2hha2UoJWQsJWQpIiwgcHJpdi0+ZHRyLCBwcml2LT5ydHMpOwotCXJldHVybiBjaDM0MV9jb250cm9sX291dChkZXYsIDB4YTQsCi0JCX4oKHByaXYtPmR0cj8xPDw1OjApfChwcml2LT5ydHM/MTw8NjowKSksIDApOworCWRiZygiY2gzNDFfc2V0X2hhbmRzaGFrZSgweCUwMngpIiwgY29udHJvbCk7CisJcmV0dXJuIGNoMzQxX2NvbnRyb2xfb3V0KGRldiwgMHhhNCwgfmNvbnRyb2wsIDApOwogfQogCi1zdGF0aWMgaW50IGNoMzQxX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY2gzNDFfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdikKIHsKIAljaGFyICpidWZmZXI7CiAJaW50IHI7CiAJY29uc3QgdW5zaWduZWQgc2l6ZSA9IDg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiY2gzNDFfZ2V0X3N0YXR1cygpIik7CiAKQEAgLTEzNCwxMCArMTU5LDE1IEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCS8qIE5vdCBoYXZpbmcgdGhlIGRhdGFzaGVldCBmb3IgdGhlIENIMzQxLCB3ZSBpZ25vcmUgdGhlIGJ5dGVzIHJldHVybmVkCi0JICogZnJvbSB0aGUgZGV2aWNlLiBSZXR1cm4gZXJyb3IgaWYgdGhlIGRldmljZSBkaWQgbm90IHJlc3BvbmQgaW4gdGltZS4KLQkgKi8KLQlyID0gMDsKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdGF0dXMgaWYgYXZhaWxhYmxlICovCisJaWYgKHIgPT0gMikgeworCQlyID0gMDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9zdGF0dXMgPSAofigqYnVmZmVyKSkgJiBDSDM0MV9CSVRTX01PREVNX1NUQVQ7CisJCXByaXYtPm11bHRpX3N0YXR1c19jaGFuZ2UgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXIgPSAtRVBST1RPOwogCiBvdXQ6CWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHI7CkBAIC0xODAsNyArMjEwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleHBlY3QgMHhmZiAweGVlICovCi0JciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2KTsKKwlyID0gY2gzNDFfZ2V0X3N0YXR1cyhkZXYsIHByaXYpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTE5MiwxMiArMjIyLDEyIEBACiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAotCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKGRldiwgcHJpdik7CisJciA9IGNoMzQxX3NldF9oYW5kc2hha2UoZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CiAKIAkvKiBleHBlY3QgMHg5ZiAweGVlICovCi0JciA9IGNoMzQxX2dldF9zdGF0dXMoZGV2KTsKKwlyID0gY2gzNDFfZ2V0X3N0YXR1cyhkZXYsIHByaXYpOwogCiBvdXQ6CWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHI7CkBAIC0yMTYsOSArMjQ2LDEwIEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJcHJpdi0+YmF1ZF9yYXRlID0gREVGQVVMVF9CQVVEX1JBVEU7Ci0JcHJpdi0+ZHRyID0gMTsKLQlwcml2LT5ydHMgPSAxOworCXByaXYtPmxpbmVfY29udHJvbCA9IENIMzQxX0JJVF9SVFMgfCBDSDM0MV9CSVRfRFRSOwogCiAJciA9IGNoMzQxX2NvbmZpZ3VyZShzZXJpYWwtPmRldiwgcHJpdik7CiAJaWYgKHIgPCAwKQpAQCAtMjMxLDYgKzI2MiwzNSBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgdm9pZCBjaDM0MV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNfY2ZsYWc7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwlkYmcoIiVzIC0gc2h1dHRpbmcgZG93biB1cmJzIiwgX19mdW5jX18pOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJaWYgKHR0eSkgeworCQljX2NmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQlpZiAoY19jZmxhZyAmIEhVUENMKSB7CisJCQkvKiBkcm9wIERUUiBhbmQgUlRTICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcHJpdi0+bGluZV9jb250cm9sID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCWNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIDApOworCQl9CisJfQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworfQorCisKIC8qIG9wZW4gdGhpcyBkZXZpY2UsIHNldCBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgY2gzNDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCXN0cnVjdCBmaWxlICpmaWxwKQpAQCAtMjQyLDE0ICszMDIsMTMgQEAKIAlkYmcoImNoMzQxX29wZW4oKSIpOwogCiAJcHJpdi0+YmF1ZF9yYXRlID0gREVGQVVMVF9CQVVEX1JBVEU7Ci0JcHJpdi0+ZHRyID0gMTsKLQlwcml2LT5ydHMgPSAxOworCXByaXYtPmxpbmVfY29udHJvbCA9IENIMzQxX0JJVF9SVFMgfCBDSDM0MV9CSVRfRFRSOwogCiAJciA9IGNoMzQxX2NvbmZpZ3VyZShzZXJpYWwtPmRldiwgcHJpdik7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JciA9IGNoMzQxX3NldF9oYW5kc2hha2Uoc2VyaWFsLT5kZXYsIHByaXYpOworCXIgPSBjaDM0MV9zZXRfaGFuZHNoYWtlKHNlcmlhbC0+ZGV2LCBwcml2LT5saW5lX2NvbnRyb2wpOwogCWlmIChyKQogCQlnb3RvIG91dDsKIApAQCAtMjU3LDYgKzMxNiwxNiBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAorCWRiZygiJXMgLSBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7CisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiwiCisJCQkiIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcik7CisJCWNoMzQxX2Nsb3NlKHR0eSwgcG9ydCwgTlVMTCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKwogCXIgPSB1c2Jfc2VyaWFsX2dlbmVyaWNfb3Blbih0dHksIHBvcnQsIGZpbHApOwogCiBvdXQ6CXJldHVybiByOwpAQCAtMjcwLDQ2ICszMzksMjI0IEBACiB7CiAJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgYmF1ZF9yYXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoImNoMzQxX3NldF90ZXJtaW9zKCkiKTsKIAorCWlmICghdHR5IHx8ICF0dHktPnRlcm1pb3MpCisJCXJldHVybjsKKwogCWJhdWRfcmF0ZSA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAKLQlzd2l0Y2ggKGJhdWRfcmF0ZSkgewotCWNhc2UgMjQwMDoKLQljYXNlIDQ4MDA6Ci0JY2FzZSA5NjAwOgotCWNhc2UgMTkyMDA6Ci0JY2FzZSAzODQwMDoKLQljYXNlIDExNTIwMDoKLQkJcHJpdi0+YmF1ZF9yYXRlID0gYmF1ZF9yYXRlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmcoIlJhdGUgJWQgbm90IHN1cHBvcnRlZCwgdXNpbmcgJWQiLAotCQkJYmF1ZF9yYXRlLCBERUZBVUxUX0JBVURfUkFURSk7Ci0JCXByaXYtPmJhdWRfcmF0ZSA9IERFRkFVTFRfQkFVRF9SQVRFOworCXByaXYtPmJhdWRfcmF0ZSA9IGJhdWRfcmF0ZTsKKworCWlmIChiYXVkX3JhdGUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IChDSDM0MV9CSVRfRFRSIHwgQ0gzNDFfQklUX1JUUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJY2gzNDFfc2V0X2JhdWRyYXRlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2KTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfihDSDM0MV9CSVRfRFRSIHwgQ0gzNDFfQklUX1JUUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQljaDM0MV9zZXRfYmF1ZHJhdGUocG9ydC0+c2VyaWFsLT5kZXYsIHByaXYpOworCWNoMzQxX3NldF9oYW5kc2hha2UocG9ydC0+c2VyaWFsLT5kZXYsIHByaXYtPmxpbmVfY29udHJvbCk7CiAKIAkvKiBVbmltcGxlbWVudGVkOgogCSAqIChjZmxhZyAmIENTSVpFKSA6IGRhdGEgYml0cyBbNSwgOF0KIAkgKiAoY2ZsYWcgJiBQQVJFTkIpIDogcGFyaXR5IHtOT05FLCBFVkVOLCBPRER9CiAJICogKGNmbGFnICYgQ1NUT1BCKSA6IHN0b3AgYml0cyBbMSwgMl0KIAkgKi8KK30KIAotCSAvKiBDb3B5IGJhY2sgdGhlIG9sZCBoYXJkd2FyZSBzZXR0aW5ncyAqLwotCSB0dHlfdGVybWlvc19jb3B5X2h3KHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOwotCSAvKiBBbmQgcmUtZW5jb2RlIHdpdGggdGhlIG5ldyBiYXVkICovCi0JIHR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZF9yYXRlLCBiYXVkX3JhdGUpOworc3RhdGljIGludCBjaDM0MV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggY29udHJvbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENIMzQxX0JJVF9SVFM7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENIMzQxX0JJVF9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNIMzQxX0JJVF9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNIMzQxX0JJVF9EVFI7CisJY29udHJvbCA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY2gzNDFfc2V0X2hhbmRzaGFrZShwb3J0LT5zZXJpYWwtPmRldiwgY29udHJvbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoMzQxX3JlYWRfaW50X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAoJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmIChhY3R1YWxfbGVuZ3RoID49IDQpIHsKKwkJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcHJpdi0+bGluZV9zdGF0dXMgPSAofihkYXRhWzJdKSkgJiBDSDM0MV9CSVRTX01PREVNX1NUQVQ7CisJCWlmICgoZGF0YVsxXSAmIENIMzQxX01VTFRfU1RBVCkpCisJCQlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwl9CisKK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9tb2RlbV9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBhcmcpCit7CisJc3RydWN0IGNoMzQxX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBwcmV2c3RhdHVzOworCXU4IHN0YXR1czsKKwl1OCBjaGFuZ2VkOworCXU4IG11bHRpX2NoYW5nZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByZXZzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlwcml2LT5tdWx0aV9zdGF0dXNfY2hhbmdlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIW11bHRpX2NoYW5nZSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwkJbXVsdGlfY2hhbmdlID0gcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCWNoYW5nZWQgPSBwcmV2c3RhdHVzIF4gc3RhdHVzOworCisJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfUkkpKSB8fAorCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjaGFuZ2VkICYgQ0gzNDFfQklUX0RTUikpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNoYW5nZWQgJiBDSDM0MV9CSVRfRENEKSkgfHwKKwkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY2hhbmdlZCAmIENIMzQxX0JJVF9DVFMpKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJldnN0YXR1cyA9IHN0YXR1czsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLypzdGF0aWMgaW50IGNoMzQxX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCovCitzdGF0aWMgaW50IGNoMzQxX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJZGJnKCIlcyAoJWQpIGNtZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CisJCXJldHVybiB3YWl0X21vZGVtX2luZm8ocG9ydCwgYXJnKTsKKworCWRlZmF1bHQ6CisJCWRiZygiJXMgbm90IHN1cHBvcnRlZCA9IDB4JTA0eCIsIF9fZnVuY19fLCBjbWQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IGNoMzQxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggbWNyOworCXU4IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJZGJnKCIlcyAoJWQpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW1jciA9IHByaXYtPmxpbmVfY29udHJvbDsKKwlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXN1bHQgPSAoKG1jciAmIENIMzQxX0JJVF9EVFIpCQk/IFRJT0NNX0RUUiA6IDApCisJCSAgfCAoKG1jciAmIENIMzQxX0JJVF9SVFMpCT8gVElPQ01fUlRTIDogMCkKKwkJICB8ICgoc3RhdHVzICYgQ0gzNDFfQklUX0NUUykJPyBUSU9DTV9DVFMgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfRFNSKQk/IFRJT0NNX0RTUiA6IDApCisJCSAgfCAoKHN0YXR1cyAmIENIMzQxX0JJVF9SSSkJPyBUSU9DTV9SSSAgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBDSDM0MV9CSVRfRENEKQk/IFRJT0NNX0NEICA6IDApOworCisJZGJnKCIlcyAtIHJlc3VsdCA9ICV4IiwgX19mdW5jX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgY2gzNDFfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBOVUxMOworCXN0cnVjdCBjaDM0MV9wcml2YXRlICpwcml2OworCisJc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisKKwkvKnJlY29uZmlndXJlIGNoMzQxIHNlcmlhbCBwb3J0IGFmdGVyIGJ1cy1yZXNldCovCisJY2gzNDFfY29uZmlndXJlKGRldiwgcHJpdik7CisKKwl1c2Jfc2VyaWFsX3Jlc3VtZShpbnRmKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2gzNDFfZHJpdmVyID0gewogCS5uYW1lCQk9ICJjaDM0MSIsCiAJLnByb2JlCQk9IHVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCT0gY2gzNDFfcmVzZXRfcmVzdW1lLAogCS5pZF90YWJsZQk9IGlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkCT0gMSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPQkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjaDM0MV9kZXZpY2UgPSB7CkBAIC0zMTcsMTIgKzU2NCwxNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAiY2gzNDEtdWFydCIsCiAJfSwKLQkuaWRfdGFibGUgICAgICAgICA9IGlkX3RhYmxlLAotCS51c2JfZHJpdmVyICAgICAgID0gJmNoMzQxX2RyaXZlciwKLQkubnVtX3BvcnRzICAgICAgICA9IDEsCi0JLm9wZW4gICAgICAgICAgICAgPSBjaDM0MV9vcGVuLAotCS5zZXRfdGVybWlvcyAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCi0JLmF0dGFjaCAgICAgICAgICAgPSBjaDM0MV9hdHRhY2gsCisJLmlkX3RhYmxlICAgICAgICAgID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgICAgICAgID0gJmNoMzQxX2RyaXZlciwKKwkubnVtX3BvcnRzICAgICAgICAgPSAxLAorCS5vcGVuICAgICAgICAgICAgICA9IGNoMzQxX29wZW4sCisJLmNsb3NlICAgICAgICAgICAgID0gY2gzNDFfY2xvc2UsCisJLmlvY3RsICAgICAgICAgICAgID0gY2gzNDFfaW9jdGwsCisJLnNldF90ZXJtaW9zICAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ICAgICAgICAgID0gY2gzNDFfdGlvY21nZXQsCisJLnRpb2Ntc2V0ICAgICAgICAgID0gY2gzNDFfdGlvY21zZXQsCisJLnJlYWRfaW50X2NhbGxiYWNrID0gY2gzNDFfcmVhZF9pbnRfY2FsbGJhY2ssCisJLmF0dGFjaCAgICAgICAgICAgID0gY2gzNDFfYXR0YWNoLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY2gzNDFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCnNpbWlsYXJpdHkgaW5kZXggODQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpyZW5hbWUgdG8gZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDliNDA4MmIuLmU4ZDUxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiB0aGFua3MgdG8gS2FybCBIaXJhbW90byBrYXJsQGhpcmFtb3RvLm9yZy4gUlRTQ1RTIGhhcmR3YXJlIGZsb3cKICAqIGNvbnRyb2wgdGhhbmtzIHRvIE11bmlyIE5hc3NhciBuYXNzYXJtdUByZWFsLXRpbWUuY29tCiAgKgotICogT3V0c3RhbmRpbmcgSXNzdWVzOgotICogIEJ1ZmZlcnMgYXJlIG5vdCBmbHVzaGVkIHdoZW4gdGhlIHBvcnQgaXMgb3BlbmVkLgotICogIE11bHRpcGxlIGNhbGxzIHRvIHdyaXRlKCkgbWF5IGZhaWwgd2l0aCAiUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMxLDcgKzI3LDcgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjA3IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDgiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJTaWxpY29uIExhYnMgQ1AyMTAxL0NQMjEwMiBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIiCiAKIC8qCkBAIC00MiwxNyArMzgsMjEgQEAKIHN0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKik7CiBzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAogCQkJCQkJCXN0cnVjdCBmaWxlKik7Ci1zdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApOwogc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKIAkJCQkJCQlzdHJ1Y3Qga3Rlcm1pb3MqKTsKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqLAorCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICosIGludCk7CiBzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICopOwogc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICopOwogCi0KIHN0YXRpYyBpbnQgZGVidWc7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKQEAgLTkxLDYgKzkxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMGM0LCAweDgyOTMpIH0sIC8qIFRlbGVnZXN5cyBFVFJYMlVTQiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODM0MSkgfSwgLyogU2llbWVucyBNQzM1UFUgR1BSUyBNb2RlbSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNBOCkgfSwgLyogQW1iZXIgV2lyZWxlc3MgQU1CMjU2MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQ2RSkgfSwgLyogQkVJIFVTQiBTZW5zb3IgSW50ZXJmYWNlIChWQ1ApICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAxKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0JzY29wZTUwICovCkBAIC0yMjUsNyArMjI2LDcgQEAKIAlrZnJlZShidWYpOwogCiAJaWYgKHJlc3VsdCAhPSBzaXplKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIHNlbmQgY29uZmlnIHJlcXVlc3QsICIKKwkJZGJnKCIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCiAJCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKIAkJcmV0dXJuIC1FUFJPVE87CkBAIC0yNzYsNyArMjc3LDcgQEAKIAlrZnJlZShidWYpOwogCiAJaWYgKChzaXplID4gMiAmJiByZXN1bHQgIT0gc2l6ZSkgfHwgcmVzdWx0IDwgMCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIHJlcXVlc3QsICIKKwkJZGJnKCIlcyAtIFVuYWJsZSB0byBzZW5kIHJlcXVlc3QsICIKIAkJCQkicmVxdWVzdD0weCV4IHNpemU9JWQgcmVzdWx0PSVkXG4iLAogCQkJCV9fZnVuY19fLCByZXF1ZXN0LCBzaXplLCByZXN1bHQpOwogCQlyZXR1cm4gLUVQUk9UTzsKQEAgLTMwMSw2ICszMDIsNDcgQEAKIAlyZXR1cm4gY3AyMTAxX3NldF9jb25maWcocG9ydCwgcmVxdWVzdCwgJmRhdGEsIDIpOwogfQogCisvKgorICogY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlCisgKiBRdWFudGlzZXMgdGhlIGJhdWQgcmF0ZSBhcyBwZXIgQU4yMDUgVGFibGUgMQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZSh1bnNpZ25lZCBpbnQgYmF1ZCkgeworCWlmICAgICAgKGJhdWQgPD0gNTYpICAgICAgIGJhdWQgPSAwOworCWVsc2UgaWYgKGJhdWQgPD0gMzAwKSAgICAgIGJhdWQgPSAzMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA2MDApICAgICAgYmF1ZCA9IDYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDEyMDApICAgICBiYXVkID0gMTIwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE4MDApICAgICBiYXVkID0gMTgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI0MDApICAgICBiYXVkID0gMjQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDQwMDApICAgICBiYXVkID0gNDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDQ4MDMpICAgICBiYXVkID0gNDgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDcyMDcpICAgICBiYXVkID0gNzIwMDsKKwllbHNlIGlmIChiYXVkIDw9IDk2MTIpICAgICBiYXVkID0gOTYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE0NDI4KSAgICBiYXVkID0gMTQ0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNjA2MikgICAgYmF1ZCA9IDE2MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTkyNTApICAgIGJhdWQgPSAxOTIwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI4OTEyKSAgICBiYXVkID0gMjg4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAzODYwMSkgICAgYmF1ZCA9IDM4NDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTE1NTgpICAgIGJhdWQgPSA1MTIwMDsKKwllbHNlIGlmIChiYXVkIDw9IDU2MjgwKSAgICBiYXVkID0gNTYwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1ODA1MykgICAgYmF1ZCA9IDU3NjAwOworCWVsc2UgaWYgKGJhdWQgPD0gNjQxMTEpICAgIGJhdWQgPSA2NDAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDc3NjA4KSAgICBiYXVkID0gNzY4MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMTcwMjgpICAgYmF1ZCA9IDExNTIwMDsKKwllbHNlIGlmIChiYXVkIDw9IDEyOTM0NykgICBiYXVkID0gMTI4MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTU2ODY4KSAgIGJhdWQgPSAxNTM2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyMzc4MzIpICAgYmF1ZCA9IDIzMDQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI1NDIzNCkgICBiYXVkID0gMjUwMDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjczMDY2KSAgIGJhdWQgPSAyNTYwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA0OTE1MjApICAgYmF1ZCA9IDQ2MDgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDU2NzEzOCkgICBiYXVkID0gNTAwMDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNjcwMjU0KSAgIGJhdWQgPSA1NzYwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxMDUzMjU3KSAgYmF1ZCA9IDkyMTYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE0NzQ1NjApICBiYXVkID0gMTIyODgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDI0NTc2MDApICBiYXVkID0gMTg0MzIwMDsKKwllbHNlICAgICAgICAgICAgICAgICAgICAgICBiYXVkID0gMzY4NjQwMDsKKwlyZXR1cm4gYmF1ZDsKK30KKwogc3RhdGljIGludCBjcDIxMDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkJCXN0cnVjdCBmaWxlICpmaWxwKQogewpAQCAtMzMxLDEwICszNzMsMTIgQEAKIAl9CiAKIAkvKiBDb25maWd1cmUgdGhlIHRlcm1pb3Mgc3RydWN0dXJlICovCi0JY3AyMTAxX2dldF90ZXJtaW9zKHR0eSk7CisJY3AyMTAxX2dldF90ZXJtaW9zKHR0eSwgcG9ydCk7CiAKIAkvKiBTZXQgdGhlIERUUiBhbmQgUlRTIHBpbnMgbG93ICovCi0JY3AyMTAxX3Rpb2Ntc2V0KHR0eSwgTlVMTCwgVElPQ01fRFRSIHwgVElPQ01fUlRTLCAwKTsKKwljcDIxMDFfdGlvY21zZXRfcG9ydCh0dHkgPyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhCisJCQk6IHBvcnQsCisJCU5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM3Niw5ICs0MjAsMzEgQEAKICAqIGZyb20gdGhlIGRldmljZSwgY29ycmVjdHMgYW55IHVuc3VwcG9ydGVkIHZhbHVlcywgYW5kIGNvbmZpZ3VyZXMgdGhlCiAgKiB0ZXJtaW9zIHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlCiAgKi8KLXN0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgaW50IGJhdWQ7CisKKwlpZiAodHR5KSB7CisJCWNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHR0eS0+ZHJpdmVyX2RhdGEsCisJCQkmdHR5LT50ZXJtaW9zLT5jX2NmbGFnLCAmYmF1ZCk7CisJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7CisJfQorCisJZWxzZSB7CisJCXVuc2lnbmVkIGludCBjZmxhZzsKKwkJY2ZsYWcgPSAwOworCQljcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydChwb3J0LCAmY2ZsYWcsICZiYXVkKTsKKwl9Cit9CisKKy8qCisgKiBjcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydAorICogVGhpcyBpcyB0aGUgaGVhcnQgb2YgY3AyMTAxX2dldF90ZXJtaW9zIHdoaWNoIGFsd2F5cyB1c2VzIGEgJnVzYl9zZXJpYWxfcG9ydC4KKyAqLworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBpbnQgKmNmbGFncCwgdW5zaWduZWQgaW50ICpiYXVkcCkKK3sKIAl1bnNpZ25lZCBpbnQgY2ZsYWcsIG1vZGVtX2N0bFs0XTsKIAl1bnNpZ25lZCBpbnQgYmF1ZDsKIAl1bnNpZ25lZCBpbnQgYml0czsKQEAgLTM4OCwxMiArNDU0LDEyIEBACiAJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JBVURSQVRFLCAmYmF1ZCwgMik7CiAJLyogQ29udmVydCB0byBiYXVkcmF0ZSAqLwogCWlmIChiYXVkKQotCQliYXVkID0gQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZDsKKwkJYmF1ZCA9IGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZSgoQkFVRF9SQVRFX0dFTl9GUkVRICsgYmF1ZC8yKS8gYmF1ZCk7CiAKIAlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CisJKmJhdWRwID0gYmF1ZDsKIAotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7Ci0JY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJY2ZsYWcgPSAqY2ZsYWdwOwogCiAJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKIAljZmxhZyAmPSB+Q1NJWkU7CkBAIC00OTksNyArNTY1LDcgQEAKIAkJY2ZsYWcgJj0gfkNSVFNDVFM7CiAJfQogCi0JdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gY2ZsYWc7CisJKmNmbGFncCA9IGNmbGFnOwogfQogCiBzdGF0aWMgdm9pZCBjcDIxMDFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTUxNyw0NiArNTgzLDE2IEBACiAJdHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DTVNQQVI7CiAJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7Ci0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYmF1ZCA9IGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZSh0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpKTsKIAogCS8qIElmIHRoZSBiYXVkIHJhdGUgaXMgdG8gYmUgdXBkYXRlZCovCi0JaWYgKGJhdWQgIT0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKSkgewotCQlzd2l0Y2ggKGJhdWQpIHsKLQkJY2FzZSAwOgotCQljYXNlIDYwMDoKLQkJY2FzZSAxMjAwOgotCQljYXNlIDE4MDA6Ci0JCWNhc2UgMjQwMDoKLQkJY2FzZSA0ODAwOgotCQljYXNlIDcyMDA6Ci0JCWNhc2UgOTYwMDoKLQkJY2FzZSAxNDQwMDoKLQkJY2FzZSAxOTIwMDoKLQkJY2FzZSAyODgwMDoKLQkJY2FzZSAzODQwMDoKLQkJY2FzZSA1NTg1NDoKLQkJY2FzZSA1NzYwMDoKLQkJY2FzZSAxMTUyMDA6Ci0JCWNhc2UgMTI3MTE3OgotCQljYXNlIDIzMDQwMDoKLQkJY2FzZSA0NjA4MDA6Ci0JCWNhc2UgOTIxNjAwOgotCQljYXNlIDM2ODY0MDA6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJhdWQgPSA5NjAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoYmF1ZCkgewotCQkJZGJnKCIlcyAtIFNldHRpbmcgYmF1ZCByYXRlIHRvICVkIGJhdWQiLCBfX2Z1bmNfXywKLQkJCQkJYmF1ZCk7Ci0JCQlpZiAoY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHBvcnQsIENQMjEwMV9CQVVEUkFURSwKLQkJCQkJCShCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkKSkpIHsKLQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJCYXVkIHJhdGUgcmVxdWVzdGVkIG5vdCAiCi0JCQkJCQkic3VwcG9ydGVkIGJ5IGRldmljZVxuIik7Ci0JCQkJYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcyk7Ci0JCQl9CisJaWYgKGJhdWQgIT0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKSAmJiBiYXVkICE9IDApIHsKKwkJZGJnKCIlcyAtIFNldHRpbmcgYmF1ZCByYXRlIHRvICVkIGJhdWQiLCBfX2Z1bmNfXywKKwkJCQliYXVkKTsKKwkJaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCisJCQkJCSgoQkFVRF9SQVRFX0dFTl9GUkVRICsgYmF1ZC8yKSAvIGJhdWQpKSkgeworCQkJZGJnKCJCYXVkIHJhdGUgcmVxdWVzdGVkIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwkJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOwogCQl9CiAJfQogCS8qIFJlcG9ydCBiYWNrIHRoZSByZXN1bHRpbmcgYmF1ZCByYXRlICovCkBAIC01ODgsMTQgKzYyNCwxNCBAQAogCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkiLCBfX2Z1bmNfXyk7CiAJCQlicmVhazsqLwogCQlkZWZhdWx0OgotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCisJCQlkYmcoImNwMjEwMSBkcml2ZXIgZG9lcyBub3QgIgogCQkJCQkic3VwcG9ydCB0aGUgbnVtYmVyIG9mIGJpdHMgcmVxdWVzdGVkLCIKIAkJCQkJIiB1c2luZyA4IGJpdCBtb2RlXG4iKTsKIAkJCQliaXRzIHw9IEJJVFNfREFUQV84OwogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpKQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTnVtYmVyIG9mIGRhdGEgYml0cyByZXF1ZXN0ZWQgIgorCQkJZGJnKCJOdW1iZXIgb2YgZGF0YSBiaXRzIHJlcXVlc3RlZCAiCiAJCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CiAJfQogCkBAIC02MTIsNyArNjQ4LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlBhcml0eSBtb2RlIG5vdCBzdXBwb3J0ZWQgIgorCQkJZGJnKCJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKIAkJCQkJImJ5IGRldmljZVxuIik7CiAJfQogCkBAIC02MjcsNyArNjYzLDcgQEAKIAkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOwogCQl9CiAJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpKQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgorCQkJZGJnKCJOdW1iZXIgb2Ygc3RvcCBiaXRzIHJlcXVlc3RlZCAiCiAJCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CiAJfQogCkBAIC02NjEsNiArNjk3LDEyIEBACiAJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlyZXR1cm4gY3AyMTAxX3Rpb2Ntc2V0X3BvcnQocG9ydCwgZmlsZSwgc2V0LCBjbGVhcik7Cit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0X3BvcnQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKIAl1bnNpZ25lZCBpbnQgY29udHJvbCA9IDA7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtNjg1LDcgKzcyNyw2IEBACiAJZGJnKCIlcyAtIGNvbnRyb2wgPSAweCUuNHgiLCBfX2Z1bmNfXywgY29udHJvbCk7CiAKIAlyZXR1cm4gY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0NPTlRST0wsICZjb250cm9sLCAyKTsKLQogfQogCiBzdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGFlODRjMzIuLmRjYzg3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xOTM4LDE4ICsxOTM4LDE2IEBACiAJCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LwogCQkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKIAkJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLwotCQlpZiAocHJpdiAhPSBOVUxMKSB7Ci0JCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCi0JCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKLQkJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7Ci0JCQkJcHJpdi0+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+cHJvdG9faGFuZGxlciA9IGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2g7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeXByZXNzX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWN5cHJlc3MiLAorCS5wcm9iZSA9CWN5cHJlc3NfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JY3lwcmVzc191c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjeXByZXNzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeXByZXNzX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjeXByZXNzX2luaXQpOworbW9kdWxlX2V4aXQoY3lwcmVzc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKaW5kZXggMTdmMWFlMi4uMmI2ZTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KQEAgLTU4LDEyICs1OSw2NSBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJkYXRhZmFiLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEYXRhZmFiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiSmltbWllIE1heWZpZWxkIDxtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0cnVjdCBkYXRhZmFiX2luZm8geworCXVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOwkvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KKwl1bnNpZ25lZCBsb25nICAgc3NpemU7CQkvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCXNpZ25lZCBjaGFyCWx1bjsJCS8qIHVzZWQgZm9yIGR1YWwtc2xvdCByZWFkZXJzICovCisKKwkvKiB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldCAqLworCXVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisJdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKIHN0YXRpYyBpbnQgZGF0YWZhYl9kZXRlcm1pbmVfbHVuKHN0cnVjdCB1c19kYXRhICp1cywKIAkJCQkgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbyk7CiAKIAorLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgZGF0YWZhYl91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGF0YWZhYi5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGF0YWZhYl91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBkYXRhZmFiX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogc3RhdGljIGlubGluZSBpbnQKIGRhdGFmYWJfYnVsa19yZWFkKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikgewogCWlmIChsZW4gPT0gMCkKQEAgLTUwMCw3ICs1NTQsNyBAQAogCiAvLyBUcmFuc3BvcnQgZm9yIHRoZSBEYXRhZmFiIE1EQ0ZFLUIKIC8vCi1pbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvOwogCWludCByYzsKQEAgLTY2NSwzICs3MTksNDkgQEAKIAlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KKworc3RhdGljIGludCBkYXRhZmFiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gZGF0YWZhYl91c2JfaWRzKSArIGRhdGFmYWJfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiRGF0YWZhYiBCdWxrLU9ubHkiOworCXVzLT50cmFuc3BvcnQgPSBkYXRhZmFiX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkYXRhZmFiX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWRhdGFmYWIiLAorCS5wcm9iZSA9CWRhdGFmYWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JZGF0YWZhYl91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYXRhZmFiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZkYXRhZmFiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYXRhZmFiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmZGF0YWZhYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkYXRhZmFiX2luaXQpOworbW9kdWxlX2V4aXQoZGF0YWZhYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTNmMjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIERhdGFmYWIgTURDRkUtQiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKLSAqIEhlYWRlciBGaWxlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrZGF0YWZhYkBzYWNraGVhZHMub3JnKQotICoKLSAqIFNlZSBkYXRhZmFiLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfREFUQUZBQl9NRENGRV9CX0gKLSNkZWZpbmUgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAotCi1leHRlcm4gaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotc3RydWN0IGRhdGFmYWJfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7CS8vIHRvdGFsIHNlY3RvciBjb3VudAotCXVuc2lnbmVkIGxvbmcgICBzc2l6ZTsJCS8vIHNlY3RvciBzaXplIGluIGJ5dGVzCi0Jc2lnbmVkIGNoYXIJbHVuOwkJLy8gdXNlZCBmb3IgZHVhbC1zbG90IHJlYWRlcnMKLQkKLQkvLyB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldAotCXVuc2lnbmVkIGNoYXIgICBzZW5zZV9rZXk7Ci0JdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlCi0JdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzY3E7CS8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwppbmRleCA3M2FjNzI2Li41NGNjOTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwpAQCAtMjYsNiArMjYsNyBAQAogICogKGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8pCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAKQEAgLTMzLDcgKzM0LDEwIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImZyZWVjb20uaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yIik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBCcm93biA8dXNiLXN0b3JhZ2VAZGF2aWRiLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRwogc3RhdGljIHZvaWQgcGR1bXAgKHZvaWQgKiwgaW50KTsKQEAgLTEwMyw2ICsxMDcsNDcgQEAKICNkZWZpbmUgRkNNX1BBQ0tFVF9MRU5HVEgJCTY0CiAjZGVmaW5lIEZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSAk0CiAKK3N0YXRpYyBpbnQgaW5pdF9mcmVlY29tKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgZnJlZWNvbV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZnJlZWNvbS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZnJlZWNvbV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBmcmVlY29tX3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9mcmVlY29tLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKIHN0YXRpYyBpbnQKIGZyZWVjb21fcmVhZGRhdGEgKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzLAogCQl1bnNpZ25lZCBpbnQgaXBpcGUsIHVuc2lnbmVkIGludCBvcGlwZSwgaW50IGNvdW50KQpAQCAtMTczLDcgKzIxOCw3IEBACiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvci4KICAqCiAgKi8KLWludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGZyZWVjb21fY2Jfd3JhcCAqZmNiOwogCXN0cnVjdCBmcmVlY29tX3N0YXR1cyAgKmZzdDsKQEAgLTM3Nyw4ICs0MjIsNyBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotaW50Ci1mcmVlY29tX2luaXQgKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaW5pdF9mcmVlY29tKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmVzdWx0OwogCWNoYXIgKmJ1ZmZlciA9IHVzLT5pb2J1ZjsKQEAgLTQxNyw3ICs0NjEsNyBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotaW50IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlwcmludGsgKEtFUk5fQ1JJVCAiZnJlZWNvbSByZXNldCBjYWxsZWRcbiIpOwogCkBAIC00NzksMyArNTIzLDQ4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBmcmVlY29tX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gZnJlZWNvbV91c2JfaWRzKSArIGZyZWVjb21fdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJGcmVlY29tIjsKKwl1cy0+dHJhbnNwb3J0ID0gZnJlZWNvbV90cmFuc3BvcnQ7CisJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAwOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZnJlZWNvbV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1mcmVlY29tIiwKKwkucHJvYmUgPQlmcmVlY29tX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWZyZWVjb21fdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnJlZWNvbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZnJlZWNvbV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnJlZWNvbV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmZyZWVjb21fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZnJlZWNvbV9pbml0KTsKK21vZHVsZV9leGl0KGZyZWVjb21fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGQwZmU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyogRHJpdmVyIGZvciBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgotICoKLSAqIEZyZWVjb20gdjAuMToKLSAqCi0gKiBGaXJzdCByZWxlYXNlCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgIChjKSAyMDAwIERhdmlkIEJyb3duIDx1c2Itc3RvcmFnZUBkYXZpZGIub3JnPgotICoKLSAqIFNlZSBmcmVlY29tLmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9GUkVFQ09NX1VTQl9ICi0jZGVmaW5lIF9GUkVFQ09NX1VTQl9ICi0KLWV4dGVybiBpbnQgZnJlZWNvbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGZyZWVjb21faW5pdCAoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCAzODNhYmYyLi44ODJjNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CkBAIC01Nyw3ICs1OCw1MyBAQAogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzY3NpZ2x1ZS5oIgotI2luY2x1ZGUgImlzZDIwMC5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgSW4tU3lzdGVtIERlc2lnbiwgSW5jLiBJU0QyMDAgQVNJQyIpOworTU9EVUxFX0FVVEhPUigiQmr2cm4gU3RlbmJlcmcgPGJqb3JuQGhheHguc2U+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgaXNkMjAwX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9pc2QyMDAuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlzZDIwMF91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisjdW5kZWYgVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBpc2QyMDBfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2lzZDIwMC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIFVTVUFMX0RFVgogCiAKIC8qIFRpbWVvdXQgZGVmaW5lcyAoaW4gU2Vjb25kcykgKi8KQEAgLTE1MTgsNyArMTU2NSw3IEBACiAgKiBJbml0aWFsaXphdGlvbiBmb3IgdGhlIElTRDIwMCAKICAqLwogCi1pbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaXNkMjAwX0luaXRpYWxpemF0aW9uKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlVU19ERUJVR1AoIklTRDIwMCBJbml0aWFsaXphdGlvbi4uLlxuIik7CiAKQEAgLTE1NDksNyArMTU5Niw3IEBACiAgKgogICovCiAKLXZvaWQgaXNkMjAwX2F0YV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHZvaWQgaXNkMjAwX2F0YV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCBzZW5kVG9UcmFuc3BvcnQgPSAxLCBvcmlnX2J1ZmZsZW47CiAJdW5pb24gYXRhX2NkYiBhdGFDZGI7CkBAIC0xNTcwLDMgKzE2MTcsNDcgQEAKIAogCWlzZDIwMF9zcmJfc2V0X2J1ZmZsZW4oc3JiLCBvcmlnX2J1ZmZsZW4pOwogfQorCitzdGF0aWMgaW50IGlzZDIwMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGlzZDIwMF91c2JfaWRzKSArIGlzZDIwMF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnByb3RvY29sX25hbWUgPSAiSVNEMjAwIEFUQS9BVEFQSSI7CisJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpc2QyMDBfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtaXNkMjAwIiwKKwkucHJvYmUgPQlpc2QyMDBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JaXNkMjAwX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlzZDIwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmaXNkMjAwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpc2QyMDBfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZpc2QyMDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaXNkMjAwX2luaXQpOworbW9kdWxlX2V4aXQoaXNkMjAwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMzVmNGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIEhlYWRlciBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCi0gKgotICogRmlyc3QgcmVsZWFzZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIChzdXBwb3J0QGluLXN5c3RlbS5jb20pCi0gKgotICogU2VlIGlzZDIwMC5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9JU0QyMDBfSAotI2RlZmluZSBfVVNCX0lTRDIwMF9ICi0KLWV4dGVybiB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwppbmRleCBkZjY3ZjEzLi4xYzY5NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCkBAIC00Niw2ICs0Niw3IEBACiAgICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTUsOSArNTYsNjEgQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAianVtcHNob3QuaCIKIAogCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgTGV4YXIgXCJKdW1wc2hvdFwiIENvbXBhY3QgRmxhc2ggcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJKaW1taWUgTWF5ZmllbGQgPG1heWZpZWxkK3VzYkBzYWNraGVhZHMub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBqdW1wc2hvdF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGp1bXBzaG90X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGp1bXBzaG90X3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9qdW1wc2hvdC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKK3N0cnVjdCBqdW1wc2hvdF9pbmZvIHsKKyAgIHVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOyAgICAgLyogdG90YWwgc2VjdG9yIGNvdW50ICovCisgICB1bnNpZ25lZCBsb25nICAgc3NpemU7ICAgICAgIC8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCisKKyAgIC8qIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0ICovCisgICB1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKKwogc3RhdGljIGlubGluZSBpbnQganVtcHNob3RfYnVsa19yZWFkKHN0cnVjdCB1c19kYXRhICp1cywKIAkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAogCQkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKQEAgLTQyOSw3ICs0ODIsNyBAQAogCiAvLyBUcmFuc3BvcnQgZm9yIHRoZSBMZXhhciAnSnVtcHNob3QnCiAvLwotaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QganVtcHNob3RfaW5mbyAqaW5mbzsKIAlpbnQgcmM7CkBAIC01OTIsMyArNjQ1LDQ5IEBACiAJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CisKK3N0YXRpYyBpbnQganVtcHNob3RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBqdW1wc2hvdF91c2JfaWRzKSArIGp1bXBzaG90X3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkxleGFyIEp1bXBzaG90IENvbnRyb2wvQnVsayI7CisJdXMtPnRyYW5zcG9ydCA9IGp1bXBzaG90X3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBqdW1wc2hvdF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1qdW1wc2hvdCIsCisJLnByb2JlID0JanVtcHNob3RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JanVtcHNob3RfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQganVtcHNob3RfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmp1bXBzaG90X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqdW1wc2hvdF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmp1bXBzaG90X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGp1bXBzaG90X2luaXQpOworbW9kdWxlX2V4aXQoanVtcHNob3RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YmFjOWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyogRHJpdmVyIGZvciBMZXhhciAiSnVtcHNob3QiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCt1c2JAc2Fja2hlYWRzLm9yZykKLSAqCi0gKiBTZWUganVtcHNob3QuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9KVU1QU0hPVF9ICi0jZGVmaW5lIF9VU0JfSlVNUFNIT1RfSAotCi1leHRlcm4gaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBqdW1wc2hvdF9pbmZvIHsKLSAgIHVuc2lnbmVkIGxvbmcgICBzZWN0b3JzOyAgICAgLy8gdG90YWwgc2VjdG9yIGNvdW50Ci0gICB1bnNpZ25lZCBsb25nICAgc3NpemU7ICAgICAgIC8vIHNlY3RvciBzaXplIGluIGJ5dGVzCi0gCi0gICAvLyB0aGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIHlldAotICAgdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKLSAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2M7ICAgLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlCi0gICB1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5jCmluZGV4IDBkNzlhZTUuLjc5NTNkOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKQEAgLTE4LDYgKzE4LDggQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMjUsNyArMjcsMTAgQEAKICNpbmNsdWRlICJ1c2IuaCIKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImthcm1hLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBSaW8gS2FybWEiKTsKK01PRFVMRV9BVVRIT1IoIkJvYiBDb3BlbGFuZCA8bWVAYm9iY29wZWxhbmQuY29tPiwgS2VpdGggQmVubmV0dCA8a2VpdGhAbWNzLnN0LWFuZC5hYy51az4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2RlZmluZSBSSU9fUFJFRklYICJSSU9QXHgwMCIKICNkZWZpbmUgUklPX1BSRUZJWF9MRU4gNQpAQCAtMzYsMTMgKzQxLDUzIEBACiAjZGVmaW5lIFJJT19MRUFWRV9TVE9SQUdFIDB4MgogI2RlZmluZSBSSU9fUkVTRVQgMHhDCiAKLWV4dGVybiBpbnQgdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSAqKTsKLQogc3RydWN0IGthcm1hX2RhdGEgewogCWludCBpbl9zdG9yYWdlOwogCWNoYXIgKnJlY3Y7CiB9OwogCitzdGF0aWMgaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQga2FybWFfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2thcm1hLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBrYXJtYV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBrYXJtYV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfa2FybWEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiAvKgogICogU2VuZCBjb21tYW5kcyB0byBSaW8gS2FybWEuCiAgKgpAQCAtMTA0LDcgKzE0OSw3IEBACiAgKiBUcmFwIFNUQVJUX1NUT1AgYW5kIFJFQURfMTAgdG8gbGVhdmUvcmUtZW50ZXIgc3RvcmFnZSBtb2RlLgogICogRXZlcnl0aGluZyBlbHNlIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIG5vcm1hbCBidWxrIGxheWVyLgogICovCi1pbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0gKHN0cnVjdCBrYXJtYV9kYXRhICopIHVzLT5leHRyYTsKQEAgLTEzMyw3ICsxNzgsNyBAQAogCWtmcmVlKGRhdGEtPnJlY3YpOwogfQogCi1pbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCByaW9fa2FybWFfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGthcm1hX2RhdGEgKmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga2FybWFfZGF0YSksIEdGUF9OT0lPKTsKQEAgLTE1MywzICsxOTgsNDggQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorCitzdGF0aWMgaW50IGthcm1hX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0ga2FybWFfdXNiX2lkcykgKyBrYXJtYV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlJpbyBLYXJtYS9CdWxrIjsKKwl1cy0+dHJhbnNwb3J0ID0gcmlvX2thcm1hX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGthcm1hX2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLWthcm1hIiwKKwkucHJvYmUgPQlrYXJtYV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlrYXJtYV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrYXJtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigma2FybWFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGthcm1hX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigma2FybWFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa2FybWFfaW5pdCk7Cittb2R1bGVfZXhpdChrYXJtYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE2MDk3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0tBUk1BX1VTQl9ICi0jZGVmaW5lIF9LQVJNQV9VU0JfSAotCi1leHRlcm4gaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHJpb19rYXJtYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYwppbmRleCBmOTcwYjI3Li5mZTNmZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCkBAIC0zOCwzNyArMzgsNiBAQAogc3RhdGljIGludCB1c3VfcHJvYmVfdGhyZWFkKHZvaWQgKmFyZyk7CiAKIC8qCi0gKiBUaGUgdGFibGUuCi0gKi8KLSNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAotCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpLCBcCi0gIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9Ci0KLSNkZWZpbmUgQ09NUExJQU5UX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCi0JCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAotCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoteyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAotICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpIH0KLQotI2RlZmluZSBVU1VBTF9ERVYodXNlUHJvdG8sIHVzZVRyYW5zLCB1c2VUeXBlKSBcCi17IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCB1c2VQcm90bywgdXNlVHJhbnMpLCBcCi0gIC5kcml2ZXJfaW5mbyA9ICgodXNlVHlwZSk8PDI0KSB9Ci0KLXN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKLSMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCi0JeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0jdW5kZWYgVVNVQUxfREVWCi0jdW5kZWYgVU5VU1VBTF9ERVYKLSN1bmRlZiBDT01QTElBTlRfREVWCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdG9yYWdlX3VzYl9pZHMpOwotRVhQT1JUX1NZTUJPTF9HUEwoc3RvcmFnZV91c2JfaWRzKTsKLQotLyoKICAqIEB0eXBlOiB0aGUgbW9kdWxlIHR5cGUgYXMgYW4gaW50ZWdlcgogICovCiB2b2lkIHVzYl91c3VhbF9zZXRfcHJlc2VudChpbnQgdHlwZSkKQEAgLTE2Nyw3ICsxMzYsNyBAQAogCS5uYW1lID0JCSJsaWJ1c3VhbCIsCiAJLnByb2JlID0JdXN1X3Byb2JlLAogCS5kaXNjb25uZWN0ID0JdXN1X2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0Jc3RvcmFnZV91c2JfaWRzLAorCS5pZF90YWJsZSA9CXVzYl9zdG9yYWdlX3VzYl9pZHMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IGM3YmY4OTUuLjM4MDIzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTM1LDkgKzM1LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAjaW5jbHVkZSAidXNiLmgiCi0jaW5jbHVkZSAib25ldG91Y2guaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCitNT0RVTEVfREVTQ1JJUFRJT04oIk1heHRvciBVU0IgT25lVG91Y2ggaGFyZCBkcml2ZSBidXR0b24gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIFNpbGxpayA8bi5zaWxsaWtAdGVtcGxlLmVkdT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBPTkVUT1VDSF9QS1RfTEVOICAgICAgICAweDAyCisjZGVmaW5lIE9ORVRPVUNIX0JVVFRPTiAgICAgICAgIEtFWV9QUk9HMQorCitzdGF0aWMgaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKTsKIHN0YXRpYyB2b2lkIG9uZXRvdWNoX3JlbGVhc2VfaW5wdXQodm9pZCAqb25ldG91Y2hfKTsKIAogc3RydWN0IHVzYl9vbmV0b3VjaCB7CkBAIC01Miw2ICs1OSw0NiBAQAogCXVuc2lnbmVkIGludCBpc19vcGVuOjE7CiB9OwogCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIG9uZXRvdWNoX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9vbmV0b3VjaC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb25ldG91Y2hfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgb25ldG91Y2hfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX29uZXRvdWNoLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKwogc3RhdGljIHZvaWQgdXNiX29uZXRvdWNoX2lycShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9vbmV0b3VjaCAqb25ldG91Y2ggPSB1cmItPmNvbnRleHQ7CkBAIC0xMjcsNyArMTc0LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKQorc3RhdGljIGludCBvbmV0b3VjaF9jb25uZWN0X2lucHV0KHN0cnVjdCB1c19kYXRhICpzcykKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNzLT5wdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CkBAIC0yMzYsMyArMjgzLDQ2IEBACiAJCQkJb25ldG91Y2gtPmRhdGEsIG9uZXRvdWNoLT5kYXRhX2RtYSk7CiAJfQogfQorCitzdGF0aWMgaW50IG9uZXRvdWNoX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gb25ldG91Y2hfdXNiX2lkcykgKyBvbmV0b3VjaF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogVXNlIGRlZmF1bHQgdHJhbnNwb3J0IGFuZCBwcm90b2NvbCAqLworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb25ldG91Y2hfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtb25ldG91Y2giLAorCS5wcm9iZSA9CW9uZXRvdWNoX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CW9uZXRvdWNoX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9uZXRvdWNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZvbmV0b3VjaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb25ldG91Y2hfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZvbmV0b3VjaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvbmV0b3VjaF9pbml0KTsKK21vZHVsZV9leGl0KG9uZXRvdWNoX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWM3YWE4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfT05FVE9VQ0hfSF8KLSNkZWZpbmUgX09ORVRPVUNIX0hfCi0KLSNkZWZpbmUgT05FVE9VQ0hfUEtUX0xFTiAgICAgICAgMHgwMgotI2RlZmluZSBPTkVUT1VDSF9CVVRUT04gICAgICAgICBLRVlfUFJPRzEKLQotaW50IG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQoc3RydWN0IHVzX2RhdGEgKnNzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKaW5kZXggYmU0NDFkOC4uZmMzMTBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9wcm90b2NvbC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwpAQCAtMTIxLDYgKzEyMSw3IEBACiAJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCiAJdXNiX3N0b3JfaW52b2tlX3RyYW5zcG9ydChzcmIsIHVzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU2NhdHRlci1nYXRoZXIgdHJhbnNmZXIgYnVmZmVyIGFjY2VzcyByb3V0aW5lcwpAQCAtMTk5LDYgKzIwMCw3IEBACiAJLyogUmV0dXJuIHRoZSBhbW91bnQgYWN0dWFsbHkgdHJhbnNmZXJyZWQgKi8KIAlyZXR1cm4gY250OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKTsKIAogLyogU3RvcmUgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBpbnRvIHNyYidzIHRyYW5zZmVyIGJ1ZmZlciBhbmQgc2V0IHRoZQogICogU0NTSSByZXNpZHVlLgpAQCAtMjE1LDMgKzIxNyw0IEBACiAJaWYgKGJ1ZmxlbiA8IHNjc2lfYnVmZmxlbihzcmIpKQogCQlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gYnVmbGVuKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3NldF94ZmVyX2J1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggNzI3YzUwNi4uNGNhM2I1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMTM1LDYgKzEzNSwxMiBAQAogCQlpZiAoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+bWF4X3NlY3RvcnMgPiBtYXhfc2VjdG9ycykKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCQkgICAgICBtYXhfc2VjdG9ycyk7CisJfSBlbHNlIGlmIChzZGV2LT50eXBlID09IFRZUEVfVEFQRSkgeworCQkvKiBUYXBlcyBuZWVkIG11Y2ggaGlnaGVyIG1heF9zZWN0b3IgbGltaXRzLCBzbyBqdXN0CisJCSAqIHJhaXNlIGl0IHRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlICg0IEdCIC8gNTEyKSBhbmQKKwkJICogbGV0IHRoZSBxdWV1ZSBzZWdtZW50IHNpemUgc29ydCBvdXQgdGhlIHJlYWwgbGltaXQuCisJCSAqLworCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMHg3RkZGRkYpOwogCX0KIAogCS8qIFNvbWUgVVNCIGhvc3QgY29udHJvbGxlcnMgY2FuJ3QgZG8gRE1BOyB0aGV5IGhhdmUgdG8gdXNlIFBJTy4KQEAgLTU2Myw0ICs1NjksNCBAQAogCVs3XQk9IDB4MGEsCQkJICAgIC8qIGFkZGl0aW9uYWwgbGVuZ3RoICovCiAJWzEyXQk9IDB4MjQJCQkgICAgLyogSW52YWxpZCBGaWVsZCBpbiBDREIgKi8KIH07Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKaW5kZXggNTMxYWU1Yy4uYWI1ZjlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCkBAIC00MSw2ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CkBAIC01MSw3ICs1Miw1MyBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgInByb3RvY29sLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJzZGRyMDkuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlciIpOworTU9EVUxFX0FVVEhPUigiQW5kcmllcyBCcm91d2VyIDxhZWJAY3dpLm5sPiwgUm9iZXJ0IEJhcnVjaCA8YXV0b3BoaWxlQHN0YXJiYW5kLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CitzdGF0aWMgaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworc3RhdGljIGludCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHNkZHIwOV91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzZGRyMDlfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisvKgorICogVGhlIGZsYWdzIHRhYmxlCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgc2RkcjA5X3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9zZGRyMDkuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKIAogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKTw8OCApICkKQEAgLTcyMyw3ICs3NzAsNyBAQAogCWxlbiA9IG1pbihzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUpICogaW5mby0+cGFnZXNpemU7CiAJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzZGRyMDlfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3JlYWRfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODM4LDcgKzg4NSw4IEBACiAJaWYgKHBiYSA9PSBVTkRFRikgewogCQlwYmEgPSBzZGRyMDlfZmluZF91bnVzZWRfcGJhKGluZm8sIGxiYSk7CiAJCWlmICghcGJhKSB7Ci0JCQlwcmludGsoInNkZHIwOV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5X3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcbiIpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAkJaW5mby0+cGJhX3RvX2xiYVtwYmFdID0gbGJhOwpAQCAtODQ5LDcgKzg5Nyw3IEBACiAJaWYgKHBiYSA9PSAxKSB7CiAJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCiAJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLwotCQlwcmludGsoInNkZHIwOTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTU0LDcgKzEwMDIsNyBAQAogCWJsb2NrbGVuID0gKHBhZ2VsZW4gPDwgaW5mby0+YmxvY2tzaGlmdCk7CiAJYmxvY2tidWZmZXIgPSBrbWFsbG9jKGJsb2NrbGVuLCBHRlBfTk9JTyk7CiAJaWYgKCFibG9ja2J1ZmZlcikgewotCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTk2NSw3ICsxMDEzLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDlfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCWtmcmVlKGJsb2NrYnVmZmVyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTExMiw3ICsxMTYwLDcgQEAKIAogCWlmIChyZXN1bHQpIHsKIAkJVVNfREVCVUdQKCJSZXN1bHQgb2YgcmVhZF9kZXZpY2VJRCBpcyAlZFxuIiwgcmVzdWx0KTsKLQkJcHJpbnRrKCJzZGRyMDk6IGNvdWxkIG5vdCByZWFkIGNhcmQgaW5mb1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOTogY291bGQgbm90IHJlYWQgY2FyZCBpbmZvXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMTUzLDcgKzEyMDEsNyBAQAogCQlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKIAkJCSIsIFdQIik7CiAKLQlwcmludGsoIiVzXG4iLCBibHVyYnR4dCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXNcbiIsIGJsdXJidHh0KTsKIAogCXJldHVybiBjYXJkaW5mbzsKIH0KQEAgLTExODQsNyArMTIzMiw3IEBACiAJYWxsb2NfbGVuID0gKGFsbG9jX2Jsb2NrcyA8PCBDT05UUk9MX1NISUZUKTsKIAlidWZmZXIgPSBrbWFsbG9jKGFsbG9jX2xlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTE5OCw3ICsxMjQ2LDcgQEAKIAlpbmZvLT5wYmFfdG9fbGJhID0ga21hbGxvYyhudW1ibG9ja3Mqc2l6ZW9mKGludCksIEdGUF9OT0lPKTsKIAogCWlmIChpbmZvLT5sYmFfdG9fcGJhID09IE5VTEwgfHwgaW5mby0+cGJhX3RvX2xiYSA9PSBOVUxMKSB7Ci0JCXByaW50aygic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2RkcjA5X3JlYWRfbWFwOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmVzdWx0ID0gLTE7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xMjM4LDcgKzEyODYsOCBAQAogCQkJaWYgKHB0cltqXSAhPSAwKQogCQkJCWdvdG8gbm9uejsKIAkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOwotCQlwcmludGsoInNkZHIwOTogUEJBICVkIGhhcyBubyBsb2dpY2FsIG1hcHBpbmdcbiIsIGkpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nXG4iLAorCQkgICAgICAgaSk7CiAJCWNvbnRpbnVlOwogCiAJbm9uejoKQEAgLTEyNTEsNyArMTMwMCw4IEBACiAJbm9uZmY6CiAJCS8qIG5vcm1hbCBQQkFzIHN0YXJ0IHdpdGggc2l4IEZGcyAqLwogCQlpZiAoaiA8IDYpIHsKLQkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IFBCQSAlZCBoYXMgbm8gbG9naWNhbCBtYXBwaW5nOiAiCiAJCQkgICAgICAgInJlc2VydmVkIGFyZWEgPSAlMDJYJTAyWCUwMlglMDJYICIKIAkJCSAgICAgICAiZGF0YSBzdGF0dXMgJTAyWCBibG9jayBzdGF0dXMgJTAyWFxuIiwKIAkJCSAgICAgICBpLCBwdHJbMF0sIHB0clsxXSwgcHRyWzJdLCBwdHJbM10sCkBAIC0xMjYxLDcgKzEzMTEsOCBAQAogCQl9CiAKIAkJaWYgKChwdHJbNl0gPj4gNCkgIT0gMHgwMSkgewotCQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgaW52YWxpZCBhZGRyZXNzIGZpZWxkICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBQQkEgJWQgaGFzIGludmFsaWQgYWRkcmVzcyBmaWVsZCAiCiAJCQkgICAgICAgIiUwMlglMDJYLyUwMlglMDJYXG4iLAogCQkJICAgICAgIGksIHB0cls2XSwgcHRyWzddLCBwdHJbMTFdLCBwdHJbMTJdKTsKIAkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKQEAgLTEyNzAsNyArMTMyMSw4IEBACiAKIAkJLyogY2hlY2sgZXZlbiBwYXJpdHkgKi8KIAkJaWYgKHBhcml0eVtwdHJbNl0gXiBwdHJbN11dKSB7Ci0JCQlwcmludGsoInNkZHIwOTogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZGRyMDk6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKIAkJCSAgICAgICAiICglMDJYICUwMlgpXG4iLCBpLCBwdHJbNl0sIHB0cls3XSk7CiAJCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CiAJCQljb250aW51ZTsKQEAgLTEyODksNyArMTM0MSw4IEBACiAJCSAqLwogCiAJCWlmIChsYmEgPj0gMTAwMCkgewotCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjA5OiBCYWQgbG93IExCQSAlZCBmb3IgYmxvY2sgJWRcbiIsCiAJCQkgICAgICAgbGJhLCBpKTsKIAkJCWdvdG8gcG9zc2libHlfZXJhc2U7CiAJCX0KQEAgLTEyOTcsNyArMTM1MCw4IEBACiAJCWxiYSArPSAxMDAwKihpLzB4NDAwKTsKIAogCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmFdICE9IFVOREVGKSB7Ci0JCQlwcmludGsoInNkZHIwOTogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgInNkZHIwOTogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCiAJCQkgICAgICAgbGJhLCBpbmZvLT5sYmFfdG9fcGJhW2xiYV0sIGkpOwogCQkJZ290byBwb3NzaWJseV9lcmFzZTsKIAkJfQpAQCAtMTM5OSw3ICsxNDUzLDcgQEAKICAqIHVudXN1YWwgZGV2aWNlcyBsaXN0IGJ1dCBjYWxsZWQgZnJvbSBoZXJlIHRoZW4gTFVOIDAgb2YgdGhlIGNvbWJvIHJlYWRlcgogICogaXMgbm90IHJlY29nbml6ZWQuIEJ1dCBJIGRvIG5vdCBrbm93IHdoYXQgcHJlY2lzZWx5IHRoZXNlIGNhbGxzIGRvLgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOwpAQCAtMTQ0OSw3ICsxNTAzLDcgQEAKIC8qCiAgKiBUcmFuc3BvcnQgZm9yIHRoZSBNaWNyb3RlY2ggRFBDTS1VU0IKICAqLwotaW50IGRwY21fdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmV0OwogCkBAIC0xNDkxLDcgKzE1NDUsNyBAQAogLyoKICAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi0wOQogICovCi1pbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgc2RkcjA5X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBzZW5zZWtleSA9IDAsIHNlbnNlY29kZSA9IDA7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaGF2ZWZha2VzZW5zZSA9IDA7CkBAIC0xNjkwLDcgKzE3NDQsNjAgQEAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgc2RkcjA5IHN1YmRyaXZlcgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHVzYl9zdG9yX3NkZHIwOV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykgewogCXJldHVybiBzZGRyMDlfY29tbW9uX2luaXQodXMpOwogfQorCitzdGF0aWMgaW50IHNkZHIwOV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIHNkZHIwOV91c2JfaWRzKSArIHNkZHIwOV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9EUENNX1VTQikgeworCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrLUVVU0IvU0REUjA5IjsKKwkJdXMtPnRyYW5zcG9ydCA9IGRwY21fdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMTsKKwl9IGVsc2UgeworCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiRVVTQi9TRERSMDkiOworCQl1cy0+dHJhbnNwb3J0ID0gc2RkcjA5X3RyYW5zcG9ydDsKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0NCX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDA7CisJfQorCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RkcjA5X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLXNkZHIwOSIsCisJLnByb2JlID0Jc2RkcjA5X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CXNkZHIwOV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZGRyMDlfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNkZHIwOV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RkcjA5X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RkcjA5X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNkZHIwOV9pbml0KTsKK21vZHVsZV9leGl0KHNkZHIwOV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzAxMTcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCi0gKiAgIChjKSAyMDAyIEFuZHJpZXMgQnJvdXdlciAoYWViQGN3aS5ubCkKLSAqCi0gKiBTZWUgc2RkcjA5LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfU0hVVFRMRV9FVVNCX1NERFIwOV9ICi0jZGVmaW5lIF9VU0JfU0hVVFRMRV9FVVNCX1NERFIwOV9ICi0KLS8qIFNhbmRpc2sgU0REUi0wOSBzdHVmZiAqLwotCi1leHRlcm4gaW50IHNkZHIwOV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi0vKiBNaWNyb3RlY2ggRFBDTS1VU0Igc3R1ZmYgKi8KLQotZXh0ZXJuIGludCBkcGNtX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwppbmRleCAwZDhkZjc1Li40NGRmZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtMzMsNyArMzQsNDggQEAKICNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKICNpbmNsdWRlICJwcm90b2NvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic2RkcjU1LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNpbW9uIE11bnRvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBzZGRyNTVfdXNiX2lkc1tdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX3NkZHI1NS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc2RkcjU1X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHNkZHI1NV91bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjU1LmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworI3VuZGVmIFVOVVNVQUxfREVWCiAKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCkBAIC01MTMsNyArNTU1LDggQEAKIH0KIAogCi1pbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykgeworc3RhdGljIGludCBzZGRyNTVfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQorewogCXJldHVybiAwOwogfQogCkBAIC03MDMsNyArNzQ2LDkgQEAKIAkJCiAJCWlmIChpbmZvLT5sYmFfdG9fcGJhW2xiYSArIHpvbmUgKiAxMDAwXSAhPSBOT1RfQUxMT0NBVEVEICYmCiAJCSAgICAhaW5mby0+Zm9yY2VfcmVhZF9vbmx5KSB7Ci0JCQlwcmludGsoInNkZHI1NTogbWFwIGluY29uc2lzdGVuY3kgYXQgTEJBICUwNFhcbiIsIGxiYSArIHpvbmUgKiAxMDAwKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAic2RkcjU1OiBtYXAgaW5jb25zaXN0ZW5jeSBhdCBMQkEgJTA0WFxuIiwKKwkJCSAgICAgICBsYmEgKyB6b25lICogMTAwMCk7CiAJCQlpbmZvLT5mb3JjZV9yZWFkX29ubHkgPSAxOwogCQl9CiAKQEAgLTczMiw3ICs3NzcsNyBAQAogLyoKICAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi01NQogICovCi1pbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlpbnQgcmVzdWx0OwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbOF0gPSB7CkBAIC05MjksMyArOTc0LDQ5IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7IC8vIEZJWE1FOiBzZW5zZSBidWZmZXI/CiB9CiAKKworc3RhdGljIGludCBzZGRyNTVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBzZGRyNTVfdXNiX2lkcykgKyBzZGRyNTVfdW51c3VhbF9kZXZfbGlzdCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTRERSNTUiOworCXVzLT50cmFuc3BvcnQgPSBzZGRyNTVfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSBzZGRyNTVfcmVzZXQ7CisJdXMtPm1heF9sdW4gPSAwOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RkcjU1X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLXNkZHI1NSIsCisJLnByb2JlID0Jc2RkcjU1X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CXNkZHI1NV91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZGRyNTVfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNkZHI1NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RkcjU1X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RkcjU1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNkZHI1NV9pbml0KTsKK21vZHVsZV9leGl0KHNkZHI1NV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODE1YTA0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDIgU2ltb24gTXVudG9uCi0gKgotICogU2VlIHNkZHI1NS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSNTVfSAotI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSNTVfSAotCi0vKiBTYW5kaXNrIFNERFItNTUgc3R1ZmYgKi8KLQotZXh0ZXJuIGludCBzZGRyNTVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwppbmRleCBhZTZkNjQ4MS4uYjYyYTI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKQEAgLTQyLDYgKzQyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KIApAQCAtNTIsNyArNTMsMTAwIEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInNodXR0bGVfdXNiYXQuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNDTSBNaWNyb3N5c3RlbXMgKGEuay5hLiBTaHV0dGxlKSBVU0ItQVRBUEkgY2FibGUiKTsKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+LCBSb2JlcnQgQmFydWNoIDxhdXRvcGhpbGVAc3RhcmJhbmQubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBTdXBwb3J0ZWQgZGV2aWNlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0RFVl9IUDgyMDAJMHgwMQorI2RlZmluZSBVU0JBVF9ERVZfRkxBU0gJCTB4MDIKKworI2RlZmluZSBVU0JBVF9FUFBfUE9SVAkJMHgxMAorI2RlZmluZSBVU0JBVF9FUFBfUkVHSVNURVIJMHgzMAorI2RlZmluZSBVU0JBVF9BVEEJCTB4NDAKKyNkZWZpbmUgVVNCQVRfSVNBCQkweDUwCisKKy8qIENvbW1hbmRzIChuZWVkIHRvIGJlIGxvZ2ljYWxseSBPUidkIHdpdGggYW4gYWNjZXNzIHR5cGUgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX1JFQURfUkVHCQkweDAwCisjZGVmaW5lIFVTQkFUX0NNRF9XUklURV9SRUcJCTB4MDEKKyNkZWZpbmUgVVNCQVRfQ01EX1JFQURfQkxPQ0sJMHgwMgorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfQkxPQ0sJMHgwMworI2RlZmluZSBVU0JBVF9DTURfQ09ORF9SRUFEX0JMT0NLCTB4MDQKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfV1JJVEVfQkxPQ0sJMHgwNQorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHUwkweDA3CisKKy8qIENvbW1hbmRzICh0aGVzZSBkb24ndCBuZWVkIGFuIGFjY2VzcyB0eXBlKSAqLworI2RlZmluZSBVU0JBVF9DTURfRVhFQ19DTUQJMHg4MAorI2RlZmluZSBVU0JBVF9DTURfU0VUX0ZFQVQJMHg4MQorI2RlZmluZSBVU0JBVF9DTURfVUlPCQkweDgyCisKKy8qIE1ldGhvZHMgb2YgYWNjZXNzaW5nIFVJTyByZWdpc3RlciAqLworI2RlZmluZSBVU0JBVF9VSU9fUkVBRAkxCisjZGVmaW5lIFVTQkFUX1VJT19XUklURQkwCisKKy8qIFF1YWxpZmllciBiaXRzICovCisjZGVmaW5lIFVTQkFUX1FVQUxfRkNRCTB4MjAJLyogZnVsbCBjb21wYXJlICovCisjZGVmaW5lIFVTQkFUX1FVQUxfQUxRCTB4MTAJLyogYXV0byBsb2FkIHN1YmNvdW50ICovCisKKy8qIFVTQkFUIEZsYXNoIE1lZGlhIHN0YXR1cyB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9OT05FCTAKKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfQ0YJMQorCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBjaGFuZ2UgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfU0FNRQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NIQU5HRUQJMQorCisvKiBVU0JBVCBBVEEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQkFUX0FUQV9EQVRBICAgICAgMHgxMCAgLyogcmVhZC93cml0ZSBkYXRhIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9GRUFUVVJFUyAgMHgxMSAgLyogc2V0IGZlYXR1cmVzIChXKSAqLworI2RlZmluZSBVU0JBVF9BVEFfRVJST1IgICAgIDB4MTEgIC8qIGVycm9yIChSKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU0VDQ05UICAgIDB4MTIgIC8qIHNlY3RvciBjb3VudCAoUi9XKSAqLworI2RlZmluZSBVU0JBVF9BVEFfU0VDTlVNICAgIDB4MTMgIC8qIHNlY3RvciBudW1iZXIgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0xCQV9NRSAgICAweDE0ICAvKiBjeWxpbmRlciBsb3cgKFIvVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0xCQV9ISSAgICAweDE1ICAvKiBjeWxpbmRlciBoaWdoIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9ERVZJQ0UgICAgMHgxNiAgLyogaGVhZC9kZXZpY2Ugc2VsZWN0aW9uIChSL1cpICovCisjZGVmaW5lIFVTQkFUX0FUQV9TVEFUVVMgICAgMHgxNyAgLyogZGV2aWNlIHN0YXR1cyAoUikgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0NNRCAgICAgICAweDE3ICAvKiBkZXZpY2UgY29tbWFuZCAoVykgKi8KKyNkZWZpbmUgVVNCQVRfQVRBX0FMVFNUQVRVUyAweDBFICAvKiBzdGF0dXMgKG5vIGNsZWFyIElSUSkgKFIpICovCisKKy8qIFVTQkFUIFVzZXIgSS9PIERhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQkFUX1VJT19FUEFECQkweDgwIC8qIEVuYWJsZSBQZXJpcGhlcmFsIENvbnRyb2wgU2lnbmFscyAqLworI2RlZmluZSBVU0JBVF9VSU9fQ0RUCQkweDQwIC8qIENhcmQgRGV0ZWN0IChSZWFkIE9ubHkpICovCisJCQkJICAgICAvKiBDRFQgPSBBQ0tEICYgIVVJMSAmICFVSTAgKi8KKyNkZWZpbmUgVVNCQVRfVUlPXzEJCTB4MjAgLyogSS9PIDEgKi8KKyNkZWZpbmUgVVNCQVRfVUlPXzAJCTB4MTAgLyogSS9PIDAgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0VQUF9BVEEJMHgwOCAvKiAxPUVQUCBtb2RlLCAwPUFUQSBtb2RlICovCisjZGVmaW5lIFVTQkFUX1VJT19VSTEJCTB4MDQgLyogSW5wdXQgMSAqLworI2RlZmluZSBVU0JBVF9VSU9fVUkwCQkweDAyIC8qIElucHV0IDAgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX0lOVFJfQUNLCTB4MDEgLyogSW50ZXJydXB0IChBVEEvSVNBKS9BY2tub3dsZWRnZSAoRVBQKSAqLworCisvKiBVU0JBVCBVc2VyIEkvTyBFbmFibGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQkFUX1VJT19EUlZSU1QJMHg4MCAvKiBSZXNldCBQZXJpcGhlcmFsICovCisjZGVmaW5lIFVTQkFUX1VJT19BQ0tECQkweDQwIC8qIEVuYWJsZSBDYXJkIERldGVjdCAqLworI2RlZmluZSBVU0JBVF9VSU9fT0UxCQkweDIwIC8qIEkvTyAxIHNldD1vdXRwdXQvY2xyPWlucHV0ICovCisJCQkJICAgICAvKiBJZiBBQ0tEPTEsIHNldCBPRTEgdG8gMSBhbHNvLiAqLworI2RlZmluZSBVU0JBVF9VSU9fT0UwCQkweDEwIC8qIEkvTyAwIHNldD1vdXRwdXQvY2xyPWlucHV0ICovCisjZGVmaW5lIFVTQkFUX1VJT19BRFBSU1QJMHgwMSAvKiBSZXNldCBTQ00gY2hpcCAqLworCisvKiBVU0JBVCBGZWF0dXJlcyAqLworI2RlZmluZSBVU0JBVF9GRUFUX0VURU4JMHg4MAkvKiBFeHRlcm5hbCB0cmlnZ2VyIGVuYWJsZSAqLworI2RlZmluZSBVU0JBVF9GRUFUX1UxCTB4MDgKKyNkZWZpbmUgVVNCQVRfRkVBVF9VMAkweDA0CisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQxCTB4MDIKKyNkZWZpbmUgVVNCQVRfRkVBVF9FVDIJMHgwMQorCitzdHJ1Y3QgdXNiYXRfaW5mbyB7CisJaW50IGRldmljZXR5cGU7CisKKwkvKiBVc2VkIGZvciBGbGFzaCByZWFkZXJzIG9ubHkgKi8KKwl1bnNpZ25lZCBsb25nIHNlY3RvcnM7ICAgICAvKiB0b3RhbCBzZWN0b3IgY291bnQgKi8KKwl1bnNpZ25lZCBsb25nIHNzaXplOyAgICAgICAvKiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworCisJdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7CisJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7ICAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOyAgLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKIAogI2RlZmluZSBzaG9ydF9wYWNrKExTQixNU0IpICggKCh1MTYpKExTQikpIHwgKCAoKHUxNikoTVNCKSk8PDggKSApCiAjZGVmaW5lIExTQl9vZihzKSAoKHMpJjB4RkYpCkBAIC02Myw2ICsxNTcsNDggQEAKIHN0YXRpYyBpbnQgdXNiYXRfZmxhc2hfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CiBzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKIAorc3RhdGljIGludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cyk7CitzdGF0aWMgaW50IGluaXRfdXNiYXRfZmxhc2goc3RydWN0IHVzX2RhdGEgKnVzKTsKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JhdF91c2JfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYmF0X3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IHVzYmF0X3VudXN1YWxfZGV2X2xpc3RbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF91c2JhdC5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCiAvKgogICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcHJvZHVjZSBhbiBBVEEgcmVhZC93cml0ZSBzZWN0b3JzIGNvbW1hbmQKICAqIFVzZSBjbWQ9MHgyMCBmb3IgcmVhZCwgY21kPTB4MzAgZm9yIHdyaXRlCkBAIC0xNjg0LDM3ICsxODIwLDYxIEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiB9CiAKLWludCBpbml0X3VzYmF0X2NkKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9jZChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJcmV0dXJuIGluaXRfdXNiYXQodXMsIFVTQkFUX0RFVl9IUDgyMDApOwogfQogCi0KLWludCBpbml0X3VzYmF0X2ZsYXNoKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJcmV0dXJuIGluaXRfdXNiYXQodXMsIFVTQkFUX0RFVl9GTEFTSCk7CiB9CiAKLWludCBpbml0X3VzYmF0X3Byb2JlKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyBpbnQgdXNiYXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCXJldHVybiBpbml0X3VzYmF0KHVzLCAwKTsKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMSgmdXMsIGludGYsIGlkLAorCQkJKGlkIC0gdXNiYXRfdXNiX2lkcykgKyB1c2JhdF91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogVGhlIGFjdHVhbCB0cmFuc3BvcnQgd2lsbCBiZSBkZXRlcm1pbmVkIGxhdGVyIGJ5IHRoZQorCSAqIGluaXRpYWxpemF0aW9uIHJvdXRpbmU7IHRoaXMgaXMganVzdCBhIHBsYWNlaG9sZGVyLgorCSAqLworCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJTaHV0dGxlIFVTQkFUIjsKKwl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfZmxhc2hfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qCi0gKiBEZWZhdWx0IHRyYW5zcG9ydCBmdW5jdGlvbi4gQXR0ZW1wdHMgdG8gZGV0ZWN0IHdoaWNoIHRyYW5zcG9ydCBmdW5jdGlvbgotICogc2hvdWxkIGJlIGNhbGxlZCwgbWFrZXMgaXQgdGhlIG5ldyBkZWZhdWx0LCBhbmQgY2FsbHMgaXQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiBPdXIgdXNiYXRfaW5pdCgpIGZ1bmN0aW9uIGRldGVjdHMgdGhlCi0gKiBkZXZpY2UgdHlwZSBhbmQgY2hhbmdlcyB0aGUgdXMtPnRyYW5zcG9ydCBwdHIgdG8gdGhlIHRyYW5zcG9ydCBmdW5jdGlvbgotICogcmVsZXZhbnQgdG8gdGhlIGRldmljZS4KLSAqIEhvd2V2ZXIsIHdlJ2xsIHN1cHBvcnQgdGhpcyBpbXBvc3NpYmxlKD8pIGNhc2UgYW55d2F5LgotICovCi1pbnQgdXNiYXRfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYmF0X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidW1zLXVzYmF0IiwKKwkucHJvYmUgPQl1c2JhdF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQl1c2JhdF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9CTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JhdF9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHVzYmF0X2luZm8gKmluZm8gPSAoc3RydWN0IHVzYmF0X2luZm8qKSAodXMtPmV4dHJhKTsKLQotCWlmICh1c2JhdF9zZXRfdHJhbnNwb3J0KHVzLCBpbmZvLCAwKSkKLQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKLQotCXJldHVybiB1cy0+dHJhbnNwb3J0KHNyYiwgdXMpOwkKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1c2JhdF9kcml2ZXIpOwogfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiYXRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JhdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JhdF9pbml0KTsKK21vZHVsZV9leGl0KHVzYmF0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiZmM0My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKiBEcml2ZXIgZm9yIFNDTSBNaWNyb3N5c3RlbXMgVVNCLUFUQVBJIGNhYmxlCi0gKiBIZWFkZXIgRmlsZQotICoKLSAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgotICogICAoYykgMjAwMCBSb2JlcnQgQmFydWNoIChhdXRvcGhpbGVAZG9sLm5ldCkKLSAqICAgKGMpIDIwMDQsIDIwMDUgRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4KLSAqCi0gKiBTZWUgc2h1dHRsZV91c2JhdC5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfVVNCX1NIVVRUTEVfVVNCQVRfSAotI2RlZmluZSBfVVNCX1NIVVRUTEVfVVNCQVRfSAotCi0vKiBTdXBwb3J0ZWQgZGV2aWNlIHR5cGVzICovCi0jZGVmaW5lIFVTQkFUX0RFVl9IUDgyMDAJMHgwMQotI2RlZmluZSBVU0JBVF9ERVZfRkxBU0gJCTB4MDIKLQotI2RlZmluZSBVU0JBVF9FUFBfUE9SVAkJMHgxMAotI2RlZmluZSBVU0JBVF9FUFBfUkVHSVNURVIJMHgzMAotI2RlZmluZSBVU0JBVF9BVEEJCTB4NDAKLSNkZWZpbmUgVVNCQVRfSVNBCQkweDUwCi0KLS8qIENvbW1hbmRzIChuZWVkIHRvIGJlIGxvZ2ljYWxseSBPUidkIHdpdGggYW4gYWNjZXNzIHR5cGUgKi8KLSNkZWZpbmUgVVNCQVRfQ01EX1JFQURfUkVHCQkweDAwCi0jZGVmaW5lIFVTQkFUX0NNRF9XUklURV9SRUcJCTB4MDEKLSNkZWZpbmUgVVNCQVRfQ01EX1JFQURfQkxPQ0sJMHgwMgotI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfQkxPQ0sJMHgwMwotI2RlZmluZSBVU0JBVF9DTURfQ09ORF9SRUFEX0JMT0NLCTB4MDQKLSNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfV1JJVEVfQkxPQ0sJMHgwNQotI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHUwkweDA3Ci0KLS8qIENvbW1hbmRzICh0aGVzZSBkb24ndCBuZWVkIGFuIGFjY2VzcyB0eXBlKSAqLwotI2RlZmluZSBVU0JBVF9DTURfRVhFQ19DTUQJMHg4MAotI2RlZmluZSBVU0JBVF9DTURfU0VUX0ZFQVQJMHg4MQotI2RlZmluZSBVU0JBVF9DTURfVUlPCQkweDgyCi0KLS8qIE1ldGhvZHMgb2YgYWNjZXNzaW5nIFVJTyByZWdpc3RlciAqLwotI2RlZmluZSBVU0JBVF9VSU9fUkVBRAkxCi0jZGVmaW5lIFVTQkFUX1VJT19XUklURQkwCi0KLS8qIFF1YWxpZmllciBiaXRzICovCi0jZGVmaW5lIFVTQkFUX1FVQUxfRkNRCTB4MjAJLyogZnVsbCBjb21wYXJlICovCi0jZGVmaW5lIFVTQkFUX1FVQUxfQUxRCTB4MTAJLyogYXV0byBsb2FkIHN1YmNvdW50ICovCi0KLS8qIFVTQkFUIEZsYXNoIE1lZGlhIHN0YXR1cyB0eXBlcyAqLwotI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9OT05FCTAKLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfQ0YJMQotCi0vKiBVU0JBVCBGbGFzaCBNZWRpYSBjaGFuZ2UgdHlwZXMgKi8KLSNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfU0FNRQkwCi0jZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NIQU5HRUQJMQotCi0vKiBVU0JBVCBBVEEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFVTQkFUX0FUQV9EQVRBICAgICAgMHgxMCAgLyogcmVhZC93cml0ZSBkYXRhIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9GRUFUVVJFUyAgMHgxMSAgLyogc2V0IGZlYXR1cmVzIChXKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfRVJST1IgICAgIDB4MTEgIC8qIGVycm9yIChSKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfU0VDQ05UICAgIDB4MTIgIC8qIHNlY3RvciBjb3VudCAoUi9XKSAqLwotI2RlZmluZSBVU0JBVF9BVEFfU0VDTlVNICAgIDB4MTMgIC8qIHNlY3RvciBudW1iZXIgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0xCQV9NRSAgICAweDE0ICAvKiBjeWxpbmRlciBsb3cgKFIvVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0xCQV9ISSAgICAweDE1ICAvKiBjeWxpbmRlciBoaWdoIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9ERVZJQ0UgICAgMHgxNiAgLyogaGVhZC9kZXZpY2Ugc2VsZWN0aW9uIChSL1cpICovCi0jZGVmaW5lIFVTQkFUX0FUQV9TVEFUVVMgICAgMHgxNyAgLyogZGV2aWNlIHN0YXR1cyAoUikgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0NNRCAgICAgICAweDE3ICAvKiBkZXZpY2UgY29tbWFuZCAoVykgKi8KLSNkZWZpbmUgVVNCQVRfQVRBX0FMVFNUQVRVUyAweDBFICAvKiBzdGF0dXMgKG5vIGNsZWFyIElSUSkgKFIpICovCi0KLS8qIFVTQkFUIFVzZXIgSS9PIERhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFVTQkFUX1VJT19FUEFECQkweDgwIC8qIEVuYWJsZSBQZXJpcGhlcmFsIENvbnRyb2wgU2lnbmFscyAqLwotI2RlZmluZSBVU0JBVF9VSU9fQ0RUCQkweDQwIC8qIENhcmQgRGV0ZWN0IChSZWFkIE9ubHkpICovCi0JCQkJICAgICAvKiBDRFQgPSBBQ0tEICYgIVVJMSAmICFVSTAgKi8KLSNkZWZpbmUgVVNCQVRfVUlPXzEJCTB4MjAgLyogSS9PIDEgKi8KLSNkZWZpbmUgVVNCQVRfVUlPXzAJCTB4MTAgLyogSS9PIDAgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0VQUF9BVEEJMHgwOCAvKiAxPUVQUCBtb2RlLCAwPUFUQSBtb2RlICovCi0jZGVmaW5lIFVTQkFUX1VJT19VSTEJCTB4MDQgLyogSW5wdXQgMSAqLwotI2RlZmluZSBVU0JBVF9VSU9fVUkwCQkweDAyIC8qIElucHV0IDAgKi8KLSNkZWZpbmUgVVNCQVRfVUlPX0lOVFJfQUNLCTB4MDEgLyogSW50ZXJydXB0IChBVEEvSVNBKS9BY2tub3dsZWRnZSAoRVBQKSAqLwotCi0vKiBVU0JBVCBVc2VyIEkvTyBFbmFibGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFVTQkFUX1VJT19EUlZSU1QJMHg4MCAvKiBSZXNldCBQZXJpcGhlcmFsICovCi0jZGVmaW5lIFVTQkFUX1VJT19BQ0tECQkweDQwIC8qIEVuYWJsZSBDYXJkIERldGVjdCAqLwotI2RlZmluZSBVU0JBVF9VSU9fT0UxCQkweDIwIC8qIEkvTyAxIHNldD1vdXRwdXQvY2xyPWlucHV0ICovCi0JCQkJICAgICAvKiBJZiBBQ0tEPTEsIHNldCBPRTEgdG8gMSBhbHNvLiAqLwotI2RlZmluZSBVU0JBVF9VSU9fT0UwCQkweDEwIC8qIEkvTyAwIHNldD1vdXRwdXQvY2xyPWlucHV0ICovCi0jZGVmaW5lIFVTQkFUX1VJT19BRFBSU1QJMHgwMSAvKiBSZXNldCBTQ00gY2hpcCAqLwotCi0vKiBVU0JBVCBGZWF0dXJlcyAqLwotI2RlZmluZSBVU0JBVF9GRUFUX0VURU4JMHg4MAkvKiBFeHRlcm5hbCB0cmlnZ2VyIGVuYWJsZSAqLwotI2RlZmluZSBVU0JBVF9GRUFUX1UxCTB4MDgKLSNkZWZpbmUgVVNCQVRfRkVBVF9VMAkweDA0Ci0jZGVmaW5lIFVTQkFUX0ZFQVRfRVQxCTB4MDIKLSNkZWZpbmUgVVNCQVRfRkVBVF9FVDIJMHgwMQotCi1leHRlcm4gaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50IGluaXRfdXNiYXRfY2Qoc3RydWN0IHVzX2RhdGEgKnVzKTsKLWV4dGVybiBpbnQgaW5pdF91c2JhdF9mbGFzaChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotZXh0ZXJuIGludCBpbml0X3VzYmF0X3Byb2JlKHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCB1c2JhdF9pbmZvIHsKLQlpbnQgZGV2aWNldHlwZTsKLQotCS8qIFVzZWQgZm9yIEZsYXNoIHJlYWRlcnMgb25seSAqLwotCXVuc2lnbmVkIGxvbmcgc2VjdG9yczsgICAgIC8qIHRvdGFsIHNlY3RvciBjb3VudCAqLwotCXVuc2lnbmVkIGxvbmcgc3NpemU7ICAgICAgIC8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCi0KLQl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKLQl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KLQl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7ICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCmluZGV4IGZiNjVkMjIxLi5kNDhjODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTIyMCw2ICsyMjAsNyBAQAogCQlzdGF0dXMgPSB1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGg7CiAJcmV0dXJuIHN0YXR1czsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2NvbnRyb2xfbXNnKTsKIAogLyogVGhpcyBpcyBhIHZlcnNpb24gb2YgdXNiX2NsZWFyX2hhbHQoKSB0aGF0IGFsbG93cyBlYXJseSB0ZXJtaW5hdGlvbiBhbmQKICAqIGRvZXNuJ3QgcmVhZCB0aGUgc3RhdHVzIGZyb20gdGhlIGRldmljZSAtLSB0aGlzIGlzIGJlY2F1c2Ugc29tZSBkZXZpY2VzCkBAIC0yNTQsNiArMjU1LDcgQEAKIAlVU19ERUJVR1AoIiVzOiByZXN1bHQgPSAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2NsZWFyX2hhbHQpOwogCiAKIC8qCkBAIC0zNTIsNiArMzU0LDcgQEAKIAlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIHNpemUsIHJlc3VsdCwKIAkJCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKTsKIAogLyoKICAqIFJlY2VpdmUgb25lIGludGVycnVwdCBidWZmZXIsIHdpdGhvdXQgdGltZW91dHMsIGJ1dCBhbGxvd2luZyBlYXJseQpAQCAtNDA3LDYgKzQxMCw3IEBACiAJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBsZW5ndGgsIHJlc3VsdCwgCiAJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYpOwogCiAvKgogICogVHJhbnNmZXIgYSBzY2F0dGVyLWdhdGhlciBsaXN0IHZpYSBidWxrIHRyYW5zZmVyCkBAIC00NzQsNiArNDc4LDcgQEAKIAlzY3NpX3NldF9yZXNpZChzcmIsIHNjc2lfYnVmZmxlbihzcmIpIC0gcGFydGlhbCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX2J1bGtfc3JiKTsKIAogLyoKICAqIFRyYW5zZmVyIGFuIGVudGlyZSBTQ1NJIGNvbW1hbmQncyB3b3J0aCBvZiBkYXRhIHBheWxvYWQgb3ZlciB0aGUgYnVsawpAQCAtNTA5LDYgKzUxNCw3IEBACiAJCSpyZXNpZHVhbCA9IGxlbmd0aF9sZWZ0OwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUcmFuc3BvcnQgcm91dGluZXMKQEAgLTk0MCw2ICs5NDYsNyBAQAogCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCBwaXBlKTsKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0NCX3RyYW5zcG9ydCk7CiAKIC8qCiAgKiBCdWxrIG9ubHkgdHJhbnNwb3J0CkBAIC0xMTU2LDYgKzExNjMsNyBAQAogCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvLCB3ZSdyZSBpbiB0cm91YmxlICovCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZXNldCByb3V0aW5lcwpAQCAtMTIzMCw2ICsxMjM4LDcgQEAKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIHVzLT5pb2J1ZiwgQ0JfUkVTRVRfQ01EX1NJWkUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQ0JfcmVzZXQpOwogCiAvKiBUaGlzIGlzc3VlcyBhIEJ1bGstb25seSBSZXNldCB0byB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uLCBpbmNsdWRpbmcKICAqIGNsZWFyaW5nIHRoZSBzdWJzZXF1ZW50IGVuZHBvaW50IGhhbHRzIHRoYXQgbWF5IG9jY3VyLgpAQCAtMTI0Miw2ICsxMjUxLDcgQEAKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIE5VTEwsIDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfQnVsa19yZXNldCk7CiAKIC8qIElzc3VlIGEgVVNCIHBvcnQgcmVzZXQgdG8gdGhlIGRldmljZS4gIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZAogICogdXMtPmRldl9tdXRleC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCnNpbWlsYXJpdHkgaW5kZXggNjAlCmNvcHkgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApjb3B5IHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaAppbmRleCBmYmFkYTg5Li44YzQxMmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgKQEAgLTEsOCArMSw0IEBACi0vKgotICogU3VwcG9ydCBmb3IgZW11bGF0aW5nIFNBVCAoYXRhIHBhc3MgdGhyb3VnaCkgb24gZGV2aWNlcyBiYXNlZAotICogICAgICAgb24gdGhlIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2Ugc3VwcG9ydGluZyBBVEFDQi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWF0dGhpZXUgQ2FzdGV0IChjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcikKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE5LDcgKzE1LDE3IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9DWVBSRVNTX0FUQUNCX0hfCi0jZGVmaW5lIF9DWVBSRVNTX0FUQUNCX0hfCi1leHRlcm4gdm9pZCBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOwotI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQV9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNTg0LCAweDAwMDgsIDB4MDEwMiwgMHgwMTAyLAorCQkiRnVqaWZpbG0iLAorCQkiRFBDLVIxIChBbGF1ZGEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwN2I0LCAweDAxMGEsIDB4MDEwMiwgMHgwMTAyLAorCQkiT2x5bXB1cyIsCisJCSJNQVVTQi0xMCAoQWxhdWRhKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YmU2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBkZXZpY2VzIGJhc2VkIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlCisgKgl3aXRoIHN1cHBvcnQgZm9yIEFUQUNCCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQl9NT0RVTEUpCisKKy8qIENZN0M2ODMwMCA6IHN1cHBvcnQgYXRhY2IgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGI0LCAweDY4MzAsIDB4MDAwMCwgMHg5OTk5LAorCQkiQ3lwcmVzcyIsCisJCSJDeXByZXNzIEFUMkxQIiwKKwkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDApLAorCisvKiBDWTdDNjgzMTAgOiBzdXBwb3J0IGF0YWNiIGFuZCBhdGFjYjIgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGI0LCAweDY4MzEsIDB4MDAwMCwgMHg5OTk5LAorCQkiQ3lwcmVzcyIsCisJCSJDeXByZXNzIElTRC0zMDBMUCIsCisJCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RhdGFmYWIuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kYXRhZmFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyOThjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kYXRhZmFiLmgKQEAgLTAsMCArMSw5OCBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBEYXRhZmFiIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUJfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMDAwLCAweDAwMDAsIDB4MDAxNSwKKwkJIkRhdGFmYWIiLAorCQkiTURDRkUtQiBVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIERhdGFmYWItYmFzZWQgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrCisgKiB1c2luZyB0aGUgY3VycmVudCBkcml2ZXIuLi50aGUgMHhmZmZmIGlzIGFyYml0cmFyeSBzaW5jZSBJCisgKiBkb24ndCBrbm93IHdoYXQgZGV2aWNlIHZlcnNpb25zIGV4aXN0IGZvciB0aGVzZSBndXlzLgorICoKKyAqIFRoZSAweGEwMDMgYW5kIDB4YTAwNCBkZXZpY2VzIGluIHBhcnRpY3VsYXIgSSdtIGN1cmlvdXMgYWJvdXQuCisgKiBJJ20gdG9sZCB0aGV5IGV4aXN0IGJ1dCBzbyBmYXIgbm9ib2R5IGhhcyBjb21lIGZvcndhcmQgdG8gc2F5IHRoYXQKKyAqIHRoZXkgd29yayB3aXRoIHRoaXMgZHJpdmVyLiAgR2l2ZW4gdGhlIHN1Y2Nlc3Mgd2UndmUgaGFkIGdldHRpbmcKKyAqIG90aGVyIERhdGFmYWItYmFzZWQgY2FyZHMgb3BlcmF0aW9uYWwgd2l0aCB0aGlzIGRyaXZlciwgSSd2ZSBkZWNpZGVkCisgKiB0byBsZWF2ZSB0aGVzZSB0d28gZGV2aWNlcyBpbiB0aGUgbGlzdC4KKyAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAxLCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNJSUcvRGF0YWZhYiIsCisJCSJTSUlHL0RhdGFmYWIgTWVtb3J5IFN0aWNrK0NGIFJlYWRlci9Xcml0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyogUmVwb3J0ZWQgYnkgSm9zZWYgUmVpc2luZ2VyIDxqb3NlZi5yZWlzaW5nZXJAbmV0Y29sb2duZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMiwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiTUQyL01EMyBEaXNrIGVuY2xvc3VyZSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4pLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDMsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNCwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA1LCAweDAwMDAsIDB4ZmZmZiwKKwkJIlBOWS9EYXRhZmFiIiwKKwkJIlBOWS9EYXRhZmFiIENGK1NNIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDYsIDB4MDAwMCwgMHhmZmZmLAorCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiIsCisJCSJTaW1wbGUgVGVjaC9EYXRhZmFiIENGK1NNIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKiBTdWJtaXR0ZWQgYnkgT2xhZiBIZXJpbmcgPG9saEBzdXNlLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAorCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyogUmVwb3J0ZWQgYnkgRmVsaXggTW9lbGxlciA8ZmVsaXhAZGVya2xlY2tzLmRlPgorICogaW4gR2VybWFueSB0aGlzIGlzIHNvbGQgYnkgSGFtYSB3aXRoIHRoZSBwcm9kdWN0bnVtYmVyIDQ2OTUyCisgKiBhcyAiRHVhbFNsb3QgQ29tcGFjdEZsYXNoKFRNKSAmIE1TdGljayBEcml2ZSBVU0IiCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMGIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YUZhYiBTeXN0ZW1zIEluYy4iLAorCQkiVVNCIENGK01TIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJCSJBY29tZGF0YSIsCisJCSJDRiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4pLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBjZmRlNzRhLi4xYzFmNjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTUzLDYgKzUzLDExIEBACiAgKiBhcyBvcHBvc2VkIHRvIGRldmljZXMgdGhhdCBkbyBzb21ldGhpbmcgc3RyYW5nZWx5IG9yIHdyb25nbHkuCiAgKi8KIAorI2lmICFkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkpICYmIFwKKwkJIWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOV9NT0RVTEUpCisjZGVmaW5lIE5PX1NERFIwOQorI2VuZGlmCisKIC8qIHBhdGNoIHN1Ym1pdHRlZCBieSBWaXZpYW4gQnJlZ2llciA8Vml2aWFuLkJyZWdpZXJAaW1hZy5mcj4KICAqLwogVU5VU1VBTF9ERVYoICAweDAzZWIsIDB4MjAwMiwgMHgwMTAwLCAweDAxMDAsCkBAIC04MCwxOCArODUsNiBAQAogCQkiQ0QtV3JpdGVyKyIsCiAJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAotVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDIwNywgMHgwMDAxLCAweDAwMDEsCi0JCSJIUCIsCi0JCSJDRC1Xcml0ZXIrIDgyMDBlIiwKLQkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAotCi1VTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMzA3LCAweDAwMDEsIDB4MDAwMSwKLQkJIkhQIiwKLQkJIkNELVdyaXRlcisgQ0QtNGUiLAotCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQmVuIEVmcm9zIDxiZW5AcGMtZG9jdG9yLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDA3MGMsIDB4MDAwMCwgMHgwMDAwLAogCQkiSFAiLApAQCAtMjQ2LDEyICsyMzksNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA0MzYsIDB4MDAwNSwgMHgwMTAwLCAweDAxMDAsCi0JCSJNaWNyb3RlY2giLAotCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwICksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA0MzYsIDB4MDAwNSwgMHgwMTAwLCAweDAxMDAsCiAJCSJNaWNyb3RlY2giLAogCQkiQ2FtZXJhTWF0ZSIsCkBAIC0yODgsMTMgKzI3Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQotVU5VU1VBTF9ERVYoICAweDA0NWEsIDB4NTIxMCwgMHgwMTAxLCAweDAxMDEsCi0JCSJSaW8iLAotCQkiUmlvIEthcm1hIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfS0FSTUEsIHJpb19rYXJtYV9pbml0LCAwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBUYW1hcyBLZXJlY3NlbiA8a2VyZWNzZW5AYmlnZm9vdC5jb20+CiAgKiBPYnZpb3VzbHkgdGhlIFBST00gaGFzIG5vdCBiZWVuIGN1c3RvbWl6ZWQgYnkgdGhlIFZBUjsKICAqIHRoZSBWZW5kb3IgYW5kIFByb2R1Y3Qgc3RyaW5nIGRlc2NyaXB0b3JzIGFyZToKQEAgLTM3NSwyMiArMzU2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9DQiwgTlVMTCwKIAkJVVNfRkxfTUFYX1NFQ1RPUlNfTUlOKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0vKiBDWTdDNjgzMDAgOiBzdXBwb3J0IGF0YWNiICovCi1VTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMwLCAweDAwMDAsIDB4OTk5OSwKLQkJIkN5cHJlc3MiLAotCQkiQ3lwcmVzcyBBVDJMUCIsCi0JCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLAotCQkwKSwKLQotLyogQ1k3QzY4MzEwIDogc3VwcG9ydCBhdGFjYiBhbmQgYXRhY2IyICovCi1VTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMxLCAweDAwMDAsIDB4OTk5OSwKLQkJIkN5cHJlc3MiLAotCQkiQ3lwcmVzcyBJU0QtMzAwTFAiLAotCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgU2ltb24gTGV2aXR0IDxzaW1vbkB3aGF0dGYuY29tPgogICogVGhpcyBlbnRyeSBuZWVkcyBTdWIgYW5kIFByb3RvIGZpZWxkcyAqLwogVU5VU1VBTF9ERVYoICAweDA0YjgsIDB4MDYwMSwgMHgwMTAwLCAweDAxMDAsCkBAIC00NjcsMjAgKzQzMiw3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwgCiAJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LAotCQkiU2FuZGlzayIsCi0JCSJJbWFnZU1hdGUgU0REUjA5IiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAotCQkwKSwKLQotLyogVGhpcyBlbnRyeSBpcyBmcm9tIEFuZHJpZXMuQnJvdXdlckBjd2kubmwgKi8KLVVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDUsIDB4MDEwMCwgMHgwMjA4LAotCQkiU0NNIE1pY3Jvc3lzdGVtcyIsCi0JCSJlVVNCIFNtYXJ0TWVkaWEgLyBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCB1c2Jfc3Rvcl9zZGRyMDlfZHBjbV9pbml0LAotCQkwKSwKLSNlbHNlCisjaWZkZWYgTk9fU0REUjA5CiBVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKIAkJIlNDTSBNaWNyb3N5c3RlbXMiLAogCQkiZVVTQiBDb21wYWN0Rmxhc2ggQWRhcHRlciIsCkBAIC01MzUsMTQgKzQ4Nyw2IEBACiAJCSJDRC1SVyBEZXZpY2UiLAogCQlVU19TQ184MDIwLCBVU19QUl9DQiwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAotCQkiU2h1dHRsZS9TQ00iLAotCQkiVVNCQVQtMDIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKLQkJVVNfRkxfU0lOR0xFX0xVTiksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgRG1pdHJ5IEtobHlzdG92IDxhZG1pbmltdXNAZ21haWwuY29tPiAqLwogVU5VU1VBTF9ERVYoICAweDA0ZTgsIDB4NTA3YywgMHgwMjIwLCAweDAyMjAsCiAJCSJTYW1zdW5nIiwKQEAgLTY0NSwxNCArNTg5LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmIsIDB4MDEwMCwgMHgwMTEwLAotCQkiU29ueSIsCi0JCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgT2xhZiBIZXJpbmcsIDxvbGhAc3VzZS5kZT4gU3VTRSBCdWd6aWxsYSAjNDkwNDkgKi8KIFVOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmMsIDB4MDUwMSwgMHgyMDAwLAogCQkiU29ueSIsCkBAIC03NDksMTMgKzY4NSw2IEBACiAJCSJTaWxpY29uIE1lZGlhIFIvVyIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEKLVVOVVNVQUxfREVWKCAgMHgwNTg0LCAweDAwMDgsIDB4MDEwMiwgMHgwMTAyLAotCQkiRnVqaWZpbG0iLAotCQkiRFBDLVIxIChBbGF1ZGEpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDAgKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBSVEUgPHJhc3ppbGtpQHlhbmRleC5ydT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNThmLCAweDYzODcsIDB4MDE0MSwgMHgwMTQxLAogCQkiSmV0Rmxhc2giLApAQCAtNzk4LDMyICs3MjcsNiBAQAogCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLAogCQlVU19GTF9ORUVEX09WRVJSSURFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMDMxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJVU0IvSURFIEJyaWRnZSAoQVRBL0FUQVBJKSIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzMDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMzUxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4NTcwMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiVVNCIFN0b3JhZ2UgQWRhcHRlciBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0jZW5kaWYKLQogLyogU3VibWl0dGVkIGJ5IFN2ZW4gQW5kZXJzb24gPHN2ZW4tbGludXhAYW5kZXJzb24uZGU+CiAgKiBUaGVyZSBhcmUgYXQgbGVhc3QgZm91ciBQcm9kdWN0SURzIHVzZWQgZm9yIGlQb2RzLCBzbyBJIGFkZGVkIDB4MTIwMiBhbmQKICAqIDB4MTIwNC4gVGhleSBqdXN0IG5lZWQgdGhlIFVTX0ZMX0ZJWF9DQVBBQ0lUWS4gQXMgdGhlIGJjZERldmljZSBhcHBlYXJzCkBAIC04NzcsMTQgKzc4MCw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvcHRpb25fbXNfaW5pdCwKIAkJMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKLVVOVVNVQUxfREVWKCAgMHgwNWRjLCAweDAwMDEsIDB4MDAwMCwgMHgwMDAxLAotCQkiTGV4YXIiLAotCQkiSnVtcHNob3QgVVNCIENGIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0pVTVBTSE9ULCBOVUxMLAotCQlVU19GTF9ORUVEX09WRVJSSURFICksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQmxha2UgTWF0aGVueSA8Ym1hdGhlbnlAcHVyZHVlLmVkdT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNWRjLCAweGIwMDIsIDB4MDAwMCwgMHgwMTEzLAogCQkiTGV4YXIiLApAQCAtOTM1LDE0ICs4MzAsNiBAQAogCQkiRmxvcHB5IERyaXZlIiwKIAkJVVNfU0NfVUZJLCBVU19QUl9DQiwgTlVMTCwgMCApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA2NmIsIDB4MDEwNSwgMHgwMTAwLCAweDAxMDAsCi0JCSJPbHltcHVzIiwKLQkJIkNhbWVkaWEgTUFVU0ItMiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKLQkJMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgRGFyc2VuIEx1IDxkYXJzZW5AbWljcm8uZWUubnRodS5lZHUudHc+ICovCiBVTlVTVUFMX0RFViggMHgwNjZmLCAweDgwMDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiU2lnbWFUZWwiLApAQCAtMTA0MywzNSArOTMwLDEyIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAotVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsCi0JCSJTYW5kaXNrIiwKLQkJIkltYWdlTWF0ZSBTRERSLTA1YiIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQogVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsCiAJCSJTYW5kaXNrIiwKIAkJIkltYWdlTWF0ZSBTRERSLTEyIiwKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAyMDAsIDB4MDAwMCwgMHg5OTk5LAotCQkiU2FuZGlzayIsCi0JCSJJbWFnZU1hdGUgU0REUi0wOSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKLQkJMCksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCi1VTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmYzAxLCAweDAwMDAsIDB4OTk5OSwKLQkJIkZyZWVjb20iLAotCQkiVVNCLUlERSIsCi0JCVVTX1NDX1FJQywgVVNfUFJfRlJFRUNPTSwgZnJlZWNvbV9pbml0LCAwKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBFZXJvIFZvbG90aW5lbiA8ZWVyb0BwaW5nLXZpaW5pLm9yZz4gKi8KIFVOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjY2QsIDB4MDAwMCwgMHg5OTk5LAogCQkiRnJlZWNvbSBUZWNobm9sb2dpZXMiLApAQCAtMTA5MSwxMiArOTU1LDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2V1c2NzaV9pbml0LAogCQlVU19GTF9TQ01fTVVMVF9UQVJHICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDdhZiwgMHgwMDA2LCAweDAxMDAsIDB4MDEwMCwKLQkJIk1pY3JvdGVjaCIsCi0JCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKLSNlbHNlCisjaWZkZWYgTk9fU0REUjA5CiBVTlVTVUFMX0RFViggIDB4MDdhZiwgMHgwMDA2LCAweDAxMDAsIDB4MDEwMCwKIAkJIk1pY3JvdGVjaCIsCiAJCSJDYW1lcmFNYXRlIiwKQEAgLTExMDQsMTA4ICs5NjMsNiBAQAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEKLVVOVVNVQUxfREVWKCAgMHgwN2I0LCAweDAxMGEsIDB4MDEwMiwgMHgwMTAyLAotCQkiT2x5bXB1cyIsCi0JCSJNQVVTQi0xMCAoQWxhdWRhKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwICksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMDAwLCAweDAwMDAsIDB4MDAxNSwKLQkJIkRhdGFmYWIiLAotCQkiTURDRkUtQiBVU0IgQ0YgUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi0vKgotICogVGhlIGZvbGxvd2luZyBEYXRhZmFiLWJhc2VkIGRldmljZXMgbWF5IG9yIG1heSBub3Qgd29yawotICogdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyLi4udGhlIDB4ZmZmZiBpcyBhcmJpdHJhcnkgc2luY2UgSQotICogZG9uJ3Qga25vdyB3aGF0IGRldmljZSB2ZXJzaW9ucyBleGlzdCBmb3IgdGhlc2UgZ3V5cy4KLSAqCi0gKiBUaGUgMHhhMDAzIGFuZCAweGEwMDQgZGV2aWNlcyBpbiBwYXJ0aWN1bGFyIEknbSBjdXJpb3VzIGFib3V0LgotICogSSdtIHRvbGQgdGhleSBleGlzdCBidXQgc28gZmFyIG5vYm9keSBoYXMgY29tZSBmb3J3YXJkIHRvIHNheSB0aGF0Ci0gKiB0aGV5IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gIEdpdmVuIHRoZSBzdWNjZXNzIHdlJ3ZlIGhhZCBnZXR0aW5nCi0gKiBvdGhlciBEYXRhZmFiLWJhc2VkIGNhcmRzIG9wZXJhdGlvbmFsIHdpdGggdGhpcyBkcml2ZXIsIEkndmUgZGVjaWRlZAotICogdG8gbGVhdmUgdGhlc2UgdHdvIGRldmljZXMgaW4gdGhlIGxpc3QuCi0gKi8KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMSwgMHgwMDAwLCAweGZmZmYsCi0JCSJTSUlHL0RhdGFmYWIiLAotCQkiU0lJRy9EYXRhZmFiIE1lbW9yeSBTdGljaytDRiBSZWFkZXIvV3JpdGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi0vKiBSZXBvcnRlZCBieSBKb3NlZiBSZWlzaW5nZXIgPGpvc2VmLnJlaXNpbmdlckBuZXRjb2xvZ25lLmRlPiAqLwotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAyLCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJNRDIvTUQzIERpc2sgZW5jbG9zdXJlIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDMsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYi9Vbmtub3duIiwKLQkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDQsIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYi9Vbmtub3duIiwKLQkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDUsIDB4MDAwMCwgMHhmZmZmLAotCQkiUE5ZL0RhdGFmYWIiLAotCQkiUE5ZL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDYsIDB4MDAwMCwgMHhmZmZmLAotCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiIsCi0JCSJTaW1wbGUgVGVjaC9EYXRhZmFiIENGK1NNIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLSNlbmRpZgotCQkKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0vKiBDb250cmlidXRlZCBieSBQZXRlciBXYWVjaHRsZXIgKi8KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksCi0JCSJEYXRhZmFiIiwKLQkJIk1EU00tQiByZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCi0JCVVTX0ZMX0ZJWF9JTlFVSVJZICksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0vKiBTdWJtaXR0ZWQgYnkgT2xhZiBIZXJpbmcgPG9saEBzdXNlLmRlPiAqLwotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAotCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0vKiBTTSBwYXJ0IC0gYWViIDxBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sPiAqLwotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAotCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLS8qIFJlcG9ydGVkIGJ5IEZlbGl4IE1vZWxsZXIgPGZlbGl4QGRlcmtsZWNrcy5kZT4KLSAqIGluIEdlcm1hbnkgdGhpcyBpcyBzb2xkIGJ5IEhhbWEgd2l0aCB0aGUgcHJvZHVjdG51bWJlciA0Njk1MgotICogYXMgIkR1YWxTbG90IENvbXBhY3RGbGFzaChUTSkgJiBNU3RpY2sgRHJpdmUgVVNCIgotICovCi1VTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTBiLCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFGYWIgU3lzdGVtcyBJbmMuIiwKLQkJIlVTQiBDRitNUyIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotI2VuZGlmCi0KIC8qIERhdGFmYWIgS0VDRi1VU0IgLyBTYWdhdGVrIERDUy1DRiAvIFNpbXBsZXRlY2ggRmxhc2hsaW5rIFVDRi0xMDAKICAqIE9ubHkgcmV2aXNpb24gMS4xMyB0ZXN0ZWQgKHNhbWUgZm9yIGFsbCBvZiB0aGUgYWJvdmUgZGV2aWNlcywKICAqIGJhc2VkIG9uIHRoZSBEYXRhZmFiIERGLVVHLTA3IGNoaXApLiAgTmVlZGVkIGZvciBVU19GTF9GSVhfSU5RVUlSWS4KQEAgLTE0MDksMjkgKzExNjYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfU0FORV9TRU5TRSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDBiZjYsIDB4YTAwMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJBVEkiLAotCQkiVVNCIENhYmxlIDIwNSIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi1VTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiQWNvbWRhdGEiLAotCQkiQ0YiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci1VTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiQWNvbWRhdGEiLAotCQkiU00iLAotCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLSNlbmRpZgotCiBVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MzEwLCAweDAwMDAsIDB4OTk5OSwKIAkJIk1heHRvciIsCiAJCSJVU0IgdG8gU0FUQSIsCkBAIC0xNDQ4LDIzICsxMTgyLDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotLyogU3VibWl0dGVkIGJ5OiBOaWNrIFNpbGxpayA8bi5zaWxsaWtAdGVtcGxlLmVkdT4KLSAqIE5lZWRlZCBmb3IgT25lVG91Y2ggZXh0ZW5zaW9uIHRvIHVzYi1zdG9yYWdlCi0gKgotICovCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNICi0JVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAwMCwgMHgwMDAwLCAweDk5OTksCi0JCQkiTWF4dG9yIiwKLQkJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAotCQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCi0JCQkwKSwKLQlVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDEwLCAweDAwMDAsIDB4OTk5OSwKLQkJCSJNYXh0b3IiLAotCQkJIk9uZVRvdWNoIEV4dGVybmFsIEhhcmRkcml2ZSIsCi0JCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKLQkJCTApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBKb3JpcyBTdHJ1eXZlIDxqb3Jpc0BzdHJ1eXZlLmJlPiAqLwogVU5VU1VBTF9ERVYoIDB4MGQ5NiwgMHg0MTBhLCAweDAwMDEsIDB4ZmZmZiwKIAkJIk1lZGlvbiIsCkBAIC0yMTE3LDE0ICsxODM0LDYgQEAKIAkJIk1pY3JvIE1pbmkgMUdCIiwKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsIFVTX0ZMX05PVF9MT0NLQUJMRSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotVU5VU1VBTF9ERVYoICAweDU1YWEsIDB4YTEwMywgMHgwMDAwLCAweDk5OTksIAotCQkiU2FuZGlzayIsCi0JCSJJbWFnZU1hdGUgU0REUjU1IiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOKSwKLSNlbmRpZgotCiAvKiBSZXBvcnRlZCBieSBBbmRyZXcgU2ltbW9ucyA8YW5kcmV3LnNpbW1vbnNAZ21haWwuY29tPiAqLwogVU5VU1VBTF9ERVYoICAweGVkMDYsIDB4NDUwMCwgMHgwMDAxLCAweDAwMDEsCiAJCSJEYXRhU3RvciIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKY29weSBmcm9tIGRyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCmNvcHkgdG8gZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2ZyZWVjb20uaAppbmRleCBmYmFkYTg5Li4zNzU4Njc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZnJlZWNvbS5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTIgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT01fTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmYzAxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkZyZWVjb20iLAorCQkiVVNCLUlERSIsCisJCVVTX1NDX1FJQywgVVNfUFJfRlJFRUNPTSwgaW5pdF9mcmVlY29tLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00pIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTlkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfaXNkMjAwLmgKQEAgLTAsMCArMSw1NyBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMF9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmIsIDB4MDEwMCwgMHgwMTEwLAorCQkiU29ueSIsCisJCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMDMxLCAweDAxMDAsIDB4MDExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJVU0IvSURFIEJyaWRnZSAoQVRBL0FUQVBJKSIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDMwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDM1MSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4NTcwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCIFN0b3JhZ2UgQWRhcHRlciBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDBiZjYsIDB4YTAwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJBVEkiLAorCQkiVVNCIENhYmxlIDIwNSIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9qdW1wc2hvdC5oCnNpbWlsYXJpdHkgaW5kZXggNjUlCmNvcHkgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApjb3B5IHRvIGRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9qdW1wc2hvdC5oCmluZGV4IGZiYWRhODkuLjJlNTQ5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9qdW1wc2hvdC5oCkBAIC0xLDggKzEsNCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIExleGFyICJKdW1wc2hvdCIgQ29tcGFjdCBGbGFzaCByZWFkZXIKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xOSw3ICsxNSwxMyBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBfQ1lQUkVTU19BVEFDQl9IXwotI2RlZmluZSBfQ1lQUkVTU19BVEFDQl9IXwotZXh0ZXJuIHZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKLSNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCisJCSJMZXhhciIsCisJCSJKdW1wc2hvdCBVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfSlVNUFNIT1QsIE5VTEwsCisJCVVTX0ZMX05FRURfT1ZFUlJJREUpLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfa2FybWEuaApzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaApyZW5hbWUgdG8gZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKaW5kZXggZmJhZGE4OS4uMTJhZTNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9jeXByZXNzX2F0YWNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2thcm1hLmgKQEAgLTEsOCArMSw0IEBACi0vKgotICogU3VwcG9ydCBmb3IgZW11bGF0aW5nIFNBVCAoYXRhIHBhc3MgdGhyb3VnaCkgb24gZGV2aWNlcyBiYXNlZAotICogICAgICAgb24gdGhlIEN5cHJlc3MgVVNCL0FUQSBicmlkZ2Ugc3VwcG9ydGluZyBBVEFDQi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWF0dGhpZXUgQ2FzdGV0IChjYXN0ZXQubWF0dGhpZXVAZnJlZS5mcikKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgUmlvIEthcm1hCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTksNyArMTUsMTIgQEAKICAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpZm5kZWYgX0NZUFJFU1NfQVRBQ0JfSF8KLSNkZWZpbmUgX0NZUFJFU1NfQVRBQ0JfSF8KLWV4dGVybiB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQV9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNDVhLCAweDUyMTAsIDB4MDEwMSwgMHgwMTAxLAorCQkiUmlvIiwKKwkJIlJpbyBLYXJtYSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9vbmV0b3VjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTMwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApAQCAtMCwwICsxLDM2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIE1heHRvciBPbmVUb3VjaCBVU0IgaGFyZCBkcml2ZSdzIGJ1dHRvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSF9NT0RVTEUpCisKKy8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+CisgKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQorICovCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDAwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiTWF4dG9yIiwKKwkJIk9uZVRvdWNoIEV4dGVybmFsIEhhcmRkcml2ZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAorCQkwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNhYjUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3NkZHIwOS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOV9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSMDkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCisJCTApLAorCisvKiBUaGlzIGVudHJ5IGlzIGZyb20gQW5kcmllcy5Ccm91d2VyQGN3aS5ubCAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCisJCSJTQ00gTWljcm9zeXN0ZW1zIiwKKwkJImVVU0IgU21hcnRNZWRpYSAvIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MDY2YiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk9seW1wdXMiLAorCQkiQ2FtZWRpYSBNQVVTQi0yIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSLTA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCisJCSJNaWNyb3RlY2giLAorCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTgxZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3NkZHI1NS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NV9NT0RVTEUpCisKKy8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKKwkJIkRhdGFmYWIiLAorCQkiTURTTS1CIHJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBTTSBwYXJ0IC0gYWViIDxBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sPiAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAorCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiQWNvbWRhdGEiLAorCQkiU00iLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggIDB4NTVhYSwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFI1NSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdXNiYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGU4NjlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKQEAgLTAsMCArMSw0MyBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIFNDTSBNaWNyb3N5c3RlbXMgKGEuay5hLiBTaHV0dGxlKSBVU0ItQVRBUEkgY2FibGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVRfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMjA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgODIwMGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAzMDcsIDB4MDAwMSwgMHgwMDAxLAorCQkiSFAiLAorCQkiQ0QtV3JpdGVyKyBDRC00ZSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MTAxMCwgMHgwMDAwLCAweDk5OTksCisJCSJTaHV0dGxlL1NDTSIsCisJCSJVU0JBVC0wMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSLTA1YiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDRiZWNmNDkuLjgwNjBiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKICAqICAgKGMpIDIwMDAgRGF2aWQgTC4gQnJvd24sIEpyLiAodXNiLXN0b3JhZ2VAZGF2aWRiLm9yZykKLSAqICAgKGMpIDIwMDMgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKKyAqICAgKGMpIDIwMDMtMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQogICoKICAqIEluaXRpYWwgd29yayBieToKICAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCkBAIC02NiwzOSArNjYsNiBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiaW5pdGlhbGl6ZXJzLmgiCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLSNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci0jaW5jbHVkZSAic2RkcjA5LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0jaW5jbHVkZSAic2RkcjU1LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQotI2luY2x1ZGUgImZyZWVjb20uaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLSNpbmNsdWRlICJpc2QyMDAuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0jaW5jbHVkZSAiZGF0YWZhYi5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0jaW5jbHVkZSAianVtcHNob3QuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotI2luY2x1ZGUgIm9uZXRvdWNoLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi0jaW5jbHVkZSAiYWxhdWRhLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKLSNpbmNsdWRlICJrYXJtYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IKLSNpbmNsdWRlICJjeXByZXNzX2F0YWNiLmgiCi0jZW5kaWYKICNpbmNsdWRlICJzaWVycmFfbXMuaCIKICNpbmNsdWRlICJvcHRpb25fbXMuaCIKIApAQCAtMTE4LDM2ICs4NSw4IEBACiAKIC8qCiAgKiBUaGUgZW50cmllcyBpbiB0aGlzIHRhYmxlIGNvcnJlc3BvbmQsIGxpbmUgZm9yIGxpbmUsCi0gKiB3aXRoIHRoZSBlbnRyaWVzIG9mIHVzX3VudXN1YWxfZGV2X2xpc3RbXS4KKyAqIHdpdGggdGhlIGVudHJpZXMgaW4gdXNiX3N0b3JhZ2VfdXNiX2lkc1tdLCBkZWZpbmVkIGluIHVzdWFsLXRhYmxlcy5jLgogICovCi0jaWZuZGVmIENPTkZJR19VU0JfTElCVVNVQUwKLQotI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCi0JCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSx1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCi0JCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCi17IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLGJjZERldmljZU1heCksIFwKLSAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KLQotI2RlZmluZSBDT01QTElBTlRfREVWCVVOVVNVQUxfREVWCi0KLSNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoteyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAotICAuZHJpdmVyX2luZm8gPSAoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKLQotIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKLSN1bmRlZiBVTlVTVUFMX0RFVgotI3VuZGVmIENPTVBMSUFOVF9ERVYKLSN1bmRlZiBVU1VBTF9ERVYKLQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotCXsgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBzdG9yYWdlX3VzYl9pZHMpOwotI2VuZGlmIC8qIENPTkZJR19VU0JfTElCVVNVQUwgKi8KLQotLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBkZXZpY2VzIHdlIHJlY29nbml6ZSwgYWxvbmcgd2l0aCB0aGVpciBmbGFnIGRhdGEgKi8KIAogLyogVGhlIHZlbmRvciBuYW1lIHNob3VsZCBiZSBrZXB0IGF0IGVpZ2h0IGNoYXJhY3RlcnMgb3IgbGVzcywgYW5kCiAgKiB0aGUgcHJvZHVjdCBuYW1lIHNob3VsZCBiZSBrZXB0IGF0IDE2IGNoYXJhY3RlcnMgb3IgbGVzcy4gSWYgYSBkZXZpY2UKQEAgLTE3OSwxOCArMTE4LDE3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgdXNfdW51c3VhbF9kZXZfbGlzdFtdID0gewogIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIgCi0jCXVuZGVmIFVOVVNVQUxfREVWCi0jCXVuZGVmIENPTVBMSUFOVF9ERVYKLSMJdW5kZWYgVVNVQUxfREVWCi0KLQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotCXsgTlVMTCB9CisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAorI3VuZGVmIFVOVVNVQUxfREVWCisjdW5kZWYgQ09NUExJQU5UX0RFVgorI3VuZGVmIFVTVUFMX0RFVgorCiAKICNpZmRlZiBDT05GSUdfUE0JLyogTWluaW1hbCBzdXBwb3J0IGZvciBzdXNwZW5kIGFuZCByZXN1bWUgKi8KIAotc3RhdGljIGludCBzdG9yYWdlX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK2ludCB1c2Jfc3Rvcl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIwNyw4ICsxNDUsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zdXNwZW5kKTsKIAotc3RhdGljIGludCBzdG9yYWdlX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCitpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjIxLDggKzE2MCw5IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Jlc3VtZSk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIzNSw2ICsxNzUsNyBAQAogCSAqIHRoZSBkZXZpY2UgKi8KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSk7CiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtMjQzLDcgKzE4NCw3IEBACiAgKiBhIFVTQiBwb3J0IHJlc2V0LCB3aGV0aGVyIGZyb20gdGhpcyBkcml2ZXIgb3IgYSBkaWZmZXJlbnQgb25lLgogICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTI1Myw4ICsxOTQsOSBAQAogCW11dGV4X2xvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfcHJlX3Jlc2V0KTsKIAotc3RhdGljIGludCBzdG9yYWdlX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNjksNiArMjExLDcgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfcG9zdF9yZXNldCk7CiAKIC8qCiAgKiBmaWxsX2lucXVpcnlfcmVzcG9uc2UgdGFrZXMgYW4gdW5zaWduZWQgY2hhciBhcnJheSAod2hpY2ggbXVzdApAQCAtMzExLDYgKzI1NCw3IEBACiAKIAl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoZGF0YSwgZGF0YV9sZW4sIHVzLT5zcmIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKTsKIAogc3RhdGljIGludCB1c2Jfc3Rvcl9jb250cm9sX3RocmVhZCh2b2lkICogX191cykKIHsKQEAgLTU1MSwyMCArNDk1LDEzIEBACiAJCQl2aWQsIHBpZCwgZik7CiB9CiAKLS8qIEZpbmQgYW4gdW51c3VhbF9kZXYgZGVzY3JpcHRvciAoYWx3YXlzIHN1Y2NlZWRzIGluIHRoZSBjdXJyZW50IGNvZGUpICovCi1zdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2ICpmaW5kX3VudXN1YWwoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCWNvbnN0IGludCBpZF9pbmRleCA9IGlkIC0gc3RvcmFnZV91c2JfaWRzOwotCXJldHVybiAmdXNfdW51c3VhbF9kZXZfbGlzdFtpZF9pbmRleF07Ci19Ci0KIC8qIEdldCB0aGUgdW51c3VhbF9kZXZzIGVudHJpZXMgYW5kIHRoZSBzdHJpbmcgZGVzY3JpcHRvcnMgKi8KLXN0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBnZXRfZGV2aWNlX2luZm8oc3RydWN0IHVzX2RhdGEgKnVzLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHVzLT5wdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVzYyA9CiAJCSZ1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKLQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2ID0gZmluZF91bnVzdWFsKGlkKTsKIAogCS8qIFN0b3JlIHRoZSBlbnRyaWVzICovCiAJdXMtPnVudXN1YWxfZGV2ID0gdW51c3VhbF9kZXY7CkBAIC02MjksNyArNTY2LDcgQEAKIH0KIAogLyogR2V0IHRoZSB0cmFuc3BvcnQgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzd2l0Y2ggKHVzLT5wcm90b2NvbCkgewogCWNhc2UgVVNfUFJfQ0I6CkBAIC02NTEsMTAwICs1ODgsMTEgQEAKIAkJdXMtPnRyYW5zcG9ydCA9IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0OwogCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKIAkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLQljYXNlIFVTX1BSX1VTQkFUOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU2h1dHRsZSBVU0JBVCI7Ci0JCXVzLT50cmFuc3BvcnQgPSB1c2JhdF90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotCWNhc2UgVVNfUFJfRVVTQl9TRERSMDk6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJFVVNCL1NERFIwOSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBzZGRyMDlfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLQljYXNlIFVTX1BSX1NERFI1NToKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNERFI1NSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBzZGRyNTVfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQotCWNhc2UgVVNfUFJfRFBDTV9VU0I6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sL0J1bGstRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gZHBjbV90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLQljYXNlIFVTX1BSX0ZSRUVDT006Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJGcmVlY29tIjsKLQkJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfZnJlZWNvbV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLQljYXNlIFVTX1BSX0RBVEFGQUI6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiRGF0YWZhYiBCdWxrLU9ubHkiOwotCQl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKLQljYXNlIFVTX1BSX0pVTVBTSE9UOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkxleGFyIEp1bXBzaG90IENvbnRyb2wvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi0JY2FzZSBVU19QUl9BTEFVREE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiQWxhdWRhIENvbnRyb2wvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0JY2FzZSBVU19QUl9LQVJNQToKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlJpbyBLYXJtYS9CdWxrIjsKLQkJdXMtPnRyYW5zcG9ydCA9IHJpb19rYXJtYV90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OwotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU87CiAJfQotCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKLQotCS8qIGZpeCBmb3Igc2luZ2xlLWx1biBkZXZpY2VzICovCi0JaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TSU5HTEVfTFVOKQotCQl1cy0+bWF4X2x1biA9IDA7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEdldCB0aGUgcHJvdG9jb2wgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgZ2V0X3Byb3RvY29sKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+c3ViY2xhc3MpIHsKIAljYXNlIFVTX1NDX1JCQzoKQEAgLTc3OSwyNiArNjI3LDcgQEAKIAkJdXMtPnByb3RvY29sX25hbWUgPSAiVW5pZm9ybSBGbG9wcHkgSW50ZXJmYWNlIChVRkkpIjsKIAkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl91ZmlfY29tbWFuZDsKIAkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0JY2FzZSBVU19TQ19JU0QyMDA6Ci0JCXVzLT5wcm90b2NvbF9uYW1lID0gIklTRDIwMCBBVEEvQVRBUEkiOwotCQl1cy0+cHJvdG9faGFuZGxlciA9IGlzZDIwMF9hdGFfY29tbWFuZDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0JY2FzZSBVU19TQ19DWVBfQVRBQ0I6Ci0JCXVzLT5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kgd2l0aCBDeXByZXNzIEFUQUNCIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoOwotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU87CiAJfQotCVVTX0RFQlVHUCgiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEdldCB0aGUgcGlwZSBzZXR0aW5ncyAqLwpAQCAtODQ2LDEyICs2NzUsMTIgQEAKIAl1cy0+c2VuZF9jdHJsX3BpcGUgPSB1c2Jfc25kY3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKIAl1cy0+cmVjdl9jdHJsX3BpcGUgPSB1c2JfcmN2Y3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKIAl1cy0+c2VuZF9idWxrX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXMtPnB1c2JfZGV2LAotCQllcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX291dCkpOwogCXVzLT5yZWN2X2J1bGtfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1cy0+cHVzYl9kZXYsIAotCQllcF9pbi0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVzYl9lbmRwb2ludF9udW0oZXBfaW4pKTsKIAlpZiAoZXBfaW50KSB7CiAJCXVzLT5yZWN2X2ludHJfcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVzLT5wdXNiX2RldiwKLQkJCWVwX2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2ludCkpOwogCQl1cy0+ZXBfYkludGVydmFsID0gZXBfaW50LT5iSW50ZXJ2YWw7CiAJfQogCXJldHVybiAwOwpAQCAtMTAxMiwxNyArODQxLDE1IEBACiB9CiAKIAotLyogUHJvYmUgdG8gc2VlIGlmIHdlIGNhbiBkcml2ZSBhIG5ld2x5LWNvbm5lY3RlZCBVU0IgZGV2aWNlICovCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorLyogRmlyc3QgcGFydCBvZiBnZW5lcmFsIFVTQiBtYXNzLXN0b3JhZ2UgcHJvYmluZyAqLworaW50IHVzYl9zdG9yX3Byb2JlMShzdHJ1Y3QgdXNfZGF0YSAqKnB1cywKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKKwkJc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCB1c19kYXRhICp1czsKIAlpbnQgcmVzdWx0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7Ci0KLQlpZiAodXNiX3VzdWFsX2NoZWNrX3R5cGUoaWQsIFVTQl9VU19UWVBFX1NUT1IpKQotCQlyZXR1cm4gLUVOWElPOwogCiAJVVNfREVCVUdQKCJVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkZXRlY3RlZFxuIik7CiAKQEAgLTEwNDEsNyArODY4LDcgQEAKIAkgKiBBbGxvdyAxNi1ieXRlIENEQnMgYW5kIHRodXMgPiAyVEIKIAkgKi8KIAlob3N0LT5tYXhfY21kX2xlbiA9IDE2OwotCXVzID0gaG9zdF90b191cyhob3N0KTsKKwkqcHVzID0gdXMgPSBob3N0X3RvX3VzKGhvc3QpOwogCW1lbXNldCh1cywgMCwgc2l6ZW9mKHN0cnVjdCB1c19kYXRhKSk7CiAJbXV0ZXhfaW5pdCgmKHVzLT5kZXZfbXV0ZXgpKTsKIAlpbml0X2NvbXBsZXRpb24oJnVzLT5jbW5kX3JlYWR5KTsKQEAgLTEwNTQsMjQgKzg4MSw0NiBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyoKLQkgKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgZGVzY3JpcHRvcnMKLQkgKgotCSAqIGlkX2luZGV4IGlzIGNhbGN1bGF0ZWQgaW4gdGhlIGRlY2xhcmF0aW9uIHRvIGJlIHRoZSBpbmRleCBudW1iZXIKLQkgKiBvZiB0aGUgbWF0Y2ggZnJvbSB0aGUgdXNiX2RldmljZV9pZCB0YWJsZSwgc28gd2UgY2FuIGZpbmQgdGhlCi0JICogY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgcHJpdmF0ZSB0YWJsZS4KLQkgKi8KLQlyZXN1bHQgPSBnZXRfZGV2aWNlX2luZm8odXMsIGlkKTsKKwkvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgZGVzY3JpcHRvcnMgKi8KKwlyZXN1bHQgPSBnZXRfZGV2aWNlX2luZm8odXMsIGlkLCB1bnVzdWFsX2Rldik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7CiAKLQkvKiBHZXQgdGhlIHRyYW5zcG9ydCwgcHJvdG9jb2wsIGFuZCBwaXBlIHNldHRpbmdzICovCi0JcmVzdWx0ID0gZ2V0X3RyYW5zcG9ydCh1cyk7Ci0JaWYgKHJlc3VsdCkKKwkvKiBHZXQgc3RhbmRhcmQgdHJhbnNwb3J0IGFuZCBwcm90b2NvbCBzZXR0aW5ncyAqLworCWdldF90cmFuc3BvcnQodXMpOworCWdldF9wcm90b2NvbCh1cyk7CisKKwkvKiBHaXZlIHRoZSBjYWxsZXIgYSBjaGFuY2UgdG8gZmlsbCBpbiBzcGVjaWFsaXplZCB0cmFuc3BvcnQKKwkgKiBvciBwcm90b2NvbCBzZXR0aW5ncy4KKwkgKi8KKwlyZXR1cm4gMDsKKworQmFkRGV2aWNlOgorCVVTX0RFQlVHUCgic3RvcmFnZV9wcm9iZSgpIGZhaWxlZFxuIik7CisJcmVsZWFzZV9ldmVyeXRoaW5nKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfcHJvYmUxKTsKKworLyogU2Vjb25kIHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7CisJaW50IHJlc3VsdDsKKworCS8qIE1ha2Ugc3VyZSB0aGUgdHJhbnNwb3J0IGFuZCBwcm90b2NvbCBoYXZlIGJvdGggYmVlbiBzZXQgKi8KKwlpZiAoIXVzLT50cmFuc3BvcnQgfHwgIXVzLT5wcm90b19oYW5kbGVyKSB7CisJCXJlc3VsdCA9IC1FTlhJTzsKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gZ2V0X3Byb3RvY29sKHVzKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIEJhZERldmljZTsKKwl9CisJVVNfREVCVUdQKCJUcmFuc3BvcnQ6ICVzXG4iLCB1cy0+dHJhbnNwb3J0X25hbWUpOworCVVTX0RFQlVHUCgiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7CisKKwkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKKwkJdXMtPm1heF9sdW4gPSAwOworCisJLyogRmluZCB0aGUgZW5kcG9pbnRzIGFuZCBjYWxjdWxhdGUgcGlwZSB2YWx1ZXMgKi8KIAlyZXN1bHQgPSBnZXRfcGlwZXModXMpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwpAQCAtMTA4MCw3ICs5MjksNyBAQAogCXJlc3VsdCA9IHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKLQlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZpbnRmLT5kZXYpOworCXJlc3VsdCA9IHNjc2lfYWRkX2hvc3QodXNfdG9faG9zdCh1cyksICZ1cy0+cHVzYl9pbnRmLT5kZXYpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBVU0JfU1RPUkFHRQogCQkJIlVuYWJsZSB0byBhZGQgdGhlIHNjc2kgaG9zdFxuIik7CkBAIC0xMTA4LDkgKzk1NywxMCBAQAogCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMik7CiAKLS8qIEhhbmRsZSBhIGRpc2Nvbm5lY3QgZXZlbnQgZnJvbSB0aGUgVVNCIGNvcmUgKi8KLXN0YXRpYyB2b2lkIHN0b3JhZ2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKKy8qIEhhbmRsZSBhIFVTQiBtYXNzLXN0b3JhZ2UgZGlzY29ubmVjdCAqLwordm9pZCB1c2Jfc3Rvcl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKQEAgLTExMTgsNiArOTY4LDQyIEBACiAJcXVpZXNjZV9hbmRfcmVtb3ZlX2hvc3QodXMpOwogCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9kaXNjb25uZWN0KTsKKworLyogVGhlIG1haW4gcHJvYmUgcm91dGluZSBmb3Igc3RhbmRhcmQgZGV2aWNlcyAqLworc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCS8qCisJICogSWYgbGlidXN1YWwgaXMgY29uZmlndXJlZCwgbGV0IGl0IGRlY2lkZSB3aGV0aGVyIGEgc3RhbmRhcmQKKwkgKiBkZXZpY2Ugc2hvdWxkIGJlIGhhbmRsZWQgYnkgdXNiLXN0b3JhZ2Ugb3IgYnkgdWIuCisJICogSWYgdGhlIGRldmljZSBpc24ndCBzdGFuZGFyZCAoaXMgaGFuZGxlZCBieSBhIHN1YmRyaXZlcgorCSAqIG1vZHVsZSkgdGhlbiBkb24ndCBhY2NlcHQgaXQuCisJICovCisJaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSB8fAorCQkJdXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UoaW50ZikpCisJCXJldHVybiAtRU5YSU87CisKKwkvKgorCSAqIENhbGwgdGhlIGdlbmVyYWwgcHJvYmUgcHJvY2VkdXJlcy4KKwkgKgorCSAqIFRoZSB1bnVzdWFsX2Rldl9saXN0IGFycmF5IGlzIHBhcmFsbGVsIHRvIHRoZSB1c2Jfc3RvcmFnZV91c2JfaWRzCisJICogdGFibGUsIHNvIHdlIHVzZSB0aGUgaW5kZXggb2YgdGhlIGlkIGVudHJ5IHRvIGZpbmQgdGhlCisJICogY29ycmVzcG9uZGluZyB1bnVzdWFsX2RldnMgZW50cnkuCisJICovCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSB1c2Jfc3RvcmFnZV91c2JfaWRzKSArIHVzX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBObyBzcGVjaWFsIHRyYW5zcG9ydCBvciBwcm90b2NvbCBzZXR0aW5ncyBpbiB0aGUgbWFpbiBtb2R1bGUgKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uCkBAIC0xMTI2LDE1ICsxMDEyLDEzIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3N0b3JhZ2VfZHJpdmVyID0gewogCS5uYW1lID0JCSJ1c2Itc3RvcmFnZSIsCiAJLnByb2JlID0Jc3RvcmFnZV9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXN0b3JhZ2VfZGlzY29ubmVjdCwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9CXN0b3JhZ2Vfc3VzcGVuZCwKLQkucmVzdW1lID0Jc3RvcmFnZV9yZXN1bWUsCi0JLnJlc2V0X3Jlc3VtZSA9CXN0b3JhZ2VfcmVzZXRfcmVzdW1lLAotI2VuZGlmCi0JLnByZV9yZXNldCA9CXN0b3JhZ2VfcHJlX3Jlc2V0LAotCS5wb3N0X3Jlc2V0ID0Jc3RvcmFnZV9wb3N0X3Jlc2V0LAotCS5pZF90YWJsZSA9CXN0b3JhZ2VfdXNiX2lkcywKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQl1c2Jfc3RvcmFnZV91c2JfaWRzLAogCS5zb2Z0X3VuYmluZCA9CTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAppbmRleCA2NWU2NzRlLi4yNjA5ZWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKQEAgLTE3Nyw0ICsxNzcsMjUgQEAKICNkZWZpbmUgc2NzaV91bmxvY2soaG9zdCkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jaykKICNkZWZpbmUgc2NzaV9sb2NrKGhvc3QpCQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jaykKIAorLyogR2VuZXJhbCByb3V0aW5lcyBwcm92aWRlZCBieSB0aGUgdXNiLXN0b3JhZ2Ugc3RhbmRhcmQgY29yZSAqLworI2lmZGVmIENPTkZJR19QTQorZXh0ZXJuIGludCB1c2Jfc3Rvcl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CisjZWxzZQorI2RlZmluZSB1c2Jfc3Rvcl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgdXNiX3N0b3JfcmVzdW1lCQlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZQlOVUxMCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworCitleHRlcm4gaW50IHVzYl9zdG9yX3Byb2JlMShzdHJ1Y3QgdXNfZGF0YSAqKnB1cywKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKKwkJc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2Rldik7CitleHRlcm4gaW50IHVzYl9zdG9yX3Byb2JlMihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c3VhbC10YWJsZXMuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4YmRlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2VzCisgKiBVc3VhbCBUYWJsZXMgRmlsZSBmb3IgdXNiLXN0b3JhZ2UgYW5kIGxpYnVzdWFsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgorCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKKyNkZWZpbmUgQ09NUExJQU5UX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpIH0KKworI2RlZmluZSBVU1VBTF9ERVYodXNlUHJvdG8sIHVzZVRyYW5zLCB1c2VUeXBlKSBcCit7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCB1c2VQcm90bywgdXNlVHJhbnMpLCBcCisgIC5kcml2ZXJfaW5mbyA9ICgodXNlVHlwZSk8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX3N0b3JhZ2VfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMgdG8gaWdub3JlCisgKi8KK3N0cnVjdCBpZ25vcmVfZW50cnkgeworCXUxNgl2aWQsIHBpZCwgYmNkbWluLCBiY2RtYXg7Cit9OworCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7CQkJCQlcCisJLnZpZAk9IGlkX3ZlbmRvciwJCVwKKwkucGlkIAk9IGlkX3Byb2R1Y3QsCQlcCisJLmJjZG1pbgk9IGJjZERldmljZU1pbiwJCVwKKwkuYmNkbWF4ID0gYmNkRGV2aWNlTWF4LAkJXAorfQorCitzdGF0aWMgc3RydWN0IGlnbm9yZV9lbnRyeSBpZ25vcmVfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfYWxhdWRhLmgiCisjCWluY2x1ZGUgInVudXN1YWxfY3lwcmVzcy5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9mcmVlY29tLmgiCisjCWluY2x1ZGUgInVudXN1YWxfaXNkMjAwLmgiCisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9rYXJtYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX29uZXRvdWNoLmgiCisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjU1LmgiCisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCisvKiBSZXR1cm4gYW4gZXJyb3IgaWYgYSBkZXZpY2UgaXMgaW4gdGhlIGlnbm9yZV9pZHMgbGlzdCAqLworaW50IHVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXVuc2lnbmVkIHZpZCwgcGlkLCBiY2Q7CisJc3RydWN0IGlnbm9yZV9lbnRyeSAqcDsKKworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXZpZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXBpZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwliY2QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisKKwlmb3IgKHAgPSBpZ25vcmVfaWRzOyBwLT52aWQ7ICsrcCkgeworCQlpZiAocC0+dmlkID09IHZpZCAmJiBwLT5waWQgPT0gcGlkICYmCisJCQkJcC0+YmNkbWluIDw9IGJjZCAmJiBwLT5iY2RtYXggPj0gYmNkKQorCQkJcmV0dXJuIC1FTlhJTzsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdXN1YWxfaWdub3JlX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCmluZGV4IGJlNzYwODQuLjYwYmE2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC00MTAsNyArNDEwLDkgQEAKIAl9CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JaW5mbygiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKKwkJICJVU0IgU2tlbGV0b24gZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JTa2VsLSVkIiwKKwkJIGludGVyZmFjZS0+bWlub3IpOwogCXJldHVybiAwOwogCiBlcnJvcjoKQEAgLTQ0MSw3ICs0NDMsNyBAQAogCS8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgKi8KIAlrcmVmX3B1dCgmZGV2LT5rcmVmLCBza2VsX2RlbGV0ZSk7CiAKLQlpbmZvKCJVU0IgU2tlbGV0b24gIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCBtaW5vcik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOwogfQogCiBzdGF0aWMgdm9pZCBza2VsX2RyYXdfZG93bihzdHJ1Y3QgdXNiX3NrZWwgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwppbmRleCAxMzM1Y2JlLi4yNWVhZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCkBAIC02MzgsOCArNjM4LDcgQEAKIAl1c2JfcHV0X2ludGYoaWZhY2UpOwogCWtmcmVlKGNiYWYtPmJ1ZmZlcik7CiAJLyogcGFyYW5vaWE6IGNsZWFuIHVwIGNyeXB0byBrZXlzICovCi0JbWVtc2V0KGNiYWYsIDAsIHNpemVvZigqY2JhZikpOwotCWtmcmVlKGNiYWYpOworCWt6ZnJlZShjYmFmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNiYWZfaWRfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwppbmRleCA4ZTE4MTQxLi5mMGFhYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCkBAIC04ODksNiArODg5LDggQEAKIAlpZiAodXNiX2Rldi0+d3VzYiA9PSAwIHx8IHVzYl9kZXYtPmRldm51bSA9PSAxKQogCQlyZXR1cm47CQkvKiBza2lwIG5vbiB3dXNiIGFuZCB3dXNiIFJIcyAqLwogCisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCk7CisKIAl3dXNiaGMgPSB3dXNiaGNfZ2V0X2J5X3VzYl9kZXYodXNiX2Rldik7CiAJaWYgKHd1c2JoYyA9PSBOVUxMKQogCQlnb3RvIGVycm9yX25vZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggZjRhYTI4ZS4uODExOGRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0zMTIsNiArMzEyLDcgQEAKIAlyZXN1bHQgPSB3dXNiX3NldF9kZXZfYWRkcih3dXNiaGMsIHd1c2JfZGV2LCAwKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyMDsKKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1c2JfZGV2LCBVU0JfU1RBVEVfREVGQVVMVCk7CiAJdXNiX2VwMF9yZWluaXQodXNiX2Rldik7CiAKIAkvKiBTZXQgbmV3IChhdXRoZW50aWNhdGVkKSBhZGRyZXNzLiAqLwpAQCAtMzI3LDYgKzMyOCw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgbmV3X2FkZHJlc3MpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX2FkZHI7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0FERFJFU1MpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCXVzYl9kZXYtPmF1dGhlbnRpY2F0ZWQgPSAxOwogZXJyb3JfYWRkcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCA2MmJkNDQ0Li4zNzhmMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC00NTcsNyArNDU3LDcgQEAKIAogLyogQVUxMTAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBfX2luaXQgYXUxMTAwZmJfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVnc19yZXM7CkBAIC00NzUsNyArNDc1LDcgQEAKIAogCWZiZGV2LT5wYW5lbCA9ICZrbm93bl9sY2RfcGFuZWxzW2Rydl9pbmZvLnBhbmVsX2lkeF07CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCAodm9pZCopZmJkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgKHZvaWQgKilmYmRldik7CiAKIAkvKiBBbGxvY2F0ZSByZWdpb24gZm9yIG91ciByZWdpc3RlcnMgYW5kIG1hcCB0aGVtICovCiAJaWYgKCEocmVnc19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKGRldiksCkBAIC01ODMsMTkgKzU4MywxOSBAQAogCQlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5pbmZvLmNtYXApOwogCX0KIAlrZnJlZShmYmRldik7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxMTAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBOVUxMOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZmJkZXYgPSAoc3RydWN0IGF1MTEwMGZiX2RldmljZSopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogI2lmICFkZWZpbmVkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19MT0dPKQogCWF1MTEwMGZiX2ZiX2JsYW5rKFZFU0FfUE9XRVJET1dOLCAmZmJkZXYtPmluZm8pOwpAQCAtNjIwLDkgKzYyMCw5IEBACiBzdGF0aWMgdTMyIHN5c19jbGtzcmM7CiBzdGF0aWMgc3RydWN0IGF1MTEwMGZiX3JlZ3MgZmJyZWdzOwogCi1pbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIWZiZGV2KQogCQlyZXR1cm4gMDsKQEAgLTY0MSw5ICs2NDEsOSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgYXUxMTAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIWZiZGV2KQogCQlyZXR1cm4gMDsKQEAgLTY2MywxMCArNjYzLDExIEBACiAjZGVmaW5lIGF1MTEwMGZiX2Rydl9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTEwMC1sY2QiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImF1MTEwMC1sY2QiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBhdTExMDBmYl9kcnZfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUJCT0gYXUxMTAwZmJfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZAk9IGF1MTEwMGZiX2Rydl9zdXNwZW5kLApAQCAtNzUzLDEyICs3NTQsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiB9CiAKIHZvaWQgX19leGl0IGF1MTEwMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKIAogCWtmcmVlKGRydl9pbmZvLm9wdF9tb2RlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwppbmRleCAwM2U1N2VmLi4wZDk2ZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogCiAvKiBBVTEyMDAgTENEIGNvbnRyb2xsZXIgZGV2aWNlIGRyaXZlciAqLwogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTIwMGZiX2RldmljZSAqZmJkZXY7CiAJdW5zaWduZWQgbG9uZyBwYWdlOwpAQCAtMTY0NSw3ICsxNjQ1LDcgQEAKIAkJLyogQWxsb2NhdGUgdGhlIGZyYW1lYnVmZmVyIHRvIHRoZSBtYXhpbXVtIHNjcmVlbiBzaXplICovCiAJCWZiZGV2LT5mYl9sZW4gPSAod2luLT53W3BsYW5lXS54cmVzICogd2luLT53W3BsYW5lXS55cmVzICogYnBwKSAvIDg7CiAKLQkJZmJkZXYtPmZiX21lbSA9IGRtYV9hbGxvY19ub25jb2hlcmVudChkZXYsCisJCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAogCQkJCVBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCiAJCQkJJmZiZGV2LT5mYl9waHlzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFmYmRldi0+ZmJfbWVtKSB7CkBAIC0xNzE1LDcgKzE3MTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCWludCBwbGFuZTsKQEAgLTE3MzMsNyArMTczMyw4IEBACiAJCS8qIENsZWFuIHVwIGFsbCBwcm9iZSBkYXRhICovCiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiZGV2LT5mYl9pbmZvKTsKIAkJaWYgKGZiZGV2LT5mYl9tZW0pCi0JCQlkbWFfZnJlZV9ub25jb2hlcmVudChkZXYsIFBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCisJCQlkbWFfZnJlZV9ub25jb2hlcmVudCgmZGV2LT5kZXYsCisJCQkJCVBBR0VfQUxJR04oZmJkZXYtPmZiX2xlbiksCiAJCQkJCWZiZGV2LT5mYl9tZW0sIGZiZGV2LT5mYl9waHlzKTsKIAkJaWYgKGZiZGV2LT5mYl9pbmZvLmNtYXAubGVuICE9IDApCiAJCQlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5mYl9pbmZvLmNtYXApOwpAQCAtMTc0NywyMiArMTc0OCwyNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCitzdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlKQogewogCS8qIFRPRE8gKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTEyMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MTIwMC1sY2QiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMjAwZmJfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxMjAwZmJfZHJ2X3JlbW92ZSwKICNpZmRlZiBDT05GSUdfUE0KQEAgLTE5MDYsMTIgKzE5MDksMTIgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUG93ZXIgbWFuYWdlbWVudCBkZXZpY2UgZW50cnkgZm9yIHRoZSBhdTEyMDBmYiBsb2FkZWQuXG4iKTsKIAkjZW5kaWYKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1MTIwMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXUxMjAwZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtYWctYmEtZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jCmluZGV4IDNhM2Y4MGYuLjA1NzNlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHBtYWdiYWZiX3BhciksIGRldik7CiAJaWYgKCFpbmZvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIGNvbG9yIG1hcFxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvYzsKIAl9CkBAIC0xNzMsOCArMTczLDkgQEAKIAkvKiBSZXF1ZXN0IHRoZSBJL08gTUVNIHJlc291cmNlLiAgKi8KIAlzdGFydCA9IHRkZXYtPnJlc291cmNlLnN0YXJ0OwogCWxlbiA9IHRkZXYtPnJlc291cmNlLmVuZCAtIHN0YXJ0ICsgMTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXYtPmJ1c19pZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLCBkZXYtPmJ1c19pZCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLAorCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnJfY21hcDsKIAl9CkBAIC0xODMsNyArMTg0LDcgQEAKIAlpbmZvLT5maXgubW1pb19zdGFydCA9IHN0YXJ0OwogCXBhci0+bW1pbyA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAlpZiAoIXBhci0+bW1pbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAJfQpAQCAtMTk0LDcgKzE5NSw3IEBACiAJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsCiAJCQkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfbW1pb19tYXA7CiAJfQpAQCAtMjA1LDE0ICsyMDYsMTQgQEAKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZ290byBlcnJfc21lbV9tYXA7CiAJfQogCiAJZ2V0X2RldmljZShkZXYpOwogCiAJcHJfaW5mbygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSBhdCAlc1xuIiwKLQkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXYtPmJ1c19pZCk7CisJCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2X25hbWUoZGV2KSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYwppbmRleCA5YjgwNTk3Li45ODc0ODcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWFnYmJmYl9wYXIpLCBkZXYpOwogCWlmICghaW5mbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldl9uYW1lKGRldikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBjb2xvciBtYXBcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2M7CiAJfQpAQCAtMjgwLDggKzI4MCw5IEBACiAJLyogUmVxdWVzdCB0aGUgSS9PIE1FTSByZXNvdXJjZS4gICovCiAJc3RhcnQgPSB0ZGV2LT5yZXNvdXJjZS5zdGFydDsKIAlsZW4gPSB0ZGV2LT5yZXNvdXJjZS5lbmQgLSBzdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2LT5idXNfaWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwgZGV2LT5idXNfaWQpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldl9uYW1lKGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZXNlcnZlIEZCIHJlZ2lvblxuIiwKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2NtYXA7CiAJfQpAQCAtMjkwLDcgKzI5MSw3IEBACiAJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBzdGFydDsKIAlwYXItPm1taW8gPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFwYXItPm1taW8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3Jlc291cmNlOwogCX0KQEAgLTMwMSw3ICszMDIsNyBAQAogCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gc3RhcnQgKyBQTUFHQl9CX0ZCTUVNOwogCXBhci0+c21lbSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKIAlpZiAoIXBhci0+c21lbSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9tbWlvX21hcDsKIAl9CkBAIC0zMTYsNyArMzE3LDcgQEAKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIsCi0JCSAgICAgICBkZXYtPmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZ290byBlcnJfc21lbV9tYXA7CiAJfQogCkBAIC0zMjgsNyArMzI5LDcgQEAKIAkJIHBhci0+b3NjMSAvIDEwMDAsIHBhci0+b3NjMSAlIDEwMDApOwogCiAJcHJfaW5mbygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSBhdCAlc1xuIiwKLQkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXYtPmJ1c19pZCk7CisJCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGV2X25hbWUoZGV2KSk7CiAJcHJfaW5mbygiZmIlZDogT3NjMDogJXMsIE9zYzE6ICVzLCBPc2MldSBzZWxlY3RlZFxuIiwKIAkJaW5mby0+bm9kZSwgZnJlcTAsIHBhci0+b3NjMSA/IGZyZXExIDogImRpc2FibGVkIiwKIAkJcGFyLT5vc2MxICE9IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wczNmYi5jIGIvZHJpdmVycy92aWRlby9wczNmYi5jCmluZGV4IDg3ZjgyNmUuLmUwMGMxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAJZGV2LT5jb3JlLmRyaXZlcl9kYXRhID0gaW5mbzsKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgIiVzICVzLCB1c2luZyAldSBLaUIgb2YgdmlkZW8gbWVtb3J5XG4iLAotCQkgZGV2X2RyaXZlcl9zdHJpbmcoaW5mby0+ZGV2KSwgaW5mby0+ZGV2LT5idXNfaWQsCisJCSBkZXZfZHJpdmVyX3N0cmluZyhpbmZvLT5kZXYpLCBkZXZfbmFtZShpbmZvLT5kZXYpLAogCQkgaW5mby0+Zml4LnNtZW1fbGVuID4+IDEwKTsKIAogCXRhc2sgPSBrdGhyZWFkX3J1bihwczNmYmQsIGluZm8sIERFVklDRV9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCmluZGV4IDBhMGZkNDguLjUzZjhmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwpAQCAtNjEsNyArNjEsNyBAQAogI2luY2x1ZGUgPG1hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oPgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMTg4LDcgKzE4OCw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwdnIyZmJfbWFwOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgdW5zaWduZWQgaW50IHNoZG1hID0gUFZSMl9DQVNDQURFX0NIQU47CiBzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJkbWEgPSBPTkNISVBfTlJfRE1BX0NIQU5ORUxTOwogI2VuZGlmCkBAIC0yMDcsNyArMjA3LDcgQEAKIHN0YXRpYyBpbnQgcHZyMl9pbml0X2NhYmxlKHZvaWQpOwogc3RhdGljIGludCBwdnIyX2dldF9wYXJhbShjb25zdCBzdHJ1Y3QgcHZyMl9wYXJhbXMgKnAsIGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCwgaW50IHNpemUpOwotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKICNlbmRpZgpAQCAtMjE4LDcgKzIxOCw3IEBACiAJLmZiX2JsYW5rCT0gcHZyMmZiX2JsYW5rLAogCS5mYl9jaGVja192YXIJPSBwdnIyZmJfY2hlY2tfdmFyLAogCS5mYl9zZXRfcGFyCT0gcHZyMmZiX3NldF9wYXIsCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogCS5mYl93cml0ZQk9IHB2cjJmYl93cml0ZSwKICNlbmRpZgogCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKQEAgLTY3MSw3ICs2NzEsNyBAQAogCXJldHVybiBjYWJsZV90eXBlOwogfQogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHNzaXplX3QgcHZyMmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC03NDMsNyArNzQzLDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NIX0RNQSAqLworI2VuZGlmIC8qIENPTkZJR19QVlIyX0RNQSAqLwogCiAvKioKICAqIHB2cjJmYl9jb21tb25faW5pdApAQCAtODkzLDcgKzg5Myw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogCWlmIChyZXF1ZXN0X2RtYShwdnIyZG1hLCAicHZyMiIpICE9IDApIHsKIAkJZnJlZV9pcnEoSFdfRVZFTlRfVlNZTkMsIDApOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtOTE1LDcgKzkxNSw3IEBACiAJfQogCiAJZnJlZV9pcnEoSFdfRVZFTlRfVlNZTkMsIDApOwotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIAlmcmVlX2RtYShwdnIyZG1hKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCAyYzVkMDY5Li45MmVhMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtMzMsNiArMzMsOCBAQAogCXN0cnVjdCBmYl9pbmZvIGluZm87CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyBkZWZpbzsKKwl1bnNpZ25lZCBsb25nIGZyYW1lX2VuZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZV9lbmRfd2FpdDsKIH07CiAKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2IHsKQEAgLTIyNiw3ICsyMjgsMTAgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzaF9tb2JpbGVfbGNkY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoOwogCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCBpc19zdWI7CisJaW50IGs7CiAKIAkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KIAl0bXAgPSBsY2RjX3JlYWQocHJpdiwgX0xESU5UUik7CkBAIC0yMzQsOCArMjM5LDI0IEBACiAJdG1wIHw9IDB4MDAwMDAwZmYgXiBMRElOVFJfRlM7IC8qIHN0YXR1cyBpbiBsb3cgOCAqLwogCWxjZGNfd3JpdGUocHJpdiwgX0xESU5UUiwgdG1wKTsKIAotCS8qIGRpc2FibGUgY2xvY2tzICovCi0Jc2hfbW9iaWxlX2xjZGNfY2xrX29mZihwcml2KTsKKwkvKiBmaWd1cmUgb3V0IGlmIHRoaXMgaW50ZXJydXB0IGlzIGZvciBtYWluIG9yIHN1YiBsY2QgKi8KKwlpc19zdWIgPSAobGNkY19yZWFkKHByaXYsIF9MRFNSKSAmICgxIDw8IDEwKSkgPyAxIDogMDsKKworCS8qIHdha2UgdXAgY2hhbm5lbCBhbmQgZGlzYWJsZSBjbG9ja3MqLworCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CisJCWNoID0gJnByaXYtPmNoW2tdOworCisJCWlmICghY2gtPmVuYWJsZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfc3ViID09IGxjZGNfY2hhbl9pc19zdWJsY2QoY2gpKSB7CisJCQljaC0+ZnJhbWVfZW5kID0gMTsKKwkJCXdha2VfdXAoJmNoLT5mcmFtZV9lbmRfd2FpdCk7CisKKwkJCXNoX21vYmlsZV9sY2RjX2Nsa19vZmYocHJpdik7CisJCX0KKwl9CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQ0OCwxOCArNDY5LDI3IEBACiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZwkqYm9hcmRfY2ZnOwogCWludCBrOwogCi0JLyogdGVsbCB0aGUgYm9hcmQgY29kZSB0byBkaXNhYmxlIHRoZSBwYW5lbCAqLworCS8qIGNsZWFuIHVwIGRlZmVycmVkIGlvIGFuZCBhc2sgYm9hcmQgY29kZSB0byBkaXNhYmxlIHBhbmVsICovCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hba107CisKKwkJLyogZGVmZXJyZWQgaW8gbW9kZToKKwkJICogZmx1c2ggZnJhbWUsIGFuZCB3YWl0IGZvciBmcmFtZSBlbmQgaW50ZXJydXB0CisJCSAqIGNsZWFuIHVwIGRlZmVycmVkIGlvIGFuZCBlbmFibGUgY2xvY2sKKwkJICovCisJCWlmIChjaC0+aW5mby5mYmRlZmlvKSB7CisJCQljaC0+ZnJhbWVfZW5kID0gMDsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2gtPmluZm8uZGVmZXJyZWRfd29yaywgMCk7CisJCQl3YWl0X2V2ZW50KGNoLT5mcmFtZV9lbmRfd2FpdCwgY2gtPmZyYW1lX2VuZCk7CisJCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCZjaC0+aW5mbyk7CisJCQljaC0+aW5mby5mYmRlZmlvID0gTlVMTDsKKwkJCXNoX21vYmlsZV9sY2RjX2Nsa19vbihwcml2KTsKKwkJfQorCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKIAkJaWYgKGJvYXJkX2NmZy0+ZGlzcGxheV9vZmYpCiAJCQlib2FyZF9jZmctPmRpc3BsYXlfb2ZmKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSk7CiAKLQkJLyogY2xlYW51cCBkZWZlcnJlZCBpbyBpZiBlbmFibGVkICovCi0JCWlmIChjaC0+aW5mby5mYmRlZmlvKSB7Ci0JCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKCZjaC0+aW5mbyk7Ci0JCQljaC0+aW5mby5mYmRlZmlvID0gTlVMTDsKLQkJfQogCX0KIAogCS8qIHN0b3AgdGhlIGxjZGMgKi8KQEAgLTY1Miw2ICs2ODIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlzaF9tb2JpbGVfbGNkY19zdG9wKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzaF9tb2JpbGVfbGNkY19zdGFydChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9tb2JpbGVfbGNkY19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gc2hfbW9iaWxlX2xjZGNfc3VzcGVuZCwKKwkucmVzdW1lID0gc2hfbW9iaWxlX2xjZGNfcmVzdW1lLAorfTsKKwogc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX21vYmlsZV9sY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC02ODcsNyArNzM3LDcgQEAKIAl9CiAKIAllcnJvciA9IHJlcXVlc3RfaXJxKGksIHNoX21vYmlsZV9sY2RjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICBwZGV2LT5kZXYuYnVzX2lkLCBwcml2KTsKKwkJCSAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcHJpdik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IGlycVxuIik7CiAJCWdvdG8gZXJyMTsKQEAgLTcwNyw2ICs3NTcsNyBAQAogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGVcbiIpOwogCQkJZ290byBlcnIxOwogCQl9CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmNoW2ldLmZyYW1lX2VuZF93YWl0KTsKIAogCQlzd2l0Y2ggKHBkYXRhLT5jaFtpXS5jaGFuKSB7CiAJCWNhc2UgTENEQ19DSEFOX01BSU5MQ0Q6CkBAIC04NjAsNiArOTExLDcgQEAKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gInNoX21vYmlsZV9sY2RjX2ZiIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gJnNoX21vYmlsZV9sY2RjX2Rldl9wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc2hfbW9iaWxlX2xjZGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfbGNkY19yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwppbmRleCA3YmFmMmRkLi5hMWViMDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTc1MSw3ICs3NTEsNyBAQAogCX0KIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgJnRtaW9mYl9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQkJCWRldi0+ZGV2LmJ1c19pZCwgaW5mbyk7CisJCQkJCWRldl9uYW1lKCZkZXYtPmRldiksIGluZm8pOwogCiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfcmVxdWVzdF9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IDZjMmQzN2YuLjc0YWU3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC0yMDQsOCArMjA0LDExIEBACiAJCX0gZWxzZSB7CiAJCQl2ODZkX3N0YXJ0ZWQgPSAxOwogCQkJZXJyID0gY25fbmV0bGlua19zZW5kKG0sIDAsIGdmcF9hbnkoKSk7CisJCQlpZiAoZXJyID09IC1FTk9CVUZTKQorCQkJCWVyciA9IDA7CiAJCX0KLQl9CisJfSBlbHNlIGlmIChlcnIgPT0gLUVOT0JVRlMpCisJCWVyciA9IDA7CiAKIAlpZiAoIWVyciAmJiAhKHRhc2stPnQuZmxhZ3MgJiBURl9FWElUKSkKIAkJZXJyID0gIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCh0YXNrLT5kb25lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDMyNWMxMGYuLjU1ZjY0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTk0MCwyMSArOTQwLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdkdC4KIAotY29uZmlnIFdEVF81MDEKLQlib29sICJXRFQ1MDEgZmVhdHVyZXMiCi0JZGVwZW5kcyBvbiBXRFQKLQloZWxwCi0JICBTYXlpbmcgWSBoZXJlIGFuZCBjcmVhdGluZyBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgL2Rldi90ZW1wZXJhdHVyZQotCSAgd2l0aCBtYWpvciBudW1iZXIgMTAgYW5kIG1pbm9yIG51bWJlciAxMzEgKCJtYW4gbWtub2QiKSB3aWxsIGdpdmUKLQkgIHlvdSBhIHRoZXJtb21ldGVyIGluc2lkZSB5b3VyIGNvbXB1dGVyOiByZWFkaW5nIGZyb20KLQkgIC9kZXYvdGVtcGVyYXR1cmUgeWllbGRzIG9uZSBieXRlLCB0aGUgdGVtcGVyYXR1cmUgaW4gZGVncmVlcwotCSAgRmFocmVuaGVpdC4gVGhpcyB3b3JrcyBvbmx5IGlmIHlvdSBoYXZlIGEgV0RUNTAxUCB3YXRjaGRvZyBib2FyZAotCSAgaW5zdGFsbGVkLgotCi0JICBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIEZhbiBUYWNob21ldGVyIG9uIHRoZSBXRFQ1MDFQLCB0aGVuIHlvdQotCSAgY2FuIGRvIHRoaXMgdmlhIHRoZSB0YWNob21ldGVyIHBhcmFtZXRlci4gT25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEKLQkgIGZhbiB0YWNob21ldGVyIGFjdHVhbGx5IHNldCB1cC4KLQogIwogIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKICMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKaW5kZXggM2U1N2FhNC4uNGQxOGM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJQWNxdWlyZSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIgV2F0Y2hkb2cgVGltZXIgZHJpdmVyCiAgKgotICogICAgICBCYXNlZCBvbiB3ZHQuYy4gT3JpZ2luYWwgY29weXJpZ2h0IG1lc3NhZ2VzOgorICoJQmFzZWQgb24gd2R0LmMuIE9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTYgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCkBAIC0xNyw5ICsxNyw5IEBACiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+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+CiAgKgogICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKaW5kZXggYjY0YWUxYS4uZTgxNDQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYwpAQCAtMTYsMTEgKzE2LDEzIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxwbGF0L29yaW9uNXhfd2R0Lmg+CiAKIC8qCiAgKiBXYXRjaGRvZyB0aW1lciBibG9jayByZWdpc3RlcnMuCkBAIC0yOSwxMyArMzEsMTQgQEAKICNkZWZpbmUgIFdEVF9FTgkJCTB4MDAxMAogI2RlZmluZSBXRFRfVkFMCQkJKFRJTUVSX1ZJUlRfQkFTRSArIDB4MDAyNCkKIAotI2RlZmluZSBPUklPTjVYX1RDTEsJCTE2NjY2NjY2NwotI2RlZmluZSBXRFRfTUFYX0RVUkFUSU9OCSgweGZmZmZmZmZmIC8gT1JJT041WF9UQ0xLKQorI2RlZmluZSBXRFRfTUFYX0NZQ0xFX0NPVU5UCTB4ZmZmZmZmZmYKICNkZWZpbmUgV0RUX0lOX1VTRQkJMAogI2RlZmluZSBXRFRfT0tfVE9fQ0xPU0UJCTEKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwotc3RhdGljIGludCBoZWFydGJlYXQgPSAgV0RUX01BWF9EVVJBVElPTjsJLyogKHNlY29uZHMpICovCitzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IC0xOwkJLyogbW9kdWxlIHBhcmFtZXRlciAoc2Vjb25kcykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2R0X21heF9kdXJhdGlvbjsJLyogKHNlY29uZHMpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHdkdF90Y2xrOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X3N0YXR1czsKIHN0YXRpYyBzcGlubG9ja190IHdkdF9sb2NrOwogCkBAIC00Niw3ICs0OSw3IEBACiAJc3Bpbl9sb2NrKCZ3ZHRfbG9jayk7CiAKIAkvKiBTZXQgd2F0Y2hkb2cgZHVyYXRpb24gKi8KLQl3cml0ZWwoT1JJT041WF9UQ0xLICogaGVhcnRiZWF0LCBXRFRfVkFMKTsKKwl3cml0ZWwod2R0X3RjbGsgKiBoZWFydGJlYXQsIFdEVF9WQUwpOwogCiAJLyogQ2xlYXIgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0ICovCiAJcmVnID0gcmVhZGwoQlJJREdFX0NBVVNFKTsKQEAgLTg4LDcgKzkxLDcgQEAKIHN0YXRpYyBpbnQgb3Jpb241eF93ZHRfZ2V0X3RpbWVsZWZ0KGludCAqdGltZV9sZWZ0KQogewogCXNwaW5fbG9jaygmd2R0X2xvY2spOwotCSp0aW1lX2xlZnQgPSByZWFkbChXRFRfVkFMKSAvIE9SSU9ONVhfVENMSzsKKwkqdGltZV9sZWZ0ID0gcmVhZGwoV0RUX1ZBTCkgLyB3ZHRfdGNsazsKIAlzcGluX3VubG9jaygmd2R0X2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTU4LDcgKzE2MSw3IEBACiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQlpZiAodGltZSA8PSAwIHx8IHRpbWUgPiBXRFRfTUFYX0RVUkFUSU9OKSB7CisJCWlmICh0aW1lIDw9IDAgfHwgdGltZSA+IHdkdF9tYXhfZHVyYXRpb24pIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtMjEwLDIzICsyMTMsNjkgQEAKIAkuZm9wcwkJPSAmb3Jpb241eF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9yaW9uNXhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCWlmIChwZGF0YSkgeworCQl3ZHRfdGNsayA9IHBkYXRhLT50Y2xrOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiT3Jpb241eCBXYXRjaGRvZyBtaXNzZXMgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvcmlvbjV4X3dkdF9taXNjZGV2LnBhcmVudCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlvcmlvbjV4X3dkdF9taXNjZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwl3ZHRfbWF4X2R1cmF0aW9uID0gV0RUX01BWF9DWUNMRV9DT1VOVCAvIHdkdF90Y2xrOworCWlmIChoZWFydGJlYXQgPD0gMCB8fCBoZWFydGJlYXQgPiB3ZHRfbWF4X2R1cmF0aW9uKQorCQloZWFydGJlYXQgPSB3ZHRfbWF4X2R1cmF0aW9uOworCisJcmV0ID0gbWlzY19yZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIk9yaW9uNXggV2F0Y2hkb2cgVGltZXI6IEluaXRpYWwgdGltZW91dCAlZCBzZWMlc1xuIiwKKwkJCQloZWFydGJlYXQsIG5vd2F5b3V0ID8gIiwgbm93YXlvdXQiIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvcmlvbjV4X3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2luaXQoJndkdF9sb2NrKTsKKwlpZiAodGVzdF9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpKSB7CisJCXdkdF9kaXNhYmxlKCk7CisJCWNsZWFyX2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cyk7CisJfQogCi0JcmV0ID0gbWlzY19yZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7Ci0JaWYgKHJldCA9PSAwKQotCQlwcmludGsoIk9yaW9uNXggV2F0Y2hkb2cgVGltZXI6IGhlYXJ0YmVhdCAlZCBzZWNcbiIsCi0JCQkJCQkJCWhlYXJ0YmVhdCk7CisJcmV0ID0gbWlzY19kZXJlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKKwlpZiAoIXJldCkKKwkJb3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3Jpb241eF93ZHRfZHJpdmVyID0geworCS5wcm9iZQkJPSBvcmlvbjV4X3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9yaW9uNXhfd2R0X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJvcmlvbjV4X3dkdCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3sKKwlzcGluX2xvY2tfaW5pdCgmd2R0X2xvY2spOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X2RyaXZlcik7Cit9CisKIHN0YXRpYyB2b2lkIF9fZXhpdCBvcmlvbjV4X3dkdF9leGl0KHZvaWQpCiB7Ci0JbWlzY19kZXJlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb3Jpb241eF93ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQob3Jpb241eF93ZHRfaW5pdCk7CkBAIC0yMzYsOCArMjg1LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiT3Jpb241eCBQcm9jZXNzb3IgV2F0Y2hkb2ciKTsKIAogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMgKGRlZmF1bHQgaXMgIgotCQkJCQlfX01PRFVMRV9TVFJJTkcoV0RUX01BWF9EVVJBVElPTikgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMiKTsKIAogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCmluZGV4IDQ4NGMyMTUuLjFhMmI5MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKQEAgLTUzNiw3ICs1MzYsOCBAQAogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcGM4NzQxM19taXNjZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXQpOwogCQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGM4NzQxM19ub3RpZmllcik7CiAJCXJldHVybiByZXQ7CkBAIC01NzQsNyArNTc1LDggQEAKIG1vZHVsZV9pbml0KHBjODc0MTNfaW5pdCk7CiBtb2R1bGVfZXhpdChwYzg3NDEzX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+LCBNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sIik7CitNT0RVTEVfQVVUSE9SKCJTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+LCAiCisJCSJNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDODc0MTMgV0RUIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jCmluZGV4IDllMTMzMWEuLmFhOTUxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jCkBAIC0yNCwyNSArMjQsMjUgQEAKICAqCQl2ZXJzaW9uIHJlcG9ydGluZy4gIEFkZGVkIHJlYWQgcm91dGluZSBmb3IgdGVtcGVyYXR1cmUuCiAgKgkJUmVtb3ZlZCBzb21lIGV4dHJhIGRlZmluZXMsIGFkZGVkIGFuIGF1dG9kZXRlY3QgUmV2aXNpb24KICAqCQlyb3V0aW5lLgotICogOTYxMDA2ICAgICAgIFJldmlzZWQgc29tZSBkb2N1bWVudGF0aW9uLCBmaXhlZCBzb21lIGNvc21ldGljIGJ1Z3MuICBNYWRlCi0gKiAgICAgICAgICAgICAgZHJpdmVycyB0byBwYW5pYyB0aGUgc3lzdGVtIGlmIGl0J3Mgb3ZlcmhlYXRpbmcgYXQgYm9vdHVwLgorICogOTYxMDA2CVJldmlzZWQgc29tZSBkb2N1bWVudGF0aW9uLCBmaXhlZCBzb21lIGNvc21ldGljIGJ1Z3MuICBNYWRlCisgKgkJZHJpdmVycyB0byBwYW5pYyB0aGUgc3lzdGVtIGlmIGl0J3Mgb3ZlcmhlYXRpbmcgYXQgYm9vdHVwLgogICogOTYxMTE4CUNoYW5nZWQgc29tZSB2ZXJiaWFnZSBvbiBzb21lIG9mIHRoZSBvdXRwdXQsIHRpZGllZCB1cAogICoJCWNvZGUgYml0cywgYW5kIGFkZGVkIGNvbXBhdGliaWxpdHkgdG8gMi4xLnguCi0gKiA5NzA5MTIgICAgICAgRW5hYmxlZCBib2FyZCBvbiBvcGVuIGFuZCBkaXNhYmxlIG9uIGNsb3NlLgorICogOTcwOTEyCUVuYWJsZWQgYm9hcmQgb24gb3BlbiBhbmQgZGlzYWJsZSBvbiBjbG9zZS4KICAqIDk3MTEwNwlUb29rIGFjY291bnQgb2YgcmVjZW50IFZGUyBjaGFuZ2VzIChicm9rZSByZWFkKS4KLSAqIDk3MTIxMCAgICAgICBEaXNhYmxlIGJvYXJkIG9uIGluaXRpYWxpc2F0aW9uIGluIGNhc2UgYm9hcmQgYWxyZWFkeSB0aWNraW5nLgotICogOTcxMjIyICAgICAgIENoYW5nZWQgb3Blbi9jbG9zZSBmb3IgdGVtcGVyYXR1cmUgaGFuZGxpbmcKLSAqICAgICAgICAgICAgICBNaWNoYWVsIE1lc2tlcyA8bWVza2VzQGRlYmlhbi5vcmc+LgotICogOTgwMTEyICAgICAgIFVzZWQgbWlub3IgbnVtYmVycyBmcm9tIGluY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCi0gKiA5OTA0MDMgICAgICAgQ2xlYXIgcmVzZXQgc3RhdHVzIGFmdGVyIHJlYWRpbmcgY29udHJvbCBzdGF0dXMgcmVnaXN0ZXIgaW4KLSAqICAgICAgICAgICAgICBwY3dkX3Nob3dwcmV2c3RhdGUoKS4gW01hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPl0KKyAqIDk3MTIxMAlEaXNhYmxlIGJvYXJkIG9uIGluaXRpYWxpc2F0aW9uIGluIGNhc2UgYm9hcmQgYWxyZWFkeSB0aWNraW5nLgorICogOTcxMjIyCUNoYW5nZWQgb3Blbi9jbG9zZSBmb3IgdGVtcGVyYXR1cmUgaGFuZGxpbmcKKyAqCQlNaWNoYWVsIE1lc2tlcyA8bWVza2VzQGRlYmlhbi5vcmc+LgorICogOTgwMTEyCVVzZWQgbWlub3IgbnVtYmVycyBmcm9tIGluY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCisgKiA5OTA0MDMJQ2xlYXIgcmVzZXQgc3RhdHVzIGFmdGVyIHJlYWRpbmcgY29udHJvbCBzdGF0dXMgcmVnaXN0ZXIgaW4KKyAqCQlwY3dkX3Nob3dwcmV2c3RhdGUoKS4gW01hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPl0KICAqIDk5MDYwNQlNYWRlIGNoYW5nZXMgdG8gY29kZSB0byBzdXBwb3J0IEZpcm13YXJlIDEuMjJhLCBhZGRlZAogICoJCWZhaXJseSB1c2VsZXNzIHByb2MgZW50cnkuCiAgKiA5OTA2MTAJcmVtb3ZlZCBzYWlkIHVzZWxlc3MgcHJvYyBjb2RlIGZvciB0aGUgbWVyZ2UgPGFsYW4+CiAgKiAwMDA0MDMJUmVtb3ZlZCBsYXN0IHRyYWNlcyBvZiBwcm9jIGNvZGUuIDxkYXZlaj4KICAqIDAxMTIxNAlBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlCiAgKgkJQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KLSAqICAgICAgICAgICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAorICoJCUFkZGVkIHRpbWVvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0CiAgKi8KIAogLyoKQEAgLTc2LDggKzc2LDcgQEAKICNkZWZpbmUgV0FUQ0hET0dfRFJJVkVSX05BTUUgIklTQS1QQyBXYXRjaGRvZyIKICNkZWZpbmUgV0FUQ0hET0dfTkFNRSAicGN3ZCIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIilcbiIKLSNkZWZpbmUgV0RfVkVSIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiXG4iCiAKIC8qCiAgKiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBQQ1dEX1JFVklTSU9OX0Igd2FzIHJlbW92ZWQgYmVjYXVzZSBBIGFuZCBCCkBAIC0yMDAsNyArMTk5LDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAKIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgyIDw9IGhlYXJ0YmVhdCA8PSA3MjAwIG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigyIDw9IGhlYXJ0YmVhdCA8PSA3MjAwIG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwpAQCAtMjM5LDcgKzI0MCw4IEBACiAJfQogCiAJaWYgKGRlYnVnID49IERFQlVHKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciBjbWQ9MHglMDJ4OiBwb3J0MD0weCUwMnggbGFzdF9wb3J0MD0weCUwMnhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yICIKKwkJCSJjbWQ9MHglMDJ4OiBwb3J0MD0weCUwMnggbGFzdF9wb3J0MD0weCUwMnhcbiIsCiAJCQljbWQsIHBvcnQwLCBsYXN0X3BvcnQwKTsKIAogCXJldHVybiBwb3J0MDsKQEAgLTMzOSwxMCArMzQxLDEyIEBACiAJCQkJCQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIpOwogCWVsc2UgaWYgKHBjd2RfcHJpdmF0ZS5yZXZpc2lvbiA9PSBQQ1dEX1JFVklTSU9OX0MpIHsKIAkJcGN3ZF9nZXRfZmlybXdhcmUoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIklTQS1QQyBXYXRjaGRvZyAoUkVWLkMpIGRldGVjdGVkIGF0IHBvcnQgMHglMDR4IChGaXJtd2FyZSB2ZXJzaW9uOiAlcylcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJJU0EtUEMgV2F0Y2hkb2cgKFJFVi5DKSBkZXRlY3RlZCBhdCBwb3J0ICIKKwkJCSIweCUwNHggKEZpcm13YXJlIHZlcnNpb246ICVzKVxuIiwKIAkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyLCBwY3dkX3ByaXZhdGUuZndfdmVyX3N0cik7CiAJCW9wdGlvbl9zd2l0Y2hlcyA9IHBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCQkiVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKIAkJCW9wdGlvbl9zd2l0Y2hlcywKIAkJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOwpAQCAtMzU4LDcgKzM2Miw4IEBACiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJUZW1wZXJhdHVyZSBPcHRpb24gRGV0ZWN0ZWRcbiIpOwogCiAJaWYgKHBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX0NBUkRSRVNFVCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByZXZpb3VzIHJlYm9vdCB3YXMgY2F1c2VkIGJ5IHRoZSBjYXJkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJQcmV2aW91cyByZWJvb3Qgd2FzIGNhdXNlZCBieSB0aGUgY2FyZFxuIik7CiAKIAlpZiAocGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfT1ZFUkhFQVQpIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgUEZYCkBAIC04NzEsNyArODc2LDcgQEAKIAljYXJkc19mb3VuZCsrOwogCWlmIChjYXJkc19mb3VuZCA9PSAxKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidiVzIEtlbiBIb2xsaXMgKGtlbmppQGJpdGdhdGUuY29tKVxuIiwKLQkJCQkJCQkJV0RfVkVSKTsKKwkJCQkJCQlXQVRDSERPR19WRVJTSU9OKTsKIAogCWlmIChjYXJkc19mb3VuZCA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyAxIGRldmljZVxuIik7CkBAIC0xMDI2LDcgKzEwMzEsOCBAQAogbW9kdWxlX2luaXQocGN3ZF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChwY3dkX2NsZWFudXBfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+LCBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiIpOworTU9EVUxFX0FVVEhPUigiS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+LCAiCisJCSJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCZXJrc2hpcmUgSVNBLVBDIFdhdGNoZG9nIGRyaXZlciIpOwogTU9EVUxFX1ZFUlNJT04oV0FUQ0hET0dfVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKaW5kZXggNWQ3NjQyMi4uNjk4ZjUxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKQEAgLTI0LDcgKzI0LDggQEAKICAqCUEgYmVsbHMgYW5kIHdoaXN0bGVzIGRyaXZlciBpcyBhdmFpbGFibGUgZnJvbToKICAqCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS93aW0vcGN3ZC9wY3dkX3BjaS8KICAqCi0gKglNb3JlIGluZm8gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYmVya3Byb2QuY29tLyBvciBodHRwOi8vd3d3LnBjd2F0Y2hkb2cuY29tLworICoJTW9yZSBpbmZvIGF2YWlsYWJsZSBhdAorICoJaHR0cDovL3d3dy5iZXJrcHJvZC5jb20vIG9yIGh0dHA6Ly93d3cucGN3YXRjaGRvZy5jb20vCiAgKi8KIAogLyoKQEAgLTUxLDExICs1MiwxMCBAQAogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICNkZWZpbmUgV0FUQ0hET0dfVkVSU0lPTiAiMS4wMyIKLSNkZWZpbmUgV0FUQ0hET0dfREFURSAiMjEgSmFuIDIwMDciCiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJQQ0ktUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2RfcGNpIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKVxuIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiXG4iCiAKIC8qIFN0dWZmIGZvciB0aGUgUENJIElEJ3MgICovCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfUVVJQ0tMT0dJQwpAQCAtNzYsNyArNzYsOCBAQAogI2RlZmluZSBXRF9QQ0lfVFRSUAkJMHgwNAkvKiBUZW1wZXJhdHVyZSBUcmlwIHN0YXR1cyAqLwogI2RlZmluZSBXRF9QQ0lfUkwyQQkJMHgwOAkvKiBSZWxheSAyIEFjdGl2ZSAqLwogI2RlZmluZSBXRF9QQ0lfUkwxQQkJMHgxMAkvKiBSZWxheSAxIEFjdGl2ZSAqLwotI2RlZmluZSBXRF9QQ0lfUjJEUwkJMHg0MAkvKiBSZWxheSAyIERpc2FibGUgVGVtcGVyYXR1cmUtdHJpcC9yZXNldCAqLworI2RlZmluZSBXRF9QQ0lfUjJEUwkJMHg0MAkvKiBSZWxheSAyIERpc2FibGUgVGVtcGVyYXR1cmUtdHJpcCAvCisJCQkJCQkJCQlyZXNldCAqLwogI2RlZmluZSBXRF9QQ0lfUkxZMgkJMHg4MAkvKiBBY3RpdmF0ZSBSZWxheSAyIG9uIHRoZSBib2FyZCAqLwogLyogUG9ydCAyIDogQ29udHJvbCBTdGF0dXMgIzIgKi8KICNkZWZpbmUgV0RfUENJX1dESVMJCTB4MTAJLyogV2F0Y2hkb2cgRGlzYWJsZSAqLwpAQCAtMTE0LDEyICsxMTUsMTggQEAKIHN0YXRpYyBpbnQgdGVtcF9wYW5pYzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzX2FjdGl2ZTsKIHN0YXRpYyBjaGFyIGV4cGVjdF9yZWxlYXNlOwotc3RhdGljIHN0cnVjdCB7CQkJCS8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIFBDSS1QQyB3YXRjaGRvZyBjYXJkICovCi0JaW50IHN1cHBvcnRzX3RlbXA7CQkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLwotCWludCBib290X3N0YXR1czsJCS8qIFRoZSBjYXJkJ3MgYm9vdCBzdGF0dXMgKi8KLQl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CQkvKiBUaGUgY2FyZHMgSS9PIGFkZHJlc3MgKi8KLQlzcGlubG9ja190IGlvX2xvY2s7CQkvKiB0aGUgbG9jayBmb3IgaW8gb3BlcmF0aW9ucyAqLwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkJLyogdGhlIFBDSS1kZXZpY2UgKi8KKy8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIFBDSS1QQyB3YXRjaGRvZyBjYXJkICovCitzdGF0aWMgc3RydWN0IHsKKwkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLworCWludCBzdXBwb3J0c190ZW1wOworCS8qIFRoZSBjYXJkJ3MgYm9vdCBzdGF0dXMgKi8KKwlpbnQgYm9vdF9zdGF0dXM7CisJLyogVGhlIGNhcmRzIEkvTyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBpb19hZGRyOworCS8qIHRoZSBsb2NrIGZvciBpbyBvcGVyYXRpb25zICovCisJc3BpbmxvY2tfdCBpb19sb2NrOworCS8qIHRoZSBQQ0ktZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiB9IHBjaXBjd2RfcHJpdmF0ZTsKIAogLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KQEAgLTEzMCwxNCArMTM3LDE4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDA9UXVpZXQsIDE9VmVyYm9zZSwgMj1EZWJ1ZyAoZGVmYXVsdD0wKSIpOwogCi0jZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0gZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLworI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9CisJCQkJCQlkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIC8qCiAgKglJbnRlcm5hbCBmdW5jdGlvbnMKQEAgLTE0OCw4ICsxNTksOCBAQAogCWludCBnb3RfcmVzcG9uc2UsIGNvdW50OwogCiAJaWYgKGRlYnVnID49IERFQlVHKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmcgZm9sbG93aW5nIGRhdGEgY21kPTB4JTAyeCBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCi0JCWNtZCwgKm1zYiwgKmxzYik7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAic2VuZGluZyBmb2xsb3dpbmcgZGF0YSAiCisJCSJjbWQ9MHglMDJ4IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKIAogCXNwaW5fbG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCS8qIElmIGEgY29tbWFuZCByZXF1aXJlcyBkYXRhIGl0IHNob3VsZCBiZSB3cml0dGVuIGZpcnN0LgpAQCAtMTY2LDE3ICsxNzcsMjAgQEAKIAkgKiB0aGUgV1JTUCBiaXQgaW4gcG9ydCAyIGFuZCBnaXZlIGl0IGEgbWF4LiB0aW1lb3V0IG9mCiAJICogUENJX0NPTU1BTkRfVElNRU9VVCB0byBwcm9jZXNzICovCiAJZ290X3Jlc3BvbnNlID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAyKSAmIFdEX1BDSV9XUlNQOwotCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBQQ0lfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7IGNvdW50KyspIHsKKwlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgUENJX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOworCQkJCQkJCQljb3VudCsrKSB7CiAJCW1kZWxheSgxKTsKIAkJZ290X3Jlc3BvbnNlID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAyKSAmIFdEX1BDSV9XUlNQOwogCX0KIAogCWlmIChkZWJ1ZyA+PSBERUJVRykgewogCQlpZiAoZ290X3Jlc3BvbnNlKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInRpbWUgdG8gcHJvY2VzcyBjb21tYW5kIHdhczogJWQgbXNcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkidGltZSB0byBwcm9jZXNzIGNvbW1hbmQgd2FzOiAlZCBtc1xuIiwKIAkJCQljb3VudCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNhcmQgZGlkIG5vdCByZXNwb25kIG9uIGNvbW1hbmQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJCSJjYXJkIGRpZCBub3QgcmVzcG9uZCBvbiBjb21tYW5kIVxuIik7CiAJCX0KIAl9CiAKQEAgLTE4OSw3ICsyMDMsOCBAQAogCQlpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDYpOwogCiAJCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yIGNtZD0weCUwMng6IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yICIKKwkJCQkiY21kPTB4JTAyeDogbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAogCQkJCWNtZCwgKm1zYiwgKmxzYik7CiAJfQogCkBAIC0yMTgsNyArMjMzLDggQEAKIAljaGFyIGZ3X3Zlcl9zdHJbMjBdOwkJLyogVGhlIGNhcmRzIGZpcm13YXJlIHZlcnNpb24gKi8KIAlpbnQgb3B0aW9uX3N3aXRjaGVzOwogCi0JZ290X2Z3X3JldiA9IHNlbmRfY29tbWFuZChDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sICZmd19yZXZfbWFqb3IsICZmd19yZXZfbWlub3IpOworCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLAorCQkJCQkJCQkmZndfcmV2X21pbm9yKTsKIAlpZiAoZ290X2Z3X3JldikKIAkJc3ByaW50Zihmd192ZXJfc3RyLCAiJXUuJTAydSIsIGZ3X3Jldl9tYWpvciwgZndfcmV2X21pbm9yKTsKIAllbHNlCkBAIC0yMjcsMjMgKzI0MywyNyBAQAogCS8qIEdldCBzd2l0Y2ggc2V0dGluZ3MgKi8KIAlvcHRpb25fc3dpdGNoZXMgPSBwY2lwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCBjYXJkIGF0IHBvcnQgMHglMDR4IChGaXJtd2FyZTogJXMpICVzIHRlbXAgb3B0aW9uXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCBjYXJkIGF0IHBvcnQgIgorCQkiMHglMDR4IChGaXJtd2FyZTogJXMpICVzIHRlbXAgb3B0aW9uXG4iLAogCQkoaW50KSBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciwgZndfdmVyX3N0ciwKIAkJKHBjaXBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wID8gIndpdGgiIDogIndpdGhvdXQiKSk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6ICIKKwkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCW9wdGlvbl9zd2l0Y2hlcywKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDEwKSA/ICJPTiIgOiAiT0ZGIiksCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9DQVJEUkVTRVQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQcmV2aW91cyByZXNldCB3YXMgY2F1c2VkIGJ5IHRoZSBXYXRjaGRvZyBjYXJkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJQcmV2aW91cyByZXNldCB3YXMgY2F1c2VkIGJ5IHRoZSBXYXRjaGRvZyBjYXJkXG4iKTsKIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9PVkVSSEVBVCkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNhcmQgc2Vuc2VkIGEgQ1BVIE92ZXJoZWF0XG4iKTsKIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIHByZXZpb3VzIHRyaXAgZGV0ZWN0ZWQgLSBDb2xkIGJvb3Qgb3IgcmVzZXRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIk5vIHByZXZpb3VzIHRyaXAgZGV0ZWN0ZWQgLSBDb2xkIGJvb3Qgb3IgcmVzZXRcbiIpOwogfQogCiBzdGF0aWMgaW50IHBjaXBjd2Rfc3RhcnQodm9pZCkKQEAgLTI4Myw3ICszMDMsOCBAQAogCXNwaW5fdW5sb2NrKCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKIAlpZiAoIShzdGF0X3JlZyAmIFdEX1BDSV9XRElTKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zNjQsNyArMzg1LDggQEAKIAl9CiAKIAkvKiBjbGVhciB0cmlwIHN0YXR1cyAmIExFRCBhbmQga2VlcCBtb2RlIG9mIHJlbGF5IDIgKi8KLQlvdXRiX3AoKGNvbnRyb2xfc3RhdHVzICYgV0RfUENJX1IyRFMpIHwgV0RfUENJX1dUUlAsIHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisJb3V0Yl9wKChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9SMkRTKSB8IFdEX1BDSV9XVFJQLAorCQkJCQkJcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKIAogCS8qIGNsZWFyIHJlc2V0IGNvdW50ZXIgKi8KIAltc2IgPSAwOwpAQCAtNDM3LDcgKzQ1OSw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWV4cGVjdF9yZWxlYXNlID0gMDsKIAotCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUKKwkJCSAqIG1hZ2ljIGNoYXJhY3RlciAqLwogCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgewogCQkJCWNoYXIgYzsKIAkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQpAQCAtNTMxLDcgKzU1NCw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAocGNpcGN3ZF9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlwY2lwY3dkX2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCkBAIC01NjAsNyArNTgzLDggQEAKIAkvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmlzX2FjdGl2ZSkpIHsKIAkJaWYgKGRlYnVnID49IFZFUkJPU0UpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJBdHRlbXB0IHRvIG9wZW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkF0dGVtcHQgdG8gb3BlbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTU3OCw3ICs2MDIsOCBAQAogCWlmIChleHBlY3RfcmVsZWFzZSA9PSA0MikgewogCQlwY2lwY3dkX3N0b3AoKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYCisJCQkiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CiAJCXBjaXBjd2Rfa2VlcGFsaXZlKCk7CiAJfQogCWV4cGVjdF9yZWxlYXNlID0gMDsKQEAgLTYyMSw3ICs2NDYsOCBAQAogICoJTm90aWZ5IHN5c3RlbQogICovCiAKLXN0YXRpYyBpbnQgcGNpcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IHBjaXBjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKKwkJCQkJCQkJdm9pZCAqdW51c2VkKQogewogCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCiAJCXBjaXBjd2Rfc3RvcCgpOwkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCkBAIC03MjIsMzQgKzc0OCwzOCBAQAogCiAJLyogSWYgaGVhcnRiZWF0ID0gMCB0aGVuIHdlIHVzZSB0aGUgaGVhcnRiZWF0IGZyb20gdGhlIGRpcC1zd2l0Y2hlcyAqLwogCWlmIChoZWFydGJlYXQgPT0gMCkKLQkJaGVhcnRiZWF0ID0gaGVhcnRiZWF0X3RibFsocGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCkgJiAweDA3KV07CisJCWhlYXJ0YmVhdCA9CisJCQloZWFydGJlYXRfdGJsWyhwY2lwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKSAmIDB4MDcpXTsKIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CiAJCXBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19IRUFSVEJFQVQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKIAkJCVdBVENIRE9HX0hFQVJUQkVBVCk7CiAJfQogCiAJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwY2lwY3dkX25vdGlmaWVyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKLQkJCXJldCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLCByZXQpOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9yZWdpb247CiAJfQogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wKSB7CiAJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjaXBjd2RfdGVtcF9taXNjZGV2KTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKLQkJCQlURU1QX01JTk9SLCByZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gIgorCQkJCSJtaW5vcj0lZCAoZXJyPSVkKVxuIiwgVEVNUF9NSU5PUiwgcmV0KTsKIAkJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX3JlYm9vdDsKIAkJfQogCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjaXBjd2RfbWlzY2Rldik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0KTsKIAkJZ290byBlcnJfb3V0X21pc2NfZGVyZWdpc3RlcjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKaW5kZXggYWZiMDg5Ni4uMDUyZmU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwpAQCAtNTEsMTIgKzUxLDExIEBACiAKIC8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLwogI3VuZGVmIGRiZwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyBQRlggZm9ybWF0ICJcbiIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyBQRlggZm9ybWF0ICJcbiIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQogCiAvKiBNb2R1bGUgYW5kIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMDIiCi0jZGVmaW5lIERSSVZFUl9EQVRFICIyMSBKYW4gMjAwNyIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJCZXJrc2hpcmUgVVNCLVBDIFdhdGNoZG9nIGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKQEAgLTczLDE0ICs3MiwxOCBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CiAKLSNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPSBkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCisjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0KKwkJCQkJCWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAvKiBUaGUgdmVuZG9yIGFuZCBwcm9kdWN0IGlkJ3MgZm9yIHRoZSBVU0ItUEMgV2F0Y2hkb2cgY2FyZCAqLwogI2RlZmluZSBVU0JfUENXRF9WRU5ET1JfSUQJMHgwYzk4CkBAIC05MSwyMCArOTQsMjEgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1BDV0RfVkVORE9SX0lELCBVU0JfUENXRF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9wY3dkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfcGN3ZF90YWJsZSk7CiAKIC8qIGFjY29yZGluZyB0byBkb2N1bWVudGF0aW9uIG1heC4gdGltZSB0byBwcm9jZXNzIGEgY29tbWFuZCBmb3IgdGhlIFVTQgogICogd2F0Y2hkb2cgY2FyZCBpcyAxMDAgb3IgMjAwIG1zLCBzbyB3ZSBnaXZlIGl0IDI1MCBtcyB0byBkbyBpdCdzIGpvYiAqLwogI2RlZmluZSBVU0JfQ09NTUFORF9USU1FT1VUCTI1MAogCiAvKiBXYXRjaGRvZydzIGludGVybmFsIGNvbW1hbmRzICovCi0jZGVmaW5lIENNRF9SRUFEX1RFTVAJCQkweDAyCS8qIFJlYWQgVGVtcGVyYXR1cmU7IFJlLXRyaWdnZXIgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgQ01EX1JFQURfVEVNUAkJCTB4MDIJLyogUmVhZCBUZW1wZXJhdHVyZTsKKwkJCQkJCQlSZS10cmlnZ2VyIFdhdGNoZG9nICovCiAjZGVmaW5lIENNRF9UUklHR0VSCQkJQ01EX1JFQURfVEVNUAogI2RlZmluZSBDTURfR0VUX1NUQVRVUwkJCTB4MDQJLyogR2V0IFN0YXR1cyBJbmZvcm1hdGlvbiAqLwogI2RlZmluZSBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04JMHgwOAkvKiBHZXQgRmlybXdhcmUgVmVyc2lvbiAqLwogI2RlZmluZSBDTURfR0VUX0RJUF9TV0lUQ0hfU0VUVElOR1MJMHgwYwkvKiBHZXQgRGlwIFN3aXRjaCBTZXR0aW5ncyAqLwogI2RlZmluZSBDTURfUkVBRF9XQVRDSERPR19USU1FT1VUCTB4MTgJLyogUmVhZCBDdXJyZW50IFdhdGNoZG9nIFRpbWUgKi8KLSNkZWZpbmUgQ01EX1dSSVRFX1dBVENIRE9HX1RJTUVPVVQJMHgxOQkvKiBXcml0ZSBDdXJyZW50IFdhdGNoZG9nIFRpbWUgKi8KKyNkZWZpbmUgQ01EX1dSSVRFX1dBVENIRE9HX1RJTUVPVVQJMHgxOQkvKiBXcml0ZSBDdXJyZW50IFdhdGNoZG9nVGltZSAqLwogI2RlZmluZSBDTURfRU5BQkxFX1dBVENIRE9HCQkweDMwCS8qIEVuYWJsZSAvIERpc2FibGUgV2F0Y2hkb2cgKi8KICNkZWZpbmUgQ01EX0RJU0FCTEVfV0FUQ0hET0cJCUNNRF9FTkFCTEVfV0FUQ0hET0cKIApAQCAtMTI5LDIzICsxMzMsMzYgQEAKIAogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlIHsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsJCQkvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsJCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKIAotCXVuc2lnbmVkIGludAkJaW50ZXJmYWNlX251bWJlcjsJLyogdGhlIGludGVyZmFjZSBudW1iZXIgdXNlZCBmb3IgY21kJ3MgKi8KKwkvKiB0aGUgaW50ZXJmYWNlIG51bWJlciB1c2VkIGZvciBjbWQncyAqLworCXVuc2lnbmVkIGludAkJaW50ZXJmYWNlX251bWJlcjsKIAotCXVuc2lnbmVkIGNoYXIJCSppbnRyX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgdG8gaW50ciBkYXRhICovCi0JZG1hX2FkZHJfdAkJaW50cl9kbWE7CQkvKiB0aGUgZG1hIGFkZHJlc3MgZm9yIHRoZSBpbnRyIGJ1ZmZlciAqLwotCXNpemVfdAkJCWludHJfc2l6ZTsJCS8qIHRoZSBzaXplIG9mIHRoZSBpbnRyIGJ1ZmZlciAqLwotCXN0cnVjdCB1cmIJCSppbnRyX3VyYjsJCS8qIHRoZSB1cmIgdXNlZCBmb3IgdGhlIGludHIgcGlwZSAqLworCS8qIHRoZSBidWZmZXIgdG8gaW50ciBkYXRhICovCisJdW5zaWduZWQgY2hhcgkJKmludHJfYnVmZmVyOworCS8qIHRoZSBkbWEgYWRkcmVzcyBmb3IgdGhlIGludHIgYnVmZmVyICovCisJZG1hX2FkZHJfdAkJaW50cl9kbWE7CisJLyogdGhlIHNpemUgb2YgdGhlIGludHIgYnVmZmVyICovCisJc2l6ZV90CQkJaW50cl9zaXplOworCS8qIHRoZSB1cmIgdXNlZCBmb3IgdGhlIGludHIgcGlwZSAqLworCXN0cnVjdCB1cmIJCSppbnRyX3VyYjsKIAotCXVuc2lnbmVkIGNoYXIJCWNtZF9jb21tYW5kOwkJLyogVGhlIGNvbW1hbmQgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbXNiOwkJLyogVGhlIGRhdGEgTVNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX2xzYjsJCS8qIFRoZSBkYXRhIExTQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQlhdG9taWNfdAkJY21kX3JlY2VpdmVkOwkJLyogdHJ1ZSBpZiB3ZSByZWNlaXZlZCBhIHJlcG9ydCBhZnRlciBhIGNvbW1hbmQgKi8KKwkvKiBUaGUgY29tbWFuZCB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQljbWRfY29tbWFuZDsKKwkvKiBUaGUgZGF0YSBNU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbXNiOworCS8qIFRoZSBkYXRhIExTQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9sc2I7CisJLyogdHJ1ZSBpZiB3ZSByZWNlaXZlZCBhIHJlcG9ydCBhZnRlciBhIGNvbW1hbmQgKi8KKwlhdG9taWNfdAkJY21kX3JlY2VpdmVkOwogCi0JaW50CQkJZXhpc3RzOwkJCS8qIFdldGhlciBvciBub3QgdGhlIGRldmljZSBleGlzdHMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCW10eDsJCQkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCS8qIFdldGhlciBvciBub3QgdGhlIGRldmljZSBleGlzdHMgKi8KKwlpbnQJCQlleGlzdHM7CisJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCW10eDsKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkX2RldmljZTsKIApAQCAtMTUzLDcgKzE3MCw4IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgdXNiX3Bjd2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwpAQCAtMTY3LDcgKzE4NSw4IEBACiAKIHN0YXRpYyB2b2lkIHVzYl9wY3dkX2ludHJfZG9uZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkID0gKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCA9CisJCQkJKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICopdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1c2JfcGN3ZC0+aW50cl9idWZmZXI7CiAJaW50IHJldHZhbDsKIApAQCAtMTc4LDExICsxOTcsMTMgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLAorCQkJCQkJCQl1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KIAlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkJCQkJCQl1cmItPnN0YXR1cyk7CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCkBAIC0xOTksMjIgKzIyMCwyMyBAQAogcmVzdWJtaXQ6CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCByZXN1Ym1pdCBpbnRyLCB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCi0JCQlyZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCByZXN1Ym1pdCBpbnRyLCAiCisJCQkidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLCByZXR2YWwpOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX3NlbmRfY29tbWFuZChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIHVuc2lnbmVkIGNoYXIgY21kLAotCXVuc2lnbmVkIGNoYXIgKm1zYiwgdW5zaWduZWQgY2hhciAqbHNiKQorc3RhdGljIGludCB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQl1bnNpZ25lZCBjaGFyIGNtZCwgdW5zaWduZWQgY2hhciAqbXNiLCB1bnNpZ25lZCBjaGFyICpsc2IpCiB7CiAJaW50IGdvdF9yZXNwb25zZSwgY291bnQ7CiAJdW5zaWduZWQgY2hhciBidWZbNl07CiAKLQkvKiBXZSB3aWxsIG5vdCBzZW5kIGFueSBjb21tYW5kcyBpZiB0aGUgVVNCIFBDV0QgZGV2aWNlIGRvZXMgbm90IGV4aXN0ICovCisJLyogV2Ugd2lsbCBub3Qgc2VuZCBhbnkgY29tbWFuZHMgaWYgdGhlIFVTQiBQQ1dEIGRldmljZSBkb2VzCisJICogbm90IGV4aXN0ICovCiAJaWYgKCghdXNiX3Bjd2QpIHx8ICghdXNiX3Bjd2QtPmV4aXN0cykpCiAJCXJldHVybiAtMTsKIAotCS8qIFRoZSBVU0IgUEMgV2F0Y2hkb2cgdXNlcyBhIDYgYnl0ZSByZXBvcnQgZm9ybWF0LiBUaGUgYm9hcmQgY3VycmVudGx5IHVzZXMKLQkgKiBvbmx5IDMgb2YgdGhlIHNpeCBieXRlcyBvZiB0aGUgcmVwb3J0LiAqLworCS8qIFRoZSBVU0IgUEMgV2F0Y2hkb2cgdXNlcyBhIDYgYnl0ZSByZXBvcnQgZm9ybWF0LgorCSAqIFRoZSBib2FyZCBjdXJyZW50bHkgdXNlcyBvbmx5IDMgb2YgdGhlIHNpeCBieXRlcyBvZiB0aGUgcmVwb3J0LiAqLwogCWJ1ZlswXSA9IGNtZDsJCQkvKiBCeXRlIDAgPSBDTUQgKi8KIAlidWZbMV0gPSAqbXNiOwkJCS8qIEJ5dGUgMSA9IERhdGEgTVNCICovCiAJYnVmWzJdID0gKmxzYjsJCQkvKiBCeXRlIDIgPSBEYXRhIExTQiAqLwpAQCAtMjI5LDEyICsyNTEsMTQgQEAKIAkJCUhJRF9SRVFfU0VUX1JFUE9SVCwgSElEX0RUX1JFUE9SVCwKIAkJCTB4MDIwMCwgdXNiX3Bjd2QtPmludGVyZmFjZV9udW1iZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksCiAJCQlVU0JfQ09NTUFORF9USU1FT1VUKSAhPSBzaXplb2YoYnVmKSkgewotCQlkYmcoInVzYl9wY3dkX3NlbmRfY29tbWFuZDogZXJyb3IgaW4gdXNiX2NvbnRyb2xfbXNnIGZvciBjbWQgMHgleCAweCV4IDB4JXhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CisJCWRiZygidXNiX3Bjd2Rfc2VuZF9jb21tYW5kOiBlcnJvciBpbiB1c2JfY29udHJvbF9tc2cgZm9yICIKKwkJCQkiY21kIDB4JXggMHgleCAweCV4XG4iLCBjbWQsICptc2IsICpsc2IpOwogCX0KIAkvKiB3YWl0IHRpbGwgdGhlIHVzYiBjYXJkIHByb2Nlc3NlZCB0aGUgY29tbWFuZCwKIAkgKiB3aXRoIGEgbWF4LiB0aW1lb3V0IG9mIFVTQl9DT01NQU5EX1RJTUVPVVQgKi8KIAlnb3RfcmVzcG9uc2UgPSAwOwotCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBVU0JfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7IGNvdW50KyspIHsKKwlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgVVNCX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOworCQkJCQkJCQljb3VudCsrKSB7CiAJCW1kZWxheSgxKTsKIAkJaWYgKGF0b21pY19yZWFkKCZ1c2JfcGN3ZC0+Y21kX3JlY2VpdmVkKSkKIAkJCWdvdF9yZXNwb25zZSA9IDE7CkBAIC0yNTYsMTAgKzI4MCwxMiBAQAogCWludCByZXR2YWw7CiAKIAkvKiBFbmFibGUgV2F0Y2hkb2cgKi8KLQlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9FTkFCTEVfV0FUQ0hET0csICZtc2IsICZsc2IpOworCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0VOQUJMRV9XQVRDSERPRywKKwkJCQkJCQkJJm1zYiwgJmxzYik7CiAKIAlpZiAoKHJldHZhbCA9PSAwKSB8fCAobHNiID09IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBlbmFibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGVuYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjczLDEwICsyOTksMTIgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogRGlzYWJsZSBXYXRjaGRvZyAqLwotCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0RJU0FCTEVfV0FUQ0hET0csICZtc2IsICZsc2IpOworCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0RJU0FCTEVfV0FUQ0hET0csCisJCQkJCQkJCSZtc2IsICZsc2IpOwogCiAJaWYgKChyZXR2YWwgPT0gMCkgfHwgKGxzYiAhPSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDgsNyArMzM2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCBpbnQgKnRlbXBlcmF0dXJlKQorc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQkJCQkJCWludCAqdGVtcGVyYXR1cmUpCiB7CiAJdW5zaWduZWQgY2hhciBtc2IsIGxzYjsKIApAQCAtMzIzLDcgKzM1Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RpbWVsZWZ0KHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgaW50ICp0aW1lX2xlZnQpCitzdGF0aWMgaW50IHVzYl9wY3dkX2dldF90aW1lbGVmdChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsCisJCQkJCQkJCWludCAqdGltZV9sZWZ0KQogewogCXVuc2lnbmVkIGNoYXIgbXNiLCBsc2I7CiAKQEAgLTM0MSw3ICszNzEsNyBAQAogICovCiAKIHN0YXRpYyBzc2l6ZV90IHVzYl9wY3dkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKKwkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAkvKiBTZWUgaWYgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgJ1YnIGFuZCByZWxvYWQgdGhlIHRpbWVyICovCiAJaWYgKGxlbikgewpAQCAtMzUyLDcgKzM4Miw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWV4cGVjdF9yZWxlYXNlID0gMDsKIAotCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUKKwkJCSAqIG1hZ2ljIGNoYXJhY3RlciAqLwogCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgewogCQkJCWNoYXIgYzsKIAkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQpAQCAtNDMxLDcgKzQ2Miw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAodXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZF9kZXZpY2UsIG5ld19oZWFydGJlYXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl1c2JfcGN3ZF9rZWVwYWxpdmUodXNiX3Bjd2RfZGV2aWNlKTsKIAkJLyogRmFsbCAqLwpAQCAtNDc1LDcgKzUwNiw4IEBACiAJaWYgKGV4cGVjdF9yZWxlYXNlID09IDQyKSB7CiAJCXVzYl9wY3dkX3N0b3AodXNiX3Bjd2RfZGV2aWNlKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYCisJCQkiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CiAJCXVzYl9wY3dkX2tlZXBhbGl2ZSh1c2JfcGN3ZF9kZXZpY2UpOwogCX0KIAlleHBlY3RfcmVsZWFzZSA9IDA7CkBAIC01MTUsNyArNTQ3LDggQEAKICAqCU5vdGlmeSBzeXN0ZW0KICAqLwogCi1zdGF0aWMgaW50IHVzYl9wY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3N0YXRpYyBpbnQgdXNiX3Bjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKKwkJCQkJCQkJdm9pZCAqdW51c2VkKQogewogCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCiAJCXVzYl9wY3dkX3N0b3AodXNiX3Bjd2RfZGV2aWNlKTsJLyogVHVybiB0aGUgV0RUIG9mZiAqLwpAQCAtNTc4LDcgKzYxMSw4IEBACiAgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcwogICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KICAqLwotc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKQEAgLTYwMiwxNiArNjM2LDE1IEBACiAKIAkvKiBjaGVjayBvdXQgdGhhdCB3ZSBoYXZlIGEgSElEIGRldmljZSAqLwogCWlmICghKGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19ISUQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlRoZSBkZXZpY2UgaXNuJ3QgYSBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIlRoZSBkZXZpY2UgaXNuJ3QgYSBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludDogaXQgaGFzIHRvIGJlIEludGVycnVwdCAmIElOICovCiAJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMF0uZGVzYzsKIAotCWlmICghKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCi0JICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSkgeworCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpIHsKIAkJLyogd2UgZGlkbid0IGZpbmQgYSBJbnRlcnJ1cHQgZW5kcG9pbnQgd2l0aCBkaXJlY3Rpb24gSU4gKi8KIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGRuJ3QgZmluZCBhbiBJTlRSICYgSU4gZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTYzNCwxMCArNjY3LDEyIEBACiAJdXNiX3Bjd2QtPnVkZXYgPSB1ZGV2OwogCXVzYl9wY3dkLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiAJdXNiX3Bjd2QtPmludGVyZmFjZV9udW1iZXIgPSBpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JdXNiX3Bjd2QtPmludHJfc2l6ZSA9IChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID4gOCA/IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgOiA4KTsKKwl1c2JfcGN3ZC0+aW50cl9zaXplID0gKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiA4ID8KKwkJCQlsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpIDogOCk7CiAKIAkvKiBzZXQgdXAgdGhlIG1lbW9yeSBidWZmZXIncyAqLwotCXVzYl9wY3dkLT5pbnRyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgdXNiX3Bjd2QtPmludHJfc2l6ZSwgR0ZQX0FUT01JQywgJnVzYl9wY3dkLT5pbnRyX2RtYSk7CisJdXNiX3Bjd2QtPmludHJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCB1c2JfcGN3ZC0+aW50cl9zaXplLAorCQkJCQlHRlBfQVRPTUlDLCAmdXNiX3Bjd2QtPmludHJfZG1hKTsKIAlpZiAoIXVzYl9wY3dkLT5pbnRyX2J1ZmZlcikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTY3MSw3ICs3MDYsOCBAQAogCXVzYl9wY3dkX3N0b3AodXNiX3Bjd2QpOwogCiAJLyogR2V0IHRoZSBGaXJtd2FyZSBWZXJzaW9uICovCi0JZ290X2Z3X3JldiA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKKwlnb3RfZndfcmV2ID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sCisJCQkJCQkmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKIAlpZiAoZ290X2Z3X3JldikKIAkJc3ByaW50Zihmd192ZXJfc3RyLCAiJXUuJTAydSIsIGZ3X3Jldl9tYWpvciwgZndfcmV2X21pbm9yKTsKIAllbHNlCkBAIC02ODEsOSArNzE3LDExIEBACiAJCWZ3X3Zlcl9zdHIpOwogCiAJLyogR2V0IHN3aXRjaCBzZXR0aW5ncyAqLwotCXVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTLCAmZHVtbXksICZvcHRpb25fc3dpdGNoZXMpOworCXVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTLCAmZHVtbXksCisJCQkJCQkJJm9wdGlvbl9zd2l0Y2hlcyk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6ICIKKwkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCW9wdGlvbl9zd2l0Y2hlcywKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDEwKSA/ICJPTiIgOiAiT0ZGIiksCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKQEAgLTY5MiwzMCArNzMwLDM1IEBACiAJaWYgKGhlYXJ0YmVhdCA9PSAwKQogCQloZWFydGJlYXQgPSBoZWFydGJlYXRfdGJsWyhvcHRpb25fc3dpdGNoZXMgJiAweDA3KV07CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmICh1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkLCBoZWFydGJlYXQpKSB7CiAJCXVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2QsIFdBVENIRE9HX0hFQVJUQkVBVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAogCQkJV0FUQ0hET0dfSEVBUlRCRUFUKTsKIAl9CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnVzYl9wY3dkX25vdGlmaWVyKTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCiAJCQlyZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnVzYl9wY3dkX3RlbXBlcmF0dXJlX21pc2NkZXYpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJVEVNUF9NSU5PUiwgcmV0dmFsKTsKIAkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfcmVib290OwogCX0KIAogCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnVzYl9wY3dkX21pc2NkZXYpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldHZhbCk7CiAJCWdvdG8gZXJyX291dF9taXNjX2RlcmVnaXN0ZXI7CiAJfQpAQCAtODAxLDcgKzg0NCw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJJVkVSX0RFU0MgIiB2IiBEUklWRVJfVkVSU0lPTiAiICgiIERSSVZFUl9EQVRFICIpXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCBEUklWRVJfREVTQyAiIHYiIERSSVZFUl9WRVJTSU9OICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKaW5kZXggNmQ5ZjNkNC4uNjQxMzUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwpAQCAtNTQsMjIgKzU0LDIyIEBACiAKIC8qIFdEVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKLSNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCi0jZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQorI2RlZmluZSBSRVNFVF9DT1VOVCAgICAoMSA8PCAxKQorI2RlZmluZSBERUJVR19FTiAgICAgICAoMSA8PCAyKQogCiAvKiBXRFRJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQogI3VuZGVmICBSRVNFVF9DT1VOVDAKLSNkZWZpbmUgUkVTRVRfQ09VTlQwICAgKDE8PDIpCi0jZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxPDwyKQotI2RlZmluZSBNX1JFUzEgICAgICAgICAoMTw8MykKLSNkZWZpbmUgTV9SRVMyICAgICAgICAgKDE8PDQpCi0jZGVmaW5lIFJFU0ZSQzEgICAgICAgICgxPDw1KQotI2RlZmluZSBSRVNGUkMyICAgICAgICAoMTw8NikKKyNkZWZpbmUgUkVTRVRfQ09VTlQwICAgKDEgPDwgMikKKyNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDEgPDwgMikKKyNkZWZpbmUgTV9SRVMxICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgTV9SRVMyICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUkVTRlJDMSAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgUkVTRlJDMiAgICAgICAgKDEgPDwgNikKIAogLyogV0RUSU1fRU1SIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBFWFRfTUFUQ0gwICAgICAgMQotI2RlZmluZSBNQVRDSF9PVVRQVVRfSElHSCAoMjw8NCkJLyphIE1BVENIX0NUUkwgc2V0dGluZyAqLworI2RlZmluZSBNQVRDSF9PVVRQVVRfSElHSCAoMiA8PCA0KQkvKmEgTUFUQ0hfQ1RSTCBzZXR0aW5nICovCiAKIC8qIFdEVElNX1JFUyBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgV0RPR19SRVNFVCAgICAgIDEJLyogcmVhZCBvbmx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKaW5kZXggZjM1NTNmYS4uZjZjY2NjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYwpAQCAtMTcsMjcgKzE3LDI5IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CQkvKiBGb3IgbW9kdWxlIHNwZWNpZmljIGl0ZW1zICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4JCS8qIEZvciBuZXcgbW9kdWxlcGFyYW0ncyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CQkvKiBGb3Igc3RhbmRhcmQgdHlwZXMgKGxpa2Ugc2l6ZV90KSAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CQkvKiBGb3IgdGhlIC1FTk9ERVYvLi4uIHZhbHVlcyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkJLyogRm9yIHByaW50ay9wYW5pYy8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgkJCS8qIEZvciBmaWxlIG9wZXJhdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CQkvKiBGb3IgTU9EVUxFX0FMSUFTX01JU0NERVYKKwkJCQkJCQkoV0FUQ0hET0dfTUlOT1IpICovCisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4JCS8qIEZvciB0aGUgd2F0Y2hkb2cgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkJLyogRm9yIF9faW5pdC9fX2V4aXQvLi4uICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CS8qIEZvciBwbGF0Zm9ybV9kcml2ZXIgZnJhbWV3b3JrICovCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JCS8qIEZvciBzcGluX2xvY2svc3Bpbl91bmxvY2svLi4uICovCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgkJLyogRm9yIGNvcHlfdG9fdXNlci9wdXRfdXNlci8uLi4gKi8KIAotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9pbnRlZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvaW50ZWcuaD4JLyogRm9yIHRoZSBXYXRjaGRvZyByZWdpc3RlcnMgKi8KIAotI2RlZmluZSBWRVJTSU9OICIwLjQiCisjZGVmaW5lIFBGWCBLQlVJTERfTU9ETkFNRSAiOiAiCisKKyNkZWZpbmUgVkVSU0lPTiAiMS4wIgogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGludXNlOworCXNwaW5sb2NrX3QgaW9fbG9jazsKIH0gcmMzMjQzNF93ZHRfZGV2aWNlOwogCiBzdGF0aWMgc3RydWN0IGludGVnIF9faW9tZW0gKndkdF9yZWc7CkBAIC01OCw2ICs2MCw5IEBACiAjZGVmaW5lIFdBVENIRE9HX1RJTUVPVVQgMjAKIAogc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsKK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCB2YWx1ZSwgaW4gc2Vjb25kcyAoZGVmYXVsdD0iCisJCVdBVENIRE9HX1RJTUVPVVQgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwpAQCAtNjgsMTAgKzczLDI5IEBACiAjZGVmaW5lIFNFVF9CSVRTKGFkZHIsIG9yLCBuYW5kKSBcCiAJd3JpdGVsKChyZWFkbCgmYWRkcikgfCBvcikgJiB+bmFuZCwgJmFkZHIpCiAKK3N0YXRpYyBpbnQgcmMzMjQzNF93ZHRfc2V0KGludCBuZXdfdGltZW91dCkKK3sKKwlpbnQgbWF4X3RvID0gV1RDT01QMlNFQygodTMyKS0xKTsKKworCWlmIChuZXdfdGltZW91dCA8IDAgfHwgbmV3X3RpbWVvdXQgPiBtYXhfdG8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLAorCQkJbWF4X3RvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRpbWVvdXQgPSBuZXdfdGltZW91dDsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwl3cml0ZWwoU0VDMldUQ09NUCh0aW1lb3V0KSwgJndkdF9yZWctPnd0Y29tcGFyZSk7CisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zdGFydCh2b2lkKQogewogCXUzMiBvciwgbmFuZDsKIAorCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCiAJLyogemVybyB0aGUgY291bnRlciBiZWZvcmUgZW5hYmxpbmcgKi8KIAl3cml0ZWwoMCwgJndkdF9yZWctPnd0Y291bnQpOwogCkBAIC04NSwzOCArMTA5LDM1IEBACiAKIAlTRVRfQklUUyh3ZHRfcmVnLT5lcnJjcywgb3IsIG5hbmQpOwogCisJLyogc2V0IHRoZSB0aW1lb3V0IChlaXRoZXIgZGVmYXVsdCBvciBiYXNlZCBvbiBtb2R1bGUgcGFyYW0pICovCisJcmMzMjQzNF93ZHRfc2V0KHRpbWVvdXQpOworCiAJLyogcmVzZXQgV1RDIHRpbWVvdXQgYml0IGFuZCBlbmFibGUgV0RUICovCiAJbmFuZCA9IDEgPDwgUkMzMjQzNF9XVENfVE87CiAJb3IgPSAxIDw8IFJDMzI0MzRfV1RDX0VOOwogCiAJU0VUX0JJVFMod2R0X3JlZy0+d3RjLCBvciwgbmFuZCk7CisKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXByaW50ayhLRVJOX0lORk8gUEZYICJTdGFydGVkIHdhdGNoZG9nIHRpbWVyLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3N0b3Aodm9pZCkKIHsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwogCS8qIERpc2FibGUgV0RUICovCiAJU0VUX0JJVFMod2R0X3JlZy0+d3RjLCAwLCAxIDw8IFJDMzI0MzRfV1RDX0VOKTsKLX0KIAotc3RhdGljIGludCByYzMyNDM0X3dkdF9zZXQoaW50IG5ld190aW1lb3V0KQotewotCWludCBtYXhfdG8gPSBXVENPTVAyU0VDKCh1MzIpLTEpOwotCi0JaWYgKG5ld190aW1lb3V0IDwgMCB8fCBuZXdfdGltZW91dCA+IG1heF90bykgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSI6IHRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkIiwKLQkJCW1heF90byk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl0aW1lb3V0ID0gbmV3X3RpbWVvdXQ7Ci0Jd3JpdGVsKFNFQzJXVENPTVAodGltZW91dCksICZ3ZHRfcmVnLT53dGNvbXBhcmUpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiU3RvcHBlZCB3YXRjaGRvZyB0aW1lci5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9waW5nKHZvaWQpCiB7CisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CiAJd3JpdGVsKDAsICZ3ZHRfcmVnLT53dGNvdW50KTsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHJjMzI0MzRfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMzcsMTEgKzE1OCwxMCBAQAogewogCWlmIChleHBlY3RfY2xvc2UgPT0gNDIpIHsKIAkJcmMzMjQzNF93ZHRfc3RvcCgpOwotCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IGRpc2FibGluZyB3YXRjaGRvZyB0aW1lclxuIik7CiAJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgS0JVSUxEX01PRE5BTUUKLQkJCSI6IGRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5LiBXRFQgd2lsbCBub3Qgc3RvcCAhXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJkZXZpY2UgY2xvc2VkIHVuZXhwZWN0ZWRseS4gV0RUIHdpbGwgbm90IHN0b3AhXG4iKTsKIAkJcmMzMjQzNF93ZHRfcGluZygpOwogCX0KIAljbGVhcl9iaXQoMCwgJnJjMzI0MzRfd2R0X2RldmljZS5pbnVzZSk7CkBAIC0xODUsOCArMjA1LDkgQEAKIAkJLmlkZW50aXR5ID0JCSJSQzMyNDM0X1dEVCBXYXRjaGRvZyIsCiAJfTsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQlyYzMyNDM0X3dkdF9waW5nKCk7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBXRElPQ19HRVRTVEFUVVM6CiAJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgpAQCAtMTk0LDEwICsyMTUsNiBAQAogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YWx1ZSwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwotCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwogCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWx1ZSwgYXJncCwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMTIsNiArMjI5LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQlyYzMyNDM0X3dkdF9waW5nKCk7CisJCWJyZWFrOwogCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfdGltZW91dCwgYXJncCwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMjcsNyArMjQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmMzMjQzNF93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjMzI0MzRfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSByYzMyNDM0X3dkdF93cml0ZSwKQEAgLTI0Miw4ICsyNjIsOCBAQAogCS5mb3BzCT0gJnJjMzI0MzRfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2RldmluaXRkYXRhID0gS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCi0JCSI6IFdhdGNoZG9nIFRpbWVyIHZlcnNpb24gIiBWRVJTSU9OICIsIHRpbWVyIG1hcmdpbjogJWQgc2VjXG4iOworc3RhdGljIGNoYXIgYmFubmVyW10gX19kZXZpbml0ZGF0YSA9IEtFUk5fSU5GTyBQRlgKKwkJIldhdGNoZG9nIFRpbWVyIHZlcnNpb24gIiBWRVJTSU9OICIsIHRpbWVyIG1hcmdpbjogJWQgc2VjXG4iOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCByYzMyNDM0X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMjUyLDIyICsyNzIsMzMgQEAKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmI1MzJfd2R0X3JlcyIpOwogCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmV0cmlldmUgcmVzb3VyY2VzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJldHJpZXZlIHJlc291cmNlc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXdkdF9yZWcgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKIAlpZiAoIXdkdF9yZWcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJlbWFwIEkvTyByZXNvdXJjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVtYXAgSS9PIHJlc291cmNlc1xuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgd2F0Y2hkb2cgaXMgbm90IHJ1bm5pbmcgKi8KKwlyYzMyNDM0X3dkdF9zdG9wKCk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2U7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJaWYgKHJjMzI0MzRfd2R0X3NldCh0aW1lb3V0KSkgeworCQlyYzMyNDM0X3dkdF9zZXQoV0FUQ0hET0dfVElNRU9VVCk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkidGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsCisJCQlXVENPTVAyU0VDKCh1MzIpLTEpKTsKKwl9CisKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdF9taXNjZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgd2F0Y2hkb2cgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHdhdGNoZG9nIGRldmljZVxuIik7CiAJCWdvdG8gdW5tYXA7CiAJfQogCkBAIC0yODcsMjIgKzMxOCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByYzMyNDM0X3dkdCA9IHsKLQkucHJvYmUJPSByYzMyNDM0X3dkdF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AocmMzMjQzNF93ZHRfcmVtb3ZlKSwKLQkuZHJpdmVyCT0gewotCQkubmFtZSA9ICJyYzMyNDM0X3dkdCIsCitzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJjMzI0MzRfd2R0X3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmMzMjQzNF93ZHRfZHJpdmVyID0geworCS5wcm9iZQkJPSByYzMyNDM0X3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJjMzI0MzRfd2R0X3JlbW92ZSksCisJLnNodXRkb3duCT0gcmMzMjQzNF93ZHRfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCQkubmFtZSA9ICJyYzMyNDM0X3dkdCIsCiAJfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmMzMjQzNF93ZHRfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJjMzI0MzRfd2R0KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmMzMjQzNF93ZHRfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYzMyNDM0X3dkdCk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJjMzI0MzRfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHJjMzI0MzRfd2R0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCmluZGV4IDA5Y2IxODMuLjFlOGYwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKQEAgLTE0LDkgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAKIC8qIFJJTyB1c2VzIHRoZSBOYXRTZW1pIFN1cGVyIEkvTyBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljYWwgZGV2aWNlCkBAIC04Niw4ICs4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmlvd2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHJpb3dkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfU0VUVElNRU9VVCwKQEAgLTE0Nyw3ICsxNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCByaW93ZCAqcCA9IHJpb3dkX2RldmljZTsKIApAQCAtMTYwLDEyICsxNTksMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmlvd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkubGxzZWVrID0Jbm9fbGxzZWVrLAotCS5pb2N0bCA9CXJpb3dkX2lvY3RsLAotCS5vcGVuID0JCXJpb3dkX29wZW4sCi0JLndyaXRlID0Jcmlvd2Rfd3JpdGUsCi0JLnJlbGVhc2UgPQlyaW93ZF9yZWxlYXNlLAorCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0JCW5vX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwgPQlyaW93ZF9pb2N0bCwKKwkub3BlbiA9CQkJcmlvd2Rfb3BlbiwKKwkud3JpdGUgPQkJcmlvd2Rfd3JpdGUsCisJLnJlbGVhc2UgPQkJcmlvd2RfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSByaW93ZF9taXNjZGV2ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCmluZGV4IGYxYWUzNzI5Li5jY2UxOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JtOWtfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCkBAIC01OSw4ICs1OSw4IEBACiBzdGF0aWMgaW50IHdkdF9ncGlfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLAogCQkJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKIAogc3RhdGljIGNvbnN0IGNoYXIgd2R0X2dwaV9uYW1lW10gPSAid2R0X2dwaSI7CkBAIC0zNDYsMTAgKzM0Niw5IEBACiB9CiAKIC8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2KQogewogCWludCByZXM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkdiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWNvbnN0IHN0cnVjdCByZXNvdXJjZQogCQkqIGNvbnN0IHJyID0gd2R0X2dwaV9nZXRfcmVzb3VyY2UocGR2LCBXRFRfUkVTT1VSQ0VfUkVHUywKIAkJCQkJCSAgSU9SRVNPVVJDRV9NRU0pLApAQCAtMzc0LDcgKzM3Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXM7CiAKQEAgLTM4NywxNSArMzg2LDEzIEBACiAKIAogLyogRGV2aWNlIGRyaXZlciBpbml0ICYgZXhpdCAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdkdF9ncGlfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIHdkdF9ncGlfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3Z3RfZ3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSB3ZHRfZ3BpX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSB3ZHRfZ3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3Aod2R0X2dwaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IE5VTEwsCi0JLnN1c3BlbmQJPSBOVUxMLAotCS5yZXN1bWUJCT0gTlVMTCwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTQwMywxMiArNDAwLDEyIEBACiAJYXRvbWljX3NldCgmb3BlbmNudCwgMSk7CiAJaWYgKHRpbWVvdXQgPiBNQVhfVElNRU9VVF9TRUNPTkRTKQogCQl0aW1lb3V0ID0gTUFYX1RJTUVPVVRfU0VDT05EUzsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2dwaV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQod2R0X2dwaV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCmluZGV4IGUxOWI0NTcuLjViZDc4MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCVdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIFNBMTF4MC9QWEEyeHgKICAqCi0gKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMCBPbGVnIERyb2tpbiA8Z3JlZW5AY3JpbWVhLmVkdT4KLSAqICAgICAgICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKgkoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CisgKgkgICAgQmFzZWQgb24gU29mdERvZyBkcml2ZXIgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMCAgICAgICAgICAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CiAgKgotICogICAgICAyNy8xMS8yMDAwIEluaXRpYWwgcmVsZWFzZQorICoJMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCmluZGV4IDMyNjZkYWEuLmQxYzM5MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCTYweHggU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlciBmb3IgTGludXggMi4yLngKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KKyAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwppbmRleCBhZTc0ZjZiLi5iNmU2Nzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzgzNjAuYwpAQCAtNCwxMiArNCwxMiBAQAogICoJKGMpIENvcHlyaWdodCAyMDA1IFdlYmNvbiwgSW5jLgogICoKICAqCUJhc2VkIG9uIGliNzAwd2R0LmMsIHdoaWNoIGlzIGJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkCi0gKiAgICAgIG9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCW9uIGFjcXVpcmV3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiB3ZHQuYy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgQ2hhcmxlcyBIb3dlcyA8Y2hvd2VzQHZzb2wubmV0PgogICoKLSAqICAgICAgQmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWNxdWlyZXdkdC5jIHdoaWNoCi0gKiAgICAgICBpcyBiYXNlZCBvbiB3ZHQuYy4KKyAqCUJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFjcXVpcmV3ZHQuYyB3aGljaAorICoJaXMgYmFzZWQgb24gd2R0LmMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KICAqCkBAIC0zMCw5ICszMCw5IEBACiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgotICogICAgICAxNC1EZWMtMjAwMSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+Ci0gKiAgICAgICAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqICAgICAgICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAorICoJMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICoJICAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorICoJICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCmluZGV4IDA2NTUzZGUuLmU0NjdkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCkBAIC0zNSw3ICszNSw4IEBACiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAjZGVmaW5lIEVQWEMzX1dBVENIRE9HX0NUTF9SRUcgMHgxZWUgLyogd3JpdGUgMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZSAqLwogI2RlZmluZSBFUFhDM19XQVRDSERPR19QRVRfUkVHIDB4MWVmIC8qIHdyaXRlIGFueXRoaW5nIHRvIHBldCBvbmNlIGVuYWJsZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCmluZGV4IDIzZGEzY2MuLmI1ZTE5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYwpAQCAtNzEsNyArNzEsNyBAQAogI2RlZmluZSBVQVJUMl9JUlEJMHgwNAkvKiBTZXJpYWwxICovCiAvKiA1IC03IGFyZSByZXNlcnZlZCAqLwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFBGWCBTQzEyMDBfTU9EVUxFX1ZFUjsKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBQRlggU0MxMjAwX01PRFVMRV9WRVI7CiBzdGF0aWMgaW50IHRpbWVvdXQgPSAxOwogc3RhdGljIGludCBpbyA9IC0xOwogc3RhdGljIGludCBpb19sZW4gPSAyOwkJLyogZm9yIG5vbiBwbHVnIGFuZCBwbGF5ICovCkBAIC0zOTIsNyArMzkyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKCIlc1xuIiwgYmFubmVyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgYmFubmVyKTsKIAogI2lmIGRlZmluZWQgQ09ORklHX1BOUAogCWlmIChpc2FwbnApIHsKQEAgLTQ3Nyw2ICs0NzcsNyBAQAogbW9kdWxlX2V4aXQoc2MxMjAwd2R0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IHdhdGNoZG9nIGNvbXBvbmVudCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKAorCSJEcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IHdhdGNoZG9nIGNvbXBvbmVudCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKaW5kZXggYTJiNmMxMC4uNTJiNjNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCUFNRCBFbGFuIFNDNTIwIHByb2Nlc3NvciBXYXRjaGRvZyBUaW1lciBkcml2ZXIKICAqCi0gKiAgICAgIEJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCwKLSAqICAgICAgICAgICBhbmQgc2JjNjB4eHdkdC5jIGJ5IEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkB1bnRob3VnaHQubmV0PgorICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294LAorICoJICAgICBhbmQgc2JjNjB4eHdkdC5jIGJ5IEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkB1bnRob3VnaHQubmV0PgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICoJVGhlIGF1dGhvcnMgZG8gTk9UIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZSB3YXJyYW50eSBmb3IKICAqCWFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkICJBUy1JUyIgaW4KLSAqICAgICAgdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCisgKgl0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDEgICAgU2NvdHQgSmVubmluZ3MgPGxpbnV4ZHJpdmVyc0Bvcm8ubmV0PgogICogICAgICAgICAgIDkvMjcgLSAyMDAxICAgICAgW0luaXRpYWwgcmVsZWFzZV0KQEAgLTQzOCw2ICs0MzgsNyBAQAogbW9kdWxlX2V4aXQoc2M1MjBfd2R0X3VubG9hZCk7CiAKIE1PRFVMRV9BVVRIT1IoIlNjb3R0IGFuZCBCaWxsIEplbm5pbmdzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3Igd2F0Y2hkb2cgdGltZXIgaW4gQU1EIFwiRWxhblwiIFNDNTIwIHVQcm9jZXNzb3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigKKwkiRHJpdmVyIGZvciB3YXRjaGRvZyB0aW1lciBpbiBBTUQgXCJFbGFuXCIgU0M1MjAgdVByb2Nlc3NvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCmluZGV4IDJlNTZjYWQuLjhhMWYwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKQEAgLTIsNyArMiw3IEBACiAgKglTTXNDIDM3Qjc4NyBXYXRjaGRvZyBUaW1lciBkcml2ZXIgZm9yIExpbnV4IDIuNi54LngKICAqCiAgKglCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KLSAqICAgICAgIGFuZCBzb21lIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMKKyAqCWFuZCBzb21lIG90aGVyIGV4aXN0aW5nIGRyaXZlcnMKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqCVRoZSBhdXRob3JzIGRvIE5PVCBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUgd2FycmFudHkgZm9yCiAgKglhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZCAiQVMtSVMiIGluCi0gKiAgICAgIHRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgorICoJdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCiAgKgogICoJKEMpIENvcHlyaWdodCAyMDAzLTIwMDYgIFN2ZW4gQW5kZXJzIDxhbmRlcnNAYW5kdXJhcy5kZT4KICAqCkBAIC0yMiwxOSArMjIsMTkgQEAKICAqCiAgKiAgVGhlb3J5IG9mIG9wZXJhdGlvbjoKICAqCi0gKiAgICAgIEEgV2F0Y2hkb2cgVGltZXIgKFdEVCkgaXMgYSBoYXJkd2FyZSBjaXJjdWl0IHRoYXQgY2FuCi0gKiAgICAgIHJlc2V0IHRoZSBjb21wdXRlciBzeXN0ZW0gaW4gY2FzZSBvZiBhIHNvZnR3YXJlIGZhdWx0LgotICogICAgICBZb3UgcHJvYmFibHkga25ldyB0aGF0IGFscmVhZHkuCisgKglBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbgorICoJcmVzZXQgdGhlIGNvbXB1dGVyIHN5c3RlbSBpbiBjYXNlIG9mIGEgc29mdHdhcmUgZmF1bHQuCisgKglZb3UgcHJvYmFibHkga25ldyB0aGF0IGFscmVhZHkuCiAgKgotICogICAgICBVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIFdEVCBkcml2ZXIKLSAqICAgICAgdmlhIHRoZSAvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMKLSAqICAgICAgc3RpbGwgYWxpdmUsIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLiAgV2hlbiBzdWNoIGEgbm90aWZpY2F0aW9uCi0gKiAgICAgIG9jY3VycywgdGhlIGRyaXZlciB3aWxsIHVzdWFsbHkgdGVsbCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cKLSAqICAgICAgdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLCBhbmQgdGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQKLSAqICAgICAgZm9yIHlldCBhbm90aGVyIGxpdHRsZSB3aGlsZSB0byByZXNldCB0aGUgc3lzdGVtLgotICogICAgICBJZiB1c2Vyc3BhY2UgZmFpbHMgKFJBTSBlcnJvciwga2VybmVsIGJ1Zywgd2hhdGV2ZXIpLCB0aGUKLSAqICAgICAgbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsCi0gKiAgICAgIHJlc2V0IHRoZSBzeXN0ZW0gKGNhdXNpbmcgYSByZWJvb3QpIGFmdGVyIHRoZSB0aW1lb3V0IG9jY3Vycy4KKyAqCVVzdWFsbHkgYSB1c2Vyc3BhY2UgZGFlbW9uIHdpbGwgbm90aWZ5IHRoZSBrZXJuZWwgV0RUIGRyaXZlcgorICoJdmlhIHRoZSAvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMKKyAqCXN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbgorICoJb2NjdXJzLCB0aGUgZHJpdmVyIHdpbGwgdXN1YWxseSB0ZWxsIHRoZSBoYXJkd2FyZSB3YXRjaGRvZworICoJdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLCBhbmQgdGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQKKyAqCWZvciB5ZXQgYW5vdGhlciBsaXR0bGUgd2hpbGUgdG8gcmVzZXQgdGhlIHN5c3RlbS4KKyAqCUlmIHVzZXJzcGFjZSBmYWlscyAoUkFNIGVycm9yLCBrZXJuZWwgYnVnLCB3aGF0ZXZlciksIHRoZQorICoJbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsCisgKglyZXNldCB0aGUgc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCiAgKgogICogQ3JlYXRlIGRldmljZSB3aXRoOgogICogIG1rbm9kIC9kZXYvd2F0Y2hkb2cgYyAxMCAxMzAKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKIAkJbmV3X3RpbWVvdXQgPSB0aW1lb3V0OwogCQlpZiAodW5pdCA9PSBVTklUX01JTlVURSkKLQkJCSAgbmV3X3RpbWVvdXQgKj0gNjA7CisJCQluZXdfdGltZW91dCAqPSA2MDsKIAkJcmV0dXJuIHB1dF91c2VyKG5ld190aW1lb3V0LCB1YXJnLmkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYwppbmRleCA3MjA0Zjk2Li5lYmNjOWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NvZnRkb2cuYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKglTb2Z0RG9nCTAuMDc6CUEgU29mdHdhcmUgV2F0Y2hkb2cgRGV2aWNlCiAgKgotICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAorICoJCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzIsNyArMzMsNyBAQAogICoJQWRkZWQgV0RJT0NfR0VUVElNRU9VVCBhbmQgV0RJT0NfU0VUVElNT1VULgogICoKICAqICAyMDAyMDUzMCBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqICAJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgorICoJQWRkZWQgTWF0dCBEb21zY2gncyBub3dheW91dCBtb2R1bGUgb3B0aW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCmluZGV4IDNjN2FhNDEuLmE5YzdmMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYwpAQCAtNDYyLDYgKzQ2Miw3IEBACiBtb2R1bGVfZXhpdCh3ZHRfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIk1hcmN1cyBKdW5rZXIgPGp1bmtlckBhbmR1cmFzLmRlPiwgIgorCQkiU2FtdWVsIFRhcmRpZXUgPHNhbUByZmMxMTQ5Lm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigidzgzNjk3aGYvaGcgV0RUIGRyaXZlciIpOwogTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKaW5kZXggYWRhOGFkOC4uODgzYjVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCkBAIC0yLDcgKzIsNyBAQAogICoJdzgzNjk3dWcvdWYgV0RUIGRyaXZlcgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwOCBGbGVtbWluZyBGcmFuc2VuIDxmZkBucnZpc3NpbmcubmV0PgotICogICAgICAgICAgICAgIHJldXNlZCBvcmlnaW5hbCBjb2RlIHRvIHN1cG9wcnQgdzgzNjk3dWcvdWYuCisgKgkJcmV1c2VkIG9yaWdpbmFsIGNvZGUgdG8gc3VwcG9ydCB3ODM2OTd1Zy91Zi4KICAqCiAgKglCYXNlZCBvbiB3ODM2MjdoZl93ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYwogICoJd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCkBAIC03OSw3ICs3OSw3IEBACiAJCQkJCQkJKHNhbWUgYXMgRUZFUikgKi8KICNkZWZpbmUgV0RUX0VGRFIgKFdEVF9FRklSKzEpIC8qIEV4dGVuZGVkIEZ1bmN0aW9uIERhdGEgUmVnaXN0ZXIgKi8KIAotc3RhdGljIHZvaWQgdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCitzdGF0aWMgaW50IHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBjaGFyIHZlcnNpb247CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIFc4MzY5N1VHL1VGIGNvdWxkIGJlIGZvdW5kXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlvdXRiX3AoMHgwNywgV0RUX0VGRVIpOyAvKiBwb2ludCB0byBsb2dpY2FsIGRldmljZSBudW1iZXIgcmVnICovCkBAIC0xMTAsNiArMTEwLDggQEAKIAlvdXRiX3AoMHgzMCwgV0RUX0VGRVIpOyAvKiBzZWxlY3QgQ1IzMCAqLwogCWMgPSBpbmJfcChXRFRfRUZEUik7CiAJb3V0Yl9wKGMgfHwgMHgwMSwgV0RUX0VGRFIpOyAvKiBzZXQgYml0IDAgdG8gYWN0aXZhdGUgR1BJTzIgKi8KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3ODM2OTd1Z191bnNlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQpAQCAtMTE3LDExICsxMTksMTQgQEAKIAlvdXRiX3AoMHhBQSwgV0RUX0VGRVIpOyAvKiBMZWF2ZSBleHRlbmRlZCBmdW5jdGlvbiBtb2RlICovCiB9CiAKLXN0YXRpYyB2b2lkIHc4MzY5N3VnX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgdzgzNjk3dWdfaW5pdCh2b2lkKQogeworCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciB0OwogCi0JdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJcmV0ID0gdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OwogCiAJb3V0Yl9wKDB4RjYsIFdEVF9FRkVSKTsgLyogU2VsZWN0IENSRjYgKi8KIAl0ID0gaW5iX3AoV0RUX0VGRFIpOyAgICAvKiByZWFkIENSRjYgKi8KQEAgLTEzNywxMyArMTQyLDE1IEBACiAJb3V0Yl9wKHQsIFdEVF9FRkRSKTsgICAgLyogV3JpdGUgYmFjayB0byBDUkY1ICovCiAKIAl3ODM2OTd1Z191bnNlbGVjdF93ZF9yZWdpc3RlcigpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3ZHRfY3RybChpbnQgdGltZW91dCkKIHsKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCi0JdzgzNjk3dWdfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CisJaWYgKHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpIDwgMCkKKwkJcmV0dXJuOwogCiAJb3V0Yl9wKDB4RjQsIFdEVF9FRkVSKTsgICAgLyogU2VsZWN0IENSRjQgKi8KIAlvdXRiX3AodGltZW91dCwgV0RUX0VGRFIpOyAvKiBXcml0ZSBUaW1lb3V0IGNvdW50ZXIgdG8gQ1JGNCAqLwpAQCAtMzQ3LDcgKzM1NCw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXc4MzY5N3VnX2luaXQoKTsKKwlyZXQgPSB3ODM2OTd1Z19pbml0KCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIHVucmVnX3JlZ2lvbnM7CiAKIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiAJaWYgKHJldCAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKaW5kZXggMjUyNWRhNS4uMDU2MDE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAod2R0X3NldF90aW1lb3V0KG5ld190aW1lb3V0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJd2R0X2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oIGIvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaAppbmRleCBkYjM0ODUzLi4wZTNhNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmgKQEAgLTExLDkgKzExLDkgQEAKICAqCiAgKglodHRwOi8vd3d3LmN5bXJ1Lm5ldAogICoKLSAqCVRoaXMgZHJpdmVyIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkCi0gKgloZXJlaW4gYnkgcmVmZXJlbmNlLiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIHdpdGhvdXQgd2FycmFudHkgb3IKLSAqCXN1cHBvcnQuCisgKglUaGlzIGRyaXZlciBpcyBwcm92aWRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKglpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4gVGhlIGRyaXZlciBpcyBwcm92aWRlZCB3aXRob3V0CisgKgl3YXJyYW50eSBvciBzdXBwb3J0LgogICoKICAqCVJlbGVhc2UgMC4wNC4KICAqCkBAIC0zOSwxMyArMzksMTMgQEAKIC8qIHByb2dyYW1tYWJsZSBvdXRwdXRzOiAqLwogI2RlZmluZSBXRFRfUFJPR09VVAkJKGlvKzE1KQkvKiB3cj1lbmFibGUsIHJkPWRpc2FibGUgKi8KIAotCQkJCQkJCQkvKiBGQU4gNTAxIDUwMCAqLwotI2RlZmluZSBXRENfU1JfV0NDUgkJMQkvKiBBY3RpdmUgbG93ICovCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9UR09PRAkJMgkJCQkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfSVNPSTAJCTQJCQkJLyogIFggICBYICAgWCAgKi8KLSNkZWZpbmUgV0RDX1NSX0lTSUkxCQk4CQkJCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9GQU5HT09ECQkxNgkJCQkvKiAgWCAgIC0gICAtICAqLwotI2RlZmluZSBXRENfU1JfUFNVT1ZFUgkJMzIJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfUFNVVU5EUgkJNjQJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICAtICAqLwotI2RlZmluZSBXRENfU1JfSVJRCQkxMjgJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICBYICAqLworCQkJCQkJCSAvKiBGQU4gNTAxIDUwMCAqLworI2RlZmluZSBXRENfU1JfV0NDUgkJMQkvKiBBY3RpdmUgbG93ICovIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9UR09PRAkJMgkJCSAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfSVNPSTAJCTQJCQkgLyogIFggICBYICAgWCAgKi8KKyNkZWZpbmUgV0RDX1NSX0lTSUkxCQk4CQkJIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9GQU5HT09ECQkxNgkJCSAvKiAgWCAgIC0gICAtICAqLworI2RlZmluZSBXRENfU1JfUFNVT1ZFUgkJMzIJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfUFNVVU5EUgkJNjQJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICAtICAqLworI2RlZmluZSBXRENfU1JfSVJRCQkxMjgJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICBYICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHQuYwppbmRleCBlZGRiOTE4Li4zYmJlZmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICoJSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UgV0RUNTAwLzUwMSBkcml2ZXIKKyAqCUluZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlIFdEVDUwMSBkcml2ZXIKICAqCiAgKgkoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKICAqCQkJCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZC4KQEAgLTgyLDE0ICs4MiwxNiBAQAogbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiV0RUIGlycSAoZGVmYXVsdD0xMSkiKTsKIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKiBTdXBwb3J0IGZvciB0aGUgRmFuIFRhY2hvbWV0ZXIgb24gdGhlIFdEVDUwMS1QICovCiBzdGF0aWMgaW50IHRhY2hvbWV0ZXI7Ci0KIG1vZHVsZV9wYXJhbSh0YWNob21ldGVyLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0YWNob21ldGVyLAogCQkiV0RUNTAxLVAgRmFuIFRhY2hvbWV0ZXIgc3VwcG9ydCAoMD1kaXNhYmxlLCBkZWZhdWx0PTApIik7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKworc3RhdGljIGludCB0eXBlID0gNTAwOworbW9kdWxlX3BhcmFtKHR5cGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHR5cGUsCisJCSJXRFQ1MDEtUCBDYXJkIHR5cGUgKDUwMCBvciA1MDEgLCBkZWZhdWx0PTUwMCkiKTsKIAogLyoKICAqCVByb2dyYW1taW5nIHN1cHBvcnQKQEAgLTE1OCw3ICsxNjAsNyBAQAogICoJcmVsb2FkaW5nIHRoZSBjYXNjYWRlIGNvdW50ZXIuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfcGluZyh2b2lkKQorc3RhdGljIHZvaWQgd2R0X3Bpbmcodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwpAQCAtMTY5LDcgKzE3MSw2IEBACiAJd2R0X2N0cl9sb2FkKDEsIHdkX2hlYXJ0YmVhdCk7CS8qIEhlYXJ0YmVhdCAqLwogCW91dGJfcCgwLCBXRFRfREMpOwkJLyogRW5hYmxlIHdhdGNoZG9nICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xOTMsNyArMTk0LDYgQEAKIAogLyoqCiAgKgl3ZHRfZ2V0X3N0YXR1czoKLSAqCUBzdGF0dXM6CQl0aGUgbmV3IHN0YXR1cy4KICAqCiAgKglFeHRyYWN0IHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSBhIFdEVCB3YXRjaGRvZyBkZXZpY2UuIFRoZXJlIGFyZQogICoJc2V2ZXJhbCBib2FyZCB2YXJpYW50cyBzbyB3ZSBoYXZlIHRvIGtub3cgd2hpY2ggYml0cyBhcmUgdmFsaWQuIFNvbWUKQEAgLTIwMiwzNiArMjAyLDM1IEBACiAgKgl3ZSB0aGVuIG1hcCB0aGUgYml0cyBvbnRvIHRoZSBzdGF0dXMgaW9jdGwgZmxhZ3MuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfZ2V0X3N0YXR1cyhpbnQgKnN0YXR1cykKK3N0YXRpYyBpbnQgd2R0X2dldF9zdGF0dXModm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIG5ld19zdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCW5ld19zdGF0dXMgPSBpbmJfcChXRFRfU1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7CiAKLQkqc3RhdHVzID0gMDsKIAlpZiAobmV3X3N0YXR1cyAmIFdEQ19TUl9JU09JMCkKLQkJKnN0YXR1cyB8PSBXRElPRl9FWFRFUk4xOworCQlzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMTsKIAlpZiAobmV3X3N0YXR1cyAmIFdEQ19TUl9JU0lJMSkKLQkJKnN0YXR1cyB8PSBXRElPRl9FWFRFUk4yOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9UR09PRCkpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7Ci0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VPVkVSKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9QT1dFUk9WRVI7Ci0JaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKLQkJKnN0YXR1cyB8PSBXRElPRl9QT1dFUlVOREVSOwotCWlmICh0YWNob21ldGVyKSB7Ci0JCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCi0JCQkqc3RhdHVzIHw9IFdESU9GX0ZBTkZBVUxUOworCQlzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMjsKKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9UR09PRCkpCisJCQlzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7CisJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCisJCQlzdGF0dXMgfD0gV0RJT0ZfUE9XRVJPVkVSOworCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQorCQkJc3RhdHVzIHw9IFdESU9GX1BPV0VSVU5ERVI7CisJCWlmICh0YWNob21ldGVyKSB7CisJCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQorCQkJCXN0YXR1cyB8PSBXRElPRl9GQU5GQVVMVDsKKwkJfQogCX0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyoqCiAgKgl3ZHRfZ2V0X3RlbXBlcmF0dXJlOgogICoKQEAgLTIzOSw3ICsyMzgsNyBAQAogICoJZmFyZW5oZWl0LiBJdCB3YXMgZGVzaWduZWQgYnkgYW4gaW1wZXJpYWwgbWVhc3VyZW1lbnQgbHVkZGl0ZS4KICAqLwogCi1zdGF0aWMgaW50IHdkdF9nZXRfdGVtcGVyYXR1cmUoaW50ICp0ZW1wZXJhdHVyZSkKK3N0YXRpYyBpbnQgd2R0X2dldF90ZW1wZXJhdHVyZSh2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI0NywxMCArMjQ2LDE4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJndkdF9sb2NrLCBmbGFncyk7CiAJYyA9IGluYl9wKFdEVF9SVCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKLQkqdGVtcGVyYXR1cmUgPSAoYyAqIDExIC8gMTUpICsgNzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKGMgKiAxMSAvIDE1KSArIDc7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKworc3RhdGljIHZvaWQgd2R0X2RlY29kZV81MDEoaW50IHN0YXR1cykKK3sKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfVEdPT0QpKQorCQlwcmludGsoS0VSTl9DUklUICJPdmVyaGVhdCBhbGFybS4oJWQpXG4iLCBpbmJfcChXRFRfUlQpKTsKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCisJCXByaW50ayhLRVJOX0NSSVQgIlBTVSBvdmVyIHZvbHRhZ2UuXG4iKTsKKwlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCisJCXByaW50ayhLRVJOX0NSSVQgIlBTVSB1bmRlciB2b2x0YWdlLlxuIik7Cit9CiAKIC8qKgogICoJd2R0X2ludGVycnVwdDoKQEAgLTI3NSwxOCArMjgyLDEzIEBACiAKIAlwcmludGsoS0VSTl9DUklUICJXRFQgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfVEdPT0QpKQotCQlwcmludGsoS0VSTl9DUklUICJPdmVyaGVhdCBhbGFybS4oJWQpXG4iLCBpbmJfcChXRFRfUlQpKTsKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCi0JCXByaW50ayhLRVJOX0NSSVQgIlBTVSBvdmVyIHZvbHRhZ2UuXG4iKTsKLQlpZiAoIShzdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCi0JCXByaW50ayhLRVJOX0NSSVQgIlBTVSB1bmRlciB2b2x0YWdlLlxuIik7Ci0JaWYgKHRhY2hvbWV0ZXIpIHsKLQkJaWYgKCEoc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUG9zc2libGUgZmFuIGZhdWx0LlxuIik7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCXdkdF9kZWNvZGVfNTAxKHN0YXR1cyk7CisJCWlmICh0YWNob21ldGVyKSB7CisJCQlpZiAoIShzdGF0dXMgJiBXRENfU1JfRkFOR09PRCkpCisJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUG9zc2libGUgZmFuIGZhdWx0LlxuIik7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAlpZiAoIShzdGF0dXMgJiBXRENfU1JfV0NDUikpIHsKICNpZmRlZiBTT0ZUV0FSRV9SRUJPT1QKICNpZmRlZiBPTkxZX1RFU1RJTkcKQEAgLTM2NiwxNyArMzY4LDE4IEBACiAKIAkvKiBBZGQgb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGNhcmQgd2UgaGF2ZSAqLwogCWlkZW50Lm9wdGlvbnMgfD0gKFdESU9GX0VYVEVSTjF8V0RJT0ZfRVhURVJOMik7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlpZGVudC5vcHRpb25zIHw9IChXRElPRl9PVkVSSEVBVHxXRElPRl9QT1dFUlVOREVSfFdESU9GX1BPV0VST1ZFUik7Ci0JaWYgKHRhY2hvbWV0ZXIpCi0JCWlkZW50Lm9wdGlvbnMgfD0gV0RJT0ZfRkFORkFVTFQ7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKwlpZiAodHlwZSA9PSA1MDEpIHsKKwkJaWRlbnQub3B0aW9ucyB8PSAoV0RJT0ZfT1ZFUkhFQVR8V0RJT0ZfUE9XRVJVTkRFUnwKKwkJCQkJCQlXRElPRl9QT1dFUk9WRVIpOworCQlpZiAodGFjaG9tZXRlcikKKwkJCWlkZW50Lm9wdGlvbnMgfD0gV0RJT0ZfRkFORkFVTFQ7CisJfQogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LCBzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOwogCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgotCQl3ZHRfZ2V0X3N0YXR1cygmc3RhdHVzKTsKKwkJc3RhdHVzID0gd2R0X2dldF9zdGF0dXMoKTsKIAkJcmV0dXJuIHB1dF91c2VyKHN0YXR1cywgcCk7CiAJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgogCQlyZXR1cm4gcHV0X3VzZXIoMCwgcCk7CkBAIC00NDYsNyArNDQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCiAvKioKICAqCXdkdF90ZW1wX3JlYWQ6CiAgKglAZmlsZTogZmlsZSBoYW5kbGUgdG8gdGhlIHdhdGNoZG9nIGJvYXJkCkBAIC00NjEsMTAgKzQ2Myw3IEBACiBzdGF0aWMgc3NpemVfdCB3ZHRfdGVtcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnB0cikKIHsKLQlpbnQgdGVtcGVyYXR1cmU7Ci0KLQlpZiAod2R0X2dldF90ZW1wZXJhdHVyZSgmdGVtcGVyYXR1cmUpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlpbnQgdGVtcGVyYXR1cmUgPSB3ZHRfZ2V0X3RlbXBlcmF0dXJlKCk7CiAKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgJnRlbXBlcmF0dXJlLCAxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00OTcsNyArNDk2LDYgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCiAvKioKICAqCW5vdGlmeV9zeXM6CkBAIC01MzksNyArNTM3LDYgQEAKIAkuZm9wcwk9ICZ3ZHRfZm9wcywKIH07CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2R0X3RlbXBfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCkBAIC01NTMsNyArNTUwLDYgQEAKIAkubmFtZQk9ICJ0ZW1wZXJhdHVyZSIsCiAJLmZvcHMJPSAmd2R0X3RlbXBfZm9wcywKIH07Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogLyoKICAqCVRoZSBXRFQgY2FyZCBuZWVkcyB0byBsZWFybiBhYm91dCBzb2Z0IHNodXRkb3ducyBpbiBvcmRlciB0bwpAQCAtNTc3LDkgKzU3Myw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLworCWlmICh0eXBlID09IDUwMSkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogCWZyZWVfaXJxKGlycSwgTlVMTCk7CiAJcmVsZWFzZV9yZWdpb24oaW8sIDgpOwpAQCAtNTk3LDEyICs1OTIsMTcgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKHR5cGUgIT0gNTAwICYmIHR5cGUgIT0gNTAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2R0OiB1bmtub3duIGNhcmQgdHlwZSAnJWQnLlxuIiwgdHlwZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZTsKIAkgICBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAod2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkgewogCQl3ZHRfc2V0X2hlYXJ0YmVhdChXRF9USU1PKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwIDwgaGVhcnRiZWF0IDwgNjU1MzYsIHVzaW5nICVkXG4iLAotCQkJV0RfVElNTyk7CisJCXByaW50ayhLRVJOX0lORk8gIndkdDogaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgIgorCQkJIjAgPCBoZWFydGJlYXQgPCA2NTUzNiwgdXNpbmcgJWRcbiIsIFdEX1RJTU8pOwogCX0KIAogCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDgsICJ3ZHQ1MDFwIikpIHsKQEAgLTYyNSwxNSArNjI1LDE0IEBACiAJCWdvdG8gb3V0aXJxOwogCX0KIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JcmV0ID0gbWlzY19yZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIndkdDogY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCi0JCQkJCQkJVEVNUF9NSU5PUiwgcmV0KTsKLQkJZ290byBvdXRyYnQ7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2R0OiBjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiAiCisJCQkJIm9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLCBURU1QX01JTk9SLCByZXQpOworCQkJZ290byBvdXRyYnQ7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKIAlpZiAocmV0KSB7CkBAIC02NDMsMjggKzY0MiwyNSBAQAogCQlnb3RvIG91dG1pc2M7CiAJfQogCi0JcmV0ID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICJXRFQ1MDAvNTAxLVAgZHJpdmVyIDAuMTAgYXQgMHglMDR4IChJbnRlcnJ1cHQgJWQpLiBoZWFydGJlYXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiV0RUNTAwLzUwMS1QIGRyaXZlciAwLjEwICIKKwkJImF0IDB4JTA0eCAoSW50ZXJydXB0ICVkKS4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAogCQlpbywgaXJxLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCXByaW50ayhLRVJOX0lORk8gIndkdDogRmFuIFRhY2hvbWV0ZXIgaXMgJXNcbiIsCisJaWYgKHR5cGUgPT0gNTAxKQorCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IEZhbiBUYWNob21ldGVyIGlzICVzXG4iLAogCQkJCSh0YWNob21ldGVyID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIikpOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCi0KLW91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiBvdXRtaXNjOgotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOworCWlmICh0eXBlID09IDUwMSkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOwogb3V0cmJ0OgotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CiBvdXRpcnE6CiAJZnJlZV9pcnEoaXJxLCBOVUxMKTsKIG91dHJlZzoKIAlyZWxlYXNlX3JlZ2lvbihpbywgOCk7Ci0JZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogbW9kdWxlX2luaXQod2R0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKaW5kZXggNjBlMjhkNC4uOTBlZjcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICh3ZHQ5Nzdfc2V0X3RpbWVvdXQobmV3X3RpbWVvdXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl3ZHQ5Nzdfa2VlcGFsaXZlKCk7CiAJCS8qIEZhbGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvem9ycm8vem9ycm8uYyBiL2RyaXZlcnMvem9ycm8vem9ycm8uYwppbmRleCBhMTU4NWQ2Li5kNDVmYjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKKysrIGIvZHJpdmVycy96b3Jyby96b3Jyby5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFpvcnJvIGJ1cyAqLwogICAgIElOSVRfTElTVF9IRUFEKCZ6b3Jyb19idXMuZGV2aWNlcyk7Ci0gICAgc3RyY3B5KHpvcnJvX2J1cy5kZXYuYnVzX2lkLCAiem9ycm8iKTsKKyAgICBkZXZfc2V0X25hbWUoJnpvcnJvX2J1cy5kZXYsICJ6b3JybyIpOwogICAgIGVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZ6b3Jyb19idXMuZGV2KTsKICAgICBpZiAoZXJyb3IpIHsKIAlwcl9lcnIoIlpvcnJvOiBFcnJvciByZWdpc3RlcmluZyB6b3Jyb19idXNcbiIpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJaWYgKHJlcXVlc3RfcmVzb3VyY2Uoem9ycm9fZmluZF9wYXJlbnRfcmVzb3VyY2UoeiksICZ6LT5yZXNvdXJjZSkpCiAJICAgIHByX2VycigiWm9ycm86IEFkZHJlc3Mgc3BhY2UgY29sbGlzaW9uIG9uIGRldmljZSAlcyAlcFJcbiIsCiAJCSAgIHotPm5hbWUsICZ6LT5yZXNvdXJjZSk7Ci0Jc3ByaW50Zih6LT5kZXYuYnVzX2lkLCAiJTAyeCIsIGkpOworCWRldl9zZXRfbmFtZSgmei0+ZGV2LCAiJTAyeCIsIGkpOwogCXotPmRldi5wYXJlbnQgPSAmem9ycm9fYnVzLmRldjsKIAl6LT5kZXYuYnVzID0gJnpvcnJvX2J1c190eXBlOwogCWVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZ6LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvM2NvbS90eXBob29uLmJpbi5paGV4IGIvZmlybXdhcmUvM2NvbS90eXBob29uLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTgzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS8zY29tL3R5cGhvb24uYmluLmloZXgKQEAgLTAsMCArMSwyODE5IEBACis6MTAwMDAwMDA1NDU5NTA0ODRGNEY0RTAwMDIwMDAwMDAwOTAwMDAwMEI0Cis6MTAwMDEwMDAwMDAwRkZGRkNCOTlCMUQ0NENCOEQwNEIzMjAyRDRFRUU0Cis6MTAwMDIwMDA3MzdFMEIxMzlCQzBBRUY0NDAwMTAwMDBFOEZDMDAwMDlGCis6MTAwMDMwMDAwMDAwRkZGRjM5MDAwMEVBMDUwMDAwRUEwNDAwMDBFQUMyCis6MTAwMDQwMDAwMzAwMDBFQTAyMDAwMEVBMDEwMDAwRUEzMjAyMDBFQUNFCis6MTAwMDUwMDBDNTE0MDBFQTA3MDAyREU5MEUwMEEwRTEwMDEwMEZFMTMxCis6MTAwMDYwMDBEMDIwOUZFNTEyRkYyRkUxRkVGRkZGRUEwMTAwODBFMEI0Cis6MTAwMDcwMDAwNDIwODFFNDAxMDA1MEUxRkNGRkZGMUEwRUYwQTBFMTMyCis6MTAwMDgwMDAwMEEwQTBFMTBFQjBBMEUxMDAwMEEwRTNBODEwOUZFNTUxCis6MTAwMDkwMDAwMDAwODFFNUE0MTA5RkU1MDAwMDgxRTUwMTE2QTBFM0MyCis6MTAwMEEwMDAwMDAwOTFFNTAxMDA4MEUzMDAwMDgxRTVENzAwQTBFM0I2Cis6MTAwMEIwMDAwMEYwMjFFMTg4RDA5RkU1REIwMEEwRTMwMEYwMjFFMTIyCis6MTAwMEMwMDA3Q0QwOUZFNUQyMDBBMEUzMDBGMDIxRTE3NEQwOUZFNTUxCis6MTAwMEQwMDBEMTAwQTBFMzAwRjAyMUUxNkNEMDlGRTU5QjE0MDBFQjgwCis6MTAwMEUwMDBEMzAwQTBFMzAwRjAyMUUxNjBEMDlGRTU2MDAwOUZFNTMwCis6MTAwMEYwMDA2MDEwOUZFNTYwMjA5RkU1REJGRkZGRUI1QzAwOUZFNTY0Cis6MTAwMTAwMDA1QzEwOUZFNTAwMjBBMEUzRDdGRkZGRUI1NDAwOUZFNUM0Cis6MTAwMTEwMDA1NDEwOUZFNUQ0RkZGRkVCMEEwMEEwRTEwQkYwQTBFMTMzCis6MTAwMTIwMDBEMzEwQTBFMzAxRjAyMUUxRDRGRkZGRUIzQ0EwOUZFNTU5Cis6MTAwMTMwMDAxQUZGMkZFMUM2RkZGRkVBMTUyMUZGRkYwQzAwMTAwMDk4Cis6MTAwMTQwMDAxQzAwMTAwMDNDMzgwMDgwRkMzNzAwODBGQzNGMDA4MDIxCis6MTAwMTUwMDA3QzM0MDA4MDgwMEYwMDAwODAzMDAwODBBRERFQURERTlBCis6MTAwMTYwMDBCMEJCMDAwMDI0QUIyMDQwNDgyOTAwMDAyODA1MDA4MEQ3Cis6MTAwMTcwMDBCREJBMjE0MDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEE5Cis6MTAwMTgwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDA1ODU3MDAwMEMyCis6MTAwMTkwMDA4NjRCMDAwMDYwMDFGRkZGQjBCNTA3MUMxMjREMDAyNDI0Cis6MTAwMUEwMDAyODY4MDAyODFFRDAzODFDMTA0OTA0RjA3QkZEMjk2OEZGCis6MTAwMUIwMDBDMDQ2MDg2MDAwMjgxNUQwMzgwMTBENDk0MDE4MTkyM0ExCis6MTAwMUMwMDBEQjAxQzAxODQxNkI4MDI5MENEMjAxMzE0MTYzMjg2OEUyCis6MTAwMUQwMDBDMTY5QzA0NjI5NjAzOTA3NDE2MDA0NjJDNzYyQjBCQzhBCis6MTAwMUUwMDAwOEJDMTg0NzIwMUNGQUU3RTgxNzAwODBFRTA1MDAwMDVECis6MTAwMUYwMDBBMDFDMDA4MDAyNDkwQTY4QzA0NkMyNjEwODYwNzA0N0JFCis6MTAwMjAwMDBFODE3MDA4MDcwNDcwMDAwNzA0NzAwMDA3MDQ3MDAwMDRBCis6MTAwMjEwMDAwMDAwMEZFMTAwMTBBMEUxQzAxMDgxRTMwMUYwMjFFMTM2Cis6MTAwMjIwMDAxRUZGMkZFMTAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMTkyCis6MTAwMjMwMDBDMDAwODBFMzAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMThDCis6MTAwMjQwMDBDMDAwQzBFMzAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMTNDCis6MTAwMjUwMDA0MDAwODBFMzAwRjAyMUUxMUVGRjJGRTEwMDAwMEZFMUVDCis6MTAwMjYwMDA4MDAwMTBFMzgwMDA4MEUzMDBGMDIxRTEwMDAwMDAxMjM0Cis6MTAwMjcwMDAxRUZGMkZFMTAwMDA1MEUzMDAwMDBGRTE4MDAwQzAxM0RCCis6MTAwMjgwMDAwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTE4MDAwQzBFMzNDCis6MTAwMjkwMDAwMEYwMjFFMTFFRkYyRkUxOTEwMDAwRTAxRUZGMkZFMUExCis6MTAwMkEwMDAwMTIwODBFMDAxMDA4MEUwMUVGRjJGRTE4MEI1MDg0RkIzCis6MTAwMkIwMDA2NDI4MDREMzY0MjAzODYzMDAyMEMwNDMwM0UwMzg2MzFCCis6MTAwMkMwMDAwNDQ5MDVGMDAxRkI3ODYzQjg2MzgwQkMwOEJDMTg0NzlCCis6MTAwMkQwMDA2ODBFMDA4MDg4MTMwMDAwODBCNDEwNEIwMDIyMUY2QjUyCis6MTAwMkUwMDA2NDJGMDNEMjA5NjgwOTY4NDkwODAyRDIxMDFDODBCQzM3Cis6MTAwMkYwMDA3MDQ3MTkxQ0RCNkI0RjZCQkI0MjA1RDI0MDY4MDAwNDkyCis6MTAwMzAwMDAwMDBDMTgxOEM4NjNGMUU3NDE2ODA1NEIxOTQzNDE2MEI4Cis6MTAwMzEwMDAwNDQ4QzE2QjAxMzFDMTYzMDIyMEU4RTc2ODBFMDA4MDI4Cis6MTAwMzIwMDAwMDAwMDA4MDBDMkIwMDgwOTBCNTA3MUMxNTRDMDAyMEFECis6MTAwMzMwMDAyMTZCNjQyOTBCRDJCOTZFNDkwODA4RDMyMTZDQTI2QkRBCis6MTAwMzQwMDA5MTQyMDdEMkZBMUQzOTMyNTI4Qjg5MTgyMTY0OTBCQzMwCis6MTAwMzUwMDAwOEJDMTg0Nzc4NkEzOTZCQzA0NjQ4NjIzODZCMDJGMEFGCis6MTAwMzYwMDAyREZFMzgxQzAyRjBFOEZBMDEyMEJCMjMxQjAxRTExODI2Cis6MTAwMzcwMDBDODczMDU0OTBBNkMxMjE4MEE2NDA0NDk4QTZEMTIxODc4Cis6MTAwMzgwMDA4QTY1RTRFNzY4MEUwMDgwMEMyQjAwODBBNDJBMDA4MEI4Cis6MTAwMzkwMDA4MEI0MEE0OEMwNkQwMjIzMTg0MDA5NEEwMDIxMDAyODkxCis6MTAwM0EwMDAwM0QwRDE2MzExNjQ4MEJDNzA0NzA2NDgwNzY4N0IxQzhBCis6MTAwM0IwMDAwMzYwMEEyRkY3RDMwMTYwRjNFNzAwMDBBNDJBMDA4MDRFCis6MTAwM0MwMDA2ODBFMDA4MEUwMDEwMDgwNzA0NzAyMDQxMjBDMDAwQ0VGCis6MTAwM0QwMDAxMDE4MEEwNDEyMEMwOTBDNTExODA4MTgwMTBDMDVEMDQ5Cis6MTAwM0UwMDAwMTA0MDkwQzAwMEMwODE4MDEwQ0Y5RDEwMDA0MDAwQ0UwCis6MTAwM0YwMDA3MDQ3ODBCNDAwMjIwMDI5MThEMDRGMDg3QjFFMDAyRkMwCis6MTAwNDAwMDAwNkQwMDc4OEJBMTgwMjMwMUYxQzAxM0IwMDJGRjhEMTE0Cis6MTAwNDEwMDA0OTA4MDNEMzAwODgwMDA2MDAwRTgyMTgxMDBDMDVEMDhFCis6MTAwNDIwMDAxMDA0MDAwQzExMEM0MjE4MTAwQ0Y5RDExMDA0MDAwQzJGCis6MTAwNDMwMDA4MEJDNzA0NzgwQjU4Mzg5Qzc4OUZCMTgwNzhBRkIxODgxCis6MTAwNDQwMDA0NzhBRkIxODQwN0EwMDAyQzcxODM4MEMwNUQwMzgwNEQ4Cis6MTAwNDUwMDAwMDBDM0IwQ0M3MTgzODBDRjlEMTA4MUMxMTFDRkZGNzE1Cis6MTAwNDYwMDBDOEZGMDExQzM4MUNGRkY3QjBGRjgwQkMwOEJDMTg0NzUwCis6MTAwNDcwMDA5MEI1MDIyMzgyNjgxQTQwMDAyNzAwMkEwRkQwMEE0QTRBCis6MTAwNDgwMDA5MzY5MDEzMzkzNjEwQTY4OEI2ODlBMTgwMDY4MUMxODk1Cis6MTAwNDkwMDA1NzgxMDk2OTEwMUNGRkY3QUNGRkMwNDM2MDgxMzgxQzBECis6MTAwNEEwMDA5MEJDMDhCQzE4NDcwMDAwMEMyQjAwODA5MEI1MDQyM0JBCis6MTAwNEIwMDA4MjY4MUE0MDAwMjcwMDJBMTFEMDRBNjg1MjA5MEVEM0Q4Cis6MTAwNEMwMDAwOTRBMTM2QTAxMzMxMzYyQ0I2ODAyNjg5QzE4MDEyMzNFCis6MTAwNEQwMDA5QjA3MDgzQTFBNDMxMjY4MDBGMDJFRjgyMDgyMzgxQzU1Cis6MTAwNEUwMDA5MEJDMDhCQzE4NDcwMDAwMEMyQjAwODA5MEI1ODAyM0ZFCis6MTAwNEYwMDA4MjY4MUE0MDAwMjQwMDJBMTVEMDRBNjg5MjA5MTJEMzUzCis6MTAwNTAwMDAwQjRBRDM2OTAxMzNEMzYxQ0I2ODAyNjg5RjE4MDEyMzdBCis6MTAwNTEwMDA5QjA3MDgzQTFBNDMxMjY4MDBGMDBFRjgwMDI4MDBEMTMxCis6MTAwNTIwMDAwNDQ4QzA0NkY4ODAyMDFDOTBCQzA4QkMxODQ3MDAwMDU2Cis6MTAwNTMwMDAwQzJCMDA4MEZGRkYwMDAwQjBCNTE0MUMwNTFDMEYxQzI1Cis6MTAwNTQwMDAzODY5Qjk2ODQxMTgzODY4RkZGNzUzRkZDMDQzMDEwNEEwCis6MTAwNTUwMDAwOTBDMjAxQ0ZGRjczOUZGMDQxQ0I4Njg3OTY5NDAxOEEyCis6MTAwNTYwMDA2OTY4ODg0MjBDRDIyQTY4MTIxODA5MUExMDFDMDBGMDE3Cis6MTAwNTcwMDAwNUY5QzA0MzAxMDQwOTBDMjAxQ0ZGRjcyNkZGMDQxQ0U5Cis6MTAwNTgwMDBFMDQzMDAwNDAwMENCMEJDMDhCQzE4NDc4MEI1MDcxQzUxCis6MTAwNTkwMDBCODZCQzAwODFBRDNCODZBRjk2QjQwMTg3OTZDMDBGMEQwCis6MTAwNUEwMDBFREY4QzA0MzAxMDQwOTBDMEE0ODA3RDAyMDIzQjk2OUJCCis6MTAwNUIwMDAxOTQzQjk2MTAxNkIwMTMxMDE2MzA3RTBGRjIzMDEzMzg2Cis6MTAwNUMwMDBCOTY5MTk0M0I5NjE0MTZBMDEzMTQxNjIwMDIwODBCQ0I3Cis6MTAwNUQwMDAwOEJDMTg0NzBDMkIwMDgwODBCNTA3MUNCODZCNDEwOTdDCis6MTAwNUUwMDAxQ0QzQzAwODFBRDNGODFEMzkzMDAwN0IwNjI4MTVEMTVBCis6MTAwNUYwMDAzODFDMDBGMDUzRjgwMTFDMEE0ODA3RDA0MDIzQjk2OUExCis6MTAwNjAwMDAxOTQzQjk2MTgxNkIwMTMxODE2MzA3RTAwMTIzOUIwMkNBCis6MTAwNjEwMDBCOTY5MTk0M0I5NjFDMTZBMDEzMUMxNjIwMDIwODBCQzY2Cis6MTAwNjIwMDAwOEJDMTg0NzBDMkIwMDgwQjBCNTA3MUNCODZCODEwOUJCCis6MTAwNjMwMDAyQ0QzQzAwODJBRDNGODFEMzkzMDAwN0IxMTI4MjVEMUNFCis6MTAwNjQwMDBCODZBMzk2QzQwMTgwMTIzOUIwNzA2MzAxODQzMDA2OENDCis6MTAwNjUwMDAwNTA0MkQwQzBGNEMxMUQwMzgxQzAwRjAxRkY4MDAyODk5Cis6MTAwNjYwMDAwQ0QwQTg0MjAyRDEwQzRCOTg0MjA3RDA4MDIzQjg2OTI1Cis6MTAwNjcwMDAxODQzQjg2MTYwNkIwMTMwNjA2MzA3RTAwMTIzNUIwMkRGCis6MTAwNjgwMDBCODY5MTg0M0I4NjFBMDZBMDEzMEEwNjIwMDIwQjBCQzBDCis6MTAwNjkwMDAwOEJDMTg0NzBDMkIwMDgwRkZGRjAwMDBGMEI1RkZCMDJFCis6MTAwNkEwMDA5OUIwMDQxQ0UwNkI2MTZDMDkxODAzQUE4NTE4QTM2QTUxCis6MTAwNkIwMDAwMDIwOEEwODAxMzI5NzkyMDdEMDgyMDA5RjU4MDNBRTJCCis6MTAwNkMwMDBCNzUwOTc5QTAxMzA4MjQyRjdEODYwNkEwMTIzOUIwNzlFCis6MTAwNkQwMDAwNDMwMTg0MzAwNjhDMDQ2MDI5MDAyQUYzRjg4MDNBODY4Cis6MTAwNkUwMDBGRkY3ODdGRUMwNDMwMTA0MDkwQzM4MUNGRkY3NkRGRUJECis6MTAwNkYwMDAwNzFDRTA2QkExNkM0MDE4NjE2QTAxMjM5QjA3MDgzMTVECis6MTAwNzAwMDAxOTQzMDk2OEMwNDYwMTkxMDFBOTA5ODgwMTMxODg0MjRECis6MTAwNzEwMDAwQ0QyQTI2QTEyMTgwOTFBMTAxQzAwRjAyRkY4QzA0MzVDCis6MTAwNzIwMDAwMTA0MDkwQzM4MUNGRkY3NTBGRTA3MUNBODg5RTk4OTUxCis6MTAwNzMwMDAwODE4Mjk4QTA4MTg2OThBMDgxODY5N0EwOTAyMDgxOEE1Cis6MTAwNzQwMDBBMTZDNjI2Qzg5MUEwQTA0MTIwQzExMDIxMjBBMTE0MzdDCis6MTAwNzUwMDAwOTA0MDkwQzA5MTgwODBDMDVEMDA4MDQwMDBDMDkwQzQwCis6MTAwNzYwMDA0MTE4MDgwQ0Y5RDEzODFDRkZGNzJGRkVDMDQzMDAwNEQ0Cis6MTAwNzcwMDAwMDBDN0ZCMDE5QjBGMEJDMDhCQzE4NDdCMEI0MDAyMjIwCis6MTAwNzgwMDAwMDI5MkVEMDgzMDc5QjBGREMwMDQ3MTgwNDI1RUYxQkEwCis6MTAwNzkwMDBCRjA3QkYwRkZGMDA4MDA4ODAwMDU5MTgwMzMxODkwODg4Cis6MTAwN0EwMDA0RDFFMDJDOEUxNDBBMTQwNkIxRTAwMkQwOUQwMEMwNDczCis6MTAwN0IwMDAyNDBDQTIxODA5MEM4QTE4MDJDODFDMUMwMTNCMDAyQzJFCis6MTAwN0MwMDBGNUQxQjk0MDA4MUNGODQwMDEwNDA5MEM4OTE4MDAwQzQ3Cis6MTAwN0QwMDA0MjE4MTAwQzA1RDAxMDA0MDAwQzExMEM0MjE4MTAwQzFCCis6MTAwN0UwMDBGOUQxMTAwNDAwMENCMEJDNzA0NzAwMDA5MEI0MDAyMDk4Cis6MTAwN0YwMDAwMTI3MTE0OTQyMDAxMjE4RDIwMDUzMTg5QzY4MDEyM0E2Cis6MTAwODAwMDA5QjA3MjM0MzFCNjgxQjAzMUIwQjhBNTgxMjAzMTIwQjA1Cis6MTAwODEwMDA5MzQyMENEMTAxMzAwNDI4RUNEMzA4NDhDMDZBMDEwMzhDCis6MTAwODIwMDAwOTBCMDc0ODAwNkYwMDAzMDAwQjgxNDIwMkQwMzgxQ0ZGCis6MTAwODMwMDA5MEJDNzA0NzAwMjBGQkU3QTgwMzAwODAwMDQwMTQ0MEY0Cis6MTAwODQwMDA2ODBFMDA4MDk4QjQxNDRBQzA0NjAwOTI4MzAwMTM0ODkyCis6MTAwODUwMDBDMDU4MDcwMzNGMEIxMjQ4QzA1ODAyMDMxMjBCMTE0ODNGCis6MTAwODYwMDBDMDU4MDAwMzAwMEIxMDRDRTQ1ODAxMjM5QjA3MjM0MzlFCis6MTAwODcwMDAxQjY4OUIwMENDMDAwMTIxOTg0MjAxRDEwODFDMDlFMEIzCis6MTAwODgwMDA5ODQyMDNEOTEwMUFEQTFCODAxODAwRTAxODFBODQ0MjIzCis6MTAwODkwMDBGNEQzMDAyMDk4QkM3MDQ3NTU1NTU1NTUyMDA0MDA4MDZFCis6MTAwOEEwMDAyODA0MDA4MDA4MDQwMDgwMTgwNDAwODA4MEI0MTMwNDI5Cis6MTAwOEIwMDAwMEQwMDEzQTgwMDAwQjFDMTM0OTBGNThDMDQ2M0I2MDIyCis6MTAwOEMwMDAwQjU4QzA0NjVBNjAwQTU4MDgzMjEwNEIxQjU4OUE0MkJGCis6MTAwOEQwMDAwMUQzMEY0QTEyNTgwRjRCMUY1ODAxMjM5QjA3M0I0MzZDCis6MTAwOEUwMDAxQjY4OUIwMDE3MDMzRjBCOUY0MjA2RDEwQTQ4QzE2ODUzCis6MTAwOEYwMDAwMTMxQzE2MDAxMjA4MEJDNzA0NzA4NEIxQjU4QzA0NkM1Cis6MTAwOTAwMDAxQTYwMEE1MDAwMjBGNkU3MDgwNDAwODAyODA0MDA4MERFCis6MTAwOTEwMDAyMDA0MDA4MDE4MDQwMDgwQTA4MjIwNDAxMDA0MDA4MDgxCis6MTAwOTIwMDBGRjVGMkRFOTQ4RkVGRkVCMDFCNkEwRTMwMUIxOEJFMkNBCis6MTAwOTMwMDAwMjhBQTBFMzAxN0FBMEUzMDFBOUEwRTMwMTU2QTBFM0EzCis6MTAwOTQwMDBDODYwOUZFNUM4OTA5RkU1MTQ0MDlCRTUwMDAwNTRFMzE0Cis6MTAwOTUwMDAyQzAwMDAwQTAzMEExNEUzMTEwMDAwMEEwQzAwOTZFNUJCCis6MTAwOTYwMDAwMDAwNTBFMzIxMDAwMDBBMDEwQTE0RTMwNTAwMDAwQTE4Cis6MTAwOTcwMDAxQzAwOTZFNTAxMEFDMEUzMUMwMDg2RTUxQzAwODVFNTI1Cis6MTAwOTgwMDAxNDcwODVFNTA2MDAwMEVBMDIwQTE0RTMwNDAwMDAwQTc4Cis6MTAwOTkwMDAxQzAwOTZFNTAyMEFDMEUzMUMwMDg2RTUxQzAwODVFNTA0Cis6MTAwOUEwMDAxNDgwODVFNTAxMDkxNEUzMDQwMDAwMEExQzAwOTZFNUEzCis6MTAwOUIwMDAwMTA5QzBFMzFDMDA4NkU1MUMwMDg1RTUxNEEwODVFNTVGCis6MTAwOUMwMDAwMjAwMTRFMzQwMDAwMDFCMDEwMDE0RTM1NDAwMDAxQjZDCis6MTAwOUQwMDAwMjBCMTRFMzY3MDAwMDFCMDEwQjE0RTMyMDAwMDAxQjUzCis6MTAwOUUwMDAxODAwOTlFNTAxMDA4MEUyMTgwMDg5RTVENUZGRkZFQUNCCis6MTAwOUYwMDAxQzAwOTZFNTAxMEFDMEUzMUMwMDg2RTUxQzAwODVFNUE1Cis6MTAwQTAwMDAxNDcwODVFNUUxRkZGRkVBRkY1RkJERTgwNEYwNUVFMkY4Cis6MTAwQTEwMDA2ODBFMDA4MDA4ODMyMDQwMTAxMDFGRTUxNDMwOTFFNTE3Cis6MTAwQTIwMDAwMDIwQzNFMTE0MjA4MUU1MDExNkEwRTMwQzIwODFFNTNDCis6MTAwQTMwMDAwQjEyQTBFMzAwMDA4MUU1MTgxMDlGRTVCMDI0RDFFMTdFCis6MTAwQTQwMDAwMTIwODJFMkIwMjRDMUUxM0MyMDkxRTUwMDAwODJFMTc2Cis6MTAwQTUwMDAzQzAwODFFNTFFRkYyRkUxQTA4MjIwNDBGRkZGRkZFQTVFCis6MTAwQTYwMDBGRUZGRkZFQTAxMEJBMEUzMDExNkEwRTMxNDAwODFFNUZECis6MTAwQTcwMDAwMDFBODFFMTI0MjA5MUU1NzAwMDFGRTUwMDAwMDAwMENDCis6MTAwQTgwMDAyNDIwODBFNTI4MTA5MUU1MDAwMDAwMDAyODEwODBFNTcyCis6MTAwQTkwMDAyQzIwOTBFNTAxMjA4MkUyMkMyMDgwRTUzRjAwMDFFMjNECis6MTAwQUEwMDAzRjAwNTBFMzFFRkYyRjExMTgwMDlGRTUwMDEwOTBFNTU2Cis6MTAwQUIwMDAwMTEwODFFMjAwMTA4MEU1MDIxOEEwRTMwQjAyQTBFMzIwCis6MTAwQUMwMDAwMDEwODBFNTFFRkYyRkUxMzAwNDAwODAwMTA2QTBFMzQ2Cis6MTAwQUQwMDAwMTAxODBFMjAwMTA5MEU1MDEwODExRTMwQjEwQTBFMzkyCis6MTAwQUUwMDAwMjE5ODFFMjA1MDAwMDFBMDAyMDkwRTU0MjI4QjBFMUQ5Cis6MTAwQUYwMDAwNTAwMDAxQTAwMDA5MEU1MDIwQzEwRTMwMjAwMDAwQTU1Cis6MTAwQjAwMDAwNjA3QTBFMzRDMTE4MEU1MDMwMDAwRUEwQzAwOUZFNTE2Cis6MTAwQjEwMDAwMDAwMDAwMDQwMTA4MEU1RkZGRkZGRUFGRUZGRkZFQTUzCis6MTAwQjIwMDAwMDAwMDA4MDAxMDZBMEUzMDEwMTgwRTIwMDEwOTBFNUQyCis6MTAwQjMwMDAwMTA4MTFFMzBDMTBBMEUzMDIxOTgxRTIwNTAwMDAxQTdDCis6MTAwQjQwMDAwMDIwOTBFNTQyMjhCMEUxMDUwMDAwMUEwMDAwOTBFNTgxCis6MTAwQjUwMDAwMjBDMTBFMzAyMDAwMDBBMDYwN0EwRTM0QzExODBFNTM2Cis6MTAwQjYwMDAwMzAwMDBFQTRDMDAxRkU1MDAwMDAwMDA0MDEwODBFNTkzCis6MTAwQjcwMDBGRkZGRkZFQUZFRkZGRkVBMDIxQkEwRTMwMTA2QTBFMzdFCis6MTAwQjgwMDAxNDEwODBFNTFFRkYyRkUxODAyMTFGRTUxNDMwOTJFNTRGCis6MTAwQjkwMDAwMDAwMDAwMDAwMzA4MEU1MUMwMDkyRTUwMDAwMDAwMDJECis6MTAwQkEwMDAwMDAwODFFNTAwMTBBMEUzMTQxMDgyRTUwMTA2QTBFMzM3Cis6MTAwQkIwMDAxQzEwODJFNTBDMTA4MEU1MUMxMDkyRTUwMDAwMDAwMDdFCis6MTAwQkMwMDAxQzEwODBFNTFFRkYyRkUxQzAyMTFGRTUwMDAwMDAwMDgyCis6MTAwQkQwMDAxQzEwODJFNTAxMTZBMEUzMTQwMDgyRTUwQzAwODFFNUZCCis6MTAwQkUwMDAxQzAwOTJFNTAwMDAwMDAwMUMwMDgxRTUxRUZGMkZFMUMzCis6MTAwQkYwMDA4MEI1MEYxQzM4MUMwMEYwMTdGODAwMjgwMkQwMzgxQ0Y0Cis6MTAwQzAwMDAwMEYwOTJGODAwMjA4MEJDMDhCQzE4NDc4MEI1MEYxQzhCCis6MTAwQzEwMDAzODFDMDBGMDA5RjgwMDI4MDJEMDM4MUMwMEYwODRGOEQ1Cis6MTAwQzIwMDAwMDIwODBCQzA4QkMxODQ3RjBCNDA3NjgzQTc4RDIwN0E3Cis6MTAwQzMwMDBEMjBGMDAyNDAwMkEwM0QwRkYyMjAxMzI0MjYwMDBFMERDCis6MTAwQzQwMDA0NDYwM0E3QjdCN0IxQjAyMUE0MzgxMkEwOEQxMDEyMzMzCis6MTAwQzUwMDA1QjAyNDI2ODFBNDM0MjYwMDQyMkJGMTg4MjYwMDBFMENGCis6MTAwQzYwMDA4NDYwM0E3QjdCN0IxQjAyMUE0MzA4MkEwNkQxMDYyMzQ5Cis6MTAwQzcwMDA0MTY4MTk0MzQxNjA4MTY4MEUzMTNDRTBDMTIzREIwMENCCis6MTAwQzgwMDA5QTQyMDNEMTQxNjgyNDRCMTk0MzNFRTAyMzRCOUE0MkQ4Cis6MTAwQzkwMDAwNEQxMDEyMzFCMDM0MTY4MTk0MzM2RTAxMzAyMTIwQUYxCis6MTAwQ0EwMDAxMjA2MTIwRTFBNDMxMjA0MTIwQzJFM0ExQzRCOUE0MkQwCis6MTAwQ0IwMDAyREQ4MDEyNTQyNjgxNTQzNDU2MEJBN0JGQjdCMUIwMjlBCis6MTAwQ0MwMDAxQTQzMTg0QjlBNDIyMkQxRkIxRDA5MzM0NENCOUIwNzkwCis6MTAwQ0QwMDBEQjBFREE0MDVCNDIyMDMzOUU0MDE2NDMwMzJFMThEMUQwCis6MTAwQ0UwMDAzOTdEN0I3RDFCMDIxOTQzMDgyOTA3RDEwNDIxMjk0MzQzCis6MTAwQ0YwMDA0MTYwODE2ODE2MzE4MTYwMDEyMTBBRTBDMTIzREIwMDc3Cis6MTAwRDAwMDA5OTQyMDREMTAxMjE4OTAzMjk0MzQxNjAwMEUwODQ2MEI0Cis6MTAwRDEwMDAwMDIxMDgxQ0YwQkM3MDQ3MDI0MDAwMDA4MTgwMDAwMEU4Cis6MTAwRDIwMDBBRTA1MDAwMEFBQUEwMDAwODBCNDQyNjhEMTA4M0ZEM0YzCis6MTAwRDMwMDAwMTY4ODM2ODU5MTgwMjM5OEY3ODNGMDczRjBGMDUyRkU0Cis6MTAwRDQwMDAwM0QxREExRDBEMzJDMjYwMDVFMEJGMDBEQjE5QzM2MEJDCis6MTAwRDUwMDAwODIzMUE0MzQyNjA4QTc4MTIwNzEyMEY5MjAwMDI2MTM4Cis6MTAwRDYwMDAwQTc5NEI3OTFCMDIxQTQzMTMwMjEyMEExMjA2MTIwRTU5Cis6MTAwRDcwMDAxQTQzMTIwNDEyMEM0MjYxQ0E3QTA2MkEwM0QxMTAyM0M0Cis6MTAwRDgwMDA0MjY4MUE0MzEwRTAxMTJBMDNEMTIwMjM0MjY4MUE0MzEzCis6MTAwRDkwMDAwQUUwMzMyQTAzRDE0MDIzNDI2ODFBNDMwNEUwMzIyQThFCis6MTAwREEwMDAwM0QxODAyMzQyNjgxQTQzNDI2MEM5N0FDMDQ2MDE3NjYzCis6MTAwREIwMDA4MEJDNzA0NzBBNzhDMDQ2MDI2MDRCNzgxQjAyMUE0MzE5Cis6MTAwREMwMDAwMjYwOEI3ODFCMDQxQTQzMDI2MEM5NzgwOTA2MTE0MzNDCis6MTAwREQwMDAwMTYwNzA0NzgwQjUwNzFDNDg2ODgwMDkyNkQzQjg2QTRGCis6MTAwREUwMDBDOTY4NDAxODAxMjM5QjA3MDIzMDE4NDMwMDY4MDAwNEJCCis6MTAwREYwMDAwMDBDMTEyMzlCMDI5ODQyMThEMTc4NkEzOTZCQzA0NkM3Cis6MTAwRTAwMDA0ODYyMzg2QjAyRjBEQUY4MzgxQzAxRjA5NUZEMDEyMEQ5Cis6MTAwRTEwMDAwNzQ5QzA0NkM4NzMwNzQ5NEE2QzEyMTg0QTY0MDY0OTE0Cis6MTAwRTIwMDA4QTZEMTIxODhBNjU4MEJDMDhCQzE4NDcwMDIwRkFFNzUyCis6MTAwRTMwMDAxODFBMDA4MDBDMkIwMDgwQTQyQTAwODA4MTA3MTlEMDhBCis6MTAwRTQwMDA4MDA4ODAwMDAxMjM5QjA3MDExRDE4NDMwMDY4MTk0Mzk3Cis6MTAwRTUwMDAwOTY4MDIwMjEyMEUxMjA2MDAwQUZGMjMxQjA0MTg0MDQyCis6MTAwRTYwMDAxMDQzMEEwQTEyMDYxMjBFMTA0MzA5MDIxQjBBMTk0MDA3Cis6MTAwRTcwMDAwODQzNzA0NzAxMjM5QjA3MTg0MzAwNjgwMTA2MDIwMkRDCis6MTAwRTgwMDBGRjIzMUIwNDFBNDAxMTQzMDIwQTFCMEExQTQwMTE0Mzk0Cis6MTAwRTkwMDAwMDBFMDg0M0VERTcwMDAwRjBCNTA0MjM4MTZCMTk0MDE0Cis6MTAwRUEwMDAwMDIyMDAyOTQ2RDBDNzFEMzkzNzM5N0IzMzI5MDFEMEFDCis6MTAwRUIwMDAzMjI5M0ZEMTAxNkJDMDQ2NEE2NUM0MUQyRDM0Q0QxRDdBCis6MTAwRUMwMDAyRDM1MDAyMjkzMDBFNjU4QzA0NkVFNTAwMTMyMDcyQTI1Cis6MTAwRUQwMDBGOEQzODI2QUMwNDY0QTYzODI2QUMwNDY4QTYyN0E4QkM1Cis6MTAwRUUwMDBDQjFEMzkzMzVBODM0MDZBQzA0NjQ4NjIxMjQ4MDEyN0Y1Cis6MTAwRUYwMDA0MjY4MDAyQTEwRDFDMjY4MDAyQTEzRDE0MjY5MDAyQTMwCis6MTAwRjAwMDAwREQxMDE2MUMxNjAwMTZBMDIyOTAyRDMyMDMwMDc3MTRECis6MTAwRjEwMDAwQ0UwMDBGMDEzRjgwOUUwQzI2ODAwMkEwMkQxMDE2MTc4Cis6MTAwRjIwMDBDMTYwMDNFMDAyNjlDMDQ2NTE2NTAxNjEzODFDRjBCQzM0Cis6MTAwRjMwMDAwOEJDMTg0NzEwMUNGQUU3NkMwNjAwODA4MEI1MUU0OUYzCis6MTAwRjQwMDAwMDIyQ0I2ODAwMkIzNEQwQzgxREY5MzA4MzYyQ0I2OEY3Cis6MTAwRjUwMDA5QjZBQzA0NkMzNjJDRjY5N0IwMERGMTk3RjAyMTc0QkQzCis6MTAwRjYwMDBGRjE4RkYzNzY1Mzc4MzYzMDc2M0NCMURGRjMzNUEzM0ExCis6MTAwRjcwMDAxQTcyQ0I2OTAwMkIwMUQwQ0E2MTAxRTAwMTIzQ0I2MTU5Cis6MTAwRjgwMDAwRjFDQzk2ODQ5NkEwOTg5MDEzMTQxNjNGODFERkYzMEE2Cis6MTAwRjkwMDAzQTMwNDI2MDAyODI4MjYwQzI2MDM4MUMwMEYwQ0VGQUIxCis6MTAwRkEwMDAzODZBMDEzMDM4NjIzODFDMDBGMDBBRjg4MEJDMDhCQzhFCis6MTAwRkIwMDAxODQ3MTAxQ0ZBRTcwMDAwNkMwNjAwODBBQ0FCMjA0MDFDCis6MTAwRkMwMDBGMEI1MDcxQ0Y5MURGOTMxODg2QUMyMUQyRDMyMDEyM0M1Cis6MTAwRkQwMDA5QjA3MDgzMjFBNDNDODZBMTI2ODEyMDQxMjBDODAxODYwCis6MTAwRkUwMDA4Mjc5QzM3OTFCMDIxQTQzMTMwMjEyMEExMjA2MTIwRUU3Cis6MTAwRkYwMDAxQTQzMTIwNDEyMEMwMjM4OTIwNDkyMEMwMDI2MjU0RDVBCis6MTAxMDAwMDBFQzFERkYzNDNBMzQwMDJBMDREMDIwOEEwMTIzOUIwMkNECis6MTAxMDEwMDAxODQzMkJFMDAxMjM5QjA3QzIxRDBEMzIxQTQzMTI2OEFGCis6MTAxMDIwMDAxMjA0MTIzMDE4NDMwMDY4MDAwNDAwMEMxMDQzMDMxQzIzCis6MTAxMDMwMDBGODFERkYzMDRBMzA4Mjc4Qzg2QjE5MUMwMkYwMDJGOEE0Cis6MTAxMDQwMDAwMDI4MDREQTIwOEFGRjIzMDEzMzE4NDMwRUUwRjkxRDNCCis6MTAxMDUwMDBGRjMxM0EzMTA4NjAwMTA0MDkwQzM4MUMwMEYwMUNGODFCCis6MTAxMDYwMDAwMDI4MTREMTIwOEEwMTIzNUIwMjE4NDMyMDgyMjE4QUEwCis6MTAxMDcwMDAzODFDMDBGMEEyRkJFODY4MDEyMzlCMDc1NDMwMTg0MzlBCis6MTAxMDgwMDAwMDY4QzA0NkU4NjAzMDFDRjBCQzA4QkMxODQ3MDEyMDZFCis6MTAxMDkwMDBGQUU3MDAwMDZDMDYwMDgwRjhCNTA3MUNGQzFERjkzNDY3Cis6MTAxMEEwMDBBMDZCQTY2QUM1MUQwRDM1Mzg0OEMwNkE0QjAwNTkxODlCCis6MTAxMEIwMDA0OTAxNDIxODAxMjA4MDA3MTA0MzAwNjgwMDA0MDAwQzE5Cis6MTAxMEMwMDAwMDkwMDEyMzlCMDdEMDFEMDUzMDE4NDMwMDY4MzgxQzkxCis6MTAxMEQwMDAyOTFDMDBGMEMyRkFBODg4NDEwNzAxRDAwMDIwNTFFMDg1Cis6MTAxMEUwMDAyOTg5MDkxODYwNkI4MTQyRjhEODY5ODlFQTg4ODkxOENBCis6MTAxMEYwMDA4MTQyRjNEODAwOTgwMTI4MjVEMUUwNkFGMTZCNDAxOEFECis6MTAxMTAwMDA3MTZDRkExRENEMzIwMUYwMzNGOUZBMURGRjMyM0EzMjFCCis6MTAxMTEwMDBFMDZBNTE2OTQwMThDMzFEMDMzMzAwMjA4MTAwNUU1ODA2Cis6MTAxMTIwMDBDOTE5RkYzMTAxMzE0RTYxMDEzMDA0MjhGNkQzRTA2QTVDCis6MTAxMTMwMDA1MTY5NDAxOEMxMUQwNTMxMDAyMDAwMjI0MzAwQ0E1MkU4Cis6MTAxMTQwMDAwMTMwMDYyOEZBRDMyOTFDMTE0QTAwMjBGRkY3QUVGQjE0Cis6MTAxMTUwMDAwMTIyNTIwNDYwNkIwMjQzMDEyMDIxNkJGRkY3QTZGQkMyCis6MTAxMTYwMDAwMTIyNTIwNDYwNkIwMjQzMDAyMEUxNkFGRkY3OUVGQkZDCis6MTAxMTcwMDBBMTZCMDg0QTAxMjBGRkY3OTlGQjAzMjAwNjQ5QzA0NkVFCis6MTAxMTgwMDA0ODYyMDEyMEY4QkMwOEJDMTg0NzAwMDA0QzJBMDA4MEM3Cis6MTAxMTkwMDA1NDAwMDMwMDE0MDAwRjAwNkMwNzAwODBGMEI1OERCMDAwCis6MTAxMUEwMDAwMDIwQjU0QUQ1MURGOTM1Njg2MjAxMjAwMDA1QjM0OTE0Cis6MTAxMUIwMDBDMDQ2MDg2MEE4NkFDNDFEMkQzNEIxNDhDMDZBRDcxRDU2Cis6MTAxMUMwMDBGRjM3M0EzNzM5Njg0QjAwNTkxODQ5MDE0MDE4MDEyMzU1Cis6MTAxMUQwMDA5QjA3QzExRDA1MzExOTQzMDk2ODA4MzAxODQzMDA2ODkxCis6MTAxMUUwMDBDMDQ2MDk5MEZGMjMxQjAyMTg0MDAwMEEwQTkwMEE5ODgzCis6MTAxMUYwMDBBNDRFMDEyODU5RDEyODZCQTI2ODgwMThBMjRBMjE2OUZGCis6MTAxMjAwMDAwOTA0MDkwQzAxRjAyNkY5Mjg2Qjc5Njk0MDE4QzExRDAxCis6MTAxMjEwMDAwNTMxMDAyMDgyMDA5ODRCRDMxOEZGMzMwMTMzNUI2OUZFCis6MTAxMjIwMDBDMDQ2OEI1MDAxMzAwNDI4RjREMzAwMjAzMTFDODIwMENBCis6MTAxMjMwMDA1NjE4MDEyMzlCMDczMzQzMUI2ODA0QUVCMzUwMDEzMDlCCis6MTAxMjQwMDAwMzI4RjREMzAwMjAwODkwOTA0OTQyMDA4QjVBQjI1QUU4Cis6MTAxMjUwMDA5MzQyMTNEMDhFNDhDMTg5MDEzMUMxODFCODY4MDAyOEZBCis6MTAxMjYwMDAwM0QxMzg4QTEwMjMxODQzNzFFMDM4OEE0MDIzMTg0Mzg5Cis6MTAxMjcwMDA2REUwMDBGMDExRjkwMUYwNjdGRkY1RTAwMTMwMDYyODlDCis6MTAxMjgwMDBFM0QzMDg5ODAwMjgwQ0QxQjg2ODQxMUNCOTYwMDAyODQ1Cis6MTAxMjkwMDAwM0QxMzg4QTAxMjMxODQzMDJFMDM4OEEwNDIzMTg0MzEzCis6MTAxMkEwMDAzODgyNzg2ODAxMzA3ODYwNjJFMDBBOTgwMjI4NUZEMTVECis6MTAxMkIwMDAwOTk4NDAwQzczRDMwMTIzOUIwN0UwMUQwMTMwMTg0M0FDCis6MTAxMkMwMDAwMDY4RTExRDBEMzExOTQzMDk2ODQwMTgwQzM4MDAwNDBECis6MTAxMkQwMDAwMDBDMDAyMThBMDA2QjRCRDYxODAxMjM5QjA3MzM0Mzc3Cis6MTAxMkUwMDAxQjY4MDRBRUIzNTAwMTMxMDMyOUYzRDMwMDIxODMxRUUwCis6MTAxMkYwMDAwQzkzNjg0QTE2NkJDMDQ2MEI5NjhBMDAwQzlCOUIxODkxCis6MTAxMzAwMDAwQjlFOUUxOTAxMjM5QjA3MzM0MzFCNjg2RTQ2QjM1MDA3Cis6MTAxMzEwMDAwMTMxMDQyOUYxRDM2OTQ2OEIxQzA3OTMwMDIxMDg5MTAwCis6MTAxMzIwMDAwNEFFNEEwMDA3OUI5QjVBQjI1QTkzNDIxMUQwNTg0OEM4Cis6MTAxMzMwMDBDMTg5MDEzMUMxODFGODY4NDExQ0Y5NjAwMDI4MDNEMURECis6MTAxMzQwMDAzODhBMjAyMzE4NDMwMkUwMzg4QTgwMjMxODQzMzg4MkUxCis6MTAxMzUwMDA4RkU3MDEzMTA2MjlFNEQzMDg5OTAwMjkwREQxRjk2OEY2Cis6MTAxMzYwMDA0QTFDRkE2MDAwMjkwNEQxMzk4QTAyMjMxOTQzMDNFMDk4Cis6MTAxMzcwMDAwQ0UwMzk4QTA4MjMxOTQzMzk4MjI5NkIwODE4MDEyM0E0Cis6MTAxMzgwMDA5QjA3MDEzODE4NDMwMDY4QzA0NjIwNzYwMTIzOUIwNzVECis6MTAxMzkwMDBFMDFEMTEzMDE4NDMwMDY4MDEwNjA5MEUwMEUwMTlFMDU1Cis6MTAxM0EwMDAzNTQ4MkE2QkMwNDZFQTYyMDQyOTRGRDEwMTIxQzYxRDg3Cis6MTAxM0IwMDBGRjM2NUEzNjMxNzIwQTk5MDIyOTFFRDEwOTk5MDkwRTRGCis6MTAxM0MwMDA0OTA2MUFEMUUxMUQwNTMxMTk0MzA5NjgwOTA2MDkwRUJDCis6MTAxM0QwMDAwODM5MUFFMDAxMjM5QjA3RTAxRDAxMzAxODQzMDA2ODFCCis6MTAxM0UwMDBFMTFEMEQzMTE5NDMwOTY4NDAxODAwMDQwMDBDRjk2ODJCCis6MTAxM0YwMDA0QTFDRkE2MDAwMjlCQ0QxQjZFNzAxMjM5QjA3RTExRDE2Cis6MTAxNDAwMDAwNTMxMTk0MzA5NjgwOTA2MDkwRUExNjBFODZBQzA0NjVBCis6MTAxNDEwMDAyMDYwMjAxQ0ZGRjc4OEZDMjA3RTMzMjgwMUQwMzIyODcyCis6MTAxNDIwMDAxMUQxMDEyMTE0NENDMDQ2Rjk2MEI5NjAyMDFDMDBGMEI0Cis6MTAxNDMwMDA4NUY4Mjg2QkE5NkFDMDQ2ODg2MjIwMUNGRkY3QzBGREFBCis6MTAxNDQwMDAwMDI4MTFEMTBFRTAwMDIwMzA3MjExRTAzMzI5MDFEMEM0Cis6MTAxNDUwMDAzMjI5MEREMTA3MUMwMEYwNzFGODM4MUNGRkY3QjBGREUwCis6MTAxNDYwMDAwMDI4MDFEMTAxRjA3MEZFMERCMEYwQkMwOEJDMTg0Nzk3Cis6MTAxNDcwMDAwMEYwMTJGOEY2RTcwMDAwNkMwNjAwODAwMDAwMDBCMEYzCis6MTAxNDgwMDA0QzJBMDA4MEFDQUIyMDQwNDAwNzAwODA4MjA3MDA4MERGCis6MTAxNDkwMDAwQzJCMDA4MDZDMDcwMDgwRjBCNTI1NDg0MTY4MDEzMUI1Cis6MTAxNEEwMDA0MTYwMjQ0RkY5MURGOTMxMDAyNDg4NkFGQTY4QzA0NjZBCis6MTAxNEIwMDA5NDYxMDQyMkZCNjhDMDQ2REE2MDEwMjJGQjY4QzA0NkQzCis6MTAxNEMwMDA5QTYxRkExREZGMzI1QTMyMTM3QTFCNEEwMDJCMEJEMDU1Cis6MTAxNEQwMDAxNThBMkUwQTM2MDIzMzIzMkI0MDlCMDAxRTQzQ0MyMzUxCis6MTAxNEUwMDAyQjQwOUIwODMzNDMxMzgyMTI4QUZCNjhDMDQ2REE4MzgxCis6MTAxNEYwMDA0QTZCRkI2OEMwNDZEQTgxMEE2QkMwNDY4MjYyQzQ2MkVFCis6MTAxNTAwMDBDMzFEMzkzMzRBNkJDMDQ2NUE4MzA0MjMwMjY4MUE0MzA5Cis6MTAxNTEwMDAwMjYwODg2QTAxRjAzMkZBRjg2ODAxMjM5QjA3NTQzMEIwCis6MTAxNTIwMDAxODQzMDA2OEMwNDZGODYwRjBCQzA4QkMxODQ3MDAwMENCCis6MTAxNTMwMDAwQzJCMDA4MDZDMDYwMDgwQUMwNzAwODA4MEI1QzExREJDCis6MTAxNTQwMDBGOTMxOEE2QTAxMjM5QjA3RDExRDQ1MzExOTQzMDk2ODg2Cis6MTAxNTUwMDAwQjA2MUIwRTAxMjdDMTFERkYzMTRBMzEzMzJCMDVEMTZDCis6MTAxNTYwMDA4QjcwMDExQzEwMUMwMEYwMEZGODA2RTAzMjJCMDhEMTI0Cis6MTAxNTcwMDA4QjcwMDExQzEwMUMwMEYwM0NGODM4MUM4MEJDMDhCQ0FGCis6MTAxNTgwMDAxODQ3MDAyMDg4NzBGOUU3OTBCNENBMURGOTMyMzMyNzU0Cis6MTAxNTkwMDBDQzFERkYzNDRBMzREMzZBQzA0NkE3NzBGRjMxNDEzMUI1Cis6MTAxNUEwMDAwNzZDQzA0NjRGNjFGQjE4MzkxQzlGMUUwMTIzOUIwNzI3Cis6MTAxNUIwMDBGQzFDMjM0MzFCNjgxQjA2MUIwRTlCMDAxQjA0MUIwQ0ZGCis6MTAxNUMwMDBDOTE4MDgzMTAxNjQwMTIzOUIwN0I5MUMxOTQzMDk2ODM0Cis6MTAxNUQwMDAzNDMwMDE3NkY4MUQwMTMwMTg0MzAwNjgwMDA0QjkxRDRECis6MTAxNUUwMDAxOTQzRDA2MzA5NjgwOTA0MDkwQzA4NDNEMDYzOTBCQzBGCis6MTAxNUYwMDA3MDQ3QjBCNUNBMURGOTMyQzUxRDJEMzUzMjIwQ0YxRDNCCis6MTAxNjAwMDBGRjM3NEEzN0QzNkFDMDQ2Qjg3MENDMURGRjM0M0EzNDJFCis6MTAxNjEwMDBFODY4QzA0NjYwNjExMDMwRTg2MDYwNjlDMDE4ODcxRUU1Cis6MTAxNjIwMDAwMTIzOUIwNzM4MUQxODQzMDA2ODAwMDRCOTFDMTk0M0E3Cis6MTAxNjMwMDBEMDYzMDk2ODA5MDQwOTBDMDg0M0QwNjNGODFEMDMzMDFFCis6MTAxNjQwMDBGRkY3RkNGQjIwNjJGODFEMDczMEZGRjdGN0ZCNjA2MjM1Cis6MTAxNjUwMDAwMDIwMjg3NkIwQkMwOEJDMTg0N0Y3QjU4MUIwMDE5OEM3Cis6MTAxNjYwMDBDNzFERjkzN0I4NkEwMTIzOUIwN0Q0MUQwNTM0MjM0M0VFCis6MTAxNjcwMDAxQzY4RkYyM0ZFMzMyMzQwN0Y2QjNGMDQzQjQzMEI2MDFBCis6MTAxNjgwMDAzNDMwMUMxQzgwMjMyMzQwMDE5RkZGMzc0MTM3MDAyQjNGCis6MTAxNjkwMDAzQ0QwMEMyMzAwOTMwMDIzOUQwMEFFMTgzNjY5NkQxOEQyCis6MTAxNkEwMDA2RTYxMDEzMzA1MkJGN0QzMDAyMzlEMDBBRTE4NzY2QUQ3Cis6MTAxNkIwMDA2RDE4QUU2MjAxMzMwNTJCRjdEMzAxOUJGRjMzNTEzMzE1Cis6MTAxNkMwMDA5Qjc4MzMyQjBFRDEwMTIzOUIwN0M1MUQwMTM1MkI0MzdFCis6MTAxNkQwMDAxQjY4QzA0NjRCODEwMTIzOUIwN0M1MUQwRDM1MkI0MzVECis6MTAxNkUwMDAxQjY4MTZFMDdCNjlDMDQ2NEI4MTAxMjM5QjA3QzUxRDIzCis6MTAxNkYwMDAwRDM1MkI0MzFCNjg3RDY5NUQxQjAxMjM5QjA3QzYxREIwCis6MTAxNzAwMDAwMTM2MzM0MzFCNjhFQjE4MEMzQjAyRTAwMDIzMDA5M0M3Cis6MTAxNzEwMDA0QjgxQ0I4MDYzMDk0OUQzMDEyMzlCMDdDNDFEMDUzNDRBCis6MTAxNzIwMDAyMzQzMUI2OEMwNDYwQjgxMDEyMzlCMDdDNDFEMEQzNDU2Cis6MTAxNzMwMDAyMzQzMUI2ODBDODkxQjFCMDA5QzFDMUIwMTIzOUIwNzVDCis6MTAxNzQwMDAwODMwMTg0MzAwNjgyMDE4ODg4MDM4NkEwNDBFRkYyMzg4Cis6MTAxNzUwMDAxQjA0MDM0MDFCMEExQzQzRkYyMzFCMDIwMzQwMUIwMjA0Cis6MTAxNzYwMDAyMzQzMDAwNjE4NDNDODYwNzg2QTA3MEVGRjIzMUIwNDUyCis6MTAxNzcwMDAwMzQwMUIwQTFGNDNGRjIzMUIwMjAzNDAxQjAyM0I0MzgyCis6MTAxNzgwMDAwMDA2MTg0MzA4NjFEMDZCQzA0NkM4NjM5MDZCQzA0NjIyCis6MTAxNzkwMDAwODY0NTA2Q0MwNDY0ODY0MTA2Q0MwNDY4ODY0RDA2Q0M1Cis6MTAxN0EwMDBDMDQ2Qzg2NDkwNkNDMDQ2MDg2NTAyRTAwMDIzMEI4MTA3Cis6MTAxN0IwMDA4QjgwMDRCMEYwQkMwOEJDMTg0NzAwQjUwRjRBOTM4OTcxCis6MTAxN0MwMDAwMTMzOTM4MUMyMURGOTMyMDQyMzkwNkFDMDQ2QzM2MDdECis6MTAxN0QwMDAxMDIzODM2MUNCMEEwMUQzMTgyMzgzNjFDMTgzNTE2QjJBCis6MTAxN0UwMDBDMDQ2QzE4MTUxNkJDMjFEMzkzMjUxODMwNDIzMDE2ODQ3Cis6MTAxN0YwMDAxOTQzMDE2MDAxRjBDMkY4MDhCQzE4NDcwQzJCMDA4MEE3Cis6MTAxODAwMDBCMEI1MUI0QzIwNkEwMjI4MUJEMjAwMjBFNzFEMTkzN0Y3Cis6MTAxODEwMDAzODcxRTE2OEUwMURGOTMwMDAyOTE1RDA0MjZBMDAyQUNDCis6MTAxODIwMDAxMkQxMDEyNTBBRTBGRkY3ODlGQjAwMjgwOUQxMjA2QUJGCis6MTAxODMwMDAwMjI4MDBEMzNENzFFMDY4MDAyODAyRDAzODc5MDAyOEUyCis6MTAxODQwMDBGMUQwQjBCQzA4QkMxODQ3NDA2QTAwMjhGOUQxMDAyOTgzCis6MTAxODUwMDBGN0QxNjA2OTAwMjgwNEQwMDY0ODAwNjgwM0YwQThGQ0FFCis6MTAxODYwMDBFRkU3NjA2ODAwMjhFQ0QwMDBGMDVBRjhFOUU3MDAwMEU0Cis6MTAxODcwMDA2QzA2MDA4MDM0MDQwMDgwQjBCNTA3MUMyMDIzQjg2OEQzCis6MTAxODgwMDAxODQwMDEyNDAwMjUwMDI4MEJEMTM4NkEwMDI4MDNEMTE0Cis6MTAxODkwMDAyODFDQjBCQzA4QkMxODQ3MUY0ODAxNkUwMTMxMDE2NjA2Cis6MTAxOEEwMDAwM0UwNDg2OEM0MjMxODQwMDNEMTM4NkEwMEYwMENGQ0Y4Cis6MTAxOEIwMDAyRkUwMzgxQzAwRjAxQ0ZDMzgxQzAwRjA3QkZBQjg2OEU0Cis6MTAxOEMwMDBDMDA4MDJEMzM4NkEwMEYwRDFGQkI4NjgzOTZBQzA0NjU0Cis6MTAxOEQwMDA4ODYwMzg2QUMwNDZDNTYwMTA0ODQxNjgwMDI5MTFEMTQ3Cis6MTAxOEUwMDBDMTY4MDAyOTA5RDE0MTY5MDAyOTA2RDEzOTZBQzA0Njc5Cis6MTAxOEYwMDA4MTYwNDE2MDAwRjAxNEY4MEJFMDM5NkFDMDQ2ODE2MEY1Cis6MTAxOTAwMDA0MTYwMDZFMDM5NkE4MjY4QzA0NkQxNjAzOTZBQzA0NkUzCis6MTAxOTEwMDA4MTYwMjAxQ0JERTcwMDAwQTQyQTAwODA2QzA2MDA4MEM2Cis6MTAxOTIwMDA5MEI1MEI0QzY3NjgwMDJGMEZEMDM4MUMwMEYwMTJGOEYwCis6MTAxOTMwMDAwMDI4MEFEMTYwNjhDMDY4QzA0NjYwNjAzODFDMDBGMEFBCis6MTAxOTQwMDBDM0ZCMDAyMDkwQkMwOEJDMTg0NzAxMjBGQUU3MDAwMDQ4Cis6MTAxOTUwMDA2QzA2MDA4MEYwQjUwNzFDRkUxRDQ5MzYzMDc4NDAwMDRCCis6MTAxOTYwMDBDMDE5ODU4QjMzNEMzNDRCOUQ0MjNDRDAzODFDMjExQzE0Cis6MTAxOTcwMDAyQTFDMDBGMDFERjkzMTQ4ODA2QTU4MjE2OTQzNDAxODNCCis6MTAxOTgwMDAwMTIzOUIwNzE4NDMwMDY4MDAwNDAwMEMyQzREMDEyODFDCis6MTAxOTkwMDAxQUQxMzA3OEMwMTlDMTFEMTkzMTA4N0EzQTY4ODAxOEY3Cis6MTAxOUEwMDAwOTdCRUExRDIxMzIwMEYwRTNGQzMwNzhDMDE5MjAzMEI5Cis6MTAxOUIwMDAwMDc5Mzk2ODQwMThDMTFEMDUzMTAwMjAwMDIzNDIwMDFDCis6MTAxOUMwMDA4QjUyMDEzMDA2MjhGQUQzQTA4ODQxMDcwQkQxMjE4OTE4Cis6MTAxOUQwMDAwOTE4Nzg2ODAwMDQwMDBDODE0MjA0RDg2MTg5RTI4ODAzCis6MTAxOUUwMDA4OTE4ODE0MjAzRDkwMDIwRjBCQzA4QkMxODQ3MjExQzhCCis6MTAxOUYwMDAxNDRBMDAyMEZFRjc1QUZGMDEyMjUyMDQ3ODY4MDI0MzdECis6MTAxQTAwMDAwMTIwMzk2OEZFRjc1MkZGMDEyMjUyMDQ3ODY4MDI0MzMwCis6MTAxQTEwMDAwMDIwMzk2OEZFRjc0QUZGMEI0OTBDNEEwMTIwRkVGNzA3Cis6MTAxQTIwMDA0NUZGMDEyMEU5MUQxOTMxNDg3MTAyMjFFQTFERjkzMkYzCis6MTAxQTMwMDA1MTYyRDlFNzI4QUMyMDQwRkZGRjAwMDA0QzJBMDA4MDBCCis6MTAxQTQwMDA2QzA2MDA4MDU0MDAwMzAwMTRBQzIwNDAxNDAwMDcwMDEyCis6MTAxQTUwMDBGMEI1ODNCMDAwMjE0RjQ4QzIxREY5MzI1MTYyMDEyMTE3Cis6MTAxQTYwMDBDOTA0NEQ0QUMwNDYxMTYwQzExRDE5MzE0OTc5MDAyOTg4Cis6MTAxQTcwMDAwNEQxNEE0ODAwNjgwM0YwOUJGQjg3RTA0NTQ4NDc2ODZCCis6MTAxQTgwMDBGQzFENDkzNDIxNzg0ODAwQzAxOTgwOEI0NDRBOTI2QTcxCis6MTAxQTkwMDA1ODIzNTg0MzE1MTgwMTIzOUIwN0VBMUQwNTMyMUE0M0EyCis6MTAxQUEwMDAxMjY4MDgzNTJCNDMxRDY4RkYyMzFCMDIyQjQwMUIwQUJECis6MTAxQUIwMDAzQzREMDEyQjI0RDFDODE5QzExRDE5MzEwODdBM0E2ODRGCis6MTAxQUMwMDA4MDE4Mzk0QTA5N0IwMEYwQzVGQzIwNzhDMDE5MjAzMDA1Cis6MTAxQUQwMDAwMDc5Mzk2ODQxMTgwMDIwODIwMDUzMTk5QjZFNkU0NkM4Cis6MTAxQUUwMDBCMzUwMDEzMDAzMjhGN0QzQ0ExRDA1MzI2OTQ2MDAyMEUwCis6MTAxQUYwMDA0MzAwQ0Q1QUMwNDZENTUyMDEzMDA2MjhGOEQzMkRFMDE4Cis6MTAxQjAwMDAwMjJCMkJEMTExMEEyOUQzMDAyMThBMDA1MzE5OUI2RTc1Cis6MTAxQjEwMDA2RTQ2QjM1MDAxMzEwMzI5RjdEMzIxNzg0OTAwQzkxOTIyCis6MTAxQjIwMDAwOThGM0E2ODhCMTg2QTQ2MDAyMTREMDA1NjVCQzA0NjAzCis6MTAxQjMwMDA1RTUzMDEzMTA2MjlGOEQzMTk0OThBNkExMzE4MUE2REMwCis6MTAxQjQwMDAwMDlENTU0MDE5NEFENjY4NzU0MDFENjU4OTZBMDgxODc4Cis6MTAxQjUwMDA0MTZEMDI5QjU5NDA5MjY5NTE0MDQxNjUyMDc4NDExRTc4Cis6MTAxQjYwMDAyMTcwMDAyODBERDAzODFDRkZGN0Y0RkUwMDI4MEREMTlECis6MTAxQjcwMDAwODRBNTA2OEMwNjhDMDQ2NTA2MDM4MUMwMEYwQTRGQTlCCis6MTAxQjgwMDAwMkUwMzgxQzAwRjA3M0ZBMDFGMERFRkEwM0IwRjBCQzlBCis6MTAxQjkwMDAwOEJDMTg0NzZDMDYwMDgwMDAwMDAwQjAzODA0MDA4MEM0Cis6MTAxQkEwMDA0QzJBMDA4MEFDQUIyMDQwOTQwNjAwODAwODgzMjA0MDgzCis6MTAxQkIwMDBGMEI1ODJCMDY5NEI5RjZBNTgyMzVBNDNCQTE4QzMxREM3Cis6MTAxQkMwMDA0OTMzMUY3ODAxMjM5QjA3RDQxRDAxMzQyMzQzMUQ2ODJCCis6MTAxQkQwMDA0MzY4MUMwNDAxMjM5QjA3RDYxRDA1MzYzMzQzMUI2ODRECis6MTAxQkUwMDAxQzQzNDIyMzFDNDMwQzYwRkYyNjM2MDIyRTQwMDEyMzc3Cis6MTAxQkYwMDA1QjAyOUU0Mjc0RDE2QjBDMkJEM0MzMTkyMDMzMUI3OTJCCis6MTAxQzAwMDBDMDQ2NEI4MTdCMDAxQjE4MUI4RjRDODkxQjFCQ0I4MDU0Cis6MTAxQzEwMDAwMDI0QTYwMDAxOTZCMzE4REUxRDA5MzYwMTIzOUIwNzk4Cis6MTAxQzIwMDAzMzQzMUI2ODAxOUU3NjE4NzM2MTAxMzQwNTJDRjBEMzkxCis6MTAxQzMwMDAwMDI0QTYwMDAwOTZCMzE4REUxRDFEMzYwMTIzOUIwNzY1Cis6MTAxQzQwMDAzMzQzMUI2ODAwOUU3NjE4QjM2MjAxMzQwNTJDRjBEMzMxCis6MTAxQzUwMDAwNkUwMDAyMzRCODFDQjgwNDAyMzlDNDMwQzYwMjMxQzc3Cis6MTAxQzYwMDA2QjBFNEFEM0MzMTkyMDMzMUI3OTEwMzMwQjgxN0IwMEQxCis6MTAxQzcwMDAxQjE4MUI4RjBGODlEQjFCOEI4MDAxMjM5QjA3RDQxRDM3Cis6MTAxQzgwMDAzNTM0MjM0MzFCNjhDMDQ2Q0I2MzAxMjM5QjA3RDQxRDE3Cis6MTAxQzkwMDAzMTM0MjM0MzFCNjhDMDQ2MEI2NEFCMEUyMUQyMDEyM0IxCis6MTAxQ0EwMDA5QjA3RDQxRDNEMzQyMzQzMUI2OEMwNDY0QjY0MDEyMzZFCis6MTAxQ0IwMDA5QjA3RDQxRDM5MzQyMzQzMUI2OEMwNDY4QjY0MDEyMzIyCis6MTAxQ0MwMDA5QjA3RDQxRDQ1MzQyMzQzMUI2OEMwNDZDQjY0MDEyM0M2Cis6MTAxQ0QwMDA5QjA3RDQxRDQxMzQyMzQzMUI2OEMwNDYwQjY1MDBFMEJECis6MTAxQ0UwMDAwRkUwRkIxRjAxM0IxQjA0MUIwQzA3NjhGRjE4MDM2OTc3Cis6MTAxQ0YwMDAwODFDMzkxQzAwRjAzNEY4MkNFMDAwMjMwQjgxOEI4MDg5Cis6MTAxRDAwMDAyOEUwMDAyMzhCODAwQjgxQzMxOTIwMzMxQjdBQzA0NjQ3Cis6MTAxRDEwMDA0QjgxN0IwMDE4MTgwMDhFQzA0NkM4ODAwMDIwODcwMEM5Cis6MTAxRDIwMDBCQjE4REMxRDA5MzQwMTIzOUIwNzIzNDMxQjY4N0YxODY0Cis6MTAxRDMwMDA3QjYxMDEzMDA1MjhGMkQzMDAyMDg3MDBCQjE4REMxRDMxCis6MTAxRDQwMDAxRDM0MDEyMzlCMDcyMzQzMUI2ODdGMThCQjYyMDEzMEFFCis6MTAxRDUwMDAwNTI4RjJEMzAyQjBGMEJDMDhCQzE4NDc0QzJBMDA4MDFBCis6MTAxRDYwMDA4MEI0MUYxQzNCMEMxOEQyMTc2RDExNEJDMDQ2REY2MEFFCis6MTAxRDcwMDA1MjZEQzA0NjFBNjFDNzYwMUE2OUMwNDYwMjYxRDg2OEQwCis6MTAxRDgwMDBDMDQ2MDg4MEQ4NjgwMDBDNDg4MDE4NjlDMDQ2ODg4MDIyCis6MTAxRDkwMDAxODY5MDAwQ0M4ODA4MEJDNzA0NzRBODgxMjA0MEI4ODAwCis6MTAxREEwMDAxQTQzQzI2MDhBODhDOTg4MDkwNDExNDMwMTYxRjJFN0I1Cis6MTAxREIwMDAyQzA3MDA4MEYxQjU4OEIwMDAyMjA4OTgwMDZBMDg5QkMzCis6MTAxREMwMDA5OTY4NDkwQTAyRDMwMTI3RkYwMzAwRTAwMDI3MDM4QjJCCis6MTAxREQwMDAwMDJCMTlEMEEzNDk4OTZBMUMxQzU4MjM2MzQzQzkxOEQ2Cis6MTAxREUwMDAwMTIzOUIwNzU4MzkxOTQzMDk2ODA5MDQwOTBDMDIyOTgyCis6MTAxREYwMDAwMkQxMDgyMzFGNDMwN0UwNDE4QjAwMjkwMkQwMEMyM0E2Cis6MTAxRTAwMDAxRjQzMDFFMDA0MjMxRjQzODM4QTAwMkIxOEQwOTU0OTA4Cis6MTAxRTEwMDA4OTZBMUMxQzU4MjM2MzQzQzkxODAxMjM5QjA3NTgzOTNFCis6MTAxRTIwMDAxOTQzMDk2ODA5MDQwOTBDMDIyOTAxRDEwRjQzMDdFMDhECis6MTAxRTMwMDBDMThBMDAyOTAyRDAwMzIzMUY0MzAxRTAwMTIzMUY0MzZECis6MTAxRTQwMDBDMTFEMzkzMTA3OTE0Qjg5MEM4OTFDMTkyNDA0MjQwQ0JDCis6MTAxRTUwMDAwODlEMkQ2OEMwNDYwMTk1Qzk4ODdEMDgxQUQzMUExQ0IzCis6MTAxRTYwMDBDMzFEMTkzMzFBNzIwNzlBOTI4OUMwNDYxQTczMDc5QUNBCis6MTAxRTcwMDAxMjg5QzA0NjAyODYwNDg3ODI4QTAxM0E4MjgzMDEyMjNGCis6MTAxRTgwMDAxOTcxMDg5QjFCNjg1QjE4NUI3ODlCMDAxQjA0MUIwQzdCCis6MTAxRTkwMDAwODMzNTkxOEJCMDg0N0QzMDc5QjVCODk4NTE4MDY5NUZCCis6MTAxRUEwMDAyMDM1MkI3MjA3OUI5Qjg5QzA0NjJCNzMwNzlCMUI4OTkwCis6MTAxRUIwMDAyRTFDNTUwMDJEMTgwNTk1MkI4NjAwMkEwMUQwQzM4QUFCCis6MTAxRUMwMDAwMEUwODM4QTAxM0IwNTlEQzA0NkFCODMzMTcxNjU0QkMxCis6MTAxRUQwMDA5RDZBMDU5QjlFOEI1ODIzNzM0M0VCMThERDFEMDEzNUNFCis6MTAxRUUwMDAwMTIzOUIwNzJCNDMxRDY4MkIwRTVCMDYwMUQxMDgzMTk0Cis6MTAxRUYwMDAwMEUwMTAzMTgxMjM1QjAyMUQ0MDlENDIwM0QxRTMxRkFFCis6MTAxRjAwMDAwNTNCMUMwNDI0MEMwNTlCQzA0NjFDODcwODlCMUI2OEQyCis6MTAxRjEwMDAxQjE5MTAzQjlCN0IwNjlENDAzNTJCNzAyQjc4MDIzM0ExCis6MTAxRjIwMDBFMzFBMUMwNDI0MEMwMTMyQkIwODlCMDc2REQwODMxOEY0Cis6MTAxRjMwMDAyMDMzMDQ5MzE5NzIwMTlCNUQxODAxMjM5QjA3MkI0M0U3Cis6MTAxRjQwMDAxQjY4MUIwNzFCMEY5QjAwMDQ5RUMwNDYzMzczMDA5NTQ0Cis6MTAxRjUwMDAyQjc4MUIwNzFCMEY5QjAwMDQ5REMwNDYyQjczMDA5RDE1Cis6MTAxRjYwMDBFQjc4QUQ3ODFCMDIxRDQzMkIwMjJEMEEyRDA2MkQwRTlBCis6MTAxRjcwMDAyQjQzNTUwMDJEMTgyQjg2MDQ5QkMwNDY1OTcyMDQ5Qjk5Cis6MTAxRjgwMDAxQjdCMkUxQzA0OURDMDQ2NkI3MzMzOEVDMDQ2NzM4NjJDCis6MTAxRjkwMDAwMDlEMkI3ODFCMDcxQjBGOUIwMDFCMDQxQjBDNTkxODYzCis6MTAxRkEwMDAwNDI1M0Q0MDBFRDAzNDg3MDM4QjAxM0JCMzgzMTMxQ0MzCis6MTAxRkIwMDAxQjE4MjAzMzE5NzEwMTlCNUIxODVCNzg5QjAwNTkxODIzCis6MTAxRkMwMDAwODMxMDEzMjNCMDkzN0QzMDAyRDAxRDA0MzhCMDBFMEFCCis6MTAxRkQwMDAwMzhCNTUwMDJEMTgwMTNCQUI4MzgzMTgwMzkzMjAzM0VCCis6MTAxRkUwMDAxOTcxMjA0QjlENkE1MzAwMUIxODAyOTM5RThCNTgyMzM2Cis6MTAxRkYwMDA3MzQzRUIxOEREMUQwMTM1MDEyMzlCMDcyQjQzMUQ2ODNGCis6MTAyMDAwMDAyQjBFNUIwNjAyRDEwODMxMDFFMDE1RTAxMDMxODEyMzZGCis6MTAyMDEwMDA1QjAyMUQ0MDlENDIwM0QxRTMxRjA1M0IxQzA0MjQwQ0MxCis6MTAyMDIwMDAwMjlCQzA0NjFDODcwODlCMUI2ODFCMTkxMDNCOUI3QkFGCis6MTAyMDMwMDAwMzlDNDAzNDIzNzAwMTMyMDc5QkMwNDZEOTgwNTExRTU3Cis6MTAyMDQwMDBDMzFENDkzMzE5NzAwNzYxMDQyQTA2RDIwNjQ5NTMwMDlCCis6MTAyMDUwMDAxQjE4OTk4MzAxMzIwNDJBRjlEMzA5QjBGMEJDMDhCQ0RCCis6MTAyMDYwMDAxODQ3MDAwMDRDMkEwMDgwRkZGRjAwMDA3MDQ3ODBCNTMxCis6MTAyMDcwMDA4Q0IwMDcxQzEyNDgwMTY4MDEzMTAxNjAzODY4QzA0NjA1Cis6MTAyMDgwMDAwMDkwNzg2OEMwNDYwMTkwQjg2OEMwNDYwMjkwMEQ0ODNDCis6MTAyMDkwMDA0MTY4Qzk2OEMwNDY0MTYwMzgxQzAwRjA0RkY4Qjg2ODE0Cis6MTAyMEEwMDA0MDA5MDZEMzEwMjMwMjk4MTg0MzAyOTA2ODQ2MDJGMEI0Cis6MTAyMEIwMDBFMUZGNjg0NjAyRjA5QUZFMENCMDgwQkMwOEJDMTg0N0VECis6MTAyMEMwMDAwQzJCMDA4MDZDMDYwMDgwMDBCNThDQjAwMTY4QzA0NjA3Cis6MTAyMEQwMDAwMDkxNDE2ODA1NEIxOTQzMDE5MTAwRjAyRkY4Njg0NkMzCis6MTAyMEUwMDAwMkYwODRGRTBDQjAwOEJDMTg0NzAwMDAwMDAwMDBBMEZECis6MTAyMEYwMDAwMjZBMDM2OEMwNDYxMzYwNDA2OEMwNDY1MDYwNDAzMkMwCis6MTAyMTAwMDA0ODY4QzA0NjkwODBDODY4QzA0NkQwODA0ODY5QzA0NkNDCis6MTAyMTEwMDAxMDgxODg2OEMwNDY1MDgxMDg3RUMwNDY5MDczMDg2OTY3Cis6MTAyMTIwMDBDMDQ2OTA4MTcwNDcwNDQ5MDg2ODAwMjgwMEQxNzA0Nzc0Cis6MTAyMTMwMDBDMjY4QzA0NjBBNjBGQUU3NkMwNjAwODAwMjQ5MEE2ODc1Cis6MTAyMTQwMDBDMDQ2QzI2MDA4NjA3MDQ3NkMwNjAwODBCMEI0MDAyMkQwCis6MTAyMTUwMDAxMjRGN0M3RjAxMzQ3Qzc3MDMyM0ZDMUQxOTM0Mzg2MkQ1Cis6MTAyMTYwMDA3OTYyMjM3MjBFNEMyNTY4NkIwQzA1RDIyMzY4MUIwQzE4Cis6MTAyMTcwMDAxMEQxMjQ2OEEzMEEwREQzMDEyMzBBNEZDMDQ2RkI2Mjg1Cis6MTAyMTgwMDAwOTRGMEE0QkMwNDZERjYwOTk2MDU4NjAxMDFDMTg2MDA4Cis6MTAyMTkwMDAwMTMyRkJFNzEwMUMzODY0MDEzMkZCRTcwMDAwMDA4MENECis6MTAyMUEwMDAwMDAwMTA0MEMwMDAxODAwMDI4MTAwMDA0MDAxMTgwMDJCCis6MTAyMUIwMDBGMEI1NDc0RjM4Njg0NzRFNDc0RDA3MjM1QjAyRUMxODkwCis6MTAyMUMwMDAwMDI4MUREMTIwNkIwMTMwMjA2MzQ0NDlDMDQ2MDg2MEJGCis6MTAyMUQwMDA0MzQ4NDE2OTAwMjkxM0QwQzExRDY5MzEwOTdCMDAyOTk5Cis6MTAyMUUwMDAwRUQwMDEyMzlCMDcwMTZEMTk0MzA5NjhDMDQ2ODE2MTI4Cis6MTAyMUYwMDBDMjY5OTE0MjA0RDBGMTZDMDEzMUYxNjQwMUYwNTBGRUVBCis6MTAyMjAwMDAzODY4MDEyODE3RDEzNzQ4NDE2OTAwMjkxM0QwQzExRDBBCis6MTAyMjEwMDA2OTMxMDk3QjAwMjkwRUQwMDEyMzlCMDcwMTZEMTk0MzA5Cis6MTAyMjIwMDAwOTY4QzA0NjgxNjFDMjY5OTE0MjA0RDBGMTZDMDEzMUY0Cis6MTAyMjMwMDBGMTY0MDFGMDM1RkUzODY4MDIyODJGRDFCQjIzMUIwMTYxCis6MTAyMjQwMDBFRTE4NzA3QjAwMjgwM0QwMDAyMDcwNzMwMEYwNEFGRDY4Cis6MTAyMjUwMDAzMDdCMDAyODAyRDA3ODY4MDJGMEFBRkYxQjIzREIwMTQ0Cis6MTAyMjYwMDBFODE4QzA4QjA0MjYwNjQwRTA2QUIwNDIxNEQwRjg2ODMzCis6MTAyMjcwMDAwMTMwRjg2MDE5MjgxMUQzMUI0ODAxN0IwMDI5MEREMUNBCis6MTAyMjgwMDBGRjMwNDEzMDQwNzgwMDI4MDhEMUI4NjgwMkYwOTBGRjU0Cis6MTAyMjkwMDAwMDIwRjg2MEU2NjIwMUUwMDAyMEY4NjAzODY4MDMyODVBCis6MTAyMkEwMDAwQkQxRUMxRDc5MzRFMDZCODAwODAyRDMwMjIwMDJGMEUwCis6MTAyMkIwMDAwN0ZDMDIyM0UwNkI5ODQzRTA2MzM4NjgwMTMwMzg2MDI0Cis6MTAyMkMwMDAwMzI4MDFEOTAwMjAzODYwRjBCQzA4QkMxODQ3MDAwMDgyCis6MTAyMkQwMDAzQzA0MDA4MEEwODIyMDQwNjgwRTAwODA0MDAxMTgwMDZECis6MTAyMkUwMDA2NDJEMDA4MEU0MkMwMDgwMjgwNTAwODBCMEI0MUQ0OEQ3Cis6MTAyMkYwMDA4NDhBMUQ0QTEzOEFDMTFEMDkzMTAxMjc5QzQyMDNEMURBCis6MTAyMzAwMDA0MzhBNTQ4QUEzNDIxMEQwMEI3ODAwMkIwREQwNEI3ODBGCis6MTAyMzEwMDAwMDJCMEFEMDQ0OEI5MzhBOUM0MjA0REMxMzRCQzA0NkFBCis6MTAyMzIwMDA1RjYwOTc4MjAxRTAwMTMzOTM4MkMzOEI1QzFDQzQ4MzlFCis6MTAyMzMwMDA4NDhCQTM0MjBFREI4NDhBMDU4QjAwMjNBQzQyMDVEQTMyCis6MTAyMzQwMDA0NDhBQzU4QUFDNDIwMURBNEI3MDAwRTA0RjcwNDM4Mjg4Cis6MTAyMzUwMDA4MzgyQzM4MzQxOEFDMDQ2NTE4MjgwOEFDMDQ2MTA4MkVDCis6MTAyMzYwMDBCMEJDNzA0N0U4MEUwMDgwM0MwNDAwODA0MDAxMTgwMEJCCis6MTAyMzcwMDBGN0I1OTFCMDZCNDY4NDFFMTI5OTE0MjkxQUQ5MDAyMDIyCis6MTAyMzgwMDA4MTAwNjc1OEMwNDY1NzUwMDEzMDAwMDYwMDBFMTAyOEUzCis6MTAyMzkwMDBGNkQzMDAyMTA1MjA4NzAwRDY1OTRGMUMzRDA2MkQwRThGCis6MTAyM0EwMDAwRjFDQkYwMERFNTEyOTFDMDEzMDAwMDYwMDBFMTAyODUyCis6MTAyM0IwMDBGMUQzMDlFMDAwMjA4MTAwNjM1OEMwNDY1MzUwMDEzMDNBCis6MTAyM0MwMDAwMDA2MDAwRTA2MjhGNkQzMDAyMEUwNzAyMDcyNjA3MjJFCis6MTAyM0QwMDBBMDcyMjA3MzYwNzMxMjk5MTQyOTM3RDk2OTQ2OEUxQzM0Cis6MTAyM0UwMDA5MTc4MDkwNzA5MEY4OTAwMTQzOTBEMDYyRDE2MDAyNzY5Cis6MTAyM0YwMDAwMDJEMUJEREYwMTkxMEE5MDBGMDNERjgwMDI4MEVEMENCCis6MTAyNDAwMDAwMDIwMTBBOTA5NzgwMDI5MDlERDAwMjIzOTE4NzI1NDJBCis6MTAyNDEwMDAwMTMwMDAwNjAwMEUxMEE5MDk3ODg4NDJGNkRCMTBBOEVBCis6MTAyNDIwMDAwMDc4MzgxODA3MDYzRjBFQUY0MkUzREI2ODQ2RTIxRDJFCis6MTAyNDMwMDAwRDMyMDAyMUFCMDg1RjFDMDhEMDhCMDBDNDU4QzA0Njg5Cis6MTAyNDQwMDBENDUwMDEzMTA5MDYwOTBFOEY0MkY2RDgxNEIwRjBCQzAxCis6MTAyNDUwMDAwOEJDMTg0NzkwQjQ4NzFFMDAyMDg5MDg0QjFDMDhEMDgwCis6MTAyNDYwMDA4MTAwNTQ1OEMwNDY3QzUwMDEzMDAwMDYwMDBFODM0MjYzCis6MTAyNDcwMDBGNkQ4OTBCQzcwNDc4MEI0MDI3OEQyMDZEMjBFMDAyMzAyCis6MTAyNDgwMDAwMTI3MDEyQTAxREMwRjcwMTFFMDQwNzhDMDQ2MDg3MDc2Cis6MTAyNDkwMDAxNDJBMDREMTA4NDgwMTdBMDEzMTAxNzIwN0UwMDIyQUE2Cis6MTAyNEEwMDAwNUQwMDUyQTAzRDAwNjJBMDFEMDE1MkEwMkQxMTgxQzBFCis6MTAyNEIwMDA4MEJDNzA0NzM4MUNGQkU3RTA4MjIwNDAwMEI1MEY0ODI1Cis6MTAyNEMwMDAwMTIzMUIwNjQxNjk5OTQzMUEwOTQxNjFEMTYwMDAyMTJBCis6MTAyNEQwMDBBMTIyNTIwMzkxNjExOTFDMDk0QUMwNDYxMTYwMUIyM0I1Cis6MTAyNEUwMDBEQjAxQzAxODgwNjkwMDI4MDNEMDAyRjA2MUZFMDhCQzNGCis6MTAyNEYwMDAxODQ3MDQ0ODQxODgwMTMxNDE4MEY4RTc2ODBFMDA4MEEwCis6MTAyNTAwMDAwMDAwMDBCMEUwODIyMDQwNzA0NzAwMDBGMEI1ODZCMEM3Cis6MTAyNTEwMDA5NTRBRDA2OEQ3MUQ3OTM3MDEyODA5RDEzODg5MDAyODE0Cis6MTAyNTIwMDAwNkQxRDA2RjAyMjMwMTY4OTk0MzAxNjAxNDIwMzg4MURECis6MTAyNTMwMDA4RTRDNjE2QThFNDhDMzZCNTkxOEMxNjNBMDZBMTkyMzE3Cis6MTAyNTQwMDBEQjAxRDQxOEEwNjIyMTZBMDkwMzA5MEI4MTQyMDVEMTdECis6MTAyNTUwMDAwMTIwNDAwNDg3NDlDMDQ2MDg2MEYzRTBCQjhBNTgxQzRDCis6MTAyNTYwMDBCODgyM0Q4QjAxMjAwMDIxQUI0MjA0REJEMzFEODkzM0FGCis6MTAyNTcwMDA1ODcwQjk4MkY5ODMzMzIzOUIwMUQzMTgwNTkzNUI2OUEzCis6MTAyNTgwMDAwRjJCNzNEMjAwMjE3QzRGQzA0NjM5NjEyMTZBOEE2OEMzCis6MTAyNTkwMDAxMjA0MTIwQzRCNjgxRTBDMzYwNEZEMUYwOTNEMDAyRTYwCis6MTAyNUEwMDAwNUQxM0IyQTAzRDMwMTIzREIwMjlBNDIwMUQ5QTg3MzQ4Cis6MTAyNUIwMDBDOEUwMDEyMzlCMDcwODMxMTk0MzA5NjhDMDQ2MDM5MTBECis6MTAyNUMwMDAwM0E5MDk4ODAxMzEwOTA0MDkwQzc5ODI0OTA5MDUzMUY3Cis6MTAyNUQwMDAwOTA2MDkwRTY5NEVDMDQ2MDI5NjY5NDg0MzZBQzA0NjFDCis6MTAyNUUwMDAwMTkzODM2QUMwNDYwMDkzQzIxRDExMzI4MDY5MDAwM0MzCis6MTAyNUYwMDAwMDBCOTI2OEIzMDcxQTQzMTI2ODkwNDIwMUQxMDEyMDgwCis6MTAyNjAwMDAwREUwOTA0MjA1RDkwMDlCMTgxQTAxOUJEMjFBODIxODNFCis6MTAyNjEwMDAwMEUwMTIxQTAxMjAwOTAxOTE0MjAwRDMwMDIwMDEyODk0Cis6MTAyNjIwMDA2NUQxNTE0OTIwNjkwMDI4NjJEMDA1OTk0ODY5MDEzMDc3Cis6MTAyNjMwMDA0ODYxMDIyMDIxNkFDMDQ2MDg2MDAwRjBBN0ZDNzg2MzY4Cis6MTAyNjQwMDBCRTYwNDk0OTIyNkFBMzZCRDMxODY2NkJCMzQyMDBEOUI2Cis6MTAyNjUwMDAyMjZCQzA0NkJBNjJCQTZBMEMzMkZBNjIwMDIyRkE2MTkwCis6MTAyNjYwMDAwM0FBNTI4OEQyMDkwM0QzMDEyMjAwRTA3QkUwMDBFMEY0Cis6MTAyNjcwMDAwMDIyN0E2MDdBNjhDMDQ2MDI2MDc4OEE0MTRFNjAyOEZCCis6MTAyNjgwMDAwNERDQjA4Mzc4OEFDMDQ2RjA4MzA4RTA2MDIwQjA4MzIxCis6MTAyNjkwMDA3OThBRjg2QTQyMTg2MzZCOUE0MjAzRDhGMTgzMDAyMjYwCis6MTAyNkEwMDAzQTYzMDVFMDIxNkJDMDQ2Mzk2MzYxNkIwODFBRjA4MzE5Cis6MTAyNkIwMDAyRDQ5Nzg2QjQyNjhDMDQ2QkE2MDgyNjhDMDQ2RkE2MEFECis6MTAyNkMwMDAwMjY5QzA0NjdBNjE0MDY5QzA0NkI4NjEyRTRCQzgxODlECis6MTAyNkQwMDAwNDkwMDBGMDM3RjkwNDk4MDBGMDg4RjgwMEYwRjZGQTVBCis6MTAyNkUwMDA3ODhBRjE4Qjg4NDIwNEQxRjk2QTA4MTgwNEUwMzhFMDRFCis6MTAyNkYwMDAzMkUwM0E2QjEwMTg0MDFBODEwNzAyRDA4MDA4ODAwMDNGCis6MTAyNzAwMDAwNDMwNjE2QjA5MUFBMjZCOTE0MjAwRDIyMDZCQzA0NjYzCis6MTAyNzEwMDAyMDYyRTg3QjAwMjgwOEQwMDAyMkVBNzMwNTk5NDg2OTA2Cis6MTAyNzIwMDAwMTM4NDg2MTc4NkIwMEYwNzNGQTE4NDg4MDZBODAwNkI3Cis6MTAyNzMwMDA4MDBFMDEyODBBRDEyMDZBMDAwMzAwMEIwQjRDQTE2QTBECis6MTAyNzQwMDA4ODQyMDNEMDA2QjBGMEJDMDhCQzE4NDcwMTIwNDAwNDAyCis6MTAyNzUwMDAwODQ5QzA0NjA4NjAwNkUwRTA2ODAwMjgwMUQwMDBGMEEzCis6MTAyNzYwMDBCNUZBMDEyMEE4NzNFREU3NjgwRTAwODAwMDQwMTQ0MDIwCis6MTAyNzcwMDBBNDJBMDA4MDAwMDAwMEIwMjgxQTAwODA1NTU1NTU1NTQ1Cis6MTAyNzgwMDBBODAzMDA4MDY4MUEwMDgwQzQwQjAwMDAwMDAwMTA0MEZECis6MTAyNzkwMDA4MEI1MDcxQzc4NkE0MDg5RkYyMTAxMzEwMTQwMTA0ODRCCis6MTAyN0EwMDAwMkQxODE2QzAxMzE4MTY0Nzk2QTQ5ODk0OTBCMDJEMjc1Cis6MTAyN0IwMDA0MTZDMDEzMTQxNjQwQjQ4NDE2QTAxMzE0MTYyNzg2QUUwCis6MTAyN0MwMDAzOTZCQzA0NjQ4NjIzODZCMDBGMEY4RkIzODFDMDBGMEVCCis6MTAyN0QwMDBCM0Y4MDEyMDA0NDlDMDQ2Qzg3MzgwQkMwOEJDMTg0NzQwCis6MTAyN0UwMDBBNDJBMDA4MEEwODIyMDQwMTgxQTAwODBGOEI1MDcxQzk3Cis6MTAyN0YwMDAwMDIyRjkxRDYxMzEwRDFDNzg2QUMwNDYwMDkwNDA4OUE1Cis6MTAyODAwMDAwMzBDMDFEMjQwMEEwM0QyMzgxQ0ZGRjdDMUZGNjdFMDc2Cis6MTAyODEwMDAzNTQ4QzA2QjAwMDkxRkQzMDg3ODQwMDgxQ0QyMDAyMDNGCis6MTAyODIwMDA0MzAwQ0M1QTMxNEU5RTE5MzMyMzlCMDFGMzE4MUI4ODY5Cis6MTAyODMwMDA5QzQyMEVEMEI4NjkzOTZCQzA0Njg4NjFGODY4Mzk2QjI0Cis6MTAyODQwMDBDMDQ2Qzg2MDM4MUMwMEYwMjdGOTM4MUMwMEYwNzRGODQ2Cis6MTAyODUwMDA0NkUwMDEzMDAzMjhFM0RCMDIyMDQzMDA1QzE4RTQ4OEYzCis6MTAyODYwMDAyMjRFOUUxOTMzMjM5QjAxRjMxODFCODg5QzQyMDNEMUVGCis6MTAyODcwMDAwMTIzMDEzOEQ4NDJGMERDMDEyM0Q4NDJDNEQwMUI0RURBCis6MTAyODgwMDAwQjIzMUIwMkYwMTg0MDY5MDAyODI0RDA3RDYzMDA5OEI4Cis6MTAyODkwMDA0MDg5MDAwQzFGRDIwMDI0MkQyMzlCMDFGMDE4QzA2QjJGCis6MTAyOEEwMDAzNTFDMDAyODE3RDBGRTFEMkQzNkEyMDA1MjE5MkQyM0VECis6MTAyOEIwMDA5QjAxRDIxOEQyNkIzODFDMzExQzAyRjA3QkZDMDEyODIyCis6MTAyOEMwMDAwRUQwMDEzNEEwMDA0MDE5MkQyMzlCMDFDMDE4QzA2QjBECis6MTAyOEQwMDAwMDI4RUFEMTAxRTAwMTJBMDJEMDM4MUMwMEYwMDhGOEYzCis6MTAyOEUwMDBGOEJDMDhCQzE4NDcwMDAwRTgxQTAwODA2ODBFMDA4MDk5Cis6MTAyOEYwMDA4MEI1MDcxQ0I4NjkzOTZCQzA0Njg4NjFGODY4Mzk2QkM4Cis6MTAyOTAwMDBDMDQ2Qzg2MDc4NkE0MDg5MDEwQzBFRDI0MDBBMENEM0Q4Cis6MTAyOTEwMDAzODY4NDAwODAyRDMzODFDMDJGMDBDRkMzODFDMDBGMDY4Cis6MTAyOTIwMDBCQkY4MzgxQzAwRjAwOEY4MDJFMDM4MUNGRkY3MzBGRjU1Cis6MTAyOTMwMDAwMTIwODBCQzA4QkMxODQ3MDEyMTAwNkI0MDZBQzA0NkRBCis6MTAyOTQwMDAwMTYwNzA0N0IwQjRDMTFEMzkzMTA5OEI4OTA4MDkwNDkxCis6MTAyOTUwMDAwOTBDODQ2QUMyMUQ2MTMyMDAyMDAwMjkwQ0REODcwMDQ5Cis6MTAyOTYwMDAzRDE5MDEyMzlCMDcyQjQzMUI2OEMwNDZEMzUxMDEzMEZGCis6MTAyOTcwMDAwMDA0MDAwQzg4NDJGMkRCQjBCQzcwNDdGMEI1QTBCMDk4Cis6MTAyOTgwMDAwMTIzOUIwN0MxMUQyMTMxMTk0MzA5NjhDMDQ2MEI5MUUyCis6MTAyOTkwMDBDMTFENTMzMTE5NDMxRjkxMDk2ODAxQUZGQTFEMzkzMjI2Cis6MTAyOUEwMDAxRTkyMTdBQjU5ODAzQTQ5MDEyMzlCMDcwQTZBMTM0M0M5Cis6MTAyOUIwMDBDQzFEMTEzNDg5NjkwOTAzMDkwQjIyNjlFNTY4QzA0NkY5Cis6MTAyOUMwMDAxRDk1RkMxRDM5MzQ2NDhCNjQwOTA1MzQyNDA2MjQwRURFCis6MTAyOUQwMDAxQzk0NTYxQTFCOTYxQzlDMkU0QUMwNDYwMDkyMDEyNjM3Cis6MTAyOUUwMDAxRDlEMUE2ODkxNDIwMUQxMzIxQzBCRTA5MTQyMDNEOTFFCis6MTAyOUYwMDA1MjFCMUI5RUI1MTgwMEUwNTUxQTAxMjIyNDAxQUM0MjVGCis6MTAyQTAwMDAwMEQzMDAyMjAxMkFFNkQxOTEwNzAxNDMwOTY4QzA0NjlDCis6MTAyQTEwMDAzOTYwOTMwNzAxMUQxOTQzMDk2OEMwNDY3OTYwQzExRERCCis6MTAyQTIwMDAwMTMxMTk0MzA5NjhDMDQ2Qjk2MDFGOTkwOTY4MUU5QUE3Cis6MTAyQTMwMDBDMDQ2NTE4M0MxMUQxRDMxMTk0MzA5NjhDMDQ2Mzg2MzIyCis6MTAyQTQwMDA3OTYyQzExRDExMzExOTQzMDk2OEMwNDZCOTYxQzExREMwCis6MTAyQTUwMDAwNTMxMTk0MzA5NjhDMDQ2Rjk2MEMxMUQxNzMxMTk0MzkyCis6MTAyQTYwMDAwOTY4QzA0NkY5ODMwRTMwMTg0MzAwNjhDMDQ2Rjg4MUYzCis6MTAyQTcwMDAzODY4NDAwODAyRDMzODFDMDJGMDVDRkIzODFDMDBGMEI4Cis6MTAyQTgwMDAwQkY4MzgxQ0ZGRjc1OEZGMjBCMEYwQkMwOEJDMTg0NzAzCis6MTAyQTkwMDBBODAzMDA4MDU1NTU1NTU1RjhCNTA3MUNGODFEMzkzMDY5Cis6MTAyQUEwMDA0MThCMzk0QTkxNDIwMERENDI4MzQyOEJDMDQ2MDA5MkZECis6MTAyQUIwMDAwMTIwM0ExRDA2Q0FCQjZBMDJGMDBFRkYzMzRBQzA0NjI3Cis6MTAyQUMwMDAwMDkyMzM0RTMwNkEzMzRDRTE2RDQxMTgzODZCQzMxREIwCis6MTAyQUQwMDAwNTMzMDEyMDcyNkEwMkYwRkJGRUUwNkQxODMwMDAyNTFDCis6MTAyQUUwMDBCMTZBODE0MjAxRDhFNTY1MDBFMEUwNjUyRjIzOUIwMUQyCis6MTAyQUYwMDAyMDFDRTE2REU0MTgyMjY4OTIwMDI3NEJDMDQ2OTk1MEQzCis6MTAyQjAwMDAyNjQ4QzE2QjRBMDgwNUQzNDkwODQ5MDBDMTYzMDEyMDIyCis6MTAyQjEwMDAwMUYwRDZGRjIyNEExRjQ4QzExRDg5MzEwQjc4MDAyQkQ2Cis6MTAyQjIwMDAwMkQwNDk3ODAwMjkwMEQxMUU0QUMwNDYwMDkyMjA2ODkwCis6MTAyQjMwMDA4MDAwMTk0QkMzMTgwNUNFQzExRDExMzEwMTIwMDJGMEQwCis6MTAyQjQwMDBDN0ZFMTQ0ODIxNjgwMTMxMjE2MDE3MjkwMEQzMjU2MDkwCis6MTAyQjUwMDAzOTZCQzA0NjBENjU3OTZBM0E2QkMwNDY1MTYyMzMyM0MyCis6MTAyQjYwMDA5QjAxQzAxODgxNjgwMDI5MDNEMTM5NkJDMDQ2ODE2MDgwCis6MTAyQjcwMDAwNEUwMzk2QkMyNjhDMDQ2MTE2NTM5NkJDMDQ2QzE2MDVDCis6MTAyQjgwMDBGOEJDMDhCQzE4NDcwMDAwRUEwNTAwMDAxODAwMTQwMjUxCis6MTAyQjkwMDA3QzI5MDA4MDY4MEUwMDgwNDQ4MjIwNDBFODBFMDA4MDdFCis6MTAyQkEwMDAwNDAwMDAwMjA0MDAwMDAzRjBCNTExNEVGRjI1MDEzNUJBCis6MTAyQkIwMDAxMDRGQzA0NjM1NjA3ODY5MDEzODc4NjFCQzY4MDAyQ0Q4Cis6MTAyQkMwMDAxMEQwMjA2REMwNDZCODYwMjAxQzAwRjAyMUY4MjAxQ0Y5Cis6MTAyQkQwMDAwMEYwMDRGQTA4NDg4MDZBMDAwQzAwMDdFOUQxRjBCQzU0Cis6MTAyQkUwMDAwOEJDMTg0NzA1NDhDMTc5MDEzMUMxNzFGN0U3MDAwMEY5Cis6MTAyQkYwMDAwMDAwMDBCMDI4MUIwMDgwMDAwMDEwNDBBMDgyMjA0MDkwCis6MTAyQzAwMDAwMTIwODAwMzAxNDlDMDQ2MDg2MDcwNDcwMDAwMDBCMDAxCis6MTAyQzEwMDA5MEI1MDcxQzM4NjhDMDA4MDlEMzFENDgwMTZBMDEzOUZFCis6MTAyQzIwMDAwMTYyMjAzMDAwNzkwMDI4MDFEMEZFRjdFOUZEMDEyMzgwCis6MTAyQzMwMDA5QjA3RjgxRDFEMzAxODQzMDA2ODE2NEM2MTZBODE0MkRECis6MTAyQzQwMDAyMUQxMDExQzE5NDMwOTY4MDkwNDA5MEMwMTI5MUFEMTcxCis6MTAyQzUwMDAwMEYwMjJGODYwNjI2MDZBMjE2QTg4NDIwNUQwMDEyMTkyCis6MTAyQzYwMDA4OTA3MDE0MzA5NjgwOTA0RjJEMDUxMjE4OTAzNjI2QTg2Cis6MTAyQzcwMDAyMzZCOUE0MjAyRDE2MDZCQTI2QjgwMUEwNDM4Qzg2MDQxCis6MTAyQzgwMDA5MEJDMDhCQzE4NDcwMDIwNzk2QUMwNDYwODYwRjdFNzg2Cis6MTAyQzkwMDA2QzA2MDA4MEU4MUEwMDgwMDEyMzlCMDdDMTFEMDEzMUVBCis6MTAyQ0EwMDAxOTQzMDk2ODA5MDQwOTBDMDgxODBEMzA4MTA3MDJEMDdFCis6MTAyQ0IwMDA4MDA4ODAwMDA0MzAwNDQ5OEE2QjEyMTg0QjZCOUE0MkRBCis6MTAyQ0MwMDAwMEQ5MDg2QjcwNDcwMDAwRTgxQTAwODAwMEI1MDQ0ODdFCis6MTAyQ0QwMDBDMDY4MTAyODAxRDMwMEYwMDVGODA4QkMxODQ3MDAwMEIwCis6MTAyQ0UwMDBFODFBMDA4MDg4QjUwQzRGMzg3OTAwMjgxMUQxMEI0OUJCCis6MTAyQ0YwMDAxMDIwMDJGMEY1RkQwMDI4MEJEMDAxMjAzODcxMDg0QUExCis6MTAyRDAwMDBDMDQ2MDA5MjA3NDg0MjY4MDc0QjAxNjgwMDIwMDJGMDY1Cis6MTAyRDEwMDBERkZEODhCQzA4QkMxODQ3RjgxQTAwODBGNTJDRkZGRkJGCis6MTAyRDIwMDAxMDAwMzUwMjdDMjkwMDgwNDQ4MDIwNDA5MEI1MDEyMEFECis6MTAyRDMwMDA0MDAyMTA0OUMwNDYwODYwMEY0RjEwMjFGODFEM0QzMDc5Cis6MTAyRDQwMDAwMkYwNENGQzE5MjNEQjAxRkMxOEUwNjgwMDI4MDFEMERDCis6MTAyRDUwMDAwMEYwMTRGODAwMjBDOTIzMUIwMUY5MTgwODcxRTA2ODdECis6MTAyRDYwMDAxMDI4MDREMzAxMjBCQjIzMUIwMUY5MTg0ODczOTBCQzIxCis6MTAyRDcwMDAwOEJDMTg0NzAwMDAwMEIwNjgwRTAwODBGOEI1Mzc0ODVFCis6MTAyRDgwMDAxOTIzREIwMUMxMThDOTY4MzU0RDEwMjkwMEQ5MTAyMTVDCis6MTAyRDkwMDA2OTYyMzI0OEMxNkMwMDZFODE0MjA3RDkwODFBMDcwOTdFCis6MTAyREEwMDAwMDI0Njg2QUI4NDIxMkQyMDcxQzEwRTA4MTQyMkFEMjdECis6MTAyREIwMDAyQzRBNTI2QjEwMUEwNzA5Njg2QUI4NDIwNUQ5MEMwOUU3Cis6MTAyREMwMDAzOTE5ODg0MjAzRDJDNDFCMDFFMDAwMjQwNzFDM0UxOUI0Cis6MTAyREQwMDAzMDAxMjU0OTAyRjA4NEZEMDAyODNERDAyMzQ4MDAyQzE1Cis6MTAyREUwMDAxQUQxMUU0OTNBMDE2RjYyMDk2RThDMTgxRDRENkI2QjJBCis6MTAyREYwMDBBMzQyMDBEOEU0MUExRTRCMUE0MzAwOTJFQTZBNTExODAzCis6MTAyRTAwMDAyQTZCMDMxQzIwRTAxQjQ4MDE2QjAxMzEwMTYzMDAyMDg5Cis6MTAyRTEwMDA2ODYyRjhCQzA4QkMxODQ3MTA0OTI0MDEzRjAxMTEyMjIwCis6MTAyRTIwMDA1MjA1M0E0MzZFNjIwMDkyMEU0REVBNkEwOTZFNTExOERECis6MTAyRTMwMDAwMzFDMDYxQzAwMjAyQTZCMDJGMDRBRkQwQzRBMjI0M0E4Cis6MTAyRTQwMDAwMDkyQkIxOUU5NkEyQTZCMDAyMDAyRjA0MUZEMDM0ODk5Cis6MTAyRTUwMDBDMDQ2MDQ2NjAwRjAxMEY4MDEyMERBRTc2ODBFMDA4MDMyCis6MTAyRTYwMDAyODFCMDA4MDdDMjkwMDgwNUQyRUZGRkY0NDgwMjA0MENECis6MTAyRTcwMDAwMDAwMzYwMkEwODIyMDQwMDQ0ODAxNkUwNDRBODAzMERGCis6MTAyRTgwMDBEMTYwMDIyM0MxNkIxOTQzQzE2MzcwNDc2ODBFMDA4MDkzCis6MTAyRTkwMDA5MEVFMjA0MEYwQjU4NEIwMDEyMDgwMDIxQzQ5QzA0NjZECis6MTAyRUEwMDAwODYwMDAyNzFCNEUzMzIzOUIwMUY1MTg2ODZBMDAyODMxCis6MTAyRUIwMDAxREQ5MTk0QzY4NDYxMDIxMDJGMDkwRkI2ODQ2MDBGMEJECis6MTAyRUMwMDAzM0Y4MDAyODA0RDAxNTQ5NDg2OTAxMzA0ODYxMEFFMDA4Cis6MTAyRUQwMDAxMzQ5NjA3QjAxMzA2MDczODg3OTAxMzA4ODcxMTE0ODMzCis6MTAyRUUwMDAwMDY4MDJGMDY1Rjk2ODZBMDEzN0I4NDJFMkQ4QkIyMzhFCis6MTAyRUYwMDAxQjAxRjAxODgxN0IwMDI5MDNEMDAwMjE4MTczRkZGN0FCCis6MTAyRjAwMDAwNUZCRkZGN0UzRkUwNEIwRjBCQzA4QkMxODQ3MDAwMDY3Cis6MTAyRjEwMDAwMDAwMDBCMDY4MEUwMDgwQjA4MjIwNDAwODgzMjA0MDhFCis6MTAyRjIwMDBBMDgyMjA0MDU4MDQwMDgwOTBCNDE3NEYxOTIzREIwMTgxCis6MTAyRjMwMDBGOTE4MDAyMkNCNjgwMDJCMjNEMDAxM0JDQjYwMzMyMzUwCis6MTAyRjQwMDA5QjAxRkYxOEJCNjkxQzZEQzA0NkJDNjEwNDY4QzA0NjhDCis6MTAyRjUwMDA1QzYwNDQ2OEMwNDY5QzYwODQ2OEMwNDYxQzYxQzA2ODcwCis6MTAyRjYwMDBDMDQ2NTg2MTFBNjUwODY5NDIxQzBBNjEwMDI4MDNEMEVFCis6MTAyRjcwMDAzODZBQzA0NjAzNjUwMEUwRkI2MTNCNjIxODFDOTBCQ0U4Cis6MTAyRjgwMDA3MDQ3MTAxQ0ZCRTcwMDAwNjgwRTAwODAwQTRBMzMyM0RDCis6MTAyRjkwMDA5QjAxRDExOEM4NjkxOTIzREIwMUQyMTgxMzY5MDAyQkQyCis6MTAyRkEwMDAwNkQwMDEzQjEzNjFDQTY5MTI2REMwNDZDQTYxNzA0NzAxCis6MTAyRkIwMDAwMDIxMTE2MUZCRTcwMDAwNjgwRTAwODAwNjRBMTE2OURDCis6MTAyRkMwMDA0QjFDMTM2MTQwMzIwMDI5MDFEMEQxNjkwMEUwMDAyMTdGCis6MTAyRkQwMDAwMTY1RDA2MTcwNDcwMDAwRTgxQTAwODAwNjRBRDE2ODk4Cis6MTAyRkUwMDA0QjFDRDM2MDQwMzIwMDI5MDFEMDkxNjkwMEUwMDAyMUUwCis6MTAyRkYwMDAwMTY1OTA2MTcwNDcwMDAwRTgxQTAwODA5MEI0MDAyMURDCis6MTAzMDAwMDAwRjRBOTc4OTkyNkE0QjAwMUIxODlCOEEwMDJCMTJEMDlCCis6MTAzMDEwMDBCQjQyMTBEQzFDMUM1ODIzNjM0M0QzMThEQzFGNDkzQzAzCis6MTAzMDIwMDAwMTIzOUIwNzIzNDMxQjY4MUIwNjFCMEUwMzJCMDJEMEE3Cis6MTAzMDMwMDAwMDIwOTBCQzcwNDcwMTMxMDQyOUU0RDMwMTIwRjhFNzU3Cis6MTAzMDQwMDA0QzJBMDA4MEY3QjU4NkIwM0Q0QTA3MUNEMTY5OEY0MEY1Cis6MTAzMDUwMDAwMzFDMTQ2QUUzNDA1RjQwMDc5RThFNDA3NzQwQ0Y0MEQ4Cis6MTAzMDYwMDA5NDY5QzA0NjA1OTQwMzFDQTM0MDAwMjUxNDY5QzA0NjFBCis6MTAzMDcwMDAwNDk0MDAyQzVERDkxQzFDMzI0RTI2NDM5NDY5RTY0MDEyCis6MTAzMDgwMDAzMzFDMDM5NjUzNkFDMDQ2MDI5M0QyNkFDMDQ2MDE5MjJCCis6MTAzMDkwMDBCQjAwMDI5QUQyNTgxMzFDMDU5Q0UzNDAwMzlDQTM0MjM4Cis6MTAzMEEwMDAzRUQxOEE0MENBNDAxNDFDNjMwMDFCMTk1QjAxMDE5QTdGCis6MTAzMEIwMDBEMjE4MDEyMzlCMDdENjFEMDEzNjMzNDMxQjY4MUIwNjFDCis6MTAzMEMwMDAxQjBFMDMyQjJDRDEwMTIzOUIwN0Q2MUQ1MTM2MzM0M0Y2Cis6MTAzMEQwMDAxQjY4MDc5RTFFNDAwMDk2MDEyMzlCMDdENjFENDkzNjlDCis6MTAzMEUwMDAzMzQzMUI2ODgzNDIxQkQxMDEyMzlCMDdENjFENEQzNkZBCis6MTAzMEYwMDAzMzQzMUI2ODAwOUVCMzQyMTJEMTAxMjM5QjA3MUE0MzNFCis6MTAzMTAwMDAxMjY4MTIwNDEyMEMwODlCMzIyQjA0RDEwMjJBMDdEMTM4Cis6MTAzMTEwMDAyMDA0MDAxNDBGRTAwODlCMzMyQjAxRDEwMTJBRjdEMEMzCis6MTAzMTIwMDAwNDlBMDEzNzk3NDIwMEQzMDAyNzA0OUEwMTM1QUE0MjM2Cis6MTAzMTMwMDBBRUQ4MDAyMEMwNDMwOUIwRjBCQzA4QkMxODQ3MDAwMDVFCis6MTAzMTQwMDA0QzJBMDA4MDAwMDAwMDgwRjBCNTI3NEQ2ODY5MDAyOEY3Cis6MTAzMTUwMDAwNkQwMjY0ODAwNjgwMkYwMkJGOEYwQkMwOEJDMTg0N0RGCis6MTAzMTYwMDAyMzRDMDAyNkEwNjgyMzRGMDAyODE2RDAwRkUwMjg2QUMxCis6MTAzMTcwMDAwMjI4MDJEMzAxMjAzODcxMEZFMEE2NjBGREY3REVGRUMxCis6MTAzMTgwMDAwMDI4RUFEMTI4NkEwMjI4MDFEMzAxMjAzODcxRTg2OEIyCis6MTAzMTkwMDAwMDI4MDJEMDM4NzkwMDI4RTlEMDY4NjgwMDI4MUJEMEMwCis6MTAzMUEwMDAwMTIwQTA2MEZFRjdCQ0ZCMDAyOEQ2RDE2ODY4MDAyODhCCis6MTAzMUIwMDBGNkQxMTFFMDAwMjhEMEQxMjg2QTAyMjgwMkQzMDEyMERDCis6MTAzMUMwMDAzODcxQ0FFN0E2NjBGREY3QjlGRTAwMjhDNUQxMjg2QUE0Cis6MTAzMUQwMDAwMjI4MDFEMzAxMjAzODcxRTg2ODAwMjhCREQwMzg3OTcxCis6MTAzMUUwMDAwMDI4RTdEMEI5RTcwMDAwNkMwNjAwODA1QzA0MDA4MDhFCis6MTAzMUYwMDA0QzJBMDA4MDhDMDYwMDgwNzA0NzAwMDA3MDQ3MDAwMDU5Cis6MTAzMjAwMDA3MDQ3MDAwMDkwQjU0MDIwMUQ0OUMwNDYwODYwMDFGMDlECis6MTAzMjEwMDA5REZDMDMyMzFCMDc0MTY4MTk0MDBDMEY2MTAxMDkxQjJBCis6MTAzMjIwMDA4OTAwMTg0QThGMTgwMTIxMzk4MDgxNkFDMDQ2Nzk2NTYyCis6MTAzMjMwMDA0MTZBQzA0Njc5NjdCOTZDRkE2Qzg5MThCOTY0MDAyMTkzCis6MTAzMjQwMDBGOTY0QkE2QjNCNkREMjE4QkE2MzM5NjU0MjZBMjAzMkIxCis6MTAzMjUwMDA1MTcxNzk2RDdBNkZEMjZEQzA0NjExNjBGQ0Y3Q0FGRjZCCis6MTAzMjYwMDAyMDAxMDk0OTQwMTgxOTIzREIwMUMwMTg0MTZCMDEzOUJECis6MTAzMjcwMDA0MTYzNzg2RjAxRjBDNkZCOTBCQzA4QkMxODQ3MDAwMEEyCis6MTAzMjgwMDAwMDAwMDBCMDVDMkIwMDgwQTAxQzAwODBGMEI1NDAyMDQ2Cis6MTAzMjkwMDAxMjQ5QzA0NjA4NjAwMUYwNTlGQzA3MUM0MDY4MDMyMzJFCis6MTAzMkEwMDAxQjA3MTg0MDA2MEY3MDAxODAxQjgwMDAwQzQ5NDQxODUyCis6MTAzMkIwMDBCODZBQzA0NjYwNjU3ODZBQzA0NjYwNjc4MDZGMDUxRDYxCis6MTAzMkMwMDBFNTYzQjk2OTI4MUMwMkYwODlGOTM4MUMyMTFDMzIxQ0ZECis6MTAzMkQwMDAyQjFDMDBGMDIwRjhGMEJDMDhCQzE4NDcwMDAwMDBCMDIwCis6MTAzMkUwMDA1QzJCMDA4MEYwQjU0QjZGOUI2RjFGMURDRjYzMDU2ODkzCis6MTAzMkYwMDAwMDIzODQ2OUE0MDgwOEQwOUMwMDJFNTlDMDQ2M0U1MTgyCis6MTAzMzAwMDA4NDY5QTQwODAxMzM5QzQyRjZEODNCMUMwMEYwMDNGODAyCis6MTAzMzEwMDBGMEJDMDhCQzE4NDdGRkI1ODFCMDA0MUMxRDFDMEYxQzc1Cis6MTAzMzIwMDA0NjQ4MDE2OTAxMzEwMTYxRjkxRDUxMzFCRDY1MDA5MUM2Cis6MTAzMzMwMDAyMDFDRkRGNzVERkNGODZENDAwOTM2RDJCODZEMDY3QkE4Cis6MTAzMzQwMDA0MzdCMUIwMjFFNDMxNzIxNDkwMjAxNzMwQjBBNDM3MzdGCis6MTAzMzUwMDAwMDk5MjAxQ0ZERjc0Q0ZDQjg2REMwNDYwNjczMzMwQTdCCis6MTAzMzYwMDA0MzczRjg2RDQwMDkyMEQyNjA2ODAxMDQwOTBDMDM5ODhBCis6MTAzMzcwMDAwMUYwQ0NGQzYwNjgzMjRCMTg0MzYwNjAyMDFDMDFGMDA3Cis6MTAzMzgwMDAzNUZEMDAyNTdENjBCRDYwM0Q2NDdENjQyMDFDRkNGNzNCCis6MTAzMzkwMDAzMUZGMzg4ODQwMjMxODQzMzg4MDdENjIyOTQ4QzA0NjcxCis6MTAzM0EwMDBCODYyMzgxQzAwRjBBMEZCNDRFMDIwNjgwMTIzOUIwN0IyCis6MTAzM0IwMDAwODM4MTg0MzAwNjhDMDQ2Nzg2NDYwNjgwMjA0MTIwQzNDCis6MTAzM0MwMDA3ODZFMDEyNkMxMUQwRDMxOEE0MjAyRDIzQTY0MDgxQzcyCis6MTAzM0QwMDAwRUUwNDExOTg5ODlGMDIzMTk0MDA5MDk4OTAwNDAxODM0Cis6MTAzM0UwMDBGODYwRjk2MTYxNjgwOTA0MDkwQzgxNDIxNkQyMzk2NEY4Cis6MTAzM0YwMDA2MzY4MTkwNDA5MEM0MDFBMDMzMDgwMDg4MjAwQTA2MTM4Cis6MTAzNDAwMDAyMDY4MDkxODlCMTg2MzYwQzMxRjA1M0IzODFDMDBGMDM3Cis6MTAzNDEwMDBCNkZBN0U4MDIwMUMwMEYwQkZGQjBCRTBCOTY4MDgxQUVBCis6MTAzNDIwMDAwMDI1Nzg2MkJENjIzODFDMDBGMDNDRkMyMDFDMzkxQzcxCis6MTAzNDMwMDAwMEYwNjRGODA1QjBGMEJDMDhCQzE4NDcwQzJCMDA4MDA1Cis6MTAzNDQwMDAwMDAwMDA4MDAxMDAwMEMwRjBCNTA0MUMwRjFDMzg2Q0E3Cis6MTAzNDUwMDBGOTZCMEQxODIxNjg0MTE4MDAyMEEyNjkwMDJBMEJEOUM4Cis6MTAzNDYwMDA4MjAwNTYxODAxMjM5QjA3MzM0MzFCNjhDMDQ2QUI1MEFDCis6MTAzNDcwMDBBMjY5MDEzMDgyNDJGM0Q4Nzg2RUY5NkIwOTE4ODk4OTA0Cis6MTAzNDgwMDBGMDIzMTk0MDA5MDk4OTAwNDAxOEY4NjBGOTYxMjA2OEEzCis6MTAzNDkwMDAwMTIzOUIwNzA4MzgxODQzMDE2ODc4NkNGQ0Y3OTVGRkY3Cis6MTAzNEEwMDA3ODY0NjA2ODAxMDQwOTBDRjg2ODgxNDIxOUQyMzk2NEIzCis6MTAzNEIwMDA2MzY4MTkwNDA5MEM0MDFBMDMzMDgwMDg4MjAwQTA2MTc3Cis6MTAzNEMwMDAyMDY4MDkxODlCMTg2MzYwQzMxRjA1M0IzODFDMDBGMDc3Cis6MTAzNEQwMDA1NkZBMDEyMDc4ODAyMDFDMDBGMDVFRkJGMEJDMDhCQzhFCis6MTAzNEUwMDAxODQ3Qjk2ODA4MUE3ODYyMDAyMEI4NjIzODFDMDBGMEUyCis6MTAzNEYwMDBEOUZCMjAxQzM5MUMwMEYwMDFGOEVGRTdGMEI1ODRCMENGCis6MTAzNTAwMDAwNDFDMEYxQzhFNDg0MTY5MDEzMTQxNjEwMzIwMDAwN0YyCis6MTAzNTEwMDA2MTY4MDg0MDA2MEYwQTA0MTIwQzIwNjgxMTE4RkI2ODQ1Cis6MTAzNTIwMDBEMjFBN0I2ODlEMUFDMzFGMDUzQjM4MUMyQTFDMDBGMDY5Cis6MTAzNTMwMDAyNkZBMDAyMDc4ODAyMDFDMDBGMDJFRkI2MDY4NDAxOURECis6MTAzNTQwMDAwMTA0MDkwQzYwNjAzMDFDMDFGMEUwRkI3RDRFMEIyMzkwCis6MTAzNTUwMDAxQjAyRjAxODAwNjkwMDI4MTlEMDAwMjUyRDIzOUIwMUJCCis6MTAzNTYwMDBGMDE4QzA2ODAwMjgxMkQwQUEwMDkyMTkyRDIzOUIwMUUwCis6MTAzNTcwMDBEMjE4RDI2ODIwMUMzOTFDMDFGMDFDRkUwMTM1QTgwMEFECis6MTAzNTgwMDA4MDE5MkQyMzlCMDFDMDE4QzA2ODAwMjhFQ0QxRjg2QjZFCis6MTAzNTkwMDAwMTFGOEExQ0ZBNjNGQTY4N0Q2QzAwRjBCQkY5QzA0MzE2Cis6MTAzNUEwMDAwMTA0MDkwQzI4MUNGQ0Y3MTBGRjAzOTBGOTZCM0E2RTFDCis6MTAzNUIwMDA4RTE4MjA2ODEyMTgwMTkyN0E2RThEMTgxMTE4MDI5MUQ3Cis6MTAzNUMwMDBDODFEMDkzMEUwNjBCMTg4MDgwMjA5MEEwOTA2MDkwRTIxCis6MTAzNUQwMDAwODQzMDAwNDAwMEM3ODYxNjg2ODAxMEVGRjIyMTIwNEExCis6MTAzNUUwMDAwMjQwMTIwQTExNDNGRjIyMTIwMjAyNDAxMjAyMTE0MzRBCis6MTAzNUYwMDAwMDA2MDg0MzM4NjFBODg5MDkyMzFCMDIxODQwQjg2MUY2Cis6MTAzNjAwMDBBODg5OTg0M0E4ODFBODg5MDI5OUMwNDY4ODgxMDAyMDhBCis6MTAzNjEwMDA3MDgwQjA4MDcwODE2ODYwMjg4MkI5NkUzMDFDRkNGN0MxCis6MTAzNjIwMDBFOEZFMzg4NkZBNjkzMDFDMjkxQ0ZDRjcwM0ZGNzg4NjBGCis6MTAzNjMwMDAzRDhFNzg4RTAzOTlGQ0Y3QzhGRTAwOTA2MDY4MDAwNDA4Cis6MTAzNjQwMDAwMDBDMzk2RTQxMUEwOTA0MDkwQzdBNkU4MjFBMTMwNEFGCis6MTAzNjUwMDAxQjBDMUEwMjFCMEExQTQzMTYwNDM2MENCQTY4ODI0MjYzCis6MTAzNjYwMDAwMUQyMDAyMDAwRTAxMDFBQjg2MDA4MDIwOTEyMDkwNjExCis6MTAzNjcwMDAwOTBFMDg0MzAxMDQwOTBDMDE5OEMwNDY0MTgwMjgxQzJBCis6MTAzNjgwMDBGQ0Y3QTNGRTA1MUMwMDk4MzExQ0ZDRjc5RUZFMDYxQ0VGCis6MTAzNjkwMDA3ODY5MDAwNDAwMEMwMTAyMDAwQTA4NDMwMTA0MDkwQ0M3Cis6MTAzNkEwMDAwMTk4QzA0NjgxODAyODFDRkNGNzhGRkU3OTY5MDEzMUEyCis6MTAzNkIwMDBDMDQzNzk2MTAxOUFDMDQ2NTA4MTM4NjkwMTBFRkYyMkVBCis6MTAzNkMwMDAxMjA0MDI0MDEyMEExMTQzRkYyMjEyMDIwMjQwMTIwMkE3Cis6MTAzNkQwMDAxMTQzMDAwNjAxNDMzMDFDRkNGNzc3RkUzOTY5N0E2ODE0Cis6MTAzNkUwMDA4OTE4Mzk2MUI5NjgwMDI5MDlEMTAyOTk4OTg5QkE2OUFCCis6MTAzNkYwMDAxMTQzMDI5QUMwNDY5MTgxQjk2OUZDRjc2NkZFMjA4MkE3Cis6MTAzNzAwMDAwMDIwNjA4MkY4NkQ0MTA4MTZEMzgwMEEwQUQzNjA2OEYxCis6MTAzNzEwMDAxMDM4MDEwNDA5MEMwODAyMDkwQTA4NDMyMTY4QzA0NjUwCis6MTAzNzIwMDAwODgyMDlFMDYwNjgwQzM4MDEwNDA5MEMwODAyMDkwQUUzCis6MTAzNzMwMDAwODQzMjE2OEMwNDY4ODgxMDRCMEYwQkMwOEJDMTg0NzIzCis6MTAzNzQwMDAwQzJCMDA4MDY4MEUwMDgwRjFCNTg0QjA2RTREMjg2OUE2Cis6MTAzNzUwMDAwMTIyMDQ5OThBNDA5MDQzMjg2MTA0OTg0MzAxMTgxQTcxCis6MTAzNzYwMDA4MDAwMTYxQzY5NDk0NDE4RTA2QkMwNDYwMDkwQTA2OEIwCis6MTAzNzcwMDAwMDI4MDFEMTAwMjYyNkUwNjU0ODQxNjkwMTMxNDE2MUY4Cis6MTAzNzgwMDAwNDk4RkNGNzA5RkQwNzFDMDNEMTI4NjkzMDQzMjg2MTIwCis6MTAzNzkwMDBCNUUwQTA2ODY1NjhBODQyMDBEMjA1MUNBMTZDQTk0MkVBCis6MTAzN0EwMDAxNkQyNDAxQTYyNkExMDFBMDAyNjYwNjJBNjYwQTY2MkVCCis6MTAzN0IwMDAyMDg4NDgyMzE4NDMyMDgwMEQxQzA5RDEzODFDRkNGN0IxCis6MTAzN0MwMDAxOUZEMDMyMDYwODA2NjYwMjAxQzAwRjA4REY5OTZFMEYyCis6MTAzN0QwMDBFMTY4Mzg2ODA5MThDMzFGMDUzQjIwMUMwMjM5MkExQzAwCis6MTAzN0UwMDAwMEYwQ0RGODM4MUMwMEYwRDdGOUUwNjg0NjE5Nzg2ODg5Cis6MTAzN0YwMDAzMDQzNzg2MDA0OTgzMTFDMDFGMDg4RkEyMTZFMDA5OEZCCis6MTAzODAwMDAwODE4MDE5MDcwMUEwMDA0MDAwQzYxNkU3MTFBMEEwNDA1Cis6MTAzODEwMDAxMjBDMTEwMjEyMEExMTQzMDkwNDA5MEMwMjkxMDEwMjRGCis6MTAzODIwMDAwMDBBMDg0MzAxMDQwOTBDMDE5OEMwNDY0MTgwMjA4RTFCCis6MTAzODMwMDBGQ0Y3Q0JGRDA2MUM2MDhFMDI5OUZDRjdDNkZEMDM5MEQ5Cis6MTAzODQwMDA2MDY5MDEwNDA5MEMwODAyMDkwQTA4NDMwMTA0MDkwQzEzCis6MTAzODUwMDAwMTk4QzA0NjgxODAzMDFDRkNGN0I3RkQ2MTY5MDEzMUQ5Cis6MTAzODYwMDBDMDQzNjE2MTAxOTlDMDQ2NDg4MTYwNkUwMDk5NDYxODY1Cis6MTAzODcwMDAyMDY5MDEwRUZGMjIxMjA0MDI0MDEyMEExMTQzRkYyMkE2Cis6MTAzODgwMDAxMjAyMDI0MDEyMDIxMTQzMDAwNjAxNDM3MTYwMDM5OEM0Cis6MTAzODkwMDBGQ0Y3OUJGRDIxNjk0OTE5MjE2MUExNjg0OTFCQTE2MEMxCis6MTAzOEEwMDAwNkQxQjE4OUEyNjkxMTQzQjE4MUExNjlGQ0Y3OERGREVGCis6MTAzOEIwMDAzODgyNjE2RTM4NjgwOTE4MEUzMUY5NjBFMjY4MDA5OTQzCis6MTAzOEMwMDAwNDM4MDBGMDRDRjgwMjIwNzg4MkUwNkQ0MTA4MTZEM0VECis6MTAzOEQwMDA4MDBBMEFEMzc4NjgxMDM4MDEwNDA5MEMwODAyMDkwQTIyCis6MTAzOEUwMDAwODQzMzk2OEMwNDZDODgxMDlFMDc4NjgwQzM4MDEwNDhCCis6MTAzOEYwMDAwOTBDMDgwMjA5MEEwODQzMzk2OEMwNDY0ODgxMDVCMDI2Cis6MTAzOTAwMDBGMEJDMDhCQzE4NDcwMDAwRDAyQzAwODA1QzJCMDA4MDY1Cis6MTAzOTEwMDAwQzJCMDA4MEY3QjUwMzFDMEYxQzAwMjAxQzY4MjYwNDJDCis6MTAzOTIwMDAzMTFDMUQxREZDRjc1MUZENDBDNzAyOUFEMTFDODkwOEFFCis6MTAzOTMwMDAwMTM5NEExRTAyOTIwMDI5MEREMDIxMEMxMENEMjIwNDFCCis6MTAzOTQwMDAwQTQzMTExQzE2MUNGQ0Y3NDBGRDQwQzcwMjk5NEExRTkxCis6MTAzOTUwMDAwMjkyMDAyOUYxRDEwM0IwRjBCQzA4QkMxODQ3ODAwOERFCis6MTAzOTYwMDA4MDAwODkwODg5MDAwMzMyOTMwODVBMUUwMDJCMDVEMDc1Cis6MTAzOTcwMDAwOEM5MDhDMDEzMUMwMTNBMDAyQkY5RDE3MDQ3RkZCNUU0Cis6MTAzOTgwMDA4NkIwMTcxQzAwMjYwNjk4ODA2Q0MwMUIwNjk5QzA0NjlFCis6MTAzOTkwMDA4ODY0MDEyMEMwMDUwNjk5ODk2QkMwNDYwMTkxMDY5OThCCis6MTAzOUEwMDA0QzZCNjdFMDIxNjhDMDQ2MDI5MTYxNjhDMDQ2MDM5MTk0Cis6MTAzOUIwMDBBMTY4QzA0NjA0OTEwMkE5NDk4OEI5NDIwOEQyMDJBRDYzCis6MTAzOUMwMDA2RDg4MDJBOTQ5ODg3RjFBMDAyMTAyQUI1OTgwMTlFMDRECis6MTAzOUQwMDAwMkE5NDk4OEM5MUIwMkFCNTk4MDNEMUMwMDI3MDEyMTVGCis6MTAzOUUwMDA0OTA2MDc5QjlBMDc5MjBGMEREMEVCMDZEQjBFMDhEMDE1Cis6MTAzOUYwMDAxRTJCMDhEMzFFMkIwMkQxMDMyQTA0RDEwMUUwMDIyQTc4Cis6MTAzQTAwMDAwMUQzMDEyNjAwMjEyOTQzMDE0MzBBMUMwMDkxMDAyMDEzCis6MTAzQTEwMDAwMzk5MDQ5QTA3OUIwMUYwNUJGRjA3OTk0OTE5MDc5MUU1Cis6MTAzQTIwMDAwMDJFMEFEMDFENEFDMDQ2MDA5MjFENDgwMTZENDI2RDBECis6MTAzQTMwMDAwMDIwMDc5QjAxRjA0Q0ZGMDAyNjAyQTg0MDg4MDAyOEM4Cis6MTAzQTQwMDAwQ0QwMDM5ODQwMTkwMzkwMDI5OEMwNDYyMDYwMDM5ODU4Cis6MTAzQTUwMDBDMDQ2NjA2MDA0OThDMDQ2QTA2MDAzRTAwMTk4MDEzODQ5Cis6MTAzQTYwMDAwMTkwMTAzNDA2OThDMDQ2NDQ2MzAxOTgwNjk5QzA0NkY4Cis6MTAzQTcwMDA4ODYzMDAyMDAwMkYwMkQwMDE5OTAwMjk5MkQxMDk0QUMxCis6MTAzQTgwMDBDMDQ2MDA5MjA2NDgwMTZENDI2RDAwMjAwOTlCMDFGMDdFCis6MTAzQTkwMDAxRkZGMEFCMEYwQkMwOEJDMTg0NzAwMDAwMTAwMDAwMjdDCis6MTAzQUEwMDA3QzI5MDA4MDA0MDA1MzAyOTBCNTBDMUMwNzFDMzg2ODY4Cis6MTAzQUIwMDAwMTIzOUIwNzA4MzgxODQzMDE2ODM4OEFGQ0Y3ODVGQzA2Cis6MTAzQUMwMDBDMDQzRjk2OEMwNDYwODgwNzg4QTM5NjgwODFBMzg2MEE3Cis6MTAzQUQwMDAzODFDMDFGMDhCRjkzODFDRkNGNzhDRkIyMDFDRkZGNzFECis6MTAzQUUwMDAzM0ZFOTBCQzA4QkMxODQ3ODBCNTAxODg4QTA5MjFEM0YxCis6MTAzQUYwMDBDQTA5MUZEMjhBMDgxREQzMDAyMTAxODA0MTgwNDc2RjY3Cis6MTAzQjAwMDA0MDZERkExRDE5MzI1MTcxRkE2REMwNDYxMDYwM0E2RTVGCis6MTAzQjEwMDBDMDQ2MTA2MDBDNDhDMDQ2ODE2M0MxNkI0OTA4NDkwMDJCCis6MTAzQjIwMDBDMTYzMDEyMDAwRjBDQ0ZGMzgxQzAwRjA2QkZGODBCQ0FCCis6MTAzQjMwMDAwOEJDMTg0NzgwMjMxOTQzMDE4MDAxODg0OTA5RjZEMjNGCis6MTAzQjQwMDAwMEYwQjBGOEYzRTcwMDAwRTgwRTAwODBGMEI1MDcxQ0M1Cis6MTAzQjUwMDAxMDFDMEQxQzAwMjQ1RTFFMDAyQjE5RDAwMTY4QzA0NkVECis6MTAzQjYwMDAzOTYwNDE4ODBDMTk0MTY4QzA0Njc5NjA4MTY4QzA0NjU3Cis6MTAzQjcwMDBCOTYwQzE2OEMwNDZGOTYwMTAzMDEwMzdFOTZBODE0MjA3Cis6MTAzQjgwMDAwMkQ4MjgxQzAwRjBFQ0ZGMzExQzAxM0UwMDI5RTVEMUQxCis6MTAzQjkwMDAyMDFDRjBCQzA4QkMxODQ3MDAyMUMxNjEwNTQ5MEE2ODE3Cis6MTAzQkEwMDAwMDJBMDFEMTA4NjAwMkUwNEE2OEMwNDZEMDYxNDg2MDNFCis6MTAzQkIwMDA3MDQ3MDAwMEQwMkMwMDgwMDM0OTA4NjgwMDI4MDJEMDFDCis6MTAzQkMwMDBDMjY5QzA0NjBBNjA3MDQ3RDAyQzAwODAwMDIxODE2NzFFCis6MTAzQkQwMDAwNTQ5OEE2ODAwMkEwMUQxODg2MDAyRTBDQTY4QzA0NkE3Cis6MTAzQkUwMDA5MDY3Qzg2MDcwNDcwMDAwRDAyQzAwODAwMzQ5ODg2ODQ3Cis6MTAzQkYwMDAwMDI4MDJEMDgyNkZDMDQ2OEE2MDcwNDdEMDJDMDA4MEI3Cis6MTAzQzAwMDAwMEI1ODAyMDEzNDlDMDQ2MDg2MEZGRjdENUZGMDAyOEEzCis6MTAzQzEwMDAxQkQwMDMyMzFCMDc0MTY4MTk0MDBBMEY1MTAxODkxQTYxCis6MTAzQzIwMDA4OTAwMEQ0QkM5MTg0Qjg4MDAyQjA0RDExMTFDRkZGN0RDCis6MTAzQzMwMDAzQkZGMDhCQzE4NDcwMTJCMDJEMUZGRjcwNUZDRjhFNzUyCis6MTAzQzQwMDAwMjJCRjZEMUZGRjc0RUZCRjNFNzA0NDgwMTZEMDEzMTdCCis6MTAzQzUwMDAwMTY1RUVFNzAwMDAwMEIwNUMyQjAwODBBMDgyMjA0MEYwCis6MTAzQzYwMDAwMEI1MjAyMDBENDlDMDQ2MDg2MEZGRjdCRkZGMDAyOEJGCis6MTAzQzcwMDAwRUQwMDE4ODIwMjMxOTQzMDE4MDAxODgxMDIzOTk0MzI1Cis6MTAzQzgwMDAwMTgwMDE4ODA5MEEwMUQzRkZGNzJFRkYwOEJDMTg0N0ZECis6MTAzQzkwMDAwMzQ4MDE2RDAxMzEwMTY1RjhFNzAwMDAwMDAwMDBCMDQ0Cis6MTAzQ0EwMDBBMDgyMjA0MDk4QjUwNzFDMjI0OEMwNDYwMDkwMjI0OEI4Cis6MTAzQ0IwMDBDMzFENDEzMzQxNkQ4MjZEODA2QzAwMDMwMDBCOUM2ODE1Cis6MTAzQ0MwMDAwMTIzOUIwNzIzNDMxQjY4OTg0MjAwRDEwQ0UwOTg0MkQ0Cis6MTAzQ0QwMDAwM0Q5MTAxQTU5MUE0MTE4MDBFMDE5MUEwMTIwMTAyOUE1Cis6MTAzQ0UwMDAwMEQ4MDAyMDAwMjgxRkQwNzg2QUY5NkFDMDQ2MDg2MDEyCis6MTAzQ0YwMDBCODZBRjk2QUMwNDY0ODYwMTA0QUMwNDYwMDkyRkI2QTNBCis6MTAzRDAwMDAwRjQ4NDI2RDAzMjAzOTZBMDFGMEUyRkQzODg4MTAyMzI0Cis6MTAzRDEwMDAxODQzMzg4MDM4ODg0MDIzOTg0MzM4ODAzODFDRkZGNzkwCis6MTAzRDIwMDA1NUZGOThCQzA4QkMxODQ3Mzg4ODQwMjMxODQzMzg4MDkyCis6MTAzRDMwMDBGN0U3MDAwMDU1NTU1NTU1QTgwMzAwODAwODAwMTEwMjBCCis6MTAzRDQwMDA3QzI5MDA4MEIwQjU0MDIwMkM0OUMwNDYwODYwMDBGMEI2Cis6MTAzRDUwMDBGREZFMDcxQzQwNjgwMzIzMUIwNzE4NDAwNTBGNjgwMTgwCis6MTAzRDYwMDA0MDFCODAwMDI2NDk0NDE4MjA4ODAyMjMxODQzMjA4MEU1Cis6MTAzRDcwMDAyMDg4NDEwODM0RDM0MDA4NDAwMDIwODBBMDZDRTE2Q0NBCis6MTAzRDgwMDA0MDE4QTA2NDAwMjBFMDY0QTE2QjIyNkQ4OTE4QTE2MzMzCis6MTAzRDkwMDAyMDY1Qjg2QUMwNDY2MDY1MDMyMzFCMDc3ODY4MTg0MDMxCis6MTAzREEwMDA3ODYwNjE2ODM2MzE5NDI5MDREODM4MjMxODQzNzg2MEU0Cis6MTAzREIwMDAzODIwMDNFMDk0MjMxODQzNzg2MDk0MjBCODYxMzk2ODcwCis6MTAzREMwMDA3ODY4MDIwNDEyMEMyMDFDQ0IxRjA1M0JGRkY3RDdGREJGCis6MTAzREQwMDAwMjIwNjA4MDM4MUNGRkY3REZGRUIwQkMwOEJDMTg0NzJCCis6MTAzREUwMDAzODFDRkNGNzA3RkEyODAxMDY0OTQwMTgxOTIzREIwMUEzCis6MTAzREYwMDBDMDE4NDE2QjAxMzk0MTYzRUZFNzAwMDAwMDAwMDBCMERCCis6MTAzRTAwMDA1QzJCMDA4MEEwMUMwMDgwOTBCNTAwMjcwRjRDMERFMEJCCis6MTAzRTEwMDA0MjZCMDEzQTQyNjMwMDJBMDVEQzAyNkJDMDQ2NDI2M0YyCis6MTAzRTIwMDBDMDZBMDFGMEM2RjkwMTM3MEIyRjA3RDIzODAxMDAxOTFCCis6MTAzRTMwMDAzMzIzOUIwMUMwMTg4MTZBMDAyOUU5RDEwMTIwNDAwNjgzCis6MTAzRTQwMDAwMzQ5QzA0NjA4NjA5MEJDMDhCQzE4NDc2ODBFMDA4MDUzCis6MTAzRTUwMDAwMDAwMDBCMDEwNDhDMTY4MDEzMUMxNjAwRjQ5Qzg2ODU2Cis6MTAzRTYwMDAwMTI4MTdEMUM4MUQ3OTMwMDI4OTAwMkExMkQwMDEzQUUxCis6MTAzRTcwMDAwMjgxMDI4OTAwMkEwREQxNDI4OTAwMkEwOEQxQzk2RjI2Cis6MTAzRTgwMDAwMjIzMEE2ODFBNDMwQTYwMDQyMTAxODEwMTIxMDBFMDJCCis6MTAzRTkwMDAwMDIxNDE4MTcwNDcwMDAwMDg4MzIwNDA2ODBFMDA4MEE3Cis6MTAzRUEwMDBCMEI1MDcxQzAxMjNGODFENjkzMDAzNzMxRTQ4QzIxREZECis6MTAzRUIwMDA3OTMyNTQ4QTYxMUM1MTgyRDU4QTAwMjFBQzQyMDREQkRDCis6MTAzRUMwMDBDNDFEODkzNDYzNzA1MTgyRDE4MzAxMjM5QjA3M0E2REVECis6MTAzRUQwMDAxQTQzMTI2OEMwNDZCQTYxRkI2OTlBNDIwNkQxRjg2QzZGCis6MTAzRUUwMDAxMjQ5QzA0NjA4NjBCMEJDMDhCQzE4NDc3OTYxNDE2OUY2Cis6MTAzRUYwMDBGQTZDOTE0MzQxNjEwMTIwMDAwNUMxNjAzODY5MDIyOEQ0Cis6MTAzRjAwMDBGMUQwQjg2OUY5Njk0MTFBMDFENTc4NkQ0MTE4MzgxQ0FBCis6MTAzRjEwMDAwMEYwMEVGOEY5NjkwOTE4Rjk2MTc4NkQ4MTQyRTJEMzcxCis6MTAzRjIwMDAwODFBRjg2MURGRTcwMDAwNjgwRTAwODAwMDAwMDBCMEFBCis6MTAzRjMwMDBGOEI1MDQxQzBGMUNGRjIzMjEzMzlGNDIwMUQ5RkYyNzMyCis6MTAzRjQwMDAyMTM3RTE2RTM4MUMwMUYwQ0JGQzJENEQwMDI4MTNEMTM4Cis6MTAzRjUwMDBFMDFENDkzMDAxN0EwMTIzMTk0MzAxNzIyOTRBQzA0NjA0Cis6MTAzRjYwMDAwMDkyMjk0ODAxNkQ0MjZEMDAyMDJCMUMwMUYwQjBGQzJECis6MTAzRjcwMDAwMDIwRjhCQzA4QkMxODQ3MjA2OTAxMzAyMDYxMjM0OUEzCis6MTAzRjgwMDBDODFEQjkzMDAyNkI5MjAwNTExOEMwMzEwRjYxMDE2QjJFCis6MTAzRjkwMDAwMTMxODkwNzg5MEYwMTYzMjA2QkMyMTk2MTZEOEE0MjYzCis6MTAzRkEwMDAwM0Q4MjMyMjEyMDUzQTQzMDVFMDA5MUE3RTFBMDdEMUU1Cis6MTAzRkIwMDAyMzIyMTIwNTBBNDMwMDkyNjE2RTA5MThBMjZFMTBFMEQ2Cis6MTAzRkMwMDAxMTIyNTIwNTBBNDMwMDkyNjE2RTA5MTgwMDIwQTI2RTY4Cis6MTAzRkQwMDAyQjFDMDFGMDdERkMyMzIyMTIwNTMyNDMwMDkyNjE2RUZFCis6MTAzRkUwMDBBMjZFMDAyMDJCMUMwMUYwNzNGQzIwNkJDMDE5MDAwOThECis6MTAzRkYwMDAwMDAxNjE2RDgxNDIwMEQ4NDAxQTIwNjMzODFDQjhFNzg3Cis6MTA0MDAwMDA0NDgwMjA0MDA0MDAxQjAyN0MyOTAwODA2ODBFMDA4MDUwCis6MTA0MDEwMDA4MEI1MDEyMEMwMDMwRDQ5QzA0NjA4NjAwQzQ5QzgxRDg5Cis6MTA0MDIwMDA0OTMwMDI3QTAwMjcwMDJBMDNEMDA3NzIwODFDRkZGN0U0Cis6MTA0MDMwMDAzN0ZGMDg0OUM4MUQ0OTMwMDI3QTAwMkEwM0QwMDc3MkE5Cis6MTA0MDQwMDAwODFDRkZGNzJERkY4MEJDMDhCQzE4NDcwMDAwMDBCMDFCCis6MTA0MDUwMDA2NDJEMDA4MEU0MkMwMDgwOTBCNTA3MUMxMDIwMTg0OUM2Cis6MTA0MDYwMDBDMDQ2MDg2MEY4NjgwMTMwRjg2MDE2NDhDNDFEQjkzNENECis6MTA0MDcwMDA2MTZCODkwMDA5MThDMDMxMDk2OTdBNjg5MjAwRDIxOTA4Cis6MTA0MDgwMDA1MTY0NjE2Qjg5MDAwODE4QzAzMDAxNjk3ODY4ODAwMDRDCis6MTA0MDkwMDBDMDE5QzA2QjAxRjBBMkZBMDEyMzc4Njg1ODQwNzg2MDFCCis6MTA0MEEwMDA2MDZCMDEzMDgwMDc4MDBGNjA2M0Y4MUQxOTMwNDA3OTI0Cis6MTA0MEIwMDAwMDI4MDJEMTM4MUMwMEYwMDdGODkwQkMwOEJDMTg0NzUzCis6MTA0MEMwMDAwMDAwMDBCMDY4MEUwMDgwOTBCNTA3MUMzOTQ4QzA2ODM5Cis6MTA0MEQwMDAwMDI4MDVEMEI4NkFDMDY4ODAwOTAxRDMwMjIwMDBFMDNBCis6MTA0MEUwMDA3ODZGRkNGNzU5RjgwNDFDMDZEMTAxMjBGOTFEMTkzMTJECis6MTA0MEYwMDAwODcxOTBCQzA4QkMxODQ3Rjg2QzJGNDlDMDQ2MDg2MDhFCis6MTA0MTAwMDBCQTZBMzgxQzIxMUMwMEYwNTlGODY3NjIwMDI4MDNEMUY0Cis6MTA0MTEwMDAyMDFDMDBGMDBCRkRFQ0U3Rjk2RDA5NjgwOTE4MDkwOThFCis6MTA0MTIwMDAwOTAxN0E2RDhBNDIwMEQ4ODkxQUExNjJCOTY4ODkwMEFBCis6MTA0MTMwMDBDOTE5NEE2QzAwMkEwN0QwNEE2QzEyMUE0QTY0ODAwOENFCis6MTA0MTQwMDA4MDAwQjk2QTA4MThCODYyMzg2OEI5NkE4MDAwQzAxOTc2Cis6MTA0MTUwMDA0MjZCOTE0MjBFRDMwMDIxNDE2NEI4NkEzOTY4ODkwMEVDCis6MTA0MTYwMDBDOTE5NDk2QjQwMUFCODYyQjk2ODg5MDBDOTE5Qzk2Qjg1Cis6MTA0MTcwMDA0MDE4Qjg2MkI4Njg4MTAwQzkxOTQ5NkMwMDI5QjhEMUUzCis6MTA0MTgwMDBCOTZBRkE2QjkxNDJCNEQwM0E2QzkxNDJCMUQwMDEyMzMyCis6MTA0MTkwMDA1ODQwQjg2MDgwMDBDMDE5QzA2QkMwNDZCODYyRjg2ODZCCis6MTA0MUEwMDAwMDI4MDFEMDAxMzhGODYwMzg2OTAwMjhBMUQwMDEzODEyCis6MTA0MUIwMDAzODYxOUVFNzY4MTkwMDgwMDAwMDAwQjBGN0I1OTBCMDQ0Cis6MTA0MUMwMDAwNDFDMEQxQzAwMjAwNTkwMDI5MDAwMjIwMTkyRjk0ODY5Cis6MTA0MUQwMDBDMDZBQzA0NkE4NjFBMDY4ODEwMDA5MTk0OTZCQzA0NjQxCis6MTA0MUUwMDAyMDYwRTE2MjEyOUFEMDY4QzA0NkE4NjAxMjlBNTE3OEE1Cis6MTA0MUYwMDBDMDQ2MEM5MUYwNDhDMDQ2MDM5MEQ3MUQwOTM3RTA2QUNECis6MTA0MjAwMDBDMTFCMDkwOUUzMUQxOTMzMEM5QUMwNDYwRjkzRUI0QkYwCis6MTA0MjEwMDBDMDQ2MEU5MzkxNDIwMUQzQjg0MjIxRDhFMTY4MDIyOUU5Cis6MTA0MjIwMDAxRUQyMDEyMDBGOTlDMDQ2NDg3MTAwMjAwMzk5MDFGMDY5Cis6MTA0MjMwMDA1N0ZCMDAyODAzRDEwRTlCRDg2QjAxMzBEODYzMDEyMEI3Cis6MTA0MjQwMDA4MDA2MDAyNzY4NjBBRjYxREQ0QUMwNDYwMDkyREQ0ODA1Cis6MTA0MjUwMDAwMTZENDI2RERDNEIwMDIwMDFGMDNBRkIzODFDNUNFMzQxCis6MTA0MjYwMDBCODQyMDNEODIwMUMwMEYwN0JGQzA3MUNENzQ4QzA2ODZDCis6MTA0MjcwMDAwMDI4NjREMDM4Nzg0MDA3NDAwRjAzMjg2MEQxMDU5OEEzCis6MTA0MjgwMDAwMTMwMDAwNjAwMEUwNTkwMzg3OEYwMjMxODQwNThEMTEwCis6MTA0MjkwMDBFMDZBQzAxQjAwMDkwQzk5ODg0MjAyRDJFMDY4MDIyODNCCis6MTA0MkEwMDAwNUQzQ0I0OTg4NjgwMEYwODNGRjA2MUMwNkQxMDM5QjI5Cis6MTA0MkIwMDAyODFDMzkxQzIyMUMwMEYwOEJGQzE2RTEyRTYyRjg2OEM5Cis6MTA0MkMwMDAwMDI4MEREMEI4ODkwMDI4MDNEMEMxNDlDOTY4MDBGMDgyCis6MTA0MkQwMDA3MEZGRjg4OTAwMjgwM0QwQkQ0OUM5NjgwMEYwNjlGRjY0Cis6MTA0MkUwMDA3QTY4QzA0NjcyNjFCOTY4QzA0NkIxNjEzMDFDQjg0OThECis6MTA0MkYwMDAwOTY4MDBGMDVFRkYwMDI4MTdEMTMwMUNCNDQ5NDk2OEY2Cis6MTA0MzAwMDAwMEYwNTdGRjEwMzdFMDZBQjg0MjAzRDgyMDFDMDBGMEQ1Cis6MTA0MzEwMDAyN0ZDMDcxQzY4NjhBRjRCMTg0MzY4NjAwMDIwQTg2MTQxCis6MTA0MzIwMDBBQzIzQTg2ODk4NDNBODYwQjBFMEE4NjlBODI4MDFEMjg3Cis6MTA0MzMwMDBBODIwQTg2MTEwMzdFMDZBQjg0MjZDRDg5Q0UwQTVFMERDCis6MTA0MzQwMDBBNEUwMTAyODY4RDEwMzIzMUIwNzY4NjgxODQwMDEwRkY4Cis6MTA0MzUwMDA0ODAxNDAxQTgwMDBBMDRBODIxODAxOTI3ODg4NDIwQkQ2Cis6MTA0MzYwMDAzMUQzODIwQjJGRDM5RDQ4QzA0NjAzOTAwMjIwMDE5QTdGCis6MTA0MzcwMDBDMDQ2MTA4MDc4ODgwMDA1MDAwRDAxOUFDMDQ2NTA2MDQ0Cis6MTA0MzgwMDBCODY4MDE5QUMwNDY5MDYwNzg2ODAxOUFDMDQ2MTA2Mjg5Cis6MTA0MzkwMDAwMDIwMDE5QUMwNDY5MDY0MDE5QUMwNDY5MDYzODgwMjRBCis6MTA0M0EwMDA4RjQ5NDAxODAxOUFDMDQ2NTA2MzAxOUE1MDY4MzYzMEQwCis6MTA0M0IwMDA5NDI4MDFEODM4MjAwMEUwOTQyMEE4NjExMDM3RTA2QUUyCis6MTA0M0MwMDBCODQyMjhEODU4RTA3QTg4OTIwQjAzRDM4NTQ4QzA0NjczCis6MTA0M0QwMDAwMzkwMjNFMDAxMjIxMjAzMDI0MDgzNEIxREQwMDM5MzdDCis6MTA0M0UwMDAwMDA1MDAwRDAxOUFDMDQ2NTA2MEI4NjgwMTlBQzA0NkE5Cis6MTA0M0YwMDA5MDYwNzg2ODAxOUFDMDQ2MTA2MjAwMjAwMTlBQzA0NjE5Cis6MTA0NDAwMDA5MDY0MDE5QUMwNDY5MDYzODgwMjc1NDk0MDE4MDE5QUU5Cis6MTA0NDEwMDBDMDQ2NTA2MzAyRTAzM0UwMkFFMDAzOTMwMTIwMEY5OTg1Cis6MTA0NDIwMDBDMDQ2NDg3MTEyOUE1MDc4MDU5OTQzMUEwQjkzMTAzNzc5Cis6MTA0NDMwMDBFMDZBQjg0MjAzRDgyMDFDMDBGMDkyRkIwNzFDMDE5QUU2Cis6MTA0NDQwMDA1MDZCOTE2QjA5MDE0MDE4MEI5QjIxMUMzQTFDRkZGNzI0Cis6MTA0NDUwMDA3REZCMDE5QUMwNDZEMDY0MDE5QTBCOUJDMDQ2MTM2NTUwCis6MTA0NDYwMDAwMTIzNUIwNjY4NjgxODQzNjg2MDAwMjBBODYxMERFMEJFCis6MTA0NDcwMDAxMDM3RTA2QUI4NDIwM0Q4MjAxQzAwRjA3MUZCMDcxQzFCCis6MTA0NDgwMDAzODc4NDAwNzQwMEYwMzI4MDBEMUY4RTZBODY5MDM5OTVGCis6MTA0NDkwMDAwMUYwMjZGQTAwMjgyQUQxMzgxQzIxMUMwMEYwNzlGQkYzCis6MTA0NEEwMDBBODY4ODAwOTA0RDMzMDFDNDk0OTQ5NjgwMEYwODFGRTlFCis6MTA0NEIwMDA0MTQ5MDAyMDAxRjAxNEZBMDAyODA0RDEwRTlCRDg2QjZBCis6MTA0NEMwMDAwMTMwRDg2MzExRTAwMTIwMEY5OUMwNDY0ODcxODAwNjgxCis6MTA0NEQwMDAwMDI3Njg2MEFGNjEzQTRBQzA0NjAwOTIzOTQ4MDE2REQyCis6MTA0NEUwMDA0MjZEMzk0QjAwMjAwMUYwRjNGOTAwMjAxNUUyMDU5OEU4Cis6MTA0NEYwMDAwQzk5MDgxQTAwMDQwMDBDMEM5MDBCOTAwQzk4MDAyOEUyCis6MTA0NTAwMDAwM0QwMDEyMDBGOTlDMDQ2NDg3MTI4NjhDMDQ2MDQ5MDI2Cis6MTA0NTEwMDAwMDI2MDAyMDA4OTAwMDIyMEE5MjBDOTgwMTM4MEQ5MDg1Cis6MTA0NTIwMDBBM0UwNzg4ODhBMUIxMjA0MTIwQzkwNDIwNUREMDc5MkUyCis6MTA0NTMwMDA4MDFBMDAwNDAwMEMwODkwMDBFMDA3OTAwODk4MDAyOEZBCis6MTA0NTQwMDAwN0QxMEQ5ODBBOUE5MDQyMDdERDA3OTgzMDE4ODg0MkUzCis6MTA0NTUwMDAwM0Q4MDEyMDQwMDUwNjkwMUNFMDExMjA0MDA1MDY5MDdDCis6MTA0NTYwMDBBODY4OEMyMzE4NDAwMkQxMjA0OEMwNDYwNjkwQjEwN0E1Cis6MTA0NTcwMDA4OTBGMEZEMDA3OThDMDA2QzAwRTA4RDAxRTI4MDlEQjhGCis6MTA0NTgwMDAxRTI4MDJEMTAzMjkwNUQxMDFFMDAyMjkwMkQzMDEyMDBFCis6MTA0NTkwMDAwMjkwREVFNzBBOUEwMDJBMDREMTAxMjNEQjA1MDY5ODdGCis6MTA0NUEwMDAxODQzMDY5MDA3OTgwNjk5MDg0MzAyMUMwMDkwMDQ5ODQ3Cis6MTA0NUIwMDA4MzE5MURFMEU4MEUwMDgwMDE0OUZGRkYyODBGMDA4MEVECis6MTA0NUMwMDAwNDAwMTIwMjdDMjkwMDgwNDQ4MDIwNDA2ODE5MDA4MDg5Cis6MTA0NUQwMDA2MDA0MDA4MDAwMDAwMDgwNUMyQjAwODA1NTMyRkZGRkVCCis6MTA0NUUwMDBBQzVFMjE0MDBEM0RGRkZGQ0QzMUZGRkYwMDAwMzIwMkU4Cis6MTA0NUYwMDAwMDIwM0ExRDA2Q0EwMUYwNkJGOTA3OTgzNjE4MDI5ODk4Cis6MTA0NjAwMDAwMDI4MTZEMEE4Njg4QzIzMTg0MDA0RDEwOTIzNUIwNDI1Cis6MTA0NjEwMDAwNjk4MTg0MzA2OTAwNjk4QzI0QTAyNDMwMDkyMDQ5OEVFCis6MTA0NjIwMDA4MzE5QzE0ODAxNkQ0MjZEMDAyMDAxRjA1MUY5MDAyMDRECis6MTA0NjMwMDAwMjkwMDg5ODAwMjgwQkQxMEI5QjAxM0IwQjkzMTAzNzdECis6MTA0NjQwMDBFMDZBQjg0MjBDRDgyMDFDMDBGMDhBRkEwNzFDMDdFMDg4Cis6MTA0NjUwMDA3ODY4MDc5QTgwMTg3ODYwNzg4ODA3OUE4MDFBNzg4MDM2Cis6MTA0NjYwMDAwQTlBNTAxQzAyMDQxMjBDMEE5MjBDOTgwQTlBODI0MjZFCis6MTA0NjcwMDAwM0RBQTk2OUIxNDIwMEQ5NTNFN0E4NjlCMDQyNkJEMTA2Cis6MTA0NjgwMDBBODY4MDEwOTY5RDIwODlBMDAyQTU2RDAwQzk5MEE5QTlBCis6MTA0NjkwMDA4QTQyM0VEQkIxMDc4OTBGMENEMDA4OUFEMjA2RDIwRUFGCis6MTA0NkEwMDAwQkQwMUUyQTA2REIxRTJBMDJEMTAzMjkwNUQwMDFFMDA5Cis6MTA0NkIwMDAwMjI5MDJEMjAyOTkwMDI5MjFEMDA4OUFDMDQ2MDA5MjBDCis6MTA0NkMwMDAwNDk4ODMxOTAwMjAzQTFEMDZDQTAxRjAwMUY5MDg5OEUwCis6MTA0NkQwMDAzNjE4QTg2ODhDMjMxODQwMDJEMDAxMjA0MDA2MDBFMDVDCis6MTA0NkUwMDA5MjQ4MDEyMjAyNDMwMDkyMDQ5ODgzMTk4RTQ4MDE2RDdBCis6MTA0NkYwMDA0MjZEMDAyMDAxRjBFQ0Y4MDAyMDAyOTAxNUUwOEMyM0MwCis6MTA0NzAwMDAxODQwMDJEMDAxMjA0MDA2MDBFMDg4NDgwODlBMDI0MzgxCis6MTA0NzEwMDAwMEUwMDg5QUMwNDYwMDkyMDQ5ODgzMTkwMDIwM0ExREQwCis6MTA0NzIwMDAwNkNBMDFGMEQ1RjgwODk4MzYxODEwMzdFMDZBQjg0MjgyCis6MTA0NzMwMDAwM0Q4MjAxQzAwRjAxNEZBMDcxQzY4Njg4MDBFNkJEMkE2Cis6MTA0NzQwMDAwQTk4QzA0NjA5OTAwQzk5ODg0MjVDREEwRDk4MDk5OTNDCis6MTA0NzUwMDA4ODQyMDNEMDdBODgxRUUwNUZFMDVFRTA3ODg4MDEyMjFDCis6MTA0NzYwMDA1MjA2MDI0M0E5Njg4QzIzMTk0MDAyRDEwOTIzNUIwNDM1Cis6MTA0NzcwMDAxQTQzQjEwNzg5MEYwRUQwQzMwNkRCMEUwOEQwMUUyQkRCCis6MTA0NzgwMDAwOURCMUUyQjAyRDEwMzI5MDVEMTAxRTAwMjI5MDJEMzQ2Cis6MTA0NzkwMDAwMTIxMDI5MTAyMUMwOTk4MDAyODAyRDEwMTIzREIwNUE2Cis6MTA0N0EwMDAxQTQzMDA5MjA0OTg4MzE5MDAyMDNBMUQwNkNBMDFGMEFBCis6MTA0N0IwMDA4RkY4Nzg4ODg2MTkxMDM3MDI5ODAwMjgxNEQwQTg2OEQ2Cis6MTA0N0MwMDA4QzIzMTg0MDAyRDAwMTIwNDAwNjAwRTA1NzQ4MDEyMjA3Cis6MTA0N0QwMDAwMjQzMDA5MjA0OTg4MzE5NTM0ODAxNkQ0MjZEMDAyMEYyCis6MTA0N0UwMDAwMUYwNzZGODAwMjAwMjkwRTA2QUI4NDIwM0Q4MjAxQzVECis6MTA0N0YwMDAwMEYwQjZGOTA3MUMwOTk4MDEzMDAwMDQwMDBDMDk5MDdDCis6MTA0ODAwMDAwQzk5ODg0MkEyREI2ODY4MzA0MzAxMDQwOTBDNjg2MDk3Cis6MTA0ODEwMDBFODZBMDBGMDdCRkEyOEUwMjdFMEE4NjgwMDA5MTREM0QyCis6MTA0ODIwMDA2ODY4ODAwRTE1RDIwMTlBMDAyQTEyRDAwMTlBNTA2QjQ2Cis6MTA0ODMwMDAwQjlCMjExQzNBMUNGRkY3ODlGOTAxOUFDMDQ2OTA2NDMyCis6MTA0ODQwMDAwMTlBMEI5QkMwNDY5MzYzMDNFMEU4NkEzMTFDMDBGMEI5Cis6MTA0ODUwMDA1REZBNjg2ODMwNDM2ODYwQTg2OUIwNDIwNUQ5MDAwNDExCis6MTA0ODYwMDAwMDBDODAxQjAwRjBFRUY5QUU2MUE4Njg4QzIzMTg0MEE0Cis6MTA0ODcwMDAwQkQwMkY0QUMwNDYwMDkyMDQ5OEMzMUYwNTNCMkE0ODFDCis6MTA0ODgwMDAwMTZENDI2RDAwMjAwMUYwMjNGODAxMjM5QjA3MjA2RDhDCis6MTA0ODkwMDAxODQzMDA2OEMwNDZBMDYxRTE2OTgxNDIxMkQwMjI2OUQ0Cis6MTA0OEEwMDAwMjJBMEZEMjQxMUEwMUQ1NjA2RDQxMTgyMDFDRkZGNzcyCis6MTA0OEIwMDAzRkZCRTE2OTQwMThFMDYxNjE2RDg4NDIyNEQzNDAxQUYyCis6MTA0OEMwMDBFMDYxMjFFMDgxNDIxRkQxMjA2OTAyMjgxQ0QyMDEyMDMxCis6MTA0OEQwMDA2MDYxMTg0ODQxNjlFMjZDMEE0MzQyNjE4MTY5RTM2Qzk2Cis6MTA0OEUwMDA5OTQzODE2MTAxMjEwOTA1Q0E2MDgwNjlDMDQ2MDg2MTU4Cis6MTA0OEYwMDA4QjAyMjA2RDE4NDMwMDY4QzA0NkEwNjFFMTY5ODE0MkM3Cis6MTA0OTAwMDAwMkQwMjAxQ0ZGRjdDQ0ZBMjgxQzAwRjAwRkY5MEM5OEZECis6MTA0OTEwMDAwNTk5NDAxODAwMDExMDMwNjg2MTEzQjBGMEJDMDhCQzY0Cis6MTA0OTIwMDAxODQ3MDAwMDAxMDAwMDAyN0MyOTAwODAwMDAwMTIwMkVDCis6MTA0OTMwMDAwNDAwNTIwMjY4MEUwMDgwRjBCNTQwMjAyRDQ5QzA0NkE4Cis6MTA0OTQwMDAwODYwMDBGMDAzRjkwNzFDODE2OTQ0NkFBMDZGMDBGMDU5Cis6MTA0OTUwMDA0NUZFMDAyMEUxMUQxOTMxNDg3MTc5NjhDOTBFMDlEMzVGCis6MTA0OTYwMDBGODZBMDAwMTI0NDk0MDE4MjQ0QkMwMTgwMTY4MDEzOTM1Cis6MTA0OTcwMDAwMTYwMzZFMEUxNkQwOTY4MjI2RUMwNDYxMTYwMjA0RThDCis6MTA0OTgwMDBGNTFENzkzNTAxMjNFOTZCMTk0M0U5NjNCOTZBRTI2REQ1Cis6MTA0OTkwMDBDMDQ2MTE2MEI5NkEyMjZFQzA0NjExNjA2MTY5MDAyOTgzCis6MTA0OUEwMDAwNEQxQTk2QjAxMzFBOTYzMDgyOTA3RDNBODYzMDEyMEE5Cis6MTA0OUIwMDAwMEYwODZGOEU4NkI0MDA4NDAwMEU4NjM3ODY4ODEwRUY0Cis6MTA0OUMwMDAwRkQyMEIyMzFCMDJGMTE4Qzk2ODAwMjkwNkQwMDAwODdBCis6MTA0OUQwMDAwNEQyMjAxQzM5MUMwMEYwNDNGODAyRTAzODFDMDBGMDFGCis6MTA0OUUwMDAwNUZBMzgxQ0ZCRjcwNkZDMjAxQzAwRjAwQkY4RjBCQ0E1Cis6MTA0OUYwMDAwOEJDMTg0NzAwMDAwMEIwQTAxQzAwODBCNDBDMDAwMEU4Cis6MTA0QTAwMDA2ODBFMDA4MDgwQjUwNzFDRjgxRDE5MzAwMTc5MDAyOTU3Cis6MTA0QTEwMDAwNEQwMDAyMTAxNzEzODFDRkZGNzU2RkJGODY4MDIyODBBCis6MTA0QTIwMDAwREQwQjg2ODgwMDBDMjE5NTA2QzAwMjgxMUQwQjg2QTQ3Cis6MTA0QTMwMDA0MTc4MDkwMTEwMzE1MjZCMTAxQTg4NDIwNUQzMzgxQzk1Cis6MTA0QTQwMDBGRkY3NDJGQjgwQkMwOEJDMTg0NzM4MUNGRkY3MjhGQTY4Cis6MTA0QTUwMDBGOEU3Nzg2ODgwMDBDMDE5QzA2QkMwNDZCODYyRjFFNzFCCis6MTA0QTYwMDBCMEI1ODdCMDBGMUM4MDZGQzA0NjAwOTAwMDI0MTM0RDc2Cis6MTA0QTcwMDAwQjIzMUIwMkU4MTg4MDY5MDAyODE3RDA2OTQ2QTIwMEEyCis6MTA0QTgwMDA1MjE5MEIyMzFCMDJEMjE4OTI2OTM4MUMwMEYwOTJGQkJBCis6MTA0QTkwMDAwMDI4MDlEMTAxMzRBMDAwNDAxOTBCMjMxQjAyQzAxOEMzCis6MTA0QUEwMDA4MDY5MDAyOEVBRDEwMUUwMDEyODAyRDAzODFDMDBGMDFBCis6MTA0QUIwMDA5REY5MDdCMEIwQkMwOEJDMTg0NzAwMDA2ODBFMDA4MDI0Cis6MTA0QUMwMDBCOEI1QzIwN0QyMEYxNjRDMTY0OTAxRDAwODIyMDhFMDJCCis6MTA0QUQwMDA4MjA4MDVEMzBDMjJBNDE4MEI2OERGMUQxNTM3MDNFMEVDCis6MTA0QUUwMDAxQzIyMEI2OERGMUQwOTM3MEY0QjFENzgwMDJEMTNEMERBCis6MTA0QUYwMDA1Qjc4MDAyQjEwRDAwMTIzNUIwNjFBNDMwMDI4MDFEMUZDCis6MTA0QjAwMDA1QjA4MUE0MzAwOTI0QTY4MDEyMDM5MUMyMzFDMDBGMEZDCis6MTA0QjEwMDBERkZFQjhCQzA4QkMxODQ3MDMyMzFCMDYxQTQzRjFFN0E1Cis6MTA0QjIwMDA5MEVFMjA0MDdDMjkwMDgwRjgwRTAwODAwMDIxQzE2MUI5Cis6MTA0QjMwMDAwNTQ5OEE2ODAwMkEwMUQxODg2MDAyRTBDQTY4QzA0NjM3Cis6MTA0QjQwMDBEMDYxQzg2MDcwNDcwMDAwMjgwRjAwODAwMzQ5ODg2ODYyCis6MTA0QjUwMDAwMDI4MDJEMEMyNjlDMDQ2OEE2MDcwNDcyODBGMDA4MEQyCis6MTA0QjYwMDAwMTFDMDEyMzg4Njg1ODQwODg2MENBNjgwMTNBQ0E2MEZECis6MTA0QjcwMDAwQTY5MDEzQTgwMDAwQTYxNDIxOEQwNkI1MzZCQzA0NjQzCis6MTA0QjgwMDBDQjYyMEI2ODlCMDA1OTE4NDk2QzUzNkNDOTE4NTE2NDZGCis6MTA0QjkwMDA3MDQ3OEE2ODkyMDA1MjE4RDM2QjgzNDIxN0QxRDAxRDk4Cis6MTA0QkEwMDAzRDMwMEE2ODkyMDA1MjE4NTI2QzAzNjg5QTFBMDI2MEVCCis6MTA0QkIwMDAwMTIzODg2ODU4NDA4ODYwQ0E2ODAxMzJDQTYwMEE2OTVGCis6MTA0QkMwMDAwMTMyODAwMDQwMTgwQTYxNDA2QkMwNDZDODYyNzA0N0RECis6MTA0QkQwMDBCOEI1MDQxQzFEMUMxNzFDMDgxQzM5MUNGRkY3RDlGRjk1Cis6MTA0QkUwMDAwMDIwMjkxQzAwRjA3Q0ZFMDEyMEY5MUQxOTMxNDg3MUJDCis6MTA0QkYwMDA4MDA2NjA2MDAwMjBBMDYxMDY0QUMwNDYwMDkyMDY0ODE4Cis6MTA0QzAwMDAwMTZENDI2RDA1NEIwMDIwMDBGMDYyRkVCOEJDMDhCQzhGCis6MTA0QzEwMDAxODQ3MDAwMDA0MDAxMjAyN0MyOTAwODA0NDgwMjA0MEQ0Cis6MTA0QzIwMDAwNjQ5MEE2ODEwMTgwODYwMDEyMzVCMDI5ODQyMDNEOUZDCis6MTA0QzMwMDAwMzQ5MEE3OTAxMzIwQTcxNzA0NzAwMDBFNDJEMDA4MEFGCis6MTA0QzQwMDBBMDgyMjA0MDgwMDg4MDAwMDY0OTBBNjgxMDE4MDg2MDg5Cis6MTA0QzUwMDAwMTIzNUIwMjk4NDIwM0Q5MDM0OTBBNzkwMTMyMEE3MUEwCis6MTA0QzYwMDA3MDQ3MDAwMEU0MkQwMDgwQTA4MjIwNDAwMzMwODAwOEJGCis6MTA0QzcwMDA4MDAwMDY0OTBBNjgxMDE4MDg2MDAxMjM1QjAyOTg0MjA4Cis6MTA0QzgwMDAwM0Q5MDM0OTBBNzkwMTMyMEE3MTcwNDdFNDJEMDA4MDgzCis6MTA0QzkwMDBBMDgyMjA0MDAyNDg0MTc5MDEzMTQxNzE3MDQ3MDAwMEYzCis6MTA0Q0EwMDBBMDgyMjA0MDkwQjQ4MjAwMTc0QjlBNTg4QjA3MDJEMDA0Cis6MTA0Q0IwMDA4OTA4MEIxRDAxRTA4OTA4Q0IxQzExNjlENzY4MTI0Q0NCCis6MTA0Q0MwMDA4MDAwMjA1ODQwNjhCOTQyMDNEMTgxNDIxOUQ5MTE2ODQ3Cis6MTA0Q0QwMDAxN0UwMDAyNEI5NDIwOUQ5ODE0MjEyRDkxMTY4NzgxQTIzCis6MTA0Q0UwMDAwMEQ1MDMzMDgwMTA5ODQyMEJEODA3RTA4MTQyMDVEOEU4Cis6MTA0Q0YwMDA3ODFBMDBENTAzMzA4MDEwOTg0MjAyRDgyMDFDOTBCQzRFCis6MTA0RDAwMDA3MDQ3QzgxRDA1MzBGQUU3NzAwNDAwODA4MEI1ODAwMDQ4Cis6MTA0RDEwMDAwRjRBMTc1ODg4MDcwMkQwODgwODA0MzAwMUUwODgwODM1Cis6MTA0RDIwMDAwMzMwMzk2OTdBNjg5MTQyMDlEOTM5NjhDMDQ2Mzk2MUQ2Cis6MTA0RDMwMDBGOTY4N0E2ODkxNDIwMkQ5Mzk2OEMwNDZGOTYwODEwMDAxCis6MTA0RDQwMDAzODY5MDBGMEQxRkQzODYxODBCQzA4QkMxODQ3MDAwMDBDCis6MTA0RDUwMDA3MDA0MDA4MDkwQjUwMzIxMDkwNzAxNDAwQzBGMDEwNDg1Cis6MTA0RDYwMDAwOTBDMDEyMjkyMDcwMjQwQTMwMDFDNEZGRjU4ODkwNzNCCis6MTA0RDcwMDA4OTBGMDAwNDAwMEM4MDA4MDAyOTAwRDAwMTMwMDAyQUFGCis6MTA0RDgwMDAwMUQwMDIzMDAwRTAwMzMwRjk2ODdBNjg5MTQyMDJEOTFDCis6MTA0RDkwMDAzOTY4QzA0NkY5NjA4MTAwRjg2ODAwRjBBNUZERjg2MDQ4Cis6MTA0REEwMDAwRjQ4MDA2OTAwMjgwNUQwMDEyMEEwNDAwMkQwMjAxQzM3Cis6MTA0REIwMDBGRUY3Q0FGQzBCNDlDODFEMTkzMDAzNzkwMDIyMDAyQkVECis6MTA0REMwMDAwNUQxMDk0OUM4MUQxOTMwMDM3OTAwMkIwM0QwMDI3MUEwCis6MTA0REQwMDAwODFDRkZGNzc5Rjk5MEJDMDhCQzE4NDc3MDA0MDA4MEU0Cis6MTA0REUwMDBEMDJDMDA4MDY0MkQwMDgwRTQyQzAwODBCMEI1MkI0OUNECis6MTA0REYwMDAwOTc5MDAyOTAzRDE0MTY4Mjk0QjE5NDM0MTYwODE2ODMxCis6MTA0RTAwMDA0OTA4MDJEMzA5MjEwOTA0MDFFMDBEMjEwOTA0MENDODU1Cis6MTA0RTEwMDAwODM4MTk0Mzg3NjhCQjBBMDNEMzQzNjg1QjA4MDBEMzhCCis6MTA0RTIwMDAwMTMxNDA2ODAzMjMxQjA3MTg0MDA3MEZGODAwMUQ0QzkxCis6MTA0RTMwMDAwMDE5MjM2OEMwMTg1MDMwMDA3OTAxMjgxMEQxNjA2ODJCCis6MTA0RTQwMDAwMTI4MEREMDEwMUMwMEYwNzFGODM4MDEwMDE5MTkyMzQ5Cis6MTA0RTUwMDBEQjAxQzAxODQxNkIwMTM5NDE2M0IwQkMwOEJDMTg0Nzg1Cis6MTA0RTYwMDAzODAxMDAxOTE5MjNEQjAxQzAxODAzNkI1RDFDMDU2M0IxCis6MTA0RTcwMDBCRDAyMkQxOURCMDBFQjE4ODAzMzE5NjNEQTYyODE2QkY4Cis6MTA0RTgwMDAwMTMxODE2MzAxMjFCOTQwMjI2ODExNDMyMTYwMDE2QjI2Cis6MTA0RTkwMDA4MDI5RTJEMzAwMjEwMTYzREZFNzAwMDAyODBGMDA4MEIyCis6MTA0RUEwMDAwMDAwMDA4MEEwMUMwMDgwRjBCNTFGNEU3MDY4MDAyODM0Cis6MTA0RUIwMDAzNkQxMDAyNEIxNjg0ODFDQzkwMDg5MTlCMDYwMzI2ODM1Cis6MTA0RUMwMDA4OTE4NjAzMTBEN0IwODI4MDBEM0I0NjAyODAxODAxOTRGCis6MTA0RUQwMDAxOTIzREIwMUMwMTg4NzZCMDAyRjIxRDBDMTZBNEIxQzNFCis6MTA0RUUwMDBBQTAyOTIxOUM5MDA1MTE4ODAzMUMzNjJDQTZBMDk2QkJCCis6MTA0RUYwMDAwMTNGODc2MzgwMkIwMEQzQzQ2MjAwMkYwNkQxMDEyN0I2Cis6MTA0RjAwMDBBRjQwM0IxQ0RCNDMzNzY4M0I0MDMzNjA0MzZCMDEzQkE2Cis6MTA0RjEwMDA0MzYzMTAxQzM3MUMwMEYwMDlGODc4NjgwMDI4QzlEMERBCis6MTA0RjIwMDBGMEJDMDhCQzE4NDcwMDAwQTAxQzAwODBGMEI1Q0QwRkY1Cis6MTA0RjMwMDBFRDA3MDEyNDAwMjcyRTRCMkU0QTAwMkQxREQwRDg2QUU0Cis6MTA0RjQwMDAwMTMwRDg2MjEwMUM1MjY5MDAyQTEyRDAwMjY5NTMxQzI5Cis6MTA0RjUwMDA5MjAwMTIxODAzNjE5MTYxNDE2OTAxMzE0MTYxMDI2OTU2Cis6MTA0RjYwMDAwRjJBMDBEMzA3NjEwRjI5MDBEMzQ0NjBGMEJDMDhCQ0FFCis6MTA0RjcwMDAxODQ3MDgxQ0ZGRjdFRUZFRjhFNzE1Njk2RTFDQUQwMDM4Cis6MTA0RjgwMDBBRDE4MTY2MUE5NjE1NTY5MDEzNTU1NjExNjY5MEYyRTc1Cis6MTA0RjkwMDAwMEQzMTc2MTBGMkQwMEQzNTQ2MDhDMDJBNDBBMTY0RjYyCis6MTA0RkEwMDAzQTZGRkQ2OEY5MUQ3OTMxMDEyRDBDRDFEQjZENUIwODdECis6MTA0RkIwMDAwOUQzMEI4OTAwMkIwNkQxRkQ2RjAzM0IyRTY4MzM0MENDCis6MTA0RkMwMDAyQjYwMTQyMzBCODExMDYwODAwNzgwMEEyMDQzMDMwNEE4Cis6MTA0RkQwMDAwMEQwMDEzODUwNjAwOTZBMDgzMjkxNDIwMEQ4MDc0QTZGCis6MTA0RkUwMDAwMDBEMDJEMzUxMjA4MDAzODI2MTNBNjdCRUU3MDAwMEMyCis6MTA0RkYwMDBBNDJBMDA4MEEwMUMwMDgwNjgwRTAwODAyNEE3MjA0MDA2Cis6MTA1MDAwMDBCMEI1MDAyODA0RDEwMTIwQzAwNTE2NDlDMDQ2MDg2MDhCCis6MTA1MDEwMDAxNTRDMDAyNTY3NjkwMDJGMTZEMEUwNjg0MTFDODAwMDAwCis6MTA1MDIwMDAwMDE5RTE2MDgwNjkwMTNGRkZGNzk0RkVFMDY4MEYyOEY2Cis6MTA1MDMwMDAwMEQzRTU2MEUwNjg4MDAwMDAxOTgwNjkwMDA4MDFEM0IyCis6MTA1MDQwMDAwMDJGRUFEMTY3NjEwM0UwMDg0ODAxNkQwMTMxMDE2NTc1Cis6MTA1MDUwMDA2NTYwMjA2ODAwMjgwMUQwRkZGNzI2RkZCMEJDMDhCQ0JGCis6MTA1MDYwMDAxODQ3MDAwMDAwMDAwMEIwQTAxQzAwODBBMDgyMjA0MDczCis6MTA1MDcwMDAwMDIwNzA0N0IwQjQxMDIzODI2ODEzNDAwMDIxMDAyQjM5Cis6MTA1MDgwMDAxNUQwMEM0QjFBNDAxMjAxODEyNDE0NDMwMjY4MTU2ODk0Cis6MTA1MDkwMDAxMzFEODBDQjFCNjgwNDNBMDI2MDIwQzI4MEMyMDhDMjg0Cis6MTA1MEEwMDAxNDYwNDI2ODAxMjM5QjA3MDQzMjFBNDM0MjYwMDgxQ0MzCis6MTA1MEIwMDBCMEJDNzA0NzAwRjBGRjBGRjBCNDgyNjg1MzA5MzREM0RFCis6MTA1MEMwMDAxQjRCMUE0MDEyMDE4MTI2MTY0MzAzNjgxRDY4MUYxREUxCis6MTA1MEQwMDAxMENGM0Y2ODA0M0IwMzYwMjBDMzEwQzM4MEMzMUU2MDMxCis6MTA1MEUwMDA0MzY4MUYxRDAxMjM5QjA3M0I0MzQzNjBDQjZCMTgxRjg1Cis6MTA1MEYwMDBDODYzODBDQjgwQzAxQzY4MUYxRDAzMUQwNDYwMzgxQzYyCis6MTA1MTAwMDAzRjY4QzA0NjFGNjAxRjFENDM2ODFDMDQyNDBDODEyMzk4Cis6MTA1MTEwMDAyMzQzM0I2MDQwNjgwMDBDMDAwNDEwNDM3ODYwMDg2RTM1Cis6MTA1MTIwMDAwNDMwMDg2NjQ4NkUwNDMwNDg2NjAwMjBGMEJDNzA0N0MyCis6MTA1MTMwMDAwMEYwRkYwRjgwQjQ4MTZBMDEyMzlCMDdDQTFEMDUzMjZFCis6MTA1MTQwMDAxQTQzMTI2OENGMUQwMTM3M0I0MzFCNjhDMDQ2Q0I2MDMyCis6MTA1MTUwMDAwMTIzOUIwNzBGMUQzQjQzMUI2OEMwNDY4QjYwMDEyMzQ3Cis6MTA1MTYwMDA5QjA3MEI0MzFCNjgwQ0MxMDI2MjAxNkJDMDQ2MEE2MkJECis6MTA1MTcwMDAwNDIzODE2OTE5NDM4MTYxMDI2QkMwNDY5MTYxODE2QTkwCis6MTA1MTgwMDAwNDMxODE2MjAyNkJDMDQ2OTE2MkMxMUQzOTMxNEE4Qjg0Cis6MTA1MTkwMDAwNDNBNEE4MzQ5OEIwMjZCNDAzMjUxODNDMTg5MDQzOUY2Cis6MTA1MUEwMDBDMTgxQzE2ODAwNkJDMDQ2QzE2MDAwMjA4MEJDNzA0N0VGCis6MTA1MUIwMDAwMDQ3MDg0NzEwNDcxODQ3MjA0NzI4NDczMDQ3Mzg0N0Q3Cis6MTA1MUMwMDAzMDQwMkRFOTBDQzA5REU1MEM0OEEwRTEyNDQ4QjBFMTM5Cis6MTA1MUQwMDAxRTAwMDAwQTAxQzA0Q0UyMTg0MEEwRTM2NDUxOUZFNUE0Cis6MTA1MUUwMDA5NDUwMjBFMDAwNTA5MEU1MTQ0MDkwRTUwMDMwODVFNUIzCis6MTA1MUYwMDAwNEMwODVFNTA4MTA4NUU1MEMyMDg1RTUxMDEwOTBFNUQ0Cis6MTA1MjAwMDAxMDUwODVFMjAxMDA1NUUxMEM1MDkwNTUwNDAwNTVFMTI1Cis6MTA1MjEwMDAwNTAwMDAwQTA0MTA5MEU1MDA1MDgwRTUwMDUwODFFNThCCis6MTA1MjIwMDAwMDAwQTBFMzMwNDBCREU4MUVGRjJGRTEwMDMwOTNFNTExCis6MTA1MjMwMDAwODIwOTBFNTAxMzE4M0UzMDIzNjgzRTMwMzAwNTVFMTYyCis6MTA1MjQwMDAxNDMwODBFNUYyRkZGRjFBMDEwMEEwRTNGNEZGRkZFQTRCCis6MTA1MjUwMDAwMTA2MUNFM0YxRkZGRjBBRUMxMDlGRTUwMkM2Q0NFMzU4Cis6MTA1MjYwMDA1NDIwOTFFNUU0MzA5RkU1NTAxMDkxRTVEOUZGRkZFQTI1Cis6MTA1MjcwMDBGMDQ3MkRFOTIwQzA5REU1MEM2OEEwRTEyNjY4QjBFMTZCCis6MTA1MjgwMDAyNTAwMDAwQTE4NDBBMEUzQjg1MDlGRTU5NDAwMDBFMDE0Cis6MTA1MjkwMDAwNTAwODBFMDA4NDA5MEU1MDQ4MDkwRTUwMDcwQTBFMzAwCis6MTA1MkEwMDAxRkMwQTBFMzAyQzQ4Q0UzMDA1MDkwRTUxMDkwOTBFNThECis6MTA1MkIwMDAxNEEwOTBFNTAwMzA4NUU1MDRDMDg1RTUwODEwODVFNTdCCis6MTA1MkMwMDAwQzIwODVFNTEwNTA4NUUyMDkwMDU1RTEwQzUwOTA1NTAxCis6MTA1MkQwMDAwQTAwNTVFMTE1MDAwMDBBMDM3MDE3RTIyMDEwODFFMjcwCis6MTA1MkUwMDAyMDMwODNFMjBBMDAwMDBBMDA2MDk2RTIwMTcwODdFMjQzCis6MTA1MkYwMDAwOTAwMDAwQTIwNjA0NkUyMjAwMDU2RTNFQ0ZGRkZDQUU2Cis6MTA1MzAwMDAwMDcwQTBFMzAxQzA0NkUyMDJDNDhDRTMwMDYwQTBFM0E5Cis6MTA1MzEwMDBFN0ZGRkZFQTAwNTA4OEU1RjJGRkZGRUEwMDEwQTBFMzk0Cis6MTA1MzIwMDAwMDUwODBFNTAxMDBBMEUxRjA0N0JERTgxRUZGMkZFMTNECis6MTA1MzMwMDAwMEEwOTRFNTBBMDA1NUUxMTRBMDgwRTVFNUZGRkYxQUZFCis6MTA1MzQwMDAwMTEwQTBFM0Y1RkZGRkVBQTgwMzAwODA3QzI5MDA4MDlDCis6MTA1MzUwMDAwMDgwMjA0MDY4ODI5RkU1MEI5MkEwRTM2NEEyOUZFNTU1Cis6MTA1MzYwMDA1OEIwOUFFNTBFRjBBMEUxNTRCMDlBRTUxRUZGMkZFMTg3Cis6MTA1MzcwMDAzRjQwMkRFOTAwMDA0RkUxMUYwMDAwRTIxMjAwNTBFMzIyCis6MTA1MzgwMDA1NDAwMDAwQTAwMDAwRkUxODAwMEMwRTMwMEYwMjFFMUJBCis6MTA1MzkwMDAwNDUwQTBFMzAwNDA5OUU1MDkwMDAwRUEwMjAwMTRFMzhDCis6MTA1M0EwMDA1MzAwMDAxQjgwMDAxNEUzNTkwMDAwMUIyMDAwMTRFMzhECis6MTA1M0IwMDA1OTAwMDAxQjAyMDcxNEUzNTkwMDAwMUIwMTA2MTRFMzA3Cis6MTA1M0MwMDA1OTAwMDAxQjA4MDAxNEUzNDUwMDAwMUIwMjA1MTRFMzBDCis6MTA1M0QwMDA0QTAwMDAxQjAyMDgxNEUzNEIwMDAwMUJFNTBFMTRFMzE3Cis6MTA1M0UwMDAwNzAwMDAwQTA0MjA5OEU1MEMxMDk4RTUwNDMwNTJFMjBBCis6MTA1M0YwMDAzQzMwQTBCMzA0MzA4OEU1MDIwMDkxRTcwRkUwQTBFMTYzCis6MTA1NDAwMDAxMEZGMkZFMTAxNTA1NUUyMDMwMDAwMEEwMDQwOTlFNTJBCis6MTA1NDEwMDAwQzAwOUFFNTAwMDAxNEUxMUJGRjJGMTEwODAwOUFFNTJCCis6MTA1NDIwMDAwMDAwMTRFMTBCMDAwMDBBMDEwQzE0RTM5ODAxOUYxNTIxCis6MTA1NDMwMDAwRkUwQTAxMTEwRkYyRjExMDIwNDE0RTM4QzAxOUYxNTNGCis6MTA1NDQwMDAwRkUwQTAxMTEwRkYyRjExMDEwOTE0RTM4MDAxOUYxNTM3Cis6MTA1NDUwMDAwRkUwQTAxMTEwRkYyRjExMDQwMDlBRTUwMDAwMTRFMUU1Cis6MTA1NDYwMDAxNjAwMDAwQTU0RTA4RkUyMDQwMDE0RTM0MDAwOUExNThECis6MTA1NDcwMDAxMEZGMkYxMTAyMEExNEUzNDQwMDlBMTUxMEZGMkYxMTk4Cis6MTA1NDgwMDAwMjA5MTRFMzQ4MDA5QTE1MTBGRjJGMTEwMTAyMTRFM0RBCis6MTA1NDkwMDA0QzAwOUExNTEwRkYyRjExMDEwNDE0RTM1MDAwOUExNUM3Cis6MTA1NEEwMDAxMEZGMkYxMTAxMEExNEUzMjEwMDAwMUIwMjAwMTRFMzc2Cis6MTA1NEIwMDAwRTAwMDAxQjEwMDA5QUU1MDAwMDE0RTExQzAwMDAxQjA4Cis6MTA1NEMwMDAwMDQwOTlFNTA0NTBBMEUzMDA0MDk0RTIxQkZGMkYxMTM3Cis6MTA1NEQwMDAzRjQwQkRFODA0RjA1RUUyQzAwMDgwRTMwMEYwNjFFMTFGCis6MTA1NEUwMDBGQUZGRkZFQTE4MDA5QUU1MUMxMDlBRTUxMUZGMkZFMTc4Cis6MTA1NEYwMDA1NEIwOUFFNTFDMTA5QUU1MTQwMDlBRTUxMUZGMkZFMUNCCis6MTA1NTAwMDAyMDEwOUFFNTAwMDBBMEUzMTFGRjJGRTEyNDEwOUFFNTk2Cis6MTA1NTEwMDAxMUZGMkZFMTI4MTA5QUU1MTFGRjJGRTEyQzEwOUFFNUQ5Cis6MTA1NTIwMDAxMUZGMkZFMTMwMTA5QUU1MTFGRjJGRTEzNDEwOUFFNUI5Cis6MTA1NTMwMDAxMUZGMkZFMUZFRkZGRkVBMzhFMDlBRTUzQzEwOUFFNTAzCis6MTA1NTQwMDAxODAwOUFFNTExRkYyRkUxMzhFMDlBRTUzQzEwOUFFNTQyCis6MTA1NTUwMDAxNDAwOUFFNTExRkYyRkUxNjQyMDlGRTUwMDMwOTJFNUU5Cis6MTA1NTYwMDAwMDMwNTNFMDBBMDAwMEJBMDAzMDgyRTUwQzAwOTJFNUZBCis6MTA1NTcwMDAwODMwOTJFNTAwMTA5MUUyMDMwMDAwMEEwMzEwODBFNzcyCis6MTA1NTgwMDAwNDMwNTNFMjNDMzBBMEIzMDgzMDgyRTUwMTAwQTBFM0QwCis6MTA1NTkwMDAxRUZGMkZFMTNDMTA5RkU1MDAwMDkxRTUwMTAwODBFMjM1Cis6MTA1NUEwMDAwMDAwODFFNTAwMDBBMEUzRjhGRkZGRUExMDAwOUZFNTlFCis6MTA1NUIwMDAwODEwOTBFNTA0MTA1MUUyM0MxMEEwQjMwODEwODBFNUZCCis6MTA1NUMwMDAxRUZGMkZFMUU0MkQwMDgwQ0MwNDAwODA3MTJCRkZGRjMzCis6MTA1NUQwMDBEMTNERkZGRkM5MkJGRkZGQTA4MjIwNDBDOTFDODkwOEQ1Cis6MTA1NUUwMDA4OTAwMDEyMzg1NEE1QjA3MTg0MzEzNjg1QjE4MTM2MDIxCis6MTA1NUYwMDAwMDFGODFBMzVCMUExODQ3MDQyMEEwRTUwNDIwQTBFNTQyCis6MTA1NjAwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUY2Cis6MTA1NjEwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUU2Cis6MTA1NjIwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUQ2Cis6MTA1NjMwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUM2Cis6MTA1NjQwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUI2Cis6MTA1NjUwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUE2Cis6MTA1NjYwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTk2Cis6MTA1NjcwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTg2Cis6MTA1NjgwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTc2Cis6MTA1NjkwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTY2Cis6MTA1NkEwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTU2Cis6MTA1NkIwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTQ2Cis6MTA1NkMwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTM2Cis6MTA1NkQwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTI2Cis6MTA1NkUwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTE2Cis6MTA1NkYwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTA2Cis6MTA1NzAwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUY1Cis6MTA1NzEwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUU1Cis6MTA1NzIwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUQ1Cis6MTA1NzMwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUM1Cis6MTA1NzQwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUI1Cis6MTA1NzUwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNUE1Cis6MTA1NzYwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTk1Cis6MTA1NzcwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTg1Cis6MTA1NzgwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTc1Cis6MTA1NzkwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTY1Cis6MTA1N0EwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTU1Cis6MTA1N0IwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTQ1Cis6MTA1N0MwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTM1Cis6MTA1N0QwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTI1Cis6MTA1N0UwMDAwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNDIwQTBFNTE1Cis6MTA1N0YwMDAwNDIwQTBFNTA0MjBBMEU1MUVGRjJGRTFFNDJEMDA4MDk5Cis6MTA1ODAwMDA5ODAwOUZFNTk4MTA5RkU1MDEyMDQwRTA5NDMwOUZFNUM3Cis6MTA1ODEwMDAwMDAwOTFFNTAzMDA1MEUxMDMwMDAwMUEwNDEwODFFMjRBCis6MTA1ODIwMDAwNDIwNTJFMjAwMDAwMDBBRjhGRkZGRUE3ODAwOUZFNTNBCis6MTA1ODMwMDAwMDIwODBFNTc0MDA5RkU1NzQxMDlGRTUwMTIwNDBFMEEyCis6MTA1ODQwMDA2MDMwOUZFNTAwMDA5MUU1MDMwMDUwRTEwMzAwMDAxQTdECis6MTA1ODUwMDAwNDEwODFFMjA0MjA1MkUyMDAwMDAwMEFGOEZGRkZFQThGCis6MTA1ODYwMDA1MDAwOUZFNTAwMjA4MEU1NEMwMDlGRTU0QzEwOUZFNTJGCis6MTA1ODcwMDAwMTIwNDBFMDJDMzA5RkU1MDAwMDkxRTUwMzAwNTBFMTVECis6MTA1ODgwMDAwMzAwMDAxQTA0MTA4MUUyMDQyMDUyRTIwMDAwMDAwQTIyCis6MTA1ODkwMDBGOEZGRkZFQTI4MDA5RkU1MDAyMDgwRTUxRUZGMkZFMUNBCis6MTA1OEEwMDA3QzM0MDA4MDgwMzAwMDgwQURERUFEREVDMDA0MDA4MDNFCis6MTA1OEIwMDBGQzM3MDA4MDgwMzQwMDgwQzQwNDAwODBGQzNGMDA4MEZFCis6MTA1OEMwMDA0MDM4MDA4MEM4MDQwMDgwNzg0NzAwMDA3MUVBRkZFQTkxCis6MTA1OEQwMDA3ODQ3MDAwMDM5RkVGRkVBNzg0NzAwMDA2M0ZFRkZFQUUwCis6MTA1OEUwMDA3ODQ3MDAwMDFCRkZGRkVBNzg0NzAwMDA2QkVBRkZFQUY5Cis6MTA1OEYwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwODAyODA0MDAwMEZFCis6MTA1OTAwMDBGODNEMDAwMDAwMDEwMDgwMDBGRjAwMDAwMDAwMDAwMEUyCis6MTA1OTEwMDBCOTBCRkZGRjAwMDAwMDAwRDUwQkZGRkYwM0ZGMDY1NDhCCis6MTA1OTIwMDAwMzAwMDAwMDc1MDRGRkZGMDAwMDAwMDBBMTA1RkZGRjU5Cis6MTA1OTMwMDAwNEZGMDc1NDAzMDAwMDAwQjUwNEZGRkYwMDAwMDAwMDRGCis6MTA1OTQwMDBGMTA1RkZGRjA1RkYwNTU0MDMwMDAwMDAzOTA0RkZGRkM4Cis6MTA1OTUwMDAwMDAwMDAwMDU1MDVGRkZGMDFGRjA0MDAwMzAwMDAwMEU4Cis6MTA1OTYwMDA0MTE4RkZGRjAwMDAwMDAwNjEwRUZGRkYwMkZGMDIwODY4Cis6MTA1OTcwMDAwMDAwMDAwMEExMDJGRkZGMDAwMDAwMDBGMTAyRkZGRjk1Cis6MTA1OTgwMDBGRkZGMDE0NDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA1OTkwMDA5RDBERkZGRjA2MDBGRjAwMDAwMDAwMDAzRDUwRkZGRkNGCis6MTA1OUEwMDA4MTUwRkZGRjAwMDAwMDAwRkZGRkZGMDAwMDAwMDAwMDJCCis6MTA1OUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkYwMEVBCis6MTA1OUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTA1OUQwMDBGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTA1OUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ODA1MDA4MEVBCis6MTA1OUYwMDAxMTc1MjE0MDFCNzUyMTQwMzE3NTIxNDA0OTc1MjE0MEE5Cis6MTA1QTAwMDA1NTc1MjE0MDYzNzUyMTQwN0Q3NTIxNDBBOTc1MjE0MDYwCis6MTA1QTEwMDA2RDc2MjE0MEM1NzYyMTQwRDM3NjIxNDBERDc2MjE0MDQ4Cis6MTA1QTIwMDBFNzc2MjE0MDk5NzcyMTQwQTc3NzIxNDBCNTc3MjE0MDNCCis6MTA1QTMwMDA2MTc4MjE0MDVGN0MyMTQwRTk3QzIxNDA4OTdEMjE0MEMzCis6MTA1QTQwMDBCRDdFMjE0MEM5N0UyMTQwMjk3RjIxNDA4RDdGMjE0MDlDCis6MTA1QTUwMDBCOTdGMjE0MEREN0YyMTQwMUQ4MDIxNDA0NTgwMjE0MENDCis6MTA1QTYwMDA4RDgwMjE0MDlEODAyMTQwQzU4MDIxNDBENTgwMjE0MEVFCis6MTA1QTcwMDAxRDgxMjE0MDVCODEyMTQwQjE4MTIxNDAxMTgyMjE0MDYzCis6MTA1QTgwMDAxQjgyMjE0MDFGODIyMTQwOEQ4MjIxNDBEOTgyMjE0MEVBCis6MTA1QTkwMDAzMTgzMjE0MDZEODMyMTQwRDE4MzIxNDAwOTg0MjE0MEZECis6MTA1QUEwMDAxOTg0MjE0MDUxODQyMTQwNjE4NDIxNDA3NTg0MjE0MDIyCis6MTA1QUIwMDA5RDg0MjE0MEE3ODQyMTQwQjE4NDIxNDAxNTg1MjE0MDQ3Cis6MTA1QUMwMDA0NTg1MjE0MDUxODUyMTQwQzU4NTIxNDBDRjg1MjE0MDE0Cis6MTA1QUQwMDBEOTg1MjE0MEUzODUyMTQwRUQ4NTIxNDBGNzg1MjE0MDhFCis6MTA1QUUwMDAwMTg2MjE0MDBCODYyMTQwMTU4NjIxNDAwMTg5MjE0MEY1Cis6MTA1QUYwMDAxRjg2MjE0MDI5ODYyMTQwMzM4NjIxNDAzRDg2MjE0MDUyCis6MTA1QjAwMDA2NTg2MjE0MDZGODYyMTQwRDE4NjIxNDBEQjg2MjE0MDc5Cis6MTA1QjEwMDBFNTg2MjE0MEVGODYyMTQwRjk4NjIxNDA5RDc0MjE0MDkxCis6MTA1QjIwMDAwMzg3MjE0MDY5ODcyMTQwQjU4NzIxNDBGOTg3MjE0MEJCCis6MTA1QjMwMDAwOTg4MjE0MDlENzQyMTQwNTU4ODIxNDA1OTg4MjE0MDgxCis6MTA1QjQwMDA1RDg4MjE0MEI1ODgyMTQwREQ4ODIxNDBFOTg4MjE0MEQ5Cis6MTA1QjUwMDBFRDg4MjE0MEYxODgyMTQwRjU4ODIxNDBGOTg4MjE0MEQ1Cis6MTA1QjYwMDBGRDg4MjE0MDJEODUyMTQwODk4NTIxNDA5RDc0MjE0MDVCCis6MTA1QjcwMDA5RDc0MjE0MDBEODkyMTQwOUQ3NDIxNDBFMTc0MjE0MDk0Cis6MTA1QjgwMDA5RDc0MjE0MDlENzQyMTQwOUQ3NDIxNDA5RDc0MjE0MDRECis6MTA1QjkwMDA5RDc0MjE0MDlENzQyMTQwNkI3ODIxNDBGNTdCMjE0MDBDCis6MTA1QkEwMDAzMTdDMjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTA1QkIwMDAwMDAwMDAwMDVDMDExODQwNTgwMTE4NDAyNEEzMjA0MDU4Cis6MTA1QkMwMDAyNEE3MjA0MDAwMDAwMDAwMDAwMDAwMDA2QzAxMTg0MEU1Cis6MTA1QkQwMDA2ODAxMTg0MDI0ODMyMDQwMjRBMzIwNDAwMDAwMDAwMEQ2Cis6MTA1QkUwMDAwMDAwMDAwMDdDMDExODQwNzgwMTE4NDAwMDAwMDAwMDBGCis6MTA1QkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QzAxMTg0MEMwCis6MTA1QzAwMDA4ODAxMTg0MDI0QTkyMDQwMjRBQjIwNDAwMDAwMDAwMDU3Cis6MTA1QzEwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDEyMDAxODAwMTIwMDQwCis6MTA1QzIwMDAwQzAwMTIwMDFDMDAxMjAwMjRBODIwNDBBNEE4MjA0MDUwCis6MTA1QzMwMDBBNEE4MjA0MDI0QTkyMDQwMDAwMDAwMDBEMUE4MjE0MEIxCis6MTA1QzQwMDAyREFBMjE0MDAwMDAwMDAwODk3MDIxNDBDOUExMjE0MEY3Cis6MTA1QzUwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDQzCis6MTA1QzYwMDA1Nzg5MjE0MEQxQTgyMTQwQzUyRkZGRkYwNTIxRkZGRjAzCis6MTA1QzcwMDBFRjIwRkZGRjU5QTcyMTQwMzQyRTAwODA0ODJFMDA4MERFCis6MTA1QzgwMDA1QzJFMDA4MDMwMzMzQTMxMzEzQTMxMzEwMDMwMzcyRkQ5Cis6MTA1QzkwMDAzMjMzMkYzMDMxMDAzMDMwMzAzMDMxMzUzNjM5MDA0MzM3Cis6MTA1Q0EwMDA2RjcwNzk3MjY5Njc2ODc0MjAyODYzMjkyMDMyMzAzMEY4Cis6MTA1Q0IwMDAzMTIwMzM0MzZGNkQyMDQzNkY3MjcwNkY3MjYxNzQ2OTZFCis6MTA1Q0MwMDA2RjZFMEEwMDA4MTAwMDAzMDAwMDAwMDAwMDAwMDAwMEQyCis6MTA1Q0QwMDAwMDAwMDAwMDhDNTNGRkZGMjdGMDdERkQwMDAxMDAwMjUzCis6MTA1Q0UwMDBEQTBFODIwMDAxNDA2NDA0NjQyRDAwODBFNDJDMDA4MDAwCis6MTA1Q0YwMDA2OTNFRkZGRkM5NEZGRkZGRDUyNEZGRkZDOTNCRkZGRkYwCis6MTA1RDAwMDAyOTNDRkZGRjE5MUFGRkZGNjUxMUZGRkZDQzUzRkZGRjZFCis6MTA1RDEwMDAyMTQwRkZGRjg5NzAyMTQwNDk3MjIxNDBEOTNGRkZGRjk4Cis6MTA1RDIwMDAyMTlBMjE0MDg1MjRGRkZGNjQ1M0ZGRkY4QzUzRkZGRjFFCis6MTA1RDMwMDAwMDAwMDAwMEZGRkYwMDAwODAzMDAwODAwMDAwMDAwMDM1Cis6MTA1RDQwMDBGRkZGMDAwMDAwMDAyMDQwQjA1MDAwMDA3QjBFMDAwMDZDCis6MTA1RDUwMDAwMDZFMjE0MDAwMDAwMDAwMDAwMDAwMDBFRDg5MjE0MDlECis6MTA1RDYwMDA4Qjg5MjE0MEE1OEMyMTQwMDU4RDIxNDBDRDhEMjE0MDdFCis6MTA1RDcwMDA4QjhCMjE0MEE5OEUyMTQwMTU4RjIxNDA2OThCMjE0MEJBCis6MTA1RDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTA1RDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTA1REEwMDAwMDAwMDAwMDU5QkQyMTQwQzFCRDIxNDAyREJFMjE0MDUxCis6MTA1REIwMDAwMDIwMEE0QTBCMjMxQjAyRDExODJEMjM5QjAxRDMxODY0Cis6MTA1REMwMDA4ODYxRDg2MEQ4NjM4MDMyQzg2MDA4NjE0ODYxRDA2MjU5Cis6MTA1REQwMDAwMzQ4QzA0NjQ4NjA4ODYwNzA0NzAwMDA2ODBFMDA4MDM1Cis6MTA1REUwMDBGRTAzMDAwMEYwQjU4NEIwMEMxQzA1MUMwMDIzMDA5M0RBCis6MTA1REYwMDBGRkY3REVGRjY4NDkwQjIzMUIwMkNGMTg3ODY4Mjg0MEE1Cis6MTA1RTAwMDAwMDIyRjg2MDNBNjFCQTY4MjI0MDdBNjEwQzFDNDEwOUFDCis6MTA1RTEwMDAwM0QyNTEwOTAxRDI4MDBBMDJEMzYwNDgwMEYwQzJGOENGCis6MTA1RTIwMDAwMTIwRjk2ODQ5MDkwM0QyNzk2OTQ5MDkwMEQyMDAyMEEzCis6MTA1RTMwMDAwMDA2MDAwRTAzRjBENEZBRjg2ODAwMjg3MEQwMDAyM0EyCis6MTA1RTQwMDAwMjkzMDE5MzU0NEEwMTIzMTg0M0Y4NjAwMDIwRDUxREEyCis6MTA1RTUwMDA3OTM1MDM5NTAxMjQwMDIxNEY0REZBNjgyMjQwMzlEMDRECis6MTA1RTYwMDA4QTAwNTIxODkyMDA0RTRCOUI1QzFFMUM4MzQyMDREMDQ5Cis6MTA1RTcwMDA0QjRCRDMxODVCNzg4MzQyMkNEMTQ5NEJEMjE4RDM3ODQzCis6MTA1RTgwMDAwMzlERUQ2QUFCNDIwMkQ5MDM5REMwNDZFQjYyNTM2OEE1Cis6MTA1RTkwMDA1QjA4MDFEMzAxMjMwMDkzODY0MjBBRDE5NTY4MDI5QkQ3Cis6MTA1RUEwMDA1RTFDMDI5NjlCMDAzQzRFOUUxOTBCMjMxQjAyRjMxOEFFCis6MTA1RUIwMDA5RDYxNTM3ODgzNDIwREQxRDI2ODAxOUI1RDFDMDE5NTkxCis6MTA1RUMwMDA5QjAwMzU0RDVEMTkyRDIzOUIwMUVCMThEQTYwM0E2OTczCis6MTA1RUQwMDAwMTMyM0E2MTY0MDAwMTMxMEIyOUJERDMwMTMwMDkyODM4Cis6MTA1RUUwMDBCOEQzMDAyMDAyOUI5OTAwMkI0QTg5MTgwQjIzMUIwMjcwCis6MTA1RUYwMDBDOTE4ODg2MTAxOUI5OTAwODkxODJEMjM5QjAxQzkxODM1Cis6MTA1RjAwMDBDODYwMDA5QjAwMkIwQ0QxODEwMDg5MTgwQjIzMUIwMjU5Cis6MTA1RjEwMDBDOTE4Q0I2OUMwNDY4QjYxMDEzMDBCMjhGNEQzMDhFMDY3Cis6MTA1RjIwMDAwN0UwMDM5REU4NkEzMDI4MDNEMjMwMjAwMzlEQzA0Njc1Cis6MTA1RjMwMDBFODYyMTk0QTc4NjkwMDI4MkFEMDAwMjEwMTIzMTg0MzExCis6MTA1RjQwMDA3ODYxMDAyMDAxMjQwMDIyMTM0RTdCNjkyMzQwMTBEMDg5Cis6MTA1RjUwMDA5MzAwOUIxODlCMDAxMjRENUIxOTlENzg4NTQyMDhEMUQ4Cis6MTA1RjYwMDAxRDY5MEIxQzlCMDA5RTE5MkQyMzlCMDFGMzE4REQ2M0ZCCis6MTA1RjcwMDAwMTMxNjQwMDAxMzIwQjJBRTZEMzAxMzAwOTI4RTFEMzU0Cis6MTA1RjgwMDAwMDIwODkwMDA0NEE4OTE4MkQyMzlCMDFDOTE4Qzg2MzgxCis6MTA1RjkwMDAwNEIwRjBCQzA4QkMxODQ3NjgwRTAwODAzMDUzRkZGRjA3Cis6MTA1RkEwMDAwMDAxMDA4MDAwNDcwODQ3MTA0NzE4NDc3ODQ3QzA0NjVGCis6MTA1RkIwMDAxOEMwOUZFNTFDRkYyRkUxNzg0N0MwNDYxMEMwOUZFNTQxCis6MTA1RkMwMDAxQ0ZGMkZFMTc4NDdDMDQ2MDhDMDlGRTUxQ0ZGMkZFMTZBCis6MTA1RkQwMDAzODUyRkZGRjg4NTFGRkZGRDVCMDIxNDBGMEI1MDQyMEIzCis6MTA1RkUwMDAxQTQ5MDEyNTA4NjAxQTRGQkIyMzFCMDFGODE4MDU3M0Q1Cis6MTA1RkYwMDAxODQ4NDE2QjJDMDUwMDIwN0E2RTE3NEI4QTQyMUREMDQxCis6MTA2MDAwMDAxOTdCMDAyOTE3RDFEOTFERkYzMTNBMzE0OTc4MUUxQzVGCis6MTA2MDEwMDAwMDI5MTBEMUIwNjAxMDIwNzA2MDEwNEExMDQ5RkZGN0JECis6MTA2MDIwMDBDM0ZGMDAyODA3RDAzNTczMDQyM0I4NjkxODQzQjg2MTRCCis6MTA2MDMwMDAyMDYxMDBGMDE3RjhGMEJDMDhCQzE4NDcxODczMDQyMzVGCis6MTA2MDQwMDBCODY5OTg0M0I4NjEyMDYxRjVFNzAwMDAwMDAwMDBCMDJFCis6MTA2MDUwMDA2ODBFMDA4MDAwMDExODQwMjgwNTAwODAyMDU1RkZGRkQxCis6MTA2MDYwMDA3RDcxMjE0MEY4QjUxNTRGMzk2QzE1NDg0MDZFMEMxQUZBCis6MTA2MDcwMDAxNDRFNzE2ODE0NERBMTQyMDZEODE0NEEwQTQzMDA5Mjg2Cis6MTA2MDgwMDBCOTZCMDkxOEZBNkIxMUUwMTEyMjUyMDUyMjQzMDA5MkY0Cis6MTA2MDkwMDBCOTZCMDkxODAwMjBGQTZCMkIxQ0ZGRjc4REZGNzA2ODk1Cis6MTA2MEEwMDAwMDFCMEE0QTAyNDMwMDkyQjk2QkZBNkIwMDIwMkIxQ0JBCis6MTA2MEIwMDBGRkY3ODJGRkY4QkMwOEJDMTg0NzAwMDA3QzI5MDA4MDZECis6MTA2MEMwMDA2ODBFMDA4MDI4MDUwMDgwNDQ4MDIwNDAwMDAwMzcwMkQwCis6MTA2MEQwMDBGMEI1MkI0RkI4Njg3OTY4QzAxOTIwMzAyOTRBRkZGNzBFCis6MTA2MEUwMDA2M0ZGMDEyMEMwMDIyODQ5QzA0NjA4NjBCOTY4MzgxQzE3Cis6MTA2MEYwMDAyNjREMDAyNDI2NEVFRjFENzkzNzAwMjkzMUQxMzE2ODE1Cis6MTA2MTAwMDAwQTc4MTIwQTAzRDIwNDczRjBCQzA4QkMxODQ3NDk3ODE1Cis6MTA2MTEwMDAwMDI5MENEMTA1MUM0MDY4MDBGMDNFRjkzMDY4MDBGMDAxCis6MTA2MTIwMDA2N0Y4MDAyODI2RDEyQzczRkZGNzU4RkYyMkUwMDkwMUY5Cis6MTA2MTMwMDAwNzFDNDE2MDA4MUMxNzRBMTc0OUZGRjczNUZGMDAyODY0Cis6MTA2MTQwMDAwN0QxM0M3MzA0MjNBODY5OTg0Mzk5MDRBODYxMDg2MUE2Cis6MTA2MTUwMDBEQUU3MTAyMDAwRjAyMEY5MTAyMEI4NjBGRkY3ODJGRjg2Cis6MTA2MTYwMDBEMkU3MDUxQzQwNjgwMEYwMTdGOTMwNjgwMEYwNDBGOEVECis6MTA2MTcwMDAwMDI4RDhEMDAyMjNGODZCMTg0M0Y4NjNDNEU3MDAwMDY2Cis6MTA2MTgwMDAyODA1MDA4MEE1NTVGRkZGMDAwMDAwQjA2ODBFMDA4MEM0Cis6MTA2MTkwMDBFNDAxMDA4MDIwNTVGRkZGN0Q3MTIxNDA5MEI1MDEyMDcyCis6MTA2MUEwMDA0MDAzMTA0OTAwMjcwODYwMEY0Q0UwMURGRjMwM0EzMEQzCis6MTA2MUIwMDA0NzcwRTA2OTgwMDAwMDE5MDA2OTAwRjBEN0Y4RTA2OUQ1Cis6MTA2MUMwMDAwMDI4MDFEMEU3NjEwMUUwMDEyMEUwNjEwNzQ4MDIyM0Q3Cis6MTA2MUQwMDBDMTZCMTk0M0MxNjMyNzczRkZGNzAwRkY5MEJDMDhCQzc0Cis6MTA2MUUwMDAxODQ3MDAwMDAwMDAwMEIwMjgwNTAwODBFODBFMDA4MDdECis6MTA2MUYwMDA4MEI1ODRCMDA3MUM3ODg4NkQyODAzREIzODFDMDBGMDVDCis6MTA2MjAwMDBGN0Y4MTdFMDgwMDAwRDQ5MDk1ODM4MUNGRkY3Q0JGRTVFCis6MTA2MjEwMDAwMDI4MEZEMTM5NzhDOTA5MENEMzY5NDYzODFDMDBGMDIxCis6MTA2MjIwMDBDRkY4Njg0NjAwMjEwMEYwMEJGODAwMjgwMUQxMDEyMENBCis6MTA2MjMwMDAwMEUwMDAyMDA0QjA4MEJDMDhCQzE4NDdFODAxMDA4MEUyCis6MTA2MjQwMDBGMEI1ODJCMDAyMUM0MTRCREQxREZGMzUzQTM1MkY3ODg5Cis6MTA2MjUwMDAwMDJGMDFEMDAwMjcwMEUwMDEyNzJGNzAyRjc4RkIwMENFCis6MTA2MjYwMDBEQjE5NUIwMTNBNEZEQzE5NDA3ODAwMDFDNzFEMDkzNzgzCis6MTA2MjcwMDAwMDIwODMwMEQ2NThDMDQ2RTY1MDAxMzAwNDI4RjhEM0U5Cis6MTA2MjgwMDAwMDI5MEZEMDAwMjJCQjA4MDE5MzgzNDIwQkQ5MTMxQ0I1Cis6MTA2MjkwMDA5QjAwQ0I1ODg2MDBBMzUxMDE5QjAxMzAwMTMyODM0MjAxCis6MTA2MkEwMDBGNUQ4MDBFMDEwMjcyQjQ4MDI2RDgwNkUyQTQ5ODI0MjAzCis6MTA2MkIwMDAwM0Q4ODIxQUNCNkM5QTFBMDBFMDEyMUFCQTQyMDVEODk3Cis6MTA2MkMwMDAyNjQ4ODE2QjAxMzE4MTYzMDEyMDM3RTBDMzE5Q0E2QzE0Cis6MTA2MkQwMDA5MzQyMDhEODIyNEEzQTQzMDA5MjBBMUM0OTZDMDkxODkyCis6MTA2MkUwMDA5MjZDMjMxQzEyRTAxNjFBMDA5NjFCNDk0OTZDMDkxODdGCis6MTA2MkYwMDAxOTQ4ODI2QzAzMjAyMzFDRkZGNzVFRkVCODFCMTg0QTY2Cis6MTA2MzAwMDAwMjQzMDA5MkEzMTkxNDQ4ODI2QzQxNkMwMzIwRkZGN0VBCis6MTA2MzEwMDA1M0ZFMDEyMDBENDlDMDQ2Njg3MDhBNjk5MjAwNTIxOEU4Cis6MTA2MzIwMDAxNzYxOEE2OTAwMkEwMkQwMDAyNzhGNjEwMEUwODg2MTI2Cis6MTA2MzMwMDAwQzQ4MDIyM0MxNkIxOTQzQzE2MzAwMjAwMTI3MEE0OTlECis6MTA2MzQwMDBDMDQ2NEY3MzAyQjBGMEJDMDhCQzE4NDcyODA1MDA4MDU3Cis6MTA2MzUwMDA1MEJBMjA0MDY4MEUwMDgwN0MyOTAwODBBMDgyMjA0MDM2Cis6MTA2MzYwMDAwMDAwMTkwMkU4MEUwMDgwMTgxQTAwODAwNzQ5OEE2RUEyCis6MTA2MzcwMDAxMDE4MDc0QUQyNkMxMzA0MUIwQzgzNDIwMEQ4ODAxQUYxCis6MTA2MzgwMDA4ODY2ODg2RTAzNDlDMDQ2NDg2MTcwNDc2ODBFMDA4MDgxCis6MTA2MzkwMDA3QzI5MDA4MDkwRUUyMDQwMDY0OTRBNkUxMDE4MDY0QTdCCis6MTA2M0EwMDAxMjZDODI0MjAwRDg4MDFBNDg2NjQ4NkUwMzQ5QzA0NjgzCis6MTA2M0IwMDAwODYxNzA0NzY4MEUwMDgwN0MyOTAwODA5MEVFMjA0MEM0Cis6MTA2M0MwMDAwNTIyMEE2MDgyODhDMDQ2OEE4MDAwMjI0QTcwNDA4ODdFCis6MTA2M0QwMDBDMDQ2NDg4MENBODA4QTYwQ0E2MDcwNDcwNTIyMDI2MDUxCis6MTA2M0UwMDAwMDIyODI4MDQyNzA0MTgwQzI4MDgyNjBDMjYwNzA0NzE5Cis6MTA2M0YwMDA4MEI1ODRCMDA3MUMwRTQ4NDE2QjAxMzE0MTYzNjk0NjhBCis6MTA2NDAwMDAzODFDRkZGN0RERkYzODY4QzA0NjAwOTA0NTIwMDBBQjIwCis6MTA2NDEwMDAxODcwMDEyN0RGODA2ODQ2MDAyMUZGRjcxMUZGMDAyODcwCis6MTA2NDIwMDAwMUQxMzgxQzAwRTAwMDIwMDRCMDgwQkMwOEJDMTg0NzMzCis6MTA2NDMwMDBBMDgyMjA0MDAwQjU4NEIwQzE4ODA5NEFDMDQ2OTE4MTNECis6MTA2NDQwMDA2OTQ2RkZGN0JERkYwMTIwNDAwMjAxQUI1ODgwNjg0NjU2Cis6MTA2NDUwMDAwMDIxRkZGN0Y1RkUwMTIwMDRCMDA4QkMxODQ3MDAwMDNBCis6MTA2NDYwMDBFODBFMDA4MDAwQjVGRkY3QzNGRjA4QkMxODQ3MDEyMDA1Cis6MTA2NDcwMDAwMzQ5QzA0NjA4NzFBMTIxNDkwMzg4NjAwMDIwNzA0Nzg0Cis6MTA2NDgwMDAyODBGMDA4MDAwMjAwNDQ5QzA0NjA4NzFGRjIxQTEyMjg2Cis6MTA2NDkwMDA1MjAzMDEzMTkxNjA3MDQ3MjgwRjAwODAwMjIwQTEyMTMyCis6MTA2NEEwMDA0OTAzODg2MDAwMjA3MDQ3MDEyMDQwMDJBMTIxNDkwMzcwCis6MTA2NEIwMDA4ODYwMDAyMDcwNDdDMDg4QzAwNkMwMEVBMTIxNDkwMzMzCis6MTA2NEMwMDA0ODYxMDI0OUMwNDZDODYzMDAyMDcwNDdFODFBMDA4MDRFCis6MTA2NEQwMDA4MEI1ODRCMDA4NDkwRjZCNjk0NkZGRjc3MUZGRjgwNjc1Cis6MTA2NEUwMDBDMDBFMDFBQjU4ODA2ODQ2MDAyMUZGRjdBOUZFMDEyMENECis6MTA2NEYwMDAwNEIwODBCQzA4QkMxODQ3ODAwMDE0NDA4MEI1ODVCMDRCCis6MTA2NTAwMDAwNzFDNjk0NjM4MUNGRkY3NUJGRkY4ODgwNEE5MDNGMEY1Cis6MTA2NTEwMDBDOUZGMDFBQjU4ODAwMUE4NDA4ODAwMjgwRkQwMDFBODBFCis6MTA2NTIwMDA0MDg4ODAwODAzMzg4MDA4MDEzMDA0M0I1ODcwMDQ5ODg0Cis6MTA2NTMwMDAwMTY4QzA0NjAyOTE0MDY4QzA0NjAzOTAwNUUwMDBBODhCCis6MTA2NTQwMDAwMDc4NDAyMzE4NDMwMEFCMTg3MDA0OThDMTFEMDEzMTM2Cis6MTA2NTUwMDA2ODQ2RkZGNzc1RkUwMTIwMDVCMDgwQkMwOEJDMTg0N0VGCis6MTA2NTYwMDA5MEI1ODRCMDE0NEYzOTdCMDAyOTIwRDFGOTFERkYzMTNCCis6MTA2NTcwMDAzQTMxNDk3ODAwMjkxQUQxMTA0OTA1MjIwMDkyMDgyMjlGCis6MTA2NTgwMDAwMEFCNUE4MDk4ODAwNjIwMDBBQjU4NzAwMDI0REM4MDU1Cis6MTA2NTkwMDAwODY4QzA0NjAyOTA0ODY4QzA0NjAzOTAwMTIwMzg3M0RFCis6MTA2NUEwMDA2ODQ2MDgzMUZGRjc0Q0ZFMDAyODAwRDAzQzczMDRCMDY5Cis6MTA2NUIwMDA5MEJDMDhCQzE4NDcwMDAwMjgwNTAwODBBNDJBMDA4MDcxCis6MTA2NUMwMDA5MEI1ODRCMDA3MUM2OTQ2MzgxQ0ZGRjdGOUZFQkE2ODFECis6MTA2NUQwMDAwRDRDMEU0ODAwMkEwNUQxMEQ0OUZGRjdFNEZDMDAyOEI4Cis6MTA2NUUwMDAwQ0RBMDVFMEI5ODgwQjRCRkZGN0RGRkMwMDI4MDVEQTcxCis6MTA2NUYwMDAwMUFCNUM4MDY4NDYwMDIxRkZGNzIyRkUwMDIwMDRCMDVBCis6MTA2NjAwMDA5MEJDMDhCQzE4NDcwMDAwRkZGRjAwMDAwRDc2MjE0MDM5Cis6MTA2NjEwMDBDMUJEMjE0MDU5QkQyMTQwMDBCNUMwODgwM0YwMkVGRjA3Cis6MTA2NjIwMDAwMDIwMDhCQzE4NDcwMEI1RkZGN0UyRkUwOEJDMTg0Nzc5Cis6MTA2NjMwMDAwMEI1RkZGN0RERkUwOEJDMTg0NzAwQjUwMTFDMDIyMEJECis6MTA2NjQwMDAwMEYwMDJGODA4QkMxODQ3QjBCNUM2QjAwNzFDMDgxQzFCCis6MTA2NjUwMDA2OTQ2RkZGN0I1RkUyMTQ4RkZGN0E0RkMwNDFDMjA0QTU5Cis6MTA2NjYwMDAwMDIxMzgxQ0ZGRjdBMEZDMDAyODI3RDAwNEE5MUQ0QUYwCis6MTA2NjcwMDAzODFDRkZGNzk5RkMwNEE4MDAyMzAxMkYwNkQxMENBQUFGCis6MTA2NjgwMDAwMjMyMDAyMTEzNjAwMTMxMTAyOUZCRDMwMTY4MDQyOTczCis6MTA2NjkwMDAwNEQ5ODkwODAzMzk4OTA4MDEzMTAwRTAxOTFDMDBBQkNECis6MTA2NkEwMDA1OTcwMDZBOTA5NzhDMDQ2RDk4MDAwNjhDMDQ2MDI5MDkyCis6MTA2NkIwMDAwNzk4QzA0NjAzOTAwNDMzMDhBRDAyRTA0NTIwMDBBQkM0Cis6MTA2NkMwMDAxODcwMDk0OTIwMUNGRkY3NkVGQzY4NDYyOTFDRkZGNzZCCis6MTA2NkQwMDBCN0ZEMDEyMDQ2QjBCMEJDMDhCQzE4NDcyNDAyRkZGRjNDCis6MTA2NkUwMDA1OUIxMjE0MDlEQUYyMTQwM0MwMkZGRkYwMEI1MDExQzg0Cis6MTA2NkYwMDAwMjIwMDBGMDEwRjgwOEJDMTg0NzAwQjUwMTFDMDEyMDZBCis6MTA2NzAwMDBGRkY3QTJGRjA4QkMxODQ3MDBCNTAxMUMwMTIwMDBGMEVDCis6MTA2NzEwMDAwMkY4MDhCQzE4NDdGMEI1QzdCMDA0MUMwRjFDMzgxQ0ExCis6MTA2NzIwMDAwMUE5RkZGNzRERkUyMTQ4RkZGNzNDRkMwMDkwNzg3ODY3Cis6MTA2NzMwMDAwMDAxQkE2ODA0MzBGQzJBMjVEOEZGMjMwOTMzOTg0MkE3Cis6MTA2NzQwMDAyMUQ4MTkyQzFGRDhGRDg4Rjg2OEMwNDYwNTkwRjkxRDdFCis6MTA2NzUwMDAwOTMxMDZBQjAwMjA3RTc4MDAyRTBEREQ0MEM5NDBDMzE0Cis6MTA2NzYwMDA0MEM5NDBDMzQwQzk0MEMzNDBDOTQwQzMwMTMwMDAwNEQwCis6MTA2NzcwMDAwMDBDN0U3ODg2NDJGMURDMjAxQzA1QTkyQjFDRkZGNzVCCis6MTA2NzgwMDAyMUZDMDAyODA1RDAwMUE4MDA3ODQwMjMxODQzMDFBQjY0Cis6MTA2NzkwMDAxODcwMDc0OTAwOThGRkY3MDZGQzAwMjEwMUE4RkZGN0QxCis6MTA2N0EwMDA0RkZEMDEyMDQ3QjBGMEJDMDhCQzE4NDcyNDAyRkZGRjkyCis6MTA2N0IwMDAzQzAyRkZGRjAwQjVGRkY3MUJGRTA4QkMxODQ3RjBCNTExCis6MTA2N0MwMDBDNkIwMDcxQ0ZDODgyNTRENjg2ODAxMzA2OTQ2Njg2MEMyCis6MTA2N0QwMDAzODFDRkZGN0Y1RkQxMDJDMDhEMzAwQTgwMDc4NDAyM0UzCis6MTA2N0UwMDAxODQzMDBBQjE4NzAwMjIwRDg4MDE3RTA3ODc4ODIwMDM4Cis6MTA2N0YwMDBGQjFEMDkzMzAwMjBCOTY4MDAyQTE1RDk0MENCMEYxQ0I2Cis6MTA2ODAwMDAwMTMxQkU0MjBERDAwMEFBMTI3ODQwMjMxQTQzMDBBQkRBCis6MTA2ODEwMDAxQTcwMDQyMkRBODAwMjkwMDM5MTA0MzM2ODQ2MDAyMTQyCis6MTA2ODIwMDAxNUUwMDEzMDkwNDJFOUQzMDBBQjVDNzAwMjk0Njk2OEQ2Cis6MTA2ODMwMDBDMDQ2MDM5MUEyMDAwMDIwMTAzMzAwMkEwNUQ5MEYxQzg2Cis6MTA2ODQwMDA4MEMzMDEzMDAxMzE5MDQyRjlEMzY4NDYwNEE5RkZGN0IzCis6MTA2ODUwMDBGN0ZDMDEyMDQ2QjBGMEJDMDhCQzE4NDc5QzAzMDA4MDQwCis6MTA2ODYwMDA5MEI0MjM0ODAwNjgwMTIxNDIwOTAwRDMwMDIxMDAyNzg5Cis6MTA2ODcwMDAzQTFDNDMwQjAwRDIwMjIyMTE0MzFFNEEyMDI0RDM2ODQzCis6MTA2ODgwMDAwMTJCMkVEMTgwMEEwMEQyMDAyNDBDNDMyMDFDMUIyMzk0Cis6MTA2ODkwMDBEQjAxRDExODg5OEIwOTBCMDBEMjA0MjczODQzRDE2RjUzCis6MTA2OEEwMDAwOTY4MDkwQTA3RDJEMTFENzkzMTA5NjgwOTY4MDkwQUZFCis6MTA2OEIwMDAwMUQzMDgyMzE4NDNFMzIzMUIwMUQxMTg4OTc5MDMyOTQ1Cis6MTA2OEMwMDAwMkQxRkYyMzAxMzMxODQzMEI0OTA5NkExMDIyNEIwQUY2Cis6MTA2OEQwMDAwMEQyMDAyMjEwNDM4OTA3ODkwRjg5MDEwODQzOTBCQzI4Cis6MTA2OEUwMDA3MDQ3NDAwQzAwRDIwMDI0MEM0MzIwMUNFQ0U3MDAwMDUxCis6MTA2OEYwMDAwMDAwMTA0MDY4MEUwMDgwQzAwMDE4NDBGMEI1M0E0QzBGCis6MTA2OTAwMDAyMDFDMDRGMDA3RkEzOTQ4RTMyMzFCMDFDNzE4Qjk3OUEyCis6MTA2OTEwMDAzNzRFQzUxRDc5MzUwNjI5NjJEMjAyQTM1QjVDNUIwMDQ4Cis6MTA2OTIwMDA5RjQ0MDAxQzAzMEUxRTM3NEU1NTAxMjBCODcxMDAyMEY1Cis6MTA2OTMwMDBCMDYwRkZGNzk1RkYwNTIzOTg0MzAwRjA2RkY4MENFMDc3Cis6MTA2OTQwMDBGRkY3OEVGRkMwMDgwNkQzQjA2ODQxMUNCMTYwMEEyODZCCis6MTA2OTUwMDAwM0Q5MDQyMDAwRTAwMjIwQjg3MTY0MjIyMDFDMkJFMDNGCis6MTA2OTYwMDAwNjFDQzA2RjgwMjMwMTY4MTk0MzAxNjAwMzIwQjg3MUMxCis6MTA2OTcwMDAyMDFDMjA0QTAwMjEwNEYwOTlGOUYwNkYwNDIzMDE2OERCCis6MTA2OTgwMDA5OTQzMDE2MDI4NjgwMTY4MTk0MzAxNjBGMEJDMDhCQ0E0Cis6MTA2OTkwMDAxODQ3MDUyMUI5NzEyOTY4MDQyMzBBNjg5QTQzMEE2MEQ3Cis6MTA2OUEwMDBDMDZGMDE2ODE5NDMwMTYwRkZGNzVBRkYwODIzMTg0M0JECis6MTA2OUIwMDAwMEYwMzRGODIwMUMxMDRBMDAyMTA0RjA3N0Y5RTVFN0Q0Cis6MTA2OUMwMDBGRkY3NEVGRjA0MjMxODQzMDBGMDI4RjhERUU3MDAyMDBECis6MTA2OUQwMDAyOTY4NjAyMzBBNjg5QTQzMEE2MEZGRjdFM0ZBRDVFNzVCCis6MTA2OUUwMDAwNjIwQjg3MUQyRTcwMDAwQTk3OTIxNDA2ODBFMDA4MDI2Cis6MTA2OUYwMDA5QzAzMDA4MDMwNzUwMDAwMTAyNzAwMDAwMEI1MDAyMEM3Cis6MTA2QTAwMDAwNDQ5QzA0Njg4NzEwNDQ4MDEyMjAwMjEwNEYwNEVGOTZGCis6MTA2QTEwMDAwOEJDMTg0Nzk4MUMwMDgwQTk3OTIxNDA5MEI1MDcxQzM0Cis6MTA2QTIwMDAzMTQ4MDA2ODc5MDgwM0QzMTAyMzAxMUM5OTQzMDFFMDIxCis6MTA2QTMwMDAxMDIxMDE0MzJENENFMjY4MDEyQTA1RDEyMjc5MDAyQTU4Cis6MTA2QTQwMDAwMkQwMDEyMzlCMDIxOTQzODE0MjAyRDAwMTIwMDAwNTlDCis6MTA2QTUwMDAwMTYwRTA2ODAxMjgyMEQxMUIyM0RCMDFFMDE4ODA4QjU2Cis6MTA2QTYwMDBGOTA4MDREMzAxMjNEQjAyMDExQzk5NDMwMUUwMDEyMTUxCis6MTA2QTcwMDBDOTAyODE0MjAyRDAwMDIwMDJGMDFBRkIzODA5MDdEMzc0Cis6MTA2QTgwMDBFMDZGODAyMzAxNjg5OTQzMDE2MEUwMTgwMDY4MDBFMDJFCis6MTA2QTkwMDBFMDZGODAyMzAxNjgxOTQzMDE2MDE1NDgwMTZBNzgwOTk1Cis6MTA2QUEwMDAwM0QzRkYyMDAxMzAwODQzMDNFMEZGMjMwODFDMDEzMzE4Cis6MTA2QUIwMDA5ODQzODAwODgwMDBCQTA5OTIwNzkyMEYxMDQzODg0MkQ5Cis6MTA2QUMwMDAwMkQwMEM0OUMwNDYwODYyRTE2ODAxMjkwOEQxNzkwQTYwCis6MTA2QUQwMDAwNkQzRkYyMzA0MzMxODQwMDMyODAxRDFGRkY3OEVGRkFDCis6MTA2QUUwMDA5MEJDMDhCQzE4NDcwMDAwMDAwMDEwNDA2ODBFMDA4MEYxCis6MTA2QUYwMDBDMDAwMTg0MEMwMDAxODAwODBCNUZGRjdCMUZFODAwOTQzCis6MTA2QjAwMDAxQkQyMEY0OEUzMjMxQjAxQzExODRBNzkwMDJBMTREMTc0Cis6MTA2QjEwMDAwMTIyNEE3MTAwMjc4MDMwMDA2ODYwMjMwMTY4OTk0MzkwCis6MTA2QjIwMDAwMTYwMDg0ODA2RTAwMjIwMDJGMDhDRkMwNzIwMDJGMDE5Cis6MTA2QjMwMDA1QkZDMzgxQ0ZGRjczNkZBRjVFNzgwQkMwOEJDMTg0NzQ5Cis6MTA2QjQwMDA2ODBFMDA4MEY0MDFGRkZGMDBCNTg0QjA2OTQ2RkZGN0NFCis6MTA2QjUwMDAzN0ZDRkZGNzg1RkUwMUFCNTg4MDA4NDgwMDY4QzA0NjQ3Cis6MTA2QjYwMDAwMjkwMDc0ODAwNkFDMDQ2MDM5MDY4NDYwMDIxRkZGNzdDCis6MTA2QjcwMDA2N0ZCMDEyMDA0QjAwOEJDMTg0NzAwMDAwMDAwMTA0MDZCCis6MTA2QjgwMDBDMDAwMTg0MDgwQjU4NEIwMDcxQzY5NDYzODFDRkZGNzY4Cis6MTA2QjkwMDAxN0ZDRjg4OEZGRjc0MkZGRkZGNzYyRkUwMUFCNTg4MDUxCis6MTA2QkEwMDA2ODQ2MDAyMUZGRjc0Q0ZCMDEyMDA0QjA4MEJDMDhCQzA0Cis6MTA2QkIwMDAxODQ3QjBCNUM2QjBDNzg4Njk0NkZGRjcwMUZDMDEyNDg1Cis6MTA2QkMwMDAxQTRCOUY0MjBBRDkwMEE4MDA3ODQwMjMxODQzMDBBQjEzCis6MTA2QkQwMDAxODcwMDIyMEQ4ODA2ODQ2MDAyMTIwRTAxNDQ4RkZGNzkyCis6MTA2QkUwMDBFMUY5MDUxQzEzNEEzODFDMDRBOUZGRjdEREY5MTI0OTI1Cis6MTA2QkYwMDAyODFDRkZGN0Q4RjkwMTJGMDZEMTBDQTkwMDIwMDAyMjhDCis6MTA2QzAwMDAwQTYwMDEzMDEwMjhGQkQzMTAyMDAwQUI1ODcwMDQ5OEE0Cis6MTA2QzEwMDBDMDQ2MDI5MDA1OThDMDQ2MDM5MDY4NDYwNkE5RkZGNzUzCis6MTA2QzIwMDAwRkZCMjAxQzQ2QjBCMEJDMDhCQzE4NDdGRjAxMDAwMDk5Cis6MTA2QzMwMDAyNDAyRkZGRjlEQUYyMTQwM0MwMkZGRkZGMEI1QzZCMDJDCis6MTA2QzQwMDAwNzFDNjk0NjM4MUNGRkY3QkJGQkZDODg3ODc4MDEyNUQ4Cis6MTA2QzUwMDAxMDI4MDFEMTE5MkMwOUQ5MDBBODAwNzg0MDIzMTg0MzI1Cis6MTA2QzYwMDAwMEFCMTg3MDAyMjBEODgwMDQzMzI3RTBCODY4QzA0NjEzCis6MTA2QzcwMDAwNDkwRjg2OEMwNDYwNTkwMDZBQUZCMUQwOTMzMDAyMTYwCis6MTA2QzgwMDA3ODc4MDAyODBEREQwMDIwNDBDQjQwQzIwMTMwMDAwNEEwCis6MTA2QzkwMDAwMDBDMDQyOEY4REI0ODFDMDEwNDA5MEM3ODc4ODg0MkIxCis6MTA2Q0EwMDBGMURDMEI0OEZGRjc3RUY5MDcxQzBBNEEyMDFDMDRBOUY3Cis6MTA2Q0IwMDBGRkY3N0FGOTA4NDkzODFDRkZGNzc1Rjk2ODQ2MDAyMTkzCis6MTA2Q0MwMDBGRkY3QkVGQTI4MUM0NkIwRjBCQzA4QkMxODQ3MDAwMDBECis6MTA2Q0QwMDAyNDAyRkZGRkM1QUYyMTQwM0MwMkZGRkZGMEI1ODRCMEE2Cis6MTA2Q0UwMDAwNDFDMDAyN0U2ODhBMjY4NDc0OTA4NzkwMDI4MDhEMEQ0Cis6MTA2Q0YwMDAwMDJFMDFEMDAxMkUwMUQxMDEyNzAxRTAwNDJFMDBEMTg4Cis6MTA2RDAwMDAwMzI2MDEyNTQxNDgwNTJFNjZEMjAyQTM5QjVENUIwMDQ4Cis6MTA2RDEwMDA5RjQ0MDAxQzAzMDYwODBDMTAwMDA1ODAwMDIzMDNFMEJDCis6MTA2RDIwMDAwNTgwMDVFMDAwMjMwMzgwNDM4MDA2RTAwMDIzMDM4MDA0Cis6MTA2RDMwMDA0NTgwMDJFMEZGMjMwMTMzMDM4MENCMUQ3OTMzOUU4OTE4Cis6MTA2RDQwMDAwMTIzNUIwMjlFNDIwMkRCRDIwN0QyMEYwMEUwMDEyMjQ4Cis6MTA2RDUwMDA2RDIzNUIwMUM5MTg4OTg4RkYyM0UxMzM5OTQzMDEyMzFGCis6MTA2RDYwMDAxOTQzMDY4OEZGMzM5RTQyMEREMUZGMjBFMTMwMDg0M0NFCis6MTA2RDcwMDAwMDJBMDREMTAxMjM5QjAyOTg0MzAxMUMyMEUwMDEyMTM5Cis6MTA2RDgwMDA4OTAyMDE0MzFDRTAwMTJFMEFEMTQwODgwMTI4MDREMTY4Cis6MTA2RDkwMDA2MDIzMTk0MzAwMkExM0QwMENFMDIwMjMxOTQzMEZFMDhECis6MTA2REEwMDAwMDJFMEREMTQwODgwMTI4MDhEMUZGMjM4MTMzMTk0M0RCCis6MTA2REIwMDAwMDJBMDVEMDAxMjM5QjAyMTk0MzAxRTA4MDIzMTk0M0Q3Cis6MTA2REMwMDAwNDIwMDJGMDc1RjkwOTIxNDkwMjAwMjAwMkYwNzBGOTRGCis6MTA2REQwMDAwMDJGMDJEMTAwMjAxMkUwRkZFNzY5NDYyMDFDRkZGN0Q4Cis6MTA2REUwMDBFRkZBMDBBODAwNzg0MDIzMTg0MzAwQUIxODcwMDIyMDg3Cis6MTA2REYwMDBEODgwNjg0NjAwMjEwNDMzRkZGNzIyRkEyODFDMDRCMDJCCis6MTA2RTAwMDBGMEJDMDhCQzE4NDcwMDAwNjgwRTAwODA4ODFDMDA4MDk5Cis6MTA2RTEwMDBDMDg4NTEyMTg5MDMwODYyMDAyMDcwNDc4MEI1MTY0RjUxCis6MTA2RTIwMDBGODY4MDEyODA3RDEzNzIzOUIwMUY4MTg0MDhBODAyMTkwCis6MTA2RTMwMDAwMTQzMUIyMDA3RTA2RDIzNUIwMUY4MTg4MDhCMDEyMUMzCis6MTA2RTQwMDA0OTAzMDE0MzEwMjAwMkYwMzNGOTAxMjA3MTIzNUIwMTUzCis6MTA2RTUwMDBGOTE4MDg4MDQ4ODAxQjIzREIwMUY4MTg4MDhCMDEyMzc4Cis6MTA2RTYwMDAxQjAzOTg0MzQxMjEwOTAyMDE0MzAwMjAwMkYwMjBGOTRECis6MTA2RTcwMDAwMDIwODBCQzA4QkMxODQ3NjgwRTAwODA4MEI1MTc0RjAyCis6MTA2RTgwMDBGODY4MDEyODA4RDEzNzIzOUIwMUY4MTg0MDhBODAyMzJECis6MTA2RTkwMDA5ODQzMDExQzFCMjAwOEUwNkQyMzVCMDFGODE4ODA4QkQwCis6MTA2RUEwMDAwMTIzNUIwMzk4NDMwMTFDMTAyMDAyRjAwMUY5RkYyMDJECis6MTA2RUIwMDA3MTIzNUIwMUY5MTgwMTMwMDg4MDFCMjNEQjAxRjgxOEVFCis6MTA2RUMwMDA4MDhCNDEyMzFCMDI5ODQzMDkyMTQ5MDIwMTQzMDAyMDgyCis6MTA2RUQwMDAwMkYwRUVGODAwMjA4MEJDMDhCQzE4NDc2ODBFMDA4MDY1Cis6MTA2RUUwMDA4MEI1ODRCMDA4NDlDRjZBNjk0NkZGRjc2OUZBQjgwNUVBCis6MTA2RUYwMDA4MDBEMDFBQjU4ODA2ODQ2MDAyMUZGRjdBMUY5MDEyMDAxCis6MTA2RjAwMDAwNEIwODBCQzA4QkMxODQ3NDAwMDE0NDBDMDg4OUYyM0QwCis6MTA2RjEwMDAxODQwMDU0OUM5NkExQjIzNUIwMTE5NDAwODQzMDM0OTBFCis6MTA2RjIwMDBDMDQ2Qzg2MjAwMjA3MDQ3NDAwMDE0NDA0MDAwMTQwMDcyCis6MTA2RjMwMDA4MEI1ODRCMDBENDkwRjZBMDEyRjAxRDFGRjAzMDdFMDJFCis6MTA2RjQwMDAwMjJGMDFEMTNGMDMwM0UwMDAyRjAxRDEwMTI3RkYwMkVGCis6MTA2RjUwMDA2OTQ2RkZGNzM1RkEwMUFCNUY4MDY4NDYwMDIxRkZGNzBECis6MTA2RjYwMDA2RkY5MDEyMDA0QjA4MEJDMDhCQzE4NDcwMDIwMTQ0MDExCis6MTA2RjcwMDBDMjg4QTEyMDQwMDMwMDIxMDEyMzVCMDM5QTQyMDFEMTcyCis6MTA2RjgwMDAwMjIyMDRFMDAxMjNEQjAzOUE0MjAyRDEwMTIyMDI2MkMxCis6MTA2RjkwMDAwMEUwMDE2MjA4MUM3MDQ3OTBCNTg0QjAwNzFDMDJGMDQ1Cis6MTA2RkEwMDA5RkY4Njk0NjA0MUMzODFDRkZGNzBBRkEwMUFCNUM4MEE1Cis6MTA2RkIwMDAwOTRGRjg2REMwNDYwMjkwNjg0NjAwMjFGRkY3NDBGOTdFCis6MTA2RkMwMDBGODZEQzAwN0MwMEYwNTQ5QzA0NkM4NjIwMTIwMDRCMDczCis6MTA2RkQwMDA5MEJDMDhCQzE4NDcwMDAwQTQyQTAwODA2ODFDMDA4MEYwCis6MTA2RkUwMDBDMDg4MDI0OUMwNDY0ODYxMDAyMDcwNDc4MDAwMTQwMEY0Cis6MTA2RkYwMDAwMEI1ODRCMDY5NDZGRkY3RTNGOTA2NDhDMDY4MDFBQjA1Cis6MTA3MDAwMDA1ODgwNjg0NjAwMjFGRkY3MUJGOTAxMjAwNEIwMDhCQzM2Cis6MTA3MDEwMDAxODQ3MDAwMDgwMDAxNDQwQzA4ODAyNDlDMDQ2Qzg2MDdDCis6MTA3MDIwMDAwMDIwNzA0NzgwMDAxNDAwODBCNTg0QjA2OTQ2ODc2OEVFCis6MTA3MDMwMDBGRkY3QzZGOTIwMkYwN0QyNzgwMDBDNDk0MDE4MUIyMzEwCis6MTA3MDQwMDBEQjAxQzAxODgwOEIwNkUwMDBBODAwNzg0MDIzMTg0M0JECis6MTA3MDUwMDAwMEFCMTg3MDAyMjAwMUFCNTg4MDY4NDYwMDIxRkZGNzkyCis6MTA3MDYwMDBFRkY4MDEyMDA0QjA4MEJDMDhCQzE4NDc2ODBFMDA4MDBGCis6MTA3MDcwMDAwMEI1ODRCMEMxODg4MjY4MjAyQTA0RDIxMDFDMDJGMEI2Cis6MTA3MDgwMDAxN0Y4MDAyMDEwRTA2OTQ2RkZGNzlBRjkwMEE4MDA3ODg5Cis6MTA3MDkwMDA0MDIzMTg0MzAwQUIxODcwMDIyMEQ4ODA2ODQ2MDAyMUI2Cis6MTA3MEEwMDAwNDMzRkZGN0NERjgwMTIwMDRCMDA4QkMxODQ3OTBCNUIxCis6MTA3MEIwMDA4NEIwQzc4ODY5NDZGRkY3ODNGOTEwNDhGRUY3NzJGRjZFCis6MTA3MEMwMDAwMjIwMzkxQzAyRjBGMkZGMDAyODA2RDAwMjIwMzkxQ0YxCis6MTA3MEQwMDAwMkYwMzZGRjAxQUI1ODgwMDJFMDQ1MjAwMEFCMTg3MDhCCis6MTA3MEUwMDAwNzQ5MjAxQ0ZFRjc1RkZGNjg0NjAwMjFGRkY3QThGODVDCis6MTA3MEYwMDAwMTIwMDRCMDkwQkMwOEJDMTg0NzAwMDAyNDAyRkZGRjI4Cis6MTA3MTAwMDAzQzAyRkZGRkIwQjU4NEIwQzc4ODY5NDY4NDY4RkZGN0NBCis6MTA3MTEwMDA1N0Y5MTA0OEZFRjc0NkZGMEY0QTAyMjAzOTFDRkVGN0M4Cis6MTA3MTIwMDA0M0ZGMDAyODA2RDAwRDRCMDIyMDM5MUMyMjFDRkVGNzFECis6MTA3MTMwMDAzQ0ZGMDJFMDQ1MjAwMEFCMTg3MDA5NDkyODFDRkVGNzBGCis6MTA3MTQwMDAzMkZGNjg0NjAwMjFGRkY3N0JGODAxMjAwNEIwQjBCQzk1Cis6MTA3MTUwMDAwOEJDMTg0NzI0MDJGRkZGNTlCMTIxNDA1OUIwMjE0MDEzCis6MTA3MTYwMDAzQzAyRkZGRjAwQjVGRkY3NDNGOTA4QkMxODQ3MDAyMEI5Cis6MTA3MTcwMDA3MDQ3ODBCNEMyODgxOTRCQTEyMTQ5MDMwMDJBMDNEMTZBCis6MTA3MTgwMDAxODZCMTAyMzk4NDMwNEUwMDEyQTA0RDExODZCMTAyM0Q0Cis6MTA3MTkwMDAxODQzNDg2MTFGRTAwMjJBMUREMUMyNjg4NzY4MDAyMDk5Cis6MTA3MUEwMDAzQjFDQzM0MERCMDdEQjBGOUIwMjAzNDMwQjYxMDEzMDM5Cis6MTA3MUIwMDAwMDA0MDAwQzIwMjhGM0RCMDAyMDEzMUNDMzQwREIwNzc1Cis6MTA3MUMwMDBEQjBGOUIwMkM3MUQxOTM3M0I0MzBCNjEwMTMwMDAwNEU1Cis6MTA3MUQwMDAwMDBDMjAyOEYxREIwMDIwODBCQzcwNDc4MDAwMTQ0MEE4Cis6MTA3MUUwMDA4MEI0QzI4ODgxNjgxMDAyMTIwQTEwNDMwMjA0MTIwQzkzCis6MTA3MUYwMDAwQzQ4QzA0NjAyNjAwQzRCQzA0NjFBODAwQTBDMTcwMkFECis6MTA3MjAwMDAxMjEyM0E0MzEyMDQxMjBDNDI2MDVBODAwOTA0MDkwQzBCCis6MTA3MjEwMDAwQTAyMDkwQTExNDMwOTA0MDkwQzgxNjA5OTgwMDAyMEJGCis6MTA3MjIwMDA4MEJDNzA0NzQwMDAxNDAwMjgxQjAwODBCMEI1ODRCMEJCCis6MTA3MjMwMDAxMzQ5MEE2ODEyMDQxMjBDMTMwMjEyMTIxMzQzNEE2ODBCCis6MTA3MjQwMDAxMjA0MTIwQzFGMUMxMzAyMTIxMjEzNDM4OTY4MDkwNDQyCis6MTA3MjUwMDAwOTBDMEEwMjA5MTIxMTQzMEMwNDI0MEM2OTQ2MUQxQzc2Cis6MTA3MjYwMDBGRkY3QUVGODAxQUI1RjgwMjgwNDIwNDMwMjkwNjg0NjI4Cis6MTA3MjcwMDAwMDIxRkVGN0U1RkYwMTIwMDRCMEIwQkMwOEJDMTg0N0IwCis6MTA3MjgwMDA0MDAwMTQ0MEMxODg4MjY4MDgwMjA5MEEwODQzMDAwNENCCis6MTA3MjkwMDAwMDBDMEE0OUMwNDZDODYwMTAwQzAzMDIwMDEyMTg0M0QzCis6MTA3MkEwMDAwMDA0MDAwQzA4NjExMDA0MDAwQzAyMDIwMDBBMTA0M0U0Cis6MTA3MkIwMDAwMDA0MDAwQzQ4NjEwMDIwNzA0NzAwMDA0MDAwMTQwMEVBCis6MTA3MkMwMDA5MEI1ODRCMDE2NEJEOTY4MDkwNDA5MEMwQTAyMDkxMjVBCis6MTA3MkQwMDAxMTQzMUE2OTEyMDQxMjBDMTcwMjEyMTIzQTQzNUI2OTI1Cis6MTA3MkUwMDAxQjA0MUIwQzFGMDIxQjEyM0I0MzFGMDQzRjBDMDUyM0Y2Cis6MTA3MkYwMDAwMDkzODQ4ODAxQUIxQzgwMDAyNDA0M0I1QzcwNDA4OEIwCis6MTA3MzAwMDAwMEFCNTg4MEQ5ODAxMDA0Mzg0MzAyOTAwMzk0Njg0NjNCCis6MTA3MzEwMDAwMDIxRkVGNzk1RkYwMTIwMDRCMDkwQkMwOEJDMTg0NzdGCis6MTA3MzIwMDA0MDAwMTQ0MDAwQjU4NEIwMEI0OThBNkEwNTIxMDA5MUUxCis6MTA3MzMwMDA4MTg4MDFBQjE5ODAwMDIxMDQzQjU5NzA0MDg4MDBBQjYzCis6MTA3MzQwMDA1ODgwREE4MDAyOTEwMzkxNjg0NkZFRjc3OUZGMDEyMEE4Cis6MTA3MzUwMDAwNEIwMDhCQzE4NDcwMDAwQzAwMDE0NDBDMDg4MDI0OUFGCis6MTA3MzYwMDBDMDQ2ODg2MjAwMjA3MDQ3QzAwMDE0MDAwMEI1ODRCMDk5Cis6MTA3MzcwMDAwQjQ5MEE2QTA1MjEwMDkxODE4ODAxQUIxOTgwMDAyMTFGCis6MTA3MzgwMDAwNDNCNTk3MDQwODgwMEFCNTg4MERBODAwMjkxMDM5MTI5Cis6MTA3MzkwMDA2ODQ2RkVGNzU1RkYwMTIwMDRCMDA4QkMxODQ3MDAwMEZFCis6MTA3M0EwMDBDMDAwMTQ0MEMwODgwMjQ5QzA0NjA4NjIwMDIwNzA0N0VGCis6MTA3M0IwMDBDMDAwMTQwMDAwQjVDMDg4MDI0OUZFRjdGNEZEMDAyMEFCCis6MTA3M0MwMDAwOEJDMTg0Nzc1MDJGRkZGMDBCNTg0QjA2OTQ2RkVGNzk4Cis6MTA3M0QwMDBGN0ZGMDY0ODAwNkIwMUFCNTg4MDY4NDYwMDIxRkVGN0I2Cis6MTA3M0UwMDAyRkZGMDEyMDA0QjAwOEJDMTg0NzAwMDA2ODBFMDA4MDgxCis6MTA3M0YwMDAwMEI1RkVGN0ZERkYwOEJDMTg0NzAwQjVGRUY3RjhGRjIzCis6MTA3NDAwMDAwOEJDMTg0NzAwQjVGRUY3RjNGRjA4QkMxODQ3ODBCNTY1Cis6MTA3NDEwMDAwNzFDMTA0OEZFRjdDNkZEMDEyMDQwMDJBMTIxNDkwM0M4Cis6MTA3NDIwMDA4ODYwMDAyMTBDNDhDMDQ2MDE3MTBDNDgwMjY4NTIwQzZCCis6MTA3NDMwMDAwNUQyMDI2ODEyMEMwNkQxMDA2ODgwMEEwM0QzMDg0OEZFCis6MTA3NDQwMDBDMDQ2Qzc2MDAyRTAwNzQ4QzA0NjA3NjQwODFDODBCQzBECis6MTA3NDUwMDAwOEJDMTg0N0Q1OTQyMTQwMjgwRjAwODAwMDAwMTA0MDM4Cis6MTA3NDYwMDA0MDAxMTgwMDAwMDAwMDgwMDBCNTAxMjAwMzQ5QzA0NjFCCis6MTA3NDcwMDAwODcyMTIyMEZGRjdDQkZGMDhCQzE4NDc4ODFDMDA4MDU5Cis6MTA3NDgwMDAwMEI1MDEyMDAzNDlDMDQ2NDg3MjE1MjBGRkY3QkZGRjMxCis6MTA3NDkwMDAwOEJDMTg0Nzg4MUMwMDgwMDBCNTAxRjBGOUZGMDEyMEU2Cis6MTA3NEEwMDAwOEJDMTg0NzgwQjU4NEIwMDcxQ0Y4ODgwMkYwRkVGOEM1Cis6MTA3NEIwMDAwMDI4MENEMTY5NDYzODFDRkVGNzgyRkYwNjQ4MDFBQjU0Cis6MTA3NEMwMDA1ODgwNjg0NjAwMjFGRUY3QkJGRTAxMjAwMEUwMDAyMDQ2Cis6MTA3NEQwMDAwNEIwODBCQzA4QkMxODQ3RkZGRjAwMDA4MEI1ODRCMDMyCis6MTA3NEUwMDA2OTQ2RkVGNzZERkYwMTI3MDFBQjVGODAwOTQ4ODE4OTdFCis6MTA3NEYwMDAwOTA0QzI4OTExNDMwMjkxODE4ODA5MDRDMDg4MDg0M0E0Cis6MTA3NTAwMDAwMzkwNjg0NjAwMjFGRUY3OUJGRTM4MUMwNEIwODBCQzQ3Cis6MTA3NTEwMDAwOEJDMTg0NzRDMkEwMDgwMDBCNUZFRjc2OUZGMDhCQzdDCis6MTA3NTIwMDAxODQ3MDBCNUZFRjc2NEZGMDhCQzE4NDcwMEI1RkVGNzIyCis6MTA3NTMwMDA1RkZGMDhCQzE4NDcwMEI1RkVGNzVBRkYwOEJDMTg0N0E0Cis6MTA3NTQwMDAwMEI1RkVGNzU1RkYwOEJDMTg0NzAwQjVGRUY3NTBGRjIxCis6MTA3NTUwMDAwOEJDMTg0NzAwQjVGRUY3NEJGRjA4QkMxODQ3MDBCNTNDCis6MTA3NTYwMDBGRUY3NDZGRjA4QkMxODQ3MDBCNUZFRjc0MUZGMDhCQzEwCis6MTA3NTcwMDAxODQ3MDBCNUZFRjczQ0ZGMDhCQzE4NDcwMEI1RkVGN0ZBCis6MTA3NTgwMDAzN0ZGMDhCQzE4NDcwMEI1RkVGNzMyRkYwOEJDMTg0N0E0Cis6MTA3NTkwMDAwMEI1OENCMDA4QTlGRUY3MTNGRjY5NDYwOEE4MDJGMEYxCis6MTA3NUEwMDBBOUZGMDIyMDA4QUI1ODcwNjk0NjA4QThGRUY3NDhGRUZDCis6MTA3NUIwMDAwMTIwMENCMDA4QkMxODQ3MDBCNUZFRjcxOUZGMDhCQzQ1Cis6MTA3NUMwMDAxODQ3OTBCNTg0QjAwNzFDNjk0NjM4MUNGRUY3RjhGRUQyCis6MTA3NUQwMDBGQTg4MTI0OTAxMjRDODFEODkzMDAwMkEwRkQwMDQ3MDhFCis6MTA3NUUwMDA0NDcwQjg2ODAwMEM4MDMxQzg4MkI4NjhDMDQ2MDg4MzBGCis6MTA3NUYwMDBGODY4MDAwQzQ4ODNGODY4QzA0Njg4ODMwMkUwMDAyMUUwCis6MTA3NjAwMDAwMTcwNDE3MDA2NDgwMUFCNTg4MDY4NDYwMDIxRkVGN0MyCis6MTA3NjEwMDAxN0ZFMjAxQzA0QjA5MEJDMDhCQzE4NDc2ODBFMDA4MDAwCis6MTA3NjIwMDBGRkZGMDAwMDAwQjVGRUY3RTNGRTA4QkMxODQ3MDBCNUY5Cis6MTA3NjMwMDBGRUY3REVGRTA4QkMxODQ3MDBCNUZFRjdEOUZFMDhCQzExCis6MTA3NjQwMDAxODQ3MDBCNUZFRjdENEZFMDhCQzE4NDcwMEI1RkVGNzkyCis6MTA3NjUwMDBDRkZFMDhCQzE4NDc5MEI1ODRCMDA3MUM2OTQ2MzgxQzlCCis6MTA3NjYwMDBGRUY3QUVGRUY4ODgwMzI0RTQwNDA0NDMwMzIzREIwNDlFCis6MTA3NjcwMDA5QzQyMDJEMzBGNEI5QzQyMDZEOTBGNDgwMUFCNTg4MDY1Cis6MTA3NjgwMDA2ODQ2MDAyMUZFRjdEQ0ZEMDEyMDgwMDcyMDQzMDA2OEVBCis6MTA3NjkwMDAwMDIxMDBBQjU5NzBGQTg4QzA0NkRBODAwMjkwMDM5MTRECis6MTA3NkEwMDA2ODQ2MDQzM0ZFRjdDQ0ZEMDEyMDA0QjA5MEJDMDhCQzUyCis6MTA3NkIwMDAxODQ3MDAwMEUwMDAxODAwRkZGRjAwMDA4MEI1ODRCMDBDCis6MTA3NkMwMDAwNzFDNjk0NjM4MUNGRUY3N0JGRUY4ODgwMzIzREIwNEExCis6MTA3NkQwMDAxODQzOTg0MjAyRDMwQTRCOTg0MjA4RDkwOTQ4MDFBQjkzCis6MTA3NkUwMDA1ODgwNjg0NjAwMjFGRUY3QUJGRDAxMjAwM0UwQjk2ODMxCis6MTA3NkYwMDBDMDQ2MDE2MDAwMjAwNEIwODBCQzA4QkMxODQ3MDAwMEYwCis6MTA3NzAwMDBFMDAwMTgwMEZGRkYwMDAwODBCNTg2QjAwMkE5RkVGNzc4Cis6MTA3NzEwMDA1N0ZFMDEyNzAyQUI1RjcwMDAyMEQ4ODAwQTQ4NDE2OEZECis6MTA3NzIwMDBDMDQ2MDQ5MTgxNjhDMDQ2MDU5MUMxNjhDMDQ2MDA5MTc5Cis6MTA3NzMwMDA0MDY5QzA0NjAxOTA2OTQ2MDJBOEZFRjc4MUZEMzgxQ0U5Cis6MTA3NzQwMDAwNkIwODBCQzA4QkMxODQ3NjgxOTAwODAwMEI1QzE2ODQ1Cis6MTA3NzUwMDA4MDY4RkVGNzQ3RkIwMDIwMDhCQzE4NDcwMDIwNzA0N0YwCis6MTA3NzYwMDA5MEI1ODRCMDA0MUMwRjFDNjg0NjUwMjFGRUY3MzZGRTBECis6MTA3NzcwMDAwMUFCNUM4MDAyOTc2ODQ2MDAyMUZFRjc2MUZEMDRCMDEyCis6MTA3NzgwMDA5MEJDMDhCQzE4NDc4MEI1ODRCMDA3MUM2ODQ2NTEyMURFCis6MTA3NzkwMDBGRUY3MjRGRTAxQUI1RjgwNjg0NjAwMjFGRUY3NTBGRDM2Cis6MTA3N0EwMDAwNEIwODBCQzA4QkMxODQ3MDAyMDcwNDcwMDIwNzA0NzE4Cis6MTA3N0IwMDA5MEI1ODRCMDAwMjcxMjQ5MDk2ODEyNEExMjZCMTAyMzUxCis6MTA3N0MwMDAxQTQwMDEyNDAwMkEwMEQwMDEyNzhBMEMwM0QzM0EwNDZFCis6MTA3N0QwMDAxMjBDMDIyNzE3NDNDOTBDMDNEMzM5MDQwOTBDMDQyN0UwCis6MTA3N0UwMDAwRjQzNjk0NkZFRjdFQ0ZEMDFBQjVGODA2ODQ2MDAyMTYwCis6MTA3N0YwMDBGRUY3MjZGRDIwMUMwNEIwOTBCQzA4QkMxODQ3MDAwMDEyCis6MTA3ODAwMDAwMDAwMTA0MEMwMDAxODQwMDBCNTg0QjA2OTQ2RkVGNzgzCis6MTA3ODEwMDBEN0ZEMDY0OEMwNkQwMUFCNTg4MDY4NDYwMDIxRkVGN0QxCis6MTA3ODIwMDAwRkZEMDEyMDA0QjAwOEJDMTg0NzAwMDBBNDJBMDA4MDA2Cis6MTA3ODMwMDAwMEI1RkVGN0RERkQwOEJDMTg0NzcwNDcwMDIwNzA0NzEzCis6MTA3ODQwMDAwMDIwNzA0NzAwMjA3MDQ3MDAyMDcwNDcwMDIwNzA0N0RDCis6MTA3ODUwMDAwMDIwNzA0NzAwQjVGRUY3Q0JGRDA4QkMxODQ3MDAwMEJDCis6MTA3ODYwMDA4MEI1ODVCMDAxQTlGRUY3QUJGRDAwMjAwMUFCNTg3MEQzCis6MTA3ODcwMDAwQzQ5Qzk2ODAxMjcwMTI5MDJEMTAzOTcwNDk3MDFFMDQ3Cis6MTA3ODgwMDAwMzk3MDQ5MDY4NDYwMUYwMzNGRDAyQUIwMDk4QzA0NkIwCis6MTA3ODkwMDA1ODgwMDAyMTAxQThGRUY3RDNGQzM4MUMwNUIwODBCQzNECis6MTA3OEEwMDAwOEJDMTg0NzY4MEUwMDgwNzA0NzA0NDkwMDIwMDAyMjc5Cis6MTA3OEIwMDAwQTcwMDEzMDAxMzE2ODI4RkFEMzcwNDdBMDgyMjA0MDU1Cis6MTA3OEMwMDAwMDIyODg0MjAzRDM0MDFBMDEzMjg4NDJGQkQyMTAxQ0E2Cis6MTA3OEQwMDA3MDQ3ODg0MjAyRDM0MDFBODg0MkZDRDI3MDQ3OTBCNDY1Cis6MTA3OEUwMDAwMTFDRkYyNzA0MjkyN0RBMDAyMDE0NEE0MzAwMUIxODMzCis6MTA3OEYwMDBEQjAwRDQ1ODYzMEMxQUQyNEIwMDU5MThDOTAwNTc1OEYyCis6MTA3OTAwMDA0MzAwMUIxOERCMDBENzUwODkxODlBMTg0RjY4QzA0NkVGCis6MTA3OTEwMDA1NzYwOEI2OEMwNDY5MzYwMEI2OUMwNDYxMzYxNEI2OTIyCis6MTA3OTIwMDBDMDQ2NTM2MUM5NjhDMDQ2RDE2MDkwQkM3MDQ3MDEzMDAxCis6MTA3OTMwMDAwMDA2MDAwRTA0MjhEOURCMzgxQ0Y2RTc0MEFCMjA0MEQ3Cis6MTA3OTQwMDBGN0I1QzRCMDA0MUMwMDIwNDY5QTExMjExMTQwNkVEMDM2Cis6MTA3OTUwMDAwMDI3NzkwMEM5MTlDOTAwNTc0QTUxNTg0OTBDMDNEMjY4Cis6MTA3OTYwMDAwMTMwMDAwNjAwMEUwNEUwNzkxQzBGMDYzRjBFMDQyRkM0Cis6MTA3OTcwMDBFRkRCMDAyODVCRDAwMDI2MDAyMjAwOTI0MDIzMDAyMThDCis6MTA3OTgwMDAwMDIwMDJBQTAwRjA4OEZBMDRBOTAwMjA4MjAwOEE1ODg4Cis6MTA3OTkwMDAxMjA2MTIwRUEyNDIwM0QxNzIxQzE2MDYzNjBFMDRFMDI1Cis6MTA3OUEwMDAwMTMwMDAwNjAwMEUxMDI4RjBEQjAwMkUzREQwMDQyQzI0Cis6MTA3OUIwMDAzRUQxODAwMDA4NTg0MDAxODAwRDAwMjIwMDkyMTAyMzIzCis6MTA3OUMwMDAwMDIxMDJBQTAwRjA2OEZBMDAyMTAxOTEwMkE4MDU5OTlECis6MTA3OUQwMDA0OTBDODkwNTI5RDBDMTY4MEEwNjEyMEU0NTlCOUE0MkI2Cis6MTA3OUUwMDAxMUQxQzA2ODQwMDE4NjBEMDAyMjAwOTIwQzIzMDAyMUI1Cis6MTA3OUYwMDAzMDFDMDJBQTAwRjA1MEZBMDE5OTAyOUQ0ODFDMDEwNkIxCis6MTA3QTAwMDAwOTBFMDE5MTBFRTA0ODAxODYwRDAwMjIwMDkyMTAyMzFDCis6MTA3QTEwMDAwMDIxMzAxQzAyQUEwMEYwM0ZGQTAyQTgwNTk5NDkwQzg3Cis6MTA3QTIwMDA4OTA1RDhEMTAxOTkwMDI5MEZEMUZGMjAzREUwNDBFMDIwCis6MTA3QTMwMDA4MDAwMDg1ODQwMDE4NjBEMDAyMjAwOTIwQzIzMDAyMThFCis6MTA3QTQwMDAzMDFDMDJBQTAwRjAyOEZBMDI5RDAxMjAwMDA0NDY5QTg4Cis6MTA3QTUwMDAxMDQzNzkwMEM5MTlDOTAwMTc0QUMwNDY1MDUwMzAxQzVDCis6MTA3QTYwMDA4RTE4NzA2MDEwMjAwNDJDMDBEMDBDMjAwNDFDQjA2MDE0Cis6MTA3QTcwMDAwMDIwMjAyMTQ2OUExMTQwMjAyOTAwRDAyODFDMzA2MTg2Cis6MTA3QTgwMDAyODE5RkYyMUZGMzAwODMwMDkzMUZGRjcxOUZGNDMwMUEyCis6MTA3QTkwMDAxODE4QzAwMDAwMUI3MDYxMDAyMDUwMjE0NjlBMTE0MDQ4Cis6MTA3QUEwMDA1MDI5MDBEMTI4MUNGMDYwMzgxQzQ3QjBGMEJDMDhCQzNECis6MTA3QUIwMDAxODQ3RkYyMEY5RTcwMDAwNDBBQjIwNDA4MEI0MDAyM0M2Cis6MTA3QUMwMDAwMDIyMDAyOTA2RDk4NzVDN0I0MDFCMDYxQjBFMDEzMjcxCis6MTA3QUQwMDA4QTQyRjhEM0Q4NDMwMDA2MDAwRTgwQkM3MDQ3RjBCNTQ4Cis6MTA3QUUwMDBDNkIwMDQyODA3REE0MTAwMDkxOEM5MDA0NTkxNDE0QTg3Cis6MTA3QUYwMDA1MTU4NEIwQzAyRDIwMDIwQzA0Mzc2RTAwMTIzNUIwNEI2Cis6MTA3QjAwMDAxOTQwNDMwMDE4MThDMDAwM0E0QTE0MTgwMDI5NjFEMERGCis6MTA3QjEwMDAwMDIxMDI5MTIwNjlBMTY4NDUxODMwRDBGRjIxNjgxRTFDCis6MTA3QjIwMDAwOTMxRkZGN0NERkU2MTY4NDAxODAxOTAwMTk4ODE0MjRDCis6MTA3QjMwMDAwMkQxQTY2OEFGMUIwOUUwMDAyNkZGMjEyODFDMDkzMUVECis6MTA3QjQwMDBGRkY3QzdGRTA3MUMwMUQxRkYyNzA5MzcwMDIyMDA5MjZCCis6MTA3QjUwMDAwMTk4MzExQzAzQUEzQjFDMDBGMDlFRjkwM0E4MzkxQ0I0Cis6MTA3QjYwMDBGRkY3QUNGRkMwNDMwMjk5NDg0MDAxMDYwOTBFMDI5MTlECis6MTA3QjcwMDBFRDFCQTA2OEE4NDIwMEQxMDAyNTAwMkRDRUQ4MDI5OUE3Cis6MTA3QjgwMDBDRjQzMDAyMjAwOTIwQzIzMDAyMTYwNjgwM0FBMDBGMDdBCis6MTA3QjkwMDA4M0Y5MjA2OUMwNDYwMzkwMDU5ODAwMEEwMDAyMzkwNjVGCis6MTA3QkEwMDAwOTBFMDg0MzA1OTBGRjIzMUIwMjk4NDMwNTkwMEMyMTAyCis6MTA3QkIwMDAwM0E4RkZGNzgzRkZGRjIzMUIwMjA1OTk5OTQzMDAwNkUzCis6MTA3QkMwMDAwMDBFMDAwMjA4NDMwNTkwMEMyMzAwMjE2MDY4MDNBQTAwCis6MTA3QkQwMDAwMEYwQ0FGOTAwMjA0NTk5MDY0QUMwNDY1MDUwQzE0M0ZBCis6MTA3QkUwMDA2MTYwQTE2MEUxNjAyMTYxNjE2MTQ2QjBGMEJDMDhCQ0U4Cis6MTA3QkYwMDAxODQ3MDAwMDQwQUIyMDQwQjBCNDRDNDIwMDI5MDBEQkU1Cis6MTA3QzAwMDAwQzFDMDAyN0ZGNDMwNDI4MjFEQTEyNEQ0MzAwMTgxOEVBCis6MTA3QzEwMDBDMDAwNDAxOTAxMkEwNUQwMDIyQTA5RDAwMzJBMTZEMTMyCis6MTA3QzIwMDAwMTY5MEJFMDAwMjkxMkRCMDI2OThBNDIwRkQzMDVFMEVCCis6MTA3QzMwMDAwMDI5MDdEQUMxNjhBMTQyMDlEMzA5MUJDMTYwQzA2OEU1Cis6MTA3QzQwMDBCMEJDNzA0N0MxNjgwOTE5MDI2OTkxNDJGNkQ5MzgxQzY1Cis6MTA3QzUwMDBGNkU3MDAwMDQwQUIyMDQwRjBCNTg0QjAxNzFDMEQxQ0M3Cis6MTA3QzYwMDAwMDIxMDI5MTQyMDAxMjE4RDIwMDJDNDk4QjU4MUIwNkE5Cis6MTA3QzcwMDAxQjBFMDE5MzAwMjNEQjQzMDQyODAyREEwMTk4NDAwODFECis6MTA3QzgwMDAwMUQyMTgxQzQ2RTA1NDE4RTA2OEMyMTkyMTY5OEE0MkUyCis6MTA3QzkwMDAwMEQ5MEYxQTAwMkYzQ0Q5QTA2OEUxNjg0MDE4RkYyMUQ1Cis6MTA3Q0EwMDAwOTMxRkZGNzBERkU2MTY4NDYxOEEwNjhFMTY4NDAxOEM5Cis6MTA3Q0IwMDBGRjIxMDkzMUZGRjcwREZFQzIxOUZGMjEwOTMxOEE0MjY4Cis6MTA3Q0MwMDAxNEQ5MDE5QUMwNDYwMDkyMEIxQTAzOTMwMTFDMzAxQzcwCis6MTA3Q0QwMDAyQTFDMDBGMEUxRjhFMDY4MDM5QkMwMThFMDYwMDM5QkY5Cis6MTA3Q0UwMDA1RDE5RkYxQTAyOTgxODE4MDI5MDEwRTAwMTlBQzA0NjE4Cis6MTA3Q0YwMDAwMDkyMDExQzMwMUMyQTFDM0IxQzAwRjBDREY4RTA2OEVGCis6MTA3RDAwMDBDMDE5RUQxOUUwNjAwMjk4QzAxOTAyOTAwMDI3MDAyRkY5Cis6MTA3RDEwMDBDMkQ4MDI5ODA0QjBGMEJDMDhCQzE4NDc0MEFCMjA0MDYxCis6MTA3RDIwMDBGMEI1ODNCMDE3MUMwRDFDMDAyMTAxOTE0MjAwMTIxODAwCis6MTA3RDMwMDBEMjAwMDI5MjMwNDk4QTU4MTIwNjEyMEUwMDI0RTQ0M0ZGCis6MTA3RDQwMDAwNDI4MDFEQTUwMDkwMUQyMjAxQzUxRTAwMjlBNTQxODhCCis6MTA3RDUwMDBFMDY4QzIxOTYwNjk4MjQyMDFEOTIyNjk4NzFBMDAyRjNFCis6MTA3RDYwMDA0NUQ5MjU0RUEwNjhFMTY4NDAxOEZGMjEwOTMxRkZGNzg5Cis6MTA3RDcwMDBBN0ZENjE2ODQwMTgwMDkwQTA2OEUxNjg0MDE4RkYyMUU1Cis6MTA3RDgwMDAwOTMxRkZGN0E2RkQwMjlBQjE1ODAxMjM1QjA0MTk0MzlDCis6MTA3RDkwMDBCMTUwQzExOUZGMjIwOTMyOTE0MjEzRDkxMzFBMDExQ0EzCis6MTA3REEwMDAwMDk4MkExQzFFMUMwMEYwREZGOEUwNjg4MDE5NzUxOTg1Cis6MTA3REIwMDBFMDYwMjE2OTg4NDIwMEQ5MjA2MUJGMUIwMTk4MzAxODFBCis6MTA3REMwMDAwMTkwMTJFMDAxMUMwMDlFMzAxQzJBMUMzQjFDMDBGMDlDCis6MTA3REQwMDBDQkY4RTA2OEMwMTlFRDE5RTA2MDIxNjk4ODQyMDBEOTRDCis6MTA3REUwMDAyMDYxMDE5OEMwMTkwMTkwMDAyNzAwMkZCOUQ4MDE5ODhGCis6MTA3REYwMDAwM0IwRjBCQzA4QkMxODQ3NDBBQjIwNDBCMEI1QzNCMERFCis6MTA3RTAwMDAwQzFDMDAyN0ZBNDMwNDI4MDZEQTQxMDAwOTE4QzkwMEFGCis6MTA3RTEwMDAxNDQ4NDU1ODZCMEMwNEQyMTAxQzQzQjBCMEJDMDhCQ0NECis6MTA3RTIwMDAxODQ3NjIwOTFCRDMwMDIyMDA5MjA4MTg0MDY4MEMyM0VGCis6MTA3RTMwMDAwMDIxMDFBQTAwRjAzMEY4MTEyQzBERDAxMjJDMEREMDI5Cis6MTA3RTQwMDAxMzJDMDVEMDE0MkMwQUQxMDM5ODAwMDQwNzBFMDZFMDY5Cis6MTA3RTUwMDAwMzk4MDcwNjNGMEUwMkUwMDE5RjAwRTAwMjlGMzgxQ0Q2Cis6MTA3RTYwMDBEQkU3MDAwMDQwQUIyMDQwMDM0OTAwMjAwMDIyMEE1NDE5Cis6MTA3RTcwMDAwMTMwNjAyOEZCRDM3MDQ3NDBBQjIwNDAwMEI1MDJGMEQyCis6MTA3RTgwMDA2RkZBNTcyMDAyRjBDQ0Y5MDJGMDQwRjkwMDBBRkJEMzU4Cis6MTA3RTkwMDAwMkYwNEVGQTA4QkMxODQ3RjBCNTgyQjAwNzlEMTQxQ0RBCis6MTA3RUEwMDAxRjFDMzA0QUQyNkYyMDIzMTY2ODlFNDMxNjYwMzMxQzc1Cis6MTA3RUIwMDBGRjIyMDEzMjJBNDA0MDAyMDg0MzA1MEEwNjFDMDAwQzNBCis6MTA3RUMwMDAwMTkwMDAyQTIwRDAwMkYwNEJGQTUzMjAwMkYwQThGOUNBCis6MTA3RUQwMDAwMTk4QzA0NjAwOTAwMkYwQTNGOTI4MUMwMkYwQTBGOTE2Cis6MTA3RUUwMDAzMDFDMDJGMDlERjkwMkYwMjNGQUZGRjdDN0ZGMDJGMDAxCis6MTA3RUYwMDAzN0ZBNTQyMDAyRjA5NEY5MDA5ODAyRjA5MUY5MjgxQzA2Cis6MTA3RjAwMDAwMkYwOEVGOTMwMUMxNEUwMDJGMDJBRkE1MjIwMDJGMDNFCis6MTA3RjEwMDA4N0Y5MDE5ODAyRjA4NEY5MjgxQzAyRjA4MUY5MzAxQ0RECis6MTA3RjIwMDAwMkYwN0VGOTAwMjAwMkYwN0JGOTAwMjAwMkYwNzhGOURGCis6MTA3RjMwMDAwMDIwMDJGMDc1RjkwMDIwMDJGMDcyRjkwMDJGMDVEOTM3Cis6MTA3RjQwMDAwMkYwRTRGODIwNzAwMTM0MDEzRkY5RDEwMkYwRjBGOUI5Cis6MTA3RjUwMDAwNDRBRDA2RjIwMjMwMTY4MTk0MzAxNjAwMkIwRjBCQ0NECis6MTA3RjYwMDAwOEJDMTg0NzY4MEUwMDgwRjBCNTgyQjAxNDFDMUYxQ0I2Cis6MTA3RjcwMDA0MjAyMEE0MzE1MUMwMTI4NTREMDJDNDlDODZGMjAyMzAzCis6MTA3RjgwMDAwMjY4OUE0MzAyNjBDODZGNDAyMzAxNjgxOTQzMDE2MDg4Cis6MTA3RjkwMDAwMkYwRTZGOTUzMjAwMkYwNDNGOTI4MEMwNjFDMDJGMDI3Cis6MTA3RkEwMDAzRkY5MjgwQTAxOTAwMDkwMDJGMDNBRjkyODFDMDJGMEVCCis6MTA3RkIwMDAzN0Y5MDJGMEJERjlGRkY3NjFGRjAyRjBEMUY5ODQyMDMzCis6MTA3RkMwMDAwMkYwMkVGOTMwMUMwMkYwMkJGOTAwOTgwMkYwMjhGOThCCis6MTA3RkQwMDAyODFDMDJGMDI1RjkwMDJGMDVEOTIwNzgwMTM0MDJGMDgxCis6MTA3RkUwMDAxRkY5MDEzRkY5RDEwMkYwQTNGOTAyRjBCOUY5ODMyMDlBCis6MTA3RkYwMDAwMkYwMTZGOTMwMUMwMkYwMTNGOTAxOTgwMkYwMTBGOUEyCis6MTA4MDAwMDAyODFDMDJGMDBERjkwMkYwOTNGOUZGRjczN0ZGMDc0OTNBCis6MTA4MDEwMDBDODZGNDAyMzAyNjg5QTQzMDI2MEM4NkYyMDIzMDE2ODNBCis6MTA4MDIwMDAxOTQzMDE2MDAyQjBGMEJDMDhCQzE4NDc2ODBFMDA4MDFDCis6MTA4MDMwMDA3MDQ3MDAwMDgwQjUwMUYwOEZGODA2NEZDMDQ2Rjg2MDI5Cis6MTA4MDQwMDAwMUYwRjJGODc4ODAwMUYwQjFGODM4NzE4MEJDMDhCQzFBCis6MTA4MDUwMDAxODQ3MDAwMDY4MEUwMDgwMDBCNTAxRjAwNUY5MDI0OURDCis6MTA4MDYwMDBDMDQ2MDg4MDA4QkMxODQ3NjgwRTAwODAwQjQ4QzE2OEVECis6MTA4MDcwMDAwMTI5MTFEMUMxNkYwMjIzMEE2ODFBNDMwQTYwQzE2RjM2Cis6MTA4MDgwMDA4MDIzMEE2ODFBNDMwQTYwQzExODA4Njg4MjIzMDI2OEJDCis6MTA4MDkwMDAxQTQzMDI2MDAwMjAwODgxNzA0NzAwMDA2ODBFMDA4MENCCis6MTA4MEEwMDBGMEI0NEE0OUNBMUQ5RDMyMDAyMDAwMjc4MzAwRDc1MEYyCis6MTA4MEIwMDAwMTMwMTcyOEZBRDM0NjRDMDAyMDgyMDBBNzUwMDEzMDI3Cis6MTA4MEMwMDAyMDI4RkFEMzQzNEEwMDIwODMwMEQ3NTAwMTMwMjAyOENCCis6MTA4MEQwMDBGQUQzQTc2MTk3NjE0RjY1OEY2NTNGNERDMDQ2MkY2MDBBCis6MTA4MEUwMDA2RjYwQUY2MEFGNjFFRjYwMkY2MTZGNjEwMDIwQzEwMDEyCis6MTA4MEYwMDAwOTE4NDkwMTM1NEJDOTE4ODYwMENCMURGOTMzMzQ0QzlBCis6MTA4MTAwMDAzNDE5RTM2MzExMjM1QjAxQ0IxODYzNjMwRDIzOUIwMUQ3Cis6MTA4MTEwMDBDQjE4QjQxOEUzNjMyMzIzNUIwMUM5MTg2MTYzMDEzMEYyCis6MTA4MTIwMDAwMjI4RTREQjI5NDhDMTFERjkzMTI5NENDMDQ2QTE2MjZGCis6MTA4MTMwMDA2MTZCMEQyMzlCMDFFMTYyQzExODkxNjI1MTZCQzA0NkQ2Cis6MTA4MTQwMDBEMTYyMDgyMUUxNjQyNTQ5QzA0NjIxNjUyNDQ5MEI2OUIzCis6MTA4MTUwMDBDMDQ2NjM2NUMzMUQ0RDMzRTM2NTI1NjY4QjY4QzA0NjI1Cis6MTA4MTYwMDA2MzY2Q0I2OEMwNDZBMzY2MUU0QkMwNDZFMzY2Mjc2N0JFCis6MTA4MTcwMDAwQjIzREIwMUMzMThBMzY3Njc2NzAxMjZFMzFENjkzMzdGCis6MTA4MTgwMDA2NjYxRTc2MTFGNzMwMjIzRDM2NDE3NEJDMDQ2MTM2NTEyCis6MTA4MTkwMDBDQjY5QzA0NjUzNjVDMzFENTEzM0QzNjUyQjFEMTM2NjkwCis6MTA4MUEwMDA0QjY5QzA0NjUzNjY4OTY5QzA0NjkxNjYwRjQ5QzA0NjBGCis6MTA4MUIwMDBEMTY2MTY2NzBGMjNEQjAxQzAxODkwNjc1NjY3RDc2MTM5Cis6MTA4MUMwMDBEMDFENjkzMDU2NjEwNzczRjBCQzcwNDc2ODBFMDA4MDlGCis6MTA4MUQwMDBFNDJDMDA4MDY0MkQwMDgwOTBFRTIwNDAzMDAxMTgwMEQ3Cis6MTA4MUUwMDA3QzI5MDA4MDAwNTVGRkZGMzgwMTE4MDAxMDU1RkZGRjYzCis6MTA4MUYwMDA5MEI0MDAyMTFFNEFCQjIzMUIwMUQ3MThGOTczMTkyMzIxCis6MTA4MjAwMDBEQjAxRDAxODAxMjRDRDIzMUIwMUQzMThDMTYxMUM3MEUwCis6MTA4MjEwMDAzMzIzOUIwMUQzMTg5OTYwQjk3MzU5NjEyRjIzOUIwMUI0Cis6MTA4MjIwMDBEMzE4MTk2MDEzNEI1MTI3QkYwMzAzNjMzQjYwODQ2OTY0Cis6MTA4MjMwMDBFNDE4NDQ2MzA0M0M3QzYwMDEyNEU0MDI4NDYzMEU0QzMzCis6MTA4MjQwMDBDMDQ2QkM2MDA0NkJDMDQ2NDQ2Mjg0NjlFNDE4MEI0QkIyCis6MTA4MjUwMDBFMzE4RkI2MDAzNkJDMDQ2ODM2MjQzNkFDMDQ2MDM2MjU3Cis6MTA4MjYwMDBDMTYzNTE2NDkxNjREMTY1RDE2NjkwQkM3MDQ3MDAwMEQwCis6MTA4MjcwMDA2ODBFMDA4MDAwMDAyMDQwRkMwNzAwMDBGQ0Y3RkZGRkI0Cis6MTA4MjgwMDA5MEI0MDAyMjFCNDlDOTIzMUIwMUM4MTgwMjcxMDEyMEE4Cis6MTA4MjkwMDBCQjIzMUIwMUNCMTg1ODczMTc0ODAzMUMwMDI3REMxRDk4Cis6MTA4MkEwMDBDMTM0MUM2NTIzMUMwMTM3M0YyRkY4RDMxQTY1MTkyM0VECis6MTA4MkIwMDBEQjAxQ0YxODMzMjM5QjAxQ0IxODNBNjE5ODYxNDAyMDMyCis6MTA4MkMwMDBGODYwREE2MTFBNjJDQTY0MEE2NjBDNDhDMDQ2QzI2MDg1Cis6MTA4MkQwMDAwQjQ4MDA2QkMwMDZDMDBFRjg2MzBBNDgwMTY4QzA0NjMwCis6MTA4MkUwMDAxOTgwNDE2OEMwNDY1OTgwODA2OEMwNDY5ODgwOTBCQzFCCis6MTA4MkYwMDA3MDQ3MDAwMDY4MEUwMDgwOTBCQzIwNDA5MEVFMjA0MDQ3Cis6MTA4MzAwMDA4MDAwMTQ0MDQwMDAxNDQwMDAyMDBBNDlDMDQ2MDg3MzExCis6MTA4MzEwMDBDQjFERkYzMzNBMzM4ODYxQzg2MTE4NzAwNjRBQzA0NkU2Cis6MTA4MzIwMDAxMDY1NTA2NjkwNjYwODcwNTg3MEJCMjMxQjAxRDExODA5Cis6MTA4MzMwMDAwODczNzA0NzI4MDUwMDgwNjgwRTAwODBGMEI0MkY0OTRDCis6MTA4MzQwMDAyRjRBQzA0NjExNjEwMTIzOUIwMkM4MTg1MDYxMkQ0ODc1Cis6MTA4MzUwMDBDMDQ2MTA2MkRCMDBDMzE4NTM2MjAwMjMxMzYzNTM2M0VCCis6MTA4MzYwMDAyOTRBMkE0RkQ0MURGRjM0RkEzNDE0QzcwODNGM0I2MTExCis6MTA4MzcwMDAxQzFGN0M2MTI2NEZDMDQ2Mzk2MEI4NjE3OTYxRjg2Mjg0Cis6MTA4MzgwMDAzQjYzN0I2NEJBNjRGQTY1MjI0RkZFMURGOTM2MjI0REM5Cis6MTA4MzkwMDBFQzFENzkzNDI2NjI1MTI2QjYwMzM3NjEyNDZBQzA0NjQzCis6MTA4M0EwMDA3NDYxMkY2NzFENEQwOTI3N0YwNEVDMUQ3NTM0N0M2MEI3Cis6MTA4M0IwMDAzRDYwMUI0Q0MwNDYzQzYxRTYxRDc1MzY3RTYxMTk0RjIxCis6MTA4M0MwMDBDMDQ2N0M2MDNENjAwRjFDMDAyMUZGMjQwMTM0MUQxQzUxCis6MTA4M0QwMDA4QjAwRkQ1MDAxMzFBMTQyRkFEMzAxMUMwMDIwMDEyNzdFCis6MTA4M0UwMDBGRjAyODMwMENENTAwMTMwQjg0MkZBRDMwMDIwODEwMDUzCis6MTA4M0YwMDA1NTUwMDEzMDgwMjhGQUQzRjBCQzcwNDcyNEEzMjA0MEE4Cis6MTA4NDAwMDA0MDAxMTgwMDI0ODMyMDQwMjRBOTIwNDA4MDAxMTgwMDQ2Cis6MTA4NDEwMDBBODAzMDA4MDI0QTcyMDQwNjgwRTAwODAyNEE4MjA0MEU0Cis6MTA4NDIwMDBBNEE4MjA0MDA4MDQwMDgwQjhCNTJDNDhGREY3QkFGRDg4Cis6MTA4NDMwMDAwMTIwMkI0OTBBNjg1MjBDMDZEMjBBNjgxMjBDMDJEMTlDCis6MTA4NDQwMDAwQTY4OTIwQTAwRDIwMDIwMDQwNjI0MEUyNTRBRDcxRDhECis6MTA4NDUwMDAwRDM3MDAyMzAwMjA5RDAwNzg1MTAxMzMwNDJCRkFEM0ZGCis6MTA4NDYwMDAwMTI3M0YwNTUwNjFGODYwRDA2MUY4NjEwMDIzREI0M0NDCis6MTA4NDcwMDA5MzYxM0I2MTEzNjIzQjYyMDAyNzFCNEI4RDY4QzA0NkQyCis6MTA4NDgwMDAwMDk1OEQ2OUMwNDYwMDk1MDAyQzBCRDBERDZCQzA0NjcxCis6MTA4NDkwMDAwMDk1OUQ2QkMwNDYwMDk1NUQ2QkMwNDYwMDk1MUQ2QkI5Cis6MTA4NEEwMDBDMDQ2MDA5NTAxMzc0MDJGRThEMzAwMjc2QzQ2MDEyM0QyCis6MTA4NEIwMDA1QjA3MUM0MzAxRTAyMDYwMDEzNzBENjgyQjA5MDJEMkU1Cis6MTA4NEMwMDA4MDJGRjhEMzAxRTA4MDJGMDNEMzA4NDk0QjZFMDEzMzhFCis6MTA4NEQwMDA0QjY2RDA2MkI4QkMwOEJDMTg0NzAwMDBGNDAxRkZGRjJGCis6MTA4NEUwMDAwMDAwMTA0MDY4MEUwMDgwMDAwMTE4NDBBMDgyMjA0MDZCCis6MTA4NEYwMDA5MEI0MDAyMTBFNEYwRjRBMDAyMDRDMDE2NDFBQTQwMEQyCis6MTA4NTAwMDBBMzE4NTg2MDk4NjAxODY0NTg2NDEwNTM1ODgwQ0MwMEMxCis6MTA4NTEwMDBFNDE5OTg2N0RDNjIwMTMxMDMyOUVFRDMwNjQ5QzA0NkFECis6MTA4NTIwMDAwODYwNDg2MDg4NjBDODYwMDg2MTkwQkM3MDQ3MDAwMEJGCis6MTA4NTMwMDBBQzY2MjE0MDVDMkIwMDgwRDAyQzAwODA2NDIxMDU0ODczCis6MTA4NTQwMDBDMDQ2MDE2MzAwMjFDOTQzNDE2MzgxNjMwMDIxQzE2M0M3Cis6MTA4NTUwMDAwMTY0NzA0NzY4MEUwMDgwODBCNDAxMjA0MDAyMEE0OTFGCis6MTA4NTYwMDBDMDQ2MDg2MDNDMjA0ODYwODg2MDA4NDhDMDQ2Qzg2MDMzCis6MTA4NTcwMDAwMDIwMDc0QTg3MDBDQjY4QzA0NkRBNTEwMTMwMTAyODM2Cis6MTA4NTgwMDBGOEQzODBCQzcwNDcwMDAwRTQyRDAwODBGNDJEMDA4MEZCCis6MTA4NTkwMDA1RDRDRkZGRjEyNDkxMzQ4NjcyMzlCMDFDQTE4MDZDMEIwCis6MTA4NUEwMDAwODM4MTE0QkNBMThDMTYwODI2MDAxNjEwRjQ5MTA0ODM4Cis6MTA4NUIwMDBBNzIzOUIwMUNBMTgwNkMwMDgzODBFNEJDQTE4QzE2MDExCis6MTA4NUMwMDA4MjYwMDE2MTBDNDgwRDQ5NjcyMzlCMDFDMjE4MDVDMUY3Cis6MTA4NUQwMDAwODM5MDU0QkMyMThDODYwOEE2MDA4NjE3MDQ3MDAwMEZFCis6MTA4NUUwMDBBQzFFMjE0MDQ4MkUwMDgwRkMxRjAwMDBBQ0VFMjA0MDU1Cis6MTA4NUYwMDAzNDJFMDA4MEZDMkYwMDAwQUMzRTIxNDA1QzJFMDA4MDE5Cis6MTA4NjAwMDA5MEI0MDAyMTQwNEMwMDIwMEEwMTEyMTkxOTIzREIwMTBCCis6MTA4NjEwMDBEMjE4RDA2MjEwNjM1MDYzOTA2MzAxMzEwMzI5RjNEMzAxCis6MTA4NjIwMDAzQTQ5QzA0NjA4NjM0ODYzODg2MzIwNjAwMTIxRTMxRDFFCis6MTA4NjMwMDA1OTMzNjA2MDE5NzExODcyOTg3MTk4NzI1OTcxNTg3MjMzCis6MTA4NjQwMDBEODcxRDg3MkUyMUQ0OTMyMTE3MzE5NzA5MDczOTg3MDA1Cis6MTA4NjUwMDA1MTczNTk3MEQwNzNEODcwMTE3MTExNzI5MDcxOTA3MkZBCis6MTA4NjYwMDA1MDcxNTA3MkQwNzFEMDcyMTg3MzAyMjJFNzFENjkzN0IxCis6MTA4NjcwMDAzQTcwOTk3M0JBNzA1ODczNzg3MEQ4NzNGODcwMzk3MTBBCis6MTA4NjgwMDAzQTcyQjk3MUI5NzI3ODcxN0E3MkY5NzFGOTcyMzk3MzkzCis6MTA4NjkwMDBFMzFENzkzMzFBNzBCOTczOTk3MDc4NzM1QTcwRjk3MzRFCis6MTA4NkEwMDBEOTcwMUE3MTFBNzI5OTcxOUE3MjU4NzE1QTcyRDk3MTc1Cis6MTA4NkIwMDBEQTcyMTk3M0U3MUQ4OTM3M0E3MDk5NzNCOTcwNTg3Mzc0Cis6MTA4NkMwMDA3QTcwRDk3M0Y5NzAzOTcxM0E3MkI5NzFCOTcyNzg3MTc3Cis6MTA4NkQwMDA3QTcyRjk3MUY5NzIzQTczRTMxRDk5MzMxQTcwQjk3M0FBCis6MTA4NkUwMDA5QTcwNzg3MzVBNzBGOTczREE3MDE5NzExQTcyOTk3MUY1Cis6MTA4NkYwMDA5OTcyNTg3MTVBNzJEOTcxRDk3MjIwNjFFMDYwNjA2MUMzCis6MTA4NzAwMDBBMDYwOTBCQzcwNDcwMDAwQTAxQzAwODBFODE5MDA4MEE5Cis6MTA4NzEwMDA4MTIwMDAwMjAxNDlDMDQ2ODg2MjcwNDdDMDAwMTQwMEYxCis6MTA4NzIwMDAwOTQ5MEE0QkM4MTgwNDNCQzkxODA4NjAwMDIxQzIxRDNBCis6MTA4NzMwMDAyOTMyQzI2MTEwMUMwMTMxMDgyOUY4RDNDMTFGMjkzOTFGCis6MTA4NzQwMDAwMDIwQzg2MTcwNDcwMDAwNjgwRTAwODA4NDA5MDAwMEE2Cis6MTA4NzUwMDAwNjQ4MDc0OUMwNDYwODgwNDg4MDAwMjA4ODgwQzg4MEI1Cis6MTA4NzYwMDA4ODYwMDQ0OUMwNDY0ODYxODg2MTcwNDdGRkZGMDAwMDg3Cis6MTA4NzcwMDA0QzJBMDA4MDZDMDYwMDgwMDAyMTA2NDhDMjFEMTkzMjc4Cis6MTA4NzgwMDBDMTYwMDE2MUMxNjEwMTYyMTE3MUZGMzAwMTMwNDE2MjVDCis6MTA4NzkwMDA3MDQ3MDAwMDZDMDYwMDgwMDk0ODBBNEJDMDQ2MTg2MDBDCis6MTA4N0EwMDAwMDIxQzIxRDREMzJDMjYwMTAxQzAxMzExNDI5RjhEM0MyCis6MTA4N0IwMDBDMTFGNEQzOTAwMjBDODYwNTg2MDk4NjA3MDQ3MDAwMEE0Cis6MTA4N0MwMDBEODA3MDA4MDZDMDYwMDgwMDBCNTBCNDkwQjQ4RkRGNzA4Cis6MTA4N0QwMDBFQUZCMEI0ODAwNkEwMTIzREIwMzk4NDMwOTQ5QzA0NkMyCis6MTA4N0UwMDAwODYyMDk0OEMxNjgwMTI5MDREMUMwNkY4MDIzMDE2ODZCCis6MTA4N0YwMDAxOTQzMDE2MDA4QkMxODQ3QzFCRDIxNDA3NTk4MjE0MDRDCis6MTA4ODAwMDBDMDAwMTg0MEMwMDAxODAwNjgwRTAwODAwMEI1MEY0ODc2Cis6MTA4ODEwMDBDMTY4MDEyOTA0RDFDMDZGODAyMzAxNjg5OTQzMDE2MEI4Cis6MTA4ODIwMDAwQjRCMEM0ODBDNEEwMDIxRkRGN0JGRkIwQjQ4NDE4RDU4Cis6MTA4ODMwMDAwMTMxNDE4NTAwMjFDMTg1MDk0ODAwNkEwMTIzREIwMzFDCis6MTA4ODQwMDAxODQzMDg0OUMwNDYwODYyMDhCQzE4NDc2ODBFMDA4MEYzCis6MTA4ODUwMDA1OUJEMjE0MDc1OTgyMTQwQjgwQjAwMDAwMDAwMDA4MEYwCis6MTA4ODYwMDBDMDAwMTg0MEMwMDAxODAwRjBCNTFCNEMxMDI2RTA2ODhFCis6MTA4ODcwMDAwMTI4MDhEMTYwODgwMDI4MDVEMTIwNzkwMDI4MDJEMTdDCis6MTA4ODgwMDAxOTIwQTA2NzAwRTBBNjY3MDAyMDA3MjM1QjAyRTUxODE3Cis6MTA4ODkwMDBDMTQzRTg2MTY5NjI1OTA4QTEyNzdGMDM3OTYwMEYyMTBDCis6MTA4OEEwMDA3OTYwRTExREI5MzEwODcxMDEyMEI4NjA0MDAyQjg2MEZCCis6MTA4OEIwMDAwMEYwNENGQTAwRjBGMEZBMDQyMEI4NjAwNzIwNzg2MTZDCis6MTA4OEMwMDA3RTYwMUIyM0RCMDFFMDE4QzA4QjA0MjMxODQwRTg2MkE0Cis6MTA4OEQwMDBGMEJDMDhCQzE4NDcwMDAwNjgwRTAwODA5MEI0MDIxQzcxCis6MTA4OEUwMDAwMDIwRkYyMzAxMzM5QTQyMDhEMDAxMjkwMEQxMDEyMDQyCis6MTA4OEYwMDAwMDJBMDFEMTAyMjMxODQzOTBCQzcwNDcxQjRBRDc2ODU1Cis6MTA4OTAwMDAxQTRCMTk3OTFDMUMzNzIzOUIwMUUzMTgwMTJGMEREMTM5Cis6MTA4OTEwMDA1Nzg4MDAyRjBBRDEwMDI5MEFEMTU5OEIwQTA5MDBEM0EwCis6MTA4OTIwMDAwMjIwNDkwOUU4RDMwMTIzMTg0M0U1RTcwMDI5MDNEMEQxCis6MTA4OTMwMDA5ODhBODAwNzgwMEZERkU3NkQyMzVCMDFEMTE4OEE4ODUyCis6MTA4OTQwMDBGRjI3MDEzNzE3NDAwQTQ5Qzk4ODAzRDA0QjBBMDFEM0QyCis6MTA4OTUwMDAwMzIwRDFFNzEzMEEwM0QzMEIwQTAxRDMwMjIwQ0JFNzhDCis6MTA4OTYwMDBEMjA5QzlEM0M5MDlDN0QzMDEyMEM1RTc2ODBFMDA4MDYxCis6MTA4OTcwMDAwODFDMDA4MEYwQjVDMUIwMDEyMDAwMDc1MjQ5QzA0Njc0Cis6MTA4OTgwMDAwODYwNTI0ODQyNjk0MDBEQTEyMTQ5MDM0ODYwNTA0ODlGCis6MTA4OTkwMDBDMDZBNTA0QjE4NDMwMDIxMDMwMzFCMEI0RTRDMjc2RjNBCis6MTA4OUEwMDAzRDAzMkQwQkU3MUQ3OTM3QUI0MjFDRDBFMzFENzkzMzE2Cis6MTA4OUIwMDAxQjZBQzA0NjQwOTMwMTIzOUIwNzAzNDMxQjY4Q0MwMEZFCis6MTA4OUMwMDA2RTQ2MzM1MTAxMjM5QjA3MDYxRDMzNDMxQjY4NkM0NERECis6MTA4OUQwMDA2MzYwMDgzMDAxMzE0MDlCODM0MjAwRDgzRjQ4MDMwMzY1Cis6MTA4OUUwMDAxQjBCQUI0MkU3RDEwMDIwMDEyMzFCMDMxMzQwM0M0QzdGCis6MTA4OUYwMDAwM0QwNjM2QTAxMzM2MzYyMDlFMDEzMEIwM0QzMjM2QTc0Cis6MTA4QTAwMDAwMTMzMjM2MjAzRTAzNzRCNUM2RDAxMzQ1QzY1MDAyOTYwCis6MTA4QTEwMDAwOUQwMDMxQ0RDMDAyMzFDNkI0NDVDNjgwMTMwMjMwRDZGCis6MTA4QTIwMDAwMUQyODg0MkY1RDEzMDRDMjU2ODZCMEMwNUQyMjM2ODAxCis6MTA4QTMwMDAxQjBDMDhEMTI0NjhBMzBBMDVEMzIwMjQyQjRCQzA0NjY1Cis6MTA4QTQwMDA1QzYyMDAyNDVDNjIyNTRCMjM0QzUxMjZCNjAzMjM2N0VECis6MTA4QTUwMDAzMzYxM0Q2QUMwNDY3NTYxMDIyNUExMjY3NjAzNzU2MEMzCis6MTA4QTYwMDAwMTI1QjU2MEU2MURCOTM2MzU3MTg4NDIyMUQwMjUxQzM3Cis6MTA4QTcwMDBDMzAwNkM0NkU0NTgyRTZGNkI0NDM0NjA1QjY4MkM2RjA3Cis6MTA4QTgwMDBDMDQ2NjM2MDJCNkYwODMzMkI2NzNDNkFBMzQyMDJEMzU2Cis6MTA4QTkwMDAxMjRCQzA0NjJCNjcwMzFDREIwMDZCNDQ1QzY4MDEzMDQzCis6MTA4QUEwMDAyMzBEMDREMzUxMjRBNDAzMkI2RkMwNDZBMzYxODg0MjM1Cis6MTA4QUIwMDBERUQxMTAwQjAzRDMwRTQ5MDEyMEZERjc3NEZBNDFCMDRCCis6MTA4QUMwMDBGMEJDMDhCQzE4NDcwMDAwMDAwMDAwQjAwMDAxMTQ0MEQyCis6MTA4QUQwMDAwMDQwMTQ0MDAwMDAyMDQwNjgwRTAwODAyNEE3MjA0MDgxCis6MTA4QUUwMDBBNDJBMDA4MEEwODIyMDQwMDAwMDEwNDBDMDAwMTgwMDhFCis6MTA4QUYwMDBDOTRGRkZGRkYwQjQwMDIxMDAyMzA3MjIwNjI0NDc0RjhGCis6MTA4QjAwMDBDMDQ2M0M2MTNBNjEwMTMzMjAyQkY5RDMwNDI1M0Q2MTE1Cis6MTA4QjEwMDAwNTIzM0I2MTNDNjEzQTYxM0M2MTNBNjEzRDYxM0I2MUU3Cis6MTA4QjIwMDAzRjREQUI2RkRFMDgwMjIzMUU0MDA0MjMzMzQzM0I2MUZECis6MTA4QjMwMDAwNTIzMzM0MzNCNjFBQjZGOUUwODAyMjMxRTQwMDQyMzkxCis6MTA4QjQwMDAzMzQzM0I2MTA1MjMzMzQzM0I2MUFCNkY1RTA4MDIyMzM0Cis6MTA4QjUwMDAxRTQwMDQyMzMzNDMzQjYxMDUyMzMzNDMzQjYxMDIyMzFGCis6MTA4QjYwMDBBRTZGMUU0MDA0MjMzMzQzM0I2MTA1MjMzMzQzM0I2MTE3Cis6MTA4QjcwMDBBQjZGNUQwMDAyMjMxRDQwMDQyMzJCNDMzQjYxMDUyM0EzCis6MTA4QjgwMDAyQjQzM0I2MUM1MDgwMjIzMUQ0MDA0MjMyQjQzM0I2MTVCCis6MTA4QjkwMDAwNTIzMkI0MzNCNjE4NTA4MDIyMzFENDAwNDIzMkI0M0ZGCis6MTA4QkEwMDAzQjYxMDUyMzJCNDMzQjYxNDUwODAyMjMxRDQwMDQyMzAxCis6MTA4QkIwMDAyQjQzM0I2MTA1MjMyQjQzM0I2MTAyMjUwNTQwMDQyM0U2Cis6MTA4QkMwMDAyQjQzM0I2MTA1MjMyQjQzM0I2MTQwMDAwMjIzMTg0MEFDCis6MTA4QkQwMDAwNDIzMDM0MzNCNjEwNTIzMTg0MzM4NjEwMDI1M0Q2MUFECis6MTA4QkUwMDAwMTIzM0I2MTNENjEzQjYxMDAyMDNENjEwRDRCMUI2OUYxCis6MTA4QkYwMDA0OTAwMUUxQzAyMjMzMzQwMTk0MzAxMjMzQjYxMDEzMDBECis6MTA4QzAwMDAxMDI4RjJEMzAyMjAzODYxMDMyMDM4NjEzQzYxM0E2MUI4Cis6MTA4QzEwMDAzQzYxM0E2MTM4NjE0ODA4RjBCQzcwNDc4MDAwMTQwMDNDCis6MTA4QzIwMDA2ODBFMDA4MDgwMDAxNDQwRjBCNDAwMjQwNzIzMDYyNzVCCis6MTA4QzMwMDA0NDRBQzA0NjE3NjExMzYxMDEzNDIwMkNGOUQzMDQyNjNECis6MTA4QzQwMDAxNjYxMDUyNDE0NjExNzYxMDcyMzEzNjExNjYxMTQ2MTBECis6MTA4QzUwMDAxNzYxMTM2MTNDNEI5QjZGREQwODAyMjMxRDQwMkIxQ0U5Cis6MTA4QzYwMDAzMzQzMTM2MTI1NDMxNTYxMzc0QjlCNkY5RDA4MDIyM0U2Cis6MTA4QzcwMDAxRDQwMkIxQzMzNDMxMzYxMjU0MzE1NjEzMjRCOUI2RjAxCis6MTA4QzgwMDA1RDA4MDIyMzFENDAyQjFDMzM0MzEzNjEyNTQzMTU2MUVFCis6MTA4QzkwMDAyRDRCOUQ2RjAyMjMxRDQwMkIxQzMzNDMxMzYxMjU0MzM1Cis6MTA4Q0EwMDAxNTYxMjk0QjlCNkY1RDAwMDIyMzFENDAyQjFDMzM0MzM0Cis6MTA4Q0IwMDAxMzYxMjU0MzE1NjFDNTA4MDIyMzFENDAyQjFDMzM0MzU2Cis6MTA4Q0MwMDAxMzYxMjU0MzE1NjE4NTA4MDIyMzFENDAyQjFDMzM0Mzg2Cis6MTA4Q0QwMDAxMzYxMjU0MzE1NjE0NTA4MDIyMzFENDAyQjFDMzM0M0I2Cis6MTA4Q0UwMDAxMzYxMjU0MzE1NjEwMjI1MDU0MDJCMUMzMzQzMTM2MTk1Cis6MTA4Q0YwMDAyNTQzMTU2MTQwMDAwMjIzMTg0MDAzMUMzMzQzMTM2MUQwCis6MTA4RDAwMDAyMDQzMTA2MTE3NjEwNzIzMTM2MTE2NjExNDYxNEMwMDQxCis6MTA4RDEwMDAwMDIwMEYyMTI1MUNDRDQwMDIyMzFENDAwNDIzMkI0MzlFCis6MTA4RDIwMDAxMzYxMDUyMzJCNDMxMzYxMDEzMDAxMzkxMDI4RjFEMzVFCis6MTA4RDMwMDAxNzYxMDcyMzEzNjExNzYxMTM2MTAzMjAxMDYxRjBCQ0YxCis6MTA4RDQwMDA3MDQ3MDAwMDgwMDAxNDAwNjgwRTAwODBGMEI1NEY0REExCis6MTA4RDUwMDAwODIxMDIyMDJBMUNGREY3MjdGOTRENEM3MTIzNUIwMUU1Cis6MTA4RDYwMDBFNzE4Mzg4MDFBMjEwMjIwMkExQ0ZERjcxREY5Nzg4MEE3Cis6MTA4RDcwMDAyMDc5MDAyODBCRDAwMDIwMzg4MEUwNjgwMTI4MTBEMTJECis6MTA4RDgwMDA0NDQ4MDA2ODAxMjM5QjAyMTg0Mzk5MDIwODYwRTA2ODg4Cis6MTA4RDkwMDAwMTI4MDZEMTYwODgwMDI4MDNEMUY5MjExMjIwRkZGN0FECis6MTA4REEwMDA0M0ZGMDEyMUM5MDMwMDIwRkZGNzNFRkYwMDI1N0QyNjc4Cis6MTA4REIwMDBGNjAwMDBFMDAxMzUwMDIwRkZGNzlDRkUwMDBDMDFEMzE3Cis6MTA4REMwMDBCNTQyRjdEMzAwMjUwNUUwMDMyMTA5MDMwMDIwRkZGNzkyCis6MTA4REQwMDAyQkZGMDEzNTAwMjBGRkY3OERGRTQwMEIwMUQyQjU0MjdECis6MTA4REUwMDBGMkQzMDQyMEZGRjc4NkZFRkYyM0UxMzM5ODQzMDEyMUVECis6MTA4REYwMDAwMTQzMzg4OEZGMjMwMTMzOTg0MjAzRDEyRjIzNUIwMUJECis6MTA4RTAwMDAxOTQzMTZFMDAxMjgwOUQxNzg4ODAxMjgwM0QxMjMyM0NBCis6MTA4RTEwMDA1QjAxMTk0MzBERTAyMDIzMTk0MzBBRTAwMDI4MDhEMTIzCis6MTA4RTIwMDA3ODg4MDEyODAzRDEwQjIzREIwMTE5NDMwMUUwODAyMzVCCis6MTA4RTMwMDAxOTQzMDQyMEZGRjdGOEZFMDkyMTQ5MDIwMDIwRkZGNzNCCis6MTA4RTQwMDBGM0ZFRTA2ODAwMjgwQ0QxMDAyMTFCMjBGRkY3RUNGRUE4Cis6MTA4RTUwMDAxQTIwRkZGNzRGRkUwMTIxQzkwMzAxNDMxQTIwRkZGNzMzCis6MTA4RTYwMDBFM0ZFMDAyNzAzRTAwODJGMDFEMzBGMkYwOEQ5MzgxQzk5Cis6MTA4RTcwMDBGRkY3NDBGRTc5MDAwOTE5MUIyM0RCMDFDOTE4ODg4MzFECis6MTA4RTgwMDAwMTM3MjAyRkVGRDNGMEJDMDhCQzE4NDdFREFGMjE0MENECis6MTA4RTkwMDA2ODBFMDA4MDAwMDAxMDQwODFCMDEzNDgwMTY4QzA0NjkxCis6MTA4RUEwMDAwMDkxNDE2OEMwNDYwMDkxODE2OEMwNDYwMDkxQzE2ODQ4Cis6MTA4RUIwMDBDMDQ2MDA5MTAxNjlDMDQ2MDA5MTQxNjlDMDQ2MDA5MUQ5Cis6MTA4RUMwMDA4MTY5QzA0NjAwOTFDMTY5QzA0NjAwOTEwMTZBQzA0NkVGCis6MTA4RUQwMDAwMDkxNDE2QUMwNDYwMDkxODE2QUMwNDYwMDkxQzA2QTEzCis6MTA4RUUwMDBDMDQ2MDA5MDAxQjA3MDQ3MDAwODE0NDBGMEI1ODNCMDUwCis6MTA4RUYwMDA2ODREMUIyM0RCMDFFRjE4Rjg4QjA0MjIwMjQwMDI5MjFECis6MTA4RjAwMDA3MTIzNUIwMUU4MTgwMTg4QzA0NjAxOTE0MDg4QzA0NjgyCis6MTA4RjEwMDAwMDkwMDAyNDAzRTAwODJDMDFEMzBGMkMwOEQ5MjAxQzVBCis6MTA4RjIwMDBGRkY3RThGRDYxMDA0OTE5MUIyM0RCMDFDOTE4ODg4MzlECis6MTA4RjMwMDAwMTM0MjAyQ0VGRDM1ODRDRTA2OTAwMjgxNUQwNTc0RTRGCis6MTA4RjQwMDAyMDI1MDEzRDUzNDlFMDY5MzA0MDBCRDA2ODAwNDAxOEFFCis6MTA4RjUwMDAzNzIzOUIwMUMwMTg4MThCMjgxQ0ZGRjc2NUZFRTA2OTUxCis6MTA4RjYwMDBCMDQzRTA2MTc2MDgwMDJERUJEMTAxMjBGRkY3QzJGRDkwCis6MTA4RjcwMDA0ODQ5QzA0NkY4ODNGODhCQzIwODI1RDNDQTY4MDEyQTNECis6MTA4RjgwMDAxM0QxMEE3OTAwMkExRkQxNDk4ODAwMjkxQ0QxMDE5OURGCis6MTA4RjkwMDA0MzRBMDAyOTA1RDAwMTI5MTZEMTUxOEJDOTA4MTNEMkEzCis6MTA4RkEwMDAwRkUwNTE4QjA5MDkwRkQyMEJFMDBBNzkwMDJBMEJEMThGCis6MTA4RkIwMDA2RDIzNUIwMUM5MTg4QTg4Qzk4ODExNDA0OTA5MDkwN0NFCis6MTA4RkMwMDAwMkQxMDQyMzk4NDNGODgzRjg4QjA0MjEwMTQwMDI5QUNDCis6MTA4RkQwMDAxRkQwQjk4QjRBMEIyN0QzODAwOTI1RDNGRjIzMDE5OEQzCis6MTA4RkUwMDAwMTMzOTg0MjIwRDAwMDI1MDA5ODAxMjgwMEQxMDUwMkM1Cis6MTA4RkYwMDAwMTk4MDAyODAyRDEwMTIzNUIwMzFENDNBOTQyMTNEMDJECis6MTA5MDAwMDAwMDIwMjkxQ0ZGRjcxMEZFQkQ4MzAwMjBDMDQzNjA2MkQyCis6MTA5MDEwMDAwQUUwQjg4QjQwMEIwN0QyMDkyMTQ5MDIwMDIwRkZGNzc0Cis6MTA5MDIwMDAwM0ZFMDkyMDQwMDJCODgzRjg4QkMwMDgyREQzMUQ0OEU5Cis6MTA5MDMwMDBDNzZBMDE5ODAwOTlGRkY3NTFGQ0MyMDdEMjBGMUE0OTdECis6MTA5MDQwMDAwM0QwMDQyM0NENkQyQjQzMDNFMDA0MjNDRDZEOUQ0MzVBCis6MTA5MDUwMDAyQjFDQ0I2NTgzMDgwM0QzMDIyM0NENkQyQjQzMDNFMDg4Cis6MTA5MDYwMDAwMjIzQ0Q2RDlENDMyQjFDQ0I2NTYxNkE4MTQyMENEMEUwCis6MTA5MDcwMDA2MDYyMEU0ODAwMkEwM0QwRkYyMTIxMzEzOTQzMDNFMDBBCis6MTA5MDgwMDBGRjIzMjEzMzlGNDMzOTFDQzE2MjAzQjBGMEJDMDhCQ0VECis6MTA5MDkwMDAxODQ3MDAwMDY4MEUwMDgwNjgxQzAwODAwMDAwMDA4MEY3Cis6MTA5MEEwMDAyODFDMDA4MDQwMDAxNDQwQTQyQTAwODA0MDAwMTQwMEM2Cis6MTA5MEIwMDA5MEI0MDEyMjIwMjgwRkQyNDMwMDBGMUMwNzQ5NUMxOEVFCis6MTA5MEMwMDAzNzIzOUIwMUUzMTg5RjgzODI0MDA3MjM1QjAyQzkxODYzCis6MTA5MEQwMDAxMDFDQ0E2OTEwNDNDODYxOTBCQzcwNDc2ODBFMDA4MEJDCis6MTA5MEUwMDAwQjQ4NDA2OTBCNDlDOThCMDQyMjBBNDAwQTQ5MDZEMDQzCis6MTA5MEYwMDAwMTIzREIwMjk4NDMwMTIzQ0E2RDFBNDMwNUUwMDEyM0QzCis6MTA5MTAwMDBEQjAyMTg0M0NBNkQ1MjA4NTIwMENBNjU3MDQ3MDAwMDVFCis6MTA5MTEwMDA4MDAwMTQ0MEU4MUIwMDgwQTQyQTAwODAwMEI1ODRCMEMxCis6MTA5MTIwMDBGRkY3REVGRjAxMUMwNTIwMDA5MDAwMjAwMUFCMTg4MDM2Cis6MTA5MTMwMDAwNDNCNTg3MDFCMjIwMEFCNUE4MEQ5ODAwNTQ5Qzk2RDg5Cis6MTA5MTQwMDBDMDQ2MDI5MTAzOTA2ODQ2MDAyMUZERjc3OUY4MDRCMDBCCis6MTA5MTUwMDAwOEJDMTg0N0E0MkEwMDgwMEY0ODAxNjg0OTBDMDVEMkIyCis6MTA5MTYwMDAwMTY4MDkwQzA2RDEwMDY4ODAwQTAzRDMwQjQ4MDA2ODI3Cis6MTA5MTcwMDAwMDBDMDFFMDBBNDg4MDZDMDAwNDAwMEMwOTRCOTg0Mjg2Cis6MTA5MTgwMDAwNUQwMDIzMzk4NDIwMkQwMDc0Qjk4NDIwMUQxMDEyMDBBCis6MTA5MTkwMDA3MDQ3MDAyMEZDRTcwMDAwMDAwMDEwNDAwMDAwMTg0MDZECis6MTA5MUEwMDAwMDAwMDA4MDA0OTkwMDAwMDc5OTAwMDA5MEI0MDEyNDk5Cis6MTA5MUIwMDAyMTFDMTg0ODAyNjg1MjBDMDZEMjAyNjgxMjBDMDJEMTE3Cis6MTA5MUMwMDAwMDY4ODAwQTAwRDIwMDIxMDkwNjA5MEUxMjRGMTM0QUQ2Cis6MTA5MUQwMDAwMkQwMzg2ODAwMEMwMEUwOTA2QzAwMDQwMDBDMTA0QkNBCis6MTA5MUUwMDA5ODQyMDhEMDAyMzM5ODQyMDVEMDBFNEI5ODQyMDJEMEU0Cis6MTA5MUYwMDAwMjNCOTg0MjBDRDEwMDI5MDJEMEY4NkEwMDBDMDBFMDMyCis6MTA5MjAwMDBEMDZDNDAwQTAwRDIwMDI0MjAwNjAwMEU5MEJDNzA0N0FCCis6MTA5MjEwMDAwMDIwRkJFNzAwMDAxMDQwMDAwMDE4NDAwMDAwMDA4MDI0Cis6MTA5MjIwMDAwNDk5MDAwMDA3OTkwMDAwMEM0ODAxNjg0OTBDMDVEMjE4Cis6MTA5MjMwMDAwMTY4MDkwQzA1RDEwMDY4ODAwQTAyRDMwODQ4ODA2OERCCis6MTA5MjQwMDAwMUUwMDg0ODQwNkMwMDA0MDAwQzAwMjEwMzI4MDNEMDEyCis6MTA5MjUwMDA0MDA4MDFEMzAxMjA3MDQ3MDgxQ0ZDRTcwMDAwMTA0MEMzCis6MTA5MjYwMDAwMDAwMTg0MDAwMDAwMDgwRjBCNTAxMjcxQTRDMjU2ODY2Cis6MTA5MjcwMDBGRkY3NzJGRjAzMUMxOTRBMDIyMTAxMjYxODQ4MDEyQjJGCis6MTA5MjgwMDAxQkQxQ0IwNDFFNjA1NTIzMDM2MDAwMjM0MzYwMDY2ODk2Cis6MTA5MjkwMDA1NTJFMUJEMUFBMjYwNjYwNDM2MDAzNjhBQTJCMTVEMTYwCis6MTA5MkEwMDAwOTIzMDM2MDA1MjMwRjRGQzA0NjNCNjAwMzIzMEU0Rjg1Cis6MTA5MkIwMDBDMDQ2M0I2MDExNjAwNzY4MDhFMDA4MjMyMzYwMDQyMzcwCis6MTA5MkMwMDAwQTRGQzA0NjNCNjAxMTYwMDY2MDI3NjhDMDQ2MjU2MEIzCis6MTA5MkQwMDAzODFDRjBCQzA4QkMxODQ3MDAwMDIwNDAwMDAwMjQ0MEE3Cis6MTA5MkUwMDAwMDAwMjI0MDAwMDAyQTQwMDAwMDI2NDAwMDAwMjg0MEU0Cis6MTA5MkYwMDA4MEI1MDcxQ0ZGRjczMEZGMDEyODA1RDExOTQ4MDA2ODI5Cis6MTA5MzAwMDAxOTQ5NDk2QjA4NDAyMkUwMTg0ODAxNjg0OTBDMDVEMjA4Cis6MTA5MzEwMDAwMTY4MDkwQzA2RDEwMDY4ODAwQTAzRDMxNDQ4MDA2ODZDCis6MTA5MzIwMDAwMDBDMDFFMDEzNDg4MDZDMDAwNDAwMEMxMjRCQzAxOEM0Cis6MTA5MzMwMDAwODI4MEJEMjAxQTMxQjVDNUIwMDlGNDQwNTAzMDcwM0I1Cis6MTA5MzQwMDAwNzA3MDUwMzAzMjAwMkUwMDEyMDAwRTAwMDIwMDEyMUJGCis6MTA5MzUwMDAzODYwODAwNzAwRDEwMDIxMDgwNjAwMEU4MEJDMDhCQ0UwCis6MTA5MzYwMDAxODQ3MDAwMDM0NkUyMTQwMDAwMDExNDAwMDAwMTA0MEZBCis6MTA5MzcwMDAwMDAwMTg0MDAwMDAwMDgwRkU2NkZGRkZGMEI1ODJCMERDCis6MTA5MzgwMDAwNzFDMDEyMDAxOTBGRkY3RTdGRTAxMjgxM0QxMzgyRkI5Cis6MTA5MzkwMDAwMUQwQTgyRjA3RDEwMDI2RjY0MzM0MUNBODJGMDJEMUY0Cis6MTA5M0EwMDAzMDFDMDA5NjM1MUMxMTIwMDAwNDA2NjI0NDYyODU2MjYwCis6MTA5M0IwMDAwMDk5QzA0NkMxNjIwMDIxMDg0OEMwNDYwMTYwMzgyRkFDCis6MTA5M0MwMDAwMUQwQTgyRjA1RDEwMTIxMDE2MEE4MkYwMUQxMDMyMUNGCis6MTA5M0QwMDAwMTYwMDE5ODAyQjBGMEJDMDhCQzE4NDczNDZFMjE0MDBGCis6MTA5M0UwMDA3MDQ3MDAwMDcwNDcwMDAwOTBCNTA3MUMxMjRDMjE2OEMwCis6MTA5M0YwMDAxMjQ4ODE0MjBCRDAwMDIzMjExQ0UyMURDMTMyMDBFMDQzCis6MTA5NDAwMDAwOEMxOTE0MkZDRDMyMDYwQzgyMEEwODA2NzcyMzgwMTU3Cis6MTA5NDEwMDAwMEYwMThGODI3NzIwQTQ4QzA0NkUwNjAwOTJGMDBEQjA4Cis6MTA5NDIwMDAwMDI3RTAxOTAxN0QwMTMxMDE3NUUwODgwMTMwRTA4MEZECis6MTA5NDMwMDAwMTIwOTBCQzA4QkMxODQ3MDAwMDAwODBFRUZGQzBEMDlGCis6MTA5NDQwMDAwODEwMDAwMzgwQjQwODRBRDExRDg5MzEwQjdBMjAyQjAzCis6MTA5NDUwMDAwMUQzMDAyMzBCNzIwNzFDMDg3QTQzMUMwQjcyODAxODdGCis6MTA5NDYwMDA5MDMwNDc3MjgwQkM3MDQ3MDAwMDAwODAwNzQ5MDEyMjlECis6MTA5NDcwMDAxMjA0MDg2ODAyNDAwMTIwMDAyQTA2RDEwQTY4MTIwQzcyCis6MTA5NDgwMDAwMkQxMDk2ODg5MEEwMEQyMDAyMDcwNDcwMDAwMTA0MDBDCis6MTA5NDkwMDA5MEI1MDcxQzA5NEMzODFDMjExQ0ZDRjc5MUZGMzgxQ0E3Cis6MTA5NEEwMDAwMEYwMEVGODAxMjNEODQyMDFEMTAwMENFMDgwMDAyMTI5Cis6MTA5NEIwMDAyMDFDRkNGN0M1RkU5MEJDMDhCQzE4NDdDNDY2MjE0MEMwCis6MTA5NEMwMDBGOEI1MDcxQzc5N0E3NjQ4MDAyMzc2NEMwMTI5NUREMURFCis6MTA5NEQwMDBBMjg4QzA0NjAwOTJBMTg5OEE0Mjc0REFGQTdBMDAyQUU4Cis6MTA5NEUwMDAxNUQwN0E2QzAwMkExMkQwOEE0MjEwRDgwMDlBNTExQ0VBCis6MTA5NEYwMDBBMTgwQTE4OEMwNDY0MTgxNzg2QzZCNEVDMDQ2RjA4MDQ3Cis6MTA5NTAwMDBBMDZBNTgyMzc5NkM1OTQzNDAxOEMxMUEyOEUwMjI4ODcwCis6MTA5NTEwMDAwMTMyMTIwNDEyMEMyMjgwOEE0MjAwREIyMzgwMDAyMkQ2Cis6MTA5NTIwMDAwMDI5NjlERDVGNENBNDZBNUU0QjFEODg1ODIzNkI0MzlDCis6MTA5NTMwMDBFMzE4REUxRDAxMzYwMTIzOUIwNzMzNDMxQjY4MUIwNjFFCis6MTA5NTQwMDAxNUQxNTg0OTAwOUEwMTMyOEE4MDhBODhDMDQ2NDI4MUUyCis6MTA5NTUwMDAwODg4MDEzMDU0NEVDMDQ2RjA4MDU4MjA2ODQzMjExOEQ2Cis6MTA5NTYwMDAzODFDMDBGMDM5RkJGMDg4MDAwNDAwMTQ5NUUwNEQ0QkU2Cis6MTA5NTcwMDAwMTM1MkQwNDJEMEMxRDgwOEQ0MjAxREIwMDI1MUQ4MDQxCis6MTA5NTgwMDAwMTMyMTIwNDEyMTQ5MTQyQ0VEQzgxRTBFMTg4RTI4OUJBCis6MTA5NTkwMDA5MTQyMThEQUY5N0EwMDI5MkZEMDc5NkM0OTA0NDkwQ0U0Cis6MTA5NUEwMDA3OTY0MkFEMEUyODk5MTQyMjdEOEUxODgwMTMxRTE4MEFCCis6MTA5NUIwMDBFMTg4QzA0NjgxODEwMTIzREIwMzc4NkMxODQzM0E0RTcxCis6MTA5NUMwMDBDMDQ2RjA4MDAwRTA2M0UwRTA2QTc5NkM0QjAwNTkxODE3Cis6MTA5NUQwMDA0OTAxNDAxOEMxMUY1OTM5MzgxQzAwRjAwRkZCRTA2QURGCis6MTA5NUUwMDA3OTZDNEEwMDUyMTg1MjAxODAxODAxMzkwOTA0MDkwQzlCCis6MTA5NUYwMDA2MDM4MDBGMDg5RkJCNkU3NEFFMDYxODgwMTMxMDkwNDcwCis6MTA5NjAwMDAwOTBDNjE4MEUyODk5MTQyMDBEQjYzODAwMDIxMDAyQTFECis6MTA5NjEwMDAzRUREMjQ0Q0U0NkEyMzRCNUQ4ODZCMDA1QjE5NUIwMUUzCis6MTA5NjIwMDBFMzE4REUxRDAxMzYwMTIzOUIwNzMzNDMxQjY4MUIwNjJECis6MTA5NjMwMDAyMEQxMUM0RUYxODgwMTMxRjE4MEYxODhDMDQ2ODE4MTMyCis6MTA5NjQwMDA3MDg4MDEyM0RCMDMwMTMwMTg0MzE3NDlDMDQ2Qzg4MEU2Cis6MTA5NjUwMDA2ODAwNDAxOTQwMDEyMTE4MzgxQzAwRjBDRkZBNzE4OEM5Cis6MTA5NjYwMDA0QTAwNTIxODUyMDFGMDZBODAxODAwRjA0REZCMEU0OTcyCis6MTA5NjcwMDBDODg4NzlFNzBCNEIwMTM1MkQwNDJEMEM1RDgwOTU0MjkwCis6MTA5NjgwMDAwMURCMDAyNTVEODAwMTMxMDkwNDA5MTQ4QTQyQzJEQzM2Cis6MTA5NjkwMDAwMTg5MDEzMTAxODEwMDIwQzA0M0Y4QkMwOEJDMTg0NzkyCis6MTA5NkEwMDA0QzJCMDA4MDRDMkEwMDgwQzQ2NjIxNDBGMEI0MDYxQzdDCis6MTA5NkIwMDAwMTIzREIwMzMzNDAwMTI0NDQ0RjAwMjA0NDRBNDU0RDNECis6MTA5NkMwMDBEMTFEMzkzMTAwMkI0MUQwRTMwM0YzMUE3M0QwRUU4OTU5Cis6MTA5NkQwMDA5RTQyNzFEM0VFODgwMDJFNkREMEVENkE1RTFFNzMwMDNGCis6MTA5NkUwMDA5QjE5NUIwMUVEMThBRTY4MzYwNjM2MEUwMzJFMDJEMENDCis6MTA5NkYwMDBDRTg5MDEzNkNFODE0MDM1QUQ4QkFEMDAzNTRFNzY2QUQwCis6MTA5NzAwMDBDMDQ2NzA1MTU1ODkwMTM1NTU4MTMyNEVGMjZBRDIxOEUyCis6MTA5NzEwMDA5MDYwRjI2QUQyMTg5MDYzRjI2QUQyMThEMDYzRjI2QTRCCis6MTA5NzIwMDBEMjE4MTA2NEYyNkFEMjE4NTA2NEYyNkFEMjE4OTA2NEE3Cis6MTA5NzMwMDBGMjZBRDIxOEQwNjRGMDg4MDEzOEYwODBGMDg4QzA0NjEwCis6MTA5NzQwMDA4ODgxMjQ0OTAwMjgzOUQxNEY4MDM3RTAwMDJFMzhEOTRDCis6MTA5NzUwMDBBQjg5QjM0MjMwRDNBQjg4MDAyQjJDRDA1Mzg5MDEzMzczCis6MTA5NzYwMDA1MzgxMkExQ0FENkE1ODIzMDEzRTczNDNFRDE4QUU2ODNECis6MTA5NzcwMDAzNjA2MzYwRTAzMkUwMkQwQ0U4OTAxMzZDRTgxQTg2MDgxCis6MTA5NzgwMDA5NTZBRUQxOEE4NjM5NTZBRUQxOEU4NjM5NTZBRUQxODc3Cis6MTA5NzkwMDAyODY0OTU2QUVEMTg2ODY0OTU2QUVEMThBODY0OTU2QTVFCis6MTA5N0EwMDBFQjE4RDg2NDkwODgwMTM4OTA4MDkwODhDMDQ2NDg4MTMyCis6MTA5N0IwMDAwMDI4MDNEMTAxRTAwNEUwMDNFMDE3ODAyMDFDRjBCQzg2Cis6MTA5N0MwMDA3MDQ3Q0E4OTAxMzJDQTgxRjlFNzAwMDBGRkZGMDAwMDMzCis6MTA5N0QwMDAwQzJCMDA4MDRDMkEwMDgwMDBCNTAwMjE0MTYwMTA0OTBDCis6MTA5N0UwMDA0QTY4MDAyQTEwRDFDQTY4MDAyQTA0RDBDQTFEMTkzMjVBCis6MTA5N0YwMDAxMjc5MDAyQTA4RDA0QTY5MDAyQTBCRDE4ODYxNDg2MTkxCis6MTA5ODAwMDAwMEYwMTBGODA4QkMxODQ3NEE2OTAwMkEwMkQxODg2MUE0Cis6MTA5ODEwMDA0ODYxRjdFNzhBNjlDMDQ2NTA2MDg4NjFGMkU3MDAwMDU2Cis6MTA5ODIwMDA2QzA2MDA4MEIwQjUyQTQ4NDA2OTAwMjg0Q0QwMDgyMjU4Cis6MTA5ODMwMDBDMTY4MEE0MDAwMjcyNzRCRDkxREI5MzEwMDJBMTFEMDMxCis6MTA5ODQwMDAwNDIyMjU0Q0MwNDYwQzYxMjQ0Q0MwNDY0QzYyMjQ0QzdBCis6MTA5ODUwMDBDMDQ2OEM2MjIzNENDMDQ2Q0M2MjIzNENDMDQ2MEM2MzhECis6MTA5ODYwMDA0RjYzMTJFMDA1MjIyMTRDQzA0NjBDNjEyMDRDQzA0NkRCCis6MTA5ODcwMDA0QzYyMjA0Q0MwNDY4QzYyMUY0Q0MwNDZDQzYyMUY0Q0QwCis6MTA5ODgwMDBDMDQ2MEM2MzFFNENDMDQ2NEM2MzQwMjRDQzgyNEY4M0MwCis6MTA5ODkwMDAxQzRGMDAyMTAwMkEwQ0Q5OEMwMDA1MTk2RDZBN0Q0MEVGCis6MTA5OEEwMDBFNDE4RkYzNDAxMzQ2NTYyMDEzMTkxNDJGNEQzMTAyOTg4Cis6MTA5OEIwMDAwN0QyOEEwMEQyMThGRjMyMDEzMjU3NjIwMTMxMTAyOUQzCis6MTA5OEMwMDBGN0QzMTE0OTAwRjAyMkY4QjBCQzA4QkMxODQ3MDAwMERCCis6MTA5OEQwMDA2QzA2MDA4MEFDQUIyMDQwMjgwMTQwMDAwMTIzNDU2N0E2Cis6MTA5OEUwMDA4OUFCQ0RFRkZFRENCQTk4NzY1NDMyMTAyMDAxNDAwMEVGCis6MTA5OEYwMDA2NzQ1MjMwMUVGQ0RBQjg5OThCQURDRkUxMDMyNTQ3NjcwCis6MTA5OTAwMDBDM0QyRTFGMDM2MzYzNjM2MzA4MDIwNDBCMEI1MEYxQzc5Cis6MTA5OTEwMDAxNTRERTkxREM5MzExNTRDMjMxQzE1NEEwMDIwRkNGN0QzCis6MTA5OTIwMDA0NEZCRTkxREZGMzExRTMxMjMxQzBEMUMxMTRBMDEyMDhGCis6MTA5OTMwMDBGQ0Y3M0JGQjI5MUMyMzFDMEU0QTAwMjBGQ0Y3MzVGQkRGCis6MTA5OTQwMDAzOTFDMjMxQzBDNEEwMTIwRkNGNzJGRkIwMDIxMEI0ODdCCis6MTA5OTUwMDBDMjFEMTkzMjUxNzEwMTIxRkYzMDAxMzA0MTYyMDgxQ0QyCis6MTA5OTYwMDBCMEJDMDhCQzE4NDcwMDAwQUNBQjIwNDA3NTA4RkZGRjM2Cis6MTA5OTcwMDAyODAwMDMwMDQwMDAwMjAwMTQwMDA3MDA2QzA2MDA4MDZECis6MTA5OTgwMDBGMEI1Mzc0QTUwNjkwMTIzOUIwNzA4MzAxODQzMDA2ODM3Cis6MTA5OTkwMDAwMTA2MDkwRTMzNEIwMTI5NDlEMTFGNjgxOTFDMzI0QkFFCis6MTA5OUEwMDA5RjQyMDREMUZGRjczRUZGRjBCQzA4QkMxODQ3MDAyM0RDCis6MTA5OUIwMDA5RjAwQ0M1OTU1NjlFRjE5M0M2MTAxMzMwNTJCRjdEMzUyCis6MTA5OUMwMDAwMDBBMDAwMjAyMjMxODQzNTM2OUMwNDY5ODYwNTA2OTk4Cis6MTA5OUQwMDAwODIzQzI2ODEzNDAyNTRGRkExREI5MzIwMDJCMDJEMDZDCis6MTA5OUUwMDAwNDIzMjM0QzAxRTAwNTIzMjI0Q0MwNDYxNDYxNDAyNDhCCis6MTA5OUYwMDBENDgyMDAyNDU0ODMyMDRDMDAyMjAwMkIwQ0Q5OTUwMEUzCis6MTA5QTAwMDA0NjE5NzY2QTY2NDBFRDE5RkYzNTAxMzU2RTYyMDEzMkZFCis6MTA5QTEwMDA5QTQyRjREMzEwMkEwN0QyOTMwMERCMTlGRjMzMDEzM0EzCis6MTA5QTIwMDA1QzYyMDEzMjEwMkFGN0QzRkZGNzcwRkZCQ0U3MDAyMTE4Cis6MTA5QTMwMDA4RjAwREM1OTU1NjlFRjE5N0M2MjAxMzEwNTI5RjdEMzk0Cis6MTA5QTQwMDAwMDBBMDAwMjAzMjMxODQzNTE2OUMwNDY4ODYwNTA2OTI4Cis6MTA5QTUwMDA0MDY4QzA0NjUwNjEwOTQ4RkNGN0E0RkFBNEU3MDAwMDNBCis6MTA5QTYwMDA2QzA2MDA4MDMwODAyMDQwNjc0NTIzMDFBQ0FCMjA0MDZECis6MTA5QTcwMDAyODAxNDAwMDIwMDE0MDAwNUM1QzVDNUMxMTMxRkZGRjZDCis6MTA5QTgwMDBGMEI1MDcxQzNCNDgzQzRDMDgyMTIwNjBBMTgwMDAyMDE5Cis6MTA5QTkwMDAyMDgxRTE4MDYwODEzOTQ4QzA0NkUwNjAzODQ4QzA0Njk2Cis6MTA5QUEwMDAyMDYxMzg0OEMwNDY2MDYxMzc0OEMwNDZBMDYxMzc0OEU5Cis6MTA5QUIwMDBDMDQ2RTA2MTM2NDhDMDQ2MjA2MjM2NDhDMDQ2NjA2MjEzCis6MTA5QUMwMDAzNTQ4QzA0NkEwNjIzNTQ4QzA0NkUwNjIzNDQ4QzA0NkNBCis6MTA5QUQwMDAyMDYzMzQ0OEMwNDY2MDYzMzM0OEMwNDZBMDYzMzM0OEJGCis6MTA5QUUwMDBDMDQ2RTA2MzMyNDhDMDQ2MjA2NDMyNDhDMDQ2NjA2NEU1Cis6MTA5QUYwMDAzMTQ4QzA0NkEwNjQzMTQ4QzA0NkUwNjQzMDQ4QzA0NkEyCis6MTA5QjAwMDAyMDY1MzA0OUM4NjgwMjA0ODk2OTRBNDBFMzFENzkzM0Y5Cis6MTA5QjEwMDAwOTA0Qzk0M0MwNDM0ODQwRTExREI5MzFEQTYzMDg2MDE0Cis6MTA5QjIwMDAyOTREMjExQzJCMUMyOTRBMDAyMEZDRjczRUZBMjg0QTBCCis6MTA5QjMwMDBFMTFEQjUzMTAxMjAyQjFDMEUxQ0ZDRjczNkZBMjQ0QTFFCis6MTA5QjQwMDAwMDIwMzExQzJCMUNGQ0Y3MzBGQUUxMUQ0RDMxMkIxQzgxCis6MTA5QjUwMDAyMDRBMDEyMEZDRjcyOUZBRTAxRDVEMzAwMTY4MDAyOTQ4Cis6MTA5QjYwMDBGQ0QwNjA2REMwNDYzODY1MjA2RUMwNDY3ODY1RjBCQzlDCis6MTA5QjcwMDAwOEJDMTg0NzgwMDAwODAwOENCOTIwNDA4MTgxNDhCRDhFCis6MTA5QjgwMDA3OTU2MjM4QzkzMEM4Mjk1MUQwRTEyQ0Y5QjNCQzBFOTE2Cis6MTA5QjkwMDBFNjU1N0M4Mjk5RjY3ODAyRDFENzI1NzM3MjhDMzMxMDAyCis6MTA5QkEwMDBGNzAzRjE0MjZDOUI0QUE3ODI4RTIzQTk5MEIxODI4RTYzCis6MTA5QkIwMDBEQzNGRkIyOTAwNjIyMjQ1ODgyQkYxODUxMjYxRDE3M0JECis6MTA5QkMwMDA2RUIxMTExNjA4ODMyMDQwNzUwOEZGRkY1NDAwMDMwMDkyCis6MTA5QkQwMDAwODAwMDIwMDE0MDAwMzAwODBCNTBGMUMzOTFDMDBGMEJGCis6MTA5QkUwMDAzM0Y4MzgxQ0ZGRjc0Q0ZGMDM0ODAxODkwMTMxMDE4MTJDCis6MTA5QkYwMDA4MEJDMDhCQzE4NDcwMDAwMEMyQjAwODA5MEI1MDQxQ0VBCis6MTA5QzAwMDAwRjFDMjAxQzM5MUMwMEYwMUZGOEUwNjgwMTBFRkYyMjE5Cis6MTA5QzEwMDAxMjA0MDI0MDEyMEExMTQzRkYyMjEyMDIwMjQwMTIwMkYxCis6MTA5QzIwMDAxMTQzMDAwNjA4NDMzODY1MjA2OUMwNDY3ODY1NjA2OUJECis6MTA5QzMwMDBDMDQ2Qjg2NTAzNDgwMTg5MDEzMTAxODE5MEJDMDhCQzY4Cis6MTA5QzQwMDAxODQ3MDAwMDBDMkIwMDgwOTBCNTAwMjI5MzAwMUYxOENECis6MTA5QzUwMDBCRjY5NUIxODVGNjIwMTMyMDUyQUY3RDMwNzdBRkIwOEY4Cis6MTA5QzYwMDAwM0QzMDAyMzkyMDA1MjE4MTM2MjA3NkJDMDQ2OEY2MzIwCis6MTA5QzcwMDBDNzZBQzA0NkNGNjM4NzZCQzA0NjBGNjQ0NzZCQzA0NjU4Cis6MTA5QzgwMDA0RjY0MDc2Q0MwNDY4RjY0QzI2QkMwNDZDQTY0QzI4ODBBCis6MTA5QzkwMDBDMDQ2MEE4MDgyN0ExMjA2MDM3QTFCMDQxQTQzQzM4OERDCis6MTA5Q0EwMDAxQjAyMUE0MzQzN0FEQjA3MUE0MzhBNjAxNzFDODM3QTI0Cis6MTA5Q0IwMDA1QTA4MDVEMzE0MjIxQzFDQTMwODAyRDIxNTIyMDBFMDY2Cis6MTA5Q0MwMDAwMDIyMDA3QTQzMDgxMEQzQzAwODAyRDM4ODIwMTA0MzMyCis6MTA5Q0QwMDAwMUUwODAyMDEwNDMzQTBBMTIwMjAxMjMxQTQzQzg2MEFGCis6MTA5Q0UwMDA4QTYwMDgxQ0ZGRjc3OEZEMDVFMDM4MEEwMDAyMDMyM0FDCis6MTA5Q0YwMDAxODQzODg2MENBNjAwMzQ4MDE4OTAxMzEwMTgxOTBCQzIyCis6MTA5RDAwMDAwOEJDMTg0NzBDMkIwMDgwRjBCNDAyNkQxNDRDMTUxQ0Q1Cis6MTA5RDEwMDBFNzY5QkQ0MDEzMUMyNjZBRjM0MDVENDAyRTFDNDU2RDZCCis6MTA5RDIwMDBCRDQwNkU0MDJCMUMzNTFDRkQ0MDJGMUNCQjAwNjU2QURFCis6MTA5RDMwMDBFQjU4MDAyQjA4RDAyMzY5MDEzNzlGNDIwMEQzMDAyNzNFCis6MTA5RDQwMDBCRTAwQUU1OTAwMkVGN0QxQTQ2OUEyNDAxMTQzMDU0QkM1Cis6MTA5RDUwMDAxOTQzQkEwMEE5NTA0MDMwODc4M0YwQkM3MDQ3MDAwMDE3Cis6MTA5RDYwMDA0QzJBMDA4MDAwMDAwMDgwODBCNDAwMjIwMDIzMDAyOURCCis6MTA5RDcwMDAwNUQ5MDc3ODdBNDAwMTMwMDEzMzhCNDJGOUQzRDA0M0JCCis6MTA5RDgwMDAwMDA2MDAwRTgwQkM3MDQ3RjBCNTA3MUMwMDI0RkYyNkJCCis6MTA5RDkwMDAwOTM2MjAxQzAwRjA5QUY4MDBGMEI4RjkwNTFDMDBGMDE0Cis6MTA5REEwMDBDN0ZBM0Q3MDI4MUMwMTM3MDEzNEI0NDJGMUQzRjBCQzJFCis6MTA5REIwMDAwOEJDMTg0NzgwQjUwMEYwOTNGODAwRjBBN0Y5MDcxQzFECis6MTA5REMwMDAwMEYwQjZGQTM4MEFGNkQzODBCQzA4QkMxODQ3RjNCNUUxCis6MTA5REQwMDA4MkIwMDI5ODQxMDI1MzIwMDBGMDY0RjgwMEYwQThGQTIzCis6MTA5REUwMDBGRkY3RThGRjAwMjQwMDIwMDE5MDJFMjAwMDkwMDAyNUJFCis6MTA5REYwMDAwMDI3MDI5ODAxMjgwNEQxMDA5ODg0NDIwMUQzMDAyNjRDCis6MTA5RTAwMDAwOUUwMDE5ODQxMUMwMTkxMDBGMDYwRjgwMEYwN0VGOTMyCis6MTA5RTEwMDAwNjFDMDBGMDhERkFGODAwODY0MDM1NDMwMTM0MDEzNzA2Cis6MTA5RTIwMDAwNDJGRTZEMzAzOTkyMEMxMDM5MUZGMjMwOTMzOUM0MkY5Cis6MTA5RTMwMDBEREQzMDRCMEYwQkMwOEJDMTg0N0YwQjUwNDFDMEYxQ0ZGCis6MTA5RTQwMDAwMTJDMkFEMDE2NDhDMDZGNDAyMzAxNjgxOTQzMDE2MEQ1Cis6MTA5RTUwMDAwMDI2MjBDRkIxMDA4NDIwMDBGMDI0RjgyODFDMDBGMDU4Cis6MTA5RTYwMDBERkY5MjgwQTAwRjBEQ0Y5MjgwQzAwRjBEOUY5MjgwRUY3Cis6MTA5RTcwMDAwMEYwRDZGOTAwRjA1Q0ZBMDEzNjQyMkVFOUQzNjEwMjE3Cis6MTA5RTgwMDA4MzIwMDBGMDBGRjgwMEYwNTNGQUZGRjc5M0ZGMDQ0ODI3Cis6MTA5RTkwMDBDMDZGNDAyMzAxNjg5OTQzMDE2MEYwQkMwOEJDMTg0N0JCCis6MTA5RUEwMDA2ODBFMDA4MDkwQjUwNDFDMEYxQzAwRjA1OUZBMjAxQ0FECis6MTA5RUIwMDAwMEYwQjZGOTM4MEMwMEYwQjNGOTM4MEEwMEYwQjBGOTQ4Cis6MTA5RUMwMDAzODFDMDBGMEFERjk5MEJDMDhCQzE4NDcwMEI1MDExQzY3Cis6MTA5RUQwMDA1NDIwRkZGN0U3RkYwMDIwMDBGMEEyRjkwOEJDMTg0NzY0Cis6MTA5RUUwMDAwMEI1MDBGMDNERkE1NzIwMDBGMDlBRjkwOEJDMTg0Nzc5Cis6MTA5RUYwMDA5MEI1MDg0RkZBNkYyMDIzMTQ2ODlDNDMxNDYwMjMxQzBDCis6MTA5RjAwMDBGRkY3NjVGRkY4NkYyMDIzMDE2ODE5NDMwMTYwOTBCQ0RCCis6MTA5RjEwMDAwOEJDMTg0NzY4MEUwMDgwOTBCNTA4NEZGQTZGMjAyM0UwCis6MTA5RjIwMDAxNDY4OUM0MzE0NjAyMzFDRkZGNzg3RkZGODZGMjAyM0ZECis6MTA5RjMwMDAwMTY4MTk0MzAxNjA5MEJDMDhCQzE4NDc2ODBFMDA4MDk2Cis6MTA5RjQwMDBGMEI1MDQxQzBGMUMxODRFRjA2RjIwMjMwMTY4OTk0M0Q0Cis6MTA5RjUwMDAwMTYwNjEwMjUzMjBGRkY3QTVGRjAwRjBFOUY5RkZGNzY4Cis6MTA5RjYwMDAyOUZGRjgxRDA1MzAwMTJDMDNEMTIyMkYwMUQzMDAyNzMyCis6MTA5RjcwMDAwRkUwNDQxQ0ZGRjdBQUZGMDBGMEM4RjgwNzFDMDBGMDMwCis6MTA5RjgwMDBEN0Y5MjAxQ0ZGRjdBMkZGMDBGMEMwRjgwNTFDMDBGMDc1Cis6MTA5RjkwMDBDRkY5RjA2RjIwMjMwMTY4MTk0MzAxNjAyODAyMzg0MzhDCis6MTA5RkEwMDBGMEJDMDhCQzE4NDcwMDAwNjgwRTAwODBGMEI1QzJCMEQ1Cis6MTA5RkIwMDAxNDFDMEQxQzA3MUMwMTJGMkZEMDc5MDIxOTRFRjA2RkI1Cis6MTA5RkMwMDAyMDIzMDI2ODlBNDMwMjYwNTMyMEZGRjc2QkZGMDBGMEUyCis6MTA5RkQwMDBBRkY5RkZGN0VGRkU2ODQ2RkZGN0Q2RkU2QTQ2RTgxREM5Cis6MTA5RkUwMDAwNTMwMTQ1NDIxMEE2ODQ0NDE3MDY4NDYwMDk5MEMzMEM5Cis6MTA5RkYwMDBGRkY3QkFGRTAyQUIxODcwMDAyMDU4NzA2ODQ2MEMyMUJCCis6MTBBMDAwMDBGRkY3QjJGRTAyQUI1ODcwNjk0NjM4MUNGRkY3MTVGRjI4Cis6MTBBMDEwMDBGMDZGMjAyMzAxNjgxOTQzMDE2MDQyQjBGMEJDMDhCQzE2Cis6MTBBMDIwMDAxODQ3MDAwMDY4MEUwMDgwRkZCNUMyQjAwNzFDMDEyRjYyCis6MTBBMDMwMDAwMUQxMDEyMDM2RTA2QjQ2MDAyMEM0NDMxMEMzMDEzMDNCCis6MTBBMDQwMDA0MjI4RkJEMzY4NDYwQzMwMDMxQzAwMjQwMDJBMEFEOTlFCis6MTBBMDUwMDAwRTg4QzA0NjA2NzAwRTg4MzYxMjQ2NzAwMjMwMDIzMUY1Cis6MTBBMDYwMDAwMjM0OTQ0MkY0RDMwMDkyMTgxQzExMUNGRkY3N0NGRUJBCis6MTBBMDcwMDAwNDFDMDAyMDAxOTAwMkFCMUM3MDU4NzA5RDcwNjg0NjUzCis6MTBBMDgwMDAwQzIxRkZGNzcxRkUwMkFCNTg3MDQ1OUIxRDA2MkQwRThCCis6MTBBMDkwMDBBQzQyMDNEMTY5NDYzODFDRkZGNzNFRkYwMTIwQUM0MkI5Cis6MTBBMEEwMDAwMEQxMDAyMDQ2QjBGMEJDMDhCQzE4NDdCMEI1QzJCMDIzCis6MTBBMEIwMDAwRjFDNDEwMjE0NENFMDZGMjAyMzAyNjg5QTQzMDI2MDk3Cis6MTBBMEMwMDA1MzIwRkZGN0VGRkUwMEYwMzNGOUZGRjc3M0ZFNjg0NjA5Cis6MTBBMEQwMDBGRkY3NUFGRUUwNkYyMDIzMDE2ODE5NDMwMkFEMDE2MENCCis6MTBBMEUwMDA2RDc4MDAyNDAyQUI1QzcwNjg0NjBDMjFGRkY3M0NGRUUzCis6MTBBMEYwMDBBODQyMDJEMTAwOTg4NzQyMDFEMzIwMUMwMEUwMDEyMDMxCis6MTBBMTAwMDA0MkIwQjBCQzA4QkMxODQ3NjgwRTAwODBGQzQ2NjA0N0VGCis6MTBBMTEwMDAwMDAwQTBFM0I0MjI5RkU1QjQzMjlGRTUwMTEwQTBFMzY0Cis6MTBBMTIwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTM3Cis6MTBBMTMwMDAwMDEwODJFNTAwMTA5M0U1ODEwMzgwRTEwMTEwQTBFM0E3Cis6MTBBMTQwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTE3Cis6MTBBMTUwMDAwMDEwODJFNTAwMTA5M0U1MDEwMzgwRTEwMTEwQTBFMzA3Cis6MTBBMTYwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNUY3Cis6MTBBMTcwMDAwMDEwODJFNTAwMTA5M0U1ODEwMjgwRTEwMTEwQTBFMzY4Cis6MTBBMTgwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNUQ3Cis6MTBBMTkwMDAwMDEwODJFNTAwMTA5M0U1MDEwMjgwRTEwMTEwQTBFM0M4Cis6MTBBMUEwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNUI3Cis6MTBBMUIwMDAwMDEwODJFNTAwMTA5M0U1ODEwMTgwRTEwMTEwQTBFMzI5Cis6MTBBMUMwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTk3Cis6MTBBMUQwMDAwMDEwODJFNTAwMTA5M0U1MDEwMTgwRTEwMTEwQTBFMzg5Cis6MTBBMUUwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTc3Cis6MTBBMUYwMDAwMDEwODJFNTAwMTA5M0U1ODEwMDgwRTEwMTEwQTBFM0VBCis6MTBBMjAwMDAwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTMwMDEwODJFNTU2Cis6MTBBMjEwMDAwMDEwODJFNTAwMTA5M0U1MDEwMDgwRTExRUZGMkZFMUIwCis6MTBBMjIwMDBGQzQ2NjA0N0E0MjE5RkU1QTgzMTlGRTVBMDEzQTBFMTZCCis6MTBBMjMwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTI0Cis6MTBBMjQwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyMDEzQTBFMUQ5Cis6MTBBMjUwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTA0Cis6MTBBMjYwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBMDEyQTBFMTNBCis6MTBBMjcwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNUU0Cis6MTBBMjgwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyMDEyQTBFMTlBCis6MTBBMjkwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNUM0Cis6MTBBMkEwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBMDExQTBFMUZCCis6MTBBMkIwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNUE0Cis6MTBBMkMwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyMDExQTBFMTVCCis6MTBBMkQwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTg0Cis6MTBBMkUwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBMDEwQTBFMUJDCis6MTBBMkYwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTY0Cis6MTBBMzAwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUwMDEwQTBFMTNCCis6MTBBMzEwMDAwMDEwODNFNTAxMTBBMEUzMDAxMDgyRTUwMDEwODJFNTQzCis6MTBBMzIwMDAwMDEwQTBFMzAwMTA4MkU1MDAxMDgyRTUxRUZGMkZFMTdGCis6MTBBMzMwMDBGQzQ2NjA0N0EwMzA5RkU1MDExMEEwRTMwMDEwODNFNUQ0Cis6MTBBMzQwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNTJECis6MTBBMzUwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUxRUZGMkZFMTY4Cis6MTBBMzYwMDBGQzQ2NjA0NzcwMzA5RkU1MDAxMEEwRTMwMDEwODNFNUQ1Cis6MTBBMzcwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNUZECis6MTBBMzgwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUxRUZGMkZFMTM4Cis6MTBBMzkwMDBGQzQ2NjA0NzM0MjA5RkU1M0MzMDlGRTUwMDEwQTBFMzc5Cis6MTBBM0EwMDAwMDEwODJFNTAwMTA4MkU1MDExMEEwRTMwMDEwODNFNUIzCis6MTBBM0IwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUwMDEwODNFNUJECis6MTBBM0MwMDAwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUxRUZGMkZFMUY4Cis6MTBBM0QwMDBGODAwMTg0MDA0MDExODQwMDAwMTE4NDBGQzAwMTg0MDIzCis6MTBBM0UwMDA4MEI1MDBGMDBDRjgwMDI3MzgxQzAwRjA0N0Y4NzgxQzA2Cis6MTBBM0YwMDAwNzA0M0YwQzBDMkZGN0REODBCQzA4QkMxODQ3MUQ0ODM0Cis6MTBBNDAwMDAwMjY4MUQ0OThCNjlEMjE4MDI2MDAyNjY4QTZBNDM2ODM1Cis6MTBBNDEwMDA5QjE4NDM2MDkzNDIwMkQyODI2ODAxMzI4MjYwQzI2ODE0Cis6MTBBNDIwMDAwQjZBRDIxOEMyNjA0MjY5Q0I2OEQyMTg0MjYxQzI2OTE1Cis6MTBBNDMwMDA4QjY4RDIxOEMyNjEwMjY5MEI2OUQyMTgwMjYxODI2OTA1Cis6MTBBNDQwMDAwQjY4RDIxODgyNjEwMjZCQ0I2OUQyMTgwMjYzNEE2QTI4Cis6MTBBNDUwMDA0MzZCOUIxODQzNjM5MzQyMDJEMjgyNkIwMTMyODI2MzQ3Cis6MTBBNDYwMDBDMjZCNEI2OUQyMThDMjYzMDI2Q0M5NkE1MTE4MDE2NDhECis6MTBBNDcwMDA3MDQ3MDAwMEE0MkEwMDgwMDAwODE0NDA4OEI1Njk0NjhGCis6MTBBNDgwMDAwMEYwMTdGODgxMDgwQUQwMDAyMDAwMjkwN0Q5MDAyMjFGCis6MTBBNDkwMDA4MzAwMDA5RkMwNDZGQTUwMDEzMDg4NDJGOEQzODhCQzQwCis6MTBBNEEwMDAwOEJDMTg0NzAwQjUwMEYwMDRGODAwMDQwMDBDMDhCQzE0Cis6MTBBNEIwMDAxODQ3MDAyMjAwMjgwQUQwMDEyODBBRDAwMjI4MENEMDEwCis6MTBBNEMwMDAwMzI4MDJEMTA3NDgxQzIyMDg2MDEwMUM3MDQ3MDY0ODY4Cis6MTBBNEQwMDAwNEUwMDY0ODUwMjIwODYwRjdFNzA1NDg2ODIyMDg2MDUzCis6MTBBNEUwMDBGM0U3MDAwMDA4ODMyMDQwQTQyQTAwODAwQzJCMDA4MEEyCis6MTBBNEYwMDBBMDgyMjA0MDgwQjQwMzIyQzI4MDE1NEFDMDQ2ODI2MEY4Cis6MTBBNTAwMDAxNDRBMTI4ODAxMzJDMjYwMDAyMDEzNEExMzVDQzA0NjBDCis6MTBBNTEwMDAwQjcwMDEzMDAxMzEwODI4RjhEMzIwMjIwQTcwMDEzMTc0Cis6MTBBNTIwMDAwMDIwMEU0QjFGNUNDMDQ2MEY3MDAxMzAwMTMxMDgyODFGCis6MTBBNTMwMDBGOEQzMEE3MDAxMzEwMDIwMDk0QTEzNUNDMDQ2MEI3MDQxCis6MTBBNTQwMDAwMTMwMDEzMTA4MjhGOEQzMDAyMDA4NzA4MEJDNzA0NzIyCis6MTBBNTUwMDAwODEwMDAwMzY4MEUwMDgwN0MwNDAwODA4NTA0MDA4MEUxCis6MTBBNTYwMDA4RTA0MDA4MDAwQjUwMTIzMEE0OEMxMUQ4OTMxNEI3MDVCCis6MTBBNTcwMDAwMDIyMEE3MDY0MjE4MDMwQzE4MjAxODM0MzgzN0QyMURGCis6MTBBNTgwMDBDOTAwODE4M0MyODMwNDQ4MDEyMjAwMjEwMEYwOEVGQkIwCis6MTBBNTkwMDAwOEJDMTg0NzY4MEUwMDgwQjUyMkZGRkYwMEI1RkZGNzIyCis6MTBBNUEwMDBFMUZGMTM0ODAyMjIwMDIxMDBGMDgwRkIwMTIzRDg0MjgyCis6MTBBNUIwMDAwQUQxMTA0OEMxMUQzOTMxQ0E4ODAxMzJDQTgwODE3OTU3Cis6MTBBNUMwMDAwMTMxODE3MUZERjc3MEY5MEI0OEMwNjgwMTI4MDVEMTkwCis6MTBBNUQwMDAwQTQ4N0QyMkQyMDAwMDIxMDBGMDY4RkIwODQ4RkJGNzAyCis6MTBBNUUwMDBFMUZDMDg0ODI4MjIwMDIxMDBGMDYwRkIwOEJDMTg0NzY1Cis6MTBBNUYwMDA3OTIxRkZGRkEwODIyMDQwNjgwRTAwODBBNTdCMjE0MENBCis6MTBBNjAwMDA5NTJDRkZGRjU5MDNGRkZGMDBCNTEwMjAwRjQ5QzA0NkVFCis6MTBBNjEwMDAwODYwMEY0QTBGNDg2NDIxRkJGN0M2RkMwRTQ4MDEyMjcwCis6MTBBNjIwMDAxMjA0MDE2ODBBNDAwODIxMDAyQTA1RDEwMjY4MTIwQ0IwCis6MTBBNjMwMDAwN0QxMDA2ODgwMEEwNEQzMDg0OEMwNDZDMTYwMDhCQzNFCis6MTBBNjQwMDAxODQ3MDc0OEMwNDYwMTY0RjlFNzAwMDAwMDAwMDBCMDYxCis6MTBBNjUwMDBBNTU1RkZGRjdDMjkwMDgwMDAwMDEwNDA0MDAxMTgwMDM0Cis6MTBBNjYwMDAwMDAwMDA4MEY4QjUyNzQ4MDEyMjEyMDQwMTY4MEE0MDYyCis6MTBBNjcwMDAwNzIxMDAyQTA1RDEwMjY4MTIwQzA2RDEwMDY4ODAwQTYxCis6MTBBNjgwMDAwM0QzMjE0OEMwNDZDMTYwMDJFMDIwNDhDMDQ2MDE2NEFGCis6MTBBNjkwMDAxRjQ4RkJGNzg3RkMxRjQ4QzE2QkZGMjlGQ0QxODE2QjZBCis6MTBBNkEwMDA0MjZCMTYxQzBGMUMxQzRDMTAyMzYwNjkxODQzNjA2MTIwCis6MTBBNkIwMDBBMTY5OTk0MzFEMDRBMTYxRTg2MEEwNjlDMDQ2Mjg2MUIxCis6MTBBNkMwMDAxNjRBMTc0OTY0MjBGQkY3NkZGQzE2NEFDMDQ2MDA5MkYxCis6MTBBNkQwMDAxNTRCMDAyMDM5MUMzMjFDRkJGNzZFRkMxMzQ4QzE2ODc3Cis6MTBBNkUwMDAwODI5RkNEMTEyNDhGQkY3NURGQzEwMjM2MDY5OTg0M0YwCis6MTBBNkYwMDA2MDYxRTg2MDAxMjBFMzIzMUIwMUUxMThDODcxRjhCQzI4Cis6MTBBNzAwMDAwOEJDMTg0NzAwMDAxMDQwNDAwMTE4MDAwMDAwMDA4MEZECis6MTBBNzEwMDAwNDAyRkZGRjAwMDExODQwNjgwRTAwODAyMDU1RkZGRjczCis6MTBBNzIwMDBCNUI2MjE0MDY0MDAzMDAyNDQ4MDIwNDA0MDAxMTg0MDBBCis6MTBBNzMwMDBGNDAxRkZGRjAwQjVGREY3MDFGRjA2NDhGQkY3MzJGQzBGCis6MTBBNzQwMDBGREY3RDZGRUZFRjcwNEY4RkVGNzE2RjhGRUY3MjRGODNDCis6MTBBNzUwMDAwOEJDMTg0NzkxMDNGRkZGOTBCNUZERjc2QkZDMzQ0RjIxCis6MTBBNzYwMDAwMDI0Rjk2OEY4MUQ3OTMwMDEyOTBGRDEzMTQ5QzA0NjFDCis6MTBBNzcwMDBGOTY3MzE0OUMwNDYwMTYwMzA0OUMwNDYwQzYwNEM2MDAxCis6MTBBNzgwMDA4QzYwQ0M2MDBDNjE0QzYxOEM2MTA0RTBGOTFEN0QzMTAyCis6MTBBNzkwMDBGOTY3MTJDMDA4MzgwMDY4NjAyMzAxNjgxOTQzMDE2MDM2Cis6MTBBN0EwMDBGODZGMjAyMzAxNjgxOTQzMDE2MEY4NkY0MDIzMDE2OEE2Cis6MTBBN0IwMDA5OTQzMDE2MDAwRjA1NEY4RkRGNzRFRkMwMEYwNUVGOTlCCis6MTBBN0MwMDBGREY3NzNGOEZGRjcwQ0ZFRkRGNzJFRkVGREY3QjZGRDYzCis6MTBBN0QwMDBGREY3QzJGRUZERjc1NEZERkRGNzBBRkRGREY3OTRGRDAwCis6MTBBN0UwMDAwMEYwMUFGQUZERjc5Q0ZGRkRGNzBBRkZGREY3RDJGRTE1Cis6MTBBN0YwMDBGREY3M0NGQ0ZCRjdEQ0ZBRkZGNzlDRkY3MTIzNUIwMUU0Cis6MTBBODAwMDBGODE4MDQ3MjQ0NzIwNzIzNUIwMkY4MTgwNDYzRjg2OEFFCis6MTBBODEwMDAwMTI4MDJEMUE4MjBGRUY3QjFGRDA5NDhDMDQ2NDQ2MkQ0Cis6MTBBODIwMDAwMEYwMThGQTA3NDhGQkY3QkRGQjkwQkMwOEJDMTg0N0JFCis6MTBBODMwMDA2ODBFMDA4MDAwMDExMTQwMDQwMTExNDAwMDAxMTEwMDY4Cis6MTBBODQwMDBDMDAwMTgwMDE1OEYyMTQwMDBCNTA0NDhGQkY3QUFGQjkzCis6MTBBODUwMDBGREY3NUVGRkZERjcyNEZDMDhCQzE4NDcxNTk5MjE0MDYxCis6MTBBODYwMDBGQTIxMDM0OEMwNDY0MTYyNDAyMTQxNjI3MDQ3MDAwMDFFCis6MTBBODcwMDBDMDAwMTgwMDA3NDg0MTY5MDc0QjE5NDM0MTYxODI2OUNDCis6MTBBODgwMDA5QTQzODI2MTAxMjIxMjA1RDE2MDgwNjlDMDQ2MTA2MTNECis6MTBBODkwMDA3MDQ3MDAwMDY4MEUwMDgwRkVBRjlBMTAwMEI1MDI0OEI1Cis6MTBBOEEwMDBGQkY3ODBGQjA4QkMxODQ3Qzg1N0ZGRkZGMEI1MjQ0Q0U2Cis6MTBBOEIwMDAwMTIxMDkwNDIwNjgwMTQwMDkyMDIyNEUyMjREMDAyOTZGCis6MTBBOEMwMDAwNUQxMjE2ODA5MEMwNEQxMjE2ODg5MEEwMUQzRjA2MEZGCis6MTBBOEQwMDAwMEUwMjg2NDFENDhGQkY3NjVGQjFENEYxRDQ5ODg2OTkyCis6MTBBOEUwMDAwMTMwODg2MTM4N0EwMDI4MDJEMTc4N0EwMDI4MUZEMDk4Cis6MTBBOEYwMDAxOTQ4RkJGNzU3RkIxOTQ4RkJGNzU0RkIwMDI4RkFEMTFFCis6MTBBOTAwMDAzODdBMDAyODAyRDAxNjQ4RkJGNzRDRkIwMTIxMDkwNEQ1Cis6MTBBOTEwMDAyMDY4MDE0MDE0MjAwMDI5MDVEMTIxNjgwOTBDMDREMUM4Cis6MTBBOTIwMDAyMTY4ODkwQTAxRDNGMDYwMDFFMDI4NjRGRkU3RkVFN0FGCis6MTBBOTMwMDBGRkY3NjVGRDBCNDhGQkY3MzVGQkZGRjdBRkZGQ0RFN0YyCis6MTBBOTQwMDAwMDAwMTA0MDQwMDExODAwMDAwMDAwODAwNDAyRkZGRkRBCis6MTBBOTUwMDA4ODFDMDA4MDA4ODMyMDQwRjQwMUZGRkZCNTA3RkZGRjNCCis6MTBBOTYwMDAwMDAwRkZGRjk5OUYyMTQwMDAyMDA3NEEwMTIxMDkwNUFGCis6MTBBOTcwMDA1MDYxQzg2MEQwNjFDODYxMDMyM0RCMDQwMzRBMDEyMTMwCis6MTBBOTgwMDBEMTYzNTg2MEZDRTcwMDAwNjgwRTAwODBDMDAwMTgwMDJBCis6MTBBOTkwMDA4MEI1QzBCMDAxMjIwMDIxMEEyMEZDRjdEMUZGMDcxQ0JFCis6MTBBOUEwMDBGRjJGMjhEMDY5NDZGRjIyMzgxQzAxMzJGREY3NTRGOUU5Cis6MTBBOUIwMDBGRjIzMDEzMzk4NDIxQkQxMEQ5ODAwMDkxOEQzMzgxQzhFCis6MTBBOUMwMDBGREY3OERGODBFNDkwMTIyMTIwNDA4NjgwMjQwMEQ0ODc3Cis6MTBBOUQwMDAwNUQxMEE2ODEyMEMwNkQxMDk2ODg5MEEwM0QzMEE0OTBECis6MTBBOUUwMDBDMDQ2Qzg2MDAyRTAwOTQ5QzA0NjA4NjRGRkY3QkNGRkUyCis6MTBBOUYwMDAzODFDRkRGNzc0Rjg0MEIwODBCQzA4QkMxODQ3MDAwMDU0Cis6MTBBQTAwMDAwMDAwMTA0MDA3ODAwMDAwNDAwMTE4MDAwMDAwMDA4MDk2Cis6MTBBQTEwMDAwMEI1MTc0OTAxMjIxMjA0MDg2ODAyNDAwNjIwMDAyQUU2Cis6MTBBQTIwMDAwNUQxMEE2ODEyMEMwNkQxMDk2ODg5MEEwM0QzMTE0OUI1Cis6MTBBQTMwMDBDMDQ2Qzg2MDAyRTAxMDQ5QzA0NjA4NjQwMzIwRkVGNzIzCis6MTBBQTQwMDBEM0ZDRkJGNzBERkYwMTIzMTg0M0ZCRjdFN0ZGRkZGN0VDCis6MTBBQTUwMDA4M0ZFRkZGNzlERkZGRkY3MDVGRUZGRjdGNUZFRkZGNzBCCis6MTBBQTYwMDAwOUZGRkZGNzlCRkRGRkY3MjFGRjA4QkMxODQ3MDAwMDE3Cis6MTBBQTcwMDAwMDAwMTA0MDQwMDExODAwMDAwMDAwODBGMEI0NDY0QTc5Cis6MTBBQTgwMDAwMTIxQzkwMzQ1NEQxOTIzREIwMUVDMThBMTYxMjg4ODc4Cis6MTBBQTkwMDA0MDA0NDM0QkMwMTg4NzFBMDQyMEFGNjA0MTRFQzA0NkEzCis6MTBBQUEwMDBCMDYxMDgyMEM4MjM0MzQzQkI0MjIxRDk0MTAwM0Q0RTM5Cis6MTBBQUIwMDBDMDQ2MzE2MUI2NjkyMDIzOUIxQjNBNEVDMDQ2RjM2MTA0Cis6MTBBQUMwMDAxMDNCMzM2MjhCMDBGRjFBNDAwODgxNDIxN0QzQjgyMzMyCis6MTBBQUQwMDA0MzQzQkI0MjA4RDk0MTFFMzI0QkMwNDY5OTgxRDk4MUJDCis6MTBBQUUwMDA0MDAwMDIzODU4NjEwQUUwMDEzMDgxNDJFRkQyMDZFMEFFCis6MTBBQUYwMDAyQzRFQjM2OTAxMzNCMzYxNDAwMDg4NDJEMkQ5MkE0OTUwCis6MTBBQjAwMDAwMDIwQTM2OTlCMDgwN0QwMjg0Qjg3MDBDQjUxQTc2OTc5Cis6MTBBQjEwMDBCRjA4MDEzMDg3NDJGOEQ4MjI0OUMwNDY4QTYyOEM4OTMyCis6MTBBQjIwMDA1ODIwNjA0Mzg3MTgwMDIwMDAyMjAwMkMwQURENTgyMzlCCis6MTBBQjMwMDA0MzQzOEM2QUUzMTgwMTMwMDAwNDAwMEM5QTYwOEI4OTRGCis6MTBBQjQwMDA4MzQyRjREQ0NGNjJDQzg5NjAwMDAwMTk0MDAxQzcxOTUwCis6MTBBQjUwMDAwMDIwMDAyQzBCREQ0MzAwMUIxODVCMDFDQzZBRTMxOEJFCis6MTBBQjYwMDAwMTMwMDAwNDAwMEM5QTYwQ0I4OTgzNDJGM0RDNEY2MjExCis6MTBBQjcwMDAwMDIwMEI2OTAwMkIwN0Q5ODcwMDRCNkFDMDQ2REE1MUM5Cis6MTBBQjgwMDAwQjY5MDEzMDgzNDJGN0Q4NDk2QTgwMDAwODE4MDQzOEZECis6MTBBQjkwMDAyODYxRjBCQzcwNDcwMDAwQjBCRTIxNDA2ODBFMDA4MDA0Cis6MTBBQkEwMDAwMDAwMjA0MDRDMkEwMDgwMDAwMDIwNDAwMEFEREUwMDY0Cis6MTBBQkIwMDAwQTQ4MDEyMzFCMDY0MTY5OTk0MzFBMDk0MTYxRDE2MDgyCis6MTBBQkMwMDAwMDIxQTEyMjUyMDM5MTYxMUIyM0RCMDFDMDE4ODE2MTg2Cis6MTBBQkQwMDAwMTIwMDAwNjU5MDUwODYwNzA0NzAwMDA2ODBFMDA4MERCCis6MTBBQkUwMDA4MEI0MDIxQzBCNDgxQjIzREIwMUMzMTg5QTYxMDEyM0FDCis6MTBBQkYwMDAxQjA2NDI2OTFBNDM0MjYxODc2OTlGNDMwMTIzMUIwNTczCis6MTBBQzAwMDA4NzYxREE2MDgwNjlDMDQ2MTg2MUExMjA0MDAzODE2MUQ0Cis6MTBBQzEwMDA4MEJDNzA0NzY4MEUwMDgwODBCNUZGRjdDOUZGMDAyMDM4Cis6MTBBQzIwMDAwMEYwMjBGODAwMjAwOTQ5MDAyMjAzMDE1RjE4MzMyM0I3Cis6MTBBQzMwMDA5QjAxRkIxODlBNjIwMTMwMEIyOEY2RDMwNDQ4MDEyMkNECis6MTBBQzQwMDAwMDIxMDBGMDMzRjg4MEJDMDhCQzE4NDc2ODBFMDA4MDczCis6MTBBQzUwMDAxRDNFRkZGRjAwQjUwMjQ4MDBGMDA0RjgwOEJDMTg0NzhECis6MTBBQzYwMDBBODYxMDAwMDgwQjQwMTIyMTIwNTBGNEJBMTIxNDkwMzA1Cis6MTBBQzcwMDAwMDI4MEVEMEM4NjExODFDNTk2OTUzMDExOTQzNDE2MTVECis6MTBBQzgwMDA4NzY5OUY0Mzg3NjFEMTYwODA2OUMwNDYxMDYxODBCQzNECis6MTBBQzkwMDA3MDQ3MTgxQzVGNjkwMTIzNUIwNjlGNDM0NzYxRDc2MEJCCis6MTBBQ0EwMDAwMDIwQzg2MUYzRTcwMDAwNjgwRTAwODBCMEI0MDcxQzA0Cis6MTBBQ0IwMDAwMDIwMTc0QzAzMDExRDE5MzMyMzlCMDFFQjE4OUQ2QURCCis6MTBBQ0MwMDBCRDQyMDVEMTFENkI5NTQyMDJEMURCNkE4QjQyMUNEMDdGCis6MTBBQ0QwMDAwMTMwMEIyOEVFRDMwMDIwMDMwMTFEMTkzMzIzOUIwMTAzCis6MTBBQ0UwMDBFQjE4OUI2QTAwMkIwOUQxMDMwMTFDMTkzMzIzOUIwMTJDCis6MTBBQ0YwMDBFMzE4MUE2M0Q5NjI1QTYzOUY2MjAyRTAwMTMwMEIyODlECis6MTBBRDAwMDBFQUQzMEIyODAxRDEwMDIwQzA0M0IwQkM3MDQ3MDAwMDNCCis6MTBBRDEwMDA2ODBFMDA4MDkwQjQwMTFDMDAyMjAxMjAxNjRGMDFFMDUzCis6MTBBRDIwMDAwMDJBMDdEMTAzMDFEQzE5MzMyMzlCMDFFMzE4OUI2OTM3Cis6MTBBRDMwMDA4QjQyMTFEMTAyMDFEMjE5MzMyMzlCMDFEMjE4OTM2QTlECis6MTBBRDQwMDBDMDQ2OTM2MUQzNkFDMDQ2RDM2MTEzNkJDMDQ2MTM2Mjk5Cis6MTBBRDUwMDA1MzZCQzA0NjUzNjIwMTIyMDEzMDBCMjhFMEQzMDc0QkVFCis6MTBBRDYwMDAwMDJBMDJEMTlBNjg4QTQyMDNEMTAwMjE5OTYwOTBCQ0RFCis6MTBBRDcwMDA3MDQ3MDAyMEMwNDNGQUU3NjgwRTAwODBFODFCMDA4MDlGCis6MTBBRDgwMDAwQjI4MTdEQTBDNDkwMTIzNUIwNjhBNjkxMzQzMDEyMjU5Cis6MTBBRDkwMDAxMjA1OEI2MTEzNjEwMDAxNDAxODMzMjM5QjAxQzAxODE5Cis6MTBBREEwMDAwMzZCQzA0NjQzNjM1MzAxODg2OTk4NDM4ODYxMTA2MTBGCis6MTBBREIwMDAwMTIwNzA0NzAwMjBGQ0U3NjgwRTAwODA5MEI0MDg0QTJDCis6MTBBREMwMDBEMDY5MDAyMTA3NEZEMzY5ODM0MjAyRDlGQzFBMjAxOEE5Cis6MTBBREQwMDAwMEUwQzAxQTA5MTgxODFDQjk0MkY0RDk5MEJDNzA0Nzk5Cis6MTBBREUwMDAwMDIwMTQ0MEE4NjEwMDAwOTBCNTA3MUMwMDI0MDAyRjJCCis6MTBBREYwMDAwNEQzRkZGN0UzRkYwMTM0QkM0MkZBRDk5MEJDMDhCQzhFCis6MDRBRTAwMDAxODQ3MDAwMEVGCis6MDAwMDAwMDFGRgorLyogdmVyIDAzLjAwMS4wMDggKi8KKy8qCisgKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKKyAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAorICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQorICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKyAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQorICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgorICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCA0NjYxMDZmLi5jNmFmNjFiIDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtMzUsNyArMzUsNyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQ0hFTFNJT19UMykgKz0gY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbiBcCiAJCQkJICAgY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbiBcCi0JCQkJICAgY3hnYjMvdDNmdy03LjAuMC5iaW4KKwkJCQkgICBjeGdiMy90M2Z3LTcuMS4wLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19EVkJfVFRVU0JfQlVER0VUKSArPSB0dHVzYi1idWRnZXQvZHNwYm9vdGNvZGUuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0UxMDApICs9IGUxMDAvZDEwMW1fdWNvZGUuYmluIGUxMDAvZDEwMXNfdWNvZGUuYmluIFwKIAkJCSAgICAgZTEwMC9kMTAyZV91Y29kZS5iaW4KQEAgLTQ5LDggKzQ5LDEwIEBACiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9jYXB0dXJlLmNzcAogZnctc2hpcHBlZC0kKENPTkZJR19TTkRfWU1GUENJKSArPSB5YW1haGEvZHMxX2N0cmwuZncgeWFtYWhhL2RzMV9kc3AuZncgXAogCQkJCSAgIHlhbWFoYS9kczFlX2N0cmwuZncKK2Z3LXNoaXBwZWQtJChDT05GSUdfVEVIVVRJKSArPSB0ZWh1dGkvYmR4LmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19USUdPTjMpICs9IHRpZ29uL3RnMy5iaW4gdGlnb24vdGczX3Rzby5iaW4gXAogCQkJICAgICAgIHRpZ29uL3RnM190c281LmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19UWVBIT09OKSArPSAzY29tL3R5cGhvb24uYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1VTQl9EQUJVU0IpICs9IGRhYnVzYi9maXJtd2FyZS5mdyBkYWJ1c2IvYml0c3RyZWFtLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19VU0JfRU1JMjYpICs9IGVtaTI2L2xvYWRlci5mdyBlbWkyNi9maXJtd2FyZS5mdyBcCiAJCQkJICBlbWkyNi9iaXRzdHJlYW0uZncKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCA1MjQxMTNmLi4wMGI2ZTNjIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogRmlsZTogY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbi5paGV4CiBGaWxlOiBjeGdiMy90M2NfcHNyYW0tMS4xLjAuYmluLmloZXgKLWZpbGU6IGN4Z2IzL3QzZnctNy4wLjAuYmluLmloZXgKK2ZpbGU6IGN4Z2IzL3QzZnctNy4xLjAuYmluLmloZXgKIAogTGljZW5zZTogR1BMdjIgb3IgT3BlbklCLm9yZyBCU0QgbGljZW5zZSwgbm8gc291cmNlIHZpc2libGUKIApAQCAtNDM1LDMgKzQzNSw2MSBAQAogIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBURUhVVEkgLSBUZWh1dGkgTmV0d29ya3MgMTBHIEV0aGVybmV0CisKK0ZpbGU6IHRlaHV0aS9iZHguYmluCisKK0xpY2VuY2U6CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworIGFjY29tcGFueWluZyBpdC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBUWVBIT09OIC0gM2NyOTkwIHNlcmllcyBUeXBob29uCisKK0ZpbGU6IDNjb20vdHlwaG9vbi5iaW4KKworTGljZW5jZToKKy8qCisgKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgb2YgdGhlIDNjOTkwaW1nLmgKKyAqIG1pY3JvY29kZSBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIDNDb20gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDNDT00gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFBVUkNIQVNFIE9SIFVTRSBPRiBUSEUgM2M5OTBpbWcuaAorICogTUlDUk9DT0RFIFNPRlRXQVJFIFdJTEwgTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWQorICogSU1QTElDQVRJT04sIEVTVE9QUEVMLCBPUiBPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKyAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQorICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgorICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKKyAqLworCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4wLjAuYmluLmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjExNzkuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvY3hnYjMvdDNmdy03LjAuMC5iaW4uaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDE4ODEgKzAsMCBAQAotOjEwMDAwMDAwNjAwMDc0MDAyMDAzODAwMDIwMDM3MDAwMDAwMDEwMDBENgotOjEwMDAxMDAwMDAwMDIwMDBFMTAwMDI4NDAwMDcwMDAwRTEwMDAyODhFNwotOjEwMDAyMDAwMDAwMTAwMDBFMDAwMDAwMEUwMDAwMEEwMDEwMDAwMDA2RQotOjEwMDAzMDAwNDQ0NDQ0NDBFMzAwMDE4MzIwMDIwMDAwMjAwMUUwMDAyQQotOjEwMDA0MDAwMjAwMUZGMTAxRkZGRDAwMDFGRkZDMDAwRTMwMDA0M0M5MQotOjEwMDA1MDAwMDIwMDAwMDAyMDAwNjk1NDFGRkZDNTgwMjAwMDY5OUMzOQotOjEwMDA2MDAwMUZGRkM1ODQyMDAwNjlEQzFGRkZDNTg4MjAwMDZBNTA3RgotOjEwMDA3MDAwMUZGRkM1OEMyMDAwMDNDMEMwMDAwMEU0MzEwMEVBMzEzRQotOjEwMDA4MDAwMDBBMTMxMDBBMDMxMDMwMjAwMDJFRDMwNkUyQTA1MDAwQwotOjEwMDA5MDAwRUQzMTAwMDIwMDAyMTYwMDEyRkZEQkMwMzAxNEZGREE1RgotOjEwMDBBMDAwRDMwRkQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDM0NwotOjEwMDBCMDAwMEZEMzBGRDMwRjEyRkZENTIzMEEwMDI0MEEwMEQzMEY0QQotOjEwMDBDMDAwRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzBGRDMyNwotOjEwMDBEMDAwMEZEMzBGMTRGRkNFMDM0MjFGMTRGRkNCMDM0MjFGMTI5NgotOjEwMDBFMDAwRkZDQ0MwMzAyRDM3MzAyRDM3MzQyRDM3MzgyRDM3M0NFRAotOjEwMDBGMDAwMjMzRDAxNzIzM0VEMDAwMjAwMTJGRkM0QzAzMDJGMzdFMAotOjEwMDEwMDAwMDAyRjM3MTAyRjM3MjAyRjM3MzAyMzNEMDE3MjMzRUQ2QQotOjEwMDExMDAwMDAwMjAwMTJGRkJFQzAzMDI3MzcwMDI3MzcxMDI3MzdGNAotOjEwMDEyMDAwMjAyNzM3MzAyMzNEMDE3MjMzRUQwMzAyMDAxMkZGQjk1RgotOjEwMDEzMDAwMTNGRkJBMEMwMjAwOTMyMDEyRkZCOTEzRkZCOTBDMDI4RgotOjEwMDE0MDAwMDA5MzIwMTJGRkI4QzAzMTkzMjA4MjIwMTJGRkI3MTMxMgotOjEwMDE1MDAwRkZCNzkzMjAxMkZGQjcxNUZGQjMxNkZGQjZDMDMwRDcxNQotOjEwMDE2MDAwMjAwNTY2MDE2MDAwMUIwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwMDE3MDAwMDQzNjA1MDAwMjAwRDMwRkQzMEY3NTMxMTQwNzQ3MTQ1RQotOjEwMDE4MDAwMDUzMzBDMDcwNDQzNzYzMUU2MDQzNjA1NzUzOUVEMDA3NgotOjEwMDE5MDAwMDIwMDEyRkZBNzE1RkZBM0MwMzBENzIwNjAwMDA2MDBBMQotOjEwMDFBMDAwMDc0NzE0MDUzMzBDMDcwNDQzMDQzRTA1NzUzOUYwMDM3MwotOjEwMDFCMDAwMDIwMDEyRkZBMUMwMzAxNEZGQTFEMzBGRDMwRkQzMEY0MQotOjEwMDFDMDAwOTM0MEI0NDQ3MjQ5RjJEMzBGRDMwRkQzMEYxNEZGOUI2MwotOjEwMDFEMDAwODM0MDE0RkY5QjgzNDAxMkZGOUIyMzBBMDAxNEZGOUE2NQotOjEwMDFFMDAwRDMwRkQzMEZEMzBGOTM0MEI0NDQ3MjQ5RjJEMzBGRDMzQwotOjEwMDFGMDAwMEZEMzBGMTRGRjk1ODM0MDEyRkY5NUNBMjA4MzIwODRFQwotOjEwMDIwMDAwMjE4NTIyQkMyMjc0M0IxMDg2NTBCNDU1OTYzMEI0MzNGRAotOjEwMDIxMDAwNzQzM0Y0NjNGRkU2MDAwMDAwNjUzRkUwNjU1RkREMTJDNAotOjEwMDIyMDAwRkY3Q0MwMzAyODM3NDAyODM3NDQyODM3NDgyODM3NENDRgotOjEwMDIzMDAwMjMzRDAxNzIzM0VEMDMwMjAwMDAwMjAwMTJGRjdBQzA3OQotOjEwMDI0MDAwMzIwMzJFMDUwMzAyMDAxMkZGNzgxM0ZGODE5MzIwQzBCMgotOjEwMDI1MDAwMTEwMTQ5MzEwMDQ4MzEwMTAyMDBDMDAwMTRGRjdFMDQ0MQotOjEwMDI2MDAwRDIzMTE1RkY3RDk0NTAxNEZGN0QwNEQzMzExNUZGN0NFRQotOjEwMDI3MDAwOTQ1MDE0RkY3QzA0RDQzMTE1RkY3QzI0NTYwMDE0RkZFNQotOjEwMDI4MDAwN0IwNEQ1MzExNUZGN0IyNDU2MDAxMEZGN0EwMzAwMDA1NAotOjEwMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwMDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwMDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwMDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwMDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwMDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwMDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwMDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwMDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwMDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwMDQyMDAwNjNGRkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDBBMQotOjEwMDQ0MDAwMUZGQzAwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBBQgotOjEwMDQ1MDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwRTMwMDA1QzgwNgotOjEwMDQ2MDAwMUZGRkMwMDAxRkZGQzAwMEUzMDAwNUM4MUZGRkMwMDA0MgotOjEwMDQ3MDAwMUZGRkMwMThFMzAwMDVDODFGRkZDMDE4MUZGRkMwMThFQQotOjEwMDQ4MDAwRTMwMDA1RTAxRkZGQzAxODFGRkZDMjg4RTMwMDA1RTA3RQotOjEwMDQ5MDAwMUZGRkMyODgxRkZGQzI4OEUzMDAwODUwMUZGRkMyOTBFMQotOjEwMDRBMDAwMUZGRkM1N0NFMzAwMDg1MDIwMDAwMDAwMjAwMDAxNkEwNwotOjEwMDRCMDAwRTMwMDBCM0MyMDAwMDE4MDIwMDAwMTgwRTMwMDBDQTgzOQotOjEwMDRDMDAwMjAwMDAyMDAyMDAwMDIwM0UzMDAwQ0E4MjAwMDAyMUMxMAotOjEwMDREMDAwMjAwMDAyMjBFMzAwMENBQzIwMDAwMjIwMjAwMDAyMjZCNQotOjEwMDRFMDAwRTMwMDBDQjAyMDAwMDIzQzIwMDAwMjQwRTMwMDBDQjgwNgotOjEwMDRGMDAwMjAwMDAyNDAyMDAwMDI0OUUzMDAwQ0JDMjAwMDAyNEMxNgotOjEwMDUwMDAwMjAwMDAyNTBFMzAwMENDODIwMDAwMjUwMjAwMDAyNTlENQotOjEwMDUxMDAwRTMwMDBDQ0MyMDAwMDI1QzIwMDAwMjYwRTMwMDBDRDg1OQotOjEwMDUyMDAwMjAwMDAyNjAyMDAwMDI2OUUzMDAwQ0RDMjAwMDAyNkM2NQotOjEwMDUzMDAwMjAwMDAyNzBFMzAwMENFODIwMDAwMjcwMjAwMDAyNzkyNQotOjEwMDU0MDAwRTMwMDBDRUMyMDAwMDI4QzIwMDAwMjhDRTMwMDBDRjg4RAotOjEwMDU1MDAwMjAwMDAyOTAyMDAwMDI5M0UzMDAwQ0Y4MjAwMDAyQUM3RgotOjEwMDU2MDAwMjAwMDAyQjBFMzAwMENGQzIwMDAwMkQwMjAwMDAyRjJDOAotOjEwMDU3MDAwRTMwMDBEMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMjREMQotOjEwMDU4MDAwMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDI0MjAwMDAzQjBERQotOjEwMDU5MDAwMjAwMDAzQjBFMzAwMEQyNDIwMDAwM0IwMjAwMDAzQjBDRQotOjEwMDVBMDAwRTMwMDBEMjQyMDAwMDNCMDIwMDA2Qjc0RTMwMDBEMjQ1MQotOjEwMDVCMDAwMjAwMDZCNzQyMDAwNkI3NEUzMDA3NEU4MDAwMDAwMDBGRQotOjEwMDVDMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwMUZGQzAwMDBGNQotOjEwMDVEMDAwMUZGRkM1ODAxRkZGQzY3MDIwMDA2Qjc4MjAwMDZCNzg1RQotOjEwMDVFMDAwREVGRkZFMDAwMDAwMDgwQ0RFQURCRUVGMUZGRkMyOTA3NAotOjEwMDVGMDAwMUZGQ0ZFMDAxRkZGQzA4NDFGRkZDNUMwMzAwMDAwMDBBRAotOjEwMDYwMDAwMDAzRkZGRkY4MDQwMDAwMDEwMDAwMDAwMDgwRkZGRkZDOAotOjEwMDYxMDAwMUZGRkMyNUQwMDBGRkZGRjgwNEZGRkZGODAwMDAwMDA0MwotOjEwMDYyMDAwMDAwMDA4ODBCMDAwMDAwNTYwNTAwMDAwNjAwMDAwMDA3RAotOjEwMDYzMDAwNDAwMDAwMTEzNTAwMDAwMDQxMDAwMDAwMTAwMDAwMDFFMgotOjEwMDY0MDAwMjAwMDAwMDAwMDAwMTAwMDdGRkZGRkZGNDAwMDAwMDBCRQotOjEwMDY1MDAwMDUwMDAwMDA4MDAwMDAxOTA0MDAwMDAwMDAwMDA4MDBGMAotOjEwMDY2MDAwMTAwMDAwMDU4MDYwMDAwMDcwMDAwMDAwMjAwMDAwMDlGQwotOjEwMDY3MDAwMDAxRkY4MDA4MDAwMDAxRUEwMDAwMDAwRjgwMDAwMDAyRAotOjEwMDY4MDAwMDgwMDAwMDAwN0ZGRkZGRjE4MDAwMDAwMDEwMDgwMDFDNAotOjEwMDY5MDAwNDIwMDAwMDAxRkZGQzIwRDFGRkZDMENDMDAwMTAwODAwMAotOjEwMDZBMDAwNjA0MDAwMDAxQTAwMDAwMDBDMDAwMDAwMDAwMDMwMDA1NAotOjEwMDZCMDAwNjAwMDA4MDA4MDAwMDAxQzAwMDEwMDAwODAwMDAwMUE5QgotOjEwMDZDMDAwODAwMDAwMThGQzAwMDAwMDgwMDAwMDAxMDAwMDQwMDBENQotOjEwMDZEMDAwODAwMDA0MDAwMzAwMDAwMDUwMDAwMDAzRkZGRkJGRkY4NAotOjEwMDZFMDAwMDAwMDBGRkYxRkZGQzM5MEZGRkZGMDAwMDAwMDE2RDBCNwotOjEwMDZGMDAwMDAwMEZGRjdBNTAwMDAwMDFGRkZDNEEwMUZGRkM0NTFBQQotOjEwMDcwMDAwMDAwMTAwMDgwMDAwMEIyMDIwMkZGRjgwMUZGRkM0NDVDMAotOjEwMDcxMDAwMDAwMDJDMDBGRkZFRkZGODAwRkZGRkZGMUZGRkM1Njg3MQotOjEwMDcyMDAwMDAwMDIwMDBGRkZGREZGRjAwMDBGRkVGMDEwMDExMDBDRAotOjEwMDczMDAwMUZGRkM0NjExRkZGQzNDMjFGRkZDNDEwMUZGRkM1OTA2RQotOjEwMDc0MDAwRkZGRkVGRkYwMDAwRkZGQjFGRkZCRTkwRkZGRkY3RkY2MwotOjEwMDc1MDAwMUZGRkMwNTQwMDAwRkZGRDAwMDFGQkQwMUZGRkM1QjAwQwotOjEwMDc2MDAwMUZGRkM2NjAxRkZGQzU5MUUwRkZGRTAwMDAwMDgwMDA3NAotOjEwMDc3MDAwMUZGRkM1MkMxRkZGQzVCNDFGRkZDMDU4MUZGRkM0RDBFQgotOjEwMDc4MDAwMUZGQ0ZGRDgwMDAxMDA4MUUxMDAwNjAwMDAwMDI3MTBENwotOjEwMDc5MDAwMUZGQ0ZFMzAxRkZDRkU3MEUxMDAwMjAwMUZGRkM1Mjg5OQotOjEwMDdBMDAwMUZGRkM1NDAwMDAzRDA5MDFGRkZDNTU0MkI1MDYzODAyRQotOjEwMDdCMDAwMkI1MDc5ODAyQjUwOTA4MDJCNTBBNjgwMUZGRkM0NTk1RQotOjEwMDdDMDAwMDEwMDExMEYyMDJGRkUwMDIwMzAwMDgwMjAyRkZGMDA5RAotOjEwMDdEMDAwMDAwMEZGRkYwMDAxRkZGODJCNTBCMjAwMkI1MEIyMDhDMQotOjEwMDdFMDAwMDAwMTAwMTAyQjUwQjE4MDJCNTBCMjgwMkI1MEJBMDA2QQotOjEwMDdGMDAwMDAwMTAwMTEyQjUwQkQyODJCNTBCQzgwMkI1MEJEQTBGOAotOjEwMDgwMDAwMjAzMDAwMDBERkZGRkUwMDUwMDAwMDAyMDBDMDAwMDBBQQotOjEwMDgxMDAwMDIwMDAwMDBGRkZGRjdGNDFGRkZDMDVDMDAwRkY4MDBBQwotOjEwMDgyMDAwMDQ0MDAwMDAwMDEwMDAwMDBDNDAwMDAwMUM0MDAwMDBDQwotOjEwMDgzMDAwRTAwMDAwQTAxRkZGQzUzMDFGRkQwMDA4MUZGRkM1NDREQQotOjEwMDg0MDAwMUZGRkM1NTgxRkZGQzU2Q0UxMDAwNjkwRTEwMDA2RUNENAotOjEwMDg1MDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwMDg2MDAwMjAxMDAwNDAyMDEwMDA0MDIwMTAwMDQwMjAxNDAwODA4NAotOjEwMDg3MDAwMjAwQzAwMDAyMDBDMDAwMDIwMEMwMDAwMjAxMDAwNDA4NAotOjEwMDg4MDAwMjAxNDAwODAyMDE0MDA4MDIwMTQwMDgwMjAxODAwQzA1NAotOjEwMDg5MDAwMjAxQzAxMDAyMDFDMDEwMDIwMUMwMTAwMjAyMDAxNDAyMAotOjEwMDhBMDAwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwMjAxQzAxMDAyMwotOjEwMDhCMDAwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwMjAxQzAxMDAxMwotOjEwMDhDMDAwMjAyMDAxNDAyMDIwMDE0MDIwMjAwMTQwMjAyMDA5NDAxQwotOjEwMDhEMDAwMjAyMDA5NDAyMDIwMDk0MDIwMjAwOTQwMjAyNDA5ODBCMAotOjEwMDhFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAxNAotOjEwMDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwMDkwMDAwMjAwMDUyNTQyMDAwNTEyNDIwMDA1MjU0MjAwMDUyNTQwMAotOjEwMDkxMDAwMjAwMDUwNjAyMDAwNTA2MDIwMDA1MDYwMjAwMDRFOTQ2NQotOjEwMDkyMDAwMjAwMDRFOTQyMDAwNEU4QzIwMDA0REZDMjAwMDRDQTA1NgotOjEwMDkzMDAwMjAwMDRBODgyMDAwNDg4ODAwMDAwMDAwMDAwMDAwMDBENQotOjEwMDk0MDAwMjAwMDUyMjQyMDAwNTBGMDIwMDA1MTk0MjAwMDUxOTRBNwotOjEwMDk1MDAwMjAwMDRGMzgyMDAwNEYzODIwMDA0RjM4MjAwMDRGMzhGQgotOjEwMDk2MDAwMjAwMDRGMzgyMDAwNEU4NDIwMDA0RjM4MjAwMDRCQzQxOAotOjEwMDk3MDAwMjAwMDRBM0MyMDAwNDgzODAwMDAwMDAwMDAwMDAwMDAzMQotOjEwMDk4MDAwMjAwMDBCNzAyMDAwMzg0QzIwMDAwNEMwMjAwMDQ0MkNCNAotOjEwMDk5MDAwMjAwMDBCNjgyMDAwM0Y0MDIwMDAwM0YwMjAwMDQzRUNDMwotOjEwMDlBMDAwMjAwMDQ4MTQyMDAwM0M1MDIwMDAzQjZDMjAwMDM3QzgzOQotOjEwMDlCMDAwMjAwMDM2NTQyMDAwMzNDQzIwMDAyRUY4MjAwMDM5Q0MwMwotOjEwMDlDMDAwMjAwMDJCNUMyMDAwMjc5NDIwMDA2NDhDMjAwMDIzMjAzMgotOjEwMDlEMDAwMjAwMDIwMDQyMDAwMUZCODIwMDAxQ0E0MjAwMDE3QjAxNQotOjEwMDlFMDAwMjAwMDE0RjAyMDAwMEQ4QzIwMDAwQkI0MjAwMDEwQkM1RgotOjEwMDlGMDAwMjAwMDEyQTAyMDAwNDEzMDIwMDAzQzA0MjAwMDBCNzg5MQotOjEwMEEwMDAwMjAwMDA0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwMEExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwMEEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwMEE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwMEE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwMEE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwMEE4MDAwMDAwMDAwMDAzMjY0MDAwMDAwMDAwMDAwMzI2NDAwMDAzQQotOjEwMEE5MDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDAzNgotOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDBGNgotOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwMEIwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwMEIxMDAwMDAwMDAwMDAwMDQzMjM4MDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Qzk0MDFDNAotOjEwMEI0MDAwNUQ5NDAyNUU5NDAzNUY5NDAwNDMwMDAwMDAwMDAwMDA4NwotOjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QzkwMDE4OAotOjEwMEI4MDAwNUQ5MDAyNUU5MDAzNUY5MDAwNTMwMDAwMDAwMDAwMDA0MwotOjEwMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Qzk0MDAwNQotOjEwMEJDMDAwMUQ5MDAxOUQ5NDAyOUU5NDAzOUY5NDA0MDg5NDA1MDkyRQotOjEwMEJEMDAwOTQwNjBBOTQwNzBCOTQwMDQzMDAwMDAwMDAwMDAwMDBGNAotOjEwMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QzkwMDFDOAotOjEwMEMwMDAwOUQ5MDAyOUU5MDA3MUQ5MDAzOUY5MDA0Nzg5MDA1NzkxNwotOjEwMEMxMDAwOTAwNjdBOTAwNzdCOTAwMDUzMDAwMDAwMDAwMDAwMDBDRgotOjEwMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzk0MDA0NAotOjEwMEM0MDAwMUQ5MDAxREQ5NDAyREU5NDAzREY5NDA0MDQ5NDA1MDVGNQotOjEwMEM1MDAwOTQwNjA2OTQwNzA3OTQwODA4OTQwOTA5OTQwQTBBOTRDQwotOjEwMEM2MDAwMEIwQjk0MDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzkwMDEwNwotOjEwMEM4MDAwREQ5MDAyREU5MDBCMUQ5MDAzREY5MDA0QjQ5MDA1QjU1QgotOjEwMEM5MDAwOTAwNkI2OTAwN0I3OTAwOEI4OTAwOUI5OTAwQUJBOTAzNAotOjEwMENBMDAwMEJCQjkwMDA1MzAwMDAwMDYzRkZGQzAwMjAwMDY5MzA4NAotOjEwMENCMDAwMTBGRkZGMEEwMDAwMDAwMDIwMDA2OTU0MDBEMjMxMTAyQwotOjEwMENDMDAwRkZGRTBBMDAwMDAwMDAwMDIwMDA2OTlDMDBEMzMxMTBFNAotOjEwMENEMDAwRkZGRTBBMDAwMDAwMDAwMDIwMDA2OURDMDBENDMxMTA5MwotOjEwMENFMDAwRkZGRTBBMDAwMDAwMDAwMDIwMDA2QTUwMDBENTMxMTAwRAotOjEwMENGMDAwRkZGRTBBMDAwMDAwMDAwMDYzRkZGQzAwRTAwMDAwQTAwRgotOjEwMEQwMDAwMTJGRkY3ODIyMDAyODI1N0M4MjE2M0ZGRkMxMkZGRjMxMwotOjEwMEQxMDAwMDNFODMwMDRFRTMwMDVDMDMwOTMyMDk0MjE5NTIyNjMxRgotOjEwMEQyMDAwRkZGQzAwMDAxRkZGRDAwMDAwMDQwMDIwMUZGRkM1ODA1MwotOjEwMEQzMDAwMUZGRkM2NzAyMDBBMDAxMUZGRkIxM0ZGRkIwM0U2MzEwMwotOjEwMEQ0MDAwMDEwMjAwMTZGRkZBMTdGRkZBRDMwRjc3NkIwNjkwNjBDNwotOjEwMEQ1MDAwQjQ2Njc3NjNGODU0MTUyNjU0MTlEOTBGMTQwMDYzRkY0RAotOjEwMEQ2MDAwRjkwMDAwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA2QzAwOAotOjEwMEQ3MDAwQzcxQUVGMDYwRDQ5MTFEODMwRDcyMDFCRUYwNUJDMjI0QQotOjEwMEQ4MDAwODU3MkFCNzY4MzcxMDU0NTBCOTU3MjA5MzMwQzIzNzYxQQotOjEwMEQ5MDAwMDE3MjNCMDUyMzNEMDgyMzc2MDFBMzlEMTlFRUZFN0REQwotOjEwMERBMDAwNjMyNkMwMjFDMEUwMDMyRTM4MEUwRTQyQzhFRTI5QTZFRAotOjEwMERCMDAwN0U2RDRBMDUwMDgwODgwMDMwOEM4MjcxRDEwRkMwRjBCMgotOjEwMERDMDAwMDgyRjM4N0ZDMEVBNjNGRkU0OTIxMDAzN0YwQ0FCRkY2QgotOjEwMEREMDAwMEYzRDEyREI4MDJFREMxMDBFNEUzNkMwMjFDMDUwMDNCQQotOjEwMERFMDAwMjUzODIyMTIwMDA1MDU0MkNCNTAyOUE2N0U2REVBMDU2MgotOjEwMERGMDAwMDBCMDg4MDAzMDhDQkM3NkMwNTBBOEYzQzA4MTA2ODU1NgotOjEwMEUwMDAwMzgwNTA1NDJDQTUxMjlBNjdFMEQ0ODBDRDMwRjZEOEFCQwotOjEwMEUxMDAwMDUwMDMwODgwMDIwOEM4MjcxRDEwRjAwQzA2MUMwNTA2NQotOjEwMEUyMDAwMDg2NTM4NzVDMEM2NjNGRkMwQzBCMDAzOEIzODdCQzA4RgotOjEwMEUzMDAwRDc2M0ZGRDE2QzEwMTIxNkVFRDgyQTIyMUUyRTIyMUQ2NwotOjEwMEU0MDAwQzBEMDdBRTExQjJDQTAwMEQ3QTAyOENDRTk2NDgxNDg0RgotOjEwMEU1MDAwMjlDQ0U4NjQ5MzQxQzFCOTdCQzEyNTY5Q0MxQjYwMDBGMgotOjEwMEU2MDAwMjIyQ0QwMDBEN0QwMjhDQ0U5NjQ4MTU0MjlDQ0U4NjQ2NgotOjEwMEU3MDAwOTNCQUMxQjk3QkMxMDk2OENDMDlDMDIwRDEwRjAwMDA2OQotOjEwMEU4MDAwMDAyRDI1MDI4QzMyQzA5MDBDNkY1MDY1RjU4NjI5MjQwOAotOjEwMEU5MDAwNjcwOTA4NDc2NTg1ODJCNDQ5MjcyMDBDMThFRUMwMEMwNQotOjEwMEVBMDAwN0YxMUE4RkYyOEYyODZEQjcwNzg5MzAyNjAwNTU0MTk0MQotOjEwMEVCMDAwRUVCQzA5NzkwQTI5OTJBMzY4OTAwODI4MjIwMDA5ODhDMwotOjEwMEVDMDAwMEM2NTg1M0YyOUYyODU2NDk1MzkyOTE2MUE2NTU1NjNBNQotOjEwMEVEMDAwN0FFMTA0REJBMDYwMDAwMUMwQjAyMjE2MUI4REI0MTJDMQotOjEwMEVFMDAwRUVCMTBEODgxNDgyMjQwRDBENDdBODIyMThFRUFGMDkyQgotOjEwMEVGMDAwREQxMDA4MjIwMjkyOTAxOEVFQUQxMkVFQUUwOEM4MDE4NQotOjEwMEYwMDAwMEQ4ODAyMDI0MjAyMURFRUFBOTI5MTBEODgwMjk4OTI2QgotOjEwMEYxMDAwMjJCMDIzMkRCMDIyMDQyODEwMDZERDEwMDI0MjEyMDg1MAotOjEwMEYyMDAwREQwMjI4QjAyMTA3MjIxMDBDODgxMDAyODgwMjBEODhFQgotOjEwMEYzMDAwMDIxMkVFQTE4RDMzMDJERDAxODIzNDBEODgwMjk4OTNGNgotOjEwMEY0MDAwOTJCOTkyOTQ4REI1ODIzOTlEOTU4OEI2OEQzODk4OTZEMAotOjEwMEY1MDAwODhCNzkyOTk5RDk4OTg5N0MwRDAyOEYyODUxMkVFOTdGRAotOjEwMEY2MDAwMDg0ODBCQTI3MjJEMjRDRjI4RjY4NTIyMTIxQjY1NTQ0NwotOjEwMEY3MDAwREU3QUUxMDREQkEwNjAwMDAxQzBCMDY0QkVGQjJDQjBFRgotOjEwMEY4MDAwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCODBERQotOjEwMEY5MDAwMDBEQkEwNjVBRkU3NjNGRUUwMkVBMDAzMkIyMDY3RDkzRQotOjEwMEZBMDAwRTBENEUwNjVCMUFCOEIzMjBCRkM1MDY0QzRCMjE4RUVGOAotOjEwMEZCMDAwODQ4RjJBMDhCODAxMDhGRjBDNjRGMkNEQzA5MjYwMDE0QQotOjEwMEZDMDAwOEEyQUQwMDMyOTIwNjdENEEwNjU5NEM5OEIzMjBCRkNGMAotOjEwMEZEMDAwNTA2NEM0OEMxRkVFN0I4RTJBMEZCRjAxN0ZFOURDOEMyRQotOjEwMEZFMDAwMzMwQ0U4NTA2NDg0QjRDMEIwMENBNTExOEY1OTJCMTY5MwotOjEwMEZGMDAwMTI4QTU3OEU1ODJBMTYxMURCRTBBQUZBN0ZBQjAxQjE4QwotOjEwMTAwMDAwRUI3NUNFNTk5RTFGODkzNzk1MUNBRjk4OTgxRDc5OEIyQgotOjEwMTAxMDAwMDgyNTE2MEMyOUVDMDEyOTE2MEY5QTE2OEExRDg1MUYyMgotOjEwMTAyMDAwMkExNjE5MkEwQTAwN0JFMzBBN0JFOTA1MkIxMjA2N0ZBMAotOjEwMTAzMDAwQkIwMUMwQTE2NUE0Njk4QjM1QzBBMEMwODA3OEUzMDQ2MgotOjEwMTA0MDAwNjRFM0I1QzBBMTY1QTQ1ODg5MUMyOTE2MTcwQzRBNTQzRAotOjEwMTA1MDAwMkExNjE2QkNBQTJBMTYxODYwMDBBRjAwMDAwMDg4MzdBRQotOjEwMTA2MDAwODkzNjI4MTYxNDI5MTYxNTA4RjgwQzA5RTkwQzI5MTZEMgotOjEwMTA3MDAwMTM5ODFFNzhGQjA3MjgxMjEzQjA4ODI4MTYxMzg5MUVCMAotOjEwMTA4MDAwOUExODlGMTcyQTEyMTNDMEYwMjkxNjE5N0JFMzBDN0JCQwotOjEwMTA5MDAwRTkwNzhFMTcyQjEyMDg3RUJCMDFDMEYxNjVGNDA2QzA2QwotOjEwMTBBMDAwQjAyRjEyMTk4ODM1MkUxMjEyOTgxOTI4MTIxMUFBRUU5MwotOjEwMTBCMDAwQUY4Rjc4RkIwMjJFRUMwMTlGMTM4RjE5OUYxMkMwRjBBNwotOjEwMTBDMDAwN0JFMzBDN0VCOTA3ODkxMzI4MTIwMjc5OEIwMUMwRjFFQQotOjEwMTBEMDAwNjVGM0QyMjUxNjE3MjkxMjE1MEM0RjU0QzBFMTJGMTZBRgotOjEwMTBFMDAwMTZCQ0ZGMkYxNjE4MDBGMTA0MDBFRTFBMkYxMjE0QjBEMAotOjEwMTBGMDAwRUUwRUY4MTMwOTg4MDEwRkVFMDEyRjEyMTlBOEFBQUVGRgotOjEwMTEwMDAwRkU3RkVCMDFCMUFBRDVBMDJFMTYxOTJCMTIxOURBNTBDOQotOjEwMTExMDAwMkMxMjE4NTgxOEQzQzBEMEMwOTAyRTEyMTkwNzQ4MEFBNAotOjEwMTEyMDAwMkMxMjE4REFCMDhGMzRDMEIxQUFGRjAwQzEwNDJBMTIwMQotOjEwMTEzMDAwMTYyRjg2MTYyQzEyMTcwMEJCMUFCMEJCMEVCRTAxOUVDRQotOjEwMTE0MDAwQzkwQkZCMTMwNUJCMDE5QkM4MkE3NDEwMjkyNDY3MjkwRQotOjEwMTE1MDAwNzAwMzhFNzVCMTlGMkY3NDAzQjBFRTBFNEUwQzY1RURDQgotOjEwMTE2MDAwMTgyODIwNjcyRDI1MDI2NTgzMTMyQTIyMUUyOTIyMUQ5NwotOjEwMTE3MDAwN0E5MTA0REJBMDYwMDAwMUMwQjA2NEJDRkMyQ0IwMDcxNQotOjEwMTE4MDAwMjhCMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBFMwotOjEwMTE5MDAwREJBMDY1QUZFNzYzRkNFMTg5QUFCMTk5NjU5MDk0ODkwQQotOjEwMTFBMDAwMzQxQkVFMDg5OUFBODgzMzFGRUUwMjA4NDg1NDI4QTQ3RAotOjEwMTFCMDAwMkM4RTJBOEMzMjBGRUUwMjBCQ0IwMTdFQjk2NDBDNEJDNQotOjEwMTFDMDAwNTE2RkIyNUU4QjMzNzVCNjU5MkNBMDEzMEJFRTUxMEVENgotOjEwMTFEMDAwQ0UwMTBFMEU0MTBDMEM0MTdFQzk0NzJGQTAxMkIwRkY2QwotOjEwMTFFMDAwNjVGMkREOEUzNzhDQTg4QjM2OEZBOTdDQjMwNzdCQzk1RgotOjEwMTFGMDAwMDI3RUZCMDFDMEQxQ0VEOTg4MzVEREIwMEU4RTA4NzhENQotOjEwMTIwMDAwRUIwMUIxQkQ4OUE3REFDMDBGOUIwODc5QkIwMjJBQ0NEQwotOjEwMTIxMDAwMDFEQ0IwQzBCMDdEQTMwNzdBRDkwMjdDRUIwMUMwQjE3QwotOjEwMTIyMDAwNjRCMTYzQzA5MTI5MjQ2N0MwMjBEMTBGMDA4QkRBQjE2QgotOjEwMTIzMDAwQkI2NEIwQzAyQzIwNjcyRDI1MDI2NUMyMjgxREVERENFMwotOjEwMTI0MDAwOEMzMjFGRURFMTBEQ0QwMTBGREQwQzY1RDFDMTBDNEZDRQotOjEwMTI1MDAwNTE2RkYyMDI2MDAxQjhDMDkwMjkyNDY3MDkwODQ3NjUwMAotOjEwMTI2MDAwODIwRjdBRTEwNERCQTA2MDAwMDFDMEIwNjRCQzBBMkNFQwotOjEwMTI3MDAwQjAwNzI4QjAwMERBMjAwNjg4MEEyODgyNENDMEQxMEJCQgotOjEwMTI4MDAwODAwMERCQTA2NUFGRTc2M0ZCRUY4QzMzMENFOTUwNjRCMwotOjEwMTI5MDAwOTIwOTBDRUYxMUFGQUYyRjE2MTc4RUY4ODVGN0RCRTAzMAotOjEwMTJBMDAwOEZGOTI1MTYxMEE1RjU3RjVCMDIyQkVDMDEwQ0E4NTBEOQotOjEwMTJCMDAwNjU4MEREODgzN0RBRTBBRjg5MjkxNjBBNzg5QjAyMkEzMwotOjEwMTJDMDAwRUMwMTk1MTQ4OTFBRDVBMDI5MTYxOTJBMEEwMDdCRTM4NgotOjEwMTJEMDAwMEE3QkU5MDUyQjEyMDQ3RkJCMDFDMEExNjVBMUMxOEI2QwotOjEwMTJFMDAwMzVDMEEwQzA4MDc4RTMwNDY0RTEwNEMwQTE2NEFENUNCMwotOjEwMTJGMDAwNjAwMUFEMDAwMDhFMzQxOUVEQjM5RURBOEMzMzFCRUQyNgotOjEwMTMwMDAwQUMwQzRDNTQyQ0Q0MkM4QTJBOEMzMjBCQUEwMjA5Qzk1RQotOjEwMTMxMDAwMDEwQTk5MEM2NTlGMEIwQzRGNTE2RUYyMDI2M0ZGMDI5QwotOjEwMTMyMDAwOEIzMzBCQTg1MDY0OEVGQTI5RDAxMzBCRUE1MTBBOUExQQotOjEwMTMzMDAwMDEwQTBBNDEwOTA5NDEwQTk5MEM2NTlFRTUyQkQwMTI2MAotOjEwMTM0MDAwQjBCQjY1QjE4OEMwQTA4RTM3OENEODJCMzIwNjJGRDJBNwotOjEwMTM1MDAwMDk3Q0IzMDc3QkM5MDI3RUZCMDFDMEExNjVBRUMzODhDRgotOjEwMTM2MDAwMzVEM0IwQUU4RTc4RUIwMUIxQjM4OUQ3REFDMEFGOUI3RAotOjEwMTM3MDAwNzlCQjAxQjFDQURDQjBDMEIwNzNBMzA3N0EzOTAyN0M3MwotOjEwMTM4MDAwRUIwMUMwQjE2NUJFOUJDMDkwMjkyNDY3QzAyMEQxMEY3RQotOjEwMTM5MDAwMDA4QTM2ODgzNzJBMTYxNTI4MTYxNDBBRUEwQzA4RjgyNwotOjEwMTNBMDAwMEM5ODFCNzhGQjAxQjBBQTlGMTU4RjFCMkYxNjE5MkZDNQotOjEwMTNCMDAwMEEwMDdCRTMwQTdCRTkwNTI4MTIwNTc4NUIwMUMwRjE4RQotOjEwMTNDMDAwNjVGMEUyQUFERThCMzUyRjEyMTkyOTEyMTBDMDUwQUYzQQotOjEwMTNEMDAwOUY3OUZCMDFCMUVFOUYxMUMwRjA3NUUzMEE3RTU5MDVCQwotOjEwMTNFMDAwMjgxMjAxNzhCQjAxQzBGMTY0RkNFQTYwMDBCNzAwMDA3QwotOjEwMTNGMDAwN0ZCMzAyNjNGRUY2NjNGRUYxN0ZCMzAyNjNGQzQ1NjNENQotOjEwMTQwMDAwRkM0MDAwMDA2NDUwQTREQTIwNTgxNUM4QzAyMEQxMEY1OQotOjEwMTQxMDAwQzA5MTYzRkU0M0MwOTE2M0ZBNzNEQTIwREI3MEMwRDFFMAotOjEwMTQyMDAwMkUwQTgwQzA5QTI5MjQ2ODJDNzAwNzU4MTRCOEQyQTBCQwotOjEwMTQzMDAwRDEwRjAwMDAxOUVENjYwMzQ4MEI5ODEwMDg4QjAyMDlDNAotOjEwMTQ0MDAwMjkwODc5ODMwMjJCOERGODI5MTIxQTYzRkE4QjAwMDA4MAotOjEwMTQ1MDAwMkEyQzc0REI0MDU4MEU0NDJFMjIxRDJBMjIxRTYzRkJDOAotOjEwMTQ2MDAwMEZDMDkxNjNGQ0U1MDIyQTAyNTgwMjRDMEFBMjAyMDY1MAotOjEwMTQ3MDAwMDAwMDAyMkEwMjU4MDI0OTBBQTIwMjA2MDAwMERCNzA5QwotOjEwMTQ4MDAwREEyMEMwRDEyRTBBODBDMENFMkMyNDY4MkM3MDA3NThEOAotOjEwMTQ5MDAwMTQ5RkMwMjBEMTBGRDlBMDYzRkNCNjAwQzA5NDYzRkM5OAotOjEwMTRBMDAwQUFDMDk2NjNGQ0E1QzA5NjYzRkNBMDAwMkEyQzc0REIzRQotOjEwMTRCMDAwMzBEQzQwNUJGRTJFQzJEMDJEQTQwMDJCMjAwQzYzRkYzRAotOjEwMTRDMDAwNDU4RjM1OEVBNzdGRUIwMjYzRkVCQjYzRkQ1NDg5MzVFNAotOjEwMTREMDAwODhENzc5OEIwMjYzRkVBRTYzRkQ0NzAwNkMxMDA0QzBCMQotOjEwMTRFMDAwMjBEMTBGMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0MkIxMQotOjEwMTRGMDAwMjIxRTI4MjIxREMwQTBDMDk0MjkyNDA2MkEyNTAyN0I3MgotOjEwMTUwMDAwODkwMURCQTBDOUI5MTNFRDI0REEyMDI4QjAwMDJDQjA4MgotOjEwMTUxMDAwMDcwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUY4RQotOjEwMTUyMDAwRTdDMDIwRDEwRjAwMDAwMDZDMTAwNjAyMjYwMjI5MjAxRgotOjEwMTUzMDAwMDZDMEUwNjg5ODA1Mjg5Q0Y5NjU4MTIwMkE2MTAyMTc5OQotOjEwMTU0MDAwRUQxNzBBMEE0QzY1QTBGMDJCNzI5RTFBRUQxMzZGQjhDNgotOjEwMTU1MDAwMDI2MDAwRjQyQUEyMjY2OEEwMDk4QjYwRDMwRjBBQkJBMAotOjEwMTU2MDAwMEM2NUIwRTQyQTcyOUQ2NEEwREUyQjYwMEMwQ0JDMTFFQgotOjEwMTU3MDAwMDdDQzA4MkRDMjg2NkZEOTAyNjAwMEQ3MURFRDA5MEQ3QQotOjEwMTU4MDAwQkQwQTJERDJBMzY4RDAwNzhGNjAwREZGMEM2NUYwQzM5NAotOjEwMTU5MDAwMjJDMjg1QzBGMDY0MjBCQjFERUQwRTY4NDM0RDE4RURERQotOjEwMTVBMDAwMEQ4QzZCMDhDQzAyOUMyMDhBNjAwOEFBMTEwREFBMDIzRgotOjEwMTVCMDAwOUEyMTg5NkE5OTI0ODgzMjk4MjUyQzYxMDQwOENDMTFEMwotOjEwMTVDMDAwOUMyNzFDRUNGRTBDQkExMUE3QUEyOUEyODVBQ0JDMkY0MwotOjEwMTVEMDAwQzRDRjI5OUMyODI5QTY4NUM4NUEyQTZDNzREQjQwNTg5OAotOjEwMTVFMDAwMERFMkQyQTBEMTBGRDJFMEQxMEYwMDAwMjg5Q0Y5NjQwNwotOjEwMTVGMDAwODA5MTJDNjA2Njg5MzFCMUNDMEMwQzQ3MkM2NDY2NkZFRAotOjEwMTYwMDAwQzY2OTcwOUU2NjFBRUNGNDhDMzA4OTZCMEM4QzQwMEJBQQotOjEwMTYxMDAwQ0MxMDBDOTkwMjBBOTkwMjk5MjA4ODYwMDg4ODExMEQ1MwotOjEwMTYyMDAwODgwMjk4MjE4QzMzOUMyMzhBMzI5QTIyODk2QTk5MjREMQotOjEwMTYzMDAwODgzNDk4MjU2M0ZGODIwMDAwQ0M1N0RBNjBEQjMwREMwOQotOjEwMTY0MDAwNDA1ODE0QTdDMDIwRDEwRjAwREE2MEMwQjY1ODE1MzczMwotOjEwMTY1MDAwNjNGRkU1MDBEQTYwNTgxNTM1NjNGRkRDMDBEQTIwREI1NAotOjEwMTY2MDAwMzBEQzQwREQ1MDU4MTVCN0QyQTBEMTBGOUUxMDJCNjE1MQotOjEwMTY3MDAwMDQ1ODEzQzgxREVDRDc4RTEwMkI2MDBDQzBGMDJGNjREQgotOjEwMTY4MDAwNjY2M0ZGODAyOTYxMjNDMDg4Nzk4MzAyNjNGRjc1MkUxQQotOjEwMTY5MDAwMTYwMDJDNjA2NjJCNjEwNDJDQ0MwMTBDMEM0NzJDNjRDQQotOjEwMTZBMDAwNjY1ODEzQkMxREVDQ0I4RTEwMkI2MDBDQzBGMDJGNjQ2MQotOjEwMTZCMDAwNjY2M0ZGNTA2QzEwMDRDMEI3QzBBMTE2RUNDODE1RUNFRgotOjEwMTZDMDAwQkFENzIwRDg0MEI4MjJDMDQwMDUzNTAyOTY3MTk1NzAyRgotOjEwMTZEMDAwMDJBNDM4MDQwNDQyQzk0QjFBRUNBRDE5RUNBRTI5QTY5OQotOjEwMTZFMDAwN0VDMTQwRDMwRjZENEEwNTAwODA4ODAwMjA4QzIyMEFGRAotOjEwMTZGMDAwODhBMjcyRDEwRkMwNTAwOEE1Mzg3NUIwRTM2M0ZGRDczOAotOjEwMTcwMDAwNkMxMDA4OTMxNDk0MTIyOTIwMDY2NTUyNzBDMDcxNjhGOQotOjEwMTcxMDAwOTgwNTJBOUNGOTY1QTI4MDE2RUNBMTI5MjEwMjhBMTQ1OQotOjEwMTcyMDAwMDkwOTRDNjU5MEM3OEFBMDBBNkE1MTJBQUNGRDY1QTBEOAotOjEwMTczMDAwQkNDQzVGREIzMERBMjA4QzEyNTgxNDY5QzA1MTlBMTQ4QgotOjEwMTc0MDAwQzdCRjlCQTk4RTE0MkVFMjA5NjhFMDYwMkY2MjlFMUQyMAotOjEwMTc1MDAwRUM5MjZGRjgwMjYwMDA4MTJERDIyNjY4RDAwNTJGMjIwRQotOjEwMTc2MDAwMDA3REY5NzUyQzYyOURDNzkwNjRDMDZEOUMxMThBMTQzMAotOjEwMTc3MDAwMkIyMDBDMkFBMDIwMENCRDExQTZERDBBNEYxNEJGQThGNwotOjEwMTc4MDAwMDk4ODAxMjlEMjg2QUY4ODI4OEMwOTc5OEI1NTFGRUNFRQotOjEwMTc5MDAwODQwRkJGMEEyRkYyQTM2OEYwMDUyODIyMDA3Rjg5NDMzNwotOjEwMTdBMDAwMjlEMjg1RDQ5MDY1OTA3NzYwMDAzRDAwMDAyQjIwMENGNQotOjEwMTdCMDAwMUZFQzdDMENCRDExQTZERDI5RDI4NjBGQkYwQTZFOTZFOAotOjEwMTdDMDAwMTAyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA1MjlEMjg1NjU0RgotOjEwMTdEMDAwOTE1NURBMjA1ODE0RDU2MDAwMTNEQTIwQzBCNjU4MTQ5OQotOjEwMTdFMDAwRDM2MDAwMDlDMDkwNjNGRkI5REEyMDU4MTREMDg5MTQ3RgotOjEwMTdGMDAwODk5MTA5RkU1MDY1NTFDQzhDMTI4RDE0REEyMERCRDAxMgotOjEwMTgwMDAwOEREMDlFMTAwRDZENTE1ODEzNDE5QTE0NjRBMUYwQzdFQwotOjEwMTgxMDAwNUY4RkExOTVBOUMwNTEwRjBGNDc5RjEyNjNGRUZCMDA3OAotOjEwMTgyMDAwQzA5MUMwRjEyODIwMDYyQzIwNjYyODhDRjlBN0NDMEM4QQotOjEwMTgzMDAwMEM0NzJDMjQ2NjZGQzYwODhEMTQ4REQxNzBERTAxQzA1NAotOjEwMTg0MDAwOTBERDkwNjQ4MTQxQzlEMjhBMTEyQjIxMDQ1ODEzNTEzMwotOjEwMTg1MDAwOEExNEMwQjAyQjI0NjY4RUE5MkFBMDIwQzE3MDFDRUM2QgotOjEwMTg2MDAwNUIwRTI4MTQxNUVDNTA4RTE0ODU1NkFDMkM5QzEzMkU1MAotOjEwMTg3MDAwRUMyOEE4NTVEREUwN0NFMzAyMkRFREY4RDNEMDBBNzcwMwotOjEwMTg4MDAwMzZEQTQwREI1MERDMzA1QkZGOEJENEEwMkUyMDBDQjQ2QQotOjEwMTg5MDAwNTUyOTBBODhDMEMwMUJFQzQ5MENFRjExQTZGRjI4RjI5RAotOjEwMThBMDAwODVBQkVFMkNFNENGQTk4ODI4RjY4NTI5MEE4MDg4MTMxOQotOjEwMThCMDAwQTkzM0REMzA4OTE0NzgzMzAyMkQzREY4Mjg5MDIwRDNFOAotOjEwMThDMDAwRDAwNzg4MENDMTcwMDgwODQ3Mjg5NDIwMDg3NzM2NjUyRgotOjEwMThEMDAwN0ZBRTg5MTQxM0VDNDM4OTkwQzBENDc3OTczRDE4RUMwMAotOjEwMThFMDAwNDFDMUJBMjcyMTA0ODUxNDA5OUM0MDA2Q0MxMTg2NTNCNgotOjEwMThGMDAwMDQ3NzExODU1MjBDNzcwMjBCNzcwMkMwQzA5OEEwOUQyNwotOjEwMTkwMDAwQTE4RDJCOUNBNTk3QTQ5NkE3OTVBNjAzREQwMjlEQTI2OQotOjEwMTkxMDAwMkJGMjg1MkNFNENGMkJCQzIwMkJGNjg1MkEyQzc0OEI0NAotOjEwMTkyMDAwMTI1ODBEMTFEMkEwRDEwRjI4MjAzREMwRTA3Qzg3NzczRQotOjEwMTkzMDAwMkUyNDY3MEUwQTQ3NjVBMDczMThFQzJCOEYyMDFDRUMzMQotOjEwMTk0MDAwMTk4RTE0OENDNDhFRTQwOEZGMTEwOEZGMDIwRThFMTQ0OQotOjEwMTk1MDAwQUVDQzFFRUMyNjlGOTEwRUNDMDI5QzkwQzA4MDFFRUM1QgotOjEwMTk2MDAwMjQyQzIxMDIxQUVDMTYyRkQyODVBQUJBQjhGRjJGRDY0MgotOjEwMTk3MDAwODUwRUNDMDIyOEE0Q0YyQzI1MDJDMDIwRDEwRjg3MTRCRAotOjEwMTk4MDAwODc3MDA3MDc0NzYzRkQ4NjI4MjEyM0MwOTk3OThCMDI1QQotOjEwMTk5MDAwNjNGRUIyRERGMDYzRkVBRDAwREEyMERCMzA4QzEyREREOQotOjEwMTlBMDAwNTA1ODE0RThEMkEwRDEwRkMwRTE2M0ZGODI4QjE0OEM5MQotOjEwMTlCMDAwMTJERDUwQzBBQTJFMEE4MDJBMjQ2OERBMjA1ODEzNTM1OAotOjEwMTlDMDAwRDJBMEQxMEYwMDcwOTY1NTJCNjI5RTZFQjg1MzFERUJCRQotOjEwMTlEMDAwRjIyREQyMjY2OEQwMDQ4RTIwN0RFOTQ1MkE2MjlEQ0I2NwotOjEwMTlFMDAwQUYyQjIxMDQyQzIwNjY1ODEyRUJDMDkwMjkyNDY2ODI2QwotOjEwMTlGMDAwMTQxOEVDMDA4RjIxMDhGRjAxOUYyMUMwMjBEMTBGMDA5NwotOjEwMUEwMDAwOEIxMEM5Qjg4Q0EwMEM2QzUxQ0NDQzhFMjQxRkVCRUU4MwotOjEwMUExMDAwOERFMTlFMTQwRkREMDI5REUxODgxMDY1OEZBOUMwMjAyNQotOjEwMUEyMDAwRDEwRkRBMjBDMEI2NTgxNDQxQzAyMEQxMEYwMDAwMDBGOQotOjEwMUEzMDAwNkMxMDA2QzBEMDJBMjEwMjk0MTE3NUE3MEU4OTM0N0YzQwotOjEwMUE0MDAwOTcwOThCMzU3RkJGMDQyRDI1MDJEQUQwMEEwQzRDNjUyRgotOjEwMUE1MDAwQzE3QjE2RUJEMjFGRUJEMDI4NjI5RUMwRUE3OEUzMDI2RQotOjEwMUE2MDAwNjAwMTgxMjlGMjI2Njg5MDA3OEEyMDA5QUEwQzY1QTFFNQotOjEwMUE3MDAwNzMyQTYyOURERUEwNjRBMTcwMkIyMDBDQzA3MDBDQkM4OAotOjEwMUE4MDAwMTEwNkNDMDgyOUMyODYyODBBMEM3OTgzMDI2MDAxNEMxMQotOjEwMUE5MDAwMTlFQkM0MDlCOTBBMjk5MkEzNjg5MDA3ODgyMDA5ODgxQwotOjEwMUFBMDAwMEM2NTgxMzgyNEMyODUxQ0VCQzY2NDQxMkY4OTMxMDkzRAotOjEwMUFCMDAwOEIxNDBDQkIwMTZGQjExRDJDMjA2NjlFMTBCMUNDMEM5OQotOjEwMUFDMDAwMEM0NzJDMjQ2NjZFQzYwMjYwMDEzNDA5RkU1MDY1RTFBNQotOjEwMUFEMDAwMkU4QTEwMkFBQzE4ODkzNEMwRTQ3Rjk3MzYxN0VCQzdEQQotOjEwMUFFMDAwQzA4MjFCRUJDNThDMzU5RTQxOUI0MDhCMjA5ODQ1OUQ0OQotOjEwMUFGMDAwNDQxOEVCQzMwN0JCMDI5QjQyMEMwNzQwMEY3NzExOThCOQotOjEwMUIwMDAwNDM5NzQ3RDdFMDdGQzcwQjJDMjEwMjI4NEEwMDA4Q0MxNwotOjEwMUIxMDAwMDIyQzI1MDI3RTk3MDQ4QjM2MkIyNTIyN0Q5NzA0OEM4MAotOjEwMUIyMDAwMzcyQzI1MjE3Qzk3M0EwQUFCMDIyQzBBMDFDMDgwMEE4NwotOjEwMUIzMDAwQzgzODJBM0MyMDA4MDg0MjY0ODA4MjFDRUI5NDE5RUJDOAotOjEwMUI0MDAwOTUyOUM2N0UwMEEwODgwMEIwOEMwMEEwODgwMEIwOENDQgotOjEwMUI1MDAwMDBBMDg4MDBCMDhDMjg2MjlEMkRGNEEyMjg4QzE4Mjg0MwotOjEwMUI2MDAwNjY5RDg5MzA3Nzk3MzUxRkVCOUY4QzMzODgzMjA0N0JENQotOjEwMUI3MDAwMEIyQTIxMDRCNDc3MDRBQTExOUVCMTlGQjA4RjJCOUQyQwotOjEwMUI4MDAwQjU5OEI2OUNCNzE4RUI5NjA5OUM0MDA2Q0MxMTBDQUFFOAotOjEwMUI5MDAwMDIwOEZGMDI5RkIyQzFDQzBDQUEwMjlBQjRDOTc3MkFFQwotOjEwMUJBMDAwMjAwQzFCRUI4NjBDQTkxMUE2OTkyODkyODVBQkFBMkRCNwotOjEwMUJCMDAwQTRDRjA4NzgwQjI4OTY4NUNGNThDMDIwRDEwRkMwODdCNgotOjEwMUJDMDAwQzA5MDBBQzkzODc5ODgwMjYzRkY3ODYzRkY2Q0NDNTdFQwotOjEwMUJEMDAwREEyMERCMzA4QzExNTgxMzQyQzAyMEQxMEZEQTIwNThBNAotOjEwMUJFMDAwMTNEMzYzRkZFOEMwQTA2M0ZFODlEQTIwQzBCNjU4MTNBMAotOjEwMUJGMDAwQ0Y2M0ZGRDkyQTJDNzQ4QjExNTgwQzVCRDJBMEQxMEY2NAotOjEwMUMwMDAwOEExMDJCMjEwNDU4MTI2MzFGRUI2NEMwRDAyRDI0NjY2OAotOjEwMUMxMDAwNjNGRUJEMDA2QzEwMDZENjIwMTlFQjVGMUVFQjYxMjgzOQotOjEwMUMyMDAwNjEwMjE3RUI1RTA4MDg0QzY1ODA1RjhBMzAwQTZBNTFEMgotOjEwMUMzMDAwNjlBMzU3MkI3MjlFNkVCODNGMkE5MjI2NjhBMDA0OEMyNwotOjEwMUM0MDAwNjA3QUM5MzQyQTcyOUQyQzRDRkVDQUFCMkI2MDBDQjY0QwotOjEwMUM1MDAwNEYwQ0JEMTFBN0REMjhEMjg2MEVCRTBBNzhGQjI2OUM0QwotOjEwMUM2MDAwMTEyRUUyQTMyQzE2MDA2OEUwMDUyRjYyMDA3RUY5MTUwNAotOjEwMUM3MDAwMjJEMjg1Q0YyNTYwMDAwRDAwREE2MEMwQjY1ODEzQUJDNAotOjEwMUM4MDAwQzg1QTYwMDEwRjAwREE2MDU4MTNBODY1NTEwNkRDNDA5RAotOjEwMUM5MDAwREIzMDhEMzBEQTYwMEQ2RDUxNTgxMjFDRDNBMDY0QTA3QQotOjEwMUNBMDAwRjM4NEExQzA1MTA0MDQ0NzYzRkY2RDAwQzBCMDJDNjBGMQotOjEwMUNCMDAwNjY4OTMxQjFDQzBDMEM0NzJDNjQ2NjZGQzYwMjcwOTZGNQotOjEwMUNDMDAwMEEyQjYxMDQ1ODEyMzNDMEIwMkI2NDY2NjU1MEI0MkFFNQotOjEwMUNEMDAwM0MxMEMwRTdEQzIwQzBEMUMwRjAwMkRGMzgwRjBGNDI1QgotOjEwMUNFMDAwNjRGMDkwMTlFQjJBMThFQjJCMjg5NjdFOEQxMDZEREE5NAotOjEwMUNGMDAwMDUwMEEwODgwMEMwOENDMEEwODkzMDFERUIzQTc3OTcwMgotOjEwMUQwMDAwNTM4ODMyOEMxMDhGMzMwMkNFMEJDMDI0OTJFMTIyNjFCMwotOjEwMUQxMDAwMDQ5REUwMDQyMjExOEQ2QjlCRTU5RkU3OThFNjFGRUI4NQotOjEwMUQyMDAwMzAwOTk4NDAwNjg4MTEwODIyMDIwRkREMDJDMThEOURGRQotOjEwMUQzMDAwRTIwODIyMDI5MkU0QjRDMjJFNjAwQzFGRUIyMDBDRThGMQotOjEwMUQ0MDAwMTFBNzg4MkM4Mjg1QUZFRTBDMjIwQjJCRTRDRjIyODZDNAotOjEwMUQ1MDAwODVEMkEwRDEwRjI4NjAwQ0QyQTA4QzExMTlFQjE4MENFMQotOjEwMUQ2MDAwOEQxMUE3REQyRUQyODVBOTg4MkI4NENGMEVDQzBCMkMwQwotOjEwMUQ3MDAwRDY4NUQxMEZDMEYwMEFERjM4N0ZFODAyNjNGRjZDNjNCRAotOjEwMUQ4MDAwRkY2MDAwMDAyQTZDNzRDMEIyREMyMERENDA1ODEyMTFFNAotOjEwMUQ5MDAwQzBCMDYzRkY2M0MwMjBEMTBGMDAwMDAwNkMxMDA0MkNBMgotOjEwMURBMDAwMjIxRDJBMjIxRUMwNDlEMzIwMjkzMDA2MjQzNDY4QzBBRgotOjEwMURCMDAwNDA3QUMxMDVEREEwNjAwMDAyMDBDMEQwNkU5NzM4QzAzNwotOjEwMURDMDAwOEYyRTBBODAyQjMwMTRDMDk2MjkzNDA2MEVCQjAyMkVBQgotOjEwMUREMDAwMzEwMjJCMzQxNDdFODAwNDI0MzUwMkRFNDA3QUMxMEU5OQotOjEwMURFMDAwQzhBQkRCRDBEQTMwMkMwQTAwNTgwQTc5MkUzMTAyMEU0QgotOjEwMURGMDAwMEY0Q0M4RkVDMDIwRDEwRjY4OTVGODI4MzEwMjA4MDhBMgotOjEwMUUwMDAwNEM2NThGRUYxQUVBRTYxQ0VBRTQyQkEyOUVDMDlBN0I4RgotOjEwMUUxMDAwOUI0NjJCQzIyNjY4QjAwNDhEMzA3QkQ5M0IyOUEyOURGRQotOjEwMUUyMDAwQzBFM0NCOTM5NDkwMUJFQUY3MkQzMTA0OUI5NjA4REQxOQotOjEwMUUzMDAwMTEwRUREMDI5RDk3OUQ5MTI0QzRBMjEyRUFGMzJGMzE2OQotOjEwMUU0MDAwMDIyOEEyOURDMEU1MkUzNDA2Mjg4QzMwMjhBNjlEMDJDQgotOjEwMUU1MDAwRkYwMjJGMzUwMkMwMjBEMTBGREEzMEMwQjY1ODEzMzMzRAotOjEwMUU2MDAwQzAyMEQxMEY2QzEwMDYyQTIwMDY5NDExNjhBODA1MjhGRQotOjEwMUU3MDAwQUNGOTY1ODI0RjI5MjEwMjA5MDk0QzY1OTIwNkNDNUZCNQotOjEwMUU4MDAwREIzMERBMjA4QzExNTgxMjk2QzA1MUQzQTBDN0FGOUExQwotOjEwMUU5MDAwM0FDMEUwMTlFQUMzMURFQUM5MUFFQUMyOEYzQTE2RUE0MwotOjEwMUVBMDAwQkZCMUZCNjRCMTM1MkM2MjlFNkZDODAyNjAwMUU5MjdBNwotOjEwMUVCMDAwREMzMzI3NzIyNjY4NzAwNzg4MjAwNzg4MEM2NTgxRDg3NAotOjEwMUVDMDAwMjQ2MjlEQzA3NjY0NDFEMDJCMjAwQzBDQkMxMUE2Q0NBMgotOjEwMUVEMDAwMjhDMjg2QzA5RTc4OTMwMjYwMDFDODE5RUFCMTA5Qjk4OAotOjEwMUVFMDAwMEEyOTkyQTM5NDEwNjg5MDA3ODgyMDA5ODgwQzY1ODFCQwotOjEwMUVGMDAwQjIyNEMyODU2NDQxQUMyOTIwMDYyOTlDRjk2NDkxREY5MwotOjEwMUYwMDAwMkMyMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RUM2MDI5RAotOjEwMUYxMDAwNjAwMTk4MDlGODUwNjU4MTkyMUFFQUEzOEMzNjE5RUE5MwotOjEwMUYyMDAwQTEwQzg4MTQ4OTk0MEMwQzQ3MDlDQzEwQTg5OTBBOTkyMwotOjEwMUYzMDAwMDIxOEVBQjYyQTIxMDQ5OTQwOTg0MTg4MkExOUVBQjQ3RAotOjEwMUY0MDAwMEM4ODAyMDk4ODAyOTg0MjI4MzAyQzJDMzAxMzI5MzA0MgotOjEwMUY1MDAwMTIwNENDMTAwNjk5MTAwQzg4MTA5RjQ0MDhBODAyMEM5QgotOjEwMUY2MDAwOTkwMjA5ODgwMjk4NDM4RjM3OUY0NThDMzg5QzQ2ODk4RgotOjEwMUY3MDAwMzlDMEYxOTk0NzE5RUFBNzg4MzU5RjRCOTg0ODA4ODhENgotOjEwMUY4MDAwMTQwOTg4MDI5ODRBOEYzMDE4RUE5Nzc3RjczMkMwNzQ5QwotOjEwMUY5MDAwODkzMjhDMzM5ODRDOTc0RDBGOTc0MDg4MkIyRTQ2MTFFMQotOjEwMUZBMDAwMDY3NzExMkM0NjEzMjk0NjEyMDRBQzExMTlFQThEMDc0NQotOjEwMUZCMDAwQ0MwMkMxNzkwOTg4MDI5ODRFMDdDQzAyMkM0NjEwQzA4OQotOjEwMUZDMDAwN0FBREJDMENCQTExQTZBQTI5QTI4NTJFQzRDRjA5Nzk3NAotOjEwMUZEMDAwMEIyOUE2ODU2NTUwRkNDMDIwRDEwRjAwMkIyMDBDMENDRQotOjEwMUZFMDAwQkMxMTA2Q0MwODJGQzI4NjA5QjkwQTZGRjkwMjYwMDEzQwotOjEwMUZGMDAwMUUyOTkyQTM2ODkwMDgyRjIyMDAwOUZGMEM2NUYxMEY5QgotOjEwMjAwMDAwMkZDMjg1NjRGMTA5MjgyMDNEMDgyODQwNjQ4MDg0ODQxQgotOjEwMjAxMDAwMzUwNDg0MTQ2NDQwN0M4NUE1NzQ1Mzc3ODQzNjA0ODQyNQotOjEwMjAyMDAwMTQ2NDQwNkY3NDUzNkMyOTMwMTNDMDhDNzk4ODY0QzA3OQotOjEwMjAzMDAwOTAyOTI0NjcwOTA4NDc2NTgwREQ4ODIwODlBNDg0MzVCNAotOjEwMjA0MDAwMUFFQTZCMDQ4NDE0QTQ5NDBBNDQwMjk0RjAxNEVBNjYxNQotOjEwMjA1MDAwMDg4ODExMDQ4ODAyOThGMTg0MzY5OEYzMDQ4NDE0QTQ0MwotOjEwMjA2MDAwOTkwQTk5MDI5OUYyMUFFQTYyMjkyMTAyMjRDMjg1QURERAotOjEwMjA3MDAwQjgyRTg0Q0YyNDRDMTAyNEM2ODUwQTk5MDIyOTI1MDI0MwotOjEwMjA4MDAwQzAyMEQxMEYwMENDNTdEQTIwREIzMDhDMTE1ODEyMTQ0RAotOjEwMjA5MDAwQzAyMEQxMEZDMDkxNjNGRjk3REEyMEMwQjY1ODEyQTNCOQotOjEwMjBBMDAwNjNGRkUxMDBEQTIwNTgxMkExNjNGRkQ4OEExMDJCMjFDOAotOjEwMjBCMDAwMDQ1ODExMzgxREVBNDIyQjIwMENDMEUwMkUyNDY2OEZGNAotOjEwMjBDMDAwM0E2M0ZFNTQwMERBMjBEQjMwREM0MERENTA1ODEzMUQ0QgotOjEwMjBEMDAwRDJBMEQxMEYyQTJDNzQ4QjExNTgwQjIzRDJBMEQxMEY3MAotOjEwMjBFMDAwMjkyMTIzQzA4ODc5ODMwMjYzRkUyRDJBMTIwMDJDMjAyNwotOjEwMjBGMDAwNjYyQjIxMDQyQ0NDMDEwQzBDNDcyQzI0NjY1ODExMjU4RQotOjEwMjEwMDAwMURFQTJGMkIyMDBDQzBFMDJFMjQ2NjhGM0E2M0ZFMDhCOAotOjEwMjExMDAwREEyMDU4MTI4NjYzRkY2Q0RBMjA1QkZGMjBEMkEwRDE1MAotOjEwMjEyMDAwMEYwMDAwMDA2QzEwMEE5NTE2QzA2MUMxQjBEOTQwMkE5QQotOjEwMjEzMDAwMjAzREMwNDAwQkFBMDEwQTY0MzgyQTIwMDYyOTE2MDc1MAotOjEwMjE0MDAwNjhBODA1MkNBQ0Y5NjVDMzNCMURFQTE2Qzg0NDJGMTJEQwotOjEwMjE1MDAwMDY2NEYyOUIyNjIxMDIxRUVBMTI5NjE0MDYwNjRDNjVCRQotOjEwMjE2MDAwNjJERTE1RUEwRTY0NDBDRjhBMzUyOTMwMDM5QTE1MEFEQgotOjEwMjE3MDAwOTkwQzY0OTBDMjJDMjAwQzhCMTU5QzEyMENDQzExQTVEMAotOjEwMjE4MDAwQ0M5QzEzMkNDMjg2QjRCQjdDQjMwMjYwMDJDRThGMTJFRgotOjEwMjE5MDAwMEVGRTBBMkVFMkEzNjhFMDA4MjYyMjAwMEU2NjBDNjVGOQotOjEwMjFBMDAwNjJCQTg4MTMyODgyODU2NDgyQjI4OTE1NjQ5MDVFREFFNwotOjEwMjFCMDAwODBEOTMwOEMyMDFFRUEwQzFGRUEwRDFERTlGQThCMTUyMAotOjEwMjFDMDAwOERENEQ0QjA3RkI3MThCODhBMjkzQzEwODUzNjA4QzY5QwotOjEwMjFEMDAwMTEwRTY2MDI5NjgxMDU4NTE0QTVENTBGNTUwMjk1ODBDRQotOjEwMjFFMDAwMDQxODE0NkQ4OTI3ODg5NjA4Q0IxMTA4ODgxNDBFQkIzMwotOjEwMjFGMDAwMDJBOEQ4Mjk5QzIwMEY4ODAyOUJBMTk4QTA4ODkyOUJCNgotOjEwMjIwMDAwQTMwODg4MTRBOEQ4MEY4ODAyOThBMjJBQUMxMEMwRDBCRQotOjEwMjIxMDAwOEExNTFGRTlFQThFMTIxOUU5RjY4QjEzODgxNDJDQjI3RAotOjEwMjIyMDAwODUwOTg4MDJBRkVFMENBQTBCMkRFNENGMkFCNjg1MjhDQgotOjEwMjIzMDAwMjUwMkMwMjBEMTBGMDAwMDI2NTI5RTE4RTlENzZGNjhGMgotOjEwMjI0MDAwMDI2MDAyMEQyODgyMjY2ODgwMDk4OTIwRDMwRjA4OTkzMAotOjEwMjI1MDAwMEM2NTkxRkQyQTUyOURDMEZEOUExMTY0QTFGMzJCMjBCQgotOjEwMjI2MDAwMENDMUNBMENCODExMDU4ODA4MkQ4Mjg2MEVCRTBBN0RFNQotOjEwMjI3MDAwQzMwMjYwMDIwQTJFRTJBMzY4RTAwODI2MjIwMDBFNjY2RQotOjEwMjI4MDAwMEM2NTYxRkIyODgyODVERTgwNjQ4MjA3MjkyMDA2OTgyMAotOjEwMjI5MDAwMTAyOTlDRjk2NDkyMDQyQzIwNjY4ODMxQjFDQzBDMEM3NgotOjEwMjJBMDAwNDcyQzI0NjY2RUM2MDI2MDAxQkQwOEZENTA2NUQxQjc5QgotOjEwMjJCMDAwMTdFOURBMUNFOUJEMTlFOUM0MkEyMTA0OEIyRDI4MzA1RAotOjEwMjJDMDAwMTAyRDIxMUQwQzg4MTAwQkRCMDkwQTg4MDIwOTg4MDJEOQotOjEwMjJEMDAwMENCQjAyNjQ0MTU1ODkxMDlCOTA5NzkxOTg5Mjg0MzU2QwotOjEwMjJFMDAwRDlFMDY0NDA2RkQ3MzBEQjQwRDgzMDdGNDcxNTI3M0NCQQotOjEwMjJGMDAwMTBCQ0U5MjYzMjE2OEMzOTk2RTY5Q0U3OEEzNzI4M0NEMgotOjEwMjMwMDAwMDQyQUU2MDgwQjEzMTQ2NDMwNEEyQTgyMTY4Njc5OUE0NgotOjEwMjMxMDAwOTY5Njk3OEM3NzhBN0Q5Qzk4MkI4MjE3MkM3QzIwOUE5NgotOjEwMjMyMDAwOUEyQTlDMTg5Qjk5ODY3QkIwM0IyOThDMDg2REI5MjExMQotOjEwMjMzMDAwOEJDOTk2QTUyNjkyMTYyQUFDMThCODk5OUJBMTk2QTA4RgotOjEwMjM0MDAwOEJDNzg2Q0Q5QkEyMkI5MjE1OTZBNDlCQTM4NkNCMkNFNAotOjEwMjM1MDAwQ0MyMDI2QTYwNUMwMzQ2QjQ0MjAwNDNCMEMwNDQ4MDk1RAotOjEwMjM2MDAwMEU4ODBBN0ZCNzA1QzA5MDk5ODhCQzg4QzA5MDBCMUE2OAotOjEwMjM3MDAwMTI2REFBMDY5OTg4OTk4QjI4OEMxODFDRTlBODFCRTk2QwotOjEwMjM4MDAwQTgxNkU5OURCMUREMkEyMTFDMjNFNjEzMEQwRDRGMjY2OQotOjEwMjM5MDAwRTYxMjJEMjUxREMwNjA4NzIwN0RBOTA3QzBEMDI4MEEyMAotOjEwMjNBMDAwMDAyODI1MUQyNkU2MTcyQ0U2MTYyQkU2MTUwNUQ4MTE2NAotOjEwMjNCMDAwMUFFOTkzMjhFNjE4MEE3QTAyMkFFNjE0MjkyMDA2MjkzRgotOjEwMjNDMDAwOUNGOTY0OTEwNjJBMjAwQ0MwOTAxQkU5N0MwQ0FEMTE4RAotOjEwMjNEMDAwQTVERDJDRDI4NUFCQUFDMEIwMjlBNENGMENGQzBCMkM1OAotOjEwMjNFMDAwRDY4NURBMjA4QzE3MkQxMjA2NTgxMTBERDJBMEQxMEZFOAotOjEwMjNGMDAwOEEzNTZGQTU0NkQ4MzA4QkQ1NkRBOTBDOEE4NjBBOEE5NgotOjEwMjQwMDAwMTRDQkE3N0FCMzM1Mjg4QzEwQzA4MDI4MjQ2NzA4MEIxQQotOjEwMjQxMDAwNDc2NUIxMUNEQTIwREIzMDhDMTc1ODExMzFEM0EwQzBDRQotOjEwMjQyMDAwQzFDMEQwMkRBNDAzOUMxNjYzRkQyODAwODYzNjY0NjFDQwotOjEwMjQzMDAwMTY4OTEwOUI5MDk3OTE5ODkyNjNGRUExQzA4MTYzRkZDQgotOjEwMjQ0MDAwQzk4QTE2Q0NBN0RBMjBEQjMwOEMxNzU4MTEyNUMwMjA5QQotOjEwMjQ1MDAwRDEwRkRBMjBDMEI2NTgxMUI1NjNGRkU0MDBEQTIwOEI0MwotOjEwMjQ2MDAwMTI1ODExQjI2M0ZGRDkwMDlGMTg5RTE5OEExMTJCMjFBRgotOjEwMjQ3MDAwMDQ1ODEwNDg4RTE5OEYxOEMwQjAyQjI0NjY2M0ZFMkZBNQotOjEwMjQ4MDAwQzA4MDYzRkUwMURBMjBEQjMwOEMxN0RENTA1ODEyMkQzRQotOjEwMjQ5MDAwRDJBMEQxMEZEQTIwNTgxMUE1NjNGRkE0MkQyMTIzQzBBQgotOjEwMjRBMDAwQzg3REMzMDI2M0ZFMDg5RjE4OEExMTJCMjEwNDJDMjBDQgotOjEwMjRCMDAwNjY5ODE5QjFDQzBDMEM0NzJDMjQ2NjU4MTAzNjhFMTkyRQotOjEwMjRDMDAwOEYxOEMwRDAyRDI0NjY2M0ZERTUwMDAwMjYyMTIzQjBCRgotOjEwMjREMDAwNjYwNjA2NEYyNjI1MjM2NTZFRUEyODIwNkE3Rjg3MDU1MwotOjEwMjRFMDAwMDgyOTQxNjQ5MEZEQzBEMDFCRTkzRjE5RTk0RTI2MjAyMAotOjEwMjRGMDAwMDcyM0U2MUJCMTY2MDk3QTAyMkJFNjFBMjgyMDBBMkQ2QgotOjEwMjUwMDAwRTYxRDJBRTYxRTA5ODgwMjI4RTYxQzg4MjYwNjA2NDdEQwotOjEwMjUxMDAwMjhFNjIwOEIyODI2RTUzRTJCRTYyMTJEMjQwNzJDMjBCQgotOjEwMjUyMDAwMDYyQTIwNjQyQ0NDRkQ2NEMwOURCNEZGNjNGRTk1MDA5OAotOjEwMjUzMDAwMDBEQjMwREEyMDhEMTZDMENFMkUwQTgwMkMyNDY4OEM2OQotOjEwMjU0MDAwMTc1ODEwNzJEMkEwRDEwRjhFMTAyNjMyMTYxRkU5MTUxRgotOjEwMjU1MDAwMDYyNjE0OEZGNjJCRTYxMjk3RTEyN0U2MTMyOEU2MTREOQotOjEwMjU2MDAwQTZGRjBDRkYwMjlGRTBDMUY2MkVFQzQ4MjZFQ0MwNjRFQgotOjEwMjU3MDAwNkQ2Qjg0MzVDMDgwNjQ0RERCRDlFMERDMzBEQkUwRERBMQotOjEwMjU4MDAwMzBCMTg4MTRFOTI5ODZDOThBQzgyNzlERkYyQ0NDMTA1MAotOjEwMjU5MDAwMjk5QzEwMkE3NjMyMkE3NjMwMDQ2NDAxMUFFOTI0MjQxMAotOjEwMjVBMDAwNzYzMUFBNDQyNDc2MzMyQUQyMTYxN0U5MjE5QUI2MDczRgotOjEwMjVCMDAwNjYwMTk2Qjc4NEMzQkNCQjk0QjU4NDM1QjRERDc0ODMxRgotOjEwMjVDMDAwQkYyRDIxMUQ2M0ZEOEQwMDY0QUY1RTFERThGNjJDMjAzQwotOjEwMjVEMDAwMTY4REQyMEFDQzBDMDBEMTA0MDBDQzFBQUNCQzlDMjlCQwotOjEwMjVFMDAwNjNGRjQ2MDAyQjIxMDQ2RUI4MjIyQzIwNjZCOENDMEM2OQotOjEwMjVGMDAwMEM0NzJDMjQ2NkM5QzQ5RjE4OUUxOThBMTE1ODBGRTVGMAotOjEwMjYwMDAwOEUxOThGMThDMDM0ODcyMEMwRDAyRDI0NjZDMDY4MjY0QwotOjEwMjYxMDAwMjQwNjYzRkVEMDAwMDAwMDZDMTAwODI5MjAwNjI4OUNDOAotOjEwMjYyMDAwRjg2NTgyQzMyOTIxMDJDMEFBMDkwOTRDNjU5MEU2MkJFRQotOjEwMjYzMDAwMjAwQzE2RThEQTBDQkMxMUE2Q0MyRUMyODZDMUQyN0VDNAotOjEwMjY0MDAwRDMwMjYwMDI4RTE5RThENjA5QjkwQTI5OTJBMzJBMTY4NAotOjEwMjY1MDAwMDI2ODkwMDc4QTIwMDlBQTBDNjVBMjc3MjlDMjg1NjRCRQotOjEwMjY2MDAwOTI3MTJCNjI5RTFBRThDQzZGQjgwMjYwMDI2RTJBQTJBOQotOjEwMjY3MDAwMjYyOTE2MDE2OEEwMDgyQjIyMDAwQUJCMEM2NUIyNUM1MwotOjEwMjY4MDAwMjk2MjlEQzE4QzY0OTI1NDJBMjEyMDBBODA2MDk5MTA4RAotOjEwMjY5MDAwMkMyMDNDQzdFRjAwMEYzRTAxMEIzRUIxQkQwRkRCMzlENAotOjEwMjZBMDAwMEJCQjA5OEYyNjBEQkQxMTJEREMxQzBEMEQ0MTBFREQ2MAotOjEwMjZCMDAwMDM4RTI3QjFERDBEMEQ0MTBGRUUwQzBEQkIwQjJCQkNCNgotOjEwMjZDMDAwMUMwQkI3MDI3RUM3MUMyQzIxMjU3QkNCMTYyRDFBRkNCOAotOjEwMjZEMDAwMENCQTBDMERBMTYwMDAwOTNFMDEwNzNFQjE3ODA5ODdENAotOjEwMjZFMDAwMzkwQjc3MEE3N0VCMDI2MDAyMDYyQjIxMjMyODIxMjE4MAotOjEwMjZGMDAwQjFCQjBCMEI0RjJCMjUyMzdCOEIyOUIwQkQyRDI1MjM4NQotOjEwMjcwMDAwQzg1NURBMjBEQjMwNTgwRkYwMjkyMTAyQ0M5NkMwRThGQQotOjEwMjcxMDAwMEU5RTAyMkUyNTAyQ0M1N0RBMjBEQjMwREM0MDU4MTAwQQotOjEwMjcyMDAwNzBDMDIwRDEwRjJDMjA2Njg5MzFCMUNDMEMwQzQ3MkMwNQotOjEwMjczMDAwMjQ2NjZFQzYwMjYwMDFDRjA5RkQ1MDY1RDFDOTJGMEExQgotOjEwMjc0MDAwMDEyODMwMTEyOTIyMTQ2NDgwMTEyQTIyMUIwOTBDNDQwQgotOjEwMjc1MDAwMDBDMTA0MDBGQjFBMEJBQTAyMkEyNjFCMkQzMDEwQzA1MAotOjEwMjc2MDAwQTBDMEUwODgzMDFCRTg4Rjk0MTM5NTE0MjQwQTAxMjUzQgotOjEwMjc3MDAwMjAzQzJCQjAyMjA4OEMxNDc3ODcwNEMwRjEwQkZBMzg2OAotOjEwMjc4MDAwQzBGMkMwODQwODU4MDEwRjVGMDEwRjRFMzgwNTM1NDA3NAotOjEwMjc5MDAwMDdFRTEwQzBGMDA4NEYzODA4RkYxMDBGRUUwMjI4RENEQgotOjEwMjdBMDAwRkVDMEYwMDg0RjM4ODQyQjBCQTgxMDBBRkYxMDJBMjExNgotOjEwMjdCMDAwMjAwRjg4MDIwRTg4MDIwODQ0MDIxOEU4OUU4RjExMDgzNAotOjEwMjdDMDAwNDQwMjI4MjEyNTBBMkExNDA4MjgxNDA0ODgxMTBBODg5QQotOjEwMjdEMDAwMDIyQTIxMDQ5NEYwOEUyMDA0RDQxMDA4RUUxMTA0RUU5NQotOjEwMjdFMDAwMDJDMDRBMDRFRTAyOUVGMTg0MkEwOEFFMTEwRURFMDJGNwotOjEwMjdGMDAwOTRGNDBBNTQxMTBFNDQwMjA1NTUxMDBDMUU0MDk0RjcyRgotOjEwMjgwMDAwMDdFRTEwMEU1NTAyMDg1NTAyQzA4MTk1RjY4NDMzQzBCQwotOjEwMjgxMDAwNTA5NEYzQjE5NDhFMzI5NUY4OThGOTlFRjJDMDgwQzEyRAotOjEwMjgyMDAwRUMyNDI2MTQ5OEZCOUVGNTk5RkE4NTM4OTVGQzg0M0E5OQotOjEwMjgzMDAwOTRGRDhFM0I5RUZFODgzOTk4RkY4NTM1MjVGNjEwODRFMQotOjEwMjg0MDAwMzY4NTE0MjRGNjExOEUzNzg0MTMyRUY2MTJDMEUwNjRGOAotOjEwMjg1MDAwQjA0OTg5MzA3Nzk3NDQyQjMwMTA4ODMzOEMxMTFGRThBQQotOjEwMjg2MDAwNjE4RDMyMkZDNjE0QzBGNDJGQzYxNThGMkIyRUM2MTlCQQotOjEwMjg3MDAwMkRDNjFBMjhDNjFCMDRBRDExMDk5ODQwMDY4ODExMDhGOAotOjEwMjg4MDAwREQwMjBEQkIwMjE4RTg1NkMxRDAwREJCMDIwOEZGMDJFNQotOjEwMjg5MDAwMkZDNjE2MkJDNjE4MjgwQTBFMjgxNjAyMkIyMDBDODhDNQotOjEwMjhBMDAwMTIxQ0U4NDYwQ0I5MTFBNjk5MkE5Mjg1QUNCQjJFQjQyRAotOjEwMjhCMDAwQ0YwQTg4MEIyODk2ODVDOTcxOEIyNjhBMjkwN0JCMDgwMQotOjEwMjhDMDAwMkIyNjA2MEJBQTBDMEEwQTQ4MkEyNTI1NjU1MDQ4QzA2MwotOjEwMjhEMDAwMjBEMTBGMDBEQTIwNTgxMDk1NjNGRTM5MDBEQTIwQzBBRAotOjEwMjhFMDAwQjY1ODEwOTI2M0ZFMkUwMDY4OTczOEMwMjBEMTBGMDBCMgotOjEwMjhGMDAwMDBEQTIwREI3MDU4MTA0RkMwQzBDMEQxMEFEQTM5MEFBNAotOjEwMjkwMDAwREMzODY1Q0RFNDYzRkUwRDhBMTAyQjIxMDQ1ODBGMjFCRAotOjEwMjkxMDAwQzBFMDJFMjQ2NjYzRkUyNURCNDAyQTJDNzQ1ODA5MTI4MQotOjEwMjkyMDAwRDJBMEQxMEZEQTIwNTgwRjI2NjNGQ0Y3NkMxMDA0QzAzOAotOjEwMjkzMDAwMjBEMTBGMDA2QzEwMDQyNzBBODAxQ0U4M0YxREU4M0ZERgotOjEwMjk0MDAwMUFFODE3MEMyOTExQUE5OTJBMkNGQzJCOTI4NTBEQUE5QQotOjEwMjk1MDAwMDI5Q0IxOUFCMEMwNTExM0U4M0MyODkyODUxNkU4MzgyMQotOjEwMjk2MDAwMTRFODM5QTYyNjA0MjQwQUI4ODgyODk2ODUyMzQ2OTFCNwotOjEwMjk3MDAwQTc2NjI1NjQ5RkQxMEYwMDZDMTAwQUQ2MzAyODMwMTA0RQotOjEwMjk4MDAwMjkyMDA2Mjg4Q0Y5NjQ4Mjk3Njg5ODBCMkE5Q0Y5NjU5RgotOjEwMjk5MDAwQTFCMjAyMkEwMjU4MEYwQTg5MzcxQkU4MDJDODkxNjRDMwotOjEwMjlBMDAwNTIwRTJBMjEwMjBBMEM0QzY1QzI1NThEMzAxOUU3RkJFNAotOjEwMjlCMDAwNzRENzA1MkUyMTIzNjVFMjlBMkY5MjlFMUFFN0Y3NkZBRQotOjEwMjlDMDAwRjgwMjYwMDI1MDJBQTIyNjY4QTAwODJDMjIwMDBBQ0MzNQotOjEwMjlEMDAwMEM2NUMyNDEyQTkyOUQ2NEEyM0I5QTE1MUZFN0YxOERCNgotOjEwMjlFMDAwNjdDMUU2QzhERDJCNjIwNjE4RTdFRjY0QjAwNTI4ODBGMgotOjEwMjlGMDAwMjE3QjhCNDMyQjIwMEMxOEU3RTkwQ0JDMTFBOENDMjlCOAotOjEwMkEwMDAwQzI4Njc5RUI0NjBGQkUwQTJFRTJBMzY4RTAwNTJGMjJBQwotOjEwMkExMDAwMDA3RUY5MzcyQ0MyODU5QzE4NjRDMjJGMkIyMTJGODc4QQotOjEwMkEyMDAwNjYwQjdCMzYwQjc5MEM2RjlEMjY2RUQyNDYyQzIwM0RCMwotOjEwMkEzMDAwN0JDNzQwQ0U1NTYwMDAxRTJBMjAwQ0MxQjI4QzIwNThBNgotOjEwMkE0MDAwMTA2RjlBMTg2NEEyNDE4RDY3NjNGRkNGQzBDMDYzRkYwNwotOjEwMkE1MDAwQzVEN0IwNjNGRkQzMDBDMEUwNjAwMDAyMkU2MDAzMEU1NAotOjEwMkE2MDAwREIwQzZFQjIwRURDNzAwQ0VBMTFBQTZBMkFBQzIwNTg5QwotOjEwMkE3MDAwMDE5OEQ3QTBEQTIwREI3MEMxQzgyRDIxMjA1ODEwMTU4RAotOjEwMkE4MDAwOEMyNjhCMjc5QTE2MENCQjBDN0FCMzM0OEYxODg5NjM2QgotOjEwMkE5MDAwOTlGMzg4NjI5OEYyOEU2NTlFRjgyRDYwMTA4QTE4OUREMQotOjEwMkFBMDAwMTc2OEQ3MjlDMEQwOURBOTJDMjIxODJCMjIxMzlDQUJDNAotOjEwMkFCMDAwOUJBQTk3QTU4RTY2N0U3MzAyNjAwMDk3Q0Y1ODYwMDAzMAotOjEwMkFDMDAwMUZEQTIwOEIxNjU4MEZEQjY1QTEzNTYzRkZCREMwODE2RgotOjEwMkFEMDAwQzA5MDhGMThDMEEyOUFGOTk5RkI5OEZBOTdGNTYzRkZGNgotOjEwMkFFMDAwRDJEQjMwREEyMERDNDA1ODBGN0VDMDUxRDZBMEMwQzAwNwotOjEwMkFGMDAwMkJBMDEwMkNBNDAzOUIxNzJDMTIwODAyMkEwMjA2NkI5MQotOjEwMkIwMDAwMDJERjcwMkQ2MDAzOEUxNzlEMTQ5RTEwMENERDExQzAyNgotOjEwMkIxMDAwRTBBRDZEMkREQzIwNTgwMTE3OEMxNDhCMTZBQ0FDMkM1RAotOjEwMkIyMDAwNjQwMzhBMjY4OTI5QUJBQTBBOTkwQzlBMjY4ODY2MDkyMQotOjEwMkIzMDAwMDk0ODI5MjUyNTA3ODgwQzk4NjYyRjIyMThBN0ZGMkZGQQotOjEwMkI0MDAwMjYxODYzRkU5NkRBMjBEQjMwREM0MERENTA1ODEwN0QxRAotOjEwMkI1MDAwRDJBMEQxMEZDMDMwMkMyMDY2ODk2MUIxQ0MwQzBDNDdCQgotOjEwMkI2MDAwMkMyNDY2NkVDNjAyNjAwMENFQzAzMDA5RkQ1MDY1RDBEMAotOjEwMkI3MDAwQzY4RTY3NjRFMDY5NjQ3MDY2REI2MDhDMThERjcwREFBQgotOjEwMkI4MDAwMjAyRDYwMDM4RTE3MENERDExOUUxMEFENkQyRERDMjAwNQotOjEwMkI5MDAwMUVFN0E3NTgwMEY4MjMyNjE4REEyMDhCMTZEQzQwMkZGMgotOjEwMkJBMDAwMjIxM0RENTBCMUZGMkYyNjEzNTgwRjFERDJBMEQxMEZENQotOjEwMkJCMDAwMDAyODIwM0QwODQ4NDA2NThERTc2Rjk1M0VEQTMwOEQ0RQotOjEwMkJDMDAwQjU2RDk5MEM4Q0E4MEM4QzE0Q0FDRjdDRDMyRDJBQUM3MwotOjEwMkJEMDAwMTBDMDkwMjkyNDY3MDkwRDQ3NjREREM1NjAwMDhFMDA5MAotOjEwMkJFMDAwMkMxMjA4MDY2QjAyMkQ2QzIwMDc3RjAyOEUxN0RBMjA0QwotOjEwMkJGMDAwOUUxMDFFRTc4RTU4MDA3QzYzRkY5QTAwQzA5MTYzRkYxMQotOjEwMkMwMDAwRDE2NTUwODBEQTIwREI2MERDNDA1ODBGMzVDMDIwQzAzMQotOjEwMkMxMDAwRjAyRkE0MDNEMTBGREEyMEMwQjY1ODBGQzQ2M0ZGRTAzMQotOjEwMkMyMDAwMDA2Rjk1MDI2M0ZENzBEQTIwREIzMERDNDBERDUwQzRCQwotOjEwMkMzMDAwRTA1ODBFQjZEMkEwRDEwRjhBMTUyQjIxMDQ1ODBFNTU5QwotOjEwMkM0MDAwMjMyNDY2Mjg2MDEwOTgxNzYzRkYyNTAwREEyMDU4MEZBOAotOjEwMkM1MDAwQjc2M0ZGQUNDODU4REIzMERBMjA1ODBFOUIyQTIxMDIzQwotOjEwMkM2MDAwNjVBRjlEQzA5NDA5QTkwMjI5MjUwMjYzRkY5MkRCMzA1QwotOjEwMkM3MDAwREM0MERENTBDMEEzMkUwQTgwMkEyNDY4REEyMDU4MEVEQQotOjEwMkM4MDAwQTNEMkEwRDEwRkMwMjBEMTBGREEyMDJCMjAwQzU4MEZENwotOjEwMkM5MDAwQzA2M0ZGNkM2QzEwMDQyODIwMDZDMDYyMjg4Q0Y4NjVBNQotOjEwMkNBMDAwODEyNUMwNTBDN0RGMkIyMjFCQzBFMTJBMjA2QjI5MjFDMAotOjEwMkNCMDAwMjMwMEExMDRCMDk5MjkyNTIzQjFBQTAwRUMxQTBCQzQ2MgotOjEwMkNDMDAwMDEwQTBBNDQyQTI0NkIwNEU0MzkwRENDMDMwQ0JCMDEyRAotOjEwMkNEMDAwMkIyNjFCNjQ0MDY5MjkyMDBDMUJFNzMwMEM5QTExMEIzMgotOjEwMkNFMDAwQUEwODJGQTI4NjFCRTcyRTZGRjkwMjYwMDBCNjBCOUI4NQotOjEwMkNGMDAwMEEyQkIyQTM2OEIwMDgyQzIyMDAwQkNDMEM2NUMwQTQzMAotOjEwMkQwMDAwMkJBMjg1MUNFNzUyNjRCMDlCODgyQjJGMjEwNDBDODhEMgotOjEwMkQxMDAwMDI5OEIwODQyMEMwODUwODQ0MTEwODQ0MDI5NEIxODQwQwotOjEwMkQyMDAwMkEwOEZGMTE5NEI0OEUzNDlGQjc5RUI1QzA0MDFERTdBQQotOjEwMkQzMDAwMjMyRUEyODUwRDlEMDgyRUVDMjgyRUE2ODUyNUQ0Q0YwNgotOjEwMkQ0MDAwMjkyMTAyMDkwOTRDNjg5NDFBNjg5ODIwQzk0MDJBMjE0RgotOjEwMkQ1MDAwMDI2NUEwMEIyQTIyMUUyQjIyMUQ3QUIxMDI2NUEwNzlFMgotOjEwMkQ2MDAwQzAyMEQxMEYyQzIxMjM2NUNGREU2MDAwMDgyRTIxMjE0OQotOjEwMkQ3MDAwMkQyMTIzN0VEQkQ1MkIyMjFFMkYyMjFEMjUyNTAyN0IxNAotOjEwMkQ4MDAwRjkwMUMwQjA2NEJGQzQxM0U3MDQyQ0IwMDcyOEIwMDAzOQotOjEwMkQ5MDAwREEyMDAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVCMgotOjEwMkRBMDAwQUZFNzYzRkZBNjJBMkM3NEMwQjAyQzBBMDI1ODBEOEQyMQotOjEwMkRCMDAwMUNFNzI4OUNBMDhCMjAwOEJCMTEwNkJCMDI5QkExODlBNQotOjEwMkRDMDAwMzQ5OUEyNjNGRjc5MDAwMDI2MjQ2OERBMjBEQjMwREMyNgotOjEwMkREMDAwNDBERDUwNTgwRkRDRDJBMEQxMEZEQTIwMkIyMDBDNTg0OAotOjEwMkRFMDAwMEY1M0MwMjBEMTBGMDAwMDZDMTAwNjA3M0QxNEMwODBBNwotOjEwMkRGMDAwREMzMERCNDBEQTIwQzA0N0MwMjEyM0JDMzAwMzI4Mzg1OAotOjEwMkUwMDAwMDgwODQyNzc0MDAyMkREQzAxNjQ4MTU3MUVFNkUwMTk3NAotOjEwMkUxMDAwRTZFMTI5RTY3RTZEREEwNTAwNTA4ODAwMzA4Q0MwRTBERQotOjEwMkUyMDAwQzAyMDI1QTAzQzE0RTZERkI2RDM4RkMwQzBEMDBGODdFQQotOjEwMkUzMDAwMTQyNDQwMjIwRjg5NDA5NDEwNzdGNzA0QzA4MTA0ODI0MwotOjEwMkU0MDAwMzhDMEYxMEIyODEwQzA0NEMwMjIwNDU0MDEwNEZEMzhERQotOjEwMkU1MDAwMDI1MjAxMDJGRTM4MDhERDEwODIxQzA3RUUxMDBFNkVEMQotOjEwMkU2MDAwMDIwRUREMDIyNDJDRkVDMEUwMDRGRTM4MEFFRTEwMEUzNQotOjEwMkU3MDAwODgwMjBEODgwMjhEQUIxRUU2Q0YwOEQ4MDIwRTg4MDJBQwotOjEwMkU4MDAwOThCMEMwRTgwNDI4MTAwRTVFMDE4NEEwMjVBMTI1MDg5MgotOjEwMkU5MDAwNDQxMTA4NDQwMjA1MjUxNDA0NTUxMTA0MzQwMkMwODE2QwotOjEwMkVBMDAwMEU4RTM5OTRCMThGQUE4NDEwOUZCNDc1NjYwQTI2QTEzQwotOjEwMkVCMDAwMUZDMEYyMDYyNjE0NjAwMDA3MjZBMTIwQzBGMjA2MjZENQotOjEwMkVDMDAwMTQwNTY1MDIwRjc3MDEwNzg3MzkwNUU2MTAwNzc4MTBBQQotOjEwMkVEMDAwMDg2NjAyMDY1NTAyOTVCNjI1QTEwNDBBRTYxMTA4NThBRgotOjEwMkVFMDAwMTEwODI4MDIwODY2MDI5NkI3QzA2MDY0NDA1NjY0OTBENAotOjEwMkVGMDAwNTMwNjdFMTFDMEY0ODlDMjg4QzMwQjM0MEI5NjQ1OThFMwotOjEwMkYwMDAwNDc5OTQ2MThFNkI3OUY0MTA0NTkxMTBFOTkwMjFGRTZFQQotOjEwMkYxMDAwQjUwMjBFNDcwOEQ4MDI5RjQwOTg0MjBFOTkwMkI0Mzg3NQotOjEwMkYyMDAwQzFFMDBFOTkwMjk5NDQyRkEwMEMwQ0Y5MTExNEU2QTNFQwotOjEwMkYzMDAwMUVFNjlCQTRGRkFFOTkyRTkyODUyNkY0Q0YwRTg4MEIzOQotOjEwMkY0MDAwMjg5Njg1RDEwRjJCQTAwQzBDQkUxMTFDRTY5QzFGRTYwOQotOjEwMkY1MDAwOTNBQ0JCQUZFRTJERTI4NTI2QjRDRjBEM0QwQjJERTYzNQotOjEwMkY2MDAwODVEMTBGMDBDMDgwMDUyODM4Nzg0ODAyNjNGRUE1NjMyQwotOjEwMkY3MDAwRkU5OTAwMDA2QzEwMDZDMEIwQzBBNkMwQzA2NTcwRjAxRAotOjEwMkY4MDAwODgzMEMwMzAwODg3MTQwODg4NDA2NTgwRDNDMEUwQzAwRQotOjEwMkY5MDAwOTFDMEQ0QzA4MjI1MjAzQzBCM0YxMDk3MTI4MzFDQzBFNwotOjEwMkZBMDAwNzAwODU4MDEwRDVEMDEwODk3MzhDMDgwMEI5ODM4MDdFQwotOjEwMkZCMDAwNzcxMDA0ODgxMDA4NjgwMjA4NzcwMkMwODAwRDk4MzhERQotOjEwMkZDMDAwMkQzQ0ZFMDg4ODEwMEQ5RTM4OEQyQjBBRUUxMDA4RUU2MQotOjEwMkZEMDAwMDIwN0VFMDIwQ0I4MTAwRkREMDIwNTNCNDAwRUREMDJDOQotOjEwMkZFMDAwOUQ0MDg5MjAwNDNEMTAwODk5MTEwRDk5MDIyRDIxMDQ1RQotOjEwMkZGMDAwMDlBOTAyMDhERDExOTk0MTg3MkEwNUI5MTAwRDNEMDI4MgotOjEwMzAwMDAwMEFCQjExMERCQjAyMDg3NzAyOTc0NDI4MjEyNTg3MTJCRAotOjEwMzAxMDAwMDgyODE0MDQ4ODExMDcxRTQwMDdFRTEwMEU5OTAyNzU0NwotOjEwMzAyMDAwNjYwOTI2MjExRjA2MjYxNDYwMDAwNjAwMjYyMTIwMDZCOAotOjEwMzAzMDAwMjYxNDA4NjgwMjlCNDcwOTg4MDI5ODQ2MjkyMDBDRDI2QQotOjEwMzA0MDAwQzBDMDgwMEM5RTExMUJFNjVEMUZFNjU0QUI5OUFGRUUyRAotOjEwMzA1MDAwMkRFMjg1Mjg5NENGMERBRDBCMkRFNjg1RDEwRjAwMDAxNAotOjEwMzA2MDAwMDAxRkU2NTAyRkYwMjJDMDMwNjVGRjIwQzAzMTYzRkYwMwotOjEwMzA3MDAwMUJERDQwOEU1MUNBRTAwRTc4MzY5ODEwMDg3NzBDQjJFRQotOjEwMzA4MDAwQUFCMUJCOEY1MDJEREMxMDk4RDk5RkQ4ODk1MzhGNTI4RAotOjEwMzA5MDAwOTkxMTk5REI5RkRBN0U4MzBBQjFDQzI1NUMxMEM5NzgzRgotOjEwMzBBMDAwNjNGRkNGMDA4ODEwOEQxMTA4RTcwQzk3NTFBRDhERDdDNQotOjEwMzBCMDAwRjA3OERCMDFCMUY3OUQ1Mzk3NTI4ODMwQzAzMDA4ODcxNAotOjEwMzBDMDAwMTQwODg4NDA2NDhFQzU2NUJGQTE2M0ZGOTMwMDAwMDBBQgotOjEwMzBEMDAwNkMxMDA0RDcyMEIwM0E4ODIwQzAzMDgyMjFDQUExNzQ3NQotOjEwMzBFMDAwMkIxRjI5NzIwNDZEMDgwRkM5ODFDOTkyODU3NUIxMzNGMAotOjEwMzBGMDAwQTI1MjdBM0IwQzc0MkIwOTYzRkZFOTAwMDA2NDlGRUIzQQotOjEwMzEwMDAwRDEwRkQyNDBEMTBGMDAwMDZDMTAwOEQ2MzBDMDcwOTU5RQotOjEwMzExMDAwMTVEQTQwOEUzOTE0RTYyMzlBMTQ2NEUwMDI2NDUxRjhGQgotOjEwMzEyMDAwMjkyMDA2MkE5Q0Y4NjVBMjVCMkEyMTAyMEEwQjRDNjUxRAotOjEwMzEzMDAwQjIxQjJDMzIwMDE1RTYxOTc0QzcwNTJEMjEyMzY1RDM2NwotOjEwMzE0MDAwMjAyRTUyOUUxQUU2MTU2RkU4MDI2MDAyMTcyQUEyMjY2OAotOjEwMzE1MDAwNjhBMDA4MkIyMjAwMEFCQjBDNjVCMjA4MkU1MjlEMURFOAotOjEwMzE2MDAwRTYxMDY0RTFGRjhCMzg2NEIyMjk5RTE2QzhCQzhENjlGNQotOjEwMzE3MDAwMUVFNjBENjREMDA1MkVFMDIxN0JFQjQ5MkUyMDBDMThCNQotOjEwMzE4MDAwRTYwNzBDRUYxMUE4RkYyOUYyODZDMTg2Nzk4QjRBMTc1MgotOjEwMzE5MDAwRTYwNDA3RTcwQTI3NzJBMzY4NzAwNDg4MjA3Nzg5Mzk1NAotOjEwMzFBMDAwMjVGMjg1NjQ1MjlFMjcyMTJFMDdCNzM2MDdCOTBDNkY4QQotOjEwMzFCMDAwOUQwMUQ3QjA4OTY5NkU5MjQyMjgyMDNEN0I4NzNDOEE2OQotOjEwMzFDMDAwMTVDREFGNjAwMDE4QzFCMjhDMjAyQTIwMEM1ODBFOEI5MAotOjEwMzFEMDAwRDVBMDY0QTJBODhCNjg2M0ZGQ0JDMDUwNjNGRkMzQzBCNwotOjEwMzFFMDAwRTA2MDAwMDIyRTYwMDMwRTlCMEM2RUIyMEVEQzcwMENEMQotOjEwMzFGMDAwRUExMUFBNkEyQUFDMjg1QkZGQjZEN0EwREEyMERCNzBGNgotOjEwMzIwMDAwQzFDNDJEMjExRjU4MEUzMzhDMjY4QjI3RDRBMDBDQkI5NAotOjEwMzIxMDAwMEM3QUIzMjU4QTYzQzA5MDlBNTM4ODYyOTk1ODk4NTI2MQotOjEwMzIyMDAwOEY2NTlGNTk4RTY3OUU1QjhENjY5NzU1OUQ1QThCNjhGQgotOjEwMzIzMDAwN0I3Qjc0OEIxNUNFQjM2MDAwMEREQTIwREI0MDU4MEQxQwotOjEwMzI0MDAwRkQ2NUExMDk2M0ZGQ0MwMERBMjBEQjMwOEMxNDU4MEQzQQotOjEwMzI1MDAwQTRENkEwQzBDMEMwRDE5RDE1MkNBNDAzREEyMERCNjA4OQotOjEwMzI2MDAwREY3MERDNTBDMEUwMjU2MDAzOUUxMDFFRTVFNjBDNURCQgotOjEwMzI3MDAwMTFBRDZEMkREQzI4NUJGRjNGOEU2NkE1QTg4RjY3MjhGQQotOjEwMzI4MDAwNjQwM0FGN0Y3N0ZCMDFCMUVFOUU2NjlGNjc4RDI2OEM0RQotOjEwMzI5MDAwMjlBNEREMERDQzBDOUQyNjhCNjgwQzBDNDgyQzI1MjUxMwotOjEwMzJBMDAwMDdCQjBDOUI2ODYzRkVDMzJDMjA2Njg5NjFCMUNDMEMwNAotOjEwMzJCMDAwMEM0NzJDMjQ2NjZFQzYwMjYwMDBCNDA5RkQ1MDY1RDAzMAotOjEwMzJDMDAwQUVDQkJCOEU2OUNCRTdEQjYwREM1MERGNzBEQTIwMUU1MwotOjEwMzJEMDAwRTVFMTJENjAwM0MwODA5ODEwMENERDExQUQ2RDJEREM5MwotOjEwMzJFMDAwMjg1QkZGMjQ4QjE1Qzg0RjhBMjY4OTI5QTRBQTlBMjYxMQotOjEwMzJGMDAwMEE5OTBDMDkwOTQ4MjkyNTI1NjVCMTNCQzAyMEQxMEY0MQotOjEwMzMwMDAwREI2MDJENkMyOERGNzBEQTIwQzBDMDFFRTVEMjlDMTA3NwotOjEwMzMxMDAwREM1MDVCRkVCNTYzRkZDQjAwMkQyMDNEMEQ0RDQwNjVCRAotOjEwMzMyMDAwRERGRDZGRTUyMkRBMzA4RjQ1NkRFOTBDOEVBQTBFOEUzOQotOjEwMzMzMDAwMTRDOUUzN0VGMzExMkFBQzEwQzA5MDI5MjQ2NzA5MEY0OQotOjEwMzM0MDAwNDc2NEZEREI2MDAxNDEwMEMwOTE2M0ZGRUQwMDg4MTUxQgotOjEwMzM1MDAwNjU4MTRDREEyMERCNjA4QzE0NTgwRDYxQzAyMEMwOTA3MAotOjEwMzM2MDAwMjlBNDAzRDEwRkRBMjBDMEI2NTgwREYwNjNGRkRFMDBBOAotOjEwMzM3MDAwOEExNjJCMjEwNDU4MEM4N0MwQTAyQTI0NjY4QjY4NjMwOAotOjEwMzM4MDAwRkYzRTAwMDAwMDJCOUNGOTY1QjBDNURBMjA1ODBDOEM3QwotOjEwMzM5MDAwNjNGRDk1MDAyQjIwMEMwQ0JBMTFBNUFBMkZBMjg2QzFBMwotOjEwMzNBMDAwQzI3RkMzMDI2MDAwRkMwREI5MEEyOTkyQTM2ODkwMDc4RQotOjEwMzNCMDAwOEMyMDA5Q0MwQzY1QzBFQjI2QTI4NTY0NjBFNTJDMjAyRQotOjEwMzNDMDAwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjZGQzYwMjcwOTYwRQotOjEwMzNEMDAwMEFEQUUwMkIyMTA0NTgwQzZGMjcyNDY2ODkzMDc3OTc4RQotOjEwMzNFMDAwNEIxOEU1N0YxREU1ODA4QTMyOEIzM0MwRjQyQzIxMDQxNQotOjEwMzNGMDAwMDk5RTQwMDZFRTExMDRDQzExMEVDQzAyOUY2MUMxRTA4MwotOjEwMzQwMDAwMEVDQzAyOUQ2MDhGMkI5QTY2OUI2NzlDNjQ5NzY1MDgyMwotOjEwMzQxMDAwRkYwMjlGNjIyRjIwMEMxOEU1NjkwQ0ZFMTFBNUVFMkQwRQotOjEwMzQyMDAwRTI4NUE4RkYyN0Y0Q0YyRERDMjAyREU2ODU4RjE1NjVEQQotOjEwMzQzMDAwRjA5MUMwMjBEMTBGMDAwMDJBMkM3NDhCMTQ1ODA2NEEzQQotOjEwMzQ0MDAwRDJBMEQxMEYwMERBMjBEQkUwNTgwREI4NjNGRUZFMDBGOQotOjEwMzQ1MDAwMDBEQTIwREIzMDhDMTQ4RDE1NTgwRTNBRDJBMEQxMEYzMwotOjEwMzQ2MDAwMDAwMDg4MTVDODg4REEyMERCMzA1ODBDOTcyQTIxMDIyMgotOjEwMzQ3MDAwNjVBRURBQzA5NDA5QTkwMjI5MjUwMjYzRkVDRkRBMjBERAotOjEwMzQ4MDAwMkIyMDBDNTgwREMzNjNGRUM0MjcyNDY4REEyMERCMzBFMAotOjEwMzQ5MDAwMkMxMjA0MkQxMjA1MkUwQTgwNTgwQzlDNjNGQzgwMDAwRgotOjEwMzRBMDAwQzAyMEQxMEZEQTIwNTgwREExOEExNUNEQTFEQTIwMDM1MgotOjEwMzRCMDAwM0IwMjJDMTIwNDU4MEQwQTI3QTQwM0MwMjBEMTBGMDA5MAotOjEwMzRDMDAwQzAyMEQxMEYyQTJDNzQ4QjE0NTgwNjI3RDJBMEQxMEZGQwotOjEwMzREMDAwNkMxMDBFMjgyMTAyOTQxMDA4MDg0QzY1ODM1RTFGRTVDRAotOjEwMzRFMDAwMkYyOUYyOUU2Rjk4MDI2MDAzNjIxREU1MkIyOUQyMjZEOAotOjEwMzRGMDAwNjg5MDA4MkEyMjAwMDlBQTBDNjVBMzUwMkNGMjlENjQ0QQotOjEwMzUwMDAwQzM0QTJCMjAwQzBDQjYxMUFGNjYyODYyODZDMUVDNzgzQQotOjEwMzUxMDAwRTMwMjYwMDM0MjE5RTUyMjA5QjkwQTI5OTJBMzY4OTBERgotOjEwMzUyMDAwMDc4QTIwMDlBQTBDNjVBMzJFMjQ2Mjg1NjQ0MzI4QzA1QgotOjEwMzUzMDAwRTEyQTMxMDlDMDcwMjcyNDY2ODkzNTlBMTI5OTJBODhCMAotOjEwMzU0MDAwMzY5OTEzOTgyQjg5Mzc5ODE0OTkyQzg4Mzg5OTE1MDgyRgotOjEwMzU1MDAwNTgxNDk4MTY5ODJEODkzOTJBMjUwNDJFMjUxRDI5MjVCOQotOjEwMzU2MDAwMUMyODMwMjhDMDkyMjgyNDNDMkEzMDI5MDgwODQ3OTg3MwotOjEwMzU3MDAwMTcwOTg5MDEyQTI0M0QyQTMxMTU5OTE4MEEwOTQxMDk5OAotOjEwMzU4MDAwQTkwQzI5OUNFQzI5MjUxRjdFODcxOTJEMkEwMDBEQTA0NgotOjEwMzU5MDAwNjAwMDA4M0UwMTBBM0VCMUFEMDhEQTM5MEVBQTExMEFGMAotOjEwMzVBMDAwOTkwQzI5MjUxRjI3MjExRjE4RTUyQzA3ODE2MDAxMDg4OAotOjEwMzVCMDAwM0UwMDBEM0VCMThBMERBODM5MkQ5Q0ZDMkQyNTIwQzE2MQotOjEwMzVDMDAwOTAwOTg4MzYwOEREMUMwODc3MUM4OTNEOEEzQzJFMjYyOAotOjEwMzVEMDAwMTMyRTI2MTQyRTI2MTUyRTI0NkIyOTI1MjIyQTI1MjE2QQotOjEwMzVFMDAwMjgyMDE0QzBBMDI3MjUyRTJEMjUyRjA4MDg0MzJEMjE4MwotOjEwMzVGMDAwMUMyODI0MTRDMDcwMjcyNTI0MjcyNTI1MjcyNTJDMjc5RgotOjEwMzYwMDAwMjYxODI3MjYxQjI3MjQ2NzI3MjQ2ODI5MzIxMTI3MjVGNwotOjEwMzYxMDAwMjM5OTE5NkVEMjE1NkQwODBBQjFBQTAwQTEwNDAwRTkxOAotOjEwMzYyMDAwMUE3RDlCMDU2M0ZGRUUwMDAwMDA4OTE5MURFNEZEQzBCMwotOjEwMzYzMDAwRTBDMDcyOUIxRDg4MTM5NTFCOUYxRjlDMUU5NjFDMUMyRgotOjEwMzY0MDAwRTUwODI2MjAzREMwRjAwNjA1NDAwOERCMTQwNzY2MDFBQQotOjEwMzY1MDAwMEQ4ODEwQzA3MTA1N0UzODA2N0YzODg1MTIwQkZGMTA2QgotOjEwMzY2MDAwMTZFNEU2MEFFRTEwOTY0MDBGRUUwMjBENTUxMUIwQUZDQgotOjEwMzY3MDAwMDlGRjExMEZFRTAyMUZFNEY5MDg1NTAyMEZFRTAyQzAxOAotOjEwMzY4MDAwRjQ5RjQxOEEyMDlGNDk5NjQ4OUM0QjlCNEU5RDQzOUVBOAotOjEwMzY5MDAwNDY4RDE2MUVFNERBOEIxNUM3Q0Y5QzREOUM0QzlDNDU3RAotOjEwMzZBMDAwOUM0NDBCRDgxNDBFQUUwMjBEQkIxMDlFNEE5RTQyMDhERAotOjEwMzZCMDAwNTUwMjk1NEYwRDE4MTQxNUU0Q0QwRDg4MTEwNTg4MDI5QgotOjEwMzZDMDAwOTg0NzE4RTRFODg1MjYyRTQ2MTIyRTQ2MUEyRTQ2MjJFMgotOjEwMzZEMDAwMjY0NjEwMjY0NjE4MjY0NjIwMkY0NjExMkY0NjE5MkYxQgotOjEwMzZFMDAwNDYyMTI4NDYyNDI4NDYyNjJDNDYxNDJDNDYxNTk1MTE5QQotOjEwMzZGMDAwOEMxNzE4RTRERDA1MDU0ODhGMTgwNTU1MTEwOTA2NDg5MwotOjEwMzcwMDAwMjg0NjEzODkxNDBFNjYxMTA2NTUwMjBGN0YzOTBDM0VBOAotOjEwMzcxMDAwNDAwMkVFMTAxN0U0RDYwRDk5MTEwQzI2NDAwRjY2MTFFOQotOjEwMzcyMDAwMEI5OTAyMEMwQzQwOEIxRDAxQ0MxMDA2RkYwMjI3NDZBMgotOjEwMzczMDAwMUIyOTQ2MTZDMDcwMjkzMTE2MTZFNENEMEVDQzAyMDVBMQotOjEwMzc0MDAwRkYwMjFFRTQ5QzE1RTRDQjJGNDYxNzI2NDYxQ0MwRjA1MgotOjEwMzc1MDAwODYxQzJGNDYxRDJGNDYxRjJGNDYyNzI1NDYyMzBFQ0M5RAotOjEwMzc2MDAwMDI4NTFCMkM0NjFFMUVFNEM0MUNFNDhFOEYxRjhDQzdEMgotOjEwMzc3MDAwMkU0NjI1QURDQzI4MjAwNjI5MjQ2QTI0MzExNzlDMkRGRAotOjEwMzc4MDAwMjQyNTIzOEMxRUNDODEyNzI0MDdDMEQ3N0Y5NzE4OEUzMQotOjEwMzc5MDAwMTEwOTI4NDE5RTI5NjQ4MDhFNjQ0MDk4QzA5ODA5NDk4NwotOjEwMzdBMDAwMzYyRDI0MDY2MDAwMEIwMDY0NDA3NUMwOTgwOTQ5MzYyOAotOjEwMzdCMDAwMkQyNDA2MDFDNDA0MkQwQUEwMkUyMTA0Mjg2Mjg1MDhBOAotOjEwMzdDMDAwRUUxMUFEODgyODY2ODU4NjNGODQzRTJEMzIxMDA2NDg2RQotOjEwMzdEMDAwMTg5OEMzMDBDNDA0MDY0NjE4MThFNDc4MDRDNDUzMDBCQgotOjEwMzdFMDAwNjYxMTA2REQwMkE4QjgyNzg0Q0Y5REM0MDkwNjRFOTY0RgotOjEwMzdGMDAwQzUxREU0QTMwNUE2MTEwNjQ0MDIxNkU0QTA5REMwMDY1QgotOjEwMzgwMDAwNDQwMjk0QzJDMDQzMDRFRTAyOUVDMTE0RTQ2MzI2RjI1MwotOjEwMzgxMDAwOUQyNzQ0QTIyNjZDMTgyNkY2OUQ2NTUwNDJDMDIwRDFGMwotOjEwMzgyMDAwMEZDMDkwNjNGRjg5MDAwMDY1NEY3MEMwOThDMEU4MkVGQwotOjEwMzgzMDAwMjQwNjYzRkY3RDJEMjQwNkMwOTA2M0ZGNzVDQzU3REEwNAotOjEwMzg0MDAwMjBEQjMwOEMxMDU4MEMyNkMwMjBEMTBGMDBEQTIwQzBBRAotOjEwMzg1MDAwQjY1ODBDQjY2M0ZGRTUwMERBMjA1ODBDQjQ2M0ZGREMwMQotOjEwMzg2MDAwMkEyQzc0OEIxMDU4MDU0MEQyQTBEMTBGNkMxMDA2Mjg1QQotOjEwMzg3MDAwMjAwNjhBMzM2RjgyMDI2MDAxNjFDMDUwMTNFNDQ3MjkzOQotOjEwMzg4MDAwMjEwMjE2RTQ0NjY5OTIwNDI1MjUwMkQ5NTAyQzIwMTUwMAotOjEwMzg5MDAwOUEyODE0RTQ0NDhGMjYyNzIwMEIwQUZFMEMwNDc3MDk4QgotOjEwMzhBMDAwMkI3MTFDNjRFMTM5OEU0MjhENDM2RkJDMDI2MDAxNkY0NQotOjEwMzhCMDAwMDBFMTA0QjBDODAwODgxQTA4QTgwODA4RDgwMjk4MjdCMAotOjEwMzhDMDAwMkIyMDA2NjhCMzJFQ0U5NzJCMjIxRTJDMjIxRDAxMTExMQotOjEwMzhEMDAwMDI3QkM5MDFDMEIwNjRCMDE3MkNCMDA3MjhCMDAwREE3MQotOjEwMzhFMDAwMjAwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUY4MgotOjEwMzhGMDAwRTdDMDIwRDEwRjJEMjA2NDY0REZDQThCMjlDMEYxMEJGMwotOjEwMzkwMDAwQUIwQzY2QkZDMDJCMjAwQzBDQkMxMUE2Q0MyOEMyODYwOQotOjEwMzkxMDAwMkUwQTA4NzhFQjYxMUVFNDIyMEVCRTBBMkVFMkEzNjg4RQotOjEwMzkyMDAwRTAwNTI4MjIwMDdFODk0RjI5QzI4NTFFRTQyRTY0OTA3RQotOjEwMzkzMDAwNDYxRkU0M0M5RTkwQzA4NDk4OTEyODIwMEE5NTkzMEZERQotOjEwMzk0MDAwODgwMjk4OTI4RTIwMEZFRTAyOUU5NDJGMjAwNzg4MjZFMAotOjEwMzk1MDAwMkY5NTBBOTg5NjlBOTcyRTIwMDYyNTI0MDc2OEUzNDMwOAotOjEwMzk2MDAwMjkyMTAyMUFFNDE2MkRDMjg1QUFCQTJEREMyMDJEQzYwMwotOjEwMzk3MDAwODUyNUE0Q0Y2M0ZGNEUwMDJCMjA2NUNCQkRDMEMyMkM5NAotOjEwMzk4MDAwMjQ2NUM5RjYwNUU0MzEwMDAyMDAyRTYyODIxRkU0MUVBMAotOjEwMzk5MDAwMkQ0MTAyMEZFRTAyMkU2NjgyMERFNDMxMjkyMTAyNjNEMQotOjEwMzlBMDAwRkYyMzAwMDA2NERGQjg4OTQyMjgyMDE2MDA5MTA0MEQyRgotOjEwMzlCMDAwODgwQzAwODgxQUE4QTg5ODI5NjNGRkEzOEMyMDJEMzJCMAotOjEwMzlDMDAwMjFCMUNDOUNEMDJCMzIyMTJBMzIyM0I0QkIyQjM2MjFGRgotOjEwMzlEMDAwN0JBOUE5MkQzMjIyMkQzNjIxNjNGRkEwQzAyMEQxMEY1MwotOjEwMzlFMDAwOUYyNzI1MjQxNUFDQjgyODc1MUMyQjIwMDZDMEMxMkU5NgotOjEwMzlGMDAwQkNGRTY0RTBBQjY4Qjc3NzJEQkNGRDY1REVDNzJEMjA0QgotOjEwM0EwMDAwNjRDMEYwNjREMDg2OEUyOTBFQUUwQzY2RTA4OUMwRjFFOQotOjEwM0ExMDAwMjgyMDVBMjg4Q0ZFMDhDRjM4NjVGRUU4NjNGRjU4MDAzRQotOjEwM0EyMDAwMDBFMDA0OTMxMEMwODEwQUYzMEMwMzgzMzlDNzhGMDhBOAotOjEwM0EzMDAwRDgwMzA4QTgwMTA4RjgwQzA4MDgxOUE4MzMwM0M4MEMxMwotOjEwM0E0MDAwQThCODI4NzUxQzAzMEI0NzJCMjQxNTgzMTBDQkI3MDA4RgotOjEwM0E1MDAwRTEwNEIwQkMwMENDMUFBQ0FDMENEQzAyOUMyNzY1OUUyNwotOjEwM0E2MDAwNUVDMEIyMEI5OTAyMDkwOTRGMjkyNTAyNjNGRTUwMDA3RQotOjEwM0E3MDAwMkQyMDZBMEQyRDQxNjVERjdFREEyMEMwQjA1ODBDNzIxMgotOjEwM0E4MDAwNjRBRjE4QzBGMTYzRkVFRjlGMjc2M0ZGRDAyRTIyMUZBMwotOjEwM0E5MDAwNjVFRTMyNjNGRjc5MDAwMDI4MjIxRjY1OEUyNzYzRkZFMQotOjEwM0FBMDAwNkUyNTI0MDYyNTI1MDJDMDkwNjNGRTE5NkMxMDA2NjU1QwotOjEwM0FCMDAwNzEzMzJCNEMxOEMwQzcyOTNDMThDMEExQzA4MDA5QTg3RAotOjEwM0FDMDAwMzgwODA4NDI2NDgxMTAxQ0UzQjExQUUzQjIyQUM2N0VBQQotOjEwM0FEMDAwMkE1Q0ZERDMwRjZEQUEwNTAwQjA4ODAwOTA4Qzg4NDA0OQotOjEwM0FFMDAwQzBBMDA4ODk0NzFGRTNEQjA5MEI0NzA4NEM1MDA4MERBRAotOjEwM0FGMDAwNTMwNEREMTBCNENDMDRDQzEwMEQ1RDAyOUQzMTBDQkIyMQotOjEwM0IwMDAwMDI5QjMwODg0MzhFMjA5ODM1MEZFRTAyOUUzMjhEMjYyMAotOjEwM0IxMDAwRDg1MEE2REQ5RDI2OEU0MEMwOTAwRTVFNTA2NEUwOTc4MgotOjEwM0IyMDAwMUNFM0MxMUVFM0IwMDM4QjBCQzBGNDlGQjE5RUIwMkQwQwotOjEwM0IzMDAwMjAwQTk5QjMwQ0REMDI5REIyOEYyMDBDRkYwMjlGQjRDNgotOjEwM0I0MDAwOEUyNjJEMjAwNzlFQjY4QzI4MkRCNTBBOUNCNzI5MjREOQotOjEwM0I1MDAwMDcyRjIwMDYyQjIwNjQ2OUYzMzlDQkI2MURFMzkyMjM4RgotOjEwM0I2MDAwMjAxNjhERDIwQjMzMEMwMEQxMDQwMDMzMUFBM0MzQjQzQQotOjEwM0I3MDAwOEQ5MzI5MjIyMDBDMTNFMzkxMUZFMzg4MEMyRTExQUZBMwotOjEwM0I4MDAwRUVBMzIyMjkyNENGMkZFMjg1RDJBMDBGREQwQjJERTY1NAotOjEwM0I5MDAwODVEMTBGMDBCNDhDMkUyMDBDMENFQjExMUZFMzg4MUQ3NwotOjEwM0JBMDAwRTM3RkFGRUVBREJCMjJCMjg1MjlFNENGMDJDMjBCMjI4OAotOjEwM0JCMDAwQjY4NUQyQTBEMTBGMDAwMDJFMjAwQzBDRUIxMTFGRTMxNAotOjEwM0JDMDAwN0YxQ0UzNzZBRkVFQUNCQjIyQjI4NTI5RTRDRjAyODI0NAotOjEwM0JEMDAwMEIyMkI2ODVEMkEwRDEwRkMwRDAwQkFEMzg3REM4MDI2NAotOjEwM0JFMDAwNjNGRUVDNjNGRUUwOEU0MDI3MkM3NDdCRUUxMkRBNzBFRAotOjEwM0JGMDAwQzBCMzJDM0MxOERENTA1ODBBNzdDMDkwODg0MDYzRkU1MwotOjEwM0MwMDAwRTMwNjZFMDIwMjJBMDIwMzNCMDJEQzQwREQ1MDU4MDA0QwotOjEwM0MxMDAwMDQ5QTEwREI1MERBNzA1ODA0NTQ4ODEwNjNGRUY2MDBFMgotOjEwM0MyMDAwNkMxMDA4MkUzQzE4QzBBMDkyMTYxRkUzNjg4QzQwQUZBMQotOjEwM0MzMDAwMkYwQzhDNDdDMDIzMDRDQjBCRERCMDdGQjMwMjJEQkQwRQotOjEwM0M0MDAwRjhEOUQwQzBCMDc1QzMwMjYwMDA4RDlGMTQ2RDA4NEZDNQotOjEwM0M1MDAwOEQ5MDBENkQzNkFEQUEwRDY2MEMwRUI3MEIwRUJGMEExQQotOjEwM0M2MDAwOURGMEI4NzdCODlGRDhGMDAwODA4ODAwNzA4Qzk3MTFDRAotOjEwM0M3MDAwODc5MDk4MTA5NzE1NjhCMTJBQjIyMjc3RDMyRDg4OTEzMgotOjEwM0M4MDAwQzBEMENCOEY5ODkwMjc5QzEwMDA3MDg4OTcxMjAwRjBCRQotOjEwM0M5MDAwOEM5RjEzOUQ5MTY0NjBBMEMwODEwOEJCMDM3NUNCMzhENQotOjEwM0NBMDAwNjNGRkE5MDBCMTIyMkVFQzE4NjNGRkNFODU5MjBENzczOQotOjEwM0NCMDAwMEM4NjkzOTc5MEE2RDY3RDZCMDFCMTU1OTU5Mjk2OTNGRAotOjEwM0NDMDAwODk0MjYwMDAxN0IzQ0MyOTlDMTg4ODE0REQ5MDc4OTM0MgotOjEwM0NEMDAwMDIyRDlERjhEOUQwNjNGRkJCODk0MkRBOTA4NTE2MEM3RQotOjEwM0NFMDAwMEQ0NzJENDQwMjFCRTM2NzkyMzE5QjMwODY0MzdBOTE0NgotOjEwM0NGMDAwMjYxQkUzNTgxRUUzNjU4OTUwMEU2NjAxOTYzNTBCOTkyNQotOjEwM0QwMDAwMDI5OTMyODg0MjBBODgwQzk4NDI4NzU2QTdBNzk3NTY4QwotOjEwM0QxMDAwOEY0NEFGQUY5RjQ0RDEwRjFCRTM0Rjg5NTA5NjM1MEJCMwotOjEwM0QyMDAwOTkwMjk5MzI4ODQyMEE4ODBDOTg0Mjg3NTZBN0E3OTcyOQotOjEwM0QzMDAwNTY4RjQ0QUZBRjlGNDREMTBGODk0MjYzRkY5RTAwMDA2RQotOjEwM0Q0MDAwNkMxMDA2MUZFMzUyOTMxMEQ2MzA4ODMwQzA5MTA4NjM4MAotOjEwM0Q1MDAwNTEwODA4NDcwNTk4Mzg5ODExMjgyMTAyMjkzQ0ZEMDg4OAotOjEwM0Q2MDAwMDg0QzY1ODE1NzY1OTE1NDJBNjIwMzBBMkI1MDY1QjE0RQotOjEwM0Q3MDAwN0UwQTY4MTQyRTBBRkY3Q0E2MEEyQzIwNUFDQ0M0MkQ3OQotOjEwM0Q4MDAwMEEwMjJEMjQ1QTc4RTAwMjYwMDIwODhBMjg4OTI2MTgzRgotOjEwM0Q5MDAwRTM0MDBBOTkwQzY1OTIwMzJFMjAwQjFDRTMzRjA4RUVDQQotOjEwM0RBMDAwMEIyRUVEMDEyREUwMzIyRUUwMzMwOEREMTEwRUREMDI4OQotOjEwM0RCMDAwMUVFMzM5QUZERDBFREQwMTBEQ0MzNzJEMjAwQzg5NjBGRgotOjEwM0RDMDAwQzFFMDdCOTYyMzFBRTJGNzhCNjIyQUEwMjE5QzEyN0IyQQotOjEwM0REMDAwQTMxNkRBRDBDMUIwMEI0QjM3QjRCQjhDMjA1ODBCODc3RAotOjEwM0RFMDAwOEMxMkRCQTBDRUFCNjAwMUJGMEU0RTM3MUJFMkVDMEM5OQotOjEwM0RGMDAwREExMUFCQUEyOEEyODZCOEVFNzhFQjM1MUVFMkU5MEVGRQotOjEwM0UwMDAwREUwQTJFRTJBMzY4RTAwNDg4MjA3RTg5MjQyQkEyODVBNgotOjEwM0UxMDAwNjRCMEEyODc2MkRFNzAwQzc5MzY5QjEzODgyNjhEMjdFQQotOjEwM0UyMDAwMDk3QTBDMDhERDBDNkZBRDBFNzdEMzEwN0U3QjY5NjBDQwotOjEwM0UzMDAwMDAxRkMwQjA2M0ZGRDgwMEQ3OTA2M0ZGRUI5QzEyREE3RAotOjEwM0U0MDAwMjBEQjcwNTgwQUZDOEIxMzhDMTI2NUEwNkY4RTYyN0U4QgotOjEwM0U1MDAwN0I0NjlDMTI5QjEzQ0M1RkRBMjA4QjEwMDQ0QzAyNThEQgotOjEwM0U2MDAwMEFBMEQ2QTA4QjEzMjUwQTAxREU3MERBMjBEQzYwREQwMwotOjEwM0U3MDAwNDA1QkZGNkI4QzEyRDlBMDJEMjAwQ0MwRTAxQkUyQzc2OQotOjEwM0U4MDAwMTdFMkNGMENEQTExQTdEN0FCQUEyQkEyODUyRTc0Q0ZERAotOjEwM0U5MDAwMEI5OTBCMjlBNjg1NjNGRjI0REEyMERDNjBERDQwREU2OAotOjEwM0VBMDAwNzA4OTExMjgyMDA3REY1MEE5ODgyODI0MDc1QkZFRkZBRQotOjEwM0VCMDAwRDJBMEQxMEYwMDAwREJEMERBMjA1ODBCMUM2NTUwRjNFNAotOjEwM0VDMDAwMkEyMDE0MEEzQTQwNjVBMEVFREI2MERDNDBERDMwREFERgotOjEwM0VEMDAwMjA1ODA5OEUxRkUyRUVENkEwNjRBMEQ3ODRBMTgzQTA0QgotOjEwM0VFMDAwMDQwNDQ3MDMwNTQ3OTUxMTAzNjM1MUMwNTE2M0ZFNjhGRAotOjEwM0VGMDAwMkMyMDA2MjhDQ0ZENjQ4MEE4NjhDNzA0QzA5MzI5MjQyMAotOjEwM0YwMDAwMDZDMEMxOEU2NDE5RTJBNzlFMjY5RTI5OUUyODg5OTIyQQotOjEwM0YxMDAwOUUyNzAwOTEwNDAwQ0MxQTAwOTAwNEIwQzg4RDY1MDg1QgotOjEwM0YyMDAwRUUwMUFFQ0MwRDBFNUUwMUVFMTFBRUNDQjBDQzJFMEE4MQotOjEwM0YzMDAwRkUwQzBDMTkwRUNDMzZDMEUyMEMwQzQ3MEVDQzM3MkMwNAotOjEwM0Y0MDAwMjQxNkMwQjAyQjI0MDcyQzIwMDYxQkUyOUYwQTBFNDUyNgotOjEwM0Y1MDAwMEQwODQyMjgyNDBCMkUyNDBBQjQ4OTI5MjQwQzdEQjg4QwotOjEwM0Y2MDAwNUEyOTIwMTYwQTVENTJCMDlFMEVERDM2MkQyNDY0MkI5MAotOjEwM0Y3MDAwQ0NGRDY1QkRGQjBEMEM0NzY0Q0RGNTFERTI4QTg4Mjg5QwotOjEwM0Y4MDAwOEREMjBDOUIwQzAwRDEwNDAwQkIxQUFCODg5ODI5NjMxRQotOjEwM0Y5MDAwRkRERTAwMDAxQ0UyQjk2M0ZFMjAwMDAwMUNFMkFGNjNGRQotOjEwM0ZBMDAwRkUxODhENjU2M0ZGQTIwMDAwREEyMDJCMjAwQzU4MEE1MgotOjEwM0ZCMDAwRjg2NDVGMEJDMDIwRDEwRkMwMjBEMTBGQzA5M0MwRTNDNQotOjEwM0ZDMDAwMkUyNDE2NjNGRjlEMDAwMDZDMTAwNEMwNjAxN0UyNzI3RgotOjEwM0ZEMDAwMURFMjc1QzM4MTI5MzEwMTJBMzAwODI5MjQwQTc4QTFGQwotOjEwM0ZFMDAwMDhDM0IyN0JBMTcyRDI2MEQxMEZDMEMxNjU1MDUxMjYwNwotOjEwM0ZGMDAwMjUwMjJBRDAyMDJGMjAwQjI5MEFGQjJCMjAxNDJFMjA0QgotOjEwNDAwMDAwMTUyNjI0MTUwOUJCMDEwREZGMDkyOEYxMUMyQjI0MTRDQQotOjEwNDAxMDAwQThFRTJFRjUxQzY0QTBCNTJCMjIxRTI4MjIxRDAxMTEyRQotOjEwNDAyMDAwMDI3Qjg5MDFEQjYwNjRCMDE3MkNCMDA3MjhCMDAwREE4RQotOjEwNDAzMDAwMjAwNzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUYyNgotOjEwNDA0MDAwRTdEQjMwREM0MERENTBEQTIwNTgwMEQ4MjkyMTAyMDlCNgotOjEwNDA1MDAwMEI0Q0NBQjJEMkEwRDEwRjAwQ0M1QTJDMzAwODdCQzE3NQotOjEwNDA2MDAwMzcyRUQwMjA2NEUwMkQwMjJBMDIwMzNCMDJEQzQwREQyMwotOjEwNDA3MDAwNTA1ODAwQ0VEMkEwRDEwRjJCMjAxNEIwQkIyQjI0MTQ0QgotOjEwNDA4MDAwMEIwRjQxNjRGMDgyN0NCN0NBQzBDMTBDOUMwMjJDMjU4NgotOjEwNDA5MDAwMDJEMkEwRDEwRkMwMjBEMTBGMkUyMDA2NjlFMkMxMkY3RAotOjEwNDBBMDAwMjEwMjBGMEY0QzY5RjFCODI2MjQwNjI2MjUwMjJCMjI4NwotOjEwNDBCMDAwMUUyODIyMUQyQTIwMEIyOTIwMTUwREFBMDkyQ0ExMUMxRgotOjEwNDBDMDAwMjYyNDE1QUM5OTI5QTUxQzdCODE0QTYwMDA0OUIwQkIwOAotOjEwNDBEMDAwMkIyNDE0MEIwRDQxQ0JENjdDQjcwMjJDMjUwMjJCMjJBRQotOjEwNDBFMDAwMUUyRTIyMUQ3QkU5MDIyQjBBMDA2NEIwMTcyQ0IwMDc5QwotOjEwNDBGMDAwMjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMDA0MwotOjEwNDEwMDAwREJBMDY1QUZFN0MwMjBEMTBGMjYyNDA2RDJBMEQxMEZENwotOjEwNDExMDAwMjYyNDA2NjNGRkM3REI2MDFERTIyMzY0QkY0MjJDQjA4OAotOjEwNDEyMDAwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzBEMTBCODAwQgotOjEwNDEzMDAwMDBEQkEwNjVBRkU3MURFMjFCNjNGRjI0NkMxMDA0MjhDMQotOjEwNDE0MDAwMjAwNkMwNjQ2Rjg1NjRDQTVCMjkyMDE0N0Q5NzI2REEzNwotOjEwNDE1MDAwMjBEQjMwREM0MDA1NUQwMjU4MDAxOTI5MjEwMjA5MEFFNAotOjEwNDE2MDAwNENDOEEzQzAyMEQxMEYwMEMwQjEwQjlCMDIyQjI1MDI2RAotOjEwNDE3MDAwQzAyMEQxMEYwMDAwMDIyQTAyMDMzQjAyMkMwQTAxNTg4MgotOjEwNDE4MDAwMDBDOUM5QUFEQTIwREIzMERDNDA1ODA5RDUyOUEwMTFDMgotOjEwNDE5MDAwRDNBMDdFOTcwODJDMEFGRDBDOUMwMTJDQTQxMUMwNTFDMQotOjEwNDFBMDAwMkQyMDE0MDZERDAyMkQyNDE0NjNGRkEyREEyMERCMzA1QgotOjEwNDFCMDAwREM0MERENTBDMEUwNTgwOTU1RDJBMEQxMEYwMDAwMDAwRQotOjEwNDFDMDAwNkMxMDA2MTZFMUY2MUNFMUY2NjU1MTNCQzBFMTE3RTEwMwotOjEwNDFEMDAwRjIyODIxMDI4QjIwMDgwODRDNjU4MDdDMjkzMjAwMDlENgotOjEwNDFFMDAwNjk1MTY5OTM3MzJBNjI5RTZFQTg0ODJBNzIyNjY4QTA1NAotOjEwNDFGMDAwMDI3QUI5M0YyQTYyOURCNDRGQ0JBNzJCMjAwQzBDQkQ4RAotOjEwNDIwMDAwMTEwNkREMDgyOEQyODY3OEZCMTUwQ0JGMEEyRkYyQTMxMQotOjEwNDIxMDAwNjhGMDA0ODgyMDdGODkwNzJERDI4NUQzMEY2NUQwNjA5MAotOjEwNDIyMDAwMkEyMTA0MTlFMjFFRDMwRjdBOUIxRERBMjA1ODA4NTM2NQotOjEwNDIzMDAwNjAwMDI1MDAyQzIxMDQxQkUyMTk3Q0JCMTREQTIwQzA4RAotOjEwNDI0MDAwQjY1ODA4NEVDOTU0NjAwMEVGREEyMDU4MEEzODYwMDBBQQotOjEwNDI1MDAwMDcwMERBMjBDMEI2NTgwQTM1NjU1MERDREM0MERCMzA5OAotOjEwNDI2MDAwOEQzMERBMjAwRDZENTE1ODA4QTlEM0EwNjRBMEM5MUM2NwotOjEwNDI3MDAwRTFDQ0MwNTE4NEExOEVBMDA0MDQ0NzBFMEU0NzYzRkYxOQotOjEwNDI4MDAwNEYyQjIxMDRDMDhDODkzMUMwNzBERjcwMDlGOTUwMDlBRgotOjEwNDI5MDAwOEYzODZFQjgxNzJDMjA2NkFFQ0MwQzBDNDcyQzI0NjZEOQotOjEwNDJBMDAwN0NGQjA5OUQxMDU4MDhCQjhEMTAyNzI0NjY5NEQxMUVGNQotOjEwNDJCMDAwRTFEMkI4REM5RUQwNjU1MDU2QzBEN0I4M0FDMEIxQzA4NAotOjEwNDJDMDAwRjAwQ0JGMzgwRjBGNDJDQkYxMTlFMUIwMThFMUIyMjg2MgotOjEwNDJEMDAwOTY3RUIwNEJEMzBGNkRCQTA1MDBBMDg4MDBDMDhDMkMyMQotOjEwNDJFMDAwMjAwQ0MwMjAxREUxQjYwQ0NGMTFBNkZGMkVGMjg1QUQyQgotOjEwNDJGMDAwQ0MyN0M0Q0YwRTRFMEIyRUY2ODVEMTBGQzA4MDBBQjg0NgotOjEwNDMwMDAwMzg3OEQwQ0Q2M0ZGQzEwMDhFMzAwRTBFNDc2M0ZFQkRGRQotOjEwNDMxMDAwMkEyQzc0MkIwQTAxMDQ0RDAyNTgwOEFFMkYyMDBDMTJDRgotOjEwNDMyMDAwRTFBNzBDRjkxMUE2OTkyODkyODVBMkZGMjdGNENGRDIxNAotOjEwNDMzMDAwQTAwODQ4MEIyODk2ODVEMTBGQzAyMEQxMEYwMDAwMDA5RgotOjEwNDM0MDAwNkMxMDA0QzA2MENCNTVEQjMwREM0MDA1NUQwMjAyMkFGNgotOjEwNDM1MDAwMDI1QkZGOUIyOTIxMDIwOTA4NENDODgyRDJBMEQxMEYyMQotOjEwNDM2MDAwMkIyMDE0QjBCQjJCMjQxNDBCMEM0MUNCQzU3REI3RUIxOQotOjEwNDM3MDAwQzBDMTBDOUMwMjJDMjUwMkQyQTBEMTBGMDAwMDAyMkE0MQotOjEwNDM4MDAwMDIwMzNCMDIwNjZDMDJDMEQwQzdGNzJFMjAxNDI4MzE2RQotOjEwNDM5MDAwMDEyNjI1MDIyODI0MEEwRkVFMDEyRTI0MTQ1ODAxMENCMAotOjEwNDNBMDAwNjNGRkEzMDAyNjI0MDZEMkEwRDEwRjAwNkMxMDA2MjhCQwotOjEwNDNCMDAwMjEwMkQ2MjAwODA4NEM2NTgwOTkyQjIwMEMxMkUxNzc0OQotOjEwNDNDMDAwMENCODExQTI4ODJBODI4NkI1NDk3QTkzMDI2MDAwOTNCQwotOjEwNDNEMDAwMTlFMTc0MDlCOTBBMjk5MkEzNjg5MDA4MkE2MjAwMDlCMAotOjEwNDNFMDAwQUEwQzY1QTA3RTI4ODI4NTFDRTE3RjY0ODA3NTlDODA3NAotOjEwNDNGMDAwQjg4N0IxNEI5QjgxOUIxMDY1NTA3MkMwQTdEOTcwMjhCQwotOjEwNDQwMDAwMEEwMUMwRDAwNzhEMzgwRDBENDJDQkRCMUZFMTYwMUVDNQotOjEwNDQxMDAwRTE2MTJFRjY3RUQ4MzBEMzBGNkQ0QTA1MDA4MDg4MDAwQQotOjEwNDQyMDAwOTA4Q0MwODAyRjMwMDgyRjc0MDAyOTYwMEMxQUUxNjMzMwotOjEwNDQzMDAwMEM5RDExQTJERDJDRDI4NUMwMjBBQTk5MjI5NENGMEMwQwotOjEwNDQ0MDAwQkMwQjJDRDY4NUQyODBEMTBGQzBFMDAzOEUzODdFQTA2NQotOjEwNDQ1MDAwQzM2M0ZGQjdDQzU4MkE2Qzc0REIzMERDNDA1ODA3RTFFQgotOjEwNDQ2MDAwQzAyMEQxMEZEQTYwNTgwOUIxNjNGRkU3MDAwMERENDBEQQotOjEwNDQ3MDAwODUxMDJBNkM3NEMwQjBEQzcwNTgwODU2MkYzMDA4MkY5NQotOjEwNDQ4MDAwNzQwMDI4NjAwQ0MwRjAwQzhCMTFBMkJCMjlCMjg1MTJGRAotOjEwNDQ5MDAwRTE0QjA5NTkwQkEyODIyRjI0Q0YyOUI2ODVEMkEwRDE5NgotOjEwNDRBMDAwMEYwMDAwMDA2QzEwMDQyOTIwMTQyODIwMDZCMTk5Mjk1RgotOjEwNDRCMDAwMjQxNDY4ODEyNEMwQUYyQzBBMDEyQjIxMDIyQzI0MDY2RAotOjEwNDRDMDAwN0JBMDA0QzBEMDJEMjUwMjAyMkEwMjAzM0IwMjA0NEMyQgotOjEwNDREMDAwMDJDMEQwNTgwMEJGRDJBMEQxMEZDMDIwRDEwRjAwMDAyMQotOjEwNDRFMDAwNkMxMDA0MjkzMTAxQzJCNDI5MjQwQTJBMzAxMUMyODM3NAotOjEwNDRGMDAwNzhBMTZDN0JBMTY5NjQ1MDQ3MkMyMDA2QzA2ODZGQzUwOQotOjEwNDUwMDAwNjJDQTU3MkQyMDE0N0NENzIyREEyMERCMzBEQzQwREQ1NAotOjEwNDUxMDAwNTA1QkZGQTYyOTIxMDIwOTBFNENDOEUyQzAyMEQxMEYzMgotOjEwNDUyMDAwQzBGMTBGOUYwMjJGMjUwMkMwMjBEMTBGREEyMERCMzAwRgotOjEwNDUzMDAwQzBDMDVCRkZEQzI4MjAxNDA2ODgwMjI4MjQxNDYzRkYxNwotOjEwNDU0MDAwQzcyOTIwMTUxQkUxMTgyQTIwMEJDMEMwOUMyNDBCQUFFOAotOjEwNDU1MDAwMDkyQkExMUMyQzI0MTVBQjk5MjlBNTFDNjNGRjk5MDBEQwotOjEwNDU2MDAwQzAyMEQxMEZEQTIwREIzMERDNDBERDUwQzBFMDU4MDgzRAotOjEwNDU3MDAwNjdEMkEwRDEwRjAwMDAwMDZDMTAwNENCNTUxM0UxMTNEQgotOjEwNDU4MDAwMjUyMjFGMEQ0NjExMDY1NTBDQTMyMzI2MjIxRTI1MjY4MwotOjEwNDU5MDAwMUYwNjQ0MEIyNDI2MUU3MzRCMURDODUyRDI0MEQxMEY1OAotOjEwNDVBMDAwMjgwQTgwQzA0MDI0MjYxRkE4MjgyODI2MUUyODI2MUQ0OQotOjEwNDVCMDAwRDI0MEQxMEZDMDIwRDEwRjI0NERGODI0MjYxRTYzRkYxNgotOjEwNDVDMDAwRDgwMDAwMDA2QzEwMDQyODIwMDZENjIwNkU4NTAyNjBGQQotOjEwNDVEMDAwMDBERTE3RTBGMjFERTBGOTE5RTBGMkMwQzFDMDIwMkFBOAotOjEwNDVFMDAwOENGQzY0QTEzMjJCNjEwMkI0NEUwQjBCNEM2NUIwQTg1RAotOjEwNDVGMDAwMkI2MDBDMkE2MjAwMENCODExMDc4ODA4MkY4Mjg2MDlFQwotOjEwNDYwMDAwQjkwQTdGRTMwMjYwMDA5RjI5OTJBMzY4OTAwNTA5QUE3NgotOjEwNDYxMDAwMEM2NUEwOTMyODgyODU2NDgwOERCODg5MUJFMEY3OTQ4RgotOjEwNDYyMDAwODE5QjgwNjU1MTREQzBCN0I4MzhDMEExQzBFMDA5QUVDQwotOjEwNDYzMDAwMzgwRTBFNDI2NEUwNDgxQUUwRDUxRkUwRDYyRkE2N0U2MQotOjEwNDY0MDAwQjA0QTZEQUEwNTAwODA4ODAwOTA4Q0MwQTAyRTYwMEMzNgotOjEwNDY1MDAwMENFODExQTc4ODJGODI4NUFERUUwRjRGMEIyRjg2ODVCMgotOjEwNDY2MDAwMkI2MDA2MjJFNENGNjhCMTJBMjk2MDE1QzBCMkM5OUEyRQotOjEwNDY3MDAwRDJBMDJENjEwMjJCNjQwNjBDREQwMjJENjUwMkQxMEY0NAotOjEwNDY4MDAwQzBFMDA4QUUzODdFQjBCNzYzRkZBQjAwMjI2NDA2RDI0QwotOjEwNDY5MDAwQTBEMTBGMDBEMkEwRDEwRjAwQ0M1N0RBNjBEQjMwREMwNAotOjEwNDZBMDAwNDA1ODA4OEZDMDIwRDEwRkRBNjA1ODA5MjA2M0ZGRTgxNgotOjEwNDZCMDAwMDAyODIyMUUyOTIyMUQ3ODk5MDIyODBBMDBDMTc2QzFFRAotOjEwNDZDMDAwQzFDMUQyMUJFMEMyQzEyNEFCNkI2NDgwNDM3ODkxNDA2RQotOjEwNDZEMDAwMkE4MDAwMENBRjBDNjRGMEFFMERBRTBDNjRFMEE4MDJCMgotOjEwNDZFMDAwQUYwQzY0RjBBMjA3QUUwQzY0RTA5QzJGQUNFODY0RjA2MQotOjEwNDZGMDAwOTYyRUFDRTc2NEUwOTAyRkFDRTY2NEYwOEEyQTgwMDczRgotOjEwNDcwMDAwMDhBODBCMDg4QTAyN0I4MzAyMkE4REY4RDhBMDY1QUYxRgotOjEwNDcxMDAwQkJDMDkwNjAwMDczMDAwMDJCNjAwQzBDQjgxMUE3ODgyMAotOjEwNDcyMDAwMkU4Mjg2NkVFODc5MDlCQTBBMkFBMkEzNjhBMDA0OEVBRQotOjEwNDczMDAwNjA3QUU5NkIyQTgyODU2NEEwNjUxRkUwQUFDMEUzMkUzNwotOjEwNDc0MDAwNjQwNjlFQTE5RkEwMUZFMEQ2MkU2MDBBOTJBMzBGRUVFMgotOjEwNDc1MDAwMDI5RUEyOEU2MDBGRUUwMjlFQTQyRjYwMTQ3QUZGNDc4NQotOjEwNDc2MDAwMjJBNDE3MkY4Mjg1QURCRTIyRTRDRjJGRkMxODJGODZGRQotOjEwNDc3MDAwODU2M0ZFNzAyQTZDNzRDMEIxREM5MERENDA1ODA3OTVFQgotOjEwNDc4MDAwMURFMDhGQzBDMTYzRkVDNEQ5QTBEQTYwREIzMERDNDAxRAotOjEwNDc5MDAwREQ1MEMyRjBDMUUwMDlGRTM5NTgwN0RDRDJBMEQxMEZDQwotOjEwNDdBMDAwREE2MDU4MDhFMjYzRkVGMDJDQTQxNzI5ODI4NTBEQkU1QQotOjEwNDdCMDAwMDgyMkU0Q0YyOTlDMTgyOTg2ODU2NDUwMEMyQTZDNzQ0MQotOjEwNDdDMDAwMDQ0QjAyNTgwMTY5RDJBMEQxMEZDMDIwRDEwRjAwMDBDNAotOjEwNDdEMDAwNkMxMDA2MkIyMjFFMjgyMjFEOTMxMDdCODkwMUMwQjA2RAotOjEwNDdFMDAwQzBDOUMwM0JDMUYyMDQwNjQwMURFMDc4QzBFMkMwNzRGRAotOjEwNDdGMDAwMDc0NzAxMEU0RTAxQUQyRDlFMTFDMDQwMkUwQTE0NjRENAotOjEwNDgwMDAwQjA2RTZEMDg0NDI4MjIxRDdCODE2NTJBQjAwMDdFQTExMAotOjEwNDgxMDAwM0I3RkExNDc3QjUxMjA3Q0ExNDk2OEE5MTc2OEFBMTQ1NgotOjEwNDgyMDAwNzNBMTExQzA5Rjc5QTEwQ0MxOEI3OEExMDdDMUFFMjlEQQotOjEwNDgzMDAwMEExRTI5QjQwMDdDQTEyQjJBQjAwNzBCQUIwQkRBQjBGRgotOjEwNDg0MDAwN0RCMzAyMkFCREY4REJBMENBQTU2M0ZGQjQyOEIwMTA2RgotOjEwNDg1MDAwODkxMTY5ODdCQjY0OUZCODYzRkZEQzAwNjQ3RkI0NjMyMAotOjEwNDg2MDAwRkZENTAwMDA2NDZGRDBDMDQxQzFBRTJBQjQwMDYzRkYyMQotOjEwNDg3MDAwQzYyQjIxMDJDRUJFMkEyMjFEMkIyMjFFN0FCMTJBOENFMwotOjEwNDg4MDAwMTA3Q0IxMjE3QUI5MDFDMEIwQzlCOTEzRTA0M0RBMjA3NAotOjEwNDg5MDAwMjhCMDAwMkNCMDA3MDM4ODBBMjg4MjRDQzBEMTBCODBCNgotOjEwNDhBMDAwMDBEQkEwNjVBRkU3RDI0MEQxMEY4OTEwNjU5RkQ0NjNDQwotOjEwNDhCMDAwRkZGMzAwMDA2QzEwMDhDMDcwNjQ1MTcxOEYzMDI5MjEyMwotOjEwNDhDMDAwMDIwRjBGNDcxNkUwMzYwOTBDNEM2NUMwOEY4RDMwMEQ3NgotOjEwNDhEMDAwNkU1MTY4RTMwMjYwMDA4NDI4NjI5RTFBRTAyRjZFODhBMQotOjEwNDhFMDAwNTIyQUEyMjY2OEEwMDQ4QjIwN0FCOTQ3MkE2MjlEQjA3QQotOjEwNDhGMDAwNEVDQkFGOUExMDJCMjAwQzlFMTEwQ0JDMTFBNkNDMjlDQwotOjEwNDkwMDAwQzI4NkI3NDg3OThCNDExN0UwMjYwN0I3MEEyNzcyQTNGQQotOjEwNDkxMDAwNjg3MDA0ODgyMDc3ODkzMDJDQzI4NTlDMTJEN0MwNjVDNgotOjEwNDkyMDAwQzA2MjJDMjEwNDFBRTA1RDdDQUIyMkRBMjA1ODA2OTM4OQotOjEwNDkzMDAwNjAwMDI5MDAyRTIxMDQxREUwNTk3RURCMThEQTIwQzAxQQotOjEwNDk0MDAwQjY1ODA2OEVDOTU4NjAwMTU2QzBDMDYzRkZDQ0RBMjA0NQotOjEwNDk1MDAwNTgwODc2NjAwMDA2REEyMEMwQjY1ODA4NzQ2NTUxM0ZFMgotOjEwNDk2MDAwREM0MERCMzA4RDMwREEyMDBENkQ1MTU4MDZFOEQzQTBFNQotOjEwNDk3MDAwNjRBMTJDQzA1MTI5MjEwMjg0QTE4RkEwMDQwNDQ3MEZGNwotOjEwNDk4MDAwMEY0NzYzRkY0MTJCMjEwNEMwOEM4OTMxQzBBMDA5Rjk3NgotOjEwNDk5MDAwNTAwOThBMzg2RUI4MUUyQzIwNjZBRkNDMEMwQzQ3MkMwMAotOjEwNDlBMDAwMjQ2NjdDQUIxMDlFMTQyQTEyMDA1ODA2RkE4RTE0QzA5RQotOjEwNDlCMDAwRDAyRDI0NjY4RDMwQzA5MjFCRTAxMEMxRjg3RkQ2MEMzQwotOjEwNDlDMDAwODcxMjlCNzAyOTc2MDEyRjc0MDgyNzdDMTA2NTUwQjdEOQotOjEwNDlEMDAwQjgzQUMwRDdEQzcwQzA1MUMwODAwNzU4MzgwODA4NDJDOAotOjEwNDlFMDAwNjQ4MDc5MURERkVBMTlERkVCMjlENjdFNkE0MjBBRDM5QgotOjEwNDlGMDAwMEY2REU5MDUwMEEwODgwMEMwOENDMEEwODgzMEMwOTI2RgotOjEwNEEwMDAwN0Y4NjM4MDdFODBCMkY4NDA4OUI4MDk5ODFCNEU4MkNCNwotOjEwNEExMDAwMjAwQ0MwOTAxRERGRUEwQ0MzMTFBNjMzMjIzMjg1QURGNQotOjEwNEEyMDAwQ0MwMjgyMEIyOUM0Q0YyMjM2ODVEMkEwRDEwRjhBMzA4NgotOjEwNEEzMDAwQzBGMTdFQUUzMjI5MjEwMjYzRkU4ODAwMkMyMDBDOEU0QwotOjEwNEE0MDAwMTFDMEIwMURERkRFMENDRjExQTZGRjIyRjI4NUFEQ0M2OAotOjEwNEE1MDAwMkJDNENGMDJFRTBCMkVGNjg1RDJBMEQxMEZDMDgwMEE1OAotOjEwNEE2MDAwNTgzODc4RDA4NjYzRkY3QTlGMTNEQjMwREEyMEMwQzFENAotOjEwNEE3MDAwREQ3MDVCRkY1NzI5MjEwMjhGMTMyQTlDRkU2NUFFNDMzMAotOjEwNEE4MDAwMjcyNTAyQzA5MDYzRkUzQjlFMTQyQTJDNzRDMEIxREMyMwotOjEwNEE5MDAwNzBERDQwNTgwNkQwOEUxNDFCREZEOEMxRjg2M0ZGNUI3MQotOjEwNEFBMDAwQzAyMEQxMEY2QzEwMDYyODIxMDIxNkRGQkMwODA4NEM2QwotOjEwNEFCMDAwNjU4MjE1Mjk2MjlFNkY5ODAyNjAwMjFDMTlERkI3Mjk3MgotOjEwNEFDMDAwOTIyNjY4OTAwNzhBMjAwOUFBMEM2NUEyMEIyNzYyOUQ4RQotOjEwNEFEMDAwQzBDQzY0NzIwMzJCMjEwNDhFMzFDMEEwRERBMDBFRkU3OQotOjEwNEFFMDAwNTAwRUNEMzg2RUI4MTEyQzIwNjYyQ0NDMDEwQzBDNDcyMgotOjEwNEFGMDAwMkMyNDY2N0NEQjAyNjAwMUVBQzBDMTI5MzAwODFCREY4MAotOjEwNEIwMDAwQTk2NDkwOTcyRjBBRkZDMEQzQjA5RTY0RTBGRDY4OTIxRAotOjEwNEIxMDAwMEU2NDUwODMyQTJDNzREQjQwNTgwMDkzRDJBMEQxMEYyRQotOjEwNEIyMDAwMkIyMDBDMjcyMTA0MENCQzExQTZDQzI5QzI4NjI4MEFGNAotOjEwNEIzMDAwMDg3OTgzMDI2MDAxQjkxOURGOUEwOUI5MEEyOTkyQTM5OQotOjEwNEI0MDAwNjg5MDA4MkUyMjAwMDlFRTBDNjVFMUE0MkVDMjg1NjQ0RgotOjEwNEI1MDAwRTE5RTI2MjAwNzEzREZBMzZFN0IwMjYwMDE5QTE3REYxOAotOjEwNEI2MDAwOUExRkRGQTMxOURGRDBDMEQyMjgyMDBBOTNFMDlERTE2RAotOjEwNEI3MDAwQTk2OTBGODgwMjk4RTIyRjkwODAyQTk0ODBCMUZGMDdEQwotOjEwNEI4MDAwRkYwMjlGRTMxRURGOEUyRkMyODVBRUJFMEZERjBCMkYwRAotOjEwNEI5MDAwQzY4NTJBRTRDRjY1NUY3QkMwMjBEMTBGMkYzMDEwMjk1NgotOjEwNEJBMDAwMzAxMTJFMzAxMzAwOTkzMjAwRUQzMjY0RjBFRTJBMzBDRAotOjEwNEJCMDAwMTQxRkRGQkQwMEFBMzI3OEVGMDUwRjlFMDkyREU0N0Y5OAotOjEwNEJDMDAwMUVERkJCNjZBMDA1MEY5ODA5MkE4NDgwQjRBNzE4REZGMgotOjEwNEJEMDAwQjhDNzZGMDA5MTA0QUU5RURERTAwMEFGMUEwMEMzMUFBMwotOjEwNEJFMDAwNkVFMTA1MkRCMjAwMERFRDBDMUVERkIyMDhEODFDMDZEQgotOjEwNEJGMDAwMzMwM0FFODgyQTg0OEIyRUIwMkUyNzg0OEMwM0VFMDFEQgotOjEwNEMwMDAwMEZFRTAyMkVCNDJFNTgwMThGNjNGRjA0MjkzMTA4MjlCQwotOjEwNEMxMDAwMjUwNDI4MzAxNDJFMzEwOUIwODg2NDgwQTMyRTI0MEE3QwotOjEwNEMyMDAwQzA4MTJFMzAxNjJDQjQyMzJFMjQwQkI0RUYyRjI0MEM2RAotOjEwNEMzMDAwOEMzNzhCMzYyOTI1MDRERUIwREZDMDBGOEYzOTBFOEVGRQotOjEwNEM0MDAwMzkwRkVFMDI2NEVFQzkwODlGMTEwMUM0MDQ4RDM4MENCRgotOjEwNEM1MDAwQjgxODAwQzQwNDBDQkUxODAwRUUxMTBFREQwMkMwRTM0QgotOjEwNEM2MDAwMEVGRjAyMUVERjg3OUY3MTlFNzAxRURGODQ4RjIwOThDQgotOjEwNEM3MDAwNzM5RDc0MDVGRjExMEJDRDUzQzE4MDk4NzUwRkREMDIzNAotOjEwNEM4MDAwMEVERDAyOUQ3MjJBMjQ2NjFFREY0NDJGNjI5RDJBRTRGNwotOjEwNEM5MDAwQTIyRkZDMTgyRjY2OUQ2M0ZFNzYwMDAwMDAyRjMwMTJCNQotOjEwNENBMDAwMUJERjg2MDBGQTMyNzhGRjA1MEI5ODBCMkE4NDdGNjY5QgotOjEwNENCMDAwRDAwNTBCOUEwQjJEQTQ4MDJBMzAxMTAwQUEzMjYzRkY3NQotOjEwNENDMDAwNDQyRjI0MEE5RTJCNjNGRjU2Q0M1N0RBMjBEQjMwRENCRQotOjEwNENEMDAwNDA1ODA3MDNDMDIwRDEwRjAwREEyMEMwQjY1ODA3OTMxMAotOjEwNENFMDAwNjNGRkU1MDBEQTcwNTgwNjJCQzBBMDJBMjQ2NjYzRkUzNQotOjEwNENGMDAwMDdEQTIwNTgwNzhFNjNGRkNGQjE2OTI4MjAwQTg2MjA4MwotOjEwNEQwMDAwMDkwOTQ3OTkxMTI5MjQwNzk4MTA3RjgxMjY5M0UwMjdFNAotOjEwNEQxMDAwRTUwQTlBRTM4ODEwOURFMTE5REY2MjhEMTEwOTZGMDI5RgotOjEwNEQyMDAwOUZFNDJERTQxNjA5ODgwMkMwRDM5OEUyMkEyNDA3NjM4MQotOjEwNEQzMDAwRkU1MTAwMDAxRkRGMkIwODY5MTE4ODExOEQyQjkzRTBCNQotOjEwNEQ0MDAwMDk4ODAyQzA5Rjk4RTUwRkREMDIwNDc4MTE5REUyQzAzQQotOjEwNEQ1MDAwRjQ5RkUxQzBENDA5ODgwMjk4RTQ2M0ZGQ0UwMDAwMDAwQwotOjEwNEQ2MDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDg1MjEwRDM4MTE4NwotOjEwNEQ3MDAwMTRERjA4ODYyMkE0MjQwODY2MEM5NjIyMDUzMzBCOTNDMAotOjEwNEQ4MDAwMjE3NDNCMTNDODYyRDIzMEQxMEZDMDMwQkMyOTk5MjFBNQotOjEwNEQ5MDAwOTkyMDkzMjJEMjMwRDEwRjIzM0RGODkzMjE2M0ZGRTM3MgotOjEwNERBMDAwNkMxMDBBRDYyMDk0MTgxN0RFRkREOTMwQjgzODk4MTkzRgotOjEwNERCMDAwOTkxNDY1NTI1MkMwRTFEMkUwMkU2MTAyMURERUZBMEU1NgotOjEwNERDMDAwMEU0QzY1RTE2MzhGMzA4RTE5MEY2RjUxMkZGQ0ZENjUxRQotOjEwNEREMDAwRjE1NjhFRTEyOUQwMjMwRThGNTA3N0U2NkI4RjE4MUU4NwotOjEwNERFMDAwREYzN0IwRkYwRkY0MTEwRjFGMTQ2NTkwQ0UxOERGMzRCQQotOjEwNERGMDAwOEM2MEE4Q0NDMEIxMTlERUU4Mjg2MDBCMDlDQzBCMEQ4MwotOjEwNEUwMDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkFGNQotOjEwNEUxMDAwMzgxQkRGMkEwQ0E5MEEyOTkyOTQ3QjlCMDI2MDAwOEMyNAotOjEwNEUyMDAwMkI2MDBDOTQxNjBDQkQxMUE3REQyOUQyODZCODQ4NzlFOQotOjEwNEUzMDAwODMwMjYwMDBEMjE5REVEQTA5QjgwQTI4ODJBMzk4MTcyMwotOjEwNEU0MDAwNjg4MDAyNjAwMEEzNjAwMEE1MUFERjFFODQxODBBRUVDNQotOjEwNEU1MDAwMDFDQTk4MUJERUQxOEMxOTJCQjAwMDhDQzA2RUIzMTMyNQotOjEwNEU2MDAwMURERUNFMEMxQzUyMERDQzBCMkRDMjk1QzBBMTdFREJERAotOjEwNEU3MDAwQUU2MDAwMzgwQzBDNTM2MDAwMDkwMDAwMDAxOERGMTAxMQotOjEwNEU4MDAwOEM2MEE4Q0NDMEIxMTlERUM0Mjg2MDBCMDlDQzBCMEQxNgotOjEwNEU5MDAwODgwOTI5ODExQzI4ODExQTJBMEEwMDA5ODgwQzA4QkE2NQotOjEwNEVBMDAwMzgwQ0E5MEEyOTkyOTQ3RTkzMDI2M0ZGNzJEQTYwQzBEQgotOjEwNEVCMDAwQkE1ODA3MUU2NDUwNzQ2MDAyNjYwMDAwMUFERUI3OEM5MAotOjEwNEVDMDAwMTkyQUEwMDA4Q0MwNkVBMzFBMThERUIzMEMxQzUyMDg1RAotOjEwNEVEMDAwQ0MwQjE4REVGQTJCQzI5NUMwQTE3OEIzMDI2M0ZGM0Y1QQotOjEwNEVFMDAwNjNGRkM5MDAwQzBDNTM2M0ZGMDk4OTYwNzg5OTE4Mjk4NgotOjEwNEVGMDAwRDI4NUM5OTIyQjcyOUUxRERFQTg2RUI4MjQyREQyMjZCMwotOjEwNEYwMDAwOTkxMzY5RDAwQzYwMDAwRURBNjA1ODA3MDg2MDAwMTgyOQotOjEwNEYxMDAwMDAwMDg4NjA3RDg5MEE5QTFBMjk3MjlEOUMxMjk5MTU1MQotOjEwNEYyMDAwQ0Y5NERBNjBDMEI2NTgwNzAxNjU1MUY0OEQxNDhDMTgxRgotOjEwNEYzMDAwREJEMDhERDBEQTYwMEQ2RDUxNTgwNTc0RDNBMDlBMTQ3MgotOjEwNEY0MDAwNjRBMUREODJBMDg1QTFCOEFGOUYxOTA1MDU0NzAyMDJDMwotOjEwNEY1MDAwNDc5NTE4QzA1MTYzRkU2MDJCNjEwNEMwOEM4OTMxQzAzNQotOjEwNEY2MDAwQTAwOUY5NTAwOThBMzg2RUI4MUYyQzYwNjZBMkNDMENEMwotOjEwNEY3MDAwMEM0NzJDNjQ2NjdDQUIxMTlGMTE5RTFCOEExNTU4MDU0QgotOjEwNEY4MDAwODU4RTFCOEYxMUMwQTAyQTY0NjY5RjExNjRGMEUxODk5MQotOjEwNEY5MDAwMTM4ODE5REVGMDZERTkxNzJGODEwMzAwOTA4REFFRkVBNgotOjEwNEZBMDAwMDA4MDg4OUY5MjAwOTA4QzAwODA4OEI4OTkwMDkwOEMzNwotOjEwNEZCMDAwNjU1MTRFOEExMDg1MUE4QjMwMUZERThBODgxMjI5NjA0RgotOjEwNEZDMDAwMDcwODU4MEEyQzgyOTQyRDYxMDQwRUNDMEMyQzg2OTQ3MAotOjEwNEZEMDAwNkZEQjNDMUNERUI0QUM5QzI5QzA4MDBCNUQ1MEEyOTlGOQotOjEwNEZFMDAwMDkwOTQ3MjlDNDgwNjVEMERBMkU2MDBDQzBEMDFGREVDNQotOjEwNEZGMDAwNzMwQ0U4MTFBNzg4MjI4Mjg1QUZFRTAyNDIwQjJERTRFNAotOjEwNTAwMDAwQ0YyMjg2ODVEMkEwRDEwRjhFMzAwRTBFNDc2M0ZEQTYyQgotOjEwNTAxMDAwQTI5QzBDMEM0NzJDNjQwNzdBQjZDRDhCNjAyRTYwMEFEQwotOjEwNTAyMDAwMjgwQUZGMDhFODBDNjQ4MTBFMThERTlEODMxNjgyMTM5RgotOjEwNTAzMDAwQjMzOTAyMzMwQjJDMzQxNjJEMzUwQUMwMjM5MjMxOUYxRAotOjEwNTA0MDAwMzBDMDIwOTIzMzA4QjIwMjA4RTgwMjkyMzQ5ODMyQzA4RAotOjEwNTA1MDAwODAyQjYwMEMyODY0MDdEMkEwMUNERTU4MENCRTExQTc2MAotOjEwNTA2MDAwRUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCMkRFNjg1RDE4RQotOjEwNTA3MDAwMEY4QjE4ODgxMzhEMzBCODhDMEQ4RjQ3MEQ0OTUwQjRBNQotOjEwNTA4MDAwOTkwNDk5MTAwRDBENUYwNEREMTAwOUZGMDI5RjgwMEQzQQotOjEwNTA5MDAwQkIwMjlCODE2NTUwOEQ4NTFBQjgzQUMwRjFDMDgwMEM2NwotOjEwNTBBMDAwRjgzODA4MDg0MjY0ODA2QjFCREUzOTE5REUzQTI5QjZFRAotOjEwNTBCMDAwN0U4RDE4QjBERDZEREEwNTAwQTA4ODAwQzA4Q0MwQTAyMAotOjEwNTBDMDAwNjNGRUYzMDAxRERFNEIyODYwMEE4MjEzOEIxNkMwRTBERQotOjEwNTBEMDAwMkVDNDgwMDJCMjBCMEQ4ODAyQjJCQjk5MjM5RjIwQzA2MAotOjEwNTBFMDAwRDI5ODIyOUQyMTIyNjAwQzBDMkQxMUE3REQyOEQyODU5QgotOjEwNTBGMDAwMDhCQjBCMThERTMyMkJENjg1QTgyMjJFMjRDRkQyQTBENwotOjEwNTEwMDAwRDEwRjlFMUI4NTFBMkE2Qzc0OEIxODVCRkYxNzhFMUJBMAotOjEwNTExMDAwNjNGRUEzMDBDMDg3QzA5MDBBRjkzODc5ODA5MjYzRkZDQwotOjEwNTEyMDAwODZDMDIwRDEwRjlFMUIyQTZDNzRDMEIxOEQxODU4MDUwMwotOjEwNTEzMDAwMjk4RTFCODUxQTYzRkU3RTg4NkI4MjEzODkxNjA4QkUzMgotOjEwNTE0MDAwMTEwRUNFMDIwMjkyMEI5RTI1QjQ5OTFFREUyNTlGMjBFMQotOjEwNTE1MDAwMEU4ODAyOTgyMkMwRUYwNEQ4MTEwRTg4MDI5ODI0QzA0RAotOjEwNTE2MDAwRTQ5RTIxQzA4MEQyQTAyQjYwMEMyODY0MDcxQ0RFMTNCMwotOjEwNTE3MDAwMENCRTExQTdFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEI2NAotOjEwNTE4MDAwMkRFNjg1RDEwRjAwMDAwMDZDMTAwNEMwMjBEMTBGMDA2NwotOjEwNTE5MDAwNkMxMDA0ODYzM0MwNzFDMDMwNjAwMDAxQjEzMzAwMzEzRgotOjEwNTFBMDAwMDQwMDc0MUEwNDYyMDE3NDYwRjFEMTBGNkMxMDA0MDJERgotOjEwNTFCMDAwMkEwMjAzM0IwMjVCRkZGNjFERERGQjFCREU0M0M3OUY5QwotOjEwNTFDMDAwODhCMDA5QTkwMzA5OEEwMTlBQjAyQkQxMDI3OTgwMUIwMgotOjEwNTFEMDAwMUNEREYzQzBFMDBFRTQzMTAwMDIwMDJBQzI4MjFEREVCNQotOjEwNTFFMDAwM0IwREFBMDIyQUM2ODIwQkU0MzFEMTBGQzFGMDBGQkZEQQotOjEwNTFGMDAwMDIwRjBGNEYyRkQ1MDIwRkU0MzFEMTBGNkMxMDA0MTJBNAotOjEwNTIwMDAwRERFOTFBRERFNkMwQzAwQ0U0MzEwMDAyMDAyOUEyODIwQgotOjEwNTIxMDAwMThERTMxMUJERTJGMjYyMTAyMEI5OTAxMDg2NjAxMjlCOQotOjEwNTIyMDAwQTY4MjI2MjUwMjA2RTQzMTE0REUyQzE1REUyNzIzNkEyOQotOjEwNTIzMDAwOTAyMzI2MTI4NTUwMjQyNjExMjUyNjEzMjIyQzQwRDE5NgotOjEwNTI0MDAwMEYwMDAwMDA2QzEwMDgxNkRFMjUyQjBBNjQyQzFBQjQxRgotOjEwNTI1MDAwMTdEREQ1MUREREQxMThERTIyMEYyRTExMEQyQTExQjI1QQotOjEwNTI2MDAwRTkwRUVFMTFBOEE4MEU5OTExQURBQUE3OTlBN0VFOUU3NgotOjEwNTI3MDAwMTY5OTExQUNBQTlBMTUyQzgwRkYyQTgwRkUyODhEMDE2MAotOjEwNTI4MDAwMjk4MDAxMDhBQTExMjg4MDAwMENBQTAyMDg4ODExMDlBNwotOjEwNTI5MDAwODgwMjA4QUExQ0I4ODgyODE2MDA1ODA4NUQyOTcxMTZDQgotOjEwNTJBMDAwOUExMjI5MTYwMzhBMTU4QjEyMkFBMDgwMEJBQTI4OEIyMgotOjEwNTJCMDAwMTA1ODA4NTdENDcwOEMxNjhCMTMxNURFMEEwQkFCMjhDOAotOjEwNTJDMDAwMjM1QzQxOUIxNDJCQzYyODJDMzA4MDcyQzkxNThDMTQ4QQotOjEwNTJEMDAwMkE1MEMwMkIzQTIwMENBQTI4NTgwODREQzBEMTBBREQwQwotOjEwNTJFMDAwMzcyRDQ1NDBCNDQ0QjI1NUIyMzM3NjM5REFCMjc3OEZCMAotOjEwNTJGMDAwMTE4RTE2ODgxNUI0RUVCMTg4OTgxNTlFMTY3RkU5QTQxNAotOjEwNTMwMDAwRDEwRjAwMDA2QzEwMDRDMDIxRDEwRjAwNkMxMDA2QzAzQQotOjEwNTMxMDAwNzAxQUREQTIxRUREQUQxREREQjMxQ0REQjUxQkREOUVFQgotOjEwNTMyMDAwMTNEREUxMjIwQTA4MThERDlGMTREREVGMjg4MDJFMjQwQQotOjEwNTMzMDAwNDAwMDI4MTYwMDZEMkE3MEEzNDkyODkwODBDMEYxNjRBRgotOjEwNTM0MDAwODA1OTg1MTAwMDQxMDRDMDYxMDA2NjFBMDY1NTAxMDVBOAotOjEwNTM1MDAwRjUzOTBDNTYxMTBBNjYwODJGNjI5NjZFRjc0RDBCNUZGMQotOjEwNTM2MDAwMEEyRkYyMjQ2OEYwMDgxMkRERDEwMjQyMDg3MkY5M0JEQwotOjEwNTM3MDAwMjM2Mjk1MEM0MjAyQ0IzNDkyMzJDMEYyOUQzMDlGMzFCMQotOjEwNTM4MDAwMEU4RjAyOUYzMzIzNjI5NUFCNTIyRjBBMDAyRjk0ODAxOQotOjEwNTM5MDAwMkYyNEEwMjMzQzEwMjM2Njk1MTNEREMyQjE3NzEyRERDNAotOjEwNTNBMDAwRDJCMTQ0MDQwNDQyMjQyNDAwRDEwRjAwRDEwRkQxMEYwNAotOjEwNTNCMDAwNkMxMDA0MUFERDc5MkFBMDAwNTgwMjFCNUJGRkQzMDI4RgotOjEwNTNDMDAwMkEwMjAzM0IwMjVCRkZDRjFCREQ3N0MwQzQyOUIxMDI3OQotOjEwNTNEMDAwQzhBQzBDOUMwMjBDMEM0RjJDQjUwMjBDRTQzMUQxMEY2NAotOjEwNTNFMDAwMUVERDZGQzA4MDA4RTQzMTAwMDIwMDJERTI4MjFGREQ2NwotOjEwNTNGMDAwODAwRkREMDIyREU2ODIwOUU0MzFEMTBGNkMxMDA0MTUxNwotOjEwNTQwMDAwREQ2NzE2REQ2OEMwMjAwMkU0MzEwMDAyMDAyNDUyODIwQwotOjEwNTQxMDAwMjI2MTAyNzM0RjA2MDJFNDMxQzAyMEQxMEYxOEREQjRCRgotOjEwNTQyMDAwMTlEREIzMDgyODAxMDk0OTAxMjk1NjgyMjg2NTAyMDhCNwotOjEwNTQzMDAwRTQzMTEzRERBOTIyNkM3MDIzNjYxREQxMEYwMDAwMDAzQQotOjEwNTQ0MDAwNkMxMDA0MjkyMDA2Mjg5Q0Y5NjQ4MEEwMkE5Q0ZENjUyNAotOjEwNTQ1MDAwQTA5NjhBMjg4RDI2MkYwQTA4N0FEOTA0MkIyMjFGQzhFNQotOjEwNTQ2MDAwQkQyQzIwNjQ2NEMwODEyRTIyMDkwRUFFMEM2NkUwNzg0QgotOjEwNTQ3MDAwMkIyMDBDMUVERDRBMENCQzExQUVDQzI4QzI4NjE5RERENwotOjEwNTQ4MDAwNDg3OEYzMDI2MDAwQTkwOUI5MEEyOTkyQTM2ODkwMDgzNAotOjEwNTQ5MDAwMkUyMjAwMDlFRTBDNjVFMDk3MjlDMjg1MUZERDUyNjRCQgotOjEwNTRBMDAwOTA4RTlGOTBDMEU0MUZERDVGOUU5MTI4MjAwQUMwRTA4RgotOjEwNTRCMDAwOUU5MzBGODgwMjk4OTI4ODIwMEY4ODAyOTg5NDJGMjAzQwotOjEwNTRDMDAwMDc5QTk3OUQ5NjJGOTUwQTJFMjQwNzI4MjAwNjI5MjBCMwotOjEwNTREMDAwNjQ2ODgzMkYyOEMyODUxMkREMzkyODhDMjBBMkIyMkU2MQotOjEwNTRFMDAwMjRDRjI4QzY4NUMwMjBEMTBGQzAyMEQxMEYyQTIwNkEyMgotOjEwNTRGMDAwMEEyQTQxNjVBRjU1REEyMEMwQjA1ODA1RDM2NEFGRTgzOQotOjEwNTUwMDAwQzAyMUQxMEY2NDlGQ0MxRkREMjcyRDIwMTY4RkYyMDlGQgotOjEwNTUxMDAwREQwQzAwRjEwNDAwREQxQUFEQUQ5RDI5MjhDMjg1MTIxNQotOjEwNTUyMDAwREQyNzI4OEMyMEEyQjIyRTI0Q0YyOEM2ODVDMDIwRDEwQQotOjEwNTUzMDAwMEZDMDIxRDEwRjAwMDAwMDZDMTAwNDI2MEEwMDFCRERGMwotOjEwNTU0MDAwNkQxNUREMTgyODIwNjUxN0REMTUyODhDRkU2NDgwOTQwNAotOjEwNTU1MDAwMEM0RDExQURCRDJDRDJGNTJCRDJGNDJBNTEwMjdDQjFFOQotOjEwNTU2MDAwNDIyQTUxMDJCNEJCMkVEMkY3MkJENkY0N0JFOTA1MkI4RAotOjEwNTU3MDAwRDJGNjJCRDZGNDdDQjkyQjI5RDJGNjI5RDZGNTI5RDYyQQotOjEwNTU4MDAwRjQwNkU0MzEwMDAyMDAyRjcyODJDNzlGMDA0MTA0QzA3QwotOjEwNTU5MDAwODEwMDg4MUEwOTg4MDMwOEZGMDEyRjc2ODIwQUU0MzEwNgotOjEwNTVBMDAwNjAwMDAwMDAyNjI0NjUyQkQyRjQ4RTVBMkNEMkY1QjA3MAotOjEwNTVCMDAwRUU5RTVBN0JDQjE2MjlEMkY2MkZEMkY3MENCODBDMDlFNwotOjEwNTVDMDAwRkYwQzA4RkYwQzBGMkYxNEM4Rjk2MDAwMkYwQkNEMEMzNwotOjEwNTVEMDAwMEQyRDE0Q0VENkMwRTIwRUFFMDIwRTBFNEYyRTU1MDI4OQotOjEwNTVFMDAwMEVFNDMxRDEwRkRCMzBEQTIwNUJGRjk1MUJERDQyNjQyNgotOjEwNTVGMDAwQUY1RDJBNTEwMjBDNEQxMUFEQkQ2M0ZGQTkwNkU0MzEyOAotOjEwNTYwMDAwMDAwMjAwMkU3MjgyMUZERDAwMEZFRTAyMkU3NjgyMEE0QgotOjEwNTYxMDAwRTQzMUQxMEY2QzEwMDQxNkRDRTExNURDRTJDMDMwMDM3QwotOjEwNTYyMDAwRTQzMTAwMDIwMDI0NjI4Mjc0NDcyMTE4REQzMzg3NUE3NgotOjEwNTYzMDAwMDg0ODAxMjg2NjgyQ0Q3MzE5REQzMTBDMkExMUFBOTkxOAotOjEwNTY0MDAwMjI5MjgzMjk5Mjg0NzI5MTAzODIyMENDMjkyQjUxMDJDOQotOjEwNTY1MDAwMEJFNDMxQzAyMEQxMEYwMDFGREQyQTJFNTEwMjBGRUVDNgotOjEwNTY2MDAwMDEyRTU1MDIwRUU0MzFCMDJEQjE3QzlDNUEyMjVDNjBCMwotOjEwNTY3MDAwMDhERDExMkQ1NjE5RDEwRjZDMTAwQTFBRENDNzFEREM3QwotOjEwNTY4MDAwQzkyM0EwMDAxOUREMjA2RjMzNzkxQ0REMDdDMDI4MTU2MAotOjEwNTY5MDAwREQxRjFFREQxRDJCMUMxMEQ0QjA4M0UwMDA1MDg2OTU0RAotOjEwNTZBMDAwMTAwMDQwOEE5NDE4NkQyQTRGMEYzNTExMEMzNDA5MjRDQwotOjEwNTZCMDAwNDA4MDBBNTYwQTI4NjI5NDBENTUwOTJGNTE0MDBGNDQyNAotOjEwNTZDMDAwMTEwQjQ0MEEwODk3MEMwRjc3MzY4RjQwMEY3NzM2MjI1QwotOjEwNTZEMDAwNTE0MTA3RkYwQzlGNDBBODc3MkY2Mjk1Mjc2Njk0MEZEMgotOjEwNTZFMDAwOTgwQzAyODgzNjg3NDEwNzg4MzZCMTMzMDg3NzBDQUZBQgotOjEwNTZGMDAwOEYyRjY2OTU5NzQxMDMwMzQyQjEzODA4MDg0Mjk4RTAxRQotOjEwNTcwMDAwRDEwRjAwMDAxQ0REMDMxNEREMDNCRkM1MjQ0MkI1NjRDNgotOjEwNTcxMDAwMzA1NUMwOTFDMEQwMTZERDAwMDQ4ODQzMkJDMDAwQzBCNgotOjEwNTcyMDAwNDA2RDM5M0UwMDQxMDQwMDk3MUE3NzgwMTYyRkEyOTVFQwotOjEwNTczMDAwOEU1MEFGRUUyRUVEMjAwNkVFMzY5RTUwMkRBNjk1NjBEMwotOjEwNTc0MDAwMDAxQTAwMDA3N0IwMDk4MzUwOUQ1MDIzQTY5NTYwMDA5MQotOjEwNTc1MDAwMDIyM0EyOTUyMjNEMjAwNjIyMzYyMkE2OTVCMTQ0QjQwQQotOjEwNTc2MDAwNTVCOEFBMjhDNDAwRDEwRjA0ODg0MzI4QzQwMEQxMEYxQgotOjEwNTc3MDAwNkMxMDA0MTVEQ0VBMTNEQ0VBQzA0MDA0RTQzMTAwMDJEQQotOjEwNTc4MDAwMDA4ODUwQ0I4MTVCRkZCQzFDRENFNzBDMkQxMUFEQ0MzRAotOjEwNTc5MDAwMkJDMjgyMkFDMjgzOTQ1MDdCQUIxNDJFQzI4NDI5QzJBRQotOjEwNTdBMDAwODUwQUJEMEMwRTk5MEMwRDk5MEMwOTI5MTQ2MDAwMDU5MQotOjEwNTdCMDAwMEJBOTBDMDkyOTE0OTkzMDE1REM3QjJBNTEwMjBBRTQ0MwotOjEwNTdDMDAwMzEyQTJDRkM1ODAwNDkyQjMyMDAxRURDNzQyQkJDRkYwNAotOjEwNTdEMDAwMkIzNjAwQ0NCNUM4QTNEMkEwRDEwRjAwRDJBMDA0RTREMAotOjEwNTdFMDAwMzEwMDAyMDAyREUyODIyQzUxMDIyRkJBRkYwRkREMDFBMQotOjEwNTdGMDAwMkRFNjgyMENFNDMxRDEwRjZDMTAwNEQxMEYwMDAwMDBCMwotOjEwNTgwMDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDEzRENDN0MwRDE5MQotOjEwNTgxMDAwMDMyMzA5MjMzMThEQzBBMDZGMzQwMjYwMDA4OTFCREM5MwotOjEwNTgyMDAwNjFDN0NGMThEQ0MwMEMyOTExQTk4ODI2ODI4MzI1ODI4NAotOjEwNTgzMDAwODIxOURDNUE3NjUxNDQyNzUyMDAyRTgyODUyNTVDMDQ1OQotOjEwNTg0MDAwMjU4NjgyNzVFOTA1MjU4Mjg0MjU4NjgyNzY1OTU0MjYyNwotOjEwNTg1MDAwODI4NEQ1NjAyNjg2ODIyNjg2ODMwQUU0MzEwMDAyMDA4RgotOjEwNTg2MDAwMjM5MjgyMkZCMTAyMDAyMTA0MDBENDFBMEM0NDAzMDRCNQotOjEwNTg3MDAwMzMwMTIzOTY4MjBGRTQzMTYwMDAwMjAwRDdBMDc2NTlFRAotOjEwNTg4MDAwMjIwQUU0MzEwMDAyMDAyRTkyODIwMDIxMDQyOEIxMDI5MwotOjEwNTg5MDAwMDBERjFBMENGRjAzMEZFRTAxMkU5NjgyMDhFNDMxRDJDRQotOjEwNThBMDAwNzBEMTBGMDBEMjcwRDEwRkMwMjBEMTBGNkMxMDA0REI2QgotOjEwNThCMDAwMzA4NjIwMTVEQzM5MjgwQTAwMjgyNTAyREEyMDI4QjA5NQotOjEwNThDMDAwMDAyQ0IwMDcwNTg4MEEyODgyNEMyRDBBMDEwQjgwMDBBNQotOjEwNThEMDAwREJBMDY1QUZFNjFBREMzMjBBNEEwQTI5QTJBM0M3QkZEOQotOjEwNThFMDAwNzY5MTAxRDEwRjJCQTZBM0QxMEYwMDAwNkMxMDA0QzAzQwotOjEwNThGMDAwRDFDN0NGMUJEQzJDQzBBMDE4REMyODBDMjkxMUE5ODgyQgotOjEwNTkwMDAwODc4NTg1ODQxOURDMjY3NzUxNzk4NjUwOEU4N0I0NTUzMgotOjEwNTkxMDAwOTU4NDc1RTkwMzg1ODY5NTg0Nzc1OTZDOEY4NjlGODU3NAotOjEwNTkyMDAwOUY4NDBBRTQzMTAwMDIwMDIzOTI4MkI0MkUwMEUxMDQzNQotOjEwNTkzMDAwMkZCMTAyMDBENDFBMEM0NDAzMDQzMzAxMjM5NjgyMEZDMgotOjEwNTk0MDAwRTQzMTBBRTQzMTAwMDIwMDIzOTI4MjAwRDQxQTBDNDRBQwotOjEwNTk1MDAwMDMwNDMzMDEyMzk2ODIwRkU0MzFEMjYwRDEwRjAwMDA5QgotOjEwNTk2MDAwMEFFNDMxMDAwMjAwMjM5MjgyQjQyODAwODEwNDIyQjFBQgotOjEwNTk3MDAwMDIwMEQ0MUEwQzQ0MDMwNDMzMDEyMzk2ODIwMkU0MzE1QQotOjEwNTk4MDAwRDJBMEQxMEZENkEwNzc1MUQ2RDI2MEQxMEYwMDAwMDA5RgotOjEwNTk5MDAwNkMxMDA0MjcwQTgwMUNEQzI4MUREQzI4MUFEQzAwMEM5MwotOjEwNTlBMDAwMjkxMUFBOTkyQTJDRkMyQjkyODUwREFBMDI5Q0IxOUE0NgotOjEwNTlCMDAwQjBDMDUxMTNEQzI1Mjg5Mjg1MTZEQzIxMTREQzIyQTYwOAotOjEwNTlDMDAwMjYwNDI0MEFCODg4Mjg5Njg1MjM0NjkxQTc2NjI1NjQ2QwotOjEwNTlEMDAwOUZEMTBGMDA2QzEwMDQxOURDNTUwQzJBMTFBOUE5ODk1QwotOjEwNTlFMDAwOTBDNDg0Nzk4Qjc2MUJEQzQ1QUJBQzJBQzI4MzJDQzI3NQotOjEwNTlGMDAwODQ3QUMxNjg4QUEwMkJCQzMwRDNBMDY0QTA1RTBCMkIzNAotOjEwNUEwMDAwMEEyQ0IyQTMxOURDMEY2OEMwMDcxRERDNDlEMzBGN0QzNwotOjEwNUExMDAwQzk0QUE5MjkyOTlEMDEyOTkwMUY2ODkxMzI3MEE2MDNCRQotOjEwNUEyMDAwRDNBMENBOUU2ODkyMTBDN0FGMkFCNkEzMkEyQ0ZDNUJFQgotOjEwNUEzMDAwRkZBRkQyMzBEMTBGMDAwMDEzREJFRjAzQTMwMThDMzE5NQotOjEwNUE0MDAwMUREQkUwMEM4QzE0MERDQzAxMkNCNkEzNjNGRkRDMDAzNQotOjEwNUE1MDAwQzAyMEQxMEZEQTIwNUJGRkNFQzAyMEQxMEZDMDIwRDFGMwotOjEwNUE2MDAwMEYwMDAwMDA2QzEwMDREQjMwQzBEMDE5REJDQkRBMjA1MwotOjEwNUE3MDAwMjgzMDAwMjIzMDA3MDg0ODEyMDk4ODBBMjg4MjRDRENBNgotOjEwNUE4MDAwMjAwQjgwMDAxQkRCQzYwQzRBMTFBQkFBMjlBMjg0MDk5QgotOjEwNUE5MDAwMjkwQjI5QTY4NEQxMEYwMDZDMTAwNEMwNDExOERCQkY2QwotOjEwNUFBMDAwMTdEQkMxMEMyNjExQTcyNzI3NzAzMEE4NjYyNTYyODY1MAotOjEwNUFCMDAwMDA3MTA0QTM1NTAwNDQxQTc1NDE0ODIyNjI4NDE1REIyNQotOjEwNUFDMDAwRTIwMjMyMEJDOTIyODgyMTE3REJCRTA4ODQxNDA3NDQ4NgotOjEwNUFEMDAwMDE3NTQ5MDVDODM0QzAyMEQxMEZEMTBGMUREQzE1QzA5OAotOjEwNUFFMDAwQjI4RTIwMUZEQkFEMEUwRTQzQUZFQzBGRUUwQTJCQzRCRgotOjEwNUFGMDAwQTAyREU2MjRDMDIwMkE2Mjg0MDgwOTQ3MEE5OTBCMjlCMAotOjEwNUIwMDAwNjY4NEQxMEZDMDIwRDEwRjZDMTAwNERCMzBDMEQwMThEOAotOjEwNUIxMDAwREJBMkRBMjAyNTMwMDAyMjMwMDcwODU4MEEyODgyNEMwMAotOjEwNUIyMDAwREMyMDBCODAwMDg5MzE3MDlFMTIxQkRCOUMwQzRBMTExQgotOjEwNUIzMDAwQUJBQTI5QTI4NDA5MjkwQjI5QTY4NEQxMEYwOUM5NTIyRAotOjEwNUI0MDAwNjg1MzI2MDA5MTA0MThEQjk3QzBBMTJGODExMjAwQUE4OAotOjEwNUI1MDAwMUEwQUZGMDIyRjg1MTIxRURCOTEwQzREMTFBRUREMkNBRgotOjEwNUI2MDAwRDI4NDBDMkMwQjJDRDY4NEQxMEZDMDgxMUZEQjhFQjhCNQotOjEwNUI3MDAwOUEwQTBBNDcwMEExMDQyRUYxMTIwMDg4MUEwOEVFMDJDMAotOjEwNUI4MDAwMkVGNTEyMUREQjg2MEM0QzExQURDQzJCQzI4NDBCMkJEOQotOjEwNUI5MDAwMEIyQkM2ODREMTBGMDAwMDZDMTAwNERCMzBDMEQwMTk3MQotOjEwNUJBMDAwREI3RURBMjAyODMwMDAyMjMwMDcwOTg4MEEyODgyNEM2MAotOjEwNUJCMDAwREMyMDBCODAwMDFDREI3OTBDNEIxMUFDQkIyQUIyODRCRgotOjEwNUJDMDAwMEEyQTBCMkFCNjg0RDEwRjZDMTAwNEMwNDExOERCNzM2QgotOjEwNUJEMDAwMTZEQjc1MEMyNzExQTYyNjI2NjAzMEE4NzIyNTIyODZCMgotOjEwNUJFMDAwMDA2MTA0QTM1NTAwNDQxQTc1NDEwODIyMjI4NDAyMzI0MAotOjEwNUJGMDAwMEJEMTBGMDBDMDIwRDEwRjZDMTAwNDE1REJDRTAyNDk3MQotOjEwNUMwMDAwMTQyOTU2MTEyNDUyMTJDMDczMDIwODQzMEY4ODExMDA0MAotOjEwNUMxMDAwODEwNDAwMzYxQUM3OEYwMDc3MUEwODc3MDMwNzQ0MDFGQQotOjEwNUMyMDAwMDY0NDAyMjQ1NjEyRDEwRjZDMTAwNkMwQjA2RTIzMDIzNwotOjEwNUMzMDAwNjAwMEEyNjQyMDlEODUxMDEzREJBQTE2REJCRUMwNDA2NQotOjEwNUM0MDAwQTZCQTJCQTJBRTBCMTk0MTY0OTA1RTY4OTE1NTY4OTI3QQotOjEwNUM1MDAwNEE2ODkzMzcyOTMwRkYyODMwRkUyQUEyQUEwODg4MTEwMwotOjEwNUM2MDAwMEEwQTREMkFBQ0YyMDk4ODAyNzU4OTQ0MkIzRDAxMjlBNAotOjEwNUM3MDAwQjAwMDJCQjAwMTA4OTkxMTBCOTkwMjdBOTkzMkI4MzMxMAotOjEwNUM4MDAwMkIyQTAwQjE0NDcyNDlCNzYwMDA0ODAwN0ZCRjA1MTU1OAotOjEwNUM5MDAwREJBQTYzRkZCRTI1M0FFODYzRkZCODAwMjUzQUU4NjM1NAotOjEwNUNBMDAwRkZCMTAwMDAyNTBBNjQ2M0ZGQTlDMDVBNjNGRkE0MDA4NgotOjEwNUNCMDAwMDA3MDVGMDgyNTM0RkYwNThDMTQyQzM0RkU3MEFGMEI4OAotOjEwNUNDMDAwMEE4RDE0MkUzRDAxMkFFNDAxMkRFNDAwREE0MDVCRkQyQgotOjEwNUNEMDAwNUQ2M0ZGQTlEMTBGRDEwRjZDMTAwNDFBREIzMjE5REIwMQotOjEwNUNFMDAwMkYxQ0RCOTYxQkRCOTdDMDgwQzA3MTYwMDAwRDAwMDA4RAotOjEwNUNGMDAwMDAyMkE0MzBCMUFBMjk5QzEwN0I5MTVGMjY5Mjg2Nzk1QwotOjEwNUQwMDAwQzIxNUMwMjA2RTYyRTk2RDA4MEFCMTIyMDAyMTA0MDBBQwotOjEwNUQxMDAwNzQxQTc2NEJEQjYzRkZFRTIyOTI4NTBENjMxMTAzMjUyNwotOjEwNUQyMDAwMTQ2NDVGQ0ZENjUwMDMyRDQzNkREOTAzOTgyMEI0MjI1RAotOjEwNUQzMDAwMDY0NDE0NkQ0OTIyOTgyMDk4MjE5ODIyOTgyMzk4MjQ4QgotOjEwNUQ0MDAwOTgyNTk4MjY5ODI3OTgyODk4Mjk5ODJBOTgyQjk4MkM0RgotOjEwNUQ1MDAwOTgyRDk4MkU5ODJGMjIyQzQwNjNGRjk3MUVEQjEwMjczQQotOjEwNUQ2MDAwRTY4MDI3RTY4MUQxMEYwMDZDMTAwNEMwNjJDMDQxMTJBQQotOjEwNUQ3MDAwREIwRDEzREI3NDIzMzIyRDFBREIwODE5REI2RTJBQTAyRQotOjEwNUQ4MDAwMDAyOTkyQUU2RUEzMDI2MDAwOTEyOEFDRkUwOTBENDA3RQotOjEwNUQ5MDAwMkMxQUMyQzJCRDBEQ0IzOTJCMjUxNjY0ODA4OTVCRkYzRQotOjEwNURBMDAwQTIxNURCNjkxQURCMTQyQjNBRTgwQTNBMDE1ODA1OTg2OAotOjEwNURCMDAwMkIyMTE2MEFCQjI4RDNBMDJCNTYwMDU4MDVBRjhCNTBCOQotOjEwNURDMDAwMEFCQjA4MkEwQTAwNTgwNUFFMTVEQjYwMkQyMTAyMkNGQgotOjEwNUREMDAwM0FFODBDM0MyODA0REQwMjJEMjUwMjlDNTA1ODA1QTYwQgotOjEwNURFMDAwOEI1MEFBQkJDMEExNTgwNUE2MUNEQjU5MkQyMTAyMEM2MwotOjEwNURGMDAwM0MyODA2REQwMjEzREI1NzJEMjUwMjlDMzA1ODA1OUVGQQotOjEwNUUwMDAwOEIzMEFBQkJDMEEyNTgwNTlFMkEyMTAyQzBCNDBCQUE5RgotOjEwNUUxMDAwMDIwQTBBNEYyQTI1MDI1ODA1QjJEMTBGMjQyNDIzQzNBRgotOjEwNUUyMDAwQ0MyQzI1MTY2M0ZGNzYwMDE4REI0RjFDREI0QjE5REJFRgotOjEwNUUzMDAwNEMxQkRCNEExN0RCMUY4NTIwMkUwQUZEMUZEQjRCMkQ3OQotOjEwNUU0MDAwMjAyRTI0RjQ3QTI0RjQ3RTI0RjQ4MjBFREQwMTI0RjQzRQotOjEwNUU1MDAwODYyRTBBRjcwNzU1MjgwNkREMDJDMDc1MEVERDAxMDVGRQotOjEwNUU2MDAwMDUwNkFCNUJBOTU5QzBFOEFDNUMyNEM0QUIwRUREMDJFRgotOjEwNUU3MDAwMjdDNEFDMkUwQURGQTg1NTI3QjRFQzBFREQwMTI0QjRFQwotOjEwNUU4MDAwRUJDMkUwMjc5NDJDMEVERDAyMjQ5NDJCMkUwQTgwMEQwOQotOjEwNUU5MDAwMEQ0NjI3NTQ2QzI0NTQ2QjBFREQwMjJEMjQyRTYzRkUxOAotOjEwNUVBMDAwRkMwMDAwMDA2QzEwMDRDM0EwQzBCMzVCRkY1M0MwNEFFOQotOjEwNUVCMDAwMTJEQjIxQzM4MDI4MjYxNjI0MjYxN0MzQTFDMEIzNUI5QQotOjEwNUVDMDAwRkY0RUMwM0NDM0ExMkEyNjE2MTlEQUI2Mjk5MDIwMjMxQQotOjEwNUVEMDAwMjYxNzY0OTA4RjJBMEEzMjJCMEEwMTVCRkY0N0MzQTI2MAotOjEwNUVFMDAwMkIwQTAxNUJGRjQ1QzNCMjJCMjYxNjIzMjYxN0MyQUYzMAotOjEwNUVGMDAwQzBCMTVCRkY0MUMyRkYyRjI2MTZDMEVFMkUyNjE3QzI4RgotOjEwNUYwMDAwRDIyRDI2MTZDMEM4MkMyNjE3MjQyNjExMkEyMjEyQzdFNQotOjEwNUYxMDAwQjMwQkFBMDFDMEI0MEJBQTAyMkEyNjEyMjkwQUExMjk4RQotOjEwNUYyMDAwMjYxNkMxODIyODI2MTdDMEIzMkIyNjExMkUyMjEyMUYzNwotOjEwNUYzMDAwREFDQTBGRUUwMjJFMjYxMkMzRDYyRDI2MTYyQTBBQTI4MAotOjEwNUY0MDAwQzFDMzJDMjYxNzVCRkYyQzJDMEFBMjJDMjYxNkMxQjUyOAotOjEwNUY1MDAwMkIyNjE3QzJBQjJBMjYxNkMwOTcyOTI2MTcxOERCMDM1MwotOjEwNUY2MDAwMjgyNjEwRDEwRkMzQTJDMEIzNUJGRjIzNjNGRjZFMDBDRQotOjEwNUY3MDAwNkMxMDA0MUNEQUNFMUJEQUJCMThEQUZEMTdEQUZFMTYzOQotOjEwNUY4MDAwREFGRTE1REFGRUMwRTBDMEQ0MTREQUNBMUZEQTg2MjJCRgotOjEwNUY5MDAwMEEwODJGRjIwMDZEMkEzNkRBQzBEOUMwN0M1QjAyMEZFNgotOjEwNUZBMDAwQzkwQzFDREFDMzBDOUMyOEE4QzNBNkMyMkEzNjgwMkFCNgotOjEwNUZCMDAwMjU4NEE0QzJBN0NDMkQyNDhDMkIyNDhBMkIyNDg3MkVBNQotOjEwNUZDMDAwMjQ4QkIxQkIyRTM2OUYyQzM2OUUyQzM2OURCMUFDMUMzQgotOjEwNUZEMDAwREFBNTFCREFFQkMwMjg2RDJBMzNEQUMwRDlDMDdDNUJBNgotOjEwNUZFMDAwMDIwRkM5MEMxQ0RBQjMwQzlDMjhBOEMzQTZDMjJBMzYxRgotOjEwNUZGMDAwODAyQjI1ODRBNEMyQjFCQkE3Q0MyRDI0OEMyRTI0OEI0RQotOjEwNjAwMDAwMkEyNDhBMkUzNjlGMkMzNjlFMkMzNjlEQjFBQ0MwNzkyMAotOjEwNjAxMDAwMTlEQUEzMUJEQURFMTNEQURCMUFEQURCMThEQUREMTQ5RAotOjEwNjAyMDAwREFBNDE2REFEQzA0RjQyODEyREFEQzA0NjYwQzA0MDVCRgotOjEwNjAzMDAwMDZBMjUyQTg1OEFBNUFBMzUzOUIzMDI5QTUwMDI3ODQyOAotOjEwNjA0MDAwOEFDMDkxQzBBNTJBODQ4QzI5ODQ4QjE3REFENTE4REFFNgotOjEwNjA1MDAwRDNBNzU3MjYzNjFEMjYzNjFFMkUzNjFGMTZEQUQyMTMyNAotOjEwNjA2MDAwREFEMkE2NTUwNDMzMEMyODI2QzgyRTc1MDAyRDU0QUM2MAotOjEwNjA3MDAwMkU1NEFCMkU1NEFBMjMyNkU2MjMyNkU1MkUyNkU3RDE1RQotOjEwNjA4MDAwMEYwMDAwMDA2QzEwMDYxM0RBQUYxN0RBQUEyNDcyM0Q3NQotOjEwNjA5MDAwMjIzMjkzN0YyRjBCNkQwODA1MjgzMjkzN0Y4RjAyNjM4NgotOjEwNjBBMDAwRkZGM0MwQzRDMEIwMUVEQTNGQzA2MUQ5NDAwOTY5MzlFRQotOjEwNjBCMDAwMjlFNDIwNkU0NDAxRDZCMEMzMjhERkIwMjZFNDIyMDZDRQotOjEwNjBDMDAwMkYzOTJGRTQyMUMwNTAxRkRBQjkxOURBQUExNkRBQUIzQQotOjEwNjBEMDAwMThEQTc5OTQxMDJBNzI0NThERTAxN0RBQTU5RDExMUQwMgotOjEwNjBFMDAwREFCNDZEQTk0QkQ0NTAyNTVDMDM3QTVCMThERTUwNzU4OQotOjEwNjBGMDAwNkIwNTJFMTIwMTBFNUUwQzEyREE2RTAyRTIyODAxMTFGRgotOjEwNjEwMDAwMDJBRjIyMjJENjgxRDU0MDEzREE2QTc0NkIwNTI1MTJCQwotOjEwNjExMDAwMDEwNTQ1MEMwMzUzMjhCMTQ1QTgzRUE5MzJBNzMzMjJGNwotOjEwNjEyMDAwMzY5RDIyMzY5RTI0MzY4MDJCMzY5RjJCRTQ4QjJDRTQyMgotOjEwNjEzMDAwOEMxNERBODQyNDQyNERDMDMwMDQxNDE0Qzg0QzZEMDgwOQotOjEwNjE0MDAwMDZCMTMzMDQxNDE0Qzg0MjYzRkZGMjAwMTZEQTEzQzQxNAotOjEwNjE1MDAwNDBDMTU4MDAzMTA0MUFEQTEzQzBCMTkzQTIwMEJCMUEyRgotOjEwNjE2MDAwQjBCQjlCQTMxOERBNzgyOTgyNEQyMzgyNEUyODgyNTMzNAotOjEwNjE3MDAwN0E4NzFDMkM2NDAwOEMxMDZGQzQ0ODFFREEwQTA0M0QxOAotOjEwNjE4MDAwMEMyREU1MUMyRkUxMUQyREU1MUEyRkU1MUJEMTBGMDA2RAotOjEwNjE5MDAwQzA3MjEyREE2ODgyMjA3RTI3REIwMzAzNEYyNzY0MDA3NwotOjEwNjFBMDAwODgxMEMwNjE2Rjg0MzBDMEEwMDMxOTE0MEE1NDM5MUFEMgotOjEwNjFCMDAwRDlGRDA0OTkwQzI5QTUxQzI5QTUxRDI5QTUxQTI5QTVENQotOjEwNjFDMDAwMUJEMTBGMDAxQ0Q5RjgwNTNCMEMyQkM1MUMyREMxMUQ4NAotOjEwNjFEMDAwMkJDNTFBMkRDNTFCRDEwRjA2NTQzOTAzMUUxNDA0RUUwRQotOjEwNjFFMDAwMEMyRUE1MUMyRUE1MUQyRUE1MUEyRUE1MUJEMTBGMDAwOQotOjEwNjFGMDAwNkMxMDA4MUFEOUVDMTREQTRGMTNEQTUyQzcyRkMwNTBCQQotOjEwNjIwMDAwMTZEQTZDMjU2NkE4MjU2NkE5MjU2NkFBMjU2NkFCMjIzRQotOjEwNjIxMDAwMzYyOTJCNDI0NTE5REExM0Q4MTAxQ0RBNjZDMEQ0OURGMgotOjEwNjIyMDAwMTE5QzEwMDA4MDg5MEI5OTBDOTlBMDI4MTYwMjVCRkYyNQotOjEwNjIzMDAwOTUyQTMyRTMxRkQ5REMwQTVBMTQ5QUY0MjkzMkU0QjFDMAotOjEwNjI0MDAwOTkwOTU5MTQwQTk5MEM5OUY1MjgzMkU1MDg1ODE0OThCNwotOjEwNjI1MDAwRjYyRTMyQ0QwRTVFMTQyRUY2MDc1QkZGNDU1QkZGMTE2NgotOjEwNjI2MDAwMjI0NjNCMUNEOUQwMkFDMTAyQzFCMDBCQUEwMjFCREFCQwotOjEwNjI3MDAwMkEwQTBBNEYyQUM1MDIyQjQ2M0E1ODA0OTk1QkZFQkFFRAotOjEwNjI4MDAwNUJGRTk1QzBCMDg2MTMxN0Q5QzUyNTM2MkRDNzRFQzAwNQotOjEwNjI5MDAwMzA5NDE0QzA1MDE0RDlDQTYwMDA0MzAwMDA3RjlGMEY4RgotOjEwNjJBMDAwQjE1NTA5MTkxNDY1OUZGNEMwNTAwQUE5MDI3RkE3RUZFMAotOjEwNjJCMDAwMThEOUJBREE1MDA4NTgwQTI4ODIyQzJCMEEwMDBCODAwOQotOjEwNjJDMDAwMDAwMDUxMDREMkEwQzA5MUM3QUYwMDk5MUEwQTk5MDNFNwotOjEwNjJEMDAwMjkxNjA0Q0UzMzY0MjA2M0QzMjAyQjIwMDdENjUwOEM5QwotOjEwNjJFMDAwMTQyQTcyODI3Q0E4NUMxOEQ5QUMwODU4MEEyODgyMkMxRgotOjEwNjJGMDAwREE1MDBCODAwMEQyQTA2NDNGREE4QTMxMEE4QTE0MDQ5MwotOjEwNjMwMDAwQUEwMUM4MkEyQjIyMDEwQjhCMTQwNEJCMDE3QUI5NDBDNQotOjEwNjMxMDAwRERBMDZFQTEwODFERDlBMzJERDIwMDBEQUQwQ0RCMzA4MAotOjEwNjMyMDAwREM2MDFBRDlFMzE4RDk5QzBBREEyODA4NjgwQTFEREE1MQotOjEwNjMzMDAwMUYyODgyM0NBREFBMEI4MDAwNjUyRjlCRDMyMEMwQjBFNAotOjEwNjM0MDAwNjNGRjlCMDBDQTVDQjE1NTAwNTAwNDBBMDkxOTYzRkY0MgotOjEwNjM1MDAwNEJEQ0IwNkVCMTA5MUNEOTkzOENDMEQzMEYwQ0JDMENCNAotOjEwNjM2MDAwMUREOUQ0MUVEQTEyMERDRDI4QUVERDFFREExMTJERTZCMAotOjEwNjM3MDAwODE2M0ZGOUI3RkE3Q0U2M0ZGNkMwMDAwNkMxMDA0MUI0MgotOjEwNjM4MDAwRDk4NzI3MjIxRUMwODAwOEU0MzEwMDAyMDAyQUIyODI4OQotOjEwNjM5MDAwMTlEOTg1MDAzMTA0QzA2MTAwNjYxQTI5OTEwMjBBNkE4MAotOjEwNjNBMDAwMDIyQUI2ODIwOUU0MzExNUQ5REYwQzM4MTFBODUzMjgyNgotOjEwNjNCMDAwMzI4MjI0MzI4NDJBOENGQzc4NDExMDI5MjEwMjJBMzYyOAotOjEwNjNDMDAwODI5N0EwMDk2OTAyMjkyNTAyRDEwRjAwMkIyMTAyMkNGNgotOjEwNjNEMDAwMzI4NTBCNkIwMjJDQ0NGQzJDMzY4Mjk3QzAyQjI1MDIwRAotOjEwNjNFMDAwRDEwRjAwMDA2QzEwMDZDMEM3MUJEOTY4MUFEOTZBMERGRQotOjEwNjNGMDAwNEUxMUQ3MjA4ODIwODUyMkQ5ODAwNTQ1MEIwMjgyMENCQQotOjEwNjQwMDAwOTU3MjIyMkNGNEM4MzQ2RjJFMDI2MDAwQUIxRkQ5NjA0NQotOjEwNjQxMDAwQTlFMkFGN0Q3MkQzMzRDOTNEQzAyMTJGMEEwMDA5MkZGNAotOjEwNjQyMDAwMzgwRjBGNDJDOUY5MkFCNjdFNkQ0QTA1MDAzMDg4MDA0MAotOjEwNjQzMDAwOTA4QzIyNzIwMDAyRTIwODcyRDE3NDkyNzBEMjgwRDFFNAotOjEwNjQ0MDAwMEZDMDUwMDMyNTM4NzVDMERGNjNGRkQ5MDk3RDBDQUYzRAotOjEwNjQ1MDAwREQwREVFMEM2NDMwNEVEMjMwMEQzRjEyOTYxMTJGMTYyQQotOjEwNjQ2MDAwMDAyRkZDMTAwRjRGMzYyNjBBMDEyNTBBMDAwOTY1Mzg1NwotOjEwNjQ3MDAwMDUwNTQyNjQ1MDcxMkFCNjdFNkRGQTA1MDAyMDg4MDAzOQotOjEwNjQ4MDAwOTA4Q0MwNTBBM0QyODkxMDIzN0MwQzA5NDQwQzI5MEE5QgotOjEwNjQ5MDAwMDEwMzk1MzgwNTA1NDI2NDUwNUEyQUI2N0U2RDRBMDVCNwotOjEwNjRBMDAwMDAyMDg4MDAzMDhDRDI4MEE3RUFCQ0FBOUE3MEQxMEY1NQotOjEwNjRCMDAwRDI4MEJDN0I5QjcwRDEwRjAwMDIzRjE0QzFEMEQyMzA4MAotOjEwNjRDMDAwMEZERDBDMEQ0RDM2Mjk4RDA4QzBGMTI1MEEwMDA5RjVBOAotOjEwNjREMDAwMzgwNTA1NDJDQTU4MkFCNjdFNkREQTA1MDAyMDg4MDBDNAotOjEwNjRFMDAwOTA4Qzg5NzA2M0ZGMjUwMEMwNjFDMDUwMDM2NTM4NzVDQQotOjEwNjRGMDAwQzA4NjYzRkY4MEMwRDAwMjlEMzg3REMwOUY2M0ZGOTkzNgotOjEwNjUwMDAwQzA1MDAzRjUzODc1QzBEMDYzRkZDQTAwNkMxMDA0RDZDNAotOjEwNjUxMDAwMjA2ODUyMEY2OTUzMjREQTIwREIzMERDNDA1ODAwRjA0OQotOjEwNjUyMDAwRDJBMEQxMEZEQTIwREIzMERDNDA1ODAwRUQ5QTI0MjREMQotOjEwNjUzMDAwMjQwRUMwMjEyMjY0MEZDMDIwRDEwRjAwQjgzQkIwNEMwNAotOjEwNjU0MDAwMkEyQzc0ODkyNDJEMjAwRTJFMjAwRkE0RERCMUVFMkVDRQotOjEwNjU1MDAwMjQwRkIwREQyRDI0MEUyODkwMDcyRDkwMDNBNDg4QjBDMQotOjEwNjU2MDAwODhCMUREMkQ5NDAzMjg5NDA3NUJGRjlFNjk1MTFEQzBGRgotOjEwNjU3MDAwRTA4MjI0MkE2MDBGMThEOTkwMkEyNDAzMjk2MDBFOEYwNAotOjEwNjU4MDAwMjAyOTI0MDcwOEZGMDI5RjIwOUU2NEQxMEZDMDIwRDEzQwotOjEwNjU5MDAwMEYwMDAwMDA2QzEwMDQ5NDIzMTlEOTg4QzBCMzA4M0E4NgotOjEwNjVBMDAwMTEwQkFBMDI5OTIwMTlEOEZEOUEyMTI4OTI5RDE2RDg3QwotOjEwNjVCMDAwRkFDMDUwMjU2NEEyMjg4QzE4Mjg5NjlERDEwRjAwMDA5RgotOjEwNjVDMDAwNkMxMDA0MjgyMDY2QzAzODIzMjQwNkI3ODgyODI0NjY2NwotOjEwNjVEMDAwRDEwRjAwMDA2QzEwMDYwMzVBMEMwRDM2MTEwRDVDMTEyMgotOjEwNjVFMDAwRDgyMDhCMjI4MjIxMENCQjBDMDY1NTBGOUI4MjAyMzJENQotOjEwNjVGMDAwMEI5MjgxMTNEOEU3RDkyMEEzOEY2NDUwNTMxQ0Q4RTNBMgotOjEwNjYwMDAwQzBENzFCRDhFNEEyNTZDMEUxMjkwQTAwMDRFOTM4MDkyMgotOjEwNjYxMDAwMDk0Mjc2RjM0QTA0NDMwMkM5OUUyQkM2N0U2REFBMDU0MQotOjEwNjYyMDAwMDAyMDg4MDAzMDhDODk4MUE5NTkwOUZBMEM2NEEwNzk2RQotOjEwNjYzMDAwOTk4MThBODJDOEFERDI5MEQxMEZDMDYwMDJFNjM4NzZDNwotOjEwNjY0MDAwRDBEQTYzRkZENEMwMjBCQzg5OTk4MTk5ODA5MjgyRDEyRAotOjEwNjY1MDAwMEY3RjIzMDQyOTJERjg5OTgxNjVCRkQ5NjNGRkU1MDBEOQotOjEwNjY2MDAwMDI4RjBDQTNGRjBGMzMxMjkzMTAwM0FBMENEMzQwQ0I1RAotOjEwNjY3MDAwOUUyQkM2N0U4NjEwNkQ2QTA1MDAyMDg4MDAzMDhDQkM3QgotOjEwNjY4MDAwODIyOTBBMDAwNEYzMDgyNDBBMDEwMzQ5MzgwOTA5NDI0RgotOjEwNjY5MDAwQ0E5ODJCQzY3RTZEQUEwNTAwMjA4ODAwMzA4QzBGNTk0MQotOjEwNjZBMDAwMENBOTg5QkM5OTk5ODE2M0ZGODdCQzg5OTk4MTYzRkY5MwotOjEwNjZCMDAwODBDMDYwMDJFNjM4NzZEMEJBNjNGRkI0QzA3MDAyNDc4QgotOjEwNjZDMDAwMzg3N0QwRDA2M0ZGQ0EwMDZDMTAwNDE0RDhDMEMxNTIxMAotOjEwNjZEMDAwQTQyNEM5M0UyODIyMUQ3MzgxMTkyOTIxMDJDRDkzMkFBMQotOjEwNjZFMDAwMzAwMDc1QTkxMkRBMjBEQjMwMkMzMDA3QzBEMjU4MDFGNwotOjEwNjZGMDAwQzQ2NTNGREZEMTBGMDAwMDJCMzAwNzAzQkIwQkRBQjBCRQotOjEwNjcwMDAwNzRCMzAyMkFCREY4RDNBMDYzRkZDNjAwNkMxMDA0MjkzRAotOjEwNjcxMDAwMjAwNkMwNzA2RTk3NDEyOTIxMDJDMDhGMkEyMDE0QzAyNAotOjEwNjcyMDAwQjYyQjI0MDYwNkFBMDIyQTI0MTQ3OTgwMDIyNzI1MDIwMQotOjEwNjczMDAwMkEyMjFFMkMyMjFEN0FDMTBFQzhBQkRBMjBEQjMwMkM5NwotOjEwNjc0MDAwMEEwMDAzM0QwMjVCRjgyMjY0NTA3NTJEMjEwMjBEMERGNQotOjEwNjc1MDAwNENDOUQzQzAyMEQxMEYwMDAwMkU5Q0ZCNjRFMDgyMkZENwotOjEwNjc2MDAwMjEwMjBGMEY0QzY1RjA5MTFBRDg4RDFDRDg4QjI5QTJFRAotOjEwNjc3MDAwOUVDMDhBNzk4QjVEMkJDMjI2NjhCMDA0OEQyMDdCRDlBMAotOjEwNjc4MDAwNTIyOUEyOURDMEYzNjQ5MDRBOTc5MDFERDg5RTJFMjE1NQotOjEwNjc5MDAwMDQ5RDk2MDhFRTExMEZFRTAyOUU5NzlFOTEyN0M0QTJDQgotOjEwNjdBMDAwMThEODlBMkYyMTAyMkJBMjlEQzBFNTJFMjQwNjJCQkNCRgotOjEwNjdCMDAwMzAwOEZGMDIyQkE2OUQyRjI1MDJDMDIwRDEwRjAwMDAxQwotOjEwNjdDMDAwMDAyRjMwMDA2OEY5MzhEQTIwREIzMERDNDA1ODAwNDQxNAotOjEwNjdEMDAwNjNGRjc3MDAwMjJBMDIyQjBBMDY1ODAwRDQyMjBBMDAxRgotOjEwNjdFMDAwRDEwRjY1NTAxMDI4MzAwMDY4ODkyNDAyMkEwMjAzM0IyQgotOjEwNjdGMDAwMDJEQzQwNTgwMDNCQzAyMEQxMEZEMjcwRDEwRjAwMDAwNgotOjEwNjgwMDAwMkEyQzc0MDMzQjAyMDQ0QzAyNUJGRUY2NjNGRjNCMDA0MAotOjEwNjgxMDAwREIzMERDNDAyQTJDNzQ1QkZFRjNDMDIwRDEwRjAwMDA3QgotOjEwNjgyMDAwNkMxMDA0QzgzRjg5MjY4ODI5QTM5OTk5MjYwOTg4MENFOQotOjEwNjgzMDAwMDgwODQ4MjgyNTI1Q0M1MkMwMjBEMTBGREI0MDJBMkMzRgotOjEwNjg0MDAwNzQ1QkY5NDlEMkEwRDEwRjZDMTAwNEQ4MjBENzMwODJFNAotOjEwNjg1MDAwMjIwRDQ1MTEwNTIyMEM5MjgyNjQyMDc0MDc0MjBCMTMwRAotOjEwNjg2MDAwRDg0Q0Q0MjBBMzgzNzMyMzAyMjQyREY4ODU4MDc0NTEzRgotOjEwNjg3MDAwNENCQzgyQzA5MDZEMDgxNjAwNDA4ODAwNzA4Qzc3MzkzRgotOjEwNjg4MDAwMDNENzIwQzA5MTg2ODA3NDM5MDFENDIwNzQ2MTAyNjNEQgotOjEwNjg5MDAwRkZFMkNBOThDMDk3QzA0MTFCRDhDQUMwQTAwQjhCMEM5RQotOjEwNjhBMDAwMEI0QTM4MEEwQTQyQzlBQTFERDgzOTFDRDgzQTJDRDYzNAotOjEwNjhCMDAwN0VDMTQwRDMwRjZENEEwNTAwMjA4ODAwMzA4Qzk3ODA0MAotOjEwNjhDMDAwRDI3MEQxMEZCQzhGQzBFMDBGNEUzODdFOTBFMjYzRkZENAotOjEwNjhEMDAwRDZCQzgyOTI4MTkyODBDMDIwOTI4MkQxMEYwMDAwMDBBQgotOjEwNjhFMDAwNkMxMDA2QzBENzFDRDgyOTFCRDgyQjBENDkxMUQ3MjBGNgotOjEwNjhGMDAwMkEyMjFGMjgyMjFEMEE0QTBCRDI4MDA3ODYwQzJBNzZEQwotOjEwNjkwMDAwMUYyNjZDODBDODM0NkY2RTAyNjAwMEQwMkYwQTgwMUE3OAotOjEwNjkxMDAwRDgyRkEyOUVBQTdBN0VBMzNGQzkzRkMwRTFDMDUwMDJGMQotOjEwNjkyMDAwRTUzODA1MDU0MkNBNTUyQkM2N0VEQjIwRDMwRjZENEFEQwotOjEwNjkzMDAwMDUwMDMwODgwMEIwOEMyRTcyMURBRTlFMEVBNTBDNjQzMgotOjEwNjk0MDAwNTA4QUQyODAyRTc2MURDMDkxMjk4NDAzRDEwRkMwNTA2OQotOjEwNjk1MDAwMDNFNTM4NzVEMEQzNjNGRkNEMTVEODFDMDI3RTBDQTU5NgotOjEwNjk2MDAwRUU2NDMwNTVEQTMwMEUzNTEyOTYxMjk1MTEyNTVDMTAxMgotOjEwNjk3MDAwMDU0NTM2QzA2MTk1MTBDMDUwMDI2NTM4MDUwNTQyNjQ3MgotOjEwNjk4MDAwNTA4OTJCQzY3RTg1MTBEMzBGNkQ1QTA1MDBBMDg4MDA1NAotOjEwNjk5MDAwMjA4Q0MwQTFBM0UyQzA1MDIzRkE4MDAzNzMwQzAzQTU4RQotOjEwNjlBMDAwMzhBRjczMDUwNTQyNjQ1MDcyMkJDNjdFODUxMTA1NDVDQwotOjEwNjlCMDAwMEM2RDVBMDUwMDIwODgwMDMwOENEMjgwQzBBMTBFOUIzRgotOjEwNjlDMDAwMENBQjdCQUZCQjJCNzYxRDJBODQwM0QxMEZEMjgwQzBDQQotOjEwNjlEMDAwQzFBRjdEMkQ3NjFEMkM4NDAzRDEwRjAwMDAwNjNGMTQxRQotOjEwNjlFMDAwQzFFMEQyMzAwRkVFMEMwRTRFMzYyQThEMDhDMEYxMjVENAotOjEwNjlGMDAwMEEwMDBBRjUzODA1MDU0MkNBNUMyQkM2N0U2REVBMDUxOQotOjEwNkEwMDAwMDAyMDg4MDBBMDhDMjI3MjFENjNGRUZGQzA2MUMwNTA3MAotOjEwNkExMDAwMDM2NTM4NzVEODAyNjNGRjZCNjNGRjY1QzA1MDAyQTUzQwotOjEwNkEyMDAwMzg3NUQwODc2M0ZGODEwMEMwNjAwM0Y2Mzg3NkQwQ0MxQwotOjEwNkEzMDAwNjNGRkM2MDA2QzEwMDQyQTIwMTUyOTIwMTYxNEQ3RDkyQwotOjEwNkE0MDAwMEE5OTBDQ0I5RDJFMjAwQjA0RUQwOTJCRDExQzA5QkNGRgotOjEwNkE1MDAwMzZBQ0FBMENCQjBDMkJENTFDMEEwQTQ3MkEyNDE1Q0IzMgotOjEwNkE2MDAwQTE4QjQzOEYyODg5NDJCMEE4MDA5MTA0MDA4ODFBQThGRQotOjEwNkE3MDAwRkYwRkJCMDI5QjI3OEYyNjBGQjgwQzc4M0IxQUMwMjA1NAotOjEwNkE4MDAwRDEwRjAwMDAyOTIxMDJDMEEyMEE5OTAyMjkyNTAyQzBDMwotOjEwNkE5MDAwMjFEMTBGMDA4QjI3NjNGRkRDMkJEMTFDMENBQTBDMEEyMQotOjEwNkFBMDAwMEE0NzJBMjQxNUFDQkIyQkQ1MUNDOUFFOEI0MzhDMjhCNgotOjEwNkFCMDAwOEY0MkIwQUQwMEYxMDQwMEREMUFBRENDMENCQjAyOUJERgotOjEwNkFDMDAwMjdEQTIwQjdFQjU4MDAxOUMwMjFEMTBGOUYyNzYzRkZBOQotOjEwNkFEMDAwRUYwMDAwMDA2QzEwMDQyODIwM0M2NDMwNDcwNTMwNjA1MwotOjEwNkFFMDAwMDAwNzNFMDEwNTNFQjE1NjA3NjUzOTA1NDkyOEM3N0ZCNQotOjEwNkFGMDAwQTkzMzAzMDY0MTA3NjYwM0IxNjYwNjA2NDFBNjMzN0U0NQotOjEwNkIwMDAwODcxRTIyMjEyNTI5MUFGQzczMkIxNTAyMzgwQzA5ODFCNgotOjEwNkIxMDAwNjAwMDA2M0UwMTAyM0VCMTI0MDY0MjM5MDMyMjBBRDEzQQotOjEwNkIyMDAwMEZEMjMwRDEwRkMwNTE2M0ZGQzAwMDAwNkMxMDA0MURBNAotOjEwNkIzMDAwRDc5QjI3MjIxRUMwODAwOEU0MzEwMDAyMDAyQ0QyODI5RAotOjEwNkI0MDAwMUJENzk5MDAzMTA0QzA2MTAwNjYxQTJCQjEwMjBDNkM4RQotOjEwNkI1MDAwMDIyQ0Q2ODIwQkU0MzExOUQ4MUIwQzNBMTFBQTkzMjhDNwotOjEwNkI2MDAwMzI4Mjk3ODAyNTMyODIyNDMyODRCNDU1MjUzNjgyNzU0QwotOjEwNkI3MDAwNDEwQTI5MjEwMjA5NjkwMjI5MjUwMkQxMEYyQTIxMDI4RAotOjEwNkI4MDAwMkIzMjgzMEE2QTAyMkIzNjgyMkEyNTAyRDEwRjAwMDA5QgotOjEwNkI5MDAwNkMxMDA0MURENzgyMTlENzhDMjcyMjFFQzA4MDA5Nzc1QwotOjEwNkJBMDAwMDIwOEU0MzEwMDAyMDAyQ0QyODIxQkQ3N0UwMDMxMDQ5RgotOjEwNkJCMDAwQzA2MTAwNjYxQTJCQjEwMjBDNkMwMjJDRDY4MjBCRTQ2OQotOjEwNkJDMDAwMzExOUQ4MDAwQzNBMTFBQTkzMjgzMjgyOTc4MDI1MzJDNQotOjEwNkJEMDAwODIyNDMyODRCNDU1MjUzNjgyNzU0MTBCMkEyMTAyMEE1QgotOjEwNkJFMDAwNkEwMjJBMjUwMkQxMEYwMDJCMjEwMjJDMzI4MzBCNkI2MwotOjEwNkJGMDAwMDIyQzM2ODIyQjI1MDJEMTBGMDAwMDAwNkMxMDA0MUJFMgotOjEwNkMwMDAwRDc2NzBDMkExMUFCQUEyOUEyODZCNDM4Nzk4QjIyMUIyQwotOjEwNkMxMDAwRDc2NDE5RDc4QjBCMkIwQTJCQjJBMzA5MjkwODY4QjBBQwotOjEwNkMyMDAwMDI3NEI5MEQyOTlEMDEyOTkwMUY2RTkyMDgyMkEyODUzOAotOjEwNkMzMDAwRDEwRkMwMjBEMTBGQzg5MkMwMjBEMTBGREEyMDVCRUY1NgotOjEwNkM0MDAwM0RDMDIwRDEwRjAwMDAwMDZDMTAwNDE0RDc1NDI4NDIxRQotOjEwNkM1MDAwOUUxOUQ3NTE2Rjg4MDI2MDAwQjkyOTkyMjY2ODkwMDc2MwotOjEwNkM2MDAwOEEyMDA5QUEwQzY1QTBBQjJBNDI5REMwREM2NEEwQTNCRgotOjEwNkM3MDAwMkIyMDBDMTlENzRCMENCQzExQTRDQzJFQzI4NjA5QjkwMQotOjEwNkM4MDAwMEE3RUQzMDI2MDAwOTkyOTkyQTM2ODkwMDc4RDIwMDk5QgotOjEwNkM5MDAwREQwQzY1RDA4QjI1QzI4NTY0NTA4NTJEMjEwNEMwMzA2NAotOjEwNkNBMDAwNkVEODBEMkMyMDY2QjhDQzBDMEM0NzJDMjQ2NjY1QzAyMQotOjEwNkNCMDAwN0ExQUQ3NTIxQ0Q3NUIxREQ3NDgxRUQ3NEZDMDg0OTg2RAotOjEwNkNDMDAwNTE5RTUwODkyMDlENTY5RDU0OTM1NzkzNTU5QzUzMEEyRAotOjEwNkNEMDAwOTkwMjFDRDdCRDFBRDc2NDk5NTI4RjI2OTk1QTk4NTk5MAotOjEwNkNFMDAwOUU1ODkzNUU5QzVEOTM1QzlBNUIwRjBENDgwNUREMTE4OQotOjEwNkNGMDAwOUQ1RkMwRDgxRUQ3MzIwQ0I5MTFBNDk5Mjg5Mjg1QUVEOQotOjEwNkQwMDAwQkUyM0U0Q0YyODhDNDAyODk2ODU5RjI5MkQyNDA2QzBEOQotOjEwNkQxMDAwMjBEMTBGMDBDQTMyREEyMEMwQjY1QkZGODRDNzJGRDE2MgotOjEwNkQyMDAwMEZDOTM5REEyMDVCRkY4MUM3MkZEMTBGREJEMDVCRkVBMwotOjEwNkQzMDAwMTkyMzI0NjYyQjIwMEM2M0ZGNzZDNzJGRDEwRkM3MkY5MgotOjEwNkQ0MDAwRDEwRjAwMDA2QzEwMDRDODVCMjkyMDA2Njg5NDFDNjhGMQotOjEwNkQ1MDAwOTYwN0MwMjBEMTBGQzAyMEQxMEZEQTIwREIzMERDNDBGNQotOjEwNkQ2MDAwREQ1MDJFMEEwMDVCRkU2OUQyQTBEMTBGMkUyMDBDMTgzOAotOjEwNkQ3MDAwRDcwQjBDRUYxMUE4RkYyOUYyODZDMDg4Nzk4Qjc1MUEwMgotOjEwNkQ4MDAwRDcwODBBRUEwQTJBQTJBMzY4QTAwNDhCMjA3QUI5NjQ2OQotOjEwNkQ5MDAwMjNGMjg1NjQzMDVFMUNENzEyMkEwQTgwMkQyMDY4MjlEMAotOjEwNkRBMDAwMjA2NzI4MjEwNDBCOTkxMTA0ODgxMTA5ODgwMjA4REQ0NQotOjEwNkRCMDAwMDJDMDk0Mjg0QTEwMDhERDAyMThENzBBOTkzMTk4MzA4OQotOjEwNkRDMDAwOEIyQjlBMzc5RDM0MENCQjAyOUIzMkMwQzA5QzM1OUNFOAotOjEwNkREMDAwMzYyQTJDNzREQjQwQzBEMzE4RDZGOTI5RjI4NUE4RUVFOAotOjEwNkRFMDAwMjk5QzIwMjlGNjg1MkNFNENGMkQyNDA2REQ0MDVCRkQ2RgotOjEwNkRGMDAwRjlEMkEwRDEwRkRBMjBEQkUwNUJGRjRDQzAyMEQxMEYyRAotOjEwNkUwMDAwNkMxMDBBRDYzMDJBMjAwNjk0MTAyOEFDRjg2NTgzRkY0RgotOjEwNkUxMDAwMkIyMTIyMjcwQTAyMkEyMTI0Q0M1NzJBQUMwMTBBMEE1NAotOjEwNkUyMDAwNEYyQTI1MjQ3QUJCMDI2MDAzRjcyQzIxMDIyQTIwMEM2QQotOjEwNkUzMDAwMEMwQzRDNjVDMzhFMkUyMjE1OEQzMkMwRjEwRUREMEM2QwotOjEwNkU0MDAwNjVENDA0ODgzODFFRDZENTY0ODNFMThGMzdDMEM4QzBBNgotOjEwNkU1MDAwOTYwRkM5Mzk5OTE0QjQ5QjlCMTEwRDk5MTE5OTEzQzlCNwotOjEwNkU2MDAwRkIxOUQ2RDAyOTkwMjE3RjkzMTM4QjE0OEMyMDVCRkZDNAotOjEwNkU3MDAwNjMxRUQ2Q0FEREEwNjRBNDFDOEY2NzYwMDAyOThDMTEzNAotOjEwNkU4MDAwMENBRDExQUVERDI4RDI4NjBBQUIwMjc4Q0I2MjFBRDZFMQotOjEwNkU5MDAwQzQwQUJBMEEyQUEyQTM2OEEwMDUyQzIyMDA3QUM5NTAwMwotOjEwNkVBMDAwMkFEMjg1RERBMDY0QTNENzI5MjEyRTA5RjkzNjJBMjAwQwotOjEwNkVCMDAwM0MwOUY4MEM2RjhEM0VEN0YwQ0I3RjI4MjExRjA4NzA1RQotOjEwNkVDMDAwNjAwMTBCM0UwMDA0M0VCMUJDMDRDQjM5Qzc0RjBCQkI4NQotOjEwNkVEMDAwMEEwN0JCMEEwQjBDNDEwNENDMDNCMUNDMEMwQzQxQUMyRgotOjEwNkVFMDAwQkJENEIwQzBDMjdDQTA0QzJBMjEyNTdCQUI0NjYwMDAzRAotOjEwNkVGMDAwMkNDMEEwNjNGRkFDRDc5MDYzRkZCRDAwQzA5MkM3NEYwQQotOjEwNkYwMDAwMkM3QzE0MEMwQjQxMDRCQjAzQjFCQjBCMEI0MUFCNzRDOQotOjEwNkYxMDAwMjQ0QzE0NzlBMDFFMkEyMTI1NzRBQjE4QUNCQjI0MUE2QQotOjEwNkYyMDAwRkMwQUJDMEMwNEMxNjAwMDA5M0UwMTA0M0VCMTQ4MDlFMgotOjEwNkYzMDAwODQzOTBCNDQwQTg5MjY4ODI3MDk4ODBDNzQ4MzFEQzA2QwotOjEwNkY0MDAwODA5OEQ4OEM2NDlDRDk4QjY2OEE2NTlCREI5QURBOTc4QgotOjEwNkY1MDAwRDU3RjczMDI2MDAxM0FDRTVFNjAwMDE2MDA5RDE1REE5RgotOjEwNkY2MDAwMjBEQjQwNUJGRUI0OEQxNTFFRDY4RDY1QTI1NjhGNjc2MwotOjEwNkY3MDAwNjNGRkNCOUQxNURBMjBEQjMwOEMxMDVCRkU1OThEMTUzRAotOjEwNkY4MDAwMUVENjg3QzA1MUQ2QTA4RkE3QzBDMDhBNjg5N0REOUE0OQotOjEwNkY5MDAwREM4ODY5ODk2QTk4REU5OURGOEI2QThBNjlBQjdCNzdCRQotOjEwNkZBMDAwQkIwMjJBQUMwMTlCNkE5QTY5ODg2MEMwQTAwODhCMTQ1NgotOjEwNkZCMDAwNzc4NzAxQzBBMUMwOTAyODIwM0M5NDE3OTUxODkzMTY5QwotOjEwNkZDMDAwQzA1MEMwMzFDMDQ0MDQ4NDAxMDQzOTM4MDg5OTEwQzA0RAotOjEwNkZEMDAwNDIwNDg0MDEwNDM1MzgwODM4NDA4MzJCMEJBNDEwMDc4MQotOjEwNkZFMDAwNTUxMDJBMjExRjA5NTUwMjA1NDQwMjBCMTk0MDBBMkE4RgotOjEwNkZGMDAwMTQwNzk5MTAwNTg1MTAwNDMzMDIwQTg4MTExNEQ2RjM3QQotOjEwNzAwMDAwMDk1NTAyMjkyMTA0MDQzMzAyMDg5OTExMDk4ODAyQzA5NAotOjEwNzAxMDAwOTIwOTg4MDIyOTIxMjU5M0QwMDkyOTE0MDQ5OTExMEE3QgotOjEwNzAyMDAwOTkwMjA5NTUwMjhBMjA4OTE0MDhBQTExMEE5OTAyMUE5QwotOjEwNzAzMDAwRDY2RjE0RDZFNzBBOTkwMjk5RDE4MzJBOTVENjk4RDdBNAotOjEwNzA0MDAwODUxODA0MzMwMjkzRDQ4NDE3ODMxNjhBNjU4RDY2QUE0MwotOjEwNzA1MDAwQ0FBRDdENzdEQjAxQjFBQTA3RkYwQzlBNjU5RDY2ODhGMgotOjEwNzA2MDAwMjY4QzI5QTQ4ODA4Q0MwQzk4MjYwQzBDNDgyQzI1MjVBNQotOjEwNzA3MDAwOUY2NzJBMjAwQ0MwQzAxQkQ2NTEwQ0E5MTFBRTk5QUIzQQotOjEwNzA4MDAwQUIyODkyODUyQ0I0Q0Y4QjEzQUI4ODI4OTY4NTYzRkRGMwotOjEwNzA5MDAwQ0QwMEMwOTFDMEYwQzBCMkMwQzQ4ODYwMjMyMDNDOTgyRAotOjEwNzBBMDAwMTIwQzNDMDEwQjNBMDEwODg4MTQwQjg4MDEwQTlGMzgyNgotOjEwNzBCMDAwMDdGRjEwMDg5ODM5QzBBMDBDOUEzODA3ODgxMDA4QUE1MgotOjEwNzBDMDAwMTAwQUZGMDJDMEE4MEEzMzAxMDM5MzM5MkEyMTA0MjlCOAotOjEwNzBEMDAwMjEyNTA1M0MxMDA4Q0MwMjBBMzMxMTA4QUExMTA5MjkwMAotOjEwNzBFMDAwMTQwM0FBMDIwNDk5MTEwQkFBMDIyQjIxMUY4MzE0MEI2QgotOjEwNzBGMDAwMkIxNDBCOTkwMjBDOTkwMjhCMjAxQ0Q2M0MwOEJCMTE1NwotOjEwNzEwMDAwMDNCQjAyMENCQjAyODMyQThDMkI2NDcwODQ4ODY4OTdCMwotOjEwNzExMDAwREQ5OERDODc2OTg4NkE5N0RFOThERjg4MTJDMDcwNzcwRgotOjEwNzEyMDAwODcwMUMwNzE5QkQxOTlENjBCNzgxMDlBRDcxN0Q2QTkzMQotOjEwNzEzMDAwMDhGODAyMDhDODAyMDc4ODAyMTdENkE1OThEMDA3MzdCMgotOjEwNzE0MDAwMDI5N0Q0MjgyMDBDMjk1Q0ZFMkIyMTI0QzBGMDFBRDZFQgotOjEwNzE1MDAwMUIwQzhEMTFBRUREMkNEMjg1QUE4ODJGODRDRjhGMTMwNgotOjEwNzE2MDAwQjBCQkFGQ0MyQ0Q2ODUyQTIyMTUyQjI1MjRCMUFBMkE1OAotOjEwNzE3MDAwMjYxNTY0OTBEQ0M4NEY4QzI2OEIyOUE0Q0M5QzI2MEM0OQotOjEwNzE4MDAwQkIwQzBCMEI0ODJCMjUyNTY1NTBFOEMwMjBEMTBGMDAwOAotOjEwNzE5MDAwMDAwMEMwNzA5QkQxOTlENjlBRDc4ODEyOTNENDc3ODc3NAotOjEwNzFBMDAwMEUxOEQ2MDA5MjFBMjg4MDIyQzAyMTA4MjczODgyMUE4OQotOjEwNzFCMDAwMThENjhBMEI3MzEwMDNGMzAyMDNDMzAyMDgzMzAyOTMzOQotOjEwNzFDMDAwRDA2M0ZGN0UwMENDNTdEQTIwREI2MDhDMTA1QkZEQzRGRgotOjEwNzFEMDAwMjkyMTAyNjg5ODA2Njg5NDAzQzAyMEQxMEYyQjIyMUUzMwotOjEwNzFFMDAwQzA5MDI4MjIxRDI5MjUwMjdCODkwMUMwQjA2NEJGRTgxOAotOjEwNzFGMDAwMTNENUVBMkNCMDA3MjhCMDAwREEyMDAzODgwQTI4ODJDOQotOjEwNzIwMDAwNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzRkZDQTAwMDA3NAotOjEwNzIxMDAwNjhBNzc1REEyMERCMzBEQzQwREQ1MDVCRkVDQUQyQTAwNwotOjEwNzIyMDAwRDEwRkMxRkRDMTlEMjkyNTJDNjAwMDAzMDAyRjI1MkMwNQotOjEwNzIzMDAwMkYyNDY3MjcyNDY4REEyMERCMzA4QzEwREQ1MDJFMEFEQgotOjEwNzI0MDAwODA1QkZEMzJEMkEwRDEwRkMxRjhDMUE4MkEyNTJDNjNFMgotOjEwNzI1MDAwRkZEREM4NEY4QzI2OEIyOUE0Q0M5QzI2MENCQjBDMEJDNQotOjEwNzI2MDAwMEI0ODJCMjUyNTJBMkM3NERCNjAyQzEyMDA1QkZENzY0NQotOjEwNzI3MDAwRDJBMEQxMEYyQTJDNzQ4QjEwNUJGNkJCRDJBMEQxMEZGOQotOjEwNzI4MDAwREEyMDVCRkUyQTYzRkYzQzAwREEyMEMwQjE1QkZFNkVCMQotOjEwNzI5MDAwNjVBRjMxNjNGQjc5REEyMDJCMjAwQzVCRkUzRDYzRkY4OQotOjEwNzJBMDAwMjMwMDAwMDAxMkQ2NEU4MjIwMDI4MjU3QzgyMTYzRkZCRAotOjEwNzJCMDAwRkMxMkQ2NEEwM0U4MzAwNEVFMzAwNUIxMzA5MzIwOTQzNgotOjEwNzJDMDAwMjE5NTIyNjNGRkZDMDAwMDEwRDY0NjkxMDA5MjAxOTNBNQotOjEwNzJEMDAwMDI5NDAzMTFENjFEODIxMDAxRUEzMEEyMTEwMUYwMzE4RgotOjEwNzJFMDAwQzA0MDA0RTQxNjAwMDIwMDExRDYzRjgyMTAyMzRBMDA3OQotOjEwNzJGMDAwMDMyMjAyOTIxMDExRDYwOUMwMjE5MjEwMDRFNDMxODRCNQotOjEwNzMwMDAwMDM4MzAyODIwMTgxMDAwMEQyMzAwMTIzMDAwMDAwMDBDQgotOjEwNzMxMDAwMTBENjM2OTEwMDkyMDE5MzAyOTQwMzExRDYwQzgyMTA3QwotOjEwNzMyMDAwMDFFQTMwQTIxMTAxRjEzMUMwNDAwNEU0MTYwMDAyMDA2QwotOjEwNzMzMDAwMTFENjJEODIxMDEzRDVCNDAzMjIwMjkyMTAwNEU0MzEyOQotOjEwNzM0MDAwODQwMzgzMDI4MjAxODEwMDAwRDMzMDAxMzMwMDAwMDBGNgotOjEwNzM1MDAwMTBENjI3OTEwMDgxMDE2NTEwNDk4MTAyNjUxMDQ0ODE5MgotOjEwNzM2MDAwMDNDRjFGOTIwMTkzMDI5NDAzMTFENUZBODIxMDAxRUExMAotOjEwNzM3MDAwMzBBMjExMDFGMjMxQzA0MDA0RTQxNjAwMDIwMDExRDYxRgotOjEwNzM4MDAwMTk4MjEwMTNENTlCMDMyMjAyOTIxMDA0RTQzMTg0MDM2NgotOjEwNzM5MDAwODMwMjgyMDFDMDEwOTEwMzkxMDI5MTAxODEwMDAwRDQwNwotOjEwNzNBMDAwMzAwMTQzMDAxMkQ1Q0FDMDMwMjgzNzQwMjgzNzQ0Mjg1RQotOjEwNzNCMDAwMzc0ODI4Mzc0QzIzM0QwMTcyMzNFRDAzMDIwMDYzRkY0OQotOjEwNzNDMDAwRkMwMDAwMDAxMEQ2MEI5MTAwOTIwMTkzMDI5NDAzMTE2RgotOjEwNzNEMDAwRDYwOTgyMTA5MjEwMTFENUJDODMxMDAzMjIwMjkyMTA5QwotOjEwNzNFMDAwMTFENjA2MTJENUNEOTIxMEMwNDAwNEU0MTYwMDAyMDA1QQotOjEwNzNGMDAwMTFENUZEODIxMDEzRDVCNTAzMjIwMjkyMTAwNEU0MzE5OQotOjEwNzQwMDAwODQwMzgzMDI4MjAxODEwMDAwRDUzMDAxNTMwMDAwMDAxMwotOjEwNzQxMDAwNkMxMDAyNkUzMjJGRDYyMDA1NkYwNDA0M0YwNDc0NUI5QgotOjEwNzQyMDAwMkEwNTQ0MEMwMDQxMDQwMDMzMUEyMjBBMDA2RDQ5MEQ1QwotOjEwNzQzMDAwNzM2MzA0MDM2NjBDQjEyMjBGMjIxMTAzMTMxNDczNjNFOAotOjEwNzQ0MDAwMDIyMjJDMDFEMTBGQzgzQkQxMEYwMDAwNzM2MzBDQzA4NgotOjEwNzQ1MDAwMjFEMTBGMDAwMDAwMDAwMDQ0NDk1NjMwQzAyMEQxMEY1OAotOjEwNzQ2MDAwNkMxMDAyMDA0MDA0NkI0QzA3MDMyMzE4MDIwMjE5RDE3MAotOjEwNzQ3MDAwMEYwMjAzMTlDMDIwRDEwRjZDMTAwMjAyRUEzMEQxMEZBNQotOjEwNzQ4MDAwNkMxMDAyQ0MyNTAzRjAzMTYwMDAwRjAwNkYyMjA1MDM2MQotOjEwNzQ5MDAwRjEzMTYwMDAwNTZGMjMwNTAzRjIzMTAwMDIwMEQxMEZDNgotOjEwNzRBMDAwNkMxMDAyQ0MyNTAyRjAzMEQxMEYwMDAwNkYyMjA0MDJENAotOjEwNzRCMDAwRjEzMEQxMEY2RjIzMDQwMkYyMzBEMTBGQzAyMEQxMEY3MQotOjEwNzRDMDAwNkMxMDAyMjIwQTIwMjMwQTAwNkQyODBFMjgzNzQwMjg1QgotOjEwNzREMDAwMzc0NDI4Mzc0ODI4Mzc0QzIzM0QwMTAzMDIwMEQxMEY5OQotOjEwNzRFMDAwNkMxMDAyMDJFNDMxRDEwRjBBMDA0MzY4NjU2QzczNjlDNQotOjEwNzRGMDAwNkYyMDQ2NTcyMDQ0NDU0MjU1NDczRDMwMjAyODQyNzU2RAotOjEwNzUwMDAwNjk2Qzc0MjA1NDc1NjUyMDQxNzU2NzIwMzEzMjIwMzBENAotOjEwNzUxMDAwMzkzQTM0MzMzQTMwMzQyMDUwNDQ1NDIwMzIzMDMwMzgwMQotOjEwNzUyMDAwMjA2RjZFMjA2NjY1NkM2OTc4MkU2MTczNjk2MzY0NjU4RgotOjEwNzUzMDAwNzM2OTY3NkU2NTcyNzMyRTYzNkY2RDNBMkY2ODZGNkQzNgotOjEwNzU0MDAwNjUyRjY2NjU2QzY5NzgyRjc3MkY2Njc3NUYzNjJFMzBFQQotOjEwNzU1MDAwMjkyQzIwNTY2NTcyNzM2OTZGNkUyMDU0MzM3ODc4MjAxOQotOjEwNzU2MDAwMzAzMDM3MkUzMDMwMkUzMDMwMjAyRDIwMzEzMDMwMzczMwotOjBDNzU3MDAwMzAzMDMwMzAxMDA3MDAwMENDNDRBMEQ2QjIKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQyZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleApAQCAtMCwwICsxLDE4ODUgQEAKKzoxMDAwMDAwMDYwMDA3NDAwMjAwMzgwMDAyMDAzNzAwMDAwMDAxMDAwRDYKKzoxMDAwMTAwMDAwMDAyMDAwRTEwMDAyODQwMDA3MDAwMEUxMDAwMjg4RTcKKzoxMDAwMjAwMDAwMDEwMDAwRTAwMDAwMDBFMDAwMDBBMDAxMDAwMDAwNkUKKzoxMDAwMzAwMDQ0NDQ0NDQwRTMwMDAxODMyMDAyMDAwMDIwMDFFMDAwMkEKKzoxMDAwNDAwMDIwMDFGRjEwMUZGRkQwMDAxRkZGQzAwMEUzMDAwNDNDOTEKKzoxMDAwNTAwMDAyMDAwMDAwMjAwMDY5ODgxRkZGQzI5MDIwMDA2OUQwQzQKKzoxMDAwNjAwMDFGRkZDMjk0MjAwMDZBMTAxRkZGQzI5ODIwMDA2QTg0RkMKKzoxMDAwNzAwMDFGRkZDMjlDMjAwMDAzQzBDMDAwMDBFNDMxMDBFQTMxMzEKKzoxMDAwODAwMDAwQTEzMTAwQTAzMTAzMDIwMDAyRUQzMDZFMkEwNTAwMEMKKzoxMDAwOTAwMEVEMzEwMDAyMDAwMjE2MDAxMkZGREJDMDMwMTRGRkRBNUYKKzoxMDAwQTAwMEQzMEZEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzNDcKKzoxMDAwQjAwMDBGRDMwRkQzMEYxMkZGRDUyMzBBMDAyNDBBMDBEMzBGNEEKKzoxMDAwQzAwMEQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDMwRkQzMjcKKzoxMDAwRDAwMDBGRDMwRjE0RkZDRTAzNDIxRjE0RkZDQjAzNDIxRjEyOTYKKzoxMDAwRTAwMEZGQ0NDMDMwMkQzNzMwMkQzNzM0MkQzNzM4MkQzNzNDRUQKKzoxMDAwRjAwMDIzM0QwMTcyMzNFRDAwMDIwMDEyRkZDNEMwMzAyRjM3RTAKKzoxMDAxMDAwMDAwMkYzNzEwMkYzNzIwMkYzNzMwMjMzRDAxNzIzM0VENkEKKzoxMDAxMTAwMDAwMDIwMDEyRkZCRUMwMzAyNzM3MDAyNzM3MTAyNzM3RjQKKzoxMDAxMjAwMDIwMjczNzMwMjMzRDAxNzIzM0VEMDMwMjAwMTJGRkI5NUYKKzoxMDAxMzAwMDEzRkZCQTBDMDIwMDkzMjAxMkZGQjkxM0ZGQjkwQzAyOEYKKzoxMDAxNDAwMDAwOTMyMDEyRkZCOEMwMzE5MzIwODIyMDEyRkZCNzEzMTIKKzoxMDAxNTAwMEZGQjc5MzIwMTJGRkI3MTVGRkIzMTZGRkI2QzAzMEQ3MTUKKzoxMDAxNjAwMDIwMDU2NjAxNjAwMDFCMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDAxNzAwMDA0MzYwNTAwMDIwMEQzMEZEMzBGMDUzMzBDNkUzQjE0NzkKKzoxMDAxODAwMDA3NDcxNDA3MDQ0Mzc2MzFFNjA0MzYwNTA1MzMwQzZGNDAKKzoxMDAxOTAwMDNCRUQwMDAyMDAxMkZGQTYxNUZGQTMyMzBBMDBENzIwQTMKKzoxMDAxQTAwMDA3MDQ0MzA0M0UwNTA1MzMwQzA3NDcxNDZGM0JGMDAzNzcKKzoxMDAxQjAwMDAyMDAxMkZGQTFDMDMwMTRGRkExRDMwRkQzMEZEMzBGNDEKKzoxMDAxQzAwMDkzNDBCNDQ0NzI0OUYyRDMwRkQzMEZEMzBGMTRGRjlCNjMKKzoxMDAxRDAwMDgzNDAxNEZGOUI4MzQwMTJGRjlCMjMwQTAwMTRGRjlBNjUKKzoxMDAxRTAwMEQzMEZEMzBGRDMwRjkzNDBCNDQ0NzI0OUYyRDMwRkQzM0MKKzoxMDAxRjAwMDBGRDMwRjE0RkY5NTgzNDAxMkZGOTVDOTJGODMyMDg0REUKKzoxMDAyMDAwMDIxODUyMkJDMjI3NDNCMEY4NjUwQjQ1NTk2MzBCNDMzRkUKKzoxMDAyMTAwMDc0MzNGNDYzRkZFNjAwMDA2NTNGRTE2NTVGREUxMkZGQzMKKzoxMDAyMjAwMDdDMjMwQTAwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDOTEKKzoxMDAyMzAwMDIzM0QwMTcyMzNFRDAzMDIwMDAwMDIwMDEyRkY3QUMwNzkKKzoxMDAyNDAwMDMyMDMyRTA1MDMwMjAwMTJGRjc4MTNGRjgxOTMyMEMwQjIKKzoxMDAyNTAwMDExMDE0OTMxMDA0ODMxMDEwMjAwQzAwMDE0RkY3RTA0NDEKKzoxMDAyNjAwMEQyMzExNUZGN0Q5NDUwMTRGRjdEMDREMzMxMTVGRjdDRUUKKzoxMDAyNzAwMDk0NTAxNEZGN0MwNEQ0MzExNUZGN0MyNDU2MDAxNEZGRTUKKzoxMDAyODAwMDdCMDRENTMxMTVGRjdCMjQ1NjAwMTBGRjdBMDMwMDAwNTQKKzoxMDAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDAzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDAzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDAzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDAzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDAzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMDAzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDA0MjAwMDYzRkZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwQTEKKzoxMDA0NDAwMDFGRkMwMDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwQUIKKzoxMDA0NTAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEUzMDAwNUM4MDYKKzoxMDA0NjAwMDFGRkZDMDAwMUZGRkMwMDBFMzAwMDVDODFGRkZDMDAwNDIKKzoxMDA0NzAwMDFGRkZDMDE4RTMwMDA1QzgxRkZGQzAxODFGRkZDMDE4RUEKKzoxMDA0ODAwMEUzMDAwNUUwMUZGRkMwMTgxRkZGQzI4Q0UzMDAwNUUwN0EKKzoxMDA0OTAwMDFGRkZDMjhDMUZGRkMyOENFMzAwMDg1NDFGRkZDMjkwRDUKKzoxMDA0QTAwMDFGRkZDNThDRTMwMDA4NTQyMDAwMDAwMDIwMDAwMTZBRjMKKzoxMDA0QjAwMEUzMDAwQjUwMjAwMDAxODAyMDAwMDE4MEUzMDAwQ0JDMTEKKzoxMDA0QzAwMDIwMDAwMjAwMjAwMDAyMDNFMzAwMENCQzIwMDAwMjFDRkMKKzoxMDA0RDAwMDIwMDAwMjIwRTMwMDBDQzAyMDAwMDIyMDIwMDAwMjI2QTEKKzoxMDA0RTAwMEUzMDAwQ0M0MjAwMDAyM0MyMDAwMDI0MEUzMDAwQ0NDREUKKzoxMDA0RjAwMDIwMDAwMjQwMjAwMDAyNDlFMzAwMENEMDIwMDAwMjRDMDIKKzoxMDA1MDAwMDIwMDAwMjUwRTMwMDBDREMyMDAwMDI1MDIwMDAwMjU5QzEKKzoxMDA1MTAwMEUzMDAwQ0UwMjAwMDAyNUMyMDAwMDI2MEUzMDAwQ0VDMzEKKzoxMDA1MjAwMDIwMDAwMjYwMjAwMDAyNjlFMzAwMENGMDIwMDAwMjZDNTEKKzoxMDA1MzAwMDIwMDAwMjcwRTMwMDBDRkMyMDAwMDI3MDIwMDAwMjc5MTEKKzoxMDA1NDAwMEUzMDAwRDAwMjAwMDAyOEMyMDAwMDI4Q0UzMDAwRDBDNjMKKzoxMDA1NTAwMDIwMDAwMjkwMjAwMDAyOTNFMzAwMEQwQzIwMDAwMkFDNkEKKzoxMDA1NjAwMDIwMDAwMkIwRTMwMDBEMTAyMDAwMDJEMDIwMDAwMkYyQjMKKzoxMDA1NzAwMEUzMDAwRDE0MjAwMDAzQjAyMDAwMDNCMEUzMDAwRDM4QTkKKzoxMDA1ODAwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQzODIwMDAwM0IwQ0EKKzoxMDA1OTAwMDIwMDAwM0IwRTMwMDBEMzgyMDAwMDNCMDIwMDAwM0IwQkEKKzoxMDA1QTAwMEUzMDAwRDM4MjAwMDAzQjAyMDAwNkJBOEUzMDAwRDM4RjUKKzoxMDA1QjAwMDIwMDA2QkE4MjAwMDZCQThFMzAwNzUzMDAwMDAwMDAwNEQKKzoxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMDFGRkMwMDAwRjUKKzoxMDA1RDAwMDFGRkZDNTkwMUZGRkM2NzAyMDAwNkJBODIwMDA2QkE4RUUKKzoxMDA1RTAwMERFRkZGRTAwMDAwMDA4MENERUFEQkVFRjFGRkZDMkEwNjQKKzoxMDA1RjAwMDFGRkNGRTAwMUZGRkMwOTQxRkZGQzVDMDMwMDAwMDAwOUQKKzoxMDA2MDAwMDAwM0ZGRkZGODA0MDAwMDAxMDAwMDAwMDA4MEZGRkZGQzgKKzoxMDA2MTAwMDFGRkZDMjZEMDAwRkZGRkY4MDRGRkZGRjgwMDAwMDAwMzMKKzoxMDA2MjAwMDAwMDAwODgwQjAwMDAwMDU2MDUwMDAwMDYwMDAwMDAwN0QKKzoxMDA2MzAwMDQwMDAwMDExMzUwMDAwMDA0MTAwMDAwMDEwMDAwMDAxRTIKKzoxMDA2NDAwMDIwMDAwMDAwMDAwMDEwMDA3RkZGRkZGRjQwMDAwMDAwQkUKKzoxMDA2NTAwMDA1MDAwMDAwODAwMDAwMTkwNDAwMDAwMDAwMDAwODAwRjAKKzoxMDA2NjAwMDEwMDAwMDA1ODA2MDAwMDA3MDAwMDAwMDIwMDAwMDA5RkMKKzoxMDA2NzAwMDAwMUZGODAwODAwMDAwMUVBMDAwMDAwMEY4MDAwMDAwMkQKKzoxMDA2ODAwMDA3RkZGRkZGMDgwMDAwMDAxODAwMDAwMDAxMDA4MDAxQzQKKzoxMDA2OTAwMDQyMDAwMDAwMUZGRkMyMUQxRkZGQzBEQzAwMDEwMDgwRTAKKzoxMDA2QTAwMDYwNDAwMDAwMUEwMDAwMDAwQzAwMDAwMDAwMDAzMDAwNTQKKzoxMDA2QjAwMDYwMDAwODAwODAwMDAwMUMwMDAxMDAwMDgwMDAwMDFBOUIKKzoxMDA2QzAwMDgwMDAwMDE4RkMwMDAwMDA4MDAwMDAwMTAwMDA0MDAwRDUKKzoxMDA2RDAwMDAzMDAwMDAwODAwMDA0MDA1MDAwMDAwM0ZGRkZCRkZGODQKKzoxMDA2RTAwMDFGRkZDM0Q0MDAwMDBGRkZGRkZGRjAwMDAwMDAxNkQwNzMKKzoxMDA2RjAwMDAwMDBGRkY3QTUwMDAwMDAxRkZGQzRCMDFGRkZDNDYxOEEKKzoxMDA3MDAwMDAwMDEwMDA4MDAwMDBCMjAyMDJGRkY4MDFGRkZDNDU1QjAKKzoxMDA3MTAwMDAwMDAyQzAwRkZGRUZGRjgwMEZGRkZGRjFGRkZDNTc4NjEKKzoxMDA3MjAwMDAwMDAyMDAwRkZGRkRGRkYwMDAwRkZFRjAxMDAxMTAwQ0QKKzoxMDA3MzAwMDFGRkZDM0QyMUZGRkM1OTBGRkZGRUZGRjAwMDBGRkZCQUQKKzoxMDA3NDAwMDFGRkZDNjMwMUZGRkJFQTBGRkZGRjdGRjFGRkZDMDY0RTMKKzoxMDA3NTAwMDAwMDBGRkZEMUZGRkM2MjAwMDAxRkJEMDFGRkZDNUIwM0EKKzoxMDA3NjAwMDFGRkZDNjYwMUZGRkM1OTFFMEZGRkUwMDFGRkZDNUEwNzEKKzoxMDA3NzAwMDAwMDA4MDAwMUZGRkM1M0MxRkZGQzVCNDFGRkZDMDY4RkQKKzoxMDA3ODAwMDFGRkZDNEQwMUZGQ0ZGRDgwMDAxMDA4MUUxMDAwNjAwNUMKKzoxMDA3OTAwMDAwMDAyNzEwMUZGQ0ZFMzAxRkZDRkU3MEUxMDAwMjAwNkQKKzoxMDA3QTAwMDFGRkZDNTM4MUZGRkM1NTAwMDAzRDA5MDFGRkZDNTY0NTEKKzoxMDA3QjAwMDJCNTA2MzgwMkI1MDc5ODAyQjUwOTA4MDJCNTBBNjgwM0IKKzoxMDA3QzAwMDFGRkZDNDY5MDEwMDExMEYyMDJGRkUwMDIwMzAwMDgwQTAKKzoxMDA3RDAwMDIwMkZGRjAwMDAwMEZGRkYwMDAxRkZGODJCNTBCMjAwQTgKKzoxMDA3RTAwMDJCNTBCMjA4MDAwMTAwMTAyQjUwQjE4MDJCNTBCMjgwNkEKKzoxMDA3RjAwMDJCNTBCQTAwMDAwMTAwMTEyQjUwQkQyODJCNTBCQzgwOUIKKzoxMDA4MDAwMDJCNTBCREEwMjAzMDAwMDBERkZGRkUwMDUwMDAwMDAyOTIKKzoxMDA4MTAwMDAwQzAwMDAwMDIwMDAwMDBGRkZGRjdGNDFGRkZDMDZDRTMKKzoxMDA4MjAwMDAwMEZGODAwMDQ0MDAwMDAwMDEwMDAwMDBDNDAwMDAwMjEKKzoxMDA4MzAwMDFDNDAwMDAwRTAwMDAwQTAxRkZGQzU0MDFGRkQwMDA4OTUKKzoxMDA4NDAwMDFGRkZDNTU0MUZGRkM1NjgxRkZGQzU3Q0UxMDAwNjkwNTAKKzoxMDA4NTAwMEUxMDAwNkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDA4NjAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDA4NzAwMDAwMDAwMDAwMjAxMDAwNDAyMDEwMDA0MDIwMTAwMDQwMjgKKzoxMDA4ODAwMDIwMTQwMDgwMjAwQzAwMDAyMDBDMDAwMDIwMEMwMDAwMzAKKzoxMDA4OTAwMDIwMTAwMDQwMjAxNDAwODAyMDE0MDA4MDIwMTQwMDgwQ0MKKzoxMDA4QTAwMDIwMTgwMEMwMjAxQzAxMDAyMDFDMDEwMDIwMUMwMTAwOTkKKzoxMDA4QjAwMDIwMjAwMTQwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwQ0YKKzoxMDA4QzAwMDIwMUMwMTAwMjAxODAwQzAyMDE4MDBDMDIwMTgwMEMwMDMKKzoxMDA4RDAwMDIwMUMwMTAwMjAyMDAxNDAyMDIwMDE0MDIwMjAwMTQwNTgKKzoxMDA4RTAwMDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MDIwMjAwOTQwRTQKKzoxMDA4RjAwMDIwMjQwOTgwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzcKKzoxMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDA5MTAwMDAwMDAwMDAwMjAwMDUyRkMyMDAwNTFDQzIwMDA1MkZDQkUKKzoxMDA5MjAwMDIwMDA1MkZDMjAwMDUxMDgyMDAwNTEwODIwMDA1MTA4RUUKKzoxMDA5MzAwMDIwMDA0RjQ4MjAwMDRGNDgyMDAwNEY0MDIwMDA0RUFDODAKKzoxMDA5NDAwMDIwMDA0RDU0MjAwMDRCMzQyMDAwNDkwODAwMDAwMDAwRDYKKzoxMDA5NTAwMDAwMDAwMDAwMjAwMDUyQ0MyMDAwNTE5ODIwMDA1MjNDQTIKKzoxMDA5NjAwMDIwMDA1MjNDMjAwMDRGRjAyMDAwNEZGMDIwMDA0RkYwQkMKKzoxMDA5NzAwMDIwMDA0RkYwMjAwMDRGRjAyMDAwNEYzODIwMDA0RkYwQjMKKzoxMDA5ODAwMDIwMDA0Qzc0MjAwMDRBRTQyMDAwNDhCNDAwMDAwMDAwMUQKKzoxMDA5OTAwMDAwMDAwMDAwMjAwMDBCRTAyMDAwMzhCQzIwMDAwNEMwNTQKKzoxMDA5QTAwMDIwMDA0NEE4MjAwMDBCRDgyMDAwM0ZCNDIwMDAwM0YwMTIKKzoxMDA5QjAwMDIwMDA0NDY4MjAwMDQ4OTAyMDAwM0NDNDIwMDAzQkUwMTgKKzoxMDA5QzAwMDIwMDAzODM4MjAwMDM2QzQyMDAwMzQzNDIwMDAyRjk0MTIKKzoxMDA5RDAwMDIwMDAzQTNDMjAwMDJCRjQyMDAwMjgyODIwMDA2NTM0MTkKKzoxMDA5RTAwMDIwMDAyM0I0MjAwMDIwOTQyMDAwMjA0MDIwMDAxRDJDNTMKKzoxMDA5RjAwMDIwMDAxODQwMjAwMDE1NzAyMDAwMERFQzIwMDAwQzI0NzEKKzoxMDBBMDAwMDIwMDAxMTM0MjAwMDEzMjAyMDAwNDFBQzIwMDAzQzc4NEQKKzoxMDBBMTAwMDIwMDAwQkU4MjAwMDA0QzAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDBBOTAwMDAwMDAwMDAwMDAwMDAwMDAzMjY0MDAwMDAwMDAwMDAwQzAKKzoxMDBBQTAwMDMyNjQwMDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNTgKKzoxMDBBQjAwMDY0MDA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwRTYKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDBCMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzMjM4MDAwMDAwMDAwREYKKzoxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMDBCNTAwMDAwNUM5NDAxNUQ5NDAyNUU5NDAzNUY5NDAwNDMwMDAwODYKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDBCOTAwMDAwNUM5MDAxNUQ5MDAyNUU5MDAzNUY5MDAwNTMwMDAwNDYKKzoxMDBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDBCRDAwMDAwOUM5NDAwMUQ5MDAxOUQ5NDAyOUU5NDAzOUY5NDA0OTgKKzoxMDBCRTAwMDA4OTQwNTA5OTQwNjBBOTQwNzBCOTQwMDQzMDAwMDAwM0EKKzoxMDBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDBDMTAwMDAwOUM5MDAxOUQ5MDAyOUU5MDA3MUQ5MDAzOUY5MDA0NjAKKzoxMDBDMjAwMDc4OTAwNTc5OTAwNjdBOTAwNzdCOTAwMDUzMDAwMDAwMzkKKzoxMDBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDBDNTAwMDAwREM5NDAwMUQ5MDAxREQ5NDAyREU5NDAzREY5NDA0MTcKKzoxMDBDNjAwMDA0OTQwNTA1OTQwNjA2OTQwNzA3OTQwODA4OTQwOTA5NTYKKzoxMDBDNzAwMDk0MEEwQTk0MEIwQjk0MDA0MzAwMDAwMDAwMDAwMDAwNEIKKzoxMDBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDBDOTAwMDAwREM5MDAxREQ5MDAyREU5MDBCMUQ5MDAzREY5MDA0REMKKzoxMDBDQTAwMEI0OTAwNUI1OTAwNkI2OTAwN0I3OTAwOEI4OTAwOUI5MEEKKzoxMDBDQjAwMDkwMEFCQTkwMEJCQjkwMDA1MzAwMDAwMDYzRkZGQzAwNDkKKzoxMDBDQzAwMDIwMDA2OTY0MTBGRkZGMEEwMDAwMDAwMDIwMDA2OTg4MEUKKzoxMDBDRDAwMDAwRDIzMTEwRkZGRTBBMDAwMDAwMDAwMDIwMDA2OUQwQTEKKzoxMDBDRTAwMDAwRDMzMTEwRkZGRTBBMDAwMDAwMDAwMDIwMDA2QTEwNEYKKzoxMDBDRjAwMDAwRDQzMTEwRkZGRTBBMDAwMDAwMDAwMDIwMDA2QTg0Q0EKKzoxMDBEMDAwMDAwRDUzMTEwRkZGRTBBMDAwMDAwMDAwMDYzRkZGQzAwNjgKKzoxMDBEMTAwMEUwMDAwMEEwMTJGRkY3ODIyMDAyODI1N0M4MjE2M0ZGODMKKzoxMDBEMjAwMEZDMTJGRkYzMDNFODMwMDRFRTMwMDVDMDMwOTMyMDk0NEEKKzoxMDBEMzAwMDIxOTUyMjYzRkZGQzAwMDAxRkZGRDAwMDAwMDQwMDIwNkIKKzoxMDBENDAwMDFGRkZDNTkwMUZGRkM2NzAyMDBBMDAxMUZGRkIxM0ZGOTUKKzoxMDBENTAwMEZCMDNFNjMxMDEwMjAwMTZGRkZBMTdGRkZBRDMwRjc3MDMKKzoxMDBENjAwMDZCMDY5MDYwQjQ2Njc3NjNGODU0MTU1MDU0MTlFNjBGMUIKKzoxMDBENzAwMDE0MDA2M0ZGRjkwMDAwMDA2QzEwMDRDMDIwRDEwRjAwQzQKKzoxMDBEODAwMDZDMTAwNEMwQzcxQUVGMDZEODMwQkMyQkQ3MjA4NTcyNzAKKzoxMDBEOTAwMDBENDIxMTgzNzEwNTQ1MEI5NTcyMDIzMzBDMjM3NjAxQzgKKzoxMDBEQTAwMDdCM0IwNDIzM0QwODkzNzFBMzJEMTJFRUZFMTlFRUZFNEEKKzoxMDBEQjAwMEEyNzY3RDYzMkMyRTBBMDAwODgyMDIyODBBMDEwMzhFODcKKzoxMDBEQzAwMDM4MEUwRTQyQzhFRTI5QTY3RTZENEEwNTAwMjA4ODAwMjYKKzoxMDBERDAwMDMwOEM4MjcxRDEwRkMwRjAwMjhGMzg3RkMwRUE2M0ZGODAKKzoxMDBERTAwMEU0MDBDMEYxQzA1MDAzN0UwQ0EyRUUwRTNEMTIwODgyNUEKKzoxMDBERjAwMDAyMDNGNTM4MDUwNTQyQ0I1NzI5QTY3RTJGREMxMDBGREMKKzoxMDBFMDAwMDRGMzY2REZBMDUwMDIwODgwMDMwOENCQzc1QzAzMDA4NjQKKzoxMDBFMTAwMEUyMDgyODBBMDEwNTgzMzgwMzAzNDJDOTNFMjlBNjdFNTkKKzoxMDBFMjAwMDBENDgwQ0QzMEY2RDhBMDUwMDIwODgwMEIwOEM4MjcxQUMKKzoxMDBFMzAwMEQxMEZDMDUwMDhGNTM4NzVDMEMxNjNGRkJCQzA2MDAyNTgKKzoxMDBFNDAwMDg2Mzg3NkMwREE2M0ZGRDQ2QzEwMTIxNkVFRDhDMUY4N0IKKzoxMDBFNTAwMEMxRTcyQjIyMUUyQzIyMURDMEQwN0JDMTJGMjkyMDA2Q0EKKzoxMDBFNjAwMEQ3QjAyOTlDRkFDQzU3MjgyMDcwMjg4Q0ZGMjgyNDcwRjIKKzoxMDBFNzAwMDY0OTE1QzJBQjAwMDBFQTgwQzY0ODE2NzBGQTkwQzY0MTEKKzoxMDBFODAwMDkyQjNDMUU5N0VBMTM5NjlBQzJGNjAwMDM2MjkyMDA2RjIKKzoxMDBFOTAwMEQ3RDAyOTlDRkFDQzU3MjgyMDcwMjg4Q0ZGMjgyNDcwQTIKKzoxMDBFQTAwMDY0OTEzNTJBRDAwMDBFQTgwQzY0ODE2NDBGQTkwQzY0RUIKKzoxMDBFQjAwMDkzMUJDMUU5N0VBMTA5NjhBQzA5QzAyMEQxMEYwMDAwRDUKKzoxMDBFQzAwMDAwMkQyNTAyOEEzMkMwOTAwQTZGNTA2NUY1QUQyOTI0QTUKKzoxMDBFRDAwMDY3MDkwODQ3NjU4NUE5MkYyMDBDMThFRUI1MENGRTExOEYKKzoxMDBFRTAwMEE4RUUyOEUyODZCNDQ5Nzg5MzAyNjAwNTdBMTlFRUIxM0IKKzoxMDBFRjAwMDA5RjkwQTI5OTJBMzY4OTAwNzg4MjAwOTg4MEM2NTg1NUEKKzoxMDBGMDAwMDY2MjdFMjg1NjQ3NTYwNjU1NThFN0JDMTA0RDlCMDYwNDMKKzoxMDBGMTAwMDAwMDFDMDkwOEI5NDFDRUVBODBCODgxNDhDQzQwQjBCQTIKKzoxMDBGMjAwMDQ3QThDQzE4RUVBNjA5QkIxMDA4Q0MwMjlDNzAxOEVFOUUKKzoxMDBGMzAwMEE0MUNFRUE1MDhBODAxMEI4ODAyMEM0QzAyMUJFRUExMTQKKzoxMDBGNDAwMDlDNzEwQjg4MDI5ODcyMkM5MDIzMkI5MDIyMDRDODEwNUQKKzoxMDBGNTAwMDA2QkIxMDBDNEMxMjA4QkIwMjI4OTAyMTA3Q0MxMDBDQzkKKzoxMDBGNjAwMDg4MTAwQzg4MDIwQjg4MDIxQ0VFOTk4QjMzMENCQjAxOTUKKzoxMDBGNzAwMDhDMzQwQjg4MDI5ODczOUM5OTlDNzQ4Qjk1OEMzOTlCNEMKKzoxMDBGODAwMDc1ODg5NjhCMzg5ODc2ODg5NzlDNzk5Qjc4OTg3NzFDOEIKKzoxMDBGOTAwMEVFOTAyOEUyODUwQ0ZDMDgyREM0Q0YwODQ4MEIyOEU2MEIKKzoxMDBGQTAwMDg1NjU1NTBCMkIyMjFFMkQyMjFEN0JEOTAyMkIwQTAwOTUKKzoxMDBGQjAwMDY0QkYwNjJDQjAwNzI4QjAwMERBMjAwNjg4MEEyODgyMTEKKzoxMDBGQzAwMDRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZFRUIwMDAwRjcKKzoxMDBGRDAwMDI5MjA3MDY1OUU5QzYwMDRFNDJBMjA3MDY1QUVDMzYwODEKKzoxMDBGRTAwMDA0REIwMDAwMkVCMDAzMkMyMDY3RDRFMDY1QzEwNThBMjUKKzoxMDBGRjAwMDMyOEMzMzBBRkY1MDBDNDU1NEJDNTU2NEY0RTYxOUVFQUMKKzoxMDEwMDAwMDc1ODgyQTA5QTkwMTA5ODgwQzY0ODIxQkMwOTI2MDAwQjYKKzoxMDEwMTAwMEREMkVEMDAzMkEyMDY3RDRFMDY1QTBEODhBMzI4QjMzMzYKKzoxMDEwMjAwMDBBRkM1MDBCNDU1NEJDNTU2NEM0QjkxOUVFNkE4ODJBQjEKKzoxMDEwMzAwMDA5QTkwMTc5ODlENTBCRUE1MDY0QTRERDBDRUUxMUMwMzEKKzoxMDEwNDAwMEYwMkYxNjEzMkUxNjE2OEFFNzhDRTgyQTE2MTI4RUU5NTAKKzoxMDEwNTAwMERGQzBBQUVBN0VBQjAxQjFDRjBCQTg1MDY1ODM0Mjg4RkUKKzoxMDEwNjAwMDM3REJDMEFFODk5OTFFNzg5QjAyMkJDQzAxMkIxNjFCNTcKKzoxMDEwNzAwMDI5MTIwRTJCMEEwMDI5MTYxQTdGQzMwNzdGQzkwMjdFODgKKzoxMDEwODAwMEFCMDFDMEIxNjVCNDk4OEIzNTJGMEEwMDJBMEEwMDdBRUIKKzoxMDEwOTAwMEMzMDU2NEMzQzcyRjBBMDE2NUY0ODQyQjEyMTYyQjE2RUYKKzoxMDEwQTAwMDE5MDA1MTA0QzBDMTAwQ0MxQTJDQ0NGRjJDMTYxNzBDMEYKKzoxMDEwQjAwMEZDMTMyQzE2MTgyQjEyMUEyQTEyMUJEQzUwNTgxOEZBODMKKzoxMDEwQzAwMEMwRDBDMDkwMkU1Q0Y0MkMxMjE3MjgxMjE4MkYxMjFCQkYKKzoxMDEwRDAwMDJBMTIxQTA4RkYwMTBDQUEwMTg4MzQwNzRDMEFBQjhCQUMKKzoxMDEwRTAwMDI4MTIxOTJCQzYxNjJGODYwODJBODYwOTJFNzQxMDI5NTUKKzoxMDEwRjAwMDI0NjcyRTcwMDM4OTc1QjFFQTJBNzQwM0IwOTkwOTQ5RUYKKzoxMDExMDAwMDBDNjU5REI1MkIyMDY3MkQyNTAyNjVCM0Y0MkIyMjFFOUYKKzoxMDExMTAwMDJDMjIxRDdCQzkwMUMwQjA2NEJEOUUyQ0IwMDcyOEIwMzUKKzoxMDExMjAwMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwQTAKKzoxMDExMzAwMDY1QUZFNzYzRkQ4Mzg5QkFCMTk5NjU5MDk3ODgzNDFDRTAKKzoxMDExNDAwMEVFMjY5OEJBOEYzMzFFRUUxRjBGNEY1NDJGQjQyQzhERkUKKzoxMDExNTAwMDJBOEEzMjBFREQwMjBDQUMwMTdEQzk2NjBBNDk1MTZGNDQKKzoxMDExNjAwMDkyNjA4QTMzNzVBNjVCMkNCMDEzMEFFRDUxMERDRDAxNDgKKzoxMDExNzAwMDBEMEQ0MTBDMEM0MTdEQzk0OTJFQjAxMkIwRUU2NUUzNTYKKzoxMDExODAwMEMyQzBEMDhFMzc4Q0I4OEEzNjhGQjk3Q0EzMDc3QUM5OTMKKzoxMDExOTAwMDAyN0VGQjAxQzBEMUNFRDk4ODM1MEFBRDAyMEU4RTA4ODEKKzoxMDExQTAwMDc4RUIwMjJEQUMwMTg5QjdEQUMwQUY5Qjc5QkIwMUIxRjYKKzoxMDExQjAwMENBRENCMEMwQjA3REEzMDc3QUQ5MDI3Q0VCMDFDMEIxMTQKKzoxMDExQzAwMDY0QjE1REMwOTEyOTI0NjdDMDIwRDEwRjAwMDA4QURBODQKKzoxMDExRDAwMEIxQUE2NEEwQkMyRTIwNjcyRDI1MDI2NUUzMEIxRkVEOEMKKzoxMDExRTAwMEY5OEEzMjE4RURGRTBGQUYwMTA4RkYwQzY1RjI4NjBBOEUKKzoxMDExRjAwMDQ4NTE2RjgyMDI2MDAyN0RDMDkwMjkyNDY3MDkwQTQ3MjYKKzoxMDEyMDAwMDY1QTJGMjdCQzkwMUMwQjA2NEJDQUUyQ0IwMDcyOEIwQTcKKzoxMDEyMTAwMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwQUYKKzoxMDEyMjAwMDY1QUZFNzYzRkM5MzAwMDAwQ0U5NTA2NDkyRUIwQ0VGQjAKKzoxMDEyMzAwMDExQzA4MDI4MTYxMUFGQkYyRjE2MTk4RUY4OEJGN0RBNjAKKzoxMDEyNDAwMEUwOEZGOTJCMTYxMEFCRkI3RkJCMDFCMUVBMENBODUwNjUKKzoxMDEyNTAwMDY1ODBENjg4MzdEQ0UwQUY4OTk5MUM3ODlCMDIyQ0VDM0UKKzoxMDEyNjAwMDAxMkMxNjFCMjkxMjBDMkMwQTAwMjkxNjFBN0FFMzA3RTYKKzoxMDEyNzAwMDdBRTkwMjdGQkIwMUMwQzE2NUMyQTQ4QjM1MkMwQTAwOEMKKzoxMDEyODAwMDJBMEEwMDdBRTMwNTY0RTFDQTJDMEEwMTY0Q0UxMTYwREYKKzoxMDEyOTAwMDAyOEQ4ODM0MUJFREQxOThEQThGMzMxRUVEQ0EwRjRGQzMKKzoxMDEyQTAwMDU0MkZENDJDOEMyQThBMzIwRUNDMDIwQkFCMDEwQ0JCRUYKKzoxMDEyQjAwMDBDNjVCRjBFMEE0OTUxNkU5MjAyNjNGRjA1OEEzMzBBMUMKKzoxMDEyQzAwMEFCNTA2NEJFRkQyQ0QwMTMwQUVFNTEwRUNFMDEwRTBFQjMKKzoxMDEyRDAwMDQxMEMwQzQxMEVDQzBDNjVDRUU4MkZEMDEyQjBGRjY1NEUKKzoxMDEyRTAwMEYyNkVDMEIwOEUzNzhDRDg4QTM2MkZEMjA5N0NBMzA3MTUKKzoxMDEyRjAwMDdBQzkwMjdFRkIwMUMwQjE2NUJFQzc4ODM1REJBMEFFRUUKKzoxMDEzMDAwMDhFNzhFQjAxQjFBQjg5RDdEQUMwQUY5RDc5REIwMUIxNDMKKzoxMDEzMTAwMENBQzBDMDdCQTMwNzdBQjkwMjdERUIwMUMwQzE2NUNFMEMKKzoxMDEzMjAwMEExQzA5MDI5MjQ2N0MwMjBEMTBGODgzNzhDMzY5ODE0MkIKKzoxMDEzMzAwMDBDRTkwQzI5MTYxNDA4RjgwQzk4MUQ3OEZCMDcyODEyRTQKKzoxMDEzNDAwMDE0QjA4ODI4MTYxNDg5MUQ5RjE1OUIxNkMwRjAyQjEyMDcKKzoxMDEzNTAwMDE0MjkxNjFBMkIxNjFCOEIxNDdBRTMwQjdBRTkwNjg4Q0MKKzoxMDEzNjAwMDE1OEUxNjc4RUIwMUMwRjE2NUYxQjkyOTEyMUEyRjEyMEEKKzoxMDEzNzAwMDExOEEzNTJFMTIxQjlBMUFBRkVFMkYxMjEwQzBBMEFGOTEKKzoxMDEzODAwMDlGNzlGQjAxQjFFRTlGMTE4ODFBQzBGMDk4MTA3QUUzQTMKKzoxMDEzOTAwMDBBN0VBOTA1MkExMjAxN0E4QjAxQzBGMTY0RjA4MTYwRUUKKzoxMDEzQTAwMDAxODI4OTM2OEIzNzk5MTcwQkU4MEM5ODFGMDlDOTBDRjUKKzoxMDEzQjAwMDI5MTYxNTc4RUIwNzI4MTIxNUIwODgyODE2MTVEOUMwRkMKKzoxMDEzQzAwMDlBMTk5RTE4OEExRjJFMTIxNTJBMTYxQTJFMTYxQkRBMjMKKzoxMDEzRDAwMEMwQzBFMDhDMTc3RjkzMEI3RkE5MDY4ODE4OEYxOTc4RkYKKzoxMDEzRTAwMEZCMDFDMEUxNjVFMTNEMjkxMjFBMkYxMjEzOEEzNTJFNDcKKzoxMDEzRjAwMDEyMUI5QTFCQUZFRTJGMTIxMkMwQTBBRjlGNzlGQjAxRjgKKzoxMDE0MDAwMEIxRUU5RjEzODgxQkMwRjA5ODEyN0FFMzBBN0VBOTA1RkIKKzoxMDE0MTAwMDJBMTIwMzdBOEIwMUMwRjE2NUYxMDkyRTEyMTYyRTE2REQKKzoxMDE0MjAwMDE5MkExMjFCMDA1MTA0QzBFMTAwRUUxQUIwRUUyRTE2NkMKKzoxMDE0MzAwMDE3MEVGRjEzMkYxNjE4MEZDQzAxQUNBQTJGMTIxQTBFN0QKKzoxMDE0NDAwMEJDMDFBQ0ZDN0ZDQjAxQjFBQTJBMTYxQjJDMTYxQTYzNzcKKzoxMDE0NTAwMEZDNjIwMDAwN0ZCMzAyNjNGRTMxNjNGRTJCN0VCMzAyQTkKKzoxMDE0NjAwMDYzRkMzNDYzRkMyRTAwMDA2NDUwQzBEQTIwREJGMDU4Q0IKKzoxMDE0NzAwMDE1REVDMDIwRDEwRkMwOTE2M0ZEN0UwMEMwOTE2M0ZBREMKKzoxMDE0ODAwMDRDREEyMERCNzBDMEQxMkUwQTgwQzA5QTI5MjQ2ODJDNDcKKzoxMDE0OTAwMDcwMDc1ODE0Q0VEMkEwRDEwRjAzNEMwQjE4RUQ1MURCQkUKKzoxMDE0QTAwMEMwQTgyODc4QzMwMjJCQ0RGOEQ5QjA2M0ZBNjUwMDAwMzQKKzoxMDE0QjAwMDJBMkM3NERCNDA1ODBFNTA2M0ZBRTgwMDAwMDAyRDI1RkEKKzoxMDE0QzAwMDAyN0JDOTAxQzBCMDY0QjAxNzJDQjAwNzI4QjAwMERBQTUKKzoxMDE0RDAwMDIwMDY4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGQjMKKzoxMDE0RTAwMEU3QzAyMEQxMEZDMDkxNjNGQzA0MDIyQTAyNTgwMjUwQzkKKzoxMDE0RjAwMDBBQTIwMjA2MDAwMDAyMkEwMjU4MDI0RDBBQTIwMjA2QUYKKzoxMDE1MDAwMDAwMDBEQjcwREEyMEMwRDEyRTBBODBDMDlFMjkyNDY4M0EKKzoxMDE1MTAwMDJDNzAwNzU4MTRBRUMwMjBEMTBGQzA5NDYzRkJDRjAwQ0QKKzoxMDE1MjAwMEMwOTY2M0ZCQzlDMDk2NjNGQkM0MDAwMDJBMkM3NERCMjEKKzoxMDE1MzAwMDMwREM0MDVCRkUxM0RCQTBDMkEwMkFCNDAwMkYyMDBDREQKKzoxMDE1NDAwMDYzRkYyNzAwOEQzNThDQjc3RENCMDI2M0ZERDI2M0ZDMzIKKzoxMDE1NTAwMDcxOEYzNThFRDc3RkVCMDI2M0ZEQzU2M0ZDNjQwMDAwOUQKKzoxMDE1NjAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDRDMDIwRDEwRjAwRkIKKzoxMDE1NzAwMDZDMTAwNDJCMjIxRTI4MjIxREMwQTBDMDk0MjkyNDA2MTIKKzoxMDE1ODAwMDJBMjUwMjdCODkwMURCQTBDOUI5MTNFRDA4REEyMDI4REUKKzoxMDE1OTAwMEIwMDAyQ0IwMDcwMzg4MEEyODgyNENDMEQxMEI4MDAwMTEKKzoxMDE1QTAwMERCQTA2NUFGRTdDMDIwRDEwRjAwMDAwMDZDMTAwNDI5NUMKKzoxMDE1QjAwMDIwMDYyQTIxMDI2ODk4MDUyODlDRjk2NTgxMUEwQTBBRTIKKzoxMDE1QzAwMDRDNjVBMEYwMTZFQ0ZCMkI2MjlFMUFFQ0Y4NkZCODAyOEIKKzoxMDE1RDAwMDYwMDBGMTJBQTIyNjY4QTAwNzhCMjAwQUJCMEM2NUIwMjgKKzoxMDE1RTAwMEUzMkE2MjlENjRBMEREMkIyMDBDMENCQzExQTZDQzJEM0YKKzoxMDE1RjAwMEMyODY2RkQ5MDI2MDAwRDcxREVDRUYwREJEMEEyREQyNTcKKzoxMDE2MDAwMEEzNjhEMDA3OEUyMDBERUUwQzY1RTBDMzI3QzI4NUMwMEQKKzoxMDE2MTAwMEUwNjQ3MEJCMURFQ0Y0Njg0MzREMUNFQ0YzOEEyQjBDQUEKKzoxMDE2MjAwMEFBMDI5QTcwODkyMDA4OTkxMTBEOTkwMjk5NzE4ODJBNDUKKzoxMDE2MzAwMDk4NzQ4RjMyOUY3NTI4MjEwNDA4ODgxMTk4NzcxOEVDQzgKKzoxMDE2NDAwMEU0MENCRjExQTZGRjJERjI4NUE4QjgyRTg0Q0YyRERDQTcKKzoxMDE2NTAwMDI4MkRGNjg1Qzg1QTJBMkM3NERCNDA1ODBERTdEMkEwRjUKKzoxMDE2NjAwMEQxMEZDMDIwRDEwRjAwMDAyQzlDRjk2NEMwOEQyQzIwMUMKKzoxMDE2NzAwMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RkM2Njk3MDlFMEMKKzoxMDE2ODAwMDY2MThFQ0RBODkzMDhGMkIwOTg5NDAwQjk5MTAwOUZGMTUKKzoxMDE2OTAwMDAyMDhGRjAyOUY3MDhDMjAwOENDMTEwRENDMDI5QzcxQjcKKzoxMDE2QTAwMDhBMzM5QTczODkzMjk5NzI4ODJBOTg3NDhGMzQ5Rjc1MTUKKzoxMDE2QjAwMDYzRkY4MjAwMDBDQzU3REEyMERCMzBEQzQwNTgxNEI4REUKKzoxMDE2QzAwMEMwMjBEMTBGMDBEQTIwQzBCNjU4MTU0NzYzRkZFNTAwRUYKKzoxMDE2RDAwMERBMjA1ODE1NDU2M0ZGREMwMERBMjBEQjMwREM0MEREMjIKKzoxMDE2RTAwMDUwNTgxNUM3RDJBMEQxMEYyQjIxMDQ1ODEzREExREVDODYKKzoxMDE2RjAwMEJEMkIyMDBDQzBFMDJFMjQ2NjYzRkY4NDJGMjEyM0MwNjUKKzoxMDE3MDAwMEM4N0ZDMzAyNjNGRjc5MkMyMDY2MkIyMTA0QjFDQzBDNjcKKzoxMDE3MTAwMDBDNDcyQzI0NjY1ODEzQ0YxREVDQjMyQjIwMENDMEUwRDMKKzoxMDE3MjAwMDJFMjQ2NjYzRkY1QTAwMDA2QzEwMDRDMEI3QzBBMTE2RDcKKzoxMDE3MzAwMEVDQjAxNUVDQTJENzIwRDg0MEI4MjJDMDQwMDUzNTAyNDUKKzoxMDE3NDAwMDk2NzE5NTcwMDJBNDM4MDQwNDQyQzk0QjFBRUM5NTE5OUQKKzoxMDE3NTAwMEVDOTYyOUE2N0VDMTQwRDMwRjZENEEwNTAwODA4ODAwMTMKKzoxMDE3NjAwMDIwOEMyMjBBODhBMjcyRDEwRkMwNTAwOEE1Mzg3NUIwMEIKKzoxMDE3NzAwMEUzNjNGRkQ3NkMxMDA4OTMxNDk0MTIyOTIwMDY2NTUyNzYKKzoxMDE3ODAwMDg4QzA3MTY4OTgwNTJBOUNGOTY1QTI5ODE2RUM4OTI5ODkKKzoxMDE3OTAwMDIxMDI4QTE0MDkwOTRDNjU5MEM3OEFBMDBBNkE1MTJBNTUKKzoxMDE3QTAwMEFDRkQ2NUEwQkNDQzVGREIzMERBMjA4QzEyNTgxNDdDMTkKKzoxMDE3QjAwMEMwNTE5QTE0QzdCRjlCQTk4RTE0MkVFMjA5NjhFMDYwM0QKKzoxMDE3QzAwMDJGNjI5RTFERUM3QTZGRjgwMjYwMDA4MTJERDIyNjY4OTAKKzoxMDE3RDAwMEQwMDUyRjIyMDA3REY5NzUyQzYyOURDNzkwNjRDMDZERTUKKzoxMDE3RTAwMDlDMTE4QTE0MkIyMDBDMkFBMDIwMENCRDExQTZERDBBMDYKKzoxMDE3RjAwMDRGMTRCRkE4MDk4ODAxMjlEMjg2QUY4ODI4OEMwOTc5OUYKKzoxMDE4MDAwMDhCNTUxRkVDNkMwRkJGMEEyRkYyQTM2OEYwMDUyODIyM0UKKzoxMDE4MTAwMDAwN0Y4OTQzMjlEMjg1RDQ5MDY1OTA3NzYwMDAzRDAwOTAKKzoxMDE4MjAwMDAwMkIyMDBDMUZFQzY0MENCRDExQTZERDI5RDI4NjBGMDUKKzoxMDE4MzAwMEJGMEE2RTk2MTAyRkYyQTM2OEYwMDQ4ODIwN0Y4OTA1RjYKKzoxMDE4NDAwMDI5RDI4NTY1OTE2NURBMjA1ODE0RTc2MDAwMTNEQTIwMDMKKzoxMDE4NTAwMEMwQjY1ODE0RTU2MDAwMDlDMDkwNjNGRkI5REEyMDU4OUIKKzoxMDE4NjAwMDE0RTI4OTE0ODk5MTA5RkU1MDY1NTFFNDhDMTI4RDE0OUIKKzoxMDE4NzAwMERBMjBEQkQwOEREMDlFMTAwRDZENTE1ODEzNTQ5QTE0ODAKKzoxMDE4ODAwMDY0QTIwOEM3NUY4RkExOTVBOUMwNTEwRjBGNDc5RjEyOEYKKzoxMDE4OTAwMDYzRkVGQjAwQzA5MUMwRjEyODIwMDYyQzIwNjYyODhDMzYKKzoxMDE4QTAwMEY5QTdDQzBDMEM0NzJDMjQ2NjZGQzYwODhEMTQ4REQxN0IKKzoxMDE4QjAwMDcwREUwMUMwOTBERDkwNjQ4MTU5QzlEMzJBMTIwMTJCREEKKzoxMDE4QzAwMDIxMDQ1ODEzNjQ4QTE0QzBCMDJCMjQ2NjhFQTkyQUEwNjAKKzoxMDE4RDAwMDIwMEUyODE0MUNFQzQzOEQxNDE1RUMzN0MxNzAwQTc3QzgKKzoxMDE4RTAwMDM2ODU1NjJEREMyOEFDMkM5QzEzREVEMEE4NTU3Q0QzMzUKKzoxMDE4RjAwMDAyMkVEREY4RDNFMERBNDAwNTVCMDJEQzMwNUJGRjhBQzQKKzoxMDE5MDAwMEQ0QTAyODIwMENCNDU1QzBEMDJCMEE4ODJGMEE4MDBDRjQKKzoxMDE5MTAwMDhDMTFBNkNDMjlDMjg1QUYzRkFCOTkyOUM2ODUxQ0VDOUEKKzoxMDE5MjAwMDJDREVGMEFDODgyRDg0Q0YyODEyMDMyOTEyMDQ3OEYzMjIKKzoxMDE5MzAwMDAyMkVGREY4Mjg5MDIwRDNFMDA3ODgwQ0MxNzAwODA4MUIKKzoxMDE5NDAwMDQ3Mjg5NDIwMDg3NzM2NjU3RkFCODkxNDEzRUMyQTg5RTEKKzoxMDE5NTAwMDkwQzBGNDc3OTc0OTFCRUMyOEMxQ0EyODIxMDQ4NTE0NEMKKzoxMDE5NjAwMDA5OUU0MDA2RUUxMTg3NTMwNDg4MTE4NTUyMEU4ODAyQTUKKzoxMDE5NzAwMDBDODgwMjlCQTA5RkExOEYyQjlEQTU5OEE0OTdBNzk1NEIKKzoxMDE5ODAwMEE2MDNGRjAyOUZBMjJDMjAwQzFFRUMxMUFFQ0UwQ0NDQTUKKzoxMDE5OTAwMDExMDZDQzA4MkJDMjg1MkRFNENGMkJCQzIwMkJDNjg1OEQKKzoxMDE5QTAwMDJBMkM3NDhCMTI1ODBEMTREMkEwRDEwRjI4MjAzREMwQzAKKzoxMDE5QjAwMEUwN0M4NzdGMkUyNDY3MEUwQTQ3NjVBMDdCMUFFQzBGMTgKKzoxMDE5QzAwMDg4MjAxRUVCRkQ4RjE0OEVFNDhGRjQwODg4MTEwQTg4OUUKKzoxMDE5RDAwMDAyMEY4RjE0QUZFRTFGRUMwQTk4OTEwRkVFMDI5RTkwNEIKKzoxMDE5RTAwMDFFRUMwOUMwODAxQUVCRkEyQ0QyODVBQUJBQjhDQzI4MTIKKzoxMDE5RjAwMEE0Q0YyQ0Q2ODUyQzIxMDIyRjIwNzAwRUNDMDJCMUZGNTMKKzoxMDFBMDAwMDJGMjQ3MDJDMjUwMkMwMjBEMTBGODcxNDg3NzAwNzA3NjAKKzoxMDFBMTAwMDQ3NjNGRDZFMjgyMTIzQzA5OTc5OEIwMjYzRkU5QUREMEUKKzoxMDFBMjAwMEYwNjNGRTk1MDBEQTIwREIzMDhDMTJERDUwNTgxNEY0QTAKKzoxMDFBMzAwMEQyQTBEMTBGQzBFMTYzRkY3QThCMTQ4QzEyREQ1MEMwQUQKKzoxMDFBNDAwMEFBMkUwQTgwMkEyNDY4REEyMDU4MTM2MEQyQTBEMTBGNjcKKzoxMDFBNTAwMDAwNzA5NjU1MkI2MjlFNkVCODUzMURFQkQ0MkREMjI2ODYKKzoxMDFBNjAwMDY4RDAwNDhFMjA3REU5NDUyQTYyOURDQkFGMkIyMTA0RUUKKzoxMDFBNzAwMDJDMjA2NjU4MTJGOEMwOTAyOTI0NjY4MjE0MThFQkUyRDQKKzoxMDFBODAwMDhGMjEwOEZGMDE5RjIxQzAyMEQxMEYwMDhCMTBDOUI4MDIKKzoxMDFBOTAwMDhDQTAwQzZDNTFDQ0NDOEUyNDFGRUJEMDhERTE5RTE0MEQKKzoxMDFBQTAwMDBGREQwMjlERTE4ODEwNjU4RkE5QzAyMEQxMEZEQTIwREIKKzoxMDFBQjAwMEMwQjY1ODE0NERDMDIwRDEwRjAwMDAwMDZDMTAwNjI5OEMKKzoxMDFBQzAwMDIxMDJDMEQwNzU5NzEwMkEzMjA0N0ZBNzBBOEIzNTdGNzgKKzoxMDFBRDAwMEJGMDUyRDI1MDIwREQ5MDIwOTBDNEM2NUMxODIxNkVCRkMKKzoxMDFBRTAwMEI0MUVFQkIyMjg2MjlFQzBGQTc4RjMwMjYwMDE4ODI5MjYKKzoxMDFBRjAwMEUyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMTdBMkE2MjlEQ0QKKzoxMDFCMDAwMERGQTA2NEExNzcyQjIwMEMwQ0JDMTFBNkNDMjlDMjg2QzcKKzoxMDFCMTAwMEMwOEM3OTgzMDI2MDAxNTcxOUVCQTcwOUI5MEEyOTkyOTEKKzoxMDFCMjAwMEEzNjg5MDA3ODgyMDA5ODgwQzY1ODE0MzI3QzI4NTFDMUIKKzoxMDFCMzAwMEVCQTk2NDcxM0E4OTMxMDk4QjE0MENCQjAxNkZCMTFEOUIKKzoxMDFCNDAwMDJDMjA2NjlGMTBCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNkMKKzoxMDFCNTAwMDYwMDE0MDA5RkY1MDY1RjEzQThBMTAyQUFDMTg4OTM0QjcKKzoxMDFCNjAwMEMwQzQ3Rjk3M0MxOEVCQUExQkVCQTk4RjM1OUM3MTlCRDcKKzoxMDFCNzAwMDcwOEIyMDlENzQwOEJCMDI5QjcyQzA4Mjk4NzUxQkVCMTIKKzoxMDFCODAwMEE1MEYwODQwOUI3MzBGODgxMTk4Nzc3RkY3MEIyRjIxQzMKKzoxMDFCOTAwMDAyMjg0QTAwMDhGRjAyMkYyNTAyQzBCNDYwMDAwNDAwOUEKKzoxMDFCQTAwMDAwMDBDMEIwN0U5NzA0OEYzNjJGMjUyMjdEOTcwNDg4RDEKKzoxMDFCQjAwMDM3MjgyNTIxN0M5NzM2QzBGMUMwOTAwQUY5MzgyRjNDOTAKKzoxMDFCQzAwMDIwMDkwOTQyNjQ5MDg2MTlFQjc2MThFQjc3Mjg5NjdFRjcKKzoxMDFCRDAwMDAwRjA4ODAwQTA4QzAwRjA4ODAwQTA4QzAwRjA4ODAwNDUKKzoxMDFCRTAwMEEwOEMyQTYyOUQyREU0QTIyQUFDMTgyQTY2OUQ4OTMwMTkKKzoxMDFCRjAwMDc3OTczODhGMzM4QTMyMThFQjgwMDdCRTBCMkMyMTA0N0QKKzoxMDFDMDAwMEI0QkIwNENDMTE5OEUwQzA4NDk4RTE4ODJCOURFNTlBODAKKzoxMDFDMTAwMEU2OUZFNzFBRUI3ODA5OUY0MDA2RkYxMTBGQ0MwMjBBRjYKKzoxMDFDMjAwMDg4MDI5OEUyQzFGQzBGQ0MwMjJDRTYwNEM5QjgyQzIwMzMKKzoxMDFDMzAwMDBDMUVFQjY3MENDQTExQUVDQzA2QUEwODI5QTI4NTJEOTIKKzoxMDFDNDAwMEM0Q0YwOUI5MEIyOUE2ODVDRjVDQzAyMEQxMEZDMDgxQjQKKzoxMDFDNTAwMEMwOTAwRjg5MzhDMDg3Nzk4ODAyNjNGRjcyNjNGRjY2N0UKKzoxMDFDNjAwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTM0REMwMjBEMTBGQjgKKzoxMDFDNzAwMERBMjA1ODEzREQ2M0ZGRThDMEEwNjNGRTgyREEyMEMwREIKKzoxMDFDODAwMEI2NTgxM0Q5NjNGRkQ5MDBEQjQwMkEyQzc0NTgwQzVBN0MKKzoxMDFDOTAwMEQyQTBEMTBGOEExMDJCMjEwNDU4MTI2RTFFRUI0NEMwMjMKKzoxMDFDQTAwMEQwMkQyNDY2NjNGRUIxMDA2QzEwMDZENjIwMTlFQjNGRTAKKzoxMDFDQjAwMDFFRUI0MTI4NjEwMjE3RUIzRTA4MDg0QzY1ODA1RjhBRTUKKzoxMDFDQzAwMDMwMEE2QTUxNjlBMzU3MkI3MjlFNkVCODNGMkE5MjI2M0EKKzoxMDFDRDAwMDY4QTAwNDhDNjA3QUM5MzQyQTcyOUQyQzRDRkVDQUFCNzEKKzoxMDFDRTAwMDJCNjAwQ0I2NEYwQ0JEMTFBN0REMjhEMjg2MEVCRTBBQTQKKzoxMDFDRjAwMDc4RkIyNjlDMTEyRUUyQTMyQzE2MDA2OEUwMDUyRjYyQ0IKKzoxMDFEMDAwMDAwN0VGOTE1MjJEMjg1Q0YyNTYwMDAwRDAwREE2MEMwNzMKKzoxMDFEMTAwMEI2NTgxM0I1Qzg1QTYwMDEwRjAwREE2MDU4MTNCMjY1OUYKKzoxMDFEMjAwMDUxMDZEQzQwREIzMDhEMzBEQTYwMEQ2RDUxNTgxMjI3RTIKKzoxMDFEMzAwMEQzQTA2NEEwRjM4NEExQzA1MTA0MDQ0NzYzRkY2RDAwRTUKKzoxMDFENDAwMEMwQjAyQzYwNjY4OTMxQjFDQzBDMEM0NzJDNjQ2NjZGMzYKKzoxMDFENTAwMEM2MDI3MDk2MEEyQjYxMDQ1ODEyM0VDMEIwMkI2NDY2MEUKKzoxMDFENjAwMDY1NTBCNDJBM0MxMEMwRTdEQzIwQzBEMUMwRjAwMkRGQ0YKKzoxMDFENzAwMDM4MEYwRjQyNjRGMDkwMTlFQjBBMThFQjBCMjg5NjdFOEYKKzoxMDFEODAwMDhEMTA2RERBMDUwMEEwODgwMEMwOENDMEEwODkzMDFEQzAKKzoxMDFEOTAwMEVCMUE3Nzk3NTM4ODMyOEMxMDhGMzMwMkNFMEJDMDI0MDYKKzoxMDFEQTAwMDkyRTEyMjYxMDQ5REUwMDQyMjExOEQ2QjlCRTU5RkU3ODcKKzoxMDFEQjAwMDk4RTYxRkVCMTAwOTk4NDAwNjg4MTEwODIyMDIwRkRERjMKKzoxMDFEQzAwMDAyQzE4RDlERTIwODIyMDI5MkU0QjRDMjJFNjAwQzFGNzMKKzoxMDFERDAwMEVCMDAwQ0U4MTFBNzg4MkM4Mjg1QUZFRTBDMjIwQjJCQjAKKzoxMDFERTAwMEU0Q0YyMjg2ODVEMkEwRDEwRjI4NjAwQ0QyQTA4QzExMUUKKzoxMDFERjAwMDE5RUFGODBDOEQxMUE5ODhBN0REMkVEMjg1MkI4NENGODYKKzoxMDFFMDAwMDBFQ0MwQjJDRDY4NUQxMEZDMEYwMEFERjM4N0ZFODAyNEMKKzoxMDFFMTAwMDYzRkY2QzYzRkY2MDAwMDAyQTZDNzRDMEIyREMyMEREREQKKzoxMDFFMjAwMDQwNTgxMjFDQzBCMDYzRkY2M0MwMjBEMTBGMDAwMDAwRjcKKzoxMDFFMzAwMDZDMTAwNDJDMjIxRDJBMjIxRUMwNDlEMzIwMjkzMDA2RjIKKzoxMDFFNDAwMDI0MzQ2OEMwNDA3QUMxMDVEREEwNjAwMDAyMDBDMEQwMjMKKzoxMDFFNTAwMDZFOTczOEMwOEYyRTBBODAyQjMwMTRDMDk2MjkzNDA2MTYKKzoxMDFFNjAwMDBFQkIwMjJFMzEwMjJCMzQxNDdFODAwNDI0MzUwMkRFOTgKKzoxMDFFNzAwMDQwN0FDMTBFQzhBQkRCRDBEQTMwMkMwQTAwNTgwQTc2QTMKKzoxMDFFODAwMDJFMzEwMjBFMEY0Q0M4RkVDMDIwRDEwRjY4OTVGODI4RTUKKzoxMDFFOTAwMDMxMDIwODA4NEM2NThGRUYxQUVBQzYxQ0VBQzQyQkEyNkYKKzoxMDFFQTAwMDlFQzA5QTdCOUI0NjJCQzIyNjY4QjAwNDhEMzA3QkQ5OUUKKzoxMDFFQjAwMDNCMjlBMjlEQzBFM0NCOTM5NDkwMUJFQUQ3MkQzMTA0MUMKKzoxMDFFQzAwMDlCOTYwOEREMTEwRUREMDI5RDk3OUQ5MTEyRUFENEMwMEMKKzoxMDFFRDAwMEU1MjRDNEEyMkUzNDA2MkYzMTAyMjhBMjlEMDJGRjAyNUYKKzoxMDFFRTAwMDI4OEMzMDI4QTY5RDJGMzUwMkMwMjBEMTBGREEzMEMwQjMKKzoxMDFFRjAwMEI2NTgxMzNEQzAyMEQxMEY2QzEwMDYyOTIwMDY2ODk4RjMKKzoxMDFGMDAwMDA1Mjg5Q0Y5NjU4MjVEMjkyMTAyMDkwOTRDNjU5MjEwMUEKKzoxMDFGMTAwMENENTFEQjMwREEyMDA0NEMwMjU4MTJBMUMwNTFEM0EwQkQKKzoxMDFGMjAwMEM3QUYyQTM2MEFDMEUwMTlFQUEzMURFQUE5MUZFQUEyMzAKKzoxMDFGMzAwMDhBM0ExNkVBOUZCMUFDNjRDMTM1Mjg2MjlFNkY4ODAyNjYKKzoxMDFGNDAwMDYwMDFGMTI5REMzMzI5OTIyNjY4OTAwNzhCMjAwOUJCQjgKKzoxMDFGNTAwMDBDNjVCMUUwMjc2MjlEQzA4RTY0NzFEODJCMjAwQzBDRkIKKzoxMDFGNjAwMEJDMTFBNkNDMjlDMjg2Nzk4MzAyNjAwMUQyMTlFQTkxRkMKKzoxMDFGNzAwMDA5QjkwQTI5OTJBMzk3MTA2ODkwMDgyODIyMDAwOTg4QjUKKzoxMDFGODAwMDBDNjU4MUJCMjdDMjg1NjQ3MUI1MjkyMDA2Mjk5Q0Y5OUYKKzoxMDFGOTAwMDY0OTFFQzJDMjA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NjIKKzoxMDFGQTAwMDZFQzYwMjYwMDFBMTA5Rjg1MDY1ODE5Qjg4MzY4OUY0RUMKKzoxMDFGQjAwMDA4OEMxNEFDOTkxQ0VBODEwQzk5MDIyQzIxMDQ5OTcwQUMKKzoxMDFGQzAwMDE5RUE5ODA4MDg0Nzk5NzE4OTJBMDk4ODEwMDg5OTAyMUUKKzoxMDFGRDAwMDE4RUE5NTA4OTkwMjk5NzIyODMwMTMyOTMwMTIwNDg4NUEKKzoxMDFGRTAwMDEwMDY5OTEwMDg5OTAyMjgzMDJDOUE3NDBDODgxMDA4NTEKKzoxMDFGRjAwMEM4MDIwOTg4MDI5ODczODkzNzk5NzU4ODM4OTg3NjhBNTMKKzoxMDIwMDAwMDM5QzA4MTlBNzcxQUVBODg4OTM1OTg3Qjk5NzgwOTg5NDUKKzoxMDIwMTAwMDE0MEE5OTAyOTk3QThBMzA4OTMyNzdBNzM2MThFQTc2QjMKKzoxMDIwMjAwMDhGMzM5ODdDQzA4NDk4N0Q4ODJCMkU3NjExMjk3NjEyNjgKKzoxMDIwMzAwMDJGNzYxMzE5RUE3MDBBOUY0MDA2RkYxMTA0Q0ExMTA5OEUKKzoxMDIwNDAwMDg4MDIwRkFBMDI5ODdFQzFGOTBGQUEwMjJBNzYxMEMwNTAKKzoxMDIwNTAwMEFBNjAwMDAxQzBBNkFEQkYwQ0JDMTFBNkNDMjlDMjg1RTgKKzoxMDIwNjAwMDJFRjRDRjA5QTkwQjI5QzY4NTY1NTEwN0MwMjBEMTBGRDEKKzoxMDIwNzAwMDJCMjAwQzBDQkMxMTA2Q0MwODI4QzI4NjA5QjkwQTZGQUIKKzoxMDIwODAwMDg5MDI2MDAxMkUyOTkyQTM2ODkwMDgyQTIyMDAwOUFBRDkKKzoxMDIwOTAwMDBDNjVBMTFGMkFDMjg1NjRBMTE5MjgyMDNEMDgyODQwOEIKKzoxMDIwQTAwMDY0ODA4Qzg0MzUwNDg0MTQ2NDQwODQ4NUY1NzQ1MzdGODMKKzoxMDIwQjAwMDg0MzYwNDg0MTQ2NDQwNzc3NDUzNzQyOTMwMTNDMDhDQkMKKzoxMDIwQzAwMDc5ODg2Q0MwOTAyOTI0NjcwOTA4NDc2NTgwRUQ4ODIwQ0QKKzoxMDIwRDAwMDg5RjQ4NDM1MUZFQTRCMDQ4NDE0QTQ5NDBGNDQwMjk0QjkKKzoxMDIwRTAwMEEwMTRFQTQ2MDg4ODExMDQ4ODAyOThBMTg0MzY5OEEzQUYKKzoxMDIwRjAwMDA0ODQxNEE0OTkwRjk5MDI5OUEyMTlFQTQyQURCNDI4NTQKKzoxMDIxMDAwMEMyODUyRTQ0Q0YyODhDMTAyOEM2ODUyODIxMDIyRjIwNzYKKzoxMDIxMTAwMDcwMDk4ODAyQjJGRjJGMjQ3MDI4MjUwMkMwMjBEMTBGMzkKKzoxMDIxMjAwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTIxREMwMjBEMTBGMjQKKzoxMDIxMzAwMEMwOTE2M0ZGOEZEQTIwQzBCNjU4MTJBQjYzRkZFMTAwOTUKKzoxMDIxNDAwMERBMjA1ODEyQTk2M0ZGRDg4QTEwMkIyMTA0NTgxMTQxQjQKKzoxMDIxNTAwMDFERUEyMDFGRUExOTJCMjAwQ0MwRTAyRTI0NjY4QTNBQzMKKzoxMDIxNjAwMDYzRkU0ODAwMDBEQTIwREIzMERDNDBERDUwNTgxMzI0RTkKKzoxMDIxNzAwMEQyQTBEMTBGMkEyQzc0REI0MDU4MEIxRkQyQTBEMTBGNTQKKzoxMDIxODAwMDI5MjEyM0MwODg3OTgzMDI2M0ZFMjAyQTEyMDAyQzIwOTMKKzoxMDIxOTAwMDY2MkIyMTA0MkNDQzAxMEMwQzQ3MkMyNDY2NTgxMTJERTUKKzoxMDIxQTAwMDFERUEwQzFGRUEwNTJCMjAwQ0MwRTAyRTI0NjY4QTNBOUIKKzoxMDIxQjAwMDYzRkRGODAwREEyMDU4MTI4QzYzRkY2NERBMjA1QkZGQkQKKzoxMDIxQzAwMDFDRDJBMEQxMEYwMDAwMDA2QzEwMDg5NTE1QzA2MUMxOTEKKzoxMDIxRDAwMEIwRDk0MDJBMjAzREMwNDAwQkFBMDEwQTY0MzgyQTIwMDkKKzoxMDIxRTAwMDA2MjkxNjA2NjhBODA1MkNBQ0Y5NjVDMzNCMURFOUYyNjMKKzoxMDIxRjAwMDY0NDAwNTJGMTIwNTY0RjI5QzI2MjEwMjFFRTlFRTA2QkEKKzoxMDIyMDAwMDA2NEM2NTYyRTMxNUU5RUE2NDQwRDk4QTM1MjkzMDAzNTIKKzoxMDIyMTAwMDlBMTQwQTk5MEM2NDkwQ0MyQzIwMEM4QjE0OUMxMTBDRjEKKzoxMDIyMjAwMENDMTFBNUNDOUMxMjJDQzI4NkI0QkI3Q0IzMDI2MDAyM0MKKzoxMDIyMzAwMEQzOEYxMTBFRkUwQTJFRTJBMzY4RTAwOTg2MjBEMzBGODkKKzoxMDIyNDAwMDBFNjYwQzY1NjJCRTg4MTIyODgyODU2NDgyQjY4OTE0ODcKKzoxMDIyNTAwMDY0OTA1RURBODBEOTMwOEMyMDFFRTlFODFGRTlFOTFEMjAKKzoxMDIyNjAwMEU5RDY4QjE0OERENEQ0QjA3RkI3MThCODhBMjkzQzEwMjYKKzoxMDIyNzAwMDg1MzYwOEM2MTEwRTY2MDI5NjgxMDU4NTE0QTVENTBGMTAKKzoxMDIyODAwMDU1MDI5NTgwMDQxODE0NkQ4OTI3ODg5NjA4Q0IxMTA4OEIKKzoxMDIyOTAwMDg4MTQwRUJCMDJBOEQ4Mjk5QzIwMEY4ODAyOUJBMTk4MDUKKzoxMDIyQTAwMEEwODg5MjlCQTMwODg4MTRBOEQ4MEY4ODAyOThBMjJBMTUKKzoxMDIyQjAwMEFDMTAxOUU5RDRDMEMwOEYxNDFFRTlDNTg2MTI4RDExNjcKKzoxMDIyQzAwMDI4NjI4NUFFREQwOEZGMEIyQ0Q0Q0YyODIxMDIyRjY2QjMKKzoxMDIyRDAwMDg1OEIzNTJBMjA3MDA5ODgwMkFCQUEyODI1MDIyQTI0N0EKKzoxMDIyRTAwMDcwQzAyMEQxMEYyOTUyOUUxOEU5QjE2Rjk4MDI2MDAyODgKKzoxMDIyRjAwMDA4Mjg4MjI2Njg4MDA4MjkyMjAwMDg5OTBDNjU5MUY5MkYKKzoxMDIzMDAwMDJBNTI5REMxQ0E5QTEzNjRBMUVGMkIyMDBDMjYyMDA2RTUKKzoxMDIzMTAwMDBDQjgxMUE1ODgyRDgyODYwRUJFMEE3REMzMDI2MDAyMEMKKzoxMDIzMjAwMDAyMkVFMkEzNjhFMDA4MkYyMjAwMEVGRjBDNjVGMUYzRjUKKzoxMDIzMzAwMDI4ODI4NURFODA2NDgxRkY5ODEwMjY2Q0Y5NjQ2MUZGMzUKKzoxMDIzNDAwMDJDMjA2Njg4MzFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNUEKKzoxMDIzNTAwMDYwMDFCQzA4RkQ1MDY1RDFCNjE3RTlCNDE5RTk5ODFBQjcKKzoxMDIzNjAwMEU5OUYyQzIxMDQ4QjJEMjgzMDEwMkYyMTFEMEM4ODEwNjMKKzoxMDIzNzAwMDBCRkIwOTBDODgwMjBBODgwMjA5QkIwMjY0NDE1Mjg5REUKKzoxMDIzODAwMDEwQzA0RDlCOTA5NzkxOTg5MjhEMzVEOUUwNjREMDZDOTgKKzoxMDIzOTAwMEQ3MzBEQkQwRDgzMDdGRDcxMzI3M0MxMEJDRTkyNjMyQUEKKzoxMDIzQTAwMDE2OEMzOTk2RTY5Q0U3OEEzN0I0Mzg5QUU4MEIxMzE0RjIKKzoxMDIzQjAwMDY0MzA0OTJBODIxNjg2Nzk5QTk2OTY5NzhDNzc4QTdEMTgKKzoxMDIzQzAwMDlDOTgyQjgyMTcyQzdDMjA5QTlBMkE5QzE4OUI5OTg2ODEKKzoxMDIzRDAwMDdCQjAzQkI4ODk2REI5MjE4QkM5OTZBNTI2OTIxNjJBODgKKzoxMDIzRTAwMEFDMThCODk5OUJBMTk2QTA4QkM3ODZDRDlCQTIyQjkyQzcKKzoxMDIzRjAwMDE1OTZBNDlCQTM4NkNCMkNDQzIwMjZBNjA1QzAzNDZCQjcKKzoxMDI0MDAwMEQ0MjAwRDNCMEMwREQ4MDkwRTg4MEE3RkI3MDVDMDkwNkIKKzoxMDI0MTAwMDk5ODhCQzg4QzA5MDBCMUExMjZEQUEwNjk5ODg5OThCNkUKKzoxMDI0MjAwMDI4OEMxOEMwRDAxQkU5ODMxQ0U5ODIxNkU5NzhCMUZGMUIKKzoxMDI0MzAwMDJBMjExQzIzRTYxMzBGMEY0RjI2RTYxMjJGMjUxRDdGOUUKKzoxMDI0NDAwMEE5MDZDMEYwQzA4MDI4MjUxRDA1RjYxMTFBRTk3MThGNzQKKzoxMDI0NTAwMDIwMkJFNjE1MkNFNjE2MkRFNjE3MjZFNjE4MEFGQTAyQkEKKzoxMDI0NjAwMDJBRTYxNDI5MjAwNjI5OUNGOTY0OTBGRjI5MjAwQzhENjYKKzoxMDI0NzAwMDE1QzA4MDFBRTk1NzBDOUMxMUFBOTlBNUNDREEyMDJCMUIKKzoxMDI0ODAwMEMyODUyODk0Q0YwQjRCMEIyQkM2ODVDMEIwOEMxNjU4MzkKKzoxMDI0OTAwMDExMTREMkEwRDEwRjhBMzU2RkE1NDhEODMwOEJENTZERDUKKzoxMDI0QTAwMEE5MEM4QTg2MEE4QTE0Q0JBOTdBQjMzNzI4OEMxMEMwNjMKKzoxMDI0QjAwMDgwMjgyNDY3MDgwQjQ3NjVCMTEyREEyMERCMzAyQzEyMjQKKzoxMDI0QzAwMDA2NTgxMTM3RDNBMEMwQzFDMEQwMkRBNDAzOUMxNTYzRkEKKzoxMDI0RDAwMEZEMjY4NjM2NjQ2MTBDODkxMEMwNEQ5QjkwOTc5MTk4QkIKKzoxMDI0RTAwMDkyNjNGRUE0QzA4MTYzRkZDNzhBMTVDQ0E3REEyMERCMDQKKzoxMDI0RjAwMDMwOEMxNjU4MTEyQkMwMjBEMTBGREEyMEMwQjY1ODExREQKKzoxMDI1MDAwMEJBNjNGRkU0MDBEQTIwOEIxMTU4MTFCNzYzRkZEOTAwREEKKzoxMDI1MTAwMDlFMTc4QTEzMkIyMTA0NTgxMDRGOEUxN0MwQjAyQjI0RkUKKzoxMDI1MjAwMDY2NjNGRTM0QzA4MDYzRkUwOURBMjBEQjMwOEMxNkREODIKKzoxMDI1MzAwMDUwNTgxMjMzRDJBMEQxMEZEQTIwNTgxMUFCNjNGRkE4NDQKKzoxMDI1NDAwMDJEMjEyM0MwQzg3REMzMDI2M0ZFMEQ4QTEzMkIyMTA0RjUKKzoxMDI1NTAwMDJDMjA2Njk4MTdCMUNDMEMwQzQ3MkMyNDY2NTgxMDNERTMKKzoxMDI1NjAwMDhFMTdDMEQwMkQyNDY2NjNGREVFMDAwMDI2MjEyM0IwMTcKKzoxMDI1NzAwMDY2MDYwNjRGMjYyNTIzNjU2RUYxMjgyMDZBN0Y4NzA1QUIKKzoxMDI1ODAwMDA4Mjk0MTY0OTBBNUMwRDAxQkU5MUMxOUU5MkIyNjIwMUQKKzoxMDI1OTAwMDA3MjNFNjFCQjE2NjA5RkEwMjJCRTYxQTI4MjAwQTJENEEKKzoxMDI1QTAwMEU2MUQyQUU2MUUwOTg4MDIyOEU2MUM4ODI2MDYwNjQ3M0MKKzoxMDI1QjAwMDI4RTYyMDJCMjIwODI2RTUzRTJCRTYyMTJEMjQwNzJDOTkKKzoxMDI1QzAwMDIwMDYyQTIwNjQ2OEMzNDdCNDQ0NjNGRTlFREIzMERBRTkKKzoxMDI1RDAwMDIwOEQxNUMwQ0UyRTBBODAyQzI0Njg4QzE2NTgxMDdCQjYKKzoxMDI1RTAwMEQyQTBEMTBGOEUxMDJBMzIxNjE2RThGMzBBMkExNDg2Q0EKKzoxMDI1RjAwMDY2MkJFNjEyOTdFMTI3RTYxMzI4RTYxNEFBNjYwOTY2MTkKKzoxMDI2MDAwMDAyOTZFMDJFRUM0ODY5RUQ1MEMxNDY2M0ZEN0EwMDAwNjkKKzoxMDI2MTAwMDY0QUZCNDE5RThFOTI4MjAxNjg5OTIwQTg4MEMwMDkxNjEKKzoxMDI2MjAwMDA0MDA4ODFBQThCODk4Mjk2M0ZGOUMwMDJCMjEwNDZFMjcKKzoxMDI2MzAwMEI4MUUyQzIwNjZCOENDMEMwQzQ3MkMyNDY2QzlDMDlFNTIKKzoxMDI2NDAwMDE3OEExMzU4MTAwNDhFMTdDMDM0OEYyMEMwRDAyRDI0NDEKKzoxMDI2NTAwMDY2QzA2ODI2MjQwNjYzRkYyQzAwOEQzNUMwODA2NEQwRDgKKzoxMDI2NjAwMDRBRDlFMERDMzBEQkUwREYzMDFBRThGNEIxODhCNEZGQUYKKzoxMDI2NzAwMDE3RThGNDg2QzkyNDlERkY4REM4MkNDQzEwMkQ0NjMwNTgKKzoxMDI2ODAwMDA3NjcwMTJENDYzMjBBNjYwMTFERThFRTI2NDYzMUFEODgKKzoxMDI2OTAwMDZEMkQ0NjMzMjZGMjE1OTdCNzk2QjY4NEMzQkNCQjk0MEUKKzoxMDI2QTAwMEI1OEQzNTI5OUMxMDdEODNDMjJGMjExREMxNDY2M0ZENDgKKzoxMDI2QjAwMDRCMDAwMDAwNkMxMDA2MjkyMDA2Mjg5Q0Y4NjU4MkMzOTgKKzoxMDI2QzAwMDI5MjEwMjJCMjAwQzA5MDk0QzY1OTBFMTE2RThCOTBDNzAKKzoxMDI2RDAwMEJBMTFBNkFBMkRBMjg2MkMwQTEyN0RDMzAyNjAwMjkwMEUKKzoxMDI2RTAwMDE5RThCNTA5QjkwQTI5OTJBMzY4OTAwNzhDMjAwOUNDOEEKKzoxMDI2RjAwMDBDNjVDMjdDMjlBMjg1NjQ5Mjc2MkQ2MjlFMUFFOEFCOTUKKzoxMDI3MDAwMDZGRDgwMjYwMDI3MjJBQTIyNjI5MTYwMTY4QTAwODJCM0YKKzoxMDI3MTAwMDIyMDAwQUJCMEM2NUIyNjAyOTYyOURDMThDNjQ5MjU4OEMKKzoxMDI3MjAwMDJBMjEyMDBBODA2MDk5MTAyQzIwM0NDN0VGMDAwRjNFMjAKKzoxMDI3MzAwMDAxMEIzRUIxQkQwRkRCMzkwQkJCMDk4RjI2MERCRDExNUYKKzoxMDI3NDAwMDJEREMxQzBEMEQ0MTBFREQwMzhFMjdCMUREMEQwRDQxN0QKKzoxMDI3NTAwMDBGRUUwQzBEQkIwQjJCQkMxQzBCQjcwMjdFQzcxQzJDNDkKKzoxMDI3NjAwMDIxMjU3QkNCMTYyRDFBRkMwQ0JBMEMwREExNjAwMDA5OUIKKzoxMDI3NzAwMDNFMDEwNzNFQjE3ODA5ODczOTBCNzcwQTc3RUIwMjYwOTMKKzoxMDI3ODAwMDAyMEEyQzIxMjMyODIxMjFCMUNDMEMwQzRGMkMyNTIzMEIKKzoxMDI3OTAwMDdDOEIyOUIwQ0QyRDI1MjNDODU1REEyMERCMzA1ODBGOEUKKzoxMDI3QTAwMEZBMjkyMTAyQ0M5NkMwRTgwRTlFMDIyRTI1MDJDQzU3QjMKKzoxMDI3QjAwMERBMjBEQjMwREM0MDU4MTA3QUMwMjBEMTBGMkMyMDY2QTQKKzoxMDI3QzAwMDg5MzFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyNjAwMUQzNTMKKzoxMDI3RDAwMDA5RkQ1MDY1RDFDRDJGMEEwMTJFMzAxMTI5MjIxNDY0MzQKKzoxMDI3RTAwMEUwMTEyODIyMUIwOTBDNDQwMEMxMDQwMEZBMUEwQTg4Q0YKKzoxMDI3RjAwMDAyMjgyNjFCMkUzMDEwQzBBMEMwQjA4ODMwMUNFODZFMDYKKzoxMDI4MDAwMDk0MTI5NTEzQzA0MTI1MjAzQzJDQzAyMjA4OEQxNDc3Q0EKKzoxMDI4MTAwMDg3MDUyRjBBMDEwQ0ZBMzhDMEYyQzA4NDA4NTgwMTBGNEUKKzoxMDI4MjAwMDVGMDEwRjRCMzgwNTM1NDAwN0JCMTBDMEYwMDg0RjM4MkIKKzoxMDI4MzAwMDA4RkYxMDBGQkIwMjI4RUNGRUMwRjAwODRGMzg4NDJCQjUKKzoxMDI4NDAwMDBCQTgxMDBBRkYxMDJBMjEyMDBGODgwMjBCODgwMjA4MEIKKzoxMDI4NTAwMDQ0MDIxOEU4N0Q4RjExMDg0NDAyMjgyMTI1MEEyQTE0MTEKKzoxMDI4NjAwMDA4MjgxNDA0ODgxMTBBODgwMjJBMjEwNDk0RjA4QjIwNzUKKzoxMDI4NzAwMDA0RTQxMDA4QkIxMTA0QkIwMkMwNEEwNEJCMDI5QkYxNzQKKzoxMDI4ODAwMDg0MkEwOEFCMTEwQkVCMDI5NEY0MEE1NDExMEI0NDAyOTYKKzoxMDI4OTAwMDA1NTUxMDBEMUI0MDk0RjcwN0JCMTAwQjU1MDIwODU1NEEKKzoxMDI4QTAwMDAyQzA4MTk1RjY4NDMzQzA1MDk0RjNCMTk0OEIzMjk1NzUKKzoxMDI4QjAwMEY4OThGOTlCRjJDMDgwQzFCQzI0MjYxNDk4RkI5QkY1QzQKKzoxMDI4QzAwMDk5RkE4NTM4OTVGQzg0M0E5NEZEOEIzQjlCRkU4ODM5QjgKKzoxMDI4RDAwMDk4RkY4NTM1MjVGNjEwODQzNjg1MTMyNEY2MTE4QjM3M0QKKzoxMDI4RTAwMDg0MTIyQkY2MTJDMEIwNjRDMDgxODkzMDc3OTc0NjhENzAKKzoxMDI4RjAwMDMyODgzMzJFMzAxMDhGMTExQ0U4NDAwOTk5NDAwNjk5MTgKKzoxMDI5MDAwMDExMkNGNjE0QzBDNDJDRjYxNThDMkIyREY2MUEyOEY2QjMKKzoxMDI5MTAwMDFCMkJGNjE5MDRBODExMDk4ODAyMDhFRTAyMTlFODM1RTQKKzoxMDI5MjAwMEMxODAwOEVFMDIwOUM5MDIyOUY2MTYyRUY2MThDMDlFQ0IKKzoxMDI5MzAwMDYwMDAwNDAwMDAwMEMwOUEyRjIwMEMxOEU4MjUwQ0ZFNEYKKzoxMDI5NDAwMDExQThGRkE2RUUyREUyODUyQkY0Q0YwRDlEMEIyREU2RjEKKzoxMDI5NTAwMDg1Qzg3RjhBMjY4OTI5QTdBQTlBMjYwQTk5MEMwOTA5NzcKKzoxMDI5NjAwMDQ4MjkyNTI1NjU1MDRDQzAyMEQxMEYwMEMwOUE2M0ZGMkYKKzoxMDI5NzAwMEM2REEyMDU4MTA5RDYzRkUzNERBMjBDMEI2NTgxMDlBOEIKKzoxMDI5ODAwMDYzRkUyQTAwNjg5NzM4QzAyMEQxMEYwMDAwREEyMERCRjAKKzoxMDI5OTAwMDcwNTgxMDU3QzBCMEMwQzEwQUNBMzkwQUNCMzg2NUJEREIKKzoxMDI5QTAwMEUwNjNGRTA5OEExMDJCMjEwNDU4MEYyQUMwQjAyQjI0QTMKKzoxMDI5QjAwMDY2NjNGRTIxREI0MDJBMkM3NDU4MDkwRkQyQTBEMTBGODgKKzoxMDI5QzAwMERBMjA1ODBGMkY2M0ZDRjc2QzEwMDRDMDIwRDEwRjAwRTEKKzoxMDI5RDAwMDZDMTAwNDI5MEE4MDFFRTgxRDFGRTgxRDFDRTdGNTBDNzkKKzoxMDI5RTAwMDJCMTFBQ0JCMkMyQ0ZDMkRCMjg1MEZDQzAyOUVEMTlDQTQKKzoxMDI5RjAwMEQwQzA1MUMwNzAxM0U4MTkxNEU4MTgxOEU4MTYyQUIyQUMKKzoxMDJBMDAwMDg1QTgyODA0MjQwQTIzNDY5MUE5ODZCOEFBMkFCNjg1NEYKKzoxMDJBMTAwMEE5ODgyNzg0OUYyNTY0OUZEMTBGMDAwMDZDMTAwQUQ2RDcKKzoxMDJBMjAwMDMwMjgzMDEwMjkyMDA2Mjg4Q0Y5NjQ4MjlCNjg5ODBCODYKKzoxMDJBMzAwMDJBOUNGOTY1QTFCMjAyMkEwMjU4MEYxMTg5MzcxQkU3QjcKKzoxMDJBNDAwMERFQzg5MTY0NTIwRTJBMjEwMjBBMEM0QzY1QzI1ODhERDAKKzoxMDJBNTAwMDMwMTlFN0Q3NzRENzA1MkUyMTIzNjVFMjlFMkY5MjlFNjkKKzoxMDJBNjAwMDFBRTdEMzZGRjgwMjYwMDI1MzJBQTIyNjY4QTAwODJDNDYKKzoxMDJBNzAwMDIyMDAwQUNDMEM2NUMyNDQyQTkyOUQ2NEEyM0U5QTE1OUIKKzoxMDJBODAwMDFGRTdDRDhENjdDMUU2NjREMDBFMkI2MjA2MThFN0NBM0EKKzoxMDJBOTAwMDY0QjAwNTI4ODAyMTdCOEI0MjJCMjAwQzE4RTdDNTBDRTUKKzoxMDJBQTAwMEJDMTFBOENDMjlDMjg2NzlFQjQ1MEZCRTBBMkVFMkEzNDEKKzoxMDJBQjAwMDY4RTAwNDhGMjA3RUY5MzcyQ0MyODU5QzE4NjRDMjMzRUQKKzoxMDJBQzAwMDJCMjEyRjg3NjYwQjdCMzYwQjc5MEM2RjlEMjY2RUQyRTAKKzoxMDJBRDAwMDQ2MkMyMDNEN0JDNzQwQ0U1NTYwMDAxRTJBMjAwQ0MxRUQKKzoxMDJBRTAwMEIyOEMyMDU4MTA3NTlBMTg2NEEyNDU4RDY3NjNGRkNGODkKKzoxMDJBRjAwMEMwQzA2M0ZGQzVEN0IwNjNGRkQzMDBDMEUwNjAwMDAyNzEKKzoxMDJCMDAwMDJFNjAwMzBFREIwQzZFQjIwRURDNzAwQ0VBMTFBQTZBQUEKKzoxMDJCMTAwMDJBQUMyMDU4MDE5OUQ3QTBEQTIwREI3MEMxQzgyRDIxM0EKKzoxMDJCMjAwMDIwNTgxMDFCOEMyNjhCMjc5QTE2MENCQjBDN0FCMzM0QkEKKzoxMDJCMzAwMDhGMTg4OTYzOTlGMzg4NjI5OEYyOEU2NTlFRjgyRDYwRUMKKzoxMDJCNDAwMDEwOEExODlEMTc2OEQ3MjlDMEQwOURBOTJDMjIxODJCNTAKKzoxMDJCNTAwMDIyMTM5Q0FCOUJBQTk3QTU4RTY2N0U3MzAyNjAwMDk3OUEKKzoxMDJCNjAwMENGNTg2MDAwMUZEQTIwOEIxNjU4MEZFMTY1QTEzODYzM0IKKzoxMDJCNzAwMEZGQkRDMDgxQzA5MDhGMThDMEEyOUFGOTk5RkI5OEZBNDYKKzoxMDJCODAwMDk3RjU2M0ZGRDJEQjMwREEyMERDNDA1ODBGODVDMDUxNjcKKzoxMDJCOTAwMEQ2QTBDMEMwMkJBMDEwMkNBNDAzOUIxNzJDMTIwODAyOTcKKzoxMDJCQTAwMDJBMDIwNjZCMDJERjcwMkQ2MDAzOEUxNzlEMTQ5RTEwQTMKKzoxMDJCQjAwMDBDREQxMUMwRTBBRDZEMkREQzIwNTgwMTE4OEMxNDhCOUMKKzoxMDJCQzAwMDE2QUNBQzJDNjQwMzhBMjY4OTI5QUJBQTBBOTkwQzlBMDQKKzoxMDJCRDAwMDI2ODg2NjA5MDk0ODI5MjUyNTA3ODgwQzk4NjYyRjIyMkEKKzoxMDJCRTAwMDE4QTdGRjJGMjYxODYzRkU5NkRBMjBEQjMwREM0MEREQzUKKzoxMDJCRjAwMDUwNTgxMDgzRDJBMEQxMEZDMDMwMkMyMDY2ODk2MUIxMEIKKzoxMDJDMDAwMENDMEMwQzQ3MkMyNDY2NkVDNjAyNjAwMEQyQzAzMDA5ODIKKzoxMDJDMTAwMEZENTA2NUQwQ0E4RTY3NjRFMDY5NjQ3MDY2REI2MDhDQzUKKzoxMDJDMjAwMDE4REY3MERBMjAyRDYwMDM4RTE3MENERDExOUUxMEFEQjkKKzoxMDJDMzAwMDZEMkREQzIwMUVFNzg0NTgwMEY5MjMyNjE4REEyMDhCM0UKKzoxMDJDNDAwMDE2REM0MDJGMjIxM0RENTBCMUZGMkYyNjEzNTgwRjI0MUUKKzoxMDJDNTAwMEQyQTBEMTBGMDAyODIwM0QwODQ4NDA2NThERTc2Rjk1MzAKKzoxMDJDNjAwMDNFREEzMDhEQjU2RDk5MEM4Q0E4MEM4QzE0Q0FDRjdDRDMKKzoxMDJDNzAwMEQzMkQyQUFDMTBDMDkwMjkyNDY3MDkwRDQ3NjREREM1MDcKKzoxMDJDODAwMDYwMDA5MjAwMkMxMjA4MDY2QjAyMkQ2QzIwMDc3RjAyNTgKKzoxMDJDOTAwMDhFMTdEQTIwOUUxMDFFRTc2QjU4MDA3RDYzRkY5QTAwQTYKKzoxMDJDQTAwMEMwOTE2M0ZGRDEwMDAwMDA2NTUwODFEQTIwREI2MERDNTkKKzoxMDJDQjAwMDQwNTgwRjNCQzAyMEMwRjAyRkE0MDNEMTBGREEyMEMwMzIKKzoxMDJDQzAwMEI2NTgwRkM5NjNGRkUwMDAwMDZGOTUwMjYzRkQ2Q0RBMzAKKzoxMDJDRDAwMDIwREIzMERDNDBERDUwQzRFMDU4MEVCQ0QyQTBEMTBGNjgKKzoxMDJDRTAwMDhBMTUyQjIxMDQ1ODBFNUIyMzI0NjYyODYwMTA5ODE3NDAKKzoxMDJDRjAwMDYzRkYyMTAwREEyMDU4MEZCQzYzRkZBQkM4NThEQjMwRkMKKzoxMDJEMDAwMERBMjA1ODBFQTEyQTIxMDI2NUFGOUNDMDk0MDlBOTAyQkQKKzoxMDJEMTAwMDI5MjUwMjYzRkY5MURCMzBEQzQwREQ1MEMwQTMyRTBBODEKKzoxMDJEMjAwMDgwMkEyNDY4REEyMDU4MEVBOUQyQTBEMTBGQzAyMEQxNjEKKzoxMDJEMzAwMDBGREEyMDJCMjAwQzU4MEZDNTYzRkY2QjZDMTAwNDI4OTIKKzoxMDJENDAwMDIwMDZDMDYyMjg4Q0Y4NjU4MTI1QzA1MEM3REYyQjIyODEKKzoxMDJENTAwMDFCQzBFMTJBMjA2QjI5MjEyMzAwQTEwNEIwOTkyOTI1NTkKKzoxMDJENjAwMDIzQjFBQTAwRUMxQTBCQzQwMTBBMEE0NDJBMjQ2QjA0RkEKKzoxMDJENzAwMEU0MzkwRENDMDMwQ0JCMDEyQjI2MUI2NDQwNjkyOTIwRDAKKzoxMDJEODAwMDBDMUJFNzBCMEM5QTExMEJBQTA4MkZBMjg2MUJFNzA5NTQKKzoxMDJEOTAwMDZGRjkwMjYwMDBCNjBCOUIwQTJCQjJBMzY4QjAwODJDMzcKKzoxMDJEQTAwMDIyMDAwQkNDMEM2NUMwQTQyQkEyODUxREU3MkQ2NEIwQkUKKzoxMDJEQjAwMDlCOEMyQjI0MjEwNDBEQ0MwMjlDQjA4ODIwQzBDNTA4MUMKKzoxMDJEQzAwMDg4MTEwQzg4MDI5OEIxODgyQTA4NDQxMTk4QjQ4RjM0NkQKKzoxMDJERDAwMDk0Qjc5RkI1QzA0MDFFRTZGRTJEQTI4NTBFOUUwODI1MjUKKzoxMDJERTAwMEU0Q0YyRERDMjgyREE2ODUyOTIxMDIwOTA5NEM2ODk0MDEKKzoxMDJERjAwMDFBNjg5ODIwQzk0MDJBMjEwMjY1QTAwQjJBMjIxRTJCOUUKKzoxMDJFMDAwMDIyMUQ3QUIxMDI2NUEwNzlDMDIwRDEwRjJDMjEyMzY1NDMKKzoxMDJFMTAwMENGREU2MDAwMDgyRTIxMjEyRDIxMjM3RURCRDUyQjIyNDEKKzoxMDJFMjAwMDFFMkYyMjFEMjUyNTAyN0JGOTAxQzBCMDY0QkZDNDEzRUIKKzoxMDJFMzAwMEU2REYyQ0IwMDcyOEIwMDBEQTIwMDM4ODBBMjg4MjRDOEQKKzoxMDJFNDAwMEMwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRkE2MkEyQzc0MUUKKzoxMDJFNTAwMEMwQjAyQzBBMDI1ODBEOTUxQ0U3MDM5Q0EwOEIyMDA4REIKKzoxMDJFNjAwMEJCMTEwNkJCMDI5QkExODkzNDk5QTI2M0ZGNzkwMDAwQzQKKzoxMDJFNzAwMDI2MjQ2OERBMjBEQjMwREM0MERENTA1ODBGRTFEMkEwOTgKKzoxMDJFODAwMEQxMEZEQTIwMkIyMDBDNTgwRjU4QzAyMEQxMEYwMDAwOTIKKzoxMDJFOTAwMDZDMTAwNjA3M0QxNEMwODBEQzMwREI0MERBMjBDMDQ3RjAKKzoxMDJFQTAwMEMwMjEyM0JDMzAwMzI4MzgwODA4NDI3NzQwMDFCMUREMzcKKzoxMDJFQjAwMDY0ODE1QTFFRTZCQjE5RTZCQzI5RTY3RUQzMEY2RERBQTMKKzoxMDJFQzAwMDA1MDA1MDg4MDAzMDhDQzBFMEMwMjAyNUEwM0MxNEU2RUUKKzoxMDJFRDAwMEJBQjZEMzhGQzBDMEQwMEY4NzE0MjQ0MDIyMEY4OTQwQzgKKzoxMDJFRTAwMDk0MTA3N0Y3MDRDMDgxMDQ4MjM4QzBGMTBCMjgxMEMwMTkKKzoxMDJFRjAwMDQ0QzAyMjA0NTQwMTA0RkQzODAyNTIwMTAyRkUzODA4ODUKKzoxMDJGMDAwMEREMTA4MjFDMDdFRTEwMEU2RTAyMEVERDAyMjQyQ0ZFNzgKKzoxMDJGMTAwMEMwRTAwNEZFMzgwQUVFMTAwRTg4MDIwRDg4MDI4REFCNjgKKzoxMDJGMjAwMDFFRTZBQTA4RDgwMjBFODgwMjk4QjBDMEU4MDQyODEwNEQKKzoxMDJGMzAwMDBFNUUwMTg0QTAyNUExMjUwODQ0MTEwODQ0MDIwNTI1NDAKKzoxMDJGNDAwMDE0MDQ1NTExMDQzNDAyQzA4MTBFOEUzOTk0QjE4RkFBMzUKKzoxMDJGNTAwMDg0MTA5RkI0NzU2NjBDMjZBMTFGQzBGMjA2MjYxNDYwNkIKKzoxMDJGNjAwMDAwMDkwMDAwMjZBMTIwQzBGMjA2MjYxNDA1NjUwMjBGMDQKKzoxMDJGNzAwMDc3MDEwNzg3MzkwNUU2MTAwNzc4MTAwODY2MDIwNjU1QkQKKzoxMDJGODAwMDAyOTVCNjI1QTEwNDBBRTYxMTA4NTgxMTA4MjgwMjA4N0UKKzoxMDJGOTAwMDY2MDI5NkI3QzA2MDY0NDA1NjY0OTA1MzA2N0UxMUMwQzYKKzoxMDJGQTAwMEY0ODlDMjg4QzMwQjM0MEI5NjQ1OTg0Nzk5NDYxOEU2QjYKKzoxMDJGQjAwMDkxOUY0MTA0NTkxMTBFOTkwMjFGRTY4RjAyMEU0NzA4OTYKKzoxMDJGQzAwMEQ4MDI5ODQyMEU5OTAyOUY0MEMxRTAwRTk5MDI5OTQ0OUUKKzoxMDJGRDAwMDJGQTAwQ0I0MzgwQ0Y5MTExNEU2N0UxRUU2NzVBNEZGODAKKzoxMDJGRTAwMEFFOTkyRTkyODUyNkY0Q0YwRTg4MEIyODk2ODVEMTBGQTgKKzoxMDJGRjAwMDJCQTAwQzFGRTY2RjFDRTY3NjBDQkUxMUFDQkJBRkVFMkYKKzoxMDMwMDAwMDJERTI4NTI2QjRDRjBEM0QwQjJERTY4NUQxMEZDMDgwNzYKKzoxMDMwMTAwMDA1MjgzODc4NDgwMjYzRkVBMjYzRkU5NjZDMTAwNkMwNEQKKzoxMDMwMjAwMEMwNjU3MEYxODgzMEMwMzAwODg3MTQ3Nzg3MTJDMEIwNEYKKzoxMDMwMzAwMEMwQTYxOUU2NjEyOTkwMjJDMDMwQ0M5N0MwMzE2MDAwNEIKKzoxMDMwNDAwMDAzQzBCMEMwQTZDMEUwQzA5MUMwRDRDMDgyMjUyMDNDNUYKKzoxMDMwNTAwMDBCM0YxMDk3MTI4MzFDQzA3MDA4NTgwMTBENUQwMTA4Q0EKKzoxMDMwNjAwMDk3MzhDMDgwMEI5ODM4MDc3NzEwMDQ4ODEwMDg2ODAyREEKKzoxMDMwNzAwMDA4NzcwMkMwODAwRDk4MzgyRDNDRkUwODg4MTAwRDlFMDAKKzoxMDMwODAwMDM4OEQyQjBBRUUxMDA4RUUwMjA3RUUwMjBDQjgxMDBGNzYKKzoxMDMwOTAwMEREMDIwNTNCNDAwRUREMDI5RDQwODkyMDA0M0QxMDA4MDUKKzoxMDMwQTAwMDk5MTEwRDk5MDIyRDIxMDQwOUE5MDIwOEREMTE5OTQxRjgKKzoxMDMwQjAwMDg3MkEwNUI5MTAwRDNEMDIwQUJCMTEwREJCMDIwODc3MjYKKzoxMDMwQzAwMDAyOTc0NDI4MjEyNTg3MTIwODI4MTQwNDg4MTEwNzFFMTYKKzoxMDMwRDAwMDQwMDdFRTEwMEU5OTAyNzU2NjA5MjYyMTFGMDYyNjE0NzgKKzoxMDMwRTAwMDYwMDAwNjAwMjYyMTIwMDYyNjE0MDg2ODAyOUI0NzA5NzYKKzoxMDMwRjAwMDg4MDI5ODQ2MjkyMDBDRDJDMEMwODAwQzlFMTExQkU2ODUKKzoxMDMxMDAwMDM0MUZFNjJCQUI5OUFGRUUyREUyODUyODk0Q0YwREFEQTEKKzoxMDMxMTAwMDBCMkRFNjg1RDEwRkRENDBDMEE2QzBCMDhFNTFDQUUwQjAKKzoxMDMxMjAwMEIyQUFCMUJCMkREQzEwOEY1MDBFNzgzNjk4MTAwODc3RkMKKzoxMDMxMzAwMDBDOUZEODk4RDk4OTUzOEY1Mjk5MTE5OURCOUZEQTdFQzkKKzoxMDMxNDAwMDgzMDlCMUNDMjU1QzEwQzk3NzYzRkZDRjg4MTA4RDExM0UKKzoxMDMxNTAwMDA4RTcwQzk3NTFBRDhERDdGMDc4REIwMUIxRjc5RDUzOUYKKzoxMDMxNjAwMDk3NTI4ODMwQzAzMDA4ODcxNDA4ODg0MDY0OEVENTY1MkYKKzoxMDMxNzAwMEJFQzk2M0ZFQkMwMDAwMDA2QzEwMDRENzIwQjAzQTg4QzIKKzoxMDMxODAwMDIwQzAzMDgyMjFDQUEwNzQyQjFFMjk3MjA0NkQwODBGNDIKKzoxMDMxOTAwMEM5ODBDOTkxODU3NUIxMzNBMjUyN0EzQjBCNzQyQjA4NTMKKzoxMDMxQTAwMDYzRkZFOTAwNjQ5RkVDRDEwRkQyNDBEMTBGMDAwMDAwMTMKKzoxMDMxQjAwMDZDMTAwOEQ2MzBDMDcwOTUxNURBNDA4RTM5MTRFNUZFRDMKKzoxMDMxQzAwMDlBMTQ2NEUwMDI2NDUxRkMyOTIwMDYyQTlDRjg2NUEyNDYKKzoxMDMxRDAwMDVGMkEyMTAyMEEwQjRDNjVCMjFGMkMzMjAwMTVFNUY0NjAKKzoxMDMxRTAwMDc0QzcwNTJEMjEyMzY1RDMyNDJFNTI5RTFBRTVGMDZGNTYKKzoxMDMxRjAwMEU4MDI2MDAyMUIyQUEyMjY2OEEwMDgyQjIyMDAwQUJCNTQKKzoxMDMyMDAwMDBDNjVCMjBDMkU1MjlEMURFNUVCNjRFMjAzOEIzODY0MTUKKzoxMDMyMTAwMEIyMkQ5RTE2QzhCQzhENjkxRUU1RTg2NEQwMDUyRUUwNkYKKzoxMDMyMjAwMDIxN0JFQjQ5MkUyMDBDMThFNUUyMENFRjExQThGRjI5QjkKKzoxMDMyMzAwMEYyODZDMTg2Nzk4QjRBMTdFNURGMDdFNzBBMjc3MkEzNzIKKzoxMDMyNDAwMDY4NzAwNDg4MjA3Nzg5MzkyNUYyODU2NDUyQTIyNzIxODUKKzoxMDMyNTAwMDJFMDdCNzM2MDdCOTBDNkY5RDAxRDdCMDg5Njk2RTkyRkEKKzoxMDMyNjAwMDQyMjgyMDNEN0I4NzNDOEExNUNEQUY2MDAwMThDMUIyNTMKKzoxMDMyNzAwMDhDMjAyQTIwMEM1ODBFOTBENUEwNjRBMkFDOEI2ODYzRDkKKzoxMDMyODAwMEZGQ0JDMDUwNjNGRkMzQzBFMDYwMDAwMjJFNjAwMzBFOUUKKzoxMDMyOTAwMDlCMEM2RUIyMEVEQzcwMENFQTExQUE2QTJBQUMyODVCOTkKKzoxMDMyQTAwMEZGQjZEN0EwREEyMERCNzBDMUM0MkQyMTFGNTgwRTM4MUQKKzoxMDMyQjAwMDhDMjY4QjI3RDRBMDBDQkIwQzdBQjMyNThBNjNDMDkwRDQKKzoxMDMyQzAwMDlBNTM4ODYyOTk1ODk4NTI4RjY1OUY1OThFNjc5RTVCNzIKKzoxMDMyRDAwMDhENjY5NzU1OUQ1QThCNjg3QjdCNzQ4QjE1Q0VCMzYwM0EKKzoxMDMyRTAwMDAwMEREQTIwREI0MDU4MEUwMjY1QTEwRDYzRkZDQzAwMTMKKzoxMDMyRjAwMERBMjBEQjMwOEMxNDU4MERBQUQ2QTBDMEMwQzBEMTlERjYKKzoxMDMzMDAwMDE1MkNBNDAzREEyMERCNjBERjcwREM1MEMwRTAyNTYwMDAKKzoxMDMzMTAwMDAzOUUxMDFFRTVDMTBDNUQxMUFENkQyRERDMjg1QkZGMTkKKzoxMDMzMjAwMDNGOEU2NkE1QTg4RjY3Mjg2NDAzQUY3Rjc3RkIwMUIxNDYKKzoxMDMzMzAwMEVFOUU2NjlGNjc4RDI2OEMyOUE0REQwRENDMEM5RDI2MDQKKzoxMDMzNDAwMDhCNjgwQzBDNDgyQzI1MjUwN0JCMEM5QjY4NjNGRUMzQkYKKzoxMDMzNTAwMDJDMjA2Njg5NjFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyMDkKKzoxMDMzNjAwMDYwMDBCODA5RkQ1MDY1RDBCMkNCQkY4RTY5Q0JFQkRCRjYKKzoxMDMzNzAwMDYwREM1MERGNzBEQTIwMUVFNUJDMkQ2MDAzQzA4MDk4NTEKKzoxMDMzODAwMDEwMENERDExQUQ2RDJEREMyODVCRkYyNDhCMTVDOTQyQkYKKzoxMDMzOTAwMDhBMjYyOTIyMDkwNEFBMDgyQTI2MDYwQTk5MEMwOTA5NUMKKzoxMDMzQTAwMDQ4MjkyNTI1NjVCMTNDQzAyMEQxMEYwMERCNjAyRDZDN0MKKzoxMDMzQjAwMDI4REY3MERBMjBDMEMwMUVFNUFDOUMxMERDNTA1QkZFM0MKKzoxMDMzQzAwMEI0NjNGRkM3MDAyRDIwM0QwRDRENDA2NURERjk2RkU1NkQKKzoxMDMzRDAwMDIyREEzMDhGNDU2REU5MEM4RUFBMEU4RTE0QzlFMzdFNzkKKzoxMDMzRTAwMEYzMTEyQUFDMTBDMDkwMjkyNDY3MDkwRjQ3NjRGREQ3NTgKKzoxMDMzRjAwMDYwMDE0MTAwQzA5MTYzRkZFRDAwODgxNTY1ODE0Q0RBRTIKKzoxMDM0MDAwMDIwREI2MDhDMTQ1ODBENjZDMDIwQzA5MDI5QTQwM0QxMjUKKzoxMDM0MTAwMDBGREEyMEMwQjY1ODBERjQ2M0ZGREUwMDhBMTYyQjIxQTgKKzoxMDM0MjAwMDA0NTgwQzhDQzBBMDJBMjQ2NjhCNjg2M0ZGM0EwMDAwMDUKKzoxMDM0MzAwMDAwMkI5Q0Y5NjVCMEM1REEyMDU4MEM5MTYzRkQ5MTAwMTIKKzoxMDM0NDAwMDJCMjAwQzBDQkExMUE1QUEyRkEyODZDMUMyN0ZDMzAyRTEKKzoxMDM0NTAwMDYwMDBGQzBEQjkwQTI5OTJBMzY4OTAwNzhDMjAwOUNDNjIKKzoxMDM0NjAwMDBDNjVDMEVCMjZBMjg1NjQ2MEU1MkMyMDY2ODkzMUIxMkQKKzoxMDM0NzAwMENDMEMwQzQ3MkMyNDY2NkZDNjAyNzA5NjBBREFFMDJCM0YKKzoxMDM0ODAwMDIxMDQ1ODBDNzQyNzI0NjY4OTMwNzc5NzRCMThFNTU5MjYKKzoxMDM0OTAwMDFERTU1QThBMzI4QjMzQzBGNDJDMjEwNDA5OUU0MDA2NjQKKzoxMDM0QTAwMEVFMTEwNENDMTEwRUNDMDI5RjYxQzFFMDBFQ0MwMjlENDYKKzoxMDM0QjAwMDYwOEYyQjlBNjY5QjY3OUM2NDk3NjUwOEZGMDI5RjYyRUEKKzoxMDM0QzAwMDJGMjAwQzE4RTU0MzBDRkUxMUE1RUUyREUyODVBOEZGNzgKKzoxMDM0RDAwMDI3RjRDRjJEREMyMDJERTY4NThGMTU2NUYwOTFDMDIwRDcKKzoxMDM0RTAwMEQxMEYwMDAwMkEyQzc0OEIxNDU4MDY0M0QyQTBEMTBGQTAKKzoxMDM0RjAwMDAwREEyMERCRTA1ODBEQkM2M0ZFRkUwMDAwREEyMERCQzIKKzoxMDM1MDAwMDMwOEMxNDhEMTU1ODBFM0VEMkEwRDEwRjAwMDA4ODE1QjYKKzoxMDM1MTAwMEM4ODhEQTIwREIzMDU4MEM5QzJBMjEwMjY1QUVEQUMwNUMKKzoxMDM1MjAwMDk0MDlBOTAyMjkyNTAyNjNGRUNGREEyMDJCMjAwQzU4MkEKKzoxMDM1MzAwMDBEQzc2M0ZFQzQyNzI0NjhEQTIwREIzMDJDMTIwNDJENkIKKzoxMDM1NDAwMDEyMDUyRTBBODA1ODBDQTE2M0ZDN0MwMEMwMjBEMTBGMEMKKzoxMDM1NTAwMERBMjA1ODBEQTU4QTE1Q0RBMURBMjAwMzNCMDIyQzEyRTIKKzoxMDM1NjAwMDA0NTgwRDBGMjdBNDAzQzAyMEQxMEYwMEMwMjBEMTBGOTUKKzoxMDM1NzAwMDJBMkM3NDhCMTQ1ODA2MjBEMkEwRDEwRjZDMTAwQzI4NjIKKzoxMDM1ODAwMDIxMDI5NDEwMDgwODRDNjU4MzYyMUZFNTA5MjlGMjlFMDgKKzoxMDM1OTAwMDZGOTgwMjYwMDM2NjFERTUwNTI5RDIyNjY4OTAwODJBMDcKKzoxMDM1QTAwMDIyMDAwOUFBMEM2NUEzNTQyQ0YyOUQ2NEMzNEUyQjIwNjMKKzoxMDM1QjAwMDBDMENCNjExQUY2NjI4NjI4NkMxRUM3OEUzMDI2MDAzOUEKKzoxMDM1QzAwMDQ2MTlFNEZDMDlCOTBBMjk5MkEzNjg5MDA3OEEyMDA5RTAKKzoxMDM1RDAwMEFBMEM2NUEzMzIyNDYyODU2NDQzMkNDMEUxMkEzMTA5MTgKKzoxMDM1RTAwMEMwNzAyNzI0NjY4OTM1OUExMTk5MkE4ODM2OTkxMjk4Q0QKKzoxMDM1RjAwMDJCODkzNzk4MTM5OTJDODgzODk5MTQwODU4MTQ5ODE1RTIKKzoxMDM2MDAwMDk4MkQ4OTM5MkEyNTA0MkUyNTFEMjkyNTFDMjgzMDI4ODYKKzoxMDM2MTAwMEMwOTIyODI0M0MyQTMwMjkwODA4NDc5ODE2MDk4OTAxQjUKKzoxMDM2MjAwMDJBMjQzRDJBMzExNTk5MTcwQTA5NDEwOUE5MEMyOTlDMTgKKzoxMDM2MzAwMEVDMjkyNTFGN0U4NzE5MkQyQTAwMERBMDYwMDAwODNFNjkKKzoxMDM2NDAwMDAxMEEzRUIxQUQwOERBMzkwRUFBMTEwQTk5MEMyOTI1RjIKKzoxMDM2NTAwMDFGMkEyMTFGMThFNTA2MEE4MTYwQzFEMDk0MUE5NTFCMDQKKzoxMDM2NjAwMDAxMDgzRTAwMDUzRUIxODQwNTQ4Mzk4NDNDMjU5Q0ZDOTgKKzoxMDM2NzAwMDBEODgzNjI5MjAxNDA4QUExQzhEM0QyNzI2MTgyRTI2RDEKKzoxMDM2ODAwMDEzMkUyNjE0MkUyNjE1MjcyNjFCMkUyNDZCMjcyNDY3N0YKKzoxMDM2OTAwMDI3MjQ2ODA4NTgxQzA5MDk0MzI5MjQxNDI5MzIxMTJBQUYKKzoxMDM2QTAwMDI1MkUyODI1MkYyNzI1MjQyNzI1MjUyNzI1MkMyNzI1QTYKKzoxMDM2QjAwMDIzMjUyNTIwMjQyNTIxMkQyNTIyODQxQTJEMjExQzg1MTIKKzoxMDM2QzAwMDFCNkZEMjAyNjAwMjA5QzBBMDk5MTg2RDA4MEFCMUFBNDYKKzoxMDM2RDAwMDAwQTEwNDAwRTkxQTdEOUIwMjYzRkZFRTg5MThDMDgwRjcKKzoxMDM2RTAwMEMwRTFDMDcwQzBEMjlCMUQ5NTFCOTYxQzlDMUUxNkU0QTkKKzoxMDM2RjAwMEQxMkMyMDNEMTVFNEUwMEMwQjQwMERDQzAxMEJFNzM4M0MKKzoxMDM3MDAwMDFERTRDMzBBNzcxMDBDRTgzODBCODgxMEMwQzQ5QzQxMzQKKzoxMDM3MTAwMDA4NzcwMjlENDBCMEE4MDk4ODExOEIyMDlDNDk5RDQ4REMKKzoxMDM3MjAwMDk1NEI5NjQzMDg3NzAyODYxNDE4RTREMTE1RTRCOTA4M0UKKzoxMDM3MzAwMDc3MDIwNUJCMDI5QjRBOUI0Mjk3NDY4ODEyODcxMTA4NzUKKzoxMDM3NDAwMERBMTQ5QTRFMEQ4ODEwMEQ3NzExMDg3NzAyMUFFNEFDM0UKKzoxMDM3NTAwMDA2RDgxNDBENjYxMDA4NzcwMjk3NEZDNzhGOTg0RDk4QkEKKzoxMDM3NjAwMDRDOTg0NTg3MTU5ODQ0MDcxNTE0MEQ1NTExMEE1NTAyQjQKKzoxMDM3NzAwMDk1NDcxNUU0QzE4QTI2MkQ0NjEwMkQ0NjE4MkQ0NjIwNjIKKzoxMDM3ODAwMDJDNDYxMTJDNDYxOTJDNDYyMTJCNDYxMjJCNDYxQTI4NjIKKzoxMDM3OTAwMDQ2MTQyODQ2MTUyQjQ2MjI4ODE2MjU0NjI0MjU0NjI2RkIKKzoxMDM3QTAwMDhCMTcwQTBDNDgwOTBENDg4NTEzMEVERDExMDVDQzExNDUKKzoxMDM3QjAwMDA4Mzk0MDBCRUIzOTAyOTkxMDFFRTRCMDBEQ0MwMjBEMTQKKzoxMDM3QzAwMDU1MTEwODJENDAwNjU1MDIyRTQ2MTMxNkU0N0IwRkRERDkKKzoxMDM3RDAwMDExMjU0NjE2MDgwODQwODUxQjAxODgxMDBEQkIwMjg2N0UKKzoxMDM3RTAwMDY3MURFNEE3MDk4ODAyMENCQjAyMTlFNDc3MUNFNEE1NTUKKzoxMDM3RjAwMDJCNDYxNzJENDYxQkE3NjYxQkU0QTRDMDcwMkM0NjFDNDUKKzoxMDM4MDAwMDA5ODgwMjhDMUUyODQ2MUUyQjQ2MjNDMDkwOEIxRDI5M0EKKzoxMDM4MTAwMDQ2MUQyOTQ2MUYxOEU0OUQyOTQ2MjcyODQ2MjUyOTMxOUIKKzoxMDM4MjAwMDE2MkUyMDA2MjkyNDZBMjQzMTE3OTYyRDI0MjUyMzg2NTYKKzoxMDM4MzAwMDFDQ0NFMTI3MjQwN0MwRDcwOTBFNDA2NEUwODI5QTI5RjYKKzoxMDM4NDAwMDA5Mjg0MTY0ODA5MTY0NDA5QjJEMjQwNkMwOTgwOTQ5NTEKKzoxMDM4NTAwMDM2MjgwQUEwMjQ2Mjg1MDFDNDA0QTg0NDI4MjEwNDI0MkYKKzoxMDM4NjAwMDY2ODUwODg4MTE4RTNGOEEzRTJEMzIxMDBFQTQxODAwRkUKKzoxMDM4NzAwMEM0MDQwRUFFMTgwMEVFMTEwQUNBNTMwRUREMDJDMEUzRjYKKzoxMDM4ODAwMDBFODgwMjk4QzExRUU0ODIwOTA4NEU5RUMwOEUyMDk0QzQKKzoxMDM4OTAwMEMzOThDNTlEQzQxOEU0NEUxREU0N0YwNUVFMTEwRUFBMjEKKzoxMDM4QTAwMDAyMERBQTAyQThCODI3ODRDRjlBQzIxRUU0NDAyNEYyQ0YKKzoxMDM4QjAwMDlEMjdFNEEyMjQ0QzE4MjRGNjlENjU1MDUyQzAyMEQxQzcKKzoxMDM4QzAwMDBGMkQyNDA2QzBBMEMwOTgwOTQ5MzYwNEE5Mzg2M0ZGMEIKKzoxMDM4RDAwMDdGQzBBMDYzRkUwNzAwMDA2NTRGNkRDMDk4QzBBODJBOTYKKzoxMDM4RTAwMDI0MDY2M0ZGNkIyRDI0MDZDMDkwNjNGRjYzQ0M1N0RBNzgKKzoxMDM4RjAwMDIwREIzMDhDMTA1ODBDMkFDMDIwRDEwRjAwREEyMEMwRjkKKzoxMDM5MDAwMEI2NTgwQ0I5NjNGRkU1MDBEQTIwNTgwQ0I3NjNGRkRDNEEKKzoxMDM5MTAwMDJBMkM3NDhCMTA1ODA1MzhEMkEwRDEwRjZDMTAwNjI4QjEKKzoxMDM5MjAwMDIwMDY4QTMzNkY4MjAyNjAwMTYxQzA1MDEzRTQyMDI5QUYKKzoxMDM5MzAwMDIxMDIxNkU0MUY2OTkyMDQyNTI1MDJEOTUwMkMyMDE1NzYKKzoxMDM5NDAwMDlBMjgxNEU0MUQ4RjI2MjcyMDBCMEFGRTBDMDQ3NzA5MDEKKzoxMDM5NTAwMDJCNzExQzY0RTEzOThFNDI4RDQzNkZCQzAyNjAwMTZGOTQKKzoxMDM5NjAwMDAwRTEwNEIwQzgwMDg4MUEwOEE4MDgwOEQ4MDI5ODI3RkYKKzoxMDM5NzAwMDJCMjAwNjY4QjMyRUNFOTcyQjIyMUUyQzIyMUQwMTExNjAKKzoxMDM5ODAwMDAyN0JDOTAxQzBCMDY0QjAxNzJDQjAwNzI4QjAwMERBQzAKKzoxMDM5OTAwMDIwMDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRDEKKzoxMDM5QTAwMEU3QzAyMEQxMEYyRDIwNjQ2NERGQ0E4QjI5QzBGMTBCNDIKKzoxMDM5QjAwMEFCMEM2NkJGQzAyQjIwMEMwQ0JDMTFBNkNDMjhDMjg2NTkKKzoxMDM5QzAwMDJFMEEwODc4RUI2MTFFRTNGQjBFQkUwQTJFRTJBMzY4MDYKKzoxMDM5RDAwMEUwMDUyODIyMDA3RTg5NEYyOUMyODUxRUU0MDc2NDkwRjUKKzoxMDM5RTAwMDQ2MUZFNDE1OUU5MEMwODQ5ODkxMjgyMDBBOTU5MzBGNTUKKzoxMDM5RjAwMDg4MDI5ODkyOEUyMDBGRUUwMjlFOTQyRjIwMDc4ODI2MzAKKzoxMDNBMDAwMDJGOTUwQTk4OTY5QTk3MkUyMDA2MjUyNDA3NjhFMzQzNTcKKzoxMDNBMTAwMDI5MjEwMjJBQzI4NTFERTNFRTJBQUMyMEFEQkQyNUQ0QTIKKzoxMDNBMjAwMENGMkFDNjg1NjNGRjRFMDAyRTIwNjVDQkVEQzA4MjI4Q0QKKzoxMDNBMzAwMDI0NjVDOUY2MDVFNDMxMDAwMjAwMkE2MjgyMUJFM0Y3MUYKKzoxMDNBNDAwMDI5NDEwMjBCQUEwMjJBNjY4MjA5RTQzMTI5MjEwMjYzNzQKKzoxMDNBNTAwMEZGMjMwMDAwNjRERkI4OEY0MjJFMjAxNjAwRjEwNDBEMTIKKzoxMDNBNjAwMEVFMEMwMEVFMUFBRUFFOUUyOTYzRkZBMzhBMjAyQjMyMjUKKzoxMDNBNzAwMDIxQjFBQTlBQjAyOTMyMjEyODMyMjNCNDk5MjkzNjIxQkEKKzoxMDNBODAwMDc5ODlBOTJCMzIyMjJCMzYyMTYzRkZBMEMwMjBEMTBGQzgKKzoxMDNBOTAwMDlGMjcyNTI0MTVBQ0I4Mjg3NTFDMkIyMDA2QzBDMTJFRTUKKzoxMDNBQTAwMEJDRkU2NEUwQUI2OEI3NzcyREJDRkQ2NURFQzcyRDIwOUEKKzoxMDNBQjAwMDY0QzBGMDY0RDA4NjhFMjkwRUFFMEM2NkUwODlDMEYxMzkKKzoxMDNBQzAwMDI4MjA1QTI4OENGRTA4Q0YzODY1RkVFODYzRkY1ODAwOEUKKzoxMDNBRDAwMDAwRTAwNDkzMTBDMDgxMEFGMzBDMDM4MzM5Qzc4RjA4RjgKKzoxMDNBRTAwMEQ4MDMwOEE4MDEwOEY4MEMwODA4MTlBODMzMDNDODBDNjMKKzoxMDNBRjAwMEE4QjgyODc1MUMwMzBCNDcyQjI0MTU4MzEwQ0JCNzAwREYKKzoxMDNCMDAwMEUxMDRCMEJDMDBDQzFBQUNBQzBDREMwMjlDMjc2NTlFNzYKKzoxMDNCMTAwMDVFQzBCMjBCOTkwMjA5MDk0RjI5MjUwMjYzRkU1MDAwQ0QKKzoxMDNCMjAwMDJEMjA2QTBEMkQ0MTY1REY3RURBMjBDMEIwNTgwQzc1NUUKKzoxMDNCMzAwMDY0QUYxOEMwRjE2M0ZFRUY5RjI3NjNGRkQwMkUyMjFGRjIKKzoxMDNCNDAwMDY1RUUzMjYzRkY3OTAwMDAyODIyMUY2NThFMjc2M0ZGMzAKKzoxMDNCNTAwMDZFMjUyNDA2MjUyNTAyQzA5MDYzRkUxOTZDMTAwNjY1QUIKKzoxMDNCNjAwMDcxMzMyQjRDMThDMEM3MjkzQzE4QzBBMUMwODAwOUE4Q0MKKzoxMDNCNzAwMDM4MDgwODQyNjQ4MTEwMUNFMzhBMUFFMzhCMkFDNjdFNDcKKzoxMDNCODAwMDJBNUNGREQzMEY2REFBMDUwMEIwODgwMDkwOEM4OTQwOTcKKzoxMDNCOTAwMEMwQTAwOTg4NDcxRkUzQjQwODBCNDcwOTRDNTAwOTBEMjIKKzoxMDNCQTAwMDUzMDRERDEwQjRDQzA0Q0MxMDBENUQwMjlEMzEwQ0JCNzAKKzoxMDNCQjAwMDAyOUIzMDg4NDM4RTIwOTgzNTBGRUUwMjlFMzI4RDI2NzAKKzoxMDNCQzAwMEQ4NTBBNkREOUQyNjhFNDBDMDkwMEU1RTUwNjRFMDk3RDIKKzoxMDNCRDAwMDFDRTM5QTFFRTM4OTAzOEIwQkMwRjQ5RkIxOUVCMDJEQUEKKzoxMDNCRTAwMDIwMEE5OUIzMENERDAyOURCMjhGMjAwQ0ZGMDI5RkI0MTYKKzoxMDNCRjAwMDhFMjYyRDIwMDc5RUI2OEMyODJEQjUwQTlDQjcyOTI0MjkKKzoxMDNDMDAwMDA3MkYyMDA2MkIyMDY0NjlGMzM5Q0JCNjFERTM2QjIzMDUKKzoxMDNDMTAwMDIwMTY4REQyMEIzMzBDMDBEMTA0MDAzMzFBQjQ4REEzQkYKKzoxMDNDMjAwMEMzOTMyOTIyMjAwQzEzRTM2QTFGRTM2MTBDMkUxMUFGMEEKKzoxMDNDMzAwMEVFQTMyMjI5MjRDRjJGRTI4NUQyQTAwRkREMEIyREU2QTMKKzoxMDNDNDAwMDg1RDEwRjAwMkUyMDBDQjQ4QzBDRUIxMTFGRTM2MTFERUQKKzoxMDNDNTAwMEUzNThBRkVFQURCQjIyQjI4NTI5RTRDRjAyQzIwQjIyRkUKKzoxMDNDNjAwMEI2ODVEMkEwRDEwRjAwMDAyRTIwMEMxQ0UzNTExRkUzMUIKKzoxMDNDNzAwMDU4MENFQjExQUZFRUFDQkIyMkIyODUyOUU0Q0YwMjgyMjcKKzoxMDNDODAwMDBCMjJCNjg1RDJBMEQxMEZDMEQwMEJBRDM4N0RDODAyQjMKKzoxMDNDOTAwMDYzRkVFQzYzRkVFMDhFNDAyNzJDNzQ3QkVFMTJEQTcwM0MKKzoxMDNDQTAwMEMwQjMyQzNDMThERDUwNTgwQTdCODk0MEMwODA2M0ZFQUQKKzoxMDNDQjAwMEUzREU2MERBMjBEQjMwREM0MERENTA1ODAwMDU5QTEwOEUKKzoxMDNDQzAwMERCNTAwNzdBMDI1ODA0NEM4ODEwNjNGRUY4MDAwMDAwQUQKKzoxMDNDRDAwMDZDMTAwNjkyMTIxRUUzNDI4QzQwQUUyRDBDOEM0NzJFQzcKKzoxMDNDRTAwMDNDMTgwNENBMEJEOUEwN0RBMzAyMjlBREY4NzVDMzAyMDQKKzoxMDNDRjAwMDYwMDA4NEMwQjBDMDIzQzBBMDlEMTA2RDA4NDRCODlGNzAKKzoxMDNEMDAwMDBFQjgwQThEOTAwRUI3MEJCODc3MEQ2RDM2QURBQTlEMjMKKzoxMDNEMTAwMDgwMEQ2NjBDRDhGMDAwODA4ODAwNzA4Qzg3OTA2OEIxQTgKKzoxMDNEMjAwMDI0QjIyMjc3RDMyNzg4OTFDMEQwQ0I4Nzk4OTAyNzlDNDQKKzoxMDNEMzAwMDEwMDA3MDg4MDBGMDhDOUQ5MUNCNkZDMDgxMDhCQjAzOTAKKzoxMDNENDAwMDc1Q0IzNjYzRkZCNEIxMjIyRUVDMTg2M0ZGRDQ4NTkyOTUKKzoxMDNENTAwMDBENzcwQzg2OTM5NzkwQTZENjdENkIwMUIxNTU5NjkzRkYKKzoxMDNENjAwMDk1OTI2MDAwMTZCM0NDMkQ5QzE4ODgxMEQ5RDA3OEQzQ0EKKzoxMDNENzAwMEM3MjlEREY4NjNGRkMxMDBDMDIzOEE0MjFCRTM0NzAwNjcKKzoxMDNEODAwMENEMzIyRDQ0MDI5QjMwOTIzMTg5NDI4NTQzNzlBMTA1ODEKKzoxMDNEOTAwMDFFRTM0MzBFNTUwMTg3MTIxQkUzMzQ4OTcwOTUzNTBCRTIKKzoxMDNEQTAwMDk5MDI5OTMyODg0MjBBODgwQzk4NDI4Njc2QTZBNjk2OEQKKzoxMDNEQjAwMDc2OEY0NEFGQUY5RjQ0RDEwRjAwMDAwMDZDMTAwODkzODIKKzoxMDNEQzAwMDExRDYzMDg4MzBDMDkxMDg2MzUxMDgwODQ3MDU5ODM4RUIKKzoxMDNERDAwMDk4MTIyODIxMDIyOTNDRkQwODA4NEM2NTgxNjU2NTkxRUYKKzoxMDNERTAwMDYyOEE2MzBBMkI1MDY1QjE4QjBBNkYxNDJFMEFGRjdDMUUKKzoxMDNERjAwMEE2MEEyQzIwNUFDQ0M0MkQwQTAyMkQyNDVBN0ZFMDAyOTgKKzoxMDNFMDAwMDYwMDIxNTg5Mjg4ODI2MUZFMzI2MDk4ODBDNjU4MjBGMjEKKzoxMDNFMTAwMDJFMjAwQjBGRUUwQjJERTBGRTJFRTBGRjA4REQxMTBFMjUKKzoxMDNFMjAwMEREMDIxRUUzMjBBRUREMUVFMzIwMUNFMzIwMEVERDAxREIKKzoxMDNFMzAwMDBEQ0MzN0MxODAwODQ4MzdCODhEQjQ4ODk4MTA4OTYwOTgKKzoxMDNFNDAwMDFBRTJERTdCOTYyMThCNjIyQUEwMjE5QzE0N0JBMzE3QTkKKzoxMDNFNTAwMDlEMTMyQTIwMEM4QjEwOEMyMDU4MEI5NzhDMTQ4RDEzREIKKzoxMDNFNjAwMERCQTBDRUFDNjAwMUM0MDAyRTIwMEMxQkUyRDEwQ0VBMUEKKzoxMDNFNzAwMDExMEJBQTA4MkJBMjg2MUZFMkNGN0JEQjNCMEZFRjBBQjgKKzoxMDNFODAwMDJGRjJBMzY4RjAwNTI4MjIwMDdGODkyQzJCQTI4NTY0REQKKzoxMDNFOTAwMEIwQUE4NzYyODgyNkRFNzAwQzc5MzYwOTdBMEM2RkFEN0QKKzoxMDNFQTAwMDFDOEYyNzlCMTUwOEZGMEM3N0YzMTk3RTdCNzI5RDEzREYKKzoxMDNFQjAwMDlDMTQ5QjE1Q0Y1NjYwMDAyNUMwQjA2M0ZGRDBENzkwRUYKKzoxMDNFQzAwMDYzRkZERDAwMDA5RDEzOUMxNERBMjBEQjcwNTgwQjA4QTMKKzoxMDNFRDAwMDhCMTU4QzE0OEQxMzY1QTA2QThFNjI2M0ZGQ0MwMERBOUIKKzoxMDNFRTAwMDIwOEIxMURDNDA1ODBBQUVENkEwOEIxNUMwNTFERTcwNzUKKzoxMDNFRjAwMERBMjBEQzYwREQ0MDVCRkY3NjhEMTM4QzE0RDlBMDJFQjgKKzoxMDNGMDAwMDIwMEMxQkUyQUIxRkUyQjIwQ0VBMTFBRkVGQzBFMEFCM0EKKzoxMDNGMTAwMEFBMkJBMjg1MkVGNENGMEI5OTBCMjlBNjg1NjNGRjFEMzIKKzoxMDNGMjAwMDAwREEyMERDNjBERDQwREU3MDg5MTIyODIwMDdERjUwRDcKKzoxMDNGMzAwMEE5ODgyODI0MDc1QkZGMDlEMkEwRDEwRjAwREJFMERBQjMKKzoxMDNGNDAwMDIwNTgwQjI5NjU1MEVGMkEyMDE0MEEzQTQwNjVBMEVCNEYKKzoxMDNGNTAwMERCNjBEQzQwREQzMDAyMkEwMjU4MDk5Q0Q2QTA2NEEwNTgKKzoxMDNGNjAwMEQ1ODRBMTgzQTAwNDA0NDcwMzA1NDc5NTEyMDM2MzUxMzgKKzoxMDNGNzAwMEMwNTE2M0ZFNUMyQzIwMDZEMzBGMjhDQ0ZENjQ4MEE1QzUKKzoxMDNGODAwMDY4QzcwNEMwOTMyOTI0MDYyQzIwMDZDMEIxOEQ2NDFGODUKKzoxMDNGOTAwMEUyOEE5RDI3OUQyODlEMjk4RkYyOUQyNjAwRjEwNDAwMkQKKzoxMDNGQTAwMEJCMUEwMEYwMDRCMEJFMEVERDAxQzBGMEFEQkI4RDY1RTQKKzoxMDNGQjAwMDJGMjQwNzBEMEU1RTAxRUUxMUFFQkIyRTBBRkVCMEJCMjQKKzoxMDNGQzAwMDBCMEIxOTBFQkIzNkMwRTIwQjBCNDcwRUJCMzcyQjI0NzUKKzoxMDNGRDAwMDE2MThFMjgyMEEwOTQ1MEQwQjQyMkIyNDBCMjkyNDBBRUMKKzoxMDNGRTAwMEI0QkUyRTI0MEM3RDg4NTcyOTIwMTYyRkNDRkRCMDlEMDEKKzoxMDNGRjAwMDBBNUM1MjBEQ0MzNjJDMjQ2NDY1RkRFQzBDMEM0NzY0MzUKKzoxMDQwMDAwMENERTYxOEUyNkQ4RTI4ODg4MjBDOUYwQzAwODEwNDAwOUEKKzoxMDQwMTAwMEZGMUFBRkVFOUUyOTYzRkRDRjFDRTI5QzYzRkUxMzAwRTYKKzoxMDQwMjAwMDFDRTI5MzYzRkUwQzhENjU2M0ZGQTUwMERBMjAyQjIwNTQKKzoxMDQwMzAwMDBDNTgwQjA2NjQ1RjBGQzAyMEQxMEYwMEMwMjBEMTBGQjkKKzoxMDQwNDAwMEMwOTMyOTI0MTZDMDkzNjNGRkEwMDAwMDZDMTAwNEMwMjUKKzoxMDQwNTAwMDYwMTdFMjU2MURFMjU5QzM4MTI5MzEwMTJBMzAwODI5MkYKKzoxMDQwNjAwMDI0MEE3OEExMDhDM0IyN0JBMTcyRDI2MEQxMEZDMEMxNkIKKzoxMDQwNzAwMDY1NTA1MTI2MjUwMjJBRDAyMDJGMjAwQjI5MEFGQjJCMjAKKzoxMDQwODAwMDIwMTQyRTIwMTUyNjI0MTUwOUJCMDEwREZGMDkyOEYxNDcKKzoxMDQwOTAwMDFDMkIyNDE0QThFRTJFRjUxQzY0QTBCNTJCMjIxRTI4ODAKKzoxMDQwQTAwMDIyMUQwMTExMDI3Qjg5MDFEQjYwNjRCMDE3MkNCMDA3NkYKKzoxMDQwQjAwMDI4QjAwMERBMjAwNzg4MEEyODgyNENDMEQxMEI4MDAwODMKKzoxMDQwQzAwMERCQTA2NUFGRTdEQjMwREM0MERENTBEQTIwNTgwMEQ4RkMKKzoxMDQwRDAwMDI5MjEwMjA5MEI0Q0NBQjJEMkEwRDEwRjAwQ0M1QTJDMTQKKzoxMDQwRTAwMDMwMDg3QkMxMzcyRUQwMjA2NEUwMkQwMjJBMDIwMzNCMkEKKzoxMDQwRjAwMDAyREM0MERENTA1ODAwQ0VEMkEwRDEwRjJCMjAxNEIwRUUKKzoxMDQxMDAwMEJCMkIyNDE0MEIwRjQxNjRGMDgyN0NCN0NBQzBDMTBDRDYKKzoxMDQxMTAwMDlDMDIyQzI1MDJEMkEwRDEwRkMwMjBEMTBGMkUyMDA2NDgKKzoxMDQxMjAwMDY5RTJDMTJGMjEwMjBGMEY0QzY5RjFCODI2MjQwNjI2M0YKKzoxMDQxMzAwMDI1MDIyQjIyMUUyODIyMUQyQTIwMEIyOTIwMTUwREFBMUMKKzoxMDQxNDAwMDA5MkNBMTFDMjYyNDE1QUM5OTI5QTUxQzdCODE0QTYwNDkKKzoxMDQxNTAwMDAwNDlCMEJCMkIyNDE0MEIwRDQxQ0JENjdDQjcwMjJDRUQKKzoxMDQxNjAwMDI1MDIyQjIyMUUyRTIyMUQ3QkU5MDIyQjBBMDA2NEIwQTEKKzoxMDQxNzAwMDE3MkNCMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwMjQKKzoxMDQxODAwMEQxMEI4MDAwREJBMDY1QUZFN0MwMjBEMTBGMjYyNDA2NEQKKzoxMDQxOTAwMEQyQTBEMTBGMjYyNDA2NjNGRkM3REI2MDFERTIwNzY0QUYKKzoxMDQxQTAwMEJGNDIyQ0IwMDcyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQ0EKKzoxMDQxQjAwMEMwRDEwQjgwMDBEQkEwNjVBRkU3MURFMUZGNjNGRjI0RUEKKzoxMDQxQzAwMDZDMTAwNDI4MjAwNkMwNjQ2Rjg1NjRDQTVCMjkyMDE0MjMKKzoxMDQxRDAwMDdEOTcyNkRBMjBEQjMwREM0MDA1NUQwMjU4MDAxOTI5ODYKKzoxMDQxRTAwMDIxMDIwOTBBNENDOEEzQzAyMEQxMEYwMEMwQjEwQjlCMEIKKzoxMDQxRjAwMDAyMkIyNTAyQzAyMEQxMEYwMDAwMDIyQTAyMDMzQjAyM0QKKzoxMDQyMDAwMDJDMEEwMTU4MDBDQUM5QUFEQTIwREIzMERDNDA1ODA5NjAKKzoxMDQyMTAwMEU0MjlBMDExRDNBMDdFOTcwODJDMEFGRDBDOUMwMTJDNDgKKzoxMDQyMjAwMEE0MTFDMDUxMkQyMDE0MDZERDAyMkQyNDE0NjNGRkEyMTkKKzoxMDQyMzAwMERBMjBEQjMwREM0MERENTBDMEUwNTgwOTY0RDJBMEQxODgKKzoxMDQyNDAwMDBGMDAwMDAwNkMxMDA2MTZFMURBMUNFMURBNjU1MTNCNDQKKzoxMDQyNTAwMEMwRTExN0UxRDYyODIxMDI4QjIwMDgwODRDNjU4MDdCM0QKKzoxMDQyNjAwMDI5MzIwMDA5Njk1MTY5OTM3MjJBNjI5RTZFQTg0ODJBMTAKKzoxMDQyNzAwMDcyMjY2OEEwMDI3QUI5M0YyQTYyOURCNDRGQ0JBNzJCNjEKKzoxMDQyODAwMDIwMEMwQ0JEMTEwNkREMDgyOEQyODY3OEZCMTUwQ0JGNkEKKzoxMDQyOTAwMDBBMkZGMkEzNjhGMDA0ODgyMDdGODkwNzJERDI4NUQzRTYKKzoxMDQyQTAwMDBGNjVEMDYwMkEyMTA0MTlFMjAyRDMwRjdBOUIxRERBMzAKKzoxMDQyQjAwMDIwNTgwODY0NjAwMDI0MDAyQzIxMDQxQkUxRkQ3Q0JCMTUKKzoxMDQyQzAwMDEzREEyMEMwQjY1ODA4NUZDOTUzNjAwMEVGREEyMDU4RUYKKzoxMDQyRDAwMDBBNDY2MDAwMDZEQTIwQzBCNjU4MEE0MzY1NTBERERDQTUKKzoxMDQyRTAwMDQwREIzMDhEMzBEQTIwMEQ2RDUxNTgwOEI4RDNBMDY0MTIKKzoxMDQyRjAwMEEwQ0ExQ0UxQjBDMDUxODRBMThFQTAwNDA0NDcwRTBFRDgKKzoxMDQzMDAwMDQ3NjNGRjUwMDAyQjIxMDRDMDhDODkzMUMwNzBERjcwREYKKzoxMDQzMTAwMDA5Rjk1MDA5OEYzODZFQjgxNzJDMjA2NkFFQ0MwQzBDRkEKKzoxMDQzMjAwMDQ3MkMyNDY2N0NGQjA5OUQxMDU4MDhDQThEMTAyNzI0NTEKKzoxMDQzMzAwMDY2OTREMTFFRTFCNkI4REM5RUQwNjU1MDU2QzBEN0I4QTEKKzoxMDQzNDAwMDNBQzBCMUMwRjAwQ0JGMzgwRjBGNDJDQkYxMTlFMTk0NjUKKzoxMDQzNTAwMDE4RTE5NjI4OTY3RUIwNEJEMzBGNkRCQTA1MDBBMDg4NjEKKzoxMDQzNjAwMDAwQzA4QzJDMjAwQ0MwMjAxREUxOUEwQ0NGMTFBNkZGQTAKKzoxMDQzNzAwMDJFRjI4NUFEQ0MyN0M0Q0YwRTRFMEIyRUY2ODVEMTBGNzUKKzoxMDQzODAwMEMwODAwQUI4Mzg3OEQwQ0Q2M0ZGQzEwMDhFMzAwRTBFRTEKKzoxMDQzOTAwMDQ3NjNGRUJEMkEyQzc0MkIwQTAxMDQ0RDAyNTgwOEJENDgKKzoxMDQzQTAwMDJGMjAwQzEyRTE4QjBDRjkxMUE2OTlBMkZGMjdGNENGNTQKKzoxMDQzQjAwMDI4OTI4NUQyQTAwODQ4MEIyODk2ODVEMTBGQzAyMEQxMUQKKzoxMDQzQzAwMDBGMDAwMDAwNkMxMDA0QzA2MENCNTVEQjMwREM0MDA1RjIKKzoxMDQzRDAwMDVEMDIwMjJBMDI1QkZGOUIyOTIxMDIwOTA4NENDODgyNjgKKzoxMDQzRTAwMEQyQTBEMTBGMkIyMDE0QjBCQjJCMjQxNDBCMEM0MUNCMkIKKzoxMDQzRjAwMEM1N0RCN0VCQzBDMTBDOUMwMjJDMjUwMkQyQTBEMTBGMDkKKzoxMDQ0MDAwMDAwMDAwMjJBMDIwMzNCMDIwNjZDMDJDMEQwQzdGNzJFNEUKKzoxMDQ0MTAwMDIwMTQyODMxMDEyNjI1MDIyODI0MEEwRkVFMDEyRTI0MUIKKzoxMDQ0MjAwMDE0NTgwMTBENjNGRkEzMDAyNjI0MDZEMkEwRDEwRjAwNkIKKzoxMDQ0MzAwMDZDMTAwNjI4MjEwMkQ2MjAwODA4NEM2NTgwOUQyQjIwOTAKKzoxMDQ0NDAwMDBDMTJFMTVCMENCODExQTI4ODJBODI4NkI1NDk3QTkzRDYKKzoxMDQ0NTAwMDAyNjAwMDk3MTlFMTU4MDlCOTBBMjk5MkEzNjg5MDA4RTcKKzoxMDQ0NjAwMDJBNjIwMDA5QUEwQzY1QTA4MjI4ODI4NTFDRTE2MzY0ODcKKzoxMDQ0NzAwMDgwNzk5QzgwQjg4N0IxNEI5QjgxOUIxMDY1NTA3NEMwM0MKKzoxMDQ0ODAwMEE3RDk3MDI4MEEwMUMwRDAwNzhEMzgwRDBENDJDQkRFQTgKKzoxMDQ0OTAwMDFGRTE0NDFFRTE0NTJFRjY3RUQ4MzBEMzBGNkQ0QTA1NEMKKzoxMDQ0QTAwMDAwODA4ODAwOTA4QzJFMzAwOEMwQTAwMEVFMzIyRTc0NjAKKzoxMDQ0QjAwMDAwMjg2MDBDMTlFMTQ3MEM4RDExQTJEREE5ODhDMDIwRUQKKzoxMDQ0QzAwMDJDRDI4NTIyODRDRkQyQTAwQ0JDMEIyQ0Q2ODVEMTBGNDgKKzoxMDQ0RDAwMEMwRjAwMzhGMzg3RkEwQzA2M0ZGQjQwMENDNTgyQTZDQjMKKzoxMDQ0RTAwMDc0REIzMERDNDA1ODA3RjFDMDIwRDEwRkRBNjA1ODA5ODYKKzoxMDQ0RjAwMEJFNjNGRkU3REQ0MDJBNkM3NEMwQjBEQzcwNTgwODY1MEQKKzoxMDQ1MDAwMDJFMzAwODhCMTAwMEVFMzIyRTc0MDAyODYwMEMxOUUxNUEKKzoxMDQ1MTAwMDMwMEM4RDExQTJEREE5ODhDMDIwMkNEMjg1MjI4NENGMzkKKzoxMDQ1MjAwMEQyQTAwQ0JDMEIyQ0Q2ODVEMTBGMDAwMDZDMTAwNDI5MzYKKzoxMDQ1MzAwMDIwMTQyODIwMDZCMTk5MjkyNDE0Njg4MTI0QzBBRjJDQTYKKzoxMDQ1NDAwMDBBMDEyQjIxMDIyQzI0MDY3QkEwMDRDMEQwMkQyNTAyQjkKKzoxMDQ1NTAwMDAyMkEwMjAzM0IwMjA0NEMwMkMwRDA1ODAwQkZEMkEwODIKKzoxMDQ1NjAwMEQxMEZDMDIwRDEwRjAwMDA2QzEwMDQyOTMxMDFDMkI0NUEKKzoxMDQ1NzAwMDI5MjQwQTJBMzAxMUMyODM3OEExNkM3QkExNjk2NDUwNzYKKzoxMDQ1ODAwMDQ3MkMyMDA2QzA2ODZGQzU2MkNBNTcyRDIwMTQ3Q0Q3RkYKKzoxMDQ1OTAwMDIyREEyMERCMzBEQzQwREQ1MDVCRkZBNTI5MjEwMjA5NTcKKzoxMDQ1QTAwMDBFNENDOEUyQzAyMEQxMEZDMEYxMEY5RjAyMkYyNTAyOTAKKzoxMDQ1QjAwMEMwMjBEMTBGREEyMERCMzBDMEMwNUJGRkRDMjgyMDE0MjQKKzoxMDQ1QzAwMDA2ODgwMjI4MjQxNDYzRkZDNzI5MjAxNTFCRTBGQjJBNTQKKzoxMDQ1RDAwMDIwMEJDMEMwOUMyNDBCQUEwOTJCQTExQzJDMjQxNUFCQkEKKzoxMDQ1RTAwMDk5MjlBNTFDNjNGRjk5MDBDMDIwRDEwRkRBMjBEQjMwODgKKzoxMDQ1RjAwMERDNDBERDUwQzBFMDU4MDg3NUQyQTBEMTBGMDAwMDAwQUIKKzoxMDQ2MDAwMDZDMTAwNENCNTUxM0UwRjYyNTIyMUYwRDQ2MTEwNjU1RkMKKzoxMDQ2MTAwMDBDQTMyMzI2MjIxRTI1MjYxRjA2NDQwQjI0MjYxRTczQzgKKzoxMDQ2MjAwMDRCMURDODUyRDI0MEQxMEYyODBBODBDMDQwMjQyNjFGRkIKKzoxMDQ2MzAwMEE4MjgyODI2MUUyODI2MUREMjQwRDEwRkMwMjBEMTBGMjEKKzoxMDQ2NDAwMDI0NERGODI0MjYxRTYzRkZEODAwMDAwMDZDMTAwNDI4QjcKKzoxMDQ2NTAwMDIwMDZENjIwNkU4NTAyNjAwMERFMTdFMEQ1MURFMERDNjYKKzoxMDQ2NjAwMDE5RTBENUMwQzFDMDIwMkE4Q0ZDNjRBMTMyMkI2MTAyQTQKKzoxMDQ2NzAwMEI0NEUwQjBCNEM2NUIwQTgyQjYwMEMyQTYyMDAwQ0I4MzIKKzoxMDQ2ODAwMDExMDc4ODA4MkY4Mjg2MDlCOTBBN0ZFMzAyNjAwMDlGMUMKKzoxMDQ2OTAwMDI5OTJBMzY4OTAwNTA5QUEwQzY1QTA5MzI4ODI4NTY0RDUKKzoxMDQ2QTAwMDgwOERCODg5MUJFMERBOTQ4MTlCODA2NTUxNERDMEI3M0QKKzoxMDQ2QjAwMEI4MzhDMEExQzBFMDA5QUUzODBFMEU0MjY0RTA0ODFBMTYKKzoxMDQ2QzAwMEUwQjgxRkUwQjkyRkE2N0VCMDRBNkRBQTA1MDA4MDg4MjkKKzoxMDQ2RDAwMDAwOTA4Q0MwQTAyRTYwMEMwQ0U4MTFBNzg4MkY4Mjg1NUEKKzoxMDQ2RTAwMEFERUUwRjRGMEIyRjg2ODUyQjYwMDYyMkU0Q0Y2OEIxMEQKKzoxMDQ2RjAwMDJBMjk2MDE1QzBCMkM5OUFEMkEwMkQ2MTAyMkI2NDA2ODYKKzoxMDQ3MDAwMDBDREQwMjJENjUwMkQxMEZDMEUwMDhBRTM4N0VCMEI3RDcKKzoxMDQ3MTAwMDYzRkZBQjAwMjI2NDA2RDJBMEQxMEYwMEQyQTBEMTBGNUMKKzoxMDQ3MjAwMDAwQ0M1N0RBNjBEQjMwREM0MDU4MDg5REMwMjBEMTBGNDgKKzoxMDQ3MzAwMERBNjA1ODA5MkQ2M0ZGRTgwMDI4MjIxRTI5MjIxRDc4MUYKKzoxMDQ3NDAwMDk5MDIyODBBMDBDMTc2QzFDMUMxRDIxQkUwQTVDMTI0Q0IKKzoxMDQ3NTAwMEFCNkI2NDgwNDM3ODkxNDAyQTgwMDAwQ0FGMEM2NEYwMEUKKzoxMDQ3NjAwMEFFMERBRTBDNjRFMEE4MDJBRjBDNjRGMEEyMDdBRTBDNzQKKzoxMDQ3NzAwMDY0RTA5QzJGQUNFODY0RjA5NjJFQUNFNzY0RTA5MDJGRTgKKzoxMDQ3ODAwMEFDRTY2NEYwOEEyQTgwMDcwOEE4MEIwODhBMDI3QjgzQkIKKzoxMDQ3OTAwMDAyMkE4REY4RDhBMDY1QUZCQkMwOTA2MDAwNzMwMDAwRkUKKzoxMDQ3QTAwMDJCNjAwQzBDQjgxMUE3ODgyRTgyODY2RUU4NzkwOUJBQTYKKzoxMDQ3QjAwMDBBMkFBMkEzNjhBMDA0OEU2MDdBRTk2QjJBODI4NTY0MjMKKzoxMDQ3QzAwMEEwNjUxRkUwOERDMEUzMkU2NDA2OUVBMTlGQTAxRkUwQTAKKzoxMDQ3RDAwMEI5MkU2MDBBOTJBMzBGRUUwMjlFQTI4RTYwMEZFRTAyMjcKKzoxMDQ3RTAwMDlFQTQyRjYwMTQ3QUZGNDcyMkE0MTdBREJFMkY4Mjg1QTYKKzoxMDQ3RjAwMDIyRTRDRjJGRkMxODJGODY4NTYzRkU3MDJBNkM3NEMwQ0MKKzoxMDQ4MDAwMEIxREM5MERENDA1ODA3QTMxREUwNzJDMEMxNjNGRUM0NTcKKzoxMDQ4MTAwMEQ5QTBEQTYwREIzMERDNDBERDUwQzJGMEMxRTAwOUZFMzcKKzoxMDQ4MjAwMDM5NTgwN0VBRDJBMEQxMEZEQTYwNTgwOEVGNjNGRUYwREEKKzoxMDQ4MzAwMDJDQTQxNzBEQkUwODI5ODI4NTIyRTRDRjI5OUMxODI5QjMKKzoxMDQ4NDAwMDg2ODU2NDUwMEMyQTZDNzQwNDRCMDI1ODAxNkJEMkEwMEMKKzoxMDQ4NTAwMEQxMEZDMDIwRDEwRjAwMDA2QzEwMDYyQjIyMUUyODIyODEKKzoxMDQ4NjAwMDFEOTMxMDdCODkwMUMwQjBDMEM5QzAzQkMxRjIwNDA2RDIKKzoxMDQ4NzAwMDQwMURFMDVCQzBFMkMwNzQwNzQ3MDEwRTRFMDFBRDJENDQKKzoxMDQ4ODAwMDlFMTFDMDQwMkUwQTE0NjRCMDZFNkQwODQ0MjgyMjFEOEIKKzoxMDQ4OTAwMDdCODE2NTJBQjAwMDdFQTEzQjdGQTE0NzdCNTEyMDdDQjQKKzoxMDQ4QTAwMEExNDk2OEE5MTc2OEFBMTQ3M0ExMTFDMDlGNzlBMTBDMjYKKzoxMDQ4QjAwMEMxOEI3OEExMDdDMUFFMjkwQTFFMjlCNDAwN0NBMTJCQTcKKzoxMDQ4QzAwMDJBQjAwNzBCQUIwQkRBQjA3REIzMDIyQUJERjhEQkEwMzAKKzoxMDQ4RDAwMENBQTU2M0ZGQjQyOEIwMTA4OTExNjk4N0JCNjQ5RkI4NkIKKzoxMDQ4RTAwMDYzRkZEQzAwNjQ3RkI0NjNGRkQ1MDAwMDY0NkZEMEMwNTkKKzoxMDQ4RjAwMDQxQzFBRTJBQjQwMDYzRkZDNjJCMjEwMkNFQkUyQTIyREMKKzoxMDQ5MDAwMDFEMkIyMjFFN0FCMTJBOEMxMDdDQjEyMTdBQjkwMUMwRUMKKzoxMDQ5MTAwMEIwQzlCOTEzRTAyNkRBMjAyOEIwMDAyQ0IwMDcwMzg4MEMKKzoxMDQ5MjAwMDBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRTdEMjQwRTMKKzoxMDQ5MzAwMEQxMEY4OTEwNjU5RkQ0NjNGRkYzMDAwMDZDMTAwOEMwOEQKKzoxMDQ5NDAwMEQwQzg1OThDMzAyOTIxMDIwQzBDNDc2MDAwMEM4RTMwRTUKKzoxMDQ5NTAwMDBFMUU1MDY1RTE5RTI5MjEwMkMwQzExNkUwMTUwOTBCMEIKKzoxMDQ5NjAwMDRDNjVCMDkwOEEzMDBBNkU1MTY4RTMwMjYwMDA4NTJGNzIKKzoxMDQ5NzAwMDYyOUUxQkUwMEU2RUY4NTMyQkIyMjY2OEIwMDUyRTIyMDUKKzoxMDQ5ODAwMDAwN0JFOTQ3Mjc2MjlEQjc0OENCN0Y5NzEwMkIyMDBDMEYKKzoxMDQ5OTAwMEIwNEUwQ0JGMTFBNkZGMjlGMjg2OUUxMjc5OEI0MTE3RUIKKzoxMDQ5QTAwMEUwMDUwN0I3MEEyNzcyQTM2ODcwMDQ4ODIwNzc4OTMwNkEKKzoxMDQ5QjAwMDI5RjI4NURGOTBENzkwNjU5MDY1MkEyMTA0MTlFMDNDQTMKKzoxMDQ5QzAwMDdBOUIyMkRBMjA1ODA2OUY2MDAwMjkwMDJDMjEwNDFCQzQKKzoxMDQ5RDAwMEUwMzg3Q0JCMThEQTIwQzBCNjU4MDY5QUM5NTg2MDAxODYKKzoxMDQ5RTAwMDRDQzA5MDYzRkZDQ0RBMjA1ODA4N0Y2MDAwMDZEQTIwQzQKKzoxMDQ5RjAwMEMwQjY1ODA4N0Q2NTUxMzVEQzQwREIzMDhEMzBEQTIwOUIKKzoxMDRBMDAwMDBENkQ1MTU4MDZGMkMwRDBEM0EwNjRBMTIwMjkyMTAyMTcKKzoxMDRBMTAwMEMwNTE4NEExOENBMDA0MDQ0NzBDMEM0NzYzRkYzRTAwRTYKKzoxMDRBMjAwMEMwOUM4ODMxREJEMDA4Rjg1MDA4OUIzODI4MjEwNDk4QjYKKzoxMDRBMzAwMDExNkU4ODIzMjgyMDY2QUM4QzBDMEM0NzJDMjQ2NjdDRDUKKzoxMDRBNDAwMEJCMTU5RjEzOUUxNDhBMTA4QjExNTgwNzAyOEUxNDhGNkEKKzoxMDRBNTAwMDEzQzBEMDJEMjQ2NjhBMzBDMDkyQzFDODFCREZFQzdGMDIKKzoxMDRBNjAwMEE2MDk5QkYwOTlGMTJDRjQwODI3RkMxMDY1NTBBNEI4MTYKKzoxMDRBNzAwMDNBREY3MEMwNTFDMDgwMDc1ODM4MDgwODQyNjQ4MDY3MjgKKzoxMDRBODAwMDE4REZDODE5REZDOTI5ODY3RTZBNDIwQUQzMEY2REU5OEIKKzoxMDRBOTAwMDA1MDBBMDg4MDBGMDhDQzBBMDg5MzBCNEUzN0Y5NjI4ODAKKzoxMDRBQTAwMEMwRjIwN0U5MEIyQzk0MDg5QjkwOUY5MTJGMjAwQzEyQzkKKzoxMDRBQjAwMERGQzgwQ0Y4MTFBNjg4Mjk4Mjg1QTJGRjJERjRDRkQyNzkKKzoxMDRBQzAwMEEwMDkzMzBCMjM4Njg1RDEwRjIyMjAwQzg5MTIxOERGMTEKKzoxMDRBRDAwMEMwMEMyQjExQTZCQkE4MjIyRDI0Q0YyQ0IyODVEMkEwQUUKKzoxMDRBRTAwMDBDOTkwQjI5QjY4NUQxMEZDMDg3QzA5MDBBNTkzODc5MjcKKzoxMDRBRjAwMDgwOTY2M0ZGOEFEQjMwREEyMEMwQzFDMEQwNUJGRjU2RUUKKzoxMDRCMDAwMDI5MjEwMkMwRDAyQTlDRkU2NUFFNEQyRDI1MDJDMDkwMDEKKzoxMDRCMTAwMDYzRkU0NTAwOUUxNDJBMkM3NEMwQjFEQzcwREQ0MDU4NDEKKzoxMDRCMjAwMDA2REQ4RTE0QzBEMDFCREZCOUMxQzg2M0ZGNkFDMDIwODgKKzoxMDRCMzAwMEQxMEYwMDAwNkMxMDA2MjgyMTAyMTZERjlEMDgwODRDREEKKzoxMDRCNDAwMDY1ODIxOTI5NjI5RTZGOTgwMjYwMDIyMDE5REY5ODI5RjgKKzoxMDRCNTAwMDkyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMjBGMjc2MjlERjkKKzoxMDRCNjAwMEMwQ0M2NDcyMDcyQjIxMDQ4RTMxQzBBMEREQTAwRUZFRTQKKzoxMDRCNzAwMDUwMEVDRDM4NkVCODEwMkMyMDY2QjFDQzBDMEM0NzJDRTIKKzoxMDRCODAwMDI0NjY3Q0RCMDI2MDAxRUZDMEMxMjkzMDA4MUJERjhBOEMKKzoxMDRCOTAwMDY0OTA5QzJGMEFGRkMwRDNCMDlFNjRFMTAyNjg5MjEzMTgKKzoxMDRCQTAwMDY0NTA4ODJBMkM3NDA0NEIwMjU4MDA5MzBBQTIwMjA2MEYKKzoxMDRCQjAwMDAwMDAwMDAwMkIyMDBDMjcyMTA0MENCQzExQTZDQzI5REUKKzoxMDRCQzAwMEMyODYyODBBMDg3OTgzMDI2MDAxQjkxOURGN0EwOUI5MTcKKzoxMDRCRDAwMDBBMjk5MkEzNjg5MDA4MkUyMjAwMDlFRTBDNjVFMUE0MzAKKzoxMDRCRTAwMDJFQzI4NTY0RTE5RTI2MjAwNzEzREY4MzZFN0IwMjYwNjAKKzoxMDRCRjAwMDAxOUExN0RGN0ExRkRGODMxOURGQjBDMEQyMjgyMDBBOUQKKzoxMDRDMDAwMDkzRTA5REUxQTk2OTBGODgwMjk4RTIyRjkwODAyQTk0OTEKKzoxMDRDMTAwMDgwQjFGRjA3RkYwMjlGRTMyRUMyODUxRkRGNkQwRURFMEUKKzoxMDRDMjAwMDBCQUZCRjJBRjRDRjJFQzY4NTY1NUY3NkMwMjBEMTBGQUIKKzoxMDRDMzAwMDI4MzAxMDI5MzAxMTJFMzAxMzAwOTkzMjAwRUQzMjY0RTMKKzoxMDRDNDAwMDgwRUUyQTMwMTQxRkRGOUQwMEFBMzI3OEVGMDUwRjlFRjgKKzoxMDRDNTAwMDA5MkRFNDdGMUVERjlCNjZBMDA1MEY5ODA5MkE4NDgwM0EKKzoxMDRDNjAwMEI0QTcxOERGOThDNzZGMDA5MTA0QUU5RURERTAwMEFGRDcKKzoxMDRDNzAwMDFBMDBDMzFBNkVFMTA1MkRCMjAwMERFRDBDMUVERjkyNzUKKzoxMDRDODAwMDA4RDgxQzA2MzMwM0FFODgyQTg0OEIyRUIwMkUyNzg0QzYKKzoxMDRDOTAwMDhDMDNFRTAxMEZFRTAyMkVCNDJFNTgwMThGNjNGRUZGM0YKKzoxMDRDQTAwMDI5MzEwODI5MjUwNDI4MzAxNDJFMzEwOUIwODg2NDgwNjAKKzoxMDRDQjAwMEEzMkUyNDBBQzA4MTJFMzAxNjJDQjQyMzJFMjQwQkI0MkMKKzoxMDRDQzAwMEVGMkYyNDBDOEMzNzhCMzYyOTI1MDRERUIwREZDMDBDODcKKzoxMDRDRDAwMDhGMzkwQjhFMzkwRkVFMDI2NEVFQzQwODlGMTEwMUM0QTgKKzoxMDRDRTAwMDA0OEQzODBDQjgxODAwQzQwNDBDQkUxODAwRUUxMTBFNjgKKzoxMDRDRjAwMEREMDJDMEUzMEVGRjAyMUVERjY2OUY3MTlFNzAxRURGQTUKKzoxMDREMDAwMDY1OEYyMDk4NzM5RDc0MDVGRjExMEJDRDUzQzE4MDk4NUEKKzoxMDREMTAwMDc1MEZERDAyMEVERDAyOUQ3MjFFREYyNDJBMjQ2NjJGMzAKKzoxMDREMjAwMDYyOUQyQUU0QTIyRkZDMTgyRjY2OUQ2M0ZFNzEwMDAwOEQKKzoxMDREMzAwMDAwMkYzMDEyMUJERjY2MDBGQTMyNzhGRjA1MEI5ODBCNEMKKzoxMDRENDAwMDJBODQ3RjY2RDAwNTBCOUEwQjJEQTQ4MDJBMzAxMTAwOEYKKzoxMDRENTAwMEFBMzI2M0ZGNDQyRjI0MEE5RTJCNjNGRjU2Q0M1N0RBRjYKKzoxMDRENjAwMDIwREIzMERDNDA1ODA3MEVDMDIwRDEwRjAwREEyMEMwMTUKKzoxMDRENzAwMEI2NTgwNzlENjNGRkU1MDBEQTcwNTgwNjM2QzBBMDJBRDIKKzoxMDREODAwMDI0NjY2M0ZFMDJEQTIwNTgwNzk4NjNGRkNGQjE2OTI4RDIKKzoxMDREOTAwMDIwMEE4NjIwMDkwOTQ3OTkxMTI5MjQwNzk4MTA3RjgxNDQKKzoxMDREQTAwMDI2OTNFMDI3RTUwQTlBRTM4ODEwOURFMTE5REY0MjhERkEKKzoxMDREQjAwMDExMDk2RjAyOUZFNDJERTQxNjA5ODgwMkMwRDM5OEUyMUUKKzoxMDREQzAwMDJBMjQwNzYzRkU1MTAwMDAxRERGMEIwODY4MTE4RjExQjQKKzoxMDRERDAwMDg5MkI5M0UwMDhGRjAyQzA4RjlGRTUwRDk5MDI5OUUyQUQKKzoxMDRERTAwMDA0N0YxMUMwRDQ5REUxMDhGRjAyOUZFNDYzRkZEMDAwNUYKKzoxMDRERjAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQ4NTIxMEQzODExRjcKKzoxMDRFMDAwMDE0REVFOTg2MjJBNDI0MDg2NjBDOTYyMjA1MzMwQjkzNEYKKzoxMDRFMTAwMDIxNzQzQjEzQzg2MkQyMzBEMTBGQzAzMEJDMjk5OTIxMTQKKzoxMDRFMjAwMDk5MjA5MzIyRDIzMEQxMEYyMzNERjg5MzIxNjNGRkUzRTEKKzoxMDRFMzAwMDZDMTAwQUQ2MjA5NDE4MTdERURFRDkzMEI4Mzg5ODE5Q0QKKzoxMDRFNDAwMDk5MTQ2NTUyNTJDMEUxRDJFMDJFNjEwMjFEREVEQjBFRTQKKzoxMDRFNTAwMDBFNEM2NUUxNjI4RjMwOEUxOTBGNkY1MTJGRkNGRDY1OEUKKzoxMDRFNjAwMEYxNTU4RUUxMjlEMDIzMEU4RjUwNzdFNjZCOEYxODFFRjcKKzoxMDRFNzAwMERGMThCMEZGMEZGNDExMEYxRjE0NjU5MENFMThERjE1NjcKKzoxMDRFODAwMDhDNjBBOENDQzBCMTE5REVDOTI4NjAwQjA5Q0MwQjBEMTEKKzoxMDRFOTAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBNjUKKzoxMDRFQTAwMDM4MUJERjBCMENBOTBBMjk5Mjk0N0I5QjAyNjAwMDhDQjMKKzoxMDRFQjAwMDJCNjAwQzk0MTYwQ0JEMTFBN0REMjlEMjg2Qjg0ODc5NTkKKzoxMDRFQzAwMDgzMDI2MDAwRDIxOURFQkIwOUI4MEEyODgyQTM5ODE3QjIKKzoxMDRFRDAwMDY4ODAwMjYwMDBBMzYwMDBBNTFBREVGRjg0MTgwQUVFNTUKKzoxMDRFRTAwMDAxQ0E5ODFCREVCMjhDMTkyQkIwMDA4Q0MwNkVCMzEzQjQKKzoxMDRFRjAwMDFEREVBRjBDMUM1MjBEQ0MwQjJEQzI5NUMwQTE3RURCNkMKKzoxMDRGMDAwMEFFNjAwMDM4MEMwQzUzNjAwMDA5MDAwMDAwMThERUYxQTAKKzoxMDRGMTAwMDhDNjBBOENDQzBCMTE5REVBNTI4NjAwQjA5Q0MwQjBEQTQKKzoxMDRGMjAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBRDQKKzoxMDRGMzAwMDM4MENBOTBBMjk5Mjk0N0U5MzAyNjNGRjcyREE2MEMwNEEKKzoxMDRGNDAwMEJBNTgwNzI5NjQ1MDczNjAwMjY2MDAwMDFBREU5ODhDMTQKKzoxMDRGNTAwMDE5MkFBMDAwOENDMDZFQTMxQTE4REU5NDBDMUM1MjA4RUIKKzoxMDRGNjAwMENDMEIxOERFREIyQkMyOTVDMEExNzhCMzAyNjNGRjNGRTgKKzoxMDRGNzAwMDYzRkZDOTAwMEMwQzUzNjNGRjA5ODk2MDc4OTkxODI5RjUKKzoxMDRGODAwMEQyODVDOTkyMkI3MjlFMURERTg5NkVCODIzMkREMjI2NDIKKzoxMDRGOTAwMDk5MTM2OUQwMEI2MDAwMEREQTYwNTgwNzEzNjAwMDE3OTEKKzoxMDRGQTAwMDAwODg2MDdEODkwQTlBMUEyOTcyOUQ5QzEyOTkxNUNGRjIKKzoxMDRGQjAwMDk1REE2MEMwQjY1ODA3MEM2NTUxRjU4RDE0OEMxOERCNzYKKzoxMDRGQzAwMEQwOEREMDA2NkEwMjBENkQ1MTU4MDU4MEQzQTA5QTE0NzkKKzoxMDRGRDAwMDY0QTFERDgyQTA4NUExQjhBRjlGMTkwNTA1NDcwMjAyMzMKKzoxMDRGRTAwMDQ3OTUxOEMwNTE2M0ZFNjAyQjYxMDRDMDhDODkzMUMwQTUKKzoxMDRGRjAwMEEwMDlGOTUwMDk4QTM4NkVCODFGMkM2MDY2QTJDQzBDNDMKKzoxMDUwMDAwMDBDNDcyQzY0NjY3Q0FCMTE5RjExOUUxQjhBMTU1ODA1QkEKKzoxMDUwMTAwMDkxOEUxQjhGMTFDMEEwMkE2NDY2OUYxMTY0RjBFMTI5NTQKKzoxMDUwMjAwMDEyMDMyODEyMDk2REY5MTcyRjgxMDMwMDkwOERBRUZFMkYKKzoxMDUwMzAwMDAwODA4ODlGOTIwMDkwOEMwMDgwODhCODk5MDA5MDhDQTYKKzoxMDUwNDAwMDY1NTE0RThBMTA4NTFBOEIzMDFGREU2Qjg4MTIyOTYwREQKKzoxMDUwNTAwMDA3MDg1ODBBMkM4Mjk0MkQ2MTA0MEVDQzBDMkM4Njk0REYKKzoxMDUwNjAwMDZGREIzQzFDREU5NUFDOUMyOUMwODAwQjVENTBBMjk5ODcKKzoxMDUwNzAwMDA5MDk0NzI5QzQ4MDY1RDBEQTJFNjAwQ0MwRDAxRkRFMzQKKzoxMDUwODAwMDU0MENFODExQUZFRUE3ODgyMjgyODUyREU0Q0YwMjQyQUUKKzoxMDUwOTAwMDBCMjI4Njg1RDJBMEQxMEY4RTMwMEUwRTQ3NjNGREE2NUYKKzoxMDUwQTAwMEEyOUMwQzBDNDcyQzY0MDc3QUI2Q0Q4QjYwMkU2MDBBNEMKKzoxMDUwQjAwMDI4MEFGRjA4RTgwQzY0ODEwRTE4REU3RTgzMTY4MjEzMkUKKzoxMDUwQzAwMEIzMzkwMjMzMEIyQzM0MTYyRDM1MEFDMDIzOTIzMTlGOEQKKzoxMDUwRDAwMDMwQzAyMDkyMzMwOEIyMDIwOEU4MDI5MjM0OTgzMkMwRkQKKzoxMDUwRTAwMDgwMjg2NDA3MkI2MDBDRDJBMDFDREUzOTBDQkUxMUE3RUYKKzoxMDUwRjAwMEVFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQjJERTY4NUQxRkUKKzoxMDUxMDAwMDBGOEIxODg4MTM4RDMwQjg4QzBEOEY0NzBENDk1MEI0MTQKKzoxMDUxMTAwMDk5MDQ5OTEwMEQwRDVGMDRERDEwMDlGRjAyOUY4MDBEQTkKKzoxMDUxMjAwMEJCMDI5QjgxNjU1MDhEODUxQUI4M0FDMEYxQzA4MDBDRDYKKzoxMDUxMzAwMEY4MzgwODA4NDI2NDgwNkIxQkRFMUExOURFMUIyOUI2OUEKKzoxMDUxNDAwMDdFOEQxOEIwREQ2RERBMDUwMEEwODgwMEMwOENDMEEwOEYKKzoxMDUxNTAwMDYzRkVGMzAwODIxMzhCMTYxRERFMkIyODYwMEFDMEUwNkQKKzoxMDUxNjAwMDJFQzQ4MDBEODgwMjAyQjIwQjk5MjM5RjIwQzBEMjk4RDIKKzoxMDUxNzAwMDIyOUQyMTIyNjAwQ0IyQkIwQzJEMTFBN0REMjhEMjg1MDcKKzoxMDUxODAwMDA4QkIwQjE4REUxMzJCRDY4NUE4MjIyRTI0Q0ZEMkEwNjUKKzoxMDUxOTAwMEQxMEY5RTFCODUxQTJBNkM3NDhCMTg1QkZGMTc4RTFCMTAKKzoxMDUxQTAwMDYzRkVBMzAwQzA4N0MwOTAwQUY5Mzg3OTgwOTI2M0ZGM0MKKzoxMDUxQjAwMDg2QzAyMEQxMEY5RTFCMkE2Qzc0QzBCMThEMTg1ODA1NzMKKzoxMDUxQzAwMDM1OEUxQjg1MUE2M0ZFN0U4ODZCODIxMzg5MTYwOEJFOTYKKzoxMDUxRDAwMDExMEVDRTAyMDI5MjBCOUUyNUI0OTkxRURFMDY5RjIwNzAKKzoxMDUxRTAwMDBFODgwMjk4MjJDMEVGMDREODExMEU4ODAyOTgyNEMwQkQKKzoxMDUxRjAwMEU0OUUyMUMwODBEMkEwMkI2MDBDMjg2NDA3MUNEREY0NDMKKzoxMDUyMDAwMDBDQkUxMUE3RUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCRDMKKzoxMDUyMTAwMDJERTY4NUQxMEYwMDAwMDA2QzEwMDRDMDIwRDEwRjAwRDYKKzoxMDUyMjAwMDZDMTAwNDg2MzNDMDcxQzAzMDYwMDAwMUIxMzMwMDMxQUUKKzoxMDUyMzAwMDA0MDA3NDFBMDQ2MjAxNzQ2MEYxRDEwRjZDMTAwNDAyNEUKKzoxMDUyNDAwMDJBMDIwMzNCMDI1QkZGRjYxQ0REREMxQkRFMjRDNzlGNEEKKzoxMDUyNTAwMDg4QjAwOUE5MDMwOThBMDE5QUIwNzk4MDFFQzBGMDBGQUQKKzoxMDUyNjAwMEU0MzExRERERDMwMDAyMDAyQkQyODIxRURFMUQyQUMxRDcKKzoxMDUyNzAwMDAyMEVCQjAyMkJENjgyMEFFNDMxRDEwRjI4QzEwMkMxMzMKKzoxMDUyODAwMDkwMDk4ODAyMDgwODRGMjhDNTAyMDhFNDMxRDEwRjAwQjAKKzoxMDUyOTAwMDZDMTAwNEMwQzAwQ0U0MzExMkREQzgxQUREQzUwMDAyNzgKKzoxMDUyQTAwMDAwMjlBMjgyMThERTExMUJERTBGMjYyMTAyMEI5OTAxQjQKKzoxMDUyQjAwMDA4NjYwMTI5QTY4MjI2MjUwMjA2RTQzMTE0REUwQzE1QjMKKzoxMDUyQzAwMERFMDcyMzZBOTAyMzI2MTI4NTUwMjQyNjExMjUyNjEzRjMKKzoxMDUyRDAwMDIyMkM0MEQxMEYwMDAwMDA2QzEwMDhENjEwMkIwQTY0NUQKKzoxMDUyRTAwMDI5MUFCNDFBRERCMjBEMjMxMTFDRERCMzBGMjUxMUI4MzQKKzoxMDUyRjAwMDE4OTgxMzBFNTUxMTE4RERGRUFDNTVBODM4QUEzMzJDOUEKKzoxMDUzMDAwMDgwRkYyQTgwRkVBOTMzMjg4RDAxMjk4MDAxMDhBQTExNzcKKzoxMDUzMTAwMDI4ODAwMDBDQUEwMjA4ODgxMTA5ODgwMjA4QUExQzI4MDMKKzoxMDUzMjAwMDhDMDgyODE2MDQ1ODA4NEMxNEREQTQwQUE3MDIyNDQxNEUKKzoxMDUzMzAwMDE2MkEzMDgwMkIxMjA0MDdBQTI4NTgwODQ3QjEzMzhCNEQKKzoxMDUzNDAwMDEzQjQ1NTlBNjAwNEFDMjhCNDY2MkM1NjI3N0I2OUUwRTgKKzoxMDUzNTAwMDE2REREQjk0MTJDMDUwQzBEMDE3REQ5NzlEMTVEMzcwQjkKKzoxMDUzNjAwMEQ0MTAyRjYwODAyRTYwODI5RjE2OUUxNzg4MTY3Mjg5MzcKKzoxMDUzNzAwMDFBOEQxMjhDNDAyQTYwN0YwRENDMjgyQjNBMjAwQ0FBNjMKKzoxMDUzODAwMDI4NTgwODM1QzBCMTBBQkUzNzJFMzU0MDhGMTc3MkY5M0MKKzoxMDUzOTAwMDFBOEQxMjhDNDAyQTYwODEwRENDMjgyQjNBMjAwQ0FBNDEKKzoxMDUzQTAwMDI4NTgwODJEQzBCMTBBQkUzNzJFMzU0MkIyMzNCNDQ0NTYKKzoxMDUzQjAwMEIxNTU2OTUyQjZCNDY2QzA1MDhGMTVCODc3RDM3MEIyODQKKzoxMDUzQzAwMEZGOUYxNTZFRjg5OUQxMEY2QzEwMDRDMDIxRDEwRjAwMEEKKzoxMDUzRDAwMDZDMTAwNDI3MEEwMDFDREQ3NjFGREQ4NzFFREQ4QTFEODgKKzoxMDUzRTAwMERENzMxQUREQjUxQkREQzNDMDI4MjRCMDAwNkQyQTc1M0UKKzoxMDUzRjAwMEFBNDgyODgwODBDMDkxNjQ4MDYxMDA0MTA0MTVERDZFNTgKKzoxMDU0MDAwMEMwMzEyNTUwMkUwMDM2MUEwNjU1MDEwNTk1MzkwQzU2MjcKKzoxMDU0MTAwMDExMEM2NjA4Mjk2Mjk2NkU5NzREMEQ1OTBBMjk5MjI0M0YKKzoxMDU0MjAwMDY4OTAwODEyRERBNzAyNDIwODcyOTkzQjIzNjI5NTEyMjgKKzoxMDU0MzAwMERENkJDQjM0OUYzMDAyODIwMjBFNDQwMkMwOTI5OTMxNjAKKzoxMDU0NDAwMDk0MzI5MjMzQUQ1MjI0NjI5NUMwOTAyNDRDMTAyNDY2NUQKKzoxMDU0NTAwMDk1MjRCMDAwMjkyNEEwQUE0MjI5MjQ4MEIxNzdCMTQ0MjAKKzoxMDU0NjAwMDA0MDQ0MjI0QjQwMEQxMEZEMTBGRDEwRjZDMTAwNDFBRTAKKzoxMDU0NzAwMERENEYyQUEwMDA1ODAyMUM1QkZGRDUwMjJBMDIwMzNCMjUKKzoxMDU0ODAwMDAyNUJGRkQxMUJERDREQzlBMTJDQjEwMkMwRDQwRENDRjQKKzoxMDU0OTAwMDAyMEMwQzRGMkNCNTAyMENFNDMxRDEwRkMwQTAwQUU0NzEKKzoxMDU0QTAwMDMxMThERDQzMDAwMjAwMkY4MjgyMTlERDU2MkVCMTAyMzEKKzoxMDU0QjAwMDA5RkYwMjJGODY4MjBFRTQzMUQxMEYwMDZDMTAwNEMwNjgKKzoxMDU0QzAwMDIwMDJFNDMxMTRERDNEMTZERDNBMDAwMjAwMjI2MjgyNDIKKzoxMDU0RDAwMDIzNDEwMjczMkYwNjAzRTQzMUMwMjBEMTBGMTlERDg3NjkKKzoxMDU0RTAwMDFBREQ4NjI4NDEwMjBBMkEwMTA5ODgwMTJBNjY4MjI4RDMKKzoxMDU0RjAwMDQ1MDIwOEU0MzExNUREN0QxMkREODIyNTQ2MUREMTBGMDAKKzoxMDU1MDAwMDZDMTAwNDI5MjAwNjI4OUNGOTY0ODBBMDJBOUNGRDY1NjMKKzoxMDU1MTAwMEEwOTY4QTI4OEQyNjJGMEEwODdBRDkwNDJCMjIxRkM4MjQKKzoxMDU1MjAwMEJEMkMyMDY0NjRDMDgxMkUyMjA5MEVBRTBDNjZFMDc4OEEKKzoxMDU1MzAwMDJCMjAwQzFFREQxRjBDQkMxMUFFQ0MyOEMyODYxOURENDEKKzoxMDU1NDAwMDFENzhGMzAyNjAwMEFEMDlCOTBBMjk5MkEzNjg5MDA4OUEKKzoxMDU1NTAwMDJFMjIwMDA5RUUwQzY1RTA5QjI5QzI4NTFGREQyNzY0MjEKKzoxMDU1NjAwMDkwOTI5RjkwQzBFNDFGREQzNDlFOTEyODIwMEFDMEUwRjUKKzoxMDU1NzAwMDlFOTMwRjg4MDI5ODkyODgyMDBGODgwMjk4OTQyRjIwN0IKKzoxMDU1ODAwMDA3OUE5NzlEOTYyRjk1MEEyRTI0MDcyODIwMDYyOTIwRjIKKzoxMDU1OTAwMDY0Njg4MzMzMjhDMjg1MTJERDBFMjg4QzIwQTJCMjJFQzcKKzoxMDU1QTAwMDI0Q0YyOEM2ODVDMDIwRDEwRkMwMjBEMTBGMkEyMDZBNjEKKzoxMDU1QjAwMDAxMTEwMjBBMkE0MTY1QUY1MkRBMjBDMEIwNTgwNUQxNjQKKzoxMDU1QzAwMDY0QUZFNUMwMjFEMTBGMDA2NDlGQzgxRkRDRkIyRDIwMTQKKzoxMDU1RDAwMDE2OEZGMjA5REQwQzAwRjEwNDAwREQxQUFEQUQ5RDI5MzYKKzoxMDU1RTAwMDEyRENGQzI4QzI4NUEyQjIyRTI0Q0YyODhDMjAyOEM2MkIKKzoxMDU1RjAwMDg1QzAyMEQxMEZDMDIxRDEwRjAwMDAwMDZDMTAwNDI2RkYKKzoxMDU2MDAwMDBBMDAxQkRENDAxNURDRUMyODIwNjUxN0RDRTkyODhDM0UKKzoxMDU2MTAwMEZFNjQ4MDk0MEM0RDExMERCRDA4MkNEMkY1MkJEMkY0RjQKKzoxMDU2MjAwMDJFRDJGNzdDQjEzREI0QkIyQkQ2RjQ3QkU5MDUyQkQyNEYKKzoxMDU2MzAwMEY2MkJENkY0N0NCOTJDMkFEMkY2MkFENkY1MkFENkY0NDMKKzoxMDU2NDAwMDA2RTQzMTAwMDIwMDI4NzI4MjJBRkFGRjAwNDEwNDI5OTAKKzoxMDU2NTAwMDBBMDEyRjUxMDIwMDk5MUEwQTk5MDMwOTg4MDEyODc2MzQKKzoxMDU2NjAwMDgyMEZFNDMxMjYyNDY1MkJEMkY0OEU1QTJDRDJGNUIwNjkKKzoxMDU2NzAwMEVFOUU1QTdCQ0IxNjI5RDJGNjJGRDJGNzBDQjgwQzA5MjYKKzoxMDU2ODAwMEZGMEMwOEZGMEMwRjJGMTRDOEY5NjAwMDMyMEJDQTBDNzYKKzoxMDU2OTAwMDBBMkExNENFQTkyQjUxMDJDMEMyMENCQjAyMEIwQjRGMUQKKzoxMDU2QTAwMDJCNTUwMjBCRTQzMUQxMEYwMERCMzBEQTIwNUJGRjk0ODUKKzoxMDU2QjAwMDFCREQxNTY0QUY1RDBDNEQxMUFEQkQ2M0ZGQTgwMDAwOEYKKzoxMDU2QzAwMDA2RTQzMTAwMDIwMDJGNzI4MjE4RENENDJFNTEwMjA4NDkKKzoxMDU2RDAwMEZGMDIyRjc2ODIwRUU0MzFEMTBGMDAwMDZDMTAwNEMwNUYKKzoxMDU2RTAwMDMwMDNFNDMxMTZEQ0IzMTVEQ0I0MDAwMjAwMjQ2MjgyMUUKKzoxMDU2RjAwMDc0NDcyMTE4REQwNTg3NUEwODQ4MDEyODY2ODJDRDczNTIKKzoxMDU3MDAwMDE5REQwMzBDMkExMUFBOTkyMjkyODMyOTkyODQ3MjkxOUQKKzoxMDU3MTAwMDAzODIyMENDMjkyQjUxMDIwQkU0MzFDMDIwRDEwRjAwOTEKKzoxMDU3MjAwMDFGRENGQzJFNTEwMjBGRUUwMTJFNTUwMjBFRTQzMUIwQUIKKzoxMDU3MzAwMDJEQjE3QzlDNUExMkRDRjcwOEREMTEyRDU2MTlEMTBGQzIKKzoxMDU3NDAwMDZDMTAwNjFCREM5QTFFREM5QzIyQjAwMDFBRENGMzZGODYKKzoxMDU3NTAwMDIzNzIxRERDREFDMDQ4MThEQ0YyMUZEQ0YwREMxMEQ1NDcKKzoxMDU3NjAwMEMwODNGMDAwODA4NjAwNTA4QTZENEE0RjBGMzUxMTBEQkUKKzoxMDU3NzAwMDM0MDkyNDQwODAwQjU2MEEyOTYyOTRCMTMzMEU1NTA5MkUKKzoxMDU3ODAwMDIyNTE0MDBGNDQxMTBDNDQwQTg3NDAwOUE4MEMwMjg4OUEKKzoxMDU3OTAwMDM2MjI1MTQxMDc4ODM2MDg3NzBDQTg5OTI5NjY5NDk3RDQKKzoxMDU3QTAwMDQwMjk2Mjk1ODc0MTA5QTgwQzAyODgzNjA3ODgzNjA4ODcKKzoxMDU3QjAwMDc3MENBODk5Mjk2Njk1OTc0MTAzMDM0MkIxMzgwODA4RTgKKzoxMDU3QzAwMDQyOThGMEQxMEYxQ0RDRDcxM0RDRDgyN0IwMDAyMzMyNkQKKzoxMDU3RDAwMEI1NjQ3MDU3QzA5MUMwRDAxNkRDRDYxNURDRDRDMDQwN0IKKzoxMDU3RTAwMDJBQzAwMDAzODg0MzI4QzQwMDZENzkzQzAwNDEwNEIxRkQKKzoxMDU3RjAwMDQ0MDA5NzFBNzc4MDE0OEU1MDJGQjI5NTJEQjY5NUFGMkUKKzoxMDU4MDAwMEVFMkVFRDIwMDZFRTM2OUU1MDYwMDAxODc3QTAwOTgzM0MKKzoxMDU4MTAwMDUwOUQ1MDIzQjY5NTYwMDAwMjIzQjI5NTIyM0QyMDA2OEMKKzoxMDU4MjAwMDIyMzYyMkI2OTVCNDU1QjhCQkQxMEYwMDAzODg0MzI4NjEKKzoxMDU4MzAwMEM0MDBEMTBGNkMxMDA0QzA0MDA0RTQzMTE1RENCRTAwN0MKKzoxMDU4NDAwMDAyMDA4ODUwMTNEQ0JEQ0I4MTVCRkZCRDFDRENCQzBDQUYKKzoxMDU4NTAwMDJEMTFBRENDMkJDMjgyMkFDMjgzOTQ1MDdCQUIxNDJFNjcKKzoxMDU4NjAwMEMyODQyOUMyODUwQUJEMEMwRTk5MEMwRDk5MEMwOTI5MTgKKzoxMDU4NzAwMDE0NjAwMDA1MEJBOTBDMDkyOTE0OTkzMDE1REM0RjJBNzYKKzoxMDU4ODAwMDUxMDIwQUU0MzEyQTJDRkM1ODAwNEIyQjMyMDAwQUEyQTgKKzoxMDU4OTAwMDAyMkJCQ0ZGOUIzMENDQjZDOEE0RDJBMEQxMEYwMDAwMTUKKzoxMDU4QTAwMDA0RTQzMTFFREM0MzAwMDIwMDJERTI4MjJGQkFGRjJDRkIKKzoxMDU4QjAwMDUxMDIwRkREMDEyREU2ODIwQ0U0MzFEMTBGMDAwMDAwMTIKKzoxMDU4QzAwMDZDMTAwNEQxMEYwMDAwMDA2QzEwMDRDMDIwRDEwRjAwMzgKKzoxMDU4RDAwMDZDMTAwNDEzREM5QkMwRDEwMzIzMDkyMzMxOERDMEEwQkQKKzoxMDU4RTAwMDZGMzQwMjYwMDA4RDE5REMzMjFCREMzMzE3REM5NDBDNDIKKzoxMDU4RjAwMDI4MTFBODc3MjY3MjgzMjU3MjgyMkNGQUZGNzY1MTQ3RTkKKzoxMDU5MDAwMDg4NTAyRTcyODUyNTVDMDQyNTc2ODI3NUU5MDUyNTcyRkUKKzoxMDU5MTAwMDg0MjU3NjgyNzY1OTI5MkU3Mjg0MkU3NjgyMkU3NjgzN0QKKzoxMDU5MjAwMDBBRTQzMTAwMDIwMDIzOTI4MjAwMjEwNDJGQjEwMjAwMTgKKzoxMDU5MzAwMEQ2MUEwQzY2MDMwNjMzMDEyMzk2ODIwRkU0MzEyNjcyRDEKKzoxMDU5NDAwMDgzMjU3MjgyNjAwMDAyMDBEOEEwNzY1OTIyMEFFNDMxRDEKKzoxMDU5NTAwMDAwMDIwMDIzOTI4MjAwMjEwNDAwRDIxQTJGQjEwMjBDMEYKKzoxMDU5NjAwMDIyMDMwMjMyMDEyMjk2ODIwRkU0MzFEMjgwRDEwRjAwNEQKKzoxMDU5NzAwMEQyODBEMTBGQzAyMEQxMEY2QzEwMDREQjMwODYyMDE1RUYKKzoxMDU5ODAwMERDMEIyODBBMDAyODI1MDJEQTIwMjhCMDAwMkNCMDA3RkEKKzoxMDU5OTAwMDA1ODgwQTI4ODI0QzJEMEEwMTBCODAwMERCQTA2NUFGMjgKKzoxMDU5QTAwMEU2MUFEQzA0MEE0QTBBMjlBMkEzQzdCRjc2OTEwMUQxRUMKKzoxMDU5QjAwMDBGMkJBNkEzRDEwRjAwMDA2QzEwMDRDMEQxQzdDRjFCQzIKKzoxMDU5QzAwMERCRkUxOURCRkIxN0RCRjkwQzI4MTFBODc3ODY3NTg1NDAKKzoxMDU5RDAwMDc0QzBBMDc2NTE2Mjg4NTA4RTc3QjQ1NTk1NzQ3NUU5N0QKKzoxMDU5RTAwMDAzODU3Njk1NzQ3NjU5Mjc4Rjc2OUY3NTlGNzQwQUU0QTAKKzoxMDU5RjAwMDMxMDAwMjAwMjM5MjgyQjQyRTJGQjEwMjAwRTEwNDAwOTQKKzoxMDVBMDAwMEQ2MUEwQzY2MDMwNjMzMDEyMzk2ODIwRkU0MzE4Njc1OUQKKzoxMDVBMTAwMDgzNzQ3NjM5MjgwQUU0MzEwMDAyMDAyRTkyODJCNDIyN0YKKzoxMDVBMjAwMDAwMjEwNDI0QjEwMjAwREYxQTBDRkYwMzBGRUUwMTJFNDcKKzoxMDVBMzAwMDk2ODIwNEU0MzFEMjgwRDEwRkQ4QTA3NjUxRDZEMjgwOUMKKzoxMDVBNDAwMEQxMEYwMDAwNkMxMDA0MjkwQTgwMUVEQzAwMUZEQzAwNEUKKzoxMDVBNTAwMDFDREJEODBDMkIxMUFDQkIyQzJDRkMyREIyODUwRkNDMzUKKzoxMDVBNjAwMDAyOUVEMTlDRDBDMDUxQzA3MDEzREJGQzE0REJGQjE4MkMKKzoxMDVBNzAwMERCRjkyQUIyODVBODI4MDQyNDBBMjM0NjkxQTk4NkI4MEUKKzoxMDVBODAwMEFBMkFCNjg1QTk4ODI3ODQ5RjI1NjQ5RkQxMEYwMDAwODQKKzoxMDVBOTAwMDZDMTAwNDE5REMyQzBDMkExMUE5QTk4OTkwQzQ4NDc5RjIKKzoxMDVBQTAwMDhCNzYxQkRDMUFBQkFDMkFDMjgzMkNDMjg0N0FDMTY4MDkKKzoxMDVBQjAwMDhBQTAyQkJDMzBEM0EwNjRBMDVFMEIyQjBBMkNCMkEzMEYKKzoxMDVBQzAwMDE5REJFNTY4QzAwNzFEREMyMEQzMEY3REM5NEFBOTI5NzEKKzoxMDVBRDAwMDI5OUQwMTI5OTAxRjY4OTEzMjcwQTYwM0QzQTBDQTlFMDgKKzoxMDVBRTAwMDY4OTIxMEM3QUYyQUI2QTMyQTJDRkM1QkZGQjNEMjMwNTIKKzoxMDVBRjAwMEQxMEYwMDAwMTNEQkM1MDNBMzAxOEMzMTFEREJCNjBDRjUKKzoxMDVCMDAwMDhDMTQwRENDMDEyQ0I2QTM2M0ZGREMwMEMwMjBEMTBGOTgKKzoxMDVCMTAwMERBMjA1QkZGQ0NDMDIwRDEwRkMwMjBEMTBGMDAwMDAwRTUKKzoxMDVCMjAwMDZDMTAwNERCMzBDMEQwMTlEQkExREEyMDI4MzAwMDIyNTEKKzoxMDVCMzAwMDMwMDcwODQ4MTIwOTg4MEEyODgyNENEQzIwMEI4MDAwQjQKKzoxMDVCNDAwMDFCREI5QzBDNEExMUFCQUEyOUEyODQwOTI5MEIyOUE2QUMKKzoxMDVCNTAwMDg0RDEwRjAwNkMxMDA0QzA0MTE4REI5NTE3REI5NzBDNDMKKzoxMDVCNjAwMDI2MTFBNzI3Mjc3MDMwQTg2NjI1NjI4NjAwNzEwNEEzMzYKKzoxMDVCNzAwMDU1MDA0NDFBNzU0MTQ4MjI2Mjg0MTVEQkI4MDIzMjBCODUKKzoxMDVCODAwMEM5MjI4ODIxMTdEQjk0MDg4NDE0MDc0NDAxNzU0OTA1NEMKKzoxMDVCOTAwMEM4MzRDMDIwRDEwRkQxMEYwODA5NDcxRERCRUJDMEIyQkMKKzoxMDVCQTAwMDhFMjAxRkRCODIwRTBFNDNBRkVDMkJDNEEwMEZFRTBBM0IKKzoxMDVCQjAwMDJERTYyNDJBNjI4NEMwMjAwQTk5MEIyOTY2ODREMTBGMUQKKzoxMDVCQzAwMEMwMjBEMTBGNkMxMDA0REIzMEMwRDAxOERCNzhEQTIwOTUKKzoxMDVCRDAwMDI1MzAwMDIyMzAwNzA4NTgwQTI4ODI0Q0RDMjAwQjgwMzAKKzoxMDVCRTAwMDAwODkzMTcwOUUxMjFCREI3MjBDNEExMUFCQUEyOUEyRUMKKzoxMDVCRjAwMDg0MDkyOTBCMjlBNjg0RDEwRjA5Qzk1MjY4NTMyNjAwQUMKKzoxMDVDMDAwMDkxMDQxOERCNkRDMEExMkY4MTEyMDBBQTFBMEFGRjAyQUQKKzoxMDVDMTAwMDJGODUxMjFFREI2NzBDNEQxMUFFREQyQ0QyODQwQzJDQUYKKzoxMDVDMjAwMDBCMkNENjg0RDEwRkMwODExRkRCNjRCODlBMEEwQTQ3QjcKKzoxMDVDMzAwMDJFRjExMjAwQTEwNDAwODgxQTA4RUUwMjJFRjUxMjFEQTIKKzoxMDVDNDAwMERCNUMwQzRDMTFBRENDMkJDMjg0MEIyQjBCMkJDNjg0MTQKKzoxMDVDNTAwMEQxMEYwMDAwNkMxMDA0REIzMEMwRDAxOURCNTREQTIwMDcKKzoxMDVDNjAwMDI4MzAwMDIyMzAwNzA5ODgwQTI4ODI0Q0RDMjAwQjgwNkIKKzoxMDVDNzAwMDAwMUNEQjRGMEM0QjExQUNCQjJBQjI4NDBBMkEwQjJBNDYKKzoxMDVDODAwMEI2ODREMTBGNkMxMDA0QzA0MTE4REI0OTE2REI0QjBDRjUKKzoxMDVDOTAwMDI3MTFBNjI2MjY2MDMwQTg3MjI1MjI4NjAwNjEwNEEzNUIKKzoxMDVDQTAwMDU1MDA0NDFBNzU0MTA4MjIyMjg0MDIzMjBCRDEwRjAwOUMKKzoxMDVDQjAwMEMwMjBEMTBGNkMxMDA0MTVEQkE1MDI0OTE0Mjk1NjExMjAKKzoxMDVDQzAwMDI0NTIxMjAyMDg0MzBGODgxMUMwNzMwMDgxMDQwMDM2NjkKKzoxMDVDRDAwMDFBMDA4MTA0Qzc4RjAwNzcxQTA4NzcwMzA3NDQwMTA2NkEKKzoxMDVDRTAwMDQ0MDIyNDU2MTJEMTBGMDA2QzEwMDY2RTIzMDI2MDAwOEQKKzoxMDVDRjAwMEFDNjQyMEE3QzBBMDg1MTAxM0RCN0UxNkRCOTRDMDQwRTcKKzoxMDVEMDAwMEE2QUEyQkEyQUUwQjE5NDE2NDkwNjY2ODkxNUQ2ODkyQjkKKzoxMDVEMTAwMDUyNjg5MzNDMkFBMkFBMjgzQzdGMjg4QzdGMEEwQTREMEQKKzoxMDVEMjAwMDI5ODAwMTI4ODAwMDJBQUNGMjA4ODgxMTA5ODgwMjc1QjAKKzoxMDVEMzAwMDg5NDYyQjNEMDEyOUIwMDAyQkIwMDEwODk5MTEwQjk5MjAKKzoxMDVENDAwMDAyN0E5OTM0QjgzMzJBMkEwMEIxNDQ3MjQ5QjE2MDAwMEEKKzoxMDVENTAwMDRBN0ZCRjA3MTVEQjdGNjNGRkI5MDAwMDI1M0FFODYzODAKKzoxMDVENjAwMEZGQjEwMDAwMjUzQUU4NjNGRkE5MDAwMDI1MEE2NDYzM0IKKzoxMDVENzAwMEZGQTFDMDVBNjNGRjlDMDAwMDcwNUYwODI1MzRGRjA1MzcKKzoxMDVEODAwMDhDMTQyQzM0RkU3MEFGMEIwQThEMTQyRTNEMDEyQUU0QzYKKzoxMDVEOTAwMDAxMkRFNDAwREE0MDVCRkQ1MDYzRkZBN0QxMEZEMTBGNjYKKzoxMDVEQTAwMDZDMTAwNDFBREIwNTE5REIwMjFDREI2QTFCREI2QkMwMDEKKzoxMDVEQjAwMDgwQzA3MTYwMDAwRDAwMDAwMDIyQTQzMEIxQUEyOTlDQUYKKzoxMDVEQzAwMDEwN0I5MTVGMjY5Mjg2NzlDMjE1NkU2MjYyQzAyMDZENEIKKzoxMDVERDAwMDA4MEFCMTIyMDAyMTA0MDA3NDFBNzY0QkRCNjNGRkVFM0YKKzoxMDVERTAwMDIyOTI4NTBENjMxMTAzMjUxNDY0NUZDRkQ2NTAwMzJERDUKKzoxMDVERjAwMDQzNkREOTAzOTgyMEI0MjIwNjQ0MTQ2RDQ5MjI5ODIwOUIKKzoxMDVFMDAwMDk4MjE5ODIyOTgyMzk4MjQ5ODI1OTgyNjk4Mjc5ODI4QUUKKzoxMDVFMTAwMDk4Mjk5ODJBOTgyQjk4MkM5ODJEOTgyRTk4MkYyMjJDRDgKKzoxMDVFMjAwMDQwNjNGRjk3MUVEQUUzMjdFNjgwMjdFNjgxRDEwRjAwNjMKKzoxMDVFMzAwMEMwMjA2M0ZGODMwMDAwMDA2QzEwMDRDMDYyQzA0MTEyRTgKKzoxMDVFNDAwMERBREUxQURBREExM0RCNDUyQUEwMDAyMzMyMkQxOURCNTkKKzoxMDVFNTAwMDNGMkJBQ0ZFMjk5MkFFNkVBMzAyNjAwMDhFMDkwRTQwNkQKKzoxMDVFNjAwMDJEMUFDMkMyQ0QwRURDMzkyQzI1MTY2NEIwODk1QkZGMTkKKzoxMDVFNzAwMDlFMTVEQjNCMUFEQUU1MkIzQUU4MEEzQTAxNTgwNTc2MUIKKzoxMDVFODAwMDJCMjExNjBBQkIyOEQzQTAyQjU2MDA1ODA1OEQ4QjUwMEEKKzoxMDVFOTAwMDBBQkIwODJBMEEwMDU4MDU4QzE1REIzMjJEMjEwMjJDN0EKKzoxMDVFQTAwMDNBRTgwQzNDMjgwNEREMDIyRDI1MDI5QzUwNTgwNTg0NUMKKzoxMDVFQjAwMDhCNTBBQUJCQzBBMTU4MDU4NDFDREIyQjJEMjEwMjBDRTIKKzoxMDVFQzAwMDNDMjgwNkREMDIxM0RCMjkyRDI1MDI5QzMwNTgwNTdDNzkKKzoxMDVFRDAwMDhCMzBBQUJCQzBBMjU4MDU3QzJBMjEwMkMwQjQwQkFBRjEKKzoxMDVFRTAwMDAyMEEwQTRGMkEyNTAyNTgwNTkwRDEwRjI0MjQyM0MzMDEKKzoxMDVFRjAwMENDMkMyNTE2NjNGRjc2MDAxOERCMjExQ0RCMUQxOURCN0IKKzoxMDVGMDAwMDFFMUJEQjFDMTdEQUYwODUyMDJFMEFGRDFGREIxRDJENjIKKzoxMDVGMTAwMDIwMkUyNEY0N0EyNEY0N0UyNEY0ODIwRUREMDEyNEY0NkQKKzoxMDVGMjAwMDg2MkUwQUY3MDc1NTI4MDZERDAyQzA3NTBFREQwMTA1MkQKKzoxMDVGMzAwMDA1MDZBQjVCQTk1OUMwRThBQzVDMjRDNEFCMEVERDAyMUUKKzoxMDVGNDAwMDI3QzRBQzJFMEFERkE4NTUyN0I0RUMwRUREMDEyNEI0MUIKKzoxMDVGNTAwMEVCQzJFMDI3OTQyQzBFREQwMjI0OTQyQjJFMEE4MDBEMzgKKzoxMDVGNjAwMDBENDYyNzU0NkMyNDU0NkIwRUREMDIyRDI0MkU2M0ZFNDcKKzoxMDVGNzAwMEZDMDAwMDAwNkMxMDA0MkEwQTMwMkIwQTAzNUJGRjRENjIKKzoxMDVGODAwMDEyREFGM0MzOTAyOTI2MTZDM0ExQzBCM0MwOEEyODI2MEIKKzoxMDVGOTAwMDE3NUJGRjQ4QzAzQ0MzQjEyQjI2MTYxQURBODcyQUEwMkMKKzoxMDVGQTAwMDIwMjMyNjE3NjRBMDc5QzNBMkMwQjE1QkZGNDJDM0EyMUQKKzoxMDVGQjAwMEMwQjE1QkZGNDBDM0MyMkMyNjE2QzJBRkMwQjEyMzI2QkUKKzoxMDVGQzAwMDE3NUJGRjNDQzI4RjI4MjYxNkMwRkUyRjI2MTdDMkUyQTEKKzoxMDVGRDAwMDJFMjYxNjJBMEFBMUMwQjFDMEQ4MkQyNjE3NUJGRjM1ODAKKzoxMDVGRTAwMDJBMEFBMTJBMjYxNkMzQTZDMEIzQzE5MjI5MjYxNzVCODYKKzoxMDVGRjAwMEZGMzFDM0M2MkMyNjE2QzFCMzJBMEFBMjJCMjYxN0MwMEUKKzoxMDYwMDAwMEIzNUJGRjJDMjkwQUEyMjkyNjE2QzE4NTI4MjYxN0MyQjAKKzoxMDYwMTAwMEZCMkYyNjE2QzBFNzJFMjYxNzFEREFEQTJEMjYxMEQxMDMKKzoxMDYwMjAwMDBGQzNBMkMwQjM1QkZGMjM2M0ZGODIwMDZDMTAwNDFDOEMKKzoxMDYwMzAwMERBQTQxQkRBOTExOERBRDQxN0RBRDUxNkRBRDUxNURBMUMKKzoxMDYwNDAwMEQ1QzBFMEMwRDQxNERBQTAxRkRBNUNDMDI4OEZGMDZEOTAKKzoxMDYwNTAwMDJBMzZEQUMwRDlDMDdDNUIwMjBGQzkwQzFDREE5QTBDNTQKKzoxMDYwNjAwMDlDMjhBOEMzQTZDMjJBMzY4MDJBMjU4NEE0QzJBN0NDMEQKKzoxMDYwNzAwMDJEMjQ4QzJCMjQ4QTJCMjQ4NzJFMjQ4QkIxQkIyRTM2RTcKKzoxMDYwODAwMDlGMkMzNjlFMkMzNjlEQjFBQzFDREE3QjFCREFDM0MwMkMKKzoxMDYwOTAwMDI4NkQyQTMzREFDMEQ5QzA3QzVCMDIwRkM5MEMxQ0RBMjgKKzoxMDYwQTAwMDg5MEM5QzI4QThDM0E2QzIyQTM2ODAyQjI1ODRBNEMyQUEKKzoxMDYwQjAwMEIxQkJBN0NDMkQyNDhDMkUyNDhCMkEyNDhBMkUzNjlGNkMKKzoxMDYwQzAwMDJDMzY5RTJDMzY5REIxQUNDMDc5MTlEQTc5MUJEQUI1MjUKKzoxMDYwRDAwMDEzREFCMzFBREFCMzE4REFCNDE0REE3QTE2REFCNDA0QzMKKzoxMDYwRTAwMEY0MjgxMkRBQjMwNDY2MEMwNDA1MDZBMjUyQTg1OEFBRDIKKzoxMDYwRjAwMDVBQTM1MzlCMzAyOUE1MDAyNzg0OEFDMDkxQzBBNTJBQTIKKzoxMDYxMDAwMDg0OEMyOTg0OEIxN0RBQUMxOERBQUJBNzU3MjYzNjFEOTYKKzoxMDYxMTAwMDI2MzYxRTJFMzYxRjE2REFBOTEzREFBOUE2NTUwNDMzMjEKKzoxMDYxMjAwMDBDMjgyNkM4MkU3NTAwMkQ1NEFDMkU1NEFCMkU1NEFBMjQKKzoxMDYxMzAwMDIzMjZFNjIzMjZFNTJFMjZFN0QxMEYwMDZDMTAwNjEzNTIKKzoxMDYxNDAwMERBODcxN0RBODIyNDcyM0QyMjMyOTM3RjJGMEI2RDA4OTMKKzoxMDYxNTAwMDA1MjgzMjkzN0Y4RjAyNjNGRkYzQzBDNEMwQjAxQURBMDAKKzoxMDYxNjAwMDE2QzA1MUQ5NDAwNDU5MzkyOUE0MjA2RTQ0MDIwQkI1RjgKKzoxMDYxNzAwMDAyQzMyODFFREExMUREQjAyNUU0MjIwNTJEMzkyREU0RjUKKzoxMDYxODAwMDIxQzA1MDFFREE5MDE5REE4MDE4REE4MDE2REE4MjFERTIKKzoxMDYxOTAwMERBOEU5NDEwMkE3MjQ1MTdEQTRDNkRBOTRCRDQ1MEIzOUQKKzoxMDYxQTAwMDU1N0E1QjE3REY1MDc1NkIwNzFGREEwMzhGRjAwRjVGQUYKKzoxMDYxQjAwMDBDMTJEQTQ0MDJGMjI4QUUyMjIyRDY4MUQ1NDAxM0RBM0MKKzoxMDYxQzAwMDQxNzQ2QjA3MTVEOUZEODU1MDA1NDUwQzAzNTMyOEIxNjMKKzoxMDYxRDAwMDQ1QTczRkE4MzJBOTMzMjIzNjlEMjIzNjlFMjQzNjgwMTkKKzoxMDYxRTAwMDJCMzY5RjJCRjQ4QjJDRjQ4QzE0REE1QzI0NDI0REMwOUMKKzoxMDYxRjAwMDMwMDQxNDE0Qzg0QzZEMDgwNkIxMzMwNDE0MTRDODQyOUEKKzoxMDYyMDAwMDYzRkZGMjAwMTVEOUVBQzQ0MDAwMzEwNDFBRDlFQkMwOEIKKzoxMDYyMTAwMEQxOTNBMjAwREQxQUMxMzhCMEREOURBMzE4REE1MDJCNEUKKzoxMDYyMjAwMDgyNEQyOTgyNEUyOUE1MUMyODgyNTM3QTg3MUUyQzU0MjAKKzoxMDYyMzAwMDAwOEUxMDZGRTQ1RDEyRDlFMDJGMjExRDIzMjExQzJGNDkKKzoxMDYyNDAwMDI1MUIwNDMzMEMyMzI1MUMyMzI1MUFEMTBGQzA2MjE4RUIKKzoxMDYyNTAwMERBM0Y4ODgwN0U4N0Q5ODkxMDI2NTQwMDZGOTQxOTFCRjUKKzoxMDYyNjAwMEQ5RDYyQUIxMUMwQTFBMTQwNEFBMEMyQUI1MUMyQUI1QkMKKzoxMDYyNzAwMDFEMkFCNTFBMkFCNTFCRDEwRjFCRDlDRjJBQjExQzBBNkEKKzoxMDYyODAwMDFBMTQwM0FBMEMyQUI1MUMyQUI1MUQyQUI1MUEyQUI1NTgKKzoxMDYyOTAwMDFCRDEwRjAwMUNEOUM5MkJDMTFEMkRDMTFDMkJDNTFCMjcKKzoxMDYyQTAwMDAzREQwQzJEQzUxQzJEQzUxQUQxMEYwMDZDMTAwNjE5NkQKKzoxMDYyQjAwMEQ5QzIxNERBMjYxMkRBMjkxNURBNDRDNzNGQzBFMDJFMTMKKzoxMDYyQzAwMDU2QTgyRTU2QTkyRTU2QUEyRTU2QUIyMzI2MjkxOEQ5RTMKKzoxMDYyRDAwMEVBREIxMDFDREEzRUMwRDQyQTQyNDUyRDE2MDE5QzEwODAKKzoxMDYyRTAwMDAwQjA4OTBBODgwQzI4OTYwMDVCRkY5NDJCMjJFMzE4RTMKKzoxMDYyRjAwMEQ5QjIwQjVCMTQ5Qjg0MkEyMkU0OEI4NEIxQUEwQTVBN0MKKzoxMDYzMDAwMDE0MEJBQTBDOUE4NTI5MjJFNTA5NTkxNDk5ODYyRjIyODMKKzoxMDYzMTAwMENEMEY1RjE0OUY4NzVCRkY0NTVCRkYxNjIzNDYzQkMxOTQKKzoxMDYzMjAwMEIwMUREOUE1MUNEQTAzMkFEMTAyMkM0NjNBMEJBQTAyQzkKKzoxMDYzMzAwMDBBMEE0RjJBRDUwMjU4MDQ3QzVCRkVCRjVCRkU5OEMwNTgKKzoxMDYzNDAwMDUwQzBCMDE2RDk5QjE0RDlBMzE3REExMkMwQzBDNzNFRUIKKzoxMDYzNTAwMDkzMTIyQzI2MkRDMDMwNjAwMDQzMDAwMDAwN0Y5RjBGNTkKKzoxMDYzNjAwMEIxNTUwOTE5MTQ2NTlGRjRDMDUwMEFBOTAyN0ZBN0VGMUYKKzoxMDYzNzAwMDE4RDk4RkRBNTAwODU4MEEyODgyMkMyQjBBMDAwQjgwNzMKKzoxMDYzODAwMDAwMDA1MTA0RDJBMEMwOTFDN0FGMDA5OTFBMEE5OTAzMjYKKzoxMDYzOTAwMDk5MTJDRTMzNjQyMDY3RDMyMDJCMjAwNzk1MTM4QzEyREIKKzoxMDYzQTAwMDJBNjI4MjdDQTg1RjE4RDk4MTA4NTgwQTI4ODIyQ0RBRDAKKzoxMDYzQjAwMDUwMEI4MDAwRDJBMDY0M0ZEQThBMzEwQThBMTQwNEFBMDIKKzoxMDYzQzAwMDAxQzgyOThCMjEwQjhCMTQwNEJCMDE3QkE5NDVEREEwREYKKzoxMDYzRDAwMDdBN0IwODFERDk3OTJERDIwMDBEQUQwQ0RCMzAxOUQ5OEYKKzoxMDYzRTAwMDczMUFEOUI4MjgxMjAzMEFEQTI4MDg4QzAyMUREOUY1QzUKKzoxMDYzRjAwMDA5ODgwQTI4ODIzQzBEQUEwODBCODAwMDY1MkY5N0QzRDQKKzoxMDY0MDAwMDIwQzBCMDYzRkY5N0NCNTNCMTU1MDA1MDA0MEEwOTE5NUYKKzoxMDY0MTAwMDYzRkY0OTAwREFCMDdCN0IwNzFBRDk2NzhBQTAwQUJBMDIKKzoxMDY0MjAwMDBDMUJEOUE4OEMzMTBCQUIyODBDOEExNDFDRDlFNkFDRjgKKzoxMDY0MzAwMEJCMUNEOUU1MDRBQTAxMkJDNjgxNjNGRjkwN0ZBN0M3QzcKKzoxMDY0NDAwMDYzRkY2MjAwNkMxMDA0MjcyMjFFQzA4MDA4RTQzMTFCMjkKKzoxMDY0NTAwMEQ5NTgwMDAyMDAyQUIyODIxOUQ5NTgwMDMxMDRDMDYxMEIKKzoxMDY0NjAwMDAwNjYxQTI5OTEwMjBBNkEwMjJBQjY4MjA5RTQzMTE1RTUKKzoxMDY0NzAwMEQ5QjMwQzM4MTFBODUzMjgzMjgyMjQzMjg0MkE4Q0ZDRDgKKzoxMDY0ODAwMDc4NDExMDI5MjEwMjJBMzY4Mjk3QTAwOTY5MDIyOTI1MUMKKzoxMDY0OTAwMDAyRDEwRjAwMkIyMTAyMkMzMjg1MEI2QjAyMkNDQ0ZDN0QKKzoxMDY0QTAwMDJDMzY4Mjk3QzAyQjI1MDJEMTBGMDAwMDZDMTAwNEMwM0YKKzoxMDY0QjAwMEU3MUREOTNCMUNEOTNEMEQ0OTExRDcyMDhCMjI4QTIwREQKKzoxMDY0QzAwMDBCNEIwQkQyQTAwN0E4MEM5QjcyMjg4Q0Y0QzgzNDZGMUUKKzoxMDY0RDAwMDhFMDI2MDAwQTIxRkQ5MzNBMjk4QUY3Qjc4QjMzNEM5NzMKKzoxMDY0RTAwMDNEQzA4MUMwRjAwMjhGMzgwRjBGNDJDOUZBMkNENjdFMTIKKzoxMDY0RjAwMEQ1MjA2RDRBMDUwMDMwODgwMDUwOEM4ODcwMDg5ODA4QjcKKzoxMDY1MDAwMDc4QjE2Q0QyQTA5ODcwRDEwRkMwRjAwMzhGMzg3RkUwQzMKKzoxMDY1MTAwMERFNjNGRkQ4MDI3QjBDQUZCQjBCOTkwQzY0MzA0NkQ4MEUKKzoxMDY1MjAwMDMwQzBGMUMwNTAwMkY1MzgwNTA1NDI2NDUwNzkyQ0Q2RDAKKzoxMDY1MzAwMDdFMEIzNjEyMkY2QzEwMEY0RjM2NkRGQTA1MDA4MDg4RDcKKzoxMDY1NDAwMDAwMjA4QzA2NDQwQ0MwODEyNTBBMDAwM0IyMDgyMzdDN0QKKzoxMDY1NTAwMDBDMDM4NTM4MDUwNTQyNjQ1MDU5MkNENjdFNkQ0QTA1REEKKzoxMDY1NjAwMDAwMjA4ODAwMzA4Q0QyQTBBNzk4QkM4ODk4NzBEMTBGRUEKKzoxMDY1NzAwMEQyQTBCQzc5OTk3MEQxMEZEMjMwMkJBRDA4QzBGMUMwMzgKKzoxMDY1ODAwMDUwMEJGNTM4MDUwNTQyQ0I1NTJDRDY3RTA4M0YxNEMxN0IKKzoxMDY1OTAwMDYwMEY2NjBDMDY0NjM2RDMwRjZENkEwNTAwMjA4ODAwMzIKKzoxMDY1QTAwMEIwOEM4MjcwNjNGRjJEMDBDMDUwMDNGNTM4NzVFMDgwMTkKKzoxMDY1QjAwMDYzRkY3QTAwQzA2MDAyODYzODc2RTBBMDYzRkY5QTAwMkQKKzoxMDY1QzAwMEMwNTAwM0Y1Mzg3NUUwQzM2M0ZGQkQwMDZDMTAwNEQ2RkUKKzoxMDY1RDAwMDIwNjg1MjBGNjk1MzI0REEyMERCMzBEQzQwNTgwMEYwODkKKzoxMDY1RTAwMEQyQTBEMTBGREEyMERCMzBEQzQwNTgwMEVEOUEyNDI0MTEKKzoxMDY1RjAwMDI0MEVDMDIxMjI2NDBGQzAyMEQxMEYwMEI4M0JCMDRDNDQKKzoxMDY2MDAwMDJBMkM3NDg5MjQyRDIwMEUyRTIwMEZBNEREQjFFRTJFMEQKKzoxMDY2MTAwMDI0MEZCMEREMkQyNDBFMjg5MDA3MkQ5MDAzQTQ4OEIwMDAKKzoxMDY2MjAwMDg4QjFERDJEOTQwMzI4OTQwNzVCRkZBMDY5NTExREMwM0MKKzoxMDY2MzAwMEUwODIyNDJBNjAwRjE4RDk2NjJBMjQwMzI5NjAwRThGNkQKKzoxMDY2NDAwMDIwMjkyNDA3MDhGRjAyOUYyMDlFNjREMTBGQzAyMEQxN0IKKzoxMDY2NTAwMDBGMDAwMDAwNkMxMDA0OTQyMzE5RDk1RUMwQjMwODNBRUYKKzoxMDY2NjAwMDExMEJBQTAyOTkyMDE5RDhEMjlBMjExNkQ4RDBDMDUwNUQKKzoxMDY2NzAwMDI4OTI5RDI1NjRBMjI4OEMxODI4OTY5REQxMEYwMDAwOTEKKzoxMDY2ODAwMDZDMTAwNDI4MjA2NkMwMzgyMzI0MDZCNzg4MjgyNDY2QTYKKzoxMDY2OTAwMEQxMEYwMDAwNkMxMDA2MDM1QTBDMEQzNjExMEQ1QzExNjEKKzoxMDY2QTAwMEQ4MjA4QjIyODIyMTBDQkIwQzA2NTUwRjlCODIwMjMyMTQKKzoxMDY2QjAwMDBCOTI4MTEzRDhCQ0Q5MjBBMzhGNjQ1MDUzMUNEOEI4MzcKKzoxMDY2QzAwMEMwRDcxQkQ4QjlBMjU2QzBFMTI5MEEwMDA0RTkzODA5OEQKKzoxMDY2RDAwMDA5NDI3NkYzNEEwNDQzMDJDOTlFMkJDNjdFNkRBQTA1ODEKKzoxMDY2RTAwMDAwMjA4ODAwMzA4Qzg5ODFBOTU5MDlGQTBDNjRBMDc5QUUKKzoxMDY2RjAwMDk5ODE4QTgyQzhBREQyOTBEMTBGQzA2MDAyRTYzODc2MDcKKzoxMDY3MDAwMEQwREE2M0ZGRDRDMDIwQkM4OTk5ODE5OTgwOTI4MkQxNkMKKzoxMDY3MTAwMDBGN0YyMzA0MjkyREY4OTk4MTY1QkZEOTYzRkZFNTAwMTgKKzoxMDY3MjAwMDAyOEYwQ0EzRkYwRjMzMTI5MzEwMDNBQTBDRDM0MENCOUMKKzoxMDY3MzAwMDlFMkJDNjdFODYxMDZENkEwNTAwMjA4ODAwMzA4Q0JDQkEKKzoxMDY3NDAwMDgyMjkwQTAwMDRGMzA4MjQwQTAxMDM0OTM4MDkwOTQyOEUKKzoxMDY3NTAwMENBOTgyQkM2N0U2REFBMDUwMDIwODgwMDMwOEMwRjU5ODAKKzoxMDY3NjAwMDBDQTk4OUJDOTk5OTgxNjNGRjg3QkM4OTk5ODE2M0ZGRDIKKzoxMDY3NzAwMDgwQzA2MDAyRTYzODc2RDBCQTYzRkZCNEMwNzAwMjQ3Q0EKKzoxMDY3ODAwMDM4NzdEMEQwNjNGRkNBMDA2QzEwMDQxNEQ4OTVDMTUyN0EKKzoxMDY3OTAwMEE0MjRDQTMwMjgyMjFENzM4MTFCMjkyMTAyQ0Q5NTJBRTkKKzoxMDY3QTAwMDMwMDA3NUE5MTJEQTIwMDMzQjAyMkMzMDA3MkQwQTAyQjMKKzoxMDY3QjAwMDU4MDFDMjY1M0ZEREQxMEYyQjMwMDcwM0JCMEJEQUIwQTgKKzoxMDY3QzAwMDc0QjMwMjJBQkRGOEQzQTA2M0ZGQzYwMDZDMTAwNDI5N0QKKzoxMDY3RDAwMDIwMDZDMDcwNkU5NzQxMjkyMTAyQzA4RjJBMjAxNEMwNjQKKzoxMDY3RTAwMEI2MkIyNDA2MDZBQTAyMkEyNDE0Nzk4MDAyMjcyNTAyNDEKKzoxMDY3RjAwMDJBMjIxRTJDMjIxRDdBQzEwRUM4QUJEQTIwREIzMDJDRDcKKzoxMDY4MDAwMDBBMDAwMzNEMDI1QkY4MTQ2NDUwNzUyRDIxMDIwRDBENDIKKzoxMDY4MTAwMDRDQzlEM0MwMjBEMTBGMDAwMDJFOUNGQjY0RTA4MjJGMTYKKzoxMDY4MjAwMDIxMDIwRjBGNEM2NUYwOTExQUQ4NjIxQ0Q4NjAyOUEyODIKKzoxMDY4MzAwMDlFQzA4QTc5OEI1RDJCQzIyNjY4QjAwNDhEMjA3QkQ5REYKKzoxMDY4NDAwMDUyMjlBMjlEQzBGMzY0OTA0QTk3OTAxREQ4NzMyRTIxQkYKKzoxMDY4NTAwMDA0OUQ5NjA4RUUxMTBGRUUwMjlFOTc5RTkxMThEODZGMzgKKzoxMDY4NjAwMEMwRTUyN0M0QTIyRTI0MDYyQkEyOUQyRjIxMDIyQkJDRkIKKzoxMDY4NzAwMDMwMDhGRjAyMkYyNTAyMkJBNjlEQzAyMEQxMEYwMDAwNUIKKzoxMDY4ODAwMDAwMkYzMDAwNjhGOTM4REEyMERCMzBEQzQwNTgwMDQ0NTMKKzoxMDY4OTAwMDYzRkY3NzAwMDIyQTAyMkIwQTA2NTgwMEQzMjIwQTAwNUYKKzoxMDY4QTAwMEQxMEY2NTUwMTAyODMwMDA2ODg5MjQwMjJBMDIwMzNCNkEKKzoxMDY4QjAwMDAyREM0MDU4MDAzQkMwMjBEMTBGRDI3MEQxMEYwMDAwNDUKKzoxMDY4QzAwMDJBMkM3NDAzM0IwMjA0NEMwMjVCRkVGODYzRkYzQjAwN0UKKzoxMDY4RDAwMERCMzBEQzQwMkEyQzc0NUJGRUY1QzAyMEQxMEYwMDAwQjkKKzoxMDY4RTAwMDZDMTAwNEM4M0Y4OTI2ODgyOUEzOTk5OTI2MDk4ODBDMjkKKzoxMDY4RjAwMDA4MDg0ODI4MjUyNUNDNTJDMDIwRDEwRkRCNDAyQTJDN0YKKzoxMDY5MDAwMDc0NUJGOTNERDJBMEQxMEY2QzEwMDREODIwRDczMDgyMkYKKzoxMDY5MTAwMDIyMEQ0NTExMDUyMjBDOTI4MjY0MjA3NDA3NDIwQjEzNEMKKzoxMDY5MjAwMEQ4MjFENDIwQTM4MzczMjMwMjI0MkRGODg1ODA3NDUxQTkKKzoxMDY5MzAwMDRDQkM4MkMwOTA2RDA4MTYwMDQwODgwMDcwOEM3NzM5N0UKKzoxMDY5NDAwMDAzRDcyMEMwOTE4NjgwNzQzOTAxRDQyMDc0NjEwMjYzMUEKKzoxMDY5NTAwMEZGRTJDQTk4QzA5N0MwNDExQkQ4QTBDMEEwMEI4QjBDMDcKKzoxMDY5NjAwMDBCNEEzODBBMEE0MkM5QUExREQ4MEUxQ0Q4MEYyQ0Q2QzkKKzoxMDY5NzAwMDdFQzE0MEQzMEY2RDRBMDUwMDIwODgwMDMwOEM5NzgwN0YKKzoxMDY5ODAwMEQyNzBEMTBGQkM4RkMwRTAwRjRFMzg3RTkwRTI2M0ZGMTMKKzoxMDY5OTAwMEQ2QkM4MjkyODE5MjgwQzAyMDkyODJEMTBGMDAwMDAwRUEKKzoxMDY5QTAwMDZDMTAwNkMwRDcxQ0Q3RkUxQkQ4MDAwRDQ5MTFENzIwOEMKKzoxMDY5QjAwMDJFMjIxRjI4MjIxRDBFNEUwQkQyODAwNzhBMEMyRTc2MDcKKzoxMDY5QzAwMDFGMkFBQzgwQzgzNDZGQUUwMjYwMDBDQjJGMEE4MDFBMzkKKzoxMDY5RDAwMEQ4MDRBMjlFQUE3QTdFQTMzRkM5M0ZDMEUxQzA1MDAyNUMKKzoxMDY5RTAwMEU1MzgwNTA1NDJDQTU1MkJDNjdFREIyMEQzMEY2RDRBMUMKKzoxMDY5RjAwMDA1MDAzMDg4MDBCMDhDMkU3MjFEQUU5RTBFQTUwQzY0NzIKKzoxMDZBMDAwMDUwODZEMjgwMkU3NjFEQzA5MTI5ODQwM0QxMEZDMDUwQUMKKzoxMDZBMTAwMDAzRTUzODc1RDBEMzYzRkZDRDE1RDdGMTAyN0UwQ0E1MDEKKzoxMDZBMjAwMEVFNjQzMDUxQzBBMTI1MEEwMDAyQTUzODAzM0EwMjA1RTAKKzoxMDZBMzAwMDA1NDI2NDUwOTIyQkM2N0UwRTM1MTI5NTEwMjU1QzEwQ0YKKzoxMDZBNDAwMDA1NDUzNkQzMEY2RDVBMDUwMEEwODgwMDIwOENDMEExRTMKKzoxMDZBNTAwMEEzRTJDMDUwMjNGQTgwMDM3MzBDMDNBNTM4QUY3MzA1N0IKKzoxMDZBNjAwMDA1NDI2NDUwNzIyQkM2N0U4NTEwMDU0NTBDNkQ1QTA1OTMKKzoxMDZBNzAwMDAwMjA4ODAwMzA4Q0QyODBDMEExMEU5QjBDQUI3QkFGNzUKKzoxMDZBODAwMEJCMkI3NjFEMkE4NDAzRDEwRkQyODBDMEMxQUY3RDJERDAKKzoxMDZBOTAwMDc2MUQyQzg0MDNEMTBGMDBEMjMwMkU4RDA4QzBGMUMwOUEKKzoxMDZBQTAwMDUwMEVGNTM4MDUwNTQyQ0I1OTJCQzY3RTBBM0YxNEMxNUUKKzoxMDZBQjAwMDYwMEY2NjBDMDY0NjM2RDMwRjZENkEwNTAwMjA4ODAwMEQKKzoxMDZBQzAwMEUwOEMyMjcyMUQ2M0ZGMDNDMDYxQzA1MDAzNjUzODc1RkUKKzoxMDZBRDAwMEQ4MDI2M0ZGNjI2M0ZGNUNDMDUwMDJBNTM4NzVEMDg3OUYKKzoxMDZBRTAwMDYzRkY4MTAwQzA2MDAzRjYzODc2RDBCRjYzRkZCOTAwNTIKKzoxMDZBRjAwMDZDMTAwNDJBMjAxNTI5MjAxNjE0RDdBRjBBOTkwQ0NCNDQKKzoxMDZCMDAwMDlEMkUyMDBCMDRFRDA5MkJEMTFDOEYyODA5QkMzNkFDMUYKKzoxMDZCMTAwMEFBMENCQjBDMkJENTFDMEEwQTQ3MkEyNDE1Q0FBRjhCMUEKKzoxMDZCMjAwMDQzODk0MkIwQTgwMDkxMDQwMDg4MUFBOEZGMEZCQjAyNTUKKzoxMDZCMzAwMDlCMjc4RjI2MEZCODBDNzgzQjFBQzAyMEQxMEYwMDAwN0UKKzoxMDZCNDAwMDI5MjEwMkMwQTIwQTk5MDIyOTI1MDJDMDIxRDEwRjAwRTEKKzoxMDZCNTAwMDhCMjc2M0ZGREMyQkQxMUMwQ0FBMEMwQTBBNDcyQTI0QzIKKzoxMDZCNjAwMDE1QUNCQjJCRDUxQ0M5QUU4QjQzOEMyODhGNDJCMEFENjYKKzoxMDZCNzAwMDAwRjEwNDAwREQxQUFEQ0MwQ0JCMDI5QjI3REEyMEI3NzQKKzoxMDZCODAwMEVCNTgwMDE5QzAyMUQxMEY5RjI3NjNGRkVGMDAwMDAwRDEKKzoxMDZCOTAwMDZDMTAwNDI4MjAzQzY0MzA0NzA1MzA2MDAwMDczRTAxM0IKKzoxMDZCQTAwMDA1M0VCMTU2MDc2NTM5MDU0OTI4Qzc3RkE5MzMwMzA2NTUKKzoxMDZCQjAwMDQxMDc2NjAzQjE2NjA2MDY0MUE2MzM3RTg3MUUyMjIxODEKKzoxMDZCQzAwMDI1MjkxQUZDNzMyQjE1MDIzODBDMDk4MTYwMDAwNjNFM0EKKzoxMDZCRDAwMDAxMDIzRUIxMjQwNjQyMzkwMzIyMEFEMTBGRDIzMEQxM0MKKzoxMDZCRTAwMDBGQzA1MTYzRkZDMDAwMDA2QzEwMDQyNzIyMUVDMDgwM0MKKzoxMDZCRjAwMDA4RTQzMTFERDc2RjAwMDIwMDJDRDI4MjFCRDc2RjAwMzIKKzoxMDZDMDAwMDMxMDRDMDYxMDA2NjFBMkJCMTAyMEM2QzAyMkNENjgyRDIKKzoxMDZDMTAwMDBCRTQzMTE5RDdGMjBDM0ExMUFBOTMyODMyODI5NzgwRUIKKzoxMDZDMjAwMDI1MzI4MjI0MzI4NEI0NTUyNTM2ODI3NTQxMEEyOTIxQzEKKzoxMDZDMzAwMDAyMDk2OTAyMjkyNTAyRDEwRjJBMjEwMjJCMzI4MzBBNzcKKzoxMDZDNDAwMDZBMDIyQjM2ODIyQTI1MDJEMTBGMDAwMDZDMTAwNDE5MkIKKzoxMDZDNTAwMEQ3NjMyNzIyMUVDMDgwMDk3NzAyMDhFNDMxMURENzU0NkMKKzoxMDZDNjAwMDAwMDIwMDJDRDI4MjFCRDc1NDAwMzEwNEMwNjEwMDY2QTAKKzoxMDZDNzAwMDFBMkJCMTAyMEM2QzAyMkNENjgyMEJFNDMxMTlEN0Q3MzcKKzoxMDZDODAwMDBDM0ExMUFBOTMyODMyODI5NzgwMjUzMjgyMjQzMjg0Q0EKKzoxMDZDOTAwMEI0NTUyNTM2ODI3NTQxMEIyQTIxMDIwQTZBMDIyQTI1M0IKKzoxMDZDQTAwMDAyRDEwRjAwMkIyMTAyMkMzMjgzMEI2QjAyMkMzNjgyNzcKKzoxMDZDQjAwMDJCMjUwMkQxMEYwMDAwMDA2QzEwMDQxQkQ3M0QwQzJBQkQKKzoxMDZDQzAwMDExQUJBQTI5QTI4NkI0Mzg3OThCMjIxQkQ3M0ExOUQ3REYKKzoxMDZDRDAwMDYxMEIyQjBBMkJCMkEzMDkyOTA4NjhCMDAyNzRCOTBEMDUKKzoxMDZDRTAwMDI5OUQwMTI5OTAxRjZFOTIwODIyQTI4NUQxMEZDMDIwRjQKKzoxMDZDRjAwMEQxMEZDODkyQzAyMEQxMEZEQTIwNUJFRjM1QzAyMEQxNzAKKzoxMDZEMDAwMDBGMDAwMDAwNkMxMDA0MTRENzJBMjg0MjlFMTlENzI3QzAKKzoxMDZEMTAwMDZGODgwMjYwMDBCQTI5OTIyNjY4OTAwNzhBMjAwOUFBMjMKKzoxMDZEMjAwMDBDNjVBMEFDMkE0MjlEQzBEQzY0QTBBNDJCMjAwQzE5RTkKKzoxMDZEMzAwMEQ3MjEwQ0JDMTFBNENDMkVDMjg2MDlCOTBBN0VEMzAyN0QKKzoxMDZENDAwMDYwMDA5QTI5OTJBMzY4OTAwNzhEMjAwOUREMEM2NUQwMTgKKzoxMDZENTAwMDhDMjVDMjg1NjQ1MDg2MkQyMTA0QzAzMDZFRDgwRDJDNDAKKzoxMDZENjAwMDIwNjZCOENDMEMwQzQ3MkMyNDY2NjVDMDdCMUNENzlDRDUKKzoxMDZENzAwMDE4RDcyODFBRDcxRTE5RDcyRjFERDcyNEMwRTQ5RTUxMjMKKzoxMDZEODAwMDlENTA4RjIwOTM1NzkzNTU5OTUzOUE1NjlBNTQwOEZGQzQKKzoxMDZEOTAwMDAyMUFENzNBOUY1Mjg4MjY5RjVBOUU1OTlENTg5MzVFNTEKKzoxMDZEQTAwMDlDNUQ5MzVDOUE1QjA4MDg0ODA1ODgxMTk4NUZDMEQ4ODEKKzoxMDZEQjAwMDFGRDcwODBDQjkxMUE0OTkyODkyODVBRkJGMjNGNENGMkYKKzoxMDZEQzAwMDI4OEM0MDI4OTY4NThFMjYyRDI0MDY5RTI5QzAyMEQxMDkKKzoxMDZERDAwMDBGQ0EzM0RBMjBDMEI2NUJGRjg0QzcyRkQxMEZDOTNBODAKKzoxMDZERTAwMERBMjA1QkZGODFDNzJGRDEwRkRCRDA1QkZFMUEyMzI0OTMKKzoxMDZERjAwMDY2MkIyMDBDNjNGRjc1MDBDNzJGRDEwRkM3MkZEMTBGNTMKKzoxMDZFMDAwMDZDMTAwNEM4NUIyOTIwMDY2ODk0MUM2ODk2MDdDMDIwOTMKKzoxMDZFMTAwMEQxMEZDMDIwRDEwRkRBMjBEQjMwREM0MERENTAyRTBBNEMKKzoxMDZFMjAwMDAwNUJGRTZBRDJBMEQxMEYyRTIwMEMxOEQ2RTEwQ0VGMjkKKzoxMDZFMzAwMDExQThGRjI5RjI4NkMwODg3OThCNzUxQUQ2REUwQUVBNzYKKzoxMDZFNDAwMDBBMkFBMkEzNjhBMDA0OEIyMDdBQjk2NDIzRjI4NTY0N0QKKzoxMDZFNTAwMDMwNUUxQ0Q2RTgyQTBBODAyRDIwNjgyOTIwNjcyODIxNjgKKzoxMDZFNjAwMDA0MEI5OTExMDQ4ODExMDk4ODAyMDhERDAyQzA5NDI4RDYKKzoxMDZFNzAwMDRBMTAwOEREMDIxOEQ2RTA5OTMxOTgzMDhCMkI5QTM3RUEKKzoxMDZFODAwMDlEMzQwQ0JCMDI5QjMyQzBDMDlDMzU5QzM2MkEyQzc0QUUKKzoxMDZFOTAwMERCNDBDMEQzMThENkNGMjlGMjg1QThFRTI5OUMyMDJDNDAKKzoxMDZFQTAwMEU0Q0YyOUY2ODUyRDI0MDZERDQwNUJGREZBRDJBMEQxODIKKzoxMDZFQjAwMDBGREEyMERCRTA1QkZGNENDMDIwRDEwRjZDMTAwQUQ2NEMKKzoxMDZFQzAwMDMwMkEyMDA2OTQxMTI4QUNGODY1ODM4NzJCMjEyMkMwMzQKKzoxMDZFRDAwMEYyMkEyMTI0NjU1MDA4MkFBQzAxMEEwQTRGMkEyNTI0RTcKKzoxMDZFRTAwMDdBQkIwMjYwMDM3RjJDMjEwMjBDMEM0QzY1QzMxOTJFNjcKKzoxMDZFRjAwMDIyMTU4RDMyQzA5MTBFREQwQzY1RDM5MDg4MzgxRUQ2RDgKKzoxMDZGMDAwMEFDNjQ4MzZCOEMzN0MwQjhDMDk2MENCOTM5OTkxNEI0OTMKKzoxMDZGMTAwMDlBOUExMjBEOTkxMTk5MTM4RjY3MThENkE3QzlGQjI4NTEKKzoxMDZGMjAwMDgwMjE3RjgzMTY4QjE0MkMyMjAwMkEyMDBDNUJGRjYyQTkKKzoxMDZGMzAwMEQ0QTA2NEEzQTg4RjY3NjAwMDI4MDAwMDJCMjAwQzg5RDAKKzoxMDZGNDAwMDEyMENCQTExQUVBQTJDQTI4NjFERDY5QTdDOUIzRTBEQkQKKzoxMDZGNTAwMEJEMEEyREQyQTM2OEQwMDQ4ODIwN0Q4OTMwMjRBMjg1NjMKKzoxMDZGNjAwMDY0NDM2NDI3MjEyRTA3RjczNjA3RjkwQzZGOUQwMUQ3N0MKKzoxMDZGNzAwMEYwREEyMERCNzBDMUM0MkQyMTFGNUJGRjA1ODkyNjg4NTQKKzoxMDZGODAwMDI3RERBMDA5ODgwQzdBOEIxNzlBMTA2MDAwMDZDMDQwOTQKKzoxMDZGOTAwMDYzRkZDQzAwMDBEQTIwOEIxMDVCRkVENThEMTA2NUEyNUMKKzoxMDZGQTAwMDY3QzBFMDlFNDg4QzY0OUM0OThCNjU4QTY2OUI0QTlBQzAKKzoxMDZGQjAwMDRCOTc0NThGNjc3RjczMDI2MDAxMjBDRDUyOUQxMERBOTkKKzoxMDZGQzAwMDIwREIzMDJDMTIwMTVCRkU3NjhEMTBDMDUxRDZBMDhGRDUKKzoxMDZGRDAwMEE3QzBDMDhBNjg5NzREOUE0Qzg4Njk4OTZBOTg0RTk5NkIKKzoxMDZGRTAwMDRGOEU2QThBNjlBRTdFNzdFQjAxQjFBQTlFNkE5QTY5NzIKKzoxMDZGRjAwMDhCNjBDMEEwMEI4RTE0NzdCNzAxQzBBMUMwOTFDMDg0NzQKKzoxMDcwMDAwMDkzMTU5RDE3OTUxNkMwRDAyNTIwM0NDMDMwMDg1ODAxMTcKKzoxMDcwMTAwMDA4OTMzOEMwODIwODMzMTAwODVCMDEwNTM1NDAwQjlEOEEKKzoxMDcwMjAwMDM4MDdERDEwMEJBQjEwMEUxOTQwMkEyMTFGMDc5OTEwRUQKKzoxMDcwMzAwMDAzREQwMjBEQkIwMjA1NTMxMDA5MzMwMjBBNTUxMTI5NjUKKzoxMDcwNDAwMDIxMjUwQTJBMTQwOTI5MTQwNDk5MTEwQTk5MDIwOTMzREQKKzoxMDcwNTAwMDAyOEEyQjI5MjEwNDBCQUEwMjFCRDZFMjA4OTkxMTA5RTYKKzoxMDcwNjAwMDU1MDIwODU1MDIwQkFBMDI5QTQwODkyMDg4MTQwODk5RjMKKzoxMDcwNzAwMDExMDk4ODAyMTlENjYzMURENkRDMDk4ODAyOTg0MThCNTQKKzoxMDcwODAwMDJBOTM0Njk1NDc4MzE1MERCQjAyODUxNjhEMTc5QjQ0QTEKKzoxMDcwOTAwMDhBNjU4OTY2QUFDQUE5N0M3N0NCMDFCMUFBMDdGQjBDQ0QKKzoxMDcwQTAwMDlDNjY5QTY1ODgyNjhFMjlBRDg3OTcyNjA3RUUwQzBFN0EKKzoxMDcwQjAwMDBFNDgyRTI1MjU5QjY3MkIyMDBDODcxMzFFRDYzRDBDRDIKKzoxMDcwQzAwMEI5MTFBRTk5Mjg5Mjg1QTc4ODI4OTY4NTE3RDY0MUMwMTAKKzoxMDcwRDAwMDkwQTdCQjI5QjRDRjg3MTg2M0ZFM0MwMDhDNjBDMEUwNEEKKzoxMDcwRTAwMEMwOTFDMEYwQzAzNEMwQjgyQTIxMDQyODIwM0MwOEFBQUUKKzoxMDcwRjAwMDExMEI4QjAxMDM4MzAxMDM5RjM4MEI5QjM5QzAzMjA4QUUKKzoxMDcxMDAwMEZGMTAwMzg4MDEwODlFMzgwQzg4MTQwN0VFMTAwRkVFNUMKKzoxMDcxMTAwMDAyMDM4ODAxMDg5ODM5MDVCRjEwMjkyMTFGMEFCQjExRjUKKzoxMDcxMjAwMDA3ODgxMDA4RkYwMjBCQUEwMjE4RDYzNTA5MjkxNDAzOTQKKzoxMDcxMzAwMEFBMDIyQjIxMjU4MzIwMEIyQjE0MDRCQjExMDgzMzExMjkKKzoxMDcxNDAwMDBGQkIwMjBCOTkwMjhCMTQ4RjJBMEIzMzAyMDgzMzAyRjgKKzoxMDcxNTAwMDhCMkI2NDcwODY4ODY4OTc0RDk4NEM4NzY5ODg2QTkzRjIKKzoxMDcxNjAwMDQxOTk0Njk3NEU5ODRGQzA3MDc3QzcwMUMwNzE5QTQ3QjIKKzoxMDcxNzAwMDE4RDY5RTBCN0MxMDBDRUMwMjA4RjgwMjk4NDQxOEQ2MjYKKzoxMDcxODAwMDlCMENCQzAyMDhDQzAyOUM0MDJBMjAwQzI5NUNGRUMwNEYKKzoxMDcxOTAwMDgwMUZENjA3MUNENjBGMENBRTExMkIyMTI0QUNBQUFGMzIKKzoxMDcxQTAwMEVFQjBCQjhGMTMyQ0UyODUyOEE0Q0ZBRkNDMkNFNjg1QTQKKzoxMDcxQjAwMDJBMjIxNTJCMjUyNEIxQUEyQTI2MTU2NDkwREJDOUQyRDAKKzoxMDcxQzAwMDhGMjYyRTIyMDkwREZGMDgyRjI2MDYwRkVFMEMwRTBFMUQKKzoxMDcxRDAwMDQ4MkUyNTI1NjU1MEU0QzAyMEQxMEYwMEMwNzA5MzQxOTIKKzoxMDcxRTAwMDlGNDQ5OTQ2OUE0Nzc3QzcwQTFDRDVGMzJDQzAyMkMwMDIKKzoxMDcxRjAwMDgxMEM4NzM4MUNENjdGMEI3ODEwMDhFODAyMDhCODAyOEIKKzoxMDcyMDAwMDBDODgwMjk4NDA2M0ZGODAwMENDNTdEQTIwREI2MDhDNEEKKzoxMDcyMTAwMDExNUJGREUzMjkyMTAyNjg5ODA2Njg5NDAzQzAyMEQxMjAKKzoxMDcyMjAwMDBGMkIyMjFFQzBBMDI5MjIxRDJBMjUwMjdCOTkwMUMwRjYKKzoxMDcyMzAwMEIwNjRCRkU4MTNENURFMkNCMDA3MjhCMDAwREEyMDAzMTUKKzoxMDcyNDAwMDg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QUZFNzYzQzEKKzoxMDcyNTAwMEZGQ0EwMDAwNjhBNzc5REEyMERCMzBEQzQwREQ1MDVCMzQKKzoxMDcyNjAwMEZFRThEMkEwRDEwRkMxNkRDMTlEMjkyNTJDNjAwMDA0N0MKKzoxMDcyNzAwMDI5MjUyQ0Q2OTAyNjI0NjcyRjI0NjhEQTIwREIzMDhDMzEKKzoxMDcyODAwMDExREQ1MDJFMEE4MDVCRkQ1MUQyQTBEMTBGQzE2OEMxMjMKKzoxMDcyOTAwMEE4MkEyNTJDNjNGRkREMDAwMDAwQzhERjhDMjY4QjI5N0YKKzoxMDcyQTAwMEFEQ0M5QzI2MENCQjBDMEIwQjQ4MkIyNTI1MkEyQzc0MzMKKzoxMDcyQjAwMERCNjAyQzEyMDE1QkZEOTREMkEwRDEwRjJBMkM3NDhCQzEKKzoxMDcyQzAwMDExNUJGNkNERDJBMEQxMEZEQTIwNUJGRTQ3NjNGRjM4MDkKKzoxMDcyRDAwMDAwREEyMEMwQjE1QkZFOEI2NUFGMkQ2M0ZCRUREQTIwRDkKKzoxMDcyRTAwMDJCMjAwQzVCRkU1QTYzRkYxRjAwMDAwMDEyRDY0MjgyNjcKKzoxMDcyRjAwMDIwMDI4MjU3QzgyMTYzRkZGQzEyRDYzRTAzRTgzMDA0MDcKKzoxMDczMDAwMEVFMzAwNUIxMzA5MzIwOTQyMTk1MjI2M0ZGRkMwMDAwRkMKKzoxMDczMTAwMDEwRDYzQTkxMDA5MjAxOTMwMjk0MDMxMUQ2MTE4MjEwNzMKKzoxMDczMjAwMDAxRUEzMEEyMTEwMUYwMzFDMDQwMDRFNDE2MDAwMjAwNkQKKzoxMDczMzAwMDExRDYzMzgyMTAyMzRBMDAwMzIyMDI5MjEwMTFENUZEODgKKzoxMDczNDAwMEMwMjE5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDAwOTEKKzoxMDczNTAwMEQyMzAwMTIzMDAwMDAwMDAxMEQ2MkE5MTAwOTIwMTkzNDAKKzoxMDczNjAwMDAyOTQwMzExRDYwMDgyMTAwMUVBMzBBMjExMDFGMTMxMUEKKzoxMDczNzAwMEMwNDAwNEU0MTYwMDAyMDAxMUQ2MjE4MjEwMTNENUE3RTQKKzoxMDczODAwMDAzMjIwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDE4MTAwMEIKKzoxMDczOTAwMDAwRDMzMDAxMzMwMDAwMDAxMEQ2MUI5MTAwODEwMTY1M0QKKzoxMDczQTAwMDEwNDk4MTAyNjUxMDQ0ODEwM0NGMUY5MjAxOTMwMjk0MUEKKzoxMDczQjAwMDAzMTFENUVFODIxMDAxRUEzMEEyMTEwMUYyMzFDMDQwNzIKKzoxMDczQzAwMDA0RTQxNjAwMDIwMDExRDYwRDgyMTAxM0Q1OEUwMzIyOUMKKzoxMDczRDAwMDAyOTIxMDA0RTQzMTg0MDM4MzAyODIwMUMwMTA5MTAzRkQKKzoxMDczRTAwMDkxMDI5MTAxODEwMDAwRDQzMDAxNDMwMDEyRDVCREMwNEIKKzoxMDczRjAwMDMwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDMjMzRDAxNjgKKzoxMDc0MDAwMDcyMzNFRDAzMDIwMDYzRkZGQzAwMDAwMDEwRDVGRjkxMTIKKzoxMDc0MTAwMDAwOTIwMTkzMDI5NDAzMTFENUZEODIxMDkyMTAxMUQ1QjAKKzoxMDc0MjAwMEFGODMxMDAzMjIwMjkyMTAxMUQ1RkExMkQ1QzE5MjEwMjcKKzoxMDc0MzAwMEMwNDAwNEU0MTYwMDAyMDAxMUQ1RjE4MjEwMTNENUE4NTMKKzoxMDc0NDAwMDAzMjIwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDE4MTAwNEEKKzoxMDc0NTAwMDAwRDUzMDAxNTMwMDAwMDA2QzEwMDI2RTMyMkZENjIwOTAKKzoxMDc0NjAwMDA1NkYwNDA0M0YwNDc0NUIyQTA1NDQwQzAwNDEwNDAwQ0EKKzoxMDc0NzAwMDMzMUEyMjBBMDA2RDQ5MEQ3MzYzMDQwMzY2MENCMTIyQUUKKzoxMDc0ODAwMDBGMjIxMTAzMTMxNDczNjMwMjIyMkMwMUQxMEZDODNCODYKKzoxMDc0OTAwMEQxMEYwMDAwNzM2MzBDQzAyMUQxMEYwMDAwMDAwMDAwNjkKKzoxMDc0QTAwMDQ0NDk1NjMwQzAyMEQxMEY2QzEwMDIwMDQwMDQ2QjRDOTAKKzoxMDc0QjAwMDA3MDMyMzE4MDIwMjE5RDEwRjAyMDMxOUMwMjBEMTBGQUMKKzoxMDc0QzAwMDZDMTAwMjAyRUEzMEQxMEY2QzEwMDJDQzI1MDNGMDMxQUYKKzoxMDc0RDAwMDYwMDAwRjAwNkYyMjA1MDNGMTMxNjAwMDA1NkYyMzA1ODYKKzoxMDc0RTAwMDAzRjIzMTAwMDIwMEQxMEY2QzEwMDJDQzI1MDJGMDMwMDMKKzoxMDc0RjAwMEQxMEYwMDAwNkYyMjA0MDJGMTMwRDEwRjZGMjMwNDAyN0MKKzoxMDc1MDAwMEYyMzBEMTBGQzAyMEQxMEY2QzEwMDIyMjBBMjAyMzBBQzIKKzoxMDc1MTAwMDAwNkQyODBFMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDMzQKKzoxMDc1MjAwMDIzM0QwMTAzMDIwMEQxMEY2QzEwMDIwMkU0MzFEMTBGQTAKKzoxMDc1MzAwMDBBMDAwMDAwNDM2ODY1NkM3MzY5NkYyMDQ2NTcyMDQ0NTkKKzoxMDc1NDAwMDQ1NDI1NTQ3M0QzMDIwMjg0Mjc1Njk2Qzc0MjA1NzY1ODcKKzoxMDc1NTAwMDY0MjA0RjYzNzQyMDIwMzgyMDMxMzUzQTM1MzAzQTM1NzUKKzoxMDc1NjAwMDMwMjA1MDQ0NTQyMDMyMzAzMDM4MjA2RjZFMjA2MzZDMEQKKzoxMDc1NzAwMDY1NkY3MDYxNzQ3MjYxM0EyRjY4NkY2RDY1MkY2NjY1MTMKKzoxMDc1ODAwMDZDNjk3ODJGNzcyRjY2Nzc1RjM3MkUzMDI5MkMyMDU2M0QKKzoxMDc1OTAwMDY1NzI3MzY5NkY2RTIwNTQzMzc4NzgyMDMwMzAzNzJFREYKKzoxMDc1QTAwMDMwMzEyRTMwMzAyMDJEMjAzMTMwMzAzNzMwMzEzMDMwRjYKKzowODc1QjAwMDEwMDcwMTAwNkY0RUY4QkI0QgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3RlaHV0aS9iZHguYmluLmloZXggYi9maXJtd2FyZS90ZWh1dGkvYmR4LmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjllNGMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS90ZWh1dGkvYmR4LmJpbi5paGV4CkBAIC0wLDAgKzEsMjY3OCBAQAorOjEwMDAwMDAwMDIwMDBGMDAwMDgwNzE0MDJEMDAwMDAwMDAwMDAwQzBDMQorOjEwMDAxMDAwMDIwMDBGMDAwMTgwNzEwMDJEMDAwMDAwMDAwMDgwQzA3MAorOjEwMDAyMDAwMDIwMDBGMDAwMjgwNzEwMDJEMDAwMDAwMDAwMDAwQzFERQorOjEwMDAzMDAwMDIwMDBGMDAwMzgwNzEwMDJEMDAwMDAwMDAwMDgwQzE0RAorOjEwMDA0MDAwMDIwMDBGMDAwNDgwNzEwMDJEMDAwMDAwMDAwMDAwQzJCQgorOjEwMDA1MDAwMDIwMDBGMDAwNTgwNzEwMDJEMDAwMDAwMDAwMDgwQzIyQQorOjEwMDA2MDAwMDIwMDBGMDAwNjgwNzEwMDJEMDAwMDAwMDAwMDAwQzM5OAorOjEwMDA3MDAwMDIwMDBGMDAwNzgwNzEwMDJEMDAwMDAwMDAwMDgwQzMwNworOjEwMDA4MDAwMDIwMDBGMDAwODgwNzEwMDJEMDAwMDAwMDAwMDAwQzQ3NQorOjEwMDA5MDAwMDIwMDBGMDAwOTgwNzEwMDJEMDAwMDAwMDAwMDgwQzRFNAorOjEwMDBBMDAwMDIwMDBGMDAwQTgwNzEwMDJEMDAwMDAwMDAwMDAwQzU1MgorOjEwMDBCMDAwMDIwMDBGMDAwQjgwNzEwMDJEMDAwMDAwMDAwMDgwQzVDMQorOjEwMDBDMDAwMDIwMDBGMDAwQzgwNzEwMDJEMDAwMDAwMDAwMDAwQzYyRgorOjEwMDBEMDAwMDIwMDBGMDAwRDgwNzEwMDJEMDAwMDAwMDAwMDgwQzY5RQorOjEwMDBFMDAwMDIwMDBGMDAwRTgwNzEwMDJEMDAwMDAwMDAwMDAwQzcwQworOjEwMDBGMDAwMDIwMDBGMDAwRjgwNzEwMDJEMDAwMDAwMDAwMDgwQzc3QgorOjEwMDEwMDAwMDIwMDBGMDAxMDgwNzEwMDJEMDAwMDAwMDAwMDAwQzhFOAorOjEwMDExMDAwMDIwMDBGMDAxMTgwNzEwMDJEMDAwMDAwMDAwMDgwQzg1NworOjEwMDEyMDAwMDIwMDBGMDAxMjgwNzEwMDJEMDAwMDAwMDAwMDAwQzlDNQorOjEwMDEzMDAwMDIwMDBGMDAxMzgwNzEwMDJEMDAwMDAwMDAwMDgwQzkzNAorOjEwMDE0MDAwMDIwMDBGMDAxNDgwNzEwMDJEMDAwMDAwMDAwMDAwQ0FBMgorOjEwMDE1MDAwMDIwMDBGMDAxNTgwNzEwMDJEMDAwMDAwMDAwMDgwQ0ExMQorOjEwMDE2MDAwMDIwMDBGMDAxNjgwNzEwMDJEMDAwMDAwMDAwMDAwQ0I3RgorOjEwMDE3MDAwMDIwMDBGMDAxNzgwNzEwMDJEMDAwMDAwMDAwMDgwQ0JFRQorOjEwMDE4MDAwMDIwMDBGMDAxODgwNzEwMDJEMDAwMDAwMDAwMDAwQ0M1QworOjEwMDE5MDAwMDIwMDBGMDAxOTgwNzEwMDJEMDAwMDAwMDAwMDgwQ0NDQgorOjEwMDFBMDAwMDIwMDBGMDAxQTgwNzEwMDJEMDAwMDAwMDAwMDAwQ0QzOQorOjEwMDFCMDAwMDIwMDBGMDAxQjgwNzEwMDJEMDAwMDAwMDAwMDgwQ0RBOAorOjEwMDFDMDAwMDIwMDBGMDAxQzgwNzEwMDJEMDAwMDAwMDAwMDAwQ0UxNgorOjEwMDFEMDAwMDIwMDBGMDAxRDgwNzEwMDJEMDAwMDAwMDAwMDgwQ0U4NQorOjEwMDFFMDAwMDIwMDBGMDAxRTgwNzEwMDJEMDAwMDAwMDAwMDAwQ0ZGMworOjEwMDFGMDAwMDIwMDBGMDAxRjgwNzEwMDJEMDAwMDAwMDAwMDgwQ0Y2MgorOjEwMDIwMDAwMDIwMDBGMDAyMDgwNzEwMDJEMDAwMDAwMDAwMDAwRDBDRgorOjEwMDIxMDAwMDIwMDBGMDAyMTgwNzEwMDJEMDAwMDAwMDAwMDgwRDAzRQorOjEwMDIyMDAwMDIwMDBGMDAyMjgwNzEwMDJEMDAwMDAwMDAwMDAwRDFBQworOjEwMDIzMDAwMDIwMDBGMDAyMzgwNzEwMDJEMDAwMDAwMDAwMDgwRDExQgorOjEwMDI0MDAwMDIwMDBGMDAyNDgwNzEwMDJEMDAwMDAwMDAwMDAwRDI4OQorOjEwMDI1MDAwMDIwMDBGMDAyNTgwNzEwMDJEMDAwMDAwMDAwMDgwRDJGOAorOjEwMDI2MDAwMDIwMDBGMDAyNjgwNzEwMDJEMDAwMDAwMDAwMDAwRDM2NgorOjEwMDI3MDAwMDIwMDBGMDAyNzgwNzEwMDJEMDAwMDAwMDAwMDgwRDNENQorOjEwMDI4MDAwMDIwMDBGMDAyODgwNzEwMDJEMDAwMDAwMDAwMDAwRDQ0MworOjEwMDI5MDAwMDIwMDBGMDAyOTgwNzEwMDJEMDAwMDAwMDAwMDgwRDRCMgorOjEwMDJBMDAwMDIwMDBGMDAyQTgwNzEwMDJEMDAwMDAwMDAwMDAwRDUyMAorOjEwMDJCMDAwMDIwMDBGMDAyQjgwNzEwMDJEMDAwMDAwMDAwMDgwRDU4RgorOjEwMDJDMDAwMDIwMDBGMDAyQzgwNzEwMDJEMDAwMDAwMDAwMDAwRDZGRAorOjEwMDJEMDAwMDIwMDBGMDAyRDgwNzEwMDJEMDAwMDAwMDAwMDgwRDY2QworOjEwMDJFMDAwMDIwMDBGMDAyRTgwNzEwMDJEMDAwMDAwMDAwMDAwRDdEQQorOjEwMDJGMDAwMDIwMDBGMDAyRjgwNzEwMDJEMDAwMDAwMDAwMDgwRDc0OQorOjEwMDMwMDAwMDIwMDBGMDAzMDgwNzEwMDJEMDAwMDAwMDAwMDAwRDhCNgorOjEwMDMxMDAwMDIwMDBGMDAzMTgwNzEwMDJEMDAwMDAwMDAwMDgwRDgyNQorOjEwMDMyMDAwMDIwMDBGMDAzMjgwNzEwMDJEMDAwMDAwMDAwMDAwRDk5MworOjEwMDMzMDAwMDIwMDBGMDAzMzgwNzEwMDJEMDAwMDAwMDAwMDgwRDkwMgorOjEwMDM0MDAwMDIwMDBGMDAzNDgwNzEwMDJEMDAwMDAwMDAwMDAwREE3MAorOjEwMDM1MDAwMDIwMDBGMDAzNTgwNzEwMDJEMDAwMDAwMDAwMDgwREFERgorOjEwMDM2MDAwMDIwMDBGMDAzNjgwNzEwMDJEMDAwMDAwMDAwMDAwREI0RAorOjEwMDM3MDAwMDIwMDBGMDAzNzgwNzEwMDJEMDAwMDAwMDAwMDgwREJCQworOjEwMDM4MDAwMDIwMDBGMDAzODgwNzEwMDdCMDAwMDAwMDA4MDYwRERGQgorOjEwMDM5MDAwMDIwMDBGMDAzOTgwNzEwMDJEMDAwMDAwMDAwMDAwREQxOAorOjEwMDNBMDAwMDIwMDBGMDAzQTgwNzEwMDJEMDAwMDAwMDAwMDgwREI4OQorOjEwMDNCMDAwMDIwMDBGMDAzQjgwNzEwMDJEMDAwMDAwMDAwMDAwRERGNgorOjEwMDNDMDAwMDIwMDBGMDAzQzgwNzEwMDJEMDAwMDAwMDAwMDAwRERFNQorOjEwMDNEMDAwMDIwMDBGMDAzRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMDNFMDAwMDIwMDBGMDAzRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDNGMDAwMDIwMDBGMDAzRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMDQwMDAwMDIwMDBGMDA0MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwMDQxMDAwMDIwMDBGMDA0MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDQyMDAwMDIwMDBGMDA0MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDQzMDAwMDIwMDBGMDA0MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDQ0MDAwMDIwMDBGMDA0NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMDQ1MDAwMDIwMDBGMDA0NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMDQ2MDAwMDIwMDBGMDA0NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMDQ3MDAwMDIwMDBGMDA0NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMDQ4MDAwMDIwMDBGMDA0ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMDQ5MDAwMDIwMDBGMDA0OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMDRBMDAwMDIwMDBGMDA0QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMDRCMDAwMDIwMDBGMDA0QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDRDMDAwMDIwMDBGMDA0QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMDREMDAwMDIwMDBGMDA0RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDRFMDAwMDIwMDBGMDA0RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMDRGMDAwMDIwMDBGMDA0RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMDUwMDAwMDIwMDBGMDA1MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwMDUxMDAwMDIwMDBGMDA1MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDUyMDAwMDIwMDBGMDA1MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDUzMDAwMDIwMDBGMDA1MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMDU0MDAwMDIwMDBGMDA1NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMDU1MDAwMDIwMDBGMDA1NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMDU2MDAwMDIwMDBGMDA1NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMDU3MDAwMDIwMDBGMDA1NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMDU4MDAwMDIwMDBGMDA1ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMDU5MDAwMDIwMDBGMDA1OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwMDVBMDAwMDIwMDBGMDA1QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDVCMDAwMDIwMDBGMDA1QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMDVDMDAwMDIwMDBGMDA1QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMDVEMDAwMDIwMDBGMDA1RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMDVFMDAwMDIwMDBGMDA1RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMDVGMDAwMDIwMDBGMDA1RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwMDYwMDAwMDIwMDBGMDA2MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwMDYxMDAwMDIwMDBGMDA2MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMDYyMDAwMDIwMDBGMDA2MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMDYzMDAwMDIwMDBGMDA2MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMDY0MDAwMDIwMDBGMDA2NDgwNzEwMDJEMDAwMDAwMDAwMDAwREIzQworOjEwMDY1MDAwMDIwMDBGMDA2NTgwNzEwMDNGMDAwMDAwMDQwMTAwREQxMgorOjEwMDY2MDAwMDIwMDBGMDA2NjgwNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMDY3MDAwMDIwMDBGMDA2NzgwNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMDY4MDAwMDIwMDBGMDA2ODgwNzEwMDNGMDAwMDAwMDQwODAwREREOAorOjEwMDY5MDAwMDIwMDBGMDA2OTgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDZBMDAwMDIwMDBGMDA2QTgwNzEwMDNGMDAwMDAwMDQzMDAwREQ4RQorOjEwMDZCMDAwMDIwMDBGMDA2QjgwNzEwMDNGMDAwMDAwMDEwMDE4REQ5OAorOjEwMDZDMDAwMDIwMDBGMDA2QzgwNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMDZEMDAwMDIwMDBGMDA2RDgwNzEwMDNGMDAwMDAwMDQwMDAwREQ4QgorOjEwMDZFMDAwMDIwMDBGMDA2RTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMDZGMDAwMDIwMDBGMDA2RjgwNzEwMDNGMDAwMDAwMDQzRDAwREQyQworOjEwMDcwMDAwMDIwMDBGMDA3MDgwNzEwMDNGMDAwMDAwMDEwMDE4REQ0MgorOjEwMDcxMDAwMDIwMDBGMDA3MTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMDcyMDAwMDIwMDBGMDA3MjgwNzEwMDNGMDAwMDAwMDQwNzAwREQyRQorOjEwMDczMDAwMDIwMDBGMDA3MzgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0NworOjEwMDc0MDAwMDIwMDBGMDA3NDgwNzEwMDNGMDAwMDAwODQyODAwREQ2QgorOjEwMDc1MDAwMDIwMDBGMDA3NTgwNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMDc2MDAwMDIwMDBGMDA3NjgwNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMDc3MDAwMDIwMDBGMDA3NzgwNzEwMDNGMDAwMDAwMDQzNzAwRERBOQorOjEwMDc4MDAwMDIwMDBGMDA3ODgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDc5MDAwMDIwMDBGMDA3OTgwNzEwMDNGMDAwMDAwMDQyOTAwREQ5NQorOjEwMDdBMDAwMDIwMDBGMDA3QTgwNzEwMDNGMDAwMDAwMDEwMDE4REQ5OAorOjEwMDdCMDAwMDIwMDBGMDA3QjgwNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMDdDMDAwMDIwMDBGMDA3QzgwNzEwMDNGMDAwMDAwMDRBQTA0RERERAorOjEwMDdEMDAwMDIwMDBGMDA3RDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMDdFMDAwMDIwMDBGMDA3RTgwNzEwMDNGMDAwMDAwMDQyODAwREQ0MQorOjEwMDdGMDAwMDIwMDBGMDA3RjgwNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMDgwMDAwMDIwMDBGMDA4MDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMDgxMDAwMDIwMDBGMDA4MTgwNzEwMDNGMDAwMDAwMDQzMTAwREQwNAorOjEwMDgyMDAwMDIwMDBGMDA4MjgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0NworOjEwMDgzMDAwMDIwMDBGMDA4MzgwNzEwMDNGMDAwMDAwODQyQjAwREQ2OAorOjEwMDg0MDAwMDIwMDBGMDA4NDgwNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMDg1MDAwMDIwMDBGMDA4NTgwNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMDg2MDAwMDIwMDBGMDA4NjgwNzEwMDNGMDAwMDAwMDRFNDAxRERGQgorOjEwMDg3MDAwMDIwMDBGMDA4NzgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDg4MDAwMDIwMDBGMDA4ODgwNzEwMDNGMDAwMDAwODQwMDgwRDdDNAorOjEwMDg5MDAwMDIwMDBGMDA4OTgwNzEwMDNGMDAwMDAwMDEwMDk4RDcxRQorOjEwMDhBMDAwMDIwMDBGMDA4QTgwNzEwMDU5MDAwMDAwRUYzNzgwRDdFNgorOjEwMDhCMDAwMDIwMDBGMDA4QjgwNzEwMDNEMDAwMDAwNkYwMDgwRjc4OAorOjEwMDhDMDAwMDIwMDBGMDA4QzgwNzEwMDNEMDAwMDAwNkYwMDgwRjc3NworOjEwMDhEMDAwMDIwMDBGMDA4RDgwNzEwMDNEMDAwMDAwNkYwMDgwRjc2NgorOjEwMDhFMDAwMDIwMDBGMDA4RTgwNzEwMDJEMDAwMDAwN0YwMkQ2RDcxRAorOjEwMDhGMDAwMDIwMDBGMDA4RjgwNzEwMDE4MDAwMDAwODEwMEZGMTdCOAorOjEwMDkwMDAwMDIwMDBGMDA5MDgwNzEwMDNEMDAwMDAwNkYwMDgwRjczMgorOjEwMDkxMDAwMDIwMDBGMDA5MTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyMQorOjEwMDkyMDAwMDIwMDBGMDA5MjgwNzEwMDJEMDAwMDAwQjgwMEQ4RDc5RgorOjEwMDkzMDAwMDIwMDBGMDA5MzgwNzEwMDE4MDAwMDAwODEwMEVCMTc4NworOjEwMDk0MDAwMDIwMDBGMDA5NDgwNzEwMDNGMDAwMDAwMDQyOTAwRERDOAorOjEwMDk1MDAwMDIwMDBGMDA5NTgwNzEwMDNGMDAwMDAwMDEwMDE4RERDQgorOjEwMDk2MDAwMDIwMDBGMDA5NjgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMDk3MDAwMDIwMDBGMDA5NzgwNzEwMDNGMDAwMDAwODRBQTA0REQ5MAorOjEwMDk4MDAwMDIwMDBGMDA5ODgwNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMDk5MDAwMDIwMDBGMDA5OTgwNzEwMDNGMDAwMDAwMDQyQjAwREQ3MQorOjEwMDlBMDAwMDIwMDBGMDA5QTgwNzEwMDNGMDAwMDAwMDEwMDE4REQ3NgorOjEwMDlCMDAwMDIwMDBGMDA5QjgwNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMDlDMDAwMDIwMDBGMDA5QzgwNzEwMDNGMDAwMDAwMDQwMDAwREQ2OQorOjEwMDlEMDAwMDIwMDBGMDA5RDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ3QgorOjEwMDlFMDAwMDIwMDBGMDA5RTgwNzEwMDNGMDAwMDAwODQyOTAwREQ5RQorOjEwMDlGMDAwMDIwMDBGMDA5RjgwNzEwMDNGMDAwMDAwMDEwMDE4REQyMQorOjEwMEEwMDAwMDIwMDBGMDBBMDgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0NworOjEwMEExMDAwMDIwMDBGMDBBMTgwNzEwMDNGMDAwMDAwMDQwMDAwREQxMworOjEwMEEyMDAwMDIwMDBGMDBBMjgwNzEwMDY5MDAwMDAwN0EzRDAwREQyNQorOjEwMEEzMDAwMDIwMDBGMDBBMzgwNzEwMDNGMDAwMDAwMDQyQTAwRERDNworOjEwMEE0MDAwMDIwMDBGMDBBNDgwNzEwMDNGMDAwMDAwMDEwMDE4RERDQgorOjEwMEE1MDAwMDIwMDBGMDBBNTgwNzEwMDY5MDAwMDAwN0EzRDAwRERGMgorOjEwMEE2MDAwMDIwMDBGMDBBNjgwNzEwMDNGMDAwMDAwODQ5MTAwRERBRAorOjEwMEE3MDAwMDIwMDBGMDBBNzgwNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMEE4MDAwMDIwMDBGMDBBODgwNzEwMDNGMDAwMDAwODQxOTgwRDY4QQorOjEwMEE5MDAwMDIwMDBGMDBBOTgwNzEwMDNGMDAwMDAwMDEwMDgwRDYxNQorOjEwMEFBMDAwMDIwMDBGMDBBQTgwNzEwMDM1MDAwMDAwRUQwMDgwRDYyMgorOjEwMEFCMDAwMDIwMDBGMDBBQjgwNzEwMDE4MDAwMDAwODEwMEZGMzdCQQorOjEwMEFDMDAwMDIwMDBGMDBBQzgwNzEwMDNGMDAwMDAwMDQyQjAwREQyRAorOjEwMEFEMDAwMDIwMDBGMDBBRDgwNzEwMDNGMDAwMDAwMDEwMDE4REQzMgorOjEwMEFFMDAwMDIwMDBGMDBBRTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ1OQorOjEwMEFGMDAwMDIwMDBGMDBBRjgwNzEwMDNGMDAwMDAwMDQwMDAwREQyNQorOjEwMEIwMDAwMDIwMDBGMDBCMDgwNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMEIxMDAwMDIwMDBGMDBCMTgwNzEwMDNGMDAwMDAwODQyQTAwREQ1OAorOjEwMEIyMDAwMDIwMDBGMDBCMjgwNzEwMDNGMDAwMDAwMDEwMDE4REREQworOjEwMEIzMDAwMDIwMDBGMDBCMzgwNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMEI0MDAwMDIwMDBGMDBCNDgwNzEwMDNGMDAwMDAwMDQwMDAwRERDRgorOjEwMEI1MDAwMDIwMDBGMDBCNTgwNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMEI2MDAwMDIwMDBGMDBCNjgwNzEwMDNGMDAwMDAwODQwQzgwRDZBOAorOjEwMEI3MDAwMDIwMDBGMDBCNzgwNzEwMDNGMDAwMDAwMDEwMDgwRDYyNgorOjEwMEI4MDAwMDIwMDBGMDBCODgwNzEwMDM1MDAwMDAwRUQwMDgwRDYzMworOjEwMEI5MDAwMDIwMDBGMDBCOTgwNzEwMDE4MDAwMDAwODEwMEZGMzdDQgorOjEwMEJBMDAwMDIwMDBGMDBCQTgwNzEwMDNGMDAwMDAwODQyQTAwRERCRgorOjEwMEJCMDAwMDIwMDBGMDBCQjgwNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMEJDMDAwMDIwMDBGMDBCQzgwNzEwMDY5MDAwMDAwN0EzRDAwREQ2QQorOjEwMEJEMDAwMDIwMDBGMDBCRDgwNzEwMDNGMDAwMDAwMDQwMDAwREQzNgorOjEwMEJFMDAwMDIwMDBGMDBCRTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ0OAorOjEwMEJGMDAwMDIwMDBGMDBCRjgwNzEwMDNGMDAwMDAwODQwRjgwRDYwQworOjEwMEMwMDAwMDIwMDBGMDBDMDgwNzEwMDNGMDAwMDAwMDEwMDgwRDY4QworOjEwMEMxMDAwMDIwMDBGMDBDMTgwNzEwMDM1MDAwMDAwRUQwMDgwRDY5OQorOjEwMEMyMDAwMDIwMDBGMDBDMjgwNzEwMDE4MDAwMDAwODEwMEZGMzczMQorOjEwMEMzMDAwMDIwMDBGMDBDMzgwNzEwMDNGMDAwMDAwMDQyQTAwRERBNQorOjEwMEM0MDAwMDIwMDBGMDBDNDgwNzEwMDNGMDAwMDAwMDEwMDE4RERBOQorOjEwMEM1MDAwMDIwMDBGMDBDNTgwNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMEM2MDAwMDIwMDBGMDBDNjgwNzEwMDNGMDAwMDAwODQxMTAwREQwQgorOjEwMEM3MDAwMDIwMDBGMDBDNzgwNzEwMDY5MDAwMDAwN0EzRDAwRERBRQorOjEwMEM4MDAwMDIwMDBGMDBDODgwNzEwMDNGMDAwMDAwODQyODAwREREMgorOjEwMEM5MDAwMDIwMDBGMDBDOTgwNzEwMDNGMDAwMDAwMDEwMDE4REQ1NAorOjEwMENBMDAwMDIwMDBGMDBDQTgwNzEwMDY5MDAwMDAwN0EzRDAwREQ3QgorOjEwMENCMDAwMDIwMDBGMDBDQjgwNzEwMDNGMDAwMDAwODQzNzAwREQ5MAorOjEwMENDMDAwMDIwMDBGMDBDQzgwNzEwMDY5MDAwMDAwN0EzRDAwREQ1OQorOjEwMENEMDAwMDIwMDBGMDBDRDgwNzEwMDJEMDAwMDAwMDAwMDgwRDNDNQorOjEwMENFMDAwMDIwMDBGMDBDRTgwNzEwMDNGMDAwMDAwODAzNzAwRDI2QworOjEwMENGMDAwMDIwMDBGMDBDRjgwNzEwMDNGMDAwMDAwMDQwNDgwRDE4QgorOjEwMEQwMDAwMDIwMDBGMDBEMDgwNzEwMDNGMDAwMDAwMDEwMDg0RDE3QworOjEwMEQxMDAwMDIwMDBGMDBEMTgwNzEwMDY5MDAwMDAwNzYzQjAwREQwOQorOjEwMEQyMDAwMDIwMDBGMDBEMjgwNzEwMDY5MDAwMDAwNzYzQjAwRERGOAorOjEwMEQzMDAwMDIwMDBGMDBEMzgwNzEwMDY5MDAwMDAwNzYzQjAwRERFNworOjEwMEQ0MDAwMDIwMDBGMDBENDgwNzEwMDNGMDAwMDAwODRGRjdGRDFCQgorOjEwMEQ1MDAwMDIwMDBGMDBENTgwNzEwMDNGMDAwMDAwODFGRjdGRDFBRAorOjEwMEQ2MDAwMDIwMDBGMDBENjgwNzEwMDY5MDAwMDAwNzYzQjAwRERCNAorOjEwMEQ3MDAwMDIwMDBGMDBENzgwNzEwMDY5MDAwMDAwNzYzQjAwRERBMworOjEwMEQ4MDAwMDIwMDBGMDBEODgwNzEwMDY5MDAwMDAwNzYzQjAwREQ5MgorOjEwMEQ5MDAwMDIwMDBGMDBEOTgwNzEwMDY5MDAwMDAwNzYzQjAwREQ4MQorOjEwMERBMDAwMDIwMDBGMDBEQTgwNzEwMDY5MDAwMDAwNzYzQjAwREQ3MAorOjEwMERCMDAwMDIwMDBGMDBEQjgwNzEwMDY5MDAwMDAwNzYzQjAwREQ1RgorOjEwMERDMDAwMDIwMDBGMDBEQzgwNzEwMDNGMDAwMDAwODQwNzgwRDYyNQorOjEwMEREMDAwMDIwMDBGMDBERDgwNzEwMDNGMDAwMDAwMDEwMDgwRDY5RQorOjEwMERFMDAwMDIwMDBGMDBERTgwNzEwMDM1MDAwMDAwRUQwMDgwRDZBQgorOjEwMERGMDAwMDIwMDBGMDBERjgwNzEwMDE4MDAwMDAwODEwMEZGMzc0MworOjEwMEUwMDAwMDIwMDBGMDBFMDgwNzEwMDQ5MDAwMDAwNjMzQjAwREQzQworOjEwMEUxMDAwMDIwMDBGMDBFMTgwNzEwMDU5MDAwMDAwNzYzQjAwREQwOAorOjEwMEUyMDAwMDIwMDBGMDBFMjgwNzEwMDNEMDAwMDAwNkYwMDgwRjdCQgorOjEwMEUzMDAwMDIwMDBGMDBFMzgwNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMEU0MDAwMDIwMDBGMDBFNDgwNzEwMDNEMDAwMDAwNkYwMDgwRjc5OQorOjEwMEU1MDAwMDIwMDBGMDBFNTgwNzEwMDJEMDAwMDAwN0YwMjA2REQxQQorOjEwMEU2MDAwMDIwMDBGMDBFNjgwNzEwMDE4MDAwMDAwN0EzRDdGMUQyRgorOjEwMEU3MDAwMDIwMDBGMDBFNzgwNzEwMDQ1MDAwMDAwMzkzMTAwRERGRAorOjEwMEU4MDAwMDIwMDBGMDBFODgwNzEwMDk0MDAwMDAwM0IzMTBCMDA2RAorOjEwMEU5MDAwMDIwMDBGMDBFOTgwNzEwMDk0MDAwMDAwM0QzMTA5MDA1QworOjEwMEVBMDAwMDIwMDBGMDBFQTgwNzEwMDk0MDAwMDAwM0YzMTA3MDA0QgorOjEwMEVCMDAwMDIwMDBGMDBFQjgwNzEwMDk0MDAwMDAwNzYzQjA1MDBGQgorOjEwMEVDMDAwMDIwMDBGMDBFQzgwNzEwMDA5MDAwMDAwN0EzREVEQzFDNgorOjEwMEVEMDAwMDIwMDBGMDBFRDgwNzEwMDNGMDAwMDAwODBCNzAwRDJEQgorOjEwMEVFMDAwMDIwMDBGMDBFRTgwNzEwMDNGMDAwMDAwODQyODAwREQ0QQorOjEwMEVGMDAwMDIwMDBGMDBFRjgwNzEwMDNGMDAwMDAwMDEwMDE4RERDQworOjEwMEYwMDAwMDIwMDBGMDBGMDgwNzEwMDY5MDAwMDAwNjQzMjAwREQxMworOjEwMEYxMDAwMDIwMDBGMDBGMTgwNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMEYyMDAwMDIwMDBGMDBGMjgwNzEwMDNGMDAwMDAwODQwNzgwRDZBRAorOjEwMEYzMDAwMDIwMDBGMDBGMzgwNzEwMDNGMDAwMDAwMDEwMDgwRDYyNgorOjEwMEY0MDAwMDIwMDBGMDBGNDgwNzEwMDM1MDAwMDAwRUQwMDgwRDYzMworOjEwMEY1MDAwMDIwMDBGMDBGNTgwNzEwMDE4MDAwMDAwODEwMEZGMzdDQgorOjEwMEY2MDAwMDIwMDBGMDBGNjgwNzEwMDQ5MDAwMDAwNjMzQjAwRERDNQorOjEwMEY3MDAwMDIwMDBGMDBGNzgwNzEwMDU5MDAwMDAwNzYzQjAwREQ5MQorOjEwMEY4MDAwMDIwMDBGMDBGODgwNzEwMDNEMDAwMDAwNkYwMDgwRjc0NAorOjEwMEY5MDAwMDIwMDBGMDBGOTgwNzEwMDNEMDAwMDAwNkYwMDgwRjczMworOjEwMEZBMDAwMDIwMDBGMDBGQTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyMgorOjEwMEZCMDAwMDIwMDBGMDBGQjgwNzEwMDJEMDAwMDAwN0YwMjA2RERBMworOjEwMEZDMDAwMDIwMDBGMDBGQzgwNzEwMDE4MDAwMDAwN0EzRDdGMURCOAorOjEwMEZEMDAwMDIwMDBGMDBGRDgwNzEwMDQ1MDAwMDAwM0EzMTAwREQ4NQorOjEwMEZFMDAwMDIwMDBGMDBGRTgwNzEwMDE4MDAwMDAwNzYzQjJEMURFRQorOjEwMEZGMDAwMDIwMDBGMDBGRjgwNzEwMDQ1MDAwMDAwM0MzMTAwREQ2MQorOjEwMTAwMDAwMDIwMDBGMDAwMDgxNzEwMDE4MDAwMDAwNzYzQjEzMURFNAorOjEwMTAxMDAwMDIwMDBGMDAwMTgxNzEwMDQ1MDAwMDAwM0UzMTAwREQzQgorOjEwMTAyMDAwMDIwMDBGMDAwMjgxNzEwMDE4MDAwMDAwNzYzQjFCMURCQQorOjEwMTAzMDAwMDIwMDBGMDAwMzgxNzEwMDNGMDAwMDAwMDQzMDAwREQ1QQorOjEwMTA0MDAwMDIwMDBGMDAwNDgxNzEwMDNGMDAwMDAwMDEwMDE4REQ2NAorOjEwMTA1MDAwMDIwMDBGMDAwNTgxNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMTA2MDAwMDIwMDBGMDAwNjgxNzEwMDNGMDAwMDAwMDQwMTAwREQ1NgorOjEwMTA3MDAwMDIwMDBGMDAwNzgxNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMTA4MDAwMDIwMDBGMDAwODgxNzEwMDA5MDAwMDAwN0EzRDJEQzVBMworOjEwMTA5MDAwMDIwMDBGMDAwOTgxNzEwMDI5MDAwMDAwNjQwMDAxRDJFNAorOjEwMTBBMDAwMDIwMDBGMDAwQTgxNzEwMDNGMDAwMDAwODQyODAwREQ2QgorOjEwMTBCMDAwMDIwMDBGMDAwQjgxNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMTBDMDAwMDIwMDBGMDAwQzgxNzEwMDY5MDAwMDAwNjQzMjAwREQzNQorOjEwMTBEMDAwMDIwMDBGMDAwRDgxNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMTBFMDAwMDIwMDBGMDAwRTgxNzEwMDA5MDAwMDAwN0EzRDI5QzI0NAorOjEwMTBGMDAwMDIwMDBGMDAwRjgxNzEwMDI5MDAwMDAwNjQwMDAwRDI3RgorOjEwMTEwMDAwMDIwMDBGMDAxMDgxNzEwMDNGMDAwMDAwODQyODAwREQwNAorOjEwMTExMDAwMDIwMDBGMDAxMTgxNzEwMDNGMDAwMDAwMDEwMDE4REQ4NgorOjEwMTEyMDAwMDIwMDBGMDAxMjgxNzEwMDY5MDAwMDAwNjQzMjAwRERDRQorOjEwMTEzMDAwMDIwMDBGMDAxMzgxNzEwMDY5MDAwMDAwN0EzRDAwREQ5QworOjEwMTE0MDAwMDIwMDBGMDAxNDgxNzEwMDQ5MDAwMDAwNjMzQjAwRERDNAorOjEwMTE1MDAwMDIwMDBGMDAxNTgxNzEwMDU5MDAwMDAwNzYzQjAwREQ5MAorOjEwMTE2MDAwMDIwMDBGMDAxNjgxNzEwMDNEMDAwMDAwNkYwMDgwRjc0MworOjEwMTE3MDAwMDIwMDBGMDAxNzgxNzEwMDNEMDAwMDAwNkYwMDgwRjczMgorOjEwMTE4MDAwMDIwMDBGMDAxODgxNzEwMDNEMDAwMDAwNkYwMDgwRjcyMQorOjEwMTE5MDAwMDIwMDBGMDAxOTgxNzEwMDJEMDAwMDAwN0YwMjA2RERBMgorOjEwMTFBMDAwMDIwMDBGMDAxQTgxNzEwMDE4MDAwMDAwN0EzRDdGMURCNworOjEwMTFCMDAwMDIwMDBGMDAxQjgxNzEwMDQ1MDAwMDAwM0EzMTAwREQ4NAorOjEwMTFDMDAwMDIwMDBGMDAxQzgxNzEwMDE4MDAwMDAwNzYzQjBGMUQwQgorOjEwMTFEMDAwMDIwMDBGMDAxRDgxNzEwMDNGMDAwMDAwMDQzMDAwREQ5RgorOjEwMTFFMDAwMDIwMDBGMDAxRTgxNzEwMDNGMDAwMDAwMDEwMDE4RERBOQorOjEwMTFGMDAwMDIwMDBGMDAxRjgxNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMTIwMDAwMDIwMDBGMDAyMDgxNzEwMDNGMDAwMDAwMDQwMTAwREQ5QQorOjEwMTIxMDAwMDIwMDBGMDAyMTgxNzEwMDY5MDAwMDAwN0EzRDAwRERBRAorOjEwMTIyMDAwMDIwMDBGMDAyMjgxNzEwMDA5MDAwMDAwN0EzRDJEQzVFNworOjEwMTIzMDAwMDIwMDBGMDAyMzgxNzEwMDJEMDAwMDAwODIwMDA4RDEwMAorOjEwMTI0MDAwMDIwMDBGMDAyNDgxNzEwMDA4MDAwMDAwN0EzREMzMjNEMgorOjEwMTI1MDAwMDIwMDBGMDAyNTgxNzEwMDQ5MDAwMDAwMEEzQjAwRDYwMgorOjEwMTI2MDAwMDIwMDBGMDAyNjgxNzEwMDNGMDAwMDAwMDQwMDAwRDMzRgorOjEwMTI3MDAwMDIwMDBGMDAyNzgxNzEwMDNGMDAwMDAwMDEwMDA0RDMyRAorOjEwMTI4MDAwMDIwMDBGMDAyODgxNzEwMDJGMDAwMDAwODU0MDgxRDZFOAorOjEwMTI5MDAwMDIwMDBGMDAyOTgxNzEwMDNGMDAwMDAwODRGRkZGRDQ4RAorOjEwMTJBMDAwMDIwMDBGMDAyQTgxNzEwMDNGMDAwMDAwODEwNzgwRDRGNgorOjEwMTJCMDAwMDIwMDBGMDAyQjgxNzEwMDNGMDAwMDAwODRGRkZGRDE2RQorOjEwMTJDMDAwMDIwMDBGMDAyQzgxNzEwMDNGMDAwMDAwMDEwMDgwRDE1RQorOjEwMTJEMDAwMDIwMDBGMDAyRDgxNzEwMDQ5MDAwMDAwNjYzNjAwREQxQworOjEwMTJFMDAwMDIwMDBGMDAyRTgxNzEwMDY5MDAwMDAwNzYzQjAwRERENgorOjEwMTJGMDAwMDIwMDBGMDAyRjgxNzEwMDY5MDAwMDAwNzYzQjAwRERDNQorOjEwMTMwMDAwMDIwMDBGMDAzMDgxNzEwMDY5MDAwMDAwNzYzQjAwRERCMworOjEwMTMxMDAwMDIwMDBGMDAzMTgxNzEwMDY5MDAwMDAwNjkzQjAwRERBRgorOjEwMTMyMDAwMDIwMDBGMDAzMjgxNzEwMDY5MDAwMDAwNzYzQjAwREQ5MQorOjEwMTMzMDAwMDIwMDBGMDAzMzgxNzEwMDY5MDAwMDAwNzYzQjAwREQ4MAorOjEwMTM0MDAwMDIwMDBGMDAzNDgxNzEwMDY5MDAwMDAwNzYzQjAwREQ2RgorOjEwMTM1MDAwMDIwMDBGMDAzNTgxNzEwMDY5MDAwMDAwNjkzQjAwREQ2QgorOjEwMTM2MDAwMDIwMDBGMDAzNjgxNzEwMDYxMDAwMDAwNkMwNDAwRjY3RAorOjEwMTM3MDAwMDIwMDBGMDAzNzgxNzEwMDM1MDAwMDAwRUQwMDgwRDZCQgorOjEwMTM4MDAwMDIwMDBGMDAzODgxNzEwMDE4MDAwMDAwODEwMDZCM0RFMQorOjEwMTM5MDAwMDIwMDBGMDAzOTgxNzEwMDQ5MDAwMDAwOEIwNTAwRDY2MgorOjEwMTNBMDAwMDIwMDBGMDAzQTgxNzEwMDJGMDAwMDAwMDYwMTgxRDY3MworOjEwMTNCMDAwMDIwMDBGMDAzQjgxNzEwMDJEMDAwMDAwMDAwMDAwRDJGMAorOjEwMTNDMDAwMDIwMDBGMDAzQzgxNzEwMDIxMDAwMDAwRTQwMDAwRDIwNworOjEwMTNEMDAwMDIwMDBGMDAzRDgxNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMTNFMDAwMDIwMDBGMDAzRTgxNzEwMDJEMDAwMDAwN0YwMTA2REQyQworOjEwMTNGMDAwMDIwMDBGMDAzRjgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ0MAorOjEwMTQwMDAwMDIwMDBGMDA0MDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhENgorOjEwMTQxMDAwMDIwMDBGMDA0MTgxNzEwMDY5MDAwMDAwRTczMzAwRDgyRAorOjEwMTQyMDAwMDIwMDBGMDA0MjgxNzEwMDY5MDAwMDAwRTczMzAwRDgxQworOjEwMTQzMDAwMDIwMDBGMDA0MzgxNzEwMDY5MDAwMDAwRUYzNzAwRDhGRgorOjEwMTQ0MDAwMDIwMDBGMDA0NDgxNzEwMDMxMDAwMDAwNkMwMTAwRDZFMQorOjEwMTQ1MDAwMDIwMDBGMDA0NTgxNzEwMDJEMDAwMDAwMDAwMDAwRDE0NgorOjEwMTQ2MDAwMDIwMDBGMDA0NjgxNzEwMDQ5MDAwMDAwRTQzMzdBRDE4OAorOjEwMTQ3MDAwMDIwMDBGMDA0NzgxNzEwMDJGMDAwMDAwNjIwMTcxRDE0RQorOjEwMTQ4MDAwMDIwMDBGMDA0ODgxNzEwMDJGMDAwMDAwNjIwMTYxRDE0RAorOjEwMTQ5MDAwMDIwMDBGMDA0OTgxNzEwMDQ5MDAwMDAwRTMzMzQwRDE5MAorOjEwMTRBMDAwMDIwMDBGMDA0QTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdDQworOjEwMTRCMDAwMDIwMDBGMDA0QjgxNzEwMDJEMDAwMDAwN0YwMTA2REQ0RQorOjEwMTRDMDAwMDIwMDBGMDA0QzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ2MgorOjEwMTREMDAwMDIwMDBGMDA0RDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhGOQorOjEwMTRFMDAwMDIwMDBGMDA0RTgxNzEwMDY5MDAwMDAwRTczMzAwRDg1MAorOjEwMTRGMDAwMDIwMDBGMDA0RjgxNzEwMDY5MDAwMDAwNjIzMTAwRDhDNgorOjEwMTUwMDAwMDIwMDBGMDA1MDgxNzEwMDY5MDAwMDAwRUYzNzAwRDgyMQorOjEwMTUxMDAwMDIwMDBGMDA1MTgxNzEwMDMxMDAwMDAwNkMwMTAwRDYwMworOjEwMTUyMDAwMDIwMDBGMDA1MjgxNzEwMDNEMDAwMDAwNkYwMDgwRjc0MworOjEwMTUzMDAwMDIwMDBGMDA1MzgxNzEwMDJEMDAwMDAwN0YwMTA2RERDNQorOjEwMTU0MDAwMDIwMDBGMDA1NDgxNzEwMDE4MDAwMDAwN0EzRDdGMUREOQorOjEwMTU1MDAwMDIwMDBGMDA1NTgxNzEwMDQ5MDAwMDAwNkMzNjAwRDg3MAorOjEwMTU2MDAwMDIwMDBGMDA1NjgxNzEwMDY5MDAwMDAwRTczMzAwRDhDNworOjEwMTU3MDAwMDIwMDBGMDA1NzgxNzEwMDY5MDAwMDAwRTczMzAwRDhCNgorOjEwMTU4MDAwMDIwMDBGMDA1ODgxNzEwMDY5MDAwMDAwRUYzNzAwRDg5OQorOjEwMTU5MDAwMDIwMDBGMDA1OTgxNzEwMDMxMDAwMDAwNkMwMTAwRDY3QgorOjEwMTVBMDAwMDIwMDBGMDA1QTgxNzEwMDJEMDAwMDAwMDAwMDAwRDFFMAorOjEwMTVCMDAwMDIwMDBGMDA1QjgxNzEwMDJEMDAwMDAwRTQwNzZDRDE3OAorOjEwMTVDMDAwMDIwMDBGMDA1QzgxNzEwMDQ5MDAwMDAwRTMzMzQwRDE0QworOjEwMTVEMDAwMDIwMDBGMDA1RDgxNzEwMDNEMDAwMDAwNkYwMDgwRjc4OAorOjEwMTVFMDAwMDIwMDBGMDA1RTgxNzEwMDJEMDAwMDAwN0YwMTA2REQwQQorOjEwMTVGMDAwMDIwMDBGMDA1RjgxNzEwMDE4MDAwMDAwN0EzRDdGMUQxRQorOjEwMTYwMDAwMDIwMDBGMDA2MDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhCNAorOjEwMTYxMDAwMDIwMDBGMDA2MTgxNzEwMDY5MDAwMDAwRTczMzAwRDgwQgorOjEwMTYyMDAwMDIwMDBGMDA2MjgxNzEwMDY5MDAwMDAwNjIzMTAwRDg4MQorOjEwMTYzMDAwMDIwMDBGMDA2MzgxNzEwMDY5MDAwMDAwRUYzNzAwRDhERAorOjEwMTY0MDAwMDIwMDBGMDA2NDgxNzEwMDMxMDAwMDAwNkMwMTAwRDZCRgorOjEwMTY1MDAwMDIwMDBGMDA2NTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdGRgorOjEwMTY2MDAwMDIwMDBGMDA2NjgxNzEwMDJEMDAwMDAwN0YwMTA2REQ4MQorOjEwMTY3MDAwMDIwMDBGMDA2NzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ5NQorOjEwMTY4MDAwMDIwMDBGMDA2ODgxNzEwMDQ5MDAwMDAwNkMzNjAwRDgyQworOjEwMTY5MDAwMDIwMDBGMDA2OTgxNzEwMDY5MDAwMDAwRTczMzAwRDg4MworOjEwMTZBMDAwMDIwMDBGMDA2QTgxNzEwMDY5MDAwMDAwRTczMzAwRDg3MgorOjEwMTZCMDAwMDIwMDBGMDA2QjgxNzEwMDY5MDAwMDAwRUYzNzAwRDg1NQorOjEwMTZDMDAwMDIwMDBGMDA2QzgxNzEwMDMxMDAwMDAwNkMwMTAwRDYzNworOjEwMTZEMDAwMDIwMDBGMDA2RDgxNzEwMDJEMDAwMDAwMDAwMDAwRDE5QworOjEwMTZFMDAwMDIwMDBGMDA2RTgxNzEwMDQ5MDAwMDAwRTQzMzc4RDFFMAorOjEwMTZGMDAwMDIwMDBGMDA2RjgxNzEwMDJGMDAwMDAwNjIwMTcxRDFBNAorOjEwMTcwMDAwMDIwMDBGMDA3MDgxNzEwMDJGMDAwMDAwNjIwMTYxRDFBMgorOjEwMTcxMDAwMDIwMDBGMDA3MTgxNzEwMDQ5MDAwMDAwRTMzMzQwRDFFNQorOjEwMTcyMDAwMDIwMDBGMDA3MjgxNzEwMDNEMDAwMDAwNkYwMDgwRjcyMQorOjEwMTczMDAwMDIwMDBGMDA3MzgxNzEwMDJEMDAwMDAwN0YwMTA2RERBMworOjEwMTc0MDAwMDIwMDBGMDA3NDgxNzEwMDE4MDAwMDAwN0EzRDdGMURCNworOjEwMTc1MDAwMDIwMDBGMDA3NTgxNzEwMDQ5MDAwMDAwNkMzNjAwRDg0RQorOjEwMTc2MDAwMDIwMDBGMDA3NjgxNzEwMDY5MDAwMDAwRTczMzAwRDhBNQorOjEwMTc3MDAwMDIwMDBGMDA3NzgxNzEwMDY5MDAwMDAwNjIzMTAwRDgxQgorOjEwMTc4MDAwMDIwMDBGMDA3ODgxNzEwMDY5MDAwMDAwRUYzNzAwRDg3NworOjEwMTc5MDAwMDIwMDBGMDA3OTgxNzEwMDMxMDAwMDAwNkMwMTAwRDY1OQorOjEwMTdBMDAwMDIwMDBGMDA3QTgxNzEwMDNEMDAwMDAwNkYwMDgwRjc5OQorOjEwMTdCMDAwMDIwMDBGMDA3QjgxNzEwMDJEMDAwMDAwN0YwMTA2REQxQgorOjEwMTdDMDAwMDIwMDBGMDA3QzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQyRgorOjEwMTdEMDAwMDIwMDBGMDA3RDgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhDNgorOjEwMTdFMDAwMDIwMDBGMDA3RTgxNzEwMDY5MDAwMDAwRTczMzAwRDgxRAorOjEwMTdGMDAwMDIwMDBGMDA3RjgxNzEwMDY5MDAwMDAwRTczMzAwRDgwQworOjEwMTgwMDAwMDIwMDBGMDA4MDgxNzEwMDY5MDAwMDAwRUYzNzAwRDhFRQorOjEwMTgxMDAwMDIwMDBGMDA4MTgxNzEwMDMxMDAwMDAwNkMwMTAwRDZEMAorOjEwMTgyMDAwMDIwMDBGMDA4MjgxNzEwMDJEMDAwMDAwMDAwMDAwRDEzNQorOjEwMTgzMDAwMDIwMDBGMDA4MzgxNzEwMDJEMDAwMDAwRTQwNzY4RDFEMQorOjEwMTg0MDAwMDIwMDBGMDA4NDgxNzEwMDQ5MDAwMDAwRTMzMzQwRDFBMQorOjEwMTg1MDAwMDIwMDBGMDA4NTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdERAorOjEwMTg2MDAwMDIwMDBGMDA4NjgxNzEwMDJEMDAwMDAwN0YwMTA2REQ1RgorOjEwMTg3MDAwMDIwMDBGMDA4NzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ3MworOjEwMTg4MDAwMDIwMDBGMDA4ODgxNzEwMDQ5MDAwMDAwNkMzNjAwRDgwQQorOjEwMTg5MDAwMDIwMDBGMDA4OTgxNzEwMDY5MDAwMDAwRTczMzAwRDg2MQorOjEwMThBMDAwMDIwMDBGMDA4QTgxNzEwMDY5MDAwMDAwNjIzMTAwRDhENworOjEwMThCMDAwMDIwMDBGMDA4QjgxNzEwMDY5MDAwMDAwRUYzNzAwRDgzMworOjEwMThDMDAwMDIwMDBGMDA4QzgxNzEwMDMxMDAwMDAwNkMwMTAwRDYxNQorOjEwMThEMDAwMDIwMDBGMDA4RDgxNzEwMDM1MDAwMDAwRUQwMDgwRDYwMAorOjEwMThFMDAwMDIwMDBGMDA4RTgxNzEwMDA4MDAwMDAwODEwMDc5MjI0MworOjEwMThGMDAwMDIwMDBGMDA4RjgxNzEwMDQ5MDAwMDAwMEMwNjAwRDYyNQorOjEwMTkwMDAwMDIwMDBGMDA5MDgxNzEwMDJGMDAwMDAwMDYwMTgxRDZCNworOjEwMTkxMDAwMDIwMDBGMDA5MTgxNzEwMDNGMDAwMDAwMDIwMDgwRDQ5RQorOjEwMTkyMDAwMDIwMDBGMDA5MjgxNzEwMDNGMDAwMDAwODQwMDgwRDQwQgorOjEwMTkzMDAwMDIwMDBGMDA5MzgxNzEwMDNGMDAwMDAwMDIwMTAwRDVGQQorOjEwMTk0MDAwMDIwMDBGMDA5NDgxNzEwMDNGMDAwMDAwODQwMTAwRDU2NworOjEwMTk1MDAwMDIwMDBGMDA5NTgxNzEwMDNGMDAwMDAwMDIwMjgwRDU1NworOjEwMTk2MDAwMDIwMDBGMDA5NjgxNzEwMDNGMDAwMDAwMDQwMjgwRDU0NAorOjEwMTk3MDAwMDIwMDBGMDA5NzgxNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMTk4MDAwMDIwMDBGMDA5ODgxNzEwMDJEMDAwMDAwN0YwMTA2REQyQworOjEwMTk5MDAwMDIwMDBGMDA5OTgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ0MAorOjEwMTlBMDAwMDIwMDBGMDA5QTgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhENworOjEwMTlCMDAwMDIwMDBGMDA5QjgxNzEwMDY5MDAwMDAwRTkzNDAwRDgyQgorOjEwMTlDMDAwMDIwMDBGMDA5QzgxNzEwMDY5MDAwMDAwNkEzNTAwRDg5OAorOjEwMTlEMDAwMDIwMDBGMDA5RDgxNzEwMDY5MDAwMDAwRUYzNzAwRDgwMAorOjEwMTlFMDAwMDIwMDBGMDA5RTgxNzEwMDMxMDAwMDAwNkMwMTAwRDZFMgorOjEwMTlGMDAwMDIwMDBGMDA5RjgxNzEwMDQxMDAwMDAwRUIzNDgwRDQ5MQorOjEwMUEwMDAwMDIwMDBGMDBBMDgxNzEwMDQxMDAwMDAwNkIzNTAwRDU3RAorOjEwMUExMDAwMDIwMDBGMDBBMTgxNzEwMDM1MDAwMDAwRUQwMDgwRDZBQQorOjEwMUEyMDAwMDIwMDBGMDBBMjgxNzEwMDE4MDAwMDAwODEwMEVCMzc1NgorOjEwMUEzMDAwMDIwMDBGMDBBMzgxNzEwMDQ5MDAwMDAwMEQzQjAwRDY5OQorOjEwMUE0MDAwMDIwMDBGMDBBNDgxNzEwMDQ5MDAwMDAwMDczQjgwRDYwRQorOjEwMUE1MDAwMDIwMDBGMDBBNTgxNzEwMDJEMDAwMDAwMDAwMDAwRDFFMAorOjEwMUE2MDAwMDIwMDBGMDBBNjgxNzEwMDQ5MDAwMDAwNjYzNjAwREQwQgorOjEwMUE3MDAwMDIwMDBGMDBBNzgxNzEwMDY5MDAwMDAwNzYzQjAwRERDNQorOjEwMUE4MDAwMDIwMDBGMDBBODgxNzEwMDY5MDAwMDAwNzYzQjAwRERCNAorOjEwMUE5MDAwMDIwMDBGMDBBOTgxNzEwMDY5MDAwMDAwNzYzQjAwRERBMworOjEwMUFBMDAwMDIwMDBGMDBBQTgxNzEwMDY5MDAwMDAwNzYzQjAwREQ5MgorOjEwMUFCMDAwMDIwMDBGMDBBQjgxNzEwMDY5MDAwMDAwNzYzQjAwREQ4MQorOjEwMUFDMDAwMDIwMDBGMDBBQzgxNzEwMDY5MDAwMDAwNzYzQjAwREQ3MAorOjEwMUFEMDAwMDIwMDBGMDBBRDgxNzEwMDY5MDAwMDAwNzYzQjAwREQ1RgorOjEwMUFFMDAwMDIwMDBGMDBBRTgxNzEwMDY5MDAwMDAwNzYzQjAwREQ0RQorOjEwMUFGMDAwMDIwMDBGMDBBRjgxNzEwMDYxMDAwMDAwNkMwNDAwRjY2RAorOjEwMUIwMDAwMDIwMDBGMDBCMDgxNzEwMDM1MDAwMDAwRUQwMDgwRDZBQQorOjEwMUIxMDAwMDIwMDBGMDBCMTgxNzEwMDE4MDAwMDAwODEwMEVCMzc1NgorOjEwMUIyMDAwMDIwMDBGMDBCMjgxNzEwMDQ5MDAwMDAwMEUzQjAwRDY5OAorOjEwMUIzMDAwMDIwMDBGMDBCMzgxNzEwMDQ5MDAwMDAwMDgzQjgwRDYwRAorOjEwMUI0MDAwMDIwMDBGMDBCNDgxNzEwMDQ5MDAwMDAwMDkzQjgwRDVGQworOjEwMUI1MDAwMDIwMDBGMDBCNTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdBQQorOjEwMUI2MDAwMDIwMDBGMDBCNjgxNzEwMDJEMDAwMDAwN0YwMTA2REQyQworOjEwMUI3MDAwMDIwMDBGMDBCNzgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ0MAorOjEwMUI4MDAwMDIwMDBGMDBCODgxNzEwMDQ5MDAwMDAwNkMzNjAwRDhENworOjEwMUI5MDAwMDIwMDBGMDBCOTgxNzEwMDY5MDAwMDAwRUIzNTAwRDgyOAorOjEwMUJBMDAwMDIwMDBGMDBCQTgxNzEwMDY5MDAwMDAwRTczMzAwRDgxRAorOjEwMUJCMDAwMDIwMDBGMDBCQjgxNzEwMDY5MDAwMDAwRUYzNzAwRDgwMAorOjEwMUJDMDAwMDIwMDBGMDBCQzgxNzEwMDQxMDAwMDAwRUMwNzAwRDY0QworOjEwMUJEMDAwMDIwMDBGMDBCRDgxNzEwMDQxMDAwMDAwNkIwODgwRDUzQworOjEwMUJFMDAwMDIwMDBGMDBCRTgxNzEwMDM1MDAwMDAwRUQwMDgwRDZCQworOjEwMUJGMDAwMDIwMDBGMDBCRjgxNzEwMDE4MDAwMDAwODEwMEVEMzc2NgorOjEwMUMwMDAwMDIwMDBGMDBDMDgxNzEwMDNGMDAwMDAwODBGRkZGRDQ4MAorOjEwMUMxMDAwMDIwMDBGMDBDMTgxNzEwMDNGMDAwMDAwMDQwMDAyRDVFNgorOjEwMUMyMDAwMDIwMDBGMDBDMjgxNzEwMDNGMDAwMDAwMDEwMDE4RDVDMgorOjEwMUMzMDAwMDIwMDBGMDBDMzgxNzEwMDQ5MDAwMDAwNkEzQjAwREQxMworOjEwMUM0MDAwMDIwMDBGMDBDNDgxNzEwMDY5MDAwMDAwNjkzQjAwRERFMworOjEwMUM1MDAwMDIwMDBGMDBDNTgxNzEwMDY5MDAwMDAwNjkzQjAwREREMgorOjEwMUM2MDAwMDIwMDBGMDBDNjgxNzEwMDIxMDAwMDAwRUEwMDAwRDVDQgorOjEwMUM3MDAwMDIwMDBGMDBDNzgxNzEwMDQ5MDAwMDAwNkEzQjBFRERDMQorOjEwMUM4MDAwMDIwMDBGMDBDODgxNzEwMDM1MDAwMDAwN0EwMDA0RDEwNQorOjEwMUM5MDAwMDIwMDBGMDBDOTgxNzEwMDE4MDAwMDAwODEwMEY1MzdCMworOjEwMUNBMDAwMDIwMDBGMDBDQTgxNzEwMDNGMDAwMDAwODBGRkZGRDRENgorOjEwMUNCMDAwMDIwMDBGMDBDQjgxNzEwMDNGMDAwMDAwMDQwMDA0RDUzQQorOjEwMUNDMDAwMDIwMDBGMDBDQzgxNzEwMDNGMDAwMDAwMDEwMDE4RDUxOAorOjEwMUNEMDAwMDIwMDBGMDBDRDgxNzEwMDY5MDAwMDAwNjkzQjAwREQ0QQorOjEwMUNFMDAwMDIwMDBGMDBDRTgxNzEwMDY5MDAwMDAwNjkzQjAwREQzOQorOjEwMUNGMDAwMDIwMDBGMDBDRjgxNzEwMDQ5MDAwMDAwNkEzQjAwREQ0NworOjEwMUQwMDAwMDIwMDBGMDBEMDgxNzEwMDUxMDAwMDAwRUEwMDAwRjVEMAorOjEwMUQxMDAwMDIwMDBGMDBEMTgxNzEwMDNEMDAwMDAwNkYwMDgwRjdDQworOjEwMUQyMDAwMDIwMDBGMDBEMjgxNzEwMDNEMDAwMDAwNkYwMDgwRjdCQgorOjEwMUQzMDAwMDIwMDBGMDBEMzgxNzEwMDQ5MDAwMDAwNkEzQjBFRERGNAorOjEwMUQ0MDAwMDIwMDBGMDBENDgxNzEwMDM1MDAwMDAwN0E4MDA0RDFCOAorOjEwMUQ1MDAwMDIwMDBGMDBENTgxNzEwMDE4MDAwMDAwODEwMEY1MzdFNgorOjEwMUQ2MDAwMDIwMDBGMDBENjgxNzEwMDNGMDAwMDAwMDQ3RjdGQzc5MgorOjEwMUQ3MDAwMDIwMDBGMDBENzgxNzEwMDNGMDAwMDAwMDE3RjdGQzc4NAorOjEwMUQ4MDAwMDIwMDBGMDBEODgxNzEwMDNGMDAwMDAwMDA0MDgwRDZBMworOjEwMUQ5MDAwMDIwMDBGMDBEOTgxNzEwMDNGMDAwMDAwMDBDMDAzRDE5NAorOjEwMURBMDAwMDIwMDBGMDBEQTgxNzEwMDI1MDAwMDAwRTIwMDIwREU1MQorOjEwMURCMDAwMDIwMDBGMDBEQjgxNzEwMDQ5MDAwMDAwNEUyNzgwREUyOQorOjEwMURDMDAwMDIwMDBGMDBEQzgxNzEwMDNEMDAwMDAwNkYwMDgwRjcxMQorOjEwMUREMDAwMDIwMDBGMDBERDgxNzEwMDNEMDAwMDAwNkYwMDgwRjcwMAorOjEwMURFMDAwMDIwMDBGMDBERTgxNzEwMDM1MDAwMDAwRTIwMDAwRDEyQQorOjEwMURGMDAwMDIwMDBGMDBERjgxNzEwMDM1MDAwMDAwRUQwMDgwRDY4OQorOjEwMUUwMDAwMDIwMDBGMDBFMDgxNzEwMDE4MDAwMDAwODEwMEY1MzcyQQorOjEwMUUxMDAwMDIwMDBGMDBFMTgxNzEwMDNGMDAwMDAwMDQzMDAwREQ4RQorOjEwMUUyMDAwMDIwMDBGMDBFMjgxNzEwMDNGMDAwMDAwMDEwMDE4REQ5OAorOjEwMUUzMDAwMDIwMDBGMDBFMzgxNzEwMDY5MDAwMDAwM0ExRDAwREQxRgorOjEwMUU0MDAwMDIwMDBGMDBFNDgxNzEwMDY5MDAwMDAwN0EzRDAwRERBRQorOjEwMUU1MDAwMDIwMDBGMDBFNTgxNzEwMDdEMDAwMDAwMTNBNzYwQzczQworOjEwMUU2MDAwMDIwMDBGMDBFNjgxNzEwMDMxMDAwMDAwNDEwMDgwQzBENworOjEwMUU3MDAwMDIwMDBGMDBFNzgxNzEwMDMxMDAwMDAwNDgwMDAwQzQzQgorOjEwMUU4MDAwMDIwMDBGMDBFODgxNzEwMDMxMDAwMDAwNDUwMDgwQzJBRgorOjEwMUU5MDAwMDIwMDBGMDBFOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMUVBMDAwMDIwMDBGMDBFQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMUVCMDAwMDIwMDBGMDBFQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwMUVDMDAwMDIwMDBGMDBFQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMUVEMDAwMDIwMDBGMDBFRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMUVFMDAwMDIwMDBGMDBFRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMUVGMDAwMDIwMDBGMDBFRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMUYwMDAwMDIwMDBGMDBGMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMUYxMDAwMDIwMDBGMDBGMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMUYyMDAwMDIwMDBGMDBGMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMUYzMDAwMDIwMDBGMDBGMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwMUY0MDAwMDIwMDBGMDBGNDgxNzEwMDJEMDAwMDAwMDAwMDAwREI5MgorOjEwMUY1MDAwMDIwMDBGMDBGNTgxNzEwMDNGMDAwMDAwMDQzMDAwREQzOQorOjEwMUY2MDAwMDIwMDBGMDBGNjgxNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMUY3MDAwMDIwMDBGMDBGNzgxNzEwMDY5MDAwMDAwN0EzRDAwREQ2QQorOjEwMUY4MDAwMDIwMDBGMDBGODgxNzEwMDNGMDAwMDAwMDQwMDAwREQzNgorOjEwMUY5MDAwMDIwMDBGMDBGOTgxNzEwMDY5MDAwMDAwN0EzRDAwREQ0OAorOjEwMUZBMDAwMDIwMDBGMDBGQTgxNzEwMDJEMDAwMDAwMDAwMDgwRDNCNAorOjEwMUZCMDAwMDIwMDBGMDBGQjgxNzEwMDNGMDAwMDAwMDQwNDAwRERGRgorOjEwMUZDMDAwMDIwMDBGMDBGQzgxNzEwMDNGMDAwMDAwMDEwMDE4RERERAorOjEwMUZEMDAwMDIwMDBGMDBGRDgxNzEwMDY5MDAwMDAwMTQwQTAwREQ5RAorOjEwMUZFMDAwMDIwMDBGMDBGRTgxNzEwMDY5MDAwMDAwN0EzRDAwRERGMworOjEwMUZGMDAwMDIwMDBGMDBGRjgxNzEwMDQ5MDAwMDAwOTQzMzA0RDFGQQorOjEwMjAwMDAwMDIwMDBGMDAwMDgyNzEwMDNGMDAwMDAwODQwNDAwREQyOAorOjEwMjAxMDAwMDIwMDBGMDAwMTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ4NgorOjEwMjAyMDAwMDIwMDBGMDAwMjgyNzEwMDY5MDAwMDAwNjIzMTAwREREMQorOjEwMjAzMDAwMDIwMDBGMDAwMzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ5QworOjEwMjA0MDAwMDIwMDBGMDAwNDgyNzEwMDNGMDAwMDAwMDQwNTAwREQ2MworOjEwMjA1MDAwMDIwMDBGMDAwNTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ0MgorOjEwMjA2MDAwMDIwMDBGMDAwNjgyNzEwMDY5MDAwMDAwOTUwQTAwREQ4MQorOjEwMjA3MDAwMDIwMDBGMDAwNzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ1OAorOjEwMjA4MDAwMDIwMDBGMDAwODgyNzEwMDQ5MDAwMDAwOTUzMzA0RDE1RQorOjEwMjA5MDAwMDIwMDBGMDAwOTgyNzEwMDNGMDAwMDAwODQwNTAwREQ4RQorOjEwMjBBMDAwMDIwMDBGMDAwQTgyNzEwMDNGMDAwMDAwMDEwMDE4RERFRAorOjEwMjBCMDAwMDIwMDBGMDAwQjgyNzEwMDY5MDAwMDAwNjIzMTAwREQzOAorOjEwMjBDMDAwMDIwMDBGMDAwQzgyNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMjBEMDAwMDIwMDBGMDAwRDgyNzEwMDNGMDAwMDAwMDQwNjAwRERDOQorOjEwMjBFMDAwMDIwMDBGMDAwRTgyNzEwMDNGMDAwMDAwMDEwMDE4RERBOQorOjEwMjBGMDAwMDIwMDBGMDAwRjgyNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMjEwMDAwMDIwMDBGMDAxMDgyNzEwMDNGMDAwMDAwODQwMDAwREQxQgorOjEwMjExMDAwMDIwMDBGMDAxMTgyNzEwMDY5MDAwMDAwN0EzRDAwRERBRAorOjEwMjEyMDAwMDIwMDBGMDAxMjgyNzEwMDNGMDAwMDAwMDQwMDAwREQ3OQorOjEwMjEzMDAwMDIwMDBGMDAxMzgyNzEwMDNGMDAwMDAwMDEwMDE4REQ1MworOjEwMjE0MDAwMDIwMDBGMDAxNDgyNzEwMDY5MDAwMDAwMTYwQjAwREQxMAorOjEwMjE1MDAwMDIwMDBGMDAxNTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjE2MDAwMDIwMDBGMDAxNjgyNzEwMDNGMDAwMDAwMDQxMDAwREQyNQorOjEwMjE3MDAwMDIwMDBGMDAxNzgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjE4MDAwMDIwMDBGMDAxODgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjE5MDAwMDIwMDBGMDAxOTgyNzEwMDNGMDAwMDAwMDQwMDAwREQwMgorOjEwMjFBMDAwMDIwMDBGMDAxQTgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjFCMDAwMDIwMDBGMDAxQjgyNzEwMDNGMDAwMDAwODQxMDAwREQ1MAorOjEwMjFDMDAwMDIwMDBGMDAxQzgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjFEMDAwMDIwMDBGMDAxRDgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjFFMDAwMDIwMDBGMDAxRTgyNzEwMDNGMDAwMDAwMDQ4MDAxREQyQworOjEwMjFGMDAwMDIwMDBGMDAxRjgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjIwMDAwMDIwMDBGMDAyMDgyNzEwMDNGMDAwMDAwMDQxMTAwREQ3OQorOjEwMjIxMDAwMDIwMDBGMDAyMTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NAorOjEwMjIyMDAwMDIwMDBGMDAyMjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMjIzMDAwMDIwMDBGMDAyMzgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjI0MDAwMDIwMDBGMDAyNDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjI1MDAwMDIwMDBGMDAyNTgyNzEwMDNGMDAwMDAwODQxMTAwRERBNAorOjEwMjI2MDAwMDIwMDBGMDAyNjgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjI3MDAwMDIwMDBGMDAyNzgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjI4MDAwMDIwMDBGMDAyODgyNzEwMDNGMDAwMDAwMDQwMDE2RERFQworOjEwMjI5MDAwMDIwMDBGMDAyOTgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjJBMDAwMDIwMDBGMDAyQTgyNzEwMDNGMDAwMDAwMDQxMjAwRERDRQorOjEwMjJCMDAwMDIwMDBGMDAyQjgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjJDMDAwMDIwMDBGMDAyQzgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjJEMDAwMDIwMDBGMDAyRDgyNzEwMDNGMDAwMDAwMDQwMDAwRERBRAorOjEwMjJFMDAwMDIwMDBGMDAyRTgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjJGMDAwMDIwMDBGMDAyRjgyNzEwMDNGMDAwMDAwODQxMjAwRERGOQorOjEwMjMwMDAwMDIwMDBGMDAzMDgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NAorOjEwMjMxMDAwMDIwMDBGMDAzMTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMjMyMDAwMDIwMDBGMDAzMjgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjMzMDAwMDIwMDBGMDAzMzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjM0MDAwMDIwMDBGMDAzNDgyNzEwMDNGMDAwMDAwMDQxMzAwREQyMgorOjEwMjM1MDAwMDIwMDBGMDAzNTgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjM2MDAwMDIwMDBGMDAzNjgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjM3MDAwMDIwMDBGMDAzNzgyNzEwMDNGMDAwMDAwMDQwMDAwREQwMgorOjEwMjM4MDAwMDIwMDBGMDAzODgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjM5MDAwMDIwMDBGMDAzOTgyNzEwMDNGMDAwMDAwODQxMzAwREQ0RAorOjEwMjNBMDAwMDIwMDBGMDAzQTgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjNCMDAwMDIwMDBGMDAzQjgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjNDMDAwMDIwMDBGMDAzQzgyNzEwMDNGMDAwMDAwMDQwMDA1RERBOAorOjEwMjNEMDAwMDIwMDBGMDAzRDgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjNFMDAwMDIwMDBGMDAzRTgyNzEwMDNGMDAwMDAwMDQyMDAwREQ2QgorOjEwMjNGMDAwMDIwMDBGMDAzRjgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjQwMDAwMDIwMDBGMDA0MDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QgorOjEwMjQxMDAwMDIwMDBGMDA0MTgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjQyMDAwMDIwMDBGMDA0MjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjQzMDAwMDIwMDBGMDA0MzgyNzEwMDNGMDAwMDAwODQyMDAwREQ5NQorOjEwMjQ0MDAwMDIwMDBGMDA0NDgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjQ1MDAwMDIwMDBGMDA0NTgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjQ2MDAwMDIwMDBGMDA0NjgyNzEwMDNGMDAwMDAwMDQ5MDAxREQ3MQorOjEwMjQ3MDAwMDIwMDBGMDA0NzgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjQ4MDAwMDIwMDBGMDA0ODgyNzEwMDNGMDAwMDAwMDQyMTAwRERCRgorOjEwMjQ5MDAwMDIwMDBGMDA0OTgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjRBMDAwMDIwMDBGMDA0QTgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjRCMDAwMDIwMDBGMDA0QjgyNzEwMDNGMDAwMDAwODQwMDAwREQyRAorOjEwMjRDMDAwMDIwMDBGMDA0QzgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjREMDAwMDIwMDBGMDA0RDgyNzEwMDNGMDAwMDAwODQyMTAwRERFQQorOjEwMjRFMDAwMDIwMDBGMDA0RTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjRGMDAwMDIwMDBGMDA0RjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QworOjEwMjUwMDAwMDIwMDBGMDA1MDgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1NworOjEwMjUxMDAwMDIwMDBGMDA1MTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjUyMDAwMDIwMDBGMDA1MjgyNzEwMDNGMDAwMDAwMDQyMjAwREQxMworOjEwMjUzMDAwMDIwMDBGMDA1MzgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjU0MDAwMDIwMDBGMDA1NDgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjU1MDAwMDIwMDBGMDA1NTgyNzEwMDNGMDAwMDAwODQwMjAwREQ4MAorOjEwMjU2MDAwMDIwMDBGMDA1NjgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjU3MDAwMDIwMDBGMDA1NzgyNzEwMDNGMDAwMDAwODQyMjAwREQzRQorOjEwMjU4MDAwMDIwMDBGMDA1ODgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjU5MDAwMDIwMDBGMDA1OTgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjVBMDAwMDIwMDBGMDA1QTgyNzEwMDNGMDAwMDAwMDQwMDAwRERBRAorOjEwMjVCMDAwMDIwMDBGMDA1QjgyNzEwMDY5MDAwMDAwN0EzRDAwRERCRgorOjEwMjVDMDAwMDIwMDBGMDA1QzgyNzEwMDNGMDAwMDAwMDQyMzAwREQ2OAorOjEwMjVEMDAwMDIwMDBGMDA1RDgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjVFMDAwMDIwMDBGMDA1RTgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QworOjEwMjVGMDAwMDIwMDBGMDA1RjgyNzEwMDNGMDAwMDAwMDQwMDAwREQ1OAorOjEwMjYwMDAwMDIwMDBGMDA2MDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ2OQorOjEwMjYxMDAwMDIwMDBGMDA2MTgyNzEwMDNGMDAwMDAwMDQxODAwREQxRAorOjEwMjYyMDAwMDIwMDBGMDA2MjgyNzEwMDNGMDAwMDAwMDEwMDE4REQwRgorOjEwMjYzMDAwMDIwMDBGMDA2MzgyNzEwMDY5MDAwMDAwOTcwQjAwREQ0QgorOjEwMjY0MDAwMDIwMDBGMDA2NDgyNzEwMDY5MDAwMDAwN0EzRDAwREQyNQorOjEwMjY1MDAwMDIwMDBGMDA2NTgyNzEwMDQ5MDAwMDAwOTczMzA0RDEyOQorOjEwMjY2MDAwMDIwMDBGMDA2NjgyNzEwMDNGMDAwMDAwODQxODAwREQ0OAorOjEwMjY3MDAwMDIwMDBGMDA2NzgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjY4MDAwMDIwMDBGMDA2ODgyNzEwMDY5MDAwMDAwNjIzMTAwREQwNQorOjEwMjY5MDAwMDIwMDBGMDA2OTgyNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMjZBMDAwMDIwMDBGMDA2QTgyNzEwMDNGMDAwMDAwMDQxOTAwREQ4MworOjEwMjZCMDAwMDIwMDBGMDA2QjgyNzEwMDNGMDAwMDAwMDEwMDE4REQ3NgorOjEwMjZDMDAwMDIwMDBGMDA2QzgyNzEwMDY5MDAwMDAwMTgwQzAwREQzMAorOjEwMjZEMDAwMDIwMDBGMDA2RDgyNzEwMDY5MDAwMDAwN0EzRDAwREQ4QworOjEwMjZFMDAwMDIwMDBGMDA2RTgyNzEwMDQ5MDAwMDAwOTgzMzA0RDE4RgorOjEwMjZGMDAwMDIwMDBGMDA2RjgyNzEwMDNGMDAwMDAwODQxOTAwRERBRQorOjEwMjcwMDAwMDIwMDBGMDA3MDgyNzEwMDNGMDAwMDAwMDEwMDE4REQyMAorOjEwMjcxMDAwMDIwMDBGMDA3MTgyNzEwMDY5MDAwMDAwNjIzMTAwREQ2QgorOjEwMjcyMDAwMDIwMDBGMDA3MjgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjczMDAwMDIwMDBGMDA3MzgyNzEwMDNGMDAwMDAwMDQxQTAwRERFOAorOjEwMjc0MDAwMDIwMDBGMDA3NDgyNzEwMDNGMDAwMDAwMDEwMDE4REREQworOjEwMjc1MDAwMDIwMDBGMDA3NTgyNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMjc2MDAwMDIwMDBGMDA3NjgyNzEwMDNGMDAwMDAwMDQwMDAwRERDRgorOjEwMjc3MDAwMDIwMDBGMDA3NzgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjc4MDAwMDIwMDBGMDA3ODgyNzEwMDNGMDAwMDAwODQxQTAwREQxMworOjEwMjc5MDAwMDIwMDBGMDA3OTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ4NworOjEwMjdBMDAwMDIwMDBGMDA3QTgyNzEwMDY5MDAwMDAwMTYwQjAwREQ0NAorOjEwMjdCMDAwMDIwMDBGMDA3QjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ5RAorOjEwMjdDMDAwMDIwMDBGMDA3QzgyNzEwMDNGMDAwMDAwMDQxQzAwREQ0RAorOjEwMjdEMDAwMDIwMDBGMDA3RDgyNzEwMDNGMDAwMDAwMDEwMDE4REQ0MworOjEwMjdFMDAwMDIwMDBGMDA3RTgyNzEwMDY5MDAwMDAwOTkwQzAwREQ3QworOjEwMjdGMDAwMDIwMDBGMDA3RjgyNzEwMDY5MDAwMDAwN0EzRDAwREQ1OQorOjEwMjgwMDAwMDIwMDBGMDA4MDgyNzEwMDNGMDAwMDAwODQxQzAwREQ4OAorOjEwMjgxMDAwMDIwMDBGMDA4MTgyNzEwMDNGMDAwMDAwMDEwMDE4RERGRQorOjEwMjgyMDAwMDIwMDBGMDA4MjgyNzEwMDY5MDAwMDAwMUEwRDAwRERCNQorOjEwMjgzMDAwMDIwMDBGMDA4MzgyNzEwMDY5MDAwMDAwN0EzRDAwREQxNAorOjEwMjg0MDAwMDIwMDBGMDA4NDgyNzEwMDNGMDAwMDAwMDQxRDAwRERDMworOjEwMjg1MDAwMDIwMDBGMDA4NTgyNzEwMDNGMDAwMDAwMDEwMDE4RERCQQorOjEwMjg2MDAwMDIwMDBGMDA4NjgyNzEwMDY5MDAwMDAwOUIwRDAwRERGMAorOjEwMjg3MDAwMDIwMDBGMDA4NzgyNzEwMDY5MDAwMDAwN0EzRDAwREREMAorOjEwMjg4MDAwMDIwMDBGMDA4ODgyNzEwMDQ5MDAwMDAwOUIzMzA0RDFEMAorOjEwMjg5MDAwMDIwMDBGMDA4OTgyNzEwMDNGMDAwMDAwODQxRDAwRERFRQorOjEwMjhBMDAwMDIwMDBGMDA4QTgyNzEwMDNGMDAwMDAwMDEwMDE4REQ2NQorOjEwMjhCMDAwMDIwMDBGMDA4QjgyNzEwMDY5MDAwMDAwNjIzMTAwRERCMAorOjEwMjhDMDAwMDIwMDBGMDA4QzgyNzEwMDY5MDAwMDAwN0EzRDAwREQ3QgorOjEwMjhEMDAwMDIwMDBGMDA4RDgyNzEwMDNGMDAwMDAwMDQxRTAwREQyOQorOjEwMjhFMDAwMDIwMDBGMDA4RTgyNzEwMDNGMDAwMDAwMDEwMDE4REQyMQorOjEwMjhGMDAwMDIwMDBGMDA4RjgyNzEwMDY5MDAwMDAwMUMwRTAwRERENQorOjEwMjkwMDAwMDIwMDBGMDA5MDgyNzEwMDY5MDAwMDAwN0EzRDAwREQzNgorOjEwMjkxMDAwMDIwMDBGMDA5MTgyNzEwMDNGMDAwMDAwMDQwMTAwREQwMQorOjEwMjkyMDAwMDIwMDBGMDA5MjgyNzEwMDNGMDAwMDAwMDEwMDE4REREQworOjEwMjkzMDAwMDIwMDBGMDA5MzgyNzEwMDY5MDAwMDAwN0EzRDAwREQwMworOjEwMjk0MDAwMDIwMDBGMDA5NDgyNzEwMDNGMDAwMDAwMDQwRjAwRERDMAorOjEwMjk1MDAwMDIwMDBGMDA5NTgyNzEwMDY5MDAwMDAwN0EzRDAwRERFMQorOjEwMjk2MDAwMDIwMDBGMDA5NjgyNzEwMDdEMDAwMDAwMTNBNzYwQzc2RgorOjEwMjk3MDAwMDIwMDBGMDA5NzgyNzEwMDMxMDAwMDAwNDEwMDgwQzAwQQorOjEwMjk4MDAwMDIwMDBGMDA5ODgyNzEwMDMxMDAwMDAwNDgwMDAwQzQ2RQorOjEwMjk5MDAwMDIwMDBGMDA5OTgyNzEwMDMxMDAwMDAwNDUwMDgwQzJFMgorOjEwMjlBMDAwMDIwMDBGMDA5QTgyNzEwMDMxMDAwMDAwNkQwMDgwRDY5NQorOjEwMjlCMDAwMEYwMDBGMDA2NDAwNzAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMjlDMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDEwMDAwMDAwNDAwMDBDMgorOjEwMjlEMDAwNjQwMDAwMDA1NDAwMDAwMDAwMDAwMDAwMDAyNDAwMDAxQgorOjEwMjlFMDAwMDAyODAwMDAwMDA0MDAwMDgwMjgwMDAwODAwMTAwMDA5MgorOjEwMjlGMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMkEwMDAwNTEwMDAwMDA3RDAxMDAwMDA4MDAwMDAwNTEwMDAwMDA5RQorOjEwMkExMDAwNUQwMDAwMDAwMDAwMDAwMDA5MDAwMDAwMDA1MDAwMDAwMAorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDBGMDAwRjAwRjQwMTcwMDAyMworOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDA1NgorOjEwMkE0MDAwMDAwMTAwMDAwMDA0MDAwMDY0MDAwMDAwNTQwMDAwMDBDOQorOjEwMkE1MDAwMDAwMDAwMDAwMDI0MDAwMDAwMjgwMDAwMDAwNDAwMDAyNgorOjEwMkE2MDAwODAyODAwMDA4MDAxMDAwMDAzMDAwMDAwMDAwMDAwMDAzQQorOjEwMkE3MDAwMDAwMDAwMDAwMDAwMDAwMDUxMDAwMDAwN0QwMTAwMDA4NworOjEwMkE4MDAwMDgwMDAwMDA1MTAwMDAwMDVEMDAwMDAwMDAwMDAwMDA5MAorOjEwMkE5MDAwMDkwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMkFBMDAwMDIwMDBGMDAwMDAwNzAwMDAxMDAwMDAwMDAwMDAwMDBBNAorOjEwMkFCMDAwMDIwMDBGMDAwMDAwNzAwMDAxMDAwMDAwMDAwMDAwMDA5NAorOjEwMkFDMDAwMDIwMDBGMDAwMDgwNzEwMDI1MDAwMDAwMDIwMDBFRERGMgorOjEwMkFEMDAwMDIwMDBGMDAwMTgwNzEwMDA0MDAwMDAwNzYzQkQxMDE2QworOjEwMkFFMDAwMDIwMDBGMDAwMjgwNzEwMDI1MDAwMDAwODIwMDBFREQ1MAorOjEwMkFGMDAwMDIwMDBGMDAwMzgwNzEwMDA0MDAwMDAwNzYzQjg5MDI5MQorOjEwMkIwMDAwMDIwMDBGMDAwNDgwNzEwMDI1MDAwMDAwMDIwMTBFRERBQworOjEwMkIxMDAwMDIwMDBGMDAwNTgwNzEwMDA0MDAwMDAwNzYzQjg1MDI3MgorOjEwMkIyMDAwMDIwMDBGMDAwNjgwNzEwMDI1MDAwMDAwODIwMTBFREQwQQorOjEwMkIzMDAwMDIwMDBGMDAwNzgwNzEwMDA0MDAwMDAwNzYzQkZEMDNENworOjEwMkI0MDAwMDIwMDBGMDAwODgwNzEwMDA5MDAwMDAwNzYzQjgxQ0Y3MQorOjEwMkI1MDAwMDIwMDBGMDAwOTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkI2MDAwMDIwMDBGMDAwQTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkI3MDAwMDIwMDBGMDAwQjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkI4MDAwMDIwMDBGMDAwQzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkI5MDAwMDIwMDBGMDAwRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkJBMDAwMDIwMDBGMDAwRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkJCMDAwMDIwMDBGMDAwRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkJDMDAwMDIwMDBGMDAxMDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkJEMDAwMDIwMDBGMDAxMTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkJFMDAwMDIwMDBGMDAxMjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkJGMDAwMDIwMDBGMDAxMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkMwMDAwMDIwMDBGMDAxNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMkMxMDAwMDIwMDBGMDAxNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMkMyMDAwMDIwMDBGMDAxNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMkMzMDAwMDIwMDBGMDAxNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkM0MDAwMDIwMDBGMDAxODgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkM1MDAwMDIwMDBGMDAxOTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkM2MDAwMDIwMDBGMDAxQTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkM3MDAwMDIwMDBGMDAxQjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkM4MDAwMDIwMDBGMDAxQzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkM5MDAwMDIwMDBGMDAxRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkNBMDAwMDIwMDBGMDAxRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkNCMDAwMDIwMDBGMDAxRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkNDMDAwMDIwMDBGMDAyMDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkNEMDAwMDIwMDBGMDAyMTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkNFMDAwMDIwMDBGMDAyMjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkNGMDAwMDIwMDBGMDAyMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMkQwMDAwMDIwMDBGMDAyNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMkQxMDAwMDIwMDBGMDAyNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMkQyMDAwMDIwMDBGMDAyNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkQzMDAwMDIwMDBGMDAyNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkQ0MDAwMDIwMDBGMDAyODgwNzEwMDQ5MDAwMDAwMDAzQjAwQzAxNQorOjEwMkQ1MDAwMDIwMDBGMDAyOTgwNzEwMDQ5MDAwMDAwMDIzQjgwQzA4MgorOjEwMkQ2MDAwMDIwMDBGMDAyQTgwNzEwMDQ5MDAwMDAwMDMzQjAwQzFFRgorOjEwMkQ3MDAwMDIwMDBGMDAyQjgwNzEwMDQ5MDAwMDAwMDQzQjgwQzE1RAorOjEwMkQ4MDAwMDIwMDBGMDAyQzgwNzEwMDI5MDAwMDAwNzYwMDYwREYzNworOjEwMkQ5MDAwMDIwMDBGMDAyRDgwNzEwMDQ5MDAwMDAwN0QzQjQ0REZFMAorOjEwMkRBMDAwMDIwMDBGMDAyRTgwNzEwMDc5MDAwMDAwNzY5MDYwRkQxNworOjEwMkRCMDAwMDIwMDBGMDAyRjgwNzEwMDNEMDAwMDAwNkYwMDgwRjdCRgorOjEwMkRDMDAwMDIwMDBGMDAzMDgwNzEwMDNEMDAwMDAwNkYwMDgwRjdBRQorOjEwMkREMDAwMDIwMDBGMDAzMTgwNzEwMDNEMDAwMDAwNkYwMDgwRjc5RAorOjEwMkRFMDAwMDIwMDBGMDAzMjgwNzEwMDNEMDAwMDAwNkYwMDgwRjc4QworOjEwMkRGMDAwMDIwMDBGMDAzMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMkUwMDAwMDIwMDBGMDAzNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMkUxMDAwMDIwMDBGMDAzNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkUyMDAwMDIwMDBGMDAzNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkUzMDAwMDIwMDBGMDAzNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkU0MDAwMDIwMDBGMDAzODgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkU1MDAwMDIwMDBGMDAzOTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkU2MDAwMDIwMDBGMDAzQTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkU3MDAwMDIwMDBGMDAzQjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkU4MDAwMDIwMDBGMDAzQzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkU5MDAwMDIwMDBGMDAzRDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkVBMDAwMDIwMDBGMDAzRTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkVCMDAwMDIwMDBGMDAzRjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkVDMDAwMDIwMDBGMDA0MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkVEMDAwMDIwMDBGMDA0MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMkVFMDAwMDIwMDBGMDA0MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMkVGMDAwMDIwMDBGMDA0MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMkYwMDAwMDIwMDBGMDA0NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwMkYxMDAwMDIwMDBGMDA0NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMkYyMDAwMDIwMDBGMDA0NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMkYzMDAwMDIwMDBGMDA0NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMkY0MDAwMDIwMDBGMDA0ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMkY1MDAwMDIwMDBGMDA0OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkY2MDAwMDIwMDBGMDA0QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkY3MDAwMDIwMDBGMDA0QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkY4MDAwMDIwMDBGMDA0QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkY5MDAwMDIwMDBGMDA0RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkZBMDAwMDIwMDBGMDA0RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkZCMDAwMDIwMDBGMDA0RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMkZDMDAwMDIwMDBGMDA1MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMkZEMDAwMDIwMDBGMDA1MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMkZFMDAwMDIwMDBGMDA1MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMkZGMDAwMDIwMDBGMDA1MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMzAwMDAwMDIwMDBGMDA1NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMzAxMDAwMDIwMDBGMDA1NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwMzAyMDAwMDIwMDBGMDA1NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMzAzMDAwMDIwMDBGMDA1NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMzA0MDAwMDIwMDBGMDA1ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMzA1MDAwMDIwMDBGMDA1OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMzA2MDAwMDIwMDBGMDA1QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzA3MDAwMDIwMDBGMDA1QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMzA4MDAwMDIwMDBGMDA1QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMzA5MDAwMDIwMDBGMDA1RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzBBMDAwMDIwMDBGMDA1RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzBCMDAwMDIwMDBGMDA1RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzBDMDAwMDIwMDBGMDA2MDgwNzEwMDNGMDAwMDAwMDMwMDAwREY3RAorOjEwMzBEMDAwMDIwMDBGMDA2MTgwNzEwMDJEMDAwMDAwODEwRkUwREQxMworOjEwMzBFMDAwMDIwMDBGMDA2MjgwNzEwMDNGMDAwMDAwODMwMjgwREQ1QgorOjEwMzBGMDAwMDIwMDBGMDA2MzgwNzEwMDJEMDAwMDAwODAwMTA0REREQworOjEwMzEwMDAwMDIwMDBGMDA2NDgwNzEwMDdEMDAwMDAwODAwMDE1RkQ0QQorOjEwMzExMDAwMDIwMDBGMDA2NTgwNzEwMDdBMDAwMDAwNzYzQjIwMTBFRAorOjEwMzEyMDAwMDIwMDBGMDA2NjgwNzEwMDdBMDAwMDAwNzY3QjIwMzA3QworOjEwMzEzMDAwMDIwMDBGMDA2NzgwNzEwMDIxMDAwMDAwNjAwMDI0RDBCMQorOjEwMzE0MDAwMDIwMDBGMDA2ODgwNzEwMDNGMDAwMDAwMDQwMTAwRERGNAorOjEwMzE1MDAwMDIwMDBGMDA2OTgwNzEwMDNGMDAwMDAwODEwMjQwREQyNQorOjEwMzE2MDAwMDIwMDBGMDA2QTgwNzEwMDc5MDAwMDAwMDNCQjMxRERBRQorOjEwMzE3MDAwMDIwMDBGMDA2QjgwNzEwMDc5MDAwMDAwMDRGQjMxREQ1QworOjEwMzE4MDAwMDIwMDBGMDA2QzgwNzEwMDc5MDAwMDAwNzZCQjMxREQxOQorOjEwMzE5MDAwMDIwMDBGMDA2RDgwNzEwMDc5MDAwMDAwNzZGQjMxRERDOAorOjEwMzFBMDAwMDIwMDBGMDA2RTgwNzEwMDc5MDAwMDAwMDEwMTIxRkQxNgorOjEwMzFCMDAwMDIwMDBGMDA2RjgwNzEwMDdEMDAwMDAwODE0MDJCRkQzOAorOjEwMzFDMDAwMDIwMDBGMDA3MDgwNzEwMDQwMDAwMDAwMDIzMDAwM0RERQorOjEwMzFEMDAwMDIwMDBGMDA3MTgwNzEwMDQ4MDAwMDAwMDIzQjAwMUREQQorOjEwMzFFMDAwMDIwMDBGMDA3MjgwNzEwMDc5MDAwMDAwNzY3QjIxREQwMworOjEwMzFGMDAwMDIwMDBGMDA3MzgwNzEwMDJEMDAwMDAwN0YwNTA0RERDOAorOjEwMzIwMDAwMDIwMDBGMDA3NDgwNzEwMDE4MDAwMDAwNzYzQjdGM0RDMworOjEwMzIxMDAwMDIwMDBGMDA3NTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcxNAorOjEwMzIyMDAwMDIwMDBGMDA3NjgwNzEwMDNEMDAwMDAwNkYwMDgwRjcwMworOjEwMzIzMDAwMDIwMDBGMDA3NzgwNzEwMDNEMDAwMDAwNkYwMDgwRjdGMgorOjEwMzI0MDAwMDIwMDBGMDA3ODgwNzEwMDIxMDAwMDAwNzYxRjM3RTMzNAorOjEwMzI1MDAwMDIwMDBGMDA3OTgwNzEwMDQ5MDAwMDAwNzkzQjAwREQxOQorOjEwMzI2MDAwMDIwMDBGMDA3QTgwNzEwMDc5MDAwMDAwNzZCQjIxREQzQQorOjEwMzI3MDAwMDIwMDBGMDA3QjgwNzEwMDQ5MDAwMDAwNzkzQjAwRERGNworOjEwMzI4MDAwMDIwMDBGMDA3QzgwNzEwMDc5MDAwMDAwNzZCQjIxREQxOAorOjEwMzI5MDAwMDIwMDBGMDA3RDgwNzEwMDQ5MDAwMDAwNzkzQjAwRERENQorOjEwMzJBMDAwMDIwMDBGMDA3RTgwNzEwMDc5MDAwMDAwNzZCQjIxRERGNgorOjEwMzJCMDAwMDIwMDBGMDA3RjgwNzEwMDc5MDAwMDAwNzY5MDYwRkRCMQorOjEwMzJDMDAwMDIwMDBGMDA4MDgwNzEwMDc5MDAwMDAwNzZGQjIxREQ5NAorOjEwMzJEMDAwMDIwMDBGMDA4MTgwNzEwMDNGMDAwMDAwODMwMDAwREZDQQorOjEwMzJFMDAwMDIwMDBGMDA4MjgwNzEwMDNEMDAwMDAwNkYwMDgwRjczNworOjEwMzJGMDAwMDIwMDBGMDA4MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMzMwMDAwMDIwMDBGMDA4NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMzMxMDAwMDIwMDBGMDA4NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMzMyMDAwMDIwMDBGMDA4NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMzMzMDAwMDIwMDBGMDA4NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzM0MDAwMDIwMDBGMDA4ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMzM1MDAwMDIwMDBGMDA4OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMzM2MDAwMDIwMDBGMDA4QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzM3MDAwMDIwMDBGMDA4QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzM4MDAwMDIwMDBGMDA4QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzM5MDAwMDIwMDBGMDA4RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMzNBMDAwMDIwMDBGMDA4RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMzNCMDAwMDIwMDBGMDA4RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMzNDMDAwMDIwMDBGMDA5MDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMzNEMDAwMDIwMDBGMDA5MTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzNFMDAwMDIwMDBGMDA5MjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMzNGMDAwMDIwMDBGMDA5MzgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwMzQwMDAwMDIwMDBGMDA5NDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMzQxMDAwMDIwMDBGMDA5NTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMzQyMDAwMDIwMDBGMDA5NjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMzQzMDAwMDIwMDBGMDA5NzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMzQ0MDAwMDIwMDBGMDA5ODgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMzQ1MDAwMDIwMDBGMDA5OTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzQ2MDAwMDIwMDBGMDA5QTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzQ3MDAwMDIwMDBGMDA5QjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzQ4MDAwMDIwMDBGMDA5QzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMzQ5MDAwMDIwMDBGMDA5RDgwNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMzRBMDAwMDIwMDBGMDA5RTgwNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMzRCMDAwMDIwMDBGMDA5RjgwNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMzRDMDAwMDIwMDBGMDBBMDgwNzEwMDJEMDAwMDAwMDMwODA4RDA0QQorOjEwMzREMDAwMDIwMDBGMDBBMTgwNzEwMDA4MDAwMDAwNzZGQkI1MjFGQQorOjEwMzRFMDAwMDIwMDBGMDBBMjgwNzEwMDc5MDAwMDAwODEwMDAxREQ2MAorOjEwMzRGMDAwMDIwMDBGMDBBMzgwNzEwMDc5MDAwMDAwMDI4MTAxREQ0RAorOjEwMzUwMDAwMDIwMDBGMDBBNDgwNzEwMDdEMDAwMDAwODM4MDAxRkQ5NworOjEwMzUxMDAwMDIwMDBGMDBBNTgwNzEwMDc5MDAwMDAwNzYzQjkwRDA3QQorOjEwMzUyMDAwMDIwMDBGMDBBNjgwNzEwMDQ5MDAwMDAwN0EzQjU4RDBDRAorOjEwMzUzMDAwMDIwMDBGMDBBNzgwNzEwMDQ5MDAwMDAwMDAzQjA0RDI4OAorOjEwMzU0MDAwMDIwMDBGMDBBODgwNzEwMDNEMDAwMDAwMDMwMDQwREQ3NAorOjEwMzU1MDAwMDIwMDBGMDBBOTgwNzEwMDI0MDAwMDAwNjQwMjAwMzIwNAorOjEwMzU2MDAwMDIwMDBGMDBBQTgwNzEwMDNEMDAwMDAwMDNGODdGREQxQgorOjEwMzU3MDAwMDIwMDBGMDBBQjgwNzEwMDI5MDAwMDAwN0EwMTIwRDAwQQorOjEwMzU4MDAwMDIwMDBGMDBBQzgwNzEwMDQ5MDAwMDAwMEUzQkE0RDA4NworOjEwMzU5MDAwMDIwMDBGMDBBRDgwNzEwMDJEMDAwMDAwRkY0MjA0REQyRAorOjEwMzVBMDAwMDIwMDBGMDBBRTgwNzEwMDE4MDAwMDAwNzYzQjdGM0RFNgorOjEwMzVCMDAwMDIwMDBGMDBBRjgwNzEwMDJEMDAwMDAwODIwMDA2RERDOAorOjEwMzVDMDAwMDIwMDBGMDBCMDgwNzEwMDM4MDAwMDAwRTAwMTAwMzAwMAorOjEwMzVEMDAwMDIwMDBGMDBCMTgwNzEwMDM5MDAwMDAwNjAwMTAwRDBDRQorOjEwMzVFMDAwMDIwMDBGMDBCMjgwNzEwMDc5MDAwMDAwN0MzQkIxRDE3NQorOjEwMzVGMDAwMDIwMDBGMDBCMzgwNzEwMDJEMDAwMDAwRTMwRkUwREQzQQorOjEwMzYwMDAwMDIwMDBGMDBCNDgwNzEwMDQ5MDAwMDAwRTQzMDgwRDA1NworOjEwMzYxMDAwMDIwMDBGMDBCNTgwNzEwMDc5MDAwMDAwN0M3QjMxREQ3NQorOjEwMzYyMDAwMDIwMDBGMDBCNjgwNzEwMDc5MDAwMDAwN0MzQjMxRERBNAorOjEwMzYzMDAwMDIwMDBGMDBCNzgwNzEwMDdEMDAwMDAwODI0MDM3RkQ1RQorOjEwMzY0MDAwMDIwMDBGMDBCODgwNzEwMDA4MDAwMDAwNzYzQjdEMDE4OQorOjEwMzY1MDAwMDIwMDBGMDBCOTgwNzEwMDNEMDAwMDAwNkYwMDgwRjc4QworOjEwMzY2MDAwMDIwMDBGMDBCQTgwNzEwMDNEMDAwMDAwNkYwMDgwRjc3QgorOjEwMzY3MDAwMDIwMDBGMDBCQjgwNzEwMDQ5MDAwMDAwODcwMzAwRERERAorOjEwMzY4MDAwMDIwMDBGMDBCQzgwNzEwMDc5MDAwMDAwMDgwNDMxRERFOQorOjEwMzY5MDAwMDIwMDBGMDBCRDgwNzEwMDc5MDAwMDAwN0E3RDMxRERFRAorOjEwMzZBMDAwMDIwMDBGMDBCRTgwNzEwMDQ5MDAwMDAwN0MzQjAwRDM4NworOjEwMzZCMDAwMDIwMDBGMDBCRjgwNzEwMDc5MDAwMDAwN0NCQjgxRDM0NQorOjEwMzZDMDAwMDIwMDBGMDBDMDgwNzEwMDdGMDAwMDAwN0NCMjAxRDFCOQorOjEwMzZEMDAwMDIwMDBGMDBDMTgwNzEwMDQ4MDAwMDAwNjQzMjAwNTFGOAorOjEwMzZFMDAwMDIwMDBGMDBDMjgwNzEwMDNEMDAwMDAwMDMwMDQwRERCOQorOjEwMzZGMDAwMDIwMDBGMDBDMzgwNzEwMDA4MDAwMDAwNjIzMTk1MDFENAorOjEwMzcwMDAwMDIwMDBGMDBDNDgwNzEwMDIxMDAwMDAwNjYwNjAwRDM5MworOjEwMzcxMDAwMDIwMDBGMDBDNTgwNzEwMDIwMDAwMDAwRTcwMDgwNTMwOAorOjEwMzcyMDAwMDIwMDBGMDBDNjgwNzEwMDNGMDAwMDAwMDAwODAwRERBRAorOjEwMzczMDAwMDIwMDBGMDBDNzgwNzEwMDc5MDAwMDAwNjZCMzAxREQ1MAorOjEwMzc0MDAwMDIwMDBGMDBDODgwNzEwMDc5MDAwMDAwRTdCMzAxRERCRQorOjEwMzc1MDAwMDIwMDBGMDBDOTgwNzEwMDc1MDAwMDAwNjI4NjAxRjE0RgorOjEwMzc2MDAwMDIwMDBGMDBDQTgwNzEwMDc1MDAwMDAwNjRCMTAxRDIzMAorOjEwMzc3MDAwMDIwMDBGMDBDQjgwNzEwMDc4MDAwMDAwNzY3QjAwMURGNgorOjEwMzc4MDAwMDIwMDBGMDBDQzgwNzEwMDI1MDAwMDAwRTMwMTAwREQ4NQorOjEwMzc5MDAwMDIwMDBGMDBDRDgwNzEwMDA4MDAwMDAwNjIzMUIxMDEwRAorOjEwMzdBMDAwMDIwMDBGMDBDRTgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyNgorOjEwMzdCMDAwMDIwMDBGMDBDRjgwNzEwMDNEMDAwMDAwNkYwMDgwRjcxNQorOjEwMzdDMDAwMDIwMDBGMDBEMDgwNzEwMDNEMDAwMDAwNkYwMDgwRjcwNAorOjEwMzdEMDAwMDIwMDBGMDBEMTgwNzEwMDIxMDAwMDAwNjM5RjM3RTNEOQorOjEwMzdFMDAwMDIwMDBGMDBEMjgwNzEwMDQ5MDAwMDAwN0MzQjAwRDMzMgorOjEwMzdGMDAwMDIwMDBGMDBEMzgwNzEwMDc5MDAwMDAwN0NCQjgxRDNGMAorOjEwMzgwMDAwMDIwMDBGMDBENDgwNzEwMDdGMDAwMDAwN0NCMjAxRDE2MworOjEwMzgxMDAwMDIwMDBGMDBENTgwNzEwMDQ4MDAwMDAwNjQzMjAwNTFBMgorOjEwMzgyMDAwMDIwMDBGMDBENjgwNzEwMDc1MDAwMDAwNjRCMTAxRDI2MworOjEwMzgzMDAwMDIwMDBGMDBENzgwNzEwMDc4MDAwMDAwNzY3QjAwMUQyOQorOjEwMzg0MDAwMDIwMDBGMDBEODgwNzEwMDNGMDAwMDAwMDQwMDAwREQ3RQorOjEwMzg1MDAwMDIwMDBGMDBEOTgwNzEwMDc5MDAwMDAwODFDMDAxRERGNQorOjEwMzg2MDAwMDIwMDBGMDBEQTgwNzEwMDc5MDAwMDAwNzY5MDYwRkRBMAorOjEwMzg3MDAwMDIwMDBGMDBEQjgwNzEwMDJEMDAwMDAwMDMwODA4REQ0RQorOjEwMzg4MDAwMDIwMDBGMDBEQzgwNzEwMDc4MDAwMDAwODFDMDAxM0Q2MworOjEwMzg5MDAwMDIwMDBGMDBERDgwNzEwMDNEMDAwMDAwNkYwMDgwRjcyNgorOjEwMzhBMDAwMDIwMDBGMDBERTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwMzhCMDAwMDIwMDBGMDBERjgwNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMzhDMDAwMDIwMDBGMDBFMDgwNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMzhEMDAwMDIwMDBGMDBFMTgwNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMzhFMDAwMDIwMDBGMDBFMjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMzhGMDAwMDIwMDBGMDBFMzgwNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMzkwMDAwMDIwMDBGMDBFNDgwNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzkxMDAwMDIwMDBGMDBFNTgwNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMzkyMDAwMDIwMDBGMDBFNjgwNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzkzMDAwMDIwMDBGMDBFNzgwNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMzk0MDAwMDIwMDBGMDBFODgwNzEwMDQ5MDAwMDAwMDMzQjhFRDFBNworOjEwMzk1MDAwMDIwMDBGMDBFOTgwNzEwMDJGMDAwMDAwRTMwMDgxRDExOAorOjEwMzk2MDAwMDIwMDBGMDBFQTgwNzEwMDNGMDAwMDAwMDMxODgwRDFDMAorOjEwMzk3MDAwMDIwMDBGMDBFQjgwNzEwMDQ5MDAwMDAwMDMzQjA0RDFGRQorOjEwMzk4MDAwMDIwMDBGMDBFQzgwNzEwMDNGMDAwMDAwMDMwMjgwRERBOAorOjEwMzk5MDAwMDIwMDBGMDBFRDgwNzEwMDQ5MDAwMDAwMDIzQjA0RDJEQworOjEwMzlBMDAwMDIwMDBGMDBFRTgwNzEwMDQ5MDAwMDAwMDAzQjg0RDI0RAorOjEwMzlCMDAwMDIwMDBGMDBFRjgwNzEwMDI1MDAwMDAwRTIwMDAwREQzMgorOjEwMzlDMDAwMDIwMDBGMDBGMDgwNzEwMDk0MDAwMDAwNjI0MTEzMDBCQgorOjEwMzlEMDAwMDIwMDBGMDBGMTgwNzEwMDk0MDAwMDAwNjI0MzBCMDBCMAorOjEwMzlFMDAwMDIwMDBGMDBGMjgwNzEwMDk0MDAwMDAwRTI0ODE1MDAxMAorOjEwMzlGMDAwMDIwMDBGMDBGMzgwNzEwMDk0MDAwMDAwNjI0OTFCMDA3OAorOjEwM0EwMDAwMDIwMDBGMDBGNDgwNzEwMDk0MDAwMDAwNzY0MDJGMDA0NworOjEwM0ExMDAwMDIwMDBGMDBGNTgwNzEwMDA5MDAwMDAwN0EzRDgxQ0Y5RgorOjEwM0EyMDAwMDIwMDBGMDBGNjgwNzEwMDFEMDAwMDAwRTU4MDJCRkRGNAorOjEwM0EzMDAwMDIwMDBGMDBGNzgwNzEwMDMwMDAwMDAwNjM4MDgzMzFDNgorOjEwM0E0MDAwMDIwMDBGMDBGODgwNzEwMDMwMDAwMDAwNjM4MDgyMTFENgorOjEwM0E1MDAwMDIwMDBGMDBGOTgwNzEwMDFEMDAwMDAwRTU4MDI1RkRDNworOjEwM0E2MDAwMDIwMDBGMDBGQTgwNzEwMDMwMDAwMDAwNjMwMDgzMzExMworOjEwM0E3MDAwMDIwMDBGMDBGQjgwNzEwMDMwMDAwMDAwNjMwMDgyMTEyMworOjEwM0E4MDAwMDIwMDBGMDBGQzgwNzEwMDJGMDAwMDAwRTMwMDgxRDFENAorOjEwM0E5MDAwMDIwMDBGMDBGRDgwNzEwMDFEMDAwMDAwRTU4MDA5RkQ5RgorOjEwM0FBMDAwMDIwMDBGMDBGRTgwNzEwMDMwMDAwMDAwNjNEMzgzMzFGQworOjEwM0FCMDAwMDIwMDBGMDBGRjgwNzEwMDMwMDAwMDAwNjNEMjgzMTEwQworOjEwM0FDMDAwMDIwMDBGMDAwMDgxNzEwMDJGMDAwMDAwRTMwMDgxRDE4RgorOjEwM0FEMDAwMDIwMDBGMDAwMTgxNzEwMDNGMDAwMDAwODQwMTgwRDZDOAorOjEwM0FFMDAwMDIwMDBGMDAwMjgxNzEwMDNGMDAwMDAwMDEwMDgwRDYzQgorOjEwM0FGMDAwMDIwMDBGMDAwMzgxNzEwMDM1MDAwMDAwRUQwMDgwRDY0OAorOjEwM0IwMDAwMDIwMDBGMDAwNDgxNzEwMDE4MDAwMDAwODEwMEZGMzdERgorOjEwM0IxMDAwMDIwMDBGMDAwNTgxNzEwMDI1MDAwMDAwNjQwMjAwRDI0MAorOjEwM0IyMDAwMDIwMDBGMDAwNjgxNzEwMDE4MDAwMDAwN0FGRDc3N0QwOQorOjEwM0IzMDAwMDIwMDBGMDAwNzgxNzEwMDQ5MDAwMDAwNjMzQjIwREU5NgorOjEwM0I0MDAwMDIwMDBGMDAwODgxNzEwMDQ5MDAwMDAwNzkzQjgwREUwRgorOjEwM0I1MDAwMDIwMDBGMDAwOTgxNzEwMDIxMDAwMDAwRTMwMDgwRDEwNAorOjEwM0I2MDAwMDIwMDBGMDAwQTgxNzEwMDA5MDAwMDAwN0EzRDgxQ0YzOAorOjEwM0I3MDAwMDIwMDBGMDAwQjgxNzEwMDQ5MDAwMDAwRTMzMTAwRERGRAorOjEwM0I4MDAwMDIwMDBGMDAwQzgxNzEwMDY5MDAwMDAwNzgzQjBFREQxRgorOjEwM0I5MDAwMDIwMDBGMDAwRDgxNzEwMDYxMDAwMDAwNzYzQjAwREQyNgorOjEwM0JBMDAwMDIwMDBGMDAwRTgxNzEwMDNGMDAwMDAwODQwMTAwREQ2MworOjEwM0JCMDAwMDIwMDBGMDAwRjgxNzEwMDNGMDAwMDAwMDEwMDAwRERENgorOjEwM0JDMDAwMDIwMDBGMDAxMDgxNzEwMDM1MDAwMDAwRkEwMDAwRERENgorOjEwM0JEMDAwMDIwMDBGMDAxMTgxNzEwMDE4MDAwMDAwNzYzQjdGM0I0RQorOjEwM0JFMDAwMDIwMDBGMDAxMjgxNzEwMDNEMDAwMDAwNkYwMDgwRjc5RAorOjEwM0JGMDAwMDIwMDBGMDAxMzgxNzEwMDNEMDAwMDAwNkYwMDgwRjc4QworOjEwM0MwMDAwMDIwMDBGMDAxNDgxNzEwMDNEMDAwMDAwNkYwMDgwRjc3QQorOjEwM0MxMDAwMDIwMDBGMDAxNTgxNzEwMDIxMDAwMDAwRTMwMDgwRDEzNworOjEwM0MyMDAwMDIwMDBGMDAxNjgxNzEwMDY5MDAwMDAwNzkzQjA0REQ3RAorOjEwM0MzMDAwMDIwMDBGMDAxNzgxNzEwMDYxMDAwMDAwRTMwMDgwRjFCNQorOjEwM0M0MDAwMDIwMDBGMDAxODgxNzEwMDNGMDAwMDAwODQwMTgwRDYzRgorOjEwM0M1MDAwMDIwMDBGMDAxOTgxNzEwMDNGMDAwMDAwMDEwMDgwRDZCMgorOjEwM0M2MDAwMDIwMDBGMDAxQTgxNzEwMDM1MDAwMDAwRUQwMDgwRDZCRgorOjEwM0M3MDAwMDIwMDBGMDAxQjgxNzEwMDE4MDAwMDAwODEwMEZGMzc1NworOjEwM0M4MDAwMDIwMDBGMDAxQzgxNzEwMDI1MDAwMDAwNjQwMjAwRDJCOAorOjEwM0M5MDAwMDIwMDBGMDAxRDgxNzEwMDk4MDAwMDAwNzZCQjVENjA3RQorOjEwM0NBMDAwMDIwMDBGMDAxRTgxNzEwMDA5MDAwMDAwN0EzRDgxQ0ZFMworOjEwM0NCMDAwMDIwMDBGMDAxRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0NDMDAwMDIwMDBGMDAyMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwM0NEMDAwMDIwMDBGMDAyMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwM0NFMDAwMDIwMDBGMDAyMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwM0NGMDAwMDIwMDBGMDAyMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwM0QwMDAwMDIwMDBGMDAyNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwM0QxMDAwMDIwMDBGMDAyNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwM0QyMDAwMDIwMDBGMDAyNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwM0QzMDAwMDIwMDBGMDAyNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwM0Q0MDAwMDIwMDBGMDAyODgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwM0Q1MDAwMDIwMDBGMDAyOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0Q2MDAwMDIwMDBGMDAyQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwM0Q3MDAwMDIwMDBGMDAyQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwM0Q4MDAwMDIwMDBGMDAyQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwM0Q5MDAwMDIwMDBGMDAyRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwM0RBMDAwMDIwMDBGMDAyRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0RCMDAwMDIwMDBGMDAyRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwM0RDMDAwMDIwMDBGMDAzMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwM0REMDAwMDIwMDBGMDAzMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwM0RFMDAwMDIwMDBGMDAzMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwM0RGMDAwMDIwMDBGMDAzMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwM0UwMDAwMDIwMDBGMDAzNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwM0UxMDAwMDIwMDBGMDAzNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwM0UyMDAwMDIwMDBGMDAzNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwM0UzMDAwMDIwMDBGMDAzNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwM0U0MDAwMDIwMDBGMDAzODgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwM0U1MDAwMDIwMDBGMDAzOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwM0U2MDAwMDIwMDBGMDAzQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwM0U3MDAwMDIwMDBGMDAzQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwM0U4MDAwMDIwMDBGMDAzQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwM0U5MDAwMDIwMDBGMDAzRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0VBMDAwMDIwMDBGMDAzRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwM0VCMDAwMDIwMDBGMDAzRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwM0VDMDAwMDIwMDBGMDA0MDgxNzEwMDQ5MDAwMDAwMDEzQjA4RDQ0RQorOjEwM0VEMDAwMDIwMDBGMDA0MTgxNzEwMDA5MDAwMDAwN0EzRDhCQzI5MQorOjEwM0VFMDAwMDIwMDBGMDA0MjgxNzEwMDNGMDAwMDAwODAwMzAwRDRGNworOjEwM0VGMDAwMDIwMDBGMDA0MzgxNzEwMDA5MDAwMDAwN0EzRDhCQzI2RgorOjEwM0YwMDAwMDIwMDBGMDA0NDgxNzEwMDQ5MDAwMDAwMDMzQjBFRDQwMQorOjEwM0YxMDAwMDIwMDBGMDA0NTgxNzEwMDNGMDAwMDAwMDAwMDQyRDYwMgorOjEwM0YyMDAwMDIwMDBGMDA0NjgxNzEwMDJGMDAwMDAwODA0MDgxRDIwNgorOjEwM0YzMDAwMDIwMDBGMDA0NzgxNzEwMDJEMDAwMDAwNjUwMzg0RDI0QworOjEwM0Y0MDAwMDIwMDBGMDA0ODgxNzEwMDNGMDAwMDAwODAwMDgwRDYxMQorOjEwM0Y1MDAwMDIwMDBGMDA0OTgxNzEwMDNGMDAwMDAwMDQwMDA0RERGMQorOjEwM0Y2MDAwMDIwMDBGMDA0QTgxNzEwMDNGMDAwMDAwMDEwMDE4RERDRgorOjEwM0Y3MDAwMDIwMDBGMDA0QjgxNzEwMDY5MDAwMDAwNkQzQjAwREQwNQorOjEwM0Y4MDAwMDIwMDBGMDA0QzgxNzEwMDY5MDAwMDAwNkQzQjAwRERGNAorOjEwM0Y5MDAwMDIwMDBGMDA0RDgxNzEwMDMxMDAwMDAwNjVEMjAzRDM5MworOjEwM0ZBMDAwMDIwMDBGMDA0RTgxNzEwMDQ5MDAwMDAwNjYzQjQwREVCOAorOjEwM0ZCMDAwMDIwMDBGMDA0RjgxNzEwMDNGMDAwMDAwODQwMTgwRDY5NQorOjEwM0ZDMDAwMDIwMDBGMDA1MDgxNzEwMDNGMDAwMDAwMDEwMDgwRDYwOAorOjEwM0ZEMDAwMDIwMDBGMDA1MTgxNzEwMDM1MDAwMDAwRUQwMDgwRDYxNQorOjEwM0ZFMDAwMDIwMDBGMDA1MjgxNzEwMDE4MDAwMDAwODEwMEZGMzdBRAorOjEwM0ZGMDAwMDIwMDBGMDA1MzgxNzEwMDQ5MDAwMDAwN0UzQjgwRDUxNAorOjEwNDAwMDAwMDIwMDBGMDA1NDgxNzEwMDIxMDAwMDAwRTYwMDQwREUzNAorOjEwNDAxMDAwMDIwMDBGMDA1NTgxNzEwMDNGMDAwMDAwODQwMTgwRDYyRQorOjEwNDAyMDAwMDIwMDBGMDA1NjgxNzEwMDNGMDAwMDAwMDEwMDgwRDZBMQorOjEwNDAzMDAwMDIwMDBGMDA1NzgxNzEwMDM1MDAwMDAwRUQwMDgwRDZBRQorOjEwNDA0MDAwMDIwMDBGMDA1ODgxNzEwMDE4MDAwMDAwODEwMEZGMzc0NgorOjEwNDA1MDAwMDIwMDBGMDA1OTgxNzEwMDQ5MDAwMDAwN0UzQjAwRDUyRAorOjEwNDA2MDAwMDIwMDBGMDA1QTgxNzEwMDc5MDAwMDAwNzYzQjAxRERFQgorOjEwNDA3MDAwMDIwMDBGMDA1QjgxNzEwMDJEMDAwMDAwN0Y0MDA0REQxNQorOjEwNDA4MDAwMDIwMDBGMDA1QzgxNzEwMDE4MDAwMDAwNzYzQjdGM0Q0QworOjEwNDA5MDAwMDIwMDBGMDA1RDgxNzEwMDc5MDAwMDAwNzZCQjAxREQzOAorOjEwNDBBMDAwMDIwMDBGMDA1RTgxNzEwMDc1MDAwMDAwRTg4MDAxRkRENAorOjEwNDBCMDAwMDIwMDBGMDA1RjgxNzEwMDk0MDAwMDAwNjg0MTE1MDA0QworOjEwNDBDMDAwMDIwMDBGMDA2MDgxNzEwMDk0MDAwMDAwRTg0NDI1MDBBOAorOjEwNDBEMDAwMDIwMDBGMDA2MTgxNzEwMDk0MDAwMDAwRTg0MTIzMDA5QworOjEwNDBFMDAwMDIwMDBGMDA2MjgxNzEwMDk0MDAwMDAwNjg0NTE3MDAxMworOjEwNDBGMDAwMDIwMDBGMDA2MzgxNzEwMDk0MDAwMDAwNjg0MjE1MDAwNworOjEwNDEwMDAwMDIwMDBGMDA2NDgxNzEwMDk0MDAwMDAwRTg0MjI3MDA2MworOjEwNDExMDAwMDIwMDBGMDA2NTgxNzEwMDk0MDAwMDAwNjg0MzJEMDBDQgorOjEwNDEyMDAwMDIwMDBGMDA2NjgxNzEwMDk0MDAwMDAwNjg0NDJEMDBCOQorOjEwNDEzMDAwMDIwMDBGMDA2NzgxNzEwMDk0MDAwMDAwRTg0MzMzMDAyMworOjEwNDE0MDAwMDIwMDBGMDA2ODgxNzEwMDA0MDAwMDAwNzYzQjk3MDNCNQorOjEwNDE1MDAwMDIwMDBGMDA2OTgxNzEwMDBEMDAwMDAwNjVDMTBERTNEMAorOjEwNDE2MDAwMDIwMDBGMDA2QTgxNzEwMDMwMDAwMDAwNzYwMDAzMzIwNworOjEwNDE3MDAwMDIwMDBGMDA2QjgxNzEwMDMwMDAwMDAwNzYwMDAyMTIxNworOjEwNDE4MDAwMDIwMDBGMDA2QzgxNzEwMDNGMDAwMDAwMDAwMDgwRDQyRAorOjEwNDE5MDAwMDIwMDBGMDA2RDgxNzEwMDNGMDAwMDAwMDA4MDgwRDE5RgorOjEwNDFBMDAwMDIwMDBGMDA2RTgxNzEwMDBEMDAwMDAwNjVDMTNGRTM0OQorOjEwNDFCMDAwMDIwMDBGMDA2RjgxNzEwMDMwMDAwMDAwNzY2MDA0MzI1MQorOjEwNDFDMDAwMDIwMDBGMDA3MDgxNzEwMDMwMDAwMDAwNzY0MDA0MTI4MAorOjEwNDFEMDAwMDIwMDBGMDA3MTgxNzEwMDNGMDAwMDAwMDA4MDgyRDQ1NgorOjEwNDFFMDAwMDIwMDBGMDA3MjgxNzEwMDNGMDAwMDAwMDA4MDgwRDE0QQorOjEwNDFGMDAwMDIwMDBGMDA3MzgxNzEwMDBEMDAwMDAwNjVDMTNGRTNGNAorOjEwNDIwMDAwMDIwMDBGMDA3NDgxNzEwMDMwMDAwMDAwNzYyMDA0MzIzQgorOjEwNDIxMDAwMDIwMDBGMDA3NTgxNzEwMDMwMDAwMDAwNzYwMDA0MTI2QQorOjEwNDIyMDAwMDIwMDBGMDA3NjgxNzEwMDNGMDAwMDAwMDAwMDgyRDQ4MAorOjEwNDIzMDAwMDIwMDBGMDA3NzgxNzEwMDBEMDAwMDAwNjVDMTYzRTM4QgorOjEwNDI0MDAwMDIwMDBGMDA3ODgxNzEwMDMwMDAwMDAwNzYyMDAzMzJGOAorOjEwNDI1MDAwMDIwMDBGMDA3OTgxNzEwMDMwMDAwMDAwNzYwMDAzMTIyNworOjEwNDI2MDAwMDIwMDBGMDA3QTgxNzEwMDNGMDAwMDAwMDAwMDgzRDQzQgorOjEwNDI3MDAwMDIwMDBGMDA3QjgxNzEwMDQ5MDAwMDAwNzYzQjgwRDI3NAorOjEwNDI4MDAwMDIwMDBGMDA3QzgxNzEwMDBEMDAwMDAwNjVDMTBERTM4QworOjEwNDI5MDAwMDIwMDBGMDA3RDgxNzEwMDMwMDAwMDAwNzY4MDAzMzI0MworOjEwNDJBMDAwMDIwMDBGMDA3RTgxNzEwMDMwMDAwMDAwNzY4MDAyMTI1MworOjEwNDJCMDAwMDIwMDBGMDA3RjgxNzEwMDNGMDAwMDAwMDAwMDgxRDRFOAorOjEwNDJDMDAwMDIwMDBGMDA4MDgxNzEwMDNGMDAwMDAwMDAwMDAyRDY1NAorOjEwNDJEMDAwMDIwMDBGMDA4MTgxNzEwMDNGMDAwMDAwMDAwMDgxRDFDOQorOjEwNDJFMDAwMDIwMDBGMDA4MjgxNzEwMDBEMDAwMDAwNjVDMTNGRTNGNAorOjEwNDJGMDAwMDIwMDBGMDA4MzgxNzEwMDMwMDAwMDAwNzYyMDA0MzIzQworOjEwNDMwMDAwMDIwMDBGMDA4NDgxNzEwMDMwMDAwMDAwNzYwMDA0MTI2QQorOjEwNDMxMDAwMDIwMDBGMDA4NTgxNzEwMDNGMDAwMDAwMDAwMDgyRDQ4MAorOjEwNDMyMDAwMDIwMDBGMDA4NjgxNzEwMDQxMDAwMDAwRUIzNDgwRDQ1MAorOjEwNDMzMDAwMDIwMDBGMDA4NzgxNzEwMDc5MDAwMDAwNkFCQjAxREQ3NworOjEwNDM0MDAwMDIwMDBGMDA4ODgxNzEwMDc5MDAwMDAwNzZCQjAxREQ1QQorOjEwNDM1MDAwMDIwMDBGMDA4OTgxNzEwMDNGMDAwMDAwMDMxODAwRDJBNQorOjEwNDM2MDAwMDIwMDBGMDA4QTgxNzEwMDNGMDAwMDAwMDAwMDgxRDEyRgorOjEwNDM3MDAwMDIwMDBGMDA4QjgxNzEwMDc1MDAwMDAwNjM4MDAxRkQ1OQorOjEwNDM4MDAwMDIwMDBGMDA4QzgxNzEwMDk4MDAwMDAwNjQzQjY5ODA3RQorOjEwNDM5MDAwMDIwMDBGMDA4RDgxNzEwMDUxMDAwMDAwRTQwMDAwRjI2NgorOjEwNDNBMDAwMDIwMDBGMDA4RTgxNzEwMDNGMDAwMDAwODQwMTgwRDY2MgorOjEwNDNCMDAwMDIwMDBGMDA4RjgxNzEwMDNGMDAwMDAwMDEwMDgwRDZENQorOjEwNDNDMDAwMDIwMDBGMDA5MDgxNzEwMDM1MDAwMDAwRUQwMDgwRDZFMgorOjEwNDNEMDAwMDIwMDBGMDA5MTgxNzEwMDE4MDAwMDAwODEwMEZGMzc3QQorOjEwNDNFMDAwMDIwMDBGMDA5MjgxNzEwMDJEMDAwMDAwN0Y0MDA0REQ2QgorOjEwNDNGMDAwMDIwMDBGMDA5MzgxNzEwMDE4MDAwMDAwNzYzQjdGM0RBMgorOjEwNDQwMDAwMDIwMDBGMDA5NDgxNzEwMDQ5MDAwMDAwMzgzQkMwRDNDNgorOjEwNDQxMDAwMDIwMDBGMDA5NTgxNzEwMDQ5MDAwMDAwNjQzQjAwREQzRgorOjEwNDQyMDAwMDIwMDBGMDA5NjgxNzEwMDUxMDAwMDAwRTQwMDAwRjJDQworOjEwNDQzMDAwMDIwMDBGMDA5NzgxNzEwMDNGMDAwMDAwODQwMTgwRDZDOAorOjEwNDQ0MDAwMDIwMDBGMDA5ODgxNzEwMDNGMDAwMDAwMDEwMDgwRDYzQgorOjEwNDQ1MDAwMDIwMDBGMDA5OTgxNzEwMDM1MDAwMDAwRUQwMDgwRDY0OAorOjEwNDQ2MDAwMDIwMDBGMDA5QTgxNzEwMDE4MDAwMDAwODEwMEZGMzdFMAorOjEwNDQ3MDAwMDIwMDBGMDA5QjgxNzEwMDQ5MDAwMDAwMzgzQkEwRDM2RgorOjEwNDQ4MDAwMDIwMDBGMDA5QzgxNzEwMDE5MDAwMDAwNzZCQjYxREQwNQorOjEwNDQ5MDAwMDIwMDBGMDA5RDgxNzEwMDQ5MDAwMDAwNjczQjAwRERCNAorOjEwNDRBMDAwMDIwMDBGMDA5RTgxNzEwMDc1MDAwMDAwNjM4MjgxRjE5RgorOjEwNDRCMDAwMDIwMDBGMDA5RjgxNzEwMDQxMDAwMDAwRUIzNDgwRDRBNgorOjEwNDRDMDAwMDIwMDBGMDBBMDgxNzEwMDc5MDAwMDAwNkFCQjAxRERDRAorOjEwNDREMDAwMDIwMDBGMDBBMTgxNzEwMDc5MDAwMDAwNzZCQjAxRERCMAorOjEwNDRFMDAwMDIwMDBGMDBBMjgxNzEwMDNGMDAwMDAwMDMxODAwRDJGQgorOjEwNDRGMDAwMDIwMDBGMDBBMzgxNzEwMDNGMDAwMDAwMDA4MDgwRDEwNgorOjEwNDUwMDAwMDIwMDBGMDBBNDgxNzEwMDc1MDAwMDAwNjM4MDAxRkRBRQorOjEwNDUxMDAwMDIwMDBGMDBBNTgxNzEwMDk4MDAwMDAwNjQzQjM3ODAwNQorOjEwNDUyMDAwMDIwMDBGMDBBNjgxNzEwMDUxMDAwMDAwRTQwMDAwRjJCQgorOjEwNDUzMDAwMDIwMDBGMDBBNzgxNzEwMDNGMDAwMDAwODQwMTgwRDZCNworOjEwNDU0MDAwMDIwMDBGMDBBODgxNzEwMDNGMDAwMDAwMDEwMDgwRDYyQQorOjEwNDU1MDAwMDIwMDBGMDBBOTgxNzEwMDM1MDAwMDAwRUQwMDgwRDYzNworOjEwNDU2MDAwMDIwMDBGMDBBQTgxNzEwMDE4MDAwMDAwODEwMEZGMzdDRgorOjEwNDU3MDAwMDIwMDBGMDBBQjgxNzEwMDJEMDAwMDAwN0Y0MDA0RERDMAorOjEwNDU4MDAwMDIwMDBGMDBBQzgxNzEwMDE4MDAwMDAwNzYzQjdGM0RGNworOjEwNDU5MDAwMDIwMDBGMDBBRDgxNzEwMDQ5MDAwMDAwMzgzQjgwRDM1QworOjEwNDVBMDAwMDIwMDBGMDBBRTgxNzEwMDE5MDAwMDAwNzZCQjZGRERDNAorOjEwNDVCMDAwMDIwMDBGMDBBRjgxNzEwMDQ5MDAwMDAwNjczQjAwREQ4MQorOjEwNDVDMDAwMDIwMDBGMDBCMDgxNzEwMDc1MDAwMDAwNjM4MjgxRjE2QworOjEwNDVEMDAwMDIwMDBGMDBCMTgxNzEwMDQxMDAwMDAwRUIzNDgwRDQ3MworOjEwNDVFMDAwMDIwMDBGMDBCMjgxNzEwMDc5MDAwMDAwNkFCQjAxREQ5QQorOjEwNDVGMDAwMDIwMDBGMDBCMzgxNzEwMDc5MDAwMDAwNjNCQjAxREQ5MAorOjEwNDYwMDAwMDIwMDBGMDBCNDgxNzEwMDc1MDAwMDAwNjM4MDAxRkQ5RAorOjEwNDYxMDAwMDIwMDBGMDBCNTgxNzEwMDk4MDAwMDAwNjQzQjE3ODAxNAorOjEwNDYyMDAwMDIwMDBGMDBCNjgxNzEwMDQ5MDAwMDAwNjQzQjQwREVDQgorOjEwNDYzMDAwMDIwMDBGMDBCNzgxNzEwMDNGMDAwMDAwODQwMTgwRDZBNgorOjEwNDY0MDAwMDIwMDBGMDBCODgxNzEwMDNGMDAwMDAwMDEwMDgwRDYxOQorOjEwNDY1MDAwMDIwMDBGMDBCOTgxNzEwMDM1MDAwMDAwRUQwMDgwRDYyNgorOjEwNDY2MDAwMDIwMDBGMDBCQTgxNzEwMDE4MDAwMDAwODEwMEZGMzdCRQorOjEwNDY3MDAwMDIwMDBGMDBCQjgxNzEwMDJEMDAwMDAwN0Y0MDA0RERBRgorOjEwNDY4MDAwMDIwMDBGMDBCQzgxNzEwMDE4MDAwMDAwNzYzQjdGM0RFNgorOjEwNDY5MDAwMDIwMDBGMDBCRDgxNzEwMDIxMDAwMDAwRTQwMDAwRDI4MworOjEwNDZBMDAwMDIwMDBGMDBCRTgxNzEwMDE5MDAwMDAwN0U3QkVGRDM3NQorOjEwNDZCMDAwMDIwMDBGMDBCRjgxNzEwMDc1MDAwMDAwNjM4MjgxRjE2QworOjEwNDZDMDAwMDIwMDBGMDBDMDgxNzEwMDNGMDAwMDAwMDAwMDgwRDY5MgorOjEwNDZEMDAwMDIwMDBGMDBDMTgxNzEwMDNGMDAwMDAwMDQwMDA0RERGMgorOjEwNDZFMDAwMDIwMDBGMDBDMjgxNzEwMDNGMDAwMDAwMDEwMDE4REREMAorOjEwNDZGMDAwMDIwMDBGMDBDMzgxNzEwMDY5MDAwMDAwNkQzQjAwREQwNgorOjEwNDcwMDAwMDIwMDBGMDBDNDgxNzEwMDY5MDAwMDAwNkQzQjAwRERGNAorOjEwNDcxMDAwMDIwMDBGMDBDNTgxNzEwMDNGMDAwMDAwMDAwMDAwRERCNQorOjEwNDcyMDAwMDIwMDBGMDBDNjgxNzEwMDJEMDAwMDAwODAwMTU0RERFMQorOjEwNDczMDAwMDIwMDBGMDBDNzgxNzEwMDc5MDAwMDAwNzY4MEUwRjM2RAorOjEwNDc0MDAwMDIwMDBGMDBDODgxNzEwMDQ5MDAwMDAwN0EzNjAwRDZDRgorOjEwNDc1MDAwMDIwMDBGMDBDOTgxNzEwMDc5MDAwMDAwNzZGQjAxRERDNQorOjEwNDc2MDAwMDIwMDBGMDBDQTgxNzEwMDNEMDAwMDAwNkYwMDgwRjc1OQorOjEwNDc3MDAwMDIwMDBGMDBDQjgxNzEwMDQ5MDAwMDAwMDMzQjAwREQwNworOjEwNDc4MDAwMDIwMDBGMDBDQzgxNzEwMDU5MDAwMDAwNzYzQjAwRkQ1MworOjEwNDc5MDAwMDIwMDBGMDBDRDgxNzEwMDNGMDAwMDAwMDMxQzgwREQ4RQorOjEwNDdBMDAwMDIwMDBGMDBDRTgxNzEwMDNEMDAwMDAwNkYwMDgwRjcxNQorOjEwNDdCMDAwMDIwMDBGMDBDRjgxNzEwMDNEMDAwMDAwNkYwMDgwRjcwNAorOjEwNDdDMDAwMDIwMDBGMDBEMDgxNzEwMDNEMDAwMDAwNkYwMDgwRjdGMworOjEwNDdEMDAwMDIwMDBGMDBEMTgxNzEwMDJEMDAwMDAwN0YwMjA2REQ3NAorOjEwNDdFMDAwMDIwMDBGMDBEMjgxNzEwMDE4MDAwMDAwN0EzRDdGMUQ4OQorOjEwNDdGMDAwMDIwMDBGMDBEMzgxNzEwMDMxMDAwMDAwNkI4ODgzRDQ2OAorOjEwNDgwMDAwMDIwMDBGMDBENDgxNzEwMDc5MDAwMDAwNkFCQjAxREQ1NQorOjEwNDgxMDAwMDIwMDBGMDBENTgxNzEwMDc5MDAwMDAwNzY5MDgxRjFDRgorOjEwNDgyMDAwMDIwMDBGMDBENjgxNzEwMDc1MDAwMDAwNjM4MDAxRkQ1OQorOjEwNDgzMDAwMDIwMDBGMDBENzgxNzEwMDk4MDAwMDAwNzZCQjUzODAwMgorOjEwNDg0MDAwMDIwMDBGMDBEODgxNzEwMDE5MDAwMDAwNzk3QjdGREQyNAorOjEwNDg1MDAwMDIwMDBGMDBEOTgxNzEwMDc1MDAwMDAwNjM4MjgxRjFCMAorOjEwNDg2MDAwMDIwMDBGMDBEQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNDg3MDAwMDIwMDBGMDBEQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNDg4MDAwMDIwMDBGMDBEQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNDg5MDAwMDIwMDBGMDBERDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNDhBMDAwMDIwMDBGMDBERTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNDhCMDAwMDIwMDBGMDBERjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNDhDMDAwMDIwMDBGMDBFMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNDhEMDAwMDIwMDBGMDBFMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNDhFMDAwMDIwMDBGMDBFMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNDhGMDAwMDIwMDBGMDBFMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNDkwMDAwMDIwMDBGMDBFNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNDkxMDAwMDIwMDBGMDBFNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNDkyMDAwMDIwMDBGMDBFNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNDkzMDAwMDIwMDBGMDBFNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNDk0MDAwMDIwMDBGMDBFODgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNDk1MDAwMDIwMDBGMDBFOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNDk2MDAwMDIwMDBGMDBFQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNDk3MDAwMDIwMDBGMDBFQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNDk4MDAwMDIwMDBGMDBFQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNDk5MDAwMDIwMDBGMDBFRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNDlBMDAwMDIwMDBGMDBFRTgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNDlCMDAwMDIwMDBGMDBFRjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNDlDMDAwMDIwMDBGMDBGMDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNDlEMDAwMDIwMDBGMDBGMTgxNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNDlFMDAwMDIwMDBGMDBGMjgxNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNDlGMDAwMDIwMDBGMDBGMzgxNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNEEwMDAwMDIwMDBGMDBGNDgxNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEExMDAwMDIwMDBGMDBGNTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEEyMDAwMDIwMDBGMDBGNjgxNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEEzMDAwMDIwMDBGMDBGNzgxNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEE0MDAwMDIwMDBGMDBGODgxNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNEE1MDAwMDIwMDBGMDBGOTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNEE2MDAwMDIwMDBGMDBGQTgxNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNEE3MDAwMDIwMDBGMDBGQjgxNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNEE4MDAwMDIwMDBGMDBGQzgxNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNEE5MDAwMDIwMDBGMDBGRDgxNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNEFBMDAwMDIwMDBGMDBGRTgxNzEwMDNGMDAwMDAwMDMwMjgwREQ2NAorOjEwNEFCMDAwMDIwMDBGMDBGRjgxNzEwMDQ5MDAwMDAwMDIzQjg0RDExOQorOjEwNEFDMDAwMDIwMDBGMDAwMDgyNzEwMDQ5MDAwMDAwMDMzQjAwREQ3RQorOjEwNEFEMDAwMDIwMDBGMDAwMTgyNzEwMDY5MDAwMDAwN0EzQjAwRERENgorOjEwNEFFMDAwMDIwMDBGMDAwMjgyNzEwMDQ5MDAwMDAwNzkzQjAwRERFNgorOjEwNEFGMDAwMDIwMDBGMDAwMzgyNzEwMDY1MDAwMDAwNjMwMjgwRjE3NAorOjEwNEIwMDAwMDIwMDBGMDAwNDgyNzEwMDE4MDAwMDAwNzYzQjdEN0REQQorOjEwNEIxMDAwMDIwMDBGMDAwNTgyNzEwMDA5MDAwMDAwN0EzRDgxQ0Y3QworOjEwNEIyMDAwMDIwMDBGMDAwNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNEIzMDAwMDIwMDBGMDAwNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEI0MDAwMDIwMDBGMDAwODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEI1MDAwMDIwMDBGMDAwOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEI2MDAwMDIwMDBGMDAwQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEI3MDAwMDIwMDBGMDAwQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEI4MDAwMDIwMDBGMDAwQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEI5MDAwMDIwMDBGMDAwRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEJBMDAwMDIwMDBGMDAwRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEJCMDAwMDIwMDBGMDAwRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEJDMDAwMDIwMDBGMDAxMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEJEMDAwMDIwMDBGMDAxMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNEJFMDAwMDIwMDBGMDAxMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEJGMDAwMDIwMDBGMDAxMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEMwMDAwMDIwMDBGMDAxNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwNEMxMDAwMDIwMDBGMDAxNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNEMyMDAwMDIwMDBGMDAxNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEMzMDAwMDIwMDBGMDAxNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEM0MDAwMDIwMDBGMDAxODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEM1MDAwMDIwMDBGMDAxOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEM2MDAwMDIwMDBGMDAxQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEM3MDAwMDIwMDBGMDAxQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEM4MDAwMDIwMDBGMDAxQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEM5MDAwMDIwMDBGMDAxRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNENBMDAwMDIwMDBGMDAxRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNENCMDAwMDIwMDBGMDAxRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNENDMDAwMDIwMDBGMDAyMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNENEMDAwMDIwMDBGMDAyMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNENFMDAwMDIwMDBGMDAyMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNENGMDAwMDIwMDBGMDAyMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEQwMDAwMDIwMDBGMDAyNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNEQxMDAwMDIwMDBGMDAyNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEQyMDAwMDIwMDBGMDAyNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEQzMDAwMDIwMDBGMDAyNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEQ0MDAwMDIwMDBGMDAyODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEQ1MDAwMDIwMDBGMDAyOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEQ2MDAwMDIwMDBGMDAyQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEQ3MDAwMDIwMDBGMDAyQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEQ4MDAwMDIwMDBGMDAyQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEQ5MDAwMDIwMDBGMDAyRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNERBMDAwMDIwMDBGMDAyRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNERCMDAwMDIwMDBGMDAyRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNERDMDAwMDIwMDBGMDAzMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEREMDAwMDIwMDBGMDAzMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNERFMDAwMDIwMDBGMDAzMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNERGMDAwMDIwMDBGMDAzMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEUwMDAwMDIwMDBGMDAzNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNEUxMDAwMDIwMDBGMDAzNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEUyMDAwMDIwMDBGMDAzNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEUzMDAwMDIwMDBGMDAzNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEU0MDAwMDIwMDBGMDAzODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEU1MDAwMDIwMDBGMDAzOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEU2MDAwMDIwMDBGMDAzQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEU3MDAwMDIwMDBGMDAzQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEU4MDAwMDIwMDBGMDAzQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEU5MDAwMDIwMDBGMDAzRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEVBMDAwMDIwMDBGMDAzRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNEVCMDAwMDIwMDBGMDAzRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEVDMDAwMDIwMDBGMDA0MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEVEMDAwMDIwMDBGMDA0MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEVFMDAwMDIwMDBGMDA0MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEVGMDAwMDIwMDBGMDA0MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNEYwMDAwMDIwMDBGMDA0NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNEYxMDAwMDIwMDBGMDA0NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNEYyMDAwMDIwMDBGMDA0NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNEYzMDAwMDIwMDBGMDA0NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNEY0MDAwMDIwMDBGMDA0ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEY1MDAwMDIwMDBGMDA0OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNEY2MDAwMDIwMDBGMDA0QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNEY3MDAwMDIwMDBGMDA0QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEY4MDAwMDIwMDBGMDA0QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEY5MDAwMDIwMDBGMDA0RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNEZBMDAwMDIwMDBGMDA0RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNEZCMDAwMDIwMDBGMDA0RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNEZDMDAwMDIwMDBGMDA1MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNEZEMDAwMDIwMDBGMDA1MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNEZFMDAwMDIwMDBGMDA1MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNEZGMDAwMDIwMDBGMDA1MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTAwMDAwMDIwMDBGMDA1NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNTAxMDAwMDIwMDBGMDA1NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNTAyMDAwMDIwMDBGMDA1NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNTAzMDAwMDIwMDBGMDA1NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTA0MDAwMDIwMDBGMDA1ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTA1MDAwMDIwMDBGMDA1OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTA2MDAwMDIwMDBGMDA1QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTA3MDAwMDIwMDBGMDA1QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTA4MDAwMDIwMDBGMDA1QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTA5MDAwMDIwMDBGMDA1RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTBBMDAwMDIwMDBGMDA1RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTBCMDAwMDIwMDBGMDA1RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTBDMDAwMDIwMDBGMDA2MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTBEMDAwMDIwMDBGMDA2MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTBFMDAwMDIwMDBGMDA2MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTBGMDAwMDIwMDBGMDA2MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTEwMDAwMDIwMDBGMDA2NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNTExMDAwMDIwMDBGMDA2NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNTEyMDAwMDIwMDBGMDA2NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTEzMDAwMDIwMDBGMDA2NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTE0MDAwMDIwMDBGMDA2ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTE1MDAwMDIwMDBGMDA2OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTE2MDAwMDIwMDBGMDA2QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTE3MDAwMDIwMDBGMDA2QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTE4MDAwMDIwMDBGMDA2QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTE5MDAwMDIwMDBGMDA2RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTFBMDAwMDIwMDBGMDA2RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTFCMDAwMDIwMDBGMDA2RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTFDMDAwMDIwMDBGMDA3MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTFEMDAwMDIwMDBGMDA3MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTFFMDAwMDIwMDBGMDA3MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTFGMDAwMDIwMDBGMDA3MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTIwMDAwMDIwMDBGMDA3NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNTIxMDAwMDIwMDBGMDA3NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTIyMDAwMDIwMDBGMDA3NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTIzMDAwMDIwMDBGMDA3NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTI0MDAwMDIwMDBGMDA3ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTI1MDAwMDIwMDBGMDA3OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTI2MDAwMDIwMDBGMDA3QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTI3MDAwMDIwMDBGMDA3QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTI4MDAwMDIwMDBGMDA3QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTI5MDAwMDIwMDBGMDA3RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTJBMDAwMDIwMDBGMDA3RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTJCMDAwMDIwMDBGMDA3RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTJDMDAwMDIwMDBGMDA4MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTJEMDAwMDIwMDBGMDA4MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTJFMDAwMDIwMDBGMDA4MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTJGMDAwMDIwMDBGMDA4MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTMwMDAwMDIwMDBGMDA4NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNTMxMDAwMDIwMDBGMDA4NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTMyMDAwMDIwMDBGMDA4NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTMzMDAwMDIwMDBGMDA4NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTM0MDAwMDIwMDBGMDA4ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTM1MDAwMDIwMDBGMDA4OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTM2MDAwMDIwMDBGMDA4QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTM3MDAwMDIwMDBGMDA4QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTM4MDAwMDIwMDBGMDA4QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTM5MDAwMDIwMDBGMDA4RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTNBMDAwMDIwMDBGMDA4RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTNCMDAwMDIwMDBGMDA4RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTNDMDAwMDIwMDBGMDA5MDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTNEMDAwMDIwMDBGMDA5MTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTNFMDAwMDIwMDBGMDA5MjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTNGMDAwMDIwMDBGMDA5MzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTQwMDAwMDIwMDBGMDA5NDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNTQxMDAwMDIwMDBGMDA5NTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTQyMDAwMDIwMDBGMDA5NjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTQzMDAwMDIwMDBGMDA5NzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTQ0MDAwMDIwMDBGMDA5ODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTQ1MDAwMDIwMDBGMDA5OTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTQ2MDAwMDIwMDBGMDA5QTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTQ3MDAwMDIwMDBGMDA5QjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTQ4MDAwMDIwMDBGMDA5QzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTQ5MDAwMDIwMDBGMDA5RDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTRBMDAwMDIwMDBGMDA5RTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTRCMDAwMDIwMDBGMDA5RjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTRDMDAwMDIwMDBGMDBBMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTREMDAwMDIwMDBGMDBBMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTRFMDAwMDIwMDBGMDBBMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTRGMDAwMDIwMDBGMDBBMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTUwMDAwMDIwMDBGMDBBNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNTUxMDAwMDIwMDBGMDBBNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTUyMDAwMDIwMDBGMDBBNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTUzMDAwMDIwMDBGMDBBNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTU0MDAwMDIwMDBGMDBBODgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTU1MDAwMDIwMDBGMDBBOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTU2MDAwMDIwMDBGMDBBQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTU3MDAwMDIwMDBGMDBBQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTU4MDAwMDIwMDBGMDBBQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTU5MDAwMDIwMDBGMDBBRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTVBMDAwMDIwMDBGMDBBRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTVCMDAwMDIwMDBGMDBBRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTVDMDAwMDIwMDBGMDBCMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTVEMDAwMDIwMDBGMDBCMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTVFMDAwMDIwMDBGMDBCMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTVGMDAwMDIwMDBGMDBCMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTYwMDAwMDIwMDBGMDBCNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNTYxMDAwMDIwMDBGMDBCNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTYyMDAwMDIwMDBGMDBCNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTYzMDAwMDIwMDBGMDBCNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTY0MDAwMDIwMDBGMDBCODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTY1MDAwMDIwMDBGMDBCOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTY2MDAwMDIwMDBGMDBCQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTY3MDAwMDIwMDBGMDBCQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTY4MDAwMDIwMDBGMDBCQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTY5MDAwMDIwMDBGMDBCRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTZBMDAwMDIwMDBGMDBCRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTZCMDAwMDIwMDBGMDBCRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTZDMDAwMDIwMDBGMDBDMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTZEMDAwMDIwMDBGMDBDMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTZFMDAwMDIwMDBGMDBDMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTZGMDAwMDIwMDBGMDBDMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNTcwMDAwMDIwMDBGMDBDNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTcxMDAwMDIwMDBGMDBDNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTcyMDAwMDIwMDBGMDBDNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTczMDAwMDIwMDBGMDBDNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTc0MDAwMDIwMDBGMDBDODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTc1MDAwMDIwMDBGMDBDOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTc2MDAwMDIwMDBGMDBDQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTc3MDAwMDIwMDBGMDBDQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTc4MDAwMDIwMDBGMDBDQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTc5MDAwMDIwMDBGMDBDRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTdBMDAwMDIwMDBGMDBDRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTdCMDAwMDIwMDBGMDBDRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTdDMDAwMDIwMDBGMDBEMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTdEMDAwMDIwMDBGMDBEMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTdFMDAwMDIwMDBGMDBEMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNTdGMDAwMDIwMDBGMDBEMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNTgwMDAwMDIwMDBGMDBENDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTgxMDAwMDIwMDBGMDBENTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTgyMDAwMDIwMDBGMDBENjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTgzMDAwMDIwMDBGMDBENzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTg0MDAwMDIwMDBGMDBEODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTg1MDAwMDIwMDBGMDBEOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTg2MDAwMDIwMDBGMDBEQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTg3MDAwMDIwMDBGMDBEQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTg4MDAwMDIwMDBGMDBEQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTg5MDAwMDIwMDBGMDBERDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNThBMDAwMDIwMDBGMDBERTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNThCMDAwMDIwMDBGMDBERjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNThDMDAwMDIwMDBGMDBFMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNThEMDAwMDIwMDBGMDBFMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNThFMDAwMDIwMDBGMDBFMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNThGMDAwMDIwMDBGMDBFMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNTkwMDAwMDIwMDBGMDBFNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTkxMDAwMDIwMDBGMDBFNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTkyMDAwMDIwMDBGMDBFNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNTkzMDAwMDIwMDBGMDBFNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTk0MDAwMDIwMDBGMDBFODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTk1MDAwMDIwMDBGMDBFOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTk2MDAwMDIwMDBGMDBFQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTk3MDAwMDIwMDBGMDBFQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTk4MDAwMDIwMDBGMDBFQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTk5MDAwMDIwMDBGMDBFRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTlBMDAwMDIwMDBGMDBFRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNTlCMDAwMDIwMDBGMDBFRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNTlDMDAwMDIwMDBGMDBGMDgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNTlEMDAwMDIwMDBGMDBGMTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNTlFMDAwMDIwMDBGMDBGMjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNTlGMDAwMDIwMDBGMDBGMzgyNzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNUEwMDAwMDIwMDBGMDBGNDgyNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUExMDAwMDIwMDBGMDBGNTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUEyMDAwMDIwMDBGMDBGNjgyNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUEzMDAwMDIwMDBGMDBGNzgyNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUE0MDAwMDIwMDBGMDBGODgyNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNUE1MDAwMDIwMDBGMDBGOTgyNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNUE2MDAwMDIwMDBGMDBGQTgyNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNUE3MDAwMDIwMDBGMDBGQjgyNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNUE4MDAwMDIwMDBGMDBGQzgyNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNUE5MDAwMDIwMDBGMDBGRDgyNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNUFBMDAwMDIwMDBGMDBGRTgyNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNUFCMDAwMDIwMDBGMDBGRjgyNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNUFDMDAwMDIwMDBGMDAwMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUFEMDAwMDIwMDBGMDAwMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUFFMDAwMDIwMDBGMDAwMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUFGMDAwMDIwMDBGMDAwMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUIwMDAwMDIwMDBGMDAwNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwNUIxMDAwMDIwMDBGMDAwNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNUIyMDAwMDIwMDBGMDAwNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNUIzMDAwMDIwMDBGMDAwNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUI0MDAwMDIwMDBGMDAwODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUI1MDAwMDIwMDBGMDAwOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUI2MDAwMDIwMDBGMDAwQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUI3MDAwMDIwMDBGMDAwQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUI4MDAwMDIwMDBGMDAwQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUI5MDAwMDIwMDBGMDAwRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUJBMDAwMDIwMDBGMDAwRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUJCMDAwMDIwMDBGMDAwRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUJDMDAwMDIwMDBGMDAxMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUJEMDAwMDIwMDBGMDAxMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUJFMDAwMDIwMDBGMDAxMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUJGMDAwMDIwMDBGMDAxMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUMwMDAwMDIwMDBGMDAxNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNUMxMDAwMDIwMDBGMDAxNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNUMyMDAwMDIwMDBGMDAxNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUMzMDAwMDIwMDBGMDAxNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUM0MDAwMDIwMDBGMDAxODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUM1MDAwMDIwMDBGMDAxOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUM2MDAwMDIwMDBGMDAxQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUM3MDAwMDIwMDBGMDAxQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUM4MDAwMDIwMDBGMDAxQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUM5MDAwMDIwMDBGMDAxRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUNBMDAwMDIwMDBGMDAxRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUNCMDAwMDIwMDBGMDAxRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUNDMDAwMDIwMDBGMDAyMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUNEMDAwMDIwMDBGMDAyMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUNFMDAwMDIwMDBGMDAyMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUNGMDAwMDIwMDBGMDAyMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUQwMDAwMDIwMDBGMDAyNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNUQxMDAwMDIwMDBGMDAyNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUQyMDAwMDIwMDBGMDAyNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUQzMDAwMDIwMDBGMDAyNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUQ0MDAwMDIwMDBGMDAyODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUQ1MDAwMDIwMDBGMDAyOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUQ2MDAwMDIwMDBGMDAyQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUQ3MDAwMDIwMDBGMDAyQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUQ4MDAwMDIwMDBGMDAyQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUQ5MDAwMDIwMDBGMDAyRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNURBMDAwMDIwMDBGMDAyRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNURCMDAwMDIwMDBGMDAyRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNURDMDAwMDIwMDBGMDAzMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUREMDAwMDIwMDBGMDAzMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNURFMDAwMDIwMDBGMDAzMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNURGMDAwMDIwMDBGMDAzMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUUwMDAwMDIwMDBGMDAzNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNUUxMDAwMDIwMDBGMDAzNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUUyMDAwMDIwMDBGMDAzNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUUzMDAwMDIwMDBGMDAzNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUU0MDAwMDIwMDBGMDAzODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUU1MDAwMDIwMDBGMDAzOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUU2MDAwMDIwMDBGMDAzQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUU3MDAwMDIwMDBGMDAzQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUU4MDAwMDIwMDBGMDAzQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUU5MDAwMDIwMDBGMDAzRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUVBMDAwMDIwMDBGMDAzRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUVCMDAwMDIwMDBGMDAzRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUVDMDAwMDIwMDBGMDA0MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUVEMDAwMDIwMDBGMDA0MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUVFMDAwMDIwMDBGMDA0MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUVGMDAwMDIwMDBGMDA0MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNUYwMDAwMDIwMDBGMDA0NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNUYxMDAwMDIwMDBGMDA0NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNUYyMDAwMDIwMDBGMDA0NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUYzMDAwMDIwMDBGMDA0NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUY0MDAwMDIwMDBGMDA0ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUY1MDAwMDIwMDBGMDA0OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNUY2MDAwMDIwMDBGMDA0QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUY3MDAwMDIwMDBGMDA0QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUY4MDAwMDIwMDBGMDA0QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNUY5MDAwMDIwMDBGMDA0RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNUZBMDAwMDIwMDBGMDA0RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNUZCMDAwMDIwMDBGMDA0RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNUZDMDAwMDIwMDBGMDA1MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNUZEMDAwMDIwMDBGMDA1MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNUZFMDAwMDIwMDBGMDA1MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNUZGMDAwMDIwMDBGMDA1MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjAwMDAwMDIwMDBGMDA1NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNjAxMDAwMDIwMDBGMDA1NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNjAyMDAwMDIwMDBGMDA1NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNjAzMDAwMDIwMDBGMDA1NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjA0MDAwMDIwMDBGMDA1ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjA1MDAwMDIwMDBGMDA1OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjA2MDAwMDIwMDBGMDA1QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjA3MDAwMDIwMDBGMDA1QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjA4MDAwMDIwMDBGMDA1QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjA5MDAwMDIwMDBGMDA1RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjBBMDAwMDIwMDBGMDA1RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjBCMDAwMDIwMDBGMDA1RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjBDMDAwMDIwMDBGMDA2MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjBEMDAwMDIwMDBGMDA2MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjBFMDAwMDIwMDBGMDA2MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjBGMDAwMDIwMDBGMDA2MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjEwMDAwMDIwMDBGMDA2NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNjExMDAwMDIwMDBGMDA2NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNjEyMDAwMDIwMDBGMDA2NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjEzMDAwMDIwMDBGMDA2NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjE0MDAwMDIwMDBGMDA2ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjE1MDAwMDIwMDBGMDA2OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjE2MDAwMDIwMDBGMDA2QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjE3MDAwMDIwMDBGMDA2QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjE4MDAwMDIwMDBGMDA2QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjE5MDAwMDIwMDBGMDA2RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjFBMDAwMDIwMDBGMDA2RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjFCMDAwMDIwMDBGMDA2RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjFDMDAwMDIwMDBGMDA3MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjFEMDAwMDIwMDBGMDA3MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjFFMDAwMDIwMDBGMDA3MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjFGMDAwMDIwMDBGMDA3MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjIwMDAwMDIwMDBGMDA3NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNjIxMDAwMDIwMDBGMDA3NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjIyMDAwMDIwMDBGMDA3NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjIzMDAwMDIwMDBGMDA3NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjI0MDAwMDIwMDBGMDA3ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjI1MDAwMDIwMDBGMDA3OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjI2MDAwMDIwMDBGMDA3QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjI3MDAwMDIwMDBGMDA3QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjI4MDAwMDIwMDBGMDA3QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjI5MDAwMDIwMDBGMDA3RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjJBMDAwMDIwMDBGMDA3RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjJCMDAwMDIwMDBGMDA3RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjJDMDAwMDIwMDBGMDA4MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjJEMDAwMDIwMDBGMDA4MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjJFMDAwMDIwMDBGMDA4MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjJGMDAwMDIwMDBGMDA4MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjMwMDAwMDIwMDBGMDA4NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNjMxMDAwMDIwMDBGMDA4NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjMyMDAwMDIwMDBGMDA4NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjMzMDAwMDIwMDBGMDA4NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjM0MDAwMDIwMDBGMDA4ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjM1MDAwMDIwMDBGMDA4OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjM2MDAwMDIwMDBGMDA4QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjM3MDAwMDIwMDBGMDA4QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjM4MDAwMDIwMDBGMDA4QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjM5MDAwMDIwMDBGMDA4RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjNBMDAwMDIwMDBGMDA4RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjNCMDAwMDIwMDBGMDA4RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjNDMDAwMDIwMDBGMDA5MDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjNEMDAwMDIwMDBGMDA5MTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjNFMDAwMDIwMDBGMDA5MjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjNGMDAwMDIwMDBGMDA5MzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjQwMDAwMDIwMDBGMDA5NDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNjQxMDAwMDIwMDBGMDA5NTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjQyMDAwMDIwMDBGMDA5NjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjQzMDAwMDIwMDBGMDA5NzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjQ0MDAwMDIwMDBGMDA5ODgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjQ1MDAwMDIwMDBGMDA5OTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjQ2MDAwMDIwMDBGMDA5QTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjQ3MDAwMDIwMDBGMDA5QjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjQ4MDAwMDIwMDBGMDA5QzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjQ5MDAwMDIwMDBGMDA5RDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjRBMDAwMDIwMDBGMDA5RTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjRCMDAwMDIwMDBGMDA5RjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjRDMDAwMDIwMDBGMDBBMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjREMDAwMDIwMDBGMDBBMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjRFMDAwMDIwMDBGMDBBMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjRGMDAwMDIwMDBGMDBBMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjUwMDAwMDIwMDBGMDBBNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNjUxMDAwMDIwMDBGMDBBNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjUyMDAwMDIwMDBGMDBBNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjUzMDAwMDIwMDBGMDBBNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjU0MDAwMDIwMDBGMDBBODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjU1MDAwMDIwMDBGMDBBOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjU2MDAwMDIwMDBGMDBBQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjU3MDAwMDIwMDBGMDBBQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjU4MDAwMDIwMDBGMDBBQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjU5MDAwMDIwMDBGMDBBRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjVBMDAwMDIwMDBGMDBBRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjVCMDAwMDIwMDBGMDBBRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjVDMDAwMDIwMDBGMDBCMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjVEMDAwMDIwMDBGMDBCMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjVFMDAwMDIwMDBGMDBCMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjVGMDAwMDIwMDBGMDBCMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjYwMDAwMDIwMDBGMDBCNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNjYxMDAwMDIwMDBGMDBCNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjYyMDAwMDIwMDBGMDBCNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjYzMDAwMDIwMDBGMDBCNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjY0MDAwMDIwMDBGMDBCODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjY1MDAwMDIwMDBGMDBCOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjY2MDAwMDIwMDBGMDBCQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjY3MDAwMDIwMDBGMDBCQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjY4MDAwMDIwMDBGMDBCQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjY5MDAwMDIwMDBGMDBCRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjZBMDAwMDIwMDBGMDBCRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjZCMDAwMDIwMDBGMDBCRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjZDMDAwMDIwMDBGMDBDMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjZEMDAwMDIwMDBGMDBDMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjZFMDAwMDIwMDBGMDBDMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjZGMDAwMDIwMDBGMDBDMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjcwMDAwMDIwMDBGMDBDNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjcxMDAwMDIwMDBGMDBDNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjcyMDAwMDIwMDBGMDBDNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjczMDAwMDIwMDBGMDBDNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjc0MDAwMDIwMDBGMDBDODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjc1MDAwMDIwMDBGMDBDOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjc2MDAwMDIwMDBGMDBDQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjc3MDAwMDIwMDBGMDBDQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjc4MDAwMDIwMDBGMDBDQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjc5MDAwMDIwMDBGMDBDRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjdBMDAwMDIwMDBGMDBDRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjdCMDAwMDIwMDBGMDBDRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjdDMDAwMDIwMDBGMDBEMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjdEMDAwMDIwMDBGMDBEMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjdFMDAwMDIwMDBGMDBEMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjdGMDAwMDIwMDBGMDBEMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNjgwMDAwMDIwMDBGMDBENDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNjgxMDAwMDIwMDBGMDBENTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjgyMDAwMDIwMDBGMDBENjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjgzMDAwMDIwMDBGMDBENzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjg0MDAwMDIwMDBGMDBEODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjg1MDAwMDIwMDBGMDBEOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjg2MDAwMDIwMDBGMDBEQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjg3MDAwMDIwMDBGMDBEQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjg4MDAwMDIwMDBGMDBEQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjg5MDAwMDIwMDBGMDBERDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjhBMDAwMDIwMDBGMDBERTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjhCMDAwMDIwMDBGMDBERjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjhDMDAwMDIwMDBGMDBFMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjhEMDAwMDIwMDBGMDBFMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjhFMDAwMDIwMDBGMDBFMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNjhGMDAwMDIwMDBGMDBFMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNjkwMDAwMDIwMDBGMDBFNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNjkxMDAwMDIwMDBGMDBFNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNjkyMDAwMDIwMDBGMDBFNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNjkzMDAwMDIwMDBGMDBFNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNjk0MDAwMDIwMDBGMDBFODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNjk1MDAwMDIwMDBGMDBFOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNjk2MDAwMDIwMDBGMDBFQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNjk3MDAwMDIwMDBGMDBFQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNjk4MDAwMDIwMDBGMDBFQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNjk5MDAwMDIwMDBGMDBFRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNjlBMDAwMDIwMDBGMDBFRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNjlCMDAwMDIwMDBGMDBFRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNjlDMDAwMDIwMDBGMDBGMDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNjlEMDAwMDIwMDBGMDBGMTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNjlFMDAwMDIwMDBGMDBGMjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNjlGMDAwMDIwMDBGMDBGMzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNkEwMDAwMDIwMDBGMDBGNDgzNzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkExMDAwMDIwMDBGMDBGNTgzNzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkEyMDAwMDIwMDBGMDBGNjgzNzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkEzMDAwMDIwMDBGMDBGNzgzNzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkE0MDAwMDIwMDBGMDBGODgzNzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNkE1MDAwMDIwMDBGMDBGOTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNkE2MDAwMDIwMDBGMDBGQTgzNzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNkE3MDAwMDIwMDBGMDBGQjgzNzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNkE4MDAwMDIwMDBGMDBGQzgzNzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNkE5MDAwMDIwMDBGMDBGRDgzNzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNkFBMDAwMDIwMDBGMDBGRTgzNzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNkFCMDAwMDIwMDBGMDBGRjgzNzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNkFDMDAwMDIwMDBGMDAwMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkFEMDAwMDIwMDBGMDAwMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkFFMDAwMDIwMDBGMDAwMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkFGMDAwMDIwMDBGMDAwMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkIwMDAwMDIwMDBGMDAwNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNkIxMDAwMDIwMDBGMDAwNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNkIyMDAwMDIwMDBGMDAwNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNkIzMDAwMDIwMDBGMDAwNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkI0MDAwMDIwMDBGMDAwODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkI1MDAwMDIwMDBGMDAwOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkI2MDAwMDIwMDBGMDAwQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkI3MDAwMDIwMDBGMDAwQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkI4MDAwMDIwMDBGMDAwQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkI5MDAwMDIwMDBGMDAwRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkJBMDAwMDIwMDBGMDAwRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkJCMDAwMDIwMDBGMDAwRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkJDMDAwMDIwMDBGMDAxMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkJEMDAwMDIwMDBGMDAxMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkJFMDAwMDIwMDBGMDAxMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkJGMDAwMDIwMDBGMDAxMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkMwMDAwMDIwMDBGMDAxNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNkMxMDAwMDIwMDBGMDAxNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNkMyMDAwMDIwMDBGMDAxNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkMzMDAwMDIwMDBGMDAxNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkM0MDAwMDIwMDBGMDAxODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkM1MDAwMDIwMDBGMDAxOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkM2MDAwMDIwMDBGMDAxQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkM3MDAwMDIwMDBGMDAxQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkM4MDAwMDIwMDBGMDAxQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkM5MDAwMDIwMDBGMDAxRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkNBMDAwMDIwMDBGMDAxRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkNCMDAwMDIwMDBGMDAxRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkNDMDAwMDIwMDBGMDAyMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkNEMDAwMDIwMDBGMDAyMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkNFMDAwMDIwMDBGMDAyMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkNGMDAwMDIwMDBGMDAyMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkQwMDAwMDIwMDBGMDAyNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNkQxMDAwMDIwMDBGMDAyNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkQyMDAwMDIwMDBGMDAyNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkQzMDAwMDIwMDBGMDAyNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkQ0MDAwMDIwMDBGMDAyODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkQ1MDAwMDIwMDBGMDAyOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkQ2MDAwMDIwMDBGMDAyQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkQ3MDAwMDIwMDBGMDAyQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkQ4MDAwMDIwMDBGMDAyQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkQ5MDAwMDIwMDBGMDAyRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkRBMDAwMDIwMDBGMDAyRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkRCMDAwMDIwMDBGMDAyRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkRDMDAwMDIwMDBGMDAzMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkREMDAwMDIwMDBGMDAzMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkRFMDAwMDIwMDBGMDAzMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkRGMDAwMDIwMDBGMDAzMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkUwMDAwMDIwMDBGMDAzNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNkUxMDAwMDIwMDBGMDAzNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkUyMDAwMDIwMDBGMDAzNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkUzMDAwMDIwMDBGMDAzNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkU0MDAwMDIwMDBGMDAzODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkU1MDAwMDIwMDBGMDAzOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkU2MDAwMDIwMDBGMDAzQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkU3MDAwMDIwMDBGMDAzQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkU4MDAwMDIwMDBGMDAzQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkU5MDAwMDIwMDBGMDAzRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkVBMDAwMDIwMDBGMDAzRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkVCMDAwMDIwMDBGMDAzRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkVDMDAwMDIwMDBGMDA0MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkVEMDAwMDIwMDBGMDA0MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkVFMDAwMDIwMDBGMDA0Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkVGMDAwMDIwMDBGMDA0Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNkYwMDAwMDIwMDBGMDA0NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNkYxMDAwMDIwMDBGMDA0NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNkYyMDAwMDIwMDBGMDA0Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNkYzMDAwMDIwMDBGMDA0Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNkY0MDAwMDIwMDBGMDA0ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNkY1MDAwMDIwMDBGMDA0OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNkY2MDAwMDIwMDBGMDA0QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNkY3MDAwMDIwMDBGMDA0Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNkY4MDAwMDIwMDBGMDA0Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNkY5MDAwMDIwMDBGMDA0RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNkZBMDAwMDIwMDBGMDA0RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNkZCMDAwMDIwMDBGMDA0Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNkZDMDAwMDIwMDBGMDA1MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNkZEMDAwMDIwMDBGMDA1MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNkZFMDAwMDIwMDBGMDA1Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNkZGMDAwMDIwMDBGMDA1Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzAwMDAwMDIwMDBGMDA1NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNzAxMDAwMDIwMDBGMDA1NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNzAyMDAwMDIwMDBGMDA1Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNzAzMDAwMDIwMDBGMDA1Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzA0MDAwMDIwMDBGMDA1ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzA1MDAwMDIwMDBGMDA1OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzA2MDAwMDIwMDBGMDA1QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzA3MDAwMDIwMDBGMDA1Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzA4MDAwMDIwMDBGMDA1Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzA5MDAwMDIwMDBGMDA1RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzBBMDAwMDIwMDBGMDA1RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzBCMDAwMDIwMDBGMDA1Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzBDMDAwMDIwMDBGMDA2MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzBEMDAwMDIwMDBGMDA2MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzBFMDAwMDIwMDBGMDA2Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzBGMDAwMDIwMDBGMDA2Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzEwMDAwMDIwMDBGMDA2NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNzExMDAwMDIwMDBGMDA2NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNzEyMDAwMDIwMDBGMDA2Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzEzMDAwMDIwMDBGMDA2Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzE0MDAwMDIwMDBGMDA2ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzE1MDAwMDIwMDBGMDA2OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzE2MDAwMDIwMDBGMDA2QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzE3MDAwMDIwMDBGMDA2Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzE4MDAwMDIwMDBGMDA2Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzE5MDAwMDIwMDBGMDA2RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzFBMDAwMDIwMDBGMDA2RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzFCMDAwMDIwMDBGMDA2Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzFDMDAwMDIwMDBGMDA3MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzFEMDAwMDIwMDBGMDA3MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzFFMDAwMDIwMDBGMDA3Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzFGMDAwMDIwMDBGMDA3Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzIwMDAwMDIwMDBGMDA3NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNzIxMDAwMDIwMDBGMDA3NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzIyMDAwMDIwMDBGMDA3Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzIzMDAwMDIwMDBGMDA3Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzI0MDAwMDIwMDBGMDA3ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzI1MDAwMDIwMDBGMDA3OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzI2MDAwMDIwMDBGMDA3QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzI3MDAwMDIwMDBGMDA3Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzI4MDAwMDIwMDBGMDA3Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzI5MDAwMDIwMDBGMDA3RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzJBMDAwMDIwMDBGMDA3RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzJCMDAwMDIwMDBGMDA3Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzJDMDAwMDIwMDBGMDA4MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzJEMDAwMDIwMDBGMDA4MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzJFMDAwMDIwMDBGMDA4Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzJGMDAwMDIwMDBGMDA4Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzMwMDAwMDIwMDBGMDA4NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNzMxMDAwMDIwMDBGMDA4NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzMyMDAwMDIwMDBGMDA4Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzMzMDAwMDIwMDBGMDA4Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzM0MDAwMDIwMDBGMDA4ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzM1MDAwMDIwMDBGMDA4OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzM2MDAwMDIwMDBGMDA4QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzM3MDAwMDIwMDBGMDA4Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzM4MDAwMDIwMDBGMDA4Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzM5MDAwMDIwMDBGMDA4RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzNBMDAwMDIwMDBGMDA4RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzNCMDAwMDIwMDBGMDA4Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzNDMDAwMDIwMDBGMDA5MDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzNEMDAwMDIwMDBGMDA5MTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzNFMDAwMDIwMDBGMDA5Mjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzNGMDAwMDIwMDBGMDA5Mzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzQwMDAwMDIwMDBGMDA5NDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNzQxMDAwMDIwMDBGMDA5NTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzQyMDAwMDIwMDBGMDA5Njg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzQzMDAwMDIwMDBGMDA5Nzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzQ0MDAwMDIwMDBGMDA5ODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzQ1MDAwMDIwMDBGMDA5OTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzQ2MDAwMDIwMDBGMDA5QTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzQ3MDAwMDIwMDBGMDA5Qjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzQ4MDAwMDIwMDBGMDA5Qzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzQ5MDAwMDIwMDBGMDA5RDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzRBMDAwMDIwMDBGMDA5RTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzRCMDAwMDIwMDBGMDA5Rjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzRDMDAwMDIwMDBGMDBBMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzREMDAwMDIwMDBGMDBBMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzRFMDAwMDIwMDBGMDBBMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzRGMDAwMDIwMDBGMDBBMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzUwMDAwMDIwMDBGMDBBNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNzUxMDAwMDIwMDBGMDBBNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzUyMDAwMDIwMDBGMDBBNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzUzMDAwMDIwMDBGMDBBNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzU0MDAwMDIwMDBGMDBBODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzU1MDAwMDIwMDBGMDBBOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzU2MDAwMDIwMDBGMDBBQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzU3MDAwMDIwMDBGMDBBQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzU4MDAwMDIwMDBGMDBBQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzU5MDAwMDIwMDBGMDBBRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzVBMDAwMDIwMDBGMDBBRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzVCMDAwMDIwMDBGMDBBRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzVDMDAwMDIwMDBGMDBCMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzVEMDAwMDIwMDBGMDBCMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzVFMDAwMDIwMDBGMDBCMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzVGMDAwMDIwMDBGMDBCMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzYwMDAwMDIwMDBGMDBCNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNzYxMDAwMDIwMDBGMDBCNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzYyMDAwMDIwMDBGMDBCNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzYzMDAwMDIwMDBGMDBCNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzY0MDAwMDIwMDBGMDBCODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzY1MDAwMDIwMDBGMDBCOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzY2MDAwMDIwMDBGMDBCQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzY3MDAwMDIwMDBGMDBCQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzY4MDAwMDIwMDBGMDBCQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzY5MDAwMDIwMDBGMDBCRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzZBMDAwMDIwMDBGMDBCRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzZCMDAwMDIwMDBGMDBCRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzZDMDAwMDIwMDBGMDBDMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzZEMDAwMDIwMDBGMDBDMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzZFMDAwMDIwMDBGMDBDMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzZGMDAwMDIwMDBGMDBDMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzcwMDAwMDIwMDBGMDBDNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNzcxMDAwMDIwMDBGMDBDNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzcyMDAwMDIwMDBGMDBDNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzczMDAwMDIwMDBGMDBDNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzc0MDAwMDIwMDBGMDBDODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzc1MDAwMDIwMDBGMDBDOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzc2MDAwMDIwMDBGMDBDQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzc3MDAwMDIwMDBGMDBDQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzc4MDAwMDIwMDBGMDBDQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzc5MDAwMDIwMDBGMDBDRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzdBMDAwMDIwMDBGMDBDRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzdCMDAwMDIwMDBGMDBDRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzdDMDAwMDIwMDBGMDBEMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzdEMDAwMDIwMDBGMDBEMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzdFMDAwMDIwMDBGMDBEMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzdGMDAwMDIwMDBGMDBEMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNzgwMDAwMDIwMDBGMDBENDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNzgxMDAwMDIwMDBGMDBENTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzgyMDAwMDIwMDBGMDBENjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzgzMDAwMDIwMDBGMDBENzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzg0MDAwMDIwMDBGMDBEODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzg1MDAwMDIwMDBGMDBEOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzg2MDAwMDIwMDBGMDBEQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzg3MDAwMDIwMDBGMDBEQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzg4MDAwMDIwMDBGMDBEQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzg5MDAwMDIwMDBGMDBERDg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzhBMDAwMDIwMDBGMDBERTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzhCMDAwMDIwMDBGMDBERjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzhDMDAwMDIwMDBGMDBFMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzhEMDAwMDIwMDBGMDBFMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzhFMDAwMDIwMDBGMDBFMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNzhGMDAwMDIwMDBGMDBFMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNzkwMDAwMDIwMDBGMDBFNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNzkxMDAwMDIwMDBGMDBFNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNzkyMDAwMDIwMDBGMDBFNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNzkzMDAwMDIwMDBGMDBFNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNzk0MDAwMDIwMDBGMDBFODg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNzk1MDAwMDIwMDBGMDBFOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNzk2MDAwMDIwMDBGMDBFQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNzk3MDAwMDIwMDBGMDBFQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNzk4MDAwMDIwMDBGMDBFQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNzk5MDAwMDIwMDBGMDBFRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNzlBMDAwMDIwMDBGMDBFRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNzlCMDAwMDIwMDBGMDBFRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNzlDMDAwMDIwMDBGMDBGMDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNzlEMDAwMDIwMDBGMDBGMTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNzlFMDAwMDIwMDBGMDBGMjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNzlGMDAwMDIwMDBGMDBGMzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwN0EwMDAwMDIwMDBGMDBGNDg0NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0ExMDAwMDIwMDBGMDBGNTg0NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0EyMDAwMDIwMDBGMDBGNjg0NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0EzMDAwMDIwMDBGMDBGNzg0NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0E0MDAwMDIwMDBGMDBGODg0NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwN0E1MDAwMDIwMDBGMDBGOTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwN0E2MDAwMDIwMDBGMDBGQTg0NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwN0E3MDAwMDIwMDBGMDBGQjg0NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwN0E4MDAwMDIwMDBGMDBGQzg0NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwN0E5MDAwMDIwMDBGMDBGRDg0NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwN0FBMDAwMDIwMDBGMDBGRTg0NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwN0FCMDAwMDIwMDBGMDBGRjg0NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwN0FDMDAwMDIwMDBGMDAwMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0FEMDAwMDIwMDBGMDAwMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0FFMDAwMDIwMDBGMDAwMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0FGMDAwMDIwMDBGMDAwMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0IwMDAwMDIwMDBGMDAwNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwN0IxMDAwMDIwMDBGMDAwNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwN0IyMDAwMDIwMDBGMDAwNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwN0IzMDAwMDIwMDBGMDAwNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0I0MDAwMDIwMDBGMDAwODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0I1MDAwMDIwMDBGMDAwOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0I2MDAwMDIwMDBGMDAwQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0I3MDAwMDIwMDBGMDAwQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0I4MDAwMDIwMDBGMDAwQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0I5MDAwMDIwMDBGMDAwRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0JBMDAwMDIwMDBGMDAwRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0JCMDAwMDIwMDBGMDAwRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0JDMDAwMDIwMDBGMDAxMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0JEMDAwMDIwMDBGMDAxMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0JFMDAwMDIwMDBGMDAxMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0JGMDAwMDIwMDBGMDAxMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0MwMDAwMDIwMDBGMDAxNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwN0MxMDAwMDIwMDBGMDAxNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwN0MyMDAwMDIwMDBGMDAxNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0MzMDAwMDIwMDBGMDAxNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0M0MDAwMDIwMDBGMDAxODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0M1MDAwMDIwMDBGMDAxOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0M2MDAwMDIwMDBGMDAxQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0M3MDAwMDIwMDBGMDAxQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0M4MDAwMDIwMDBGMDAxQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0M5MDAwMDIwMDBGMDAxRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0NBMDAwMDIwMDBGMDAxRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0NCMDAwMDIwMDBGMDAxRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0NDMDAwMDIwMDBGMDAyMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0NEMDAwMDIwMDBGMDAyMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0NFMDAwMDIwMDBGMDAyMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0NGMDAwMDIwMDBGMDAyMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0QwMDAwMDIwMDBGMDAyNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwN0QxMDAwMDIwMDBGMDAyNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0QyMDAwMDIwMDBGMDAyNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0QzMDAwMDIwMDBGMDAyNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0Q0MDAwMDIwMDBGMDAyODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0Q1MDAwMDIwMDBGMDAyOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0Q2MDAwMDIwMDBGMDAyQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0Q3MDAwMDIwMDBGMDAyQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0Q4MDAwMDIwMDBGMDAyQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0Q5MDAwMDIwMDBGMDAyRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0RBMDAwMDIwMDBGMDAyRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0RCMDAwMDIwMDBGMDAyRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0RDMDAwMDIwMDBGMDAzMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0REMDAwMDIwMDBGMDAzMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0RFMDAwMDIwMDBGMDAzMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0RGMDAwMDIwMDBGMDAzMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0UwMDAwMDIwMDBGMDAzNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwN0UxMDAwMDIwMDBGMDAzNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0UyMDAwMDIwMDBGMDAzNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0UzMDAwMDIwMDBGMDAzNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0U0MDAwMDIwMDBGMDAzODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0U1MDAwMDIwMDBGMDAzOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0U2MDAwMDIwMDBGMDAzQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0U3MDAwMDIwMDBGMDAzQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0U4MDAwMDIwMDBGMDAzQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0U5MDAwMDIwMDBGMDAzRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0VBMDAwMDIwMDBGMDAzRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0VCMDAwMDIwMDBGMDAzRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0VDMDAwMDIwMDBGMDA0MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0VEMDAwMDIwMDBGMDA0MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0VFMDAwMDIwMDBGMDA0Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0VGMDAwMDIwMDBGMDA0Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwN0YwMDAwMDIwMDBGMDA0NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwN0YxMDAwMDIwMDBGMDA0NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwN0YyMDAwMDIwMDBGMDA0Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwN0YzMDAwMDIwMDBGMDA0Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwN0Y0MDAwMDIwMDBGMDA0ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwN0Y1MDAwMDIwMDBGMDA0OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwN0Y2MDAwMDIwMDBGMDA0QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwN0Y3MDAwMDIwMDBGMDA0Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwN0Y4MDAwMDIwMDBGMDA0Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwN0Y5MDAwMDIwMDBGMDA0RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwN0ZBMDAwMDIwMDBGMDA0RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwN0ZCMDAwMDIwMDBGMDA0Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwN0ZDMDAwMDIwMDBGMDA1MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwN0ZEMDAwMDIwMDBGMDA1MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwN0ZFMDAwMDIwMDBGMDA1Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwN0ZGMDAwMDIwMDBGMDA1Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODAwMDAwMDIwMDBGMDA1NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwODAxMDAwMDIwMDBGMDA1NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwODAyMDAwMDIwMDBGMDA1Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwODAzMDAwMDIwMDBGMDA1Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODA0MDAwMDIwMDBGMDA1ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODA1MDAwMDIwMDBGMDA1OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODA2MDAwMDIwMDBGMDA1QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODA3MDAwMDIwMDBGMDA1Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODA4MDAwMDIwMDBGMDA1Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODA5MDAwMDIwMDBGMDA1RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODBBMDAwMDIwMDBGMDA1RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODBCMDAwMDIwMDBGMDA1Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODBDMDAwMDIwMDBGMDA2MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODBEMDAwMDIwMDBGMDA2MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODBFMDAwMDIwMDBGMDA2Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODBGMDAwMDIwMDBGMDA2Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODEwMDAwMDIwMDBGMDA2NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwODExMDAwMDIwMDBGMDA2NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwODEyMDAwMDIwMDBGMDA2Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODEzMDAwMDIwMDBGMDA2Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODE0MDAwMDIwMDBGMDA2ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODE1MDAwMDIwMDBGMDA2OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODE2MDAwMDIwMDBGMDA2QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODE3MDAwMDIwMDBGMDA2Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODE4MDAwMDIwMDBGMDA2Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODE5MDAwMDIwMDBGMDA2RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODFBMDAwMDIwMDBGMDA2RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODFCMDAwMDIwMDBGMDA2Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODFDMDAwMDIwMDBGMDA3MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODFEMDAwMDIwMDBGMDA3MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODFFMDAwMDIwMDBGMDA3Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODFGMDAwMDIwMDBGMDA3Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODIwMDAwMDIwMDBGMDA3NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwODIxMDAwMDIwMDBGMDA3NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODIyMDAwMDIwMDBGMDA3Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODIzMDAwMDIwMDBGMDA3Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODI0MDAwMDIwMDBGMDA3ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODI1MDAwMDIwMDBGMDA3OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODI2MDAwMDIwMDBGMDA3QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODI3MDAwMDIwMDBGMDA3Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODI4MDAwMDIwMDBGMDA3Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODI5MDAwMDIwMDBGMDA3RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODJBMDAwMDIwMDBGMDA3RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODJCMDAwMDIwMDBGMDA3Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODJDMDAwMDIwMDBGMDA4MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODJEMDAwMDIwMDBGMDA4MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODJFMDAwMDIwMDBGMDA4Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODJGMDAwMDIwMDBGMDA4Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODMwMDAwMDIwMDBGMDA4NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwODMxMDAwMDIwMDBGMDA4NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODMyMDAwMDIwMDBGMDA4Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODMzMDAwMDIwMDBGMDA4Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODM0MDAwMDIwMDBGMDA4ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODM1MDAwMDIwMDBGMDA4OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODM2MDAwMDIwMDBGMDA4QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODM3MDAwMDIwMDBGMDA4Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODM4MDAwMDIwMDBGMDA4Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODM5MDAwMDIwMDBGMDA4RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODNBMDAwMDIwMDBGMDA4RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODNCMDAwMDIwMDBGMDA4Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODNDMDAwMDIwMDBGMDA5MDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODNEMDAwMDIwMDBGMDA5MTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODNFMDAwMDIwMDBGMDA5Mjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODNGMDAwMDIwMDBGMDA5Mzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODQwMDAwMDIwMDBGMDA5NDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwODQxMDAwMDIwMDBGMDA5NTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODQyMDAwMDIwMDBGMDA5Njg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODQzMDAwMDIwMDBGMDA5Nzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODQ0MDAwMDIwMDBGMDA5ODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODQ1MDAwMDIwMDBGMDA5OTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODQ2MDAwMDIwMDBGMDA5QTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODQ3MDAwMDIwMDBGMDA5Qjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODQ4MDAwMDIwMDBGMDA5Qzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODQ5MDAwMDIwMDBGMDA5RDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODRBMDAwMDIwMDBGMDA5RTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODRCMDAwMDIwMDBGMDA5Rjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODRDMDAwMDIwMDBGMDBBMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODREMDAwMDIwMDBGMDBBMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODRFMDAwMDIwMDBGMDBBMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODRGMDAwMDIwMDBGMDBBMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODUwMDAwMDIwMDBGMDBBNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwODUxMDAwMDIwMDBGMDBBNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODUyMDAwMDIwMDBGMDBBNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODUzMDAwMDIwMDBGMDBBNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODU0MDAwMDIwMDBGMDBBODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODU1MDAwMDIwMDBGMDBBOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODU2MDAwMDIwMDBGMDBBQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODU3MDAwMDIwMDBGMDBBQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODU4MDAwMDIwMDBGMDBBQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODU5MDAwMDIwMDBGMDBBRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODVBMDAwMDIwMDBGMDBBRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODVCMDAwMDIwMDBGMDBBRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODVDMDAwMDIwMDBGMDBCMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODVEMDAwMDIwMDBGMDBCMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODVFMDAwMDIwMDBGMDBCMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODVGMDAwMDIwMDBGMDBCMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODYwMDAwMDIwMDBGMDBCNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwODYxMDAwMDIwMDBGMDBCNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODYyMDAwMDIwMDBGMDBCNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODYzMDAwMDIwMDBGMDBCNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODY0MDAwMDIwMDBGMDBCODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODY1MDAwMDIwMDBGMDBCOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODY2MDAwMDIwMDBGMDBCQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODY3MDAwMDIwMDBGMDBCQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODY4MDAwMDIwMDBGMDBCQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODY5MDAwMDIwMDBGMDBCRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODZBMDAwMDIwMDBGMDBCRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODZCMDAwMDIwMDBGMDBCRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODZDMDAwMDIwMDBGMDBDMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODZEMDAwMDIwMDBGMDBDMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODZFMDAwMDIwMDBGMDBDMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODZGMDAwMDIwMDBGMDBDMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODcwMDAwMDIwMDBGMDBDNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwODcxMDAwMDIwMDBGMDBDNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODcyMDAwMDIwMDBGMDBDNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODczMDAwMDIwMDBGMDBDNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODc0MDAwMDIwMDBGMDBDODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODc1MDAwMDIwMDBGMDBDOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODc2MDAwMDIwMDBGMDBDQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODc3MDAwMDIwMDBGMDBDQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODc4MDAwMDIwMDBGMDBDQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODc5MDAwMDIwMDBGMDBDRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODdBMDAwMDIwMDBGMDBDRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODdCMDAwMDIwMDBGMDBDRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODdDMDAwMDIwMDBGMDBEMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODdEMDAwMDIwMDBGMDBEMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODdFMDAwMDIwMDBGMDBEMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODdGMDAwMDIwMDBGMDBEMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwODgwMDAwMDIwMDBGMDBENDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwODgxMDAwMDIwMDBGMDBENTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODgyMDAwMDIwMDBGMDBENjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODgzMDAwMDIwMDBGMDBENzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODg0MDAwMDIwMDBGMDBEODg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODg1MDAwMDIwMDBGMDBEOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODg2MDAwMDIwMDBGMDBEQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODg3MDAwMDIwMDBGMDBEQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODg4MDAwMDIwMDBGMDBEQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODg5MDAwMDIwMDBGMDBERDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODhBMDAwMDIwMDBGMDBERTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODhCMDAwMDIwMDBGMDBERjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODhDMDAwMDIwMDBGMDBFMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODhEMDAwMDIwMDBGMDBFMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODhFMDAwMDIwMDBGMDBFMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwODhGMDAwMDIwMDBGMDBFMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwODkwMDAwMDIwMDBGMDBFNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwODkxMDAwMDIwMDBGMDBFNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwODkyMDAwMDIwMDBGMDBFNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwODkzMDAwMDIwMDBGMDBFNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwODk0MDAwMDIwMDBGMDBFODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwODk1MDAwMDIwMDBGMDBFOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwODk2MDAwMDIwMDBGMDBFQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwODk3MDAwMDIwMDBGMDBFQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwODk4MDAwMDIwMDBGMDBFQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwODk5MDAwMDIwMDBGMDBFRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwODlBMDAwMDIwMDBGMDBFRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwODlCMDAwMDIwMDBGMDBFRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwODlDMDAwMDIwMDBGMDBGMDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwODlEMDAwMDIwMDBGMDBGMTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwODlFMDAwMDIwMDBGMDBGMjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwODlGMDAwMDIwMDBGMDBGMzg1NzEwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwOEEwMDAwMDIwMDBGMDBGNDg1NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEExMDAwMDIwMDBGMDBGNTg1NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEEyMDAwMDIwMDBGMDBGNjg1NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEEzMDAwMDIwMDBGMDBGNzg1NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEE0MDAwMDIwMDBGMDBGODg1NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOEE1MDAwMDIwMDBGMDBGOTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOEE2MDAwMDIwMDBGMDBGQTg1NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOEE3MDAwMDIwMDBGMDBGQjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOEE4MDAwMDIwMDBGMDBGQzg1NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOEE5MDAwMDIwMDBGMDBGRDg1NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOEFBMDAwMDIwMDBGMDBGRTg1NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOEFCMDAwMDIwMDBGMDBGRjg1NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOEFDMDAwMDIwMDBGMDAwMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEFEMDAwMDIwMDBGMDAwMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEFFMDAwMDIwMDBGMDAwMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEFGMDAwMDIwMDBGMDAwMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEIwMDAwMDIwMDBGMDAwNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwOEIxMDAwMDIwMDBGMDAwNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwOEIyMDAwMDIwMDBGMDAwNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOEIzMDAwMDIwMDBGMDAwNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEI0MDAwMDIwMDBGMDAwODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEI1MDAwMDIwMDBGMDAwOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEI2MDAwMDIwMDBGMDAwQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEI3MDAwMDIwMDBGMDAwQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEI4MDAwMDIwMDBGMDAwQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEI5MDAwMDIwMDBGMDAwRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEJBMDAwMDIwMDBGMDAwRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEJCMDAwMDIwMDBGMDAwRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEJDMDAwMDIwMDBGMDAxMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEJEMDAwMDIwMDBGMDAxMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEJFMDAwMDIwMDBGMDAxMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEJGMDAwMDIwMDBGMDAxMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEMwMDAwMDIwMDBGMDAxNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwOEMxMDAwMDIwMDBGMDAxNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOEMyMDAwMDIwMDBGMDAxNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEMzMDAwMDIwMDBGMDAxNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEM0MDAwMDIwMDBGMDAxODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEM1MDAwMDIwMDBGMDAxOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEM2MDAwMDIwMDBGMDAxQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEM3MDAwMDIwMDBGMDAxQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEM4MDAwMDIwMDBGMDAxQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEM5MDAwMDIwMDBGMDAxRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOENBMDAwMDIwMDBGMDAxRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOENCMDAwMDIwMDBGMDAxRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOENDMDAwMDIwMDBGMDAyMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOENEMDAwMDIwMDBGMDAyMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOENFMDAwMDIwMDBGMDAyMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOENGMDAwMDIwMDBGMDAyMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEQwMDAwMDIwMDBGMDAyNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOEQxMDAwMDIwMDBGMDAyNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEQyMDAwMDIwMDBGMDAyNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEQzMDAwMDIwMDBGMDAyNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEQ0MDAwMDIwMDBGMDAyODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEQ1MDAwMDIwMDBGMDAyOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEQ2MDAwMDIwMDBGMDAyQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEQ3MDAwMDIwMDBGMDAyQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEQ4MDAwMDIwMDBGMDAyQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEQ5MDAwMDIwMDBGMDAyRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOERBMDAwMDIwMDBGMDAyRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOERCMDAwMDIwMDBGMDAyRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOERDMDAwMDIwMDBGMDAzMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEREMDAwMDIwMDBGMDAzMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOERFMDAwMDIwMDBGMDAzMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOERGMDAwMDIwMDBGMDAzMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEUwMDAwMDIwMDBGMDAzNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOEUxMDAwMDIwMDBGMDAzNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEUyMDAwMDIwMDBGMDAzNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEUzMDAwMDIwMDBGMDAzNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEU0MDAwMDIwMDBGMDAzODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEU1MDAwMDIwMDBGMDAzOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEU2MDAwMDIwMDBGMDAzQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEU3MDAwMDIwMDBGMDAzQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEU4MDAwMDIwMDBGMDAzQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEU5MDAwMDIwMDBGMDAzRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEVBMDAwMDIwMDBGMDAzRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEVCMDAwMDIwMDBGMDAzRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEVDMDAwMDIwMDBGMDA0MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEVEMDAwMDIwMDBGMDA0MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEVFMDAwMDIwMDBGMDA0Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEVGMDAwMDIwMDBGMDA0Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOEYwMDAwMDIwMDBGMDA0NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEYxMDAwMDIwMDBGMDA0NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOEYyMDAwMDIwMDBGMDA0Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOEYzMDAwMDIwMDBGMDA0Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOEY0MDAwMDIwMDBGMDA0ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOEY1MDAwMDIwMDBGMDA0OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOEY2MDAwMDIwMDBGMDA0QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOEY3MDAwMDIwMDBGMDA0Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOEY4MDAwMDIwMDBGMDA0Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOEY5MDAwMDIwMDBGMDA0RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOEZBMDAwMDIwMDBGMDA0RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOEZCMDAwMDIwMDBGMDA0Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOEZDMDAwMDIwMDBGMDA1MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOEZEMDAwMDIwMDBGMDA1MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOEZFMDAwMDIwMDBGMDA1Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOEZGMDAwMDIwMDBGMDA1Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTAwMDAwMDIwMDBGMDA1NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOTAxMDAwMDIwMDBGMDA1NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOTAyMDAwMDIwMDBGMDA1Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOTAzMDAwMDIwMDBGMDA1Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTA0MDAwMDIwMDBGMDA1ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTA1MDAwMDIwMDBGMDA1OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTA2MDAwMDIwMDBGMDA1QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTA3MDAwMDIwMDBGMDA1Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTA4MDAwMDIwMDBGMDA1Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTA5MDAwMDIwMDBGMDA1RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTBBMDAwMDIwMDBGMDA1RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTBCMDAwMDIwMDBGMDA1Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTBDMDAwMDIwMDBGMDA2MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTBEMDAwMDIwMDBGMDA2MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTBFMDAwMDIwMDBGMDA2Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTBGMDAwMDIwMDBGMDA2Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTEwMDAwMDIwMDBGMDA2NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOTExMDAwMDIwMDBGMDA2NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOTEyMDAwMDIwMDBGMDA2Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTEzMDAwMDIwMDBGMDA2Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTE0MDAwMDIwMDBGMDA2ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTE1MDAwMDIwMDBGMDA2OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTE2MDAwMDIwMDBGMDA2QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTE3MDAwMDIwMDBGMDA2Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTE4MDAwMDIwMDBGMDA2Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTE5MDAwMDIwMDBGMDA2RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTFBMDAwMDIwMDBGMDA2RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTFCMDAwMDIwMDBGMDA2Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTFDMDAwMDIwMDBGMDA3MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTFEMDAwMDIwMDBGMDA3MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTFFMDAwMDIwMDBGMDA3Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTFGMDAwMDIwMDBGMDA3Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTIwMDAwMDIwMDBGMDA3NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOTIxMDAwMDIwMDBGMDA3NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTIyMDAwMDIwMDBGMDA3Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTIzMDAwMDIwMDBGMDA3Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTI0MDAwMDIwMDBGMDA3ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTI1MDAwMDIwMDBGMDA3OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTI2MDAwMDIwMDBGMDA3QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTI3MDAwMDIwMDBGMDA3Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTI4MDAwMDIwMDBGMDA3Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTI5MDAwMDIwMDBGMDA3RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTJBMDAwMDIwMDBGMDA3RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTJCMDAwMDIwMDBGMDA3Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTJDMDAwMDIwMDBGMDA4MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTJEMDAwMDIwMDBGMDA4MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTJFMDAwMDIwMDBGMDA4Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTJGMDAwMDIwMDBGMDA4Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTMwMDAwMDIwMDBGMDA4NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOTMxMDAwMDIwMDBGMDA4NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTMyMDAwMDIwMDBGMDA4Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTMzMDAwMDIwMDBGMDA4Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTM0MDAwMDIwMDBGMDA4ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTM1MDAwMDIwMDBGMDA4OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTM2MDAwMDIwMDBGMDA4QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTM3MDAwMDIwMDBGMDA4Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTM4MDAwMDIwMDBGMDA4Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTM5MDAwMDIwMDBGMDA4RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTNBMDAwMDIwMDBGMDA4RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTNCMDAwMDIwMDBGMDA4Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTNDMDAwMDIwMDBGMDA5MDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTNEMDAwMDIwMDBGMDA5MTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTNFMDAwMDIwMDBGMDA5Mjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTNGMDAwMDIwMDBGMDA5Mzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTQwMDAwMDIwMDBGMDA5NDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOTQxMDAwMDIwMDBGMDA5NTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTQyMDAwMDIwMDBGMDA5Njg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTQzMDAwMDIwMDBGMDA5Nzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTQ0MDAwMDIwMDBGMDA5ODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTQ1MDAwMDIwMDBGMDA5OTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTQ2MDAwMDIwMDBGMDA5QTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTQ3MDAwMDIwMDBGMDA5Qjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTQ4MDAwMDIwMDBGMDA5Qzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTQ5MDAwMDIwMDBGMDA5RDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTRBMDAwMDIwMDBGMDA5RTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTRCMDAwMDIwMDBGMDA5Rjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTRDMDAwMDIwMDBGMDBBMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTREMDAwMDIwMDBGMDBBMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTRFMDAwMDIwMDBGMDBBMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTRGMDAwMDIwMDBGMDBBMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTUwMDAwMDIwMDBGMDBBNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOTUxMDAwMDIwMDBGMDBBNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTUyMDAwMDIwMDBGMDBBNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTUzMDAwMDIwMDBGMDBBNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTU0MDAwMDIwMDBGMDBBODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTU1MDAwMDIwMDBGMDBBOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTU2MDAwMDIwMDBGMDBBQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTU3MDAwMDIwMDBGMDBBQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTU4MDAwMDIwMDBGMDBBQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTU5MDAwMDIwMDBGMDBBRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTVBMDAwMDIwMDBGMDBBRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTVCMDAwMDIwMDBGMDBBRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTVDMDAwMDIwMDBGMDBCMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTVEMDAwMDIwMDBGMDBCMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTVFMDAwMDIwMDBGMDBCMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTVGMDAwMDIwMDBGMDBCMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTYwMDAwMDIwMDBGMDBCNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOTYxMDAwMDIwMDBGMDBCNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTYyMDAwMDIwMDBGMDBCNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTYzMDAwMDIwMDBGMDBCNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTY0MDAwMDIwMDBGMDBCODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTY1MDAwMDIwMDBGMDBCOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTY2MDAwMDIwMDBGMDBCQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTY3MDAwMDIwMDBGMDBCQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTY4MDAwMDIwMDBGMDBCQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTY5MDAwMDIwMDBGMDBCRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTZBMDAwMDIwMDBGMDBCRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTZCMDAwMDIwMDBGMDBCRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTZDMDAwMDIwMDBGMDBDMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTZEMDAwMDIwMDBGMDBDMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTZFMDAwMDIwMDBGMDBDMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTZGMDAwMDIwMDBGMDBDMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOTcwMDAwMDIwMDBGMDBDNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOTcxMDAwMDIwMDBGMDBDNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTcyMDAwMDIwMDBGMDBDNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTczMDAwMDIwMDBGMDBDNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTc0MDAwMDIwMDBGMDBDODg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTc1MDAwMDIwMDBGMDBDOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTc2MDAwMDIwMDBGMDBDQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTc3MDAwMDIwMDBGMDBDQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTc4MDAwMDIwMDBGMDBDQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTc5MDAwMDIwMDBGMDBDRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTdBMDAwMDIwMDBGMDBDRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTdCMDAwMDIwMDBGMDBDRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTdDMDAwMDIwMDBGMDBEMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTdEMDAwMDIwMDBGMDBEMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTdFMDAwMDIwMDBGMDBEMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOTdGMDAwMDIwMDBGMDBEMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwOTgwMDAwMDIwMDBGMDBENDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOTgxMDAwMDIwMDBGMDBENTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTgyMDAwMDIwMDBGMDBENjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTgzMDAwMDIwMDBGMDBENzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTg0MDAwMDIwMDBGMDBEODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTg1MDAwMDIwMDBGMDBEOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTg2MDAwMDIwMDBGMDBEQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTg3MDAwMDIwMDBGMDBEQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTg4MDAwMDIwMDBGMDBEQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTg5MDAwMDIwMDBGMDBERDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOThBMDAwMDIwMDBGMDBERTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOThCMDAwMDIwMDBGMDBERjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOThDMDAwMDIwMDBGMDBFMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOThEMDAwMDIwMDBGMDBFMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOThFMDAwMDIwMDBGMDBFMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwOThGMDAwMDIwMDBGMDBFMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwOTkwMDAwMDIwMDBGMDBFNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOTkxMDAwMDIwMDBGMDBFNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOTkyMDAwMDIwMDBGMDBFNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOTkzMDAwMDIwMDBGMDBFNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOTk0MDAwMDIwMDBGMDBFODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOTk1MDAwMDIwMDBGMDBFOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOTk2MDAwMDIwMDBGMDBFQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOTk3MDAwMDIwMDBGMDBFQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOTk4MDAwMDIwMDBGMDBFQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOTk5MDAwMDIwMDBGMDBFRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOTlBMDAwMDIwMDBGMDBFRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOTlCMDAwMDIwMDBGMDBFRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOTlDMDAwMDIwMDBGMDBGMDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOTlEMDAwMDIwMDBGMDBGMTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwOTlFMDAwMDIwMDBGMDBGMjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwOTlGMDAwMDIwMDBGMDBGMzg2NzEwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwOUEwMDAwMDIwMDBGMDBGNDg2NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUExMDAwMDIwMDBGMDBGNTg2NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUEyMDAwMDIwMDBGMDBGNjg2NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUEzMDAwMDIwMDBGMDBGNzg2NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUE0MDAwMDIwMDBGMDBGODg2NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOUE1MDAwMDIwMDBGMDBGOTg2NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwOUE2MDAwMDIwMDBGMDBGQTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwOUE3MDAwMDIwMDBGMDBGQjg2NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwOUE4MDAwMDIwMDBGMDBGQzg2NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwOUE5MDAwMDIwMDBGMDBGRDg2NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwOUFBMDAwMDIwMDBGMDBGRTg2NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwOUFCMDAwMDIwMDBGMDBGRjg2NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwOUFDMDAwMDIwMDBGMDAwMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUFEMDAwMDIwMDBGMDAwMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUFFMDAwMDIwMDBGMDAwMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUFGMDAwMDIwMDBGMDAwMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUIwMDAwMDIwMDBGMDAwNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwOUIxMDAwMDIwMDBGMDAwNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOUIyMDAwMDIwMDBGMDAwNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOUIzMDAwMDIwMDBGMDAwNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUI0MDAwMDIwMDBGMDAwODg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUI1MDAwMDIwMDBGMDAwOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUI2MDAwMDIwMDBGMDAwQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUI3MDAwMDIwMDBGMDAwQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUI4MDAwMDIwMDBGMDAwQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUI5MDAwMDIwMDBGMDAwRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUJBMDAwMDIwMDBGMDAwRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUJCMDAwMDIwMDBGMDAwRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUJDMDAwMDIwMDBGMDAxMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUJEMDAwMDIwMDBGMDAxMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUJFMDAwMDIwMDBGMDAxMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUJGMDAwMDIwMDBGMDAxMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUMwMDAwMDIwMDBGMDAxNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwOUMxMDAwMDIwMDBGMDAxNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOUMyMDAwMDIwMDBGMDAxNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUMzMDAwMDIwMDBGMDAxNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUM0MDAwMDIwMDBGMDAxODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUM1MDAwMDIwMDBGMDAxOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUM2MDAwMDIwMDBGMDAxQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUM3MDAwMDIwMDBGMDAxQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUM4MDAwMDIwMDBGMDAxQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUM5MDAwMDIwMDBGMDAxRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUNBMDAwMDIwMDBGMDAxRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUNCMDAwMDIwMDBGMDAxRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUNDMDAwMDIwMDBGMDAyMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUNEMDAwMDIwMDBGMDAyMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUNFMDAwMDIwMDBGMDAyMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUNGMDAwMDIwMDBGMDAyMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUQwMDAwMDIwMDBGMDAyNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwOUQxMDAwMDIwMDBGMDAyNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUQyMDAwMDIwMDBGMDAyNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUQzMDAwMDIwMDBGMDAyNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUQ0MDAwMDIwMDBGMDAyODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUQ1MDAwMDIwMDBGMDAyOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUQ2MDAwMDIwMDBGMDAyQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUQ3MDAwMDIwMDBGMDAyQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUQ4MDAwMDIwMDBGMDAyQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUQ5MDAwMDIwMDBGMDAyRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOURBMDAwMDIwMDBGMDAyRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOURCMDAwMDIwMDBGMDAyRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOURDMDAwMDIwMDBGMDAzMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUREMDAwMDIwMDBGMDAzMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOURFMDAwMDIwMDBGMDAzMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOURGMDAwMDIwMDBGMDAzMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUUwMDAwMDIwMDBGMDAzNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOUUxMDAwMDIwMDBGMDAzNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUUyMDAwMDIwMDBGMDAzNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUUzMDAwMDIwMDBGMDAzNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUU0MDAwMDIwMDBGMDAzODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUU1MDAwMDIwMDBGMDAzOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUU2MDAwMDIwMDBGMDAzQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUU3MDAwMDIwMDBGMDAzQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUU4MDAwMDIwMDBGMDAzQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUU5MDAwMDIwMDBGMDAzRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUVBMDAwMDIwMDBGMDAzRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUVCMDAwMDIwMDBGMDAzRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUVDMDAwMDIwMDBGMDA0MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUVEMDAwMDIwMDBGMDA0MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUVFMDAwMDIwMDBGMDA0Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUVGMDAwMDIwMDBGMDA0Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOUYwMDAwMDIwMDBGMDA0NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwOUYxMDAwMDIwMDBGMDA0NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUYyMDAwMDIwMDBGMDA0Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwOUYzMDAwMDIwMDBGMDA0Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwOUY0MDAwMDIwMDBGMDA0ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwOUY1MDAwMDIwMDBGMDA0OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwOUY2MDAwMDIwMDBGMDA0QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwOUY3MDAwMDIwMDBGMDA0Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwOUY4MDAwMDIwMDBGMDA0Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwOUY5MDAwMDIwMDBGMDA0RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwOUZBMDAwMDIwMDBGMDA0RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwOUZCMDAwMDIwMDBGMDA0Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwOUZDMDAwMDIwMDBGMDA1MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwOUZEMDAwMDIwMDBGMDA1MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwOUZFMDAwMDIwMDBGMDA1Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwOUZGMDAwMDIwMDBGMDA1Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTAwMDAwMDIwMDBGMDA1NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQTAxMDAwMDIwMDBGMDA1NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQTAyMDAwMDIwMDBGMDA1Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQTAzMDAwMDIwMDBGMDA1Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTA0MDAwMDIwMDBGMDA1ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTA1MDAwMDIwMDBGMDA1OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTA2MDAwMDIwMDBGMDA1QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTA3MDAwMDIwMDBGMDA1Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTA4MDAwMDIwMDBGMDA1Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTA5MDAwMDIwMDBGMDA1RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTBBMDAwMDIwMDBGMDA1RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTBCMDAwMDIwMDBGMDA1Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTBDMDAwMDIwMDBGMDA2MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTBEMDAwMDIwMDBGMDA2MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTBFMDAwMDIwMDBGMDA2Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTBGMDAwMDIwMDBGMDA2Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTEwMDAwMDIwMDBGMDA2NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQTExMDAwMDIwMDBGMDA2NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQTEyMDAwMDIwMDBGMDA2Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTEzMDAwMDIwMDBGMDA2Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTE0MDAwMDIwMDBGMDA2ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTE1MDAwMDIwMDBGMDA2OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTE2MDAwMDIwMDBGMDA2QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTE3MDAwMDIwMDBGMDA2Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTE4MDAwMDIwMDBGMDA2Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTE5MDAwMDIwMDBGMDA2RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTFBMDAwMDIwMDBGMDA2RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTFCMDAwMDIwMDBGMDA2Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTFDMDAwMDIwMDBGMDA3MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTFEMDAwMDIwMDBGMDA3MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTFFMDAwMDIwMDBGMDA3Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTFGMDAwMDIwMDBGMDA3Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTIwMDAwMDIwMDBGMDA3NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQTIxMDAwMDIwMDBGMDA3NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTIyMDAwMDIwMDBGMDA3Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTIzMDAwMDIwMDBGMDA3Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTI0MDAwMDIwMDBGMDA3ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTI1MDAwMDIwMDBGMDA3OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTI2MDAwMDIwMDBGMDA3QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTI3MDAwMDIwMDBGMDA3Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTI4MDAwMDIwMDBGMDA3Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTI5MDAwMDIwMDBGMDA3RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTJBMDAwMDIwMDBGMDA3RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTJCMDAwMDIwMDBGMDA3Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTJDMDAwMDIwMDBGMDA4MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTJEMDAwMDIwMDBGMDA4MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTJFMDAwMDIwMDBGMDA4Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTJGMDAwMDIwMDBGMDA4Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTMwMDAwMDIwMDBGMDA4NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQTMxMDAwMDIwMDBGMDA4NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTMyMDAwMDIwMDBGMDA4Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTMzMDAwMDIwMDBGMDA4Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTM0MDAwMDIwMDBGMDA4ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTM1MDAwMDIwMDBGMDA4OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTM2MDAwMDIwMDBGMDA4QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTM3MDAwMDIwMDBGMDA4Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTM4MDAwMDIwMDBGMDA4Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTM5MDAwMDIwMDBGMDA4RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTNBMDAwMDIwMDBGMDA4RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTNCMDAwMDIwMDBGMDA4Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTNDMDAwMDIwMDBGMDA5MDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTNEMDAwMDIwMDBGMDA5MTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTNFMDAwMDIwMDBGMDA5Mjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTNGMDAwMDIwMDBGMDA5Mzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQTQwMDAwMDIwMDBGMDA5NDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQTQxMDAwMDIwMDBGMDA5NTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTQyMDAwMDIwMDBGMDA5Njg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTQzMDAwMDIwMDBGMDA5Nzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTQ0MDAwMDIwMDBGMDA5ODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTQ1MDAwMDIwMDBGMDA5OTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTQ2MDAwMDIwMDBGMDA5QTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTQ3MDAwMDIwMDBGMDA5Qjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTQ4MDAwMDIwMDBGMDA5Qzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTQ5MDAwMDIwMDBGMDA5RDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTRBMDAwMDIwMDBGMDA5RTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTRCMDAwMDIwMDBGMDA5Rjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTRDMDAwMDIwMDBGMDBBMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTREMDAwMDIwMDBGMDBBMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTRFMDAwMDIwMDBGMDBBMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQTRGMDAwMDIwMDBGMDBBMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQTUwMDAwMDIwMDBGMDBBNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQTUxMDAwMDIwMDBGMDBBNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTUyMDAwMDIwMDBGMDBBNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTUzMDAwMDIwMDBGMDBBNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTU0MDAwMDIwMDBGMDBBODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTU1MDAwMDIwMDBGMDBBOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTU2MDAwMDIwMDBGMDBBQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTU3MDAwMDIwMDBGMDBBQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTU4MDAwMDIwMDBGMDBBQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTU5MDAwMDIwMDBGMDBBRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTVBMDAwMDIwMDBGMDBBRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTVCMDAwMDIwMDBGMDBBRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTVDMDAwMDIwMDBGMDBCMDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTVEMDAwMDIwMDBGMDBCMTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQTVFMDAwMDIwMDBGMDBCMjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQTVGMDAwMDIwMDBGMDBCMzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQTYwMDAwMDIwMDBGMDBCNDg3NzEwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQTYxMDAwMDIwMDBGMDBCNTg3NzEwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTYyMDAwMDIwMDBGMDBCNjg3NzEwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTYzMDAwMDIwMDBGMDBCNzg3NzEwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTY0MDAwMDIwMDBGMDBCODg3NzEwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTY1MDAwMDIwMDBGMDBCOTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTY2MDAwMDIwMDBGMDBCQTg3NzEwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTY3MDAwMDIwMDBGMDBCQjg3NzEwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQTY4MDAwMDIwMDBGMDBCQzg3NzEwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQTY5MDAwMDIwMDBGMDBCRDg3NzEwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQTZBMDAwMDIwMDBGMDBCRTg3NzEwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQTZCMDAwMDIwMDBGMDBCRjg3NzEwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQTZDMDAwMDIwMDBGMDBDMDg3NzEwMDc5MDAwMDAwNzY5MDYwRkRFNQorOjEwQTZEMDAwMDIwMDBGMDBDMTg3NzEwMDNEMDAwMDAwNkYwMDgwRjc4RAorOjEwQTZFMDAwMDIwMDBGMDBDMjg3NzEwMDNEMDAwMDAwNkYwMDgwRjc3QworOjEwQTZGMDAwMDIwMDBGMDBDMzg3NzEwMDNEMDAwMDAwNkYwMDgwRjc2QgorOjEwQTcwMDAwMDIwMDBGMDBDNDg3NzE4MDNEMDAwMDAwNkYwMDgwRjdEOQorOjAwMDAwMDAxRkYKKy8qIExvYWRpbmcgRmlybXdhcmUgKi8KKy8qIElOVF9NRU0gVmVyICovCisgKiBUZWh1dGkgTmV0d29ya3MoUikgTmV0d29yayBEcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZWh1dGkgTmV0d29ya3MgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkCmRpZmYgLS1naXQgYS9mcy9iaW8taW50ZWdyaXR5LmMgYi9mcy9iaW8taW50ZWdyaXR5LmMKaW5kZXggZmUyYjFhYS4uMzFjNDZhMiAxMDA2NDQKLS0tIGEvZnMvYmlvLWludGVncml0eS5jCisrKyBiL2ZzL2Jpby1pbnRlZ3JpdHkuYwpAQCAtMjYsNTUgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmlvX2ludGVncml0eV9zbGFiIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7CitzdGF0aWMgc3RydWN0IGJpb19zZXQgKmludGVncml0eV9iaW9fc2V0Owogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpraW50ZWdyaXR5ZF93cTsKIAogLyoqCi0gKiBiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldCAtIEFsbG9jYXRlIGludGVncml0eSBwYXlsb2FkIGFuZCBhdHRhY2ggaXQgdG8gYmlvCi0gKiBAYmlvOgliaW8gdG8gYXR0YWNoIGludGVncml0eSBtZXRhZGF0YSB0bwotICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCi0gKiBAbnJfdmVjczoJTnVtYmVyIG9mIGludGVncml0eSBtZXRhZGF0YSBzY2F0dGVyLWdhdGhlciBlbGVtZW50cwotICogQGJzOgkJYmlvX3NldCB0byBhbGxvY2F0ZSBmcm9tCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYSBiaW8gZm9yIGF0dGFjaGluZyBpbnRlZ3JpdHkKLSAqIG1ldGFkYXRhLiAgbnJfdmVjcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGNvbnRhaW5pbmcKLSAqIGludGVncml0eSBtZXRhZGF0YSB0aGF0IGNhbiBiZSBhdHRhY2hlZC4KLSAqLwotc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoc3RydWN0IGJpbyAqYmlvLAotCQkJCQkJCSBnZnBfdCBnZnBfbWFzaywKLQkJCQkJCQkgdW5zaWduZWQgaW50IG5yX3ZlY3MsCi0JCQkJCQkJIHN0cnVjdCBiaW9fc2V0ICpicykKLXsKLQlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7Ci0Jc3RydWN0IGJpb192ZWMgKml2OwotCXVuc2lnbmVkIGxvbmcgaWR4OwotCi0JQlVHX09OKGJpbyA9PSBOVUxMKTsKLQotCWJpcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCwgZ2ZwX21hc2spOwotCWlmICh1bmxpa2VseShiaXAgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltZW1zZXQoYmlwLCAwLCBzaXplb2YoKmJpcCkpOwotCi0JaXYgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl92ZWNzLCAmaWR4LCBicyk7Ci0JaWYgKHVubGlrZWx5KGl2ID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBfdmVjXG4iLCBfX2Z1bmNfXyk7Ci0JCW1lbXBvb2xfZnJlZShiaXAsIGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQliaXAtPmJpcF9wb29sID0gaWR4OwotCWJpcC0+YmlwX3ZlYyA9IGl2OwotCWJpcC0+YmlwX2JpbyA9IGJpbzsKLQliaW8tPmJpX2ludGVncml0eSA9IGJpcDsKLQotCXJldHVybiBiaXA7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KTsKLQotLyoqCiAgKiBiaW9faW50ZWdyaXR5X2FsbG9jIC0gQWxsb2NhdGUgaW50ZWdyaXR5IHBheWxvYWQgYW5kIGF0dGFjaCBpdCB0byBiaW8KICAqIEBiaW86CWJpbyB0byBhdHRhY2ggaW50ZWdyaXR5IG1ldGFkYXRhIHRvCiAgKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKQEAgLTg4LDE5ICs0NCw0NCBAQAogCQkJCQkJICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJCSAgdW5zaWduZWQgaW50IG5yX3ZlY3MpCiB7Ci0JcmV0dXJuIGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KGJpbywgZ2ZwX21hc2ssIG5yX3ZlY3MsIGZzX2Jpb19zZXQpOworCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqaXY7CisJdW5zaWduZWQgbG9uZyBpZHg7CisKKwlCVUdfT04oYmlvID09IE5VTEwpOworCisJYmlwID0gbWVtcG9vbF9hbGxvYyhiaW9faW50ZWdyaXR5X3Bvb2wsIGdmcF9tYXNrKTsKKwlpZiAodW5saWtlbHkoYmlwID09IE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KGJpcCwgMCwgc2l6ZW9mKCpiaXApKTsKKworCWl2ID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfdmVjcywgJmlkeCwgaW50ZWdyaXR5X2Jpb19zZXQpOworCWlmICh1bmxpa2VseShpdiA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwX3ZlY1xuIiwgX19mdW5jX18pOworCQltZW1wb29sX2ZyZWUoYmlwLCBiaW9faW50ZWdyaXR5X3Bvb2wpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwliaXAtPmJpcF9wb29sID0gaWR4OworCWJpcC0+YmlwX3ZlYyA9IGl2OworCWJpcC0+YmlwX2JpbyA9IGJpbzsKKwliaW8tPmJpX2ludGVncml0eSA9IGJpcDsKKworCXJldHVybiBiaXA7CiB9CiBFWFBPUlRfU1lNQk9MKGJpb19pbnRlZ3JpdHlfYWxsb2MpOwogCiAvKioKICAqIGJpb19pbnRlZ3JpdHlfZnJlZSAtIEZyZWUgYmlvIGludGVncml0eSBwYXlsb2FkCiAgKiBAYmlvOgliaW8gY29udGFpbmluZyBiaXAgdG8gYmUgZnJlZWQKLSAqIEBiczoJCWJpb19zZXQgdGhpcyBiaW8gd2FzIGFsbG9jYXRlZCBmcm9tCiAgKgogICogRGVzY3JpcHRpb246IFVzZWQgdG8gZnJlZSB0aGUgaW50ZWdyaXR5IHBvcnRpb24gb2YgYSBiaW8uIFVzdWFsbHkKICAqIGNhbGxlZCBmcm9tIGJpb19mcmVlKCkuCiAgKi8KLXZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb19zZXQgKmJzKQordm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcCA9IGJpby0+YmlfaW50ZWdyaXR5OwogCkBAIC0xMTEsOCArOTIsOCBAQAogCSAgICAmJiBiaXAtPmJpcF9idWYgIT0gTlVMTCkKIAkJa2ZyZWUoYmlwLT5iaXBfYnVmKTsKIAotCWJ2ZWNfZnJlZV9icyhicywgYmlwLT5iaXBfdmVjLCBiaXAtPmJpcF9wb29sKTsKLQltZW1wb29sX2ZyZWUoYmlwLCBicy0+YmlvX2ludGVncml0eV9wb29sKTsKKwlidmVjX2ZyZWVfYnMoaW50ZWdyaXR5X2Jpb19zZXQsIGJpcC0+YmlwX3ZlYywgYmlwLT5iaXBfcG9vbCk7CisJbWVtcG9vbF9mcmVlKGJpcCwgYmlvX2ludGVncml0eV9wb29sKTsKIAogCWJpby0+YmlfaW50ZWdyaXR5ID0gTlVMTDsKIH0KQEAgLTY4NiwxOSArNjY3LDE3IEBACiAgKiBAYmlvOglOZXcgYmlvCiAgKiBAYmlvX3NyYzoJT3JpZ2luYWwgYmlvCiAgKiBAZ2ZwX21hc2s6CU1lbW9yeSBhbGxvY2F0aW9uIG1hc2sKLSAqIEBiczoJCWJpb19zZXQgdG8gYWxsb2NhdGUgYmlwIGZyb20KICAqCiAgKiBEZXNjcmlwdGlvbjoJQ2FsbGVkIHRvIGFsbG9jYXRlIGEgYmlwIHdoZW4gY2xvbmluZyBhIGJpbwogICovCi1pbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsCi0JCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IGJpb19zZXQgKmJzKQoraW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXBfc3JjID0gYmlvX3NyYy0+YmlfaW50ZWdyaXR5OwogCXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcDsKIAogCUJVR19PTihiaXBfc3JjID09IE5VTEwpOwogCi0JYmlwID0gYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoYmlvLCBnZnBfbWFzaywgYmlwX3NyYy0+YmlwX3ZjbnQsIGJzKTsKKwliaXAgPSBiaW9faW50ZWdyaXR5X2FsbG9jKGJpbywgZ2ZwX21hc2ssIGJpcF9zcmMtPmJpcF92Y250KTsKIAogCWlmIChiaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC03MTQsMzcgKzY5MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2Nsb25lKTsKIAotaW50IGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKHN0cnVjdCBiaW9fc2V0ICpicywgaW50IHBvb2xfc2l6ZSkKLXsKLQlicy0+YmlvX2ludGVncml0eV9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKHBvb2xfc2l6ZSwKLQkJCQkJCQkgIGJpb19pbnRlZ3JpdHlfc2xhYik7Ci0JaWYgKCFicy0+YmlvX2ludGVncml0eV9wb29sKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ludGVncml0eV9jcmVhdGUpOwotCi12b2lkIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvX3NldCAqYnMpCi17Ci0JaWYgKGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wpCi0JCW1lbXBvb2xfZGVzdHJveShicy0+YmlvX2ludGVncml0eV9wb29sKTsKLX0KLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ludGVncml0eV9mcmVlKTsKLQotdm9pZCBfX2luaXQgYmlvX2ludGVncml0eV9pbml0X3NsYWIodm9pZCkKLXsKLQliaW9faW50ZWdyaXR5X3NsYWIgPSBLTUVNX0NBQ0hFKGJpb19pbnRlZ3JpdHlfcGF5bG9hZCwKLQkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUMpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JpdHlfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmlvX2ludGVncml0eV9pbml0KHZvaWQpCiB7CiAJa2ludGVncml0eWRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJraW50ZWdyaXR5ZCIpOwogCiAJaWYgKCFraW50ZWdyaXR5ZF93cSkKIAkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUga2ludGVncml0eWRcbiIpOwogCisJYmlvX2ludGVncml0eV9zbGFiID0gS01FTV9DQUNIRShiaW9faW50ZWdyaXR5X3BheWxvYWQsCisJCQkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKKworCWJpb19pbnRlZ3JpdHlfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChCSU9fUE9PTF9TSVpFLAorCQkJCQkJICAgICAgYmlvX2ludGVncml0eV9zbGFiKTsKKwlpZiAoIWJpb19pbnRlZ3JpdHlfcG9vbCkKKwkJcGFuaWMoImJpb19pbnRlZ3JpdHk6IGNhbid0IGFsbG9jYXRlIGJpcCBwb29sXG4iKTsKKworCWludGVncml0eV9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZShCSU9fUE9PTF9TSVpFLCAwKTsKKwlpZiAoIWludGVncml0eV9iaW9fc2V0KQorCQlwYW5pYygiYmlvX2ludGVncml0eTogY2FuJ3QgYWxsb2NhdGUgYmlvX3NldFxuIik7CisKIAlyZXR1cm4gMDsKIH0KLXN1YnN5c19pbml0Y2FsbChpbnRlZ3JpdHlfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoYmlvX2ludGVncml0eV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggZDRmMDYzMi4uYTA0MGNkZSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlidmVjX2ZyZWVfYnMoYnMsIGJpby0+YmlfaW9fdmVjLCBCSU9fUE9PTF9JRFgoYmlvKSk7CiAKIAlpZiAoYmlvX2ludGVncml0eShiaW8pKQotCQliaW9faW50ZWdyaXR5X2ZyZWUoYmlvLCBicyk7CisJCWJpb19pbnRlZ3JpdHlfZnJlZShiaW8pOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGZyb250IHBhZGRpbmcsIGFkanVzdCB0aGUgYmlvIHBvaW50ZXIgYmVmb3JlIGZyZWVpbmcKQEAgLTMwMSw0OCArMzAxLDUxIEBACiAgKiovCiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfYmlvc2V0KGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzLCBzdHJ1Y3QgYmlvX3NldCAqYnMpCiB7CisJc3RydWN0IGJpb192ZWMgKmJ2bCA9IE5VTEw7CiAJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKLQl2b2lkICp1bmluaXRpYWxpemVkX3ZhcihwKTsKKwl1bnNpZ25lZCBsb25nIGlkeCA9IDA7CisJdm9pZCAqcCA9IE5VTEw7CiAKIAlpZiAoYnMpIHsKIAkJcCA9IG1lbXBvb2xfYWxsb2MoYnMtPmJpb19wb29sLCBnZnBfbWFzayk7Ci0KLQkJaWYgKHApCi0JCQliaW8gPSBwICsgYnMtPmZyb250X3BhZDsKLQl9IGVsc2UKKwkJaWYgKCFwKQorCQkJZ290byBlcnI7CisJCWJpbyA9IHAgKyBicy0+ZnJvbnRfcGFkOworCX0gZWxzZSB7CiAJCWJpbyA9IGttYWxsb2Moc2l6ZW9mKCpiaW8pLCBnZnBfbWFzayk7Ci0KLQlpZiAobGlrZWx5KGJpbykpIHsKLQkJc3RydWN0IGJpb192ZWMgKmJ2bCA9IE5VTEw7Ci0KLQkJYmlvX2luaXQoYmlvKTsKLQkJaWYgKGxpa2VseShucl9pb3ZlY3MpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGlkeCk7Ci0KLQkJCWlmIChucl9pb3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7Ci0JCQkJaWR4ID0gMDsKLQkJCQlidmwgPSBiaW8tPmJpX2lubGluZV92ZWNzOwotCQkJCW5yX2lvdmVjcyA9IEJJT19JTkxJTkVfVkVDUzsKLQkJCX0gZWxzZSB7Ci0JCQkJYnZsID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfaW92ZWNzLCAmaWR4LAotCQkJCQkJCWJzKTsKLQkJCQlucl9pb3ZlY3MgPSBidmVjX25yX3ZlY3MoaWR4KTsKLQkJCX0KLQkJCWlmICh1bmxpa2VseSghYnZsKSkgewotCQkJCWlmIChicykKLQkJCQkJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7Ci0JCQkJZWxzZQotCQkJCQlrZnJlZShiaW8pOwotCQkJCWJpbyA9IE5VTEw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQliaW8tPmJpX2ZsYWdzIHw9IGlkeCA8PCBCSU9fUE9PTF9PRkZTRVQ7Ci0JCQliaW8tPmJpX21heF92ZWNzID0gbnJfaW92ZWNzOwotCQl9Ci0JCWJpby0+YmlfaW9fdmVjID0gYnZsOworCQlpZiAoIWJpbykKKwkJCWdvdG8gZXJyOwogCX0KLW91dDoKKworCWJpb19pbml0KGJpbyk7CisKKwlpZiAodW5saWtlbHkoIW5yX2lvdmVjcykpCisJCWdvdG8gb3V0X3NldDsKKworCWlmIChucl9pb3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCWJ2bCA9IGJpby0+YmlfaW5saW5lX3ZlY3M7CisJCW5yX2lvdmVjcyA9IEJJT19JTkxJTkVfVkVDUzsKKwl9IGVsc2UgeworCQlidmwgPSBidmVjX2FsbG9jX2JzKGdmcF9tYXNrLCBucl9pb3ZlY3MsICZpZHgsIGJzKTsKKwkJaWYgKHVubGlrZWx5KCFidmwpKQorCQkJZ290byBlcnJfZnJlZTsKKworCQlucl9pb3ZlY3MgPSBidmVjX25yX3ZlY3MoaWR4KTsKKwl9CisJYmlvLT5iaV9mbGFncyB8PSBpZHggPDwgQklPX1BPT0xfT0ZGU0VUOworCWJpby0+YmlfbWF4X3ZlY3MgPSBucl9pb3ZlY3M7CitvdXRfc2V0OgorCWJpby0+YmlfaW9fdmVjID0gYnZsOworCiAJcmV0dXJuIGJpbzsKKworZXJyX2ZyZWU6CisJaWYgKGJzKQorCQltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKKwllbHNlCisJCWtmcmVlKGJpbyk7CitlcnI6CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCBiaW8gKmJpb19hbGxvYyhnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcykKQEAgLTQ2Myw3ICs0NjYsNyBAQAogCWlmIChiaW9faW50ZWdyaXR5KGJpbykpIHsKIAkJaW50IHJldDsKIAotCQlyZXQgPSBiaW9faW50ZWdyaXR5X2Nsb25lKGIsIGJpbywgZ2ZwX21hc2ssIGZzX2Jpb19zZXQpOworCQlyZXQgPSBiaW9faW50ZWdyaXR5X2Nsb25lKGIsIGJpbywgZ2ZwX21hc2spOwogCiAJCWlmIChyZXQgPCAwKSB7CiAJCQliaW9fcHV0KGIpOwpAQCAtMTUyNiw3ICsxNTI5LDYgQEAKIAlpZiAoYnMtPmJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koYnMtPmJpb19wb29sKTsKIAotCWJpb3NldF9pbnRlZ3JpdHlfZnJlZShicyk7CiAJYmlvdmVjX2ZyZWVfcG9vbHMoYnMpOwogCWJpb19wdXRfc2xhYihicyk7CiAKQEAgLTE1NjcsOSArMTU2OSw2IEBACiAJaWYgKCFicy0+YmlvX3Bvb2wpCiAJCWdvdG8gYmFkOwogCi0JaWYgKGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKGJzLCBwb29sX3NpemUpKQotCQlnb3RvIGJhZDsKLQogCWlmICghYmlvdmVjX2NyZWF0ZV9wb29scyhicywgcG9vbF9zaXplKSkKIAkJcmV0dXJuIGJzOwogCkBAIC0xNTg2LDYgKzE1ODUsMTMgQEAKIAkJaW50IHNpemU7CiAJCXN0cnVjdCBiaW92ZWNfc2xhYiAqYnZzID0gYnZlY19zbGFicyArIGk7CiAKKyNpZm5kZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCisJCWlmIChidnMtPm5yX3ZlY3MgPD0gQklPX0lOTElORV9WRUNTKSB7CisJCQlidnMtPnNsYWIgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCiAJCXNpemUgPSBidnMtPm5yX3ZlY3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpOwogCQlidnMtPnNsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShidnMtPm5hbWUsIHNpemUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLCBOVUxMKTsKQEAgLTE2MDAsNyArMTYwNiw2IEBACiAJaWYgKCFiaW9fc2xhYnMpCiAJCXBhbmljKCJiaW86IGNhbid0IGFsbG9jYXRlIGJpb3NcbiIpOwogCi0JYmlvX2ludGVncml0eV9pbml0X3NsYWIoKTsKIAliaW92ZWNfaW5pdF9zbGFicygpOwogCiAJZnNfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoQklPX1BPT0xfU0laRSwgMCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggM2UxODE3NS4uNmVjODBjMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRocmVzaCA9IDMyICogMTAyNCAqIDEwMjQ7CiAJdHJlZSA9ICZCVFJGU19JKHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlKS0+aW9fdHJlZTsKIAotCWlmIChjdXJyZW50X2lzX3BkZmx1c2goKSB8fCBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQorCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQogCQlyZXR1cm47CiAKIAludW1fZGlydHkgPSBjb3VudF9yYW5nZV9iaXRzKHRyZWUsICZzdGFydCwgKHU2NCktMSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA4NTEzODhmLi42NTk4NDAwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC02LDcgKzYsMTYgQEAKIGFyZSBhdXRoZW50aWNhdGVkIGFzIGd1ZXN0LCBhcyByZWNvbm5lY3Rpb25zLCBpbnZhbGlkYXRpbmcgdGhlIGVhcmxpZXIKIHVzZXIncyBzbWIgc2Vzc2lvbi4gIFRoaXMgZml4IGFsbG93cyBjaWZzIHRvIG1vdW50IG11bHRpcGxlIHRpbWVzIHRvIHRoZQogc2FtZSBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgdXNlcmlkcyB3aXRob3V0IHJpc2tpbmcgaW52YWxpZGF0aW5nIGVhcmxpZXIKLWVzdGFibGlzaGVkIHNlY3VyaXR5IGNvbnRleHRzLgorZXN0YWJsaXNoZWQgc2VjdXJpdHkgY29udGV4dHMuICBmc3luYyBub3cgc2VuZHMgU01CIEZsdXNoIG9wZXJhdGlvbgordG8gYmV0dGVyIGVuc3VyZSB0aGF0IHdlIHdhaXQgZm9yIHNlcnZlciB0byB3cml0ZSBhbGwgb2YgdGhlIGRhdGEgdG8KK3NlcnZlciBkaXNrIChub3QganVzdCB3cml0ZSBpdCBvdmVyIHRoZSBuZXR3b3JrKS4gIEFkZCBuZXcgbW91bnQKK3BhcmFtZXRlciB0byBhbGxvdyB1c2VyIHRvIGRpc2FibGUgc2VuZGluZyB0aGUgKHNsb3cpIFNNQiBmbHVzaCBvbgorZnN5bmMgaWYgZGVzaXJlZCAoZnN5bmMgc3RpbGwgZmx1c2hlcyBhbGwgY2FjaGVkIHdyaXRlIGRhdGEgdG8gdGhlIHNlcnZlcikuCitQb3NpeCBmaWxlIG9wZW4gc3VwcG9ydCBhZGRlZCAodHVybmVkIG9mZiBhZnRlciBvbmUgYXR0ZW1wdCBpZiBzZXJ2ZXIKK2ZhaWxzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHksIGFzIHdpdGggU2FtYmEgc2VydmVyIHZlcnNpb25zIHByaW9yIHRvIDMuMy4yKQorRml4ICJyZWR6b25lIG92ZXJ3cml0dGVuIiBidWcgaW4gY2lmc19wdXRfdGNvbiAoQ0lGU1Rjb24gbWF5IGFsbG9jYXRlIHRvbworbGl0dGxlIG1lbW9yeSBmb3IgdGhlICJuYXRpdmVGaWxlU3lzdGVtIiBmaWVsZCByZXR1cm5lZCBieSB0aGUgc2VydmVyCitkdXJpbmcgbW91bnQpLiAKIAogVmVyc2lvbiAxLjU2CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCAzNDFhOTg5Li42OTk0YTBmIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0xMTgsNiArMTE4LDE4IEBACiAJICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwogCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgQ0lGU19ERlNfVVBDQUxMCisJICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IgorCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKKwkgIGhlbHAKKwkgICAgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0gKERGUykgc3VwcG9ydCBpcyB1c2VkIHRvIGFjY2VzcyBzaGFyZXMKKwkgICAgdHJhbnNwYXJlbnRseSBpbiBhbiBlbnRlcnByaXNlIG5hbWUgc3BhY2UsIGV2ZW4gaWYgdGhlIHNoYXJlCisJICAgIG1vdmVzIHRvIGEgZGlmZmVyZW50IHNlcnZlci4gIFRoaXMgZmVhdHVyZSBhbHNvIGVuYWJsZXMKKwkgICAgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UgaGVscGVyCisJICAgIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KKwkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KKwkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQ0lGU19FWFBFUklNRU5UQUwKIAkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgogCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTApAQCAtMTMxLDEyICsxNDMsMyBAQAogCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQogCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIENJRlNfREZTX1VQQ0FMTAotCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKLQkgIGRlcGVuZHMgb24gS0VZUwotCSAgaGVscAotCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCi0JICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCi0JICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCi0JICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggZGE0NTE1ZS4uMDc0MzQxOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTQ3Miw2ICs0NzIsMTkgQEAKIAkJZXZlbiBpZiB0aGUgY2lmcyBzZXJ2ZXIgd291bGQgc3VwcG9ydCBwb3NpeCBhZHZpc29yeSBsb2Nrcy4KIAkJImZvcmNlbWFuZCIgaXMgYWNjZXB0ZWQgYXMgYSBzaG9ydGVyIGZvcm0gb2YgdGhpcyBtb3VudAogCQlvcHRpb24uCisgbm9zdHJpY3RzeW5jICAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgc2V0LCB3aGVuIGFuIGFwcGxpY2F0aW9uIGRvZXMgYW4KKwkJZnN5bmMgY2FsbCB0aGVuIHRoZSBjaWZzIGNsaWVudCBkb2VzIG5vdCBzZW5kIGFuIFNNQiBGbHVzaAorCQl0byB0aGUgc2VydmVyICh0byBmb3JjZSB0aGUgc2VydmVyIHRvIHdyaXRlIGFsbCBkaXJ0eSBkYXRhCisJCWZvciB0aGlzIGZpbGUgaW1tZWRpYXRlbHkgdG8gZGlzayksIGFsdGhvdWdoIGNpZnMgc3RpbGwgc2VuZHMKKwkJYWxsIGRpcnR5IChjYWNoZWQpIGZpbGUgZGF0YSB0byB0aGUgc2VydmVyIGFuZCB3YWl0cyBmb3IgdGhlCisJCXNlcnZlciB0byByZXNwb25kIHRvIHRoZSB3cml0ZS4gIFNpbmNlIFNNQiBGbHVzaCBjYW4gYmUKKwkJdmVyeSBzbG93LCBhbmQgc29tZSBzZXJ2ZXJzIG1heSBiZSByZWxpYWJsZSBlbm91Z2ggKHRvIHJpc2sKKwkJZGVsYXlpbmcgc2xpZ2h0bHkgZmx1c2hpbmcgdGhlIGRhdGEgdG8gZGlzayBvbiB0aGUgc2VydmVyKSwKKwkJdHVybmluZyBvbiB0aGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yCisJCWFwcGxpY2F0aW9ucyB0aGF0IGZzeW5jIHRvbyBtdWNoLCBhdCBhIHNtYWxsIHJpc2sgb2Ygc2VydmVyCisJCWNyYXNoLiAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgbm90IHNldCwgYnkgZGVmYXVsdCBjaWZzIHdpbGwKKwkJc2VuZCBhbiBTTUIgZmx1c2ggcmVxdWVzdCAoYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UpIG9uIGV2ZXJ5CisJCWZzeW5jIGNhbGwuCiAgbm9kZnMgICAgICAgICAgRGlzYWJsZSBERlMgKGdsb2JhbCBuYW1lIHNwYWNlIHN1cHBvcnQpIGV2ZW4gaWYgdGhlCiAJCXNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGhlbHAgd29yayBhcm91bmQKIAkJYSBwcm9ibGVtIHdpdGggcGFyc2luZyBvZiBERlMgcGF0aHMgd2l0aCBTYW1iYSBzZXJ2ZXIKQEAgLTY5MiwxMyArNzA1LDE0IEBACiBjaWZzLnVwY2FsbCBoZWxwZXIgcHJvZ3JhbSksIGluc3RlYWQgb2YgdXNpbmcgS2VyYmVyb3MsIGlzIHN1ZmZpY2llbnQgZm9yCiBzb21lIHVzZSBjYXNlcy4KIAotRW5hYmxpbmcgREZTIHN1cHBvcnQgKHVzZWQgdG8gYWNjZXNzIHNoYXJlcyB0cmFuc3BhcmVudGx5IGluIGFuIE1TLURGUwotZ2xvYmFsIG5hbWUgc3BhY2UpIHJlcXVpcmVzIHRoYXQgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGJlIGVuYWJsZWQuICBJbgotYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCitERlMgc3VwcG9ydCBhbGxvd3MgdHJhbnNwYXJlbnQgcmVkaXJlY3Rpb24gdG8gc2hhcmVzIGluIGFuIE1TLURGUyBuYW1lIHNwYWNlLgorSW4gYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCiBuYW1lcyB3aGljaCBiZWdpbiB3aXRoIGhvc3QgbmFtZXMgKHJhdGhlciB0aGFuIElQIGFkZHJlc3NlcykgcmVxdWlyZXMKIGEgdXNlciBzcGFjZSBoZWxwZXIgKHN1Y2ggYXMgY2lmcy51cGNhbGwpIHRvIGJlIHByZXNlbnQgaW4gb3JkZXIgdG8KIHRyYW5zbGF0ZSBob3N0IG5hbWVzIHRvIGlwIGFkZHJlc3MsIGFuZCB0aGUgdXNlciBzcGFjZSBoZWxwZXIgbXVzdCBhbHNvCi1iZSBjb25maWd1cmVkIGluIHRoZSBmaWxlIC9ldGMvcmVxdWVzdC1rZXkuY29uZgorYmUgY29uZmlndXJlZCBpbiB0aGUgZmlsZSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYuICBTYW1iYSwgV2luZG93cyBzZXJ2ZXJzIGFuZAorbWFueSBOQVMgYXBwbGlhbmNlcyBzdXBwb3J0IERGUyBhcyBhIHdheSBvZiBjb25zdHJ1Y3RpbmcgYSBnbG9iYWwgbmFtZQorc3BhY2UgdG8gZWFzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGltcHJvdmUgcmVsaWFiaWxpdHkuCiAKIFRvIHVzZSBjaWZzIEtlcmJlcm9zIGFuZCBERlMgc3VwcG9ydCwgdGhlIExpbnV4IGtleXV0aWxzIHBhY2thZ2Ugc2hvdWxkIGJlCiBpbnN0YWxsZWQgYW5kIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCA0OTBlMzRiLi44NzdlNGQ5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtMzQwLDYgKzM0MCw4IEBACiAJCQkJc2VxX3ByaW50ZihtLCAiXG5Xcml0ZXM6ICVkIEJ5dGVzOiAlbGxkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV93cml0ZXMpLAogCQkJCQkobG9uZyBsb25nKSh0Y29uLT5ieXRlc193cml0dGVuKSk7CisJCQkJc2VxX3ByaW50ZihtLCAiXG5GbHVzaGVzOiAlZCIsCisJCQkJCWF0b21pY19yZWFkKCZ0Y29uLT5udW1fZmx1c2hlcykpOwogCQkJCXNlcV9wcmludGYobSwgIlxuTG9ja3M6ICVkIEhhcmRMaW5rczogJWQgIgogCQkJCQkgICAgICAiU3ltbGlua3M6ICVkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV9sb2NrcyksCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA4NWMwYTc0Li41ZmRiZjhhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTEwNCw5ICsxMDQsOSBAQAogCiAKIC8qKgotICogY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKKyAqIGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKICAqIEBzYl9tb3VudGRhdGE6CXBhcmVudC9yb290IERGUyBtb3VudCBvcHRpb25zICh0ZW1wbGF0ZSkKLSAqIEBkZW50cnk6CQlwb2ludCB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW91bnQKKyAqIEBmdWxscGF0aDoJCWZ1bGwgcGF0aCBpbiBVTkMgZm9ybWF0CiAgKiBAcmVmOgkJc2VydmVyJ3MgcmVmZXJyYWwKICAqIEBkZXZuYW1lOgkJcG9pbnRlciBmb3Igc2F2aW5nIGRldmljZSBuYW1lCiAgKgpAQCAtMTE2LDggKzExNiw4IEBACiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIG5ldyBtb3VudCBvcHRpb25zIG9yIEVSUl9QVFIuCiAgKiBDYWxsZXIgaXMgcmVzcG9uY2libGUgZm9yIGZyZWVpbmcgcmV0dW5ybmVkIHZhbHVlIGlmIGl0IGlzIG5vdCBlcnJvci4KICAqLwotc3RhdGljIGNoYXIgKmNvbXBvc2VfbW91bnRfb3B0aW9ucyhjb25zdCBjaGFyICpzYl9tb3VudGRhdGEsCi0JCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorY2hhciAqY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKIAkJCQkgICBjaGFyICoqZGV2bmFtZSkKIHsKQEAgLTEyOCw3ICsxMjgsNiBAQAogCWNoYXIgKnNydklQID0gTlVMTDsKIAljaGFyIHNlcCA9ICcsJzsKIAlpbnQgb2ZmLCBub2ZmOwotCWNoYXIgKmZ1bGxwYXRoOwogCiAJaWYgKHNiX21vdW50ZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTIwMiwxNyArMjAxLDYgQEAKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwogCX0KIAotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyBhIHBhdGggd2l0aCBhIGRvdWJsZSBiYWNrc2xhc2ggcHJlZml4LiBXZQotCSAqIHJlcXVpcmUgYSBzaW5nbGUgYmFja3NsYXNoIGZvciBERlMuIFRlbXBvcmFyaWx5IGluY3JlbWVudCBmdWxscGF0aAotCSAqIHRvIHB1dCBpdCBpbiB0aGUgcHJvcGVyIGZvcm0gYW5kIGRlY3JlbWVudCBiZWZvcmUgZnJlZWluZyBpdC4KLQkgKi8KLQlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQlpZiAoIWZ1bGxwYXRoKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwotCX0KLQkrK2Z1bGxwYXRoOwogCXRrbl9lID0gc3RyY2hyKHRrbl9lICsgMSwgJ1xcJyk7CiAJaWYgKHRrbl9lIHx8IChzdHJsZW4oZnVsbHBhdGgpIC0gcmVmLT5wYXRoX2NvbnN1bWVkKSkgewogCQlzdHJuY2F0KG1vdW50ZGF0YSwgJnNlcCwgMSk7CkBAIC0yMjEsOCArMjA5LDYgQEAKIAkJCXN0cmNhdChtb3VudGRhdGEsIHRrbl9lICsgMSk7CiAJCXN0cmNhdChtb3VudGRhdGEsIGZ1bGxwYXRoICsgcmVmLT5wYXRoX2NvbnN1bWVkKTsKIAl9Ci0JLS1mdWxscGF0aDsKLQlrZnJlZShmdWxscGF0aCk7CiAKIAkvKmNGWUkoMSwoIiVzOiBwYXJlbnQgbW91bnRkYXRhOiAlcyIsIF9fZnVuY19fLHNiX21vdW50ZGF0YSkpOyovCiAJLypjRllJKDEsICgiJXM6IHN1Ym1vdW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXywgbW91bnRkYXRhICkpOyovCkBAIC0yNDUsMTAgKzIzMSwyMCBAQAogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCWNoYXIgKm1vdW50ZGF0YTsKIAljaGFyICpkZXZuYW1lID0gTlVMTDsKKwljaGFyICpmdWxscGF0aDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYik7Ci0JbW91bnRkYXRhID0gY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKLQkJCQkJCWRlbnRyeSwgcmVmLCAmZGV2bmFtZSk7CisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGdpdmVzIHVzIGEgcGF0aCB3aXRoIGEgZG91YmxlIGJhY2tzbGFzaCBwcmVmaXguIFdlCisJICogcmVxdWlyZSBhIHNpbmdsZSBiYWNrc2xhc2ggZm9yIERGUy4KKwkgKi8KKwlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKKwlpZiAoIWZ1bGxwYXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1vdW50ZGF0YSA9IGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKKwkJCWZ1bGxwYXRoICsgMSwgcmVmLCAmZGV2bmFtZSk7CisJa2ZyZWUoZnVsbHBhdGgpOwogCiAJaWYgKElTX0VSUihtb3VudGRhdGEpKQogCQlyZXR1cm4gKHN0cnVjdCB2ZnNtb3VudCAqKW1vdW50ZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19mc19zYi5oIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKaW5kZXggYzRjMzA2Zi4uNDc5Nzc4NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKKysrIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ0lGU19NT1VOVF9PVkVSUl9HSUQgICAgMHg4MDAgLyogb3ZlcnJpZGUgZ2lkIHJldHVybmVkIGZyb20gc2VydmVyICAgICovCiAjZGVmaW5lIENJRlNfTU9VTlRfRFlOUEVSTSAgICAgIDB4MTAwMCAvKiBhbGxvdyBpbi1tZW1vcnkgb25seSBtb2RlIHNldHRpbmcgICAqLwogI2RlZmluZSBDSUZTX01PVU5UX05PUE9TSVhCUkwgICAweDIwMDAgLyogbWFuZGF0b3J5IG5vdCBwb3NpeCBieXRlIHJhbmdlIGxvY2sgKi8KKyNkZWZpbmUgQ0lGU19NT1VOVF9OT1NTWU5DICAgICAgMHg0MDAwIC8qIGRvbid0IGRvIHNsb3cgU01CZmx1c2ggb24gZXZlcnkgc3luYyovCiAKIHN0cnVjdCBjaWZzX3NiX2luZm8gewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CS8qIHByaW1hcnkgbW91bnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCBlMDA0ZjZkLi45ZmJmNGRmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0yNTQsNiArMjU0LDcgQEAKIAlhdG9taWNfdCBudW1fc21ic19zZW50OwogCWF0b21pY190IG51bV93cml0ZXM7CiAJYXRvbWljX3QgbnVtX3JlYWRzOworCWF0b21pY190IG51bV9mbHVzaGVzOwogCWF0b21pY190IG51bV9vcGxvY2tfYnJrczsKIAlhdG9taWNfdCBudW1fb3BlbnM7CiAJYXRvbWljX3QgbnVtX2Nsb3NlczsKQEAgLTI5OCw2ICsyOTksNyBAQAogCWJvb2wgdW5peF9leHQ6MTsgIC8qIGlmIGZhbHNlIGRpc2FibGUgTGludXggZXh0ZW5zaW9ucyB0byBDSUZTIHByb3RvY29sCiAJCQkJZm9yIHRoaXMgbW91bnQgZXZlbiBpZiBzZXJ2ZXIgd291bGQgc3VwcG9ydCAqLwogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIChvbmx5KSBvbiBsb2NhbCBzeXN0ZW0gbm90IHJlbW90ZSAqLworCWJvb2wgYnJva2VuX3Bvc2l4X29wZW47IC8qIGUuZy4gU2FtYmEgc2VydmVyIHZlcnNpb25zIDwgMy4zLjIsIDMuMi45ICovCiAJYm9vbCBuZWVkX3JlY29ubmVjdDoxOyAvKiBjb25uZWN0aW9uIHJlc2V0LCB0aWQgbm93IGludmFsaWQgKi8KIAkvKiBCQiBhZGQgZmllbGQgZm9yIGJhY2sgcG9pbnRlciB0byBzYiBzdHJ1Y3Qocyk/ICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNGUyZTlmLi5iMzcwNDg5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwZHUuaAorKysgYi9mcy9jaWZzL2NpZnNwZHUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgIGZzL2NpZnMvY2lmc3BkdS5oCiAgKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDgKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA5CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBfQ0lGU1BEVV9ICiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgInNtYmZzY3RsLmgiCiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKICNkZWZpbmUgTEFOTUFOX1BST1QgMApAQCAtMzQsMTUgKzM1LDE1IEBACiAjZGVmaW5lIFBPU0lYX1BST1QgIChDSUZTX1BST1QrMSkKICNkZWZpbmUgQkFEX1BST1QgMHhGRkZGCiAKLS8qIFNNQiBjb21tYW5kIGNvZGVzICovCi0vKgotICogU29tZSBjb21tYW5kcyBoYXZlIG1pbmltYWwgKHdjdD0wLGJjYz0wKSwgb3IgdW5pbnRlcmVzdGluZywgcmVzcG9uc2VzCisvKiBTTUIgY29tbWFuZCBjb2RlczoKKyAqIE5vdGUgc29tZSBjb21tYW5kcyBoYXZlIG1pbmltYWwgKHdjdD0wLGJjYz0wKSwgb3IgdW5pbnRlcmVzdGluZywgcmVzcG9uc2VzCiAgKiAoaWUgd2hpY2ggaW5jbHVkZSBubyB1c2VmdWwgZGF0YSBvdGhlciB0aGFuIHRoZSBTTUIgZXJyb3IgY29kZSBpdHNlbGYpLgotICogS25vd2luZyB0aGlzIGhlbHBzIGF2b2lkIHJlc3BvbnNlIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgY29weSBpbiBzb21lIGNhc2VzCisgKiBUaGlzIGNhbiBhbGxvdyB1cyB0byBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcwogICovCiAjZGVmaW5lIFNNQl9DT01fQ1JFQVRFX0RJUkVDVE9SWSAgICAgIDB4MDAgLyogdHJpdmlhbCByZXNwb25zZSAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURV9ESVJFQ1RPUlkgICAgICAweDAxIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9DTE9TRSAgICAgICAgICAgICAgICAgMHgwNCAvKiB0cml2IHJlcS9yc3AsIHRpbWVzdGFtcCBpZ25vcmVkICovCisjZGVmaW5lIFNNQl9DT01fRkxVU0ggICAgICAgICAgICAgICAgIDB4MDUgLyogdHJpdiByZXEvcnNwICovCiAjZGVmaW5lIFNNQl9DT01fREVMRVRFICAgICAgICAgICAgICAgIDB4MDYgLyogdHJpdmlhbCByZXNwb25zZSAqLwogI2RlZmluZSBTTUJfQ09NX1JFTkFNRSAgICAgICAgICAgICAgICAweDA3IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9RVUVSWV9JTkZPUk1BVElPTiAgICAgMHgwOCAvKiBha2EgZ2V0YXR0ciAqLwpAQCAtNzkwLDYgKzc5MSwxMiBAQAogCV9fdTE2IEJ5dGVDb3VudDsJLyogYmN0ID0gMCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBDTE9TRV9SU1A7CiAKK3R5cGVkZWYgc3RydWN0IHNtYl9jb21fZmx1c2hfcmVxIHsKKwlzdHJ1Y3Qgc21iX2hkciBoZHI7CS8qIHdjdCA9IDEgKi8KKwlfX3UxNiBGaWxlSUQ7CisJX191MTYgQnl0ZUNvdW50OwkvKiAwICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEZMVVNIX1JFUTsKKwogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV9maW5kY2xvc2VfcmVxIHsKIAlzdHJ1Y3Qgc21iX2hkciBoZHI7IC8qIHdjdCA9IDEgKi8KIAlfX3UxNiBGaWxlSUQ7CkBAIC0xOTI0LDE5ICsxOTMxLDE5IEBACiAjZGVmaW5lIERGU19UWVBFX1JPT1QgMHgwMDAxCiAKIC8qIFJlZmVycmFsIEVudHJ5IEZsYWdzICovCi0jZGVmaW5lIERGU19OQU1FX0xJU1RfUkVGIDB4MDIwMAorI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAgLyogc2V0IGZvciBkb21haW4gb3IgREMgcmVmZXJyYWwgcmVzcG9uc2VzICovCisjZGVmaW5lIERGU19UQVJHRVRfU0VUX0JPVU5EQVJZIDB4MDQwMCAvKiBvbmx5IHZhbGlkIHdpdGggdmVyc2lvbiA0IGRmcyByZXEgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgZGZzX3JlZmVycmFsX2xldmVsXzMgewotCV9fbGUxNiBWZXJzaW9uTnVtYmVyOwordHlwZWRlZiBzdHJ1Y3QgZGZzX3JlZmVycmFsX2xldmVsXzMgeyAvKiB2ZXJzaW9uIDQgaXMgc2FtZSwgKyBvbmUgZmxhZyBiaXQgKi8KKwlfX2xlMTYgVmVyc2lvbk51bWJlcjsgIC8qIG11c3QgYmUgMyBvciA0ICovCiAJX19sZTE2IFNpemU7CiAJX19sZTE2IFNlcnZlclR5cGU7IC8qIDB4MDAwMSA9IHJvb3QgdGFyZ2V0czsgMHgwMDAwID0gbGluayB0YXJnZXRzICovCi0JX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsgLyogMHgwMjAwIGJpdCBzZXQgb25seSBmb3IgZG9tYWluCi0JCQkJICAgICAgb3IgREMgcmVmZXJyYWwgcmVzcG9uY2UgKi8KKwlfX2xlMTYgUmVmZXJyYWxFbnRyeUZsYWdzOwogCV9fbGUzMiBUaW1lVG9MaXZlOwogCV9fbGUxNiBEZnNQYXRoT2Zmc2V0OwogCV9fbGUxNiBEZnNBbHRlcm5hdGVQYXRoT2Zmc2V0OwogCV9fbGUxNiBOZXR3b3JrQWRkcmVzc09mZnNldDsgLyogb2Zmc2V0IG9mIHRoZSBsaW5rIHRhcmdldCAqLwotCV9fbGUxNiBTZXJ2aWNlU2l0ZUd1aWQ7CisJX191OCAgIFNlcnZpY2VTaXRlR3VpZFsxNl07ICAvKiBNQlosIGlnbm9yZWQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgUkVGRVJSQUwzOwogCiB0eXBlZGVmIHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uX2dldF9kZnNfcmVmZXJfcnNwIHsKQEAgLTE5NDYsNDggKzE5NTMsMTUgQEAKIAlfX3U4IFBhZDsKIAlfX2xlMTYgUGF0aENvbnN1bWVkOwogCV9fbGUxNiBOdW1iZXJPZlJlZmVycmFsczsKLQlfX2xlMTYgREZTRmxhZ3M7Ci0JX191MTYgUGFkMjsKKwlfX2xlMzIgREZTRmxhZ3M7CiAJUkVGRVJSQUwzIHJlZmVycmFsc1sxXTsJLyogYXJyYXkgb2YgbGV2ZWwgMyBkZnNfcmVmZXJyYWwgc3RydWN0dXJlcyAqLwogCS8qIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmdzIHBvaW50ZWQgdG8gYnkgdGhlIHJlZmVycmFsIHN0cnVjdHVyZXMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVFJBTlNBQ1RJT04yX0dFVF9ERlNfUkVGRVJfUlNQOwogCiAvKiBERlMgRmxhZ3MgKi8KLSNkZWZpbmUgREZTUkVGX1JFRkVSUkFMX1NFUlZFUiAgMHgwMDAxCi0jZGVmaW5lIERGU1JFRl9TVE9SQUdFX1NFUlZFUiAgIDB4MDAwMgotCi0vKiBJT0NUTCBpbmZvcm1hdGlvbiAqLwotLyoKLSAqIExpc3Qgb2YgaW9jdGwgZnVuY3Rpb24gY29kZXMgdGhhdCBsb29rIHRvIGJlIG9mIGludGVyZXN0IHRvIHJlbW90ZSBjbGllbnRzCi0gKiBsaWtlIHRoaXMgb25lLiAgTmVlZCB0byBkbyBzb21lIGV4cGVyaW1lbnRhdGlvbiB0byBtYWtlIHN1cmUgdGhleSBhbGwgd29yawotICogcmVtb3RlbHkuICBTb21lIG9mIHRoZSBmb2xsb3dpbmcsIHN1Y2ggYXMgdGhlIGVuY3J5cHRpb24vY29tcHJlc3Npb24gb25lcwotICogd291bGQgYmUgaW52b2tlZCBmcm9tIHRvb2xzIHZpYSBhIHNwZWNpYWxpemVkIGhvb2sgaW50byB0aGUgVkZTIHJhdGhlcgotICogdGhhbiB2aWEgdGhlIHN0YW5kYXJkIHZmcyBlbnRyeSBwb2ludHMKLSAqLwotI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8xIDB4MDAwOTAwMDAKLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMiAweDAwMDkwMDA0Ci0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfQkFUQ0hfT1BMT0NLICAgMHgwMDA5MDAwOAotI2RlZmluZSBGU0NUTF9MT0NLX1ZPTFVNRSAgICAgICAgICAgIDB4MDAwOTAwMTgKLSNkZWZpbmUgRlNDVExfVU5MT0NLX1ZPTFVNRSAgICAgICAgICAweDAwMDkwMDFDCi0jZGVmaW5lIEZTQ1RMX0dFVF9DT01QUkVTU0lPTiAgICAgICAgMHgwMDA5MDAzQwotI2RlZmluZSBGU0NUTF9TRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOUMwNDAKLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9GSUxURVJfT1BMT0NLICAweDAwMDkwMDhDCi0jZGVmaW5lIEZTQ1RMX0ZJTEVTWVNfR0VUX1NUQVRJU1RJQ1MgMHgwMDA5MDA5MAotI2RlZmluZSBGU0NUTF9TRVRfUkVQQVJTRV9QT0lOVCAgICAgIDB4MDAwOTAwQTQKLSNkZWZpbmUgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE4Ci0jZGVmaW5lIEZTQ1RMX0RFTEVURV9SRVBBUlNFX1BPSU5UICAgMHgwMDA5MDBBQwotI2RlZmluZSBGU0NUTF9TRVRfU1BBUlNFICAgICAgICAgICAgIDB4MDAwOTAwQzQKLSNkZWZpbmUgRlNDVExfU0VUX1pFUk9fREFUQSAgICAgICAgICAweDAwMDkwMEM4Ci0jZGVmaW5lIEZTQ1RMX1NFVF9FTkNSWVBUSU9OICAgICAgICAgMHgwMDA5MDBENwotI2RlZmluZSBGU0NUTF9FTkNSWVBUSU9OX0ZTQ1RMX0lPICAgIDB4MDAwOTAwREIKLSNkZWZpbmUgRlNDVExfV1JJVEVfUkFXX0VOQ1JZUFRFRCAgICAweDAwMDkwMERGCi0jZGVmaW5lIEZTQ1RMX1JFQURfUkFXX0VOQ1JZUFRFRCAgICAgMHgwMDA5MDBFMwotI2RlZmluZSBGU0NUTF9TSVNfQ09QWUZJTEUgICAgICAgICAgIDB4MDAwOTAxMDAKLSNkZWZpbmUgRlNDVExfU0lTX0xJTktfRklMRVMgICAgICAgICAweDAwMDlDMTA0Ci0KLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlQgICAweEEwMDAwMDAzCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX0hTTSAgICAgICAgICAgMHhDMDAwMDAwNAotI2RlZmluZSBJT19SRVBBUlNFX1RBR19TSVMgICAgICAgICAgIDB4ODAwMDAwMDcKKyNkZWZpbmUgREZTUkVGX1JFRkVSUkFMX1NFUlZFUiAgMHgwMDAwMDAwMSAvKiBhbGwgdGFyZ2V0cyBhcmUgREZTIHJvb3RzICovCisjZGVmaW5lIERGU1JFRl9TVE9SQUdFX1NFUlZFUiAgIDB4MDAwMDAwMDIgLyogbm8gZnVydGhlciByZWYgcmVxdWVzdHMgbmVlZGVkICovCisjZGVmaW5lIERGU1JFRl9UQVJHRVRfRkFJTEJBQ0sgIDB4MDAwMDAwMDQgLyogb25seSBmb3IgREZTIHJlZmVycmFsIHZlcnNpb24gNCAqLwogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjUwOCw4ICsyNDgyLDYgQEAKIAk2KSBVc2UgbmFub3NlY29uZCB0aW1lc3RhbXBzIHRocm91Z2hvdXQgYWxsIHRpbWUgZmllbGRzIGlmCiAJICAgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZmxhZyBpcyBzZXQKIAk3KSBzZW5kZmlsZSAtIGhhbmRsZSBiYXNlZCBjb3B5Ci0JOCkgRGlyZWN0IGkvbwotCTkpIE1pc2MgZmNudGxzPwogCiAJd2hhdCBhYm91dCBmaXhpbmcgNjQgYml0IGFsaWdubWVudAogCkBAIC0yNjI4LDcgKzI2MDAsNSBAQAogCV9fbGU2NAltb2RlOyAvKiBsaXN0IG9mIGFjdHVhbCBhdHRyaWJ1dGUgYml0cyBvbiB0aGlzIGlub2RlICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEZJTEVfQ0hBVFRSX0lORk87ICAvKiBleHQgYXR0cmlidXRlcwogCQkJCQkJKGNoYXR0ciwgY2hmbGFncykgbGV2ZWwgMHgyMDYgKi8KLQotI2VuZGlmCi0KKyNlbmRpZiAJCQkJLyogUE9TSVggKi8KICNlbmRpZgkJCQkvKiBfQ0lGU1BEVV9IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCAwODNkZmM1Li40MTY3NzE2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTQ0LDYgKzQ0LDkgQEAKIGV4dGVybiBjaGFyICpidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gY2hhciAqY2lmc19idWlsZF9wYXRoX3RvX3Jvb3Qoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CiBleHRlcm4gY2hhciAqYnVpbGRfd2lsZGNhcmRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7CitleHRlcm4gY2hhciAqY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAorCQljb25zdCBjaGFyICpmdWxscGF0aCwgY29uc3Qgc3RydWN0IGRmc19pbmZvM19wYXJhbSAqcmVmLAorCQljaGFyICoqZGV2bmFtZSk7CiAvKiBleHRlcm4gdm9pZCByZW5ld19wYXJlbnRhbF90aW1lc3RhbXBzKHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5KTsqLwogZXh0ZXJuIGludCBTZW5kUmVjZWl2ZShjb25zdCB1bnNpZ25lZCBpbnQgLyogeGlkICovICwgc3RydWN0IGNpZnNTZXNJbmZvICosCiAJCQlzdHJ1Y3Qgc21iX2hkciAqIC8qIGlucHV0ICovICwKQEAgLTkyLDYgKzk1LDkgQEAKIGV4dGVybiBfX2xlNjQgY252cnREb3NDaWZzVG0oX191MTYgZGF0ZSwgX191MTYgdGltZSk7CiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIGNudnJ0RG9zVW5peFRtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogCitleHRlcm4gaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKKwkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAorCQkJICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCk7CiBleHRlcm4gdm9pZCBwb3NpeF9maWxsX2luX2lub2RlKHN0cnVjdCBpbm9kZSAqdG1wX2lub2RlLAogCQkJCUZJTEVfVU5JWF9CQVNJQ19JTkZPICpwRGF0YSwgaW50IGlzTmV3SW5vZGUpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqY2lmc19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191NjQgKmludW0pOwpAQCAtMjgxLDYgKzI4Nyw5IEBACiBleHRlcm4gaW50IENJRlNTTUJDbG9zZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgaW50IHNtYl9maWxlX2lkKTsKIAorZXh0ZXJuIGludCBDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CisKIGV4dGVybiBpbnQgQ0lGU1NNQlJlYWQoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBuZXRmaWQsIHVuc2lnbmVkIGludCBjb3VudCwKIAkJCWNvbnN0IF9fdTY0IGxzZWVrLCB1bnNpZ25lZCBpbnQgKm5ieXRlcywgY2hhciAqKmJ1ZiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTM5ZTJmNy4uYmMwOWM5OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTE5MzQsNiArMTkzNCwyNyBAQAogfQogCiBpbnQKK0NJRlNTTUJGbHVzaChjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBpbnQgc21iX2ZpbGVfaWQpCit7CisJaW50IHJjID0gMDsKKwlGTFVTSF9SRVEgKnBTTUIgPSBOVUxMOworCWNGWUkoMSwgKCJJbiBDSUZTU01CRmx1c2giKSk7CisKKwlyYyA9IHNtYWxsX3NtYl9pbml0KFNNQl9DT01fRkxVU0gsIDEsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwU01CLT5GaWxlSUQgPSAoX191MTYpIHNtYl9maWxlX2lkOworCXBTTUItPkJ5dGVDb3VudCA9IDA7CisJcmMgPSBTZW5kUmVjZWl2ZU5vUnNwKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwgMCk7CisJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9mbHVzaGVzKTsKKwlpZiAocmMpCisJCWNFUlJPUigxLCAoIlNlbmQgZXJyb3IgaW4gRmx1c2ggPSAlZCIsIHJjKSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludAogQ0lGU1NNQlJlbmFtZShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCSAgICAgIGNvbnN0IGNoYXIgKmZyb21OYW1lLCBjb25zdCBjaGFyICp0b05hbWUsCiAJICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCkBAIC0yMzU2LDggKzIzNzcsMTAgQEAKIAkJCQkgICAgIFBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJbmFtZV9sZW4rKzsJLyogdHJhaWxpbmcgbnVsbCAqLwogCQluYW1lX2xlbiAqPSAyOwotCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAwOwkvKiBwYWQgKi8KLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAxXSA9IDB4MDQ7CisKKwkJLyogcHJvdG9jb2wgc3BlY2lmaWVzIEFTQ0lJIGJ1ZmZlciBmb3JtYXQgKDB4MDQpIGZvciB1bmljb2RlICovCisJCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuXSA9IDB4MDQ7CisJCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDAwOyAvKiBwYWQgKi8KIAkJbmFtZV9sZW4yID0KIAkJICAgIGNpZnNDb252ZXJ0VG9VQ1MoKF9fbGUxNiAqKSZwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDJdLAogCQkJCSAgICAgdG9OYW1lLCBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGRhMGY0ZmYuLjBkZTNiNTYxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtOTUsNiArOTUsNyBAQAogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIG9ubHkgb24gbG9jYWwgc3lzdGVtLCBub3QgcmVtb3RlICovCiAJYm9vbCBub2Jsb2Nrc25kOjE7CiAJYm9vbCBub2F1dG90dW5lOjE7CisJYm9vbCBub3N0cmljdHN5bmM6MTsgLyogZG8gbm90IGZvcmNlIGV4cGVuc2l2ZSBTTUJmbHVzaCBvbiBldmVyeSBzeW5jICovCiAJdW5zaWduZWQgaW50IHJzaXplOwogCXVuc2lnbmVkIGludCB3c2l6ZTsKIAl1bnNpZ25lZCBpbnQgc29ja29wdDsKQEAgLTEyNzQsNiArMTI3NSwxMCBAQAogCQkJdm9sLT5pbnRyID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiaW50ciIsIDQpID09IDApIHsKIAkJCXZvbC0+aW50ciA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vc3RyaWN0c3luYyIsIDEyKSA9PSAwKSB7CisJCQl2b2wtPm5vc3RyaWN0c3luYyA9IDE7CisJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInN0cmljdHN5bmMiLCAxMCkgPT0gMCkgeworCQkJdm9sLT5ub3N0cmljdHN5bmMgPSAwOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzZXJ2ZXJpbm8iLCA3KSA9PSAwKSB7CiAJCQl2b2wtPnNlcnZlcl9pbm8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3NlcnZlcmlubyIsIDkpID09IDApIHsKQEAgLTIxNjAsNiArMjE2NSw4IEBACiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfVU5YX0VNVUw7CiAJaWYgKHB2b2x1bWVfaW5mby0+bm9icmwpCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9fQlJMOworCWlmIChwdm9sdW1lX2luZm8tPm5vc3RyaWN0c3luYykKKwkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9OT1NTWU5DOwogCWlmIChwdm9sdW1lX2luZm8tPm1hbmRfbG9jaykKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgfD0gQ0lGU19NT1VOVF9OT1BPU0lYQlJMOwogCWlmIChwdm9sdW1lX2luZm8tPmNpZnNfYWNsKQpAQCAtMzY2Nyw3ICszNjc0LDcgQEAKIAkJCSAgICBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKIAkJCQlrZnJlZSh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKTsKIAkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtID0KLQkJCQkgICAga3phbGxvYyhsZW5ndGggKyAyLCBHRlBfS0VSTkVMKTsKKwkJCQkgICAga3phbGxvYygyKihsZW5ndGggKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pCiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZSgKIAkJCQkJCXRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0sCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCA4OWZiNzI4Li5mOWI2ZjY4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCXJldHVybiBmdWxsX3BhdGg7CiB9CiAKLXN0YXRpYyBpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAoraW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKIAkJICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAogCQkgICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCkKIHsKQEAgLTE4Nyw3ICsxODcsOSBAQAogCWlmICghcGlub2RlKQogCQlnb3RvIHBvc2l4X29wZW5fcmV0OyAvKiBjYWxsZXIgZG9lcyBub3QgbmVlZCBpbmZvICovCiAKLQkqcGlub2RlID0gY2lmc19uZXdfaW5vZGUoc2IsICZwcmVzcF9kYXRhLT5VbmlxdWVJZCk7CisJaWYgKCpwaW5vZGUgPT0gTlVMTCkKKwkJKnBpbm9kZSA9IGNpZnNfbmV3X2lub2RlKHNiLCAmcHJlc3BfZGF0YS0+VW5pcXVlSWQpOworCS8qIGVsc2UgYW4gaW5vZGUgd2FzIHBhc3NlZCBpbi4gVXBkYXRlIGl0cyBpbmZvLCBkb24ndCBjcmVhdGUgb25lICovCiAKIAkvKiBXZSBkbyBub3QgbmVlZCB0byBjbG9zZSB0aGUgZmlsZSBpZiBuZXdfaW5vZGUgZmFpbHMgc2luY2UKIAkgICB0aGUgY2FsbGVyIHdpbGwgcmV0cnkgcXBhdGhpbmZvIGFzIGxvbmcgYXMgaW5vZGUgaXMgbnVsbCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCAxMmJiNjU2Li44MTc0N2FjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtNzgsOCArNzgsMzYgQEAKIAlyZXR1cm4gKFJFQURfQ09OVFJPTCB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUyB8IEZJTEVfUkVBRF9BVFRSSUJVVEVTIHwKIAkJRklMRV9XUklURV9FQSB8IEZJTEVfQVBQRU5EX0RBVEEgfCBGSUxFX1dSSVRFX0RBVEEgfAogCQlGSUxFX1JFQURfREFUQSk7Cit9CiAKK3N0YXRpYyBpbmxpbmUgZm1vZGVfdCBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQoreworCWZtb2RlX3QgcG9zaXhfZmxhZ3MgPSAwOwogCisJaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCisJCXBvc2l4X2ZsYWdzID0gRk1PREVfUkVBRDsKKwllbHNlIGlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKQorCQlwb3NpeF9mbGFncyA9IEZNT0RFX1dSSVRFOworCWVsc2UgaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRFdSKSB7CisJCS8qIEdFTkVSSUNfQUxMIGlzIHRvbyBtdWNoIHBlcm1pc3Npb24gdG8gcmVxdWVzdAorCQkgICBjYW4gY2F1c2UgdW5uZWNlc3NhcnkgYWNjZXNzIGRlbmllZCBvbiBjcmVhdGUgKi8KKwkJLyogcmV0dXJuIEdFTkVSSUNfQUxMOyAqLworCQlwb3NpeF9mbGFncyA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKKwl9CisJLyogY2FuIG5vdCBtYXAgT19DUkVBVCBvciBPX0VYQ0wgb3IgT19UUlVOQyBmbGFncyB3aGVuCisJICAgcmVvcGVuaW5nIGEgZmlsZS4gIFRoZXkgaGFkIHRoZWlyIGVmZmVjdCBvbiB0aGUgb3JpZ2luYWwgb3BlbiAqLworCWlmIChmbGFncyAmIE9fQVBQRU5EKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX0FQUEVORDsKKwlpZiAoZmxhZ3MgJiBPX1NZTkMpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fU1lOQzsKKwlpZiAoZmxhZ3MgJiBPX0RJUkVDVE9SWSkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19ESVJFQ1RPUlk7CisJaWYgKGZsYWdzICYgT19OT0ZPTExPVykKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19OT0ZPTExPVzsKKwlpZiAoZmxhZ3MgJiBPX0RJUkVDVCkKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19ESVJFQ1Q7CisKKwlyZXR1cm4gcG9zaXhfZmxhZ3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNpZnNfZ2V0X2Rpc3Bvc2l0aW9uKHVuc2lnbmVkIGludCBmbGFncykKQEAgLTk3LDYgKzEyNSw4MCBAQAogfQogCiAvKiBhbGwgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBpbiBjYWxsZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSwKKwkJCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSwgaW50IG9wbG9jaywgdTE2IG5ldGZpZCkKK3sKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CisvKglzdHJ1Y3QgdGltZXNwZWMgdGVtcDsgKi8gICAvKiBCQiBSRU1PVkVNRSBCQiAqLworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcENpZnNGaWxlID0gY2lmc19pbml0X3ByaXZhdGUoZmlsZS0+cHJpdmF0ZV9kYXRhLCBpbm9kZSwgZmlsZSwgbmV0ZmlkKTsKKwl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJmNpZnNfc2ItPnRjb24tPm9wZW5GaWxlTGlzdCk7CisKKwlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWlmIChwQ2lmc0lub2RlID09IE5VTEwpIHsKKwkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogd2FudCBoYW5kbGVzIHdlIGNhbiB1c2UgdG8gcmVhZCB3aXRoIGZpcnN0CisJICAgaW4gdGhlIGxpc3Qgc28gd2UgZG8gbm90IGhhdmUgdG8gd2FsayB0aGUKKwkgICBsaXN0IHRvIHNlYXJjaCBmb3Igb25lIGluIHdyaXRlX2JlZ2luICovCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgeworCQlsaXN0X2FkZF90YWlsKCZwQ2lmc0ZpbGUtPmZsaXN0LAorCQkJICAgICAgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+Zmxpc3QsCisJCQkgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCk7CisJfQorCisJaWYgKHBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCkgeworCQkvKiB3ZSBoYXZlIHRoZSBpbm9kZSBvcGVuIHNvbWV3aGVyZSBlbHNlCisJCSAgIG5vIG5lZWQgdG8gZGlzY2FyZCBjYWNoZSBkYXRhICovCisJCWdvdG8gcHN4X2NsaWVudF9jYW5fY2FjaGU7CisJfQorCisJLyogQkIgRklYTUUgbmVlZCB0byBmaXggdGhpcyBjaGVjayB0byBtb3ZlIGl0IGVhcmxpZXIgaW50byBwb3NpeF9vcGVuCisJICAgQkIgIGZJWCBmb2xsb3dpbmcgc2VjdGlvbiBCQiBGSVhNRSAqLworCisJLyogaWYgbm90IG9wbG9ja2VkLCBpbnZhbGlkYXRlIGlub2RlIHBhZ2VzIGlmIG10aW1lIG9yIGZpbGUKKwkgICBzaXplIGNoYW5nZWQgKi8KKy8qCXRlbXAgPSBjaWZzX05UdGltZVRvVW5peChsZTY0X3RvX2NwdShidWYtPkxhc3RXcml0ZVRpbWUpKTsKKwlpZiAodGltZXNwZWNfZXF1YWwoJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXRpbWUsICZ0ZW1wKSAmJgorCQkJICAgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSA9PQorCQkJICAgIChsb2ZmX3QpbGU2NF90b19jcHUoYnVmLT5FbmRPZkZpbGUpKSkgeworCQljRllJKDEsICgiaW5vZGUgdW5jaGFuZ2VkIG9uIHNlcnZlciIpKTsKKwl9IGVsc2UgeworCQlpZiAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKSB7CisJCQlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKTsKKwkJCWlmIChyYyAhPSAwKQorCQkJCUNJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gcmM7CisJCX0KKwkJY0ZZSSgxLCAoImludmFsaWRhdGluZyByZW1vdGUgaW5vZGUgc2luY2Ugb3BlbiBkZXRlY3RlZCBpdCAiCisJCQkgImNoYW5nZWQiKSk7CisJCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCX0gKi8KKworcHN4X2NsaWVudF9jYW5fY2FjaGU6CisJaWYgKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19FWENMVVNJVkUpIHsKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSB0cnVlOworCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOworCQljRllJKDEsICgiRXhjbHVzaXZlIE9wbG9jayBncmFudGVkIG9uIGlub2RlICVwIiwKKwkJCSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CisJfSBlbHNlIGlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfUkVBRCkKKwkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gdHJ1ZTsKKworCS8qIHdpbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIHVubG9jayBpZiB3ZSByZWVuYWJsZSB0aGUKKwkgICBmaWxlbWFwX2ZkYXRhd3JpdGUgKHdoaWNoIGRvZXMgbm90IHNlZW0gbmVjZXNzYXJ5ICovCisJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogYWxsIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgaW4gY2FsbGVyICovCiBzdGF0aWMgaW5saW5lIGludCBjaWZzX29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsCiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24sIGludCAqb3Bsb2NrLCBGSUxFX0FMTF9JTkZPICpidWYsCkBAIC0xNjcsNyArMjY5LDcgQEAKIAlpbnQgcmMgPSAtRUFDQ0VTOwogCWludCB4aWQsIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKQEAgLTE4MCw3ICsyODIsNyBAQAogCXhpZCA9IEdldFhpZCgpOwogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwotCXBUY29uID0gY2lmc19zYi0+dGNvbjsKKwl0Y29uID0gY2lmc19zYi0+dGNvbjsKIAogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19DUkVBVCkgewogCQkvKiBzZWFyY2ggaW5vZGUgZm9yIHRoaXMgZmlsZSBhbmQgZmlsbCBpbiBmaWxlLT5wcml2YXRlX2RhdGEgKi8KQEAgLTIyMCw2ICszMjIsNDUgQEAKIAogCWNGWUkoMSwgKCJpbm9kZSA9IDB4JXAgZmlsZSBmbGFncyBhcmUgMHgleCBmb3IgJXMiLAogCQkgaW5vZGUsIGZpbGUtPmZfZmxhZ3MsIGZ1bGxfcGF0aCkpOworCisJaWYgKG9wbG9ja0VuYWJsZWQpCisJCW9wbG9jayA9IFJFUV9PUExPQ0s7CisJZWxzZQorCQlvcGxvY2sgPSAwOworCisJaWYgKCF0Y29uLT5icm9rZW5fcG9zaXhfb3BlbiAmJiB0Y29uLT51bml4X2V4dCAmJgorCSAgICAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKKwkgICAgKENJRlNfVU5JWF9QT1NJWF9QQVRIX09QU19DQVAgJgorCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKKwkJaW50IG9mbGFncyA9IChpbnQpIGNpZnNfcG9zaXhfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKKwkJLyogY2FuIG5vdCByZWZyZXNoIGlub2RlIGluZm8gc2luY2Ugc2l6ZSBjb3VsZCBiZSBzdGFsZSAqLworCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZpbm9kZSwgaW5vZGUtPmlfc2IsCisJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCisJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CisJCWlmIChyYyA9PSAwKSB7CisJCQljRllJKDEsICgicG9zaXggb3BlbiBzdWNjZWVkZWQiKSk7CisJCQkvKiBubyBuZWVkIGZvciBzcGVjaWFsIGNhc2UgaGFuZGxpbmcgb2Ygc2V0dGluZyBtb2RlCisJCQkgICBvbiByZWFkIG9ubHkgZmlsZXMgbmVlZGVkIGhlcmUgKi8KKworCQkJY2lmc19wb3NpeF9vcGVuX2lub2RlX2hlbHBlcihpbm9kZSwgZmlsZSwgcENpZnNJbm9kZSwKKwkJCQkJCSAgICAgcENpZnNGaWxlLCBvcGxvY2ssIG5ldGZpZCk7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmICgocmMgPT0gLUVJTlZBTCkgfHwgKHJjID09IC1FT1BOT1RTVVBQKSkgeworCQkJaWYgKHRjb24tPnNlcy0+c2VydmVyTk9TKQorCQkJCWNFUlJPUigxLCAoInNlcnZlciAlcyBvZiB0eXBlICVzIHJldHVybmVkIgorCQkJCQkgICAiIHVuZXhwZWN0ZWQgZXJyb3Igb24gU01CIHBvc2l4IG9wZW4iCisJCQkJCSAgICIsIGRpc2FibGluZyBwb3NpeCBvcGVuIHN1cHBvcnQuIgorCQkJCQkgICAiIENoZWNrIGlmIHNlcnZlciB1cGRhdGUgYXZhaWxhYmxlLiIsCisJCQkJCSAgIHRjb24tPnNlcy0+c2VydmVyTmFtZSwKKwkJCQkJICAgdGNvbi0+c2VzLT5zZXJ2ZXJOT1MpKTsKKwkJCXRjb24tPmJyb2tlbl9wb3NpeF9vcGVuID0gdHJ1ZTsKKwkJfSBlbHNlIGlmICgocmMgIT0gLUVJTykgJiYgKHJjICE9IC1FUkVNT1RFKSAmJgorCQkJIChyYyAhPSAtRU9QTk9UU1VQUCkpIC8qIHBhdGggbm90IGZvdW5kIG9yIG5ldCBlcnIgKi8KKwkJCWdvdG8gb3V0OworCQkvKiBlbHNlIGZhbGx0aHJvdWdoIHRvIHJldHJ5IG9wZW4gdGhlIG9sZCB3YXkgb24gbmV0d29yayBpL28KKwkJICAgb3IgREZTIGVycm9ycyAqLworCX0KKwogCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI0OCwxMSArMzg5LDYgQEAKIAogCWRpc3Bvc2l0aW9uID0gY2lmc19nZXRfZGlzcG9zaXRpb24oZmlsZS0+Zl9mbGFncyk7CiAKLQlpZiAob3Bsb2NrRW5hYmxlZCkKLQkJb3Bsb2NrID0gUkVRX09QTE9DSzsKLQllbHNlCi0JCW9wbG9jayA9IDA7Ci0KIAkvKiBCQiBwYXNzIE9fU1lOQyBmbGFnIHRocm91Z2ggb24gZmlsZSBhdHRyaWJ1dGVzIC4uIEJCICovCiAKIAkvKiBBbHNvIHJlZnJlc2ggaW5vZGUgYnkgcGFzc2luZyBpbiBmaWxlX2luZm8gYnVmIHJldHVybmVkIGJ5IFNNQk9wZW4KQEAgLTI2OSw3ICs0MDUsNyBAQAogCX0KIAogCWlmIChjaWZzX3NiLT50Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9OVF9TTUJTKQotCQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCisJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAogCQkJIGRlc2lyZWRBY2Nlc3MsIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBidWYsCiAJCQkgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncwogCQkJCSAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTI3OCw3ICs0MTQsNyBAQAogCiAJaWYgKHJjID09IC1FSU8pIHsKIAkJLyogT2xkIHNlcnZlciwgdHJ5IGxlZ2FjeSBzdHlsZSBPcGVuWCAqLwotCQlyYyA9IFNNQkxlZ2FjeU9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKKwkJcmMgPSBTTUJMZWdhY3lPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKIAkJCWRlc2lyZWRBY2Nlc3MsIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBidWYsCiAJCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCiAJCQkJJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0yOTUsMTIgKzQzMSwxMiBAQAogCX0KIAlwQ2lmc0ZpbGUgPSBjaWZzX2luaXRfcHJpdmF0ZShmaWxlLT5wcml2YXRlX2RhdGEsIGlub2RlLCBmaWxlLCBuZXRmaWQpOwogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmcFRjb24tPm9wZW5GaWxlTGlzdCk7CisJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZ0Y29uLT5vcGVuRmlsZUxpc3QpOwogCiAJcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAocENpZnNJbm9kZSkgewogCQlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCi0JCQkJCSAgICBwQ2lmc0ZpbGUsIHBUY29uLAorCQkJCQkgICAgcENpZnNGaWxlLCB0Y29uLAogCQkJCQkgICAgJm9wbG9jaywgYnVmLCBmdWxsX3BhdGgsIHhpZCk7CiAJfSBlbHNlIHsKIAkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKQEAgLTMwOSw3ICs0NDUsNyBAQAogCWlmIChvcGxvY2sgJiBDSUZTX0NSRUFURV9BQ1RJT04pIHsKIAkJLyogdGltZSB0byBzZXQgbW9kZSB3aGljaCB3ZSBjYW4gbm90IHNldCBlYXJsaWVyIGR1ZSB0bwogCQkgICBwcm9ibGVtcyBjcmVhdGluZyBuZXcgcmVhZC1vbmx5IGZpbGVzICovCi0JCWlmIChwVGNvbi0+dW5peF9leHQpIHsKKwkJaWYgKHRjb24tPnVuaXhfZXh0KSB7CiAJCQlzdHJ1Y3QgY2lmc191bml4X3NldF9pbmZvX2FyZ3MgYXJncyA9IHsKIAkJCQkubW9kZQk9IGlub2RlLT5pX21vZGUsCiAJCQkJLnVpZAk9IE5PX0NIQU5HRV82NCwKQEAgLTMxOSw3ICs0NTUsNyBAQAogCQkJCS5tdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCQkuZGV2aWNlCT0gMCwKIAkJCX07Ci0JCQlDSUZTU01CVW5peFNldEluZm8oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCAmYXJncywKKwkJCUNJRlNTTUJVbml4U2V0SW5mbyh4aWQsIHRjb24sIGZ1bGxfcGF0aCwgJmFyZ3MsCiAJCQkJCSAgICBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJCSAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CkBAIC0zNDksNyArNDg1LDcgQEAKIAlpbnQgcmMgPSAtRUFDQ0VTOwogCWludCB4aWQsIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOworCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CkBAIC0zODcsNyArNTIzLDcgQEAKIAl9CiAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7Ci0JcFRjb24gPSBjaWZzX3NiLT50Y29uOworCXRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAvKiBjYW4gbm90IGdyYWIgcmVuYW1lIHNlbSBoZXJlIGJlY2F1c2UgdmFyaW91cyBvcHMsIGluY2x1ZGluZwogICAgdGhvc2UgdGhhdCBhbHJlYWR5IGhhdmUgdGhlIHJlbmFtZSBzZW0gY2FuIGVuZCB1cCBjYXVzaW5nIHdyaXRlcGFnZQpAQCAtNDA0LDIwICs1NDAsMzcgQEAKIAogCWNGWUkoMSwgKCJpbm9kZSA9IDB4JXAgZmlsZSBmbGFncyAweCV4IGZvciAlcyIsCiAJCSBpbm9kZSwgZmlsZS0+Zl9mbGFncywgZnVsbF9wYXRoKSk7Ci0JZGVzaXJlZEFjY2VzcyA9IGNpZnNfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKIAogCWlmIChvcGxvY2tFbmFibGVkKQogCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwogCWVsc2UKIAkJb3Bsb2NrID0gMDsKIAorCWlmICh0Y29uLT51bml4X2V4dCAmJiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgJiYKKwkgICAgKENJRlNfVU5JWF9QT1NJWF9QQVRIX09QU19DQVAgJgorCQkJbGU2NF90b19jcHUodGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKKwkJaW50IG9mbGFncyA9IChpbnQpIGNpZnNfcG9zaXhfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKKwkJLyogY2FuIG5vdCByZWZyZXNoIGlub2RlIGluZm8gc2luY2Ugc2l6ZSBjb3VsZCBiZSBzdGFsZSAqLworCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsIE5VTEwsIGlub2RlLT5pX3NiLAorCQkJCSAgICAgY2lmc19zYi0+bW50X2ZpbGVfbW9kZSAvKiBpZ25vcmVkICovLAorCQkJCSAgICAgb2ZsYWdzLCAmb3Bsb2NrLCAmbmV0ZmlkLCB4aWQpOworCQlpZiAocmMgPT0gMCkgeworCQkJY0ZZSSgxLCAoInBvc2l4IHJlb3BlbiBzdWNjZWVkZWQiKSk7CisJCQlnb3RvIHJlb3Blbl9zdWNjZXNzOworCQl9CisJCS8qIGZhbGx0aHJvdWdoIHRvIHJldHJ5IG9wZW4gdGhlIG9sZCB3YXkgb24gZXJyb3JzLCBlc3BlY2lhbGx5CisJCSAgIGluIHRoZSByZWNvbm5lY3QgcGF0aCBpdCBpcyBpbXBvcnRhbnQgdG8gcmV0cnkgaGFyZCAqLworCX0KKworCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CisKIAkvKiBDYW4gbm90IHJlZnJlc2ggaW5vZGUgYnkgcGFzc2luZyBpbiBmaWxlX2luZm8gYnVmIHRvIGJlIHJldHVybmVkCiAJICAgYnkgU01CT3BlbiBhbmQgdGhlbiBjYWxsaW5nIGdldF9pbm9kZV9pbmZvIHdpdGggcmV0dXJuZWQgYnVmCiAJICAgc2luY2UgZmlsZSBtaWdodCBoYXZlIHdyaXRlIGJlaGluZCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZmx1c2hlZAogCSAgIGFuZCBzZXJ2ZXIgdmVyc2lvbiBvZiBmaWxlIHNpemUgY2FuIGJlIHN0YWxlLiBJZiB3ZSBrbmV3IGZvciBzdXJlCiAJICAgdGhhdCBpbm9kZSB3YXMgbm90IGRpcnR5IGxvY2FsbHkgd2UgY291bGQgZG8gdGhpcyAqLwogCi0JcmMgPSBDSUZTU01CT3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLCBkZXNpcmVkQWNjZXNzLAorCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLCBkZXNpcmVkQWNjZXNzLAogCQkJIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBOVUxMLAogCQkJIGNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTQyNiw2ICs1NzksNyBAQAogCQljRllJKDEsICgiY2lmc19vcGVuIHJldHVybmVkIDB4JXgiLCByYykpOwogCQljRllJKDEsICgib3Bsb2NrOiAlZCIsIG9wbG9jaykpOwogCX0gZWxzZSB7CityZW9wZW5fc3VjY2VzczoKIAkJcENpZnNGaWxlLT5uZXRmaWQgPSBuZXRmaWQ7CiAJCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IGZhbHNlOwogCQl1cCgmcENpZnNGaWxlLT5maF9zZW0pOwpAQCAtNDM5LDcgKzU5Myw3IEBACiAJCQkgICBnbyB0byBzZXJ2ZXIgdG8gZ2V0IGlub2RlIGluZm8gKi8KIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IGZhbHNlOwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IGZhbHNlOwotCQkJCWlmIChwVGNvbi0+dW5peF9leHQpCisJCQkJaWYgKHRjb24tPnVuaXhfZXh0KQogCQkJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peCgmaW5vZGUsCiAJCQkJCQlmdWxsX3BhdGgsIGlub2RlLT5pX3NiLCB4aWQpOwogCQkJCWVsc2UKQEAgLTQ2Nyw3ICs2MjEsNiBAQAogCQkJY2lmc19yZWxvY2tfZmlsZShwQ2lmc0ZpbGUpOwogCQl9CiAJfQotCiAJa2ZyZWUoZnVsbF9wYXRoKTsKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHJjOwpAQCAtMTUyMyw2ICsxNjc2LDkgQEAKIHsKIAlpbnQgeGlkOwogCWludCByYyA9IDA7CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKKwlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpzbWJmaWxlID0KKwkJKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAl4aWQgPSBHZXRYaWQoKTsKQEAgLTE1MzQsNyArMTY5MCwxMiBAQAogCWlmIChyYyA9PSAwKSB7CiAJCXJjID0gQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjOwogCQlDSUZTX0koaW5vZGUpLT53cml0ZV9iZWhpbmRfcmMgPSAwOworCQl0Y29uID0gQ0lGU19TQihpbm9kZS0+aV9zYiktPnRjb247CisJCWlmICghcmMgJiYgdGNvbiAmJiBzbWJmaWxlICYmCisJCSAgICEoQ0lGU19TQihpbm9kZS0+aV9zYiktPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT1NTWU5DKSkKKwkJCXJjID0gQ0lGU1NNQkZsdXNoKHhpZCwgdGNvbiwgc21iZmlsZS0+bmV0ZmlkKTsKIAl9CisKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDQ2OTBhMzYuLmE4Nzk3Y2MgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTc2Myw2ICs3NjMsOSBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uID0gY2lmc19zYi0+dGNvbjsKIAlGSUxFX0JBU0lDX0lORk8JaW5mb19idWY7CiAKKwlpZiAoYXR0cnMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9BVElNRSkgewogCQlzZXRfdGltZSA9IHRydWU7CiAJCWluZm9fYnVmLkxhc3RBY2Nlc3NUaW1lID0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZnNjdGwuaCBiL2ZzL2NpZnMvc21iZnNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDU2Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvY2lmcy9zbWJmc2N0bC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgIGZzL2NpZnMvc21iZnNjdGwuaDogU01CLCBDSUZTLCBTTUIyIEZTQ1RMIGRlZmluaXRpb25zCisgKgorICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDkKKyAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIElPQ1RMIGluZm9ybWF0aW9uICovCisvKgorICogTGlzdCBvZiBpb2N0bC9mc2N0bCBmdW5jdGlvbiBjb2RlcyB0aGF0IGFyZSBvciBjb3VsZCBiZSB1c2VmdWwgaW4gdGhlCisgKiBmdXR1cmUgdG8gcmVtb3RlIGNsaWVudHMgbGlrZSBjaWZzIG9yIFNNQjIgY2xpZW50LiAgVGhlcmUgaXMgcHJvYmFibHkKKyAqIGEgc2xpZ2h0bHkgbGFyZ2VyIHNldCBvZiBmc2N0bHMgdGhhdCBOVEZTIGxvY2FsIGZpbGVzeXN0ZW0gY291bGQgaGFuZGxlLAorICogaW5jbHVkaW5nIHRoZSBzZXZlbiBiZWxvdyB0aGF0IHdlIGRvIG5vdCBoYXZlIHN0cnVjdCBkZWZpbml0aW9ucyBmb3IuCisgKiBFdmVuIHdpdGggcHJvdG9jb2wgZGVmaW5pdGlvbnMgZm9yIG1vc3Qgb2YgdGhlc2Ugbm93IGF2YWlsYWJsZSwgd2Ugc3RpbGwKKyAqIG5lZWQgdG8gZG8gc29tZSBleHBlcmltZW50YXRpb24gdG8gaWRlbnRpZnkgd2hpY2ggYXJlIHByYWN0aWNhbCB0byBkbworICogcmVtb3RlbHkuICBTb21lIG9mIHRoZSBmb2xsb3dpbmcsIHN1Y2ggYXMgdGhlIGVuY3J5cHRpb24vY29tcHJlc3Npb24gb25lcworICogY291bGQgYmUgaW52b2tlZCBmcm9tIHRvb2xzIHZpYSBhIHNwZWNpYWxpemVkIGhvb2sgaW50byB0aGUgVkZTIHJhdGhlcgorICogdGhhbiB2aWEgdGhlIHN0YW5kYXJkIHZmcyBlbnRyeSBwb2ludHMKKyAqLworI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8xIDB4MDAwOTAwMDAKKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMiAweDAwMDkwMDA0CisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfQkFUQ0hfT1BMT0NLICAgMHgwMDA5MDAwOAorI2RlZmluZSBGU0NUTF9MT0NLX1ZPTFVNRSAgICAgICAgICAgIDB4MDAwOTAwMTgKKyNkZWZpbmUgRlNDVExfVU5MT0NLX1ZPTFVNRSAgICAgICAgICAweDAwMDkwMDFDCisjZGVmaW5lIEZTQ1RMX0lTX1BBVEhOQU1FX1ZBTElEICAgICAgMHgwMDA5MDAyQyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9DT01QUkVTU0lPTiAgICAgICAgMHgwMDA5MDAzQyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9DT01QUkVTU0lPTiAgICAgICAgMHgwMDA5QzA0MCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX0ZBVF9CUEIgICAgICAgICAgMHgwMDA5MDA1OCAvKiBCQiBhZGQgc3RydWN0ICovCisvKiBWZXJpZnkgdGhlIG5leHQgRlNDVEwgbnVtYmVyLCB3ZSBoYWQgaXQgYXMgMHgwMDA5MDA5MCBiZWZvcmUgKi8KKyNkZWZpbmUgRlNDVExfRklMRVNZU1RFTV9HRVRfU1RBVFMgICAweDAwMDkwMDYwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX05URlNfVk9MVU1FX0RBVEEgICAweDAwMDkwMDY0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX1JFVFJJRVZBTF9QT0lOVEVSUyAweDAwMDkwMDczIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfSVNfVk9MVU1FX0RJUlRZICAgICAgICAweDAwMDkwMDc4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfQUxMT1dfRVhURU5ERURfREFTRF9JTyAweDAwMDkwMDgzIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9GSUxURVJfT1BMT0NLICAweDAwMDkwMDhDCisjZGVmaW5lIEZTQ1RMX0ZJTkRfRklMRVNfQllfU0lEICAgICAgMHgwMDA5MDA4RiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9PQkpFQ1RfSUQgICAgICAgICAgMHgwMDA5MDA5OCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9PQkpFQ1RfSUQgICAgICAgICAgMHgwMDA5MDA5QyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0RFTEVURV9PQkpFQ1RfSUQgICAgICAgMHgwMDA5MDBBMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0RFTEVURV9SRVBBUlNFX1BPSU5UICAgMHgwMDA5MDBBQyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9PQkpFQ1RfSURfRVhURU5ERUQgMHgwMDA5MDBCQyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0NSRUFURV9PUl9HRVRfT0JKRUNUX0lEIDB4MDAwOTAwQzAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfU1BBUlNFICAgICAgICAgICAgIDB4MDAwOTAwQzQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfWkVST19EQVRBICAgICAgICAgIDB4MDAwOTAwQzggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgIDB4MDAwOTAwRDcgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9FTkNSWVBUSU9OX0ZTQ1RMX0lPICAgIDB4MDAwOTAwREIgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9XUklURV9SQVdfRU5DUllQVEVEICAgIDB4MDAwOTAwREYgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9SRUFEX1JBV19FTkNSWVBURUQgICAgIDB4MDAwOTAwRTMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9SRUFEX0ZJTEVfVVNOX0RBVEEgICAgIDB4MDAwOTAwRUIgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9XUklURV9VU05fQ0xPU0VfUkVDT1JEIDB4MDAwOTAwRUYgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TSVNfQ09QWUZJTEUgICAgICAgICAgIDB4MDAwOTAxMDAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9SRUNBTExfRklMRSAgICAgICAgICAgIDB4MDAwOTAxMTcgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9TUEFSSU5HX0lORk8gICAgIDB4MDAwOTAxMzggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfWkVST19PTl9ERUFMTE9DICAgIDB4MDAwOTAxOTQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfU0hPUlRfTkFNRV9CRUhBVklPUiAweDAwMDkwMUI0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfQUxMT0NBVEVEX1JBTkdFUyAweDAwMDk0MENGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0RFRkVDVF9NQU5BR0VNRU5UICAweDAwMDk4MTM0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0lTX0xJTktfRklMRVMgICAgICAgICAweDAwMDlDMTA0CisjZGVmaW5lIEZTQ1RMX1BJUEVfUEVFSyAgICAgICAgICAgICAgMHgwMDExNDAwQyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1BJUEVfVFJBTlNDRUlWRSAgICAgICAgMHgwMDExQzAxNyAvKiBCQiBhZGQgc3RydWN0ICovCisvKiBzdHJhbmdlIHRoYXQgdGhlIG51bWJlciBmb3IgdGhpcyBvcCBpcyBub3Qgc2VxdWVudGlhbCB3aXRoIHByZXZpb3VzIG9wICovCisjZGVmaW5lIEZTQ1RMX1BJUEVfV0FJVCAgICAgICAgICAgICAgMHgwMDExMDAxOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0xNUl9HRVRfTElOS19UUkFDS19JTkYgMHgwMDE0MDBFOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0xNUl9TRVRfTElOS19UUkFDS19JTkYgMHgwMDE0MDBFQyAvKiBCQiBhZGQgc3RydWN0ICovCisKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlQgICAweEEwMDAwMDAzCisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX0hTTSAgICAgICAgICAgMHhDMDAwMDAwNAorI2RlZmluZSBJT19SRVBBUlNFX1RBR19TSVMgICAgICAgICAgIDB4ODAwMDAwMDcKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggZDAxNDVjYS4uMDk0OWI0MyAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTE0MDIsNiArMTQwMiw3IEBACiAJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDE7CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKQEAgLTE0NTQsNiArMTQ1NSw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWFjY3RfdXBkYXRlX2ludGVncmFscyhjdXJyZW50KTsKIAlmcmVlX2Jwcm0oYnBybSk7CkBAIC0xNDcwLDYgKzE0NzIsNyBAQAogCX0KIAogb3V0X3VubG9jazoKKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQ1ZTU5ZDMuLmZmNzg2NjggMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC01MjIsNiArNTIyLDExIEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgdWlmcjMyLCBzaXplb2YoKnVpZnIzMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmci5pZnJfZGF0YSA9IGNvbXBhdF9wdHIodWlmcjMyLT5pZnJfaWZydS5pZnJ1X2RhdGEpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgdWlmcjMyLCBzaXplb2YoKnVpZnIzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xOTkzLDYgKzE5OTgsOCBAQAogQ09NUEFUSUJMRV9JT0NUTChUVU5HRVRGRUFUVVJFUykKIENPTVBBVElCTEVfSU9DVEwoVFVOU0VUT0ZGTE9BRCkKIENPTVBBVElCTEVfSU9DVEwoVFVOU0VUVFhGSUxURVIpCitDT01QQVRJQkxFX0lPQ1RMKFRVTkdFVFNOREJVRikKK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUU05EQlVGKQogLyogQmlnIFYgKi8KIENPTVBBVElCTEVfSU9DVEwoVlRfU0VUTU9ERSkKIENPTVBBVElCTEVfSU9DVEwoVlRfR0VUTU9ERSkKQEAgLTI1NjYsNiArMjU3Myw3IEBACiBIQU5ETEVfSU9DVEwoU0lPQ0dJRkFERFIsIGRldl9pZnNpb2MpCiBIQU5ETEVfSU9DVEwoU0lPQ1NJRkFERFIsIGRldl9pZnNpb2MpCiBIQU5ETEVfSU9DVEwoU0lPQ1NJRkhXQlJPQURDQVNULCBkZXZfaWZzaW9jKQorSEFORExFX0lPQ1RMKFNJT0NTSFdUU1RBTVAsIGRldl9pZnNpb2MpCiAKIC8qIGlvY3RscyB1c2VkIGJ5IGFwcGxldGFsayBkZHAuYyAqLwogSEFORExFX0lPQ1RMKFNJT0NBVEFMS0RJRkFERFIsIGRldl9pZnNpb2MpCmRpZmYgLS1naXQgYS9mcy9kbG0vZGlyLmMgYi9mcy9kbG0vZGlyLmMKaW5kZXggOTI5NjlmOC4uODU4ZmJhMSAxMDA2NDQKLS0tIGEvZnMvZGxtL2Rpci5jCisrKyBiL2ZzL2RsbS9kaXIuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIAlidWNrZXQgPSBkaXJfaGFzaChscywgbmFtZSwgbmFtZWxlbik7CiAKLQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAKIAlkZSA9IHNlYXJjaF9idWNrZXQobHMsIG5hbWUsIG5hbWVsZW4sIGJ1Y2tldCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWxpc3RfZGVsKCZkZS0+bGlzdCk7CiAJa2ZyZWUoZGUpOwogIG91dDoKLQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogfQogCiB2b2lkIGRsbV9kaXJfY2xlYXIoc3RydWN0IGRsbV9scyAqbHMpCkBAIC0xODUsMTQgKzE4NSwxNCBAQAogCURMTV9BU1NFUlQobGlzdF9lbXB0eSgmbHMtPmxzX3JlY292ZXJfbGlzdCksICk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbHMtPmxzX2RpcnRibF9zaXplOyBpKyspIHsKLQkJd3JpdGVfbG9jaygmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOwogCQloZWFkID0gJmxzLT5sc19kaXJ0YmxbaV0ubGlzdDsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCQlkZSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGRsbV9kaXJlbnRyeSwgbGlzdCk7CiAJCQlsaXN0X2RlbCgmZGUtPmxpc3QpOwogCQkJcHV0X2ZyZWVfZGUobHMsIGRlKTsKIAkJfQotCQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CisJCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOwogCX0KIH0KIApAQCAtMzA3LDE3ICszMDcsMTcgQEAKIAogCWJ1Y2tldCA9IGRpcl9oYXNoKGxzLCBuYW1lLCBuYW1lbGVuKTsKIAotCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAlkZSA9IHNlYXJjaF9idWNrZXQobHMsIG5hbWUsIG5hbWVsZW4sIGJ1Y2tldCk7CiAJaWYgKGRlKSB7CiAJCSpyX25vZGVpZCA9IGRlLT5tYXN0ZXJfbm9kZWlkOwotCQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAkJaWYgKCpyX25vZGVpZCA9PSBub2RlaWQpCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAogCWlmIChuYW1lbGVuID4gRExNX1JFU05BTUVfTUFYTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMzMCw3ICszMzAsNyBAQAogCWRlLT5sZW5ndGggPSBuYW1lbGVuOwogCW1lbWNweShkZS0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKLQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAJdG1wID0gc2VhcmNoX2J1Y2tldChscywgbmFtZSwgbmFtZWxlbiwgYnVja2V0KTsKIAlpZiAodG1wKSB7CiAJCWtmcmVlKGRlKTsKQEAgLTMzOSw3ICszMzksNyBAQAogCQlsaXN0X2FkZF90YWlsKCZkZS0+bGlzdCwgJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5saXN0KTsKIAl9CiAJKnJfbm9kZWlkID0gZGUtPm1hc3Rlcl9ub2RlaWQ7Ci0Jd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCmluZGV4IDA3NmU4NmYuLmQwMWNhMGEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAorKysgYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKQEAgLTk5LDcgKzk5LDcgQEAKIAogc3RydWN0IGRsbV9kaXJ0YWJsZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXJ3bG9ja190CQlsb2NrOworCXNwaW5sb2NrX3QJCWxvY2s7CiB9OwogCiBzdHJ1Y3QgZGxtX3JzYnRhYmxlIHsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2NrLmMgYi9mcy9kbG0vbG9jay5jCmluZGV4IDAxZTdkMzkuLjIwNWVjOTUgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2NrLmMKKysrIGIvZnMvZGxtL2xvY2suYwpAQCAtODM1LDcgKzgzNSw3IEBACiAJCWxrYi0+bGtiX3dhaXRfY291bnQrKzsKIAkJaG9sZF9sa2IobGtiKTsKIAotCQlsb2dfZGVidWcobHMsICJhZGQgb3ZlcmxhcCAleCBjdXIgJWQgbmV3ICVkIGNvdW50ICVkIGZsYWdzICV4IiwKKwkJbG9nX2RlYnVnKGxzLCAiYWRkd2FpdCAleCBjdXIgJWQgb3ZlcmxhcCAlZCBjb3VudCAlZCBmICV4IiwKIAkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX3dhaXRfdHlwZSwgbXN0eXBlLAogCQkJICBsa2ItPmxrYl93YWl0X2NvdW50LCBsa2ItPmxrYl9mbGFncyk7CiAJCWdvdG8gb3V0OwpAQCAtODUxLDcgKzg1MSw3IEBACiAJbGlzdF9hZGQoJmxrYi0+bGtiX3dhaXRfcmVwbHksICZscy0+bHNfd2FpdGVycyk7CiAgb3V0OgogCWlmIChlcnJvcikKLQkJbG9nX2Vycm9yKGxzLCAiYWRkX3RvX3dhaXRlcnMgJXggZXJyb3IgJWQgZmxhZ3MgJXggJWQgJWQgJXMiLAorCQlsb2dfZXJyb3IobHMsICJhZGR3YWl0IGVycm9yICV4ICVkIGZsYWdzICV4ICVkICVkICVzIiwKIAkJCSAgbGtiLT5sa2JfaWQsIGVycm9yLCBsa2ItPmxrYl9mbGFncywgbXN0eXBlLAogCQkJICBsa2ItPmxrYl93YWl0X3R5cGUsIGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbmFtZSk7CiAJbXV0ZXhfdW5sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7CkBAIC04NjMsMjMgKzg2Myw1NSBAQAogICAgcmVxdWVzdCByZXBseSBvbiB0aGUgcmVxdWVzdHF1ZXVlKSBiZXR3ZWVuIGRsbV9yZWNvdmVyX3dhaXRlcnNfcHJlKCkgd2hpY2gKICAgIHNldCBSRVNFTkQgYW5kIGRsbV9yZWNvdmVyX3dhaXRlcnNfcG9zdCgpICovCiAKLXN0YXRpYyBpbnQgX3JlbW92ZV9mcm9tX3dhaXRlcnMoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IG1zdHlwZSkKK3N0YXRpYyBpbnQgX3JlbW92ZV9mcm9tX3dhaXRlcnMoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IG1zdHlwZSwKKwkJCQlzdHJ1Y3QgZGxtX21lc3NhZ2UgKm1zKQogewogCXN0cnVjdCBkbG1fbHMgKmxzID0gbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19sczsKIAlpbnQgb3ZlcmxhcF9kb25lID0gMDsKIAogCWlmIChpc19vdmVybGFwX3VubG9jayhsa2IpICYmIChtc3R5cGUgPT0gRExNX01TR19VTkxPQ0tfUkVQTFkpKSB7CisJCWxvZ19kZWJ1ZyhscywgInJlbXdhaXQgJXggdW5sb2NrX3JlcGx5IG92ZXJsYXAiLCBsa2ItPmxrYl9pZCk7CiAJCWxrYi0+bGtiX2ZsYWdzICY9IH5ETE1fSUZMX09WRVJMQVBfVU5MT0NLOwogCQlvdmVybGFwX2RvbmUgPSAxOwogCQlnb3RvIG91dF9kZWw7CiAJfQogCiAJaWYgKGlzX292ZXJsYXBfY2FuY2VsKGxrYikgJiYgKG1zdHlwZSA9PSBETE1fTVNHX0NBTkNFTF9SRVBMWSkpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCBjYW5jZWxfcmVwbHkgb3ZlcmxhcCIsIGxrYi0+bGtiX2lkKTsKIAkJbGtiLT5sa2JfZmxhZ3MgJj0gfkRMTV9JRkxfT1ZFUkxBUF9DQU5DRUw7CiAJCW92ZXJsYXBfZG9uZSA9IDE7CiAJCWdvdG8gb3V0X2RlbDsKIAl9CiAKKwkvKiBDYW5jZWwgc3RhdGUgd2FzIHByZWVtcHRpdmVseSBjbGVhcmVkIGJ5IGEgc3VjY2Vzc2Z1bCBjb252ZXJ0LAorCSAgIHNlZSBuZXh0IGNvbW1lbnQsIG5vdGhpbmcgdG8gZG8uICovCisKKwlpZiAoKG1zdHlwZSA9PSBETE1fTVNHX0NBTkNFTF9SRVBMWSkgJiYKKwkgICAgKGxrYi0+bGtiX3dhaXRfdHlwZSAhPSBETE1fTVNHX0NBTkNFTCkpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCBjYW5jZWxfcmVwbHkgd2FpdF90eXBlICVkIiwKKwkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBSZW1vdmUgZm9yIHRoZSBjb252ZXJ0IHJlcGx5LCBhbmQgcHJlbXB0aXZlbHkgcmVtb3ZlIGZvciB0aGUKKwkgICBjYW5jZWwgcmVwbHkuICBBIGNvbnZlcnQgaGFzIGJlZW4gZ3JhbnRlZCB3aGlsZSB0aGVyZSdzIHN0aWxsCisJICAgYW4gb3V0c3RhbmRpbmcgY2FuY2VsIG9uIGl0ICh0aGUgY2FuY2VsIGlzIG1vb3QgYW5kIHRoZSByZXN1bHQKKwkgICBpbiB0aGUgY2FuY2VsIHJlcGx5IHNob3VsZCBiZSAwKS4gIFdlIHByZWVtcHQgdGhlIGNhbmNlbCByZXBseQorCSAgIGJlY2F1c2UgdGhlIGFwcCBnZXRzIHRoZSBjb252ZXJ0IHJlc3VsdCBhbmQgdGhlbiBjYW4gZm9sbG93IHVwCisJICAgd2l0aCBhbm90aGVyIG9wLCBsaWtlIGNvbnZlcnQuICBUaGlzIHN1YnNlcXVlbnQgb3Agd291bGQgc2VlIHRoZQorCSAgIGxpbmdlcmluZyBzdGF0ZSBvZiB0aGUgY2FuY2VsIGFuZCBmYWlsIHdpdGggLUVCVVNZLiAqLworCisJaWYgKChtc3R5cGUgPT0gRExNX01TR19DT05WRVJUX1JFUExZKSAmJgorCSAgICAobGtiLT5sa2Jfd2FpdF90eXBlID09IERMTV9NU0dfQ09OVkVSVCkgJiYKKwkgICAgaXNfb3ZlcmxhcF9jYW5jZWwobGtiKSAmJiBtcyAmJiAhbXMtPm1fcmVzdWx0KSB7CisJCWxvZ19kZWJ1ZyhscywgInJlbXdhaXQgJXggY29udmVydF9yZXBseSB6YXAgb3ZlcmxhcF9jYW5jZWwiLAorCQkJICBsa2ItPmxrYl9pZCk7CisJCWxrYi0+bGtiX3dhaXRfdHlwZSA9IDA7CisJCWxrYi0+bGtiX2ZsYWdzICY9IH5ETE1fSUZMX09WRVJMQVBfQ0FOQ0VMOworCQlsa2ItPmxrYl93YWl0X2NvdW50LS07CisJCWdvdG8gb3V0X2RlbDsKKwl9CisKIAkvKiBOLkIuIHR5cGUgb2YgcmVwbHkgbWF5IG5vdCBhbHdheXMgY29ycmVzcG9uZCB0byB0eXBlIG9mIG9yaWdpbmFsCiAJICAgbXNnIGR1ZSB0byBsb29rdXAtPnJlcXVlc3Qgb3B0aW1pemF0aW9uLCB2ZXJpZnkgb3RoZXJzPyAqLwogCkBAIC04ODgsOCArOTIwLDggQEAKIAkJZ290byBvdXRfZGVsOwogCX0KIAotCWxvZ19lcnJvcihscywgInJlbW92ZV9mcm9tX3dhaXRlcnMgbGtpZCAleCBmbGFncyAleCB0eXBlcyAlZCAlZCIsCi0JCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX2ZsYWdzLCBtc3R5cGUsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CisJbG9nX2Vycm9yKGxzLCAicmVtd2FpdCBlcnJvciAleCByZXBseSAlZCBmbGFncyAleCBubyB3YWl0X3R5cGUiLAorCQkgIGxrYi0+bGtiX2lkLCBtc3R5cGUsIGxrYi0+bGtiX2ZsYWdzKTsKIAlyZXR1cm4gLTE7CiAKICBvdXRfZGVsOgpAQCAtODk5LDcgKzkzMSw3IEBACiAJICAgdGhpcyB3b3VsZCBoYXBwZW4gKi8KIAogCWlmIChvdmVybGFwX2RvbmUgJiYgbGtiLT5sa2Jfd2FpdF90eXBlKSB7Ci0JCWxvZ19lcnJvcihscywgInJlbW92ZV9mcm9tX3dhaXRlcnMgJXggcmVwbHkgJWQgZ2l2ZSB1cCBvbiAlZCIsCisJCWxvZ19lcnJvcihscywgInJlbXdhaXQgZXJyb3IgJXggcmVwbHkgJWQgd2FpdF90eXBlICVkIG92ZXJsYXAiLAogCQkJICBsa2ItPmxrYl9pZCwgbXN0eXBlLCBsa2ItPmxrYl93YWl0X3R5cGUpOwogCQlsa2ItPmxrYl93YWl0X2NvdW50LS07CiAJCWxrYi0+bGtiX3dhaXRfdHlwZSA9IDA7CkBAIC05MjEsNyArOTUzLDcgQEAKIAlpbnQgZXJyb3I7CiAKIAltdXRleF9sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7Ci0JZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zdHlwZSk7CisJZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zdHlwZSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtOTM2LDcgKzk2OCw3IEBACiAKIAlpZiAobXMgIT0gJmxzLT5sc19zdHViX21zKQogCQltdXRleF9sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7Ci0JZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zLT5tX3R5cGUpOworCWVycm9yID0gX3JlbW92ZV9mcm9tX3dhaXRlcnMobGtiLCBtcy0+bV90eXBlLCBtcyk7CiAJaWYgKG1zICE9ICZscy0+bHNfc3R1Yl9tcykKIAkJbXV0ZXhfdW5sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMjA4Myw2ICsyMTE1LDExIEBACiAJbGtiLT5sa2JfdGltZW91dF9jcyA9IGFyZ3MtPnRpbWVvdXQ7CiAJcnYgPSAwOwogIG91dDoKKwlpZiAocnYpCisJCWxvZ19kZWJ1ZyhscywgInZhbGlkYXRlX2xvY2tfYXJncyAlZCAleCAleCAleCAlZCAlZCAlcyIsCisJCQkgIHJ2LCBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfZmxhZ3MsIGFyZ3MtPmZsYWdzLAorCQkJICBsa2ItPmxrYl9zdGF0dXMsIGxrYi0+bGtiX3dhaXRfdHlwZSwKKwkJCSAgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTIxNDksNiArMjE4NiwxMyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAorCQkvKiB0aGVyZSdzIG5vdGhpbmcgdG8gY2FuY2VsICovCisJCWlmIChsa2ItPmxrYl9zdGF0dXMgPT0gRExNX0xLU1RTX0dSQU5URUQgJiYKKwkJICAgICFsa2ItPmxrYl93YWl0X3R5cGUpIHsKKwkJCXJ2ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwogCQlzd2l0Y2ggKGxrYi0+bGtiX3dhaXRfdHlwZSkgewogCQljYXNlIERMTV9NU0dfTE9PS1VQOgogCQljYXNlIERMTV9NU0dfUkVRVUVTVDoKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2Nrc3BhY2UuYyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwppbmRleCBhYTMyZTVmLi5jZDhlMmRmIDEwMDY0NAotLS0gYS9mcy9kbG0vbG9ja3NwYWNlLmMKKysrIGIvZnMvZGxtL2xvY2tzcGFjZS5jCkBAIC00ODcsNyArNDg3LDcgQEAKIAkJZ290byBvdXRfbGtiZnJlZTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCUlOSVRfTElTVF9IRUFEKCZscy0+bHNfZGlydGJsW2ldLmxpc3QpOwotCQlyd2xvY2tfaW5pdCgmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJmxzLT5sc193YWl0ZXJzKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMTAzYTVlYi4uNjA5MTA4YSAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgogKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTIxLDcgKzIxLDcgQEAKICAqCiAgKiBDbHVzdGVyIG5vZGVzIGFyZSByZWZlcnJlZCB0byBieSB0aGVpciBub2RlaWRzLiBub2RlaWRzIGFyZQogICogc2ltcGx5IDMyIGJpdCBudW1iZXJzIHRvIHRoZSBsb2NraW5nIG1vZHVsZSAtIGlmIHRoZXkgbmVlZCB0bwotICogYmUgZXhwYW5kZWQgZm9yIHRoZSBjbHVzdGVyIGluZnJhc3RydWN0dXJlIHRoZW4gdGhhdCBpcyBpdCdzCisgKiBiZSBleHBhbmRlZCBmb3IgdGhlIGNsdXN0ZXIgaW5mcmFzdHJ1Y3R1cmUgdGhlbiB0aGF0IGlzIGl0cwogICogcmVzcG9uc2liaWxpdHkuIEl0IGlzIHRoaXMgbGF5ZXIncwogICogcmVzcG9uc2liaWxpdHkgdG8gcmVzb2x2ZSB0aGVzZSBpbnRvIElQIGFkZHJlc3Mgb3IKICAqIHdoYXRldmVyIGl0IG5lZWRzIGZvciBpbnRlci1ub2RlIGNvbW11bmljYXRpb24uCkBAIC0zNiw5ICszNiw5IEBACiAgKiBvZiBoaWdoIGxvYWQuIEFsc28sIHRoaXMgd2F5LCB0aGUgc2VuZGluZyB0aHJlYWQgY2FuIGNvbGxlY3QgdG9nZXRoZXIKICAqIG1lc3NhZ2VzIGJvdW5kIGZvciBvbmUgbm9kZSBhbmQgc2VuZCB0aGVtIGluIG9uZSBibG9jay4KICAqCi0gKiBsb3djb21tcyB3aWxsIGNob29zZSB0byB1c2Ugd2l0aGVyIFRDUCBvciBTQ1RQIGFzIGl0cyB0cmFuc3BvcnQgbGF5ZXIKKyAqIGxvd2NvbW1zIHdpbGwgY2hvb3NlIHRvIHVzZSBlaXRoZXIgVENQIG9yIFNDVFAgYXMgaXRzIHRyYW5zcG9ydCBsYXllcgogICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdwcm90b2NvbCcuIFRoaXMgc2hvdWxkIGJlIHNldAotICogdG8gMCAoZGVmYXVsdCkgZm9yIFRDUCBvciAxIGZvciBTQ1RQLiBJdCBzaG91bGRiZSBjb25maWd1cmVkIHVzaW5nIGEKKyAqIHRvIDAgKGRlZmF1bHQpIGZvciBUQ1Agb3IgMSBmb3IgU0NUUC4gSXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdXNpbmcgYQogICogY2x1c3Rlci13aWRlIG1lY2hhbmlzbSBhcyBpdCBtdXN0IGJlIHRoZSBzYW1lIG9uIGFsbCBub2RlcyBvZiB0aGUgY2x1c3RlcgogICogZm9yIHRoZSBETE0gdG8gZnVuY3Rpb24uCiAgKgpAQCAtNDgsMTEgKzQ4LDExIEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4KICNpbmNsdWRlIDxuZXQvc2N0cC91c2VyLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KIAogI2luY2x1ZGUgImRsbV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImxvd2NvbW1zLmgiCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNkZWZpbmUgTkVFREVEX1JNRU0gKDQqMTAyNCoxMDI0KQorI2RlZmluZSBDT05OX0hBU0hfU0laRSAzMgogCiBzdHJ1Y3QgY2J1ZiB7CiAJdW5zaWduZWQgaW50IGJhc2U7CkBAIC0xMTQsNiArMTE1LDcgQEAKIAlpbnQgcmV0cmllczsKICNkZWZpbmUgTUFYX0NPTk5FQ1RfUkVUUklFUyAzCiAJaW50IHNjdHBfYXNzb2M7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqb3RoZXJjb247CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ3b3JrOyAvKiBSZWNlaXZlIHdvcmtxdWV1ZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzd29yazsgLyogU2VuZCB3b3JrcXVldWUgKi8KQEAgLTEzOCwxNCArMTQwLDM3IEBACiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlY3Zfd29ya3F1ZXVlOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzZW5kX3dvcmtxdWV1ZTsKIAotc3RhdGljIERFRklORV9JRFIoY29ubmVjdGlvbnNfaWRyKTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBjb25uZWN0aW9uX2hhc2hbQ09OTl9IQVNIX1NJWkVdOwogc3RhdGljIERFRklORV9NVVRFWChjb25uZWN0aW9uc19sb2NrKTsKLXN0YXRpYyBpbnQgbWF4X25vZGVpZDsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqY29uX2NhY2hlOwogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3JlY3Zfc29ja2V0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcHJvY2Vzc19zZW5kX3NvY2tldHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAorCisvKiBUaGlzIGlzIGRlbGliZXJhdGVseSB2ZXJ5IHNpbXBsZSBiZWNhdXNlIG1vc3QgY2x1c3RlcnMgaGF2ZSBzaW1wbGUKKyAgIHNlcXVlbnRpYWwgbm9kZWlkcywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ28gc3RyYWlnaHQgdG8gYSBjb25uZWN0aW9uCisgICBzdHJ1Y3QgaW4gdGhlIGFycmF5ICovCitzdGF0aWMgaW5saW5lIGludCBub2RlaWRfaGFzaChpbnQgbm9kZWlkKQoreworCXJldHVybiBub2RlaWQgJiAoQ09OTl9IQVNIX1NJWkUtMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29ubmVjdGlvbiAqX19maW5kX2NvbihpbnQgbm9kZWlkKQoreworCWludCByOworCXN0cnVjdCBobGlzdF9ub2RlICpoOworCXN0cnVjdCBjb25uZWN0aW9uICpjb247CisKKwlyID0gbm9kZWlkX2hhc2gobm9kZWlkKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbiwgaCwgJmNvbm5lY3Rpb25faGFzaFtyXSwgbGlzdCkgeworCQlpZiAoY29uLT5ub2RlaWQgPT0gbm9kZWlkKQorCQkJcmV0dXJuIGNvbjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBJZiAnYWxsb2NhdGlvbicgaXMgemVybyB0aGVuIHdlIGRvbid0IGF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3CiAgKiBjb25uZWN0aW9uIHN0cnVjdHVyZSBmb3IgdGhpcyBub2RlLgpAQCAtMTU0LDMxICsxNzksMTcgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uID0gTlVMTDsKIAlpbnQgcjsKLQlpbnQgbjsKIAotCWNvbiA9IGlkcl9maW5kKCZjb25uZWN0aW9uc19pZHIsIG5vZGVpZCk7CisJY29uID0gX19maW5kX2Nvbihub2RlaWQpOwogCWlmIChjb24gfHwgIWFsbG9jKQogCQlyZXR1cm4gY29uOwogCi0JciA9IGlkcl9wcmVfZ2V0KCZjb25uZWN0aW9uc19pZHIsIGFsbG9jKTsKLQlpZiAoIXIpCi0JCXJldHVybiBOVUxMOwotCiAJY29uID0ga21lbV9jYWNoZV96YWxsb2MoY29uX2NhY2hlLCBhbGxvYyk7CiAJaWYgKCFjb24pCiAJCXJldHVybiBOVUxMOwogCi0JciA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZjb25uZWN0aW9uc19pZHIsIGNvbiwgbm9kZWlkLCAmbik7Ci0JaWYgKHIpIHsKLQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKG4gIT0gbm9kZWlkKSB7Ci0JCWlkcl9yZW1vdmUoJmNvbm5lY3Rpb25zX2lkciwgbik7Ci0JCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbik7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlyID0gbm9kZWlkX2hhc2gobm9kZWlkKTsKKwlobGlzdF9hZGRfaGVhZCgmY29uLT5saXN0LCAmY29ubmVjdGlvbl9oYXNoW3JdKTsKIAogCWNvbi0+bm9kZWlkID0gbm9kZWlkOwogCW11dGV4X2luaXQoJmNvbi0+c29ja19tdXRleCk7CkBAIC0xODksMTkgKzIwMCwzMCBAQAogCiAJLyogU2V0dXAgYWN0aW9uIHBvaW50ZXJzIGZvciBjaGlsZCBzb2NrZXRzICovCiAJaWYgKGNvbi0+bm9kZWlkKSB7Ci0JCXN0cnVjdCBjb25uZWN0aW9uICp6ZXJvY29uID0gaWRyX2ZpbmQoJmNvbm5lY3Rpb25zX2lkciwgMCk7CisJCXN0cnVjdCBjb25uZWN0aW9uICp6ZXJvY29uID0gX19maW5kX2NvbigwKTsKIAogCQljb24tPmNvbm5lY3RfYWN0aW9uID0gemVyb2Nvbi0+Y29ubmVjdF9hY3Rpb247CiAJCWlmICghY29uLT5yeF9hY3Rpb24pCiAJCQljb24tPnJ4X2FjdGlvbiA9IHplcm9jb24tPnJ4X2FjdGlvbjsKIAl9CiAKLQlpZiAobm9kZWlkID4gbWF4X25vZGVpZCkKLQkJbWF4X25vZGVpZCA9IG5vZGVpZDsKLQogCXJldHVybiBjb247CiB9CiAKKy8qIExvb3Agcm91bmQgYWxsIGNvbm5lY3Rpb25zICovCitzdGF0aWMgdm9pZCBmb3JlYWNoX2Nvbm4odm9pZCAoKmNvbm5fZnVuYykoc3RydWN0IGNvbm5lY3Rpb24gKmMpKQoreworCWludCBpOworCXN0cnVjdCBobGlzdF9ub2RlICpoLCAqbjsKKwlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOworCisJZm9yIChpID0gMDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb24sIGgsIG4sICZjb25uZWN0aW9uX2hhc2hbaV0sIGxpc3QpeworCQkJY29ubl9mdW5jKGNvbik7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29ubmVjdGlvbiAqbm9kZWlkMmNvbihpbnQgbm9kZWlkLCBnZnBfdCBhbGxvY2F0aW9uKQogewogCXN0cnVjdCBjb25uZWN0aW9uICpjb247CkBAIC0yMTcsMTQgKzIzOSwxNyBAQAogc3RhdGljIHN0cnVjdCBjb25uZWN0aW9uICphc3NvYzJjb24oaW50IGFzc29jX2lkKQogewogCWludCBpOworCXN0cnVjdCBobGlzdF9ub2RlICpoOwogCXN0cnVjdCBjb25uZWN0aW9uICpjb247CiAKIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQlmb3IgKGk9MDsgaTw9bWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKGNvbiAmJiBjb24tPnNjdHBfYXNzb2MgPT0gYXNzb2NfaWQpIHsKLQkJCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JCQlyZXR1cm4gY29uOworCisJZm9yIChpID0gMCA7IGkgPCBDT05OX0hBU0hfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbiwgaCwgJmNvbm5lY3Rpb25faGFzaFtpXSwgbGlzdCkgeworCQkJaWYgKGNvbiAmJiBjb24tPnNjdHBfYXNzb2MgPT0gYXNzb2NfaWQpIHsKKwkJCQltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOworCQkJCXJldHVybiBjb247CisJCQl9CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKQEAgLTI1MCw4ICsyNzUsNyBAQAogCX0gZWxzZSB7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNiAgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmYWRkcjsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqcmV0NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHJldGFkZHI7Ci0JCW1lbWNweSgmcmV0Ni0+c2luNl9hZGRyLCAmaW42LT5zaW42X2FkZHIsCi0JCSAgICAgICBzaXplb2YoaW42LT5zaW42X2FkZHIpKTsKKwkJaXB2Nl9hZGRyX2NvcHkoJnJldDYtPnNpbjZfYWRkciwgJmluNi0+c2luNl9hZGRyKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM3NiwyNSArNDAwLDIzIEBACiAJCWxvZ19wcmludCgic2VuZCBFT0YgdG8gbm9kZSBmYWlsZWQ6ICVkIiwgcmV0KTsKIH0KIAorc3RhdGljIHZvaWQgc2N0cF9pbml0X2ZhaWxlZF9mb3JlYWNoKHN0cnVjdCBjb25uZWN0aW9uICpjb24pCit7CisJY29uLT5zY3RwX2Fzc29jID0gMDsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENGX0NPTk5FQ1RfUEVORElORywgJmNvbi0+ZmxhZ3MpKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChDRl9XUklURV9QRU5ESU5HLCAmY29uLT5mbGFncykpCisJCQlxdWV1ZV93b3JrKHNlbmRfd29ya3F1ZXVlLCAmY29uLT5zd29yayk7CisJfQorfQorCiAvKiBJTklUIGZhaWxlZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBub2RlLi4uCiAgICByZXN0YXJ0IElOSVQgb24gYWxsIHBlbmRpbmcgbm9kZXMgKi8KIHN0YXRpYyB2b2lkIHNjdHBfaW5pdF9mYWlsZWQodm9pZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwotCiAJbXV0ZXhfbG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JZm9yIChpPTE7IGk8PW1heF9ub2RlaWQ7IGkrKykgewotCQljb24gPSBfX25vZGVpZDJjb24oaSwgMCk7Ci0JCWlmICghY29uKQotCQkJY29udGludWU7Ci0JCWNvbi0+c2N0cF9hc3NvYyA9IDA7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0ZfQ09OTkVDVF9QRU5ESU5HLCAmY29uLT5mbGFncykpIHsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChDRl9XUklURV9QRU5ESU5HLCAmY29uLT5mbGFncykpIHsKLQkJCQlxdWV1ZV93b3JrKHNlbmRfd29ya3F1ZXVlLCAmY29uLT5zd29yayk7Ci0JCQl9Ci0JCX0KLQl9CisKKwlmb3JlYWNoX2Nvbm4oc2N0cF9pbml0X2ZhaWxlZF9mb3JlYWNoKTsKKwogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiB9CiAKQEAgLTEzMTMsMTMgKzEzMzUsMTAgQEAKIAogc3RhdGljIHZvaWQgY2xlYW5fb25lX3dyaXRlcXVldWUoc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CisJc3RydWN0IHdyaXRlcXVldWVfZW50cnkgKmUsICpzYWZlOwogCiAJc3Bpbl9sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHRlbXAsICZjb24tPndyaXRlcXVldWUpIHsKLQkJc3RydWN0IHdyaXRlcXVldWVfZW50cnkgKmUgPQotCQkJbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgd3JpdGVxdWV1ZV9lbnRyeSwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHNhZmUsICZjb24tPndyaXRlcXVldWUsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmUtPmxpc3QpOwogCQlmcmVlX2VudHJ5KGUpOwogCX0KQEAgLTEzNjksMTQgKzEzODgsNyBAQAogLyogRGlzY2FyZCBhbGwgZW50cmllcyBvbiB0aGUgd3JpdGUgcXVldWVzICovCiBzdGF0aWMgdm9pZCBjbGVhbl93cml0ZXF1ZXVlcyh2b2lkKQogewotCWludCBub2RlaWQ7Ci0KLQlmb3IgKG5vZGVpZCA9IDE7IG5vZGVpZCA8PSBtYXhfbm9kZWlkOyBub2RlaWQrKykgewotCQlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uID0gX19ub2RlaWQyY29uKG5vZGVpZCwgMCk7Ci0KLQkJaWYgKGNvbikKLQkJCWNsZWFuX29uZV93cml0ZXF1ZXVlKGNvbik7Ci0JfQorCWZvcmVhY2hfY29ubihjbGVhbl9vbmVfd3JpdGVxdWV1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtfc3RvcCh2b2lkKQpAQCAtMTQwNiwyMyArMTQxOCwyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzdG9wX2Nvbm4oc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKK3sKKwljb24tPmZsYWdzIHw9IDB4MEY7CisJaWYgKGNvbi0+c29jaykKKwkJY29uLT5zb2NrLT5zay0+c2tfdXNlcl9kYXRhID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jb25uKHN0cnVjdCBjb25uZWN0aW9uICpjb24pCit7CisJY2xvc2VfY29ubmVjdGlvbihjb24sIHRydWUpOworCWlmIChjb24tPm90aGVyY29uKQorCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24tPm90aGVyY29uKTsKKwlobGlzdF9kZWwoJmNvbi0+bGlzdCk7CisJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKK30KKwogdm9pZCBkbG1fbG93Y29tbXNfc3RvcCh2b2lkKQogewotCWludCBpOwotCXN0cnVjdCBjb25uZWN0aW9uICpjb247Ci0KIAkvKiBTZXQgYWxsIHRoZSBmbGFncyB0byBwcmV2ZW50IGFueQogCSAgIHNvY2tldCBhY3Rpdml0eS4KIAkqLwogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPD0gbWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKGNvbikgewotCQkJY29uLT5mbGFncyB8PSAweDBGOwotCQkJaWYgKGNvbi0+c29jaykKLQkJCQljb24tPnNvY2stPnNrLT5za191c2VyX2RhdGEgPSBOVUxMOwotCQl9Ci0JfQorCWZvcmVhY2hfY29ubihzdG9wX2Nvbm4pOwogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiAKIAl3b3JrX3N0b3AoKTsKQEAgLTE0MzAsMjUgKzE0NDgsMjAgQEAKIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIAljbGVhbl93cml0ZXF1ZXVlcygpOwogCi0JZm9yIChpID0gMDsgaSA8PSBtYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoY29uKSB7Ci0JCQljbG9zZV9jb25uZWN0aW9uKGNvbiwgdHJ1ZSk7Ci0JCQlpZiAoY29uLT5vdGhlcmNvbikKLQkJCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24tPm90aGVyY29uKTsKLQkJCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbik7Ci0JCX0KLQl9Ci0JbWF4X25vZGVpZCA9IDA7CisJZm9yZWFjaF9jb25uKGZyZWVfY29ubik7CisKIAltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwogCWttZW1fY2FjaGVfZGVzdHJveShjb25fY2FjaGUpOwotCWlkcl9pbml0KCZjb25uZWN0aW9uc19pZHIpOwogfQogCiBpbnQgZGxtX2xvd2NvbW1zX3N0YXJ0KHZvaWQpCiB7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRCgmY29ubmVjdGlvbl9oYXNoW2ldKTsKIAogCWluaXRfbG9jYWwoKTsKIAlpZiAoIWRsbV9sb2NhbF9jb3VudCkgewpkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuYyBiL2ZzL2RsbS91c2VyLmMKaW5kZXggMDY1MTQ5ZS4uZWJjZTk5NCAxMDA2NDQKLS0tIGEvZnMvZGxtL3VzZXIuYworKysgYi9mcy9kbG0vdXNlci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgY29tcGF0X2lucHV0KHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdCAqa2IsCiAJCQkgc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIgKmtiMzIsCi0JCQkgc2l6ZV90IGNvdW50KQorCQkJIGludCBuYW1lbGVuKQogewogCWtiLT52ZXJzaW9uWzBdID0ga2IzMi0+dmVyc2lvblswXTsKIAlrYi0+dmVyc2lvblsxXSA9IGtiMzItPnZlcnNpb25bMV07CkBAIC05Niw4ICs5Niw3IEBACiAJICAgIGtiLT5jbWQgPT0gRExNX1VTRVJfUkVNT1ZFX0xPQ0tTUEFDRSkgewogCQlrYi0+aS5sc3BhY2UuZmxhZ3MgPSBrYjMyLT5pLmxzcGFjZS5mbGFnczsKIAkJa2ItPmkubHNwYWNlLm1pbm9yID0ga2IzMi0+aS5sc3BhY2UubWlub3I7Ci0JCW1lbWNweShrYi0+aS5sc3BhY2UubmFtZSwga2IzMi0+aS5sc3BhY2UubmFtZSwgY291bnQgLQotCQkJb2Zmc2V0b2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIsIGkubHNwYWNlLm5hbWUpKTsKKwkJbWVtY3B5KGtiLT5pLmxzcGFjZS5uYW1lLCBrYjMyLT5pLmxzcGFjZS5uYW1lLCBuYW1lbGVuKTsKIAl9IGVsc2UgaWYgKGtiLT5jbWQgPT0gRExNX1VTRVJfUFVSR0UpIHsKIAkJa2ItPmkucHVyZ2Uubm9kZWlkID0ga2IzMi0+aS5wdXJnZS5ub2RlaWQ7CiAJCWtiLT5pLnB1cmdlLnBpZCA9IGtiMzItPmkucHVyZ2UucGlkOwpAQCAtMTE1LDggKzExNCw3IEBACiAJCWtiLT5pLmxvY2suYmFzdGFkZHIgPSAodm9pZCAqKShsb25nKWtiMzItPmkubG9jay5iYXN0YWRkcjsKIAkJa2ItPmkubG9jay5sa3NiID0gKHZvaWQgKikobG9uZylrYjMyLT5pLmxvY2subGtzYjsKIAkJbWVtY3B5KGtiLT5pLmxvY2subHZiLCBrYjMyLT5pLmxvY2subHZiLCBETE1fVVNFUl9MVkJfTEVOKTsKLQkJbWVtY3B5KGtiLT5pLmxvY2submFtZSwga2IzMi0+aS5sb2NrLm5hbWUsIGNvdW50IC0KLQkJCW9mZnNldG9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyLCBpLmxvY2submFtZSkpOworCQltZW1jcHkoa2ItPmkubG9jay5uYW1lLCBrYjMyLT5pLmxvY2submFtZSwgbmFtZWxlbik7CiAJfQogfQogCkBAIC01MzksOSArNTM3LDE2IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCWlmICgha2J1Zi0+aXM2NGJpdCkgewogCQlzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiAqazMyYnVmOworCQlpbnQgbmFtZWxlbiA9IDA7CisKKwkJaWYgKGNvdW50ID4gc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyKSkKKwkJCW5hbWVsZW4gPSBjb3VudCAtIHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMik7CisKIAkJazMyYnVmID0gKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyICopa2J1ZjsKLQkJa2J1ZiA9IGttYWxsb2MoY291bnQgKyAxICsgKHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QpIC0KLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIpKSwgR0ZQX0tFUk5FTCk7CisKKwkJLyogYWRkIDEgYWZ0ZXIgbmFtZWxlbiBzbyB0aGF0IHRoZSBuYW1lIHN0cmluZyBpcyB0ZXJtaW5hdGVkICovCisJCWtidWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QpICsgbmFtZWxlbiArIDEsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICgha2J1ZikgewogCQkJa2ZyZWUoazMyYnVmKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNTQ5LDcgKzU1NCw4IEBACiAKIAkJaWYgKHByb2MpCiAJCQlzZXRfYml0KERMTV9QUk9DX0ZMQUdTX0NPTVBBVCwgJnByb2MtPmZsYWdzKTsKLQkJY29tcGF0X2lucHV0KGtidWYsIGszMmJ1ZiwgY291bnQgKyAxKTsKKworCQljb21wYXRfaW5wdXQoa2J1ZiwgazMyYnVmLCBuYW1lbGVuKTsKIAkJa2ZyZWUoazMyYnVmKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMDExYjliOC4uYzVjNDI0ZiAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTQxNywxMCArNDE3LDEwIEBACiAJZXBfdW5yZWdpc3Rlcl9wb2xsd2FpdChlcCwgZXBpKTsKIAogCS8qIFJlbW92ZSB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIGxpc3Qgb2YgZXBvbGwgaG9va3MgKi8KLQlzcGluX2xvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWlmIChlcF9pc19saW5rZWQoJmVwaS0+ZmxsaW5rKSkKIAkJbGlzdF9kZWxfaW5pdCgmZXBpLT5mbGxpbmspOwotCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2VwX2xvY2spOworCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCiAJcmJfZXJhc2UoJmVwaS0+cmJuLCAmZXAtPnJicik7CiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKIAogCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBnZXQgImZpbGUtPmZfZXBfbG9jayIgYmVjYXVzZSBpdCBpcyBub3QKKwkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ3JlIGluIHRoZSAic3RydWN0IGZpbGUiCiAJICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vb25lIGlzIHVzaW5nIHRoaXMgZmlsZSBhbnltb3JlLgogCSAqIFNvLCBmb3IgZXhhbXBsZSwgZXBvbGxfY3RsKCkgY2Fubm90IGhpdCBoZXJlIHNpY25lIGlmIHdlIHJlYWNoIHRoaXMKQEAgLTU0Nyw2ICs1NDcsOCBAQAogCSAqIHdpbGwgY29ycmVjdGx5IHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9uLiBXZSBkbyBuZWVkIHRvIGFjcXVpcmUKIAkgKiAiZXAtPm10eCIgYWZ0ZXIgImVwbXV0ZXgiIGJlY2F1c2UgZXBfcmVtb3ZlKCkgcmVxdWlyZXMgaXQgd2hlbiBjYWxsZWQKIAkgKiBmcm9tIGFueXdoZXJlIGJ1dCBlcF9mcmVlKCkuCisJICoKKwkgKiBCZXNpZGVzLCBlcF9yZW1vdmUoKSBhY3F1aXJlcyB0aGUgbG9jaywgc28gd2UgY2FuJ3QgaG9sZCBpdCBoZXJlLgogCSAqLwogCW11dGV4X2xvY2soJmVwbXV0ZXgpOwogCkBAIC03ODUsOSArNzg3LDkgQEAKIAkJZ290byBlcnJvcl91bnJlZ2lzdGVyOwogCiAJLyogQWRkIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGVwb2xsIGhvb2sgZm9yIHRoaXMgZmlsZSAqLwotCXNwaW5fbG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZlcGktPmZsbGluaywgJnRmaWxlLT5mX2VwX2xpbmtzKTsKLQlzcGluX3VubG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl91bmxvY2soJnRmaWxlLT5mX2xvY2spOwogCiAJLyoKIAkgKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgUkIgdHJlZS4gQWxsIFJCIHRyZWUgb3BlcmF0aW9ucyBhcmUKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA5MjliNTgwLi5iOWYxYzE0IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgpAQCAtMTI3LDYgKzEyOCw5IEBACiAJCQkJIE1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGV4aXQ7CisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjaygmbmQucGF0aCwgTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXhpdDsKIAogCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZfE9fTEFSR0VGSUxFKTsKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CkBAIC02NzQsNiArNjc4LDkgQEAKIAllcnIgPSBpbm9kZV9wZXJtaXNzaW9uKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlLCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wYXRoX3B1dDsKKwllcnIgPSBpbWFfcGF0aF9jaGVjaygmbmQucGF0aCwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcGF0aF9wdXQ7CiAKIAlmaWxlID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBPX1JET05MWXxPX0xBUkdFRklMRSk7CiAJaWYgKElTX0VSUihmaWxlKSkKQEAgLTExODQsNiArMTE5MSw5IEBACiAJcmV0dmFsID0gc2VjdXJpdHlfYnBybV9jaGVjayhicHJtKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGltYV9icHJtX2NoZWNrKGJwcm0pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKIAkvKiBrZXJuZWwgbW9kdWxlIGxvYWRlciBmaXh1cCAqLwogCS8qIHNvIHdlIGRvbid0IHRyeSB0byBsb2FkIHJ1biBtb2Rwcm9iZSBpbiBrZXJuZWwgc3BhY2UuICovCkBAIC0xMjg0LDYgKzEyOTQsNyBAQAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKwljdXJyZW50LT5pbl9leGVjdmUgPSAxOwogCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CkBAIC0xMzM3LDYgKzEzNDgsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOwpAQCAtMTM1NSw2ICsxMzY3LDcgQEAKIAl9CiAKIG91dF91bmxvY2s6CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGM4ZjliZDMuLjRhMDlmZjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTE0MzUsNiArMTQzNSwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ1ZmZlcl91bm1hcHBlZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiAhYnVmZmVyX21hcHBlZChiaCk7Cit9CiAvKgogICogTm90ZSB0aGF0IHdlIGFsd2F5cyBzdGFydCBhIHRyYW5zYWN0aW9uIGV2ZW4gaWYgd2UncmUgbm90IGpvdXJuYWxsaW5nCiAgKiBkYXRhLiAgVGhpcyBpcyB0byBwcmVzZXJ2ZSBvcmRlcmluZzogYW55IGhvbGUgaW5zdGFudGlhdGlvbiB3aXRoaW4KQEAgLTE1MDUsNiArMTUwOSwxNSBAQAogCWlmIChleHQzX2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKSkKIAkJZ290byBvdXRfZmFpbDsKIAorCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgeworCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCisJCQkJKDEgPDwgQkhfRGlydHkpfCgxIDw8IEJIX1VwdG9kYXRlKSk7CisJfSBlbHNlIGlmICghd2Fsa19wYWdlX2J1ZmZlcnMoTlVMTCwgcGFnZV9idWZmZXJzKHBhZ2UpLCAwLCBQQUdFX0NBQ0hFX1NJWkUsIE5VTEwsIGJ1ZmZlcl91bm1hcHBlZCkpIHsKKwkJLyogUHJvdmlkZSBOVUxMIGluc3RlYWQgb2YgZ2V0X2Jsb2NrIHNvIHRoYXQgd2UgY2F0Y2ggYnVncyBpZiBidWZmZXJzIHdlcmVuJ3QgcmVhbGx5IG1hcHBlZCAqLworCQlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIE5VTEwsIHdiYyk7CisJfQorCXBhZ2VfYnVmcyA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgZXh0M193cml0ZXBhZ2VfdHJhbnNfYmxvY2tzKGlub2RlKSk7CiAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKQEAgLTE1MTIsMTEgKzE1MjUsNiBAQAogCQlnb3RvIG91dF9mYWlsOwogCX0KIAotCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewotCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCi0JCQkJKDEgPDwgQkhfRGlydHkpfCgxIDw8IEJIX1VwdG9kYXRlKSk7Ci0JfQotCXBhZ2VfYnVmcyA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKIAl3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmcywgMCwKIAkJCVBBR0VfQ0FDSEVfU0laRSwgTlVMTCwgYmdldF9vbmUpOwogCmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBiZDIxNWNjLi5kODY1Y2E2NiAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZGVmaW5lIFNFVEZMX01BU0sgKE9fQVBQRU5EIHwgT19OT05CTE9DSyB8IE9fTkRFTEFZIHwgRkFTWU5DIHwgT19ESVJFQ1QgfCBPX05PQVRJTUUpCisjZGVmaW5lIFNFVEZMX01BU0sgKE9fQVBQRU5EIHwgT19OT05CTE9DSyB8IE9fTkRFTEFZIHwgT19ESVJFQ1QgfCBPX05PQVRJTUUpCiAKIHN0YXRpYyBpbnQgc2V0ZmwoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTc3LDIxICsxNzcsMjEgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJLyoKLQkgKiBXZSBzdGlsbCBuZWVkIGEgbG9jayBoZXJlIGZvciBub3cgdG8ga2VlcCBtdWx0aXBsZSBGQVNZTkMgY2FsbHMKLQkgKiBmcm9tIHJhY2luZyB3aXRoIGVhY2ggb3RoZXIuCisJICogLT5mYXN5bmMoKSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgRkFTWU5DIGJpdC4KIAkgKi8KLQlsb2NrX2tlcm5lbCgpOwotCWlmICgoYXJnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpIHsKLQkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+ZmFzeW5jKSB7Ci0JCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgKGFyZyAmIEZBU1lOQykgIT0gMCk7Ci0JCQlpZiAoZXJyb3IgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9CisJaWYgKCgoYXJnIF4gZmlscC0+Zl9mbGFncykgJiBGQVNZTkMpICYmIGZpbHAtPmZfb3AgJiYKKwkJCWZpbHAtPmZfb3AtPmZhc3luYykgeworCQllcnJvciA9IGZpbHAtPmZfb3AtPmZhc3luYyhmZCwgZmlscCwgKGFyZyAmIEZBU1lOQykgIT0gMCk7CisJCWlmIChlcnJvciA8IDApCisJCQlnb3RvIG91dDsKKwkJaWYgKGVycm9yID4gMCkKKwkJCWVycm9yID0gMDsKIAl9Ci0KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJZmlscC0+Zl9mbGFncyA9IChhcmcgJiBTRVRGTF9NQVNLKSB8IChmaWxwLT5mX2ZsYWdzICYgflNFVEZMX01BU0spOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOworCiAgb3V0OgotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmYXN5bmNfY2FjaGUgX19yZWFkX21vc3RseTsKIAogLyoKLSAqIGZhc3luY19oZWxwZXIoKSBpcyB1c2VkIGJ5IHNvbWUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIChtYWlubHkgbWljZSkKKyAqIGZhc3luY19oZWxwZXIoKSBpcyB1c2VkIGJ5IGFsbW9zdCBhbGwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzCiAgKiB0byBzZXQgdXAgdGhlIGZhc3luYyBxdWV1ZS4gSXQgcmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvciwgMCBpZiBpdCBkaWQKICAqIG5vIGNoYW5nZXMgYW5kIHBvc2l0aXZlIGlmIGl0IGFkZGVkL2RlbGV0ZWQgdGhlIGVudHJ5LgogICovCkBAIC01NTUsNiArNTU1LDEzIEBACiAJCXJlc3VsdCA9IDE7CiAJfQogb3V0OgorCS8qIEZpeCB1cCBGQVNZTkMgYml0IHdoaWxlIHN0aWxsIGhvbGRpbmcgZmFzeW5jX2xvY2sgKi8KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CisJaWYgKG9uKQorCQlmaWxwLT5mX2ZsYWdzIHw9IEZBU1lOQzsKKwllbHNlCisJCWZpbHAtPmZfZmxhZ3MgJj0gfkZBU1lOQzsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAl3cml0ZV91bmxvY2tfaXJxKCZmYXN5bmNfbG9jayk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCBiYmVlYWM2Li5iNzRhOGUxIDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTEyNyw2ICsxMjgsNyBAQAogCWF0b21pY19sb25nX3NldCgmZi0+Zl9jb3VudCwgMSk7CiAJcndsb2NrX2luaXQoJmYtPmZfb3duZXIubG9jayk7CiAJZi0+Zl9jcmVkID0gZ2V0X2NyZWQoY3JlZCk7CisJc3Bpbl9sb2NrX2luaXQoJmYtPmZfbG9jayk7CiAJZXZlbnRwb2xsX2luaXRfZmlsZShmKTsKIAkvKiBmLT5mX3ZlcnNpb246IDAgKi8KIAlyZXR1cm4gZjsKQEAgLTI3OSw2ICsyODEsNyBAQAogCWlmIChmaWxlLT5mX29wICYmIGZpbGUtPmZfb3AtPnJlbGVhc2UpCiAJCWZpbGUtPmZfb3AtPnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCXNlY3VyaXR5X2ZpbGVfZnJlZShmaWxlKTsKKwlpbWFfZmlsZV9mcmVlKGZpbGUpOwogCWlmICh1bmxpa2VseShTX0lTQ0hSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2NkZXYgIT0gTlVMTCkpCiAJCWNkZXZfcHV0KGlub2RlLT5pX2NkZXYpOwogCWZvcHNfcHV0KGZpbGUtPmZfb3ApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9LY29uZmlnIGIvZnMvZ2ZzMi9LY29uZmlnCmluZGV4IGU1NjNhNjQuLjNhOTgxYjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvS2NvbmZpZworKysgYi9mcy9nZnMyL0tjb25maWcKQEAgLTEsNiArMSwxMCBAQAogY29uZmlnIEdGUzJfRlMKIAl0cmlzdGF0ZSAiR0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICg2NEJJVCB8fCBMQkQpCisJc2VsZWN0IERMTSBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IENPTkZJR0ZTX0ZTIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgU1lTRlMgaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBJUF9TQ1RQIGlmIERMTV9TQ1RQCiAJc2VsZWN0IEZTX1BPU0lYX0FDTAogCXNlbGVjdCBDUkMzMgogCWhlbHAKQEAgLTE4LDE3ICsyMiwxNiBAQAogCSAgdGhlIGxvY2tpbmcgbW9kdWxlIGJlbG93LiBEb2N1bWVudGF0aW9uIGFuZCB1dGlsaXRpZXMgZm9yIEdGUzIgY2FuCiAJICBiZSBmb3VuZCBoZXJlOiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2NsdXN0ZXIKIAotCSAgVGhlICJub2xvY2siIGxvY2sgbW9kdWxlIGlzIG5vdyBidWlsdCBpbiB0byBHRlMyIGJ5IGRlZmF1bHQuCisJICBUaGUgIm5vbG9jayIgbG9jayBtb2R1bGUgaXMgbm93IGJ1aWx0IGluIHRvIEdGUzIgYnkgZGVmYXVsdC4gSWYKKwkgIHlvdSB3YW50IHRvIHVzZSB0aGUgRExNLCBiZSBzdXJlIHRvIGVuYWJsZSBIT1RQTFVHIGFuZCBJUHY0LzYKKwkgIG5ldHdvcmtpbmcuCiAKIGNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNCi0JdHJpc3RhdGUgIkdGUzIgRExNIGxvY2tpbmcgbW9kdWxlIgotCWRlcGVuZHMgb24gR0ZTMl9GUyAmJiBTWVNGUyAmJiBORVQgJiYgSU5FVCAmJiAoSVBWNiB8fCBJUFY2PW4pCi0Jc2VsZWN0IElQX1NDVFAgaWYgRExNX1NDVFAKLQlzZWxlY3QgQ09ORklHRlNfRlMKLQlzZWxlY3QgRExNCisJYm9vbCAiR0ZTMiBETE0gbG9ja2luZyIKKwlkZXBlbmRzIG9uIChHRlMyX0ZTIT1uKSAmJiBORVQgJiYgSU5FVCAmJiAoSVBWNiB8fCBJUFY2PW4pICYmIEhPVFBMVUcKIAloZWxwCiAJICBNdWx0aXBsZSBub2RlIGxvY2tpbmcgbW9kdWxlIGZvciBHRlMyCiAKLQkgIE1vc3QgdXNlcnMgb2YgR0ZTMiB3aWxsIHJlcXVpcmUgdGhpcyBtb2R1bGUuIEl0IHByb3ZpZGVzIHRoZSBsb2NraW5nCisJICBNb3N0IHVzZXJzIG9mIEdGUzIgd2lsbCByZXF1aXJlIHRoaXMuIEl0IHByb3ZpZGVzIHRoZSBsb2NraW5nCiAJICBpbnRlcmZhY2UgYmV0d2VlbiBHRlMyIGFuZCB0aGUgRExNLCB3aGljaCBpcyByZXF1aXJlZCB0byB1c2UgR0ZTMgogCSAgaW4gYSBjbHVzdGVyIGVudmlyb25tZW50LgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9NYWtlZmlsZSBiL2ZzL2dmczIvTWFrZWZpbGUKaW5kZXggYzFiNGVjNmEuLmE4NTFlYTQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvTWFrZWZpbGUKKysrIGIvZnMvZ2ZzMi9NYWtlZmlsZQpAQCAtMSw5ICsxLDkgQEAKIG9iai0kKENPTkZJR19HRlMyX0ZTKSArPSBnZnMyLm8KIGdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8gZWFvcHMubyBlYXR0ci5vIGdsb2NrLm8gXAotCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbG9ja2luZy5vIG1haW4ubyBtZXRhX2lvLm8gXAorCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbWFpbi5vIG1ldGFfaW8ubyBcCiAJbW91bnQubyBvcHNfYWRkcmVzcy5vIG9wc19kZW50cnkubyBvcHNfZXhwb3J0Lm8gb3BzX2ZpbGUubyBcCiAJb3BzX2ZzdHlwZS5vIG9wc19pbm9kZS5vIG9wc19zdXBlci5vIHF1b3RhLm8gXAogCXJlY292ZXJ5Lm8gcmdycC5vIHN1cGVyLm8gc3lzLm8gdHJhbnMubyB1dGlsLm8KIAotb2JqLSQoQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0pICs9IGxvY2tpbmcvZGxtLworZ2ZzMi0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IGUzMzVkY2UuLjQzNzY0ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2JtYXAuYyBiL2ZzL2dmczIvYm1hcC5jCmluZGV4IDExZmZjNTYuLjNhNWQzZjggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYm1hcC5jCisrKyBiL2ZzL2dmczIvYm1hcC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Rpci5jIGIvZnMvZ2ZzMi9kaXIuYwppbmRleCBiN2M4ZTVjLi5hZWY0ZDBjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2Rpci5jCisrKyBiL2ZzL2dmczIvZGlyLmMKQEAgLTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYW9wcy5jIGIvZnMvZ2ZzMi9lYW9wcy5jCmluZGV4IGYxMTRiYTIuLmRlZTliMDMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWFvcHMuYworKysgYi9mcy9nZnMyL2Vhb3BzLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2VhdHRyLmMgYi9mcy9nZnMyL2VhdHRyLmMKaW5kZXggMGQxYzc2ZC4uODk5NzYzYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9lYXR0ci5jCisrKyBiL2ZzL2dmczIvZWF0dHIuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggNmI5ODNhZS4uMzk4NGU0NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CkBAIC0xOCw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KQEAgLTE1NSwxMyArMTUzLDEwIEBACiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gZ2wtPmdsX2FzcGFjZTsKIAotCWlmIChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jaykKLQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2wtPmdsX2xvY2spOwotCiAJaWYgKGFzcGFjZSkKIAkJZ2ZzMl9hc3BhY2VfcHV0KGFzcGFjZSk7CiAKLQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdXRfbG9jayhnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOwogfQogCiAvKioKQEAgLTE3Miw2ICsxNjcsNyBAQAogCiBzdGF0aWMgdm9pZCBnZnMyX2dsb2NrX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogeworCUdMT0NLX0JVR19PTihnbCwgYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpID09IDApOwogCWF0b21pY19pbmMoJmdsLT5nbF9yZWYpOwogfQogCkBAIC0yMTEsMTcgKzIwNywxNSBAQAogCQkJYXRvbWljX2RlYygmbHJ1X2NvdW50KTsKIAkJfQogCQlzcGluX3VubG9jaygmbHJ1X2xvY2spOwotCQlHTE9DS19CVUdfT04oZ2wsIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCk7Ci0JCUdMT0NLX0JVR19PTihnbCwgIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKTsKIAkJR0xPQ0tfQlVHX09OKGdsLCAhbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpKTsKIAkJZ2xvY2tfZnJlZShnbCk7CiAJCXJ2ID0gMTsKIAkJZ290byBvdXQ7CiAJfQotCXdyaXRlX3VubG9jayhnbF9sb2NrX2FkZHIoZ2wtPmdsX2hhc2gpKTsKIAkvKiAxIGZvciBiZWluZyBoYXNoZWQsIDEgZm9yIGhhdmluZyBzdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAqLwogCWlmIChhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikgPT0gMikKIAkJZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShnbCk7CisJd3JpdGVfdW5sb2NrKGdsX2xvY2tfYWRkcihnbC0+Z2xfaGFzaCkpOwogb3V0OgogCXJldHVybiBydjsKIH0KQEAgLTI1NiwyNyArMjUwLDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX2dsb2NrX2ZpbmQoKSAtIEZpbmQgZ2xvY2sgYnkgbG9jayBudW1iZXIKLSAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKLSAqIEBuYW1lOiBUaGUgbG9jayBuYW1lCi0gKgotICogUmV0dXJuczogTlVMTCwgb3IgdGhlIHN0cnVjdCBnZnMyX2dsb2NrIHdpdGggdGhlIHJlcXVlc3RlZCBudW1iZXIKLSAqLwotCi1zdGF0aWMgc3RydWN0IGdmczJfZ2xvY2sgKmdmczJfZ2xvY2tfZmluZChjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUpCi17Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBnbF9oYXNoKHNkcCwgbmFtZSk7Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmdsOwotCi0JcmVhZF9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7Ci0JZ2wgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgbmFtZSk7Ci0JcmVhZF91bmxvY2soZ2xfbG9ja19hZGRyKGhhc2gpKTsKLQotCXJldHVybiBnbDsKLX0KLQotLyoqCiAgKiBtYXlfZ3JhbnQgLSBjaGVjayBpZiBpdHMgb2sgdG8gZ3JhbnQgYSBuZXcgbG9jawogICogQGdsOiBUaGUgZ2xvY2sKICAqIEBnaDogVGhlIGxvY2sgcmVxdWVzdCB3aGljaCB3ZSB3aXNoIHRvIGdyYW50CkBAIC01MjMsNyArNDk2LDcgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBnZnMyX2xtX2xvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssCi0JCQkJIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCisJCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCiAJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0ID0gTE1fT1VUX0VSUk9SOwpAQCAtNTMyLDcgKzUwNSw3IEBACiAJCXJldHVybiByZXFfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQgPyAwIDogcmVxX3N0YXRlOwogCiAJaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGxvY2ssIGN1cl9zdGF0ZSwKKwkJcmV0ID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jayhsb2NrLAogCQkJCQkJCSByZXFfc3RhdGUsIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTc1LDcgKzU0OCw3IEBACiAJICAgIGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9ERUZFUlJFRCkgJiYKIAkgICAgIShsY2tfZmxhZ3MgJiAoTE1fRkxBR19UUlkgfCBMTV9GTEFHX1RSWV8xQ0IpKSkKIAkJbGNrX2ZsYWdzIHw9IExNX0ZMQUdfVFJZXzFDQjsKLQlyZXQgPSBnZnMyX2xtX2xvY2soc2RwLCBnbC0+Z2xfbG9jaywgZ2wtPmdsX3N0YXRlLCB0YXJnZXQsIGxja19mbGFncyk7CisJcmV0ID0gZ2ZzMl9sbV9sb2NrKHNkcCwgZ2wsIHRhcmdldCwgbGNrX2ZsYWdzKTsKIAogCWlmICghKHJldCAmIExNX09VVF9BU1lOQykpIHsKIAkJZmluaXNoX3htb3RlKGdsLCByZXQpOwpAQCAtNjI0LDEwICs1OTcsMTEgQEAKIAogCUdMT0NLX0JVR19PTihnbCwgdGVzdF9iaXQoR0xGX0RFTU9URV9JTl9QUk9HUkVTUywgJmdsLT5nbF9mbGFncykpOwogCisJZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCWlmICh0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IGdsLT5nbF9zdGF0ZSkgewogCQlpZiAoZmluZF9maXJzdF9ob2xkZXIoZ2wpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmIChub25ibG9jaykKIAkJCWdvdG8gb3V0X3NjaGVkOwogCQlzZXRfYml0KEdMRl9ERU1PVEVfSU5fUFJPR1JFU1MsICZnbC0+Z2xfZmxhZ3MpOwpAQCAtNjM4LDIzICs2MTIsMjYgQEAKIAkJCWdmczJfZGVtb3RlX3dha2UoZ2wpOwogCQlyZXQgPSBkb19wcm9tb3RlKGdsKTsKIAkJaWYgKHJldCA9PSAwKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmIChyZXQgPT0gMikKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0X3NlbTsKIAkJZ2ggPSBmaW5kX2ZpcnN0X3dhaXRlcihnbCk7CiAJCWdsLT5nbF90YXJnZXQgPSBnaC0+Z2hfc3RhdGU7CiAJCWlmICghKGdoLT5naF9mbGFncyAmIChMTV9GTEFHX1RSWSB8IExNX0ZMQUdfVFJZXzFDQikpKQogCQkJZG9fZXJyb3IoZ2wsIDApOyAvKiBGYWlsIHF1ZXVlZCB0cnkgbG9ja3MgKi8KIAl9CiAJZG9feG1vdGUoZ2wsIGdoLCBnbC0+Z2xfdGFyZ2V0KTsKK291dF9zZW06CisJdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlyZXR1cm47CiAKIG91dF9zY2hlZDoKIAlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKLW91dDoKK291dF91bmxvY2s6CiAJY2xlYXJfYml0KEdMRl9MT0NLLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnb3RvIG91dF9zZW07CiB9CiAKIHN0YXRpYyB2b2lkIGdsb2NrX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC02ODEsMTggKzY1OCw2IEBACiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIH0KIAotc3RhdGljIGludCBnZnMyX2xtX2dldF9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgdm9pZCAqKmxvY2twKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9nZXRfbG9jaykKLQkJcmV0dXJuIDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2dldF9sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGxvY2twKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIC8qKgogICogZ2ZzMl9nbG9ja19nZXQoKSAtIEdldCBhIGdsb2NrLCBvciBjcmVhdGUgb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0CiAgKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCkBAIC03MTksMTAgKzY4NCwxMSBAQAogCWdsID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsICZuYW1lKTsKIAlyZWFkX3VubG9jayhnbF9sb2NrX2FkZHIoaGFzaCkpOwogCi0JaWYgKGdsIHx8ICFjcmVhdGUpIHsKLQkJKmdscCA9IGdsOworCSpnbHAgPSBnbDsKKwlpZiAoZ2wpCiAJCXJldHVybiAwOwotCX0KKwlpZiAoIWNyZWF0ZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlnbCA9IGttZW1fY2FjaGVfYWxsb2MoZ2ZzMl9nbG9ja19jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZ2wpCkBAIC03MzYsNyArNzAyLDkgQEAKIAlnbC0+Z2xfZGVtb3RlX3N0YXRlID0gTE1fU1RfRVhDTFVTSVZFOwogCWdsLT5nbF9oYXNoID0gaGFzaDsKIAlnbC0+Z2xfb3BzID0gZ2xvcHM7Ci0JZ2wtPmdsX3N0YW1wID0gamlmZmllczsKKwlzbnByaW50ZihnbC0+Z2xfc3RybmFtZSwgR0RMTV9TVFJOQU1FX0JZVEVTLCAiJTh4JTE2bGx4IiwgbmFtZS5sbl90eXBlLCAodW5zaWduZWQgbG9uZyBsb25nKW51bWJlcik7CisJbWVtc2V0KCZnbC0+Z2xfbGtzYiwgMCwgc2l6ZW9mKHN0cnVjdCBkbG1fbGtzYikpOworCWdsLT5nbF9sa3NiLnNiX2x2YnB0ciA9IGdsLT5nbF9sdmI7CiAJZ2wtPmdsX3RjaGFuZ2UgPSBqaWZmaWVzOwogCWdsLT5nbF9vYmplY3QgPSBOVUxMOwogCWdsLT5nbF9zYmQgPSBzZHA7CkBAIC03NTMsMTAgKzcyMSw2IEBACiAJCX0KIAl9CiAKLQllcnJvciA9IGdmczJfbG1fZ2V0X2xvY2soc2RwLCAmbmFtZSwgJmdsLT5nbF9sb2NrKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9hc3BhY2U7Ci0KIAl3cml0ZV9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CiAJdG1wID0gc2VhcmNoX2J1Y2tldChoYXNoLCBzZHAsICZuYW1lKTsKIAlpZiAodG1wKSB7CkBAIC03NzIsOSArNzM2LDYgQEAKIAogCXJldHVybiAwOwogCi1mYWlsX2FzcGFjZToKLQlpZiAoZ2wtPmdsX2FzcGFjZSkKLQkJZ2ZzMl9hc3BhY2VfcHV0KGdsLT5nbF9hc3BhY2UpOwogZmFpbDoKIAlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC05NjYsNyArOTI3LDcgQEAKIAlpZiAoIShnaC0+Z2hfZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKSkgewogCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKQotCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fY2FuY2VsKGdsLT5nbF9sb2NrKTsKKwkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2NhbmNlbChnbCk7CiAJCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCX0KIAlyZXR1cm47CkBAIC0xMDUxLDcgKzEwMTIsNiBAQAogCQkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJCQljbGVhcl9iaXQoR0xGX0xPQ0ssICZnbC0+Z2xfZmxhZ3MpOwogCQl9Ci0JCWdsLT5nbF9zdGFtcCA9IGppZmZpZXM7CiAJCWlmIChsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykgJiYKIAkJICAgICF0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJCSAgICAhdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCkBAIC0xMjQwLDcwICsxMjAwLDEzIEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaHNbeF0pOwogfQogCi1zdGF0aWMgaW50IGdmczJfbG1faG9sZF9sdmIoc3RydWN0IGdmczJfc2JkICpzZHAsIHZvaWQgKmxvY2ssIGNoYXIgKipsdmJwKQordm9pZCBnZnMyX2dsb2NrX2NiKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdW5zaWduZWQgaW50IHN0YXRlKQogewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9ob2xkX2x2YikKLQkJcmV0dXJuIDA7Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2hvbGRfbHZiKGxvY2ssIGx2YnApOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2x2Yl9ob2xkIC0gYXR0YWNoIGEgTFZCIGZyb20gYSBnbG9jawotICogQGdsOiBUaGUgZ2xvY2sgaW4gcXVlc3Rpb24KLSAqCi0gKi8KLQotaW50IGdmczJfbHZiX2hvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQotewotCWludCBlcnJvcjsKLQotCWlmICghYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpKSB7Ci0JCWVycm9yID0gZ2ZzMl9sbV9ob2xkX2x2YihnbC0+Z2xfc2JkLCBnbC0+Z2xfbG9jaywgJmdsLT5nbF9sdmIpOwotCQlpZiAoZXJyb3IpIAotCQkJcmV0dXJuIGVycm9yOwotCQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCX0KLQlhdG9taWNfaW5jKCZnbC0+Z2xfbHZiX2NvdW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfbHZiX3VuaG9sZCAtIGRldGFjaCBhIExWQiBmcm9tIGEgZ2xvY2sKLSAqIEBnbDogVGhlIGdsb2NrIGluIHF1ZXN0aW9uCi0gKgotICovCi0KLXZvaWQgZ2ZzMl9sdmJfdW5ob2xkKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0KLQlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCWdmczJfYXNzZXJ0KGdsLT5nbF9zYmQsIGF0b21pY19yZWFkKCZnbC0+Z2xfbHZiX2NvdW50KSA+IDApOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZnbC0+Z2xfbHZiX2NvdW50KSkgewotCQlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fdW5ob2xkX2x2YikKLQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3VuaG9sZF9sdmIoZ2wtPmdsX2xvY2ssIGdsLT5nbF9sdmIpOwotCQlnbC0+Z2xfbHZiID0gTlVMTDsKLQkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwotCX0KLQlnZnMyX2dsb2NrX3B1dChnbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsb2NraW5nX2NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQl1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0Jc3RydWN0IGdmczJfZ2xvY2sgKmdsOwogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCXVuc2lnbmVkIGxvbmcgaG9sZHRpbWU7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCi0JZ2wgPSBnZnMyX2dsb2NrX2ZpbmQoc2RwLCBuYW1lKTsKLQlpZiAoIWdsKQotCQlyZXR1cm47Ci0KKwlnZnMyX2dsb2NrX2hvbGQoZ2wpOwogCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCWlmICh0aW1lX2JlZm9yZShub3csIGhvbGR0aW1lKSkKIAkJZGVsYXkgPSBob2xkdGltZSAtIG5vdzsKQEAgLTEzMTcsNzQgKzEyMjAsMzMgQEAKIAkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX2pkZXNjX21ha2VfZGlydHkoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpCi17Ci0Jc3RydWN0IGdmczJfamRlc2MgKmpkOwotCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewotCQlpZiAoamQtPmpkX2ppZCAhPSBqaWQpCi0JCQljb250aW51ZTsKLQkJamQtPmpkX2RpcnR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2ppbmRleF9zcGluKTsKLX0KLQogLyoqCi0gKiBnZnMyX2dsb2NrX2NiIC0gQ2FsbGJhY2sgdXNlZCBieSBsb2NraW5nIG1vZHVsZQotICogQHNkcDogUG9pbnRlciB0byB0aGUgc3VwZXJibG9jawotICogQHR5cGU6IFR5cGUgb2YgY2FsbGJhY2sKLSAqIEBkYXRhOiBUeXBlIGRlcGVuZGVudCBkYXRhIHBvaW50ZXIKKyAqIGdmczJfZ2xvY2tfY29tcGxldGUgLSBDYWxsYmFjayB1c2VkIGJ5IGxvY2tpbmcKKyAqIEBnbDogUG9pbnRlciB0byB0aGUgZ2xvY2sKKyAqIEByZXQ6IFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZGxtCiAgKgotICogQ2FsbGVkIGJ5IHRoZSBsb2NraW5nIG1vZHVsZSB3aGVuIGl0IHdhbnRzIHRvIHRlbGwgdXMgc29tZXRoaW5nLgotICogRWl0aGVyIHdlIG5lZWQgdG8gZHJvcCBhIGxvY2ssIG9uZSBvZiBvdXIgQVNZTkMgcmVxdWVzdHMgY29tcGxldGVkLCBvcgotICogYSBqb3VybmFsIGZyb20gYW5vdGhlciBjbGllbnQgbmVlZHMgdG8gYmUgcmVjb3ZlcmVkLgogICovCiAKLXZvaWQgZ2ZzMl9nbG9ja19jYih2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKK3ZvaWQgZ2ZzMl9nbG9ja19jb21wbGV0ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCByZXQpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBjYl9kYXRhOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBMTV9DQl9ORUVEX0U6Ci0JCWJsb2NraW5nX2NiKHNkcCwgZGF0YSwgTE1fU1RfVU5MT0NLRUQpOwotCQlyZXR1cm47Ci0KLQljYXNlIExNX0NCX05FRURfRDoKLQkJYmxvY2tpbmdfY2Ioc2RwLCBkYXRhLCBMTV9TVF9ERUZFUlJFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfTkVFRF9TOgotCQlibG9ja2luZ19jYihzZHAsIGRhdGEsIExNX1NUX1NIQVJFRCk7Ci0JCXJldHVybjsKLQotCWNhc2UgTE1fQ0JfQVNZTkM6IHsKLQkJc3RydWN0IGxtX2FzeW5jX2NiICphc3luYyA9IGRhdGE7Ci0JCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKLQotCQlkb3duX3JlYWQoJmdmczJfdW1vdW50X2ZsdXNoX3NlbSk7Ci0JCWdsID0gZ2ZzMl9nbG9ja19maW5kKHNkcCwgJmFzeW5jLT5sY19uYW1lKTsKLQkJaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBnbCkpCisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJZ2wtPmdsX3JlcGx5ID0gcmV0OworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpKSkgeworCQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdoOworCQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKKwkJZ2ggPSBmaW5kX2ZpcnN0X3dhaXRlcihnbCk7CisJCWlmICgoIShnaCAmJiAoZ2gtPmdoX2ZsYWdzICYgTE1fRkxBR19OT0VYUCkpICYmCisJCSAgICAgKGdsLT5nbF90YXJnZXQgIT0gTE1fU1RfVU5MT0NLRUQpKSB8fAorCQkgICAgKChyZXQgJiB+TE1fT1VUX1NUX01BU0spICE9IDApKQorCQkJc2V0X2JpdChHTEZfRlJPWkVOLCAmZ2wtPmdsX2ZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKKwkJaWYgKHRlc3RfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpKQogCQkJcmV0dXJuOwotCQlnbC0+Z2xfcmVwbHkgPSBhc3luYy0+bGNfcmV0OwotCQlzZXRfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCAmZ2wtPmdsX2ZsYWdzKTsKLQkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKLQkJCWdmczJfZ2xvY2tfcHV0KGdsKTsKLQkJdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJcmV0dXJuOwogCX0KLQotCWNhc2UgTE1fQ0JfTkVFRF9SRUNPVkVSWToKLQkJZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHNkcCwgKih1bnNpZ25lZCBpbnQgKilkYXRhKTsKLQkJaWYgKHNkcC0+c2RfcmVjb3ZlcmRfcHJvY2VzcykKLQkJCXdha2VfdXBfcHJvY2VzcyhzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpOwotCQlyZXR1cm47Ci0KLQlkZWZhdWx0OgotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgMCk7Ci0JCXJldHVybjsKLQl9CisJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7CiB9CiAKIC8qKgpAQCAtMTUxNSw2ICsxMzc3LDI1IEBACiAJcmV0dXJuIGhhc19lbnRyaWVzOwogfQogCisKKy8qKgorICogdGhhd19nbG9jayAtIHRoYXcgb3V0IGEgZ2xvY2sgd2hpY2ggaGFzIGFuIHVucHJvY2Vzc2VkIHJlcGx5IHdhaXRpbmcKKyAqIEBnbDogVGhlIGdsb2NrIHRvIHRoYXcKKyAqCisgKiBOLkIuIFdoZW4gd2UgZnJlZXplIGEgZ2xvY2ssIHdlIGxlYXZlIGEgcmVmIHRvIHRoZSBnbG9jayBvdXRzdGFuZGluZywKKyAqIHNvIHRoaXMgaGFzIHRvIHJlc3VsdCBpbiB0aGUgcmVmIGNvdW50IGJlaW5nIGRyb3BwZWQgYnkgb25lLgorICovCisKK3N0YXRpYyB2b2lkIHRoYXdfZ2xvY2soc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CisJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGdsb2NrX3dvcmtxdWV1ZSwgJmdsLT5nbF93b3JrLCAwKSA9PSAwKQorCQlnZnMyX2dsb2NrX3B1dChnbCk7Cit9CisKIC8qKgogICogY2xlYXJfZ2xvY2sgLSBsb29rIGF0IGEgZ2xvY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZnJlZSBpdCBmcm9tIGdsb2NrIGNhY2hlCiAgKiBAZ2w6IHRoZSBnbG9jayB0byBsb29rIGF0CkBAIC0xNTQwLDYgKzE0MjEsMjAgQEAKIH0KIAogLyoqCisgKiBnZnMyX2dsb2NrX3RoYXcgLSBUaGF3IGFueSBmcm96ZW4gZ2xvY2tzCisgKiBAc2RwOiBUaGUgc3VwZXIgYmxvY2sKKyAqCisgKi8KKwordm9pZCBnZnMyX2dsb2NrX3RoYXcoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJdW5zaWduZWQgeDsKKworCWZvciAoeCA9IDA7IHggPCBHRlMyX0dMX0hBU0hfU0laRTsgeCsrKQorCQlleGFtaW5lX2J1Y2tldCh0aGF3X2dsb2NrLCBzZHAsIHgpOworfQorCisvKioKICAqIGdmczJfZ2xfaGFzaF9jbGVhciAtIEVtcHR5IG91dCB0aGUgZ2xvY2sgaGFzaCB0YWJsZQogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KICAqIEB3YWl0OiB3YWl0IHVudGlsIGl0J3MgYWxsIGdvbmUKQEAgLTE2MTksNyArMTUxNCw3IEBACiAJaWYgKGZsYWdzICYgTE1fRkxBR19OT0VYUCkKIAkJKnArKyA9ICdlJzsKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX0FOWSkKLQkJKnArKyA9ICdhJzsKKwkJKnArKyA9ICdBJzsKIAlpZiAoZmxhZ3MgJiBMTV9GTEFHX1BSSU9SSVRZKQogCQkqcCsrID0gJ3AnOwogCWlmIChmbGFncyAmIEdMX0FTWU5DKQpAQCAtMTY4Myw2ICsxNTc4LDEwIEBACiAJCSpwKysgPSAnaSc7CiAJaWYgKHRlc3RfYml0KEdMRl9SRVBMWV9QRU5ESU5HLCBnZmxhZ3MpKQogCQkqcCsrID0gJ3InOworCWlmICh0ZXN0X2JpdChHTEZfSU5JVElBTCwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdJJzsKKwlpZiAodGVzdF9iaXQoR0xGX0ZST1pFTiwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdGJzsKIAkqcCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KQEAgLTE3MTcsMTQgKzE2MTYsMTMgQEAKIAlkdGltZSAqPSAxMDAwMDAwL0haOyAvKiBkZW1vdGUgdGltZSBpbiB1U2VjICovCiAJaWYgKCF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJZHRpbWUgPSAwOwotCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGw6JWQgYTolZCByOiVkXG4iLAorCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgcjolZFxuIiwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX3N0YXRlKSwKIAkJICBnbC0+Z2xfbmFtZS5sbl90eXBlLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2wtPmdsX25hbWUubG5fbnVtYmVyLAogCQkgIGdmbGFnczJzdHIoZ2ZsYWdzX2J1ZiwgJmdsLT5nbF9mbGFncyksCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF90YXJnZXQpLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfZGVtb3RlX3N0YXRlKSwgZHRpbWUsCi0JCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9sdmJfY291bnQpLAogCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikpOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggNTQzZWM3ZS4uYTYwMmEyOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTEsMTUgKzExLDEzMCBAQAogI2RlZmluZSBfX0dMT0NLX0RPVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKLS8qIEZsYWdzIGZvciBsb2NrIHJlcXVlc3RzOyB1c2VkIGluIGdmczJfaG9sZGVyIGdoX2ZsYWcgZmllbGQuCi0gICBGcm9tIGxtX2ludGVyZmFjZS5oOgorLyogT3B0aW9ucyBmb3IgaG9zdGRhdGEgcGFyc2VyICovCisKK2VudW0geworCU9wdF9qaWQsCisJT3B0X2lkLAorCU9wdF9maXJzdCwKKwlPcHRfbm9kaXIsCisJT3B0X2VyciwKK307CisKKy8qCisgKiBsbV9sb2NrbmFtZSB0eXBlcworICovCisKKyNkZWZpbmUgTE1fVFlQRV9SRVNFUlZFRAkweDAwCisjZGVmaW5lIExNX1RZUEVfTk9ORElTSwkJMHgwMQorI2RlZmluZSBMTV9UWVBFX0lOT0RFCQkweDAyCisjZGVmaW5lIExNX1RZUEVfUkdSUAkJMHgwMworI2RlZmluZSBMTV9UWVBFX01FVEEJCTB4MDQKKyNkZWZpbmUgTE1fVFlQRV9JT1BFTgkJMHgwNQorI2RlZmluZSBMTV9UWVBFX0ZMT0NLCQkweDA2CisjZGVmaW5lIExNX1RZUEVfUExPQ0sJCTB4MDcKKyNkZWZpbmUgTE1fVFlQRV9RVU9UQQkJMHgwOAorI2RlZmluZSBMTV9UWVBFX0pPVVJOQUwJCTB4MDkKKworLyoKKyAqIGxtX2xvY2soKSBzdGF0ZXMKKyAqCisgKiBTSEFSRUQgaXMgY29tcGF0aWJsZSB3aXRoIFNIQVJFRCwgbm90IHdpdGggREVGRVJSRUQgb3IgRVguCisgKiBERUZFUlJFRCBpcyBjb21wYXRpYmxlIHdpdGggREVGRVJSRUQsIG5vdCB3aXRoIFNIQVJFRCBvciBFWC4KKyAqLworCisjZGVmaW5lIExNX1NUX1VOTE9DS0VECQkwCisjZGVmaW5lIExNX1NUX0VYQ0xVU0lWRQkJMQorI2RlZmluZSBMTV9TVF9ERUZFUlJFRAkJMgorI2RlZmluZSBMTV9TVF9TSEFSRUQJCTMKKworLyoKKyAqIGxtX2xvY2soKSBmbGFncworICoKKyAqIExNX0ZMQUdfVFJZCisgKiBEb24ndCB3YWl0IHRvIGFjcXVpcmUgdGhlIGxvY2sgaWYgaXQgY2FuJ3QgYmUgZ3JhbnRlZCBpbW1lZGlhdGVseS4KKyAqCisgKiBMTV9GTEFHX1RSWV8xQ0IKKyAqIFNlbmQgb25lIGJsb2NraW5nIGNhbGxiYWNrIGlmIFRSWSBpcyBzZXQgYW5kIHRoZSBsb2NrIGlzIG5vdCBncmFudGVkLgorICoKKyAqIExNX0ZMQUdfTk9FWFAKKyAqIEdGUyBzZXRzIHRoaXMgZmxhZyBvbiBsb2NrIHJlcXVlc3RzIGl0IG1ha2VzIHdoaWxlIGRvaW5nIGpvdXJuYWwgcmVjb3ZlcnkuCisgKiBUaGVzZSBzcGVjaWFsIHJlcXVlc3RzIHNob3VsZCBub3QgYmUgYmxvY2tlZCBkdWUgdG8gdGhlIHJlY292ZXJ5IGxpa2UKKyAqIG9yZGluYXJ5IGxvY2tzIHdvdWxkIGJlLgorICoKKyAqIExNX0ZMQUdfQU5ZCisgKiBBIFNIQVJFRCByZXF1ZXN0IG1heSBhbHNvIGJlIGdyYW50ZWQgaW4gREVGRVJSRUQsIG9yIGEgREVGRVJSRUQgcmVxdWVzdCBtYXkKKyAqIGFsc28gYmUgZ3JhbnRlZCBpbiBTSEFSRUQuICBUaGUgcHJlZmVycmVkIHN0YXRlIGlzIHdoaWNoZXZlciBpcyBjb21wYXRpYmxlCisgKiB3aXRoIG90aGVyIGdyYW50ZWQgbG9ja3MsIG9yIHRoZSBzcGVjaWZpZWQgc3RhdGUgaWYgbm8gb3RoZXIgbG9ja3MgZXhpc3QuCisgKgorICogTE1fRkxBR19QUklPUklUWQorICogT3ZlcnJpZGUgZmFpcm5lc3MgY29uc2lkZXJhdGlvbnMuICBTdXBwb3NlIGEgbG9jayBpcyBoZWxkIGluIGEgc2hhcmVkIHN0YXRlCisgKiBhbmQgdGhlcmUgaXMgYSBwZW5kaW5nIHJlcXVlc3QgZm9yIHRoZSBkZWZlcnJlZCBzdGF0ZS4gIEEgc2hhcmVkIGxvY2sKKyAqIHJlcXVlc3Qgd2l0aCB0aGUgcHJpb3JpdHkgZmxhZyB3b3VsZCBiZSBhbGxvd2VkIHRvIGJ5cGFzcyB0aGUgZGVmZXJyZWQKKyAqIHJlcXVlc3QgYW5kIGRpcmVjdGx5IGpvaW4gdGhlIG90aGVyIHNoYXJlZCBsb2NrLiAgQSBzaGFyZWQgbG9jayByZXF1ZXN0CisgKiB3aXRob3V0IHRoZSBwcmlvcml0eSBmbGFnIG1pZ2h0IGJlIGZvcmNlZCB0byB3YWl0IHVudGlsIHRoZSBkZWZlcnJlZAorICogcmVxdWVzdGVkIGhhZCBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgdGhlIGxvY2suCisgKi8KKwogI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQogI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKICNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAogI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAgKi8KKyNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCisjZGVmaW5lIEdMX0FTWU5DCQkweDAwMDAwMDQwCisjZGVmaW5lIEdMX0VYQUNUCQkweDAwMDAwMDgwCisjZGVmaW5lIEdMX1NLSVAJCQkweDAwMDAwMTAwCisjZGVmaW5lIEdMX0FUSU1FCQkweDAwMDAwMjAwCisjZGVmaW5lIEdMX05PQ0FDSEUJCTB4MDAwMDA0MDAKKyAgCisvKgorICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKKyAqCisgKiBMTV9PVVRfU1RfTUFTSworICogTWFza3MgdGhlIGxvd2VyIHR3byBiaXRzIG9mIGxvY2sgc3RhdGUgaW4gdGhlIHJldHVybmVkIHZhbHVlLgorICoKKyAqIExNX09VVF9DQU5DRUxFRAorICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCisgKgorICogTE1fT1VUX0FTWU5DCisgKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCisgKgorICovCisKKyNkZWZpbmUgTE1fT1VUX1NUX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgTE1fT1VUX0NBTkNFTEVECQkweDAwMDAwMDA4CisjZGVmaW5lIExNX09VVF9BU1lOQwkJMHgwMDAwMDA4MAorI2RlZmluZSBMTV9PVVRfRVJST1IJCTB4MDAwMDAxMDAKKworLyoKKyAqIGxtX3JlY292ZXJ5X2RvbmUoKSBtZXNzYWdlcworICovCisKKyNkZWZpbmUgTE1fUkRfR0FWRVVQCQkzMDgKKyNkZWZpbmUgTE1fUkRfU1VDQ0VTUwkJMzA5CisKKyNkZWZpbmUgR0xSX1RSWUZBSUxFRAkJMTMKKworc3RydWN0IGxtX2xvY2tvcHMgeworCWNvbnN0IGNoYXIgKmxtX3Byb3RvX25hbWU7CisJaW50ICgqbG1fbW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqZnNuYW1lKTsKKyAJdm9pZCAoKmxtX3VubW91bnQpIChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CisJdm9pZCAoKmxtX3dpdGhkcmF3KSAoc3RydWN0IGdmczJfc2JkICpzZHApOworCXZvaWQgKCpsbV9wdXRfbG9jaykgKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKmdsKTsKKwl1bnNpZ25lZCBpbnQgKCpsbV9sb2NrKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsLAorCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCXZvaWQgKCpsbV9jYW5jZWwpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOworCWNvbnN0IG1hdGNoX3RhYmxlX3QgKmxtX3Rva2VuczsKK307CisKKyNkZWZpbmUgTE1fRkxBR19UUlkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTE1fRkxBR19UUllfMUNCCQkweDAwMDAwMDAyCisjZGVmaW5lIExNX0ZMQUdfTk9FWFAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTE1fRkxBR19BTlkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTE1fRkxBR19QUklPUklUWQkweDAwMDAwMDEwCiAKICNkZWZpbmUgR0xfQVNZTkMJCTB4MDAwMDAwNDAKICNkZWZpbmUgR0xfRVhBQ1QJCTB4MDAwMDAwODAKQEAgLTEyOCwxMCArMjQzLDEyIEBACiBpbnQgZ2ZzMl9sdmJfaG9sZChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogdm9pZCBnZnMyX2x2Yl91bmhvbGQoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAotdm9pZCBnZnMyX2dsb2NrX2NiKHZvaWQgKmNiX2RhdGEsIHVuc2lnbmVkIGludCB0eXBlLCB2b2lkICpkYXRhKTsKK3ZvaWQgZ2ZzMl9nbG9ja19jYihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSk7Cit2b2lkIGdmczJfZ2xvY2tfY29tcGxldGUoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgcmV0KTsKIHZvaWQgZ2ZzMl9yZWNsYWltX2dsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9nbF9oYXNoX2NsZWFyKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9nbG9ja19maW5pc2hfdHJ1bmNhdGUoc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKK3ZvaWQgZ2ZzMl9nbG9ja190aGF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAogaW50IF9faW5pdCBnZnMyX2dsb2NrX2luaXQodm9pZCk7CiB2b2lkIGdmczJfZ2xvY2tfZXhpdCh2b2lkKTsKQEAgLTE0MSw0ICsyNTgsNiBAQAogaW50IGdmczJfcmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKIHZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZnMyX2RsbV9vcHM7CisKICNlbmRpZiAvKiBfX0dMT0NLX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuYyBiL2ZzL2dmczIvZ2xvcHMuYwppbmRleCA4NTIyZDNhLi5iZjIzYTYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmMKKysrIGIvZnMvZ2ZzMi9nbG9wcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTM4LDE5ICszNywyNCBAQAogc3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfZ2woc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKLQl1bnNpZ25lZCBpbnQgYmxvY2tzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmZ2wtPmdsX2FpbF9saXN0OwogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVycm9yOworCXN0cnVjdCBnZnMyX3RyYW5zIHRyOwogCi0JYmxvY2tzID0gYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpOwotCWlmICghYmxvY2tzKQorCW1lbXNldCgmdHIsIDAsIHNpemVvZih0cikpOworCXRyLnRyX3Jldm9rZXMgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7CisKKwlpZiAoIXRyLnRyX3Jldm9rZXMpCiAJCXJldHVybjsKIAotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDAsIGJsb2Nrcyk7Ci0JaWYgKGdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWVycm9yKSkKLQkJcmV0dXJuOworCS8qIEEgc2hvcnRlbmVkLCBpbmxpbmUgdmVyc2lvbiBvZiBnZnMyX3RyYW5zX2JlZ2luKCkgKi8KKwl0ci50cl9yZXNlcnZlZCA9IDEgKyBnZnMyX3N0cnVjdDJibGsoc2RwLCB0ci50cl9yZXZva2VzLCBzaXplb2YodTY0KSk7CisJdHIudHJfaXAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJSU5JVF9MSVNUX0hFQUQoJnRyLnRyX2xpc3RfYnVmKTsKKwlnZnMyX2xvZ19yZXNlcnZlKHNkcCwgdHIudHJfcmVzZXJ2ZWQpOworCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8pOworCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9ICZ0cjsKIAogCWdmczJfbG9nX2xvY2soc2RwKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTcyLDI5ICs3Niw3IEBACiB9CiAKIC8qKgotICogZ2ZzMl9wdGVfaW52YWwgLSBTeW5jIGFuZCBpbnZhbGlkYXRlIGFsbCBQVEVzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBnZnMyX3B0ZV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlpcCA9IGdsLT5nbF9vYmplY3Q7Ci0JaW5vZGUgPSAmaXAtPmlfaW5vZGU7Ci0JaWYgKCFpcCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuOwotCi0JdW5tYXBfc2hhcmVkX21hcHBpbmdfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgMCwgMCk7Ci0JaWYgKHRlc3RfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKSkKLQkJc2V0X2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOwotCi19Ci0KLS8qKgotICogbWV0YV9nb19zeW5jIC0gc3luYyBvdXQgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCisgKiByZ3JwX2dvX3N5bmMgLSBzeW5jIG91dCB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZ2xvY2sKICAqIEBnbDogdGhlIGdsb2NrCiAgKgogICogQ2FsbGVkIHdoZW4gZGVtb3Rpbmcgb3IgdW5sb2NraW5nIGFuIEVYIGdsb2NrLiAgV2UgbXVzdCBmbHVzaApAQCAtMTAyLDM2ICs4NCw0MiBAQAogICogbm90IHJldHVybiB0byBjYWxsZXIgdG8gZGVtb3RlL3VubG9jayB0aGUgZ2xvY2sgdW50aWwgSS9PIGlzIGNvbXBsZXRlLgogICovCiAKLXN0YXRpYyB2b2lkIG1ldGFfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCitzdGF0aWMgdm9pZCByZ3JwX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKQotCQlyZXR1cm47CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCWludCBlcnJvcjsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkgewotCQlnZnMyX2xvZ19mbHVzaChnbC0+Z2xfc2JkLCBnbCk7Ci0JCWdmczJfbWV0YV9zeW5jKGdsKTsKLQkJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwotCX0KKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm47CisJQlVHX09OKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOworCisJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CisJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisgICAgICAgIG1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7CisJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwogfQogCiAvKioKLSAqIG1ldGFfZ29faW52YWwgLSBpbnZhbGlkYXRlIHRoZSBtZXRhZGF0YSBmb3IgdGhpcyBnbG9jaworICogcmdycF9nb19pbnZhbCAtIGludmFsaWRhdGUgdGhlIG1ldGFkYXRhIGZvciB0aGlzIGdsb2NrCiAgKiBAZ2w6IHRoZSBnbG9jawogICogQGZsYWdzOgogICoKKyAqIFdlIG5ldmVyIHVzZWQgTE1fU1RfREVGRVJSRUQgd2l0aCByZXNvdXJjZSBncm91cHMsIHNvIHRoYXQgd2UKKyAqIHNob3VsZCBhbHdheXMgc2VlIHRoZSBtZXRhZGF0YSBmbGFnIHNldCBoZXJlLgorICoKICAqLwogCi1zdGF0aWMgdm9pZCBtZXRhX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQorc3RhdGljIHZvaWQgcmdycF9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncykKIHsKLQlpZiAoIShmbGFncyAmIERJT19NRVRBREFUQSkpCi0JCXJldHVybjsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKIAotCWdmczJfbWV0YV9pbnZhbChnbCk7Ci0JaWYgKGdsLT5nbF9vYmplY3QgPT0gR0ZTMl9JKGdsLT5nbF9zYmQtPnNkX3JpbmRleCkpCi0JCWdsLT5nbF9zYmQtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDA7Ci0JZWxzZSBpZiAoZ2wtPmdsX29wcyA9PSAmZ2ZzMl9yZ3JwX2dsb3BzICYmIGdsLT5nbF9vYmplY3QpIHsKKwlCVUdfT04oIShmbGFncyAmIERJT19NRVRBREFUQSkpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOworCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIDApOworCisJaWYgKGdsLT5nbF9vYmplY3QpIHsKIAkJc3RydWN0IGdmczJfcmdycGQgKnJnZCA9IChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqKWdsLT5nbF9vYmplY3Q7Ci0KIAkJcmdkLT5yZF9mbGFncyAmPSB+R0ZTMl9SREZfVVBUT0RBVEU7CiAJfQogfQpAQCAtMTQ4LDQ4ICsxMzYsNTQgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CiAJaW50IGVycm9yOwogCi0JaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCkKLQkJZ2ZzMl9wdGVfaW52YWwoZ2wpOwotCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfRVhDTFVTSVZFKQotCQlyZXR1cm47Ci0KIAlpZiAoaXAgJiYgIVNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKIAkJaXAgPSBOVUxMOworCWlmIChpcCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoR0lGX1NXX1BBR0VELCAmaXAtPmlfZmxhZ3MpKQorCQl1bm1hcF9zaGFyZWRfbWFwcGluZ19yYW5nZShpcC0+aV9pbm9kZS5pX21hcHBpbmcsIDAsIDApOworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEdMRl9ESVJUWSwgJmdsLT5nbF9mbGFncykpCisJCXJldHVybjsKIAotCWlmICh0ZXN0X2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKGdsLT5nbF9zYmQsIGdsKTsKLQkJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKLQkJaWYgKGlwKSB7Ci0JCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX2lub2RlLmlfbWFwcGluZzsKLQkJCWZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKLQkJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7Ci0JCQltYXBwaW5nX3NldF9lcnJvcihtYXBwaW5nLCBlcnJvcik7Ci0JCX0KLQkJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7Ci0JCW1hcHBpbmdfc2V0X2Vycm9yKG1ldGFtYXBwaW5nLCBlcnJvcik7Ci0JCWNsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOwotCQlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CisJQlVHX09OKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9FWENMVVNJVkUpOworCisJZ2ZzMl9sb2dfZmx1c2goZ2wtPmdsX3NiZCwgZ2wpOworCWZpbGVtYXBfZmRhdGF3cml0ZShtZXRhbWFwcGluZyk7CisJaWYgKGlwKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaXAtPmlfaW5vZGUuaV9tYXBwaW5nOworCQlmaWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7CisJCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7CisJCW1hcHBpbmdfc2V0X2Vycm9yKG1hcHBpbmcsIGVycm9yKTsKIAl9CisJZXJyb3IgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisJbWFwcGluZ19zZXRfZXJyb3IobWV0YW1hcHBpbmcsIGVycm9yKTsKKwlnZnMyX2FpbF9lbXB0eV9nbChnbCk7CiB9CiAKIC8qKgogICogaW5vZGVfZ29faW52YWwgLSBwcmVwYXJlIGEgaW5vZGUgZ2xvY2sgdG8gYmUgcmVsZWFzZWQKICAqIEBnbDogdGhlIGdsb2NrCiAgKiBAZmxhZ3M6CisgKiAKKyAqIE5vcm1hbGx5IHdlIGludmxpZGF0ZSBldmVyeXRoaW5nLCBidXQgaWYgd2UgYXJlIG1vdmluZyBpbnRvCisgKiBMTV9TVF9ERUZFUlJFRCBmcm9tIExNX1NUX1NIQVJFRCBvciBMTV9TVF9FWENMVVNJVkUgdGhlbiB3ZQorICogY2FuIGtlZXAgaG9sZCBvZiB0aGUgbWV0YWRhdGEsIHNpbmNlIGl0IHdvbid0IGhhdmUgY2hhbmdlZC4KICAqCiAgKi8KIAogc3RhdGljIHZvaWQgaW5vZGVfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gZ2wtPmdsX29iamVjdDsKLQlpbnQgbWV0YSA9IChmbGFncyAmIERJT19NRVRBREFUQSk7CiAKLQlpZiAobWV0YSkgewotCQlnZnMyX21ldGFfaW52YWwoZ2wpOworCWdmczJfYXNzZXJ0X3dpdGhkcmF3KGdsLT5nbF9zYmQsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOworCisJaWYgKGZsYWdzICYgRElPX01FVEFEQVRBKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKIAkJaWYgKGlwKQogCQkJc2V0X2JpdChHSUZfSU5WQUxJRCwgJmlwLT5pX2ZsYWdzKTsKIAl9CiAKKwlpZiAoaXAgPT0gR0ZTMl9JKGdsLT5nbF9zYmQtPnNkX3JpbmRleCkpCisJCWdsLT5nbF9zYmQtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDA7CiAJaWYgKGlwICYmIFNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaXAtPmlfaW5vZGUuaV9tYXBwaW5nLCAwKTsKIH0KQEAgLTM5MCwyMCArMzg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBxdW90YV9nb19kZW1vdGVfb2sgLSBDaGVjayB0byBzZWUgaWYgaXQncyBvayB0byB1bmxvY2sgYSBxdW90YSBnbG9jawotICogQGdsOiB0aGUgZ2xvY2sKLSAqCi0gKiBSZXR1cm5zOiAxIGlmIGl0J3Mgb2sKLSAqLwotCi1zdGF0aWMgaW50IHF1b3RhX2dvX2RlbW90ZV9vayhjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0JcmV0dXJuICFhdG9taWNfcmVhZCgmZ2wtPmdsX2x2Yl9jb3VudCk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9tZXRhX2dsb3BzID0gewotCS5nb194bW90ZV90aCA9IG1ldGFfZ29fc3luYywKIAkuZ29fdHlwZSA9IExNX1RZUEVfTUVUQSwKIH07CiAKQEAgLTQxOCw4ICszOTksOCBAQAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3JncnBfZ2xvcHMgPSB7Ci0JLmdvX3htb3RlX3RoID0gbWV0YV9nb19zeW5jLAotCS5nb19pbnZhbCA9IG1ldGFfZ29faW52YWwsCisJLmdvX3htb3RlX3RoID0gcmdycF9nb19zeW5jLAorCS5nb19pbnZhbCA9IHJncnBfZ29faW52YWwsCiAJLmdvX2RlbW90ZV9vayA9IHJncnBfZ29fZGVtb3RlX29rLAogCS5nb19sb2NrID0gcmdycF9nb19sb2NrLAogCS5nb191bmxvY2sgPSByZ3JwX2dvX3VubG9jaywKQEAgLTQ0OCw3ICs0MjksNiBAQAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3F1b3RhX2dsb3BzID0gewotCS5nb19kZW1vdGVfb2sgPSBxdW90YV9nb19kZW1vdGVfb2ssCiAJLmdvX3R5cGUgPSBMTV9UWVBFX1FVT1RBLAogfTsKIApAQCAtNDU2LDMgKzQzNiwxNSBAQAogCS5nb190eXBlID0gTE1fVFlQRV9KT1VSTkFMLAogfTsKIAorY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2ZzMl9nbG9wc19saXN0W10gPSB7CisJW0xNX1RZUEVfTUVUQV0gPSAmZ2ZzMl9tZXRhX2dsb3BzLAorCVtMTV9UWVBFX0lOT0RFXSA9ICZnZnMyX2lub2RlX2dsb3BzLAorCVtMTV9UWVBFX1JHUlBdID0gJmdmczJfcmdycF9nbG9wcywKKwlbTE1fVFlQRV9OT05ESVNLXSA9ICZnZnMyX3RyYW5zX2dsb3BzLAorCVtMTV9UWVBFX0lPUEVOXSA9ICZnZnMyX2lvcGVuX2dsb3BzLAorCVtMTV9UWVBFX0ZMT0NLXSA9ICZnZnMyX2Zsb2NrX2dsb3BzLAorCVtMTV9UWVBFX05PTkRJU0tdID0gJmdmczJfbm9uZGlza19nbG9wcywKKwlbTE1fVFlQRV9RVU9UQV0gPSAmZ2ZzMl9xdW90YV9nbG9wcywKKwlbTE1fVFlQRV9KT1VSTkFMXSA9ICZnZnMyX2pvdXJuYWxfZ2xvcHMsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmggYi9mcy9nZnMyL2dsb3BzLmgKaW5kZXggYTFkOWI1Yi4uYjNhYTJlMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5oCisrKyBiL2ZzL2dmczIvZ2xvcHMuaApAQCAtMjEsNSArMjEsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9ub25kaXNrX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9xdW90YV9nbG9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zIGdmczJfam91cm5hbF9nbG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnZnMyX2dsb3BzX2xpc3RbXTsKIAogI2VuZGlmIC8qIF9fR0xPUFNfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggNjA4ODQ5ZC4uMzk5ZDFiOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAKICNkZWZpbmUgRElPX1dBSVQJMHgwMDAwMDAxMAogI2RlZmluZSBESU9fTUVUQURBVEEJMHgwMDAwMDAyMApAQCAtMjYsNiArMjgsNyBAQAogc3RydWN0IGdmczJfYWlsOwogc3RydWN0IGdmczJfamRlc2M7CiBzdHJ1Y3QgZ2ZzMl9zYmQ7CitzdHJ1Y3QgbG1fbG9ja29wczsKIAogdHlwZWRlZiB2b2lkICgqZ2ZzMl9nbG9wX2JoX3QpIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCByZXQpOwogCkBAIC0xMjEsNiArMTI0LDI4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBiZF9haWxfZ2xfbGlzdDsKIH07CiAKKy8qCisgKiBJbnRlcm5hbGx5LCB3ZSBwcmVmaXggdGhpbmdzIHdpdGggZ2RsbV8gYW5kIEdETE1fIChmb3IgZ2ZzLWRsbSkgc2luY2UgYQorICogcHJlZml4IG9mIGxvY2tfZGxtXyBnZXRzIGF3a3dhcmQuCisgKi8KKworI2RlZmluZSBHRExNX1NUUk5BTUVfQllURVMJMjUKKyNkZWZpbmUgR0RMTV9MVkJfU0laRQkJMzIKKworZW51bSB7CisJREZMX0JMT0NLX0xPQ0tTCQk9IDAsCit9OworCitzdHJ1Y3QgbG1fbG9ja25hbWUgeworCXU2NCBsbl9udW1iZXI7CisJdW5zaWduZWQgaW50IGxuX3R5cGU7Cit9OworCisjZGVmaW5lIGxtX25hbWVfZXF1YWwobmFtZTEsIG5hbWUyKSBcCisgICAgICAgICgoKG5hbWUxKS0+bG5fbnVtYmVyID09IChuYW1lMiktPmxuX251bWJlcikgJiYgXAorICAgICAgICAgKChuYW1lMSktPmxuX3R5cGUgPT0gKG5hbWUyKS0+bG5fdHlwZSkpCisKKwogc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyB7CiAJdm9pZCAoKmdvX3htb3RlX3RoKSAoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAlpbnQgKCpnb194bW90ZV9iaCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgc3RydWN0IGdmczJfaG9sZGVyICpnaCk7CkBAIC0xNjIsNiArMTg3LDggQEAKIAlHTEZfTEZMVVNICQkJPSA3LAogCUdMRl9JTlZBTElEQVRFX0lOX1BST0dSRVNTCT0gOCwKIAlHTEZfUkVQTFlfUEVORElORwkJPSA5LAorCUdMRl9JTklUSUFMCQkJPSAxMCwKKwlHTEZfRlJPWkVOCQkJPSAxMSwKIH07CiAKIHN0cnVjdCBnZnMyX2dsb2NrIHsKQEAgLTE3NiwxNiArMjAzLDE1IEBACiAJdW5zaWduZWQgaW50IGdsX3RhcmdldDsKIAl1bnNpZ25lZCBpbnQgZ2xfcmVwbHk7CiAJdW5zaWduZWQgaW50IGdsX2hhc2g7CisJdW5zaWduZWQgaW50IGdsX3JlcTsKIAl1bnNpZ25lZCBpbnQgZ2xfZGVtb3RlX3N0YXRlOyAvKiBzdGF0ZSByZXF1ZXN0ZWQgYnkgcmVtb3RlIG5vZGUgKi8KIAl1bnNpZ25lZCBsb25nIGdsX2RlbW90ZV90aW1lOyAvKiB0aW1lIG9mIGZpcnN0IGRlbW90ZSByZXF1ZXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBnbF9ob2xkZXJzOwogCiAJY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xfb3BzOwotCXZvaWQgKmdsX2xvY2s7Ci0JY2hhciAqZ2xfbHZiOwotCWF0b21pY190IGdsX2x2Yl9jb3VudDsKLQotCXVuc2lnbmVkIGxvbmcgZ2xfc3RhbXA7CisJY2hhciBnbF9zdHJuYW1lW0dETE1fU1RSTkFNRV9CWVRFU107CisJc3RydWN0IGRsbV9sa3NiIGdsX2xrc2I7CisJY2hhciBnbF9sdmJbMzJdOwogCXVuc2lnbmVkIGxvbmcgZ2xfdGNoYW5nZTsKIAl2b2lkICpnbF9vYmplY3Q7CiAKQEAgLTI4Myw3ICszMDksOSBAQAogCiBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHFkX2xpc3Q7Ci0JdW5zaWduZWQgaW50IHFkX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgcWRfcmVjbGFpbTsKKworCWF0b21pY190IHFkX2NvdW50OwogCiAJdTMyIHFkX2lkOwogCXVuc2lnbmVkIGxvbmcgcWRfZmxhZ3M7CQkvKiBRREZfLi4uICovCkBAIC0zMDMsNyArMzMxLDYgQEAKIAogCXU2NCBxZF9zeW5jX2dlbjsKIAl1bnNpZ25lZCBsb25nIHFkX2xhc3Rfd2FybjsKLQl1bnNpZ25lZCBsb25nIHFkX2xhc3RfdG91Y2hlZDsKIH07CiAKIHN0cnVjdCBnZnMyX3RyYW5zIHsKQEAgLTM5MCw3ICs0MTcsNyBAQAogCXVuc2lnbmVkIGludCBhcl9zdWlkZGlyOjE7CQkvKiBzdWlkZGlyIHN1cHBvcnQgKi8KIAl1bnNpZ25lZCBpbnQgYXJfZGF0YToyOwkJCS8qIG9yZGVyZWQvd3JpdGViYWNrICovCiAJdW5zaWduZWQgaW50IGFyX21ldGE6MTsJCQkvKiBtb3VudCBtZXRhZnMgKi8KLQl1bnNpZ25lZCBpbnQgYXJfbnVtX2dsb2NrZDsJCS8qIE51bWJlciBvZiBnbG9ja2QgdGhyZWFkcyAqLworCXVuc2lnbmVkIGludCBhcl9kaXNjYXJkOjE7CQkvKiBkaXNjYXJkIHJlcXVlc3RzICovCiB9OwogCiBzdHJ1Y3QgZ2ZzMl90dW5lIHsKQEAgLTQwNiw3ICs0MzMsNiBAQAogCXVuc2lnbmVkIGludCBndF9xdW90YV93YXJuX3BlcmlvZDsgLyogU2VjcyBiZXR3ZWVuIHF1b3RhIHdhcm4gbXNncyAqLwogCXVuc2lnbmVkIGludCBndF9xdW90YV9zY2FsZV9udW07IC8qIE51bWVyYXRvciAqLwogCXVuc2lnbmVkIGludCBndF9xdW90YV9zY2FsZV9kZW47IC8qIERlbm9taW5hdG9yICovCi0JdW5zaWduZWQgaW50IGd0X3F1b3RhX2NhY2hlX3NlY3M7CiAJdW5zaWduZWQgaW50IGd0X3F1b3RhX3F1YW50dW07IC8qIFNlY3MgYmV0d2VlbiBzeW5jcyB0byBxdW90YSBmaWxlICovCiAJdW5zaWduZWQgaW50IGd0X25ld19maWxlc19qZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3RfbWF4X3JlYWRhaGVhZDsgLyogTWF4IGJ5dGVzIHRvIHJlYWQtYWhlYWQgZnJvbSBkaXNrICovCkBAIC00NDUsNiArNDcxLDMxIEBACiAKIAljaGFyIHNiX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTl07CiAJY2hhciBzYl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU5dOworCXU4IHNiX3V1aWRbMTZdOworfTsKKworLyoKKyAqIGxtX21vdW50KCkgcmV0dXJuIHZhbHVlcworICoKKyAqIGxzX2ppZCAtIHRoZSBqb3VybmFsIElEIHRoaXMgbm9kZSBzaG91bGQgdXNlCisgKiBsc19maXJzdCAtIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtCisgKiBsc19sb2Nrc3BhY2UgLSBsb2NrIG1vZHVsZSdzIGNvbnRleHQgZm9yIHRoaXMgZmlsZSBzeXN0ZW0KKyAqIGxzX29wcyAtIGxvY2sgbW9kdWxlJ3MgZnVuY3Rpb25zCisgKi8KKworc3RydWN0IGxtX2xvY2tzdHJ1Y3QgeworCXUzMiBsc19pZDsKKwl1bnNpZ25lZCBpbnQgbHNfamlkOworCXVuc2lnbmVkIGludCBsc19maXJzdDsKKwl1bnNpZ25lZCBpbnQgbHNfZmlyc3RfZG9uZTsKKwl1bnNpZ25lZCBpbnQgbHNfbm9kaXI7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxzX29wczsKKwl1bnNpZ25lZCBsb25nIGxzX2ZsYWdzOworCWRsbV9sb2Nrc3BhY2VfdCAqbHNfZGxtOworCisJaW50IGxzX3JlY292ZXJfamlkOworCWludCBsc19yZWNvdmVyX2ppZF9kb25lOworCWludCBsc19yZWNvdmVyX2ppZF9zdGF0dXM7CiB9OwogCiBzdHJ1Y3QgZ2ZzMl9zYmQgewpAQCAtNTIwLDcgKzU3MSw2IEBACiAJc3BpbmxvY2tfdCBzZF9qaW5kZXhfc3BpbjsKIAlzdHJ1Y3QgbXV0ZXggc2RfamluZGV4X211dGV4OwogCXVuc2lnbmVkIGludCBzZF9qb3VybmFsczsKLQl1bnNpZ25lZCBsb25nIHNkX2ppbmRleF9yZWZyZXNoX3RpbWU7CiAKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqc2RfamRlc2M7CiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2pvdXJuYWxfZ2g7CkBAIC01NDAsNyArNTkwLDYgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgc2RfcXVvdGFfbGlzdDsKIAlhdG9taWNfdCBzZF9xdW90YV9jb3VudDsKLQlzcGlubG9ja190IHNkX3F1b3RhX3NwaW47CiAJc3RydWN0IG11dGV4IHNkX3F1b3RhX211dGV4OwogCXdhaXRfcXVldWVfaGVhZF90IHNkX3F1b3RhX3dhaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBzZF90cnVuY19saXN0OwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDNiODdjMTguLjdiMjc3ZDQ0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIApAQCAtMTM3LDE2ICsxMzYsMTYgQEAKIAogCWlmIChTX0lTUkVHKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfZmlsZV9pb3BzOwotCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzKQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZmlsZV9mb3BzX25vbG9jazsKKwkJaWYgKGdmczJfbG9jYWxmbG9ja3Moc2RwKSkKKwkJCWlub2RlLT5pX2ZvcCA9IGdmczJfZmlsZV9mb3BzX25vbG9jazsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZmlsZV9mb3BzOworCQkJaW5vZGUtPmlfZm9wID0gZ2ZzMl9maWxlX2ZvcHM7CiAJfSBlbHNlIGlmIChTX0lTRElSKG1vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmdmczJfZGlyX2lvcHM7Ci0JCWlmIChzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCQlpbm9kZS0+aV9mb3AgPSAmZ2ZzMl9kaXJfZm9wc19ub2xvY2s7CisJCWlmIChnZnMyX2xvY2FsZmxvY2tzKHNkcCkpCisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2Rpcl9mb3BzX25vbG9jazsKIAkJZWxzZQotCQkJaW5vZGUtPmlfZm9wID0gJmdmczJfZGlyX2ZvcHM7CisJCQlpbm9kZS0+aV9mb3AgPSBnZnMyX2Rpcl9mb3BzOwogCX0gZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZnZnMyX3N5bWxpbmtfaW9wczsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5oIGIvZnMvZ2ZzMi9pbm9kZS5oCmluZGV4IGQ1MzI5MzYuLmRjYTRmZWUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuaAorKysgYi9mcy9nZnMyL2lub2RlLmgKQEAgLTEwMSwxMiArMTAxLDI2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX3N5bWxpbmtfaW9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfZm9wczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZmlsZV9mb3BzX25vbG9jazsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdmczJfZGlyX2ZvcHNfbm9sb2NrOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzX25vbG9jazsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzX25vbG9jazsKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSk7CisgCisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2ZpbGVfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZnMyX2Rpcl9mb3BzOworc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9sb2NhbGZsb2Nrcyhjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlyZXR1cm4gc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzOworfQorI2Vsc2UgLyogU2luZ2xlIG5vZGUgb25seSAqLworI2RlZmluZSBnZnMyX2ZpbGVfZm9wcyBOVUxMCisjZGVmaW5lIGdmczJfZGlyX2ZvcHMgTlVMTAorc3RhdGljIGlubGluZSBpbnQgZ2ZzMl9sb2NhbGZsb2Nrcyhjb25zdCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSAqLwogCiAjZW5kaWYgLyogX19JTk9ERV9ET1RfSF9fICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja19kbG0uYyBiL2ZzL2dmczIvbG9ja19kbG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmRmOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZ2ZzMi9sb2NrX2RsbS5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbG0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CisKKyNpbmNsdWRlICJpbmNvcmUuaCIKKyNpbmNsdWRlICJnbG9jay5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworCitzdGF0aWMgdm9pZCBnZGxtX2FzdCh2b2lkICphcmcpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYXJnOworCXVuc2lnbmVkIHJldCA9IGdsLT5nbF9zdGF0ZTsKKworCUJVR19PTihnbC0+Z2xfbGtzYi5zYl9mbGFncyAmIERMTV9TQkZfREVNT1RFRCk7CisKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX1ZBTE5PVFZBTElEKQorCQltZW1zZXQoZ2wtPmdsX2x2YiwgMCwgR0RMTV9MVkJfU0laRSk7CisKKwlzd2l0Y2ggKGdsLT5nbF9sa3NiLnNiX3N0YXR1cykgeworCWNhc2UgLURMTV9FVU5MT0NLOiAvKiBVbmxvY2tlZCwgc28gZ2xvY2sgY2FuIGJlIGZyZWVkICovCisJCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOworCQlyZXR1cm47CisJY2FzZSAtRExNX0VDQU5DRUw6IC8qIENhbmNlbCB3aGlsZSBnZXR0aW5nIGxvY2sgKi8KKwkJcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKKwkJZ290byBvdXQ7CisJY2FzZSAtRUFHQUlOOiAvKiBUcnkgbG9jayBmYWlscyAqLworCQlnb3RvIG91dDsKKwljYXNlIC1FSU5WQUw6IC8qIEludmFsaWQgKi8KKwljYXNlIC1FTk9NRU06IC8qIE91dCBvZiBtZW1vcnkgKi8KKwkJcmV0IHw9IExNX09VVF9FUlJPUjsKKwkJZ290byBvdXQ7CisJY2FzZSAwOiAvKiBTdWNjZXNzICovCisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIFNvbWV0aGluZyB1bmV4cGVjdGVkICovCisJCUJVRygpOworCX0KKworCXJldCA9IGdsLT5nbF9yZXE7CisJaWYgKGdsLT5nbF9sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9BTFRNT0RFKSB7CisJCWlmIChnbC0+Z2xfcmVxID09IExNX1NUX1NIQVJFRCkKKwkJCXJldCA9IExNX1NUX0RFRkVSUkVEOworCQllbHNlIGlmIChnbC0+Z2xfcmVxID09IExNX1NUX0RFRkVSUkVEKQorCQkJcmV0ID0gTE1fU1RfU0hBUkVEOworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlzZXRfYml0KEdMRl9JTklUSUFMLCAmZ2wtPmdsX2ZsYWdzKTsKKwlnZnMyX2dsb2NrX2NvbXBsZXRlKGdsLCByZXQpOworCXJldHVybjsKK291dDoKKwlpZiAoIXRlc3RfYml0KEdMRl9JTklUSUFMLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9IDA7CisJZ2ZzMl9nbG9ja19jb21wbGV0ZShnbCwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgZ2RsbV9iYXN0KHZvaWQgKmFyZywgaW50IG1vZGUpCit7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYXJnOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBETE1fTE9DS19FWDoKKwkJZ2ZzMl9nbG9ja19jYihnbCwgTE1fU1RfVU5MT0NLRUQpOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX0NXOgorCQlnZnMyX2dsb2NrX2NiKGdsLCBMTV9TVF9ERUZFUlJFRCk7CisJCWJyZWFrOworCWNhc2UgRExNX0xPQ0tfUFI6CisJCWdmczJfZ2xvY2tfY2IoZ2wsIExNX1NUX1NIQVJFRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBiYXN0IG1vZGUgJWQiLCBtb2RlKTsKKwkJQlVHKCk7CisJfQorfQorCisvKiBjb252ZXJ0IGdmcyBsb2NrLXN0YXRlIHRvIGRsbSBsb2NrLW1vZGUgKi8KKworc3RhdGljIGludCBtYWtlX21vZGUoY29uc3QgdW5zaWduZWQgaW50IGxtc3RhdGUpCit7CisJc3dpdGNoIChsbXN0YXRlKSB7CisJY2FzZSBMTV9TVF9VTkxPQ0tFRDoKKwkJcmV0dXJuIERMTV9MT0NLX05MOworCWNhc2UgTE1fU1RfRVhDTFVTSVZFOgorCQlyZXR1cm4gRExNX0xPQ0tfRVg7CisJY2FzZSBMTV9TVF9ERUZFUlJFRDoKKwkJcmV0dXJuIERMTV9MT0NLX0NXOworCWNhc2UgTE1fU1RfU0hBUkVEOgorCQlyZXR1cm4gRExNX0xPQ0tfUFI7CisJfQorCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBMTSBzdGF0ZSAlZCIsIGxtc3RhdGUpOworCUJVRygpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHUzMiBtYWtlX2ZsYWdzKGNvbnN0IHUzMiBsa2lkLCBjb25zdCB1bnNpZ25lZCBpbnQgZ2ZzX2ZsYWdzLAorCQkgICAgICBjb25zdCBpbnQgcmVxKQoreworCXUzMiBsa2YgPSAwOworCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZKQorCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOworCisJaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfVFJZXzFDQikgeworCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFOworCQlsa2YgfD0gRExNX0xLRl9OT1FVRVVFQkFTVDsKKwl9CisKKwlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19QUklPUklUWSkgeworCQlsa2YgfD0gRExNX0xLRl9OT09SREVSOworCQlsa2YgfD0gRExNX0xLRl9IRUFEUVVFOworCX0KKworCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX0FOWSkgeworCQlpZiAocmVxID09IERMTV9MT0NLX1BSKQorCQkJbGtmIHw9IERMTV9MS0ZfQUxUQ1c7CisJCWVsc2UgaWYgKHJlcSA9PSBETE1fTE9DS19DVykKKwkJCWxrZiB8PSBETE1fTEtGX0FMVFBSOworCQllbHNlCisJCQlCVUcoKTsKKwl9CisKKwlpZiAobGtpZCAhPSAwKSAKKwkJbGtmIHw9IERMTV9MS0ZfQ09OVkVSVDsKKworCWxrZiB8PSBETE1fTEtGX1ZBTEJMSzsKKworCXJldHVybiBsa2Y7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisJaW50IHJlcTsKKwl1MzIgbGtmOworCisJZ2wtPmdsX3JlcSA9IHJlcV9zdGF0ZTsKKwlyZXEgPSBtYWtlX21vZGUocmVxX3N0YXRlKTsKKwlsa2YgPSBtYWtlX2ZsYWdzKGdsLT5nbF9sa3NiLnNiX2xraWQsIGZsYWdzLCByZXEpOworCisJLyoKKwkgKiBTdWJtaXQgdGhlIGFjdHVhbCBsb2NrIHJlcXVlc3QuCisJICovCisKKwllcnJvciA9IGRsbV9sb2NrKGxzLT5sc19kbG0sIHJlcSwgJmdsLT5nbF9sa3NiLCBsa2YsIGdsLT5nbF9zdHJuYW1lLAorCQkJIEdETE1fU1RSTkFNRV9CWVRFUyAtIDEsIDAsIGdkbG1fYXN0LCBnbCwgZ2RsbV9iYXN0KTsKKwlpZiAoZXJyb3IgPT0gLUVBR0FJTikKKwkJcmV0dXJuIDA7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gTE1fT1VUX0VSUk9SOworCXJldHVybiBMTV9PVVRfQVNZTkM7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fcHV0X2xvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IHB0cjsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmZ2wtPmdsX3NiZC0+c2RfbG9ja3N0cnVjdDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZ2wtPmdsX2xrc2Iuc2JfbGtpZCA9PSAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShjYWNoZXAsIGdsKTsKKwkJcmV0dXJuOworCX0KKworCWVycm9yID0gZGxtX3VubG9jayhscy0+bHNfZGxtLCBnbC0+Z2xfbGtzYi5zYl9sa2lkLCBETE1fTEtGX1ZBTEJMSywKKwkJCSAgIE5VTEwsIGdsKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnZGxtX3VubG9jayAleCwlbGx4IGVycj0lZFxuIiwKKwkJICAgICAgIGdsLT5nbF9uYW1lLmxuX3R5cGUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwgZXJyb3IpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBnZGxtX2NhbmNlbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CisJZGxtX3VubG9jayhscy0+bHNfZGxtLCBnbC0+Z2xfbGtzYi5zYl9sa2lkLCBETE1fTEtGX0NBTkNFTCwgTlVMTCwgZ2wpOworfQorCitzdGF0aWMgaW50IGdkbG1fbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmZzbmFtZSkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWludCBlcnJvcjsKKworCWlmIChmc25hbWUgPT0gTlVMTCkgeworCQlmc19pbmZvKHNkcCwgIm5vIGZzbmFtZSBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVycm9yID0gZGxtX25ld19sb2Nrc3BhY2UoZnNuYW1lLCBzdHJsZW4oZnNuYW1lKSwgJmxzLT5sc19kbG0sCisJCQkJICBETE1fTFNGTF9GUyB8IERMTV9MU0ZMX05FV0VYQ0wgfAorCQkJCSAgKGxzLT5sc19ub2RpciA/IERMTV9MU0ZMX05PRElSIDogMCksCisJCQkJICBHRExNX0xWQl9TSVpFKTsKKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX0VSUiAiZGxtX25ld19sb2Nrc3BhY2UgZXJyb3IgJWQiLCBlcnJvcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGdkbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCisJaWYgKGxzLT5sc19kbG0pIHsKKwkJZGxtX3JlbGVhc2VfbG9ja3NwYWNlKGxzLT5sc19kbG0sIDIpOworCQlscy0+bHNfZGxtID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGRsbV90b2tlbnMgPSB7CisJeyBPcHRfamlkLCAiamlkPSVkIn0sCisJeyBPcHRfaWQsICJpZD0lZCJ9LAorCXsgT3B0X2ZpcnN0LCAiZmlyc3Q9JWQifSwKKwl7IE9wdF9ub2RpciwgIm5vZGlyPSVkIn0sCisJeyBPcHRfZXJyLCBOVUxMIH0sCit9OworCitjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZnMyX2RsbV9vcHMgPSB7CisJLmxtX3Byb3RvX25hbWUgPSAibG9ja19kbG0iLAorCS5sbV9tb3VudCA9IGdkbG1fbW91bnQsCisJLmxtX3VubW91bnQgPSBnZGxtX3VubW91bnQsCisJLmxtX3B1dF9sb2NrID0gZ2RsbV9wdXRfbG9jaywKKwkubG1fbG9jayA9IGdkbG1fbG9jaywKKwkubG1fY2FuY2VsID0gZ2RsbV9jYW5jZWwsCisJLmxtX3Rva2VucyA9ICZkbG1fdG9rZW5zLAorfTsKKwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nLmMgYi9mcy9nZnMyL2xvY2tpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzMjQzYS4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgotCi1zdHJ1Y3QgbG1oX3dyYXBwZXIgewotCXN0cnVjdCBsaXN0X2hlYWQgbHdfbGlzdDsKLQljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHdfb3BzOwotfTsKLQotc3RhdGljIGludCBub2xvY2tfbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaik7Ci0KLS8qIExpc3Qgb2YgcmVnaXN0ZXJlZCBsb3ctbGV2ZWwgbG9ja2luZyBwcm90b2NvbHMuICBBIGZpbGUgc3lzdGVtIHNlbGVjdHMgb25lCi0gICBvZiB0aGVtIGJ5IG5hbWUgYXQgbW91bnQgdGltZSwgZS5nLiBsb2NrX25vbG9jaywgbG9ja19kbG0uICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0gewotCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKLQkubG1fbW91bnQgPSBub2xvY2tfbW91bnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGxtaF93cmFwcGVyIG5vbG9ja19wcm90byAgPSB7Ci0JLmx3X2xpc3QgPSBMSVNUX0hFQURfSU5JVChub2xvY2tfcHJvdG8ubHdfbGlzdCksCi0JLmx3X29wcyA9ICZub2xvY2tfb3BzLAotfTsKLQotc3RhdGljIExJU1RfSEVBRChsbWhfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGxtaF9sb2NrKTsKLQotc3RhdGljIGludCBub2xvY2tfbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQljaGFyICpjOwotCXVuc2lnbmVkIGludCBqaWQ7Ci0KLQljID0gc3Ryc3RyKGhvc3RfZGF0YSwgImppZD0iKTsKLQlpZiAoIWMpCi0JCWppZCA9IDA7Ci0JZWxzZSB7Ci0JCWMgKz0gNDsKLQkJc3NjYW5mKGMsICIldSIsICZqaWQpOwotCX0KLQotCWxvY2tzdHJ1Y3QtPmxzX2ppZCA9IGppZDsKLQlsb2Nrc3RydWN0LT5sc19maXJzdCA9IDE7Ci0JbG9ja3N0cnVjdC0+bHNfbHZiX3NpemUgPSBtaW5fbHZiX3NpemU7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzID0gJm5vbG9ja19vcHM7Ci0JbG9ja3N0cnVjdC0+bHNfZmxhZ3MgPSBMTV9MU0ZMQUdfTE9DQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX3JlZ2lzdGVyX2xvY2twcm90byAtIFJlZ2lzdGVyIGEgbG93LWxldmVsIGxvY2tpbmcgcHJvdG9jb2wKLSAqIEBwcm90bzogdGhlIHByb3RvY29sIGRlZmluaXRpb24KLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FWFhYIG9uIGZhaWx1cmUKLSAqLwotCi1pbnQgZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKQotewotCXN0cnVjdCBsbWhfd3JhcHBlciAqbHc7Ci0KLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGx3LCAmbG1oX2xpc3QsIGx3X2xpc3QpIHsKLQkJaWYgKCFzdHJjbXAobHctPmx3X29wcy0+bG1fcHJvdG9fbmFtZSwgcHJvdG8tPmxtX3Byb3RvX25hbWUpKSB7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IHByb3RvY29sICVzIGFscmVhZHkgZXhpc3RzXG4iLAotCQkJICAgICAgIHByb3RvLT5sbV9wcm90b19uYW1lKTsKLQkJCXJldHVybiAtRUVYSVNUOwotCQl9Ci0JfQotCi0JbHcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG1oX3dyYXBwZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWx3KSB7Ci0JCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlsdy0+bHdfb3BzID0gcHJvdG87Ci0JbGlzdF9hZGQoJmx3LT5sd19saXN0LCAmbG1oX2xpc3QpOwotCi0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvIC0gVW5yZWdpc3RlciBhIGxvdy1sZXZlbCBsb2NraW5nIHByb3RvY29sCi0gKiBAcHJvdG86IHRoZSBwcm90b2NvbCBkZWZpbml0aW9uCi0gKgotICovCi0KLXZvaWQgZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byhjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqcHJvdG8pCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdzsKLQotCW11dGV4X2xvY2soJmxtaF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobHcsICZsbWhfbGlzdCwgbHdfbGlzdCkgewotCQlpZiAoIXN0cmNtcChsdy0+bHdfb3BzLT5sbV9wcm90b19uYW1lLCBwcm90by0+bG1fcHJvdG9fbmFtZSkpIHsKLQkJCWxpc3RfZGVsKCZsdy0+bHdfbGlzdCk7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCWtmcmVlKGx3KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmbG1oX2xvY2spOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogY2FuJ3QgdW5yZWdpc3RlciBsb2NrIHByb3RvY29sICVzXG4iLAotCSAgICAgICBwcm90by0+bG1fcHJvdG9fbmFtZSk7Ci19Ci0KLS8qKgotICogZ2ZzMl9tb3VudF9sb2NrcHJvdG8gLSBNb3VudCBhIGxvY2sgcHJvdG9jb2wKLSAqIEBwcm90b19uYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHByb3RvY29sCi0gKiBAdGFibGVfbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBsb2NrIHNwYWNlCi0gKiBAaG9zdF9kYXRhIC0gZGF0YSBzcGVjaWZpYyB0byB0aGlzIGhvc3QKLSAqIEBjYiAtIHRoZSBjYWxsYmFjayB0byB0aGUgY29kZSB1c2luZyB0aGUgbG9jayBtb2R1bGUKLSAqIEBzZHAgLSBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAbWluX2x2Yl9zaXplIC0gdGhlIG1pbmludW0gTFZCIHNpemUgdGhhdCB0aGUgY2FsbGVyIGNhbiBkZWFsIHdpdGgKLSAqIEBmbGFncyAtIExNX01GTEFHXyoKLSAqIEBsb2Nrc3RydWN0IC0gYSBzdHJ1Y3R1cmUgcmV0dXJuZWQgZGVzY3JpYmluZyB0aGUgbW91bnQKLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FWFhYIG9uIGZhaWx1cmUKLSAqLwotCi1pbnQgZ2ZzMl9tb3VudF9sb2NrcHJvdG8oY2hhciAqcHJvdG9fbmFtZSwgY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0Jc3RydWN0IGxtaF93cmFwcGVyICpsdyA9IE5VTEw7Ci0JaW50IHRyeSA9IDA7Ci0JaW50IGVycm9yLCBmb3VuZDsKLQotCi1yZXRyeToKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmbm9sb2NrX3Byb3RvLmx3X2xpc3QpKQotCQlsaXN0X2FkZCgmbm9sb2NrX3Byb3RvLmx3X2xpc3QsICZsbWhfbGlzdCk7Ci0KLQlmb3VuZCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShsdywgJmxtaF9saXN0LCBsd19saXN0KSB7Ci0JCWlmICghc3RyY21wKGx3LT5sd19vcHMtPmxtX3Byb3RvX25hbWUsIHByb3RvX25hbWUpKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJaWYgKCF0cnkgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKLQkJCXRyeSA9IDE7Ci0JCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJCXJlcXVlc3RfbW9kdWxlKHByb3RvX25hbWUpOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJHRlMyOiBjYW4ndCBmaW5kIHByb3RvY29sICVzXG4iLCBwcm90b19uYW1lKTsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobHctPmx3X29wcy0+bG1fb3duZXIgJiYKLQkgICAgIXRyeV9tb2R1bGVfZ2V0KGx3LT5sd19vcHMtPmxtX293bmVyKSkgewotCQl0cnkgPSAwOwotCQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQkJbXNsZWVwKDEwMDApOwotCQlnb3RvIHJldHJ5OwotCX0KLQotCWVycm9yID0gbHctPmx3X29wcy0+bG1fbW91bnQodGFibGVfbmFtZSwgaG9zdF9kYXRhLCBjYiwgY2JfZGF0YSwKLQkJCQkgICAgIG1pbl9sdmJfc2l6ZSwgZmxhZ3MsIGxvY2tzdHJ1Y3QsIGZza29iaik7Ci0JaWYgKGVycm9yKQotCQltb2R1bGVfcHV0KGx3LT5sd19vcHMtPmxtX293bmVyKTsKLW91dDoKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXZvaWQgZ2ZzMl91bm1vdW50X2xvY2twcm90byhzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCkKLXsKLQltdXRleF9sb2NrKCZsbWhfbG9jayk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fdW5tb3VudCkKLQkJbG9ja3N0cnVjdC0+bHNfb3BzLT5sbV91bm1vdW50KGxvY2tzdHJ1Y3QtPmxzX2xvY2tzcGFjZSk7Ci0JaWYgKGxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fb3duZXIpCi0JCW1vZHVsZV9wdXQobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcik7Ci0JbXV0ZXhfdW5sb2NrKCZsbWhfbG9jayk7Ci19Ci0KLS8qKgotICogZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8gLSBhYm5vcm1hbGx5IHVubW91bnQgYSBsb2NrIG1vZHVsZQotICogQGxvY2tzdHJ1Y3Q6IHRoZSBsb2Nrc3RydWN0IHBhc3NlZCBpbnRvIG1vdW50Ci0gKgotICovCi0KLXZvaWQgZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpCi17Ci0JbXV0ZXhfbG9jaygmbG1oX2xvY2spOwotCWxvY2tzdHJ1Y3QtPmxzX29wcy0+bG1fd2l0aGRyYXcobG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlKTsKLQlpZiAobG9ja3N0cnVjdC0+bHNfb3BzLT5sbV9vd25lcikKLQkJbW9kdWxlX3B1dChsb2Nrc3RydWN0LT5sc19vcHMtPmxtX293bmVyKTsKLQltdXRleF91bmxvY2soJmxtaF9sb2NrKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8pOwotRVhQT1JUX1NZTUJPTF9HUEwoZ2ZzMl91bnJlZ2lzdGVyX2xvY2twcm90byk7Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA5YmI2Li4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCi1sb2NrX2RsbS15IDo9IGxvY2subyBtYWluLm8gbW91bnQubyBzeXNmcy5vIHRocmVhZC5vCi0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9jay5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODJjOTAuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBjaGFyIGp1bmtfbHZiW0dETE1fTFZCX1NJWkVdOwotCi0KLS8qIGNvbnZlcnQgZGxtIGxvY2stbW9kZSB0byBnZnMgbG9jay1zdGF0ZSAqLwotCi1zdGF0aWMgczE2IGdkbG1fbWFrZV9sbXN0YXRlKHMxNiBkbG1tb2RlKQotewotCXN3aXRjaCAoZGxtbW9kZSkgewotCWNhc2UgRExNX0xPQ0tfSVY6Ci0JY2FzZSBETE1fTE9DS19OTDoKLQkJcmV0dXJuIExNX1NUX1VOTE9DS0VEOwotCWNhc2UgRExNX0xPQ0tfRVg6Ci0JCXJldHVybiBMTV9TVF9FWENMVVNJVkU7Ci0JY2FzZSBETE1fTE9DS19DVzoKLQkJcmV0dXJuIExNX1NUX0RFRkVSUkVEOwotCWNhc2UgRExNX0xPQ0tfUFI6Ci0JCXJldHVybiBMTV9TVF9TSEFSRUQ7Ci0JfQotCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIERMTSBtb2RlICVkIiwgZGxtbW9kZSk7Ci0JcmV0dXJuIC0xOwotfQotCi0vKiBBIGxvY2sgcGxhY2VkIG9uIHRoaXMgcXVldWUgaXMgcmUtc3VibWl0dGVkIHRvIERMTSBhcyBzb29uIGFzIHRoZSBsb2NrX2RsbQotICAgdGhyZWFkIGdldHMgdG8gaXQuICovCi0KLXN0YXRpYyB2b2lkIHF1ZXVlX3N1Ym1pdChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZscC0+ZGVsYXlfbGlzdCwgJmxzLT5zdWJtaXQpOwotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0Jd2FrZV91cCgmbHMtPnRocmVhZF93YWl0KTsKLX0KLQotc3RhdGljIHZvaWQgd2FrZV91cF9hc3Qoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0JY2xlYXJfYml0KExGTF9BU1RfV0FJVCwgJmxwLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQl3YWtlX3VwX2JpdCgmbHAtPmZsYWdzLCBMRkxfQVNUX1dBSVQpOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX2RlbGV0ZV9scChzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmxwLT5kZWxheV9saXN0KSkKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCWxzLT5hbGxfbG9ja3NfY291bnQtLTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0Ja2ZyZWUobHApOwotfQotCi1zdGF0aWMgdm9pZCBnZGxtX3F1ZXVlX2RlbGF5ZWQoc3RydWN0IGdkbG1fbG9jayAqbHApCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmbHAtPmRlbGF5X2xpc3QsICZscy0+ZGVsYXllZCk7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19jb21wbGV0ZShzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0Jc3RydWN0IGxtX2FzeW5jX2NiIGFjYjsKLQotCW1lbXNldCgmYWNiLCAwLCBzaXplb2YoYWNiKSk7Ci0KLQlpZiAobHAtPmxrc2Iuc2Jfc3RhdHVzID09IC1ETE1fRUNBTkNFTCkgewotCQlsb2dfaW5mbygiY29tcGxldGUgZGxtIGNhbmNlbCAleCwlbGx4IGZsYWdzICVseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSBscC0+ZmxhZ3MpOwotCi0JCWxwLT5yZXEgPSBscC0+Y3VyOwotCQlhY2IubGNfcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKLQkJaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCQlscC0+bGtzYi5zYl9sa2lkID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChMRkxfRExNX1VOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJaWYgKGxwLT5sa3NiLnNiX3N0YXR1cyAhPSAtRExNX0VVTkxPQ0spIHsKLQkJCWxvZ19pbmZvKCJ1bmxvY2sgc2Jfc3RhdHVzICVkICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJCQkgbHAtPmxrc2Iuc2Jfc3RhdHVzLCBscC0+bG9ja25hbWUubG5fdHlwZSwKLQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJCSBscC0+ZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbHAtPmN1ciA9IERMTV9MT0NLX0lWOwotCQlscC0+cmVxID0gRExNX0xPQ0tfSVY7Ci0JCWxwLT5sa3NiLnNiX2xraWQgPSAwOwotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1VOTE9DS19ERUxFVEUsICZscC0+ZmxhZ3MpKSB7Ci0JCQlnZGxtX2RlbGV0ZV9scChscCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9WQUxOT1RWQUxJRCkKLQkJbWVtc2V0KGxwLT5sa3NiLnNiX2x2YnB0ciwgMCwgR0RMTV9MVkJfU0laRSk7Ci0KLQlpZiAobHAtPmxrc2Iuc2JfZmxhZ3MgJiBETE1fU0JGX0FMVE1PREUpIHsKLQkJaWYgKGxwLT5yZXEgPT0gRExNX0xPQ0tfUFIpCi0JCQlscC0+cmVxID0gRExNX0xPQ0tfQ1c7Ci0JCWVsc2UgaWYgKGxwLT5yZXEgPT0gRExNX0xPQ0tfQ1cpCi0JCQlscC0+cmVxID0gRExNX0xPQ0tfUFI7Ci0JfQotCi0JLyoKLQkgKiBBIGNhbmNlbGVkIGxvY2sgcmVxdWVzdC4gIFRoZSBsb2NrIHdhcyBqdXN0IHRha2VuIG9mZiB0aGUgZGVsYXllZAotCSAqIGxpc3QgYW5kIHdhcyBuZXZlciBldmVuIHN1Ym1pdHRlZCB0byBkbG0uCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9DQU5DRUwsICZscC0+ZmxhZ3MpKSB7Ci0JCWxvZ19pbmZvKCJjb21wbGV0ZSBpbnRlcm5hbCBjYW5jZWwgJXgsJWxseCIsCi0JCSAJIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCWxwLT5yZXEgPSBscC0+Y3VyOwotCQlhY2IubGNfcmV0IHw9IExNX09VVF9DQU5DRUxFRDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBBbiBlcnJvciBvY2N1cmVkLgotCSAqLwotCi0JaWYgKGxwLT5sa3NiLnNiX3N0YXR1cykgewotCQkvKiBhICJub3JtYWwiIGVycm9yICovCi0JCWlmICgobHAtPmxrc2Iuc2Jfc3RhdHVzID09IC1FQUdBSU4pICYmCi0JCSAgICAobHAtPmxrZiAmIERMTV9MS0ZfTk9RVUVVRSkpIHsKLQkJCWxwLT5yZXEgPSBscC0+Y3VyOwotCQkJaWYgKGxwLT5jdXIgPT0gRExNX0xPQ0tfSVYpCi0JCQkJbHAtPmxrc2Iuc2JfbGtpZCA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIHRoaXMgY291bGQgb25seSBoYXBwZW4gd2l0aCBjYW5jZWxzIEkgdGhpbmsgKi8KLQkJbG9nX2luZm8oImFzdCBzYl9zdGF0dXMgJWQgJXgsJWxseCBmbGFncyAlbHgiLAotCQkJIGxwLT5sa3NiLnNiX3N0YXR1cywgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkJIGxwLT5mbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaXMgYW4gQVNUIGZvciBhbiBFWC0+RVggY29udmVyc2lvbiBmb3Igc3luY19sdmIgZnJvbSBHRlMuCi0JICovCi0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KExGTF9TWU5DX0xWQiwgJmxwLT5mbGFncykpIHsKLQkJd2FrZV91cF9hc3QobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBIGxvY2sgaGFzIGJlZW4gZGVtb3RlZCB0byBOTCBiZWNhdXNlIGl0IGluaXRpYWxseSBjb21wbGV0ZWQgZHVyaW5nCi0JICogQkxPQ0tfTE9DS1MuICBOb3cgaXQgbXVzdCBiZSByZXF1ZXN0ZWQgaW4gdGhlIG9yaWdpbmFsbHkgcmVxdWVzdGVkCi0JICogbW9kZS4KLQkgKi8KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTEZMX1JFUkVRVUVTVCwgJmxwLT5mbGFncykpIHsKLQkJZ2RsbV9hc3NlcnQobHAtPnJlcSA9PSBETE1fTE9DS19OTCwgIiV4LCVsbHgiLAotCQkJICAgIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlcik7Ci0JCWdkbG1fYXNzZXJ0KGxwLT5wcmV2X3JlcSA+IERMTV9MT0NLX05MLCAiJXgsJWxseCIsCi0JCQkgICAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyKTsKLQotCQlscC0+Y3VyID0gRExNX0xPQ0tfTkw7Ci0JCWxwLT5yZXEgPSBscC0+cHJldl9yZXE7Ci0JCWxwLT5wcmV2X3JlcSA9IERMTV9MT0NLX0lWOwotCQlscC0+bGtmICY9IH5ETE1fTEtGX0NPTlZERUFETEs7Ci0KLQkJc2V0X2JpdChMRkxfTk9DQUNIRSwgJmxwLT5mbGFncyk7Ci0KLQkJaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5mbGFncykgJiYKLQkJICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykpCi0JCQlnZGxtX3F1ZXVlX2RlbGF5ZWQobHApOwotCQllbHNlCi0JCQlxdWV1ZV9zdWJtaXQobHApOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBIHJlcXVlc3QgaXMgZ3JhbnRlZCBkdXJpbmcgZGxtIHJlY292ZXJ5LiAgSXQgbWF5IGJlIGdyYW50ZWQKLQkgKiBiZWNhdXNlIHRoZSBsb2NrcyBvZiBhIGZhaWxlZCBub2RlIHdlcmUgY2xlYXJlZC4gIEluIHRoYXQgY2FzZSwKLQkgKiB0aGVyZSBtYXkgYmUgaW5jb25zaXN0ZW50IGRhdGEgYmVuZWF0aCB0aGlzIGxvY2sgYW5kIHdlIG11c3Qgd2FpdAotCSAqIGZvciByZWNvdmVyeSB0byBjb21wbGV0ZSB0byB1c2UgaXQuICBXaGVuIGdmcyByZWNvdmVyeSBpcyBkb25lIHRoaXMKLQkgKiBncmFudGVkIGxvY2sgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gTkwgYW5kIHRoZW4gcmVhY3F1aXJlZCBpbiB0aGlzCi0JICogZ3JhbnRlZCBzdGF0ZS4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpICYmCi0JICAgICF0ZXN0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncykgJiYKLQkgICAgbHAtPnJlcSAhPSBETE1fTE9DS19OTCkgewotCi0JCWxwLT5jdXIgPSBscC0+cmVxOwotCQlscC0+cHJldl9yZXEgPSBscC0+cmVxOwotCQlscC0+cmVxID0gRExNX0xPQ0tfTkw7Ci0JCWxwLT5sa2YgfD0gRExNX0xLRl9DT05WRVJUOwotCQlscC0+bGtmICY9IH5ETE1fTEtGX0NPTlZERUFETEs7Ci0KLQkJbG9nX2RlYnVnKCJyZXJlcSAleCwlbGx4IGlkICV4ICVkLCVkIiwKLQkJCSAgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbHAtPmxvY2tuYW1lLmxuX251bWJlciwKLQkJCSAgbHAtPmxrc2Iuc2JfbGtpZCwgbHAtPmN1ciwgbHAtPnJlcSk7Ci0KLQkJc2V0X2JpdChMRkxfUkVSRVFVRVNULCAmbHAtPmZsYWdzKTsKLQkJcXVldWVfc3VibWl0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRExNIGRlbW90ZWQgdGhlIGxvY2sgdG8gTkwgYmVmb3JlIGl0IHdhcyBncmFudGVkIHNvIEdGUyBtdXN0IGJlCi0JICogdG9sZCBpdCBjYW5ub3QgY2FjaGUgZGF0YSBmb3IgdGhpcyBsb2NrLgotCSAqLwotCi0JaWYgKGxwLT5sa3NiLnNiX2ZsYWdzICYgRExNX1NCRl9ERU1PVEVEKQotCQlzZXRfYml0KExGTF9OT0NBQ0hFLCAmbHAtPmZsYWdzKTsKLQotb3V0OgotCS8qCi0JICogVGhpcyBpcyBhbiBpbnRlcm5hbCBsb2NrX2RsbSBsb2NrCi0JICovCi0KLQlpZiAodGVzdF9iaXQoTEZMX0lOTE9DSywgJmxwLT5mbGFncykpIHsKLQkJY2xlYXJfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQkJbHAtPmN1ciA9IGxwLT5yZXE7Ci0JCXdha2VfdXBfYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogTm9ybWFsIGNvbXBsZXRpb24gb2YgYSBsb2NrIHJlcXVlc3QuICBUZWxsIEdGUyBpdCBub3cgaGFzIHRoZSBsb2NrLgotCSAqLwotCi0JY2xlYXJfYml0KExGTF9OT0JMT0NLLCAmbHAtPmZsYWdzKTsKLQlscC0+Y3VyID0gbHAtPnJlcTsKLQotCWFjYi5sY19uYW1lID0gbHAtPmxvY2tuYW1lOwotCWFjYi5sY19yZXQgfD0gZ2RsbV9tYWtlX2xtc3RhdGUobHAtPmN1cik7Ci0KLQlscy0+ZnNjYihscy0+c2RwLCBMTV9DQl9BU1lOQywgJmFjYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fYXN0KHZvaWQgKmFzdGFyZykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGFzdGFyZzsKLQljbGVhcl9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0JcHJvY2Vzc19jb21wbGV0ZShscCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NfYmxvY2tpbmcoc3RydWN0IGdkbG1fbG9jayAqbHAsIGludCBiYXN0X21vZGUpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbHAtPmxzOwotCXVuc2lnbmVkIGludCBjYiA9IDA7Ci0KLQlzd2l0Y2ggKGdkbG1fbWFrZV9sbXN0YXRlKGJhc3RfbW9kZSkpIHsKLQljYXNlIExNX1NUX0VYQ0xVU0lWRToKLQkJY2IgPSBMTV9DQl9ORUVEX0U7Ci0JCWJyZWFrOwotCWNhc2UgTE1fU1RfREVGRVJSRUQ6Ci0JCWNiID0gTE1fQ0JfTkVFRF9EOwotCQlicmVhazsKLQljYXNlIExNX1NUX1NIQVJFRDoKLQkJY2IgPSBMTV9DQl9ORUVEX1M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdkbG1fYXNzZXJ0KDAsICJ1bmtub3duIGJhc3QgbW9kZSAldSIsIGJhc3RfbW9kZSk7Ci0JfQotCi0JbHMtPmZzY2IobHMtPnNkcCwgY2IsICZscC0+bG9ja25hbWUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGdkbG1fYmFzdCh2b2lkICphc3RhcmcsIGludCBtb2RlKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gYXN0YXJnOwotCi0JaWYgKCFtb2RlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBiYXN0IG1vZGUgemVybyAleCwlbGx4XG4iLAotCQkJbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJvY2Vzc19ibG9ja2luZyhscCwgbW9kZSk7Ci19Ci0KLS8qIGNvbnZlcnQgZ2ZzIGxvY2stc3RhdGUgdG8gZGxtIGxvY2stbW9kZSAqLwotCi1zdGF0aWMgczE2IG1ha2VfbW9kZShzMTYgbG1zdGF0ZSkKLXsKLQlzd2l0Y2ggKGxtc3RhdGUpIHsKLQljYXNlIExNX1NUX1VOTE9DS0VEOgotCQlyZXR1cm4gRExNX0xPQ0tfTkw7Ci0JY2FzZSBMTV9TVF9FWENMVVNJVkU6Ci0JCXJldHVybiBETE1fTE9DS19FWDsKLQljYXNlIExNX1NUX0RFRkVSUkVEOgotCQlyZXR1cm4gRExNX0xPQ0tfQ1c7Ci0JY2FzZSBMTV9TVF9TSEFSRUQ6Ci0JCXJldHVybiBETE1fTE9DS19QUjsKLQl9Ci0JZ2RsbV9hc3NlcnQoMCwgInVua25vd24gTE0gc3RhdGUgJWQiLCBsbXN0YXRlKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLQotLyogdmVyaWZ5IGFncmVlbWVudCB3aXRoIEdGUyBvbiB0aGUgY3VycmVudCBsb2NrIHN0YXRlLCBOQjogRExNX0xPQ0tfTkwgYW5kCi0gICBETE1fTE9DS19JViBhcmUgYm90aCBjb25zaWRlcmVkIExNX1NUX1VOTE9DS0VEIGJ5IEdGUy4gKi8KLQotc3RhdGljIHZvaWQgY2hlY2tfY3VyX3N0YXRlKHN0cnVjdCBnZGxtX2xvY2sgKmxwLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKQotewotCXMxNiBjdXIgPSBtYWtlX21vZGUoY3VyX3N0YXRlKTsKLQlpZiAobHAtPmN1ciAhPSBETE1fTE9DS19JVikKLQkJZ2RsbV9hc3NlcnQobHAtPmN1ciA9PSBjdXIsICIlZCwgJWQiLCBscC0+Y3VyLCBjdXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYWtlX2ZsYWdzKHN0cnVjdCBnZGxtX2xvY2sgKmxwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBnZnNfZmxhZ3MsCi0JCQkJICAgICAgczE2IGN1ciwgczE2IHJlcSkKLXsKLQl1bnNpZ25lZCBpbnQgbGtmID0gMDsKLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWSkKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKLQotCWlmIChnZnNfZmxhZ3MgJiBMTV9GTEFHX1RSWV8xQ0IpIHsKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRTsKLQkJbGtmIHw9IERMTV9MS0ZfTk9RVUVVRUJBU1Q7Ci0JfQotCi0JaWYgKGdmc19mbGFncyAmIExNX0ZMQUdfUFJJT1JJVFkpIHsKLQkJbGtmIHw9IERMTV9MS0ZfTk9PUkRFUjsKLQkJbGtmIHw9IERMTV9MS0ZfSEVBRFFVRTsKLQl9Ci0KLQlpZiAoZ2ZzX2ZsYWdzICYgTE1fRkxBR19BTlkpIHsKLQkJaWYgKHJlcSA9PSBETE1fTE9DS19QUikKLQkJCWxrZiB8PSBETE1fTEtGX0FMVENXOwotCQllbHNlIGlmIChyZXEgPT0gRExNX0xPQ0tfQ1cpCi0JCQlsa2YgfD0gRExNX0xLRl9BTFRQUjsKLQl9Ci0KLQlpZiAobHAtPmxrc2Iuc2JfbGtpZCAhPSAwKSB7Ci0JCWxrZiB8PSBETE1fTEtGX0NPTlZFUlQ7Ci0JfQotCi0JaWYgKGxwLT5sdmIpCi0JCWxrZiB8PSBETE1fTEtGX1ZBTEJMSzsKLQotCXJldHVybiBsa2Y7Ci19Ci0KLS8qIG1ha2Vfc3RybmFtZSAtIGNvbnZlcnQgR0ZTIGxvY2sgbnVtYmVycyB0byBhIHN0cmluZyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zdHJuYW1lKGNvbnN0IHN0cnVjdCBsbV9sb2NrbmFtZSAqbG9ja25hbWUsCi0JCQkJc3RydWN0IGdkbG1fc3RybmFtZSAqc3RyKQotewotCXNwcmludGYoc3RyLT5uYW1lLCAiJTh4JTE2bGx4IiwgbG9ja25hbWUtPmxuX3R5cGUsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpbG9ja25hbWUtPmxuX251bWJlcik7Ci0Jc3RyLT5uYW1lbGVuID0gR0RMTV9TVFJOQU1FX0JZVEVTOwotfQotCi1zdGF0aWMgaW50IGdkbG1fY3JlYXRlX2xwKHN0cnVjdCBnZGxtX2xzICpscywgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCQkJICBzdHJ1Y3QgZ2RsbV9sb2NrICoqbHBwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwOwotCi0JbHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2RsbV9sb2NrKSwgR0ZQX05PRlMpOwotCWlmICghbHApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbHAtPmxvY2tuYW1lID0gKm5hbWU7Ci0JbWFrZV9zdHJuYW1lKG5hbWUsICZscC0+c3RybmFtZSk7Ci0JbHAtPmxzID0gbHM7Ci0JbHAtPmN1ciA9IERMTV9MT0NLX0lWOwotCUlOSVRfTElTVF9IRUFEKCZscC0+ZGVsYXlfbGlzdCk7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlscy0+YWxsX2xvY2tzX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCSpscHAgPSBscDsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGdkbG1fZ2V0X2xvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgdm9pZCAqKmxvY2twKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2RsbV9jcmVhdGVfbHAobG9ja3NwYWNlLCBuYW1lLCAmbHApOwotCi0JKmxvY2twID0gbHA7Ci0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fcHV0X2xvY2sodm9pZCAqbG9jaykKLXsKLQlnZGxtX2RlbGV0ZV9scChsb2NrKTsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fZG9fbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JaW50IGVycm9yLCBiYXN0ID0gMTsKLQotCS8qCi0JICogV2hlbiByZWNvdmVyeSBpcyBpbiBwcm9ncmVzcywgZGVsYXkgbG9jayByZXF1ZXN0cyBmb3Igc3VibWlzc2lvbgotCSAqIG9uY2UgcmVjb3ZlcnkgaXMgZG9uZS4gIFJlcXVlc3RzIGZvciByZWNvdmVyeSAoTk9FWFApIGFuZCB1bmxvY2tzCi0JICogY2FuIHBhc3MuCi0JICovCi0KLQlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoTEZMX05PQkxPQ0ssICZscC0+ZmxhZ3MpICYmIGxwLT5yZXEgIT0gRExNX0xPQ0tfTkwpIHsKLQkJZ2RsbV9xdWV1ZV9kZWxheWVkKGxwKTsKLQkJcmV0dXJuIExNX09VVF9BU1lOQzsKLQl9Ci0KLQkvKgotCSAqIFN1Ym1pdCB0aGUgYWN0dWFsIGxvY2sgcmVxdWVzdC4KLQkgKi8KLQotCWlmICh0ZXN0X2JpdChMRkxfTk9CQVNULCAmbHAtPmZsYWdzKSkKLQkJYmFzdCA9IDA7Ci0KLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JbG9nX2RlYnVnKCJsayAleCwlbGx4IGlkICV4ICVkLCVkICV4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+bGtzYi5zYl9sa2lkLAotCQkgIGxwLT5jdXIsIGxwLT5yZXEsIGxwLT5sa2YpOwotCi0JZXJyb3IgPSBkbG1fbG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbHAtPnJlcSwgJmxwLT5sa3NiLCBscC0+bGtmLAotCQkJIGxwLT5zdHJuYW1lLm5hbWUsIGxwLT5zdHJuYW1lLm5hbWVsZW4sIDAsIGdkbG1fYXN0LAotCQkJIGxwLCBiYXN0ID8gZ2RsbV9iYXN0IDogTlVMTCk7Ci0KLQlpZiAoKGVycm9yID09IC1FQUdBSU4pICYmIChscC0+bGtmICYgRExNX0xLRl9OT1FVRVVFKSkgewotCQlscC0+bGtzYi5zYl9zdGF0dXMgPSAtRUFHQUlOOwotCQlnZGxtX2FzdChscCk7Ci0JCWVycm9yID0gMDsKLQl9Ci0KLQlpZiAoZXJyb3IpIHsKLQkJbG9nX2Vycm9yKCIlczogZ2RsbV9sb2NrICV4LCVsbHggZXJyPSVkIGN1cj0lZCByZXE9JWQgbGtmPSV4ICIKLQkJCSAgImZsYWdzPSVseCIsIGxzLT5mc25hbWUsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGVycm9yLAotCQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCX0KLQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdkbG1fZG9fdW5sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxwLT5sczsKLQl1bnNpZ25lZCBpbnQgbGtmID0gMDsKLQlpbnQgZXJyb3I7Ci0KLQlzZXRfYml0KExGTF9ETE1fVU5MT0NLLCAmbHAtPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JaWYgKGxwLT5sdmIpCi0JCWxrZiA9IERMTV9MS0ZfVkFMQkxLOwotCi0JbG9nX2RlYnVnKCJ1biAleCwlbGx4ICV4ICVkICV4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLAotCQkgIGxwLT5sa3NiLnNiX2xraWQsIGxwLT5jdXIsIGxrZik7Ci0KLQllcnJvciA9IGRsbV91bmxvY2sobHMtPmRsbV9sb2Nrc3BhY2UsIGxwLT5sa3NiLnNiX2xraWQsIGxrZiwgTlVMTCwgbHApOwotCi0JaWYgKGVycm9yKSB7Ci0JCWxvZ19lcnJvcigiJXM6IGdkbG1fdW5sb2NrICV4LCVsbHggZXJyPSVkIGN1cj0lZCByZXE9JWQgbGtmPSV4ICIKLQkJCSAgImZsYWdzPSVseCIsIGxzLT5mc25hbWUsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGVycm9yLAotCQkJICBscC0+Y3VyLCBscC0+cmVxLCBscC0+bGtmLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCX0KLQlyZXR1cm4gTE1fT1VUX0FTWU5DOwotfQotCi11bnNpZ25lZCBpbnQgZ2RsbV9sb2NrKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JaWYgKHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCkKLQkJcmV0dXJuIGdkbG1fdW5sb2NrKGxvY2ssIGN1cl9zdGF0ZSk7Ci0KLQlpZiAocmVxX3N0YXRlID09IExNX1NUX1VOTE9DS0VEKQotCQlyZXR1cm4gZ2RsbV91bmxvY2sobG9jaywgY3VyX3N0YXRlKTsKLQotCWNsZWFyX2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JaWYgKGZsYWdzICYgTE1fRkxBR19OT0VYUCkKLQkJc2V0X2JpdChMRkxfTk9CTE9DSywgJmxwLT5mbGFncyk7Ci0KLQljaGVja19jdXJfc3RhdGUobHAsIGN1cl9zdGF0ZSk7Ci0JbHAtPnJlcSA9IG1ha2VfbW9kZShyZXFfc3RhdGUpOwotCWxwLT5sa2YgPSBtYWtlX2ZsYWdzKGxwLCBmbGFncywgbHAtPmN1ciwgbHAtPnJlcSk7Ci0KLQlyZXR1cm4gZ2RsbV9kb19sb2NrKGxwKTsKLX0KLQotdW5zaWduZWQgaW50IGdkbG1fdW5sb2NrKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JY2xlYXJfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlpZiAobHAtPmN1ciA9PSBETE1fTE9DS19JVikKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGdkbG1fZG9fdW5sb2NrKGxwKTsKLX0KLQotdm9pZCBnZGxtX2NhbmNlbCh2b2lkICpsb2NrKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gbG9jazsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBscC0+bHM7Ci0JaW50IGVycm9yLCBkZWxheV9saXN0ID0gMDsKLQotCWlmICh0ZXN0X2JpdChMRkxfRExNX0NBTkNFTCwgJmxwLT5mbGFncykpCi0JCXJldHVybjsKLQotCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCAleCwlbGx4IGZsYWdzICVseCIsIGxwLT5sb2NrbmFtZS5sbl90eXBlLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCi0Jc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZscC0+ZGVsYXlfbGlzdCkpIHsKLQkJbGlzdF9kZWxfaW5pdCgmbHAtPmRlbGF5X2xpc3QpOwotCQlkZWxheV9saXN0ID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmxzLT5hc3luY19sb2NrKTsKLQotCWlmIChkZWxheV9saXN0KSB7Ci0JCXNldF9iaXQoTEZMX0NBTkNFTCwgJmxwLT5mbGFncyk7Ci0JCXNldF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncyk7Ci0JCWdkbG1fYXN0KGxwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghdGVzdF9iaXQoTEZMX0FDVElWRSwgJmxwLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoTEZMX0RMTV9VTkxPQ0ssICZscC0+ZmxhZ3MpKSB7Ci0JCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCBza2lwICV4LCVsbHggZmxhZ3MgJWx4IiwKLQkJIAkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylscC0+bG9ja25hbWUubG5fbnVtYmVyLCBscC0+ZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogdGhlIGxvY2sgaXMgYmxvY2tlZCBpbiB0aGUgZGxtICovCi0KLQlzZXRfYml0KExGTF9ETE1fQ0FOQ0VMLCAmbHAtPmZsYWdzKTsKLQlzZXRfYml0KExGTF9BQ1RJVkUsICZscC0+ZmxhZ3MpOwotCi0JZXJyb3IgPSBkbG1fdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBscC0+bGtzYi5zYl9sa2lkLCBETE1fTEtGX0NBTkNFTCwKLQkJCSAgIE5VTEwsIGxwKTsKLQotCWxvZ19pbmZvKCJnZGxtX2NhbmNlbCBydiAlZCAleCwlbGx4IGZsYWdzICVseCIsIGVycm9yLAotCQkgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIsIGxwLT5mbGFncyk7Ci0KLQlpZiAoZXJyb3IgPT0gLUVCVVNZKQotCQljbGVhcl9iaXQoTEZMX0RMTV9DQU5DRUwsICZscC0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGdkbG1fYWRkX2x2YihzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQljaGFyICpsdmI7Ci0KLQlsdmIgPSBremFsbG9jKEdETE1fTFZCX1NJWkUsIEdGUF9OT0ZTKTsKLQlpZiAoIWx2YikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlscC0+bGtzYi5zYl9sdmJwdHIgPSBsdmI7Ci0JbHAtPmx2YiA9IGx2YjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9kZWxfbHZiKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCWtmcmVlKGxwLT5sdmIpOwotCWxwLT5sdmIgPSBOVUxMOwotCWxwLT5sa3NiLnNiX2x2YnB0ciA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgZ2RsbV9hc3Rfd2FpdCh2b2lkICp3b3JkKQotewotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgY2FuIGRvIGEgc3luY2hyb25vdXMgZGxtIHJlcXVlc3QgKHJlcXVpcmluZyBhIGxvY2tfZGxtIHRocmVhZCB0byBnZXQKLSAgIHRoZSBjb21wbGV0aW9uKSBiZWNhdXNlIGdmcyB3b24ndCBjYWxsIGhvbGRfbHZiKCkgZHVyaW5nIGEgY2FsbGJhY2sgKGZyb20KLSAgIHRoZSBjb250ZXh0IG9mIGEgbG9ja19kbG0gdGhyZWFkKS4gKi8KLQotc3RhdGljIGludCBob2xkX251bGxfbG9jayhzdHJ1Y3QgZ2RsbV9sb2NrICpscCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscG4gPSBOVUxMOwotCWludCBlcnJvcjsKLQotCWlmIChscC0+aG9sZF9udWxsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBsdmIgYWxyZWFkeSBoZWxkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZXJyb3IgPSBnZGxtX2NyZWF0ZV9scChscC0+bHMsICZscC0+bG9ja25hbWUsICZscG4pOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQlscG4tPmxrc2Iuc2JfbHZicHRyID0ganVua19sdmI7Ci0JbHBuLT5sdmIgPSBqdW5rX2x2YjsKLQotCWxwbi0+cmVxID0gRExNX0xPQ0tfTkw7Ci0JbHBuLT5sa2YgPSBETE1fTEtGX1ZBTEJMSyB8IERMTV9MS0ZfRVhQRURJVEU7Ci0Jc2V0X2JpdChMRkxfTk9CQVNULCAmbHBuLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfSU5MT0NLLCAmbHBuLT5mbGFncyk7Ci0Jc2V0X2JpdChMRkxfQVNUX1dBSVQsICZscG4tPmZsYWdzKTsKLQotCWdkbG1fZG9fbG9jayhscG4pOwotCXdhaXRfb25fYml0KCZscG4tPmZsYWdzLCBMRkxfQVNUX1dBSVQsIGdkbG1fYXN0X3dhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQllcnJvciA9IGxwbi0+bGtzYi5zYl9zdGF0dXM7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxvY2tfZGxtOiBob2xkX251bGxfbG9jayBkbG0gZXJyb3IgJWRcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JCWdkbG1fZGVsZXRlX2xwKGxwbik7Ci0JCWxwbiA9IE5VTEw7Ci0JfQotb3V0OgotCWxwLT5ob2xkX251bGwgPSBscG47Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBUaGlzIGNhbm5vdCBkbyBhIHN5bmNocm9ub3VzIGRsbSByZXF1ZXN0IChyZXF1aXJpbmcgYSBsb2NrX2RsbSB0aHJlYWQgdG8gZ2V0Ci0gICB0aGUgY29tcGxldGlvbikgYmVjYXVzZSBnZnMgbWF5IGNhbGwgdW5ob2xkX2x2YigpIGR1cmluZyBhIGNhbGxiYWNrIChmcm9tCi0gICB0aGUgY29udGV4dCBvZiBhIGxvY2tfZGxtIHRocmVhZCkgd2hpY2ggY291bGQgY2F1c2UgYSBkZWFkbG9jayBzaW5jZSB0aGUKLSAgIG90aGVyIGxvY2tfZGxtIHRocmVhZCBjb3VsZCBiZSBlbmdhZ2VkIGluIHJlY292ZXJ5LiAqLwotCi1zdGF0aWMgdm9pZCB1bmhvbGRfbnVsbF9sb2NrKHN0cnVjdCBnZGxtX2xvY2sgKmxwKQotewotCXN0cnVjdCBnZGxtX2xvY2sgKmxwbiA9IGxwLT5ob2xkX251bGw7Ci0KLQlnZGxtX2Fzc2VydChscG4sICIleCwlbGx4IiwgbHAtPmxvY2tuYW1lLmxuX3R5cGUsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxwLT5sb2NrbmFtZS5sbl9udW1iZXIpOwotCWxwbi0+bGtzYi5zYl9sdmJwdHIgPSBOVUxMOwotCWxwbi0+bHZiID0gTlVMTDsKLQlzZXRfYml0KExGTF9VTkxPQ0tfREVMRVRFLCAmbHBuLT5mbGFncyk7Ci0JZ2RsbV9kb191bmxvY2sobHBuKTsKLQlscC0+aG9sZF9udWxsID0gTlVMTDsKLX0KLQotLyogQWNxdWlyZSBhIE5MIGxvY2sgYmVjYXVzZSBnZnMgcmVxdWlyZXMgdGhlIHZhbHVlIGJsb2NrIHRvIHJlbWFpbgotICAgaW50YWN0IG9uIHRoZSByZXNvdXJjZSB3aGlsZSB0aGUgbHZiIGlzICJoZWxkIiBldmVuIGlmIGl0J3MgaG9sZGluZyBubyBsb2NrcwotICAgb24gdGhlIHJlc291cmNlLiAqLwotCi1pbnQgZ2RsbV9ob2xkX2x2Yih2b2lkICpsb2NrLCBjaGFyICoqbHZicCkKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCA9IGxvY2s7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZGxtX2FkZF9sdmIobHApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JKmx2YnAgPSBscC0+bHZiOwotCi0JZXJyb3IgPSBob2xkX251bGxfbG9jayhscCk7Ci0JaWYgKGVycm9yKQotCQlnZGxtX2RlbF9sdmIobHApOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fdW5ob2xkX2x2Yih2b2lkICpsb2NrLCBjaGFyICpsdmIpCi17Ci0Jc3RydWN0IGdkbG1fbG9jayAqbHAgPSBsb2NrOwotCi0JdW5ob2xkX251bGxfbG9jayhscCk7Ci0JZ2RsbV9kZWxfbHZiKGxwKTsKLX0KLQotdm9pZCBnZGxtX3N1Ym1pdF9kZWxheWVkKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlzdHJ1Y3QgZ2RsbV9sb2NrICpscCwgKnNhZmU7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHAsIHNhZmUsICZscy0+ZGVsYXllZCwgZGVsYXlfbGlzdCkgewotCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCWxpc3RfYWRkX3RhaWwoJmxwLT5kZWxheV9saXN0LCAmbHMtPnN1Ym1pdCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0Jd2FrZV91cCgmbHMtPnRocmVhZF93YWl0KTsKLX0KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9sb2NrX2RsbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzk4ZTdjLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbG9ja19kbG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIExPQ0tfRExNX0RPVF9ICi0jZGVmaW5lIExPQ0tfRExNX0RPVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RsbV9wbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgotCi0vKgotICogSW50ZXJuYWxseSwgd2UgcHJlZml4IHRoaW5ncyB3aXRoIGdkbG1fIGFuZCBHRExNXyAoZm9yIGdmcy1kbG0pIHNpbmNlIGEKLSAqIHByZWZpeCBvZiBsb2NrX2RsbV8gZ2V0cyBhd2t3YXJkLiAgRXh0ZXJuYWxseSwgR0ZTIHJlZmVycyB0byB0aGlzIG1vZHVsZQotICogYXMgImxvY2tfZGxtIi4KLSAqLwotCi0jZGVmaW5lIEdETE1fU1RSTkFNRV9CWVRFUwkyNAotI2RlZmluZSBHRExNX0xWQl9TSVpFCQkzMgotI2RlZmluZSBHRExNX0RST1BfQ09VTlQJCTAKLSNkZWZpbmUgR0RMTV9EUk9QX1BFUklPRAk2MAotI2RlZmluZSBHRExNX05BTUVfTEVOCQkxMjgKLQotLyogR0ZTIHVzZXMgMTIgYnl0ZXMgdG8gaWRlbnRpZnkgYSByZXNvdXJjZSAoMzIgYml0IHR5cGUgKyA2NCBiaXQgbnVtYmVyKS4KLSAgIFdlIHNwcmludGYgdGhlc2UgbnVtYmVycyBpbnRvIGEgMjQgYnl0ZSBzdHJpbmcgb2YgaGV4IHZhbHVlcyB0byBtYWtlIHRoZW0KLSAgIGh1bWFuLXJlYWRhYmxlICh0byBtYWtlIGRlYnVnZ2luZyBzaW1wbGVyLikgKi8KLQotc3RydWN0IGdkbG1fc3RybmFtZSB7Ci0JdW5zaWduZWQgY2hhcgkJbmFtZVtHRExNX1NUUk5BTUVfQllURVNdOwotCXVuc2lnbmVkIHNob3J0CQluYW1lbGVuOwotfTsKLQotZW51bSB7Ci0JREZMX0JMT0NLX0xPQ0tTCQk9IDAsCi0JREZMX1NQRUNUQVRPUgkJPSAxLAotCURGTF9XSVRIRFJBVwkJPSAyLAotfTsKLQotc3RydWN0IGdkbG1fbHMgewotCXUzMgkJaWQ7Ci0JaW50CQkJamlkOwotCWludAkJCWZpcnN0OwotCWludAkJCWZpcnN0X2RvbmU7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0Jc3RydWN0IGtvYmplY3QJCWtvYmo7Ci0JY2hhcgkJCWNsdXN0ZXJuYW1lW0dETE1fTkFNRV9MRU5dOwotCWNoYXIJCQlmc25hbWVbR0RMTV9OQU1FX0xFTl07Ci0JaW50CQkJZnNmbGFnczsKLQlkbG1fbG9ja3NwYWNlX3QJCSpkbG1fbG9ja3NwYWNlOwotCWxtX2NhbGxiYWNrX3QJCWZzY2I7Ci0Jc3RydWN0IGdmczJfc2JkCQkqc2RwOwotCWludAkJCXJlY292ZXJfamlkOwotCWludAkJCXJlY292ZXJfamlkX2RvbmU7Ci0JaW50CQkJcmVjb3Zlcl9qaWRfc3RhdHVzOwotCXNwaW5sb2NrX3QJCWFzeW5jX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheWVkOwotCXN0cnVjdCBsaXN0X2hlYWQJc3VibWl0OwotCXUzMgkJYWxsX2xvY2tzX2NvdW50OwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29udHJvbDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl0aHJlYWRfd2FpdDsKLX07Ci0KLWVudW0gewotCUxGTF9OT0JMT0NLCQk9IDAsCi0JTEZMX05PQ0FDSEUJCT0gMSwKLQlMRkxfRExNX1VOTE9DSwkJPSAyLAotCUxGTF9ETE1fQ0FOQ0VMCQk9IDMsCi0JTEZMX1NZTkNfTFZCCQk9IDQsCi0JTEZMX0ZPUkNFX1BST01PVEUJPSA1LAotCUxGTF9SRVJFUVVFU1QJCT0gNiwKLQlMRkxfQUNUSVZFCQk9IDcsCi0JTEZMX0lOTE9DSwkJPSA4LAotCUxGTF9DQU5DRUwJCT0gOSwKLQlMRkxfTk9CQVNUCQk9IDEwLAotCUxGTF9IRUFEUVVFCQk9IDExLAotCUxGTF9VTkxPQ0tfREVMRVRFCT0gMTIsCi0JTEZMX0FTVF9XQUlUCQk9IDEzLAotfTsKLQotc3RydWN0IGdkbG1fbG9jayB7Ci0Jc3RydWN0IGdkbG1fbHMJCSpsczsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUJbG9ja25hbWU7Ci0Jc3RydWN0IGdkbG1fc3RybmFtZQlzdHJuYW1lOwotCWNoYXIJCQkqbHZiOwotCXN0cnVjdCBkbG1fbGtzYgkJbGtzYjsKLQotCXMxNgkJCWN1cjsKLQlzMTYJCQlyZXE7Ci0JczE2CQkJcHJldl9yZXE7Ci0JdTMyCQkJbGtmOwkJLyogZGxtIGZsYWdzIERMTV9MS0ZfICovCi0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb2NrX2RsbSBmbGFncyBMRkxfICovCi0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWRlbGF5X2xpc3Q7CS8qIGRlbGF5ZWQgKi8KLQlzdHJ1Y3QgZ2RsbV9sb2NrCSpob2xkX251bGw7CS8qIE5MIGxvY2sgZm9yIGhvbGRfbHZiICovCi19OwotCi0jZGVmaW5lIGdkbG1fYXNzZXJ0KGFzc2VydGlvbiwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKHVubGlrZWx5KCEoYXNzZXJ0aW9uKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJcHJpbnRrKEtFUk5fRU1FUkcgImxvY2tfZGxtOiBmYXRhbCBhc3NlcnRpb24gZmFpbGVkIFwiJXNcIlxuIiBcCi0JCQkJICAibG9ja19kbG06ICAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkgICNhc3NlcnRpb24sICMjYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlCVUcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBsb2dfcHJpbnQobGV2LCBmbXQsIGFyZy4uLikgcHJpbnRrKGxldiAibG9ja19kbG06ICIgZm10ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGxvZ19pbmZvKGZtdCwgYXJnLi4uKSAgbG9nX3ByaW50KEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZykKLSNkZWZpbmUgbG9nX2Vycm9yKGZtdCwgYXJnLi4uKSBsb2dfcHJpbnQoS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmcpCi0jaWZkZWYgTE9DS19ETE1fTE9HX0RFQlVHCi0jZGVmaW5lIGxvZ19kZWJ1ZyhmbXQsIGFyZy4uLikgbG9nX3ByaW50KEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBsb2dfZGVidWcoZm10LCBhcmcuLi4pCi0jZW5kaWYKLQotLyogc3lzZnMuYyAqLwotCi1pbnQgZ2RsbV9zeXNmc19pbml0KHZvaWQpOwotdm9pZCBnZGxtX3N5c2ZzX2V4aXQodm9pZCk7Ci1pbnQgZ2RsbV9rb2JqZWN0X3NldHVwKHN0cnVjdCBnZGxtX2xzICosIHN0cnVjdCBrb2JqZWN0ICopOwotdm9pZCBnZGxtX2tvYmplY3RfcmVsZWFzZShzdHJ1Y3QgZ2RsbV9scyAqKTsKLQotLyogdGhyZWFkLmMgKi8KLQotaW50IGdkbG1faW5pdF90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICopOwotdm9pZCBnZGxtX3JlbGVhc2VfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqKTsKLQotLyogbG9jay5jICovCi0KLXZvaWQgZ2RsbV9zdWJtaXRfZGVsYXllZChzdHJ1Y3QgZ2RsbV9scyAqKTsKLXVuc2lnbmVkIGludCBnZGxtX2RvX2xvY2soc3RydWN0IGdkbG1fbG9jayAqKTsKLQotaW50IGdkbG1fZ2V0X2xvY2sodm9pZCAqLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKiwgdm9pZCAqKik7Ci12b2lkIGdkbG1fcHV0X2xvY2sodm9pZCAqKTsKLXVuc2lnbmVkIGludCBnZGxtX2xvY2sodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXVuc2lnbmVkIGludCBnZGxtX3VubG9jayh2b2lkICosIHVuc2lnbmVkIGludCk7Ci12b2lkIGdkbG1fY2FuY2VsKHZvaWQgKik7Ci1pbnQgZ2RsbV9ob2xkX2x2Yih2b2lkICosIGNoYXIgKiopOwotdm9pZCBnZGxtX3VuaG9sZF9sdmIodm9pZCAqLCBjaGFyICopOwotCi0vKiBtb3VudC5jICovCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vbWFpbi5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTAzYTcuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sb2NrX2RsbSh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9yZWdpc3Rlcl9sb2NrcHJvdG8oJmdkbG1fb3BzKTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja19kbG06ICBjYW4ndCByZWdpc3RlciBwcm90b2NvbDogJWRcbiIsCi0JCSAgICAgICBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQllcnJvciA9IGdkbG1fc3lzZnNfaW5pdCgpOwotCWlmIChlcnJvcikgewotCQlnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJMb2NrX0RMTSAoYnVpbHQgJXMgJXMpIGluc3RhbGxlZFxuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbG9ja19kbG0odm9pZCkKLXsKLQlnZGxtX3N5c2ZzX2V4aXQoKTsKLQlnZnMyX3VucmVnaXN0ZXJfbG9ja3Byb3RvKCZnZGxtX29wcyk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfbG9ja19kbG0pOwotbW9kdWxlX2V4aXQoZXhpdF9sb2NrX2RsbSk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiR0ZTIERMTSBMb2NraW5nIE1vZHVsZSIpOwotTU9EVUxFX0FVVEhPUigiUmVkIEhhdCwgSW5jLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL21vdW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYTdlYjYuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9tb3VudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlICJsb2NrX2RsbS5oIgotCi1jb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBnZGxtX29wczsKLQotCi1zdGF0aWMgc3RydWN0IGdkbG1fbHMgKmluaXRfZ2RsbShsbV9jYWxsYmFja190IGNiLCBzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKLQkJCQkgaW50IGZsYWdzLCBjaGFyICp0YWJsZV9uYW1lKQotewotCXN0cnVjdCBnZGxtX2xzICpsczsKLQljaGFyIGJ1ZlsyNTZdLCAqcDsKLQotCWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdkbG1fbHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxzKQotCQlyZXR1cm4gTlVMTDsKLQotCWxzLT5mc2NiID0gY2I7Ci0JbHMtPnNkcCA9IHNkcDsKLQlscy0+ZnNmbGFncyA9IGZsYWdzOwotCXNwaW5fbG9ja19pbml0KCZscy0+YXN5bmNfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxzLT5kZWxheWVkKTsKLQlJTklUX0xJU1RfSEVBRCgmbHMtPnN1Ym1pdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbHMtPnRocmVhZF93YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZscy0+d2FpdF9jb250cm9sKTsKLQlscy0+amlkID0gLTE7Ci0KLQlzdHJuY3B5KGJ1ZiwgdGFibGVfbmFtZSwgMjU2KTsKLQlidWZbMjU1XSA9ICdcMCc7Ci0KLQlwID0gc3RyY2hyKGJ1ZiwgJzonKTsKLQlpZiAoIXApIHsKLQkJbG9nX2luZm8oImludmFsaWQgdGFibGVfbmFtZSBcIiVzXCIiLCB0YWJsZV9uYW1lKTsKLQkJa2ZyZWUobHMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JKnAgPSAnXDAnOwotCXArKzsKLQotCXN0cm5jcHkobHMtPmNsdXN0ZXJuYW1lLCBidWYsIEdETE1fTkFNRV9MRU4pOwotCXN0cm5jcHkobHMtPmZzbmFtZSwgcCwgR0RMTV9OQU1FX0xFTik7Ci0KLQlyZXR1cm4gbHM7Ci19Ci0KLXN0YXRpYyBpbnQgbWFrZV9hcmdzKHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqZGF0YV9hcmcsIGludCAqbm9kaXIpCi17Ci0JY2hhciBkYXRhWzI1Nl07Ci0JY2hhciAqb3B0aW9ucywgKngsICp5OwotCWludCBlcnJvciA9IDA7Ci0KLQltZW1zZXQoZGF0YSwgMCwgMjU2KTsKLQlzdHJuY3B5KGRhdGEsIGRhdGFfYXJnLCAyNTUpOwotCi0JaWYgKCFzdHJsZW4oZGF0YSkpIHsKLQkJbG9nX2Vycm9yKCJubyBtb3VudCBvcHRpb25zLCAodSltb3VudCBoZWxwZXJzIG5vdCBpbnN0YWxsZWQiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChvcHRpb25zID0gZGF0YTsgKHggPSBzdHJzZXAoJm9wdGlvbnMsICI6IikpOyApIHsKLQkJaWYgKCEqeCkKLQkJCWNvbnRpbnVlOwotCi0JCXkgPSBzdHJjaHIoeCwgJz0nKTsKLQkJaWYgKHkpCi0JCQkqeSsrID0gMDsKLQotCQlpZiAoIXN0cmNtcCh4LCAiamlkIikpIHsKLQkJCWlmICgheSkgewotCQkJCWxvZ19lcnJvcigibmVlZCBhcmd1bWVudCB0byBqaWQiKTsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzc2NhbmYoeSwgIiV1IiwgJmxzLT5qaWQpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAiZmlyc3QiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGZpcnN0Iik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+Zmlyc3QpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAiaWQiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIGlkIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsICZscy0+aWQpOwotCi0JCX0gZWxzZSBpZiAoIXN0cmNtcCh4LCAibm9kaXIiKSkgewotCQkJaWYgKCF5KSB7Ci0JCQkJbG9nX2Vycm9yKCJuZWVkIGFyZ3VtZW50IHRvIG5vZGlyIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3NjYW5mKHksICIldSIsIG5vZGlyKTsKLQotCQl9IGVsc2UgewotCQkJbG9nX2Vycm9yKCJ1bmtvbnduIG9wdGlvbjogJXMiLCB4KTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGdkbG1fbW91bnQoY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJbG1fY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JfZGF0YSwKLQkJCXVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJc3RydWN0IGtvYmplY3QgKmZza29iaikKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHM7Ci0JaW50IGVycm9yID0gLUVOT01FTSwgbm9kaXIgPSAwOwotCi0JaWYgKG1pbl9sdmJfc2l6ZSA+IEdETE1fTFZCX1NJWkUpCi0JCWdvdG8gb3V0OwotCi0JbHMgPSBpbml0X2dkbG0oY2IsIGNiX2RhdGEsIGZsYWdzLCB0YWJsZV9uYW1lKTsKLQlpZiAoIWxzKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gbWFrZV9hcmdzKGxzLCBob3N0X2RhdGEsICZub2Rpcik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gZ2RsbV9pbml0X3RocmVhZHMobHMpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZTsKLQotCWVycm9yID0gZ2RsbV9rb2JqZWN0X3NldHVwKGxzLCBmc2tvYmopOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfdGhyZWFkOwotCi0JZXJyb3IgPSBkbG1fbmV3X2xvY2tzcGFjZShscy0+ZnNuYW1lLCBzdHJsZW4obHMtPmZzbmFtZSksCi0JCQkJICAmbHMtPmRsbV9sb2Nrc3BhY2UsCi0JCQkJICBETE1fTFNGTF9GUyB8IERMTV9MU0ZMX05FV0VYQ0wgfAotCQkJCSAgKG5vZGlyID8gRExNX0xTRkxfTk9ESVIgOiAwKSwKLQkJCQkgIEdETE1fTFZCX1NJWkUpOwotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoImRsbV9uZXdfbG9ja3NwYWNlIGVycm9yICVkIiwgZXJyb3IpOwotCQlnb3RvIG91dF9rb2JqOwotCX0KLQotCWxvY2tzdHJ1Y3QtPmxzX2ppZCA9IGxzLT5qaWQ7Ci0JbG9ja3N0cnVjdC0+bHNfZmlyc3QgPSBscy0+Zmlyc3Q7Ci0JbG9ja3N0cnVjdC0+bHNfbG9ja3NwYWNlID0gbHM7Ci0JbG9ja3N0cnVjdC0+bHNfb3BzID0gJmdkbG1fb3BzOwotCWxvY2tzdHJ1Y3QtPmxzX2ZsYWdzID0gMDsKLQlsb2Nrc3RydWN0LT5sc19sdmJfc2l6ZSA9IEdETE1fTFZCX1NJWkU7Ci0JcmV0dXJuIDA7Ci0KLW91dF9rb2JqOgotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLW91dF90aHJlYWQ6Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUobHMpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV91bm1vdW50KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQlzdHJ1Y3QgZ2RsbV9scyAqbHMgPSBsb2Nrc3BhY2U7Ci0KLQlsb2dfZGVidWcoInVubW91bnQgZmxhZ3MgJWx4IiwgbHMtPmZsYWdzKTsKLQotCS8qIEZJWE1FOiBzZXJpYWxpemUgdW5tb3VudCBhbmQgd2l0aGRyYXcgaW4gY2FzZSB0aGV5Ci0JICAgaGFwcGVuIGF0IG9uY2UuICBBbHNvLCBpZiB1bm1vdW50IGZvbGxvd3Mgd2l0aGRyYXcsCi0JICAgd2FpdCBmb3Igd2l0aGRyYXcgdG8gZmluaXNoLiAqLwotCi0JaWYgKHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpCi0JCWdvdG8gb3V0OwotCi0JZ2RsbV9rb2JqZWN0X3JlbGVhc2UobHMpOwotCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+ZGxtX2xvY2tzcGFjZSwgMik7Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotCUJVR19PTihscy0+YWxsX2xvY2tzX2NvdW50KTsKLW91dDoKLQlrZnJlZShscyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdkbG1fcmVjb3ZlcnlfZG9uZSh2b2lkICpsb2Nrc3BhY2UsIHVuc2lnbmVkIGludCBqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCi17Ci0JY2hhciBlbnZfamlkWzIwXTsKLQljaGFyIGVudl9zdGF0dXNbMjBdOwotCWNoYXIgKmVudnBbXSA9IHsgZW52X2ppZCwgZW52X3N0YXR1cywgTlVMTCB9OwotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlscy0+cmVjb3Zlcl9qaWRfZG9uZSA9IGppZDsKLQlscy0+cmVjb3Zlcl9qaWRfc3RhdHVzID0gbWVzc2FnZTsKLQlzcHJpbnRmKGVudl9qaWQsICJKSUQ9JWQiLCBqaWQpOwotCXNwcmludGYoZW52X3N0YXR1cywgIlJFQ09WRVJZPSVzIiwKLQkJbWVzc2FnZSA9PSBMTV9SRF9TVUNDRVNTID8gIkRvbmUiIDogIkZhaWxlZCIpOwotCWtvYmplY3RfdWV2ZW50X2VudigmbHMtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2RsbV9vdGhlcnNfbWF5X21vdW50KHZvaWQgKmxvY2tzcGFjZSkKLXsKLQljaGFyICptZXNzYWdlID0gIkZJUlNUTU9VTlQ9RG9uZSI7Ci0JY2hhciAqZW52cFtdID0geyBtZXNzYWdlLCBOVUxMIH07Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCWxzLT5maXJzdF9kb25lID0gMTsKLQlrb2JqZWN0X3VldmVudF9lbnYoJmxzLT5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7Ci19Ci0KLS8qIFVzZXJzcGFjZSBnZXRzIHRoZSBvZmZsaW5lIHVldmVudCwgYmxvY2tzIG5ldyBnZnMgbG9ja3Mgb24KLSAgIG90aGVyIG1vdW50ZXJzLCBhbmQgbGV0cyB1cyBrbm93IChzZXRzIFdJVEhEUkFXIGZsYWcpLiAgVGhlbiwKLSAgIHVzZXJzcGFjZSBsZWF2ZXMgdGhlIG1vdW50IGdyb3VwIHdoaWxlIHdlIGxlYXZlIHRoZSBsb2Nrc3BhY2UuICovCi0KLXN0YXRpYyB2b2lkIGdkbG1fd2l0aGRyYXcodm9pZCAqbG9ja3NwYWNlKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQotCWtvYmplY3RfdWV2ZW50KCZscy0+a29iaiwgS09CSl9PRkZMSU5FKTsKLQotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShscy0+d2FpdF9jb250cm9sLAotCQkJCSB0ZXN0X2JpdChERkxfV0lUSERSQVcsICZscy0+ZmxhZ3MpKTsKLQotCWRsbV9yZWxlYXNlX2xvY2tzcGFjZShscy0+ZGxtX2xvY2tzcGFjZSwgMik7Ci0JZ2RsbV9yZWxlYXNlX3RocmVhZHMobHMpOwotCWdkbG1fa29iamVjdF9yZWxlYXNlKGxzKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3Bsb2NrKHZvaWQgKmxvY2tzcGFjZSwgc3RydWN0IGxtX2xvY2tuYW1lICpuYW1lLAotCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfbG9jayhscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBjbWQsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3B1bmxvY2sodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCi17Ci0Jc3RydWN0IGdkbG1fbHMgKmxzID0gbG9ja3NwYWNlOwotCXJldHVybiBkbG1fcG9zaXhfdW5sb2NrKGxzLT5kbG1fbG9ja3NwYWNlLCBuYW1lLT5sbl9udW1iZXIsIGZpbGUsIGZsKTsKLX0KLQotc3RhdGljIGludCBnZGxtX3Bsb2NrX2dldCh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGxvY2tzcGFjZTsKLQlyZXR1cm4gZGxtX3Bvc2l4X2dldChscy0+ZGxtX2xvY2tzcGFjZSwgbmFtZS0+bG5fbnVtYmVyLCBmaWxlLCBmbCk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzIGdkbG1fb3BzID0gewotCS5sbV9wcm90b19uYW1lID0gImxvY2tfZGxtIiwKLQkubG1fbW91bnQgPSBnZGxtX21vdW50LAotCS5sbV9vdGhlcnNfbWF5X21vdW50ID0gZ2RsbV9vdGhlcnNfbWF5X21vdW50LAotCS5sbV91bm1vdW50ID0gZ2RsbV91bm1vdW50LAotCS5sbV93aXRoZHJhdyA9IGdkbG1fd2l0aGRyYXcsCi0JLmxtX2dldF9sb2NrID0gZ2RsbV9nZXRfbG9jaywKLQkubG1fcHV0X2xvY2sgPSBnZGxtX3B1dF9sb2NrLAotCS5sbV9sb2NrID0gZ2RsbV9sb2NrLAotCS5sbV91bmxvY2sgPSBnZGxtX3VubG9jaywKLQkubG1fcGxvY2sgPSBnZGxtX3Bsb2NrLAotCS5sbV9wdW5sb2NrID0gZ2RsbV9wdW5sb2NrLAotCS5sbV9wbG9ja19nZXQgPSBnZGxtX3Bsb2NrX2dldCwKLQkubG1fY2FuY2VsID0gZ2RsbV9jYW5jZWwsCi0JLmxtX2hvbGRfbHZiID0gZ2RsbV9ob2xkX2x2YiwKLQkubG1fdW5ob2xkX2x2YiA9IGdkbG1fdW5ob2xkX2x2YiwKLQkubG1fcmVjb3ZlcnlfZG9uZSA9IGdkbG1fcmVjb3ZlcnlfZG9uZSwKLQkubG1fb3duZXIgPSBUSElTX01PRFVMRSwKLX07Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYyBiL2ZzL2dmczIvbG9ja2luZy9kbG0vc3lzZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3ZWRjZi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3N5c2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotCi0jaW5jbHVkZSAibG9ja19kbG0uaCIKLQotc3RhdGljIHNzaXplX3QgcHJvdG9fbmFtZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBnZGxtX29wcy5sbV9wcm90b19uYW1lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxvY2tfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlzc2l6ZV90IHJldDsKLQlpbnQgdmFsID0gMDsKLQotCWlmICh0ZXN0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpKQotCQl2YWwgPSAxOwotCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxvY2tfc3RvcmUoc3RydWN0IGdkbG1fbHMgKmxzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3NpemVfdCByZXQgPSBsZW47Ci0JaW50IHZhbDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKLQotCWlmICh2YWwgPT0gMSkKLQkJc2V0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpOwotCWVsc2UgaWYgKHZhbCA9PSAwKSB7Ci0JCWNsZWFyX2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+ZmxhZ3MpOwotCQlnZGxtX3N1Ym1pdF9kZWxheWVkKGxzKTsKLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB3aXRoZHJhd19zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXNzaXplX3QgcmV0OwotCWludCB2YWwgPSAwOwotCi0JaWYgKHRlc3RfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncykpCi0JCXZhbCA9IDE7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB3aXRoZHJhd19zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzc2l6ZV90IHJldCA9IGxlbjsKLQlpbnQgdmFsOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOwotCi0JaWYgKHZhbCA9PSAxKQotCQlzZXRfYml0KERGTF9XSVRIRFJBVywgJmxzLT5mbGFncyk7Ci0JZWxzZQotCQlyZXQgPSAtRUlOVkFMOwotCXdha2VfdXAoJmxzLT53YWl0X2NvbnRyb2wpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGlkX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGxzLT5pZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGppZF9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+amlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZmlyc3Rfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmZpcnN0KTsKLX0KLQotc3RhdGljIHNzaXplX3QgZmlyc3RfZG9uZV9zaG93KHN0cnVjdCBnZGxtX2xzICpscywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+Zmlyc3RfZG9uZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlY292ZXJfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlscy0+cmVjb3Zlcl9qaWQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7Ci0JbHMtPmZzY2IobHMtPnNkcCwgTE1fQ0JfTkVFRF9SRUNPVkVSWSwgJmxzLT5yZWNvdmVyX2ppZCk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9kb25lX3Nob3coc3RydWN0IGdkbG1fbHMgKmxzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5yZWNvdmVyX2ppZF9kb25lKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZ2RsbV9scyAqbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPnJlY292ZXJfamlkX3N0YXR1cyk7Ci19Ci0KLXN0cnVjdCBnZGxtX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdkbG1fbHMgKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBnZGxtX2xzICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLX07Ci0KLSNkZWZpbmUgR0RMTV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAotc3RhdGljIHN0cnVjdCBnZGxtX2F0dHIgZ2RsbV9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQotCi1HRExNX0FUVFIocHJvdG9fbmFtZSwgICAgIDA0NDQsIHByb3RvX25hbWVfc2hvdywgICAgIE5VTEwpOwotR0RMTV9BVFRSKGJsb2NrLCAgICAgICAgICAwNjQ0LCBibG9ja19zaG93LCAgICAgICAgICBibG9ja19zdG9yZSk7Ci1HRExNX0FUVFIod2l0aGRyYXcsICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csICAgICAgIHdpdGhkcmF3X3N0b3JlKTsKLUdETE1fQVRUUihpZCwgICAgICAgICAgICAgMDQ0NCwgaWRfc2hvdywgICAgICAgICAgICAgTlVMTCk7Ci1HRExNX0FUVFIoamlkLCAgICAgICAgICAgIDA0NDQsIGppZF9zaG93LCAgICAgICAgICAgIE5VTEwpOwotR0RMTV9BVFRSKGZpcnN0LCAgICAgICAgICAwNDQ0LCBmaXJzdF9zaG93LCAgICAgICAgICBOVUxMKTsKLUdETE1fQVRUUihmaXJzdF9kb25lLCAgICAgMDQ0NCwgZmlyc3RfZG9uZV9zaG93LCAgICAgTlVMTCk7Ci1HRExNX0FUVFIocmVjb3ZlciwgICAgICAgIDA2NDQsIHJlY292ZXJfc2hvdywgICAgICAgIHJlY292ZXJfc3RvcmUpOwotR0RMTV9BVFRSKHJlY292ZXJfZG9uZSwgICAwNDQ0LCByZWNvdmVyX2RvbmVfc2hvdywgICBOVUxMKTsKLUdETE1fQVRUUihyZWNvdmVyX3N0YXR1cywgMDQ0NCwgcmVjb3Zlcl9zdGF0dXNfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpnZGxtX2F0dHJzW10gPSB7Ci0JJmdkbG1fYXR0cl9wcm90b19uYW1lLmF0dHIsCi0JJmdkbG1fYXR0cl9ibG9jay5hdHRyLAotCSZnZGxtX2F0dHJfd2l0aGRyYXcuYXR0ciwKLQkmZ2RsbV9hdHRyX2lkLmF0dHIsCi0JJmdkbG1fYXR0cl9qaWQuYXR0ciwKLQkmZ2RsbV9hdHRyX2ZpcnN0LmF0dHIsCi0JJmdkbG1fYXR0cl9maXJzdF9kb25lLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyLmF0dHIsCi0JJmdkbG1fYXR0cl9yZWNvdmVyX2RvbmUuYXR0ciwKLQkmZ2RsbV9hdHRyX3JlY292ZXJfc3RhdHVzLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGdkbG1fYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0Jc3RydWN0IGdkbG1fYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZ2RsbV9hdHRyLCBhdHRyKTsKLQlyZXR1cm4gYS0+c2hvdyA/IGEtPnNob3cobHMsIGJ1ZikgOiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBnZGxtX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2RsbV9scywga29iaik7Ci0Jc3RydWN0IGdkbG1fYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZ2RsbV9hdHRyLCBhdHRyKTsKLQlyZXR1cm4gYS0+c3RvcmUgPyBhLT5zdG9yZShscywgYnVmLCBsZW4pIDogbGVuOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBnZGxtX2F0dHJfb3BzID0gewotCS5zaG93ICA9IGdkbG1fYXR0cl9zaG93LAotCS5zdG9yZSA9IGdkbG1fYXR0cl9zdG9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGdkbG1fa3R5cGUgPSB7Ci0JLmRlZmF1bHRfYXR0cnMgPSBnZGxtX2F0dHJzLAotCS5zeXNmc19vcHMgICAgID0gJmdkbG1fYXR0cl9vcHMsCi19OwotCi1zdGF0aWMgc3RydWN0IGtzZXQgKmdkbG1fa3NldDsKLQotaW50IGdkbG1fa29iamVjdF9zZXR1cChzdHJ1Y3QgZ2RsbV9scyAqbHMsIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopCi17Ci0JaW50IGVycm9yOwotCi0JbHMtPmtvYmoua3NldCA9IGdkbG1fa3NldDsKLQllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZscy0+a29iaiwgJmdkbG1fa3R5cGUsIGZza29iaiwKLQkJCQkgICAgICJsb2NrX21vZHVsZSIpOwotCWlmIChlcnJvcikKLQkJbG9nX2Vycm9yKCJjYW4ndCByZWdpc3RlciBrb2JqICVkIiwgZXJyb3IpOwotCWtvYmplY3RfdWV2ZW50KCZscy0+a29iaiwgS09CSl9BREQpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi12b2lkIGdkbG1fa29iamVjdF9yZWxlYXNlKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlrb2JqZWN0X3B1dCgmbHMtPmtvYmopOwotfQotCi1zdGF0aWMgaW50IGdkbG1fdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKLXsKLSAgICAgICAgc3RydWN0IGdkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZGxtX2xzLCBrb2JqKTsKLSAgICAgICAgYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzOiVzIiwgbHMtPmNsdXN0ZXJuYW1lLCBscy0+ZnNuYW1lKTsKLSAgICAgICAgYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPWxvY2tfZGxtIik7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBnZGxtX3VldmVudF9vcHMgPSB7Ci0JLnVldmVudCA9IGdkbG1fdWV2ZW50LAotfTsKLQotCi1pbnQgZ2RsbV9zeXNmc19pbml0KHZvaWQpCi17Ci0JZ2RsbV9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgibG9ja19kbG0iLCAmZ2RsbV91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7Ci0JaWYgKCFnZGxtX2tzZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbiBub3QgY3JlYXRlIGtzZXRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGdkbG1fc3lzZnNfZXhpdCh2b2lkKQotewotCWtzZXRfdW5yZWdpc3RlcihnZGxtX2tzZXQpOwotfQotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS90aHJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg4MjNlZi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2xvY2tpbmcvZGxtL3RocmVhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgImxvY2tfZGxtLmgiCi0KLXN0YXRpYyBpbmxpbmUgaW50IG5vX3dvcmsoc3RydWN0IGdkbG1fbHMgKmxzKQotewotCWludCByZXQ7Ci0KLQlzcGluX2xvY2soJmxzLT5hc3luY19sb2NrKTsKLQlyZXQgPSBsaXN0X2VtcHR5KCZscy0+c3VibWl0KTsKLQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnZGxtX3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBnZGxtX2xzICpscyA9IChzdHJ1Y3QgZ2RsbV9scyAqKSBkYXRhOwotCXN0cnVjdCBnZGxtX2xvY2sgKmxwID0gTlVMTDsKLQotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShscy0+dGhyZWFkX3dhaXQsCi0JCQkJIW5vX3dvcmsobHMpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0KLQkJc3Bpbl9sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZscy0+c3VibWl0KSkgewotCQkJbHAgPSBsaXN0X2VudHJ5KGxzLT5zdWJtaXQubmV4dCwgc3RydWN0IGdkbG1fbG9jaywKLQkJCQkJZGVsYXlfbGlzdCk7Ci0JCQlsaXN0X2RlbF9pbml0KCZscC0+ZGVsYXlfbGlzdCk7Ci0JCQlzcGluX3VubG9jaygmbHMtPmFzeW5jX2xvY2spOwotCQkJZ2RsbV9kb19sb2NrKGxwKTsKLQkJCXNwaW5fbG9jaygmbHMtPmFzeW5jX2xvY2spOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZscy0+YXN5bmNfbG9jayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBnZGxtX2luaXRfdGhyZWFkcyhzdHJ1Y3QgZ2RsbV9scyAqbHMpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWludCBlcnJvcjsKLQotCXAgPSBrdGhyZWFkX3J1bihnZGxtX3RocmVhZCwgbHMsICJsb2NrX2RsbSIpOwotCWVycm9yID0gSVNfRVJSKHApOwotCWlmIChlcnJvcikgewotCQlsb2dfZXJyb3IoImNhbid0IHN0YXJ0IGxvY2tfZGxtIHRocmVhZCAlZCIsIGVycm9yKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlscy0+dGhyZWFkID0gcDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGdkbG1fcmVsZWFzZV90aHJlYWRzKHN0cnVjdCBnZGxtX2xzICpscykKLXsKLQlrdGhyZWFkX3N0b3AobHMtPnRocmVhZCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9nLmMgYi9mcy9nZnMyL2xvZy5jCmluZGV4IGFkMzA1ODUuLjk4OTE4YTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9nLmMKKysrIGIvZnMvZ2ZzMi9sb2cuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggNDM5MGY2Zi4uODBlNGY1ZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA3Y2FjZmRlLi5hNjg5MmVkIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTIzLDYgKzIyLDEyIEBACiAjaW5jbHVkZSAic3lzLmgiCiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImdsb2NrLmgiCisjaW5jbHVkZSAicXVvdGEuaCIKKworc3RhdGljIHN0cnVjdCBzaHJpbmtlciBxZF9zaHJpbmtlciA9IHsKKwkuc2hyaW5rID0gZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5LAorCS5zZWVrcyA9IERFRkFVTFRfU0VFS1MsCit9OwogCiBzdGF0aWMgdm9pZCBnZnMyX2luaXRfaW5vZGVfb25jZSh2b2lkICpmb28pCiB7CkBAIC00MSw4ICs0Niw2IEBACiAJSU5JVF9ITElTVF9OT0RFKCZnbC0+Z2xfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmdsLT5nbF9zcGluKTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2hvbGRlcnMpOwotCWdsLT5nbF9sdmIgPSBOVUxMOwotCWF0b21pY19zZXQoJmdsLT5nbF9sdmJfY291bnQsIDApOwogCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2FpbF9saXN0KTsKIAlhdG9taWNfc2V0KCZnbC0+Z2xfYWlsX2NvdW50LCAwKTsKQEAgLTEwMCw2ICsxMDMsOCBAQAogCWlmICghZ2ZzMl9xdW90YWRfY2FjaGVwKQogCQlnb3RvIGZhaWw7CiAKKwlyZWdpc3Rlcl9zaHJpbmtlcigmcWRfc2hyaW5rZXIpOworCiAJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwpAQCAtMTE3LDYgKzEyMiw3IEBACiBmYWlsX3VucmVnaXN0ZXI6CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogZmFpbDoKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CiAJZ2ZzMl9nbG9ja19leGl0KCk7CiAKIAlpZiAoZ2ZzMl9xdW90YWRfY2FjaGVwKQpAQCAtMTQ1LDYgKzE1MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2dmczJfZnModm9pZCkKIHsKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZxZF9zaHJpbmtlcik7CiAJZ2ZzMl9nbG9ja19leGl0KCk7CiAJZ2ZzMl91bnJlZ2lzdGVyX2RlYnVnZnMoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJfZnNfdHlwZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IDA5ODUzNjIuLjhkNmYxMzIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtOTAsMjcgKzg5LDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX21ldGFfaW52YWwgLSBJbnZhbGlkYXRlIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jawotICoKLSAqLwotCi12b2lkIGdmczJfbWV0YV9pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwotCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gZ2wtPmdsX2FzcGFjZTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKLQotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7Ci0KLQlhdG9taWNfaW5jKCZhc3BhY2UtPmlfd3JpdGVjb3VudCk7Ci0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7Ci0JYXRvbWljX2RlYygmYXNwYWNlLT5pX3dyaXRlY291bnQpOwotCi0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhbWFwcGluZy0+bnJwYWdlcyk7Ci19Ci0KLS8qKgogICogZ2ZzMl9tZXRhX3N5bmMgLSBTeW5jIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2NrCiAgKiBAZ2w6IFRoZSBnbG9jawogICoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWV0YV9pby5oIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKaW5kZXggYjFhNWYzNi4uZGUyNzBjMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tZXRhX2lvLmgKKysrIGIvZnMvZ2ZzMi9tZXRhX2lvLmgKQEAgLTQwLDcgKzQwLDYgQEAKIHN0cnVjdCBpbm9kZSAqZ2ZzMl9hc3BhY2VfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIHZvaWQgZ2ZzMl9hc3BhY2VfcHV0KHN0cnVjdCBpbm9kZSAqYXNwYWNlKTsKIAotdm9pZCBnZnMyX21ldGFfaW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIHZvaWQgZ2ZzMl9tZXRhX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAogc3RydWN0IGJ1ZmZlcl9oZWFkICpnZnMyX21ldGFfbmV3KHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdTY0IGJsa25vKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuYyBiL2ZzL2dmczIvbW91bnQuYwppbmRleCAzY2IwYTQ0Li5mN2U4NTI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL21vdW50LmMKKysrIGIvZnMvZ2ZzMi9tb3VudC5jCkBAIC0xMiwxMiArMTIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgotI2luY2x1ZGUgIm1vdW50LmgiCisjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJzeXMuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAKQEAgLTM3LDExICszNiwxNSBAQAogCU9wdF9xdW90YV9vZmYsCiAJT3B0X3F1b3RhX2FjY291bnQsCiAJT3B0X3F1b3RhX29uLAorCU9wdF9xdW90YSwKKwlPcHRfbm9xdW90YSwKIAlPcHRfc3VpZGRpciwKIAlPcHRfbm9zdWlkZGlyLAogCU9wdF9kYXRhX3dyaXRlYmFjaywKIAlPcHRfZGF0YV9vcmRlcmVkLAogCU9wdF9tZXRhLAorCU9wdF9kaXNjYXJkLAorCU9wdF9ub2Rpc2NhcmQsCiAJT3B0X2VyciwKIH07CiAKQEAgLTYxLDExICs2NCwxNSBAQAogCXtPcHRfcXVvdGFfb2ZmLCAicXVvdGE9b2ZmIn0sCiAJe09wdF9xdW90YV9hY2NvdW50LCAicXVvdGE9YWNjb3VudCJ9LAogCXtPcHRfcXVvdGFfb24sICJxdW90YT1vbiJ9LAorCXtPcHRfcXVvdGEsICJxdW90YSJ9LAorCXtPcHRfbm9xdW90YSwgIm5vcXVvdGEifSwKIAl7T3B0X3N1aWRkaXIsICJzdWlkZGlyIn0sCiAJe09wdF9ub3N1aWRkaXIsICJub3N1aWRkaXIifSwKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKIAl7T3B0X2RhdGFfb3JkZXJlZCwgImRhdGE9b3JkZXJlZCJ9LAogCXtPcHRfbWV0YSwgIm1ldGEifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCisJe09wdF9ub2Rpc2NhcmQsICJub2Rpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKQEAgLTc3LDEwMSArODQsNDYgQEAKICAqIFJldHVybjogZXJybm8KICAqLwogCi1pbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpkYXRhX2FyZywgaW50IHJlbW91bnQpCitpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpvcHRpb25zKQogewotCXN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MgPSAmc2RwLT5zZF9hcmdzOwotCWNoYXIgKmRhdGEgPSBkYXRhX2FyZzsKLQljaGFyICpvcHRpb25zLCAqbywgKnY7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICghcmVtb3VudCkgewotCQkvKiAgU2V0IHNvbWUgZGVmYXVsdHMgICovCi0JCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9ERUZBVUxUOwotCQlhcmdzLT5hcl9kYXRhID0gR0ZTMl9EQVRBX0RFRkFVTFQ7Ci0JfQorCWNoYXIgKm87CisJaW50IHRva2VuOworCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwogCiAJLyogU3BsaXQgdGhlIG9wdGlvbnMgaW50byB0b2tlbnMgd2l0aCB0aGUgIiwiIGNoYXJhY3RlciBhbmQKIAkgICBwcm9jZXNzIHRoZW0gKi8KIAotCWZvciAob3B0aW9ucyA9IGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKTsgKSB7Ci0JCWludCB0b2tlbjsKLQkJc3Vic3RyaW5nX3QgdG1wW01BWF9PUFRfQVJHU107Ci0KLQkJaWYgKCEqbykKKwl3aGlsZSAoMSkgeworCQlvID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpOworCQlpZiAobyA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmICgqbyA9PSAnXDAnKQogCQkJY29udGludWU7CiAKIAkJdG9rZW4gPSBtYXRjaF90b2tlbihvLCB0b2tlbnMsIHRtcCk7CiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfbG9ja3Byb3RvOgotCQkJdiA9IG1hdGNoX3N0cmR1cCgmdG1wWzBdKTsKLQkJCWlmICghdikgewotCQkJCWZzX2luZm8oc2RwLCAibm8gbWVtb3J5IGZvciBsb2NrcHJvdG9cbiIpOwotCQkJCWVycm9yID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dF9lcnJvcjsKLQkJCX0KLQotCQkJaWYgKHJlbW91bnQgJiYgc3RyY21wKHYsIGFyZ3MtPmFyX2xvY2twcm90bykpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQkJCQotCQkJc3RybmNweShhcmdzLT5hcl9sb2NrcHJvdG8sIHYsIEdGUzJfTE9DS05BTUVfTEVOKTsKLQkJCWFyZ3MtPmFyX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTiAtIDFdID0gMDsKLQkJCWtmcmVlKHYpOworCQkJbWF0Y2hfc3RybGNweShhcmdzLT5hcl9sb2NrcHJvdG8sICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2t0YWJsZToKLQkJCXYgPSBtYXRjaF9zdHJkdXAoJnRtcFswXSk7Ci0JCQlpZiAoIXYpIHsKLQkJCQlmc19pbmZvKHNkcCwgIm5vIG1lbW9yeSBmb3IgbG9ja3RhYmxlXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9sb2NrdGFibGUpKSB7Ci0JCQkJa2ZyZWUodik7Ci0JCQkJZ290byBjYW50X3JlbW91bnQ7Ci0JCQl9Ci0KLQkJCXN0cm5jcHkoYXJncy0+YXJfbG9ja3RhYmxlLCB2LCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JCQlhcmdzLT5hcl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSAgPSAwOwotCQkJa2ZyZWUodik7CisJCQltYXRjaF9zdHJsY3B5KGFyZ3MtPmFyX2xvY2t0YWJsZSwgJnRtcFswXSwKKwkJCQkgICAgICBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaG9zdGRhdGE6Ci0JCQl2ID0gbWF0Y2hfc3RyZHVwKCZ0bXBbMF0pOwotCQkJaWYgKCF2KSB7Ci0JCQkJZnNfaW5mbyhzZHAsICJubyBtZW1vcnkgZm9yIGhvc3RkYXRhXG4iKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBvdXRfZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChyZW1vdW50ICYmIHN0cmNtcCh2LCBhcmdzLT5hcl9ob3N0ZGF0YSkpIHsKLQkJCQlrZnJlZSh2KTsKLQkJCQlnb3RvIGNhbnRfcmVtb3VudDsKLQkJCX0KLQotCQkJc3RybmNweShhcmdzLT5hcl9ob3N0ZGF0YSwgdiwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCQkJYXJncy0+YXJfaG9zdGRhdGFbR0ZTMl9MT0NLTkFNRV9MRU4gLSAxXSA9IDA7Ci0JCQlrZnJlZSh2KTsKKwkJCW1hdGNoX3N0cmxjcHkoYXJncy0+YXJfaG9zdGRhdGEsICZ0bXBbMF0sCisJCQkJICAgICAgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3NwZWN0YXRvcjoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9zcGVjdGF0b3IpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9zcGVjdGF0b3IgPSAxOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lnbm9yZV9sb2NhbF9mczoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9pZ25vcmVfbG9jYWxfZnMpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9pZ25vcmVfbG9jYWxfZnMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2FsZmxvY2tzOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX2xvY2FsZmxvY2tzKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbG9jYWxmbG9ja3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2xvY2FsY2FjaGluZzoKLQkJCWlmIChyZW1vdW50ICYmICFhcmdzLT5hcl9sb2NhbGNhY2hpbmcpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl9sb2NhbGNhY2hpbmcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgpAQCAtMTgxLDI1ICsxMzMsMjMgQEAKIAkJCWFyZ3MtPmFyX2RlYnVnID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF91cGdyYWRlOgotCQkJaWYgKHJlbW91bnQgJiYgIWFyZ3MtPmFyX3VwZ3JhZGUpCi0JCQkJZ290byBjYW50X3JlbW91bnQ7CiAJCQlhcmdzLT5hcl91cGdyYWRlID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9hY2w6CiAJCQlhcmdzLT5hcl9wb3NpeF9hY2wgPSAxOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9hY2w6CiAJCQlhcmdzLT5hcl9wb3NpeF9hY2wgPSAwOwotCQkJc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJj0gfk1TX1BPU0lYQUNMOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX29mZjoKKwkJY2FzZSBPcHRfbm9xdW90YToKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9PRkY7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcXVvdGFfYWNjb3VudDoKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9BQ0NPVU5UOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3F1b3RhX29uOgorCQljYXNlIE9wdF9xdW90YToKIAkJCWFyZ3MtPmFyX3F1b3RhID0gR0ZTMl9RVU9UQV9PTjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9zdWlkZGlyOgpAQCAtMjE1LDI5ICsxNjUsMjEgQEAKIAkJCWFyZ3MtPmFyX2RhdGEgPSBHRlMyX0RBVEFfT1JERVJFRDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9tZXRhOgotCQkJaWYgKHJlbW91bnQgJiYgYXJncy0+YXJfbWV0YSAhPSAxKQotCQkJCWdvdG8gY2FudF9yZW1vdW50OwogCQkJYXJncy0+YXJfbWV0YSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZGlzY2FyZDoKKwkJCWFyZ3MtPmFyX2Rpc2NhcmQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vZGlzY2FyZDoKKwkJCWFyZ3MtPmFyX2Rpc2NhcmQgPSAwOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2VycjoKIAkJZGVmYXVsdDoKLQkJCWZzX2luZm8oc2RwLCAidW5rbm93biBvcHRpb246ICVzXG4iLCBvKTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0X2Vycm9yOworCQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbjogJXNcbiIsIG8pOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLW91dF9lcnJvcjoKLQlpZiAoZXJyb3IpCi0JCWZzX2luZm8oc2RwLCAiaW52YWxpZCBtb3VudCBvcHRpb24ocylcbiIpOwotCi0JaWYgKGRhdGEgIT0gZGF0YV9hcmcpCi0JCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuIGVycm9yOwotCi1jYW50X3JlbW91bnQ6Ci0JZnNfaW5mbyhzZHAsICJjYW4ndCByZW1vdW50IHdpdGggb3B0aW9uICVzXG4iLCBvKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tb3VudC5oIGIvZnMvZ2ZzMi9tb3VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEyODhhLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvbW91bnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19NT1VOVF9ET1RfSF9fCi0jZGVmaW5lIF9fTU9VTlRfRE9UX0hfXwotCi1zdHJ1Y3QgZ2ZzMl9zYmQ7Ci0KLWludCBnZnMyX21vdW50X2FyZ3Moc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmRhdGFfYXJnLCBpbnQgcmVtb3VudCk7Ci0KLSNlbmRpZiAvKiBfX01PVU5UX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2FkZHJlc3MuYyBiL2ZzL2dmczIvb3BzX2FkZHJlc3MuYwppbmRleCA0ZGRhYjY3Li5hNmRkZTE3IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19hZGRyZXNzLmMKKysrIGIvZnMvZ2ZzMi9vcHNfYWRkcmVzcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTQ0Miw2ICs0NDEsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseShwYWdlLT5pbmRleCkpIHsKIAkJemVyb191c2VyKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDk2LDYgKzEwOTYsNyBAQAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCiAJLmRpcmVjdF9JTyA9IGdmczJfZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZSA9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfb3JkZXJlZF9hb3BzID0gewpAQCAtMTExMSw2ICsxMTEyLDcgQEAKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAogCS5kaXJlY3RfSU8gPSBnZnMyX2RpcmVjdF9JTywKIAkubWlncmF0ZXBhZ2UgPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX2pkYXRhX2FvcHMgPSB7CkBAIC0xMTI1LDYgKzExMjcsNyBAQAogCS5ibWFwID0gZ2ZzMl9ibWFwLAogCS5pbnZhbGlkYXRlcGFnZSA9IGdmczJfaW52YWxpZGF0ZXBhZ2UsCiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogdm9pZCBnZnMyX3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19kZW50cnkuYyBiL2ZzL2dmczIvb3BzX2RlbnRyeS5jCmluZGV4IGMyYWQzNjMuLjVlYjU3YjAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2RlbnRyeS5jCisrKyBiL2ZzL2dmczIvb3BzX2RlbnRyeS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19leHBvcnQuYyBiL2ZzL2dmczIvb3BzX2V4cG9ydC5jCmluZGV4IDdmZGViMTQuLjkyMDBlZjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jCisrKyBiL2ZzL2dmczIvb3BzX2V4cG9ydC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19maWxlLmMgYi9mcy9nZnMyL29wc19maWxlLmMKaW5kZXggOTNmZTQxYi4uM2I5ZThkZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZmlsZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwpAQCAtMjAsOSArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGxtLmg+CisjaW5jbHVkZSA8bGludXgvZGxtX3Bsb2NrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zNTQsNyArMzU1LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAorCXNldF9iaXQoR0xGX0RJUlRZLCAmaXAtPmlfZ2wtPmdsX2ZsYWdzKTsKIAlzZXRfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKTsKKwogCXJldCA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIHBvcywgUEFHRV9DQUNIRV9TSVpFLCAmYWxsb2NfcmVxdWlyZWQpOwogCWlmIChyZXQgfHwgIWFsbG9jX3JlcXVpcmVkKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC01NjAsNTcgKzU2MywyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQorCiAvKioKICAqIGdmczJfc2V0bGVhc2UgLSBhY3F1aXJlL3JlbGVhc2UgYSBmaWxlIGxlYXNlCiAgKiBAZmlsZTogdGhlIGZpbGUgcG9pbnRlcgogICogQGFyZzogbGVhc2UgdHlwZQogICogQGZsOiBmaWxlIGxvY2sKICAqCisgKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBlbmZvcmNlIGEgbGVhc2UgYWNyb3NzIHRoZSB3aG9sZQorICogY2x1c3RlcjsgdW50aWwgd2UgZG8sIGRpc2FibGUgbGVhc2VzIChieSBqdXN0IHJldHVybmluZyAtRUlOVkFMKSwKKyAqIHVubGVzcyB0aGUgYWRtaW5pc3RyYXRvciBoYXMgcmVxdWVzdGVkIHB1cmVseSBsb2NhbCBsb2NraW5nLgorICoKICAqIFJldHVybnM6IGVycm5vCiAgKi8KIAogc3RhdGljIGludCBnZnMyX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxlLCBsb25nIGFyZywgc3RydWN0IGZpbGVfbG9jayAqKmZsKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihmaWxlLT5mX21hcHBpbmctPmhvc3QpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBlbmZvcmNlIGEgbGVhc2UgYWNyb3NzIHRoZSB3aG9sZQotCSAqIGNsdXN0ZXI7IHVudGlsIHdlIGRvLCBkaXNhYmxlIGxlYXNlcyAoYnkganVzdCByZXR1cm5pbmcgLUVJTlZBTCksCi0JICogdW5sZXNzIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyByZXF1ZXN0ZWQgcHVyZWx5IGxvY2FsIGxvY2tpbmcuCi0JICovCi0JaWYgKCFzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBnZW5lcmljX3NldGxlYXNlKGZpbGUsIGFyZywgZmwpOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcGxvY2tfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9ja19nZXQoCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3Bsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3Bsb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGNtZCwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3B1bmxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdW5sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGZsKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgpAQCAtNjI2LDkgKzU5Niw3IEBACiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lIG5hbWUgPQotCQl7IC5sbl9udW1iZXIgPSBpcC0+aV9ub19hZGRyLAotCQkgIC5sbl90eXBlID0gTE1fVFlQRV9QTE9DSyB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CiAKIAlpZiAoIShmbC0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkpCiAJCXJldHVybiAtRU5PTENLOwpAQCAtNjQwLDEyICs2MDgsMTQgQEAKIAkJY21kID0gRl9TRVRMSzsKIAkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOwogCX0KKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQorCQlyZXR1cm4gLUVJTzsKIAlpZiAoSVNfR0VUTEsoY21kKSkKLQkJcmV0dXJuIGdmczJfbG1fcGxvY2tfZ2V0KHNkcCwgJm5hbWUsIGZpbGUsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF9nZXQobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgZmwpOwogCWVsc2UgaWYgKGZsLT5mbF90eXBlID09IEZfVU5MQ0spCi0JCXJldHVybiBnZnMyX2xtX3B1bmxvY2soc2RwLCAmbmFtZSwgZmlsZSwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X3VubG9jayhscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBmbCk7CiAJZWxzZQotCQlyZXR1cm4gZ2ZzMl9sbV9wbG9jayhzZHAsICZuYW1lLCBmaWxlLCBjbWQsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF9sb2NrKGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGNtZCwgZmwpOwogfQogCiBzdGF0aWMgaW50IGRvX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKQEAgLTczMiw3ICs3MDIsNyBAQAogCX0KIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkubGxzZWVrCQk9IGdmczJfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCkBAIC03NTAsNyArNzIwLDcgQEAKIAkuc2V0bGVhc2UJPSBnZnMyX3NldGxlYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wcyA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLnJlYWRkaXIJPSBnZnMyX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ2ZzMl9pb2N0bCwKIAkub3BlbgkJPSBnZnMyX29wZW4sCkBAIC03NjAsNyArNzMwLDkgQEAKIAkuZmxvY2sJCT0gZ2ZzMl9mbG9jaywKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrID0geworI2VuZGlmIC8qIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNICovCisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzX25vbG9jayA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLmxsc2VlawkJPSBnZnMyX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApAQCAtNzczLDEwICs3NDUsMTAgQEAKIAkuZnN5bmMJCT0gZ2ZzMl9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLnNldGxlYXNlCT0gZ2ZzMl9zZXRsZWFzZSwKKwkuc2V0bGVhc2UJPSBnZW5lcmljX3NldGxlYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzX25vbG9jayA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHNfbm9sb2NrID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkucmVhZGRpcgk9IGdmczJfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJPSBnZnMyX2lvY3RsLAogCS5vcGVuCQk9IGdmczJfb3BlbiwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggZjkxZWViZC4uNTE4ODNiMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTI1LDcgKzI0LDYgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImdsb3BzLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKLSNpbmNsdWRlICJtb3VudC5oIgogI2luY2x1ZGUgInJlY292ZXJ5LmgiCiAjaW5jbHVkZSAicmdycC5oIgogI2luY2x1ZGUgInN1cGVyLmgiCkBAIC02NCw3ICs2Miw2IEBACiAJZ3QtPmd0X3F1b3RhX3dhcm5fcGVyaW9kID0gMTA7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX251bSA9IDE7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX2RlbiA9IDE7Ci0JZ3QtPmd0X3F1b3RhX2NhY2hlX3NlY3MgPSAzMDA7CiAJZ3QtPmd0X3F1b3RhX3F1YW50dW0gPSA2MDsKIAlndC0+Z3RfbmV3X2ZpbGVzX2pkYXRhID0gMDsKIAlndC0+Z3RfbWF4X3JlYWRhaGVhZCA9IDEgPDwgMTg7CkBAIC0xMDAsNyArOTcsNiBAQAogCW11dGV4X2luaXQoJnNkcC0+c2RfamluZGV4X211dGV4KTsKIAogCUlOSVRfTElTVF9IRUFEKCZzZHAtPnNkX3F1b3RhX2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3F1b3RhX3NwaW4pOwogCW11dGV4X2luaXQoJnNkcC0+c2RfcXVvdGFfbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+c2RfcXVvdGFfd2FpdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfdHJ1bmNfbGlzdCk7CkBAIC0yMzgsNiArMjM0LDcgQEAKIAogCW1lbWNweShzYi0+c2JfbG9ja3Byb3RvLCBzdHItPnNiX2xvY2twcm90bywgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCW1lbWNweShzYi0+c2JfbG9ja3RhYmxlLCBzdHItPnNiX2xvY2t0YWJsZSwgR0ZTMl9MT0NLTkFNRV9MRU4pOworCW1lbWNweShzYi0+c2JfdXVpZCwgc3RyLT5zYl91dWlkLCAxNik7CiB9CiAKIC8qKgpAQCAtMjk5LDE1ICsyOTYsMTUgQEAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIAlyZXR1cm4gMDsKIH0KKwogLyoqCiAgKiBnZnMyX3JlYWRfc2IgLSBSZWFkIHN1cGVyIGJsb2NrCiAgKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jayBmb3IgdGhlIHN1cGVyYmxvY2sgKGFzc3VtZWQgdG8gYmUgaGVsZCkKICAqIEBzaWxlbnQ6IERvbid0IHByaW50IG1lc3NhZ2UgaWYgbW91bnQgZmFpbHMKICAqCiAgKi8KIAotc3RhdGljIGludCBnZnMyX3JlYWRfc2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHNpbGVudCkKK3N0YXRpYyBpbnQgZ2ZzMl9yZWFkX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQogewogCXUzMiBoYXNoX2Jsb2NrcywgaW5kX2Jsb2NrcywgbGVhZl9ibG9ja3M7CiAJdTMyIHRtcF9ibG9ja3M7CkBAIC01MjcsNyArNTI0LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBnZnMyX3JlYWRfc2Ioc2RwLCBzYl9naC5naF9nbCwgc2lsZW50KTsKKwlyZXQgPSBnZnMyX3JlYWRfc2Ioc2RwLCBzaWxlbnQpOwogCWlmIChyZXQpIHsKIAkJZnNfZXJyKHNkcCwgImNhbid0IHJlYWQgc3VwZXJibG9jazogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNjMwLDEzICs2MjcsMTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfbG1fb3RoZXJzX21heV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3N0YXRpYyB2b2lkIGdmczJfb3RoZXJzX21heV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX290aGVyc19tYXlfbW91bnQpCi0JCXJldHVybjsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX290aGVyc19tYXlfbW91bnQoCi0JCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UpOworCWNoYXIgKm1lc3NhZ2UgPSAiRklSU1RNT1VOVD1Eb25lIjsKKwljaGFyICplbnZwW10gPSB7IG1lc3NhZ2UsIE5VTEwgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWxzLT5sc19maXJzdF9kb25lID0gMTsKKwlrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiAvKioKQEAgLTc5Niw3ICs3OTMsNyBAQAogCQkJfQogCQl9CiAKLQkJZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHNkcCk7CisJCWdmczJfb3RoZXJzX21heV9tb3VudChzZHApOwogCX0gZWxzZSBpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKIAkJZXJyb3IgPSBnZnMyX3JlY292ZXJfam91cm5hbChzZHAtPnNkX2pkZXNjKTsKIAkJaWYgKGVycm9yKSB7CkBAIC0xMDA1LDcgKzEwMDIsNiBAQAogCQlnb3RvIGZhaWxfcXVvdGFkOwogCiAJc2RwLT5zZF9sb2dfZmx1c2hfdGltZSA9IGppZmZpZXM7Ci0Jc2RwLT5zZF9qaW5kZXhfcmVmcmVzaF90aW1lID0gamlmZmllczsKIAogCXAgPSBrdGhyZWFkX3J1bihnZnMyX2xvZ2QsIHNkcCwgImdmczJfbG9nZCIpOwogCWVycm9yID0gSVNfRVJSKHApOwpAQCAtMTAzMyw2ICsxMDI5LDE3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBub2xvY2tfdG9rZW5zID0geworCXsgT3B0X2ppZCwgImppZD0lZFxuIiwgfSwKKwl7IE9wdF9lcnIsIE5VTEwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0geworCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKKwkubG1fcHV0X2xvY2sgPSBrbWVtX2NhY2hlX2ZyZWUsCisJLmxtX3Rva2VucyA9ICZub2xvY2tfdG9rZW5zLAorfTsKKwogLyoqCiAgKiBnZnMyX2xtX21vdW50IC0gbW91bnQgYSBsb2NraW5nIHByb3RvY29sCiAgKiBAc2RwOiB0aGUgZmlsZXN5c3RlbQpAQCAtMTA0NCwzMSArMTA1MSw3MyBAQAogCiBzdGF0aWMgaW50IGdmczJfbG1fbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBzaWxlbnQpCiB7Ci0JY2hhciAqcHJvdG8gPSBzZHAtPnNkX3Byb3RvX25hbWU7Ci0JY2hhciAqdGFibGUgPSBzZHAtPnNkX3RhYmxlX25hbWU7Ci0JaW50IGZsYWdzID0gTE1fTUZMQUdfQ09OVl9OT0RST1A7Ci0JaW50IGVycm9yOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MgPSAmc2RwLT5zZF9hcmdzOworCWNvbnN0IGNoYXIgKnByb3RvID0gc2RwLT5zZF9wcm90b19uYW1lOworCWNvbnN0IGNoYXIgKnRhYmxlID0gc2RwLT5zZF90YWJsZV9uYW1lOworCWNvbnN0IGNoYXIgKmZzbmFtZTsKKwljaGFyICpvLCAqb3B0aW9uczsKKwlpbnQgcmV0OwogCi0JaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCi0JCWZsYWdzIHw9IExNX01GTEFHX1NQRUNUQVRPUjsKKwlpZiAoIXN0cmNtcCgibG9ja19ub2xvY2siLCBwcm90bykpIHsKKwkJbG0gPSAmbm9sb2NrX29wczsKKwkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzID0gMTsKKwkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsY2FjaGluZyA9IDE7CisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoImxvY2tfZGxtIiwgcHJvdG8pKSB7CisJCWxtID0gJmdmczJfZGxtX29wczsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNhbid0IGZpbmQgcHJvdG9jb2wgJXNcbiIsIHByb3RvKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQogCiAJZnNfaW5mbyhzZHAsICJUcnlpbmcgdG8gam9pbiBjbHVzdGVyIFwiJXNcIiwgXCIlc1wiXG4iLCBwcm90bywgdGFibGUpOwogCi0JZXJyb3IgPSBnZnMyX21vdW50X2xvY2twcm90byhwcm90bywgdGFibGUsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSwKLQkJCQkgICAgIGdmczJfZ2xvY2tfY2IsIHNkcCwKLQkJCQkgICAgIEdGUzJfTUlOX0xWQl9TSVpFLCBmbGFncywKLQkJCQkgICAgICZzZHAtPnNkX2xvY2tzdHJ1Y3QsICZzZHAtPnNkX2tvYmopOwotCWlmIChlcnJvcikgewotCQlmc19pbmZvKHNkcCwgImNhbid0IG1vdW50IHByb3RvPSVzLCB0YWJsZT0lcywgaG9zdGRhdGE9JXNcbiIsCi0JCQlwcm90bywgdGFibGUsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlscy0+bHNfb3BzID0gbG07CisJbHMtPmxzX2ZpcnN0ID0gMTsKKwlscy0+bHNfaWQgPSAwOwogCi0JaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzKSB8fAotCSAgICBnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2x2Yl9zaXplID49Ci0JCQkJICBHRlMyX01JTl9MVkJfU0laRSkpIHsKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKLQkJZ290byBvdXQ7CisJZm9yIChvcHRpb25zID0gYXJncy0+YXJfaG9zdGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7CisJCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW4sIG9wdGlvbjsKKworCQlpZiAoIW8gfHwgISpvKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihvLCAqbG0tPmxtX3Rva2VucywgdG1wKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9qaWQ6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IG9wdGlvbiA8IDApIAorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfamlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2lkOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZpcnN0OgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCAob3B0aW9uICE9IDAgJiYgb3B0aW9uICE9IDEpKQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfZmlyc3QgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9kaXI6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IChvcHRpb24gIT0gMCAmJiBvcHRpb24gIT0gMSkpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19ub2RpciA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9lcnI6CisJCWRlZmF1bHQ6Citob3N0ZGF0YV9lcnJvcjoKKwkJCWZzX2luZm8oc2RwLCAidW5rbm93biBob3N0ZGF0YSAoJXMpXG4iLCBvKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCkBAIC0xMDc3LDIyICsxMTI2LDI1IEBACiAJCXNucHJpbnRmKHNkcC0+c2RfZnNuYW1lLCBHRlMyX0ZTTkFNRV9MRU4sICIlcy4ldSIsIHRhYmxlLAogCQkJIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOwogCi0JZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKLQotCWlmICgoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ZsYWdzICYgTE1fTFNGTEFHX0xPQ0FMKSAmJgotCSAgICAhc2RwLT5zZF9hcmdzLmFyX2lnbm9yZV9sb2NhbF9mcykgewotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOwotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKKwlmc25hbWUgPSBzdHJjaHIodGFibGUsICc6Jyk7CisJaWYgKGZzbmFtZSkKKwkJZnNuYW1lKys7CisJaWYgKGxtLT5sbV9tb3VudCA9PSBOVUxMKSB7CisJCWZzX2luZm8oc2RwLCAiTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCi1vdXQ6Ci0JcmV0dXJuIGVycm9yOworCXJldCA9IGxtLT5sbV9tb3VudChzZHAsIGZzbmFtZSk7CisJaWYgKHJldCA9PSAwKQorCQlmc19pbmZvKHNkcCwgIkpvaW5lZCBjbHVzdGVyLiBOb3cgbW91bnRpbmcgRlMuLi5cbiIpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzOworCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSAmJgorCSAgICBsbS0+bG1fdW5tb3VudCkKKwkJbG0tPmxtX3VubW91bnQoc2RwKTsKIH0KIAogLyoqCkBAIC0xMTE2LDEyICsxMTY4LDIwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgKGNoYXIgKilkYXRhLCAwKTsKKwlzZHAtPnNkX2FyZ3MuYXJfcXVvdGEgPSBHRlMyX1FVT1RBX0RFRkFVTFQ7CisJc2RwLT5zZF9hcmdzLmFyX2RhdGEgPSBHRlMyX0RBVEFfREVGQVVMVDsKKworCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJnNkcC0+c2RfYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGNhbid0IHBhcnNlIG1vdW50IGFyZ3VtZW50c1xuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKKyAgICAgICAgICAgICAgICBzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCisJCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworCiAJc2ItPnNfbWFnaWMgPSBHRlMyX01BR0lDOwogCXNiLT5zX29wID0gJmdmczJfc3VwZXJfb3BzOwogCXNiLT5zX2V4cG9ydF9vcCA9ICZnZnMyX2V4cG9ydF9vcHM7CkBAIC0xMTk5LDYgKzEyNTksOCBAQAogCQlkcHV0KHNkcC0+c2Rfcm9vdF9kaXIpOwogCWlmIChzZHAtPnNkX21hc3Rlcl9kaXIpCiAJCWRwdXQoc2RwLT5zZF9tYXN0ZXJfZGlyKTsKKwlpZiAoc2ItPnNfcm9vdCkKKwkJZHB1dChzYi0+c19yb290KTsKIAlzYi0+c19yb290ID0gTlVMTDsKIGZhaWxfbG9ja2luZzoKIAlpbml0X2xvY2tpbmcoc2RwLCAmbW91bnRfZ2gsIFVORE8pOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggNDk4Nzc1NC4uYWJkNTQyOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX3N1cGVyLmMgYi9mcy9nZnMyL29wc19zdXBlci5jCmluZGV4IDMyMDMyM2QuLjQ1ODAxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTI3LDcgKzI2LDYgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAibG9nLmgiCi0jaW5jbHVkZSAibW91bnQuaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInJlY292ZXJ5LmgiCiAjaW5jbHVkZSAicmdycC5oIgpAQCAtNDAsNiArMzgsOCBAQAogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJtZXRhX2lvLmgiCiAKKyNkZWZpbmUgYXJnc19uZXEoYTEsIGEyLCB4KSAoKGExKS0+YXJfIyN4ICE9IChhMiktPmFyXyMjeCkKKwogLyoqCiAgKiBnZnMyX3dyaXRlX2lub2RlIC0gTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBzdGFibGUgb24gdGhlIGRpc2sKICAqIEBpbm9kZTogVGhlIGlub2RlCkBAIC00MzUsMjUgKzQzNSw0NSBAQAogc3RhdGljIGludCBnZnMyX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IGdmczJfYXJncyBhcmdzID0gc2RwLT5zZF9hcmdzOyAvKiBEZWZhdWx0IHRvIGN1cnJlbnQgc2V0dGluZ3MgKi8KIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsIGRhdGEsIDEpOworCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJmFyZ3MsIGRhdGEpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJLyogTm90IGFsbG93ZWQgdG8gY2hhbmdlIGxvY2tpbmcgZGV0YWlscyAqLworCWlmIChzdHJjbXAoYXJncy5hcl9sb2NrcHJvdG8sIHNkcC0+c2RfYXJncy5hcl9sb2NrcHJvdG8pIHx8CisJICAgIHN0cmNtcChhcmdzLmFyX2xvY2t0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2xvY2t0YWJsZSkgfHwKKwkgICAgc3RyY21wKGFyZ3MuYXJfaG9zdGRhdGEsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU29tZSBmbGFncyBtdXN0IG5vdCBiZSBjaGFuZ2VkICovCisJaWYgKGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBzcGVjdGF0b3IpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBpZ25vcmVfbG9jYWxfZnMpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBsb2NhbGZsb2NrcykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGxvY2FsY2FjaGluZykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIG1ldGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQogCQkqZmxhZ3MgfD0gTVNfUkRPTkxZOwotCWVsc2UgewotCQlpZiAoKmZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCi0JCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcm8oc2RwKTsKLQkJfSBlbHNlIGlmICghKCpmbGFncyAmIE1TX1JET05MWSkgJiYKLQkJCSAgIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKworCWlmICgoc2ItPnNfZmxhZ3MgXiAqZmxhZ3MpICYgTVNfUkRPTkxZKSB7CisJCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpCisJCQllcnJvciA9IGdmczJfbWFrZV9mc19ybyhzZHApOworCQllbHNlCiAJCQllcnJvciA9IGdmczJfbWFrZV9mc19ydyhzZHApOwotCQl9CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJc2RwLT5zZF9hcmdzID0gYXJnczsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisJZWxzZQorCQlzYi0+c19mbGFncyAmPSB+TVNfUE9TSVhBQ0w7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNTg4LDYgKzYwOCw4IEBACiAJCX0KIAkJc2VxX3ByaW50ZihzLCAiLGRhdGE9JXMiLCBzdGF0ZSk7CiAJfQorCWlmIChhcmdzLT5hcl9kaXNjYXJkKQorCQlzZXFfcHJpbnRmKHMsICIsZGlzY2FyZCIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggYjA4ZDA5Ni4uOGQ1M2Y2NiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCkBAIC04MCw2ICs3OSw1MSBAQAogCXUzMiBxY19pZDsKIH07CiAKK3N0YXRpYyBMSVNUX0hFQUQocWRfbHJ1X2xpc3QpOworc3RhdGljIGF0b21pY190IHFkX2xydV9jb3VudCA9IEFUT01JQ19JTklUKDApOworc3RhdGljIHNwaW5sb2NrX3QgcWRfbHJ1X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK2ludCBnZnMyX3Nocmlua19xZF9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcDsKKworCWlmIChuciA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQorCQlyZXR1cm4gLTE7CisKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKKwl3aGlsZSAobnIgJiYgIWxpc3RfZW1wdHkoJnFkX2xydV9saXN0KSkgeworCQlxZCA9IGxpc3RfZW50cnkocWRfbHJ1X2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9yZWNsYWltKTsKKwkJc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CisKKwkJLyogRnJlZSBmcm9tIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGxpc3QgKi8KKwkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKKworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOworCisJCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7CisJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOworCisJCS8qIERlbGV0ZSBpdCBmcm9tIHRoZSBjb21tb24gcmVjbGFpbSBsaXN0ICovCisJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKwkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKKwkJbnItLTsKKwl9CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKworb3V0OgorCXJldHVybiAoYXRvbWljX3JlYWQoJnFkX2xydV9jb3VudCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlKSAvIDEwMDsKK30KKwogc3RhdGljIHU2NCBxZDJvZmZzZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJdTY0IG9mZnNldDsKQEAgLTEwMCwyMiArMTQ0LDE4IEBACiAJaWYgKCFxZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlxZC0+cWRfY291bnQgPSAxOworCWF0b21pY19zZXQoJnFkLT5xZF9jb3VudCwgMSk7CiAJcWQtPnFkX2lkID0gaWQ7CiAJaWYgKHVzZXIpCiAJCXNldF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpOwogCXFkLT5xZF9zbG90ID0gLTE7CisJSU5JVF9MSVNUX0hFQUQoJnFkLT5xZF9yZWNsYWltKTsKIAogCWVycm9yID0gZ2ZzMl9nbG9ja19nZXQoc2RwLCAyICogKHU2NClpZCArICF1c2VyLAogCQkJICAgICAgJmdmczJfcXVvdGFfZ2xvcHMsIENSRUFURSwgJnFkLT5xZF9nbCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CiAKLQllcnJvciA9IGdmczJfbHZiX2hvbGQocWQtPnFkX2dsKTsKLQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOwotCWlmIChlcnJvcikKLQkJZ290byBmYWlsOwotCiAJKnFkcCA9IHFkOwogCiAJcmV0dXJuIDA7CkBAIC0xMzUsMTEgKzE3NSwxNyBAQAogCiAJZm9yICg7OykgewogCQlmb3VuZCA9IDA7Ci0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocWQsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKIAkJCWlmIChxZC0+cWRfaWQgPT0gaWQgJiYKIAkJCSAgICAhdGVzdF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpID09ICF1c2VyKSB7Ci0JCQkJcWQtPnFkX2NvdW50Kys7CisJCQkJaWYgKCFhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSAmJgorCQkJCSAgICAhbGlzdF9lbXB0eSgmcWQtPnFkX3JlY2xhaW0pKSB7CisJCQkJCS8qIFJlbW92ZSBpdCBmcm9tIHJlY2xhaW0gbGlzdCAqLworCQkJCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCQkJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCQkJfQorCQkJCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTU1LDExICsyMDEsMTEgQEAKIAkJCW5ld19xZCA9IE5VTEw7CiAJCX0KIAotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQlpZiAocWQgfHwgIWNyZWF0ZSkgewogCQkJaWYgKG5ld19xZCkgewotCQkJCWdmczJfbHZiX3VuaG9sZChuZXdfcWQtPnFkX2dsKTsKKwkJCQlnZnMyX2dsb2NrX3B1dChuZXdfcWQtPnFkX2dsKTsKIAkJCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBuZXdfcWQpOwogCQkJfQogCQkJKnFkcCA9IHFkOwpAQCAtMTc1LDIxICsyMjEsMTggQEAKIHN0YXRpYyB2b2lkIHFkX2hvbGQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9jb3VudCk7Ci0JcWQtPnFkX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJZ2ZzMl9hc3NlcnQoc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIH0KIAogc3RhdGljIHZvaWQgcWRfcHV0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7Ci0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX2NvdW50KTsKLQlpZiAoIS0tcWQtPnFkX2NvdW50KQotCQlxZC0+cWRfbGFzdF90b3VjaGVkID0gamlmZmllczsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmcWQtPnFkX2NvdW50LCAmcWRfbHJ1X2xvY2spKSB7CisJCS8qIEFkZCB0byB0aGUgcmVjbGFpbSBsaXN0ICovCisJCWxpc3RfYWRkX3RhaWwoJnFkLT5xZF9yZWNsYWltLCAmcWRfbHJ1X2xpc3QpOworCQlhdG9taWNfaW5jKCZxZF9scnVfY291bnQpOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCX0KIH0KIAogc3RhdGljIGludCBzbG90X2dldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKQEAgLTE5OCwxMCArMjQxLDEwIEBACiAJdW5zaWduZWQgaW50IGMsIG8gPSAwLCBiOwogCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAocWQtPnFkX3Nsb3RfY291bnQrKykgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjUsMTMgKzI2OCwxMyBAQAogCiAJc2RwLT5zZF9xdW90YV9iaXRtYXBbY11bb10gfD0gMSA8PCBiOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCXJldHVybiAwOwogCiBmYWlsOgogCXFkLT5xZF9zbG90X2NvdW50LS07Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIApAQCAtMjM5LDIzICsyODIsMjMgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCXFkLT5xZF9zbG90X2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc2xvdF9wdXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlpZiAoIS0tcWQtPnFkX3Nsb3RfY291bnQpIHsKIAkJZ2ZzMl9pY2JpdF9tdW5nZShzZHAsIHNkcC0+c2RfcXVvdGFfYml0bWFwLCBxZC0+cWRfc2xvdCwgMCk7CiAJCXFkLT5xZF9zbG90ID0gLTE7CiAJfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYmhfZ2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQpAQCAtMzMwLDcgKzM3Myw3IEBACiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocWQsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKIAkJaWYgKHRlc3RfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpIHx8CkBAIC0zNDEsOCArMzg0LDggQEAKIAkJbGlzdF9tb3ZlX3RhaWwoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAogCQlzZXRfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NvdW50KTsKLQkJcWQtPnFkX2NvdW50Kys7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJCXFkLT5xZF9jaGFuZ2Vfc3luYyA9IHFkLT5xZF9jaGFuZ2U7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJCXFkLT5xZF9zbG90X2NvdW50Kys7CkBAIC0zNTQsNyArMzk3LDcgQEAKIAlpZiAoIWZvdW5kKQogCQlxZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHFkKSB7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY2hhbmdlX3N5bmMpOwpAQCAtMzc5LDI0ICs0MjIsMjQgQEAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHRlc3RfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpIHx8CiAJICAgICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJbGlzdF9tb3ZlX3RhaWwoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAogCXNldF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncyk7Ci0JZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jb3VudCk7Ci0JcWQtPnFkX2NvdW50Kys7CisJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCXFkLT5xZF9jaGFuZ2Vfc3luYyA9IHFkLT5xZF9jaGFuZ2U7CiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlxZC0+cWRfc2xvdF9jb3VudCsrOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY2hhbmdlX3N5bmMpOwogCWlmIChiaF9nZXQocWQpKSB7CkBAIC01NTYsOSArNTk5LDkgQEAKIAl4ID0gYmU2NF90b19jcHUocWMtPnFjX2NoYW5nZSkgKyBjaGFuZ2U7CiAJcWMtPnFjX2NoYW5nZSA9IGNwdV90b19iZTY0KHgpOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXFkLT5xZF9jaGFuZ2UgPSB4OwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAoIXgpIHsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKTsKQEAgLTgwMiw4ICs4NDUsOCBAQAogCQlsb2ZmX3QgcG9zOwogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdChxX2doKTsKIAkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocWQtPnFkX2dsLAotCQkJCQkgIExNX1NUX0VYQ0xVU0lWRSwgR0xfTk9DQUNIRSwKLQkJCQkJICBxX2doKTsKKwkJCQkJICAgTE1fU1RfRVhDTFVTSVZFLCBHTF9OT0NBQ0hFLAorCQkJCQkgICBxX2doKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCkBAIC04MjAsNyArODYzLDYgQEAKIAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CiAKLQogCQlnZnMyX3F1b3RhX2luKCZxLCBidWYpOwogCQlxbHZiID0gKHN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqKXFkLT5xZF9nbC0+Z2xfbHZiOwogCQlxbHZiLT5xYl9tYWdpYyA9IGNwdV90b19iZTMyKEdGUzJfTUFHSUMpOwpAQCAtODkwLDkgKzkzMiw5IEBACiAJaWYgKCFxZC0+cWRfcWIucWJfbGltaXQpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXZhbHVlID0gcWQtPnFkX2NoYW5nZTsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJc3Bpbl9sb2NrKCZndC0+Z3Rfc3Bpbik7CiAJbnVtID0gZ3QtPmd0X3F1b3RhX3NjYWxlX251bTsKQEAgLTk4NSw5ICsxMDI3LDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXZhbHVlID0gKHM2NCliZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfdmFsdWUpOwotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQl2YWx1ZSArPSBxZC0+cWRfY2hhbmdlOwotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQlpZiAoYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSAmJiAoczY0KWJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkgPCB2YWx1ZSkgewogCQkJcHJpbnRfbWVzc2FnZShxZCwgImV4Y2VlZGVkIik7CkBAIC0xMTcxLDEzICsxMjEzLDEyIEBACiAJCQlxZC0+cWRfY2hhbmdlID0gcWMucWNfY2hhbmdlOwogCQkJcWQtPnFkX3Nsb3QgPSBzbG90OwogCQkJcWQtPnFkX3Nsb3RfY291bnQgPSAxOwotCQkJcWQtPnFkX2xhc3RfdG91Y2hlZCA9IGppZmZpZXM7CiAKLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQkJZ2ZzMl9pY2JpdF9tdW5nZShzZHAsIHNkcC0+c2RfcXVvdGFfYml0bWFwLCBzbG90LCAxKTsKIAkJCWxpc3RfYWRkKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAJCQlhdG9taWNfaW5jKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQkJZm91bmQrKzsKIAkJfQpAQCAtMTE5Nyw3MyArMTIzOCw0OCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9xdW90YV9zY2FuKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkLCAqc2FmZTsKLQlMSVNUX0hFQUQoZGVhZCk7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHFkLCBzYWZlLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7Ci0JCWlmICghcWQtPnFkX2NvdW50ICYmCi0JCSAgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHFkLT5xZF9sYXN0X3RvdWNoZWQgKwotCQkJICAgICAgICBnZnMyX3R1bmVfZ2V0KHNkcCwgZ3RfcXVvdGFfY2FjaGVfc2VjcykgKiBIWikpIHsKLQkJCWxpc3RfbW92ZSgmcWQtPnFkX2xpc3QsICZkZWFkKTsKLQkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLAotCQkJCQkgYXRvbWljX3JlYWQoJnNkcC0+c2RfcXVvdGFfY291bnQpID4gMCk7Ci0JCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZGVhZCkpIHsKLQkJcWQgPSBsaXN0X2VudHJ5KGRlYWQubmV4dCwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfbGlzdCk7Ci0JCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7Ci0KLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKLQotCQlnZnMyX2x2Yl91bmhvbGQocWQtPnFkX2dsKTsKLQkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOwotCX0KLX0KLQogdm9pZCBnZnMyX3F1b3RhX2NsZWFudXAoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZzZHAtPnNkX3F1b3RhX2xpc3Q7CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CiAJdW5zaWduZWQgaW50IHg7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCXFkID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9saXN0KTsKIAotCQlpZiAocWQtPnFkX2NvdW50ID4gMSB8fAotCQkgICAgKHFkLT5xZF9jb3VudCAmJiAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSA+IDEgfHwKKwkJICAgIChhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSAmJgorCQkgICAgICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkpIHsKIAkJCWxpc3RfbW92ZSgmcWQtPnFkX2xpc3QsIGhlYWQpOwotCQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQkJc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAogCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOworCQkvKiBBbHNvIHJlbW92ZSBpZiB0aGlzIHFkIGV4aXN0cyBpbiB0aGUgcmVjbGFpbSBsaXN0ICovCisJCWlmICghbGlzdF9lbXB0eSgmcWQtPnFkX3JlY2xhaW0pKSB7CisJCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQl9CiAJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAotCQlpZiAoIXFkLT5xZF9jb3VudCkgeworCQlpZiAoIWF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKSB7CiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOwogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7CiAJCX0gZWxzZQogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50ID09IDEpOwogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7CiAKLQkJZ2ZzMl9sdmJfdW5ob2xkKHFkLT5xZF9nbCk7CisJCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7CiAJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKIAotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFhdG9taWNfcmVhZCgmc2RwLT5zZF9xdW90YV9jb3VudCkpOwogCkBAIC0xMzQxLDkgKzEzNTcsNiBAQAogCQlxdW90YWRfY2hlY2tfdGltZW8oc2RwLCAic3luYyIsIGdmczJfcXVvdGFfc3luYywgdCwKIAkJCQkgICAmcXVvdGFkX3RpbWVvLCAmdHVuZS0+Z3RfcXVvdGFfcXVhbnR1bSk7CiAKLQkJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIHR1cm5lZCBpbnRvIGEgc2hyaW5rZXIgKi8KLQkJZ2ZzMl9xdW90YV9zY2FuKHNkcCk7Ci0KIAkJLyogQ2hlY2sgZm9yICYgcmVjb3ZlciBwYXJ0aWFsbHkgdHJ1bmNhdGVkIGlub2RlcyAqLwogCQlxdW90YWRfY2hlY2tfdHJ1bmNfbGlzdChzZHApOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmggYi9mcy9nZnMyL3F1b3RhLmgKaW5kZXggY2VjOTAzMi4uMGZhNWZhNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5oCisrKyBiL2ZzL2dmczIvcXVvdGEuaApAQCAtNDksNCArNDksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2V4dGVybiBpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spOworCiAjZW5kaWYgLyogX19RVU9UQV9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JlY292ZXJ5LmMgYi9mcy9nZnMyL3JlY292ZXJ5LmMKaW5kZXggZWZkMDljMy4uMjQ3ZThmNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKQEAgLTQyNywyMCArNDI2LDIzIEBACiB9CiAKIAotc3RhdGljIHZvaWQgZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkLAotCQkJCSAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCitzdGF0aWMgdm9pZCBnZnMyX3JlY292ZXJ5X2RvbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCiB7Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9yZWNvdmVyeV9kb25lKQotCQlyZXR1cm47Ci0KLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3JlY292ZXJ5X2RvbmUoCi0JCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBqaWQsIG1lc3NhZ2UpOworCWNoYXIgZW52X2ppZFsyMF07CisJY2hhciBlbnZfc3RhdHVzWzIwXTsKKwljaGFyICplbnZwW10gPSB7IGVudl9qaWQsIGVudl9zdGF0dXMsIE5VTEwgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworICAgICAgICBscy0+bHNfcmVjb3Zlcl9qaWRfZG9uZSA9IGppZDsKKyAgICAgICAgbHMtPmxzX3JlY292ZXJfamlkX3N0YXR1cyA9IG1lc3NhZ2U7CisJc3ByaW50ZihlbnZfamlkLCAiSklEPSVkIiwgamlkKTsKKwlzcHJpbnRmKGVudl9zdGF0dXMsICJSRUNPVkVSWT0lcyIsCisJCW1lc3NhZ2UgPT0gTE1fUkRfU1VDQ0VTUyA/ICJEb25lIiA6ICJGYWlsZWQiKTsKKyAgICAgICAga29iamVjdF91ZXZlbnRfZW52KCZzZHAtPnNkX2tvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KIAotCiAvKioKLSAqIGdmczJfcmVjb3Zlcl9qb3VybmFsIC0gcmVjb3ZlcnkgYSBnaXZlbiBqb3VybmFsCisgKiBnZnMyX3JlY292ZXJfam91cm5hbCAtIHJlY292ZXIgYSBnaXZlbiBqb3VybmFsCiAgKiBAamQ6IHRoZSBzdHJ1Y3QgZ2ZzMl9qZGVzYyBkZXNjcmliaW5nIHRoZSBqb3VybmFsCiAgKgogICogQWNxdWlyZSB0aGUgam91cm5hbCdzIGxvY2ssIGNoZWNrIHRvIHNlZSBpZiB0aGUgam91cm5hbCBpcyBjbGVhbiwgYW5kCkBAIC01NjEsNyArNTYzLDcgQEAKIAlpZiAoamQtPmpkX2ppZCAhPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCi0JZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfU1VDQ0VTUyk7CisJZ2ZzMl9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfU1VDQ0VTUyk7CiAKIAlpZiAoamQtPmpkX2ppZCAhPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmal9naCk7CkBAIC01ODEsNyArNTgzLDcgQEAKIAlmc19pbmZvKHNkcCwgImppZD0ldTogJXNcbiIsIGpkLT5qZF9qaWQsIChlcnJvcikgPyAiRmFpbGVkIiA6ICJEb25lIik7CiAKIGZhaWw6Ci0JZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfR0FWRVVQKTsKKwlnZnMyX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9HQVZFVVApOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCA4YjAxYzYzLi5mMDNkMDI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtMTMsOCArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0xMzIsODEgKzEzMiw5MCBAQAogfQogCiAvKioKKyAqIGdmczJfYml0X3NlYXJjaAorICogQHB0cjogUG9pbnRlciB0byBiaXRtYXAgZGF0YQorICogQG1hc2s6IE1hc2sgdG8gdXNlIChub3JtYWxseSAweDU1NTU1Li4uLiBidXQgYWRqdXN0ZWQgZm9yIHNlYXJjaCBzdGFydCkKKyAqIEBzdGF0ZTogVGhlIHN0YXRlIHdlIGFyZSBzZWFyY2hpbmcgZm9yCisgKgorICogV2UgeG9yIHRoZSBiaXRtYXAgZGF0YSB3aXRoIGEgcGF0dGVyIHdoaWNoIGlzIHRoZSBiaXR3aXNlIG9wcG9zaXRlCisgKiBvZiB3aGF0IHdlIGFyZSBsb29raW5nIGZvciwgdGhpcyBnaXZlcyByaXNlIHRvIGEgcGF0dGVybiBvZiBvbmVzCisgKiB3aGVyZXZlciB0aGVyZSBpcyBhIG1hdGNoLiBTaW5jZSB3ZSBoYXZlIHR3byBiaXRzIHBlciBlbnRyeSwgd2UKKyAqIHRha2UgdGhpcyBwYXR0ZXJuLCBzaGlmdCBpdCBkb3duIGJ5IG9uZSBwbGFjZSBhbmQgdGhlbiBhbmQgaXQgd2l0aAorICogdGhlIG9yaWdpbmFsLiBBbGwgdGhlIGV2ZW4gYml0IHBvc2l0aW9ucyAoMCwyLDQsIGV0YykgdGhlbiByZXByZXNlbnQKKyAqIHN1Y2Nlc3NmdWwgbWF0Y2hlcywgc28gd2UgbWFzayB3aXRoIDB4NTU1NTUuLi4uLiB0byByZW1vdmUgdGhlIHVud2FudGVkCisgKiBvZGQgYml0IHBvc2l0aW9ucy4KKyAqCisgKiBUaGlzIGFsbG93cyBzZWFyY2hpbmcgb2YgYSB3aG9sZSB1NjQgYXQgb25jZSAoMzIgYmxvY2tzKSB3aXRoIGEKKyAqIHNpbmdsZSB0ZXN0IChvbiA2NCBiaXQgYXJjaGVzKS4KKyAqLworCitzdGF0aWMgaW5saW5lIHU2NCBnZnMyX2JpdF9zZWFyY2goY29uc3QgX19sZTY0ICpwdHIsIHU2NCBtYXNrLCB1OCBzdGF0ZSkKK3sKKwl1NjQgdG1wOworCXN0YXRpYyBjb25zdCB1NjQgc2VhcmNoW10gPSB7CisJCVswXSA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCwKKwkJWzFdID0gMHhhYWFhYWFhYWFhYWFhYWFhVUxMLAorCQlbMl0gPSAweDU1NTU1NTU1NTU1NTU1NTVVTEwsCisJCVszXSA9IDB4MDAwMDAwMDAwMDAwMDAwMFVMTCwKKwl9OworCXRtcCA9IGxlNjRfdG9fY3B1KCpwdHIpIF4gc2VhcmNoW3N0YXRlXTsKKwl0bXAgJj0gKHRtcCA+PiAxKTsKKwl0bXAgJj0gbWFzazsKKwlyZXR1cm4gdG1wOworfQorCisvKioKICAqIGdmczJfYml0Zml0IC0gU2VhcmNoIGFuIHJncnAncyBiaXRtYXAgYnVmZmVyIHRvIGZpbmQgYSBiaXQtcGFpciByZXByZXNlbnRpbmcKICAqICAgICAgIGEgYmxvY2sgaW4gYSBnaXZlbiBhbGxvY2F0aW9uIHN0YXRlLgogICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSBiaXRtYXBzCi0gKiBAYnVmbGVuOiB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGJ1ZmZlcgorICogQGxlbjogdGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBidWZmZXIKICAqIEBnb2FsOiBzdGFydCBzZWFyY2ggYXQgdGhpcyBibG9jaydzIGJpdC1wYWlyICh3aXRoaW4gQGJ1ZmZlcikKLSAqIEBvbGRfc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgd2UncmUgbG9va2luZyBmb3IuCisgKiBAc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgd2UncmUgbG9va2luZyBmb3IuCiAgKgogICogU2NvcGUgb2YgQGdvYWwgYW5kIHJldHVybmVkIGJsb2NrIG51bWJlciBpcyBvbmx5IHdpdGhpbiB0aGlzIGJpdG1hcCBidWZmZXIsCiAgKiBub3QgZW50aXJlIHJncnAgb3IgZmlsZXN5c3RlbS4gIEBidWZmZXIgd2lsbCBiZSBvZmZzZXQgZnJvbSB0aGUgYWN0dWFsCi0gKiBiZWdpbm5pbmcgb2YgYSBiaXRtYXAgYmxvY2sgYnVmZmVyLCBza2lwcGluZyBhbnkgaGVhZGVyIHN0cnVjdHVyZXMuCisgKiBiZWdpbm5pbmcgb2YgYSBiaXRtYXAgYmxvY2sgYnVmZmVyLCBza2lwcGluZyBhbnkgaGVhZGVyIHN0cnVjdHVyZXMsIGJ1dAorICogaGVhZGVycyBhcmUgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNjQgYml0cyBsb25nIHNvIHRoYXQgdGhlIGJ1ZmZlciBpcworICogYWx3YXlzIGFsaWduZWQgdG8gYSA2NCBiaXQgYm91bmRhcnkuCisgKgorICogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBpbiBieXRlcywgYnV0IGlzIGl0IGFzc3VtZWQgdGhhdCBpdCBpcworICogYWx3YXlzIG9rIHRvIHRvIHJlYWQgYSBjb21wbGV0ZSBtdWx0aXBsZSBvZiA2NCBiaXRzIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBibG9jayBpbiBjYXNlIHRoZSBlbmQgaXMgbm8gYWxpZ25lZCB0byBhIG5hdHVyYWwgYm91bmRhcnkuCiAgKgogICogUmV0dXJuOiB0aGUgYmxvY2sgbnVtYmVyIChiaXRtYXAgYnVmZmVyIHNjb3BlKSB0aGF0IHdhcyBmb3VuZAogICovCiAKLXN0YXRpYyB1MzIgZ2ZzMl9iaXRmaXQoY29uc3QgdTggKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGdvYWwsCi0JCSAgICAgICB1OCBvbGRfc3RhdGUpCitzdGF0aWMgdTMyIGdmczJfYml0Zml0KGNvbnN0IHU4ICpidWYsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4sCisJCSAgICAgICB1MzIgZ29hbCwgdTggc3RhdGUpCiB7Ci0JY29uc3QgdTggKmJ5dGUsICpzdGFydCwgKmVuZDsKLQlpbnQgYml0LCBzdGFydGJpdDsKLQl1MzIgZzEsIGcyLCBtaXNhbGlnbmVkOwotCXVuc2lnbmVkIGxvbmcgKnBsb25nOwotCXVuc2lnbmVkIGxvbmcgbHNraXB2YWw7CisJdTMyIHNwb2ludCA9IChnb2FsIDw8IDEpICYgKCg4KnNpemVvZih1NjQpKSAtIDEpOworCWNvbnN0IF9fbGU2NCAqcHRyID0gKChfX2xlNjQgKilidWYpICsgKGdvYWwgPj4gNSk7CisJY29uc3QgX19sZTY0ICplbmQgPSAoX19sZTY0ICopKGJ1ZiArIEFMSUdOKGxlbiwgc2l6ZW9mKHU2NCkpKTsKKwl1NjQgdG1wOworCXU2NCBtYXNrID0gMHg1NTU1NTU1NTU1NTU1NTU1VUxMOworCXUzMiBiaXQ7CiAKLQlsc2tpcHZhbCA9IChvbGRfc3RhdGUgJiBHRlMyX0JMS1NUX1VTRUQpID8gTEJJVFNLSVAwMCA6IExCSVRTS0lQNTU7Ci0JZzEgPSAoZ29hbCAvIEdGUzJfTkJCWSk7Ci0Jc3RhcnQgPSBidWZmZXIgKyBnMTsKLQlieXRlID0gc3RhcnQ7Ci0gICAgICAgIGVuZCA9IGJ1ZmZlciArIGJ1ZmxlbjsKLQlnMiA9IEFMSUdOKGcxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKikoYnVmZmVyICsgZzIpOwotCXN0YXJ0Yml0ID0gYml0ID0gKGdvYWwgJSBHRlMyX05CQlkpICogR0ZTMl9CSVRfU0laRTsKLQltaXNhbGlnbmVkID0gZzIgLSBnMTsKLQlpZiAoIW1pc2FsaWduZWQpCi0JCWdvdG8gdWxvbmdfYWxpZ25lZDsKLS8qIHBhcnNlIHRoZSBiaXRtYXAgYSBieXRlIGF0IGEgdGltZSAqLwotbWlzYWxpZ25lZDoKLQl3aGlsZSAoYnl0ZSA8IGVuZCkgewotCQlpZiAoKCgqYnl0ZSA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSykgPT0gb2xkX3N0YXRlKSB7Ci0JCQlyZXR1cm4gZ29hbCArCi0JCQkJKCgoYnl0ZSAtIHN0YXJ0KSAqIEdGUzJfTkJCWSkgKwotCQkJCSAoKGJpdCAtIHN0YXJ0Yml0KSA+PiAxKSk7Ci0JCX0KLQkJYml0ICs9IEdGUzJfQklUX1NJWkU7Ci0JCWlmIChiaXQgPj0gR0ZTMl9OQkJZICogR0ZTMl9CSVRfU0laRSkgewotCQkJYml0ID0gMDsKLQkJCWJ5dGUrKzsKLQkJCW1pc2FsaWduZWQtLTsKLQkJCWlmICghbWlzYWxpZ25lZCkgewotCQkJCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKilieXRlOwotCQkJCWdvdG8gdWxvbmdfYWxpZ25lZDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gQkZJVE5PRU5UOworCUJVR19PTihzdGF0ZSA+IDMpOwogCi0vKiBwYXJzZSB0aGUgYml0bWFwIGEgdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUgKi8KLXVsb25nX2FsaWduZWQ6Ci0JLyogU3RvcCBhdCAiZW5kIC0gMSIgb3IgZWxzZSBwcmVmZXRjaCBjYW4gZ28gcGFzdCB0aGUgZW5kIGFuZCBzZWdmYXVsdC4KLQkgICBXZSBjb3VsZCAiaWYiIGl0IGJ1dCB3ZSdkIGxvc2Ugc29tZSBvZiB0aGUgcGVyZm9ybWFuY2UgZ2FpbmVkLgotCSAgIFRoaXMgd2F5IHdpbGwgb25seSBzbG93IGRvd24gc2VhcmNoaW5nIHRoZSB2ZXJ5IGxhc3QgNC84IGJ5dGVzCi0JICAgZGVwZW5kaW5nIG9uIGFyY2hpdGVjdHVyZS4gIEkndmUgZXhwZXJpbWVudGVkIHdpdGggc2V2ZXJhbCB3YXlzCi0JICAgb2Ygd3JpdGluZyB0aGlzIHNlY3Rpb24gc3VjaCBhcyB1c2luZyBhbiBlbHNlIGJlZm9yZSB0aGUgZ290bwotCSAgIGJ1dCB0aGlzIG9uZSBzZWVtcyB0byBiZSB0aGUgZmFzdGVzdC4gKi8KLQl3aGlsZSAoKHVuc2lnbmVkIGNoYXIgKilwbG9uZyA8IGVuZCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgewotCQlwcmVmZXRjaChwbG9uZyArIDEpOwotCQlpZiAoKCgqcGxvbmcpICYgTEJJVE1BU0spICE9IGxza2lwdmFsKQotCQkJYnJlYWs7Ci0JCXBsb25nKys7CisJLyogTWFzayBvZmYgYml0cyB3ZSBkb24ndCBjYXJlIGFib3V0IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VhcmNoICovCisJbWFzayA8PD0gc3BvaW50OworCXRtcCA9IGdmczJfYml0X3NlYXJjaChwdHIsIG1hc2ssIHN0YXRlKTsKKwlwdHIrKzsKKwl3aGlsZSh0bXAgPT0gMCAmJiBwdHIgPCBlbmQpIHsKKwkJdG1wID0gZ2ZzMl9iaXRfc2VhcmNoKHB0ciwgMHg1NTU1NTU1NTU1NTU1NTU1VUxMLCBzdGF0ZSk7CisJCXB0cisrOwogCX0KLQlpZiAoKHVuc2lnbmVkIGNoYXIgKilwbG9uZyA8IGVuZCkgewotCQlieXRlID0gKGNvbnN0IHU4ICopcGxvbmc7Ci0JCW1pc2FsaWduZWQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMTsKLQkJZ290byBtaXNhbGlnbmVkOwotCX0KLQlyZXR1cm4gQkZJVE5PRU5UOworCS8qIE1hc2sgb2ZmIGFueSBiaXRzIHdoaWNoIGFyZSBtb3JlIHRoYW4gbGVuIGJ5dGVzIGZyb20gdGhlIHN0YXJ0ICovCisJaWYgKHB0ciA9PSBlbmQgJiYgKGxlbiAmIChzaXplb2YodTY0KSAtIDEpKSkKKwkJdG1wICY9ICgoKHU2NCl+MCkgPj4gKDY0IC0gOCoobGVuICYgKHNpemVvZih1NjQpIC0gMSkpKSk7CisJLyogRGlkbid0IGZpbmQgYW55dGhpbmcsIHNvIHJldHVybiAqLworCWlmICh0bXAgPT0gMCkKKwkJcmV0dXJuIEJGSVROT0VOVDsKKwlwdHItLTsKKwliaXQgPSBmbHM2NCh0bXApOworCWJpdC0tOwkJLyogZmxzNjQgYWx3YXlzIGFkZHMgb25lIHRvIHRoZSBiaXQgY291bnQgKi8KKwliaXQgLz0gMjsJLyogdHdvIGJpdHMgcGVyIGVudHJ5IGluIHRoZSBiaXRtYXAgKi8KKwlyZXR1cm4gKCgoY29uc3QgdW5zaWduZWQgY2hhciAqKXB0ciAtIGJ1ZikgKiBHRlMyX05CQlkpICsgYml0OwogfQogCiAvKioKQEAgLTgzMSw2ICs4NDAsNTggQEAKIAlzcGluX3VubG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfcmdycF9zZW5kX2Rpc2NhcmRzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgb2Zmc2V0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZ2ZzMl9iaXRtYXAgKmJpKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gc2ItPnNfYmRldjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2VjdHNfcGVyX2JsayA9IHNkcC0+c2Rfc2Iuc2JfYnNpemUgLworCQkJCQkgICBiZGV2X2hhcmRzZWN0X3NpemUoc2ItPnNfYmRldik7CisJdTY0IGJsazsKKwlzZWN0b3JfdCBzdGFydCA9IDA7CisJc2VjdG9yX3QgbnJfc2VjdHMgPSAwOworCWludCBydjsKKwl1bnNpZ25lZCBpbnQgeDsKKworCWZvciAoeCA9IDA7IHggPCBiaS0+YmlfbGVuOyB4KyspIHsKKwkJY29uc3QgdTggKm9yaWcgPSBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQgKyB4OworCQljb25zdCB1OCAqY2xvbmUgPSBiaS0+YmlfY2xvbmUgKyBiaS0+Ymlfb2Zmc2V0ICsgeDsKKwkJdTggZGlmZiA9IH4oKm9yaWcgfCAoKm9yaWcgPj4gMSkpICYgKCpjbG9uZSB8ICgqY2xvbmUgPj4gMSkpOworCQlkaWZmICY9IDB4NTU7CisJCWlmIChkaWZmID09IDApCisJCQljb250aW51ZTsKKwkJYmxrID0gb2Zmc2V0ICsgKChiaS0+Ymlfc3RhcnQgKyB4KSAqIEdGUzJfTkJCWSk7CisJCWJsayAqPSBzZWN0c19wZXJfYmxrOyAvKiBjb252ZXJ0IHRvIHNlY3RvcnMgKi8KKwkJd2hpbGUoZGlmZikgeworCQkJaWYgKGRpZmYgJiAxKSB7CisJCQkJaWYgKG5yX3NlY3RzID09IDApCisJCQkJCWdvdG8gc3RhcnRfbmV3X2V4dGVudDsKKwkJCQlpZiAoKHN0YXJ0ICsgbnJfc2VjdHMpICE9IGJsaykgeworCQkJCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LAorCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMpOworCQkJCQlpZiAocnYpCisJCQkJCQlnb3RvIGZhaWw7CisJCQkJCW5yX3NlY3RzID0gMDsKK3N0YXJ0X25ld19leHRlbnQ6CisJCQkJCXN0YXJ0ID0gYmxrOworCQkJCX0KKwkJCQlucl9zZWN0cyArPSBzZWN0c19wZXJfYmxrOworCQkJfQorCQkJZGlmZiA+Pj0gMjsKKwkJCWJsayArPSBzZWN0c19wZXJfYmxrOworCQl9CisJfQorCWlmIChucl9zZWN0cykgeworCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LCBucl9zZWN0cywgR0ZQX05PRlMpOworCQlpZiAocnYpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybjsKK2ZhaWw6CisJZnNfd2FybihzZHAsICJlcnJvciAlZCBvbiBkaXNjYXJkIHJlcXVlc3QsIHR1cm5pbmcgZGlzY2FyZHMgb2ZmIGZvciB0aGlzIGZpbGVzeXN0ZW0iLCBydik7CisJc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQgPSAwOworfQorCiB2b2lkIGdmczJfcmdycF9yZXBvbGlzaF9jbG9uZXMoc3RydWN0IGdmczJfcmdycGQgKnJnZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHJnZC0+cmRfc2JkOwpAQCAtODQxLDYgKzkwMiw4IEBACiAJCXN0cnVjdCBnZnMyX2JpdG1hcCAqYmkgPSByZ2QtPnJkX2JpdHMgKyB4OwogCQlpZiAoIWJpLT5iaV9jbG9uZSkKIAkJCWNvbnRpbnVlOworCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQpCisJCQlnZnMyX3JncnBfc2VuZF9kaXNjYXJkcyhzZHAsIHJnZC0+cmRfZGF0YTAsIGJpKTsKIAkJbWVtY3B5KGJpLT5iaV9jbG9uZSArIGJpLT5iaV9vZmZzZXQsCiAJCSAgICAgICBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQsIGJpLT5iaV9sZW4pOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCAxNDFiNzgxLi42MDE5MTNlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMzM5LDcgKzMzOCw2IEBACiAJCQkJICAgIHN0cnVjdCBnZnMyX2hvbGRlciAqdF9naCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGppX2doOwogCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKIAlzdHJ1Y3QgbGZjYyAqbGZjYzsKIAlMSVNUX0hFQUQobGlzdCk7CkBAIC0zODcsNyArMzg1LDYgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmxmY2MtPmdoKTsKIAkJa2ZyZWUobGZjYyk7CiAJfQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmggYi9mcy9nZnMyL3N1cGVyLmgKaW5kZXggZjZiOGIwMC4uOTFhYmRiZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5oCisrKyBiL2ZzL2dmczIvc3VwZXIuaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgImluY29yZS5oIgogCi12b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZnMyX2ppbmRleF9zaXplKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewpAQCAtMjcsMjEgKzI3LDIzIEBACiAKIHZvaWQgZ2ZzMl9qaW5kZXhfZnJlZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLXN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkZXNjX2ZpbmQoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpOwotaW50IGdmczJfamRlc2NfY2hlY2soc3RydWN0IGdmczJfamRlc2MgKmpkKTsKK2V4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpkYXRhKTsKIAotaW50IGdmczJfbG9va3VwX2luX21hc3Rlcl9kaXIoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZpbGVuYW1lLAotCQkJICAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOworZXh0ZXJuIHN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkZXNjX2ZpbmQoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpOworZXh0ZXJuIGludCBnZnMyX2pkZXNjX2NoZWNrKHN0cnVjdCBnZnMyX2pkZXNjICpqZCk7CiAKLWludCBnZnMyX21ha2VfZnNfcncoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX2xvb2t1cF9pbl9tYXN0ZXJfZGlyKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgIHN0cnVjdCBnZnMyX2lub2RlICoqaXBwKTsKIAotaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOwotdm9pZCBnZnMyX3N0YXRmc19jaGFuZ2Uoc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQlzNjQgdG90YWwsIHM2NCBmcmVlLCBzNjQgZGlub2Rlcyk7Ci1pbnQgZ2ZzMl9zdGF0ZnNfc3luYyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLWludCBnZnMyX2ZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci12b2lkIGdmczJfdW5mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX3N0YXRmc19pbml0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfc3RhdGZzX2NoYW5nZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgczY0IHRvdGFsLCBzNjQgZnJlZSwKKwkJCSAgICAgICBzNjQgZGlub2Rlcyk7CitleHRlcm4gaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworCitleHRlcm4gaW50IGdmczJfZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfdW5mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2ZzMl9mc190eXBlOwogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJtZXRhX2ZzX3R5cGU7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCAyNmMxZmE3Li43NjU1ZjUwMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0yNSw2ICsyNCw3IEBACiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJnbG9wcy5oIgogCiBzdGF0aWMgc3NpemVfdCBpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CkBAIC0zNyw2ICszNywzMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzZHAtPnNkX2ZzbmFtZSk7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl91dWlkX3ZhbGlkKGNvbnN0IHU4ICp1dWlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHV1aWRbaV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHV1aWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCWJ1ZlswXSA9ICdcMCc7CisJaWYgKCFnZnMyX3V1aWRfdmFsaWQodXVpZCkpCisJCXJldHVybiAwOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtIgorCQkJIiUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYJTAyWCUwMlglMDJYJTAyWFxuIiwKKwkJCXV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sIHV1aWRbNF0sIHV1aWRbNV0sCisJCQl1dWlkWzZdLCB1dWlkWzddLCB1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVpZFsxMV0sCisJCQl1dWlkWzEyXSwgdXVpZFsxM10sIHV1aWRbMTRdLCB1dWlkWzE1XSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGZyZWV6ZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtMTQ4LDYgKzE3Miw0NiBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGRlbW90ZV9ycV9zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKKwljb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbG9wczsKKwl1bnNpZ25lZCBpbnQgZ2xtb2RlOworCXVuc2lnbmVkIGludCBnbHR5cGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGdsbnVtOworCWNoYXIgbW9kZVsxNl07CisJaW50IHJ2OworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXJ2ID0gc3NjYW5mKGJ1ZiwgIiV1OiVsbHUgJTE1cyIsICZnbHR5cGUsICZnbG51bSwKKwkJICAgIG1vZGUpOworCWlmIChydiAhPSAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJjbXAobW9kZSwgIkVYIikgPT0gMCkKKwkJZ2xtb2RlID0gTE1fU1RfVU5MT0NLRUQ7CisJZWxzZSBpZiAoKHN0cmNtcChtb2RlLCAiQ1ciKSA9PSAwKSB8fCAoc3RyY21wKG1vZGUsICJERiIpID09IDApKQorCQlnbG1vZGUgPSBMTV9TVF9ERUZFUlJFRDsKKwllbHNlIGlmICgoc3RyY21wKG1vZGUsICJQUiIpID09IDApIHx8IChzdHJjbXAobW9kZSwgIlNIIikgPT0gMCkpCisJCWdsbW9kZSA9IExNX1NUX1NIQVJFRDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGdsdHlwZSA+IExNX1RZUEVfSk9VUk5BTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZ2xvcHMgPSBnZnMyX2dsb3BzX2xpc3RbZ2x0eXBlXTsKKwlpZiAoZ2xvcHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnYgPSBnZnMyX2dsb2NrX2dldChzZHAsIGdsbnVtLCBnbG9wcywgMCwgJmdsKTsKKwlpZiAocnYpCisJCXJldHVybiBydjsKKwlnZnMyX2dsb2NrX2NiKGdsLCBnbG1vZGUpOworCWdmczJfZ2xvY2tfcHV0KGdsKTsKKwlyZXR1cm4gbGVuOworfQorCiBzdHJ1Y3QgZ2ZzMl9hdHRyIHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZnMyX3NiZCAqLCBjaGFyICopOwpAQCAtMTU5LDIyICsyMjMsMjYgQEAKIAogR0ZTMl9BVFRSKGlkLCAgICAgICAgICAgICAgICAgIDA0NDQsIGlkX3Nob3csICAgICAgIE5VTEwpOwogR0ZTMl9BVFRSKGZzbmFtZSwgICAgICAgICAgICAgIDA0NDQsIGZzbmFtZV9zaG93LCAgIE5VTEwpOworR0ZTMl9BVFRSKHV1aWQsICAgICAgICAgICAgICAgIDA0NDQsIHV1aWRfc2hvdywgICAgIE5VTEwpOwogR0ZTMl9BVFRSKGZyZWV6ZSwgICAgICAgICAgICAgIDA2NDQsIGZyZWV6ZV9zaG93LCAgIGZyZWV6ZV9zdG9yZSk7CiBHRlMyX0FUVFIod2l0aGRyYXcsICAgICAgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgd2l0aGRyYXdfc3RvcmUpOwogR0ZTMl9BVFRSKHN0YXRmc19zeW5jLCAgICAgICAgIDAyMDAsIE5VTEwsICAgICAgICAgIHN0YXRmc19zeW5jX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9zeW5jLCAgICAgICAgICAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9zeW5jX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9yZWZyZXNoX3VzZXIsICAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9yZWZyZXNoX3VzZXJfc3RvcmUpOwogR0ZTMl9BVFRSKHF1b3RhX3JlZnJlc2hfZ3JvdXAsIDAyMDAsIE5VTEwsICAgICAgICAgIHF1b3RhX3JlZnJlc2hfZ3JvdXBfc3RvcmUpOworR0ZTMl9BVFRSKGRlbW90ZV9ycSwgICAgICAgICAgIDAyMDAsIE5VTEwsCSAgICBkZW1vdGVfcnFfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ2ZzMl9hdHRyc1tdID0gewogCSZnZnMyX2F0dHJfaWQuYXR0ciwKIAkmZ2ZzMl9hdHRyX2ZzbmFtZS5hdHRyLAorCSZnZnMyX2F0dHJfdXVpZC5hdHRyLAogCSZnZnMyX2F0dHJfZnJlZXplLmF0dHIsCiAJJmdmczJfYXR0cl93aXRoZHJhdy5hdHRyLAogCSZnZnMyX2F0dHJfc3RhdGZzX3N5bmMuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3N5bmMuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3JlZnJlc2hfdXNlci5hdHRyLAogCSZnZnMyX2F0dHJfcXVvdGFfcmVmcmVzaF9ncm91cC5hdHRyLAorCSZnZnMyX2F0dHJfZGVtb3RlX3JxLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTIyNCwxNCArMjkyLDE0NSBAQAogCiBMT0NLU1RSVUNUX0FUVFIoamlkLCAgICAgICIldVxuIik7CiBMT0NLU1RSVUNUX0FUVFIoZmlyc3QsICAgICIldVxuIik7Ci1MT0NLU1RSVUNUX0FUVFIobHZiX3NpemUsICIldVxuIik7Ci1MT0NLU1RSVUNUX0FUVFIoZmxhZ3MsICAgICIlZFxuIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsb2Nrc3RydWN0X2F0dHJzW10gPSB7CiAJJmxvY2tzdHJ1Y3RfYXR0cl9qaWQuYXR0ciwKIAkmbG9ja3N0cnVjdF9hdHRyX2ZpcnN0LmF0dHIsCi0JJmxvY2tzdHJ1Y3RfYXR0cl9sdmJfc2l6ZS5hdHRyLAotCSZsb2Nrc3RydWN0X2F0dHJfZmxhZ3MuYXR0ciwKKwlOVUxMLAorfTsKKworLyoKKyAqIGxvY2tfbW9kdWxlLiBPcmlnaW5hbGx5IGZyb20gbG9ja19kbG0KKyAqLworCitzdGF0aWMgc3NpemVfdCBwcm90b19uYW1lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqb3BzID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wczsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3BzLT5sbV9wcm90b19uYW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgYmxvY2tfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3NpemVfdCByZXQ7CisJaW50IHZhbCA9IDA7CisKKwlpZiAodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKSkKKwkJdmFsID0gMTsKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsb2NrX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlzc2l6ZV90IHJldCA9IGxlbjsKKwlpbnQgdmFsOworCisJdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApOworCisJaWYgKHZhbCA9PSAxKQorCQlzZXRfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncyk7CisJZWxzZSBpZiAodmFsID09IDApIHsKKwkJY2xlYXJfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCWdmczJfZ2xvY2tfdGhhdyhzZHApOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxraWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGxzLT5sc19pZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxrZmlyc3Rfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19maXJzdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpcnN0X2RvbmVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19maXJzdF9kb25lKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkKTsKK30KKworc3RhdGljIHZvaWQgZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkKQoreworCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKKworCXNwaW5fbG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShqZCwgJnNkcC0+c2RfamluZGV4X2xpc3QsIGpkX2xpc3QpIHsKKwkJaWYgKGpkLT5qZF9qaWQgIT0gamlkKQorCQkJY29udGludWU7CisJCWpkLT5qZF9kaXJ0eSA9IDE7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmc2RwLT5zZF9qaW5kZXhfc3Bpbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWxzLT5sc19yZWNvdmVyX2ppZCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKwlnZnMyX2pkZXNjX21ha2VfZGlydHkoc2RwLCBscy0+bHNfcmVjb3Zlcl9qaWQpOworCWlmIChzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpCisJCXdha2VfdXBfcHJvY2VzcyhzZHAtPnNkX3JlY292ZXJkX3Byb2Nlc3MpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfZG9uZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkX2RvbmUpOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0YXR1c19zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHMtPmxzX3JlY292ZXJfamlkX3N0YXR1cyk7Cit9CisKK3N0cnVjdCBnZGxtX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworI2RlZmluZSBHRExNX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCitzdGF0aWMgc3RydWN0IGdkbG1fYXR0ciBnZGxtX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK0dETE1fQVRUUihwcm90b19uYW1lLCAgICAgMDQ0NCwgcHJvdG9fbmFtZV9zaG93LCAgICAgTlVMTCk7CitHRExNX0FUVFIoYmxvY2ssICAgICAgICAgIDA2NDQsIGJsb2NrX3Nob3csICAgICAgICAgIGJsb2NrX3N0b3JlKTsKK0dETE1fQVRUUih3aXRoZHJhdywgICAgICAgMDY0NCwgd2l0aGRyYXdfc2hvdywgICAgICAgd2l0aGRyYXdfc3RvcmUpOworR0RMTV9BVFRSKGlkLCAgICAgICAgICAgICAwNDQ0LCBsa2lkX3Nob3csICAgICAgICAgICBOVUxMKTsKK0dETE1fQVRUUihmaXJzdCwgICAgICAgICAgMDQ0NCwgbGtmaXJzdF9zaG93LCAgICAgICAgTlVMTCk7CitHRExNX0FUVFIoZmlyc3RfZG9uZSwgICAgIDA0NDQsIGZpcnN0X2RvbmVfc2hvdywgICAgIE5VTEwpOworR0RMTV9BVFRSKHJlY292ZXIsICAgICAgICAwNjQ0LCByZWNvdmVyX3Nob3csICAgICAgICByZWNvdmVyX3N0b3JlKTsKK0dETE1fQVRUUihyZWNvdmVyX2RvbmUsICAgMDQ0NCwgcmVjb3Zlcl9kb25lX3Nob3csICAgTlVMTCk7CitHRExNX0FUVFIocmVjb3Zlcl9zdGF0dXMsIDA0NDQsIHJlY292ZXJfc3RhdHVzX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG9ja19tb2R1bGVfYXR0cnNbXSA9IHsKKwkmZ2RsbV9hdHRyX3Byb3RvX25hbWUuYXR0ciwKKwkmZ2RsbV9hdHRyX2Jsb2NrLmF0dHIsCisJJmdkbG1fYXR0cl93aXRoZHJhdy5hdHRyLAorCSZnZGxtX2F0dHJfaWQuYXR0ciwKKwkmbG9ja3N0cnVjdF9hdHRyX2ppZC5hdHRyLAorCSZnZGxtX2F0dHJfZmlyc3QuYXR0ciwKKwkmZ2RsbV9hdHRyX2ZpcnN0X2RvbmUuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXIuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXJfZG9uZS5hdHRyLAorCSZnZGxtX2F0dHJfcmVjb3Zlcl9zdGF0dXMuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzczLDcgKzU3Miw2IEBACiBUVU5FX0FUVFIoc3RhdGZzX3Nsb3csIDApOwogVFVORV9BVFRSKG5ld19maWxlc19qZGF0YSwgMCk7CiBUVU5FX0FUVFIocXVvdGFfc2ltdWxfc3luYywgMSk7Ci1UVU5FX0FUVFIocXVvdGFfY2FjaGVfc2VjcywgMSk7CiBUVU5FX0FUVFIoc3RhbGxfc2VjcywgMSk7CiBUVU5FX0FUVFIoc3RhdGZzX3F1YW50dW0sIDEpOwogVFVORV9BVFRSX0RBRU1PTihyZWNvdmVyZF9zZWNzLCByZWNvdmVyZF9wcm9jZXNzKTsKQEAgLTM4OSw3ICs1ODcsNiBAQAogCSZ0dW5lX2F0dHJfY29tcGxhaW5fc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhdGZzX3Nsb3cuYXR0ciwKIAkmdHVuZV9hdHRyX3F1b3RhX3NpbXVsX3N5bmMuYXR0ciwKLQkmdHVuZV9hdHRyX3F1b3RhX2NhY2hlX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YWxsX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19xdWFudHVtLmF0dHIsCiAJJnR1bmVfYXR0cl9yZWNvdmVyZF9zZWNzLmF0dHIsCkBAIC00MTQsNiArNjExLDExIEBACiAJLmF0dHJzID0gdHVuZV9hdHRycywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxvY2tfbW9kdWxlX2dyb3VwID0geworCS5uYW1lID0gImxvY2tfbW9kdWxlIiwKKwkuYXR0cnMgPSBsb2NrX21vZHVsZV9hdHRycywKK307CisKIGludCBnZnMyX3N5c19mc19hZGQoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJaW50IGVycm9yOwpAQCAtNDM2LDkgKzYzOCwxNSBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2FyZ3M7CiAKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja19tb2R1bGVfZ3JvdXApOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsX3R1bmU7CisKIAlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfdHVuZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJnR1bmVfZ3JvdXApOwogZmFpbF9hcmdzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmYXJnc19ncm91cCk7CiBmYWlsX2xvY2tzdHJ1Y3Q6CkBAIC00NTUsMTUgKzY2MywyNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZhcmdzX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tzdHJ1Y3RfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmbG9ja19tb2R1bGVfZ3JvdXApOwogCWtvYmplY3RfcHV0KCZzZHAtPnNkX2tvYmopOwogfQogCisKIHN0YXRpYyBpbnQgZ2ZzMl91ZXZlbnQoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkgICAgICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBnZnMyX3NiZCwgc2Rfa29iaik7CisJY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLVEFCTEU9JXMiLCBzZHAtPnNkX3RhYmxlX25hbWUpOwogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tQUk9UTz0lcyIsIHNkcC0+c2RfcHJvdG9fbmFtZSk7CisJaWYgKGdmczJfdXVpZF92YWxpZCh1dWlkKSkgeworCQlhZGRfdWV2ZW50X3ZhcihlbnYsICJVVUlEPSUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlgtIgorCQkJICAgICAgICIlMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiLAorCQkJICAgICAgIHV1aWRbMF0sIHV1aWRbMV0sIHV1aWRbMl0sIHV1aWRbM10sIHV1aWRbNF0sCisJCQkgICAgICAgdXVpZFs1XSwgdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwKKwkJCSAgICAgICB1dWlkWzEwXSwgdXVpZFsxMV0sIHV1aWRbMTJdLCB1dWlkWzEzXSwKKwkJCSAgICAgICB1dWlkWzE0XSwgdXVpZFsxNV0pOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi90cmFucy5jIGIvZnMvZ2ZzMi90cmFucy5jCmluZGV4IGY2NzdiOGEuLjA1Mzc1MmQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdHJhbnMuYworKysgYi9mcy9nZnMyL3RyYW5zLmMKQEAgLTEyLDkgKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtODgsOSArODcsMTEgQEAKIAogCWlmICghdHItPnRyX3RvdWNoZWQpIHsKIAkJZ2ZzMl9sb2dfcmVsZWFzZShzZHAsIHRyLT50cl9yZXNlcnZlZCk7Ci0JCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKLQkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7Ci0JCWtmcmVlKHRyKTsKKwkJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7CisJCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7CisJCQlnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKKwkJCWtmcmVlKHRyKTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xMDYsOSArMTA3LDExIEBACiAJfQogCiAJZ2ZzMl9sb2dfY29tbWl0KHNkcCwgdHIpOwotICAgICAgICBnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7Ci0gICAgICAgIGdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOwotICAgICAgICBrZnJlZSh0cik7CisJaWYgKHRyLT50cl90X2doLmdoX2dsKSB7CisJCWdmczJfZ2xvY2tfZHEoJnRyLT50cl90X2doKTsKKwkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7CisJCWtmcmVlKHRyKTsKKwl9CiAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19TWU5DSFJPTk9VUykKIAkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdXRpbC5jIGIvZnMvZ2ZzMi91dGlsLmMKaW5kZXggMzc0ZjUwZS4uOWQxMmIxMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi91dGlsLmMKKysrIGIvZnMvZ2ZzMi91dGlsLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtMzUsNiArMzQsOCBAQAogCiBpbnQgZ2ZzMl9sbV93aXRoZHJhdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBscy0+bHNfb3BzOwogCXZhX2xpc3QgYXJnczsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQpAQCAtNDcsOCArNDgsMTIgQEAKIAlmc19lcnIoc2RwLCAiYWJvdXQgdG8gd2l0aGRyYXcgdGhpcyBmaWxlIHN5c3RlbVxuIik7CiAJQlVHX09OKHNkcC0+c2RfYXJncy5hcl9kZWJ1Zyk7CiAKLQlmc19lcnIoc2RwLCAidGVsbGluZyBMTSB0byB3aXRoZHJhd1xuIik7Ci0JZ2ZzMl93aXRoZHJhd19sb2NrcHJvdG8oJnNkcC0+c2RfbG9ja3N0cnVjdCk7CisJa29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9PRkZMSU5FKTsKKworCWlmIChsbS0+bG1fdW5tb3VudCkgeworCQlmc19lcnIoc2RwLCAidGVsbGluZyBMTSB0byB1bm1vdW50XG4iKTsKKwkJbG0tPmxtX3VubW91bnQoc2RwKTsKKwl9CiAJZnNfZXJyKHNkcCwgIndpdGhkcmF3blxuIik7CiAJZHVtcF9zdGFjaygpOwogCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCBiYjgxYmQ1Li4yOWRmNGEyIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC0xNDcsMTMgKzE0OCwxMyBAQAogCWlub2RlLT5pX2NkZXYgPSBOVUxMOwogCWlub2RlLT5pX3JkZXYgPSAwOwogCWlub2RlLT5kaXJ0aWVkX3doZW4gPSAwOwotCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpIHsKLQkJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKQotCQkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOwotCQllbHNlCi0JCQlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCAoaW5vZGUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCisJaWYgKHNlY3VyaXR5X2lub2RlX2FsbG9jKGlub2RlKSkKKwkJZ290byBvdXRfZnJlZV9pbm9kZTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlfaW50ZWdyaXR5ICovCisJaWYgKGltYV9pbm9kZV9hbGxvYyhpbm9kZSkpCisJCWdvdG8gb3V0X2ZyZWVfc2VjdXJpdHk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfbG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmlub2RlLT5pX2xvY2ssICZzYi0+c190eXBlLT5pX2xvY2tfa2V5KTsKQEAgLTE4OSw2ICsxOTAsMTUgQEAKIAlpbm9kZS0+aV9tYXBwaW5nID0gbWFwcGluZzsKIAogCXJldHVybiBpbm9kZTsKKworb3V0X2ZyZWVfc2VjdXJpdHk6CisJc2VjdXJpdHlfaW5vZGVfZnJlZShpbm9kZSk7CitvdXRfZnJlZV9pbm9kZToKKwlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUpCisJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKKwllbHNlCisJCWttZW1fY2FjaGVfZnJlZShpbm9kZV9jYWNoZXAsIChpbm9kZSkpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X2Fsd2F5cyk7CiAKQEAgLTEyOTAsNiArMTMwMCw0MCBAQAogfQogRVhQT1JUX1NZTUJPTChibWFwKTsKIAorLyoKKyAqIFdpdGggcmVsYXRpdmUgYXRpbWUsIG9ubHkgdXBkYXRlIGF0aW1lIGlmIHRoZSBwcmV2aW91cyBhdGltZSBpcworICogZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUgb3IgaWYgYXQgbGVhc3QgYSBkYXkgaGFzCisgKiBwYXNzZWQgc2luY2UgdGhlIGxhc3QgYXRpbWUgdXBkYXRlLgorICovCitzdGF0aWMgaW50IHJlbGF0aW1lX25lZWRfdXBkYXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBzdHJ1Y3QgdGltZXNwZWMgbm93KQoreworCisJaWYgKCEobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIElzIG10aW1lIHlvdW5nZXIgdGhhbiBhdGltZT8gSWYgeWVzLCB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLCAmaW5vZGUtPmlfYXRpbWUpID49IDApCisJCXJldHVybiAxOworCS8qCisJICogSXMgY3RpbWUgeW91bmdlciB0aGFuIGF0aW1lPyBJZiB5ZXMsIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfY3RpbWUsICZpbm9kZS0+aV9hdGltZSkgPj0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElzIHRoZSBwcmV2aW91cyBhdGltZSB2YWx1ZSBvbGRlciB0aGFuIGEgZGF5PyBJZiB5ZXMsCisJICogdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICgobG9uZykobm93LnR2X3NlYyAtIGlub2RlLT5pX2F0aW1lLnR2X3NlYykgPj0gMjQqNjAqNjApCisJCXJldHVybiAxOworCS8qCisJICogR29vZCwgd2UgY2FuIHNraXAgdGhlIGF0aW1lIHVwZGF0ZToKKwkgKi8KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKgl0b3VjaF9hdGltZQktCXVwZGF0ZSB0aGUgYWNjZXNzIHRpbWUKICAqCUBtbnQ6IG1vdW50IHRoZSBpbm9kZSBpcyBhY2Nlc3NlZCBvbgpAQCAtMTMxNywxNyArMTM2MSwxMiBAQAogCQlnb3RvIG91dDsKIAlpZiAoKG1udC0+bW50X2ZsYWdzICYgTU5UX05PRElSQVRJTUUpICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gb3V0OwotCWlmIChtbnQtPm1udF9mbGFncyAmIE1OVF9SRUxBVElNRSkgewotCQkvKgotCQkgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUgcHJldmlvdXMKLQkJICogYXRpbWUgaXMgZWFybGllciB0aGFuIGVpdGhlciB0aGUgY3RpbWUgb3IgbXRpbWUuCi0JCSAqLwotCQlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfbXRpbWUsICZpbm9kZS0+aV9hdGltZSkgPCAwICYmCi0JCSAgICB0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwgJmlub2RlLT5pX2F0aW1lKSA8IDApCi0JCQlnb3RvIG91dDsKLQl9CiAKIAlub3cgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOworCisJaWYgKCFyZWxhdGltZV9uZWVkX3VwZGF0ZShtbnQsIGlub2RlLCBub3cpKQorCQlnb3RvIG91dDsKKwogCWlmICh0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZub3cpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggMjQwZWM2MzkuLmFjMmQ0N2UgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtNDA0LDEwICs0MDQsMTIgQEAKIAlpZiAoT19OT05CTE9DSyAhPSBPX05ERUxBWSkKIAkJZmxhZyB8PSBPX05ERUxBWTsKICNlbmRpZgorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlpZiAob24pCiAJCWZpbHAtPmZfZmxhZ3MgfD0gZmxhZzsKIAllbHNlCiAJCWZpbHAtPmZfZmxhZ3MgJj0gfmZsYWc7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00MjUsMTggKzQyNywxMiBAQAogCS8qIERpZCBGQVNZTkMgc3RhdGUgY2hhbmdlID8gKi8KIAlpZiAoKGZsYWcgXiBmaWxwLT5mX2ZsYWdzKSAmIEZBU1lOQykgewogCQlpZiAoZmlscC0+Zl9vcCAmJiBmaWxwLT5mX29wLT5mYXN5bmMpCisJCQkvKiBmYXN5bmMoKSBhZGp1c3RzIGZpbHAtPmZfZmxhZ3MgKi8KIAkJCWVycm9yID0gZmlscC0+Zl9vcC0+ZmFzeW5jKGZkLCBmaWxwLCBvbik7CiAJCWVsc2UKIAkJCWVycm9yID0gLUVOT1RUWTsKIAl9Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAob24pCi0JCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOwotCWVsc2UKLQkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAwOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2ZzZnJlZXplKHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNDk5LDE3ICs0OTUsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZJT05CSU86Ci0JCS8qIEJLTCBuZWVkZWQgdG8gYXZvaWQgcmFjZXMgdHdlYWtpbmcgZl9mbGFncyAqLwotCQlsb2NrX2tlcm5lbCgpOwogCQllcnJvciA9IGlvY3RsX2Zpb25iaW8oZmlscCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZJT0FTWU5DOgotCQkvKiBCS0wgbmVlZGVkIHRvIGF2b2lkIHJhY2VzIHR3ZWFraW5nIGZfZmxhZ3MgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJZXJyb3IgPSBpb2N0bF9maW9hc3luYyhmZCwgZmlscCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZJT1FTSVpFOgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggODkzN2Y0ZS4uMTkyODE5NyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CkBAIC04NTAsNiArODUxLDggQEAKIAkJaWYgKGVyciA9PSAtRUFHQUlOKQogCQkJZXJyID0gaW5vZGVfcGVybWlzc2lvbihuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQkJCSAgICAgICBNQVlfRVhFQyk7CisJCWlmICghZXJyKQorCQkJZXJyID0gaW1hX3BhdGhfY2hlY2soJm5kLT5wYXRoLCBNQVlfRVhFQyk7CiAgCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKQEAgLTE1MDksNiArMTUxMiwxMSBAQAogCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgYWNjX21vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjayhwYXRoLAorCQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIEFuIGFwcGVuZC1vbmx5IGZpbGUgbXVzdCBiZSBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgZm9yIHdyaXRpbmcuCiAJICovCmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IDA2ZjhlNjMuLmYwZTc1MzAgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC03ODAsNiArNzgwLDcgQEAKIAkJeyBNTlRfTk9BVElNRSwgIixub2F0aW1lIiB9LAogCQl7IE1OVF9OT0RJUkFUSU1FLCAiLG5vZGlyYXRpbWUiIH0sCiAJCXsgTU5UX1JFTEFUSU1FLCAiLHJlbGF0aW1lIiB9LAorCQl7IE1OVF9TVFJJQ1RBVElNRSwgIixzdHJpY3RhdGltZSIgfSwKIAkJeyAwLCBOVUxMIH0KIAl9OwogCWNvbnN0IHN0cnVjdCBwcm9jX2ZzX2luZm8gKmZzX2luZm9wOwpAQCAtMTkxOSw2ICsxOTIwLDkgQEAKIAlpZiAoZGF0YV9wYWdlKQogCQkoKGNoYXIgKilkYXRhX3BhZ2UpW1BBR0VfU0laRSAtIDFdID0gMDsKIAorCS8qIERlZmF1bHQgdG8gcmVsYXRpbWUgKi8KKwltbnRfZmxhZ3MgfD0gTU5UX1JFTEFUSU1FOworCiAJLyogU2VwYXJhdGUgdGhlIHBlci1tb3VudHBvaW50IGZsYWdzICovCiAJaWYgKGZsYWdzICYgTVNfTk9TVUlEKQogCQltbnRfZmxhZ3MgfD0gTU5UX05PU1VJRDsKQEAgLTE5MzAsMTMgKzE5MzQsMTQgQEAKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT0FUSU1FOwogCWlmIChmbGFncyAmIE1TX05PRElSQVRJTUUpCiAJCW1udF9mbGFncyB8PSBNTlRfTk9ESVJBVElNRTsKLQlpZiAoZmxhZ3MgJiBNU19SRUxBVElNRSkKLQkJbW50X2ZsYWdzIHw9IE1OVF9SRUxBVElNRTsKKwlpZiAoZmxhZ3MgJiBNU19TVFJJQ1RBVElNRSkKKwkJbW50X2ZsYWdzICY9IH4oTU5UX1JFTEFUSU1FIHwgTU5UX05PQVRJTUUpOwogCWlmIChmbGFncyAmIE1TX1JET05MWSkKIAkJbW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWTsKIAogCWZsYWdzICY9IH4oTVNfTk9TVUlEIHwgTVNfTk9FWEVDIHwgTVNfTk9ERVYgfCBNU19BQ1RJVkUgfAotCQkgICBNU19OT0FUSU1FIHwgTVNfTk9ESVJBVElNRSB8IE1TX1JFTEFUSU1FfCBNU19LRVJOTU9VTlQpOworCQkgICBNU19OT0FUSU1FIHwgTVNfTk9ESVJBVElNRSB8IE1TX1JFTEFUSU1FfCBNU19LRVJOTU9VTlQgfAorCQkgICBNU19TVFJJQ1RBVElNRSk7CiAKIAkvKiAuLi4gYW5kIGdldCB0aGUgbW91bnRwb2ludCAqLwogCXJldHZhbCA9IGtlcm5fcGF0aChkaXJfbmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggYWQzOGZjOS4uNzgzNzZiNiAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC05OTgsOCArOTk4LDExIEBACiAKIAlpZiAoIUVYX0lTU1lOQyhleHApKQogCQlzdGFibGUgPSAwOwotCWlmIChzdGFibGUgJiYgIUVYX1dHQVRIRVIoZXhwKSkKKwlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpIHsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CisJfQogCiAJLyogV3JpdGUgdGhlIGRhdGEuICovCiAJb2xkZnMgPSBnZXRfZnMoKTsgc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggNmQ3MjAyNC4uMzhlMzM3ZCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJcGRldi0+ZGV2dCA9IGRldnQ7CiAKIAkvKiBkZWxheSB1ZXZlbnQgdW50aWwgJ2hvbGRlcnMnIHN1YmRpciBpcyBjcmVhdGVkICovCi0JcGRldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhwZGV2LCAxKTsKIAllcnIgPSBkZXZpY2VfYWRkKHBkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3B1dDsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICghcC0+aG9sZGVyX2RpcikKIAkJZ290byBvdXRfZGVsOwogCi0JcGRldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhwZGV2LCAwKTsKIAlpZiAoZmxhZ3MgJiBBRERQQVJUX0ZMQUdfV0hPTEVESVNLKSB7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShwZGV2LCAmZGV2X2F0dHJfd2hvbGVfZGlzayk7CiAJCWlmIChlcnIpCkBAIC00MjIsNyArNDIyLDcgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIocHRibC0+cGFydFtwYXJ0bm9dLCBwKTsKIAogCS8qIHN1cHByZXNzIHVldmVudCBpZiB0aGUgZGlzayBzdXByZXNzZXMgaXQgKi8KLQlpZiAoIWRkZXYtPnVldmVudF9zdXBwcmVzcykKKwlpZiAoIWRldl9nZXRfdWV2ZW50X3N1cHByZXNzKHBkZXYpKQogCQlrb2JqZWN0X3VldmVudCgmcGRldi0+a29iaiwgS09CSl9BREQpOwogCiAJcmV0dXJuIHA7CkBAIC00NTUsNyArNDU1LDcgQEAKIAlkZXZfc2V0X25hbWUoZGRldiwgZGlzay0+ZGlza19uYW1lKTsKIAogCS8qIGRlbGF5IHVldmVudHMsIHVudGlsIHdlIHNjYW5uZWQgcGFydGl0aW9uIHRhYmxlICovCi0JZGRldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAxKTsKIAogCWlmIChkZXZpY2VfYWRkKGRkZXYpKQogCQlyZXR1cm47CkBAIC00OTAsNyArNDkwLDcgQEAKIAogZXhpdDoKIAkvKiBhbm5vdW5jZSBkaXNrIGFmdGVyIHBvc3NpYmxlIHBhcnRpdGlvbnMgYXJlIGNyZWF0ZWQgKi8KLQlkZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRkZXYsIDApOwogCWtvYmplY3RfdWV2ZW50KCZkZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKIAkvKiBhbm5vdW5jZSBwb3NzaWJsZSBwYXJ0aXRpb25zICovCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2libS5jIGIvZnMvcGFydGl0aW9ucy9pYm0uYwppbmRleCAxZTA2NGM0Li40NjI5NzY4IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2libS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKQEAgLTIxLDIwICsyMSwzOCBAQAogICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYQogICogY3lsLWN5bC1oZWFkLWhlYWQgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgc2VjdG9yX3QKIGNjaGgyYmxrIChzdHJ1Y3QgdnRvY19jY2hoICpwdHIsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKSB7Ci0gICAgICAgIHJldHVybiBwdHItPmNjICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCi0JICAgICAgIHB0ci0+aGggKiBnZW8tPnNlY3RvcnM7CisKKwlzZWN0b3JfdCBjeWw7CisJX191MTYgaGVhZDsKKworCS8qZGVjb2RlIGN5bGluZGVyIGFuZCBoZWFkcyBmb3IgbGFyZ2Ugdm9sdW1lcyAqLworCWN5bCA9IHB0ci0+aGggJiAweEZGRjA7CisJY3lsIDw8PSAxMjsKKwljeWwgfD0gcHRyLT5jYzsKKwloZWFkID0gcHRyLT5oaCAmIDB4MDAwRjsKKwlyZXR1cm4gY3lsICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCisJICAgICAgIGhlYWQgKiBnZW8tPnNlY3RvcnM7CiB9CiAKIC8qCiAgKiBjb21wdXRlIHRoZSBibG9jayBudW1iZXIgZnJvbSBhCiAgKiBjeWwtY3lsLWhlYWQtaGVhZC1ibG9jayBzdHJ1Y3R1cmUKICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBzZWN0b3JfdAogY2NoaGIyYmxrIChzdHJ1Y3QgdnRvY19jY2hoYiAqcHRyLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykgewotICAgICAgICByZXR1cm4gcHRyLT5jYyAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKwotCQlwdHItPmhoICogZ2VvLT5zZWN0b3JzICsKKworCXNlY3Rvcl90IGN5bDsKKwlfX3UxNiBoZWFkOworCisJLypkZWNvZGUgY3lsaW5kZXIgYW5kIGhlYWRzIGZvciBsYXJnZSB2b2x1bWVzICovCisJY3lsID0gcHRyLT5oaCAmIDB4RkZGMDsKKwljeWwgPDw9IDEyOworCWN5bCB8PSBwdHItPmNjOworCWhlYWQgPSBwdHItPmhoICYgMHgwMDBGOworCXJldHVybgljeWwgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKKwkJaGVhZCAqIGdlby0+c2VjdG9ycyArCiAJCXB0ci0+YjsKIH0KIApAQCAtNDMsMTQgKzYxLDE1IEBACiBpbnQKIGlibV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlpbnQgYmxvY2tzaXplLCBvZmZzZXQsIHNpemUscmVzOwotCWxvZmZfdCBpX3NpemU7CisJaW50IGJsb2Nrc2l6ZSwgcmVzOworCWxvZmZfdCBpX3NpemUsIG9mZnNldCwgc2l6ZSwgZm10X3NpemU7CiAJZGFzZF9pbmZvcm1hdGlvbjJfdCAqaW5mbzsKIAlzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbzsKIAljaGFyIHR5cGVbNV0gPSB7MCx9OwogCWNoYXIgbmFtZVs3XSA9IHswLH07CiAJdW5pb24gbGFiZWxfdCB7Ci0JCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbCB2b2w7CisJCXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9jZGwgdm9sOworCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfbGRsIGxueDsKIAkJc3RydWN0IHZ0b2NfY21zX2xhYmVsIGNtczsKIAl9ICpsYWJlbDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwpAQCAtODUsMTQgKzEwNCwxNiBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X3JlYWRlcnI7CiAKLQlzdHJuY3B5ICh0eXBlLCBkYXRhLCA0KTsKLQlpZiAoKCFpbmZvLT5GQkFfbGF5b3V0KSAmJiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSkKLQkJc3RybmNweShuYW1lLCBkYXRhICsgOCwgNik7Ci0JZWxzZQotCQlzdHJuY3B5KG5hbWUsIGRhdGEgKyA0LCA2KTsKIAltZW1jcHkobGFiZWwsIGRhdGEsIHNpemVvZih1bmlvbiBsYWJlbF90KSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAKKwlpZiAoKCFpbmZvLT5GQkFfbGF5b3V0KSAmJiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSkgeworCQlzdHJuY3B5KHR5cGUsIGxhYmVsLT52b2wudm9sbGJsLCA0KTsKKwkJc3RybmNweShuYW1lLCBsYWJlbC0+dm9sLnZvbGlkLCA2KTsKKwl9IGVsc2UgeworCQlzdHJuY3B5KHR5cGUsIGxhYmVsLT5sbngudm9sbGJsLCA0KTsKKwkJc3RybmNweShuYW1lLCBsYWJlbC0+bG54LnZvbGlkLCA2KTsKKwl9CiAJRUJDQVNDKHR5cGUsIDQpOwogCUVCQ0FTQyhuYW1lLCA2KTsKIApAQCAtMTEwLDM2ICsxMzEsNTQgQEAKIAkJCS8qCiAJCQkgKiBWTSBzdHlsZSBDTVMxIGxhYmVsZWQgZGlzawogCQkJICovCisJCQlibG9ja3NpemUgPSBsYWJlbC0+Y21zLmJsb2NrX3NpemU7CiAJCQlpZiAobGFiZWwtPmNtcy5kaXNrX29mZnNldCAhPSAwKSB7CiAJCQkJcHJpbnRrKCJDTVMxLyU4cyhNRFNLKToiLCBuYW1lKTsKIAkJCQkvKiBkaXNrIGlzIHJlc2VydmVkIG1pbmlkaXNrICovCi0JCQkJYmxvY2tzaXplID0gbGFiZWwtPmNtcy5ibG9ja19zaXplOwogCQkJCW9mZnNldCA9IGxhYmVsLT5jbXMuZGlza19vZmZzZXQ7CiAJCQkJc2l6ZSA9IChsYWJlbC0+Y21zLmJsb2NrX2NvdW50IC0gMSkKIAkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoIkNNUzEvJThzOiIsIG5hbWUpOwogCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOwotCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlzaXplID0gbGFiZWwtPmNtcy5ibG9ja19jb3VudAorCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogT2xkIHN0eWxlIExOWDEgb3IgdW5sYWJlbGVkIGRpc2sKLQkJCSAqLwotCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKQotCQkJCXByaW50ayAoIkxOWDEvJThzOiIsIG5hbWUpOwotCQkJZWxzZQotCQkJCXByaW50aygiKG5vbmwpIik7Ci0JCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJCXNpemUgPSBpX3NpemUgPj4gOTsKLQkJfQotCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKKwkJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAogCQkJCSAgICAgIHNpemUtb2Zmc2V0KihibG9ja3NpemUgPj4gOSkpOworCQl9IGVsc2UgeworCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKSB7CisJCQkJcHJpbnRrKCJMTlgxLyU4czoiLCBuYW1lKTsKKwkJCQlpZiAobGFiZWwtPmxueC5sZGxfdmVyc2lvbiA9PSAweGYyKSB7CisJCQkJCWZtdF9zaXplID0gbGFiZWwtPmxueC5mb3JtYXR0ZWRfYmxvY2tzCisJCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CisJCQkJfSBlbHNlIGlmICghc3RyY21wKGluZm8tPnR5cGUsICJFQ0tEIikpIHsKKwkJCQkJLyogZm9ybWF0ZWQgdy9vIGxhcmdlIHZvbHVtZSBzdXBwb3J0ICovCisJCQkJCWZtdF9zaXplID0gZ2VvLT5jeWxpbmRlcnMgKiBnZW8tPmhlYWRzCisJCQkJCSAgICAgICogZ2VvLT5zZWN0b3JzICogKGJsb2Nrc2l6ZSA+PiA5KTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBvbGQgbGFiZWwgYW5kIG5vIHVzYWJsZSBkaXNrIGdlb21ldHJ5CisJCQkJCSAqIChlLmcuIERJQUcpICovCisJCQkJCWZtdF9zaXplID0gaV9zaXplID4+IDk7CisJCQkJfQorCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKKwkJCQlpZiAoZm10X3NpemUgPCBzaXplKQorCQkJCQlzaXplID0gZm10X3NpemU7CisJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHVubGFiZWxlZCBkaXNrICovCisJCQkJcHJpbnRrKCIobm9ubCkiKTsKKwkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CisJCQl9CisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKKwkJCQkgICAgICBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJfQogCX0gZWxzZSBpZiAoaW5mby0+Zm9ybWF0ID09IERBU0RfRk9STUFUX0NETCkgewogCQkvKgogCQkgKiBOZXcgc3R5bGUgQ0RMIGZvcm1hdHRlZCBkaXNrCiAJCSAqLwotCQl1bnNpZ25lZCBpbnQgYmxrOworCQlzZWN0b3JfdCBibGs7CiAJCWludCBjb3VudGVyOwogCiAJCS8qCkBAIC0xNjYsNyArMjA1LDggQEAKIAkJCQkvKiBza2lwIEZNVDQgLyBGTVQ1IC8gRk1UNyBsYWJlbHMgKi8KIAkJCQlpZiAoZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNCddCiAJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzUnXQotCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc3J10pIHsKKwkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNyddCisJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzknXSkgewogCQkJCQlibGsrKzsKIAkJCQkJZGF0YSA9IHJlYWRfZGV2X3NlY3RvcihiZGV2LCBibGsgKgogCQkJCQkJCSAgICAgICAoYmxvY2tzaXplLzUxMiksCkBAIC0xNzQsOCArMjE0LDkgQEAKIAkJCQkJY29udGludWU7CiAJCQkJfQogCi0JCQkJLyogb25seSBGTVQxIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KLQkJCQlpZiAoZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snMSddKQorCQkJCS8qIG9ubHkgRk1UMSBhbmQgOCBsYWJlbHMgdmFsaWQgYXQgdGhpcyBwb2ludCAqLworCQkJCWlmIChmMS5EUzFGTVRJRCAhPSBfYXNjZWJjWycxJ10gJiYKKwkJCQkgICAgZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snOCddKQogCQkJCQlicmVhazsKIAogCQkJCS8qIE9LLCB3ZSBnb3QgdmFsaWQgcGFydGl0aW9uIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAxNGY1MDJiLi45NGFkMTU5IDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC02NjcsMTAgKzY2Nyw3IEBACiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZpbm9kZS0+aV9waXBlLT5mYXN5bmNfcmVhZGVycyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNjg0LDEwICs2ODEsNyBAQAogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3dyaXRlcnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTcwNiwxMSArNzAwLDcgQEAKIAkJCWZhc3luY19oZWxwZXIoLTEsIGZpbHAsIDAsICZwaXBlLT5mYXN5bmNfcmVhZGVycyk7CiAJfQogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IGExYmQ1ZWEuLmViOTM4MDEgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKKysrIGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTEyNCwxMCArMTEyNCw3IEBACiAJCWdvdG8gYXR0cl9lcnJfb3V0OwogCWdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpOwogCi0JcmV0ID0gZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBxdW90YV9nZW5sX2ZhbWlseS5pZCwgR0ZQX05PRlMpOwotCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRVNSQ0gpCi0JCXByaW50ayhLRVJOX0VSUgotCQkJIlZGUzogRmFpbGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIG1lc3NhZ2U6ICVkXG4iLCByZXQpOworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgcXVvdGFfZ2VubF9mYW1pbHkuaWQsIEdGUF9OT0ZTKTsKIAlyZXR1cm47CiBhdHRyX2Vycl9vdXQ6CiAJcHJpbnRrKEtFUk5fRVJSICJWRlM6IE5vdCBlbm91Z2ggc3BhY2UgdG8gY29tcG9zZSBxdW90YSBtZXNzYWdlIVxuIik7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwZjlkMTdmLi40OWQwYmQzIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkb19lbWVyZ2VuY3lfcmVtb3VudCh1bnNpZ25lZCBsb25nIGZvbykKK3N0YXRpYyB2b2lkIGRvX2VtZXJnZW5jeV9yZW1vdW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCkBAIC02OTcsMTIgKzY5NywxOSBAQAogCQlzcGluX2xvY2soJnNiX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmc2JfbG9jayk7CisJa2ZyZWUod29yayk7CiAJcHJpbnRrKCJFbWVyZ2VuY3kgUmVtb3VudCBjb21wbGV0ZVxuIik7CiB9CiAKIHZvaWQgZW1lcmdlbmN5X3JlbW91bnQodm9pZCkKIHsKLQlwZGZsdXNoX29wZXJhdGlvbihkb19lbWVyZ2VuY3lfcmVtb3VudCwgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX2VtZXJnZW5jeV9yZW1vdW50KTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggZWYzNmJjOS4uN2FiYzY1ZiAxMDA2NDQKLS0tIGEvZnMvc3luYy5jCisrKyBiL2ZzL3N5bmMuYwpAQCAtNDIsOSArNDIsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZG9fc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkb19zeW5jKDApOworCWtmcmVlKHdvcmspOworfQorCiB2b2lkIGVtZXJnZW5jeV9zeW5jKHZvaWQpCiB7Ci0JcGRmbHVzaF9vcGVyYXRpb24oZG9fc3luYywgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX3N5bmNfd29yayk7CisJCXNjaGVkdWxlX3dvcmsod29yayk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCBmMmM0NzhjLi4wNzcwM2QzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtMjEsMTUgKzIxLDI4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCisvKgorICogVGhlcmUncyBvbmUgYmluX2J1ZmZlciBmb3IgZWFjaCBvcGVuIGZpbGUuCisgKgorICogZmlscC0+cHJpdmF0ZV9kYXRhIHBvaW50cyB0byBiaW5fYnVmZmVyIGFuZAorICogc3lzZnNfZGlyZW50LT5zX2Jpbl9hdHRyLmJ1ZmZlcnMgcG9pbnRzIHRvIGEgdGhlIGJpbl9idWZmZXIgcworICogc3lzZnNfZGlyZW50LT5zX2Jpbl9hdHRyLmJ1ZmZlcnMgaXMgcHJvdGVjdGVkIGJ5IHN5c2ZzX2Jpbl9sb2NrCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoc3lzZnNfYmluX2xvY2spOworCiBzdHJ1Y3QgYmluX2J1ZmZlciB7Ci0Jc3RydWN0IG11dGV4CW11dGV4OwotCXZvaWQJCSpidWZmZXI7Ci0JaW50CQltbWFwcGVkOworCXN0cnVjdCBtdXRleAkJCW11dGV4OworCXZvaWQJCQkJKmJ1ZmZlcjsKKwlpbnQJCQkJbW1hcHBlZDsKKwlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgCSp2bV9vcHM7CisJc3RydWN0IGZpbGUJCQkqZmlsZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkJbGlzdDsKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTE2OCw2ICsxODEsMTc1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgdm9pZCBiaW5fdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+b3BlbikKKwkJcmV0dXJuOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuOworCisJYmItPnZtX29wcy0+b3Blbih2bWEpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7Cit9CisKK3N0YXRpYyB2b2lkIGJpbl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+Y2xvc2UpCisJCXJldHVybjsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybjsKKworCWJiLT52bV9vcHMtPmNsb3NlKHZtYSk7CisKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK30KKworc3RhdGljIGludCBiaW5fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+ZmF1bHQpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJcmV0ID0gYmItPnZtX29wcy0+ZmF1bHQodm1hLCB2bWYpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiaW5fcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCBwYWdlKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmluX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+YWNjZXNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gYmItPnZtX29wcy0+YWNjZXNzKHZtYSwgYWRkciwgYnVmLCBsZW4sIHdyaXRlKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTlVNQQorc3RhdGljIGludCBiaW5fc2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1lbXBvbGljeSAqbmV3KQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOworCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mc2RhdGE7CisJaW50IHJldDsKKworCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+c2V0X3BvbGljeSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGJiLT52bV9vcHMtPnNldF9wb2xpY3kodm1hLCBuZXcpOworCisJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBtZW1wb2xpY3kgKmJpbl9nZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJc3RydWN0IGJpbl9idWZmZXIgKmJiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKKwlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmdldF9wb2xpY3kpCisJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKKworCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKKworCXBvbCA9IGJiLT52bV9vcHMtPmdldF9wb2xpY3kodm1hLCBhZGRyKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiBwb2w7Cit9CisKK3N0YXRpYyBpbnQgYmluX21pZ3JhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sCisJCQljb25zdCBub2RlbWFza190ICp0bywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPm1pZ3JhdGUpCisJCXJldHVybiAwOworCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBiYi0+dm1fb3BzLT5taWdyYXRlKHZtYSwgZnJvbSwgdG8sIGZsYWdzKTsKKworCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBiaW5fdm1fb3BzID0geworCS5vcGVuCQk9IGJpbl92bWFfb3BlbiwKKwkuY2xvc2UJCT0gYmluX3ZtYV9jbG9zZSwKKwkuZmF1bHQJCT0gYmluX2ZhdWx0LAorCS5wYWdlX21rd3JpdGUJPSBiaW5fcGFnZV9ta3dyaXRlLAorCS5hY2Nlc3MJCT0gYmluX2FjY2VzcywKKyNpZmRlZiBDT05GSUdfTlVNQQorCS5zZXRfcG9saWN5CT0gYmluX3NldF9wb2xpY3ksCisJLmdldF9wb2xpY3kJPSBiaW5fZ2V0X3BvbGljeSwKKwkubWlncmF0ZQk9IGJpbl9taWdyYXRlLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IG1tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTE3OSwxOCArMzYxLDM3IEBACiAJbXV0ZXhfbG9jaygmYmItPm11dGV4KTsKIAogCS8qIG5lZWQgYXR0cl9zZCBmb3IgYXR0ciwgaXRzIHBhcmVudCBmb3Iga29iaiAqLworCXJjID0gLUVOT0RFVjsKIAlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJcmMgPSAtRUlOVkFMOwotCWlmIChhdHRyLT5tbWFwKQotCQlyYyA9IGF0dHItPm1tYXAoa29iaiwgYXR0ciwgdm1hKTsKKwlpZiAoIWF0dHItPm1tYXApCisJCWdvdG8gb3V0X3B1dDsKIAotCWlmIChyYyA9PSAwICYmICFiYi0+bW1hcHBlZCkKLQkJYmItPm1tYXBwZWQgPSAxOwotCWVsc2UKLQkJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJcmMgPSBhdHRyLT5tbWFwKGtvYmosIGF0dHIsIHZtYSk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9wdXQ7CiAKKwkvKgorCSAqIFBvd2VyUEMncyBwY2lfbW1hcCBvZiBsZWdhY3lfbWVtIHVzZXMgc2htZW1femVyb19zZXR1cCgpCisJICogdG8gc2F0aXNmeSB2ZXJzaW9ucyBvZiBYIHdoaWNoIGNyYXNoIGlmIHRoZSBtbWFwIGZhaWxzOiB0aGF0CisJICogc3Vic3RpdHV0ZXMgYSBuZXcgdm1fZmlsZSwgYW5kIHdlIGRvbid0IHRoZW4gd2FudCBiaW5fdm1fb3BzLgorCSAqLworCWlmICh2bWEtPnZtX2ZpbGUgIT0gZmlsZSkKKwkJZ290byBvdXRfcHV0OworCisJcmMgPSAtRUlOVkFMOworCWlmIChiYi0+bW1hcHBlZCAmJiBiYi0+dm1fb3BzICE9IHZtYS0+dm1fb3BzKQorCQlnb3RvIG91dF9wdXQ7CisKKwlyYyA9IDA7CisJYmItPm1tYXBwZWQgPSAxOworCWJiLT52bV9vcHMgPSB2bWEtPnZtX29wczsKKwl2bWEtPnZtX29wcyA9ICZiaW5fdm1fb3BzOworb3V0X3B1dDoKKwlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJjOwpAQCAtMjIzLDggKzQyNCwxMyBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAltdXRleF9pbml0KCZiYi0+bXV0ZXgpOworCWJiLT5maWxlID0gZmlsZTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBiYjsKIAorCW11dGV4X2xvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZCgmYmItPmxpc3QsICZhdHRyX3NkLT5zX2Jpbl9hdHRyLmJ1ZmZlcnMpOworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworCiAJLyogb3BlbiBzdWNjZWVkZWQsIHB1dCBhY3RpdmUgcmVmZXJlbmNlcyAqLwogCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOwogCXJldHVybiAwOwpAQCAtMjM3LDExICs0NDMsMTIgQEAKIAogc3RhdGljIGludCByZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0Jc3RydWN0IHN5c2ZzX2RpcmVudCAqYXR0cl9zZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWlmIChiYi0+bW1hcHBlZCkKLQkJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCWhsaXN0X2RlbCgmYmItPmxpc3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfYmluX2xvY2spOworCiAJa2ZyZWUoYmItPmJ1ZmZlcik7CiAJa2ZyZWUoYmIpOwogCXJldHVybiAwOwpAQCAtMjU2LDYgKzQ2MywyNiBAQAogCS5yZWxlYXNlCT0gcmVsZWFzZSwKIH07CiAKKwordm9pZCB1bm1hcF9iaW5fZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkKQoreworCXN0cnVjdCBiaW5fYnVmZmVyICpiYjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCisJaWYgKHN5c2ZzX3R5cGUoYXR0cl9zZCkgIT0gU1lTRlNfS09CSl9CSU5fQVRUUikKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmc3lzZnNfYmluX2xvY2spOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYmIsIHRtcCwgJmF0dHJfc2QtPnNfYmluX2F0dHIuYnVmZmVycywgbGlzdCkgeworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmItPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkJdW5tYXBfbWFwcGluZ19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAwLCAwLCAxKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKK30KKwogLyoqCiAgKglzeXNmc19jcmVhdGVfYmluX2ZpbGUgLSBjcmVhdGUgYmluYXJ5IGZpbGUgZm9yIG9iamVjdC4KICAqCUBrb2JqOglvYmplY3QuCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDgyZDNiNzkuLjY2YWViNGYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC00MzQsNiArNDM0LDI2IEBACiB9CiAKIC8qKgorICoJc3lzZnNfcGF0aG5hbWUgLSByZXR1cm4gZnVsbCBwYXRoIHRvIHN5c2ZzIGRpcmVudAorICoJQHNkOiBzeXNmc19kaXJlbnQgd2hvc2UgcGF0aCB3ZSB3YW50CisgKglAcGF0aDogY2FsbGVyIGFsbG9jYXRlZCBidWZmZXIKKyAqCisgKglHaXZlcyB0aGUgbmFtZSAiLyIgdG8gdGhlIHN5c2ZzX3Jvb3QgZW50cnk7IGFueSBwYXRoIHJldHVybmVkCisgKglpcyByZWxhdGl2ZSB0byB3aGVyZXZlciBzeXNmcyBpcyBtb3VudGVkLgorICoKKyAqCVhYWDogZG9lcyBubyBlcnJvciBjaGVja2luZyBvbiBAcGF0aCBzaXplCisgKi8KK3N0YXRpYyBjaGFyICpzeXNmc19wYXRobmFtZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCwgY2hhciAqcGF0aCkKK3sKKwlpZiAoc2QtPnNfcGFyZW50KSB7CisJCXN5c2ZzX3BhdGhuYW1lKHNkLT5zX3BhcmVudCwgcGF0aCk7CisJCXN0cmNhdChwYXRoLCAiLyIpOworCX0KKwlzdHJjYXQocGF0aCwgc2QtPnNfbmFtZSk7CisJcmV0dXJuIHBhdGg7Cit9CisKKy8qKgogICoJc3lzZnNfYWRkX29uZSAtIGFkZCBzeXNmc19kaXJlbnQgdG8gcGFyZW50CiAgKglAYWN4dDogYWRkcm0gY29udGV4dCB0byB1c2UKICAqCUBzZDogc3lzZnNfZGlyZW50IHRvIGJlIGFkZGVkCkBAIC00NTgsOCArNDc4LDE2IEBACiAJaW50IHJldDsKIAogCXJldCA9IF9fc3lzZnNfYWRkX29uZShhY3h0LCBzZCk7Ci0JV0FSTihyZXQgPT0gLUVFWElTVCwgS0VSTl9XQVJOSU5HICJzeXNmczogZHVwbGljYXRlIGZpbGVuYW1lICclcycgIgotCQkgICAgICAgImNhbiBub3QgYmUgY3JlYXRlZFxuIiwgc2QtPnNfbmFtZSk7CisJaWYgKHJldCA9PSAtRUVYSVNUKSB7CisJCWNoYXIgKnBhdGggPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwkJV0FSTigxLCBLRVJOX1dBUk5JTkcKKwkJICAgICAic3lzZnM6IGNhbm5vdCBjcmVhdGUgZHVwbGljYXRlIGZpbGVuYW1lICclcydcbiIsCisJCSAgICAgKHBhdGggPT0gTlVMTCkgPyBzZC0+c19uYW1lIDoKKwkJICAgICBzdHJjYXQoc3RyY2F0KHN5c2ZzX3BhdGhuYW1lKGFjeHQtPnBhcmVudF9zZCwgcGF0aCksICIvIiksCisJCSAgICAgICAgICAgIHNkLT5zX25hbWUpKTsKKwkJa2ZyZWUocGF0aCk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgxLDYgKzYwOSw3IEBACiAKIAkJc3lzZnNfZHJvcF9kZW50cnkoc2QpOwogCQlzeXNmc19kZWFjdGl2YXRlKHNkKTsKKwkJdW5tYXBfYmluX2ZpbGUoc2QpOwogCQlzeXNmc19wdXQoc2QpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCAxZjRhM2Y4Li4yODljNDNhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC02NTksMTMgKzY1OSwxNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCk7CiAKIHN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgewotCXN0cnVjdCBrb2JqZWN0IAkJKmtvYmo7CisJc3RydWN0IGxpc3RfaGVhZAl3b3JrcV9saXN0OworCXN0cnVjdCBrb2JqZWN0CQkqa29iajsKIAl2b2lkCQkJKCpmdW5jKSh2b2lkICopOwogCXZvaWQJCQkqZGF0YTsKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiB9OwogCitzdGF0aWMgREVGSU5FX01VVEVYKHN5c2ZzX3dvcmtxX211dGV4KTsKK3N0YXRpYyBMSVNUX0hFQUQoc3lzZnNfd29ya3EpOwogc3RhdGljIHZvaWQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3N0cnVjdCAqc3MgPSBjb250YWluZXJfb2Yod29yaywKQEAgLTY3NCw2ICs2NzcsOSBAQAogCShzcy0+ZnVuYykoc3MtPmRhdGEpOwogCWtvYmplY3RfcHV0KHNzLT5rb2JqKTsKIAltb2R1bGVfcHV0KHNzLT5vd25lcik7CisJbXV0ZXhfbG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCWxpc3RfZGVsKCZzcy0+d29ya3FfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CiAJa2ZyZWUoc3MpOwogfQogCkBAIC02OTUsMTUgKzcwMSwyNSBAQAogICogdW50aWwgQGZ1bmMgcmV0dXJucy4KICAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlIHJlcXVlc3Qgd2FzIHN1Ym1pdHRlZCwgLUVOT01FTSBpZiBzdG9yYWdlIGNvdWxkIG5vdAotICogYmUgYWxsb2NhdGVkLCAtRU5PREVWIGlmIGEgcmVmZXJlbmNlIHRvIEBvd25lciBpc24ndCBhdmFpbGFibGUuCisgKiBiZSBhbGxvY2F0ZWQsIC1FTk9ERVYgaWYgYSByZWZlcmVuY2UgdG8gQG93bmVyIGlzbid0IGF2YWlsYWJsZSwKKyAqIC1FQUdBSU4gaWYgYSBjYWxsYmFjayBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCBmb3IgQGtvYmouCiAgKi8KIGludCBzeXNmc19zY2hlZHVsZV9jYWxsYmFjayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgdm9pZCAoKmZ1bmMpKHZvaWQgKiksCiAJCXZvaWQgKmRhdGEsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewotCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzOworCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzLCAqdG1wOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpCiAJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcywgdG1wLCAmc3lzZnNfd29ya3EsIHdvcmtxX2xpc3QpCisJCWlmIChzcy0+a29iaiA9PSBrb2JqKSB7CisJCQltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisKIAlzcyA9IGttYWxsb2Moc2l6ZW9mKCpzcyksIEdGUF9LRVJORUwpOwogCWlmICghc3MpIHsKIAkJbW9kdWxlX3B1dChvd25lcik7CkBAIC03MTUsNiArNzMxLDEwIEBACiAJc3MtPmRhdGEgPSBkYXRhOwogCXNzLT5vd25lciA9IG93bmVyOwogCUlOSVRfV09SSygmc3MtPndvcmssIHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZzcy0+d29ya3FfbGlzdCk7CisJbXV0ZXhfbG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJnNzLT53b3JrcV9saXN0LCAmc3lzZnNfd29ya3EpOworCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOwogCXNjaGVkdWxlX3dvcmsoJnNzLT53b3JrKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2lub2RlLmMgYi9mcy9zeXNmcy9pbm9kZS5jCmluZGV4IGRmYTNkOTQuLjU1NWYwZmYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2lub2RlLmMKKysrIGIvZnMvc3lzZnMvaW5vZGUuYwpAQCAtMTQ3LDYgKzE0Nyw3IEBACiB7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyOwogCisJaW5vZGUtPmlfcHJpdmF0ZSA9IHN5c2ZzX2dldChzZCk7CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc3lzZnNfYW9wczsKIAlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJnN5c2ZzX2JhY2tpbmdfZGV2X2luZm87CiAJaW5vZGUtPmlfb3AgPSAmc3lzZnNfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTIxNCw2ICsyMTUsMjIgQEAKIAlyZXR1cm4gaW5vZGU7CiB9CiAKKy8qCisgKiBUaGUgc3lzZnNfZGlyZW50IHNlcnZlcyBhcyBib3RoIGFuIGlub2RlIGFuZCBhIGRpcmVjdG9yeSBlbnRyeSBmb3Igc3lzZnMuCisgKiBUbyBwcmV2ZW50IHRoZSBzeXNmcyBpbm9kZSBudW1iZXJzIGZyb20gYmVpbmcgZnJlZWQgcHJlbWF0dXJlbHkgd2UgdGFrZSBhCisgKiByZWZlcmVuY2UgdG8gc3lzZnNfZGlyZW50IGZyb20gdGhlIHN5c2ZzIGlub2RlLiAgQQorICogc3VwZXJfb3BlcmF0aW9ucy5kZWxldGVfaW5vZGUoKSBpbXBsZW1lbnRhdGlvbiBpcyBuZWVkZWQgdG8gZHJvcCB0aGF0CisgKiByZWZlcmVuY2UgdXBvbiBpbm9kZSBkZXN0cnVjdGlvbi4KKyAqLwordm9pZCBzeXNmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCAgPSBpbm9kZS0+aV9wcml2YXRlOworCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWNsZWFyX2lub2RlKGlub2RlKTsKKwlzeXNmc19wdXQoc2QpOworfQorCiBpbnQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3Qgc3lzZnNfYWRkcm1fY3h0IGFjeHQ7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCBhYjM0M2UzLi40OTc0OTk1IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTE3LDExICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKLS8qIFJhbmRvbSBtYWdpYyBudW1iZXIgKi8KLSNkZWZpbmUgU1lTRlNfTUFHSUMgMHg2MjY1NjU3MgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzeXNmc19tb3VudDsKIHN0cnVjdCBzdXBlcl9ibG9jayAqIHN5c2ZzX3NiID0gTlVMTDsKQEAgLTMwLDYgKzI5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzeXNmc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCisJLmRlbGV0ZV9pbm9kZQk9IHN5c2ZzX2RlbGV0ZV9pbm9kZSwKIH07CiAKIHN0cnVjdCBzeXNmc19kaXJlbnQgc3lzZnNfcm9vdCA9IHsKQEAgLTUzLDcgKzUzLDkgQEAKIAlzeXNmc19zYiA9IHNiOwogCiAJLyogZ2V0IHJvb3QgaW5vZGUsIGluaXRpYWxpemUgYW5kIHVubG9jayBpdCAqLworCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKIAlpbm9kZSA9IHN5c2ZzX2dldF9pbm9kZSgmc3lzZnNfcm9vdCk7CisJbXV0ZXhfdW5sb2NrKCZzeXNmc19tdXRleCk7CiAJaWYgKCFpbm9kZSkgewogCQlwcl9kZWJ1Zygic3lzZnM6IGNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3lzZnMuaCBiL2ZzL3N5c2ZzL3N5c2ZzLmgKaW5kZXggOTNjNmQ2Yi4uM2ZhMGQ5OCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKIHN0cnVjdCBzeXNmc19lbGVtX2Jpbl9hdHRyIHsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQkqYmluX2F0dHI7CisJc3RydWN0IGhsaXN0X2hlYWQJYnVmZmVyczsKIH07CiAKIC8qCkBAIC0xNDUsNiArMTQ2LDcgQEAKICAqIGlub2RlLmMKICAqLwogc3RydWN0IGlub2RlICpzeXNmc19nZXRfaW5vZGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwordm9pZCBzeXNmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgc3lzZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwogaW50IHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHN5c2ZzX2lub2RlX2luaXQodm9pZCk7CkBAIC0xNjMsNiArMTY1LDcgQEAKICAqIGJpbi5jCiAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJpbl9mb3BzOwordm9pZCB1bm1hcF9iaW5fZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkKTsKIAogLyoKICAqIHN5bWxpbmsuYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjEwNzY2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qIGlkZS5oOiBGUlYgSURFIGRlY2xhcmF0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKaW5kZXggZTUxY2E2Ny4uNTdjM2Q0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaApAQCAtNTQsNSArNTQsOCBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaCBiL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKaW5kZXggYWZiMzM5Ni4uZjMwNTgzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCBiODQ3NzQxLi40ZDNlNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0xMTcsOSArMTE3LDkgQEAKIHN0cnVjdCBmbG9jayB7CiAJc2hvcnQJbF90eXBlOwogCXNob3J0CWxfd2hlbmNlOwotCW9mZl90CWxfc3RhcnQ7Ci0Jb2ZmX3QJbF9sZW47Ci0JcGlkX3QJbF9waWQ7CisJX19rZXJuZWxfb2ZmX3QJbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdAlsX2xlbjsKKwlfX2tlcm5lbF9waWRfdAlsX3BpZDsKIAlfX0FSQ0hfRkxPQ0tfUEFECiB9OwogI2VuZGlmCkBAIC0xNDAsOSArMTQwLDkgQEAKIHN0cnVjdCBmbG9jazY0IHsKIAlzaG9ydCAgbF90eXBlOwogCXNob3J0ICBsX3doZW5jZTsKLQlsb2ZmX3QgbF9zdGFydDsKLQlsb2ZmX3QgbF9sZW47Ci0JcGlkX3QgIGxfcGlkOworCV9fa2VybmVsX2xvZmZfdCBsX3N0YXJ0OworCV9fa2VybmVsX2xvZmZfdCBsX2xlbjsKKwlfX2tlcm5lbF9waWRfdCAgbF9waWQ7CiAJX19BUkNIX0ZMT0NLNjRfUEFECiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCmluZGV4IDk2OTU3MDEuLjM1NzUyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FSQ0hfU0lfVUlEX1QKLSNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCXVpZF90CisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAlfX2tlcm5lbF91aWQzMl90CiAjZW5kaWYKIAogLyoKQEAgLTQ3LDEzICs0NywxMyBAQAogCiAJCS8qIGtpbGwoKSAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCX0gX2tpbGw7CiAKIAkJLyogUE9TSVguMWIgdGltZXJzICovCiAJCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJX19rZXJuZWxfdGltZXJfdCBfdGlkOwkvKiB0aW1lciBpZCAqLwogCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwogCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKIAkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KQEAgLTYyLDE4ICs2MiwxOCBAQAogCiAJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJc2lndmFsX3QgX3NpZ3ZhbDsKIAkJfSBfcnQ7CiAKIAkJLyogU0lHQ0hMRCAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF9jbG9ja190IF91dGltZTsKKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3N0aW1lOwogCQl9IF9zaWdjaGxkOwogCiAJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCmluZGV4IDYxMjlkNjguLjNiNGZiM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApAQCAtMSw4ICsxLDkgQEAKICNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKICNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBjNjFmYWIxLi5hY2E0MGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC04MCw2ICs4MCwxMSBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCisJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkKIApAQCAtMzA5LDE1ICszMTQsNyBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKLQkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAotCS4gPSBBTElHTig4KTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CisJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCmluZGV4IDlhMGUyMDAuLmJlN2VkNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fTTMyUl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zd2FiLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaAppbmRleCA5Nzk3M2UxLi41NGRhYjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9NMzJSX1NXQUJfSAogI2RlZmluZSBfQVNNX00zMlJfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZGNkZDkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIE1OMTAzMDAgQXJjaC1zcGVjaWZpYyBJREUgY29kZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKiAtIERlcml2ZWQgZnJvbSBpbmNsdWRlL2FzbS1pMzg2L2lkZS5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL2ludGN0bC1yZWdzLmg+Ci0KLSN1bmRlZiBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUwotI2RlZmluZSBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUyAwCi0KLSN1bmRlZiBTVVBQT1JUX1ZMQl9TWU5DCi0jZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAotCi0vKgotICogc29tZSBiaXRzIG5lZWRlZCBmb3IgcGFydHMgb2YgdGhlIElERSBzdWJzeXN0ZW0gdG8gY29tcGlsZQotICovCi0jZGVmaW5lIF9faWRlX21tX2luc3cocG9ydCwgYWRkciwgbikgXAotCWluc3coKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikgXAotCWluc2woKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pIFwKLQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCwgYWRkciwgbikgXAotCW91dHNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCmluZGV4IGNkOWNjNWMuLjA1MTdiNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaApAQCAtMTIxLDQgKzEyMSw5IEBACiAKICNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAogCitzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQoreworCXJldHVybiBjaGFubmVsID8gMTUgOiAxNDsKK30KKwogI2VuZGlmIC8qIF9BU01fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCmluZGV4IDgwYWY5YzQuLmZiNWRhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKaW5kZXggNDUwNGQxYi4uYmQ4MThhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKQEAgLTExLDcgKzExLDcgQEAKICNpZm5kZWYgX0FTTV9TV0FCX0gKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBfX0dOVUNfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9hZXMuaCBiL2luY2x1ZGUvY3J5cHRvL2Flcy5oCmluZGV4IDY1NmE0YzYuLjc1MjRiYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3J5cHRvL2Flcy5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2Flcy5oCkBAIC0xNywxMCArMTcsMTQgQEAKICNkZWZpbmUgQUVTX01BWF9LRVlMRU5HVEgJKDE1ICogMTYpCiAjZGVmaW5lIEFFU19NQVhfS0VZTEVOR1RIX1UzMgkoQUVTX01BWF9LRVlMRU5HVEggLyBzaXplb2YodTMyKSkKIAorLyoKKyAqIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZmlyc3QgdHdvIGZpZWxkcyBhcmUgMTYtYnl0ZSBhbGlnbmVkCisgKiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cnVjdHVyZSwgaS5lLiwgZG9uJ3QgbW92ZSB0aGVtIQorICovCiBzdHJ1Y3QgY3J5cHRvX2Flc19jdHggewotCXUzMiBrZXlfbGVuZ3RoOwogCXUzMiBrZXlfZW5jW0FFU19NQVhfS0VZTEVOR1RIX1UzMl07CiAJdTMyIGtleV9kZWNbQUVTX01BWF9LRVlMRU5HVEhfVTMyXTsKKwl1MzIga2V5X2xlbmd0aDsKIH07CiAKIGV4dGVybiBjb25zdCB1MzIgY3J5cHRvX2Z0X3RhYls0XVsyNTZdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaCBiL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNjNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb21wcmVzczogQ29tcHJlc3Npb24gYWxnb3JpdGhtcyB1bmRlciB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0NSWVBUT19DT01QUkVTU19ICisjZGVmaW5lIF9DUllQVE9fQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKKworc3RydWN0IGNvbXBfcmVxdWVzdCB7CisJY29uc3Qgdm9pZCAqbmV4dF9pbjsJCS8qIG5leHQgaW5wdXQgYnl0ZSAqLworCXZvaWQgKm5leHRfb3V0OwkJCS8qIG5leHQgb3V0cHV0IGJ5dGUgKi8KKwl1bnNpZ25lZCBpbnQgYXZhaWxfaW47CQkvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLworCXVuc2lnbmVkIGludCBhdmFpbF9vdXQ7CQkvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9vdXQgKi8KK307CisKK2VudW0gemxpYl9jb21wX3BhcmFtcyB7CisJWkxJQl9DT01QX0xFVkVMID0gMSwJCS8qIGUuZy4gWl9ERUZBVUxUX0NPTVBSRVNTSU9OICovCisJWkxJQl9DT01QX01FVEhPRCwJCS8qIGUuZy4gWl9ERUZMQVRFRCAqLworCVpMSUJfQ09NUF9XSU5ET1dCSVRTLAkJLyogZS5nLiBNQVhfV0JJVFMgKi8KKwlaTElCX0NPTVBfTUVNTEVWRUwsCQkvKiBlLmcuIERFRl9NRU1fTEVWRUwgKi8KKwlaTElCX0NPTVBfU1RSQVRFR1ksCQkvKiBlLmcuIFpfREVGQVVMVF9TVFJBVEVHWSAqLworCV9fWkxJQl9DT01QX01BWCwKK307CisKKyNkZWZpbmUgWkxJQl9DT01QX01BWAkoX19aTElCX0NPTVBfTUFYIC0gMSkKKworCitlbnVtIHpsaWJfZGVjb21wX3BhcmFtcyB7CisJWkxJQl9ERUNPTVBfV0lORE9XQklUUyA9IDEsCS8qIGUuZy4gREVGX1dCSVRTICovCisJX19aTElCX0RFQ09NUF9NQVgsCit9OworCisjZGVmaW5lIFpMSUJfREVDT01QX01BWAkoX19aTElCX0RFQ09NUF9NQVggLSAxKQorCisKK3N0cnVjdCBjcnlwdG9fcGNvbXAgeworCXN0cnVjdCBjcnlwdG9fdGZtIGJhc2U7Cit9OworCitzdHJ1Y3QgcGNvbXBfYWxnIHsKKwlpbnQgKCpjb21wcmVzc19zZXR1cCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKKwlpbnQgKCpjb21wcmVzc19pbml0KShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pOworCWludCAoKmNvbXByZXNzX3VwZGF0ZSkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJICAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqY29tcHJlc3NfZmluYWwpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGVjb21wcmVzc19zZXR1cCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkJdW5zaWduZWQgaW50IGxlbik7CisJaW50ICgqZGVjb21wcmVzc19pbml0KShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pOworCWludCAoKmRlY29tcHJlc3NfdXBkYXRlKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGVjb21wcmVzc19maW5hbCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisKKwlzdHJ1Y3QgY3J5cHRvX2FsZyBiYXNlOworfTsKKworZXh0ZXJuIHN0cnVjdCBjcnlwdG9fcGNvbXAgKmNyeXB0b19hbGxvY19wY29tcChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCisJCQkJCSAgICAgICB1MzIgbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19wY29tcF90Zm0oc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiAmdGZtLT5iYXNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2ZyZWVfcGNvbXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWNyeXB0b19kZXN0cm95X3RmbSh0Zm0sIGNyeXB0b19wY29tcF90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjb21wX2FsZyAqX19jcnlwdG9fcGNvbXBfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihhbGcsIHN0cnVjdCBwY29tcF9hbGcsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY29tcF9hbGcgKmNyeXB0b19wY29tcF9hbGcoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBfX2NyeXB0b19wY29tcF9hbGcoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pLT5fX2NydF9hbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQl2b2lkICpwYXJhbXMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3Nfc2V0dXAodGZtLCBwYXJhbXMsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX3VwZGF0ZSh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19maW5hbCh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICB2b2lkICpwYXJhbXMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19zZXR1cCh0Zm0sIHBhcmFtcywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19maW5hbCh0Zm0sIHJlcSk7Cit9CisKKyNlbmRpZgkvKiBfQ1JZUFRPX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmYTdiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBTb2Z0d2FyZSBhc3luYyBjcnlwdG8gZGFlbW9uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0NSWVBUX0gKKyNkZWZpbmUgX0NSWVBUT19DUllQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyIHsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgYmFzZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpfX2NyeXB0ZF9hYmxrY2lwaGVyX2Nhc3QoCisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuIChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKil0Zm07Cit9CisKKy8qIGFsZ19uYW1lIHNob3VsZCBiZSBhbGdvcml0aG0gdG8gYmUgY3J5cHRkLWVkICovCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spOworc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKTsKK3ZvaWQgY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmggYi9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QyNTJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIENSWVBUT19XUV9ICisjZGVmaW5lIENSWVBUT19XUV9ICisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprY3J5cHRvX3dxOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9oYXNoLmggYi9pbmNsdWRlL2NyeXB0by9oYXNoLmgKaW5kZXggZDc5N2UxMS4uZDU2YmI3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2hhc2guaApAQCAtMjMxLDYgKzIzMSwxMSBAQAogCXJldHVybiBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2soY3J5cHRvX3NoYXNoX3RmbSh0Zm0pKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShjcnlwdG9fc2hhc2hfdGZtKHRmbSkpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzaGFzaF9hbGcgKl9fY3J5cHRvX3NoYXNoX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewogCXJldHVybiBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3Qgc2hhc2hfYWxnLCBiYXNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmggYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGE4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb21wcmVzczogQ29tcHJlc3Npb24gYWxnb3JpdGhtcyB1bmRlciB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19ICisjZGVmaW5lIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKK2V4dGVybiBpbnQgY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZyk7CitleHRlcm4gaW50IGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZyk7CisKKyNlbmRpZgkvKiBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggOGU3NzM1Ny4uN2NiNTBiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDggKzM2LDcgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgkJLyogRm9yIF9JTyogbWFjcm9zICovCiAjZGVmaW5lIERSTV9JT0NUTF9OUihuKQkJX0lPQ19OUihuKQogI2RlZmluZSBEUk1fSU9DX1ZPSUQJCV9JT0NfTk9ORQpAQCAtNDk3LDggKzQ5Niw4IEBACiAgKiBcc2EgZHJtTW9kZXNldEN0bCgpLgogICovCiBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsIHsKLQl1aW50MzJfdCBjcnRjOwotCXVpbnQzMl90IGNtZDsKKwlfX3UzMiBjcnRjOworCV9fdTMyIGNtZDsKIH07CiAKIC8qKgpAQCAtNTc0LDI5ICs1NzMsMjkgQEAKIC8qKiBEUk1fSU9DVExfR0VNX0NMT1NFIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX2Nsb3NlIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBvYmplY3QgdG8gYmUgY2xvc2VkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIH07CiAKIC8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBSZXR1cm5lZCBnbG9iYWwgbmFtZSAqLwotCXVpbnQzMl90IG5hbWU7CisJX191MzIgbmFtZTsKIH07CiAKIC8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fb3BlbiB7CiAJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLwotCXVpbnQzMl90IG5hbWU7CisJX191MzIgbmFtZTsKIAogCS8qKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIH07CiAKICNpbmNsdWRlICJkcm1fbW9kZS5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggNjAxZDJiZC4uYWUzMDRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC0yNywxMSArMjcsOCBAQAogI2lmbmRlZiBfRFJNX01PREVfSAogI2RlZmluZSBfRFJNX01PREVfSAogCi0jaWYgIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIERSTV9ESVNQTEFZX0lORk9fTEVOCTMyCiAjZGVmaW5lIERSTV9DT05ORUNUT1JfTkFNRV9MRU4JMzIKQEAgLTgxLDQxICs3OCw0MSBAQAogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT04JMQogCiBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gewotCXVpbnQzMl90IGNsb2NrOwotCXVpbnQxNl90IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwotCXVpbnQxNl90IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOworCV9fdTMyIGNsb2NrOworCV9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OworCV9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOwogCi0JdWludDMyX3QgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCisJX191MzIgdnJlZnJlc2g7IC8qIHZlcnRpY2FsIHJlZnJlc2ggKiAxMDAwICovCiAKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHR5cGU7CiAJY2hhciBuYW1lW0RSTV9ESVNQTEFZX01PREVfTEVOXTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcyB7Ci0JdWludDY0X3QgZmJfaWRfcHRyOwotCXVpbnQ2NF90IGNydGNfaWRfcHRyOwotCXVpbnQ2NF90IGNvbm5lY3Rvcl9pZF9wdHI7Ci0JdWludDY0X3QgZW5jb2Rlcl9pZF9wdHI7Ci0JdWludDMyX3QgY291bnRfZmJzOwotCXVpbnQzMl90IGNvdW50X2NydGNzOwotCXVpbnQzMl90IGNvdW50X2Nvbm5lY3RvcnM7Ci0JdWludDMyX3QgY291bnRfZW5jb2RlcnM7Ci0JdWludDMyX3QgbWluX3dpZHRoLCBtYXhfd2lkdGg7Ci0JdWludDMyX3QgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKKwlfX3U2NCBmYl9pZF9wdHI7CisJX191NjQgY3J0Y19pZF9wdHI7CisJX191NjQgY29ubmVjdG9yX2lkX3B0cjsKKwlfX3U2NCBlbmNvZGVyX2lkX3B0cjsKKwlfX3UzMiBjb3VudF9mYnM7CisJX191MzIgY291bnRfY3J0Y3M7CisJX191MzIgY291bnRfY29ubmVjdG9yczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBtaW5fd2lkdGgsIG1heF93aWR0aDsKKwlfX3UzMiBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0OwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGMgewotCXVpbnQ2NF90IHNldF9jb25uZWN0b3JzX3B0cjsKLQl1aW50MzJfdCBjb3VudF9jb25uZWN0b3JzOworCV9fdTY0IHNldF9jb25uZWN0b3JzX3B0cjsKKwlfX3UzMiBjb3VudF9jb25uZWN0b3JzOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCAqLwotCXVpbnQzMl90IGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCAqLworCV9fdTMyIGZiX2lkOyAvKio8IElkIG9mIGZyYW1lYnVmZmVyICovCiAKLQl1aW50MzJfdCB4LCB5OyAvKio8IFBvc2l0aW9uIG9uIHRoZSBmcmFtZXVmZmVyICovCisJX191MzIgeCwgeTsgLyoqPCBQb3NpdGlvbiBvbiB0aGUgZnJhbWV1ZmZlciAqLwogCi0JdWludDMyX3QgZ2FtbWFfc2l6ZTsKLQl1aW50MzJfdCBtb2RlX3ZhbGlkOworCV9fdTMyIGdhbW1hX3NpemU7CisJX191MzIgbW9kZV92YWxpZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTEyNiwxMyArMTIzLDEzIEBACiAjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMJNAogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIgewotCXVpbnQzMl90IGVuY29kZXJfaWQ7Ci0JdWludDMyX3QgZW5jb2Rlcl90eXBlOworCV9fdTMyIGVuY29kZXJfaWQ7CisJX191MzIgZW5jb2Rlcl90eXBlOwogCi0JdWludDMyX3QgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCisJX191MzIgY3J0Y19pZDsgLyoqPCBJZCBvZiBjcnRjICovCiAKLQl1aW50MzJfdCBwb3NzaWJsZV9jcnRjczsKLQl1aW50MzJfdCBwb3NzaWJsZV9jbG9uZXM7CisJX191MzIgcG9zc2libGVfY3J0Y3M7CisJX191MzIgcG9zc2libGVfY2xvbmVzOwogfTsKIAogLyogVGhpcyBpcyBmb3IgY29ubmVjdG9ycyB3aXRoIG11bHRpcGxlIHNpZ25hbCB0eXBlcy4gKi8KQEAgLTE2MSwyMyArMTU4LDIzIEBACiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIHsKIAotCXVpbnQ2NF90IGVuY29kZXJzX3B0cjsKLQl1aW50NjRfdCBtb2Rlc19wdHI7Ci0JdWludDY0X3QgcHJvcHNfcHRyOwotCXVpbnQ2NF90IHByb3BfdmFsdWVzX3B0cjsKKwlfX3U2NCBlbmNvZGVyc19wdHI7CisJX191NjQgbW9kZXNfcHRyOworCV9fdTY0IHByb3BzX3B0cjsKKwlfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CiAKLQl1aW50MzJfdCBjb3VudF9tb2RlczsKLQl1aW50MzJfdCBjb3VudF9wcm9wczsKLQl1aW50MzJfdCBjb3VudF9lbmNvZGVyczsKKwlfX3UzMiBjb3VudF9tb2RlczsKKwlfX3UzMiBjb3VudF9wcm9wczsKKwlfX3UzMiBjb3VudF9lbmNvZGVyczsKIAotCXVpbnQzMl90IGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCi0JdWludDMyX3QgY29ubmVjdG9yX2lkOyAvKio8IElkICovCi0JdWludDMyX3QgY29ubmVjdG9yX3R5cGU7Ci0JdWludDMyX3QgY29ubmVjdG9yX3R5cGVfaWQ7CisJX191MzIgZW5jb2Rlcl9pZDsgLyoqPCBDdXJyZW50IEVuY29kZXIgKi8KKwlfX3UzMiBjb25uZWN0b3JfaWQ7IC8qKjwgSWQgKi8KKwlfX3UzMiBjb25uZWN0b3JfdHlwZTsKKwlfX3UzMiBjb25uZWN0b3JfdHlwZV9pZDsKIAotCXVpbnQzMl90IGNvbm5lY3Rpb247Ci0JdWludDMyX3QgbW1fd2lkdGgsIG1tX2hlaWdodDsgLyoqPCBIeFcgaW4gbWlsbGltZXRlcnMgKi8KLQl1aW50MzJfdCBzdWJwaXhlbDsKKwlfX3UzMiBjb25uZWN0aW9uOworCV9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCisJX191MzIgc3VicGl4ZWw7CiB9OwogCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfUEVORElORwkoMTw8MCkKQEAgLTE4Nyw0NiArMTg0LDQ2IEBACiAjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQgkoMTw8NCkKIAogc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gewotCXVpbnQ2NF90IHZhbHVlOworCV9fdTY0IHZhbHVlOwogCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3Byb3BlcnR5IHsKLQl1aW50NjRfdCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLwotCXVpbnQ2NF90IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLworCV9fdTY0IHZhbHVlc19wdHI7IC8qIHZhbHVlcyBhbmQgYmxvYiBsZW5ndGhzICovCisJX191NjQgZW51bV9ibG9iX3B0cjsgLyogZW51bSBhbmQgYmxvYiBpZCBwdHJzICovCiAKLQl1aW50MzJfdCBwcm9wX2lkOwotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgZmxhZ3M7CiAJY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKIAotCXVpbnQzMl90IGNvdW50X3ZhbHVlczsKLQl1aW50MzJfdCBjb3VudF9lbnVtX2Jsb2JzOworCV9fdTMyIGNvdW50X3ZhbHVlczsKKwlfX3UzMiBjb3VudF9lbnVtX2Jsb2JzOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgewotCXVpbnQ2NF90IHZhbHVlOwotCXVpbnQzMl90IHByb3BfaWQ7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTY0IHZhbHVlOworCV9fdTMyIHByb3BfaWQ7CisJX191MzIgY29ubmVjdG9yX2lkOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIHsKLQl1aW50MzJfdCBibG9iX2lkOwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50NjRfdCBkYXRhOworCV9fdTMyIGJsb2JfaWQ7CisJX191MzIgbGVuZ3RoOworCV9fdTY0IGRhdGE7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKLQl1aW50MzJfdCBmYl9pZDsKLQl1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OwotCXVpbnQzMl90IHBpdGNoOwotCXVpbnQzMl90IGJwcDsKLQl1aW50MzJfdCBkZXB0aDsKKwlfX3UzMiBmYl9pZDsKKwlfX3UzMiB3aWR0aCwgaGVpZ2h0OworCV9fdTMyIHBpdGNoOworCV9fdTMyIGJwcDsKKwlfX3UzMiBkZXB0aDsKIAkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCB7Ci0JdWludDMyX3QgY29ubmVjdG9yX2lkOworCV9fdTMyIGNvbm5lY3Rvcl9pZDsKIAlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAKQEAgLTI0OCwyNCArMjQ1LDI0IEBACiAgKiAgICB5CiAgKi8KIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IgewotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IGNydGNfaWQ7Ci0JaW50MzJfdCB4OwotCWludDMyX3QgeTsKLQl1aW50MzJfdCB3aWR0aDsKLQl1aW50MzJfdCBoZWlnaHQ7CisJX191MzIgZmxhZ3M7CisJX191MzIgY3J0Y19pZDsKKwlfX3MzMiB4OworCV9fczMyIHk7CisJX191MzIgd2lkdGg7CisJX191MzIgaGVpZ2h0OwogCS8qIGRyaXZlciBzcGVjaWZpYyBoYW5kbGUgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKLQl1aW50MzJfdCBjcnRjX2lkOwotCXVpbnQzMl90IGdhbW1hX3NpemU7CisJX191MzIgY3J0Y19pZDsKKwlfX3UzMiBnYW1tYV9zaXplOwogCiAJLyogcG9pbnRlcnMgdG8gYXJyYXlzICovCi0JdWludDY0X3QgcmVkOwotCXVpbnQ2NF90IGdyZWVuOwotCXVpbnQ2NF90IGJsdWU7CisJX191NjQgcmVkOworCV9fdTY0IGdyZWVuOworCV9fdTY0IGJsdWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDkxMmNkNTIuLjY3ZTMzNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMzAsNyArMzAsNyBAQAogLyogUGxlYXNlIG5vdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIGFsbCBzdHJ1Y3RzIGRlZmluZWQgaGVyZSBhcmUKICAqIHN1YmplY3QgdG8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgY29uc3RyYWludHMuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSAiZHJtLmgiCiAKIC8qIEVhY2ggcmVnaW9uIGlzIGEgbWluaW11bSBvZiAxNmssIGFuZCB0aGVyZSBhcmUgYXQgbW9zdCAyNTUgb2YgdGhlbS4KQEAgLTExNiwxNSArMTE2LDE1IEBACiAKIAkvKiBmaWxsIG91dCBzb21lIHNwYWNlIGZvciBvbGQgdXNlcnNwYWNlIHRyaXBsZSBidWZmZXIgKi8KIAlkcm1faGFuZGxlX3QgdW51c2VkX2hhbmRsZTsKLQl1aW50MzJfdCB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOworCV9fdTMyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CiAKIAkvKiBidWZmZXIgb2JqZWN0IGhhbmRsZXMgZm9yIHN0YXRpYyBidWZmZXJzLiBNYXkgY2hhbmdlCiAJICogb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNsaWVudC4KIAkgKi8KLQl1aW50MzJfdCBmcm9udF9ib19oYW5kbGU7Ci0JdWludDMyX3QgYmFja19ib19oYW5kbGU7Ci0JdWludDMyX3QgdW51c2VkX2JvX2hhbmRsZTsKLQl1aW50MzJfdCBkZXB0aF9ib19oYW5kbGU7CisJX191MzIgZnJvbnRfYm9faGFuZGxlOworCV9fdTMyIGJhY2tfYm9faGFuZGxlOworCV9fdTMyIHVudXNlZF9ib19oYW5kbGU7CisJX191MzIgZGVwdGhfYm9faGFuZGxlOwogCiB9IGRybV9pOTE1X3NhcmVhX3Q7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9od3NfYWRkciB7Ci0JdWludDY0X3QgYWRkcjsKKwlfX3U2NCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgewpAQCAtMzM1LDEyICszMzUsMTIgQEAKIAkgKiBCZWdpbm5pbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X3N0YXJ0OworCV9fdTY0IGd0dF9zdGFydDsKIAkvKioKIAkgKiBFbmRpbmcgb2Zmc2V0IGluIHRoZSBHVFQgdG8gYmUgbWFuYWdlZCBieSB0aGUgRFJNIG1lbW9yeQogCSAqIG1hbmFnZXIuCiAJICovCi0JdWludDY0X3QgZ3R0X2VuZDsKKwlfX3U2NCBndHRfZW5kOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewpAQCAtMzQ5LDk0ICszNDksOTQgQEAKIAkgKgogCSAqIFRoZSAocGFnZS1hbGlnbmVkKSBhbGxvY2F0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdCB3aWxsIGJlIHJldHVybmVkLgogCSAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIAkvKioKIAkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCiAJICoKIAkgKiBPYmplY3QgaGFuZGxlcyBhcmUgbm9uemVyby4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHJlYWQgZnJvbSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byB3cml0ZSB0aGUgZGF0YSBpbnRvLgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBkYXRhX3B0cjsKKwlfX3U2NCBkYXRhX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHdyaXR0ZW4gdG8uICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW50byB0aGUgb2JqZWN0IHRvIHdyaXRlIHRvICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKiogTGVuZ3RoIG9mIGRhdGEgdG8gd3JpdGUgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUG9pbnRlciB0byByZWFkIHRoZSBkYXRhIGZyb20uCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IGRhdGFfcHRyOworCV9fdTY0IGRhdGFfcHRyOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKgogCSAqIExlbmd0aCBvZiBkYXRhIHRvIG1hcC4KIAkgKgogCSAqIFRoZSB2YWx1ZSB3aWxsIGJlIHBhZ2UtYWxpZ25lZC4KIAkgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBhZGRyX3B0cjsKKwlfX3U2NCBhZGRyX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9ndHQgewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKioKIAkgKiBGYWtlIG9mZnNldCB0byB1c2UgZm9yIHN1YnNlcXVlbnQgbW1hcCBjYWxsCiAJICoKIAkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZvciAzMi82NCBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4gewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE5ldyByZWFkIGRvbWFpbnMgKi8KLQl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisJX191MzIgcmVhZF9kb21haW5zOwogCiAJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggewogCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHsKQEAgLTQ0OCwxNiArNDQ4LDE2IEBACiAJICogYSByZWxvY2F0aW9uIGxpc3QgZm9yIHN0YXRlIGJ1ZmZlcnMgYW5kIG5vdCByZS13cml0ZSBpdCBwZXIKIAkgKiBleGVjIHVzaW5nIHRoZSBidWZmZXIuCiAJICovCi0JdWludDMyX3QgdGFyZ2V0X2hhbmRsZTsKKwlfX3UzMiB0YXJnZXRfaGFuZGxlOwogCiAJLyoqCiAJICogVmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhlIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0byBtYWtlIHVwCiAJICogdGhlIHJlbG9jYXRpb24gZW50cnkuCiAJICovCi0JdWludDMyX3QgZGVsdGE7CisJX191MzIgZGVsdGE7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBidWZmZXIgdGhlIHJlbG9jYXRpb24gZW50cnkgd2lsbCBiZSB3cml0dGVuIGludG8gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCiAJLyoqCiAJICogT2Zmc2V0IHZhbHVlIG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRoYXQgdGhlIHJlbG9jYXRpb24gZW50cnkgd2FzIGxhc3QKQEAgLTQ2NywxMiArNDY3LDEyIEBACiAJICogYW5kIHdyaXRpbmcgdGhlIHJlbG9jYXRpb24uICBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gYmFjayBvdXQgYnkKIAkgKiB0aGUgZXhlY2J1ZmZlciBpb2N0bCB3aGVuIHRoZSByZWxvY2F0aW9uIGlzIHdyaXR0ZW4uCiAJICovCi0JdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0OworCV9fdTY0IHByZXN1bWVkX29mZnNldDsKIAogCS8qKgogCSAqIFRhcmdldCBtZW1vcnkgZG9tYWlucyByZWFkIGJ5IHRoaXMgb3BlcmF0aW9uLgogCSAqLwotCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwlfX3UzMiByZWFkX2RvbWFpbnM7CiAKIAkvKioKIAkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KQEAgLTQ4MSw3ICs0ODEsNyBAQAogCSAqIGV4ZWNidWZmZXIgb3BlcmF0aW9uLCBzbyB0aGF0IHdoZXJlIHRoZXJlIGFyZSBjb25mbGljdHMsCiAJICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgZ2V0IC1FSU5WQUwgYmFjay4KIAkgKi8KLQl1aW50MzJfdCB3cml0ZV9kb21haW47CisJX191MzIgd3JpdGVfZG9tYWluOwogfTsKIAogLyoqIEB7CkBAIC01MTIsMjQgKzUxMiwyNCBAQAogCSAqIFVzZXIncyBoYW5kbGUgZm9yIGEgYnVmZmVyIHRvIGJlIGJvdW5kIGludG8gdGhlIEdUVCBmb3IgdGhpcwogCSAqIG9wZXJhdGlvbi4KIAkgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KLQl1aW50MzJfdCByZWxvY2F0aW9uX2NvdW50OworCV9fdTMyIHJlbG9jYXRpb25fY291bnQ7CiAJLyoqCiAJICogUG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgY29udGFpbmluZwogCSAqIHRoZSByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gdGhpcyBidWZmZXIuCiAJICovCi0JdWludDY0X3QgcmVsb2NzX3B0cjsKKwlfX3U2NCByZWxvY3NfcHRyOwogCiAJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBvZmZzZXQgb2YgdGhlIG9iamVjdCwgZm9yIGZ1dHVyZQogCSAqIHByZXN1bWVkX29mZnNldCB3cml0ZXMuCiAJICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciB7CkBAIC01NDMsNDQgKzU0Myw0NCBAQAogCSAqIGEgYnVmZmVyIGlzIHBlcmZvcm1pbmcgcmVmZXIgdG8gYnVmZmVycyB0aGF0IGhhdmUgYWxyZWFkeSBhcHBlYXJlZAogCSAqIGluIHRoZSB2YWxpZGF0ZSBsaXN0LgogCSAqLwotCXVpbnQ2NF90IGJ1ZmZlcnNfcHRyOwotCXVpbnQzMl90IGJ1ZmZlcl9jb3VudDsKKwlfX3U2NCBidWZmZXJzX3B0cjsKKwlfX3UzMiBidWZmZXJfY291bnQ7CiAKIAkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KLQl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OwogCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCi0JdWludDMyX3QgYmF0Y2hfbGVuOwotCXVpbnQzMl90IERSMTsKLQl1aW50MzJfdCBEUjQ7Ci0JdWludDMyX3QgbnVtX2NsaXByZWN0czsKKwlfX3UzMiBiYXRjaF9sZW47CisJX191MzIgRFIxOworCV9fdTMyIERSNDsKKwlfX3UzMiBudW1fY2xpcHJlY3RzOwogCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLwotCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7CisJX191NjQgY2xpcHJlY3RzX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgcGlubmVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAogCS8qKiBhbGlnbm1lbnQgcmVxdWlyZWQgd2l0aGluIHRoZSBhcGVydHVyZSAqLwotCXVpbnQ2NF90IGFsaWdubWVudDsKKwlfX3U2NCBhbGlnbm1lbnQ7CiAKIAkvKiogUmV0dXJuZWQgR1RUIG9mZnNldCBvZiB0aGUgYnVmZmVyLiAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gY2hlY2sgZm9yIGJ1c3kgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCi0JdWludDMyX3QgYnVzeTsKKwlfX3UzMiBidXN5OwogfTsKIAogI2RlZmluZSBJOTE1X1RJTElOR19OT05FCTAKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBoYXZlIGl0cyB0aWxpbmcgc3RhdGUgdXBkYXRlZCAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKQEAgLTYxMSw0NyArNjExLDQ3IEBACiAJICoKIAkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgogCSAqIEk5MTVfVElMSU5HX1kuCiAJICovCi0JdWludDMyX3Qgc3RyaWRlOworCV9fdTMyIHN0cmlkZTsKIAogCS8qKgogCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKIAkgKiBtbWFwIG1hcHBpbmcuCiAJICovCi0JdWludDMyX3Qgc3dpenpsZV9tb2RlOworCV9fdTMyIHN3aXp6bGVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X3RpbGluZyB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGdldCB0aWxpbmcgc3RhdGUgZm9yLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiAKIAkvKioKIAkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAogCSAqIEk5MTVfVElMSU5HX1kpLgogCSAqLwotCXVpbnQzMl90IHRpbGluZ19tb2RlOworCV9fdTMyIHRpbGluZ19tb2RlOwogCiAJLyoqCiAJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAogCSAqIG1tYXAgbWFwcGluZy4KIAkgKi8KLQl1aW50MzJfdCBzd2l6emxlX21vZGU7CisJX191MzIgc3dpenpsZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfYXBlcnR1cmUgewogCS8qKiBUb3RhbCBzaXplIG9mIHRoZSBhcGVydHVyZSB1c2VkIGJ5IGk5MTVfZ2VtX2V4ZWNidWZmZXIsIGluIGJ5dGVzICovCi0JdWludDY0X3QgYXBlcl9zaXplOworCV9fdTY0IGFwZXJfc2l6ZTsKIAogCS8qKgogCSAqIEF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgYXBlcnR1cmUgdXNlZCBieSBpOTE1X2dlbV9leGVjYnVmZmVyLCBpbgogCSAqIGJ5dGVzCiAJICovCi0JdWludDY0X3QgYXBlcl9hdmFpbGFibGVfc2l6ZTsKKwlfX3U2NCBhcGVyX2F2YWlsYWJsZV9zaXplOwogfTsKIAogI2VuZGlmCQkJCS8qIF9JOTE1X0RSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oIGIvaW5jbHVkZS9kcm0vbWdhX2RybS5oCmluZGV4IDk0NGI1MGEuLjMyNWZkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL21nYV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKQEAgLTM1LDYgKzM1LDggQEAKICNpZm5kZWYgX19NR0FfRFJNX0hfXwogI2RlZmluZSBfX01HQV9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWHNlcnZlciBmaWxlIChtZ2Ffc2FyZWEuaCkKICAqLwpAQCAtMjU1LDggKzI1Nyw4IEBACiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfSUxPQUQgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfSUxPQUQsIGRybV9tZ2FfaWxvYWRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9CTElUICAgICBEUk1fSU9XKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9CTElULCBkcm1fbWdhX2JsaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9HRVRQQVJBTSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9HRVRQQVJBTSwgZHJtX21nYV9nZXRwYXJhbV90KQotI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCB1aW50MzJfdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIHVpbnQzMl90KQorI2RlZmluZSBEUk1fSU9DVExfTUdBX1NFVF9GRU5DRSAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfU0VUX0ZFTkNFLCBfX3UzMikKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9XQUlUX0ZFTkNFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1dBSVRfRkVOQ0UsIF9fdTMyKQogI2RlZmluZSBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfRE1BX0JPT1RTVFJBUCwgZHJtX21nYV9kbWFfYm9vdHN0cmFwX3QpCiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fbWdhX3dhcnBfaW5kZXggewpAQCAtMzEwLDcgKzMxMiw3IEBACiAJICovCiAJLypAeyAqLwogCXVuc2lnbmVkIGxvbmcgdGV4dHVyZV9oYW5kbGU7IC8qKjwgSGFuZGxlIHVzZWQgdG8gbWFwIEFHUCB0ZXh0dXJlcy4gKi8KLQl1aW50MzJfdCB0ZXh0dXJlX3NpemU7CSAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgQUdQIHRleHR1cmUgcmVnaW9uLiAqLworCV9fdTMyIHRleHR1cmVfc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBBR1AgdGV4dHVyZSByZWdpb24uICovCiAJLypAfSAqLwogCiAJLyoqCkBAIC0zMTksNyArMzIxLDcgQEAKIAkgKiBPbiByZXR1cm4gZnJvbSB0aGUgRFJNX01HQV9ETUFfQk9PVFNUUkFQIGlvY3RsLCB0aGlzIGZpZWxkIHdpbGwgYmUKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICovCi0JdWludDMyX3QgcHJpbWFyeV9zaXplOworCV9fdTMyIHByaW1hcnlfc2l6ZTsKIAogCS8qKgogCSAqIFJlcXVlc3RlZCBudW1iZXIgb2Ygc2Vjb25kYXJ5IERNQSBidWZmZXJzLgpAQCAtMzI5LDcgKzMzMSw3IEBACiAJICogYWxsb2NhdGVkLiAgUGFydGljdWxhcmx5IHdoZW4gUENJIERNQSBpcyB1c2VkLCB0aGlzIG1heSBiZQogCSAqIChzdWJ0YW50aWFsbHkpIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZC4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX2NvdW50OworCV9fdTMyIHNlY29uZGFyeV9iaW5fY291bnQ7CiAKIAkvKioKIAkgKiBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNoIHNlY29uZGFyeSBETUEgYnVmZmVyLgpAQCAtMzM4LDcgKzM0MCw3IEBACiAJICogZG1hX21nYV9kbWFfYm9vdHN0cmFwOjpzZWNvbmRhcnlfYmluX2NvdW50LCBpdCBpcyBcYiBub3QgYWxsb3dlZAogCSAqIHRvIHJlZHVjZSBkbWFfbWdhX2RtYV9ib290c3RyYXA6OnNlY29uZGFyeV9iaW5fc2l6ZS4KIAkgKi8KLQl1aW50MzJfdCBzZWNvbmRhcnlfYmluX3NpemU7CisJX191MzIgc2Vjb25kYXJ5X2Jpbl9zaXplOwogCiAJLyoqCiAJICogQml0LXdpc2UgbWFzayBvZiBBR1BTVEFUMl8qIHZhbHVlcy4gIEN1cnJlbnRseSBvbmx5IFxjIEFHUFNUQVQyXzFYLApAQCAtMzUwLDEyICszNTIsMTIgQEAKIAkgKiBmaWxsZWQgaW4gd2l0aCB0aGUgYWN0dWFsIEFHUCBtb2RlLiAgSWYgQUdQIHdhcyBub3QgYXZhaWxhYmxlCiAJICogKGkuZS4sIFBDSSBETUEgd2FzIHVzZWQpLCB0aGlzIHZhbHVlIHdpbGwgYmUgemVyby4KIAkgKi8KLQl1aW50MzJfdCBhZ3BfbW9kZTsKKwlfX3UzMiBhZ3BfbW9kZTsKIAogCS8qKgogCSAqIERlc2lyZWQgQUdQIEdBUlQgc2l6ZSwgbWVhc3VyZWQgaW4gbWVnYWJ5dGVzLgogCSAqLwotCXVpbnQ4X3QgYWdwX3NpemU7CisJX191OCBhZ3Bfc2l6ZTsKIH0gZHJtX21nYV9kbWFfYm9vdHN0cmFwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfY2xlYXIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDczZmY1MWYuLjcyZWNmNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpZm5kZWYgX19SQURFT05fRFJNX0hfXwogI2RlZmluZSBfX1JBREVPTl9EUk1fSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIGFueSBvZiB0aGVzZSBkZWZpbmVzLCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZQogICogZGVmaW5lcyBpbiB0aGUgWCBzZXJ2ZXIgZmlsZSAocmFkZW9uX3NhcmVhLmgpCiAgKi8KQEAgLTcyMiw3ICs3MjQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3NldHBhcmFtIHsKIAl1bnNpZ25lZCBpbnQgcGFyYW07Ci0JaW50NjRfdCB2YWx1ZTsKKwlfX3M2NCB2YWx1ZTsKIH0gZHJtX3JhZGVvbl9zZXRwYXJhbV90OwogCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9GQl9MT0NBVElPTiAgICAxCS8qIGRldGVybWluZWQgZnJhbWVidWZmZXIgbG9jYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaCBiL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaAppbmRleCBhM2I1YzEwLi4xNzA3ODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS92aWFfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vdmlhX2RybS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIF9WSUFfRFJNX0hfCiAjZGVmaW5lIF9WSUFfRFJNX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBXQVJOSU5HOiBUaGVzZSBkZWZpbmVzIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCB0aGUgWHNlcnZlciB1c2VzLgogICogaWYgeW91IGNoYW5nZSB0aGVtLCB5b3UgbXVzdCBjaGFuZ2UgdGhlIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIuCiAgKi8KQEAgLTExNCwxOSArMTE2LDE5IEBACiAjZGVmaW5lIFZJQV9NRU1fVU5LTk9XTiA0CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9hZ3BfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90IG9mZnNldDsKLQl1aW50MzJfdCBzaXplOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2ZiX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBjb250ZXh0OwotCXVpbnQzMl90IHR5cGU7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBjb250ZXh0OworCV9fdTMyIHR5cGU7CisJX191MzIgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogfSBkcm1fdmlhX21lbV90OwpAQCAtMTQ4LDkgKzE1MCw5IEBACiAJCVZJQV9GVVRFWF9XQUlUID0gMHgwMCwKIAkJVklBX0ZVVEVYX1dBS0UgPSAwWDAxCiAJfSBmdW5jOwotCXVpbnQzMl90IG1zOwotCXVpbnQzMl90IGxvY2s7Ci0JdWludDMyX3QgdmFsOworCV9fdTMyIG1zOworCV9fdTMyIGxvY2s7CisJX191MzIgdmFsOwogfSBkcm1fdmlhX2Z1dGV4X3Q7CiAKIHR5cGVkZWYgc3RydWN0IF9kcm1fdmlhX2RtYV9pbml0IHsKQEAgLTIxMSw3ICsyMTMsNyBAQAogCQlWSUFfQ01EQlVGX0xBRyA9IDB4MDIKIAl9IGZ1bmM7CiAJaW50IHdhaXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBzaXplOwogfSBkcm1fdmlhX2NtZGJ1Zl9zaXplX3Q7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC0yMzYsOCArMjM4LDggQEAKIHN0cnVjdCBkcm1fdmlhX3dhaXRfaXJxX3JlcXVlc3QgewogCXVuc2lnbmVkIGlycTsKIAl2aWFfaXJxX3NlcV90eXBlX3QgdHlwZTsKLQl1aW50MzJfdCBzZXF1ZW5jZTsKLQl1aW50MzJfdCBzaWduYWw7CisJX191MzIgc2VxdWVuY2U7CisJX191MzIgc2lnbmFsOwogfTsKIAogdHlwZWRlZiB1bmlvbiBkcm1fdmlhX2lycXdhaXQgewpAQCAtMjQ2LDcgKzI0OCw3IEBACiB9IGRybV92aWFfaXJxd2FpdF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2JsaXRzeW5jIHsKLQl1aW50MzJfdCBzeW5jX2hhbmRsZTsKKwlfX3UzMiBzeW5jX2hhbmRsZTsKIAl1bnNpZ25lZCBlbmdpbmU7CiB9IGRybV92aWFfYmxpdHN5bmNfdDsKIApAQCAtMjU3LDE2ICsyNTksMTYgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fdmlhX2RtYWJsaXQgewotCXVpbnQzMl90IG51bV9saW5lczsKLQl1aW50MzJfdCBsaW5lX2xlbmd0aDsKKwlfX3UzMiBudW1fbGluZXM7CisJX191MzIgbGluZV9sZW5ndGg7CiAKLQl1aW50MzJfdCBmYl9hZGRyOwotCXVpbnQzMl90IGZiX3N0cmlkZTsKKwlfX3UzMiBmYl9hZGRyOworCV9fdTMyIGZiX3N0cmlkZTsKIAogCXVuc2lnbmVkIGNoYXIgKm1lbV9hZGRyOwotCXVpbnQzMl90IG1lbV9zdHJpZGU7CisJX191MzIgbWVtX3N0cmlkZTsKIAotCXVpbnQzMl90IGZsYWdzOworCV9fdTMyIGZsYWdzOwogCWludCB0b19mYjsKIAogCWRybV92aWFfYmxpdHN5bmNfdCBzeW5jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAxMDZjM2JhLi5lOTU4MWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTE1LDYgKzExNSw3IEBACiBoZWFkZXIteSArPSBtdGlvLmgKIGhlYWRlci15ICs9IG5jcF9uby5oCiBoZWFkZXIteSArPSBuZWlnaGJvdXIuaAoraGVhZGVyLXkgKz0gbmV0X2Ryb3Btb24uaAogaGVhZGVyLXkgKz0gbmV0ZmlsdGVyX2FycC5oCiBoZWFkZXIteSArPSBuZXRyb20uaAogaGVhZGVyLXkgKz0gbmZzMi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaCBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCmluZGV4IDExMGM2MDAuLmY2Nzc4ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCkBAIC03NywyMCArNzcsMjAgQEAKICAqIFRoZSAicHJvdCIgZG93biBiZWxvdyBuZWVkcyBzdGlsbCBhICJzbGVlcCIgZmxhZyBzb21laG93IC4uLgogICovCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3NlZ21lbnQgewotCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLwotCXNpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLwotCWludCBwcm90OwkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0OwkvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCisJX19rZXJuZWxfc2l6ZV90IHBnX2NvdW50OwkvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgICovCisJaW50IHByb3Q7CQkJLyogcHJvdCBmbGFncyBmb3IgbW1hcCAgICAgICAgICAqLwogfSBhZ3Bfc2VnbWVudDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9yZWdpb24gewotCXBpZF90IHBpZDsJCS8qIHBpZCBvZiBwcm9jZXNzICAgICAgICAgICAgICAgKi8KLQlzaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAgICAgICAgICovCisJX19rZXJuZWxfcGlkX3QgcGlkOwkJLyogcGlkIG9mIHByb2Nlc3MgICAgICAgKi8KKwlfX2tlcm5lbF9zaXplX3Qgc2VnX2NvdW50OwkvKiBudW1iZXIgb2Ygc2VnbWVudHMgICAqLwogCXN0cnVjdCBfYWdwX3NlZ21lbnQgKnNlZ19saXN0OwogfSBhZ3BfcmVnaW9uOwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX2FsbG9jYXRlIHsKIAlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLwotCXNpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLworCV9fa2VybmVsX3NpemVfdCBwZ19jb3VudDsvKiBudW1iZXIgb2YgcGFnZXMgICAgICAgICAgICAgKi8KIAlfX3UzMiB0eXBlOwkJLyogMCA9PSBub3JtYWwsIG90aGVyIGRldnNwZWMgICAqLwogICAgCV9fdTMyIHBoeXNpY2FsOyAgICAgICAgIC8qIGRldmljZSBzcGVjaWZpYyAoc29tZSBkZXZpY2VzICAKIAkJCQkgKiBuZWVkIGEgcGh5cyBhZGRyZXNzIG9mIHRoZSAgICAgCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9iaW5kIHsKIAlpbnQga2V5OwkJLyogdGFnIG9mIGFsbG9jYXRpb24gICAgICAgICAgICAqLwotCW9mZl90IHBnX3N0YXJ0OwkJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworCV9fa2VybmVsX29mZl90IHBnX3N0YXJ0Oy8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KIH0gYWdwX2JpbmQ7CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfdW5iaW5kIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IGExOTE2MDcuLmNkNGJjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMjM1LDggKzIzNSw2IEBACiAKIAogc3RydWN0IGFyY25ldF9sb2NhbCB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAl1aW50OF90IGNvbmZpZywJCS8qIGN1cnJlbnQgdmFsdWUgb2YgQ09ORklHIHJlZ2lzdGVyICovCiAJCXRpbWVvdXQsCS8qIEV4dGVuZGVkIHRpbWVvdXQgZm9yIENPTTIwMDIwICovCiAJCWJhY2twbGFuZSwJLyogQmFja3BsYW5lIGZsYWcgZm9yIENPTTIwMDIwICovCkBAIC0zMzUsNyArMzMzLDEyIEBACiAKIHZvaWQgYXJjbmV0X3VucmVnaXN0ZXJfcHJvdG8oc3RydWN0IEFyY1Byb3RvICpwcm90byk7CiBpcnFyZXR1cm5fdCBhcmNuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNoYXIgKm5hbWUpOworc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2Rldihjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCQkJCS8qIF9MSU5VWF9BUkNERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGEuaCBiL2luY2x1ZGUvbGludXgvYXRhLmgKaW5kZXggOWEwNjFhYy4uNjYxN2M5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YS5oCkBAIC0xMDgsNiArMTA4LDggQEAKIAlBVEFfUElPNQkJPSBBVEFfUElPNCB8ICgxIDw8IDUpLAogCUFUQV9QSU82CQk9IEFUQV9QSU81IHwgKDEgPDwgNiksCiAKKwlBVEFfUElPNF9PTkxZCQk9ICgxIDw8IDQpLAorCiAJQVRBX1NXRE1BMAkJPSAoMSA8PCAwKSwKIAlBVEFfU1dETUExCQk9IEFUQV9TV0RNQTAgfCAoMSA8PCAxKSwKIAlBVEFfU1dETUEyCQk9IEFUQV9TV0RNQTEgfCAoMSA8PCAyKSwKQEAgLTExNyw2ICsxMTksOCBAQAogCUFUQV9NV0RNQTAJCT0gKDEgPDwgMCksCiAJQVRBX01XRE1BMQkJPSBBVEFfTVdETUEwIHwgKDEgPDwgMSksCiAJQVRBX01XRE1BMgkJPSBBVEFfTVdETUExIHwgKDEgPDwgMiksCisJQVRBX01XRE1BMwkJPSBBVEFfTVdETUEyIHwgKDEgPDwgMyksCisJQVRBX01XRE1BNAkJPSBBVEFfTVdETUEzIHwgKDEgPDwgNCksCiAKIAlBVEFfTVdETUExMl9PTkxZCT0gKDEgPDwgMSkgfCAoMSA8PCAyKSwKIAlBVEFfTVdETUEyX09OTFkJCT0gKDEgPDwgMiksCkBAIC0xMzEsNiArMTM1LDggQEAKIAlBVEFfVURNQTcJCT0gQVRBX1VETUE2IHwgKDEgPDwgNyksCiAJLyogQVRBX1VETUE3IGlzIGp1c3QgZm9yIGNvbXBsZXRlbmVzcy4uLiBkb2Vzbid0IGV4aXN0ICh5ZXQ/KS4gICovCiAKKwlBVEFfVURNQTI0X09OTFkJCT0gKDEgPDwgMikgfCAoMSA8PCA0KSwKKwogCUFUQV9VRE1BX01BU0tfNDBDCT0gQVRBX1VETUEyLAkvKiB1ZG1hMC0yICovCiAKIAkvKiBETUEtcmVsYXRlZCAqLwpAQCAtMjQ0LDggKzI1MCw2IEBACiAJQVRBX0NNRF9NRURJQV9VTkxPQ0sJPSAweERGLAogCS8qIG1hcmtlZCBvYnNvbGV0ZSBpbiB0aGUgQVRBL0FUQVBJLTcgc3BlYyAqLwogCUFUQV9DTURfUkVTVE9SRQkJPSAweDEwLAotCS8qIEVYQUJZVEUgc3BlY2lmaWMgKi8KLQlBVEFfRVhBQllURV9FTkFCTEVfTkVTVAk9IDB4RjAsCiAKIAkvKiBSRUFEX0xPR19FWFQgcGFnZXMgKi8KIAlBVEFfTE9HX1NBVEFfTkNRCT0gMHgxMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ3ZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9BVEg5S19QTEFURk9STV9ICisjZGVmaW5lIF9MSU5VWF9BVEg5S19QTEFURk9STV9ICisKKyNkZWZpbmUgQVRIOUtfUExBVF9FRVBfTUFYX1dPUkRTCTIwNDgKKworc3RydWN0IGF0aDlrX3BsYXRmb3JtX2RhdGEgeworCXUxNiBlZXByb21fZGF0YVtBVEg5S19QTEFUX0VFUF9NQVhfV09SRFNdOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9BVEg5S19QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaAppbmRleCA2ZjVhMWJhLi4zOWM5MTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWxlYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIEFUTSBsZWMgZGFlbW9uIGNvbnRyb2wgc29ja2V0ICovCiAjZGVmaW5lIEFUTUxFQ19DVFJMCV9JTygnYScsIEFUTUlPQ19MQU5FKQpAQCAtNzgsOCArNzksOCBAQAogCQl9IG5vcm1hbDsKIAkJc3RydWN0IGF0bWxlY19jb25maWdfbXNnIGNvbmZpZzsKIAkJc3RydWN0IHsKLQkJCXVpbnQxNl90IGxlY19pZDsJCQkvKiByZXF1ZXN0b3IgbGVjX2lkICAqLwotCQkJdWludDMyX3QgdHJhbl9pZDsJCQkvKiB0cmFuc2FjdGlvbiBpZCAgICAqLworCQkJX191MTYgbGVjX2lkOwkJCQkvKiByZXF1ZXN0b3IgbGVjX2lkICAqLworCQkJX191MzIgdHJhbl9pZDsJCQkJLyogdHJhbnNhY3Rpb24gaWQgICAgKi8KIAkJCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOwkvKiBkc3QgbWFjIGFkZHIgICAgICAqLwogCQkJdW5zaWduZWQgY2hhciBhdG1fYWRkcltBVE1fRVNBX0xFTl07CS8qIHJlcWVzdG9yIEFUTSBhZGRyICovCiAJCX0gcHJveHk7CS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oIGIvaW5jbHVkZS9saW51eC9hdG1tcGMuaAppbmRleCBlYTE2NTA0Li4yYWJhNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBBVE1NUENfQ1RSTCBfSU8oJ2EnLCBBVE1JT0NfTVBPQSkKICNkZWZpbmUgQVRNTVBDX0RBVEEgX0lPKCdhJywgQVRNSU9DX01QT0ErMSkKQEAgLTE4LDM5ICsxOSwzOSBAQAogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgaW5fY3RybF9pbmZvIHsKLSAgICAgICAgdWludDhfdCAgIExhc3RfTkhSUF9DSUVfY29kZTsKLSAgICAgICAgdWludDhfdCAgIExhc3RfUTI5MzFfY2F1c2VfdmFsdWU7ICAgICAKLSAgICAgICAgdWludDhfdCAgIGVnX01QQ19BVE1fYWRkcltBVE1fRVNBX0xFTl07CisgICAgICAgIF9fdTggICBMYXN0X05IUlBfQ0lFX2NvZGU7CisgICAgICAgIF9fdTggICBMYXN0X1EyOTMxX2NhdXNlX3ZhbHVlOworICAgICAgICBfX3U4ICAgZWdfTVBDX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKICAgICAgICAgX19iZTMyICB0YWc7CiAgICAgICAgIF9fYmUzMiAgaW5fZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdGhpcyBpbmdyZXNzIE1QQyBzZW5kcyBwYWNrZXRzIHRvICovCi0gICAgICAgIHVpbnQxNl90ICBob2xkaW5nX3RpbWU7Ci0gICAgICAgIHVpbnQzMl90ICByZXF1ZXN0X2lkOworICAgICAgICBfX3UxNiAgaG9sZGluZ190aW1lOworICAgICAgICBfX3UzMiAgcmVxdWVzdF9pZDsKIH0gaW5fY3RybF9pbmZvOwogCiB0eXBlZGVmIHN0cnVjdCBlZ19jdHJsX2luZm8gewotICAgICAgICB1aW50OF90ICAgRExMX2hlYWRlclsyNTZdOwotICAgICAgICB1aW50OF90ICAgREhfbGVuZ3RoOworICAgICAgICBfX3U4ICAgRExMX2hlYWRlclsyNTZdOworICAgICAgICBfX3U4ICAgREhfbGVuZ3RoOwogICAgICAgICBfX2JlMzIgIGNhY2hlX2lkOwogICAgICAgICBfX2JlMzIgIHRhZzsKICAgICAgICAgX19iZTMyICBtcHNfaXA7CiAgICAgICAgIF9fYmUzMiAgZWdfZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdG8gd2hpY2ggaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyAqLwotICAgICAgICB1aW50OF90ICAgaW5fTVBDX2RhdGFfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOwotICAgICAgICB1aW50MTZfdCAgaG9sZGluZ190aW1lOworICAgICAgICBfX3U4ICAgaW5fTVBDX2RhdGFfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOworICAgICAgICBfX3UxNiAgaG9sZGluZ190aW1lOwogfSBlZ19jdHJsX2luZm87CiAKIHN0cnVjdCBtcGNfcGFyYW1ldGVycyB7Ci0gICAgICAgIHVpbnQxNl90IG1wY19wMTsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBDb3VudCAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDI7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgVGltZSAgICAgKi8KLSAgICAgICAgdWludDhfdCBtcGNfcDNbOF07IC8qIEZsb3ctZGV0ZWN0aW9uIFByb3RvY29scyAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNDsgICAvKiBNUEMgSW5pdGlhbCBSZXRyeSBUaW1lICAgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDU7ICAgLyogTVBDIFJldHJ5IFRpbWUgTWF4aW11bSAgICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A2OyAgIC8qIEhvbGQgRG93biBUaW1lICAgICAgICAgICAgICAgICovICAgICAgCisgICAgICAgIF9fdTE2IG1wY19wMTsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBDb3VudCAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDI7ICAgLyogU2hvcnRjdXQtU2V0dXAgRnJhbWUgVGltZSAgICAgKi8KKyAgICAgICAgX191OCBtcGNfcDNbOF07IC8qIEZsb3ctZGV0ZWN0aW9uIFByb3RvY29scyAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNDsgICAvKiBNUEMgSW5pdGlhbCBSZXRyeSBUaW1lICAgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDU7ICAgLyogTVBDIFJldHJ5IFRpbWUgTWF4aW11bSAgICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A2OyAgIC8qIEhvbGQgRG93biBUaW1lICAgICAgICAgICAgICAgICovCiB9IDsKIAogc3RydWN0IGtfbWVzc2FnZSB7Ci0gICAgICAgIHVpbnQxNl90IHR5cGU7CisgICAgICAgIF9fdTE2IHR5cGU7CiAgICAgICAgIF9fYmUzMiBpcF9tYXNrOwotICAgICAgICB1aW50OF90ICBNUFNfY3RybFtBVE1fRVNBX0xFTl07CisgICAgICAgIF9fdTggIE1QU19jdHJsW0FUTV9FU0FfTEVOXTsKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIGluX2N0cmxfaW5mbyBpbl9pbmZvOwogICAgICAgICAgICAgICAgIGVnX2N0cmxfaW5mbyBlZ19pbmZvOwpAQCAtNjEsMTEgKzYyLDExIEBACiAKIHN0cnVjdCBsbGNfc25hcF9oZHIgewogCS8qIFJGQyAxNDgzIExMQy9TTkFQIGVuY2Fwc3VsYXRpb24gZm9yIHJvdXRlZCBJUCBQRFVzICovCi0gICAgICAgIHVpbnQ4X3QgIGRzYXA7ICAgIC8qIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50ICgweEFBKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgc3NhcDsgICAgLyogU291cmNlIFNlcnZpY2UgQWNjZXNzIFBvaW50ICAgICAgKDB4QUEpICAgICAqLwotICAgICAgICB1aW50OF90ICB1aTsgICAgICAvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICAgICAgICAgICAoMHgwMykgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIG9yZ1szXTsgIC8qIE9yZ2FuaXphdGlvbmFsIGlkZW50aWZpY2F0aW9uICAgICgweDAwMDAwMCkgKi8KLSAgICAgICAgdWludDhfdCAgdHlwZVsyXTsgLyogRXRoZXIgdHlwZSAoZm9yIElQKSAgICAgICAgICAgICAgKDB4MDgwMCkgICAqLworICAgICAgICBfX3U4ICBkc2FwOyAgICAvKiBEZXN0aW5hdGlvbiBTZXJ2aWNlIEFjY2VzcyBQb2ludCAoMHhBQSkgICAgICovCisgICAgICAgIF9fdTggIHNzYXA7ICAgIC8qIFNvdXJjZSBTZXJ2aWNlIEFjY2VzcyBQb2ludCAgICAgICgweEFBKSAgICAgKi8KKyAgICAgICAgX191OCAgdWk7ICAgICAgLyogVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAgICAgICAgICAgKDB4MDMpICAgICAqLworICAgICAgICBfX3U4ICBvcmdbM107ICAvKiBPcmdhbml6YXRpb25hbCBpZGVudGlmaWNhdGlvbiAgICAoMHgwMDAwMDApICovCisgICAgICAgIF9fdTggIHR5cGVbMl07IC8qIEV0aGVyIHR5cGUgKGZvciBJUCkgICAgICAgICAgICAgICgweDA4MDApICAgKi8KIH07CiAKIC8qIFRMVnMgdGhpcyBNUEMgcmVjb2duaXplcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IDY3ZTVkYmYuLjRmYTI4MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTM2LDcgKzM2LDggQEAKICAqIDE1MDAgLSAxNTk5IGtlcm5lbCBMU1BQIGV2ZW50cwogICogMTYwMCAtIDE2OTkga2VybmVsIGNyeXB0byBldmVudHMKICAqIDE3MDAgLSAxNzk5IGtlcm5lbCBhbm9tYWx5IHJlY29yZHMKLSAqIDE4MDAgLSAxOTk5IGZ1dHVyZSBrZXJuZWwgdXNlIChtYXliZSBpbnRlZ3JpdHkgbGFiZWxzIGFuZCByZWxhdGVkIGV2ZW50cykKKyAqIDE4MDAgLSAxODk5IGtlcm5lbCBpbnRlZ3JpdHkgZXZlbnRzCisgKiAxOTAwIC0gMTk5OSBmdXR1cmUga2VybmVsIHVzZQogICogMjAwMCBpcyBmb3Igb3RoZXJ3aXNlIHVuY2xhc3NpZmllZCBrZXJuZWwgYXVkaXQgbWVzc2FnZXMgKGxlZ2FjeSkKICAqIDIwMDEgLSAyMDk5IHVudXNlZCAoa2VybmVsKQogICogMjEwMCAtIDIxOTkgdXNlciBzcGFjZSBhbm9tYWx5IHJlY29yZHMKQEAgLTEyNSw2ICsxMjYsMTIgQEAKICNkZWZpbmUgQVVESVRfTEFTVF9LRVJOX0FOT01fTVNHICAgIDE3OTkKICNkZWZpbmUgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAgICAgIDE3MDAgLyogRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZSAqLwogI2RlZmluZSBBVURJVF9BTk9NX0FCRU5EICAgICAgICAgICAgMTcwMSAvKiBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0RBVEEJICAgIDE4MDAgLyogRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAgICAxODAxIC8qIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24gKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1NUQVRVUwkgICAgMTgwMiAvKiBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfSEFTSAkgICAgMTgwMyAvKiBJbnRlZ3JpdHkgSEFTSCB0eXBlICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9QQ1IJICAgIDE4MDQgLyogUENSIGludmFsaWRhdGlvbiBtc2dzICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9SVUxFCSAgICAxODA1IC8qIHBvbGljeSBydWxlICovCiAKICNkZWZpbmUgQVVESVRfS0VSTkVMCQkyMDAwCS8qIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IGQ4YmQ0M2IuLmIwNWIxZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtNDI2LDkgKzQyNiw2IEBACiAJdW5zaWduZWQgaW50IGZyb250X3BhZDsKIAogCW1lbXBvb2xfdCAqYmlvX3Bvb2w7Ci0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCi0JbWVtcG9vbF90ICpiaW9faW50ZWdyaXR5X3Bvb2w7Ci0jZW5kaWYKIAltZW1wb29sX3QgKmJ2ZWNfcG9vbDsKIH07CiAKQEAgLTUxOSw5ICs1MTYsOCBAQAogCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHkoYmlvKSAoYmlvLT5iaV9pbnRlZ3JpdHkgIT0gTlVMTCkKIAotZXh0ZXJuIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IGJpb19zZXQgKik7CiBleHRlcm4gc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvYyhzdHJ1Y3QgYmlvICosIGdmcF90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb19zZXQgKik7CitleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqKTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9hZGRfcGFnZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9lbmFibGVkKHN0cnVjdCBiaW8gKmJpbyk7CiBleHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfc2V0X3RhZyhzdHJ1Y3QgYmlvICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKQEAgLTUzMSwyNyArNTI3LDIxIEBACiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2FkdmFuY2Uoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV90cmltKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgYmlvX2ludGVncml0eV9zcGxpdChzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fcGFpciAqLCBpbnQpOwotZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpbyAqLCBnZnBfdCwgc3RydWN0IGJpb19zZXQgKik7Ci1leHRlcm4gaW50IGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKHN0cnVjdCBiaW9fc2V0ICosIGludCk7Ci1leHRlcm4gdm9pZCBiaW9zZXRfaW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpb19zZXQgKik7Ci1leHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2luaXRfc2xhYih2b2lkKTsKK2V4dGVybiBpbnQgYmlvX2ludGVncml0eV9jbG9uZShzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW8gKiwgZ2ZwX3QpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAogI2RlZmluZSBiaW9faW50ZWdyaXR5KGEpCQkoMCkKLSNkZWZpbmUgYmlvc2V0X2ludGVncml0eV9jcmVhdGUoYSwgYikJKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfcHJlcChhKQkJKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZW5hYmxlZChhKQkoMCkKLSNkZWZpbmUgYmlvX2ludGVncml0eV9jbG9uZShhLCBiLCBjLGQgKQkoMCkKLSNkZWZpbmUgYmlvc2V0X2ludGVncml0eV9mcmVlKGEpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYmlvX2ludGVncml0eV9mcmVlKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmlvX2ludGVncml0eV9jbG9uZShhLCBiLCBjKQkoMCkKKyNkZWZpbmUgYmlvX2ludGVncml0eV9mcmVlKGEpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfZW5kaW8oYSwgYikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2FkdmFuY2UoYSwgYikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3RyaW0oYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3NwbGl0KGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9zZXRfdGFnKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9nZXRfdGFnKGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYmlvX2ludGVncml0eV9pbml0X3NsYWIoYSkJZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnNnLmggYi9pbmNsdWRlL2xpbnV4L2JzZy5oCmluZGV4IGNmMDMwM2E2Li4zZjBjNjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JzZy5oCisrKyBiL2luY2x1ZGUvbGludXgvYnNnLmgKQEAgLTcsNiArNywxNCBAQAogI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVE1GCTEKICNkZWZpbmUgQlNHX1NVQl9QUk9UT0NPTF9TQ1NJX1RSQU5TUE9SVAkyCiAKKy8qCisgKiBGb3IgZmxhZ3MgbWVtYmVyIGJlbG93CisgKiBzZy5oIHNnX2lvX2hkciBhbHNvIGhhcyBiaXRzIGRlZmluZWQgZm9yIGl0J3MgZmxhZ3MgbWVtYmVyLiBIb3dldmVyCisgKiBub25lIG9mIHRoZXNlIGJpdHMgYXJlIGltcGxlbWVudGVkL3VzZWQgYnkgYnNnLiBUaGUgYml0cyBiZWxvdyBhcmUKKyAqIGFsbG9jYXRlZCB0byBub3QgY29uZmxpY3Qgd2l0aCBzZy5oIG9uZXMgYW55d2F5LgorICovCisjZGVmaW5lIEJTR19GTEFHX1FfQVRfVEFJTCAweDEwIC8qIGRlZmF1bHQsID09IDAgYXQgdGhpcyBiaXQsIGlzIFFfQVRfSEVBRCAqLworCiBzdHJ1Y3Qgc2dfaW9fdjQgewogCV9fczMyIGd1YXJkOwkJLyogW2ldICdRJyB0byBkaWZmZXJlbnRpYXRlIGZyb20gdjMgKi8KIAlfX3UzMiBwcm90b2NvbDsJCS8qIFtpXSAwIC0+IFNDU0kgLCAuLi4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKaW5kZXggZjg4ZDMyZi4uNTczODE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtMjIsOCArMjIsMTA5IEBACiBzdHJ1Y3QgY2xvY2tzb3VyY2U7CiAKIC8qKgorICogc3RydWN0IGN5Y2xlY291bnRlciAtIGhhcmR3YXJlIGFic3RyYWN0aW9uIGZvciBhIGZyZWUgcnVubmluZyBjb3VudGVyCisgKglQcm92aWRlcyBjb21wbGV0ZWx5IHN0YXRlLWZyZWUgYWNjZXNzb3JzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgorICoJRGVwZW5kaW5nIG9uIHdoaWNoIGhhcmR3YXJlIGl0IHJlYWRzLCB0aGUgY3ljbGUgY291bnRlciBtYXkgd3JhcAorICoJYXJvdW5kIHF1aWNrbHkuIExvY2tpbmcgcnVsZXMgKGlmIG5lY2Vzc2FyeSkgaGF2ZSB0byBiZSBkZWZpbmVkCisgKglieSB0aGUgaW1wbGVtZW50b3IgYW5kIHVzZXIgb2Ygc3BlY2lmaWMgaW5zdGFuY2VzIG9mIHRoaXMgQVBJLgorICoKKyAqIEByZWFkOgkJcmV0dXJucyB0aGUgY3VycmVudCBjeWNsZSB2YWx1ZQorICogQG1hc2s6CQliaXRtYXNrIGZvciB0d28ncyBjb21wbGVtZW50CisgKgkJCXN1YnRyYWN0aW9uIG9mIG5vbiA2NCBiaXQgY291bnRlcnMsCisgKgkJCXNlZSBDTE9DS1NPVVJDRV9NQVNLKCkgaGVscGVyIG1hY3JvCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllcgorICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCisgKi8KK3N0cnVjdCBjeWNsZWNvdW50ZXIgeworCWN5Y2xlX3QgKCpyZWFkKShjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYyk7CisJY3ljbGVfdCBtYXNrOworCXUzMiBtdWx0OworCXUzMiBzaGlmdDsKK307CisKKy8qKgorICogc3RydWN0IHRpbWVjb3VudGVyIC0gbGF5ZXIgYWJvdmUgYSAlc3RydWN0IGN5Y2xlY291bnRlciB3aGljaCBjb3VudHMgbmFub3NlY29uZHMKKyAqCUNvbnRhaW5zIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGltZWNvdW50ZXJfcmVhZCgpIHRvIGRldGVjdAorICoJY3ljbGUgY291bnRlciB3cmFwIGFyb3VuZC4gSW5pdGlhbGl6ZSB3aXRoCisgKgl0aW1lY291bnRlcl9pbml0KCkuIEFsc28gdXNlZCB0byBjb252ZXJ0IGN5Y2xlIGNvdW50cyBpbnRvIHRoZQorICoJY29ycmVzcG9uZGluZyBuYW5vc2Vjb25kIGNvdW50cyB3aXRoIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCkuIFVzZXJzCisgKglvZiB0aGlzIGNvZGUgYXJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHVuZGVybHlpbmcKKyAqCWN5Y2xlIGNvdW50ZXIgaGFyZHdhcmUsIGxvY2tpbmcgaXNzdWVzIGFuZCByZWFkaW5nIHRoZSB0aW1lCisgKgltb3JlIG9mdGVuIHRoYW4gdGhlIGN5Y2xlIGNvdW50ZXIgd3JhcHMgYXJvdW5kLiBUaGUgbmFub3NlY29uZAorICoJY291bnRlciB3aWxsIG9ubHkgd3JhcCBhcm91bmQgYWZ0ZXIgfjU4NSB5ZWFycy4KKyAqCisgKiBAY2M6CQkJdGhlIGN5Y2xlIGNvdW50ZXIgdXNlZCBieSB0aGlzIGluc3RhbmNlCisgKiBAY3ljbGVfbGFzdDoJCW1vc3QgcmVjZW50IGN5Y2xlIGNvdW50ZXIgdmFsdWUgc2VlbiBieQorICoJCQl0aW1lY291bnRlcl9yZWFkKCkKKyAqIEBuc2VjOgkJY29udGludW91c2x5IGluY3JlYXNpbmcgY291bnQKKyAqLworc3RydWN0IHRpbWVjb3VudGVyIHsKKwljb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYzsKKwljeWNsZV90IGN5Y2xlX2xhc3Q7CisJdTY0IG5zZWM7Cit9OworCisvKioKKyAqIGN5Y2xlY291bnRlcl9jeWMybnMgLSBjb252ZXJ0cyBjeWNsZSBjb3VudGVyIGN5Y2xlcyB0byBuYW5vc2Vjb25kcworICogQHRjOgkJUG9pbnRlciB0byBjeWNsZSBjb3VudGVyLgorICogQGN5Y2xlczoJQ3ljbGVzCisgKgorICogWFhYIC0gVGhpcyBjb3VsZCB1c2Ugc29tZSBtdWx0X2x4bF9sbCgpIGFzbSBvcHRpbWl6YXRpb24uIFNhbWUgY29kZQorICogYXMgaW4gY3ljMm5zLCBidXQgd2l0aCB1bnNpZ25lZCByZXN1bHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGN5Y2xlY291bnRlcl9jeWMybnMoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkJICAgICAgY3ljbGVfdCBjeWNsZXMpCit7CisJdTY0IHJldCA9ICh1NjQpY3ljbGVzOworCXJldCA9IChyZXQgKiBjYy0+bXVsdCkgPj4gY2MtPnNoaWZ0OworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdGltZWNvdW50ZXJfaW5pdCAtIGluaXRpYWxpemUgYSB0aW1lIGNvdW50ZXIKKyAqIEB0YzoJCQlQb2ludGVyIHRvIHRpbWUgY291bnRlciB3aGljaCBpcyB0byBiZSBpbml0aWFsaXplZC9yZXNldAorICogQGNjOgkJCUEgY3ljbGUgY291bnRlciwgcmVhZHkgdG8gYmUgdXNlZC4KKyAqIEBzdGFydF90c3RhbXA6CUFyYml0cmFyeSBpbml0aWFsIHRpbWUgc3RhbXAuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsIHRoZSBjdXJyZW50IGN5Y2xlIHJlZ2lzdGVyIChyb3VnaGx5KSBjb3JyZXNwb25kcyB0bworICogdGhlIGluaXRpYWwgdGltZSBzdGFtcC4gRXZlcnkgY2FsbCB0byB0aW1lY291bnRlcl9yZWFkKCkgaW5jcmVtZW50cworICogdGhlIHRpbWUgc3RhbXAgY291bnRlciBieSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgbmFub3NlY29uZHMuCisgKi8KK2V4dGVybiB2b2lkIHRpbWVjb3VudGVyX2luaXQoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkgICAgIHU2NCBzdGFydF90c3RhbXApOworCisvKioKKyAqIHRpbWVjb3VudGVyX3JlYWQgLSByZXR1cm4gbmFub3NlY29uZHMgZWxhcHNlZCBzaW5jZSB0aW1lY291bnRlcl9pbml0KCkKKyAqICAgICAgICAgICAgICAgICAgICBwbHVzIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAKKyAqIEB0YzogICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIuCisgKgorICogSW4gb3RoZXIgd29yZHMsIGtlZXBzIHRyYWNrIG9mIHRpbWUgc2luY2UgdGhlIHNhbWUgZXBvY2ggYXMKKyAqIHRoZSBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZWQgdGhlIGluaXRpYWwgdGltZSBzdGFtcC4KKyAqLworZXh0ZXJuIHU2NCB0aW1lY291bnRlcl9yZWFkKHN0cnVjdCB0aW1lY291bnRlciAqdGMpOworCisvKioKKyAqIHRpbWVjb3VudGVyX2N5YzJ0aW1lIC0gY29udmVydCBhIGN5Y2xlIGNvdW50ZXIgdG8gc2FtZQorICogICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGJhc2UgYXMgdmFsdWVzIHJldHVybmVkIGJ5CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVjb3VudGVyX3JlYWQoKQorICogQHRjOgkJUG9pbnRlciB0byB0aW1lIGNvdW50ZXIuCisgKiBAY3ljbGU6CWEgdmFsdWUgcmV0dXJuZWQgYnkgdGMtPmNjLT5yZWFkKCkKKyAqCisgKiBDeWNsZSBjb3VudHMgdGhhdCBhcmUgY29udmVydGVkIGNvcnJlY3RseSBhcyBsb25nIGFzIHRoZXkKKyAqIGZhbGwgaW50byB0aGUgaW50ZXJ2YWwgWy0xLzIgbWF4IGN5Y2xlIGNvdW50LCArMS8yIG1heCBjeWNsZSBjb3VudF0sCisgKiB3aXRoICJtYXggY3ljbGUgY291bnQiID09IGNzLT5tYXNrKzEuCisgKgorICogVGhpcyBhbGxvd3MgY29udmVyc2lvbiBvZiBjeWNsZSBjb3VudGVyIHZhbHVlcyB3aGljaCB3ZXJlIGdlbmVyYXRlZAorICogaW4gdGhlIHBhc3QuCisgKi8KK2V4dGVybiB1NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJCQljeWNsZV90IGN5Y2xlX3RzdGFtcCk7CisKKy8qKgogICogc3RydWN0IGNsb2Nrc291cmNlIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKICAqCVByb3ZpZGVzIG1vc3RseSBzdGF0ZS1mcmVlIGFjY2Vzc29ycyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KKyAqCVRoaXMgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBzeXN0ZW0gdGltZS4KICAqCiAgKiBAbmFtZToJCXB0ciB0byBjbG9ja3NvdXJjZSBuYW1lCiAgKiBAbGlzdDoJCWxpc3QgaGVhZCBmb3IgcmVnaXN0cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAppbmRleCA2MDVlYmUyLi43MmJmZWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmCV9DTTQwMDBfSF8KICNkZWZpbmUJX0NNNDAwMF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZQlNQVhfQVRSCQkJMzMKIAogI2RlZmluZQlDTTQwMDBfTUFYX0RFVgkJNApAQCAtMTAsOSArMTIsOSBAQAogICogbm90IHRvIGJyZWFrIGNvbXBpbGF0aW9uIG9mIHVzZXJzcGFjZSBhcHBzLiAtSFcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYXRyZXEgewotCWludDMyX3QgYXRyX2xlbjsKKwlfX3MzMiBhdHJfbGVuOwogCXVuc2lnbmVkIGNoYXIgYXRyWzY0XTsKLQlpbnQzMl90IHBvd2VyX2FjdDsKKwlfX3MzMiBwb3dlcl9hY3Q7CiAJdW5zaWduZWQgY2hhciBiSUZTRDsKIAl1bnNpZ25lZCBjaGFyIGJJRlNDOwogfSBhdHJlcV90OwpAQCAtMjIsMTMgKzI0LDEzIEBACiAgKiBtZW1iZXIgc2l6ZXMuIFRoaXMgbGVhZHMgdG8gQ09ORklHX0NPTVBBVCBicmVha2FnZSwgc2luY2UgMzJiaXQgdXNlcnNwYWNlCiAgKiB3aWxsIGxheSBvdXQgdGhlIHN0cnVjdHVyZSBtZW1iZXJzIGRpZmZlcmVudGx5IHRoYW4gdGhlIDY0Yml0IGtlcm5lbC4KICAqCi0gKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gInVfaW50MzJfdCIuCisgKiBJJ3ZlIGNoYW5nZWQgInB0c3JlcS5wcm90b2NvbCIgZnJvbSAidW5zaWduZWQgbG9uZyIgdG8gIl9fdTMyIi4KICAqIE9uIDMyYml0IHRoaXMgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UuICBXaXRoIDY0Yml0IGtlcm5lbHMsIGl0IHdpbGwgbWFrZQogICogMzJiaXQgYXBwcyB3b3JrLCB0b28uCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgcHRzcmVxIHsKLQl1X2ludDMyX3QgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCisJX191MzIgcHJvdG9jb2w7IC8qVD0wOiAyXjAsIFQ9MTogIDJeMSovCiAgCXVuc2lnbmVkIGNoYXIgZmxhZ3M7CiAgCXVuc2lnbmVkIGNoYXIgcHRzMTsKICAJdW5zaWduZWQgY2hhciBwdHMyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbl9wcm9jLmggYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAppbmRleCAxYzg2ZDY1Li5iODEyNWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaApAQCAtNjUsMjAgKzY1LDIwIEBACiAJCX0gYWNrOwogCiAJCXN0cnVjdCBmb3JrX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcGFyZW50X3BpZDsKLQkJCXBpZF90IHBhcmVudF90Z2lkOwotCQkJcGlkX3QgY2hpbGRfcGlkOwotCQkJcGlkX3QgY2hpbGRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHBhcmVudF9waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwYXJlbnRfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IGNoaWxkX3RnaWQ7CiAJCX0gZm9yazsKIAogCQlzdHJ1Y3QgZXhlY19wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCX0gZXhlYzsKIAogCQlzdHJ1Y3QgaWRfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwcm9jZXNzX3BpZDsKLQkJCXBpZF90IHByb2Nlc3NfdGdpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc190Z2lkOwogCQkJdW5pb24gewogCQkJCV9fdTMyIHJ1aWQ7IC8qIHRhc2sgdWlkICovCiAJCQkJX191MzIgcmdpZDsgLyogdGFzayBnaWQgKi8KQEAgLTkwLDggKzkwLDggQEAKIAkJfSBpZDsKIAogCQlzdHJ1Y3QgZXhpdF9wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCQlfX3UzMiBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogCQl9IGV4aXQ7CiAJfSBldmVudF9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmggYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAppbmRleCAwN2FlOGY4Li41YjVkNDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaApAQCAtNiw2ICs2LDcgQEAKICNkZWZpbmUgQ09EQV9QU0RFVl9NQUpPUiA2NwogI2RlZmluZSBNQVhfQ09EQURFVlMgIDUJICAgLyogaG93IG1hbnkgZG8gd2UgYWxsb3cgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBrc3RhdGZzOwogCiAvKiBjb21tdW5pY2F0aW9uIHBlbmRpbmcvcHJvY2Vzc2luZyBxdWV1ZXMgKi8KQEAgLTI0LDcgKzI1LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCB2ZW51c19jb21tICopKChzYiktPnNfZnNfaW5mbyk7CiB9CiAKLQogLyogdXBjYWxscyAqLwogaW50IHZlbnVzX3Jvb3RmaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZHApOwogaW50IHZlbnVzX2dldGF0dHIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCwKQEAgLTY0LDYgKzY0LDEyIEBACiBpbnQgdmVudXNfZnN5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IENvZGFGaWQgKmZpZCk7CiBpbnQgdmVudXNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKnNmcyk7CiAKKy8qCisgKiBTdGF0aXN0aWNzCisgKi8KKworZXh0ZXJuIHN0cnVjdCB2ZW51c19jb21tIGNvZGFfY29tbXNbXTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIG1lc3NhZ2VzIGJldHdlZW4gY29kYSBmaWxlc3lzdGVtIGluIGtlcm5lbCBhbmQgVmVudXMgKi8KIHN0cnVjdCB1cGNfcmVxIHsKQEAgLTgyLDExICs4OCw0IEBACiAjZGVmaW5lIFJFUV9XUklURSAgMHg0CiAjZGVmaW5lIFJFUV9BQk9SVCAgMHg4CiAKLQotLyoKLSAqIFN0YXRpc3RpY3MKLSAqLwotCi1leHRlcm4gc3RydWN0IHZlbnVzX2NvbW0gY29kYV9jb21tc1tdOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaCBiL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaAppbmRleCBhYzZkOWE0Li41ZGNmYjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKIGludCBjb20yMDAyMF9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBjb20yMDAyMF9mb3VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2hhcmVkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29tMjAwMjBfbmV0ZGV2X29wczsKIAogLyogVGhlIG51bWJlciBvZiBsb3cgSS9PIHBvcnRzIHVzZWQgYnkgdGhlIGNhcmQuICovCiAjZGVmaW5lIEFSQ05FVF9UT1RBTF9TSVpFIDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKaW5kZXggMDk5OTI3MS4uNDUwZmE1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKQEAgLTMsOCArMywxMCBAQAogI2VuZGlmCiAKIC8qIEdDQyA0LjEuWzAxXSBtaXNjb21waWxlcyBfX3dlYWsgKi8KLSNpZiBfX0dOVUNfTUlOT1JfXyA9PSAxICYmIF9fR05VQ19QQVRDSExFVkVMX18gPD0gMQotIyBlcnJvciBZb3VyIHZlcnNpb24gb2YgZ2NjIG1pc2NvbXBpbGVzIHRoZSBfX3dlYWsgZGlyZWN0aXZlCisjaWZkZWYgX19LRVJORUxfXworIyBpZiBfX0dOVUNfTUlOT1JfXyA9PSAxICYmIF9fR05VQ19QQVRDSExFVkVMX18gPD0gMQorIyAgZXJyb3IgWW91ciB2ZXJzaW9uIG9mIGdjYyBtaXNjb21waWxlcyB0aGUgX193ZWFrIGRpcmVjdGl2ZQorIyBlbmRpZgogI2VuZGlmCiAKICNkZWZpbmUgX191c2VkCQkJX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaCBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKaW5kZXggMzRmMjc4OS4uZmM2NWQyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0xMDksNiArMTA5LDEyIEBACiAJdW5zaWduZWQgY2hhciBuYW1lW0NOX0NCUV9OQU1FTEVOXTsKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjbl9xdWV1ZTsKKwkvKiBTZW50IHRvIGtldmVudCB0byBjcmVhdGUgY25fcXVldWUgb25seSB3aGVuIG5lZWRlZCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3cV9jcmVhdGlvbjsKKwkvKiBUZWxsIGlmIHRoZSB3cV9jcmVhdGlvbiBqb2IgaXMgcGVuZGluZy9jb21wbGV0ZWQgKi8KKwlhdG9taWNfdCB3cV9yZXF1ZXN0ZWQ7CisJLyogV2FpdCBmb3IgY25fcXVldWUgdG8gYmUgY3JlYXRlZCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxX2NyZWF0ZWQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CiAJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwpAQCAtMTY0LDYgKzE3MCw4IEBACiBpbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgY2hhciAqbmFtZSwgc3RydWN0IGNiX2lkICppZCwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKTsKIHZvaWQgY25fcXVldWVfZGVsX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNiX2lkICppZCk7CiAKK2ludCBxdWV1ZV9jbl93b3JrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiBzdHJ1Y3QgY25fcXVldWVfZGV2ICpjbl9xdWV1ZV9hbGxvY19kZXYoY2hhciAqbmFtZSwgc3RydWN0IHNvY2sgKik7CiB2b2lkIGNuX3F1ZXVlX2ZyZWVfZGV2KHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggYTY3YTkwYy4uZGNjYTUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTEzNyw4ICsxMzcsOCBAQAogaW50IG1kYV9jb25zb2xlX2luaXQodm9pZCk7CiB2b2lkIHByb21fY29uX2luaXQodm9pZCk7CiAKLXZvaWQgdmNzX21ha2Vfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci12b2lkIHZjc19yZW1vdmVfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Cit2b2lkIHZjc19tYWtlX3N5c2ZzKGludCBpbmRleCk7Cit2b2lkIHZjc19yZW1vdmVfc3lzZnMoaW50IGluZGV4KTsKIAogLyogU29tZSBkZWJ1ZyBzdHViIHRvIGNhdGNoIHNvbWUgb2YgdGhlIG9idmlvdXMgcmFjZXMgaW4gdGhlIFZUIGNvZGUgKi8KICNpZiAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCAxZjJlOTAyLi5lYzI5ZmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1NIQVNICQkweDAwMDAwMDA5CiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9BSEFTSAkJMHgwMDAwMDAwYQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfUk5HCQkweDAwMDAwMDBjCisjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MJMHgwMDAwMDAwZgogCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0sJMHgwMDAwMDAwZQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQUhBU0hfTUFTSwkweDAwMDAwMDBjCkBAIC01NDgsOSArNTQ5LDYgQEAKICAqIFRyYW5zZm9ybSB1c2VyIGludGVyZmFjZS4KICAqLwogIAotc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsCi0JCQkJICAgIHUzMiB0eXBlLCB1MzIgbWFzayk7CiBzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX2Jhc2UoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7CiB2b2lkIGNyeXB0b19kZXN0cm95X3RmbSh2b2lkICptZW0sIHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmggYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKaW5kZXggZDA2ZmJmMi4uNzg4ODUwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaApAQCAtODIsOSArODIsOSBAQAogICogb3BlbikKICAqLwogc3RydWN0IGN5Y2xhZGVzX2lkbGVfc3RhdHMgewotICAgIHRpbWVfdAkgICBpbl91c2U7CS8qIFRpbWUgZGV2aWNlIGhhcyBiZWVuIGluIHVzZSAoc2VjcykgKi8KLSAgICB0aW1lX3QJICAgcmVjdl9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciByZWNlaXZlZCAoc2VjcykgKi8KLSAgICB0aW1lX3QJICAgeG1pdF9pZGxlOwkvKiBUaW1lIHNpbmNlIGxhc3QgY2hhciB0cmFuc21pdHRlZCAoc2VjcykgKi8KKyAgICBfX2tlcm5lbF90aW1lX3QgaW5fdXNlOwkvKiBUaW1lIGRldmljZSBoYXMgYmVlbiBpbiB1c2UgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IHJlY3ZfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgcmVjZWl2ZWQgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IHhtaXRfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgdHJhbnNtaXR0ZWQgKHNlY3MpICovCiAgICAgdW5zaWduZWQgbG9uZyAgcmVjdl9ieXRlczsJLyogQnl0ZXMgcmVjZWl2ZWQgKi8KICAgICB1bnNpZ25lZCBsb25nICB4bWl0X2J5dGVzOwkvKiBCeXRlcyB0cmFuc21pdHRlZCAqLwogICAgIHVuc2lnbmVkIGxvbmcgIG92ZXJydW5zOwkvKiBJbnB1dCBvdmVycnVucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2NwLmggYi9pbmNsdWRlL2xpbnV4L2RjY3AuaAppbmRleCA2MTczNGUyLi43NDM0YTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjY3AuaApAQCAtMzU1LDQ2ICszNTUsNiBAQAogCXJldHVybiBfX2RjY3BfaGRyX2xlbihkY2NwX2hkcihza2IpKTsKIH0KIAotCi0vKiBpbml0aWFsIHZhbHVlcyBmb3IgZWFjaCBmZWF0dXJlICovCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfU0VRVUVOQ0VfV0lORE9XCQkxMDAKLSNkZWZpbmUgRENDUEZfSU5JVElBTF9BQ0tfUkFUSU8JCQkyCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfQ0NJRAkJCURDQ1BDX0NDSUQyCi0vKiBGSVhNRTogZm9yIG5vdyB3ZSdyZSBkZWZhdWx0IHRvIDEgYnV0IGl0IHNob3VsZCByZWFsbHkgYmUgMCAqLwotI2RlZmluZSBEQ0NQRl9JTklUSUFMX1NFTkRfTkRQX0NPVU5UCQkxCi0KLS8qKgotICAqIHN0cnVjdCBkY2NwX21pbmlzb2NrIC0gTWluaW1hbCBEQ0NQIGNvbm5lY3Rpb24gcmVwcmVzZW50YXRpb24KLSAgKgotICAqIFdpbGwgYmUgdXNlZCB0byBwYXNzIHRoZSBzdGF0ZSBmcm9tIGRjY3BfcmVxdWVzdF9zb2NrIHRvIGRjY3Bfc29jay4KLSAgKgotICAqIEBkY2NwbXNfc2VxdWVuY2Vfd2luZG93IC0gU2VxdWVuY2UgV2luZG93IEZlYXR1cmUgKHNlY3Rpb24gNy41LjIpCi0gICogQGRjY3Btc19wZW5kaW5nIC0gTGlzdCBvZiBmZWF0dXJlcyBiZWluZyBuZWdvdGlhdGVkCi0gICogQGRjY3Btc19jb25mIC0KLSAgKi8KLXN0cnVjdCBkY2NwX21pbmlzb2NrIHsKLQlfX3U2NAkJCWRjY3Btc19zZXF1ZW5jZV93aW5kb3c7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2NwbXNfcGVuZGluZzsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRjY3Btc19jb25mOwotfTsKLQotc3RydWN0IGRjY3Bfb3B0X2NvbmYgewotCV9fdTgJCQkqZGNjcG9jX3ZhbDsKLQlfX3U4CQkJZGNjcG9jX2xlbjsKLX07Ci0KLXN0cnVjdCBkY2NwX29wdF9wZW5kIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWRjY3BvcF9ub2RlOwotCV9fdTgJCQlkY2Nwb3BfdHlwZTsKLQlfX3U4CQkJZGNjcG9wX2ZlYXQ7Ci0JX191OAkJICAgICAgICAqZGNjcG9wX3ZhbDsKLQlfX3U4CQkJZGNjcG9wX2xlbjsKLQlpbnQJCQlkY2Nwb3BfY29uZjsKLQlzdHJ1Y3QgZGNjcF9vcHRfY29uZiAgICAqZGNjcG9wX3NjOwotfTsKLQotZXh0ZXJuIHZvaWQgZGNjcF9taW5pc29ja19pbml0KHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKTsKLQogLyoqCiAgKiBzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgIC0gIHJlcHJlc2VudCBEQ0NQLXNwZWNpZmljIGNvbm5lY3Rpb24gcmVxdWVzdAogICogQGRyZXFfaW5ldF9yc2s6IHN0cnVjdHVyZSBpbmhlcml0ZWQgZnJvbQpAQCAtNDgzLDEzICs0NDMsMTQgQEAKICAqIEBkY2Nwc190aW1lc3RhbXBfdGltZSAtIHRpbWUgb2YgcmVjZWl2aW5nIGxhdGVzdCBAZGNjcHNfdGltZXN0YW1wX2VjaG8KICAqIEBkY2Nwc19sX2Fja19yYXRpbyAtIGZlYXR1cmUtbG9jYWwgQWNrIFJhdGlvCiAgKiBAZGNjcHNfcl9hY2tfcmF0aW8gLSBmZWF0dXJlLXJlbW90ZSBBY2sgUmF0aW8KKyAqIEBkY2Nwc19sX3NlcV93aW4gLSBsb2NhbCBTZXF1ZW5jZSBXaW5kb3cgKGluZmx1ZW5jZXMgYWNrIG51bWJlciB2YWxpZGl0eSkKKyAqIEBkY2Nwc19yX3NlcV93aW4gLSByZW1vdGUgU2VxdWVuY2UgV2luZG93IChpbmZsdWVuY2VzIHNlcSBudW1iZXIgdmFsaWRpdHkpCiAgKiBAZGNjcHNfcGNzbGVuIC0gc2VuZGVyICAgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAodmlhIHNvY2tvcHQpCiAgKiBAZGNjcHNfcGNybGVuIC0gcmVjZWl2ZXIgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAodmlhIHNvY2tvcHQpCiAgKiBAZGNjcHNfc2VuZF9uZHBfY291bnQgLSBsb2NhbCBTZW5kIE5EUCBDb3VudCBmZWF0dXJlICg3LjcuMikKICAqIEBkY2Nwc19uZHBfY291bnQgLSBudW1iZXIgb2YgTm9uIERhdGEgUGFja2V0cyBzaW5jZSBsYXN0IGRhdGEgcGFja2V0CiAgKiBAZGNjcHNfbXNzX2NhY2hlIC0gY3VycmVudCB2YWx1ZSBvZiBNU1MgKHBhdGggTVRVIG1pbnVzIGhlYWRlciBzaXplcykKICAqIEBkY2Nwc19yYXRlX2xhc3QgLSB0aW1lc3RhbXAgZm9yIHJhdGUtbGltaXRpbmcgRENDUC1TeW5jIChSRkMgNDM0MCwgNy41LjQpCi0gKiBAZGNjcHNfbWluaXNvY2sgLSBhc3NvY2lhdGVkIG1pbmlzb2NrIChhY2Nlc3NlZCB2aWEgZGNjcF9tc2spCiAgKiBAZGNjcHNfZmVhdG5lZyAtIHRyYWNrcyBmZWF0dXJlLW5lZ290aWF0aW9uIHN0YXRlIChtb3N0bHkgZHVyaW5nIGhhbmRzaGFrZSkKICAqIEBkY2Nwc19oY19yeF9hY2t2ZWMgLSByeCBoYWxmIGNvbm5lY3Rpb24gYWNrIHZlY3RvcgogICogQGRjY3BzX2hjX3J4X2NjaWQgLSBDQ0lEIHVzZWQgZm9yIHRoZSByZWNlaXZlciAob3IgcmVjZWl2aW5nIGhhbGYtY29ubmVjdGlvbikKQEAgLTUyMywxMiArNDg0LDEzIEBACiAJX191MzIJCQkJZGNjcHNfdGltZXN0YW1wX3RpbWU7CiAJX191MTYJCQkJZGNjcHNfbF9hY2tfcmF0aW87CiAJX191MTYJCQkJZGNjcHNfcl9hY2tfcmF0aW87CisJX191NjQJCQkJZGNjcHNfbF9zZXFfd2luOjQ4OworCV9fdTY0CQkJCWRjY3BzX3Jfc2VxX3dpbjo0ODsKIAlfX3U4CQkJCWRjY3BzX3Bjc2xlbjo0OwogCV9fdTgJCQkJZGNjcHNfcGNybGVuOjQ7CiAJX191OAkJCQlkY2Nwc19zZW5kX25kcF9jb3VudDoxOwogCV9fdTY0CQkJCWRjY3BzX25kcF9jb3VudDo0ODsKIAl1bnNpZ25lZCBsb25nCQkJZGNjcHNfcmF0ZV9sYXN0OwotCXN0cnVjdCBkY2NwX21pbmlzb2NrCQlkY2Nwc19taW5pc29jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlkY2Nwc19mZWF0bmVnOwogCXN0cnVjdCBkY2NwX2Fja3ZlYwkJKmRjY3BzX2hjX3J4X2Fja3ZlYzsKIAlzdHJ1Y3QgY2NpZAkJCSpkY2Nwc19oY19yeF9jY2lkOwpAQCAtNTQ2LDExICs1MDgsNiBAQAogCXJldHVybiAoc3RydWN0IGRjY3Bfc29jayAqKXNrOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX21pbmlzb2NrICpkY2NwX21zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCi17Ci0JcmV0dXJuIChzdHJ1Y3QgZGNjcF9taW5pc29jayAqKSZkY2NwX3NrKHNrKS0+ZGNjcHNfbWluaXNvY2s7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGNjcF9yb2xlKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlzd2l0Y2ggKGRjY3Bfc2soc2spLT5kY2Nwc19yb2xlKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCA0N2YzNDNjLi4yOTE4YzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgQlVTX0lEX1NJWkUJCTIwCiAKIHN0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX3ByaXZhdGU7CiBzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZTsKIHN0cnVjdCBjbGFzczsKQEAgLTE0Nyw3ICsxNDgsNyBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXJfZmluZChjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgc3RydWN0IGJ1c190eXBlICpidXMpOwogZXh0ZXJuIGludCBkcml2ZXJfcHJvYmVfZG9uZSh2b2lkKTsKLWV4dGVybiBpbnQgd2FpdF9mb3JfZGV2aWNlX3Byb2JlKHZvaWQpOworZXh0ZXJuIHZvaWQgd2FpdF9mb3JfZGV2aWNlX3Byb2JlKHZvaWQpOwogCiAKIC8qIHN5c2ZzIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGRyaXZlciBhdHRyaWJ1dGVzICovCkBAIC0zNjcsMTUgKzM2OCwxMSBAQAogfTsKIAogc3RydWN0IGRldmljZSB7Ci0Jc3RydWN0IGtsaXN0CQlrbGlzdF9jaGlsZHJlbjsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9wYXJlbnQ7CS8qIG5vZGUgaW4gc2libGluZyBsaXN0ICovCi0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfZHJpdmVyOwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX2J1czsKIAlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50OwogCisJc3RydWN0IGRldmljZV9wcml2YXRlCSpwOworCiAJc3RydWN0IGtvYmplY3Qga29iajsKLQljaGFyCWJ1c19pZFtCVVNfSURfU0laRV07CS8qIHBvc2l0aW9uIG9uIHBhcmVudCBidXMgKi8KLQl1bnNpZ25lZAkJdWV2ZW50X3N1cHByZXNzOjE7CiAJY29uc3QgY2hhcgkJKmluaXRfbmFtZTsgLyogaW5pdGlhbCBuYW1lIG9mIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlX3R5cGUJKnR5cGU7CiAKQEAgLTM4Nyw4ICszODQsMTMgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOwkvKiB3aGljaCBkcml2ZXIgaGFzIGFsbG9jYXRlZCB0aGlzCiAJCQkJCSAgIGRldmljZSAqLwogCXZvaWQJCSpkcml2ZXJfZGF0YTsJLyogZGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIgKi8KLQl2b2lkCQkqcGxhdGZvcm1fZGF0YTsJLyogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSwgZGV2aWNlCi0JCQkJCSAgIGNvcmUgZG9lc24ndCB0b3VjaCBpdCAqLworCisJdm9pZAkJKnBsYXRmb3JtX2RhdGE7CS8qIFdlIHdpbGwgcmVtb3ZlIHBsYXRmb3JtX2RhdGEKKwkJCQkJICAgZmllbGQgaWYgYWxsIHBsYXRmb3JtIGRldmljZXMKKwkJCQkJICAgcGFzcyBpdHMgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YQorCQkJCQkgICBmcm9tIHBsYXRmb3JtX2RldmljZS0+cGxhdGZvcm1fZGF0YSwKKwkJCQkJICAgb3RoZXIga2luZCBvZiBkZXZpY2VzIHNob3VsZCBub3QKKwkJCQkJICAgdXNlIHBsYXRmb3JtX2RhdGEuICovCiAJc3RydWN0IGRldl9wbV9pbmZvCXBvd2VyOwogCiAjaWZkZWYgQ09ORklHX05VTUEKQEAgLTQyNyw4ICs0MjksNyBAQAogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRldl9uYW1lKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQkvKiB3aWxsIGJlIGNoYW5nZWQgaW50byBrb2JqZWN0X25hbWUoJmRldi0+a29iaikgaW4gdGhlIG5lYXIgZnV0dXJlICovCi0JcmV0dXJuIGRldi0+YnVzX2lkOworCXJldHVybiBrb2JqZWN0X25hbWUoJmRldi0+a29iaik7CiB9CiAKIGV4dGVybiBpbnQgZGV2X3NldF9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgLi4uKQpAQCAtNDYzLDYgKzQ2NCwxNiBAQAogCWRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkZXZfZ2V0X3VldmVudF9zdXBwcmVzcyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+a29iai51ZXZlbnRfc3VwcHJlc3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCB2YWwpCit7CisJZGV2LT5rb2JqLnVldmVudF9zdXBwcmVzcyA9IHZhbDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXJldHVybiBkZXYtPmtvYmouc3RhdGVfaW5fc3lzZnM7CkBAIC00ODMsNyArNDk0LDggQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlICpkZXZpY2VfZmluZF9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkpOwogZXh0ZXJuIGludCBkZXZpY2VfcmVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqbmV3X25hbWUpOwotZXh0ZXJuIGludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQpOworZXh0ZXJuIGludCBkZXZpY2VfbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm5ld19wYXJlbnQsCisJCSAgICAgICBlbnVtIGRwbV9vcmRlciBkcG1fb3JkZXIpOwogCiAvKgogICogUm9vdCBkZXZpY2Ugb2JqZWN0cyBmb3IgZ3JvdXBpbmcgdW5kZXIgL3N5cy9kZXZpY2VzCkBAIC01NzAsNyArNTgyLDcgQEAKICNpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQotI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCisjZWxpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQogI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pIGRvIHsgXAogCWR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXyk7IFwKIAl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCmluZGV4IDE5Mjc2MzMuLjY0N2M4ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKQEAgLTksNiArOSw4IEBACiAjaWZuZGVmIF9ETE1fTkVUTElOS19ICiAjZGVmaW5lIF9ETE1fTkVUTElOS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBlbnVtIHsKIAlETE1fU1RBVFVTX1dBSVRJTkcgPSAxLAogCURMTV9TVEFUVVNfR1JBTlRFRCA9IDIsCkBAIC0xOCwxNiArMjAsMTYgQEAKICNkZWZpbmUgRExNX0xPQ0tfREFUQV9WRVJTSU9OIDEKIAogc3RydWN0IGRsbV9sb2NrX2RhdGEgewotCXVpbnQxNl90IHZlcnNpb247Ci0JdWludDMyX3QgbG9ja3NwYWNlX2lkOworCV9fdTE2IHZlcnNpb247CisJX191MzIgbG9ja3NwYWNlX2lkOwogCWludCBub2RlaWQ7CiAJaW50IG93bnBpZDsKLQl1aW50MzJfdCBpZDsKLQl1aW50MzJfdCByZW1pZDsKLQl1aW50NjRfdCB4aWQ7Ci0JaW50OF90IHN0YXR1czsKLQlpbnQ4X3QgZ3Jtb2RlOwotCWludDhfdCBycW1vZGU7CisJX191MzIgaWQ7CisJX191MzIgcmVtaWQ7CisJX191NjQgeGlkOworCV9fczggc3RhdHVzOworCV9fczggZ3Jtb2RlOworCV9fczggcnFtb2RlOwogCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOwogCWludCByZXNvdXJjZV9uYW1lbGVuOwogCWNoYXIgcmVzb3VyY2VfbmFtZVtETE1fUkVTTkFNRV9NQVhMRU5dOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IDI4YzI5NDAuLjQ4ZTQ0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTExMywyMCArMTEzLDIwIEBACiAJICogcmV0dXJuIC1FTk9UVFkpIGZpbGwgb3V0IHRoaXMgZmllbGQsIGV2ZW4gaWYgdGhlCiAJICogY29tbWFuZCBmYWlsZWQuCiAJICovCi0JdWludDMyX3QgdmVyc2lvblszXTsJLyogaW4vb3V0ICovCi0JdWludDMyX3QgZGF0YV9zaXplOwkvKiB0b3RhbCBzaXplIG9mIGRhdGEgcGFzc2VkIGluCisJX191MzIgdmVyc2lvblszXTsJLyogaW4vb3V0ICovCisJX191MzIgZGF0YV9zaXplOwkvKiB0b3RhbCBzaXplIG9mIGRhdGEgcGFzc2VkIGluCiAJCQkJICogaW5jbHVkaW5nIHRoaXMgc3RydWN0ICovCiAKLQl1aW50MzJfdCBkYXRhX3N0YXJ0OwkvKiBvZmZzZXQgdG8gc3RhcnQgb2YgZGF0YQorCV9fdTMyIGRhdGFfc3RhcnQ7CS8qIG9mZnNldCB0byBzdGFydCBvZiBkYXRhCiAJCQkJICogcmVsYXRpdmUgdG8gc3RhcnQgb2YgdGhpcyBzdHJ1Y3QgKi8KIAotCXVpbnQzMl90IHRhcmdldF9jb3VudDsJLyogaW4vb3V0ICovCi0JaW50MzJfdCBvcGVuX2NvdW50OwkvKiBvdXQgKi8KLQl1aW50MzJfdCBmbGFnczsJCS8qIGluL291dCAqLwotCXVpbnQzMl90IGV2ZW50X25yOyAgICAgIAkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBwYWRkaW5nOworCV9fdTMyIHRhcmdldF9jb3VudDsJLyogaW4vb3V0ICovCisJX19zMzIgb3Blbl9jb3VudDsJLyogb3V0ICovCisJX191MzIgZmxhZ3M7CQkvKiBpbi9vdXQgKi8KKwlfX3UzMiBldmVudF9ucjsgICAgICAJLyogaW4vb3V0ICovCisJX191MzIgcGFkZGluZzsKIAotCXVpbnQ2NF90IGRldjsJCS8qIGluL291dCAqLworCV9fdTY0IGRldjsJCS8qIGluL291dCAqLwogCiAJY2hhciBuYW1lW0RNX05BTUVfTEVOXTsJLyogZGV2aWNlIG5hbWUgKi8KIAljaGFyIHV1aWRbRE1fVVVJRF9MRU5dOwkvKiB1bmlxdWUgaWRlbnRpZmllciBmb3IKQEAgLTEzOSw5ICsxMzksOSBAQAogICogZG1faW9jdGwuCiAgKi8KIHN0cnVjdCBkbV90YXJnZXRfc3BlYyB7Ci0JdWludDY0X3Qgc2VjdG9yX3N0YXJ0OwotCXVpbnQ2NF90IGxlbmd0aDsKLQlpbnQzMl90IHN0YXR1czsJCS8qIHVzZWQgd2hlbiByZWFkaW5nIGZyb20ga2VybmVsIG9ubHkgKi8KKwlfX3U2NCBzZWN0b3Jfc3RhcnQ7CisJX191NjQgbGVuZ3RoOworCV9fczMyIHN0YXR1czsJCS8qIHVzZWQgd2hlbiByZWFkaW5nIGZyb20ga2VybmVsIG9ubHkgKi8KIAogCS8qCiAJICogTG9jYXRpb24gb2YgdGhlIG5leHQgZG1fdGFyZ2V0X3NwZWMuCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiAgICh0aGF0IGZvbGxvd3MgdGhlIGRtX2lvY3RsIHN0cnVjdCkgdG8gdGhlIHN0YXJ0IG9mIHRoZSAibmV4dCIKIAkgKiAgIGRtX3RhcmdldF9zcGVjLgogCSAqLwotCXVpbnQzMl90IG5leHQ7CisJX191MzIgbmV4dDsKIAogCWNoYXIgdGFyZ2V0X3R5cGVbRE1fTUFYX1RZUEVfTkFNRV07CiAKQEAgLTE2OCwxNyArMTY4LDE3IEBACiAgKiBVc2VkIHRvIHJldHJpZXZlIHRoZSB0YXJnZXQgZGVwZW5kZW5jaWVzLgogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X2RlcHMgewotCXVpbnQzMl90IGNvdW50OwkvKiBBcnJheSBzaXplICovCi0JdWludDMyX3QgcGFkZGluZzsJLyogdW51c2VkICovCi0JdWludDY0X3QgZGV2WzBdOwkvKiBvdXQgKi8KKwlfX3UzMiBjb3VudDsJLyogQXJyYXkgc2l6ZSAqLworCV9fdTMyIHBhZGRpbmc7CS8qIHVudXNlZCAqLworCV9fdTY0IGRldlswXTsJLyogb3V0ICovCiB9OwogCiAvKgogICogVXNlZCB0byBnZXQgYSBsaXN0IG9mIGFsbCBkbSBkZXZpY2VzLgogICovCiBzdHJ1Y3QgZG1fbmFtZV9saXN0IHsKLQl1aW50NjRfdCBkZXY7Ci0JdWludDMyX3QgbmV4dDsJCS8qIG9mZnNldCB0byB0aGUgbmV4dCByZWNvcmQgZnJvbQorCV9fdTY0IGRldjsKKwlfX3UzMiBuZXh0OwkJLyogb2Zmc2V0IHRvIHRoZSBuZXh0IHJlY29yZCBmcm9tCiAJCQkJICAgdGhlIF9zdGFydF8gb2YgdGhpcyAqLwogCWNoYXIgbmFtZVswXTsKIH07CkBAIC0xODcsOCArMTg3LDggQEAKICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHRhcmdldCB2ZXJzaW9ucwogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X3ZlcnNpb25zIHsKLSAgICAgICAgdWludDMyX3QgbmV4dDsKLSAgICAgICAgdWludDMyX3QgdmVyc2lvblszXTsKKyAgICAgICAgX191MzIgbmV4dDsKKyAgICAgICAgX191MzIgdmVyc2lvblszXTsKIAogICAgICAgICBjaGFyIG5hbWVbMF07CiB9OwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgKiBVc2VkIHRvIHBhc3MgbWVzc2FnZSB0byBhIHRhcmdldAogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X21zZyB7Ci0JdWludDY0X3Qgc2VjdG9yOwkvKiBEZXZpY2Ugc2VjdG9yICovCisJX191NjQgc2VjdG9yOwkvKiBEZXZpY2Ugc2VjdG9yICovCiAKIAljaGFyIG1lc3NhZ2VbMF07CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKaW5kZXggYmIwZGYyYS4uZmVjNjZiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCkBAIC03Niw3ICs3Niw3IEBACiB9IGF1ZGlvX2thcmFva2VfdDsgICAgIC8qIGludG8gbGVmdCBhbmQgcmlnaHQgICovCiAKIAotdHlwZWRlZiB1aW50MTZfdCBhdWRpb19hdHRyaWJ1dGVzX3Q7Cit0eXBlZGVmIF9fdTE2IGF1ZGlvX2F0dHJpYnV0ZXNfdDsKIC8qICAgYml0czogZGVzY3IuICovCiAvKiAgIDE1LTEzIGF1ZGlvIGNvZGluZyBtb2RlICgwPWFjMywgMj1tcGVnMSwgMz1tcGVnMmV4dCwgND1MUENNLCA2PURUUywgKi8KIC8qICAgMTIgICAgbXVsdGljaGFubmVsIGV4dGVuc2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaCBiL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKaW5kZXggYmQ0OWMzZS4uMWQ3NTBjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogI2RlZmluZSBWSURFT19WU1lOQ19GSUVMRF9QUk9HUkVTU0lWRQkoMykKIAogc3RydWN0IHZpZGVvX2V2ZW50IHsKLQlpbnQzMl90IHR5cGU7CisJX19zMzIgdHlwZTsKICNkZWZpbmUgVklERU9fRVZFTlRfU0laRV9DSEFOR0VECTEKICNkZWZpbmUgVklERU9fRVZFTlRfRlJBTUVfUkFURV9DSEFOR0VECTIKICNkZWZpbmUgVklERU9fRVZFTlRfREVDT0RFUl9TVE9QUEVEIAkzCiAjZGVmaW5lIFZJREVPX0VWRU5UX1ZTWU5DIAkJNAotCXRpbWVfdCB0aW1lc3RhbXA7CisJX19rZXJuZWxfdGltZV90IHRpbWVzdGFtcDsKIAl1bmlvbiB7CiAJCXZpZGVvX3NpemVfdCBzaXplOwogCQl1bnNpZ25lZCBpbnQgZnJhbWVfcmF0ZTsJLyogaW4gZnJhbWVzIHBlciAxMDAwc2VjICovCkBAIC0xNTcsMjUgKzE1NywyNSBAQAogCiBzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSB7CiAJY2hhciBfX3VzZXIgKmlGcmFtZTsgICAgICAgIC8qIHBvaW50ZXIgdG8gYSBzaW5nbGUgaWZyYW1lIGluIG1lbW9yeSAqLwotCWludDMyX3Qgc2l6ZTsKKwlfX3MzMiBzaXplOwogfTsKIAogCiB0eXBlZGVmCiBzdHJ1Y3QgdmlkZW9faGlnaGxpZ2h0IHsKIAlpbnQgICAgIGFjdGl2ZTsgICAgICAvKiAgICAxPXNob3cgaGlnaGxpZ2h0LCAwPWhpZGUgaGlnaGxpZ2h0ICovCi0JdWludDhfdCBjb250cmFzdDE7ICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb250cmFzdCAqLworCV9fdTggICAgY29udHJhc3QxOyAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb250cmFzdCAqLwotCXVpbnQ4X3QgY29udHJhc3QyOyAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29udHJhc3QgKi8KKwlfX3U4ICAgIGNvbnRyYXN0MjsgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbnRyYXN0ICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEVtcGhhc2lzIHBpeGVsLTEgY29udHJhc3QgKi8KLQl1aW50OF90IGNvbG9yMTsgICAgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbG9yICovCisJX191OCAgICBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLwogCQkJICAgICAvKiAgICAzLSAwICBCYWNrZ3JvdW5kIHBpeGVsIGNvbG9yICovCi0JdWludDhfdCBjb2xvcjI7ICAgICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb2xvciAqLworCV9fdTggICAgY29sb3IyOyAgICAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgRW1waGFzaXMgcGl4ZWwtMSBjb2xvciAqLwotCXVpbnQzMl90IHlwb3M7ICAgICAgIC8qICAgMjMtMjIgIGF1dG8gYWN0aW9uIG1vZGUgKi8KKwlfX3UzMiAgICB5cG9zOyAgICAgICAvKiAgIDIzLTIyICBhdXRvIGFjdGlvbiBtb2RlICovCiAJCQkgICAgIC8qICAgMjEtMTIgIHN0YXJ0IHkgKi8KIAkJCSAgICAgLyogICAgOS0gMCAgZW5kIHkgKi8KLQl1aW50MzJfdCB4cG9zOyAgICAgICAvKiAgIDIzLTIyICBidXR0b24gY29sb3IgbnVtYmVyICovCisJX191MzIgICAgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLwogCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB4ICovCiAJCQkgICAgIC8qICAgIDktIDAgIGVuZCB4ICovCiB9IHZpZGVvX2hpZ2hsaWdodF90OwpAQCAtMTg5LDE3ICsxODksMTcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgdmlkZW9fc3B1X3BhbGV0dGUgeyAgICAgIC8qIFNQVSBQYWxldHRlIGluZm9ybWF0aW9uICovCiAJaW50IGxlbmd0aDsKLQl1aW50OF90IF9fdXNlciAqcGFsZXR0ZTsKKwlfX3U4IF9fdXNlciAqcGFsZXR0ZTsKIH0gdmlkZW9fc3B1X3BhbGV0dGVfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB2aWRlb19uYXZpX3BhY2sgewogCWludCBsZW5ndGg7ICAgICAgICAgIC8qIDAgLi4uIDEwMjQgKi8KLQl1aW50OF90IGRhdGFbMTAyNF07CisJX191OCBkYXRhWzEwMjRdOwogfSB2aWRlb19uYXZpX3BhY2tfdDsKIAogCi10eXBlZGVmIHVpbnQxNl90IHZpZGVvX2F0dHJpYnV0ZXNfdDsKK3R5cGVkZWYgX191MTYgdmlkZW9fYXR0cmlidXRlc190OwogLyogICBiaXRzOiBkZXNjci4gKi8KIC8qICAgMTUtMTQgVmlkZW8gY29tcHJlc3Npb24gbW9kZSAoMD1NUEVHLTEsIDE9TVBFRy0yKSAqLwogLyogICAxMy0xMiBUViBzeXN0ZW0gKDA9NTI1LzYwLCAxPTYyNS81MCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhYmYzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCkBAIC0wLDAgKzEsODggQEAKKyNpZm5kZWYgX0RZTkFNSUNfREVCVUdfSAorI2RlZmluZSBfRFlOQU1JQ19ERUJVR19ICisKKy8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKKyAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKKyAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgorICovCitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDsKK2V4dGVybiBsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkMjsKKworLyoKKyAqIEFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIGlzIGNyZWF0ZWQgaW4gYSBzcGVjaWFsCisgKiBFTEYgc2VjdGlvbiBhdCBldmVyeSBkeW5hbWljIGRlYnVnIGNhbGxzaXRlLiAgQXQgcnVudGltZSwKKyAqIHRoZSBzcGVjaWFsIHNlY3Rpb24gaXMgdHJlYXRlZCBhcyBhbiBhcnJheSBvZiB0aGVzZS4KKyAqLworc3RydWN0IF9kZGVidWcgeworCS8qCisJICogVGhlc2UgZmllbGRzIGFyZSB1c2VkIHRvIGRyaXZlIHRoZSB1c2VyIGludGVyZmFjZQorCSAqIGZvciBzZWxlY3RpbmcgYW5kIGRpc3BsYXlpbmcgZGVidWcgY2FsbHNpdGVzLgorCSAqLworCWNvbnN0IGNoYXIgKm1vZG5hbWU7CisJY29uc3QgY2hhciAqZnVuY3Rpb247CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3QgY2hhciAqZm9ybWF0OworCWNoYXIgcHJpbWFyeV9oYXNoOworCWNoYXIgc2Vjb25kYXJ5X2hhc2g7CisJdW5zaWduZWQgaW50IGxpbmVubzoyNDsKKwkvKgorIAkgKiBUaGUgZmxhZ3MgZmllbGQgY29udHJvbHMgdGhlIGJlaGF2aW91ciBhdCB0aGUgY2FsbHNpdGUuCisgCSAqIFRoZSBiaXRzIGhlcmUgYXJlIGNoYW5nZWQgZHluYW1pY2FsbHkgd2hlbiB0aGUgdXNlcgorIAkgKiB3cml0ZXMgY29tbWFuZHMgdG8gPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCisJICovCisjZGVmaW5lIF9EUFJJTlRLX0ZMQUdTX1BSSU5UICAgKDE8PDApICAvKiBwcmludGsoKSBhIG1lc3NhZ2UgdXNpbmcgdGhlIGZvcm1hdCAqLworI2RlZmluZSBfRFBSSU5US19GTEFHU19ERUZBVUxUIDAKKwl1bnNpZ25lZCBpbnQgZmxhZ3M6ODsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworCisKK2ludCBkZGVidWdfYWRkX21vZHVsZShzdHJ1Y3QgX2RkZWJ1ZyAqdGFiLCB1bnNpZ25lZCBpbnQgbiwKKwkJCQljb25zdCBjaGFyICptb2RuYW1lKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCitleHRlcm4gaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKTsKKworI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGQpICAoewkgICAgIFwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQkgICAgIFwKKwlpZiAodW5saWtlbHkoKGR5bmFtaWNfZGVidWdfZW5hYmxlZCAmICgxTEwgPDwgREVCVUdfSEFTSCkpICYmCSAgICAgXAorCQkJKGR5bmFtaWNfZGVidWdfZW5hYmxlZDIgJiAoMUxMIDw8IERFQlVHX0hBU0gyKSkpKSAgIFwKKwkJCQlpZiAodW5saWtlbHkoZGQuZmxhZ3MpKQkJCSAgICAgXAorCQkJCQlfX3JldCA9IDE7CQkJICAgICBcCisJX19yZXQ7IH0pCisKKyNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgZG8gewkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyBkZXNjcmlwdG9yCQkJCVwKKwlfX3VzZWQJCQkJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCVwKKwl7IEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19GSUxFX18sIGZtdCwgREVCVUdfSEFTSCwJXAorCQlERUJVR19IQVNIMiwgX19MSU5FX18sIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgfTsJXAorCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGVzY3JpcHRvcikpCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjoiIHByX2ZtdChmbXQpLAlcCisJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm10LCAuLi4pIGRvIHsJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyBkZXNjcmlwdG9yCQkJCVwKKwlfX3VzZWQJCQkJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCVwKKwl7IEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19GSUxFX18sIGZtdCwgREVCVUdfSEFTSCwJXAorCQlERUJVR19IQVNIMiwgX19MSU5FX18sIF9EUFJJTlRLX0ZMQUdTX0RFRkFVTFQgfTsJXAorCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoZGVzY3JpcHRvcikpCQkJCVwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAkJCVwKKwkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBwcl9mbXQoZm10KSxcCisJCQkJCSMjX19WQV9BUkdTX18pOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjaGFyICptb2QpCit7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmggYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNTI4ZDAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotI2lmbmRlZiBfRFlOQU1JQ19QUklOVEtfSAotI2RlZmluZSBfRFlOQU1JQ19QUklOVEtfSAotCi0jZGVmaW5lIERZTkFNSUNfREVCVUdfSEFTSF9CSVRTIDYKLSNkZWZpbmUgREVCVUdfSEFTSF9UQUJMRV9TSVpFICgxIDw8IERZTkFNSUNfREVCVUdfSEFTSF9CSVRTKQotCi0jZGVmaW5lIFRZUEVfQk9PTEVBTiAxCi0KLSNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX0FMTCAwCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9OT05FIDEKLSNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX1NPTUUgMgotCi1leHRlcm4gaW50IGR5bmFtaWNfZW5hYmxlZDsKLQotLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAotICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQotICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCi0gKi8KLWV4dGVybiBsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKLWV4dGVybiBsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDI7Ci0KLXN0cnVjdCBtb2RfZGVidWcgewotCWNoYXIgKm1vZG5hbWU7Ci0JY2hhciAqbG9naWNhbF9tb2RuYW1lOwotCWNoYXIgKmZsYWdfbmFtZXM7Ci0JaW50IHR5cGU7Ci0JaW50IGhhc2g7Ci0JaW50IGhhc2gyOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Ci0KLWludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCi0JCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQotZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKTsKLWV4dGVybiBpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RuYW1lLCBpbnQgdHlwZSwKLQkJCQkJaW50IHZhbHVlLCBpbnQgaGFzaCk7Ci0KLSNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKG1vZHVsZSwgdHlwZSwgdmFsdWUsIGxldmVsLCBoYXNoKSAgKHsJICAgICBcCi0JaW50IF9fcmV0ID0gMDsJCQkJCQkJICAgICBcCi0JaWYgKHVubGlrZWx5KChkeW5hbWljX3ByaW50a19lbmFibGVkICYgKDFMTCA8PCBERUJVR19IQVNIKSkgJiYJICAgICBcCi0JCQkoZHluYW1pY19wcmludGtfZW5hYmxlZDIgJiAoMUxMIDw8IERFQlVHX0hBU0gyKSkpKSAgIFwKLQkJCV9fcmV0ID0gX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihtb2R1bGUsIHR5cGUsICAgXAotCQkJCQkJCQl2YWx1ZSwgaGFzaCk7XAotCV9fcmV0OyB9KQotCi0jZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pIGRvIHsJCQkJCSAgICBcCi0Jc3RhdGljIGNoYXIgbW9kX25hbWVbXQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlX3N0cmluZ3MiKSkpCQkJICAgIFwKLQkgPSBLQlVJTERfTU9ETkFNRTsJCQkJCQkgICAgXAotCXN0YXRpYyBzdHJ1Y3QgbW9kX2RlYnVnIGRlc2NyaXB0b3IJCQkJICAgIFwKLQlfX3VzZWQJCQkJCQkJCSAgICBcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQkgICAgXAotCXsgbW9kX25hbWUsIG1vZF9uYW1lLCBOVUxMLCBUWVBFX0JPT0xFQU4sIERFQlVHX0hBU0gsIERFQlVHX0hBU0gyIH07XAotCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoS0JVSUxEX01PRE5BTUUsIFRZUEVfQk9PTEVBTiwJCSAgICBcCi0JCQkJCQkwLCAwLCBERUJVR19IQVNIKSkJICAgIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjoiIGZtdCwJCSAgICBcCi0JCQkJIyNfX1ZBX0FSR1NfXyk7CQkJCSAgICBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8gewkJCQkgICAgXAotCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCi0JID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKLQlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCi0JX191c2VkCQkJCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKLQl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKLQlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAotCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCi0JCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwJCQkgICAgXAotCQkJCQlLQlVJTERfTU9ETkFNRSAiOiAiIGZvcm1hdCwJICAgIFwKLQkJCQkJIyNfX1ZBX0FSR1NfXyk7CQkJICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZF9uYW1lKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RuYW1lLCBpbnQgdHlwZSwKLQkJCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKG1vZHVsZSwgdHlwZSwgdmFsdWUsIGxldmVsLCBoYXNoKSAgKHsgMDsgfSkKLSNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKaW5kZXggY2ViMTQ1NC4uZWMxMmNjNzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIFNPX0VFX09SSUdJTl9MT0NBTAkxCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QCTIKICNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVA2CTMKKyNkZWZpbmUgU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyA0CiAKICNkZWZpbmUgU09fRUVfT0ZGRU5ERVIoZWUpCSgoc3RydWN0IHNvY2thZGRyKikoKGVlKSsxKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCmluZGV4IDFjYjBmMGIuLmExZjE3YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKQEAgLTE4NCw0ICsxODQsMjUgQEAKIH0KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKKy8qKgorICogY29tcGFyZV9ldGhlcl9oZWFkZXIgLSBDb21wYXJlIHR3byBFdGhlcm5ldCBoZWFkZXJzCisgKiBAYTogUG9pbnRlciB0byBFdGhlcm5ldCBoZWFkZXIKKyAqIEBiOiBQb2ludGVyIHRvIEV0aGVybmV0IGhlYWRlcgorICoKKyAqIENvbXBhcmUgdHdvIGV0aGVybmV0IGhlYWRlcnMsIHJldHVybnMgMCBpZiBlcXVhbC4KKyAqIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGhlYWRlciAoaS5lLiwgSVAgaGVhZGVyKSBpcyA0LWJ5dGUKKyAqIGFsaWduZWQgT1IgdGhlIHBsYXRmb3JtIGNhbiBoYW5kbGUgdW5hbGlnbmVkIGFjY2Vzcy4gIFRoaXMgaXMgdGhlCisgKiBjYXNlIGZvciBhbGwgcGFja2V0cyBjb21pbmcgaW50byBuZXRpZl9yZWNlaXZlX3NrYiBvciBzaW1pbGFyCisgKiBlbnRyeSBwb2ludHMuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9ldGhlcl9oZWFkZXIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl1MzIgKmEzMiA9ICh1MzIgKikoKHU4ICopYSArIDIpOworCXUzMiAqYjMyID0gKHUzMiAqKSgodTggKiliICsgMik7CisKKwlyZXR1cm4gKCoodTE2ICopYSBeICoodTE2ICopYikgfCAoYTMyWzBdIF4gYjMyWzBdKSB8CisJICAgICAgIChhMzJbMV0gXiBiMzJbMV0pIHwgKGEzMlsyXSBeIGIzMlsyXSk7Cit9CisKICNlbmRpZgkvKiBfTElOVVhfRVRIRVJERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCAyN2M2N2E1Li4xMzFiMTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtNyw2ICs3LDcgQEAKICAqIFBvcnRpb25zIENvcHlyaWdodCAyMDAyIEludGVsIChlbGkua3VwZXJtYW5uQGludGVsLmNvbSwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJpc3RvcGhlci5sZWVjaEBpbnRlbC5jb20sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvdHQuZmVsZG1hbkBpbnRlbC5jb20pCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIFN1biBNaWNyb3N5c3RlbXMgMjAwOAogICovCiAKICNpZm5kZWYgX0xJTlVYX0VUSFRPT0xfSApAQCAtMjg3LDEwICsyODgsNzUgQEAKIAlFVEhfRkxBR19MUk8JCT0gKDEgPDwgMTUpLAkvKiBMUk8gaXMgZW5hYmxlZCAqLwogfTsKIAotc3RydWN0IGV0aHRvb2xfcnhuZmMgewotCV9fdTMyCQljbWQ7CisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgYXJlIGZvciBzdXBwb3J0aW5nIFJYIG5ldHdvcmsgZmxvdworICogY2xhc3NpZmljYXRpb24gY29uZmlndXJhdGlvbi4gTm90ZSwgYWxsIG11bHRpYnl0ZSBmaWVsZHMsIGUuZy4sCisgKiBpcDRzcmMsIGlwNGRzdCwgcHNyYywgcGRzdCwgc3BpLCBldGMuIGFyZSBleHBlY3RlZCB0byBiZSBpbiBuZXR3b3JrCisgKiBieXRlIG9yZGVyLgorICovCitzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fYmUxNglwc3JjOworCV9fYmUxNglwZHN0OworCV9fdTggICAgdG9zOworfTsKKworc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMzIJc3BpOworCV9fdTggICAgdG9zOworfTsKKworc3RydWN0IGV0aHRvb2xfcmF3aXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX3U4CWhkYXRhWzY0XTsKK307CisKK3N0cnVjdCBldGh0b29sX2V0aGVyX3NwZWMgeworCV9fYmUxNglldGhlcl90eXBlOworCV9fdTgJZnJhbWVfc2l6ZTsKKwlfX3U4CWVmcmFtZVsxNl07Cit9OworCisjZGVmaW5lCUVUSF9SWF9ORkNfSVA0CTEKKyNkZWZpbmUJRVRIX1JYX05GQ19JUDYJMgorCitzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYyB7CisJX19iZTMyCWlwNHNyYzsKKwlfX2JlMzIJaXA0ZHN0OworCV9fYmUzMglsNF80X2J5dGVzOworCV9fdTggICAgdG9zOworCV9fdTggICAgaXBfdmVyOworCV9fdTggICAgcHJvdG87Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgewogCV9fdTMyCQlmbG93X3R5cGU7Ci0JX191NjQJCWRhdGE7CisJdW5pb24geworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdGNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdWRwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWFoX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJZXNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9yYXdpcDRfc3BlYwkJcmF3X2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9ldGhlcl9zcGVjCQlldGhlcl9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCQlfX3U4CQkJCQloZGF0YVs2NF07CisJfSBoX3UsIG1fdTsgLyogZW50cnksIG1hc2sgKi8KKwlfX3U2NAkJcmluZ19jb29raWU7CisJX191MzIJCWxvY2F0aW9uOworfTsKKworc3RydWN0IGV0aHRvb2xfcnhuZmMgeworCV9fdTMyCQkJCWNtZDsKKwlfX3UzMgkJCQlmbG93X3R5cGU7CisJLyogVGhlIHJ4IGZsb3cgaGFzaCB2YWx1ZSBvciB0aGUgcnVsZSBEQiBzaXplICovCisJX191NjQJCQkJZGF0YTsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMJZnM7CisJX191MzIJCQkJcnVsZV9jbnQ7CisJX191MzIJCQkJcnVsZV9sb2NzWzBdOwogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTQxNyw4ICs0ODMsOCBAQAogCS8qIHRoZSBmb2xsb3dpbmcgaG9va3MgYXJlIG9ic29sZXRlICovCiAJaW50CSgqc2VsZl90ZXN0X2NvdW50KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsvKiB1c2UgZ2V0X3NzZXRfY291bnQgKi8KIAlpbnQJKCpnZXRfc3RhdHNfY291bnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOy8qIHVzZSBnZXRfc3NldF9jb3VudCAqLwotCWludAkoKmdldF9yeGhhc2gpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOwotCWludAkoKnNldF9yeGhhc2gpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOworCWludAkoKmdldF9yeG5mYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKiwgdm9pZCAqKTsKKwlpbnQJKCpzZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOwogfTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKQEAgLTQ2OSw2ICs1MzUsMTIgQEAKICNkZWZpbmUJRVRIVE9PTF9TUlhGSAkJMHgwMDAwMDAyYSAvKiBTZXQgUlggZmxvdyBoYXNoIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRVRIVE9PTF9HR1JPCQkweDAwMDAwMDJiIC8qIEdldCBHUk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLwogI2RlZmluZSBFVEhUT09MX1NHUk8JCTB4MDAwMDAwMmMgLyogU2V0IEdSTyBlbmFibGUgKGV0aHRvb2xfdmFsdWUpICovCisjZGVmaW5lCUVUSFRPT0xfR1JYUklOR1MJMHgwMDAwMDAyZCAvKiBHZXQgUlggcmluZ3MgYXZhaWxhYmxlIGZvciBMQiAqLworI2RlZmluZQlFVEhUT09MX0dSWENMU1JMQ05UCTB4MDAwMDAwMmUgLyogR2V0IFJYIGNsYXNzIHJ1bGUgY291bnQgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSVUxFCTB4MDAwMDAwMmYgLyogR2V0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSTEFMTAkweDAwMDAwMDMwIC8qIEdldCBhbGwgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLworI2RlZmluZQlFVEhUT09MX1NSWENMU1JMREVMCTB4MDAwMDAwMzEgLyogRGVsZXRlIFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9TUlhDTFNSTElOUwkweDAwMDAwMDMyIC8qIEluc2VydCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCiAKIC8qIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBjb2RlICovCiAjZGVmaW5lIFNQQVJDX0VUSF9HU0VUCQlFVEhUT09MX0dTRVQKQEAgLTU2NSw5ICs2MzcsMTMgQEAKICNkZWZpbmUJVURQX1Y2X0ZMT1cJMHgwNgogI2RlZmluZQlTQ1RQX1Y2X0ZMT1cJMHgwNwogI2RlZmluZQlBSF9FU1BfVjZfRkxPVwkweDA4CisjZGVmaW5lCUFIX1Y0X0ZMT1cJMHgwOQorI2RlZmluZQlFU1BfVjRfRkxPVwkweDBhCisjZGVmaW5lCUFIX1Y2X0ZMT1cJMHgwYgorI2RlZmluZQlFU1BfVjZfRkxPVwkweDBjCisjZGVmaW5lCUlQX1VTRVJfRkxPVwkweDBkCiAKIC8qIEwzLUw0IG5ldHdvcmsgdHJhZmZpYyBmbG93IGhhc2ggb3B0aW9ucyAqLwotI2RlZmluZQlSWEhfREVWX1BPUlQJKDEgPDwgMCkKICNkZWZpbmUJUlhIX0wyREEJKDEgPDwgMSkKICNkZWZpbmUJUlhIX1ZMQU4JKDEgPDwgMikKICNkZWZpbmUJUlhIX0wzX1BST1RPCSgxIDw8IDMpCkBAIC01NzcsNSArNjUzLDYgQEAKICNkZWZpbmUJUlhIX0w0X0JfMl8zCSgxIDw8IDcpIC8qIGRzdCBwb3J0IGluIGNhc2Ugb2YgVENQL1VEUC9TQ1RQICovCiAjZGVmaW5lCVJYSF9ESVNDQVJECSgxIDw8IDMxKQogCisjZGVmaW5lCVJYX0NMU19GTE9XX0RJU0MJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCiAKICNlbmRpZiAvKiBfTElOVVhfRVRIVE9PTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oIGIvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAppbmRleCBmMWUxZDNjLi5mNjg1NmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKQEAgLTYxLDcgKzYxLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfaW5pdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQogewogCUlOSVRfTElTVF9IRUFEKCZmaWxlLT5mX2VwX2xpbmtzKTsKLQlzcGluX2xvY2tfaW5pdCgmZmlsZS0+Zl9lcF9sb2NrKTsKIH0KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggOTI3MzRjMC4uMWNkNDRmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTQxLDYgKzE0MSw3IEBACiAjZGVmaW5lIE1TX1JFTEFUSU1FCSgxPDwyMSkJLyogVXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lLiAqLwogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KKyNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCiAjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCiAKQEAgLTg0OCw2ICs4NDksNyBAQAogI2RlZmluZSBmX2RlbnRyeQlmX3BhdGguZGVudHJ5CiAjZGVmaW5lIGZfdmZzbW50CWZfcGF0aC5tbnQKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOworCXNwaW5sb2NrX3QJCWZfbG9jazsgIC8qIGZfZXBfbGlua3MsIGZfZmxhZ3MgKi8KIAlhdG9taWNfbG9uZ190CQlmX2NvdW50OwogCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7CiAJZm1vZGVfdAkJCWZfbW9kZTsKQEAgLTg2Niw3ICs4NjgsNiBAQAogI2lmZGVmIENPTkZJR19FUE9MTAogCS8qIFVzZWQgYnkgZnMvZXZlbnRwb2xsLmMgdG8gbGluayBhbGwgdGhlIGhvb2tzIHRvIHRoaXMgZmlsZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZl9lcF9saW5rczsKLQlzcGlubG9ja190CQlmX2VwX2xvY2s7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19FUE9MTCAqLwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSpmX21hcHBpbmc7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmggYi9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCmluZGV4IDEzZjRlNzQuLjBmZmE0MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaApAQCAtMjIsNyArMjIsNyBAQAogewogCV9fdTY0CWJ5dGVzOwogCV9fdTMyCXBhY2tldHM7Ci19OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgogICogc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QgLSByYXRlIGVzdGltYXRvcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDE2OTQ4ZWEuLjYzNGM1MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTMzMywxMSArMzMzLDEwIEBACiAJCXBhcnRfdG9fZGlzayhwYXJ0KS0+cGFydDAuaW5fZmxpZ2h0LS07CiB9CiAKLS8qIGRyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMgKi8KKy8qIGJsb2NrL2Jsay1jb3JlLmMgKi8KIGV4dGVybiB2b2lkIHBhcnRfcm91bmRfc3RhdHMoaW50IGNwdSwgc3RydWN0IGhkX3N0cnVjdCAqcGFydCk7CiAKLS8qIGRyaXZlcnMvYmxvY2svZ2VuaGQuYyAqLwotZXh0ZXJuIGludCBnZXRfYmxrZGV2X2xpc3QoY2hhciAqLCBpbnQpOworLyogYmxvY2svZ2VuaGQuYyAqLwogZXh0ZXJuIHZvaWQgYWRkX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOwogZXh0ZXJuIHZvaWQgZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdwKTsKIGV4dGVybiB2b2lkIHVubGlua19nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaGRsYy5oCmluZGV4IGZkNDdhMTUuLjZhNmU3MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsYy5oCkBAIC0zOCw2ICszOCw3IEBACiAJaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKIAlfX2JlMTYgKCp0eXBlX3RyYW5zKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQgKCpuZXRpZl9yeCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCXN0cnVjdCBoZGxjX3Byb3RvICpuZXh0OyAvKiBuZXh0IHByb3RvY29sIGluIHRoZSBsaXN0ICovCiB9OwpAQCAtMTAyLDYgKzEwMywxMCBAQAogaW50IGhkbGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCAqLwogdm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyICovCitpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKKy8qIE11c3QgYmUgcG9pbnRlZCB0byBieSBodyBkcml2ZXIncyBkZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0ICovCitpbnQgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgYXR0YWNoX2hkbGNfcHJvdG9jb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvLAogCQkJIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oIGIvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKaW5kZXggYmY2MzAyZi4uYzAxMGI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKKysrIGIvaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKQEAgLTIxNSw3ICsyMTUsNyBAQAogCiAJc3RydWN0IGhkbGNkcnZfaGRsY3R4IHsKIAkJc3RydWN0IGhkbGNkcnZfaGRsY2J1ZmZlciBoYnVmOwotCQlsb25nIGluX2hkbGNfdHg7CisJCXVuc2lnbmVkIGxvbmcgaW5faGRsY190eDsKIAkJLyoKIAkJICogMCA9IHNlbmQgZmxhZ3MKIAkJICogMSA9IHNlbmQgdHh0YWlsIChmbGFncykKQEAgLTI0MSw3ICsyNDEsNiBAQAogCXN0cnVjdCBoZGxjZHJ2X2JpdGJ1ZmZlciBiaXRidWZfaGRsYzsKICNlbmRpZiAvKiBIRExDRFJWX0RFQlVHICovCiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlpbnQgcHR0X2tleWVkOwogCiAJLyogcXVldWVkIHNrYiBmb3IgdHJhbnNtaXNzaW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2libXRyLmggYi9pbmNsdWRlL2xpbnV4L2libXRyLmgKaW5kZXggMWM3YTBkZC4uMDY2OTViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pYm10ci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWJtdHIuaApAQCAtMjA3LDcgKzIwNyw3IEBACiAJdW5zaWduZWQgc2hvcnQgZXhzYXBfc3RhdGlvbl9pZDsKIAl1bnNpZ25lZCBzaG9ydCBnbG9iYWxfaW50X2VuYWJsZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9za2I7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgdHJfc3RhdHM7CisKIAl1bnNpZ25lZCBjaGFyIGF1dG9fc3BlZWRzYXZlOwogCW9wZW5fc3RhdGUJCQlvcGVuX3N0YXR1cywgc2FwX3N0YXR1czsKIAllbnVtIHtNQU5VQUwsIEFVVE9NQVRJQ30Jb3Blbl9tb2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggMjUwODdhZS4uODU0ZWJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL211dGV4Lmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUklTKSB8fCBkZWZpbmVkKENPTkZJR19GUlYpCisjaWYgZGVmaW5lZChDT05GSUdfQ1JJUykgfHwgZGVmaW5lZChDT05GSUdfRlJWKSB8fCBkZWZpbmVkKENPTkZJR19NTjEwMzAwKQogIyBkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAwCiAjZWxzZQogIyBkZWZpbmUgU1VQUE9SVF9WTEJfU1lOQyAxCkBAIC0xOTMsMjQgKzE5Myw4IEBACiAJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RsX2FkZHI7CiB9CiAKLS8qIGZvciBJREUgUENJIGNvbnRyb2xsZXJzIGluIGxlZ2FjeSBtb2RlLCB0ZW1wb3JhcnkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faWRlX2RlZmF1bHRfaXJxKHVuc2lnbmVkIGxvbmcgYmFzZSkKLXsKLQlzd2l0Y2ggKGJhc2UpIHsKLSNpZmRlZiBDT05GSUdfSUE2NAotCWNhc2UgMHgxZjA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNCk7Ci0JY2FzZSAweDE3MDogcmV0dXJuIGlzYV9pcnFfdG9fdmVjdG9yKDE1KTsKLSNlbHNlCi0JY2FzZSAweDFmMDogcmV0dXJuIDE0OwotCWNhc2UgMHgxNzA6IHJldHVybiAxNTsKLSNlbmRpZgotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfRlJWKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgZGVmaW5lZChDT05GSUdfTU4xMDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUEFSSVNDKSBcCi0gICAgfHwgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkM2NCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX002OEspIHx8IGRlZmluZWQoQ09ORklHX01JUFMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpCiAjaW5jbHVkZSA8YXNtL2lkZS5oPgogI2Vsc2UKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgpAQCAtODY2LDcgKzg1MCw3IEBACiAJaWRlX2h3aWZfdAkqcG9ydHNbTUFYX0hPU1RfUE9SVFMgKyAxXTsKIAl1bnNpZ25lZCBpbnQJbl9wb3J0czsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXZbMl07Ci0JdW5zaWduZWQgaW50CSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKwlpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKIAlpcnFfaGFuZGxlcl90CWlycV9oYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcJaG9zdF9mbGFnczsKIAl2b2lkCQkqaG9zdF9wcml2OwpAQCAtMTE0NiwxMSArMTEzMCwxNCBAQAogZXh0ZXJuIGludCBpZGVfdmxiX2NsazsKIGV4dGVybiBpbnQgaWRlX3BjaV9jbGs7CiAKLWV4dGVybiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2Vjcyk7Ci1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKTsKK2ludCBpZGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOworaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7Cit2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi1leHRlcm4gdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KTsKK3ZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgICBpZGVfZXhwaXJ5X3QgKik7Cit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKKwkJICAgICBpZGVfZXhwaXJ5X3QgKik7CiAKIHZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgaWRlX2V4cGlyeV90ICopOwpAQCAtMTE2OSwxMyArMTE1NiwxNCBAQAogCiBpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKiwgaWRlX2RyaXZlX3QgKiwgdTgsIHU4LCB1bnNpZ25lZCBsb25nKTsKIAoraWRlX3N0YXJ0c3RvcF90IGlkZV9kb19wYXJrX3VucGFyayhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fZGV2c2V0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCiBleHRlcm4gaWRlX3N0YXJ0c3RvcF90IGlkZV9kb19yZXNldCAoaWRlX2RyaXZlX3QgKik7CiAKIGV4dGVybiBpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nLCBpbnQgYXJnKTsKIAotZXh0ZXJuIHZvaWQgaWRlX2RvX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLQogZXh0ZXJuIHZvaWQgaWRlX2VuZF9kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgdTgsIHU4KTsKIAogdm9pZCBpZGVfdGZfZHVtcChjb25zdCBjaGFyICosIHN0cnVjdCBpZGVfdGFza2ZpbGUgKik7CkBAIC0xMjAwLDEwICsxMTg4LDYgQEAKIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKiwgdTE2ICosIHU4ICopOwogCi1leHRlcm4gaW50IGRyaXZlX2lzX3JlYWR5KGlkZV9kcml2ZV90ICopOwotCi12b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCB1MzIsIHUxNiwgdTgpOwotCiBpbnQgaWRlX2NoZWNrX2F0YXBpX2RldmljZShpZGVfZHJpdmVfdCAqLCBjb25zdCBjaGFyICopOwogCiB2b2lkIGlkZV9pbml0X3BjKHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CkBAIC0xMjUxLDYgKzEyMzUsOCBAQAogCiBpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKK2ludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKiwgdTgsIHUxNiAqKTsKKwogZXh0ZXJuIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gaW50IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoaWRlX2RyaXZlX3QgKiwgdTgpOwogZXh0ZXJuIHU4IGVpZ2h0eV9uaW50eV90aHJlZSAoaWRlX2RyaXZlX3QgKik7CkBAIC0xMjgwLDcgKzEyNjYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaW50LAordm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosCiAJCQkgaHdfcmVnc190ICosIGh3X3JlZ3NfdCAqKik7CiB2b2lkIGlkZV9zZXR1cF9wY2lfbm9pc2Uoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7CiAKQEAgLTEzNDksMTAgKzEzMzUsNiBAQAogCUlERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPCT0gKDEgPDwgMTkpLAogCS8qIHNlcmlhbGl6ZSBwb3J0cyAqLwogCUlERV9IRkxBR19TRVJJQUxJWkUJCT0gKDEgPDwgMjApLAotCS8qIHVzZSBsZWdhY3kgSVJRcyAqLwotCUlERV9IRkxBR19MRUdBQ1lfSVJRUwkJPSAoMSA8PCAyMSksCi0JLyogZm9yY2UgdXNlIG9mIGxlZ2FjeSBJUlFzICovCi0JSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTCT0gKDEgPDwgMjIpLAogCS8qIGhvc3QgaXMgVFJNMjkwICovCiAJSURFX0hGTEFHX1RSTTI5MAkJPSAoMSA8PCAyMyksCiAJLyogdXNlIDMyLWJpdCBJL08gb3BzICovCkBAIC0xMzgwLDcgKzEzNjIsNyBAQAogCiBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyB7CiAJY2hhcgkJCSpuYW1lOwotCXVuc2lnbmVkIGludAkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCWludAkJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKIAl2b2lkCQkJKCppbml0X2lvcHMpKGlkZV9od2lmX3QgKik7CiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKCppbml0X2h3aWYpKGlkZV9od2lmX3QgKik7CiAJaW50CQkJKCppbml0X2RtYSkoaWRlX2h3aWZfdCAqLApAQCAtMTQ3MSw2ICsxNDUzLDcgQEAKIAogdm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICosIGludCk7CiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpZGVfaWRfZG1hX2J1ZyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KQEAgLTE0ODIsMjEgKzE0NjUsMjQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfZG1hX3ZlcmJvc2UoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQogc3RhdGljIGlubGluZSBpbnQgaWRlX3NldF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NoZWNrX2RtYV9jcmMoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorc3RhdGljIGlubGluZSBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKSB7IHJldHVybiBpZGVfc3RvcHBlZDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERUFDUEkKK2ludCBpZGVfYWNwaV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfZ2V0X3RpbWluZyhpZGVfaHdpZl90ICpod2lmKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX3B1c2hfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpOwotZXh0ZXJuIHZvaWQgaWRlX2FjcGlfaW5pdChpZGVfaHdpZl90ICpod2lmKTsKK3ZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKik7CiB2b2lkIGlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGlkZV9od2lmX3QgKik7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9zZXRfc3RhdGUoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpZGVfYWNwaV9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9hY3BpX2V4ZWNfdGZzKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2dldF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9wdXNoX3RpbWluZyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9hY3BpX3NldF9zdGF0ZShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pIHt9CiAjZW5kaWYKQEAgLTE1MzAsOSArMTUxNiw3IEBACiAJaHdpZi0+aHdpZl9kYXRhID0gZGF0YTsKIH0KIAotY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKTsKIGV4dGVybiB2b2lkIGlkZV90b2dnbGVfYm91bmNlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKTsKLWV4dGVybiBpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByYXRlKTsKIAogdTY0IGlkZV9nZXRfbGJhX2FkZHIoc3RydWN0IGlkZV90YXNrZmlsZSAqLCBpbnQpOwogdTggaWRlX2R1bXBfc3RhdHVzKGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKiwgdTgpOwpAQCAtMTU3MSwxNCArMTU1NSwxOCBAQAogCQkgICAgICBzdHJ1Y3QgaWRlX3RpbWluZyAqLCB1bnNpZ25lZCBpbnQpOwogaW50IGlkZV90aW1pbmdfY29tcHV0ZShpZGVfZHJpdmVfdCAqLCB1OCwgc3RydWN0IGlkZV90aW1pbmcgKiwgaW50LCBpbnQpOwogCisjaWZkZWYgQ09ORklHX0lERV9YRkVSX01PREUKIGludCBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KGNoYXIgKik7Ci0KK2NvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTgpOwogdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Ci0KIGludCBpZGVfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIHU4KTsKIGludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICosIHU4KTsKLQogdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqLCB1OCk7CitpbnQgaWRlX3NldF94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKiwgdTgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfc2V0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9tYXhfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTE2MTEsNiArMTU5OSwxMCBAQAogI2RlZmluZSBpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZGV2LCBwb3J0KSBcCiAJZm9yICgoaSkgPSAwOyAoKGRldikgPSAocG9ydCktPmRldmljZXNbaV0pIHx8IChpKSA8IE1BWF9EUklWRVM7IChpKSsrKQogCisjZGVmaW5lIGlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRldiwgcG9ydCkgXAorCWZvciAoKGkpID0gMDsgKChkZXYpID0gKHBvcnQpLT5kZXZpY2VzW2ldKSB8fCAoaSkgPCBNQVhfRFJJVkVTOyAoaSkrKykgXAorCQlpZiAoKGRldiktPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQorCiAjZGVmaW5lIGlkZV9ob3N0X2Zvcl9lYWNoX3BvcnQoaSwgcG9ydCwgaG9zdCkgXAogCWZvciAoKGkpID0gMDsgKChwb3J0KSA9IChob3N0KS0+cG9ydHNbaV0pIHx8IChpKSA8IE1BWF9IT1NUX1BPUlRTOyAoaSkrKykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggYzRlNmNhMS4uYjFiYjgxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC01MjcsNiArNTI3LDggQEAKIAl1OCB2aXJ0dWFsX21hcFswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFdMQU5fU0FfUVVFUllfVFJfSURfTEVOIDE2CisKIHN0cnVjdCBpZWVlODAyMTFfbWdtdCB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CiAJX19sZTE2IGR1cmF0aW9uOwpAQCAtNjQ2LDYgKzY0OCwxMCBAQAogCQkJCQl1OCBhY3Rpb25fY29kZTsKIAkJCQkJdTggdmFyaWFibGVbMF07CiAJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZXNoX2FjdGlvbjsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHRyYW5zX2lkW1dMQU5fU0FfUVVFUllfVFJfSURfTEVOXTsKKwkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzYV9xdWVyeTsKIAkJCX0gdTsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOwogCX0gdTsKQEAgLTY1NSw2ICs2NjEsMTUgQEAKICNkZWZpbmUgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYWN0aW9uLnUpCiAKIAorLyogTWFuYWdlbWVudCBNSUMgaW5mb3JtYXRpb24gZWxlbWVudCAoSUVFRSA4MDIuMTF3KSAqLworc3RydWN0IGllZWU4MDIxMV9tbWllIHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbmd0aDsKKwlfX2xlMTYga2V5X2lkOworCXU4IHNlcXVlbmNlX251bWJlcls2XTsKKwl1OCBtaWNbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogQ29udHJvbCBmcmFtZXMgKi8KIHN0cnVjdCBpZWVlODAyMTFfcnRzIHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKQEAgLTg5OSw2ICs5MTQsOSBAQAogCS8qIDgwMi4xMWcgKi8KIAlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9TSE9SVFRJTUUgPSAyNSwKIAlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9EU1NTT0ZETSA9IDI2LAorCS8qIDgwMi4xMXcgKi8KKwlXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9URU1QT1JBUklMWSA9IDMwLAorCVdMQU5fU1RBVFVTX1JPQlVTVF9NR01UX0ZSQU1FX1BPTElDWV9WSU9MQVRJT04gPSAzMSwKIAkvKiA4MDIuMTFpICovCiAJV0xBTl9TVEFUVVNfSU5WQUxJRF9JRSA9IDQwLAogCVdMQU5fU1RBVFVTX0lOVkFMSURfR1JPVVBfQ0lQSEVSID0gNDEsCkBAIC0xMDE4LDYgKzEwMzYsOCBAQAogCVdMQU5fRUlEX0hUX0lORk9STUFUSU9OID0gNjEsCiAJLyogODAyLjExaSAqLwogCVdMQU5fRUlEX1JTTiA9IDQ4LAorCVdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUwgPSA1NiwKKwlXTEFOX0VJRF9NTUlFID0gNzYgLyogODAyLjExdyAqLywKIAlXTEFOX0VJRF9XUEEgPSAyMjEsCiAJV0xBTl9FSURfR0VORVJJQyA9IDIyMSwKIAlXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMgPSAyMjEsCkBAIC0xMDMwLDYgKzEwNTAsOCBAQAogCVdMQU5fQ0FURUdPUllfUU9TID0gMSwKIAlXTEFOX0NBVEVHT1JZX0RMUyA9IDIsCiAJV0xBTl9DQVRFR09SWV9CQUNLID0gMywKKwlXTEFOX0NBVEVHT1JZX1BVQkxJQyA9IDQsCisJV0xBTl9DQVRFR09SWV9TQV9RVUVSWSA9IDgsCiAJV0xBTl9DQVRFR09SWV9XTU0gPSAxNywKIH07CiAKQEAgLTExMDQsNiArMTEyNiwxMiBAQAogCX07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorZW51bSBpZWVlODAyMTFfdGltZW91dF9pbnRlcnZhbF90eXBlIHsKKwlXTEFOX1RJTUVPVVRfUkVBU1NPQ19ERUFETElORSA9IDEgLyogODAyLjExciAqLywKKwlXTEFOX1RJTUVPVVRfS0VZX0xJRkVUSU1FID0gMiAvKiA4MDIuMTFyICovLAorCVdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSyA9IDMgLyogODAyLjExdyAqLywKK307CisKIC8qIEJBQ0sgYWN0aW9uIGNvZGUgKi8KIGVudW0gaWVlZTgwMjExX2JhY2tfYWN0aW9uY29kZSB7CiAJV0xBTl9BQ1RJT05fQUREQkFfUkVRID0gMCwKQEAgLTExMTgsNiArMTE0NiwxMyBAQAogCVdMQU5fQkFDS19USU1FUiA9IDIsCiB9OwogCisvKiBTQSBRdWVyeSBhY3Rpb24gKi8KK2VudW0gaWVlZTgwMjExX3NhX3F1ZXJ5X2FjdGlvbiB7CisJV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVRVUVTVCA9IDAsCisJV0xBTl9BQ1RJT05fU0FfUVVFUllfUkVTUE9OU0UgPSAxLAorfTsKKworCiAvKiBBLU1TRFUgODAyLjExbiAqLwogI2RlZmluZSBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQgMHgwMDgwCiAKQEAgLTExMjgsNiArMTE2Myw3IEBACiAvKiByZXNlcnZlZDogCQkJCTB4MDAwRkFDMDMgKi8KICNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUAkJMHgwMDBGQUMwNAogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQJMHgwMDBGQUMwNQorI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQwkweDAwMEZBQzA2CiAKICNkZWZpbmUgV0xBTl9NQVhfS0VZX0xFTgkJMzIKIApAQCAtMTE4NSw0ICsxMjIxLDE0OSBAQAogCQlyZXR1cm4gaGRyLT5hZGRyMTsKIH0KIAorLyoqCisgKiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUgLSBjaGVjayBpZiBmcmFtZSBpcyBhIHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lCisgKiBAaGRyOiB0aGUgZnJhbWUgKGJ1ZmZlciBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgdGhlIGZpcnN0IG9jdGV0IG9mIHBheWxvYWQpCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlpZiAoaWVlZTgwMjExX2lzX2Rpc2Fzc29jKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgaWVlZTgwMjExX2lzX2RlYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdTggKmNhdGVnb3J5OworCisJCS8qCisJCSAqIEFjdGlvbiBmcmFtZXMsIGV4Y2x1ZGluZyBQdWJsaWMgQWN0aW9uIGZyYW1lcywgYXJlIFJvYnVzdAorCQkgKiBNYW5hZ2VtZW50IEZyYW1lcy4gSG93ZXZlciwgaWYgd2UgYXJlIGxvb2tpbmcgYXQgYSBQcm90ZWN0ZWQKKwkJICogZnJhbWUsIHNraXAgdGhlIGNoZWNrIHNpbmNlIHRoZSBkYXRhIG1heSBiZSBlbmNyeXB0ZWQgYW5kCisJCSAqIHRoZSBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIGZvdW5kIHRvIGJlIGEgUm9idXN0IE1hbmFnZW1lbnQKKwkJICogRnJhbWUgKGJ5IHRoZSBvdGhlciBlbmQpLgorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJY2F0ZWdvcnkgPSAoKHU4ICopIGhkcikgKyAyNDsKKwkJcmV0dXJuICpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1BVQkxJQzsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2Zoc3NfY2hhbl90b19mcmVxIC0gZ2V0IGNoYW5uZWwgZnJlcXVlbmN5CisgKiBAY2hhbm5lbDogdGhlIEZIU1MgY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBGSFNTIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE0LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2Zoc3NfY2hhbl90b19mcmVxKGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDEpICYmIChjaGFubmVsIDwgOTYpKQorCQlyZXR1cm4gY2hhbm5lbCArIDI0MDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fZmhzc19jaGFuIC0gZ2V0IGNoYW5uZWwKKyAqIEBmcmVxOiB0aGUgY2hhbm5lbHMgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBGSFNTIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTQuNgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZnJlcV90b19maHNzX2NoYW4oaW50IGZyZXEpCit7CisJaWYgKChmcmVxID4gMjQwMSkgJiYgKGZyZXEgPCAyNDk2KSkKKwkJcmV0dXJuIGZyZXEgLSAyNDAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGNlbnRlciBmcmVxdWVuY3kKKyAqIEBjaGFubmVsOiB0aGUgRFNTUyBjaGFubmVsCisgKgorICogQ29udmVydCBJRUVFODAyLjExIERTU1MgY2hhbm5lbCB0byB0aGUgY2VudGVyIGZyZXF1ZW5jeSAoTUh6KS4KKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTUuNgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMCkgJiYgKGNoYW5uZWwgPCAxNCkpCisJCXJldHVybiAyNDA3ICsgKGNoYW5uZWwgKiA1KTsKKwllbHNlIGlmIChjaGFubmVsID09IDE0KQorCQlyZXR1cm4gMjQ4NDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4gLSBnZXQgY2hhbm5lbAorICogQGZyZXE6IHRoZSBmcmVxdWVuY3kKKyAqCisgKiBDb252ZXJ0IGZyZXF1ZW5jeSAoTUh6KSB0byBJRUVFODAyLjExIERTU1MgY2hhbm5lbAorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNS42CisgKgorICogVGhpcyByb3V0aW5lIHNlbGVjdHMgdGhlIGNoYW5uZWwgd2l0aCB0aGUgY2xvc2VzdCBjZW50ZXIgZnJlcXVlbmN5LgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oaW50IGZyZXEpCit7CisJaWYgKChmcmVxID49IDI0MTApICYmIChmcmVxIDwgMjQ3NSkpCisJCXJldHVybiAoZnJlcSAtIDI0MDUpIC8gNTsKKwllbHNlIGlmICgoZnJlcSA+PSAyNDgyKSAmJiAoZnJlcSA8IDI0ODcpKQorCQlyZXR1cm4gMTQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qIENvbnZlcnQgSUVFRTgwMi4xMSBIUiBEU1NTIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopIGFuZCBiYWNrCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE4LjQuNi4yCisgKgorICogVGhlIGNoYW5uZWxzIGFuZCBmcmVxdWVuY2llcyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgZGVmaW5lZCBmb3IgRFNTUworICovCisjZGVmaW5lIGllZWU4MDIxMV9ocl9jaGFuX3RvX2ZyZXEoY2hhbikgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW4pCisjZGVmaW5lIGllZWU4MDIxMV9mcmVxX3RvX2hyX2NoYW4oZnJlcSkgaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGZyZXEpCisKKy8qIENvbnZlcnQgSUVFRTgwMi4xMSBFUlAgY2hhbm5lbCB0byBmcmVxdWVuY3kgKE1IeikgYW5kIGJhY2sKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTkuNC4yCisgKi8KKyNkZWZpbmUgaWVlZTgwMjExX2VycF9jaGFuX3RvX2ZyZXEoY2hhbikgaWVlZTgwMjExX2hyX2NoYW5fdG9fZnJlcShjaGFuKQorI2RlZmluZSBpZWVlODAyMTFfZnJlcV90b19lcnBfY2hhbihmcmVxKSBpZWVlODAyMTFfZnJlcV90b19ocl9jaGFuKGZyZXEpCisKKy8qKgorICogaWVlZTgwMjExX29mZG1fY2hhbl90b19mcmVxIC0gZ2V0IGNoYW5uZWwgY2VudGVyIGZyZXF1ZW5jeQorICogQHNfZnJlcTogc3RhcnRpbmcgZnJlcXVlbmN5ID09IChkb3RDaGFubmVsU3RhcnRpbmdGYWN0b3IvMikgTUh6CisgKiBAY2hhbm5lbDogdGhlIE9GRE0gY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBPRkRNIGNoYW5uZWwgdG8gY2VudGVyIGZyZXF1ZW5jeSAoTUh6KQorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNy4zLjguMy4yCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9vZmRtX2NoYW5fdG9fZnJlcShpbnQgc19mcmVxLCBpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAwKSAmJiAoY2hhbm5lbCA8PSAyMDApICYmCisJICAgIChzX2ZyZXEgPj0gNDAwMCkpCisJCXJldHVybiBzX2ZyZXEgKyAoY2hhbm5lbCAqIDUpOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX29mZG1fY2hhbm5lbCAtIGdldCBjaGFubmVsCisgKiBAc19mcmVxOiBzdGFydGluZyBmcmVxdWVuY3kgPT0gKGRvdENoYW5uZWxTdGFydGluZ0ZhY3Rvci8yKSBNSHoKKyAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBPRkRNIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTcuMy44LjMuMgorICoKKyAqIFRoaXMgcm91dGluZSBzZWxlY3RzIHRoZSBjaGFubmVsIHdpdGggdGhlIGNsb3Nlc3QgY2VudGVyIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fb2ZkbV9jaGFuKGludCBzX2ZyZXEsIGludCBmcmVxKQoreworCWlmICgoZnJlcSA+IChzX2ZyZXEgKyAyKSkgJiYgKGZyZXEgPD0gKHNfZnJlcSArIDEyMDIpKSAmJgorCSAgICAoc19mcmVxID49IDQwMDApKQorCQlyZXR1cm4gKGZyZXEgKyAyIC0gc19mcmVxKSAvIDU7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKICNlbmRpZiAvKiBMSU5VWF9JRUVFODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZi5oIGIvaW5jbHVkZS9saW51eC9pZi5oCmluZGV4IDJhNmUyOTYuLjExMDhmM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmLmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgSUZGX1NMQVZFX05FRURBUlAgMHg0MAkJLyogbmVlZCBBUlBzIGZvciB2YWxpZGF0aW9uCSovCiAjZGVmaW5lIElGRl9JU0FUQVAJMHg4MAkJLyogSVNBVEFQIGludGVyZmFjZSAoUkZDNDIxNCkJKi8KICNkZWZpbmUgSUZGX01BU1RFUl9BUlBNT04gMHgxMDAJCS8qIGJvbmRpbmcgbWFzdGVyLCBBUlAgbW9uIGluIHVzZSAqLworI2RlZmluZSBJRkZfV0FOX0hETEMJMHgyMDAJCS8qIFdBTiBIRExDIGRldmljZQkJKi8KIAogI2RlZmluZSBJRl9HRVRfSUZBQ0UJMHgwMDAxCQkvKiBmb3IgcXVlcnlpbmcgb25seSAqLwogI2RlZmluZSBJRl9HRVRfUFJPVE8JMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oIGIvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaAppbmRleCAyN2VhMmFjLi4wODM1ZGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpZm5kZWYgX0xJTlVYX0lGX0FSQ05FVF9ICiAjZGVmaW5lIF9MSU5VWF9JRl9BUkNORVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCiAKQEAgLTU3LDEwICs1OCwxMCBAQAogICovCiBzdHJ1Y3QgYXJjX3JmYzEyMDEKIHsKLSAgICB1aW50OF90ICBwcm90bzsJCS8qIHByb3RvY29sIElEIGZpZWxkIC0gdmFyaWVzCQkqLwotICAgIHVpbnQ4X3QgIHNwbGl0X2ZsYWc7CS8qIGZvciB1c2Ugd2l0aCBzcGxpdCBwYWNrZXRzCQkqLworICAgIF9fdTggIHByb3RvOwkJLyogcHJvdG9jb2wgSUQgZmllbGQgLSB2YXJpZXMJCSovCisgICAgX191OCAgc3BsaXRfZmxhZzsJLyogZm9yIHVzZSB3aXRoIHNwbGl0IHBhY2tldHMJCSovCiAgICAgX19iZTE2ICAgc2VxdWVuY2U7CQkvKiBzZXF1ZW5jZSBudW1iZXIJCQkqLwotICAgIHVpbnQ4X3QgIHBheWxvYWRbMF07CS8qIHNwYWNlIHJlbWFpbmluZyBpbiBwYWNrZXQgKDUwNCBieXRlcykqLworICAgIF9fdTggIHBheWxvYWRbMF07CS8qIHNwYWNlIHJlbWFpbmluZyBpbiBwYWNrZXQgKDUwNCBieXRlcykqLwogfTsKICNkZWZpbmUgUkZDMTIwMV9IRFJfU0laRSA0CiAKQEAgLTcwLDggKzcxLDggQEAKICAqLwogc3RydWN0IGFyY19yZmMxMDUxCiB7Ci0gICAgdWludDhfdCBwcm90bzsJCS8qIEFSQ19QX1JGQzEwNTFfQVJQL1JGQzEwNTFfSVAJKi8KLSAgICB1aW50OF90IHBheWxvYWRbMF07CQkvKiA1MDcgYnl0ZXMJCQkqLworICAgIF9fdTggcHJvdG87CQkvKiBBUkNfUF9SRkMxMDUxX0FSUC9SRkMxMDUxX0lQCSovCisgICAgX191OCBwYXlsb2FkWzBdOwkJLyogNTA3IGJ5dGVzCQkJKi8KIH07CiAjZGVmaW5lIFJGQzEwNTFfSERSX1NJWkUgMQogCkBAIC04MiwyMCArODMsMjAgQEAKICAqLwogc3RydWN0IGFyY19ldGhfZW5jYXAKIHsKLSAgICB1aW50OF90IHByb3RvOwkJLyogQWx3YXlzIEFSQ19QX0VUSEVSCQkJKi8KKyAgICBfX3U4IHByb3RvOwkJLyogQWx3YXlzIEFSQ19QX0VUSEVSCQkJKi8KICAgICBzdHJ1Y3QgZXRoaGRyIGV0aDsJCS8qIHN0YW5kYXJkIGV0aGVybmV0IGhlYWRlciAoeXVjayEpCSovCi0gICAgdWludDhfdCBwYXlsb2FkWzBdOwkJLyogNDkzIGJ5dGVzCQkJCSovCisgICAgX191OCBwYXlsb2FkWzBdOwkJLyogNDkzIGJ5dGVzCQkJCSovCiB9OwogI2RlZmluZSBFVEhfRU5DQVBfSERSX1NJWkUgMTQKIAogCiBzdHJ1Y3QgYXJjX2NhcAogewotCXVpbnQ4X3QgcHJvdG87Ci0JdWludDhfdCBjb29raWVbc2l6ZW9mKGludCldOyAgIC8qIEFjdHVhbGx5IE5PVCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgKi8KKwlfX3U4IHByb3RvOworCV9fdTggY29va2llW3NpemVvZihpbnQpXTsgICAvKiBBY3R1YWxseSBOT1Qgc2VudCBvdmVyIHRoZSBuZXR3b3JrICovCiAJdW5pb24gewotCQl1aW50OF90IGFjazsKLQkJdWludDhfdCByYXdbMF07CQkvKiA1MDcgYnl0ZXMgKi8KKwkJX191OCBhY2s7CisJCV9fdTggcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCiAJfSBtZXM7CiB9OwogCkBAIC0xMDksNyArMTEwLDcgQEAKICAqLwogc3RydWN0IGFyY19oYXJkd2FyZQogewotICAgIHVpbnQ4X3QgIHNvdXJjZSwJCS8qIHNvdXJjZSBBUkNuZXQgLSBmaWxsZWQgaW4gYXV0b21hZ2ljYWxseSAqLworICAgIF9fdTggIHNvdXJjZSwJCS8qIHNvdXJjZSBBUkNuZXQgLSBmaWxsZWQgaW4gYXV0b21hZ2ljYWxseSAqLwogICAgICAgICAgICAgIGRlc3QsCQkvKiBkZXN0aW5hdGlvbiBBUkNuZXQgLSAwIGZvciBicm9hZGNhc3QgICAgKi8KICAgICAJICAgICBvZmZzZXRbMl07CQkvKiBvZmZzZXQgYnl0ZXMgKHNvbWUgd2VpcmQgc2VtYW50aWNzKSAgICAgKi8KIH07CkBAIC0xMzAsNyArMTMxLDcgQEAKIAlzdHJ1Y3QgYXJjX3JmYzEwNTEgICByZmMxMDUxOwogCXN0cnVjdCBhcmNfZXRoX2VuY2FwIGV0aF9lbmNhcDsKIAlzdHJ1Y3QgYXJjX2NhcCAgICAgICBjYXA7Ci0JdWludDhfdCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KKwlfX3U4IHJhd1swXTsJCS8qIDUwOCBieXRlcwkJCQkqLwogICAgIH0gc29mdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaCBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAppbmRleCA3ZjNjNzM1Li4wMjE2ZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotIAorCiAjaWZuZGVmIF9MSU5VWF9JRl9FVEhFUl9ICiAjZGVmaW5lIF9MSU5VWF9JRl9FVEhFUl9ICiAKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoKICAqCUlFRUUgODAyLjMgRXRoZXJuZXQgbWFnaWMgY29uc3RhbnRzLiAgVGhlIGZyYW1lIHNpemVzIG9taXQgdGhlIHByZWFtYmxlCi0gKglhbmQgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLiAKKyAqCWFuZCBGQ1MvQ1JDIChmcmFtZSBjaGVjayBzZXF1ZW5jZSkuCiAgKi8KIAogI2RlZmluZSBFVEhfQUxFTgk2CQkvKiBPY3RldHMgaW4gb25lIGV0aGVybmV0IGFkZHIJICovCkBAIC04Myw3ICs4Myw3IEBACiAvKgogICoJTm9uIERJWCB0eXBlcy4gV29uJ3QgY2xhc2ggZm9yIDE1MDAgdHlwZXMuCiAgKi8KLSAKKwogI2RlZmluZSBFVEhfUF84MDJfMwkweDAwMDEJCS8qIER1bW15IHR5cGUgZm9yIDgwMi4zIGZyYW1lcyAgKi8KICNkZWZpbmUgRVRIX1BfQVgyNQkweDAwMDIJCS8qIER1bW15IHByb3RvY29sIGlkIGZvciBBWC4yNSAgKi8KICNkZWZpbmUgRVRIX1BfQUxMCTB4MDAwMwkJLyogRXZlcnkgcGFja2V0IChiZSBjYXJlZnVsISEhKSAqLwpAQCAtMTA5LDcgKzEwOSw3IEBACiAvKgogICoJVGhpcyBpcyBhbiBFdGhlcm5ldCBmcmFtZSBoZWFkZXIuCiAgKi8KLSAKKwogc3RydWN0IGV0aGhkciB7CiAJdW5zaWduZWQgY2hhcgloX2Rlc3RbRVRIX0FMRU5dOwkvKiBkZXN0aW5hdGlvbiBldGggYWRkcgkqLwogCXVuc2lnbmVkIGNoYXIJaF9zb3VyY2VbRVRIX0FMRU5dOwkvKiBzb3VyY2UgZXRoZXIgYWRkcgkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oIGIvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCmluZGV4IGM3YTY2ODguLjNhMTRiMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAqLwogc3RydWN0IHBwcG9sMnRwX2FkZHIKIHsKLQlwaWRfdAlwaWQ7CQkJLyogcGlkIHRoYXQgb3ducyB0aGUgZmQuCisJX19rZXJuZWxfcGlkX3QJcGlkOwkJLyogcGlkIHRoYXQgb3ducyB0aGUgZmQuCiAJCQkJCSAqIDAgPT4gY3VycmVudCAqLwogCWludAlmZDsJCQkvKiBGRCBvZiBVRFAgc29ja2V0IHRvIHVzZSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKaW5kZXggMzBjODhiMi4uOTBiNWZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaApAQCAtOTUsMTYgKzk1LDE2IEBACiB9IF9fYXR0cmlidXRlICgocGFja2VkKSk7CiAKIC8qIFRhZyBpZGVudGlmaWVycyAqLwotI2RlZmluZSBQVFRfRU9MCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMCkKLSNkZWZpbmUgUFRUX1NSVl9OQU1FCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAxKQotI2RlZmluZSBQVFRfQUNfTkFNRQlfX2NvbnN0YW50X2h0b25zKDB4MDEwMikKLSNkZWZpbmUgUFRUX0hPU1RfVU5JUQlfX2NvbnN0YW50X2h0b25zKDB4MDEwMykKLSNkZWZpbmUgUFRUX0FDX0NPT0tJRQlfX2NvbnN0YW50X2h0b25zKDB4MDEwNCkKLSNkZWZpbmUgUFRUX1ZFTkRPUiAJX19jb25zdGFudF9odG9ucygweDAxMDUpCi0jZGVmaW5lIFBUVF9SRUxBWV9TSUQJX19jb25zdGFudF9odG9ucygweDAxMTApCi0jZGVmaW5lIFBUVF9TUlZfRVJSICAgICBfX2NvbnN0YW50X2h0b25zKDB4MDIwMSkKLSNkZWZpbmUgUFRUX1NZU19FUlIgIAlfX2NvbnN0YW50X2h0b25zKDB4MDIwMikKLSNkZWZpbmUgUFRUX0dFTl9FUlIgIAlfX2NvbnN0YW50X2h0b25zKDB4MDIwMykKKyNkZWZpbmUgUFRUX0VPTAkJX19jcHVfdG9fYmUxNigweDAwMDApCisjZGVmaW5lIFBUVF9TUlZfTkFNRQlfX2NwdV90b19iZTE2KDB4MDEwMSkKKyNkZWZpbmUgUFRUX0FDX05BTUUJX19jcHVfdG9fYmUxNigweDAxMDIpCisjZGVmaW5lIFBUVF9IT1NUX1VOSVEJX19jcHVfdG9fYmUxNigweDAxMDMpCisjZGVmaW5lIFBUVF9BQ19DT09LSUUJX19jcHVfdG9fYmUxNigweDAxMDQpCisjZGVmaW5lIFBUVF9WRU5ET1IgCV9fY3B1X3RvX2JlMTYoMHgwMTA1KQorI2RlZmluZSBQVFRfUkVMQVlfU0lECV9fY3B1X3RvX2JlMTYoMHgwMTEwKQorI2RlZmluZSBQVFRfU1JWX0VSUiAgICAgX19jcHVfdG9fYmUxNigweDAyMDEpCisjZGVmaW5lIFBUVF9TWVNfRVJSICAJX19jcHVfdG9fYmUxNigweDAyMDIpCisjZGVmaW5lIFBUVF9HRU5fRVJSICAJX19jcHVfdG9fYmUxNigweDAyMDMpCiAKIHN0cnVjdCBwcHBvZV9oZHIgewogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggODUyOWY1Ny4uMDQ5ZDZjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC00Niw2ICs0Niw4IEBACiAjZGVmaW5lIFRVTlNFVE9GRkxPQUQgIF9JT1coJ1QnLCAyMDgsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVFVOU0VUVFhGSUxURVIgX0lPVygnVCcsIDIwOSwgdW5zaWduZWQgaW50KQogI2RlZmluZSBUVU5HRVRJRkYgICAgICBfSU9SKCdUJywgMjEwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRVTkdFVFNOREJVRiAgIF9JT1IoJ1QnLCAyMTEsIGludCkKKyNkZWZpbmUgVFVOU0VUU05EQlVGICAgX0lPVygnVCcsIDIxMiwgaW50KQogCiAvKiBUVU5TRVRJRkYgaWZyIGZsYWdzICovCiAjZGVmaW5lIElGRl9UVU4JCTB4MDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaCBiL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKaW5kZXggODJjNDM2MjQuLjVhOWFhZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaApAQCAtMTYsMTQgKzE2LDE0IEBACiAjZGVmaW5lIFNJT0NERUxQUkwgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQogI2RlZmluZSBTSU9DQ0hHUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNykKIAotI2RlZmluZSBHUkVfQ1NVTQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKLSNkZWZpbmUgR1JFX1JPVVRJTkcJX19jb25zdGFudF9odG9ucygweDQwMDApCi0jZGVmaW5lIEdSRV9LRVkJCV9fY29uc3RhbnRfaHRvbnMoMHgyMDAwKQotI2RlZmluZSBHUkVfU0VRCQlfX2NvbnN0YW50X2h0b25zKDB4MTAwMCkKLSNkZWZpbmUgR1JFX1NUUklDVAlfX2NvbnN0YW50X2h0b25zKDB4MDgwMCkKLSNkZWZpbmUgR1JFX1JFQwkJX19jb25zdGFudF9odG9ucygweDA3MDApCi0jZGVmaW5lIEdSRV9GTEFHUwlfX2NvbnN0YW50X2h0b25zKDB4MDBGOCkKLSNkZWZpbmUgR1JFX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDcpCisjZGVmaW5lIEdSRV9DU1VNCV9fY3B1X3RvX2JlMTYoMHg4MDAwKQorI2RlZmluZSBHUkVfUk9VVElORwlfX2NwdV90b19iZTE2KDB4NDAwMCkKKyNkZWZpbmUgR1JFX0tFWQkJX19jcHVfdG9fYmUxNigweDIwMDApCisjZGVmaW5lIEdSRV9TRVEJCV9fY3B1X3RvX2JlMTYoMHgxMDAwKQorI2RlZmluZSBHUkVfU1RSSUNUCV9fY3B1X3RvX2JlMTYoMHgwODAwKQorI2RlZmluZSBHUkVfUkVDCQlfX2NwdV90b19iZTE2KDB4MDcwMCkKKyNkZWZpbmUgR1JFX0ZMQUdTCV9fY3B1X3RvX2JlMTYoMHgwMEY4KQorI2RlZmluZSBHUkVfVkVSU0lPTglfX2NwdV90b19iZTE2KDB4MDAwNykKIAogc3RydWN0IGlwX3R1bm5lbF9wYXJtCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ltYS5oIGIvaW5jbHVkZS9saW51eC9pbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTJhYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbWEuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lNQV9ICisjZGVmaW5lIF9MSU5VWF9JTUFfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KK3N0cnVjdCBsaW51eF9iaW5wcm07CisKKyNpZmRlZiBDT05GSUdfSU1BCitleHRlcm4gaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOworZXh0ZXJuIGludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBpbWFfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKTsKK2V4dGVybiB2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOworZXh0ZXJuIGludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpOworZXh0ZXJuIHZvaWQgaW1hX3NobV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX3NobV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogQ09ORklHX0lNQV9IICovCisjZW5kaWYgLyogX0xJTlVYX0lNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luNi5oIGIvaW5jbHVkZS9saW51eC9pbjYuaAppbmRleCBiYzQ5MjA0Li43MThiZjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luNi5oCisrKyBiL2luY2x1ZGUvbGludXgvaW42LmgKQEAgLTQ0LDExICs0NCwxMSBAQAogICogTk9URTogQmUgYXdhcmUgdGhlIElONkFERFJfKiBjb25zdGFudHMgYW5kIGluNmFkZHJfKiBleHRlcm5hbHMgYXJlIGRlZmluZWQKICAqIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgbm90IGluIGhvc3QgYnl0ZSBvcmRlciBhcyBhcmUgdGhlIElQdjQgZXF1aXZhbGVudHMKICAqLworI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnk7CiAjZGVmaW5lIElONkFERFJfQU5ZX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9IH0gfQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwogI2RlZmluZSBJTjZBRERSX0xPT1BCQUNLX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQotI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXM7CiAjZGVmaW5lIElONkFERFJfTElOS0xPQ0FMX0FMTE5PREVTX0lOSVQJXAogCQl7IHsgeyAweGZmLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCmluZGV4IDA2ZmNkYjQuLmFjZWYyYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCkBAIC0xMDgsNiArMTA4LDcgQEAKICNkZWZpbmUgSU5fREVWX0FSUEZJTFRFUihpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIEFSUEZJTFRFUikKICNkZWZpbmUgSU5fREVWX0FSUF9BTk5PVU5DRShpbl9kZXYpCUlOX0RFVl9NQVhDT05GKChpbl9kZXYpLCBBUlBfQU5OT1VOQ0UpCiAjZGVmaW5lIElOX0RFVl9BUlBfSUdOT1JFKGluX2RldikJSU5fREVWX01BWENPTkYoKGluX2RldiksIEFSUF9JR05PUkUpCisjZGVmaW5lIElOX0RFVl9BUlBfTk9USUZZKGluX2RldikJSU5fREVWX01BWENPTkYoKGluX2RldiksIEFSUF9OT1RJRlkpCiAKIHN0cnVjdCBpbl9pZmFkZHIKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IGU3NTJkOTcuLmFmMWRlOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJCS5ucl9jcHVzX2FsbG93ZWQgPSBOUl9DUFVTLAkJCQlcCiAJfSwJCQkJCQkJCVwKIAkudGFza3MJCT0gTElTVF9IRUFEX0lOSVQodHNrLnRhc2tzKSwJCQlcCisJLnB1c2hhYmxlX3Rhc2tzID0gUExJU1RfTk9ERV9JTklUKHRzay5wdXNoYWJsZV90YXNrcywgTUFYX1BSSU8pLCBcCiAJLnB0cmFjZWQJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlZCksCQkJXAogCS5wdHJhY2VfZW50cnkJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlX2VudHJ5KSwJCVwKIAkucmVhbF9wYXJlbnQJPSAmdHNrLAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCAxMjQ5YTBjLi42YjI4MDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC02NjEsNiArNjYxLDcgQEAKICNkZWZpbmUgU1dfRE9DSwkJCTB4MDUgIC8qIHNldCA9IHBsdWdnZWQgaW50byBkb2NrICovCiAjZGVmaW5lIFNXX0xJTkVPVVRfSU5TRVJUCTB4MDYgIC8qIHNldCA9IGluc2VydGVkICovCiAjZGVmaW5lIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJUIDB4MDcgIC8qIHNldCA9IG1lY2hhbmljYWwgc3dpdGNoIHNldCAqLworI2RlZmluZSBTV19WSURFT09VVF9JTlNFUlQJMHgwOCAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfTUFYCQkJMHgwZgogI2RlZmluZSBTV19DTlQJCQkoU1dfTUFYKzEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDkxMjdmNmIuLjkxNjU4ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNjEsNiArNjEsMTcgQEAKIAogdHlwZWRlZiBpcnFyZXR1cm5fdCAoKmlycV9oYW5kbGVyX3QpKGludCwgdm9pZCAqKTsKIAorLyoqCisgKiBzdHJ1Y3QgaXJxYWN0aW9uIC0gcGVyIGludGVycnVwdCBhY3Rpb24gZGVzY3JpcHRvcgorICogQGhhbmRsZXI6CWludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uCisgKiBAZmxhZ3M6CWZsYWdzIChzZWUgSVJRRl8qIGFib3ZlKQorICogQG1hc2s6CW5vIGNvbW1lbnQgYXMgaXQgaXMgdXNlbGVzcyBhbmQgYWJvdXQgdG8gYmUgcmVtb3ZlZAorICogQG5hbWU6CW5hbWUgb2YgdGhlIGRldmljZQorICogQGRldl9pZDoJY29va2llIHRvIGlkZW50aWZ5IHRoZSBkZXZpY2UKKyAqIEBuZXh0Oglwb2ludGVyIHRvIHRoZSBuZXh0IGlycWFjdGlvbiBmb3Igc2hhcmVkIGludGVycnVwdHMKKyAqIEBpcnE6CWludGVycnVwdCBudW1iZXIKKyAqIEBkaXI6CXBvaW50ZXIgdG8gdGhlIHByb2MvaXJxL05OL25hbWUgZW50cnkKKyAqLwogc3RydWN0IGlycWFjdGlvbiB7CiAJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NjIsNiArNDczLDEyIEBACiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NISVJRKQorZXh0ZXJuIHZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpIHsgfQorI2VuZGlmCisKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIAogc3RydWN0IGlycV9kZXNjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcF92cy5oIGIvaW5jbHVkZS9saW51eC9pcF92cy5oCmluZGV4IDBmNDM0YTIuLjE0ODI2NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBfdnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKQEAgLTk2LDEwICs5NiwxMCBAQAogICovCiBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyIHsKIAkvKiB2aXJ0dWFsIHNlcnZpY2UgYWRkcmVzc2VzICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogdmlydHVhbCBzZXJ2aWNlIG9wdGlvbnMgKi8KIAljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKQEAgLTExOSw4ICsxMTksOCBAQAogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCiAJLyogdGhyZXNob2xkcyBmb3IgYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLwogfTsKIAogCkBAIC0xNTksMTAgKzE1OSwxMCBAQAogLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9TRVJWSUNFICovCiBzdHJ1Y3QgaXBfdnNfc2VydmljZV9lbnRyeSB7CiAJLyogd2hpY2ggc2VydmljZTogdXNlciBmaWxscyBpbiB0aGVzZSAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIHNlcnZpY2Ugb3B0aW9ucyAqLwogCWNoYXIJCQlzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwpAQCAtMTg0LDEyICsxODQsMTIgQEAKIAl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLwogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCi0JdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLwogCi0JdV9pbnQzMl90CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQlpbmFjdGNvbm5zOwkvKiBpbmFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCisJX191MzIJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJaW5hY3Rjb25uczsJLyogaW5hY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCiAKIAkvKiBzdGF0aXN0aWNzICovCiAJc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgc3RhdHM7CkBAIC0xOTksMTAgKzE5OSwxMCBAQAogLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9ERVNUUyAqLwogc3RydWN0IGlwX3ZzX2dldF9kZXN0cyB7CiAJLyogd2hpY2ggc2VydmljZTogdXNlciBmaWxscyBpbiB0aGVzZSAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIG51bWJlciBvZiByZWFsIHNlcnZlcnMgKi8KIAl1bnNpZ25lZCBpbnQJCW51bV9kZXN0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGY4OTliNTAuLjZkYjkzOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTYwLDEyICsxNjAsMTAgQEAKICAqLwogc3RydWN0IGlycV9kZXNjIHsKIAl1bnNpZ25lZCBpbnQJCWlycTsKLSNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQogCXN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICp0aW1lcl9yYW5kX3N0YXRlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICprc3RhdF9pcnFzOwotIyBpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJc3RydWN0IGlycV8yX2lvbW11ICAgICAgKmlycV8yX2lvbW11OwotIyBlbmRpZgogI2VuZGlmCiAJaXJxX2Zsb3dfaGFuZGxlcl90CWhhbmRsZV9pcnE7CiAJc3RydWN0IGlycV9jaGlwCQkqY2hpcDsKQEAgLTIwMiwxMiArMjAwLDYgQEAKIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU107CiAjZWxzZSAvKiBDT05GSUdfU1BBUlNFX0lSUSAqLwogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqbW92ZV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBpbnQgY3B1KTsKLQotI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KERFU0MpIFwKLQkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0pCi0jZGVmaW5lIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnFubywgREVTQykgXAotCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSsrKQotCiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRV9JUlEgKi8KIAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOwpAQCAtMjI2LDcgKzIxOCw2IEBACiAgKiBNaWdyYXRpb24gaGVscGVycyBmb3Igb2Jzb2xldGUgbmFtZXMsIHRoZXkgd2lsbCBnbyBhd2F5OgogICovCiAjZGVmaW5lIGh3X2ludGVycnVwdF90eXBlCWlycV9jaGlwCi10eXBlZGVmIHN0cnVjdCBpcnFfY2hpcAkJaHdfaXJxX2NvbnRyb2xsZXI7CiAjZGVmaW5lIG5vX2lycV90eXBlCQlub19pcnFfY2hpcAogdHlwZWRlZiBzdHJ1Y3QgaXJxX2Rlc2MJCWlycV9kZXNjX3Q7CiAKQEAgLTIzNiw2ICsyMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KIAogZXh0ZXJuIGludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqbmV3KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0KTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAKQEAgLTI4MCw3ICsyNzIsNyBAQAogfQogCiAvKiBIYW5kbGUgaXJxIGFjdGlvbiBjaGFpbnM6ICovCi1leHRlcm4gaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiAKIC8qCiAgKiBCdWlsdC1pbiBJUlEgaGFuZGxlcnMgZm9yIHZhcmlvdXMgSVJRIHR5cGVzLApAQCAtMzI1LDcgKzMxNyw3IEBACiAKIC8qIEhhbmRsaW5nIG9mIHVuaGFuZGxlZCBhbmQgc3B1cmlvdXMgaW50ZXJydXB0czogKi8KIGV4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKLQkJCSAgIGludCBhY3Rpb25fcmV0KTsKKwkJCSAgIGlycXJldHVybl90IGFjdGlvbl9yZXQpOwogCiAvKiBSZXNlbmRpbmcgb2YgaW50ZXJydXB0cyA6Ki8KIHZvaWQgY2hlY2tfaXJxX3Jlc2VuZChzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFuci5oIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCmluZGV4IDg2YWY5MmUuLjUyZWJiYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxbnIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKQEAgLTI4LDEzICsyOCwxNyBAQAogIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQkJCQkJXAogCWZvciAoaXJxID0gMCwgZGVzYyA9IGlycV90b19kZXNjKGlycSk7IGlycSA8IG5yX2lycXM7CQlcCiAJICAgICBpcnErKywgZGVzYyA9IGlycV90b19kZXNjKGlycSkpCQkJCVwKLQkJaWYgKGRlc2MpCisJCWlmICghZGVzYykJCQkJCQlcCisJCQk7CQkJCQkJXAorCQllbHNlCiAKIAogIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpcnEsIGRlc2MpCQkJCVwKIAlmb3IgKGlycSA9IG5yX2lycXMgLSAxLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsgaXJxID49IDA7CVwKIAkgICAgIGlycS0tLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkJCQkJXAotCQlpZiAoZGVzYykKKwkJaWYgKCFkZXNjKQkJCQkJCVwKKwkJCTsJCQkJCQlcCisJCWVsc2UKIAogI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0hBUkRJUlFTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmggYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCmluZGV4IDg4MTg4M2MuLmM1NTg0Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaApAQCAtMSwyNSArMSwxNyBAQAotLyogaXJxcmV0dXJuLmggKi8KICNpZm5kZWYgX0xJTlVYX0lSUVJFVFVSTl9ICiAjZGVmaW5lIF9MSU5VWF9JUlFSRVRVUk5fSAogCi0vKgotICogRm9yIDIuNC54IGNvbXBhdGliaWxpdHksIDIuNC54IGNhbiB1c2UKLSAqCi0gKgl0eXBlZGVmIHZvaWQgaXJxcmV0dXJuX3Q7Ci0gKgkjZGVmaW5lIElSUV9OT05FCi0gKgkjZGVmaW5lIElSUV9IQU5ETEVECi0gKgkjZGVmaW5lIElSUV9SRVRWQUwoeCkKLSAqCi0gKiBUbyBtaXggb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgaXJxIGhhbmRsZXIgcmV0dXJucy4KLSAqCi0gKiBJUlFfTk9ORSBtZWFucyB3ZSBkaWRuJ3QgaGFuZGxlIGl0LgotICogSVJRX0hBTkRMRUQgbWVhbnMgdGhhdCB3ZSBkaWQgaGF2ZSBhIHZhbGlkIGludGVycnVwdCBhbmQgaGFuZGxlZCBpdC4KLSAqIElSUV9SRVRWQUwoeCkgc2VsZWN0cyBvbiB0aGUgdHdvIGRlcGVuZGluZyBvbiB4IGJlaW5nIG5vbi16ZXJvIChmb3IgaGFuZGxlZCkKKy8qKgorICogZW51bSBpcnFyZXR1cm4KKyAqIEBJUlFfTk9ORQkJaW50ZXJydXB0IHdhcyBub3QgZnJvbSB0aGlzIGRldmljZQorICogQElSUV9IQU5ETEVECQlpbnRlcnJ1cHQgd2FzIGhhbmRsZWQgYnkgdGhpcyBkZXZpY2UKICAqLwotdHlwZWRlZiBpbnQgaXJxcmV0dXJuX3Q7CitlbnVtIGlycXJldHVybiB7CisJSVJRX05PTkUsCisJSVJRX0hBTkRMRUQsCit9OwogCi0jZGVmaW5lIElSUV9OT05FCSgwKQotI2RlZmluZSBJUlFfSEFORExFRAkoMSkKLSNkZWZpbmUgSVJRX1JFVFZBTCh4KQkoKHgpICE9IDApCit0eXBlZGVmIGVudW0gaXJxcmV0dXJuIGlycXJldHVybl90OworI2RlZmluZSBJUlFfUkVUVkFMKHgpCSgoeCkgIT0gSVJRX05PTkUpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pdnR2ZmIuaCBiL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKaW5kZXggZTIwYWY0Ny4uOWQ4OGIyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pdnR2ZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCkBAIC0zMyw2ICszMyw2IEBACiB9OwogCiAjZGVmaW5lIElWVFZGQl9JT0NfRE1BX0ZSQU1FIAlfSU9XKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSswLCBzdHJ1Y3QgaXZ0dmZiX2RtYV9mcmFtZSkKLSNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIHVfaW50MzJfdCkKKyNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIF9fdTMyKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmczIuaCBiL2luY2x1ZGUvbGludXgvamZmczIuaAppbmRleCBkYTcyMGJjLi4yYjMyZDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaWZuZGVmIF9fTElOVVhfSkZGUzJfSF9fCiAjZGVmaW5lIF9fTElOVVhfSkZGUzJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKIC8qIFlvdSBtdXN0IGluY2x1ZGUgc29tZXRoaW5nIHdoaWNoIGRlZmluZXMgdGhlIEM5OSB1aW50WFhfdCB0eXBlcy4gCkBAIC05MSwxNSArOTIsMTUgQEAKICAgIGJ5dGVzd2FwcGluZyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgdjMyOworCV9fdTMyIHYzMjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgamludDMyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBtOworCV9fdTMyIG07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGptb2RlX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MTZfdCB2MTY7CisJX191MTYgdjE2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MTZfdDsKIAogc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZQpAQCAtMTIxLDEyICsxMjIsMTIgQEAKIAlqaW50MzJfdCB2ZXJzaW9uOwogCWppbnQzMl90IGlubzsgLyogPT0gemVybyBmb3IgdW5saW5rICovCiAJamludDMyX3QgbWN0aW1lOwotCXVpbnQ4X3QgbnNpemU7Ci0JdWludDhfdCB0eXBlOwotCXVpbnQ4X3QgdW51c2VkWzJdOworCV9fdTggbnNpemU7CisJX191OCB0eXBlOworCV9fdTggdW51c2VkWzJdOwogCWppbnQzMl90IG5vZGVfY3JjOwogCWppbnQzMl90IG5hbWVfY3JjOwotCXVpbnQ4X3QgbmFtZVswXTsKKwlfX3U4IG5hbWVbMF07CiB9OwogCiAvKiBUaGUgSkZGUzIgcmF3IGlub2RlIHN0cnVjdHVyZTogVXNlZCBmb3Igc3RvcmFnZSBvbiBwaHlzaWNhbCBtZWRpYS4gICovCkBAIC0xNTMsMTIgKzE1NCwxMiBAQAogCWppbnQzMl90IG9mZnNldDsgICAgIC8qIFdoZXJlIHRvIGJlZ2luIHRvIHdyaXRlLiAgKi8KIAlqaW50MzJfdCBjc2l6ZTsgICAgICAvKiAoQ29tcHJlc3NlZCkgZGF0YSBzaXplICovCiAJamludDMyX3QgZHNpemU7CSAgICAgLyogU2l6ZSBvZiB0aGUgbm9kZSdzIGRhdGEuIChhZnRlciBkZWNvbXByZXNzaW9uKSAqLwotCXVpbnQ4X3QgY29tcHI7ICAgICAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkICovCi0JdWludDhfdCB1c2VyY29tcHI7ICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHJlcXVlc3RlZCBieSB0aGUgdXNlciAqLworCV9fdTggY29tcHI7ICAgICAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkICovCisJX191OCB1c2VyY29tcHI7ICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHJlcXVlc3RlZCBieSB0aGUgdXNlciAqLwogCWppbnQxNl90IGZsYWdzOwkgICAgIC8qIFNlZSBKRkZTMl9JTk9fRkxBR18qICovCiAJamludDMyX3QgZGF0YV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgKGNvbXByZXNzZWQpIGRhdGEuICAqLwogCWppbnQzMl90IG5vZGVfY3JjOyAgIC8qIENSQyBmb3IgdGhlIHJhdyBpbm9kZSAoZXhjbHVkaW5nIGRhdGEpICAqLwotCXVpbnQ4X3QgZGF0YVswXTsKKwlfX3U4IGRhdGFbMF07CiB9OwogCiBzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHsKQEAgLTE2OCwxMiArMTY5LDEyIEBACiAJamludDMyX3QgaGRyX2NyYzsKIAlqaW50MzJfdCB4aWQ7CQkvKiBYQVRUUiBpZGVudGlmaWVyIG51bWJlciAqLwogCWppbnQzMl90IHZlcnNpb247Ci0JdWludDhfdCB4cHJlZml4OwotCXVpbnQ4X3QgbmFtZV9sZW47CisJX191OCB4cHJlZml4OworCV9fdTggbmFtZV9sZW47CiAJamludDE2X3QgdmFsdWVfbGVuOwogCWppbnQzMl90IGRhdGFfY3JjOwogCWppbnQzMl90IG5vZGVfY3JjOwotCXVpbnQ4X3QgZGF0YVswXTsKKwlfX3U4IGRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgamZmczJfcmF3X3hyZWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDdmYTM3MTguLjkxNDkxOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9keW5hbWljX3ByaW50ay5oPgorI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfZGVidWcuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogCkBAIC0zNTgsOSArMzU4LDEwIEBACiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKLSNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKKy8qIGR5bmFtaWNfcHJfZGVidWcoKSB1c2VzIHByX2ZtdCgpIGludGVybmFsbHkgc28gd2UgZG9uJ3QgbmVlZCBpdCBoZXJlICovCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBkbyB7IFwKLQlkeW5hbWljX3ByX2RlYnVnKHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgXAorCWR5bmFtaWNfcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsgXAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IDU3MGQyMDQuLjBjOGI4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RydWN0IGtlcm5lbF9zdGF0IHsKIAlzdHJ1Y3QgY3B1X3VzYWdlX3N0YXQJY3B1c3RhdDsKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKICAgICAgICB1bnNpZ25lZCBpbnQgaXJxc1tOUl9JUlFTXTsKICNlbmRpZgogfTsKQEAgLTQxLDcgKzQxLDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBucl9jb250ZXh0X3N3aXRjaGVzKHZvaWQpOwogCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAjZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoaXJxKSBcCiAJKGtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSkKIApAQCAtNTIsMTYgKzUyLDE5IEBACiB7CiAJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CiB9Ci0jZW5kaWYKIAotCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogICAgICAgIHJldHVybiBrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV07CiB9CiAjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogZXh0ZXJuIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KTsKKyNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShERVNDKSBcCisJKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKQorI2RlZmluZSBrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxbm8sIERFU0MpIFwKKwkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0rKykKKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaCBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCmluZGV4IDU0MzdhYzAuLjU4YWU4ZTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaApAQCAtNjgsMTAgKzY4LDEzIEBACiAJdW5zaWduZWQgaW50IHN0YXRlX2luX3N5c2ZzOjE7CiAJdW5zaWduZWQgaW50IHN0YXRlX2FkZF91ZXZlbnRfc2VudDoxOwogCXVuc2lnbmVkIGludCBzdGF0ZV9yZW1vdmVfdWV2ZW50X3NlbnQ6MTsKKwl1bnNpZ25lZCBpbnQgdWV2ZW50X3N1cHByZXNzOjE7CiB9OwogCiBleHRlcm4gaW50IGtvYmplY3Rfc2V0X25hbWUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKIAkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpmbXQsCisJCQkJICB2YV9saXN0IHZhcmdzKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICprb2JqZWN0X25hbWUoY29uc3Qgc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCAwNDI0MzI2Zi4uMzExYTA3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC00OCw3ICs0OCwxMCBAQAogCSAqIEZvciBJQS02NCAoQVBJQyBtb2RlbCkgSU9BUElDMDogaXJxIDAtMjM7IElPQVBJQzE6IGlycSAyNC00Ny4uCiAJICogRm9yIFg4NiAoc3RhbmRhcmQgQVQgbW9kZSkgUElDMC8xOiBpcnEgMC0xNS4gSU9BUElDMDogMC0yMy4uCiAJICovCi0JX191MzIgaXJxOworCXVuaW9uIHsKKwkJX191MzIgaXJxOworCQlfX3MzMiBzdGF0dXM7CisJfTsKIAlfX3UzMiBsZXZlbDsKIH07CiAKQEAgLTEyNiw2ICsxMjksNyBAQAogCQkJX191NjQgZGF0YV9vZmZzZXQ7IC8qIHJlbGF0aXZlIHRvIGt2bV9ydW4gc3RhcnQgKi8KIAkJfSBpbzsKIAkJc3RydWN0IHsKKwkJCXN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIGFyY2g7CiAJCX0gZGVidWc7CiAJCS8qIEtWTV9FWElUX01NSU8gKi8KIAkJc3RydWN0IHsKQEAgLTIxNywyMSArMjIxLDYgQEAKIAlfX3UzMiBpcnE7CiB9OwogCi1zdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgewotCV9fdTMyIGVuYWJsZWQ7Ci0JX191MzIgcGFkZGluZzsKLQlfX3U2NCBhZGRyZXNzOwotfTsKLQotLyogZm9yIEtWTV9ERUJVR19HVUVTVCAqLwotc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCB7Ci0JLyogaW50ICovCi0JX191MzIgZW5hYmxlZDsKLQlfX3UzMiBwYWQ7Ci0Jc3RydWN0IGt2bV9icmVha3BvaW50IGJyZWFrcG9pbnRzWzRdOwotCV9fdTMyIHNpbmdsZXN0ZXA7Ci19OwotCiAvKiBmb3IgS1ZNX0dFVF9ESVJUWV9MT0cgKi8KIHN0cnVjdCBrdm1fZGlydHlfbG9nIHsKIAlfX3UzMiBzbG90OwpAQCAtMjkyLDYgKzI4MSwxNyBAQAogCV9fdTY0IHBhcm02NDsKIH07CiAKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCisKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUAkJMHgwMDAwMDAwMgorCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKKwlfX3UzMiBjb250cm9sOworCV9fdTMyIHBhZDsKKwlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggYXJjaDsKK307CisKICNkZWZpbmUgS1ZNX1RSQ19TSElGVCAgICAgICAgICAgMTYKIC8qCiAgKiBrdm0gdHJhY2UgY2F0ZWdvcmllcwpAQCAtMzk2LDYgKzM5Niw1NyBAQAogI2lmZGVmIF9fS1ZNX0hBVkVfVVNFUl9OTUkKICNkZWZpbmUgS1ZNX0NBUF9VU0VSX05NSSAyMgogI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9HVUVTVF9ERUJVRworI2RlZmluZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRyAyMworI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9QSVQKKyNkZWZpbmUgS1ZNX0NBUF9SRUlOSkVDVF9DT05UUk9MIDI0CisjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX0lPQVBJQworI2RlZmluZSBLVk1fQ0FQX0lSUV9ST1VUSU5HIDI1CisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9JUlFfSU5KRUNUX1NUQVRVUyAyNgorI2lmZGVmIF9fS1ZNX0hBVkVfREVWSUNFX0FTU0lHTk1FTlQKKyNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfREVBU1NJR05NRU5UIDI3CisjZW5kaWYKKworI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKKwlfX3UzMiBpcnFjaGlwOworCV9fdTMyIHBpbjsKK307CisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIHsKKwlfX3UzMiBhZGRyZXNzX2xvOworCV9fdTMyIGFkZHJlc3NfaGk7CisJX191MzIgZGF0YTsKKwlfX3UzMiBwYWQ7Cit9OworCisvKiBnc2kgcm91dGluZyBlbnRyeSB0eXBlcyAqLworI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCAxCisjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19NU0kgMgorCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IHsKKwlfX3UzMiBnc2k7CisJX191MzIgdHlwZTsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBwYWQ7CisJdW5pb24geworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgaXJxY2hpcDsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgbXNpOworCQlfX3UzMiBwYWRbOF07CisJfSB1OworfTsKKworc3RydWN0IGt2bV9pcnFfcm91dGluZyB7CisJX191MzIgbnI7CisJX191MzIgZmxhZ3M7CisJc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBlbnRyaWVzWzBdOworfTsKKworI2VuZGlmCiAKIC8qCiAgKiBpb2N0bHMgZm9yIFZNIGZkcwpAQCAtNDIxLDE0ICs0NzIsMTkgQEAKICNkZWZpbmUgS1ZNX0NSRUFURV9QSVQJCSAgX0lPKEtWTUlPLCAgMHg2NCkKICNkZWZpbmUgS1ZNX0dFVF9QSVQJCSAgX0lPV1IoS1ZNSU8sIDB4NjUsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQogI2RlZmluZSBLVk1fU0VUX1BJVAkJICBfSU9SKEtWTUlPLCAgMHg2Niwgc3RydWN0IGt2bV9waXRfc3RhdGUpCisjZGVmaW5lIEtWTV9JUlFfTElORV9TVEFUVVMJICBfSU9XUihLVk1JTywgMHg2Nywgc3RydWN0IGt2bV9pcnFfbGV2ZWwpCiAjZGVmaW5lIEtWTV9SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyBcCiAJCQlfSU9XKEtWTUlPLCAgMHg2Nywgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQogI2RlZmluZSBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyBcCiAJCQlfSU9XKEtWTUlPLCAgMHg2OCwgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQogI2RlZmluZSBLVk1fQVNTSUdOX1BDSV9ERVZJQ0UgX0lPUihLVk1JTywgMHg2OSwgXAogCQkJCSAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldikKKyNkZWZpbmUgS1ZNX1NFVF9HU0lfUk9VVElORyAgICAgICBfSU9XKEtWTUlPLCAweDZhLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nKQogI2RlZmluZSBLVk1fQVNTSUdOX0lSUSBfSU9SKEtWTUlPLCAweDcwLCBcCiAJCQkgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEpCisjZGVmaW5lIEtWTV9SRUlOSkVDVF9DT05UUk9MICAgICAgX0lPKEtWTUlPLCAweDcxKQorI2RlZmluZSBLVk1fREVBU1NJR05fUENJX0RFVklDRSBfSU9XKEtWTUlPLCAweDcyLCBcCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCiAKIC8qCiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzCkBAIC00NDAsNyArNDk2LDggQEAKICNkZWZpbmUgS1ZNX1NFVF9TUkVHUyAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4NCwgc3RydWN0IGt2bV9zcmVncykKICNkZWZpbmUgS1ZNX1RSQU5TTEFURSAgICAgICAgICAgICBfSU9XUihLVk1JTywgMHg4NSwgc3RydWN0IGt2bV90cmFuc2xhdGlvbikKICNkZWZpbmUgS1ZNX0lOVEVSUlVQVCAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4Niwgc3RydWN0IGt2bV9pbnRlcnJ1cHQpCi0jZGVmaW5lIEtWTV9ERUJVR19HVUVTVCAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODcsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QpCisvKiBLVk1fREVCVUdfR1VFU1QgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIEtWTV9TRVRfR1VFU1RfREVCVUcgaW5zdGVhZCAqLworI2RlZmluZSBLVk1fREVCVUdfR1VFU1QgICAgICAgICAgIF9fS1ZNX0RFUFJFQ0FURURfREVCVUdfR1VFU1QKICNkZWZpbmUgS1ZNX0dFVF9NU1JTICAgICAgICAgICAgICBfSU9XUihLVk1JTywgMHg4OCwgc3RydWN0IGt2bV9tc3JzKQogI2RlZmluZSBLVk1fU0VUX01TUlMgICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg5LCBzdHJ1Y3Qga3ZtX21zcnMpCiAjZGVmaW5lIEtWTV9TRVRfQ1BVSUQgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OGEsIHN0cnVjdCBrdm1fY3B1aWQpCkBAIC00NjksNiArNTI2LDI5IEBACiAjZGVmaW5lIEtWTV9TRVRfTVBfU1RBVEUgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OTksIHN0cnVjdCBrdm1fbXBfc3RhdGUpCiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX05NSSAqLwogI2RlZmluZSBLVk1fTk1JICAgICAgICAgICAgICAgICAgIF9JTyhLVk1JTywgIDB4OWEpCisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRyAqLworI2RlZmluZSBLVk1fU0VUX0dVRVNUX0RFQlVHICAgICAgIF9JT1coS1ZNSU8sICAweDliLCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnKQorCisvKgorICogRGVwcmVjYXRlZCBpbnRlcmZhY2VzCisgKi8KK3N0cnVjdCBrdm1fYnJlYWtwb2ludCB7CisJX191MzIgZW5hYmxlZDsKKwlfX3UzMiBwYWRkaW5nOworCV9fdTY0IGFkZHJlc3M7Cit9OworCitzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0IHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTMyIHBhZDsKKwlzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgYnJlYWtwb2ludHNbNF07CisJX191MzIgc2luZ2xlc3RlcDsKK307CisKKyNkZWZpbmUgX19LVk1fREVQUkVDQVRFRF9ERUJVR19HVUVTVCBfSU9XKEtWTUlPLCAgMHg4Nywgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCkKKworI2RlZmluZSBLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSyAgIF9JT1IoS1ZNSU8sICAweDlhLCB2b2lkICopCisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU0VUX1NUQUNLICAgX0lPVyhLVk1JTywgIDB4OWIsIHZvaWQgKikKIAogI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCiAjZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKQEAgLTUyMiw2ICs2MDIsNyBAQAogCiAjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVQkoMSA8PCAwKQogCisjZGVmaW5lIEtWTV9ERVZfSVJRX0FTU0lHTl9NU0lfQUNUSU9OCUtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJCSgxIDw8IDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGJmNmY3MDMuLjg5NGE1NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgS1ZNX1JFUV9QRU5ESU5HX1RJTUVSICAgICAgNQogI2RlZmluZSBLVk1fUkVRX1VOSEFMVCAgICAgICAgICAgICA2CiAjZGVmaW5lIEtWTV9SRVFfTU1VX1NZTkMgICAgICAgICAgIDcKKyNkZWZpbmUgS1ZNX1JFUV9LVk1DTE9DS19VUERBVEUgICAgOAogCiAjZGVmaW5lIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRAkwCiAKQEAgLTczLDcgKzc0LDcgQEAKIAlzdHJ1Y3Qga3ZtX3J1biAqcnVuOwogCWludCBndWVzdF9tb2RlOwogCXVuc2lnbmVkIGxvbmcgcmVxdWVzdHM7Ci0Jc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyBndWVzdF9kZWJ1ZzsKKwl1bnNpZ25lZCBsb25nIGd1ZXN0X2RlYnVnOwogCWludCBmcHVfYWN0aXZlOwogCWludCBndWVzdF9mcHVfbG9hZGVkOwogCXdhaXRfcXVldWVfaGVhZF90IHdxOwpAQCAtMTA3LDYgKzEwOCwyMCBAQAogCWludCB1c2VyX2FsbG9jOwogfTsKIAorc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgeworCXUzMiBnc2k7CisJaW50ICgqc2V0KShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpcnFjaGlwOworCQkJdW5zaWduZWQgcGluOworCQl9IGlycWNoaXA7CisJCXN0cnVjdCBtc2lfbXNnIG1zaTsKKwl9OworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKIHN0cnVjdCBrdm0gewogCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgdmNwdXMgYXJyYXkgYW5kIEFQSUMgYWNjZXNzZXMgKi8KIAlzcGlubG9ja190IG1tdV9sb2NrOwpAQCAtMTI3LDYgKzE0MiwxMSBAQAogCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fcmluZyAqY29hbGVzY2VkX21taW9fcmluZzsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlycV9yb3V0aW5nOyAvKiBvZiBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICovCisJc3RydWN0IGhsaXN0X2hlYWQgbWFza19ub3RpZmllcl9saXN0OworI2VuZGlmCisKICNpZmRlZiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUgogCXN0cnVjdCBtbXVfbm90aWZpZXIgbW11X25vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcgbW11X25vdGlmaWVyX3NlcTsKQEAgLTIzNyw3ICsyNTcsNiBAQAogCQkJCSAgIGludCB1c2VyX2FsbG9jKTsKIGxvbmcga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pOwogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9mcHUgKmZwdSk7CiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9mcHUgKmZwdSk7CkBAIC0yNTUsOCArMjc0LDggQEAKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSk7Ci1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZyk7CitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pOwogCiBpbnQga3ZtX2FyY2hfaW5pdCh2b2lkICpvcGFxdWUpOwpAQCAtMzEwLDcgKzMyOSw2IEBACiAJaW50IGhvc3RfaXJxOwogCWJvb2wgaG9zdF9pcnFfZGlzYWJsZWQ7CiAJaW50IGd1ZXN0X2lycTsKLQlzdHJ1Y3QgbXNpX21zZyBndWVzdF9tc2k7CiAjZGVmaW5lIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfSU5UWAkoMSA8PCAwKQogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSQkoMSA8PCAxKQogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0hPU1RfSU5UWAkoMSA8PCA4KQpAQCAtMzIxLDggKzMzOSwyMSBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOwogfTsKLXZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKTsKLXZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpOworCitzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyIHsKKwl2b2lkICgqZnVuYykoc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbiwgYm9vbCBtYXNrZWQpOworCWludCBpcnE7CisJc3RydWN0IGhsaXN0X25vZGUgbGluazsKK307CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7Cit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKTsKK3ZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBib29sIG1hc2spOworCitpbnQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKTsKK3ZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4pOwogdm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKIHZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOwpAQCAtNDY0LDQgKzQ5NSwyMSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCisjZGVmaW5lIEtWTV9NQVhfSVJRX1JPVVRFUyAxMDI0CisKK2ludCBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pOworaW50IGt2bV9zZXRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtLAorCQkJY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqZW50cmllcywKKwkJCXVuc2lnbmVkIG5yLAorCQkJdW5zaWduZWQgZmxhZ3MpOwordm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKSB7fQorCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAppbmRleCA5YjZmMzk1Li4yYjgzMThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKQEAgLTQwLDE3ICs0MCw0IEBACiAKIHR5cGVkZWYgaGZuX3QgcGZuX3Q7CiAKLXN0cnVjdCBrdm1fcGlvX3JlcXVlc3QgewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JaW50IGN1cl9jb3VudDsKLQlzdHJ1Y3QgcGFnZSAqZ3Vlc3RfcGFnZXNbMl07Ci0JdW5zaWduZWQgZ3Vlc3RfcGFnZV9vZmZzZXQ7Ci0JaW50IGluOwotCWludCBwb3J0OwotCWludCBzaXplOwotCWludCBzdHJpbmc7Ci0JaW50IGRvd247Ci0JaW50IHJlcDsKLX07Ci0KICNlbmRpZiAvKiBfX0tWTV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKaW5kZXggOTAxYzJkNi4uYjBlOTk4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKKysrIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lUT1BfSF8KICNkZWZpbmUgX0lOQ0xVREVfR1VBUkRfTEFURU5DWVRPUF9IXwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpZmRlZiBDT05GSUdfTEFURU5DWVRPUAogCiAjZGVmaW5lIExUX1NBVkVDT1VOVAkJMzIKQEAgLTI0LDcgKzI1LDE0IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAotdm9pZCBhY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpOworZXh0ZXJuIGludCBsYXRlbmN5dG9wX2VuYWJsZWQ7Cit2b2lkIF9fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKQoreworCWlmICh1bmxpa2VseShsYXRlbmN5dG9wX2VuYWJsZWQpKQorCQlfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kodGFzaywgdXNlY3MsIGludGVyKTsKK30KIAogdm9pZCBjbGVhcl9hbGxfbGF0ZW5jeV90cmFjaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGRjMThiODcuLjc2MjYyZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNzk1LDYgKzc5NSw3IEBACiAJYXRhX3Jlc2V0X2ZuX3QJCXBtcF9oYXJkcmVzZXQ7CiAJYXRhX3Bvc3RyZXNldF9mbl90CXBtcF9wb3N0cmVzZXQ7CiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQgKCpsb3N0X2ludGVycnVwdCkoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAJdm9pZCAoKnBvc3RfaW50ZXJuYWxfY21kKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCS8qCkBAIC04MzYsNiArODM3LDggQEAKIAl2b2lkICgqYm1kbWFfc3RhcnQpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCXZvaWQgKCpibWRtYV9zdG9wKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAl1OCAgICgqYm1kbWFfc3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKworCXZvaWQgKCpkcmFpbl9maWZvKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKICNlbmRpZiAvKiBDT05GSUdfQVRBX1NGRiAqLwogCiAJc3NpemVfdCAoKmVtX3Nob3cpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNoYXIgKmJ1Zik7CkBAIC0xMDA4LDYgKzEwMTEsOSBAQAogZXh0ZXJuIGludCBhdGFfY2FibGVfaWdub3JlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfY2FibGVfdW5rbm93bihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAorZXh0ZXJuIHZvaWQgYXRhX3Bpb19xdWV1ZV90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSk7CisKIC8qIFRpbWluZyBoZWxwZXJzICovCiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9waW9fbmVlZF9pb3JkeShjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyAqYXRhX3RpbWluZ19maW5kX21vZGUodTggeGZlcl9tb2RlKTsKQEAgLTE1NzIsNiArMTU3OCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9zZmZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgYXRhX3NmZl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX3NmZl9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwpAQCAtMTU4NCw2ICsxNTkxLDcgQEAKIGV4dGVybiBpbnQgc2F0YV9zZmZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfZHJhaW5fZmlmbyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IGF0YV9zZmZfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmggYi9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWQ4ZmExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fCi0jZGVmaW5lIF9fTE1fSU5URVJGQUNFX0RPVF9IX18KLQotCi10eXBlZGVmIHZvaWQgKCpsbV9jYWxsYmFja190KSAodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7Ci0KLS8qCi0gKiBsbV9tb3VudCgpIGZsYWdzCi0gKgotICogTE1fTUZMQUdfU1BFQ1RBVE9SCi0gKiBHRlMgaXMgYXNraW5nIHRvIGpvaW4gdGhlIGZpbGVzeXN0ZW0ncyBsb2Nrc3BhY2UsIGJ1dCBpdCBkb2Vzbid0IHdhbnQgdG8KLSAqIG1vZGlmeSB0aGUgZmlsZXN5c3RlbS4gIFRoZSBsb2NrIG1vZHVsZSBzaG91bGRuJ3QgYXNzaWduIGEgam91cm5hbCB0byB0aGUgRlMKLSAqIG1vdW50LiAgSXQgc2hvdWxkbid0IHNlbmQgcmVjb3ZlcnkgY2FsbGJhY2tzIHRvIHRoZSBGUyBtb3VudC4gIElmIHRoZSBub2RlCi0gKiBkaWVzIG9yIHdpdGhkcmF3cywgYWxsIGxvY2tzIGNhbiBiZSB3aXBlZCBpbW1lZGlhdGVseS4KLSAqCi0gKiBMTV9NRkxBR19DT05WX05PRFJPUAotICogRG8gbm90IGFsbG93IHRoZSBkbG0gdG8gaW50ZXJuYWxseSByZXNvbHZlIGNvbnZlcnNpb24gZGVhZGxvY2tzIGJ5IGRlbW90aW5nCi0gKiB0aGUgbG9jayB0byB1bmxvY2tlZCBhbmQgdGhlbiByZWFjcXVpcmluZyBpdCBpbiB0aGUgcmVxdWVzdGVkIG1vZGUuIEluc3RlYWQsCi0gKiBpdCBzaG91bGQgY2FuY2VsIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gTE1fT1VUX0NPTlZfREVBRExLLgotICovCi0KLSNkZWZpbmUgTE1fTUZMQUdfU1BFQ1RBVE9SCTB4MDAwMDAwMDEKLSNkZWZpbmUgTE1fTUZMQUdfQ09OVl9OT0RST1AJMHgwMDAwMDAwMgotCi0vKgotICogbG1fbG9ja3N0cnVjdCBmbGFncwotICoKLSAqIExNX0xTRkxBR19MT0NBTAotICogVGhlIGxvY2tfbm9sb2NrIG1vZHVsZSByZXR1cm5zIExNX0xTRkxBR19MT0NBTCB0byBHRlMsIGluZGljYXRpbmcgdGhhdCBHRlMKLSAqIGNhbiBtYWtlIHNpbmdsZS1ub2RlIG9wdGltaXphdGlvbnMuCi0gKi8KLQotI2RlZmluZSBMTV9MU0ZMQUdfTE9DQUwJCTB4MDAwMDAwMDEKLQotLyoKLSAqIGxtX2xvY2tuYW1lIHR5cGVzCi0gKi8KLQotI2RlZmluZSBMTV9UWVBFX1JFU0VSVkVECTB4MDAKLSNkZWZpbmUgTE1fVFlQRV9OT05ESVNLCQkweDAxCi0jZGVmaW5lIExNX1RZUEVfSU5PREUJCTB4MDIKLSNkZWZpbmUgTE1fVFlQRV9SR1JQCQkweDAzCi0jZGVmaW5lIExNX1RZUEVfTUVUQQkJMHgwNAotI2RlZmluZSBMTV9UWVBFX0lPUEVOCQkweDA1Ci0jZGVmaW5lIExNX1RZUEVfRkxPQ0sJCTB4MDYKLSNkZWZpbmUgTE1fVFlQRV9QTE9DSwkJMHgwNwotI2RlZmluZSBMTV9UWVBFX1FVT1RBCQkweDA4Ci0jZGVmaW5lIExNX1RZUEVfSk9VUk5BTAkJMHgwOQotCi0vKgotICogbG1fbG9jaygpIHN0YXRlcwotICoKLSAqIFNIQVJFRCBpcyBjb21wYXRpYmxlIHdpdGggU0hBUkVELCBub3Qgd2l0aCBERUZFUlJFRCBvciBFWC4KLSAqIERFRkVSUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBERUZFUlJFRCwgbm90IHdpdGggU0hBUkVEIG9yIEVYLgotICovCi0KLSNkZWZpbmUgTE1fU1RfVU5MT0NLRUQJCTAKLSNkZWZpbmUgTE1fU1RfRVhDTFVTSVZFCQkxCi0jZGVmaW5lIExNX1NUX0RFRkVSUkVECQkyCi0jZGVmaW5lIExNX1NUX1NIQVJFRAkJMwotCi0vKgotICogbG1fbG9jaygpIGZsYWdzCi0gKgotICogTE1fRkxBR19UUlkKLSAqIERvbid0IHdhaXQgdG8gYWNxdWlyZSB0aGUgbG9jayBpZiBpdCBjYW4ndCBiZSBncmFudGVkIGltbWVkaWF0ZWx5LgotICoKLSAqIExNX0ZMQUdfVFJZXzFDQgotICogU2VuZCBvbmUgYmxvY2tpbmcgY2FsbGJhY2sgaWYgVFJZIGlzIHNldCBhbmQgdGhlIGxvY2sgaXMgbm90IGdyYW50ZWQuCi0gKgotICogTE1fRkxBR19OT0VYUAotICogR0ZTIHNldHMgdGhpcyBmbGFnIG9uIGxvY2sgcmVxdWVzdHMgaXQgbWFrZXMgd2hpbGUgZG9pbmcgam91cm5hbCByZWNvdmVyeS4KLSAqIFRoZXNlIHNwZWNpYWwgcmVxdWVzdHMgc2hvdWxkIG5vdCBiZSBibG9ja2VkIGR1ZSB0byB0aGUgcmVjb3ZlcnkgbGlrZQotICogb3JkaW5hcnkgbG9ja3Mgd291bGQgYmUuCi0gKgotICogTE1fRkxBR19BTlkKLSAqIEEgU0hBUkVEIHJlcXVlc3QgbWF5IGFsc28gYmUgZ3JhbnRlZCBpbiBERUZFUlJFRCwgb3IgYSBERUZFUlJFRCByZXF1ZXN0IG1heQotICogYWxzbyBiZSBncmFudGVkIGluIFNIQVJFRC4gIFRoZSBwcmVmZXJyZWQgc3RhdGUgaXMgd2hpY2hldmVyIGlzIGNvbXBhdGlibGUKLSAqIHdpdGggb3RoZXIgZ3JhbnRlZCBsb2Nrcywgb3IgdGhlIHNwZWNpZmllZCBzdGF0ZSBpZiBubyBvdGhlciBsb2NrcyBleGlzdC4KLSAqCi0gKiBMTV9GTEFHX1BSSU9SSVRZCi0gKiBPdmVycmlkZSBmYWlybmVzcyBjb25zaWRlcmF0aW9ucy4gIFN1cHBvc2UgYSBsb2NrIGlzIGhlbGQgaW4gYSBzaGFyZWQgc3RhdGUKLSAqIGFuZCB0aGVyZSBpcyBhIHBlbmRpbmcgcmVxdWVzdCBmb3IgdGhlIGRlZmVycmVkIHN0YXRlLiAgQSBzaGFyZWQgbG9jawotICogcmVxdWVzdCB3aXRoIHRoZSBwcmlvcml0eSBmbGFnIHdvdWxkIGJlIGFsbG93ZWQgdG8gYnlwYXNzIHRoZSBkZWZlcnJlZAotICogcmVxdWVzdCBhbmQgZGlyZWN0bHkgam9pbiB0aGUgb3RoZXIgc2hhcmVkIGxvY2suICBBIHNoYXJlZCBsb2NrIHJlcXVlc3QKLSAqIHdpdGhvdXQgdGhlIHByaW9yaXR5IGZsYWcgbWlnaHQgYmUgZm9yY2VkIHRvIHdhaXQgdW50aWwgdGhlIGRlZmVycmVkCi0gKiByZXF1ZXN0ZWQgaGFkIGFjcXVpcmVkIGFuZCByZWxlYXNlZCB0aGUgbG9jay4KLSAqLwotCi0jZGVmaW5lIExNX0ZMQUdfVFJZCQkweDAwMDAwMDAxCi0jZGVmaW5lIExNX0ZMQUdfVFJZXzFDQgkJMHgwMDAwMDAwMgotI2RlZmluZSBMTV9GTEFHX05PRVhQCQkweDAwMDAwMDA0Ci0jZGVmaW5lIExNX0ZMQUdfQU5ZCQkweDAwMDAwMDA4Ci0jZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAotCi0vKgotICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKLSAqCi0gKiBMTV9PVVRfU1RfTUFTSwotICogTWFza3MgdGhlIGxvd2VyIHR3byBiaXRzIG9mIGxvY2sgc3RhdGUgaW4gdGhlIHJldHVybmVkIHZhbHVlLgotICoKLSAqIExNX09VVF9DQUNIRUFCTEUKLSAqIFRoZSBsb2NrIGhhc24ndCBiZWVuIHJlbGVhc2VkIHNvIEdGUyBjYW4gY29udGludWUgdG8gY2FjaGUgZGF0YSBmb3IgaXQuCi0gKgotICogTE1fT1VUX0NBTkNFTEVECi0gKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZC4KLSAqCi0gKiBMTV9PVVRfQVNZTkMKLSAqIFRoZSByZXN1bHQgb2YgdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXR1cm5lZCBpbiBhbiBMTV9DQl9BU1lOQyBjYWxsYmFjay4KLSAqCi0gKiBMTV9PVVRfQ09OVl9ERUFETEsKLSAqIFRoZSBsb2NrIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGRvIHRvIGEgY29udmVyc2lvbiBkZWFkbG9jay4KLSAqLwotCi0jZGVmaW5lIExNX09VVF9TVF9NQVNLCQkweDAwMDAwMDAzCi0jZGVmaW5lIExNX09VVF9DQU5DRUxFRAkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9PVVRfQVNZTkMJCTB4MDAwMDAwODAKLSNkZWZpbmUgTE1fT1VUX0VSUk9SCQkweDAwMDAwMTAwCi0KLS8qCi0gKiBsbV9jYWxsYmFja190IHR5cGVzCi0gKgotICogTE1fQ0JfTkVFRF9FIExNX0NCX05FRURfRCBMTV9DQl9ORUVEX1MKLSAqIEJsb2NraW5nIGNhbGxiYWNrLCBhIHJlbW90ZSBub2RlIGlzIHJlcXVlc3RpbmcgdGhlIGdpdmVuIGxvY2sgaW4KLSAqIEVYQ0xVU0lWRSwgREVGRVJSRUQsIG9yIFNIQVJFRC4KLSAqCi0gKiBMTV9DQl9ORUVEX1JFQ09WRVJZCi0gKiBUaGUgZ2l2ZW4gam91cm5hbCBuZWVkcyB0byBiZSByZWNvdmVyZWQuCi0gKgotICogTE1fQ0JfQVNZTkMKLSAqIFRoZSBnaXZlbiBsb2NrIGhhcyBiZWVuIGdyYW50ZWQuCi0gKi8KLQotI2RlZmluZSBMTV9DQl9ORUVEX0UJCTI1NwotI2RlZmluZSBMTV9DQl9ORUVEX0QJCTI1OAotI2RlZmluZSBMTV9DQl9ORUVEX1MJCTI1OQotI2RlZmluZSBMTV9DQl9ORUVEX1JFQ09WRVJZCTI2MAotI2RlZmluZSBMTV9DQl9BU1lOQwkJMjYyCi0KLS8qCi0gKiBsbV9yZWNvdmVyeV9kb25lKCkgbWVzc2FnZXMKLSAqLwotCi0jZGVmaW5lIExNX1JEX0dBVkVVUAkJMzA4Ci0jZGVmaW5lIExNX1JEX1NVQ0NFU1MJCTMwOQotCi0KLXN0cnVjdCBsbV9sb2NrbmFtZSB7Ci0JdTY0IGxuX251bWJlcjsKLQl1bnNpZ25lZCBpbnQgbG5fdHlwZTsKLX07Ci0KLSNkZWZpbmUgbG1fbmFtZV9lcXVhbChuYW1lMSwgbmFtZTIpIFwKLQkoKChuYW1lMSktPmxuX251bWJlciA9PSAobmFtZTIpLT5sbl9udW1iZXIpICYmIFwKLQkgKChuYW1lMSktPmxuX3R5cGUgPT0gKG5hbWUyKS0+bG5fdHlwZSkpIFwKLQotc3RydWN0IGxtX2FzeW5jX2NiIHsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUgbGNfbmFtZTsKLQlpbnQgbGNfcmV0OwotfTsKLQotc3RydWN0IGxtX2xvY2tzdHJ1Y3Q7Ci0KLXN0cnVjdCBsbV9sb2Nrb3BzIHsKLQljb25zdCBjaGFyICpsbV9wcm90b19uYW1lOwotCi0JLyoKLQkgKiBNb3VudC9Vbm1vdW50Ci0JICovCi0KLQlpbnQgKCpsbV9tb3VudCkgKGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotCXZvaWQgKCpsbV9vdGhlcnNfbWF5X21vdW50KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCXZvaWQgKCpsbV91bm1vdW50KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCXZvaWQgKCpsbV93aXRoZHJhdykgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQkvKgotCSAqIExvY2sgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0JaW50ICgqbG1fZ2V0X2xvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwgdm9pZCAqKmxvY2twKTsKLQotCXZvaWQgKCpsbV9wdXRfbG9jaykgKHZvaWQgKmxvY2spOwotCi0JdW5zaWduZWQgaW50ICgqbG1fbG9jaykgKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsCi0JCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KLQl1bnNpZ25lZCBpbnQgKCpsbV91bmxvY2spICh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKTsKLQotCXZvaWQgKCpsbV9jYW5jZWwpICh2b2lkICpsb2NrKTsKLQotCWludCAoKmxtX2hvbGRfbHZiKSAodm9pZCAqbG9jaywgY2hhciAqKmx2YnApOwotCXZvaWQgKCpsbV91bmhvbGRfbHZiKSAodm9pZCAqbG9jaywgY2hhciAqbHZiKTsKLQotCS8qCi0JICogUG9zaXggTG9jayBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQlpbnQgKCpsbV9wbG9ja19nZXQpICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCWludCAoKmxtX3Bsb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCWludCAoKmxtX3B1bmxvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQkvKgotCSAqIENsaWVudCBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQl2b2lkICgqbG1fcmVjb3ZlcnlfZG9uZSkgKHZvaWQgKmxvY2tzcGFjZSwgdW5zaWduZWQgaW50IGppZCwKLQkJCQkgIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLQotCXN0cnVjdCBtb2R1bGUgKmxtX293bmVyOwotfTsKLQotLyoKLSAqIGxtX21vdW50KCkgcmV0dXJuIHZhbHVlcwotICoKLSAqIGxzX2ppZCAtIHRoZSBqb3VybmFsIElEIHRoaXMgbm9kZSBzaG91bGQgdXNlCi0gKiBsc19maXJzdCAtIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtCi0gKiBsc19sdmJfc2l6ZSAtIHNpemUgaW4gYnl0ZXMgb2YgbG9jayB2YWx1ZSBibG9ja3MKLSAqIGxzX2xvY2tzcGFjZSAtIGxvY2sgbW9kdWxlJ3MgY29udGV4dCBmb3IgdGhpcyBmaWxlIHN5c3RlbQotICogbHNfb3BzIC0gbG9jayBtb2R1bGUncyBmdW5jdGlvbnMKLSAqIGxzX2ZsYWdzIC0gbG9jayBtb2R1bGUgZmVhdHVyZXMKLSAqLwotCi1zdHJ1Y3QgbG1fbG9ja3N0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGxzX2ppZDsKLQl1bnNpZ25lZCBpbnQgbHNfZmlyc3Q7Ci0JdW5zaWduZWQgaW50IGxzX2x2Yl9zaXplOwotCXZvaWQgKmxzX2xvY2tzcGFjZTsKLQljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHNfb3BzOwotCWludCBsc19mbGFnczsKLX07Ci0KLS8qCi0gKiBMb2NrIG1vZHVsZSBib3R0b20gaW50ZXJmYWNlLiAgQSBsb2NrIG1vZHVsZSBtYWtlcyBpdHNlbGYgYXZhaWxhYmxlIHRvIEdGUwotICogd2l0aCB0aGVzZSBmdW5jdGlvbnMuCi0gKi8KLQotaW50IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90byk7Ci12b2lkIGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKTsKLQotLyoKLSAqIExvY2sgbW9kdWxlIHRvcCBpbnRlcmZhY2UuICBHRlMgY2FsbHMgdGhlc2UgZnVuY3Rpb25zIHdoZW4gbW91bnRpbmcgb3IKLSAqIHVubW91bnRpbmcgYSBmaWxlIHN5c3RlbS4KLSAqLwotCi1pbnQgZ2ZzMl9tb3VudF9sb2NrcHJvdG8oY2hhciAqcHJvdG9fbmFtZSwgY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopOwotCi12b2lkIGdmczJfdW5tb3VudF9sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpOwotCi12b2lkIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KTsKLQotI2VuZGlmIC8qIF9fTE1fSU5URVJGQUNFX0RPVF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZS5oCmluZGV4IGMyM2QzZjUuLmQ5YTUxYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlLmgKQEAgLTgsMzMgKzgsNDkgQEAKIAogLyogTWFwbGUgQnVzIGNvbW1hbmQgYW5kIHJlc3BvbnNlIGNvZGVzICovCiBlbnVtIG1hcGxlX2NvZGUgewotCU1BUExFX1JFU1BPTlNFX0ZJTEVFUlIgPSAtNSwKLQlNQVBMRV9SRVNQT05TRV9BR0FJTiA9IC00LAkvKiByZXF1ZXN0IHNob3VsZCBiZSByZXRyYW5zbWl0dGVkICovCi0JTUFQTEVfUkVTUE9OU0VfQkFEQ01EID0gLTMsCi0JTUFQTEVfUkVTUE9OU0VfQkFERlVOQyA9IC0yLAotCU1BUExFX1JFU1BPTlNFX05PTkUgPSAtMSwJLyogdW5pdCBkaWRuJ3QgcmVzcG9uZCBhdCBhbGwgKi8KLQlNQVBMRV9DT01NQU5EX0RFVklORk8gPSAxLAotCU1BUExFX0NPTU1BTkRfQUxMSU5GTyA9IDIsCi0JTUFQTEVfQ09NTUFORF9SRVNFVCA9IDMsCi0JTUFQTEVfQ09NTUFORF9LSUxMID0gNCwKLQlNQVBMRV9SRVNQT05TRV9ERVZJTkZPID0gNSwKLQlNQVBMRV9SRVNQT05TRV9BTExJTkZPID0gNiwKLQlNQVBMRV9SRVNQT05TRV9PSyA9IDcsCi0JTUFQTEVfUkVTUE9OU0VfREFUQVRSRiA9IDgsCi0JTUFQTEVfQ09NTUFORF9HRVRDT05EID0gOSwKLQlNQVBMRV9DT01NQU5EX0dFVE1JTkZPID0gMTAsCi0JTUFQTEVfQ09NTUFORF9CUkVBRCA9IDExLAotCU1BUExFX0NPTU1BTkRfQldSSVRFID0gMTIsCi0JTUFQTEVfQ09NTUFORF9TRVRDT05EID0gMTQKKwlNQVBMRV9SRVNQT05TRV9GSUxFRVJSID0JLTUsCisJTUFQTEVfUkVTUE9OU0VfQUdBSU4sCS8qIHJldHJhbnNtaXQgKi8KKwlNQVBMRV9SRVNQT05TRV9CQURDTUQsCisJTUFQTEVfUkVTUE9OU0VfQkFERlVOQywKKwlNQVBMRV9SRVNQT05TRV9OT05FLAkvKiB1bml0IGRpZG4ndCByZXNwb25kKi8KKwlNQVBMRV9DT01NQU5EX0RFVklORk8gPQkJMSwKKwlNQVBMRV9DT01NQU5EX0FMTElORk8sCisJTUFQTEVfQ09NTUFORF9SRVNFVCwKKwlNQVBMRV9DT01NQU5EX0tJTEwsCisJTUFQTEVfUkVTUE9OU0VfREVWSU5GTywKKwlNQVBMRV9SRVNQT05TRV9BTExJTkZPLAorCU1BUExFX1JFU1BPTlNFX09LLAorCU1BUExFX1JFU1BPTlNFX0RBVEFUUkYsCisJTUFQTEVfQ09NTUFORF9HRVRDT05ELAorCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sCisJTUFQTEVfQ09NTUFORF9CUkVBRCwKKwlNQVBMRV9DT01NQU5EX0JXUklURSwKKwlNQVBMRV9DT01NQU5EX0JTWU5DLAorCU1BUExFX0NPTU1BTkRfU0VUQ09ORCwKKwlNQVBMRV9DT01NQU5EX01JQ0NPTlRST0wKK307CisKK2VudW0gbWFwbGVfZmlsZV9lcnJvcnMgeworCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9QQVJUSVRJT04gPQkweDAxMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfUEhBU0VfRVJST1IgPQkJMHgwMjAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfQkxPQ0sgPQkJMHgwNDAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX1dSSVRFX0VSUk9SID0JCTB4MDgwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9JTlZBTElEX1dSSVRFX0xFTkdUSCA9CTB4MTAwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9CQURfQ1JDID0gCQkweDIwMDAwMDAwCit9OworCitzdHJ1Y3QgbWFwbGVfYnVmZmVyIHsKKwljaGFyIGJ1ZnhbMHg0MDBdOworCXZvaWQgKmJ1ZjsKIH07CiAKIHN0cnVjdCBtYXBsZXEgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7Ci0Jdm9pZCAqc2VuZGJ1ZiwgKnJlY3ZidWYsICpyZWN2YnVmZGNzcDsKKwlzdHJ1Y3QgbWFwbGVfYnVmZmVyICpyZWN2YnVmOworCXZvaWQgKnNlbmRidWYsICpyZWN2YnVmX3AyOwogCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOwogCWVudW0gbWFwbGVfY29kZSBjb21tYW5kOwotCXN0cnVjdCBtdXRleCBtdXRleDsKIH07CiAKIHN0cnVjdCBtYXBsZV9kZXZpbmZvIHsKQEAgLTUyLDExICs2OCwxNSBAQAogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKIAl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgbWFwbGVxICogbXEpOworCXZvaWQgKCpmaWxlZXJyX2hhbmRsZXIpKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHZvaWQgKnJlY3ZidWYpOworCWludCAoKmNhbl91bmxvYWQpKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpOwogCXVuc2lnbmVkIGxvbmcgd2hlbiwgaW50ZXJ2YWwsIGZ1bmN0aW9uOwogCXN0cnVjdCBtYXBsZV9kZXZpbmZvIGRldmluZm87CiAJdW5zaWduZWQgY2hhciBwb3J0LCB1bml0OwogCWNoYXIgcHJvZHVjdF9uYW1lWzMyXTsKIAljaGFyIHByb2R1Y3RfbGljZW5jZVs2NF07CisJYXRvbWljX3QgYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBtYXBsZV93YWl0OwogCXN0cnVjdCBkZXZpY2UgZGV2OwogfTsKIApAQCAtNzIsNyArOTIsNyBAQAogaW50IG1hcGxlX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWFwbGVfZHJpdmVyICopOwogdm9pZCBtYXBsZV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbWFwbGVfZHJpdmVyICopOwogCi1pbnQgbWFwbGVfYWRkX3BhY2tldF9zbGVlcHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAoraW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAogCXUzMiBjb21tYW5kLCB1MzIgbGVuZ3RoLCB2b2lkICpkYXRhKTsKIHZvaWQgbWFwbGVfY2xlYXJfZGV2KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmggYi9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKaW5kZXggNDA0ZjY3OC4uMjIwMzEyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaApAQCAtMzcsNyArMzcsNyBAQAogICBNQVRST1hGQl9DSURfTEFTVAogfTsKIAotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCmluZGV4IGFmOTVhMWQuLmQ4OTlkYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCkBAIC00OTAsNiArNDkwLDcgQEAKIC8qCiAgKiBSMjMxICgweEU3KSAtIEphY2sgU3RhdHVzCiAgKi8KKyNkZWZpbmUgV004MzUwX0pBQ0tfTF9MVkwJCQkweDA4MDAKICNkZWZpbmUgV004MzUwX0pBQ0tfUl9MVkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaAppbmRleCBiNjY0MGUwLi5lMDZlZDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaApAQCAtMTE4MSw2ICsxMTgxLDcgQEAKICNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX09VVERJViAtIFsyOjBdICovCiAjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLwogCitzdHJ1Y3Qgd204NDAwOwogdm9pZCB3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHN0cnVjdCB3bTg0MDAgKndtODQwMCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCmluZGV4IGNmOWM2NzkuLjBmODIyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKQEAgLTU1LDYgKzU1LDcgQEAKIAlNTFg0X0NNRF9DTE9TRV9QT1JUCSA9IDB4YSwKIAlNTFg0X0NNRF9RVUVSWV9IQ0EJID0gMHhiLAogCU1MWDRfQ01EX1FVRVJZX1BPUlQJID0gMHg0MywKKwlNTFg0X0NNRF9TRU5TRV9QT1JUCSA9IDB4NGQsCiAJTUxYNF9DTURfU0VUX1BPUlQJID0gMHhjLAogCU1MWDRfQ01EX0FDQ0VTU19ERFIJID0gMHgyZSwKIAlNTFg0X0NNRF9NQVBfSUNNCSA9IDB4ZmZhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCmluZGV4IDhmNjU5Y2MuLjNhZmY4YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKQEAgLTE1NSw4ICsxNTUsOSBAQAogfTsKIAogZW51bSBtbHg0X3BvcnRfdHlwZSB7Ci0JTUxYNF9QT1JUX1RZUEVfSUIJPSAxIDw8IDAsCi0JTUxYNF9QT1JUX1RZUEVfRVRICT0gMSA8PCAxLAorCU1MWDRfUE9SVF9UWVBFX0lCCT0gMSwKKwlNTFg0X1BPUlRfVFlQRV9FVEgJPSAyLAorCU1MWDRfUE9SVF9UWVBFX0FVVE8JPSAzCiB9OwogCiBlbnVtIG1seDRfc3BlY2lhbF92bGFuX2lkeCB7CkBAIC0yMzcsNiArMjM4LDcgQEAKIAllbnVtIG1seDRfcG9ydF90eXBlCXBvcnRfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogCXU4CQkJc3VwcG9ydGVkX3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAl1MzIJCQlwb3J0X21hc2s7CisJZW51bSBtbHg0X3BvcnRfdHlwZQlwb3NzaWJsZV90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiB9OwogCiBzdHJ1Y3QgbWx4NF9idWZfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCBmZGU4NjY3Li4xYmY1OTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTQ1NCw0ICs0NTQsMTMgQEAKIAogI2RlZmluZSBETUlfTUFUQ0goYSwgYikJeyBhLCBiIH0KIAorI2RlZmluZSBQTEFURk9STV9OQU1FX1NJWkUJMjAKKyNkZWZpbmUgUExBVEZPUk1fTU9EVUxFX1BSRUZJWAkicGxhdGZvcm06IgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHsKKwljaGFyIG5hbWVbUExBVEZPUk1fTkFNRV9TSVpFXTsKKwlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YQorCQkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yoa2VybmVsX3Vsb25nX3QpKSkpOworfTsKKwogI2VuZGlmIC8qIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKaW5kZXggY2FiMmE4NS4uNTFmNTVmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBNTlRfTk9ESVJBVElNRQkweDEwCiAjZGVmaW5lIE1OVF9SRUxBVElNRQkweDIwCiAjZGVmaW5lIE1OVF9SRUFET05MWQkweDQwCS8qIGRvZXMgdGhlIHVzZXIgd2FudCB0aGlzIHRvIGJlIHIvbz8gKi8KKyNkZWZpbmUgTU5UX1NUUklDVEFUSU1FIDB4ODAKIAogI2RlZmluZSBNTlRfU0hSSU5LQUJMRQkweDEwMAogI2RlZmluZSBNTlRfSU1CQUxBTkNFRF9XUklURV9DT1VOVAkweDIwMCAvKiBqdXN0IGZvciBkZWJ1Z2dpbmcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCmluZGV4IDhhNDU1NjkuLjBkNDViNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaApAQCAtMTkzLDYgKzE5Myw5IEBACiBzdHJ1Y3QgbWZjX2NhY2hlIAogewogCXN0cnVjdCBtZmNfY2FjaGUgKm5leHQ7CQkJLyogTmV4dCBlbnRyeSBvbiBjYWNoZSBsaW5lIAkqLworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlzdHJ1Y3QgbmV0ICptZmNfbmV0OworI2VuZGlmCiAJX19iZTMyIG1mY19tY2FzdGdycDsJCQkvKiBHcm91cCB0aGUgZW50cnkgYmVsb25ncyB0byAJKi8KIAlfX2JlMzIgbWZjX29yaWdpbjsJCQkvKiBTb3VyY2Ugb2YgcGFja2V0IAkJKi8KIAl2aWZpX3QgbWZjX3BhcmVudDsJCQkvKiBTb3VyY2UgaW50ZXJmYWNlCQkqLwpAQCAtMjE1LDYgKzIxOCwxOCBAQAogCX0gbWZjX3VuOwogfTsKIAorc3RhdGljIGlubGluZQorc3RydWN0IG5ldCAqbWZjX25ldChjb25zdCBzdHJ1Y3QgbWZjX2NhY2hlICptZmMpCit7CisJcmV0dXJuIHJlYWRfcG5ldCgmbWZjLT5tZmNfbmV0KTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBtZmNfbmV0X3NldChzdHJ1Y3QgbWZjX2NhY2hlICptZmMsIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwl3cml0ZV9wbmV0KCZtZmMtPm1mY19uZXQsIGhvbGRfbmV0KG5ldCkpOworfQorCiAjZGVmaW5lIE1GQ19TVEFUSUMJCTEKICNkZWZpbmUgTUZDX05PVElGWQkJMgogCkBAIC0yNDEsNyArMjU2LDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBydG1zZzsKLWV4dGVybiBpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOworZXh0ZXJuIGludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggNTM3NWZhYy4uNDNkYzk3ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oCkBAIC02NSw3ICs2NSw3IEBACiAJbWlmaV90CW1pZjZjX21pZmk7CQkvKiBJbmRleCBvZiBNSUYgKi8KIAl1bnNpZ25lZCBjaGFyIG1pZjZjX2ZsYWdzOwkvKiBNSUZGXyBmbGFncyAqLwogCXVuc2lnbmVkIGNoYXIgdmlmY190aHJlc2hvbGQ7CS8qIHR0bCBsaW1pdCAqLwotCXVfc2hvcnQJIG1pZjZjX3BpZmk7CQkvKiB0aGUgaW5kZXggb2YgdGhlIHBoeXNpY2FsIElGICovCisJX191MTYJIG1pZjZjX3BpZmk7CQkvKiB0aGUgaW5kZXggb2YgdGhlIHBoeXNpY2FsIElGICovCiAJdW5zaWduZWQgaW50IHZpZmNfcmF0ZV9saW1pdDsJLyogUmF0ZSBsaW1pdGVyIHZhbHVlcyAoTkkpICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oIGIvaW5jbHVkZS9saW51eC9uY3Bfbm8uaAppbmRleCBmNTZhNjk2Li5jZGRhYTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9uby5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX25vLmgKQEAgLTIsMTggKzIsMTggQEAKICNkZWZpbmUgX05DUF9OTwogCiAvKiB0aGVzZSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBieXRlIGFzIHNlZW4gYnkgTkNQICovCi0jZGVmaW5lIGFST05MWQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpKQotI2RlZmluZSBhSElEREVOCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMikpCi0jZGVmaW5lIGFTWVNURU0JCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMig0KSkKLSNkZWZpbmUgYUVYRUNVVEUJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDgpKQotI2RlZmluZSBhRElSCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxMCkpCi0jZGVmaW5lIGFBUkNICQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyMCkpCi0jZGVmaW5lIGFTSEFSRUQJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDgwKSkKLSNkZWZpbmUgYURPTlRTVUJBTExPQ0FURQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTEpKQotI2RlZmluZSBhVFJBTlNBQ1RJT05BTAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDEyKSkKLSNkZWZpbmUgYVBVUkdFCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE2KSkKLSNkZWZpbmUgYVJFTkFNRUlOSElCSVQJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNykpCi0jZGVmaW5lIGFERUxFVEVJTkhJQklUCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTgpKQotI2RlZmluZSBhRE9OVENPTVBSRVNTCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MjcpKQorI2RlZmluZSBhUk9OTFkJCQkoX19jcHVfdG9fbGUzMigxKSkKKyNkZWZpbmUgYUhJRERFTgkJCShfX2NwdV90b19sZTMyKDIpKQorI2RlZmluZSBhU1lTVEVNCQkJKF9fY3B1X3RvX2xlMzIoNCkpCisjZGVmaW5lIGFFWEVDVVRFCQkoX19jcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgYURJUgkJCShfX2NwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBhQVJDSAkJCShfX2NwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBhU0hBUkVECQkJKF9fY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIGFET05UU1VCQUxMT0NBVEUJKF9fY3B1X3RvX2xlMzIoMUw8PDExKSkKKyNkZWZpbmUgYVRSQU5TQUNUSU9OQUwJCShfX2NwdV90b19sZTMyKDFMPDwxMikpCisjZGVmaW5lIGFQVVJHRQkJCShfX2NwdV90b19sZTMyKDFMPDwxNikpCisjZGVmaW5lIGFSRU5BTUVJTkhJQklUCQkoX19jcHVfdG9fbGUzMigxTDw8MTcpKQorI2RlZmluZSBhREVMRVRFSU5ISUJJVAkJKF9fY3B1X3RvX2xlMzIoMUw8PDE4KSkKKyNkZWZpbmUgYURPTlRDT01QUkVTUwkJKF9fY3B1X3RvX2xlMzIoMUw8PDI3KSkKIAogI2VuZGlmIC8qIF9OQ1BfTk8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmggYi9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCmluZGV4IDg3MzBkNWQuLjEyYzlkZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaApAQCAtMzEsNiArMzEsNyBAQAogICoJTmVpZ2hib3IgQ2FjaGUgRW50cnkgRmxhZ3MKICAqLwogCisjZGVmaW5lIE5URl9VU0UJCTB4MDEKICNkZWZpbmUgTlRGX1BST1hZCTB4MDgJLyogPT0gQVRGX1BVQkwgKi8KICNkZWZpbmUgTlRGX1JPVVRFUgkweDgwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDQ1MTVlZmEuLjRmYzJmZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTI5LDExICsxMjksMTUgQEAKIAlzb2NrZXRfc3RhdGUJCXN0YXRlOwogCXNob3J0CQkJdHlwZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CisJLyoKKwkgKiBQbGVhc2Uga2VlcCBmYXN5bmNfbGlzdCAmIHdhaXQgZmllbGRzIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUKKwkgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmFzeW5jX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwogCXN0cnVjdCBmaWxlCQkqZmlsZTsKIAlzdHJ1Y3Qgc29jawkJKnNrOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOwogfTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTdmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX05FVF9EUk9QTU9OX0gKKyNkZWZpbmUgX19ORVRfRFJPUE1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK3N0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCB7CisJX191OCBwY1s4XTsKKwlfX3UzMiBjb3VudDsKK307CisKKyNkZWZpbmUgTkVUX0RNX0NGR19WRVJTSU9OICAwCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfQ09VTlQgIDEKKyNkZWZpbmUgTkVUX0RNX0NGR19BTEVSVF9ERUxBWSAyCisjZGVmaW5lIE5FVF9ETV9DRkdfTUFYIDMKKworc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgeworCV9fdTMyIHR5cGU7CisJX191NjQgZGF0YSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCitzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgeworCV9fdTMyIGVudHJpZXM7CisJc3RydWN0IG5ldF9kbV9jb25maWdfZW50cnkgb3B0aW9uc1swXTsKK307CisKK3N0cnVjdCBuZXRfZG1fYWxlcnRfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCBwb2ludHNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX3VzZXJfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBuZXRfZG1fY29uZmlnX21zZyB1c2VyOworCQlzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyBhbGVydDsKKwl9IHU7Cit9OworCisKKy8qIFRoZXNlIGFyZSB0aGUgbmV0bGluayBtZXNzYWdlIHR5cGVzIGZvciB0aGlzIHByb3RvY29sICovCisKK2VudW0geworCU5FVF9ETV9DTURfVU5TUEVDID0gMCwKKwlORVRfRE1fQ01EX0FMRVJULAorCU5FVF9ETV9DTURfQ09ORklHLAorCU5FVF9ETV9DTURfU1RBUlQsCisJTkVUX0RNX0NNRF9TVE9QLAorCV9ORVRfRE1fQ01EX01BWCwKK307CisKKyNkZWZpbmUgTkVUX0RNX0NNRF9NQVggKF9ORVRfRE1fQ01EX01BWCAtIDEpCisKKy8qCisgKiBPdXIgZ3JvdXAgaWRlbnRpZmllcnMKKyAqLworI2RlZmluZSBORVRfRE1fR1JQX0FMRVJUIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmggYi9pbmNsdWRlL2xpbnV4L25ldF90c3RhbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I4NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBVc2Vyc3BhY2UgQVBJIGZvciBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG9mIG5ldHdvcmsgcGFja2V0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX1RJTUVTVEFNUElOR19ICisjZGVmaW5lIF9ORVRfVElNRVNUQU1QSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAgIC8qIGZvciBTT19USU1FU1RBTVBJTkcgKi8KKworLyogU09fVElNRVNUQU1QSU5HIGdldHMgYW4gaW50ZWdlciBiaXQgZmllbGQgY29tcHJpc2VkIG9mIHRoZXNlIHZhbHVlcyAqLworZW51bSB7CisJU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSA9ICgxPDwwKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFID0gKDE8PDEpLAorCVNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgPSAoMTw8MiksCisJU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSA9ICgxPDwzKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFID0gKDE8PDQpLAorCVNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFID0gKDE8PDUpLAorCVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFID0gKDE8PDYpLAorCVNPRl9USU1FU1RBTVBJTkdfTUFTSyA9CisJKFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIC0gMSkgfAorCVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFCit9OworCisvKioKKyAqIHN0cnVjdCBod3RzdGFtcF9jb25maWcgLSAlU0lPQ1NIV1RTVEFNUCBwYXJhbWV0ZXIKKyAqCisgKiBAZmxhZ3M6CW5vIGZsYWdzIGRlZmluZWQgcmlnaHQgbm93LCBtdXN0IGJlIHplcm8KKyAqIEB0eF90eXBlOglvbmUgb2YgSFdUU1RBTVBfVFhfKgorICogQHJ4X3R5cGU6CW9uZSBvZiBvbmUgb2YgSFdUU1RBTVBfRklMVEVSXyoKKyAqCisgKiAlU0lPQ1NIV1RTVEFNUCBleHBlY3RzIGEgJnN0cnVjdCBpZnJlcSB3aXRoIGEgaWZyX2RhdGEgcG9pbnRlciB0bworICogdGhpcyBzdHJ1Y3R1cmUuIGRldl9pZnNpb2MoKSBpbiB0aGUga2VybmVsIHRha2VzIGNhcmUgb2YgdGhlCisgKiB0cmFuc2xhdGlvbiBiZXR3ZWVuIDMyIGJpdCB1c2Vyc3BhY2UgYW5kIDY0IGJpdCBrZXJuZWwuIFRoZQorICogc3RydWN0dXJlIGlzIGludGVudGlvbmFsbHkgY2hvc2VuIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIGxheW91dCBvbgorICogMzIgYW5kIDY0IGJpdCBzeXN0ZW1zLCBkb24ndCBicmVhayB0aGlzIQorICovCitzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHsKKwlpbnQgZmxhZ3M7CisJaW50IHR4X3R5cGU7CisJaW50IHJ4X2ZpbHRlcjsKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT50eF90eXBlICovCitlbnVtIHsKKwkvKgorCSAqIE5vIG91dGdvaW5nIHBhY2tldCB3aWxsIG5lZWQgaGFyZHdhcmUgdGltZSBzdGFtcGluZzsKKwkgKiBzaG91bGQgYSBwYWNrZXQgYXJyaXZlIHdoaWNoIGFza3MgZm9yIGl0LCBubyBoYXJkd2FyZQorCSAqIHRpbWUgc3RhbXBpbmcgd2lsbCBiZSBkb25lLgorCSAqLworCUhXVFNUQU1QX1RYX09GRiwKKworCS8qCisJICogRW5hYmxlcyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGZvciBvdXRnb2luZyBwYWNrZXRzOworCSAqIHRoZSBzZW5kZXIgb2YgdGhlIHBhY2tldCBkZWNpZGVzIHdoaWNoIGFyZSB0byBiZQorCSAqIHRpbWUgc3RhbXBlZCBieSBzZXR0aW5nICVTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFCisJICogYmVmb3JlIHNlbmRpbmcgdGhlIHBhY2tldC4KKwkgKi8KKwlIV1RTVEFNUF9UWF9PTiwKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT5yeF9maWx0ZXIgKi8KK2VudW0geworCS8qIHRpbWUgc3RhbXAgbm8gaW5jb21pbmcgcGFja2V0IGF0IGFsbCAqLworCUhXVFNUQU1QX0ZJTFRFUl9OT05FLAorCisJLyogdGltZSBzdGFtcCBhbnkgaW5jb21pbmcgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX0FMTCwKKworCS8qIHJldHVybiB2YWx1ZTogdGltZSBzdGFtcCBhbGwgcGFja2V0cyByZXF1ZXN0ZWQgcGx1cyBzb21lIG90aGVycyAqLworCUhXVFNUQU1QX0ZJTFRFUl9TT01FLAorCisJLyogUFRQIHYxLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQsCisJLyogUFRQIHYxLCBVRFAsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DLAorCS8qIFBUUCB2MSwgVURQLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVEsCisJLyogUFRQIHYyLCBVRFAsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQsCisJLyogUFRQIHYyLCBVRFAsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DLAorCS8qIFBUUCB2MiwgVURQLCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVEsCisKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCwKKwkvKiA4MDIuQVMxLCBFdGhlcm5ldCwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkMsCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUSwKKworCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQsCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgU3luYyBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkMsCisJLyogUFRQIHYyLzgwMi5BUzEsIGFueSBsYXllciwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVRLAorfTsKKworI2VuZGlmIC8qIF9ORVRfVElNRVNUQU1QSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDY1OTM2NjcuLmJlM2ViZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtOTYsNyArOTYsNyBAQAogICoJQ29tcHV0ZSB0aGUgd29yc3QgY2FzZSBoZWFkZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2xzCiAgKgl1c2VkLgogICovCi0gCisKICNpZiBkZWZpbmVkKENPTkZJR19XTEFOXzgwMjExKSB8fCBkZWZpbmVkKENPTkZJR19BWDI1KSB8fCBkZWZpbmVkKENPTkZJR19BWDI1X01PRFVMRSkKICMgaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfTUVTSCkKICMgIGRlZmluZSBMTF9NQVhfSEVBREVSIDEyOApAQCAtMTI0LDcgKzEyNCw3IEBACiAgKglOZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzLiBBa2luIHRvIHRoZSAyLjAgZXRoZXIgc3RhdHMgYnV0CiAgKgl3aXRoIGJ5dGUgY291bnRlcnMuCiAgKi8KLSAKKwogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMKIHsKIAl1bnNpZ25lZCBsb25nCXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCkBAIC0yODUsNyArMjg1LDcgQEAKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGF0IGJvb3QgdGltZSBjb25maWd1cmVkIG5ldGRldmljZSBzZXR0aW5ncy4gVGhleQotICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuIAorICogYXJlIHRoZW4gdXNlZCBpbiB0aGUgZGV2aWNlIHByb2JpbmcuCiAgKi8KIHN0cnVjdCBuZXRkZXZfYm9vdF9zZXR1cCB7CiAJY2hhciBuYW1lW0lGTkFNU0laXTsKQEAgLTMxNCw2ICszMTQsOSBAQAogCXNwaW5sb2NrX3QJCXBvbGxfbG9jazsKIAlpbnQJCQlwb2xsX293bmVyOwogI2VuZGlmCisKKwl1bnNpZ25lZCBpbnQJCWdyb19jb3VudDsKKwogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKmdyb19saXN0OwpAQCAtMzI3LDYgKzMzMCwxNCBAQAogCU5BUElfU1RBVEVfTlBTVkMsCS8qIE5ldHBvbGwgLSBkb24ndCBkZXF1ZXVlIGZyb20gcG9sbF9saXN0ICovCiB9OwogCitlbnVtIHsKKwlHUk9fTUVSR0VELAorCUdST19NRVJHRURfRlJFRSwKKwlHUk9fSEVMRCwKKwlHUk9fTk9STUFMLAorCUdST19EUk9QLAorfTsKKwogZXh0ZXJuIHZvaWQgX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbik7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5hcGlfZGlzYWJsZV9wZW5kaW5nKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKQEAgLTc0MCw3ICs3NTEsNyBAQAogCXZvaWQJCQkqZHNhX3B0cjsJLyogZHNhIHNwZWNpZmljIGRhdGEgKi8KICNlbmRpZgogCXZvaWQgCQkJKmF0YWxrX3B0cjsJLyogQXBwbGVUYWxrIGxpbmsgCSovCi0Jdm9pZAkJCSppcF9wdHI7CS8qIElQdjQgc3BlY2lmaWMgZGF0YQkqLyAgCisJdm9pZAkJCSppcF9wdHI7CS8qIElQdjQgc3BlY2lmaWMgZGF0YQkqLwogCXZvaWQgICAgICAgICAgICAgICAgICAgICpkbl9wdHI7ICAgICAgICAvKiBERUNuZXQgc3BlY2lmaWMgZGF0YSAqLwogCXZvaWQgICAgICAgICAgICAgICAgICAgICppcDZfcHRyOyAgICAgICAvKiBJUHY2IHNwZWNpZmljIGRhdGEgKi8KIAl2b2lkCQkJKmVjX3B0cjsJLyogRWNvbmV0IHNwZWNpZmljIGRhdGEJKi8KQEAgLTc1Myw3ICs3NjQsNyBAQAogICovCiAJdW5zaWduZWQgbG9uZwkJbGFzdF9yeDsJLyogVGltZSBvZiBsYXN0IFJ4CSovCiAJLyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mbyB1c2VkIGluIGV0aF90eXBlX3RyYW5zKCkgKi8KLQl1bnNpZ25lZCBjaGFyCQlkZXZfYWRkcltNQVhfQUREUl9MRU5dOwkvKiBodyBhZGRyZXNzLCAoYmVmb3JlIGJjYXN0IAorCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CS8qIGh3IGFkZHJlc3MsIChiZWZvcmUgYmNhc3QKIAkJCQkJCQkgICBiZWNhdXNlIG1vc3QgcGFja2V0cyBhcmUgdW5pY2FzdCkgKi8KIAogCXVuc2lnbmVkIGNoYXIJCWJyb2FkY2FzdFtNQVhfQUREUl9MRU5dOwkvKiBodyBiY2FzdCBhZGQJKi8KQEAgLTk4NCw2ICs5OTUsOSBAQAogdm9pZCBuZXRpZl9uYXBpX2RlbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpOwogCiBzdHJ1Y3QgbmFwaV9ncm9fY2IgeworCS8qIFRoaXMgaW5kaWNhdGVzIHdoZXJlIHdlIGFyZSBwcm9jZXNzaW5nIHJlbGF0aXZlIHRvIHNrYi0+ZGF0YS4gKi8KKwlpbnQgZGF0YV9vZmZzZXQ7CisKIAkvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgbWF5IGJlIG9mIHRoZSBzYW1lIGZsb3cuICovCiAJaW50IHNhbWVfZmxvdzsKIApAQCAtMTA4OCw2ICsxMTAyLDM2IEBACiAjaWZkZWYgQ09ORklHX05FVFBPTExfVFJBUAogZXh0ZXJuIGludAkJbmV0cG9sbF90cmFwKHZvaWQpOwogI2VuZGlmCitleHRlcm4gdm9pZAkgICAgICAqc2tiX2dyb19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhsZW4pOworZXh0ZXJuIGludAkgICAgICAgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9ncm9fb2Zmc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIE5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPmxlbiAtIE5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQgKz0gbGVuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19yZXNldF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2dyb19tYWNfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYl9tYWNfaGVhZGVyKHNrYikgPCBza2ItPmRhdGEgPyBza2JfbWFjX2hlYWRlcihza2IpIDoKKwkgICAgICAgcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSkgKworCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0OworfQogCiBzdGF0aWMgaW5saW5lIGludCBkZXZfaGFyZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHVuc2lnbmVkIHNob3J0IHR5cGUsCkBAIC0xMzc2LDEyICsxNDIwLDE1IEBACiBleHRlcm4gdm9pZAkJbmFwaV9ncm9fZmx1c2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTsKIGV4dGVybiBpbnQJCWRldl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJCXN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAkJbmFwaV9za2JfZmluaXNoKGludCByZXQsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkJbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkCQluYXBpX3JldXNlX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICoJbmFwaV9mcmFnaW5mb19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQkgIHN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyAqaW5mbyk7CitleHRlcm4gaW50CQluYXBpX2ZyYWdzX2ZpbmlzaChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJldCk7CiBleHRlcm4gaW50CQluYXBpX2dyb19mcmFncyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJICAgICAgIHN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyAqaW5mbyk7CiBleHRlcm4gdm9pZAkJbmV0aWZfbml0X2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xNTc1LDU2ICsxNjIyLDYgQEAKIAlyZXR1cm4gKDEgPDwgZGVidWdfdmFsdWUpIC0gMTsKIH0KIAotLyogVGVzdCBpZiByZWNlaXZlIG5lZWRzIHRvIGJlIHNjaGVkdWxlZCBidXQgb25seSBpZiB1cCAqLwotc3RhdGljIGlubGluZSBpbnQgbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JcmV0dXJuIG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKTsKLX0KLQotLyogQWRkIGludGVyZmFjZSB0byB0YWlsIG9mIHJ4IHBvbGwgbGlzdC4gVGhpcyBhc3N1bWVzIHRoYXQgX3ByZXAgaGFzCi0gKiBhbHJlYWR5IGJlZW4gY2FsbGVkIGFuZCByZXR1cm5lZCAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9yeF9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JX19uYXBpX3NjaGVkdWxlKG5hcGkpOwotfQotCi0vKiBUcnkgdG8gcmVzY2hlZHVsZSBwb2xsLiBDYWxsZWQgYnkgaXJxIGhhbmRsZXIuICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9yeF9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAobmFwaSkpCi0JCV9fbmV0aWZfcnhfc2NoZWR1bGUobmFwaSk7Ci19Ci0KLS8qIFRyeSB0byByZXNjaGVkdWxlIHBvbGwuIENhbGxlZCBieSBkZXYtPnBvbGwoKSBhZnRlciBuZXRpZl9yeF9jb21wbGV0ZSgpLiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3Jlc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSkpIHsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZShuYXBpKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBzYW1lIGFzIG5ldGlmX3J4X2NvbXBsZXRlLCBleGNlcHQgdGhhdCBsb2NhbF9pcnFfc2F2ZShmbGFncykKLSAqIGhhcyBhbHJlYWR5IGJlZW4gaXNzdWVkCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3J4X2NvbXBsZXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlfX25hcGlfY29tcGxldGUobmFwaSk7Ci19Ci0KLS8qIFJlbW92ZSBpbnRlcmZhY2UgZnJvbSBwb2xsIGxpc3Q6IGl0IG11c3QgYmUgaW4gdGhlIHBvbGwgbGlzdAotICogb24gY3VycmVudCBjcHUuIFRoaXMgcHJpbWl0aXZlIGlzIGNhbGxlZCBieSBkZXYtPnBvbGwoKSwgd2hlbgotICogaXQgY29tcGxldGVzIHRoZSB3b3JrLiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBvdXQgb2YgcG9sbCBsaXN0IGF0IHRoaXMKLSAqIG1vbWVudCwgaXQgaXMgQlVHKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JbmFwaV9jb21wbGV0ZShuYXBpKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfdHhfbG9jayhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsIGludCBjcHUpCiB7CiAJc3Bpbl9sb2NrKCZ0eHEtPl94bWl0X2xvY2spOwpAQCAtMTg3NSw3ICsxODcyLDcgQEAKIAogCQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX0lOQUNUSVZFKSB7CiAJCQlpZiAoKGRldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9ORUVEQVJQKSAmJgotCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApKQorCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jcHVfdG9fYmUxNihFVEhfUF9BUlApKQogCQkJCXJldHVybiAwOwogCiAJCQlpZiAobWFzdGVyLT5wcml2X2ZsYWdzICYgSUZGX01BU1RFUl9BTEIpIHsKQEAgLTE4ODQsNyArMTg4MSw3IEBACiAJCQkJCXJldHVybiAwOwogCQkJfQogCQkJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfODAyM0FEICYmCi0JCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1NMT1cpKQorCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jcHVfdG9fYmUxNihFVEhfUF9TTE9XKSkKIAkJCQlyZXR1cm4gMDsKIAogCQkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKaW5kZXggNWE4YWY4Ny4uYWY5ZDJmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZApAQCAtNywxNiArNywyMSBAQAogaGVhZGVyLXkgKz0geHRfQ09OTk1BUksuaAogaGVhZGVyLXkgKz0geHRfQ09OTlNFQ01BUksuaAogaGVhZGVyLXkgKz0geHRfRFNDUC5oCitoZWFkZXIteSArPSB4dF9MRUQuaAogaGVhZGVyLXkgKz0geHRfTUFSSy5oCiBoZWFkZXIteSArPSB4dF9ORkxPRy5oCiBoZWFkZXIteSArPSB4dF9ORlFVRVVFLmgKIGhlYWRlci15ICs9IHh0X1JBVEVFU1QuaAogaGVhZGVyLXkgKz0geHRfU0VDTUFSSy5oCiBoZWFkZXIteSArPSB4dF9UQ1BNU1MuaAoraGVhZGVyLXkgKz0geHRfVENQT1BUU1RSSVAuaAoraGVhZGVyLXkgKz0geHRfVFBST1hZLmgKIGhlYWRlci15ICs9IHh0X2NvbW1lbnQuaAogaGVhZGVyLXkgKz0geHRfY29ubmJ5dGVzLmgKK2hlYWRlci15ICs9IHh0X2Nvbm5saW1pdC5oCiBoZWFkZXIteSArPSB4dF9jb25ubWFyay5oCiBoZWFkZXIteSArPSB4dF9jb25udHJhY2suaAoraGVhZGVyLXkgKz0geHRfY2x1c3Rlci5oCiBoZWFkZXIteSArPSB4dF9kY2NwLmgKIGhlYWRlci15ICs9IHh0X2RzY3AuaAogaGVhZGVyLXkgKz0geHRfZXNwLmgKQEAgLTMwLDYgKzM1LDcgQEAKIGhlYWRlci15ICs9IHh0X211bHRpcG9ydC5oCiBoZWFkZXIteSArPSB4dF9vd25lci5oCiBoZWFkZXIteSArPSB4dF9wa3R0eXBlLmgKK2hlYWRlci15ICs9IHh0X3F1b3RhLmgKIGhlYWRlci15ICs9IHh0X3JhdGVlc3QuaAogaGVhZGVyLXkgKz0geHRfcmVhbG0uaAogaGVhZGVyLXkgKz0geHRfcmVjZW50LmgKQEAgLTM5LDYgKzQ1LDggQEAKIGhlYWRlci15ICs9IHh0X3N0cmluZy5oCiBoZWFkZXIteSArPSB4dF90Y3Btc3MuaAogaGVhZGVyLXkgKz0geHRfdGNwdWRwLmgKK2hlYWRlci15ICs9IHh0X3RpbWUuaAoraGVhZGVyLXkgKz0geHRfdTMyLmgKIAogdW5pZmRlZi15ICs9IG5mX2Nvbm50cmFja19jb21tb24uaAogdW5pZmRlZi15ICs9IG5mX2Nvbm50cmFja19mdHAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCmluZGV4IGEwNDlkZjQuLjMwNjY3ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKQEAgLTIsNiArMiw4IEBACiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVENQX0gKIC8qIFRDUCB0cmFja2luZy4gKi8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIFRoaXMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKGN0bmV0bGluaykgKi8KIGVudW0gdGNwX2Nvbm50cmFjayB7CiAJVENQX0NPTk5UUkFDS19OT05FLApAQCAtMzQsOCArMzYsOCBAQAogI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VECTB4MTAKIAogc3RydWN0IG5mX2N0X3RjcF9mbGFncyB7Ci0JdV9pbnQ4X3QgZmxhZ3M7Ci0JdV9pbnQ4X3QgbWFzazsKKwlfX3U4IGZsYWdzOworCV9fdTggbWFzazsKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IDdkOGUwNDUuLmM2MDAwODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC0yNSw4ICsyNSw4IEBACiAvKiBHZW5lcmFsIGZvcm0gb2YgYWRkcmVzcyBmYW1pbHkgZGVwZW5kZW50IG1lc3NhZ2UuCiAgKi8KIHN0cnVjdCBuZmdlbm1zZyB7Ci0JdV9pbnQ4X3QgIG5mZ2VuX2ZhbWlseTsJCS8qIEFGX3h4eCAqLwotCXVfaW50OF90ICB2ZXJzaW9uOwkJLyogbmZuZXRsaW5rIHZlcnNpb24gKi8KKwlfX3U4ICBuZmdlbl9mYW1pbHk7CQkvKiBBRl94eHggKi8KKwlfX3U4ICB2ZXJzaW9uOwkJLyogbmZuZXRsaW5rIHZlcnNpb24gKi8KIAlfX2JlMTYgICAgcmVzX2lkOwkJLyogcmVzb3VyY2UgaWQgKi8KIH07CiAKQEAgLTc2LDYgKzc2LDcgQEAKIGV4dGVybiBpbnQgbmZuZXRsaW5rX2hhc19saXN0ZW5lcnModW5zaWduZWQgaW50IGdyb3VwKTsKIGV4dGVybiBpbnQgbmZuZXRsaW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdW5zaWduZWQgZ3JvdXAsIAogCQkJICBpbnQgZWNobyk7CitleHRlcm4gdm9pZCBuZm5ldGxpbmtfc2V0X2Vycih1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlcnJvcik7CiBleHRlcm4gaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncyk7CiAKIGV4dGVybiB2b2lkIG5mbmxfbG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaAppbmRleCBlMTQ1MTc2Li5lZGE1NWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCkBAIC0xLDUgKzEsOCBAQAogI2lmbmRlZiBfTkZORVRMSU5LX0NPTVBBVF9ICiAjZGVmaW5lIF9ORk5FVExJTktfQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZm5kZWYgX19LRVJORUxfXwogLyogT2xkIG5mbmV0bGluayBtYWNyb3MgZm9yIHVzZXJzcGFjZSAqLwogCkBAIC0yMCw4ICsyMyw4IEBACiAKIHN0cnVjdCBuZmF0dHIKIHsKLQl1X2ludDE2X3QgbmZhX2xlbjsKLQl1X2ludDE2X3QgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CisJX191MTYgbmZhX2xlbjsKKwlfX3UxNiBuZmFfdHlwZTsJLyogd2UgdXNlIDE1IGJpdHMgZm9yIHRoZSB0eXBlLCBhbmQgdGhlIGhpZ2hlc3QKIAkJCQkgKiBiaXQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBuZXN0ZWQgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAppbmRleCBmNjYxNzMxLi5kM2JhYjdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCkBAIC0xNywxNCArMTcsMTQgQEAKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X2hkciB7CiAJX19iZTE2CQlod19wcm90b2NvbDsJLyogaHcgcHJvdG9jb2wgKG5ldHdvcmsgb3JkZXIpICovCi0JdV9pbnQ4X3QJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCi0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLworCV9fdTgJX3BhZDsKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9odyB7CiAJX19iZTE2CQlod19hZGRybGVuOwotCXVfaW50MTZfdAlfcGFkOwotCXVfaW50OF90CWh3X2FkZHJbOF07CisJX191MTYJX3BhZDsKKwlfX3U4CWh3X2FkZHJbOF07CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKQEAgLTM1LDEyICszNSwxMiBAQAogZW51bSBuZnVsbmxfYXR0cl90eXBlIHsKIAlORlVMQV9VTlNQRUMsCiAJTkZVTEFfUEFDS0VUX0hEUiwKLQlORlVMQV9NQVJLLAkJCS8qIHVfaW50MzJfdCBuZm1hcmsgKi8KKwlORlVMQV9NQVJLLAkJCS8qIF9fdTMyIG5mbWFyayAqLwogCU5GVUxBX1RJTUVTVEFNUCwJCS8qIG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCAqLwotCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GVUxBX0lGSU5ERVhfT1VUREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX1BIWVNJTkRFViwJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX09VVERFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNJTkRFViwJLyogX191MzIgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfUEhZU09VVERFViwJLyogX191MzIgaWZpbmRleCAqLwogCU5GVUxBX0hXQUREUiwJCQkvKiBuZnVsbmxfbXNnX3BhY2tldF9odyAqLwogCU5GVUxBX1BBWUxPQUQsCQkJLyogb3BhcXVlIGRhdGEgcGF5bG9hZCAqLwogCU5GVUxBX1BSRUZJWCwJCQkvKiBzdHJpbmcgcHJlZml4ICovCkBAIC02NSwyMyArNjUsMjMgQEAKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgewotCXVfaW50OF90CWNvbW1hbmQ7CS8qIG5mdWxubF9tc2dfY29uZmlnX2NtZHMgKi8KKwlfX3U4CWNvbW1hbmQ7CS8qIG5mdWxubF9tc2dfY29uZmlnX2NtZHMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19jb25maWdfbW9kZSB7CiAJX19iZTMyCQljb3B5X3JhbmdlOwotCXVfaW50OF90CWNvcHlfbW9kZTsKLQl1X2ludDhfdAlfcGFkOworCV9fdTgJY29weV9tb2RlOworCV9fdTgJX3BhZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBlbnVtIG5mdWxubF9hdHRyX2NvbmZpZyB7CiAJTkZVTEFfQ0ZHX1VOU1BFQywKIAlORlVMQV9DRkdfQ01ELAkJCS8qIG5mdWxubF9tc2dfY29uZmlnX2NtZCAqLwogCU5GVUxBX0NGR19NT0RFLAkJCS8qIG5mdWxubF9tc2dfY29uZmlnX21vZGUgKi8KLQlORlVMQV9DRkdfTkxCVUZTSVosCQkvKiB1X2ludDMyX3QgYnVmZmVyIHNpemUgKi8KLQlORlVMQV9DRkdfVElNRU9VVCwJCS8qIHVfaW50MzJfdCBpbiAxLzEwMCBzICovCi0JTkZVTEFfQ0ZHX1FUSFJFU0gsCQkvKiB1X2ludDMyX3QgKi8KLQlORlVMQV9DRkdfRkxBR1MsCQkvKiB1X2ludDE2X3QgKi8KKwlORlVMQV9DRkdfTkxCVUZTSVosCQkvKiBfX3UzMiBidWZmZXIgc2l6ZSAqLworCU5GVUxBX0NGR19USU1FT1VULAkJLyogX191MzIgaW4gMS8xMDAgcyAqLworCU5GVUxBX0NGR19RVEhSRVNILAkJLyogX191MzIgKi8KKwlORlVMQV9DRkdfRkxBR1MsCQkvKiBfX3UxNiAqLwogCV9fTkZVTEFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZVTEFfQ0ZHX01BWCAoX19ORlVMQV9DRkdfTUFYIC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaAppbmRleCA4M2U3ODk2Li4yNDU1ZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaApAQCAtMTUsMTMgKzE1LDEzIEBACiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9oZHIgewogCV9fYmUzMgkJcGFja2V0X2lkOwkvKiB1bmlxdWUgSUQgb2YgcGFja2V0IGluIHF1ZXVlICovCiAJX19iZTE2CQlod19wcm90b2NvbDsJLyogaHcgcHJvdG9jb2wgKG5ldHdvcmsgb3JkZXIpICovCi0JdV9pbnQ4X3QJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCisJX191OAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9odyB7CiAJX19iZTE2CQlod19hZGRybGVuOwotCXVfaW50MTZfdAlfcGFkOwotCXVfaW50OF90CWh3X2FkZHJbOF07CisJX191MTYJX3BhZDsKKwlfX3U4CWh3X2FkZHJbOF07CiB9OwogCiBzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgewpAQCAtMzMsMTIgKzMzLDEyIEBACiAJTkZRQV9VTlNQRUMsCiAJTkZRQV9QQUNLRVRfSERSLAogCU5GUUFfVkVSRElDVF9IRFIsCQkvKiBuZnFubF9tc2dfdmVyZGljdF9ocmQgKi8KLQlORlFBX01BUkssCQkJLyogdV9pbnQzMl90IG5mbWFyayAqLworCU5GUUFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KIAlORlFBX1RJTUVTVEFNUCwJCQkvKiBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCAqLwotCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZRQV9JRklOREVYX09VVERFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZRQV9JRklOREVYX1BIWVNJTkRFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX0lOREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNJTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfUEhZU09VVERFViwJLyogX191MzIgaWZpbmRleCAqLwogCU5GUUFfSFdBRERSLAkJCS8qIG5mcW5sX21zZ19wYWNrZXRfaHcgKi8KIAlORlFBX1BBWUxPQUQsCQkJLyogb3BhcXVlIGRhdGEgcGF5bG9hZCAqLwogCkBAIC02MSw4ICs2MSw4IEBACiB9OwogCiBzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19jbWQgewotCXVfaW50OF90CWNvbW1hbmQ7CS8qIG5mcW5sX21zZ19jb25maWdfY21kcyAqLwotCXVfaW50OF90CV9wYWQ7CisJX191OAljb21tYW5kOwkvKiBuZnFubF9tc2dfY29uZmlnX2NtZHMgKi8KKwlfX3U4CV9wYWQ7CiAJX19iZTE2CQlwZjsJCS8qIEFGX3h4eCBmb3IgUEZfW1VOXUJJTkQgKi8KIH07CiAKQEAgLTc0LDcgKzc0LDcgQEAKIAogc3RydWN0IG5mcW5sX21zZ19jb25maWdfcGFyYW1zIHsKIAlfX2JlMzIJCWNvcHlfcmFuZ2U7Ci0JdV9pbnQ4X3QJY29weV9tb2RlOwkvKiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlICovCisJX191OAljb3B5X21vZGU7CS8qIGVudW0gbmZxbmxfY29uZmlnX21vZGUgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKQEAgLTgyLDcgKzgyLDcgQEAKIAlORlFBX0NGR19VTlNQRUMsCiAJTkZRQV9DRkdfQ01ELAkJCS8qIG5mcW5sX21zZ19jb25maWdfY21kICovCiAJTkZRQV9DRkdfUEFSQU1TLAkJLyogbmZxbmxfbXNnX2NvbmZpZ19wYXJhbXMgKi8KLQlORlFBX0NGR19RVUVVRV9NQVhMRU4sCQkvKiB1X2ludDMyX3QgKi8KKwlORlFBX0NGR19RVUVVRV9NQVhMRU4sCQkvKiBfX3UzMiAqLwogCV9fTkZRQV9DRkdfTUFYCiB9OwogI2RlZmluZSBORlFBX0NGR19NQVggKF9fTkZRQV9DRkdfTUFYLTEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAppbmRleCBjN2VlODc0Li5hZGJjNTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YX1RBQkxFU19ICiAjZGVmaW5lIF9YX1RBQkxFU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4gMzAKICNkZWZpbmUgWFRfVEFCTEVfTUFYTkFNRUxFTiAzMgogCkBAIC04LDIyICsxMCwyMiBAQAogewogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQkJX191MTYgbWF0Y2hfc2l6ZTsKIAogCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KIAkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJCV9fdTggcmV2aXNpb247CiAJCX0gdXNlcjsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQkJX191MTYgbWF0Y2hfc2l6ZTsKIAogCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLwogCQkJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAkJfSBrZXJuZWw7CiAKIAkJLyogVG90YWwgbGVuZ3RoICovCi0JCXVfaW50MTZfdCBtYXRjaF9zaXplOworCQlfX3UxNiBtYXRjaF9zaXplOwogCX0gdTsKIAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKQEAgLTMzLDIyICszNSwyMiBAQAogewogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCV9fdTE2IHRhcmdldF9zaXplOwogCiAJCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLwogCQkJY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CiAKLQkJCXVfaW50OF90IHJldmlzaW9uOworCQkJX191OCByZXZpc2lvbjsKIAkJfSB1c2VyOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCQkJX191MTYgdGFyZ2V0X3NpemU7CiAKIAkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KIAkJCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAkJfSBrZXJuZWw7CiAKIAkJLyogVG90YWwgbGVuZ3RoICovCi0JCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJX191MTYgdGFyZ2V0X3NpemU7CiAJfSB1OwogCiAJdW5zaWduZWQgY2hhciBkYXRhWzBdOwpAQCAtNzQsNyArNzYsNyBAQAogewogCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JdV9pbnQ4X3QgcmV2aXNpb247CisJX191OCByZXZpc2lvbjsKIH07CiAKIC8qIENPTlRJTlVFIHZlcmRpY3QgZm9yIHRhcmdldHMgKi8KQEAgLTkwLDEwICs5MiwxMCBAQAogICovCiBzdHJ1Y3QgX3h0X2FsaWduCiB7Ci0JdV9pbnQ4X3QgdTg7Ci0JdV9pbnQxNl90IHUxNjsKLQl1X2ludDMyX3QgdTMyOwotCXVfaW50NjRfdCB1NjQ7CisJX191OCB1ODsKKwlfX3UxNiB1MTY7CisJX191MzIgdTMyOworCV9fdTY0IHU2NDsKIH07CiAKICNkZWZpbmUgWFRfQUxJR04ocykgKCgocykgKyAoX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbiktMSkpIAlcCkBAIC0xMDksNyArMTExLDcgQEAKIAogc3RydWN0IHh0X2NvdW50ZXJzCiB7Ci0JdV9pbnQ2NF90IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCisJX191NjQgcGNudCwgYmNudDsJCQkvKiBQYWNrZXQgYW5kIGJ5dGUgY291bnRlcnMgKi8KIH07CiAKIC8qIFRoZSBhcmd1bWVudCB0byBJUFRfU09fQUREX0NPVU5URVJTLiAqLwpAQCAtMzQ5LDIzICszNTEsMjIgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQkvKiBBIHVuaXF1ZSBuYW1lLi4uICovCi0JY29uc3QgY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOwotCiAJLyogV2hhdCBob29rcyB5b3Ugd2lsbCBlbnRlciBvbiAqLwogCXVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKIAogCS8qIExvY2sgZm9yIHRoZSBjdXJ0YWluICovCi0Jcndsb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAogCS8qIE1hbiBiZWhpbmQgdGhlIGN1cnRhaW4uLi4gKi8KLQkvL3N0cnVjdCBpcDZ0X3RhYmxlX2luZm8gKnByaXZhdGU7Ci0Jdm9pZCAqcHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAogCS8qIFNldCB0aGlzIHRvIFRISVNfTU9EVUxFIGlmIHlvdSBhcmUgYSBtb2R1bGUsIG90aGVyd2lzZSBOVUxMICovCiAJc3RydWN0IG1vZHVsZSAqbWU7CiAKIAl1X2ludDhfdCBhZjsJCS8qIGFkZHJlc3MvcHJvdG9jb2wgZmFtaWx5ICovCisKKwkvKiBBIHVuaXF1ZSBuYW1lLi4uICovCisJY29uc3QgY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOwogfTsKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CkBAIC0zODYsNyArMzg3LDcgQEAKIAogCS8qIGlwdF9lbnRyeSB0YWJsZXM6IG9uZSBwZXIgQ1BVICovCiAJLyogTm90ZSA6IHRoaXMgZmllbGQgTVVTVCBiZSB0aGUgbGFzdCBvbmUsIHNlZSBYVF9UQUJMRV9JTkZPX1NaICovCi0JY2hhciAqZW50cmllc1sxXTsKKwl2b2lkICplbnRyaWVzWzFdOwogfTsKIAogI2RlZmluZSBYVF9UQUJMRV9JTkZPX1NaIChvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykgXApAQCAtNDMzLDYgKzQzNCw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqeHRfYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCB4dF9mcmVlX3RhYmxlX2luZm8oc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pOworZXh0ZXJuIHZvaWQgeHRfdGFibGVfZW50cnlfc3dhcF9yY3Uoc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZCwKKwkJCQkgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ldyk7CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaW5jbHVkZSA8bmV0L2NvbXBhdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKaW5kZXggNTgxMTEzNS4uYTgxM2JmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCkBAIC0xLDggKzEsMTAgQEAKICNpZm5kZWYgX1hUX0NMQVNTSUZZX0gKICNkZWZpbmUgX1hUX0NMQVNTSUZZX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9jbGFzc2lmeV90YXJnZXRfaW5mbyB7Ci0JdV9pbnQzMl90IHByaW9yaXR5OworCV9fdTMyIHByaW9yaXR5OwogfTsKIAogI2VuZGlmIC8qX1hUX0NMQVNTSUZZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCmluZGV4IDRlNThiYTQuLjc2MzVjOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5NQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9DT05OTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQ29weXJpZ2h0IChDKSAyMDAyLDIwMDQgTUFSQSBTeXN0ZW1zIEFCIDxodHRwOi8vd3d3Lm1hcmFzeXN0ZW1zLmNvbT4KICAqIGJ5IEhlbnJpayBOb3Jkc3Ryb20gPGhub0BtYXJhc3lzdGVtcy5jb20+CiAgKgpAQCAtMTksMTIgKzIxLDEyIEBACiBzdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyazsKIAl1bnNpZ25lZCBsb25nIG1hc2s7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfdGdpbmZvMSB7Ci0JdV9pbnQzMl90IGN0bWFyaywgY3RtYXNrLCBuZm1hc2s7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3UzMiBjdG1hcmssIGN0bWFzaywgbmZtYXNrOworCV9fdTggbW9kZTsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OTUFSS19IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaAppbmRleCBjNmJkNzU0Li5iOTczZmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKQEAgLTEsMTMgKzEsMTUgQEAKICNpZm5kZWYgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJQ09OTlNFQ01BUktfU0FWRSA9IDEsCiAJQ09OTlNFQ01BUktfUkVTVE9SRSwKIH07CiAKIHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyB7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaAppbmRleCAxNGRhMTk2Li42NDhlMGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCkBAIC0xMSwxNSArMTEsMTYgQEAKICNpZm5kZWYgX1hUX0RTQ1BfVEFSR0VUX0gKICNkZWZpbmUgX1hUX0RTQ1BfVEFSR0VUX0gKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfRFNDUF9pbmZvIHsKLQl1X2ludDhfdCBkc2NwOworCV9fdTggZHNjcDsKIH07CiAKIHN0cnVjdCB4dF90b3NfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IHRvc192YWx1ZTsKLQl1X2ludDhfdCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IHRvc19tYXNrOwogfTsKIAogI2VuZGlmIC8qIF9YVF9EU0NQX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0xFRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTFhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9YVF9MRURfSAorI2RlZmluZSBfWFRfTEVEX0gKKworc3RydWN0IHh0X2xlZF9pbmZvIHsKKwljaGFyIGlkWzI3XTsgICAgICAgIC8qIFVuaXF1ZSBJRCBmb3IgdGhpcyB0cmlnZ2VyIGluIHRoZSBMRUQgY2xhc3MgKi8KKwlfX3U4IGFsd2F5c19ibGluazsgIC8qIEJsaW5rIGV2ZW4gaWYgdGhlIExFRCBpcyBhbHJlYWR5IG9uICovCisJX191MzIgZGVsYXk7ICAgICAgICAvKiBEZWxheSB1bnRpbCBMRUQgaXMgc3dpdGNoZWQgb2ZmIGFmdGVyIHRyaWdnZXIgKi8KKworCS8qIEtlcm5lbCBkYXRhIHVzZWQgaW4gdGhlIG1vZHVsZSAqLworCXZvaWQgKmludGVybmFsX2RhdGEgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmIC8qIF9YVF9MRURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCmluZGV4IDc3OGIyNzguLjAyODMwNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9NQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9NQVJLX0hfdGFyZ2V0CiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBWZXJzaW9uIDAgKi8KIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7CkBAIC0xNSwxMSArMTcsMTEgQEAKIAogc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgewogCXVuc2lnbmVkIGxvbmcgbWFyazsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIH07CiAKIHN0cnVjdCB4dF9tYXJrX3RnaW5mbzIgewotCXVfaW50MzJfdCBtYXJrLCBtYXNrOworCV9fdTMyIG1hcmssIG1hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfTUFSS19IX3RhcmdldCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKaW5kZXggNGIzNmFlYi4uODdiNTgzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCkBAIC0xLDE3ICsxLDE5IEBACiAjaWZuZGVmIF9YVF9ORkxPR19UQVJHRVQKICNkZWZpbmUgX1hUX05GTE9HX1RBUkdFVAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9ORkxPR19ERUZBVUxUX0dST1VQCQkweDEKICNkZWZpbmUgWFRfTkZMT0dfREVGQVVMVF9USFJFU0hPTEQJMAogCiAjZGVmaW5lIFhUX05GTE9HX01BU0sJCQkweDAKIAogc3RydWN0IHh0X25mbG9nX2luZm8gewotCXVfaW50MzJfdAlsZW47Ci0JdV9pbnQxNl90CWdyb3VwOwotCXVfaW50MTZfdAl0aHJlc2hvbGQ7Ci0JdV9pbnQxNl90CWZsYWdzOwotCXVfaW50MTZfdAlwYWQ7CisJX191MzIJbGVuOworCV9fdTE2CWdyb3VwOworCV9fdTE2CXRocmVzaG9sZDsKKwlfX3UxNglmbGFnczsKKwlfX3UxNglwYWQ7CiAJY2hhcgkJcHJlZml4WzY0XTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaAppbmRleCA5YTlhZjc5Li45ODJhODlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oCkBAIC04LDkgKzgsMTEgQEAKICNpZm5kZWYgX1hUX05GUV9UQVJHRVRfSAogI2RlZmluZSBfWFRfTkZRX1RBUkdFVF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0YXJnZXQgaW5mbyAqLwogc3RydWN0IHh0X05GUV9pbmZvIHsKLQl1X2ludDE2X3QgcXVldWVudW07CisJX191MTYgcXVldWVudW07CiB9OwogCiAjZW5kaWYgLyogX1hUX05GUV9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCmluZGV4IGY3OWUzMTMuLjY2MDVlMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKQEAgLTEsMTAgKzEsMTIgQEAKICNpZm5kZWYgX1hUX1JBVEVFU1RfVEFSR0VUX0gKICNkZWZpbmUgX1hUX1JBVEVFU1RfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9yYXRlZXN0X3RhcmdldF9pbmZvIHsKIAljaGFyCQkJbmFtZVtJRk5BTVNJWl07Ci0JaW50OF90CQkJaW50ZXJ2YWw7Ci0JdV9pbnQ4X3QJCWV3bWFfbG9nOworCV9fczgJCQlpbnRlcnZhbDsKKwlfX3U4CQlld21hX2xvZzsKIAogCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCiAJc3RydWN0IHh0X3JhdGVlc3QJKmVzdCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKaW5kZXggYzUzZmJmZi4uNmZjZDM0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1NFQ01BUktfSF90YXJnZXQKICNkZWZpbmUgX1hUX1NFQ01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKiBUaGlzIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdmFyaW91cyBzZWN1cml0eSBzdWJzeXN0ZW1zIChidXQgbm90CiAgKiBhdCB0aGUgc2FtZSB0aW1lKS4KQEAgLTEyLDEyICsxNCwxMiBAQAogI2RlZmluZSBTRUNNQVJLX1NFTENUWF9NQVgJMjU2CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gewotCXVfaW50MzJfdCBzZWxzaWQ7CisJX191MzIgc2Vsc2lkOwogCWNoYXIgc2VsY3R4W1NFQ01BUktfU0VMQ1RYX01BWF07CiB9OwogCiBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyB7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfc2VsaW51eF9pbmZvIHNlbDsKIAl9IHU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9UQ1BNU1MuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oCmluZGV4IDUzYTI5MmMuLjlhNjk2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oCkBAIC0xLDggKzEsMTAgQEAKICNpZm5kZWYgX1hUX1RDUE1TU19ICiAjZGVmaW5lIF9YVF9UQ1BNU1NfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3RjcG1zc19pbmZvIHsKLQl1X2ludDE2X3QgbXNzOworCV9fdTE2IG1zczsKIH07CiAKICNkZWZpbmUgWFRfVENQTVNTX0NMQU1QX1BNVFUgMHhmZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jbHVzdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jbHVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwYTBkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9YVF9DTFVTVEVSX01BVENIX0gKKyNkZWZpbmUgX1hUX0NMVVNURVJfTUFUQ0hfSAorCitlbnVtIHh0X2NsdXN0ZXJfZmxhZ3MgeworCVhUX0NMVVNURVJfRl9JTlYJPSAoMSA8PCAwKQorfTsKKworc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyB7CisJdV9pbnQzMl90CQl0b3RhbF9ub2RlczsKKwl1X2ludDMyX3QJCW5vZGVfbWFzazsKKwl1X2ludDMyX3QJCWhhc2hfc2VlZDsKKwl1X2ludDMyX3QJCWZsYWdzOworfTsKKworI2VuZGlmIC8qIF9YVF9DTFVTVEVSX01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKaW5kZXggYzAyMmM5OC4uNTJiZDYxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OQllURVNfSAogI2RlZmluZSBfWFRfQ09OTkJZVEVTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfY29ubmJ5dGVzX3doYXQgewogCVhUX0NPTk5CWVRFU19QS1RTLAogCVhUX0NPTk5CWVRFU19CWVRFUywKQEAgLTE5LDcgKzIxLDcgQEAKIAkJYWxpZ25lZF91NjQgZnJvbTsJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCQlhbGlnbmVkX3U2NCB0bzsJCS8qIGNvdW50IHRvIGJlIG1hdGNoZWQgKi8KIAl9IGNvdW50OwotCXVfaW50OF90IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KLQl1X2ludDhfdCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCisJX191OCB3aGF0OwkJLyogaXB0X2Nvbm5ieXRlc193aGF0ICovCisJX191OCBkaXJlY3Rpb247CS8qIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uICovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaAppbmRleCAzNTllZjg2Li41NzFlMjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19ICiAjZGVmaW5lIF9YVF9DT05OTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgogICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KICAqCkBAIC0xMiwxMiArMTQsMTIgQEAKIAogc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gewogCXVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCmluZGV4IDhmNTM0NTIuLjM0MzBjNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC02Myw5ICs2Myw5IEBACiAJdW5zaWduZWQgbG9uZyBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7CiAKIAkvKiBGbGFncyB3b3JkICovCi0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIAkvKiBJbnZlcnNlIGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZmxhZ3M7CisJX191OCBpbnZmbGFnczsKIH07CiAKIHN0cnVjdCB4dF9jb25udHJhY2tfbXRpbmZvMSB7CkBAIC03MywxMiArNzMsMTIgQEAKIAl1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxzcmNfYWRkciwgcmVwbHNyY19tYXNrOwogCXVuaW9uIG5mX2luZXRfYWRkciByZXBsZHN0X2FkZHIsIHJlcGxkc3RfbWFzazsKLQl1X2ludDMyX3QgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OwotCXVfaW50MTZfdCBsNHByb3RvOworCV9fdTMyIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKKwlfX3UxNiBsNHByb3RvOwogCV9fYmUxNiBvcmlnc3JjX3BvcnQsIG9yaWdkc3RfcG9ydDsKIAlfX2JlMTYgcmVwbHNyY19wb3J0LCByZXBsZHN0X3BvcnQ7Ci0JdV9pbnQxNl90IG1hdGNoX2ZsYWdzLCBpbnZlcnRfZmxhZ3M7Ci0JdV9pbnQ4X3Qgc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CisJX191MTYgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKKwlfX3U4IHN0YXRlX21hc2ssIHN0YXR1c19tYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5UUkFDS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAppbmRleCBlMDIyMWI5Li5hNTc5ZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfRENDUF9IXwogI2RlZmluZSBfWFRfRENDUF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EQ0NQX1NSQ19QT1JUUwkgICAgICAgIDB4MDEKICNkZWZpbmUgWFRfRENDUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgogI2RlZmluZSBYVF9EQ0NQX1RZUEUJCQkweDA0CkBAIC05LDE0ICsxMSwxNCBAQAogI2RlZmluZSBYVF9EQ0NQX1ZBTElEX0ZMQUdTCQkweDBmCiAKIHN0cnVjdCB4dF9kY2NwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGludmZsYWdzOworCV9fdTE2IGZsYWdzOworCV9fdTE2IGludmZsYWdzOwogCi0JdV9pbnQxNl90IHR5cGVtYXNrOwotCXVfaW50OF90IG9wdGlvbjsKKwlfX3UxNiB0eXBlbWFzazsKKwlfX3U4IG9wdGlvbjsKIH07CiAKICNlbmRpZiAvKiBfWFRfRENDUF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCmluZGV4IGY0OWJjMWEuLjE1Zjg5MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKQEAgLTEwLDIwICsxMCwyMiBAQAogI2lmbmRlZiBfWFRfRFNDUF9ICiAjZGVmaW5lIF9YVF9EU0NQX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfRFNDUF9NQVNLCTB4ZmMJLyogMTExMTExMDAgKi8KICNkZWZpbmUgWFRfRFNDUF9TSElGVAkyCiAjZGVmaW5lIFhUX0RTQ1BfTUFYCTB4M2YJLyogMDAxMTExMTEgKi8KIAogLyogbWF0Y2ggaW5mbyAqLwogc3RydWN0IHh0X2RzY3BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCBkc2NwOworCV9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X3Rvc19tYXRjaF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfbWFzazsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTggdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLyogX1hUX0RTQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAppbmRleCA5MzgwZmIxLi5lZjZmYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfRVNQX0gKICNkZWZpbmUgX1hUX0VTUF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfZXNwCiB7Ci0JdV9pbnQzMl90IHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTMyIHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCV9fdTggIGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IHh0X2VzcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKaW5kZXggNTFiMThkOC4uYjE5MjViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9IQVNITElNSVRfSAogI2RlZmluZSBfWFRfSEFTSExJTUlUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KICNkZWZpbmUgWFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKQEAgLTE4LDE1ICsyMCwxNSBAQAogfTsKIAogc3RydWN0IGhhc2hsaW1pdF9jZmcgewotCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiB1c2VyIHNwZWNpZmllZCAqLwotCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLwotCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KLQl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCi0JdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KIH07CiAKIHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyB7CkBAIC00MiwxNyArNDQsMTcgQEAKIH07CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnMSB7Ci0JdV9pbnQzMl90IG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCi0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCisJX191MzIgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwlfX3UzMiBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KIAogCS8qIHVzZXIgc3BlY2lmaWVkICovCi0JdV9pbnQzMl90IHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCi0JdV9pbnQzMl90IG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLwotCXVfaW50MzJfdCBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KLQl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLworCV9fdTMyIHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCisJX191MzIgbWF4OwkJLyogbWF4IG51bWJlciBvZiBlbnRyaWVzICovCisJX191MzIgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCisJX191MzIgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLwogCi0JdV9pbnQ4X3Qgc3JjbWFzaywgZHN0bWFzazsKKwlfX3U4IHNyY21hc2ssIGRzdG1hc2s7CiB9OwogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCmluZGV4IGE0Mjk5YzcuLmMxZjIxYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9ICiAjZGVmaW5lIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUlQUkFOR0VfU1JDICAgICA9IDEgPDwgMCwJLyogbWF0Y2ggc291cmNlIElQIGFkZHJlc3MgKi8KIAlJUFJBTkdFX0RTVCAgICAgPSAxIDw8IDEsCS8qIG1hdGNoIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKi8KQEAgLTExLDcgKzEzLDcgQEAKIHN0cnVjdCB4dF9pcHJhbmdlX210aW5mbyB7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNyY19taW4sIHNyY19tYXg7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGRzdF9taW4sIGRzdF9tYXg7Ci0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAppbmRleCA3YzJiNDM5Li5iODJlZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9YVF9MRU5HVEhfSAogI2RlZmluZSBfWFRfTEVOR1RIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9sZW5ndGhfaW5mbyB7Ci0gICAgdV9pbnQxNl90CW1pbiwgbWF4OwotICAgIHVfaW50OF90CWludmVydDsKKyAgICBfX3UxNgltaW4sIG1heDsKKyAgICBfX3U4CWludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9MRU5HVEhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAppbmRleCBiM2NlNjUzLi5iYjQ3ZmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKQEAgLTEsMjEgKzEsMjQgQEAKICNpZm5kZWYgX1hUX1JBVEVfSAogI2RlZmluZSBfWFRfUkFURV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCiAjZGVmaW5lIFhUX0xJTUlUX1NDQUxFIDEwMDAwCiAKK3N0cnVjdCB4dF9saW1pdF9wcml2OworCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKICAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KIHN0cnVjdCB4dF9yYXRlaW5mbyB7Ci0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQl1X2ludDMyX3QgY3JlZGl0OwotCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCXVuc2lnbmVkIGxvbmcgcHJldjsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdF9jYXAsIGNvc3Q7CiAKLQkvKiBVZ2x5LCB1Z2x5IGZ1Y2tlci4gKi8KLQlzdHJ1Y3QgeHRfcmF0ZWluZm8gKm1hc3RlcjsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqbWFzdGVyOwogfTsKICNlbmRpZiAvKl9YVF9SQVRFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCmluZGV4IGZhZTc0YmMuLjZmYTQ2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKQEAgLTEsMTQgKzEsMTYgQEAKICNpZm5kZWYgX1hUX01BUktfSAogI2RlZmluZSBfWFRfTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfbWFya19pbmZvIHsKICAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7Ci0gICAgdV9pbnQ4X3QgaW52ZXJ0OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X21hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKaW5kZXggZDQ5ZWU0MS4uMTg1ZGI0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9NVUxUSVBPUlRfSAogI2RlZmluZSBfWFRfTVVMVElQT1JUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfbXVsdGlwb3J0X2ZsYWdzCiB7CiAJWFRfTVVMVElQT1JUX1NPVVJDRSwKQEAgLTEzLDE4ICsxNSwxOCBAQAogLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIHh0X21hdGNoaW5mbzogMTYgYnl0ZXMgKi8KIHN0cnVjdCB4dF9tdWx0aXBvcnQKIHsKLQl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCi0JdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLwotCXVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLwogfTsKIAogc3RydWN0IHh0X211bHRpcG9ydF92MQogewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KLQl1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0IGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLworCV9fdTggaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCiB9OwogCiAjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKaW5kZXggYzg0ZTUyYy4uMjA4MTc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfT1dORVJfTUFUQ0hfSAogI2RlZmluZSBfWFRfT1dORVJfTUFUQ0hfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJWFRfT1dORVJfVUlEICAgID0gMSA8PCAwLAogCVhUX09XTkVSX0dJRCAgICA9IDEgPDwgMSwKQEAgLTgsOSArMTAsOSBAQAogfTsKIAogc3RydWN0IHh0X293bmVyX21hdGNoX2luZm8gewotCXVfaW50MzJfdCB1aWRfbWluLCB1aWRfbWF4OwotCXVfaW50MzJfdCBnaWRfbWluLCBnaWRfbWF4OwotCXVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CisJX191MzIgdWlkX21pbiwgdWlkX21heDsKKwlfX3UzMiBnaWRfbWluLCBnaWRfbWF4OworCV9fdTggbWF0Y2gsIGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfT1dORVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCmluZGV4IDI1YTdhMTguLjg1NTVlMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9QSFlTREVWX0gKICNkZWZpbmUgX1hUX1BIWVNERVZfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2VuZGlmCkBAIC0xNyw4ICsxOSw4IEBACiAJY2hhciBpbl9tYXNrW0lGTkFNU0laXTsKIAljaGFyIHBoeXNvdXRkZXZbSUZOQU1TSVpdOwogCWNoYXIgb3V0X21hc2tbSUZOQU1TSVpdOwotCXVfaW50OF90IGludmVydDsKLQl1X2ludDhfdCBiaXRtYXNrOworCV9fdTggaW52ZXJ0OworCV9fdTggYml0bWFzazsKIH07CiAKICNlbmRpZiAvKl9YVF9QSFlTREVWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAppbmRleCAwNTNkOGNjLi43YmI2NGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1BPTElDWV9ICiAjZGVmaW5lIF9YVF9QT0xJQ1lfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9QT0xJQ1lfTUFYX0VMRU0JNAogCiBlbnVtIHh0X3BvbGljeV9mbGFncwpAQCAtMTksNyArMjEsNyBAQAogCiBzdHJ1Y3QgeHRfcG9saWN5X3NwZWMKIHsKLQl1X2ludDhfdAlzYWRkcjoxLAorCV9fdTgJc2FkZHI6MSwKIAkJCWRhZGRyOjEsCiAJCQlwcm90bzoxLAogCQkJbW9kZToxLApAQCAtNTUsOSArNTcsOSBAQAogI2VuZGlmCiAJfTsKIAlfX2JlMzIJCQlzcGk7Ci0JdV9pbnQzMl90CQlyZXFpZDsKLQl1X2ludDhfdAkJcHJvdG87Ci0JdV9pbnQ4X3QJCW1vZGU7CisJX191MzIJCXJlcWlkOworCV9fdTgJCXByb3RvOworCV9fdTgJCW1vZGU7CiAKIAlzdHJ1Y3QgeHRfcG9saWN5X3NwZWMJbWF0Y2g7CiAJc3RydWN0IHh0X3BvbGljeV9zcGVjCWludmVydDsKQEAgLTY2LDggKzY4LDggQEAKIHN0cnVjdCB4dF9wb2xpY3lfaW5mbwogewogCXN0cnVjdCB4dF9wb2xpY3lfZWxlbSBwb2xbWFRfUE9MSUNZX01BWF9FTEVNXTsKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGxlbjsKKwlfX3UxNiBmbGFnczsKKwlfX3UxNiBsZW47CiB9OwogCiAjZW5kaWYgLyogX1hUX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAppbmRleCA0YzgzNjhkLi44ZGM4OWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKQEAgLTYsMTMgKzYsMTUgQEAKIH07CiAjZGVmaW5lIFhUX1FVT1RBX01BU0sJCTB4MQogCitzdHJ1Y3QgeHRfcXVvdGFfcHJpdjsKKwogc3RydWN0IHh0X3F1b3RhX2luZm8gewogCXVfaW50MzJfdAkJZmxhZ3M7CiAJdV9pbnQzMl90CQlwYWQ7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCWFsaWduZWRfdTY0CQlxdW90YTsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbwkqbWFzdGVyOworCXN0cnVjdCB4dF9xdW90YV9wcml2CSptYXN0ZXI7CiB9OwogCiAjZW5kaWYgLyogX1hUX1FVT1RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaAppbmRleCAyMDEwY2I3Li5kNDBhNjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9NQVRDSF9ICiAjZGVmaW5lIF9YVF9SQVRFRVNUX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfcmF0ZWVzdF9tYXRjaF9mbGFncyB7CiAJWFRfUkFURUVTVF9NQVRDSF9JTlZFUlQJPSAxPDwwLAogCVhUX1JBVEVFU1RfTUFUQ0hfQUJTCT0gMTw8MSwKQEAgLTIwLDEyICsyMiwxMiBAQAogc3RydWN0IHh0X3JhdGVlc3RfbWF0Y2hfaW5mbyB7CiAJY2hhcgkJCW5hbWUxW0lGTkFNU0laXTsKIAljaGFyCQkJbmFtZTJbSUZOQU1TSVpdOwotCXVfaW50MTZfdAkJZmxhZ3M7Ci0JdV9pbnQxNl90CQltb2RlOwotCXVfaW50MzJfdAkJYnBzMTsKLQl1X2ludDMyX3QJCXBwczE7Ci0JdV9pbnQzMl90CQlicHMyOwotCXVfaW50MzJfdAkJcHBzMjsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1vZGU7CisJX191MzIJCWJwczE7CisJX191MzIJCXBwczE7CisJX191MzIJCWJwczI7CisJX191MzIJCXBwczI7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCXN0cnVjdCB4dF9yYXRlZXN0CSplc3QxIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCmluZGV4IDIyMGU4NzIuLmQ0YTgyZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkVBTE1fSAogI2RlZmluZSBfWFRfUkVBTE1fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JlYWxtX2luZm8gewotCXVfaW50MzJfdCBpZDsKLQl1X2ludDMyX3QgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgaWQ7CisJX191MzIgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfUkVBTE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAppbmRleCA1Y2ZlYjgxLi5kMmMyNzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSAogI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCVhUX1JFQ0VOVF9DSEVDSyAgICA9IDEgPDwgMCwKIAlYVF9SRUNFTlRfU0VUICAgICAgPSAxIDw8IDEsCkBAIC0xNSwxMiArMTcsMTIgQEAKIH07CiAKIHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvIHsKLQl1X2ludDMyX3Qgc2Vjb25kczsKLQl1X2ludDMyX3QgaGl0X2NvdW50OwotCXVfaW50OF90IGNoZWNrX3NldDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgc2Vjb25kczsKKwlfX3UzMiBoaXRfY291bnQ7CisJX191OCBjaGVja19zZXQ7CisJX191OCBpbnZlcnQ7CiAJY2hhciBuYW1lW1hUX1JFQ0VOVF9OQU1FX0xFTl07Ci0JdV9pbnQ4X3Qgc2lkZTsKKwlfX3U4IHNpZGU7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCmluZGV4IDMyMDAwYmEuLjI5Mjg3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TQ1RQX0hfCiAjZGVmaW5lIF9YVF9TQ1RQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9TQ1RQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX1NDVFBfQ0hVTktfVFlQRVMJCTB4MDQKQEAgLTgsNDkgKzEwLDQ5IEBACiAjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MJCTB4MDcKIAogc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKLQl1X2ludDhfdCBjaHVua3R5cGU7Ci0JdV9pbnQ4X3QgZmxhZzsKLQl1X2ludDhfdCBmbGFnX21hc2s7CisJX191OCBjaHVua3R5cGU7CisJX191OCBmbGFnOworCV9fdTggZmxhZ19tYXNrOwogfTsKIAogI2RlZmluZSBYVF9OVU1fU0NUUF9GTEFHUwk0CiAKIHN0cnVjdCB4dF9zY3RwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLworCV9fdTMyIGNodW5rbWFwWzI1NiAvIHNpemVvZiAoX191MzIpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLwogCiAjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZICAgMHgwMSAgLyogTWF0Y2ggaWYgYW55IG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwogI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAgIDB4MDIgIC8qIE1hdGNoIGlmIGFsbCBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZICAweDA0ICAvKiBNYXRjaCBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgY2h1bmsgdHlwZXMgcHJlc2VudCAqLwogCi0JdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7CisJX191MzIgY2h1bmtfbWF0Y2hfdHlwZTsKIAlzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gZmxhZ19pbmZvW1hUX05VTV9TQ1RQX0ZMQUdTXTsKIAlpbnQgZmxhZ19jb3VudDsKIAotCXVfaW50MzJfdCBmbGFnczsKLQl1X2ludDMyX3QgaW52ZmxhZ3M7CisJX191MzIgZmxhZ3M7CisJX191MzIgaW52ZmxhZ3M7CiB9OwogCiAjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAJCVwKIAlkbyB7IAkJCQkJCVwKLQkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKLQkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildIHw9IAlcCisJCQkxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKTsJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAogCWRvIHsJCQkJCQkJXAotCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSAmPSAJCVwKLQkJCX4oMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildICY9IAkJXAorCQkJfigxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKSk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAJCQlcCiAoewkJCQkJCQkJXAotCSgoY2h1bmttYXApW3R5cGUgLyBieXRlcyAodV9pbnQzMl90KV0gJiAJCVwKLQkJKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7CVwKKwkoKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMgKF9fdTMyKV0gJiAJCVwKKwkJKDEgPDwgKHR5cGUgJSBieXRlcyAoX191MzIpKSkpID8gMTogMDsJXAogfSkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSBcCkBAIC02NSw3ICs2Nyw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIFwKIAlfX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCiBzdGF0aWMgaW5saW5lIGJvb2wKLV9fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCBfX3UzMiAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCkBAIC03Nyw3ICs3OSw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgXAogCV9fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQogc3RhdGljIGlubGluZSBib29sCi1fX3NjdHBfY2h1bmttYXBfaXNfYWxsX3NldChjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KGNvbnN0IF9fdTMyICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG47ICsraSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKaW5kZXggM2QzOGJjOS4uNGU5ODNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TVEFUSVNUSUNfSAogI2RlZmluZSBfWFRfU1RBVElTVElDX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfc3RhdGlzdGljX21vZGUgewogCVhUX1NUQVRJU1RJQ19NT0RFX1JBTkRPTSwKIAlYVF9TVEFUSVNUSUNfTU9ERV9OVEgsCkBAIC0xMywyMSArMTUsMjIgQEAKIH07CiAjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLCQkweDEKIAorc3RydWN0IHh0X3N0YXRpc3RpY19wcml2OworCiBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gewotCXVfaW50MTZfdAkJCW1vZGU7Ci0JdV9pbnQxNl90CQkJZmxhZ3M7CisJX191MTYJCQltb2RlOworCV9fdTE2CQkJZmxhZ3M7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CXByb2JhYmlsaXR5OworCQkJX191MzIJcHJvYmFiaWxpdHk7CiAJCX0gcmFuZG9tOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CWV2ZXJ5OwotCQkJdV9pbnQzMl90CXBhY2tldDsKLQkJCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCi0JCQl1X2ludDMyX3QJY291bnQ7CisJCQlfX3UzMglldmVyeTsKKwkJCV9fdTMyCXBhY2tldDsKKwkJCV9fdTMyCWNvdW50OyAvKiB1bnVzZWQgKi8KIAkJfSBudGg7CiAJfSB1OwotCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbwkqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwlzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiB9OwogCiAjZW5kaWYgLyogX1hUX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCmluZGV4IDhhNmJhN2IuLmVjYmI5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU1RSSU5HX0gKICNkZWZpbmUgX1hUX1NUUklOR19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIDEyOAogI2RlZmluZSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIDE2CiAKQEAgLTExLDE4ICsxMywxOCBAQAogCiBzdHJ1Y3QgeHRfc3RyaW5nX2luZm8KIHsKLQl1X2ludDE2X3QgZnJvbV9vZmZzZXQ7Ci0JdV9pbnQxNl90IHRvX29mZnNldDsKKwlfX3UxNiBmcm9tX29mZnNldDsKKwlfX3UxNiB0b19vZmZzZXQ7CiAJY2hhcgkgIGFsZ29bWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRV07CiAJY2hhciAJICBwYXR0ZXJuW1hUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFXTsKLQl1X2ludDhfdCAgcGF0bGVuOworCV9fdTggIHBhdGxlbjsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgaW52ZXJ0OworCQkJX191OCAgaW52ZXJ0OwogCQl9IHYwOwogCiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgZmxhZ3M7CisJCQlfX3U4ICBmbGFnczsKIAkJfSB2MTsKIAl9IHU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKaW5kZXggZTAzMjc0Yy4uZmJhYzU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfWFRfVENQTVNTX01BVENIX0gKICNkZWZpbmUgX1hUX1RDUE1TU19NQVRDSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8gewotICAgIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OwotICAgIHVfaW50OF90IGludmVydDsKKyAgICBfX3UxNiBtc3NfbWluLCBtc3NfbWF4OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qX1hUX1RDUE1TU19NQVRDSF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKaW5kZXggNzhiYzY1Zi4uYTQ5MGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKQEAgLTEsMTUgKzEsMTcgQEAKICNpZm5kZWYgX1hUX1RDUFVEUF9ICiAjZGVmaW5lIF9YVF9UQ1BVRFBfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVENQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdGNwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLwotCXVfaW50OF90IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KLQl1X2ludDhfdCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCV9fdTggZmxnX21hc2s7CQkJLyogVENQIGZsYWdzIG1hc2sgYnl0ZSAqLworCV9fdTggZmxnX2NtcDsJCQkvKiBUQ1AgZmxhZ3MgY29tcGFyZSBieXRlICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLwpAQCAtMjIsOSArMjQsOSBAQAogLyogVURQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdWRwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwdF91ZHAuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IDQ5OWFhOTMuLmY4MTA1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC01OSw5ICs1OSw5IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuZl9icmlkZ2VfZW5jYXBfaGVhZGVyX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QXzgwMjFRKToKIAkJcmV0dXJuIFZMQU5fSExFTjsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOgogCQlyZXR1cm4gUFBQT0VfU0VTX0hMRU47CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAppbmRleCA5MmY0YmRhLi5hNzg0NDViZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCkBAIC05LDEwICs5LDEwIEBACiAjZGVmaW5lIElQVF9PV05FUl9DT01NCTB4MTAKIAogc3RydWN0IGlwdF9vd25lcl9pbmZvIHsKLSAgICB1aWRfdCB1aWQ7Ci0gICAgZ2lkX3QgZ2lkOwotICAgIHBpZF90IHBpZDsKLSAgICBwaWRfdCBzaWQ7CisgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CisgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CisgICAgX19rZXJuZWxfcGlkX3QgcGlkOworICAgIF9fa2VybmVsX3BpZF90IHNpZDsKICAgICBjaGFyIGNvbW1bMTZdOwogICAgIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CS8qIGZsYWdzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAppbmRleCA4ODg3YTVmLi5hY2E0YmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZApAQCAtMTEsNiArMTEsNyBAQAogaGVhZGVyLXkgKz0gaXA2dF9saW1pdC5oCiBoZWFkZXIteSArPSBpcDZ0X21hYy5oCiBoZWFkZXIteSArPSBpcDZ0X21hcmsuaAoraGVhZGVyLXkgKz0gaXA2dF9taC5oCiBoZWFkZXIteSArPSBpcDZ0X211bHRpcG9ydC5oCiBoZWFkZXIteSArPSBpcDZ0X29wdHMuaAogaGVhZGVyLXkgKz0gaXA2dF9vd25lci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmluZGV4IDE5OTM3ZGEuLmVjNWNjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCkBAIC04LDEwICs4LDEwIEBACiAjZGVmaW5lIElQNlRfT1dORVJfU0lECTB4MDgKIAogc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7Ci0gICAgdWlkX3QgdWlkOwotICAgIGdpZF90IGdpZDsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgcGlkX3Qgc2lkOworICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOworICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworICAgIF9fa2VybmVsX3BpZF90IHBpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBzaWQ7CiAgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggNTFiMDlhMS4uNWJhMzk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTEwMyw2ICsxMDMsOCBAQAogI2RlZmluZSBORVRMSU5LX0FERF9NRU1CRVJTSElQCTEKICNkZWZpbmUgTkVUTElOS19EUk9QX01FTUJFUlNISVAJMgogI2RlZmluZSBORVRMSU5LX1BLVElORk8JCTMKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfRVJST1IJNAorI2RlZmluZSBORVRMSU5LX05PX0VOT0JVRlMJNQogCiBzdHJ1Y3QgbmxfcGt0aW5mbwogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCBlMzhkM2M5Li5kZTk5MDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtNjMsNiArNjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKKworCXJldHVybiBucGluZm8gJiYgKG5waW5mby0+cnhfbnAgfHwgbnBpbmZvLT5yeF9mbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoIWxpc3RfZW1wdHkoJnNrYi0+ZGV2LT5uYXBpX2xpc3QpKQpAQCAtOTksNiArMTA2LDEwIEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCmluZGV4IGU4NmVkNTkuLmYzM2FhMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAgKiBATkw4MDIxMV9DTURfU0VUX1dJUEhZOiBzZXQgd2lwaHkgcGFyYW1ldGVycywgbmVlZHMgJU5MODAyMTFfQVRUUl9XSVBIWSBvcgogICoJJU5MODAyMTFfQVRUUl9JRklOREVYOyBjYW4gYmUgdXNlZCB0byBzZXQgJU5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLAogICoJJU5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TLCAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsIGFuZC9vcgotICoJJU5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQuCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRS4KICAqIEBOTDgwMjExX0NNRF9ORVdfV0lQSFk6IE5ld2x5IGNyZWF0ZWQgd2lwaHksIHJlc3BvbnNlIHRvIGdldCByZXF1ZXN0CiAgKglvciByZW5hbWUgbm90aWZpY2F0aW9uLiBIYXMgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX1dJUEhZIGFuZAogICoJJU5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLgpAQCAtNzIsOCArNzIsOCBAQAogICoKICAqIEBOTDgwMjExX0NNRF9HRVRfS0VZOiBHZXQgc2VxdWVuY2UgY291bnRlciBpbmZvcm1hdGlvbiBmb3IgYSBrZXkgc3BlY2lmaWVkCiAgKglieSAlTkw4MDIxMV9BVFRSX0tFWV9JRFggYW5kL29yICVOTDgwMjExX0FUVFJfTUFDLgotICogQE5MODAyMTFfQ01EX1NFVF9LRVk6IFNldCBrZXkgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUIG9yCi0gKgklTkw4MDIxMV9BVFRSX0tFWV9USFJFU0hPTEQuCisgKiBATkw4MDIxMV9DTURfU0VUX0tFWTogU2V0IGtleSBhdHRyaWJ1dGVzICVOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFQsCisgKgklTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVQsIG9yICVOTDgwMjExX0FUVFJfS0VZX1RIUkVTSE9MRC4KICAqIEBOTDgwMjExX0NNRF9ORVdfS0VZOiBhZGQgYSBrZXkgd2l0aCBnaXZlbiAlTkw4MDIxMV9BVFRSX0tFWV9EQVRBLAogICoJJU5MODAyMTFfQVRUUl9LRVlfSURYLCAlTkw4MDIxMV9BVFRSX01BQyBhbmQgJU5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSCiAgKglhdHRyaWJ1dGVzLgpAQCAtODQsNyArODQsNyBAQAogICoJJU5MODAyMjJfQ01EX05FV19CRUFDT04gbWVzc2FnZSkKICAqIEBOTDgwMjExX0NNRF9TRVRfQkVBQ09OOiBzZXQgdGhlIGJlYWNvbiBvbiBhbiBhY2Nlc3MgcG9pbnQgaW50ZXJmYWNlCiAgKgl1c2luZyB0aGUgJU5MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUwsICVOTDgwMjExX0FUVFJfRFRJTV9QRVJJT0QsCi0gKgklTkw4MDIxMV9CRUFDT05fSEVBRCBhbmQgJU5MODAyMTFfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KKyAqCSVOTDgwMjExX0FUVFJfQkVBQ09OX0hFQUQgYW5kICVOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KICAqIEBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOiBhZGQgYSBuZXcgYmVhY29uIHRvIGFuIGFjY2VzcyBwb2ludCBpbnRlcmZhY2UsCiAgKglwYXJhbWV0ZXJzIGFyZSBsaWtlIGZvciAlTkw4MDIxMV9DTURfU0VUX0JFQUNPTi4KICAqIEBOTDgwMjExX0NNRF9ERUxfQkVBQ09OOiByZW1vdmUgdGhlIGJlYWNvbiwgc3RvcCBzZW5kaW5nIGl0CkBAIC0xMTMsNiArMTEzLDggQEAKICAqIEBOTDgwMjExX0NNRF9TRVRfQlNTOiBTZXQgQlNTIGF0dHJpYnV0ZXMgZm9yIEJTUyBpZGVudGlmaWVkIGJ5CiAgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVguCiAgKgorICogQE5MODAyMTFfQ01EX0dFVF9SRUc6IGFzayB0aGUgd2lyZWxlc3MgY29yZSB0byBzZW5kIHVzIGl0cyBjdXJyZW50bHkgc2V0CisgKiAJcmVndWxhdG9yeSBkb21haW4uCiAgKiBATkw4MDIxMV9DTURfU0VUX1JFRzogU2V0IGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENSREEgc2VuZHMgdGhpcyBjb21tYW5kCiAgKglhZnRlciBiZWluZyBxdWVyaWVkIGJ5IHRoZSBrZXJuZWwuIENSREEgcmVwbGllcyBieSBzZW5kaW5nIGEgcmVndWxhdG9yeQogICoJZG9tYWluIHN0cnVjdHVyZSB3aGljaCBjb25zaXN0cyBvZiAlTkw4MDIxMV9BVFRSX1JFR19BTFBIQSBzZXQgdG8gb3VyCkBAIC0xMzMsNiArMTM1LDMyIEBACiAgKiBATkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TOiBTZXQgbWVzaCBuZXR3b3JraW5nIHByb3BlcnRpZXMgZm9yIHRoZQogICogICAgICBpbnRlcmZhY2UgaWRlbnRpZmllZCBieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVgKICAqCisgKiBATkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUU6IFNldCBleHRyYSBJRXMgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLiBUaGUKKyAqCWludGVyZmFjZSBpcyBpZGVudGlmaWVkIHdpdGggJU5MODAyMTFfQVRUUl9JRklOREVYIGFuZCB0aGUgbWFuYWdlbWVudAorICoJZnJhbWUgc3VidHlwZSB3aXRoICVOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFLiBUaGUgZXh0cmEgSUUgZGF0YSB0byBiZQorICoJYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIG1hbmFnZW1lbnQgZnJhbWUgaXMgc3BlY2lmaWVkIHdpdGgKKyAqCSVOTDgwMjExX0FUVFJfSUUuIElmIHRoZSBjb21tYW5kIHN1Y2NlZWRzLCB0aGUgcmVxdWVzdGVkIGRhdGEgd2lsbCBiZQorICoJYWRkZWQgdG8gYWxsIHNwZWNpZmllZCBtYW5hZ2VtZW50IGZyYW1lcyBnZW5lcmF0ZWQgYnkKKyAqCWtlcm5lbC9maXJtd2FyZS9kcml2ZXIuCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9TQ0FOOiBnZXQgc2NhbiByZXN1bHRzCisgKiBATkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOOiB0cmlnZ2VyIGEgbmV3IHNjYW4gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycworICogQE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFM6IHNjYW4gbm90aWZpY2F0aW9uIChhcyBhIHJlcGx5IHRvCisgKglOTDgwMjExX0NNRF9HRVRfU0NBTiBhbmQgb24gdGhlICJzY2FuIiBtdWx0aWNhc3QgZ3JvdXApCisgKiBATkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEOiBzY2FuIHdhcyBhYm9ydGVkLCBmb3IgdW5zcGVjaWZpZWQgcmVhc29ucywKKyAqCXBhcnRpYWwgc2NhbiByZXN1bHRzIG1heSBiZSBhdmFpbGFibGUKKyAqCisgKiBATkw4MDIxMV9DTURfUkVHX0NIQU5HRTogaW5kaWNhdGVzIHRvIHVzZXJzcGFjZSB0aGUgcmVndWxhdG9yeSBkb21haW4KKyAqIAloYXMgYmVlbiBjaGFuZ2VkIGFuZCBwcm92aWRlcyBkZXRhaWxzIG9mIHRoZSByZXF1ZXN0IGluZm9ybWF0aW9uCisgKiAJdGhhdCBjYXVzZWQgdGhlIGNoYW5nZSBzdWNoIGFzIHdobyBpbml0aWF0ZWQgdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdAorICogCSglTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IpLCB0aGUgd2lwaHlfaWR4CisgKiAJKCVOTDgwMjExX0FUVFJfUkVHX0FMUEhBMikgb24gd2hpY2ggdGhlIHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBpZgorICogCXRoZSBpbml0aWF0b3Igd2FzICVOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSBvcgorICogCSVOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSLCB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbgorICogCXNldCAoJU5MODAyMTFfQVRUUl9SRUdfVFlQRSksIGlmIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluIGlzCisgKiAJJU5MODAyMTFfUkVHX1RZUEVfQ09VTlRSWSB0aGUgYWxwaGEyIHRvIHdoaWNoIHdlIGhhdmUgbW92ZWQgb24KKyAqIAl0byAoJU5MODAyMTFfQVRUUl9SRUdfQUxQSEEyKS4KKyAqCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0xNzgsNiArMjA2LDE3IEBACiAJTkw4MDIxMV9DTURfR0VUX01FU0hfUEFSQU1TLAogCU5MODAyMTFfQ01EX1NFVF9NRVNIX1BBUkFNUywKIAorCU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFLAorCisJTkw4MDIxMV9DTURfR0VUX1JFRywKKworCU5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCU5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTiwKKwlOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTLAorCU5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCwKKworCU5MODAyMTFfQ01EX1JFR19DSEFOR0UsCisKIAkvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi8KIAogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwpAQCAtMTkwLDYgKzIyOSw5IEBACiAgKiBoZXJlCiAgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX0JTUyBOTDgwMjExX0NNRF9TRVRfQlNTCisjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFCisKKyNkZWZpbmUgTkw4MDIxMV9DTURfUkVHX0NIQU5HRSBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFCiAKIC8qKgogICogZW51bSBubDgwMjExX2F0dHJzIC0gbmw4MDIxMSBuZXRsaW5rIGF0dHJpYnV0ZXMKQEAgLTI4NCw2ICszMjYsMjkgQEAKICAqCXN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZXMsIGVhY2ggYSBmbGFnIGF0dHJpYnV0ZSB3aXRoIHRoZSBudW1iZXIKICAqCW9mIHRoZSBpbnRlcmZhY2UgbW9kZS4KICAqCisgKiBATkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRTogTWFuYWdlbWVudCBmcmFtZSBzdWJ0eXBlIGZvcgorICoJJU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFLgorICoKKyAqIEBOTDgwMjExX0FUVFJfSUU6IEluZm9ybWF0aW9uIGVsZW1lbnQocykgZGF0YSAodXNlZCwgZS5nLiwgd2l0aAorICoJJU5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFKS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUzogbnVtYmVyIG9mIFNTSURzIHlvdSBjYW4gc2NhbiB3aXRoCisgKglhIHNpbmdsZSBzY2FuIHJlcXVlc3QsIGEgd2lwaHkgYXR0cmlidXRlLgorICoKKyAqIEBOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUzogbmVzdGVkIGF0dHJpYnV0ZSB3aXRoIGZyZXF1ZW5jaWVzIChpbiBNSHopCisgKiBATkw4MDIxMV9BVFRSX1NDQU5fU1NJRFM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBTU0lEcywgbGVhdmUgb3V0IGZvciBwYXNzaXZlCisgKglzY2FubmluZyBhbmQgaW5jbHVkZSBhIHplcm8tbGVuZ3RoIFNTSUQgKHdpbGRjYXJkKSBmb3Igd2lsZGNhcmQgc2NhbgorICogQE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT046IHRoZSBzY2FuIGdlbmVyYXRpb24gaW5jcmVhc2VzIHdoZW5ldmVyIHRoZQorICoJc2NhbiByZXN1bHQgbGlzdCBjaGFuZ2VzIChCU1MgZXhwaXJlZCBvciBhZGRlZCkgc28gdGhhdCBhcHBsaWNhdGlvbnMKKyAqCWNhbiB2ZXJpZnkgdGhhdCB0aGV5IGdvdCBhIHNpbmdsZSwgY29uc2lzdGVudCBzbmFwc2hvdCAod2hlbiBhbGwgZHVtcAorICoJbWVzc2FnZXMgY2FycmllZCB0aGUgc2FtZSBnZW5lcmF0aW9uIG51bWJlcikKKyAqIEBOTDgwMjExX0FUVFJfQlNTOiBzY2FuIHJlc3VsdCBCU1MKKyAqCisgKiBATkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1I6IGluZGljYXRlcyB3aG8gcmVxdWVzdGVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgorICogCWN1cnJlbnRseSBpbiBlZmZlY3QuIFRoaXMgY291bGQgYmUgYW55IG9mIHRoZSAlTkw4MDIxMV9SRUdET01fU0VUX0JZXyoKKyAqIEBOTDgwMjExX0FUVFJfUkVHX1RZUEU6IGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgcmVndWxhdG9yeSBkb21haW4gY3VycmVudGx5CisgKiAJc2V0LiBUaGlzIGNhbiBiZSBvbmUgb2YgdGhlIG5sODAyMTFfcmVnX3R5cGUgKCVOTDgwMjExX1JFR0RPTV9UWVBFXyopCisgKgogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0zNDYsNiArNDExLDIxIEBACiAJTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsCiAJTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSwKIAorCU5MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01ULAorCisJTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSwKKwlOTDgwMjExX0FUVFJfSUUsCisKKwlOTDgwMjExX0FUVFJfTUFYX05VTV9TQ0FOX1NTSURTLAorCisJTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVMsCisJTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFMsCisJTkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTiwKKwlOTDgwMjExX0FUVFJfQlNTLAorCisJTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsCisJTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCiAJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCiAKIAlfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULApAQCAtMzYwLDcgKzQ0MCwxMSBAQAogI2RlZmluZSBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEKLSNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX1NFQ19DSEFOX09GRlNFVCBOTDgwMjExX0FUVFJfV0lQSFlfU0VDX0NIQU5fT0ZGU0VUCisjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUgTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRQorI2RlZmluZSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFIE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0lFIE5MODAyMTFfQVRUUl9JRQorI2RlZmluZSBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUgorI2RlZmluZSBOTDgwMjExX0FUVFJfUkVHX1RZUEUgTkw4MDIxMV9BVFRSX1JFR19UWVBFCiAKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUwkJCTMyCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTCQkzMgpAQCAtNDEyLDEyICs0OTYsMTQgQEAKICAqIEBOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFOiBzdGF0aW9uIGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcwogICoJd2l0aCBzaG9ydCBiYXJrZXIgcHJlYW1ibGUKICAqIEBOTDgwMjExX1NUQV9GTEFHX1dNRTogc3RhdGlvbiBpcyBXTUUvUW9TIGNhcGFibGUKKyAqIEBOTDgwMjExX1NUQV9GTEFHX01GUDogc3RhdGlvbiB1c2VzIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbgogICovCiBlbnVtIG5sODAyMTFfc3RhX2ZsYWdzIHsKIAlfX05MODAyMTFfU1RBX0ZMQUdfSU5WQUxJRCwKIAlOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQsCiAJTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKIAlOTDgwMjExX1NUQV9GTEFHX1dNRSwKKwlOTDgwMjExX1NUQV9GTEFHX01GUCwKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNULApAQCAtNDY1LDYgKzU1MSw5IEBACiAgKiBATkw4MDIxMV9TVEFfSU5GT19TSUdOQUw6IHNpZ25hbCBzdHJlbmd0aCBvZiBsYXN0IHJlY2VpdmVkIFBQRFUgKHU4LCBkQm0pCiAgKiBATkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFOiBjdXJyZW50IHVuaWNhc3QgdHggcmF0ZSwgbmVzdGVkIGF0dHJpYnV0ZQogICogCWNvbnRhaW5pbmcgaW5mbyBhcyBwb3NzaWJsZSwgc2VlICZlbnVtIG5sODAyMTFfc3RhX2luZm9fdHhyYXRlLgorICogQE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUzogdG90YWwgcmVjZWl2ZWQgcGFja2V0ICh1MzIsIGZyb20gdGhpcyBzdGF0aW9uKQorICogQE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUzogdG90YWwgdHJhbnNtaXR0ZWQgcGFja2V0cyAodTMyLCB0byB0aGlzCisgKglzdGF0aW9uKQogICovCiBlbnVtIG5sODAyMTFfc3RhX2luZm8gewogCV9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElELApAQCAtNDc2LDYgKzU2NSw4IEBACiAJTkw4MDIxMV9TVEFfSU5GT19QTElOS19TVEFURSwKIAlOTDgwMjExX1NUQV9JTkZPX1NJR05BTCwKIAlOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUsCisJTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTLAorCU5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUywKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNULApAQCAtNjA3LDYgKzY5OCw0OCBAQAogfTsKIAogLyoqCisgKiBlbnVtIG5sODAyMTFfaW5pdGlhdG9yIC0gSW5kaWNhdGVzIHRoZSBpbml0aWF0b3Igb2YgYSByZWcgZG9tYWluIHJlcXVlc3QKKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRTogQ29yZSBxdWVyaWVkIENSREEgZm9yIGEgZHluYW1pYyB3b3JsZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLgorICogQE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOiBVc2VyIGFza2VkIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNldCB0aGUKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOiBhIHdpcmVsZXNzIGRyaXZlcnMgaGFzIGhpbnRlZCB0byB0aGUKKyAqIAl3aXJlbGVzcyBjb3JlIGl0IHRoaW5rcyBpdHMga25vd3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHdlIHNob3VsZCBiZSBpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRTogdGhlIHdpcmVsZXNzIGNvcmUgaGFzIHJlY2VpdmVkIGFuCisgKiAJODAyLjExIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudCB3aXRoIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gaXQKKyAqIAl0aGlua3Mgd2Ugc2hvdWxkIGNvbnNpZGVyLgorICovCitlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciB7CisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiwKKwlOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKK307CisKKy8qKgorICogZW51bSBubDgwMjExX3JlZ190eXBlIC0gc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZOiB0aGUgcmVndWxhdG9yeSBkb21haW4gc2V0IGlzIG9uZSB0aGF0IHBlcnRhaW5zCisgKgl0byBhIHNwZWNpZmljIGNvdW50cnkuIFdoZW4gdGhpcyBpcyBzZXQgeW91IGNhbiBjb3VudCBvbiB0aGUKKyAqCUlTTyAvIElFQyAzMTY2IGFscGhhMiBjb3VudHJ5IGNvZGUgYmVpbmcgdmFsaWQuCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRDogdGhlIHJlZ3VsYXRvcnkgc2V0IGRvbWFpbiBpcyB0aGUgd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9UWVBFX0NVU1RPTV9XT1JMRDogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyBhIGN1c3RvbQorICogCWRyaXZlciBzcGVjaWZpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbi4gVGhlc2UgZG8gbm90IGFwcGx5IHN5c3RlbS13aWRlCisgKiAJYW5kIGFyZSBvbmx5IGFwcGxpY2FibGUgdG8gdGhlIGluZGl2aWR1YWwgZGV2aWNlcyB3aGljaCBoYXZlIHJlcXVlc3RlZAorICogCXRoZW0gdG8gYmUgYXBwbGllZC4KKyAqIEBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTjogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyB0aGUgcHJvZHVjdAorICoJb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucyAtLSB0aGUgcHJldmlvdXNseQorICoJc2V0IHJlZ3VsYXRvcnkgZG9tYWluIG9uIHRoZSBzeXN0ZW0gYW5kIHRoZSBsYXN0IGFjY2VwdGVkIHJlZ3VsYXRvcnkKKyAqCWRvbWFpbiByZXF1ZXN0IHRvIGJlIHByb2Nlc3NlZC4KKyAqLworZW51bSBubDgwMjExX3JlZ190eXBlIHsKKwlOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlksCisJTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCwKKwlOTDgwMjExX1JFR0RPTV9UWVBFX0NVU1RPTV9XT1JMRCwKKwlOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTiwKK307CisKKy8qKgogICogZW51bSBubDgwMjExX3JlZ19ydWxlX2F0dHIgLSByZWd1bGF0b3J5IHJ1bGUgYXR0cmlidXRlcwogICogQE5MODAyMTFfQVRUUl9SRUdfUlVMRV9GTEFHUzogYSBzZXQgb2YgZmxhZ3Mgd2hpY2ggc3BlY2lmeSBhZGRpdGlvbmFsCiAgKiAJY29uc2lkZXJhdGlvbnMgZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IHJhbmdlLiBUaGVzZSBhcmUgdGhlCkBAIC04MTEsNCArOTQ0LDM4IEBACiAJTkw4MDIxMV9DSEFOX0hUNDBNSU5VUywKIAlOTDgwMjExX0NIQU5fSFQ0MFBMVVMKIH07CisKKy8qKgorICogZW51bSBubDgwMjExX2JzcyAtIG5ldGxpbmsgYXR0cmlidXRlcyBmb3IgYSBCU1MKKyAqCisgKiBAX19OTDgwMjExX0JTU19JTlZBTElEOiBpbnZhbGlkCisgKiBATkw4MDIxMV9CU1NfRlJFUVVFTkNZOiBmcmVxdWVuY3kgaW4gTUh6ICh1MzIpCisgKiBATkw4MDIxMV9CU1NfVFNGOiBUU0Ygb2YgdGhlIHJlY2VpdmVkIHByb2JlIHJlc3BvbnNlL2JlYWNvbiAodTY0KQorICogQE5MODAyMTFfQlNTX0JFQUNPTl9JTlRFUlZBTDogYmVhY29uIGludGVydmFsIG9mIHRoZSAoSSlCU1MgKHUxNikKKyAqIEBOTDgwMjExX0JTU19DQVBBQklMSVRZOiBjYXBhYmlsaXR5IGZpZWxkIChDUFUgb3JkZXIsIHUxNikKKyAqIEBOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUzogYmluYXJ5IGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZQorICoJcmF3IGluZm9ybWF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbiAoYmluKQorICogQE5MODAyMTFfQlNTX1NJR05BTF9NQk06IHNpZ25hbCBzdHJlbmd0aCBvZiBwcm9iZSByZXNwb25zZS9iZWFjb24KKyAqCWluIG1CbSAoMTAwICogZEJtKSAoczMyKQorICogQE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUM6IHNpZ25hbCBzdHJlbmd0aCBvZiB0aGUgcHJvYmUgcmVzcG9uc2UvYmVhY29uCisgKglpbiB1bnNwZWNpZmllZCB1bml0cywgc2NhbGVkIHRvIDAuLjEwMCAodTgpCisgKiBAX19OTDgwMjExX0JTU19BRlRFUl9MQVNUOiBpbnRlcm5hbAorICogQE5MODAyMTFfQlNTX01BWDogaGlnaGVzdCBCU1MgYXR0cmlidXRlCisgKi8KK2VudW0gbmw4MDIxMV9ic3MgeworCV9fTkw4MDIxMV9CU1NfSU5WQUxJRCwKKwlOTDgwMjExX0JTU19CU1NJRCwKKwlOTDgwMjExX0JTU19GUkVRVUVOQ1ksCisJTkw4MDIxMV9CU1NfVFNGLAorCU5MODAyMTFfQlNTX0JFQUNPTl9JTlRFUlZBTCwKKwlOTDgwMjExX0JTU19DQVBBQklMSVRZLAorCU5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTLAorCU5MODAyMTFfQlNTX1NJR05BTF9NQk0sCisJTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQywKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCwKKwlOTDgwMjExX0JTU19NQVggPSBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QgLSAxCit9OworCiAjZW5kaWYgLyogX19MSU5VWF9OTDgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnVidXMuaCBiL2luY2x1ZGUvbGludXgvbnVidXMuaAppbmRleCA3MzgyYWYzLi5lMTM3YjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L251YnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9udWJ1cy5oCkBAIC0yMzcsNiArMjM3LDcgQEAKIAlpbnQgbWFzazsKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgbnVidXNfYm9hcmQgewogCXN0cnVjdCBudWJ1c19ib2FyZCogbmV4dDsKIAlzdHJ1Y3QgbnVidXNfZGV2KiBmaXJzdF9kZXY7CkBAIC0zNTEsNiArMzUyLDcgQEAKIHZvaWQgbnVidXNfZ2V0X3JzcmNfc3RyKHZvaWQqIGRlc3QsCiAJCQljb25zdCBzdHJ1Y3QgbnVidXNfZGlyZW50ICpkaXJlbnQsCiAJCQlpbnQgbWF4bGVuKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIFdlJ2QgbGlrZSB0byBnZXQgcmlkIG9mIHRoaXMgZXZlbnR1YWxseS4gIE9ubHkgZGF5bmFwb3J0LmMgdXNlcyBpdCBub3cuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKm51YnVzX3Nsb3RfYWRkcihpbnQgc2xvdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggYWNhOGM0NS4uMDk3ZjQxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTgzNCw2ICs4MzQsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzYJMHg1Mjc1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NwkweDcyNzUKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZPWENPTk4JCTB4MTA1YgorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU1DCQkweDEwNjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04NjczRgkweDAxMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04ODg2QkYJMHg2NzNhCkBAIC0xOTcxLDYgKzE5NzMsOCBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FNU1VORwkJMHgxNDRkCiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUJJVAkJMHgxNDY4CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWVJJQ09NCQkweDE0YzEKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJVEFOCQkweDE0RDIKQEAgLTIxMTIsNiArMjExNiw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUlfT0xEIDB4NWU4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJCTB4NjI3NAogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfREZJCQkweDE1YmQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1FVSUNLTkVUCQkweDE1ZTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUlDS05FVF9YSgkweDA1MDAKIApAQCAtMjIxNSw2ICsyMjIxLDggQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RPUFNQSU4JCTB4MTg2NwogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lMQU4JCTB4MTkwNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVERJICAgICAgICAgICAgICAgMHgxOTJFCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKaW5kZXggMDFiMjYyOS4uMjI4YjBiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTEyLDE4NyArMTIsMTg3IEBACiAjZGVmaW5lIFBGS0VZVjJfUkVWSVNJT04JMTk5ODA2TAogCiBzdHJ1Y3Qgc2FkYl9tc2cgewotCXVpbnQ4X3QJCXNhZGJfbXNnX3ZlcnNpb247Ci0JdWludDhfdAkJc2FkYl9tc2dfdHlwZTsKLQl1aW50OF90CQlzYWRiX21zZ19lcnJubzsKLQl1aW50OF90CQlzYWRiX21zZ19zYXR5cGU7Ci0JdWludDE2X3QJc2FkYl9tc2dfbGVuOwotCXVpbnQxNl90CXNhZGJfbXNnX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfbXNnX3NlcTsKLQl1aW50MzJfdAlzYWRiX21zZ19waWQ7CisJX191OAkJc2FkYl9tc2dfdmVyc2lvbjsKKwlfX3U4CQlzYWRiX21zZ190eXBlOworCV9fdTgJCXNhZGJfbXNnX2Vycm5vOworCV9fdTgJCXNhZGJfbXNnX3NhdHlwZTsKKwlfX3UxNglzYWRiX21zZ19sZW47CisJX191MTYJc2FkYl9tc2dfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl9tc2dfc2VxOworCV9fdTMyCXNhZGJfbXNnX3BpZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9leHQgewotCXVpbnQxNl90CXNhZGJfZXh0X2xlbjsKLQl1aW50MTZfdAlzYWRiX2V4dF90eXBlOworCV9fdTE2CXNhZGJfZXh0X2xlbjsKKwlfX3UxNglzYWRiX2V4dF90eXBlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9leHQpID09IDQgKi8KIAogc3RydWN0IHNhZGJfc2EgewotCXVpbnQxNl90CXNhZGJfc2FfbGVuOwotCXVpbnQxNl90CXNhZGJfc2FfZXh0dHlwZTsKKwlfX3UxNglzYWRiX3NhX2xlbjsKKwlfX3UxNglzYWRiX3NhX2V4dHR5cGU7CiAJX19iZTMyCQlzYWRiX3NhX3NwaTsKLQl1aW50OF90CQlzYWRiX3NhX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3NhX3N0YXRlOwotCXVpbnQ4X3QJCXNhZGJfc2FfYXV0aDsKLQl1aW50OF90CQlzYWRiX3NhX2VuY3J5cHQ7Ci0JdWludDMyX3QJc2FkYl9zYV9mbGFnczsKKwlfX3U4CQlzYWRiX3NhX3JlcGxheTsKKwlfX3U4CQlzYWRiX3NhX3N0YXRlOworCV9fdTgJCXNhZGJfc2FfYXV0aDsKKwlfX3U4CQlzYWRiX3NhX2VuY3J5cHQ7CisJX191MzIJc2FkYl9zYV9mbGFnczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2EpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX2xpZmV0aW1lIHsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2xlbjsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9saWZldGltZV9hbGxvY2F0aW9uczsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfbGlmZXRpbWVfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX3VzZXRpbWU7CisJX191MTYJc2FkYl9saWZldGltZV9sZW47CisJX191MTYJc2FkYl9saWZldGltZV9leHR0eXBlOworCV9fdTMyCXNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7CisJX191NjQJc2FkYl9saWZldGltZV9ieXRlczsKKwlfX3U2NAlzYWRiX2xpZmV0aW1lX2FkZHRpbWU7CisJX191NjQJc2FkYl9saWZldGltZV91c2V0aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9saWZldGltZSkgPT0gMzIgKi8KIAogc3RydWN0IHNhZGJfYWRkcmVzcyB7Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX2FkZHJlc3NfcHJvdG87Ci0JdWludDhfdAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX2FkZHJlc3NfcHJvdG87CisJX191OAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2FkZHJlc3MpID09IDggKi8KIAogc3RydWN0IHNhZGJfa2V5IHsKLQl1aW50MTZfdAlzYWRiX2tleV9sZW47Ci0JdWludDE2X3QJc2FkYl9rZXlfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX2tleV9iaXRzOwotCXVpbnQxNl90CXNhZGJfa2V5X3Jlc2VydmVkOworCV9fdTE2CXNhZGJfa2V5X2xlbjsKKwlfX3UxNglzYWRiX2tleV9leHR0eXBlOworCV9fdTE2CXNhZGJfa2V5X2JpdHM7CisJX191MTYJc2FkYl9rZXlfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2tleSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl9pZGVudCB7Ci0JdWludDE2X3QJc2FkYl9pZGVudF9sZW47Ci0JdWludDE2X3QJc2FkYl9pZGVudF9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfaWRlbnRfdHlwZTsKLQl1aW50MTZfdAlzYWRiX2lkZW50X3Jlc2VydmVkOwotCXVpbnQ2NF90CXNhZGJfaWRlbnRfaWQ7CisJX191MTYJc2FkYl9pZGVudF9sZW47CisJX191MTYJc2FkYl9pZGVudF9leHR0eXBlOworCV9fdTE2CXNhZGJfaWRlbnRfdHlwZTsKKwlfX3UxNglzYWRiX2lkZW50X3Jlc2VydmVkOworCV9fdTY0CXNhZGJfaWRlbnRfaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2lkZW50KSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9zZW5zIHsKLQl1aW50MTZfdAlzYWRiX3NlbnNfbGVuOwotCXVpbnQxNl90CXNhZGJfc2Vuc19leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfc2Vuc19kcGQ7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGVuOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKLQl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGVuOwotCXVpbnQzMl90CXNhZGJfc2Vuc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3NlbnNfbGVuOworCV9fdTE2CXNhZGJfc2Vuc19leHR0eXBlOworCV9fdTMyCXNhZGJfc2Vuc19kcGQ7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGVuOworCV9fdTgJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKKwlfX3U4CQlzYWRiX3NlbnNfaW50ZWdfbGVuOworCV9fdTMyCXNhZGJfc2Vuc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2VucykgPT0gMTYgKi8KIAogLyogZm9sbG93ZWQgYnk6Ci0JdWludDY0X3QJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07Ci0JdWludDY0X3QJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCisJX191NjQJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07CisJX191NjQJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCiAKIHN0cnVjdCBzYWRiX3Byb3AgewotCXVpbnQxNl90CXNhZGJfcHJvcF9sZW47Ci0JdWludDE2X3QJc2FkYl9wcm9wX2V4dHR5cGU7Ci0JdWludDhfdAkJc2FkYl9wcm9wX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl9wcm9wX2xlbjsKKwlfX3UxNglzYWRiX3Byb3BfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVwbGF5OworCV9fdTgJCXNhZGJfcHJvcF9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9jb21iIHNhZGJfY29tYnNbKHNhZGJfcHJvcF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCisJCXNpemVvZihfX3U2NCkgLSBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkpIC8KIAkJc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpXTsgKi8KIAogc3RydWN0IHNhZGJfY29tYiB7Ci0JdWludDhfdAkJc2FkYl9jb21iX2F1dGg7Ci0JdWludDhfdAkJc2FkYl9jb21iX2VuY3J5cHQ7Ci0JdWludDE2X3QJc2FkYl9jb21iX2ZsYWdzOwotCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7Ci0JdWludDE2X3QJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKLQl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7Ci0JdWludDMyX3QJc2FkYl9jb21iX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOwotCXVpbnQzMl90CXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CisJX191OAkJc2FkYl9jb21iX2F1dGg7CisJX191OAkJc2FkYl9jb21iX2VuY3J5cHQ7CisJX191MTYJc2FkYl9jb21iX2ZsYWdzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7CisJX191MTYJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7CisJX191MzIJc2FkYl9jb21iX3Jlc2VydmVkOworCV9fdTMyCXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOworCV9fdTMyCXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpID09IDcyICovCiAKIHN0cnVjdCBzYWRiX3N1cHBvcnRlZCB7Ci0JdWludDE2X3QJc2FkYl9zdXBwb3J0ZWRfbGVuOwotCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9zdXBwb3J0ZWRfbGVuOworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7CisJX191MzIJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9hbGcgc2FkYl9hbGdzWyhzYWRiX3N1cHBvcnRlZF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkpIC8KKwkJc2l6ZW9mKF9fdTY0KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpXTsgKi8KIAogc3RydWN0IHNhZGJfYWxnIHsKLQl1aW50OF90CQlzYWRiX2FsZ19pZDsKLQl1aW50OF90CQlzYWRiX2FsZ19pdmxlbjsKLQl1aW50MTZfdAlzYWRiX2FsZ19taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfYWxnX21heGJpdHM7Ci0JdWludDE2X3QJc2FkYl9hbGdfcmVzZXJ2ZWQ7CisJX191OAkJc2FkYl9hbGdfaWQ7CisJX191OAkJc2FkYl9hbGdfaXZsZW47CisJX191MTYJc2FkYl9hbGdfbWluYml0czsKKwlfX3UxNglzYWRiX2FsZ19tYXhiaXRzOworCV9fdTE2CXNhZGJfYWxnX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpID09IDggKi8KIAogc3RydWN0IHNhZGJfc3BpcmFuZ2UgewotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfbGVuOwotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21pbjsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21heDsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfbGVuOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21pbjsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21heDsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9rbXByaXZhdGUgewotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfbGVuOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl94X3NhMiB7Ci0JdWludDE2X3QJc2FkYl94X3NhMl9sZW47Ci0JdWludDE2X3QJc2FkYl94X3NhMl9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9zYTJfbW9kZTsKLQl1aW50OF90CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKLQl1aW50MTZfdAlzYWRiX3hfc2EyX3Jlc2VydmVkMjsKLQl1aW50MzJfdAlzYWRiX3hfc2EyX3NlcXVlbmNlOwotCXVpbnQzMl90CXNhZGJfeF9zYTJfcmVxaWQ7CisJX191MTYJc2FkYl94X3NhMl9sZW47CisJX191MTYJc2FkYl94X3NhMl9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9zYTJfbW9kZTsKKwlfX3U4CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKwlfX3UxNglzYWRiX3hfc2EyX3Jlc2VydmVkMjsKKwlfX3UzMglzYWRiX3hfc2EyX3NlcXVlbmNlOworCV9fdTMyCXNhZGJfeF9zYTJfcmVxaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2EyKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl94X3BvbGljeSB7Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9sZW47Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfdHlwZTsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X2RpcjsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfaWQ7Ci0JdWludDMyX3QJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2xlbjsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2V4dHR5cGU7CisJX191MTYJc2FkYl94X3BvbGljeV90eXBlOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfZGlyOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9pZDsKKwlfX3UzMglzYWRiX3hfcG9saWN5X3ByaW9yaXR5OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3BvbGljeSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgewotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87Ci0JdWludDhfdAkJc2FkYl94X2lwc2VjcmVxdWVzdF9tb2RlOwotCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbGV2ZWw7Ci0JdWludDE2X3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDE7Ci0JdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZDsKLQl1aW50MzJfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOworCV9fdTgJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKKwlfX3U4CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOworCV9fdTE2CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOworCV9fdTMyCXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7CisJX191MzIJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KSA9PSAxNiAqLwogCkBAIC0yMDAsMzggKzIwMCwzOCBAQAogICogdHlwZSBvZiBOQVQtVCBpcyBzdXBwb3J0ZWQsIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNgogICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7Ci0JdWludDhfdAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl94X25hdF90X3R5cGVfbGVuOworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2V4dHR5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfdHlwZTsKKwlfX3U4CQlzYWRiX3hfbmF0X3RfdHlwZV9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlKSA9PSA4ICovCiAKIC8qIFBhc3MgYSBOQVQgVHJhdmVyc2FsIHBvcnQgKFNvdXJjZSBvciBEZXN0IHBvcnQpICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3BvcnQgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOworCV9fdTE2CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOwogCV9fYmUxNgkJc2FkYl94X25hdF90X3BvcnRfcG9ydDsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSA9PSA4ICovCiAKIC8qIEdlbmVyaWMgTFNNIHNlY3VyaXR5IGNvbnRleHQgKi8KIHN0cnVjdCBzYWRiX3hfc2VjX2N0eCB7Ci0JdWludDE2X3QJc2FkYl94X3NlY19sZW47Ci0JdWludDE2X3QJc2FkYl94X3NlY19leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCi0JdWludDhfdAkJc2FkYl94X2N0eF9kb2k7Ci0JdWludDE2X3QJc2FkYl94X2N0eF9sZW47CisJX191MTYJc2FkYl94X3NlY19sZW47CisJX191MTYJc2FkYl94X3NlY19leHR0eXBlOworCV9fdTgJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCisJX191OAkJc2FkYl94X2N0eF9kb2k7CisJX191MTYJc2FkYl94X2N0eF9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NlY19jdHgpID0gOCAqLwogCiAvKiBVc2VkIGJ5IE1JR1JBVEUgdG8gcGFzcyBhZGRyZXNzZXMgSUtFIHdpbGwgdXNlIHRvIHBlcmZvcm0KICAqIG5lZ290aWF0aW9uIHdpdGggdGhlIHBlZXIgKi8KIHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzIHsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7CisJX191MzIJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbWFkZHJlc3MpID09IDggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggZDdlNTRkOS4uMzJjZjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zMTUsOCArMzE1LDcgQEAKIAogCS8qIEludGVycnVwdCBhbmQgUG9sbGluZyBpbmZyYXN0cnVjdHVyZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwaHlfcXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHN0YXRlX3F1ZXVlOwotCXN0cnVjdCB0aW1lcl9saXN0IHBoeV90aW1lcjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRlX3F1ZXVlOwogCWF0b21pY190IGlycV9kaXNhYmxlOwogCiAJc3RydWN0IG11dGV4IGxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpbS5oIGIvaW5jbHVkZS9saW51eC9waW0uaAppbmRleCAxYmEwNjYxLi4yNTJiZjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGltLmgKQEAgLTQsMTQgKzQsMTQgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIE1lc3NhZ2UgdHlwZXMgLSBWMSAqLwotI2RlZmluZSBQSU1fVjFfVkVSU0lPTgkJX19jb25zdGFudF9odG9ubCgweDEwMDAwMDAwKQorI2RlZmluZSBQSU1fVjFfVkVSU0lPTgkJY3B1X3RvX2JlMzIoMHgxMDAwMDAwMCkKICNkZWZpbmUgUElNX1YxX1JFR0lTVEVSCQkxCiAKIC8qIE1lc3NhZ2UgdHlwZXMgLSBWMiAqLwogI2RlZmluZSBQSU1fVkVSU0lPTgkJMgogI2RlZmluZSBQSU1fUkVHSVNURVIJCTEKIAotI2RlZmluZSBQSU1fTlVMTF9SRUdJU1RFUglfX2NvbnN0YW50X2h0b25sKDB4NDAwMDAwMDApCisjZGVmaW5lIFBJTV9OVUxMX1JFR0lTVEVSCWNwdV90b19iZTMyKDB4NDAwMDAwMDApCiAKIC8qIFBJTXYyIHJlZ2lzdGVyIG1lc3NhZ2UgaGVhZGVyIGxheW91dCAoaWV0Zi1kcmFmdC1pZG1yLXBpbXZzbS12Mi0wMC5wcyAqLwogc3RydWN0IHBpbXJlZ2hkcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggOWEzNDI2OS4uNzZlNDcwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIF9QTEFURk9STV9ERVZJQ0VfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHsKIAljb25zdCBjaGFyCSogbmFtZTsKQEAgLTE5LDggKzIwLDEzIEBACiAJc3RydWN0IGRldmljZQlkZXY7CiAJdTMyCQludW1fcmVzb3VyY2VzOwogCXN0cnVjdCByZXNvdXJjZQkqIHJlc291cmNlOworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CiB9OwogCisjZGVmaW5lIHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldikJKChwZGV2KS0+aWRfZW50cnkpCisKICNkZWZpbmUgdG9fcGxhdGZvcm1fZGV2aWNlKHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldikKIAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKQEAgLTU2LDYgKzYyLDcgQEAKIAlpbnQgKCpyZXN1bWVfZWFybHkpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZF90YWJsZTsKIH07CiAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggODVkZTJmMC4uNDU5MjZkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtOTYsNiArOTYsMTAgQEAKICMgZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQogI2VuZGlmCiAKKyNkZWZpbmUgX1BMSVNUX0hFQURfSU5JVChoZWFkKQkJCQlcCisJLnByaW9fbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5wcmlvX2xpc3QpLAlcCisJLm5vZGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5ub2RlX2xpc3QpCisKIC8qKgogICogUExJU1RfSEVBRF9JTklUIC0gc3RhdGljIHN0cnVjdCBwbGlzdF9oZWFkIGluaXRpYWxpemVyCiAgKiBAaGVhZDoJc3RydWN0IHBsaXN0X2hlYWQgdmFyaWFibGUgbmFtZQpAQCAtMTAzLDggKzEwNyw3IEBACiAgKi8KICNkZWZpbmUgUExJU1RfSEVBRF9JTklUKGhlYWQsIF9sb2NrKQkJCVwKIHsJCQkJCQkJXAotCS5wcmlvX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkucHJpb19saXN0KSwJXAotCS5ub2RlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkubm9kZV9saXN0KSwJXAorICAgICAgICBfUExJU1RfSEVBRF9JTklUKGhlYWQpLCAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJUExJU1RfSEVBRF9MT0NLX0lOSVQoJihfbG9jaykpCQkJXAogfQogCkBAIC0xMTYsNyArMTE5LDcgQEAKICNkZWZpbmUgUExJU1RfTk9ERV9JTklUKG5vZGUsIF9fcHJpbykJCQlcCiB7CQkJCQkJCVwKIAkucHJpbyAgPSAoX19wcmlvKSwJCQkJXAotCS5wbGlzdCA9IFBMSVNUX0hFQURfSU5JVCgobm9kZSkucGxpc3QsIE5VTEwpLAlcCisJLnBsaXN0ID0geyBfUExJU1RfSEVBRF9JTklUKChub2RlKS5wbGlzdCkgfSwgCVwKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggMjRiYTVmNi4uMWQ0ZTJkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDAwLDYgKzQwMCw5IEBACiAKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorI2RlZmluZSBkZXZpY2VfcG1fbG9jaygpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkZXZpY2VfcG1fdW5sb2NrKCkgZG8ge30gd2hpbGUgKDApCisKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQwOSw2ICs0MTIsMTQgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorLyogSG93IHRvIHJlb3JkZXIgZHBtX2xpc3QgYWZ0ZXIgZGV2aWNlX21vdmUoKSAqLworZW51bSBkcG1fb3JkZXIgeworCURQTV9PUkRFUl9OT05FLAorCURQTV9PUkRFUl9ERVZfQUZURVJfUEFSRU5ULAorCURQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFViwKKwlEUE1fT1JERVJfREVWX0xBU1QsCit9OworCiAvKgogICogR2xvYmFsIFBvd2VyIE1hbmFnZW1lbnQgZmxhZ3MKICAqIFVzZWQgdG8ga2VlcCBBUE0gYW5kIEFDUEkgZnJvbSBib3RoIGJlaW5nIGFjdGl2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IGE5NDI4OTIuLjBkM2ZhNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKIHN0cnVjdCBwcHBfY2hhbm5lbDsKIApAQCAtMzksOCArNDAsOCBAQAogCWludAkJbXR1OwkJLyogbWF4IHRyYW5zbWl0IHBhY2tldCBzaXplICovCiAJaW50CQloZHJsZW47CQkvKiBhbW91bnQgb2YgaGVhZHJvb20gY2hhbm5lbCBuZWVkcyAqLwogCXZvaWQJCSpwcHA7CQkvKiBvcGFxdWUgdG8gY2hhbm5lbCAqLwotCS8qIHRoZSBmb2xsb3dpbmcgYXJlIG5vdCB1c2VkIGF0IHByZXNlbnQgKi8KIAlpbnQJCXNwZWVkOwkJLyogdHJhbnNmZXIgcmF0ZSAoYnl0ZXMvc2Vjb25kKSAqLworCS8qIHRoZSBmb2xsb3dpbmcgaXMgbm90IHVzZWQgYXQgcHJlc2VudCAqLwogCWludAkJbGF0ZW5jeTsJLyogb3ZlcmhlYWQgdGltZSBpbiBtaWxsaXNlY29uZHMgKi8KIH07CiAKQEAgLTU2LDYgKzU3LDkgQEAKICAgIHRoYXQgd2UgbWF5IGhhdmUgbWlzc2VkIGEgcGFja2V0LiAqLwogZXh0ZXJuIHZvaWQgcHBwX2lucHV0X2Vycm9yKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBpbnQgY29kZSk7CiAKKy8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdCBpbiBzcGVjaWZpZWQgbmV0LiAqLworZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7CisKIC8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdC4gKi8KIGV4dGVybiBpbnQgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKaW5kZXggMWM4NjZiZC4uMGY5M2VkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaApAQCAtMTc3LDggKzE3Nyw4IEBACiAgKiB0aGUgbGFzdCBOUCBwYWNrZXQgd2FzIHNlbnQgb3IgcmVjZWl2ZWQuCiAgKi8KIHN0cnVjdCBwcHBfaWRsZSB7Ci0gICAgdGltZV90IHhtaXRfaWRsZTsJCS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgc2VudCAqLwotICAgIHRpbWVfdCByZWN2X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHJlY2VpdmVkICovCisgICAgX19rZXJuZWxfdGltZV90IHhtaXRfaWRsZTsJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCBzZW50ICovCisgICAgX19rZXJuZWxfdGltZV90IHJlY3ZfaWRsZTsJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCByZWNlaXZlZCAqLwogfTsKIAogI2VuZGlmIC8qIF9QUFBfREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZHMuaCBiL2luY2x1ZGUvbGludXgvcmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxZGM5MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmRzLmgKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9SRFNfSAorI2RlZmluZSBfTElOVVhfUkRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIFRoZXNlIHNwYXJzZSBhbm5vdGF0ZWQgdHlwZXMgc2hvdWxkbid0IGJlIGluIGFueSB1c2VyCisgKiB2aXNpYmxlIGhlYWRlciBmaWxlLiBXZSBzaG91bGQgY2xlYW4gdGhpcyB1cCByYXRoZXIKKyAqIHRoYW4ga2x1ZGdpbmcgYXJvdW5kIHRoZW0uICovCisjaWZuZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19iZTE2CXVfaW50MTZfdAorI2RlZmluZSBfX2JlMzIJdV9pbnQzMl90CisjZGVmaW5lIF9fYmU2NAl1X2ludDY0X3QKKyNlbmRpZgorCisjZGVmaW5lIFJEU19JQl9BQklfVkVSU0lPTgkJMHgzMDEKKworLyoKKyAqIHNldHNvY2tvcHQvZ2V0c29ja29wdCBmb3IgU09MX1JEUworICovCisjZGVmaW5lIFJEU19DQU5DRUxfU0VOVF9UTyAgICAgIAkxCisjZGVmaW5lIFJEU19HRVRfTVIJCQkyCisjZGVmaW5lIFJEU19GUkVFX01SCQkJMworLyogZGVwcmVjYXRlZDogUkRTX0JBUlJJRVIgNCAqLworI2RlZmluZSBSRFNfUkVDVkVSUgkJCTUKKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUgkJNgorCisvKgorICogQ29udHJvbCBtZXNzYWdlIHR5cGVzIGZvciBTT0xfUkRTLgorICoKKyAqIENNU0dfUkRNQV9BUkdTIChzZW5kbXNnKQorICoJUmVxdWVzdCBhIFJETUEgdHJhbnNmZXIgdG8vZnJvbSB0aGUgc3BlY2lmaWVkCisgKgltZW1vcnkgcmFuZ2VzLgorICoJVGhlIGNtc2dfZGF0YSBpcyBhIHN0cnVjdCByZHNfcmRtYV9hcmdzLgorICogUkRTX0NNU0dfUkRNQV9ERVNUIChyZWN2bXNnLCBzZW5kbXNnKQorICoJS2VybmVsIGluZm9ybXMgYXBwbGljYXRpb24gYWJvdXQgaW50ZW5kZWQKKyAqCXNvdXJjZS9kZXN0aW5hdGlvbiBvZiBhIFJETUEgdHJhbnNmZXIKKyAqIFJEU19DTVNHX1JETUFfTUFQIChzZW5kbXNnKQorICoJQXBwbGljYXRpb24gYXNrcyBrZXJuZWwgdG8gbWFwIHRoZSBnaXZlbgorICoJbWVtb3J5IHJhbmdlIGludG8gYSBJQiBNUiwgYW5kIHNlbmQgdGhlCisgKglSX0tleSBhbG9uZyBpbiBhbiBSRFMgZXh0ZW5zaW9uIGhlYWRlci4KKyAqCVRoZSBjbXNnX2RhdGEgaXMgYSBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzLAorICoJdGhlIHNhbWUgYXMgZm9yIHRoZSBHRVRfTVIgc2V0c29ja29wdC4KKyAqIFJEU19DTVNHX1JETUFfU1RBVFVTIChyZWN2bXNnKQorICoJUmV0dXJucyB0aGUgc3RhdHVzIG9mIGEgY29tcGxldGVkIFJETUEgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJEU19DTVNHX1JETUFfQVJHUwkJMQorI2RlZmluZSBSRFNfQ01TR19SRE1BX0RFU1QJCTIKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9NQVAJCTMKKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9TVEFUVVMJCTQKKyNkZWZpbmUgUkRTX0NNU0dfQ09OR19VUERBVEUJCTUKKworI2RlZmluZSBSRFNfSU5GT19GSVJTVAkJCTEwMDAwCisjZGVmaW5lIFJEU19JTkZPX0NPVU5URVJTCQkxMDAwMAorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OUwkJMTAwMDEKKy8qIDEwMDAyIGFrYSBSRFNfSU5GT19GTE9XUyBpcyBkZXByZWNhdGVkICovCisjZGVmaW5lIFJEU19JTkZPX1NFTkRfTUVTU0FHRVMJCTEwMDAzCisjZGVmaW5lIFJEU19JTkZPX1JFVFJBTlNfTUVTU0FHRVMgICAgICAgMTAwMDQKKyNkZWZpbmUgUkRTX0lORk9fUkVDVl9NRVNTQUdFUyAgICAgICAgICAxMDAwNQorI2RlZmluZSBSRFNfSU5GT19TT0NLRVRTICAgICAgICAgICAgICAgIDEwMDA2CisjZGVmaW5lIFJEU19JTkZPX1RDUF9TT0NLRVRTICAgICAgICAgICAgMTAwMDcKKyNkZWZpbmUgUkRTX0lORk9fSUJfQ09OTkVDVElPTlMJCTEwMDA4CisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fU1RBVFMJMTAwMDkKKyNkZWZpbmUgUkRTX0lORk9fSVdBUlBfQ09OTkVDVElPTlMJMTAwMTAKKyNkZWZpbmUgUkRTX0lORk9fTEFTVAkJCTEwMDEwCisKK3N0cnVjdCByZHNfaW5mb19jb3VudGVyIHsKKwl1X2ludDhfdAluYW1lWzMyXTsKKwl1X2ludDY0X3QJdmFsdWU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19TRU5ESU5HCTB4MDEKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX0NPTk5FQ1RJTkcJMHgwMgorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfQ09OTkVDVEVECTB4MDQKKworI2RlZmluZSBUUkFOU05BTVNJWgkxNgorCitzdHJ1Y3QgcmRzX2luZm9fY29ubmVjdGlvbiB7CisJdV9pbnQ2NF90CW5leHRfdHhfc2VxOworCXVfaW50NjRfdAluZXh0X3J4X3NlcTsKKwlfX2JlMzIJCWxhZGRyOworCV9fYmUzMgkJZmFkZHI7CisJdV9pbnQ4X3QJdHJhbnNwb3J0W1RSQU5TTkFNU0laXTsJCS8qIG51bGwgdGVybSBhc2NpaSAqLworCXVfaW50OF90CWZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJkc19pbmZvX2Zsb3cgeworCV9fYmUzMgkJbGFkZHI7CisJX19iZTMyCQlmYWRkcjsKKwl1X2ludDMyX3QJYnl0ZXM7CisJX19iZTE2CQlscG9ydDsKKwlfX2JlMTYJCWZwb3J0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBSRFNfSU5GT19NRVNTQUdFX0ZMQUdfQUNLICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRFNfSU5GT19NRVNTQUdFX0ZMQUdfRkFTVF9BQ0sgICAgICAgICAgMHgwMgorCitzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSB7CisJdV9pbnQ2NF90CXNlcTsKKwl1X2ludDMyX3QJbGVuOworCV9fYmUzMgkJbGFkZHI7CisJX19iZTMyCQlmYWRkcjsKKwlfX2JlMTYJCWxwb3J0OworCV9fYmUxNgkJZnBvcnQ7CisJdV9pbnQ4X3QJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcmRzX2luZm9fc29ja2V0IHsKKwl1X2ludDMyX3QJc25kYnVmOworCV9fYmUzMgkJYm91bmRfYWRkcjsKKwlfX2JlMzIJCWNvbm5lY3RlZF9hZGRyOworCV9fYmUxNgkJYm91bmRfcG9ydDsKKwlfX2JlMTYJCWNvbm5lY3RlZF9wb3J0OworCXVfaW50MzJfdAlyY3ZidWY7CisJdV9pbnQ2NF90CWludW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFJEU19JQl9HSURfTEVOCTE2CitzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uIHsKKwlfX2JlMzIJCXNyY19hZGRyOworCV9fYmUzMgkJZHN0X2FkZHI7CisJdWludDhfdAkJc3JjX2dpZFtSRFNfSUJfR0lEX0xFTl07CisJdWludDhfdAkJZHN0X2dpZFtSRFNfSUJfR0lEX0xFTl07CisKKwl1aW50MzJfdAltYXhfc2VuZF93cjsKKwl1aW50MzJfdAltYXhfcmVjdl93cjsKKwl1aW50MzJfdAltYXhfc2VuZF9zZ2U7CisJdWludDMyX3QJcmRtYV9tcl9tYXg7CisJdWludDMyX3QJcmRtYV9tcl9zaXplOworfTsKKworLyoKKyAqIENvbmdlc3Rpb24gbW9uaXRvcmluZy4KKyAqIENvbmdlc3Rpb24gY29udHJvbCBpbiBSRFMgaGFwcGVucyBhdCB0aGUgaG9zdCBjb25uZWN0aW9uCisgKiBsZXZlbCBieSBleGNoYW5naW5nIGEgYml0bWFwIG1hcmtpbmcgY29uZ2VzdGVkIHBvcnRzLgorICogQnkgZGVmYXVsdCwgYSBwcm9jZXNzIHNsZWVwaW5nIGluIHBvbGwoKSBpcyBhbHdheXMgd29rZW4KKyAqIHVwIHdoZW4gdGhlIGNvbmdlc3Rpb24gbWFwIGlzIHVwZGF0ZWQuCisgKiBXaXRoIGV4cGxpY2l0IG1vbml0b3JpbmcsIGFuIGFwcGxpY2F0aW9uIGNhbiBoYXZlIG1vcmUKKyAqIGZpbmUtZ3JhaW5lZCBjb250cm9sLgorICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbGxzIGEgNjRiaXQgbWFzayB2YWx1ZSBpbiB0aGUgc29ja2V0LAorICogd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBncm91cCBvZiBwb3J0cy4KKyAqIFdoZW4gYSBjb25nZXN0aW9uIHVwZGF0ZSBhcnJpdmVzLCBSRFMgY2hlY2tzIHRoZSBzZXQgb2YKKyAqIHBvcnRzIHRoYXQgYXJlIG5vdyB1bmNvbmdlc3RlZCBhZ2FpbnN0IHRoZSBsaXN0IGJpdCBtYXNrCisgKiBpbnN0YWxsZWQgaW4gdGhlIHNvY2tldCwgYW5kIGlmIHRoZXkgb3ZlcmxhcCwgd2UgcXVldWUgYQorICogY29uZ19ub3RpZmljYXRpb24gb24gdGhlIHNvY2tldC4KKyAqCisgKiBUbyBpbnN0YWxsIHRoZSBjb25nZXN0aW9uIG1vbml0b3IgYml0bWFzaywgdXNlIFJEU19DT05HX01PTklUT1IKKyAqIHdpdGggdGhlIDY0Yml0IG1hc2suCisgKiBDb25nZXN0aW9uIHVwZGF0ZXMgYXJlIHJlY2VpdmVkIHZpYSBSRFNfQ01TR19DT05HX1VQREFURQorICogY29udHJvbCBtZXNzYWdlcy4KKyAqCisgKiBUaGUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBiaXRzIGFuZCBwb3J0cyBpcworICoJMSA8PCAocG9ydG51bSAlIDY0KQorICovCisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfU0laRQk2NAorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX0JJVChwb3J0KSAgKCgodW5zaWduZWQgaW50KSBwb3J0KSAlIFJEU19DT05HX01PTklUT1JfU0laRSkKKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9NQVNLKHBvcnQpICgxVUxMIDw8IFJEU19DT05HX01PTklUT1JfQklUKHBvcnQpKQorCisvKgorICogUkRNQSByZWxhdGVkIHR5cGVzCisgKi8KKworLyoKKyAqIFRoaXMgZW5jYXBzdWxhdGVzIGEgcmVtb3RlIG1lbW9yeSBsb2NhdGlvbi4KKyAqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBpdCBjb250YWlucyB0aGUgUl9LZXkKKyAqIG9mIHRoZSByZW1vdGUgbWVtb3J5IHJlZ2lvbiwgYW5kIHRoZSBvZmZzZXQgaW50byBpdAorICogKHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAqIGFsaWdubWVudCkuCisgKi8KK3R5cGVkZWYgdV9pbnQ2NF90CXJkc19yZG1hX2Nvb2tpZV90OworCitzdHJ1Y3QgcmRzX2lvdmVjIHsKKwl1X2ludDY0X3QJYWRkcjsKKwl1X2ludDY0X3QJYnl0ZXM7Cit9OworCitzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzIHsKKwlzdHJ1Y3QgcmRzX2lvdmVjIHZlYzsKKwl1X2ludDY0X3QJY29va2llX2FkZHI7CisJdWludDY0X3QJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyB7CisJcmRzX3JkbWFfY29va2llX3QgY29va2llOworCXVfaW50NjRfdAlmbGFnczsKK307CisKK3N0cnVjdCByZHNfcmRtYV9hcmdzIHsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHJkc19pb3ZlYyByZW1vdGVfdmVjOworCXVfaW50NjRfdAlsb2NhbF92ZWNfYWRkcjsKKwl1X2ludDY0X3QJbnJfbG9jYWw7CisJdV9pbnQ2NF90CWZsYWdzOworCXVfaW50NjRfdAl1c2VyX3Rva2VuOworfTsKKworc3RydWN0IHJkc19yZG1hX25vdGlmeSB7CisJdV9pbnQ2NF90CXVzZXJfdG9rZW47CisJaW50MzJfdAkJc3RhdHVzOworfTsKKworI2RlZmluZSBSRFNfUkRNQV9TVUNDRVNTCTAKKyNkZWZpbmUgUkRTX1JETUFfUkVNT1RFX0VSUk9SCTEKKyNkZWZpbmUgUkRTX1JETUFfQ0FOQ0VMRUQJMgorI2RlZmluZSBSRFNfUkRNQV9EUk9QUEVECTMKKyNkZWZpbmUgUkRTX1JETUFfT1RIRVJfRVJST1IJNAorCisvKgorICogQ29tbW9uIHNldCBvZiBmbGFncyBmb3IgYWxsIFJETUEgcmVsYXRlZCBzdHJ1Y3RzCisgKi8KKyNkZWZpbmUgUkRTX1JETUFfUkVBRFdSSVRFCTB4MDAwMQorI2RlZmluZSBSRFNfUkRNQV9GRU5DRQkJMHgwMDAyCS8qIHVzZSBGRU5DRSBmb3IgaW1tZWRpYXRlIHNlbmQgKi8KKyNkZWZpbmUgUkRTX1JETUFfSU5WQUxJREFURQkweDAwMDQJLyogaW52YWxpZGF0ZSBSX0tleSBhZnRlciBmcmVlaW5nIE1SICovCisjZGVmaW5lIFJEU19SRE1BX1VTRV9PTkNFCTB4MDAwOAkvKiBmcmVlIE1SIGFmdGVyIHVzZSAqLworI2RlZmluZSBSRFNfUkRNQV9ET05UV0FJVAkweDAwMTAJLyogRG9uJ3Qgd2FpdCBpbiBTRVRfQkFSUklFUiAqLworI2RlZmluZSBSRFNfUkRNQV9OT1RJRllfTUUJMHgwMDIwCS8qIE5vdGlmeSB3aGVuIG9wZXJhdGlvbiBjb21wbGV0ZXMgKi8KKworI2VuZGlmIC8qIElCX1JEU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggYmM1MTE0ZC4uZTM1NmM5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzX3NiLmg+CiAjZW5kaWYKIAotc3RydWN0IGZpZDsKLQogLyoKICAqICBpbmNsdWRlL2xpbnV4L3JlaXNlcl9mcy5oCiAgKgpAQCAtMzcsNiArMzUsMzMgQEAKICAqCiAgKi8KIAorLyogaW9jdGwncyBjb21tYW5kICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19VTlBBQ0sJCV9JT1coMHhDRCwxLGxvbmcpCisvKiBkZWZpbmUgZm9sbG93aW5nIGZsYWdzIHRvIGJlIHRoZSBzYW1lIGFzIGluIGV4dDIsIHNvIHRoYXQgY2hhdHRyKDEpLAorICAgbHNhdHRyKDEpIHdpbGwgd29yayB3aXRoIHVzLiAqLworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfU0VURkxBR1MJCUZTX0lPQ19TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT04JCUZTX0lPQ19TRVRWRVJTSU9OCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiB0aGUgMzIgYml0IGNvbXBhdCBkZWZpbml0aW9ucyB3aXRoIGludCBhcmd1bWVudCAqLworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9VTlBBQ0sJCV9JT1coMHhDRCwgMSwgaW50KQorI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRGTEFHUwkJRlNfSU9DMzJfR0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VURkxBR1MJCUZTX0lPQzMyX1NFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVFZFUlNJT04JRlNfSU9DMzJfR0VUVkVSU0lPTgorI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRWRVJTSU9OCUZTX0lPQzMyX1NFVFZFUlNJT04KKworLyogTG9ja2luZyBwcmltaXRpdmVzICovCisvKiBSaWdodCBub3cgd2UgYXJlIHN0aWxsIGZhbGxpbmcgYmFjayB0byAodW4pbG9ja19rZXJuZWwsIGJ1dCBldmVudHVhbGx5IHRoYXQKKyAgIHdvdWxkIGV2b2x2ZSBpbnRvIHJlYWwgcGVyLWZzIGxvY2tzICovCisjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQorI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCisKKy8qIHhhdHRyIHN0dWZmICovCisjZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQorc3RydWN0IGZpZDsKKwogLyogaW4gcmVhZGluZyB0aGUgI2RlZmluZXMsIGl0IG1heSBoZWxwIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGV5IGVtcGxveQogICAgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zOgogCkBAIC02OTgsNiArNzIzLDcgQEAKIC8qIG9iamVjdCBpZGVudGlmaWVyIGZvciByb290IGRpciAqLwogI2RlZmluZSBSRUlTRVJGU19ST09UX09CSkVDVElEIDIKICNkZWZpbmUgUkVJU0VSRlNfUk9PVF9QQVJFTlRfT0JKRUNUSUQgMQorCiBleHRlcm4gc3RydWN0IHJlaXNlcmZzX2tleSByb290X2tleTsKIAogLyogCkBAIC0xNTQwLDcgKzE1NjYsNiBAQAogLyogICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qI2lmZGVmIF9fS0VSTkVMX18qLwogI2RlZmluZSBnZXRfam91cm5hbF9kZXNjX21hZ2ljKGJoKSAoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUgLSAxMikKIAogI2RlZmluZSBqb3VybmFsX3RyYW5zX2hhbGYoYmxvY2tzaXplKSBcCkBAIC0yMTc4LDI5ICsyMjAzLDYgQEAKIAkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogaW50IHJlaXNlcmZzX3VucGFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKLS8qIGlvY3RsJ3MgY29tbWFuZCAqLwotI2RlZmluZSBSRUlTRVJGU19JT0NfVU5QQUNLCQlfSU9XKDB4Q0QsMSxsb25nKQotLyogZGVmaW5lIGZvbGxvd2luZyBmbGFncyB0byBiZSB0aGUgc2FtZSBhcyBpbiBleHQyLCBzbyB0aGF0IGNoYXR0cigxKSwKLSAgIGxzYXR0cigxKSB3aWxsIHdvcmsgd2l0aCB1cy4gKi8KLSNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVEZMQUdTCQlGU19JT0NfR0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVEZMQUdTCQlGU19JT0NfU0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DX0dFVFZFUlNJT04JCUZTX0lPQ19HRVRWRVJTSU9OCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRWRVJTSU9OCQlGU19JT0NfU0VUVkVSU0lPTgogCi0vKiB0aGUgMzIgYml0IGNvbXBhdCBkZWZpbml0aW9ucyB3aXRoIGludCBhcmd1bWVudCAqLwotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9VTlBBQ0sJCV9JT1coMHhDRCwgMSwgaW50KQotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9HRVRGTEFHUwkJRlNfSU9DMzJfR0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfU0VURkxBR1MJCUZTX0lPQzMyX1NFVEZMQUdTCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVFZFUlNJT04JRlNfSU9DMzJfR0VUVkVSU0lPTgotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRWRVJTSU9OCUZTX0lPQzMyX1NFVFZFUlNJT04KLQotLyogTG9ja2luZyBwcmltaXRpdmVzICovCi0vKiBSaWdodCBub3cgd2UgYXJlIHN0aWxsIGZhbGxpbmcgYmFjayB0byAodW4pbG9ja19rZXJuZWwsIGJ1dCBldmVudHVhbGx5IHRoYXQKLSAgIHdvdWxkIGV2b2x2ZSBpbnRvIHJlYWwgcGVyLWZzIGxvY2tzICovCi0jZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQotI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCi0KLS8qIHhhdHRyIHN0dWZmICovCi0jZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQotCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCQkJCS8qIF9MSU5VWF9SRUlTRVJfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggMWU1ZjY3My4uYmEzMjU0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0yMTcsNiArMjE3LDcgQEAKICNkZWZpbmUgUlRQUk9UX0ROUk9VVEVECTEzCS8qIERFQ25ldCByb3V0aW5nIGRhZW1vbiAqLwogI2RlZmluZSBSVFBST1RfWE9SUAkxNAkvKiBYT1JQICovCiAjZGVmaW5lIFJUUFJPVF9OVEsJMTUJLyogTmV0c3VrdWt1ICovCisjZGVmaW5lIFJUUFJPVF9ESENQCTE2ICAgICAgLyogREhDUCBjbGllbnQgKi8KIAogLyogcnRtX3Njb3BlCiAKQEAgLTYyMiw4ICs2MjMsOCBAQAogCiBleHRlcm4gaW50IHJ0bmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZWNobyk7CiBleHRlcm4gaW50IHJ0bmxfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQpOwotZXh0ZXJuIGludCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHUzMiBncm91cCwKLQkJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncyk7CitleHRlcm4gdm9pZCBydG5sX25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsCisJCQl1MzIgZ3JvdXAsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncyk7CiBleHRlcm4gdm9pZCBydG5sX3NldF9za19lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgZ3JvdXAsIGludCBlcnJvcik7CiBleHRlcm4gaW50IHJ0bmV0bGlua19wdXRfbWV0cmljcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKm1ldHJpY3MpOwogZXh0ZXJuIGludCBydG5sX3B1dF9jYWNoZWluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDAxMWRiMmYuLmZmOTA0YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTk5OCw2ICs5OTgsNyBAQAogCQkJICAgICAgc3RydWN0IHJxICpidXNpZXN0LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKIAkJCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKTsKIAl2b2lkICgqcHJlX3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCWludCAoKm5lZWRzX3Bvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCpwb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKIAl2b2lkICgqdGFza193YWtlX3VwKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCkBAIC0xMDUyLDYgKzEwNTMsMTAgQEAKIAl1NjQJCQlsYXN0X3dha2V1cDsKIAl1NjQJCQlhdmdfb3ZlcmxhcDsKIAorCXU2NAkJCXN0YXJ0X3J1bnRpbWU7CisJdTY0CQkJYXZnX3dha2V1cDsKKwl1NjQJCQlucl9taWdyYXRpb25zOworCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAl1NjQJCQl3YWl0X3N0YXJ0OwogCXU2NAkJCXdhaXRfbWF4OwpAQCAtMTA2Nyw3ICsxMDcyLDYgQEAKIAl1NjQJCQlleGVjX21heDsKIAl1NjQJCQlzbGljZV9tYXg7CiAKLQl1NjQJCQlucl9taWdyYXRpb25zOwogCXU2NAkJCW5yX21pZ3JhdGlvbnNfY29sZDsKIAl1NjQJCQlucl9mYWlsZWRfbWlncmF0aW9uc19hZmZpbmU7CiAJdTY0CQkJbnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZzsKQEAgLTExNjQsNiArMTE2OCw3IEBACiAjZW5kaWYKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGFza3M7CisJc3RydWN0IHBsaXN0X25vZGUgcHVzaGFibGVfdGFza3M7CiAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKmFjdGl2ZV9tbTsKIApAQCAtMTE3NSw2ICsxMTgwLDggQEAKIAkvKiA/Pz8gKi8KIAl1bnNpZ25lZCBpbnQgcGVyc29uYWxpdHk7CiAJdW5zaWduZWQgZGlkX2V4ZWM6MTsKKwl1bnNpZ25lZCBpbl9leGVjdmU6MTsJLyogVGVsbCB0aGUgTFNNcyB0aGF0IHRoZSBwcm9jZXNzIGlzIGRvaW5nIGFuCisJCQkJICogZXhlY3ZlICovCiAJcGlkX3QgcGlkOwogCXBpZF90IHRnaWQ7CiAKQEAgLTE2NzMsNiArMTY4MCwxNiBAQAogCXJldHVybiBzZXRfY3B1c19hbGxvd2VkX3B0cihwLCAmbmV3X21hc2spOwogfQogCisvKgorICogQXJjaGl0ZWN0dXJlcyBjYW4gc2V0IHRoaXMgdG8gMSBpZiB0aGV5IGhhdmUgc3BlY2lmaWVkCisgKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyBpbiB0aGVpciBhcmNoIEtjb25maWcsCisgKiBidXQgdGhlbiBkdXJpbmcgYm9vdHVwIGl0IHR1cm5zIG91dCB0aGF0IHNjaGVkX2Nsb2NrKCkKKyAqIGlzIHJlbGlhYmxlIGFmdGVyIGFsbDoKKyAqLworI2lmZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCitleHRlcm4gaW50IHNjaGVkX2Nsb2NrX3N0YWJsZTsKKyNlbmRpZgorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzY2hlZF9jbG9ja19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L3NjdHAuaAppbmRleCA4YmExYzMyLi5jMjczMWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjdHAuaApAQCAtNjAsNyArNjAsNyBAQAogCV9fYmUxNiBzb3VyY2U7CiAJX19iZTE2IGRlc3Q7CiAJX19iZTMyIHZ0YWc7Ci0JX19iZTMyIGNoZWNrc3VtOworCV9fbGUzMiBjaGVja3N1bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9zY3RwaGRyX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC0xNzIsMzUgKzE3MiwzNSBAQAogdHlwZWRlZiBlbnVtIHsKIAogCS8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjUgKi8KLQlTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPCQk9IF9fY29uc3RhbnRfaHRvbnMoMSksCisJU0NUUF9QQVJBTV9IRUFSVEJFQVRfSU5GTwkJPSBjcHVfdG9fYmUxNigxKSwKIAkvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4yLjEgKi8KLQlTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUwkJCT0gX19jb25zdGFudF9odG9ucyg1KSwKLQlTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUwkJCT0gX19jb25zdGFudF9odG9ucyg2KSwKLQlTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRQkJCT0gX19jb25zdGFudF9odG9ucyg3KSwKLQlTQ1RQX1BBUkFNX1VOUkVDT0dOSVpFRF9QQVJBTUVURVJTCT0gX19jb25zdGFudF9odG9ucyg4KSwKLQlTQ1RQX1BBUkFNX0NPT0tJRV9QUkVTRVJWQVRJVkUJCT0gX19jb25zdGFudF9odG9ucyg5KSwKLQlTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTCQk9IF9fY29uc3RhbnRfaHRvbnMoMTEpLAotCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMJPSBfX2NvbnN0YW50X2h0b25zKDEyKSwKLQlTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMCksCisJU0NUUF9QQVJBTV9JUFY0X0FERFJFU1MJCQk9IGNwdV90b19iZTE2KDUpLAorCVNDVFBfUEFSQU1fSVBWNl9BRERSRVNTCQkJPSBjcHVfdG9fYmUxNig2KSwKKwlTQ1RQX1BBUkFNX1NUQVRFX0NPT0tJRQkJCT0gY3B1X3RvX2JlMTYoNyksCisJU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUwk9IGNwdV90b19iZTE2KDgpLAorCVNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRQkJPSBjcHVfdG9fYmUxNig5KSwKKwlTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTCQk9IGNwdV90b19iZTE2KDExKSwKKwlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9BRERSRVNTX1RZUEVTCT0gY3B1X3RvX2JlMTYoMTIpLAorCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUJCQk9IGNwdV90b19iZTE2KDB4ODAwMCksCiAKIAkvKiBBVVRIIEV4dGVuc2lvbiBTZWN0aW9uIDMgKi8KLQlTQ1RQX1BBUkFNX1JBTkRPTQkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDIpLAotCVNDVFBfUEFSQU1fQ0hVTktTCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMyksCi0JU0NUUF9QQVJBTV9ITUFDX0FMR08JCQk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDA0KSwKKwlTQ1RQX1BBUkFNX1JBTkRPTQkJCT0gY3B1X3RvX2JlMTYoMHg4MDAyKSwKKwlTQ1RQX1BBUkFNX0NIVU5LUwkJCT0gY3B1X3RvX2JlMTYoMHg4MDAzKSwKKwlTQ1RQX1BBUkFNX0hNQUNfQUxHTwkJCT0gY3B1X3RvX2JlMTYoMHg4MDA0KSwKIAogCS8qIEFkZC1JUDogU3VwcG9ydGVkIEV4dGVuc2lvbnMsIFNlY3Rpb24gNC4yICovCi0JU0NUUF9QQVJBTV9TVVBQT1JURURfRVhUCT0gX19jb25zdGFudF9odG9ucygweDgwMDgpLAorCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0VYVAk9IGNwdV90b19iZTE2KDB4ODAwOCksCiAKIAkvKiBQUi1TQ1RQIFNlYyAzLjEgKi8KLQlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVAk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAwKSwKKwlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVAk9IGNwdV90b19iZTE2KDB4YzAwMCksCiAKIAkvKiBBZGQtSVAgRXh0ZW5zaW9uLiBTZWN0aW9uIDMuMiAqLwotCVNDVFBfUEFSQU1fQUREX0lQCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAxKSwKLQlTQ1RQX1BBUkFNX0RFTF9JUAkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMiksCi0JU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gX19jb25zdGFudF9odG9ucygweGMwMDMpLAotCVNDVFBfUEFSQU1fU0VUX1BSSU1BUlkJCT0gX19jb25zdGFudF9odG9ucygweGMwMDQpLAotCVNDVFBfUEFSQU1fU1VDQ0VTU19SRVBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNSksCi0JU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORCA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA2KSwKKwlTQ1RQX1BBUkFNX0FERF9JUAkJPSBjcHVfdG9fYmUxNigweGMwMDEpLAorCVNDVFBfUEFSQU1fREVMX0lQCQk9IGNwdV90b19iZTE2KDB4YzAwMiksCisJU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gY3B1X3RvX2JlMTYoMHhjMDAzKSwKKwlTQ1RQX1BBUkFNX1NFVF9QUklNQVJZCQk9IGNwdV90b19iZTE2KDB4YzAwNCksCisJU0NUUF9QQVJBTV9TVUNDRVNTX1JFUE9SVAk9IGNwdV90b19iZTE2KDB4YzAwNSksCisJU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORCA9IGNwdV90b19iZTE2KDB4YzAwNiksCiAKIH0gc2N0cF9wYXJhbV90OyAvKiBlbnVtICovCiAKQEAgLTIxMiwxMyArMjEyLDEzIEBACiAgKgogICovCiB0eXBlZGVmIGVudW0gewotCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkQgICAgID0gX19jb25zdGFudF9odG9ucygweDAwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkRfRVJSID0gX19jb25zdGFudF9odG9ucygweDQwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDgwMDApLAotCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVBfRVJSICAgID0gX19jb25zdGFudF9odG9ucygweGMwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkQgICAgID0gY3B1X3RvX2JlMTYoMHgwMDAwKSwKKwlTQ1RQX1BBUkFNX0FDVElPTl9ESVNDQVJEX0VSUiA9IGNwdV90b19iZTE2KDB4NDAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fU0tJUCAgICAgICAgPSBjcHVfdG9fYmUxNigweDgwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX1NLSVBfRVJSICAgID0gY3B1X3RvX2JlMTYoMHhjMDAwKSwKIH0gc2N0cF9wYXJhbV9hY3Rpb25fdDsKIAotZW51bSB7IFNDVFBfUEFSQU1fQUNUSU9OX01BU0sgPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksIH07CitlbnVtIHsgU0NUUF9QQVJBTV9BQ1RJT05fTUFTSyA9IGNwdV90b19iZTE2KDB4YzAwMCksIH07CiAKIC8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjEgUGF5bG9hZCBEYXRhIChEQVRBKSAoMCkgKi8KIApAQCAtNDU3LDE3ICs0NTcsMTcgQEAKICAqLwogdHlwZWRlZiBlbnVtIHsKIAotCVNDVFBfRVJST1JfTk9fRVJST1IJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDApLAotCVNDVFBfRVJST1JfSU5WX1NUUk0JICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDEpLAotCVNDVFBfRVJST1JfTUlTU19QQVJBTSAJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDIpLAotCVNDVFBfRVJST1JfU1RBTEVfQ09PS0lFCSAgID0gX19jb25zdGFudF9odG9ucygweDAzKSwKLQlTQ1RQX0VSUk9SX05PX1JFU09VUkNFIAkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNCksCi0JU0NUUF9FUlJPUl9ETlNfRkFJTEVEICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDUpLAotCVNDVFBfRVJST1JfVU5LTk9XTl9DSFVOSyAgID0gX19jb25zdGFudF9odG9ucygweDA2KSwKLQlTQ1RQX0VSUk9SX0lOVl9QQVJBTSAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNyksCi0JU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDgpLAotCVNDVFBfRVJST1JfTk9fREFUQSAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDA5KSwKLQlTQ1RQX0VSUk9SX0NPT0tJRV9JTl9TSFVURE9XTiA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYSksCisJU0NUUF9FUlJPUl9OT19FUlJPUgkgICA9IGNwdV90b19iZTE2KDB4MDApLAorCVNDVFBfRVJST1JfSU5WX1NUUk0JICAgPSBjcHVfdG9fYmUxNigweDAxKSwKKwlTQ1RQX0VSUk9SX01JU1NfUEFSQU0gCSAgID0gY3B1X3RvX2JlMTYoMHgwMiksCisJU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUJICAgPSBjcHVfdG9fYmUxNigweDAzKSwKKwlTQ1RQX0VSUk9SX05PX1JFU09VUkNFIAkgICA9IGNwdV90b19iZTE2KDB4MDQpLAorCVNDVFBfRVJST1JfRE5TX0ZBSUxFRCAgICAgID0gY3B1X3RvX2JlMTYoMHgwNSksCisJU0NUUF9FUlJPUl9VTktOT1dOX0NIVU5LICAgPSBjcHVfdG9fYmUxNigweDA2KSwKKwlTQ1RQX0VSUk9SX0lOVl9QQVJBTSAgICAgICA9IGNwdV90b19iZTE2KDB4MDcpLAorCVNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTSAgID0gY3B1X3RvX2JlMTYoMHgwOCksCisJU0NUUF9FUlJPUl9OT19EQVRBICAgICAgICAgPSBjcHVfdG9fYmUxNigweDA5KSwKKwlTQ1RQX0VSUk9SX0NPT0tJRV9JTl9TSFVURE9XTiA9IGNwdV90b19iZTE2KDB4MGEpLAogCiAKIAkvKiBTQ1RQIEltcGxlbWVudGF0aW9uIEd1aWRlOgpAQCAtNDc2LDkgKzQ3Niw5IEBACiAJICogIDEzICBQcm90b2NvbCBWaW9sYXRpb24KIAkgKi8KIAotCVNDVFBfRVJST1JfUkVTVEFSVCAgICAgICAgID0gX19jb25zdGFudF9odG9ucygweDBiKSwKLQlTQ1RQX0VSUk9SX1VTRVJfQUJPUlQgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwYyksCi0JU0NUUF9FUlJPUl9QUk9UT19WSU9MQVRJT04gPSBfX2NvbnN0YW50X2h0b25zKDB4MGQpLAorCVNDVFBfRVJST1JfUkVTVEFSVCAgICAgICAgID0gY3B1X3RvX2JlMTYoMHgwYiksCisJU0NUUF9FUlJPUl9VU0VSX0FCT1JUICAgICAgPSBjcHVfdG9fYmUxNigweDBjKSwKKwlTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTiA9IGNwdV90b19iZTE2KDB4MGQpLAogCiAJLyogQURESVAgU2VjdGlvbiAzLjMgIE5ldyBFcnJvciBDYXVzZXMKIAkgKgpAQCAtNDkzLDExICs0OTMsMTEgQEAKIAkgKiAweDAxMDMgICAgICAgICAgQXNzb2NpYXRpb24gQWJvcnRlZCBkdWUgdG8gaWxsZWdhbCBBU0NPTkYtQUNLCiAJICogMHgwMTA0ICAgICAgICAgIFJlcXVlc3QgcmVmdXNlZCAtIG5vIGF1dGhvcml6YXRpb24uCiAJICovCi0JU0NUUF9FUlJPUl9ERUxfTEFTVF9JUAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAwKSwKLQlTQ1RQX0VSUk9SX1JTUkNfTE9XCT0gX19jb25zdGFudF9odG9ucygweDAxMDEpLAotCVNDVFBfRVJST1JfREVMX1NSQ19JUAk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAyKSwKLQlTQ1RQX0VSUk9SX0FTQ09ORl9BQ0sgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTAzKSwKLQlTQ1RQX0VSUk9SX1JFUV9SRUZVU0VECT0gX19jb25zdGFudF9odG9ucygweDAxMDQpLAorCVNDVFBfRVJST1JfREVMX0xBU1RfSVAJPSBjcHVfdG9fYmUxNigweDAxMDApLAorCVNDVFBfRVJST1JfUlNSQ19MT1cJPSBjcHVfdG9fYmUxNigweDAxMDEpLAorCVNDVFBfRVJST1JfREVMX1NSQ19JUAk9IGNwdV90b19iZTE2KDB4MDEwMiksCisJU0NUUF9FUlJPUl9BU0NPTkZfQUNLICAgPSBjcHVfdG9fYmUxNigweDAxMDMpLAorCVNDVFBfRVJST1JfUkVRX1JFRlVTRUQJPSBjcHVfdG9fYmUxNigweDAxMDQpLAogCiAJLyogQVVUSCBTZWN0aW9uIDQuICBOZXcgRXJyb3IgQ2F1c2UKIAkgKgpAQCAtNTA5LDcgKzUwOSw3IEBACiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiAweDAxMDUgICAgICAgICAgVW5zdXBwb3J0ZWQgSE1BQyBJZGVudGlmaWVyCiAJICovCi0JIFNDVFBfRVJST1JfVU5TVVBfSE1BQwk9IF9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQorCSBTQ1RQX0VSUk9SX1VOU1VQX0hNQUMJPSBjcHVfdG9fYmUxNigweDAxMDUpCiB9IHNjdHBfZXJyb3JfdDsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaAppbmRleCBiYmY0ODlkLi5kMjM5Nzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKQEAgLTEyLDYgKzEyLDggQEAKICNpZm5kZWYgX0xJTlVYX1NFTElOVVhfTkVUTElOS19ICiAjZGVmaW5lIF9MSU5VWF9TRUxJTlVYX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogTWVzc2FnZSB0eXBlcy4gKi8KICNkZWZpbmUgU0VMTkxfTVNHX0JBU0UgMHgxMAogZW51bSB7CkBAIC0zOCwxMSArNDAsMTEgQEAKIAogLyogTWVzc2FnZSBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3Qgc2VsbmxfbXNnX3NldGVuZm9yY2UgewotCWludDMyX3QJCXZhbDsKKwlfX3MzMgkJdmFsOwogfTsKIAogc3RydWN0IHNlbG5sX21zZ19wb2xpY3lsb2FkIHsKLQl1X2ludDMyX3QJc2Vxbm87CisJX191MzIJc2Vxbm87CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oIGIvaW5jbHVkZS9saW51eC9zaF9jbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaF9jbXQuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fU0hfQ01UX0hfXworI2RlZmluZSBfX1NIX0NNVF9IX18KKworc3RydWN0IHNoX2NtdF9jb25maWcgeworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBjaGFubmVsX29mZnNldDsKKwlpbnQgdGltZXJfYml0OworCWNoYXIgKmNsazsKKwl1bnNpZ25lZCBsb25nIGNsb2NrZXZlbnRfcmF0aW5nOworCXVuc2lnbmVkIGxvbmcgY2xvY2tzb3VyY2VfcmF0aW5nOworfTsKKworI2VuZGlmIC8qIF9fU0hfQ01UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmggYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAppbmRleCA2OGUyMTJmLi5lYjE0MjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtODUsNiArODUsNyBAQAogfQogI2VuZGlmCiAKK3Vuc2lnbmVkIGludCBpbnRjX2V2dDJpcnEodW5zaWduZWQgaW50IHZlY3Rvcik7CiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYyk7CiBpbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA5ZGNmOTU2Li5iYjE5ODFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAKLSNkZWZpbmUgSEFWRV9BTExPQ19TS0IJCS8qIEZvciB0aGUgZHJpdmVycyB0byBrbm93ICovCi0jZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQgkvKiBEaXR0byA4KQkJICAgKi8KLQogLyogRG9uJ3QgY2hhbmdlIHRoaXMgd2l0aG91dCBjaGFuZ2luZyBza2JfY3N1bV91bm5lY2Vzc2FyeSEgKi8KICNkZWZpbmUgQ0hFQ0tTVU1fTk9ORSAwCiAjZGVmaW5lIENIRUNLU1VNX1VOTkVDRVNTQVJZIDEKQEAgLTEzNSw2ICsxMzIsNTUgQEAKIAlfX3UzMiBzaXplOwogfTsKIAorI2RlZmluZSBIQVZFX0hXX1RJTUVfU1RBTVAKKworLyoqCisgKiBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgLSBoYXJkd2FyZSB0aW1lIHN0YW1wcworICogQGh3dHN0YW1wOgloYXJkd2FyZSB0aW1lIHN0YW1wIHRyYW5zZm9ybWVkIGludG8gZHVyYXRpb24KKyAqCQlzaW5jZSBhcmJpdHJhcnkgcG9pbnQgaW4gdGltZQorICogQHN5c3RzdGFtcDoJaHd0c3RhbXAgdHJhbnNmb3JtZWQgdG8gc3lzdGVtIHRpbWUgYmFzZQorICoKKyAqIFNvZnR3YXJlIHRpbWUgc3RhbXBzIGdlbmVyYXRlZCBieSBrdGltZV9nZXRfcmVhbCgpIGFyZSBzdG9yZWQgaW4KKyAqIHNrYi0+dHN0YW1wLiBUaGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IGtpbmRzIG9mIHRpbWUKKyAqIHN0YW1wcyBpcyBhcyBmb2xsb3dzOgorICoKKyAqIHN5c3RzdGFtcCBhbmQgdHN0YW1wIGNhbiBiZSBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggb3RoZXIgaW4KKyAqIGFyYml0cmFyeSBjb21iaW5hdGlvbnMuICBUaGUgYWNjdXJhY3kgb2YgYQorICogc3lzdHN0YW1wL3RzdGFtcC8ic3lzdHN0YW1wIGZyb20gb3RoZXIgZGV2aWNlIiBjb21wYXJpc29uIGlzCisgKiBsaW1pdGVkIGJ5IHRoZSBhY2N1cmFjeSBvZiB0aGUgdHJhbnNmb3JtYXRpb24gaW50byBzeXN0ZW0gdGltZQorICogYmFzZS4gVGhpcyBkZXBlbmRzIG9uIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCBpdHMgdW5kZXJseWluZworICogaGFyZHdhcmUuCisgKgorICogaHd0c3RhbXBzIGNhbiBvbmx5IGJlIGNvbXBhcmVkIGFnYWluc3Qgb3RoZXIgaHd0c3RhbXBzIGZyb20KKyAqIHRoZSBzYW1lIGRldmljZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCisgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX2h3dHN0YW1wcygpIHRvIGdldCBhIHBvaW50ZXIuCisgKi8KK3N0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyB7CisJa3RpbWVfdAlod3RzdGFtcDsKKwlrdGltZV90CXN5c3RzdGFtcDsKK307CisKKy8qKgorICogc3RydWN0IHNrYl9zaGFyZWRfdHggLSBpbnN0cnVjdGlvbnMgZm9yIHRpbWUgc3RhbXBpbmcgb2Ygb3V0Z29pbmcgcGFja2V0cworICogQGhhcmR3YXJlOgkJZ2VuZXJhdGUgaGFyZHdhcmUgdGltZSBzdGFtcAorICogQHNvZnR3YXJlOgkJZ2VuZXJhdGUgc29mdHdhcmUgdGltZSBzdGFtcAorICogQGluX3Byb2dyZXNzOglkZXZpY2UgZHJpdmVyIGlzIGdvaW5nIHRvIHByb3ZpZGUKKyAqCQkJaGFyZHdhcmUgdGltZSBzdGFtcAorICoKKyAqIFRoZXNlIGZsYWdzIGFyZSBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCisgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX3R4KCkgdG8gZ2V0IGEgcG9pbnRlci4KKyAqLwordW5pb24gc2tiX3NoYXJlZF90eCB7CisJc3RydWN0IHsKKwkJX191OAloYXJkd2FyZToxLAorCQkJc29mdHdhcmU6MSwKKwkJCWluX3Byb2dyZXNzOjE7CisJfTsKKwlfX3U4IGZsYWdzOworfTsKKwogLyogVGhpcyBkYXRhIGlzIGludmFyaWFudCBhY3Jvc3MgY2xvbmVzIGFuZCBsaXZlcyBhdAogICogdGhlIGVuZCBvZiB0aGUgaGVhZGVyIGRhdGEsIGllLiBhdCBza2ItPmVuZC4KICAqLwpAQCAtMTQ2LDEwICsxOTIsMTIgQEAKIAl1bnNpZ25lZCBzaG9ydAlnc29fc2VnczsKIAl1bnNpZ25lZCBzaG9ydCAgZ3NvX3R5cGU7CiAJX19iZTMyICAgICAgICAgIGlwNl9mcmFnX2lkOworCXVuaW9uIHNrYl9zaGFyZWRfdHggdHhfZmxhZ3M7CiAjaWZkZWYgQ09ORklHX0hBU19ETUEKIAl1bnNpZ25lZCBpbnQJbnVtX2RtYV9tYXBzOwogI2VuZGlmCiAJc3RydWN0IHNrX2J1ZmYJKmZyYWdfbGlzdDsKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgaHd0c3RhbXBzOwogCXNrYl9mcmFnX3QJZnJhZ3NbTUFYX1NLQl9GUkFHU107CiAjaWZkZWYgQ09ORklHX0hBU19ETUEKIAlkbWFfYWRkcl90CWRtYV9tYXBzW01BWF9TS0JfRlJBR1MgKyAxXTsKQEAgLTM3Myw2ICs0MjEsNyBAQAogI2VuZGlmCiAKIGV4dGVybiB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGNvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJICAgICAgIF9fa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwKIAkJCQkgICBnZnBfdCBwcmlvcml0eSwgaW50IGZjbG9uZSwgaW50IG5vZGUpOwpAQCAtNDExLDcgKzQ2MCw4IEBACiBleHRlcm4gaW50CSAgICAgICBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpOwogZXh0ZXJuIGludAkgICAgICAgc2tiX3BhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcGFkKTsKLSNkZWZpbmUgZGV2X2tmcmVlX3NrYihhKQlrZnJlZV9za2IoYSkKKyNkZWZpbmUgZGV2X2tmcmVlX3NrYihhKQljb25zdW1lX3NrYihhKQorI2RlZmluZSBkZXZfY29uc3VtZV9za2IoYSkJa2ZyZWVfc2tiX2NsZWFuKGEpCiBleHRlcm4gdm9pZAkgICAgICBza2Jfb3Zlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuLAogCQkJCSAgICAgdm9pZCAqaGVyZSk7CiBleHRlcm4gdm9pZAkgICAgICBza2JfdW5kZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwKQEAgLTQ1OSw2ICs1MDksMTYgQEAKIC8qIEludGVybmFsICovCiAjZGVmaW5lIHNrYl9zaGluZm8oU0tCKQkoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoc2tiX2VuZF9wb2ludGVyKFNLQikpKQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqc2tiX2h3dHN0YW1wcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAmc2tiX3NoaW5mbyhza2IpLT5od3RzdGFtcHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5pb24gc2tiX3NoYXJlZF90eCAqc2tiX3R4KHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuICZza2Jfc2hpbmZvKHNrYiktPnR4X2ZsYWdzOworfQorCiAvKioKICAqCXNrYl9xdWV1ZV9lbXB0eSAtIGNoZWNrIGlmIGEgcXVldWUgaXMgZW1wdHkKICAqCUBsaXN0OiBxdWV1ZSBoZWFkCkBAIC0xMjc4LDcgKzEzMzgsNyBAQAogICogVGhlIG5ldHdvcmtpbmcgbGF5ZXIgcmVzZXJ2ZXMgc29tZSBoZWFkcm9vbSBpbiBza2IgZGF0YSAodmlhCiAgKiBkZXZfYWxsb2Nfc2tiKS4gVGhpcyBpcyB1c2VkIHRvIGF2b2lkIGhhdmluZyB0byByZWFsbG9jYXRlIHNrYiBkYXRhIHdoZW4KICAqIHRoZSBoZWFkZXIgaGFzIHRvIGdyb3cuIEluIHRoZSBkZWZhdWx0IGNhc2UsIGlmIHRoZSBoZWFkZXIgaGFzIHRvIGdyb3cKLSAqIDE2IGJ5dGVzIG9yIGxlc3Mgd2UgYXZvaWQgdGhlIHJlYWxsb2NhdGlvbi4KKyAqIDMyIGJ5dGVzIG9yIGxlc3Mgd2UgYXZvaWQgdGhlIHJlYWxsb2NhdGlvbi4KICAqCiAgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgaGVhZHJvb20gY2hhbmdlcyB0aGUgRE1BIGFsaWdubWVudCBvZiB0aGUgcmVzdWx0aW5nCiAgKiBuZXR3b3JrIHBhY2tldC4gQXMgZm9yIE5FVF9JUF9BTElHTiwgdGhpcyB1bmFsaWduZWQgRE1BIGlzIGV4cGVuc2l2ZQpAQCAtMTI4NiwxMSArMTM0NiwxMSBAQAogICogcGVyaGFwcyBzZXR0aW5nIGl0IHRvIGEgY2FjaGVsaW5lIGluIHNpemUgKHNpbmNlIHRoYXQgd2lsbCBtYWludGFpbgogICogY2FjaGVsaW5lIGFsaWdubWVudCBvZiB0aGUgRE1BKS4gSXQgbXVzdCBiZSBhIHBvd2VyIG9mIDIuCiAgKgotICogVmFyaW91cyBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBsYXllciBleHBlY3QgYXQgbGVhc3QgMTYgYnl0ZXMgb2YKKyAqIFZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgbGF5ZXIgZXhwZWN0IGF0IGxlYXN0IDMyIGJ5dGVzIG9mCiAgKiBoZWFkcm9vbSwgeW91IHNob3VsZCBub3QgcmVkdWNlIHRoaXMuCiAgKi8KICNpZm5kZWYgTkVUX1NLQl9QQUQKLSNkZWZpbmUgTkVUX1NLQl9QQUQJMTYKKyNkZWZpbmUgTkVUX1NLQl9QQUQJMzIKICNlbmRpZgogCiBleHRlcm4gaW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKTsKQEAgLTE2NzgsOCArMTczOCw2IEBACiAJCQkJIGludCBzaGlmdGxlbik7CiAKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZlYXR1cmVzKTsKLWV4dGVybiBpbnQJICAgICAgIHNrYl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCi0JCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9oZWFkZXJfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAogCQkJCSAgICAgICBpbnQgbGVuLCB2b2lkICpidWZmZXIpCkBAIC0xNzI2LDYgKzE3ODQsMTEgQEAKIAogZXh0ZXJuIHZvaWQgc2tiX2luaXQodm9pZCk7CiAKK3N0YXRpYyBpbmxpbmUga3RpbWVfdCBza2JfZ2V0X2t0aW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+dHN0YW1wOworfQorCiAvKioKICAqCXNrYl9nZXRfdGltZXN0YW1wIC0gZ2V0IHRpbWVzdGFtcCBmcm9tIGEgc2tiCiAgKglAc2tiOiBza2IgdG8gZ2V0IHN0YW1wIGZyb20KQEAgLTE3MzUsMTEgKzE3OTgsMTggQEAKICAqCVRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIG9mZnNldCBiYWNrIHRvIGEgc3RydWN0IHRpbWV2YWwgYW5kIHN0b3JlcwogICoJaXQgaW4gc3RhbXAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ2V0X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGltZXZhbCAqc3RhbXApCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dldF90aW1lc3RhbXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICpzdGFtcCkKIHsKIAkqc3RhbXAgPSBrdGltZV90b190aW1ldmFsKHNrYi0+dHN0YW1wKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNrYl9nZXRfdGltZXN0YW1wbnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjICpzdGFtcCkKK3sKKwkqc3RhbXAgPSBrdGltZV90b190aW1lc3BlYyhza2ItPnRzdGFtcCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlza2ItPnRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CkBAIC0xNzU1LDYgKzE4MjUsMjAgQEAKIAlyZXR1cm4ga3RpbWVfc2V0KDAsIDApOwogfQogCisvKioKKyAqIHNrYl90c3RhbXBfdHggLSBxdWV1ZSBjbG9uZSBvZiBza2Igd2l0aCBzZW5kIHRpbWUgc3RhbXBzCisgKiBAb3JpZ19za2I6CXRoZSBvcmlnaW5hbCBvdXRnb2luZyBwYWNrZXQKKyAqIEBod3RzdGFtcHM6CWhhcmR3YXJlIHRpbWUgc3RhbXBzLCBtYXkgYmUgTlVMTCBpZiBub3QgYXZhaWxhYmxlCisgKgorICogSWYgdGhlIHNrYiBoYXMgYSBzb2NrZXQgYXNzb2NpYXRlZCwgdGhlbiB0aGlzIGZ1bmN0aW9uIGNsb25lcyB0aGUKKyAqIHNrYiAodGh1cyBzaGFyaW5nIHRoZSBhY3R1YWwgZGF0YSBhbmQgb3B0aW9uYWwgc3RydWN0dXJlcyksIHN0b3JlcworICogdGhlIG9wdGlvbmFsIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgaW5mb3JtYXRpb24gKGlmIG5vbiBOVUxMKSBvcgorICogZ2VuZXJhdGVzIGEgc29mdHdhcmUgdGltZSBzdGFtcCAob3RoZXJ3aXNlKSwgdGhlbiBxdWV1ZXMgdGhlIGNsb25lCisgKiB0byB0aGUgZXJyb3IgcXVldWUgb2YgdGhlIHNvY2tldC4gIEVycm9ycyBhcmUgc2lsZW50bHkgaWdub3JlZC4KKyAqLworZXh0ZXJuIHZvaWQgc2tiX3RzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsCisJCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyk7CisKIGV4dGVybiBfX3N1bTE2IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbik7CiBleHRlcm4gX19zdW0xNiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIApAQCAtMTg4NSw3ICsxOTY5LDcgQEAKIAlza2ItPnF1ZXVlX21hcHBpbmcgPSBxdWV1ZV9tYXBwaW5nOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgdTE2IHNrYl9nZXRfcXVldWVfbWFwcGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBza2ItPnF1ZXVlX21hcHBpbmc7CiB9CkBAIC0xODk1LDYgKzE5NzksMjQgQEAKIAl0by0+cXVldWVfbWFwcGluZyA9IGZyb20tPnF1ZXVlX21hcHBpbmc7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVjb3JkX3J4X3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiByeF9xdWV1ZSkKK3sKKwlza2ItPnF1ZXVlX21hcHBpbmcgPSByeF9xdWV1ZSArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHNrYl9nZXRfcnhfcXVldWUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nIC0gMTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNrYl9yeF9xdWV1ZV9yZWNvcmRlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc2tiLT5xdWV1ZV9tYXBwaW5nICE9IDApOworfQorCitleHRlcm4gdTE2IHNrYl90eF9oYXNoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogI2lmZGVmIENPTkZJR19YRlJNCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzZWNfcGF0aCAqc2tiX3NlY19wYXRoKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggMmY1YzE2Yi4uZTM3YjZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtNDYsNyArNDYsNiBAQAogc3RydWN0IGttZW1fY2FjaGVfbm9kZSB7CiAJc3BpbmxvY2tfdCBsaXN0X2xvY2s7CS8qIFByb3RlY3QgcGFydGlhbCBsaXN0IGFuZCBucl9wYXJ0aWFsICovCiAJdW5zaWduZWQgbG9uZyBucl9wYXJ0aWFsOwotCXVuc2lnbmVkIGxvbmcgbWluX3BhcnRpYWw7CiAJc3RydWN0IGxpc3RfaGVhZCBwYXJ0aWFsOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJYXRvbWljX2xvbmdfdCBucl9zbGFiczsKQEAgLTg5LDYgKzg4LDcgQEAKIAl2b2lkICgqY3Rvcikodm9pZCAqKTsKIAlpbnQgaW51c2U7CQkvKiBPZmZzZXQgdG8gbWV0YWRhdGEgKi8KIAlpbnQgYWxpZ247CQkvKiBBbGlnbm1lbnQgKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9wYXJ0aWFsOwogCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE5hbWUgKG9ubHkgZm9yIGRpc3BsYXkhKSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogTGlzdCBvZiBzbGFiIGNhY2hlcyAqLwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCkBAIC0xMjEsMTAgKzEyMSwyMyBAQAogI2RlZmluZSBLTUFMTE9DX1NISUZUX0xPVyBpbG9nMihLTUFMTE9DX01JTl9TSVpFKQogCiAvKgorICogTWF4aW11bSBrbWFsbG9jIG9iamVjdCBzaXplIGhhbmRsZWQgYnkgU0xVQi4gTGFyZ2VyIG9iamVjdCBhbGxvY2F0aW9ucworICogYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBwYWdlIGFsbG9jYXRvci4gVGhlIHBhZ2UgYWxsb2NhdG9yICJmYXN0cGF0aCIKKyAqIGlzIHJlbGF0aXZlbHkgc2xvdyBzbyB3ZSBuZWVkIHRoaXMgdmFsdWUgc3VmZmljaWVudGx5IGhpZ2ggc28gdGhhdAorICogcGVyZm9ybWFuY2UgY3JpdGljYWwgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHRocm91Z2ggdGhlIFNMVUIgZmFzdHBhdGguCisgKgorICogVGhpcyBzaG91bGQgYmUgZHJvcHBlZCB0byBQQUdFX1NJWkUgLyAyIG9uY2UgdGhlIHBhZ2UgYWxsb2NhdG9yCisgKiAiZmFzdHBhdGgiIGJlY29tZXMgY29tcGV0aXRpdmUgd2l0aCB0aGUgc2xhYiBhbGxvY2F0b3IgZmFzdHBhdGhzLgorICovCisjZGVmaW5lIFNMVUJfTUFYX1NJWkUgKDIgKiBQQUdFX1NJWkUpCisKKyNkZWZpbmUgU0xVQl9QQUdFX1NISUZUIChQQUdFX1NISUZUICsgMikKKworLyoKICAqIFdlIGtlZXAgdGhlIGdlbmVyYWwgY2FjaGVzIGluIGFuIGFycmF5IG9mIHNsYWIgY2FjaGVzIHRoYXQgYXJlIHVzZWQgZm9yCiAgKiAyXnggYnl0ZXMgb2YgYWxsb2NhdGlvbnMuCiAgKi8KLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tQQUdFX1NISUZUICsgMV07CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbU0xVQl9QQUdFX1NISUZUXTsKIAogLyoKICAqIFNvcnJ5IHRoYXQgdGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdGhhdCB1Z2x5IGJ1dCBzb21lIHZlcnNpb25zIG9mIEdDQwpAQCAtMjEyLDcgKzIyNSw3IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkgewotCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJaWYgKHNpemUgPiBTTFVCX01BWF9TSVpFKQogCQkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZmxhZ3MpOwogCiAJCWlmICghKGZsYWdzICYgU0xVQl9ETUEpKSB7CkBAIC0yMzQsNyArMjQ3LDcgQEAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmCi0JCXNpemUgPD0gUEFHRV9TSVpFICYmICEoZmxhZ3MgJiBTTFVCX0RNQSkpIHsKKwkJc2l6ZSA8PSBTTFVCX01BWF9TSVpFICYmICEoZmxhZ3MgJiBTTFVCX0RNQSkpIHsKIAkJCXN0cnVjdCBrbWVtX2NhY2hlICpzID0ga21hbGxvY19zbGFiKHNpemUpOwogCiAJCWlmICghcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaCBiL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAppbmRleCAxY2JmMDMxLi5iMzI3MjUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCkBAIC00Myw1ICs0Myw4IEBACiAvKiBDb25zdGFudHMgZm9yIGZsYWdzICovCiAjZGVmaW5lIFNNU0M5MTFYX1VTRV8xNkJJVCAJCQkoQklUKDApKQogI2RlZmluZSBTTVNDOTExWF9VU0VfMzJCSVQgCQkJKEJJVCgxKSkKKyNkZWZpbmUgU01TQzkxMVhfRk9SQ0VfSU5URVJOQUxfUEhZCQkoQklUKDIpKQorI2RlZmluZSBTTVNDOTExWF9GT1JDRV9FWFRFUk5BTF9QSFkgCQkoQklUKDMpKQorI2RlZmluZSBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTCQkoQklUKDQpKQogCiAjZW5kaWYgLyogX19MSU5VWF9TTVNDOTExWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCmluZGV4IDIwZmM0YmIuLjQyMWFmYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaApAQCAtMjQsMTAgKzI0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIHBpZF90CQkJKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkJLyogX191c2VyCQkJKi8KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgX19LRVJORUxfXworIyBpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RydWN0IHNlcV9maWxlOwogZXh0ZXJuIHZvaWQgc29ja2V0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKTsKLSNlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlzYV9mYW1pbHlfdDsKIApAQCAtMTc5LDYgKzE4MSw3IEBACiAjZGVmaW5lIEFGX0FTSAkJMTgJLyogQXNoCQkJCSovCiAjZGVmaW5lIEFGX0VDT05FVAkxOQkvKiBBY29ybiBFY29uZXQJCQkqLwogI2RlZmluZSBBRl9BVE1TVkMJMjAJLyogQVRNIFNWQ3MJCQkqLworI2RlZmluZSBBRl9SRFMJCTIxCS8qIFJEUyBzb2NrZXRzIAkJCSovCiAjZGVmaW5lIEFGX1NOQQkJMjIJLyogTGludXggU05BIFByb2plY3QgKG51dHRlcnMhKSAqLwogI2RlZmluZSBBRl9JUkRBCQkyMwkvKiBJUkRBIHNvY2tldHMJCQkqLwogI2RlZmluZSBBRl9QUFBPWAkyNAkvKiBQUFBvWCBzb2NrZXRzCQkqLwpAQCAtMjE3LDYgKzIyMCw3IEBACiAjZGVmaW5lIFBGX0FTSAkJQUZfQVNICiAjZGVmaW5lIFBGX0VDT05FVAlBRl9FQ09ORVQKICNkZWZpbmUgUEZfQVRNU1ZDCUFGX0FUTVNWQworI2RlZmluZSBQRl9SRFMJCUFGX1JEUwogI2RlZmluZSBQRl9TTkEJCUFGX1NOQQogI2RlZmluZSBQRl9JUkRBCQlBRl9JUkRBCiAjZGVmaW5lIFBGX1BQUE9YCUFGX1BQUE9YCkBAIC0yOTgsNiArMzAyLDcgQEAKICNkZWZpbmUgU09MX1BQUE9MMlRQCTI3MwogI2RlZmluZSBTT0xfQkxVRVRPT1RICTI3NAogI2RlZmluZSBTT0xfUE5QSVBFCTI3NQorI2RlZmluZSBTT0xfUkRTCQkyNzYKIAogLyogSVBYIG9wdGlvbnMgKi8KICNkZWZpbmUgSVBYX1RZUEUJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NraW9zLmggYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAppbmRleCBhYmVmNzU5Li4yNDFmMTc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaApAQCAtMTIyLDYgKzEyMiw5IEBACiAjZGVmaW5lIFNJT0NCUkFERElGCTB4ODlhMgkJLyogYWRkIGludGVyZmFjZSB0byBicmlkZ2UgICAgICAqLwogI2RlZmluZSBTSU9DQlJERUxJRgkweDg5YTMJCS8qIHJlbW92ZSBpbnRlcmZhY2UgZnJvbSBicmlkZ2UgKi8KIAorLyogaGFyZHdhcmUgdGltZSBzdGFtcGluZzogcGFyYW1ldGVycyBpbiBsaW51eC9uZXRfdHN0YW1wLmggKi8KKyNkZWZpbmUgU0lPQ1NIV1RTVEFNUCAgIDB4ODliMAorCiAvKiBEZXZpY2UgcHJpdmF0ZSBpb2N0bCBjYWxscyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbGliZXJ0YXNfc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTUwNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvbGliZXJ0YXNfc3BpLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGJvYXJkLXNwZWNpZmljIGRhdGEgZm9yIHRoZSBsaWJlcnRhc19zcGkgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9MSUJFUlRBU19TUElfSF8KKyNkZWZpbmUgX0xJQkVSVEFTX1NQSV9IXworCitzdHJ1Y3Qgc3BpX2RldmljZTsKKworc3RydWN0IGxpYmVydGFzX3NwaV9wbGF0Zm9ybV9kYXRhIHsKKwkvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gcmVhZCBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlJ3MgU1BJCisJICogaW50ZXJmYWNlLiBTZXR0aW5nIDAgb3IgMSBoZXJlIGNvbnRyb2xzIHdoaWNoIG9uZSBpcyB1c2VkLgorCSAqCisJICogVXN1YWxseSB5b3Ugd2FudCB0byBzZXQgdXNlX2R1bW15X3dyaXRlcyA9IDEuCisJICogSG93ZXZlciwgaWYgdGhhdCBkb2Vzbid0IHdvcmsgb3IgaWYgeW91IGFyZSB1c2luZyBhIHNsb3cgU1BJIGNsb2NrCisJICogc3BlZWQsIHlvdSBtYXkgd2FudCB0byB1c2UgMCBoZXJlLiAqLworCXUxNiB1c2VfZHVtbXlfd3JpdGVzOworCisJLyogR1BJTyBudW1iZXIgdG8gdXNlIGFzIGNoaXAgc2VsZWN0ICovCisJdTE2IGdwaW9fY3M7CisKKwkvKiBCb2FyZCBzcGVjaWZpYyBzZXR1cC90ZWFyZG93biAqLworCWludCAoKnNldHVwKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKKwlpbnQgKCp0ZWFyZG93bikoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSk7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDE3ZDliNTguLjVhZThmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC0zMzksNiArMzM5LDEwIEBACiAKIGV4dGVybiB2b2lkIHNzYl9idXNfdW5yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKIAorLyogU2V0IGEgZmFsbGJhY2sgU1BST00uCisgKiBTZWUga2RvYyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbi4gKi8KK2V4dGVybiBpbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKTsKKwogLyogU3VzcGVuZCBhIFNTQiBidXMuCiAgKiBDYWxsIHRoaXMgZnJvbSB0aGUgcGFyZW50IGJ1cyBzdXNwZW5kIHJvdXRpbmUuICovCiBleHRlcm4gaW50IHNzYl9idXNfc3VzcGVuZChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKaW5kZXggN2Q3ZTAzZC4uZDNiMWQxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKQEAgLTE4MSw2ICsxODEsMTYgQEAKICNkZWZpbmUgU1NCX0NISVBDT19QUk9HX1dBSVRDTlQJCTB4MDEyNAogI2RlZmluZSBTU0JfQ0hJUENPX0ZMQVNIX0NGRwkJMHgwMTI4CiAjZGVmaW5lIFNTQl9DSElQQ09fRkxBU0hfV0FJVENOVAkweDAxMkMKKyNkZWZpbmUgU1NCX0NISVBDT19DTEtDVExTVAkJMHgwMUUwIC8qIENsb2NrIGNvbnRyb2wgYW5kIHN0YXR1cyAocmV2ID49IDIwKSAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9GT1JDRUFMUAkweDAwMDAwMDAxIC8qIEZvcmNlIEFMUCByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFSFQJMHgwMDAwMDAwMiAvKiBGb3JjZSBIVCByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFSUxQCTB4MDAwMDAwMDQgLyogRm9yY2UgSUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUFMUFJFUQkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFRSRVEJMHgwMDAwMDAxMCAvKiBIVCBhdmFpbGFibGUgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IV0NST0ZGCTB4MDAwMDAwMjAgLyogRm9yY2UgSFcgY2xvY2sgcmVxdWVzdCBvZmYgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUCTB4MDAwMTAwMDAgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVBTFAJMHgwMDAyMDAwMCAvKiBBUEwgYXZhaWxhYmxlICovCisjZGVmaW5lIFNTQl9DSElQQ09fSFdfV09SS0FST1VORAkweDAxRTQgLyogSGFyZHdhcmUgd29ya2Fyb3VuZCAocmV2ID49IDIwKSAqLwogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQwX0RBVEEJCTB4MDMwMAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQwX0lNUgkJMHgwMzA0CiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfRkNSCQkweDAzMDgKQEAgLTE5Nyw2ICsyMDcsMTk2IEBACiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDFfTFNSCQkweDA0MTQKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMV9NU1IJCTB4MDQxOAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQxX1NDUkFUQ0gJMHgwNDFDCisvKiBQTVUgcmVnaXN0ZXJzIChyZXYgPj0gMjApICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NUTAkJCTB4MDYwMCAvKiBQTVUgY29udHJvbCAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVYJCTB4RkZGRjAwMDAgLyogSUxQIGRpdiBtYXNrICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVl9TSElGVAkxNgorI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX05PSUxQT05XCQkweDAwMDAwMjAwIC8qIE5vIElMUCBvbiB3YWl0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSFRSRVFFTgkJMHgwMDAwMDEwMCAvKiBIVCByZXEgZW5hYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfQUxQUkVRRU4JCTB4MDAwMDAwODAgLyogQUxQIHJlcSBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUQkJMHgwMDAwMDA3QyAvKiBDcnlzdGFsIGZyZXEgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVAkyCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQRElWRU4JCTB4MDAwMDAwMDIgLyogSUxQIGRpdiBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9MUE9TRUwJCTB4MDAwMDAwMDEgLyogTFBPIHNlbCAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9DQVAJCQkweDA2MDQgLyogUE1VIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ0FQX1JFVklTSU9OCQkweDAwMDAwMEZGIC8qIFJldmlzaW9uIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfU1RBVAkJCTB4MDYwOCAvKiBQTVUgc3RhdHVzICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX0lOVFBFTkQJCTB4MDAwMDAwNDAgLyogSW50ZXJydXB0IHBlbmRpbmcgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfU0JDTEtTVAkJMHgwMDAwMDAzMCAvKiBCYWNrcGxhbmUgY2xvY2sgc3RhdHVzPyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9IQVZFQUxQCQkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfSEFWRUhUCQkweDAwMDAwMDA0IC8qIEhUIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9SRVNJTklUCQkweDAwMDAwMDAzIC8qIFJlcyBpbml0ICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19TVEFUCQkJMHgwNjBDIC8qIFBNVSByZXMgc3RhdHVzICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19QRU5ECQkJMHgwNjEwIC8qIFBNVSByZXMgcGVuZGluZyAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9USU1FUgkJCTB4MDYxNCAvKiBQTVUgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSwkJMHgwNjE4IC8qIFBNVSBtaW4gcmVzIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSwkJMHgwNjFDIC8qIFBNVSBtYXggcmVzIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1RBQlNFTAkJMHgwNjIwIC8qIFBNVSByZXMgdGFibGUgc2VsICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19ERVBNU0sJCTB4MDYyNCAvKiBQTVUgcmVzIGRlcCBtYXNrICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19VUEROVE0JCTB4MDYyOCAvKiBQTVUgcmVzIHVwZG93biB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfVElNRVIJCTB4MDYyQyAvKiBQTVUgcmVzIHRpbWVyICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NMS1NUUkVUQ0gJCTB4MDYzMCAvKiBQTVUgY2xvY2tzdHJldGNoICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1dBVENIRE9HCQkJMHgwNjM0IC8qIFBNVSB3YXRjaGRvZyAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRVFMJCTB4MDY0MCAvKiBQTVUgcmVzIHJlcSB0aW1lciBzZWwgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1JFUVQJCQkweDA2NDQgLyogUE1VIHJlcyByZXEgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1JFUU0JCQkweDA2NDggLyogUE1VIHJlcyByZXEgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NISVBDVExfQUREUgkJCTB4MDY1MAorI2RlZmluZSBTU0JfQ0hJUENPX0NISVBDVExfREFUQQkJCTB4MDY1NAorI2RlZmluZSBTU0JfQ0hJUENPX1JFR0NUTF9BRERSCQkJMHgwNjU4CisjZGVmaW5lIFNTQl9DSElQQ09fUkVHQ1RMX0RBVEEJCQkweDA2NUMKKyNkZWZpbmUgU1NCX0NISVBDT19QTExDVExfQUREUgkJCTB4MDY2MAorI2RlZmluZSBTU0JfQ0hJUENPX1BMTENUTF9EQVRBCQkJMHgwNjY0CisKKworCisvKiogUE1VIFBMTCByZWdpc3RlcnMgKi8KKworLyogUE1VIHJldiAwIFBMTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1NCX1BNVTBfUExMQ1RMMAkJCTAKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDBfUERJVl9NU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDBfUERJVl9GUkVRCQkyNTAwMCAvKiBrSHogKi8KKyNkZWZpbmUgU1NCX1BNVTBfUExMQ1RMMQkJCTEKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLCQkweEYwMDAwMDAwIC8qIFdpbGQgaW50IG1hc2sgKGxvdyBuaWJibGUpICovCisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TS19TSElGVAkyOAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0sJCTB4MEZGRkZGMDAgLyogV2lsZCBmcmFjIG1hc2sgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9GTVNLX1NISUZUCTgKKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfU1RPUE1PRAkJMHgwMDAwMDA0MCAvKiBTdG9wIG1vZCAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwyCQkJMgorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISQkJMHgwMDAwMDAwRiAvKiBXaWxkIGludCBtYXNrIChoaWdoIG5pYmJsZSkgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSElfU0hJRlQJMAorCisvKiBQTVUgcmV2IDEgUExMIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU0JfUE1VMV9QTExDVEwwCQkJMAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMF9QMURJVgkJCTB4MDBGMDAwMDAgLyogUDEgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AxRElWX1NISUZUCQkyMAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMF9QMkRJVgkJCTB4MEYwMDAwMDAgLyogUDIgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AyRElWX1NISUZUCQkyNAorI2RlZmluZSBTU0JfUE1VMV9QTExDVEwxCQkJMQorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NMURJVgkJCTB4MDAwMDAwRkYgLyogTTEgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00xRElWX1NISUZUCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00yRElWCQkJMHgwMDAwRkYwMCAvKiBNMiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTJESVZfU0hJRlQJCTgKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTNESVYJCQkweDAwRkYwMDAwIC8qIE0zIGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NM0RJVl9TSElGVAkJMTYKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTRESVYJCQkweEZGMDAwMDAwIC8qIE00IGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NNERJVl9TSElGVAkJMjQKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMMgkJCTIKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTTVESVYJCQkweDAwMDAwMEZGIC8qIE01IGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNURJVl9TSElGVAkJMAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNkRJVgkJCTB4MDAwMEZGMDAgLyogTTYgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX002RElWX1NISUZUCQk4CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFCQkweDAwMEUwMDAwIC8qIE5ESVYgbW9kZSAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERV9TSElGVAkxNworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UCQkweDFGRjAwMDAwIC8qIE5ESVYgaW50ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlRfU0hJRlQJCTIwCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDMJCQkzCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDCQkweDAwRkZGRkZGIC8qIE5ESVYgZnJhYyAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMM19ORElWRlJBQ19TSElGVAkwCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDQJCQk0CisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDUJCQk1CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVgkJMHhGRkZGRkYwMCAvKiBjbGsgZHJ2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVl9TSElGVAkJOAorCisvKiBCQ000MzEyIFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfU1dJVENIRVJfQlVSU1QJCTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX1NXSVRDSEVSX1BXTSAgICAJMQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUEFfUkVGX0xETwkJMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQ09SRV9MRE9fQlVSU1QJCTMKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0NPUkVfTERPX1BXTQkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUkFESU9fTERPCQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9JTFBfUkVRVUVTVAkJNgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQkdfRklMVEJZUAkJNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfVFhfRklMVEJZUAkJOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUlhfRklMVEJZUAkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfWFRBTF9QVQkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9BTFBfQVZBSUwJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9CQl9QTExfRklMVEJZUAkJMTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX1JGX1BMTF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfSFRfQVZBSUwJCTE0CisKKy8qIEJDTTQzMjUgUExMIHJlc291cmNlIG51bWJlcnMuICovCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9CVUNLX0JPT1NUX0JVUlNUCTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NCVUNLX0JVUlNUCQkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9DQlVDS19QV00JCTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NMRE9fQ0JVQ0tfQlVSU1QJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0xET19DQlVDS19QV00JCTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0JVQ0tfQk9PU1RfUFdNCQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9JTFBfUkVRVUVTVAkJNgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUJVQ0tfQlVSU1QJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0FCVUNLX1BXTQkJOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfTE5MRE8xX1BVCQk5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzJfUFUJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzNfUFUJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzRfUFUJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9YVEFMX1BVCQkJMTMKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0FMUF9BVkFJTAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1JYX1BXUlNXX1BVCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfVFhfUFdSU1dfUFUJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9SRlBMTF9QV1JTV19QVQkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xPR0VOX1BXUlNXX1BVCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUZFX1BXUlNXX1BVCQkxOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQkJQTExfUFdSU1dfUFUJCTIwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTAkJMjEKKworLyogQkNNNDMyOCBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0VYVF9TV0lUQ0hFUl9QV00JMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfU1dJVENIRVJfUFdNCQkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9CVVJTVAkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9FWFRfU1dJVENIRVJfQlVSU1QJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfSUxQX1JFUVVFU1QJCTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX1BXTQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9SQURJT19TV0lUQ0hFUl9CVVJTVAk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9ST01fU1dJVENICQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9QQV9SRUZfTERPCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9SQURJT19MRE8JCTkKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0FGRV9MRE8JCQkxMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUExMX0xETwkJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CR19GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfVFhfRklMVEJZUAkJMTMKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JYX0ZJTFRCWVAJCTE0CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9YVEFMX1BVCQkJMTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1hUQUxfRU4JCQkxNgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX0ZJTFRCWVAJCTE3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9SRl9QTExfRklMVEJZUAkJMTgKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVQkJMTkKKworLyogQkNNNTM1NCBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0VYVF9TV0lUQ0hFUl9QV00JMAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfU1dJVENIRVJfUFdNCQkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9TV0lUQ0hFUl9CVVJTVAkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9FWFRfU1dJVENIRVJfQlVSU1QJMworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfSUxQX1JFUVVFU1QJCTQKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX1NXSVRDSEVSX1BXTQk1CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9SQURJT19TV0lUQ0hFUl9CVVJTVAk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9ST01fU1dJVENICQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9QQV9SRUZfTERPCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9SQURJT19MRE8JCTkKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0FGRV9MRE8JCQkxMAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUExMX0xETwkJCTExCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CR19GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfVFhfRklMVEJZUAkJMTMKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JYX0ZJTFRCWVAJCTE0CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9YVEFMX1BVCQkJMTUKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1hUQUxfRU4JCQkxNgorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX0ZJTFRCWVAJCTE3CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9SRl9QTExfRklMVEJZUAkJMTgKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX1BMTF9QVQkJMTkKKworCisKKy8qKiBDaGlwIHNwZWNpZmljIENoaXAtU3RhdHVzIHJlZ2lzdGVyIGNvbnRlbnRzLiAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TUFJPTV9PVFBfU0VMCTB4MDAwMDAwMDMKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfREVGQ0lTX1NFTAkJMCAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgdXNlIGRlZi4gQ0lTLCBubyBTUFJPTSAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TUFJPTV9TRUwJCTEgLyogT1RQIGlzIHBvd2VyZWQgdXAsIFNQUk9NIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfT1RQX1NFTAkJMiAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgbm8gU1BST00gKi8KKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfT1RQX1BXUkROCQkzIC8qIE9UUCBpcyBwb3dlcmVkIGRvd24sIFNQUk9NIGlzIHByZXNlbnQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfU0RJT19VU0JfTU9ERQkweDAwMDAwMDA0CisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NESU9fVVNCX01PREVfU0hJRlQgIDIKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfUkNBTF9WQUxJRAkJMHgwMDAwMDAwOAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTElEX1NISUZUCTMKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfUkNBTF9WQUxVRQkJMHgwMDAwMDFGMAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTFVFX1NISUZUCTQKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfUE1VVE9QXzJCIAkJMHgwMDAwMDIwMCAvKiAxIGZvciAyYiwgMCBmb3IgdG8gMmEgKi8KIAogCiAKQEAgLTM1MywxMSArNTUzLDIwIEBACiBzdHJ1Y3Qgc3NiX2RldmljZTsKIHN0cnVjdCBzc2Jfc2VyaWFsX3BvcnQ7CiAKKy8qIERhdGEgZm9yIHRoZSBQTVUsIGlmIGF2YWlsYWJsZS4KKyAqIENoZWNrIGF2YWlsYWJpbGl0eSB3aXRoICgoc3RydWN0IHNzYl9jaGlwY29tbW9uKS0+Y2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKQorICovCitzdHJ1Y3Qgc3NiX2NoaXBjb21tb25fcG11IHsKKwl1OCByZXY7CQkJLyogUE1VIHJldmlzaW9uICovCisJdTMyIGNyeXN0YWxmcmVxOwkvKiBUaGUgYWN0aXZlIGNyeXN0YWwgZnJlcXVlbmN5IChpbiBrSHopICovCit9OworCiBzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gewogCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7CiAJdTMyIGNhcGFiaWxpdGllczsKIAkvKiBGYXN0IFBvd2VydXAgRGVsYXkgY29uc3RhbnQgKi8KIAl1MTYgZmFzdF9wd3J1cF9kZWxheTsKKwlzdHJ1Y3Qgc3NiX2NoaXBjb21tb25fcG11IHBtdTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzc2JfY2hpcGNvX2F2YWlsYWJsZShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQpAQCAtMzY1LDYgKzU3NCwxNyBAQAogCXJldHVybiAoY2MtPmRldiAhPSBOVUxMKTsKIH0KIAorLyogUmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkJc3NiX3JlYWQzMigoY2MpLT5kZXYsIG9mZnNldCkKKyNkZWZpbmUgY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgdmFsKQlzc2Jfd3JpdGUzMigoY2MpLT5kZXYsIG9mZnNldCwgdmFsKQorCisjZGVmaW5lIGNoaXBjb19tYXNrMzIoY2MsIG9mZnNldCwgbWFzaykgXAorCQljaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCBjaGlwY29fcmVhZDMyKGNjLCBvZmZzZXQpICYgKG1hc2spKQorI2RlZmluZSBjaGlwY29fc2V0MzIoY2MsIG9mZnNldCwgc2V0KSBcCisJCWNoaXBjb193cml0ZTMyKGNjLCBvZmZzZXQsIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgfCAoc2V0KSkKKyNkZWZpbmUgY2hpcGNvX21hc2tzZXQzMihjYywgb2Zmc2V0LCBtYXNrLCBzZXQpIFwKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgKGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpIHwgKHNldCkpCisKIGV4dGVybiB2b2lkIHNzYl9jaGlwY29tbW9uX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYyk7CiAKIGV4dGVybiB2b2lkIHNzYl9jaGlwY29fc3VzcGVuZChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKQEAgLTQwNiw0ICs2MjYsOCBAQAogCQkJCSAgc3RydWN0IHNzYl9zZXJpYWxfcG9ydCAqcG9ydHMpOwogI2VuZGlmIC8qIENPTkZJR19TU0JfU0VSSUFMICovCiAKKy8qIFBNVSBzdXBwb3J0ICovCitleHRlcm4gdm9pZCBzc2JfcG11X2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYyk7CisKKwogI2VuZGlmIC8qIExJTlVYX1NTQl9DSElQQ09fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCmluZGV4IDk5YTBmOTkuLmEwMWI5ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaApAQCAtMzI2LDYgKzMyNiw0MiBAQAogI2RlZmluZSAgU1NCX1NQUk9NNV9HUElPQl9QMwkJMHhGRjAwCS8qIFBpbiAzICovCiAjZGVmaW5lICBTU0JfU1BST001X0dQSU9CX1AzX1NISUZUCTgKIAorLyogU1BST00gUmV2aXNpb24gOCAqLworI2RlZmluZSBTU0JfU1BST004X0JGTExPCQkweDEwODQJLyogQm9hcmRmbGFncyAobG93IDE2IGJpdHMpICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMSEkJCTB4MTA4NgkvKiBCb2FyZGZsYWdzIEhpICovCisjZGVmaW5lIFNTQl9TUFJPTThfSUwwTUFDCQkweDEwOEMJLyogNiBieXRlIE1BQyBhZGRyZXNzICovCisjZGVmaW5lIFNTQl9TUFJPTThfQ0NPREUJCTB4MTA5MgkvKiAyIGJ5dGUgY291bnRyeSBjb2RlICovCisjZGVmaW5lIFNTQl9TUFJPTThfQU5UQVZBSUwJCTB4MTA5QyAgLyogQW50ZW5uYSBhdmFpbGFibGUgYml0ZmllbGRzKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTF9BCQkweEZGMDAJLyogQS1QSFkgYml0ZmllbGQgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTF9BX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTF9CRwkJMHgwMEZGCS8qIEItUEhZIGFuZCBHLVBIWSBiaXRmaWVsZCAqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0JHX1NISUZUCTAKKyNkZWZpbmUgU1NCX1NQUk9NOF9BR0FJTjAxCQkweDEwOUUJLyogQW50ZW5uYSBHYWluIChpbiBkQm0gUTUuMikgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4wCQkweDAwRkYJLyogQW50ZW5uYSAwICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMF9TSElGVAkwCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMQkJMHhGRjAwCS8qIEFudGVubmEgMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0FHQUlOMjMJCTB4MTBBMAorI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjIJCTB4MDBGRgkvKiBBbnRlbm5hIDIgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4yX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4zCQkweEZGMDAJLyogQW50ZW5uYSAzICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOM19TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfR1BJT0EJCTB4MTA5NgkvKkdlbi4gUHVycG9zZSBJTyAjIDAgYW5kIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0FfUDAJCTB4MDBGRgkvKiBQaW4gMCAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQV9QMQkJMHhGRjAwCS8qIFBpbiAxICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9BX1AxX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9HUElPQgkJMHgxMDk4CS8qIEdlbi4gUHVycG9zZSBJTyAjIDIgYW5kIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDIJCTB4MDBGRgkvKiBQaW4gMiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QMwkJMHhGRjAwCS8qIFBpbiAzICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AzX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9NQVhQX0JHCQkweDEwQzAgIC8qIE1heCBQb3dlciBCRyBpbiBwYXRoIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9CR19NQVNLCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIEJHICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0JHCQkweEZGMDAJLyogTWFzayBmb3IgcGF0aCAxIGl0c3NpX2JnICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0JHX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9NQVhQX0EJCTB4MTBDOCAgLyogTWF4IFBvd2VyIEEgaW4gcGF0aCAxICovCisjZGVmaW5lICBTU0JfU1BST004X01BWFBfQV9NQVNLCQkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciBBICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0EJCTB4RkYwMAkvKiBNYXNrIGZvciBwYXRoIDEgaXRzc2lfYSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9JVFNTSV9BX1NISUZUCTgKIAogLyogVmFsdWVzIGZvciBTU0JfU1BST00xX0JJTkZfQ0NPREUgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCmluZGV4IDJjNmZhZWMuLjBiMzAzODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKQEAgLTEsMTQgKzEsMTUgQEAKICNpZm5kZWYgX0xJTlVYX1NVU1BFTkRfSU9DVExTX0gKICNkZWZpbmUgX0xJTlVYX1NVU1BFTkRfSU9DVExTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwYXNzIHRoZSB2YWx1ZXMgbmVlZGVkIGZvciB0aGUgaWRlbnRpZmljYXRpb24KICAqIG9mIHRoZSByZXN1bWUgc3dhcCBhcmVhIGZyb20gYSB1c2VyIHNwYWNlIHRvIHRoZSBrZXJuZWwgdmlhIHRoZQogICogU05BUFNIT1RfU0VUX1NXQVBfQVJFQSBpb2N0bAogICovCiBzdHJ1Y3QgcmVzdW1lX3N3YXBfYXJlYSB7Ci0JbG9mZl90IG9mZnNldDsKLQl1X2ludDMyX3QgZGV2OworCV9fa2VybmVsX2xvZmZfdCBvZmZzZXQ7CisJX191MzIgZGV2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZSBTTkFQU0hPVF9JT0NfTUFHSUMJJzMnCkBAIC0yMCwxMyArMjEsMTMgQEAKICNkZWZpbmUgU05BUFNIT1RfUzJSQU0JCQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxMSkKICNkZWZpbmUgU05BUFNIT1RfU0VUX1NXQVBfQVJFQQkJX0lPVyhTTkFQU0hPVF9JT0NfTUFHSUMsIDEzLCBcCiAJCQkJCQkJc3RydWN0IHJlc3VtZV9zd2FwX2FyZWEpCi0jZGVmaW5lIFNOQVBTSE9UX0dFVF9JTUFHRV9TSVpFCQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTQsIGxvZmZfdCkKKyNkZWZpbmUgU05BUFNIT1RfR0VUX0lNQUdFX1NJWkUJCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxNCwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBTTkFQU0hPVF9QTEFURk9STV9TVVBQT1JUCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE1KQogI2RlZmluZSBTTkFQU0hPVF9QT1dFUl9PRkYJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE2KQogI2RlZmluZSBTTkFQU0hPVF9DUkVBVEVfSU1BR0UJCV9JT1coU05BUFNIT1RfSU9DX01BR0lDLCAxNywgaW50KQogI2RlZmluZSBTTkFQU0hPVF9QUkVGX0lNQUdFX1NJWkUJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTgpCi0jZGVmaW5lIFNOQVBTSE9UX0FWQUlMX1NXQVBfU0laRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTksIGxvZmZfdCkKLSNkZWZpbmUgU05BUFNIT1RfQUxMT0NfU1dBUF9QQUdFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAyMCwgbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkUJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE5LCBfX2tlcm5lbF9sb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMjAsIF9fa2VybmVsX2xvZmZfdCkKICNkZWZpbmUgU05BUFNIT1RfSU9DX01BWE5SCTIwCiAKICNlbmRpZiAvKiBfTElOVVhfU1VTUEVORF9JT0NUTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggMzlkNDcxZC4uZTc2ZDNiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC00OTAsNiArNDkwLDcgQEAKIAlORVRfSVBWNF9DT05GX0FSUF9JR05PUkU9MTksCiAJTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTPTIwLAogCU5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVD0yMSwKKwlORVRfSVBWNF9DT05GX0FSUF9OT1RJRlk9MjIsCiAJX19ORVRfSVBWNF9DT05GX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggZmU3N2UxNC4uOWQ1MDc4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC02OSwxNiArNjksMTYgQEAKICNkZWZpbmUgdGNwX2ZsYWdfd29yZCh0cCkgKCAoKHVuaW9uIHRjcF93b3JkX2hkciAqKSh0cCkpLT53b3JkcyBbM10pIAogCiBlbnVtIHsgCi0JVENQX0ZMQUdfQ1dSID0gX19jb25zdGFudF9odG9ubCgweDAwODAwMDAwKSwgCi0JVENQX0ZMQUdfRUNFID0gX19jb25zdGFudF9odG9ubCgweDAwNDAwMDAwKSwgCi0JVENQX0ZMQUdfVVJHID0gX19jb25zdGFudF9odG9ubCgweDAwMjAwMDAwKSwgCi0JVENQX0ZMQUdfQUNLID0gX19jb25zdGFudF9odG9ubCgweDAwMTAwMDAwKSwgCi0JVENQX0ZMQUdfUFNIID0gX19jb25zdGFudF9odG9ubCgweDAwMDgwMDAwKSwgCi0JVENQX0ZMQUdfUlNUID0gX19jb25zdGFudF9odG9ubCgweDAwMDQwMDAwKSwgCi0JVENQX0ZMQUdfU1lOID0gX19jb25zdGFudF9odG9ubCgweDAwMDIwMDAwKSwgCi0JVENQX0ZMQUdfRklOID0gX19jb25zdGFudF9odG9ubCgweDAwMDEwMDAwKSwKLQlUQ1BfUkVTRVJWRURfQklUUyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwRjAwMDAwMCksCi0JVENQX0RBVEFfT0ZGU0VUID0gX19jb25zdGFudF9odG9ubCgweEYwMDAwMDAwKQorCVRDUF9GTEFHX0NXUiA9IF9fY3B1X3RvX2JlMzIoMHgwMDgwMDAwMCksCisJVENQX0ZMQUdfRUNFID0gX19jcHVfdG9fYmUzMigweDAwNDAwMDAwKSwKKwlUQ1BfRkxBR19VUkcgPSBfX2NwdV90b19iZTMyKDB4MDAyMDAwMDApLAorCVRDUF9GTEFHX0FDSyA9IF9fY3B1X3RvX2JlMzIoMHgwMDEwMDAwMCksCisJVENQX0ZMQUdfUFNIID0gX19jcHVfdG9fYmUzMigweDAwMDgwMDAwKSwKKwlUQ1BfRkxBR19SU1QgPSBfX2NwdV90b19iZTMyKDB4MDAwNDAwMDApLAorCVRDUF9GTEFHX1NZTiA9IF9fY3B1X3RvX2JlMzIoMHgwMDAyMDAwMCksCisJVENQX0ZMQUdfRklOID0gX19jcHVfdG9fYmUzMigweDAwMDEwMDAwKSwKKwlUQ1BfUkVTRVJWRURfQklUUyA9IF9fY3B1X3RvX2JlMzIoMHgwRjAwMDAwMCksCisJVENQX0RBVEFfT0ZGU0VUID0gX19jcHVfdG9fYmUzMigweEYwMDAwMDAwKQogfTsgCiAKIC8qIFRDUCBzb2NrZXQgb3B0aW9ucyAqLwpAQCAtMjE4LDcgKzIxOCw2IEBACiAJCXNuZF93c2NhbGUgOiA0LAkvKiBXaW5kb3cgc2NhbGluZyByZWNlaXZlZCBmcm9tIHNlbmRlcgkqLwogCQlyY3Zfd3NjYWxlIDogNDsJLyogV2luZG93IHNjYWxpbmcgdG8gc2VuZCB0byByZWNlaXZlcgkqLwogLyoJU0FDS3MgZGF0YQkqLwotCXU4CWVmZl9zYWNrczsJLyogU2l6ZSBvZiBTQUNLIGFycmF5IHRvIHNlbmQgd2l0aCBuZXh0IHBhY2tldCAqLwogCXU4CW51bV9zYWNrczsJLyogTnVtYmVyIG9mIFNBQ0sgYmxvY2tzCQkqLwogCXUxNgl1c2VyX21zczsgIAkvKiBtc3MgcmVxdWVzdGVkIGJ5IHVzZXIgaW4gaW9jdGwgKi8KIAl1MTYJbXNzX2NsYW1wOwkvKiBNYXhpbWFsIG1zcywgbmVnb3RpYXRlZCBhdCBjb25uZWN0aW9uIHNldHVwICovCkBAIC0yNDksNyArMjQ4LDcgQEAKIAkvKiBpbmV0X2Nvbm5lY3Rpb25fc29jayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciBvZiB0Y3Bfc29jayAqLwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jawlpbmV0X2Nvbm47CiAJdTE2CXRjcF9oZWFkZXJfbGVuOwkvKiBCeXRlcyBvZiB0Y3AgaGVhZGVyIHRvIHNlbmQJCSovCi0JdTE2CXhtaXRfc2l6ZV9nb2FsOwkvKiBHb2FsIGZvciBzZWdtZW50aW5nIG91dHB1dCBwYWNrZXRzCSovCisJdTE2CXhtaXRfc2l6ZV9nb2FsX3NlZ3M7IC8qIEdvYWwgZm9yIHNlZ21lbnRpbmcgb3V0cHV0IHBhY2tldHMgKi8KIAogLyoKICAqCUhlYWRlciBwcmVkaWN0aW9uIGZsYWdzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IGZiYmQyYTEuLjI0MmY2MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0xMiwxNCArMTIsMTQgQEAKICNpZm5kZWYgX1NUUlVDVF9USU1FU1BFQwogI2RlZmluZSBfU1RSVUNUX1RJTUVTUEVDCiBzdHJ1Y3QgdGltZXNwZWMgewotCXRpbWVfdAl0dl9zZWM7CQkvKiBzZWNvbmRzICovCi0JbG9uZwl0dl9uc2VjOwkvKiBuYW5vc2Vjb25kcyAqLworCV9fa2VybmVsX3RpbWVfdAl0dl9zZWM7CQkJLyogc2Vjb25kcyAqLworCWxvbmcJCXR2X25zZWM7CQkvKiBuYW5vc2Vjb25kcyAqLwogfTsKICNlbmRpZgogCiBzdHJ1Y3QgdGltZXZhbCB7Ci0JdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCi0Jc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCisJX19rZXJuZWxfdGltZV90CQl0dl9zZWM7CQkvKiBzZWNvbmRzICovCisJX19rZXJuZWxfc3VzZWNvbmRzX3QJdHZfdXNlYzsJLyogbWljcm9zZWNvbmRzICovCiB9OwogCiBzdHJ1Y3QgdGltZXpvbmUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lY29tcGFyZS5oIGIvaW5jbHVkZS9saW51eC90aW1lY29tcGFyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmUyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVjb21wYXJlLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBVdGlsaXR5IGNvZGUgd2hpY2ggaGVscHMgdHJhbnNmb3JtaW5nIGJldHdlZW4gdHdvIGRpZmZlcmVudCB0aW1lCisgKiBiYXNlcywgY2FsbGVkICJzb3VyY2UiIGFuZCAidGFyZ2V0IiB0aW1lIGluIHRoaXMgY29kZS4KKyAqCisgKiBTb3VyY2UgdGltZSBoYXMgdG8gYmUgcHJvdmlkZWQgdmlhIHRoZSB0aW1lY291bnRlciBBUEkgd2hpbGUgdGFyZ2V0CisgKiB0aW1lIGlzIGFjY2Vzc2VkIHZpYSBhIGZ1bmN0aW9uIGNhbGxiYWNrIHdob3NlIHByb3RvdHlwZQorICogaW50ZW50aW9uYWxseSBtYXRjaGVzIGt0aW1lX2dldCgpIGFuZCBrdGltZV9nZXRfcmVhbCgpLiBUaGVzZQorICogaW50ZXJmYWNlcyB3aGVyZSBjaG9zZW4gbGlrZSB0aGlzIHNvIHRoYXQgdGhlIGNvZGUgc2VydmVzIGl0cworICogaW5pdGlhbCBwdXJwb3NlIHdpdGhvdXQgYWRkaXRpb25hbCBnbHVlIGNvZGUuCisgKgorICogVGhpcyBwdXJwb3NlIGlzIHN5bmNocm9uaXppbmcgYSBoYXJkd2FyZSBjbG9jayBpbiBhIE5JQyB3aXRoIHN5c3RlbQorICogdGltZSwgaW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQLAorICogSUVFRTE1ODgpIHdpdGggbW9yZSBhY2N1cmF0ZSBoYXJkd2FyZSBhc3Npc3RlZCB0aW1lIHN0YW1waW5nLiAgSW4KKyAqIHRoYXQgY29udGV4dCBvbmx5IHN5bmNocm9uaXphdGlvbiBhZ2FpbnN0IHN5c3RlbSB0aW1lICg9CisgKiBrdGltZV9nZXRfcmVhbCgpKSBpcyBjdXJyZW50bHkgbmVlZGVkLiBCdXQgdGhpcyB1dGlsaXR5IGNvZGUgbWlnaHQKKyAqIGJlY29tZSB1c2VmdWwgaW4gb3RoZXIgc2l0dWF0aW9ucywgd2hpY2ggaXMgd2h5IGl0IHdhcyB3cml0dGVuIGFzCisgKiBnZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSBjb2RlLgorICoKKyAqIFRoZSBzb3VyY2UgdGltZWNvdW50ZXIgaXMgYXNzdW1lZCB0byByZXR1cm4gbW9ub3RvbmljYWxseQorICogaW5jcmVhc2luZyB0aW1lIChidXQgdGhpcyBjb2RlIGRvZXMgaXRzIGJlc3QgdG8gY29tcGVuc2F0ZSBpZiB0aGF0CisgKiBpcyBub3QgdGhlIGNhc2UpIHdoZXJlYXMgdGFyZ2V0IHRpbWUgbWF5IGp1bXAuCisgKgorICogVGhlIHRhcmdldCB0aW1lIGNvcnJlc3BvbmRpbmcgdG8gYSBzb3VyY2UgdGltZSBpcyBkZXRlcm1pbmVkIGJ5CisgKiByZWFkaW5nIHRhcmdldCB0aW1lLCByZWFkaW5nIHNvdXJjZSB0aW1lLCByZWFkaW5nIHRhcmdldCB0aW1lCisgKiBhZ2FpbiwgdGhlbiBhc3N1bWluZyB0aGF0IGF2ZXJhZ2UgdGFyZ2V0IHRpbWUgY29ycmVzcG9uZHMgdG8gc291cmNlCisgKiB0aW1lLiBJbiBvdGhlciB3b3JkcywgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCByZWFkaW5nIHRoZSBzb3VyY2UKKyAqIHRpbWUgaXMgc2xvdyBhbmQgaW52b2x2ZXMgZXF1YWwgdGltZSBmb3Igc2VuZGluZyB0aGUgcmVxdWVzdCBhbmQKKyAqIHJlY2VpdmluZyB0aGUgcmVwbHksIHdoZXJlYXMgcmVhZGluZyB0YXJnZXQgdGltZSBpcyBhc3N1bWVkIHRvIGJlCisgKiBmYXN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisjaWZuZGVmIF9MSU5VWF9USU1FQ09NUEFSRV9ICisjZGVmaW5lIF9MSU5VWF9USU1FQ09NUEFSRV9ICisKKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisKKy8qKgorICogc3RydWN0IHRpbWVjb21wYXJlIC0gc3RvcmVzIHN0YXRlIGFuZCBjb25maWd1cmF0aW9uIGZvciB0aGUgdHdvIGNsb2NrcworICoKKyAqIEluaXRpYWxpemUgdG8gemVybywgdGhlbiBzZXQgc291cmNlL3RhcmdldC9udW1fc2FtcGxlcy4KKyAqCisgKiBUcmFuc2Zvcm1hdGlvbiBiZXR3ZWVuIHNvdXJjZSB0aW1lIGFuZCB0YXJnZXQgdGltZSBpcyBkb25lIHdpdGg6CisgKiB0YXJnZXRfdGltZSA9IHNvdXJjZV90aW1lICsgb2Zmc2V0ICsKKyAqICAgICAgICAgICAgICAgKHNvdXJjZV90aW1lIC0gbGFzdF91cGRhdGUpICogc2tldyAvCisgKiAgICAgICAgICAgICAgIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTgorICoKKyAqIEBzb3VyY2U6ICAgICAgICAgIHVzZWQgdG8gZ2V0IHNvdXJjZSB0aW1lIHN0YW1wcyB2aWEgdGltZWNvdW50ZXJfcmVhZCgpCisgKiBAdGFyZ2V0OiAgICAgICAgICBmdW5jdGlvbiByZXR1cm5pbmcgdGFyZ2V0IHRpbWUgKGZvciBleGFtcGxlLCBrdGltZV9nZXQKKyAqICAgICAgICAgICAgICAgICAgIGZvciBtb25vdG9uaWMgdGltZSwgb3Iga3RpbWVfZ2V0X3JlYWwgZm9yIHdhbGwgY2xvY2spCisgKiBAbnVtX3NhbXBsZXM6ICAgICBudW1iZXIgb2YgdGltZXMgdGhhdCBzb3VyY2UgdGltZSBhbmQgdGFyZ2V0IHRpbWUgYXJlIHRvCisgKiAgICAgICAgICAgICAgICAgICBiZSBjb21wYXJlZCB3aGVuIGRldGVybWluaW5nIHRoZWlyIG9mZnNldAorICogQG9mZnNldDogICAgICAgICAgKHRhcmdldCB0aW1lIC0gc291cmNlIHRpbWUpIGF0IHRoZSB0aW1lIG9mIHRoZSBsYXN0IHVwZGF0ZQorICogQHNrZXc6ICAgICAgICAgICAgYXZlcmFnZSAodGFyZ2V0IHRpbWUgLSBzb3VyY2UgdGltZSkgLyBkZWx0YSBzb3VyY2UgdGltZSAqCisgKiAgICAgICAgICAgICAgICAgICBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04KKyAqIEBsYXN0X3VwZGF0ZTogICAgIGxhc3Qgc291cmNlIHRpbWUgc3RhbXAgd2hlbiB0aW1lIG9mZnNldCB3YXMgbWVhc3VyZWQKKyAqLworc3RydWN0IHRpbWVjb21wYXJlIHsKKwlzdHJ1Y3QgdGltZWNvdW50ZXIgKnNvdXJjZTsKKwlrdGltZV90ICgqdGFyZ2V0KSh2b2lkKTsKKwlpbnQgbnVtX3NhbXBsZXM7CisKKwlzNjQgb2Zmc2V0OworCXM2NCBza2V3OworCXU2NCBsYXN0X3VwZGF0ZTsKK307CisKKy8qKgorICogdGltZWNvbXBhcmVfdHJhbnNmb3JtIC0gdHJhbnNmb3JtIHNvdXJjZSB0aW1lIHN0YW1wIGludG8gdGFyZ2V0IHRpbWUgYmFzZQorICogQHN5bmM6ICAgICAgICAgICAgY29udGV4dCBmb3IgdGltZSBzeW5jCisgKiBAc291cmNlX3RzdGFtcDogICB0aGUgcmVzdWx0IG9mIHRpbWVjb3VudGVyX3JlYWQoKSBvcgorICogICAgICAgICAgICAgICAgICAgdGltZWNvdW50ZXJfY3ljMnRpbWUoKQorICovCitleHRlcm4ga3RpbWVfdCB0aW1lY29tcGFyZV90cmFuc2Zvcm0oc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJCSAgICAgdTY0IHNvdXJjZV90c3RhbXApOworCisvKioKKyAqIHRpbWVjb21wYXJlX29mZnNldCAtIG1lYXN1cmUgY3VycmVudCAodGFyZ2V0IHRpbWUgLSBzb3VyY2UgdGltZSkgb2Zmc2V0CisgKiBAc3luYzogICAgICAgICAgICBjb250ZXh0IGZvciB0aW1lIHN5bmMKKyAqIEBvZmZzZXQ6ICAgICAgICAgIGF2ZXJhZ2Ugb2Zmc2V0IGR1cmluZyBzYW1wbGUgcGVyaW9kIHJldHVybmVkIGhlcmUKKyAqIEBzb3VyY2VfdHN0YW1wOiAgIGF2ZXJhZ2Ugc291cmNlIHRpbWUgZHVyaW5nIHNhbXBsZSBwZXJpb2QgcmV0dXJuZWQgaGVyZQorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgdXNlZC4gTWlnaHQgYmUgemVybyAoPSBubyByZXN1bHQpIGluIHRoZQorICogdW5saWtlbHkgY2FzZSB0aGF0IHRhcmdldCB0aW1lIHdhcyBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgZm9yIGFsbAorICogc2FtcGxlcyAoPSBicm9rZW4pLgorICovCitleHRlcm4gaW50IHRpbWVjb21wYXJlX29mZnNldChzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCQkgICAgICBzNjQgKm9mZnNldCwKKwkJCSAgICAgIHU2NCAqc291cmNlX3RzdGFtcCk7CisKK2V4dGVybiB2b2lkIF9fdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCQkgdTY0IHNvdXJjZV90c3RhbXApOworCisvKioKKyAqIHRpbWVjb21wYXJlX3VwZGF0ZSAtIHVwZGF0ZSBvZmZzZXQgYW5kIHNrZXcgYnkgbWVhc3VyaW5nIGN1cnJlbnQgb2Zmc2V0CisgKiBAc3luYzogICAgICAgICAgICBjb250ZXh0IGZvciB0aW1lIHN5bmMKKyAqIEBzb3VyY2VfdHN0YW1wOiAgIHRoZSByZXN1bHQgb2YgdGltZWNvdW50ZXJfcmVhZCgpIG9yCisgKiAgICAgICAgICAgICAgICAgICB0aW1lY291bnRlcl9jeWMydGltZSgpLCBwYXNzIHplcm8gdG8gZm9yY2UgdXBkYXRlCisgKgorICogVXBkYXRlcyBhcmUgb25seSBkb25lIGF0IG1vc3Qgb25jZSBwZXIgc2Vjb25kLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCQkgICAgICB1NjQgc291cmNlX3RzdGFtcCkKK3sKKwlpZiAoIXNvdXJjZV90c3RhbXAgfHwKKwkgICAgKHM2NCkoc291cmNlX3RzdGFtcCAtIHN5bmMtPmxhc3RfdXBkYXRlKSA+PSBOU0VDX1BFUl9TRUMpCisJCV9fdGltZWNvbXBhcmVfdXBkYXRlKHN5bmMsIHNvdXJjZV90c3RhbXApOworfQorCisjZW5kaWYgLyogX0xJTlVYX1RJTUVDT01QQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBkYWY5Njg1Li5lMmQ2NjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC04Niw4ICs4Niw4IEBACiAKIGV4dGVybiB2b2lkIGFkZF90aW1lcl9vbihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIGludCBjcHUpOwogZXh0ZXJuIGludCBkZWxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7Ci1leHRlcm4gaW50IF9fbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKIGV4dGVybiBpbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKTsKK2V4dGVybiBpbnQgbW9kX3RpbWVyX3BlbmRpbmcoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwogCiAvKgogICogVGhlIGppZmZpZXMgdmFsdWUgd2hpY2ggaXMgYWRkZWQgdG8gbm93LCB3aGVuIHRoZXJlIGlzIG5vIHRpbWVyCkBAIC0xNDYsMjUgKzE0Niw3IEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBhZGRfdGltZXIgLSBzdGFydCBhIHRpbWVyCi0gKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBhZGRlZAotICoKLSAqIFRoZSBrZXJuZWwgd2lsbCBkbyBhIC0+ZnVuY3Rpb24oLT5kYXRhKSBjYWxsYmFjayBmcm9tIHRoZQotICogdGltZXIgaW50ZXJydXB0IGF0IHRoZSAtPmV4cGlyZXMgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhlCi0gKiBjdXJyZW50IHRpbWUgaXMgJ2ppZmZpZXMnLgotICoKLSAqIFRoZSB0aW1lcidzIC0+ZXhwaXJlcywgLT5mdW5jdGlvbiAoYW5kIGlmIHRoZSBoYW5kbGVyIHVzZXMgaXQsIC0+ZGF0YSkKLSAqIGZpZWxkcyBtdXN0IGJlIHNldCBwcmlvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogVGltZXJzIHdpdGggYW4gLT5leHBpcmVzIGZpZWxkIGluIHRoZSBwYXN0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG5leHQKLSAqIHRpbWVyIHRpY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQotewotCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSk7Ci0JX19tb2RfdGltZXIodGltZXIsIHRpbWVyLT5leHBpcmVzKTsKLX0KK2V4dGVybiB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogICBleHRlcm4gaW50IHRyeV90b19kZWxfdGltZXJfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oIGIvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RydWN0IHRpbWVyaW9tZW1fcm5nX2RhdGEgeworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJdW5zaWduZWQgaW50CQlwcmVzZW50OjE7CisKKwl1MzIgX19pb21lbQkJKmFkZHJlc3M7CisKKwkvKiBtZWFzdXJlcyBpbiB1c2VjcyAqLworCXVuc2lnbmVkIGludAkJcGVyaW9kOworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXMuaCBiL2luY2x1ZGUvbGludXgvdGltZXMuaAppbmRleCBlMmQzMDIwLi44N2I2MjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcy5oCkBAIC00LDEwICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHRtcyB7Ci0JY2xvY2tfdCB0bXNfdXRpbWU7Ci0JY2xvY2tfdCB0bXNfc3RpbWU7Ci0JY2xvY2tfdCB0bXNfY3V0aW1lOwotCWNsb2NrX3QgdG1zX2NzdGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc191dGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19zdGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19jdXRpbWU7CisJX19rZXJuZWxfY2xvY2tfdCB0bXNfY3N0aW1lOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggOTk4YTU1ZC4uYWEzNDc1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtMTkwLDcgKzE5MCw3IEBACiAgKiBvZmZzZXQgYW5kIG1heGltdW0gZnJlcXVlbmN5IHRvbGVyYW5jZS4KICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KLSNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKKyNkZWZpbmUgUFBNX1NDQUxFICgoczY0KU5TRUNfUEVSX1VTRUMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX1VTRUMpKQogI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RwbS5oIGIvaW5jbHVkZS9saW51eC90cG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM4YjNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cG0uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogTGVlbmRlcnQgdmFuIERvb3JuIDxsZWVuZGVydEB3YXRzb24uaWJtLmNvbT4KKyAqIERhdmUgU2FmZm9yZCA8c2FmZm9yZEB3YXRzb24uaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqIERlYm9yYSBWZWxhcmRlIDxkdmVsYXJkZUB1cy5pYm0uY29tPgorICoKKyAqIE1haW50YWluZWQgYnk6IDx0cG1kZF9kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogRGV2aWNlIGRyaXZlciBmb3IgVENHL1RDUEEgVFBNICh0cnVzdGVkIHBsYXRmb3JtIG1vZHVsZSkuCisgKiBTcGVjaWZpY2F0aW9ucyBhdCB3d3cudHJ1c3RlZGNvbXB1dGluZ2dyb3VwLm9yZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9UUE1fSF9fCisjZGVmaW5lIF9fTElOVVhfVFBNX0hfXworCisvKgorICogQ2hpcCBudW0gaXMgdGhpcyB2YWx1ZSBvciBhIHZhbGlkIHRwbSBpZHgKKyAqLworI2RlZmluZQlUUE1fQU5ZX05VTSAweEZGRkYKKworI2lmIGRlZmluZWQoQ09ORklHX1RDR19UUE0pCisKK2V4dGVybiBpbnQgdHBtX3Bjcl9yZWFkKHUzMiBjaGlwX251bSwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKTsKK2V4dGVybiBpbnQgdHBtX3Bjcl9leHRlbmQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgY29uc3QgdTggKmhhc2gpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCA3MTJjYTUzLi41YWJlMzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0xLDYgKzEsOSBAQAogI2lmbmRlZiBfTElOVVhfVFlQRVNfSAogI2RlZmluZSBfTElOVVhfVFlQRVNfSAogCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaWZkZWYJX19LRVJORUxfXwogCiAjZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXApAQCAtOSw5ICsxMiw4IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCisjaWZkZWYgX19LRVJORUxfXwogCiB0eXBlZGVmIF9fdTMyIF9fa2VybmVsX2Rldl90OwogCkBAIC0yOSw3ICszMSw2IEBACiB0eXBlZGVmIF9fa2VybmVsX2Nsb2NraWRfdAljbG9ja2lkX3Q7CiB0eXBlZGVmIF9fa2VybmVsX21xZF90CQltcWRfdDsKIAotI2lmZGVmIF9fS0VSTkVMX18KIHR5cGVkZWYgX0Jvb2wJCQlib29sOwogCiB0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QJdWlkX3Q7CkBAIC00NSwxNCArNDYsNiBAQAogdHlwZWRlZiBfX2tlcm5lbF9vbGRfZ2lkX3QJb2xkX2dpZF90OwogI2VuZGlmIC8qIENPTkZJR19VSUQxNiAqLwogCi0vKiBsaWJjNSBpbmNsdWRlcyB0aGlzIGZpbGUgdG8gZGVmaW5lIHVpZF90LCB0aHVzIHVpZF90IGNhbiBuZXZlciBjaGFuZ2UKLSAqIHdoZW4gaXQgaXMgaW5jbHVkZWQgYnkgbm9uLWtlcm5lbCBjb2RlCi0gKi8KLSNlbHNlCi10eXBlZGVmIF9fa2VybmVsX3VpZF90CQl1aWRfdDsKLXR5cGVkZWYgX19rZXJuZWxfZ2lkX3QJCWdpZF90OwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2lmIGRlZmluZWQoX19HTlVDX18pCiB0eXBlZGVmIF9fa2VybmVsX2xvZmZfdAkJbG9mZl90OwogI2VuZGlmCkBAIC0xNTQsNyArMTQ3LDcgQEAKICNkZWZpbmUgcGdvZmZfdCB1bnNpZ25lZCBsb25nCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fS0VSTkVMX1NUUklDVF9OQU1FUyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyoKICAqIEJlbG93IGFyZSB0cnVseSBMaW51eC1zcGVjaWZpYyB0eXBlcyB0aGF0IHNob3VsZCBuZXZlciBjb2xsaWRlIHdpdGgKQEAgLTIxMiw1ICsyMDUsNSBAQAogfTsKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLQorI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW9fZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaAppbmRleCBhMGJiNmJkLi41ZGNjOWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogCiAvKioKICAqIHN0cnVjdCB1aW9fbWVtIC0gZGVzY3JpcHRpb24gb2YgYSBVSU8gbWVtb3J5IHJlZ2lvbgorICogQG5hbWU6CQluYW1lIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGZvciBpZGVudGlmaWNhdGlvbgogICogQGFkZHI6CQlhZGRyZXNzIG9mIHRoZSBkZXZpY2UncyBtZW1vcnkKICAqIEBzaXplOgkJc2l6ZSBvZiBJTwogICogQG1lbXR5cGU6CQl0eXBlIG9mIG1lbW9yeSBhZGRyIHBvaW50cyB0bwpAQCAtMjksNiArMzAsNyBAQAogICogQG1hcDoJCWZvciB1c2UgYnkgdGhlIFVJTyBjb3JlIG9ubHkuCiAgKi8KIHN0cnVjdCB1aW9fbWVtIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJaW50CQkJbWVtdHlwZTsKQEAgLTQyLDEyICs0NCwxNCBAQAogCiAvKioKICAqIHN0cnVjdCB1aW9fcG9ydCAtIGRlc2NyaXB0aW9uIG9mIGEgVUlPIHBvcnQgcmVnaW9uCisgKiBAbmFtZToJCW5hbWUgb2YgdGhlIHBvcnQgcmVnaW9uIGZvciBpZGVudGlmaWNhdGlvbgogICogQHN0YXJ0OgkJc3RhcnQgb2YgcG9ydCByZWdpb24KICAqIEBzaXplOgkJc2l6ZSBvZiBwb3J0IHJlZ2lvbgogICogQHBvcnR0eXBlOgkJdHlwZSBvZiBwb3J0IChzZWUgVUlPX1BPUlRfKiBiZWxvdykKICAqIEBwb3J0aW86CQlmb3IgdXNlIGJ5IHRoZSBVSU8gY29yZSBvbmx5LgogICovCiBzdHJ1Y3QgdWlvX3BvcnQgeworCWNvbnN0IGNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CiAJaW50CQkJcG9ydHR5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA4ODA3OWZkLi5jNmIyYWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTY0MywxODYgKzY0Myw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qKgotICogdXNiX2VuZHBvaW50X251bSAtIGdldCB0aGUgZW5kcG9pbnQncyBudW1iZXIKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIEBlcGQncyBudW1iZXI6IDAgdG8gMTUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCi0gKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3R5cGUoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuIGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2Rpcl9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgSU4gZGlyZWN0aW9uCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIElOLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsaygKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBjb250cm9sIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgY29udHJvbCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCi0gKiBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19idWxrX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19idWxrX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pbnRfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBPVVQKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF9pc19pc29jX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIElOCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX2luKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIFwKIAkJKFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKQogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9SQU5HRSBcCkBAIC0xMzU3LDggKzExNzcsOCBAQAogCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9mbGFnczsJLyogKGluKSBVUkJfU0hPUlRfTk9UX09LIHwgLi4uKi8KIAl2b2lkICp0cmFuc2Zlcl9idWZmZXI7CQkvKiAoaW4pIGFzc29jaWF0ZWQgZGF0YSBidWZmZXIgKi8KIAlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYTsJLyogKGluKSBkbWEgYWRkciBmb3IgdHJhbnNmZXJfYnVmZmVyICovCi0JaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CS8qIChpbikgZGF0YSBidWZmZXIgbGVuZ3RoICovCi0JaW50IGFjdHVhbF9sZW5ndGg7CQkvKiAocmV0dXJuKSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCisJdTMyIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CS8qIChpbikgZGF0YSBidWZmZXIgbGVuZ3RoICovCisJdTMyIGFjdHVhbF9sZW5ndGg7CQkvKiAocmV0dXJuKSBhY3R1YWwgdHJhbnNmZXIgbGVuZ3RoICovCiAJdW5zaWduZWQgY2hhciAqc2V0dXBfcGFja2V0OwkvKiAoaW4pIHNldHVwIHBhY2tldCAoY29udHJvbCBvbmx5KSAqLwogCWRtYV9hZGRyX3Qgc2V0dXBfZG1hOwkJLyogKGluKSBkbWEgYWRkciBmb3Igc2V0dXBfcGFja2V0ICovCiAJaW50IHN0YXJ0X2ZyYW1lOwkJLyogKG1vZGlmeSkgc3RhcnQgZnJhbWUgKElTTykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKaW5kZXggOWI0MmJhZS4uYjE0NTExOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogI2RlZmluZSBVU0JfUkVRX0xPT1BCQUNLX0RBVEFfUkVBRAkweDE2CiAjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRV9EUwkweDE3CiAKLS8qIFRoZSBMaW5rIFBvd2VyIE1hbmdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAorLyogVGhlIExpbmsgUG93ZXIgTWFuYWdlbWVudCAoTFBNKSBFQ04gZGVmaW5lcyBVU0JfUkVRX1RFU1RfQU5EX1NFVCBjb21tYW5kLAogICogdXNlZCBieSBodWJzIHRvIHB1dCBwb3J0cyBpbnRvIGEgbmV3IEwxIHN1c3BlbmQgc3RhdGUsIGV4Y2VwdCB0aGF0IGl0CiAgKiBmb3Jnb3QgdG8gZGVmaW5lIGl0cyBudW1iZXIgLi4uCiAgKi8KQEAgLTM1Myw2ICszNTMsMTg1IEBACiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lOVAkJMwogI2RlZmluZSBVU0JfRU5EUE9JTlRfTUFYX0FESlVTVEFCTEUJMHg4MAogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9lbmRwb2ludF9udW0gLSBnZXQgdGhlIGVuZHBvaW50J3MgbnVtYmVyCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBAZXBkJ3MgbnVtYmVyOiAwIHRvIDE1LgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfbnVtKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3R5cGUgLSBnZXQgdGhlIGVuZHBvaW50J3MgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgb25lIG9mIFVTQl9FTkRQT0lOVF9YRkVSX3tDT05UUk9MLCBJU09DLCBCVUxLLCBJTlR9IGFjY29yZGluZworICogdG8gQGVwZCdzIHRyYW5zZmVyIHR5cGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF90eXBlKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiBlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIElOIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBJTiwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfZGlyX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgT1VUIGRpcmVjdGlvbgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBPVVQsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgYnVsaywgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSyk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgY29udHJvbCB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGNvbnRyb2wsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2ludCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaW50ZXJydXB0LCBvdGhlcndpc2UgaXQgcmV0dXJucworICogZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2ludCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaXNvY2hyb25vdXMsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaXNvYygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pbnRfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pc29jX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNTg0LDggKzc2Myw4IEBACiAJLyogY2hhcHRlciA5IGFuZCBhdXRoZW50aWNhdGlvbiAod2lyZWxlc3MpIGRldmljZSBzdGF0ZXMgKi8KIAlVU0JfU1RBVEVfQVRUQUNIRUQsCiAJVVNCX1NUQVRFX1BPV0VSRUQsCQkJLyogd2lyZWQgKi8KLQlVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVELAkJLyogYXV0aCAqLwogCVVTQl9TVEFURV9SRUNPTk5FQ1RJTkcsCQkJLyogYXV0aCAqLworCVVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCQkvKiBhdXRoICovCiAJVVNCX1NUQVRFX0RFRkFVTFQsCQkJLyogbGltaXRlZCBmdW5jdGlvbiAqLwogCVVTQl9TVEFURV9BRERSRVNTLAogCVVTQl9TVEFURV9DT05GSUdVUkVELAkJCS8qIG1vc3QgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IDkzNWMzODAuLmFjZDdiMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC0yNDQsNiArMjQ0LDEwIEBACiAgKgl2YWx1ZTsgaXQgc2hvdWxkIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCiAgKiBAdW5iaW5kOiBSZXZlcnNlcyBAYmluZCgpOyBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1bnJlZ2lzdGVyaW5nCiAgKgl0aGlzIGRyaXZlci4KKyAqIEBzdXNwZW5kOiBOb3RpZmllcyB3aGVuIHRoZSBob3N0IHN0b3BzIHNlbmRpbmcgVVNCIHRyYWZmaWMsCisgKglhZnRlciBmdW5jdGlvbiBub3RpZmljYXRpb25zCisgKiBAcmVzdW1lOiBOb3RpZmllcyBjb25maWd1cmF0aW9uIHdoZW4gdGhlIGhvc3QgcmVzdGFydHMgVVNCIHRyYWZmaWMsCisgKgliZWZvcmUgZnVuY3Rpb24gbm90aWZpY2F0aW9ucwogICoKICAqIERldmljZXMgZGVmYXVsdCB0byByZXBvcnRpbmcgc2VsZiBwb3dlcmVkIG9wZXJhdGlvbi4gIERldmljZXMgd2hpY2ggcmVseQogICogb24gYnVzIHBvd2VyZWQgb3BlcmF0aW9uIHNob3VsZCByZXBvcnQgdGhpcyBpbiB0aGVpciBAYmluZCgpIG1ldGhvZC4KQEAgLTI2OCw2ICsyNzIsMTAgQEAKIAogCWludAkJCSgqYmluZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwogCWludAkJCSgqdW5iaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CisKKwkvKiBnbG9iYWwgc3VzcGVuZCBob29rcyAqLworCXZvaWQJCQkoKnN1c3BlbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKKwl2b2lkCQkJKCpyZXN1bWUpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKIH07CiAKIGV4dGVybiBpbnQgdXNiX2NvbXBvc2l0ZV9yZWdpc3RlcihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCmluZGV4IDA0NjBhNzQuLmJiZjQ1ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oCkBAIC01OTgsNiArNTk4LDcgQEAKIC8qKgogICogdXNiX2dhZGdldF92YnVzX2Nvbm5lY3QgLSBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZAogICogQGdhZGdldDpUaGUgZGV2aWNlIHdoaWNoIG5vdyBoYXMgVkJVUyBwb3dlci4KKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIFRoaXMgY2FsbCBpcyB1c2VkIGJ5IGEgZHJpdmVyIGZvciBhbiBleHRlcm5hbCB0cmFuc2NlaXZlciAob3IgR1BJTykKICAqIHRoYXQgZGV0ZWN0cyBhIFZCVVMgcG93ZXIgc2Vzc2lvbiBzdGFydGluZy4gIENvbW1vbiByZXNwb25zZXMgaW5jbHVkZQpAQCAtNjM2LDYgKzYzNyw3IEBACiAvKioKICAqIHVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0IC0gbm90aWZ5IGNvbnRyb2xsZXIgYWJvdXQgVkJVUyBzZXNzaW9uIGVuZAogICogQGdhZGdldDp0aGUgZGV2aWNlIHdob3NlIFZCVVMgc3VwcGx5IGlzIGJlaW5nIGRlc2NyaWJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgYnkgYSBkcml2ZXIgZm9yIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChvciBHUElPKQogICogdGhhdCBkZXRlY3RzIGEgVkJVUyBwb3dlciBzZXNzaW9uIGVuZGluZy4gIENvbW1vbiByZXNwb25zZXMgaW5jbHVkZQpAQCAtNzkyLDE5ICs3OTQsMjAgQEAKIC8qKgogICogdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIGdhZGdldCBkcml2ZXIKICAqIEBkcml2ZXI6dGhlIGRyaXZlciBiZWluZyByZWdpc3RlcmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBDYWxsIHRoaXMgaW4geW91ciBnYWRnZXQgZHJpdmVyJ3MgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLAogICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciBkcml2ZXIgYWJvdXQgeW91ciBkcml2ZXIuCiAgKiBUaGUgZHJpdmVyJ3MgYmluZCgpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGJpbmQgaXQgdG8gYQogICogZ2FkZ2V0IGJlZm9yZSB0aGlzIHJlZ2lzdHJhdGlvbiBjYWxsIHJldHVybnMuICBJdCdzIGV4cGVjdGVkIHRoYXQKICAqIHRoZSBiaW5kKCkgZnVuY3Rpb25zIHdpbGwgYmUgaW4gaW5pdCBzZWN0aW9ucy4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOwogCiAvKioKICAqIHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgLSB1bnJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgogICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHVucmVnaXN0ZXJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogQ2FsbCB0aGlzIGluIHlvdXIgZ2FkZ2V0IGRyaXZlcidzIG1vZHVsZSBjbGVhbnVwIGZ1bmN0aW9uLAogICogdG8gdGVsbCB0aGUgdW5kZXJseWluZyB1c2IgY29udHJvbGxlciB0aGF0IHlvdXIgZHJpdmVyIGlzCkBAIC04MTMsNyArODE2LDYgQEAKICAqIHRvIHVuYmluZCgpIGFuZCBjbGVhbiB1cCBhbnkgZGV2aWNlIHN0YXRlLCBiZWZvcmUgdGhpcyBwcm9jZWR1cmUKICAqIGZpbmFsbHkgcmV0dXJucy4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgdW5iaW5kKCkgZnVuY3Rpb25zCiAgKiB3aWxsIGluIGluIGV4aXQgc2VjdGlvbnMsIHNvIG1heSBub3QgYmUgbGlua2VkIGluIHNvbWUga2VybmVscy4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL290Zy5oIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKaW5kZXggOTRkZjRmZS4uMWFhYTgyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKQEAgLTgwLDEyICs4MCwxNyBAQAogCiAvKiBmb3IgYm9hcmQtc3BlY2lmaWMgaW5pdCBsb2dpYyAqLwogZXh0ZXJuIGludCBvdGdfc2V0X3RyYW5zY2VpdmVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKik7CisjaWZkZWYgQ09ORklHX05PUF9VU0JfWENFSVYKK2V4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCB1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIodm9pZCk7CisjZW5kaWYKIAogCiAvKiBmb3IgdXNiIGhvc3QgYW5kIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzICovCiBleHRlcm4gc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnX2dldF90cmFuc2NlaXZlcih2b2lkKTsKIGV4dGVybiB2b2lkIG90Z19wdXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKIAorLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3N0YXJ0X2hucChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcpCiB7CkBAIC0xMDIsNiArMTA3LDggQEAKIAogCiAvKiBmb3IgdXNiIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXJzICovCisKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCB1c2JfZ2FkZ2V0ICpwZXJpcGgpCiB7CkBAIC0xMTQsNiArMTIxLDcgQEAKIAlyZXR1cm4gb3RnLT5zZXRfcG93ZXIob3RnLCBtQSk7CiB9CiAKKy8qIENvbnRleHQ6IGNhbiBzbGVlcCAqLwogc3RhdGljIGlubGluZSBpbnQKIG90Z19zZXRfc3VzcGVuZChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIGludCBzdXNwZW5kKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAppbmRleCA3ZjZjNjAzLi4yNTI2ZjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaApAQCAtMTYsNCArMTYsNyBAQAogLyogZGV2aWNlIGNhbid0IGhhbmRsZSBTZXQtSW50ZXJmYWNlIHJlcXVlc3RzICovCiAjZGVmaW5lIFVTQl9RVUlSS19OT19TRVRfSU5URgkJMHgwMDAwMDAwNAogCisvKiBkZXZpY2UgY2FuJ3QgaGFuZGxlIGl0cyBDb25maWd1cmF0aW9uIG9yIEludGVyZmFjZSBzdHJpbmdzICovCisjZGVmaW5lIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTCTB4MDAwMDAwMDgKKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX1FVSVJLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKaW5kZXggMGE2ZTZkNC4uMzc4MzZiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaApAQCAtNDksNDggKzQ5LDQ1IEBACiAgKi8KICNkZWZpbmUJUk5ESVNfQ09OVFJPTF9USU1FT1VUX01TCSg1ICogMTAwMCkKIAotCi0jZGVmaW5lIGNjcHUyIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIKLQotI2RlZmluZSBSTkRJU19NU0dfQ09NUExFVElPTgljY3B1MigweDgwMDAwMDAwKQorI2RlZmluZSBSTkRJU19NU0dfQ09NUExFVElPTgljcHVfdG9fbGUzMigweDgwMDAwMDAwKQogCiAvKiBjb2RlcyBmb3IgIm1zZ190eXBlIiBmaWVsZCBvZiBybmRpcyBtZXNzYWdlczsKICAqIG9ubHkgdGhlIGRhdGEgY2hhbm5lbCB1c2VzIHBhY2tldCBtZXNzYWdlcyAobWF5YmUgYmF0Y2hlZCk7CiAgKiBldmVyeXRoaW5nIGVsc2UgZ29lcyBvbiB0aGUgY29udHJvbCBjaGFubmVsLgogICovCi0jZGVmaW5lIFJORElTX01TR19QQUNLRVQJY2NwdTIoMHgwMDAwMDAwMSkJLyogMS1OIHBhY2tldHMgKi8KLSNkZWZpbmUgUk5ESVNfTVNHX0lOSVQJCWNjcHUyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFJORElTX01TR19QQUNLRVQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkJLyogMS1OIHBhY2tldHMgKi8KKyNkZWZpbmUgUk5ESVNfTVNHX0lOSVQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCiAjZGVmaW5lIFJORElTX01TR19JTklUX0MJKFJORElTX01TR19JTklUfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfSEFMVAkJY2NwdTIoMHgwMDAwMDAwMykKLSNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZCQljY3B1MigweDAwMDAwMDA0KQorI2RlZmluZSBSTkRJU19NU0dfSEFMVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUgUk5ESVNfTVNHX1FVRVJZCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQogI2RlZmluZSBSTkRJU19NU0dfUVVFUllfQwkoUk5ESVNfTVNHX1FVRVJZfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfU0VUCQljY3B1MigweDAwMDAwMDA1KQorI2RlZmluZSBSTkRJU19NU0dfU0VUCQljcHVfdG9fbGUzMigweDAwMDAwMDA1KQogI2RlZmluZSBSTkRJU19NU0dfU0VUX0MJCShSTkRJU19NU0dfU0VUfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfUkVTRVQJCWNjcHUyKDB4MDAwMDAwMDYpCisjZGVmaW5lIFJORElTX01TR19SRVNFVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNikKICNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUX0MJKFJORElTX01TR19SRVNFVHxSTkRJU19NU0dfQ09NUExFVElPTikKLSNkZWZpbmUgUk5ESVNfTVNHX0lORElDQVRFCWNjcHUyKDB4MDAwMDAwMDcpCi0jZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkUJY2NwdTIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUk5ESVNfTVNHX0lORElDQVRFCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKICNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRV9DCShSTkRJU19NU0dfS0VFUEFMSVZFfFJORElTX01TR19DT01QTEVUSU9OKQogCiAvKiBjb2RlcyBmb3IgInN0YXR1cyIgZmllbGQgb2YgY29tcGxldGlvbiBtZXNzYWdlcyAqLwotI2RlZmluZQlSTkRJU19TVEFUVVNfU1VDQ0VTUwkJY2NwdTIoMHgwMDAwMDAwMCkKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX0ZBSUxVUkUJCWNjcHUyKDB4YzAwMDAwMDEpCi0jZGVmaW5lCVJORElTX1NUQVRVU19JTlZBTElEX0RBVEEJY2NwdTIoMHhjMDAxMDAxNSkKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQJY2NwdTIoMHhjMDAwMDBiYikKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJY2NwdTIoMHg0MDAxMDAwYikKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QJY2NwdTIoMHg0MDAxMDAwYykKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX1NVQ0NFU1MJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lCVJORElTX1NUQVRVU19GQUlMVVJFCQljcHVfdG9fbGUzMigweGMwMDAwMDAxKQorI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCWNwdV90b19sZTMyKDB4YzAwMTAwMTUpCisjZGVmaW5lCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVECWNwdV90b19sZTMyKDB4YzAwMDAwYmIpCisjZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGIpCisjZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGMpCiAKIC8qIGNvZGVzIGZvciBPSURfR0VOX1BIWVNJQ0FMX01FRElVTSAqLwotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fVU5TUEVDSUZJRUQJY2NwdTIoMHgwMDAwMDAwMCkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTgljY3B1MigweDAwMDAwMDAxKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fQ0FCTEVfTU9ERU0JY2NwdTIoMHgwMDAwMDAwMikKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BIT05FX0xJTkUJY2NwdTIoMHgwMDAwMDAwMykKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BPV0VSX0xJTkUJY2NwdTIoMHgwMDAwMDAwNCkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0RTTAkJY2NwdTIoMHgwMDAwMDAwNSkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0ZJQlJFX0NIQU5ORUwJY2NwdTIoMHgwMDAwMDAwNikKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNXzEzOTQJCWNjcHUyKDB4MDAwMDAwMDcpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19XQU4JY2NwdTIoMHgwMDAwMDAwOCkKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX01BWAkJY2NwdTIoMHgwMDAwMDAwOSkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1VOU1BFQ0lGSUVECWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19MQU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0NBQkxFX01PREVNCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9QSE9ORV9MSU5FCWNwdV90b19sZTMyKDB4MDAwMDAwMDMpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9QT1dFUl9MSU5FCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9EU0wJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9GSUJSRV9DSEFOTkVMCWNwdV90b19sZTMyKDB4MDAwMDAwMDYpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV8xMzk0CQljcHVfdG9fbGUzMigweDAwMDAwMDA3KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfV0FOCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9NQVgJCWNwdV90b19sZTMyKDB4MDAwMDAwMDkpCiAKIHN0cnVjdCBybmRpc19kYXRhX2hkciB7CiAJX19sZTMyCW1zZ190eXBlOwkJLyogUk5ESVNfTVNHX1BBQ0tFVCAqLwpAQCAtMjI4LDI0ICsyMjUsMjQgQEAKICAqIHRoZXJlIGFyZSBnb2JzIG1vcmUgdGhhdCBtYXkgb3B0aW9uYWxseSBiZSBzdXBwb3J0ZWQuICBXZSdsbCBhdm9pZCBhcyBtdWNoCiAgKiBvZiB0aGF0IG1lc3MgYXMgcG9zc2libGUuCiAgKi8KLSNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCWNjcHUyKDB4MDEwMTAxMDEpCi0jZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFCWNjcHUyKDB4MDAwMTAxMDYpCi0jZGVmaW5lIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSCWNjcHUyKDB4MDAwMTAxMGUpCi0jZGVmaW5lIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNCQljY3B1MigweDAwMDEwMjAyKQorI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMSkKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUJY3B1X3RvX2xlMzIoMHgwMDAxMDEwNikKKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIJY3B1X3RvX2xlMzIoMHgwMDAxMDEwZSkKKyNkZWZpbmUgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0JCWNwdV90b19sZTMyKDB4MDAwMTAyMDIpCiAKIC8qIHBhY2tldCBmaWx0ZXIgYml0cyB1c2VkIGJ5IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICovCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQljY3B1MigweDAwMDAwMDAxKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCWNjcHUyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJCWNjcHUyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJY2NwdTIoMHgwMDAwMDAwOCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcJY2NwdTIoMHgwMDAwMDAxMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJCWNjcHUyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1NNVAkJCWNjcHUyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTAkJY2NwdTIoMHgwMDAwMDA4MCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfR1JPVVAJCQljY3B1MigweDAwMDAxMDAwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTAljY3B1MigweDAwMDAyMDAwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMCQljY3B1MigweDAwMDA0MDAwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUJCWNjcHUyKDB4MDAwMDgwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcJY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX1NNVAkJCWNwdV90b19sZTMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfR1JPVVAJCQljcHVfdG9fbGUzMigweDAwMDAxMDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTAljcHVfdG9fbGUzMigweDAwMDAyMDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMCQljcHVfdG9fbGUzMigweDAwMDA0MDAwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUJCWNwdV90b19sZTMyKDB4MDAwMDgwMDApCiAKIC8qIGRlZmF1bHQgZmlsdGVyIHVzZWQgd2l0aCBSTkRJUyBkZXZpY2VzICovCiAjZGVmaW5lIFJORElTX0RFRkFVTFRfRklMVEVSICggXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAwYjg2MTdhLi5iOTU4NDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMTMwLDcgKzEzMCw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UJCSpkZXY7CiAJc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyCSp0eXBlOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlCQkqaW50ZXJmYWNlOwotCXVuc2lnbmVkIGNoYXIJCQlkaXNjb25uZWN0ZWQ7CisJdW5zaWduZWQgY2hhcgkJCWRpc2Nvbm5lY3RlZDoxOworCXVuc2lnbmVkIGNoYXIJCQlzdXNwZW5kaW5nOjE7CiAJdW5zaWduZWQgY2hhcgkJCW1pbm9yOwogCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydHM7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0X3BvaW50ZXJzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAppbmRleCA3ZDM4MjIyLi4zNmZhYmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaApAQCAtMTc2LDYgKzE3NiwxMSBAQAogCXNpemVfdAkJCWxlbmd0aDsKIH07CiAKK2V4dGVybiBpbnQgdXNibmV0X29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIGludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gaW50IHVzYm5ldF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiB2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiBpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KTsKIAogZXh0ZXJuIGludCB1c2JuZXRfZ2V0X2VuZHBvaW50cyhzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOwogZXh0ZXJuIHZvaWQgdXNibmV0X2RlZmVyX2tldmVudCAoc3RydWN0IHVzYm5ldCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaCBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKaW5kZXggMWVlYTFhYi4uM2QxNWZiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCkBAIC05NiwzOSArOTYsMjYgQEAKICNkZWZpbmUgVVNfUFJfQ0JJCTB4MDAJCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgKi8KICNkZWZpbmUgVVNfUFJfQ0IJMHgwMQkJLyogQ29udHJvbC9CdWxrIHcvbyBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgVVNfUFJfQlVMSwkweDUwCQkvKiBidWxrIG9ubHkgKi8KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKwogI2RlZmluZSBVU19QUl9VU0JBVAkweDgwCQkvKiBTQ00tQVRBUEkgYnJpZGdlICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CiAjZGVmaW5lIFVTX1BSX0VVU0JfU0REUjA5CTB4ODEJLyogU0NNLVNDU0kgYnJpZGdlIGZvciBTRERSLTA5ICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CiAjZGVmaW5lIFVTX1BSX1NERFI1NQkweDgyCQkvKiBTRERSLTU1IChtYWRlIHVwKSAqLwotI2VuZGlmCiAjZGVmaW5lIFVTX1BSX0RQQ01fVVNCICAweGYwCQkvKiBDb21iaW5hdGlvbiBDQi9TRERSMDkgKi8KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQogI2RlZmluZSBVU19QUl9GUkVFQ09NICAgMHhmMQkJLyogRnJlZWNvbSAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKICNkZWZpbmUgVVNfUFJfREFUQUZBQiAgIDB4ZjIJCS8qIERhdGFmYWIgY2hpcHNldHMgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAogI2RlZmluZSBVU19QUl9KVU1QU0hPVCAgMHhmMwkJLyogTGV4YXIgSnVtcHNob3QgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEKICNkZWZpbmUgVVNfUFJfQUxBVURBICAgIDB4ZjQJCS8qIEFsYXVkYSBjaGlwc2V0cyAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCiAjZGVmaW5lIFVTX1BSX0tBUk1BICAgICAweGY1CQkvKiBSaW8gS2FybWEgKi8KLSNlbmRpZgogCiAjZGVmaW5lIFVTX1BSX0RFVklDRQkweGZmCQkvKiBVc2UgZGV2aWNlJ3MgdmFsdWUgKi8KIAogLyoKICAqLworZXh0ZXJuIGludCB1c2JfdXN1YWxfaWdub3JlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3N0b3JhZ2VfdXNiX2lkc1tdOworCiAjaWZkZWYgQ09ORklHX1VTQl9MSUJVU1VBTAogCi1leHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RvcmFnZV91c2JfaWRzW107CiBleHRlcm4gdm9pZCB1c2JfdXN1YWxfc2V0X3ByZXNlbnQoaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgdXNiX3VzdWFsX2NsZWFyX3ByZXNlbnQoaW50IHR5cGUpOwogZXh0ZXJuIGludCB1c2JfdXN1YWxfY2hlY2tfdHlwZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqLCBpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3V0aW1lLmggYi9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKaW5kZXggNjQwYmU2YS4uNWNkZjY3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91dGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXRpbWUuaApAQCAtNCw4ICs0LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0JdGltZV90IGFjdGltZTsKLQl0aW1lX3QgbW9kdGltZTsKKwlfX2tlcm5lbF90aW1lX3QgYWN0aW1lOworCV9fa2VybmVsX3RpbWVfdCBtb2R0aW1lOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDNlZmE4NmMuLjI0MjM0OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0yMiwxMSArMjIsMTkgQEAKICNkZWZpbmUgVklSVElPX05FVF9GX0hPU1RfRUNOCTEzCS8qIEhvc3QgY2FuIGhhbmRsZSBUU09bNl0gdy8gRUNOIGluLiAqLwogI2RlZmluZSBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8JMTQJLyogSG9zdCBjYW4gaGFuZGxlIFVGTyBpbi4gKi8KICNkZWZpbmUgVklSVElPX05FVF9GX01SR19SWEJVRgkxNQkvKiBIb3N0IGNhbiBtZXJnZSByZWNlaXZlIGJ1ZmZlcnMuICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9TVEFUVVMJMTYJLyogdmlydGlvX25ldF9jb25maWcuc3RhdHVzIGF2YWlsYWJsZSAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9WUQkxNwkvKiBDb250cm9sIGNoYW5uZWwgYXZhaWxhYmxlICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9DVFJMX1JYCTE4CS8qIENvbnRyb2wgY2hhbm5lbCBSWCBtb2RlIHN1cHBvcnQgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NUUkxfVkxBTgkxOQkvKiBDb250cm9sIGNoYW5uZWwgVkxBTiBmaWx0ZXJpbmcgKi8KKworI2RlZmluZSBWSVJUSU9fTkVUX1NfTElOS19VUAkxCS8qIExpbmsgaXMgdXAgKi8KIAogc3RydWN0IHZpcnRpb19uZXRfY29uZmlnCiB7CiAJLyogVGhlIGNvbmZpZyBkZWZpbmluZyBtYWMgYWRkcmVzcyAoaWYgVklSVElPX05FVF9GX01BQykgKi8KIAlfX3U4IG1hY1s2XTsKKwkvKiBTZWUgVklSVElPX05FVF9GX1NUQVRVUyBhbmQgVklSVElPX05FVF9TXyogYWJvdmUgKi8KKwlfX3UxNiBzdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBUaGlzIGlzIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzY2F0dGVyLWdhdGhlciBsaXN0LiAgSWYgeW91IGRvbid0CkBAIC01NCw0ICs2Miw2NyBAQAogCV9fdTE2IG51bV9idWZmZXJzOwkvKiBOdW1iZXIgb2YgbWVyZ2VkIHJ4IGJ1ZmZlcnMgKi8KIH07CiAKKy8qCisgKiBDb250cm9sIHZpcnRxdWV1ZSBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBUaGUgY29udHJvbCB2aXJ0cXVldWUgZXhwZWN0cyBhIGhlYWRlciBpbiB0aGUgZmlyc3Qgc2cgZW50cnkKKyAqIGFuZCBhbiBhY2svc3RhdHVzIHJlc3BvbnNlIGluIHRoZSBsYXN0IGVudHJ5LiAgRGF0YSBmb3IgdGhlCisgKiBjb21tYW5kIGdvZXMgaW4gYmV0d2Vlbi4KKyAqLworc3RydWN0IHZpcnRpb19uZXRfY3RybF9oZHIgeworCV9fdTggY2xhc3M7CisJX191OCBjbWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIF9fdTggdmlydGlvX25ldF9jdHJsX2FjazsKKworI2RlZmluZSBWSVJUSU9fTkVUX09LICAgICAwCisjZGVmaW5lIFZJUlRJT19ORVRfRVJSICAgIDEKKworLyoKKyAqIENvbnRyb2wgdGhlIFJYIG1vZGUsIGllLiBwcm9taXN1Y291cyBhbmQgYWxsbXVsdGkuICBQUk9NSVNDIGFuZAorICogQUxMTVVMVEkgY29tbWFuZHMgcmVxdWlyZSBhbiAib3V0IiBzZyBlbnRyeSBjb250YWluaW5nIGEgMSBieXRlCisgKiBzdGF0ZSB2YWx1ZSwgemVybyA9IGRpc2FibGUsIG5vbi16ZXJvID0gZW5hYmxlLiAgVGhlc2UgY29tbWFuZHMKKyAqIGFyZSBzdXBwb3J0ZWQgd2l0aCB0aGUgVklSVElPX05FVF9GX0NUUkxfUlggZmVhdHVyZS4KKyAqLworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlggICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYX1BST01JU0MgICAgICAwCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfQUxMTVVMVEkgICAgIDEKKworLyoKKyAqIENvbnRyb2wgdGhlIE1BQyBmaWx0ZXIgdGFibGUuCisgKgorICogVGhlIE1BQyBmaWx0ZXIgdGFibGUgaXMgbWFuYWdlZCBieSB0aGUgaHlwZXJ2aXNvciwgdGhlIGd1ZXN0IHNob3VsZAorICogYXNzdW1lIHRoZSBzaXplIGlzIGluZmluaXRlLiAgRmlsdGVyaW5nIHNob3VsZCBiZSBjb25zaWRlcmVkCisgKiBub24tcGVyZmVjdCwgaWUuIGJhc2VkIG9uIGh5cGVydmlzb3IgcmVzb3VyY2VzLCB0aGUgZ3Vlc3QgbWF5CisgKiByZWNlaXZlZCBwYWNrZXRzIGZyb20gc291cmNlcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBmaWx0ZXIgbGlzdC4KKyAqCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgY2xhc3MvY21kIGhlYWRlciwgdGhlIFRBQkxFX1NFVCBjb21tYW5kIHJlcXVpcmVzCisgKiB0d28gb3V0IHNjYXR0ZXJsaXN0cy4gIEVhY2ggY29udGFpbnMgYSA0IGJ5dGUgY291bnQgb2YgZW50cmllcyBmb2xsb3dlZAorICogYnkgYSBjb25jYXRlbmF0ZWQgYnl0ZSBzdHJlYW0gb2YgdGhlIEVUSF9BTEVOIE1BQyBhZGRyZXNzZXMuICBUaGUKKyAqIGZpcnN0IHNnIGxpc3QgY29udGFpbnMgdW5pY2FzdCBhZGRyZXNzZXMsIHRoZSBzZWNvbmQgaXMgZm9yIG11bHRpY2FzdC4KKyAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGlmIHRoZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWCBmZWF0dXJlCisgKiBpcyBhdmFpbGFibGUuCisgKi8KK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjIHsKKwlfX3UzMiBlbnRyaWVzOworCV9fdTggbWFjc1tdW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVklSVElPX05FVF9DVFJMX01BQyAgICAxCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCAgICAgICAgMAorCisvKgorICogQ29udHJvbCBWTEFOIGZpbHRlcmluZworICoKKyAqIFRoZSBWTEFOIGZpbHRlciB0YWJsZSBpcyBjb250cm9sbGVkIHZpYSBhIHNpbXBsZSBBREQvREVMIGludGVyZmFjZS4KKyAqIFZMQU4gSURzIG5vdCBhZGRlZCBtYXkgYmUgZmlsdGVyZCBieSB0aGUgaHlwZXJ2aXNvci4gIERlbCBpcyB0aGUKKyAqIG9wcG9zaXRlIG9mIGFkZC4gIEJvdGggY29tbWFuZHMgZXhwZWN0IGFuIG91dCBlbnRyeSBjb250YWluaW5nIGEgMgorICogYnl0ZSBWTEFOIElELiAgVkxBTiBmaWx0ZXJ0aW5nIGlzIGF2YWlsYWJsZSB3aXRoIHRoZQorICogVklSVElPX05FVF9GX0NUUkxfVkxBTiBmZWF0dXJlIGJpdC4KKyAqLworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTiAgICAgICAyCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTl9BREQgICAgICAgICAgICAgMAorICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1ZMQU5fREVMICAgICAgICAgICAgIDEKKwogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaCBiL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaAppbmRleCBiYTBjNDkzLi5jNzAzZTAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oCkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJV0FSTl9PTigxKTsKIAl9IGVsc2UKIAkJc25wcmludGYoaGVhZCwgaGVhZF9zaXplLCAiJXMgJXM6ICIsCi0JCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgZGV2LT5idXNfaWQpOworCQkJIGRldl9kcml2ZXJfc3RyaW5nKGRldiksIGRldl9uYW1lKGRldikpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmggYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCmluZGV4IDc0MTk4ZjUuLmQ1MTQ4YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKKysrIGIvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaApAQCAtMjA3LDYgKzIwNyw3IEBACiAJSTI0MDBNX1BUX1RSQUNFLAkvKiBGb3IgZGV2aWNlIGRlYnVnICovCiAJSTI0MDBNX1BUX1JFU0VUX1dBUk0sCS8qIGRldmljZSByZXNldCAqLwogCUkyNDAwTV9QVF9SRVNFVF9DT0xELAkvKiBVU0JbdHJhbnNwb3J0XSByZXNldCwgbGlrZSByZWNvbm5lY3QgKi8KKwlJMjQwME1fUFRfRURBVEEsCS8qIEV4dGVuZGVkIFJYIGRhdGEgKi8KIAlJMjQwME1fUFRfSUxMRUdBTAogfTsKIApAQCAtMjIxLDYgKzIyMiw0OCBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogCisvKgorICogUGF5bG9hZCBmb3IgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqCisgKiBOZXcgaW4gZncgdjEuNAorICoKKyAqIEByZW9yZGVyOiBpZiB0aGlzIHBheWxvYWQgaGFzIHRvIGJlIHJlb3JkZXIgb3Igbm90IChhbmQgaG93KQorICogQGNzOiB0aGUgdHlwZSBvZiBkYXRhIGluIHRoZSBwYWNrZXQsIGFzIGRlZmluZWQgcGVyICg4MDIuMTZlCisgKiAgICAgVDExLjEzLjE5LjEpLiBDdXJyZW50bHkgb25seSAyIChJUHY0IHBhY2tldCkgc3VwcG9ydGVkLgorICoKKyAqIFRoaXMgaXMgcHJlZml4ZWQgdG8gZWFjaCBhbmQgZXZlcnkgSU5DT01JTkcgREFUQSBwYWNrZXQuCisgKi8KK3N0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyIHsKKwlfX2xlMzIgcmVvcmRlcjsJCS8qIGJpdHMgZGVmaW5lZCBpbiBpMjQwMG1fcm8gKi8KKwlfX3U4IGNzOworCV9fdTggcmVzZXJ2ZWRbMTFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworZW51bSBpMjQwMG1fY3MgeworCUkyNDAwTV9DU19JUFY0XzAgPSAwLAorCUkyNDAwTV9DU19JUFY0ID0gMiwKK307CisKK2VudW0gaTI0MDBtX3JvIHsKKwlJMjQwME1fUk9fTkVFREVEICAgICA9IDB4MDEsCisJSTI0MDBNX1JPX1RZUEUgICAgICAgPSAweDAzLAorCUkyNDAwTV9ST19UWVBFX1NISUZUID0gMSwKKwlJMjQwME1fUk9fQ0lOICAgICAgICA9IDB4MGYsCisJSTI0MDBNX1JPX0NJTl9TSElGVCAgPSA0LAorCUkyNDAwTV9ST19GQk4gICAgICAgID0gMHgwN2ZmLAorCUkyNDAwTV9ST19GQk5fU0hJRlQgID0gOCwKKwlJMjQwME1fUk9fU04gICAgICAgICA9IDB4MDdmZiwKKwlJMjQwME1fUk9fU05fU0hJRlQgICA9IDIxLAorfTsKKworZW51bSBpMjQwMG1fcm9fdHlwZSB7CisJSTI0MDBNX1JPX1RZUEVfUkVTRVQgPSAwLAorCUkyNDAwTV9ST19UWVBFX1BBQ0tFVCwKKwlJMjQwME1fUk9fVFlQRV9XUywKKwlJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1MsCit9OworCisKIC8qIE1pc2MgY29uc3RhbnRzICovCiBlbnVtIHsKIAlJMjQwME1fUExfUEFEID0gMTYsCS8qIFBheWxvYWQgZGF0YSBzaXplIGFsaWdubWVudCAqLwpAQCAtMzgxLDYgKzQyNCw5IEBACiAJSTI0MDBNX1RMVl9SRl9TVEFUVVMgPSAxNjMsCiAJSTI0MDBNX1RMVl9ERVZJQ0VfUkVTRVRfVFlQRSA9IDEzMiwKIAlJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMgPSA2MDEsCisJSTI0MDBNX1RMVl9DT05GSUdfSURMRV9USU1FT1VUID0gNjExLAorCUkyNDAwTV9UTFZfQ09ORklHX0QySF9EQVRBX0ZPUk1BVCA9IDYxNCwKKwlJMjQwME1fVExWX0NPTkZJR19ETF9IT1NUX1JFT1JERVIgPSA2MTUsCiB9OwogCiAKQEAgLTUwOSw0ICs1NTUsMjcgQEAKIAlfX2xlMzIgbWVkaWFfc3RhdHVzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorCisvKiBOZXcgaW4gdjEuNCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfdGltZW91dCB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX2xlMzIgdGltZW91dDsJLyogMTAwIHRvIDMwMDAwMCBtcyBbNW1pbl0sIDEwMCBpbmNyZW1lbnRzCisJCQkgKiAwIGRpc2FibGVkICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBOZXcgaW4gdjEuNCAtLSBmb3IgYmFja3dhcmQgY29tcGF0LCB3aWxsIGJlIHJlbW92ZWQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kMmhfZGF0YV9mb3JtYXQgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX191OCBmb3JtYXQ7IAkJLyogMCBvbGQgZm9ybWF0LCAxIGVuaGFuY2VkICovCisJX191OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE5ldyBpbiB2MS40ICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZGxfaG9zdF9yZW9yZGVyIHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fdTggcmVvcmRlcjsgCQkvKiAwIGRpc2FibGVkLCAxIGVuYWJsZWQgKi8KKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCiAjZW5kaWYgLyogI2lmbmRlZiBfX0xJTlVYX19XSU1BWF9fSTI0MDBNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oIGIvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCmluZGV4IGQ3OTU4ZjkuLmNiMjQyMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKQEAgLTU3NywxOCArNTc3LDIyIEBACiAjZGVmaW5lIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0wJOAogI2RlZmluZSBJV19BVVRIX1JPQU1JTkdfQ09OVFJPTAkJOQogI2RlZmluZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRAkJMTAKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfR1JPVVBfTUdNVAkxMQorI2RlZmluZSBJV19BVVRIX01GUAkJCTEyCiAKIC8qIElXX0FVVEhfV1BBX1ZFUlNJT04gdmFsdWVzIChiaXQgZmllbGQpICovCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQJMHgwMDAwMDAwMQogI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQQkJMHgwMDAwMDAwMgogI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIJMHgwMDAwMDAwNAogCi0vKiBJV19BVVRIX1BBSVJXSVNFX0NJUEhFUiBhbmQgSVdfQVVUSF9HUk9VUF9DSVBIRVIgdmFsdWVzIChiaXQgZmllbGQpICovCisvKiBJV19BVVRIX1BBSVJXSVNFX0NJUEhFUiwgSVdfQVVUSF9HUk9VUF9DSVBIRVIsIGFuZCBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UCisgKiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfTk9ORQkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDQwCTB4MDAwMDAwMDIKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfVEtJUAkweDAwMDAwMDA0CiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0NDTVAJMHgwMDAwMDAwOAogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9XRVAxMDQJMHgwMDAwMDAxMAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9BRVNfQ01BQwkweDAwMDAwMDIwCiAKIC8qIElXX0FVVEhfS0VZX01HTVQgdmFsdWVzIChiaXQgZmllbGQpICovCiAjZGVmaW5lIElXX0FVVEhfS0VZX01HTVRfODAyXzFYCTEKQEAgLTYwNCw2ICs2MDgsMTEgQEAKICNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0RJU0FCTEUJMQkvKiB1c2VyIHNwYWNlIHByb2dyYW0gdXNlZCBmb3Igcm9hbWluZwogCQkJCQkgKiBjb250cm9sICovCiAKKy8qIElXX0FVVEhfTUZQIChtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24pIHZhbHVlcyAqLworI2RlZmluZSBJV19BVVRIX01GUF9ESVNBQkxFRAkwCS8qIE1GUCBkaXNhYmxlZCAqLworI2RlZmluZSBJV19BVVRIX01GUF9PUFRJT05BTAkxCS8qIE1GUCBvcHRpb25hbCAqLworI2RlZmluZSBJV19BVVRIX01GUF9SRVFVSVJFRAkyCS8qIE1GUCByZXF1aXJlZCAqLworCiAvKiBTSU9DU0lXRU5DT0RFRVhUIGRlZmluaXRpb25zICovCiAjZGVmaW5lIElXX0VOQ09ERV9TRVFfTUFYX1NJWkUJOAogLyogc3RydWN0IGl3X2VuY29kZV9leHQgLT5hbGcgKi8KQEAgLTYxMiw2ICs2MjEsNyBAQAogI2RlZmluZSBJV19FTkNPREVfQUxHX1RLSVAJMgogI2RlZmluZSBJV19FTkNPREVfQUxHX0NDTVAJMwogI2RlZmluZSBJV19FTkNPREVfQUxHX1BNSwk0CisjZGVmaW5lIElXX0VOQ09ERV9BTEdfQUVTX0NNQUMJNQogLyogc3RydWN0IGl3X2VuY29kZV9leHQgLT5leHRfZmxhZ3MgKi8KICNkZWZpbmUgSVdfRU5DT0RFX0VYVF9UWF9TRVFfVkFMSUQJMHgwMDAwMDAwMQogI2RlZmluZSBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRAkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDUyZjNhYmQuLjJkNGVjMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC01OCw3ICs1OCw3IEBACiAJX191OAlwcmVmaXhsZW5fczsKIAlfX3U4CXByb3RvOwogCWludAlpZmluZGV4OwotCXVpZF90CXVzZXI7CisJX19rZXJuZWxfdWlkMzJfdAl1c2VyOwogfTsKIAogI2RlZmluZSBYRlJNX0lORiAofihfX3U2NCkwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oIGIvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCmluZGV4IGQ0MDlkNDguLjgzNzZiZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKQEAgLTE2LDMzICsxNiwzMyBAQAogLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgaW5mdGxfYmNpIHsKLQl1aW50OF90IEVDQ3NpZ1s2XTsKLQl1aW50OF90IFN0YXR1czsKLQl1aW50OF90IFN0YXR1czE7CisJX191OCBFQ0NzaWdbNl07CisJX191OCBTdGF0dXM7CisJX191OCBTdGF0dXMxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGluZnRsX3VuaXRoZWFkMSB7Ci0JdWludDE2X3QgdmlydHVhbFVuaXRObzsKLQl1aW50MTZfdCBwcmV2VW5pdE5vOwotCXVpbnQ4X3QgQU5BQzsKLQl1aW50OF90IE5BQ3M7Ci0JdWludDhfdCBwYXJpdHlQZXJGaWVsZDsKLQl1aW50OF90IGRpc2NhcmRlZDsKKwlfX3UxNiB2aXJ0dWFsVW5pdE5vOworCV9fdTE2IHByZXZVbml0Tm87CisJX191OCBBTkFDOworCV9fdTggTkFDczsKKwlfX3U4IHBhcml0eVBlckZpZWxkOworCV9fdTggZGlzY2FyZGVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGluZnRsX3VuaXRoZWFkMiB7Ci0JdWludDhfdCBwYXJpdHlQZXJGaWVsZDsKLQl1aW50OF90IEFOQUM7Ci0JdWludDE2X3QgcHJldlVuaXRObzsKLQl1aW50MTZfdCB2aXJ0dWFsVW5pdE5vOwotCXVpbnQ4X3QgTkFDczsKLQl1aW50OF90IGRpc2NhcmRlZDsKKwlfX3U4IHBhcml0eVBlckZpZWxkOworCV9fdTggQU5BQzsKKwlfX3UxNiBwcmV2VW5pdE5vOworCV9fdTE2IHZpcnR1YWxVbml0Tm87CisJX191OCBOQUNzOworCV9fdTggZGlzY2FyZGVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGluZnRsX3VuaXR0YWlsIHsKLQl1aW50OF90IFJlc2VydmVkWzRdOwotCXVpbnQxNl90IEVyYXNlTWFyazsKLQl1aW50MTZfdCBFcmFzZU1hcmsxOworCV9fdTggUmVzZXJ2ZWRbNF07CisJX191MTYgRXJhc2VNYXJrOworCV9fdTE2IEVyYXNlTWFyazE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiB1bmlvbiBpbmZ0bF91Y2kgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvamZmczItdXNlci5oIGIvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCmluZGV4IDAwMTY4NWQuLmZhOTRiMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmgKQEAgLTcsNiArNyw3IEBACiAKIC8qIFRoaXMgZmlsZSBpcyBibGVzc2VkIGZvciBpbmNsdXNpb24gYnkgdXNlcnNwYWNlICovCiAjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGVuZGlhbi5oPgogI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAKQEAgLTE5LDggKzIwLDggQEAKIAogZXh0ZXJuIGludCB0YXJnZXRfZW5kaWFuOwogCi0jZGVmaW5lIHQxNih4KSAoeyB1aW50MTZfdCBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8xNihfX2IpOyB9KQotI2RlZmluZSB0MzIoeCkgKHsgdWludDMyX3QgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMzIoX19iKTsgfSkKKyNkZWZpbmUgdDE2KHgpICh7IF9fdTE2IF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzE2KF9fYik7IH0pCisjZGVmaW5lIHQzMih4KSAoeyBfX3UzMiBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8zMihfX2IpOyB9KQogCiAjZGVmaW5lIGNwdV90b19qZTE2KHgpICgoamludDE2X3Qpe3QxNih4KX0pCiAjZGVmaW5lIGNwdV90b19qZTMyKHgpICgoamludDMyX3Qpe3QzMih4KX0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9tdGQtYWJpLmggYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKaW5kZXggYzZjNjFjZC4uYjY1OTViMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCisrKyBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaApAQCAtNSwxNCArNSwxNiBAQAogI2lmbmRlZiBfX01URF9BQklfSF9fCiAjZGVmaW5lIF9fTVREX0FCSV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIgewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKKwlfX3UzMiBzdGFydDsKKwlfX3UzMiBsZW5ndGg7CiB9OwogCiBzdHJ1Y3QgbXRkX29vYl9idWYgewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKKwlfX3UzMiBzdGFydDsKKwlfX3UzMiBsZW5ndGg7CiAJdW5zaWduZWQgY2hhciBfX3VzZXIgKnB0cjsKIH07CiAKQEAgLTQ4LDMwICs1MCwzMCBAQAogI2RlZmluZSBNVERfT1RQX1VTRVIJCTIKIAogc3RydWN0IG10ZF9pbmZvX3VzZXIgewotCXVpbnQ4X3QgdHlwZTsKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECi0JdWludDMyX3QgZXJhc2VzaXplOwotCXVpbnQzMl90IHdyaXRlc2l6ZTsKLQl1aW50MzJfdCBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCisJX191OCB0eXBlOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHNpemU7CSAvLyBUb3RhbCBzaXplIG9mIHRoZSBNVEQKKwlfX3UzMiBlcmFzZXNpemU7CisJX191MzIgd3JpdGVzaXplOworCV9fdTMyIG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKIAkvKiBUaGUgYmVsb3cgdHdvIGZpZWxkcyBhcmUgb2Jzb2xldGUgYW5kIGJyb2tlbiwgZG8gbm90IHVzZSB0aGVtCiAJICogKFRPRE86IHJlbW92ZSBhdCBzb21lIHBvaW50KSAqLwotCXVpbnQzMl90IGVjY3R5cGU7Ci0JdWludDMyX3QgZWNjc2l6ZTsKKwlfX3UzMiBlY2N0eXBlOworCV9fdTMyIGVjY3NpemU7CiB9OwogCiBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlciB7Ci0JdWludDMyX3Qgb2Zmc2V0OwkJLyogQXQgd2hpY2ggdGhpcyByZWdpb24gc3RhcnRzLAorCV9fdTMyIG9mZnNldDsJCS8qIEF0IHdoaWNoIHRoaXMgcmVnaW9uIHN0YXJ0cywKIAkJCQkJICogZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNVEQgKi8KLQl1aW50MzJfdCBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KLQl1aW50MzJfdCBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgcmVnaW9uICovCi0JdWludDMyX3QgcmVnaW9uaW5kZXg7CisJX191MzIgZXJhc2VzaXplOwkJLyogRm9yIHRoaXMgcmVnaW9uICovCisJX191MzIgbnVtYmxvY2tzOwkJLyogTnVtYmVyIG9mIGJsb2NrcyBpbiB0aGlzIHJlZ2lvbiAqLworCV9fdTMyIHJlZ2lvbmluZGV4OwogfTsKIAogc3RydWN0IG90cF9pbmZvIHsKLQl1aW50MzJfdCBzdGFydDsKLQl1aW50MzJfdCBsZW5ndGg7Ci0JdWludDMyX3QgbG9ja2VkOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiBsb2NrZWQ7CiB9OwogCiAjZGVmaW5lIE1FTUdFVElORk8JCV9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKQEAgLTg0LDggKzg2LDggQEAKICNkZWZpbmUgTUVNR0VUUkVHSU9OSU5GTwlfSU9XUignTScsIDgsIHN0cnVjdCByZWdpb25faW5mb191c2VyKQogI2RlZmluZSBNRU1TRVRPT0JTRUwJCV9JT1coJ00nLCA5LCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQogI2RlZmluZSBNRU1HRVRPT0JTRUwJCV9JT1IoJ00nLCAxMCwgc3RydWN0IG5hbmRfb29iaW5mbykKLSNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMSwgbG9mZl90KQotI2RlZmluZSBNRU1TRVRCQURCTE9DSwkJX0lPVygnTScsIDEyLCBsb2ZmX3QpCisjZGVmaW5lIE1FTUdFVEJBREJMT0NLCQlfSU9XKCdNJywgMTEsIF9fa2VybmVsX2xvZmZfdCkKKyNkZWZpbmUgTUVNU0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMiwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBPVFBTRUxFQ1QJCV9JT1IoJ00nLCAxMywgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVAlfSU9XKCdNJywgMTQsIGludCkKICNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTwlfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKQEAgLTk5LDE1ICsxMDEsMTUgQEAKICAqIGludGVyZmFjZXMKICAqLwogc3RydWN0IG5hbmRfb29iaW5mbyB7Ci0JdWludDMyX3QgdXNlZWNjOwotCXVpbnQzMl90IGVjY2J5dGVzOwotCXVpbnQzMl90IG9vYmZyZWVbOF1bMl07Ci0JdWludDMyX3QgZWNjcG9zWzMyXTsKKwlfX3UzMiB1c2VlY2M7CisJX191MzIgZWNjYnl0ZXM7CisJX191MzIgb29iZnJlZVs4XVsyXTsKKwlfX3UzMiBlY2Nwb3NbMzJdOwogfTsKIAogc3RydWN0IG5hbmRfb29iZnJlZSB7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IGxlbmd0aDsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgbGVuZ3RoOwogfTsKIAogI2RlZmluZSBNVERfTUFYX09PQkZSRUVfRU5UUklFUwk4CkBAIC0xMTYsOSArMTE4LDkgQEAKICAqIGRpYWdub3NpcyBhbmQgdG8gYWxsb3cgY3JlYXRpb24gb2YgcmF3IGltYWdlcwogICovCiBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgewotCXVpbnQzMl90IGVjY2J5dGVzOwotCXVpbnQzMl90IGVjY3Bvc1s2NF07Ci0JdWludDMyX3Qgb29iYXZhaWw7CisJX191MzIgZWNjYnl0ZXM7CisJX191MzIgZWNjcG9zWzY0XTsKKwlfX3UzMiBvb2JhdmFpbDsKIAlzdHJ1Y3QgbmFuZF9vb2JmcmVlIG9vYmZyZWVbTVREX01BWF9PT0JGUkVFX0VOVFJJRVNdOwogfTsKIApAQCAtMTMxLDEwICsxMzMsMTAgQEAKICAqIEBiYnRibG9ja3M6CW51bWJlciBvZiBibG9ja3MgcmVzZXJ2ZWQgZm9yIGJhZCBibG9jayB0YWJsZXMKICAqLwogc3RydWN0IG10ZF9lY2Nfc3RhdHMgewotCXVpbnQzMl90IGNvcnJlY3RlZDsKLQl1aW50MzJfdCBmYWlsZWQ7Ci0JdWludDMyX3QgYmFkYmxvY2tzOwotCXVpbnQzMl90IGJidGJsb2NrczsKKwlfX3UzMiBjb3JyZWN0ZWQ7CisJX191MzIgZmFpbGVkOworCV9fdTMyIGJhZGJsb2NrczsKKwlfX3UzMiBiYnRibG9ja3M7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaAppbmRleCAzOTBkMjFjLi45OGU5ZTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaApAQCAtNiwzMyArNiwzNSBAQAogI2lmbmRlZiBfX01URF9ORlRMX1VTRVJfSF9fCiAjZGVmaW5lIF9fTVREX05GVExfVVNFUl9IX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIEJsb2NrIENvbnRyb2wgSW5mb3JtYXRpb24gKi8KIAogc3RydWN0IG5mdGxfYmNpIHsKIAl1bnNpZ25lZCBjaGFyIEVDQ1NpZ1s2XTsKLQl1aW50OF90IFN0YXR1czsKLQl1aW50OF90IFN0YXR1czE7CisJX191OCBTdGF0dXM7CisJX191OCBTdGF0dXMxOwogfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBVbml0IENvbnRyb2wgSW5mb3JtYXRpb24gKi8KIAogc3RydWN0IG5mdGxfdWNpMCB7Ci0JdWludDE2X3QgVmlydFVuaXROdW07Ci0JdWludDE2X3QgUmVwbFVuaXROdW07Ci0JdWludDE2X3QgU3BhcmVWaXJ0VW5pdE51bTsKLQl1aW50MTZfdCBTcGFyZVJlcGxVbml0TnVtOworCV9fdTE2IFZpcnRVbml0TnVtOworCV9fdTE2IFJlcGxVbml0TnVtOworCV9fdTE2IFNwYXJlVmlydFVuaXROdW07CisJX191MTYgU3BhcmVSZXBsVW5pdE51bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBuZnRsX3VjaTEgewotCXVpbnQzMl90IFdlYXJJbmZvOwotCXVpbnQxNl90IEVyYXNlTWFyazsKLQl1aW50MTZfdCBFcmFzZU1hcmsxOworCV9fdTMyIFdlYXJJbmZvOworCV9fdTE2IEVyYXNlTWFyazsKKwlfX3UxNiBFcmFzZU1hcmsxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdGxfdWNpMiB7Ci0gICAgICAgIHVpbnQxNl90IEZvbGRNYXJrOwotICAgICAgICB1aW50MTZfdCBGb2xkTWFyazE7Ci0JdWludDMyX3QgdW51c2VkOworICAgICAgICBfX3UxNiBGb2xkTWFyazsKKyAgICAgICAgX191MTYgRm9sZE1hcmsxOworCV9fdTMyIHVudXNlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIG5mdGxfdWNpIHsKQEAgLTUwLDkgKzUyLDkgQEAKIAogc3RydWN0IE5GVExNZWRpYUhlYWRlciB7CiAJY2hhciBEYXRhT3JnSURbNl07Ci0JdWludDE2X3QgTnVtRXJhc2VVbml0czsKLQl1aW50MTZfdCBGaXJzdFBoeXNpY2FsRVVOOwotCXVpbnQzMl90IEZvcm1hdHRlZFNpemU7CisJX191MTYgTnVtRXJhc2VVbml0czsKKwlfX3UxNiBGaXJzdFBoeXNpY2FsRVVOOworCV9fdTMyIEZvcm1hdHRlZFNpemU7CiAJdW5zaWduZWQgY2hhciBVbml0U2l6ZUZhY3RvcjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL3ViaS11c2VyLmggYi9pbmNsdWRlL210ZC91YmktdXNlci5oCmluZGV4IDI5NmVmYWUuLjQ2NmE4MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaApAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBfX1VCSV9VU0VSX0hfXwogI2RlZmluZSBfX1VCSV9VU0VSX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFVCSSBkZXZpY2UgY3JlYXRpb24gKHRoZSBzYW1lIGFzIE1URCBkZXZpY2UgYXR0YWNobWVudCkKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0xNTIsNyArMTU0LDcgQEAKIC8qIENyZWF0ZSBhbiBVQkkgdm9sdW1lICovCiAjZGVmaW5lIFVCSV9JT0NNS1ZPTCBfSU9XKFVCSV9JT0NfTUFHSUMsIDAsIHN0cnVjdCB1YmlfbWt2b2xfcmVxKQogLyogUmVtb3ZlIGFuIFVCSSB2b2x1bWUgKi8KLSNkZWZpbmUgVUJJX0lPQ1JNVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ1JNVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMSwgX19zMzIpCiAvKiBSZS1zaXplIGFuIFVCSSB2b2x1bWUgKi8KICNkZWZpbmUgVUJJX0lPQ1JTVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMiwgc3RydWN0IHViaV9yc3ZvbF9yZXEpCiAvKiBSZS1uYW1lIHZvbHVtZXMgKi8KQEAgLTE2NSwyNCArMTY3LDI0IEBACiAvKiBBdHRhY2ggYW4gTVREIGRldmljZSAqLwogI2RlZmluZSBVQklfSU9DQVRUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NCwgc3RydWN0IHViaV9hdHRhY2hfcmVxKQogLyogRGV0YWNoIGFuIE1URCBkZXZpY2UgKi8KLSNkZWZpbmUgVUJJX0lPQ0RFVCBfSU9XKFVCSV9DVFJMX0lPQ19NQUdJQywgNjUsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NERVQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY1LCBfX3MzMikKIAogLyogaW9jdGwgY29tbWFuZHMgb2YgVUJJIHZvbHVtZSBjaGFyYWN0ZXIgZGV2aWNlcyAqLwogCiAjZGVmaW5lIFVCSV9WT0xfSU9DX01BR0lDICdPJwogCiAvKiBTdGFydCBVQkkgdm9sdW1lIHVwZGF0ZSAqLwotI2RlZmluZSBVQklfSU9DVk9MVVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMCwgaW50NjRfdCkKKyNkZWZpbmUgVUJJX0lPQ1ZPTFVQIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDAsIF9fczY0KQogLyogTEVCIGVyYXN1cmUgY29tbWFuZCwgdXNlZCBmb3IgZGVidWdnaW5nLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCi0jZGVmaW5lIFVCSV9JT0NFQkVSIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDEsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQkVSIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDEsIF9fczMyKQogLyogQXRvbWljIExFQiBjaGFuZ2UgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJDSCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAyLCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJDSCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAyLCBfX3MzMikKIC8qIE1hcCBMRUIgY29tbWFuZCAqLwogI2RlZmluZSBVQklfSU9DRUJNQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMywgc3RydWN0IHViaV9tYXBfcmVxKQogLyogVW5tYXAgTEVCIGNvbW1hbmQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCVU5NQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgNCwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCVU5NQVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgNCwgX19zMzIpCiAvKiBDaGVjayBpZiBMRUIgaXMgbWFwcGVkIGNvbW1hbmQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCSVNNQVAgX0lPUihVQklfVk9MX0lPQ19NQUdJQywgNSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCSVNNQVAgX0lPUihVQklfVk9MX0lPQ19NQUdJQywgNSwgX19zMzIpCiAvKiBTZXQgYW4gVUJJIHZvbHVtZSBwcm9wZXJ0eSAqLwogI2RlZmluZSBVQklfSU9DU0VUUFJPUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA2LCBzdHJ1Y3QgdWJpX3NldF9wcm9wX3JlcSkKIApAQCAtMjYwLDEwICsyNjIsMTAgQEAKICAqIHN1Yi1wYWdlIG9mIHRoZSBmaXJzdCBwYWdlIGFuZCBhZGQgbmVlZGVkIHBhZGRpbmcuCiAgKi8KIHN0cnVjdCB1YmlfYXR0YWNoX3JlcSB7Ci0JaW50MzJfdCB1YmlfbnVtOwotCWludDMyX3QgbXRkX251bTsKLQlpbnQzMl90IHZpZF9oZHJfb2Zmc2V0OwotCWludDhfdCBwYWRkaW5nWzEyXTsKKwlfX3MzMiB1YmlfbnVtOworCV9fczMyIG10ZF9udW07CisJX19zMzIgdmlkX2hkcl9vZmZzZXQ7CisJX19zOCBwYWRkaW5nWzEyXTsKIH07CiAKIC8qKgpAQCAtMjk4LDEzICszMDAsMTMgQEAKICAqIEJMT0JzLCB3aXRob3V0IGNhcmluZyBhYm91dCBob3cgdG8gcHJvcGVybHkgYWxpZ24gdGhlbS4KICAqLwogc3RydWN0IHViaV9ta3ZvbF9yZXEgewotCWludDMyX3Qgdm9sX2lkOwotCWludDMyX3QgYWxpZ25tZW50OwotCWludDY0X3QgYnl0ZXM7Ci0JaW50OF90IHZvbF90eXBlOwotCWludDhfdCBwYWRkaW5nMTsKLQlpbnQxNl90IG5hbWVfbGVuOwotCWludDhfdCBwYWRkaW5nMls0XTsKKwlfX3MzMiB2b2xfaWQ7CisJX19zMzIgYWxpZ25tZW50OworCV9fczY0IGJ5dGVzOworCV9fczggdm9sX3R5cGU7CisJX19zOCBwYWRkaW5nMTsKKwlfX3MxNiBuYW1lX2xlbjsKKwlfX3M4IHBhZGRpbmcyWzRdOwogCWNoYXIgbmFtZVtVQklfTUFYX1ZPTFVNRV9OQU1FICsgMV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMzIwLDggKzMyMiw4IEBACiAgKiB6ZXJvIG51bWJlciBvZiBieXRlcykuCiAgKi8KIHN0cnVjdCB1YmlfcnN2b2xfcmVxIHsKLQlpbnQ2NF90IGJ5dGVzOwotCWludDMyX3Qgdm9sX2lkOworCV9fczY0IGJ5dGVzOworCV9fczMyIHZvbF9pZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKQEAgLTM1NiwxMiArMzU4LDEyIEBACiAgKiByZS1uYW1lIHJlcXVlc3QuCiAgKi8KIHN0cnVjdCB1Ymlfcm52b2xfcmVxIHsKLQlpbnQzMl90IGNvdW50OwotCWludDhfdCBwYWRkaW5nMVsxMl07CisJX19zMzIgY291bnQ7CisJX19zOCBwYWRkaW5nMVsxMl07CiAJc3RydWN0IHsKLQkJaW50MzJfdCB2b2xfaWQ7Ci0JCWludDE2X3QgbmFtZV9sZW47Ci0JCWludDhfdCAgcGFkZGluZzJbMl07CisJCV9fczMyIHZvbF9pZDsKKwkJX19zMTYgbmFtZV9sZW47CisJCV9fczggIHBhZGRpbmcyWzJdOwogCQljaGFyICAgIG5hbWVbVUJJX01BWF9WT0xVTUVfTkFNRSArIDFdOwogCX0gZW50c1tVQklfTUFYX1JOVk9MXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMzc1LDEwICszNzcsMTAgQEAKICAqIEBwYWRkaW5nOiByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAogICovCiBzdHJ1Y3QgdWJpX2xlYl9jaGFuZ2VfcmVxIHsKLQlpbnQzMl90IGxudW07Ci0JaW50MzJfdCBieXRlczsKLQlpbnQ4X3QgIGR0eXBlOwotCWludDhfdCAgcGFkZGluZ1s3XTsKKwlfX3MzMiBsbnVtOworCV9fczMyIGJ5dGVzOworCV9fczggIGR0eXBlOworCV9fczggIHBhZGRpbmdbN107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoqCkBAIC0zODgsOSArMzkwLDkgQEAKICAqIEBwYWRkaW5nOiByZXNlcnZlZCBmb3IgZnV0dXJlLCBub3QgdXNlZCwgaGFzIHRvIGJlIHplcm9lZAogICovCiBzdHJ1Y3QgdWJpX21hcF9yZXEgewotCWludDMyX3QgbG51bTsKLQlpbnQ4X3QgIGR0eXBlOwotCWludDhfdCAgcGFkZGluZ1szXTsKKwlfX3MzMiBsbnVtOworCV9fczggIGR0eXBlOworCV9fczggIHBhZGRpbmdbM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00MDIsOSArNDA0LDkgQEAKICAqIEB2YWx1ZTogdmFsdWUgdG8gc2V0CiAgKi8KIHN0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxIHsKLSAgICAgICB1aW50OF90ICBwcm9wZXJ0eTsKLSAgICAgICB1aW50OF90ICBwYWRkaW5nWzddOwotICAgICAgIHVpbnQ2NF90IHZhbHVlOworICAgICAgIF9fdTggIHByb3BlcnR5OworICAgICAgIF9fdTggIHBhZGRpbmdbN107CisgICAgICAgX191NjQgdmFsdWU7CiB9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBfX1VCSV9VU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaCBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKaW5kZXggYzIxNmRlNS4uN2I1NWFiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAorKysgYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCkBAIC04OCw4ICs4OCw4IEBACiBleHRlcm4gaW50CQkJaXB2Nl9nZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCQl1bnNpZ25lZCBjaGFyIGJhbm5lZF9mbGFncyk7Ci1leHRlcm4gaW50CQkJaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCAKLQkJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOworZXh0ZXJuIGludCAJCQlpcHY2X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CiBleHRlcm4gdm9pZAkJCWFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiBleHRlcm4gdm9pZAkJCWFkZHJjb25mX2xlYXZlX3NvbGljdChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oIGIvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCmluZGV4IGI1YTUxYTcuLjQ2N2M1MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2F0bWNsaXAuaAorKysgYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKQEAgLTUwLDcgKzUwLDYgQEAKIHN0cnVjdCBjbGlwX3ByaXYgewogCWludCBudW1iZXI7CQkJLyogZm9yIGNvbnZlbmllbmNlIC4uLiAqLwogCXNwaW5sb2NrX3QgeG9mZl9sb2NrOwkJLyogZW5zdXJlcyB0aGF0IHBvcCBpcyBhdG9taWMgKFNNUCkgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dDsJLyogbmV4dCBDTElQIGludGVyZmFjZSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oIGIvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oCmluZGV4IDUxMzI5ZGEuLmI5YTNiZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2F4ODg3OTYuaAorKysgYi9pbmNsdWRlL25ldC9heDg4Nzk2LmgKQEAgLTE1LDE0ICsxNSwxNyBAQAogI2RlZmluZSBBWEZMR19IQVNfRUVQUk9NCQkoMTw8MCkKICNkZWZpbmUgQVhGTEdfTUFDX0ZST01ERVYJCSgxPDwxKQkvKiBkZXZpY2UgYWxyZWFkeSBoYXMgTUFDICovCiAjZGVmaW5lIEFYRkxHX0hBU185M0NYNgkJCSgxPDwyKQkvKiB1c2UgZWVwcm9tXzkzY3g2IGRyaXZlciAqLworI2RlZmluZSBBWEZMR19NQUNfRlJPTVBMQVRGT1JNCQkoMTw8MykJLyogTUFDIGdpdmVuIGJ5IHBsYXRmb3JtIGRhdGEgKi8KIAogc3RydWN0IGF4X3BsYXRfZGF0YSB7CiAJdW5zaWduZWQgaW50CSBmbGFnczsKLQl1bnNpZ25lZCBjaGFyCSB3b3JkbGVuZ3RoOwkJLyogMSBvciAyICovCi0JdW5zaWduZWQgY2hhcgkgZGNyX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIERDUiAqLwotCXVuc2lnbmVkIGNoYXIJIHJjcl92YWw7CQkvKiBkZWZhdWx0IHZhbHVlIGZvciBSQ1IgKi8KLQl1bnNpZ25lZCBjaGFyCSBncG9jX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIEdQT0MgKi8KLQl1MzIJCSpyZWdfb2Zmc2V0czsJCS8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwl1bnNpZ25lZCBjaGFyCSB3b3JkbGVuZ3RoOwkvKiAxIG9yIDIgKi8KKwl1bnNpZ25lZCBjaGFyCSBkY3JfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBEQ1IgKi8KKwl1bnNpZ25lZCBjaGFyCSByY3JfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBSQ1IgKi8KKwl1bnNpZ25lZCBjaGFyCSBncG9jX3ZhbDsJLyogZGVmYXVsdCB2YWx1ZSBmb3IgR1BPQyAqLworCXUzMgkJKnJlZ19vZmZzZXRzOwkvKiByZWdpc3RlciBvZmZzZXRzICovCisJdTgJCSptYWNfYWRkcjsJLyogTUFDIGFkZHIgKG9ubHkgdXNlZCB3aGVuCisJCQkJCSAgIEFYRkxHX01BQ19GUk9NUExBVEZPUk0gaXMgdXNlZCAqLwogfTsKIAogI2VuZGlmIC8qIF9fTkVUX0FYODg3OTZfUExBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggYTA0Zjg0Ni4uM2FkNTM5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtNTMsNiArNTMsMTcgQEAKICNkZWZpbmUgU09MX1NDTwkJMTcKICNkZWZpbmUgU09MX1JGQ09NTQkxOAogCisjZGVmaW5lIEJUX1NFQ1VSSVRZCTQKK3N0cnVjdCBidF9zZWN1cml0eSB7CisJX191OCBsZXZlbDsKK307CisjZGVmaW5lIEJUX1NFQ1VSSVRZX1NEUAkJMAorI2RlZmluZSBCVF9TRUNVUklUWV9MT1cJCTEKKyNkZWZpbmUgQlRfU0VDVVJJVFlfTUVESVVNCTIKKyNkZWZpbmUgQlRfU0VDVVJJVFlfSElHSAkzCisKKyNkZWZpbmUgQlRfREVGRVJfU0VUVVAJNworCiAjZGVmaW5lIEJUX0lORk8oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIkJsdWV0b290aDogIiBmbXQgIlxuIiAsICMjIGFyZykKICNkZWZpbmUgQlRfRVJSKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQogI2RlZmluZSBCVF9EQkcoZm10LCBhcmcuLi4pICBwcl9kZWJ1ZygiJXM6ICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKQEAgLTEwOCw2ICsxMTksNyBAQAogCWJkYWRkcl90ICAgIGRzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xOwogCXN0cnVjdCBzb2NrICpwYXJlbnQ7CisJdTMyIGRlZmVyX3NldHVwOwogfTsKIAogc3RydWN0IGJ0X3NvY2tfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKaW5kZXggMzY0NTEzOS4uZjY5ZjAxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaApAQCAtMTMzLDggKzEzMywxMyBAQAogI2RlZmluZSBFU0NPX0VWMwkweDAwMDgKICNkZWZpbmUgRVNDT19FVjQJMHgwMDEwCiAjZGVmaW5lIEVTQ09fRVY1CTB4MDAyMAorI2RlZmluZSBFU0NPXzJFVjMJMHgwMDQwCisjZGVmaW5lIEVTQ09fM0VWMwkweDAwODAKKyNkZWZpbmUgRVNDT18yRVY1CTB4MDEwMAorI2RlZmluZSBFU0NPXzNFVjUJMHgwMjAwCiAKICNkZWZpbmUgU0NPX0VTQ09fTUFTSyAgKEVTQ09fSFYxIHwgRVNDT19IVjIgfCBFU0NPX0hWMykKKyNkZWZpbmUgRURSX0VTQ09fTUFTSyAgKEVTQ09fMkVWMyB8IEVTQ09fM0VWMyB8IEVTQ09fMkVWNSB8IEVTQ09fM0VWNSkKIAogLyogQUNMIGZsYWdzICovCiAjZGVmaW5lIEFDTF9DT05UCQkweDAxCkBAIC0xNzYsNiArMTgxLDkgQEAKICNkZWZpbmUgTE1QX0VWNQkJMHgwMgogCiAjZGVmaW5lIExNUF9TTklGRl9TVUJSCTB4MDIKKyNkZWZpbmUgTE1QX0VEUl9FU0NPXzJNCTB4MjAKKyNkZWZpbmUgTE1QX0VEUl9FU0NPXzNNCTB4NDAKKyNkZWZpbmUgTE1QX0VEUl8zU19FU0NPCTB4ODAKIAogI2RlZmluZSBMTVBfU0lNUExFX1BBSVIJMHgwOAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDQ2YTQzYjcuLjAxZjkzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0xNjksNiArMTY5LDcgQEAKIAlfX3UxNiAgICAgICAgICAgIGxpbmtfcG9saWN5OwogCV9fdTMyCQkgbGlua19tb2RlOwogCV9fdTggICAgICAgICAgICAgYXV0aF90eXBlOworCV9fdTggICAgICAgICAgICAgc2VjX2xldmVsOwogCV9fdTggICAgICAgICAgICAgcG93ZXJfc2F2ZTsKIAl1bnNpZ25lZCBsb25nCSBwZW5kOwogCkBAIC0zMjUsMTIgKzMyNiwxMSBAQAogdm9pZCBoY2lfY29ubl9oYXNoX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIHZvaWQgaGNpX2Nvbm5fY2hlY2tfcGVuZGluZyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiAKLXN0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IGF1dGhfdHlwZSk7CitzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKTsKIGludCBoY2lfY29ubl9jaGVja19saW5rX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9hdXRoKHN0cnVjdCBoY2lfY29ubiAqY29ubik7Ci1pbnQgaGNpX2Nvbm5fZW5jcnlwdChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOworaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKTsKIGludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHVpbnQ4X3Qgcm9sZSk7CitpbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJvbGUpOwogCiB2b2lkIGhjaV9jb25uX2VudGVyX2FjdGl2ZV9tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CiB2b2lkIGhjaV9jb25uX2VudGVyX3NuaWZmX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKQEAgLTQ3MCwyNiArNDcwLDI2IEBACiAKIC8qIC0tLS0tIEhDSSBwcm90b2NvbHMgLS0tLS0gKi8KIHN0cnVjdCBoY2lfcHJvdG8gewotCWNoYXIgCQkqbmFtZTsKKwljaGFyCQkqbmFtZTsKIAl1bnNpZ25lZCBpbnQJaWQ7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCXZvaWQJCSpwcml2OwogCi0JaW50ICgqY29ubmVjdF9pbmQpIAkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIF9fdTggdHlwZSk7CisJaW50ICgqY29ubmVjdF9pbmQpCShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKTsKIAlpbnQgKCpjb25uZWN0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCWludCAoKmRpc2Nvbm5faW5kKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbik7CisJaW50ICgqZGlzY29ubl9pbmQpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOworCWludCAoKmRpc2Nvbm5fY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbik7CiAJaW50ICgqcmVjdl9hY2xkYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBmbGFncyk7CiAJaW50ICgqcmVjdl9zY29kYXRhKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQlpbnQgKCphdXRoX2NmbSkJCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKLQlpbnQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CisJaW50ICgqc2VjdXJpdHlfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhjaV9wcm90b19jb25uZWN0X2luZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOwogCWludCBtYXNrID0gMDsKLQkKKwogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07CiAJaWYgKGhwICYmIGhwLT5jb25uZWN0X2luZCkKIAkJbWFzayB8PSBocC0+Y29ubmVjdF9pbmQoaGRldiwgYmRhZGRyLCB0eXBlKTsKQEAgLTUxNCwzMCArNTE0LDUyIEBACiAJCWhwLT5jb25uZWN0X2NmbShjb25uLCBzdGF0dXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pCitzdGF0aWMgaW5saW5lIGludCBoY2lfcHJvdG9fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpjb25uKQoreworCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCWludCByZWFzb24gPSAweDEzOworCisJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQorCQlyZWFzb24gPSBocC0+ZGlzY29ubl9pbmQoY29ubik7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQorCQlyZWFzb24gPSBocC0+ZGlzY29ubl9pbmQoY29ubik7CisKKwlyZXR1cm4gcmVhc29uOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwotCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCi0JCWhwLT5kaXNjb25uX2luZChjb25uLCByZWFzb24pOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9jZm0pCisJCWhwLT5kaXNjb25uX2NmbShjb25uLCByZWFzb24pOwogCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX1NDT107Ci0JaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKLQkJaHAtPmRpc2Nvbm5faW5kKGNvbm4sIHJlYXNvbik7CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2NmbSkKKwkJaHAtPmRpc2Nvbm5fY2ZtKGNvbm4sIHJlYXNvbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKKwlfX3U4IGVuY3J5cHQ7CisKKwlpZiAodGVzdF9iaXQoSENJX0NPTk5fRU5DUllQVF9QRU5ELCAmY29ubi0+cGVuZCkpCisJCXJldHVybjsKKworCWVuY3J5cHQgPSAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpID8gMHgwMSA6IDB4MDA7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwotCWlmIChocCAmJiBocC0+YXV0aF9jZm0pCi0JCWhwLT5hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmF1dGhfY2ZtKQotCQlocC0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwlpZiAoaHAgJiYgaHAtPnNlY3VyaXR5X2NmbSkKKwkJaHAtPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3Byb3RvX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCkKQEAgLTU0NSwxMiArNTY3LDEyIEBACiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOwotCWlmIChocCAmJiBocC0+ZW5jcnlwdF9jZm0pCi0JCWhwLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmVuY3J5cHRfY2ZtKQotCQlocC0+ZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKKwlpZiAoaHAgJiYgaHAtPnNlY3VyaXR5X2NmbSkKKwkJaHAtPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogfQogCiBpbnQgaGNpX3JlZ2lzdGVyX3Byb3RvKHN0cnVjdCBoY2lfcHJvdG8gKmhwcm90byk7CkBAIC01NjIsOCArNTg0LDcgQEAKIAogCWNoYXIgKm5hbWU7CiAKLQl2b2lkICgqYXV0aF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKTsKLQl2b2lkICgqZW5jcnlwdF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOworCXZvaWQgKCpzZWN1cml0eV9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOwogCXZvaWQgKCprZXlfY2hhbmdlX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwogCXZvaWQgKCpyb2xlX3N3aXRjaF9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IHJvbGUpOwogfTsKQEAgLTU3MSwxNCArNTkyLDIwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlfX3U4IGVuY3J5cHQ7CiAKIAloY2lfcHJvdG9fYXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKIAorCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKKwkJcmV0dXJuOworCisJZW5jcnlwdCA9IChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgPyAweDAxIDogMHgwMDsKKwogCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKIAkJc3RydWN0IGhjaV9jYiAqY2IgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY2IsIGxpc3QpOwotCQlpZiAoY2ItPmF1dGhfY2ZtKQotCQkJY2ItPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisJCWlmIChjYi0+c2VjdXJpdHlfY2ZtKQorCQkJY2ItPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCX0KIAlyZWFkX3VubG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiB9CkBAIC01ODcsMTMgKzYxNCwxNiBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAKKwlpZiAoY29ubi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKKwkJY29ubi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCiAJaGNpX3Byb3RvX2VuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAKIAlyZWFkX2xvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2gocCwgJmhjaV9jYl9saXN0KSB7CiAJCXN0cnVjdCBoY2lfY2IgKmNiID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGNpX2NiLCBsaXN0KTsKLQkJaWYgKGNiLT5lbmNyeXB0X2NmbSkKLQkJCWNiLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCQlpZiAoY2ItPnNlY3VyaXR5X2NmbSkKKwkJCWNiLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAl9CiAJcmVhZF91bmxvY2tfYmgoJmhjaV9jYl9saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaAppbmRleCA3M2UxMTViLi5mNTY2YWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaApAQCAtMzcsNiArMzcsNyBAQAogCXNhX2ZhbWlseV90CWwyX2ZhbWlseTsKIAlfX2xlMTYJCWwyX3BzbTsKIAliZGFkZHJfdAlsMl9iZGFkZHI7CisJX19sZTE2CQlsMl9jaWQ7CiB9OwogCiAvKiBMMkNBUCBzb2NrZXQgb3B0aW9ucyAqLwpAQCAtMTg1LDYgKzE4Niw3IEBACiAvKiBpbmZvIHR5cGUgKi8KICNkZWZpbmUgTDJDQVBfSVRfQ0xfTVRVICAgICAweDAwMDEKICNkZWZpbmUgTDJDQVBfSVRfRkVBVF9NQVNLICAweDAwMDIKKyNkZWZpbmUgTDJDQVBfSVRfRklYRURfQ0hBTiAweDAwMDMKIAogLyogaW5mbyByZXN1bHQgKi8KICNkZWZpbmUgTDJDQVBfSVJfU1VDQ0VTUyAgICAweDAwMDAKQEAgLTIxOSwxMSArMjIxLDE0IEBACiAJX191OAkJcnhfaWRlbnQ7CiAJX191OAkJdHhfaWRlbnQ7CiAKKwlfX3U4CQlkaXNjX3JlYXNvbjsKKwogCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgY2hhbl9saXN0OwogfTsKIAogI2RlZmluZSBMMkNBUF9JTkZPX0NMX01UVV9SRVFfU0VOVAkweDAxCi0jZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UCTB4MDIKKyNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQJMHgwNAorI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORQkweDA4CiAKIC8qIC0tLS0tIEwyQ0FQIGNoYW5uZWwgYW5kIHNvY2tldCBpbmZvIC0tLS0tICovCiAjZGVmaW5lIGwyY2FwX3BpKHNrKSAoKHN0cnVjdCBsMmNhcF9waW5mbyAqKSBzaykKQEAgLTIzNyw4ICsyNDIsOSBAQAogCV9fdTE2CQlpbXR1OwogCV9fdTE2CQlvbXR1OwogCV9fdTE2CQlmbHVzaF90bzsKLQotCV9fdTMyCQlsaW5rX21vZGU7CisJX191OCAgICAgICAgICAgIHNlY19sZXZlbDsKKwlfX3U4CQlyb2xlX3N3aXRjaDsKKwlfX3U4ICAgICAgICAgICAgZm9yY2VfcmVsaWFibGU7CiAKIAlfX3U4CQljb25mX3JlcVs2NF07CiAJX191OAkJY29uZl9sZW47CkBAIC0yNTcsNiArMjYzLDcgQEAKICNkZWZpbmUgTDJDQVBfQ09ORl9SRVFfU0VOVAkweDAxCiAjZGVmaW5lIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORQkweDAyCiAjZGVmaW5lIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUJMHgwNAorI2RlZmluZSBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORAkweDgwCiAKICNkZWZpbmUgTDJDQVBfQ09ORl9NQVhfUkVUUklFUwkyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAppbmRleCA0ZGM4ZDkyLi44MDA3MjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0xODMsOCArMTgzLDkgQEAKIAl1OCAgICAgICAgICAgIHJlbW90ZV92MjRfc2lnOwogCXU4ICAgICAgICAgICAgbXNjZXg7CiAJdTggICAgICAgICAgICBvdXQ7Ci0KLQl1MzIgICAgICAgICAgIGxpbmtfbW9kZTsKKwl1OCAgICAgICAgICAgIHNlY19sZXZlbDsKKwl1OCAgICAgICAgICAgIHJvbGVfc3dpdGNoOworCXUzMiAgICAgICAgICAgZGVmZXJfc2V0dXA7CiAKIAl1aW50ICAgICAgICAgIG10dTsKIAl1aW50ICAgICAgICAgIGNmYzsKQEAgLTIwMiwxMCArMjAzLDEyIEBACiAjZGVmaW5lIFJGQ09NTV9SWF9USFJPVFRMRUQgMAogI2RlZmluZSBSRkNPTU1fVFhfVEhST1RUTEVEIDEKICNkZWZpbmUgUkZDT01NX1RJTUVEX09VVCAgICAyCi0jZGVmaW5lIFJGQ09NTV9NU0NfUEVORElORyAgMyAKLSNkZWZpbmUgUkZDT01NX0FVVEhfUEVORElORyA0Ci0jZGVmaW5lIFJGQ09NTV9BVVRIX0FDQ0VQVCAgNQotI2RlZmluZSBSRkNPTU1fQVVUSF9SRUpFQ1QgIDYKKyNkZWZpbmUgUkZDT01NX01TQ19QRU5ESU5HICAzCisjZGVmaW5lIFJGQ09NTV9TRUNfUEVORElORyAgNAorI2RlZmluZSBSRkNPTU1fQVVUSF9QRU5ESU5HIDUKKyNkZWZpbmUgUkZDT01NX0FVVEhfQUNDRVBUICA2CisjZGVmaW5lIFJGQ09NTV9BVVRIX1JFSkVDVCAgNworI2RlZmluZSBSRkNPTU1fREVGRVJfU0VUVVAgIDgKIAogLyogU2NoZWR1bGluZyBmbGFncyBhbmQgZXZlbnRzICovCiAjZGVmaW5lIFJGQ09NTV9TQ0hFRF9TVEFURSAgMApAQCAtMjM5LDYgKzI0Miw3IEBACiBpbnQgIHJmY29tbV9kbGNfc2VuZChzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgIHJmY29tbV9kbGNfc2V0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgdTggdjI0X3NpZyk7CiBpbnQgIHJmY29tbV9kbGNfZ2V0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgcmZjb21tX2RsYyAqZCwgdTggKnYyNF9zaWcpOwordm9pZCByZmNvbW1fZGxjX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCk7CiAKICNkZWZpbmUgcmZjb21tX2RsY19sb2NrKGQpICAgICBzcGluX2xvY2soJmQtPmxvY2spCiAjZGVmaW5lIHJmY29tbV9kbGNfdW5sb2NrKGQpICAgc3Bpbl91bmxvY2soJmQtPmxvY2spCkBAIC0zMDQsNyArMzA4LDggQEAKIAlzdHJ1Y3QgYnRfc29jayBidDsKIAlzdHJ1Y3QgcmZjb21tX2RsYyAgICpkbGM7CiAJdTggICAgIGNoYW5uZWw7Ci0JdTMyICAgIGxpbmtfbW9kZTsKKwl1OCAgICAgc2VjX2xldmVsOworCXU4ICAgICByb2xlX3N3aXRjaDsKIH07CiAKIGludCAgcmZjb21tX2luaXRfc29ja2V0cyh2b2lkKTsKQEAgLTMzMyw3ICszMzgsNiBAQAogCWJkYWRkcl90IHNyYzsKIAliZGFkZHJfdCBkc3Q7CiAJdTggICAgICAgY2hhbm5lbDsKLQkKIH07CiAKIHN0cnVjdCByZmNvbW1fZGV2X2luZm8gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggMjNjMGFiNy4uNTBmM2ZkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC00LDYgKzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KIC8qIHJlbW92ZSBvbmNlIHdlIHJlbW92ZSB0aGUgd2V4dCBzdHVmZiAqLwogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CkBAIC0xMTIsMTIgKzExNiwxNCBAQAogICogQFNUQVRJT05fRkxBR19TSE9SVF9QUkVBTUJMRTogc3RhdGlvbiBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZyBmcmFtZXMKICAqCXdpdGggc2hvcnQgcHJlYW1ibGVzCiAgKiBAU1RBVElPTl9GTEFHX1dNRTogc3RhdGlvbiBpcyBXTUUvUW9TIGNhcGFibGUKKyAqIEBTVEFUSU9OX0ZMQUdfTUZQOiBzdGF0aW9uIHVzZXMgbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uCiAgKi8KIGVudW0gc3RhdGlvbl9mbGFncyB7CiAJU1RBVElPTl9GTEFHX0NIQU5HRUQJCT0gMTw8MCwKIAlTVEFUSU9OX0ZMQUdfQVVUSE9SSVpFRAkJPSAxPDxOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQsCiAJU1RBVElPTl9GTEFHX1NIT1JUX1BSRUFNQkxFCT0gMTw8Tkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKIAlTVEFUSU9OX0ZMQUdfV01FCQk9IDE8PE5MODAyMTFfU1RBX0ZMQUdfV01FLAorCVNUQVRJT05fRkxBR19NRlAJCT0gMTw8Tkw4MDIxMV9TVEFfRkxBR19NRlAsCiB9OwogCiAvKioKQEAgLTE3Miw2ICsxNzgsOCBAQAogICogQFNUQVRJT05fSU5GT19TSUdOQUw6IEBzaWduYWwgZmlsbGVkCiAgKiBAU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU6IEB0eF9iaXRyYXRlIGZpZWxkcyBhcmUgZmlsbGVkCiAgKiAgKHR4X2JpdHJhdGUsIHR4X2JpdHJhdGVfZmxhZ3MgYW5kIHR4X2JpdHJhdGVfbWNzKQorICogQFNUQVRJT05fSU5GT19SWF9QQUNLRVRTOiBAcnhfcGFja2V0cyBmaWxsZWQKKyAqIEBTVEFUSU9OX0lORk9fVFhfUEFDS0VUUzogQHR4X3BhY2tldHMgZmlsbGVkCiAgKi8KIGVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzIHsKIAlTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRQk9IDE8PDAsCkBAIC0xODIsNiArMTkwLDggQEAKIAlTVEFUSU9OX0lORk9fUExJTktfU1RBVEUJPSAxPDw1LAogCVNUQVRJT05fSU5GT19TSUdOQUwJCT0gMTw8NiwKIAlTVEFUSU9OX0lORk9fVFhfQklUUkFURQkJPSAxPDw3LAorCVNUQVRJT05fSU5GT19SWF9QQUNLRVRTCQk9IDE8PDgsCisJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMJCT0gMTw8OSwKIH07CiAKIC8qKgpAQCAtMjI5LDYgKzIzOSw4IEBACiAgKiBAcGxpbmtfc3RhdGU6IG1lc2ggcGVlciBsaW5rIHN0YXRlCiAgKiBAc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBwYWNrZXQgaW4gZEJtCiAgKiBAdHhyYXRlOiBjdXJyZW50IHVuaWNhc3QgYml0cmF0ZSB0byB0aGlzIHN0YXRpb24KKyAqIEByeF9wYWNrZXRzOiBwYWNrZXRzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uCisgKiBAdHhfcGFja2V0czogcGFja2V0cyB0cmFuc21pdHRlZCB0byB0aGlzIHN0YXRpb24KICAqLwogc3RydWN0IHN0YXRpb25faW5mbyB7CiAJdTMyIGZpbGxlZDsKQEAgLTI0MCw2ICsyNTIsOCBAQAogCXU4IHBsaW5rX3N0YXRlOwogCXM4IHNpZ25hbDsKIAlzdHJ1Y3QgcmF0ZV9pbmZvIHR4cmF0ZTsKKwl1MzIgcnhfcGFja2V0czsKKwl1MzIgdHhfcGFja2V0czsKIH07CiAKIC8qKgpAQCAtMzM1LDI0ICszNDksNTAgQEAKIH07CiAKIC8qKgotICogZW51bSByZWdfc2V0X2J5IC0gSW5kaWNhdGVzIHdobyBpcyB0cnlpbmcgdG8gc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbgotICogQFJFR0RPTV9TRVRfQllfSU5JVDogcmVndWxhdG9yeSBkb21haW4gd2FzIHNldCBieSBpbml0aWFsaXphdGlvbi4gV2Ugd2lsbCBiZQotICogCXVzaW5nIGEgc3RhdGljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGJ5IGRlZmF1bHQuCi0gKiBAUkVHRE9NX1NFVF9CWV9DT1JFOiBDb3JlIHF1ZXJpZWQgQ1JEQSBmb3IgYSBkeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLgotICogQFJFR0RPTV9TRVRfQllfVVNFUjogVXNlciBhc2tlZCB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlCi0gKiAJcmVndWxhdG9yeSBkb21haW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9EUklWRVI6IGEgd2lyZWxlc3MgZHJpdmVycyBoYXMgaGludGVkIHRvIHRoZSB3aXJlbGVzcyBjb3JlCi0gKglpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOiB0aGUgd2lyZWxlc3MgY29yZSBoYXMgcmVjZWl2ZWQgYW4gODAyLjExIGNvdW50cnkKLSAqCWluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0IHRoaW5rcyB3ZQotICoJc2hvdWxkIGNvbnNpZGVyLgorICogZW51bSBlbnZpcm9ubWVudF9jYXAgLSBFbnZpcm9ubWVudCBwYXJzZWQgZnJvbSBjb3VudHJ5IElFCisgKiBARU5WSVJPTl9BTlk6IGluZGljYXRlcyBjb3VudHJ5IElFIGFwcGxpZXMgdG8gYm90aCBpbmRvb3IgYW5kCisgKglvdXRkb29yIG9wZXJhdGlvbi4KKyAqIEBFTlZJUk9OX0lORE9PUjogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyBvbmx5IHRvIGluZG9vciBvcGVyYXRpb24KKyAqIEBFTlZJUk9OX09VVERPT1I6IGluZGljYXRlcyBjb3VudHJ5IElFIGFwcGxpZXMgb25seSB0byBvdXRkb29yIG9wZXJhdGlvbgogICovCi1lbnVtIHJlZ19zZXRfYnkgewotCVJFR0RPTV9TRVRfQllfSU5JVCwKLQlSRUdET01fU0VUX0JZX0NPUkUsCi0JUkVHRE9NX1NFVF9CWV9VU0VSLAotCVJFR0RPTV9TRVRfQllfRFJJVkVSLAotCVJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKK2VudW0gZW52aXJvbm1lbnRfY2FwIHsKKwlFTlZJUk9OX0FOWSwKKwlFTlZJUk9OX0lORE9PUiwKKwlFTlZJUk9OX09VVERPT1IsCit9OworCisvKioKKyAqIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgLSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgcmVndWxhdG9yeSByZXF1ZXN0cworICoKKyAqIEB3aXBoeV9pZHg6IHRoaXMgaXMgc2V0IGlmIHRoaXMgcmVxdWVzdCdzIGluaXRpYXRvciBpcworICogCSVSRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IgJVJFR0RPTV9TRVRfQllfRFJJVkVSLiBUaGlzCisgKiAJY2FuIGJlIHVzZWQgYnkgdGhlIHdpcmVsZXNzIGNvcmUgdG8gZGVhbCB3aXRoIGNvbmZsaWN0cworICogCWFuZCBwb3RlbnRpYWxseSBpbmZvcm0gdXNlcnMgb2Ygd2hpY2ggZGV2aWNlcyBzcGVjaWZpY2FsbHkKKyAqIAljYXNlZCB0aGUgY29uZmxpY3RzLgorICogQGluaXRpYXRvcjogaW5kaWNhdGVzIHdobyBzZW50IHRoaXMgcmVxdWVzdCwgY291bGQgYmUgYW55IG9mCisgKiAJb2YgdGhvc2Ugc2V0IGluIG5sODAyMTFfcmVnX2luaXRpYXRvciAoJU5MODAyMTFfUkVHRE9NX1NFVF9CWV8qKQorICogQGFscGhhMjogdGhlIElTTyAvIElFQyAzMTY2IGFscGhhMiBjb3VudHJ5IGNvZGUgb2YgdGhlIHJlcXVlc3RlZAorICogCXJlZ3VsYXRvcnkgZG9tYWluLiBXZSBoYXZlIGEgZmV3IHNwZWNpYWwgY29kZXM6CisgKiAJMDAgLSBXb3JsZCByZWd1bGF0b3J5IGRvbWFpbgorICogCTk5IC0gYnVpbHQgYnkgZHJpdmVyIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZAorICogCTk4IC0gcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbnMKKyAqIEBpbnRlcnNlY3Q6IGluZGljYXRlcyB3aGV0aGVyIHRoZSB3aXJlbGVzcyBjb3JlIHNob3VsZCBpbnRlcnNlY3QKKyAqIAl0aGUgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluIHdpdGggdGhlIHByZXNlbnRseSBzZXQgcmVndWxhdG9yeQorICogCWRvbWFpbi4KKyAqIEBjb3VudHJ5X2llX2NoZWNrc3VtOiBjaGVja3N1bSBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgYW5kIGFjY2VwdGVkCisgKiAJY291bnRyeSBJRQorICogQGNvdW50cnlfaWVfZW52OiBsZXRzIHVzIGtub3cgaWYgdGhlIEFQIGlzIHRlbGxpbmcgdXMgd2UgYXJlIG91dGRvb3IsCisgKiAJaW5kb29yLCBvciBpZiBpdCBkb2Vzbid0IG1hdHRlcgorICogQGxpc3Q6IHVzZWQgdG8gaW5zZXJ0IGludG8gdGhlIHJlZ19yZXF1ZXN0c19saXN0IGxpbmtlZCBsaXN0CisgKi8KK3N0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgeworCWludCB3aXBoeV9pZHg7CisJZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yOworCWNoYXIgYWxwaGEyWzJdOworCWJvb2wgaW50ZXJzZWN0OworCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtOworCWVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfZnJlcV9yYW5nZSB7CkBAIC00MzEsNiArNDcxLDI2IEBACiAJdTggYWlmczsKIH07CiAKKy8qKgorICogc3RydWN0IG1nbXRfZXh0cmFfaWVfcGFyYW1zIC0gRXh0cmEgbWFuYWdlbWVudCBmcmFtZSBJRSBwYXJhbWV0ZXJzCisgKgorICogVXNlZCB0byBhZGQgZXh0cmEgSUUocykgaW50byBtYW5hZ2VtZW50IGZyYW1lcy4gSWYgdGhlIGRyaXZlciBjYW5ub3QgYWRkIHRoZQorICogcmVxdWVzdGVkIGRhdGEgaW50byBhbGwgbWFuYWdlbWVudCBmcmFtZXMgb2YgdGhlIHNwZWNpZmllZCBzdWJ0eXBlIHRoYXQgYXJlCisgKiBnZW5lcmF0ZWQgaW4ga2VybmVsIG9yIGZpcm13YXJlL2hhcmR3YXJlLCBpdCBtdXN0IHJlamVjdCB0aGUgY29uZmlndXJhdGlvbgorICogY2FsbC4gVGhlIElFIGRhdGEgYnVmZmVyIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHNwZWNpZmllZCBtYW5hZ2VtZW50CisgKiBmcmFtZSBib2R5IGFmdGVyIGFsbCBvdGhlciBJRXMuIFRoaXMgYWRkaXRpb24gaXMgbm90IGFwcGxpZWQgdG8gZnJhbWVzIHRoYXQKKyAqIGFyZSBpbmplY3RlZCB0aHJvdWdoIGEgbW9uaXRvciBpbnRlcmZhY2UuCisgKgorICogQHN1YnR5cGU6IE1hbmFnZW1lbnQgZnJhbWUgc3VidHlwZQorICogQGllczogSUUgZGF0YSBidWZmZXIgb3IgJU5VTEwgdG8gcmVtb3ZlIHByZXZpb3VzIGRhdGEKKyAqIEBpZXNfbGVuOiBMZW5ndGggb2YgQGllcyBpbiBvY3RldHMKKyAqLworc3RydWN0IG1nbXRfZXh0cmFfaWVfcGFyYW1zIHsKKwl1OCBzdWJ0eXBlOworCXU4ICppZXM7CisJaW50IGllc19sZW47Cit9OworCiAvKiBmcm9tIG5ldC93aXJlbGVzcy5oICovCiBzdHJ1Y3Qgd2lwaHk7CiAKQEAgLTQzOCw2ICs0OTgsODcgQEAKIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbDsKIAogLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAtIFNTSUQgZGVzY3JpcHRpb24KKyAqIEBzc2lkOiB0aGUgU1NJRAorICogQHNzaWRfbGVuOiBsZW5ndGggb2YgdGhlIHNzaWQKKyAqLworc3RydWN0IGNmZzgwMjExX3NzaWQgeworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJdTggc3NpZF9sZW47Cit9OworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgLSBzY2FuIHJlcXVlc3QgZGVzY3JpcHRpb24KKyAqCisgKiBAc3NpZHM6IFNTSURzIHRvIHNjYW4gZm9yIChhY3RpdmUgc2NhbiBvbmx5KQorICogQG5fc3NpZHM6IG51bWJlciBvZiBTU0lEcworICogQGNoYW5uZWxzOiBjaGFubmVscyB0byBzY2FuIG9uLgorICogQG5fY2hhbm5lbHM6IG51bWJlciBvZiBjaGFubmVscyBmb3IgZWFjaCBiYW5kCisgKiBAaWU6IG9wdGlvbmFsIGluZm9ybWF0aW9uIGVsZW1lbnQocykgdG8gYWRkIGludG8gUHJvYmUgUmVxdWVzdCBvciAlTlVMTAorICogQGllX2xlbjogbGVuZ3RoIG9mIGllIGluIG9jdGV0cworICogQHdpcGh5OiB0aGUgd2lwaHkgdGhpcyB3YXMgZm9yCisgKiBAaWZpZHg6IHRoZSBpbnRlcmZhY2UgaW5kZXgKKyAqLworc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCB7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWRzOworCWludCBuX3NzaWRzOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqKmNoYW5uZWxzOworCXUzMiBuX2NoYW5uZWxzOworCXU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworCisJLyogaW50ZXJuYWwgKi8KKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWludCBpZmlkeDsKK307CisKKy8qKgorICogZW51bSBjZmc4MDIxMV9zaWduYWxfdHlwZSAtIHNpZ25hbCB0eXBlCisgKgorICogQENGRzgwMjExX1NJR05BTF9UWVBFX05PTkU6IG5vIHNpZ25hbCBzdHJlbmd0aCBpbmZvcm1hdGlvbiBhdmFpbGFibGUKKyAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06IHNpZ25hbCBzdHJlbmd0aCBpbiBtQm0gKDEwMCpkQm0pCisgKiBAQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOiBzaWduYWwgc3RyZW5ndGgsIGluY3JlYXNpbmcgZnJvbSAwIHRocm91Z2ggMTAwCisgKi8KK2VudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgeworCUNGRzgwMjExX1NJR05BTF9UWVBFX05PTkUsCisJQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNLAorCUNGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQywKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2JzcyAtIEJTUyBkZXNjcmlwdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIEJTUyAod2hpY2ggbWF5IGFsc28gYmUgYSBtZXNoIG5ldHdvcmspCisgKiBmb3IgdXNlIGluIHNjYW4gcmVzdWx0cyBhbmQgc2ltaWxhci4KKyAqCisgKiBAYnNzaWQ6IEJTU0lEIG9mIHRoZSBCU1MKKyAqIEB0c2Y6IHRpbWVzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIHVwZGF0ZQorICogQGJlYWNvbl9pbnRlcnZhbDogdGhlIGJlYWNvbiBpbnRlcnZhbCBhcyBmcm9tIHRoZSBmcmFtZQorICogQGNhcGFiaWxpdHk6IHRoZSBjYXBhYmlsaXR5IGZpZWxkIGluIGhvc3QgYnl0ZSBvcmRlcgorICogQGluZm9ybWF0aW9uX2VsZW1lbnRzOiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgKE5vdGUgdGhhdCB0aGVyZQorICoJaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlc2UgYXJlIHdlbGwtZm9ybWVkISkKKyAqIEBsZW5faW5mb3JtYXRpb25fZWxlbWVudHM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMKKyAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAodHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlKQorICogQGZyZWVfcHJpdjogZnVuY3Rpb24gcG9pbnRlciB0byBmcmVlIHByaXZhdGUgZGF0YQorICogQHByaXY6IHByaXZhdGUgYXJlYSBmb3IgZHJpdmVyIHVzZSwgaGFzIGF0IGxlYXN0IHdpcGh5LT5ic3NfcHJpdl9zaXplIGJ5dGVzCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9ic3MgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1NjQgdHNmOworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJdTE2IGNhcGFiaWxpdHk7CisJdTggKmluZm9ybWF0aW9uX2VsZW1lbnRzOworCXNpemVfdCBsZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CisKKwlzMzIgc2lnbmFsOworCisJdm9pZCAoKmZyZWVfcHJpdikoc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKwl1OCBwcml2WzBdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIC0gYmFja2VuZCBkZXNjcmlwdGlvbiBmb3Igd2lyZWxlc3MgY29uZmlndXJhdGlvbgogICoKICAqIFRoaXMgc3RydWN0IGlzIHJlZ2lzdGVyZWQgYnkgZnVsbG1hYyBjYXJkIGRyaXZlcnMgYW5kL29yIHdpcmVsZXNzIHN0YWNrcwpAQCAtNDUwLDYgKzU5MSw5IEBACiAgKiB3aXJlbGVzcyBleHRlbnNpb25zIGJ1dCB0aGlzIGlzIHN1YmplY3QgdG8gcmVldmFsdWF0aW9uIGFzIHNvb24gYXMgdGhpcwogICogY29kZSBpcyB1c2VkIG1vcmUgd2lkZWx5IGFuZCB3ZSBoYXZlIGEgZmlyc3QgdXNlciB3aXRob3V0IHdleHQuCiAgKgorICogQHN1c3BlbmQ6IHdpcGh5IGRldmljZSBuZWVkcyB0byBiZSBzdXNwZW5kZWQKKyAqIEByZXN1bWU6IHdpcGh5IGRldmljZSBuZWVkcyB0byBiZSByZXN1bWVkCisgKgogICogQGFkZF92aXJ0dWFsX2ludGY6IGNyZWF0ZSBhIG5ldyB2aXJ0dWFsIGludGVyZmFjZSB3aXRoIHRoZSBnaXZlbiBuYW1lLAogICoJbXVzdCBzZXQgdGhlIHN0cnVjdCB3aXJlbGVzc19kZXYncyBpZnR5cGUuCiAgKgpAQCAtNDcxLDYgKzYxNSw4IEBACiAgKgogICogQHNldF9kZWZhdWx0X2tleTogc2V0IHRoZSBkZWZhdWx0IGtleSBvbiBhbiBpbnRlcmZhY2UKICAqCisgKiBAc2V0X2RlZmF1bHRfbWdtdF9rZXk6IHNldCB0aGUgZGVmYXVsdCBtYW5hZ2VtZW50IGZyYW1lIGtleSBvbiBhbiBpbnRlcmZhY2UKKyAqCiAgKiBAYWRkX2JlYWNvbjogQWRkIGEgYmVhY29uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycywgQGhlYWQsIEBpbnRlcnZhbAogICoJYW5kIEBkdGltX3BlcmlvZCB3aWxsIGJlIHZhbGlkLCBAdGFpbCBpcyBvcHRpb25hbC4KICAqIEBzZXRfYmVhY29uOiBDaGFuZ2UgdGhlIGJlYWNvbiBwYXJhbWV0ZXJzIGZvciBhbiBhY2Nlc3MgcG9pbnQgbW9kZQpAQCAtNDk3LDggKzY0MywxOCBAQAogICogQHNldF90eHFfcGFyYW1zOiBTZXQgVFggcXVldWUgcGFyYW1ldGVycwogICoKICAqIEBzZXRfY2hhbm5lbDogU2V0IGNoYW5uZWwKKyAqCisgKiBAc2V0X21nbXRfZXh0cmFfaWU6IFNldCBleHRyYSBJRSBkYXRhIGZvciBtYW5hZ2VtZW50IGZyYW1lcworICoKKyAqIEBzY2FuOiBSZXF1ZXN0IHRvIGRvIGEgc2Nhbi4gSWYgcmV0dXJuaW5nIHplcm8sIHRoZSBzY2FuIHJlcXVlc3QgaXMgZ2l2ZW4KKyAqCXRoZSBkcml2ZXIsIGFuZCB3aWxsIGJlIHZhbGlkIHVudGlsIHBhc3NlZCB0byBjZmc4MDIxMV9zY2FuX2RvbmUoKS4KKyAqCUZvciBzY2FuIHJlc3VsdHMsIGNhbGwgY2ZnODAyMTFfaW5mb3JtX2JzcygpOyB5b3UgY2FuIGNhbGwgdGhpcyBvdXRzaWRlCisgKgl0aGUgc2Nhbi9zY2FuX2RvbmUgYnJhY2tldCB0b28uCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9vcHMgeworCWludAkoKnN1c3BlbmQpKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCWludAkoKnJlc3VtZSkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKIAlpbnQJKCphZGRfdmlydHVhbF9pbnRmKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjaGFyICpuYW1lLAogCQkJCSAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwpAQCAtNTE4LDYgKzY3NCw5IEBACiAJaW50CSgqc2V0X2RlZmF1bHRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgdTgga2V5X2luZGV4KTsKKwlpbnQJKCpzZXRfZGVmYXVsdF9tZ210X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4KTsKIAogCWludAkoKmFkZF9iZWFjb24pKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYmVhY29uX3BhcmFtZXRlcnMgKmluZm8pOwpAQCAtNTY0LDYgKzcyMywxMyBAQAogCWludAkoKnNldF9jaGFubmVsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSk7CisKKwlpbnQJKCpzZXRfbWdtdF9leHRyYV9pZSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgbWdtdF9leHRyYV9pZV9wYXJhbXMgKnBhcmFtcyk7CisKKwlpbnQJKCpzY2FuKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCk7CiB9OwogCiAvKiB0ZW1wb3Jhcnkgd2V4dCBoYW5kbGVycyAqLwpAQCAtNTc0LDUgKzc0MCw3MSBAQAogCQkJICB1MzIgKm1vZGUsIGNoYXIgKmV4dHJhKTsKIGludCBjZmc4MDIxMV93ZXh0X2dpd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgdTMyICptb2RlLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOworCisvKioKKyAqIGNmZzgwMjExX3NjYW5fZG9uZSAtIG5vdGlmeSB0aGF0IHNjYW4gZmluaXNoZWQKKyAqCisgKiBAcmVxdWVzdDogdGhlIGNvcnJlc3BvbmRpbmcgc2NhbiByZXF1ZXN0CisgKiBAYWJvcnRlZDogc2V0IHRvIHRydWUgaWYgdGhlIHNjYW4gd2FzIGFib3J0ZWQgZm9yIGFueSByZWFzb24sCisgKgl1c2Vyc3BhY2Ugd2lsbCBiZSBub3RpZmllZCBvZiB0aGF0CisgKi8KK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCk7CisKKy8qKgorICogY2ZnODAyMTFfaW5mb3JtX2JzcyAtIGluZm9ybSBjZmc4MDIxMSBvZiBhIG5ldyBCU1MKKyAqCisgKiBAd2lwaHk6IHRoZSB3aXBoeSByZXBvcnRpbmcgdGhlIEJTUworICogQGJzczogdGhlIGZvdW5kIEJTUworICogQHNpZ25hbDogdGhlIHNpZ25hbCBzdHJlbmd0aCwgdHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlCisgKiBAZ2ZwOiBjb250ZXh0IGZsYWdzCisgKgorICogVGhpcyBpbmZvcm1zIGNmZzgwMjExIHRoYXQgQlNTIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBhbmQKKyAqIHRoZSBCU1Mgc2hvdWxkIGJlIHVwZGF0ZWQvYWRkZWQuCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9ic3MqCitjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApOworCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgIGNvbnN0IHU4ICpic3NpZCwKKwkJCQkgICAgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJCSAgICAgIHUxNiBjYXBhX21hc2ssIHUxNiBjYXBhX3ZhbCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZmc4MDIxMV9ic3MgKgorY2ZnODAyMTFfZ2V0X2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCSAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3sKKwlyZXR1cm4gY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgTlVMTCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJV0xBTl9DQVBBQklMSVRZX0lCU1MsIFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X21lc2goc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGNmZyk7Cit2b2lkIGNmZzgwMjExX3B1dF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKy8qKgorICogY2ZnODAyMTFfdW5saW5rX2JzcyAtIHVubGluayBCU1MgZnJvbSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAqIEB3aXBoeTogdGhlIHdpcGh5CisgKiBAYnNzOiB0aGUgYnNzIHRvIHJlbW92ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZ2l2ZW4gQlNTIGZyb20gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICogdGhlcmVieSBtYWtpbmcgaXQgbm8gbG9uZ2VyIHNob3cgdXAgaW4gc2NhbiByZXN1bHRzIGV0Yy4gVXNlIHRoaXMKKyAqIGZ1bmN0aW9uIHdoZW4geW91IGRldGVjdCBhIEJTUyBpcyBnb25lLiBOb3JtYWxseSBCU1NlcyB3aWxsIGFsc28gdGltZQorICogb3V0LCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGF0IGFsbC4KKyAqLwordm9pZCBjZmc4MDIxMV91bmxpbmtfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CiAKICNlbmRpZiAvKiBfX05FVF9DRkc4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oCmluZGV4IDUyZTk3YmYuLjgzOWY3NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oCisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIGluY2x1ZGUvbmV0L2RzYS5oIC0gRHJpdmVyIGZvciBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHN3aXRjaCBjaGlwcwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMSwyMyArMTEsNDcgQEAKICNpZm5kZWYgX19MSU5VWF9ORVRfRFNBX0gKICNkZWZpbmUgX19MSU5VWF9ORVRfRFNBX0gKIAotI2RlZmluZSBEU0FfTUFYX1BPUlRTCTEyCisjZGVmaW5lIERTQV9NQVhfU1dJVENIRVMJNAorI2RlZmluZSBEU0FfTUFYX1BPUlRTCQkxMgorCitzdHJ1Y3QgZHNhX2NoaXBfZGF0YSB7CisJLyoKKwkgKiBIb3cgdG8gYWNjZXNzIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisJICovCisJc3RydWN0IGRldmljZQkqbWlpX2J1czsKKwlpbnQJCXN3X2FkZHI7CisKKwkvKgorCSAqIFRoZSBuYW1lcyBvZiB0aGUgc3dpdGNoJ3MgcG9ydHMuICBVc2UgImNwdSIgdG8KKwkgKiBkZXNpZ25hdGUgdGhlIHN3aXRjaCBwb3J0IHRoYXQgdGhlIGNwdSBpcyBjb25uZWN0ZWQgdG8sCisJICogImRzYSIgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHBvcnQgaXMgYSBEU0EgbGluayB0bworCSAqIGFub3RoZXIgc3dpdGNoLCBOVUxMIHRvIGluZGljYXRlIHRoZSBwb3J0IGlzIHVudXNlZCwKKwkgKiBvciBhbnkgb3RoZXIgc3RyaW5nIHRvIGluZGljYXRlIHRoaXMgaXMgYSBwaHlzaWNhbCBwb3J0LgorCSAqLworCWNoYXIJCSpwb3J0X25hbWVzW0RTQV9NQVhfUE9SVFNdOworCisJLyoKKwkgKiBBbiBhcnJheSAod2l0aCBucl9jaGlwcyBlbGVtZW50cykgb2Ygd2hpY2ggZWxlbWVudCBbYV0KKwkgKiBpbmRpY2F0ZXMgd2hpY2ggcG9ydCBvbiB0aGlzIHN3aXRjaCBzaG91bGQgYmUgdXNlZCB0bworCSAqIHNlbmQgcGFja2V0cyB0byB0aGF0IGFyZSBkZXN0aW5lZCBmb3Igc3dpdGNoIGEuICBDYW4gYmUKKwkgKiBOVUxMIGlmIHRoZXJlIGlzIG9ubHkgb25lIHN3aXRjaCBjaGlwLgorCSAqLworCXM4CQkqcnRhYmxlOworfTsKIAogc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHsKIAkvKgogCSAqIFJlZmVyZW5jZSB0byBhIExpbnV4IG5ldHdvcmsgaW50ZXJmYWNlIHRoYXQgY29ubmVjdHMKLQkgKiB0byB0aGUgc3dpdGNoIGNoaXAuCisJICogdG8gdGhlIHJvb3Qgc3dpdGNoIGNoaXAgb2YgdGhlIHRyZWUuCiAJICovCiAJc3RydWN0IGRldmljZQkqbmV0ZGV2OwogCiAJLyoKLQkgKiBIb3cgdG8gYWNjZXNzIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIGFuZAotCSAqIHRoZSBuYW1lcyBvZiB0aGUgc3dpdGNoIHBvcnRzICh1c2UgImNwdSIgdG8gZGVzaWduYXRlCi0JICogdGhlIHN3aXRjaCBwb3J0IHRoYXQgdGhlIGNwdSBpcyBjb25uZWN0ZWQgdG8pLgorCSAqIEluZm8gc3RydWN0cyBkZXNjcmliaW5nIGVhY2ggb2YgdGhlIHN3aXRjaCBjaGlwcworCSAqIGNvbm5lY3RlZCB2aWEgdGhpcyBuZXR3b3JrIGludGVyZmFjZS4KIAkgKi8KLQlzdHJ1Y3QgZGV2aWNlCSptaWlfYnVzOwotCWludAkJc3dfYWRkcjsKLQljaGFyCQkqcG9ydF9uYW1lc1tEU0FfTUFYX1BPUlRTXTsKKwlpbnQJCW5yX2NoaXBzOworCXN0cnVjdCBkc2FfY2hpcF9kYXRhCSpjaGlwOwogfTsKIAogZXh0ZXJuIGJvb2wgZHNhX3VzZXNfZHNhX3RhZ3Modm9pZCAqZHNhX3B0cik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAppbmRleCBjOGVmZmE0Li4zOGI3ODEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKQEAgLTM5LDggKzM5LDYgQEAKIAkKIAlfX3UzMgkJCXZhbGlkX2xmdDsKIAlfX3UzMgkJCXByZWZlcmVkX2xmdDsKLQl1bnNpZ25lZCBsb25nCQljc3RhbXA7CS8qIGNyZWF0ZWQgdGltZXN0YW1wICovCi0JdW5zaWduZWQgbG9uZwkJdHN0YW1wOyAvKiB1cGRhdGVkIHRpbWVzdGFtcCAqLwogCWF0b21pY190CQlyZWZjbnQ7CiAJc3BpbmxvY2tfdAkJbG9jazsKIApAQCAtNDksNiArNDcsOSBAQAogCiAJX191MTYJCQlzY29wZTsKIAorCXVuc2lnbmVkIGxvbmcJCWNzdGFtcDsJLyogY3JlYXRlZCB0aW1lc3RhbXAgKi8KKwl1bnNpZ25lZCBsb25nCQl0c3RhbXA7IC8qIHVwZGF0ZWQgdGltZXN0YW1wICovCisKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIAogCXN0cnVjdCBpbmV0Nl9kZXYJKmlkZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAppbmRleCA3MDQwYTc4Li45YjVkMDhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKQEAgLTExMywxMiArMTEzLDEyIEBACiBzdGF0aWMgaW5saW5lIGludCBJTkVUX0VDTl9zZXRfY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpZiAoc2tiLT5uZXR3b3JrX2hlYWRlciArIHNpemVvZihzdHJ1Y3QgaXBoZHIpIDw9IHNrYi0+dGFpbCkKIAkJCXJldHVybiBJUF9FQ05fc2V0X2NlKGlwX2hkcihza2IpKTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJaWYgKHNrYi0+bmV0d29ya19oZWFkZXIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIDw9IHNrYi0+dGFpbCkKIAkJCXJldHVybiBJUDZfRUNOX3NldF9jZShpcHY2X2hkcihza2IpKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaCBiL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCmluZGV4IGUwODFlZWYuLjM5ZjJkYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oCkBAIC02MSw3ICs2MSw4IEBACiAJCQkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIGludCAqd29yayk7CiBpbnQgaW5ldF9mcmFnX2V2aWN0b3Ioc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwgc3RydWN0IGluZXRfZnJhZ3MgKmYpOwogc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqaW5ldF9mcmFnX2ZpbmQoc3RydWN0IG5ldG5zX2ZyYWdzICpuZiwKLQkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIHZvaWQgKmtleSwgdW5zaWduZWQgaW50IGhhc2gpOworCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCkKKwlfX3JlbGVhc2VzKCZmLT5sb2NrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGluZXRfZnJhZ19wdXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgc3RydWN0IGluZXRfZnJhZ3MgKmYpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCmluZGV4IGQwYTA0MzEuLmE0NGUyMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCkBAIC04Miw2ICs4Miw3IEBACiAjZW5kaWYKIAl1bnNpZ25lZCBzaG9ydAkJcG9ydDsKIAlzaWduZWQgc2hvcnQJCWZhc3RyZXVzZTsKKwlpbnQJCQludW1fb3duZXJzOwogCXN0cnVjdCBobGlzdF9ub2RlCW5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQJb3duZXJzOwogfTsKQEAgLTEzMyw3ICsxMzQsNyBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldAkqYmhhc2g7CiAKIAl1bnNpZ25lZCBpbnQJCQliaGFzaF9zaXplOwotCS8qIE5vdGUgOiA0IGJ5dGVzIHBhZGRpbmcgb24gNjQgYml0IGFyY2hlcyAqLworCS8qIDQgYnl0ZXMgaG9sZSBvbiA2NCBiaXQgKi8KIAogCXN0cnVjdCBrbWVtX2NhY2hlCQkqYmluZF9idWNrZXRfY2FjaGVwOwogCkBAIC0xNTAsNiArMTUxLDcgQEAKIAlzdHJ1Y3QgaW5ldF9saXN0ZW5faGFzaGJ1Y2tldAlsaXN0ZW5pbmdfaGFzaFtJTkVUX0xIVEFCTEVfU0laRV0KIAkJCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAorCWF0b21pY190CQkJYnNvY2tldHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaW5ldF9laGFzaF9idWNrZXQoCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCAxMDg2ODEzLi40YWM3NTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTU1LDYgKzU1LDcgQEAKIAlfX2JlMzIJCQlhZGRyOwogCWludAkJCW9pZjsKIAlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCXVuaW9uIHNrYl9zaGFyZWRfdHgJc2h0eDsKIH07CiAKICNkZWZpbmUgSVBDQihza2IpICgoc3RydWN0IGluZXRfc2tiX3Bhcm0qKSgoc2tiKS0+Y2IpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggYWI5YjAwMy4uYmJhZTFlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC0xODQsOCArMTg0LDggQEAKIC8qCiAgKiAgICAgIFRoZSBwb3J0IG51bWJlciBvZiBGVFAgc2VydmljZSAoaW4gbmV0d29yayBvcmRlcikuCiAgKi8KLSNkZWZpbmUgRlRQUE9SVCAgX19jb25zdGFudF9odG9ucygyMSkKLSNkZWZpbmUgRlRQREFUQSAgX19jb25zdGFudF9odG9ucygyMCkKKyNkZWZpbmUgRlRQUE9SVCAgY3B1X3RvX2JlMTYoMjEpCisjZGVmaW5lIEZUUERBVEEgIGNwdV90b19iZTE2KDIwKQogCiAvKgogICogICAgICBUQ1AgU3RhdGUgVmFsdWVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggNmQ1YjU4YS4uYzFmMTZmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtMTk2LDggKzE5Niw4IEBACiAJc3RydWN0IG5ldAkJKmZsX25ldDsKIH07CiAKLSNkZWZpbmUgSVBWNl9GTE9XSU5GT19NQVNLCV9fY29uc3RhbnRfaHRvbmwoMHgwRkZGRkZGRikKLSNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUFTSwlfX2NvbnN0YW50X2h0b25sKDB4MDAwRkZGRkYpCisjZGVmaW5lIElQVjZfRkxPV0lORk9fTUFTSwljcHVfdG9fYmUzMigweDBGRkZGRkZGKQorI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NQVNLCWNwdV90b19iZTMyKDB4MDAwRkZGRkYpCiAKIHN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0CiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHguaCBiL2luY2x1ZGUvbmV0L2lweC5oCmluZGV4IDRjYzBiNGUuLmExNDEyMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lweC5oCisrKyBiL2luY2x1ZGUvbmV0L2lweC5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIHN0cnVjdCBpcHhoZHIgewogCV9fYmUxNgkJCWlweF9jaGVja3N1bSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0jZGVmaW5lIElQWF9OT19DSEVDS1NVTQlfX2NvbnN0YW50X2h0b25zKDB4RkZGRikKKyNkZWZpbmUgSVBYX05PX0NIRUNLU1VNCWNwdV90b19iZTE2KDB4RkZGRikKIAlfX2JlMTYJCQlpcHhfcGt0c2l6ZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAJX191OAkJCWlweF90Y3RybDsKIAlfX3U4CQkJaXB4X3R5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA1NTk0MjJmLi4xMmE1MmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXUxNiBiZWFjb25faW50OwogCXUxNiBhc3NvY19jYXBhYmlsaXR5OwogCXU2NCB0aW1lc3RhbXA7Ci0JdTY0IGJhc2ljX3JhdGVzOworCXUzMiBiYXNpY19yYXRlczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19odF9jb25mIGh0OwogfTsKIApAQCAtMjYyLDYgKzI2MiwyNiBAQAogCUlFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFCT0gQklUKDEyKSwKIH07CiAKKy8qKgorICogZW51bSBtYWM4MDIxMV9yYXRlX2NvbnRyb2xfZmxhZ3MgLSBwZXItcmF0ZSBmbGFncyBzZXQgYnkgdGhlCisgKglSYXRlIENvbnRyb2wgYWxnb3JpdGhtLgorICoKKyAqIFRoZXNlIGZsYWdzIGFyZSBzZXQgYnkgdGhlIFJhdGUgY29udHJvbCBhbGdvcml0aG0gZm9yIGVhY2ggcmF0ZSBkdXJpbmcgdHgsCisgKiBpbiB0aGUgQGZsYWdzIG1lbWJlciBvZiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUuCisgKgorICogQElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOiBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uIGlzIHJlcXVpcmVkLgorICoJVGhpcyBpcyBzZXQgaWYgdGhlIGN1cnJlbnQgQlNTIHJlcXVpcmVzIEVSUCBwcm90ZWN0aW9uLgorICogQElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU6IFVzZSBzaG9ydCBwcmVhbWJsZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfTUNTOiBIVCByYXRlLgorICogQElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRDogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByYXRlIHNob3VsZCBiZSB1c2VkIGluCisgKglHcmVlbmZpZWxkIG1vZGUuCisgKiBASUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZSA0MCBNSHouCisgKiBASUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBOiBUaGUgZnJhbWUgc2hvdWxkIGJlIHRyYW5zbWl0dGVkIG9uIGJvdGggb2YgdGhlCisgKglhZGphY2VudCAyMCBNSHogY2hhbm5lbHMsIGlmIHRoZSBjdXJyZW50IGNoYW5uZWwgdHlwZSBpcworICoJTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyBvciBOTDgwMjExX0NIQU5fSFQ0MFBMVVMuCisgKiBASUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOiBTaG9ydCBHdWFyZCBpbnRlcnZhbCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyByYXRlLgorICovCiBlbnVtIG1hYzgwMjExX3JhdGVfY29udHJvbF9mbGFncyB7CiAJSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTCQk9IEJJVCgwKSwKIAlJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUCQk9IEJJVCgxKSwKQEAgLTUwNywxMSArNTI3LDYgQEAKIH0KICNkZWZpbmUgSUVFRTgwMjExX0NPTkZfU0hPUlRfU0xPVF9USU1FIChfX0lFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSgpKQogCi1zdHJ1Y3QgaWVlZTgwMjExX2h0X2NvbmYgewotCWJvb2wgZW5hYmxlZDsKLQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZTsKLX07Ci0KIC8qKgogICogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIC0gZGVub3RlcyB3aGljaCBjb25maWd1cmF0aW9uIGNoYW5nZWQKICAqCkBAIC01MjAsMTAgKzUzNSwxMCBAQAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUw6IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT1RBUDogdGhlIHJhZGlvdGFwIGZsYWcgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUzogdGhlIFBTIGZsYWcgY2hhbmdlZAorICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUOiB0aGUgZHluYW1pYyBQUyB0aW1lb3V0IGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVI6IHRoZSBUWCBwb3dlciBjaGFuZ2VkCi0gKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUw6IHRoZSBjaGFubmVsIGNoYW5nZWQKKyAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDogdGhlIGNoYW5uZWwvY2hhbm5lbF90eXBlIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTOiByZXRyeSBsaW1pdHMgY2hhbmdlZAotICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVDogSFQgY29uZmlndXJhdGlvbiBjaGFuZ2VkCiAgKi8KIGVudW0gaWVlZTgwMjExX2NvbmZfY2hhbmdlZCB7CiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQJPSBCSVQoMCksCkBAIC01MzEsMTAgKzU0NiwxMCBAQAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwJPSBCSVQoMiksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPVEFQCQk9IEJJVCgzKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMJCT0gQklUKDQpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUgkJPSBCSVQoNSksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwJCT0gQklUKDYpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMJPSBCSVQoNyksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUCQk9IEJJVCg4KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfRFlOUFNfVElNRU9VVAk9IEJJVCg1KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIJCT0gQklUKDYpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMCQk9IEJJVCg3KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTCT0gQklUKDgpLAogfTsKIAogLyoqCkBAIC01NDcsOCArNTYyLDkgQEAKICAqIEBsaXN0ZW5faW50ZXJ2YWw6IGxpc3RlbiBpbnRlcnZhbCBpbiB1bml0cyBvZiBiZWFjb24gaW50ZXJ2YWwKICAqIEBmbGFnczogY29uZmlndXJhdGlvbiBmbGFncyBkZWZpbmVkIGFib3ZlCiAgKiBAcG93ZXJfbGV2ZWw6IHJlcXVlc3RlZCB0cmFuc21pdCBwb3dlciAoaW4gZEJtKQorICogQGR5bmFtaWNfcHNfdGltZW91dDogZHluYW1pYyBwb3dlcnNhdmUgdGltZW91dCAoaW4gbXMpCiAgKiBAY2hhbm5lbDogdGhlIGNoYW5uZWwgdG8gdHVuZSB0bwotICogQGh0OiB0aGUgSFQgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRldmljZQorICogQGNoYW5uZWxfdHlwZTogdGhlIGNoYW5uZWwgKEhUKSB0eXBlCiAgKiBAbG9uZ19mcmFtZV9tYXhfdHhfY291bnQ6IE1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgZm9yIGEgImxvbmciIGZyYW1lCiAgKiAgICAoYSBmcmFtZSBub3QgUlRTIHByb3RlY3RlZCksIGNhbGxlZCAiZG90MTFMb25nUmV0cnlMaW1pdCIgaW4gODAyLjExLAogICogICAgYnV0IGFjdHVhbGx5IG1lYW5zIHRoZSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCkBAIC01NTksNyArNTc1LDcgQEAKIHN0cnVjdCBpZWVlODAyMTFfY29uZiB7CiAJaW50IGJlYWNvbl9pbnQ7CiAJdTMyIGZsYWdzOwotCWludCBwb3dlcl9sZXZlbDsKKwlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dDsKIAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJYm9vbCByYWRpb19lbmFibGVkOwpAQCAtNTY3LDcgKzU4Myw3IEBACiAJdTggbG9uZ19mcmFtZV9tYXhfdHhfY291bnQsIHNob3J0X2ZyYW1lX21heF90eF9jb3VudDsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NvbmYgaHQ7CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7CiB9OwogCiAvKioKQEAgLTYzMCwxMCArNjQ2LDEyIEBACiAgKiBASUVFRTgwMjExX0lGQ0NfQlNTSUQ6IFRoZSBCU1NJRCBjaGFuZ2VkLgogICogQElFRUU4MDIxMV9JRkNDX0JFQUNPTjogVGhlIGJlYWNvbiBmb3IgdGhpcyBpbnRlcmZhY2UgY2hhbmdlZAogICoJKGN1cnJlbnRseSBBUCBhbmQgTUVTSCBvbmx5KSwgdXNlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkuCisgKiBASUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQ6IFRoZSBlbmFibGVfYmVhY29uIHZhbHVlIGNoYW5nZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2lmX2NvbmZfY2hhbmdlIHsKLQlJRUVFODAyMTFfSUZDQ19CU1NJRAk9IEJJVCgwKSwKLQlJRUVFODAyMTFfSUZDQ19CRUFDT04JPSBCSVQoMSksCisJSUVFRTgwMjExX0lGQ0NfQlNTSUQJCT0gQklUKDApLAorCUlFRUU4MDIxMV9JRkNDX0JFQUNPTgkJPSBCSVQoMSksCisJSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQJPSBCSVQoMiksCiB9OwogCiAvKioKQEAgLTY0MSwxMyArNjU5LDE2IEBACiAgKgogICogQGNoYW5nZWQ6IHBhcmFtZXRlcnMgdGhhdCBoYXZlIGNoYW5nZWQsIHNlZSAmZW51bSBpZWVlODAyMTFfaWZfY29uZl9jaGFuZ2UuCiAgKiBAYnNzaWQ6IEJTU0lEIG9mIHRoZSBuZXR3b3JrIHdlIGFyZSBhc3NvY2lhdGVkIHRvL2NyZWF0aW5nLgorICogQGVuYWJsZV9iZWFjb246IEluZGljYXRlcyB3aGV0aGVyIGJlYWNvbnMgY2FuIGJlIHNlbnQuCisgKglUaGlzIGlzIHZhbGlkIG9ubHkgZm9yIEFQL0lCU1MvTUVTSCBtb2Rlcy4KICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIGNvbmZpZ19pbnRlcmZhY2UoKSBjYWxsYmFjayBvZgogICogJnN0cnVjdCBpZWVlODAyMTFfaHcuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiB7CiAJdTMyIGNoYW5nZWQ7Ci0JdTggKmJzc2lkOworCWNvbnN0IHU4ICpic3NpZDsKKwlib29sIGVuYWJsZV9iZWFjb247CiB9OwogCiAvKioKQEAgLTY1NSwxMSArNjc2LDEzIEBACiAgKiBAQUxHX1dFUDogV0VQNDAgb3IgV0VQMTA0CiAgKiBAQUxHX1RLSVA6IFRLSVAKICAqIEBBTEdfQ0NNUDogQ0NNUCAoQUVTKQorICogQEFMR19BRVNfQ01BQzogQUVTLTEyOC1DTUFDCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9hbGcgewogCUFMR19XRVAsCiAJQUxHX1RLSVAsCiAJQUxHX0NDTVAsCisJQUxHX0FFU19DTUFDLAogfTsKIAogLyoqCkBAIC02ODgsMTIgKzcxMSwxNiBAQAogICoJZ2VuZXJhdGlvbiBpbiBzb2Z0d2FyZS4KICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0U6IFNldCBieSBtYWM4MDIxMSwgdGhpcyBmbGFnIGluZGljYXRlcwogICoJdGhhdCB0aGUga2V5IGlzIHBhaXJ3aXNlIHJhdGhlciB0aGVuIGEgc2hhcmVkIGtleS4KKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVDogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlIGRyaXZlciBmb3IgYQorICoJQ0NNUCBrZXkgaWYgaXQgcmVxdWlyZXMgQ0NNUCBlbmNyeXB0aW9uIG9mIG1hbmFnZW1lbnQgZnJhbWVzIChNRlApIHRvCisgKgliZSBkb25lIGluIHNvZnR3YXJlLgogICovCiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3MgewogCUlFRUU4MDIxMV9LRVlfRkxBR19XTU1fU1RBCT0gMTw8MCwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYJPSAxPDwxLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDPSAxPDwyLAogCUlFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRQk9IDE8PDMsCisJSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQJPSAxPDw0LAogfTsKIAogLyoqCkBAIC03MTQsOCArNzQxLDggQEAKICAqIAktIFRlbXBvcmFsIEVuY3J5cHRpb24gS2V5ICgxMjggYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgVHggTUlDIEtleSAoNjQgYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgUnggTUlDIEtleSAoNjQgYml0cykKLSAqIEBpY3ZfbGVuOiBGSVhNRQotICogQGl2X2xlbjogRklYTUUKKyAqIEBpY3ZfbGVuOiBUaGUgSUNWIGxlbmd0aCBmb3IgdGhpcyBrZXkgdHlwZQorICogQGl2X2xlbjogVGhlIElWIGxlbmd0aCBmb3IgdGhpcyBrZXkgdHlwZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIHsKIAllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKQEAgLTc1OSw3ICs3ODYsNyBAQAogICoJc2l6ZW9mKHZvaWQgKiksIHNpemUgaXMgZGV0ZXJtaW5lZCBpbiBodyBpbmZvcm1hdGlvbi4KICAqLwogc3RydWN0IGllZWU4MDIxMV9zdGEgewotCXU2NCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCXUzMiBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXU4IGFkZHJbRVRIX0FMRU5dOwogCXUxNiBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwIGh0X2NhcDsKQEAgLTgzMywxMSArODYwLDYgQEAKICAqCWV4cGVjdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCBAbWF4X3NpZ25hbC4KICAqCUlmIHBvc3NpYmxlIHBsZWFzZSBwcm92aWRlIGRCIG9yIGRCbSBpbnN0ZWFkLgogICoKLSAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX0RCOgotICoJSGFyZHdhcmUgZ2l2ZXMgc2lnbmFsIHZhbHVlcyBpbiBkQiwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gYW4KLSAqCWFyYml0cmFyeSwgZml4ZWQgcmVmZXJlbmNlLiBXZSBleHBlY3QgdmFsdWVzIGJldHdlZW4gMCBhbmQgQG1heF9zaWduYWwuCi0gKglJZiBwb3NzaWJsZSBwbGVhc2UgcHJvdmlkZSBkQm0gaW5zdGVhZC4KLSAqCiAgKiBASUVFRTgwMjExX0hXX1NJR05BTF9EQk06CiAgKglIYXJkd2FyZSBnaXZlcyBzaWduYWwgdmFsdWVzIGluIGRCbSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20KICAqCW9uZSBtaWxsaXdhdHQuIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2Qgc2luY2UgaXQgaXMgc3RhbmRhcmRpemVkCkBAIC04NTQsMTAgKzg3NiwxOCBAQAogICogQElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjoKICAqCUhhcmR3YXJlIHN1cHBvcnRzIDExbiBBLU1QRFUgYWdncmVnYXRpb24uCiAgKgotICogQElFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTOgotICoJSGFyZHdhcmUgd2hpY2ggaGFzIGR5bmFtaWMgcG93ZXIgc2F2ZSBzdXBwb3J0LCBtZWFuaW5nCi0gKgl0aGF0IHBvd2VyIHNhdmUgaXMgZW5hYmxlZCBpbiBpZGxlIHBlcmlvZHMsIGFuZCBkb24ndCBuZWVkIHN1cHBvcnQKLSAqCWZyb20gc3RhY2suCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTOgorICoJSGFyZHdhcmUgaGFzIHBvd2VyIHNhdmUgc3VwcG9ydCAoaS5lLiBjYW4gZ28gdG8gc2xlZXApLgorICoKKyAqIEBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s6CisgKglIYXJkd2FyZSByZXF1aXJlcyBudWxsZnVuYyBmcmFtZSBoYW5kbGluZyBpbiBzdGFjaywgaW1wbGllcworICoJc3RhY2sgc3VwcG9ydCBmb3IgZHluYW1pYyBQUy4KKyAqCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFM6CisgKglIYXJkd2FyZSBoYXMgc3VwcG9ydCBmb3IgZHluYW1pYyBQUy4KKyAqCisgKiBASUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIChNRlAsIElFRUUgODAyLjExdykuCiAgKi8KIGVudW0gaWVlZTgwMjExX2h3X2ZsYWdzIHsKIAlJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTCQkJPSAxPDwxLApAQCAtODY1LDEyICs4OTUsMTQgQEAKIAlJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRQkJPSAxPDwzLAogCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1BSRUFNQkxFX0lOQ0FQQUJMRQk9IDE8PDQsCiAJSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMJCQk9IDE8PDUsCi0JSUVFRTgwMjExX0hXX1NJR05BTF9EQgkJCQk9IDE8PDYsCi0JSUVFRTgwMjExX0hXX1NJR05BTF9EQk0JCQkJPSAxPDw3LAotCUlFRUU4MDIxMV9IV19OT0lTRV9EQk0JCQkJPSAxPDw4LAotCUlFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UCQkJPSAxPDw5LAotCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTgkJCT0gMTw8MTAsCi0JSUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFMJCT0gMTw8MTEsCisJSUVFRTgwMjExX0hXX1NJR05BTF9EQk0JCQkJPSAxPDw2LAorCUlFRUU4MDIxMV9IV19OT0lTRV9EQk0JCQkJPSAxPDw3LAorCUlFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UCQkJPSAxPDw4LAorCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTgkJCT0gMTw8OSwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMJCQk9IDE8PDEwLAorCUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSwkJCT0gMTw8MTEsCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMJCT0gMTw8MTIsCisJSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFCQkJPSAxPDwxMywKIH07CiAKIC8qKgpAQCAtODkwLDkgKzkyMiw4IEBACiAgKiBAd29ya3F1ZXVlOiBzaW5nbGUgdGhyZWFkZWQgd29ya3F1ZXVlIGF2YWlsYWJsZSBmb3IgZHJpdmVyIHVzZSwKICAqCWFsbG9jYXRlZCBieSBtYWM4MDIxMSBvbiByZWdpc3RyYXRpb24gYW5kIGZsdXNoZWQgd2hlbiBhbgogICoJaW50ZXJmYWNlIGlzIHJlbW92ZWQuCi0gKglOT1RJQ0U6IEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGlzIHdvcmtxdWV1ZSBzaG91bGQgTkVWRVIKLSAqCWFjcXVpcmUgdGhlIFJUTkwgbG9jayAoaS5lLiBEb24ndCB1c2UgdGhlIGZ1bmN0aW9uCi0gKglpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcygpKQorICoJTk9USUNFOiBBbGwgd29yayBwZXJmb3JtZWQgb24gdGhpcyB3b3JrcXVldWUgbXVzdCBub3QKKyAqCWFjcXVpcmUgdGhlIFJUTkwgbG9jay4KICAqCiAgKiBAcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGFyZWEgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciBkcml2ZXIgdXNlCiAgKglhbG9uZyB3aXRoIHRoaXMgc3RydWN0dXJlLgpAQCAtOTUyLDYgKzk4MywxOSBAQAogfTsKIAogLyoqCisgKiB3aXBoeV90b19pZWVlODAyMTFfaHcgLSByZXR1cm4gYSBtYWM4MDIxMSBkcml2ZXIgaHcgc3RydWN0IGZyb20gYSB3aXBoeQorICoKKyAqIEB3aXBoeTogdGhlICZzdHJ1Y3Qgd2lwaHkgd2hpY2ggd2Ugd2FudCB0byBxdWVyeQorICoKKyAqIG1hYzgwMjExIGRyaXZlcnMgY2FuIHVzZSB0aGlzIHRvIGdldCB0byB0aGVpciByZXNwZWN0aXZlCisgKiAmc3RydWN0IGllZWU4MDIxMV9ody4gRHJpdmVycyB3aXNoaW5nIHRvIGdldCB0byB0aGVpciBvd24gcHJpdmF0ZQorICogc3RydWN0dXJlIGNhbiB0aGVuIGFjY2VzcyBpdCB2aWEgaHctPnByaXYuIE5vdGUgdGhhdCBtYWM4MDIxMTEgZHJpdmVycyBzaG91bGQKKyAqIG5vdCB1c2Ugd2lwaHlfcHJpdigpIHRvIHRyeSB0byBnZXQgdGhlaXIgcHJpdmF0ZSBkcml2ZXIgc3RydWN0dXJlIGFzIHRoaXMKKyAqIGlzIGFscmVhZHkgdXNlZCBpbnRlcm5hbGx5IGJ5IG1hYzgwMjExLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3aXBoeV90b19pZWVlODAyMTFfaHcoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKKy8qKgogICogU0VUX0lFRUU4MDIxMV9ERVYgLSBzZXQgZGV2aWNlIGZvciA4MDIuMTEgaGFyZHdhcmUKICAqCiAgKiBAaHc6IHRoZSAmc3RydWN0IGllZWU4MDIxMV9odyB0byBzZXQgdGhlIGRldmljZSBmb3IKQEAgLTk3OCwxMSArMTAyMiw2IEBACiAJcmV0dXJuIGh3LT5xdWV1ZXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9udW1fcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXJldHVybiBody0+cXVldWVzICsgaHctPmFtcGR1X3F1ZXVlczsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKgogaWVlZTgwMjExX2dldF90eF9yYXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmMpCkBAIC0xMDE4LDE2ICsxMDU3LDEyIEBACiAgKgogICogVGhlIHNldF9rZXkoKSBjYWxsYmFjayBpbiB0aGUgJnN0cnVjdCBpZWVlODAyMTFfb3BzIGZvciBhIGdpdmVuCiAgKiBkZXZpY2UgaXMgY2FsbGVkIHRvIGVuYWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgZW5jcnlwdGlvbiBhbmQKLSAqIGRlY3J5cHRpb24uIFRoZSBjYWxsYmFjayB0YWtlcyBhbiBAYWRkcmVzcyBwYXJhbWV0ZXIgdGhhdCB3aWxsIGJlCi0gKiB0aGUgYnJvYWRjYXN0IGFkZHJlc3MgZm9yIGRlZmF1bHQga2V5cywgdGhlIG90aGVyIHN0YXRpb24ncyBoYXJkd2FyZQotICogYWRkcmVzcyBmb3IgaW5kaXZpZHVhbCBrZXlzIG9yIHRoZSB6ZXJvIGFkZHJlc3MgZm9yIGtleXMgdGhhdCB3aWxsCi0gKiBiZSB1c2VkIG9ubHkgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIGRlY3J5cHRpb24uIFRoZSBjYWxsYmFjayB0YWtlcyBhIEBzdGEgcGFyYW1ldGVyIHRoYXQgd2lsbCBiZSBOVUxMCisgKiBmb3IgZGVmYXVsdCBrZXlzIG9yIGtleXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uIG9ubHksIG9yIHBvaW50IHRvCisgKiB0aGUgc3RhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHBlZXIgZm9yIGluZGl2aWR1YWwga2V5cy4KICAqIE11bHRpcGxlIHRyYW5zbWlzc2lvbiBrZXlzIHdpdGggdGhlIHNhbWUga2V5IGluZGV4IG1heSBiZSB1c2VkIHdoZW4KICAqIFZMQU5zIGFyZSBjb25maWd1cmVkIGZvciBhbiBhY2Nlc3MgcG9pbnQuCiAgKgotICogVGhlIEBsb2NhbF9hZGRyZXNzIHBhcmFtZXRlciB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gb3VyIG93biBhZGRyZXNzLAotICogdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHlvdSBzdXBwb3J0IG11bHRpcGxlIGxvY2FsIGFkZHJlc3Nlcy4KLSAqCiAgKiBXaGVuIHRyYW5zbWl0dGluZywgdGhlIFRYIGNvbnRyb2wgZGF0YSB3aWxsIHVzZSB0aGUgQGh3X2tleV9pZHgKICAqIHNlbGVjdGVkIGJ5IHRoZSBkcml2ZXIgYnkgbW9kaWZ5aW5nIHRoZSAmc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZgogICogcG9pbnRlZCB0byBieSB0aGUgQGtleSBwYXJhbWV0ZXIgdG8gdGhlIHNldF9rZXkoKSBmdW5jdGlvbi4KQEAgLTEwNjEsNiArMTA5Niw0MiBAQAogICovCiAKIC8qKgorICogRE9DOiBQb3dlcnNhdmUgc3VwcG9ydAorICoKKyAqIG1hYzgwMjExIGhhcyBzdXBwb3J0IGZvciB2YXJpb3VzIHBvd2Vyc2F2ZSBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogRmlyc3QsIGl0IGNhbiBzdXBwb3J0IGhhcmR3YXJlIHRoYXQgaGFuZGxlcyBhbGwgcG93ZXJzYXZpbmcgYnkKKyAqIGl0c2VsZiwgc3VjaCBoYXJkd2FyZSBzaG91bGQgc2ltcGx5IHNldCB0aGUgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUworICogaGFyZHdhcmUgZmxhZy4gSW4gdGhhdCBjYXNlLCBpdCB3aWxsIGJlIHRvbGQgYWJvdXQgdGhlIGRlc2lyZWQKKyAqIHBvd2Vyc2F2ZSBtb2RlIGRlcGVuZGluZyBvbiB0aGUgYXNzb2NpYXRpb24gc3RhdHVzLCBhbmQgdGhlIGRyaXZlcgorICogbXVzdCB0YWtlIGNhcmUgb2Ygc2VuZGluZyBudWxsZnVuYyBmcmFtZXMgd2hlbiBuZWNlc3NhcnksIGkuZS4gd2hlbgorICogZW50ZXJpbmcgYW5kIGxlYXZpbmcgcG93ZXJzYXZlIG1vZGUuIFRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbG9vayBhdAorICogdGhlIEFJRCBpbiBiZWFjb25zIGFuZCBzaWduYWwgdG8gdGhlIEFQIHRoYXQgaXQgd29rZSB1cCB3aGVuIGl0IGZpbmRzCisgKiB0cmFmZmljIGRpcmVjdGVkIHRvIGl0LiBUaGlzIG1vZGUgc3VwcG9ydHMgZHluYW1pYyBQUyBieSBzaW1wbHkKKyAqIGVuYWJsaW5nL2Rpc2FibGluZyBQUy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHN1Y2ggaGFyZHdhcmUgbWF5IHNldCB0aGUgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTCisgKiBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQgY2FuIHN1cHBvcnQgZHluYW1pYyBQUyBtb2RlIGl0c2VsZiAoc2VlIGJlbG93KS4KKyAqCisgKiBPdGhlciBoYXJkd2FyZSBkZXNpZ25zIGNhbm5vdCBzZW5kIG51bGxmdW5jIGZyYW1lcyBieSB0aGVtc2VsdmVzIGFuZCBhbHNvCisgKiBuZWVkIHNvZnR3YXJlIHN1cHBvcnQgZm9yIHBhcnNpbmcgdGhlIFRJTSBiaXRtYXAuIFRoaXMgaXMgYWxzbyBzdXBwb3J0ZWQKKyAqIGJ5IG1hYzgwMjExIGJ5IGNvbWJpbmluZyB0aGUgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUyBhbmQKKyAqICVJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgZmxhZ3MuIFRoZSBoYXJkd2FyZSBpcyBvZiBjb3Vyc2Ugc3RpbGwKKyAqIHJlcXVpcmVkIHRvIHBhc3MgdXAgYmVhY29ucy4gQWRkaXRpb25hbGx5LCBpbiB0aGlzIGNhc2UsIG1hYzgwMjExIHdpbGwKKyAqIHdha2UgdXAgdGhlIGhhcmR3YXJlIHdoZW4gbXVsdGljYXN0IHRyYWZmaWMgaXMgYW5ub3VuY2VkIGluIHRoZSBiZWFjb24uCisgKgorICogRklYTUU6IEkgZG9uJ3QgdGhpbmsgd2UgY2FuIGJlIGZhc3QgZW5vdWdoIGluIHNvZnR3YXJlIHdoZW4gd2Ugd2FudCB0bworICoJICByZWNlaXZlIG11bHRpY2FzdCB0cmFmZmljPworICoKKyAqIER5bmFtaWMgcG93ZXJzYXZlIG1vZGUgaXMgYW4gZXh0ZW5zaW9uIHRvIG5vcm1hbCBwb3dlcnNhdmUgbW9kZSBpbiB3aGljaAorICogdGhlIGhhcmR3YXJlIHN0YXlzIGF3YWtlIGZvciBhIHVzZXItc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHNlbmRpbmcKKyAqIGEgZnJhbWUgc28gdGhhdCByZXBseSBmcmFtZXMgbmVlZCBub3QgYmUgYnVmZmVyZWQgYW5kIHRoZXJlZm9yZSBkZWxheWVkCisgKiB0byB0aGUgbmV4dCB3YWtldXAuIFRoaXMgY2FuIGVpdGhlciBiZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUsIGluIHdoaWNoIGNhc2UKKyAqIHRoZSBkcml2ZXIgbmVlZHMgdG8gbG9vayBhdCB0aGUgQGR5bmFtaWNfcHNfdGltZW91dCBoYXJkd2FyZSBjb25maWd1cmF0aW9uCisgKiB2YWx1ZSwgb3IgYnkgdGhlIHN0YWNrIGlmIGFsbCBudWxsZnVuYyBoYW5kbGluZyBpcyBpbiB0aGUgc3RhY2suCisgKi8KKworLyoqCiAgKiBET0M6IEZyYW1lIGZpbHRlcmluZwogICoKICAqIG1hYzgwMjExIHJlcXVpcmVzIHRvIHNlZSBtYW55IG1hbmFnZW1lbnQgZnJhbWVzIGZvciBwcm9wZXIKQEAgLTExNzIsNiArMTI0Myw4IEBACiAgKgljb25maWd1cmF0aW9uIGluIHRoZSBUWCBjb250cm9sIGRhdGEuIFRoaXMgaGFuZGxlciBzaG91bGQsCiAgKglwcmVmZXJhYmx5LCBuZXZlciBmYWlsIGFuZCBzdG9wIHF1ZXVlcyBhcHByb3ByaWF0ZWx5LCBtb3JlCiAgKglpbXBvcnRhbnRseSwgaG93ZXZlciwgaXQgbXVzdCBuZXZlciBmYWlsIGZvciBBLU1QRFUtcXVldWVzLgorICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIE5FVERFVl9UWF9PSyBleGNlcHQgaW4gdmVyeQorICoJbGltaXRlZCBjYXNlcy4KICAqCU11c3QgYmUgaW1wbGVtZW50ZWQgYW5kIGF0b21pYy4KICAqCiAgKiBAc3RhcnQ6IENhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUKQEAgLTEyMTIsOSArMTI4NSwxMiBAQAogICoKICAqIEBjb25maWc6IEhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuIElFRUUgODAyLjExIGNvZGUgY2FsbHMgdGhpcwogICoJZnVuY3Rpb24gdG8gY2hhbmdlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGUuZy4sIGNoYW5uZWwuCisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBmYWlsIGJ1dCByZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJaWYgaXQgZG9lcy4KICAqCiAgKiBAY29uZmlnX2ludGVyZmFjZTogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRvIGludGVyZmFjZXMKICAqCShlLmcuIEJTU0lEIGNoYW5nZXMuKQorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCiAgKiBAYnNzX2luZm9fY2hhbmdlZDogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRvIEJTUwogICoJcGFyYW1ldGVycyB0aGF0IG1heSB2YXJ5IGR1cmluZyBCU1MncyBsaWZlc3BhbiwgYW5kIG1heSBhZmZlY3QgbG93CkBAIC0xMjMyLDggKzEzMDgsOSBAQAogICoKICAqIEBzZXRfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCiAgKglUaGlzIGNhbGxiYWNrIGNhbiBzbGVlcCwgYW5kIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gYWRkX2ludGVyZmFjZQotICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGludGVyZmFjZSB3aXRoIHRoZQotICoJZ2l2ZW4gbG9jYWxfYWRkcmVzcyBpcyBlbmFibGVkLgorICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGdpdmVuIHZpcnR1YWwgaW50ZXJmYWNlCisgKglpcyBlbmFibGVkLgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIGtleSBjYW4ndCBiZSBhZGRlZC4KICAqCiAgKiBAdXBkYXRlX3RraXBfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCiAgKiAJVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBSeC4gQ2FsbGVkIGZvciBkcml2ZXJzCkBAIC0xMjQ1LDggKzEzMjIsMTYgQEAKICAqCWJhbmRzLiBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlCiAgKgljYWxsZWQ7IG5vdGUgdGhhdCBpdCBhbHNvIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHNjYW4gY2Fubm90IGZpbmlzaAogICoJYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgdHVybmVkIG9mZiEgQW55dGhpbmcgZWxzZSBpcyBhIGJ1ZyEKKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoaWNoIHdpbGwgYmUgc2VlbiBpbiB1c2Vyc3BhY2UuCiAgKgotICogQGdldF9zdGF0czogcmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzCisgKiBAc3dfc2Nhbl9zdGFydDogTm90aWZpZXIgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQganVzdCBiZWZvcmUgYSBzb2Z0d2FyZSBzY2FuCisgKglpcyBzdGFydGVkLiBDYW4gYmUgTlVMTCwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdGhpcyBub3RpZmljYXRpb24uCisgKgorICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYSBzb2Z0d2FyZSBzY2FuCisgKglmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgorICoKKyAqIEBnZXRfc3RhdHM6IFJldHVybiBsb3ctbGV2ZWwgc3RhdGlzdGljcy4KKyAqIAlSZXR1cm5zIHplcm8gaWYgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlLgogICoKICAqIEBnZXRfdGtpcF9zZXE6IElmIHlvdXIgZGV2aWNlIGltcGxlbWVudHMgVEtJUCBlbmNyeXB0aW9uIGluIGhhcmR3YXJlIHRoaXMKICAqCWNhbGxiYWNrIHNob3VsZCBiZSBwcm92aWRlZCB0byByZWFkIHRoZSBUS0lQIHRyYW5zbWl0IElWcyAoYm90aCBJVjMyCkBAIC0xMjYwLDYgKzEzNDUsNyBAQAogICoKICAqIEBjb25mX3R4OiBDb25maWd1cmUgVFggcXVldWUgcGFyYW1ldGVycyAoRURDRiAoYWlmcywgY3dfbWluLCBjd19tYXgpLAogICoJYnVyc3RpbmcpIGZvciBhIGhhcmR3YXJlIFRYIHF1ZXVlLgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqCiAgKiBAZ2V0X3R4X3N0YXRzOiBHZXQgc3RhdGlzdGljcyBvZiB0aGUgY3VycmVudCBUWCBxdWV1ZSBzdGF0dXMuIFRoaXMgaXMgdXNlZAogICoJdG8gZ2V0IG51bWJlciBvZiBjdXJyZW50bHkgcXVldWVkIHBhY2tldHMgKHF1ZXVlIGxlbmd0aCksIG1heGltdW0gcXVldWUKQEAgLTEyNjgsOCArMTM1NCwxMiBAQAogICoJaHctPmFtcGR1X3F1ZXVlcyBpdGVtcy4KICAqCiAgKiBAZ2V0X3RzZjogR2V0IHRoZSBjdXJyZW50IFRTRiB0aW1lciB2YWx1ZSBmcm9tIGZpcm13YXJlL2hhcmR3YXJlLiBDdXJyZW50bHksCi0gKgl0aGlzIGlzIG9ubHkgdXNlZCBmb3IgSUJTUyBtb2RlIGRlYnVnZ2luZyBhbmQsIGFzIHN1Y2gsIGlzIG5vdCBhCi0gKglyZXF1aXJlZCBmdW5jdGlvbi4gTXVzdCBiZSBhdG9taWMuCisgKgl0aGlzIGlzIG9ubHkgdXNlZCBmb3IgSUJTUyBtb2RlIEJTU0lEIG1lcmdpbmcgYW5kIGRlYnVnZ2luZy4gSXMgbm90IGEKKyAqCXJlcXVpcmVkIGZ1bmN0aW9uLgorICoKKyAqIEBzZXRfdHNmOiBTZXQgdGhlIFRTRiB0aW1lciB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBmaXJtd2FyZS9oYXJkd2FyZS4KKyAqICAgICAgQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgSUJTUyBtb2RlIGRlYnVnZ2luZy4gSXMgbm90IGEKKyAqCXJlcXVpcmVkIGZ1bmN0aW9uLgogICoKICAqIEByZXNldF90c2Y6IFJlc2V0IHRoZSBUU0YgdGltZXIgYW5kIGFsbG93IGZpcm13YXJlL2hhcmR3YXJlIHRvIHN5bmNocm9uaXplCiAgKgl3aXRoIG90aGVyIFNUQXMgaW4gdGhlIElCU1MuIFRoaXMgaXMgb25seSB1c2VkIGluIElCU1MgbW9kZS4gVGhpcwpAQCAtMTI3OSwxMyArMTM2OSwxNSBAQAogICogQHR4X2xhc3RfYmVhY29uOiBEZXRlcm1pbmUgd2hldGhlciB0aGUgbGFzdCBJQlNTIGJlYWNvbiB3YXMgc2VudCBieSB1cy4KICAqCVRoaXMgaXMgbmVlZGVkIG9ubHkgZm9yIElCU1MgbW9kZSBhbmQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzCiAgKgl1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHJlcGx5IHRvIFByb2JlIFJlcXVlc3RzLgorICoJUmV0dXJucyBub24temVybyBpZiB0aGlzIGRldmljZSBzZW50IHRoZSBsYXN0IGJlYWNvbi4KICAqCiAgKiBAYW1wZHVfYWN0aW9uOiBQZXJmb3JtIGEgY2VydGFpbiBBLU1QRFUgYWN0aW9uCiAgKiAJVGhlIFJBL1RJRCBjb21iaW5hdGlvbiBkZXRlcm1pbmVzIHRoZSBkZXN0aW5hdGlvbiBhbmQgVElEIHdlIHdhbnQKICAqIAl0aGUgYW1wZHUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBmb3IuIFRoZSBhY3Rpb24gaXMgZGVmaW5lZCB0aHJvdWdoCiAgKiAJaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uLiBTdGFydGluZyBzZXF1ZW5jZSBudW1iZXIgKEBzc24pCi0gKiAJaXMgdGhlIGZpcnN0IGZyYW1lIHdlIGV4cGVjdCB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uIG5vdGljZQorICogCWlzIHRoZSBmaXJzdCBmcmFtZSB3ZSBleHBlY3QgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLiBOb3RpY2UKICAqIAl0aGF0IFRYL1JYX1NUT1AgY2FuIHBhc3MgTlVMTCBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyB7CiAJaW50ICgqdHgpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTEzMTAsMTIgKzE0MDIsMTUgQEAKIAlpbnQgKCpzZXRfdGltKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIGJvb2wgc2V0KTsKIAlpbnQgKCpzZXRfa2V5KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIAl2b2lkICgqdXBkYXRlX3RraXBfa2V5KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmNvbmYsIGNvbnN0IHU4ICphZGRyZXNzLAogCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KTsKLQlpbnQgKCpod19zY2FuKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnNzaWQsIHNpemVfdCBsZW4pOworCWludCAoKmh3X3NjYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKKwl2b2lkICgqc3dfc2Nhbl9zdGFydCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzd19zY2FuX2NvbXBsZXRlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJaW50ICgqZ2V0X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwogCXZvaWQgKCpnZXRfdGtpcF9zZXEpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19rZXlfaWR4LApAQCAtMTMyOCw2ICsxNDIzLDcgQEAKIAlpbnQgKCpnZXRfdHhfc3RhdHMpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKTsKIAl1NjQgKCpnZXRfdHNmKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnNldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKTsKIAl2b2lkICgqcmVzZXRfdHNmKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJaW50ICgqdHhfbGFzdF9iZWFjb24pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCphbXBkdV9hY3Rpb24pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTc1Miw4ICsxODQ4LDkgQEAKICAqIG1hYzgwMjExIHRoYXQgdGhlIHNjYW4gZmluaXNoZWQuCiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhhdCBmaW5pc2hlZCB0aGUgc2NhbgorICogQGFib3J0ZWQ6IHNldCB0byB0cnVlIGlmIHNjYW4gd2FzIGFib3J0ZWQKICAqLwotdm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZCk7CiAKIC8qKgogICogaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMgLSBpdGVyYXRlIGFjdGl2ZSBpbnRlcmZhY2VzCkBAIC0xODg2LDYgKzE5ODMsMTYgQEAKIC8qIFJhdGUgY29udHJvbCBBUEkgKi8KIAogLyoqCisgKiBlbnVtIHJhdGVfY29udHJvbF9jaGFuZ2VkIC0gZmxhZ3MgdG8gaW5kaWNhdGUgd2hpY2ggcGFyYW1ldGVyIGNoYW5nZWQKKyAqCisgKiBASUVFRTgwMjExX1JDX0hUX0NIQU5HRUQ6IFRoZSBIVCBwYXJhbWV0ZXJzIG9mIHRoZSBvcGVyYXRpbmcgY2hhbm5lbCBoYXZlCisgKgljaGFuZ2VkLCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGNhbiB1cGRhdGUgaXRzIGludGVybmFsIHN0YXRlIGlmIG5lZWRlZC4KKyAqLworZW51bSByYXRlX2NvbnRyb2xfY2hhbmdlZCB7CisJSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQgPSBCSVQoMCkKK307CisKKy8qKgogICogc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgLSByYXRlIGNvbnRyb2wgaW5mb3JtYXRpb24gZm9yL2Zyb20gUkMgYWxnbwogICoKICAqIEBodzogVGhlIGhhcmR3YXJlIHRoZSBhbGdvcml0aG0gaXMgaW52b2tlZCBmb3IuCkBAIC0xOTIxLDYgKzIwMjgsOSBAQAogCXZvaWQgKigqYWxsb2Nfc3RhKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBnZnBfdCBnZnApOwogCXZvaWQgKCpyYXRlX2luaXQpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSk7CisJdm9pZCAoKnJhdGVfdXBkYXRlKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgIHZvaWQgKnByaXZfc3RhLCB1MzIgY2hhbmdlZCk7CiAJdm9pZCAoKmZyZWVfc3RhKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJIHZvaWQgKnByaXZfc3RhKTsKIApAQCAtMTk2Miw0ICsyMDcyLDM0IEBACiBpbnQgaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcihzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzKTsKIHZvaWQgaWVlZTgwMjExX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQyMChzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQyMDsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDBfbWludXMoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDBfcGx1cyhzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odDQwKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZl9pc19odDQwX21pbnVzKGNvbmYpIHx8IGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUOworfQorCiAjZW5kaWYgLyogTUFDODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDJlMGM1MzYuLjRkZmI3OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTI4Nyw3ICsyODcsNyBAQAogCiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19zZXRfaGFzaHNpemUoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKLWV4dGVybiBpbnQgbmZfY29ubnRyYWNrX21heDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX21heDsKIAogI2RlZmluZSBORl9DVF9TVEFUX0lOQyhuZXQsIGNvdW50KQlcCiAJKHBlcl9jcHVfcHRyKChuZXQpLT5jdC5zdGF0LCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKS0+Y291bnQrKykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKaW5kZXggZGViZGFmNy4uYjAxMDcwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKQEAgLTkwLDEwICs5MCw3IEBACiAJc3RydWN0IG1vZHVsZSAqbWU7CiB9OwogCi0vKiBFeGlzdGluZyBidWlsdC1pbiBwcm90b2NvbHMgKi8KLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdGNwNjsKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNDsKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNjsKKy8qIEV4aXN0aW5nIGJ1aWx0LWluIGdlbmVyaWMgcHJvdG9jb2wgKi8KIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fZ2VuZXJpYzsKIAogI2RlZmluZSBNQVhfTkZfQ1RfUFJPVE8gMjU2CkBAIC0xMDEsMTEgKzk4LDYgQEAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgogX19uZl9jdF9sNHByb3RvX2ZpbmQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pOwogCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoKLW5mX2N0X2w0cHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IHByb3RvY29sKTsKLQotZXh0ZXJuIHZvaWQgbmZfY3RfbDRwcm90b19wdXQoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwKTsKLQogLyogUHJvdG9jb2wgcmVnaXN0cmF0aW9uLiAqLwogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnByb3RvKTsKIGV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwcm90byk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmgKaW5kZXggNzE4MmMwNi4uOTIwOTk3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX05GX0xPR19ICiAjZGVmaW5lIF9ORl9MT0dfSAogCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKIC8qIHRob3NlIE5GX0xPR18qIGRlZmluZXMgYW5kIHN0cnVjdCBuZl9sb2dpbmZvIGFyZSBsZWdhY3kgZGVmaW5pdGlvcyB0aGF0IHdpbGwKICAqIGRpc2FwcGVhciBvbmNlIGlwdGFibGVzIGlzIHJlcGxhY2VkIHdpdGggcGt0dGFibGVzLiAgUGxlYXNlIERPIE5PVCB1c2UgdGhlbQogICogZm9yIGFueSBuZXcgY29kZSEgKi8KQEAgLTQwLDEyICs0MiwxNSBAQAogCXN0cnVjdCBtb2R1bGUJKm1lOwogCW5mX2xvZ2ZuIAkqbG9nZm47CiAJY2hhcgkJKm5hbWU7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0W05GUFJPVE9fTlVNUFJPVE9dOwogfTsKIAogLyogRnVuY3Rpb24gdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciBsb2cgZnVuY3Rpb24uICovCi1pbnQgbmZfbG9nX3JlZ2lzdGVyKHVfaW50OF90IHBmLCBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpOwotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpOwotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcl9wZih1X2ludDhfdCBwZik7CitpbnQgbmZfbG9nX3JlZ2lzdGVyKHVfaW50OF90IHBmLCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpOwordm9pZCBuZl9sb2dfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpOworCitpbnQgbmZfbG9nX2JpbmRfcGYodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Cit2b2lkIG5mX2xvZ191bmJpbmRfcGYodV9pbnQ4X3QgcGYpOwogCiAvKiBDYWxscyB0aGUgcmVnaXN0ZXJlZCBiYWNrZW5kIGxvZ2dpbmcgZnVuY3Rpb24gKi8KIHZvaWQgbmZfbG9nX3BhY2tldCh1X2ludDhfdCBwZiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAppbmRleCA5NzdmNDgyLi4yZWIzODE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCkBAIC01NCw1ICs1NCwxOCBAQAogCiAJc3RydWN0IHRpbWVyX2xpc3QgcnRfc2VjcmV0X3RpbWVyOwogCWF0b21pY190IHJ0X2dlbmlkOworCisjaWZkZWYgQ09ORklHX0lQX01ST1VURQorCXN0cnVjdCBzb2NrCQkqbXJvdXRlX3NrOworCXN0cnVjdCBtZmNfY2FjaGUJKiptZmNfY2FjaGVfYXJyYXk7CisJc3RydWN0IHZpZl9kZXZpY2UJKnZpZl90YWJsZTsKKwlpbnQJCQltYXh2aWY7CisJYXRvbWljX3QJCWNhY2hlX3Jlc29sdmVfcXVldWVfbGVuOworCWludAkJCW1yb3V0ZV9kb19hc3NlcnQ7CisJaW50CQkJbXJvdXRlX2RvX3BpbTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpCisJaW50CQkJbXJvdXRlX3JlZ192aWZfbnVtOworI2VuZGlmCisjZW5kaWYKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldHJvbS5oIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKaW5kZXggZjA2ODUyYi4uMTU2OTZiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0cm9tLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKQEAgLTU5LDEwICs1OSw2IEBACiAjZGVmaW5lIE5SX01BWF9XSU5ET1dfU0laRQkJMTI3CQkJLyogTWF4aW11bSBXaW5kb3cgQWxsb3dhYmxlIC0gMTI3ICovCiAjZGVmaW5lCU5SX01BWF9QQUNLRVRfU0laRQkJMjM2CQkJLyogTWF4aW11bSBQYWNrZXQgTGVuZ3RoIC0gMjM2ICovCiAKLXN0cnVjdCBucl9wcml2YXRlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLX07Ci0KIHN0cnVjdCBucl9zb2NrIHsKIAlzdHJ1Y3Qgc29jawkJc29jazsKIAlheDI1X2FkZHJlc3MJCXVzZXJfYWRkciwgc291cmNlX2FkZHIsIGRlc3RfYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaCBiL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaAppbmRleCAwNTdiMGE4Li5kNDNmNzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9waG9uZXQvcGhvbmV0LmgKKysrIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oCkBAIC0xMDUsNyArMTA1LDYgQEAKIAogaW50IHBob25ldF9zeXNjdGxfaW5pdCh2b2lkKTsKIHZvaWQgcGhvbmV0X3N5c2N0bF9leGl0KHZvaWQpOwotdm9pZCBwaG9uZXRfbmV0bGlua19yZWdpc3Rlcih2b2lkKTsKIGludCBpc2lfcmVnaXN0ZXIodm9pZCk7CiB2b2lkIGlzaV91bnJlZ2lzdGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmggYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKaW5kZXggYWExYzU5YS4uNTA1NGRjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaApAQCAtMjgsNyArMjgsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0IHBuZGV2czsKK3N0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBob25ldF9kZXZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQpOwogCiBzdHJ1Y3QgcGhvbmV0X2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMzYsOCArMzYsOSBAQAogCURFQ0xBUkVfQklUTUFQKGFkZHJzLCA2NCk7CiB9OwogCi12b2lkIHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKTsKK2ludCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCk7CiB2b2lkIHBob25ldF9kZXZpY2VfZXhpdCh2b2lkKTsKK2ludCBwaG9uZXRfbmV0bGlua19yZWdpc3Rlcih2b2lkKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpwaG9uZXRfZGV2aWNlX2dldChzdHJ1Y3QgbmV0ICpuZXQpOwogCiBpbnQgcGhvbmV0X2FkZHJlc3NfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCA0MDgyZjM5Li5lMzdmZTMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtODUsNiArODUsNyBAQAogCQlzdHJ1Y3QgbmxhdHRyICp0YWIpOwogZXh0ZXJuIHZvaWQgcWRpc2NfcHV0X3J0YWIoc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRhYik7CiBleHRlcm4gdm9pZCBxZGlzY19wdXRfc3RhYihzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqdGFiKTsKK2V4dGVybiB2b2lkIHFkaXNjX3dhcm5fbm9ud2MoY2hhciAqdHh0LCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIAogZXh0ZXJuIHZvaWQgX19xZGlzY19ydW4oc3RydWN0IFFkaXNjICpxKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcHNuYXAuaCBiL2luY2x1ZGUvbmV0L3BzbmFwLmgKaW5kZXggYjJlMDFjYy4uZmU0NTZjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcHNuYXAuaAorKysgYi9pbmNsdWRlL25ldC9wc25hcC5oCkBAIC0xLDcgKzEsMTEgQEAKICNpZm5kZWYgX05FVF9QU05BUF9ICiAjZGVmaW5lIF9ORVRfUFNOQVBfSAogCi1leHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICpyZWdpc3Rlcl9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjLCBpbnQgKCpyY3ZmdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KSk7CitleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICoKK3JlZ2lzdGVyX3NuYXBfY2xpZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc2MsCisJCSAgICAgaW50ICgqcmN2ZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJCQkgICAgc3RydWN0IHBhY2tldF90eXBlICosCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9zbmFwX2NsaWVudChzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBmOGM0NzQyLi45NjRmZmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTQyLDI0ICs0MiwxNyBAQAogCWludCAJCQkoKmVucXVldWUpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqCSgqZGVxdWV1ZSkoc3RydWN0IFFkaXNjICpkZXYpOwogCXVuc2lnbmVkCQlmbGFnczsKLSNkZWZpbmUgVENRX0ZfQlVJTFRJTgkxCi0jZGVmaW5lIFRDUV9GX1RIUk9UVExFRAkyCi0jZGVmaW5lIFRDUV9GX0lOR1JFU1MJNAorI2RlZmluZSBUQ1FfRl9CVUlMVElOCQkxCisjZGVmaW5lIFRDUV9GX1RIUk9UVExFRAkJMgorI2RlZmluZSBUQ1FfRl9JTkdSRVNTCQk0CisjZGVmaW5lIFRDUV9GX1dBUk5fTk9OV0MJKDEgPDwgMTYpCiAJaW50CQkJcGFkZGVkOwogCXN0cnVjdCBRZGlzY19vcHMJKm9wczsKIAlzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZQkqc3RhYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJdTMyCQkJaGFuZGxlOwogCXUzMgkJCXBhcmVudDsKIAlhdG9taWNfdAkJcmVmY250OwotCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwotCXN0cnVjdCBza19idWZmCQkqZ3NvX3NrYjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXE7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZQkqZGV2X3F1ZXVlOwotCXN0cnVjdCBRZGlzYwkJKm5leHRfc2NoZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCi0Jc3RydWN0IGduZXRfc3RhdHNfYmFzaWMJYnN0YXRzOwotCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlCXFzdGF0czsKIAlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdAlyYXRlX2VzdDsKIAlpbnQJCQkoKnJlc2hhcGVfZmFpbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IFFkaXNjICpxKTsKQEAgLTcwLDYgKzYzLDE3IEBACiAJICogYW5kIGl0IHdpbGwgbGl2ZSB1bnRpbCBiZXR0ZXIgc29sdXRpb24gd2lsbCBiZSBpbnZlbnRlZC4KIAkgKi8KIAlzdHJ1Y3QgUWRpc2MJCSpfX3BhcmVudDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpkZXZfcXVldWU7CisJc3RydWN0IFFkaXNjCQkqbmV4dF9zY2hlZDsKKworCXN0cnVjdCBza19idWZmCQkqZ3NvX3NrYjsKKwkvKgorCSAqIEZvciBwZXJmb3JtYW5jZSBzYWtlIG9uIFNNUCwgd2UgcHV0IGhpZ2hseSBtb2RpZmllZCBmaWVsZHMgYXQgdGhlIGVuZAorCSAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXRlOworCXN0cnVjdCBza19idWZmX2hlYWQJcTsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyBic3RhdHM7CisJc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOwogfTsKIAogc3RydWN0IFFkaXNjX2NsYXNzX29wcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oCmluZGV4IDJmZWMzYzMuLmJlZmM4ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmgKQEAgLTQ2LDE0ICs0NiwxNCBAQAogI2luY2x1ZGUgPG5ldC9zY3RwL3NjdHAuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMmMuaD4KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF9jcmMzMmMoX19iZTMyIGNyYywgdTggKmJ1ZmZlciwgdTE2IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgX191MzIgc2N0cF9jcmMzMmMoX191MzIgY3JjLCB1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoKQogewotCXJldHVybiAoX19mb3JjZSBfX2JlMzIpY3JjMzJjKChfX2ZvcmNlIHUzMiljcmMsIGJ1ZmZlciwgbGVuZ3RoKTsKKwlyZXR1cm4gY3JjMzJjKGNyYywgYnVmZmVyLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX3N0YXJ0X2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoKQorc3RhdGljIGlubGluZSBfX3UzMiBzY3RwX3N0YXJ0X2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoKQogewotCV9fYmUzMiBjcmMgPSB+Y3B1X3RvX2JlMzIoMCk7CisJX191MzIgY3JjID0gfihfX3UzMikwOwogCV9fdTggIHplcm9bc2l6ZW9mKF9fdTMyKV0gPSB7MH07CiAKIAkvKiBPcHRpbWl6ZSB0aGlzIHJvdXRpbmUgdG8gYmUgU0NUUCBzcGVjaWZpYywga25vd2luZyBob3cKQEAgLTcyLDEyICs3MiwxMiBAQAogCXJldHVybiBjcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfdXBkYXRlX2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoLCBfX2JlMzIgY3JjMzIpCitzdGF0aWMgaW5saW5lIF9fdTMyIHNjdHBfdXBkYXRlX2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoLCBfX3UzMiBjcmMzMikKIHsKIAlyZXR1cm4gc2N0cF9jcmMzMmMoY3JjMzIsIGJ1ZmZlciwgbGVuZ3RoKTsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF9lbmRfY2tzdW0oX19iZTMyIGNyYzMyKQorc3RhdGljIGlubGluZSBfX2xlMzIgc2N0cF9lbmRfY2tzdW0oX19iZTMyIGNyYzMyKQogewotCXJldHVybiAoX19mb3JjZSBfX2JlMzIpfmNwdV90b19sZTMyKChfX2ZvcmNlIHUzMiljcmMzMik7CisJcmV0dXJuIGNwdV90b19sZTMyKH5jcmMzMik7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCmluZGV4IDg4OTg4YWIuLjNiOTY2ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC03Nyw3ICs3Nyw4IEBACiAJU0NUUF9DTURfSEJfVElNRVJTX1NUQVJULCAgICAvKiBTdGFydCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gKi8KIAlTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsICAgIC8qIFVwZGF0ZSBhIGhlYXJ0YmVhdCB0aW1lcnMuICAqLwogCVNDVFBfQ01EX0hCX1RJTUVSU19TVE9QLCAgICAgLyogU3RvcCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gICovCi0JU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULCAgICAvKiBSZXNldCB0aGUgc3RhdHVzIG9mIGEgdHJhbnNwb3J0LiAqLworCVNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5ULCAgLyogUmVzZXQgdGhlIHN0YXR1cyBvZiBhIHRyYW5zcG9ydC4gKi8KKwlTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwgICAgIC8qIERvIG1hbmlwdWxhdGlvbnMgb24gaWRsZSB0cmFuc3BvcnQgKi8KIAlTQ1RQX0NNRF9UUkFOU1BPUlRfT04sICAgICAgIC8qIE1hcmsgdGhlIHRyYW5zcG9ydCBhcyBhY3RpdmUuICovCiAJU0NUUF9DTURfUkVQT1JUX0VSUk9SLCAgIC8qIFBhc3MgdGhpcyBlcnJvciBiYWNrIG91dCBvZiB0aGUgc20uICovCiAJU0NUUF9DTURfUkVQT1JUX0JBRF9UQUcsIC8qIFZlcmlmaWNhdGlvbiB0YWdzIGRpZG4ndCBtYXRjaC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggYmJiNzc0Mi4uOWY4MGE3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTYyLDEzICs2Miw2IEBACiAgKiAgIGFuZCB3aWxsIGNvbnRpbnVlIHRvIGV2b2x2ZS4KICAqLwogCi0KLQotI2lmZGVmIFRFU1RfRlJBTUUKLSN1bmRlZiBDT05GSUdfU0NUUF9EQkdfT0JKQ05UCi0jdW5kZWYgQ09ORklHX1NZU0NUTAotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKi8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CkBAIC0xMzgsNiArMTMxLDggQEAKIHVuc2lnbmVkIGludCBzY3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCXBvbGxfdGFibGUgKndhaXQpOwogdm9pZCBzY3RwX3NvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHNjdHBfY29weV9zb2NrKHN0cnVjdCBzb2NrICpuZXdzaywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciBzY3RwX3NvY2tldHNfYWxsb2NhdGVkOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA5NjYxZDdiLi4yM2YwOGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMjE4LDYgKzIxOCwxMCBAQAogCiAJLyogRmxhZyB0byBpZGljYXRlIGlmIFNDVFAtQVVUSCBpcyBlbmFibGVkICovCiAJaW50IGF1dGhfZW5hYmxlOworCisJLyogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGNvbXB1dGluZyBhbmQgdmVyaWZ5aW5nIGNoZWNrc3VtCisJICogaXMgZGlzYWJsZWQuICovCisgICAgICAgIGludCBjaGVja3N1bV9kaXNhYmxlOwogfSBzY3RwX2dsb2JhbHM7CiAKICNkZWZpbmUgc2N0cF9ydG9faW5pdGlhbAkJKHNjdHBfZ2xvYmFscy5ydG9faW5pdGlhbCkKQEAgLTI1Miw2ICsyNTYsNyBAQAogI2RlZmluZSBzY3RwX2FkZGlwX25vYXV0aAkJKHNjdHBfZ2xvYmFscy5hZGRpcF9ub2F1dGhfZW5hYmxlKQogI2RlZmluZSBzY3RwX3Byc2N0cF9lbmFibGUJCShzY3RwX2dsb2JhbHMucHJzY3RwX2VuYWJsZSkKICNkZWZpbmUgc2N0cF9hdXRoX2VuYWJsZQkJKHNjdHBfZ2xvYmFscy5hdXRoX2VuYWJsZSkKKyNkZWZpbmUgc2N0cF9jaGVja3N1bV9kaXNhYmxlCQkoc2N0cF9nbG9iYWxzLmNoZWNrc3VtX2Rpc2FibGUpCiAKIC8qIFNDVFAgU29ja2V0IHR5cGU6IFVEUCBvciBUQ1Agc3R5bGUuICovCiB0eXBlZGVmIGVudW0gewpAQCAtOTA1LDggKzkxMCwxMCBAQAogCSAqCQlzaG91bGQgYmUgc2V0LiBFdmVyeSB0aW1lIHRoZSBSVFQKIAkgKgkJY2FsY3VsYXRpb24gY29tcGxldGVzIChpLmUuIHRoZSBEQVRBIGNodW5rCiAJICoJCWlzIFNBQ0snZCkgY2xlYXIgdGhpcyBmbGFnLgorCSAqIGhiX3NlbnQgOiBhIGZsYWcgdGhhdCBzaWduYWxzIHRoYXQgd2UgaGF2ZSBhIHBlbmRpbmcgaGVhcnRiZWF0LgogCSAqLwogCV9fdTggcnRvX3BlbmRpbmc7CisJX191OCBoYl9zZW50OwogCiAJLyogRmxhZyB0byB0cmFjayB0aGUgY3VycmVudCBmYXN0IHJlY292ZXJ5IHN0YXRlICovCiAJX191OCBmYXN0X3JlY292ZXJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGVlZmVlYWYuLjRiYjFmZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAqCUBza19hbGxvY2F0aW9uOiBhbGxvY2F0aW9uIG1vZGUKICAgKglAc2tfc25kYnVmOiBzaXplIG9mIHNlbmQgYnVmZmVyIGluIGJ5dGVzCiAgICoJQHNrX2ZsYWdzOiAlU09fTElOR0VSIChsX29ub2ZmKSwgJVNPX0JST0FEQ0FTVCwgJVNPX0tFRVBBTElWRSwKLSAgKgkJICAgJVNPX09PQklOTElORSBzZXR0aW5ncworICAqCQkgICAlU09fT09CSU5MSU5FIHNldHRpbmdzLCAlU09fVElNRVNUQU1QSU5HIHNldHRpbmdzCiAgICoJQHNrX25vX2NoZWNrOiAlU09fTk9fQ0hFQ0sgc2V0dGluZywgd2V0aGVyIG9yIG5vdCBjaGVja3VwIHBhY2tldHMKICAgKglAc2tfcm91dGVfY2Fwczogcm91dGUgY2FwYWJpbGl0aWVzIChlLmcuICVORVRJRl9GX1RTTykKICAgKglAc2tfZ3NvX3R5cGU6IEdTTyB0eXBlIChlLmcuICVTS0JfR1NPX1RDUFY0KQpAQCAtNDg4LDYgKzQ4OCwxMyBAQAogCVNPQ0tfUkNWVFNUQU1QTlMsIC8qICVTT19USU1FU1RBTVBOUyBzZXR0aW5nICovCiAJU09DS19MT0NBTFJPVVRFLCAvKiByb3V0ZSBsb2NhbGx5IG9ubHksICVTT19ET05UUk9VVEUgc2V0dGluZyAqLwogCVNPQ0tfUVVFVUVfU0hSVU5LLCAvKiB3cml0ZSBxdWV1ZSBoYXMgYmVlbiBzaHJ1bmsgcmVjZW50bHkgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUsICAvKiAlU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUsICAgICAvKiAlU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSwgLyogJVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFLCAvKiAlU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX2NvcHlfZmxhZ3Moc3RydWN0IHNvY2sgKm5zaywgc3RydWN0IHNvY2sgKm9zaykKQEAgLTk0NCw2ICs5NTEsMTEgQEAKIAkJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCQkJICAgICBpbnQgbm9ibG9jaywKIAkJCQkJCSAgICAgaW50ICplcnJjb2RlKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAJCSpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9sZW4sCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLAorCQkJCQkJICAgICAgaW50IG5vYmxvY2ssCisJCQkJCQkgICAgICBpbnQgKmVycmNvZGUpOwogZXh0ZXJuIHZvaWQgKnNvY2tfa21hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLAogCQkJICBnZnBfdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZCBzb2NrX2tmcmVlX3Moc3RydWN0IHNvY2sgKnNrLCB2b2lkICptZW0sIGludCBzaXplKTsKQEAgLTEzNDAsMTQgKzEzNTIsNDUgQEAKIHNvY2tfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJa3RpbWVfdCBrdCA9IHNrYi0+dHN0YW1wOworCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzID0gc2tiX2h3dHN0YW1wcyhza2IpOwogCi0JaWYgKHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApKQorCS8qCisJICogZ2VuZXJhdGUgY29udHJvbCBtZXNzYWdlcyBpZgorCSAqIC0gcmVjZWl2ZSB0aW1lIHN0YW1waW5nIGluIHNvZnR3YXJlIHJlcXVlc3RlZCAoU09DS19SQ1ZUU1RBTVAKKwkgKiAgIG9yIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKQorCSAqIC0gc29mdHdhcmUgdGltZSBzdGFtcCBhdmFpbGFibGUgYW5kIHdhbnRlZAorCSAqICAgKFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKQorCSAqIC0gaGFyZHdhcmUgdGltZSBzdGFtcHMgYXZhaWxhYmxlIGFuZCB3YW50ZWQKKwkgKiAgIChTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgb3IKKwkgKiAgIFNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSkKKwkgKi8KKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkgfHwKKwkgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkgfHwKKwkgICAgKGt0LnR2NjQgJiYgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSkpIHx8CisJICAgIChod3RzdGFtcHMtPmh3dHN0YW1wLnR2NjQgJiYKKwkgICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSkgfHwKKwkgICAgKGh3dHN0YW1wcy0+c3lzdHN0YW1wLnR2NjQgJiYKKwkgICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSkpCiAJCV9fc29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpOwogCWVsc2UKIAkJc2stPnNrX3N0YW1wID0ga3Q7CiB9CiAKIC8qKgorICogc29ja190eF90aW1lc3RhbXAgLSBjaGVja3Mgd2hldGhlciB0aGUgb3V0Z29pbmcgcGFja2V0IGlzIHRvIGJlIHRpbWUgc3RhbXBlZAorICogQG1zZzoJb3V0Z29pbmcgcGFja2V0CisgKiBAc2s6CQlzb2NrZXQgc2VuZGluZyB0aGlzIHBhY2tldAorICogQHNodHg6CWZpbGxlZCB3aXRoIGluc3RydWN0aW9ucyBmb3IgdGltZSBzdGFtcGluZworICoKKyAqIEN1cnJlbnRseSBvbmx5IGRlcGVuZHMgb24gU09DS19USU1FU1RBTVBJTkcqIGZsYWdzLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYKKyAqIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgKi8KK2V4dGVybiBpbnQgc29ja190eF90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJICAgICBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgIHVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHgpOworCisKKy8qKgogICogc2tfZWF0X3NrYiAtIFJlbGVhc2UgYSBza2IgaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAogICogQHNrOiBzb2NrZXQgdG8gZWF0IHRoaXMgc2tiIGZyb20KICAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gZWF0CkBAIC0xNDE1LDcgKzE0NTgsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1leHRlcm4gdm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKTsKIGV4dGVybiBpbnQgc29ja19nZXRfdGltZXN0YW1wKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgc29ja19nZXRfdGltZXN0YW1wbnMoc3RydWN0IHNvY2sgKiwgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCAyMTgyMzVkLi5lNTRjNzZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNDgxLDcgKzQ4MSwxNiBAQAogfQogCiBleHRlcm4gdW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IGxhcmdlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7CisKKy8qIEJvdW5kIE1TUyAvIFRTTyBwYWNrZXQgc2l6ZSB3aXRoIHRoZSBoYWxmIG9mIHRoZSB3aW5kb3cgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKK3sKKwlpZiAodHAtPm1heF93aW5kb3cgJiYgcGt0c2l6ZSA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkKKwkJcmV0dXJuIG1heCh0cC0+bWF4X3dpbmRvdyA+PiAxLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOworCWVsc2UKKwkJcmV0dXJuIHBrdHNpemU7Cit9CiAKIC8qIHRjcC5jICovCiBleHRlcm4gdm9pZCB0Y3BfZ2V0X2luZm8oc3RydWN0IHNvY2sgKiwgc3RydWN0IHRjcF9pbmZvICopOwpAQCAtNjg1LDYgKzY5NCw3IEBACiBleHRlcm4gaW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7CiBleHRlcm4gaW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKK2V4dGVybiB2b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3KTsKIAogZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2luaXRfY29uZ2VzdGlvbl9vcHM7CiBleHRlcm4gdTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7CkBAIC04MjEsMTUgKzgzMSwxNSBAQAogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCi0JX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSwgdHAtPm5vbmFnbGUpOworCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRjcF9jdXJyZW50X21zcyhzayksIHRwLT5ub25hZ2xlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9pbml0X3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2ssIHUzMiBzZXEpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSkKIHsKIAl0cC0+c25kX3dsMSA9IHNlcTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF91cGRhdGVfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFjaywgdTMyIHNlcSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfdXBkYXRlX3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEpCiB7CiAJdHAtPnNuZF93bDEgPSBzZXE7CiB9CkBAIC05MjUsNyArOTM1LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc2Fja19yZXNldChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCkKIHsKIAlyeF9vcHQtPmRzYWNrID0gMDsKLQlyeF9vcHQtPmVmZl9zYWNrcyA9IDA7CiAJcnhfb3B0LT5udW1fc2Fja3MgPSAwOwogfQogCkBAIC05OTcsMTEgKzEwMDYsMjEgQEAKIAlyZXR1cm4gZmluX3RpbWVvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHRjcF9wYXdzX2NoZWNrKGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LCBpbnQgcnN0KQorc3RhdGljIGlubGluZSBpbnQgdGNwX3Bhd3NfY2hlY2soY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsCisJCQkJIGludCBwYXdzX3dpbikKIHsKLQlpZiAoKHMzMikocnhfb3B0LT5yY3ZfdHN2YWwgLSByeF9vcHQtPnRzX3JlY2VudCkgPj0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGdldF9zZWNvbmRzKCkgPj0gcnhfb3B0LT50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpCisJaWYgKChzMzIpKHJ4X29wdC0+dHNfcmVjZW50IC0gcnhfb3B0LT5yY3ZfdHN2YWwpIDw9IHBhd3Nfd2luKQorCQlyZXR1cm4gMTsKKwlpZiAodW5saWtlbHkoZ2V0X3NlY29uZHMoKSA+PSByeF9vcHQtPnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9wYXdzX3JlamVjdChjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwKKwkJCQkgIGludCByc3QpCit7CisJaWYgKHRjcF9wYXdzX2NoZWNrKHJ4X29wdCwgMCkpCiAJCXJldHVybiAwOwogCiAJLyogUlNUIHNlZ21lbnRzIGFyZSBub3QgcmVjb21tZW5kZWQgdG8gY2FycnkgdGltZXN0YW1wLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmggYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAppbmRleCA4NzZiNmYyLi5iZmIyNDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAorKysgYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaApAQCAtNDYsNyArNDYsNyBAQAogCQkJCQkJICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKIAkJCQkJCSAgaW50ICpobGltaXQsIGludCAqdGNsYXNzKTsKIAotI2RlZmluZQkJTE9PUEJBQ0s0X0lQVjYJCV9fY29uc3RhbnRfaHRvbmwoMHg3ZjAwMDAwNikKKyNkZWZpbmUJCUxPT1BCQUNLNF9JUFY2CQljcHVfdG9fYmUzMigweDdmMDAwMDA2KQogCiAvKgogICoJYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWMgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC91ZHAuaCBiL2luY2x1ZGUvbmV0L3VkcC5oCmluZGV4IDkwZTZjZTUuLjkzZGJlMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcC5oCisrKyBiL2luY2x1ZGUvbmV0L3VkcC5oCkBAIC0xMjQsNiArMTI0LDggQEAKIAlza19jb21tb25fcmVsZWFzZShzayk7CiB9CiAKK2V4dGVybiBpbnQJaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CiBleHRlcm4gaW50CXVkcF9saWJfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAogCQlpbnQgKCopKGNvbnN0IHN0cnVjdCBzb2NrKixjb25zdCBzdHJ1Y3Qgc29jayopKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKaW5kZXggMjFjNWQ5Ni4uNjRhNzYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAorKysgYi9pbmNsdWRlL25ldC93aXJlbGVzcy5oCkBAIC02OSw2ICs2OSw5IEBACiAgKiBAYmFuZDogYmFuZCB0aGlzIGNoYW5uZWwgYmVsb25ncyB0by4KICAqIEBtYXhfYW50ZW5uYV9nYWluOiBtYXhpbXVtIGFudGVubmEgZ2FpbiBpbiBkQmkKICAqIEBtYXhfcG93ZXI6IG1heGltdW0gdHJhbnNtaXNzaW9uIHBvd2VyIChpbiBkQm0pCisgKiBAYmVhY29uX2ZvdW5kOiBoZWxwZXIgdG8gcmVndWxhdG9yeSBjb2RlIHRvIGluZGljYXRlIHdoZW4gYSBiZWFjb24KKyAqCWhhcyBiZWVuIGZvdW5kIG9uIHRoaXMgY2hhbm5lbC4gVXNlIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24oKQorICoJdG8gZW5hYmxlIHRoaXMsIHRoaXMgaXMgaXMgdXNlZnVsIG9ubHkgb24gNSBHSHogYmFuZC4KICAqIEBvcmlnX21hZzogaW50ZXJuYWwgdXNlCiAgKiBAb3JpZ19tcHdyOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtODAsNiArODMsNyBAQAogCXUzMiBmbGFnczsKIAlpbnQgbWF4X2FudGVubmFfZ2FpbjsKIAlpbnQgbWF4X3Bvd2VyOworCWJvb2wgYmVhY29uX2ZvdW5kOwogCXUzMiBvcmlnX2ZsYWdzOwogCWludCBvcmlnX21hZywgb3JpZ19tcHdyOwogfTsKQEAgLTE4MSwxMiArMTg1LDI2IEBACiAgKiBzdHJ1Y3Qgd2lwaHkgLSB3aXJlbGVzcyBoYXJkd2FyZSBkZXNjcmlwdGlvbgogICogQGlkeDogdGhlIHdpcGh5IGluZGV4IGFzc2lnbmVkIHRvIHRoaXMgaXRlbQogICogQGNsYXNzX2RldjogdGhlIGNsYXNzIGRldmljZSByZXByZXNlbnRpbmcgL3N5cy9jbGFzcy9pZWVlODAyMTEvPHdpcGh5LW5hbWU+Ci0gKiBAZndfaGFuZGxlc19yZWd1bGF0b3J5OiB0ZWxscyB1cyB0aGUgZmlybXdhcmUgZm9yIHRoaXMgZGV2aWNlCi0gKiAJaGFzIGl0cyBvd24gcmVndWxhdG9yeSBzb2x1dGlvbiBhbmQgY2Fubm90IGlkZW50aWZ5IHRoZQorICogQGN1c3RvbV9yZWd1bGF0b3J5OiB0ZWxscyB1cyB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZQorICogCWhhcyBpdHMgb3duIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgY2Fubm90IGlkZW50aWZ5IHRoZQogICogCUlTTyAvIElFQyAzMTY2IGFscGhhMiBpdCBiZWxvbmdzIHRvLiBXaGVuIHRoaXMgaXMgZW5hYmxlZAogICogCXdlIHdpbGwgZGlzcmVnYXJkIHRoZSBmaXJzdCByZWd1bGF0b3J5IGhpbnQgKHdoZW4gdGhlCiAgKiAJaW5pdGlhdG9yIGlzICVSRUdET01fU0VUX0JZX0NPUkUpLgorICogQHN0cmljdF9yZWd1bGF0b3J5OiB0ZWxscyB1cyB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZSB3aWxsIGlnbm9yZQorICogCXJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHVudGlsIGl0IGdldHMgaXRzIG93biByZWd1bGF0b3J5IGRvbWFpbgorICogCXZpYSBpdHMgcmVndWxhdG9yeV9oaW50KCkuIEFmdGVyIGl0cyBnZXRzIGl0cyBvd24gcmVndWxhdG9yeSBkb21haW4KKyAqIAlpdCB3aWxsIG9ubHkgYWxsb3cgZnVydGhlciByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB0byBmdXJ0aGVyCisgKiAJZW5oYW5jZSBjb21wbGlhbmNlLiBGb3IgZXhhbXBsZSBpZiBjaGFubmVsIDEzIGFuZCAxNCBhcmUgZGlzYWJsZWQKKyAqIAlieSB0aGlzIHJlZ3VsYXRvcnkgZG9tYWluIG5vIHVzZXIgcmVndWxhdG9yeSBkb21haW4gY2FuIGVuYWJsZSB0aGVzZQorICogCWNoYW5uZWxzIGF0IGEgbGF0ZXIgdGltZS4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgZGV2aWNlcyB3aGljaCBkbyBub3QKKyAqIAloYXZlIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGdhdXJhbnRlZWQgZm9yIGZyZXF1ZW5jaWVzIG9yIHNldHRpbmdzCisgKiAJb3V0c2lkZSBvZiBpdHMgcmVndWxhdG9yeSBkb21haW4uCiAgKiBAcmVnX25vdGlmaWVyOiB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBub3RpZmljYXRpb24gY2FsbGJhY2sKKyAqIEByZWdkOiB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIG9uZSB3YXMgcmVxdWVzdGVkIHZpYQorICogCXRoZSByZWd1bGF0b3J5X2hpbnQoKSBBUEkuIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGRyaXZlcgorICoJb24gdGhlIHJlZ19ub3RpZmllcigpIGlmIGl0IGNob29zZXMgdG8gaWdub3JlIGZ1dHVyZQorICoJcmVndWxhdG9yeSBkb21haW4gY2hhbmdlcyBjYXVzZWQgYnkgb3RoZXIgZHJpdmVycy4KKyAqIEBzaWduYWxfdHlwZTogc2lnbmFsIHR5cGUgcmVwb3J0ZWQgaW4gJnN0cnVjdCBjZmc4MDIxMV9ic3MuCiAgKi8KIHN0cnVjdCB3aXBoeSB7CiAJLyogYXNzaWduIHRoZXNlIGZpZWxkcyBiZWZvcmUgeW91IHJlZ2lzdGVyIHRoZSB3aXBoeSAqLwpAQCAtMTk3LDcgKzIxNSwxMyBAQAogCS8qIFN1cHBvcnRlZCBpbnRlcmZhY2UgbW9kZXMsIE9SIHRvZ2V0aGVyIEJJVChOTDgwMjExX0lGVFlQRV8uLi4pICovCiAJdTE2IGludGVyZmFjZV9tb2RlczsKIAotCWJvb2wgZndfaGFuZGxlc19yZWd1bGF0b3J5OworCWJvb2wgY3VzdG9tX3JlZ3VsYXRvcnk7CisJYm9vbCBzdHJpY3RfcmVndWxhdG9yeTsKKworCWVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGU7CisKKwlpbnQgYnNzX3ByaXZfc2l6ZTsKKwl1OCBtYXhfc2Nhbl9zc2lkczsKIAogCS8qIElmIG11bHRpcGxlIHdpcGh5cyBhcmUgcmVnaXN0ZXJlZCBhbmQgeW91J3JlIGhhbmRlZCBlLmcuCiAJICogYSByZWd1bGFyIG5ldGRldiB3aXRoIGFzc2lnbmVkIGllZWU4MDIxMV9wdHIsIHlvdSB3b24ndApAQCAtMjA5LDEwICsyMzMsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kc1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKIAogCS8qIExldHMgdXMgZ2V0IGJhY2sgdGhlIHdpcGh5IG9uIHRoZSBjYWxsYmFjayAqLwotCWludCAoKnJlZ19ub3RpZmllcikoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KTsKKwlpbnQgKCpyZWdfbm90aWZpZXIpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7CiAKIAkvKiBmaWVsZHMgYmVsb3cgYXJlIHJlYWQtb25seSwgYXNzaWduZWQgYnkgY2ZnODAyMTEgKi8KIAorCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCiAJLyogdGhlIGl0ZW0gaW4gL3N5cy9jbGFzcy9pZWVlODAyMTEvIHBvaW50cyB0byB0aGlzLAogCSAqIHlvdSBuZWVkIHVzZSBzZXRfd2lwaHlfZGV2KCkgKHNlZSBiZWxvdykgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKQEAgLTM2MSw3ICszODgsNyBAQAogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKgogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAotCQkJICAgIHU2NCBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpOworCQkJICAgIHUzMiBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpOwogCiAvKioKICAqIHJlZ3VsYXRvcnlfaGludCAtIGRyaXZlciBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlIGEgcmVndWxhdG9yeSBkb21haW4KQEAgLTM3OCw4ICs0MDUsMTUgQEAKICAqIGRvbWFpbiBzaG91bGQgYmUgaW4gb3IgYnkgcHJvdmlkaW5nIGEgY29tcGxldGVseSBidWlsZCByZWd1bGF0b3J5IGRvbWFpbi4KICAqIElmIHRoZSBkcml2ZXIgcHJvdmlkZXMgYW4gSVNPL0lFQyAzMTY2IGFscGhhMiB1c2Vyc3BhY2Ugd2lsbCBiZSBxdWVyaWVkCiAgKiBmb3IgYSByZWd1bGF0b3J5IGRvbWFpbiBzdHJ1Y3R1cmUgZm9yIHRoZSByZXNwZWN0aXZlIGNvdW50cnkuCisgKgorICogVGhlIHdpcGh5IG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdG8gY2ZnODAyMTEgcHJpb3IgdG8gdGhpcyBjYWxsLgorICogRm9yIGNmZzgwMjExIGRyaXZlcnMgdGhpcyBtZWFucyB5b3UgbXVzdCBmaXJzdCB1c2Ugd2lwaHlfcmVnaXN0ZXIoKSwKKyAqIGZvciBtYWM4MDIxMSBkcml2ZXJzIHlvdSBtdXN0IGZpcnN0IHVzZSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKS4KKyAqCisgKiBEcml2ZXJzIHNob3VsZCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCBpdHMgcG9zc2libGUgeW91IGNhbiBnZXQKKyAqIGFuIC1FTk9NRU0uCiAgKi8KLWV4dGVybiB2b2lkIHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpOworZXh0ZXJuIGludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKTsKIAogLyoqCiAgKiByZWd1bGF0b3J5X2hpbnRfMTFkIC0gaGludHMgYSBjb3VudHJ5IElFIGFzIGEgcmVndWxhdG9yeSBkb21haW4KQEAgLTM5NSw0ICs0MjksNDQgQEAKIGV4dGVybiB2b2lkIHJlZ3VsYXRvcnlfaGludF8xMWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbik7CisvKioKKyAqIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5IC0gYXBwbHkgYSBjdXN0b20gZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2Ugd2FudCB0byBwcm9jZXNzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBvbgorICogQHJlZ2Q6IHRoZSBjdXN0b20gcmVndWxhdG9yeSBkb21haW4gdG8gdXNlIGZvciB0aGlzIHdpcGh5CisgKgorICogRHJpdmVycyBjYW4gc29tZXRpbWVzIGhhdmUgY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWlucyB3aGljaCBkbyBub3QgYXBwbHkKKyAqIHRvIGEgc3BlY2lmaWMgY291bnRyeS4gRHJpdmVycyBjYW4gdXNlIHRoaXMgdG8gYXBwbHkgc3VjaCBjdXN0b20gcmVndWxhdG9yeQorICogZG9tYWlucy4gVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbi4gVGhlCisgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4gd2lsbCBiZSB0cnVzdGVkIGNvbXBsZXRlbHkgYW5kIGFzIHN1Y2ggcHJldmlvdXMKKyAqIGRlZmF1bHQgY2hhbm5lbCBzZXR0aW5ncyB3aWxsIGJlIGRpc3JlZ2FyZGVkLiBJZiBubyBydWxlIGlzIGZvdW5kIGZvciBhCisgKiBjaGFubmVsIG9uIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aGUgY2hhbm5lbCB3aWxsIGJlIGRpc2FibGVkLgorICovCitleHRlcm4gdm9pZCB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSgKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkKTsKKworLyoqCisgKiBmcmVxX3JlZ19pbmZvIC0gZ2V0IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBmcmVxdWVuY3kKKyAqIEB3aXBoeTogdGhlIHdpcGh5IGZvciB3aGljaCB3ZSB3YW50IHRvIHByb2Nlc3MgdGhpcyBydWxlIGZvcgorICogQGNlbnRlcl9mcmVxOiBGcmVxdWVuY3kgaW4gS0h6IGZvciB3aGljaCB3ZSB3YW50IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yCisgKiBAYmFuZHdpZHRoOiB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50IHlvdSBoYXZlIGluIEtIeiwgaWYgeW91IGRvIG5vdCBoYXZlIG9uZQorICogCXlvdSBjYW4gc2V0IHRoaXMgdG8gMC4gSWYgdGhpcyBmcmVxdWVuY3kgaXMgYWxsb3dlZCB3ZSB0aGVuIHNldAorICogCXRoaXMgdmFsdWUgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBiYW5kd2lkdGguCisgKiBAcmVnX3J1bGU6IHRoZSByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggd2UgaGF2ZSBmb3IgdGhpcyBmcmVxdWVuY3kKKyAqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBzcGVjaWZpYyBmcmVxdWVuY3kgb24KKyAqIGEgZ2l2ZW4gd2lyZWxlc3MgZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBhIHNwZWNpZmljIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBpdCB3YW50cyB0byBmb2xsb3cgd2UgcmVzcGVjdCB0aGF0IHVubGVzcyBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqIGFuZCBwcm9jZXNzZWQgYWxyZWFkeS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBhIHZhbGlkIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCBkb2VzCisgKiBhcHBseSB0byB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgb3RoZXJ3aXNlIGl0IHJldHVybnMgbm9uLXplcm8uIEl0IHdpbGwKKyAqIGFsc28gcmV0dXJuIC1FUkFOR0UgaWYgd2UgZGV0ZXJtaW5lIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBkb2VzIG5vdCBldmVuIGhhdmUKKyAqIGEgcmVndWxhdG9yeSBydWxlIGZvciBhIGZyZXF1ZW5jeSByYW5nZSBpbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLiBTZWUKKyAqIGZyZXFfaW5fcnVsZV9iYW5kKCkgZm9yIG91ciBjdXJyZW50IGRlZmluaXRpb24gb2YgYSBiYW5kIC0tIHRoaXMgaXMgcHVyZWx5CisgKiBzdWJqZWN0aXZlIGFuZCByaWdodCBub3cgaXRzIDgwMi4xMSBzcGVjaWZpYy4KKyAqLworZXh0ZXJuIGludCBmcmVxX3JlZ19pbmZvKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKTsKKwogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9jbS5oIGIvaW5jbHVkZS9yZG1hL2liX2NtLmgKaW5kZXggZWM3YzZkOS4uOTM4ODU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX2NtLmgKQEAgLTMxNCwxMiArMzE0LDEyIEBACiAgKi8KIHZvaWQgaWJfZGVzdHJveV9jbV9pZChzdHJ1Y3QgaWJfY21faWQgKmNtX2lkKTsKIAotI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRjAwMDAwMDAwMDAwMDAwVUxMKQotI2RlZmluZSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCBfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDIwMDAwMDAwMDAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSUQJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCi0jZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGRkZGRkZGRkYwMDAwMDBVTEwpCi0jZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lECV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAwMDEwMDAwVUxMKQotI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQorI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCWNwdV90b19iZTY0KDB4RkYwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQJY3B1X3RvX2JlNjQoMHgwMjAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGMDAwMDAwVUxMKQorI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAwMDAwMDAwMDAwMTAwMDBVTEwpCisjZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lEX01BU0sJY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQogCiBzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhIHsKIAl1OCAgZGF0YVtJQl9DTV9DT01QQVJFX1NJWkVdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX21hZC5oIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCmluZGV4IDVmNmM0MGYuLmQzYjk0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZQlJQl9NR01UX1JNUFBfU1RBVFVTX0FCT1JUX01BWAkJMTI3CiAKICNkZWZpbmUgSUJfUVAwCQkwCi0jZGVmaW5lIElCX1FQMQkJX19jb25zdGFudF9odG9ubCgxKQorI2RlZmluZSBJQl9RUDEJCWNwdV90b19iZTMyKDEpCiAjZGVmaW5lIElCX1FQMV9RS0VZCTB4ODAwMTAwMDAKICNkZWZpbmUgSUJfUVBfU0VUX1FLRVkJMHg4MDAwMDAwMAogCkBAIC0yOTAsNyArMjkwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGliX3NldF9ybXBwX2ZsYWdzKHN0cnVjdCBpYl9ybXBwX2hkciAqcm1wcF9oZHIsIHU4IGZsYWdzKQogewotCXJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzID0gKHJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzICYgMHhGMSkgfAorCXJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzID0gKHJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzICYgMHhGOCkgfAogCQkJCSAgICAgKGZsYWdzICYgMHg3KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oIGIvaW5jbHVkZS9yZG1hL2liX3NtaS5oCmluZGV4IGFhY2EwODcuLjk4YjkwODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zbWkuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKQEAgLTYzLDI1ICs2MywyNSBAQAogCXU4CXJldHVybl9wYXRoW0lCX1NNUF9NQVhfUEFUSF9IT1BTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1NNUF9ESVJFQ1RJT04JCQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKKyNkZWZpbmUgSUJfU01QX0RJUkVDVElPTgkJCWNwdV90b19iZTE2KDB4ODAwMCkKIAogLyogU3VibmV0IG1hbmFnZW1lbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBJQl9TTVBfQVRUUl9OT1RJQ0UJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9ERVNDCQkJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1NNUF9BVFRSX05PREVfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBJQl9TTVBfQVRUUl9TV0lUQ0hfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQotI2RlZmluZSBJQl9TTVBfQVRUUl9HVUlEX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUE9SVF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTUpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1BLRVlfVEFCTEUJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNikKLSNkZWZpbmUgSUJfU01QX0FUVFJfU0xfVE9fVkxfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE3KQotI2RlZmluZSBJQl9TTVBfQVRUUl9WTF9BUkJfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE4KQotI2RlZmluZSBJQl9TTVBfQVRUUl9MSU5FQVJfRk9SV0FSRF9UQUJMRQlfX2NvbnN0YW50X2h0b25zKDB4MDAxOSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUkFORE9NX0ZPUldBUkRfVEFCTEUJX19jb25zdGFudF9odG9ucygweDAwMUEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX01DQVNUX0ZPUldBUkRfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFCKQotI2RlZmluZSBJQl9TTVBfQVRUUl9TTV9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMjApCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9ESUFHCQkJX19jb25zdGFudF9odG9ucygweDAwMzApCi0jZGVmaW5lIElCX1NNUF9BVFRSX0xFRF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMzEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9NQVNLCQkJX19jb25zdGFudF9odG9ucygweEZGMDApCisjZGVmaW5lIElCX1NNUF9BVFRSX05PVElDRQkJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9ERVNDCQkJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTEpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NXSVRDSF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBJQl9TTVBfQVRUUl9HVUlEX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTQpCisjZGVmaW5lIElCX1NNUF9BVFRSX1BPUlRfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxNSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUEtFWV9UQUJMRQkJCWNwdV90b19iZTE2KDB4MDAxNikKKyNkZWZpbmUgSUJfU01QX0FUVFJfU0xfVE9fVkxfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxNykKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkxfQVJCX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMTgpCisjZGVmaW5lIElCX1NNUF9BVFRSX0xJTkVBUl9GT1JXQVJEX1RBQkxFCWNwdV90b19iZTE2KDB4MDAxOSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUkFORE9NX0ZPUldBUkRfVEFCTEUJY3B1X3RvX2JlMTYoMHgwMDFBKQorI2RlZmluZSBJQl9TTVBfQVRUUl9NQ0FTVF9GT1JXQVJEX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMUIpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NNX0lORk8JCQljcHVfdG9fYmUxNigweDAwMjApCisjZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9ESUFHCQkJY3B1X3RvX2JlMTYoMHgwMDMwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9MRURfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAzMSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX01BU0sJCQljcHVfdG9fYmUxNigweEZGMDApCiAKIHN0cnVjdCBpYl9wb3J0X2luZm8gewogCV9fYmU2NCBta2V5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCA5MzZlMzMzLi5jMTc5MzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMzg4LDcgKzM4OCw3IEBACiAJSUJfTVVMVElDQVNUX1FQTiA9IDB4ZmZmZmZmCiB9OwogCi0jZGVmaW5lIElCX0xJRF9QRVJNSVNTSVZFCV9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKQorI2RlZmluZSBJQl9MSURfUEVSTUlTU0lWRQljcHVfdG9fYmUxNigweEZGRkYpCiAKIGVudW0gaWJfYWhfZmxhZ3MgewogCUlCX0FIX0dSSAk9IDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWQxODE2YS5oIGIvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKaW5kZXggYjNhYTYyZS4uZDAxMDg1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKQEAgLTE2OSw1ICsxNjksNyBAQAogCiBleHRlcm4gaW50IHNuZF9hZDE4MTZhX3BjbShzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CiBleHRlcm4gaW50IHNuZF9hZDE4MTZhX21peGVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCk7CitleHRlcm4gaW50IHNuZF9hZDE4MTZhX3RpbWVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwKKwkJCSAgICAgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcik7CiAKICNlbmRpZgkvKiBfX1NPVU5EX0FEMTgxNkFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hc291bmQuaCBiL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKaW5kZXggMWMwMmVkMS4uNmFkZDgwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hc291bmQuaAorKysgYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2lmbmRlZiBfX1NPVU5EX0FTT1VORF9ICiAjZGVmaW5lIF9fU09VTkRfQVNPVU5EX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKQEAgLTEyNiwxMiArMTI3LDEwIEBACiAJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YTsJLyogVzogZHJpdmVyLXNwZWNpZmljIGRhdGEgKi8KIH07CiAKLWVudW0gewotCVNORFJWX0hXREVQX0lPQ1RMX1BWRVJTSU9OID0gX0lPUiAoJ0gnLCAweDAwLCBpbnQpLAotCVNORFJWX0hXREVQX0lPQ1RMX0lORk8gPSBfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbyksCi0JU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUyA9IF9JT1IoJ0gnLCAweDAyLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMpLAotCVNORFJWX0hXREVQX0lPQ1RMX0RTUF9MT0FEICAgPSBfSU9XKCdIJywgMHgwMywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UpCi19OworI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9QVkVSU0lPTglfSU9SICgnSCcsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfSU5GTwkJX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0RTUF9TVEFUVVMJX0lPUignSCcsIDB4MDIsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cykKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQJX0lPVygnSCcsIDB4MDMsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzQyLDcgKzM0MSw3IEBACiAjZGVmaW5lIFNORFJWX01BU0tfTUFYCTI1NgogCiBzdHJ1Y3Qgc25kX21hc2sgewotCXVfaW50MzJfdCBiaXRzWyhTTkRSVl9NQVNLX01BWCszMSkvMzJdOworCV9fdTMyIGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07CiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgewpAQCAtMzg1LDcgKzM4NCw3IEBACiAKIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyB7CiAJdW5zaWduZWQgaW50IGNoYW5uZWw7Ci0Jb2ZmX3Qgb2Zmc2V0OwkJCS8qIG1tYXAgb2Zmc2V0ICovCisJX19rZXJuZWxfb2ZmX3Qgb2Zmc2V0OwkJLyogbW1hcCBvZmZzZXQgKi8KIAl1bnNpZ25lZCBpbnQgZmlyc3Q7CQkvKiBvZmZzZXQgdG8gZmlyc3Qgc2FtcGxlIGluIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3RlcDsJCS8qIHNhbXBsZXMgZGlzdGFuY2UgaW4gYml0cyAqLwogfTsKQEAgLTQ1MSw0MCArNDUwLDM1IEBACiAJU05EUlZfUENNX1RTVEFNUF9UWVBFX0xBU1QgPSBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTU9OT1RPTklDLAogfTsKIAotZW51bSB7Ci0JU05EUlZfUENNX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignQScsIDB4MDAsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX0lORk8gPSBfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZF9wY21faW5mbyksCi0JU05EUlZfUENNX0lPQ1RMX1RTVEFNUCA9IF9JT1coJ0EnLCAweDAyLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9UVFNUQU1QID0gX0lPVygnQScsIDB4MDMsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORSA9IF9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKSwKLQlTTkRSVl9QQ01fSU9DVExfSFdfUEFSQU1TID0gX0lPV1IoJ0EnLCAweDExLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpLAotCVNORFJWX1BDTV9JT0NUTF9IV19GUkVFID0gX0lPKCdBJywgMHgxMiksCi0JU05EUlZfUENNX0lPQ1RMX1NXX1BBUkFNUyA9IF9JT1dSKCdBJywgMHgxMywgc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zKSwKLQlTTkRSVl9QQ01fSU9DVExfU1RBVFVTID0gX0lPUignQScsIDB4MjAsIHN0cnVjdCBzbmRfcGNtX3N0YXR1cyksCi0JU05EUlZfUENNX0lPQ1RMX0RFTEFZID0gX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KSwKLQlTTkRSVl9QQ01fSU9DVExfSFdTWU5DID0gX0lPKCdBJywgMHgyMiksCi0JU05EUlZfUENNX0lPQ1RMX1NZTkNfUFRSID0gX0lPV1IoJ0EnLCAweDIzLCBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0ciksCi0JU05EUlZfUENNX0lPQ1RMX0NIQU5ORUxfSU5GTyA9IF9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8pLAotCVNORFJWX1BDTV9JT0NUTF9QUkVQQVJFID0gX0lPKCdBJywgMHg0MCksCi0JU05EUlZfUENNX0lPQ1RMX1JFU0VUID0gX0lPKCdBJywgMHg0MSksCi0JU05EUlZfUENNX0lPQ1RMX1NUQVJUID0gX0lPKCdBJywgMHg0MiksCi0JU05EUlZfUENNX0lPQ1RMX0RST1AgPSBfSU8oJ0EnLCAweDQzKSwKLQlTTkRSVl9QQ01fSU9DVExfRFJBSU4gPSBfSU8oJ0EnLCAweDQ0KSwKLQlTTkRSVl9QQ01fSU9DVExfUEFVU0UgPSBfSU9XKCdBJywgMHg0NSwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfUkVXSU5EID0gX0lPVygnQScsIDB4NDYsIHNuZF9wY21fdWZyYW1lc190KSwKLQlTTkRSVl9QQ01fSU9DVExfUkVTVU1FID0gX0lPKCdBJywgMHg0NyksCi0JU05EUlZfUENNX0lPQ1RMX1hSVU4gPSBfSU8oJ0EnLCAweDQ4KSwKLQlTTkRSVl9QQ01fSU9DVExfRk9SV0FSRCA9IF9JT1coJ0EnLCAweDQ5LCBzbmRfcGNtX3VmcmFtZXNfdCksCi0JU05EUlZfUENNX0lPQ1RMX1dSSVRFSV9GUkFNRVMgPSBfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZF94ZmVyaSksCi0JU05EUlZfUENNX0lPQ1RMX1JFQURJX0ZSQU1FUyA9IF9JT1IoJ0EnLCAweDUxLCBzdHJ1Y3Qgc25kX3hmZXJpKSwKLQlTTkRSVl9QQ01fSU9DVExfV1JJVEVOX0ZSQU1FUyA9IF9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKSwKLQlTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTID0gX0lPUignQScsIDB4NTMsIHN0cnVjdCBzbmRfeGZlcm4pLAotCVNORFJWX1BDTV9JT0NUTF9MSU5LID0gX0lPVygnQScsIDB4NjAsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX1VOTElOSyA9IF9JTygnQScsIDB4NjEpLAotfTsKLQotLyogVHJpY2sgdG8gbWFrZSBhbHNhLWxpYi9hY2luY2x1ZGUubTQgaGFwcHkgKi8KLSNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFV0lORCBTTkRSVl9QQ01fSU9DVExfUkVXSU5ECisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTglfSU9SKCdBJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSU5GTwkJX0lPUignQScsIDB4MDEsIHN0cnVjdCBzbmRfcGNtX2luZm8pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9UU1RBTVAJCV9JT1coJ0EnLCAweDAyLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9UVFNUQU1QCQlfSU9XKCdBJywgMHgwMywgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUkVGSU5FCV9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUEFSQU1TCV9JT1dSKCdBJywgMHgxMSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfRlJFRQkJX0lPKCdBJywgMHgxMikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NXX1BBUkFNUwlfSU9XUignQScsIDB4MTMsIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVRVUwkJX0lPUignQScsIDB4MjAsIHN0cnVjdCBzbmRfcGNtX3N0YXR1cykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RFTEFZCQlfSU9SKCdBJywgMHgyMSwgc25kX3BjbV9zZnJhbWVzX3QpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV1NZTkMJCV9JTygnQScsIDB4MjIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TWU5DX1BUUglfSU9XUignQScsIDB4MjMsIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfQ0hBTk5FTF9JTkZPCV9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QUkVQQVJFCQlfSU8oJ0EnLCAweDQwKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVTRVQJCV9JTygnQScsIDB4NDEpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TVEFSVAkJX0lPKCdBJywgMHg0MikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RST1AJCV9JTygnQScsIDB4NDMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUkFJTgkJX0lPKCdBJywgMHg0NCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BBVVNFCQlfSU9XKCdBJywgMHg0NSwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVXSU5ECQlfSU9XKCdBJywgMHg0Niwgc25kX3BjbV91ZnJhbWVzX3QpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNVTUUJCV9JTygnQScsIDB4NDcpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9YUlVOCQlfSU8oJ0EnLCAweDQ4KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRk9SV0FSRAkJX0lPVygnQScsIDB4NDksIHNuZF9wY21fdWZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfV1JJVEVJX0ZSQU1FUwlfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZF94ZmVyaSkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQURJX0ZSQU1FUwlfSU9SKCdBJywgMHg1MSwgc3RydWN0IHNuZF94ZmVyaSkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1dSSVRFTl9GUkFNRVMJX0lPVygnQScsIDB4NTIsIHN0cnVjdCBzbmRfeGZlcm4pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFETl9GUkFNRVMJX0lPUignQScsIDB4NTMsIHN0cnVjdCBzbmRfeGZlcm4pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9MSU5LCQlfSU9XKCdBJywgMHg2MCwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVU5MSU5LCQlfSU8oJ0EnLCAweDYxKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNTM4LDE0ICs1MzIsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KIH07CiAKLWVudW0gewotCVNORFJWX1JBV01JRElfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdXJywgMHgwMCwgaW50KSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8gPSBfSU9SKCdXJywgMHgwMSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pLAotCVNORFJWX1JBV01JRElfSU9DVExfUEFSQU1TID0gX0lPV1IoJ1cnLCAweDEwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zKSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUyA9IF9JT1dSKCdXJywgMHgyMCwgc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cyksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9EUk9QID0gX0lPVygnVycsIDB4MzAsIGludCksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTiA9IF9JT1coJ1cnLCAweDMxLCBpbnQpLAotfTsKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9QVkVSU0lPTglfSU9SKCdXJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8JX0lPUignVycsIDB4MDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BBUkFNUwlfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfU1RBVFVTCV9JT1dSKCdXJywgMHgyMCwgc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUk9QCV9JT1coJ1cnLCAweDMwLCBpbnQpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJBSU4JX0lPVygnVycsIDB4MzEsIGludCkKIAogLyoKICAqICBUaW1lciBzZWN0aW9uIC0gL2Rldi9zbmQvdGltZXIKQEAgLTY1NCwyMyArNjQ2LDIxIEBACiAJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9USU1FUl9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1QnLCAweDAwLCBpbnQpLAotCVNORFJWX1RJTUVSX0lPQ1RMX05FWFRfREVWSUNFID0gX0lPV1IoJ1QnLCAweDAxLCBzdHJ1Y3Qgc25kX3RpbWVyX2lkKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9UUkVBRCA9IF9JT1coJ1QnLCAweDAyLCBpbnQpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPID0gX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TID0gX0lPVygnVCcsIDB4MDQsIHN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcyksCi0JU05EUlZfVElNRVJfSU9DVExfR1NUQVRVUyA9IF9JT1dSKCdUJywgMHgwNSwgc3RydWN0IHNuZF90aW1lcl9nc3RhdHVzKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9TRUxFQ1QgPSBfSU9XKCdUJywgMHgxMCwgc3RydWN0IHNuZF90aW1lcl9zZWxlY3QpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0lORk8gPSBfSU9SKCdUJywgMHgxMSwgc3RydWN0IHNuZF90aW1lcl9pbmZvKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9QQVJBTVMgPSBfSU9XKCdUJywgMHgxMiwgc3RydWN0IHNuZF90aW1lcl9wYXJhbXMpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1NUQVRVUyA9IF9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cyksCi0JLyogVGhlIGZvbGxvd2luZyBmb3VyIGlvY3RscyBhcmUgY2hhbmdlZCBzaW5jZSAxLjAuOSBkdWUgdG8gY29uZmxpY3Rpb24gKi8KLQlTTkRSVl9USU1FUl9JT0NUTF9TVEFSVCA9IF9JTygnVCcsIDB4YTApLAotCVNORFJWX1RJTUVSX0lPQ1RMX1NUT1AgPSBfSU8oJ1QnLCAweGExKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9DT05USU5VRSA9IF9JTygnVCcsIDB4YTIpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1BBVVNFID0gX0lPKCdUJywgMHhhMyksCi19OworI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QVkVSU0lPTglfSU9SKCdUJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9ORVhUX0RFVklDRQlfSU9XUignVCcsIDB4MDEsIHN0cnVjdCBzbmRfdGltZXJfaWQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1RSRUFECQlfSU9XKCdUJywgMHgwMiwgaW50KQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HSU5GTwkJX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TCV9JT1coJ1QnLCAweDA0LCBzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dTVEFUVVMJX0lPV1IoJ1QnLCAweDA1LCBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NFTEVDVAlfSU9XKCdUJywgMHgxMCwgc3RydWN0IHNuZF90aW1lcl9zZWxlY3QpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0lORk8JCV9JT1IoJ1QnLCAweDExLCBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8pCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BBUkFNUwlfSU9XKCdUJywgMHgxMiwgc3RydWN0IHNuZF90aW1lcl9wYXJhbXMpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVRVUwlfSU9SKCdUJywgMHgxNCwgc3RydWN0IHNuZF90aW1lcl9zdGF0dXMpCisvKiBUaGUgZm9sbG93aW5nIGZvdXIgaW9jdGxzIGFyZSBjaGFuZ2VkIHNpbmNlIDEuMC45IGR1ZSB0byBjb25mbGljdGlvbiAqLworI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVEFSVAkJX0lPKCdUJywgMHhhMCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RPUAkJX0lPKCdUJywgMHhhMSkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUJX0lPKCdUJywgMHhhMikKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFVU0UJCV9JTygnVCcsIDB4YTMpCiAKIHN0cnVjdCBzbmRfdGltZXJfcmVhZCB7CiAJdW5zaWduZWQgaW50IHJlc29sdXRpb247CkBAIC03ODksNyArNzc5LDcgQEAKIAlzbmRfY3RsX2VsZW1fdHlwZV90IHR5cGU7CS8qIFI6IHZhbHVlIHR5cGUgLSBTTkRSVl9DVExfRUxFTV9UWVBFXyogKi8KIAl1bnNpZ25lZCBpbnQgYWNjZXNzOwkJLyogUjogdmFsdWUgYWNjZXNzIChiaXRtYXNrKSAtIFNORFJWX0NUTF9FTEVNX0FDQ0VTU18qICovCiAJdW5zaWduZWQgaW50IGNvdW50OwkJLyogY291bnQgb2YgdmFsdWVzICovCi0JcGlkX3Qgb3duZXI7CQkJLyogb3duZXIncyBQSUQgb2YgdGhpcyBjb250cm9sICovCisJX19rZXJuZWxfcGlkX3Qgb3duZXI7CQkvKiBvd25lcidzIFBJRCBvZiB0aGlzIGNvbnRyb2wgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlsb25nIG1pbjsJCS8qIFI6IG1pbmltdW0gdmFsdWUgKi8KQEAgLTg0NywzMyArODM3LDMxIEBACiAgICAgICAgIHVuc2lnbmVkIGludCB0bHZbMF07CS8qIGZpcnN0IFRMViAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfQ1RMX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVScsIDB4MDAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTyA9IF9JT1IoJ1UnLCAweDAxLCBzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0xJU1QgPSBfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fSU5GTyA9IF9JT1dSKCdVJywgMHgxMSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9SRUFEID0gX0lPV1IoJ1UnLCAweDEyLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURSA9IF9JT1dSKCdVJywgMHgxMywgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTE9DSyA9IF9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sgPSBfSU9XKCdVJywgMHgxNSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCksCi0JU05EUlZfQ1RMX0lPQ1RMX1NVQlNDUklCRV9FVkVOVFMgPSBfSU9XUignVScsIDB4MTYsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQUREID0gX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFUExBQ0UgPSBfSU9XUignVScsIDB4MTgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVNT1ZFID0gX0lPV1IoJ1UnLCAweDE5LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKSwKLQlTTkRSVl9DVExfSU9DVExfVExWX1JFQUQgPSBfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdiksCi0JU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURSA9IF9JT1dSKCdVJywgMHgxYiwgc3RydWN0IHNuZF9jdGxfdGx2KSwKLQlTTkRSVl9DVExfSU9DVExfVExWX0NPTU1BTkQgPSBfSU9XUignVScsIDB4MWMsIHN0cnVjdCBzbmRfY3RsX3RsdiksCi0JU05EUlZfQ1RMX0lPQ1RMX0hXREVQX05FWFRfREVWSUNFID0gX0lPV1IoJ1UnLCAweDIwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9IV0RFUF9JTkZPID0gX0lPUignVScsIDB4MjEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX1BDTV9ORVhUX0RFVklDRSA9IF9JT1IoJ1UnLCAweDMwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9QQ01fSU5GTyA9IF9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFID0gX0lPVygnVScsIDB4MzIsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfTkVYVF9ERVZJQ0UgPSBfSU9XUignVScsIDB4NDAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTyA9IF9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9SQVdNSURJX1BSRUZFUl9TVUJERVZJQ0UgPSBfSU9XKCdVJywgMHg0MiwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUE9XRVIgPSBfSU9XUignVScsIDB4ZDAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1BPV0VSX1NUQVRFID0gX0lPUignVScsIDB4ZDEsIGludCksCi19OworI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUFZFUlNJT04JX0lPUignVScsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTwlfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MSVNUCV9JT1dSKCdVJywgMHgxMCwgc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPCV9JT1dSKCdVJywgMHgxMSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRUFECV9JT1dSKCdVJywgMHgxMiwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fV1JJVEUJX0lPV1IoJ1UnLCAweDEzLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLCV9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sJX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9TVUJTQ1JJQkVfRVZFTlRTIF9JT1dSKCdVJywgMHgxNiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9BREQJX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFUExBQ0UJX0lPV1IoJ1UnLCAweDE4LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFTU9WRQlfSU9XUignVScsIDB4MTksIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRAlfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURQlfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9DT01NQU5ECV9JT1dSKCdVJywgMHgxYywgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgX0lPV1IoJ1UnLCAweDIwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9IV0RFUF9JTkZPCV9JT1IoJ1UnLCAweDIxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fTkVYVF9ERVZJQ0UJX0lPUignVScsIDB4MzAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPCV9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDMyLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHg0MCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9JTkZPCV9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX1BSRUZFUl9TVUJERVZJQ0UgX0lPVygnVScsIDB4NDIsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BPV0VSCQlfSU9XUignVScsIDB4ZDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BPV0VSX1NUQVRFCV9JT1IoJ1UnLCAweGQxLCBpbnQpCiAKIC8qCiAgKiAgUmVhZCBpbnRlcmZhY2UuCkBAIC05MTksMTggKzkwNyw0IEBACiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9QQ01fU1RSRUFNCQkiUENNIFN0cmVhbSIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4KGV4cGwsZGlyZWN0aW9uLHdoYXQpCSJJRUM5NTggIiBleHBsIFNORFJWX0NUTF9OQU1FXyMjZGlyZWN0aW9uIFNORFJWX0NUTF9OQU1FX0lFQzk1OF8jI3doYXQKIAotLyoKLSAqCi0gKi8KLQotc3RydWN0IHNuZF94ZmVydiB7Ci0JY29uc3Qgc3RydWN0IGlvdmVjICp2ZWN0b3I7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKLX07Ci0KLWVudW0gewotCVNORFJWX0lPQ1RMX1JFQURWID0gX0lPVygnSycsIDB4MDAsIHN0cnVjdCBzbmRfeGZlcnYpLAotCVNORFJWX0lPQ1RMX1dSSVRFViA9IF9JT1coJ0snLCAweDAxLCBzdHJ1Y3Qgc25kX3hmZXJ2KSwKLX07Ci0KICNlbmRpZiAvKiBfX1NPVU5EX0FTT1VORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2F0bWVsLWFiZGFjLmggYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFiZGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmZjZhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWJkYWMuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUJEQUNfSAorI2RlZmluZSBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUJEQUNfSAorCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisvKioKKyAqIHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSAtIGJvYXJkIHNwZWNpZmljIEFCREFDIGNvbmZpZ3VyYXRpb24KKyAqIEBkd3M6IERNQSBzbGF2ZSBpbnRlcmZhY2UgdG8gdXNlIGZvciBzb3VuZCBwbGF5YmFjay4KKyAqLworc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhIHsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCWR3czsKK307CisKKyNlbmRpZiAvKiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUJEQUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYzk3Yy5oIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYzk3Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWFiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFjOTdjLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FDOTdDX0gKKyNkZWZpbmUgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FDOTdDX0gKKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworI2RlZmluZSBBQzk3Q19DQVBUVVJFCTB4MDEKKyNkZWZpbmUgQUM5N0NfUExBWUJBQ0sJMHgwMgorI2RlZmluZSBBQzk3Q19CT1RICShBQzk3Q19DQVBUVVJFIHwgQUM5N0NfUExBWUJBQ0spCisKKy8qKgorICogc3RydWN0IGF0bWVsX2FjOTdjX3BkYXRhIC0gYm9hcmQgc3BlY2lmaWMgQUM5N0MgY29uZmlndXJhdGlvbgorICogQHJ4X2R3czogRE1BIHNsYXZlIGludGVyZmFjZSB0byB1c2UgZm9yIHNvdW5kIGNhcHR1cmUuCisgKiBAdHhfZHdzOiBETUEgc2xhdmUgaW50ZXJmYWNlIHRvIHVzZSBmb3Igc291bmQgcGxheWJhY2suCisgKiBAcmVzZXRfcGluOiBHUElPIHBpbiB3aXJlZCB0byB0aGUgcmVzZXQgaW5wdXQgb24gdGhlIGV4dGVybmFsIEFDOTcgY29kZWMsCisgKiAgICAgICAgICAgICBvcHRpb25hbCB0byB1c2UsIHNldCB0byAtRU5PREVWIGlmIG5vdCBpbiB1c2UuIEFDOTcgbGF5ZXIgd2lsbAorICogICAgICAgICAgICAgdHJ5IHRvIGRvIGEgc29mdHdhcmUgcmVzZXQgb2YgdGhlIGV4dGVybmFsIGNvZGVjIGFueXdheS4KKyAqIEBmbGFnczogRmxhZ3MgZm9yIHdoaWNoIGRpcmVjdGlvbnMgc2hvdWxkIGJlIGVuYWJsZWQuCisgKgorICogSWYgdGhlIHVzZXIgZG8gbm90IHdhbnQgdG8gdXNlIGEgRE1BIGNoYW5uZWwgZm9yIHBsYXliYWNrIG9yIGNhcHR1cmUsIGkuZS4KKyAqIG9ubHkgb25lIGZlYXR1cmUgaXMgcmVxdWlyZWQgb24gdGhlIGJvYXJkLiBUaGUgc2xhdmUgZm9yIHBsYXliYWNrIG9yIGNhcHR1cmUKKyAqIGNhbiBiZSBzZXQgdG8gTlVMTC4gVGhlIEFDOTdDIGRyaXZlciB3aWxsIHRha2UgdXNlIG9mIHRoaXMgd2hlbiBzZXR0aW5nIHVwCisgKiB0aGUgc291bmQgc3RyZWFtcy4KKyAqLworc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBkd19kbWFfc2xhdmUJcnhfZHdzOworCXN0cnVjdCBkd19kbWFfc2xhdmUJdHhfZHdzOworCXVuc2lnbmVkIGludCAJCWZsYWdzOworCWludAkJCXJlc2V0X3BpbjsKK307CisKKyNlbmRpZiAvKiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUM5N0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb250cm9sLmggYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAppbmRleCA0NzIxYjRiLi5lZjk2ZjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaApAQCAtMTcxLDYgKzE3MSw1NCBAQAogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdik7Ci1pbnQgc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSk7Ci0JCSAgICAgIAoraW50IF9zbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKy8qIG9wdGlvbmFsIGZsYWdzIGZvciBzbGF2ZSAqLworI2RlZmluZSBTTkRfQ1RMX1NMQVZFX05FRURfVVBEQVRFCSgxIDw8IDApCisKKy8qKgorICogc25kX2N0bF9hZGRfc2xhdmUgLSBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wKKyAqIEBtYXN0ZXI6IHZtYXN0ZXIgZWxlbWVudAorICogQHNsYXZlOiBzbGF2ZSBlbGVtZW50IHRvIGFkZAorICoKKyAqIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFzdGVyIGVsZW1lbnQgY3JlYXRlZCB2aWEKKyAqIHNuZF9jdGxfY3JlYXRlX3ZpcnR1YWxfbWFzdGVyKCkgYmVmb3JlaGFuZC4KKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqCisgKiBBbGwgc2xhdmVzIG11c3QgYmUgdGhlIHNhbWUgdHlwZSAocmV0dXJuaW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uCisgKiB2aWEgaW5mbyBjYWxsYmFjaykuICBUaGUgZnVjbnRpb24gZG9lc24ndCBjaGVjayBpdCwgc28gaXQncyB5b3VyCisgKiByZXNwb25zaWJpbGl0eS4KKyAqCisgKiBBbHNvLCBzb21lIGFkZGl0aW9uYWwgbGltaXRhdGlvbnM6CisgKiBhdCBtb3N0IHR3byBjaGFubmVscywKKyAqIGxvZ2FyaXRobWljIHZvbHVtZSBjb250cm9sIChkQiBsZXZlbCkgdGh1cyBubyBsaW5lYXIgdm9sdW1lLAorICogbWFzdGVyIGNhbiBvbmx5IGF0dGVudWF0ZSB0aGUgdm9sdW1lIHdpdGhvdXQgZ2FpbgorICovCitzdGF0aWMgaW5saW5lIGludAorc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK3sKKwlyZXR1cm4gX3NuZF9jdGxfYWRkX3NsYXZlKG1hc3Rlciwgc2xhdmUsIDApOworfQorCisvKioKKyAqIHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkIC0gQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sCisgKiBAbWFzdGVyOiB2bWFzdGVyIGVsZW1lbnQKKyAqIEBzbGF2ZTogc2xhdmUgZWxlbWVudCB0byBhZGQKKyAqCisgKiBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wgdG8gdGhlIGdpdmVuIG1hc3Rlci4KKyAqIFVubGlrZSBzbmRfY3RsX2FkZF9zbGF2ZSgpLCB0aGUgZWxlbWVudCBhZGRlZCB2aWEgdGhpcyBmdW5jdGlvbgorICogaXMgc3VwcG9zZWQgdG8gaGF2ZSB2b2xhdGlsZSB2YWx1ZXMsIGFuZCBnZXQgY2FsbGJhY2sgaXMgY2FsbGVkCisgKiBhdCBlYWNoIHRpbWUgcXVyaWVkIGZyb20gdGhlIG1hc3Rlci4KKyAqCisgKiBXaGVuIHRoZSBjb250cm9sIHBlZWtzIHRoZSBoYXJkd2FyZSB2YWx1ZXMgZGlyZWN0bHkgYW5kIHRoZSB2YWx1ZQorICogY2FuIGJlIGNoYW5nZWQgYnkgb3RoZXIgbWVhbnMgdGhhbiB0aGUgcHV0IGNhbGxiYWNrIG9mIHRoZSBlbGVtZW50LAorICogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB0byBrZWVwIHRoZSB2YWx1ZSBhbHdheXMgdXAtdG8tZGF0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3RlciwKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKQoreworCXJldHVybiBfc25kX2N0bF9hZGRfc2xhdmUobWFzdGVyLCBzbGF2ZSwgU05EX0NUTF9TTEFWRV9ORUVEX1VQREFURSk7Cit9CisKICNlbmRpZgkvKiBfX1NPVU5EX0NPTlRST0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL2NvcmUuaAppbmRleCBmNjMyNDg0Li4zZGVhNzk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvcmUuaApAQCAtOTcsOSArOTcsOSBAQAogCiBzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSB7CiAJc3RydWN0IGZpbGUgKmZpbGU7Ci0Jc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm5leHQ7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZGlzY29ubmVjdGVkX2Zfb3A7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzaHV0ZG93bl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgc2h1dGRvd25fbGlzdDsJLyogc3RpbGwgbmVlZCB0byBzaHV0ZG93biAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbGluayBvZiBtb25pdG9yIGZpbGVzICovCiB9OwogCiAvKiBtYWluIHN0cnVjdHVyZSBmb3Igc291bmRjYXJkICovCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfaWQ7CS8qIHRoZSBjYXJkIGlkICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3RfbGluazsJLyogbnVtYmVyIGxpbmsgdG8gcmVhbCBpZCAqLwogCi0Jc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKmZpbGVzOyAvKiBhbGwgZmlsZXMgYXNzb2NpYXRlZCB0byB0aGlzIGNhcmQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVzX2xpc3Q7CS8qIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoaXMgY2FyZCAqLwogCXN0cnVjdCBzbmRfc2h1dGRvd25fZl9vcHMgKnNfZl9vcHM7IC8qIGZpbGUgb3BlcmF0aW9ucyBpbiB0aGUgc2h1dGRvd24KIAkJCQkJCQkJc3RhdGUgKi8KIAlzcGlubG9ja190IGZpbGVzX2xvY2s7CQkvKiBsb2NrIHRoZSBmaWxlcyBmb3IgdGhpcyBjYXJkICovCkBAIC0yOTYsOCArMjk2LDIwIEBACiBleHRlcm4gaW50ICgqc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGNtZCk7CiAjZW5kaWYKIAoraW50IHNuZF9jYXJkX2NyZWF0ZShpbnQgaWR4LCBjb25zdCBjaGFyICppZCwKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUsCisJCSAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldCk7CisKK3N0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkCiBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jYXJkX25ldyhpbnQgaWR4LCBjb25zdCBjaGFyICppZCwKLQkJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKTsKKwkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWlmIChzbmRfY2FyZF9jcmVhdGUoaWR4LCBpZCwgbW9kdWxlLCBleHRyYV9zaXplLCAmY2FyZCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY2FyZDsKK30KKwogaW50IHNuZF9jYXJkX2Rpc2Nvbm5lY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKIGludCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CiBpbnQgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwpAQCAtNDQ2LDIxICs0NTgsMzMgQEAKIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHsKIAl1bnNpZ25lZCBzaG9ydCBzdWJ2ZW5kb3I7CS8qIFBDSSBzdWJ2ZW5kb3IgSUQgKi8KIAl1bnNpZ25lZCBzaG9ydCBzdWJkZXZpY2U7CS8qIFBDSSBzdWJkZXZpY2UgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdWJkZXZpY2VfbWFzazsJLyogYml0bWFzayB0byBtYXRjaCAqLwogCWludCB2YWx1ZTsJCQkvKiB2YWx1ZSAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBkZXZpY2UgKG9wdGlvbmFsKSAqLwogI2VuZGlmCiB9OwogCi0jZGVmaW5lIF9TTkRfUENJX1FVSVJLX0lEKHZlbmQsZGV2KSBcCi0JLnN1YnZlbmRvciA9ICh2ZW5kKSwgLnN1YmRldmljZSA9IChkZXYpCisjZGVmaW5lIF9TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgbWFzaywgZGV2KQlcCisJLnN1YnZlbmRvciA9ICh2ZW5kKSwgLnN1YmRldmljZSA9IChkZXYpLCAuc3ViZGV2aWNlX21hc2sgPSAobWFzaykKKyNkZWZpbmUgX1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KSBcCisJX1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCAweGZmZmYsIGRldikKICNkZWZpbmUgU05EX1BDSV9RVUlSS19JRCh2ZW5kLGRldikge19TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldil9CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAjZGVmaW5lIFNORF9QQ0lfUVVJUksodmVuZCxkZXYseG5hbWUsdmFsKSBcCiAJe19TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldiksIC52YWx1ZSA9ICh2YWwpLCAubmFtZSA9ICh4bmFtZSl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfVkVORE9SKHZlbmQsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIDAsIDApLCAudmFsdWUgPSAodmFsKSwgLm5hbWUgPSAoeG5hbWUpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX01BU0sodmVuZCwgbWFzaywgZGV2LCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCBtYXNrLCBkZXYpLAkJCVwKKwkJCS52YWx1ZSA9ICh2YWwpLCAubmFtZSA9ICh4bmFtZSl9CiAjZWxzZQogI2RlZmluZSBTTkRfUENJX1FVSVJLKHZlbmQsZGV2LHhuYW1lLHZhbCkgXAogCXtfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpLCAudmFsdWUgPSAodmFsKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19NQVNLKHZlbmQsIG1hc2ssIGRldiwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgbWFzaywgZGV2KSwgLnZhbHVlID0gKHZhbCl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfVkVORE9SKHZlbmQsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIDAsIDApLCAudmFsdWUgPSAodmFsKX0KICNlbmRpZgogCiBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaCBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCmluZGV4IDEwZWUyOGUuLjZhNjY0YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCisrKyBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX1NPVU5EX0VNVTEwSzFfSAogI2RlZmluZSBfX1NPVU5EX0VNVTEwSzFfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+LAogICoJCSAgICAgQ3JlYXRpdmUgTGFicywgSW5jLgpAQCAtMzQsNiArMzYsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIERFRklORVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIxNzEsNyArMjE3NCw3IEBACiAJY2hhciBuYW1lWzEyOF07CiAKIAlERUNMQVJFX0JJVE1BUChncHJfdmFsaWQsIDB4MjAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KLQl1X2ludDMyX3QgX191c2VyICpncHJfbWFwOwkgIC8qIGluaXRpYWxpemVycyAqLworCV9fdTMyIF9fdXNlciAqZ3ByX21hcDsJCS8qIGluaXRpYWxpemVycyAqLwogCiAJdW5zaWduZWQgaW50IGdwcl9hZGRfY29udHJvbF9jb3VudDsgLyogY291bnQgb2YgR1BSIGNvbnRyb2xzIHRvIGFkZC9yZXBsYWNlICovCiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwciBfX3VzZXIgKmdwcl9hZGRfY29udHJvbHM7IC8qIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLwpAQCAtMjE4NCwxMSArMjE4NywxMSBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHIgX191c2VyICpncHJfbGlzdF9jb250cm9sczsgLyogbGlzdGVkIEdQUiBjb250cm9scyAqLwogCiAJREVDTEFSRV9CSVRNQVAodHJhbV92YWxpZCwgMHgxMDApOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluaXRpYWxpemVycyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKnRyYW1fZGF0YV9tYXA7ICAvKiBkYXRhIGluaXRpYWxpemVycyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKnRyYW1fYWRkcl9tYXA7ICAvKiBtYXAgaW5pdGlhbGl6ZXJzICovCisJX191MzIgX191c2VyICp0cmFtX2RhdGFfbWFwOwkgIC8qIGRhdGEgaW5pdGlhbGl6ZXJzICovCisJX191MzIgX191c2VyICp0cmFtX2FkZHJfbWFwOwkgIC8qIG1hcCBpbml0aWFsaXplcnMgKi8KIAogCURFQ0xBUkVfQklUTUFQKGNvZGVfdmFsaWQsIDEwMjQpOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluc3RydWN0aW9ucyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKmNvZGU7CQkgIC8qIG9uZSBpbnN0cnVjdGlvbiAtIDY0IGJpdHMgKi8KKwlfX3UzMiBfX3VzZXIgKmNvZGU7CQkgIC8qIG9uZSBpbnN0cnVjdGlvbiAtIDY0IGJpdHMgKi8KIH07CiAKIHN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfdHJhbSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2h3ZGVwLmggYi9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKaW5kZXggZDllZWEwMS4uOGMwNWU0N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvaHdkZXAuaAorKysgYi9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKQEAgLTI3LDE4ICsyNywyOCBAQAogCiBzdHJ1Y3Qgc25kX2h3ZGVwOwogCisvKiBod2RlcCBmaWxlIG9wczsgYWxsIG9wcyBjYW4gYmUgTlVMTCAqLwogc3RydWN0IHNuZF9od2RlcF9vcHMgewotCWxvbmcgbG9uZyAoKmxsc2VlaykgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnKTsKLQlsb25nICgqcmVhZCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjaGFyIF9fdXNlciAqYnVmLCBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7Ci0JbG9uZyAoKndyaXRlKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKLQlpbnQgKCpvcGVuKSAoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwotCWludCAoKnJlbGVhc2UpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKLQl1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpOwotCWludCAoKmlvY3RsKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCWludCAoKmlvY3RsX2NvbXBhdCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQlpbnQgKCptbWFwKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKTsKLQlpbnQgKCpkc3Bfc3RhdHVzKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqc3RhdHVzKTsKLQlpbnQgKCpkc3BfbG9hZCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSAqaW1hZ2UpOworCWxvbmcgbG9uZyAoKmxsc2Vlaykoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnKTsKKwlsb25nICgqcmVhZCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNoYXIgX191c2VyICpidWYsCisJCSAgICAgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOworCWxvbmcgKCp3cml0ZSkoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCSAgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKKwlpbnQgKCpvcGVuKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKKwlpbnQgKCpyZWxlYXNlKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKKwl1bnNpZ25lZCBpbnQgKCpwb2xsKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHBvbGxfdGFibGUgKndhaXQpOworCWludCAoKmlvY3RsKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKmlvY3RsX2NvbXBhdCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQgKCptbWFwKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CisJaW50ICgqZHNwX3N0YXR1cykoc3RydWN0IHNuZF9od2RlcCAqaHcsCisJCQkgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqc3RhdHVzKTsKKwlpbnQgKCpkc3BfbG9hZCkoc3RydWN0IHNuZF9od2RlcCAqaHcsCisJCQlzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSAqaW1hZ2UpOwogfTsKIAogc3RydWN0IHNuZF9od2RlcCB7CkBAIC02MSw5ICs3MSw5IEBACiAJdm9pZCAoKnByaXZhdGVfZnJlZSkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwKTsKIAogCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwotCWludCB1c2VkOwotCXVuc2lnbmVkIGludCBkc3BfbG9hZGVkOwotCXVuc2lnbmVkIGludCBleGNsdXNpdmU6IDE7CisJaW50IHVzZWQ7CQkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsJLyogYml0IGZpZWxkcyBvZiBsb2FkZWQgZHNwIGluZGljZXMgKi8KKwl1bnNpZ25lZCBpbnQgZXhjbHVzaXZlOjE7CS8qIGV4Y2x1c2l2ZSBhY2Nlc3MgbW9kZSAqLwogfTsKIAogZXh0ZXJuIGludCBzbmRfaHdkZXBfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2phY2suaCBiL2luY2x1ZGUvc291bmQvamFjay5oCmluZGV4IDJlMDMxNWMuLjZiMDEzYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvamFjay5oCisrKyBiL2luY2x1ZGUvc291bmQvamFjay5oCkBAIC0zMCw2ICszMCw5IEBACiAvKioKICAqIEphY2sgdHlwZXMgd2hpY2ggY2FuIGJlIHJlcG9ydGVkLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGFzIGEKICAqIGJpdG1hc2suCisgKgorICogTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgbG9va3VwIHRhYmxlIGluCisgKiBzb3VuZC9jb3JlL2phY2suYy4KICAqLwogZW51bSBzbmRfamFja190eXBlcyB7CiAJU05EX0pBQ0tfSEVBRFBIT05FCT0gMHgwMDAxLApAQCAtMzcsNiArNDAsOCBAQAogCVNORF9KQUNLX0hFQURTRVQJPSBTTkRfSkFDS19IRUFEUEhPTkUgfCBTTkRfSkFDS19NSUNST1BIT05FLAogCVNORF9KQUNLX0xJTkVPVVQJPSAweDAwMDQsCiAJU05EX0pBQ0tfTUVDSEFOSUNBTAk9IDB4MDAwOCwgLyogSWYgZGV0ZWN0ZWQgc2VwYXJhdGVseSAqLworCVNORF9KQUNLX1ZJREVPT1VUCT0gMHgwMDEwLAorCVNORF9KQUNLX0FWT1VUCQk9IFNORF9KQUNLX0xJTkVPVVQgfCBTTkRfSkFDS19WSURFT09VVCwKIH07CiAKIHN0cnVjdCBzbmRfamFjayB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbS5oIGIvaW5jbHVkZS9zb3VuZC9wY20uaAppbmRleCA0MGM1YTZmLi44OTA0YjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbS5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLmgKQEAgLTM2NCw3ICszNjQsNiBAQAogICAgICAgICAvKiAtLSB0aW1lciBzZWN0aW9uIC0tICovCiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CQkvKiB0aW1lciAqLwogCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6IDE7CS8qIHRpbWUgaXMgcnVubmluZyAqLwotCXNwaW5sb2NrX3QgdGltZXJfbG9jazsKIAkvKiAtLSBuZXh0IHN1YnN0cmVhbSAtLSAqLwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqbmV4dDsKIAkvKiAtLSBsaW5rZWQgc3Vic3RyZWFtcyAtLSAqLwpAQCAtNDUxLDcgKzQ1MCw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNuZF9wY21fZl9vcHNbMl07CiAKLWludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNoYXIgKmlkLCBpbnQgZGV2aWNlLAoraW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCBkZXZpY2UsCiAJCWludCBwbGF5YmFja19jb3VudCwgaW50IGNhcHR1cmVfY291bnQsCiAJCXN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CiBpbnQgc25kX3BjbV9uZXdfc3RyZWFtKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sIGludCBzdWJzdHJlYW1fY291bnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmggYi9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaAppbmRleCAyZmQzZDI1Li4yYzg5NGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaAorKysgYi9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaApAQCAtNDIsNCArNDIsMTkgQEAKIGV4dGVybiBpbnQgcHhhMnh4X2FjOTdfaHdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHB4YTJ4eF9hYzk3X2h3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCisvKiBBQzk3IHBsYXRmb3JtX2RhdGEgKi8KKy8qKgorICogc3RydWN0IHB4YTJ4eF9hYzk3X3BsYXRmb3JtX2RhdGEgLSBweGEgYWM5NyBwbGF0Zm9ybSBkYXRhCisgKiBAcmVzZXRfZ3BpbzogQUM5NyByZXNldCBncGlvIChub3JtYWxseSBncGlvMTEzIG9yIGdwaW85NSkKKyAqICAgICAgICAgICAgICBhIC0xIHZhbHVlIG1lYW5zIG5vIGdwaW8gd2lsbCBiZSB1c2VkIGZvciByZXNldAorICoKKyAqIFBsYXRmb3JtIGRhdGEgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBweGEyN3ggQ1BVcyB3aGVyZSBhIHNpbGljb24gYnVnCisgKiBwcmV2ZW50cyBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcmVzZXQgbGluZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQKKyAqIGJlaGF2aW91ciBpcyB0byBjb25zaWRlciBncGlvIDExMyBhcyB0aGUgQUM5NyByZXNldCBsaW5lLCB3aGljaCBpcyB0aGUKKyAqIGRlZmF1bHQgb24gbW9zdCBib2FyZHMuCisgKi8KK3N0cnVjdCBweGEyeHhfYWM5N19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgcmVzZXRfZ3BpbzsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmggYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaAppbmRleCBiNTUwYTQxLi5jMjNjMjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaAorKysgYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaApAQCAtNDIsNyArNDIsNiBAQAogI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQJKDE8PDEpCiAjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19PUEVOCQkoMzw8MCkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORAkoMTw8MikKLSNkZWZpbmUJU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0sJKDE8PDMpCiAKIHN0cnVjdCBzbmRfcmF3bWlkaTsKIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NiLmggYi9pbmNsdWRlL3NvdW5kL3NiLmgKaW5kZXggODVmOTNjNS4uNGU2MmVlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zYi5oCisrKyBiL2luY2x1ZGUvc291bmQvc2IuaApAQCAtMjQ5LDYgKzI0OSw3IEBACiAjZGVmaW5lIFNCX0FMUzQwMDBfM0RfQVVUT19NVVRFCTB4NTIKICNkZWZpbmUgU0JfQUxTNDAwMF9BTkFMT0dfQkxPQ0tfQ1RSTCAweDUzCiAjZGVmaW5lIFNCX0FMUzQwMDBfM0RfREVMQVlMSU5FX1BBVFRFUk4gMHg1NAorI2RlZmluZSBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OCTB4YzMgLyogYml0IDcgaXMgRGlnaXRhbCBMb29wIEVuYWJsZSAqLwogI2RlZmluZSBTQl9BTFM0MDAwX1FTT1VORAkweGRiCiAKIC8qIElSUSBzZXR0aW5nIGJpdG1hcCAqLwpAQCAtMzMwLDcgKzMzMSw4IEBACiAJU0JfTUlYX0RPVUJMRSwKIAlTQl9NSVhfSU5QVVRfU1csCiAJU0JfTUlYX0NBUFRVUkVfUFJPLAotCVNCX01JWF9DQVBUVVJFX0RUMDE5WAorCVNCX01JWF9DQVBUVVJFX0RUMDE5WCwKKwlTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLCiB9OwogCiAjZGVmaW5lIFNCX01JWFZBTF9ET1VCTEUobGVmdF9yZWcsIHJpZ2h0X3JlZywgbGVmdF9zaGlmdCwgcmlnaHRfc2hpZnQsIG1hc2spIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmggYi9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCmluZGV4IDVkMWFiOWMuLjFiY2U3ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaApAQCAtMjAyLDEzICsyMDIsMTEgQEAKIAlpbnQgdmFsdWUyOwkvKiByZXNlcnZlZCAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfRU1VWF9JT0NUTF9WRVJTSU9OID0gX0lPUignSCcsIDB4ODAsIHVuc2lnbmVkIGludCksCi0JU05EUlZfRU1VWF9JT0NUTF9MT0FEX1BBVENIID0gX0lPV1IoJ0gnLCAweDgxLCBzdHJ1Y3Qgc291bmRmb250X3BhdGNoX2luZm8pLAotCVNORFJWX0VNVVhfSU9DVExfUkVTRVRfU0FNUExFUyA9IF9JTygnSCcsIDB4ODIpLAotCVNORFJWX0VNVVhfSU9DVExfUkVNT1ZFX0xBU1RfU0FNUExFUyA9IF9JTygnSCcsIDB4ODMpLAotCVNORFJWX0VNVVhfSU9DVExfTUVNX0FWQUlMID0gX0lPVygnSCcsIDB4ODQsIGludCksCi0JU05EUlZfRU1VWF9JT0NUTF9NSVNDX01PREUgPSBfSU9XUignSCcsIDB4ODQsIHN0cnVjdCBzbmRfZW11eF9taXNjX21vZGUpLAotfTsKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9WRVJTSU9OCV9JT1IoJ0gnLCAweDgwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfTE9BRF9QQVRDSAlfSU9XUignSCcsIDB4ODEsIHN0cnVjdCBzb3VuZGZvbnRfcGF0Y2hfaW5mbykKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9SRVNFVF9TQU1QTEVTCV9JTygnSCcsIDB4ODIpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfUkVNT1ZFX0xBU1RfU0FNUExFUyBfSU8oJ0gnLCAweDgzKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX01FTV9BVkFJTAlfSU9XKCdIJywgMHg4NCwgaW50KQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX01JU0NfTU9ERQlfSU9XUignSCcsIDB4ODQsIHN0cnVjdCBzbmRfZW11eF9taXNjX21vZGUpCiAKICNlbmRpZiAvKiBfX1NPVU5EX1NGTlRfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaCBiL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCmluZGV4IDI0MjQ3ZjcuLjEzNjc2NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKTsKIAogCS8qIG9wcyAqLwotCXN0cnVjdCBzbmRfc29jX2RhaV9vcHMgb3BzOworCXN0cnVjdCBzbmRfc29jX2RhaV9vcHMgKm9wczsKIAogCS8qIERBSSBjYXBhYmlsaXRpZXMgKi8KIAlzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIGNhcHR1cmU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggZGZhODA0OS4uYTdkZWY2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtNzYsNiArNzYsMTEgQEAKIAkgd2NvbnRyb2xzLCB3bmNvbnRyb2xzKVwKIHsJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gd25jb250cm9sc30KKyNkZWZpbmUgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTCh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJIHdjb250cm9scywgd25jb250cm9scylcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCBcCisJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gd25jb250cm9sc30KICNkZWZpbmUgU05EX1NPQ19EQVBNX01JQ0JJQVMod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCkgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWljYmlhcywgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gTlVMTCwgLm51bV9rY29udHJvbHMgPSAwfQpAQCAtMTAxLDYgKzEwNiwxMSBAQAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisjZGVmaW5lIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVExfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJd2NvbnRyb2xzLCB3bmNvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSUNCSUFTX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21pY2JpYXMsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMCwgXApAQCAtMTgyLDYgKzE5MiwxMiBAQAogCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZhbHVlX2VudW1fZG91YmxlLCBcCiAJLnB1dCA9IHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUsIFwKIAkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSZ4ZW51bSB9CisjZGVmaW5lIFNPQ19EQVBNX1BJTl9TV0lUQ0goeG5hbWUpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUgIiBTd2l0Y2giLCBcCisJLmluZm8gPSBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoLCBcCisJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaCwgXAorCS5wdXQgPSBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2gsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKXhuYW1lIH0KIAogLyogZGFwbSBzdHJlYW0gb3BlcmF0aW9ucyAqLwogI2RlZmluZSBTTkRfU09DX0RBUE1fU1RSRUFNX05PUAkJCTB4MApAQCAtMjI4LDYgKzI0NCwxMiBAQAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIGludCBzbmRfc29jX2RhcG1fcHV0X3ZhbHVlX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKK2ludCBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1bmNvbnRyb2wpOworaW50IHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1bmNvbnRyb2wpOwogaW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCk7CiBpbnQgc25kX3NvY19kYXBtX25ld19jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCkBAIC0yNTAsMTAgKzI3MiwxMCBAQAogaW50IHNuZF9zb2NfZGFwbV9zeXNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIC8qIGRhcG0gYXVkaW8gcGluIGNvbnRyb2wgYW5kIHN0YXR1cyAqLwotaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKIGludCBzbmRfc29jX2RhcG1fc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogCiAvKiBkYXBtIHdpZGdldCB0eXBlcyAqLwpAQCAtMjYzLDYgKzI4NSw3IEBACiAJc25kX3NvY19kYXBtX211eCwJCQkvKiBzZWxlY3RzIDEgYW5hbG9nIHNpZ25hbCBmcm9tIG1hbnkgaW5wdXRzICovCiAJc25kX3NvY19kYXBtX3ZhbHVlX211eCwJCQkvKiBzZWxlY3RzIDEgYW5hbG9nIHNpZ25hbCBmcm9tIG1hbnkgaW5wdXRzICovCiAJc25kX3NvY19kYXBtX21peGVyLAkJCS8qIG1peGVzIHNldmVyYWwgYW5hbG9nIHNpZ25hbHMgdG9nZXRoZXIgKi8KKwlzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLAkJLyogbWl4ZXIgd2l0aCBuYW1lZCBjb250cm9scyAqLwogCXNuZF9zb2NfZGFwbV9wZ2EsCQkJLyogcHJvZ3JhbW1hYmxlIGdhaW4vYXR0ZW51YXRpb24gKHZvbHVtZSkgKi8KIAlzbmRfc29jX2RhcG1fYWRjLAkJCS8qIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlciAqLwogCXNuZF9zb2NfZGFwbV9kYWMsCQkJLyogZGlnaXRhbCB0byBhbmFsb2cgY29udmVydGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy5oIGIvaW5jbHVkZS9zb3VuZC9zb2MuaAppbmRleCAyNDU5M2FjLi5hNDBiYzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC0xNTQsNiArMTU2LDggQEAKIAlTTkRfU09DX0JJQVNfT0ZGLAogfTsKIAorc3RydWN0IHNuZF9qYWNrOworc3RydWN0IHNuZF9zb2NfY2FyZDsKIHN0cnVjdCBzbmRfc29jX2RldmljZTsKIHN0cnVjdCBzbmRfc29jX3BjbV9zdHJlYW07CiBzdHJ1Y3Qgc25kX3NvY19vcHM7CkBAIC0xNjQsNiArMTY4LDExIEBACiBzdHJ1Y3Qgc25kX3NvY19jb2RlYzsKIHN0cnVjdCBzb2NfZW51bTsKIHN0cnVjdCBzbmRfc29jX2FjOTdfb3BzOworc3RydWN0IHNuZF9zb2NfamFjazsKK3N0cnVjdCBzbmRfc29jX2phY2tfcGluOworI2lmZGVmIENPTkZJR19HUElPTElCCitzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW87CisjZW5kaWYKIAogdHlwZWRlZiBpbnQgKCpod193cml0ZV90KSh2b2lkICosY29uc3QgY2hhciogLGludCk7CiB0eXBlZGVmIGludCAoKmh3X3JlYWRfdCkodm9pZCAqLGNoYXIqICxpbnQpOwpAQCAtMTg0LDYgKzE5MywxOSBAQAogaW50IHNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmh3KTsKIAorLyogSmFjayByZXBvcnRpbmcgKi8KK2ludCBzbmRfc29jX2phY2tfbmV3KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgdHlwZSwKKwkJICAgICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrKTsKK3ZvaWQgc25kX3NvY19qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgc3RhdHVzLCBpbnQgbWFzayk7CitpbnQgc25kX3NvY19qYWNrX2FkZF9waW5zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHNuZF9zb2NfamFja19waW4gKnBpbnMpOworI2lmZGVmIENPTkZJR19HUElPTElCCitpbnQgc25kX3NvY19qYWNrX2FkZF9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKTsKK3ZvaWQgc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcyk7CisjZW5kaWYKKwogLyogY29kZWMgSU8gKi8KICNkZWZpbmUgc25kX3NvY19yZWFkKGNvZGVjLCByZWcpIGNvZGVjLT5yZWFkKGNvZGVjLCByZWcpCiAjZGVmaW5lIHNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpIGNvZGVjLT53cml0ZShjb2RlYywgcmVnLCB2YWx1ZSkKQEAgLTIwMyw2ICsyMjUsOCBAQAogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfc29jX2NuZXcoY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKl90ZW1wbGF0ZSwKIAl2b2lkICpkYXRhLCBjaGFyICpsb25nX25hbWUpOworaW50IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbHMsIGludCBudW1fY29udHJvbHMpOwogaW50IHNuZF9zb2NfaW5mb19lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKTsKIGludCBzbmRfc29jX2luZm9fZW51bV9leHQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0yMzcsNiArMjYxLDQ4IEBACiBpbnQgc25kX3NvY19wdXRfdm9sc3dfczgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwogCisvKioKKyAqIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIC0gRGVzY3JpYmVzIGEgcGluIHRvIHVwZGF0ZSBiYXNlZCBvbiBqYWNrIGRldGVjdGlvbgorICoKKyAqIEBwaW46ICAgIG5hbWUgb2YgdGhlIHBpbiB0byB1cGRhdGUKKyAqIEBtYXNrOiAgIGJpdHMgdG8gY2hlY2sgZm9yIGluIHJlcG9ydGVkIGphY2sgc3RhdHVzCisgKiBAaW52ZXJ0OiBpZiBub24temVybyB0aGVuIHBpbiBpcyBlbmFibGVkIHdoZW4gc3RhdHVzIGlzIG5vdCByZXBvcnRlZAorICovCitzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IGNoYXIgKnBpbjsKKwlpbnQgbWFzazsKKwlib29sIGludmVydDsKK307CisKKy8qKgorICogc3RydWN0IHNuZF9zb2NfamFja19ncGlvIC0gRGVzY3JpYmVzIGEgZ3BpbyBwaW4gZm9yIGphY2sgZGV0ZWN0aW9uCisgKgorICogQGdwaW86ICAgICAgICAgZ3BpbyBudW1iZXIKKyAqIEBuYW1lOiAgICAgICAgIGdwaW8gbmFtZQorICogQHJlcG9ydDogICAgICAgdmFsdWUgdG8gcmVwb3J0IHdoZW4gamFjayBkZXRlY3RlZAorICogQGludmVydDogICAgICAgcmVwb3J0IHByZXNlbmNlIGluIGxvdyBzdGF0ZQorICogQGRlYm91Y2VfdGltZTogZGVib3VjZSB0aW1lIGluIG1zCisgKi8KKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorc3RydWN0IHNuZF9zb2NfamFja19ncGlvIHsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwljb25zdCBjaGFyICpuYW1lOworCWludCByZXBvcnQ7CisJaW50IGludmVydDsKKwlpbnQgZGVib3VuY2VfdGltZTsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKyNlbmRpZgorCitzdHJ1Y3Qgc25kX3NvY19qYWNrIHsKKwlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBpbnM7CisJaW50IHN0YXR1czsKK307CisKIC8qIFNvQyBQQ00gc3RyZWFtIGluZm9ybWF0aW9uICovCiBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIHsKIAljaGFyICpzdHJlYW1fbmFtZTsKQEAgLTM4NCw2ICs0NTAsOCBAQAogCiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXY7CiAKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm07CiAJc3RydWN0IGRlbGF5ZWRfd29yayBkZWxheWVkX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRlZmVycmVkX3Jlc3VtZV93b3JrOwpAQCAtMzkzLDcgKzQ2MSw2IEBACiBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2UgKmNvZGVjX2RldjsKIAl2b2lkICpjb2RlY19kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdWRhMTM0MS5oIGIvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMGQ1ZGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2wzL3VkYTEzNDEuaAotICoKLSAqIFBoaWxpcHMgVURBMTM0MSBtaXhlciBkZXZpY2UgZHJpdmVyIGZvciBBTFNBCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKgotICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTAzLTEzIFRvbWFzIEthc3BhcmVrIEluaXRpYWwgcmVsZWFzZSAtIGJhc2VkIG9uIHVkYTEzNDEuaCBmcm9tIE9TUwotICogMjAwMi0wMy0zMCBUb21hcyBLYXNwYXJlayBQcm9jIGZpbGVzeXN0ZW0gc3VwcG9ydCwgY29tcGxldGUgbWl4ZXIgYW5kIERTUAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBzdXBwb3J0Ci0gKi8KLQotI2RlZmluZSBVREExMzQxX0FMU0FfTkFNRSAic25kLXVkYTEzNDEiCi0KLS8qCi0gKiBEZWZhdWx0IHJhdGUgc2V0IGFmdGVyIGluaWNpYWxpemF0aW9uCi0gKi8KLSNkZWZpbmUgQVVESU9fUkFURV9ERUZBVUxUCTQ0MTAwCi0KLS8qCi0gKiBVREExMzQxIEwzIGFkZHJlc3MgYW5kIGNvbW1hbmQgdHlwZXMKLSAqLwotI2RlZmluZSBVREExMzQxX0wzQUREUgkJNQotI2RlZmluZSBVREExMzQxX0RBVEEwCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDApCi0jZGVmaW5lIFVEQTEzNDFfREFUQTEJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMSkKLSNkZWZpbmUgVURBMTM0MV9TVEFUVVMJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMikKLQotZW51bSB1ZGExMzQxX29ub2ZmIHsKLQlPRkY9MCwKLQlPTiwKLX07Ci0KLWVudW0gdWRhMTM0MV9mb3JtYXQgewotCUkyUz0wLAotCUxTQjE2LAotCUxTQjE4LAotCUxTQjIwLAotCU1TQiwKLQlMU0IxNk1TQiwKLQlMU0IxOE1TQiwKLQlMU0IyME1TQiwgICAgICAgIAotfTsKLQotZW51bSB1ZGExMzQxX2ZzIHsKLQlGNTEyPTAsCi0JRjM4NCwKLQlGMjU2LAotCUZ1bnVzZWQsCi19OwotCi1lbnVtIHVkYTEzNDFfcGVhayB7Ci0JQkVGT1JFPTAsCi0JQUZURVIsCi19OwotCi1lbnVtIHVkYTEzNDFfZmlsdGVyIHsKLQlGTEFUPTAsCi0JTUlOLAotCU1JTjIsCi0JTUFYLAotfTsKLQotZW51bSB1ZGExMzQxX21peGVyIHsKLQlET1VCTEUsCi0JTElORSwKLQlNSUMsCi0JTUlYRVIsCi19OwotCi1lbnVtIHVkYTEzNDFfZGVlbXAgewotCU5PTkUsCi0JRDMyLAotCUQ0NCwKLQlENDgsCi19OwotCi1lbnVtIHVkYTEzNDFfY29uZmlnIHsKLQlDTURfUkVBRF9SRUcgPSAwLAotCUNNRF9SRVNFVCwKLQlDTURfRlMsCi0JQ01EX0ZPUk1BVCwKLQlDTURfT0dBSU4sCi0JQ01EX0lHQUlOLAotCUNNRF9EQUMsCi0JQ01EX0FEQywKLQlDTURfVk9MVU1FLAotCUNNRF9CQVNTLAotCUNNRF9UUkVCQkxFLAotCUNNRF9QRUFLLAotCUNNRF9ERUVNUCwKLQlDTURfTVVURSwgICAgICAgIAotCUNNRF9GSUxURVIsCi0JQ01EX0NIMSwKLQlDTURfQ0gyLAotCUNNRF9NSUMsICAgICAgIAotCUNNRF9NSVhFUiwKLQlDTURfQUdDLAotCUNNRF9JRywKLQlDTURfQUdDX1RJTUUsCi0JQ01EX0FHQ19MRVZFTCwKLSNpZmRlZiBDT05GSUdfUE0KLQlDTURfU1VTUEVORCwKLQlDTURfUkVTVU1FLAotI2VuZGlmCi0JQ01EX0xBU1QsCi19OwotCi1lbnVtIHdyaXRlX3Rocm91Z2ggewotCS8vdXNlZCBpbiB1cGRhdGVfYml0cyAod3JpdGVfY2ZnKSB0byBhdm9pZCBsM193cml0ZSAtIGp1c3QgdXBkYXRlIGxvY2FsIGNvcHkgb2YgcmVncy4KLQlSRUdTX09OTFk9MCwKLQkvL3VwZGF0ZSBsb2NhbCByZWdzIGFuZCB3cml0ZSB2YWx1ZSB0byB1ZGExMzQxIC0gZG8gbDNfd3JpdGUKLQlGTFVTSCwKLX07Ci0KLWludCBfX2luaXQgc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICoqY2xudCk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggMmI0ODIzNy4uYTdlNzRlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaCAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xOGEiCisjZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE5IgogI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd3NzLmggYi9pbmNsdWRlL3NvdW5kL3dzcy5oCmluZGV4IGZkMDFmMjIuLjZkNjVmMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvd3NzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC93c3MuaApAQCAtMTU0LDYgKzE1NCw3IEBACiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlLAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBod3NoYXJlLAogCQkgICAgICBzdHJ1Y3Qgc25kX3dzcyAqKnJjaGlwKTsKK2ludCBzbmRfd3NzX2ZyZWUoc3RydWN0IHNuZF93c3MgKmNoaXApOwogaW50IHNuZF93c3NfcGNtKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwogaW50IHNuZF93c3NfdGltZXIoc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpOwogaW50IHNuZF93c3NfbWl4ZXIoc3RydWN0IHNuZF93c3MgKmNoaXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9za2IuaCBiL2luY2x1ZGUvdHJhY2Uvc2tiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2NjEwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2Uvc2tiLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfVFJBQ0VfU0tCX0hfCisjZGVmaW5lIF9UUkFDRV9TS0JfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworREVDTEFSRV9UUkFDRShrZnJlZV9za2IsCisJVFBQUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpsb2NhdGlvbiksCisJVFBBUkdTKHNrYiwgbG9jYXRpb24pKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNmE1YzVmZS4uNjg2OTkxMyAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtOTY2LDcgKzk2Niw2IEBACiAKIGNvbmZpZyBSVF9NVVRFWEVTCiAJYm9vbGVhbgotCXNlbGVjdCBQTElTVAogCiBjb25maWcgQkFTRV9TTUFMTAogCWludApkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDU0YjQwNzcuLmE4ZGRhZGIgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTExNTYsMTAgKzExNTYsMTIgQEAKIAlvbXFzdGF0Lm1xX2ZsYWdzID0gZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CiAJaWYgKHVfbXFzdGF0KSB7CiAJCWF1ZGl0X21xX2dldHNldGF0dHIobXFkZXMsICZtcXN0YXQpOworCQlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJCWlmIChtcXN0YXQubXFfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJZmlscC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwogCQllbHNlCiAJCQlmaWxwLT5mX2ZsYWdzICY9IH5PX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAogCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCX0KZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCAwNWQ1MWQyLi5mMjM5ZDg3IDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaXBjX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMzgzLDYgKzM4NCw3IEBACiAJZXJyb3IgPSBQVFJfRVJSKGZpbGUpOwogCWlmIChJU19FUlIoZmlsZSkpCiAJCWdvdG8gbm9fZmlsZTsKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCiAJaWQgPSBpcGNfYWRkaWQoJnNobV9pZHMobnMpLCAmc2hwLT5zaG1fcGVybSwgbnMtPnNobV9jdGxtbmkpOwogCWlmIChpZCA8IDApIHsKQEAgLTg4Nyw2ICs4ODksNyBAQAogCWZpbGUgPSBhbGxvY19maWxlKHBhdGgubW50LCBwYXRoLmRlbnRyeSwgZl9tb2RlLCAmc2htX2ZpbGVfb3BlcmF0aW9ucyk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dF9mcmVlOworCWltYV9zaG1fY2hlY2soZmlsZSk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzZmQ7CiAJZmlsZS0+Zl9tYXBwaW5nID0gc2hwLT5zaG1fZmlsZS0+Zl9tYXBwaW5nOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCA3ZGUxMWJkLi4wM2QwYmVkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtNzgsNiArNzgsNyBAQAogCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfYmFkX2lycTsKIAlkZXNjLT5jaGlwID0gJm5vX2lycV9jaGlwOwogCWRlc2MtPm5hbWUgPSBOVUxMOworCWNsZWFyX2tzdGF0X2lycXMoZGVzYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yOTAsNyArMjkxLDggQEAKIAkJZGVzYy0+Y2hpcC0+bWFza19hY2soaXJxKTsKIAllbHNlIHsKIAkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwotCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPmFjaykKKwkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwogCX0KIH0KIApAQCAtNDc2LDcgKzQ3OCw4IEBACiAJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAkvKiBTdGFydCBoYW5kbGluZyB0aGUgaXJxICovCi0JZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJaWYgKGRlc2MtPmNoaXAtPmFjaykKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJZGVzYyA9IGlycV9yZW1hcF90b19kZXNjKGlycSwgZGVzYyk7CiAKIAkvKiBNYXJrIHRoZSBJUlEgY3VycmVudGx5IGluIHByb2dyZXNzLiovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCAzYWJhOGQxLi5mNmNkZGE2IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTgzLDE5ICs4MywyMSBAQAogCiB2b2lkIGluaXRfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUsIGludCBucikKIHsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzOwotCWNoYXIgKnB0cjsKIAlpbnQgbm9kZTsKLQotCS8qIENvbXB1dGUgaG93IG1hbnkgYnl0ZXMgd2UgbmVlZCBwZXIgaXJxIGFuZCBhbGxvY2F0ZSB0aGVtICovCi0JYnl0ZXMgPSBuciAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworCXZvaWQgKnB0cjsKIAogCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCXB0ciA9IGt6YWxsb2Nfbm9kZShieXRlcywgR0ZQX0FUT01JQywgbm9kZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWxsb2Mga3N0YXRfaXJxcyBvbiBjcHUgJWQgbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKKwlwdHIgPSBremFsbG9jX25vZGUobnIgKiBzaXplb2YoKmRlc2MtPmtzdGF0X2lycXMpLCBHRlBfQVRPTUlDLCBub2RlKTsKIAotCWlmIChwdHIpCi0JCWRlc2MtPmtzdGF0X2lycXMgPSAodW5zaWduZWQgaW50ICopcHRyOworCS8qCisJICogZG9uJ3Qgb3ZlcndpdGUgaWYgY2FuIG5vdCBnZXQgbmV3IG9uZQorCSAqIGluaXRfY29weV9rc3RhdF9pcnFzKCkgY291bGQgc3RpbGwgdXNlIG9sZCBvbmUKKwkgKi8KKwlpZiAocHRyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGtzdGF0X2lycXMgb24gY3B1ICVkIG5vZGUgJWRcbiIsCisJCQkgY3B1LCBub2RlKTsKKwkJZGVzYy0+a3N0YXRfaXJxcyA9IHB0cjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25lX2lycV9kZXNjKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSkKQEAgLTIyNyw2ICsyMjksNyBAQAogCX0KIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19hbGxbTlJfSVJRU11bTlJfQ1BVU107CiBpbnQgX19pbml0IGVhcmx5X2lycV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwpAQCAtMjM4LDggKzI0MSwxMCBAQAogCWRlc2MgPSBpcnFfZGVzYzsKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2MpOwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGVzY1tpXS5pcnEgPSBpOworCQlkZXNjW2ldLmtzdGF0X2lycXMgPSBrc3RhdF9pcnFzX2FsbFtpXTsKKwl9CiAKIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQpAQCAtMjU1LDYgKzI2MCwxMSBAQAogfQogI2VuZGlmIC8qICFDT05GSUdfU1BBUlNFX0lSUSAqLwogCit2b2lkIGNsZWFyX2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCW1lbXNldChkZXNjLT5rc3RhdF9pcnFzLCAwLCBucl9jcHVfaWRzICogc2l6ZW9mKCooZGVzYy0+a3N0YXRfaXJxcykpKTsKK30KKwogLyoKICAqIFdoYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3Rvcj8KICAqIEVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsZi4KQEAgLTMyOCw2ICszMzgsOCBAQAogCWlycXJldHVybl90IHJldCwgcmV0dmFsID0gSVJRX05PTkU7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CiAKKwlXQVJOX09OQ0UoIWluX2lycSgpLCAiQlVHOiBJUlEgaGFuZGxlciBjYWxsZWQgZnJvbSBub24taGFyZGlycSBjb250ZXh0ISIpOworCiAJaWYgKCEoYWN0aW9uLT5mbGFncyAmIElSUUZfRElTQUJMRUQpKQogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIApAQCAtMzQ3LDYgKzM1OSwxMSBAQAogfQogCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKworI2lmZGVmIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVECisjIHdhcm5pbmcgX19kb19JUlEgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIGNvbnZlcnQgdG8gcHJvcGVyIGZsb3cgaGFuZGxlcnMKKyNlbmRpZgorCiAvKioKICAqIF9fZG9fSVJRIC0gb3JpZ2luYWwgYWxsIGluIG9uZSBoaWdobGV2ZWwgSVJRIGhhbmRsZXIKICAqIEBpcnE6CXRoZSBpbnRlcnJ1cHQgbnVtYmVyCkBAIC00NjcsMTIgKzQ4NCwxMCBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCiB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXJldHVybiBkZXNjID8gZGVzYy0+a3N0YXRfaXJxc1tjcHVdIDogMDsKIH0KLSNlbmRpZgogRVhQT1JUX1NZTUJPTChrc3RhdF9pcnFzX2NwdSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGU2ZDBhNDMuLmI2MDk1MGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTUsNiArMTUsNyBAQAogCiBleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CiBleHRlcm4gdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpOworZXh0ZXJuIHZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHNwaW5sb2NrX3Qgc3BhcnNlX2lycV9sb2NrOwogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2NfcHRyc1tOUl9JUlFTXTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMjkxZjAzNi4uZWExMTllZiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0xMDksNyArMTA5LDcgQEAKIC8qCiAgKiBHZW5lcmljIHZlcnNpb24gb2YgdGhlIGFmZmluaXR5IGF1dG9zZWxlY3Rvci4KICAqLwotaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGludCBzZXR1cF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJaWYgKCFpcnFfY2FuX3NldF9hZmZpbml0eShpcnEpKQogCQlyZXR1cm4gMDsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQorc3RhdGljIGlubGluZSBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQogewogCXJldHVybiBpcnFfc2VsZWN0X2FmZmluaXR5KGlycSk7CiB9CkBAIC0xNDksMTQgKzE0OSwxNCBAQAogCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+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+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CiAKIAlyZXR2YWwgPSBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdGlvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jIGIva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYwppbmRleCBhY2Q4ODM1Li5hZWYxOGFiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCisrKyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKQEAgLTE3LDE2ICsxNywxMSBAQAogCQkJCSBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkJIGludCBjcHUsIGludCBucikKIHsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzOwotCiAJaW5pdF9rc3RhdF9pcnFzKGRlc2MsIGNwdSwgbnIpOwogCi0JaWYgKGRlc2MtPmtzdGF0X2lycXMgIT0gb2xkX2Rlc2MtPmtzdGF0X2lycXMpIHsKLQkJLyogQ29tcHV0ZSBob3cgbWFueSBieXRlcyB3ZSBuZWVkIHBlciBpcnEgYW5kIGFsbG9jYXRlIHRoZW0gKi8KLQkJYnl0ZXMgPSBuciAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotCi0JCW1lbWNweShkZXNjLT5rc3RhdF9pcnFzLCBvbGRfZGVzYy0+a3N0YXRfaXJxcywgYnl0ZXMpOwotCX0KKwlpZiAoZGVzYy0+a3N0YXRfaXJxcyAhPSBvbGRfZGVzYy0+a3N0YXRfaXJxcykKKwkJbWVtY3B5KGRlc2MtPmtzdGF0X2lycXMsIG9sZF9kZXNjLT5rc3RhdF9pcnFzLAorCQkJIG5yICogc2l6ZW9mKCpkZXNjLT5rc3RhdF9pcnFzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggZGQzNjRjMS4uNGQ1NjgyOSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJcmV0dXJuIG9rOwogfQogCi1zdGF0aWMgdm9pZCBwb2xsX3NwdXJpb3VzX2lycXModW5zaWduZWQgbG9uZyBkdW1teSkKK3N0YXRpYyB2b2lkIHBvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwpAQCAtMTIzLDExICsxMjMsMjMgQEAKIAogCQl0cnlfb25lX2lycShpLCBkZXNjKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQoreworCXBvbGxfYWxsX3NoYXJlZF9pcnFzKCk7CiAKIAltb2RfdGltZXIoJnBvbGxfc3B1cmlvdXNfaXJxX3RpbWVyLAogCQkgIGppZmZpZXMgKyBQT0xMX1NQVVJJT1VTX0lSUV9JTlRFUlZBTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlEKK3ZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkKK3sKKwlwb2xsX2FsbF9zaGFyZWRfaXJxcygpOworfQorI2VuZGlmCisKIC8qCiAgKiBJZiA5OSw5MDAgb2YgdGhlIHByZXZpb3VzIDEwMCwwMDAgaW50ZXJydXB0cyBoYXZlIG5vdCBiZWVuIGhhbmRsZWQKICAqIHRoZW4gYXNzdW1lIHRoYXQgdGhlIElSUSBpcyBzdHVjayBpbiBzb21lIG1hbm5lci4gRHJvcCBhIGRpYWdub3N0aWMKZGlmZiAtLWdpdCBhL2tlcm5lbC9sYXRlbmN5dG9wLmMgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCmluZGV4IDQ0OWRiNDYuLmNhMDdjNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sYXRlbmN5dG9wLmMKKysrIGIva2VybmVsL2xhdGVuY3l0b3AuYwpAQCAtOSw2ICs5LDQ0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLworCisvKgorICogQ09ORklHX0xBVEVOQ1lUT1AgZW5hYmxlcyBhIGtlcm5lbCBsYXRlbmN5IHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHRoYXQgaXMKKyAqIHVzZWQgYnkgdGhlICJsYXRlbmN5dG9wIiB1c2Vyc3BhY2UgdG9vbC4gVGhlIGxhdGVuY3kgdGhhdCBpcyB0cmFja2VkIGlzIG5vdAorICogdGhlICd0cmFkaXRpb25hbCcgaW50ZXJydXB0IGxhdGVuY3kgKHdoaWNoIGlzIHByaW1hcmlseSBjYXVzZWQgYnkgc29tZXRoaW5nCisgKiBlbHNlIGNvbnN1bWluZyBDUFUpLCBidXQgaW5zdGVhZCwgaXQgaXMgdGhlIGxhdGVuY3kgYW4gYXBwbGljYXRpb24gZW5jb3VudGVycworICogYmVjYXVzZSB0aGUga2VybmVsIHNsZWVwcyBvbiBpdHMgYmVoYWxmIGZvciB2YXJpb3VzIHJlYXNvbnMuCisgKgorICogVGhpcyBjb2RlIHRyYWNrcyAyIGxldmVscyBvZiBzdGF0aXN0aWNzOgorICogMSkgU3lzdGVtIGxldmVsIGxhdGVuY3kKKyAqIDIpIFBlciBwcm9jZXNzIGxhdGVuY3kKKyAqCisgKiBUaGUgbGF0ZW5jeSBpcyBzdG9yZWQgaW4gZml4ZWQgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGluIGFuIGFjY3VtdWxhdGVkIGZvcm07CisgKiBpZiB0aGUgInNhbWUiIGxhdGVuY3kgY2F1c2UgaXMgaGl0IHR3aWNlLCB0aGlzIHdpbGwgYmUgdHJhY2tlZCBhcyBvbmUgZW50cnkKKyAqIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gQm90aCB0aGUgY291bnQsIHRvdGFsIGFjY3VtdWxhdGVkIGxhdGVuY3kgYW5kIG1heGltdW0KKyAqIGxhdGVuY3kgYXJlIHRyYWNrZWQgaW4gdGhpcyBkYXRhIHN0cnVjdHVyZS4gV2hlbiB0aGUgZml4ZWQgc2l6ZSBzdHJ1Y3R1cmUgaXMKKyAqIGZ1bGwsIG5vIG5ldyBjYXVzZXMgYXJlIHRyYWNrZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmbHVzaGVkIGJ5IHdyaXRpbmcgdG8KKyAqIHRoZSAvcHJvYyBmaWxlOyB0aGUgdXNlcnNwYWNlIHRvb2wgZG9lcyB0aGlzIG9uIGEgcmVndWxhciBiYXNpcy4KKyAqCisgKiBBIGxhdGVuY3kgY2F1c2UgaXMgaWRlbnRpZmllZCBieSBhIHN0cmluZ2lmaWVkIGJhY2t0cmFjZSBhdCB0aGUgcG9pbnQgdGhhdAorICogdGhlIHNjaGVkdWxlciBnZXRzIGludm9rZWQuIFRoZSB1c2VybGFuZCB0b29sIHdpbGwgdXNlIHRoaXMgc3RyaW5nIHRvCisgKiBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGxhdGVuY3kgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS4KKyAqCisgKiBUaGUgaW5mb3JtYXRpb24gaXMgZXhwb3J0ZWQgdmlhIC9wcm9jL2xhdGVuY3lfc3RhdHMgYW5kIC9wcm9jLzxwaWQ+L2xhdGVuY3kuCisgKiBUaGVzZSBmaWxlcyBsb29rIGxpa2UgdGhpczoKKyAqCisgKiBMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMQorICogNzAgNTk0MzMgNDg5NyBpOTE1X2lycV93YWl0IGRybV9pb2N0bCB2ZnNfaW9jdGwgZG9fdmZzX2lvY3RsIHN5c19pb2N0bAorICogfCAgICB8ICAgIHwgICAgfAorICogfCAgICB8ICAgIHwgICAgKy0tLS0+IHRoZSBzdHJpbmdpZmllZCBiYWNrdHJhY2UKKyAqIHwgICAgfCAgICArLS0tLS0tLS0tPiBUaGUgbWF4aW11bSBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IGluIG1pY3Jvc2Vjb25kcworICogfCAgICArLS0tLS0tLS0tLS0tLS0+IFRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IChtaWNyb3NlY29uZHMpCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLT4gVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGVudHJ5IGlzIGhpdAorICoKKyAqIChub3RlOiB0aGUgYXZlcmFnZSBsYXRlbmN5IGlzIHRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGRpdmlkZWQgYnkgdGhlIG51bWJlcgorICogb2YgdGltZXMpCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3l0b3AuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC03Miw3ICsxMTAsNyBAQAogCQkJCWZpcnN0bm9ubnVsbCA9IGk7CiAJCQljb250aW51ZTsKIAkJfQotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC0+YmFja3RyYWNlW3FdOwogCiAJCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTAxLDMxICsxMzksNTIgQEAKIAltZW1jcHkoJmxhdGVuY3lfcmVjb3JkW2ldLCBsYXQsIHNpemVvZihzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX3N0YWNrdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbGF0KQorLyoKKyAqIEl0ZXJhdG9yIHRvIHN0b3JlIGEgYmFja3RyYWNlIGludG8gYSBsYXRlbmN5IHJlY29yZCBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfc3RhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsYXQpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCiAJbWVtc2V0KCZ0cmFjZSwgMCwgc2l6ZW9mKHRyYWNlKSk7CiAJdHJhY2UubWF4X2VudHJpZXMgPSBMVF9CQUNLVFJBQ0VERVBUSDsKIAl0cmFjZS5lbnRyaWVzID0gJmxhdC0+YmFja3RyYWNlWzBdOwotCXRyYWNlLnNraXAgPSAwOwogCXNhdmVfc3RhY2tfdHJhY2VfdHNrKHRzaywgJnRyYWNlKTsKIH0KIAorLyoqCisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBAdHNrIC0gdGhlIHRhc2sgc3RydWN0IG9mIHRoZSB0YXNrIGhpdHRpbmcgdGhlIGxhdGVuY3kKKyAqIEB1c2VjcyAtIHRoZSBkdXJhdGlvbiBvZiB0aGUgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKKyAqIEBpbnRlciAtIDEgaWYgdGhlIHNsZWVwIHdhcyBpbnRlcnJ1cHRpYmxlLCAwIGlmIHVuaW50ZXJydXB0aWJsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY29yZGluZyBsYXRlbmN5IGVudHJpZXMKKyAqIGFzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGEgZmV3IHNwZWNpYWwgY2FzZXMgdG8gZGVhbCB3aXRoIG5vcm1hbCAnbm9uLWxhdGVuY3knCisgKiBzbGVlcHM6IHNwZWNpZmljYWxseSwgaW50ZXJydXB0aWJsZSBzbGVlcCBsb25nZXIgdGhhbiA1IG1zZWMgaXMgc2tpcHBlZAorICogc2luY2UgdGhpcyB1c3VhbGx5IGlzIGNhdXNlZCBieSB3YWl0aW5nIGZvciBldmVudHMgdmlhIHNlbGVjdCgpIGFuZCBjby4KKyAqCisgKiBOZWdhdGl2ZSBsYXRlbmNpZXMgKGNhdXNlZCBieSB0aW1lIGdvaW5nIGJhY2t3YXJkcykgYXJlIGFsc28gZXhwbGljaXRseQorICogc2tpcHBlZC4KKyAqLwogdm9pZCBfX3NjaGVkCi1hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK19fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcTsKIAlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgbGF0OwogCi0JaWYgKCFsYXRlbmN5dG9wX2VuYWJsZWQpCi0JCXJldHVybjsKLQogCS8qIExvbmcgaW50ZXJydXB0aWJsZSB3YWl0cyBhcmUgZ2VuZXJhbGx5IHVzZXIgcmVxdWVzdGVkLi4uICovCiAJaWYgKGludGVyICYmIHVzZWNzID4gNTAwMCkKIAkJcmV0dXJuOwogCisJLyogTmVnYXRpdmUgc2xlZXBzIGFyZSB0aW1lIGdvaW5nIGJhY2t3YXJkcyAqLworCS8qIFplcm8tdGltZSBzbGVlcHMgYXJlIG5vbi1pbnRlcmVzdGluZyAqLworCWlmICh1c2VjcyA8PSAwKQorCQlyZXR1cm47CisKIAltZW1zZXQoJmxhdCwgMCwgc2l6ZW9mKGxhdCkpOwogCWxhdC5jb3VudCA9IDE7CiAJbGF0LnRpbWUgPSB1c2VjczsKQEAgLTE0MywxMiArMjAyLDEyIEBACiAJaWYgKHRzay0+bGF0ZW5jeV9yZWNvcmRfY291bnQgPj0gTFRfU0FWRUNPVU5UKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTFRfU0FWRUNPVU5UIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExUX1NBVkVDT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbXlsYXQ7CiAJCWludCBzYW1lID0gMTsKIAogCQlteWxhdCA9ICZ0c2stPmxhdGVuY3lfcmVjb3JkW2ldOwotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC5iYWNrdHJhY2VbcV07CiAKIAkJCWlmIChteWxhdC0+YmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTg2LDcgKzI0NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWExSOyBpKyspIHsKIAkJaWYgKGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVswXSkgewogCQkJaW50IHE7Ci0JCQlzZXFfcHJpbnRmKG0sICIlaSAlbGkgJWxpICIsCisJCQlzZXFfcHJpbnRmKG0sICIlaSAlbHUgJWx1ICIsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0uY291bnQsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0udGltZSwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS5tYXgpOwpAQCAtMjIzLDcgKzI4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIGxzdGF0c19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHN0YXRzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsc3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSBsc3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gbHN0YXRzX3dyaXRlLApAQCAtMjM2LDQgKzI5NSw0IEBACiAJcHJvY19jcmVhdGUoImxhdGVuY3lfc3RhdHMiLCAwNjQ0LCBOVUxMLCAmbHN0YXRzX2ZvcHMpOwogCXJldHVybiAwOwogfQotX19pbml0Y2FsbChpbml0X2xzdGF0c19wcm9jZnMpOworZGV2aWNlX2luaXRjYWxsKGluaXRfbHN0YXRzX3Byb2Nmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMTE5NmY1ZC4uNzc2NzIyMyAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAkvKiBTdG9yZSB0aGUgbmFtZSBvZiB0aGUgbGFzdCB1bmxvYWRlZCBtb2R1bGUgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KIAlzdHJsY3B5KGxhc3RfdW5sb2FkZWRfbW9kdWxlLCBtb2QtPm5hbWUsIHNpemVvZihsYXN0X3VubG9hZGVkX21vZHVsZSkpOwotCXVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUobW9kLT5uYW1lKTsKKwlkZGVidWdfcmVtb3ZlX21vZHVsZShtb2QtPm5hbWUpOwogCWZyZWVfbW9kdWxlKG1vZCk7CiAKICBvdXQ6CkBAIC0xODI3LDE5ICsxODI3LDEzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovCiAKLXN0YXRpYyB2b2lkIGR5bmFtaWNfcHJpbnRrX3NldHVwKHN0cnVjdCBtb2RfZGVidWcgKmRlYnVnLCB1bnNpZ25lZCBpbnQgbnVtKQorc3RhdGljIHZvaWQgZHluYW1pY19kZWJ1Z19zZXR1cChzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCiB7Ci0jaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCi0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoZGVidWdbaV0ubW9kbmFtZSwKLQkJCQkJICAgICAgZGVidWdbaV0udHlwZSwKLQkJCQkJICAgICAgZGVidWdbaV0ubG9naWNhbF9tb2RuYW1lLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5mbGFnX25hbWVzLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5oYXNoLCBkZWJ1Z1tpXS5oYXNoMik7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyAqLworI2lmZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCisJaWYgKGRkZWJ1Z19hZGRfbW9kdWxlKGRlYnVnLCBudW0sIGRlYnVnLT5tb2RuYW1lKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJkeW5hbWljIGRlYnVnIGVycm9yIGFkZGluZyBtb2R1bGU6ICVzXG4iLAorCQkJCQlkZWJ1Zy0+bW9kbmFtZSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgKm1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTIyMTMsMTIgKzIyMDcsMTMgQEAKIAlhZGRfa2FsbHN5bXMobW9kLCBzZWNoZHJzLCBzeW1pbmRleCwgc3RyaW5kZXgsIHNlY3N0cmluZ3MpOwogCiAJaWYgKCFtb2QtPnRhaW50cykgewotCQlzdHJ1Y3QgbW9kX2RlYnVnICpkZWJ1ZzsKKwkJc3RydWN0IF9kZGVidWcgKmRlYnVnOwogCQl1bnNpZ25lZCBpbnQgbnVtX2RlYnVnOwogCiAJCWRlYnVnID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fdmVyYm9zZSIsCiAJCQkJICAgICBzaXplb2YoKmRlYnVnKSwgJm51bV9kZWJ1Zyk7Ci0JCWR5bmFtaWNfcHJpbnRrX3NldHVwKGRlYnVnLCBudW1fZGVidWcpOworCQlpZiAoZGVidWcpCisJCQlkeW5hbWljX2RlYnVnX3NldHVwKGRlYnVnLCBudW1fZGVidWcpOwogCX0KIAogCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggZTk3NmU1MC4uOGU1ZDlhNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0xMzcwLDcgKzEzNzAsOCBAQAogCQlpZiAodGFza19jcHV0aW1lX2V4cGlyZWQoJmdyb3VwX3NhbXBsZSwgJnNpZy0+Y3B1dGltZV9leHBpcmVzKSkKIAkJCXJldHVybiAxOwogCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggOWQ3OWI3OC4uOGYyMTc5YyAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTc1MCw3ICs3NTAsNyBAQAogCQkJICogZnJvbSB0aGUgc2NoZWR1bGVyICh0cnlpbmcgdG8gcmUtZ3JhYgogCQkJICogcnEtPmxvY2spLCBzbyBkZWZlciBpdC4KIAkJCSAqLwotCQkJX19tb2RfdGltZXIoJmJ1Zi0+dGltZXIsIGppZmZpZXMgKyAxKTsKKwkJCW1vZF90aW1lcigmYnVmLT50aW1lciwgamlmZmllcyArIDEpOwogCX0KIAogCW9sZCA9IGJ1Zi0+ZGF0YTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggOGUyNTU4Yy4uOWY4NTA2ZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTMzMSw2ICszMzEsMTMgQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh0YXNrX2dyb3VwX2xvY2spOwogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKICNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJKDIqTklDRV8wX0xPQUQpCkBAIC0zOTEsNiArMzk4LDEzIEBACiAKICNlbHNlCiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqdGFza19ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC00NjcsMTEgKzQ4MSwxNyBAQAogCXN0cnVjdCBydF9wcmlvX2FycmF5IGFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIHJ0X25yX3J1bm5pbmc7CiAjaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaW50IGhpZ2hlc3RfcHJpbzsgLyogaGlnaGVzdCBxdWV1ZWQgcnQgdGFzayBwcmlvICovCisJc3RydWN0IHsKKwkJaW50IGN1cnI7IC8qIGhpZ2hlc3QgcXVldWVkIHJ0IHRhc2sgcHJpbyAqLworI2lmZGVmIENPTkZJR19TTVAKKwkJaW50IG5leHQ7IC8qIG5leHQgaGlnaGVzdCAqLworI2VuZGlmCisJfSBoaWdoZXN0X3ByaW87CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJdW5zaWduZWQgbG9uZyBydF9ucl9taWdyYXRvcnk7CiAJaW50IG92ZXJsb2FkZWQ7CisJc3RydWN0IHBsaXN0X2hlYWQgcHVzaGFibGVfdGFza3M7CiAjZW5kaWYKIAlpbnQgcnRfdGhyb3R0bGVkOwogCXU2NCBydF90aW1lOwpAQCAtNTQ5LDcgKzU2OSw2IEBACiAJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nOwogCSNkZWZpbmUgQ1BVX0xPQURfSURYX01BWCA1CiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFtDUFVfTE9BRF9JRFhfTUFYXTsKLQl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKICNpZmRlZiBDT05GSUdfTk9fSFoKIAl1bnNpZ25lZCBsb25nIGxhc3RfdGlja19zZWVuOwogCXVuc2lnbmVkIGNoYXIgaW5fbm9oel9yZWNlbnRseTsKQEAgLTU5MCw2ICs2MDksNyBAQAogCXN0cnVjdCByb290X2RvbWFpbiAqcmQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKKwl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKIAkvKiBGb3IgYWN0aXZlIGJhbGFuY2luZyAqLwogCWludCBhY3RpdmVfYmFsYW5jZTsKIAlpbnQgcHVzaF9jcHU7CkBAIC02MTgsOSArNjM4LDYgQEAKIAkvKiBjb3VsZCBhYm92ZSBiZSBycS0+Y2ZzX3JxLmV4ZWNfY2xvY2sgKyBycS0+cnRfcnEucnRfcnVudGltZSA/ICovCiAKIAkvKiBzeXNfc2NoZWRfeWllbGQoKSBzdGF0cyAqLwotCXVuc2lnbmVkIGludCB5bGRfZXhwX2VtcHR5OwotCXVuc2lnbmVkIGludCB5bGRfYWN0X2VtcHR5OwotCXVuc2lnbmVkIGludCB5bGRfYm90aF9lbXB0eTsKIAl1bnNpZ25lZCBpbnQgeWxkX2NvdW50OwogCiAJLyogc2NoZWR1bGUoKSBzdGF0cyAqLwpAQCAtMTE4MywxMCArMTIwMCwxMCBAQAogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0YXNrX3JxKHApLT5sb2NrKTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTkVFRF9SRVNDSEVEKSkpCisJaWYgKHRlc3RfdHNrX25lZWRfcmVzY2hlZChwKSkKIAkJcmV0dXJuOwogCi0Jc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTkVFRF9SRVNDSEVEKTsKKwlzZXRfdHNrX25lZWRfcmVzY2hlZChwKTsKIAogCWNwdSA9IHRhc2tfY3B1KHApOwogCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQpAQCAtMTI0Miw3ICsxMjU5LDcgQEAKIAkgKiBsb2NrbGVzcy4gVGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB0aGUgb3RoZXIgQ1BVIHJ1bnMgdGhlCiAJICogaWRsZSB0YXNrIHRocm91Z2ggYW4gYWRkaXRpb25hbCBOT09QIHNjaGVkdWxlKCkKIAkgKi8KLQlzZXRfdHNrX3RocmVhZF9mbGFnKHJxLT5pZGxlLCBUSUZfTkVFRF9SRVNDSEVEKTsKKwlzZXRfdHNrX25lZWRfcmVzY2hlZChycS0+aWRsZSk7CiAKIAkvKiBORUVEX1JFU0NIRUQgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0IHBvbGxpbmcgKi8KIAlzbXBfbWIoKTsKQEAgLTE2MTAsMjEgKzE2MjcsNDIgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCiAvKgotICogZG91YmxlX2xvY2tfYmFsYW5jZSAtIGxvY2sgdGhlIGJ1c2llc3QgcnVucXVldWUsIHRoaXNfcnEgaXMgbG9ja2VkIGFscmVhZHkuCisgKiBmYWlyIGRvdWJsZV9sb2NrX2JhbGFuY2U6IFNhZmVseSBhY3F1aXJlcyBib3RoIHJxLT5sb2NrcyBpbiBhIGZhaXIKKyAqIHdheSBhdCB0aGUgZXhwZW5zZSBvZiBmb3JjaW5nIGV4dHJhIGF0b21pYyBvcGVyYXRpb25zIGluIGFsbAorICogaW52b2NhdGlvbnMuICBUaGlzIGFzc3VyZXMgdGhhdCB0aGUgZG91YmxlX2xvY2sgaXMgYWNxdWlyZWQgdXNpbmcgdGhlCisgKiBzYW1lIHVuZGVybHlpbmcgcG9saWN5IGFzIHRoZSBzcGlubG9ja190IG9uIHRoaXMgYXJjaGl0ZWN0dXJlLCB3aGljaAorICogcmVkdWNlcyBsYXRlbmN5IGNvbXBhcmVkIHRvIHRoZSB1bmZhaXIgdmFyaWFudCBiZWxvdy4gIEhvd2V2ZXIsIGl0CisgKiBhbHNvIGFkZHMgbW9yZSBvdmVyaGVhZCBhbmQgdGhlcmVmb3JlIG1heSByZWR1Y2UgdGhyb3VnaHB1dC4KICAqLwotc3RhdGljIGludCBkb3VibGVfbG9ja19iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHJxICpidXNpZXN0KQorc3RhdGljIGlubGluZSBpbnQgX2RvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCisJX19yZWxlYXNlcyh0aGlzX3JxLT5sb2NrKQorCV9fYWNxdWlyZXMoYnVzaWVzdC0+bG9jaykKKwlfX2FjcXVpcmVzKHRoaXNfcnEtPmxvY2spCit7CisJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOworCWRvdWJsZV9ycV9sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOworCisJcmV0dXJuIDE7Cit9CisKKyNlbHNlCisvKgorICogVW5mYWlyIGRvdWJsZV9sb2NrX2JhbGFuY2U6IE9wdGltaXplcyB0aHJvdWdocHV0IGF0IHRoZSBleHBlbnNlIG9mCisgKiBsYXRlbmN5IGJ5IGVsaW1pbmF0aW5nIGV4dHJhIGF0b21pYyBvcGVyYXRpb25zIHdoZW4gdGhlIGxvY2tzIGFyZQorICogYWxyZWFkeSBpbiBwcm9wZXIgb3JkZXIgb24gZW50cnkuICBUaGlzIGZhdm9ycyBsb3dlciBjcHUtaWRzIGFuZCB3aWxsCisgKiBncmFudCB0aGUgZG91YmxlIGxvY2sgdG8gbG93ZXIgY3B1cyBvdmVyIGhpZ2hlciBpZHMgdW5kZXIgY29udGVudGlvbiwKKyAqIHJlZ2FyZGxlc3Mgb2YgZW50cnkgb3JkZXIgaW50byB0aGUgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgX2RvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCiAJX19yZWxlYXNlcyh0aGlzX3JxLT5sb2NrKQogCV9fYWNxdWlyZXMoYnVzaWVzdC0+bG9jaykKIAlfX2FjcXVpcmVzKHRoaXNfcnEtPmxvY2spCiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodW5saWtlbHkoIWlycXNfZGlzYWJsZWQoKSkpIHsKLQkJLyogcHJpbnRrKCkgZG9lc24ndCB3b3JrIGdvb2QgdW5kZXIgcnEtPmxvY2sgKi8KLQkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwotCQlCVUdfT04oMSk7Ci0JfQogCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrKCZidXNpZXN0LT5sb2NrKSkpIHsKIAkJaWYgKGJ1c2llc3QgPCB0aGlzX3JxKSB7CiAJCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CkBAIC0xNjM3LDYgKzE2NzUsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KKworLyoKKyAqIGRvdWJsZV9sb2NrX2JhbGFuY2UgLSBsb2NrIHRoZSBidXNpZXN0IHJ1bnF1ZXVlLCB0aGlzX3JxIGlzIGxvY2tlZCBhbHJlYWR5LgorICovCitzdGF0aWMgaW50IGRvdWJsZV9sb2NrX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgcnEgKmJ1c2llc3QpCit7CisJaWYgKHVubGlrZWx5KCFpcnFzX2Rpc2FibGVkKCkpKSB7CisJCS8qIHByaW50aygpIGRvZXNuJ3Qgd29yayBnb29kIHVuZGVyIHJxLT5sb2NrICovCisJCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKwkJQlVHX09OKDEpOworCX0KKworCXJldHVybiBfZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91bmxvY2tfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBycSAqYnVzaWVzdCkKIAlfX3JlbGVhc2VzKGJ1c2llc3QtPmxvY2spCiB7CkBAIC0xNzA1LDYgKzE3NTksOSBAQAogCiBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQogeworCWlmICh3YWtldXApCisJCXAtPnNlLnN0YXJ0X3J1bnRpbWUgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOworCiAJc2NoZWRfaW5mb19xdWV1ZWQocCk7CiAJcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwKTsKIAlwLT5zZS5vbl9ycSA9IDE7CkBAIC0xNzEyLDEwICsxNzY5LDE1IEBACiAKIHN0YXRpYyB2b2lkIGRlcXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKIHsKLQlpZiAoc2xlZXAgJiYgcC0+c2UubGFzdF93YWtldXApIHsKLQkJdXBkYXRlX2F2ZygmcC0+c2UuYXZnX292ZXJsYXAsCi0JCQkgICBwLT5zZS5zdW1fZXhlY19ydW50aW1lIC0gcC0+c2UubGFzdF93YWtldXApOwotCQlwLT5zZS5sYXN0X3dha2V1cCA9IDA7CisJaWYgKHNsZWVwKSB7CisJCWlmIChwLT5zZS5sYXN0X3dha2V1cCkgeworCQkJdXBkYXRlX2F2ZygmcC0+c2UuYXZnX292ZXJsYXAsCisJCQkJcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSAtIHAtPnNlLmxhc3Rfd2FrZXVwKTsKKwkJCXAtPnNlLmxhc3Rfd2FrZXVwID0gMDsKKwkJfSBlbHNlIHsKKwkJCXVwZGF0ZV9hdmcoJnAtPnNlLmF2Z193YWtldXAsCisJCQkJc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7CisJCX0KIAl9CiAKIAlzY2hlZF9pbmZvX2RlcXVldWVkKHApOwpAQCAtMjAxNyw3ICsyMDc5LDcgQEAKIAkJICogaXQgbXVzdCBiZSBvZmYgdGhlIHJ1bnF1ZXVlIF9lbnRpcmVseV8sIGFuZCBub3QKIAkJICogcHJlZW1wdGVkIQogCQkgKgotCQkgKiBTbyBpZiBpdCB3YSBzdGlsbCBydW5uYWJsZSAoYnV0IGp1c3Qgbm90IGFjdGl2ZWx5CisJCSAqIFNvIGlmIGl0IHdhcyBzdGlsbCBydW5uYWJsZSAoYnV0IGp1c3Qgbm90IGFjdGl2ZWx5CiAJCSAqIHJ1bm5pbmcgcmlnaHQgbm93KSwgaXQncyBwcmVlbXB0ZWQsIGFuZCB3ZSBzaG91bGQKIAkJICogeWllbGQgLSBpdCBjb3VsZCBiZSBhIHdoaWxlLgogCQkgKi8KQEAgLTIyNjcsNyArMjMyOSw3IEBACiAJCXN5bmMgPSAwOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChzY2hlZF9mZWF0KExCX1dBS0VVUF9VUERBVEUpKSB7CisJaWYgKHNjaGVkX2ZlYXQoTEJfV0FLRVVQX1VQREFURSkgJiYgIXJvb3RfdGFza19ncm91cF9lbXB0eSgpKSB7CiAJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCiAJCXRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTIzNDUsNiArMjQwNywyMiBAQAogCWFjdGl2YXRlX3Rhc2socnEsIHAsIDEpOwogCXN1Y2Nlc3MgPSAxOwogCisJLyoKKwkgKiBPbmx5IGF0dHJpYnV0ZSBhY3R1YWwgd2FrZXVwcyBkb25lIGJ5IHRoaXMgdGFzay4KKwkgKi8KKwlpZiAoIWluX2ludGVycnVwdCgpKSB7CisJCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnJlbnQtPnNlOworCQl1NjQgc2FtcGxlID0gc2UtPnN1bV9leGVjX3J1bnRpbWU7CisKKwkJaWYgKHNlLT5sYXN0X3dha2V1cCkKKwkJCXNhbXBsZSAtPSBzZS0+bGFzdF93YWtldXA7CisJCWVsc2UKKwkJCXNhbXBsZSAtPSBzZS0+c3RhcnRfcnVudGltZTsKKwkJdXBkYXRlX2F2Zygmc2UtPmF2Z193YWtldXAsIHNhbXBsZSk7CisKKwkJc2UtPmxhc3Rfd2FrZXVwID0gc2UtPnN1bV9leGVjX3J1bnRpbWU7CisJfQorCiBvdXRfcnVubmluZzoKIAl0cmFjZV9zY2hlZF93YWtldXAocnEsIHAsIHN1Y2Nlc3MpOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgc3luYyk7CkBAIC0yMzU1LDggKzI0MzMsNiBAQAogCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKHJxLCBwKTsKICNlbmRpZgogb3V0OgotCWN1cnJlbnQtPnNlLmxhc3Rfd2FrZXVwID0gY3VycmVudC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKLQogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogCiAJcmV0dXJuIHN1Y2Nlc3M7CkBAIC0yMzg2LDYgKzI0NjIsOCBAQAogCXAtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZQk9IDA7CiAJcC0+c2UubGFzdF93YWtldXAJCT0gMDsKIAlwLT5zZS5hdmdfb3ZlcmxhcAkJPSAwOworCXAtPnNlLnN0YXJ0X3J1bnRpbWUJCT0gMDsKKwlwLT5zZS5hdmdfd2FrZXVwCQk9IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHk7CiAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXAtPnNlLndhaXRfc3RhcnQJCT0gMDsKQEAgLTI0NDgsNiArMjUyNiw4IEBACiAJLyogV2FudCB0byBzdGFydCB3aXRoIGtlcm5lbCBwcmVlbXB0aW9uIGRpc2FibGVkLiAqLwogCXRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgPSAxOwogI2VuZGlmCisJcGxpc3Rfbm9kZV9pbml0KCZwLT5wdXNoYWJsZV90YXNrcywgTUFYX1BSSU8pOworCiAJcHV0X2NwdSgpOwogfQogCkBAIC0yNDkxLDcgKzI1NzEsNyBAQAogI2lmZGVmIENPTkZJR19QUkVFTVBUX05PVElGSUVSUwogCiAvKioKLSAqIHByZWVtcHRfbm90aWZpZXJfcmVnaXN0ZXIgLSB0ZWxsIG1lIHdoZW4gY3VycmVudCBpcyBiZWluZyBiZWluZyBwcmVlbXB0ZWQgJiByZXNjaGVkdWxlZAorICogcHJlZW1wdF9ub3RpZmllcl9yZWdpc3RlciAtIHRlbGwgbWUgd2hlbiBjdXJyZW50IGlzIGJlaW5nIHByZWVtcHRlZCAmIHJlc2NoZWR1bGVkCiAgKiBAbm90aWZpZXI6IG5vdGlmaWVyIHN0cnVjdCB0byByZWdpc3RlcgogICovCiB2b2lkIHByZWVtcHRfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IHByZWVtcHRfbm90aWZpZXIgKm5vdGlmaWVyKQpAQCAtMjU4OCw2ICsyNjY4LDEyIEBACiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBycS0+cHJldl9tbTsKIAlsb25nIHByZXZfc3RhdGU7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBwb3N0X3NjaGVkdWxlID0gMDsKKworCWlmIChjdXJyZW50LT5zY2hlZF9jbGFzcy0+bmVlZHNfcG9zdF9zY2hlZHVsZSkKKwkJcG9zdF9zY2hlZHVsZSA9IGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5uZWVkc19wb3N0X3NjaGVkdWxlKHJxKTsKKyNlbmRpZgogCiAJcnEtPnByZXZfbW0gPSBOVUxMOwogCkBAIC0yNjA2LDcgKzI2OTIsNyBAQAogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKIAlmaW5pc2hfbG9ja19zd2l0Y2gocnEsIHByZXYpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoY3VycmVudC0+c2NoZWRfY2xhc3MtPnBvc3Rfc2NoZWR1bGUpCisJaWYgKHBvc3Rfc2NoZWR1bGUpCiAJCWN1cnJlbnQtPnNjaGVkX2NsYXNzLT5wb3N0X3NjaGVkdWxlKHJxKTsKICNlbmRpZgogCkBAIC0yOTEzLDYgKzI5OTksNyBAQAogCQkgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKIAkJICAgICBpbnQgKmFsbF9waW5uZWQpCiB7CisJaW50IHRza19jYWNoZV9ob3QgPSAwOwogCS8qCiAJICogV2UgZG8gbm90IG1pZ3JhdGUgdGFza3MgdGhhdCBhcmU6CiAJICogMSkgcnVubmluZyAob2J2aW91c2x5KSwgb3IKQEAgLTI5MzYsMTAgKzMwMjMsMTEgQEAKIAkgKiAyKSB0b28gbWFueSBiYWxhbmNlIGF0dGVtcHRzIGhhdmUgZmFpbGVkLgogCSAqLwogCi0JaWYgKCF0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKSB8fAotCQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpIHsKKwl0c2tfY2FjaGVfaG90ID0gdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCk7CisJaWYgKCF0c2tfY2FjaGVfaG90IHx8CisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQkJaWYgKHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpKSB7CisJCWlmICh0c2tfY2FjaGVfaG90KSB7CiAJCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ob3RfZ2FpbmVkW2lkbGVdKTsKIAkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZm9yY2VkX21pZ3JhdGlvbnMpOwogCQl9CkBAIC0yOTQ3LDcgKzMwMzUsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAodGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCkpIHsKKwlpZiAodHNrX2NhY2hlX2hvdCkgewogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTI5ODcsNiArMzA3NSwxNiBAQAogCXB1bGxlZCsrOwogCXJlbV9sb2FkX21vdmUgLT0gcC0+c2UubG9hZC53ZWlnaHQ7CiAKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCS8qCisJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUga2VybmVscworCSAqIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUgdGhlIGNyaXRpY2FsCisJICogc2VjdGlvbi4KKwkgKi8KKwlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkKKwkJZ290byBvdXQ7CisjZW5kaWYKKwogCS8qCiAJICogV2Ugb25seSB3YW50IHRvIHN0ZWFsIHVwIHRvIHRoZSBwcmVzY3JpYmVkIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkLgogCSAqLwpAQCAtMzAzMyw5ICszMTMxLDE1IEBACiAJCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7CiAJCWNsYXNzID0gY2xhc3MtPm5leHQ7CiAKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCQkvKgorCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQorCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKKwkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCisJCSAqLwogCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSAmJiB0aGlzX3JxLT5ucl9ydW5uaW5nKQogCQkJYnJlYWs7Ci0KKyNlbmRpZgogCX0gd2hpbGUgKGNsYXNzICYmIG1heF9sb2FkX21vdmUgPiB0b3RhbF9sb2FkX21vdmVkKTsKIAogCXJldHVybiB0b3RhbF9sb2FkX21vdmVkID4gMDsKQEAgLTMwODUsMjE1ICszMTg5LDU2NSBAQAogCiAJcmV0dXJuIDA7CiB9CisvKioqKioqKioqKiBIZWxwZXJzIGZvciBmaW5kX2J1c2llc3RfZ3JvdXAgKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgorICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKi8KK3N0cnVjdCBzZF9sYl9zdGF0cyB7CisJc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLwogCi0vKgotICogZmluZF9idXNpZXN0X2dyb3VwIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBidXNpZXN0IENQVSBncm91cCB3aXRoaW4gdGhlCi0gKiBkb21haW4uIEl0IGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGFtb3VudCBvZiB3ZWlnaHRlZCBsb2FkIHdoaWNoCi0gKiBzaG91bGQgYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlIHZpYSB0aGUgaW1iYWxhbmNlIHBhcmFtZXRlci4KKwkvKiogU3RhdGlzdGljcyBvZiB0aGlzIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQ7CisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyB0aGlzX25yX3J1bm5pbmc7CisKKwkvKiBTdGF0aXN0aWNzIG9mIHRoZSBidXNpZXN0IGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBtYXhfbG9hZDsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbnJfcnVubmluZzsKKworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGltYmFsYW5jZSBpbiB0aGlzIHNkICovCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKwlpbnQgcG93ZXJfc2F2aW5nc19iYWxhbmNlOyAvKiBJcyBwb3dlcnNhdmUgYmFsYW5jZSBuZWVkZWQgZm9yIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbjsgLyogTGVhc3QgbG9hZGVkIGdyb3VwIGluIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9sZWFkZXI7IC8qIEdyb3VwIHdoaWNoIHJlbGlldmVzIGdyb3VwX21pbiAqLworCXVuc2lnbmVkIGxvbmcgbWluX2xvYWRfcGVyX3Rhc2s7IC8qIGxvYWRfcGVyX3Rhc2sgaW4gZ3JvdXBfbWluICovCisJdW5zaWduZWQgbG9uZyBsZWFkZXJfbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9sZWFkZXIgKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX21pbiAqLworI2VuZGlmCit9OworCisvKioKKyAqIHNnX2xiX3N0YXRzIC0gc3RhdHMgb2YgYSBzY2hlZF9ncm91cCByZXF1aXJlZCBmb3IgbG9hZF9iYWxhbmNpbmcKKyAqLworc3RydWN0IHNnX2xiX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOyAvKkF2ZyBsb2FkIGFjcm9zcyB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2xvYWQ7IC8qIFRvdGFsIGxvYWQgb3ZlciB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV9ucl9ydW5uaW5nOyAvKiBOciB0YXNrcyBydW5uaW5nIGluIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgc3VtX3dlaWdodGVkX2xvYWQ7IC8qIFdlaWdodGVkIGxvYWQgb2YgZ3JvdXAncyB0YXNrcyAqLworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfY2FwYWNpdHk7CisJaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgYW4gaW1iYWxhbmNlIGluIHRoZSBncm91cCA/ICovCit9OworCisvKioKKyAqIGdyb3VwX2ZpcnN0X2NwdSAtIFJldHVybnMgdGhlIGZpcnN0IGNwdSBpbiB0aGUgY3B1bWFzayBvZiBhIHNjaGVkX2dyb3VwLgorICogQGdyb3VwOiBUaGUgZ3JvdXAgd2hvc2UgZmlyc3QgY3B1IGlzIHRvIGJlIHJldHVybmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncm91cF9maXJzdF9jcHUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCkKK3sKKwlyZXR1cm4gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Cit9CisKKy8qKgorICogZ2V0X3NkX2xvYWRfaWR4IC0gT2J0YWluIHRoZSBsb2FkIGluZGV4IGZvciBhIGdpdmVuIHNjaGVkIGRvbWFpbi4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBsb2FkX2lkeCBpcyB0byBiZSBvYnRhaW5lZC4KKyAqIEBpZGxlOiBUaGUgSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBmb3Igd2hvc2Ugc2QgbG9hZF9pY3ggaXMgb2J0YWluZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF9zZF9sb2FkX2lkeChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwkJCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJaW50IGxvYWRfaWR4OworCisJc3dpdGNoIChpZGxlKSB7CisJY2FzZSBDUFVfTk9UX0lETEU6CisJCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OworCQlicmVhazsKKworCWNhc2UgQ1BVX05FV0xZX0lETEU6CisJCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsb2FkX2lkeCA9IHNkLT5pZGxlX2lkeDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxvYWRfaWR4OworfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorLyoqCisgKiBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBJbml0aWFsaXplIHBvd2VyIHNhdmluZ3Mgc3RhdGlzdGljcyBmb3IKKyAqIHRoZSBnaXZlbiBzY2hlZF9kb21haW4sIGR1cmluZyBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBAc2Q6IFNjaGVkIGRvbWFpbiB3aG9zZSBwb3dlci1zYXZpbmdzIHN0YXRpc3RpY3MgYXJlIHRvIGJlIGluaXRpYWxpemVkLgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBmb3Igc2QuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBhdCB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwkvKgorCSAqIEJ1c3kgcHJvY2Vzc29ycyB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwb3dlciBzYXZpbmdzCisJICogYmFsYW5jZS4KKwkgKi8KKwlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwgIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKKwllbHNlIHsKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOworCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gVUxPTkdfTUFYOworCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gMDsKKwl9Cit9CisKKy8qKgorICogdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBVcGRhdGUgdGhlIHBvd2VyIHNhdmluZyBzdGF0cyBmb3IgYQorICogc2NoZWRfZG9tYWluIHdoaWxlIHBlcmZvcm1pbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQGdyb3VwOiBzY2hlZF9ncm91cCBiZWxvbmdpbmcgdG8gdGhlIHNjaGVkX2RvbWFpbiB1bmRlciBjb25zaWRlcmF0aW9uLgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCisgKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGUgQ1BVIGZvciB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nCisgKiAJCWxvYWQgYmFsYW5jaW5nID8KKyAqIEBzZ3M6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIGdyb3VwLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGxvY2FsIGdyb3VwIGlzIGlkbGUgb3IgY29tcGxldGVseSBsb2FkZWQKKwkgKiBubyBuZWVkIHRvIGRvIHBvd2VyIHNhdmluZ3MgYmFsYW5jZSBhdCB0aGlzIGRvbWFpbgorCSAqLworCWlmIChsb2NhbF9ncm91cCAmJiAoc2RzLT50aGlzX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkJCSFzZHMtPnRoaXNfbnJfcnVubmluZykpCisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKKworCS8qCisJICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAorCSAqIGRvbid0IGluY2x1ZGUgdGhhdCBncm91cCBpbiBwb3dlciBzYXZpbmdzIGNhbGN1bGF0aW9ucworCSAqLworCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgfHwKKwkJc2dzLT5zdW1fbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8CisJCSFzZ3MtPnN1bV9ucl9ydW5uaW5nKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaGFzIHRoZSBsZWFzdCBub24taWRsZSBsb2FkLgorCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCisJICogZm9yIHNhdmluZyBwb3dlcgorCSAqLworCWlmICgoc2dzLT5zdW1fbnJfcnVubmluZyA8IHNkcy0+bWluX25yX3J1bm5pbmcpIHx8CisJICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bWluX25yX3J1bm5pbmcgJiYKKwkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPiBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9taW4pKSkgeworCQlzZHMtPmdyb3VwX21pbiA9IGdyb3VwOworCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKKwkJc2RzLT5taW5fbG9hZF9wZXJfdGFzayA9IHNncy0+c3VtX3dlaWdodGVkX2xvYWQgLworCQkJCQkJc2dzLT5zdW1fbnJfcnVubmluZzsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaXMgYWxtb3N0IG5lYXIgaXRzCisJICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCisJICogZnJvbSBvdGhlciBncm91cCBhbmQgc2F2ZSBtb3JlIHBvd2VyCisJICovCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZ3MtPmdyb3VwX2NhcGFjaXR5IC0gMSkKKwkJcmV0dXJuOworCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nIHx8CisJICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgJiYKKwkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPCBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpKSkgeworCQlzZHMtPmdyb3VwX2xlYWRlciA9IGdyb3VwOworCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKKwl9Cit9CisKKy8qKgorICogY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwIC0gQ2hlY2sgaWYgd2UgaGF2ZSBwb3RlbnRpYWwgdG8gcGVyZm9ybQorICoJc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuIElmIHllcywgc2V0IHRoZSBidXNpZXN0IGdyb3VwIHRvIGJlCisgKgl0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIGluIHRoZSBzY2hlZF9kb21haW4sIHNvIHRoYXQgaXQncyBDUFVzIGNhbgorICoJYmUgcHV0IHRvIGlkbGUuCisgKgorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCisgKgl1bmRlciBjb25zaWRlcmF0aW9uLgorICogQHRoaXNfY3B1OiBDcHUgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCisgKiBFbHNlIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlpZiAoIXNkcy0+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+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nOworCWlmIChzZHMuZ3JvdXBfaW1iKQorCQlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrID0KKwkJCW1pbihzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMuYXZnX2xvYWQpOwogCiAJLyoKIAkgKiBXZSdyZSB0cnlpbmcgdG8gZ2V0IGFsbCB0aGUgY3B1cyB0byB0aGUgYXZlcmFnZV9sb2FkLCBzbyB3ZSBkb24ndApAQCAtMzMwNiwxMDUgKzM3NjAsMjAgQEAKIAkgKiBieSBwdWxsaW5nIHRhc2tzIHRvIHVzLiBCZSBjYXJlZnVsIG9mIG5lZ2F0aXZlIG51bWJlcnMgYXMgdGhleSdsbAogCSAqIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcyB3aXRoIHVuc2lnbmVkIGxvbmdzLgogCSAqLwotCWlmIChtYXhfbG9hZCA8PSBidXNpZXN0X2xvYWRfcGVyX3Rhc2spCisJaWYgKHNkcy5tYXhfbG9hZCA8PSBzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAotCS8qCi0JICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKLQkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93Ci0JICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKLQkgKi8KLQlpZiAobWF4X2xvYWQgPCBhdmdfbG9hZCkgewotCQkqaW1iYWxhbmNlID0gMDsKLQkJZ290byBzbWFsbF9pbWJhbGFuY2U7Ci0JfQotCi0JLyogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUgKi8KLQltYXhfcHVsbCA9IG1pbihtYXhfbG9hZCAtIGF2Z19sb2FkLCBtYXhfbG9hZCAtIGJ1c2llc3RfbG9hZF9wZXJfdGFzayk7Ci0KLQkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLwotCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBidXNpZXN0LT5fX2NwdV9wb3dlciwKLQkJCQkoYXZnX2xvYWQgLSB0aGlzX2xvYWQpICogdGhpcy0+X19jcHVfcG93ZXIpCi0JCQkvIFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKgotCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKLQkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCi0JICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQotCSAqIG1vdmVkCi0JICovCi0JaWYgKCppbWJhbGFuY2UgPCBidXNpZXN0X2xvYWRfcGVyX3Rhc2spIHsKLQkJdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3csIHB3cl9tb3ZlOwotCQl1bnNpZ25lZCBpbnQgaW1ibjsKLQotc21hbGxfaW1iYWxhbmNlOgotCQlwd3JfbW92ZSA9IHB3cl9ub3cgPSAwOwotCQlpbWJuID0gMjsKLQkJaWYgKHRoaXNfbnJfcnVubmluZykgewotCQkJdGhpc19sb2FkX3Blcl90YXNrIC89IHRoaXNfbnJfcnVubmluZzsKLQkJCWlmIChidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPiB0aGlzX2xvYWRfcGVyX3Rhc2spCi0JCQkJaW1ibiA9IDE7Ci0JCX0gZWxzZQotCQkJdGhpc19sb2FkX3Blcl90YXNrID0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKLQotCQlpZiAobWF4X2xvYWQgLSB0aGlzX2xvYWQgKyBidXNpZXN0X2xvYWRfcGVyX3Rhc2sgPj0KLQkJCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogaW1ibikgewotCQkJKmltYmFsYW5jZSA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQkJCXJldHVybiBidXNpZXN0OwotCQl9Ci0KLQkJLyoKLQkJICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKLQkJICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQotCQkgKiBtb3ZpbmcgdGhlbS4KLQkJICovCi0KLQkJcHdyX25vdyArPSBidXNpZXN0LT5fX2NwdV9wb3dlciAqCi0JCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQpOwotCQlwd3Jfbm93ICs9IHRoaXMtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQpOwotCQlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLwotCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKGJ1c2llc3QsCi0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCWlmIChtYXhfbG9hZCA+IHRtcCkKLQkJCXB3cl9tb3ZlICs9IGJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4oYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBtYXhfbG9hZCAtIHRtcCk7Ci0KLQkJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KLQkJaWYgKG1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIgPAotCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCi0JCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCi0JCQkJCW1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIpOwotCQllbHNlCi0JCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCi0JCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCXB3cl9tb3ZlICs9IHRoaXMtPl9fY3B1X3Bvd2VyICoKLQkJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQgKyB0bXApOwotCQlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCi0JCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCi0JCQkqaW1iYWxhbmNlID0gYnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCX0KLQotCXJldHVybiBidXNpZXN0OworCS8qIExvb2tzIGxpa2UgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBDb21wdXRlIGl0ICovCisJY2FsY3VsYXRlX2ltYmFsYW5jZSgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKwlyZXR1cm4gc2RzLmJ1c2llc3Q7CiAKIG91dF9iYWxhbmNlZDoKLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJZ290byByZXQ7Ci0KLQlpZiAodGhpcyA9PSBncm91cF9sZWFkZXIgJiYgZ3JvdXBfbGVhZGVyICE9IGdyb3VwX21pbikgewotCQkqaW1iYWxhbmNlID0gbWluX2xvYWRfcGVyX3Rhc2s7Ci0JCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzID49IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkgewotCQkJY3B1X3JxKHRoaXNfY3B1KS0+cmQtPnNjaGVkX21jX3ByZWZlcnJlZF93YWtldXBfY3B1ID0KLQkJCQljcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXBfbGVhZGVyKSk7Ci0JCX0KLQkJcmV0dXJuIGdyb3VwX21pbjsKLQl9Ci0jZW5kaWYKKwkvKgorCSAqIFRoZXJlIGlzIG5vIG9idmlvdXMgaW1iYWxhbmNlLiBCdXQgY2hlY2sgaWYgd2UgY2FuIGRvIHNvbWUgYmFsYW5jaW5nCisJICogdG8gc2F2ZSBwb3dlci4KKwkgKi8KKwlpZiAoY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQorCQlyZXR1cm4gc2RzLmJ1c2llc3Q7CiByZXQ6CiAJKmltYmFsYW5jZSA9IDA7CiAJcmV0dXJuIE5VTEw7CkBAIC00MDU3LDYgKzQ0MjYsMTEgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQoreworCXJldHVybiAhcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7Cit9CisKIC8qCiAgKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCiAgKgpAQCAtNDExNCw3ICs0NDg4LDkgQEAKIAkgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQogCQlyZXR1cm47CiAjZW5kaWYKLQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSkKKwkvKiBEb24ndCBuZWVkIHRvIHJlYmFsYW5jZSB3aGlsZSBhdHRhY2hlZCB0byBOVUxMIGRvbWFpbiAqLworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpICYmCisJICAgIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCiAJCXJhaXNlX3NvZnRpcnEoU0NIRURfU09GVElSUSk7CiB9CiAKQEAgLTQ1MDgsMTEgKzQ4ODQsMzMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3sKKwlpZiAocHJldi0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKSB7CisJCXU2NCBydW50aW1lID0gcHJldi0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKworCQlydW50aW1lIC09IHByZXYtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZTsKKwkJcnVudGltZSA9IG1pbl90KHU2NCwgcnVudGltZSwgMipzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpOworCisJCS8qCisJCSAqIEluIG9yZGVyIHRvIGF2b2lkIGF2Z19vdmVybGFwIGdyb3dpbmcgc3RhbGUgd2hlbiB3ZSBhcmUKKwkJICogaW5kZWVkIG92ZXJsYXBwaW5nIGFuZCBoZW5jZSBub3QgZ2V0dGluZyBwdXQgdG8gc2xlZXAsIGdyb3cKKwkJICogdGhlIGF2Z19vdmVybGFwIG9uIHByZWVtcHRpb24uCisJCSAqCisJCSAqIFdlIHVzZSB0aGUgYXZlcmFnZSBwcmVlbXB0aW9uIHJ1bnRpbWUgYmVjYXVzZSB0aGF0CisJCSAqIGNvcnJlbGF0ZXMgdG8gdGhlIGFtb3VudCBvZiBjYWNoZSBmb290cHJpbnQgYSB0YXNrIGNhbgorCQkgKiBidWlsZCB1cC4KKwkJICovCisJCXVwZGF0ZV9hdmcoJnByZXYtPnNlLmF2Z19vdmVybGFwLCBydW50aW1lKTsKKwl9CisJcHJldi0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHByZXYpOworfQorCiAvKgogICogUGljayB1cCB0aGUgaGlnaGVzdC1wcmlvIHRhc2s6CiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICoKLXBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3BpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEpCiB7CiAJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzczsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC00NTg2LDggKzQ5ODQsOCBAQAogCWlmICh1bmxpa2VseSghcnEtPm5yX3J1bm5pbmcpKQogCQlpZGxlX2JhbGFuY2UoY3B1LCBycSk7CiAKLQlwcmV2LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgcHJldik7Ci0JbmV4dCA9IHBpY2tfbmV4dF90YXNrKHJxLCBwcmV2KTsKKwlwdXRfcHJldl90YXNrKHJxLCBwcmV2KTsKKwluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwpAQCAtNDY0Miw3ICs1MDQwLDcgQEAKIAkJICogYmV0d2VlbiBzY2hlZHVsZSBhbmQgbm93LgogCQkgKi8KIAkJYmFycmllcigpOwotCX0gd2hpbGUgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKTsKKwl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHByZWVtcHRfc2NoZWR1bGUpOwogCkBAIC00NjcxLDcgKzUwNjksNyBAQAogCQkgKiBiZXR3ZWVuIHNjaGVkdWxlIGFuZCBub3cuCiAJCSAqLwogCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpOworCX0gd2hpbGUgKG5lZWRfcmVzY2hlZCgpKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCkBAIC01MTQ1LDcgKzU1NDMsNyBAQAogCWlmIChpbmNyZW1lbnQgPiA0MCkKIAkJaW5jcmVtZW50ID0gNDA7CiAKLQluaWNlID0gUFJJT19UT19OSUNFKGN1cnJlbnQtPnN0YXRpY19wcmlvKSArIGluY3JlbWVudDsKKwluaWNlID0gVEFTS19OSUNFKGN1cnJlbnQpICsgaW5jcmVtZW50OwogCWlmIChuaWNlIDwgLTIwKQogCQluaWNlID0gLTIwOwogCWlmIChuaWNlID4gMTkpCkBAIC02NDIzLDcgKzY4MjEsNyBAQAogCQlpZiAoIXJxLT5ucl9ydW5uaW5nKQogCQkJYnJlYWs7CiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0JCW5leHQgPSBwaWNrX25leHRfdGFzayhycSwgcnEtPmN1cnIpOworCQluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwogCQlpZiAoIW5leHQpCiAJCQlicmVhazsKIAkJbmV4dC0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIG5leHQpOwpAQCAtODIxOCwxMSArODYxNiwxNSBAQAogCV9fc2V0X2JpdChNQVhfUlRfUFJJTywgYXJyYXktPmJpdG1hcCk7CiAKICNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlydF9ycS0+aGlnaGVzdF9wcmlvID0gTUFYX1JUX1BSSU87CisJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gTUFYX1JUX1BSSU87CisjaWZkZWYgQ09ORklHX1NNUAorCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IE1BWF9SVF9QUklPOworI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSA9IDA7CiAJcnRfcnEtPm92ZXJsb2FkZWQgPSAwOworCXBsaXN0X2hlYWRfaW5pdCgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzLCAmcnEtPmxvY2spOwogI2VuZGlmCiAKIAlydF9ycS0+cnRfdGltZSA9IDA7CkBAIC05NTk4LDcgKzEwMDAwLDcgQEAKIAlzdHJ1Y3QgY3B1YWNjdCAqY2E7CiAJaW50IGNwdTsKIAotCWlmICghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKQorCWlmICh1bmxpa2VseSghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKSkKIAkJcmV0dXJuOwogCiAJY3B1ID0gdGFza19jcHUodHNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggYTBiMDg1Mi4uMzkwZjMzMiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTI0LDExICsyNCwxMSBAQAogICogVGhlIGNsb2NrOiBzY2hlZF9jbG9ja19jcHUoKSBpcyBtb25vdG9uaWMgcGVyIGNwdSwgYW5kIHNob3VsZCBiZSBzb21ld2hhdAogICogY29uc2lzdGVudCBiZXR3ZWVuIGNwdXMgKG5ldmVyIG1vcmUgdGhhbiAyIGppZmZpZXMgZGlmZmVyZW5jZSkuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgpAQCAtNDMsNiArNDMsNyBAQAogc3RhdGljIF9fcmVhZF9tb3N0bHkgaW50IHNjaGVkX2Nsb2NrX3J1bm5pbmc7CiAKICNpZmRlZiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSworX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOwogCiBzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSB7CiAJLyoKQEAgLTg3LDcgKzg4LDcgQEAKIH0KIAogLyoKLSAqIG1pbixtYXggZXhjZXB0IHRoZXkgdGFrZSB3cmFwcGluZyBpbnRvIGFjY291bnQKKyAqIG1pbiwgbWF4IGV4Y2VwdCB0aGV5IHRha2Ugd3JhcHBpbmcgaW50byBhY2NvdW50CiAgKi8KIAogc3RhdGljIGlubGluZSB1NjQgd3JhcF9taW4odTY0IHgsIHU2NCB5KQpAQCAtMTExLDE1ICsxMTIsMTMgQEAKIAlzNjQgZGVsdGEgPSBub3cgLSBzY2QtPnRpY2tfcmF3OwogCXU2NCBjbG9jaywgbWluX2Nsb2NrLCBtYXhfY2xvY2s7CiAKLQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7Ci0KIAlpZiAodW5saWtlbHkoZGVsdGEgPCAwKSkKIAkJZGVsdGEgPSAwOwogCiAJLyoKIAkgKiBzY2QtPmNsb2NrID0gY2xhbXAoc2NkLT50aWNrX2d0b2QgKyBkZWx0YSwKLQkgKiAJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCi0JICogCQkgICAgICBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CisJICoJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCisJICoJCSAgICAgIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKIAkgKi8KIAogCWNsb2NrID0gc2NkLT50aWNrX2d0b2QgKyBkZWx0YTsKQEAgLTE0OCwxMiArMTQ3LDEzIEBACiAKIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkID0gY3B1X3NkYyhjcHUpOwogCXU2NCBub3csIGNsb2NrLCB0aGlzX2Nsb2NrLCByZW1vdGVfY2xvY2s7CisJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZDsKIAotCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCi0JCXJldHVybiAwdWxsOworCWlmIChzY2hlZF9jbG9ja19zdGFibGUpCisJCXJldHVybiBzY2hlZF9jbG9jaygpOwogCisJc2NkID0gY3B1X3NkYyhjcHUpOwogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAlub3cgPSBzY2hlZF9jbG9jaygpOwogCkBAIC0xOTUsMTQgKzE5NSwxOCBAQAogCiB2b2lkIHNjaGVkX2Nsb2NrX3RpY2sodm9pZCkKIHsKLQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkID0gdGhpc19zY2QoKTsKKwlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkOwogCXU2NCBub3csIG5vd19ndG9kOwogCisJaWYgKHNjaGVkX2Nsb2NrX3N0YWJsZSkKKwkJcmV0dXJuOworCiAJaWYgKHVubGlrZWx5KCFzY2hlZF9jbG9ja19ydW5uaW5nKSkKIAkJcmV0dXJuOwogCiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCisJc2NkID0gdGhpc19zY2QoKTsKIAlub3dfZ3RvZCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlub3cgPSBzY2hlZF9jbG9jaygpOwogCkBAIC0yNTAsNyArMjU0LDcgQEAKIAlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KIAogdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2RlYnVnLmMgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwppbmRleCAxNmVlYmE0ZS4uNDY3Y2E3MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTI3Miw3ICsyNzIsNiBAQAogCVAobnJfc3dpdGNoZXMpOwogCVAobnJfbG9hZF91cGRhdGVzKTsKIAlQKG5yX3VuaW50ZXJydXB0aWJsZSk7Ci0JU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgImppZmZpZXMiLCBqaWZmaWVzKTsKIAlQTihuZXh0X2JhbGFuY2UpOwogCVAoY3Vyci0+cGlkKTsKIAlQTihjbG9jayk7CkBAIC0yODcsOSArMjg2LDYgQEAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogI2RlZmluZSBQKG4pIFNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlZFxuIiwgI24sIHJxLT5uKTsKIAotCVAoeWxkX2V4cF9lbXB0eSk7Ci0JUCh5bGRfYWN0X2VtcHR5KTsKLQlQKHlsZF9ib3RoX2VtcHR5KTsKIAlQKHlsZF9jb3VudCk7CiAKIAlQKHNjaGVkX3N3aXRjaCk7CkBAIC0zMTQsNyArMzEwLDcgQEAKIAl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCWludCBjcHU7CiAKLQlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOCwgJXMgJS4qc1xuIiwKKwlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOSwgJXMgJS4qc1xuIiwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKIAkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwpAQCAtMzI1LDYgKzMyMSw3IEBACiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZFxuIiwgI3gsIChsb25nIGxvbmcpKHgpKQogI2RlZmluZSBQTih4KSBcCiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZC4lMDZsZFxuIiwgI3gsIFNQTElUX05TKHgpKQorCVAoamlmZmllcyk7CiAJUE4oc3lzY3RsX3NjaGVkX2xhdGVuY3kpOwogCVBOKHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkpOwogCVBOKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOwpAQCAtMzk3LDYgKzM5NCw3IEBACiAJUE4oc2UudnJ1bnRpbWUpOwogCVBOKHNlLnN1bV9leGVjX3J1bnRpbWUpOwogCVBOKHNlLmF2Z19vdmVybGFwKTsKKwlQTihzZS5hdmdfd2FrZXVwKTsKIAogCW5yX3N3aXRjaGVzID0gcC0+bnZjc3cgKyBwLT5uaXZjc3c7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDA1NjZmMmEuLjM4MTZmMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMTMxNCwxNiArMTMxNCw2MyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd2FrZXVwX2dyYW4oc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCisvKgorICogQWRhcHRpdmUgZ3JhbnVsYXJpdHkKKyAqCisgKiBzZS0+YXZnX3dha2V1cCBnaXZlcyB0aGUgYXZlcmFnZSB0aW1lIGEgdGFzayBydW5zIHVudGlsIGl0IGRvZXMgYSB3YWtldXAsCisgKiB3aXRoIHRoZSBsaW1pdCBvZiB3YWtldXBfZ3JhbiAtLSB3aGVuIGl0IG5ldmVyIGRvZXMgYSB3YWtldXAuCisgKgorICogU28gdGhlIHNtYWxsZXIgYXZnX3dha2V1cCBpcyB0aGUgZmFzdGVyIHdlIHdhbnQgdGhpcyB0YXNrIHRvIHByZWVtcHQsCisgKiBidXQgd2UgZG9uJ3Qgd2FudCB0byB0cmVhdCB0aGUgcHJlZW1wdGVlIHVuZmFpcmx5IGFuZCB0aGVyZWZvcmUgYWxsb3cgaXQKKyAqIHRvIHJ1biBmb3IgYXQgbGVhc3QgdGhlIGFtb3VudCBvZiB0aW1lIHdlJ2QgbGlrZSB0byBydW4uCisgKgorICogTk9URTogd2UgdXNlIDIqYXZnX3dha2V1cCB0byBpbmNyZWFzZSB0aGUgcHJvYmFiaWxpdHkgb2YgYWN0dWFsbHkgZG9pbmcgb25lCisgKgorICogTk9URTogd2UgdXNlICpucl9ydW5uaW5nIHRvIHNjYWxlIHdpdGggbG9hZCwgdGhpcyBuaWNlbHkgbWF0Y2hlcyB0aGUKKyAqICAgICAgIGRlZ3JhZGluZyBsYXRlbmN5IG9uIGxvYWQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCithZGFwdGl2ZV9ncmFuKHN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnIsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCXU2NCB0aGlzX3J1biA9IGN1cnItPnN1bV9leGVjX3J1bnRpbWUgLSBjdXJyLT5wcmV2X3N1bV9leGVjX3J1bnRpbWU7CisJdTY0IGV4cGVjdGVkX3dha2V1cCA9IDIqc2UtPmF2Z193YWtldXAgKiBjZnNfcnFfb2Yoc2UpLT5ucl9ydW5uaW5nOworCXU2NCBncmFuID0gMDsKKworCWlmICh0aGlzX3J1biA8IGV4cGVjdGVkX3dha2V1cCkKKwkJZ3JhbiA9IGV4cGVjdGVkX3dha2V1cCAtIHRoaXNfcnVuOworCisJcmV0dXJuIG1pbl90KHM2NCwgZ3Jhbiwgc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCit3YWtldXBfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGdyYW4gPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwogCisJaWYgKGNmc19ycV9vZihjdXJyKS0+Y3VyciAmJiBzY2hlZF9mZWF0KEFEQVBUSVZFX0dSQU4pKQorCQlncmFuID0gYWRhcHRpdmVfZ3JhbihjdXJyLCBzZSk7CisKIAkvKgotCSAqIE1vcmUgZWFzaWx5IHByZWVtcHQgLSBuaWNlIHRhc2tzLCB3aGlsZSBub3QgbWFraW5nIGl0IGhhcmRlciBmb3IKLQkgKiArIG5pY2UgdGFza3MuCisJICogU2luY2UgaXRzIGN1cnIgcnVubmluZyBub3csIGNvbnZlcnQgdGhlIGdyYW4gZnJvbSByZWFsLXRpbWUKKwkgKiB0byB2aXJ0dWFsLXRpbWUgaW4gaGlzIHVuaXRzLgogCSAqLwotCWlmICghc2NoZWRfZmVhdChBU1lNX0dSQU4pIHx8IHNlLT5sb2FkLndlaWdodCA+IE5JQ0VfMF9MT0FEKQotCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHksIHNlKTsKKwlpZiAoc2NoZWRfZmVhdChBU1lNX0dSQU4pKSB7CisJCS8qCisJCSAqIEJ5IHVzaW5nICdzZScgaW5zdGVhZCBvZiAnY3Vycicgd2UgcGVuYWxpemUgbGlnaHQgdGFza3MsIHNvCisJCSAqIHRoZXkgZ2V0IHByZWVtcHRlZCBlYXNpZXIuIFRoYXQgaXMsIGlmICdzZScgPCAnY3VycicgdGhlbgorCQkgKiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbCBiZSBsYXJnZXIsIHRoZXJlZm9yZSBwZW5hbGl6aW5nIHRoZQorCQkgKiBsaWdodGVyLCBpZiBvdG9oICdzZScgPiAnY3VycicgdGhlbiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbAorCQkgKiBiZSBzbWFsbGVyLCBhZ2FpbiBwZW5hbGl6aW5nIHRoZSBsaWdodGVyIHRhc2suCisJCSAqCisJCSAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGJ1ZGRpZXMgd2hlbiB0aGUgbGVmdG1vc3QKKwkJICogdGFzayBpcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgYnVkZHkuCisJCSAqLworCQlpZiAodW5saWtlbHkoc2UtPmxvYWQud2VpZ2h0ICE9IE5JQ0VfMF9MT0FEKSkKKwkJCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoZ3Jhbiwgc2UpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShjdXJyLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCisJCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKGdyYW4sIGN1cnIpOworCX0KIAogCXJldHVybiBncmFuOwogfQpAQCAtMTM1MCw3ICsxMzk3LDcgQEAKIAlpZiAodmRpZmYgPD0gMCkKIAkJcmV0dXJuIC0xOwogCi0JZ3JhbiA9IHdha2V1cF9ncmFuKGN1cnIpOworCWdyYW4gPSB3YWtldXBfZ3JhbihjdXJyLCBzZSk7CiAJaWYgKHZkaWZmID4gZ3JhbikKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKaW5kZXggZGE1ZDkzYi4uNzZmNjE3NSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKKysrIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKQEAgLTEsNSArMSw2IEBACiBTQ0hFRF9GRUFUKE5FV19GQUlSX1NMRUVQRVJTLCAxKQotU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDEpCitTQ0hFRF9GRUFUKE5PUk1BTElaRURfU0xFRVBFUiwgMCkKK1NDSEVEX0ZFQVQoQURBUFRJVkVfR1JBTiwgMSkKIFNDSEVEX0ZFQVQoV0FLRVVQX1BSRUVNUFQsIDEpCiBTQ0hFRF9GRUFUKFNUQVJUX0RFQklULCAxKQogU0NIRURfRkVBVChBRkZJTkVfV0FLRVVQUywgMSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYmFjMTA2MS4uYzc5ZGM3OCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTMsNiArMyw0MCBAQAogICogcG9saWNpZXMpCiAgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIHJ0X3JxLT5ycTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXJldHVybiBydF9zZS0+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+IDEpCisJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlpbmNfY3B1X2xvYWQocnEsIHAtPnNlLmxvYWQud2VpZ2h0KTsKIH0KIApAQCAtNzI4LDYgKzg2OSw4IEBACiAJdXBkYXRlX2N1cnJfcnQocnEpOwogCWRlcXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAorCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlkZWNfY3B1X2xvYWQocnEsIHAtPnNlLmxvYWQud2VpZ2h0KTsKIH0KIApAQCAtODc4LDcgKzEwMjEsNyBAQAogCXJldHVybiBuZXh0OwogfQogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqX3BpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCiB7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtOTAwLDYgKzEwNDMsMTggQEAKIAogCXAgPSBydF90YXNrX29mKHJ0X3NlKTsKIAlwLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOworCisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF90YXNrX3J0KHN0cnVjdCBycSAqcnEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gX3BpY2tfbmV4dF90YXNrX3J0KHJxKTsKKworCS8qIFRoZSBydW5uaW5nIHRhc2sgaXMgbmV2ZXIgZWxpZ2libGUgZm9yIHB1c2hpbmcgKi8KKwlpZiAocCkKKwkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKwogCXJldHVybiBwOwogfQogCkBAIC05MDcsNiArMTA2MiwxMyBAQAogewogCXVwZGF0ZV9jdXJyX3J0KHJxKTsKIAlwLT5zZS5leGVjX3N0YXJ0ID0gMDsKKworCS8qCisJICogVGhlIHByZXZpb3VzIHRhc2sgbmVlZHMgdG8gYmUgbWFkZSBlbGlnaWJsZSBmb3IgcHVzaGluZworCSAqIGlmIGl0IGlzIHN0aWxsIGFjdGl2ZQorCSAqLworCWlmIChwLT5zZS5vbl9ycSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTA3Miw3ICsxMjM0LDcgQEAKIAkJfQogCiAJCS8qIElmIHRoaXMgcnEgaXMgc3RpbGwgc3VpdGFibGUgdXNlIGl0LiAqLwotCQlpZiAobG93ZXN0X3JxLT5ydC5oaWdoZXN0X3ByaW8gPiB0YXNrLT5wcmlvKQorCQlpZiAobG93ZXN0X3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciA+IHRhc2stPnByaW8pCiAJCQlicmVhazsKIAogCQkvKiB0cnkgYWdhaW4gKi8KQEAgLTEwODMsNiArMTI0NSwzMSBAQAogCXJldHVybiBsb3dlc3RfcnE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19wdXNoYWJsZV90YXNrcyhzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiAhcGxpc3RfaGVhZF9lbXB0eSgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlpZiAoIWhhc19wdXNoYWJsZV90YXNrcyhycSkpCisJCXJldHVybiBOVUxMOworCisJcCA9IHBsaXN0X2ZpcnN0X2VudHJ5KCZycS0+cnQucHVzaGFibGVfdGFza3MsCisJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHB1c2hhYmxlX3Rhc2tzKTsKKworCUJVR19PTihycS0+Y3B1ICE9IHRhc2tfY3B1KHApKTsKKwlCVUdfT04odGFza19jdXJyZW50KHJxLCBwKSk7CisJQlVHX09OKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8PSAxKTsKKworCUJVR19PTighcC0+c2Uub25fcnEpOworCUJVR19PTighcnRfdGFzayhwKSk7CisKKwlyZXR1cm4gcDsKK30KKwogLyoKICAqIElmIHRoZSBjdXJyZW50IENQVSBoYXMgbW9yZSB0aGFuIG9uZSBSVCB0YXNrLCBzZWUgaWYgdGhlIG5vbgogICogcnVubmluZyB0YXNrIGNhbiBtaWdyYXRlIG92ZXIgdG8gYSBDUFUgdGhhdCBpcyBydW5uaW5nIGEgdGFzawpAQCAtMTA5MiwxMyArMTI3OSwxMSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF90YXNrOwogCXN0cnVjdCBycSAqbG93ZXN0X3JxOwotCWludCByZXQgPSAwOwotCWludCBwYXJhbm9pZCA9IFJUX01BWF9UUklFUzsKIAogCWlmICghcnEtPnJ0Lm92ZXJsb2FkZWQpCiAJCXJldHVybiAwOwogCi0JbmV4dF90YXNrID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgLTEpOworCW5leHRfdGFzayA9IHBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHJxKTsKIAlpZiAoIW5leHRfdGFzaykKIAkJcmV0dXJuIDA7CiAKQEAgLTExMjcsMTYgKzEzMTIsMzQgQEAKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCQkvKgogCQkgKiBmaW5kIGxvY2tfbG93ZXN0X3JxIHJlbGVhc2VzIHJxLT5sb2NrCi0JCSAqIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgbmV4dF90YXNrIGhhcyBjaGFuZ2VkLgotCQkgKiBJZiBpdCBoYXMsIHRoZW4gdHJ5IGFnYWluLgorCQkgKiBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5leHRfdGFzayBoYXMgbWlncmF0ZWQuCisJCSAqCisJCSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRhc2sgaXMgc3RpbGwgb24gdGhlIHNhbWUKKwkJICogcnVuLXF1ZXVlIGFuZCBpcyBhbHNvIHN0aWxsIHRoZSBuZXh0IHRhc2sgZWxpZ2libGUgZm9yCisJCSAqIHB1c2hpbmcuCiAJCSAqLwotCQl0YXNrID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgLTEpOwotCQlpZiAodW5saWtlbHkodGFzayAhPSBuZXh0X3Rhc2spICYmIHRhc2sgJiYgcGFyYW5vaWQtLSkgewotCQkJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7Ci0JCQluZXh0X3Rhc2sgPSB0YXNrOwotCQkJZ290byByZXRyeTsKKwkJdGFzayA9IHBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHJxKTsKKwkJaWYgKHRhc2tfY3B1KG5leHRfdGFzaykgPT0gcnEtPmNwdSAmJiB0YXNrID09IG5leHRfdGFzaykgeworCQkJLyoKKwkJCSAqIElmIHdlIGdldCBoZXJlLCB0aGUgdGFzayBoYXNudCBtb3ZlZCBhdCBhbGwsIGJ1dAorCQkJICogaXQgaGFzIGZhaWxlZCB0byBwdXNoLiAgV2Ugd2lsbCBub3QgdHJ5IGFnYWluLAorCQkJICogc2luY2UgdGhlIG90aGVyIGNwdXMgd2lsbCBwdWxsIGZyb20gdXMgd2hlbiB0aGV5CisJCQkgKiBhcmUgcmVhZHkuCisJCQkgKi8KKwkJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgbmV4dF90YXNrKTsKKwkJCWdvdG8gb3V0OwogCQl9Ci0JCWdvdG8gb3V0OworCisJCWlmICghdGFzaykKKwkJCS8qIE5vIG1vcmUgdGFza3MsIGp1c3QgZXhpdCAqLworCQkJZ290byBvdXQ7CisKKwkJLyoKKwkJICogU29tZXRoaW5nIGhhcyBzaGlmdGVkLCB0cnkgYWdhaW4uCisJCSAqLworCQlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKKwkJbmV4dF90YXNrID0gdGFzazsKKwkJZ290byByZXRyeTsKIAl9CiAKIAlkZWFjdGl2YXRlX3Rhc2socnEsIG5leHRfdGFzaywgMCk7CkBAIC0xMTQ3LDIzICsxMzUwLDEyIEBACiAKIAlkb3VibGVfdW5sb2NrX2JhbGFuY2UocnEsIGxvd2VzdF9ycSk7CiAKLQlyZXQgPSAxOwogb3V0OgogCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIFRPRE86IEN1cnJlbnRseSB3ZSBqdXN0IHVzZSB0aGUgc2Vjb25kIGhpZ2hlc3QgcHJpbyB0YXNrIG9uCi0gKiAgICAgICB0aGUgcXVldWUsIGFuZCBzdG9wIHdoZW4gaXQgY2FuJ3QgbWlncmF0ZSAob3IgdGhlcmUncwotICogICAgICAgbm8gbW9yZSBSVCB0YXNrcykuICBUaGVyZSBtYXkgYmUgYSBjYXNlIHdoZXJlIGEgbG93ZXIKLSAqICAgICAgIHByaW9yaXR5IFJUIHRhc2sgaGFzIGEgZGlmZmVyZW50IGFmZmluaXR5IHRoYW4gdGhlCi0gKiAgICAgICBoaWdoZXIgUlQgdGFzay4gSW4gdGhpcyBjYXNlIHRoZSBsb3dlciBSVCB0YXNrIGNvdWxkCi0gKiAgICAgICBwb3NzaWJseSBiZSBhYmxlIHRvIG1pZ3JhdGUgd2hlcmUgYXMgdGhlIGhpZ2hlciBwcmlvcml0eQotICogICAgICAgUlQgdGFzayBjb3VsZCBub3QuICBXZSBjdXJyZW50bHkgaWdub3JlIHRoaXMgaXNzdWUuCi0gKiAgICAgICBFbmhhbmNlbWVudHMgYXJlIHdlbGNvbWUhCi0gKi8KIHN0YXRpYyB2b2lkIHB1c2hfcnRfdGFza3Moc3RydWN0IHJxICpycSkKIHsKIAkvKiBwdXNoX3J0X3Rhc2sgd2lsbCByZXR1cm4gdHJ1ZSBpZiBpdCBtb3ZlZCBhbiBSVCAqLwpAQCAtMTE3NCwzMyArMTM2NiwzNSBAQAogc3RhdGljIGludCBwdWxsX3J0X3Rhc2soc3RydWN0IHJxICp0aGlzX3JxKQogewogCWludCB0aGlzX2NwdSA9IHRoaXNfcnEtPmNwdSwgcmV0ID0gMCwgY3B1OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm5leHQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCBycSAqc3JjX3JxOwogCiAJaWYgKGxpa2VseSghcnRfb3ZlcmxvYWRlZCh0aGlzX3JxKSkpCiAJCXJldHVybiAwOwogCi0JbmV4dCA9IHBpY2tfbmV4dF90YXNrX3J0KHRoaXNfcnEpOwotCiAJZm9yX2VhY2hfY3B1KGNwdSwgdGhpc19ycS0+cmQtPnJ0b19tYXNrKSB7CiAJCWlmICh0aGlzX2NwdSA9PSBjcHUpCiAJCQljb250aW51ZTsKIAogCQlzcmNfcnEgPSBjcHVfcnEoY3B1KTsKKworCQkvKgorCQkgKiBEb24ndCBib3RoZXIgdGFraW5nIHRoZSBzcmNfcnEtPmxvY2sgaWYgdGhlIG5leHQgaGlnaGVzdAorCQkgKiB0YXNrIGlzIGtub3duIHRvIGJlIGxvd2VyLXByaW9yaXR5IHRoYW4gb3VyIGN1cnJlbnQgdGFzay4KKwkJICogVGhpcyBtYXkgbG9vayByYWN5LCBidXQgaWYgdGhpcyB2YWx1ZSBpcyBhYm91dCB0byBnbworCQkgKiBsb2dpY2FsbHkgaGlnaGVyLCB0aGUgc3JjX3JxIHdpbGwgcHVzaCB0aGlzIHRhc2sgYXdheS4KKwkJICogQW5kIGlmIGl0cyBnb2luZyBsb2dpY2FsbHkgbG93ZXIsIHdlIGRvIG5vdCBjYXJlCisJCSAqLworCQlpZiAoc3JjX3JxLT5ydC5oaWdoZXN0X3ByaW8ubmV4dCA+PQorCQkgICAgdGhpc19ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIpCisJCQljb250aW51ZTsKKwogCQkvKgogCQkgKiBXZSBjYW4gcG90ZW50aWFsbHkgZHJvcCB0aGlzX3JxJ3MgbG9jayBpbgogCQkgKiBkb3VibGVfbG9ja19iYWxhbmNlLCBhbmQgYW5vdGhlciBDUFUgY291bGQKLQkJICogc3RlYWwgb3VyIG5leHQgdGFzayAtIGhlbmNlIHdlIG11c3QgY2F1c2UKLQkJICogdGhlIGNhbGxlciB0byByZWNhbGN1bGF0ZSB0aGUgbmV4dCB0YXNrCi0JCSAqIGluIHRoYXQgY2FzZToKKwkJICogYWx0ZXIgdGhpc19ycQogCQkgKi8KLQkJaWYgKGRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKSkgewotCQkJc3RydWN0IHRhc2tfc3RydWN0ICpvbGRfbmV4dCA9IG5leHQ7Ci0KLQkJCW5leHQgPSBwaWNrX25leHRfdGFza19ydCh0aGlzX3JxKTsKLQkJCWlmIChuZXh0ICE9IG9sZF9uZXh0KQotCQkJCXJldCA9IDE7Ci0JCX0KKwkJZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpOwogCiAJCS8qCiAJCSAqIEFyZSB0aGVyZSBzdGlsbCBwdWxsYWJsZSBSVCB0YXNrcz8KQEAgLTEyMTQsNyArMTQwOCw3IEBACiAJCSAqIERvIHdlIGhhdmUgYW4gUlQgdGFzayB0aGF0IHByZWVtcHRzCiAJCSAqIHRoZSB0by1iZS1zY2hlZHVsZWQgdGFzaz8KIAkJICovCi0JCWlmIChwICYmICghbmV4dCB8fCAocC0+cHJpbyA8IG5leHQtPnByaW8pKSkgeworCQlpZiAocCAmJiAocC0+cHJpbyA8IHRoaXNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKSkgewogCQkJV0FSTl9PTihwID09IHNyY19ycS0+Y3Vycik7CiAJCQlXQVJOX09OKCFwLT5zZS5vbl9ycSk7CiAKQEAgLTEyMjQsMTIgKzE0MTgsOSBAQAogCQkJICogVGhpcyBpcyBqdXN0IHRoYXQgcCBpcyB3YWtlaW5nIHVwIGFuZCBoYXNuJ3QKIAkJCSAqIGhhZCBhIGNoYW5jZSB0byBzY2hlZHVsZS4gV2Ugb25seSBwdWxsCiAJCQkgKiBwIGlmIGl0IGlzIGxvd2VyIGluIHByaW9yaXR5IHRoYW4gdGhlCi0JCQkgKiBjdXJyZW50IHRhc2sgb24gdGhlIHJ1biBxdWV1ZSBvcgotCQkJICogdGhpc19ycSBuZXh0IHRhc2sgaXMgbG93ZXIgaW4gcHJpbyB0aGFuCi0JCQkgKiB0aGUgY3VycmVudCB0YXNrIG9uIHRoYXQgcnEuCisJCQkgKiBjdXJyZW50IHRhc2sgb24gdGhlIHJ1biBxdWV1ZQogCQkJICovCi0JCQlpZiAocC0+cHJpbyA8IHNyY19ycS0+Y3Vyci0+cHJpbyB8fAotCQkJICAgIChuZXh0ICYmIG5leHQtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8pKQorCQkJaWYgKHAtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8pCiAJCQkJZ290byBza2lwOwogCiAJCQlyZXQgPSAxOwpAQCAtMTI0MiwxMyArMTQzMyw3IEBACiAJCQkgKiBjYXNlIHRoZXJlJ3MgYW4gZXZlbiBoaWdoZXIgcHJpbyB0YXNrCiAJCQkgKiBpbiBhbm90aGVyIHJ1bnF1ZXVlLiAobG93IGxpa2VseWhvb2QKIAkJCSAqIGJ1dCBwb3NzaWJsZSkKLQkJCSAqCi0JCQkgKiBVcGRhdGUgbmV4dCBzbyB0aGF0IHdlIHdvbid0IHBpY2sgYSB0YXNrCi0JCQkgKiBvbiBhbm90aGVyIGNwdSB3aXRoIGEgcHJpb3JpdHkgbG93ZXIgKG9yIGVxdWFsKQotCQkJICogdGhhbiB0aGUgb25lIHdlIGp1c3QgcGlja2VkLgogCQkJICovCi0JCQluZXh0ID0gcDsKLQogCQl9CiAgc2tpcDoKIAkJZG91YmxlX3VubG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSk7CkBAIC0xMjYwLDI0ICsxNDQ1LDI3IEBACiBzdGF0aWMgdm9pZCBwcmVfc2NoZWR1bGVfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogewogCS8qIFRyeSB0byBwdWxsIFJUIHRhc2tzIGhlcmUgaWYgd2UgbG93ZXIgdGhpcyBycSdzIHByaW8gKi8KLQlpZiAodW5saWtlbHkocnRfdGFzayhwcmV2KSkgJiYgcnEtPnJ0LmhpZ2hlc3RfcHJpbyA+IHByZXYtPnByaW8pCisJaWYgKHVubGlrZWx5KHJ0X3Rhc2socHJldikpICYmIHJxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciA+IHByZXYtPnByaW8pCiAJCXB1bGxfcnRfdGFzayhycSk7CiB9CiAKKy8qCisgKiBhc3N1bWVzIHJxLT5sb2NrIGlzIGhlbGQKKyAqLworc3RhdGljIGludCBuZWVkc19wb3N0X3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEpCit7CisJcmV0dXJuIGhhc19wdXNoYWJsZV90YXNrcyhycSk7Cit9CisKIHN0YXRpYyB2b2lkIHBvc3Rfc2NoZWR1bGVfcnQoc3RydWN0IHJxICpycSkKIHsKIAkvKgotCSAqIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBydF90YXNrIHF1ZXVlZCwgdGhlbgotCSAqIHNlZSBpZiB3ZSBjYW4gcHVzaCB0aGUgb3RoZXIgcnRfdGFza3Mgb2ZmIHRvIG90aGVyIENQVVMuCi0JICogTm90ZSB3ZSBtYXkgcmVsZWFzZSB0aGUgcnEgbG9jaywgYW5kIHNpbmNlCi0JICogdGhlIGxvY2sgd2FzIG93bmVkIGJ5IHByZXYsIHdlIG5lZWQgdG8gcmVsZWFzZSBpdAotCSAqIGZpcnN0IHZpYSBmaW5pc2hfbG9ja19zd2l0Y2ggYW5kIHRoZW4gcmVhcXVpcmUgaXQgaGVyZS4KKwkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGlmIG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQoKSBpbmRpY2F0ZXMgdGhhdAorCSAqIHdlIG5lZWQgdG8gcHVzaCB0YXNrcyBhd2F5CiAJICovCi0JaWYgKHVubGlrZWx5KHJxLT5ydC5vdmVybG9hZGVkKSkgewotCQlzcGluX2xvY2tfaXJxKCZycS0+bG9jayk7Ci0JCXB1c2hfcnRfdGFza3MocnEpOwotCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKLQl9CisJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOworCXB1c2hfcnRfdGFza3MocnEpOworCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogfQogCiAvKgpAQCAtMTI4OCw3ICsxNDc2LDggQEAKIHsKIAlpZiAoIXRhc2tfcnVubmluZyhycSwgcCkgJiYKIAkgICAgIXRlc3RfdHNrX25lZWRfcmVzY2hlZChycS0+Y3VycikgJiYKLQkgICAgcnEtPnJ0Lm92ZXJsb2FkZWQpCisJICAgIGhhc19wdXNoYWJsZV90YXNrcyhycSkgJiYKKwkgICAgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKIAkJcHVzaF9ydF90YXNrcyhycSk7CiB9CiAKQEAgLTEzMjQsNiArMTUxMywyNCBAQAogCWlmIChwLT5zZS5vbl9ycSAmJiAod2VpZ2h0ICE9IHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCkpIHsKIAkJc3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7CiAKKwkJaWYgKCF0YXNrX2N1cnJlbnQocnEsIHApKSB7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHdlIGRlcXVldWUgdGhpcyB0YXNrIGZyb20gdGhlIHB1c2hhYmxlIGxpc3QKKwkJCSAqIGJlZm9yZSBnb2luZyBmdXJ0aGVyLiAgSXQgd2lsbCBlaXRoZXIgcmVtYWluIG9mZiBvZgorCQkJICogdGhlIGxpc3QgYmVjYXVzZSB3ZSBhcmUgbm8gbG9uZ2VyIHB1c2hhYmxlLCBvciBpdAorCQkJICogd2lsbCBiZSByZXF1ZXVlZC4KKwkJCSAqLworCQkJaWYgKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCisJCQkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKKworCQkJLyoKKwkJCSAqIFJlcXVldWUgaWYgb3VyIHdlaWdodCBpcyBjaGFuZ2luZyBhbmQgc3RpbGwgPiAxCisJCQkgKi8KKwkJCWlmICh3ZWlnaHQgPiAxKQorCQkJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKKwkJfQorCiAJCWlmICgocC0+cnQubnJfY3B1c19hbGxvd2VkIDw9IDEpICYmICh3ZWlnaHQgPiAxKSkgewogCQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeSsrOwogCQl9IGVsc2UgaWYgKChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKSAmJiAod2VpZ2h0IDw9IDEpKSB7CkBAIC0xMzMxLDcgKzE1MzgsNyBAQAogCQkJcnEtPnJ0LnJ0X25yX21pZ3JhdG9yeS0tOwogCQl9CiAKLQkJdXBkYXRlX3J0X21pZ3JhdGlvbihycSk7CisJCXVwZGF0ZV9ydF9taWdyYXRpb24oJnJxLT5ydCk7CiAJfQogCiAJY3B1bWFza19jb3B5KCZwLT5jcHVzX2FsbG93ZWQsIG5ld19tYXNrKTsKQEAgLTEzNDYsNyArMTU1Myw3IEBACiAKIAlfX2VuYWJsZV9ydW50aW1lKHJxKTsKIAotCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBycS0+cnQuaGlnaGVzdF9wcmlvKTsKKwljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKTsKIH0KIAogLyogQXNzdW1lcyBycS0+bG9jayBpcyBoZWxkICovCkBAIC0xNDM4LDcgKzE2NDUsNyBAQAogCQkgKiBjYW4gcmVsZWFzZSB0aGUgcnEgbG9jayBhbmQgcCBjb3VsZCBtaWdyYXRlLgogCQkgKiBPbmx5IHJlc2NoZWR1bGUgaWYgcCBpcyBzdGlsbCBvbiB0aGUgc2FtZSBydW5xdWV1ZS4KIAkJICovCi0JCWlmIChwLT5wcmlvID4gcnEtPnJ0LmhpZ2hlc3RfcHJpbyAmJiBycS0+Y3VyciA9PSBwKQorCQlpZiAocC0+cHJpbyA+IHJxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciAmJiBycS0+Y3VyciA9PSBwKQogCQkJcmVzY2hlZF90YXNrKHApOwogI2Vsc2UKIAkJLyogRm9yIFVQIHNpbXBseSByZXNjaGVkIG9uIGRyb3Agb2YgcHJpbyAqLwpAQCAtMTUwOSw2ICsxNzE2LDkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBycS0+Y3VycjsKIAogCXAtPnNlLmV4ZWNfc3RhcnQgPSBycS0+Y2xvY2s7CisKKwkvKiBUaGUgcnVubmluZyB0YXNrIGlzIG5ldmVyIGVsaWdpYmxlIGZvciBwdXNoaW5nICovCisJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBydF9zY2hlZF9jbGFzcyA9IHsKQEAgLTE1MzEsNiArMTc0MSw3IEBACiAJLnJxX29ubGluZSAgICAgICAgICAgICAgPSBycV9vbmxpbmVfcnQsCiAJLnJxX29mZmxpbmUgICAgICAgICAgICAgPSBycV9vZmZsaW5lX3J0LAogCS5wcmVfc2NoZWR1bGUJCT0gcHJlX3NjaGVkdWxlX3J0LAorCS5uZWVkc19wb3N0X3NjaGVkdWxlCT0gbmVlZHNfcG9zdF9zY2hlZHVsZV9ydCwKIAkucG9zdF9zY2hlZHVsZQkJPSBwb3N0X3NjaGVkdWxlX3J0LAogCS50YXNrX3dha2VfdXAJCT0gdGFza193YWtlX3VwX3J0LAogCS5zd2l0Y2hlZF9mcm9tCQk9IHN3aXRjaGVkX2Zyb21fcnQsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfc3RhdHMuaCBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCmluZGV4IGE4ZjkzZGQuLjMyZDJiZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oCisrKyBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCkBAIC00LDcgKzQsNyBAQAogICogYnVtcCB0aGlzIHVwIHdoZW4gY2hhbmdpbmcgdGhlIG91dHB1dCBmb3JtYXQgb3IgdGhlIG1lYW5pbmcgb2YgYW4gZXhpc3RpbmcKICAqIGZvcm1hdCwgc28gdGhhdCB0b29scyBjYW4gYWRhcHQgKG9yIGFib3J0KQogICovCi0jZGVmaW5lIFNDSEVEU1RBVF9WRVJTSU9OIDE0CisjZGVmaW5lIFNDSEVEU1RBVF9WRVJTSU9OIDE1CiAKIHN0YXRpYyBpbnQgc2hvd19zY2hlZHN0YXQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CkBAIC0yNiw5ICsyNiw4IEBACiAKIAkJLyogcnVucXVldWUtc3BlY2lmaWMgc3RhdHMgKi8KIAkJc2VxX3ByaW50ZihzZXEsCi0JCSAgICAiY3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCi0JCSAgICBjcHUsIHJxLT55bGRfYm90aF9lbXB0eSwKLQkJICAgIHJxLT55bGRfYWN0X2VtcHR5LCBycS0+eWxkX2V4cF9lbXB0eSwgcnEtPnlsZF9jb3VudCwKKwkJICAgICJjcHUlZCAldSAldSAldSAldSAldSAldSAlbGx1ICVsbHUgJWx1IiwKKwkJICAgIGNwdSwgcnEtPnlsZF9jb3VudCwKIAkJICAgIHJxLT5zY2hlZF9zd2l0Y2gsIHJxLT5zY2hlZF9jb3VudCwgcnEtPnNjaGVkX2dvaWRsZSwKIAkJICAgIHJxLT50dHd1X2NvdW50LCBycS0+dHR3dV9sb2NhbCwKIAkJICAgIHJxLT5ycV9jcHVfdGltZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCBmYWZlYjQ4Li5iMzg0MjNjIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKKysrIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCkBAIC0yMTksNiArMjE5LDcgQEAKIAl7IE5FVF9JUFY0X0NPTkZfQVJQX0lHTk9SRSwJCSJhcnBfaWdub3JlIiB9LAogCXsgTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTLAkicHJvbW90ZV9zZWNvbmRhcmllcyIgfSwKIAl7IE5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVCwJCSJhcnBfYWNjZXB0IiB9LAorCXsgTkVUX0lQVjRfQ09ORl9BUlBfTk9USUZZLAkJImFycF9ub3RpZnkiIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL01ha2VmaWxlIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKaW5kZXggOTA1YjBiNS4uMGIwYTYzNiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvTWFrZWZpbGUKKysrIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteSArPSB0aW1la2VlcGluZy5vIG50cC5vIGNsb2Nrc291cmNlLm8gamlmZmllcy5vIHRpbWVyX2xpc3Qubworb2JqLXkgKz0gdGltZWtlZXBpbmcubyBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8gdGltZWNvbXBhcmUubwogCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRCkJCSs9IGNsb2NrZXZlbnRzLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQkJKz0gdGljay1jb21tb24ubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKaW5kZXggZWEyZjQ4YS4uZDEzYmUyMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCkBAIC02OCw2ICs2OCwxNyBAQAogCWlmIChkZXYtPm1vZGUgIT0gbW9kZSkgewogCQlkZXYtPnNldF9tb2RlKG1vZGUsIGRldik7CiAJCWRldi0+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+ZnVuY3Rpb24pOwotCi0JdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOwotCS8qCi0JICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQotCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZAotCSAqIHRvIGJlIHRoZSBzYW1lIHRoaW5nIHRoZW4ganVzdCByZXR1cm46Ci0JICovCi0JaWYgKHRpbWVyLT5leHBpcmVzID09IGV4cGlyZXMgJiYgdGltZXJfcGVuZGluZyh0aW1lcikpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIF9fbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKTsKLX0KLQotRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOwotCi0vKioKICAqIGRlbF90aW1lciAtIGRlYWN0aXZlIGEgdGltZXIuCiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBkZWFjdGl2YXRlZAogICoKQEAgLTczMyw3ICs3NzIsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTChkZWxfdGltZXIpOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzY3LDcgKzgwNSw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotCiBFWFBPUlRfU1lNQk9MKHRyeV90b19kZWxfdGltZXJfc3luYyk7CiAKIC8qKgpAQCAtNzk2LDcgKzgzMyw2IEBACiAJCWNwdV9yZWxheCgpOwogCX0KIH0KLQogRVhQT1JUX1NZTUJPTChkZWxfdGltZXJfc3luYyk7CiAjZW5kaWYKIApAQCAtMTI2OCw3ICsxMzA0LDcgQEAKIAlleHBpcmUgPSB0aW1lb3V0ICsgamlmZmllczsKIAogCXNldHVwX3RpbWVyX29uX3N0YWNrKCZ0aW1lciwgcHJvY2Vzc190aW1lb3V0LCAodW5zaWduZWQgbG9uZyljdXJyZW50KTsKLQlfX21vZF90aW1lcigmdGltZXIsIGV4cGlyZSk7CisJX19tb2RfdGltZXIoJnRpbWVyLCBleHBpcmUsIGZhbHNlKTsKIAlzY2hlZHVsZSgpOwogCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXIuYyBiL2tlcm5lbC91c2VyLmMKaW5kZXggZmJiMzAwZS4uODUwZTBiYSAxMDA2NDQKLS0tIGEva2VybmVsL3VzZXIuYworKysgYi9rZXJuZWwvdXNlci5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIHN0cnVjdCB1c2VyX25hbWVzcGFjZSBpbml0X3VzZXJfbnMgPSB7CiAJLmtyZWYgPSB7Ci0JCS5yZWZjb3VudAk9IEFUT01JQ19JTklUKDEpLAorCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgyKSwKIAl9LAogCS5jcmVhdG9yID0gJnJvb3RfdXNlciwKIH07CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDAzYzJjMjQuLjU0YWFmNGYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0xMzYsMTIgKzEzNiw2IEBACiBjb25maWcgVEVYVFNFQVJDSF9GU00KIAl0cmlzdGF0ZQogCi0jCi0jIHBsaXN0IHN1cHBvcnQgaXMgc2VsZWN0I2VkIGlmIG5lZWRlZAotIwotY29uZmlnIFBMSVNUCi0JYm9vbGVhbgotCiBjb25maWcgSEFTX0lPTUVNCiAJYm9vbGVhbgogCWRlcGVuZHMgb24gIU5PX0lPTUVNCkBAIC0xNzQsNCArMTY4LDEwIEBACiAgICAgICAgYm9vbCAiRGlzYWJsZSBvYnNvbGV0ZSBjcHVtYXNrIGZ1bmN0aW9ucyIgaWYgREVCVUdfUEVSX0NQVV9NQVBTCiAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCiAKKyMKKyMgTmV0bGluayBhdHRyaWJ1dGUgcGFyc2luZyBzdXBwb3J0IGlzIHNlbGVjdCdlZCBpZiBuZWVkZWQKKyMKK2NvbmZpZyBOTEFUVFIKKwlib29sCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMWJjZjljZC4uOGZlZTBhMSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTg0Nyw2MCArODQ3LDcwIEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgRFlOQU1JQ19QUklOVEtfREVCVUcKLQlib29sICJFbmFibGUgZHluYW1pYyBwcmludGsoKSBjYWxsIHN1cHBvcnQiCitjb25maWcgRFlOQU1JQ19ERUJVRworCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIHN1cHBvcnQiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBQUklOVEsKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJc2VsZWN0IFBSSU5US19ERUJVRwogCWhlbHAKIAogCSAgQ29tcGlsZXMgZGVidWcgbGV2ZWwgbWVzc2FnZXMgaW50byB0aGUga2VybmVsLCB3aGljaCB3b3VsZCBub3QKIAkgIG90aGVyd2lzZSBiZSBhdmFpbGFibGUgYXQgcnVudGltZS4gVGhlc2UgbWVzc2FnZXMgY2FuIHRoZW4gYmUKLQkgIGVuYWJsZWQvZGlzYWJsZWQgb24gYSBwZXIgbW9kdWxlIGJhc2lzLiBUaGlzIG1lY2hhbmlzbSBpbXBsaWNpdGx5Ci0JICBlbmFibGVzIGFsbCBwcl9kZWJ1ZygpIGFuZCBkZXZfZGJnKCkgY2FsbHMuIFRoZSBpbXBhY3Qgb2YgdGhpcwotCSAgY29tcGlsZSBvcHRpb24gaXMgYSBsYXJnZXIga2VybmVsIHRleHQgc2l6ZSBvZiBhYm91dCAyJS4KKwkgIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gdmFyaW91cyBsZXZlbHMgb2Ygc2NvcGUgLSBwZXIgc291cmNlIGZpbGUsCisJICBmdW5jdGlvbiwgbW9kdWxlLCBmb3JtYXQgc3RyaW5nLCBhbmQgbGluZSBudW1iZXIuIFRoaXMgbWVjaGFuaXNtCisJICBpbXBsaWNpdGx5IGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZgorCSAgdGhpcyBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgogCiAJICBVc2FnZToKIAotCSAgRHluYW1pYyBkZWJ1Z2dpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgZGVidWdmcyBmaWxlLAotCSAgZHluYW1pY19wcmludGsvbW9kdWxlcy4gVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgbW9kdWxlcyB0aGF0Ci0JICBjYW4gYmUgZW5hYmxlZC4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyB0aGUgbW9kdWxlIG5hbWUsIGZvbGxvd2VkCi0JICBieSBhIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUgZmlyc3QgZmxhZyBpcyBhbHdheXMgdGhlCi0JICAnZW5hYmxlZCcgZmxhZy4gRm9yIGV4YW1wbGU6CisJICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIHZpYSB0aGUgJ2R5bmFtaWNfZGVidWcvZGRlYnVnJyBmaWxlLAorCSAgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSAnZGVidWdmcycgZmlsZXN5c3RlbS4gVGh1cywgdGhlIGRlYnVnZnMKKwkgIGZpbGVzeXN0ZW0gbXVzdCBmaXJzdCBiZSBtb3VudGVkIGJlZm9yZSBtYWtpbmcgdXNlIG9mIHRoaXMgZmVhdHVyZS4KKwkgIFdlIHJlZmVyIHRoZSBjb250cm9sIGZpbGUgYXM6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1Zy4gVGhpcworCSAgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMgdGhhdCBjYW4gYmUgZW5hYmxlZC4gVGhlCisJICBmb3JtYXQgZm9yIGVhY2ggbGluZSBvZiB0aGUgZmlsZSBpczoKIAotCQk8bW9kdWxlX25hbWU+IDxlbmFibGVkPTAvMT4KLQkJCQkuCi0JCQkJLgotCQkJCS4KKwkJZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CiAKLQkgIDxtb2R1bGVfbmFtZT4gOiBOYW1lIG9mIHRoZSBtb2R1bGUgaW4gd2hpY2ggdGhlIGRlYnVnIGNhbGwgcmVzaWRlcwotCSAgPGVuYWJsZWQ9MC8xPiA6IHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGFyZSBlbmFibGVkIG9yIG5vdAorCSAgZmlsZW5hbWUgOiBzb3VyY2UgZmlsZSBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBsaW5lbm8gOiBsaW5lIG51bWJlciBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBtb2R1bGUgOiBtb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZGVidWcgc3RhdGVtZW50CisJICBmdW5jdGlvbiA6IGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGRlYnVnIHN0YXRlbWVudAorICAgICAgICAgIGZsYWdzIDogJ3AnIG1lYW5zIHRoZSBsaW5lIGlzIHR1cm5lZCAnb24nIGZvciBwcmludGluZworICAgICAgICAgIGZvcm1hdCA6IHRoZSBmb3JtYXQgdXNlZCBmb3IgdGhlIGRlYnVnIHN0YXRlbWVudAogCiAJICBGcm9tIGEgbGl2ZSBzeXN0ZW06CiAKLQkJc25kX2hkYV9pbnRlbCBlbmFibGVkPTAKLQkJZml4dXAgZW5hYmxlZD0wCi0JCWRyaXZlciBlbmFibGVkPTAKKwkJbnVsbGFyYm9yOn4gIyBjYXQgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCisJCSMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisJCWZzL2Fpby5jOjIyMiBbYWlvXV9fcHV0X2lvY3R4IC0gIl9fcHV0X2lvY3R4OlwwNDBmcmVlaW5nXDA0MCVwXDAxMiIKKwkJZnMvYWlvLmM6MjQ4IFthaW9daW9jdHhfYWxsb2MgLSAiRU5PTUVNOlwwNDBucl9ldmVudHNcMDQwdG9vXDA0MGhpZ2hcMDEyIgorCQlmcy9haW8uYzoxNzcwIFthaW9dc3lzX2lvX2NhbmNlbCAtICJjYWxsaW5nXDA0MGNhbmNlbFwwMTIiCiAKLQkgIEVuYWJsZSBhIG1vZHVsZToKKwkgIEV4YW1wbGUgdXNhZ2U6CiAKLQkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MSA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZW5hYmxlIHRoZSBtZXNzYWdlIGF0IGxpbmUgMTYwMyBvZiBmaWxlIHN2Y3NvY2suYworCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIERpc2FibGUgYSBtb2R1bGU6CisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIGZpbGUgc3Zjc29jay5jCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICAJJGVjaG8gInNldCBlbmFibGVkPTAgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIHRoZSBORlMgc2VydmVyIG1vZHVsZQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRW5hYmxlIGFsbCBtb2R1bGVzOgorCQkvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkJJGVjaG8gInNldCBlbmFibGVkPTEgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZGlzYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzIC1wJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRGlzYWJsZSBhbGwgbW9kdWxlczoKLQotCQkkZWNobyAic2V0IGVuYWJsZWQ9MCBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcwotCi0JICBGaW5hbGx5LCBwYXNzaW5nICJkeW5hbWljX3ByaW50ayIgYXQgdGhlIGNvbW1hbmQgbGluZSBlbmFibGVzCi0JICBkZWJ1Z2dpbmcgZm9yIGFsbCBtb2R1bGVzLiBUaGlzIG1vZGUgY2FuIGJlIHR1cm5lZCBvZmYgdmlhIHRoZSBhYm92ZQotCSAgZGlzYWJsZSBjb21tYW5kLgorCSAgU2VlIERvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMzJiMGU2NC4uOGJkYzY0NyAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtMTEsNyArMTEsOCBAQAogCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIFwKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gcHJpb190cmVlLm8gXAogCSBzaGExLm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCi0JIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBpc19zaW5nbGVfdGhyZWFkZWQubworCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAorCSBpc19zaW5nbGVfdGhyZWFkZWQubyBwbGlzdC5vCiAKIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCkBAIC00MCw3ICs0MSw2IEBACiBsaWItJChDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUKSArPSBmaW5kX2xhc3RfYml0Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0hXRUlHSFQpICs9IGh3ZWlnaHQubwogb2JqLSQoQ09ORklHX0xPQ0tfS0VSTkVMKSArPSBrZXJuZWxfbG9jay5vCi1vYmotJChDT05GSUdfUExJU1QpICs9IHBsaXN0Lm8KIG9iai0kKENPTkZJR19ERUJVR19QUkVFTVBUKSArPSBzbXBfcHJvY2Vzc29yX2lkLm8KIG9iai0kKENPTkZJR19ERUJVR19MSVNUKSArPSBsaXN0X2RlYnVnLm8KIG9iai0kKENPTkZJR19ERUJVR19PQkpFQ1RTKSArPSBkZWJ1Z29iamVjdHMubwpAQCAtODIsNyArODIsOSBAQAogCiBvYmotJChDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSykgKz0gc3lzY2FsbC5vCiAKLW9iai0kKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykgKz0gZHluYW1pY19wcmludGsubworb2JqLSQoQ09ORklHX0RZTkFNSUNfREVCVUcpICs9IGR5bmFtaWNfZGVidWcubworCitvYmotJChDT05GSUdfTkxBVFRSKSArPSBubGF0dHIubwogCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19kZWJ1Zy5jIGIvbGliL2R5bmFtaWNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMxMzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2R5bmFtaWNfZGVidWcuYwpAQCAtMCwwICsxLDc2OSBAQAorLyoKKyAqIGxpYi9keW5hbWljX2RlYnVnLmMKKyAqCisgKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKKyAqIHNvdXJjZSBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KKyAqIEJ5IEdyZWcgQmFua3MgPGduYkBtZWxib3VybmUuc2dpLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+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+aGFzaDIpOwotCX0KLQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwpCi0JCXNldF9hbGwodHJ1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChkeW5hbWljX3ByaW50a19pbml0KTsKLS8qIG1heSB3YW50IHRvIG1vdmUgdGhpcyBlYXJsaWVyIHNvIHdlIGNhbiBnZXQgdHJhY2VzIGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpZiAoc3RyKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOwotCXJldHVybiAwOwotfQotLyogVXNlIGVhcmx5X3BhcmFtKCksIHNvIHdlIGNhbiBnZXQgZGVidWcgb3V0cHV0IGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi1lYXJseV9wYXJhbSgiZHluYW1pY19wcmludGsiLCBkeW5hbWljX3ByaW50a19zZXR1cCk7CmRpZmYgLS1naXQgYS9saWIva2VybmVsX2xvY2suYyBiL2xpYi9rZXJuZWxfbG9jay5jCmluZGV4IDAxYTNjMjIuLjM5ZjEwMjkgMTAwNjQ0Ci0tLSBhL2xpYi9rZXJuZWxfbG9jay5jCisrKyBiL2xpYi9rZXJuZWxfbG9jay5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgX19sb2NrZnVuYyBfX3JlYWNxdWlyZV9rZXJuZWxfbG9jayh2b2lkKQogewogCXdoaWxlICghX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkgewotCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWNwdV9yZWxheCgpOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDA0ODdkMWYuLmE2ZGVjMzIgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gYnVpbGQgdGhlIG5hbWUKICAqIEB2YXJnczogdmFyZ3MgdG8gZm9ybWF0IHRoZSBzdHJpbmcuCiAgKi8KLXN0YXRpYyBpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAoraW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKIAkJCQkgIHZhX2xpc3QgdmFyZ3MpCiB7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBrb2JqLT5uYW1lOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCAzMTgzMjhkLi45N2E3NzdhIDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtMTE4LDYgKzExOCwxMyBAQAogCWtzZXQgPSB0b3Bfa29iai0+a3NldDsKIAl1ZXZlbnRfb3BzID0ga3NldC0+dWV2ZW50X29wczsKIAorCS8qIHNraXAgdGhlIGV2ZW50LCBpZiB1ZXZlbnRfc3VwcHJlc3MgaXMgc2V0Ki8KKwlpZiAoa29iai0+dWV2ZW50X3N1cHByZXNzKSB7CisJCXByX2RlYnVnKCJrb2JqZWN0OiAnJXMnICglcCk6ICVzOiB1ZXZlbnRfc3VwcHJlc3MgIgorCQkJCSAiY2F1c2VkIHRoZSBldmVudCB0byBkcm9wIVxuIiwKKwkJCQkga29iamVjdF9uYW1lKGtvYmopLCBrb2JqLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KIAkvKiBza2lwIHRoZSBldmVudCwgaWYgdGhlIGZpbHRlciByZXR1cm5zIHplcm8uICovCiAJaWYgKHVldmVudF9vcHMgJiYgdWV2ZW50X29wcy0+ZmlsdGVyKQogCQlpZiAoIXVldmVudF9vcHMtPmZpbHRlcihrc2V0LCBrb2JqKSkgewpAQCAtMjI3LDYgKzIzNCw5IEBACiAJCQlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gMTsKIAkJCXJldHZhbCA9IG5ldGxpbmtfYnJvYWRjYXN0KHVldmVudF9zb2NrLCBza2IsIDAsIDEsCiAJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJCS8qIEVOT0JVRlMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdXNlcnNwYWNlICovCisJCQlpZiAocmV0dmFsID09IC1FTk9CVUZTKQorCQkJCXJldHZhbCA9IDA7CiAJCX0gZWxzZQogCQkJcmV0dmFsID0gLUVOT01FTTsKIAl9CkBAIC0yNDgsNyArMjU4LDcgQEAKIAkJCWdvdG8gZXhpdDsKIAogCQlyZXR2YWwgPSBjYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsCi0JCQkJCSAgICAgZW52LT5lbnZwLCBVTUhfV0FJVF9FWEVDKTsKKwkJCQkJICAgICBlbnYtPmVudnAsIFVNSF9OT19XQUlUKTsKIAl9CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hdHRyLmMgYi9saWIvbmxhdHRyLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gbmV0L25ldGxpbmsvYXR0ci5jCnJlbmFtZSB0byBsaWIvbmxhdHRyLmMKaW5kZXggNTZjM2NlNy4uODAwMDlhMiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYXR0ci5jCisrKyBiL2xpYi9ubGF0dHIuYwpAQCAtMjgxLDYgKzI4MSw3IEBACiAJcmV0dXJuIGQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUCiAvKioKICAqIF9fbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgpAQCAtMzA1LDYgKzMwNiw3IEBACiAKIAlyZXR1cm4gbmxhOwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKIAogLyoqCiAgKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKQEAgLTMyNSw2ICszMjcsNyBAQAogCiAJcmV0dXJuIHN0YXJ0OwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlX25vaGRyKTsKIAogLyoqCiAgKiBubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKQEAgLTM0NSw2ICszNDgsNyBAQAogCiAJcmV0dXJuIF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlKTsKIAogLyoqCiAgKiBubGFfcmVzZXJ2ZV9ub2hkciAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC0zNjMsNiArMzY3LDcgQEAKIAogCXJldHVybiBfX25sYV9yZXNlcnZlX25vaGRyKHNrYiwgYXR0cmxlbik7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlX25vaGRyKTsKIAogLyoqCiAgKiBfX25sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKQEAgLTM4Miw2ICszODcsNyBAQAogCW5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7CiAJbWVtY3B5KG5sYV9kYXRhKG5sYSksIGRhdGEsIGF0dHJsZW4pOwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOwogCiAvKioKICAqIF9fbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC0zOTksNiArNDA1LDcgQEAKIAlzdGFydCA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKIAltZW1jcHkoc3RhcnQsIGRhdGEsIGF0dHJsZW4pOwogfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOwogCiAvKioKICAqIG5sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKQEAgLTQxOCw2ICs0MjUsNyBAQAogCV9fbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3B1dCk7CiAKIC8qKgogICogbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCkBAIC00MzYsNiArNDQ0LDcgQEAKIAlfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7CiAKIC8qKgogICogbmxhX2FwcGVuZCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyIG9yIHBhZGRpbmcKQEAgLTQ1NCwyMCArNDYzLDEzIEBACiAJbWVtY3B5KHNrYl9wdXQoc2tiLCBhdHRybGVuKSwgZGF0YSwgYXR0cmxlbik7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5sYV9hcHBlbmQpOworI2VuZGlmCiAKIEVYUE9SVF9TWU1CT0wobmxhX3ZhbGlkYXRlKTsKIEVYUE9SVF9TWU1CT0wobmxhX3BhcnNlKTsKIEVYUE9SVF9TWU1CT0wobmxhX2ZpbmQpOwogRVhQT1JUX1NZTUJPTChubGFfc3RybGNweSk7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3Jlc2VydmUpOwotRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlX25vaGRyKTsKLUVYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmUpOwotRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3B1dCk7Ci1FWFBPUlRfU1lNQk9MKF9fbmxhX3B1dF9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKG5sYV9wdXQpOwotRVhQT1JUX1NZTUJPTChubGFfcHV0X25vaGRyKTsKIEVYUE9SVF9TWU1CT0wobmxhX21lbWNweSk7CiBFWFBPUlRfU1lNQk9MKG5sYV9tZW1jbXApOwogRVhQT1JUX1NZTUJPTChubGFfc3RyY21wKTsKLUVYUE9SVF9TWU1CT0wobmxhX2FwcGVuZCk7CmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCA4ZTg1ODc0Li5iZTY4Yzk1IDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTIsMTEgKzIsMjQgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCit2b2lkIGRlZmF1bHRfdW5wbHVnX2lvX2ZuKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBwYWdlICpwYWdlKQoreworfQorRVhQT1JUX1NZTUJPTChkZWZhdWx0X3VucGx1Z19pb19mbik7CisKK3N0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyA9IHsKKwkucmFfcGFnZXMJPSBWTV9NQVhfUkVBREFIRUFEICogMTAyNCAvIFBBR0VfQ0FDSEVfU0laRSwKKwkuc3RhdGUJCT0gMCwKKwkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9NQVBfQ09QWSwKKwkudW5wbHVnX2lvX2ZuCT0gZGVmYXVsdF91bnBsdWdfaW9fZm4sCit9OworRVhQT1JUX1NZTUJPTF9HUEwoZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqYmRpX2NsYXNzOwogCkBAIC0xNjYsOSArMTc5LDIwIEBACiAJYmRpX2RlYnVnX2luaXQoKTsKIAlyZXR1cm4gMDsKIH0KLQogcG9zdGNvcmVfaW5pdGNhbGwoYmRpX2NsYXNzX2luaXQpOwogCitzdGF0aWMgaW50IF9faW5pdCBkZWZhdWx0X2JkaV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGJkaV9pbml0KCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOworCWlmICghZXJyKQorCQliZGlfcmVnaXN0ZXIoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbywgTlVMTCwgImRlZmF1bHQiKTsKKworCXJldHVybiBlcnI7Cit9CitzdWJzeXNfaW5pdGNhbGwoZGVmYXVsdF9iZGlfaW5pdCk7CisKIGludCBiZGlfcmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IGRldmljZSAqcGFyZW50LAogCQljb25zdCBjaGFyICpmbXQsIC4uLikKIHsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAwMGNlZDNlLi4xYWJiOTE4IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNDksNiArMTA1MCw5IEBACiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX21tYXAoZmlsZSwgcmVxcHJvdCwgcHJvdCwgZmxhZ3MsIGFkZHIsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCWVycm9yID0gaW1hX2ZpbGVfbW1hcChmaWxlLCBwcm90KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXJldHVybiBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIGZsYWdzLCB2bV9mbGFncywgcGdvZmYpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNzRkYzU3Yy4uNDBjYTdjZCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC02Niw3ICs2Niw3IEBACiAvKgogICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSA1OworaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSAxMDsKIAogLyoKICAqIGRpcnR5X2JhY2tncm91bmRfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVuY3Rpb24gb2YKQEAgLTgzLDcgKzgzLDcgQEAKIC8qCiAgKiBUaGUgZ2VuZXJhdG9yIG9mIGRpcnR5IGRhdGEgc3RhcnRzIHdyaXRlYmFjayBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IHZtX2RpcnR5X3JhdGlvID0gMTA7CitpbnQgdm1fZGlydHlfcmF0aW8gPSAyMDsKIAogLyoKICAqIHZtX2RpcnR5X2J5dGVzIHN0YXJ0cyBhdCAwIChkaXNhYmxlZCkgc28gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uIG9mCmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IGJlYzgzYzEuLjljZTMwM2QgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0xNywxOSArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+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+bWluX3BhcnRpYWwpOworfQorCitzdGF0aWMgc3NpemVfdCBtaW5fcGFydGlhbF9zdG9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgbWluOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbWluKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X21pbl9wYXJ0aWFsKHMsIG1pbik7CisJcmV0dXJuIGxlbmd0aDsKK30KK1NMQUJfQVRUUihtaW5fcGFydGlhbCk7CisKIHN0YXRpYyBzc2l6ZV90IGN0b3Jfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQogewogCWlmIChzLT5jdG9yKSB7CkBAIC00MTUxLDYgKzQxNzIsNyBAQAogCSZvYmplY3Rfc2l6ZV9hdHRyLmF0dHIsCiAJJm9ianNfcGVyX3NsYWJfYXR0ci5hdHRyLAogCSZvcmRlcl9hdHRyLmF0dHIsCisJJm1pbl9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmb2JqZWN0c19hdHRyLmF0dHIsCiAJJm9iamVjdHNfcGFydGlhbF9hdHRyLmF0dHIsCiAJJnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLApkaWZmIC0tZ2l0IGEvbmV0LzgwMi9wc25hcC5jIGIvbmV0LzgwMi9wc25hcC5jCmluZGV4IDcwOTgwYmEuLjZmZWEwNzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIvcHNuYXAuYworKysgYi9uZXQvODAyL3BzbmFwLmMKQEAgLTI5LDcgKzI5LDcgQEAKIC8qCiAgKglGaW5kIGEgc25hcCBjbGllbnQgYnkgbWF0Y2hpbmcgdGhlIDUgYnl0ZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmZpbmRfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYykKK3N0YXRpYyBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmZpbmRfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYykKIHsKIAlzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvID0gTlVMTCwgKnA7CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAlpbnQgcmMgPSAxOwogCXN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG87CiAJc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBzbmFwX3BhY2tldF90eXBlID0gewotCQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfU05BUCksCisJCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfU05BUCksCiAJfTsKIAogCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIDUpKSkKQEAgLTk1LDE1ICs5NSwxNiBAQAogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9zbmFwX2NsaWVudCk7CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfc25hcF9jbGllbnQpOwogCi1zdGF0aWMgY2hhciBzbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHNuYXBfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIlNOQVAgLSB1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgc25hcF9pbml0KHZvaWQpCiB7CiAJc25hcF9zYXAgPSBsbGNfc2FwX29wZW4oMHhBQSwgc25hcF9yY3YpOwotCi0JaWYgKCFzbmFwX3NhcCkKKwlpZiAoIXNuYXBfc2FwKSB7CiAJCXByaW50ayhzbmFwX2Vycl9tc2cpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTIxLDcgKzEyMiw3IEBACiAvKgogICoJUmVnaXN0ZXIgU05BUCBjbGllbnRzLiBXZSBkb24ndCB5ZXQgdXNlIHRoaXMgZm9yIElQLgogICovCi1zdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MsCitzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc2MsCiAJCQkJCSAgICBpbnQgKCpyY3ZmdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqLAogCQkJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCQkJCQkJICAgc3RydWN0IHBhY2tldF90eXBlICosCkBAIC0xMzYsNyArMTM3LDcgQEAKIAogCXByb3RvID0ga21hbGxvYyhzaXplb2YoKnByb3RvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHByb3RvKSB7Ci0JCW1lbWNweShwcm90by0+dHlwZSwgZGVzYyw1KTsKKwkJbWVtY3B5KHByb3RvLT50eXBlLCBkZXNjLCA1KTsKIAkJcHJvdG8tPnJjdmZ1bmMJCT0gcmN2ZnVuYzsKIAkJcHJvdG8tPmhlYWRlcl9sZW5ndGgJPSA1ICsgMzsgLyogc25hcCArIDgwMi4yICovCiAJCXByb3RvLT5yZXF1ZXN0CQk9IHNuYXBfcmVxdWVzdDsKZGlmZiAtLWdpdCBhL25ldC84MDIvdHIuYyBiL25ldC84MDIvdHIuYwppbmRleCBmNDdhZTI4Li5lN2ViMTMwIDEwMDY0NAotLS0gYS9uZXQvODAyL3RyLmMKKysrIGIvbmV0LzgwMi90ci5jCkBAIC00ODYsNiArNDg2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgKnJpZl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJnJpZl9sb2NrKQogewogCXNwaW5fbG9ja19pcnEoJnJpZl9sb2NrKTsKIApAQCAtNTE3LDYgKzUxOCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJpZl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZyaWZfbG9jaykKIHsKIAlzcGluX3VubG9ja19pcnEoJnJpZl9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDQxZThmNjUuLjJiNzM5MGUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtNTEsOCArNTEsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgdmxhbl9jb3B5cmlnaHRbXSA9ICJCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4iOwogc3RhdGljIGNvbnN0IGNoYXIgdmxhbl9idWdneXJpZ2h0W10gPSAiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPiI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdmxhbl9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB2bGFuX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSksCiAJLmZ1bmMgPSB2bGFuX3NrYl9yZWN2LCAvKiBWTEFOIHJlY2VpdmUgbWV0aG9kICovCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggMjg4NmQyZi4uNjU0ZTQ1ZiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtODksMzggKzg5LDI3IEBACiAJCWdvdG8gZHJvcDsKIAogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gcC0+ZGV2ID09IHNrYi0+ZGV2OworCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0KKwkJCXAtPmRldiA9PSBza2ItPmRldiAmJiAhY29tcGFyZV9ldGhlcl9oZWFkZXIoCisJCQkJc2tiX21hY19oZWFkZXIocCksIHNrYl9ncm9fbWFjX2hlYWRlcihza2IpKTsKIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoID0gMDsKIAl9CiAKIAlyZXR1cm4gZGV2X2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAKIGRyb3A6Ci0JcmV0dXJuIDI7CisJcmV0dXJuIEdST19EUk9QOwogfQogCiBpbnQgdmxhbl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCiAJCSAgICAgdW5zaWduZWQgaW50IHZsYW5fdGNpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgZ3JwLCB2bGFuX3RjaSk7CiAKLQlpZiAobmV0cG9sbF9yZWNlaXZlX3NrYihza2IpKQotCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKIAotCXN3aXRjaCAodmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYikpIHsKLQljYXNlIC0xOgotCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCWNhc2UgMjoKLQkJZXJyID0gTkVUX1JYX0RST1A7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JY2FzZSAxOgotCQlrZnJlZV9za2Ioc2tiKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmFwaV9za2JfZmluaXNoKHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpLCBza2IpOwogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2dyb19yZWNlaXZlKTsKIApAQCAtMTI4LDMwICsxMTcsMTQgQEAKIAkJICAgdW5zaWduZWQgaW50IHZsYW5fdGNpLCBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGlfZnJhZ2luZm9fc2tiKG5hcGksIGluZm8pOwotCWludCBlcnIgPSBORVRfUlhfRFJPUDsKIAogCWlmICghc2tiKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJZ290byBvdXQ7CisJaWYgKG5ldHBvbGxfcnhfb24oc2tiKSkKKwkJcmV0dXJuIHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGdycCwgdmxhbl90Y2kpOwogCi0JZXJyID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLQlzd2l0Y2ggKHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDI6Ci0JCWVyciA9IE5FVF9SWF9EUk9QOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgMToKLQkJbmFwaV9yZXVzZV9za2IobmFwaSwgc2tiKTsKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmFwaV9mcmFnc19maW5pc2gobmFwaSwgc2tiLAorCQkJCSB2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX2ZyYWdzKTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggMWRmMDM1Ni4uYzYxM2VkMDggMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7CiAJLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLwotCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOworCXJldCA9IHZmc193cml0ZSh0cy0+d3IsIChfX2ZvcmNlIHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7CiAJc2V0X2ZzKG9sZGZzKTsKIAogCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBjZGI4ZmRlLi5lYzkzZTdlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBORVQKIAlib29sICJOZXR3b3JraW5nIHN1cHBvcnQiCisJc2VsZWN0IE5MQVRUUgogCS0tLWhlbHAtLS0KIAkgIFVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCiAJICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlbgpAQCAtMjQsOSArMjUsNiBAQAogCiBtZW51ICJOZXR3b3JraW5nIG9wdGlvbnMiCiAKLWNvbmZpZyBDT01QQVRfTkVUX0RFVl9PUFMKLSAgICAgICBkZWZfYm9vbCB5Ci0KIHNvdXJjZSAibmV0L3BhY2tldC9LY29uZmlnIgogc291cmNlICJuZXQvdW5peC9LY29uZmlnIgogc291cmNlICJuZXQveGZybS9LY29uZmlnIgpAQCAtMTcxLDYgKzE2OSw3IEBACiAKIHNvdXJjZSAibmV0L2RjY3AvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3NjdHAvS2NvbmZpZyIKK3NvdXJjZSAibmV0L3Jkcy9LY29uZmlnIgogc291cmNlICJuZXQvdGlwYy9LY29uZmlnIgogc291cmNlICJuZXQvYXRtL0tjb25maWciCiBzb3VyY2UgIm5ldC84MDIvS2NvbmZpZyIKQEAgLTE4NSw2ICsxODQsNyBAQAogc291cmNlICJuZXQvbGFwYi9LY29uZmlnIgogc291cmNlICJuZXQvZWNvbmV0L0tjb25maWciCiBzb3VyY2UgIm5ldC93YW5yb3V0ZXIvS2NvbmZpZyIKK3NvdXJjZSAibmV0L3Bob25ldC9LY29uZmlnIgogc291cmNlICJuZXQvc2NoZWQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2RjYi9LY29uZmlnIgogCkBAIC0yMjAsNiArMjIwLDE3IEBACiAJVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0Y3BfcHJvYmUuCiAKK2NvbmZpZyBORVRfRFJPUF9NT05JVE9SCisJYm9vbGVhbiAiTmV0d29yayBwYWNrZXQgZHJvcCBhbGVydGluZyBzZXJ2aWNlIgorCWRlcGVuZHMgb24gSU5FVCAmJiBFWFBFUklNRU5UQUwgJiYgVFJBQ0VQT0lOVFMKKwktLS1oZWxwLS0tCisJVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGFsZXJ0aW5nIHNlcnZpY2UgdG8gdXNlcnNwYWNlIGluIHRoZQorCWV2ZW50IHRoYXQgcGFja2V0cyBhcmUgZGlzY2FyZGVkIGluIHRoZSBuZXR3b3JrIHN0YWNrLiAgQWxlcnRzCisJYXJlIGJyb2FkY2FzdCB2aWEgbmV0bGluayBzb2NrZXQgdG8gYW55IGxpc3RlbmluZyB1c2VyIHNwYWNlCisJcHJvY2Vzcy4gIElmIHlvdSBkb24ndCBuZWVkIG5ldHdvcmsgZHJvcCBhbGVydHMsIG9yIGlmIHlvdSBhcmUgb2sKKwlqdXN0IGNoZWNraW5nIHRoZSB2YXJpb3VzIHByb2MgZmlsZXMgYW5kIG90aGVyIHV0aWxpdGllcyBmb3IKKwlkcm9wIHN0YXRpc3RpY3MsIHNheSBOIGhlcmUuCisKIGVuZG1lbnUKIAogZW5kbWVudQpAQCAtMjI5LDcgKzI0MCw2IEBACiBzb3VyY2UgIm5ldC9pcmRhL0tjb25maWciCiBzb3VyY2UgIm5ldC9ibHVldG9vdGgvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3J4cnBjL0tjb25maWciCi1zb3VyY2UgIm5ldC9waG9uZXQvS2NvbmZpZyIKIAogY29uZmlnIEZJQl9SVUxFUwogCWJvb2wKZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZQppbmRleCAwZmNjZTg5Li45ZTAwYTU1IDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKKysrIGIvbmV0L01ha2VmaWxlCkBAIC00OSw2ICs0OSw3IEBACiBlbmRpZgogb2JqLSQoQ09ORklHX0lQX0RDQ1ApCQkrPSBkY2NwLwogb2JqLSQoQ09ORklHX0lQX1NDVFApCQkrPSBzY3RwLworb2JqLSQoQ09ORklHX1JEUykJCSs9IHJkcy8KIG9iai15CQkJCSs9IHdpcmVsZXNzLwogb2JqLSQoQ09ORklHX01BQzgwMjExKQkJKz0gbWFjODAyMTEvCiBvYmotJChDT05GSUdfVElQQykJCSs9IHRpcGMvCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCA1YWJjZTA3Li4zZTA2NzFkIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTE4NjAsMTMgKzE4NjAsMTMgQEAKIAkubm90aWZpZXJfY2FsbAk9IGRkcF9kZXZpY2VfZXZlbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGx0YWxrX3BhY2tldF90eXBlID0gewotCS50eXBlCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfTE9DQUxUQUxLKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbHRhbGtfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9MT0NBTFRBTEspLAogCS5mdW5jCQk9IGx0YWxrX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwdGFsa19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BQUFRBTEspLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHB0YWxrX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQVEFMSyksCiAJLmZ1bmMJCT0gYXRhbGtfcmN2LAogfTsKIApAQCAtMTg3Nyw3ICsxODc3LDcgQEAKIEVYUE9SVF9TWU1CT0woYXRydHJfZ2V0X2Rldik7CiBFWFBPUlRfU1lNQk9MKGF0YWxrX2ZpbmRfZGV2X2FkZHIpOwogCi1zdGF0aWMgY2hhciBhdGFsa19lcnJfc25hcFtdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgYXRhbGtfZXJyX3NuYXBbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJVbmFibGUgdG8gcmVnaXN0ZXIgRERQIHdpdGggU05BUC5cbiI7CiAKIC8qIENhbGxlZCBieSBwcm90by5jIG9uIGtlcm5lbCBzdGFydCB1cCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9kZXYuYyBiL25ldC9hcHBsZXRhbGsvZGV2LmMKaW5kZXggZDg1NmE2Mi4uNzIyNzdkNyAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9kZXYuYworKysgYi9uZXQvYXBwbGV0YWxrL2Rldi5jCkBAIC05LDIyICs5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfbHRhbGsuaD4KIAorI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIHN0YXRpYyBpbnQgbHRhbGtfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KQogewogCXJldHVybiAtRUlOVkFMOwogfQotCi1zdGF0aWMgaW50IGx0YWxrX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19CisjZW5kaWYKIAogc3RhdGljIHZvaWQgbHRhbGtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBsb2NhbHRhbGstZ2VuZXJpYyB2YWx1ZXMuICovCiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiAJZGV2LT5jaGFuZ2VfbXR1CQk9IGx0YWxrX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgCT0gbHRhbGtfbWFjX2FkZHI7CisjZW5kaWYKIAogCWRldi0+dHlwZQkJPSBBUlBIUkRfTE9DQUxUTEs7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gCT0gTFRBTEtfSExFTjsKZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IGVhOTQzOGZjLi4zMzRmY2Q0IDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTgzLDcgKzgzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJyMjY4NF9kZXZzOwogCWludCBudW1iZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBicnZjY3M7CS8qIG9uZSBkZXZpY2UgPD0+IG9uZSB2Y2MgKGJlZm9yZSB4bWFzKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCWludCBtYWNfd2FzX3NldDsKIAllbnVtIGJyMjY4NF9wYXlsb2FkIHBheWxvYWQ7CiB9OwpAQCAtMTQ4LDkgKzE0NywxMCBAQAogICogdGhlIHdheSBmb3IgbXVsdGlwbGUgdmNjJ3MgcGVyIGl0Zi4gIFJldHVybnMgdHJ1ZSBpZiB3ZSBjYW4gc2VuZCwKICAqIG90aGVyd2lzZSBmYWxzZQogICovCi1zdGF0aWMgaW50IGJyMjY4NF94bWl0X3ZjYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYsCitzdGF0aWMgaW50IGJyMjY4NF94bWl0X3ZjYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjKQogeworCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldiA9IEJSUFJJVihkZXYpOwogCXN0cnVjdCBhdG1fdmNjICphdG12Y2M7CiAJaW50IG1pbmhlYWRyb29tID0gKGJydmNjLT5lbmNhcHMgPT0gZV9sbGMpID8gMTAgOiAyOwogCkBAIC0yMTEsOCArMjExLDggQEAKIAl9CiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2tfYXRtKGF0bXZjYyktPnNrX3dtZW1fYWxsb2MpOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSBhdG12Y2MtPmF0bV9vcHRpb25zOwotCWJyZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYnJkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJYXRtdmNjLT5zZW5kKGF0bXZjYywgc2tiKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTIzMywxNCArMjMzLDE0IEBACiAJYnJ2Y2MgPSBwaWNrX291dGdvaW5nX3ZjYyhza2IsIGJyZGV2KTsKIAlpZiAoYnJ2Y2MgPT0gTlVMTCkgewogCQlwcl9kZWJ1Zygibm8gdmNjIGF0dGFjaGVkIHRvIGRldiAlc1xuIiwgZGV2LT5uYW1lKTsKLQkJYnJkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlicmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkvKiBuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmVhZF91bmxvY2soJmRldnNfbG9jayk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIWJyMjY4NF94bWl0X3ZjYyhza2IsIGJyZGV2LCBicnZjYykpIHsKKwlpZiAoIWJyMjY4NF94bWl0X3ZjYyhza2IsIGRldiwgYnJ2Y2MpKSB7CiAJCS8qCiAJCSAqIFdlIHNob3VsZCBwcm9iYWJseSB1c2UgbmV0aWZfKl9xdWV1ZSgpIGhlcmUsIGJ1dCB0aGF0CiAJCSAqIGludm9sdmVzIGFkZGVkIGNvbXBsaWNhdGlvbi4gIFdlIG5lZWQgdG8gd2FsayBiZWZvcmUKQEAgLTI0OCwyNyArMjQ4LDIwIEBACiAJCSAqCiAJCSAqIERvbid0IGZyZWUgaGVyZSEgdGhpcyBwb2ludGVyIG1pZ2h0IGJlIG5vIGxvbmdlciB2YWxpZCEKIAkJICovCi0JCWJyZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJYnJkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAl9CiAJcmVhZF91bmxvY2soJmRldnNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYnIyNjg0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByX2RlYnVnKCJicjI2ODRfZ2V0X3N0YXRzXG4iKTsKLQlyZXR1cm4gJkJSUFJJVihkZXYpLT5zdGF0czsKLX0KLQogLyoKICAqIFdlIHJlbWVtYmVyIHdoZW4gdGhlIE1BQyBnZXRzIHNldCwgc28gd2UgZG9uJ3Qgb3ZlcnJpZGUgaXQgbGF0ZXIgd2l0aAogICogdGhlIEVTSSBvZiB0aGUgQVRNIGNhcmQgb2YgdGhlIGZpcnN0IFZDCiAgKi8KLXN0YXRpYyBpbnQgKCpteV9ldGhfbWFjX2FkZHIpIChzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOwogc3RhdGljIGludCBicjI2ODRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKLQlpbnQgZXJyID0gbXlfZXRoX21hY19hZGRyKGRldiwgcCk7CisJaW50IGVyciA9IGV0aF9tYWNfYWRkcihkZXYsIHApOwogCWlmICghZXJyKQogCQlCUlBSSVYoZGV2KS0+bWFjX3dhc19zZXQgPSAxOwogCXJldHVybiBlcnI7CkBAIC00MzAsMTcgKzQyMywxNyBAQAogCS8qIHNpZ2gsIGludGVyZmFjZSBpcyBkb3duPyAqLwogCWlmICh1bmxpa2VseSghKG5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSkpCiAJCWdvdG8gZHJvcHBlZDsKLQlicmRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCWJyZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwluZXRfZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmV0X2Rldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKIAluZXRpZl9yeChza2IpOwogCXJldHVybjsKIAogZHJvcHBlZDoKLQlicmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCW5ldF9kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlnb3RvIGZyZWVfc2tiOwogZXJyb3I6Ci0JYnJkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCW5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogZnJlZV9za2I6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybjsKQEAgLTUzMSw4ICs1MjQsOCBAQAogCiAJCXNrYi0+bmV4dCA9IHNrYi0+cHJldiA9IE5VTEw7CiAJCWJyMjY4NF9wdXNoKGF0bXZjYywgc2tiKTsKLQkJQlJQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gc2tiLT5sZW47Ci0JCUJSUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMtLTsKKwkJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzIC09IHNrYi0+bGVuOworCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cy0tOwogCiAJCXNrYiA9IG5leHQ7CiAJfQpAQCAtNTQ0LDE3ICs1MzcsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyMjY4NF9uZXRkZXZfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBicjI2ODRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGJyMjY4NF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgdm9pZCBicjI2ODRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYobmV0ZGV2KTsKIAogCWV0aGVyX3NldHVwKG5ldGRldik7Ci0JYnJkZXYtPm5ldF9kZXYgPSBuZXRkZXY7CiAKLQlteV9ldGhfbWFjX2FkZHIgPSBuZXRkZXYtPnNldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJyMjY4NF9tYWNfYWRkcjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJyMjY4NF9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gYnIyNjg0X2dldF9zdGF0czsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYnIyNjg0X25ldGRldl9vcHM7CiAKIAlJTklUX0xJU1RfSEVBRCgmYnJkZXYtPmJydmNjcyk7CiB9CkBAIC01NjUsMTAgKzU2MSw4IEBACiAJYnJkZXYtPm5ldF9kZXYgPSBuZXRkZXY7CiAKIAluZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7Ci0JbXlfZXRoX21hY19hZGRyID0gbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBicjI2ODRfbWFjX2FkZHI7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBicjI2ODRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGJyMjY4NF9nZXRfc3RhdHM7CisKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYnIyNjg0X25ldGRldl9vcHM7CiAJbmV0ZGV2LT5hZGRyX2xlbiA9IDA7CiAJbmV0ZGV2LT5tdHUgPSAxNTAwOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9QUFA7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IDJkMzNhODMuLjNkYzBhM2EgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC0yMTQsMTUgKzIxNCwxNSBAQAogCQlza2ItPnByb3RvY29sID0gKChfX2JlMTYgKikgc2tiLT5kYXRhKVszXTsKIAkJc2tiX3B1bGwoc2tiLCBSRkMxNDgzTExDX0xFTik7CiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0FSUCkpIHsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJY2xpcF9hcnBfcmN2KHNrYik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAJY2xpcF92Y2MtPmxhc3RfdXNlID0gamlmZmllczsKLQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cysrOwotCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAltZW1zZXQoQVRNX1NLQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkpOwogCW5ldGlmX3J4KHNrYik7CiB9CkBAIC0zNzIsNyArMzcyLDcgQEAKIAlpZiAoIXNrYi0+ZHN0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBza2ItPmRzdCA9PSBOVUxMXG4iKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKQEAgLTM4MCwxMyArMzgwLDEzIEBACiAJCXNrYi0+ZHN0LT5uZWlnaGJvdXIgPSBjbGlwX2ZpbmRfbmVpZ2hib3VyKHNrYi0+ZHN0LCAxKTsKIAkJaWYgKCFza2ItPmRzdC0+bmVpZ2hib3VyKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CS8qIGxvc3QgdGhhdCBvbmUgKi8KLQkJCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXR1cm4gMDsKIAkJfQogI2VuZGlmCiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBOTyBORUlHSEJPVVIgIVxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gMDsKIAl9CiAJZW50cnkgPSBORUlHSDJFTlRSWShza2ItPmRzdC0+bmVpZ2hib3VyKTsKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQkJc2tiX3F1ZXVlX3RhaWwoJmVudHJ5LT5uZWlnaC0+YXJwX3F1ZXVlLCBza2IpOwogCQllbHNlIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDIzLDggKzQyMyw4IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsaXBfc3RhcnRfeG1pdDogWE9GRi0+WE9GRiB0cmFuc2l0aW9uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWNsaXBfcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCWNsaXBfcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAl2Y2MtPnNlbmQodmNjLCBza2IpOwogCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQllbnRyeS0+dmNjcy0+eG9mZiA9IDA7CkBAIC00NDMsMTEgKzQ0Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY2xpcF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJlBSSVYoZGV2KS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgY2xpcF9ta2lwKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGludCB0aW1lb3V0KQogewogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2M7CkBAIC01MDEsOCArNDk2LDggQEAKIAogCQkJc2tiX2dldChza2IpOwogCQkJY2xpcF9wdXNoKHZjYywgc2tiKTsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMtLTsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyAtPSBsZW47CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQogCkBAIC01NTcsMTEgKzU1MiwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjbGlwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIHZvaWQgY2xpcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0OwotCS8qIHNnX3htaXQgLi4uICovCi0JZGV2LT5nZXRfc3RhdHMgPSBjbGlwX2dldF9zdGF0czsKKwlkZXYtPm5ldGRldl9vcHMgPSAmY2xpcF9uZXRkZXZfb3BzOwogCWRldi0+dHlwZSA9IEFSUEhSRF9BVE07CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBSRkMxNDgzTExDX0xFTjsKIAlkZXYtPm10dSA9IFJGQzE2MjZfTVRVOwpAQCAtNjIxLDcgKzYxOCw3IEBACiAJfQogCiAJLyogaWdub3JlIG5vbi1DTElQIGRldmljZXMgKi8KLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9BVE0gfHwgZGV2LT5oYXJkX3N0YXJ0X3htaXQgIT0gY2xpcF9zdGFydF94bWl0KQorCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0FUTSB8fCBkZXYtPm5ldGRldl9vcHMgIT0gJmNsaXBfbmV0ZGV2X29wcykKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoIChldmVudCkgewpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuYyBiL25ldC9hdG0vbGVjLmMKaW5kZXggZTVlMzAxNS4uMTk5YjZiYiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuYworKysgYi9uZXQvYXRtL2xlYy5jCkBAIC02Miw3ICs2Miw2IEBACiBzdGF0aWMgaW50IGxlY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbGVjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsZWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbGVjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IGxlY19hcnBfdGFibGUgKmxlY19hcnBfZmluZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCiAJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpOwpAQCAtMjE4LDI4ICsyMTcsMjggQEAKIAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCW1lbXNldCgmcHJpdi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCW1lbXNldCgmZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZAotbGVjX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxlY19wcml2ICpwcml2KQorc3RhdGljIHZvaWQKK2xlY19zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCiAJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2M7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IHZjYy0+YXRtX29wdGlvbnM7CiAKIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJaWYgKHZjYy0+c2VuZCh2Y2MsIHNrYikgPCAwKSB7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAKLQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIH0KIAogc3RhdGljIHZvaWQgbGVjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI3MCw3ICsyNjksNyBAQAogCXByX2RlYnVnKCJsZWNfc3RhcnRfeG1pdCBjYWxsZWRcbiIpOwogCWlmICghcHJpdi0+bGVjZCkgewogCQlwcmludGsoIiVzOk5vIGxlY2QgYXR0YWNoZWRcbiIsIGRldi0+bmFtZSk7Ci0JCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldHVybiAtRVVOQVRDSDsKIAl9CkBAIC0zNDUsNyArMzQ0LDcgQEAKIAkJCQkJICAgICAgIEdGUF9BVE9NSUMpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaWYgKHNrYjIgPT0gTlVMTCkgewotCQkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCXNrYiA9IHNrYjI7CkBAIC0zODAsNyArMzc5LDcgQEAKIAkJCSAgICAoIiVzOmxlY19zdGFydF94bWl0OiB0eCBxdWV1ZSBmdWxsIG9yIG5vIGFycCBlbnRyeSwgZHJvcHBpbmcsICIsCiAJCQkgICAgIGRldi0+bmFtZSk7CiAJCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgJXBNXG4iLCBsZWNfaC0+aF9kZXN0KTsKLQkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQl9CiAJCWdvdG8gb3V0OwpAQCAtMzkyLDEwICszOTEsMTAgQEAKIAl3aGlsZSAoZW50cnkgJiYgKHNrYjIgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSkgewogCQlwcl9kZWJ1ZygibGVjLmM6IGVtcHR5aW5nIHR4IHF1ZXVlLCAiKTsKIAkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7Ci0JCWxlY19zZW5kKHZjYywgc2tiMiwgcHJpdik7CisJCWxlY19zZW5kKHZjYywgc2tiMik7CiAJfQogCi0JbGVjX3NlbmQodmNjLCBza2IsIHByaXYpOworCWxlY19zZW5kKHZjYywgc2tiKTsKIAogCWlmICghYXRtX21heV9zZW5kKHZjYywgMCkpIHsKIAkJc3RydWN0IGxlY192Y2NfcHJpdiAqdnByaXYgPSBMRUNfVkNDX1BSSVYodmNjKTsKQEAgLTQyNywxNSArNDI2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLgotICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGVjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmKChzdHJ1Y3QgbGVjX3ByaXYgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgbGVjX2F0bV9zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUxMiw3ICs1MDIsNyBAQAogCQlwcml2LT5sYW5lMl9vcHMgPSBOVUxMOwogCQlpZiAocHJpdi0+bGFuZV92ZXJzaW9uID4gMSkKIAkJCXByaXYtPmxhbmUyX29wcyA9ICZsYW5lMl9vcHM7Ci0JCWlmIChkZXYtPmNoYW5nZV9tdHUoZGV2LCBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpKQorCQlpZiAoZGV2X3NldF9tdHUoZGV2LCBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpKQogCQkJcHJpbnRrKCIlczogY2hhbmdlX210dSB0byAlZCBmYWlsZWRcbiIsIGRldi0+bmFtZSwKIAkJCSAgICAgICBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpOwogCQlwcml2LT5pc19wcm94eSA9IG1lc2ctPmNvbnRlbnQuY29uZmlnLmlzX3Byb3h5OwpAQCAtNjc3LDE3ICs2NjcsMTkgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGVjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxlY19vcGVuLAorCS5uZG9fc3RvcAkJPSBsZWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGxlY19zdGFydF94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBsZWNfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbGVjX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBsZWNfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKworCiBzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+Y2hhbmdlX210dSA9IGxlY19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGxlY19vcGVuOwotCWRldi0+c3RvcCA9IGxlY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxlY19zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IGxlY190eF90aW1lb3V0OwotCi0JZGV2LT5nZXRfc3RhdHMgPSBsZWNfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGVjX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmRvX2lvY3RsID0gTlVMTDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbGVjX25ldGRldl9vcHM7CiAJcHJpbnRrKCIlczogSW5pdGlhbGl6ZWQhXG4iLCBkZXYtPm5hbWUpOwogfQogCkBAIC04MTAsOCArODAyLDggQEAKIAkJZWxzZQogI2VuZGlmCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CkBAIC0xODg3LDcgKzE4NzksNyBAQAogCQkJCQlsZWNfYXJwX2hvbGQoZW50cnkpOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAkJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSAhPSBOVUxMKQotCQkJCQkJbGVjX3NlbmQodmNjLCBza2IsIGVudHJ5LT5wcml2KTsKKwkJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKIAkJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAJCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CiAJCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKQEAgLTIzMDUsNyArMjI5Nyw3IEBACiAJCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAkJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpICE9IE5VTEwpCi0JCQkJCWxlY19zZW5kKHZjYywgc2tiLCBlbnRyeS0+cHJpdik7CisJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKIAkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwogCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmggYi9uZXQvYXRtL2xlYy5oCmluZGV4IDBkMzc2NjguLjlkMTRkMTkgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmgKKysrIGIvbmV0L2F0bS9sZWMuaApAQCAtNjksNyArNjksNiBAQAogI2RlZmluZSBMRUNfQVJQX1RBQkxFX1NJWkUgMTYKIAogc3RydWN0IGxlY19wcml2IHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1bnNpZ25lZCBzaG9ydCBsZWNpZDsJCQkvKiBMZWNpZCBvZiB0aGlzIGNsaWVudCAqLwogCXN0cnVjdCBobGlzdF9oZWFkIGxlY19hcnBfZW1wdHlfb25lczsKIAkJCQkJCS8qIFVzZWQgZm9yIHN0b3JpbmcgVkNDJ3MgdGhhdCBkb24ndCBoYXZlIGEgTUFDIGFkZHJlc3MgYXR0YWNoZWQgeWV0ICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCAwMzlkNWNjLi5lNWJmMTE0IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTI4NiwzMyArMjg2LDMyIEBACiB7CiAKIAlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYzpcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKLQlpZiAoZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjOiBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBOVUxMLCBub3Qgc3RhcnRpbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm47CisJaWYgKCFkZXYtPm5ldGRldl9vcHMpCisJCXByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGMgIG5vdCBzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKKwllbHNlIHsKKwkJbXBjLT5vbGRfb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCQltcGMtPm5ld19vcHMgPSAqbXBjLT5vbGRfb3BzOworCQltcGMtPm5ld19vcHMubmRvX3N0YXJ0X3htaXQgPSBtcGNfc2VuZF9wYWNrZXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZtcGMtPm5ld19vcHM7CiAJfQotCW1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdCA9IGRldi0+aGFyZF9zdGFydF94bWl0OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbXBjX3NlbmRfcGFja2V0OwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX21wYyhzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtcGMtPmRldjsKIAlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0b3BfbXBjOiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAogCS8qIExldHMgbm90IG51bGxpZnkgbGVjIGRldmljZSdzIGRldi0+aGFyZF9zdGFydF94bWl0ICovCi0JaWYgKG1wYy0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgIT0gbXBjX3NlbmRfcGFja2V0KSB7CisJaWYgKGRldi0+bmV0ZGV2X29wcyAhPSAmbXBjLT5uZXdfb3BzKSB7CiAJCWRwcmludGsoIiBtcGMgYWxyZWFkeSBzdG9wcGVkLCBub3QgZmF0YWxcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwcmludGsoIlxuIik7Ci0JbXBjLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdDsKLQltcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQgPSBOVUxMOwotCS8qIGNsb3NlX3Nob3J0Y3V0cyhtcGMpOyAgICA/Pz8gRklYTUUgKi8KIAotCXJldHVybjsKKwlkZXYtPm5ldGRldl9vcHMgPSBtcGMtPm9sZF9vcHM7CisJbXBjLT5vbGRfb3BzID0gTlVMTDsKKworCS8qIGNsb3NlX3Nob3J0Y3V0cyhtcGMpOyAgICA/Pz8gRklYTUUgKi8KIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKm1wb2FfZGV2aWNlX3R5cGVfc3RyaW5nKGNoYXIgdHlwZSkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwpAQCAtNTMxLDcgKzUzMCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYzsKIAlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJaW50IGkgPSAwOwpAQCAtNTYxLDkgKzU1OSw3IEBACiAJfQogCiAgbm9uX2lwOgotCXJldHZhbCA9IG1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdChza2IsZGV2KTsKLQotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIG1wYy0+b2xkX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYXRtX21wb2FfdmNjX2F0dGFjaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCB2b2lkIF9fdXNlciAqYXJnKQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuaCBiL25ldC9hdG0vbXBjLmgKaW5kZXggMjRjMzg2Yy4uMDkxOWE4OCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuaAorKysgYi9uZXQvYXRtL21wYy5oCkBAIC0xNSw3ICsxNSw3IEBACiAJc3RydWN0IG1wb2FfY2xpZW50ICpuZXh0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7ICAgICAgLyogbGVjIGluIHF1ZXN0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KIAlpbnQgZGV2X251bTsgICAgICAgICAgICAgICAgIC8qIGUuZy4gMiBmb3IgbGVjMiAgICAgICAgICAgICAgICAgICAgICovCi0JaW50ICgqb2xkX2hhcmRfc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAlzdHJ1Y3QgYXRtX3ZjYyAqbXBvYWRfdmNjOyAgIC8qIGNvbnRyb2wgY2hhbm5lbCB0byBtcG9hZCAgICAgICAgICAgICovCiAJdWludDhfdCBtcHNfY3RybF9hZGRyW0FUTV9FU0FfTEVOXTsgIC8qIE1QUyBjb250cm9sIEFUTSBhZGRyZXNzICAgICAqLwogCXVpbnQ4X3Qgb3VyX2N0cmxfYWRkcltBVE1fRVNBX0xFTl07ICAvKiBNUEMncyBjb250cm9sIEFUTSBhZGRyZXNzICAgKi8KQEAgLTMxLDYgKzMxLDkgQEAKIAl1aW50OF90ICptcHNfbWFjczsgICAgICAgICAgIC8qIGFycmF5IG9mIE1QUyBNQUMgYWRkcmVzc2VzLCA+PTEgICAgICovCiAJaW50IG51bWJlcl9vZl9tcHNfbWFjczsgICAgICAvKiBudW1iZXIgb2YgdGhlIGFib3ZlIE1BQyBhZGRyZXNzZXMgICAqLwogCXN0cnVjdCBtcGNfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOyAgLyogcGFyYW1ldGVycyBmb3IgdGhpcyBjbGllbnQgICAgKi8KKworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb2xkX29wczsKKwlzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV3X29wczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDAwZDllNWUuLjdkYTVlYmIgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTE0MzUsNiArMTQzNSwxMSBAQAogCXNpemVfdCBzaXplOwogCWludCBsdiwgZXJyLCBhZGRyX2xlbiA9IG1zZy0+bXNnX25hbWVsZW47CiAKKwkvKiBBWC4yNSBlbXB0eSBkYXRhIGZyYW1lIGhhcyBubyBtZWFuaW5nIDogZG9uJ3Qgc2VuZCAqLworCWlmIChsZW4gPT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19FT1J8TVNHX0NNU0dfQ09NUEFUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE1MjksMTAgKzE1MzQsOCBAQAogCQlkcCA9IGF4MjUtPmRpZ2lwZWF0OwogCX0KIAotCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKLQogCS8qIEJ1aWxkIGEgcGFja2V0ICovCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOworCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuIEJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCiAJLyogQXNzdW1lIHRoZSB3b3JzdCBjYXNlICovCiAJc2l6ZSA9IGxlbiArIGF4MjUtPmF4MjVfZGV2LT5kZXYtPmhhcmRfaGVhZGVyX2xlbjsKQEAgLTE2MzYsNiArMTYzOSwxMyBAQAogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJY29waWVkID0gc2tiLT5sZW47CiAKKwkvKiBBWC4yNSBlbXB0eSBkYXRhIGZyYW1lIGhhcyBubyBtZWFuaW5nIDogaWdub3JlIGl0ICovCisJaWYgKGNvcGllZCA9PSAwKSB7CisJCWVyciA9IGNvcGllZDsKKwkJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChjb3BpZWQgPiBzaXplKSB7CiAJCWNvcGllZCA9IHNpemU7CiAJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKQEAgLTE5ODUsOSArMTk5NSw4IEBACiAvKgogICoJQ2FsbGVkIGJ5IHNvY2tldC5jIG9uIGtlcm5lbCBzdGFydCB1cAogICovCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FYMjUpLAotCS5kZXYJPQlOVUxMLAkJCQkvKiBBbGwgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBheDI1X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPQljcHVfdG9fYmUxNihFVEhfUF9BWDI1KSwKIAkuZnVuYwk9CWF4MjVfa2lzc19yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKaW5kZXggODQ0M2FmNS4uNzEzMzhmMSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCisrKyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwpAQCAtNjEsMjcgKzYxLDI0IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwogCXByb3RvY29sID0gcHJvdG9jb2xfbGlzdDsKLQlpZiAocHJvdG9jb2wgPT0gTlVMTCkgewotCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKLQl9CisJaWYgKHByb3RvY29sID09IE5VTEwpCisJCWdvdG8gb3V0OwogCiAJaWYgKHByb3RvY29sLT5waWQgPT0gcGlkKSB7CiAJCXByb3RvY29sX2xpc3QgPSBwcm90b2NvbC0+bmV4dDsKLQkJd3JpdGVfdW5sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCXdoaWxlIChwcm90b2NvbCAhPSBOVUxMICYmIHByb3RvY29sLT5uZXh0ICE9IE5VTEwpIHsKIAkJaWYgKHByb3RvY29sLT5uZXh0LT5waWQgPT0gcGlkKSB7CiAJCQlzID0gcHJvdG9jb2wtPm5leHQ7CiAJCQlwcm90b2NvbC0+bmV4dCA9IHByb3RvY29sLT5uZXh0LT5uZXh0OwotCQkJd3JpdGVfdW5sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwotCQkJcmV0dXJuOworCQkJZ290byBvdXQ7CiAJCX0KIAogCQlwcm90b2NvbCA9IHByb3RvY29sLT5uZXh0OwogCX0KK291dDoKIAl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDc0NGVkM2YuLjAyYjliYWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtNDEsMTQgKzQxLDEzIEBACiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjIuMTQiCisjZGVmaW5lIFZFUlNJT04gIjIuMTUiCiAKIC8qIEJsdWV0b290aCBzb2NrZXRzICovCiAjZGVmaW5lIEJUX01BWF9QUk9UTwk4CiBzdGF0aWMgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKmJ0X3Byb3RvW0JUX01BWF9QUk9UT107CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhidF9wcm90b19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X2xvY2tfa2V5W0JUX01BWF9QUk9UT107CiBzdGF0aWMgY29uc3QgY2hhciAqYnRfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKIAkic2tfbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19MMkNBUCIsCkBAIC04NiwxMSArODUsNiBAQAogCQkJYnRfc2xvY2tfa2V5X3N0cmluZ3NbcHJvdG9dLCAmYnRfc2xvY2tfa2V5W3Byb3RvXSwKIAkJCQlidF9rZXlfc3RyaW5nc1twcm90b10sICZidF9sb2NrX2tleVtwcm90b10pOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBidF9zb2NrX3JlY2xhc3NpZnlfbG9jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8pCi17Ci19Ci0jZW5kaWYKIAogaW50IGJ0X3NvY2tfcmVnaXN0ZXIoaW50IHByb3RvLCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKQogewpAQCAtMjE3LDcgKzIxMSw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8ICFuZXdzb2NrKSB7CisJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8ICFuZXdzb2NrIHx8CisJCQkJCQlidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cCkgewogCQkJYnRfYWNjZXB0X3VubGluayhzayk7CiAJCQlpZiAobmV3c29jaykKIAkJCQlzb2NrX2dyYWZ0KHNrLCBuZXdzb2NrKTsKQEAgLTIzMiw3ICsyMjcsNyBAQAogRVhQT1JUX1NZTUJPTChidF9hY2NlcHRfZGVxdWV1ZSk7CiAKIGludCBidF9zb2NrX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQorCQkJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQogewogCWludCBub2Jsb2NrID0gZmxhZ3MgJiBNU0dfRE9OVFdBSVQ7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC0yNzcsNyArMjcyLDkgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmYnRfc2socGFyZW50KS0+YWNjZXB0X3EpIHsKIAkJc2sgPSAoc3RydWN0IHNvY2sgKikgbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYnRfc29jaywgYWNjZXB0X3EpOwotCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCkKKwkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKKwkJCQkJKGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwICYmCisJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpKQogCQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwppbmRleCBjOWNhYzc3Li4wMDczZWM4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKQEAgLTEyNiw4ICsxMjYsNyBAQAogCiAJc2Vzc2lvbi0+cmVhc3NlbWJseVtpZF0gPSBuc2tiOwogCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNtdHBfcmVjdl9mcmFtZShzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IGE0YTc4OWYuLjExODFkYjAgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTEyMyw2ICsxMjMsOCBAQAogCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVDsKIAljb25uLT5vdXQgPSAxOwogCisJY29ubi0+YXR0ZW1wdCsrOworCiAJY3AuaGFuZGxlICAgPSBjcHVfdG9fbGUxNihoYW5kbGUpOwogCWNwLnBrdF90eXBlID0gY3B1X3RvX2xlMTYoY29ubi0+cGt0X3R5cGUpOwogCkBAIC0xMzksNiArMTQxLDggQEAKIAljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1Q7CiAJY29ubi0+b3V0ID0gMTsKIAorCWNvbm4tPmF0dGVtcHQrKzsKKwogCWNwLmhhbmRsZSAgID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAljcC5wa3RfdHlwZSA9IGNwdV90b19sZTE2KGNvbm4tPnBrdF90eXBlKTsKIApAQCAtMTU1LDYgKzE1OSw3IEBACiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gKHZvaWQgKikgYXJnOwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi0+aGRldjsKKwlfX3U4IHJlYXNvbjsKIAogCUJUX0RCRygiY29ubiAlcCBzdGF0ZSAlZCIsIGNvbm4sIGNvbm4tPnN0YXRlKTsKIApAQCAtMTczLDcgKzE3OCw4IEBACiAJCWJyZWFrOwogCWNhc2UgQlRfQ09ORklHOgogCWNhc2UgQlRfQ09OTkVDVEVEOgotCQloY2lfYWNsX2Rpc2Nvbm4oY29ubiwgMHgxMyk7CisJCXJlYXNvbiA9IGhjaV9wcm90b19kaXNjb25uX2luZChjb25uKTsKKwkJaGNpX2FjbF9kaXNjb25uKGNvbm4sIHJlYXNvbik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNvbm4tPnN0YXRlID0gQlRfQ0xPU0VEOwpAQCAtMjE2LDEyICsyMjIsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQ09fTElOSzoKIAkJaWYgKGxtcF9lc2NvX2NhcGFibGUoaGRldikpCi0JCQljb25uLT5wa3RfdHlwZSA9IGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0s7CisJCQljb25uLT5wa3RfdHlwZSA9IChoZGV2LT5lc2NvX3R5cGUgJiBTQ09fRVNDT19NQVNLKSB8CisJCQkJCShoZGV2LT5lc2NvX3R5cGUgJiBFRFJfRVNDT19NQVNLKTsKIAkJZWxzZQogCQkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5wa3RfdHlwZSAmIFNDT19QVFlQRV9NQVNLOwogCQlicmVhazsKIAljYXNlIEVTQ09fTElOSzoKLQkJY29ubi0+cGt0X3R5cGUgPSBoZGV2LT5lc2NvX3R5cGU7CisJCWNvbm4tPnBrdF90eXBlID0gaGRldi0+ZXNjb190eXBlICYgfkVEUl9FU0NPX01BU0s7CiAJCWJyZWFrOwogCX0KIApAQCAtMjgwLDYgKzI4Nyw4IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmNvbm4tPmRhdGFfcSk7CiAKKwloY2lfY29ubl9kZWxfc3lzZnMoY29ubik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI1LDcgKzMzNCw3IEBACiAKIC8qIENyZWF0ZSBTQ08gb3IgQUNMIGNvbm5lY3Rpb24uCiAgKiBEZXZpY2UgX211c3RfIGJlIGxvY2tlZCAqLwotc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggYXV0aF90eXBlKQorc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSkKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmFjbDsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKnNjbzsKQEAgLTM0MCw2ICszNDksNyBAQAogCWhjaV9jb25uX2hvbGQoYWNsKTsKIAogCWlmIChhY2wtPnN0YXRlID09IEJUX09QRU4gfHwgYWNsLT5zdGF0ZSA9PSBCVF9DTE9TRUQpIHsKKwkJYWNsLT5zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJCWFjbC0+YXV0aF90eXBlID0gYXV0aF90eXBlOwogCQloY2lfYWNsX2Nvbm5lY3QoYWNsKTsKIAl9CkBAIC0zODUsNTEgKzM5NSw1OSBAQAogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9jaGVja19saW5rX21vZGUpOwogCiAvKiBBdXRoZW50aWNhdGUgcmVtb3RlIGRldmljZSAqLwotaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uKQorc3RhdGljIGludCBoY2lfY29ubl9hdXRoKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCi0JaWYgKGNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5oZGV2LT5zc3BfbW9kZSA+IDApIHsKLQkJaWYgKCEoY29ubi0+YXV0aF90eXBlICYgMHgwMSkpIHsKLQkJCWNvbm4tPmF1dGhfdHlwZSB8PSAweDAxOwotCQkJY29ubi0+bGlua19tb2RlICY9IH5IQ0lfTE1fQVVUSDsKLQkJfQotCX0KLQotCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fQVVUSCkKKwlpZiAoc2VjX2xldmVsID4gY29ubi0+c2VjX2xldmVsKQorCQljb25uLT5zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CisJZWxzZSBpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpCiAJCXJldHVybiAxOwogCisJY29ubi0+YXV0aF90eXBlID0gYXV0aF90eXBlOworCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpKSB7CiAJCXN0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgY3A7CiAJCWNwLmhhbmRsZSA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWhjaV9zZW5kX2NtZChjb25uLT5oZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fYXV0aCk7CiAKLS8qIEVuYWJsZSBlbmNyeXB0aW9uICovCi1pbnQgaGNpX2Nvbm5fZW5jcnlwdChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCisvKiBFbmFibGUgc2VjdXJpdHkgKi8KK2ludCBoY2lfY29ubl9zZWN1cml0eShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSkKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAorCWlmIChzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQorCQlyZXR1cm4gMTsKKworCWlmIChzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKSB7CisJCWlmIChjb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+aGRldi0+c3NwX21vZGUgPiAwKQorCQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpOworCQllbHNlCisJCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpCi0JCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4pOworCQlyZXR1cm4gaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaGNpX2Nvbm5fYXV0aChjb25uKSkgeworCWlmIChoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKSkgewogCQlzdHJ1Y3QgaGNpX2NwX3NldF9jb25uX2VuY3J5cHQgY3A7CiAJCWNwLmhhbmRsZSAgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwogCQljcC5lbmNyeXB0ID0gMTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TRVRfQ09OTl9FTkNSWVBULAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGhjaV9jb25uX2VuY3J5cHQpOworRVhQT1JUX1NZTUJPTChoY2lfY29ubl9zZWN1cml0eSk7CiAKIC8qIENoYW5nZSBsaW5rIGtleSAqLwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCkBAIC00NDIsMTIgKzQ2MCwxMyBAQAogCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX0NIQU5HRV9DT05OX0xJTktfS0VZLAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX2NoYW5nZV9saW5rX2tleSk7CiAKIC8qIFN3aXRjaCByb2xlICovCi1pbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCB1aW50OF90IHJvbGUpCitpbnQgaGNpX2Nvbm5fc3dpdGNoX3JvbGUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJvbGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKQEAgLTQ2MCw2ICs0NzksNyBAQAogCQljcC5yb2xlID0gcm9sZTsKIAkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TV0lUQ0hfUk9MRSwgc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaGNpX2Nvbm5fc3dpdGNoX3JvbGUpOwpAQCAtNTQyLDkgKzU2Miw3IEBACiAKIAkJYy0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAKLQkJaGNpX2Nvbm5fZGVsX3N5c2ZzKGMpOwotCi0JCWhjaV9wcm90b19kaXNjb25uX2luZChjLCAweDE2KTsKKwkJaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKGMsIDB4MTYpOwogCQloY2lfY29ubl9kZWwoYyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IGJhNzhjYzEuLmNkMDYxNTEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTE1NjUsOCArMTU2NSw3IEBACiAKIAkvKiBTZW5kIHF1ZXVlZCBjb21tYW5kcyAqLwogCWlmIChhdG9taWNfcmVhZCgmaGRldi0+Y21kX2NudCkgJiYgKHNrYiA9IHNrYl9kZXF1ZXVlKCZoZGV2LT5jbWRfcSkpKSB7Ci0JCWlmIChoZGV2LT5zZW50X2NtZCkKLQkJCWtmcmVlX3NrYihoZGV2LT5zZW50X2NtZCk7CisJCWtmcmVlX3NrYihoZGV2LT5zZW50X2NtZCk7CiAKIAkJaWYgKChoZGV2LT5zZW50X2NtZCA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpKSkgewogCQkJYXRvbWljX2RlYygmaGRldi0+Y21kX2NudCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCBmOTFiYTY5Li41NTUzNDI0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTQ4NCw2ICs0ODQsMTUgQEAKIAlpZiAoaGRldi0+ZmVhdHVyZXNbNF0gJiBMTVBfRVY1KQogCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fRVY1KTsKIAorCWlmIChoZGV2LT5mZWF0dXJlc1s1XSAmIExNUF9FRFJfRVNDT18yTSkKKwkJaGRldi0+ZXNjb190eXBlIHw9IChFU0NPXzJFVjMpOworCisJaWYgKGhkZXYtPmZlYXR1cmVzWzVdICYgTE1QX0VEUl9FU0NPXzNNKQorCQloZGV2LT5lc2NvX3R5cGUgfD0gKEVTQ09fM0VWMyk7CisKKwlpZiAoaGRldi0+ZmVhdHVyZXNbNV0gJiBMTVBfRURSXzNTX0VTQ08pCisJCWhkZXYtPmVzY29fdHlwZSB8PSAoRVNDT18yRVY1IHwgRVNDT18zRVY1KTsKKwogCUJUX0RCRygiJXMgZmVhdHVyZXMgMHglLjJ4JS4yeCUuMnglLjJ4JS4yeCUuMnglLjJ4JS4yeCIsIGhkZXYtPm5hbWUsCiAJCQkJCWhkZXYtPmZlYXR1cmVzWzBdLCBoZGV2LT5mZWF0dXJlc1sxXSwKIAkJCQkJaGRldi0+ZmVhdHVyZXNbMl0sIGhkZXYtPmZlYXR1cmVzWzNdLApAQCAtOTE0LDcgKzkyMyw4IEBACiAJaWYgKGV2LT5zdGF0dXMpIHsKIAkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKGNvbm4sIGV2LT5zdGF0dXMpOwogCQloY2lfY29ubl9kZWwoY29ubik7Ci0JfQorCX0gZWxzZSBpZiAoZXYtPmxpbmtfdHlwZSAhPSBBQ0xfTElOSykKKwkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKGNvbm4sIGV2LT5zdGF0dXMpOwogCiB1bmxvY2s6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CkBAIC0xMDA5LDkgKzEwMTksNyBAQAogCWlmIChjb25uKSB7CiAJCWNvbm4tPnN0YXRlID0gQlRfQ0xPU0VEOwogCi0JCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKLQotCQloY2lfcHJvdG9fZGlzY29ubl9pbmQoY29ubiwgZXYtPnJlYXNvbik7CisJCWhjaV9wcm90b19kaXNjb25uX2NmbShjb25uLCBldi0+cmVhc29uKTsKIAkJaGNpX2Nvbm5fZGVsKGNvbm4pOwogCX0KIApAQCAtMTYwMCw3ICsxNjA4LDggQEAKIAogCQlpZiAoY29ubi0+c3RhdGUgPT0gQlRfQ09ORklHKSB7CiAJCQlpZiAoIWV2LT5zdGF0dXMgJiYgaGRldi0+c3NwX21vZGUgPiAwICYmCi0JCQkJCWNvbm4tPnNzcF9tb2RlID4gMCAmJiBjb25uLT5vdXQpIHsKKwkJCQkJY29ubi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPm91dCAmJgorCQkJCQljb25uLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfU0RQKSB7CiAJCQkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJCQljcC5oYW5kbGUgPSBldi0+aGFuZGxlOwogCQkJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsCkBAIC0xNjM3LDYgKzE2NDYsMTMgQEAKIAkJY29ubi0+dHlwZSA9IFNDT19MSU5LOwogCX0KIAorCWlmIChjb25uLT5vdXQgJiYgZXYtPnN0YXR1cyA9PSAweDFjICYmIGNvbm4tPmF0dGVtcHQgPCAyKSB7CisJCWNvbm4tPnBrdF90eXBlID0gKGhkZXYtPmVzY29fdHlwZSAmIFNDT19FU0NPX01BU0spIHwKKwkJCQkJKGhkZXYtPmVzY29fdHlwZSAmIEVEUl9FU0NPX01BU0spOworCQloY2lfc2V0dXBfc3luYyhjb25uLCBjb25uLT5saW5rLT5oYW5kbGUpOworCQlnb3RvIHVubG9jazsKKwl9CisKIAlpZiAoIWV2LT5zdGF0dXMpIHsKIAkJY29ubi0+aGFuZGxlID0gX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKTsKIAkJY29ubi0+c3RhdGUgID0gQlRfQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggMWExZjkxNi4uZWQ4Mjc5NiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoJmNvbm4tPmRldiwgTlVMTCwgX19tYXRjaF90dHkpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwotCQlkZXZpY2VfbW92ZShkZXYsIE5VTEwpOworCQlkZXZpY2VfbW92ZShkZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCBiOTM3NDhlLi5jYTRkM2I0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01MCw5ICs1MCwxMCBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xMSIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xMyIKIAotc3RhdGljIHUzMiBsMmNhcF9mZWF0X21hc2sgPSAweDAwMDA7CitzdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IDB4MDA4MDsKK3N0YXRpYyB1OCBsMmNhcF9maXhlZF9jaGFuWzhdID0geyAweDAyLCB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wczsKIApAQCAtNzcsOSArNzgsMTAgQEAKIAogCWJoX2xvY2tfc29jayhzayk7CiAKLQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QgJiYKLQkJCShsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9BVVRIIHwKLQkJCQkJTDJDQVBfTE1fRU5DUllQVCB8IEwyQ0FQX0xNX1NFQ1VSRSkpKQorCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8IHNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpCisJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKKwllbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgorCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmVhc29uID0gRUNPTk5SRUZVU0VEOwogCWVsc2UKIAkJcmVhc29uID0gRVRJTUVET1VUOwpAQCAtMjA0LDYgKzIwNiw4IEBACiAKIAlCVF9EQkcoImNvbm4gJXAsIHBzbSAweCUyLjJ4LCBkY2lkIDB4JTQuNHgiLCBjb25uLCBsMmNhcF9waShzayktPnBzbSwgbDJjYXBfcGkoc2spLT5kY2lkKTsKIAorCWNvbm4tPmRpc2NfcmVhc29uID0gMHgxMzsKKwogCWwyY2FwX3BpKHNrKS0+Y29ubiA9IGNvbm47CiAKIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKQEAgLTI1OSwxOCArMjYzLDM1IEBACiB9CiAKIC8qIFNlcnZpY2UgbGV2ZWwgc2VjdXJpdHkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJX191OCBhdXRoX3R5cGU7CiAKLQlpZiAoKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fRU5DUllQVCkgfHwKLQkJCQkobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9TRUNVUkUpKQotCQlyZXR1cm4gaGNpX2Nvbm5fZW5jcnlwdChjb25uLT5oY29uKTsKKwlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgeworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07CisJCWVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fQVVUSCkKLQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubi0+aGNvbik7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOworCQkJYnJlYWs7CisJCX0KKwl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkoY29ubi0+aGNvbiwgbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsCisJCQkJCQkJCWF1dGhfdHlwZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTggbDJjYXBfZ2V0X2lkZW50KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQpAQCAtMzEyLDcgKzMzMywxMCBAQAogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOwogCiAJaWYgKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVCkgewotCQlpZiAobDJjYXBfY2hlY2tfbGlua19tb2RlKHNrKSkgeworCQlpZiAoIShjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkUpKQorCQkJcmV0dXJuOworCisJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKIAkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CiAJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwpAQCAtMzU2LDcgKzM4MCw3IEBACiAJCX0KIAogCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpIHsKLQkJCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CiAJCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAkJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAJCQkJcmVxLnBzbSAgPSBsMmNhcF9waShzayktPnBzbTsKQEAgLTM3MSwxMCArMzk1LDE4IEBACiAJCQlyc3Auc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CiAJCQlyc3AuZGNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CiAKLQkJCWlmIChsMmNhcF9jaGVja19saW5rX21vZGUoc2spKSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKLQkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CisJCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApIHsKKwkJCQkJc3RydWN0IHNvY2sgKnBhcmVudCA9IGJ0X3NrKHNrKS0+cGFyZW50OworCQkJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfUEVORCk7CisJCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19BVVRIT1JfUEVORCk7CisJCQkJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOworCisJCQkJfSBlbHNlIHsKKwkJCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOworCQkJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1JfU1VDQ0VTUyk7CisJCQkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKIAkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfQVVUSEVOX1BFTkQpOwpAQCAtNDI2LDcgKzQ1OCw3IEBACiAJcmVhZF9sb2NrKCZsLT5sb2NrKTsKIAogCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkoc2spLT5saW5rX21vZGUgJiBMMkNBUF9MTV9SRUxJQUJMRSkKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUpCiAJCQlzay0+c2tfZXJyID0gZXJyOwogCX0KIApAQCAtNDM3LDYgKzQ2OSw3IEBACiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CiAKKwljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOwogCWNvbm4tPmluZm9faWRlbnQgPSAwOwogCiAJbDJjYXBfY29ubl9zdGFydChjb25uKTsKQEAgLTQ3MCw2ICs1MDMsOCBAQAogCXNwaW5fbG9ja19pbml0KCZjb25uLT5sb2NrKTsKIAlyd2xvY2tfaW5pdCgmY29ubi0+Y2hhbl9saXN0LmxvY2spOwogCisJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOworCiAJcmV0dXJuIGNvbm47CiB9CiAKQEAgLTQ4Myw4ICs1MTgsNyBAQAogCiAJQlRfREJHKCJoY29uICVwIGNvbm4gJXAsIGVyciAlZCIsIGhjb24sIGNvbm4sIGVycik7CiAKLQlpZiAoY29ubi0+cnhfc2tiKQotCQlrZnJlZV9za2IoY29ubi0+cnhfc2tiKTsKKwlrZnJlZV9za2IoY29ubi0+cnhfc2tiKTsKIAogCS8qIEtpbGwgY2hhbm5lbHMgKi8KIAl3aGlsZSAoKHNrID0gY29ubi0+Y2hhbl9saXN0LmhlYWQpKSB7CkBAIC02MDgsNyArNjQyLDYgQEAKIAogCWNhc2UgQlRfQ09OTkVDVEVEOgogCWNhc2UgQlRfQ09ORklHOgotCWNhc2UgQlRfQ09OTkVDVDI6CiAJCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAJCQlzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yZXEgcmVxOwpAQCAtNjI0LDYgKzY1NywyNyBAQAogCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CiAJCWJyZWFrOwogCisJY2FzZSBCVF9DT05ORUNUMjoKKwkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CisJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CisJCQlfX3UxNiByZXN1bHQ7CisKKwkJCWlmIChidF9zayhzayktPmRlZmVyX3NldHVwKQorCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9CQURfUFNNOworCisJCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CisJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOworCQl9IGVsc2UKKwkJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOworCQlicmVhazsKKwogCWNhc2UgQlRfQ09OTkVDVDoKIAljYXNlIEJUX0RJU0NPTk46CiAJCWwyY2FwX2NoYW5fZGVsKHNrLCByZWFzb24pOwpAQCAtNjUzLDEzICs3MDcsMTkgQEAKIAogCWlmIChwYXJlbnQpIHsKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7CisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cDsKKwogCQlwaS0+aW10dSA9IGwyY2FwX3BpKHBhcmVudCktPmltdHU7CiAJCXBpLT5vbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+b210dTsKLQkJcGktPmxpbmtfbW9kZSA9IGwyY2FwX3BpKHBhcmVudCktPmxpbmtfbW9kZTsKKwkJcGktPnNlY19sZXZlbCA9IGwyY2FwX3BpKHBhcmVudCktPnNlY19sZXZlbDsKKwkJcGktPnJvbGVfc3dpdGNoID0gbDJjYXBfcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CisJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IGwyY2FwX3BpKHBhcmVudCktPmZvcmNlX3JlbGlhYmxlOwogCX0gZWxzZSB7CiAJCXBpLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJCXBpLT5vbXR1ID0gMDsKLQkJcGktPmxpbmtfbW9kZSA9IDA7CisJCXBpLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCXBpLT5yb2xlX3N3aXRjaCA9IDA7CisJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IDA7CiAJfQogCiAJLyogRGVmYXVsdCBjb25maWcgb3B0aW9ucyAqLwpAQCAtNzIzLDE3ICs3ODMsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWRkcl9sZW4pCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuKQogewotCXN0cnVjdCBzb2NrYWRkcl9sMiAqbGEgPSAoc3RydWN0IHNvY2thZGRyX2wyICopIGFkZHI7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IHNvY2thZGRyX2wyIGxhOworCWludCBsZW4sIGVyciA9IDA7CiAKLQlCVF9EQkcoInNrICVwLCAlcyAlZCIsIHNrLCBiYXRvc3RyKCZsYS0+bDJfYmRhZGRyKSwgbGEtPmwyX3BzbSk7CisJQlRfREJHKCJzayAlcCIsIHNrKTsKIAogCWlmICghYWRkciB8fCBhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQkxVRVRPT1RIKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW1lbXNldCgmbGEsIDAsIHNpemVvZihsYSkpOworCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGxhKSwgYWxlbik7CisJbWVtY3B5KCZsYSwgYWRkciwgbGVuKTsKKworCWlmIChsYS5sMl9jaWQpCisJCXJldHVybiAtRUlOVkFMOworCiAJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfT1BFTikgewpAQCAtNzQxLDcgKzgwOCw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAobGEtPmwyX3BzbSAmJiBidG9ocyhsYS0+bDJfcHNtKSA8IDB4MTAwMSAmJgorCWlmIChsYS5sMl9wc20gJiYgYnRvaHMobGEubDJfcHNtKSA8IDB4MTAwMSAmJgogCQkJCSFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkgewogCQllcnIgPSAtRUFDQ0VTOwogCQlnb3RvIGRvbmU7CkBAIC03NDksMTQgKzgxNiwxNyBAQAogCiAJd3JpdGVfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKIAotCWlmIChsYS0+bDJfcHNtICYmIF9fbDJjYXBfZ2V0X3NvY2tfYnlfYWRkcihsYS0+bDJfcHNtLCAmbGEtPmwyX2JkYWRkcikpIHsKKwlpZiAobGEubDJfcHNtICYmIF9fbDJjYXBfZ2V0X3NvY2tfYnlfYWRkcihsYS5sMl9wc20sICZsYS5sMl9iZGFkZHIpKSB7CiAJCWVyciA9IC1FQUREUklOVVNFOwogCX0gZWxzZSB7CiAJCS8qIFNhdmUgc291cmNlIGFkZHJlc3MgKi8KLQkJYmFjcHkoJmJ0X3NrKHNrKS0+c3JjLCAmbGEtPmwyX2JkYWRkcik7Ci0JCWwyY2FwX3BpKHNrKS0+cHNtICAgPSBsYS0+bDJfcHNtOwotCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEtPmwyX3BzbTsKKwkJYmFjcHkoJmJ0X3NrKHNrKS0+c3JjLCAmbGEubDJfYmRhZGRyKTsKKwkJbDJjYXBfcGkoc2spLT5wc20gICA9IGxhLmwyX3BzbTsKKwkJbDJjYXBfcGkoc2spLT5zcG9ydCA9IGxhLmwyX3BzbTsKIAkJc2stPnNrX3N0YXRlID0gQlRfQk9VTkQ7CisKKwkJaWYgKGJ0b2hzKGxhLmwyX3BzbSkgPT0gMHgwMDAxIHx8IGJ0b2hzKGxhLmwyX3BzbSkgPT0gMHgwMDAzKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7CiAJfQogCiAJd3JpdGVfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwpAQCAtNzc2LDcgKzg0Niw4IEBACiAJX191OCBhdXRoX3R5cGU7CiAJaW50IGVyciA9IDA7CiAKLQlCVF9EQkcoIiVzIC0+ICVzIHBzbSAweCUyLjJ4IiwgYmF0b3N0cihzcmMpLCBiYXRvc3RyKGRzdCksIGwyY2FwX3BpKHNrKS0+cHNtKTsKKwlCVF9EQkcoIiVzIC0+ICVzIHBzbSAweCUyLjJ4IiwgYmF0b3N0cihzcmMpLCBiYXRvc3RyKGRzdCksCisJCQkJCQkJbDJjYXBfcGkoc2spLT5wc20pOwogCiAJaWYgKCEoaGRldiA9IGhjaV9nZXRfcm91dGUoZHN0LCBzcmMpKSkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC03ODUsMjEgKzg1Niw0MiBAQAogCiAJZXJyID0gLUVOT01FTTsKIAotCWlmIChsMmNhcF9waShzayktPmxpbmtfbW9kZSAmIEwyQ0FQX0xNX0FVVEggfHwKLQkJCWwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fRU5DUllQVCB8fAotCQkJCWwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKQorCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElOR19NSVRNOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgorCQkJYXV0aF90eXBlID0gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQogCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKIAkJZWxzZQotCQkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOwotCX0gZWxzZSB7Ci0JCWlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKQogCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCWVsc2UKKworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CiAJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhdXRoX3R5cGUgPSBIQ0lfQVRfTk9fQk9ORElORzsKKwkJCWJyZWFrOworCQl9CiAJfQogCi0JaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIEFDTF9MSU5LLCBkc3QsIGF1dGhfdHlwZSk7CisJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIEFDTF9MSU5LLCBkc3QsCisJCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsLCBhdXRoX3R5cGUpOwogCWlmICghaGNvbikKIAkJZ290byBkb25lOwogCkBAIC04MzUsMjAgKzkyNywyNSBAQAogCiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgZXJyID0gMDsKLQotCWxvY2tfc29jayhzayk7CisJc3RydWN0IHNvY2thZGRyX2wyIGxhOworCWludCBsZW4sIGVyciA9IDA7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCi0JaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEggfHwgYWxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9CisJaWYgKCFhZGRyIHx8IGFkZHItPnNhX2ZhbWlseSAhPSBBRl9CTFVFVE9PVEgpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUICYmICFsYS0+bDJfcHNtKSB7CisJbWVtc2V0KCZsYSwgMCwgc2l6ZW9mKGxhKSk7CisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YobGEpLCBhbGVuKTsKKwltZW1jcHkoJmxhLCBhZGRyLCBsZW4pOworCisJaWYgKGxhLmwyX2NpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUICYmICFsYS5sMl9wc20pIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTg3NSw4ICs5NzIsOCBAQAogCX0KIAogCS8qIFNldCBkZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCBwc20gKi8KLQliYWNweSgmYnRfc2soc2spLT5kc3QsICZsYS0+bDJfYmRhZGRyKTsKLQlsMmNhcF9waShzayktPnBzbSA9IGxhLT5sMl9wc207CisJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmbGEubDJfYmRhZGRyKTsKKwlsMmNhcF9waShzayktPnBzbSA9IGxhLmwyX3BzbTsKIAogCWlmICgoZXJyID0gbDJjYXBfZG9fY29ubmVjdChzaykpKQogCQlnb3RvIGRvbmU7CkBAIC0xMDAwLDEyICsxMDk3LDE2IEBACiAJYWRkci0+c2FfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCSpsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2wyKTsKIAotCWlmIChwZWVyKQorCWlmIChwZWVyKSB7CisJCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnBzbTsKIAkJYmFjcHkoJmxhLT5sMl9iZGFkZHIsICZidF9zayhzayktPmRzdCk7Ci0JZWxzZQorCQlsYS0+bDJfY2lkID0gaHRvYnMobDJjYXBfcGkoc2spLT5kY2lkKTsKKwl9IGVsc2UgeworCQlsYS0+bDJfcHNtID0gbDJjYXBfcGkoc2spLT5zcG9ydDsKIAkJYmFjcHkoJmxhLT5sMl9iZGFkZHIsICZidF9zayhzayktPnNyYyk7CisJCWxhLT5sMl9jaWQgPSBodG9icyhsMmNhcF9waShzayktPnNjaWQpOworCX0KIAotCWxhLT5sMl9wc20gPSBsMmNhcF9waShzayktPnBzbTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwNiwxMSArMTIwNywzOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfc29ja19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIgJiYgYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgeworCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOworCisJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKKworCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOworCQlsMmNhcF9zZW5kX2NtZChsMmNhcF9waShzayktPmNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCisJCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBidF9zb2NrX3JlY3Ztc2coaW9jYiwgc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKK30KKworc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBsMmNhcF9vcHRpb25zIG9wdHM7Ci0JaW50IGVyciA9IDAsIGxlbjsKKwlpbnQgbGVuLCBlcnIgPSAwOwogCXUzMiBvcHQ7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwpAQCAtMTE0MCw3ICsxMjY4LDE1IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWwyY2FwX3BpKHNrKS0+bGlua19tb2RlID0gb3B0OworCQlpZiAob3B0ICYgTDJDQVBfTE1fQVVUSCkKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQlpZiAob3B0ICYgTDJDQVBfTE1fRU5DUllQVCkKKwkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOworCQlpZiAob3B0ICYgTDJDQVBfTE1fU0VDVVJFKQorCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9ISUdIOworCisJCWwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2ggICAgPSAob3B0ICYgTDJDQVBfTE1fTUFTVEVSKTsKKwkJbDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSA9IChvcHQgJiBMMkNBUF9MTV9SRUxJQUJMRSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTExNTIsMTIgKzEyODgsNzcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CisJaW50IGxlbiwgZXJyID0gMDsKKwl1MzIgb3B0OworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfTDJDQVApCisJCXJldHVybiBsMmNhcF9zb2NrX3NldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJbG9ja19zb2NrKHNrKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgQlRfU0VDVVJJVFk6CisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCAmJiBzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VjLmxldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKHNlYyksIG9wdGxlbik7CisJCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmc2VjLCBvcHR2YWwsIGxlbikpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzZWMubGV2ZWwgPCBCVF9TRUNVUklUWV9MT1cgfHwKKwkJCQkJc2VjLmxldmVsID4gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBzZWMubGV2ZWw7CisJCWJyZWFrOworCisJY2FzZSBCVF9ERUZFUl9TRVRVUDoKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCAmJiBzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZ2V0X3VzZXIob3B0LCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlidF9zayhzayktPmRlZmVyX3NldHVwID0gb3B0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbDJjYXBfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCBsMmNhcF9jb25uaW5mbyBjaW5mbzsKIAlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCkBAIC0xMTgwLDEyICsxMzgxLDM2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9MTToKLQkJaWYgKHB1dF91c2VyKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQorCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfTE9XOgorCQkJb3B0ID0gTDJDQVBfTE1fQVVUSDsKKwkJCWJyZWFrOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCW9wdCA9IEwyQ0FQX0xNX0FVVEggfCBMMkNBUF9MTV9FTkNSWVBUOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCW9wdCA9IEwyQ0FQX0xNX0FVVEggfCBMMkNBUF9MTV9FTkNSWVBUIHwKKwkJCQkJCQlMMkNBUF9MTV9TRUNVUkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9wdCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJb3B0IHw9IEwyQ0FQX0xNX01BU1RFUjsKKworCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKKwkJCW9wdCB8PSBMMkNBUF9MTV9SRUxJQUJMRTsKKworCQlpZiAocHV0X3VzZXIob3B0LCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQogCQkJZXJyID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NPTk5JTkZPOgotCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkgeworCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCAmJgorCQkJCQkhKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUMiAmJgorCQkJCQkJYnRfc2soc2spLT5kZWZlcl9zZXR1cCkpIHsKIAkJCWVyciA9IC1FTk9UQ09OTjsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMjA4LDYgKzE0MzMsNjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfTDJDQVApCisJCXJldHVybiBsMmNhcF9zb2NrX2dldHNvY2tvcHRfb2xkKHNvY2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKworCWlmIChsZXZlbCAhPSBTT0xfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBsMmNhcF9waShzayktPnNlY19sZXZlbDsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKHNlYykpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJnNlYywgbGVuKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChwdXRfdXNlcihidF9zayhzayktPmRlZmVyX3NldHVwLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQorCQkJZXJyID0gLUVGQVVMVDsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTEyNzAsMTEgKzE1NDksNiBAQAogCQkgKi8KIAkJcGFyZW50LT5za19kYXRhX3JlYWR5KHBhcmVudCwgMCk7CiAJfQotCi0JaWYgKGwyY2FwX3BpKHNrKS0+bGlua19tb2RlICYgTDJDQVBfTE1fU0VDVVJFKSB7Ci0JCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOwotCQloY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoY29ubi0+aGNvbik7Ci0JfQogfQogCiAvKiBDb3B5IGZyYW1lIHRvIGFsbCByYXcgc29ja2V0cyBvbiB0aGF0IGNvbm5lY3Rpb24gKi8KQEAgLTE1NDksOCArMTgyMywxMSBAQAogCiAJaWYgKChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpICYmCiAJCQkJCWNtZC0+aWRlbnQgPT0gY29ubi0+aW5mb19pZGVudCkgewotCQljb25uLT5pbmZvX2lkZW50ID0gMDsKIAkJZGVsX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyKTsKKworCQljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOworCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKwogCQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOwogCX0KIApAQCAtMTU4MCw2ICsxODU3LDcgQEAKIAkvKiBDaGVjayBpZiB0aGUgQUNMIGlzIHNlY3VyZSBlbm91Z2ggKGlmIG5vdCBTRFApICovCiAJaWYgKHBzbSAhPSBjcHVfdG9fbGUxNigweDAwMDEpICYmCiAJCQkJIWhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZShjb25uLT5oY29uKSkgeworCQljb25uLT5kaXNjX3JlYXNvbiA9IDB4MDU7CiAJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKIAkJZ290byByZXNwb25zZTsKIAl9CkBAIC0xNjIxLDExICsxODk5LDE4IEBACiAKIAlsMmNhcF9waShzayktPmlkZW50ID0gY21kLT5pZGVudDsKIAotCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpIHsKLQkJaWYgKGwyY2FwX2NoZWNrX2xpbmtfbW9kZShzaykpIHsKLQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTkZJRzsKLQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NVQ0NFU1M7Ci0JCQlzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOworCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkUpIHsKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkgeworCQkJaWYgKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXApIHsKKwkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNUMjsKKwkJCQlyZXN1bHQgPSBMMkNBUF9DUl9QRU5EOworCQkJCXN0YXR1cyA9IEwyQ0FQX0NTX0FVVEhPUl9QRU5EOworCQkJCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOworCQkJfSBlbHNlIHsKKwkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05GSUc7CisJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfU1VDQ0VTUzsKKwkJCQlzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOworCQkJfQogCQl9IGVsc2UgewogCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVDI7CiAJCQlyZXN1bHQgPSBMMkNBUF9DUl9QRU5EOwpAQCAtMTY5NSwxMSArMTk4MCwxNCBAQAogCQlsMmNhcF9waShzayktPmRjaWQgPSBkY2lkOwogCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKIAorCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJj0gfkwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCiAJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCByZXEpLCByZXEpOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ1JfUEVORDoKKwkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xOTA4LDYgKzIxOTYsMTQgQEAKIAkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihsMmNhcF9mZWF0X21hc2spLCAoX19sZTMyICopIHJzcC0+ZGF0YSk7CiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNtZC0+aWRlbnQsCiAJCQkJCUwyQ0FQX0lORk9fUlNQLCBzaXplb2YoYnVmKSwgYnVmKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gTDJDQVBfSVRfRklYRURfQ0hBTikgeworCQl1OCBidWZbMTJdOworCQlzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgKnJzcCA9IChzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgKikgYnVmOworCQlyc3AtPnR5cGUgICA9IGNwdV90b19sZTE2KEwyQ0FQX0lUX0ZJWEVEX0NIQU4pOworCQlyc3AtPnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0lSX1NVQ0NFU1MpOworCQltZW1jcHkoYnVmICsgNCwgbDJjYXBfZml4ZWRfY2hhbiwgOCk7CisJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNtZC0+aWRlbnQsCisJCQkJCUwyQ0FQX0lORk9fUlNQLCBzaXplb2YoYnVmKSwgYnVmKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgbDJjYXBfaW5mb19yc3AgcnNwOwogCQlyc3AudHlwZSAgID0gY3B1X3RvX2xlMTYodHlwZSk7CkBAIC0xOTI5LDE0ICsyMjI1LDMxIEBACiAKIAlCVF9EQkcoInR5cGUgMHglNC40eCByZXN1bHQgMHglMi4yeCIsIHR5cGUsIHJlc3VsdCk7CiAKLQljb25uLT5pbmZvX2lkZW50ID0gMDsKLQogCWRlbF90aW1lcigmY29ubi0+aW5mb190aW1lcik7CiAKLQlpZiAodHlwZSA9PSBMMkNBUF9JVF9GRUFUX01BU0spCisJaWYgKHR5cGUgPT0gTDJDQVBfSVRfRkVBVF9NQVNLKSB7CiAJCWNvbm4tPmZlYXRfbWFzayA9IGdldF91bmFsaWduZWRfbGUzMihyc3AtPmRhdGEpOwogCi0JbDJjYXBfY29ubl9zdGFydChjb25uKTsKKwkJaWYgKGNvbm4tPmZlYXRfbWFzayAmIDB4MDA4MCkgeworCQkJc3RydWN0IGwyY2FwX2luZm9fcmVxIHJlcTsKKwkJCXJlcS50eXBlID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRklYRURfQ0hBTik7CisKKwkJCWNvbm4tPmluZm9faWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNvbm4tPmluZm9faWRlbnQsCisJCQkJCUwyQ0FQX0lORk9fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7CisJCX0gZWxzZSB7CisJCQljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOworCQkJY29ubi0+aW5mb19pZGVudCA9IDA7CisKKwkJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gTDJDQVBfSVRfRklYRURfQ0hBTikgeworCQljb25uLT5pbmZvX3N0YXRlIHw9IEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FOworCQljb25uLT5pbmZvX2lkZW50ID0gMDsKKworCQlsMmNhcF9jb25uX3N0YXJ0KGNvbm4pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjE0MywxMCArMjQ1NiwxNSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsICZoZGV2LT5iZGFkZHIpKSB7Ci0JCQlsbTEgfD0gKEhDSV9MTV9BQ0NFUFQgfCBsMmNhcF9waShzayktPmxpbmtfbW9kZSk7CisJCQlsbTEgfD0gSENJX0xNX0FDQ0VQVDsKKwkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJCWxtMSB8PSBIQ0lfTE1fTUFTVEVSOwogCQkJZXhhY3QrKzsKLQkJfSBlbHNlIGlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBCREFERFJfQU5ZKSkKLQkJCWxtMiB8PSAoSENJX0xNX0FDQ0VQVCB8IGwyY2FwX3BpKHNrKS0+bGlua19tb2RlKTsKKwkJfSBlbHNlIGlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBCREFERFJfQU5ZKSkgeworCQkJbG0yIHw9IEhDSV9MTV9BQ0NFUFQ7CisJCQlpZiAobDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJCQlsbTIgfD0gSENJX0xNX01BU1RFUjsKKwkJfQogCX0KIAlyZWFkX3VubG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKIApAQCAtMjE3Miw3ICsyNDkwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCByZWFzb24pCitzdGF0aWMgaW50IGwyY2FwX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqaGNvbikKK3sKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7CisKKwlCVF9EQkcoImhjb24gJXAiLCBoY29uKTsKKworCWlmIChoY29uLT50eXBlICE9IEFDTF9MSU5LIHx8ICFjb25uKQorCQlyZXR1cm4gMHgxMzsKKworCXJldHVybiBjb25uLT5kaXNjX3JlYXNvbjsKK30KKworc3RhdGljIGludCBsMmNhcF9kaXNjb25uX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHJlYXNvbikKIHsKIAlCVF9EQkcoImhjb24gJXAgcmVhc29uICVkIiwgaGNvbiwgcmVhc29uKTsKIApAQCAtMjE4NCw3ICsyNTE0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzdHJ1Y3Qgc29jayAqc2ssIHU4IGVuY3J5cHQpCit7CisJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQorCQlyZXR1cm47CisKKwlpZiAoZW5jcnlwdCA9PSAweDAwKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKKwkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOworCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaICogNSk7CisJCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCV9fbDJjYXBfc29ja19jbG9zZShzaywgRUNPTk5SRUZVU0VEKTsKKwl9IGVsc2UgeworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNKQorCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJfQorfQorCitzdGF0aWMgaW50IGwyY2FwX3NlY3VyaXR5X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKIHsKIAlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsOwogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKQEAgLTIyMDAsODUgKzI1NDcsMTYgQEAKIAlyZWFkX2xvY2soJmwtPmxvY2spOwogCiAJZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7Ci0JCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7Ci0KIAkJYmhfbG9ja19zb2NrKHNrKTsKIAotCQlpZiAoKHBpLT5saW5rX21vZGUgJiAoTDJDQVBfTE1fRU5DUllQVCB8IEwyQ0FQX0xNX1NFQ1VSRSkpICYmCi0JCQkJCSEoaGNvbi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpICYmCi0JCQkJCQkJCSFzdGF0dXMpIHsKKwkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EKSB7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkgewotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yZXEgcmVxOwotCQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOwotCi0JCQkJbDJjYXBfcGkoc2spLT5pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKLQotCQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7Ci0JCQl9IGVsc2UgewotCQkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwotCQkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAvIDEwKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpIHsKLQkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7Ci0JCQlfX3UxNiByZXN1bHQ7Ci0KLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NVQ0NFU1M7Ci0JCQl9IGVsc2UgewotCQkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47Ci0JCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gMTApOwotCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1NFQ19CTE9DSzsKLQkJCX0KLQotCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOwotCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKLQkJfQotCi0JCWJoX3VubG9ja19zb2NrKHNrKTsKLQl9Ci0KLQlyZWFkX3VubG9jaygmbC0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsMmNhcF9lbmNyeXB0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKLXsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsOwotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0KLQlpZiAoIWNvbm4pCi0JCXJldHVybiAwOwotCi0JbCA9ICZjb25uLT5jaGFuX2xpc3Q7Ci0KLQlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKLQotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0KLQlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKLQotCQliaF9sb2NrX3NvY2soc2spOwotCi0JCWlmICgocGktPmxpbmtfbW9kZSAmIChMMkNBUF9MTV9FTkNSWVBUIHwgTDJDQVBfTE1fU0VDVVJFKSkgJiYKLQkJCQkJKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQgfHwKLQkJCQkJCXNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpICYmCi0JCQkJCQkhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgewotCQkJX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCBFQ09OTlJFRlVTRUQpOworCQlpZiAoIXN0YXR1cyAmJiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1RFRCB8fAorCQkJCQkJc2stPnNrX3N0YXRlID09IEJUX0NPTkZJRykpIHsKKwkJCWwyY2FwX2NoZWNrX2VuY3J5cHRpb24oc2ssIGVuY3J5cHQpOwogCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJY29udGludWU7CiAJCX0KQEAgLTIzNzYsNyArMjY1NCw3IEBACiAJCQlnb3RvIGRyb3A7CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQoY29ubi0+cnhfc2tiLCBza2ItPmxlbiksCi0JCQkgICAgICBza2ItPmxlbik7CisJCQkJCQkJCXNrYi0+bGVuKTsKIAkJY29ubi0+cnhfbGVuID0gbGVuIC0gc2tiLT5sZW47CiAJfSBlbHNlIHsKIAkJQlRfREJHKCJDb250OiBmcmFnIGxlbiAlZCAoZXhwZWN0aW5nICVkKSIsIHNrYi0+bGVuLCBjb25uLT5yeF9sZW4pOwpAQCAtMjM5OCw3ICsyNjc2LDcgQEAKIAkJfQogCiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KGNvbm4tPnJ4X3NrYiwgc2tiLT5sZW4pLAotCQkJICAgICAgc2tiLT5sZW4pOworCQkJCQkJCQlza2ItPmxlbik7CiAJCWNvbm4tPnJ4X2xlbiAtPSBza2ItPmxlbjsKIAogCQlpZiAoIWNvbm4tPnJ4X2xlbikgewpAQCAtMjQyNCwxMCArMjcwMiwxMCBAQAogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7CiAJCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAKLQkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWQgJWQgMHglNC40eCAweCU0LjR4ICVkICVkIDB4JXhcbiIsCisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzICVzICVkICVkIDB4JTQuNHggMHglNC40eCAlZCAlZCAlZFxuIiwKIAkJCQliYXRvc3RyKCZidF9zayhzayktPnNyYyksIGJhdG9zdHIoJmJ0X3NrKHNrKS0+ZHN0KSwKIAkJCQlzay0+c2tfc3RhdGUsIGJ0b2hzKHBpLT5wc20pLCBwaS0+c2NpZCwgcGktPmRjaWQsCi0JCQkJcGktPmltdHUsIHBpLT5vbXR1LCBwaS0+bGlua19tb2RlKTsKKwkJCQlwaS0+aW10dSwgcGktPm9tdHUsIHBpLT5zZWNfbGV2ZWwpOwogCX0KIAogCXJlYWRfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwpAQCAtMjQ0Nyw3ICsyNzI1LDcgQEAKIAkuYWNjZXB0CQk9IGwyY2FwX3NvY2tfYWNjZXB0LAogCS5nZXRuYW1lCT0gbDJjYXBfc29ja19nZXRuYW1lLAogCS5zZW5kbXNnCT0gbDJjYXBfc29ja19zZW5kbXNnLAotCS5yZWN2bXNnCT0gYnRfc29ja19yZWN2bXNnLAorCS5yZWN2bXNnCT0gbDJjYXBfc29ja19yZWN2bXNnLAogCS5wb2xsCQk9IGJ0X3NvY2tfcG9sbCwKIAkuaW9jdGwJCT0gYnRfc29ja19pb2N0bCwKIAkubW1hcAkJPSBzb2NrX25vX21tYXAsCkBAIC0yNDY5LDggKzI3NDcsOCBAQAogCS5jb25uZWN0X2luZAk9IGwyY2FwX2Nvbm5lY3RfaW5kLAogCS5jb25uZWN0X2NmbQk9IGwyY2FwX2Nvbm5lY3RfY2ZtLAogCS5kaXNjb25uX2luZAk9IGwyY2FwX2Rpc2Nvbm5faW5kLAotCS5hdXRoX2NmbQk9IGwyY2FwX2F1dGhfY2ZtLAotCS5lbmNyeXB0X2NmbQk9IGwyY2FwX2VuY3J5cHRfY2ZtLAorCS5kaXNjb25uX2NmbQk9IGwyY2FwX2Rpc2Nvbm5fY2ZtLAorCS5zZWN1cml0eV9jZm0JPSBsMmNhcF9zZWN1cml0eV9jZm0sCiAJLnJlY3ZfYWNsZGF0YQk9IGwyY2FwX3JlY3ZfYWNsZGF0YQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IGFjZDg0ZmQuLjFkMGZiMGYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9yZmNvbW0uaD4KIAotI2RlZmluZSBWRVJTSU9OICIxLjEwIgorI2RlZmluZSBWRVJTSU9OICIxLjExIgogCiBzdGF0aWMgaW50IGRpc2FibGVfY2ZjID0gMDsKIHN0YXRpYyBpbnQgY2hhbm5lbF9tdHUgPSAtMTsKQEAgLTIyMywxOSArMjIzLDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmZjb21tX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKK3N0YXRpYyBpbmxpbmUgaW50IHJmY29tbV9jaGVja19zZWN1cml0eShzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKKwlfX3U4IGF1dGhfdHlwZTsKIAotCWlmIChkLT5saW5rX21vZGUgJiAoUkZDT01NX0xNX0VOQ1JZUFQgfCBSRkNPTU1fTE1fU0VDVVJFKSkgewotCQlpZiAoIWhjaV9jb25uX2VuY3J5cHQobDJjYXBfcGkoc2spLT5jb25uLT5oY29uKSkKLQkJCXJldHVybiAxOwotCX0gZWxzZSBpZiAoZC0+bGlua19tb2RlICYgUkZDT01NX0xNX0FVVEgpIHsKLQkJaWYgKCFoY2lfY29ubl9hdXRoKGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbikpCi0JCQlyZXR1cm4gMTsKKwlzd2l0Y2ggKGQtPnNlY19sZXZlbCkgeworCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQlicmVhazsKKwljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJYXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7CisJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIGQtPnNlY19sZXZlbCwKKwkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAogLyogLS0tLSBSRkNPTU0gRExDcyAtLS0tICovCkBAIC0zODgsMTAgKzM5NCwxMCBAQAogCWQtPmNmYyA9IChzLT5jZmMgPT0gUkZDT01NX0NGQ19VTktOT1dOKSA/IDAgOiBzLT5jZmM7CiAKIAlpZiAocy0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEKSB7Ci0JCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKQotCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwotCQllbHNlCisJCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpCiAJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJZWxzZQorCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwogCX0KIAogCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9DT05OX1RJTUVPVVQpOwpAQCAtNDIxLDkgKzQyNywxNiBAQAogCQkJZCwgZC0+c3RhdGUsIGQtPmRsY2ksIGVyciwgcyk7CiAKIAlzd2l0Y2ggKGQtPnN0YXRlKSB7Ci0JY2FzZSBCVF9DT05ORUNURUQ6Ci0JY2FzZSBCVF9DT05GSUc6CiAJY2FzZSBCVF9DT05ORUNUOgorCWNhc2UgQlRfQ09ORklHOgorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkgeworCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX0FVVEgpOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbCB0aHJvdWdoICovCisKKwljYXNlIEJUX0NPTk5FQ1RFRDoKIAkJZC0+c3RhdGUgPSBCVF9ESVNDT05OOwogCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZkLT50eF9xdWV1ZSkpIHsKIAkJCXJmY29tbV9zZW5kX2Rpc2MocywgZC0+ZGxjaSk7CkBAIC00MzQsNiArNDQ3LDE1IEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIEJUX09QRU46CisJY2FzZSBCVF9DT05ORUNUMjoKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncykpIHsKKwkJCXNldF9iaXQoUkZDT01NX0FVVEhfUkVKRUNULCAmZC0+ZmxhZ3MpOworCQkJcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9BVVRIKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCiAJZGVmYXVsdDoKIAkJcmZjb21tX2RsY19jbGVhcl90aW1lcihkKTsKIApAQCAtNjM2LDYgKzY1OCw3IEBACiAJYmFjcHkoJmFkZHIubDJfYmRhZGRyLCBzcmMpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gMDsKKwlhZGRyLmwyX2NpZCAgICA9IDA7CiAJKmVyciA9IGtlcm5lbF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk7CiAJaWYgKCplcnIgPCAwKQogCQlnb3RvIGZhaWxlZDsKQEAgLTY1Nyw2ICs2ODAsNyBAQAogCWJhY3B5KCZhZGRyLmwyX2JkYWRkciwgZHN0KTsKIAlhZGRyLmwyX2ZhbWlseSA9IEFGX0JMVUVUT09USDsKIAlhZGRyLmwyX3BzbSAgICA9IGh0b2JzKFJGQ09NTV9QU00pOworCWFkZHIubDJfY2lkICAgID0gMDsKIAkqZXJyID0ga2VybmVsX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpLCBPX05PTkJMT0NLKTsKIAlpZiAoKmVyciA9PSAwIHx8ICplcnIgPT0gLUVJTlBST0dSRVNTKQogCQlyZXR1cm4gczsKQEAgLTExNjIsNyArMTE4Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKQordm9pZCByZmNvbW1fZGxjX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKIApAQCAtMTE3NSwxMiArMTE5OSwzMSBAQAogCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKIAlyZmNvbW1fZGxjX3VubG9jayhkKTsKIAotCWlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fTUFTVEVSKQorCWlmIChkLT5yb2xlX3N3aXRjaCkKIAkJaGNpX2Nvbm5fc3dpdGNoX3JvbGUobDJjYXBfcGkoc2spLT5jb25uLT5oY29uLCAweDAwKTsKIAogCXJmY29tbV9zZW5kX21zYyhkLT5zZXNzaW9uLCAxLCBkLT5kbGNpLCBkLT52MjRfc2lnKTsKIH0KIAorc3RhdGljIHZvaWQgcmZjb21tX2NoZWNrX2FjY2VwdChzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKK3sKKwlpZiAocmZjb21tX2NoZWNrX3NlY3VyaXR5KGQpKSB7CisJCWlmIChkLT5kZWZlcl9zZXR1cCkgeworCQkJc2V0X2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncyk7CisJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKworCQkJcmZjb21tX2RsY19sb2NrKGQpOworCQkJZC0+c3RhdGUgPSBCVF9DT05ORUNUMjsKKwkJCWQtPnN0YXRlX2NoYW5nZShkLCAwKTsKKwkJCXJmY29tbV9kbGNfdW5sb2NrKGQpOworCQl9IGVsc2UKKwkJCXJmY29tbV9kbGNfYWNjZXB0KGQpOworCX0gZWxzZSB7CisJCXNldF9iaXQoUkZDT01NX0FVVEhfUEVORElORywgJmQtPmZsYWdzKTsKKwkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7CisJfQorfQorCiBzdGF0aWMgaW50IHJmY29tbV9yZWN2X3NhYm0oc3RydWN0IHJmY29tbV9zZXNzaW9uICpzLCB1OCBkbGNpKQogewogCXN0cnVjdCByZmNvbW1fZGxjICpkOwpAQCAtMTIwMywxMSArMTI0Niw3IEBACiAJaWYgKGQpIHsKIAkJaWYgKGQtPnN0YXRlID09IEJUX09QRU4pIHsKIAkJCS8qIERMQyB3YXMgcHJldmlvdXNseSBvcGVuZWQgYnkgUE4gcmVxdWVzdCAqLwotCQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKLQkJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJCXJmY29tbV9jaGVja19hY2NlcHQoZCk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTIxOSwxMSArMTI1OCw3IEBACiAJCWQtPmFkZHIgPSBfX2FkZHIocy0+aW5pdGlhdG9yLCBkbGNpKTsKIAkJcmZjb21tX2RsY19saW5rKHMsIGQpOwogCi0JCWlmIChyZmNvbW1fY2hlY2tfbGlua19tb2RlKGQpKSB7Ci0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncyk7Ci0JCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKLQkJfSBlbHNlCi0JCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKKwkJcmZjb21tX2NoZWNrX2FjY2VwdChkKTsKIAl9IGVsc2UgewogCQlyZmNvbW1fc2VuZF9kbShzLCBkbGNpKTsKIAl9CkBAIC0xNjM3LDExICsxNjcyLDEyIEBACiAJCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKIAkJaWYgKGQtPnN0YXRlID09IEJUX0NPTkZJRykgewogCQkJZC0+bXR1ID0gcy0+bXR1OwotCQkJaWYgKHJmY29tbV9jaGVja19saW5rX21vZGUoZCkpIHsKKwkJCWlmIChyZmNvbW1fY2hlY2tfc2VjdXJpdHkoZCkpIHsKKwkJCQlyZmNvbW1fc2VuZF9wbihzLCAxLCBkKTsKKwkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpOwogCQkJCXJmY29tbV9kbGNfc2V0X3RpbWVyKGQsIFJGQ09NTV9BVVRIX1RJTUVPVVQpOwotCQkJfSBlbHNlCi0JCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CisJCQl9CiAJCX0KIAl9CiB9CkBAIC0xNzE3LDExICsxNzUzLDE3IEBACiAJCQlpZiAoZC0+b3V0KSB7CiAJCQkJcmZjb21tX3NlbmRfcG4ocywgMSwgZCk7CiAJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0NPTk5fVElNRU9VVCk7Ci0JCQl9IGVsc2UKLQkJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKLQkJCWlmIChkLT5saW5rX21vZGUgJiBSRkNPTU1fTE1fU0VDVVJFKSB7Ci0JCQkJc3RydWN0IHNvY2sgKnNrID0gcy0+c29jay0+c2s7Ci0JCQkJaGNpX2Nvbm5fY2hhbmdlX2xpbmtfa2V5KGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbik7CisJCQl9IGVsc2UgeworCQkJCWlmIChkLT5kZWZlcl9zZXR1cCkgeworCQkJCQlzZXRfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKTsKKwkJCQkJcmZjb21tX2RsY19zZXRfdGltZXIoZCwgUkZDT01NX0FVVEhfVElNRU9VVCk7CisKKwkJCQkJcmZjb21tX2RsY19sb2NrKGQpOworCQkJCQlkLT5zdGF0ZSA9IEJUX0NPTk5FQ1QyOworCQkJCQlkLT5zdGF0ZV9jaGFuZ2UoZCwgMCk7CisJCQkJCXJmY29tbV9kbGNfdW5sb2NrKGQpOworCQkJCX0gZWxzZQorCQkJCQlyZmNvbW1fZGxjX2FjY2VwdChkKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncykpIHsKQEAgLTE3MzQsNiArMTc3Niw5IEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCWlmICh0ZXN0X2JpdChSRkNPTU1fU0VDX1BFTkRJTkcsICZkLT5mbGFncykpCisJCQljb250aW51ZTsKKwogCQlpZiAodGVzdF9iaXQoUkZDT01NX1RYX1RIUk9UVExFRCwgJnMtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xODc2LDYgKzE5MjEsNyBAQAogCWJhY3B5KCZhZGRyLmwyX2JkYWRkciwgYmEpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwogCWFkZHIubDJfcHNtICAgID0gaHRvYnMoUkZDT01NX1BTTSk7CisJYWRkci5sMl9jaWQgICAgPSAwOwogCWVyciA9IGtlcm5lbF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSk7CiAJaWYgKGVyciA8IDApIHsKIAkJQlRfRVJSKCJCaW5kIGZhaWxlZCAlZCIsIGVycik7CkBAIC0xOTQ3LDQyICsxOTkzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmZjb21tX2F1dGhfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzKQotewotCXN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqczsKLQlzdHJ1Y3QgcmZjb21tX2RsYyAqZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQotCUJUX0RCRygiY29ubiAlcCBzdGF0dXMgMHglMDJ4IiwgY29ubiwgc3RhdHVzKTsKLQotCXMgPSByZmNvbW1fc2Vzc2lvbl9nZXQoJmNvbm4tPmhkZXYtPmJkYWRkciwgJmNvbm4tPmRzdCk7Ci0JaWYgKCFzKQotCQlyZXR1cm47Ci0KLQlyZmNvbW1fc2Vzc2lvbl9ob2xkKHMpOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzLT5kbGNzKSB7Ci0JCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKLQotCQlpZiAoKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSAmJgotCQkJCSEoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpICYmICFzdGF0dXMpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fQVVUSF9QRU5ESU5HLCAmZC0+ZmxhZ3MpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFzdGF0dXMpCi0JCQlzZXRfYml0KFJGQ09NTV9BVVRIX0FDQ0VQVCwgJmQtPmZsYWdzKTsKLQkJZWxzZQotCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7Ci0JfQotCi0JcmZjb21tX3Nlc3Npb25fcHV0KHMpOwotCi0JcmZjb21tX3NjaGVkdWxlKFJGQ09NTV9TQ0hFRF9BVVRIKTsKLX0KLQotc3RhdGljIHZvaWQgcmZjb21tX2VuY3J5cHRfY2ZtKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzLCB1OCBlbmNyeXB0KQorc3RhdGljIHZvaWQgcmZjb21tX3NlY3VyaXR5X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHU4IHN0YXR1cywgdTggZW5jcnlwdCkKIHsKIAlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnM7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQ7CkBAIC0xOTk5LDE4ICsyMDEwLDI5IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzLT5kbGNzKSB7CiAJCWQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKIAotCQlpZiAoKGQtPmxpbmtfbW9kZSAmIChSRkNPTU1fTE1fRU5DUllQVCB8IFJGQ09NTV9MTV9TRUNVUkUpKSAmJgotCQkJCQkoZC0+c3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8Ci0JCQkJCQlkLT5zdGF0ZSA9PSBCVF9DT05GSUcpICYmCi0JCQkJCQkhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgewotCQkJX19yZmNvbW1fZGxjX2Nsb3NlKGQsIEVDT05OUkVGVVNFRCk7Ci0JCQljb250aW51ZTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fU0VDX1BFTkRJTkcsICZkLT5mbGFncykpIHsKKwkJCXJmY29tbV9kbGNfY2xlYXJfdGltZXIoZCk7CisJCQlpZiAoc3RhdHVzIHx8IGVuY3J5cHQgPT0gMHgwMCkgeworCQkJCV9fcmZjb21tX2RsY19jbG9zZShkLCBFQ09OTlJFRlVTRUQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKGQtPnN0YXRlID09IEJUX0NPTk5FQ1RFRCAmJiAhc3RhdHVzICYmIGVuY3J5cHQgPT0gMHgwMCkgeworCQkJaWYgKGQtPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKKwkJCQlzZXRfYml0KFJGQ09NTV9TRUNfUEVORElORywgJmQtPmZsYWdzKTsKKwkJCQlyZmNvbW1fZGxjX3NldF90aW1lcihkLCBSRkNPTU1fQVVUSF9USU1FT1VUKTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoZC0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpIHsKKwkJCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgRUNPTk5SRUZVU0VEKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJfQogCiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXN0YXR1cyAmJiBlbmNyeXB0KQorCQlpZiAoIXN0YXR1cykKIAkJCXNldF9iaXQoUkZDT01NX0FVVEhfQUNDRVBULCAmZC0+ZmxhZ3MpOwogCQllbHNlCiAJCQlzZXRfYml0KFJGQ09NTV9BVVRIX1JFSkVDVCwgJmQtPmZsYWdzKTsKQEAgLTIwMjMsOCArMjA0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGNpX2NiIHJmY29tbV9jYiA9IHsKIAkubmFtZQkJPSAiUkZDT01NIiwKLQkuYXV0aF9jZm0JPSByZmNvbW1fYXV0aF9jZm0sCi0JLmVuY3J5cHRfY2ZtCT0gcmZjb21tX2VuY3J5cHRfY2ZtCisJLnNlY3VyaXR5X2NmbQk9IHJmY29tbV9zZWN1cml0eV9jZm0KIH07CiAKIHN0YXRpYyBzc2l6ZV90IHJmY29tbV9kbGNfc3lzZnNfc2hvdyhzdHJ1Y3QgY2xhc3MgKmRldiwgY2hhciAqYnVmKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IGQzZmM2ZmMuLjdmNDgyNzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTI2MSwxMiArMjYxLDE5IEBACiAKIAlpZiAocGFyZW50KSB7CiAJCXNrLT5za190eXBlID0gcGFyZW50LT5za190eXBlOwotCQlwaS0+bGlua19tb2RlID0gcmZjb21tX3BpKHBhcmVudCktPmxpbmtfbW9kZTsKKwkJcGktPmRsYy0+ZGVmZXJfc2V0dXAgPSBidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cDsKKworCQlwaS0+c2VjX2xldmVsID0gcmZjb21tX3BpKHBhcmVudCktPnNlY19sZXZlbDsKKwkJcGktPnJvbGVfc3dpdGNoID0gcmZjb21tX3BpKHBhcmVudCktPnJvbGVfc3dpdGNoOwogCX0gZWxzZSB7Ci0JCXBpLT5saW5rX21vZGUgPSAwOworCQlwaS0+ZGxjLT5kZWZlcl9zZXR1cCA9IDA7CisKKwkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJcGktPnJvbGVfc3dpdGNoID0gMDsKIAl9CiAKLQlwaS0+ZGxjLT5saW5rX21vZGUgPSBwaS0+bGlua19tb2RlOworCXBpLT5kbGMtPnNlY19sZXZlbCA9IHBpLT5zZWNfbGV2ZWw7CisJcGktPmRsYy0+cm9sZV9zd2l0Y2ggPSBwaS0+cm9sZV9zd2l0Y2g7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gcmZjb21tX3Byb3RvID0gewpAQCAtNDA2LDcgKzQxMyw4IEBACiAJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmc2EtPnJjX2JkYWRkcik7CiAJcmZjb21tX3BpKHNrKS0+Y2hhbm5lbCA9IHNhLT5yY19jaGFubmVsOwogCi0JZC0+bGlua19tb2RlID0gcmZjb21tX3BpKHNrKS0+bGlua19tb2RlOworCWQtPnNlY19sZXZlbCA9IHJmY29tbV9waShzayktPnNlY19sZXZlbDsKKwlkLT5yb2xlX3N3aXRjaCA9IHJmY29tbV9waShzayktPnJvbGVfc3dpdGNoOwogCiAJZXJyID0gcmZjb21tX2RsY19vcGVuKGQsICZidF9zayhzayktPnNyYywgJnNhLT5yY19iZGFkZHIsIHNhLT5yY19jaGFubmVsKTsKIAlpZiAoIWVycikKQEAgLTU1NCw2ICs1NjIsOSBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHNlbnQgPSAwOwogCisJaWYgKHRlc3RfYml0KFJGQ09NTV9ERUZFUl9TRVRVUCwgJmQtPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKwogCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtNTcwLDggKzU4MSwxMSBAQAogCiAJCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIHNpemUgKyBSRkNPTU1fU0tCX1JFU0VSVkUsCiAJCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwotCQlpZiAoIXNrYikKKwkJaWYgKCFza2IpIHsKKwkJCWlmIChzZW50ID09IDApCisJCQkJc2VudCA9IGVycjsKIAkJCWJyZWFrOworCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgUkZDT01NX1NLQl9IRUFEX1JFU0VSVkUpOwogCiAJCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIHNpemUpLCBtc2ctPm1zZ19pb3YsIHNpemUpOwpAQCAtNjMwLDEwICs2NDQsMTYgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJmY29tbV9kbGMgKmQgPSByZmNvbW1fcGkoc2spLT5kbGM7CiAJaW50IGVyciA9IDA7CiAJc2l6ZV90IHRhcmdldCwgY29waWVkID0gMDsKIAlsb25nIHRpbWVvOwogCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fREVGRVJfU0VUVVAsICZkLT5mbGFncykpIHsKKwkJcmZjb21tX2RsY19hY2NlcHQoZCk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChmbGFncyAmIE1TR19PT0IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtNzEwLDcgKzczMCw3IEBACiAJcmV0dXJuIGNvcGllZCA/IDogZXJyOwogfQogCi1zdGF0aWMgaW50IHJmY29tbV9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJaW50IGVyciA9IDA7CkBAIC03MjcsNyArNzQ3LDE0NCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlyZmNvbW1fcGkoc2spLT5saW5rX21vZGUgPSBvcHQ7CisJCWlmIChvcHQgJiBSRkNPTU1fTE1fQVVUSCkKKwkJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKKwkJaWYgKG9wdCAmIFJGQ09NTV9MTV9FTkNSWVBUKQorCQkJcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOworCQlpZiAob3B0ICYgUkZDT01NX0xNX1NFQ1VSRSkKKwkJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0hJR0g7CisKKwkJcmZjb21tX3BpKHNrKS0+cm9sZV9zd2l0Y2ggPSAob3B0ICYgUkZDT01NX0xNX01BU1RFUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmZjb21tX3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBidF9zZWN1cml0eSBzZWM7CisJaW50IGxlbiwgZXJyID0gMDsKKwl1MzIgb3B0OworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfUkZDT01NKQorCQlyZXR1cm4gcmZjb21tX3NvY2tfc2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9CTFVFVE9PVEgpCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBCVF9TRUNVUklUWToKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlzZWMubGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yoc2VjKSwgb3B0bGVuKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopICZzZWMsIG9wdHZhbCwgbGVuKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNlYy5sZXZlbCA+IEJUX1NFQ1VSSVRZX0hJR0gpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJmY29tbV9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJYnJlYWs7CisKKwljYXNlIEJUX0RFRkVSX1NFVFVQOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChnZXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBvcHQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmZjb21tX3NvY2tfZ2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29jayAqbDJjYXBfc2s7CisJc3RydWN0IHJmY29tbV9jb25uaW5mbyBjaW5mbzsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBvcHQ7CisKKwlCVF9EQkcoInNrICVwIiwgc2spOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBSRkNPTU1fTE06CisJCXN3aXRjaCAocmZjb21tX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfTE9XOgorCQkJb3B0ID0gUkZDT01NX0xNX0FVVEg7CisJCQlicmVhazsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlvcHQgPSBSRkNPTU1fTE1fQVVUSCB8IFJGQ09NTV9MTV9FTkNSWVBUOworCQkJYnJlYWs7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCW9wdCA9IFJGQ09NTV9MTV9BVVRIIHwgUkZDT01NX0xNX0VOQ1JZUFQgfAorCQkJCQkJCVJGQ09NTV9MTV9TRUNVUkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9wdCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChyZmNvbW1fcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJCW9wdCB8PSBSRkNPTU1fTE1fTUFTVEVSOworCisJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCQllcnIgPSAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgUkZDT01NX0NPTk5JTkZPOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCAmJgorCQkJCQkhcmZjb21tX3BpKHNrKS0+ZGxjLT5kZWZlcl9zZXR1cCkgeworCQkJZXJyID0gLUVOT1RDT05OOworCQkJYnJlYWs7CisJCX0KKworCQlsMmNhcF9zayA9IHJmY29tbV9waShzayktPmRsYy0+c2Vzc2lvbi0+c29jay0+c2s7CisKKwkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOworCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQorCQkJZXJyID0gLUVGQVVMVDsKKwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC03NDIsMzYgKzg5OSw0NCBAQAogc3RhdGljIGludCByZmNvbW1fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3Qgc29jayAqbDJjYXBfc2s7Ci0Jc3RydWN0IHJmY29tbV9jb25uaW5mbyBjaW5mbzsKKwlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOwogCWludCBsZW4sIGVyciA9IDA7CiAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCisJaWYgKGxldmVsID09IFNPTF9SRkNPTU0pCisJCXJldHVybiByZmNvbW1fc29ja19nZXRzb2Nrb3B0X29sZChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZiAobGV2ZWwgIT0gU09MX0JMVUVUT09USCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwogCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJbG9ja19zb2NrKHNrKTsKIAogCXN3aXRjaCAob3B0bmFtZSkgewotCWNhc2UgUkZDT01NX0xNOgotCQlpZiAocHV0X3VzZXIocmZjb21tX3BpKHNrKS0+bGlua19tb2RlLCAodTMyIF9fdXNlciAqKSBvcHR2YWwpKQotCQkJZXJyID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFJGQ09NTV9DT05OSU5GTzoKLQkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKLQkJCWVyciA9IC1FTk9UQ09OTjsKKwljYXNlIEJUX1NFQ1VSSVRZOgorCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKKwkJCWVyciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCi0JCWwyY2FwX3NrID0gcmZjb21tX3BpKHNrKS0+ZGxjLT5zZXNzaW9uLT5zb2NrLT5zazsKKwkJc2VjLmxldmVsID0gcmZjb21tX3BpKHNrKS0+c2VjX2xldmVsOwogCi0JCWNpbmZvLmhjaV9oYW5kbGUgPSBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmhhbmRsZTsKLQkJbWVtY3B5KGNpbmZvLmRldl9jbGFzcywgbDJjYXBfcGkobDJjYXBfc2spLT5jb25uLT5oY29uLT5kZXZfY2xhc3MsIDMpOworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKHNlYykpOworCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJnNlYywgbGVuKSkKKwkJCWVyciA9IC1FRkFVTFQ7CiAKLQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOwotCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQorCQlicmVhazsKKworCWNhc2UgQlRfREVGRVJfU0VUVVA6CisJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB1dF91c2VyKGJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCiAJCWJyZWFrOwpAQCAtODg4LDYgKzEwNTMsMTAgQEAKIAogZG9uZToKIAliaF91bmxvY2tfc29jayhwYXJlbnQpOworCisJaWYgKGJ0X3NrKHBhcmVudCktPmRlZmVyX3NldHVwKQorCQlwYXJlbnQtPnNrX3N0YXRlX2NoYW5nZShwYXJlbnQpOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwppbmRleCBkMDMwYzY5Li5hYmRjNzAzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwpAQCAtNzMxLDcgKzczMSw4IEBACiAJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+d2FpdCwgJndhaXQpOwogCiAJaWYgKGVyciA9PSAwKQotCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIHJmY29tbV9nZXRfZGV2aWNlKGRldikpOworCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIHJmY29tbV9nZXRfZGV2aWNlKGRldiksCisJCQkgICAgRFBNX09SREVSX0RFVl9BRlRFUl9QQVJFTlQpOwogCiAJcmZjb21tX3R0eV9jb3B5X3BlbmRpbmcoZGV2KTsKIApAQCAtNzUxLDcgKzc1Miw3IEBACiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5vcGVuZWQpKSB7CiAJCWlmIChkZXYtPnR0eV9kZXYtPnBhcmVudCkKLQkJCWRldmljZV9tb3ZlKGRldi0+dHR5X2RldiwgTlVMTCk7CisJCQlkZXZpY2VfbW92ZShkZXYtPnR0eV9kZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7CiAKIAkJLyogQ2xvc2UgRExDIGFuZCBkZXR0YWNoIFRUWSAqLwogCQlyZmNvbW1fZGxjX2Nsb3NlKGRldi0+ZGxjLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDQ2ZmQ4YmYuLjUxYWUwYzMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJZWxzZQogCQl0eXBlID0gU0NPX0xJTks7CiAKLQloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgdHlwZSwgZHN0LCBIQ0lfQVRfTk9fQk9ORElORyk7CisJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIHR5cGUsIGRzdCwgQlRfU0VDVVJJVFlfTE9XLCBIQ0lfQVRfTk9fQk9ORElORyk7CiAJaWYgKCFoY29uKQogCQlnb3RvIGRvbmU7CiAKQEAgLTY2OCw3ICs2NjgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2NvX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitzdGF0aWMgaW50IHNjb19zb2NrX2dldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNjb19vcHRpb25zIG9wdHM7CkBAIC03MjMsNiArNzIzLDMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBzY29fc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlpbnQgbGVuLCBlcnIgPSAwOworCisJQlRfREJHKCJzayAlcCIsIHNrKTsKKworCWlmIChsZXZlbCA9PSBTT0xfU0NPKQorCQlyZXR1cm4gc2NvX3NvY2tfZ2V0c29ja29wdF9vbGQoc29jaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQlicmVhazsKKwl9CisKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgc2NvX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtODMyLDEwICs4NTcsMzAgQEAKIC8qIC0tLS0tIFNDTyBpbnRlcmZhY2Ugd2l0aCBsb3dlciBsYXllciAoSENJKSAtLS0tLSAqLwogc3RhdGljIGludCBzY29fY29ubmVjdF9pbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIF9fdTggdHlwZSkKIHsKKwlyZWdpc3RlciBzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJaW50IGxtID0gMDsKKworCWlmICh0eXBlICE9IFNDT19MSU5LICYmIHR5cGUgIT0gRVNDT19MSU5LKQorCQlyZXR1cm4gMDsKKwogCUJUX0RCRygiaGRldiAlcywgYmRhZGRyICVzIiwgaGRldi0+bmFtZSwgYmF0b3N0cihiZGFkZHIpKTsKIAotCS8qIEFsd2F5cyBhY2NlcHQgY29ubmVjdGlvbiAqLwotCXJldHVybiBIQ0lfTE1fQUNDRVBUOworCS8qIEZpbmQgbGlzdGVuaW5nIHNvY2tldHMgKi8KKwlyZWFkX2xvY2soJnNjb19za19saXN0LmxvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmc2NvX3NrX2xpc3QuaGVhZCkgeworCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikKKwkJCWNvbnRpbnVlOworCisJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCAmaGRldi0+YmRhZGRyKSB8fAorCQkJCSFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CisJCQlsbSB8PSBIQ0lfTE1fQUNDRVBUOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVhZF91bmxvY2soJnNjb19za19saXN0LmxvY2spOworCisJcmV0dXJuIGxtOwogfQogCiBzdGF0aWMgaW50IHNjb19jb25uZWN0X2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIF9fdTggc3RhdHVzKQpAQCAtODU3LDcgKzkwMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2NvX2Rpc2Nvbm5faW5kKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgX191OCByZWFzb24pCitzdGF0aWMgaW50IHNjb19kaXNjb25uX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIF9fdTggcmVhc29uKQogewogCUJUX0RCRygiaGNvbiAlcCByZWFzb24gJWQiLCBoY29uLCByZWFzb24pOwogCkBAIC05NDAsNyArOTg1LDcgQEAKIAkuaWQJCT0gSENJX1BST1RPX1NDTywKIAkuY29ubmVjdF9pbmQJPSBzY29fY29ubmVjdF9pbmQsCiAJLmNvbm5lY3RfY2ZtCT0gc2NvX2Nvbm5lY3RfY2ZtLAotCS5kaXNjb25uX2luZAk9IHNjb19kaXNjb25uX2luZCwKKwkuZGlzY29ubl9jZm0JPSBzY29fZGlzY29ubl9jZm0sCiAJLnJlY3Zfc2NvZGF0YQk9IHNjb19yZWN2X3Njb2RhdGEKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCA3MjdjNWM1Li44YTk2NjcyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC00MjYsNyArNDI2LDYgQEAKIGVycjE6CiAJa29iamVjdF9kZWwoJnAtPmtvYmopOwogZXJyMDoKLQlrb2JqZWN0X3B1dCgmcC0+a29iaik7CiAJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIC0xKTsKIHB1dF9iYWNrOgogCWRldl9wdXQoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGNmNzU0YWMuLjM5NTNhYzQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS51cGRhdGVfcG10dSA9CQlmYWtlX3VwZGF0ZV9wbXR1LAogCS5lbnRyaWVzID0JCUFUT01JQ19JTklUKDApLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggYmE3YmUxOS4uZmNmZmIzZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTk4LDcgKzk4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTElOSywgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBkNDRjYmY4Li5hOTRmM2NjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBlYnRfbG9nX2xvZ2dlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgCQk9ICJlYnRfbG9nIiwKIAkubG9nZm4JCT0gJmVidF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IDJjNmQ2ODIuLjEzM2VlYWUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjc5LDIxICsyNzksMjEgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBlYnRfdWxvZ19sb2dnZXIgPSB7Ci0JLm5hbWUJCT0gInVsb2ciLAorc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgZWJ0X3Vsb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImVidF91bG9nIiwKIAkubG9nZm4JCT0gJmVidF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGVidF91bG9nX2luaXQodm9pZCkKIHsKLQlib29sIHJldCA9IHRydWU7CisJaW50IHJldDsKIAlpbnQgaTsKIAogCWlmIChubGJ1ZnNpeiA+PSAxMjgqMTAyNCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgImVidF91bG9nOiBOZXRsaW5rIGJ1ZmZlciBoYXMgdG8gYmUgPD0gMTI4a0IsIgogCQkgICAgICAgIiBwbGVhc2UgdHJ5IGEgc21hbGxlciBubGJ1ZnNpeiBwYXJhbWV0ZXIuXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHVsb2dfYnVmZmVycyAqLwpAQCAtMzA4LDEyICszMDgsMTIgQEAKIAlpZiAoIWVidHVsb2dubCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnkgdHJ5aW5nIHRvICIKIAkJICAgICAgICJjYWxsIG5ldGxpbmtfa2VybmVsX2NyZWF0ZVxuIik7Ci0JCXJldCA9IGZhbHNlOwotCX0gZWxzZSBpZiAoeHRfcmVnaXN0ZXJfdGFyZ2V0KCZlYnRfdWxvZ190Z19yZWcpICE9IDApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwl9IGVsc2UgaWYgKChyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmVidF91bG9nX3RnX3JlZykpICE9IDApIHsKIAkJbmV0bGlua19rZXJuZWxfcmVsZWFzZShlYnR1bG9nbmwpOwogCX0KIAotCWlmIChyZXQpCisJaWYgKHJldCA9PSAwKQogCQluZl9sb2dfcmVnaXN0ZXIoTkZQUk9UT19CUklER0UsICZlYnRfdWxvZ19sb2dnZXIpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCmluZGV4IDg2MDRkZmMuLmM3NTExMTEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwpAQCAtNDYsNyArNDYsNiBAQAogCS5uYW1lCQk9ICJicm91dGUiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSAxIDw8IE5GX0JSX0JST1VUSU5HLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChicm91dGVfdGFibGUubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwppbmRleCAyYjJlODA0Li5hNWVlYTcyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudGFibGUJCT0gJmluaXRpYWxfdGFibGUsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChmcmFtZV9maWx0ZXIubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCAzZmUxYWU4Li42MDI0YzU1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkubmFtZQkJPSAibmF0IiwKIAkudGFibGUJCT0gJmluaXRpYWxfdGFibGUsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChmcmFtZV9uYXQubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCBmYTQxN2NhLi41NDdiYWZjIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTI3Myw4ICsyNzMsNyBAQAogCQllcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpOwogCiAJaWYgKGVycikgewotCQlpZiAobmV3c2tiKQotCQkJa2ZyZWVfc2tiKG5ld3NrYik7CisJCWtmcmVlX3NrYihuZXdza2IpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtODI4LDcgKzgyNyw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBjYW5fcGFja2V0IF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0NBTiksCisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DQU4pLAogCS5kZXYgID0gTlVMTCwKIAkuZnVuYyA9IGNhbl9yY3YsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9yYXcuYyBiL25ldC9jYW4vcmF3LmMKaW5kZXggMDcwM2NiYS4uNmFhMTU0ZSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9yYXcuYworKysgYi9uZXQvY2FuL3Jhdy5jCkBAIC02NDgsNiArNjQ4LDkgQEAKIAllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBzaXplKSwgbXNnLT5tc2dfaW92LCBzaXplKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmcmVlX3NrYjsKKwllcnIgPSBzb2NrX3R4X3RpbWVzdGFtcChtc2csIHNrLCBza2JfdHgoc2tiKSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZnJlZV9za2I7CiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5zayAgPSBzazsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvbXBhdC5jIGIvbmV0L2NvbXBhdC5jCmluZGV4IGEzYTJiYTAuLjhkNzM5MDUgMTAwNjQ0Ci0tLSBhL25ldC9jb21wYXQuYworKysgYi9uZXQvY29tcGF0LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogaW50IHB1dF9jbXNnX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICprbXNnLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjb21wYXRfdGltZXZhbCBjdHY7Ci0Jc3RydWN0IGNvbXBhdF90aW1lc3BlYyBjdHM7CisJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBjdHNbM107CiAJc3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqY20gPSAoc3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqKSBrbXNnLT5tc2dfY29udHJvbDsKIAlzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgY21oZHI7CiAJaW50IGNtbGVuOwpAQCAtMjMzLDEyICsyMzMsMTcgQEAKIAkJZGF0YSA9ICZjdHY7CiAJCWxlbiA9IHNpemVvZihjdHYpOwogCX0KLQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiB0eXBlID09IFNDTV9USU1FU1RBTVBOUykgeworCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUICYmCisJICAgICh0eXBlID09IFNDTV9USU1FU1RBTVBOUyB8fCB0eXBlID09IFNDTV9USU1FU1RBTVBJTkcpKSB7CisJCWludCBjb3VudCA9IHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TID8gMSA6IDM7CisJCWludCBpOwogCQlzdHJ1Y3QgdGltZXNwZWMgKnRzID0gKHN0cnVjdCB0aW1lc3BlYyAqKWRhdGE7Ci0JCWN0cy50dl9zZWMgPSB0cy0+dHZfc2VjOwotCQljdHMudHZfbnNlYyA9IHRzLT50dl9uc2VjOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJY3RzW2ldLnR2X3NlYyA9IHRzW2ldLnR2X3NlYzsKKwkJCWN0c1tpXS50dl9uc2VjID0gdHNbaV0udHZfbnNlYzsKKwkJfQogCQlkYXRhID0gJmN0czsKLQkJbGVuID0gc2l6ZW9mKGN0cyk7CisJCWxlbiA9IHNpemVvZihjdHNbMF0pICogY291bnQ7CiAJfQogCiAJY21sZW4gPSBDTVNHX0NPTVBBVF9MRU4obGVuKTsKQEAgLTQ1NSw3ICs0NjAsNyBAQAogCXN0cnVjdCB0aW1ldmFsIHR2OwogCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHYgPSBrdGltZV90b190aW1ldmFsKHNrLT5za19zdGFtcCk7CiAJaWYgKHR2LnR2X3NlYyA9PSAtMSkKIAkJcmV0dXJuIGVycjsKQEAgLTQ3OSw3ICs0ODQsNyBAQAogCXN0cnVjdCB0aW1lc3BlYyB0czsKIAogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2stPnNrX3N0YW1wKTsKIAlpZiAodHMudHZfc2VjID09IC0xKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCAyNmEzN2NiLi43OTZmNDZlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQorKysgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNiBAQAogb2JqLSQoQ09ORklHX05FVFBPTEwpICs9IG5ldHBvbGwubwogb2JqLSQoQ09ORklHX05FVF9ETUEpICs9IHVzZXJfZG1hLm8KIG9iai0kKENPTkZJR19GSUJfUlVMRVMpICs9IGZpYl9ydWxlcy5vCitvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IG5ldC10cmFjZXMubworb2JqLSQoQ09ORklHX05FVF9EUk9QX01PTklUT1IpICs9IGRyb3BfbW9uaXRvci5vCisKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDVlMmFjMGMuLmQwZGU2NDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKKysrIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAKIHZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAJc2tfbWVtX3JlY2xhaW1fcGFydGlhbChzayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggZTNmZTVjNy4uMDUyZGQ0NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE2NjgsOCArMTY2OCw4IEBACiAJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisJaW50IHJjOwogCi0JcHJlZmV0Y2goJmRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQpOwogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQogCQkJZGV2X3F1ZXVlX3htaXRfbml0KHNrYiwgZGV2KTsKQEAgLTE2ODEsMTMgKzE2ODEsMjcgQEAKIAkJCQlnb3RvIGdzbzsKIAkJfQogCi0JCXJldHVybiBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJLyoKKwkJICogVE9ETzogaWYgc2tiX29ycGhhbigpIHdhcyBjYWxsZWQgYnkKKwkJICogZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSAoZm9yIGV4YW1wbGUsIHRoZSB1bm1vZGlmaWVkCisJCSAqIGlnYiBkcml2ZXIgZG9lcyB0aGF0OyBibngyIGRvZXNuJ3QpLCB0aGVuCisJCSAqIHNrYl90eF9zb2Z0d2FyZV90aW1lc3RhbXAoKSB3aWxsIGJlIHVuYWJsZSB0byBzZW5kCisJCSAqIGJhY2sgdGhlIHRpbWUgc3RhbXAuCisJCSAqCisJCSAqIEhvdyBjYW4gdGhpcyBiZSBwcmV2ZW50ZWQ/IEFsd2F5cyBjcmVhdGUgYW5vdGhlcgorCQkgKiByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCBiZWZvcmUgY2FsbGluZworCQkgKiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpPyBQcmV2ZW50IHRoYXQgc2tiX29ycGhhbigpCisJCSAqIGRvZXMgYW55dGhpbmcgaW4gZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSBieSBjbGVhcmluZworCQkgKiB0aGUgc2tiIGRlc3RydWN0b3IgYmVmb3JlIHRoZSBjYWxsIGFuZCByZXN0b3JpbmcgaXQKKwkJICogYWZ0ZXJ3YXJkcywgdGhlbiBkb2luZyB0aGUgc2tiX29ycGhhbigpIG91cnNlbHZlcz8KKwkJICovCisJCXJldHVybiByYzsKIAl9CiAKIGdzbzoKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiLT5uZXh0OwotCQlpbnQgcmM7CiAKIAkJc2tiLT5uZXh0ID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CkBAIC0xNzA4LDU5ICsxNzIyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgc2ltcGxlX3R4X2hhc2hybmQ7Ci1zdGF0aWMgaW50IHNpbXBsZV90eF9oYXNocm5kX2luaXRpYWxpemVkID0gMDsKK3N0YXRpYyB1MzIgc2tiX3R4X2hhc2hybmQ7CiAKLXN0YXRpYyB1MTYgc2ltcGxlX3R4X2hhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3UxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiBhZGRyMSwgYWRkcjIsIHBvcnRzOwotCXUzMiBoYXNoLCBpaGw7Ci0JdTggaXBfcHJvdG8gPSAwOworCXUzMiBoYXNoOwogCi0JaWYgKHVubGlrZWx5KCFzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmc2ltcGxlX3R4X2hhc2hybmQsIDQpOwotCQlzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDE7Ci0JfQorCWlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkgeworCQloYXNoID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOworCX0gZWxzZSBpZiAoc2tiLT5zayAmJiBza2ItPnNrLT5za19oYXNoKSB7CisJCWhhc2ggPSBza2ItPnNrLT5za19oYXNoOworCX0gZWxzZQorCQloYXNoID0gc2tiLT5wcm90b2NvbDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlpZiAoIShpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRiB8IElQX09GRlNFVCkpKQotCQkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7Ci0JCWFkZHIxID0gaXBfaGRyKHNrYiktPnNhZGRyOwotCQlhZGRyMiA9IGlwX2hkcihza2IpLT5kYWRkcjsKLQkJaWhsID0gaXBfaGRyKHNrYiktPmlobDsKLQkJYnJlYWs7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKLQkJaXBfcHJvdG8gPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOwotCQlhZGRyMSA9IGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIzMlszXTsKLQkJYWRkcjIgPSBpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzJbM107Ci0JCWlobCA9ICg0MCA+PiAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlzd2l0Y2ggKGlwX3Byb3RvKSB7Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19EQ0NQOgotCWNhc2UgSVBQUk9UT19FU1A6Ci0JY2FzZSBJUFBST1RPX0FIOgotCWNhc2UgSVBQUk9UT19TQ1RQOgotCWNhc2UgSVBQUk9UT19VRFBMSVRFOgotCQlwb3J0cyA9ICooKHUzMiAqKSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyAoaWhsICogNCkpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwb3J0cyA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWhhc2ggPSBqaGFzaF8zd29yZHMoYWRkcjEsIGFkZHIyLCBwb3J0cywgc2ltcGxlX3R4X2hhc2hybmQpOworCWhhc2ggPSBqaGFzaF8xd29yZChoYXNoLCBza2JfdHhfaGFzaHJuZCk7CiAKIAlyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+IDMyKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3R4X2hhc2gpOwogCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3BpY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3NzEsNyArMTc1MCw3IEBACiAJaWYgKG9wcy0+bmRvX3NlbGVjdF9xdWV1ZSkKIAkJcXVldWVfaW5kZXggPSBvcHMtPm5kb19zZWxlY3RfcXVldWUoZGV2LCBza2IpOwogCWVsc2UgaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKLQkJcXVldWVfaW5kZXggPSBzaW1wbGVfdHhfaGFzaChkZXYsIHNrYik7CisJCXF1ZXVlX2luZGV4ID0gc2tiX3R4X2hhc2goZGV2LCBza2IpOwogCiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWVfaW5kZXgpOwogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcXVldWVfaW5kZXgpOwpAQCAtMjI5Nyw2ICsyMjc2LDggQEAKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKKwlza2Jfb3JwaGFuKHNrYik7CisKIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKIAkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewpAQCAtMjM2Niw3ICsyMzQ3LDYgQEAKIAogb3V0OgogCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSAwOwotCV9fc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCkBAIC0yMzgwLDIwICsyMzYwLDQwIEBACiAJCW5hcGlfZ3JvX2NvbXBsZXRlKHNrYik7CiAJfQogCisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX2ZsdXNoKTsKIAordm9pZCAqc2tiX2dyb19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7CisKKwlobGVuICs9IG9mZnNldDsKKwlpZiAoaGxlbiA8PSBza2JfaGVhZGxlbihza2IpKQorCQlyZXR1cm4gc2tiLT5kYXRhICsgb2Zmc2V0OworCisJaWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIHx8CisJCSAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIDw9CisJCSAgICAgaGxlbiAtIHNrYl9oZWFkbGVuKHNrYikgfHwKKwkJICAgICBQYWdlSGlnaE1lbShza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpKSkKKwkJcmV0dXJuIHBza2JfbWF5X3B1bGwoc2tiLCBobGVuKSA/IHNrYi0+ZGF0YSArIG9mZnNldCA6IE5VTEw7CisKKwlyZXR1cm4gcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSkgKworCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICsKKwkgICAgICAgb2Zmc2V0IC0gc2tiX2hlYWRsZW4oc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX2dyb19oZWFkZXIpOworCiBpbnQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnBwID0gTlVMTDsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlOwogCV9fYmUxNiB0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdOwotCWludCBjb3VudCA9IDA7CiAJaW50IHNhbWVfZmxvdzsKIAlpbnQgbWFjX2xlbjsKLQlpbnQgZnJlZTsKKwlpbnQgcmV0OwogCiAJaWYgKCEoc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pKQogCQlnb3RvIG5vcm1hbDsKQEAgLTI0MDMsMzAgKzI0MDMsMTYgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgaGVhZCwgbGlzdCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqcDsKLQogCQlpZiAocHR5cGUtPnR5cGUgIT0gdHlwZSB8fCBwdHlwZS0+ZGV2IHx8ICFwdHlwZS0+Z3JvX3JlY2VpdmUpCiAJCQljb250aW51ZTsKIAotCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCQltYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKIAkJc2tiLT5tYWNfbGVuID0gbWFjX2xlbjsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+c2FtZV9mbG93ID0gMDsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggPSAwOwogCQlOQVBJX0dST19DQihza2IpLT5mcmVlID0gMDsKIAotCQlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCWNvdW50Kys7Ci0KLQkJCWlmICghTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHAtPm1hY19sZW4gIT0gbWFjX2xlbiB8fAotCQkJICAgIG1lbWNtcChza2JfbWFjX2hlYWRlcihwKSwgc2tiX21hY19oZWFkZXIoc2tiKSwKLQkJCQkgICBtYWNfbGVuKSkKLQkJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKLQkJfQotCiAJCXBwID0gcHR5cGUtPmdyb19yZWNlaXZlKCZuYXBpLT5ncm9fbGlzdCwgc2tiKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjQzNiw3ICsyNDIyLDcgQEAKIAkJZ290byBub3JtYWw7CiAKIAlzYW1lX2Zsb3cgPSBOQVBJX0dST19DQihza2IpLT5zYW1lX2Zsb3c7Ci0JZnJlZSA9IE5BUElfR1JPX0NCKHNrYiktPmZyZWU7CisJcmV0ID0gTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZSA/IEdST19NRVJHRURfRlJFRSA6IEdST19NRVJHRUQ7CiAKIAlpZiAocHApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSAqcHA7CkBAIC0yNDQ0LDI3ICsyNDMwLDM1IEBACiAJCSpwcCA9IG5za2ItPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOwogCQluYXBpX2dyb19jb21wbGV0ZShuc2tiKTsKLQkJY291bnQtLTsKKwkJbmFwaS0+Z3JvX2NvdW50LS07CiAJfQogCiAJaWYgKHNhbWVfZmxvdykKIAkJZ290byBvazsKIAotCWlmIChOQVBJX0dST19DQihza2IpLT5mbHVzaCB8fCBjb3VudCA+PSBNQVhfR1JPX1NLQlMpIHsKLQkJX19za2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CisJaWYgKE5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHx8IG5hcGktPmdyb19jb3VudCA+PSBNQVhfR1JPX1NLQlMpCiAJCWdvdG8gbm9ybWFsOwotCX0KIAorCW5hcGktPmdyb19jb3VudCsrOwogCU5BUElfR1JPX0NCKHNrYiktPmNvdW50ID0gMTsKLQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gc2tiLT5sZW47CisJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHNrYl9ncm9fbGVuKHNrYik7CiAJc2tiLT5uZXh0ID0gbmFwaS0+Z3JvX2xpc3Q7CiAJbmFwaS0+Z3JvX2xpc3QgPSBza2I7CisJcmV0ID0gR1JPX0hFTEQ7CisKK3B1bGw6CisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpKSB7CisJCWlmIChuYXBpLT5ncm9fbGlzdCA9PSBza2IpCisJCQluYXBpLT5ncm9fbGlzdCA9IHNrYi0+bmV4dDsKKwkJcmV0ID0gR1JPX0RST1A7CisJfQogCiBvazoKLQlyZXR1cm4gZnJlZTsKKwlyZXR1cm4gcmV0OwogCiBub3JtYWw6Ci0JcmV0dXJuIC0xOworCXJldCA9IEdST19OT1JNQUw7CisJZ290byBwdWxsOwogfQogRVhQT1JUX1NZTUJPTChkZXZfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNDcyLDI5ICsyNDY2LDQ0IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnA7CiAKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gR1JPX05PUk1BTDsKKwogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMTsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9ICFjb21wYXJlX2V0aGVyX2hlYWRlcigKKwkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogfQogCi1pbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgbmFwaV9za2JfZmluaXNoKGludCByZXQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKIAotCXN3aXRjaCAoX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYikpIHsKLQljYXNlIC0xOgorCXN3aXRjaCAocmV0KSB7CisJY2FzZSBHUk9fTk9STUFMOgogCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAotCWNhc2UgMToKKwljYXNlIEdST19EUk9QOgorCQllcnIgPSBORVRfUlhfRFJPUDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEdST19NRVJHRURfRlJFRToKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChuYXBpX3NrYl9maW5pc2gpOworCitpbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKworCXJldHVybiBuYXBpX3NrYl9maW5pc2goX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYiksIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNTEyLDYgKzI1MjEsOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGktPnNrYjsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgaTsKIAogCW5hcGktPnNrYiA9IE5VTEw7CiAKQEAgLTI1MjQsMjAgKzI1MzYsMzYgQEAKIAl9CiAKIAlCVUdfT04oaW5mby0+bnJfZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKTsKKwlmcmFnID0gJmluZm8tPmZyYWdzW2luZm8tPm5yX2ZyYWdzIC0gMV07CisKKwlmb3IgKGkgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpIDwgaW5mby0+bnJfZnJhZ3M7IGkrKykgeworCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkgICBmcmFnLT5zaXplKTsKKwkJZnJhZysrOworCX0KIAlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gaW5mby0+bnJfZnJhZ3M7Ci0JbWVtY3B5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsIGluZm8tPmZyYWdzLCBzaXplb2YoaW5mby0+ZnJhZ3MpKTsKIAogCXNrYi0+ZGF0YV9sZW4gPSBpbmZvLT5sZW47CiAJc2tiLT5sZW4gKz0gaW5mby0+bGVuOwogCXNrYi0+dHJ1ZXNpemUgKz0gaW5mby0+bGVuOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOworCisJZXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmV0aCkpOworCWlmICghZXRoKSB7CiAJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CiAJCXNrYiA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTsKKworCS8qCisJICogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBvbmx5IHByb3RvY29scyB3ZSBjYXJlIGFib3V0IGRvbid0IHJlcXVpcmUKKwkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UnbGwgZml4IGl0IHVwIHByb3Blcmx5IGF0IHRoZSBlbmQuCisJICovCisJc2tiLT5wcm90b2NvbCA9IGV0aC0+aF9wcm90bzsKIAogCXNrYi0+aXBfc3VtbWVkID0gaW5mby0+aXBfc3VtbWVkOwogCXNrYi0+Y3N1bSA9IGluZm8tPmNzdW07CkBAIC0yNTQ3LDMxICsyNTc1LDQyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ2luZm9fc2tiKTsKIAoraW50IG5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJldCkKK3sKKwlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgR1JPX05PUk1BTDoKKwljYXNlIEdST19IRUxEOgorCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuYXBpLT5kZXYpOworCisJCWlmIChyZXQgPT0gR1JPX05PUk1BTCkKKwkJCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCXNrYl9ncm9fcHVsbChza2IsIC1FVEhfSExFTik7CisJCWJyZWFrOworCisJY2FzZSBHUk9fRFJPUDoKKwkJZXJyID0gTkVUX1JYX0RST1A7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHUk9fTUVSR0VEX0ZSRUU6CisJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ3NfZmluaXNoKTsKKwogaW50IG5hcGlfZ3JvX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpX2ZyYWdpbmZvX3NrYihuYXBpLCBpbmZvKTsKLQlpbnQgZXJyID0gTkVUX1JYX0RST1A7CiAKIAlpZiAoIXNrYikKLQkJZ290byBvdXQ7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLQlzd2l0Y2ggKF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDA6Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX2ZyYWdzX2ZpbmlzaChuYXBpLCBza2IsIF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9ncm9fZnJhZ3MpOwogCkBAIC0yNjUzLDYgKzI2OTIsNyBAQAogCQkgICAgaW50ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCksIGludCB3ZWlnaHQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJm5hcGktPnBvbGxfbGlzdCk7CisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiAJbmFwaS0+c2tiID0gTlVMTDsKIAluYXBpLT5wb2xsID0gcG9sbDsKQEAgLTI2ODEsNiArMjcyMSw3IEBACiAJfQogCiAJbmFwaS0+Z3JvX2xpc3QgPSBOVUxMOworCW5hcGktPmdyb19jb3VudCA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGlmX25hcGlfZGVsKTsKIApAQCAtMzk0OSw2ICszOTkwLDcgQEAKIAkJCSAgICBjbWQgPT0gU0lPQ1NNSUlSRUcgfHwKIAkJCSAgICBjbWQgPT0gU0lPQ0JSQURESUYgfHwKIAkJCSAgICBjbWQgPT0gU0lPQ0JSREVMSUYgfHwKKwkJCSAgICBjbWQgPT0gU0lPQ1NIV1RTVEFNUCB8fAogCQkJICAgIGNtZCA9PSBTSU9DV0FOREVWKSB7CiAJCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQkJaWYgKG9wcy0+bmRvX2RvX2lvY3RsKSB7CkBAIC00MTAzLDYgKzQxNDUsNyBAQAogCQljYXNlIFNJT0NCT05EQ0hBTkdFQUNUSVZFOgogCQljYXNlIFNJT0NCUkFERElGOgogCQljYXNlIFNJT0NCUkRFTElGOgorCQljYXNlIFNJT0NTSFdUU1RBTVA6CiAJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtNTE5OSw2ICs1MjQyLDcgQEAKIAkJcXVldWUtPmJhY2tsb2cucG9sbCA9IHByb2Nlc3NfYmFja2xvZzsKIAkJcXVldWUtPmJhY2tsb2cud2VpZ2h0ID0gd2VpZ2h0X3A7CiAJCXF1ZXVlLT5iYWNrbG9nLmdyb19saXN0ID0gTlVMTDsKKwkJcXVldWUtPmJhY2tsb2cuZ3JvX2NvdW50ID0gMDsKIAl9CiAKIAlkZXZfYm9vdF9waGFzZSA9IDA7CkBAIC01MjMxLDYgKzUyNzUsMTQgQEAKIAogc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IGluaXRpYWxpemVfaGFzaHJuZCh2b2lkKQoreworCWdldF9yYW5kb21fYnl0ZXMoJnNrYl90eF9oYXNocm5kLCBzaXplb2Yoc2tiX3R4X2hhc2hybmQpKTsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbF9zeW5jKGluaXRpYWxpemVfaGFzaHJuZCk7CisKIEVYUE9SVF9TWU1CT0woX19kZXZfZ2V0X2J5X2luZGV4KTsKIEVYUE9SVF9TWU1CT0woX19kZXZfZ2V0X2J5X25hbWUpOwogRVhQT1JUX1NZTUJPTChfX2Rldl9yZW1vdmVfcGFjayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kcm9wX21vbml0b3IuYyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDBkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIE1vbml0b3JpbmcgY29kZSBmb3IgbmV0d29yayBkcm9wcGVkIHBhY2tldCBhbGVydHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmVpbCBIb3JtYW4gPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvbmV0X2Ryb3Btb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKworI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjZGVmaW5lIFRSQUNFX09OIDEKKyNkZWZpbmUgVFJBQ0VfT0ZGIDAKKworc3RhdGljIHZvaWQgc2VuZF9kbV9hbGVydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCk7CisKKworLyoKKyAqIEdsb2JhbHMsIG91ciBuZXRsaW5rIHNvY2tldCBwb2ludGVyCisgKiBhbmQgdGhlIHdvcmsgaGFuZGxlIHRoYXQgd2lsbCBzZW5kIHVwCisgKiBuZXRsaW5rIGFsZXJ0cworICovCitzdHJ1Y3Qgc29jayAqZG1fc29jazsKKworc3RydWN0IHBlcl9jcHVfZG1fZGF0YSB7CisJc3RydWN0IHdvcmtfc3RydWN0IGRtX2FsZXJ0X3dvcms7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlhdG9taWNfdCBkbV9oaXRfY291bnQ7CisJc3RydWN0IHRpbWVyX2xpc3Qgc2VuZF90aW1lcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHkgPSB7CisJLmlkICAgICAgICAgICAgID0gR0VOTF9JRF9HRU5FUkFURSwKKwkuaGRyc2l6ZSAgICAgICAgPSAwLAorCS5uYW1lICAgICAgICAgICA9ICJORVRfRE0iLAorCS52ZXJzaW9uICAgICAgICA9IDEsCisJLm1heGF0dHIgICAgICAgID0gTkVUX0RNX0NNRF9NQVgsCit9OworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcl9jcHVfZG1fZGF0YSwgZG1fY3B1X2RhdGEpOworCitzdGF0aWMgaW50IGRtX2hpdF9saW1pdCA9IDY0Oworc3RhdGljIGludCBkbV9kZWxheSA9IDE7CisKKworc3RhdGljIHZvaWQgcmVzZXRfcGVyX2NwdV9kYXRhKHN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGEpCit7CisJc2l6ZV90IGFsOworCXN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnICptc2c7CisKKwlhbCA9IHNpemVvZihzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyk7CisJYWwgKz0gZG1faGl0X2xpbWl0ICogc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCk7CisJZGF0YS0+c2tiID0gZ2VubG1zZ19uZXcoYWwsIEdGUF9LRVJORUwpOworCWdlbmxtc2dfcHV0KGRhdGEtPnNrYiwgMCwgMCwgJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5LAorCQkJMCwgTkVUX0RNX0NNRF9BTEVSVCk7CisJbXNnID0gX19ubGFfcmVzZXJ2ZV9ub2hkcihkYXRhLT5za2IsIHNpemVvZihzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZykpOworCW1lbXNldChtc2csIDAsIGFsKTsKKwlhdG9taWNfc2V0KCZkYXRhLT5kbV9oaXRfY291bnQsIGRtX2hpdF9saW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfZG1fYWxlcnQoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhID0gJl9fZ2V0X2NwdV92YXIoZG1fY3B1X2RhdGEpOworCisJLyoKKwkgKiBHcmFiIHRoZSBza2Igd2UncmUgYWJvdXQgdG8gc2VuZAorCSAqLworCXNrYiA9IGRhdGEtPnNrYjsKKworCS8qCisJICogUmVwbGFjZSBpdCB3aXRoIGEgbmV3IG9uZQorCSAqLworCXJlc2V0X3Blcl9jcHVfZGF0YShkYXRhKTsKKworCS8qCisJICogU2hpcCBpdCEKKwkgKi8KKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIE5FVF9ETV9HUlBfQUxFUlQsIEdGUF9LRVJORUwpOworCit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSB0aW1lciBmdW5jdGlvbiB0byBkZWxheSB0aGUgc2VuZGluZyBvZiBhbiBhbGVydAorICogaW4gdGhlIGV2ZW50IHRoYXQgbW9yZSBkcm9wcyB3aWxsIGFycml2ZSBkdXJpbmcgdGhlCisgKiBoeXN0ZXJlc2lzIHBlcmlvZC4gIE5vdGUgdGhhdCBpdCBvcGVyYXRlcyB1bmRlciB0aGUgdGltZXIgaW50ZXJydXB0CisgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBoZXJlCisgKi8KK3N0YXRpYyB2b2lkIHNjaGVkX3NlbmRfd29yayh1bnNpZ25lZCBsb25nIHVudXNlZCkKK3sKKwlzdHJ1Y3QgcGVyX2NwdV9kbV9kYXRhICpkYXRhID0gICZfX2dldF9jcHVfdmFyKGRtX2NwdV9kYXRhKTsKKworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPmRtX2FsZXJ0X3dvcmspOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9rZnJlZV9za2JfaGl0KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKQoreworCXN0cnVjdCBuZXRfZG1fYWxlcnRfbXNnICptc2c7CisJc3RydWN0IG5sbXNnaGRyICpubGg7CisJaW50IGk7CisJc3RydWN0IHBlcl9jcHVfZG1fZGF0YSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKGRtX2NwdV9kYXRhKTsKKworCisJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmZGF0YS0+ZG1faGl0X2NvdW50LCAtMSwgMCkpIHsKKwkJLyoKKwkJICogd2UncmUgYWxyZWFkeSBhdCB6ZXJvLCBkaXNjYXJkIHRoaXMgaGl0CisJCSAqLworCQlnb3RvIG91dDsKKwl9CisKKwlubGggPSAoc3RydWN0IG5sbXNnaGRyICopZGF0YS0+c2tiLT5kYXRhOworCW1zZyA9IGdlbmxtc2dfZGF0YShubG1zZ19kYXRhKG5saCkpOworCWZvciAoaSA9IDA7IGkgPCBtc2ctPmVudHJpZXM7IGkrKykgeworCQlpZiAoIW1lbWNtcCgmbG9jYXRpb24sIG1zZy0+cG9pbnRzW2ldLnBjLCBzaXplb2Yodm9pZCAqKSkpIHsKKwkJCW1zZy0+cG9pbnRzW2ldLmNvdW50Kys7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgZW50cnkKKwkgKi8KKwlfX25sYV9yZXNlcnZlX25vaGRyKGRhdGEtPnNrYiwgc2l6ZW9mKHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCkpOworCW1lbWNweShtc2ctPnBvaW50c1ttc2ctPmVudHJpZXNdLnBjLCAmbG9jYXRpb24sIHNpemVvZih2b2lkICopKTsKKwltc2ctPnBvaW50c1ttc2ctPmVudHJpZXNdLmNvdW50ID0gMTsKKwltc2ctPmVudHJpZXMrKzsKKworCWlmICghdGltZXJfcGVuZGluZygmZGF0YS0+c2VuZF90aW1lcikpIHsKKwkJZGF0YS0+c2VuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIGRtX2RlbGF5ICogSFo7CisJCWFkZF90aW1lcl9vbigmZGF0YS0+c2VuZF90aW1lciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl9CisKK291dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc2V0X2FsbF9tb25pdG9yX3RyYWNlcyhpbnQgc3RhdGUpCit7CisJaW50IHJjID0gMDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFRSQUNFX09OOgorCQlyYyB8PSByZWdpc3Rlcl90cmFjZV9rZnJlZV9za2IodHJhY2Vfa2ZyZWVfc2tiX2hpdCk7CisJCWJyZWFrOworCWNhc2UgVFJBQ0VfT0ZGOgorCQlyYyB8PSB1bnJlZ2lzdGVyX3RyYWNlX2tmcmVlX3NrYih0cmFjZV9rZnJlZV9za2JfaGl0KTsKKworCQl0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmMgPSAxOworCQlicmVhazsKKwl9CisKKwlpZiAocmMpCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQgbmV0X2RtX2NtZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworc3RhdGljIGludCBuZXRfZG1fY21kX3RyYWNlKHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN3aXRjaCAoaW5mby0+Z2VubGhkci0+Y21kKSB7CisJY2FzZSBORVRfRE1fQ01EX1NUQVJUOgorCQlyZXR1cm4gc2V0X2FsbF9tb25pdG9yX3RyYWNlcyhUUkFDRV9PTik7CisJCWJyZWFrOworCWNhc2UgTkVUX0RNX0NNRF9TVE9QOgorCQlyZXR1cm4gc2V0X2FsbF9tb25pdG9yX3RyYWNlcyhUUkFDRV9PRkYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgZHJvcG1vbl9vcHNbXSA9IHsKKwl7CisJCS5jbWQgPSBORVRfRE1fQ01EX0NPTkZJRywKKwkJLmRvaXQgPSBuZXRfZG1fY21kX2NvbmZpZywKKwl9LAorCXsKKwkJLmNtZCA9IE5FVF9ETV9DTURfU1RBUlQsCisJCS5kb2l0ID0gbmV0X2RtX2NtZF90cmFjZSwKKwl9LAorCXsKKwkJLmNtZCA9IE5FVF9ETV9DTURfU1RPUCwKKwkJLmRvaXQgPSBuZXRfZG1fY21kX3RyYWNlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X25ldF9kcm9wX21vbml0b3Iodm9pZCkKK3sKKwlpbnQgY3B1OworCWludCByYywgaSwgcmV0OworCXN0cnVjdCBwZXJfY3B1X2RtX2RhdGEgKmRhdGE7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGFsaXppbmcgbmV0d29yayBkcm9wIG1vbml0b3Igc2VydmljZVxuIik7CisKKwlpZiAoc2l6ZW9mKHZvaWQgKikgPiA4KSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHN0b3JlIHByb2dyYW0gY291bnRlcnMgb24gdGhpcyBhcmNoLCBEcm9wIG1vbml0b3IgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJaWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZuZXRfZHJvcF9tb25pdG9yX2ZhbWlseSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGNyZWF0ZSBkcm9wIG1vbml0b3IgbmV0bGluayBmYW1pbHlcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyYyA9IC1FRkFVTFQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm9wbW9uX29wcyk7IGkrKykgeworCQlyZXQgPSBnZW5sX3JlZ2lzdGVyX29wcygmbmV0X2Ryb3BfbW9uaXRvcl9mYW1pbHksCisJCQkJCSZkcm9wbW9uX29wc1tpXSk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgImZhaWxlZCB0byByZWdpc3RlciBvcGVyYXRpb24gJWRcbiIsCisJCQkJZHJvcG1vbl9vcHNbaV0uY21kKTsKKwkJCWdvdG8gb3V0X3VucmVnOworCQl9CisJfQorCisJcmMgPSAwOworCisJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CisJCWRhdGEgPSAmcGVyX2NwdShkbV9jcHVfZGF0YSwgY3B1KTsKKwkJcmVzZXRfcGVyX2NwdV9kYXRhKGRhdGEpOworCQlJTklUX1dPUksoJmRhdGEtPmRtX2FsZXJ0X3dvcmssIHNlbmRfZG1fYWxlcnQpOworCQlpbml0X3RpbWVyKCZkYXRhLT5zZW5kX3RpbWVyKTsKKwkJZGF0YS0+c2VuZF90aW1lci5kYXRhID0gY3B1OworCQlkYXRhLT5zZW5kX3RpbWVyLmZ1bmN0aW9uID0gc2NoZWRfc2VuZF93b3JrOworCX0KKwlnb3RvIG91dDsKKworb3V0X3VucmVnOgorCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJm5ldF9kcm9wX21vbml0b3JfZmFtaWx5KTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW5pdF9uZXRfZHJvcF9tb25pdG9yKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCA5NDc3MTBhLi4yNDRjYTU2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC0yMDksMzQgKzIwOSw2MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfc2V0X3J4aGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCitzdGF0aWMgaW50IGV0aHRvb2xfc2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9yeG5mYyBjbWQ7CiAKLQlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9yeGhhc2gpCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhuZmMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyYWRkciwgc2l6ZW9mKGNtZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcnhoYXNoKGRldiwgJmNtZCk7CisJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9yeG5mYyhkZXYsICZjbWQpOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3J4aGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCitzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9yeG5mYyBpbmZvOworCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKKwlpbnQgcmV0OworCXZvaWQgKnJ1bGVfYnVmID0gTlVMTDsKIAotCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4aGFzaCkKKwlpZiAoIW9wcy0+Z2V0X3J4bmZjKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIHVzZXJhZGRyLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRldi0+ZXRodG9vbF9vcHMtPmdldF9yeGhhc2goZGV2LCAmaW5mbyk7CisJaWYgKGluZm8uY21kID09IEVUSFRPT0xfR1JYQ0xTUkxBTEwpIHsKKwkJaWYgKGluZm8ucnVsZV9jbnQgPiAwKSB7CisJCQlydWxlX2J1ZiA9IGttYWxsb2MoaW5mby5ydWxlX2NudCAqIHNpemVvZih1MzIpLAorCQkJCQkgICBHRlBfVVNFUik7CisJCQlpZiAoIXJ1bGVfYnVmKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQogCisJcmV0ID0gb3BzLT5nZXRfcnhuZmMoZGV2LCAmaW5mbywgcnVsZV9idWYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXQgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZpbmZvLCBzaXplb2YoaW5mbykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKKwkJZ290byBlcnJfb3V0OworCisJaWYgKHJ1bGVfYnVmKSB7CisJCXVzZXJhZGRyICs9IG9mZnNldG9mKHN0cnVjdCBldGh0b29sX3J4bmZjLCBydWxlX2xvY3MpOworCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBydWxlX2J1ZiwKKwkJCQkgaW5mby5ydWxlX2NudCAqIHNpemVvZih1MzIpKSkKKwkJCWdvdG8gZXJyX291dDsKKwl9CisJcmV0ID0gMDsKKworZXJyX291dDoKKwlpZiAocnVsZV9idWYpCisJCWtmcmVlKHJ1bGVfYnVmKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCkBAIC05MDEsNiArOTI5LDEwIEBACiAJY2FzZSBFVEhUT09MX0dGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1BGTEFHUzoKIAljYXNlIEVUSFRPT0xfR1JYRkg6CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRToKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKQEAgLTEwNTIsMTAgKzEwODQsMTYgQEAKIAkJCQkgICAgICAgZGV2LT5ldGh0b29sX29wcy0+c2V0X3ByaXZfZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR1JYRkg6Ci0JCXJjID0gZXRodG9vbF9nZXRfcnhoYXNoKGRldiwgdXNlcmFkZHIpOworCWNhc2UgRVRIVE9PTF9HUlhSSU5HUzoKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQUxMOgorCQlyYyA9IGV0aHRvb2xfZ2V0X3J4bmZjKGRldiwgdXNlcmFkZHIpOwogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfU1JYRkg6Ci0JCXJjID0gZXRodG9vbF9zZXRfcnhoYXNoKGRldiwgdXNlcmFkZHIpOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDoKKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxJTlM6CisJCXJjID0gZXRodG9vbF9zZXRfcnhuZmMoZGV2LCB1c2VyYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9HR1JPOgogCQlyYyA9IGV0aHRvb2xfZ2V0X2dybyhkZXYsIHVzZXJhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKaW5kZXggMzJiM2EwMS4uOTg2OTFlMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmMKKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKQEAgLTU4OCw3ICs1ODgsOCBAQAogCQlnb3RvIGVycm91dDsKIAl9CiAKLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtPm5sZ3JvdXAsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgb3BzLT5ubGdyb3VwLCBubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgb3BzLT5ubGdyb3VwLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAyNzhhMTQyLi5hMWNiY2U3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtODcxLDggKzg3MSw3IEBACiAJCXdyaXRlX3VubG9jaygmbmVpZ2gtPmxvY2spOwogCQluZWlnaC0+b3BzLT5zb2xpY2l0KG5laWdoLCBza2IpOwogCQlhdG9taWNfaW5jKCZuZWlnaC0+cHJvYmVzKTsKLQkJaWYgKHNrYikKLQkJCWtmcmVlX3NrYihza2IpOworCQlrZnJlZV9za2Ioc2tiKTsKIAl9IGVsc2Ugewogb3V0OgogCQl3cml0ZV91bmxvY2soJm5laWdoLT5sb2NrKTsKQEAgLTkwOCw4ICs5MDcsNyBAQAogCQkJbmVpZ2gtPnVwZGF0ZWQgPSBqaWZmaWVzOwogCQkJd3JpdGVfdW5sb2NrX2JoKCZuZWlnaC0+bG9jayk7CiAKLQkJCWlmIChza2IpCi0JCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlIGlmIChuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1NUQUxFKSB7CkBAIC0xNjU2LDcgKzE2NTQsMTEgQEAKIAkJCQlmbGFncyAmPSB+TkVJR0hfVVBEQVRFX0ZfT1ZFUlJJREU7CiAJCX0KIAotCQllcnIgPSBuZWlnaF91cGRhdGUobmVpZ2gsIGxsYWRkciwgbmRtLT5uZG1fc3RhdGUsIGZsYWdzKTsKKwkJaWYgKG5kbS0+bmRtX2ZsYWdzICYgTlRGX1VTRSkgeworCQkJbmVpZ2hfZXZlbnRfc2VuZChuZWlnaCwgTlVMTCk7CisJCQllcnIgPSAwOworCQl9IGVsc2UKKwkJCWVyciA9IG5laWdoX3VwZGF0ZShuZWlnaCwgbGxhZGRyLCBuZG0tPm5kbV9zdGF0ZSwgZmxhZ3MpOwogCQluZWlnaF9yZWxlYXNlKG5laWdoKTsKIAkJZ290byBvdXRfZGV2X3B1dDsKIAl9CkBAIC0yNTM0LDcgKzI1MzYsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05FSUdILCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORUlHSCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX05FSUdILCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCA0ODRmNTg3Li4yZGE1OWEwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJZGV2LT5ncm91cHMgPSBncm91cHM7CiAKIAlCVUlMRF9CVUdfT04oQlVTX0lEX1NJWkUgPCBJRk5BTVNJWik7Ci0JZGV2X3NldF9uYW1lKGRldiwgbmV0LT5uYW1lKTsKKwlkZXZfc2V0X25hbWUoZGV2LCAiJXMiLCBuZXQtPm5hbWUpOwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAJKmdyb3VwcysrID0gJm5ldHN0YXRfZ3JvdXA7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtdHJhY2VzLmMgYi9uZXQvY29yZS9uZXQtdHJhY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmYjQ1NgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9jb3JlL25ldC10cmFjZXMuYwpAQCAtMCwwICsxLDI5IEBACisvKgorICogY29uc29saWRhdGVzIHRyYWNlIHBvaW50IGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5laWwgSG9ybWFuIDxuaG9ybWFuQHR1eGRyaXZlci5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRwb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvbmV0X2Ryb3Btb24uaD4KKyNpbmNsdWRlIDx0cmFjZS9za2IuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKworREVGSU5FX1RSQUNFKGtmcmVlX3NrYik7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGtmcmVlX3NrYik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDY1NDk4NDguLjMyZDQxOWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0zMjc1LDggKzMyNzUsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkgewogCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCWlmIChwa3RfZGV2LT5za2IpCi0JCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKIAkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAl9CkBAIC0zMzAzLDggKzMzMDIsNyBAQAogCQlpZiAoIWN1ci0+cmVtb3ZhbF9tYXJrKQogCQkJY29udGludWU7CiAKLQkJaWYgKGN1ci0+c2tiKQotCQkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKKwkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKIAkJY3VyLT5za2IgPSBOVUxMOwogCiAJCXBrdGdlbl9yZW1vdmVfZGV2aWNlKHQsIGN1cik7CkBAIC0zMzI4LDggKzMzMjYsNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShxLCBuLCAmdC0+aWZfbGlzdCkgewogCQljdXIgPSBsaXN0X2VudHJ5KHEsIHN0cnVjdCBwa3RnZW5fZGV2LCBsaXN0KTsKIAotCQlpZiAoY3VyLT5za2IpCi0JCQlrZnJlZV9za2IoY3VyLT5za2IpOworCQlrZnJlZV9za2IoY3VyLT5za2IpOwogCQljdXItPnNrYiA9IE5VTEw7CiAKIAkJcGt0Z2VuX3JlbW92ZV9kZXZpY2UodCwgY3VyKTsKQEAgLTMzOTMsOCArMzM5MCw3IEBACiAKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKG9kZXYpKSB7CiAJCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAJCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM0MTUsOCArMzQxMSw3IEBACiAJCWlmICgoKytwa3RfZGV2LT5jbG9uZV9jb3VudCA+PSBwa3RfZGV2LT5jbG9uZV9za2IpCiAJCSAgICB8fCAoIXBrdF9kZXYtPnNrYikpIHsKIAkJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwotCQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwogCiAJCQlwa3RfZGV2LT5za2IgPSBmaWxsX3BhY2tldChvZGV2LCBwa3RfZGV2KTsKIAkJCWlmIChwa3RfZGV2LT5za2IgPT0gTlVMTCkgewpAQCAtMzQ5OCw4ICszNDkzLDcgQEAKIAogCQkvKiBEb25lIHdpdGggdGhpcyAqLwogCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCWlmIChwa3RfZGV2LT5za2IpCi0JCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJfQogb3V0OjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNzkwZGQyMC4uZDc4MDMwZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ1NSw4ICs0NTUsOCBAQAogCXJldHVybiBubG1zZ191bmljYXN0KHJ0bmwsIHNrYiwgcGlkKTsKIH0KIAotaW50IHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLAotCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpCit2b2lkIHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLAorCQkgc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpydG5sID0gbmV0LT5ydG5sOwogCWludCByZXBvcnQgPSAwOwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJaWYgKG5saCkKIAkJcmVwb3J0ID0gbmxtc2dfcmVwb3J0KG5saCk7CiAKLQlyZXR1cm4gbmxtc2dfbm90aWZ5KHJ0bmwsIHNrYiwgcGlkLCBncm91cCwgcmVwb3J0LCBmbGFncyk7CisJbmxtc2dfbm90aWZ5KHJ0bmwsIHNrYiwgcGlkLCBncm91cCwgcmVwb3J0LCBmbGFncyk7CiB9CiAKIHZvaWQgcnRubF9zZXRfc2tfZXJyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpCkBAIC0xMjQ2LDcgKzEyNDYsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9MSU5LLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBjNmE2YjE2Li42YWNiZjllIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2VycnF1ZXVlLmg+CiAKICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CkBAIC02NCw2ICs2NSw3IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDx0cmFjZS9za2IuaD4KIAogI2luY2x1ZGUgImttYXBfc2tiLmgiCiAKQEAgLTEyMyw2ICsxMjUsNyBAQAogCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIjxOVUxMPiIpOwogCUJVRygpOwogfQorRVhQT1JUX1NZTUJPTChza2Jfb3Zlcl9wYW5pYyk7CiAKIC8qKgogICoJc2tiX3VuZGVyX3BhbmljCS0gCXByaXZhdGUgZnVuY3Rpb24KQEAgLTE0Miw2ICsxNDUsNyBAQAogCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIjxOVUxMPiIpOwogCUJVRygpOwogfQorRVhQT1JUX1NZTUJPTChza2JfdW5kZXJfcGFuaWMpOwogCiAvKiAJQWxsb2NhdGUgYSBuZXcgc2tidWZmLiBXZSBkbyB0aGlzIG91cnNlbHZlcyBzbyB3ZSBjYW4gZmlsbCBpbiBhIGZldwogICoJJ3ByaXZhdGUnIGZpZWxkcyBhbmQgYWxzbyBkbyBtZW1vcnkgc3RhdGlzdGljcyB0byBmaW5kIGFsbCB0aGUKQEAgLTIwNSw3ICsyMDksOSBAQAogCXNoaW5mby0+Z3NvX3NlZ3MgPSAwOwogCXNoaW5mby0+Z3NvX3R5cGUgPSAwOwogCXNoaW5mby0+aXA2X2ZyYWdfaWQgPSAwOworCXNoaW5mby0+dHhfZmxhZ3MuZmxhZ3MgPSAwOwogCXNoaW5mby0+ZnJhZ19saXN0ID0gTlVMTDsKKwltZW1zZXQoJnNoaW5mby0+aHd0c3RhbXBzLCAwLCBzaXplb2Yoc2hpbmZvLT5od3RzdGFtcHMpKTsKIAogCWlmIChmY2xvbmUpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmNoaWxkID0gc2tiICsgMTsKQEAgLTIyMyw2ICsyMjksNyBAQAogCXNrYiA9IE5VTEw7CiAJZ290byBvdXQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTsKIAogLyoqCiAgKglfX25ldGRldl9hbGxvY19za2IgLSBhbGxvY2F0ZSBhbiBza2J1ZmYgZm9yIHJ4IG9uIGEgc3BlY2lmaWMgZGV2aWNlCkBAIC0yNTAsNiArMjU3LDcgQEAKIAl9CiAJcmV0dXJuIHNrYjsKIH0KK0VYUE9SVF9TWU1CT0woX19uZXRkZXZfYWxsb2Nfc2tiKTsKIAogc3RydWN0IHBhZ2UgKl9fbmV0ZGV2X2FsbG9jX3BhZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC00MTgsNiArNDI2LDcgQEAKIAlza2JfcmVsZWFzZV9hbGwoc2tiKTsKIAlrZnJlZV9za2JtZW0oc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woX19rZnJlZV9za2IpOwogCiAvKioKICAqCWtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZgpAQCAtNDM0LDggKzQ0MywzMCBAQAogCQlzbXBfcm1iKCk7CiAJZWxzZSBpZiAobGlrZWx5KCFhdG9taWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkpCiAJCXJldHVybjsKKwl0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCV9fa2ZyZWVfc2tiKHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKGtmcmVlX3NrYik7CisKKy8qKgorICoJY29uc3VtZV9za2IgLSBmcmVlIGFuIHNrYnVmZgorICoJQHNrYjogYnVmZmVyIHRvIGZyZWUKKyAqCisgKglEcm9wIGEgcmVmIHRvIHRoZSBidWZmZXIgYW5kIGZyZWUgaXQgaWYgdGhlIHVzYWdlIGNvdW50IGhhcyBoaXQgemVybworICoJRnVuY3Rpb25zIGlkZW50aWNhbGx5IHRvIGtmcmVlX3NrYiwgYnV0IGtmcmVlX3NrYiBhc3N1bWVzIHRoYXQgdGhlIGZyYW1lCisgKglpcyBiZWluZyBkcm9wcGVkIGFmdGVyIGEgZmFpbHVyZSBhbmQgbm90ZXMgdGhhdAorICovCit2b2lkIGNvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm47CisJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmc2tiLT51c2VycykgPT0gMSkpCisJCXNtcF9ybWIoKTsKKwllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKKwkJcmV0dXJuOworCV9fa2ZyZWVfc2tiKHNrYik7Cit9CitFWFBPUlRfU1lNQk9MKGNvbnN1bWVfc2tiKTsKIAogLyoqCiAgKglza2JfcmVjeWNsZV9jaGVjayAtIGNoZWNrIGlmIHNrYiBjYW4gYmUgcmV1c2VkIGZvciByZWNlaXZlCkBAIC02MDUsNiArNjM2LDcgQEAKIAogCXJldHVybiBfX3NrYl9jbG9uZShuLCBza2IpOwogfQorRVhQT1JUX1NZTUJPTChza2JfY2xvbmUpOwogCiBzdGF0aWMgdm9pZCBjb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZCkKIHsKQEAgLTY3MSw3ICs3MDMsNyBAQAogCWNvcHlfc2tiX2hlYWRlcihuLCBza2IpOwogCXJldHVybiBuOwogfQotCitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5KTsKIAogLyoqCiAgKglwc2tiX2NvcHkJLQljcmVhdGUgY29weSBvZiBhbiBza19idWZmIHdpdGggcHJpdmF0ZSBoZWFkLgpAQCAtNzMwLDYgKzc2Miw3IEBACiBvdXQ6CiAJcmV0dXJuIG47CiB9CitFWFBPUlRfU1lNQk9MKHBza2JfY29weSk7CiAKIC8qKgogICoJcHNrYl9leHBhbmRfaGVhZCAtIHJlYWxsb2NhdGUgaGVhZGVyIG9mICZza19idWZmCkBAIC04MTMsNiArODQ2LDcgQEAKIG5vZGF0YToKIAlyZXR1cm4gLUVOT01FTTsKIH0KK0VYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7CiAKIC8qIE1ha2UgcHJpdmF0ZSBjb3B5IG9mIHNrYiB3aXRoIHdyaXRhYmxlIGhlYWQgYW5kIHNvbWUgaGVhZHJvb20gKi8KIApAQCAtODMzLDcgKzg2Nyw3IEBACiAJfQogCXJldHVybiBza2IyOwogfQotCitFWFBPUlRfU1lNQk9MKHNrYl9yZWFsbG9jX2hlYWRyb29tKTsKIAogLyoqCiAgKglza2JfY29weV9leHBhbmQJLQljb3B5IGFuZCBleHBhbmQgc2tfYnVmZgpAQCAtODk4LDYgKzkzMiw3IEBACiAKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfZXhwYW5kKTsKIAogLyoqCiAgKglza2JfcGFkCQkJLQl6ZXJvIHBhZCB0aGUgdGFpbCBvZiBhbiBza2IKQEAgLTk0Myw2ICs5NzgsNyBAQAogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9wYWQpOwogCiAvKioKICAqCXNrYl9wdXQgLSBhZGQgZGF0YSB0byBhIGJ1ZmZlcgpAQCAtMTEwMCw2ICsxMTM2LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChfX19wc2tiX3RyaW0pOwogCiAvKioKICAqCV9fcHNrYl9wdWxsX3RhaWwgLSBhZHZhbmNlIHRhaWwgb2Ygc2tiIGhlYWRlcgpAQCAtMTE5Myw4ICsxMjMwLDcgQEAKIAkJCQkJaW5zcCA9IGxpc3Q7CiAJCQkJfQogCQkJCWlmICghcHNrYl9wdWxsKGxpc3QsIGVhdCkpIHsKLQkJCQkJaWYgKGNsb25lKQotCQkJCQkJa2ZyZWVfc2tiKGNsb25lKTsKKwkJCQkJa2ZyZWVfc2tiKGNsb25lKTsKIAkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtMTIzOCw2ICsxMjc0LDcgQEAKIAogCXJldHVybiBza2JfdGFpbF9wb2ludGVyKHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKF9fcHNrYl9wdWxsX3RhaWwpOwogCiAvKiBDb3B5IHNvbWUgZGF0YSBiaXRzIGZyb20gc2tiIHRvIGtlcm5lbCBidWZmZXIuICovCiAKQEAgLTEzMTUsNiArMTM1Miw3IEBACiBmYXVsdDoKIAlyZXR1cm4gLUVGQVVMVDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfYml0cyk7CiAKIC8qCiAgKiBDYWxsYmFjayBmcm9tIHNwbGljZV90b19waXBlKCksIGlmIHdlIG5lZWQgdG8gcmVsZWFzZSBzb21lIHBhZ2VzCkBAIC0xMzI1LDE0ICsxMzYzLDM5IEBACiAJcHV0X3BhZ2Uoc3BkLT5wYWdlc1tpXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmxpbmVhcl90b19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJCQkgIHVuc2lnbmVkIGludCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpsaW5lYXJfdG9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50ICpsZW4sCisJCQkJCSAgdW5zaWduZWQgaW50ICpvZmZzZXQsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIDApOworCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CisJc3RydWN0IHBhZ2UgKnAgPSBzay0+c2tfc25kbXNnX3BhZ2U7CisJdW5zaWduZWQgaW50IG9mZjsKIAotCWlmICghcCkKLQkJcmV0dXJuIE5VTEw7Ci0JbWVtY3B5KHBhZ2VfYWRkcmVzcyhwKSArIG9mZnNldCwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBsZW4pOworCWlmICghcCkgeworbmV3X3BhZ2U6CisJCXAgPSBzay0+c2tfc25kbXNnX3BhZ2UgPSBhbGxvY19wYWdlcyhzay0+c2tfYWxsb2NhdGlvbiwgMCk7CisJCWlmICghcCkKKwkJCXJldHVybiBOVUxMOworCisJCW9mZiA9IHNrLT5za19zbmRtc2dfb2ZmID0gMDsKKwkJLyogaG9sZCBvbmUgcmVmIHRvIHRoaXMgcGFnZSB1bnRpbCBpdCdzIGZ1bGwgKi8KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgbWxlbjsKKworCQlvZmYgPSBzay0+c2tfc25kbXNnX29mZjsKKwkJbWxlbiA9IFBBR0VfU0laRSAtIG9mZjsKKwkJaWYgKG1sZW4gPCA2NCAmJiBtbGVuIDwgKmxlbikgeworCQkJcHV0X3BhZ2UocCk7CisJCQlnb3RvIG5ld19wYWdlOworCQl9CisKKwkJKmxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgKmxlbiwgbWxlbik7CisJfQorCisJbWVtY3B5KHBhZ2VfYWRkcmVzcyhwKSArIG9mZiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgKm9mZnNldCwgKmxlbik7CisJc2stPnNrX3NuZG1zZ19vZmYgKz0gKmxlbjsKKwkqb2Zmc2V0ID0gb2ZmOworCWdldF9wYWdlKHApOwogCiAJcmV0dXJuIHA7CiB9CkBAIC0xMzQxLDIxICsxNDA0LDIxIEBACiAgKiBGaWxsIHBhZ2Uvb2Zmc2V0L2xlbmd0aCBpbnRvIHNwZCwgaWYgaXQgY2FuIGhvbGQgbW9yZSBwYWdlcy4KICAqLwogc3RhdGljIGlubGluZSBpbnQgc3BkX2ZpbGxfcGFnZShzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqc3BkLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCXVuc2lnbmVkIGludCAqbGVuLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBsaW5lYXIpCiB7CiAJaWYgKHVubGlrZWx5KHNwZC0+bnJfcGFnZXMgPT0gUElQRV9CVUZGRVJTKSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAobGluZWFyKSB7Ci0JCXBhZ2UgPSBsaW5lYXJfdG9fcGFnZShwYWdlLCBsZW4sIG9mZnNldCk7CisJCXBhZ2UgPSBsaW5lYXJfdG9fcGFnZShwYWdlLCBsZW4sICZvZmZzZXQsIHNrYik7CiAJCWlmICghcGFnZSkKIAkJCXJldHVybiAxOwogCX0gZWxzZQogCQlnZXRfcGFnZShwYWdlKTsKIAogCXNwZC0+cGFnZXNbc3BkLT5ucl9wYWdlc10gPSBwYWdlOwotCXNwZC0+cGFydGlhbFtzcGQtPm5yX3BhZ2VzXS5sZW4gPSBsZW47CisJc3BkLT5wYXJ0aWFsW3NwZC0+bnJfcGFnZXNdLmxlbiA9ICpsZW47CiAJc3BkLT5wYXJ0aWFsW3NwZC0+bnJfcGFnZXNdLm9mZnNldCA9IG9mZnNldDsKIAlzcGQtPm5yX3BhZ2VzKys7CiAKQEAgLTEzNjUsOCArMTQyOCwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fc2VnbWVudF9zZWVrKHN0cnVjdCBwYWdlICoqcGFnZSwgdW5zaWduZWQgaW50ICpwb2ZmLAogCQkJCSAgdW5zaWduZWQgaW50ICpwbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQogeworCXVuc2lnbmVkIGxvbmcgbjsKKwogCSpwb2ZmICs9IG9mZjsKLQkqcGFnZSArPSAqcG9mZiAvIFBBR0VfU0laRTsKKwluID0gKnBvZmYgLyBQQUdFX1NJWkU7CisJaWYgKG4pCisJCSpwYWdlID0gbnRoX3BhZ2UoKnBhZ2UsIG4pOworCiAJKnBvZmYgPSAqcG9mZiAlIFBBR0VfU0laRTsKIAkqcGxlbiAtPSBvZmY7CiB9CkBAIC0xMzk3LDcgKzE0NjUsNyBAQAogCQkvKiB0aGUgbGluZWFyIHJlZ2lvbiBtYXkgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIHBhZ2VzICAqLwogCQlmbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBmbGVuLCBQQUdFX1NJWkUgLSBwb2ZmKTsKIAotCQlpZiAoc3BkX2ZpbGxfcGFnZShzcGQsIHBhZ2UsIGZsZW4sIHBvZmYsIHNrYiwgbGluZWFyKSkKKwkJaWYgKHNwZF9maWxsX3BhZ2Uoc3BkLCBwYWdlLCAmZmxlbiwgcG9mZiwgc2tiLCBsaW5lYXIpKQogCQkJcmV0dXJuIDE7CiAKIAkJX19zZWdtZW50X3NlZWsoJnBhZ2UsICZwb2ZmLCAmcGxlbiwgZmxlbik7CkBAIC0xNTkwLDcgKzE2NTgsNiBAQAogZmF1bHQ6CiAJcmV0dXJuIC1FRkFVTFQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2tiX3N0b3JlX2JpdHMpOwogCiAvKiBDaGVja3N1bSBza2IgZGF0YS4gKi8KQEAgLTE2NjcsNiArMTczNCw3IEBACiAKIAlyZXR1cm4gY3N1bTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NoZWNrc3VtKTsKIAogLyogQm90aCBvZiBhYm92ZSBpbiBvbmUgYm90dGxlLiAqLwogCkBAIC0xNzQ4LDYgKzE4MTYsNyBAQAogCUJVR19PTihsZW4pOwogCXJldHVybiBjc3VtOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9hbmRfY3N1bV9iaXRzKTsKIAogdm9pZCBza2JfY29weV9hbmRfY3N1bV9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnRvKQogewpAQCAtMTc3NCw2ICsxODQzLDcgQEAKIAkJKigoX19zdW0xNiAqKSh0byArIGNzc3R1ZmYpKSA9IGNzdW1fZm9sZChjc3VtKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2Rldik7CiAKIC8qKgogICoJc2tiX2RlcXVldWUgLSByZW1vdmUgZnJvbSB0aGUgaGVhZCBvZiB0aGUgcXVldWUKQEAgLTE3OTQsNiArMTg2NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlKTsKIAogLyoqCiAgKglza2JfZGVxdWV1ZV90YWlsIC0gcmVtb3ZlIGZyb20gdGhlIHRhaWwgb2YgdGhlIHF1ZXVlCkBAIC0xODEzLDYgKzE4ODQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQorRVhQT1JUX1NZTUJPTChza2JfZGVxdWV1ZV90YWlsKTsKIAogLyoqCiAgKglza2JfcXVldWVfcHVyZ2UgLSBlbXB0eSBhIGxpc3QKQEAgLTE4MjgsNiArMTkwMCw3IEBACiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShsaXN0KSkgIT0gTlVMTCkKIAkJa2ZyZWVfc2tiKHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV9wdXJnZSk7CiAKIC8qKgogICoJc2tiX3F1ZXVlX2hlYWQgLSBxdWV1ZSBhIGJ1ZmZlciBhdCB0aGUgbGlzdCBoZWFkCkBAIC0xODQ4LDYgKzE5MjEsNyBAQAogCV9fc2tiX3F1ZXVlX2hlYWQobGlzdCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX2hlYWQpOwogCiAvKioKICAqCXNrYl9xdWV1ZV90YWlsIC0gcXVldWUgYSBidWZmZXIgYXQgdGhlIGxpc3QgdGFpbApAQCAtMTg2OCw2ICsxOTQyLDcgQEAKIAlfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIG5ld3NrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV90YWlsKTsKIAogLyoqCiAgKglza2JfdW5saW5rCS0JcmVtb3ZlIGEgYnVmZmVyIGZyb20gYSBsaXN0CkBAIC0xODg3LDYgKzE5NjIsNyBAQAogCV9fc2tiX3VubGluayhza2IsIGxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3VubGluayk7CiAKIC8qKgogICoJc2tiX2FwcGVuZAktCWFwcGVuZCBhIGJ1ZmZlcgpAQCAtMTkwNiw3ICsxOTgyLDcgQEAKIAlfX3NrYl9xdWV1ZV9hZnRlcihsaXN0LCBvbGQsIG5ld3NrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX2FwcGVuZCk7CiAKIC8qKgogICoJc2tiX2luc2VydAktCWluc2VydCBhIGJ1ZmZlcgpAQCAtMTkyOCw2ICsyMDA0LDcgQEAKIAlfX3NrYl9pbnNlcnQobmV3c2ssIG9sZC0+cHJldiwgb2xkLCBsaXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9pbnNlcnQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NwbGl0X2luc2lkZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYqIHNrYjEsCkBAIC0yMDA2LDYgKzIwODMsNyBAQAogCWVsc2UJCS8qIFNlY29uZCBjaHVuayBoYXMgbm8gaGVhZGVyLCBub3RoaW5nIHRvIGNvcHkuICovCiAJCXNrYl9zcGxpdF9ub19oZWFkZXIoc2tiLCBza2IxLCBsZW4sIHBvcyk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9zcGxpdCk7CiAKIC8qIFNoaWZ0aW5nIGZyb20vdG8gYSBjbG9uZWQgc2tiIGlzIGEgbm8tZ28uCiAgKgpAQCAtMjE2OCw2ICsyMjQ2LDcgQEAKIAlzdC0+ZnJhZ19pZHggPSBzdC0+c3RlcHBlZF9vZmZzZXQgPSAwOwogCXN0LT5mcmFnX2RhdGEgPSBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChza2JfcHJlcGFyZV9zZXFfcmVhZCk7CiAKIC8qKgogICogc2tiX3NlcV9yZWFkIC0gU2VxdWVudGlhbGx5IHJlYWQgc2tiIGRhdGEKQEAgLTIyNTUsNiArMjMzNCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3NlcV9yZWFkKTsKIAogLyoqCiAgKiBza2JfYWJvcnRfc2VxX3JlYWQgLSBBYm9ydCBhIHNlcXVlbnRpYWwgcmVhZCBvZiBza2IgZGF0YQpAQCAtMjI2OCw2ICsyMzQ4LDcgQEAKIAlpZiAoc3QtPmZyYWdfZGF0YSkKIAkJa3VubWFwX3NrYl9mcmFnKHN0LT5mcmFnX2RhdGEpOwogfQorRVhQT1JUX1NZTUJPTChza2JfYWJvcnRfc2VxX3JlYWQpOwogCiAjZGVmaW5lIFRTX1NLQl9DQihzdGF0ZSkJKChzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqKSAmKChzdGF0ZSktPmNiKSkKIApAQCAtMjMxMCw2ICsyMzkxLDcgQEAKIAlyZXQgPSB0ZXh0c2VhcmNoX2ZpbmQoY29uZmlnLCBzdGF0ZSk7CiAJcmV0dXJuIChyZXQgPD0gdG8gLSBmcm9tID8gcmV0IDogVUlOVF9NQVgpOwogfQorRVhQT1JUX1NZTUJPTChza2JfZmluZF90ZXh0KTsKIAogLyoqCiAgKiBza2JfYXBwZW5kX2RhdGF0b19mcmFnczogLSBhcHBlbmQgdGhlIHVzZXIgZGF0YSB0byBhIHNrYgpAQCAtMjM4Miw2ICsyNDY0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kX2RhdGF0b19mcmFncyk7CiAKIC8qKgogICoJc2tiX3B1bGxfcmNzdW0gLSBwdWxsIHNrYiBhbmQgdXBkYXRlIHJlY2VpdmUgY2hlY2tzdW0KQEAgLTI1NjksNyArMjY1Miw2IEBACiAJfQogCXJldHVybiBFUlJfUFRSKGVycik7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTsKIAogaW50IHNrYl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0yNTc3LDE3ICsyNjU5LDIzIEBACiAJc3RydWN0IHNrX2J1ZmYgKnAgPSAqaGVhZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAl1bnNpZ25lZCBpbnQgaGVhZHJvb207Ci0JdW5zaWduZWQgaW50IGhsZW4gPSBwLT5kYXRhIC0gc2tiX21hY19oZWFkZXIocCk7Ci0JdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGludCBsZW4gPSBza2JfZ3JvX2xlbihza2IpOwogCi0JaWYgKGhsZW4gKyBwLT5sZW4gKyBsZW4gPj0gNjU1MzYpCisJaWYgKHAtPmxlbiArIGxlbiA+PSA2NTUzNikKIAkJcmV0dXJuIC1FMkJJRzsKIAogCWlmIChza2Jfc2hpbmZvKHApLT5mcmFnX2xpc3QpCiAJCWdvdG8gbWVyZ2U7Ci0JZWxzZSBpZiAoIXNrYl9oZWFkbGVuKHApICYmICFza2JfaGVhZGxlbihza2IpICYmCi0JCSBza2Jfc2hpbmZvKHApLT5ucl9mcmFncyArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPAotCQkgTUFYX1NLQl9GUkFHUykgeworCWVsc2UgaWYgKHNrYl9oZWFkbGVuKHNrYikgPD0gc2tiX2dyb19vZmZzZXQoc2tiKSkgeworCQlpZiAoc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MgKyBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4KKwkJICAgIE1BWF9TS0JfRlJBR1MpCisJCQlyZXR1cm4gLUUyQklHOworCisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0KKwkJCXNrYl9ncm9fb2Zmc2V0KHNrYikgLSBza2JfaGVhZGxlbihza2IpOworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnNpemUgLT0KKwkJCXNrYl9ncm9fb2Zmc2V0KHNrYikgLSBza2JfaGVhZGxlbihza2IpOworCiAJCW1lbWNweShza2Jfc2hpbmZvKHApLT5mcmFncyArIHNrYl9zaGluZm8ocCktPm5yX2ZyYWdzLAogCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFncywKIAkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKiBzaXplb2Yoc2tiX2ZyYWdfdCkpOwpAQCAtMjYwNCw3ICsyNjkyLDcgQEAKIAl9CiAKIAloZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShwKTsKLQluc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihwLT5kZXYsIGhlYWRyb29tKTsKKwluc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihwLT5kZXYsIGhlYWRyb29tICsgc2tiX2dyb19vZmZzZXQocCkpOwogCWlmICh1bmxpa2VseSghbnNrYikpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNjEyLDEyICsyNzAwLDE1IEBACiAJbnNrYi0+bWFjX2xlbiA9IHAtPm1hY19sZW47CiAKIAlza2JfcmVzZXJ2ZShuc2tiLCBoZWFkcm9vbSk7CisJX19za2JfcHV0KG5za2IsIHNrYl9ncm9fb2Zmc2V0KHApKTsKIAotCXNrYl9zZXRfbWFjX2hlYWRlcihuc2tiLCAtaGxlbik7CisJc2tiX3NldF9tYWNfaGVhZGVyKG5za2IsIHNrYl9tYWNfaGVhZGVyKHApIC0gcC0+ZGF0YSk7CiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihuc2tiLCBza2JfbmV0d29ya19vZmZzZXQocCkpOwogCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihuc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChwKSk7CiAKLQltZW1jcHkoc2tiX21hY19oZWFkZXIobnNrYiksIHNrYl9tYWNfaGVhZGVyKHApLCBobGVuKTsKKwlfX3NrYl9wdWxsKHAsIHNrYl9ncm9fb2Zmc2V0KHApKTsKKwltZW1jcHkoc2tiX21hY19oZWFkZXIobnNrYiksIHNrYl9tYWNfaGVhZGVyKHApLAorCSAgICAgICBwLT5kYXRhIC0gc2tiX21hY19oZWFkZXIocCkpOwogCiAJKk5BUElfR1JPX0NCKG5za2IpID0gKk5BUElfR1JPX0NCKHApOwogCXNrYl9zaGluZm8obnNrYiktPmZyYWdfbGlzdCA9IHA7CkBAIC0yNjM2LDYgKzI3MjcsMTcgQEAKIAlwID0gbnNrYjsKIAogbWVyZ2U6CisJaWYgKHNrYl9ncm9fb2Zmc2V0KHNrYikgPiBza2JfaGVhZGxlbihza2IpKSB7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0KKwkJCXNrYl9ncm9fb2Zmc2V0KHNrYikgLSBza2JfaGVhZGxlbihza2IpOworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnNpemUgLT0KKwkJCXNrYl9ncm9fb2Zmc2V0KHNrYikgLSBza2JfaGVhZGxlbihza2IpOworCQlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOworCQlza2JfZ3JvX3B1bGwoc2tiLCBza2JfaGVhZGxlbihza2IpKTsKKwl9CisKKwlfX3NrYl9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CisKIAlwLT5wcmV2LT5uZXh0ID0gc2tiOwogCXAtPnByZXYgPSBza2I7CiAJc2tiX2hlYWRlcl9yZWxlYXNlKHNrYik7CkBAIC0yNzQ3LDYgKzI4NDksNyBAQAogCiAJcmV0dXJuIG5zZzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrYl90b19zZ3ZlYyk7CiAKIC8qKgogICoJc2tiX2Nvd19kYXRhIC0gQ2hlY2sgdGhhdCBhIHNvY2tldCBidWZmZXIncyBkYXRhIGJ1ZmZlcnMgYXJlIHdyaXRhYmxlCkBAIC0yODU2LDYgKzI5NTksNDUgQEAKIAogCXJldHVybiBlbHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza2JfY293X2RhdGEpOworCit2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAorCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBvcmlnX3NrYi0+c2s7CisJc3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2VycjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnI7CisKKwlpZiAoIXNrKQorCQlyZXR1cm47CisKKwlza2IgPSBza2JfY2xvbmUob3JpZ19za2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwlpZiAoaHd0c3RhbXBzKSB7CisJCSpza2JfaHd0c3RhbXBzKHNrYikgPQorCQkJKmh3dHN0YW1wczsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBubyBoYXJkd2FyZSB0aW1lIHN0YW1wcyBhdmFpbGFibGUsCisJCSAqIHNvIGtlZXAgdGhlIHNrYl9zaGFyZWRfdHggYW5kIG9ubHkKKwkJICogc3RvcmUgc29mdHdhcmUgdGltZSBzdGFtcAorCQkgKi8KKwkJc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOworCX0KKworCXNlcnIgPSBTS0JfRVhUX0VSUihza2IpOworCW1lbXNldChzZXJyLCAwLCBzaXplb2YoKnNlcnIpKTsKKwlzZXJyLT5lZS5lZV9lcnJubyA9IEVOT01TRzsKKwlzZXJyLT5lZS5lZV9vcmlnaW4gPSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HOworCWVyciA9IHNvY2tfcXVldWVfZXJyX3NrYihzaywgc2tiKTsKKwlpZiAoZXJyKQorCQlrZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNrYl90c3RhbXBfdHgpOworCiAKIC8qKgogICogc2tiX3BhcnRpYWxfY3N1bV9zZXQgLSBzZXQgdXAgYW5kIHZlcmlmeSBwYXJ0aWFsIGNzdW0gdmFsdWVzIGZvciBwYWNrZXQKQEAgLTI4ODQsNiArMzAyNiw3IEBACiAJc2tiLT5jc3VtX29mZnNldCA9IG9mZjsKIAlyZXR1cm4gdHJ1ZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrYl9wYXJ0aWFsX2NzdW1fc2V0KTsKIAogdm9pZCBfX3NrYl93YXJuX2xyb19mb3J3YXJkaW5nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0yODkxLDQyICszMDM0LDQgQEAKIAkJcHJfd2FybmluZygiJXM6IHJlY2VpdmVkIHBhY2tldHMgY2Fubm90IGJlIGZvcndhcmRlZCIKIAkJCSAgICIgd2hpbGUgTFJPIGlzIGVuYWJsZWRcbiIsIHNrYi0+ZGV2LT5uYW1lKTsKIH0KLQotRVhQT1JUX1NZTUJPTChfX19wc2tiX3RyaW0pOwotRVhQT1JUX1NZTUJPTChfX2tmcmVlX3NrYik7Ci1FWFBPUlRfU1lNQk9MKGtmcmVlX3NrYik7Ci1FWFBPUlRfU1lNQk9MKF9fcHNrYl9wdWxsX3RhaWwpOwotRVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7Ci1FWFBPUlRfU1lNQk9MKF9fbmV0ZGV2X2FsbG9jX3NrYik7Ci1FWFBPUlRfU1lNQk9MKHBza2JfY29weSk7Ci1FWFBPUlRfU1lNQk9MKHBza2JfZXhwYW5kX2hlYWQpOwotRVhQT1JUX1NZTUJPTChza2JfY2hlY2tzdW0pOwotRVhQT1JUX1NZTUJPTChza2JfY2xvbmUpOwotRVhQT1JUX1NZTUJPTChza2JfY29weSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9hbmRfY3N1bV9kZXYpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9iaXRzKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfZXhwYW5kKTsKLUVYUE9SVF9TWU1CT0woc2tiX292ZXJfcGFuaWMpOwotRVhQT1JUX1NZTUJPTChza2JfcGFkKTsKLUVYUE9SVF9TWU1CT0woc2tiX3JlYWxsb2NfaGVhZHJvb20pOwotRVhQT1JUX1NZTUJPTChza2JfdW5kZXJfcGFuaWMpOwotRVhQT1JUX1NZTUJPTChza2JfZGVxdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlX3RhaWwpOwotRVhQT1JUX1NZTUJPTChza2JfaW5zZXJ0KTsKLUVYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3B1cmdlKTsKLUVYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX2hlYWQpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl91bmxpbmspOwotRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kKTsKLUVYUE9SVF9TWU1CT0woc2tiX3NwbGl0KTsKLUVYUE9SVF9TWU1CT0woc2tiX3ByZXBhcmVfc2VxX3JlYWQpOwotRVhQT1JUX1NZTUJPTChza2Jfc2VxX3JlYWQpOwotRVhQT1JUX1NZTUJPTChza2JfYWJvcnRfc2VxX3JlYWQpOwotRVhQT1JUX1NZTUJPTChza2JfZmluZF90ZXh0KTsKLUVYUE9SVF9TWU1CT0woc2tiX2FwcGVuZF9kYXRhdG9fZnJhZ3MpOwogRVhQT1JUX1NZTUJPTChfX3NrYl93YXJuX2xyb19mb3J3YXJkaW5nKTsKLQotRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RvX3NndmVjKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3dfZGF0YSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChza2JfcGFydGlhbF9jc3VtX3NldCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggNWY5N2NhYS4uMDYyMDA0NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTIwLDYgKzEyMCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvcmVxdWVzdF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pcHNlYy5oPgogCkBAIC0xNDksNyArMTUwLDcgQEAKICAgInNrX2xvY2stQUZfREVDbmV0IiwgInNrX2xvY2stQUZfTkVUQkVVSSIgICwgInNrX2xvY2stQUZfU0VDVVJJVFkiICwKICAgInNrX2xvY2stQUZfS0VZIiAgICwgInNrX2xvY2stQUZfTkVUTElOSyIgICwgInNrX2xvY2stQUZfUEFDS0VUIiAgICwKICAgInNrX2xvY2stQUZfQVNIIiAgICwgInNrX2xvY2stQUZfRUNPTkVUIiAgICwgInNrX2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgInNrX2xvY2stMjEiICAgICAgICwgInNrX2xvY2stQUZfU05BIiAgICAgICwgInNrX2xvY2stQUZfSVJEQSIgICAgICwKKyAgInNrX2xvY2stQUZfUkRTIiAgICwgInNrX2xvY2stQUZfU05BIiAgICAgICwgInNrX2xvY2stQUZfSVJEQSIgICAgICwKICAgInNrX2xvY2stQUZfUFBQT1giICwgInNrX2xvY2stQUZfV0FOUElQRSIgICwgInNrX2xvY2stQUZfTExDIiAgICAgICwKICAgInNrX2xvY2stMjciICAgICAgICwgInNrX2xvY2stMjgiICAgICAgICAgICwgInNrX2xvY2stQUZfQ0FOIiAgICAgICwKICAgInNrX2xvY2stQUZfVElQQyIgICwgInNrX2xvY2stQUZfQkxVRVRPT1RIIiwgInNrX2xvY2stSVVDViIgICAgICAgICwKQEAgLTE2NCw3ICsxNjUsNyBAQAogICAic2xvY2stQUZfREVDbmV0IiwgInNsb2NrLUFGX05FVEJFVUkiICAsICJzbG9jay1BRl9TRUNVUklUWSIgLAogICAic2xvY2stQUZfS0VZIiAgICwgInNsb2NrLUFGX05FVExJTksiICAsICJzbG9jay1BRl9QQUNLRVQiICAgLAogICAic2xvY2stQUZfQVNIIiAgICwgInNsb2NrLUFGX0VDT05FVCIgICAsICJzbG9jay1BRl9BVE1TVkMiICAgLAotICAic2xvY2stMjEiICAgICAgICwgInNsb2NrLUFGX1NOQSIgICAgICAsICJzbG9jay1BRl9JUkRBIiAgICAgLAorICAic2xvY2stQUZfUkRTIiAgICwgInNsb2NrLUFGX1NOQSIgICAgICAsICJzbG9jay1BRl9JUkRBIiAgICAgLAogICAic2xvY2stQUZfUFBQT1giICwgInNsb2NrLUFGX1dBTlBJUEUiICAsICJzbG9jay1BRl9MTEMiICAgICAgLAogICAic2xvY2stMjciICAgICAgICwgInNsb2NrLTI4IiAgICAgICAgICAsICJzbG9jay1BRl9DQU4iICAgICAgLAogICAic2xvY2stQUZfVElQQyIgICwgInNsb2NrLUFGX0JMVUVUT09USCIsICJzbG9jay1BRl9JVUNWIiAgICAgLApAQCAtMTc5LDcgKzE4MCw3IEBACiAgICJjbG9jay1BRl9ERUNuZXQiLCAiY2xvY2stQUZfTkVUQkVVSSIgICwgImNsb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJjbG9jay1BRl9LRVkiICAgLCAiY2xvY2stQUZfTkVUTElOSyIgICwgImNsb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJjbG9jay1BRl9BU0giICAgLCAiY2xvY2stQUZfRUNPTkVUIiAgICwgImNsb2NrLUFGX0FUTVNWQyIgICAsCi0gICJjbG9jay0yMSIgICAgICAgLCAiY2xvY2stQUZfU05BIiAgICAgICwgImNsb2NrLUFGX0lSREEiICAgICAsCisgICJjbG9jay1BRl9SRFMiICAgLCAiY2xvY2stQUZfU05BIiAgICAgICwgImNsb2NrLUFGX0lSREEiICAgICAsCiAgICJjbG9jay1BRl9QUFBPWCIgLCAiY2xvY2stQUZfV0FOUElQRSIgICwgImNsb2NrLUFGX0xMQyIgICAgICAsCiAgICJjbG9jay0yNyIgICAgICAgLCAiY2xvY2stMjgiICAgICAgICAgICwgImNsb2NrLUFGX0NBTiIgICAgICAsCiAgICJjbG9jay1BRl9USVBDIiAgLCAiY2xvY2stQUZfQkxVRVRPT1RIIiwgImNsb2NrLUFGX0lVQ1YiICAgICAsCkBAIC0yNTUsMTEgKzI1NiwxNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc29ja19kaXNhYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpCiB7Ci0JaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKSB7Ci0JCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19USU1FU1RBTVApOwotCQluZXRfZGlzYWJsZV90aW1lc3RhbXAoKTsKKwlpZiAoc29ja19mbGFnKHNrLCBmbGFnKSkgeworCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIGZsYWcpOworCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApICYmCisJCSAgICAhc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkpIHsKKwkJCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCgpOworCQl9CiAJfQogfQogCkBAIC02MTQsMTMgKzYxOCwzOCBAQAogCQkJZWxzZQogCQkJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpOwogCQkJc29ja19zZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApOwotCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCQl9IGVsc2UgewogCQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7CiAJCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpOwogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBTT19USU1FU1RBTVBJTkc6CisJCWlmICh2YWwgJiB+U09GX1RJTUVTVEFNUElOR19NQVNLKSB7CisJCQlyZXQgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUpOworCQlpZiAodmFsICYgU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkKKwkJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywKKwkJCQkJICAgICAgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpOworCQllbHNlCisJCQlzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHNrLAorCQkJCQkgICAgICAgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKTsKKwkJYnJlYWs7CisKIAljYXNlIFNPX1JDVkxPV0FUOgogCQlpZiAodmFsIDwgMCkKIAkJCXZhbCA9IElOVF9NQVg7CkBAIC03NjgsNiArNzk3LDI0IEBACiAJCXYudmFsID0gc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKTsKIAkJYnJlYWs7CiAKKwljYXNlIFNPX1RJTUVTVEFNUElORzoKKwkJdi52YWwgPSAwOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOworCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpKQorCQkJdi52YWwgfD0gU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTsKKwkJYnJlYWs7CisKIAljYXNlIFNPX1JDVlRJTUVPOgogCQlsdj1zaXplb2Yoc3RydWN0IHRpbWV2YWwpOwogCQlpZiAoc2stPnNrX3JjdnRpbWVvID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7CkBAIC05NjksNyArMTAxNiw4IEBACiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfZmlsdGVyLCBOVUxMKTsKIAl9CiAKLQlzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHNrKTsKKwlzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CisJc29ja19kaXNhYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpOwogCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfb21lbV9hbGxvYykpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3B0bWVtIGxlYWthZ2UgKCVkIGJ5dGVzKSBkZXRlY3RlZC5cbiIsCkBAIC0xMjU1LDEwICsxMzAzLDkgQEAKICAqCUdlbmVyaWMgc2VuZC9yZWNlaXZlIGJ1ZmZlciBoYW5kbGVycwogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc29ja19hbGxvY19zZW5kX3Bza2Ioc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBoZWFkZXJfbGVuLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbiwKLQkJCQkJICAgIGludCBub2Jsb2NrLCBpbnQgKmVycmNvZGUpCitzdHJ1Y3Qgc2tfYnVmZiAqc29ja19hbGxvY19zZW5kX3Bza2Ioc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBsb25nIGhlYWRlcl9sZW4sCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLCBpbnQgbm9ibG9jaywKKwkJCQkgICAgIGludCAqZXJyY29kZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWdmcF90IGdmcF9tYXNrOwpAQCAtMTMzOCw2ICsxMzg1LDcgQEAKIAkqZXJyY29kZSA9IGVycjsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woc29ja19hbGxvY19zZW5kX3Bza2IpOwogCiBzdHJ1Y3Qgc2tfYnVmZiAqc29ja19hbGxvY19zZW5kX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICAgaW50IG5vYmxvY2ssIGludCAqZXJyY29kZSkKQEAgLTE3ODYsNyArMTgzNCw3IEBACiB7CiAJc3RydWN0IHRpbWV2YWwgdHY7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHYgPSBrdGltZV90b190aW1ldmFsKHNrLT5za19zdGFtcCk7CiAJaWYgKHR2LnR2X3NlYyA9PSAtMSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xODAyLDcgKzE4NTAsNyBAQAogewogCXN0cnVjdCB0aW1lc3BlYyB0czsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0cyA9IGt0aW1lX3RvX3RpbWVzcGVjKHNrLT5za19zdGFtcCk7CiAJaWYgKHRzLnR2X3NlYyA9PSAtMSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xODE0LDExICsxODYyLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNvY2tfZ2V0X3RpbWVzdGFtcG5zKTsKIAotdm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKQordm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZykKIHsKLQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKSB7Ci0JCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKTsKLQkJbmV0X2VuYWJsZV90aW1lc3RhbXAoKTsKKwlpZiAoIXNvY2tfZmxhZyhzaywgZmxhZykpIHsKKwkJc29ja19zZXRfZmxhZyhzaywgZmxhZyk7CisJCS8qCisJCSAqIHdlIGp1c3Qgc2V0IG9uZSBvZiB0aGUgdHdvIGZsYWdzIHdoaWNoIHJlcXVpcmUgbmV0CisJCSAqIHRpbWUgc3RhbXBpbmcsIGJ1dCB0aW1lIHN0YW1waW5nIG1pZ2h0IGhhdmUgYmVlbiBvbgorCQkgKiBhbHJlYWR5IGJlY2F1c2Ugb2YgdGhlIG90aGVyIG9uZQorCQkgKi8KKwkJaWYgKCFzb2NrX2ZsYWcoc2ssCisJCQkJZmxhZyA9PSBTT0NLX1RJTUVTVEFNUCA/CisJCQkJU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgOgorCQkJCVNPQ0tfVElNRVNUQU1QKSkKKwkJCW5ldF9lbmFibGVfdGltZXN0YW1wKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IDgzZDMzOTguLjdkYjFkZTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5ldF9jb3JlX3RhYmxlW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS91dGlscy5jIGIvbmV0L2NvcmUvdXRpbHMuYwppbmRleCA3MmUwZWJlLi44MzIyMWFlIDEwMDY0NAotLS0gYS9uZXQvY29yZS91dGlscy5jCisrKyBiL25ldC9jb3JlL3V0aWxzLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmggYi9uZXQvZGNjcC9hY2t2ZWMuaAppbmRleCA0NWY5NWU1Li43ZWE1NTdiIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuaAorKysgYi9uZXQvZGNjcC9hY2t2ZWMuaApAQCAtMjAsNiArMjAsOSBAQAogLyogV2UgY2FuIHNwcmVhZCBhbiBhY2sgdmVjdG9yIGFjcm9zcyBtdWx0aXBsZSBvcHRpb25zICovCiAjZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gKERDQ1BfU0lOR0xFX09QVF9NQVhMRU4gKiAyKQogCisvKiBFc3RpbWF0ZWQgbWluaW11bSBhdmVyYWdlIEFjayBWZWN0b3IgbGVuZ3RoIC0gdXNlZCBmb3IgdXBkYXRpbmcgTVBTICovCisjZGVmaW5lIERDQ1BBVl9NSU5fT1BUTEVOCTE2CisKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQJMAogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9FQ05fTUFSS0VECSgxIDw8IDYpCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRAkoMyA8PCA2KQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IGYyMjMwZmMuLmQ2YmM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RjY3AuaAorKysgYi9uZXQvZGNjcC9kY2NwLmgKQEAgLTQyLDkgKzQyLDExIEBACiBleHRlcm4gaW50IGRjY3BfZGVidWc7CiAjZGVmaW5lIGRjY3BfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQkgIERDQ1BfUFJfREVCVUcoZGNjcF9kZWJ1ZywgZm9ybWF0LCAjI2EpCiAjZGVmaW5lIGRjY3BfcHJfZGVidWdfY2F0KGZvcm1hdCwgYS4uLikgICBEQ0NQX1BSSU5USyhkY2NwX2RlYnVnLCBmb3JtYXQsICMjYSkKKyNkZWZpbmUgZGNjcF9kZWJ1ZyhmbXQsIGEuLi4pCQkgIGRjY3BfcHJfZGVidWdfY2F0KEtFUk5fREVCVUcgZm10LCAjI2EpCiAjZWxzZQogI2RlZmluZSBkY2NwX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Z19jYXQoZm9ybWF0LCBhLi4uKQorI2RlZmluZSBkY2NwX2RlYnVnKGZvcm1hdCwgYS4uLikKICNlbmRpZgogCiBleHRlcm4gc3RydWN0IGluZXRfaGFzaGluZm8gZGNjcF9oYXNoaW5mbzsKQEAgLTYxLDExICs2MywxNCBAQAogICogICAgLSBEQ0NQLVJlc2V0ICAgIHdpdGggQUNLIFN1YmhlYWRlciBhbmQgNCBieXRlcyBvZiBSZXNldCBDb2RlIGZpZWxkcwogICogIEhlbmNlIGEgc2FmZSB1cHBlciBib3VuZCBmb3IgdGhlIG1heGltdW0gb3B0aW9uIGxlbmd0aCBpcyAxMDIwLTI4ID0gOTkyCiAgKi8KLSNkZWZpbmUgTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICgyNTUgKiBzaXplb2YoaW50KSkKKyNkZWZpbmUgTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICgyNTUgKiBzaXplb2YodWludDMyX3QpKQogI2RlZmluZSBEQ0NQX01BWF9QQUNLRVRfSERSIDI4CiAjZGVmaW5lIERDQ1BfTUFYX09QVF9MRU4gKE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAtIERDQ1BfTUFYX1BBQ0tFVF9IRFIpCiAjZGVmaW5lIE1BWF9EQ0NQX0hFQURFUiAoTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICsgTUFYX0hFQURFUikKIAorLyogVXBwZXIgYm91bmQgZm9yIGluaXRpYWwgZmVhdHVyZS1uZWdvdGlhdGlvbiBvdmVyaGVhZCAocGFkZGVkIHRvIDMyIGJpdHMpICovCisjZGVmaW5lIERDQ1BfRkVBVE5FR19PVkVSSEVBRAkgKDMyICogc2l6ZW9mKHVpbnQzMl90KSkKKwogI2RlZmluZSBEQ0NQX1RJTUVXQUlUX0xFTiAoNjAgKiBIWikgLyogaG93IGxvbmcgdG8gd2FpdCB0byBkZXN0cm95IFRJTUUtV0FJVAogCQkJCSAgICAgKiBzdGF0ZSwgYWJvdXQgNjAgc2Vjb25kcyAqLwogCkBAIC05NSw5ICsxMDAsNiBAQAogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmV0cmllczE7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMjsKLWV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwotZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkOwotZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfdHhfcWxlbjsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3N5bmNfcmF0ZWxpbWl0OwogCkBAIC00MDksMjMgKzQxMSwyMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGRjY3BfdXBkYXRlX2dzcihzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQljb25zdCBzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayA9IGRjY3BfbXNrKHNrKTsKIAogCWRwLT5kY2Nwc19nc3IgPSBzZXE7Ci0JZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19zd2wsCi0JCSAgICAgICBkcC0+ZGNjcHNfZ3NyICsgMSAtIChkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93IC8gNCkpOwotCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfc3doLAotCQkgICAgICAgZHAtPmRjY3BzX2dzciArICgzICogZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdykgLyA0KTsKKwkvKiBTZXF1ZW5jZSB2YWxpZGl0eSB3aW5kb3cgZGVwZW5kcyBvbiByZW1vdGUgU2VxdWVuY2UgV2luZG93ICg3LjUuMSkgKi8KKwlkcC0+ZGNjcHNfc3dsID0gU1VCNDgoQURENDgoZHAtPmRjY3BzX2dzciwgMSksIGRwLT5kY2Nwc19yX3NlcV93aW4gLyA0KTsKKwlkcC0+ZGNjcHNfc3doID0gQURENDgoZHAtPmRjY3BzX2dzciwgKDMgKiBkcC0+ZGNjcHNfcl9zZXFfd2luKSAvIDQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF91cGRhdGVfZ3NzKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcSkKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCi0JZHAtPmRjY3BzX2F3aCA9IGRwLT5kY2Nwc19nc3MgPSBzZXE7Ci0JZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19hd2wsCi0JCSAgICAgICAoZHAtPmRjY3BzX2dzcyAtCi0JCQlkY2NwX21zayhzayktPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgKyAxKSk7CisJZHAtPmRjY3BzX2dzcyA9IHNlcTsKKwkvKiBBY2sgdmFsaWRpdHkgd2luZG93IGRlcGVuZHMgb24gbG9jYWwgU2VxdWVuY2UgV2luZG93IHZhbHVlICg3LjUuMSkgKi8KKwlkcC0+ZGNjcHNfYXdsID0gU1VCNDgoQURENDgoZHAtPmRjY3BzX2dzcywgMSksIGRwLT5kY2Nwc19sX3NlcV93aW4pOworCWRwLT5kY2Nwc19hd2ggPSBkcC0+ZGNjcHNfZ3NzOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkY2NwX2Fja19wZW5kaW5nKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuYyBiL25ldC9kY2NwL2ZlYXQuYwppbmRleCA0MTUyMzA4Li5iMDQxNjBhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmMKKysrIGIvbmV0L2RjY3AvZmVhdC5jCkBAIC0yNSw2ICsyNSwxMSBAQAogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJmZWF0LmgiCiAKKy8qIGZlYXR1cmUtc3BlY2lmaWMgc3lzY3RscyAtIGluaXRpYWxpc2VkIHRvIHRoZSBkZWZhdWx0cyBmcm9tIFJGQyA0MzQwLCA2LjQgKi8KK3Vuc2lnbmVkIGxvbmcJc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93IF9fcmVhZF9tb3N0bHkgPSAxMDA7CitpbnQJCXN5c2N0bF9kY2NwX3J4X2NjaWQJICAgIF9fcmVhZF9tb3N0bHkgPSAyLAorCQlzeXNjdGxfZGNjcF90eF9jY2lkCSAgICBfX3JlYWRfbW9zdGx5ID0gMjsKKwogLyoKICAqIEZlYXR1cmUgYWN0aXZhdGlvbiBoYW5kbGVycy4KICAqCkBAIC01MSw4ICs1NiwxNyBAQAogCiBzdGF0aWMgaW50IGRjY3BfaGRscl9zZXFfd2luKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcV93aW4sIGJvb2wgcngpCiB7Ci0JaWYgKCFyeCkKLQkJZGNjcF9tc2soc2spLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gc2VxX3dpbjsKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCisJaWYgKHJ4KSB7CisJCWRwLT5kY2Nwc19yX3NlcV93aW4gPSBzZXFfd2luOworCQkvKiBwcm9wYWdhdGUgY2hhbmdlcyB0byB1cGRhdGUgU1dML1NXSCAqLworCQlkY2NwX3VwZGF0ZV9nc3Ioc2ssIGRwLT5kY2Nwc19nc3IpOworCX0gZWxzZSB7CisJCWRwLT5kY2Nwc19sX3NlcV93aW4gPSBzZXFfd2luOworCQkvKiBwcm9wYWdhdGUgY2hhbmdlcyB0byB1cGRhdGUgQVdMICovCisJCWRjY3BfdXBkYXRlX2dzcyhzaywgZHAtPmRjY3BzX2dzcyk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xOTQsNiArMjA4LDEwMCBAQAogCXJldHVybiBpZHggPCAwID8gMCA6IGRjY3BfZmVhdF90YWJsZVtpZHhdLmRlZmF1bHRfdmFsdWU7CiB9CiAKKy8qCisgKglEZWJ1Z2dpbmcgYW5kIHZlcmJvc2UtcHJpbnRpbmcgc2VjdGlvbgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9mZWF0X2ZuYW1lKGNvbnN0IHU4IGZlYXQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmZlYXR1cmVfbmFtZXNbXSA9IHsKKwkJW0RDQ1BGX1JFU0VSVkVEXQk9ICJSZXNlcnZlZCIsCisJCVtEQ0NQRl9DQ0lEXQkJPSAiQ0NJRCIsCisJCVtEQ0NQRl9TSE9SVF9TRVFOT1NdCT0gIkFsbG93IFNob3J0IFNlcW5vcyIsCisJCVtEQ0NQRl9TRVFVRU5DRV9XSU5ET1ddCT0gIlNlcXVlbmNlIFdpbmRvdyIsCisJCVtEQ0NQRl9FQ05fSU5DQVBBQkxFXQk9ICJFQ04gSW5jYXBhYmxlIiwKKwkJW0RDQ1BGX0FDS19SQVRJT10JPSAiQWNrIFJhdGlvIiwKKwkJW0RDQ1BGX1NFTkRfQUNLX1ZFQ1RPUl0JPSAiU2VuZCBBQ0sgVmVjdG9yIiwKKwkJW0RDQ1BGX1NFTkRfTkRQX0NPVU5UXQk9ICJTZW5kIE5EUCBDb3VudCIsCisJCVtEQ0NQRl9NSU5fQ1NVTV9DT1ZFUl0JPSAiTWluLiBDc3VtIENvdmVyYWdlIiwKKwkJW0RDQ1BGX0RBVEFfQ0hFQ0tTVU1dCT0gIlNlbmQgRGF0YSBDaGVja3N1bSIsCisJfTsKKwlpZiAoZmVhdCA+IERDQ1BGX0RBVEFfQ0hFQ0tTVU0gJiYgZmVhdCA8IERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDKQorCQlyZXR1cm4gZmVhdHVyZV9uYW1lc1tEQ0NQRl9SRVNFUlZFRF07CisKKwlpZiAoZmVhdCA9PSAgRENDUEZfU0VORF9MRVZfUkFURSkKKwkJcmV0dXJuICJTZW5kIExvc3MgRXZlbnQgUmF0ZSI7CisJaWYgKGZlYXQgPj0gRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCisJCXJldHVybiAiQ0NJRC1zcGVjaWZpYyI7CisKKwlyZXR1cm4gZmVhdHVyZV9uYW1lc1tmZWF0XTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9zbmFtZVtdID0geyAiREVGQVVMVCIsICJJTklUSUFMSVNJTkciLCAiQ0hBTkdJTkciLAorCQkJCQkgIlVOU1RBQkxFIiwgIlNUQUJMRSIgfTsKKworI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9mZWF0X29uYW1lKGNvbnN0IHU4IG9wdCkKK3sKKwlzd2l0Y2ggKG9wdCkgeworCWNhc2UgRENDUE9fQ0hBTkdFX0w6ICByZXR1cm4gIkNoYW5nZV9MIjsKKwljYXNlIERDQ1BPX0NPTkZJUk1fTDogcmV0dXJuICJDb25maXJtX0wiOworCWNhc2UgRENDUE9fQ0hBTkdFX1I6ICByZXR1cm4gIkNoYW5nZV9SIjsKKwljYXNlIERDQ1BPX0NPTkZJUk1fUjogcmV0dXJuICJDb25maXJtX1IiOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50dmFsKHU4IGZlYXRfbnVtLCBkY2NwX2ZlYXRfdmFsIGNvbnN0ICp2YWwpCit7CisJdTggaSwgdHlwZSA9IGRjY3BfZmVhdF90eXBlKGZlYXRfbnVtKTsKKworCWlmICh2YWwgPT0gTlVMTCB8fCAodHlwZSA9PSBGRUFUX1NQICYmIHZhbC0+c3AudmVjID09IE5VTEwpKQorCQlkY2NwX3ByX2RlYnVnX2NhdCgiKE5VTEwpIik7CisJZWxzZSBpZiAodHlwZSA9PSBGRUFUX1NQKQorCQlmb3IgKGkgPSAwOyBpIDwgdmFsLT5zcC5sZW47IGkrKykKKwkJCWRjY3BfcHJfZGVidWdfY2F0KCIlcyV1IiwgaSA/ICIgIiA6ICIiLCB2YWwtPnNwLnZlY1tpXSk7CisJZWxzZSBpZiAodHlwZSA9PSBGRUFUX05OKQorCQlkY2NwX3ByX2RlYnVnX2NhdCgiJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsLT5ubik7CisJZWxzZQorCQlkY2NwX3ByX2RlYnVnX2NhdCgidW5rbm93biB0eXBlICV1IiwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfZmVhdF9wcmludHZhbHModTggZmVhdF9udW0sIHU4ICpsaXN0LCB1OCBsZW4pCit7CisJdTggdHlwZSA9IGRjY3BfZmVhdF90eXBlKGZlYXRfbnVtKTsKKwlkY2NwX2ZlYXRfdmFsIGZ2YWwgPSB7IC5zcC52ZWMgPSBsaXN0LCAuc3AubGVuID0gbGVuIH07CisKKwlpZiAodHlwZSA9PSBGRUFUX05OKQorCQlmdmFsLm5uID0gZGNjcF9kZWNvZGVfdmFsdWVfdmFyKGxpc3QsIGxlbik7CisJZGNjcF9mZWF0X3ByaW50dmFsKGZlYXRfbnVtLCAmZnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfZmVhdF9wcmludF9lbnRyeShzdHJ1Y3QgZGNjcF9mZWF0X2VudHJ5IGNvbnN0ICplbnRyeSkKK3sKKwlkY2NwX2RlYnVnKCIgICAqICVzICVzID0gIiwgZW50cnktPmlzX2xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAorCQkJCSAgICBkY2NwX2ZlYXRfZm5hbWUoZW50cnktPmZlYXRfbnVtKSk7CisJZGNjcF9mZWF0X3ByaW50dmFsKGVudHJ5LT5mZWF0X251bSwgJmVudHJ5LT52YWwpOworCWRjY3BfcHJfZGVidWdfY2F0KCIsIHN0YXRlPSVzICVzXG4iLCBkY2NwX2ZlYXRfc25hbWVbZW50cnktPnN0YXRlXSwKKwkJCSAgZW50cnktPm5lZWRzX2NvbmZpcm0gPyAiKENvbmZpcm0gcGVuZGluZykiIDogIiIpOworfQorCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBmZWF0LCB2YWwsIGxlbiwgbWFuZGF0b3J5KQlkbyB7CSAgICAgIFwKKwlkY2NwX3ByX2RlYnVnKCIlcyglcywgIiwgZGNjcF9mZWF0X29uYW1lKG9wdCksIGRjY3BfZmVhdF9mbmFtZShmZWF0KSk7XAorCWRjY3BfZmVhdF9wcmludHZhbHMoZmVhdCwgdmFsLCBsZW4pOwkJCQkgICAgICBcCisJZGNjcF9wcl9kZWJ1Z19jYXQoIikgJXNcbiIsIG1hbmRhdG9yeSA/ICIhIiA6ICIiKTsJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfZm5saXN0KGZuX2xpc3QpICB7CQlcCisJY29uc3Qgc3RydWN0IGRjY3BfZmVhdF9lbnRyeSAqX19fZW50cnk7CQlcCisJCQkJCQkJXAorCWRjY3BfcHJfZGVidWcoIkxpc3QgRHVtcDpcbiIpOwkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fX2VudHJ5LCBmbl9saXN0LCBub2RlKQlcCisJCWRjY3BfZmVhdF9wcmludF9lbnRyeShfX19lbnRyeSk7CVwKK30KKyNlbHNlCS8qICEgQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBtYW5kYXRvcnkpCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9mbmxpc3QoZm5fbGlzdCkKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fZGNjcF9mZWF0X2FjdGl2YXRlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IGlkeCwKIAkJCQljb25zdCBib29sIGlzX2xvY2FsLCBkY2NwX2ZlYXRfdmFsIGNvbnN0ICpmdmFsKQogewpAQCAtMjI2LDYgKzMzNCwxMCBAQAogCS8qIExvY2F0aW9uIGlzIFJYIGlmIHRoaXMgaXMgYSBsb2NhbC1SWCBvciByZW1vdGUtVFggZmVhdHVyZSAqLwogCXJ4ID0gKGlzX2xvY2FsID09IChkY2NwX2ZlYXRfdGFibGVbaWR4XS5yeHR4ID09IEZFQVRfQVRfUlgpKTsKIAorCWRjY3BfZGVidWcoIiAgIC0+IGFjdGl2YXRpbmcgJXMgJXMsICVzdmFsPSVsbHVcbiIsIHJ4ID8gIlJYIiA6ICJUWCIsCisJCSAgIGRjY3BfZmVhdF9mbmFtZShkY2NwX2ZlYXRfdGFibGVbaWR4XS5mZWF0X251bSksCisJCSAgIGZ2YWwgPyAiIiA6ICJkZWZhdWx0ICIsICAodW5zaWduZWQgbG9uZyBsb25nKXZhbCk7CisKIAlyZXR1cm4gZGNjcF9mZWF0X3RhYmxlW2lkeF0uYWN0aXZhdGlvbl9oZGxyKHNrLCB2YWwsIHJ4KTsKIH0KIApAQCAtNTMwLDYgKzY0Miw3IEBACiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9CisJCWRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBwb3MtPmZlYXRfbnVtLCBwdHIsIGxlbiwgMCk7CiAKIAkJaWYgKGRjY3BfaW5zZXJ0X2ZuX29wdChza2IsIG9wdCwgcG9zLT5mZWF0X251bSwgcHRyLCBsZW4sIHJwdCkpCiAJCQlyZXR1cm4gLTE7CkBAIC03ODMsNiArODk2LDcgQEAKIAl3aGlsZSAoaS0tKQogCQlpZiAoY2NpZHNbaV0gPiAwICYmIGRjY3BfZmVhdF9wcm9wYWdhdGVfY2NpZChmbiwgY2NpZHNbaV0sIGkpKQogCQkJcmV0dXJuIC0xOworCWRjY3BfZmVhdF9wcmludF9mbmxpc3QoZm4pOwogCXJldHVybiAwOwogfQogCkBAIC05MDEsNiArMTAxNSw4IEBACiAJaWYgKGxlbiA9PSAwIHx8IHR5cGUgPT0gRkVBVF9VTktOT1dOKQkJLyogNi4xIGFuZCA2LjYuOCAqLwogCQlnb3RvIHVua25vd25fZmVhdHVyZV9vcl92YWx1ZTsKIAorCWRjY3BfZmVhdF9wcmludF9vcHQob3B0LCBmZWF0LCB2YWwsIGxlbiwgaXNfbWFuZGF0b3J5KTsKKwogCS8qCiAJICoJTmVnb3RpYXRpb24gb2YgTk4gZmVhdHVyZXM6IENoYW5nZSBSIGlzIGludmFsaWQsIHNvIHRoZXJlIGlzIG5vCiAJICoJc2ltdWx0YW5lb3VzIG5lZ290aWF0aW9uOyBoZW5jZSB3ZSBkbyBub3QgbG9vayB1cCBpbiB0aGUgbGlzdC4KQEAgLTEwMDYsNiArMTEyMiw4IEBACiAJY29uc3QgYm9vbCBsb2NhbCA9IChvcHQgPT0gRENDUE9fQ09ORklSTV9SKTsKIAlzdHJ1Y3QgZGNjcF9mZWF0X2VudHJ5ICplbnRyeSA9IGRjY3BfZmVhdF9saXN0X2xvb2t1cChmbiwgZmVhdCwgbG9jYWwpOwogCisJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBpc19tYW5kYXRvcnkpOworCiAJaWYgKGVudHJ5ID09IE5VTEwpIHsJLyogbm90aGluZyBxdWV1ZWQ6IGlnbm9yZSBvciBoYW5kbGUgZXJyb3IgKi8KIAkJaWYgKGlzX21hbmRhdG9yeSAmJiB0eXBlID09IEZFQVRfVU5LTk9XTikKIAkJCXJldHVybiBEQ0NQX1JFU0VUX0NPREVfTUFOREFUT1JZX0VSUk9SOwpAQCAtMTExNSwyMyArMTIzMyw3MCBAQAogCXJldHVybiAwOwkvKiBpZ25vcmUgRk4gb3B0aW9ucyBpbiBhbGwgb3RoZXIgc3RhdGVzICovCiB9CiAKKy8qKgorICogZGNjcF9mZWF0X2luaXQgIC0gIFNlZWQgZmVhdHVyZSBuZWdvdGlhdGlvbiB3aXRoIGhvc3Qtc3BlY2lmaWMgZGVmYXVsdHMKKyAqIFRoaXMgaW5pdGlhbGlzZXMgZ2xvYmFsIGRlZmF1bHRzLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSBzeXNjdGxzLgorICogVGhlc2UgY2FuIGxhdGVyIGJlIG92ZXJyaWRkZW4gYnkgcmVnaXN0ZXJpbmcgY2hhbmdlcyB2aWEgc2V0c29ja29wdCBjYWxscy4KKyAqIFRoZSBsYXN0IGxpbmsgaW4gdGhlIGNoYWluIGlzIGZpbmFsaXNlX3NldHRpbmdzLCB0byBtYWtlIHN1cmUgdGhhdCBiZXR3ZWVuCisgKiBoZXJlIGFuZCB0aGUgc3RhcnQgb2YgYWN0dWFsIGZlYXR1cmUgbmVnb3RpYXRpb24gbm8gaW5jb25zaXN0ZW5jaWVzIGVudGVyLgorICoKKyAqIEFsbCBmZWF0dXJlcyBub3QgYXBwZWFyaW5nIGJlbG93IHVzZSBlaXRoZXIgZGVmYXVsdHMgb3IgYXJlIG90aGVyd2lzZQorICogbGF0ZXIgYWRqdXN0ZWQgdGhyb3VnaCBkY2NwX2ZlYXRfZmluYWxpc2Vfc2V0dGluZ3MoKS4KKyAqLwogaW50IGRjY3BfZmVhdF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCXN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOworCXN0cnVjdCBsaXN0X2hlYWQgKmZuID0gJmRjY3Bfc2soc2spLT5kY2Nwc19mZWF0bmVnOworCXU4IG9uID0gMSwgb2ZmID0gMDsKIAlpbnQgcmM7CisJc3RydWN0IHsKKwkJdTggKnZhbDsKKwkJdTggbGVuOworCX0gdHgsIHJ4OwogCi0JSU5JVF9MSVNUX0hFQUQoJmRtc2stPmRjY3Btc19wZW5kaW5nKTsJLyogWFhYIG5vIGxvbmdlciB1c2VkICovCi0JSU5JVF9MSVNUX0hFQUQoJmRtc2stPmRjY3Btc19jb25mKTsJLyogWFhYIG5vIGxvbmdlciB1c2VkICovCisJLyogTm9uLW5lZ290aWFibGUgKE5OKSBmZWF0dXJlcyAqLworCXJjID0gX19mZWF0X3JlZ2lzdGVyX25uKGZuLCBEQ0NQRl9TRVFVRU5DRV9XSU5ET1csIDAsCisJCQkJICAgIHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKLQkvKiBBY2sgcmF0aW8gKi8KLQlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9ubigmZHAtPmRjY3BzX2ZlYXRuZWcsIERDQ1BGX0FDS19SQVRJTywgMCwKLQkJCQlkcC0+ZGNjcHNfbF9hY2tfcmF0aW8pOworCS8qIFNlcnZlci1wcmlvcml0eSAoU1ApIGZlYXR1cmVzICovCisKKwkvKiBBZHZlcnRpc2UgdGhhdCBzaG9ydCBzZXFub3MgYXJlIG5vdCBzdXBwb3J0ZWQgKDcuNi4xKSAqLworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9TSE9SVF9TRVFOT1MsIHRydWUsIHRydWUsICZvZmYsIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogUkZDIDQzNDAgMTIuMTogIklmIGEgRENDUCBpcyBub3QgRUNOIGNhcGFibGUsIC4uLiIgKi8KKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfRUNOX0lOQ0FQQUJMRSwgdHJ1ZSwgdHJ1ZSwgJm9uLCAxKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qCisJICogV2UgYWR2ZXJ0aXNlIHRoZSBhdmFpbGFibGUgbGlzdCBvZiBDQ0lEcyBhbmQgcmVvcmRlciBhY2NvcmRpbmcgdG8KKwkgKiBwcmVmZXJlbmNlcywgdG8gYXZvaWQgZmFpbHVyZSByZXN1bHRpbmcgZnJvbSBuZWdvdGlhdGluZyBkaWZmZXJlbnQKKwkgKiBzaW5nbGV0b24gdmFsdWVzICh3aGljaCBhbHdheXMgbGVhZHMgdG8gZmFpbHVyZSkuCisJICogVGhlc2Ugc2V0dGluZ3MgY2FuIHN0aWxsIChsYXRlcikgYmUgb3ZlcnJpZGRlbiB2aWEgc29ja29wdHMuCisJICovCisJaWYgKGNjaWRfZ2V0X2J1aWx0aW5fY2NpZHMoJnR4LnZhbCwgJnR4LmxlbikgfHwKKwkgICAgY2NpZF9nZXRfYnVpbHRpbl9jY2lkcygmcngudmFsLCAmcngubGVuKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJaWYgKCFkY2NwX2ZlYXRfcHJlZmVyKHN5c2N0bF9kY2NwX3R4X2NjaWQsIHR4LnZhbCwgdHgubGVuKSB8fAorCSAgICAhZGNjcF9mZWF0X3ByZWZlcihzeXNjdGxfZGNjcF9yeF9jY2lkLCByeC52YWwsIHJ4LmxlbikpCisJCWdvdG8gZnJlZV9jY2lkX2xpc3RzOworCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX0NDSUQsIHRydWUsIGZhbHNlLCB0eC52YWwsIHR4Lmxlbik7CisJaWYgKHJjKQorCQlnb3RvIGZyZWVfY2NpZF9saXN0czsKKworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9DQ0lELCBmYWxzZSwgZmFsc2UsIHJ4LnZhbCwgcngubGVuKTsKKworZnJlZV9jY2lkX2xpc3RzOgorCWtmcmVlKHR4LnZhbCk7CisJa2ZyZWUocngudmFsKTsKIAlyZXR1cm4gcmM7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9pbml0KTsKLQogaW50IGRjY3BfZmVhdF9hY3RpdmF0ZV92YWx1ZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpmbl9saXN0KQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CkBAIC0xMTU2LDkgKzEzMjEsMTAgQEAKIAkJCWdvdG8gYWN0aXZhdGlvbl9mYWlsZWQ7CiAJCX0KIAkJaWYgKGN1ci0+c3RhdGUgIT0gRkVBVF9TVEFCTEUpIHsKLQkJCURDQ1BfQ1JJVCgiTmVnb3RpYXRpb24gb2YgJXMgJXUgZmFpbGVkIGluIHN0YXRlICV1IiwKKwkJCURDQ1BfQ1JJVCgiTmVnb3RpYXRpb24gb2YgJXMgJXMgZmFpbGVkIGluIHN0YXRlICVzIiwKIAkJCQkgIGN1ci0+aXNfbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0JCQkJICBjdXItPmZlYXRfbnVtLCBjdXItPnN0YXRlKTsKKwkJCQkgIGRjY3BfZmVhdF9mbmFtZShjdXItPmZlYXRfbnVtKSwKKwkJCQkgIGRjY3BfZmVhdF9zbmFtZVtjdXItPnN0YXRlXSk7CiAJCQlnb3RvIGFjdGl2YXRpb25fZmFpbGVkOwogCQl9CiAJCWZ2YWxzW2lkeF1bY3VyLT5pc19sb2NhbF0gPSAmY3VyLT52YWw7CkBAIC0xMTk5LDQzICsxMzY1LDMgQEAKIAlkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID0gTlVMTDsKIAlyZXR1cm4gLTE7CiB9Ci0KLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotY29uc3QgY2hhciAqZGNjcF9mZWF0X3R5cGVuYW1lKGNvbnN0IHU4IHR5cGUpCi17Ci0Jc3dpdGNoKHR5cGUpIHsKLQljYXNlIERDQ1BPX0NIQU5HRV9MOiAgcmV0dXJuKCJDaGFuZ2VMIik7Ci0JY2FzZSBEQ0NQT19DT05GSVJNX0w6IHJldHVybigiQ29uZmlybUwiKTsKLQljYXNlIERDQ1BPX0NIQU5HRV9SOiAgcmV0dXJuKCJDaGFuZ2VSIik7Ci0JY2FzZSBEQ0NQT19DT05GSVJNX1I6IHJldHVybigiQ29uZmlybVIiKTsKLQkvKiB0aGUgZm9sbG93aW5nIGNhc2UgbXVzdCBub3QgYXBwZWFyIGluIGZlYXR1cmUgbmVnb3RhdGlvbiAgKi8KLQlkZWZhdWx0OgkgICAgICBkY2NwX3ByX2RlYnVnKCJ1bmtub3duIHR5cGUgJWQgW0JVRyFdXG4iLCB0eXBlKTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIgKmRjY3BfZmVhdF9uYW1lKGNvbnN0IHU4IGZlYXQpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmZlYXR1cmVfbmFtZXNbXSA9IHsKLQkJW0RDQ1BGX1JFU0VSVkVEXQk9ICJSZXNlcnZlZCIsCi0JCVtEQ0NQRl9DQ0lEXQkJPSAiQ0NJRCIsCi0JCVtEQ0NQRl9TSE9SVF9TRVFOT1NdCT0gIkFsbG93IFNob3J0IFNlcW5vcyIsCi0JCVtEQ0NQRl9TRVFVRU5DRV9XSU5ET1ddCT0gIlNlcXVlbmNlIFdpbmRvdyIsCi0JCVtEQ0NQRl9FQ05fSU5DQVBBQkxFXQk9ICJFQ04gSW5jYXBhYmxlIiwKLQkJW0RDQ1BGX0FDS19SQVRJT10JPSAiQWNrIFJhdGlvIiwKLQkJW0RDQ1BGX1NFTkRfQUNLX1ZFQ1RPUl0JPSAiU2VuZCBBQ0sgVmVjdG9yIiwKLQkJW0RDQ1BGX1NFTkRfTkRQX0NPVU5UXQk9ICJTZW5kIE5EUCBDb3VudCIsCi0JCVtEQ0NQRl9NSU5fQ1NVTV9DT1ZFUl0JPSAiTWluLiBDc3VtIENvdmVyYWdlIiwKLQkJW0RDQ1BGX0RBVEFfQ0hFQ0tTVU1dCT0gIlNlbmQgRGF0YSBDaGVja3N1bSIsCi0JfTsKLQlpZiAoZmVhdCA+IERDQ1BGX0RBVEFfQ0hFQ0tTVU0gJiYgZmVhdCA8IERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDKQotCQlyZXR1cm4gZmVhdHVyZV9uYW1lc1tEQ0NQRl9SRVNFUlZFRF07Ci0KLQlpZiAoZmVhdCA9PSAgRENDUEZfU0VORF9MRVZfUkFURSkKLQkJcmV0dXJuICJTZW5kIExvc3MgRXZlbnQgUmF0ZSI7Ci0JaWYgKGZlYXQgPj0gRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCi0JCXJldHVybiAiQ0NJRC1zcGVjaWZpYyI7Ci0KLQlyZXR1cm4gZmVhdHVyZV9uYW1lc1tmZWF0XTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfSVBfRENDUF9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZmVhdC5oIGIvbmV0L2RjY3AvZmVhdC5oCmluZGV4IDliNDZlMmEuLmY5NjcyMTYgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2ZlYXQuaAorKysgYi9uZXQvZGNjcC9mZWF0LmgKQEAgLTEwMCwyNiArMTAwLDIxIEBACiAJdTgJdmFsOwogfTsKIAotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi1leHRlcm4gY29uc3QgY2hhciAqZGNjcF9mZWF0X3R5cGVuYW1lKGNvbnN0IHU4IHR5cGUpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9uYW1lKGNvbnN0IHU4IGZlYXQpOworLyoKKyAqIFN5c2N0bHMgdG8gc2VlZCBkZWZhdWx0cyBmb3IgZmVhdHVyZSBuZWdvdGlhdGlvbgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3c7CitleHRlcm4gaW50CSAgICAgc3lzY3RsX2RjY3BfcnhfY2NpZDsKK2V4dGVybiBpbnQJICAgICBzeXNjdGxfZGNjcF90eF9jY2lkOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9mZWF0X2RlYnVnKGNvbnN0IHU4IHR5cGUsIGNvbnN0IHU4IGZlYXQsIGNvbnN0IHU4IHZhbCkKLXsKLQlkY2NwX3ByX2RlYnVnKCIlcyglcyAoJWQpLCAlZClcbiIsIGRjY3BfZmVhdF90eXBlbmFtZSh0eXBlKSwKLQkJCQkJICAgZGNjcF9mZWF0X25hbWUoZmVhdCksIGZlYXQsIHZhbCk7Ci19Ci0jZWxzZQotI2RlZmluZSBkY2NwX2ZlYXRfZGVidWcodHlwZSwgZmVhdCwgdmFsKQotI2VuZGlmIC8qIENPTkZJR19JUF9EQ0NQX0RFQlVHICovCi0KK2V4dGVybiBpbnQgIGRjY3BfZmVhdF9pbml0KHN0cnVjdCBzb2NrICpzayk7CitleHRlcm4gdm9pZCBkY2NwX2ZlYXRfaW5pdGlhbGlzZV9zeXNjdGxzKHZvaWQpOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X3JlZ2lzdGVyX3NwKHN0cnVjdCBzb2NrICpzaywgdTggZmVhdCwgdTggaXNfbG9jYWwsCiAJCQkJICB1OCBjb25zdCAqbGlzdCwgdTggbGVuKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9yZWdpc3Rlcl9ubihzdHJ1Y3Qgc29jayAqc2ssIHU4IGZlYXQsIHU2NCB2YWwpOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X3BhcnNlX29wdGlvbnMoc3RydWN0IHNvY2sgKiwgc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICosCiAJCQkJICAgIHU4IG1hbmQsIHU4IG9wdCwgdTggZmVhdCwgdTggKnZhbCwgdTggbGVuKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9jbG9uZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgY29uc3QgKiwgc3RydWN0IGxpc3RfaGVhZCAqKTsKLWV4dGVybiBpbnQgIGRjY3BfZmVhdF9pbml0KHN0cnVjdCBzb2NrICpzayk7CiAKIC8qCiAgKiBFbmNvZGluZyB2YXJpYWJsZS1sZW5ndGggb3B0aW9ucyBhbmQgdGhlaXIgbWF4aW11bSBsZW5ndGguCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9taW5pc29ja3MuYyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCmluZGV4IDY4MjFhZTMuLjVjYTQ5Y2UgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL21pbmlzb2Nrcy5jCisrKyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCkBAIC00MiwxMSArNDIsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2RlYXRoX3Jvdyk7CiAKLXZvaWQgZGNjcF9taW5pc29ja19pbml0KHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKQotewotCWRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdzsKLX0KLQogdm9pZCBkY2NwX3RpbWVfd2FpdChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHRpbWVvKQogewogCXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3ID0gTlVMTDsKQEAgLTExMCw3ICsxMDUsNiBAQAogCQlzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXEgPSBkY2NwX3JzayhyZXEpOwogCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKm5ld2ljc2sgPSBpbmV0X2NzayhuZXdzayk7CiAJCXN0cnVjdCBkY2NwX3NvY2sgKm5ld2RwID0gZGNjcF9zayhuZXdzayk7Ci0JCXN0cnVjdCBkY2NwX21pbmlzb2NrICpuZXdkbXNrID0gZGNjcF9tc2sobmV3c2spOwogCiAJCW5ld2RwLT5kY2Nwc19yb2xlCSAgICA9IERDQ1BfUk9MRV9TRVJWRVI7CiAJCW5ld2RwLT5kY2Nwc19oY19yeF9hY2t2ZWMgICA9IE5VTEw7CkBAIC0xMjgsMTAgKzEyMiw2IEBACiAJCSAqICAgIEluaXRpYWxpemUgUy5HQVIgOj0gUy5JU1MKIAkJICogICAgU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llcwogCQkgKi8KLQotCQkvKiBTZWUgZGNjcF92NF9jb25uX3JlcXVlc3QgKi8KLQkJbmV3ZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHJlcS0+cmN2X3duZDsKLQogCQluZXdkcC0+ZGNjcHNfZ2FyID0gbmV3ZHAtPmRjY3BzX2lzcyA9IGRyZXEtPmRyZXFfaXNzOwogCQlkY2NwX3VwZGF0ZV9nc3MobmV3c2ssIGRyZXEtPmRyZXFfaXNzKTsKIApAQCAtMjkwLDcgKzI4MCw2IEBACiAJaW5ldF9yc2socmVxKS0+cm10X3BvcnQJICA9IGRjY3BfaGRyKHNrYiktPmRjY3BoX3Nwb3J0OwogCWluZXRfcnNrKHJlcSktPmxvY19wb3J0CSAgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9kcG9ydDsKIAlpbmV0X3JzayhyZXEpLT5hY2tlZAkgID0gMDsKLQlyZXEtPnJjdl93bmQJCSAgPSBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdzsKIAlkcmVxLT5kcmVxX3RpbWVzdGFtcF9lY2hvID0gMDsKIAogCS8qIGluaGVyaXQgZmVhdHVyZSBuZWdvdGlhdGlvbiBvcHRpb25zIGZyb20gbGlzdGVuaW5nIHNvY2tldCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3B0aW9ucy5jIGIvbmV0L2RjY3Avb3B0aW9ucy5jCmluZGV4IDdiMTE2NWMuLjFiMDhjYWUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL29wdGlvbnMuYworKysgYi9uZXQvZGNjcC9vcHRpb25zLmMKQEAgLTIzLDEwICsyMyw2IEBACiAjaW5jbHVkZSAiZGNjcC5oIgogI2luY2x1ZGUgImZlYXQuaCIKIAotaW50IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93ID0gRENDUEZfSU5JVElBTF9TRVFVRU5DRV9XSU5ET1c7Ci1pbnQgc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkCSAgICAgID0gRENDUEZfSU5JVElBTF9DQ0lEOwotaW50IHN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZAkgICAgICA9IERDQ1BGX0lOSVRJQUxfQ0NJRDsKLQogdTY0IGRjY3BfZGVjb2RlX3ZhbHVlX3Zhcihjb25zdCB1OCAqYmYsIGNvbnN0IHU4IGxlbikKIHsKIAl1NjQgdmFsdWUgPSAwOwpAQCAtNTAyLDEwICs0OTgsNiBAQAogCQkqdG8rKyA9ICp2YWw7CiAJaWYgKGxlbikKIAkJbWVtY3B5KHRvLCB2YWwsIGxlbik7Ci0KLQlkY2NwX3ByX2RlYnVnKCIlcyglcyAoJWQpLCAuLi4pLCBsZW5ndGggJWRcbiIsCi0JCSAgICAgIGRjY3BfZmVhdF90eXBlbmFtZSh0eXBlKSwKLQkJICAgICAgZGNjcF9mZWF0X25hbWUoZmVhdCksIGZlYXQsIGxlbik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL291dHB1dC5jIGIvbmV0L2RjY3Avb3V0cHV0LmMKaW5kZXggMjJhNjE4YS4uMzZiY2MwMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3V0cHV0LmMKKysrIGIvbmV0L2RjY3Avb3V0cHV0LmMKQEAgLTE2MSwyMSArMTYxLDI3IEBACiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJdTMyIGNjbXBzID0gZGNjcF9kZXRlcm1pbmVfY2NtcHMoZHApOwotCWludCBjdXJfbXBzID0gY2NtcHMgPyBtaW4ocG10dSwgY2NtcHMpIDogcG10dTsKKwl1MzIgY3VyX21wcyA9IGNjbXBzID8gbWluKHBtdHUsIGNjbXBzKSA6IHBtdHU7CiAKIAkvKiBBY2NvdW50IGZvciBoZWFkZXIgbGVuZ3RocyBhbmQgSVB2NC92NiBvcHRpb24gb3ZlcmhlYWQgKi8KIAljdXJfbXBzIC09IChpY3NrLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gKyBpY3NrLT5pY3NrX2V4dF9oZHJfbGVuICsKIAkJICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9leHQpKTsKIAogCS8qCi0JICogRklYTUU6IHRoaXMgc2hvdWxkIGNvbWUgZnJvbSB0aGUgQ0NJRCBpbmZyYXN0cnVjdHVyZSwgd2hlcmUsIHNheSwKLQkgKiBURlJDIHdpbGwgc2F5IGl0IHdhbnRzIFRJTUVTVEFNUFMsIEVMQVBTRUQgdGltZSwgZXRjLCBmb3Igbm93IGxldHMKLQkgKiBwdXQgYSByb3VnaCBlc3RpbWF0ZSBmb3IgTkRQICsgVElNRVNUQU1QICsgVElNRVNUQU1QX0VDSE8gKyBFTEFQU0VECi0JICogVElNRSArIFRGUkNfT1BUX0xPU1NfRVZFTlRfUkFURSArIFRGUkNfT1BUX1JFQ0VJVkVfUkFURSArIHBhZGRpbmcgdG8KLQkgKiBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgNAorCSAqIExlYXZlIGVub3VnaCBoZWFkcm9vbSBmb3IgY29tbW9uIERDQ1AgaGVhZGVyIG9wdGlvbnMuCisJICogVGhpcyBvbmx5IGNvbnNpZGVycyBvcHRpb25zIHdoaWNoIG1heSBhcHBlYXIgb24gRENDUC1EYXRhIHBhY2tldHMsIGFzCisJICogcGVyIHRhYmxlIDMgaW4gUkZDIDQzNDAsIDUuOC4gV2hlbiBydW5uaW5nIG91dCBvZiBzcGFjZSBmb3Igb3RoZXIKKwkgKiBvcHRpb25zIChlZy4gQWNrIFZlY3RvciB3aGljaCBjYW4gdGFrZSB1cCB0byAyNTUgYnl0ZXMpLCBpdCBpcyBiZXR0ZXIKKwkgKiB0byBzY2hlZHVsZSBhIHNlcGFyYXRlIEFjay4gVGh1cyB3ZSBsZWF2ZSBoZWFkcm9vbSBmb3IgdGhlIGZvbGxvd2luZzoKKwkgKiAgLSAxIGJ5dGUgZm9yIFNsb3cgUmVjZWl2ZXIgKDExLjYpCisJICogIC0gNiBieXRlcyBmb3IgVGltZXN0YW1wICgxMy4xKQorCSAqICAtIDEwIGJ5dGVzIGZvciBUaW1lc3RhbXAgRWNobyAoMTMuMykKKwkgKiAgLSA4IGJ5dGVzIGZvciBORFAgY291bnQgKDcuNywgd2hlbiBhY3RpdmF0ZWQpCisJICogIC0gNiBieXRlcyBmb3IgRGF0YSBDaGVja3N1bSAoOS4zKQorCSAqICAtICVEQ0NQQVZfTUlOX09QVExFTiBieXRlcyBmb3IgQWNrIFZlY3RvciBzaXplICgxMS40LCB3aGVuIGVuYWJsZWQpCiAJICovCi0KLQljdXJfbXBzIC09IHJvdW5kdXAoNSArIDYgKyAxMCArIDYgKyA2ICsgNiwgNCk7CisJY3VyX21wcyAtPSByb3VuZHVwKDEgKyA2ICsgMTAgKyBkcC0+ZGNjcHNfc2VuZF9uZHBfY291bnQgKiA4ICsgNiArCisJCQkgICAoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA/IERDQ1BBVl9NSU5fT1BUTEVOIDogMCksIDQpOwogCiAJLyogQW5kIHN0b3JlIGNhY2hlZCByZXN1bHRzICovCiAJaWNzay0+aWNza19wbXR1X2Nvb2tpZSA9IHBtdHU7CkBAIC0yNzAsNyArMjc2LDIwIEBACiAJCQljb25zdCBpbnQgbGVuID0gc2tiLT5sZW47CiAKIAkJCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9QQVJUT1BFTikgewotCQkJCS8qIFNlZSA4LjEuNS4gIEhhbmRzaGFrZSBDb21wbGV0aW9uICovCisJCQkJY29uc3QgdTMyIGN1cl9tcHMgPSBkcC0+ZGNjcHNfbXNzX2NhY2hlIC0gRENDUF9GRUFUTkVHX09WRVJIRUFEOworCQkJCS8qCisJCQkJICogU2VlIDguMS41IC0gSGFuZHNoYWtlIENvbXBsZXRpb24uCisJCQkJICoKKwkJCQkgKiBGb3Igcm9idXN0bmVzcyB3ZSByZXNlbmQgQ29uZmlybSBvcHRpb25zIHVudGlsIHRoZSBjbGllbnQgaGFzCisJCQkJICogZW50ZXJlZCBPUEVOLiBEdXJpbmcgdGhlIGluaXRpYWwgZmVhdHVyZSBuZWdvdGlhdGlvbiwgdGhlIE1QUworCQkJCSAqIGlzIHNtYWxsZXIgdGhhbiB1c3VhbCwgcmVkdWNlZCBieSB0aGUgQ2hhbmdlL0NvbmZpcm0gb3B0aW9ucy4KKwkJCQkgKi8KKwkJCQlpZiAoIWxpc3RfZW1wdHkoJmRwLT5kY2Nwc19mZWF0bmVnKSAmJiBsZW4gPiBjdXJfbXBzKSB7CisJCQkJCURDQ1BfV0FSTigiUGF5bG9hZCB0b28gbGFyZ2UgKCVkKSBmb3IgZmVhdG5lZy5cbiIsIGxlbik7CisJCQkJCWRjY3Bfc2VuZF9hY2soc2spOworCQkJCQlkY2NwX2ZlYXRfbGlzdF9wdXJnZSgmZHAtPmRjY3BzX2ZlYXRuZWcpOworCQkJCX0KKwogCQkJCWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzayk7CiAJCQkJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0ssCiAJCQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19ydG8sCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCA5NDViNGQ1Li4zMTRhMWI1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm90by5jCisrKyBiL25ldC9kY2NwL3Byb3RvLmMKQEAgLTE3NCw4ICsxNzQsNiBAQAogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCi0JZGNjcF9taW5pc29ja19pbml0KCZkcC0+ZGNjcHNfbWluaXNvY2spOwotCiAJaWNzay0+aWNza19ydG8JCT0gRENDUF9USU1FT1VUX0lOSVQ7CiAJaWNzay0+aWNza19zeW5fcmV0cmllcwk9IHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllczsKIAlzay0+c2tfc3RhdGUJCT0gRENDUF9DTE9TRUQ7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9zeXNjdGwuYyBiL25ldC9kY2NwL3N5c2N0bC5jCmluZGV4IDAxOGUyMTAuLmE1YTE4NTYgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3N5c2N0bC5jCisrKyBiL25ldC9kY2NwL3N5c2N0bC5jCkBAIC0xOCw1NSArMTgsNzIgQEAKICNlcnJvciBUaGlzIGZpbGUgc2hvdWxkIG5vdCBiZSBjb21waWxlZCB3aXRob3V0IENPTkZJR19TWVNDVEwgZGVmaW5lZAogI2VuZGlmCiAKKy8qIEJvdW5kYXJ5IHZhbHVlcyAqLworc3RhdGljIGludAkJemVybyAgICAgPSAwLAorCQkJdThfbWF4ICAgPSAweEZGOworc3RhdGljIHVuc2lnbmVkIGxvbmcJc2Vxd19taW4gPSAzMjsKKwogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGNjcF9kZWZhdWx0X3RhYmxlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAic2VxX3dpbmRvdyIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdywKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3cpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93LAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3cpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnNlcXdfbWluLAkJLyogUkZDIDQzNDAsIDcuNS4yICovCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyeF9jY2lkIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZCwKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkKSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3J4X2NjaWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3J4X2NjaWQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ1OF9tYXgsCQkvKiBSRkMgNDM0MCwgMTAuICovCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJ0eF9jY2lkIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZCwKLQkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkKSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3R4X2NjaWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3R4X2NjaWQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ1OF9tYXgsCQkvKiBSRkMgNDM0MCwgMTAuICovCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyZXF1ZXN0X3JldHJpZXMiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXMpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ1OF9tYXgsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyZXRyaWVzMSIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXRyaWVzMSwKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcmV0cmllczEpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ1OF9tYXgsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyZXRyaWVzMiIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXRyaWVzMiwKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcmV0cmllczIpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ1OF9tYXgsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJ0eF9xbGVuIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3R4X3FsZW4sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3R4X3FsZW4pLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAogCX0sCiAJewogCQkucHJvY25hbWUJPSAic3luY19yYXRlbGltaXQiLApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggY2YwZTE4NC4uOTY0N2Q5MSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC0xMjQ2LDExICsxMjQ2LDEyIEBACiAKIAljYXNlIFRJT0NJTlE6CiAJCWxvY2tfc29jayhzayk7Ci0JCWlmICgoc2tiID0gc2tiX3BlZWsoJnNjcC0+b3RoZXJfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJc2tiID0gc2tiX3BlZWsoJnNjcC0+b3RoZXJfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmIChza2IpIHsKIAkJCWFtb3VudCA9IHNrYi0+bGVuOwogCQl9IGVsc2UgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrLT5za19yZWNlaXZlX3F1ZXVlLm5leHQ7Ci0JCQlmb3IoOzspIHsKKwkJCXNrYiA9IHNrLT5za19yZWNlaXZlX3F1ZXVlLm5leHQ7CisJCQlmb3IgKDs7KSB7CiAJCQkJaWYgKHNrYiA9PQogCQkJCSAgICAoc3RydWN0IHNrX2J1ZmYgKikmc2stPnNrX3JlY2VpdmVfcXVldWUpCiAJCQkJCWJyZWFrOwpAQCAtMTU3OSwxNiArMTU4MCwxNiBAQAogCQlkZWZhdWx0OgogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAkJewotCQkJaW50IHZhbCwgbGVuOworCQkJaW50IHJldCwgbGVuOwogCiAJCQlpZihnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCXZhbCA9IG5mX2dldHNvY2tvcHQoc2ssIFBGX0RFQ25ldCwgb3B0bmFtZSwKKwkJCXJldCA9IG5mX2dldHNvY2tvcHQoc2ssIFBGX0RFQ25ldCwgb3B0bmFtZSwKIAkJCQkJCQlvcHR2YWwsICZsZW4pOwotCQkJaWYgKHZhbCA+PSAwKQotCQkJCXZhbCA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKLQkJCXJldHVybiB2YWw7CisJCQlpZiAocmV0ID49IDApCisJCQkJcmV0ID0gcHV0X3VzZXIobGVuLCBvcHRsZW4pOworCQkJcmV0dXJuIHJldDsKIAkJfQogI2VuZGlmCiAJCWNhc2UgRFNPX1NUUkVBTToKQEAgLTIwNzEsOCArMjA3Miw3IEBACiAJfQogb3V0OgogCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CiAKIAlyZWxlYXNlX3NvY2soc2spOwogCkBAIC0yMTEyLDkgKzIxMTIsOCBAQAogCiBleHRlcm4gaW50IGRuX3JvdXRlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZG5fZGl4X3BhY2tldF90eXBlID0gewotCS50eXBlID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRE5BX1JUKSwKLQkuZGV2ID0JCU5VTEwsCQkvKiBBbGwgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkbl9kaXhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9CQljcHVfdG9fYmUxNihFVEhfUF9ETkFfUlQpLAogCS5mdW5jID0JCWRuX3JvdXRlX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IGRhZjJiOTguLjFjNmE1YmIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtNjg0LDcgKzY4NCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKChkbl9kYiA9IGRldi0+ZG5fcHRyKSA9PSBOVUxMKSB7Ci0JCWludCBlcnI7CiAJCWRuX2RiID0gZG5fZGV2X2NyZWF0ZShkZXYsICZlcnIpOwogCQlpZiAoIWRuX2RiKQogCQkJcmV0dXJuIGVycjsKQEAgLTc2OSw3ICs3NjgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCAwLCBSVE5MR1JQX0RFQ25ldF9JRkFERFIsIE5VTEwsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCAwLCBSVE5MR1JQX0RFQ25ldF9JRkFERFIsIE5VTEwsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKCZpbml0X25ldCwgUlROTEdSUF9ERUNuZXRfSUZBRERSLCBlcnIpOwpAQCAtMTMyMiw2ICsxMzIyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgKmRuX2Rldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJmRldl9iYXNlX2xvY2spCiB7CiAJaW50IGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEzNjQsNiArMTM2NSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGRuX2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZkZXZfYmFzZV9sb2NrKQogewogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCBjNzU0NjcwLi4wY2M0Mzk0IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGRuX2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlQRl9ERUNuZXQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRE5BX1JUKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfRE5BX1JUKSwKIAkuZ2NfdGhyZXNoID0JCTEyOCwKIAkuZ2MgPQkJCWRuX2RzdF9nYywKIAkuY2hlY2sgPQkJZG5fZHN0X2NoZWNrLApAQCAtMzgwLDcgKzM4MCw2IEBACiAJdW5zaWduZWQgY2hhciAqcHRyOwogCV9fbGUxNiAqc3JjOwogCV9fbGUxNiAqZHN0OwotCV9fbGUxNiB0bXA7CiAKIAkvKiBBZGQgYmFjayBoZWFkZXJzICovCiAJc2tiX3B1c2goc2tiLCBza2ItPmRhdGEgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CkBAIC0zOTksMTAgKzM5OCw3IEBACiAJcHRyICs9IDI7CiAJKnB0ciA9IDA7IC8qIFplcm8gaG9wIGNvdW50ICovCiAKLQkvKiBTd2FwIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gKi8KLQl0bXAgID0gKnNyYzsKLQkqc3JjID0gKmRzdDsKLQkqZHN0ID0gdG1wOworCXN3YXAoKnNyYywgKmRzdCk7CiAKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09VVEdPSU5HOwogCWRuX3J0X2ZpbmlzaF9vdXRwdXQoc2tiLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fdGFibGUuYyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwppbmRleCA2OWFkOTI4Li42NzA1NGIwIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKKysrIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCkBAIC0zNzUsNyArMzc1LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgcGlkLCBSVE5MR1JQX0RFQ25ldF9ST1VURSwgbmxoLCBHRlBfS0VSTkVMKTsKKwlydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgcGlkLCBSVE5MR1JQX0RFQ25ldF9ST1VURSwgbmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycigmaW5pdF9uZXQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCmluZGV4IDk2NTM5N2EuLjViY2Q1OTIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKQEAgLTE3OSw3ICsxNzksNyBAQAogCX0KIAogCWlmICh3cml0ZSkgewotCQlpbnQgbGVuID0gKCpsZW5wIDwgRE5fQVNDQlVGX0xFTikgPyAqbGVucCA6IChETl9BU0NCVUZfTEVOLTEpOworCQlsZW4gPSAoKmxlbnAgPCBETl9BU0NCVUZfTEVOKSA/ICpsZW5wIDogKEROX0FTQ0JVRl9MRU4tMSk7CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGFkZHIsIGJ1ZmZlciwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnCmluZGV4IDQ5MjExYjMuLmM1MWI1NTQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvS2NvbmZpZworKysgYi9uZXQvZHNhL0tjb25maWcKQEAgLTQxLDEzICs0MSwxMyBAQAogCWRlZmF1bHQgbgogCiBjb25maWcgTkVUX0RTQV9NVjg4RTYxMzEKLQlib29sICJNYXJ2ZWxsIDg4RTYxMzEgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKKwlib29sICJNYXJ2ZWxsIDg4RTYwOTUvNjA5NUYvNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgogCXNlbGVjdCBORVRfRFNBX01WODhFNlhYWAogCXNlbGVjdCBORVRfRFNBX01WODhFNlhYWF9ORUVEX1BQVQogCXNlbGVjdCBORVRfRFNBX1RBR19EU0EKIAktLS1oZWxwLS0tCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjEzMSBldGhlcm5ldCBzd2l0Y2gKLQkgIGNoaXAuCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxCisJICBldGhlcm5ldCBzd2l0Y2ggY2hpcHMuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEyM182MV82NQogCWJvb2wgIk1hcnZlbGwgODhFNjEyMy82MTYxLzYxNjUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhLmMgYi9uZXQvZHNhL2RzYS5jCmluZGV4IDMzZTk5NDYuLjcxNDg5ZjYgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhLmMKKysrIGIvbmV0L2RzYS9kc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL2RzYS5jIC0gSGFyZHdhcmUgc3dpdGNoIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY3LDEyICs2NywxMyBAQAogCiAvKiBiYXNpYyBzd2l0Y2ggb3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaCAqCi1kc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpwZCwKLQkJIHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitkc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCwgaW50IGluZGV4LAorCQkgc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogeworCXN0cnVjdCBkc2FfY2hpcF9kYXRhICpwZCA9IGRzdC0+cGQtPmNoaXAgKyBpbmRleDsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgKmRydjsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJaW50IHJldDsKLQlzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgKmRydjsKIAljaGFyICpuYW1lOwogCWludCBpOwogCkBAIC04MSwxMSArODIsMTIgQEAKIAkgKi8KIAlkcnYgPSBkc2Ffc3dpdGNoX3Byb2JlKGJ1cywgcGQtPnN3X2FkZHIsICZuYW1lKTsKIAlpZiAoZHJ2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGRldGVjdCBhdHRhY2hlZCBzd2l0Y2hcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzWyVkXTogY291bGQgbm90IGRldGVjdCBhdHRhY2hlZCBzd2l0Y2hcbiIsCisJCSAgICAgICBkc3QtPm1hc3Rlcl9uZXRkZXYtPm5hbWUsIGluZGV4KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZXRlY3RlZCBhICVzIHN3aXRjaFxuIiwgZGV2LT5uYW1lLCBuYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlc1slZF06IGRldGVjdGVkIGEgJXMgc3dpdGNoXG4iLAorCQlkc3QtPm1hc3Rlcl9uZXRkZXYtPm5hbWUsIGluZGV4LCBuYW1lKTsKIAogCiAJLyoKQEAgLTk1LDE4ICs5NywxNiBAQAogCWlmIChkcyA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWRzLT5wZCA9IHBkOwotCWRzLT5tYXN0ZXJfbmV0ZGV2ID0gZGV2OwotCWRzLT5tYXN0ZXJfbWlpX2J1cyA9IGJ1czsKLQorCWRzLT5kc3QgPSBkc3Q7CisJZHMtPmluZGV4ID0gaW5kZXg7CisJZHMtPnBkID0gZHN0LT5wZC0+Y2hpcCArIGluZGV4OwogCWRzLT5kcnYgPSBkcnY7Ci0JZHMtPnRhZ19wcm90b2NvbCA9IGRydi0+dGFnX3Byb3RvY29sOworCWRzLT5tYXN0ZXJfbWlpX2J1cyA9IGJ1czsKIAogCiAJLyoKIAkgKiBWYWxpZGF0ZSBzdXBwbGllZCBzd2l0Y2ggY29uZmlndXJhdGlvbi4KIAkgKi8KLQlkcy0+Y3B1X3BvcnQgPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgRFNBX01BWF9QT1JUUzsgaSsrKSB7CiAJCWNoYXIgKm5hbWU7CiAKQEAgLTExNSwzMiArMTE1LDI4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIXN0cmNtcChuYW1lLCAiY3B1IikpIHsKLQkJCWlmIChkcy0+Y3B1X3BvcnQgIT0gLTEpIHsKKwkJCWlmIChkc3QtPmNwdV9zd2l0Y2ggIT0gLTEpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIm11bHRpcGxlIGNwdSBwb3J0cz8hXG4iKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJZHMtPmNwdV9wb3J0ID0gaTsKKwkJCWRzdC0+Y3B1X3N3aXRjaCA9IGluZGV4OworCQkJZHN0LT5jcHVfcG9ydCA9IGk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZHNhIikpIHsKKwkJCWRzLT5kc2FfcG9ydF9tYXNrIHw9IDEgPDwgaTsKIAkJfSBlbHNlIHsKLQkJCWRzLT52YWxpZF9wb3J0X21hc2sgfD0gMSA8PCBpOworCQkJZHMtPnBoeXNfcG9ydF9tYXNrIHw9IDEgPDwgaTsKIAkJfQogCX0KIAotCWlmIChkcy0+Y3B1X3BvcnQgPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJubyBjcHUgcG9ydD8hXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAKIAkvKgotCSAqIElmIHdlIHVzZSBhIHRhZ2dpbmcgZm9ybWF0IHRoYXQgZG9lc24ndCBoYXZlIGFuIGV0aGVydHlwZQotCSAqIGZpZWxkLCBtYWtlIHN1cmUgdGhhdCBhbGwgcGFja2V0cyBmcm9tIHRoaXMgcG9pbnQgb24gZ2V0Ci0JICogc2VudCB0byB0aGUgdGFnIGZvcm1hdCdzIHJlY2VpdmUgZnVuY3Rpb24uICAoV2hpY2ggd2lsbAotCSAqIGRpc2NhcmQgcmVjZWl2ZWQgcGFja2V0cyB1bnRpbCB3ZSBzZXQgZHMtPnBvcnRzW10gYmVsb3cuKQorCSAqIElmIHRoZSBDUFUgY29ubmVjdHMgdG8gdGhpcyBzd2l0Y2gsIHNldCB0aGUgc3dpdGNoIHRyZWUKKwkgKiB0YWdnaW5nIHByb3RvY29sIHRvIHRoZSBwcmVmZXJyZWQgdGFnZ2luZyBmb3JtYXQgb2YgdGhpcworCSAqIHN3aXRjaC4KIAkgKi8KLQl3bWIoKTsKLQlkZXYtPmRzYV9wdHIgPSAodm9pZCAqKWRzOworCWlmIChkcy0+ZHN0LT5jcHVfc3dpdGNoID09IGluZGV4KQorCQlkcy0+ZHN0LT50YWdfcHJvdG9jb2wgPSBkcnYtPnRhZ19wcm90b2NvbDsKIAogCiAJLyoKQEAgLTE1MCw3ICsxNDYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCXJldCA9IGRydi0+c2V0X2FkZHIoZHMsIGRldi0+ZGV2X2FkZHIpOworCXJldCA9IGRydi0+c2V0X2FkZHIoZHMsIGRzdC0+bWFzdGVyX25ldGRldi0+ZGV2X2FkZHIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMTY5LDE4ICsxNjUsMTggQEAKIAkvKgogCSAqIENyZWF0ZSBuZXR3b3JrIGRldmljZXMgZm9yIHBoeXNpY2FsIHN3aXRjaCBwb3J0cy4KIAkgKi8KLQl3bWIoKTsKIAlmb3IgKGkgPSAwOyBpIDwgRFNBX01BWF9QT1JUUzsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXY7CiAKLQkJaWYgKCEoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGkpKSkKKwkJaWYgKCEoZHMtPnBoeXNfcG9ydF9tYXNrICYgKDEgPDwgaSkpKQogCQkJY29udGludWU7CiAKIAkJc2xhdmVfZGV2ID0gZHNhX3NsYXZlX2NyZWF0ZShkcywgcGFyZW50LCBpLCBwZC0+cG9ydF9uYW1lc1tpXSk7CiAJCWlmIChzbGF2ZV9kZXYgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgY3JlYXRlIGRzYSBzbGF2ZSAiCi0JCQkgICAgICAgImRldmljZSBmb3IgcG9ydCAlZCglcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBpLCBwZC0+cG9ydF9uYW1lc1tpXSk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzWyVkXTogY2FuJ3QgY3JlYXRlIGRzYSAiCisJCQkgICAgICAgInNsYXZlIGRldmljZSBmb3IgcG9ydCAlZCglcylcbiIsCisJCQkgICAgICAgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5uYW1lLAorCQkJICAgICAgIGluZGV4LCBpLCBwZC0+cG9ydF9uYW1lc1tpXSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xOTIsNyArMTg4LDYgQEAKIG91dF9mcmVlOgogCW1kaW9idXNfZnJlZShkcy0+c2xhdmVfbWlpX2J1cyk7CiBvdXQ6Ci0JZGV2LT5kc2FfcHRyID0gTlVMTDsKIAlrZnJlZShkcyk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KQEAgLTIxMiwzNSArMjA3LDQyIEBACiAgKi8KIGJvb2wgZHNhX3VzZXNfZHNhX3RhZ3Modm9pZCAqZHNhX3B0cikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzYV9wdHI7CiAKLQlyZXR1cm4gISEoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKTsKKwlyZXR1cm4gISEoZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSk7CiB9CiAKIGJvb2wgZHNhX3VzZXNfdHJhaWxlcl90YWdzKHZvaWQgKmRzYV9wdHIpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkc2FfcHRyOwogCi0JcmV0dXJuICEhKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfVFJBSUxFUikpOworCXJldHVybiAhIShkc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9UUkFJTEVSKSk7CiB9CiAKIAogLyogbGluayBwb2xsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBkc2FfbGlua19wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp1Z2x5KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3Q7CisJaW50IGk7CiAKLQlkcyA9IGNvbnRhaW5lcl9vZih1Z2x5LCBzdHJ1Y3QgZHNhX3N3aXRjaCwgbGlua19wb2xsX3dvcmspOworCWRzdCA9IGNvbnRhaW5lcl9vZih1Z2x5LCBzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlLCBsaW5rX3BvbGxfd29yayk7CiAKLQlkcy0+ZHJ2LT5wb2xsX2xpbmsoZHMpOwotCW1vZF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHN0LT5wZC0+bnJfY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc3QtPmRzW2ldOworCisJCWlmIChkcyAhPSBOVUxMICYmIGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQorCQkJZHMtPmRydi0+cG9sbF9saW5rKGRzKTsKKwl9CisKKwltb2RfdGltZXIoJmRzdC0+bGlua19wb2xsX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWikpOwogfQogCi1zdGF0aWMgdm9pZCBkc2FfbGlua19wb2xsX3RpbWVyKHVuc2lnbmVkIGxvbmcgX2RzKQorc3RhdGljIHZvaWQgZHNhX2xpbmtfcG9sbF90aW1lcih1bnNpZ25lZCBsb25nIF9kc3QpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gKHZvaWQgKilfZHM7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gKHZvaWQgKilfZHN0OwogCi0Jc2NoZWR1bGVfd29yaygmZHMtPmxpbmtfcG9sbF93b3JrKTsKKwlzY2hlZHVsZV93b3JrKCZkc3QtPmxpbmtfcG9sbF93b3JrKTsKIH0KIAogCkBAIC0zMDMsMTggKzMwNSwxNCBAQAogCXN0YXRpYyBpbnQgZHNhX3ZlcnNpb25fcHJpbnRlZDsKIAlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwotCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3Q7CisJaW50IGk7CiAKIAlpZiAoIWRzYV92ZXJzaW9uX3ByaW50ZWQrKykKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlICIKIAkJCSJkcml2ZXIgdmVyc2lvbiAlc1xuIiwgZHNhX2RyaXZlcl92ZXJzaW9uKTsKIAotCWlmIChwZCA9PSBOVUxMIHx8IHBkLT5taWlfYnVzID09IE5VTEwgfHwgcGQtPm5ldGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1cyA9IGRldl90b19taWlfYnVzKHBkLT5taWlfYnVzKTsKLQlpZiAoYnVzID09IE5VTEwpCisJaWYgKHBkID09IE5VTEwgfHwgcGQtPm5ldGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRldiA9IGRldl90b19uZXRfZGV2aWNlKHBkLT5uZXRkZXYpOwpAQCAtMzI2LDM2ICszMjQsNzkgQEAKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQogCi0JZHMgPSBkc2Ffc3dpdGNoX3NldHVwKCZwZGV2LT5kZXYsIHBkLCBidXMsIGRldik7Ci0JaWYgKElTX0VSUihkcykpIHsKKwlkc3QgPSBremFsbG9jKHNpemVvZigqZHN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRzdCA9PSBOVUxMKSB7CiAJCWRldl9wdXQoZGV2KTsKLQkJcmV0dXJuIFBUUl9FUlIoZHMpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpIHsKLQkJSU5JVF9XT1JLKCZkcy0+bGlua19wb2xsX3dvcmssIGRzYV9saW5rX3BvbGxfd29yayk7Ci0JCWluaXRfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIpOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkczsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5mdW5jdGlvbiA9IGRzYV9saW5rX3BvbGxfdGltZXI7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKTsKLQkJYWRkX3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc3QpOworCisJZHN0LT5wZCA9IHBkOworCWRzdC0+bWFzdGVyX25ldGRldiA9IGRldjsKKwlkc3QtPmNwdV9zd2l0Y2ggPSAtMTsKKwlkc3QtPmNwdV9wb3J0ID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGQtPm5yX2NoaXBzOyBpKyspIHsKKwkJc3RydWN0IG1paV9idXMgKmJ1czsKKwkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCisJCWJ1cyA9IGRldl90b19taWlfYnVzKHBkLT5jaGlwW2ldLm1paV9idXMpOworCQlpZiAoYnVzID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBubyBtaWkgYnVzIGZvdW5kIGZvciAiCisJCQkJImRzYSBzd2l0Y2hcbiIsIGRldi0+bmFtZSwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRzID0gZHNhX3N3aXRjaF9zZXR1cChkc3QsIGksICZwZGV2LT5kZXYsIGJ1cyk7CisJCWlmIChJU19FUlIoZHMpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzWyVkXTogY291bGRuJ3QgY3JlYXRlIGRzYSBzd2l0Y2ggIgorCQkJCSJpbnN0YW5jZSAoZXJyb3IgJWxkKVxuIiwgZGV2LT5uYW1lLCBpLAorCQkJCVBUUl9FUlIoZHMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHN0LT5kc1tpXSA9IGRzOworCQlpZiAoZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCisJCQlkc3QtPmxpbmtfcG9sbF9uZWVkZWQgPSAxOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzKTsKKwkvKgorCSAqIElmIHdlIHVzZSBhIHRhZ2dpbmcgZm9ybWF0IHRoYXQgZG9lc24ndCBoYXZlIGFuIGV0aGVydHlwZQorCSAqIGZpZWxkLCBtYWtlIHN1cmUgdGhhdCBhbGwgcGFja2V0cyBmcm9tIHRoaXMgcG9pbnQgb24gZ2V0CisJICogc2VudCB0byB0aGUgdGFnIGZvcm1hdCdzIHJlY2VpdmUgZnVuY3Rpb24uCisJICovCisJd21iKCk7CisJZGV2LT5kc2FfcHRyID0gKHZvaWQgKilkc3Q7CisKKwlpZiAoZHN0LT5saW5rX3BvbGxfbmVlZGVkKSB7CisJCUlOSVRfV09SSygmZHN0LT5saW5rX3BvbGxfd29yaywgZHNhX2xpbmtfcG9sbF93b3JrKTsKKwkJaW5pdF90aW1lcigmZHN0LT5saW5rX3BvbGxfdGltZXIpOworCQlkc3QtPmxpbmtfcG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZHN0OworCQlkc3QtPmxpbmtfcG9sbF90aW1lci5mdW5jdGlvbiA9IGRzYV9saW5rX3BvbGxfdGltZXI7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWik7CisJCWFkZF90aW1lcigmZHN0LT5saW5rX3BvbGxfdGltZXIpOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKIAotCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKLQkJZGVsX3RpbWVyX3N5bmMoJmRzLT5saW5rX3BvbGxfdGltZXIpOworCWlmIChkc3QtPmxpbmtfcG9sbF9uZWVkZWQpCisJCWRlbF90aW1lcl9zeW5jKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JZHNhX3N3aXRjaF9kZXN0cm95KGRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHN0LT5wZC0+bnJfY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc3QtPmRzW2ldOworCisJCWlmIChkcyAhPSBOVUxMKQorCQkJZHNhX3N3aXRjaF9kZXN0cm95KGRzKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhX3ByaXYuaCBiL25ldC9kc2EvZHNhX3ByaXYuaAppbmRleCA3MDYzMzc4Li40MTA1NWYzIDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYV9wcml2LmgKKysrIGIvbmV0L2RzYS9kc2FfcHJpdi5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvZHNhX3ByaXYuaCAtIEhhcmR3YXJlIHN3aXRjaCBoYW5kbGluZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSw0MiArMTksMTA3IEBACiAKIHN0cnVjdCBkc2Ffc3dpdGNoIHsKIAkvKgotCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIHBsYXRmb3JtIGRldmljZSB0aGF0IG93bnMKLQkgKiB0aGlzIGRzYSBzd2l0Y2ggaW5zdGFuY2UuCisJICogUGFyZW50IHN3aXRjaCB0cmVlLCBhbmQgc3dpdGNoIGluZGV4LgogCSAqLwotCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YQkqcGQ7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZQkqZHN0OworCWludAkJCWluZGV4OwogCiAJLyoKLQkgKiBSZWZlcmVuY2VzIHRvIG5ldHdvcmsgZGV2aWNlIGFuZCBtaWkgYnVzIHRvIHVzZS4KKwkgKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoaXMgc3dpdGNoLgogCSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlCQkqbWFzdGVyX25ldGRldjsKLQlzdHJ1Y3QgbWlpX2J1cwkJCSptYXN0ZXJfbWlpX2J1czsKKwlzdHJ1Y3QgZHNhX2NoaXBfZGF0YQkqcGQ7CiAKIAkvKgotCSAqIFRoZSB1c2VkIHN3aXRjaCBkcml2ZXIgYW5kIGZyYW1lIHRhZ2dpbmcgdHlwZS4KKwkgKiBUaGUgdXNlZCBzd2l0Y2ggZHJpdmVyLgogCSAqLwogCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlcgkqZHJ2OwotCV9fYmUxNgkJCQl0YWdfcHJvdG9jb2w7CisKKwkvKgorCSAqIFJlZmVyZW5jZSB0byBtaWkgYnVzIHRvIHVzZS4KKwkgKi8KKwlzdHJ1Y3QgbWlpX2J1cwkJKm1hc3Rlcl9taWlfYnVzOwogCiAJLyoKIAkgKiBTbGF2ZSBtaWlfYnVzIGFuZCBkZXZpY2VzIGZvciB0aGUgaW5kaXZpZHVhbCBwb3J0cy4KIAkgKi8KLQlpbnQJCQkJY3B1X3BvcnQ7Ci0JdTMyCQkJCXZhbGlkX3BvcnRfbWFzazsKLQlzdHJ1Y3QgbWlpX2J1cwkJCSpzbGF2ZV9taWlfYnVzOwotCXN0cnVjdCBuZXRfZGV2aWNlCQkqcG9ydHNbRFNBX01BWF9QT1JUU107CisJdTMyCQkJZHNhX3BvcnRfbWFzazsKKwl1MzIJCQlwaHlzX3BvcnRfbWFzazsKKwlzdHJ1Y3QgbWlpX2J1cwkJKnNsYXZlX21paV9idXM7CisJc3RydWN0IG5ldF9kZXZpY2UJKnBvcnRzW0RTQV9NQVhfUE9SVFNdOworfTsKKworc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSB7CisJLyoKKwkgKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCBvd25zCisJICogdGhpcyBkc2Egc3dpdGNoIHRyZWUgaW5zdGFuY2UuCisJICovCisJc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhCSpwZDsKKworCS8qCisJICogUmVmZXJlbmNlIHRvIG5ldHdvcmsgZGV2aWNlIHRvIHVzZSwgYW5kIHdoaWNoIHRhZ2dpbmcKKwkgKiBwcm90b2NvbCB0byB1c2UuCisJICovCisJc3RydWN0IG5ldF9kZXZpY2UJKm1hc3Rlcl9uZXRkZXY7CisJX19iZTE2CQkJdGFnX3Byb3RvY29sOworCisJLyoKKwkgKiBUaGUgc3dpdGNoIGFuZCBwb3J0IHRvIHdoaWNoIHRoZSBDUFUgaXMgYXR0YWNoZWQuCisJICovCisJczgJCQljcHVfc3dpdGNoOworCXM4CQkJY3B1X3BvcnQ7CiAKIAkvKgogCSAqIExpbmsgc3RhdGUgcG9sbGluZy4KIAkgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCWxpbmtfcG9sbF93b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0CQlsaW5rX3BvbGxfdGltZXI7CisJaW50CQkJbGlua19wb2xsX25lZWRlZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbGlua19wb2xsX3dvcms7CisJc3RydWN0IHRpbWVyX2xpc3QJbGlua19wb2xsX3RpbWVyOworCisJLyoKKwkgKiBEYXRhIGZvciB0aGUgaW5kaXZpZHVhbCBzd2l0Y2ggY2hpcHMuCisJICovCisJc3RydWN0IGRzYV9zd2l0Y2gJKmRzW0RTQV9NQVhfU1dJVENIRVNdOwogfTsKIAorc3RhdGljIGlubGluZSBib29sIGRzYV9pc19jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQoreworCXJldHVybiAhIShkcy0+aW5kZXggPT0gZHMtPmRzdC0+Y3B1X3N3aXRjaCAmJiBwID09IGRzLT5kc3QtPmNwdV9wb3J0KTsKK30KKworc3RhdGljIGlubGluZSB1OCBkc2FfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCit7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtPmRzdDsKKworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgcm9vdCBzd2l0Y2ggKGkuZS4gdGhlIHN3aXRjaCB0aGF0IGNvbm5lY3RzCisJICogdG8gdGhlIENQVSksIHJldHVybiB0aGUgY3B1IHBvcnQgbnVtYmVyIG9uIHRoaXMgc3dpdGNoLgorCSAqIEVsc2UgcmV0dXJuIHRoZSAoRFNBKSBwb3J0IG51bWJlciB0aGF0IGNvbm5lY3RzIHRvIHRoZQorCSAqIHN3aXRjaCB0aGF0IGlzIG9uZSBob3AgY2xvc2VyIHRvIHRoZSBjcHUuCisJICovCisJaWYgKGRzdC0+Y3B1X3N3aXRjaCA9PSBkcy0+aW5kZXgpCisJCXJldHVybiBkc3QtPmNwdV9wb3J0OworCWVsc2UKKwkJcmV0dXJuIGRzLT5wZC0+cnRhYmxlW2RzdC0+Y3B1X3N3aXRjaF07Cit9CisKIHN0cnVjdCBkc2Ffc2xhdmVfcHJpdiB7CisJLyoKKwkgKiBUaGUgbGludXggbmV0d29yayBpbnRlcmZhY2UgY29ycmVzcG9uZGluZyB0byB0aGlzCisJICogc3dpdGNoIHBvcnQuCisJICovCiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKworCS8qCisJICogV2hpY2ggc3dpdGNoIHRoaXMgcG9ydCBpcyBhIHBhcnQgb2YsIGFuZCB0aGUgcG9ydCBpbmRleAorCSAqIGZvciB0aGlzIHBvcnQuCisJICovCiAJc3RydWN0IGRzYV9zd2l0Y2gJKnBhcmVudDsKLQlpbnQJCQlwb3J0OworCXU4CQkJcG9ydDsKKworCS8qCisJICogVGhlIHBoeWxpYiBwaHlfZGV2aWNlIHBvaW50ZXIgZm9yIHRoZSBQSFkgY29ubmVjdGVkCisJICogdG8gdGhpcyBwb3J0LgorCSAqLwogCXN0cnVjdCBwaHlfZGV2aWNlCSpwaHk7CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL212ODhlNjA2MC5jIGIvbmV0L2RzYS9tdjg4ZTYwNjAuYwppbmRleCA4NTA4MWFlLi44MzI3N2Y0IDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNjA2MC5jCisrKyBiL25ldC9kc2EvbXY4OGU2MDYwLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9tdjg4ZTYwNjAuYyAtIERyaXZlciBmb3IgTWFydmVsbCA4OGU2MDYwIHN3aXRjaCBjaGlwcwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04MSw3ICs4MSw3IEBACiAJLyoKIAkgKiBSZXNldCB0aGUgc3dpdGNoLgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDBBLCAweGExMzApOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDBhLCAweGExMzApOwogCiAJLyoKIAkgKiBXYWl0IHVwIHRvIG9uZSBzZWNvbmQgZm9yIHJlc2V0IHRvIGNvbXBsZXRlLgpAQCAtMTI4LDcgKzEyOCw3IEBACiAJICogc3RhdGUgdG8gRm9yd2FyZGluZy4gIEFkZGl0aW9uYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVCiAJICogcG9ydCwgZW5hYmxlIEluZ3Jlc3MgYW5kIEVncmVzcyBUcmFpbGVyIHRhZ2dpbmcgbW9kZS4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNCwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4NDEwMyA6IDB4MDAwMyk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIGRzYV9pc19jcHVfcG9ydChkcywgcCkgPyAgMHg0MTAzIDogMHgwMDAzKTsKIAogCS8qCiAJICogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCkBAIC0xMzgsOSArMTM4LDkgQEAKIAkgKi8KIAlSRUdfV1JJVEUoYWRkciwgMHgwNiwKIAkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkJZHMtPnZhbGlkX3BvcnRfbWFzayA6Ci0JCQkJKDEgPDwgZHMtPmNwdV9wb3J0KSkpOworCQkJIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8KKwkJCQlkcy0+cGh5c19wb3J0X21hc2sgOgorCQkJCSgxIDw8IGRzLT5kc3QtPmNwdV9wb3J0KSkpOwogCiAJLyoKIAkgKiBQb3J0IEFzc29jaWF0aW9uIFZlY3Rvcjogd2hlbiBsZWFybmluZyBzb3VyY2UgYWRkcmVzc2VzCmRpZmYgLS1naXQgYS9uZXQvZHNhL212ODhlNjEyM182MV82NS5jIGIvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYwppbmRleCBlYzhjNmEwLi41MmZhYWEyIDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCisrKyBiL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYyAtIE1hcnZlbGwgODhlNjEyMy82MTYxLzYxNjUgc3dpdGNoIGNoaXAgc3VwcG9ydAotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC05OCwxNyArOTgsMTcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qCi0JICogQ29uZmlndXJlIHRoZSBjcHUgcG9ydCwgYW5kIGNvbmZpZ3VyZSB0aGUgY3B1IHBvcnQgYXMgdGhlCi0JICogcG9ydCB0byB3aGljaCBpbmdyZXNzIGFuZCBlZ3Jlc3MgbW9uaXRvciBmcmFtZXMgYXJlIHRvIGJlCi0JICogc2VudC4KKwkgKiBDb25maWd1cmUgdGhlIHVwc3RyZWFtIHBvcnQsIGFuZCBjb25maWd1cmUgdGhlIHVwc3RyZWFtCisJICogcG9ydCBhcyB0aGUgcG9ydCB0byB3aGljaCBpbmdyZXNzIGFuZCBlZ3Jlc3MgbW9uaXRvciBmcmFtZXMKKwkgKiBhcmUgdG8gYmUgc2VudC4KIAkgKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzLT5jcHVfcG9ydCAqIDB4MTExMCkpOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHNhX3Vwc3RyZWFtX3BvcnQoZHMpICogMHgxMTEwKSk7CiAKIAkvKgogCSAqIERpc2FibGUgcmVtb3RlIG1hbmFnZW1lbnQgZm9yIG5vdywgYW5kIHNldCB0aGUgc3dpdGNoJ3MKLQkgKiBEU0EgZGV2aWNlIG51bWJlciB0byB6ZXJvLgorCSAqIERTQSBkZXZpY2UgbnVtYmVyLgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFjLCAweDAwMDApOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFjLCBkcy0+aW5kZXggJiAweDFmKTsKIAogCS8qCiAJICogU2VuZCBhbGwgZnJhbWVzIHdpdGggZGVzdGluYXRpb24gYWRkcmVzc2VzIG1hdGNoaW5nCkBAIC0xMzMsMTAgKzEzMywxNyBAQAogCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNSwgMHgwMGZmKTsKIAogCS8qCi0JICogTWFwIGFsbCBEU0EgZGV2aWNlIElEcyB0byB0aGUgQ1BVIHBvcnQuCisJICogUHJvZ3JhbSB0aGUgRFNBIHJvdXRpbmcgdGFibGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0JCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBkcy0+Y3B1X3BvcnQpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWludCBuZXh0aG9wOworCisJCW5leHRob3AgPSAweDFmOworCQlpZiAoaSAhPSBkcy0+aW5kZXggJiYgaSA8IGRzLT5kc3QtPnBkLT5ucl9jaGlwcykKKwkJCW5leHRob3AgPSBkcy0+cGQtPnJ0YWJsZVtpXSAmIDB4MWY7CisKKwkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IG5leHRob3ApOworCX0KIAogCS8qCiAJICogQ2xlYXIgYWxsIHRydW5rIG1hc2tzLgpAQCAtMTc2LDEyICsxODMsMTggQEAKIHN0YXRpYyBpbnQgbXY4OGU2MTIzXzYxXzY1X3NldHVwX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKIHsKIAlpbnQgYWRkciA9IFJFR19QT1JUKHApOworCXUxNiB2YWw7CiAKIAkvKgogCSAqIE1BQyBGb3JjaW5nIHJlZ2lzdGVyOiBkb24ndCBmb3JjZSBsaW5rLCBzcGVlZCwgZHVwbGV4Ci0JICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcy4KKwkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzIG9uIHBoeXNpY2FsCisJICogcG9ydHMsIGJ1dCBmb3JjZSB0aGUgQ1BVIHBvcnQgYW5kIGFsbCBEU0EgcG9ydHMgdG8gMTAwMCBNYi9zCisJICogZnVsbCBkdXBsZXguCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgfHwgZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAzZSk7CisJZWxzZQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKIAogCS8qCiAJICogRG8gbm90IGxpbWl0IHRoZSBwZXJpb2Qgb2YgdGltZSB0aGF0IHRoaXMgcG9ydCBjYW4gYmUKQEAgLTE5MiwzNyArMjA1LDUwIEBACiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbDogZGlzYWJsZSBEcm9wLW9uLVVubG9jaywgZGlzYWJsZSBEcm9wLW9uLUxvY2ssCi0JICogY29uZmlndXJlIHRoZSByZXF1ZXN0ZWQgKERTQS9FRFNBKSB0YWdnaW5nIG1vZGUgaWYgdGhpcyBpcwotCSAqIHRoZSBDUFUgcG9ydCwgZGlzYWJsZSBIZWFkZXIgbW9kZSwgZW5hYmxlIElHTVAvTUxEIHNub29waW5nLAotCSAqIGRpc2FibGUgVkxBTiB0dW5uZWxpbmcsIGRldGVybWluZSBwcmlvcml0eSBieSBsb29raW5nIGF0Ci0JICogODAyLjFwIGFuZCBJUCBwcmlvcml0eSBmaWVsZHMgKElQIHByaW8gaGFzIHByZWNlZGVuY2UpLCBhbmQKLQkgKiBzZXQgU1RQIHN0YXRlIHRvIEZvcndhcmRpbmcuICBGaW5hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUKLQkgKiBwb3J0LCBhZGRpdGlvbmFsbHkgZW5hYmxlIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0IGFuZAotCSAqIG11bHRpY2FzdCBhZGRyZXNzZXMuCisJICogZGlzYWJsZSBIZWFkZXIgbW9kZSwgZW5hYmxlIElHTVAvTUxEIHNub29waW5nLCBkaXNhYmxlIFZMQU4KKwkgKiB0dW5uZWxpbmcsIGRldGVybWluZSBwcmlvcml0eSBieSBsb29raW5nIGF0IDgwMi4xcCBhbmQgSVAKKwkgKiBwcmlvcml0eSBmaWVsZHMgKElQIHByaW8gaGFzIHByZWNlZGVuY2UpLCBhbmQgc2V0IFNUUCBzdGF0ZQorCSAqIHRvIEZvcndhcmRpbmcuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSBDUFUgbGluaywgdXNlIERTQSBvciBFRFNBIHRhZ2dpbmcgZGVwZW5kaW5nCisJICogb24gd2hpY2ggdGFnZ2luZyBtb2RlIHdhcyBjb25maWd1cmVkLgorCSAqCisJICogSWYgdGhpcyBpcyBhIGxpbmsgdG8gYW5vdGhlciBzd2l0Y2gsIHVzZSBEU0EgdGFnZ2luZyBtb2RlLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQorCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0cyBhbmQgbXVsdGljYXN0cy4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNCwKLQkJCShwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJIChkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpID8KLQkJCSAgMHgwNTNmIDogMHgzNzNmIDoKLQkJCSAweDA0MzMpOworCXZhbCA9IDB4MDQzMzsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSkgeworCQlpZiAoZHMtPmRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0VEU0EpKQorCQkJdmFsIHw9IDB4MzMwMDsKKwkJZWxzZQorCQkJdmFsIHw9IDB4MDEwMDsKKwl9CisJaWYgKGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCXZhbCB8PSAweDAxMDA7CisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQl2YWwgfD0gMHgwMDBjOworCVJFR19XUklURShhZGRyLCAweDA0LCB2YWwpOwogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2wgMTogZGlzYWJsZSB0cnVua2luZy4gIEFsc28sIGlmIHRoaXMgaXMgdGhlCiAJICogQ1BVIHBvcnQsIGVuYWJsZSBsZWFybiBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoaXMgcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNSwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4ODAwMCA6IDB4MDAwMCk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDUsIGRzYV9pc19jcHVfcG9ydChkcywgcCkgPyAweDgwMDAgOiAweDAwMDApOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKIAkgKiBkYXRhYmFzZSwgYWxsb3cgdGhlIENQVSBwb3J0IHRvIHRhbGsgdG8gZWFjaCBvZiB0aGUgJ3JlYWwnCiAJICogcG9ydHMsIGFuZCBhbGxvdyBlYWNoIG9mIHRoZSAncmVhbCcgcG9ydHMgdG8gb25seSB0YWxrIHRvCi0JICogdGhlIENQVSBwb3J0LgorCSAqIHRoZSB1cHN0cmVhbSBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA2LAotCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJdmFsID0gKHAgJiAweGYpIDw8IDEyOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKQorCQl2YWwgfD0gZHMtPnBoeXNfcG9ydF9tYXNrOworCWVsc2UKKwkJdmFsIHw9IDEgPDwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCVJFR19XUklURShhZGRyLCAweDA2LCB2YWwpOwogCiAJLyoKIAkgKiBEZWZhdWx0IFZMQU4gSUQgYW5kIHByaW9yaXR5OiBkb24ndCBzZXQgYSBkZWZhdWx0IFZMQU4KQEAgLTM5NCw3ICs0MjAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyIG12ODhlNjEyM182MV82NV9zd2l0Y2hfZHJpdmVyID0gewotCS50YWdfcHJvdG9jb2wJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9FRFNBKSwKKwkudGFnX3Byb3RvY29sCQk9IGNwdV90b19iZTE2KEVUSF9QX0VEU0EpLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBtdjg4ZTZ4eHhfcHJpdl9zdGF0ZSksCiAJLnByb2JlCQkJPSBtdjg4ZTYxMjNfNjFfNjVfcHJvYmUsCiAJLnNldHVwCQkJPSBtdjg4ZTYxMjNfNjFfNjVfc2V0dXAsCmRpZmYgLS1naXQgYS9uZXQvZHNhL212ODhlNjEzMS5jIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwppbmRleCAzNzRkNDZhLi5iYjJiNDFiIDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNjEzMS5jCisrKyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogbmV0L2RzYS9tdjg4ZTYxMzEuYyAtIE1hcnZlbGwgODhlNjEzMSBzd2l0Y2ggY2hpcCBzdXBwb3J0Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBuZXQvZHNhL212ODhlNjEzMS5jIC0gTWFydmVsbCA4OGU2MDk1LzYwOTVmLzYxMzEgc3dpdGNoIGNoaXAgc3VwcG9ydAorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMSw2ICsyMSw4IEBACiAJcmV0ID0gX19tdjg4ZTZ4eHhfcmVnX3JlYWQoYnVzLCBzd19hZGRyLCBSRUdfUE9SVCgwKSwgMHgwMyk7CiAJaWYgKHJldCA+PSAwKSB7CiAJCXJldCAmPSAweGZmZjA7CisJCWlmIChyZXQgPT0gMHgwOTUwKQorCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYwOTUvODhFNjA5NUYiOwogCQlpZiAocmV0ID09IDB4MTA2MCkKIAkJCXJldHVybiAiTWFydmVsbCA4OEU2MTMxIjsKIAl9CkBAIC0zNiw3ICszOCw3IEBACiAJLyoKIAkgKiBTZXQgYWxsIHBvcnRzIHRvIHRoZSBkaXNhYmxlZCBzdGF0ZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKIAkJcmV0ID0gUkVHX1JFQUQoUkVHX1BPUlQoaSksIDB4MDQpOwogCQlSRUdfV1JJVEUoUkVHX1BPUlQoaSksIDB4MDQsIHJldCAmIDB4ZmZmYyk7CiAJfQpAQCAtMTAwLDE3ICsxMDIsMTcgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxOSwgMHg4MTAwKTsKIAogCS8qCi0JICogRGlzYWJsZSBBUlAgbWlycm9yaW5nLCBhbmQgY29uZmlndXJlIHRoZSBjcHUgcG9ydCBhcyB0aGUKLQkgKiBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8gYmUKLQkgKiBzZW50LgorCSAqIERpc2FibGUgQVJQIG1pcnJvcmluZywgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCBhcworCSAqIHRoZSBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8KKwkgKiBiZSBzZW50LgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHMtPmNwdV9wb3J0ICogMHgxMTAwKSB8IDB4MDBmMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkc2FfdXBzdHJlYW1fcG9ydChkcykgKiAweDExMDApIHwgMHgwMGYwKTsKIAogCS8qCiAJICogRGlzYWJsZSBjYXNjYWRlIHBvcnQgZnVuY3Rpb25hbGl0eSwgYW5kIHNldCB0aGUgc3dpdGNoJ3MKLQkgKiBEU0EgZGV2aWNlIG51bWJlciB0byB6ZXJvLgorCSAqIERTQSBkZXZpY2UgbnVtYmVyLgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFjLCAweGUwMDApOworCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFjLCAweGUwMDAgfCAoZHMtPmluZGV4ICYgMHgxZikpOwogCiAJLyoKIAkgKiBTZW5kIGFsbCBmcmFtZXMgd2l0aCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgbWF0Y2hpbmcKQEAgLTEyNywxNiArMTI5LDIzIEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA1LCAweDAwZmYpOwogCiAJLyoKLQkgKiBNYXAgYWxsIERTQSBkZXZpY2UgSURzIHRvIHRoZSBDUFUgcG9ydC4KKwkgKiBQcm9ncmFtIHRoZSBEU0Egcm91dGluZyB0YWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IGRzLT5jcHVfcG9ydCk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaW50IG5leHRob3A7CisKKwkJbmV4dGhvcCA9IDB4MWY7CisJCWlmIChpICE9IGRzLT5pbmRleCAmJiBpIDwgZHMtPmRzdC0+cGQtPm5yX2NoaXBzKQorCQkJbmV4dGhvcCA9IGRzLT5wZC0+cnRhYmxlW2ldICYgMHgxZjsKKworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgbmV4dGhvcCk7CisJfQogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFza3MuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA3LCAweDgwMDAgfCAoaSA8PCAxMikgfCAweGZmKTsKKwkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA3LCAweDgwMDAgfCAoaSA8PCAxMikgfCAweDdmZik7CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXBwaW5ncy4KQEAgLTE1NiwxMiArMTY1LDE4IEBACiBzdGF0aWMgaW50IG12ODhlNjEzMV9zZXR1cF9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCiB7CiAJaW50IGFkZHIgPSBSRUdfUE9SVChwKTsKKwl1MTYgdmFsOwogCiAJLyoKIAkgKiBNQUMgRm9yY2luZyByZWdpc3RlcjogZG9uJ3QgZm9yY2UgbGluaywgc3BlZWQsIGR1cGxleAotCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMuCisJICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcyBvbiBwaHlzaWNhbAorCSAqIHBvcnRzLCBidXQgZm9yY2UgdGhlIENQVSBwb3J0IGFuZCBhbGwgRFNBIHBvcnRzIHRvIDEwMDAgTWIvcworCSAqIGZ1bGwgZHVwbGV4LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApIHx8IGRzLT5kc2FfcG9ydF9tYXNrICYgKDEgPDwgcCkpCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2UpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbDogZGlzYWJsZSBDb3JlIFRhZywgZGlzYWJsZSBEcm9wLW9uLUxvY2ssCkBAIC0xNjksMjkgKzE4NCw0MCBAQAogCSAqIGVuYWJsZSBJR01QL01MRCBzbm9vcCwgZGlzYWJsZSBEb3VibGVUYWcsIGRpc2FibGUgVkxBTgogCSAqIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQgODAyLjFwIGFuZAogCSAqIElQIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZCBzZXQgU1RQCi0JICogc3RhdGUgdG8gRm9yd2FyZGluZy4gIEZpbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVSBwb3J0LAotCSAqIGFkZGl0aW9uYWxseSBlbmFibGUgRFNBIHRhZ2dpbmcgYW5kIGZvcndhcmRpbmcgb2YgdW5rbm93bgotCSAqIHVuaWNhc3QgYWRkcmVzc2VzLgorCSAqIHN0YXRlIHRvIEZvcndhcmRpbmcuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzLCBhbmQgZW5hYmxlIERTQSB0YWdnaW5nCisJICogbW9kZS4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIGxpbmsgdG8gYW5vdGhlciBzd2l0Y2gsIHVzZSBEU0EgdGFnZ2luZworCSAqIG1vZGUsIGJ1dCBkbyBub3QgZW5hYmxlIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0cy4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNCwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4MDUzNyA6IDB4MDQzMyk7CisJdmFsID0gMHgwNDMzOworCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwkJdmFsIHw9IDB4MDEwNDsKKwlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJdmFsIHw9IDB4MDEwMDsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sIDE6IGRpc2FibGUgdHJ1bmtpbmcuICBBbHNvLCBpZiB0aGlzIGlzIHRoZQogCSAqIENQVSBwb3J0LCBlbmFibGUgbGVhcm4gbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGlzIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDUsIChwID09IGRzLT5jcHVfcG9ydCkgPyAweDgwMDAgOiAweDAwMDApOworCVJFR19XUklURShhZGRyLCAweDA1LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gMHg4MDAwIDogMHgwMDAwKTsKIAogCS8qCiAJICogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCiAJICogZGF0YWJhc2UsIGFsbG93IHRoZSBDUFUgcG9ydCB0byB0YWxrIHRvIGVhY2ggb2YgdGhlICdyZWFsJwogCSAqIHBvcnRzLCBhbmQgYWxsb3cgZWFjaCBvZiB0aGUgJ3JlYWwnIHBvcnRzIHRvIG9ubHkgdGFsayB0bwotCSAqIHRoZSBDUFUgcG9ydC4KKwkgKiB0aGUgdXBzdHJlYW0gcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNiwKLQkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkJZHMtPnZhbGlkX3BvcnRfbWFzayA6Ci0JCQkJKDEgPDwgZHMtPmNwdV9wb3J0KSkpOworCXZhbCA9IChwICYgMHhmKSA8PCAxMjsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSkKKwkJdmFsIHw9IGRzLT5waHlzX3BvcnRfbWFzazsKKwllbHNlCisJCXZhbCB8PSAxIDw8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNiwgdmFsKTsKIAogCS8qCiAJICogRGVmYXVsdCBWTEFOIElEIGFuZCBwcmlvcml0eTogZG9uJ3Qgc2V0IGEgZGVmYXVsdCBWTEFOCkBAIC0yMDcsMTMgKzIzMywxNSBAQAogCSAqIHVudGFnZ2VkIGZyYW1lcyBvbiB0aGlzIHBvcnQsIGRvIGEgZGVzdGluYXRpb24gYWRkcmVzcwogCSAqIGxvb2t1cCBvbiByZWNlaXZlZCBwYWNrZXRzIGFzIHVzdWFsLCBkb24ndCBzZW5kIGEgY29weQogCSAqIG9mIGFsbCB0cmFuc21pdHRlZC9yZWNlaXZlZCBmcmFtZXMgb24gdGhpcyBwb3J0IHRvIHRoZQotCSAqIENQVSwgYW5kIGNvbmZpZ3VyZSB0aGUgQ1BVIHBvcnQgbnVtYmVyLiAgQWxzbywgaWYgdGhpcwotCSAqIGlzIHRoZSBDUFUgcG9ydCwgZW5hYmxlIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QKLQkgKiBhZGRyZXNzZXMuCisJICogQ1BVLCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0IG51bWJlci4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gbXVsdGljYXN0IGFkZHJlc3Nlcy4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwOCwKLQkJCSgocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHgwMGMwIDogMHgwMDgwKSB8Ci0JCQkgZHMtPmNwdV9wb3J0KTsKKwl2YWwgPSAweDAwODAgfCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQl2YWwgfD0gMHgwMDQwOworCVJFR19XUklURShhZGRyLCAweDA4LCB2YWwpOwogCiAJLyoKIAkgKiBSYXRlIENvbnRyb2w6IGRpc2FibGUgaW5ncmVzcyByYXRlIGxpbWl0aW5nLgpAQCAtMjY4LDcgKzI5Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKIAkJcmV0ID0gbXY4OGU2MTMxX3NldHVwX3BvcnQoZHMsIGkpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CkBAIC0yNzksNyArMzA3LDcgQEAKIAogc3RhdGljIGludCBtdjg4ZTYxMzFfcG9ydF90b19waHlfYWRkcihpbnQgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSAwICYmIHBvcnQgIT0gMyAmJiBwb3J0IDw9IDcpCisJaWYgKHBvcnQgPj0gMCAmJiBwb3J0IDw9IDExKQogCQlyZXR1cm4gcG9ydDsKIAlyZXR1cm4gLTE7CiB9CkBAIC0zNTMsNyArMzgxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciBtdjg4ZTYxMzFfc3dpdGNoX2RyaXZlciA9IHsKLQkudGFnX3Byb3RvY29sCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRFNBKSwKKwkudGFnX3Byb3RvY29sCQk9IGNwdV90b19iZTE2KEVUSF9QX0RTQSksCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IG12ODhlNnh4eF9wcml2X3N0YXRlKSwKIAkucHJvYmUJCQk9IG12ODhlNjEzMV9wcm9iZSwKIAkuc2V0dXAJCQk9IG12ODhlNjEzMV9zZXR1cCwKZGlmZiAtLWdpdCBhL25ldC9kc2Evc2xhdmUuYyBiL25ldC9kc2Evc2xhdmUuYwppbmRleCBhNjhmZDc5Li5lZDEzMTE4IDEwMDY0NAotLS0gYS9uZXQvZHNhL3NsYXZlLmMKKysrIGIvbmV0L2RzYS9zbGF2ZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2Evc2xhdmUuYyAtIFNsYXZlIGRldmljZSBoYW5kbGluZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSw3ICsxOSw3IEBACiB7CiAJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gYnVzLT5wcml2OwogCi0JaWYgKGRzLT52YWxpZF9wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKKwlpZiAoZHMtPnBoeXNfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCiAJCXJldHVybiBkcy0+ZHJ2LT5waHlfcmVhZChkcywgYWRkciwgcmVnKTsKIAogCXJldHVybiAweGZmZmY7CkBAIC0yOSw3ICsyOSw3IEBACiB7CiAJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gYnVzLT5wcml2OwogCi0JaWYgKGRzLT52YWxpZF9wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKKwlpZiAoZHMtPnBoeXNfcG9ydF9tYXNrICYgKDEgPDwgYWRkcikpCiAJCXJldHVybiBkcy0+ZHJ2LT5waHlfd3JpdGUoZHMsIGFkZHIsIHJlZywgdmFsKTsKIAogCXJldHVybiAwOwpAQCAtNDMsMTUgKzQzLDI0IEBACiAJZHMtPnNsYXZlX21paV9idXMtPndyaXRlID0gZHNhX3NsYXZlX3BoeV93cml0ZTsKIAlzbnByaW50Zihkcy0+c2xhdmVfbWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVzOiUuMngiLAogCQkJZHMtPm1hc3Rlcl9taWlfYnVzLT5pZCwgZHMtPnBkLT5zd19hZGRyKTsKLQlkcy0+c2xhdmVfbWlpX2J1cy0+cGFyZW50ID0gJihkcy0+bWFzdGVyX21paV9idXMtPmRldik7CisJZHMtPnNsYXZlX21paV9idXMtPnBhcmVudCA9ICZkcy0+bWFzdGVyX21paV9idXMtPmRldjsKIH0KIAogCiAvKiBzbGF2ZSBkZXZpY2UgaGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZHNhX3NsYXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2LT5pZmxpbmsgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldi0+aWZpbmRleDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRzYV9zbGF2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlpbnQgZXJyOwogCiAJaWYgKCEobWFzdGVyLT5mbGFncyAmIElGRl9VUCkpCkBAIC04OSw3ICs5OCw3IEBACiBzdGF0aWMgaW50IGRzYV9zbGF2ZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAKIAlkZXZfbWNfdW5zeW5jKG1hc3RlciwgZGV2KTsKIAlkZXZfdW5pY2FzdF91bnN5bmMobWFzdGVyLCBkZXYpOwpAQCAtMTA3LDcgKzExNiw3IEBACiBzdGF0aWMgdm9pZCBkc2Ffc2xhdmVfY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAogCWlmIChjaGFuZ2UgJiBJRkZfQUxMTVVMVEkpCiAJCWRldl9zZXRfYWxsbXVsdGkobWFzdGVyLCBkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJID8gMSA6IC0xKTsKQEAgLTExOCw3ICsxMjcsNyBAQAogc3RhdGljIHZvaWQgZHNhX3NsYXZlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAogCWRldl9tY19zeW5jKG1hc3RlciwgZGV2KTsKIAlkZXZfdW5pY2FzdF9zeW5jKG1hc3RlciwgZGV2KTsKQEAgLTEyNyw3ICsxMzYsNyBAQAogc3RhdGljIGludCBkc2Ffc2xhdmVfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmEpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBhOwogCWludCBlcnI7CiAKQEAgLTI4OCw2ICsyOTcsNyBAQAogCiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX0RTQQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkc2FfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gZHNhX3NsYXZlX2luaXQsCiAJLm5kb19vcGVuCSAJPSBkc2Ffc2xhdmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBkc2FfeG1pdCwKQEAgLTMwMCw2ICszMTAsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX0VEU0EKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWRzYV9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBkc2Ffc2xhdmVfaW5pdCwKIAkubmRvX29wZW4JIAk9IGRzYV9zbGF2ZV9vcGVuLAogCS5uZG9fc3RvcAkJPSBkc2Ffc2xhdmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGVkc2FfeG1pdCwKQEAgLTMxMiw2ICszMjMsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX1RSQUlMRVIKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHJhaWxlcl9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBkc2Ffc2xhdmVfaW5pdCwKIAkubmRvX29wZW4JIAk9IGRzYV9zbGF2ZV9vcGVuLAogCS5uZG9fc3RvcAkJPSBkc2Ffc2xhdmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IHRyYWlsZXJfeG1pdCwKQEAgLTMyOCw3ICszNDAsNyBAQAogZHNhX3NsYXZlX2NyZWF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJIGludCBwb3J0LCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBkcy0+bWFzdGVyX25ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gZHMtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2OwogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcDsKIAlpbnQgcmV0OwpAQCAtMzQzLDcgKzM1NSw3IEBACiAJbWVtY3B5KHNsYXZlX2Rldi0+ZGV2X2FkZHIsIG1hc3Rlci0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAlzbGF2ZV9kZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CiAKLQlzd2l0Y2ggKGRzLT50YWdfcHJvdG9jb2wpIHsKKwlzd2l0Y2ggKGRzLT5kc3QtPnRhZ19wcm90b2NvbCkgewogI2lmZGVmIENPTkZJR19ORVRfRFNBX1RBR19EU0EKIAljYXNlIGh0b25zKEVUSF9QX0RTQSk6CiAJCXNsYXZlX2Rldi0+bmV0ZGV2X29wcyA9ICZkc2FfbmV0ZGV2X29wczsKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2RzYS5jIGIvbmV0L2RzYS90YWdfZHNhLmMKaW5kZXggZjk5YTAxOS4uOGZhMjViYSAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfZHNhLmMKKysrIGIvbmV0L2RzYS90YWdfZHNhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS90YWdfZHNhLmMgLSAoTm9uLWV0aGVydHlwZSkgRFNBIHRhZ2dpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzYsNyArMzYsNyBAQAogCQkgKiBDb25zdHJ1Y3QgdGFnZ2VkIEZST01fQ1BVIERTQSB0YWcgZnJvbSA4MDIuMXEgdGFnLgogCQkgKi8KIAkJZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSArIDIgKiBFVEhfQUxFTjsKLQkJZHNhX2hlYWRlclswXSA9IDB4NjA7CisJCWRzYV9oZWFkZXJbMF0gPSAweDYwIHwgcC0+cGFyZW50LT5pbmRleDsKIAkJZHNhX2hlYWRlclsxXSA9IHAtPnBvcnQgPDwgMzsKIAogCQkvKgpAQCAtNTcsNyArNTcsNyBAQAogCQkgKiBDb25zdHJ1Y3QgdW50YWdnZWQgRlJPTV9DUFUgRFNBIHRhZy4KIAkJICovCiAJCWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyICogRVRIX0FMRU47Ci0JCWRzYV9oZWFkZXJbMF0gPSAweDQwOworCQlkc2FfaGVhZGVyWzBdID0gMHg0MCB8IHAtPnBhcmVudC0+aW5kZXg7CiAJCWRzYV9oZWFkZXJbMV0gPSBwLT5wb3J0IDw8IDM7CiAJCWRzYV9oZWFkZXJbMl0gPSAweDAwOwogCQlkc2FfaGVhZGVyWzNdID0gMHgwMDsKQEAgLTY1LDcgKzY1LDcgQEAKIAogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9EU0EpOwogCi0Jc2tiLT5kZXYgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc2tiLT5kZXYgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlkZXZfcXVldWVfeG1pdChza2IpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTc4LDExICs3OCwxMyBAQAogc3RhdGljIGludCBkc2FfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAl1OCAqZHNhX2hlYWRlcjsKKwlpbnQgc291cmNlX2RldmljZTsKIAlpbnQgc291cmNlX3BvcnQ7CiAKLQlpZiAodW5saWtlbHkoZHMgPT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KGRzdCA9PSBOVUxMKSkKIAkJZ290byBvdXRfZHJvcDsKIAogCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CkBAIC05OCwxNiArMTAwLDI0IEBACiAJZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSAtIDI7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQsIGFuZAotCSAqIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgaXMgemVyby4KKwkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELgogCSAqLwotCWlmICgoZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4MDAgJiYgKGRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweGMwKQorCWlmICgoZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4MDAgJiYgKGRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweGMwKQogCQlnb3RvIG91dF9kcm9wOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IHRoZSBzb3VyY2UgcG9ydCBpcyBhIHJlZ2lzdGVyZWQgRFNBIHBvcnQuCisJICogRGV0ZXJtaW5lIHNvdXJjZSBkZXZpY2UgYW5kIHBvcnQuCiAJICovCisJc291cmNlX2RldmljZSA9IGRzYV9oZWFkZXJbMF0gJiAweDFmOwogCXNvdXJjZV9wb3J0ID0gKGRzYV9oZWFkZXJbMV0gPj4gMykgJiAweDFmOworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGV4aXN0cyBhbmQgdGhhdCB0aGUgc291cmNlCisJICogcG9ydCBpcyBhIHJlZ2lzdGVyZWQgRFNBIHBvcnQuCisJICovCisJaWYgKHNvdXJjZV9kZXZpY2UgPj0gZHN0LT5wZC0+bnJfY2hpcHMpCisJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzW3NvdXJjZV9kZXZpY2VdOwogCWlmIChzb3VyY2VfcG9ydCA+PSBEU0FfTUFYX1BPUlRTIHx8IGRzLT5wb3J0c1tzb3VyY2VfcG9ydF0gPT0gTlVMTCkKIAkJZ290byBvdXRfZHJvcDsKIApAQCAtMTc1LDggKzE4NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZHNhX3BhY2tldF90eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9EU0EpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkc2FfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0RTQSksCiAJLmZ1bmMJPSBkc2FfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfZWRzYS5jIGIvbmV0L2RzYS90YWdfZWRzYS5jCmluZGV4IDMyOGVjOTUuLjgxNTYwN2IgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2Vkc2EuYworKysgYi9uZXQvZHNhL3RhZ19lZHNhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS90YWdfZWRzYS5jIC0gRXRoZXJ0eXBlIERTQSB0YWdnaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJZWRzYV9oZWFkZXJbMV0gPSBFVEhfUF9FRFNBICYgMHhmZjsKIAkJZWRzYV9oZWFkZXJbMl0gPSAweDAwOwogCQllZHNhX2hlYWRlclszXSA9IDB4MDA7Ci0JCWVkc2FfaGVhZGVyWzRdID0gMHg2MDsKKwkJZWRzYV9oZWFkZXJbNF0gPSAweDYwIHwgcC0+cGFyZW50LT5pbmRleDsKIAkJZWRzYV9oZWFkZXJbNV0gPSBwLT5wb3J0IDw8IDM7CiAKIAkJLyoKQEAgLTcwLDcgKzcwLDcgQEAKIAkJZWRzYV9oZWFkZXJbMV0gPSBFVEhfUF9FRFNBICYgMHhmZjsKIAkJZWRzYV9oZWFkZXJbMl0gPSAweDAwOwogCQllZHNhX2hlYWRlclszXSA9IDB4MDA7Ci0JCWVkc2FfaGVhZGVyWzRdID0gMHg0MDsKKwkJZWRzYV9oZWFkZXJbNF0gPSAweDQwIHwgcC0+cGFyZW50LT5pbmRleDsKIAkJZWRzYV9oZWFkZXJbNV0gPSBwLT5wb3J0IDw8IDM7CiAJCWVkc2FfaGVhZGVyWzZdID0gMHgwMDsKIAkJZWRzYV9oZWFkZXJbN10gPSAweDAwOwpAQCAtNzgsNyArNzgsNyBAQAogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0VEU0EpOwogCi0Jc2tiLT5kZXYgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc2tiLT5kZXYgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAlkZXZfcXVldWVfeG1pdChza2IpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTkxLDExICs5MSwxMyBAQAogc3RhdGljIGludCBlZHNhX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCXU4ICplZHNhX2hlYWRlcjsKKwlpbnQgc291cmNlX2RldmljZTsKIAlpbnQgc291cmNlX3BvcnQ7CiAKLQlpZiAodW5saWtlbHkoZHMgPT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KGRzdCA9PSBOVUxMKSkKIAkJZ290byBvdXRfZHJvcDsKIAogCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CkBAIC0xMTEsMTYgKzExMywyNCBAQAogCWVkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMjsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRCwgYW5kCi0JICogdGhhdCB0aGUgc291cmNlIGRldmljZSBpcyB6ZXJvLgorCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQuCiAJICovCi0JaWYgKChlZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4MDAgJiYgKGVkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHhjMCkKKwlpZiAoKGVkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHgwMCAmJiAoZWRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweGMwKQogCQlnb3RvIG91dF9kcm9wOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IHRoZSBzb3VyY2UgcG9ydCBpcyBhIHJlZ2lzdGVyZWQgRFNBIHBvcnQuCisJICogRGV0ZXJtaW5lIHNvdXJjZSBkZXZpY2UgYW5kIHBvcnQuCiAJICovCisJc291cmNlX2RldmljZSA9IGVkc2FfaGVhZGVyWzBdICYgMHgxZjsKIAlzb3VyY2VfcG9ydCA9IChlZHNhX2hlYWRlclsxXSA+PiAzKSAmIDB4MWY7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgZXhpc3RzIGFuZCB0aGF0IHRoZSBzb3VyY2UKKwkgKiBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKi8KKwlpZiAoc291cmNlX2RldmljZSA+PSBkc3QtPnBkLT5ucl9jaGlwcykKKwkJZ290byBvdXRfZHJvcDsKKwlkcyA9IGRzdC0+ZHNbc291cmNlX2RldmljZV07CiAJaWYgKHNvdXJjZV9wb3J0ID49IERTQV9NQVhfUE9SVFMgfHwgZHMtPnBvcnRzW3NvdXJjZV9wb3J0XSA9PSBOVUxMKQogCQlnb3RvIG91dF9kcm9wOwogCkBAIC0xOTQsOCArMjA0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlZHNhX3BhY2tldF90eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9FRFNBKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWRzYV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfRURTQSksCiAJLmZ1bmMJPSBlZHNhX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX3RyYWlsZXIuYyBiL25ldC9kc2EvdGFnX3RyYWlsZXIuYwppbmRleCBiNTkxMzI4Li4xYzNlMzBjIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ190cmFpbGVyLmMKKysrIGIvbmV0L2RzYS90YWdfdHJhaWxlci5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvdGFnX3RyYWlsZXIuYyAtIFRyYWlsZXIgdGFnIGZvcm1hdCBoYW5kbGluZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC01OSw3ICs1OSw3IEBACiAKIAluc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1RSQUlMRVIpOwogCi0JbnNrYi0+ZGV2ID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCW5za2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KG5za2IpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTY4LDEyICs2OCwxNCBAQAogc3RhdGljIGludCB0cmFpbGVyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCXU4ICp0cmFpbGVyOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1swXTsKIAogCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQpAQCAtMTExLDggKzExMyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdHJhaWxlcl9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfVFJBSUxFUiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHRyYWlsZXJfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX1RSQUlMRVIpLAogCS5mdW5jCT0gdHJhaWxlcl9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCA4Nzg5ZDJiLi42ZjQ3OWZhIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTExMDIsOCArMTEwMiw4IEBACiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVjb25ldF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VDT05FVCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVjb25ldF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JCWNwdV90b19iZTE2KEVUSF9QX0VDT05FVCksCiAJLmZ1bmMgPQkJZWNvbmV0X3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnCmluZGV4IDY5MTI2OGYuLmIyY2Y5MWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L0tjb25maWcKKysrIGIvbmV0L2lwdjQvS2NvbmZpZwpAQCAtMzUsNyArMzUsNyBAQAogCiAJICBhdCBib290IHRpbWUgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuCiAKLQkgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSB3aWxsIGFsc28gZ2V0IHRoZSBycF9maWx0ZXIsIHdoaWNoCisJICBJZiB5b3UgdHVybiBvbiBJUCBmb3J3YXJkaW5nLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBycF9maWx0ZXIsIHdoaWNoCiAJICBhdXRvbWF0aWNhbGx5IHJlamVjdHMgaW5jb21pbmcgcGFja2V0cyBpZiB0aGUgcm91dGluZyB0YWJsZSBlbnRyeQogCSAgZm9yIHRoZWlyIHNvdXJjZSBhZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHRoZXkncmUKIAkgIGFycml2aW5nIG9uLiBUaGlzIGhhcyBzZWN1cml0eSBhZHZhbnRhZ2VzIGJlY2F1c2UgaXQgcHJldmVudHMgdGhlCkBAIC00NiwxMiArNDYsMTYgQEAKIAkgIHJwX2ZpbHRlciBvbiB1c2U6CiAKIAkgIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLzxkZXZpY2U+L3JwX2ZpbHRlcgotCSAgb3IKKwkgICBhbmQKIAkgIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2FsbC9ycF9maWx0ZXIKIAorCSAgTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQgaW4gc3RhcnR1cCBzY3JpcHRzLgorCSAgRm9yIGRldGFpbHMgYWJvdXQgcnBfZmlsdGVyIHN0cmljdCBhbmQgbG9vc2UgbW9kZSByZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dD4uCisKIAkgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS4KIAotY2hvaWNlIAorY2hvaWNlCiAJcHJvbXB0ICJDaG9vc2UgSVA6IEZJQiBsb29rdXAgYWxnb3JpdGhtIChjaG9vc2UgRklCX0hBU0ggaWYgdW5zdXJlKSIKIAlkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUgogCWRlZmF1bHQgQVNLX0lQX0ZJQl9IQVNICkBAIC01OSwyNyArNjMsMjkgQEAKIGNvbmZpZyBBU0tfSVBfRklCX0hBU0gKIAlib29sICJGSUJfSEFTSCIKIAktLS1oZWxwLS0tCi0JQ3VycmVudCBGSUIgaXMgdmVyeSBwcm92ZW4gYW5kIGdvb2QgZW5vdWdoIGZvciBtb3N0IHVzZXJzLgorCSAgQ3VycmVudCBGSUIgaXMgdmVyeSBwcm92ZW4gYW5kIGdvb2QgZW5vdWdoIGZvciBtb3N0IHVzZXJzLgogCiBjb25maWcgSVBfRklCX1RSSUUKIAlib29sICJGSUJfVFJJRSIKIAktLS1oZWxwLS0tCi0JVXNlIG5ldyBleHBlcmltZW50YWwgTEMtdHJpZSBhcyBGSUIgbG9va3VwIGFsZ29yaXRobS4gCi0gICAgICAgIFRoaXMgaW1wcm92ZXMgbG9va3VwIHBlcmZvcm1hbmNlIGlmIHlvdSBoYXZlIGEgbGFyZ2UKLQludW1iZXIgb2Ygcm91dGVzLgorCSAgVXNlIG5ldyBleHBlcmltZW50YWwgTEMtdHJpZSBhcyBGSUIgbG9va3VwIGFsZ29yaXRobS4KKwkgIFRoaXMgaW1wcm92ZXMgbG9va3VwIHBlcmZvcm1hbmNlIGlmIHlvdSBoYXZlIGEgbGFyZ2UKKwkgIG51bWJlciBvZiByb3V0ZXMuCiAKLQlMQy10cmllIGlzIGEgbG9uZ2VzdCBtYXRjaGluZyBwcmVmaXggbG9va3VwIGFsZ29yaXRobSB3aGljaAotCXBlcmZvcm1zIGJldHRlciB0aGFuIEZJQl9IQVNIIGZvciBsYXJnZSByb3V0aW5nIHRhYmxlcy4KLQlCdXQsIGl0IGNvbnN1bWVzIG1vcmUgbWVtb3J5IGFuZCBpcyBtb3JlIGNvbXBsZXguCi0JCi0JTEMtdHJpZSBpcyBkZXNjcmliZWQgaW46Ci0JCi0gCUlQLWFkZHJlc3MgbG9va3VwIHVzaW5nIExDLXRyaWVzLiBTdGVmYW4gTmlsc3NvbiBhbmQgR3VubmFyIEthcmxzc29uCi0gCUlFRUUgSm91cm5hbCBvbiBTZWxlY3RlZCBBcmVhcyBpbiBDb21tdW5pY2F0aW9ucywgMTcoNik6MTA4My0xMDkyLCBKdW5lIDE5OTkKLQlBbiBleHBlcmltZW50YWwgc3R1ZHkgb2YgY29tcHJlc3Npb24gbWV0aG9kcyBmb3IgZHluYW1pYyB0cmllcwotIAlTdGVmYW4gTmlsc3NvbiBhbmQgTWF0dGkgVGlra2FuZW4uIEFsZ29yaXRobWljYSwgMzMoMSk6MTktMzMsIDIwMDIuCi0gCWh0dHA6Ly93d3cubmFkYS5rdGguc2UvfnNuaWxzc29uL3B1YmxpYy9wYXBlcnMvZHludHJpZTIvCi0gICAgICAgCisJICBMQy10cmllIGlzIGEgbG9uZ2VzdCBtYXRjaGluZyBwcmVmaXggbG9va3VwIGFsZ29yaXRobSB3aGljaAorCSAgcGVyZm9ybXMgYmV0dGVyIHRoYW4gRklCX0hBU0ggZm9yIGxhcmdlIHJvdXRpbmcgdGFibGVzLgorCSAgQnV0LCBpdCBjb25zdW1lcyBtb3JlIG1lbW9yeSBhbmQgaXMgbW9yZSBjb21wbGV4LgorCisJICBMQy10cmllIGlzIGRlc2NyaWJlZCBpbjoKKworCSAgSVAtYWRkcmVzcyBsb29rdXAgdXNpbmcgTEMtdHJpZXMuIFN0ZWZhbiBOaWxzc29uIGFuZCBHdW5uYXIgS2FybHNzb24KKwkgIElFRUUgSm91cm5hbCBvbiBTZWxlY3RlZCBBcmVhcyBpbiBDb21tdW5pY2F0aW9ucywgMTcoNik6MTA4My0xMDkyLAorCSAgSnVuZSAxOTk5CisKKwkgIEFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCisJICBTdGVmYW4gTmlsc3NvbiBhbmQgTWF0dGkgVGlra2FuZW4uIEFsZ29yaXRobWljYSwgMzMoMSk6MTktMzMsIDIwMDIuCisJICBodHRwOi8vd3d3Lm5hZGEua3RoLnNlL35zbmlsc3Nvbi9wdWJsaWMvcGFwZXJzL2R5bnRyaWUyLworCiBlbmRjaG9pY2UKIAogY29uZmlnIElQX0ZJQl9IQVNICkBAIC0xOTEsNyArMTk3LDcgQEAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQ+IGZvciBkZXRhaWxzLgogCiAjIG5vdCB5ZXQgcmVhZHkuLgotIyAgIGJvb2wgJyAgICBJUDogQVJQIHN1cHBvcnQnIENPTkZJR19JUF9QTlBfQVJQCQkKKyMgICBib29sICcgICAgSVA6IEFSUCBzdXBwb3J0JyBDT05GSUdfSVBfUE5QX0FSUAogY29uZmlnIE5FVF9JUElQCiAJdHJpc3RhdGUgIklQOiB0dW5uZWxpbmciCiAJc2VsZWN0IElORVRfVFVOTkVMCkBAIC0zNjEsNyArMzY3LDcgQEAKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sIChJUENvbXApIChSRkMzMTczKSwKIAkgIHR5cGljYWxseSBuZWVkZWQgZm9yIElQc2VjLgotCSAgCisKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMCkBAIC00MTUsNyArNDIxLDcgQEAKIAkgIFN1cHBvcnQgZm9yIElORVQgKFRDUCwgRENDUCwgZXRjKSBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieQogCSAgbmF0aXZlIExpbnV4IHRvb2xzIHN1Y2ggYXMgc3MuIHNzIGlzIGluY2x1ZGVkIGluIGlwcm91dGUyLCBjdXJyZW50bHkKIAkgIGRvd25sb2FkYWJsZSBhdCA8aHR0cDovL2xpbnV4LW5ldC5vc2RsLm9yZy9pbmRleC5waHAvSXByb3V0ZTI+LgotCSAgCisKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBJTkVUX1RDUF9ESUFHCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggNzQzZjU1NC4uZDVhYWFiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMzY5LDcgKzM2OSw2IEBACiAJc29ja19pbml0X2RhdGEoc29jaywgc2spOwogCiAJc2stPnNrX2Rlc3RydWN0CSAgID0gaW5ldF9zb2NrX2Rlc3RydWN0OwotCXNrLT5za19mYW1pbHkJICAgPSBQRl9JTkVUOwogCXNrLT5za19wcm90b2NvbAkgICA9IHByb3RvY29sOwogCXNrLT5za19iYWNrbG9nX3JjdiA9IHNrLT5za19wcm90LT5iYWNrbG9nX3JjdjsKIApAQCAtMTI1MywxMCArMTI1MiwxMCBAQAogCWludCBwcm90bzsKIAlpbnQgaWQ7CiAKLQlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKSkKKwlpcGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHNpemVvZigqaXBoKSk7CisJaWYgKHVubGlrZWx5KCFpcGgpKQogCQlnb3RvIG91dDsKIAotCWlwaCA9IGlwX2hkcihza2IpOwogCXByb3RvID0gaXBoLT5wcm90b2NvbCAmIChNQVhfSU5FVF9QUk9UT1MgLSAxKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTEyNjQsMTMgKzEyNjMsMTMgQEAKIAlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKGlwaC0+dmVyc2lvbiAhPSA0IHx8IGlwaC0+aWhsICE9IDUpCisJaWYgKCoodTggKilpcGggIT0gMHg0NSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJaWYgKHVubGlrZWx5KGlwX2Zhc3RfY3N1bSgodTggKilpcGgsIGlwaC0+aWhsKSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWZsdXNoID0gbnRvaHMoaXBoLT50b3RfbGVuKSAhPSBza2ItPmxlbiB8fAorCWZsdXNoID0gbnRvaHMoaXBoLT50b3RfbGVuKSAhPSBza2JfZ3JvX2xlbihza2IpIHx8CiAJCWlwaC0+ZnJhZ19vZmYgIT0gaHRvbnMoSVBfREYpOwogCWlkID0gbnRvaHMoaXBoLT5pZCk7CiAKQEAgLTEyODIsMjQgKzEyODEsMjUgQEAKIAogCQlpcGgyID0gaXBfaGRyKHApOwogCi0JCWlmIChpcGgtPnByb3RvY29sICE9IGlwaDItPnByb3RvY29sIHx8Ci0JCSAgICBpcGgtPnRvcyAhPSBpcGgyLT50b3MgfHwKLQkJICAgIG1lbWNtcCgmaXBoLT5zYWRkciwgJmlwaDItPnNhZGRyLCA4KSkgeworCQlpZiAoKGlwaC0+cHJvdG9jb2wgXiBpcGgyLT5wcm90b2NvbCkgfAorCQkgICAgKGlwaC0+dG9zIF4gaXBoMi0+dG9zKSB8CisJCSAgICAoaXBoLT5zYWRkciBeIGlwaDItPnNhZGRyKSB8CisJCSAgICAoaXBoLT5kYWRkciBeIGlwaDItPmRhZGRyKSkgewogCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDA7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIEFsbCBmaWVsZHMgbXVzdCBtYXRjaCBleGNlcHQgbGVuZ3RoIGFuZCBjaGVja3N1bS4gKi8KIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoIHw9Ci0JCQltZW1jbXAoJmlwaC0+ZnJhZ19vZmYsICZpcGgyLT5mcmFnX29mZiwgNCkgfHwKLQkJCSh1MTYpKG50b2hzKGlwaDItPmlkKSArIE5BUElfR1JPX0NCKHApLT5jb3VudCkgIT0gaWQ7CisJCQkoaXBoLT50dGwgXiBpcGgyLT50dGwpIHwKKwkJCSgodTE2KShudG9ocyhpcGgyLT5pZCkgKyBOQVBJX0dST19DQihwKS0+Y291bnQpIF4gaWQpOwogCiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCB8PSBmbHVzaDsKIAl9CiAKIAlOQVBJX0dST19DQihza2IpLT5mbHVzaCB8PSBmbHVzaDsKLQlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKLQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCXNrYl9ncm9fcHVsbChza2IsIHNpemVvZigqaXBoKSk7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CiAKIAlwcCA9IG9wcy0+Z3JvX3JlY2VpdmUoaGVhZCwgc2tiKTsKIApAQCAtMTUwMCw4ICsxNTAwLDggQEAKICAqCUlQIHByb3RvY29sIGxheWVyIGluaXRpYWxpc2VyCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5mdW5jID0gaXBfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGluZXRfZ3NvX3NlbmRfY2hlY2ssCiAJLmdzb19zZWdtZW50ID0gaW5ldF9nc29fc2VnbWVudCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggMjlhNzRjMC4uZjExOTMxYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTgwMSw4ICs4MDEsMTEgQEAKICAqICBjYWNoZS4KICAqLwogCi0JLyogU3BlY2lhbCBjYXNlOiBJUHY0IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGlvbiBwYWNrZXQgKFJGQzIxMzEpICovCi0JaWYgKHNpcCA9PSAwKSB7CisJLyoKKwkgKiAgU3BlY2lhbCBjYXNlOiBJUHY0IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGlvbiBwYWNrZXQgKFJGQzIxMzEpCisJICogIGFuZCBHcmF0dWl0b3VzIEFSUC9BUlAgQW5ub3VuY2UuIChSRkMzOTI3LCBTZWN0aW9uIDIuNCkKKwkgKi8KKwlpZiAoc2lwID09IDAgfHwgdGlwID09IHNpcCkgewogCQlpZiAoYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSAmJgogCQkgICAgaW5ldF9hZGRyX3R5cGUobmV0LCB0aXApID09IFJUTl9MT0NBTCAmJgogCQkgICAgIWFycF9pZ25vcmUoaW5fZGV2LCBzaXAsIHRpcCkpCkBAIC04OTIsNyArODk1LDcgQEAKIG91dDoKIAlpZiAoaW5fZGV2KQogCQlpbl9kZXZfcHV0KGluX2Rldik7Ci0Ja2ZyZWVfc2tiKHNrYik7CisJY29uc3VtZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIyNSw4ICsxMjI4LDggQEAKICAqCUNhbGxlZCBvbmNlIG9uIHN0YXJ0dXAuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBhcnBfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSUCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFycF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSwKIAkuZnVuYyA9CWFycF9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMzA5OTk3ZS4uMTI2YmI5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTA3NSw2ICsxMDc1LDE0IEBACiAJCQl9CiAJCX0KIAkJaXBfbWNfdXAoaW5fZGV2KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKKwkJaWYgKElOX0RFVl9BUlBfTk9USUZZKGluX2RldikpCisJCQlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsCisJCQkJIGluX2Rldi0+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+ZXJyX2NvdW50LS07CiAKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggOGViZTg2ZC4uM2U3ZTkxMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTkzNSw2ICs5MzUsMTAgQEAKIAkJCQkJCQkgICBzay0+c2tfYWxsb2NhdGlvbik7CiAJCQkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKIAkJCQkJZXJyID0gLUVOT0JVRlM7CisJCQkJZWxzZQorCQkJCQkvKiBvbmx5IHRoZSBpbml0aWFsIGZyYWdtZW50IGlzCisJCQkJCSAgIHRpbWUgc3RhbXBlZCAqLworCQkJCQlpcGMtPnNodHguZmxhZ3MgPSAwOwogCQkJfQogCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJCWdvdG8gZXJyb3I7CkBAIC05NDUsNiArOTQ5LDcgQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gY3N1bW1vZGU7CiAJCQlza2ItPmNzdW0gPSAwOwogCQkJc2tiX3Jlc2VydmUoc2tiLCBoaF9sZW4pOworCQkJKnNrYl90eChza2IpID0gaXBjLT5zaHR4OwogCiAJCQkvKgogCQkJICoJRmluZCB3aGVyZSB0byBzdGFydCBwdXR0aW5nIGJ5dGVzLgpAQCAtMTM2NCw2ICsxMzY5LDcgQEAKIAogCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfc3JjOwogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCWlmIChyZXBseW9wdHMub3B0Lm9wdGxlbikgewogCQlpcGMub3B0ID0gJnJlcGx5b3B0cy5vcHQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbmZpZy5jIGIvbmV0L2lwdjQvaXBjb25maWcuYwppbmRleCBkNzIyMDEzLi45MGQyMmFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbmZpZy5jCisrKyBiL25ldC9pcHY0L2lwY29uZmlnLmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogI2RlZmluZSBDT05GX05BTUVTRVJWRVJTX01BWCAgIDMgICAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgbmFtZXNlcnZlcnMKIAkJCQkJICAgLSAnMycgZnJvbSByZXNvbHYuaCAqLwogCi0jZGVmaW5lIE5PTkUgX19jb25zdGFudF9odG9ubChJTkFERFJfTk9ORSkKLSNkZWZpbmUgQU5ZIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX0FOWSkKKyNkZWZpbmUgTk9ORSBjcHVfdG9fYmUzMihJTkFERFJfTk9ORSkKKyNkZWZpbmUgQU5ZIGNwdV90b19iZTMyKElOQUREUl9BTlkpCiAKIC8qCiAgKiBQdWJsaWMgSVAgY29uZmlndXJhdGlvbgpAQCAtNDA2LDcgKzQwNiw3IEBACiBzdGF0aWMgaW50IGljX3JhcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHJhcnBfcGFja2V0X3R5cGUgX19pbml0ZGF0YSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUkFSUCksCisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9SQVJQKSwKIAkuZnVuYyA9CWljX3JhcnBfcmVjdiwKIH07CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogc3RhdGljIGludCBpY19ib290cF9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYm9vdHBfcGFja2V0X3R5cGUgX19pbml0ZGF0YSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5mdW5jID0JaWNfYm9vdHBfcmVjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCA1MDc5ZGZiLi45MDU0MTM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlpZiAodC0+cGFybXMuaXBoLnR0bCA9PSAwICYmIHR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEKQogCQlnb3RvIG91dDsKIAotCWlmIChqaWZmaWVzIC0gdC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHQtPmVycl90aW1lICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkKIAkJdC0+ZXJyX2NvdW50Kys7CiAJZWxzZQogCQl0LT5lcnJfY291bnQgPSAxOwpAQCAtNDY2LDcgKzQ2Niw4IEBACiAJfQogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewotCQlpZiAoamlmZmllcyAtIHR1bm5lbC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJdHVubmVsLT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpIHsKIAkJCXR1bm5lbC0+ZXJyX2NvdW50LS07CiAJCQlkc3RfbGlua19mYWlsdXJlKHNrYik7CiAJCX0gZWxzZQpAQCAtNzUwLDcgKzc1MSw3IEBACiAJLnByaW9yaXR5CT0JMSwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0Y29uc3QgPQogCUtFUk5fSU5GTyAiSVB2NCBvdmVyIElQdjQgdHVubmVsaW5nIGRyaXZlclxuIjsKIAogc3RhdGljIHZvaWQgaXBpcF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IGlwaXBfbmV0ICppcG4pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggMTQ2NjY0NC4uMTNlOWRkMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtNjcsOSArNjcsNiBAQAogI2RlZmluZSBDT05GSUdfSVBfUElNU00JMQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXJvdXRlX3NvY2tldDsKLQotCiAvKiBCaWcgbG9jaywgcHJvdGVjdGluZyB2aWYgdGFibGUsIG1ydCBjYWNoZSBhbmQgbXJvdXRlIHNvY2tldCBzdGF0ZS4KICAgIE5vdGUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgc2VtYXBob3JlZCB2aWEgcnRubF9sb2NrLgogICovCkBAIC04MCwxOCArNzcsOSBAQAogICoJTXVsdGljYXN0IHJvdXRlciBjb250cm9sIHZhcmlhYmxlcwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdmlmX2RldmljZSB2aWZfdGFibGVbTUFYVklGU107CQkvKiBEZXZpY2VzIAkJKi8KLXN0YXRpYyBpbnQgbWF4dmlmOwotCi0jZGVmaW5lIFZJRl9FWElTVFMoaWR4KSAodmlmX3RhYmxlW2lkeF0uZGV2ICE9IE5VTEwpCi0KLXN0YXRpYyBpbnQgbXJvdXRlX2RvX2Fzc2VydDsJCQkJLyogU2V0IGluIFBJTSBhc3NlcnQJKi8KLXN0YXRpYyBpbnQgbXJvdXRlX2RvX3BpbTsKLQotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKm1mY19jYWNoZV9hcnJheVtNRkNfTElORVNdOwkvKiBGb3J3YXJkaW5nIGNhY2hlCSovCisjZGVmaW5lIFZJRl9FWElTVFMoX25ldCwgX2lkeCkgKChfbmV0KS0+aXB2NC52aWZfdGFibGVbX2lkeF0uZGV2ICE9IE5VTEwpCiAKIHN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICptZmNfdW5yZXNfcXVldWU7CQkvKiBRdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgKi8KLXN0YXRpYyBhdG9taWNfdCBjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbjsJCS8qIFNpemUgb2YgdW5yZXNvbHZlZAkqLwogCiAvKiBTcGVjaWFsIHNwaW5sb2NrIGZvciBxdWV1ZSBvZiB1bnJlc29sdmVkIGVudHJpZXMgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZjX3VucmVzX2xvY2spOwpAQCAtMTA3LDcgKzk1LDggQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IGlwX21yX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIGludCBsb2NhbCk7Ci1zdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KTsKK3N0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7CiBzdGF0aWMgaW50IGlwbXJfZmlsbF9tcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mY19jYWNoZSAqYywgc3RydWN0IHJ0bXNnICpydG0pOwogCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyCkBAIC0xMjAsOSArMTA5LDExIEBACiAKIHN0YXRpYyB2b2lkIGlwbXJfZGVsX3R1bm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdmlmY3RsICp2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwogCWRldl9jbG9zZShkZXYpOwogCi0JZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCAidHVubDAiKTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsICJ0dW5sMCIpOwogCWlmIChkZXYpIHsKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAJCXN0cnVjdCBpZnJlcSBpZnI7CkBAIC0xNDgsMTEgKzEzOSwxMSBAQAogfQogCiBzdGF0aWMKLXN0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IHZpZmN0bCAqdikKK3N0cnVjdCBuZXRfZGV2aWNlICppcG1yX25ld190dW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwogCi0JZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCAidHVubDAiKTsKKwlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsICJ0dW5sMCIpOwogCiAJaWYgKGRldikgewogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKQEAgLTE4MSw3ICsxNzIsOCBAQAogCiAJCWRldiA9IE5VTEw7CiAKLQkJaWYgKGVyciA9PSAwICYmIChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIHAubmFtZSkpICE9IE5VTEwpIHsKKwkJaWYgKGVyciA9PSAwICYmCisJCSAgICAoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBwLm5hbWUpKSAhPSBOVUxMKSB7CiAJCQlkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKIAkJCWluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CkBAIC0yMDksMTQgKzIwMSwxNSBAQAogCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCiAKLXN0YXRpYyBpbnQgcmVnX3ZpZl9udW0gPSAtMTsKLQogc3RhdGljIGludCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCWlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgcmVnX3ZpZl9udW0sIElHTVBNU0dfV0hPTEVQS1QpOworCWlwbXJfY2FjaGVfcmVwb3J0KG5ldCwgc2tiLCBuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtLAorCQkJICBJR01QTVNHX1dIT0xFUEtUKTsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwpAQCAtMjgzLDE2ICsyNzYsMTYgQEAKICAqCUBub3RpZnk6IFNldCB0byAxLCBpZiB0aGUgY2FsbGVyIGlzIGEgbm90aWZpZXJfY2FsbAogICovCiAKLXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShpbnQgdmlmaSwgaW50IG5vdGlmeSkKK3N0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB2aWZpLCBpbnQgbm90aWZ5KQogewogCXN0cnVjdCB2aWZfZGV2aWNlICp2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCi0JaWYgKHZpZmkgPCAwIHx8IHZpZmkgPj0gbWF4dmlmKQorCWlmICh2aWZpIDwgMCB8fCB2aWZpID49IG5ldC0+aXB2NC5tYXh2aWYpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCXYgPSAmdmlmX3RhYmxlW3ZpZmldOworCXYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZpXTsKIAogCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKIAlkZXYgPSB2LT5kZXY7CkBAIC0zMDQsMTcgKzI5NywxNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTQotCWlmICh2aWZpID09IHJlZ192aWZfbnVtKQotCQlyZWdfdmlmX251bSA9IC0xOworCWlmICh2aWZpID09IG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0pCisJCW5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPSAtMTsKICNlbmRpZgogCi0JaWYgKHZpZmkrMSA9PSBtYXh2aWYpIHsKKwlpZiAodmlmaSsxID09IG5ldC0+aXB2NC5tYXh2aWYpIHsKIAkJaW50IHRtcDsKIAkJZm9yICh0bXA9dmlmaS0xOyB0bXA+PTA7IHRtcC0tKSB7Ci0JCQlpZiAoVklGX0VYSVNUUyh0bXApKQorCQkJaWYgKFZJRl9FWElTVFMobmV0LCB0bXApKQogCQkJCWJyZWFrOwogCQl9Ci0JCW1heHZpZiA9IHRtcCsxOworCQluZXQtPmlwdjQubWF4dmlmID0gdG1wKzE7CiAJfQogCiAJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CkBAIC0zMzMsNiArMzI2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcG1yX2NhY2hlX2ZyZWUoc3RydWN0IG1mY19jYWNoZSAqYykKK3sKKwlyZWxlYXNlX25ldChtZmNfbmV0KGMpKTsKKwlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7Cit9CisKIC8qIERlc3Ryb3kgYW4gdW5yZXNvbHZlZCBjYWNoZSBlbnRyeSwga2lsbGluZyBxdWV1ZWQgc2ticwogICAgYW5kIHJlcG9ydGluZyBlcnJvciB0byBuZXRsaW5rIHJlYWRlcnMuCiAgKi8KQEAgLTM0MSw4ICszNDAsOSBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5sbXNnZXJyICplOworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoYyk7CiAKLQlhdG9taWNfZGVjKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbik7CisJYXRvbWljX2RlYygmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmMtPm1mY191bi51bnJlcy51bnJlc29sdmVkKSkpIHsKIAkJaWYgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDApIHsKQEAgLTM1NCwxMiArMzU0LDEyIEBACiAJCQllLT5lcnJvciA9IC1FVElNRURPVVQ7CiAJCQltZW1zZXQoJmUtPm1zZywgMCwgc2l6ZW9mKGUtPm1zZykpOwogCi0JCQlydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQkJcnRubF91bmljYXN0KHNrYiwgbmV0LCBORVRMSU5LX0NCKHNrYikucGlkKTsKIAkJfSBlbHNlCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiAKLQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJaXBtcl9jYWNoZV9mcmVlKGMpOwogfQogCiAKQEAgLTM3Niw3ICszNzYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPT0gMCkKKwlpZiAobWZjX3VucmVzX3F1ZXVlID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCiAJbm93ID0gamlmZmllczsKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlpcG1yX2Rlc3Ryb3lfdW5yZXMoYyk7CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikpCisJaWYgKG1mY191bnJlc19xdWV1ZSAhPSBOVUxMKQogCQltb2RfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyLCBqaWZmaWVzICsgZXhwaXJlcyk7CiAKIG91dDoKQEAgLTQwOSwxMyArNDA5LDE1IEBACiBzdGF0aWMgdm9pZCBpcG1yX3VwZGF0ZV90aHJlc2hvbGRzKHN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBjaGFyICp0dGxzKQogewogCWludCB2aWZpOworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoY2FjaGUpOwogCiAJY2FjaGUtPm1mY191bi5yZXMubWludmlmID0gTUFYVklGUzsKIAljYWNoZS0+bWZjX3VuLnJlcy5tYXh2aWYgPSAwOwogCW1lbXNldChjYWNoZS0+bWZjX3VuLnJlcy50dGxzLCAyNTUsIE1BWFZJRlMpOwogCi0JZm9yICh2aWZpPTA7IHZpZmk8bWF4dmlmOyB2aWZpKyspIHsKLQkJaWYgKFZJRl9FWElTVFModmlmaSkgJiYgdHRsc1t2aWZpXSAmJiB0dGxzW3ZpZmldIDwgMjU1KSB7CisJZm9yICh2aWZpID0gMDsgdmlmaSA8IG5ldC0+aXB2NC5tYXh2aWY7IHZpZmkrKykgeworCQlpZiAoVklGX0VYSVNUUyhuZXQsIHZpZmkpICYmCisJCSAgICB0dGxzW3ZpZmldICYmIHR0bHNbdmlmaV0gPCAyNTUpIHsKIAkJCWNhY2hlLT5tZmNfdW4ucmVzLnR0bHNbdmlmaV0gPSB0dGxzW3ZpZmldOwogCQkJaWYgKGNhY2hlLT5tZmNfdW4ucmVzLm1pbnZpZiA+IHZpZmkpCiAJCQkJY2FjaGUtPm1mY191bi5yZXMubWludmlmID0gdmlmaTsKQEAgLTQyNSwxNiArNDI3LDE2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHZpZl9hZGQoc3RydWN0IHZpZmN0bCAqdmlmYywgaW50IG1ydHNvY2spCitzdGF0aWMgaW50IHZpZl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdmlmY3RsICp2aWZjLCBpbnQgbXJ0c29jaykKIHsKIAlpbnQgdmlmaSA9IHZpZmMtPnZpZmNfdmlmaTsKLQlzdHJ1Y3QgdmlmX2RldmljZSAqdiA9ICZ2aWZfdGFibGVbdmlmaV07CisJc3RydWN0IHZpZl9kZXZpY2UgKnYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZpXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlpbnQgZXJyOwogCiAJLyogSXMgdmlmIGJ1c3kgPyAqLwotCWlmIChWSUZfRVhJU1RTKHZpZmkpKQorCWlmIChWSUZfRVhJU1RTKG5ldCwgdmlmaSkpCiAJCXJldHVybiAtRUFERFJJTlVTRTsKIAogCXN3aXRjaCAodmlmYy0+dmlmY19mbGFncykgewpAQCAtNDQ0LDcgKzQ0Niw3IEBACiAJCSAqIFNwZWNpYWwgUHVycG9zZSBWSUYgaW4gUElNCiAJCSAqIEFsbCB0aGUgcGFja2V0cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGRhZW1vbgogCQkgKi8KLQkJaWYgKHJlZ192aWZfbnVtID49IDApCisJCWlmIChuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID49IDApCiAJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCWRldiA9IGlwbXJfcmVnX3ZpZigpOwogCQlpZiAoIWRldikKQEAgLTQ1OCw3ICs0NjAsNyBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgVklGRl9UVU5ORUw6Ci0JCWRldiA9IGlwbXJfbmV3X3R1bm5lbCh2aWZjKTsKKwkJZGV2ID0gaXBtcl9uZXdfdHVubmVsKG5ldCwgdmlmYyk7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQllcnIgPSBkZXZfc2V0X2FsbG11bHRpKGRldiwgMSk7CkBAIC00NjksNyArNDcxLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIDA6Ci0JCWRldiA9IGlwX2Rldl9maW5kKCZpbml0X25ldCwgdmlmYy0+dmlmY19sY2xfYWRkci5zX2FkZHIpOworCQlkZXYgPSBpcF9kZXZfZmluZChuZXQsIHZpZmMtPnZpZmNfbGNsX2FkZHIuc19hZGRyKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKQEAgLTUxMCwyMCArNTEyLDIyIEBACiAJdi0+ZGV2ID0gZGV2OwogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCWlmICh2LT5mbGFncyZWSUZGX1JFR0lTVEVSKQotCQlyZWdfdmlmX251bSA9IHZpZmk7CisJCW5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPSB2aWZpOwogI2VuZGlmCi0JaWYgKHZpZmkrMSA+IG1heHZpZikKLQkJbWF4dmlmID0gdmlmaSsxOworCWlmICh2aWZpKzEgPiBuZXQtPmlwdjQubWF4dmlmKQorCQluZXQtPmlwdjQubWF4dmlmID0gdmlmaSsxOwogCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9maW5kKF9fYmUzMiBvcmlnaW4sIF9fYmUzMiBtY2FzdGdycCkKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgX19iZTMyIG9yaWdpbiwKKwkJCQkJIF9fYmUzMiBtY2FzdGdycCkKIHsKIAlpbnQgbGluZSA9IE1GQ19IQVNIKG1jYXN0Z3JwLCBvcmlnaW4pOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CiAKLQlmb3IgKGM9bWZjX2NhY2hlX2FycmF5W2xpbmVdOyBjOyBjID0gYy0+bmV4dCkgeworCWZvciAoYyA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07IGM7IGMgPSBjLT5uZXh0KSB7CiAJCWlmIChjLT5tZmNfb3JpZ2luPT1vcmlnaW4gJiYgYy0+bWZjX21jYXN0Z3JwPT1tY2FzdGdycCkKIAkJCWJyZWFrOwogCX0KQEAgLTUzMywyMiArNTM3LDI0IEBACiAvKgogICoJQWxsb2NhdGUgYSBtdWx0aWNhc3QgY2FjaGUgZW50cnkKICAqLwotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Modm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJYy0+bWZjX3VuLnJlcy5taW52aWYgPSBNQVhWSUZTOworCW1mY19uZXRfc2V0KGMsIG5ldCk7CiAJcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvY191bnJlcyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpOwogCWlmIChjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmMtPm1mY191bi51bnJlcy51bnJlc29sdmVkKTsKIAljLT5tZmNfdW4udW5yZXMuZXhwaXJlcyA9IGppZmZpZXMgKyAxMCpIWjsKKwltZmNfbmV0X3NldChjLCBuZXQpOwogCXJldHVybiBjOwogfQogCkBAIC01ODEsNyArNTg3LDcgQEAKIAkJCQltZW1zZXQoJmUtPm1zZywgMCwgc2l6ZW9mKGUtPm1zZykpOwogCQkJfQogCi0JCQlydG5sX3VuaWNhc3Qoc2tiLCAmaW5pdF9uZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQkJcnRubF91bmljYXN0KHNrYiwgbWZjX25ldChjKSwgTkVUTElOS19DQihza2IpLnBpZCk7CiAJCX0gZWxzZQogCQkJaXBfbXJfZm9yd2FyZChza2IsIGMsIDApOwogCX0KQEAgLTU5NCw3ICs2MDAsOCBAQAogICoJQ2FsbGVkIHVuZGVyIG1ydF9sb2NrLgogICovCiAKLXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpCitzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAljb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7CkBAIC02MjYsNyArNjMzLDcgQEAKIAkJbWVtY3B5KG1zZywgc2tiX25ldHdvcmtfaGVhZGVyKHBrdCksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAkJbXNnLT5pbV9tc2d0eXBlID0gSUdNUE1TR19XSE9MRVBLVDsKIAkJbXNnLT5pbV9tYnogPSAwOwotCQltc2ctPmltX3ZpZiA9IHJlZ192aWZfbnVtOworCQltc2ctPmltX3ZpZiA9IG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW07CiAJCWlwX2hkcihza2IpLT5paGwgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSA+PiAyOwogCQlpcF9oZHIoc2tiKS0+dG90X2xlbiA9IGh0b25zKG50b2hzKGlwX2hkcihwa3QpLT50b3RfbGVuKSArCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwpAQCAtNjU4LDcgKzY2NSw3IEBACiAJc2tiLT50cmFuc3BvcnRfaGVhZGVyID0gc2tiLT5uZXR3b3JrX2hlYWRlcjsKIAl9CiAKLQlpZiAobXJvdXRlX3NvY2tldCA9PSBOVUxMKSB7CisJaWYgKG5ldC0+aXB2NC5tcm91dGVfc2sgPT0gTlVMTCkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNjY2LDcgKzY3Myw4IEBACiAJLyoKIAkgKglEZWxpdmVyIHRvIG1yb3V0ZWQKIAkgKi8KLQlpZiAoKHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGVfc29ja2V0LCBza2IpKTwwKSB7CisJcmV0ID0gc29ja19xdWV1ZV9yY3Zfc2tiKG5ldC0+aXB2NC5tcm91dGVfc2ssIHNrYik7CisJaWYgKHJldCA8IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1yb3V0ZTogcGVuZGluZyBxdWV1ZSBmdWxsLCBkcm9wcGluZyBlbnRyaWVzLlxuIik7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNjgwLDcgKzY4OCw3IEBACiAgKi8KIAogc3RhdGljIGludAotaXBtcl9jYWNoZV91bnJlc29sdmVkKHZpZmlfdCB2aWZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraXBtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBuZXQgKm5ldCwgdmlmaV90IHZpZmksIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjOwpAQCAtNjg4LDcgKzY5Niw4IEBACiAKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAlmb3IgKGM9bWZjX3VucmVzX3F1ZXVlOyBjOyBjPWMtPm5leHQpIHsKLQkJaWYgKGMtPm1mY19tY2FzdGdycCA9PSBpcGgtPmRhZGRyICYmCisJCWlmIChuZXRfZXEobWZjX25ldChjKSwgbmV0KSAmJgorCQkgICAgYy0+bWZjX21jYXN0Z3JwID09IGlwaC0+ZGFkZHIgJiYKIAkJICAgIGMtPm1mY19vcmlnaW4gPT0gaXBoLT5zYWRkcikKIAkJCWJyZWFrOwogCX0KQEAgLTY5OCw4ICs3MDcsOCBAQAogCQkgKglDcmVhdGUgYSBuZXcgZW50cnkgaWYgYWxsb3dhYmxlCiAJCSAqLwogCi0JCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pID49IDEwIHx8Ci0JCSAgICAoYz1pcG1yX2NhY2hlX2FsbG9jX3VucmVzKCkpPT1OVUxMKSB7CisJCWlmIChhdG9taWNfcmVhZCgmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSA+PSAxMCB8fAorCQkgICAgKGMgPSBpcG1yX2NhY2hlX2FsbG9jX3VucmVzKG5ldCkpID09IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtNzE2LDE4ICs3MjUsMTkgQEAKIAkJLyoKIAkJICoJUmVmbGVjdCBmaXJzdCBxdWVyeSBhdCBtcm91dGVkLgogCQkgKi8KLQkJaWYgKChlcnIgPSBpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSkpPDApIHsKKwkJZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7CisJCWlmIChlcnIgPCAwKSB7CiAJCQkvKiBJZiB0aGUgcmVwb3J0IGZhaWxlZCB0aHJvdyB0aGUgY2FjaGUgZW50cnkKIAkJCSAgIG91dCAtIEJyYWQgUGFya2VyCiAJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKLQkJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwkJCWlwbXJfY2FjaGVfZnJlZShjKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWF0b21pY19pbmMoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKKwkJYXRvbWljX2luYygmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKIAkJYy0+bmV4dCA9IG1mY191bnJlc19xdWV1ZTsKIAkJbWZjX3VucmVzX3F1ZXVlID0gYzsKIApAQCAtNzUzLDM1ICs3NjMsMzcgQEAKICAqCU1GQyBjYWNoZSBtYW5pcHVsYXRpb24gYnkgdXNlciBzcGFjZSBtcm91dGUgZGFlbW9uCiAgKi8KIAotc3RhdGljIGludCBpcG1yX21mY19kZWxldGUoc3RydWN0IG1mY2N0bCAqbWZjKQorc3RhdGljIGludCBpcG1yX21mY19kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbWZjY3RsICptZmMpCiB7CiAJaW50IGxpbmU7CiAJc3RydWN0IG1mY19jYWNoZSAqYywgKipjcDsKIAogCWxpbmUgPSBNRkNfSEFTSChtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyLCBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkcik7CiAKLQlmb3IgKGNwPSZtZmNfY2FjaGVfYXJyYXlbbGluZV07IChjPSpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgeworCWZvciAoY3AgPSAmbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsKKwkgICAgIChjID0gKmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CiAJCWlmIChjLT5tZmNfb3JpZ2luID09IG1mYy0+bWZjY19vcmlnaW4uc19hZGRyICYmCiAJCSAgICBjLT5tZmNfbWNhc3RncnAgPT0gbWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikgewogCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwogCQkJKmNwID0gYy0+bmV4dDsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgYyk7CisJCQlpcG1yX2NhY2hlX2ZyZWUoYyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAotc3RhdGljIGludCBpcG1yX21mY19hZGQoc3RydWN0IG1mY2N0bCAqbWZjLCBpbnQgbXJ0c29jaykKK3N0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1mY2N0bCAqbWZjLCBpbnQgbXJ0c29jaykKIHsKIAlpbnQgbGluZTsKIAlzdHJ1Y3QgbWZjX2NhY2hlICp1YywgKmMsICoqY3A7CiAKIAlsaW5lID0gTUZDX0hBU0gobWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkciwgbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIpOwogCi0JZm9yIChjcD0mbWZjX2NhY2hlX2FycmF5W2xpbmVdOyAoYz0qY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKKwlmb3IgKGNwID0gJm5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07CisJICAgICAoYyA9ICpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgewogCQlpZiAoYy0+bWZjX29yaWdpbiA9PSBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkciAmJgogCQkgICAgYy0+bWZjX21jYXN0Z3JwID09IG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIpCiAJCQlicmVhazsKQEAgLTgwMCw3ICs4MTIsNyBAQAogCWlmICghaXB2NF9pc19tdWx0aWNhc3QobWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYyA9IGlwbXJfY2FjaGVfYWxsb2MoKTsKKwljID0gaXBtcl9jYWNoZV9hbGxvYyhuZXQpOwogCWlmIChjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC04MTIsOCArODI0LDggQEAKIAkJYy0+bWZjX2ZsYWdzIHw9IE1GQ19TVEFUSUM7CiAKIAl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7Ci0JYy0+bmV4dCA9IG1mY19jYWNoZV9hcnJheVtsaW5lXTsKLQltZmNfY2FjaGVfYXJyYXlbbGluZV0gPSBjOworCWMtPm5leHQgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOworCW5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV0gPSBjOwogCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCiAJLyoKQEAgLTgyMywxOSArODM1LDIxIEBACiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJZm9yIChjcCA9ICZtZmNfdW5yZXNfcXVldWU7ICh1Yz0qY3ApICE9IE5VTEw7CiAJICAgICBjcCA9ICZ1Yy0+bmV4dCkgewotCQlpZiAodWMtPm1mY19vcmlnaW4gPT0gYy0+bWZjX29yaWdpbiAmJgorCQlpZiAobmV0X2VxKG1mY19uZXQodWMpLCBuZXQpICYmCisJCSAgICB1Yy0+bWZjX29yaWdpbiA9PSBjLT5tZmNfb3JpZ2luICYmCiAJCSAgICB1Yy0+bWZjX21jYXN0Z3JwID09IGMtPm1mY19tY2FzdGdycCkgewogCQkJKmNwID0gdWMtPm5leHQ7Ci0JCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pKQotCQkJCWRlbF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIpOworCQkJYXRvbWljX2RlYygmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmIChtZmNfdW5yZXNfcXVldWUgPT0gTlVMTCkKKwkJZGVsX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lcik7CiAJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAogCWlmICh1YykgewogCQlpcG1yX2NhY2hlX3Jlc29sdmUodWMsIGMpOwotCQlrbWVtX2NhY2hlX2ZyZWUobXJ0X2NhY2hlcCwgdWMpOworCQlpcG1yX2NhY2hlX2ZyZWUodWMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTg0NCwxNiArODU4LDE2IEBACiAgKglDbG9zZSB0aGUgbXVsdGljYXN0IHNvY2tldCwgYW5kIGNsZWFyIHRoZSB2aWYgdGFibGVzIGV0YwogICovCiAKLXN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGk7CiAKIAkvKgogCSAqCVNodXQgZG93biBhbGwgYWN0aXZlIHZpZiBlbnRyaWVzCiAJICovCi0JZm9yIChpPTA7IGk8bWF4dmlmOyBpKyspIHsKLQkJaWYgKCEodmlmX3RhYmxlW2ldLmZsYWdzJlZJRkZfU1RBVElDKSkKLQkJCXZpZl9kZWxldGUoaSwgMCk7CisJZm9yIChpID0gMDsgaSA8IG5ldC0+aXB2NC5tYXh2aWY7IGkrKykgeworCQlpZiAoIShuZXQtPmlwdjQudmlmX3RhYmxlW2ldLmZsYWdzJlZJRkZfU1RBVElDKSkKKwkJCXZpZl9kZWxldGUobmV0LCBpLCAwKTsKIAl9CiAKIAkvKgpAQCAtODYyLDcgKzg3Niw3IEBACiAJZm9yIChpPTA7IGk8TUZDX0xJTkVTOyBpKyspIHsKIAkJc3RydWN0IG1mY19jYWNoZSAqYywgKipjcDsKIAotCQljcCA9ICZtZmNfY2FjaGVfYXJyYXlbaV07CisJCWNwID0gJm5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbaV07CiAJCXdoaWxlICgoYyA9ICpjcCkgIT0gTlVMTCkgewogCQkJaWYgKGMtPm1mY19mbGFncyZNRkNfU1RBVElDKSB7CiAJCQkJY3AgPSAmYy0+bmV4dDsKQEAgLTg3MiwyMiArODg2LDIzIEBACiAJCQkqY3AgPSBjLT5uZXh0OwogCQkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwkJCWlwbXJfY2FjaGVfZnJlZShjKTsKIAkJfQogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pICE9IDApIHsKLQkJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlpZiAoYXRvbWljX3JlYWQoJm5ldC0+aXB2NC5jYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgIT0gMCkgeworCQlzdHJ1Y3QgbWZjX2NhY2hlICpjLCAqKmNwOwogCiAJCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwotCQl3aGlsZSAobWZjX3VucmVzX3F1ZXVlICE9IE5VTEwpIHsKLQkJCWMgPSBtZmNfdW5yZXNfcXVldWU7Ci0JCQltZmNfdW5yZXNfcXVldWUgPSBjLT5uZXh0OwotCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKKwkJY3AgPSAmbWZjX3VucmVzX3F1ZXVlOworCQl3aGlsZSAoKGMgPSAqY3ApICE9IE5VTEwpIHsKKwkJCWlmICghbmV0X2VxKG1mY19uZXQoYyksIG5ldCkpIHsKKwkJCQljcCA9ICZjLT5uZXh0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJKmNwID0gYy0+bmV4dDsKIAogCQkJaXBtcl9kZXN0cm95X3VucmVzKGMpOwotCi0JCQlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCX0KQEAgLTg5NSwxNSArOTEwLDE3IEBACiAKIHN0YXRpYyB2b2lkIG1ydHNvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwogCXJ0bmxfbG9jaygpOwotCWlmIChzayA9PSBtcm91dGVfc29ja2V0KSB7Ci0JCUlQVjRfREVWQ09ORl9BTEwoc29ja19uZXQoc2spLCBNQ19GT1JXQVJESU5HKS0tOworCWlmIChzayA9PSBuZXQtPmlwdjQubXJvdXRlX3NrKSB7CisJCUlQVjRfREVWQ09ORl9BTEwobmV0LCBNQ19GT1JXQVJESU5HKS0tOwogCiAJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKLQkJbXJvdXRlX3NvY2tldCA9IE5VTEw7CisJCW5ldC0+aXB2NC5tcm91dGVfc2sgPSBOVUxMOwogCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQltcm91dGVfY2xlYW5fdGFibGVzKHNrKTsKKwkJbXJvdXRlX2NsZWFuX3RhYmxlcyhuZXQpOwogCX0KIAlydG5sX3VubG9jaygpOwogfQpAQCAtOTIwLDkgKzkzNywxMCBAQAogCWludCByZXQ7CiAJc3RydWN0IHZpZmN0bCB2aWY7CiAJc3RydWN0IG1mY2N0bCBtZmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJaWYgKG9wdG5hbWUgIT0gTVJUX0lOSVQpIHsKLQkJaWYgKHNrICE9IG1yb3V0ZV9zb2NrZXQgJiYgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCWlmIChzayAhPSBuZXQtPmlwdjQubXJvdXRlX3NrICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCkBAIC05MzUsNyArOTUzLDcgQEAKIAkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAKIAkJcnRubF9sb2NrKCk7Ci0JCWlmIChtcm91dGVfc29ja2V0KSB7CisJCWlmIChuZXQtPmlwdjQubXJvdXRlX3NrKSB7CiAJCQlydG5sX3VubG9jaygpOwogCQkJcmV0dXJuIC1FQUREUklOVVNFOwogCQl9CkBAIC05NDMsMTUgKzk2MSwxNSBAQAogCQlyZXQgPSBpcF9yYV9jb250cm9sKHNrLCAxLCBtcnRzb2NrX2Rlc3RydWN0KTsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7Ci0JCQltcm91dGVfc29ja2V0ID0gc2s7CisJCQluZXQtPmlwdjQubXJvdXRlX3NrID0gc2s7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJSVBWNF9ERVZDT05GX0FMTChzb2NrX25ldChzayksIE1DX0ZPUldBUkRJTkcpKys7CisJCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORykrKzsKIAkJfQogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwogCWNhc2UgTVJUX0RPTkU6Ci0JCWlmIChzayAhPSBtcm91dGVfc29ja2V0KQorCQlpZiAoc2sgIT0gbmV0LT5pcHY0Lm1yb3V0ZV9zaykKIAkJCXJldHVybiAtRUFDQ0VTOwogCQlyZXR1cm4gaXBfcmFfY29udHJvbChzaywgMCwgTlVMTCk7CiAJY2FzZSBNUlRfQUREX1ZJRjoKQEAgLTk2NCw5ICs5ODIsOSBAQAogCQkJcmV0dXJuIC1FTkZJTEU7CiAJCXJ0bmxfbG9jaygpOwogCQlpZiAob3B0bmFtZSA9PSBNUlRfQUREX1ZJRikgewotCQkJcmV0ID0gdmlmX2FkZCgmdmlmLCBzaz09bXJvdXRlX3NvY2tldCk7CisJCQlyZXQgPSB2aWZfYWRkKG5ldCwgJnZpZiwgc2sgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9zayk7CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSB2aWZfZGVsZXRlKHZpZi52aWZjX3ZpZmksIDApOworCQkJcmV0ID0gdmlmX2RlbGV0ZShuZXQsIHZpZi52aWZjX3ZpZmksIDApOwogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7CkBAIC05ODMsOSArMTAwMSw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcnRubF9sb2NrKCk7CiAJCWlmIChvcHRuYW1lID09IE1SVF9ERUxfTUZDKQotCQkJcmV0ID0gaXBtcl9tZmNfZGVsZXRlKCZtZmMpOworCQkJcmV0ID0gaXBtcl9tZmNfZGVsZXRlKG5ldCwgJm1mYyk7CiAJCWVsc2UKLQkJCXJldCA9IGlwbXJfbWZjX2FkZCgmbWZjLCBzaz09bXJvdXRlX3NvY2tldCk7CisJCQlyZXQgPSBpcG1yX21mY19hZGQobmV0LCAmbWZjLCBzayA9PSBuZXQtPmlwdjQubXJvdXRlX3NrKTsKIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKIAkJLyoKQEAgLTk5Niw3ICsxMDE0LDcgQEAKIAkJaW50IHY7CiAJCWlmIChnZXRfdXNlcih2LChpbnQgX191c2VyICopb3B0dmFsKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQltcm91dGVfZG9fYXNzZXJ0PSh2KT8xOjA7CisJCW5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0ID0gKHYpID8gMSA6IDA7CiAJCXJldHVybiAwOwogCX0KICNpZmRlZiBDT05GSUdfSVBfUElNU00KQEAgLTEwMTAsMTEgKzEwMjgsMTEgQEAKIAogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gMDsKLQkJaWYgKHYgIT0gbXJvdXRlX2RvX3BpbSkgewotCQkJbXJvdXRlX2RvX3BpbSA9IHY7Ci0JCQltcm91dGVfZG9fYXNzZXJ0ID0gdjsKKwkJaWYgKHYgIT0gbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0pIHsKKwkJCW5ldC0+aXB2NC5tcm91dGVfZG9fcGltID0gdjsKKwkJCW5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0ID0gdjsKICNpZmRlZiBDT05GSUdfSVBfUElNU01fVjIKLQkJCWlmIChtcm91dGVfZG9fcGltKQorCQkJaWYgKG5ldC0+aXB2NC5tcm91dGVfZG9fcGltKQogCQkJCXJldCA9IGluZXRfYWRkX3Byb3RvY29sKCZwaW1fcHJvdG9jb2wsCiAJCQkJCQkJSVBQUk9UT19QSU0pOwogCQkJZWxzZQpAQCAtMTA0NSw2ICsxMDYzLDcgQEAKIHsKIAlpbnQgb2xyOwogCWludCB2YWw7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJaWYgKG9wdG5hbWUgIT0gTVJUX1ZFUlNJT04gJiYKICNpZmRlZiBDT05GSUdfSVBfUElNU00KQEAgLTEwNjYsMTAgKzEwODUsMTAgQEAKIAkJdmFsID0gMHgwMzA1OwogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCWVsc2UgaWYgKG9wdG5hbWUgPT0gTVJUX1BJTSkKLQkJdmFsID0gbXJvdXRlX2RvX3BpbTsKKwkJdmFsID0gbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW07CiAjZW5kaWYKIAllbHNlCi0JCXZhbCA9IG1yb3V0ZV9kb19hc3NlcnQ7CisJCXZhbCA9IG5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0OwogCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmdmFsLCBvbHIpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTEwODUsMTYgKzExMDQsMTcgQEAKIAlzdHJ1Y3Qgc2lvY192aWZfcmVxIHZyOwogCXN0cnVjdCB2aWZfZGV2aWNlICp2aWY7CiAJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dFVFZJRkNOVDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodnIudmlmaSA+PSBtYXh2aWYpCisJCWlmICh2ci52aWZpID49IG5ldC0+aXB2NC5tYXh2aWYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JCXZpZj0mdmlmX3RhYmxlW3ZyLnZpZmldOwotCQlpZiAoVklGX0VYSVNUUyh2ci52aWZpKSkJeworCQl2aWYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2ci52aWZpXTsKKwkJaWYgKFZJRl9FWElTVFMobmV0LCB2ci52aWZpKSkgewogCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CiAJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CiAJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOwpAQCAtMTExMiw3ICsxMTMyLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCQljID0gaXBtcl9jYWNoZV9maW5kKHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOworCQljID0gaXBtcl9jYWNoZV9maW5kKG5ldCwgc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CiAJCWlmIChjKSB7CiAJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKIAkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOwpAQCAtMTEzNCwxOCArMTE1NCwxOSBAQAogc3RhdGljIGludCBpcG1yX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdjsKIAlpbnQgY3Q7CiAKLQlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCisJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX1VOUkVHSVNURVIpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKLQl2PSZ2aWZfdGFibGVbMF07Ci0JZm9yIChjdD0wOyBjdDxtYXh2aWY7IGN0KyssdisrKSB7CisJdiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlWzBdOworCWZvciAoY3QgPSAwOyBjdCA8IG5ldC0+aXB2NC5tYXh2aWY7IGN0KyssIHYrKykgewogCQlpZiAodi0+ZGV2ID09IGRldikKLQkJCXZpZl9kZWxldGUoY3QsIDEpOworCQkJdmlmX2RlbGV0ZShuZXQsIGN0LCAxKTsKIAl9CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtMTIwNSw4ICsxMjI2LDkgQEAKIAogc3RhdGljIHZvaWQgaXBtcl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZmNfY2FjaGUgKmMsIGludCB2aWZpKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoYyk7CiAJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmID0gJnZpZl90YWJsZVt2aWZpXTsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmID0gJm5ldC0+aXB2NC52aWZfdGFibGVbdmlmaV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlpbnQgICAgZW5jYXAgPSAwOwpAQCAtMTIyMCw5ICsxMjQyLDggQEAKIAkJdmlmLT5ieXRlc19vdXQgKz0gc2tiLT5sZW47CiAJCXZpZi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJdmlmLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybjsKKwkJaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOworCQlnb3RvIG91dF9mcmVlOwogCX0KICNlbmRpZgogCkBAIC0xMjMzLDcgKzEyNTQsNyBAQAogCQkJCQkJLnNhZGRyID0gdmlmLT5sb2NhbCwKIAkJCQkJCS50b3MgPSBSVF9UT1MoaXBoLT50b3MpIH0gfSwKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUElQIH07Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKQorCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCWVuY2FwID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiAJfSBlbHNlIHsKQEAgLTEyNDIsNyArMTI2Myw3IEBACiAJCQkJCSAgICAgIHsgLmRhZGRyID0gaXBoLT5kYWRkciwKIAkJCQkJCS50b3MgPSBSVF9UT1MoaXBoLT50b3MpIH0gfSwKIAkJCQkgICAgLnByb3RvID0gSVBQUk9UT19JUElQIH07Ci0JCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKQorCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCkBAIC0xMzA2LDkgKzEzMjcsMTAgQEAKIAogc3RhdGljIGludCBpcG1yX2ZpbmRfdmlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCWludCBjdDsKLQlmb3IgKGN0PW1heHZpZi0xOyBjdD49MDsgY3QtLSkgewotCQlpZiAodmlmX3RhYmxlW2N0XS5kZXYgPT0gZGV2KQorCWZvciAoY3QgPSBuZXQtPmlwdjQubWF4dmlmLTE7IGN0ID49IDA7IGN0LS0pIHsKKwkJaWYgKG5ldC0+aXB2NC52aWZfdGFibGVbY3RdLmRldiA9PSBkZXYpCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIGN0OwpAQCAtMTMyMCw2ICsxMzQyLDcgQEAKIHsKIAlpbnQgcHNlbmQgPSAtMTsKIAlpbnQgdmlmLCBjdDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGNhY2hlKTsKIAogCXZpZiA9IGNhY2hlLT5tZmNfcGFyZW50OwogCWNhY2hlLT5tZmNfdW4ucmVzLnBrdCsrOwpAQCAtMTMyOCw3ICsxMzUxLDcgQEAKIAkvKgogCSAqIFdyb25nIGludGVyZmFjZTogZHJvcCBwYWNrZXQgYW5kIChtYXliZSkgc2VuZCBQSU0gYXNzZXJ0LgogCSAqLwotCWlmICh2aWZfdGFibGVbdmlmXS5kZXYgIT0gc2tiLT5kZXYpIHsKKwlpZiAobmV0LT5pcHY0LnZpZl90YWJsZVt2aWZdLmRldiAhPSBza2ItPmRldikgewogCQlpbnQgdHJ1ZV92aWZpOwogCiAJCWlmIChza2ItPnJ0YWJsZS0+ZmwuaWlmID09IDApIHsKQEAgLTEzNDksMjMgKzEzNzIsMjQgQEAKIAkJY2FjaGUtPm1mY191bi5yZXMud3JvbmdfaWYrKzsKIAkJdHJ1ZV92aWZpID0gaXBtcl9maW5kX3ZpZihza2ItPmRldik7CiAKLQkJaWYgKHRydWVfdmlmaSA+PSAwICYmIG1yb3V0ZV9kb19hc3NlcnQgJiYKKwkJaWYgKHRydWVfdmlmaSA+PSAwICYmIG5ldC0+aXB2NC5tcm91dGVfZG9fYXNzZXJ0ICYmCiAJCSAgICAvKiBwaW1zbSB1c2VzIGFzc2VydHMsIHdoZW4gc3dpdGNoaW5nIGZyb20gUlBUIHRvIFNQVCwKIAkJICAgICAgIHNvIHRoYXQgd2UgY2Fubm90IGNoZWNrIHRoYXQgcGFja2V0IGFycml2ZWQgb24gYW4gb2lmLgogCQkgICAgICAgSXQgaXMgYmFkLCBidXQgb3RoZXJ3aXNlIHdlIHdvdWxkIG5lZWQgdG8gbW92ZSBwcmV0dHkKIAkJICAgICAgIGxhcmdlIGNodW5rIG9mIHBpbWQgdG8ga2VybmVsLiBPdWdoLi4uIC0tQU5LCiAJCSAgICAgKi8KLQkJICAgIChtcm91dGVfZG9fcGltIHx8IGNhY2hlLT5tZmNfdW4ucmVzLnR0bHNbdHJ1ZV92aWZpXSA8IDI1NSkgJiYKKwkJICAgIChuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSB8fAorCQkgICAgIGNhY2hlLT5tZmNfdW4ucmVzLnR0bHNbdHJ1ZV92aWZpXSA8IDI1NSkgJiYKIAkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywKIAkJCSAgICAgICBjYWNoZS0+bWZjX3VuLnJlcy5sYXN0X2Fzc2VydCArIE1GQ19BU1NFUlRfVEhSRVNIKSkgewogCQkJY2FjaGUtPm1mY191bi5yZXMubGFzdF9hc3NlcnQgPSBqaWZmaWVzOwotCQkJaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCB0cnVlX3ZpZmksIElHTVBNU0dfV1JPTkdWSUYpOworCQkJaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIHRydWVfdmlmaSwgSUdNUE1TR19XUk9OR1ZJRik7CiAJCX0KIAkJZ290byBkb250X2ZvcndhcmQ7CiAJfQogCi0JdmlmX3RhYmxlW3ZpZl0ucGt0X2luKys7Ci0JdmlmX3RhYmxlW3ZpZl0uYnl0ZXNfaW4gKz0gc2tiLT5sZW47CisJbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZdLnBrdF9pbisrOworCW5ldC0+aXB2NC52aWZfdGFibGVbdmlmXS5ieXRlc19pbiArPSBza2ItPmxlbjsKIAogCS8qCiAJICoJRm9yd2FyZCB0aGUgZnJhbWUKQEAgLTE0MDUsNiArMTQyOSw3IEBACiBpbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlpbnQgbG9jYWwgPSBza2ItPnJ0YWJsZS0+cnRfZmxhZ3MmUlRDRl9MT0NBTDsKIAogCS8qIFBhY2tldCBpcyBsb29wZWQgYmFjayBhZnRlciBmb3J3YXJkLCBpdCBzaG91bGQgbm90IGJlCkBAIC0xNDI1LDkgKzE0NTAsOSBAQAogCQkJICAgICAgIHRoYXQgd2UgY2FuIGZvcndhcmQgTk8gSUdNUCBtZXNzYWdlcy4KIAkJCSAgICAgKi8KIAkJCSAgICByZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkJCSAgICBpZiAobXJvdXRlX3NvY2tldCkgeworCQkJICAgIGlmIChuZXQtPmlwdjQubXJvdXRlX3NrKSB7CiAJCQkJICAgIG5mX3Jlc2V0KHNrYik7Ci0JCQkJICAgIHJhd19yY3YobXJvdXRlX3NvY2tldCwgc2tiKTsKKwkJCQkgICAgcmF3X3JjdihuZXQtPmlwdjQubXJvdXRlX3NrLCBza2IpOwogCQkJCSAgICByZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCQkJCSAgICByZXR1cm4gMDsKIAkJCSAgICB9CkBAIC0xNDM2LDcgKzE0NjEsNyBAQAogCX0KIAogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKGlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyKTsKKwljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChuZXQsIGlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyKTsKIAogCS8qCiAJICoJTm8gdXNhYmxlIGNhY2hlIGVudHJ5CkBAIC0xNDU2LDcgKzE0ODEsNyBAQAogCiAJCXZpZiA9IGlwbXJfZmluZF92aWYoc2tiLT5kZXYpOwogCQlpZiAodmlmID49IDApIHsKLQkJCWludCBlcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQodmlmLCBza2IpOworCQkJaW50IGVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChuZXQsIHZpZiwgc2tiKTsKIAkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAKIAkJCXJldHVybiBlcnI7CkBAIC0xNDg3LDYgKzE1MTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWdfZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXBoZHIgKmVuY2FwOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJZW5jYXAgPSAoc3RydWN0IGlwaGRyICopKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgKyBwaW1sZW4pOwogCS8qCkBAIC0xNTAxLDggKzE1MjcsOCBAQAogCQlyZXR1cm4gMTsKIAogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCWlmIChyZWdfdmlmX251bSA+PSAwKQotCQlyZWdfZGV2ID0gdmlmX3RhYmxlW3JlZ192aWZfbnVtXS5kZXY7CisJaWYgKG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPj0gMCkKKwkJcmVnX2RldiA9IG5ldC0+aXB2NC52aWZfdGFibGVbbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bV0uZGV2OwogCWlmIChyZWdfZGV2KQogCQlkZXZfaG9sZChyZWdfZGV2KTsKIAlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwpAQCAtMTUzNywxMyArMTU2MywxNCBAQAogaW50IHBpbV9yY3ZfdjEoc3RydWN0IHNrX2J1ZmYgKiBza2IpCiB7CiAJc3RydWN0IGlnbXBoZHIgKnBpbTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqcGltKSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKIAkJZ290byBkcm9wOwogCiAJcGltID0gaWdtcF9oZHIoc2tiKTsKIAotCWlmICghbXJvdXRlX2RvX3BpbSB8fAorCWlmICghbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0gfHwKIAkgICAgcGltLT5ncm91cCAhPSBQSU1fVjFfVkVSU0lPTiB8fCBwaW0tPmNvZGUgIT0gUElNX1YxX1JFR0lTVEVSKQogCQlnb3RvIGRyb3A7CiAKQEAgLTE1ODMsNyArMTYxMCw4IEBACiB7CiAJaW50IGN0OwogCXN0cnVjdCBydG5leHRob3AgKm5ocDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmlmX3RhYmxlW2MtPm1mY19wYXJlbnRdLmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBtZmNfbmV0KGMpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXQtPmlwdjQudmlmX3RhYmxlW2MtPm1mY19wYXJlbnRdLmRldjsKIAl1OCAqYiA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKIAlzdHJ1Y3QgcnRhdHRyICptcF9oZWFkOwogCkBAIC0xNTk5LDcgKzE2MjcsNyBAQAogCQkJbmhwID0gKHN0cnVjdCBydG5leHRob3AgKilza2JfcHV0KHNrYiwgUlRBX0FMSUdOKHNpemVvZigqbmhwKSkpOwogCQkJbmhwLT5ydG5oX2ZsYWdzID0gMDsKIAkJCW5ocC0+cnRuaF9ob3BzID0gYy0+bWZjX3VuLnJlcy50dGxzW2N0XTsKLQkJCW5ocC0+cnRuaF9pZmluZGV4ID0gdmlmX3RhYmxlW2N0XS5kZXYtPmlmaW5kZXg7CisJCQluaHAtPnJ0bmhfaWZpbmRleCA9IG5ldC0+aXB2NC52aWZfdGFibGVbY3RdLmRldi0+aWZpbmRleDsKIAkJCW5ocC0+cnRuaF9sZW4gPSBzaXplb2YoKm5ocCk7CiAJCX0KIAl9CkBAIC0xNjEzLDE0ICsxNjQxLDE1IEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAotaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KQoraW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwKKwkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYi0+cnRhYmxlOwogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQocnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CisJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobmV0LCBydC0+cnRfc3JjLCBydC0+cnRfZHN0KTsKIAogCWlmIChjYWNoZSA9PSBOVUxMKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IyOwpAQCAtMTY1MSw3ICsxNjgwLDcgQEAKIAkJaXBoLT5zYWRkciA9IHJ0LT5ydF9zcmM7CiAJCWlwaC0+ZGFkZHIgPSBydC0+cnRfZHN0OwogCQlpcGgtPnZlcnNpb24gPSAwOwotCQllcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQodmlmLCBza2IyKTsKKwkJZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKG5ldCwgdmlmLCBza2IyKTsKIAkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNjY4LDE3ICsxNjk3LDE5IEBACiAgKglUaGUgL3Byb2MgaW50ZXJmYWNlcyB0byBtdWx0aWNhc3Qgcm91dGluZyAvcHJvYy9pcF9tcl9jYWNoZSAvcHJvYy9pcF9tcl92aWYKICAqLwogc3RydWN0IGlwbXJfdmlmX2l0ZXIgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKIAlpbnQgY3Q7CiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZl9kZXZpY2UgKmlwbXJfdmlmX3NlcV9pZHgoc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIsCitzdGF0aWMgc3RydWN0IHZpZl9kZXZpY2UgKmlwbXJfdmlmX3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICBzdHJ1Y3QgaXBtcl92aWZfaXRlciAqaXRlciwKIAkJCQkJICAgbG9mZl90IHBvcykKIHsKLQlmb3IgKGl0ZXItPmN0ID0gMDsgaXRlci0+Y3QgPCBtYXh2aWY7ICsraXRlci0+Y3QpIHsKLQkJaWYgKCFWSUZfRVhJU1RTKGl0ZXItPmN0KSkKKwlmb3IgKGl0ZXItPmN0ID0gMDsgaXRlci0+Y3QgPCBuZXQtPmlwdjQubWF4dmlmOyArK2l0ZXItPmN0KSB7CisJCWlmICghVklGX0VYSVNUUyhuZXQsIGl0ZXItPmN0KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocG9zLS0gPT0gMCkKLQkJCXJldHVybiAmdmlmX3RhYmxlW2l0ZXItPmN0XTsKKwkJCXJldHVybiAmbmV0LT5pcHY0LnZpZl90YWJsZVtpdGVyLT5jdF07CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMTY4NiwyMyArMTcxNywyNiBAQAogc3RhdGljIHZvaWQgKmlwbXJfdmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhtcnRfbG9jaykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKwogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwotCXJldHVybiAqcG9zID8gaXBtcl92aWZfc2VxX2lkeChzZXEtPnByaXZhdGUsICpwb3MgLSAxKQorCXJldHVybiAqcG9zID8gaXBtcl92aWZfc2VxX2lkeChuZXQsIHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCiAJCTogU0VRX1NUQVJUX1RPS0VOOwogfQogCiBzdGF0aWMgdm9pZCAqaXBtcl92aWZfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBpcG1yX3ZpZl9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJKysqcG9zOwogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGlwbXJfdmlmX3NlcV9pZHgoaXRlciwgMCk7CisJCXJldHVybiBpcG1yX3ZpZl9zZXFfaWR4KG5ldCwgaXRlciwgMCk7CiAKLQl3aGlsZSAoKytpdGVyLT5jdCA8IG1heHZpZikgewotCQlpZiAoIVZJRl9FWElTVFMoaXRlci0+Y3QpKQorCXdoaWxlICgrK2l0ZXItPmN0IDwgbmV0LT5pcHY0Lm1heHZpZikgeworCQlpZiAoIVZJRl9FWElTVFMobmV0LCBpdGVyLT5jdCkpCiAJCQljb250aW51ZTsKLQkJcmV0dXJuICZ2aWZfdGFibGVbaXRlci0+Y3RdOworCQlyZXR1cm4gJm5ldC0+aXB2NC52aWZfdGFibGVbaXRlci0+Y3RdOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE3MTUsNiArMTc0OSw4IEBACiAKIHN0YXRpYyBpbnQgaXBtcl92aWZfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3B1dHMoc2VxLAogCQkJICJJbnRlcmZhY2UgICAgICBCeXRlc0luICBQa3RzSW4gIEJ5dGVzT3V0IFBrdHNPdXQgRmxhZ3MgTG9jYWwgICAgUmVtb3RlXG4iKTsKQEAgLTE3MjQsNyArMTc2MCw3IEBACiAKIAkJc2VxX3ByaW50ZihzZXEsCiAJCQkgICAiJTJaZCAlLTEwcyAlOGxkICU3bGQgICU4bGQgJTdsZCAlMDVYICUwOFggJTA4WFxuIiwKLQkJCSAgIHZpZiAtIHZpZl90YWJsZSwKKwkJCSAgIHZpZiAtIG5ldC0+aXB2NC52aWZfdGFibGUsCiAJCQkgICBuYW1lLCB2aWYtPmJ5dGVzX2luLCB2aWYtPnBrdF9pbiwKIAkJCSAgIHZpZi0+Ynl0ZXNfb3V0LCB2aWYtPnBrdF9vdXQsCiAJCQkgICB2aWYtPmZsYWdzLCB2aWYtPmxvY2FsLCB2aWYtPnJlbW90ZSk7CkBAIC0xNzQxLDggKzE3NzcsOCBAQAogCiBzdGF0aWMgaW50IGlwbXJfdmlmX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmlwbXJfdmlmX3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGlwbXJfdmlmX2l0ZXIpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaXBtcl92aWZfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGlwbXJfdmlmX2l0ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtcl92aWZfZm9wcyA9IHsKQEAgLTE3NTAsMjMgKzE3ODYsMjYgQEAKIAkub3BlbiAgICA9IGlwbXJfdmlmX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCiBzdHJ1Y3QgaXBtcl9tZmNfaXRlciB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwogCXN0cnVjdCBtZmNfY2FjaGUgKipjYWNoZTsKIAlpbnQgY3Q7CiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX21mY19zZXFfaWR4KHN0cnVjdCBpcG1yX21mY19pdGVyICppdCwgbG9mZl90IHBvcykKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX21mY19zZXFfaWR4KHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJICBzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbWZjOwogCi0JaXQtPmNhY2hlID0gbWZjX2NhY2hlX2FycmF5OworCWl0LT5jYWNoZSA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXk7CiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7CiAJZm9yIChpdC0+Y3QgPSAwOyBpdC0+Y3QgPCBNRkNfTElORVM7IGl0LT5jdCsrKQotCQlmb3IgKG1mYyA9IG1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOyBtZmM7IG1mYyA9IG1mYy0+bmV4dCkKKwkJZm9yIChtZmMgPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2l0LT5jdF07CisJCSAgICAgbWZjOyBtZmMgPSBtZmMtPm5leHQpCiAJCQlpZiAocG9zLS0gPT0gMCkKIAkJCQlyZXR1cm4gbWZjOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CkBAIC0xNzc0LDcgKzE4MTMsOCBAQAogCWl0LT5jYWNoZSA9ICZtZmNfdW5yZXNfcXVldWU7CiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJZm9yIChtZmMgPSBtZmNfdW5yZXNfcXVldWU7IG1mYzsgbWZjID0gbWZjLT5uZXh0KQotCQlpZiAocG9zLS0gPT0gMCkKKwkJaWYgKG5ldF9lcShtZmNfbmV0KG1mYyksIG5ldCkgJiYKKwkJICAgIHBvcy0tID09IDApCiAJCQlyZXR1cm4gbWZjOwogCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAKQEAgLTE3ODYsOSArMTgyNiwxMSBAQAogc3RhdGljIHZvaWQgKmlwbXJfbWZjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCiAJaXQtPmNhY2hlID0gTlVMTDsKIAlpdC0+Y3QgPSAwOwotCXJldHVybiAqcG9zID8gaXBtcl9tZmNfc2VxX2lkeChzZXEtPnByaXZhdGUsICpwb3MgLSAxKQorCXJldHVybiAqcG9zID8gaXBtcl9tZmNfc2VxX2lkeChuZXQsIHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCiAJCTogU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC0xNzk2LDExICsxODM4LDEyIEBACiB7CiAJc3RydWN0IG1mY19jYWNoZSAqbWZjID0gdjsKIAlzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAkrKypwb3M7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCXJldHVybiBpcG1yX21mY19zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgMCk7CisJCXJldHVybiBpcG1yX21mY19zZXFfaWR4KG5ldCwgc2VxLT5wcml2YXRlLCAwKTsKIAogCWlmIChtZmMtPm5leHQpCiAJCXJldHVybiBtZmMtPm5leHQ7CkBAIC0xODA4LDEwICsxODUxLDEwIEBACiAJaWYgKGl0LT5jYWNoZSA9PSAmbWZjX3VucmVzX3F1ZXVlKQogCQlnb3RvIGVuZF9vZl9saXN0OwogCi0JQlVHX09OKGl0LT5jYWNoZSAhPSBtZmNfY2FjaGVfYXJyYXkpOworCUJVR19PTihpdC0+Y2FjaGUgIT0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSk7CiAKIAl3aGlsZSAoKytpdC0+Y3QgPCBNRkNfTElORVMpIHsKLQkJbWZjID0gbWZjX2NhY2hlX2FycmF5W2l0LT5jdF07CisJCW1mYyA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsKIAkJaWYgKG1mYykKIAkJCXJldHVybiBtZmM7CiAJfQpAQCAtMTgyMyw2ICsxODY2LDggQEAKIAogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCW1mYyA9IG1mY191bnJlc19xdWV1ZTsKKwl3aGlsZSAobWZjICYmICFuZXRfZXEobWZjX25ldChtZmMpLCBuZXQpKQorCQltZmMgPSBtZmMtPm5leHQ7CiAJaWYgKG1mYykKIAkJcmV0dXJuIG1mYzsKIApAQCAtMTgzNiwxNiArMTg4MSwxOCBAQAogc3RhdGljIHZvaWQgaXBtcl9tZmNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCiAJaWYgKGl0LT5jYWNoZSA9PSAmbWZjX3VucmVzX3F1ZXVlKQogCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwotCWVsc2UgaWYgKGl0LT5jYWNoZSA9PSBtZmNfY2FjaGVfYXJyYXkpCisJZWxzZSBpZiAoaXQtPmNhY2hlID09IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpCiAJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgaXBtcl9tZmNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJaW50IG47CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3B1dHMoc2VxLApAQCAtMTg2Niw5ICsxOTEzLDkgQEAKIAkJCQkgICBtZmMtPm1mY191bi5yZXMud3JvbmdfaWYpOwogCQkJZm9yIChuID0gbWZjLT5tZmNfdW4ucmVzLm1pbnZpZjsKIAkJCSAgICAgbiA8IG1mYy0+bWZjX3VuLnJlcy5tYXh2aWY7IG4rKyApIHsKLQkJCQlpZiAoVklGX0VYSVNUUyhuKQotCQkJCSAgICYmIG1mYy0+bWZjX3VuLnJlcy50dGxzW25dIDwgMjU1KQotCQkJCXNlcV9wcmludGYoc2VxLAorCQkJCWlmIChWSUZfRVhJU1RTKG5ldCwgbikgJiYKKwkJCQkgICAgbWZjLT5tZmNfdW4ucmVzLnR0bHNbbl0gPCAyNTUpCisJCQkJCXNlcV9wcmludGYoc2VxLAogCQkJCQkgICAiICUyZDolLTNkIiwKIAkJCQkJICAgbiwgbWZjLT5tZmNfdW4ucmVzLnR0bHNbbl0pOwogCQkJfQpAQCAtMTg5Miw4ICsxOTM5LDggQEAKIAogc3RhdGljIGludCBpcG1yX21mY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZpcG1yX21mY19zZXFfb3BzLAotCQkJc2l6ZW9mKHN0cnVjdCBpcG1yX21mY19pdGVyKSk7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJmlwbXJfbWZjX3NlcV9vcHMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcG1yX21mY19pdGVyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwbXJfbWZjX2ZvcHMgPSB7CkBAIC0xOTAxLDcgKzE5NDgsNyBAQAogCS5vcGVuICAgID0gaXBtcl9tZmNfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAjZW5kaWYKIApAQCAtMTkxNSw2ICsxOTYyLDY1IEBACiAvKgogICoJU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nCiAgKi8KK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcG1yX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgZXJyID0gMDsKKworCW5ldC0+aXB2NC52aWZfdGFibGUgPSBrY2FsbG9jKE1BWFZJRlMsIHNpemVvZihzdHJ1Y3QgdmlmX2RldmljZSksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXQtPmlwdjQudmlmX3RhYmxlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBGb3J3YXJkaW5nIGNhY2hlICovCisJbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSA9IGtjYWxsb2MoTUZDX0xJTkVTLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtZmNfY2FjaGUgKiksCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21mY19jYWNoZTsKKwl9CisKKyNpZmRlZiBDT05GSUdfSVBfUElNU00KKwluZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtID0gLTE7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJZXJyID0gLUVOT01FTTsKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlwX21yX3ZpZiIsIDAsICZpcG1yX3ZpZl9mb3BzKSkKKwkJZ290byBwcm9jX3ZpZl9mYWlsOworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaXBfbXJfY2FjaGUiLCAwLCAmaXBtcl9tZmNfZm9wcykpCisJCWdvdG8gcHJvY19jYWNoZV9mYWlsOworI2VuZGlmCisJcmV0dXJuIDA7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworcHJvY19jYWNoZV9mYWlsOgorCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF9tcl92aWYiKTsKK3Byb2NfdmlmX2ZhaWw6CisJa2ZyZWUobmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSk7CisjZW5kaWYKK2ZhaWxfbWZjX2NhY2hlOgorCWtmcmVlKG5ldC0+aXB2NC52aWZfdGFibGUpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwbXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX21yX2NhY2hlIik7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX21yX3ZpZiIpOworI2VuZGlmCisJa2ZyZWUobmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSk7CisJa2ZyZWUobmV0LT5pcHY0LnZpZl90YWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBtcl9uZXRfb3BzID0geworCS5pbml0ID0gaXBtcl9uZXRfaW5pdCwKKwkuZXhpdCA9IGlwbXJfbmV0X2V4aXQsCit9OwogCiBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZCkKIHsKQEAgLTE5MjcsMjYgKzIwMzMsMjAgQEAKIAlpZiAoIW1ydF9jYWNoZXApCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBtcl9uZXRfb3BzKTsKKwlpZiAoZXJyKQorCQlnb3RvIHJlZ19wZXJuZXRfZmFpbDsKKwogCXNldHVwX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lciwgaXBtcl9leHBpcmVfcHJvY2VzcywgMCk7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9tcl9ub3RpZmllcik7CiAJaWYgKGVycikKIAkJZ290byByZWdfbm90aWZfZmFpbDsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJpcF9tcl92aWYiLCAwLCAmaXBtcl92aWZfZm9wcykpCi0JCWdvdG8gcHJvY192aWZfZmFpbDsKLQlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwX21yX2NhY2hlIiwgMCwgJmlwbXJfbWZjX2ZvcHMpKQotCQlnb3RvIHByb2NfY2FjaGVfZmFpbDsKLSNlbmRpZgogCXJldHVybiAwOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1wcm9jX2NhY2hlX2ZhaWw6Ci0JcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgImlwX21yX3ZpZiIpOwotcHJvY192aWZfZmFpbDoKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfbXJfbm90aWZpZXIpOwotI2VuZGlmCisKIHJlZ19ub3RpZl9mYWlsOgogCWRlbF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBtcl9uZXRfb3BzKTsKK3JlZ19wZXJuZXRfZmFpbDoKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kobXJ0X2NhY2hlcCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggMzgxNmUxZC4uMTgzM2JkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTMxLDcgKzMxLDcgQEAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIC9wcm9jIGFuZCBzeXNjdGwgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQKLQkgIGxheWVyIDMgZGVwZW5kYW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAKKwkgIGxheWVyIDMgZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAKIAkgIG9sZCBwcm9ncmFtcyB0aGF0IGhhdmUgbm90IGJlZW4gYWRhcHRlZCB0byB0aGUgbmV3IG5hbWVzIHdvcmtpbmcuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCkBAIC05NSwxMSArOTUsMTEgQEAKIGNvbmZpZyBJUF9ORl9NQVRDSF9UVEwKIAl0cmlzdGF0ZSAnInR0bCIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIFRoaXMgYWRkcyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIG9wdGlvbiwgd2hpY2ggZW5hYmxlZCB0aGUgdXNlcgotCSAgdG8gbWF0Y2ggcGFja2V0cyBieSB0aGVpciBUVEwgdmFsdWUuCi0KLQkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCXNlbGVjdCBORVRGSUxURVJfWFRfTUFUQ0hfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMLgogCiAjIGBmaWx0ZXInLCBnZW5lcmljIGFuZCBzcGVjaWZpYyB0YXJnZXRzCiBjb25maWcgSVBfTkZfRklMVEVSCkBAIC0zMjMsMTkgKzMyMywxMyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUF9ORl9UQVJHRVRfVFRMCi0JdHJpc3RhdGUgICdUVEwgdGFyZ2V0IHN1cHBvcnQnCi0JZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUKKwl0cmlzdGF0ZSAnIlRUTCIgdGFyZ2V0IHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhZGRzIGEgYFRUTCcgdGFyZ2V0LCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIG1vZGlmeQotCSAgdGhlIFRUTCB2YWx1ZSBvZiB0aGUgSVAgaGVhZGVyLgotCi0JICBXaGlsZSBpdCBpcyBzYWZlIHRvIGRlY3JlbWVudC9sb3dlciB0aGUgVFRMLCB0aGlzIHRhcmdldCBhbHNvIGVuYWJsZXMKLQkgIGZ1bmN0aW9uYWxpdHkgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIFRUTCB2YWx1ZSBvZiB0aGUgSVAgaGVhZGVyIHRvCi0JICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhpcyBpcyBFWFRSRU1FTFkgREFOR0VST1VTIHNpbmNlIHlvdSBjYW4gZWFzaWx5Ci0JICBjcmVhdGUgaW1tb3J0YWwgcGFja2V0cyB0aGF0IGxvb3AgZm9yZXZlciBvbiB0aGUgbmV0d29yay4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KIAogIyByYXcgKyBzcGVjaWZpYyB0YXJnZXRzCiBjb25maWcgSVBfTkZfUkFXCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggNWY5YjY1MC4uNDgxMTE1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNTEsNyArNTEsNiBAQAogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFKSArPSBpcHRfYWRkcnR5cGUubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FIKSArPSBpcHRfYWgubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0VDTikgKz0gaXB0X2Vjbi5vCi1vYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfVFRMKSArPSBpcHRfdHRsLm8KIAogIyB0YXJnZXRzCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCkgKz0gaXB0X0NMVVNURVJJUC5vCkBAIC02MSw3ICs2MCw2IEBACiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUCkgKz0gaXB0X05FVE1BUC5vCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUKSArPSBpcHRfUkVESVJFQ1Qubwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwdF9SRUpFQ1Qubwotb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9UVEwpICs9IGlwdF9UVEwubwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HKSArPSBpcHRfVUxPRy5vCiAKICMgZ2VuZXJpYyBBUlAgdGFibGVzCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA3ZWE4OGI2Li44NGI5YzE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTczLDYgKzczLDQwIEBACiAJcmV0dXJuIChyZXQgIT0gMCk7CiB9CiAKKy8qCisgKiBVbmZvcnR1bmF0bHksIF9iIGFuZCBfbWFzayBhcmUgbm90IGFsaWduZWQgdG8gYW4gaW50IChvciBsb25nIGludCkKKyAqIFNvbWUgYXJjaGVzIGRvbnQgY2FyZSwgdW5yb2xsaW5nIHRoZSBsb29wIGlzIGEgd2luIG9uIHRoZW0uCisgKiBGb3Igb3RoZXIgYXJjaGVzLCB3ZSBvbmx5IGhhdmUgYSAxNmJpdCBhbGlnbmVtZW50LgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpZm5hbWVfY29tcGFyZShjb25zdCBjaGFyICpfYSwgY29uc3QgY2hhciAqX2IsIGNvbnN0IGNoYXIgKl9tYXNrKQoreworI2lmZGVmIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCisJY29uc3QgdW5zaWduZWQgbG9uZyAqYSA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2E7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYiA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2I7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqbWFzayA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX21hc2s7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSAoYVswXSBeIGJbMF0pICYgbWFza1swXTsKKwlpZiAoSUZOQU1TSVogPiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsxXSBeIGJbMV0pICYgbWFza1sxXTsKKwlpZiAoSUZOQU1TSVogPiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMl0gXiBiWzJdKSAmIG1hc2tbMl07CisJaWYgKElGTkFNU0laID4gMyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzNdIF4gYlszXSkgJiBtYXNrWzNdOworCUJVSUxEX0JVR19PTihJRk5BTVNJWiA+IDQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJY29uc3QgdTE2ICphID0gKGNvbnN0IHUxNiAqKV9hOworCWNvbnN0IHUxNiAqYiA9IChjb25zdCB1MTYgKilfYjsKKwljb25zdCB1MTYgKm1hc2sgPSAoY29uc3QgdTE2ICopX21hc2s7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHUxNik7IGkrKykKKwkJcmV0IHw9IChhW2ldIF4gYltpXSkgJiBtYXNrW2ldOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwogLyogUmV0dXJucyB3aGV0aGVyIHBhY2tldCBtYXRjaGVzIHJ1bGUgb3Igbm90LiAqLwogc3RhdGljIGlubGluZSBpbnQgYXJwX3BhY2tldF9tYXRjaChjb25zdCBzdHJ1Y3QgYXJwaGRyICphcnBoZHIsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTgzLDcgKzExNyw3IEBACiAJY29uc3QgY2hhciAqYXJwcHRyID0gKGNoYXIgKikoYXJwaGRyICsgMSk7CiAJY29uc3QgY2hhciAqc3JjX2RldmFkZHIsICp0Z3RfZGV2YWRkcjsKIAlfX2JlMzIgc3JjX2lwYWRkciwgdGd0X2lwYWRkcjsKLQlpbnQgaSwgcmV0OworCWxvbmcgcmV0OwogCiAjZGVmaW5lIEZXSU5WKGJvb2wsIGludmZsZykgKChib29sKSBeICEhKGFycGluZm8tPmludmZsYWdzICYgKGludmZsZykpKQogCkBAIC0xNTYsMTAgKzE5MCw3IEBACiAJfQogCiAJLyogTG9vayBmb3IgaWZuYW1lIG1hdGNoZXMuICAqLwotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWjsgaSsrKSB7Ci0JCXJldCB8PSAoaW5kZXZbaV0gXiBhcnBpbmZvLT5pbmlmYWNlW2ldKQotCQkJJiBhcnBpbmZvLT5pbmlmYWNlX21hc2tbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKGluZGV2LCBhcnBpbmZvLT5pbmlmYWNlLCBhcnBpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBBUlBUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTY4LDEwICsxOTksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVo7IGkrKykgewotCQlyZXQgfD0gKG91dGRldltpXSBeIGFycGluZm8tPm91dGlmYWNlW2ldKQotCQkJJiBhcnBpbmZvLT5vdXRpZmFjZV9tYXNrW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShvdXRkZXYsIGFycGluZm8tPm91dGlmYWNlLCBhcnBpbmZvLT5vdXRpZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgQVJQVF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMjIxLDcgKzI0OSw3IEBACiAJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJICAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl07CisJc3RhdGljIGNvbnN0IGNoYXIgbnVsbGRldm5hbWVbSUZOQU1TSVpdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGxvbmcpKSkpOwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAljb25zdCBzdHJ1Y3QgYXJwaGRyICphcnA7CiAJYm9vbCBob3Rkcm9wID0gZmFsc2U7CkBAIC0yMzcsOSArMjY1LDEwIEBACiAJaW5kZXYgPSBpbiA/IGluLT5uYW1lIDogbnVsbGRldm5hbWU7CiAJb3V0ZGV2ID0gb3V0ID8gb3V0LT5uYW1lIDogbnVsbGRldm5hbWU7CiAKLQlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCXJjdV9yZWFkX2xvY2soKTsKKwlwcml2YXRlID0gcmN1X2RlcmVmZXJlbmNlKHRhYmxlLT5wcml2YXRlKTsKKwl0YWJsZV9iYXNlID0gcmN1X2RlcmVmZXJlbmNlKHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCWJhY2sgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+dW5kZXJmbG93W2hvb2tdKTsKIApAQCAtMzExLDcgKzM0MCw4IEBACiAJCQllID0gKHZvaWQgKillICsgZS0+bmV4dF9vZmZzZXQ7CiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7Ci0JcmVhZF91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGhvdGRyb3ApCiAJCXJldHVybiBORl9EUk9QOwpAQCAtNzE0LDExICs3NDQsNjUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHh0X2NvdW50ZXJzICphbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQorCisvKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKKyAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLworc3RhdGljIGludAorYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCisJCSAgICAgdW5zaWduZWQgaW50ICppKQoreworCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCisvKiBUYWtlIHZhbHVlcyBmcm9tIGNvdW50ZXJzIGFuZCBhZGQgdGhlbSBiYWNrIG9udG8gdGhlIGN1cnJlbnQgY3B1ICovCitzdGF0aWMgdm9pZCBwdXRfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCisJCQkgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCit7CisJdW5zaWduZWQgaW50IGksIGNwdTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaSA9IDA7CisJQVJQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKKwkJCSAgdC0+c2l6ZSwKKwkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCisJCQkgIGNvdW50ZXJzLAorCQkJICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGFycHRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJQVJQVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgIHplcm9fZW50cnlfY291bnRlciwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHh0X2NvdW50ZXJzICphbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBjb3VudGVyc2l6ZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbzsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICogKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTcyOCwxNCArODEyLDMwIEBACiAJY291bnRlcnMgPSB2bWFsbG9jX25vZGUoY291bnRlcnNpemUsIG51bWFfbm9kZV9pZCgpKTsKIAogCWlmIChjb3VudGVycyA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBub21lbTsKIAotCS8qIEZpcnN0LCBzdW0gY291bnRlcnMuLi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7Ci0JZ2V0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlpbmZvID0geHRfYWxsb2NfdGFibGVfaW5mbyhwcml2YXRlLT5zaXplKTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZnJlZV9jb3VudGVyczsKKworCWNsb25lX2NvdW50ZXJzKGluZm8sIHByaXZhdGUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOworCXh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHByaXZhdGUsIGluZm8pOworCXN5bmNocm9uaXplX25ldCgpOwkvKiBXYWl0IHVudGlsIHNtb2tlIGhhcyBjbGVhcmVkICovCisKKwlnZXRfY291bnRlcnMoaW5mbywgY291bnRlcnMpOworCXB1dF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisKKwl4dF9mcmVlX3RhYmxlX2luZm8oaW5mbyk7CiAKIAlyZXR1cm4gY291bnRlcnM7CisKKyBmcmVlX2NvdW50ZXJzOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBub21lbToKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKQEAgLTEwNzUsMjAgKzExNzUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICppKQotewotCi0JQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCiAJCQkgICBpbnQgY29tcGF0KQogewpAQCAtMTE0OCwxMyArMTIzNCwxNCBAQAogCQlnb3RvIGZyZWU7CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdC0+bG9jayk7CiAJcHJpdmF0ZSA9IHQtPnByaXZhdGU7CiAJaWYgKHByaXZhdGUtPm51bWJlciAhPSBudW1fY291bnRlcnMpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2tfdXBfZnJlZTsKIAl9CiAKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpID0gMDsKIAkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLwogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xMTYzLDggKzEyNTAsMTAgQEAKIAkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICAgcGFkZGMsCiAJCQkgICAmaSk7CisJcHJlZW1wdF9lbmFibGUoKTsKICB1bmxvY2tfdXBfZnJlZToKLQl3cml0ZV91bmxvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X3VubG9jaygmdC0+bG9jayk7CisKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwppbmRleCBlMDkxMTg3Li42ZWNmZGFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCkBAIC00OCw4ICs0OCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAotCS5wcml2YXRlCT0gTlVMTCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fQVJQLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggNDMyY2U5ZC4uNWYyMmM5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpAQCAtNjQwLDYgKzY0MSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjQgcGFja2V0IHF1ZXVlIGhhbmRsZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UTyhQRl9ORVRMSU5LLCBORVRMSU5LX0ZJUkVXQUxMKTsKIAogbW9kdWxlX2luaXQoaXBfcXVldWVfaW5pdCk7CiBtb2R1bGVfZXhpdChpcF9xdWV1ZV9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCBlZjhiNmNhLi5lNTI5NGFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC03NCw2ICs3NCwyNSBAQAogCiAgICBIZW5jZSB0aGUgc3RhcnQgb2YgYW55IHRhYmxlIGlzIGdpdmVuIGJ5IGdldF90YWJsZSgpIGJlbG93LiAgKi8KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaWZuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqX2EsIGNvbnN0IGNoYXIgKl9iLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfbWFzaykKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICphID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYTsKKwljb25zdCB1bnNpZ25lZCBsb25nICpiID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfYjsKKwljb25zdCB1bnNpZ25lZCBsb25nICptYXNrID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilfbWFzazsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXJldCA9IChhWzBdIF4gYlswXSkgJiBtYXNrWzBdOworCWlmIChJRk5BTVNJWiA+IHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzFdIF4gYlsxXSkgJiBtYXNrWzFdOworCWlmIChJRk5BTVNJWiA+IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsyXSBeIGJbMl0pICYgbWFza1syXTsKKwlpZiAoSUZOQU1TSVogPiAzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbM10gXiBiWzNdKSAmIG1hc2tbM107CisJQlVJTERfQlVHX09OKElGTkFNU0laID4gNCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJcmV0dXJuIHJldDsKK30KKwogLyogUmV0dXJucyB3aGV0aGVyIG1hdGNoZXMgcnVsZSBvciBub3QuICovCiAvKiBQZXJmb3JtYW5jZSBjcml0aWNhbCAtIGNhbGxlZCBmb3IgZXZlcnkgcGFja2V0ICovCiBzdGF0aWMgaW5saW5lIGJvb2wKQEAgLTgzLDcgKzEwMiw2IEBACiAJCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwaW5mbywKIAkJaW50IGlzZnJhZykKIHsKLQlzaXplX3QgaTsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAogI2RlZmluZSBGV0lOVihib29sLCBpbnZmbGcpICgoYm9vbCkgXiAhIShpcGluZm8tPmludmZsYWdzICYgKGludmZsZykpKQpAQCAtMTAzLDEyICsxMjEsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogTG9vayBmb3IgaWZuYW1lIG1hdGNoZXM7IHRoaXMgc2hvdWxkIHVucm9sbCBuaWNlbHkuICovCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopaW5kZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+aW5pZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+aW5pZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGlwaW5mby0+aW5pZmFjZSwgaXBpbmZvLT5pbmlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUFRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMTcsMTEgKzEzMCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwaW5mby0+b3V0aWZhY2UpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPm91dGlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShvdXRkZXYsIGlwaW5mby0+b3V0aWZhY2UsIGlwaW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQVF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMzQ3LDEwICszNTYsMTIgQEAKIAltdHBhci5mYW1pbHkgID0gdGdwYXIuZmFtaWx5ID0gTkZQUk9UT19JUFY0OwogCXRncGFyLmhvb2tudW0gPSBob29rOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAKIAkvKiBGb3IgcmV0dXJuIGZyb20gYnVpbHRpbiBjaGFpbiAqLwpAQCAtNDQ1LDcgKzQ1Niw3IEBACiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7CiAKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTkyNCwxMyArOTM1LDY4IEBACiAJCQkJICBjb3VudGVycywKIAkJCQkgICZpKTsKIAl9CisKK30KKworLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCisgKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KK3N0YXRpYyBpbnQKK2FkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGFkZG1lW10sCisJCSAgICAgdW5zaWduZWQgaW50ICppKQoreworCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOworCisJKCppKSsrOworCXJldHVybiAwOworfQorCisvKiBUYWtlIHZhbHVlcyBmcm9tIGNvdW50ZXJzIGFuZCBhZGQgdGhlbSBiYWNrIG9udG8gdGhlIGN1cnJlbnQgY3B1ICovCitzdGF0aWMgdm9pZCBwdXRfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCisJCQkgY29uc3Qgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzW10pCit7CisJdW5zaWduZWQgaW50IGksIGNwdTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaSA9IDA7CisJSVBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICB0LT5zaXplLAorCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKKwkJCSAgY291bnRlcnMsCisJCQkgICZpKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludAoremVyb19lbnRyeV9jb3VudGVyKHN0cnVjdCBpcHRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJSVBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllc1tjcHVdLCBuZXdpbmZvLT5zaXplLAorCQkJCSAgemVyb19lbnRyeV9jb3VudGVyLCBOVUxMKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKiBhbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBjb3VudGVyc2l6ZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbzsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICAgKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTkzOSwxNCArMTAwNSwzMCBAQAogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CiAKIAlpZiAoY291bnRlcnMgPT0gTlVMTCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gbm9tZW07CiAKLQkvKiBGaXJzdCwgc3VtIGNvdW50ZXJzLi4uICovCi0Jd3JpdGVfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCWdldF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJaW5mbyA9IHh0X2FsbG9jX3RhYmxlX2luZm8ocHJpdmF0ZS0+c2l6ZSk7CisJaWYgKCFpbmZvKQorCQlnb3RvIGZyZWVfY291bnRlcnM7CisKKwljbG9uZV9jb3VudGVycyhpbmZvLCBwcml2YXRlKTsKKworCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKwl4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShwcml2YXRlLCBpbmZvKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsJLyogV2FpdCB1bnRpbCBzbW9rZSBoYXMgY2xlYXJlZCAqLworCisJZ2V0X2NvdW50ZXJzKGluZm8sIGNvdW50ZXJzKTsKKwlwdXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOworCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworCisJeHRfZnJlZV90YWJsZV9pbmZvKGluZm8pOwogCiAJcmV0dXJuIGNvdW50ZXJzOworCisgZnJlZV9jb3VudGVyczoKKwl2ZnJlZShjb3VudGVycyk7Cisgbm9tZW06CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzMTIsMjcgKzEzOTQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYwotICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCi1zdGF0aWMgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLAotCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLSNpZiAwCi0JZHVwcmludGYoImFkZF9jb3VudGVyOiBFbnRyeSAldSAlbHUvJWx1ICsgJWx1LyVsdVxuIiwKLQkJICppLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpZS0+Y291bnRlcnMuYmNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRtZVsqaV0ucGNudCwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRtZVsqaV0uYmNudCk7Ci0jZW5kaWYKLQotCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBhZGRtZVsqaV0uYmNudCwgYWRkbWVbKmldLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW50CiBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKQEAgLTEzOTMsMTMgKzE0NTQsMTQgQEAKIAkJZ290byBmcmVlOwogCX0KIAotCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOworCW11dGV4X2xvY2soJnQtPmxvY2spOwogCXByaXZhdGUgPSB0LT5wcml2YXRlOwogCWlmIChwcml2YXRlLT5udW1iZXIgIT0gbnVtX2NvdW50ZXJzKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5sb2NrX3VwX2ZyZWU7CiAJfQogCisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaSA9IDA7CiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTE0MDgsOCArMTQ3MCw5IEBACiAJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAogCQkJICBwYWRkYywKIAkJCSAgJmkpOworCXByZWVtcHRfZW5hYmxlKCk7CiAgdW5sb2NrX3VwX2ZyZWU6Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOwogCXh0X3RhYmxlX3VubG9jayh0KTsKIAltb2R1bGVfcHV0KHQtPm1lKTsKICBmcmVlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKaW5kZXggMjdhNzhmYi4uYWNjNDRjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBpcHRfbG9nX2xvZ2dlciA9eworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X2xvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXB0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcHRfbG9nX3BhY2tldCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3NmFhZS4uMDAwMDAwMAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogVFRMIG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIElQIHRhYmxlcwotICogKEMpIDIwMDAsMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UVEwuaD4KLQotTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjQgVFRMIGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotdHRsX3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQljb25zdCBzdHJ1Y3QgaXB0X1RUTF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X3R0bDsKLQotCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCi0JCXJldHVybiBORl9EUk9QOwotCi0JaXBoID0gaXBfaGRyKHNrYik7Ci0KLQlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKLQkJY2FzZSBJUFRfVFRMX1NFVDoKLQkJCW5ld190dGwgPSBpbmZvLT50dGw7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFRfVFRMX0lOQzoKLQkJCW5ld190dGwgPSBpcGgtPnR0bCArIGluZm8tPnR0bDsKLQkJCWlmIChuZXdfdHRsID4gMjU1KQotCQkJCW5ld190dGwgPSAyNTU7Ci0JCQlicmVhazsKLQkJY2FzZSBJUFRfVFRMX0RFQzoKLQkJCW5ld190dGwgPSBpcGgtPnR0bCAtIGluZm8tPnR0bDsKLQkJCWlmIChuZXdfdHRsIDwgMCkKLQkJCQluZXdfdHRsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X3R0bCA9IGlwaC0+dHRsOwotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKG5ld190dGwgIT0gaXBoLT50dGwpIHsKLQkJY3N1bV9yZXBsYWNlMigmaXBoLT5jaGVjaywgaHRvbnMoaXBoLT50dGwgPDwgOCksCi0JCQkJCSAgIGh0b25zKG5ld190dGwgPDwgOCkpOwotCQlpcGgtPnR0bCA9IG5ld190dGw7Ci0JfQotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCB0dGxfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQVF9UVExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfVFRMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQVF9UVExfU0VUICYmIGluZm8tPnR0bCA9PSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IHR0bF90Z19yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIlRUTCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjQsCi0JLnRhcmdldCAJPSB0dGxfdGcsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9UVExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5IAk9IHR0bF90Z19jaGVjaywKLQkubWUgCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHRsX3RnX2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZ0dGxfdGdfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHR0bF90Z19leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJnR0bF90Z19yZWcpOwotfQotCi1tb2R1bGVfaW5pdCh0dGxfdGdfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dGxfdGdfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDE4YTI4MjYuLmQzMmNjNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC0zNzksNyArMzc5LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcHRfdWxvZ19sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcHRfdWxvZ19sb2dnZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiaXB0X1VMT0ciLAogCS5sb2dmbgkJPSBpcHRfbG9nZm4sCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5N2YxY2IuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVFRMCi0gKgotICogKEMpIDIwMDAsMjAwMSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3R0bC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogSVB2NCBUVEwgZmllbGQgbWF0Y2giKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGJvb2wgdHRsX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfdHRsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCB1OCB0dGwgPSBpcF9oZHIoc2tiKS0+dHRsOwotCi0Jc3dpdGNoIChpbmZvLT5tb2RlKSB7Ci0JCWNhc2UgSVBUX1RUTF9FUToKLQkJCXJldHVybiB0dGwgPT0gaW5mby0+dHRsOwotCQljYXNlIElQVF9UVExfTkU6Ci0JCQlyZXR1cm4gdHRsICE9IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX0xUOgotCQkJcmV0dXJuIHR0bCA8IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX0dUOgotCQkJcmV0dXJuIHR0bCA+IGluZm8tPnR0bDsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF90dGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggdHRsX210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJ0dGwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCS5tYXRjaAkJPSB0dGxfbXQsCi0JLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X3R0bF9pbmZvKSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0dGxfbXRfaW5pdCh2b2lkKQotewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmdHRsX210X3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dGxfbXRfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnR0bF9tdF9yZWcpOwotfQotCi1tb2R1bGVfaW5pdCh0dGxfbXRfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0dGxfbXRfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCmluZGV4IDUyY2I2OTMuLmMzMGE5NjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jCkBAIC01Niw3ICs1Niw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IDM5MjlkMjAuLjQwODc2MTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC02Nyw3ICs2Nyw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X21hbmdsZXIubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKaW5kZXggN2Y2NWQxOC4uZTUzNTZkYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKQEAgLTM5LDcgKzM5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKIAkubmFtZSA9ICJyYXciLAogCS52YWxpZF9ob29rcyA9ICBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCmluZGV4IGE1MmEzNWYuLjI5YWI2MzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwpAQCAtNjAsNyArNjAsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChzZWN1cml0eV90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNGJlYjA0Zi4uOGI2ODFmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xMjAsOCArMTIwLDEwIEBACiAJCXR5cGVvZihuZl9uYXRfc2VxX2FkanVzdF9ob29rKSBzZXFfYWRqdXN0OwogCiAJCXNlcV9hZGp1c3QgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NlcV9hZGp1c3RfaG9vayk7Ci0JCWlmICghc2VxX2FkanVzdCB8fCAhc2VxX2FkanVzdChza2IsIGN0LCBjdGluZm8pKQorCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkgeworCQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5mX2N0X25ldChjdCksIGRyb3ApOwogCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KIAl9CiBvdXQ6CiAJLyogV2UndmUgc2VlbiBpdCBjb21pbmcgb3V0IHRoZSBvdGhlciBzaWRlOiBjb25maXJtIGl0ICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCmluZGV4IGE3ZWIwNDcuLjYzNDhhNzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKG5hdF90YWJsZS5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwppbmRleCAxODJmODQ1Li5kOTUyMWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpLAorCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFNOTVBfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogfTsKIApAQCAtMTMwMiw3ICsxMzAyLDcgQEAKIAkuZXhwZWN0X3BvbGljeQkJPSAmc25tcF9leHBfcG9saWN5LAogCS5uYW1lCQkJPSAic25tcF90cmFwIiwKIAkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFNOTVBfVFJBUF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihTTk1QX1RSQVBfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvYy5jIGIvbmV0L2lwdjQvcHJvYy5jCmluZGV4IGViNjJlNTguLmNmMGNkZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Byb2MuYworKysgYi9uZXQvaXB2NC9wcm9jLmMKQEAgLTU0LDggKzU0LDggQEAKIAlpbnQgb3JwaGFucywgc29ja2V0czsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KSwKLQlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAorCW9ycGhhbnMgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnRjcF9vcnBoYW5fY291bnQpOworCXNvY2tldHMgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnRjcF9zb2NrZXRzX2FsbG9jYXRlZCk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiAKIAlzb2NrZXRfc2VxX3Nob3coc2VxKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggZGZmOGJjNC4uZjc3NDY1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTQ5Myw2ICs0OTMsNyBAQAogCiAJaXBjLmFkZHIgPSBpbmV0LT5zYWRkcjsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTdmNzExNS4uNWNhZWU2MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmdjID0JCQlydF9nYXJiYWdlX2NvbGxlY3QsCiAJLmNoZWNrID0JCWlwdjRfZHN0X2NoZWNrLAogCS5kZXN0cm95ID0JCWlwdjRfZHN0X2Rlc3Ryb3ksCkBAIC0yNjk2LDcgKzI2OTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVULAotCS5wcm90b2NvbAkJPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcHY0X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCkBAIC0yNzc5LDcgKzI3NzksOCBAQAogCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIHJwLCBmbHAsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCitzdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZXZlbnQsCiAJCQlpbnQgbm93YWl0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2ItPnJ0YWJsZTsKQEAgLTI4NDQsOCArMjg0NSw4IEBACiAJCV9fYmUzMiBkc3QgPSBydC0+cnRfZHN0OwogCiAJCWlmIChpcHY0X2lzX211bHRpY2FzdChkc3QpICYmICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChkc3QpICYmCi0JCSAgICBJUFY0X0RFVkNPTkZfQUxMKCZpbml0X25ldCwgTUNfRk9SV0FSRElORykpIHsKLQkJCWludCBlcnIgPSBpcG1yX2dldF9yb3V0ZShza2IsIHIsIG5vd2FpdCk7CisJCSAgICBJUFY0X0RFVkNPTkZfQUxMKG5ldCwgTUNfRk9SV0FSRElORykpIHsKKwkJCWludCBlcnIgPSBpcG1yX2dldF9yb3V0ZShuZXQsIHNrYiwgciwgbm93YWl0KTsKIAkJCWlmIChlcnIgPD0gMCkgewogCQkJCWlmICghbm93YWl0KSB7CiAJCQkJCWlmIChlcnIgPT0gMCkKQEAgLTI5NTAsNyArMjk1MSw3IEBACiAJaWYgKHJ0bS0+cnRtX2ZsYWdzICYgUlRNX0ZfTk9USUZZKQogCQlydC0+cnRfZmxhZ3MgfD0gUlRDRl9OT1RJRlk7CiAKLQllcnIgPSBydF9maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwKKwllcnIgPSBydF9maWxsX2luZm8obmV0LCBza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLAogCQkJICAgUlRNX05FV1JPVVRFLCAwLCAwKTsKIAlpZiAoZXJyIDw9IDApCiAJCWdvdG8gZXJyb3V0X2ZyZWU7CkBAIC0yOTg4LDcgKzI5ODksNyBAQAogCQkJaWYgKHJ0X2lzX2V4cGlyZWQocnQpKQogCQkJCWNvbnRpbnVlOwogCQkJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7Ci0JCQlpZiAocnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQlpZiAocnRfZmlsbF9pbmZvKG5ldCwgc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJIGNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFLAogCQkJCQkgMSwgTkxNX0ZfTVVMVEkpIDw9IDApIHsKIAkJCQlkc3RfcmVsZWFzZSh4Y2hnKCZza2ItPmRzdCwgTlVMTCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA3NmIxNDhiLi4yNDUxYWViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtNjYxLDYgKzY2MSw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94bWl0X3NpemVfZ29hbChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtc3Nfbm93LAorCQkJCSAgICAgICBpbnQgbGFyZ2VfYWxsb3dlZCkKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwl1MzIgeG1pdF9zaXplX2dvYWwsIG9sZF9zaXplX2dvYWw7CisKKwl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7CisKKwlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkgeworCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KKwkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KKwkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCisJCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOworCisJCXhtaXRfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCB4bWl0X3NpemVfZ29hbCk7CisKKwkJLyogV2UgdHJ5IGhhcmQgdG8gYXZvaWQgZGl2aWRlcyBoZXJlICovCisJCW9sZF9zaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWxfc2VncyAqIG1zc19ub3c7CisKKwkJaWYgKGxpa2VseShvbGRfc2l6ZV9nb2FsIDw9IHhtaXRfc2l6ZV9nb2FsICYmCisJCQkgICBvbGRfc2l6ZV9nb2FsICsgbXNzX25vdyA+IHhtaXRfc2l6ZV9nb2FsKSkgeworCQkJeG1pdF9zaXplX2dvYWwgPSBvbGRfc2l6ZV9nb2FsOworCQl9IGVsc2UgeworCQkJdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgPSB4bWl0X3NpemVfZ29hbCAvIG1zc19ub3c7CisJCQl4bWl0X3NpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbF9zZWdzICogbXNzX25vdzsKKwkJfQorCX0KKworCXJldHVybiBtYXgoeG1pdF9zaXplX2dvYWwsIG1zc19ub3cpOworfQorCitzdGF0aWMgaW50IHRjcF9zZW5kX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZV9nb2FsLCBpbnQgZmxhZ3MpCit7CisJaW50IG1zc19ub3c7CisKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKKwkqc2l6ZV9nb2FsID0gdGNwX3htaXRfc2l6ZV9nb2FsKHNrLCBtc3Nfbm93LCAhKGZsYWdzICYgTVNHX09PQikpOworCisJcmV0dXJuIG1zc19ub3c7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGRvX3RjcF9zZW5kcGFnZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgcG9mZnNldCwKIAkJCSBzaXplX3QgcHNpemUsIGludCBmbGFncykKIHsKQEAgLTY3NywxMyArNzE4LDEyIEBACiAKIAljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwogCi0JbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0Jc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAljb3BpZWQgPSAwOwogCiAJZXJyID0gLUVQSVBFOwogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJZ290byBkb19lcnJvcjsKKwkJZ290byBvdXRfZXJyOwogCiAJd2hpbGUgKHBzaXplID4gMCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spOwpAQCAtNzYxLDggKzgwMSw3IEBACiAJCWlmICgoZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCAmdGltZW8pKSAhPSAwKQogCQkJZ290byBkb19lcnJvcjsKIAotCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQkJc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsOworCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJfQogCiBvdXQ6CkBAIC04NDQsOCArODgzLDcgQEAKIAkvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAKIAkvKiBPayBjb21tZW5jZSBzZW5kaW5nLiAqLwogCWlvdmxlbiA9IG1zZy0+bXNnX2lvdmxlbjsKQEAgLTg1NCw3ICs4OTIsNyBAQAogCiAJZXJyID0gLUVQSVBFOwogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJZ290byBkb19lcnJvcjsKKwkJZ290byBvdXRfZXJyOwogCiAJd2hpbGUgKC0taW92bGVuID49IDApIHsKIAkJaW50IHNlZ2xlbiA9IGlvdi0+aW92X2xlbjsKQEAgLTEwMDcsOCArMTA0NSw3IEBACiAJCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKIAkJCQlnb3RvIGRvX2Vycm9yOwogCi0JCQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQkJCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwkJCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAkJfQogCX0KIApAQCAtMTA0NSw4ICsxMDgyLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHRjcF9yZWN2X3VyZyhzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8sCi0JCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncywKLQkJCWludCAqYWRkcl9sZW4pCisJCQlzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIApAQCAtMTY2MSw3ICsxNjk3LDcgQEAKIAlyZXR1cm4gZXJyOwogCiByZWN2X3VyZzoKLQllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MsIGFkZHJfbGVuKTsKKwllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MpOwogCWdvdG8gb3V0OwogfQogCkBAIC0yNDc4LDIzICsyNTE0LDIzIEBACiAJc3RydWN0IHRjcGhkciAqdGgyOwogCXVuc2lnbmVkIGludCB0aGxlbjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHRvdGFsOwogCXVuc2lnbmVkIGludCBtc3MgPSAxOwogCWludCBmbHVzaCA9IDE7CisJaW50IGk7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnRoKSkpCisJdGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHNpemVvZigqdGgpKTsKKwlpZiAodW5saWtlbHkoIXRoKSkKIAkJZ290byBvdXQ7CiAKLQl0aCA9IHRjcF9oZHIoc2tiKTsKIAl0aGxlbiA9IHRoLT5kb2ZmICogNDsKIAlpZiAodGhsZW4gPCBzaXplb2YoKnRoKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aGxlbikpCisJdGggPSBza2JfZ3JvX2hlYWRlcihza2IsIHRobGVuKTsKKwlpZiAodW5saWtlbHkoIXRoKSkKIAkJZ290byBvdXQ7CiAKLQl0aCA9IHRjcF9oZHIoc2tiKTsKLQlfX3NrYl9wdWxsKHNrYiwgdGhsZW4pOworCXNrYl9ncm9fcHVsbChza2IsIHRobGVuKTsKIAogCWZsYWdzID0gdGNwX2ZsYWdfd29yZCh0aCk7CiAKQEAgLTI1MDQsNyArMjU0MCw3IEBACiAKIAkJdGgyID0gdGNwX2hkcihwKTsKIAotCQlpZiAodGgtPnNvdXJjZSAhPSB0aDItPnNvdXJjZSB8fCB0aC0+ZGVzdCAhPSB0aDItPmRlc3QpIHsKKwkJaWYgKCh0aC0+c291cmNlIF4gdGgyLT5zb3VyY2UpIHwgKHRoLT5kZXN0IF4gdGgyLT5kZXN0KSkgewogCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDA7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjUxOSwxNCArMjU1NSwxNSBAQAogCWZsdXNoIHw9IGZsYWdzICYgVENQX0ZMQUdfQ1dSOwogCWZsdXNoIHw9IChmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSkgJgogCQkgIH4oVENQX0ZMQUdfQ1dSIHwgVENQX0ZMQUdfRklOIHwgVENQX0ZMQUdfUFNIKTsKLQlmbHVzaCB8PSB0aC0+YWNrX3NlcSAhPSB0aDItPmFja19zZXEgfHwgdGgtPndpbmRvdyAhPSB0aDItPndpbmRvdzsKLQlmbHVzaCB8PSBtZW1jbXAodGggKyAxLCB0aDIgKyAxLCB0aGxlbiAtIHNpemVvZigqdGgpKTsKKwlmbHVzaCB8PSAodGgtPmFja19zZXEgXiB0aDItPmFja19zZXEpIHwgKHRoLT53aW5kb3cgXiB0aDItPndpbmRvdyk7CisJZm9yIChpID0gc2l6ZW9mKCp0aCk7ICFmbHVzaCAmJiBpIDwgdGhsZW47IGkgKz0gNCkKKwkJZmx1c2ggfD0gKih1MzIgKikoKHU4ICopdGggKyBpKSBeCisJCQkgKih1MzIgKikoKHU4ICopdGgyICsgaSk7CiAKLQl0b3RhbCA9IHAtPmxlbjsKIAltc3MgPSBza2Jfc2hpbmZvKHApLT5nc29fc2l6ZTsKIAotCWZsdXNoIHw9IHNrYi0+bGVuID4gbXNzIHx8IHNrYi0+bGVuIDw9IDA7Ci0JZmx1c2ggfD0gbnRvaGwodGgyLT5zZXEpICsgdG90YWwgIT0gbnRvaGwodGgtPnNlcSk7CisJZmx1c2ggfD0gKHNrYl9ncm9fbGVuKHNrYikgPiBtc3MpIHwgIXNrYl9ncm9fbGVuKHNrYik7CisJZmx1c2ggfD0gKG50b2hsKHRoMi0+c2VxKSArIHNrYl9ncm9fbGVuKHApKSBeIG50b2hsKHRoLT5zZXEpOwogCiAJaWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZShoZWFkLCBza2IpKSB7CiAJCW1zcyA9IDE7CkBAIC0yNTM4LDcgKzI1NzUsNyBAQAogCXRjcF9mbGFnX3dvcmQodGgyKSB8PSBmbGFncyAmIChUQ1BfRkxBR19GSU4gfCBUQ1BfRkxBR19QU0gpOwogCiBvdXRfY2hlY2tfZmluYWw6Ci0JZmx1c2ggPSBza2ItPmxlbiA8IG1zczsKKwlmbHVzaCA9IHNrYl9ncm9fbGVuKHNrYikgPCBtc3M7CiAJZmx1c2ggfD0gZmxhZ3MgJiAoVENQX0ZMQUdfVVJHIHwgVENQX0ZMQUdfUFNIIHwgVENQX0ZMQUdfUlNUIHwKIAkJCSAgVENQX0ZMQUdfU1lOIHwgVENQX0ZMQUdfRklOKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IDdlYjc2MzYuLjNiNTNmZDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTE0OSwxNiArMTQ5LDcgQEAKIAkJdGNwX3Nsb3dfc3RhcnQodHApOwogCWVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA0ZWM1YjRlLi5lOTJiZWI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTMzNiw2ICszMzYsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9zbG93X3N0YXJ0KTsKIAorLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKG9yIGFsdGVybmF0aXZlIHcpICovCit2b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3KQoreworCWlmICh0cC0+c25kX2N3bmRfY250ID49IHcpIHsKKwkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCXRwLT5zbmRfY3duZCsrOworCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl9IGVsc2UgeworCQl0cC0+c25kX2N3bmRfY250Kys7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodGNwX2NvbmdfYXZvaWRfYWkpOworCiAvKgogICogVENQIFJlbm8gY29uZ2VzdGlvbiBjb250cm9sCiAgKiBUaGlzIGlzIHNwZWNpYWwgY2FzZSB1c2VkIGZvciBmYWxsYmFjayBhcyB3ZWxsLgpAQCAtMzY1LDEzICszNzgsNyBAQAogCQkJCXRwLT5zbmRfY3duZCsrOwogCQl9CiAJfSBlbHNlIHsKLQkJLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19jb25nX2F2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggZWU0NjdlYy4uNzFkNWYyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTI5NCwxNiArMjk0LDcgQEAKIAkJdGNwX3Nsb3dfc3RhcnQodHApOwogCX0gZWxzZSB7CiAJCWJpY3RjcF91cGRhdGUoY2EsIHRwLT5zbmRfY3duZCk7Ci0KLQkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KLQkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKLQkJICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IGNhLT5jbnQpIHsKLQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJdHAtPnNuZF9jd25kKys7Ci0JCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfSBlbHNlCi0JCQl0cC0+c25kX2N3bmRfY250Kys7CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBjYS0+Y250KTsKIAl9CiAKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9odGNwLmMgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCmluZGV4IDkzNzU0OWIuLjI2ZDVjN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9odGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwpAQCAtMTE1LDggKzExNSw3IEBACiAJCXJldHVybjsKIAogCS8qIGFjaGlldmVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb25zICovCi0JaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gJiYKLQkgICAgaWNzay0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfRGlzb3JkZXIpIHsKKwlpZiAoISgoMSA8PCBpY3NrLT5pY3NrX2NhX3N0YXRlKSAmIChUQ1BGX0NBX09wZW4gfCBUQ1BGX0NBX0Rpc29yZGVyKSkpIHsKIAkJY2EtPnBhY2tldGNvdW50ID0gMDsKIAkJY2EtPmxhc3R0aW1lID0gbm93OwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGMyODk3NmE3Li4yYmM4ZTI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KQEAgLTExNzgsMTAgKzExNzksMTggQEAKIAkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYWZ0ZXIocmVjZWl2ZWRfdXB0bywgYWNrX3NlcSkgJiYKLQkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwKLQkJICAgICAhYmVmb3JlKHJlY2VpdmVkX3VwdG8sCi0JCQkgICAgIGFja19zZXEgKyB0cC0+cmVvcmRlcmluZyAqIHRwLT5tc3NfY2FjaGUpKSkgeworCQkvKiBUT0RPOiBXZSB3b3VsZCBsaWtlIHRvIGdldCByaWQgb2YgdGNwX2lzX2ZhY2sodHApIG9ubHkKKwkJICogY29uc3RyYWludCBoZXJlIChzZWUgYWJvdmUpIGJ1dCBmaWd1cmluZyBvdXQgdGhhdCBhdAorCQkgKiBsZWFzdCB0cC0+cmVvcmRlcmluZyBTQUNLIGJsb2NrcyByZXNpZGUgYmV0d2VlbiBhY2tfc2VxCisJCSAqIGFuZCByZWNlaXZlZF91cHRvIGlzIG5vdCBlYXN5IHRhc2sgdG8gZG8gY2hlYXBseSB3aXRoCisJCSAqIHRoZSBhdmFpbGFibGUgZGF0YXN0cnVjdHVyZXMuCisJCSAqCisJCSAqIFdoZXRoZXIgRkFDSyBzaG91bGQgY2hlY2sgaGVyZSBmb3IgdHAtPnJlb3JkZXJpbmcgc2VncworCQkgKiBpbi1iZXR3ZWVuIG9uZSBjb3VsZCBhcmd1ZSBmb3IgZWl0aGVyIHdheSAoaXQgd291bGQgYmUKKwkJICogcmF0aGVyIHNpbXBsZSB0byBpbXBsZW1lbnQgYXMgd2UgY291bGQgY291bnQgZmFja19jb3VudAorCQkgKiBkdXJpbmcgdGhlIHdhbGsgYW5kIGRvIHRwLT5mYWNrZXRzX291dCAtIGZhY2tfY291bnQpLgorCQkgKi8KKwkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIApAQCAtMTc5NCwxMSArMTgwMyw3IEBACiAJZm9yIChpID0gdXNlZF9zYWNrcyAtIDE7IGkgPiAwOyBpLS0pIHsKIAkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgewogCQkJaWYgKGFmdGVyKHNwW2pdLnN0YXJ0X3NlcSwgc3BbaiArIDFdLnN0YXJ0X3NlcSkpIHsKLQkJCQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgdG1wOwotCi0JCQkJdG1wID0gc3Bbal07Ci0JCQkJc3Bbal0gPSBzcFtqICsgMV07Ci0JCQkJc3BbaiArIDFdID0gdG1wOworCQkJCXN3YXAoc3Bbal0sIHNwW2ogKyAxXSk7CiAKIAkJCQkvKiBUcmFjayB3aGVyZSB0aGUgZmlyc3QgU0FDSyBibG9jayBnb2VzIHRvICovCiAJCQkJaWYgKGogPT0gZmlyc3Rfc2Fja19pbmRleCkKQEAgLTI0NTMsNiArMjQ1OCw0NCBAQAogCXJldHVybiAwOwogfQogCisvKiBOZXcgaGV1cmlzdGljczogaXQgaXMgcG9zc2libGUgb25seSBhZnRlciB3ZSBzd2l0Y2hlZCB0byByZXN0YXJ0IHRpbWVyCisgKiBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuIEhlbmNlLCB3ZSBjYW4gZGV0ZWN0IHRpbWVkIG91dCBwYWNrZXRzCisgKiBkdXJpbmcgZmFzdCByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgorICoKKyAqIFVzZWZ1bG5lc3Mgb2YgdGhpcyBhcyBpcyB2ZXJ5IHF1ZXN0aW9uYWJsZSwgc2luY2Ugd2Ugc2hvdWxkIGtub3cgd2hpY2ggb2YKKyAqIHRoZSBzZWdtZW50cyBpcyB0aGUgbmV4dCB0byB0aW1lb3V0IHdoaWNoIGlzIHJlbGF0aXZlbHkgZXhwZW5zaXZlIHRvIGZpbmQKKyAqIGluIGdlbmVyYWwgY2FzZSB1bmxlc3Mgd2UgYWRkIHNvbWUgZGF0YSBzdHJ1Y3R1cmUganVzdCBmb3IgdGhhdC4gVGhlCisgKiBjdXJyZW50IGFwcHJvYWNoIGNlcnRhaW5seSB3b24ndCBmaW5kIHRoZSByaWdodCBvbmUgdG9vIG9mdGVuIGFuZCB3aGVuIGl0CisgKiBmaW5hbGx5IGRvZXMgZmluZCBfc29tZXRoaW5nXyBpdCB1c3VhbGx5IG1hcmtzIGxhcmdlIHBhcnQgb2YgdGhlIHdpbmRvdworICogcmlnaHQgYXdheSAoYmVjYXVzZSBhIHJldHJhbnNtaXNzaW9uIHdpdGggYSBsYXJnZXIgdGltZXN0YW1wIGJsb2NrcyB0aGUKKyAqIGxvb3AgZnJvbSBhZHZhbmNpbmcpLiAtaWoKKyAqLworc3RhdGljIHZvaWQgdGNwX3RpbWVvdXRfc2ticyhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghdGNwX2lzX2ZhY2sodHApIHx8ICF0Y3BfaGVhZF90aW1lZG91dChzaykpCisJCXJldHVybjsKKworCXNrYiA9IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50OworCWlmICh0cC0+c2NvcmVib2FyZF9za2JfaGludCA9PSBOVUxMKQorCQlza2IgPSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7CisKKwl0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQlpZiAoc2tiID09IHRjcF9zZW5kX2hlYWQoc2spKQorCQkJYnJlYWs7CisJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKKwkJCWJyZWFrOworCisJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOworCX0KKworCXRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID0gc2tiOworCisJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Cit9CisKIC8qIE1hcmsgaGVhZCBvZiBxdWV1ZSB1cCBhcyBsb3N0LiBXaXRoIFJGQzM1MTcgU0FDSywgdGhlIHBhY2tldHMgaXMKICAqIGlzIGFnYWluc3Qgc2Fja2VkICJjbnQiLCBvdGhlcndpc2UgaXQncyBhZ2FpbnN0IGZhY2tlZCAiY250IgogICovCkBAIC0yNTI1LDMwICsyNTY4LDcgQEAKIAkJdGNwX21hcmtfaGVhZF9sb3N0KHNrLCBzYWNrZWRfdXB0byk7CiAJfQogCi0JLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQKLQkgKiB0byByZXN0YXJ0IHRpbWVyIGVhY2ggdGltZSB3aGVuIHNvbWV0aGluZyBpcyBBQ0tlZC4KLQkgKiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cyBkdXJpbmcgZmFzdAotCSAqIHJldHJhbnNtaXQgd2l0aG91dCBmYWxsaW5nIHRvIHNsb3cgc3RhcnQuCi0JICovCi0JaWYgKHRjcF9pc19mYWNrKHRwKSAmJiB0Y3BfaGVhZF90aW1lZG91dChzaykpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50Ci0JCQk6IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKTsKLQotCQl0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb20oc2tiLCBzaykgewotCQkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCQlicmVhazsKLQkJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKLQkJCQlicmVhazsKLQotCQkJdGNwX3NrYl9tYXJrX2xvc3QodHAsIHNrYik7Ci0JCX0KLQotCQl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKLQotCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKLQl9CisJdGNwX3RpbWVvdXRfc2ticyhzayk7CiB9CiAKIC8qIENXTkQgbW9kZXJhdGlvbiwgcHJldmVudGluZyBidXJzdHMgZHVlIHRvIHRvbyBiaWcgQUNLcwpAQCAtMjgxMyw3ICsyODMzLDcgQEAKIAlpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgdGNwX210dXBfcHJvYmVfc3VjY2VzcyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwpAQCAtMjg0MSw3ICsyODYxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAl1MzIgcHJpb3JfbG9zdCA9IHRwLT5sb3N0X291dDsKIAogCXRjcF9mb3Jfd3JpdGVfcXVldWUoc2tiLCBzaykgewpAQCAtMzE3OCw3ICszMTk4LDYgQEAKIAogCXdoaWxlICgoc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spKSAmJiBza2IgIT0gdGNwX3NlbmRfaGVhZChzaykpIHsKIAkJc3RydWN0IHRjcF9za2JfY2IgKnNjYiA9IFRDUF9TS0JfQ0Ioc2tiKTsKLQkJdTMyIGVuZF9zZXE7CiAJCXUzMiBhY2tlZF9wY291bnQ7CiAJCXU4IHNhY2tlZCA9IHNjYi0+c2Fja2VkOwogCkBAIC0zMTkzLDE2ICszMjEyLDggQEAKIAkJCQlicmVhazsKIAogCQkJZnVsbHlfYWNrZWQgPSAwOwotCQkJZW5kX3NlcSA9IHRwLT5zbmRfdW5hOwogCQl9IGVsc2UgewogCQkJYWNrZWRfcGNvdW50ID0gdGNwX3NrYl9wY291bnQoc2tiKTsKLQkJCWVuZF9zZXEgPSBzY2ItPmVuZF9zZXE7Ci0JCX0KLQotCQkvKiBNVFUgcHJvYmluZyBjaGVja3MgKi8KLQkJaWYgKGZ1bGx5X2Fja2VkICYmIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplICYmCi0JCSAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCBzY2ItPmVuZF9zZXEpKSB7Ci0JCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrLCBza2IpOwogCQl9CiAKIAkJaWYgKHNhY2tlZCAmIFRDUENCX1JFVFJBTlMpIHsKQEAgLTMyNjcsMjQgKzMyNzgsMjYgQEAKIAkJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzCiAJCQk9IGluZXRfY3NrKHNrKS0+aWNza19jYV9vcHM7CiAKKwkJaWYgKHVubGlrZWx5KGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplICYmCisJCQkgICAgICFhZnRlcih0cC0+bXR1X3Byb2JlLnByb2JlX3NlcV9lbmQsIHRwLT5zbmRfdW5hKSkpIHsKKwkJCXRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc2spOworCQl9CisKIAkJdGNwX2Fja191cGRhdGVfcnR0KHNrLCBmbGFnLCBzZXFfcnR0KTsKIAkJdGNwX3JlYXJtX3J0byhzayk7CiAKIAkJaWYgKHRjcF9pc19yZW5vKHRwKSkgewogCQkJdGNwX3JlbW92ZV9yZW5vX3NhY2tzKHNrLCBwa3RzX2Fja2VkKTsKIAkJfSBlbHNlIHsKKwkJCWludCBkZWx0YTsKKwogCQkJLyogTm9uLXJldHJhbnNtaXR0ZWQgaG9sZSBnb3QgZmlsbGVkPyBUaGF0J3MgcmVvcmRlcmluZyAqLwogCQkJaWYgKHJlb3JkIDwgcHJpb3JfZmFja2V0cykKIAkJCQl0Y3BfdXBkYXRlX3Jlb3JkZXJpbmcoc2ssIHRwLT5mYWNrZXRzX291dCAtIHJlb3JkLCAwKTsKIAotCQkJLyogTm8gbmVlZCB0byBjYXJlIGZvciB1bmRlcmZsb3dzIGhlcmUgYmVjYXVzZQotCQkJICogdGhlIGxvc3Rfc2tiX2hpbnQgZ2V0cyBOVUxMZWQgaWYgd2UncmUgcGFzdCBpdAotCQkJICogKG9yIHNvbWV0aGluZyBub24tdHJpdmlhbCBoYXBwZW5lZCkKLQkJCSAqLwotCQkJaWYgKHRjcF9pc19mYWNrKHRwKSkKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwa3RzX2Fja2VkOwotCQkJZWxzZQotCQkJCXRwLT5sb3N0X2NudF9oaW50IC09IHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJZGVsdGEgPSB0Y3BfaXNfZmFjayh0cCkgPyBwa3RzX2Fja2VkIDoKKwkJCQkJCSAgcHJpb3Jfc2Fja2VkIC0gdHAtPnNhY2tlZF9vdXQ7CisJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBtaW4odHAtPmxvc3RfY250X2hpbnQsIGRlbHRhKTsKIAkJfQogCiAJCXRwLT5mYWNrZXRzX291dCAtPSBtaW4ocGt0c19hY2tlZCwgdHAtPmZhY2tldHNfb3V0KTsKQEAgLTMzOTYsNyArMzQwOSw3IEBACiAKIAlpZiAodGNwX21heV91cGRhdGVfd2luZG93KHRwLCBhY2ssIGFja19zZXEsIG53aW4pKSB7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAogCQlpZiAodHAtPnNuZF93bmQgIT0gbndpbikgewogCQkJdHAtPnNuZF93bmQgPSBud2luOwpAQCAtMzU3MiwxNSArMzU4NSwxOCBAQAogCWludCBwcmlvcl9wYWNrZXRzOwogCWludCBmcnRvX2N3bmQgPSAwOwogCi0JLyogSWYgdGhlIGFjayBpcyBuZXdlciB0aGFuIHNlbnQgb3Igb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCisJLyogSWYgdGhlIGFjayBpcyBvbGRlciB0aGFuIHByZXZpb3VzIGFja3MKIAkgKiB0aGVuIHdlIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQuCiAJICovCi0JaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQotCQlnb3RvIHVuaW50ZXJlc3RpbmdfYWNrOwotCiAJaWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEpKQogCQlnb3RvIG9sZF9hY2s7CiAKKwkvKiBJZiB0aGUgYWNrIGluY2x1ZGVzIGRhdGEgd2UgaGF2ZW4ndCBzZW50IHlldCwgZGlzY2FyZAorCSAqIHRoaXMgc2VnbWVudCAoUkZDNzkzIFNlY3Rpb24gMy45KS4KKwkgKi8KKwlpZiAoYWZ0ZXIoYWNrLCB0cC0+c25kX254dCkpCisJCWdvdG8gaW52YWxpZF9hY2s7CisKIAlpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZmxhZyB8PSBGTEFHX1NORF9VTkFfQURWQU5DRUQ7CiAKQEAgLTM2MDEsNyArMzYxNyw3IEBACiAJCSAqIE5vIG1vcmUgY2hlY2tzIGFyZSByZXF1aXJlZC4KIAkJICogTm90ZSwgd2UgdXNlIHRoZSBmYWN0IHRoYXQgU05ELlVOQT49U05ELldMMi4KIAkJICovCi0JCXRjcF91cGRhdGVfd2wodHAsIGFjaywgYWNrX3NlcSk7CisJCXRjcF91cGRhdGVfd2wodHAsIGFja19zZXEpOwogCQl0cC0+c25kX3VuYSA9IGFjazsKIAkJZmxhZyB8PSBGTEFHX1dJTl9VUERBVEU7CiAKQEAgLTM2NzAsNiArMzY4NiwxMCBAQAogCQl0Y3BfYWNrX3Byb2JlKHNrKTsKIAlyZXR1cm4gMTsKIAoraW52YWxpZF9hY2s6CisJU09DS19ERUJVRyhzaywgIkFjayAldSBhZnRlciAldToldVxuIiwgYWNrLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOworCXJldHVybiAtMTsKKwogb2xkX2FjazoKIAlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQpIHsKIAkJdGNwX3NhY2t0YWdfd3JpdGVfcXVldWUoc2ssIHNrYiwgcHJpb3Jfc25kX3VuYSk7CkBAIC0zNjc3LDggKzM2OTcsNyBAQAogCQkJdGNwX3RyeV9rZWVwX29wZW4oc2spOwogCX0KIAotdW5pbnRlcmVzdGluZ19hY2s6Ci0JU09DS19ERUJVRyhzaywgIkFjayAldSBvdXQgb2YgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlTT0NLX0RFQlVHKHNrLCAiQWNrICV1IGJlZm9yZSAldToldVxuIiwgYWNrLCB0cC0+c25kX3VuYSwgdHAtPnNuZF9ueHQpOwogCXJldHVybiAwOwogfQogCkBAIC0zODY2LDggKzM4ODUsNyBAQAogCQkgKiBOb3Qgb25seSwgYWxzbyBpdCBvY2N1cnMgZm9yIGV4cGlyZWQgdGltZXN0YW1wcy4KIAkJICovCiAKLQkJaWYgKChzMzIpKHRwLT5yeF9vcHQucmN2X3RzdmFsIC0gdHAtPnJ4X29wdC50c19yZWNlbnQpID49IDAgfHwKLQkJICAgZ2V0X3NlY29uZHMoKSA+PSB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykKKwkJaWYgKHRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCAwKSkKIAkJCXRjcF9zdG9yZV90c19yZWNlbnQodHApOwogCX0KIH0KQEAgLTM5MTksOSArMzkzNyw5IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlyZXR1cm4gKChzMzIpKHRwLT5yeF9vcHQudHNfcmVjZW50IC0gdHAtPnJ4X29wdC5yY3ZfdHN2YWwpID4gVENQX1BBV1NfV0lORE9XICYmCi0JCWdldF9zZWNvbmRzKCkgPCB0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUyAmJgotCQkhdGNwX2Rpc29yZGVyZWRfYWNrKHNrLCBza2IpKTsKKworCXJldHVybiAhdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIFRDUF9QQVdTX1dJTkRPVykgJiYKKwkgICAgICAgIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKTsKIH0KIAogLyogQ2hlY2sgc2VnbWVudCBzZXF1ZW5jZSBudW1iZXIgZm9yIHZhbGlkaXR5LgpAQCAtNDA3OSw3ICs0MDk3LDYgQEAKIAkJdHAtPnJ4X29wdC5kc2FjayA9IDE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5zdGFydF9zZXEgPSBzZXE7CiAJCXRwLT5kdXBsaWNhdGVfc2Fja1swXS5lbmRfc2VxID0gZW5kX3NlcTsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIDE7CiAJfQogfQogCkBAIC00MTM0LDggKzQxNTEsNiBAQAogCQkJICogRGVjcmVhc2UgbnVtX3NhY2tzLgogCQkJICovCiAJCQl0cC0+cnhfb3B0Lm51bV9zYWNrcy0tOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJCSAgICAgICB0cC0+cnhfb3B0LmRzYWNrOwogCQkJZm9yIChpID0gdGhpc19zYWNrOyBpIDwgdHAtPnJ4X29wdC5udW1fc2Fja3M7IGkrKykKIAkJCQlzcFtpXSA9IHNwW2kgKyAxXTsKIAkJCWNvbnRpbnVlOwpAQCAtNDE0NCwyMCArNDE1OSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NhY2tfc3dhcChzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2sxLAotCQkJCSBzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2syKQotewotCV9fdTMyIHRtcDsKLQotCXRtcCA9IHNhY2sxLT5zdGFydF9zZXE7Ci0Jc2FjazEtPnN0YXJ0X3NlcSA9IHNhY2syLT5zdGFydF9zZXE7Ci0Jc2FjazItPnN0YXJ0X3NlcSA9IHRtcDsKLQotCXRtcCA9IHNhY2sxLT5lbmRfc2VxOwotCXNhY2sxLT5lbmRfc2VxID0gc2FjazItPmVuZF9zZXE7Ci0Jc2FjazItPmVuZF9zZXEgPSB0bXA7Ci19Ci0KIHN0YXRpYyB2b2lkIHRjcF9zYWNrX25ld19vZm9fc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcSwgdTMyIGVuZF9zZXEpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC00MTcyLDcgKzQxNzMsNyBAQAogCQlpZiAodGNwX3NhY2tfZXh0ZW5kKHNwLCBzZXEsIGVuZF9zZXEpKSB7CiAJCQkvKiBSb3RhdGUgdGhpc19zYWNrIHRvIHRoZSBmaXJzdCBvbmUuICovCiAJCQlmb3IgKDsgdGhpc19zYWNrID4gMDsgdGhpc19zYWNrLS0sIHNwLS0pCi0JCQkJdGNwX3NhY2tfc3dhcChzcCwgc3AgLSAxKTsKKwkJCQlzd2FwKCpzcCwgKihzcCAtIDEpKTsKIAkJCWlmIChjdXJfc2Fja3MgPiAxKQogCQkJCXRjcF9zYWNrX21heWJlX2NvYWxlc2NlKHRwKTsKIAkJCXJldHVybjsKQEAgLTQxOTgsNyArNDE5OSw2IEBACiAJc3AtPnN0YXJ0X3NlcSA9IHNlcTsKIAlzcC0+ZW5kX3NlcSA9IGVuZF9zZXE7CiAJdHAtPnJ4X29wdC5udW1fc2Fja3MrKzsKLQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKIH0KIAogLyogUkNWLk5YVCBhZHZhbmNlcywgc29tZSBTQUNLcyBzaG91bGQgYmUgZWF0ZW4uICovCkBAIC00MjEyLDcgKzQyMTIsNiBAQAogCS8qIEVtcHR5IG9mbyBxdWV1ZSwgaGVuY2UsIGFsbCB0aGUgU0FDS3MgYXJlIGVhdGVuLiBDbGVhci4gKi8KIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKSkgewogCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5kc2FjazsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDIzMywxMSArNDIzMiw3IEBACiAJCXRoaXNfc2FjaysrOwogCQlzcCsrOwogCX0KLQlpZiAobnVtX3NhY2tzICE9IHRwLT5yeF9vcHQubnVtX3NhY2tzKSB7Ci0JCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsKLQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKLQl9CisJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSBudW1fc2Fja3M7CiB9CiAKIC8qIFRoaXMgb25lIGNoZWNrcyB0byBzZWUgaWYgd2UgY2FuIHB1dCBkYXRhIGZyb20gdGhlCkBAIC00MzEzLDEwICs0MzA4LDcgQEAKIAogCVRDUF9FQ05fYWNjZXB0X2N3cih0cCwgc2tiKTsKIAotCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzOwotCX0KKwl0cC0+cnhfb3B0LmRzYWNrID0gMDsKIAogCS8qICBRdWV1ZSBkYXRhIGZvciBkZWxpdmVyeSB0byB0aGUgdXNlci4KIAkgKiAgUGFja2V0cyBpbiBzZXF1ZW5jZSBnbyB0byB0aGUgcmVjZWl2ZSBxdWV1ZS4KQEAgLTQ0MzUsOCArNDQyNyw2IEBACiAJCS8qIEluaXRpYWwgb3V0IG9mIG9yZGVyIHNlZ21lbnQsIGJ1aWxkIDEgU0FDSy4gKi8KIAkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAxOwotCQkJdHAtPnJ4X29wdC5kc2FjayAgICAgPSAwOwotCQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAxOwogCQkJdHAtPnNlbGVjdGl2ZV9hY2tzWzBdLnN0YXJ0X3NlcSA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCQkJdHAtPnNlbGVjdGl2ZV9hY2tzWzBdLmVuZF9zZXEgPQogCQkJCQkJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOwpAQCAtNTE1Nyw3ICs1MTQ3LDggQEAKIAkgKi8KIAogCWlmICgodGNwX2ZsYWdfd29yZCh0aCkgJiBUQ1BfSFBfQklUUykgPT0gdHAtPnByZWRfZmxhZ3MgJiYKLQkgICAgVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQpIHsKKwkgICAgVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQgJiYKKwkgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwgdHAtPnNuZF9ueHQpKSB7CiAJCWludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLT50Y3BfaGVhZGVyX2xlbjsKIAogCQkvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuCkBAIC01MzEwLDggKzUzMDEsOCBAQAogCQlyZXR1cm4gLXJlczsKIAogc3RlcDU6Ci0JaWYgKHRoLT5hY2spCi0JCXRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCk7CisJaWYgKHRoLT5hY2sgJiYgdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKSA8IDApCisJCWdvdG8gZGlzY2FyZDsKIAogCXRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7CiAKQEAgLTU0MDksNyArNTQwMCw3IEBACiAJCSAqIG5ldmVyIHNjYWxlZC4KIAkJICovCiAJCXRwLT5zbmRfd25kID0gbnRvaHModGgtPndpbmRvdyk7Ci0JCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKIAogCQlpZiAoIXRwLT5yeF9vcHQud3NjYWxlX29rKSB7CiAJCQl0cC0+cnhfb3B0LnNuZF93c2NhbGUgPSB0cC0+cnhfb3B0LnJjdl93c2NhbGUgPSAwOwpAQCAtNTUxMCw3ICs1NTAxLDcgQEAKIAogCS8qIFBBV1MgY2hlY2suICovCiAJaWYgKHRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wICYmIHRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJgotCSAgICB0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCisJICAgIHRjcF9wYXdzX3JlamVjdCgmdHAtPnJ4X29wdCwgMCkpCiAJCWdvdG8gZGlzY2FyZF9hbmRfdW5kbzsKIAogCWlmICh0aC0+c3luKSB7CkBAIC01NjQ4LDcgKzU2MzksNyBAQAogCiAJLyogc3RlcCA1OiBjaGVjayB0aGUgQUNLIGZpZWxkICovCiAJaWYgKHRoLT5hY2spIHsKLQkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCQlpbnQgYWNjZXB0YWJsZSA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPiAwOwogCiAJCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJCWNhc2UgVENQX1NZTl9SRUNWOgpAQCAtNTY3MCw4ICs1NjYxLDcgQEAKIAkJCQl0cC0+c25kX3VuYSA9IFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcTsKIAkJCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpIDw8CiAJCQkJCSAgICAgIHRwLT5yeF9vcHQuc25kX3dzY2FsZTsKLQkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLAotCQkJCQkgICAgVENQX1NLQl9DQihza2IpLT5zZXEpOworCQkJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJCQkvKiB0Y3BfYWNrIGNvbnNpZGVycyB0aGlzIEFDSyBhcyBkdXBsaWNhdGUKIAkJCQkgKiBhbmQgZG9lcyBub3QgY2FsY3VsYXRlIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IGNmNzRjNDEuLmQwYTMxNDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTIyNiwxNSArMTIyNiw2IEBACiAJaWYgKHdhbnRfY29va2llICYmICF0bXBfb3B0LnNhd190c3RhbXApCiAJCXRjcF9jbGVhcl9vcHRpb25zKCZ0bXBfb3B0KTsKIAotCWlmICh0bXBfb3B0LnNhd190c3RhbXAgJiYgIXRtcF9vcHQucmN2X3RzdmFsKSB7Ci0JCS8qIFNvbWUgT1NlcyAodW5rbm93biBvbmVzLCBidXQgSSBzZWUgdGhlbSBvbiB3ZWIgc2VydmVyLCB3aGljaAotCQkgKiBjb250YWlucyBpbmZvcm1hdGlvbiBpbnRlcmVzdGluZyBvbmx5IGZvciB3aW5kb3dzJwotCQkgKiB1c2VycykgZG8gbm90IHNlbmQgdGhlaXIgc3RhbXAgaW4gU1lOLiBJdCBpcyBlYXN5IGNhc2UuCi0JCSAqIFdlIHNpbXBseSBkbyBub3QgYWR2ZXJ0aXNlIFRTIHN1cHBvcnQuCi0JCSAqLwotCQl0bXBfb3B0LnNhd190c3RhbXAgPSAwOwotCQl0bXBfb3B0LnRzdGFtcF9vayAgPSAwOwotCX0KIAl0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDsKIAogCXRjcF9vcGVucmVxX2luaXQocmVxLCAmdG1wX29wdCwgc2tiKTsKQEAgLTIzNTUsNyArMjM0Niw3IEBACiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLQkJaWYgKCF0Y3BfdjRfY2hlY2soc2tiLT5sZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCWlmICghdGNwX3Y0X2NoZWNrKHNrYl9ncm9fbGVuKHNrYiksIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjY3ZWZmYi4uNDNiYmJhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWlmICh0bXBfb3B0LnNhd190c3RhbXApIHsKIAkJCXRtcF9vcHQudHNfcmVjZW50CT0gdGNwdHctPnR3X3RzX3JlY2VudDsKIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wCT0gdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcDsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCkBAIC0zOTksNyArMzk5LDcgQEAKIAogCQl0Y3BfcHJlcXVldWVfaW5pdChuZXd0cCk7CiAKLQkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnNudF9pc24sIHRyZXEtPnJjdl9pc24pOworCQl0Y3BfaW5pdF93bChuZXd0cCwgdHJlcS0+cmN2X2lzbik7CiAKIAkJbmV3dHAtPnNydHQgPSAwOwogCQluZXd0cC0+bWRldiA9IFRDUF9USU1FT1VUX0lOSVQ7CkBAIC00MzQsOSArNDM0LDggQEAKIAkJbmV3dHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKIAogCQluZXd0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJbmV3dHAtPnJ4X29wdC5lZmZfc2Fja3MgPSAwOwotCiAJCW5ld3RwLT5yeF9vcHQubnVtX3NhY2tzID0gMDsKKwogCQluZXd0cC0+dXJnX2RhdGEgPSAwOwogCiAJCWlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKQpAQCAtNTEyLDcgKzUxMSw3IEBACiAJCQkgKiBmcm9tIGFub3RoZXIgZGF0YS4KIAkJCSAqLwogCQkJdG1wX29wdC50c19yZWNlbnRfc3RhbXAgPSBnZXRfc2Vjb25kcygpIC0gKChUQ1BfVElNRU9VVF9JTklUL0haKTw8cmVxLT5yZXRyYW5zKTsKLQkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfY2hlY2soJnRtcF9vcHQsIHRoLT5yc3QpOworCQkJcGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoJnRtcF9vcHQsIHRoLT5yc3QpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZGEyYzNiOC4uYzFmMjU5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDQxLDEwICs0NDEsNyBAQAogCQkJKnB0cisrID0gaHRvbmwoc3BbdGhpc19zYWNrXS5lbmRfc2VxKTsKIAkJfQogCi0JCWlmICh0cC0+cnhfb3B0LmRzYWNrKSB7Ci0JCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3M7Ci0JCX0KKwkJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAJfQogfQogCkBAIC01NTAsNiArNTQ3LDcgQEAKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiID0gc2tiID8gVENQX1NLQl9DQihza2IpIDogTlVMTDsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAl1bnNpZ25lZCBzaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgZWZmX3NhY2tzOwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAkqbWQ1ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzayk7CkBAIC01NjgsMTAgKzU2NiwxMSBAQAogCQlzaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KHRwLT5yeF9vcHQuZWZmX3NhY2tzKSkgeworCWVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzICsgdHAtPnJ4X29wdC5kc2FjazsKKwlpZiAodW5saWtlbHkoZWZmX3NhY2tzKSkgewogCQljb25zdCB1bnNpZ25lZCByZW1haW5pbmcgPSBNQVhfVENQX09QVElPTl9TUEFDRSAtIHNpemU7CiAJCW9wdHMtPm51bV9zYWNrX2Jsb2NrcyA9Ci0JCQltaW5fdCh1bnNpZ25lZCwgdHAtPnJ4X29wdC5lZmZfc2Fja3MsCisJCQltaW5fdCh1bnNpZ25lZCwgZWZmX3NhY2tzLAogCQkJICAgICAgKHJlbWFpbmluZyAtIFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQpIC8KIAkJCSAgICAgIFRDUE9MRU5fU0FDS19QRVJCTE9DSyk7CiAJCXNpemUgKz0gVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRCArCkBAIC02NjMsMTAgKzY2MiwxNCBAQAogCXRoLT51cmdfcHRyCQk9IDA7CiAKIAkvKiBUaGUgdXJnX21vZGUgY2hlY2sgaXMgbmVjZXNzYXJ5IGR1cmluZyBhIGJlbG93IHNuZF91bmEgd2luIHByb2JlICovCi0JaWYgKHVubGlrZWx5KHRjcF91cmdfbW9kZSh0cCkgJiYKLQkJICAgICBiZXR3ZWVuKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMSwgdGNiLT5zZXEgKyAweEZGRkYpKSkgewotCQl0aC0+dXJnX3B0cgkJPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOwotCQl0aC0+dXJnCQkJPSAxOworCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmIGJlZm9yZSh0Y2ItPnNlcSwgdHAtPnNuZF91cCkpKSB7CisJCWlmIChiZWZvcmUodHAtPnNuZF91cCwgdGNiLT5zZXEgKyAweDEwMDAwKSkgeworCQkJdGgtPnVyZ19wdHIgPSBodG9ucyh0cC0+c25kX3VwIC0gdGNiLT5zZXEpOworCQkJdGgtPnVyZyA9IDE7CisJCX0gZWxzZSBpZiAoYWZ0ZXIodGNiLT5zZXEgKyAweEZGRkYsIHRwLT5zbmRfbnh0KSkgeworCQkJdGgtPnVyZ19wdHIgPSAweEZGRkY7CisJCQl0aC0+dXJnID0gMTsKKwkJfQogCX0KIAogCXRjcF9vcHRpb25zX3dyaXRlKChfX2JlMzIgKikodGggKyAxKSwgdHAsICZvcHRzLCAmbWQ1X2hhc2hfbG9jYXRpb24pOwpAQCAtNzYzLDExICs3NjYsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbnNpemUsIG9sZF9mYWN0b3I7CiAJaW50IG5sZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKIAotCXRjcF9jbGVhcl9yZXRyYW5zX2hpbnRzX3BhcnRpYWwodHApOwogCW5zaXplID0gc2tiX2hlYWRsZW4oc2tiKSAtIGxlbjsKIAlpZiAobnNpemUgPCAwKQogCQluc2l6ZSA9IDA7CkBAIC04NTAsNiArODUyLDEyIEBACiAJCQl0Y3BfdmVyaWZ5X2xlZnRfb3V0KHRwKTsKIAkJfQogCQl0Y3BfYWRqdXN0X2ZhY2tldHNfb3V0KHNrLCBza2IsIGRpZmYpOworCisJCWlmICh0cC0+bG9zdF9za2JfaGludCAmJgorCQkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJICAgVENQX1NLQl9DQih0cC0+bG9zdF9za2JfaGludCktPnNlcSkgJiYKKwkJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwgVENQX1NLQl9DQihza2IpLT5zYWNrZWQpKQorCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gZGlmZjsKIAl9CiAKIAkvKiBMaW5rIEJVRkYgaW50byB0aGUgc2VuZCBxdWV1ZS4gKi8KQEAgLTkxMyw3ICs5MjEsNyBAQAogCSAqIGZhY3RvciBhbmQgbXNzLgogCSAqLwogCWlmICh0Y3Bfc2tiX3Bjb3VudChza2IpID4gMSkKLQkJdGNwX3NldF9za2JfdHNvX3NlZ3Moc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSk7CisJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaykpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsMTUgKzk4Miw2IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi0vKiBCb3VuZCBNU1MgLyBUU08gcGFja2V0IHNpemUgd2l0aCB0aGUgaGFsZiBvZiB0aGUgd2luZG93ICovCi1zdGF0aWMgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKLXsKLQlpZiAodHAtPm1heF93aW5kb3cgJiYgcGt0c2l6ZSA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkKLQkJcmV0dXJuIG1heCh0cC0+bWF4X3dpbmRvdyA+PiAxLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCWVsc2UKLQkJcmV0dXJuIHBrdHNpemU7Ci19Ci0KIC8qIFRoaXMgZnVuY3Rpb24gc3luY2hyb25pemUgc25kIG1zcyB0byBjdXJyZW50IHBtdHUvZXh0aGRyIHNldC4KIAogICAgdHAtPnJ4X29wdC51c2VyX21zcyBpcyBtc3Mgc2V0IGJ5IHVzZXIgYnkgVENQX01BWFNFRy4gSXQgZG9lcyBOT1QgY291bnRzCkBAIC0xMDI5LDIyICsxMDI4LDE3IEBACiAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBNU1MsIHRha2luZyBTQUNLcyBhbmQgSVAgb3B0aW9ucywKICAqIGFuZCBldmVuIFBNVFUgZGlzY292ZXJ5IGV2ZW50cyBpbnRvIGFjY291bnQuCiAgKi8KLXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFyZ2VfYWxsb3dlZCkKK3Vuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7CiAJdTMyIG1zc19ub3c7Ci0JdTE2IHhtaXRfc2l6ZV9nb2FsOwotCWludCBkb2luZ190c28gPSAwOwogCXVuc2lnbmVkIGhlYWRlcl9sZW47CiAJc3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzOwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1OwogCiAJbXNzX25vdyA9IHRwLT5tc3NfY2FjaGU7CiAKLQlpZiAobGFyZ2VfYWxsb3dlZCAmJiBza19jYW5fZ3NvKHNrKSkKLQkJZG9pbmdfdHNvID0gMTsKLQogCWlmIChkc3QpIHsKIAkJdTMyIG10dSA9IGRzdF9tdHUoZHN0KTsKIAkJaWYgKG10dSAhPSBpbmV0X2NzayhzayktPmljc2tfcG10dV9jb29raWUpCkBAIC0xMDYyLDE5ICsxMDU2LDYgQEAKIAkJbXNzX25vdyAtPSBkZWx0YTsKIAl9CiAKLQl4bWl0X3NpemVfZ29hbCA9IG1zc19ub3c7Ci0KLQlpZiAoZG9pbmdfdHNvKSB7Ci0JCXhtaXRfc2l6ZV9nb2FsID0gKChzay0+c2tfZ3NvX21heF9zaXplIC0gMSkgLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gLQotCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuIC0KLQkJCQkgIHRwLT50Y3BfaGVhZGVyX2xlbik7Ci0KLQkJeG1pdF9zaXplX2dvYWwgPSB0Y3BfYm91bmRfdG9faGFsZl93bmQodHAsIHhtaXRfc2l6ZV9nb2FsKTsKLQkJeG1pdF9zaXplX2dvYWwgLT0gKHhtaXRfc2l6ZV9nb2FsICUgbXNzX25vdyk7Ci0JfQotCXRwLT54bWl0X3NpemVfZ29hbCA9IHhtaXRfc2l6ZV9nb2FsOwotCiAJcmV0dXJuIG1zc19ub3c7CiB9CiAKQEAgLTEyNTYsNyArMTIzNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF9zZW5kX2hlYWQoc2spOwogCiAJcmV0dXJuIChza2IgJiYKLQkJdGNwX3NuZF90ZXN0KHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSksCisJCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spLAogCQkJICAgICAodGNwX3NrYl9pc19sYXN0KHNrLCBza2IpID8KIAkJCSAgICAgIHRwLT5ub25hZ2xlIDogVENQX05BR0xFX1BVU0gpKSk7CiB9CkBAIC0xMjczLDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCBza19idWZmICpidWZmOwogCWludCBubGVuID0gc2tiLT5sZW4gLSBsZW47Ci0JdTE2IGZsYWdzOworCXU4IGZsYWdzOwogCiAJLyogQWxsIG9mIGEgVFNPIGZyYW1lIG11c3QgYmUgY29tcG9zZWQgb2YgcGFnZWQgZGF0YS4gICovCiAJaWYgKHNrYi0+bGVuICE9IHNrYi0+ZGF0YV9sZW4pCkBAIC0xMzUyLDYgKzEzMzMsMTAgQEAKIAlpZiAobGltaXQgPj0gc2stPnNrX2dzb19tYXhfc2l6ZSkKIAkJZ290byBzZW5kX25vdzsKIAorCS8qIE1pZGRsZSBpbiBxdWV1ZSB3b24ndCBnZXQgYW55IG1vcmUgZGF0YSwgZnVsbCBzZW5kYWJsZSBhbHJlYWR5PyAqLworCWlmICgoc2tiICE9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKSkgJiYgKGxpbWl0ID49IHNrYi0+bGVuKSkKKwkJZ290byBzZW5kX25vdzsKKwogCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikgewogCQl1MzIgY2h1bmsgPSBtaW4odHAtPnNuZF93bmQsIHRwLT5zbmRfY3duZCAqIHRwLT5tc3NfY2FjaGUpOwogCkBAIC0xNDA1LDExICsxMzkwLDExIEBACiAJICAgIGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplIHx8CiAJICAgIGluZXRfY3NrKHNrKS0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfT3BlbiB8fAogCSAgICB0cC0+c25kX2N3bmQgPCAxMSB8fAotCSAgICB0cC0+cnhfb3B0LmVmZl9zYWNrcykKKwkgICAgdHAtPnJ4X29wdC5udW1fc2Fja3MgfHwgdHAtPnJ4X29wdC5kc2FjaykKIAkJcmV0dXJuIC0xOwogCiAJLyogVmVyeSBzaW1wbGUgc2VhcmNoIHN0cmF0ZWd5OiBqdXN0IGRvdWJsZSB0aGUgTVNTLiAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCXByb2JlX3NpemUgPSAyICogdHAtPm1zc19jYWNoZTsKIAlzaXplX25lZWRlZCA9IHByb2JlX3NpemUgKyAodHAtPnJlb3JkZXJpbmcgKyAxKSAqIHRwLT5tc3NfY2FjaGU7CiAJaWYgKHByb2JlX3NpemUgPiB0Y3BfbXR1X3RvX21zcyhzaywgaWNzay0+aWNza19tdHVwLnNlYXJjaF9oaWdoKSkgewpAQCAtMTc1NCwxMSArMTczOSw5IEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiID0gdGNwX3dyaXRlX3F1ZXVlX25leHQoc2ssIHNrYik7CiAJaW50IHNrYl9zaXplLCBuZXh0X3NrYl9zaXplOwotCXUxNiBmbGFnczsKIAogCXNrYl9zaXplID0gc2tiLT5sZW47CiAJbmV4dF9za2Jfc2l6ZSA9IG5leHRfc2tiLT5sZW47Ci0JZmxhZ3MgPSBUQ1BfU0tCX0NCKHNrYiktPmZsYWdzOwogCiAJQlVHX09OKHRjcF9za2JfcGNvdW50KHNrYikgIT0gMSB8fCB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikgIT0gMSk7CiAKQEAgLTE3NzgsOSArMTc2MSw4IEBACiAJLyogVXBkYXRlIHNlcXVlbmNlIHJhbmdlIG9uIG9yaWdpbmFsIHNrYi4gKi8KIAlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZW5kX3NlcTsKIAotCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gKi8KLQlmbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7IC8qIFRoaXMgbW92ZXMgUFNIL0ZJTiBldGMuIG92ZXIgKi8KLQlUQ1BfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3M7CisJLyogTWVyZ2Ugb3ZlciBjb250cm9sIGluZm9ybWF0aW9uLiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCisJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BfU0tCX0NCKG5leHRfc2tiKS0+ZmxhZ3M7CiAKIAkvKiBBbGwgZG9uZSwgZ2V0IHJpZCBvZiBzZWNvbmQgU0tCIGFuZCBhY2NvdW50IGZvciBpdCBzbwogCSAqIHBhY2tldCBjb3VudGluZyBkb2VzIG5vdCBicmVhay4KQEAgLTE4OTQsNyArMTg3Niw3IEBACiAJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnJlYnVpbGRfaGVhZGVyKHNrKSkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7IC8qIFJvdXRpbmcgZmFpbHVyZSBvciBzaW1pbGFyLiAqLwogCi0JY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJY3VyX21zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAKIAkvKiBJZiByZWNlaXZlciBoYXMgc2hydW5rIGhpcyB3aW5kb3csIGFuZCBza2IgaXMgb3V0IG9mCiAJICogbmV3IHdpbmRvdywgZG8gbm90IHJldHJhbnNtaXQgaXQuIFRoZSBleGNlcHRpb24gaXMgdGhlCkBAIC0xOTA4LDYgKzE4OTAsOCBAQAogCWlmIChza2ItPmxlbiA+IGN1cl9tc3MpIHsKIAkJaWYgKHRjcF9mcmFnbWVudChzaywgc2tiLCBjdXJfbXNzLCBjdXJfbXNzKSkKIAkJCXJldHVybiAtRU5PTUVNOyAvKiBXZSdsbCB0cnkgYWdhaW4gbGF0ZXIuICovCisJfSBlbHNlIHsKKwkJdGNwX2luaXRfdHNvX3NlZ3Moc2ssIHNrYiwgY3VyX21zcyk7CiAJfQogCiAJdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHNrLCBza2IsIGN1cl9tc3MpOwpAQCAtMjA2MSw3ICsyMDQ1LDcgQEAKIAkJCWdvdG8gYmVnaW5fZndkOwogCiAJCX0gZWxzZSBpZiAoIShzYWNrZWQgJiBUQ1BDQl9MT1NUKSkgewotCQkJaWYgKGhvbGUgPT0gTlVMTCAmJiAhKHNhY2tlZCAmIFRDUENCX1NBQ0tFRF9SRVRSQU5TKSkKKwkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiAoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfU0FDS0VEX0FDS0VEKSkpCiAJCQkJaG9sZSA9IHNrYjsKIAkJCWNvbnRpbnVlOwogCkBAIC0yMTAwLDcgKzIwODQsNyBAQAogCSAqIHVuc2VudCBmcmFtZXMuICBCdXQgYmUgY2FyZWZ1bCBhYm91dCBvdXRnb2luZyBTQUNLUwogCSAqIGFuZCBJUCBvcHRpb25zLgogCSAqLwotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDEpOworCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJaWYgKHRjcF9zZW5kX2hlYWQoc2spICE9IE5VTEwpIHsKIAkJVENQX1NLQl9DQihza2IpLT5mbGFncyB8PSBUQ1BDQl9GTEFHX0ZJTjsKQEAgLTIzMjUsNyArMjMwOSw3IEBACiAJc2stPnNrX2VyciA9IDA7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX0RPTkUpOwogCXRwLT5zbmRfd25kID0gMDsKLQl0Y3BfaW5pdF93bCh0cCwgdHAtPndyaXRlX3NlcSwgMCk7CisJdGNwX2luaXRfd2wodHAsIDApOwogCXRwLT5zbmRfdW5hID0gdHAtPndyaXRlX3NlcTsKIAl0cC0+c25kX3NtbCA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC0yNTEyLDcgKzI0OTYsNyBAQAogCWlmICgoc2tiID0gdGNwX3NlbmRfaGVhZChzaykpICE9IE5VTEwgJiYKIAkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLCB0Y3Bfd25kX2VuZCh0cCkpKSB7CiAJCWludCBlcnI7Ci0JCXVuc2lnbmVkIGludCBtc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAkJdW5zaWduZWQgaW50IHNlZ19zaXplID0gdGNwX3duZF9lbmQodHApIC0gVENQX1NLQl9DQihza2IpLT5zZXE7CiAKIAkJaWYgKGJlZm9yZSh0cC0+cHVzaGVkX3NlcSwgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9wcm9iZS5jIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKaW5kZXggMjU1MjRkNC4uNTlmNWI1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKQEAgLTE2NSw5ICsxNjUsMTAgQEAKIHN0YXRpYyBzc2l6ZV90IHRjcHByb2JlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgZXJyb3IgPSAwLCBjbnQgPSAwOworCWludCBlcnJvciA9IDA7CisJc2l6ZV90IGNudCA9IDA7CiAKLQlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQorCWlmICghYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdoaWxlIChjbnQgPCBsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggNDY2MGIwOC4uYTc2NTEzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTI0LDE0ICsyNCw4IEBACiAKIAlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKLQllbHNlIHsKLQkJdHAtPnNuZF9jd25kX2NudCsrOwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+IG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpKXsKLQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJdHAtPnNuZF9jd25kKys7Ci0JCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfQotCX0KKwllbHNlCisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSk7CiB9CiAKIHN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKaW5kZXggMDE3MGU5MS4uYjE0NGEyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTMyOCwxOSArMzI4LDE2IEBACiAJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPT0gMCkgewogCQlpbnQgbWliX2lkeDsKIAotCQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfRGlzb3JkZXIgfHwKLQkJICAgIGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7Ci0JCQlpZiAodGNwX2lzX3NhY2sodHApKSB7Ci0JCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7Ci0JCQkJZWxzZQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUw7Ci0JCQkJZWxzZQotCQkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKLQkJCX0KKwkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyKSB7CisJCQlpZiAodGNwX2lzX3NhY2sodHApKQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQU0FDS0ZBSUxVUkVTOworCQkJZWxzZQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQUkVOT0ZBSUxVUkVTOworCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX1JlY292ZXJ5KSB7CisJCQlpZiAodGNwX2lzX3NhY2sodHApKQorCQkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQU0FDS1JFQ09WRVJZRkFJTDsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9SRUNPVkVSWUZBSUw7CiAJCX0gZWxzZSBpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykgewogCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BMT1NTRkFJTFVSRVM7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVuby5jIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwppbmRleCBkMDhiMmU4Li5lOWJiZmY3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdmVuby5jCisrKyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKQEAgLTE1OSwxMiArMTU5LDcgQEAKIAkJCQkvKiBJbiB0aGUgIm5vbi1jb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqICBldmVyeSBydHQuCiAJCQkJICovCi0JCQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCQkJfSBlbHNlCi0JCQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogSW4gdGhlICJjb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqIGV2ZXJ5IG90aGVyIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF95ZWFoLmMgYi9uZXQvaXB2NC90Y3BfeWVhaC5jCmluZGV4IDllYzg0M2EuLjY2YjY4MjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF95ZWFoLmMKKysrIGIvbmV0L2lwdjQvdGNwX3llYWguYwpAQCAtOTQsMTQgKzk0LDcgQEAKIAogCX0gZWxzZSB7CiAJCS8qIFJlbm8gKi8KLQotCQlpZiAodHAtPnNuZF9jd25kX2NudCA8IHRwLT5zbmRfY3duZCkKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKLQotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKLQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogCiAJLyogVGhlIGtleSBwbGF5ZXJzIGFyZSB2X3ZlZ2FzLmJlZ19zbmRfdW5hIGFuZCB2X2JlZ19zbmRfbnh0LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBjNDdjOTg5Li5iZGEwOGEwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCitpbnQgaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0MSA9IGluZXRfc2soc2sxKSwgKmluZXQyID0gaW5ldF9zayhzazIpOwogCkBAIC01OTYsNiArNTk2LDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCiAJaWYgKHVwLT5wZW5kaW5nKSB7CiAJCS8qCkBAIC02NDMsNiArNjQ0LDkgQEAKIAlpcGMuYWRkciA9IGluZXQtPnNhZGRyOwogCiAJaXBjLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CisJZXJyID0gc29ja190eF90aW1lc3RhbXAobXNnLCBzaywgJmlwYy5zaHR4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuKSB7CiAJCWVyciA9IGlwX2Ntc2dfc2VuZChzb2NrX25ldChzayksIG1zZywgJmlwYyk7CiAJCWlmIChlcnIpCkBAIC0xMTgwLDcgKzExODQsNyBAQAogCQkJc2sgPSBza25leHQ7CiAJCX0gd2hpbGUgKHNrbmV4dCk7CiAJfSBlbHNlCi0JCWtmcmVlX3NrYihza2IpOworCQljb25zdW1lX3NrYihza2IpOwogCXNwaW5fdW5sb2NrKCZoc2xvdC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjE0LDcgKzE2MTgsOCBAQAogCX0gd2hpbGUgKHNrICYmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSB8fCBzay0+c2tfZmFtaWx5ICE9IHN0YXRlLT5mYW1pbHkpKTsKIAogCWlmICghc2spIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT51ZHBfdGFibGUtPmhhc2hbc3RhdGUtPmJ1Y2tldF0ubG9jayk7CisJCWlmIChzdGF0ZS0+YnVja2V0IDwgVURQX0hUQUJMRV9TSVpFKQorCQkJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT51ZHBfdGFibGUtPmhhc2hbc3RhdGUtPmJ1Y2tldF0ubG9jayk7CiAJCXJldHVybiB1ZHBfZ2V0X2ZpcnN0KHNlcSwgc3RhdGUtPmJ1Y2tldCArIDEpOwogCX0KIAlyZXR1cm4gc2s7CkBAIC0xNjMyLDYgKzE2MzcsOSBAQAogCiBzdGF0aWMgdm9pZCAqdWRwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7CisJc3RydWN0IHVkcF9pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdGF0ZS0+YnVja2V0ID0gVURQX0hUQUJMRV9TSVpFOworCiAJcmV0dXJuICpwb3MgPyB1ZHBfZ2V0X2lkeChzZXEsICpwb3MtMSkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTE4MTUsNiArMTgyMyw3IEBACiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfc2V0c29ja29wdCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9wb2xsKTsKIEVYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRfcG9ydCk7CitFWFBPUlRfU1lNQk9MKGlwdjRfcmN2X3NhZGRyX2VxdWFsKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBFWFBPUlRfU1lNQk9MKHVkcF9wcm9jX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggMmFkMjRiYS4uNjBkOTE4YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTRfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCi0JLnByb3RvY29sID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmdjID0JCQl4ZnJtNF9nYXJiYWdlX2NvbGxlY3QsCiAJLnVwZGF0ZV9wbXR1ID0JCXhmcm00X3VwZGF0ZV9wbXR1LAogCS5kZXN0cm95ID0JCXhmcm00X2RzdF9kZXN0cm95LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMTIyMGUyYy4uYTgyMThiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC00MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpAQCAtNTkwLDYgKzU5MSw3IEBACiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhID0gTlVMTDsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAlpbnQgaGFzaDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoYWRkcik7CkBAIC02MDYsNiArNjA4LDExIEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKKwlpZiAoaWRldi0+Y25mLmRpc2FibGVfaXB2NiB8fCBuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmRpc2FibGVfaXB2NikgeworCQllcnIgPSAtRUFDQ0VTOworCQlnb3RvIG91dDI7CisJfQorCiAJd3JpdGVfbG9jaygmYWRkcmNvbmZfaGFzaF9sb2NrKTsKIAogCS8qIElnbm9yZSBhZGRpbmcgZHVwbGljYXRlIGFkZHJlc3NlcyBvbiBhbiBpbnRlcmZhY2UgKi8KQEAgLTEyMDksMTYgKzEyMTYsMTIgQEAKIAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9IGVsc2UgaWYgKG1pbmloaXNjb3JlIDwgbWluaXNjb3JlKSB7Ci0JCQkJCXN0cnVjdCBpcHY2X3NhZGRyX3Njb3JlICp0bXA7Ci0KIAkJCQkJaWYgKGhpc2NvcmUtPmlmYSkKIAkJCQkJCWluNl9pZmFfcHV0KGhpc2NvcmUtPmlmYSk7CiAKIAkJCQkJaW42X2lmYV9ob2xkKHNjb3JlLT5pZmEpOwogCi0JCQkJCXRtcCA9IGhpc2NvcmU7Ci0JCQkJCWhpc2NvcmUgPSBzY29yZTsKLQkJCQkJc2NvcmUgPSB0bXA7CisJCQkJCXN3YXAoaGlzY29yZSwgc2NvcmUpOwogCiAJCQkJCS8qIHJlc3RvcmUgb3VyIGl0ZXJhdG9yICovCiAJCQkJCXNjb3JlLT5pZmEgPSBoaXNjb3JlLT5pZmE7CkBAIC0xMzY3LDQwICsxMzcwLDYgQEAKIAlyZXR1cm4gaWZwOwogfQogCi1pbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQotewotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7Ci0JX19iZTMyIHNrX3Jjdl9zYWRkciA9IGluZXRfc2soc2spLT5yY3Zfc2FkZHI7Ci0JX19iZTMyIHNrMl9yY3Zfc2FkZHIgPSBpbmV0X3Jjdl9zYWRkcihzazIpOwotCWludCBza19pcHY2b25seSA9IGlwdjZfb25seV9zb2NrKHNrKTsKLQlpbnQgc2syX2lwdjZvbmx5ID0gaW5ldF92Nl9pcHY2b25seShzazIpOwotCWludCBhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZShza19yY3Zfc2FkZHI2KTsKLQlpbnQgYWRkcl90eXBlMiA9IHNrMl9yY3Zfc2FkZHI2ID8gaXB2Nl9hZGRyX3R5cGUoc2syX3Jjdl9zYWRkcjYpIDogSVBWNl9BRERSX01BUFBFRDsKLQotCWlmICghc2syX3Jjdl9zYWRkciAmJiAhc2tfaXB2Nm9ubHkpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCi0JICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKLQkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQgJiYKLQkgICAgIXNrMl9pcHY2b25seSAmJgotCSAgICAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkciB8fCBza19yY3Zfc2FkZHIgPT0gc2syX3Jjdl9zYWRkcikpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIEdldHMgcmVmZXJlbmNlZCBhZGRyZXNzLCBkZXN0cm95cyBpZmFkZHIgKi8KIAogc3RhdGljIHZvaWQgYWRkcmNvbmZfZGFkX3N0b3Aoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwKQpAQCAtMTQzMyw2ICsxNDAyLDExIEBACiB2b2lkIGFkZHJjb25mX2RhZF9mYWlsdXJlKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaWZwLT5pZGV2OworCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElQdjYgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLAorCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOworCiAJaWYgKGlkZXYtPmNuZi5hY2NlcHRfZGFkID4gMSAmJiAhaWRldi0+Y25mLmRpc2FibGVfaXB2NikgewogCQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKIApAQCAtMTQ0MywxMSArMTQxNywxMiBAQAogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZpZnAtPmFkZHIsICZhZGRyKSkgewogCQkJLyogREFEIGZhaWxlZCBmb3IgbGluay1sb2NhbCBiYXNlZCBvbiBNQUMgYWRkcmVzcyAqLwogCQkJaWRldi0+Y25mLmRpc2FibGVfaXB2NiA9IDE7CisKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGJlaW5nIGRpc2FibGVkIVxuIiwKKwkJCQlpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJCX0KIAl9CiAKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0ZWQhXG4iLCBpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJYWRkcmNvbmZfZGFkX3N0b3AoaWZwKTsKIH0KIApAQCAtMjIyNywxMCArMjIwMiwyNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGFkZF9hZGRyKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJICAgICBpbnQgcGxlbiwgaW50IHNjb3BlKQoreworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDsKKworCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgYWRkciwgcGxlbiwgc2NvcGUsIElGQV9GX1BFUk1BTkVOVCk7CisJaWYgKCFJU19FUlIoaWZwKSkgeworCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKKwkJaW42X2lmYV9wdXQoaWZwKTsKKwl9Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X1NJVCkgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9TSVRfTU9EVUxFKQogc3RhdGljIHZvaWQgc2l0X2FkZF92NF9hZGRycyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewotCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKiBpZnA7CiAJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CkBAIC0yMjQ5LDE0ICsyMjM4LDcgQEAKIAl9CiAKIAlpZiAoYWRkci5zNl9hZGRyMzJbM10pIHsKLQkJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmYWRkciwgMTI4LCBzY29wZSwgSUZBX0ZfUEVSTUFORU5UKTsKLQkJaWYgKCFJU19FUlIoaWZwKSkgewotCQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJaWZwLT5mbGFncyAmPSB+SUZBX0ZfVEVOVEFUSVZFOwotCQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7Ci0JCQlpbjZfaWZhX3B1dChpZnApOwotCQl9CisJCWFkZF9hZGRyKGlkZXYsICZhZGRyLCAxMjgsIHNjb3BlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI4NCwxNSArMjI2Niw3IEBACiAJCQkJZWxzZQogCQkJCQlwbGVuID0gOTY7CiAKLQkJCQlpZnAgPSBpcHY2X2FkZF9hZGRyKGlkZXYsICZhZGRyLCBwbGVuLCBmbGFnLAotCQkJCQkJICAgIElGQV9GX1BFUk1BTkVOVCk7Ci0JCQkJaWYgKCFJU19FUlIoaWZwKSkgewotCQkJCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQkJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJCQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCQkJCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKLQkJCQkJaW42X2lmYV9wdXQoaWZwKTsKLQkJCQl9CisJCQkJYWRkX2FkZHIoaWRldiwgJmFkZHIsIHBsZW4sIGZsYWcpOwogCQkJfQogCQl9CiAJfQpAQCAtMjMwMiw3ICsyMjc2LDYgQEAKIHN0YXRpYyB2b2lkIGluaXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICAqaWRldjsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwogCiAJLyogOjoxICovCiAKQEAgLTIzMTMsMTQgKzIyODYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCwgSUZBX0ZfUEVSTUFORU5UKTsKLQlpZiAoIUlTX0VSUihpZnApKSB7Ci0JCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJaWZwLT5mbGFncyAmPSB+SUZBX0ZfVEVOVEFUSVZFOwotCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJaXB2Nl9pZmFfbm90aWZ5KFJUTV9ORVdBRERSLCBpZnApOwotCQlpbjZfaWZhX3B1dChpZnApOwotCX0KKwlhZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtMjgzMiwxMSArMjc5OCw2IEBACiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgaWRldi0+Y25mLmRpc2FibGVfaXB2NikgewotCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCWFkZHJjb25mX2RhZF9mYWlsdXJlKGlmcCk7Ci0JCXJldHVybjsKLQl9CiAJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwogCWlmIChpZnAtPnByb2JlcyA9PSAwKSB7CiAJCS8qCkBAIC0zNjQ3LDcgKzM2MDgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOwpAQCAtMzg1OCw3ICszODIwLDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X0lGQUREUiwgZXJyKTsKQEAgLTM5MjgsNyArMzg5MSw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9QUkVGSVgsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCA5YzgzMDllLi42MWY1NTM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTI3NiwxMSArMjc2LDI2IEBACiAKIAkvKiBDaGVjayBpZiB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBob3N0LiAqLwogCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkgewotCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOwotCQlpZiAoaW5ldF9hZGRyX3R5cGUobmV0LCB2NGFkZHIpICE9IFJUTl9MT0NBTCkgewotCQkJZXJyID0gLUVBRERSTk9UQVZBSUw7CisJCWludCBjaGtfYWRkcl9yZXQ7CisKKwkJLyogQmluZGluZyB0byB2NC1tYXBwZWQgYWRkcmVzcyBvbiBhIHY2LW9ubHkgc29ja2V0CisJCSAqIG1ha2VzIG5vIHNlbnNlCisJCSAqLworCQlpZiAobnAtPmlwdjZvbmx5KSB7CisJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KKworCQkvKiBSZXByb2R1Y2UgQUZfSU5FVCBjaGVja3MgdG8gbWFrZSB0aGUgYmluZGluZ3MgY29uc2l0YW50ICovCisJCXY0YWRkciA9IGFkZHItPnNpbjZfYWRkci5zNl9hZGRyMzJbM107CisJCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKG5ldCwgdjRhZGRyKTsKKwkJaWYgKCFzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCAmJgorCQkgICAgIShpbmV0LT5mcmVlYmluZCB8fCBpbmV0LT50cmFuc3BhcmVudCkgJiYKKwkJICAgIHY0YWRkciAhPSBodG9ubChJTkFERFJfQU5ZKSAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9MT0NBTCAmJgorCQkgICAgY2hrX2FkZHJfcmV0ICE9IFJUTl9NVUxUSUNBU1QgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fQlJPQURDQVNUKQorCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKSB7CiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKQEAgLTMzOSw4ICszNTQsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfQU5ZKQorCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkgewogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklOREFERFJfTE9DSzsKKwkJaWYgKGFkZHJfdHlwZSAhPSBJUFY2X0FERFJfTUFQUEVEKQorCQkJbnAtPmlwdjZvbmx5ID0gMTsKKwl9CiAJaWYgKHNudW0pCiAJCXNrLT5za191c2VybG9ja3MgfD0gU09DS19CSU5EUE9SVF9MT0NLOwogCWluZXQtPnNwb3J0ID0gaHRvbnMoaW5ldC0+bnVtKTsKQEAgLTgwMywyNCArODIxLDM0IEBACiAJaW50IHByb3RvOwogCV9fd3N1bSBjc3VtOwogCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkpCisJaXBoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmlwaCkpOworCWlmICh1bmxpa2VseSghaXBoKSkKIAkJZ290byBvdXQ7CiAKLQlpcGggPSBpcHY2X2hkcihza2IpOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9ncm9fcHVsbChza2IsIHNpemVvZigqaXBoKSk7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CiAKLQlmbHVzaCArPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAhPSBza2ItPmxlbjsKKwlmbHVzaCArPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAhPSBza2JfZ3JvX2xlbihza2IpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgaXBoLT5uZXh0aGRyKTsKLQlpcGggPSBpcHY2X2hkcihza2IpOwotCUlQVjZfR1JPX0NCKHNrYiktPnByb3RvID0gcHJvdG87CisJcHJvdG8gPSBpcGgtPm5leHRoZHI7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X3Byb3Rvc1twcm90b10pOwotCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQotCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKCFvcHMgfHwgIW9wcy0+Z3JvX3JlY2VpdmUpIHsKKwkJX19wc2tiX3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKwkJcHJvdG8gPSBpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBwcm90byk7CisJCXNrYl9ncm9fcHVsbChza2IsIC1za2JfdHJhbnNwb3J0X29mZnNldChza2IpKTsKKwkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwkJX19za2JfcHVzaChza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOworCisJCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCWlwaCA9IGlwdjZfaGRyKHNrYik7CisJfQorCisJSVBWNl9HUk9fQ0Ioc2tiKS0+cHJvdG8gPSBwcm90bzsKIAogCWZsdXNoLS07Ci0Jc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlubGVuID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwogCiAJZm9yIChwID0gKmhlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CkBAIC04ODMsOCArOTExLDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwdjZfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZnVuYyA9IGlwdjZfcmN2LAogCS5nc29fc2VuZF9jaGVjayA9IGlwdjZfZ3NvX3NlbmRfY2hlY2ssCiAJLmdzb19zZWdtZW50ID0gaXB2Nl9nc29fc2VnbWVudCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCA0MGYzMjQ2Li5kMzFkZjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0yMTgsOCArMjE4LDcgQEAKIAkJCWlmIChvcHQpCiAJCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJCQlwa3RvcHQgPSB4Y2hnKCZucC0+cGt0b3B0aW9ucywgTlVMTCk7Ci0JCQlpZiAocGt0b3B0KQotCQkJCWtmcmVlX3NrYihwa3RvcHQpOworCQkJa2ZyZWVfc2tiKHBrdG9wdCk7CiAKIAkJCXNrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKIAkJCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCAzZTI5NzA4Li45ZjA2MWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEwOTUsMTEgKzEwOTUsNyBAQAogCQkmaXB2Nl9oZHIocmEpLT5zYWRkcik7CiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsCi0JCQkgIEdGUF9BVE9NSUMpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dDsKLQorCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJldHVybjsKIAogbmxhX3B1dF9mYWlsdXJlOgpAQCAtMTUzOCwxMyArMTUzNCwxMCBAQAogCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSB7CiAJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiBkZXN0aW5hdGlvbiBpcyBub3QgYSBuZWlnaGJvdXIuXG4iKTsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOworCQlnb3RvIHJlbGVhc2U7CiAJfQotCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkgewotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47Ci0JfQorCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGRldi0+YWRkcl9sZW4pIHsKIAkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CkBAIC0xNTcwLDggKzE1NjMsNyBAQAogCQlORF9QUklOVEswKEtFUk5fRVJSCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiAlcygpIGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBza2IuXG4iLAogCQkJICAgX19mdW5jX18pOwotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47CisJCWdvdG8gcmVsZWFzZTsKIAl9CiAKIAlza2JfcmVzZXJ2ZShidWZmLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKQEAgLTE2MzEsNiArMTYyMywxMCBAQAogCiAJaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKKwlyZXR1cm47CisKK3JlbGVhc2U6CisJZHN0X3JlbGVhc2UoZHN0KTsKIH0KIAogc3RhdGljIHZvaWQgcG5kaXNjX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNTNlYTUxMi4uMjlkNjQzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTk1LDEzICs5NSwxMyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSEwKLQl0cmlzdGF0ZSAnImhsIiBtYXRjaCBzdXBwb3J0JworCXRyaXN0YXRlICciaGwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBITCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcAotCSAgbGltaXQgb2YgdGhlIHBhY2tldC4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwuCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUgogCXRyaXN0YXRlICciaXB2NmhlYWRlciIgSVB2NiBFeHRlbnNpb24gSGVhZGVycyBNYXRjaCcKQEAgLTEzMCw2ICsxMzAsMTUgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiAjIFRoZSB0YXJnZXRzCitjb25maWcgSVA2X05GX1RBUkdFVF9ITAorCXRyaXN0YXRlICciSEwiIGhvcGxpbWl0IHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJc2VsZWN0IE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KKwogY29uZmlnIElQNl9ORl9UQVJHRVRfTE9HCiAJdHJpc3RhdGUgIkxPRyB0YXJnZXQgc3VwcG9ydCIKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTE3MCwyMyArMTc5LDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUDZfTkZfVEFSR0VUX0hMCi0JdHJpc3RhdGUgICdITCAoaG9wbGltaXQpIHRhcmdldCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVA2X05GX01BTkdMRQotCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBITCcgdGFyZ2V0LCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIGRlY3JlbWVudAotCSAgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZSBJUHY2IGhlYWRlciBvciBzZXQgaXQgdG8gYSBnaXZlbiAobG93ZXIpCi0JICB2YWx1ZS4KLQotCSAgV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQgdGhlIGhvcGxpbWl0IHZhbHVlLCB0aGlzIG9wdGlvbiBhbHNvCi0JICBlbmFibGVzIGZ1bmN0aW9uYWxpdHkgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZQotCSAgSVB2NiBoZWFkZXIgdG8gYXJiaXRyYXJ5IHZhbHVlcy4gIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUyBzaW5jZQotCSAgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wIGZvcmV2ZXIgb24gdGhlCi0JICBuZXR3b3JrLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQNl9ORl9SQVcKIAl0cmlzdGF0ZSAgJ3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggM2YxN2M5NC4uYWFmYmJhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMjAsMTMgKzIwLDExIEBACiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0FIKSArPSBpcDZ0X2FoLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQpICs9IGlwNnRfZXVpNjQubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwotb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9ITCkgKz0gaXA2dF9obC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIpICs9IGlwNnRfaXB2NmhlYWRlci5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgKz0gaXA2dF9ydC5vCiAKICMgdGFyZ2V0cwotb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwpICs9IGlwNnRfSEwubwogb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HKSArPSBpcDZ0X0xPRy5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwNnRfUkVKRUNULm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCA1ODU5YzA0Li5iNjkzZjg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfSVA2X0ZXKTsKIAogbW9kdWxlX2luaXQoaXA2X3F1ZXVlX2luaXQpOwogbW9kdWxlX2V4aXQoaXA2X3F1ZXVlX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggYTMzNDg1ZC4uMzRhZjdiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC04OSw2ICs4OSwyNSBAQAogCQkgKG5leHRoZHIgPT0gSVBQUk9UT19EU1RPUFRTKSApOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpZm5hbWVfY29tcGFyZShjb25zdCBjaGFyICpfYSwgY29uc3QgY2hhciAqX2IsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9tYXNrKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBSZXR1cm5zIHdoZXRoZXIgbWF0Y2hlcyBydWxlIG9yIG5vdC4gKi8KIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbApAQCAtOTksNyArMTE4LDYgQEAKIAkJIHVuc2lnbmVkIGludCAqcHJvdG9mZiwKIAkJIGludCAqZnJhZ29mZiwgYm9vbCAqaG90ZHJvcCkKIHsKLQlzaXplX3QgaTsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2NiA9IGlwdjZfaGRyKHNrYik7CiAKQEAgLTEyMCwxMiArMTM4LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIExvb2sgZm9yIGlmbmFtZSBtYXRjaGVzOyB0aGlzIHNob3VsZCB1bnJvbGwgbmljZWx5LiAqLwotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykgewotCQlyZXQgfD0gKCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWluZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcDZpbmZvLT5pbmlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+aW5pZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGlwNmluZm8tPmluaWZhY2UsIGlwNmluZm8tPmluaWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQNlRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMzQsMTEgKzE0Nyw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+b3V0aWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKG91dGRldiwgaXA2aW5mby0+b3V0aWZhY2UsIGlwNmluZm8tPm91dGlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBJUDZUX0lOVl9WSUFfT1VUKSkgewogCQlkcHJpbnRmKCJWSUEgb3V0IG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0zNzMsMTAgKzM4MiwxMiBAQAogCW10cGFyLmZhbWlseSAgPSB0Z3Bhci5mYW1pbHkgPSBORlBST1RPX0lQVjY7CiAJdGdwYXIuaG9va251bSA9IGhvb2s7CiAKLQlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKIAlJUF9ORl9BU1NFUlQodGFibGUtPnZhbGlkX2hvb2tzICYgKDEgPDwgaG9vaykpOwotCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKilwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CisJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCiAJZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKIAogCS8qIEZvciByZXR1cm4gZnJvbSBidWlsdGluIGNoYWluICovCkBAIC00NzQsNyArNDg1LDcgQEAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAJKChzdHJ1Y3QgaXA2dF9lbnRyeSAqKXRhYmxlX2Jhc2UpLT5jb21lZnJvbSA9IE5FVEZJTFRFUl9MSU5LX1BPSVNPTjsKICNlbmRpZgotCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKICNpZmRlZiBERUJVR19BTExPV19BTEwKIAlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtOTU1LDExICs5NjYsNjQgQEAKIAl9CiB9CiAKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlJUDZUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICAgdC0+c2l6ZSwKKwkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICAgY291bnRlcnMsCisJCQkgICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGlwNnRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJSVA2VF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05NjgsMTQgKzEwMzIsMjggQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOwogCi0JcmV0dXJuIGNvdW50ZXJzOworCWNsb25lX2NvdW50ZXJzKGluZm8sIHByaXZhdGUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOworCXh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHByaXZhdGUsIGluZm8pOworCXN5bmNocm9uaXplX25ldCgpOwkvKiBXYWl0IHVudGlsIHNtb2tlIGhhcyBjbGVhcmVkICovCisKKwlnZXRfY291bnRlcnMoaW5mbywgY291bnRlcnMpOworCXB1dF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisKKwl4dF9mcmVlX3RhYmxlX2luZm8oaW5mbyk7CisKKyBmcmVlX2NvdW50ZXJzOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBub21lbToKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIGludApAQCAtMTM0MiwyOCArMTQyMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCiAJCWludCBjb21wYXQpCkBAIC0xNDI0LDEzICsxNDgwLDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDM5LDggKzE0OTYsOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2I1YWRmLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogSG9wIExpbWl0IG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIGlwNnRhYmxlcwotICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KLSAqIEJhc2VkIG9uIEhXJ3MgVFRMIG1vZHVsZQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHUEwKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjYgSG9wIExpbWl0IGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotaGxfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKLQljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X2hsOwotCi0JaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKLQkJcmV0dXJuIE5GX0RST1A7Ci0KLQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfU0VUOgotCQkJbmV3X2hsID0gaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9JTkM6Ci0JCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgKyBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlpZiAobmV3X2hsID4gMjU1KQotCQkJCW5ld19obCA9IDI1NTsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfREVDOgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0IC0gaW5mby0+aG9wX2xpbWl0OwotCQkJaWYgKG5ld19obCA8IDApCi0JCQkJbmV3X2hsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JfQotCi0JaXA2aC0+aG9wX2xpbWl0ID0gbmV3X2hsOwotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCi0JCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90ZzZfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJITCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLnRhcmdldAkJPSBobF90ZzYsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5CT0gaGxfdGc2X2NoZWNrLAotCS5tZQkJPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaGxfdGc2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZobF90ZzZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX3RnNl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmhsX3RnNl9yZWcpOwotfQotCi1tb2R1bGVfaW5pdChobF90ZzZfaW5pdCk7Ci1tb2R1bGVfZXhpdChobF90ZzZfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDM3YWRmNWEuLjcwMThjYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAkubWUgCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXA2dF9sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcDZ0X2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJpcDZ0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcDZ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjRkY2EuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUgKi8KLQotLyogKEMpIDIwMDEtMjAwMiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgotICogQmFzZWQgb24gSFcncyB0dGwgbW9kdWxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY2IEhvcCBMaW1pdCBmaWVsZCBtYXRjaCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgYm9vbCBobF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaGxfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfRVE6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID09IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTkU6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ICE9IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTFQ6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0IDwgaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9HVDoKLQkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPiBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfaGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGxfbXQ2X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJobCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLm1hdGNoCQk9IGhsX210NiwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2hsX2luZm8pLAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhsX210Nl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZobF9tdDZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX210Nl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaGxfbXQ2X3JlZyk7Ci19Ci0KLW1vZHVsZV9pbml0KGhsX210Nl9pbml0KTsKLW1vZHVsZV9leGl0KGhsX210Nl9leGl0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCA0MGQyZTM2Li5lZjVhMGEzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC01NCw3ICs1NCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IGQwYjMxYjIuLmFiMGQzOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X21hbmdsZXIgPSB7CiAJLm5hbWUJCT0gIm1hbmdsZSIsCiAJLnZhbGlkX2hvb2tzCT0gTUFOR0xFX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfbWFuZ2xlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCAxMDlmYWI2Li40Yjc5MmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0zOCw3ICszOCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCmluZGV4IDIwYmM1MmYuLjBlYTM3ZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCkBAIC01OSw3ICs1OSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHNlY3VyaXR5X3RhYmxlLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggNzI3Yjk1My4uZTY4NTJmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIHN0YXRpYyBib29sIGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggNzJkYmI2ZC4uNDFiOGE5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0xMjYsNiArMTI2LDEwIEBACiAJCXByX2RlYnVnKCJpY21wdjY6IGNhbid0IGNyZWF0ZSBuZXcgY29ubiB3aXRoIHR5cGUgJXVcbiIsCiAJCQkgdHlwZSArIDEyOCk7CiAJCW5mX2N0X2R1bXBfdHVwbGVfaXB2NigmY3QtPnR1cGxlaGFzaFswXS50dXBsZSk7CisJCWlmIChMT0dfSU5WQUxJRChuZl9jdF9uZXQoY3QpLCBJUFBST1RPX0lDTVBWNikpCisJCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X2ljbXB2NjogaW52YWxpZCBuZXcgd2l0aCB0eXBlICVkICIsCisJCQkJICAgICAgdHlwZSArIDEyOCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJYXRvbWljX3NldCgmY3QtPnByb3RvLmljbXAuY291bnQsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggOWM1NzQyMy4uMTM5NGRkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC05OCw3ICs5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmdjCQkJPQlpcDZfZHN0X2djLAogCS5nY190aHJlc2gJCT0JMTAyNCwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKQEAgLTI0MDAsOCArMjQwMCw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAotCQkJICBpbmZvLT5ubGgsIGdmcF9hbnkoKSk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAorCQkgICAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA1Y2VlMmJjLi42NjRhYjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTY1OCw3ICs2NTgsOCBAQAogCX0KIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGU1Yjg1ZDQuLjRiNWFhMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNTMzLDggKzUzMyw3IEBACiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQlpZiAoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpCi0JCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CisJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCkBAIC05NDgsNyArOTQ3LDcgQEAKIAogCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgotCQlpZiAoIXRjcF92Nl9jaGVjayhza2ItPmxlbiwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92Nl9jaGVjayhza2JfZ3JvX2xlbihza2IpLCAmaXBoLT5zYWRkciwgJmlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CkBAIC0xNjExLDggKzE2MTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKG9wdF9za2IpCi0JCWtmcmVlX3NrYihvcHRfc2tiKTsKKwlrZnJlZV9za2Iob3B0X3NrYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggODRiMWEyOS4uNjg0MmRkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTQ5LDYgKzQ5LDM0IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJ1ZHBfaW1wbC5oIgogCitpbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoreworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7CisJaW50IHNrX2lwdjZvbmx5ID0gaXB2Nl9vbmx5X3NvY2soc2spOworCWludCBzazJfaXB2Nm9ubHkgPSBpbmV0X3Y2X2lwdjZvbmx5KHNrMik7CisJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKHNrX3Jjdl9zYWRkcjYpOworCWludCBhZGRyX3R5cGUyID0gc2syX3Jjdl9zYWRkcjYgPyBpcHY2X2FkZHJfdHlwZShzazJfcmN2X3NhZGRyNikgOiBJUFY2X0FERFJfTUFQUEVEOworCisJLyogaWYgYm90aCBhcmUgbWFwcGVkLCB0cmVhdCBhcyBJUHY0ICovCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkKKwkJcmV0dXJuIGlwdjRfcmN2X3NhZGRyX2VxdWFsKHNrLCBzazIpOworCisJaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCisJICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKKwkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHVkcF92Nl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7CiAJcmV0dXJuIHVkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggOTdhYjA2OC4uYjRiMTZhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTZfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZ2MgPQkJCXhmcm02X2dhcmJhZ2VfY29sbGVjdCwKIAkudXBkYXRlX3BtdHUgPQkJeGZybTZfdXBkYXRlX3BtdHUsCiAJLmRlc3Ryb3kgPQkJeGZybTZfZHN0X2Rlc3Ryb3ksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCAwZTY4NWIwLi5mNDE3Yjc3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJZHN0W2NvdW50W2NsYXNzW2ldIC0gMV0rK10gPSBzcmNbaV07Ci0JCXNyY1tpXSA9IDA7CisJCXNyY1tpXSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCBiNmU3MGY5Li4xNjI3MDUwIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE5NTgsMTMgKzE5NTgsMTMgQEAKIAogU09DS09QU19XUkFQKGlweF9kZ3JhbSwgUEZfSVBYKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfODAyM19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyksCiAJLmZ1bmMJCT0gaXB4X3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4X2RpeF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF9kaXhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9JUFgpLAogCS5mdW5jCQk9IGlweF9yY3YsCiB9OwogCkBAIC0xOTc1LDE1ICsxOTc1LDE1IEBACiBleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICptYWtlX0VJSV9jbGllbnQodm9pZCk7CiBleHRlcm4gdm9pZCBkZXN0cm95X0VJSV9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICopOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07Ci1zdGF0aWMgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF84MDIyX3R5cGUgPSAweEUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXB4X3NuYXBfaWRbNV0gPSB7IDB4MCwgMHgwLCAweDAsIDB4ODEsIDB4MzcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGlweF9FSUlfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggRXRoZXJuZXQgSUlcbiI7Ci1zdGF0aWMgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuM1xuIjsKLXN0YXRpYyBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4X2xsY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKLXN0YXRpYyBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIFNOQVBcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGlweF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwppbmRleCBlYTMxOWUzLi5iZjkyZTE0IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jCisrKyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKQEAgLTE0OSwxMyArMTQ5LDE0IEBACiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWRldi0+ZG9faW9jdGwpIHsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKSB7CiAJCUlSREFfRVJST1IoIiVzOiBkb19pb2N0bCBub3QgaW1wbC4gYnkgZGV2aWNlIGRyaXZlclxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldCA9IGRldi0+ZG9faW9jdGwoZGV2LCAoc3RydWN0IGlmcmVxICopICZyZXEsIFNJT0NHUkVDRUlWSU5HKTsKKwlyZXQgPSAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLAorCQkJCQkgICAgICBTSU9DR1JFQ0VJVklORyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMDUxMTJiZS4uNzI0YmNmOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTQ1LDYgKzQ1LDE2IEBACiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmxhbl9ldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBpcmxhbl9ldGhfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkgICAgICAgID0gaXJsYW5fZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2V0aF9zZXR1cCAoZGV2KQogICoKQEAgLTUzLDE0ICs2MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gaXJsYW5fZXRoX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0OworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmlybGFuX2V0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIAotCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKgogCSAqIExldHMgZG8gYWxsIHF1ZXVlaW5nIGluIElyVFRQIGluc3RlYWQgb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJtb2QuYyBiL25ldC9pcmRhL2lybW9kLmMKaW5kZXggNGM0ODdhOC4uMzAzYTY4ZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJtb2QuYworKysgYi9uZXQvaXJkYS9pcm1vZC5jCkBAIC01NSw4ICs1NSw4IEBACiAvKiBQYWNrZXQgdHlwZSBoYW5kbGVyLgogICogVGVsbCB0aGUga2VybmVsIGhvdyBJckRBIHBhY2tldHMgc2hvdWxkIGJlIGhhbmRsZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXJkYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVJEQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0lSREEpLAogCS5mdW5jCT0gaXJsYXBfZHJpdmVyX3JjdiwJLyogUGFja2V0IHR5cGUgaGFuZGxlciBpcmxhcF9mcmFtZS5jICovCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWI4YTJhMC4uNDllNzg2NSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMTE3MSw4ICsxMTcxLDcgQEAKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHRoaXMpCi0JCQlrZnJlZV9za2IodGhpcyk7CisJCWtmcmVlX3NrYih0aGlzKTsKIAl9CiAJQlVHX09OKCF0aGlzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggN2RjYmRlMy4uNjQzYzFiZSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0zMTMsOCArMzEzLDcgQEAKIAlpZiAob25lX3NrICE9IE5VTEwpCiAJCWVyciA9IHBma2V5X2Jyb2FkY2FzdF9vbmUoc2tiLCAmc2tiMiwgYWxsb2NhdGlvbiwgb25lX3NrKTsKIAotCWlmIChza2IyKQotCQlrZnJlZV9za2Ioc2tiMik7CisJa2ZyZWVfc2tiKHNrYjIpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTczLDggKzM1NzIsNyBAQAogb3V0OgogCWlmIChlcnIgJiYgaGRyICYmIHBma2V5X2Vycm9yKGhkciwgZXJyLCBzaykgPT0gMCkKIAkJZXJyID0gMDsKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBlcnIgPyA6IGxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDU2ZmQ4NWEuLmZlYmFlNzAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTExOCwxMSArMTExOCwxMSBAQAogCS5zZW5kcGFnZSAgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHByb2NfZnMgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3N5c2N0bF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHN5c2N0bCBlbnRyaWVzXG4iOwotc3RhdGljIGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGZhbWlseVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGxjMl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggNWM2ZDg5Yy4uMzQ3NzYyNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzMyLDggKzMzMiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGR1X3BvcyAmJiBpIDwgcV9sZW47IGkrKykgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmbGxjLT5wZHVfdW5hY2tfcSk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCW5icl9hY2tlZCsrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2NvcmUuYyBiL25ldC9sbGMvbGxjX2NvcmUuYwppbmRleCA1MGQ1YjEwLi5mZjRjMGFiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb3JlLmMKKysrIGIvbmV0L2xsYy9sbGNfY29yZS5jCkBAIC0xNDcsMTMgKzE0NywxMyBAQAogCWtmcmVlKHNhcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3RyX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUl84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfVFJfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCA3ZDQ5NzFhLi4wZTNhYjg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC04LDEzICs4LDE1IEBACiAJd2VwLm8gXAogCXdwYS5vIFwKIAlzY2FuLm8gXAotCWh0Lm8gXAorCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAorCWlic3MubyBcCiAJbWxtZS5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXAogCW1pY2hhZWwubyBcCiAJdGtpcC5vIFwKIAlhZXNfY2NtLm8gXAorCWFlc19jbWFjLm8gXAogCWNmZy5vIFwKIAlyeC5vIFwKIAlzcGVjdG1nbXQubyBcCkBAIC0zNyw2ICszOSw4IEBACiAJbWVzaF9wbGluay5vIFwKIAltZXNoX2h3bXAubwogCittYWM4MDIxMS0kKENPTkZJR19QTSkgKz0gcG0ubworCiAjIG9iamVjdHMgZm9yIFBJRCBhbGdvcml0aG0KIHJjODAyMTFfcGlkLXkgOj0gcmM4MDIxMV9waWRfYWxnby5vCiByYzgwMjExX3BpZC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX3BpZF9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwOTdiMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQUVTLTEyOC1DTUFDIHdpdGggVExlbiAxNiBmb3IgSUVFRSA4MDIuMTF3IEJJUAorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImtleS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCisKKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKKyNkZWZpbmUgQUVTX0NNQUNfS0VZX0xFTiAxNgorI2RlZmluZSBDTUFDX1RMRU4gOCAvKiBDTUFDIFRMZW4gPSA2NCBiaXRzICg4IG9jdGV0cykgKi8KKyNkZWZpbmUgQUFEX0xFTiAyMAorCisKK3N0YXRpYyB2b2lkIGdmX211bHgodTggKnBhZCkKK3sKKwlpbnQgaSwgY2Fycnk7CisKKwljYXJyeSA9IHBhZFswXSAmIDB4ODA7CisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFIC0gMTsgaSsrKQorCQlwYWRbaV0gPSAocGFkW2ldIDw8IDEpIHwgKHBhZFtpICsgMV0gPj4gNyk7CisJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gPDw9IDE7CisJaWYgKGNhcnJ5KQorCQlwYWRbQUVTX0JMT0NLX1NJWkUgLSAxXSBePSAweDg3OworfQorCisKK3N0YXRpYyB2b2lkIGFlc18xMjhfY21hY192ZWN0b3Ioc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCisJCQkJc2l6ZV90IG51bV9lbGVtLAorCQkJCWNvbnN0IHU4ICphZGRyW10sIGNvbnN0IHNpemVfdCAqbGVuLCB1OCAqbWFjKQoreworCXU4ICpjYmMsICpwYWQ7CisJY29uc3QgdTggKnBvcywgKmVuZDsKKwlzaXplX3QgaSwgZSwgbGVmdCwgdG90YWxfbGVuOworCisJY2JjID0gc2NyYXRjaDsKKwlwYWQgPSBzY3JhdGNoICsgQUVTX0JMT0NLX1NJWkU7CisKKwltZW1zZXQoY2JjLCAwLCBBRVNfQkxPQ0tfU0laRSk7CisKKwl0b3RhbF9sZW4gPSAwOworCWZvciAoZSA9IDA7IGUgPCBudW1fZWxlbTsgZSsrKQorCQl0b3RhbF9sZW4gKz0gbGVuW2VdOworCWxlZnQgPSB0b3RhbF9sZW47CisKKwllID0gMDsKKwlwb3MgPSBhZGRyWzBdOworCWVuZCA9IHBvcyArIGxlblswXTsKKworCXdoaWxlIChsZWZ0ID49IEFFU19CTE9DS19TSVpFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKSB7CisJCQljYmNbaV0gXj0gKnBvcysrOworCQkJaWYgKHBvcyA+PSBlbmQpIHsKKwkJCQllKys7CisJCQkJcG9zID0gYWRkcltlXTsKKwkJCQllbmQgPSBwb3MgKyBsZW5bZV07CisJCQl9CisJCX0KKwkJaWYgKGxlZnQgPiBBRVNfQkxPQ0tfU0laRSkKKwkJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBjYmMsIGNiYyk7CisJCWxlZnQgLT0gQUVTX0JMT0NLX1NJWkU7CisJfQorCisJbWVtc2V0KHBhZCwgMCwgQUVTX0JMT0NLX1NJWkUpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7CisJZ2ZfbXVseChwYWQpOworCisJaWYgKGxlZnQgfHwgdG90YWxfbGVuID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlZnQ7IGkrKykgeworCQkJY2JjW2ldIF49ICpwb3MrKzsKKwkJCWlmIChwb3MgPj0gZW5kKSB7CisJCQkJZSsrOworCQkJCXBvcyA9IGFkZHJbZV07CisJCQkJZW5kID0gcG9zICsgbGVuW2VdOworCQkJfQorCQl9CisJCWNiY1tsZWZ0XSBePSAweDgwOworCQlnZl9tdWx4KHBhZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyBpKyspCisJCXBhZFtpXSBePSBjYmNbaV07CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIHBhZCwgcGFkKTsKKwltZW1jcHkobWFjLCBwYWQsIENNQUNfVExFTik7Cit9CisKKwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCWNvbnN0IHU4ICphZGRyWzNdOworCXNpemVfdCBsZW5bM107CisJdTggemVyb1tDTUFDX1RMRU5dOworCisJbWVtc2V0KHplcm8sIDAsIENNQUNfVExFTik7CisJYWRkclswXSA9IGFhZDsKKwlsZW5bMF0gPSBBQURfTEVOOworCWFkZHJbMV0gPSBkYXRhOworCWxlblsxXSA9IGRhdGFfbGVuIC0gQ01BQ19UTEVOOworCWFkZHJbMl0gPSB6ZXJvOworCWxlblsyXSA9IENNQUNfVExFTjsKKworCWFlc18xMjhfY21hY192ZWN0b3IodGZtLCBzY3JhdGNoLCAzLCBhZGRyLCBsZW4sIG1pYyk7Cit9CisKKworc3RydWN0IGNyeXB0b19jaXBoZXIgKiBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdKQoreworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhZXMiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBOVUxMOworCisJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIEFFU19DTUFDX0tFWV9MRU4pOworCisJcmV0dXJuIHRmbTsKK30KKworCit2b2lkIGllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCWlmICh0Zm0pCisJCWNyeXB0b19mcmVlX2NpcGhlcih0Zm0pOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmggYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI5YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBRVNfQ01BQ19ICisjZGVmaW5lIEFFU19DTUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCitzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqIGllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10pOwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pOworCisjZW5kaWYgLyogQUVTX0NNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWFmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+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+IDI7CisJYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKKworCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7CisKKwkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6CisJICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5CisJICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCisJLyogWFhYOiBjaGVjayBvd24gaHQgZGVsYXllZCBCQSBjYXBhYmlsaXR5Pz8gKi8KKwlpZiAoKChiYV9wb2xpY3kgIT0gMSkKKwkJJiYgKCEoc3RhLT5zdGEuaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfREVMQVlfQkEpKSkKKwkJfHwgKGJ1Zl9zaXplID4gSUVFRTgwMjExX01BWF9BTVBEVV9CVUYpKSB7CisJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFkZEJBIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCwgYmFfcG9saWN5LAorCQkJCWJ1Zl9zaXplKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJZ290byBlbmRfbm9fbG9jazsKKwl9CisJLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KKwlpZiAoYnVmX3NpemUgPT0gMCkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbY29uZi0+Y2hhbm5lbC0+YmFuZF07CisJCWJ1Zl9zaXplID0gSUVFRTgwMjExX01JTl9BTVBEVV9CVUY7CisJCWJ1Zl9zaXplID0gYnVmX3NpemUgPDwgc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisJfQorCisKKwkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXVcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kOworCX0KKworCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCisJCQkJCXRpZCk7CisjZW5kaWYKKwkJZ290byBlbmQ7CisJfQorCS8qIHJ4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KKwkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisKKwkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCisJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQorCQlrY2FsbG9jKGJ1Zl9zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCisJCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQorCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOworCQlrZnJlZSh0aWRfYWdnX3J4KTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKKwl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OworCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7CisJc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKK2VuZDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworZW5kX25vX2xvY2s6CisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCisJCQkJICBkaWFsb2dfdG9rZW4sIHN0YXR1cywgMSwgYnVmX3NpemUsIHRpbWVvdXQpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjExNmQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAid21lLmgiCisKKy8qKgorICogRE9DOiBUWCBhZ2dyZWdhdGlvbgorICoKKyAqIEFnZ3JlZ2F0aW9uIG9uIHRoZSBUWCBzaWRlIHJlcXVpcmVzIHNldHRpbmcgdGhlIGhhcmR3YXJlIGZsYWcKKyAqICVJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04gYXMgd2VsbCBhcywgaWYgcHJlc2VudCwgdGhlIEBhbXBkdV9xdWV1ZXMKKyAqIGhhcmR3YXJlIHBhcmFtZXRlciB0byB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIEFNUERVIHF1ZXVlcy4gSWYgdGhlcmUgYXJlIG5vCisgKiBoYXJkd2FyZSBxdWV1ZXMgdGhlbiB0aGUgZHJpdmVyIHdpbGwgKGN1cnJlbnRseSkgaGF2ZSB0byBkbyBhbGwgZnJhbWUKKyAqIGJ1ZmZlcmluZy4KKyAqCisgKiBXaGVuIFRYIGFnZ3JlZ2F0aW9uIGlzIHN0YXJ0ZWQgYnkgc29tZSBzdWJzeXN0ZW0gKHVzdWFsbHkgdGhlIHJhdGUgY29udHJvbAorICogYWxnb3JpdGhtIHdvdWxkIGJlIGFwcHJvcHJpYXRlKSBieSBjYWxsaW5nIHRoZQorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oKSBmdW5jdGlvbiwgdGhlIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIHZpYQorICogaXRzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24sIHdpdGggdGhlICVJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQgYWN0aW9uLgorICoKKyAqIEluIHJlc3BvbnNlIHRvIHRoYXQsIHRoZSBkcml2ZXIgaXMgbGF0ZXIgcmVxdWlyZWQgdG8gY2FsbCB0aGUKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYigpIChvciBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSgpKQorICogZnVuY3Rpb24sIHdoaWNoIHdpbGwgc3RhcnQgdGhlIGFnZ3JlZ2F0aW9uIHNlc3Npb24uCisgKgorICogU2ltaWxhcmx5LCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGlzIHN0b3BwZWQgYnkKKyAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oKSwgdGhlIGRyaXZlcidzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24gd2lsbAorICogYmUgY2FsbGVkIHdpdGggdGhlIGFjdGlvbiAlSUVFRTgwMjExX0FNUERVX1RYX1NUT1AuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBjYWxsIG11c3Qgbm90IGZhaWwsIGFuZCB0aGUgZHJpdmVyIG11c3QgbGF0ZXIgY2FsbCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYigpCisgKiAob3IgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSgpKS4KKyAqLworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJCQkgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhcnRfc2VxX251bSwKKwkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpOworCisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVE7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisJY2FwYWIgPSAodTE2KSgxIDw8IDEpOwkJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYWdnX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ2VyZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKKworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtID0KKwkJCQkJY3B1X3RvX2xlMTYoc3RhcnRfc2VxX251bSA8PCA0KTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOworCXUxNiBiYXJfY29udHJvbCA9IDA7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkJImJhciBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWJhciA9IChzdHJ1Y3QgaWVlZTgwMjExX2JhciAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmJhcikpOworCW1lbXNldChiYXIsIDAsIHNpemVvZigqYmFyKSk7CisJYmFyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8CisJCQkJCSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOworCW1lbWNweShiYXItPnJhLCByYSwgRVRIX0FMRU4pOworCW1lbWNweShiYXItPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOworCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CisJYmFyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoYmFyX2NvbnRyb2wpOworCWJhci0+c3RhcnRfc2VxX251bSA9IGNwdV90b19sZTE2KHNzbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCitzdGF0aWMgaW50IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOworCWludCByZXQ7CisJdTggKnN0YXRlOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJaWYgKGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpIHsKKwkJaWYgKGluaXRpYXRvcikgeworCQkJLyoKKwkJCSAqIFN0b3AgdGhlIEFDIHF1ZXVlIHRvIGF2b2lkIGlzc3VlcyB3aGVyZSB3ZSBzZW5kCisJCQkgKiB1bmFnZ3JlZ2F0ZWQgZnJhbWVzIGFscmVhZHkgYmVmb3JlIHRoZSBkZWxiYS4KKwkJCSAqLworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJbG9jYWwtPmh3LnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQl9CisKKwkJLyoKKwkJICogUHJldGVuZCB0aGUgZHJpdmVyIHdva2UgdGhlIHF1ZXVlLCBqdXN0IGluIGNhc2UKKwkJICogaXQgZGlzYWJsZWQgaXQgYmVmb3JlIHRoZSBzZXNzaW9uIHdhcyBzdG9wcGVkLgorCQkgKi8KKwkJaWVlZTgwMjExX3dha2VfcXVldWUoCisJCQkmbG9jYWwtPmh3LCBsb2NhbC0+aHcucXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKKwl9CisJKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCisJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKKworCS8qIEhXIHNoYWxsIG5vdCBkZW55IGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCisJaWYgKFdBUk5fT04ocmV0KSkgeworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCisgKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KKyAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAqKWRhdGEsCisJCXN0cnVjdCBzdGFfaW5mbywgdGltZXJfdG9fdGlkW3RpZF0pOworCXU4ICpzdGF0ZTsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKKwkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHJlc3BvbnNlIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCB0aWQpOworI2VuZGlmCisKKwlfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2FjX2Zyb21fdGlkKGludCB0aWQpCit7CisJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbdGlkICYgN107Cit9CisKK2ludCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXU4ICpzdGF0ZTsKKwlpbnQgaSwgcW4gPSAtMSwgcmV0ID0gMDsKKwl1MTYgc3RhcnRfc2VxX251bTsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodGlkID49IFNUQV9USURfTlVNKSB8fCAhKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIk9wZW4gQkEgc2Vzc2lvbiByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCisJICAgICAgIHJhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJaWYgKGh3LT5hbXBkdV9xdWV1ZXMgJiYgaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCkgPT0gMCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAicmVqZWN0aW5nIG9uIHZvaWNlIEFDXG4iKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgdGhlIHN0YXRpb25cbiIpOworI2VuZGlmCisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gdW5sb2NrOworCX0KKworCS8qCisJICogVGhlIGFnZ3JlZ2F0aW9uIGNvZGUgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorCSAqIGFueXRoaW5nIGJ1dCBTVEEvQVAgZHVlIHRvIHRoZSBCU1NJRCBoYW5kbGluZy4KKwkgKiBJQlNTIGNvdWxkIHdvcmsgaW4gdGhlIGNvZGUgYnV0IGlzbid0IHN1cHBvcnRlZAorCSAqIGJ5IGRyaXZlcnMgb3IgdGhlIHN0YW5kYXJkLgorCSAqLworCWlmIChzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkgICAgc3RhLT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJc2RhdGEgPSBzdGEtPnNkYXRhOworCisJLyogd2UgaGF2ZSB0cmllZCB0b28gbWFueSB0aW1lcywgcmVjZWl2ZXIgZG9lcyBub3Qgd2FudCBBLU1QRFUgKi8KKwlpZiAoc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA+IEhUX0FHR19NQVhfUkVUUklFUykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubG9ja19zdGE7CisJfQorCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgbm90IGluIGFnZ3JlZ2F0aW9uIGZsb3cgYWxyZWFkeSAqLworCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX0lETEUpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gc2Vzc2lvbiBpcyBub3QgIgorCQkJCSAiaWRsZSBvbiB0aWQgJXVcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gZXJyX3VubG9ja19zdGE7CisJfQorCisJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKKwkJc3Bpbl9sb2NrKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CisJCS8qIHJlc2VydmUgYSBuZXcgcXVldWUgZm9yIHRoaXMgc2Vzc2lvbiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LmFtcGR1X3F1ZXVlczsgaSsrKSB7CisJCQlpZiAobG9jYWwtPmFtcGR1X2FjX3F1ZXVlW2ldIDwgMCkgeworCQkJCXFuID0gaTsKKwkJCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbcW5dID0KKwkJCQkJaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKKworCQlpZiAocW4gPCAwKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSAiCisJCQkgICAgICAgInF1ZXVlIHVuYXZhaWxhYmxlIGZvciB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBlcnJfdW5sb2NrX3N0YTsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB0aGUgc2Vzc2lvbiwgd2UgY2FuJ3QgaGF2ZQorCQkgKiBhbnl0aGluZyBnb2luZyBvbiBvbiB0aGUgcXVldWUgdGhpcyBUSUQgbWFwcyBpbnRvLCBzbworCQkgKiBzdG9wIGl0IGZvciBub3cuIFRoaXMgaXMgYSAidmlydHVhbCIgc3RvcCB1c2luZyB0aGUgc2FtZQorCQkgKiBtZWNoYW5pc20gdGhhdCBkcml2ZXJzIHdpbGwgdXNlLgorCQkgKgorCQkgKiBYWFg6IHF1ZXVlIHVwIGZyYW1lcyBmb3IgdGhpcyBzZXNzaW9uIGluIHRoZSBzdGFfaW5mbworCQkgKglzdHJ1Y3QgaW5zdGVhZCB0byBhdm9pZCBoaXR0aW5nIGFsbCBvdGhlciBTVEFzLgorCQkgKi8KKwkJaWVlZTgwMjExX3N0b3BfcXVldWVfYnlfcmVhc29uKAorCQkJJmxvY2FsLT5odywgaHctPnF1ZXVlcyArIHFuLAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKwl9CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworI2VuZGlmCisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JldHVybl9xdWV1ZTsKKwl9CisKKwkvKiBUeCB0aW1lciAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5mdW5jdGlvbiA9CisJCQlzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5kYXRhID0KKwkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOworCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisKKwkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKKwkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KKwkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKKworCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworCisJaWYgKHJldCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBIVyB1bmF2YWlsYWJsZSBmb3IiCisJCQkJCSIgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisJc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gcW47CisKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCS8qIHNlbmQgYW4gYWRkQkEgcmVxdWVzdCAqLworCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4gPQorCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOworCisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdGEtPnNkYXRhLCByYSwgdGlkLAorCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuLAorCQkJIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuLAorCQkJIDB4NDAsIDUwMDApOworCS8qIGFjdGl2YXRlIHRoZSB0aW1lciBmb3IgdGhlIHJlY2lwaWVudCdzIGFkZEJBIHJlc3BvbnNlICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmV4cGlyZXMgPQorCQkJCWppZmZpZXMgKyBBRERCQV9SRVNQX0lOVEVSVkFMOworCWFkZF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiYWN0aXZhdGVkIGFkZEJBIHJlc3BvbnNlIHRpbWVyIG9uIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCWdvdG8gdW5sb2NrOworCisgZXJyX2ZyZWU6CisJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOworIGVycl9yZXR1cm5fcXVldWU6CisJaWYgKHFuID49IDApIHsKKwkJLyogV2UgZmFpbGVkLCBzbyBzdGFydCBxdWV1ZSBhZ2FpbiByaWdodCBhd2F5LiAqLworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oaHcsIGh3LT5xdWV1ZXMgKyBxbiwKKwkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJCS8qIGdpdmUgcXVldWUgYmFjayB0byBwb29sICovCisJCXNwaW5fbG9jaygmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2spOworCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbcW5dID0gLTE7CisJCXNwaW5fdW5sb2NrKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CisJfQorIGVycl91bmxvY2tfc3RhOgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworIHVubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbik7CisKK3ZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdTggKnN0YXRlOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKKwkJCQl0aWQsIFNUQV9USURfTlVNKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoV0FSTl9PTighKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQkqc3RhdGUpOworI2VuZGlmCisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChXQVJOX09OKCpzdGF0ZSAmIEhUX0FEREJBX0RSVl9SRUFEWV9NU0spKQorCQlnb3RvIG91dDsKKworCSpzdGF0ZSB8PSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLOworCisJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmCisJCWlmIChody0+YW1wZHVfcXVldWVzKSB7CisJCQkvKgorCQkJICogV2FrZSB1cCB0aGlzIHF1ZXVlLCB3ZSBzdG9wcGVkIGl0IGVhcmxpZXIsCisJCQkgKiB0aGlzIHdpbGwgaW4gdHVybiB3YWtlIHRoZSBlbnRpcmUgQUMuCisJCQkgKi8KKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihodywKKwkJCQlody0+cXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVt0aWRdLAorCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisJCX0KKwl9CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYik7CisKK3ZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgY29uc3QgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICpyYV90aWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7CisKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgorCQkJICAgICAgICJkcm9wcGluZyBzdGFydCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOworCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwlyYV90aWQtPnRpZCA9IHRpZDsKKworCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfQUREQkFfTVNHOworCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUpOworCitpbnQgX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJdTggKnN0YXRlOworCWludCByZXQ7CisKKwkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gdW5sb2NrOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmV0ID0gX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgdTggKnJhLCB1MTYgdGlkLAorCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCByZXQgPSAwOworCisJaWYgKFdBUk5fT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldCA9IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKTsKKwordm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1OCB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdTggKnN0YXRlOworCisJaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKKwkJCQl0aWQsIFNUQV9USURfTlVNKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlN0b3BwaW5nIFR4IEJBIHNlc3Npb24gZm9yICVwTSB0aWQgJWRcbiIsCisJICAgICAgIHJhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKKyNlbmRpZgorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07CisKKwkvKiBOT1RFOiBubyBuZWVkIHRvIHVzZSBzdGEtPmxvY2sgaW4gdGhpcyBzdGF0ZSBjaGVjaywgYXMKKwkgKiBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uIHdpbGwgbGV0IG9ubHkgb25lIHN0b3AgY2FsbCB0bworCSAqIHBhc3MgdGhyb3VnaCBwZXIgc3RhL3RpZAorCSAqLworCWlmICgoKnN0YXRlICYgSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSykgPT0gMCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBjYWxsYmFjayB0byBBLU1QRFUgc3RvcFxuIik7CisjZW5kaWYKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKnN0YXRlICYgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9NU0spCisJCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHJhLCB0aWQsCisJCQlXTEFOX0JBQ0tfSU5JVElBVE9SLCBXTEFOX1JFQVNPTl9RU1RBX05PVF9VU0UpOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLICYmCisJICAgIGh3LT5hbXBkdV9xdWV1ZXMpIHsKKwkJLyoKKwkJICogV2FrZSB1cCB0aGlzIHF1ZXVlLCB3ZSBzdG9wcGVkIGl0IGVhcmxpZXIsCisJCSAqIHRoaXMgd2lsbCBpbiB0dXJuIHdha2UgdGhlIGVudGlyZSBBQy4KKwkJICovCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihodywKKwkJCWh3LT5xdWV1ZXMgKyBzdGEtPnRpZF90b190eF9xW3RpZF0sCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCX0KKworCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOworCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYik7CisKK3ZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOworCisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOworCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKKwlyYV90aWQtPnRpZCA9IHRpZDsKKworCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfREVMQkFfTVNHOworCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSk7CisKKwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKKwl1MTYgY2FwYWI7CisJdTE2IHRpZCwgc3RhcnRfc2VxX251bTsKKwl1OCAqc3RhdGU7CisKKwljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYik7CisJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQorCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQorCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQl1OCBjdXJzdGF0ZSA9ICpzdGF0ZTsKKworCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOworCisJCWlmIChody0+YW1wZHVfcXVldWVzICYmICpzdGF0ZSAhPSBjdXJzdGF0ZSAmJgorCQkgICAgKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgeworCQkJLyoKKwkJCSAqIFdha2UgdXAgdGhpcyBxdWV1ZSwgd2Ugc3RvcHBlZCBpdCBlYXJsaWVyLAorCQkJICogdGhpcyB3aWxsIGluIHR1cm4gd2FrZSB0aGUgZW50aXJlIEFDLgorCQkJICovCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oaHcsCisJCQkJaHctPnF1ZXVlcyArIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCQl9CisJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPSAwOworCisJCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pIHsKKwkJCSh2b2lkKWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywKKwkJCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9UWF9SRVNVTUUsCisJCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOworCQl9CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJSZXN1bWluZyBUWCBhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCX0gZWxzZSB7CisJCXN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0rKzsKKwkJX19faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDlkNGU0ZDguLjU4NjkzZTUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTEzMyw2ICsxMzMsOSBAQAogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJYWxnID0gQUxHX0NDTVA7CiAJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJCWFsZyA9IEFMR19BRVNfQ01BQzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjc1LDYgKzI3OCwxNyBAQAogCQllbHNlCiAJCQlwYXJhbXMuY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOworCQlzZXFbMF0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bNV07CisJCXNlcVsxXSA9IGtleS0+dS5hZXNfY21hYy50eF9wbls0XTsKKwkJc2VxWzJdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzNdOworCQlzZXFbM10gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bMl07CisJCXNlcVs0XSA9IGtleS0+dS5hZXNfY21hYy50eF9wblsxXTsKKwkJc2VxWzVdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzBdOworCQlwYXJhbXMuc2VxID0gc2VxOworCQlwYXJhbXMuc2VxX2xlbiA9IDY7CisJCWJyZWFrOwogCX0KIAogCXBhcmFtcy5rZXkgPSBrZXktPmNvbmYua2V5OwpAQCAtMzA0LDYgKzMxOCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9jb25maWdfZGVmYXVsdF9tZ210X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgdTgga2V5X2lkeCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGtleV9pZHgpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwpAQCAtMzExLDExICszNDEsMTUgQEAKIAlzaW5mby0+ZmlsbGVkID0gU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUgfAogCQkJU1RBVElPTl9JTkZPX1JYX0JZVEVTIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CWVRFUyB8CisJCQlTVEFUSU9OX0lORk9fUlhfUEFDS0VUUyB8CisJCQlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUyB8CiAJCQlTVEFUSU9OX0lORk9fVFhfQklUUkFURTsKIAogCXNpbmZvLT5pbmFjdGl2ZV90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhLT5sYXN0X3J4KTsKIAlzaW5mby0+cnhfYnl0ZXMgPSBzdGEtPnJ4X2J5dGVzOwogCXNpbmZvLT50eF9ieXRlcyA9IHN0YS0+dHhfYnl0ZXM7CisJc2luZm8tPnJ4X3BhY2tldHMgPSBzdGEtPnJ4X3BhY2tldHM7CisJc2luZm8tPnR4X3BhY2tldHMgPSBzdGEtPnR4X3BhY2tldHM7CiAKIAlpZiAoc3RhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgewogCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CkBAIC00MTcsNyArNDUxLDggQEAKIAkgKiBUaGlzIGlzIGEga2x1ZGdlLiBiZWFjb24gaW50ZXJ2YWwgc2hvdWxkIHJlYWxseSBiZSBwYXJ0CiAJICogb2YgdGhlIGJlYWNvbiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAocGFyYW1zLT5pbnRlcnZhbCkgeworCWlmIChwYXJhbXMtPmludGVydmFsICYmIChzZGF0YS0+bG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCAhPQorCQkJCSBwYXJhbXMtPmludGVydmFsKSkgewogCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IHBhcmFtcy0+aW50ZXJ2YWw7CiAJCWVyciA9IGllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLAogCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQkVBQ09OX0lOVEVSVkFMKTsKQEAgLTQ5Myw3ICs1MjgsOCBAQAogCiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCQkgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfYWRkX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTUzLDcgKzU4OSw3IEBACiAJc3luY2hyb25pemVfcmN1KCk7CiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIC8qIExheWVyIDIgVXBkYXRlIGZyYW1lICg4MDIuMiBUeXBlIDEgTExDIFhJRCBVcGRhdGUgcmVzcG9uc2UpICovCkBAIC02MzAsNiArNjY2LDEwIEBACiAJCXN0YS0+ZmxhZ3MgJj0gfldMQU5fU1RBX1dNRTsKIAkJaWYgKHBhcmFtcy0+c3RhdGlvbl9mbGFncyAmIFNUQVRJT05fRkxBR19XTUUpCiAJCQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKKworCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9NRlA7CisJCWlmIChwYXJhbXMtPnN0YXRpb25fZmxhZ3MgJiBTVEFUSU9OX0ZMQUdfTUZQKQorCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9NRlA7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0KIApAQCAtMTE0MSw2ICsxMTgxLDEyNSBAQAogCXJldHVybiBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCk7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X21nbXRfZXh0cmFfaWVfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSB1OCBzdWJ0eXBlLCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXN3aXRjaCAoc3VidHlwZSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSA+PiA0OgorCQlpZiAobG9jYWwtPm9wcy0+aHdfc2NhbikKKwkJCWJyZWFrOworCQlrZnJlZShpZm1nZC0+aWVfcHJvYmVyZXEpOworCQlpZm1nZC0+aWVfcHJvYmVyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9wcm9iZXJlcV9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9wcm9iZXJlc3ApOworCQlpZm1nZC0+aWVfcHJvYmVyZXNwID0gaWVzOworCQlpZm1nZC0+aWVfcHJvYmVyZXNwX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEggPj4gNDoKKwkJa2ZyZWUoaWZtZ2QtPmllX2F1dGgpOworCQlpZm1nZC0+aWVfYXV0aCA9IGllczsKKwkJaWZtZ2QtPmllX2F1dGhfbGVuID0gaWVzX2xlbjsKKwkJcmV0dXJuIDA7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9hc3NvY3JlcSk7CisJCWlmbWdkLT5pZV9hc3NvY3JlcSA9IGllczsKKwkJaWZtZ2QtPmllX2Fzc29jcmVxX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRID4+IDQ6CisJCWtmcmVlKGlmbWdkLT5pZV9yZWFzc29jcmVxKTsKKwkJaWZtZ2QtPmllX3JlYXNzb2NyZXEgPSBpZXM7CisJCWlmbWdkLT5pZV9yZWFzc29jcmVxX2xlbiA9IGllc19sZW47CisJCXJldHVybiAwOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfZGVhdXRoKTsKKwkJaWZtZ2QtPmllX2RlYXV0aCA9IGllczsKKwkJaWZtZ2QtPmllX2RlYXV0aF9sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyA+PiA0OgorCQlrZnJlZShpZm1nZC0+aWVfZGlzYXNzb2MpOworCQlpZm1nZC0+aWVfZGlzYXNzb2MgPSBpZXM7CisJCWlmbWdkLT5pZV9kaXNhc3NvY19sZW4gPSBpZXNfbGVuOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tZ210X2V4dHJhX2llKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBtZ210X2V4dHJhX2llX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXU4ICppZXM7CisJc2l6ZV90IGllc19sZW47CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKHBhcmFtcy0+aWVzKSB7CisJCWllcyA9IGttZW1kdXAocGFyYW1zLT5pZXMsIHBhcmFtcy0+aWVzX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmIChpZXMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZXNfbGVuID0gcGFyYW1zLT5pZXNfbGVuOworCX0gZWxzZSB7CisJCWllcyA9IE5VTEw7CisJCWllc19sZW4gPSAwOworCX0KKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlyZXQgPSBzZXRfbWdtdF9leHRyYV9pZV9zdGEoc2RhdGEsIHBhcmFtcy0+c3VidHlwZSwKKwkJCQkJICAgIGllcywgaWVzX2xlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlrZnJlZShpZXMpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3VzcGVuZCh3aXBoeV9wcml2KHdpcGh5KSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXJldHVybiBfX2llZWU4MDIxMV9yZXN1bWUod2lwaHlfcHJpdih3aXBoeSkpOworfQorI2Vsc2UKKyNkZWZpbmUgaWVlZTgwMjExX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpZWVlODAyMTFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIHJlcSk7Cit9CisKIHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHsKIAkuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsCiAJLmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLApAQCAtMTE0OSw2ICsxMzA4LDcgQEAKIAkuZGVsX2tleSA9IGllZWU4MDIxMV9kZWxfa2V5LAogCS5nZXRfa2V5ID0gaWVlZTgwMjExX2dldF9rZXksCiAJLnNldF9kZWZhdWx0X2tleSA9IGllZWU4MDIxMV9jb25maWdfZGVmYXVsdF9rZXksCisJLnNldF9kZWZhdWx0X21nbXRfa2V5ID0gaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X21nbXRfa2V5LAogCS5hZGRfYmVhY29uID0gaWVlZTgwMjExX2FkZF9iZWFjb24sCiAJLnNldF9iZWFjb24gPSBpZWVlODAyMTFfc2V0X2JlYWNvbiwKIAkuZGVsX2JlYWNvbiA9IGllZWU4MDIxMV9kZWxfYmVhY29uLApAQCAtMTE2OSw0ICsxMzI5LDggQEAKIAkuY2hhbmdlX2JzcyA9IGllZWU4MDIxMV9jaGFuZ2VfYnNzLAogCS5zZXRfdHhxX3BhcmFtcyA9IGllZWU4MDIxMV9zZXRfdHhxX3BhcmFtcywKIAkuc2V0X2NoYW5uZWwgPSBpZWVlODAyMTFfc2V0X2NoYW5uZWwsCisJLnNldF9tZ210X2V4dHJhX2llID0gaWVlZTgwMjExX3NldF9tZ210X2V4dHJhX2llLAorCS5zdXNwZW5kID0gaWVlZTgwMjExX3N1c3BlbmQsCisJLnJlc3VtZSA9IGllZWU4MDIxMV9yZXN1bWUsCisJLnNjYW4gPSBpZWVlODAyMTFfc2NhbiwKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCAyNjk3YTJmLi5lMzdmNTU3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTU3LDExICs1Nyw2MiBAQAogCQkgICAgICBsb2NhbC0+aHcuY29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7CiBERUJVR0ZTX1JFQURPTkxZX0ZJTEUodG90YWxfcHNfYnVmZmVyZWQsIDIwLCAiJWQiLAogCQkgICAgICBsb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQpOwotREVCVUdGU19SRUFET05MWV9GSUxFKHdlcF9pdiwgMjAsICIlIzA2eCIsCitERUJVR0ZTX1JFQURPTkxZX0ZJTEUod2VwX2l2LCAyMCwgIiUjMDh4IiwKIAkJICAgICAgbG9jYWwtPndlcF9pdiAmIDB4ZmZmZmZmKTsKIERFQlVHRlNfUkVBRE9OTFlfRklMRShyYXRlX2N0cmxfYWxnLCAxMDAsICIlcyIsCiAJCSAgICAgIGxvY2FsLT5yYXRlX2N0cmwgPyBsb2NhbC0+cmF0ZV9jdHJsLT5vcHMtPm5hbWUgOiAiPHVuc2V0PiIpOwogCitzdGF0aWMgc3NpemVfdCB0c2ZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1NjQgdHNmID0gMDsKKwljaGFyIGJ1ZlsxMDBdOworCisJaWYgKGxvY2FsLT5vcHMtPmdldF90c2YpCisJCXRzZiA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwMTZsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRzZik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDE5KTsKK30KKworc3RhdGljIHNzaXplX3QgdHNmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHNmOworCWNoYXIgYnVmWzEwMF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAicmVzZXQiLCA1KSA9PSAwKSB7CisJCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKKwkJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRlYnVnZnMgcmVzZXQgVFNGXG4iLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQl9CisJfSBlbHNlIHsKKwkJdHNmID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKKwkJaWYgKGxvY2FsLT5vcHMtPnNldF90c2YpIHsKKwkJCWxvY2FsLT5vcHMtPnNldF90c2YobG9jYWxfdG9faHcobG9jYWwpLCB0c2YpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRlYnVnZnMgc2V0IFRTRiB0byAlIzAxOGxseFxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCB0c2YpOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0c2Zfb3BzID0geworCS5yZWFkID0gdHNmX3JlYWQsCisJLndyaXRlID0gdHNmX3dyaXRlLAorCS5vcGVuID0gbWFjODAyMTFfb3Blbl9maWxlX2dlbmVyaWMKK307CisKIC8qIHN0YXRpc3RpY3Mgc3R1ZmYgKi8KIAogI2RlZmluZSBERUJVR0ZTX1NUQVRTX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJCVwKQEAgLTEzNiw4ICsxODcsNiBAQAogCQkgICBsb2NhbC0+ZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOwogREVCVUdGU19TVEFUU19GSUxFKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50LCAyMCwgIiV1IiwKIAkJICAgbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKLURFQlVHRlNfU1RBVFNfRklMRSh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiBERUJVR0ZTX1NUQVRTX0ZJTEUodHhfaGFuZGxlcnNfZHJvcCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT50eF9oYW5kbGVyc19kcm9wKTsKQEAgLTIwNCw2ICsyNTMsNyBAQAogCURFQlVHRlNfQUREKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfQUREKHRvdGFsX3BzX2J1ZmZlcmVkKTsKIAlERUJVR0ZTX0FERCh3ZXBfaXYpOworCURFQlVHRlNfQUREKHRzZik7CiAKIAlzdGF0c2QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXRpc3RpY3MiLCBwaHlkKTsKIAlsb2NhbC0+ZGVidWdmcy5zdGF0aXN0aWNzID0gc3RhdHNkOwpAQCAtMjIxLDcgKzI3MSw2IEBACiAJREVCVUdGU19TVEFUU19BREQocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKHdlcF91bmRlY3J5cHRhYmxlX2NvdW50KTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wKTsKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19xdWV1ZWQpOwpAQCAtMjU4LDYgKzMwNyw3IEBACiAJREVCVUdGU19ERUwobG9uZ19yZXRyeV9saW1pdCk7CiAJREVCVUdGU19ERUwodG90YWxfcHNfYnVmZmVyZWQpOwogCURFQlVHRlNfREVMKHdlcF9pdik7CisJREVCVUdGU19ERUwodHNmKTsKIAogCURFQlVHRlNfU1RBVFNfREVMKHRyYW5zbWl0dGVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChtdWx0aWNhc3RfdHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwpAQCAtMjY4LDcgKzMxOCw2IEBACiAJREVCVUdGU19TVEFUU19ERUwocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwotCURFQlVHRlNfU1RBVFNfREVMKHdlcF91bmRlY3J5cHRhYmxlX2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChudW1fc2NhbnMpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUwogCURFQlVHRlNfU1RBVFNfREVMKHR4X2hhbmRsZXJzX2Ryb3ApOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwppbmRleCA2NDI0YWM1Li45OWM3NTI1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwpAQCAtNzYsNiArNzYsOSBAQAogCWNhc2UgQUxHX0NDTVA6CiAJCWFsZyA9ICJDQ01QXG4iOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJYWxnID0gIkFFUy0xMjgtQ01BQ1xuIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA1LDYgKzEwOCwxMiBAQAogCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKIAkJCQl0cG5bMF0sIHRwblsxXSwgdHBuWzJdLCB0cG5bM10sIHRwbls0XSwgdHBuWzVdKTsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXRwbiA9IGtleS0+dS5hZXNfY21hYy50eF9wbjsKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJdHBuWzBdLCB0cG5bMV0sIHRwblsyXSwgdHBuWzNdLCB0cG5bNF0sCisJCQkJdHBuWzVdKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQyLDYgKzE1MSwxNCBAQAogCQl9CiAJCWxlbiA9IHAgLSBidWY7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlycG4gPSBrZXktPnUuYWVzX2NtYWMucnhfcG47CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAorCQkJICAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgICAgICAgcnBuWzBdLCBycG5bMV0sIHJwblsyXSwKKwkJCSAgICAgICBycG5bM10sIHJwbls0XSwgcnBuWzVdKTsKKwkJbGVuID0gcCAtIGJ1ZjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTU2LDEzICsxNzMsNDAgQEAKIAljaGFyIGJ1ZlsyMF07CiAJaW50IGxlbjsKIAotCWlmIChrZXktPmNvbmYuYWxnICE9IEFMR19DQ01QKQorCXN3aXRjaCAoa2V5LT5jb25mLmFsZykgeworCWNhc2UgQUxHX0NDTVA6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIGtleS0+dS5jY21wLnJlcGxheXMpOworCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwKKwkJCQlrZXktPnUuYWVzX2NtYWMucmVwbGF5cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAwOwotCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIGtleS0+dS5jY21wLnJlcGxheXMpOworCX0KIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIEtFWV9PUFMocmVwbGF5cyk7CiAKK3N0YXRpYyBzc2l6ZV90IGtleV9pY3ZlcnJvcnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzIwXTsKKwlpbnQgbGVuOworCisJc3dpdGNoIChrZXktPmNvbmYuYWxnKSB7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCisJCQkJa2V5LT51LmFlc19jbWFjLmljdmVycm9ycyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KK0tFWV9PUFMoaWN2ZXJyb3JzKTsKKwogc3RhdGljIHNzaXplX3Qga2V5X2tleV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTIyMiw2ICsyNjYsNyBAQAogCURFQlVHRlNfQUREKHR4X3NwZWMpOwogCURFQlVHRlNfQUREKHJ4X3NwZWMpOwogCURFQlVHRlNfQUREKHJlcGxheXMpOworCURFQlVHRlNfQUREKGljdmVycm9ycyk7CiAJREVCVUdGU19BREQoa2V5KTsKIAlERUJVR0ZTX0FERChpZmluZGV4KTsKIH07CkBAIC0yNDMsNiArMjg4LDcgQEAKIAlERUJVR0ZTX0RFTCh0eF9zcGVjKTsKIAlERUJVR0ZTX0RFTChyeF9zcGVjKTsKIAlERUJVR0ZTX0RFTChyZXBsYXlzKTsKKwlERUJVR0ZTX0RFTChpY3ZlcnJvcnMpOwogCURFQlVHRlNfREVMKGtleSk7CiAJREVCVUdGU19ERUwoaWZpbmRleCk7CiAKQEAgLTI4MCw2ICszMjYsMzUgQEAKIAlzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9rZXkgPSBOVUxMOwogfQogCit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCWNoYXIgYnVmWzUwXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OworCisJaWYgKCFzZGF0YS0+ZGVidWdmc2RpcikKKwkJcmV0dXJuOworCisJLyogdGhpcyBpcyBydW5uaW5nIHVuZGVyIHRoZSBrZXkgbG9jayAqLworCisJa2V5ID0gc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXk7CisJaWYgKGtleSkgeworCQlzcHJpbnRmKGJ1ZiwgIi4uL2tleXMvJWQiLCBrZXktPmRlYnVnZnMuY250KTsKKwkJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfbWdtdF9rZXkgPQorCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygiZGVmYXVsdF9tZ210X2tleSIsCisJCQkJCSAgICAgICBzZGF0YS0+ZGVidWdmc2RpciwgYnVmKTsKKwl9IGVsc2UKKwkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoc2RhdGEpOworfQorCit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCWlmICghc2RhdGEpCisJCXJldHVybjsKKworCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5KTsKKwlzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9tZ210X2tleSA9IE5VTEw7Cit9CisKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgKaW5kZXggYjFhMzc1NC4uNTQ3MTdiNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgKQEAgLTYsNiArNiwxMCBAQAogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiAjZWxzZQpAQCAtMTksNiArMjMsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7fQorc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQore30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3t9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3N0YV9kZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHt9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCmluZGV4IGM1NDIxOTMuLmUzNDIwMzIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCkBAIC05NCwzMSArOTQsMzEgQEAKIElFRUU4MDIxMV9JRl9GSUxFKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUobWF4X3JhdGVjdHJsX3JhdGVpZHgsIG1heF9yYXRlY3RybF9yYXRlaWR4LCBERUMpOwogCi0vKiBTVEEvSUJTUyBhdHRyaWJ1dGVzICovCi1JRUVFODAyMTFfSUZfRklMRShzdGF0ZSwgdS5zdGEuc3RhdGUsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5zdGEuYnNzaWQsIE1BQyk7Ci1JRUVFODAyMTFfSUZfRklMRShwcmV2X2Jzc2lkLCB1LnN0YS5wcmV2X2Jzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoc3NpZF9sZW4sIHUuc3RhLnNzaWRfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFpZCwgdS5zdGEuYWlkLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXBfY2FwYWIsIHUuc3RhLmFwX2NhcGFiLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoY2FwYWIsIHUuc3RhLmNhcGFiLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoZXh0cmFfaWVfbGVuLCB1LnN0YS5leHRyYV9pZV9sZW4sIFNJWkUpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmllcywgdS5zdGEuYXV0aF90cmllcywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFzc29jX3RyaWVzLCB1LnN0YS5hc3NvY190cmllcywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxncywgdS5zdGEuYXV0aF9hbGdzLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGcsIHUuc3RhLmF1dGhfYWxnLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmFuc2FjdGlvbiwgdS5zdGEuYXV0aF90cmFuc2FjdGlvbiwgREVDKTsKKy8qIFNUQSBhdHRyaWJ1dGVzICovCitJRUVFODAyMTFfSUZfRklMRShzdGF0ZSwgdS5tZ2Quc3RhdGUsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5tZ2QuYnNzaWQsIE1BQyk7CitJRUVFODAyMTFfSUZfRklMRShwcmV2X2Jzc2lkLCB1Lm1nZC5wcmV2X2Jzc2lkLCBNQUMpOworSUVFRTgwMjExX0lGX0ZJTEUoc3NpZF9sZW4sIHUubWdkLnNzaWRfbGVuLCBTSVpFKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFpZCwgdS5tZ2QuYWlkLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYXBfY2FwYWIsIHUubWdkLmFwX2NhcGFiLCBIRVgpOworSUVFRTgwMjExX0lGX0ZJTEUoY2FwYWIsIHUubWdkLmNhcGFiLCBIRVgpOworSUVFRTgwMjExX0lGX0ZJTEUoZXh0cmFfaWVfbGVuLCB1Lm1nZC5leHRyYV9pZV9sZW4sIFNJWkUpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmllcywgdS5tZ2QuYXV0aF90cmllcywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFzc29jX3RyaWVzLCB1Lm1nZC5hc3NvY190cmllcywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxncywgdS5tZ2QuYXV0aF9hbGdzLCBIRVgpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGcsIHUubWdkLmF1dGhfYWxnLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmFuc2FjdGlvbiwgdS5tZ2QuYXV0aF90cmFuc2FjdGlvbiwgREVDKTsKIAogc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX2ZtdF9mbGFncygKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogewogCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIlcyVzJXMlcyVzJXMlc1xuIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgPyAiU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgPyAiQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQgPyAicHJldiBCU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEID8gIkFVVEhcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCA/ICJBU1NPQ1xuIiA6ICIiLAotCQkgc2RhdGEtPnUuc3RhLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMID8gIlBST0JFUkVRIFBPTExcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgPyAiU1NJRFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgPyAiQlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQgPyAicHJldiBCU1NJRFxuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEID8gIkFVVEhcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCA/ICJBU1NPQ1xuIiA6ICIiLAorCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMID8gIlBST0JFUkVRIFBPTExcbiIgOiAiIiwKIAkJIHNkYXRhLT52aWYuYnNzX2NvbmYudXNlX2N0c19wcm90ID8gIkNUUyBwcm90XG4iIDogIiIpOwogfQogX19JRUVFODAyMTFfSUZfRklMRShmbGFncyk7CkBAIC0yODMsOSArMjgzLDExIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWFkZF9zdGFfZmlsZXMoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBYWFggKi8KKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJYWRkX2FwX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CkBAIC00MTgsOSArNDIwLDExIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWRlbF9zdGFfZmlsZXMoc2RhdGEpOwogCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBYWFggKi8KKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJZGVsX2FwX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCmluZGV4IGEyZmJlMDEuLjkwMjMwYzcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCkBAIC02NywxNCArNjcsMTUgQEAKIAljaGFyIGJ1ZlsxMDBdOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXUzMiBzdGFmbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKLQlpbnQgcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVzJXMlcyVzJXMlcyIsCisJaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcyVzJXMlcyVzJXMlcyIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVVUSCA/ICJBVVRIXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfQVNTT0MgPyAiQVNTT0NcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9QUyA/ICJQU1xuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FVVEhPUklaRUQgPyAiQVVUSE9SSVpFRFxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX1NIT1JUX1BSRUFNQkxFID8gIlNIT1JUIFBSRUFNQkxFXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfV01FID8gIldNRVxuIiA6ICIiLAotCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIik7CisJCXN0YWZsYWdzICYgV0xBTl9TVEFfV0RTID8gIldEU1xuIiA6ICIiLAorCQlzdGFmbGFncyAmIFdMQU5fU1RBX01GUCA/ICJNRlBcbiIgOiAiIik7CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CiB9CiBTVEFfT1BTKGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggYzVjMGM1Mi4uNGUzYzcyZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTE3LDggKzE3LDcgQEAKICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgotI2luY2x1ZGUgInN0YV9pbmZvLmgiCi0jaW5jbHVkZSAid21lLmgiCisjaW5jbHVkZSAicmF0ZS5oIgogCiB2b2lkIGllZWU4MDIxMV9odF9jYXBfaWVfdG9fc3RhX2h0X2NhcChzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9pZSwKQEAgLTk1LDcgKzk0LDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19odF9jb25mIGh0OworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXUzMiBjaGFuZ2VkID0gMDsKIAlib29sIGVuYWJsZV9odCA9IHRydWUsIGh0X2NoYW5nZWQ7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CkBAIC0xMzAsMTQgKzEzMSwyNSBAQAogCQl9CiAJfQogCi0JaHRfY2hhbmdlZCA9IGxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgIT0gZW5hYmxlX2h0IHx8Ci0JCSAgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZTsKKwlodF9jaGFuZ2VkID0gY29uZl9pc19odCgmbG9jYWwtPmh3LmNvbmYpICE9IGVuYWJsZV9odCB8fAorCQkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGU7CiAKIAlsb2NhbC0+b3Blcl9jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7Ci0JbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGVuYWJsZV9odDsKIAotCWlmIChodF9jaGFuZ2VkKQotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSFQpOworCWlmIChodF9jaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgLyogY2hhbm5lbF90eXBlIGNoYW5nZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkICovCisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOworCisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CisJCWlmIChzdGEpCisJCQlyYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUobG9jYWwsIHNiYW5kLCBzdGEsCisJCQkJCQkgSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCisgICAgICAgIH0KIAogCS8qIGRpc2FibGUgSFQgKi8KIAlpZiAoIWVuYWJsZV9odCkKQEAgLTE1NCwxMDggKzE2NiwyMiBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAotCQkJCQkgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhcnRfc2VxX251bSwKLQkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTE2IGNhcGFiOworCWludCBpOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgotCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgaSwgV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJCV9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsIGksIFdMQU5fQkFDS19SRUNJUElFTlQsCisJCQkJCSAgICAgICBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MpOwogCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7Ci0KLQlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpOwotCi0JbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVE7Ci0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0JY2FwYWIgPSAodTE2KSgxIDw8IDEpOwkJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCi0JY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCi0JY2FwYWIgfD0gKHUxNikoYWdnX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ2VyZ2F0aW9uICovCi0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKLQotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtID0KLQkJCQkJY3B1X3RvX2xlMTYoc3RhcnRfc2VxX251bSA8PCA0KTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkYSwgdTE2IHRpZCwKLQkJCQkgICAgICB1OCBkaWFsb2dfdG9rZW4sIHUxNiBzdGF0dXMsIHUxNiBwb2xpY3ksCi0JCQkJICAgICAgdTE2IGJ1Zl9zaXplLCB1MTYgdGltZW91dCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBjYXBhYjsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgotCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7Ci0KLQlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKLQltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0KLQljYXBhYiA9ICh1MTYpKHBvbGljeSA8PCAxKTsJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCi0JY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCi0JY2FwYWIgfD0gKHUxNikoYnVmX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ3JlZ2F0aW9uICovCi0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCi0JCQkJIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKK3ZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKKwkJCSAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbl9jb2RlKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJdTE2IHBhcmFtczsKQEAgLTI3MywxMCArMTk5LDEyIEBACiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKIAltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CiAKQEAgLTI5MCw3NzAgKzIxOCw3IEBACiAJbWdtdC0+dS5hY3Rpb24udS5kZWxiYS5wYXJhbXMgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwogCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb25fY29kZSk7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9iYXIgKmJhcjsKLQl1MTYgYmFyX2NvbnRyb2wgPSAwOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKmJhcikgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKLQkJCSJiYXIgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQliYXIgPSAoc3RydWN0IGllZWU4MDIxMV9iYXIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpiYXIpKTsKLQltZW1zZXQoYmFyLCAwLCBzaXplb2YoKmJhcikpOwotCWJhci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfAotCQkJCQkgSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKTsKLQltZW1jcHkoYmFyLT5yYSwgcmEsIEVUSF9BTEVOKTsKLQltZW1jcHkoYmFyLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9BQ0tfUE9MSUNZX05PUk1BTDsKLQliYXJfY29udHJvbCB8PSAodTE2KUlFRUU4MDIxMV9CQVJfQ1RSTF9DQk1USURfQ09NUFJFU1NFRF9CQTsKLQliYXJfY29udHJvbCB8PSAodTE2KSh0aWQgPDwgMTIpOwotCWJhci0+Y29udHJvbCA9IGNwdV90b19sZTE2KGJhcl9jb250cm9sKTsKLQliYXItPnN0YXJ0X3NlcV9udW0gPSBjcHVfdG9fbGUxNihzc24pOwotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKnJhLCB1MTYgdGlkLAotCQkJCQl1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgcmV0LCBpOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXQotCQkJCSE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0KLQkJSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8Ci0JCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCi0JICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KLQlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiUnggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAotCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkhXIHByb2JsZW0gLSBjYW4gbm90IHN0b3AgcnggIgotCQkJCSJhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOwotCi0JLyogc2h1dGRvd24gdGltZXIgaGFzIG5vdCBleHBpcmVkICovCi0JaWYgKGluaXRpYXRvciAhPSBXTEFOX0JBQ0tfVElNRVIpCi0JCWRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIpOwotCi0JLyogY2hlY2sgaWYgdGhpcyBpcyBhIHNlbGYgZ2VuZXJhdGVkIGFnZ3JlZ2F0aW9uIGhhbHQgKi8KLQlpZiAoaW5pdGlhdG9yID09IFdMQU5fQkFDS19SRUNJUElFTlQgfHwgaW5pdGlhdG9yID09IFdMQU5fQkFDS19USU1FUikKLQkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc2RhdGEsIHJhLCB0aWQsIDAsIHJlYXNvbik7Ci0KLQkvKiBmcmVlIHRoZSByZW9yZGVyaW5nIGJ1ZmZlciAqLwotCWZvciAoaSA9IDA7IGkgPCBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPmJ1Zl9zaXplOyBpKyspIHsKLQkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pIHsKLQkJCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgKi8KLQkJCWRldl9rZnJlZV9za2Ioc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSk7Ci0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnN0b3JlZF9tcGR1X251bS0tOwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0JLyogZnJlZSByZXNvdXJjZXMgKi8KLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmKTsKLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9IE5VTEw7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotCi0vKgotICogQWZ0ZXIgc2VuZGluZyBhZGQgQmxvY2sgQWNrIHJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIgdW50aWwKLSAqIGFkZCBCbG9jayBBY2sgcmVzcG9uc2Ugd2lsbCBhcnJpdmUgZnJvbSB0aGUgcmVjaXBpZW50LgotICogSWYgdGhpcyB0aW1lciBleHBpcmVzIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQgd2lsbCBiZSBleGVjdXRlZC4KLSAqLwotc3RhdGljIHZvaWQgc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKLQkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIGJvdGggc3RhX2luZm8gYW5kIFRJRCBhcmUgbmVlZGVkLCBzbyBpbml0Ci0JICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKLQkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCi0JdTE2IHRpZCA9ICoodTggKilkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqdGVtcF9zdGEgPSBjb250YWluZXJfb2YoKHZvaWQgKilkYXRhLAotCQlzdHJ1Y3Qgc3RhX2luZm8sIHRpbWVyX3RvX3RpZFt0aWRdKTsKLQotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gdGVtcF9zdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHRlbXBfc3RhLT5zdGEuYWRkcik7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JLyogY2hlY2sgaWYgdGhlIFRJRCB3YWl0cyBmb3IgYWRkQkEgcmVzcG9uc2UgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAidGltZXIgZXhwaXJlZCBvbiB0aWQgJWQgYnV0IHdlIGFyZSBub3QgIgotCQkJCSJleHBlY3RpbmcgYWRkQkEgcmVzcG9uc2UgdGhlcmUiLCB0aWQpOwotI2VuZGlmCi0JCWdvdG8gdGltZXJfZXhwaXJlZF9leGl0OwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSByZXNwb25zZSB0aW1lciBleHBpcmVkIG9uIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZgotCi0JLyogZ28gdGhyb3VnaCB0aGUgc3RhdGUgY2hlY2sgaW4gc3RvcF9CQV9zZXNzaW9uICovCi0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oaHcsIHRlbXBfc3RhLT5zdGEuYWRkciwgdGlkLAotCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0KLXRpbWVyX2V4cGlyZWRfZXhpdDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmFkZHIpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKLQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbigmbG9jYWwtPmh3LCBhZGRyLCBpLAotCQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwotCQlpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbihzZGF0YSwgYWRkciwgaSwKLQkJCQkJCSBXTEFOX0JBQ0tfUkVDSVBJRU5ULAotCQkJCQkJIFdMQU5fUkVBU09OX1FTVEFfTEVBVkVfUUJTUyk7Ci0JfQotfQotCi1pbnQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQl1MTYgc3RhcnRfc2VxX251bTsKLQl1OCAqc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoKHRpZCA+PSBTVEFfVElEX05VTSkgfHwgIShody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJPcGVuIEJBIHNlc3Npb24gcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCB0aGUgc3RhdGlvblxuIik7Ci0jZW5kaWYKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBleGl0OwotCX0KLQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCS8qIHdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMsIHJlY2VpdmVyIGRvZXMgbm90IHdhbnQgQS1NUERVICovCi0JaWYgKHN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPiBIVF9BR0dfTUFYX1JFVFJJRVMpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGVycl91bmxvY2tfc3RhOwotCX0KLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkvKiBjaGVjayBpZiB0aGUgVElEIGlzIG5vdCBpbiBhZ2dyZWdhdGlvbiBmbG93IGFscmVhZHkgKi8KLQlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKLQkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIGVycl91bmxvY2tfc3RhOwotCX0KLQotCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFR4IGFnZ3JlZ2F0aW9uICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0KLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfdHgpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSB0eCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCi0JCQkJCXRpZCk7Ci0jZW5kaWYKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0JLyogVHggdGltZXIgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPQotCQkJc3RhX2FkZGJhX3Jlc3BfdGltZXJfZXhwaXJlZDsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZGF0YSA9Ci0JCQkodW5zaWduZWQgbG9uZykmc3RhLT50aW1lcl90b190aWRbdGlkXTsKLQlpbml0X3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwotCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpIHsKLQkJLyogY3JlYXRlIGEgbmV3IHF1ZXVlIGZvciB0aGlzIGFnZ3JlZ2F0aW9uICovCi0JCXJldCA9IGllZWU4MDIxMV9odF9hZ2dfcXVldWVfYWRkKGxvY2FsLCBzdGEsIHRpZCk7Ci0KLQkJLyogY2FzZSBubyBxdWV1ZSBpcyBhdmFpbGFibGUgdG8gYWdncmVnYXRpb24KLQkJICogZG9uJ3Qgc3dpdGNoIHRvIGFnZ3JlZ2F0aW9uICovCi0JCWlmIChyZXQpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtICIKLQkJCSAgICAgICAicXVldWUgdW5hdmFpbGFibGUgZm9yIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKLQkJfQotCX0KLQlzZGF0YSA9IHN0YS0+c2RhdGE7Ci0KLQkvKiBPaywgdGhlIEFkZGJhIGZyYW1lIGhhc24ndCBiZWVuIHNlbnQgeWV0LCBidXQgaWYgdGhlIGRyaXZlciBjYWxscyB0aGUKLQkgKiBjYWxsIGJhY2sgcmlnaHQgYXdheSwgaXQgbXVzdCBzZWUgdGhhdCB0aGUgZmxvdyBoYXMgYmVndW4gKi8KLQkqc3RhdGUgfD0gSFRfQUREQkFfUkVRVUVTVEVEX01TSzsKLQotCS8qIFRoaXMgaXMgc2xpZ2h0bHkgcmFjeSBiZWNhdXNlIHRoZSBxdWV1ZSBpc24ndCBzdG9wcGVkICovCi0Jc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOwotCi0JaWYgKHJldCkgewotCQkvKiBObyBuZWVkIHRvIHJlcXVldWUgdGhlIHBhY2tldHMgaW4gdGhlIGFnZyBxdWV1ZSwgc2luY2Ugd2UKLQkJICogaGVsZCB0aGUgdHggbG9jazogbm8gcGFja2V0IGNvdWxkIGJlIGVucXVldWVkIHRvIHRoZSBuZXdseQotCQkgKiBhbGxvY2F0ZWQgcXVldWUgKi8KLQkJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX3JlbW92ZShsb2NhbCwgc3RhLCB0aWQsIDApOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBIVyB1bmF2YWlsYWJsZSBmb3IiCi0JCQkJCSIgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLQkJZ290byBlcnJfdW5sb2NrX3F1ZXVlOwotCX0KLQotCS8qIFdpbGwgcHV0IGFsbCB0aGUgcGFja2V0cyBpbiB0aGUgbmV3IFNXIHF1ZXVlICovCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCWllZWU4MDIxMV9yZXF1ZXVlKGxvY2FsLCBpZWVlODAyXzFkX3RvX2FjW3RpZF0pOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JLyogc2VuZCBhbiBhZGRCQSByZXF1ZXN0ICovCi0Jc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IrKzsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiA9Ci0JCQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiA9IHN0YXJ0X3NlcV9udW07Ci0KLQotCWllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RhLT5zZGF0YSwgcmEsIHRpZCwKLQkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiwKLQkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiwKLQkJCSAweDQwLCA1MDAwKTsKLQkvKiBhY3RpdmF0ZSB0aGUgdGltZXIgZm9yIHRoZSByZWNpcGllbnQncyBhZGRCQSByZXNwb25zZSAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5leHBpcmVzID0KLQkJCQlqaWZmaWVzICsgQUREQkFfUkVTUF9JTlRFUlZBTDsKLQlhZGRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgImFjdGl2YXRlZCBhZGRCQSByZXNwb25zZSB0aW1lciBvbiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQlnb3RvIGV4aXQ7Ci0KLWVycl91bmxvY2tfcXVldWU6Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXJldCA9IC1FQlVTWTsKLWVycl91bmxvY2tfc3RhOgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotZXhpdDoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbik7Ci0KLWludCBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1OCAqcmEsIHUxNiB0aWQsCi0JCQkJIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCWludCByZXQgPSAwOwotCi0JaWYgKHRpZCA+PSBTVEFfVElEX05VTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCS8qIGNoZWNrIGlmIHRoZSBUSUQgaXMgaW4gYWdncmVnYXRpb24gKi8KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBzdG9wX0JBX2V4aXQ7Ci0JfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlR4IEJBIHNlc3Npb24gc3RvcCByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCi0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8Ci0JCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7Ci0KLQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QLAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpOwotCi0JLyogY2FzZSBIVyBkZW5pZWQgZ29pbmcgYmFjayB0byBsZWdhY3kgKi8KLQlpZiAocmV0KSB7Ci0JCVdBUk5fT04ocmV0ICE9IC1FQlVTWSk7Ci0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQkJaWYgKGh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQkJZ290byBzdG9wX0JBX2V4aXQ7Ci0JfQotCi1zdG9wX0JBX2V4aXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbik7Ci0KLXZvaWQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCi0JaWYgKHRpZCA+PSBTVEFfVElEX05VTSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIFRJRCB2YWx1ZTogdGlkID0gJWQgKD49ICVkKVxuIiwKLQkJCQl0aWQsIFNUQV9USURfTlVNKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoISgqc3RhdGUgJiBIVF9BRERCQV9SRVFVRVNURURfTVNLKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgd2FzIG5vdCByZXF1ZXN0ZWQgeWV0LCBzdGF0ZSBpcyAlZFxuIiwKLQkJCQkqc3RhdGUpOwotI2VuZGlmCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCVdBUk5fT05fT05DRSgqc3RhdGUgJiBIVF9BRERCQV9EUlZfUkVBRFlfTVNLKTsKLQotCSpzdGF0ZSB8PSBIVF9BRERCQV9EUlZfUkVBRFlfTVNLOwotCi0JaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOwotI2VuZGlmCi0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCXJjdV9yZWFkX3VubG9jaygpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IpOwotCi12b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHU4IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1OCAqc3RhdGU7Ci0JaW50IGFnZ19xdWV1ZTsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCi0JCQkJdGlkLCBTVEFfVElEX05VTSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJTdG9wcGluZyBUeCBCQSBzZXNzaW9uIGZvciAlcE0gdGlkICVkXG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7Ci0jZW5kaWYKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCi0JLyogTk9URTogbm8gbmVlZCB0byB1c2Ugc3RhLT5sb2NrIGluIHRoaXMgc3RhdGUgY2hlY2ssIGFzCi0JICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiB3aWxsIGxldCBvbmx5IG9uZSBzdG9wIGNhbGwgdG8KLQkgKiBwYXNzIHRocm91Z2ggcGVyIHN0YS90aWQKLQkgKi8KLQlpZiAoKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0spID09IDApIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgY2FsbGJhY2sgdG8gQS1NUERVIHN0b3BcbiIpOwotI2VuZGlmCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLKQotCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCByYSwgdGlkLAotCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKLQotCWlmIChody0+YW1wZHVfcXVldWVzKSB7Ci0JCWFnZ19xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQkJaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUobG9jYWwsIHN0YSwgdGlkLCAxKTsKLQotCQkvKiBXZSBqdXN0IHJlcXVldWVkIHRoZSBhbGwgdGhlIGZyYW1lcyB0aGF0IHdlcmUgaW4gdGhlCi0JCSAqIHJlbW92ZWQgcXVldWUsIGFuZCBzaW5jZSB3ZSBtaWdodCBtaXNzIGEgc29mdGlycSB3ZSBkbwotCQkgKiBuZXRpZl9zY2hlZHVsZV9xdWV1ZS4gIGllZWU4MDIxMV93YWtlX3F1ZXVlIGlzIG5vdCB1c2VkCi0JCSAqIGhlcmUgYXMgdGhpcyBxdWV1ZSBpcyBub3QgbmVjZXNzYXJpbHkgc3RvcHBlZAotCQkgKi8KLQkJbmV0aWZfc2NoZWR1bGVfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShsb2NhbC0+bWRldiwKLQkJCQkJCQkgYWdnX3F1ZXVlKSk7Ci0JfQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKLQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IpOwotCi12b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwotCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCi0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKLQkJCSAgICAgICAiZHJvcHBpbmcgc3RhcnQgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKLQltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JcmFfdGlkLT50aWQgPSB0aWQ7Ci0KLQlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0FEREJBX01TRzsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKTsKLQotdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgY29uc3QgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICpyYV90aWQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoMCk7Ci0KLQlpZiAodW5saWtlbHkoIXNrYikpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSwgIgotCQkJICAgICAgICJkcm9wcGluZyBzdG9wIEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7Ci0JbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOwotCXJhX3RpZC0+dGlkID0gdGlkOwotCi0Jc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9ERUxCQV9NU0c7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7Ci0JdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKTsKLQotLyoKLSAqIEFmdGVyIGFjY2VwdGluZyB0aGUgQWRkQkEgUmVxdWVzdCB3ZSBhY3RpdmF0ZWQgYSB0aW1lciwKLSAqIHJlc2V0dGluZyBpdCBhZnRlciBlYWNoIGZyYW1lIHRoYXQgYXJyaXZlcyBmcm9tIHRoZSBvcmlnaW5hdG9yLgotICogaWYgdGhpcyB0aW1lciBleHBpcmVzIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQkvKiBub3QgYW4gZWxlZ2FudCBkZXRvdXIsIGJ1dCB0aGVyZSBpcyBubyBjaG9pY2UgYXMgdGhlIHRpbWVyIHBhc3NlcwotCSAqIG9ubHkgb25lIGFyZ3VtZW50LCBhbmQgdmFyaW91cyBzdGFfaW5mbyBhcmUgbmVlZGVkIGhlcmUsIHNvIGluaXQKLQkgKiBmbG93IGluIHN0YV9pbmZvX2NyZWF0ZSBnaXZlcyB0aGUgVElEIGFzIGRhdGEsIHdoaWxlIHRoZSB0aW1lcl90b19pZAotCSAqIGFycmF5IGdpdmVzIHRoZSBzdGEgdGhyb3VnaCBjb250YWluZXJfb2YgKi8KLQl1OCAqcHRpZCA9ICh1OCAqKWRhdGE7Ci0JdTggKnRpbWVyX3RvX2lkID0gcHRpZCAtICpwdGlkOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHRpbWVyX3RvX2lkLCBzdHJ1Y3Qgc3RhX2luZm8sCi0JCQkJCSB0aW1lcl90b190aWRbMF0pOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInJ4IHNlc3Npb24gdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsICh1MTYpKnB0aWQpOwotI2VuZGlmCi0JaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLT5zZGF0YSwgc3RhLT5zdGEuYWRkciwKLQkJCQkJICh1MTYpKnB0aWQsIFdMQU5fQkFDS19USU1FUiwKLQkJCQkJIFdMQU5fUkVBU09OX1FTVEFfVElNRU9VVCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7Ci0JdTE2IGNhcGFiLCB0aWQsIHRpbWVvdXQsIGJhX3BvbGljeSwgYnVmX3NpemUsIHN0YXJ0X3NlcV9udW0sIHN0YXR1czsKLQl1OCBkaWFsb2dfdG9rZW47Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwotCi0JLyogZXh0cmFjdCBzZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBhZGRiYSByZXF1ZXN0IGZyYW1lICovCi0JZGlhbG9nX3Rva2VuID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuOwotCXRpbWVvdXQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0KTsKLQlzdGFydF9zZXFfbnVtID0KLQkJbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSkgPj4gNDsKLQotCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOwotCWJhX3BvbGljeSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSykgPj4gMTsKLQl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7Ci0JYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKLQotCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6Ci0JICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5Ci0JICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCi0JLyogWFhYOiBjaGVjayBvd24gaHQgZGVsYXllZCBCQSBjYXBhYmlsaXR5Pz8gKi8KLQlpZiAoKChiYV9wb2xpY3kgIT0gMSkKLQkJJiYgKCEoc3RhLT5zdGEuaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfREVMQVlfQkEpKSkKLQkJfHwgKGJ1Zl9zaXplID4gSUVFRTgwMjExX01BWF9BTVBEVV9CVUYpKSB7Ci0JCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFkZEJBIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCi0JCQkJIiVwTSBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCi0JCQkJbWdtdC0+c2EsIHRpZCwgYmFfcG9saWN5LAotCQkJCWJ1Zl9zaXplKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJZ290byBlbmRfbm9fbG9jazsKLQl9Ci0JLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KLQlpZiAoYnVmX3NpemUgPT0gMCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbY29uZi0+Y2hhbm5lbC0+YmFuZF07Ci0JCWJ1Zl9zaXplID0gSUVFRTgwMjExX01JTl9BTVBEVV9CVUY7Ci0JCWJ1Zl9zaXplID0gYnVmX3NpemUgPDwgc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3I7Ci0JfQotCi0KLQkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9JRExFKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCi0JCQkJIiVwTSBvbiB0aWQgJXVcbiIsCi0JCQkJbWdtdC0+c2EsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCWdvdG8gZW5kOwotCX0KLQotCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCi0JCQkJCXRpZCk7Ci0jZW5kaWYKLQkJZ290byBlbmQ7Ci0JfQotCS8qIHJ4IHRpbWVyICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KLQkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07Ci0JaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKLQotCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07Ci0KLQkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCi0JdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQotCQlrbWFsbG9jKGJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWZmICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgImNhbiBub3QgYWxsb2NhdGUgcmVvcmRlcmluZyBidWZmZXIgIgotCQkJICAgICAgICJ0byB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQkJa2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKLQkJZ290byBlbmQ7Ci0JfQotCW1lbXNldCh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZiwgMCwKLQkJYnVmX3NpemUgKiBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikpOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJSeCBBLU1QRFUgcmVxdWVzdCBvbiB0aWQgJWQgcmVzdWx0ICVkXG4iLCB0aWQsIHJldCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlpZiAocmV0KSB7Ci0JCWtmcmVlKHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmKTsKLQkJa2ZyZWUodGlkX2FnZ19yeCk7Ci0JCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9IE5VTEw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCS8qIGNoYW5nZSBzdGF0ZSBhbmQgc2VuZCBhZGRiYSByZXNwICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdID0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMOwotCXRpZF9hZ2dfcngtPmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2tlbjsKLQl0aWRfYWdnX3J4LT5zc24gPSBzdGFydF9zZXFfbnVtOwotCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHN0YXJ0X3NlcV9udW07Ci0JdGlkX2FnZ19yeC0+YnVmX3NpemUgPSBidWZfc2l6ZTsKLQl0aWRfYWdnX3J4LT50aW1lb3V0ID0gdGltZW91dDsKLQl0aWRfYWdnX3J4LT5zdG9yZWRfbXBkdV9udW0gPSAwOwotCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7Ci1lbmQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLWVuZF9ub19sb2NrOgotCWllZWU4MDIxMV9zZW5kX2FkZGJhX3Jlc3Aoc3RhLT5zZGF0YSwgc3RhLT5zdGEuYWRkciwgdGlkLAotCQkJCSAgZGlhbG9nX3Rva2VuLCBzdGF0dXMsIDEsIGJ1Zl9zaXplLCB0aW1lb3V0KTsKLX0KLQotdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgc3RydWN0IHN0YV9pbmZvICpzdGEsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQl1MTYgY2FwYWI7Ci0JdTE2IHRpZCwgc3RhcnRfc2VxX251bTsKLQl1OCAqc3RhdGU7Ci0KLQljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYik7Ci0JdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQotCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgewotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCXJldHVybjsKLQl9Ci0KLQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQotCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewotCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOwotCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKLQotCQlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCAmJgotCQkgICAgbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCi0JCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pIHsKLQkJCSh2b2lkKWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywKLQkJCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9UWF9SRVNVTUUsCi0JCQkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgJnN0YXJ0X3NlcV9udW0pOwotCQl9Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJSZXN1bWluZyBUWCBhZ2dyZWdhdGlvbiBmb3IgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQl9IGVsc2UgewotCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdKys7Ci0JCS8qIHRoaXMgd2lsbCBhbGxvdyB0aGUgc3RhdGUgY2hlY2sgaW4gc3RvcF9CQV9zZXNzaW9uICovCi0JCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oaHcsIHN0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkJICAgICBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKLQl9CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmVjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvaWJzcy5jCkBAIC0wLDAgKzEsOTA3IEBACisvKgorICogSUJTUyBtb2RlIGltcGxlbWVudGF0aW9uCisgKiBDb3B5cmlnaHQgMjAwMy0yMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICogQ29weXJpZ2h0IDIwMDQsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KKyAqIENvcHlyaWdodCAyMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOSwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgInJhdGUuaCIKKworI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCAoMiAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XICgxNSAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQgKDcgKiBIWikKKworI2RlZmluZSBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCAoMzAgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfREVMQVkgMHg0MDAwMDAKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCAoNjAgKiBIWikKKworI2RlZmluZSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMgMTI4CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYXV0aF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCXNpemVfdCBsZW4pCit7CisJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKKworCWlmIChsZW4gPCAyNCArIDYpCisJCXJldHVybjsKKworCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKKwlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOworCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKKworCS8qCisJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCisJICogbmV0d29ya3MgYW5kIG1vc3QgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBzZWVtIHRvIHVzZSBpdC4KKwkgKiBIb3dldmVyLCB0cnkgdG8gcmVwbHkgdG8gYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgaWYgc29tZW9uZQorCSAqIGhhcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0aGlzLgorCSAqLworCWlmIChhdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTiAmJiBhdXRoX3RyYW5zYWN0aW9uID09IDEpCisJCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDIsIFdMQU5fQVVUSF9PUEVOLCBOVUxMLCAwLAorCQkJCSAgICBzZGF0YS0+dS5pYnNzLmJzc2lkLCAwKTsKK30KKworc3RhdGljIGludCBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgY29uc3QgdTggKmJzc2lkLCBjb25zdCBpbnQgYmVhY29uX2ludCwKKwkJCQkgICAgIGNvbnN0IGludCBmcmVxLAorCQkJCSAgICAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgICAgY29uc3QgdTggKnN1cHBfcmF0ZXMsCisJCQkJICAgICBjb25zdCB1MTYgY2FwYWJpbGl0eSwgdTY0IHRzZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCByZXMgPSAwLCByYXRlcywgaSwgajsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1OCAqcG9zOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKworCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKKwkJLyogUmVzZXQgb3duIFRTRiB0byBhbGxvdyB0aW1lIHN5bmNocm9uaXphdGlvbiB3b3JrLiAqLworCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwl9CisKKwlpZiAoKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkgJiYKKwkgICBtZW1jbXAoaWZpYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gcmVzOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDApOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgorCQkgICAgICAgInJlc3BvbnNlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCEoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUKSkgeworCQkvKiBSZW1vdmUgcG9zc2libGUgU1RBIGVudHJpZXMgZnJvbSBvdGhlciBJQlNTIG5ldHdvcmtzLiAqLworCQlzdGFfaW5mb19mbHVzaF9kZWxheWVkKHNkYXRhKTsKKwl9CisKKwltZW1jcHkoaWZpYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBiZWFjb25faW50ID49IDEwID8gYmVhY29uX2ludCA6IDEwOworCisJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSBjYXBhYmlsaXR5ICYKKwkJV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kgPyAxIDogMDsKKworCXJlcyA9IGllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgZnJlcSk7CisKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJLyogQnVpbGQgSUJTUyBwcm9iZSByZXNwb25zZSAqLworCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikKKwkJc2tiX3B1dChza2IsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7CisJbWVtc2V0KG1nbXQsIDAsIDI0ICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKSk7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CisJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQorCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKKwltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NCh0c2YpOworCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYmlsaXR5KTsKKworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZpYnNzLT5zc2lkX2xlbik7CisJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkqcG9zKysgPSBpZmlic3MtPnNzaWRfbGVuOworCW1lbWNweShwb3MsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CisKKwlyYXRlcyA9IHN1cHBfcmF0ZXNfbGVuOworCWlmIChyYXRlcyA+IDgpCisJCXJhdGVzID0gODsKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCSpwb3MrKyA9IHJhdGVzOworCW1lbWNweShwb3MsIHN1cHBfcmF0ZXMsIHJhdGVzKTsKKworCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMSk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0RTX1BBUkFNUzsKKwkJKnBvcysrID0gMTsKKwkJKnBvcysrID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGZyZXEpOworCX0KKworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMik7CisJKnBvcysrID0gV0xBTl9FSURfSUJTU19QQVJBTVM7CisJKnBvcysrID0gMjsKKwkvKiBGSVg6IHNldCBBVElNIHdpbmRvdyBiYXNlZCBvbiBzY2FuIHJlc3VsdHMgKi8KKwkqcG9zKysgPSAwOworCSpwb3MrKyA9IDA7CisKKwlpZiAoc3VwcF9yYXRlc19sZW4gPiA4KSB7CisJCXJhdGVzID0gc3VwcF9yYXRlc19sZW4gLSA4OworCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHJhdGVzKTsKKwkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCSpwb3MrKyA9IHJhdGVzOworCQltZW1jcHkocG9zLCAmc3VwcF9yYXRlc1s4XSwgcmF0ZXMpOworCX0KKworCWlmaWJzcy0+cHJvYmVfcmVzcCA9IHNrYjsKKworCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTiB8CisJCQkJICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOworCisKKwlyYXRlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKKwkJaW50IGJpdHJhdGUgPSAoc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKKwkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCisJCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKKwkJCQlyYXRlcyB8PSBCSVQoaik7CisJfQorCisJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgc3VwcF9yYXRlc19sZW4sIHN1cHBfcmF0ZXMpOworCisJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKKwlpZmlic3MtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQ7CisJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCisJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQoreworCXJldHVybiBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLAorCQkJCQkgYnNzLT5jYnNzLmJzc2lkLAorCQkJCQkgYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbCwKKwkJCQkJIGJzcy0+Y2Jzcy5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQkJIGJzcy0+c3VwcF9yYXRlc19sZW4sIGJzcy0+c3VwcF9yYXRlcywKKwkJCQkJIGJzcy0+Y2Jzcy5jYXBhYmlsaXR5LAorCQkJCQkgYnNzLT5jYnNzLnRzZik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgIHNpemVfdCBsZW4sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAorCQkJCSAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJCSAgYm9vbCBiZWFjb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGZyZXE7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJdTY0IGJlYWNvbl90aW1lc3RhbXAsIHJ4X3RpbWVzdGFtcDsKKwl1MzIgc3VwcF9yYXRlcyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOworCisJaWYgKGVsZW1zLT5kc19wYXJhbXMgJiYgZWxlbXMtPmRzX3BhcmFtc19sZW4gPT0gMSkKKwkJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShlbGVtcy0+ZHNfcGFyYW1zWzBdKTsKKwllbHNlCisJCWZyZXEgPSByeF9zdGF0dXMtPmZyZXE7CisKKwljaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwgZnJlcSk7CisKKwlpZiAoIWNoYW5uZWwgfHwgY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJcmV0dXJuOworCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBlbGVtcy0+c3VwcF9yYXRlcyAmJgorCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCXN1cHBfcmF0ZXMgPSBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhsb2NhbCwgZWxlbXMsIGJhbmQpOworCisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1nbXQtPnNhKTsKKwkJaWYgKHN0YSkgeworCQkJdTMyIHByZXZfcmF0ZXM7CisKKwkJCXByZXZfcmF0ZXMgPSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdOworCQkJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCisJCQlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8CisJCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQkJaWYgKHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gIT0gcHJldl9yYXRlcykKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgorCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgorCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCisJCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkJICAgIHN0YS0+c3RhLmFkZHIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHByZXZfcmF0ZXMsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN1cHBfcmF0ZXMsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0pOworI2VuZGlmCisJCX0gZWxzZQorCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKGxvY2FsLCByeF9zdGF0dXMsIG1nbXQsIGxlbiwgZWxlbXMsCisJCQkJCWNoYW5uZWwsIGJlYWNvbik7CisJaWYgKCFic3MpCisJCXJldHVybjsKKworCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLworCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOworCisJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBtZXJnZSBJQlNTICovCisKKwkvKiBtZXJnZSBvbmx5IG9uIGJlYWNvbnMgKD8/PykgKi8KKwlpZiAoIWJlYWNvbikKKwkJZ290byBwdXRfYnNzOworCisJLyogd2UgdXNlIGEgZml4ZWQgQlNTSUQgKi8KKwlpZiAoc2RhdGEtPnUuaWJzcy5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkKKwkJZ290byBwdXRfYnNzOworCisJLyogbm90IGFuIElCU1MgKi8KKwlpZiAoIShic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKKwkJZ290byBwdXRfYnNzOworCisJLyogZGlmZmVyZW50IGNoYW5uZWwgKi8KKwlpZiAoYnNzLT5jYnNzLmNoYW5uZWwgIT0gbG9jYWwtPm9wZXJfY2hhbm5lbCkKKwkJZ290byBwdXRfYnNzOworCisJLyogZGlmZmVyZW50IFNTSUQgKi8KKwlpZiAoZWxlbXMtPnNzaWRfbGVuICE9IHNkYXRhLT51Lmlic3Muc3NpZF9sZW4gfHwKKwkgICAgbWVtY21wKGVsZW1zLT5zc2lkLCBzZGF0YS0+dS5pYnNzLnNzaWQsCisJCQkJc2RhdGEtPnUuaWJzcy5zc2lkX2xlbikpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIHNhbWUgQlNTSUQgKi8KKwlpZiAobWVtY21wKGJzcy0+Y2Jzcy5ic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pID09IDApCisJCWdvdG8gcHV0X2JzczsKKworCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpIHsKKwkJLyoKKwkJICogRm9yIGNvcnJlY3QgSUJTUyBtZXJnaW5nIHdlIG5lZWQgbWFjdGltZTsgc2luY2UgbWFjdGltZSBpcworCQkgKiBkZWZpbmVkIGFzIHRoZSB0aW1lIHRoZSBmaXJzdCBkYXRhIHN5bWJvbCBvZiB0aGUgZnJhbWUgaGl0cworCQkgKiB0aGUgUEhZLCBhbmQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgYmVhY29uIGlzIGRlZmluZWQgYXMgInRoZQorCQkgKiB0aW1lIHRoYXQgdGhlIGRhdGEgc3ltYm9sIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGJpdCBvZiB0aGUKKwkJICogdGltZXN0YW1wIGlzIHRyYW5zbWl0dGVkIHRvIHRoZSBQSFkgcGx1cyB0aGUgdHJhbnNtaXR0aW5nCisJCSAqIFNUQSdzIGRlbGF5cyB0aHJvdWdoIGl0cyBsb2NhbCBQSFkgZnJvbSB0aGUgTUFDLVBIWQorCQkgKiBpbnRlcmZhY2UgdG8gaXRzIGludGVyZmFjZSB3aXRoIHRoZSBXTSIgKDgwMi4xMSAxMS4xLjIpCisJCSAqIC0gZXF1YWxzIHRoZSB0aW1lIHRoaXMgYml0IGFycml2ZXMgYXQgdGhlIHJlY2VpdmVyIC0gd2UgaGF2ZQorCQkgKiB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIHR3by4KKwkJICoKKwkJICogRS5nLiBhdCAxIE1CaXQgdGhhdCBtZWFucyBtYWN0aW1lIGlzIDE5MiB1c2VjIGVhcmxpZXIKKwkJICogKD0yNCBieXRlcyAqIDggdXNlY3MvYnl0ZSkgdGhhbiB0aGUgYmVhY29uIHRpbWVzdGFtcC4KKwkJICovCisJCWludCByYXRlOworCisJCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKQorCQkJcmF0ZSA9IDY1OyAvKiBUT0RPOiBIVCByYXRlcyAqLworCQllbHNlCisJCQlyYXRlID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXS0+CisJCQkJYml0cmF0ZXNbcnhfc3RhdHVzLT5yYXRlX2lkeF0uYml0cmF0ZTsKKworCQlyeF90aW1lc3RhbXAgPSByeF9zdGF0dXMtPm1hY3RpbWUgKyAoMjQgKiA4ICogMTAgLyByYXRlKTsKKwl9IGVsc2UgaWYgKGxvY2FsICYmIGxvY2FsLT5vcHMgJiYgbG9jYWwtPm9wcy0+Z2V0X3RzZikKKwkJLyogc2Vjb25kIGJlc3Qgb3B0aW9uOiBnZXQgY3VycmVudCBUU0YgKi8KKwkJcnhfdGltZXN0YW1wID0gbG9jYWwtPm9wcy0+Z2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOworCWVsc2UKKwkJLyogY2FuJ3QgbWVyZ2Ugd2l0aG91dCBrbm93aW5nIHRoZSBUU0YgKi8KKwkJcnhfdGltZXN0YW1wID0gLTFMTFU7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSWCBiZWFjb24gU0E9JXBNIEJTU0lEPSIKKwkgICAgICAgIiVwTSBUU0Y9MHglbGx4IEJDTj0weCVsbHggZGlmZj0lbGxkIEAlbHVcbiIsCisJICAgICAgIG1nbXQtPnNhLCBtZ210LT5ic3NpZCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyeF90aW1lc3RhbXAsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmVhY29uX3RpbWVzdGFtcCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocnhfdGltZXN0YW1wIC0gYmVhY29uX3RpbWVzdGFtcCksCisJICAgICAgIGppZmZpZXMpOworI2VuZGlmCisKKwkvKiBnaXZlIHNsb3cgaGFyZHdhcmUgc29tZSB0aW1lIHRvIGRvIHRoZSBUU0Ygc3luYyAqLworCWlmIChyeF90aW1lc3RhbXAgPCBJRUVFODAyMTFfSUJTU19NRVJHRV9ERUxBWSkKKwkJZ290byBwdXRfYnNzOworCisJaWYgKGJlYWNvbl90aW1lc3RhbXAgPiByeF90aW1lc3RhbXApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiBUU0YgaGlnaGVyIHRoYW4gIgorCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlcE1cbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5ic3NpZCk7CisjZW5kaWYKKwkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcyk7CisJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisJfQorCisgcHV0X2JzczoKKwlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKK30KKworLyoKKyAqIEFkZCBhIG5ldyBJQlNTIHN0YXRpb24sIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIFJYIGNvZGUgd2hlbiwKKyAqIGluIElCU1MgbW9kZSwgcmVjZWl2aW5nIGEgZnJhbWUgZnJvbSBhIHlldC11bmtub3duIHN0YXRpb24sIGhlbmNlCisgKiBtdXN0IGJlIGNhbGxhYmxlIGluIGF0b21pYyBjb250ZXh0LgorICovCitzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXU4ICpic3NpZCx1OCAqYWRkciwgdTMyIHN1cHBfcmF0ZXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJaW50IGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOworCisJLyogVE9ETzogQ291bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cnkgYW5kCisJICogYWxsb3cgbmV3IG9uZSB0byBiZSBhZGRlZC4gKi8KKwlpZiAobG9jYWwtPm51bV9zdGEgPj0gSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgIgorCQkJICAgICAgICJlbnRyeSAlcE1cbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFkZHIpOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQpKQorCQlyZXR1cm4gTlVMTDsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRpbmcgbmV3IElCU1Mgc3RhdGlvbiAlcE0gKGRldj0lcylcbiIsCisJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgYWRkciwgc2RhdGEtPmRldi0+bmFtZSk7CisjZW5kaWYKKworCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7CisKKwkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KKwlzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdID0gc3VwcF9yYXRlcyB8CisJCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKKworCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKKworCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gc3RhOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGFjdGl2ZSA9IDA7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHN0YS0+c2RhdGEgPT0gc2RhdGEgJiYKKwkJICAgIHRpbWVfYWZ0ZXIoc3RhLT5sYXN0X3J4ICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwsCisJCQkgICAgICAgamlmZmllcykpIHsKKwkJCWFjdGl2ZSsrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBhY3RpdmU7Cit9CisKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9tZXJnZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7CisKKwlpZWVlODAyMTFfc3RhX2V4cGlyZShzZGF0YSwgSUVFRTgwMjExX0lCU1NfSU5BQ1RJVklUWV9MSU1JVCk7CisJaWYgKGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKQorCQlyZXR1cm47CisKKwlpZiAoKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpICYmCisJICAgICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMKSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gYWN0aXZlIElCU1MgU1RBcyAtIHRyeWluZyB0byBzY2FuIGZvciBvdGhlciAiCisJICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCisJLyogWFhYIG1heWJlIHJhY3k/ICovCisJaWYgKHNkYXRhLT5sb2NhbC0+c2Nhbl9yZXEpCisJCXJldHVybjsKKworCW1lbWNweShzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLAorCSAgICAgICBpZmlic3MtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCXNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKwlpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCAmc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1OCAqcG9zOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9NQVhfU1VQUF9SQVRFU107CisJdTE2IGNhcGFiaWxpdHk7CisJaW50IGk7CisKKwlpZiAoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkgeworCQltZW1jcHkoYnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQkvKiBHZW5lcmF0ZSByYW5kb20sIG5vdCBicm9hZGNhc3QsIGxvY2FsbHkgYWRtaW5pc3RlcmVkIEJTU0lELiBNaXggaW4KKwkJICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKKwkJICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZ2V0IGRpZmZlcmVudCBCU1NJRC4gKi8KKwkJZ2V0X3JhbmRvbV9ieXRlcyhic3NpZCwgRVRIX0FMRU4pOworCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJCWJzc2lkW2ldIF49IHNkYXRhLT5kZXYtPmRldl9hZGRyW2ldOworCQlic3NpZFswXSAmPSB+MHgwMTsKKwkJYnNzaWRbMF0gfD0gMHgwMjsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENyZWF0aW5nIG5ldyBJQlNTIG5ldHdvcmssIEJTU0lEICVwTVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQpOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPT0gMCkKKwkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKKworCWNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKworCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCWNhcGFiaWxpdHkgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJZWxzZQorCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CisKKwlwb3MgPSBzdXBwX3JhdGVzOworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwl9CisKKwlyZXR1cm4gX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwKKwkJCQkJIGJzc2lkLCBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50LAorCQkJCQkgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSBzYmFuZC0+bl9iaXRyYXRlcywgc3VwcF9yYXRlcywKKwkJCQkJIGNhcGFiaWxpdHksIDApOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwljb25zdCB1OCAqYnNzaWQgPSBOVUxMOworCWludCBhY3RpdmVfaWJzczsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhX2ZpbmRfaWJzcyAoYWN0aXZlX2lic3M9JWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBhY3RpdmVfaWJzcyk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KKworCWlmIChhY3RpdmVfaWJzcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaWZpYnNzLT5mbGFncyAmIElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVCkKKwkJYnNzaWQgPSBpZmlic3MtPmJzc2lkOworCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIE5VTEwsIGJzc2lkLAorCQkJCSAgICAgICBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4sCisJCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9JQlNTLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCWlmIChic3MpCisJCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcE0gY3VycmVudCAiCisJCSAgICAgICAiJXBNXG4iLCBic3MtPmNic3MuYnNzaWQsIGlmaWJzcy0+YnNzaWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoYnNzICYmCisJICAgICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkgfHwKKwkgICAgIG1lbWNtcChpZmlic3MtPmJzc2lkLCBic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKSkpIHsKKwkJaW50IHJldDsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgorCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOworCisJCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKGJzcykKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCisJaWYgKGlmaWJzcy0+c3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgJiYKKwkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSB7CisJCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArCisJCQkJCSAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCisJCQkJCUlFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyaWdnZXIgbmV3IHNjYW4gdG8gZmluZCBhbiBJQlNTIHRvICIKKwkJICAgICAgICJqb2luXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKworCQkvKiBYWFggbWF5YmUgcmFjeT8gKi8KKwkJaWYgKGxvY2FsLT5zY2FuX3JlcSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkJICAgICAgIGlmaWJzcy0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCQlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgJmxvY2FsLT5pbnRfc2Nhbl9yZXEpOworCX0gZWxzZSBpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCQlpbnQgaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTDsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZmlic3MtPmlic3Nfam9pbl9yZXEgKworCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCkpIHsKKwkJCWlmICghKGxvY2FsLT5vcGVyX2NoYW5uZWwtPmZsYWdzICYKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1MpKQorCQkJCXJldHVybiBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHNkYXRhKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUJTUyBub3QgYWxsb3dlZCBvbiIKKwkJCSAgICAgICAiICVkIE1IelxuIiwgc2RhdGEtPmRldi0+bmFtZSwKKwkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwkJCS8qIE5vIElCU1MgZm91bmQgLSBkZWNyZWFzZSBzY2FuIGludGVydmFsIGFuZCBjb250aW51ZQorCQkJICogc2Nhbm5pbmcuICovCisJCQlpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1c7CisJCX0KKworCQlpZmlic3MtPnN0YXRlID0gSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0g7CisJCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIGludGVydmFsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IHR4X2xhc3RfYmVhY29uOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOworCXU4ICpwb3MsICplbmQ7CisKKwlpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCB8fAorCSAgICBsZW4gPCAyNCArIDIgfHwgIWlmaWJzcy0+cHJvYmVfcmVzcCkKKwkJcmV0dXJuOworCisJaWYgKGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKQorCQl0eF9sYXN0X2JlYWNvbiA9IGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJZWxzZQorCQl0eF9sYXN0X2JlYWNvbiA9IDE7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggUHJvYmVSZXEgU0E9JXBNIERBPSVwTSBCU1NJRD0lcE0iCisJICAgICAgICIgKHR4X2xhc3RfYmVhY29uPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EsIG1nbXQtPmRhLAorCSAgICAgICBtZ210LT5ic3NpZCwgdHhfbGFzdF9iZWFjb24pOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoIXR4X2xhc3RfYmVhY29uKQorCQlyZXR1cm47CisKKwlpZiAobWVtY21wKG1nbXQtPmJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgorCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuOworCisJZW5kID0gKCh1OCAqKSBtZ210KSArIGxlbjsKKwlwb3MgPSBtZ210LT51LnByb2JlX3JlcS52YXJpYWJsZTsKKwlpZiAocG9zWzBdICE9IFdMQU5fRUlEX1NTSUQgfHwKKwkgICAgcG9zICsgMiArIHBvc1sxXSA+IGVuZCkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKKwkJICAgICAgICJmcm9tICVwTVxuIiwKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCWlmIChwb3NbMV0gIT0gMCAmJgorCSAgICAocG9zWzFdICE9IGlmaWJzcy0+c3NpZF9sZW4gfHwKKwkgICAgIG1lbWNtcChwb3MgKyAyLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pICE9IDApKSB7CisJCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCisJCXJldHVybjsKKwl9CisKKwkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLworCXNrYiA9IHNrYl9jb3B5KGlmaWJzcy0+cHJvYmVfcmVzcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCXJlc3AgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwltZW1jcHkocmVzcC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbmRpbmcgUHJvYmVSZXNwIHRvICVwTVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVzcC0+ZGEpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJIHNpemVfdCBsZW4sCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoreworCXNpemVfdCBiYXNlbGVuOworCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOworCisJaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwkJcmV0dXJuOyAvKiBpZ25vcmUgUHJvYmVSZXNwIHRvIGZvcmVpZ24gYWRkcmVzcyAqLworCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZiAoYmFzZWxlbiA+IGxlbikKKwkJcmV0dXJuOworCisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sCisJCQkJJmVsZW1zKTsKKworCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICAgICBzaXplX3QgbGVuLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCS8qIFByb2Nlc3MgYmVhY29uIGZyb20gdGhlIGN1cnJlbnQgQlNTICovCisJYmFzZWxlbiA9ICh1OCAqKSBtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKQorCQlyZXR1cm47CisKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLCAmZWxlbXMpOworCisJaWVlZTgwMjExX3J4X2Jzc19pbmZvKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cywgJmVsZW1zLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgZmM7CisKKwlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKworCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgICAgIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJIHJ4X3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCWllZWU4MDIxMV9yeF9tZ210X2F1dGhfaWJzcyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwl9CisKKwlrZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5pYnNzLndvcmspOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlyZXR1cm47CisJaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZmlic3MtPnNrYl9xdWV1ZSkpKQorCQlpZWVlODAyMTFfaWJzc19yeF9xdWV1ZWRfbWdtdChzZGF0YSwgc2tiKTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGlmaWJzcy0+c3RhdGUpIHsKKwljYXNlIElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOgorCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQ6CisJCWllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lic3NfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJc2V0X2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZmlic3MtPndvcmspOworfQorCit2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlJTklUX1dPUksoJmlmaWJzcy0+d29yaywgaWVlZTgwMjExX2lic3Nfd29yayk7CisJc2V0dXBfdGltZXIoJmlmaWJzcy0+dGltZXIsIGllZWU4MDIxMV9pYnNzX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpZmlic3MtPnNrYl9xdWV1ZSk7CisKKwlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMIHwKKwkJCUlFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCWlmaWJzcy0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4pCisJCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfU1NJRF9TRVQ7CisJZWxzZQorCQlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19TU0lEX1NFVDsKKworCWlmaWJzcy0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7CisJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCisJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhKTsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmaWJzcy0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7CisJCW1lbXNldChpZmlic3MtPnNzaWQsIDAsIHNpemVvZihpZmlic3MtPnNzaWQpKTsKKwkJbWVtY3B5KGlmaWJzcy0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZpYnNzLT5zc2lkX2xlbiA9IGxlbjsKKwl9CisKKwlyZXR1cm4gaWVlZTgwMjExX2lic3NfY29tbWl0KHNkYXRhKTsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJbWVtY3B5KHNzaWQsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CisJKmxlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisKKwlyZXR1cm4gMDsKK30KKworaW50IGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKKwkJbWVtY3B5KGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUOworCX0gZWxzZSB7CisJCW1lbXNldChpZmlic3MtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWlmaWJzcy0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVDsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQlpZiAoaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZhaWxlZCB0byBjb25maWcgbmV3IEJTU0lEIHRvICIKKwkJCSAgICAgICAidGhlIGxvdy1sZXZlbCBkcml2ZXJcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX2NvbW1pdChzZGF0YSk7Cit9CisKKy8qIHNjYW4gZmluaXNoZWQgbm90aWZpY2F0aW9uICovCit2b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzOworCisJaWYgKHNkYXRhICYmIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwkJaWYgKCghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkpIHx8CisJCSAgICAhaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCisJCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7CisJfQorfQorCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfaWJzc19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGZjOworCisJaWYgKHNrYi0+bGVuIDwgMjQpCisJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKKworCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCQltZW1jcHkoc2tiLT5jYiwgcnhfc3RhdHVzLCBzaXplb2YoKnJ4X3N0YXR1cykpOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQlza2JfcXVldWVfdGFpbCgmc2RhdGEtPnUuaWJzcy5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lmlic3Mud29yayk7CisJCXJldHVybiBSWF9RVUVVRUQ7CisJfQorCisJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggZjNlZWM5ODkuLmZiYjkxZjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC00Myw3ICs0Myw3IEBACiAKIC8qIFJlcXVpcmVkIGVuY3J5cHRpb24gaGVhZCBhbmQgdGFpbHJvb20gKi8KICNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT00gOAotI2RlZmluZSBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTSAxMgorI2RlZmluZSBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTSAxOAogCiAvKiBJRUVFIDgwMi4xMSAoQ2guIDkuNSBEZWZyYWdtZW50YXRpb24pIHJlcXVpcmVzIHN1cHBvcnQgZm9yIGNvbmN1cnJlbnQKICAqIHJlY2VwdGlvbiBvZiBhdCBsZWFzdCB0aHJlZSBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBsaW1pdCBjYW4gYmUgaW5jcmVhc2VkCkBAIC01Nyw2ICs1Nyw4IEBACiAgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSAoMTAgKiBIWikKIAorI2RlZmluZSBUVV9UT19FWFBfVElNRSh4KQkoamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoKHgpICogMTAyNCkpCisKIHN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfZW50cnkgewogCXVuc2lnbmVkIGxvbmcgZmlyc3RfZnJhZ190aW1lOwogCXVuc2lnbmVkIGludCBzZXE7CkBAIC03MCw0MyArNzIsMzYgQEAKIAogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpobmV4dDsKKwkvKiBZZXMsIHRoaXMgaXMgYSBoYWNrICovCisJc3RydWN0IGNmZzgwMjExX2JzcyBjYnNzOworCisJLyogZG9uJ3Qgd2FudCB0byBsb29rIHVwIGFsbCB0aGUgdGltZSAqLwogCXNpemVfdCBzc2lkX2xlbjsKLQotCWF0b21pY190IHVzZXJzOwotCi0JdTggYnNzaWRbRVRIX0FMRU5dOwogCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisKIAl1OCBkdGltX3BlcmlvZDsKLQl1MTYgY2FwYWJpbGl0eTsgLyogaG9zdCBieXRlIG9yZGVyICovCi0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBmcmVxOwotCWludCBzaWduYWwsIG5vaXNlLCBxdWFsOwotCXU4ICppZXM7IC8qIGFsbCBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBsYXN0IEJlYWNvbiBvciBQcm9iZQotCQkgICogUmVzcG9uc2UgZnJhbWVzOyBub3RlIEJlYWNvbiBmcmFtZSBpcyBub3QgYWxsb3dlZCB0bwotCQkgICogb3ZlcnJpZGUgdmFsdWVzIGZyb20gUHJvYmUgUmVzcG9uc2UgKi8KLQlzaXplX3QgaWVzX2xlbjsKKwogCWJvb2wgd21tX3VzZWQ7CisKKwl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJdTggKm1lc2hfaWQ7CiAJc2l6ZV90IG1lc2hfaWRfbGVuOwogCXU4ICptZXNoX2NmZzsKICNlbmRpZgorCiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfU1VQUF9SQVRFUyAzMgogCXU4IHN1cHBfcmF0ZXNbSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTXTsKIAlzaXplX3Qgc3VwcF9yYXRlc19sZW47Ci0JdTY0IHRpbWVzdGFtcDsKLQlpbnQgYmVhY29uX2ludDsKIAotCXVuc2lnbmVkIGxvbmcgbGFzdF9wcm9iZV9yZXNwOwotCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGU7Ci0KLQkvKiBkdXJpbmcgYXNzb2NhdGlvbiwgd2Ugc2F2ZSBhbiBFUlAgdmFsdWUgZnJvbSBhIHByb2JlIHJlc3BvbnNlIHNvCisJLyoKKwkgKiBEdXJpbmcgYXNzb2NhdGlvbiwgd2Ugc2F2ZSBhbiBFUlAgdmFsdWUgZnJvbSBhIHByb2JlIHJlc3BvbnNlIHNvCiAJICogdGhhdCB3ZSBjYW4gZmVlZCBFUlAgaW5mbyB0byB0aGUgZHJpdmVyIHdoZW4gaGFuZGxpbmcgdGhlCiAJICogYXNzb2NpYXRpb24gY29tcGxldGVzLiB0aGVzZSBmaWVsZHMgcHJvYmFibHkgd29uJ3QgYmUgdXAtdG8tZGF0ZQotCSAqIG90aGVyd2lzZSwgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoZW0uICovCi0JaW50IGhhc19lcnBfdmFsdWU7CisJICogb3RoZXJ3aXNlLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhlbS4KKwkgKi8KKwlib29sIGhhc19lcnBfdmFsdWU7CiAJdTggZXJwX3ZhbHVlOwogfTsKIApAQCAtMjQ0LDcgKzIzOSw3IEBACiAJdTggZmxhZ3M7CiB9OwogCi0vKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhLmZsYWdzICovCisvKiBmbGFncyB1c2VkIGluIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZC5mbGFncyAqLwogI2RlZmluZSBJRUVFODAyMTFfU1RBX1NTSURfU0VUCQlCSVQoMCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQJCUJJVCgxKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUCUJJVCgyKQpAQCAtMjU4LDM3ICsyNTMsMzkgQEAKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTAlCSVQoMTEpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTAlCSVQoMTIpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VECUJJVCgxMykKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VECUJJVCgxNCkKKyNkZWZpbmUgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQJQklUKDE1KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVECUJJVCgxNikKIC8qIGZsYWdzIGZvciBNTE1FIHJlcXVlc3QgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfU0NBTiAwCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSAxCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0FVVEggMgogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9SVU4gIDMKIAotLyogU1RBL0lCU1MgTUxNRSBzdGF0ZXMgKi8KLWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHsKLQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNILAotCUlFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCwKLX07Ci0KIC8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVAgQklUKDIpCiAKLXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhIHsKK3N0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgY2hzd2l0Y2hfdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGNoc3dpdGNoX3dvcms7CisKIAl1OCBic3NpZFtFVEhfQUxFTl0sIHByZXZfYnNzaWRbRVRIX0FMRU5dOworCiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQllbnVtIGllZWU4MDIxMV9zdGFfbWxtZV9zdGF0ZSBzdGF0ZTsKIAlzaXplX3Qgc3NpZF9sZW47Ci0JdTggc2Nhbl9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzY2FuX3NzaWRfbGVuOworCisJZW51bSB7CisJCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSwKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCisJfSBzdGF0ZTsKKwogCXUxNiBhaWQ7CiAJdTE2IGFwX2NhcGFiLCBjYXBhYjsKIAl1OCAqZXh0cmFfaWU7IC8qIHRvIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgQXNzb2NSZXEgKi8KQEAgLTMxNSwxMSArMzEyLDY1IEBACiAJaW50IGF1dGhfYWxnOyAvKiBjdXJyZW50bHkgdXNlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KIAlpbnQgYXV0aF90cmFuc2FjdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCi0JdTMyIHN1cHBfcmF0ZXNfYml0c1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwllbnVtIHsKKwkJSUVFRTgwMjExX01GUF9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX01GUF9PUFRJT05BTCwKKwkJSUVFRTgwMjExX01GUF9SRVFVSVJFRAorCX0gbWZwOyAvKiBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKi8KIAogCWludCB3bW1fbGFzdF9wYXJhbV9zZXQ7CisKKwkvKiBFeHRyYSBJRSBkYXRhIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLworCXU4ICppZV9wcm9iZXJlcTsKKwlzaXplX3QgaWVfcHJvYmVyZXFfbGVuOworCXU4ICppZV9wcm9iZXJlc3A7CisJc2l6ZV90IGllX3Byb2JlcmVzcF9sZW47CisJdTggKmllX2F1dGg7CisJc2l6ZV90IGllX2F1dGhfbGVuOworCXU4ICppZV9hc3NvY3JlcTsKKwlzaXplX3QgaWVfYXNzb2NyZXFfbGVuOworCXU4ICppZV9yZWFzc29jcmVxOworCXNpemVfdCBpZV9yZWFzc29jcmVxX2xlbjsKKwl1OCAqaWVfZGVhdXRoOworCXNpemVfdCBpZV9kZWF1dGhfbGVuOworCXU4ICppZV9kaXNhc3NvYzsKKwlzaXplX3QgaWVfZGlzYXNzb2NfbGVuOworfTsKKworZW51bSBpZWVlODAyMTFfaWJzc19mbGFncyB7CisJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwJCT0gQklUKDEpLAorCUlFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVAkJPSBCSVQoMiksCisJSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQJCT0gQklUKDMpLAorCUlFRUU4MDIxMV9JQlNTX1NTSURfU0VUCQkJPSBCSVQoNCksCit9OworCitlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgeworCUlFRUU4MDIxMV9JQlNTX1JFUV9SVU4JPSAwLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3F1ZXVlOworCisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKworCXUzMiBmbGFnczsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKKworCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCisKKwllbnVtIHsKKwkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCisJCUlFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVELAorCX0gc3RhdGU7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggewpAQCAtNDA0LDggKzQ1NSwxMCBAQAogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwogCiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNAotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVNdOworI2RlZmluZSBOVU1fREVGQVVMVF9NR01UX0tFWVMgMgorCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVNdOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpkZWZhdWx0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CiAKQEAgLTQyMyw3ICs0NzYsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIGFwOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3dkcyB3ZHM7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB2bGFuOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSBzdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCBtZ2Q7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyBpYnNzOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCBtZXNoOwogI2VuZGlmCkBAIC00NzcsNiArNTMxLDcgQEAKIAl9IGRlYnVnZnM7CiAJc3RydWN0IHsKIAkJc3RydWN0IGRlbnRyeSAqZGVmYXVsdF9rZXk7CisJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfbWdtdF9rZXk7CiAJfSBjb21tb25fZGVidWdmczsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICkBAIC01NDEsMTEgKzU5NiwxMCBAQAogZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiB7CiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0RSSVZFUiwKIAlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSwKKwlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04sCiB9OwogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgd2Ugc3VwcG9ydC4gKi8KLSNkZWZpbmUgUURfTUFYX1FVRVVFUyAoSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgKyBJRUVFODAyMTFfTUFYX1FVRVVFUykKLQogc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CiB9OwpAQCAtNTU4LDkgKzYxMiwxNSBAQAogCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKIAotCXVuc2lnbmVkIGxvbmcgcXVldWVfcG9vbFtCSVRTX1RPX0xPTkdTKFFEX01BWF9RVUVVRVMpXTsKLQl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFU107CisJLyogQUMgcXVldWUgY29ycmVzcG9uZGluZyB0byBlYWNoIEFNUERVIHF1ZXVlICovCisJczggYW1wZHVfYWNfcXVldWVbSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVNdOworCXVuc2lnbmVkIGludCBhbWRwdV9hY19zdG9wX3JlZmNudFtJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFU107CisKKwl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFUyArCisJCQkJCSBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFU107CisJLyogYWxzbyB1c2VkIHRvIHByb3RlY3QgYW1wZHVfYWNfcXVldWUgYW5kIGFtZHB1X2FjX3N0b3BfcmVmY250ICovCiAJc3BpbmxvY2tfdCBxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrOworCiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7IC8qIHdtYXN0ZXIjIC0gIm1hc3RlciIgODAyLjExIGRldmljZSAqLwogCWludCBvcGVuX2NvdW50OwogCWludCBtb25pdG9ycywgY29va2VkX21udHJzOwpAQCAtNTY4LDcgKzYyOCw2IEBACiAJaW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7IC8qIEZJRl8qICovCiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwotCXU4IHdzdGF0c19mbGFnczsKIAlib29sIHRpbV9pbl9sb2NrZWRfc2VjdGlvbjsgLyogc2VlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgKi8KIAlpbnQgdHhfaGVhZHJvb207IC8qIHJlcXVpcmVkIGhlYWRyb29tIGZvciBoYXJkd2FyZS9yYWRpb3RhcCAqLwogCkBAIC02MTIsNyArNjcxLDkgQEAKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqd2VwX3J4X3RmbTsKIAl1MzIgd2VwX2l2OwogCisJLyogc2VlIGlmYWNlLmMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGludGVyZmFjZXM7CisJc3RydWN0IG11dGV4IGlmbGlzdF9tdHg7CiAKIAkvKgogCSAqIEtleSBsb2NrLCBwcm90ZWN0cyBzZGF0YSdzIGtleV9saXN0IGFuZCBzdGFfaW5mbydzCkBAIC02MjMsMjAgKzY4NCwxOCBAQAogCiAJLyogU2Nhbm5pbmcgYW5kIEJTUyBsaXN0ICovCiAJYm9vbCBzd19zY2FubmluZywgaHdfc2Nhbm5pbmc7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgc2Nhbl9zc2lkOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgaW50X3NjYW5fcmVxOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqc2Nhbl9jaGFubmVsOwogCWludCBzY2FuX2NoYW5uZWxfaWR4OwotCWVudW0gaWVlZTgwMjExX2JhbmQgc2Nhbl9iYW5kOwogCiAJZW51bSB7IFNDQU5fU0VUX0NIQU5ORUwsIFNDQU5fU0VORF9QUk9CRSB9IHNjYW5fc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5fY29tcGxldGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpvcGVyX2NoYW5uZWwsICpzY2FuX2NoYW5uZWw7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBvcGVyX2NoYW5uZWxfdHlwZTsKLQl1OCBzY2FuX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0Jc2l6ZV90IHNjYW5fc3NpZF9sZW47Ci0Jc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzX2hhc2hbU1RBX0hBU0hfU0laRV07Ci0Jc3BpbmxvY2tfdCBic3NfbG9jazsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9wZXJfY2hhbm5lbCwgKmNzYV9jaGFubmVsOwogCiAJLyogU05NUCBjb3VudGVycyAqLwogCS8qIGRvdDExQ291bnRlcnNUYWJsZSAqLwpAQCAtNjQ5LDcgKzcwOCw2IEBACiAJdTMyIGRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50OwogCXUzMiBkb3QxMU11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKIAl1MzIgZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQ7Ci0JdTMyIGRvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50OwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKIAlpbnQgdHhfbGVkX2NvdW50ZXIsIHJ4X2xlZF9jb3VudGVyOwpAQCAtNjk2LDExICs3NTQsMTQgQEAKIAl1bnNpZ25lZCBpbnQgd21tX2FjbTsgLyogYml0IGZpZWxkIG9mIEFDTSBiaXRzIChCSVQoODAyLjFEIHRhZykpICovCiAKIAlib29sIHBvd2Vyc2F2ZTsKLQlpbnQgZHluYW1pY19wc190aW1lb3V0OworCWJvb2wgcHNwb2xsaW5nOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkeW5hbWljX3BzX2VuYWJsZV93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkeW5hbWljX3BzX2Rpc2FibGVfd29yazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBkeW5hbWljX3BzX3RpbWVyOwogCisJaW50IHVzZXJfcG93ZXJfbGV2ZWw7IC8qIGluIGRCbSAqLworCWludCBwb3dlcl9jb25zdHJfbGV2ZWw7IC8qIGluIGRCbSAqLworCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzIHsKIAkJc3RydWN0IGRlbnRyeSAqcmNkaXI7CkBAIC03MTIsNiArNzczLDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqbG9uZ19yZXRyeV9saW1pdDsKIAkJc3RydWN0IGRlbnRyeSAqdG90YWxfcHNfYnVmZmVyZWQ7CiAJCXN0cnVjdCBkZW50cnkgKndlcF9pdjsKKwkJc3RydWN0IGRlbnRyeSAqdHNmOwogCQlzdHJ1Y3QgZGVudHJ5ICpzdGF0aXN0aWNzOwogCQlzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzX3N0YXRzZGVudHJpZXMgewogCQkJc3RydWN0IGRlbnRyeSAqdHJhbnNtaXR0ZWRfZnJhZ21lbnRfY291bnQ7CkBAIC04MDUsNiArODY3LDcgQEAKIAl1OCAqY291bnRyeV9lbGVtOwogCXU4ICpwd3JfY29uc3RyX2VsZW07CiAJdTggKnF1aWV0X2VsZW07IAkvKiBmaXJzdCBxdWl0ZSBlbGVtZW50ICovCisJdTggKnRpbWVvdXRfaW50OwogCiAJLyogbGVuZ3RoIG9mIHRoZW0sIHJlc3BlY3RpdmVseSAqLwogCXU4IHNzaWRfbGVuOwpAQCAtODMyLDYgKzg5NSw3IEBACiAJdTggcHdyX2NvbnN0cl9lbGVtX2xlbjsKIAl1OCBxdWlldF9lbGVtX2xlbjsKIAl1OCBudW1fb2ZfcXVpZXRfZWxlbTsJLyogY2FuIGJlIG1vcmUgdGhlIG9uZSAqLworCXU4IHRpbWVvdXRfaW50X2xlbjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqaHdfdG9fbG9jYWwoCkBAIC04NjAsMzQgKzkyNCw0MyBAQAogdm9pZCBpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgICB1MzIgY2hhbmdlZCk7CiB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3UzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCiAvKiB3aXJlbGVzcyBleHRlbnNpb25zICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGllZWU4MDIxMV9pd19oYW5kbGVyX2RlZjsKIAotLyogU1RBL0lCU1MgY29kZSAqLworLyogU1RBIGNvZGUgKi8KIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci12b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKTsKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbik7CiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCk7Ci12b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKTsKLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLCB1OCAqYWRkciwgdTY0IHN1cHBfcmF0ZXMpOwordm9pZCBpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKTsKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbik7Ci11MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXU2NCBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCi0JCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKLXZvaWQgaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZHN0LAotCQkJICAgICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7Cit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKKworLyogSUJTUyBjb2RlICovCitpbnQgaWVlZTgwMjExX2lic3NfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbik7CitpbnQgaWVlZTgwMjExX2lic3NfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCk7Cit2b2lkIGllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK3N0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJdTggKmJzc2lkLCB1OCAqYWRkciwgdTMyIHN1cHBfcmF0ZXMpOwogCiAvKiBzY2FuL0JTUyBoYW5kbGluZyAqLwordm9pZCBpZWVlODAyMTFfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKIGludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CkBAIC04OTUsMjkgKzk2OCwyOCBAQAogaWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgICBjaGFyICppZSwgc2l6ZV90IGxlbik7CiAKIHZvaWQgaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX3NjYW5fZmFpbGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhLAotCQkJIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgIHNpemVfdCBsZW4sCiAJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgaW50IGZyZXEsIGJvb2wgYmVhY29uKTsKLXN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgYm9vbCBiZWFjb24pOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwordm9pZCBpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkLAorCQkJICAgICBpbnQgZnJlcSwgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIAogLyogaW50ZXJmYWNlIGhhbmRsaW5nICovCiBpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTk0MywxMCArMTAxNSwxNSBAQAogCQkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodGksCiAJCQl1MTYgYXBfaHRfY2FwX2ZsYWdzKTsKIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pOwordm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpOwogCiB2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsCiAJCQkJdTE2IHRpZCwgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Ci12b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYWRkcik7Cit2b2lkIF9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pOwpAQCAtOTU5LDEwICsxMDM2LDI1IEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKTsKIAoraW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKTsKKwogLyogU3BlY3RydW0gbWFuYWdlbWVudCAqLwogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgICAgc2l6ZV90IGxlbik7Cit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyk7Cit2b2lkIGllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTE2IGNhcGFiX2luZm8sIHU4ICpwd3JfY29uc3RyX2VsZW0sCisJCQkJIHU4IHB3cl9jb25zdHJfZWxlbV9sZW4pOworCisvKiBTdXNwZW5kL3Jlc3VtZSAqLworaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IF9faWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKIC8qIHV0aWxpdHkgZnVuY3Rpb25zL2NvbnN0YW50cyAqLwogZXh0ZXJuIHZvaWQgKm1hYzgwMjExX3dpcGh5X3ByaXZpZDsgLyogZm9yIHdpcGh5IHByaXZpZCAqLwpAQCAtOTgwLDE3ICsxMDcyLDM5IEBACiB2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAogCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyk7CiBpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgZnJlcSk7Ci11NjQgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKK3UzMiBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19lbmFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19kaXNhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBpbnQgcG93ZXJzYXZlKTsKIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwogdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKKwkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOwordm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKKwkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pOworCit2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsCisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAorCQkJIGNvbnN0IHU4ICpic3NpZCwgaW50IGVuY3J5cHQpOwordm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCisJCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJICAgICAgdTggKmllLCBzaXplX3QgaWVfbGVuKTsKKwordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpOwordTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX05PSU5MSU5FCiAjZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGI5MDc0ODIuLmY5ZjI3YjkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0yMSw2ICsyMSwyMyBAQAogI2luY2x1ZGUgIm1lc2guaCIKICNpbmNsdWRlICJsZWQuaCIKIAorLyoqCisgKiBET0M6IEludGVyZmFjZSBsaXN0IGxvY2tpbmcKKyAqCisgKiBUaGUgaW50ZXJmYWNlIGxpc3QgaW4gZWFjaCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIGlzIHByb3RlY3RlZAorICogdGhyZWUtZm9sZDoKKyAqCisgKiAoMSkgbW9kaWZpY2F0aW9ucyBtYXkgb25seSBiZSBkb25lIHVuZGVyIHRoZSBSVE5MCisgKiAoMikgbW9kaWZpY2F0aW9ucyBhbmQgcmVhZGVycyBhcmUgcHJvdGVjdGVkIGFnYWluc3QgZWFjaCBvdGhlciBieQorICogICAgIHRoZSBpZmxpc3RfbXR4LgorICogKDMpIG1vZGlmaWNhdGlvbnMgYXJlIGRvbmUgaW4gYW4gUkNVIG1hbm5lciBzbyBhdG9taWMgcmVhZGVycworICogICAgIGNhbiB0cmF2ZXJzZSB0aGUgbGlzdCBpbiBSQ1Utc2FmZSBibG9ja3MuCisgKgorICogQXMgYSBjb25zZXF1ZW5jZSwgcmVhZHMgKHRyYXZlcnNhbHMpIG9mIHRoZSBsaXN0IGNhbiBiZSBwcm90ZWN0ZWQKKyAqIGJ5IGVpdGhlciB0aGUgUlROTCwgdGhlIGlmbGlzdF9tdHggb3IgUkNVLgorICovCisKKwogc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpbnQgbWVzaGhkcmxlbjsKQEAgLTIxOSw3ICsyMzYsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQllbHNlCisJCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKQEAgLTMwNCwxMSArMzI0LDEwIEBACiAJICogeWV0IGJlIGVmZmVjdGl2ZS4gVHJpZ2dlciBleGVjdXRpb24gb2YgaWVlZTgwMjExX3N0YV93b3JrCiAJICogdG8gZml4IHRoaXMuCiAJICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JfQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIApAQCAtMzQ1LDEzICszNjQsMjQgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewogCQlpZiAoc3RhLT5zZGF0YSA9PSBzZGF0YSkKLQkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHNkYXRhLAotCQkJCQkJCSAgICBzdGEtPnN0YS5hZGRyKTsKKwkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKgorCSAqIEFubm91bmNlIHRoYXQgd2UgYXJlIGxlYXZpbmcgdGhlIG5ldHdvcmssIGluIGNhc2Ugd2UgYXJlIGEKKwkgKiBzdGF0aW9uIGludGVyZmFjZSB0eXBlLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcmVtb3ZpbmcKKwkgKiBhbGwgc3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHN0YV9pbmZvX2ZsdXNoLCBvdGhlcndpc2UgU1RBCisJICogaW5mb3JtYXRpb24gd2lsbCBiZSBnb25lIGFuZCBubyBhbm5vdW5jZSBiZWluZyBkb25lLgorCSAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKKwkJCWllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc2RhdGEsCisJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCX0KKworCS8qCiAJICogUmVtb3ZlIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRlcmZhY2UuCiAJICoKIAkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtPnJlbW92ZV9pbnRlcmZhY2UoKQpAQCAtMzgzLDYgKzQxMyw4IEBACiAJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfcHJvbWlzY3MpOwogCiAJZGV2X21jX3Vuc3luYyhsb2NhbC0+bWRldiwgZGV2KTsKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAogCS8qIEFQcyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50ICovCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewpAQCAtNDM0LDE0ICs0NjYsOSBAQAogCQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQkvKiBBbm5vdW5jZSB0aGF0IHdlIGFyZSBsZWF2aW5nIHRoZSBuZXR3b3JrLiAqLwotCQlpZiAoc2RhdGEtPnUuc3RhLnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKLQkJCWllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc2RhdGEsCi0JCQkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJbWVtc2V0KHNkYXRhLT51LnN0YS5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUuc3RhLnRpbWVyKTsKKwkJbWVtc2V0KHNkYXRhLT51Lm1nZC5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLmNoc3dpdGNoX3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC50aW1lcik7CiAJCS8qCiAJCSAqIElmIHRoZSB0aW1lciBmaXJlZCB3aGlsZSB3ZSB3YWl0ZWQgZm9yIGl0LCBpdCB3aWxsIGhhdmUKIAkJICogcmVxdWV1ZWQgdGhlIHdvcmsuIE5vdyB0aGUgd29yayB3aWxsIGJlIHJ1bm5pbmcgYWdhaW4KQEAgLTQ0OSw3ICs0NzYsOCBAQAogCQkgKiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgd2hpY2gsIGF0IHRoaXMgcG9pbnQsCiAJCSAqIGl0IG5vIGxvbmdlciBpcy4KIAkJICovCi0JCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLndvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfd29yayk7CiAJCS8qCiAJCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCiAJCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKQEAgLTQ1NywxMiArNDg1LDIyIEBACiAJCSAqIGZyYW1lcyBhdCB0aGlzIHZlcnkgdGltZSBvbiBhbm90aGVyIENQVS4KIAkJICovCiAJCXN5bmNocm9uaXplX3JjdSgpOwotCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51LnN0YS5za2JfcXVldWUpOworCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUpOwogCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5leHRyYV9pZSk7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZSA9IE5VTEw7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZV9sZW4gPSAwOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8CisJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSk7CisJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtNTAxLDcgKzUzOSw3IEBACiAJCQkgKiBzY2FuIGV2ZW50IHRvIHVzZXJzcGFjZSAtLSB0aGUgc2NhbiBpcyBpbmNvbXBsZXRlLgogCQkJICovCiAJCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQotCQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3KTsKKwkJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiAJCX0KIAogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwpAQCAtNTY5LDE5ICs2MDcsNiBAQAogCWRldl9tY19zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlldGhlcl9zZXR1cChkZXYpOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGllZWU4MDIxMV9vcGVuOwotCWRldi0+c3RvcCA9IGllZWU4MDIxMV9zdG9wOwotCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwotCS8qIHdlIHdpbGwgdmFsaWRhdGUgdGhlIGFkZHJlc3Mgb3Vyc2VsdmVzIGluIC0+b3BlbiAqLwotCWRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7Ci19CiAvKgogICogQ2FsbGVkIHdoZW4gdGhlIG5ldGRldiBpcyByZW1vdmVkIG9yLCBieSB0aGUgY29kZSBiZWxvdywgYmVmb3JlCiAgKiB0aGUgaW50ZXJmYWNlIHR5cGUgY2hhbmdlcy4KQEAgLTYyMSwxMiArNjQ2LDIwIEBACiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJbWVzaF9ybWNfZnJlZShzZGF0YSk7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXFfaWVzKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVzcF9pZXMpOwotCQlrZnJlZV9za2Ioc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApOworCQlrZnJlZV9za2Ioc2RhdGEtPnUuaWJzcy5wcm9iZV9yZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXFfaWVzKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVzcF9pZXMpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXEpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXNwKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmllX2F1dGgpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfYXNzb2NyZXEpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfcmVhc3NvY3JlcSk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5pZV9kZWF1dGgpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuaWVfZGlzYXNzb2MpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CkBAIC02NDIsNiArNjc1LDM0IEBACiAJV0FSTl9PTihmbHVzaGVkKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHsKKwkubmRvX29wZW4JCT0gaWVlZTgwMjExX29wZW4sCisJLm5kb19zdG9wCQk9IGllZWU4MDIxMV9zdG9wLAorCS5uZG9fdW5pbml0CQk9IGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpZWVlODAyMTFfb3BlbiwKKwkubmRvX3N0b3AJCT0gaWVlZTgwMjExX3N0b3AsCisJLm5kb191bmluaXQJCT0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Cit9CisKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhbiBpbnRlcmZhY2UgdG8gYSBzcGVjaWZpYyB0eXBlLgogICovCkBAIC02NTMsNyArNzE0LDcgQEAKIAogCS8qIGFuZCBzZXQgc29tZSB0eXBlLWRlcGVuZGVudCB2YWx1ZXMgKi8KIAlzZGF0YS0+dmlmLnR5cGUgPSB0eXBlOwotCXNkYXRhLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OworCXNkYXRhLT5kZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CiAJc2RhdGEtPndkZXYuaWZ0eXBlID0gdHlwZTsKIAogCS8qIG9ubHkgbW9uaXRvciBkaWZmZXJzICovCkBAIC02NjUsMTYgKzcyNiwxOCBAQAogCQlJTklUX0xJU1RfSEVBRCgmc2RhdGEtPnUuYXAudmxhbnMpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHNkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCWllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCXNkYXRhLT5kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCQlzZGF0YS0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0OworCQlzZGF0YS0+ZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tb25pdG9yaWZfb3BzOwogCQlzZGF0YS0+dS5tbnRyX2ZsYWdzID0gTU9OSVRPUl9GTEFHX0NPTlRST0wgfAogCQkJCSAgICAgIE1PTklUT1JfRkxBR19PVEhFUl9CU1M7CiAJCWJyZWFrOwpAQCAtNzU1LDYgKzgxOCw3IEBACiAKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNzgwLDE1ICs4NDQsMTUgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQluZGV2LT51bmluaXQgPSBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGE7Ci0KIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgogCSAgICBwYXJhbXMgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKIAkJaWVlZTgwMjExX3NkYXRhX3NldF9tZXNoX2lkKHNkYXRhLAogCQkJCQkgICAgcGFyYW1zLT5tZXNoX2lkX2xlbiwKIAkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZCk7CiAKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJnNkYXRhLT5saXN0LCAmbG9jYWwtPmludGVyZmFjZXMpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJaWYgKG5ld19kZXYpCiAJCSpuZXdfZGV2ID0gbmRldjsKQEAgLTgwNCw3ICs4NjgsMTAgQEAKIHsKIAlBU1NFUlRfUlROTCgpOwogCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2RlbF9yY3UoJnNkYXRhLT5saXN0KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShzZGF0YS0+ZGV2KTsKIH0KQEAgLTgyMCw3ICs4ODcsMTYgQEAKIAlBU1NFUlRfUlROTCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsICZsb2NhbC0+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+c2RhdGEpOworCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7CisJCQl3b3JrX2RvbmUgPSB0cnVlOworCQl9CiAJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKSB7CiAJCQlpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpOwogCQkJd29ya19kb25lID0gdHJ1ZTsKQEAgLTUzNiw2ICs1OTIsNyBAQAogCWllZWU4MDIxMV9rZXlfbG9jaygpOwogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHNkYXRhKTsKKwlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzZGF0YSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIHRtcCwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCA0MjU4MTZlLi4yMTVkM2VmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC00Niw2ICs0Niw4IEBACiAgKglhY2NlbGVyYXRpb24uCiAgKiBAS0VZX0ZMQUdfVE9ET19ERUZLRVk6IEtleSBpcyBkZWZhdWx0IGtleSBhbmQgZGVidWdmcyBuZWVkcyB0byBiZSB1cGRhdGVkLgogICogQEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlM6IEtleSBuZWVkcyB0byBiZSBhZGRlZCB0byBkZWJ1Z2ZzLgorICogQEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWTogS2V5IGlzIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMKKyAqCXRvIGJlIHVwZGF0ZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2ludGVybmFsX2tleV9mbGFncyB7CiAJS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUJPSBCSVQoMCksCkBAIC01NCw2ICs1Niw3IEBACiAJS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRQk9IEJJVCgzKSwKIAlLRVlfRkxBR19UT0RPX0RFRktFWQkJPSBCSVQoNCksCiAJS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUwk9IEJJVCg1KSwKKwlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCiBzdHJ1Y3QgdGtpcF9jdHggewpAQCAtOTYsNiArOTksMTYgQEAKIAkJCXU4IHR4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwogCQkJdTggcnhfY3J5cHRvX2J1Zls2ICogQUVTX0JMT0NLX0xFTl07CiAJCX0gY2NtcDsKKwkJc3RydWN0IHsKKwkJCXU4IHR4X3BuWzZdOworCQkJdTggcnhfcG5bNl07CisJCQlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCQkJdTMyIHJlcGxheXM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ1JlcGxheXMgKi8KKwkJCXUzMiBpY3ZlcnJvcnM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ0lDVkVycm9ycyAqLworCQkJLyogc2NyYXRjaCBidWZmZXJzIGZvciB2aXJ0X3RvX3BhZ2UoKSAoY3J5cHRvIEFQSSkgKi8KKwkJCXU4IHR4X2NyeXB0b19idWZbMiAqIEFFU19CTE9DS19MRU5dOworCQkJdTggcnhfY3J5cHRvX2J1ZlsyICogQUVTX0JMT0NLX0xFTl07CisJCX0gYWVzX2NtYWM7CiAJfSB1OwogCiAJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMga2V5IGhhcyBiZWVuIHVzZWQgKi8KQEAgLTExNCw2ICsxMjcsNyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICp0eF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyeF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyZXBsYXlzOworCQlzdHJ1Y3QgZGVudHJ5ICppY3ZlcnJvcnM7CiAJCXN0cnVjdCBkZW50cnkgKmtleTsKIAkJc3RydWN0IGRlbnRyeSAqaWZpbmRleDsKIAkJaW50IGNudDsKQEAgLTE0MCw2ICsxNTQsOCBAQAogCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpOwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpOwogdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2VuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCAyNGIxNDM2Li5mMzhkYjRkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE2OCwyNCArMTY4LDY3IEBACiAJCXJldHVybiAwOwogCiAJbWVtc2V0KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwotCWNvbmYuY2hhbmdlZCA9IGNoYW5nZWQ7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQljb25mLmJzc2lkID0gc2RhdGEtPnUuc3RhLmJzc2lkOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJY29uZi5ic3NpZCA9IHNkYXRhLT51Lm1nZC5ic3NpZDsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5pYnNzLmJzc2lkOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJY29uZi5ic3NpZCA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOwogCWVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CiAJCWNvbmYuYnNzaWQgPSB6ZXJvOwogCX0gZWxzZSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90IHdhcm4gdG8gc2ltcGxpZnkgY2FsbGVyIGluIHNjYW4uYyAqLworCQljaGFuZ2VkICY9IH5JRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRDsKKwkJaWYgKFdBUk5fT04oY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hhbmdlZCAmPSB+SUVFRTgwMjExX0lGQ0NfQkVBQ09OOworCQlicmVhazsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSB7CisJCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpIHsKKwkJCWNvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJlYWNvbiBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IEFQIG1vZGUgbXVzdAorCQkJICogY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGJlYWNvbiBjb25maWd1cmVkLgorCQkJICovCisJCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPQorCQkJCQkhIXJjdV9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSAhIXNkYXRhLT51Lmlic3MucHJvYmVfcmVzcDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSB0cnVlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJCVdBUk5fT04oMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoV0FSTl9PTighY29uZi5ic3NpZCAmJiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJY29uZi5jaGFuZ2VkID0gY2hhbmdlZDsKKwogCXJldHVybiBsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlKGxvY2FsX3RvX2h3KGxvY2FsKSwKIAkJCQkJICAgICZzZGF0YS0+dmlmLCAmY29uZik7CiB9CkBAIC0yMDgsMjYgKzI1MSwyMiBAQAogCX0KIAogCWlmIChjaGFuICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwgfHwKLQkgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZSkgeworCSAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlKSB7CiAJCWxvY2FsLT5ody5jb25mLmNoYW5uZWwgPSBjaGFuOwotCQlsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7Ci0JCXN3aXRjaCAoY2hhbm5lbF90eXBlKSB7Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgotCQkJbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6Ci0JCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM6Ci0JCQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9CisJCWxvY2FsLT5ody5jb25mLmNoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDsKIAl9CiAKLQlpZiAoIWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsKQorCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpCiAJCXBvd2VyID0gY2hhbi0+bWF4X3Bvd2VyOwogCWVsc2UKLQkJcG93ZXIgPSBtaW4oY2hhbi0+bWF4X3Bvd2VyLCBsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCk7CisJCXBvd2VyID0gbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA/CisJCQkoY2hhbi0+bWF4X3Bvd2VyIC0gbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCkgOgorCQkJY2hhbi0+bWF4X3Bvd2VyOworCisJaWYgKGxvY2FsLT51c2VyX3Bvd2VyX2xldmVsKQorCQlwb3dlciA9IG1pbihwb3dlciwgbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwpOworCiAJaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IHBvd2VyKSB7CiAJCWNoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSOwogCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IHBvd2VyOwpAQCAtNjY3LDcgKzcwNiw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7Ci0JaW50IHByaXZfc2l6ZTsKKwlpbnQgcHJpdl9zaXplLCBpOwogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAKIAkvKiBFbnN1cmUgMzItYnl0ZSBhbGlnbm1lbnQgb2Ygb3VyIHByaXZhdGUgZGF0YSBhbmQgaHcgcHJpdmF0ZSBkYXRhLgpAQCAtNjk1LDYgKzczNCwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXdpcGh5LT5wcml2aWQgPSBtYWM4MDIxMV93aXBoeV9wcml2aWQ7CisJd2lwaHktPm1heF9zY2FuX3NzaWRzID0gNDsKKwkvKiBZZXMsIHB1dHRpbmcgY2ZnODAyMTFfYnNzIGludG8gaWVlZTgwMjExX2JzcyBpcyBhIGhhY2sgKi8KKwl3aXBoeS0+YnNzX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JzcykgLQorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfYnNzKTsKIAogCWxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJbG9jYWwtPmh3LndpcGh5ID0gd2lwaHk7CkBAIC03MjIsNiArNzY1LDcgQEAKIAlsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkID0gdHJ1ZTsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CisJbXV0ZXhfaW5pdCgmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5rZXlfbG9jayk7CiAKQEAgLTczNiw2ICs3ODAsMTEgQEAKIAlzZXR1cF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsCiAJCSAgICBpZWVlODAyMTFfZHluYW1pY19wc190aW1lciwgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKIAorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzsgaSsrKQorCQlsb2NhbC0+YW1wZHVfYWNfcXVldWVbaV0gPSAtMTsKKwkvKiB1c2luZyBhbiBzOCB3b24ndCB3b3JrIHdpdGggbW9yZSB0aGFuIHRoYXQgKi8KKwlCVUlMRF9CVUdfT04oSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgPiAxMjcpOworCiAJc3RhX2luZm9faW5pdChsb2NhbCk7CiAKIAl0YXNrbGV0X2luaXQoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQsIGllZWU4MDIxMV90eF9wZW5kaW5nLApAQCAtNzU0LDYgKzgwMywyMyBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdCwKKwkubmRvX29wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW4sCisJLm5kb19zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX21hc3Rlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbWRldikKK3sKKwltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwltZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tYXN0ZXJfb3BzOworCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7CisJbWRldi0+dHhfcXVldWVfbGVuID0gMTAwMDsKKwltZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOworfQorCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtNzYxLDI1ICs4MjcsMzMgQEAKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXY7CisJaW50IGNoYW5uZWxzLCBpLCBqOwogCiAJLyoKIAkgKiBnZW5lcmljIGNvZGUgZ3VhcmFudGVlcyBhdCBsZWFzdCBvbmUgYmFuZCwKIAkgKiBzZXQgdGhpcyB2ZXJ5IGVhcmx5IGJlY2F1c2UgbXVjaCBjb2RlIGFzc3VtZXMKIAkgKiB0aGF0IGh3LmNvbmYuY2hhbm5lbCBpcyBhc3NpZ25lZAogCSAqLworCWNoYW5uZWxzID0gMDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCiAJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQkJaWYgKHNiYW5kKSB7CisJCWlmIChzYmFuZCAmJiAhbG9jYWwtPm9wZXJfY2hhbm5lbCkgewogCQkJLyogaW5pdCBjaGFubmVsIHdlJ3JlIG9uICovCiAJCQlsb2NhbC0+aHcuY29uZi5jaGFubmVsID0KIAkJCWxvY2FsLT5vcGVyX2NoYW5uZWwgPQogCQkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9ICZzYmFuZC0+Y2hhbm5lbHNbMF07Ci0JCQlicmVhazsKIAkJfQorCQlpZiAoc2JhbmQpCisJCQljaGFubmVscyArPSBzYmFuZC0+bl9jaGFubmVsczsKIAl9CiAKKwlsb2NhbC0+aW50X3NjYW5fcmVxLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIGNoYW5uZWxzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyogaWYgbG93LWxldmVsIGRyaXZlciBzdXBwb3J0cyBBUCwgd2UgYWxzbyBzdXBwb3J0IFZMQU4gKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQogCQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CkBAIC03ODcsOSArODYxLDE0IEBACiAJLyogbWFjODAyMTEgYWx3YXlzIHN1cHBvcnRzIG1vbml0b3IgKi8KIAlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CiAKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM7CisKIAlyZXN1bHQgPSB3aXBoeV9yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIGZhaWxfd2lwaHlfcmVnaXN0ZXI7CiAKIAkvKgogCSAqIFdlIHVzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBmb3IgZmVhdHVyZSB0ZXN0cyAoUW9TLCBIVCkgaW50ZXJuYWxseQpAQCAtODAzLDggKzg4Miw4IEBACiAJCWh3LT5hbXBkdV9xdWV1ZXMgPSAwOwogCiAJbWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiksCi0JCQkgICAgICAgIndtYXN0ZXIlZCIsIGV0aGVyX3NldHVwLAotCQkJICAgICAgIGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSk7CisJCQkgICAgICAgIndtYXN0ZXIlZCIsIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAsCisJCQkgICAgICAgaHctPnF1ZXVlcyk7CiAJaWYgKCFtZGV2KQogCQlnb3RvIGZhaWxfbWRldl9hbGxvYzsKIApAQCAtODEyLDE3ICs4OTEsOCBAQAogCW1wcml2LT5sb2NhbCA9IGxvY2FsOwogCWxvY2FsLT5tZGV2ID0gbWRldjsKIAotCWllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KGxvY2FsKTsKLQotCW1kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdDsKLQltZGV2LT5vcGVuID0gaWVlZTgwMjExX21hc3Rlcl9vcGVuOwotCW1kZXYtPnN0b3AgPSBpZWVlODAyMTFfbWFzdGVyX3N0b3A7Ci0JbWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JbWRldi0+aGVhZGVyX29wcyA9ICZpZWVlODAyMTFfaGVhZGVyX29wczsKLQltZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfbWFzdGVyX3NldF9tdWx0aWNhc3RfbGlzdDsKLQogCWxvY2FsLT5ody53b3JrcXVldWUgPQotCQljcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKIAlpZiAoIWxvY2FsLT5ody53b3JrcXVldWUpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsX3dvcmtxdWV1ZTsKQEAgLTg0NiwxNSArOTE2LDYgQEAKIAogCWxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCA9IGxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsOwogCi0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiAoSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfAotCQkJCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCIHwKLQkJCQkJCSAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pID8KLQkJCSAgICAgICBJV19RVUFMX1FVQUxfVVBEQVRFRCA6IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWxvY2FsLT53c3RhdHNfZmxhZ3MgfD0gbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSA/Ci0JCQkgICAgICAgSVdfUVVBTF9OT0lTRV9VUERBVEVEIDogSVdfUVVBTF9OT0lTRV9JTlZBTElEOwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKLQkJbG9jYWwtPndzdGF0c19mbGFncyB8PSBJV19RVUFMX0RCTTsKLQogCXJlc3VsdCA9IHN0YV9pbmZvX3N0YXJ0KGxvY2FsKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBmYWlsX3N0YV9pbmZvOwpAQCAtODY2LDYgKzkyNyw3IEBACiAKIAltZW1jcHkobG9jYWwtPm1kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKGxvY2FsLT5tZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7CisJbG9jYWwtPm1kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwogCWlmIChyZXN1bHQgPCAwKQpAQCAtODg3LDggKzk0OSw2IEBACiAJCWdvdG8gZmFpbF93ZXA7CiAJfQogCi0JbG9jYWwtPm1kZXYtPnNlbGVjdF9xdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWU7Ci0KIAkvKiBhZGQgb25lIGRlZmF1bHQgU1RBIGludGVyZmFjZSBpZiBzdXBwb3J0ZWQgKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpIHsKIAkJcmVzdWx0ID0gaWVlZTgwMjExX2lmX2FkZChsb2NhbCwgIndsYW4lZCIsIE5VTEwsCkBAIC05MDIsNiArOTYyLDIwIEBACiAKIAlpZWVlODAyMTFfbGVkX2luaXQobG9jYWwpOwogCisJLyogYWxsb2MgaW50ZXJuYWwgc2NhbiByZXF1ZXN0ICovCisJaSA9IDA7CisJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkcyA9ICZsb2NhbC0+c2Nhbl9zc2lkOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEubl9zc2lkcyA9IDE7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAoIWh3LT53aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVsc1tpXSA9CisJCQkJJmh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJaSsrOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGZhaWxfd2VwOgpAQCAtOTIwLDYgKzk5NCw4IEBACiAJCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKIGZhaWxfbWRldl9hbGxvYzoKIAl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CitmYWlsX3dpcGh5X3JlZ2lzdGVyOgorCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpOwogCXJldHVybiByZXN1bHQ7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9odyk7CkBAIC05NDcsNyArMTAyMyw2IEBACiAKIAlydG5sX3VubG9jaygpOwogCi0JaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChsb2NhbCk7CiAJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwogCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwpAQCAtOTY1LDYgKzEwNDAsNyBAQAogCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7CiAJaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKIAlmcmVlX25ldGRldihsb2NhbC0+bWRldik7CisJa2ZyZWUobG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KTsKIApAQCAtOTcyLDYgKzEwNDgsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCisJbXV0ZXhfZGVzdHJveSgmbG9jYWwtPmlmbGlzdF9tdHgpOworCiAJd2lwaHlfZnJlZShsb2NhbC0+aHcud2lwaHkpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZnJlZV9odyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCA4MmY1NjhlLi45YTNlNWRlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTI3NSwxNiArMjc1LDYgQEAKIAkJJiB0YmwtPmhhc2hfbWFzazsKIH0KIAotdTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pCi17Ci0JaWYgKCFtZXNoX2lkX2xlbikKLQkJcmV0dXJuIDE7Ci0JZWxzZSBpZiAobWVzaF9pZF9sZW4gPT0gMSkKLQkJcmV0dXJuICh1OCkgbWVzaF9pZFswXTsKLQllbHNlCi0JCXJldHVybiAodTgpIChtZXNoX2lkWzBdICsgMiAqIG1lc2hfaWRbMV0pOwotfQotCiBzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9hbGxvYyhpbnQgc2l6ZV9vcmRlcikKIHsKIAlpbnQgaTsKQEAgLTQ0Miw3ICs0MzIsOCBAQAogCiAJaWZtc2gtPmhvdXNla2VlcGluZyA9IHRydWU7CiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtc2gtPndvcmspOwotCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7CisJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkgICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0b3BfbWVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTQ3Niw3ICs0NjcsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQl1NjQgc3VwcF9yYXRlcyA9IDA7CisJdTMyIHN1cHBfcmF0ZXMgPSAwOwogCXNpemVfdCBiYXNlbGVuOwogCWludCBmcmVxOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGMxOTdhYjUuLmQ4OTFkN2QgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtMjQsMTUgKzI0LDE1IEBACiAgKgogICoKICAqCi0gKiBATUVTSF9QQVRIX0FDVElWRTogdGhlIG1lc2ggcGF0aCBpcyBjYW4gYmUgdXNlZCBmb3IgZm9yd2FyZGluZwotICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHJ1bm5pbmcgZm9yIHRoaXMgbWVzaCBwYXRoCisgKiBATUVTSF9QQVRIX0FDVElWRTogdGhlIG1lc2ggcGF0aCBjYW4gYmUgdXNlZCBmb3IgZm9yd2FyZGluZworICogQE1FU0hfUEFUSF9SRVNPTFZJTkc6IHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBpcyBydW5uaW5nIGZvciB0aGlzIG1lc2ggcGF0aAogICogQE1FU0hfUEFUSF9EU05fVkFMSUQ6IHRoZSBtZXNoIHBhdGggY29udGFpbnMgYSB2YWxpZCBkZXN0aW5hdGlvbiBzZXF1ZW5jZQogICogCW51bWJlcgogICogQE1FU0hfUEFUSF9GSVhFRDogdGhlIG1lc2ggcGF0aCBoYXMgYmVlbiBtYW51YWxseSBzZXQgYW5kIHNob3VsZCBub3QgYmUKICAqIAltb2RpZmllZAogICogQE1FU0hfUEFUSF9SRVNPTFZFRDogdGhlIG1lc2ggcGF0aCBjYW4gaGFzIGJlZW4gcmVzb2x2ZWQKICAqCi0gKiBNRVNIX1BBVEhfUkVTT0xWRUQgYW5kIE1FU0hfUEFUSF9ERUxFVEUgYXJlIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bworICogTUVTSF9QQVRIX1JFU09MVkVEIGlzIHVzZWQgYnkgdGhlIG1lc2ggcGF0aCB0aW1lciB0bwogICogZGVjaWRlIHdoZW4gdG8gc3RvcCBvciBjYW5jZWwgdGhlIG1lc2ggcGF0aCBkaXNjb3ZlcnkuCiAgKi8KIGVudW0gbWVzaF9wYXRoX2ZsYWdzIHsKQEAgLTE5Niw3ICsxOTYsNiBAQAogCiAvKiBQdWJsaWMgaW50ZXJmYWNlcyAqLwogLyogVmFyaW91cyAqLwotdTggbWVzaF9pZF9oYXNoKHU4ICptZXNoX2lkLCBpbnQgbWVzaF9pZF9sZW4pOwogaW50IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyKTsKIGludCBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkciwKIAkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpAQCAtMjM2LDE0ICsyMzUsMTMgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKTsKIGludCBtZXNoX3BhdGhfYWRkKHU4ICpkc3QsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIC8qIE1lc2ggcGxpbmtzICovCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTY0IHJhdGVzLAordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywKIAkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgYWRkKTsKIGJvb2wgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICppZSk7CiB2b2lkIG1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jyb2tlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBpbnQgbWVzaF9wbGlua19vcGVuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKLWludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9wbGlua19ibG9jayhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IDcxZmU2MDkuLjYwYjM1YWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTU4LDcgKzU4LDYgQEAKICNkZWZpbmUgUEVSUl9JRV9EU1RfQUREUih4KQkoeCArIDIpCiAjZGVmaW5lIFBFUlJfSUVfRFNUX0RTTih4KQl1MzJfZmllbGRfZ2V0KHgsIDgsIDApOwogCi0jZGVmaW5lIFRVX1RPX0VYUF9USU1FKHgpIChqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh4ICogMTAyNCAvIDEwMDApKQogI2RlZmluZSBNU0VDX1RPX1RVKHgpICh4KjEwMDAvMTAyNCkKICNkZWZpbmUgRFNOX0dUKHgsIHkpICgobG9uZykgKHkpIC0gKGxvbmcpICh4KSA8IDApCiAjZGVmaW5lIERTTl9MVCh4LCB5KSAoKGxvbmcpICh4KSAtIChsb25nKSAoeSkgPCAwKQpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJcG9zICs9IEVUSF9BTEVOOwogCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4LDcgKzE5Nyw3IEBACiAJcG9zICs9IEVUSF9BTEVOOwogCW1lbWNweShwb3MsICZkc3RfZHNuLCA0KTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU5LDcgKzc1OCw3IEBACiB9CiAKIC8qKgotICogaWVlZTgwMjExc19sb29rdXBfbmV4dGhvcCAtIHB1dCB0aGUgYXBwcm9wcmlhdGUgbmV4dCBob3Agb24gYSBtZXNoIGZyYW1lCisgKiBtZXNoX25leHRob3BfbG9va3VwIC0gcHV0IHRoZSBhcHByb3ByaWF0ZSBuZXh0IGhvcCBvbiBhIG1lc2ggZnJhbWUKICAqCiAgKiBAc2tiOiA4MDIuMTEgZnJhbWUgdG8gYmUgc2VudAogICogQHNkYXRhOiBuZXR3b3JrIHN1YmlmIHRoZSBmcmFtZSB3aWxsIGJlIHNlbnQgdGhyb3VnaApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggMTE1OWJkYi4uYThiYmRlYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC05Myw3ICs5Myw3IEBACiAgKiAgICAgICBvbiBpdCBpbiB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgc2VjdGlvbiEKICAqLwogc3RhdGljIHN0cnVjdCBzdGFfaW5mbyAqbWVzaF9wbGlua19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHU4ICpod19hZGRyLCB1NjQgcmF0ZXMpCisJCQkJCSB1OCAqaHdfYWRkciwgdTMyIHJhdGVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMjE4LDExICsyMTgsMTEgQEAKIAkJbWVtY3B5KHBvcywgJnJlYXNvbiwgMik7CiAJfQogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogCXJldHVybiAwOwogfQogCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTY0IHJhdGVzLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKK3ZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1MzIgcmF0ZXMsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgYm9vbCBwZWVyX2FjY2VwdGluZ19wbGlua3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CkBAIC0zNjEsMzYgKzM2MSw2IEBACiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiB9CiAKLWludCBtZXNoX3BsaW5rX2Nsb3NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKLQlfX2xlMTYgbGxpZCwgcGxpZCwgcmVhc29uOwotCi0JbXBsX2RiZygiTWVzaCBwbGluazogY2xvc2luZyBsaW5rIHdpdGggJXBNXG4iLCBzdGEtPnN0YS5hZGRyKTsKLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0Jc3RhLT5yZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX0xJTktfQ0FOQ0VMTEVEKTsKLQlyZWFzb24gPSBzdGEtPnJlYXNvbjsKLQotCWlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0xJU1RFTiB8fAotCSAgICBzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0JMT0NLRUQpIHsKLQkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOwotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0VTVEFCKSB7Ci0JCV9fbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0YSk7Ci0JCS8qIFRoZSB0aW1lciBzaG91bGQgbm90IGJlIHJ1bm5pbmcgKi8KLQkJbW9kX3BsaW5rX3RpbWVyKHN0YSwgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKTsKLQl9IGVsc2UgaWYgKCFtb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpKQotCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7Ci0KLQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKLQlsbGlkID0gc3RhLT5sbGlkOwotCXBsaWQgPSBzdGEtPnBsaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JbWVzaF9wbGlua19mcmFtZV90eChzdGEtPnNkYXRhLCBQTElOS19DTE9TRSwgc3RhLT5zdGEuYWRkciwgbGxpZCwKLQkJCSAgICBwbGlkLCByZWFzb24pOwotCXJldHVybiAwOwotfQogCiB2b2lkIG1lc2hfcnhfcGxpbmtfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCSBzaXplX3QgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQpAQCAtNDc3LDcgKzQ0Nyw3IEBACiAJCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAl9IGVsc2UgaWYgKCFzdGEpIHsKIAkJLyogZnR5cGUgPT0gUExJTktfT1BFTiAqLwotCQl1NjQgcmF0ZXM7CisJCXUzMiByYXRlczsKIAkJaWYgKCFtZXNoX3BsaW5rX2ZyZWVfY291bnQoc2RhdGEpKSB7CiAJCQltcGxfZGJnKCJNZXNoIHBsaW5rIGVycm9yOiBubyBtb3JlIGZyZWUgcGxpbmtzXG4iKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggMmI4OTBhZi4uODQxYjg0NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIEJTUyBjbGllbnQgbW9kZSBpbXBsZW1lbnRhdGlvbgotICogQ29weXJpZ2h0IDIwMDMsIEpvdW5pIE1hbGluZW4gPGprbWFsaW5lQGNjLmh1dC5maT4KKyAqIENvcHlyaWdodCAyMDAzLTIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CiAgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgogICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KQEAgLTE1LDExICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKQEAgLTM1LDE1ICszMiw2IEBACiAjZGVmaW5lIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMICgyICogSFopCiAjZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCAoNjAgKiBIWikKICNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAotCiAKIC8qIHV0aWxzICovCiBzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQpAQCAtNTUsMTAgKzQzLDEwIEBACiB7CiAJdTggKmVuZCwgKnBvczsKIAotCXBvcyA9IGJzcy0+aWVzOworCXBvcyA9IGJzcy0+Y2Jzcy5pbmZvcm1hdGlvbl9lbGVtZW50czsKIAlpZiAocG9zID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCWVuZCA9IHBvcyArIGJzcy0+aWVzX2xlbjsKKwllbmQgPSBwb3MgKyBic3MtPmNic3MubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOwogCiAJd2hpbGUgKHBvcyArIDEgPCBlbmQpIHsKIAkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCkBAIC03Myw3ICs2MSw3IEBACiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCQkgICAgICB1NjQgKnJhdGVzKQorCQkJCSAgICAgIHUzMiAqcmF0ZXMpCiB7CiAJaW50IGksIGosIGNvdW50OwogCSpyYXRlcyA9IDA7CkBAIC05MiwxNjAgKzgwLDQwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKiBhbHNvIHVzZWQgYnkgbWVzaCBjb2RlICovCi11NjQgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXNpemVfdCBudW1fcmF0ZXM7Ci0JdTY0IHN1cHBfcmF0ZXM7Ci0JaW50IGksIGo7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JaWYgKCFzYmFuZCkgewotCQlXQVJOX09OKDEpOwotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JfQotCi0JYml0cmF0ZXMgPSBzYmFuZC0+Yml0cmF0ZXM7Ci0JbnVtX3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7Ci0Jc3VwcF9yYXRlcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbiArCi0JCSAgICAgZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCXU4IHJhdGUgPSAwOwotCQlpbnQgb3duX3JhdGU7Ci0JCWlmIChpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQotCQkJcmF0ZSA9IGVsZW1zLT5zdXBwX3JhdGVzW2ldOwotCQllbHNlIGlmIChlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMpCi0JCQlyYXRlID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzCi0JCQkJW2kgLSBlbGVtcy0+c3VwcF9yYXRlc19sZW5dOwotCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOwotCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JhdGVzOyBqKyspCi0JCQlpZiAoYml0cmF0ZXNbal0uYml0cmF0ZSA9PSBvd25fcmF0ZSkKLQkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKLQl9Ci0JcmV0dXJuIHN1cHBfcmF0ZXM7Ci19Ci0KIC8qIGZyYW1lIHNlbmRpbmcgZnVuY3Rpb25zICovCiAKLS8qIGFsc28gdXNlZCBieSBzY2FubmluZyBjb2RlICovCi12b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKLQkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFfaWVzKHN0cnVjdCBza19idWZmICpza2IsIHU4ICppZXMsIHNpemVfdCBpZXNfbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMOwotCWludCBpOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKGRzdCkgewotCQltZW1jcHkobWdtdC0+ZGEsIGRzdCwgRVRIX0FMRU4pOwotCQltZW1jcHkobWdtdC0+YnNzaWQsIGRzdCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1zZXQobWdtdC0+YnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKLQl9Ci0JcG9zID0gc2tiX3B1dChza2IsIDIgKyBzc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBzc2lkX2xlbjsKLQltZW1jcHkocG9zLCBzc2lkLCBzc2lkX2xlbik7Ci0KLQlzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDIpOwotCXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCXN1cHBfcmF0ZXNbMV0gPSAwOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWlmIChlc3VwcF9yYXRlcykgewotCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOwotCQkJZXN1cHBfcmF0ZXNbMV0rKzsKLQkJfSBlbHNlIGlmIChzdXBwX3JhdGVzWzFdID09IDgpIHsKLQkJCWVzdXBwX3JhdGVzID0gc2tiX3B1dChza2IsIDMpOwotCQkJZXN1cHBfcmF0ZXNbMF0gPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJCWVzdXBwX3JhdGVzWzFdID0gMTsKLQkJCXBvcyA9ICZlc3VwcF9yYXRlc1syXTsKLQkJfSBlbHNlIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCXN1cHBfcmF0ZXNbMV0rKzsKLQkJfQotCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7Ci0JfQotCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZiAoaWVzKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGllc19sZW4pLCBpZXMsIGllc19sZW4pOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQlpbnQgdHJhbnNhY3Rpb24sIHU4ICpleHRyYSwgc2l6ZV90IGV4dHJhX2xlbiwKLQkJCQlpbnQgZW5jcnlwdCkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQgKyA2KTsKLQltZW1zZXQobWdtdCwgMCwgMjQgKyA2KTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKLQlpZiAoZW5jcnlwdCkKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoaWZzdGEtPmF1dGhfYWxnKTsKLQltZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uICsgMTsKLQltZ210LT51LmF1dGguc3RhdHVzX2NvZGUgPSBjcHVfdG9fbGUxNigwKTsKLQlpZiAoZXh0cmEpCi0JCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3MsICppZXMsICpodF9pZTsKKwl1OCAqcG9zLCAqaWVzLCAqaHRfaWUsICplX2llczsKIAlpbnQgaSwgbGVuLCBjb3VudCwgcmF0ZXNfbGVuLCBzdXBwX3JhdGVzX2xlbjsKIAl1MTYgY2FwYWI7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgd21tID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1NjQgcmF0ZXMgPSAwOworCXUzMiByYXRlcyA9IDA7CisJc2l6ZV90IGVfaWVzX2xlbjsKKworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkgeworCQllX2llcyA9IHNkYXRhLT51Lm1nZC5pZV9yZWFzc29jcmVxOworCQllX2llc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfcmVhc3NvY3JlcV9sZW47CisJfSBlbHNlIHsKKwkJZV9pZXMgPSBzZGF0YS0+dS5tZ2QuaWVfYXNzb2NyZXE7CisJCWVfaWVzX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9hc3NvY3JlcV9sZW47CisJfQogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZnN0YS0+ZXh0cmFfaWVfbGVuICsKLQkJCSAgICBpZnN0YS0+c3NpZF9sZW4pOworCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZm1nZC0+ZXh0cmFfaWVfbGVuICsKKwkJCSAgICBpZm1nZC0+c3NpZF9sZW4gKyBlX2llc19sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgogCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTI1NSw3ICsxMjMsNyBAQAogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCi0JY2FwYWIgPSBpZnN0YS0+Y2FwYWI7CisJY2FwYWIgPSBpZm1nZC0+Y2FwYWI7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKQEAgLTI2NCwxMSArMTMyLDExIEBACiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CiAJfQogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKLQkJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpZiAoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCQlpZiAoYnNzLT53bW1fdXNlZCkKIAkJCXdtbSA9IDE7CkBAIC0yNzksNyArMTQ3LDcgQEAKIAkJICogYi1vbmx5IG1vZGUpICovCiAJCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKGJzcywgc2JhbmQsICZyYXRlcyk7CiAKLQkJaWYgKChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkJaWYgKChic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgogCQkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwogCkBAIC0yOTEsMTggKzE1OSwxOCBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewogCQlza2JfcHV0KHNrYiwgMTApOwogCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwogCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KIAkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZnN0YS0+cHJldl9ic3NpZCwKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZtZ2QtPnByZXZfYnNzaWQsCiAJCSAgICAgICBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc2tiX3B1dChza2IsIDQpOwpAQCAtMzE0LDEwICsxODIsMTAgQEAKIAl9CiAKIAkvKiBTU0lEICovCi0JaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOworCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZtZ2QtPnNzaWRfbGVuKTsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBpZm1nZC0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAKIAkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KIAlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKQEAgLTM3MiwxMiArMjQwLDEyIEBACiAJCX0KIAl9CiAKLQlpZiAoaWZzdGEtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZzdGEtPmV4dHJhX2llLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKIAl9CiAKLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgeworCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CiAJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKIAkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwogCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KQEAgLTM5MSwxMCArMjU5LDE3IEBACiAJfQogCiAJLyogd21tIHN1cHBvcnQgaXMgYSBtdXN0IHRvIEhUICovCi0JaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkvKgorCSAqIElFRUU4MDIuMTFuIGRvZXMgbm90IGFsbG93IFRLSVAvV0VQIGFzIHBhaXJ3aXNlCisJICogY2lwaGVycyBpbiBIVCBtb2RlLiBXZSBzdGlsbCBhc3NvY2lhdGUgaW4gbm9uLWh0CisJICogbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZSBjaXBoZXJzIGlzCisJICogY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KKwkgKi8KKwlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgogCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgogCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKLQkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpIHsKKwkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgJiYKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikoaHRfaWUgKyAyKTsKIAkJdTE2IGNhcCA9IHNiYW5kLT5odF9jYXAuY2FwOwpAQCAtNDI5LDExICszMDQsMTMgQEAKIAkJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKIAl9CiAKLQlrZnJlZShpZnN0YS0+YXNzb2NyZXFfaWVzKTsKLQlpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7Ci0JaWZzdGEtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOwotCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVxX2llcywgaWVzLCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbik7CisJYWRkX2V4dHJhX2llcyhza2IsIGVfaWVzLCBlX2llc19sZW4pOworCisJa2ZyZWUoaWZtZ2QtPmFzc29jcmVxX2llcyk7CisJaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOworCWlmbWdkLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKKwkJbWVtY3B5KGlmbWdkLT5hc3NvY3JlcV9pZXMsIGllcywgaWZtZ2QtPmFzc29jcmVxX2llc19sZW4pOwogCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KQEAgLTQ0MywxMSArMzIwLDIyIEBACiAJCQkJCSAgIHUxNiBzdHlwZSwgdTE2IHJlYXNvbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICppZXM7CisJc2l6ZV90IGllc19sZW47CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkpOworCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfREVBVVRIKSB7CisJCWllcyA9IHNkYXRhLT51Lm1nZC5pZV9kZWF1dGg7CisJCWllc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfZGVhdXRoX2xlbjsKKwl9IGVsc2UgeworCQlpZXMgPSBzZGF0YS0+dS5tZ2QuaWVfZGlzYXNzb2M7CisJCWllc19sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfZGlzYXNzb2NfbGVuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArCisJCQkgICAgaWVzX2xlbik7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCiAJCSAgICAgICAiZGVhdXRoL2Rpc2Fzc29jIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTQ1Nyw0MCArMzQ1LDUzIEBACiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwgc3R5cGUpOwogCXNrYl9wdXQoc2tiLCAyKTsKIAkvKiB1LmRlYXV0aC5yZWFzb25fY29kZSA9PSB1LmRpc2Fzc29jLnJlYXNvbl9jb2RlICovCiAJbWdtdC0+dS5kZWF1dGgucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb24pOwogCisJYWRkX2V4dHJhX2llcyhza2IsIGllcywgaWVzX2xlbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICpwc3BvbGw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqcHNwb2xsKSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCisJCSAgICAgICAicHNwb2xsIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKikgc2tiX3B1dChza2IsIHNpemVvZigqcHNwb2xsKSk7CisJbWVtc2V0KHBzcG9sbCwgMCwgc2l6ZW9mKCpwc3BvbGwpKTsKKwlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMIHwgSUVFRTgwMjExX0ZDVExfUE07CisJcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOworCXBzcG9sbC0+YWlkID0gY3B1X3RvX2xlMTYoaWZtZ2QtPmFpZCk7CisKKwkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KKwlwc3BvbGwtPmFpZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1IHwgMSA8PCAxNCk7CisKKwltZW1jcHkocHNwb2xsLT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCiAvKiBNTE1FICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOwotCi0JLyogY2YuIElFRUUgODAyLjExIDkuMi4xMiAqLwotCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspCi0JCWlmICgoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQotCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgotCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKLQkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0JZWxzZQotCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0KLQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCwKIAkJCQkgICAgIHU4ICp3bW1fcGFyYW0sIHNpemVfdCB3bW1fcGFyYW1fbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHBhcmFtczsKQEAgLTQ5OCw3ICszOTksNyBAQAogCWludCBjb3VudDsKIAl1OCAqcG9zOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCiAJCXJldHVybjsKIAogCWlmICghd21tX3BhcmFtKQpAQCAtNTA3LDE4ICs0MDgsMTUgQEAKIAlpZiAod21tX3BhcmFtX2xlbiA8IDggfHwgd21tX3BhcmFtWzVdIC8qIHZlcnNpb24gKi8gIT0gMSkKIAkJcmV0dXJuOwogCWNvdW50ID0gd21tX3BhcmFtWzZdICYgMHgwZjsKLQlpZiAoY291bnQgPT0gaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCkKKwlpZiAoY291bnQgPT0gaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCkKIAkJcmV0dXJuOwotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gY291bnQ7CiAKIAlwb3MgPSB3bW1fcGFyYW0gKyA4OwogCWxlZnQgPSB3bW1fcGFyYW1fbGVuIC0gODsKIAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAKLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZfdHgpCi0JCXJldHVybjsKLQogCWxvY2FsLT53bW1fYWNtID0gMDsKIAlmb3IgKDsgbGVmdCA+PSA0OyBsZWZ0IC09IDQsIHBvcyArPSA0KSB7CiAJCWludCBhY2kgPSAocG9zWzBdID4+IDUpICYgMHgwMzsKQEAgLTUyNiwyNiArNDI0LDI2IEBACiAJCWludCBxdWV1ZTsKIAogCQlzd2l0Y2ggKGFjaSkgewotCQljYXNlIDE6CisJCWNhc2UgMTogLyogQUNfQksgKi8KIAkJCXF1ZXVlID0gMzsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsgLyogQksvLSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMjoKKwkJY2FzZSAyOiAvKiBBQ19WSSAqLwogCQkJcXVldWUgPSAxOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOyAvKiBDTC9WSSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMzoKKwkJY2FzZSAzOiAvKiBBQ19WTyAqLwogCQkJcXVldWUgPSAwOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDYpIHwgQklUKDcpOyAvKiBWTy9OQyAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMDoKKwkJY2FzZSAwOiAvKiBBQ19CRSAqLwogCQlkZWZhdWx0OgogCQkJcXVldWUgPSAyOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOyAvKiBCRS9FRSAqLwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNTU5LDIxICs0NTcsNDEgQEAKIAkJICAgICAgIGxvY2FsLT5tZGV2LT5uYW1lLCBxdWV1ZSwgYWNpLCBhY20sIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLAogCQkgICAgICAgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOwogI2VuZGlmCi0JCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCi0JCSAqIEFDIGZvciBub3cpICovCi0JCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CisJCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4ICYmCisJCSAgICBsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgogCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgbG9jYWwtPm1kZXYtPm5hbWUsIHF1ZXVlKTsKIAkJfQogCX0KIH0KIAorc3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX3RpbShzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsIHUxNiBhaWQpCit7CisJdTggbWFzazsKKwl1OCBpbmRleCwgaW5kZXhuMSwgaW5kZXhuMjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltID0gKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopIGVsZW1zLT50aW07CisKKwlhaWQgJj0gMHgzZmZmOworCWluZGV4ID0gYWlkIC8gODsKKwltYXNrICA9IDEgPDwgKGFpZCAmIDcpOworCisJaW5kZXhuMSA9IHRpbS0+Yml0bWFwX2N0cmwgJiAweGZlOworCWluZGV4bjIgPSBlbGVtcy0+dGltX2xlbiArIGluZGV4bjEgLSA0OworCisJaWYgKGluZGV4IDwgaW5kZXhuMSB8fCBpbmRleCA+IGluZGV4bjIpCisJCXJldHVybiBmYWxzZTsKKworCWluZGV4IC09IGluZGV4bjE7CisKKwlyZXR1cm4gISEodGltLT52aXJ0dWFsX21hcFtpbmRleF0gJiBtYXNrKTsKK30KKwogc3RhdGljIHUzMiBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgICB1MTYgY2FwYWIsIGJvb2wgZXJwX3ZhbGlkLCB1OCBlcnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAjZW5kaWYKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCB1c2VfcHJvdGVjdGlvbjsKQEAgLTU5Niw3ICs1MTQsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX2N0c19wcm90ID0gdXNlX3Byb3RlY3Rpb247CkBAIC02MTAsNyArNTI4LDcgQEAKIAkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOwpAQCAtNjI0LDcgKzU0Miw3IEBACiAJCQkgICAgICAgIiAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9zaG9ydF9zbG90ID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPSB1c2Vfc2hvcnRfc2xvdDsKQEAgLTYzNCw1NyArNTUyLDU3IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCi0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNoYXIgKmJ1ZjsKIAlzaXplX3QgbGVuOwogCWludCBpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAotCWlmICghaWZzdGEtPmFzc29jcmVxX2llcyAmJiAhaWZzdGEtPmFzc29jcmVzcF9pZXMpCisJaWYgKCFpZm1nZC0+YXNzb2NyZXFfaWVzICYmICFpZm1nZC0+YXNzb2NyZXNwX2llcykKIAkJcmV0dXJuOwogCi0JYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZzdGEtPmFzc29jcmVxX2llc19sZW4gKwotCQkJCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuICsKKwkJCQlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCiAJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ0lORk8oIik7Ci0JaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpIHsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXFJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVxX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3JlcV9pZXNbaV0pOwogCQl9CiAJfQotCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykgewotCQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKKwkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKIAkJfQogCX0KIAlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7CiAKIAlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewogCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7CiAJCX0KIAl9CiAKQEAgLTY5OSw0MCArNjE3LDM3IEBACiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgdTMyIGJzc19pbmZvX2NoYW5nZWQpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsX3RvX2h3KGxvY2FsKS0+Y29uZjsKIAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKIAkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQ7Ci0JCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWw7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKIAkJc2RhdGEtPnZpZi5ic3NfY29uZi5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CiAKIAkJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLAotCQkJYnNzLT5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwkJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKIAogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQltZW1jcHkoaWZzdGEtPnByZXZfYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEsIGlmc3RhKTsKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwltZW1jcHkoaWZtZ2QtPnByZXZfYnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEpOwogCi0JaWZzdGEtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOworCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAxKTsKIAogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSAxOwpAQCAtNzQ1LDcyICs2NjAsOTAgQEAKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgYnNzX2luZm9fY2hhbmdlZCk7CiAKIAlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkgewotCQlpZiAobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApCisJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSAmJgorCQkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgewogCQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQkJZWxzZSB7CisJCQkJICBtc2Vjc190b19qaWZmaWVzKAorCQkJCQlsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwotCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKLQkJCQkJICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisJCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCQl9CiAJfQogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29uKHNkYXRhLT5kZXYpOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcysrOwotCWlmIChpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKys7CisJaWYgKGlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKworCQkvKgorCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKKwkJICogYnNzIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlIEFQCisJCSAqLworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAkJcmV0dXJuOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0cnkgJWRcbiIsCi0JCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQsCi0JCQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKKwkJCXNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCwKKwkJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMpOwogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsICZpZnN0YS0+cmVxdWVzdCk7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9ESVJFQ1RfUFJPQkUsICZpZm1nZC0+cmVxdWVzdCk7CiAKIAkvKiBEaXJlY3QgcHJvYmUgaXMgc2VudCB0byBicm9hZGNhc3QgYWRkcmVzcyBhcyBzb21lIEFQcwogCSAqIHdpbGwgbm90IGFuc3dlciB0byBkaXJlY3QgcGFja2V0IGluIHVuYXNzb2NpYXRlZCBzdGF0ZS4KIAkgKi8KIAlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsCi0JCQkJIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmF1dGhfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmF1dGhfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmbWdkLT5hdXRoX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAJCXJldHVybjsKIAl9CiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CiAKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMSwgTlVMTCwgMCwgMCk7CisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMSwgaWZtZ2QtPmF1dGhfYWxnLCBOVUxMLCAwLAorCQkJICAgIGlmbWdkLT5ic3NpZCwgMCk7CisJaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPSAyOwogCi0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOwogfQogCiAvKgpAQCAtODE4LDMyICs3NTEsMzMgQEAKICAqIGlmIHNlbGYgZGlzY29ubmVjdGVkIG9yIGEgcmVhc29uIGNvZGUgZnJvbSB0aGUgQVAuCiAgKi8KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLCBib29sIGRlYXV0aCwKLQkJCQkgICBib29sIHNlbGZfZGlzY29ubmVjdGVkLCB1MTYgcmVhc29uKQorCQkJCSAgIGJvb2wgZGVhdXRoLCBib29sIHNlbGZfZGlzY29ubmVjdGVkLAorCQkJCSAgIHUxNiByZWFzb24pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTMyIGNoYW5nZWQgPSAwLCBjb25maWdfY2hhbmdlZCA9IDA7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGRlYXV0aCkgewotCQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQkJaWZzdGEtPmF1dGhfdHJpZXMgPSAwOworCQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmF1dGhfdHJpZXMgPSAwOwogCX0KLQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJaWZtZ2QtPmFzc29jX3RyaWVzID0gMDsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIAotCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHNkYXRhLCBzdGEtPnN0YS5hZGRyKTsKKwlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEpOwogCiAJaWYgKHNlbGZfZGlzY29ubmVjdGVkKSB7CiAJCWlmIChkZWF1dGgpCkBAIC04NTQsMjMgKzc4OCwyOCBAQAogCQkJCUlFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVhc29uKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzZGF0YSk7CiAKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAwKTsKIAljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSBmYWxzZTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIAotCWlmIChzZWxmX2Rpc2Nvbm5lY3RlZCB8fCByZWFzb24gPT0gV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKQotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJaWYgKHNlbGZfZGlzY29ubmVjdGVkIHx8IHJlYXNvbiA9PSBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSBmYWxzZTsKKwkvKiBjaGFubmVsKF90eXBlKSBjaGFuZ2VzIGFyZSBoYW5kbGVkIGJ5IGllZWU4MDIxMV9od19jb25maWcgKi8KIAlsb2NhbC0+b3Blcl9jaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7Ci0JY29uZmlnX2NoYW5nZWQgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUOworCisJbG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA9IDA7CiAKIAlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKQEAgLTg4NSw3ICs4MjQsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwpAQCAtOTA2LDI3ICs4NDUsMjcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgaW50IGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGJzc19wcml2YWN5OwogCWludCB3ZXBfcHJpdmFjeTsKIAlpbnQgcHJpdmFjeV9pbnZva2VkOwogCi0JaWYgKCFpZnN0YSB8fCAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NSVhFRF9DRUxMKSkKKwlpZiAoIWlmbWdkIHx8IChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01JWEVEX0NFTEwpKQogCQlyZXR1cm4gMDsKIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQsCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKIAkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIDA7CiAKLQlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKTsKKwlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOwogCXdlcF9wcml2YWN5ID0gISFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKTsKLQlwcml2YWN5X2ludm9rZWQgPSAhIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCk7CisJcHJpdmFjeV9pbnZva2VkID0gISEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQpOwogCiAJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CiAKQEAgLTkzNiwzOCArODc1LDQyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpZnN0YS0+YXNzb2NfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWZtZ2QtPmFzc29jX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hc3NvY190cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoIEFQICVwTSIKIAkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhLCBpZnN0YSk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOworCQlpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzZGF0YSwgaWZtZ2QtPmJzc2lkLAorCQkJCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKKwkJCQlpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoIEFQICVwTVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEsIGlmc3RhKSkgeworCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtaXNtYXRjaCBpbiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gYW5kICIKIAkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gYWJvcnQgYXNzb2NpYXRpb25cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhLCBpZnN0YSk7CisJaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEpOwogCi0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCBkaXNhc3NvYzsKQEAgLTk3NywzOCArOTIwLDQwIEBACiAJICogZm9yIGJldHRlciBBUHMuICovCiAJLyogVE9ETzogcmVtb3ZlIGV4cGlyZWQgQlNTZXMgKi8KIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFNUQSBlbnRyeSBmb3Igb3duIEFQICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCQlkaXNhc3NvYyA9IDE7CiAJfSBlbHNlIHsKIAkJZGlzYXNzb2MgPSAwOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAogCQkJICAgICAgIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgewotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgeworCQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gUHJvYmVSZXNwIGZyb20gIgogCQkJCSAgICAgICAiY3VycmVudCBBUCAlcE0gLSBhc3N1bWUgb3V0IG9mICIKIAkJCQkgICAgICAgInJhbmdlXG4iLAotCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOworCQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwogCQkJCWRpc2Fzc29jID0gMTsKIAkJCX0gZWxzZQotCQkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZzdGEtPmJzc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKLQkJCWlmc3RhLT5mbGFncyBePSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkLAorCQkJCQkJCSBpZm1nZC0+c3NpZF9sZW4sCisJCQkJCQkJIE5VTEwsIDApOworCQkJaWZtZ2QtPmZsYWdzIF49IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKIAkJfSBlbHNlIHsKLQkJCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmxhc3RfcHJvYmUgKworCQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZm1nZC0+bGFzdF9wcm9iZSArCiAJCQkJICAgICAgIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCkpIHsKLQkJCQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7Ci0JCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOworCQkJCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKKwkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQkJCQkgaWZtZ2QtPnNzaWQsCisJCQkJCQkJIGlmbWdkLT5zc2lkX2xlbiwKKwkJCQkJCQkgTlVMTCwgMCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMDE2LDI1ICs5NjEsMjUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkaXNhc3NvYykKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1BSRVZfQVVUSF9OT1RfVkFMSUQpOwogCWVsc2UKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogewpAQCAtMTA0NSw1MCArOTkwLDM3IEBACiAJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpCiAJCXJldHVybjsKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMywgZWxlbXMuY2hhbGxlbmdlIC0gMiwKLQkJCSAgICBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwgMSk7CisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgc2RhdGEtPnUubWdkLmF1dGhfYWxnLAorCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAorCQkJICAgIHNkYXRhLT51Lm1nZC5ic3NpZCwgMSk7CisJc2RhdGEtPnUubWdkLmF1dGhfdHJhbnNhY3Rpb24gPSA0OwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUpCiAJCXJldHVybjsKIAogCWlmIChsZW4gPCAyNCArIDYpCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKIAlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwogCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJLyoKLQkJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCi0JCSAqIG5ldHdvcmtzIGFuZCBtb3N0IGltcGxlbWVudGF0aW9ucyBkbyBub3Qgc2VlbSB0byB1c2UgaXQuCi0JCSAqIEhvd2V2ZXIsIHRyeSB0byByZXBseSB0byBhdXRoZW50aWNhdGlvbiBhdHRlbXB0cyBpZiBzb21lb25lCi0JCSAqIGhhcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB0aGlzLgotCQkgKi8KLQkJaWYgKGF1dGhfYWxnICE9IFdMQU5fQVVUSF9PUEVOIHx8IGF1dGhfdHJhbnNhY3Rpb24gIT0gMSkKLQkJCXJldHVybjsKLQkJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgaWZzdGEsIDIsIE5VTEwsIDAsIDApOwotCX0KLQotCWlmIChhdXRoX2FsZyAhPSBpZnN0YS0+YXV0aF9hbGcgfHwKLQkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSBpZnN0YS0+YXV0aF90cmFuc2FjdGlvbikKKwlpZiAoYXV0aF9hbGcgIT0gaWZtZ2QtPmF1dGhfYWxnIHx8CisJICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24pCiAJCXJldHVybjsKIAogCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CkBAIC0xMDk3LDE1ICsxMDI5LDE1IEBACiAJCQljb25zdCBpbnQgbnVtX2FsZ3MgPSBBUlJBWV9TSVpFKGFsZ3MpOwogCQkJaW50IGksIHBvczsKIAkJCWFsZ3NbMF0gPSBhbGdzWzFdID0gYWxnc1syXSA9IDB4ZmY7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTikKIAkJCQlhbGdzWzBdID0gV0xBTl9BVVRIX09QRU47Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKIAkJCQlhbGdzWzFdID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKIAkJCQlhbGdzWzJdID0gV0xBTl9BVVRIX0xFQVA7Ci0JCQlpZiAoaWZzdGEtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQorCQkJaWYgKGlmbWdkLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTikKIAkJCQlwb3MgPSAwOwotCQkJZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKQorCQkJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKQogCQkJCXBvcyA9IDE7CiAJCQllbHNlCiAJCQkJcG9zID0gMjsKQEAgLTExMTMsMTA1ICsxMDQ1LDEwNSBAQAogCQkJCXBvcysrOwogCQkJCWlmIChwb3MgPj0gbnVtX2FsZ3MpCiAJCQkJCXBvcyA9IDA7Ci0JCQkJaWYgKGFsZ3NbcG9zXSA9PSBpZnN0YS0+YXV0aF9hbGcgfHwKKwkJCQlpZiAoYWxnc1twb3NdID09IGlmbWdkLT5hdXRoX2FsZyB8fAogCQkJCSAgICBhbGdzW3Bvc10gPT0gMHhmZikKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKGFsZ3NbcG9zXSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSAmJgogCQkJCSAgICAhaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzZGF0YSkpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmc3RhLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKKwkJCQlpZm1nZC0+YXV0aF9hbGcgPSBhbGdzW3Bvc107CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaCAoaWZzdGEtPmF1dGhfYWxnKSB7CisJc3dpdGNoIChpZm1nZC0+YXV0aF9hbGcpIHsKIAljYXNlIFdMQU5fQVVUSF9PUEVOOgogCWNhc2UgV0xBTl9BVVRIX0xFQVA6Ci0JCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgotCQlpZiAoaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSwgaWZzdGEpOworCQlpZiAoaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkKKwkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CiAJCWVsc2UKLQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzZGF0YSwgaWZzdGEsIG1nbXQsIGxlbik7CisJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc2RhdGEsIG1nbXQsIGxlbik7CiAJCWJyZWFrOwogCX0KIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiByZWFzb25fY29kZTsKIAogCWlmIChsZW4gPCAyNCArIDIpCiAJCXJldHVybjsKIAotCWlmIChtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKQogCQlyZXR1cm47CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0ZWQgKFJlYXNvbjogJXUpXG4iLAogCQkJCXNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbl9jb2RlKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAotCSAgICBpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAotCSAgICBpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAorCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAorCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgZmFsc2UsIDApOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIGZhbHNlLCAwKTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKIAkJcmV0dXJuOwogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCiAJCXJldHVybjsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlZCAoUmVhc29uOiAldSlcbiIsCiAJCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCQkgc2l6ZV90IGxlbiwKIAkJCQkJIGludCByZWFzc29jKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU2NCByYXRlcywgYmFzaWNfcmF0ZXM7CisJdTMyIHJhdGVzLCBiYXNpY19yYXRlczsKIAl1MTYgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwpAQCAtMTIyNCwxMyArMTE1NiwxMyBAQAogCS8qIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKIAkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uICovCiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CkBAIC0xMjQyLDEzICsxMTc0LDMxIEBACiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCiAJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOwogCisJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCisJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgeworCQl1MzIgdHUsIG1zOworCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOworCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgcmVqZWN0ZWQgYXNzb2NpYXRpb24gdGVtcG9yYXJpbHk7ICIKKwkJICAgICAgICJjb21lYmFjayBkdXJhdGlvbiAldSBUVSAoJXUgbXMpXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHUsIG1zKTsKKwkJaWYgKG1zID4gSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpCisJCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwKKwkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7CiAJCS8qIGlmIHRoaXMgd2FzIGEgcmVhc3NvY2lhdGlvbiwgZW5zdXJlIHdlIHRyeSBhICJmdWxsIgogCQkgKiBhc3NvY2lhdGlvbiBuZXh0IHRpbWUuIFRoaXMgd29ya3MgYXJvdW5kIHNvbWUgYnJva2VuIEFQcwogCQkgKiB3aGljaCBkbyBub3QgY29ycmVjdGx5IHJlamVjdCByZWFzc29jaWF0aW9uIHJlcXVlc3RzLiAqLwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI1Nyw5ICsxMjA3LDYgQEAKIAkJICAgICAgICJzZXRcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFpZCk7CiAJYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwogCi0JcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwotCiAJaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0xMjY3LDQwICsxMjE0LDI5IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZnN0YS0+YWlkID0gYWlkOwotCWlmc3RhLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87CisJaWZtZ2QtPmFpZCA9IGFpZDsKKwlpZm1nZC0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOwogCi0Ja2ZyZWUoaWZzdGEtPmFzc29jcmVzcF9pZXMpOwotCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuKTsKKwlrZnJlZShpZm1nZC0+YXNzb2NyZXNwX2llcyk7CisJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKKwlpZm1nZC0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpCisJCW1lbWNweShpZm1nZC0+YXNzb2NyZXNwX2llcywgcG9zLCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJLyogQWRkIFNUQSBlbnRyeSBmb3IgdGhlIEFQICovCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmc3RhLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBpZm1nZC0+YnNzaWQsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXN0YSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2MgU1RBIGVudHJ5IGZvciIKIAkJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAotCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmIChic3MpIHsKLQkJCXN0YS0+bGFzdF9zaWduYWwgPSBic3MtPnNpZ25hbDsKLQkJCXN0YS0+bGFzdF9xdWFsID0gYnNzLT5xdWFsOwotCQkJc3RhLT5sYXN0X25vaXNlID0gYnNzLT5ub2lzZTsKLQkJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQl9CiAKIAkJLyogdXBkYXRlIG5ldyBzdGEgd2l0aCBpdHMgbGFzdCByeCBhY3Rpdml0eSAqLwogCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwpAQCAtMTM2Nyw3ICsxMzAzLDggQEAKIAllbHNlCiAJCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSkKKwkvKiBJZiBUS0lQL1dFUCBpcyB1c2VkLCBubyBuZWVkIHRvIHBhcnNlIEFQJ3MgSFQgY2FwYWJpbGl0aWVzICovCisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHNiYW5kLAogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfY2FwKTsKIApAQCAtMTM3NSw2ICsxMzEyLDkgQEAKIAogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEKQorCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfTUZQKTsKKwogCWlmIChlbGVtcy53bW1fcGFyYW0pCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9XTUUpOwogCkBAIC0xMzkxLDExICsxMzMxLDEyIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZWxlbXMud21tX3BhcmFtKQotCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCiAJaWYgKGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCSAgICAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKQogCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X2luZm9fZWxlbSwKIAkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7CiAKQEAgLTE0MDMsMTM2ICsxMzQ0LDEyIEBACiAJICogaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KIAlic3NfY29uZi0+YWlkID0gYWlkOwogCWJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5ID0gY2FwYWJfaW5mbzsKLQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhLCBjaGFuZ2VkKTsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGNoYW5nZWQpOwogCi0JaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7CiB9CiAKIAotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgcmVzLCByYXRlcywgaSwgajsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKLQkJICAgICAgICJyZXNwb25zZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCS8qIFJlbW92ZSBwb3NzaWJsZSBTVEEgZW50cmllcyBmcm9tIG90aGVyIElCU1MgbmV0d29ya3MuICovCi0Jc3RhX2luZm9fZmx1c2hfZGVsYXllZChzZGF0YSk7Ci0KLQlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7Ci0JCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KLQkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7Ci0JfQotCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQlyZXMgPSBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQgPj0gMTAgPyBic3MtPmJlYWNvbl9pbnQgOiAxMDsKLQotCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gYnNzLT5jYXBhYmlsaXR5ICYKLQkJV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kgPyAxIDogMDsKLQotCXJlcyA9IGllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgYnNzLT5mcmVxKTsKLQotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQkvKiBCdWlsZCBJQlNTIHByb2JlIHJlc3BvbnNlICovCi0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKQotCQlza2JfcHV0KHNrYiwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKLQltZW1zZXQobWdtdCwgMCwgMjQgKyBzaXplb2YobWdtdC0+dS5iZWFjb24pKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkJSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOwotCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPQotCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5iZWFjb25faW50KTsKLQltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NChic3MtPnRpbWVzdGFtcCk7Ci0JbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGJzcy0+Y2FwYWJpbGl0eSk7Ci0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmc3RhLT5zc2lkX2xlbik7Ci0JKnBvcysrID0gV0xBTl9FSURfU1NJRDsKLQkqcG9zKysgPSBpZnN0YS0+c3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0KLQlyYXRlcyA9IGJzcy0+c3VwcF9yYXRlc19sZW47Ci0JaWYgKHJhdGVzID4gOCkKLQkJcmF0ZXMgPSA4OwotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcysrID0gcmF0ZXM7Ci0JbWVtY3B5KHBvcywgYnNzLT5zdXBwX3JhdGVzLCByYXRlcyk7Ci0KLQlpZiAoYnNzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyAxKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRFNfUEFSQU1TOwotCQkqcG9zKysgPSAxOwotCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKLQl9Ci0KLQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDIpOwotCSpwb3MrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOwotCSpwb3MrKyA9IDI7Ci0JLyogRklYOiBzZXQgQVRJTSB3aW5kb3cgYmFzZWQgb24gc2NhbiByZXN1bHRzICovCi0JKnBvcysrID0gMDsKLQkqcG9zKysgPSAwOwotCi0JaWYgKGJzcy0+c3VwcF9yYXRlc19sZW4gPiA4KSB7Ci0JCXJhdGVzID0gYnNzLT5zdXBwX3JhdGVzX2xlbiAtIDg7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgcmF0ZXMpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJKnBvcysrID0gcmF0ZXM7Ci0JCW1lbWNweShwb3MsICZic3MtPnN1cHBfcmF0ZXNbOF0sIHJhdGVzKTsKLQl9Ci0KLQlpZnN0YS0+cHJvYmVfcmVzcCA9IHNrYjsKLQotCWllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JFQUNPTik7Ci0KLQotCXJhdGVzID0gMDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQlpbnQgYml0cmF0ZSA9IChic3MtPnN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7Ci0JCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQotCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5iaXRyYXRlID09IGJpdHJhdGUpCi0JCQkJcmF0ZXMgfD0gQklUKGopOwotCX0KLQlpZnN0YS0+c3VwcF9yYXRlc19iaXRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdID0gcmF0ZXM7Ci0KLQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBic3MpOwotCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEOwotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCi0JaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgdHJ1ZSk7Ci0KLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLQotCXJldHVybiByZXM7Ci19Ci0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgIHNpemVfdCBsZW4sCkBAIC0xNTQzLDExICsxMzYwLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgZnJlcTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQl1NjQgYmVhY29uX3RpbWVzdGFtcCwgcnhfdGltZXN0YW1wOwotCXU2NCBzdXBwX3JhdGVzID0gMDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7CiAKIAlpZiAoZWxlbXMtPmRzX3BhcmFtcyAmJiBlbGVtcy0+ZHNfcGFyYW1zX2xlbiA9PSAxKQogCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLT5kc19wYXJhbXNbMF0pOwpAQCAtMTU1OSwxMTIgKzEzNzIsMTYgQEAKIAlpZiAoIWNoYW5uZWwgfHwgY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKIAkJcmV0dXJuOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBlbGVtcy0+c3VwcF9yYXRlcyAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKLQkJc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCBlbGVtcywgYmFuZCk7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpOwotCQlpZiAoc3RhKSB7Ci0JCQl1NjQgcHJldl9yYXRlczsKLQotCQkJcHJldl9yYXRlcyA9IHN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF07Ci0JCQkvKiBtYWtlIHN1cmUgbWFuZGF0b3J5IHJhdGVzIGFyZSBhbHdheXMgYWRkZWQgKi8KLQkJCXN0YS0+c3RhLnN1cHBfcmF0ZXNbYmFuZF0gPSBzdXBwX3JhdGVzIHwKLQkJCQlpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKGxvY2FsLCBiYW5kKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCQlpZiAoc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSAhPSBwcmV2X3JhdGVzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdXBkYXRlZCBzdXBwX3JhdGVzIHNldCAiCi0JCQkJICAgICJmb3IgJXBNIGJhc2VkIG9uIGJlYWNvbiBpbmZvICgweCVsbHggfCAiCi0JCQkJICAgICIweCVsbHggLT4gMHglbGx4KVxuIiwKLQkJCQkgICAgc2RhdGEtPmRldi0+bmFtZSwKLQkJCQkgICAgc3RhLT5zdGEuYWRkciwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJldl9yYXRlcywKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3VwcF9yYXRlcywKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSk7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0JCX0KLQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci0KIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKGxvY2FsLCByeF9zdGF0dXMsIG1nbXQsIGxlbiwgZWxlbXMsCi0JCQkJCWZyZXEsIGJlYWNvbik7CisJCQkJCWNoYW5uZWwsIGJlYWNvbik7CiAJaWYgKCFic3MpCiAJCXJldHVybjsKIAotCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLwotCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPnRpbWVzdGFtcDsKLQotCS8qCi0JICogSW4gU1RBIG1vZGUsIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycyBzaG91bGQgbm90IGJlIG92ZXJyaWRkZW4KLQkgKiBieSBiZWFjb25zIGJlY2F1c2UgdGhleSdyZSBub3QgbmVjZXNzYXJpbHkgYWNjdXJhdGUgdGhlcmUuCi0JICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBic3MtPmxhc3RfcHJvYmVfcmVzcCAmJiBiZWFjb24pIHsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmIGJlYWNvbiAmJgotCSAgICBic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUyAmJgotCSAgICBic3MtPmZyZXEgPT0gbG9jYWwtPm9wZXJfY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJiYKLQkgICAgZWxlbXMtPnNzaWRfbGVuID09IHNkYXRhLT51LnN0YS5zc2lkX2xlbiAmJgotCSAgICBtZW1jbXAoZWxlbXMtPnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkLAotCQkJCXNkYXRhLT51LnN0YS5zc2lkX2xlbikgPT0gMCkgewotCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7Ci0JCQkvKiBpbiBvcmRlciBmb3IgY29ycmVjdCBJQlNTIG1lcmdpbmcgd2UgbmVlZCBtYWN0aW1lCi0JCQkgKgotCQkJICogc2luY2UgbWFjdGltZSBpcyBkZWZpbmVkIGFzIHRoZSB0aW1lIHRoZSBmaXJzdCBkYXRhCi0JCQkgKiBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMgdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAKLQkJCSAqIG9mIHRoZSBiZWFjb24gaXMgZGVmaW5lZCBhcyAidGhlIHRpbWUgdGhhdCB0aGUgZGF0YQotCQkJICogc3ltYm9sIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGJpdCBvZiB0aGUgdGltZXN0YW1wIGlzCi0JCQkgKiB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZyBTVEHigJlzCi0JCQkgKiBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKLQkJCSAqIGludGVyZmFjZSB0byBpdHMgaW50ZXJmYWNlIHdpdGggdGhlIFdNIgotCQkJICogKDgwMi4xMSAxMS4xLjIpIC0gZXF1YWxzIHRoZSB0aW1lIHRoaXMgYml0IGFycml2ZXMgYXQKLQkJCSAqIHRoZSByZWNlaXZlciAtIHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlCi0JCQkgKiBvZmZzZXQgYmV0d2VlbiB0aGUgdHdvLgotCQkJICogZS5nOiBhdCAxIE1CaXQgdGhhdCBtZWFucyBtYWN0aW1lIGlzIDE5MiB1c2VjIGVhcmxpZXIKLQkJCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCi0JCQkgKi8KLQkJCWludCByYXRlOwotCQkJaWYgKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpIHsKLQkJCQlyYXRlID0gNjU7IC8qIFRPRE86IEhUIHJhdGVzICovCi0JCQl9IGVsc2UgewotCQkJCXJhdGUgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdLT4KLQkJCQkJYml0cmF0ZXNbcnhfc3RhdHVzLT5yYXRlX2lkeF0uYml0cmF0ZTsKLQkJCX0KLQkJCXJ4X3RpbWVzdGFtcCA9IHJ4X3N0YXR1cy0+bWFjdGltZSArICgyNCAqIDggKiAxMCAvIHJhdGUpOwotCQl9IGVsc2UgaWYgKGxvY2FsICYmIGxvY2FsLT5vcHMgJiYgbG9jYWwtPm9wcy0+Z2V0X3RzZikKLQkJCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCi0JCQlyeF90aW1lc3RhbXAgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7Ci0JCWVsc2UKLQkJCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCi0JCQlyeF90aW1lc3RhbXAgPSAtMUxMVTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVwTSBCU1NJRD0iCi0JCSAgICAgICAiJXBNIFRTRj0weCVsbHggQkNOPTB4JWxseCBkaWZmPSVsbGQgQCVsdVxuIiwKLQkJICAgICAgIG1nbXQtPnNhLCBtZ210LT5ic3NpZCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfdGltZXN0YW1wLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZWFjb25fdGltZXN0YW1wLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykocnhfdGltZXN0YW1wIC0gYmVhY29uX3RpbWVzdGFtcCksCi0JCSAgICAgICBqaWZmaWVzKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCQlpZiAoYmVhY29uX3RpbWVzdGFtcCA+IHJ4X3RpbWVzdGFtcCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJlYWNvbiBUU0YgaGlnaGVyIHRoYW4gIgotCQkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPmJzc2lkKTsKLSNlbmRpZgotCQkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsICZzZGF0YS0+dS5zdGEsIGJzcyk7Ci0JCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOwotCQl9CisJaWYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbSAmJiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtX2xlbiA9PSAzKSAmJgorCSAgICAobWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKnN3X2VsZW0gPQorCQkJKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqKWVsZW1zLT5jaF9zd2l0Y2hfZWxlbTsKKwkJaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzZGF0YSwgc3dfZWxlbSwgYnNzKTsKIAl9CiAKIAlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKQEAgLTE2NzgsNyArMTM5NSw2IEBACiB7CiAJc2l6ZV90IGJhc2VsZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAogCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCiAJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KQEAgLTE2OTQsMjUgKzE0MTAsMjQgQEAKIAogCS8qIGRpcmVjdCBwcm9iZSBtYXkgYmUgcGFydCBvZiB0aGUgYXNzb2NpYXRpb24gZmxvdyAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLAotCQkJCQkJCSZpZnN0YS0+cmVxdWVzdCkpIHsKKwkgICAgJnNkYXRhLT51Lm1nZC5yZXF1ZXN0KSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgZGlyZWN0IHByb2JlIHJlc3BvbmRlZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwogCX0KIH0KIAotCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzaXplX3QgYmFzZWxlbjsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAl1MzIgY2hhbmdlZCA9IDA7Ci0JYm9vbCBlcnBfdmFsaWQ7CisJYm9vbCBlcnBfdmFsaWQsIGRpcmVjdGVkX3RpbTsKIAl1OCBlcnBfdmFsdWUgPSAwOwogCiAJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KQEAgLTE3MjYsMTUgKzE0NDEsNDMgQEAKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKKwkgICAgbWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJaWYgKHJ4X3N0YXR1cy0+ZnJlcSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCSBlbGVtcy53bW1fcGFyYW1fbGVuKTsKIAorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spIHsKKwkJZGlyZWN0ZWRfdGltID0gaWVlZTgwMjExX2NoZWNrX3RpbSgmZWxlbXMsIGlmbWdkLT5haWQpOworCisJCWlmIChkaXJlY3RlZF90aW0pIHsKKwkJCWlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCQkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCQkgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCQkJfSBlbHNlIHsKKwkJCQlsb2NhbC0+cHNwb2xsaW5nID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICogSGVyZSBpcyBhc3N1bWVkIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlCisJCQkJICogYWJsZSB0byBzZW5kIHBzLXBvbGwgZnJhbWUgYW5kIHJlY2VpdmUgYQorCQkJCSAqIHJlc3BvbnNlIGV2ZW4gdGhvdWdoIHBvd2VyIHNhdmUgbW9kZSBpcworCQkJCSAqIGVuYWJsZWQsIGJ1dCBzb21lIGRyaXZlcnMgbWlnaHQgcmVxdWlyZQorCQkJCSAqIHRvIGRpc2FibGUgcG93ZXIgc2F2ZSBoZXJlLiBUaGlzIG5lZWRzCisJCQkJICogdG8gYmUgaW52ZXN0aWdhdGVkLgorCQkJCSAqLworCQkJCWllZWU4MDIxMV9zZW5kX3BzcG9sbChsb2NhbCwgc2RhdGEpOworCQkJfQorCQl9CisJfQogCiAJaWYgKGVsZW1zLmVycF9pbmZvICYmIGVsZW1zLmVycF9pbmZvX2xlbiA+PSAxKSB7CiAJCWVycF92YWxpZCA9IHRydWU7CkBAIC0xNzQ3LDE0ICsxNDkwLDE1IEBACiAJCQllcnBfdmFsaWQsIGVycF92YWx1ZSk7CiAKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtKSB7CisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAkJdTE2IGFwX2h0X2NhcF9mbGFnczsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJCWlmICghc3RhKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKQEAgLTE3NzgsOTIgKzE1MjIsMjggQEAKIAkJICogZm9yIHRoZSBCU1NJRCB3ZSBhcmUgYXNzb2NpYXRlZCB0byAqLwogCQlyZWd1bGF0b3J5X2hpbnRfMTFkKGxvY2FsLT5ody53aXBoeSwKIAkJCWVsZW1zLmNvdW50cnlfZWxlbSwgZWxlbXMuY291bnRyeV9lbGVtX2xlbik7CisKKwkJLyogVE9ETzogSUJTUyBhbHNvIG5lZWRzIHRoaXMgKi8KKwkJaWYgKGVsZW1zLnB3cl9jb25zdHJfZWxlbSkKKwkJCWllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzZGF0YSwKKwkJCQlsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuY2FwYWJfaW5mbyksCisJCQkJZWxlbXMucHdyX2NvbnN0cl9lbGVtLAorCQkJCWVsZW1zLnB3cl9jb25zdHJfZWxlbV9sZW4pOwogCX0KIAogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQlzaXplX3QgbGVuLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoraWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCB0eF9sYXN0X2JlYWNvbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKLQl1OCAqcG9zLCAqZW5kOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZzdGEtPnByb2JlX3Jlc3ApCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKLQkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOwotCWVsc2UKLQkJdHhfbGFzdF9iZWFjb24gPSAxOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgotCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKLQkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JaWYgKCF0eF9sYXN0X2JlYWNvbikKLQkJcmV0dXJuOwotCi0JaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuOwotCi0JZW5kID0gKCh1OCAqKSBtZ210KSArIGxlbjsKLQlwb3MgPSBtZ210LT51LnByb2JlX3JlcS52YXJpYWJsZTsKLQlpZiAocG9zWzBdICE9IFdMQU5fRUlEX1NTSUQgfHwKLQkgICAgcG9zICsgMiArIHBvc1sxXSA+IGVuZCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKLQkJICAgICAgICJmcm9tICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCWlmIChwb3NbMV0gIT0gMCAmJgotCSAgICAocG9zWzFdICE9IGlmc3RhLT5zc2lkX2xlbiB8fAotCSAgICAgbWVtY21wKHBvcyArIDIsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pICE9IDApKSB7Ci0JCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLwotCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXNwLT5kYSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJZ290byBmYWlsOwotCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CkBAIC0xODc4LDExMyArMTU1OCw2OCBAQAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCXNrYl9xdWV1ZV90YWlsKCZpZnN0YS0+c2tiX3F1ZXVlLCBza2IpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JCXJldHVybjsKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKLSBmYWlsOgotCWtmcmVlX3NrYihza2IpOworCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KIAlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCSAgICByeF9zdGF0dXMpOwotCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIDApOworCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLCAxKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQlpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJYnJlYWs7CiAJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBhY3RpdmUgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCi0JCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAotCQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCQlhY3RpdmUrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gYWN0aXZlOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKLQlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gYWN0aXZlIElCU1MgU1RBcyAtIHRyeWluZyB0byBzY2FuIGZvciBvdGhlciAiCi0JICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCiAJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgewpAQCAtMTk5MiwyOTggKzE2MjcsMTA5IEBACiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwogCX0KIAotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsgLyogYWxsb3cgYW55IFdNTSB1cGRhdGUgKi8KKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCiAKIAotCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7CiAJZWxzZQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IC0xOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwotCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZnN0YS0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQlpZnN0YS0+YXV0aF90cmllcyA9IDA7Ci0JaWZzdGEtPmFzc29jX3RyaWVzID0gMDsKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47CisJaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7CisJaWZtZ2QtPmF1dGhfdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY190cmllcyA9IDA7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLT5kZXYpOwogfQogCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9tYXRjaF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICAgY29uc3QgY2hhciAqc3NpZCwgaW50IHNzaWRfbGVuKQorc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWludCB0bXAsIGhpZGRlbl9zc2lkOwotCi0JaWYgKHNzaWRfbGVuID09IGlmc3RhLT5zc2lkX2xlbiAmJgotCSAgICAhbWVtY21wKGlmc3RhLT5zc2lkLCBzc2lkLCBzc2lkX2xlbikpCi0JCXJldHVybiAxOwotCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpCi0JCXJldHVybiAwOwotCi0JaGlkZGVuX3NzaWQgPSAxOwotCXRtcCA9IHNzaWRfbGVuOwotCXdoaWxlICh0bXAtLSkgewotCQlpZiAoc3NpZFt0bXBdICE9ICdcMCcpIHsKLQkJCWhpZGRlbl9zc2lkID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGhpZGRlbl9zc2lkICYmIChpZnN0YS0+c3NpZF9sZW4gPT0gc3NpZF9sZW4gfHwgc3NpZF9sZW4gPT0gMCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNzaWRfbGVuID09IDEgJiYgc3NpZFswXSA9PSAnICcpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXU4IGJzc2lkW0VUSF9BTEVOXSwgKnBvczsKLQlpbnQgaTsKLQlpbnQgcmV0OworCXU4ICpic3NpZCA9IGlmbWdkLT5ic3NpZCwgKnNzaWQgPSBpZm1nZC0+c3NpZDsKKwl1OCBzc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKKwl1MTYgY2FwYV9tYXNrID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwl1MTYgY2FwYV92YWwgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7CiAKLSNpZiAwCi0JLyogRWFzaWVyIHRlc3RpbmcsIHVzZSBmaXhlZCBCU1NJRC4gKi8KLQltZW1zZXQoYnNzaWQsIDB4ZmUsIEVUSF9BTEVOKTsKLSNlbHNlCi0JLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCi0JICogb3duIE1BQyBhZGRyZXNzIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBwcm9wZXIKLQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwotCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07Ci0JYnNzaWRbMF0gJj0gfjB4MDE7Ci0JYnNzaWRbMF0gfD0gMHgwMjsKLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKLQotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfYWRkKGxvY2FsLCBic3NpZCwKLQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBzZGF0YS0+dS5zdGEuc3NpZCwgc2RhdGEtPnUuc3RhLnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlic3MtPmJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tic3MtPmJhbmRdOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPT0gMCkKLQkJbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlic3MtPmJlYWNvbl9pbnQgPSBsb2NhbC0+aHcuY29uZi5iZWFjb25faW50OwotCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwotCWJzcy0+Y2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwotCi0JaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKLQkJYnNzLT5jYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCWVsc2UKLQkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOwotCi0JYnNzLT5zdXBwX3JhdGVzX2xlbiA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXBvcyA9IGJzcy0+c3VwcF9yYXRlczsKLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOwotCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJaWYgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAorCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAorCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpIHsKKwkJY2FwYV9tYXNrIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQorCQkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAJfQogCi0JcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGlmc3RhLCBic3MpOwotCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCXJldHVybiByZXQ7Ci19CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKKwkJY2hhbiA9IE5VTEw7CiAKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkKKwkJYnNzaWQgPSBOVUxMOwogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCWludCBmb3VuZCA9IDA7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCWludCBhY3RpdmVfaWJzczsKLQotCWlmIChpZnN0YS0+c3NpZF9sZW4gPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoaWZzdGEtPnNzaWRfbGVuICE9IGJzcy0+c3NpZF9sZW4gfHwKLQkJICAgIG1lbWNtcChpZnN0YS0+c3NpZCwgYnNzLT5zc2lkLCBic3MtPnNzaWRfbGVuKSAhPSAwCi0JCSAgICB8fCAhKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKLQkJCWNvbnRpbnVlOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIgICBic3NpZD0lcE0gZm91bmRcbiIsIGJzcy0+YnNzaWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JCW1lbWNweShic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCQlmb3VuZCA9IDE7Ci0JCWlmIChhY3RpdmVfaWJzcyB8fCBtZW1jbXAoYnNzaWQsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCi0JCQlicmVhazsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSB7CisJCXNzaWQgPSBOVUxMOworCQlzc2lkX2xlbiA9IDA7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlpZiAoZm91bmQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcE0gY3VycmVudCAiCi0JCSAgICAgICAiJXBNXG4iLCBic3NpZCwgaWZzdGEtPmJzc2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIGNoYW4sCisJCQkJICAgICAgIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkgICAgICAgY2FwYV9tYXNrLCBjYXBhX3ZhbCk7CiAKLQlpZiAoZm91bmQgJiYgbWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCWludCByZXQ7Ci0JCWludCBzZWFyY2hfZnJlcTsKLQotCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKQotCQkJc2VhcmNoX2ZyZXEgPSBic3MtPmZyZXE7CisJaWYgKGJzcykgeworCQlpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGJzcy0+Y2Jzcy5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQpKQorCQkJaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgYnNzLT5zc2lkLAorCQkJCQkgICAgICAgYnNzLT5zc2lkX2xlbik7CisJCWllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHNkYXRhLCBic3MtPmNic3MuYnNzaWQpOworCQlpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHNkYXRhLCBic3MtPnN1cHBfcmF0ZXNfbGVuLAorCQkJCQkJICAgIGJzcy0+c3VwcF9yYXRlcyk7CisJCWlmIChzZGF0YS0+dS5tZ2QubWZwID09IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQpCisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKIAkJZWxzZQotCQkJc2VhcmNoX2ZyZXEgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKLQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgYnNzaWQsIHNlYXJjaF9mcmVxLAotCQkJCQkgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkJaWYgKCFic3MpCi0JCQlnb3RvIGRvbnRfam9pbjsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgotCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7Ci0JCXJldCA9IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBpZnN0YSwgYnNzKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi1kb250X2pvaW46Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JLyogU2VsZWN0ZWQgSUJTUyBub3QgZm91bmQgaW4gY3VycmVudCBzY2FuIHJlc3VsdHMgLSB0cnkgdG8gc2NhbiAqLwotCWlmIChpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEICYmCi0JICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkgewotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOwotCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCArCi0JCQkgICAgICBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCBpZnN0YS0+c3NpZCwKLQkJCQkJICAgICAgaWZzdGEtPnNzaWRfbGVuKTsKLQl9IGVsc2UgaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQpIHsKLQkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZzdGEtPmlic3Nfam9pbl9yZXEgKwotCQkJICAgICAgIElFRUU4MDIxMV9JQlNTX0pPSU5fVElNRU9VVCkpIHsKLQkJCWlmICgoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUykgJiYKLQkJCSAgICAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFncyAmCi0JCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1MpKSkKLQkJCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzZGF0YSwgaWZzdGEpOwotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCi0JCQkJICAgICAgICIgJWQgTUh6XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAotCQkJCSAgICAgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JCQl9Ci0KLQkJCS8qIE5vIElCU1MgZm91bmQgLSBkZWNyZWFzZSBzY2FuIGludGVydmFsIGFuZCBjb250aW51ZQotCQkJICogc2Nhbm5pbmcuICovCi0JCQlpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMX1NMT1c7Ci0JCX0KLQotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywgKnNlbGVjdGVkID0gTlVMTDsKLQlpbnQgdG9wX3Jzc2kgPSAwLCBmcmVxOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWZyZXEgPSBsb2NhbC0+b3Blcl9jaGFubmVsLT5jZW50ZXJfZnJlcTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmxvY2FsLT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoaWZzdGEtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCB8Ci0JCQlJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMIHwKLQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpICYmCi0JCSAgICAoISEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIF4KLQkJICAgICAhIXNkYXRhLT5kZWZhdWx0X2tleSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpICYmCi0JCSAgICBic3MtPmZyZXEgIT0gZnJlcSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwpICYmCi0JCSAgICBtZW1jbXAoYnNzLT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpICYmCi0JCSAgICAhaWVlZTgwMjExX3N0YV9tYXRjaF9zc2lkKGlmc3RhLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFzZWxlY3RlZCB8fCB0b3BfcnNzaSA8IGJzcy0+c2lnbmFsKSB7Ci0JCQlzZWxlY3RlZCA9IGJzczsKLQkJCXRvcF9yc3NpID0gYnNzLT5zaWduYWw7Ci0JCX0KLQl9Ci0JaWYgKHNlbGVjdGVkKQotCQlhdG9taWNfaW5jKCZzZWxlY3RlZC0+dXNlcnMpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCi0JaWYgKHNlbGVjdGVkKSB7Ci0JCWllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgc2VsZWN0ZWQtPmZyZXEpOwotCQlpZiAoIShpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKLQkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIHNlbGVjdGVkLT5zc2lkLAotCQkJCQkgICAgICAgc2VsZWN0ZWQtPnNzaWRfbGVuKTsKLQkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsIHNlbGVjdGVkLT5ic3NpZCk7Ci0JCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIHNlbGVjdGVkKTsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKIAogCQkvKiBTZW5kIG91dCBkaXJlY3QgcHJvYmUgaWYgbm8gcHJvYmUgcmVzcCB3YXMgcmVjZWl2ZWQgb3IKIAkJICogdGhlIG9uZSB3ZSBoYXZlIGlzIG91dGRhdGVkCiAJCSAqLwotCQlpZiAoIXNlbGVjdGVkLT5sYXN0X3Byb2JlX3Jlc3AgfHwKLQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgc2VsZWN0ZWQtPmxhc3RfcHJvYmVfcmVzcAorCQlpZiAoIWJzcy0+bGFzdF9wcm9iZV9yZXNwIHx8CisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9wcm9iZV9yZXNwCiAJCQkJCSsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkpCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKIAkJZWxzZQotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CiAKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIHNlbGVjdGVkKTsKLQkJaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlpZiAoaWZzdGEtPmFzc29jX3NjYW5fdHJpZXMgPCBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTKSB7Ci0JCQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcysrOwotCQkJaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkKLQkJCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgTlVMTCwgMCk7CisJCWlmIChpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA8IElFRUU4MDIxMV9BU1NPQ19TQ0FOU19NQVhfVFJJRVMpIHsKKwkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzKys7CisJCQkvKiBYWFggbWF5YmUgcmFjeT8gKi8KKwkJCWlmIChsb2NhbC0+c2Nhbl9yZXEpCisJCQkJcmV0dXJuIC0xOworCQkJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkJCSAgICAgICBpZm1nZC0+c3NpZCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJCQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKQorCQkJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSAwOwogCQkJZWxzZQotCQkJCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBpZnN0YS0+c3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWRfbGVuKTsKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7Ci0JCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZnN0YS0+cmVxdWVzdCk7Ci0JCX0gZWxzZQotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQkJCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZF9sZW4gPSBpZm1nZC0+c3NpZF9sZW47CisKKwkJCWlmIChpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgJmxvY2FsLT5pbnRfc2Nhbl9yZXEpKQorCQkJCWllZWU4MDIxMV9zY2FuX2ZhaWxlZChsb2NhbCk7CisKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CisJCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCX0KIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtMjI5Miw5ICsxNzM4LDkgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5zdGEud29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC53b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQpAQCAtMjMwMyw2MSArMTc0OSw2MCBAQAogCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQogCQlyZXR1cm47CiAKLQlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybjsKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZzdGEtPnNrYl9xdWV1ZSkpKQorCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmbWdkLT5za2JfcXVldWUpKSkKIAkJaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfbWdtdChzZGF0YSwgc2tiKTsKIAotCWlmIChpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSAmJgotCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KSkgewotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgaWZzdGEtPnNjYW5fc3NpZCwKLQkJCQkgICAgIGlmc3RhLT5zY2FuX3NzaWRfbGVuKTsKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUgJiYKKwkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKKwkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgJiYKKwkgICAgdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1NDQU4sICZpZm1nZC0+cmVxdWVzdCkpIHsKKwkJLyoKKwkJICogVGhlIGNhbGwgdG8gaWVlZTgwMjExX3N0YXJ0X3NjYW4gY2FuIGZhaWwgYnV0IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4KKwkJICogKHdoaWNoIHF1ZXVlZCBpZWVlODAyMTFfc3RhX3dvcmspIGRpZCBub3QgcmV0dXJuIGFuIGVycm9yLiBUaHVzLCBjYWxsCisJCSAqIGllZWU4MDIxMV9zY2FuX2ZhaWxlZCBoZXJlIGlmIGllZWU4MDIxMV9zdGFydF9zY2FuIGZhaWxzIGluIG9yZGVyIHRvCisJCSAqIG5vdGlmeSB0aGUgc2NhbiByZXF1ZXN0ZXIuCisJCSAqLworCQlpZiAoaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGxvY2FsLT5zY2FuX3JlcSkpCisJCQlpZWVlODAyMTFfc2Nhbl9mYWlsZWQobG9jYWwpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZzdGEtPnJlcXVlc3QpKSB7Ci0JCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHNkYXRhLCBpZnN0YSkpCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9BVVRILCAmaWZtZ2QtPnJlcXVlc3QpKSB7CisJCWlmIChpZWVlODAyMTFfc3RhX2NvbmZpZ19hdXRoKHNkYXRhKSkKIAkJCXJldHVybjsKLQkJY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQl9IGVsc2UgaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpKQorCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCkpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoaWZzdGEtPnN0YXRlKSB7CisJc3dpdGNoIChpZm1nZC0+c3RhdGUpIHsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDoKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOgotCQlpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU6Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURToKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRDoKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19TRUFSQ0g6Ci0JCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEOgotCQlpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAl9CiAKLQlpZiAoaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc2RhdGEsIGlmc3RhKSkgeworCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggYW5kICIKIAkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gZGlzYXNzb2NpYXRlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKIAotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlLCB0cnVlLAogCQkJCQlXTEFOX1JFQVNPTl9VTlNQRUNJRklFRCk7CiAJfQogfQpAQCAtMjM2NiwyMDggKzE4MTEsMTUzIEBACiB7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAotCQkJICAgJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJCSAgICZzZGF0YS0+dS5tZ2Qud29yayk7CiB9CiAKIC8qIGludGVyZmFjZSBzZXR1cCAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCUlOSVRfV09SSygmaWZzdGEtPndvcmssIGllZWU4MDIxMV9zdGFfd29yayk7Ci0Jc2V0dXBfdGltZXIoJmlmc3RhLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJSU5JVF9XT1JLKCZpZm1nZC0+d29yaywgaWVlZTgwMjExX3N0YV93b3JrKTsKKwlJTklUX1dPUksoJmlmbWdkLT5jaHN3aXRjaF93b3JrLCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZzdGEtPnNrYl9xdWV1ZSk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpZm1nZC0+c2tiX3F1ZXVlKTsKIAotCWlmc3RhLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7Ci0JaWZzdGEtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKKwlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCWlmbWdkLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8CiAJCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUyB8CiAJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJaWYgKGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJnNkYXRhLT5sb2NhbC0+aHcpID49IDQpCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOwotfQotCi0vKgotICogQWRkIGEgbmV3IElCU1Mgc3RhdGlvbiwgd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuLAotICogaW4gSUJTUyBtb2RlLCByZWNlaXZpbmcgYSBmcmFtZSBmcm9tIGEgeWV0LXVua25vd24gc3RhdGlvbiwgaGVuY2UKLSAqIG11c3QgYmUgY2FsbGFibGUgaW4gYXRvbWljIGNvbnRleHQuCi0gKi8KLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLHU4ICphZGRyLCB1NjQgc3VwcF9yYXRlcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0KLQkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKLQkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLwotCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyByb29tIGZvciBhIG5ldyBJQlNTIFNUQSAiCi0JCQkgICAgICAgImVudHJ5ICVwTVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWRkcik7Ci0JCX0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0KLQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCi0Jc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOwotCi0JLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0Jc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAotCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLQlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7Ci0KLQlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHN0YTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQ7CiB9CiAKIC8qIGNvbmZpZ3VyYXRpb24gaG9va3MgKi8KLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47CiAKLQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8CisJaWYgKChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgfAogCQkJICAgICBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSkgJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKKwkgICAgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKIAkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSkpIHsKIAotCQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQotCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCisJCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAogCQkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwogCi0JCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAl9CiB9CiAKLWludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoraW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KLQlpZiAoaWZzdGEtPnNzaWRfbGVuICE9IGxlbiB8fCBtZW1jbXAoaWZzdGEtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgewotCQltZW1zZXQoaWZzdGEtPnNzaWQsIDAsIHNpemVvZihpZnN0YS0+c3NpZCkpOwotCQltZW1jcHkoaWZzdGEtPnNzaWQsIHNzaWQsIGxlbik7Ci0JCWlmc3RhLT5zc2lkX2xlbiA9IGxlbjsKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCX0KLQotCWlmIChsZW4pCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCWlmIChpZm1nZC0+c3NpZF9sZW4pCisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOwogCWVsc2UKLQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICAhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUKSkgewotCQlpZnN0YS0+aWJzc19qb2luX3JlcSA9IGppZmZpZXM7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDsKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQorCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CiAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmIChpZm1nZC0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7CisJCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7CisJCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Cit9CisKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCW1lbWNweShzc2lkLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkqbGVuID0gaWZzdGEtPnNzaWRfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCW1lbWNweShzc2lkLCBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZtZ2QtPnNzaWRfbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0JaW50IHJlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKKwkJbWVtY3B5KGlmbWdkLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCX0gZWxzZSB7CisJCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKwl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JCXJlcyA9IDA7Ci0JCS8qCi0JCSAqIEhhY2shIFNlZSBhbHNvIGllZWU4MDIxMV9zdGFfc2V0X3NzaWQuCi0JCSAqLwotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKLQkJaWYgKHJlcykgeworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCWlmIChpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZyBuZXcgQlNTSUQgdG8gIgogCQkJICAgICAgICJ0aGUgbG93LWxldmVsIGRyaXZlclxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gcmVzOwogCQl9CiAJfQogCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7Ci0JZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGllZWU4MDIxMV9zdGFfY29tbWl0KHNkYXRhKTsKIH0KIAogaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICppZSwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Ja2ZyZWUoaWZzdGEtPmV4dHJhX2llKTsKKwlrZnJlZShpZm1nZC0+ZXh0cmFfaWUpOwogCWlmIChsZW4gPT0gMCkgewotCQlpZnN0YS0+ZXh0cmFfaWUgPSBOVUxMOwotCQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gMDsKKwkJaWZtZ2QtPmV4dHJhX2llID0gTlVMTDsKKwkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlpZnN0YS0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZnN0YS0+ZXh0cmFfaWUpIHsKLQkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJaWZtZ2QtPmV4dHJhX2llID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghaWZtZ2QtPmV4dHJhX2llKSB7CisJCWlmbWdkLT5leHRyYV9pZV9sZW4gPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KGlmc3RhLT5leHRyYV9pZSwgaWUsIGxlbik7Ci0JaWZzdGEtPmV4dHJhX2llX2xlbiA9IGxlbjsKKwltZW1jcHkoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKTsKKwlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCB0cnVlLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7CkBAIC0yNTc1LDEwICsxOTY1LDEwIEBACiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCi0JCXJldHVybiAtMTsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gLUVOT0xJTks7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1ODYsMTUgKzE5NzYsNiBAQAogdm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0KLQlpZiAoc2RhdGEgJiYgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpIHx8Ci0JCSAgICAoIShpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSkKLQkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQogCiAJLyogUmVzdGFydCBTVEEgdGltZXJzICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMjYyMywxMiArMjAwNCwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsCiAJCQkgICAgIGR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCi0JbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAorCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiB9CiAKQEAgLTI2MzgsMyArMjAyMiwzNiBAQAogCiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKKwlfX2xlMTYgZmM7CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwb3dlcnNhdmUpCisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BtLmMgYi9uZXQvbWFjODAyMTEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDUyNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3BtLmMKQEAgLTAsMCArMSwxMTcgQEAKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgImxlZC5oIgorCitpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworCisJLyogZGlzYWJsZSBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKKworCS8qIHJlbW92ZSBTVEFzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKworCQlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKKworCQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShodywgJnNkYXRhLT52aWYsCisJCQkJU1RBX05PVElGWV9SRU1PVkUsICZzdGEtPnN0YSk7CisJCX0KKwl9CisKKwkvKiByZW1vdmUgYWxsIGludGVyZmFjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmCisJCSAgICBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOworCQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOworCQkJY29uZi5tYWNfYWRkciA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOworCQkJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZShodywgJmNvbmYpOworCQl9CisJfQorCisJLyogZmx1c2ggYWdhaW4sIGluIGNhc2UgZHJpdmVyIHF1ZXVlZCB3b3JrICovCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworCisJLyogc3RvcCBoYXJkd2FyZSAqLworCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgeworCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBmYWxzZSk7CisJCWxvY2FsLT5vcHMtPnN0b3AoaHcpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IF9faWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCByZXM7CisKKwkvKiByZXN0YXJ0IGhhcmR3YXJlICovCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7CisJCXJlcyA9IGxvY2FsLT5vcHMtPnN0YXJ0KGh3KTsKKworCQlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwl9CisKKwkvKiBhZGQgaW50ZXJmYWNlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IgJiYKKwkJICAgIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CisJCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CisJCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CisJCQlyZXMgPSBsb2NhbC0+b3BzLT5hZGRfaW50ZXJmYWNlKGh3LCAmY29uZik7CisJCX0KKwl9CisKKwkvKiBhZGQgU1RBcyBiYWNrICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKworCQlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKKworCQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShodywgJnNkYXRhLT52aWYsCisJCQkJU1RBX05PVElGWV9BREQsICZzdGEtPnN0YSk7CisJCX0KKwl9CisKKwkvKiBhZGQgYmFjayBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CisKKwkvKiBzZXR1cCBSVFMgdGhyZXNob2xkICovCisJaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQorCQlsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZChodywgbG9jYWwtPnJ0c190aHJlc2hvbGQpOworCisJLyogcmVjb25maWd1cmUgaGFyZHdhcmUgKi8KKwlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCB+MCk7CisKKwluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmggYi9uZXQvbWFjODAyMTEvcmF0ZS5oCmluZGV4IDkyOGRhNjIuLmI5MTY0YzkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmgKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuaApAQCAtNjIsNiArNjIsMTggQEAKIAlyZWYtPm9wcy0+cmF0ZV9pbml0KHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9yYXRlX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCisJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmID0gbG9jYWwtPnJhdGVfY3RybDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqaXN0YSA9ICZzdGEtPnN0YTsKKwl2b2lkICpwcml2X3N0YSA9IHN0YS0+cmF0ZV9jdHJsX3ByaXY7CisKKwlpZiAocmVmLT5vcHMtPnJhdGVfdXBkYXRlKQorCQlyZWYtPm9wcy0+cmF0ZV91cGRhdGUocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwKKwkJCQkgICAgICBwcml2X3N0YSwgY2hhbmdlZCk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcmF0ZV9jb250cm9sX2FsbG9jX3N0YShzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmVmLAogCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA3MTc1YWU4Li42NmY3ZWNmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtODYsOCArODYsNyBAQAogCiAJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfVFNGVCkKIAkJbGVuICs9IDg7Ci0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREIgfHwKLQkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQogCQlsZW4gKz0gMTsKIAlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSkKIAkJbGVuICs9IDE7CkBAIC0xMDIsNyArMTAxLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0vKioKKy8qCiAgKiBpZWVlODAyMTFfYWRkX3J4X3JhZGlvdGFwX2hlYWRlciAtIGFkZCByYWRpb3RhcCBoZWFkZXIKICAqCiAgKiBhZGQgYSByYWRpb3RhcCBoZWFkZXIgY29udGFpbmluZyBhbGwgdGhlIGZpZWxkcyB3aGljaCB0aGUgaGFyZHdhcmUgcHJvdmlkZWQuCkBAIC0xNTgsNyArMTU3LDcgQEAKIAkJICovCiAJCSpwb3MgPSAwOwogCX0gZWxzZSB7Ci0JCXJ0aGRyLT5pdF9wcmVzZW50IHw9ICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKTsKKwkJcnRoZHItPml0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSk7CiAJCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKIAl9CiAJcG9zKys7CkBAIC0xOTksMTQgKzE5OCw2IEBACiAJKnBvcyA9IHN0YXR1cy0+YW50ZW5uYTsKIAlwb3MrKzsKIAotCS8qIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgKi8KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikgewotCQkqcG9zID0gc3RhdHVzLT5zaWduYWw7Ci0JCXJ0aGRyLT5pdF9wcmVzZW50IHw9Ci0JCQljcHVfdG9fbGUzMigxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwpOwotCQlwb3MrKzsKLQl9Ci0KIAkvKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgaXMgbm90IHVzZWQgKi8KIAogCS8qIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyAqLwpAQCAtMzcxLDM5ICszNjIsNTAgQEAKIAlyeC0+c2tiLT5wcmlvcml0eSA9ICh0aWQgPiA3KSA/IDAgOiB0aWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfaXBfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCisvKioKKyAqIERPQzogUGFja2V0IGFsaWdubWVudAorICoKKyAqIERyaXZlcnMgYWx3YXlzIG5lZWQgdG8gcGFzcyBwYWNrZXRzIHRoYXQgYXJlIGFsaWduZWQgdG8gdHdvLWJ5dGUgYm91bmRhcmllcworICogdG8gdGhlIHN0YWNrLgorICoKKyAqIEFkZGl0aW9uYWxseSwgc2hvdWxkLCBpZiBwb3NzaWJsZSwgYWxpZ24gdGhlIHBheWxvYWQgZGF0YSBpbiBhIHdheSB0aGF0CisgKiBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgaXMgYWxpZ25lZCB0byBhIGZvdXItYnl0ZQorICogYm91bmRhcnkuIEluIHRoZSBjYXNlIG9mIHJlZ3VsYXIgZnJhbWVzLCB0aGlzIHNpbXBseSBtZWFucyBhbGlnbmluZyB0aGUKKyAqIHBheWxvYWQgdG8gYSBmb3VyLWJ5dGUgYm91bmRhcnkgKGJlY2F1c2UgZWl0aGVyIHRoZSBJUCBoZWFkZXIgaXMgZGlyZWN0bHkKKyAqIGNvbnRhaW5lZCwgb3IgSVYvUkZDMTA0MiBoZWFkZXJzIHRoYXQgaGF2ZSBhIGxlbmd0aCBkaXZpc2libGUgYnkgZm91ciBhcmUKKyAqIGluIGZyb250IG9mIGl0KS4KKyAqCisgKiBXaXRoIEEtTVNEVSBmcmFtZXMsIGhvd2V2ZXIsIHRoZSBwYXlsb2FkIGRhdGEgYWRkcmVzcyBtdXN0IHlpZWxkIHR3byBtb2R1bG8KKyAqIGZvdXIgYmVjYXVzZSB0aGVyZSBhcmUgMTQtYnl0ZSA4MDIuMyBoZWFkZXJzIHdpdGhpbiB0aGUgQS1NU0RVIGZyYW1lcyB0aGF0CisgKiBwdXNoIHRoZSBJUCBoZWFkZXIgZnVydGhlciBiYWNrIHRvIGEgbXVsdGlwbGUgb2YgZm91ciBhZ2Fpbi4gVGhhbmtmdWxseSwgdGhlCisgKiBzcGVjcyB3ZXJlIHNhbmUgZW5vdWdoIHRoaXMgdGltZSBhcm91bmQgdG8gcmVxdWlyZSBwYWRkaW5nIGVhY2ggQS1NU0RVCisgKiBzdWJmcmFtZSB0byBhIGxlbmd0aCB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgZm91ci4KKyAqCisgKiBQYWRkaW5nIGxpa2UgQXRoZXJvcyBoYXJkd2FyZSBhZGRzIHdoaWNoIGlzIGluYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlciBhbmQKKyAqIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgODAyLjExCisgKiBoZWFkZXIgdG8gYmUgZGlyZWN0bHkgaW4gZnJvbnQgb2YgdGhlIHBheWxvYWQgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJaW50IGhkcmxlbjsKIAorI2lmbmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfUEFDS0VUX0FMSUdOTUVOVAorCXJldHVybjsKKyNlbmRpZgorCisJaWYgKFdBUk5fT05DRSgodW5zaWduZWQgbG9uZylyeC0+c2tiLT5kYXRhICYgMSwKKwkJICAgICAgInVuYWxpZ25lZCBwYWNrZXQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSkpCisJCXJldHVybjsKKwogCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIERyaXZlcnMgYXJlIHJlcXVpcmVkIHRvIGFsaWduIHRoZSBwYXlsb2FkIGRhdGEgaW4gYSB3YXkgdGhhdAotCSAqIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29udGFpbmVkIElQIGhlYWRlciBpcyBhbGlnbmVkIHRvIGEgZm91ci0KLQkgKiBieXRlIGJvdW5kYXJ5LiBJbiB0aGUgY2FzZSBvZiByZWd1bGFyIGZyYW1lcywgdGhpcyBzaW1wbHkgbWVhbnMKLQkgKiBhbGlnbmluZyB0aGUgcGF5bG9hZCB0byBhIGZvdXItYnl0ZSBib3VuZGFyeSAoYmVjYXVzZSBlaXRoZXIKLQkgKiB0aGUgSVAgaGVhZGVyIGlzIGRpcmVjdGx5IGNvbnRhaW5lZCwgb3IgSVYvUkZDMTA0MiBoZWFkZXJzIHRoYXQKLQkgKiBoYXZlIGEgbGVuZ3RoIGRpdmlzaWJsZSBieSBmb3VyIGFyZSBpbiBmcm9udCBvZiBpdC4KLQkgKgotCSAqIFdpdGggQS1NU0RVIGZyYW1lcywgaG93ZXZlciwgdGhlIHBheWxvYWQgZGF0YSBhZGRyZXNzIG11c3QKLQkgKiB5aWVsZCB0d28gbW9kdWxvIGZvdXIgYmVjYXVzZSB0aGVyZSBhcmUgMTQtYnl0ZSA4MDIuMyBoZWFkZXJzCi0JICogd2l0aGluIHRoZSBBLU1TRFUgZnJhbWVzIHRoYXQgcHVzaCB0aGUgSVAgaGVhZGVyIGZ1cnRoZXIgYmFjawotCSAqIHRvIGEgbXVsdGlwbGUgb2YgZm91ciBhZ2Fpbi4gVGhhbmtmdWxseSwgdGhlIHNwZWNzIHdlcmUgc2FuZQotCSAqIGVub3VnaCB0aGlzIHRpbWUgYXJvdW5kIHRvIHJlcXVpcmUgcGFkZGluZyBlYWNoIEEtTVNEVSBzdWJmcmFtZQotCSAqIHRvIGEgbGVuZ3RoIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyLgotCSAqCi0JICogUGFkZGluZyBsaWtlIGF0aGVyb3MgaGFyZHdhcmUgYWRkcyB3aGljaCBpcyBpbmJldHdlZW4gdGhlIDgwMi4xMQotCSAqIGhlYWRlciBhbmQgdGhlIHBheWxvYWQgaXMgbm90IHN1cHBvcnRlZCwgdGhlIGRyaXZlciBpcyByZXF1aXJlZAotCSAqIHRvIG1vdmUgdGhlIDgwMi4xMSBoZWFkZXIgZnVydGhlciBiYWNrIGluIHRoYXQgY2FzZS4KLQkgKi8KIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJaWYgKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9BTVNEVSkKIAkJaGRybGVuICs9IEVUSF9ITEVOOwotCVdBUk5fT05fT05DRSgoKHVuc2lnbmVkIGxvbmcpKHJ4LT5za2ItPmRhdGEgKyBoZHJsZW4pKSAmIDMpOwotI2VuZGlmCisJV0FSTl9PTkNFKCgodW5zaWduZWQgbG9uZykocngtPnNrYi0+ZGF0YSArIGhkcmxlbikpICYgMywKKwkJICAidW5hbGlnbmVkIElQIHBheWxvYWQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSArIGhkcmxlbik7CiB9CiAKIApAQCAtNDM1LDYgKzQzNyw1MiBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAorCitzdGF0aWMgaW50IGllZWU4MDIxMV9pc191bmljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCB8fCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcik7Cit9CisKKworc3RhdGljIGludCBpZWVlODAyMTFfaXNfbXVsdGljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCB8fCAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZShoZHIpOworfQorCisKKy8qIEdldCB0aGUgQklQIGtleSBpbmRleCBmcm9tIE1NSUU7IHJldHVybiAtMSBpZiB0aGlzIGlzIG5vdCBhIEJJUCBmcmFtZSAqLworc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCArIHNpemVvZigqbW1pZSkgfHwKKwkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+ZGEpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWllZWU4MDIxMV9pc19yb2J1c3RfbWdtdF9mcmFtZSgoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgaGRyKSkKKwkJcmV0dXJuIC0xOyAvKiBub3QgYSByb2J1c3QgbWFuYWdlbWVudCBmcmFtZSAqLworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWUgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgIT0gV0xBTl9FSURfTU1JRSB8fAorCSAgICBtbWllLT5sZW5ndGggIT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiAtMTsKKworCXJldHVybiBsZTE2X3RvX2NwdShtbWllLT5rZXlfaWQpOworfQorCisKIHN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfcnhfbWVzaF9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewpAQCAtNTUwLDIxICs1OTgsMjMgQEAKIAlpbnQgaGRybGVuOwogCWllZWU4MDIxMV9yeF9yZXN1bHQgcmVzdWx0ID0gUlhfRFJPUF9VTlVTQUJMRTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqc3Rha2V5ID0gTlVMTDsKKwlpbnQgbW1pZV9rZXlpZHggPSAtMTsKIAogCS8qCiAJICogS2V5IHNlbGVjdGlvbiAxMDEKIAkgKgotCSAqIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBrZXlzOgorCSAqIFRoZXJlIGFyZSBmb3VyIHR5cGVzIG9mIGtleXM6CiAJICogIC0gR1RLIChncm91cCBrZXlzKQorCSAqICAtIElHVEsgKGdyb3VwIGtleXMgZm9yIG1hbmFnZW1lbnQgZnJhbWVzKQogCSAqICAtIFBUSyAocGFpcndpc2Uga2V5cykKIAkgKiAgLSBTVEsgKHN0YXRpb24tdG8tc3RhdGlvbiBwYWlyd2lzZSBrZXlzKQogCSAqCiAJICogV2hlbiBzZWxlY3RpbmcgYSBrZXksIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aWNhc3QKIAkgKiAoaW5jbHVkaW5nIGJyb2FkY2FzdCkgYW5kIHVuaWNhc3QgZnJhbWVzLCB0aGUgbGF0dGVyIGNhbiBvbmx5Ci0JICogdXNlIFBUS3MgYW5kIFNUS3Mgd2hpbGUgdGhlIGZvcm1lciBhbHdheXMgdXNlIEdUS3MuIFVubGVzcywgb2YKLQkgKiBjb3Vyc2UsIGFjdHVhbCBXRVAga2V5cyAoInByZS1SU05BIikgYXJlIHVzZWQsIHRoZW4gdW5pY2FzdAotCSAqIGZyYW1lcyBjYW4gYWxzbyB1c2Uga2V5IGluZGl6ZXMgbGlrZSBHVEtzLiBIZW5jZSwgaWYgd2UgZG9uJ3QKLQkgKiBoYXZlIGEgUFRLL1NUSyB3ZSBjaGVjayB0aGUga2V5IGluZGV4IGZvciBhIFdFUCBrZXkuCisJICogdXNlIFBUS3MgYW5kIFNUS3Mgd2hpbGUgdGhlIGZvcm1lciBhbHdheXMgdXNlIEdUS3MgYW5kIElHVEtzLgorCSAqIFVubGVzcywgb2YgY291cnNlLCBhY3R1YWwgV0VQIGtleXMgKCJwcmUtUlNOQSIpIGFyZSB1c2VkLCB0aGVuCisJICogdW5pY2FzdCBmcmFtZXMgY2FuIGFsc28gdXNlIGtleSBpbmRpY2VzIGxpa2UgR1RLcy4gSGVuY2UsIGlmIHdlCisJICogZG9uJ3QgaGF2ZSBhIFBUSy9TVEsgd2UgY2hlY2sgdGhlIGtleSBpbmRleCBmb3IgYSBXRVAga2V5LgogCSAqCiAJICogTm90ZSB0aGF0IGluIGEgcmVndWxhciBCU1MsIG11bHRpY2FzdCBmcmFtZXMgYXJlIHNlbnQgYnkgdGhlCiAJICogQVAgb25seSwgYXNzb2NpYXRlZCBzdGF0aW9ucyB1bmljYXN0IHRoZSBmcmFtZSB0byB0aGUgQVAgZmlyc3QKQEAgLTU3Nyw4ICs2MjcsMTQgQEAKIAkgKiBwb3NzaWJsZS4KIAkgKi8KIAotCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkKLQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkJICAgIHJ4LT5zdGEgPT0gTlVMTCB8fCAhdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSkKKwkJCXJldHVybiBSWF9DT05USU5VRTsKKwkJbW1pZV9rZXlpZHggPSBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHJ4LT5za2IpOworCQlpZiAobW1pZV9rZXlpZHggPCAwKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCX0KIAogCS8qCiAJICogTm8gcG9pbnQgaW4gZmluZGluZyBhIGtleSBhbmQgZGVjcnlwdGluZyBpZiB0aGUgZnJhbWUgaXMgbmVpdGhlcgpAQCAtNTkyLDYgKzY0OCwxNiBAQAogCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJiBzdGFrZXkpIHsKIAkJcngtPmtleSA9IHN0YWtleTsKKwl9IGVsc2UgaWYgKG1taWVfa2V5aWR4ID49IDApIHsKKwkJLyogQnJvYWRjYXN0L211bHRpY2FzdCByb2J1c3QgbWFuYWdlbWVudCBmcmFtZSAvIEJJUCAqLworCQlpZiAoKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgJiYKKwkJICAgIChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwkJaWYgKG1taWVfa2V5aWR4IDwgTlVNX0RFRkFVTFRfS0VZUyB8fAorCQkgICAgbW1pZV9rZXlpZHggPj0gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7IC8qIHVuZXhwZWN0ZWQgQklQIGtleWlkeCAqLworCQlyeC0+a2V5ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LT5zZGF0YS0+a2V5c1ttbWllX2tleWlkeF0pOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFRoZSBkZXZpY2UgZG9lc24ndCBnaXZlIHVzIHRoZSBJViBzbyB3ZSB3b24ndCBiZQpAQCAtNjU0LDYgKzcyMCw5IEBACiAJY2FzZSBBTEdfQ0NNUDoKIAkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQocngpOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19kZWNyeXB0KHJ4KTsKKwkJYnJlYWs7CiAJfQogCiAJLyogZWl0aGVyIHRoZSBmcmFtZSBoYXMgYmVlbiBkZWNyeXB0ZWQgb3Igd2lsbCBiZSBkcm9wcGVkICovCkBAIC02NjIsNiArNzMxLDM5IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKK2llZWU4MDIxMV9yeF9oX2NoZWNrX21vcmVfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWxvY2FsID0gcngtPmxvY2FsOworCXNrYiA9IHJ4LT5za2I7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmICghbG9jYWwtPnBzcG9sbGluZykKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKCFpZWVlODAyMTFfaGFzX2Zyb21kcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkvKiB0aGlzIGlzIG5vdCBmcm9tIEFQICovCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVkYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJLyogQVAgaGFzIG5vIG1vcmUgZnJhbWVzIGJ1ZmZlcmVkIGZvciB1cyAqLworCQlsb2NhbC0+cHNwb2xsaW5nID0gZmFsc2U7CisJCXJldHVybiBSWF9DT05USU5VRTsKKwl9CisKKwkvKiBtb3JlIGRhdGEgYml0IGlzIHNldCwgbGV0J3MgcmVxdWVzdCBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLworCWllZWU4MDIxMV9zZW5kX3BzcG9sbChsb2NhbCwgcngtPnNkYXRhKTsKKworCXJldHVybiBSWF9DT05USU5VRTsKK30KKwogc3RhdGljIHZvaWQgYXBfc3RhX3BzX3N0YXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTczNiw3ICs4MzgsNyBAQAogCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCXU4ICpic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCByeC0+c2tiLT5sZW4sCiAJCQkJCQlOTDgwMjExX0lGVFlQRV9BREhPQyk7Ci0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHJ4LT5zZGF0YS0+dS5zdGEuYnNzaWQpID09IDApCisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHJ4LT5zZGF0YS0+dS5pYnNzLmJzc2lkKSA9PSAwKQogCQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAl9IGVsc2UKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CkBAIC0xMTAxLDYgKzEyMDMsMTUgQEAKIAkvKiBEcm9wIHVuZW5jcnlwdGVkIGZyYW1lcyBpZiBrZXkgaXMgc2V0LiAqLwogCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpICYmCiAJCSAgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgJiYKKwkJICAgICAoIWllZWU4MDIxMV9pc19tZ210KGZjKSB8fAorCQkgICAgICAoaWVlZTgwMjExX2lzX3VuaWNhc3Rfcm9idXN0X21nbXRfZnJhbWUocngtPnNrYikgJiYKKwkJICAgICAgIHJ4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSkpICYmCisJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCisJCXJldHVybiAtRUFDQ0VTOworCS8qIEJJUCBkb2VzIG5vdCB1c2UgUHJvdGVjdGVkIGZpZWxkLCBzbyBuZWVkIHRvIGNoZWNrIE1NSUUgKi8KKwlpZiAodW5saWtlbHkocngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApICYmCisJCSAgICAgaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgorCQkgICAgIGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYikgPCAwICYmCiAJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCkBAIC0xMTM4LDEyICsxMjQ5LDEyIEBACiAKIAlzd2l0Y2ggKGhkci0+ZnJhbWVfY29udHJvbCAmCiAJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk6CiAJCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQogCQkJcmV0dXJuIC0xOwpAQCAtMTE1NywxMyArMTI2OCwxMyBAQAogCQkJfQogCQl9CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CiAJCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZHN0KSAmJgogCQkgICAgICFjb21wYXJlX2V0aGVyX2FkZHIoc3JjLCBkZXYtPmRldl9hZGRyKSkpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNigwKToKKwljYXNlIGNwdV90b19sZTE2KDApOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKQEAgLTEyNjcsMTAgKzEzNzgsMzcgQEAKIAl9CiAKIAlpZiAoc2tiKSB7Ci0JCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7Ci0JCW5ldGlmX3J4KHNrYik7CisJCWludCBhbGlnbiBfX21heWJlX3VudXNlZDsKKworI2lmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQpIHx8ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQorCQkvKgorCQkgKiAnYWxpZ24nIHdpbGwgb25seSB0YWtlIHRoZSB2YWx1ZXMgMCBvciAyIGhlcmUKKwkJICogc2luY2UgYWxsIGZyYW1lcyBhcmUgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZAorCQkgKiB0byAyLWJ5dGUgYm91bmRhcmllcyB3aGVuIGJlaW5nIHBhc3NlZCB0bworCQkgKiBtYWM4MDIxMS4gVGhhdCBhbHNvIGV4cGxhaW5zIHRoZSBfX3NrYl9wdXNoKCkKKwkJICogYmVsb3cuCisJCSAqLworCQlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDQ7CisJCWlmIChhbGlnbikgeworCQkJaWYgKFdBUk5fT04oc2tiX2hlYWRyb29tKHNrYikgPCAzKSkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQl1OCAqZGF0YSA9IHNrYi0+ZGF0YTsKKwkJCQlzaXplX3QgbGVuID0gc2tiLT5sZW47CisJCQkJdTggKm5ldyA9IF9fc2tiX3B1c2goc2tiLCBhbGlnbik7CisJCQkJbWVtbW92ZShuZXcsIGRhdGEsIGxlbik7CisJCQkJX19za2JfdHJpbShza2IsIGxlbik7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCWlmIChza2IpIHsKKwkJCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0KIAl9CiAKIAlpZiAoeG1pdF9za2IpIHsKQEAgLTEzMzksMTQgKzE0NzcsMjAgQEAKIAkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQogCQkJZnJhbWUgPSBza2I7CiAJCWVsc2UgewotCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkJCSAgICAgIHN1YmZyYW1lX2xlbik7CisJCQkvKgorCQkJICogQWxsb2NhdGUgYW5kIHJlc2VydmUgdHdvIGJ5dGVzIG1vcmUgZm9yIHBheWxvYWQKKwkJCSAqIGFsaWdubWVudCBzaW5jZSBzaXplb2Yoc3RydWN0IGV0aGhkcikgaXMgMTQuCisJCQkgKi8KKwkJCWZyYW1lID0gZGV2X2FsbG9jX3NrYigKKwkJCQlBTElHTihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sIDQpICsKKwkJCQlzdWJmcmFtZV9sZW4gKyAyKTsKIAogCQkJaWYgKGZyYW1lID09IE5VTEwpCiAJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKLQkJCXNrYl9yZXNlcnZlKGZyYW1lLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCQkJc2tiX3Jlc2VydmUoZnJhbWUsCisJCQkJICAgIEFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKIAkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAogCQkJCW50b2hzKGxlbikpOwogCkBAIC0xNTI5LDExICsxNjczLDkgQEAKIAkJc3RhcnRfc2VxX251bSA9IGxlMTZfdG9fY3B1KGJhci0+c3RhcnRfc2VxX251bSkgPj4gNDsKIAogCQkvKiByZXNldCBzZXNzaW9uIHRpbWVyICovCi0JCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyAodGlkX2FnZ19yeC0+dGltZW91dCAvIDEwMDApICogSFo7Ci0JCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsIGV4cGlyZXMpOwotCQl9CisJCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KQorCQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAorCQkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCiAJCS8qIG1hbmFnZSByZW9yZGVyaW5nIGJ1ZmZlciBhY2NvcmRpbmcgdG8gcmVxdWVzdGVkICovCiAJCS8qIHNlcXVlbmNlIG51bWJlciAqLwpAQCAtMTU0NywxMiArMTY4OSw2NCBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgIT0gMCkgeworCQkvKiBOb3QgdG8gb3duIHVuaWNhc3QgYWRkcmVzcyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7CisJCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7CisJCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChsZW4gPCAyNCArIDEgKyBzaXplb2YocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpIHsKKwkJLyogVG9vIHNob3J0IFNBIFF1ZXJ5IHJlcXVlc3QgZnJhbWUgKi8KKwkJcmV0dXJuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpyZXNwKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQocmVzcCwgMCwgMjQpOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKwltZW1jcHkocmVzcC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXNwLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKTsKKwlyZXNwLT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfU0FfUVVFUlk7CisJcmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS5hY3Rpb24gPSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRTsKKwltZW1jcHkocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgbWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKK30KKwogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKQEAgLTE1NjQsMTIgKzE3NTgsMjYgQEAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHJ4LCBtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCS8qIGFsbCBjYXRlZ29yaWVzIHdlIGN1cnJlbnRseSBoYW5kbGUgaGF2ZSBhY3Rpb25fY29kZSAqLwogCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsgMSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpIHsKIAljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKKwkJLyoKKwkJICogVGhlIGFnZ3JlZ2F0aW9uIGNvZGUgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorCQkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmc7CisJCSAqIElCU1MgY291bGQgd29yayBpbiB0aGUgY29kZSBidXQgaXNuJ3Qgc3VwcG9ydGVkCisJCSAqIGJ5IGRyaXZlcnMgb3IgdGhlIHN0YW5kYXJkLgorCQkgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKQEAgLTE1OTQsNiArMTgwMiwxMCBAQAogCWNhc2UgV0xBTl9DQVRFR09SWV9TUEVDVFJVTV9NR01UOgogCQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX1NQQ1RfTVNSX1JFUToKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCkBAIC0xNjAxLDYgKzE4MTMsNDMgQEAKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHNkYXRhLCBtZ210LCBsZW4pOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9DSExfU1dJVENIOgorCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKKwkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaCkpKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQsCisJCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZCwKKwkJCQkJICAgc2RhdGEtPnUubWdkLnNzaWRfbGVuKTsKKwkJCWlmICghYnNzKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCisJCQkJICAgICAmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLCBic3MpOworCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0FURUdPUllfU0FfUVVFUlk6CisJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCisJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LnNhX3F1ZXJ5LmFjdGlvbikgeworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1Q6CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWllZWU4MDIxMV9wcm9jZXNzX3NhX3F1ZXJ5X3JlcShzZGF0YSwgbWdtdCwgbGVuKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFOgorCQkJLyoKKwkJCSAqIFNBIFF1ZXJ5IHJlc3BvbnNlIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gQVAgbW9kZQorCQkJICogYW5kIGl0IGlzIHByb2Nlc3NlZCBpbiB1c2VyIHNwYWNlLgorCQkJICovCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE2MTYsMTAgKzE4NjUsMTQgQEAKIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHJ4LT5kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKIApAQCAtMTYyNywxMSArMTg4MCwxNCBAQAogCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKLQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKLQlyZXR1cm4gUlhfUVVFVUVEOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xNzgwLDYgKzIwMzYsNyBAQAogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3Bhc3NpdmVfc2NhbikKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9jaGVjaykKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9kZWNyeXB0KQorCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2NoZWNrX21vcmVfZGF0YSkKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9zdGFfcHJvY2VzcykKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9kZWZyYWdtZW50KQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3BzX3BvbGwpCkBAIC0xODIzLDE2ICsyMDgwLDE3IEBACiAvKiBtYWluIHJlY2VpdmUgcGF0aCAqLwogCiBzdGF0aWMgaW50IHByZXBhcmVfZm9yX2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXU4ICpic3NpZCwgc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CisJdTggKmJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHJ4LT5za2ItPmxlbiwgc2RhdGEtPnZpZi50eXBlKTsKIAlpbnQgbXVsdGljYXN0ID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CiAKIAlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWYgKCFic3NpZCkKIAkJCXJldHVybiAwOwotCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkgeworCQlpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwogCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CkBAIC0xODUwLDcgKzIxMDgsNyBAQAogCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQllbHNlIGlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKSB7CisJCWVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQpKSB7CiAJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTE5MjgsNyArMjE4Niw2IEBACiAJaW50IHByZXBhcmVzOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2JfbmV3OwotCXU4ICpic3NpZDsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAltZW1zZXQoJnJ4LCAwLCBzaXplb2YocngpKTsKQEAgLTE5NTYsNyArMjIxMyw3IEBACiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9JTl9TQ0FOOwogCiAJaWVlZTgwMjExX3BhcnNlX3FvcygmcngpOwotCWllZWU4MDIxMV92ZXJpZnlfaXBfYWxpZ25tZW50KCZyeCk7CisJaWVlZTgwMjExX3ZlcmlmeV9hbGlnbm1lbnQoJnJ4KTsKIAogCXNrYiA9IHJ4LnNrYjsKIApAQCAtMTk2Nyw5ICsyMjI0LDggQEAKIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQkJY29udGludWU7CiAKLQkJYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgc2tiLT5sZW4sIHNkYXRhLT52aWYudHlwZSk7CiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKLQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzZGF0YSwgYnNzaWQsICZyeCwgaGRyKTsKKwkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhzZGF0YSwgJnJ4LCBoZHIpOwogCiAJCWlmICghcHJlcGFyZXMpCiAJCQljb250aW51ZTsKQEAgLTIxNzQsMTEgKzI0MzAsOSBAQAogCS8qIG5ldyB1bi1vcmRlcmVkIGFtcGR1IGZyYW1lIC0gcHJvY2VzcyBpdCAqLwogCiAJLyogcmVzZXQgc2Vzc2lvbiB0aW1lciAqLwotCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9Ci0JCQlqaWZmaWVzICsgKHRpZF9hZ2dfcngtPnRpbWVvdXQgLyAxMDAwKSAqIEhaOwotCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsIGV4cGlyZXMpOwotCX0KKwlpZiAodGlkX2FnZ19yeC0+dGltZW91dCkKKwkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAorCQkJICBUVV9UT19FWFBfVElNRSh0aWRfYWdnX3J4LT50aW1lb3V0KSk7CiAKIAkvKiBpZiB0aGlzIG1wZHUgaXMgZnJhZ21lbnRlZCAtIHRlcm1pbmF0ZSByeCBhZ2dyZWdhdGlvbiBzZXNzaW9uICovCiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCmluZGV4IGY1YzdjMzMuLjUwMzBhM2MgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmMKKysrIGIvbmV0L21hYzgwMjExL3NjYW4uYwpAQCAtMTIsMTQgKzEyLDExIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0vKiBUT0RPOgotICogb3JkZXIgQlNTIGxpc3QgYnkgUlNTSSg/KSAoInF1YWxpdHkgb2YgQVAiKQotICogc2NhbiByZXN1bHQgdGFibGUgZmlsdGVyaW5nIChieSBjYXBhYmlsaXR5IChwcml2YWN5LCBJQlNTL0JTUywgV1BBL1JTTiBJRSwKLSAqICAgIFNTSUQpCi0gKi8KKy8qIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIGF2b2lkIHRoYXQgdGhlICJjdXJyZW50IEJTUyIgZXhwaXJlcyAqLwogCiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCkBAIC0zMCwxOTIgKzI3LDI5IEBACiAjZGVmaW5lIElFRUU4MDIxMV9DSEFOTkVMX1RJTUUgKEhaIC8gMzMpCiAjZGVmaW5lIElFRUU4MDIxMV9QQVNTSVZFX0NIQU5ORUxfVElNRSAoSFogLyA1KQogCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQotewotCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+YnNzX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+YnNzX2xpc3QpOwotfQotCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmxvY2FsLT5ic3NfbGlzdCwgbGlzdCkKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci19Ci0KIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAogCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWJzcyA9IGxvY2FsLT5ic3NfaGFzaFtTVEFfSEFTSChic3NpZCldOwotCXdoaWxlIChic3MpIHsKLQkJaWYgKCFic3NfbWVzaF9jZmcoYnNzKSAmJgotCQkgICAgIW1lbWNtcChic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICYmCi0JCSAgICBic3MtPmZyZXEgPT0gZnJlcSAmJgotCQkgICAgYnNzLT5zc2lkX2xlbiA9PSBzc2lkX2xlbiAmJgotCQkgICAgKHNzaWRfbGVuID09IDAgfHwgIW1lbWNtcChic3MtPnNzaWQsIHNzaWQsIHNzaWRfbGVuKSkpIHsKLQkJCWF0b21pY19pbmMoJmJzcy0+dXNlcnMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnNzID0gYnNzLT5obmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKKwlyZXR1cm4gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwKKwkJCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwKKwkJCQkJCQkgICAgICBmcmVxKSwKKwkJCQkJYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAorCQkJCQkwLCAwKTsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCBsb2NhbC0+YnNzX2xvY2sgKi8KLXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKQogewotCXU4IGhhc2hfaWR4OworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKWNic3M7CiAKLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCi0JCWhhc2hfaWR4ID0gbWVzaF9pZF9oYXNoKGJzc19tZXNoX2lkKGJzcyksCi0JCQkJCWJzc19tZXNoX2lkX2xlbihic3MpKTsKLQllbHNlCi0JCWhhc2hfaWR4ID0gU1RBX0hBU0goYnNzLT5ic3NpZCk7Ci0KLQlic3MtPmhuZXh0ID0gbG9jYWwtPmJzc19oYXNoW2hhc2hfaWR4XTsKLQlsb2NhbC0+YnNzX2hhc2hbaGFzaF9pZHhdID0gYnNzOwotfQotCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5ic3NfbG9jayAqLwotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfZGVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpiLCAqcHJldiA9IE5VTEw7Ci0JYiA9IGxvY2FsLT5ic3NfaGFzaFtTVEFfSEFTSChic3MtPmJzc2lkKV07Ci0Jd2hpbGUgKGIpIHsKLQkJaWYgKGIgPT0gYnNzKSB7Ci0JCQlpZiAoIXByZXYpCi0JCQkJbG9jYWwtPmJzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXSA9Ci0JCQkJCWJzcy0+aG5leHQ7Ci0JCQllbHNlCi0JCQkJcHJldi0+aG5leHQgPSBic3MtPmhuZXh0OwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJldiA9IGI7Ci0JCWIgPSBiLT5obmV4dDsKLQl9Ci19Ci0KLXN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0JYnNzID0ga3phbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOwotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQlhdG9taWNfc2V0KCZic3MtPnVzZXJzLCAyKTsKLQltZW1jcHkoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQlic3MtPmZyZXEgPSBmcmVxOwotCWlmIChzc2lkICYmIHNzaWRfbGVuIDw9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKLQkJbWVtY3B5KGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCQlic3MtPnNzaWRfbGVuID0gc3NpZF9sZW47Ci0JfQotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCS8qIFRPRE86IG9yZGVyIGJ5IFJTU0k/ICovCi0JbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmbG9jYWwtPmJzc19saXN0KTsKLQlfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9hZGQobG9jYWwsIGJzcyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JcmV0dXJuIGJzczsKLX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9ic3MgKgotaWVlZTgwMjExX3J4X21lc2hfYnNzX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbiwKLQkJCSAgdTggKm1lc2hfY2ZnLCBpbnQgZnJlcSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWJzcyA9IGxvY2FsLT5ic3NfaGFzaFttZXNoX2lkX2hhc2gobWVzaF9pZCwgbWVzaF9pZF9sZW4pXTsKLQl3aGlsZSAoYnNzKSB7Ci0JCWlmIChic3NfbWVzaF9jZmcoYnNzKSAmJgotCQkgICAgIW1lbWNtcChic3NfbWVzaF9jZmcoYnNzKSwgbWVzaF9jZmcsIE1FU0hfQ0ZHX0NNUF9MRU4pICYmCi0JCSAgICBic3MtPmZyZXEgPT0gZnJlcSAmJgotCQkgICAgbWVzaF9pZF9sZW4gPT0gYnNzLT5tZXNoX2lkX2xlbiAmJgotCQkgICAgKG1lc2hfaWRfbGVuID09IDAgfHwgIW1lbWNtcChic3MtPm1lc2hfaWQsIG1lc2hfaWQsCi0JCQkJCQkgbWVzaF9pZF9sZW4pKSkgewotCQkJYXRvbWljX2luYygmYnNzLT51c2Vycyk7Ci0JCQlicmVhazsKLQkJfQotCQlic3MgPSBic3MtPmhuZXh0OwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOwotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9ic3MgKgotaWVlZTgwMjExX3J4X21lc2hfYnNzX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbiwKLQkJCSAgdTggKm1lc2hfY2ZnLCBpbnQgbWVzaF9jb25maWdfbGVuLCBpbnQgZnJlcSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0JaWYgKG1lc2hfY29uZmlnX2xlbiAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKQotCQlyZXR1cm4gTlVMTDsKLQotCWJzcyA9IGt6YWxsb2Moc2l6ZW9mKCpic3MpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlic3MtPm1lc2hfY2ZnID0ga21hbGxvYyhNRVNIX0NGR19DTVBfTEVOLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJzcy0+bWVzaF9jZmcpIHsKLQkJa2ZyZWUoYnNzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKG1lc2hfaWRfbGVuICYmIG1lc2hfaWRfbGVuIDw9IElFRUU4MDIxMV9NQVhfTUVTSF9JRF9MRU4pIHsKLQkJYnNzLT5tZXNoX2lkID0ga21hbGxvYyhtZXNoX2lkX2xlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmICghYnNzLT5tZXNoX2lkKSB7Ci0JCQlrZnJlZShic3MtPm1lc2hfY2ZnKTsKLQkJCWtmcmVlKGJzcyk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQltZW1jcHkoYnNzLT5tZXNoX2lkLCBtZXNoX2lkLCBtZXNoX2lkX2xlbik7Ci0JfQotCi0JYXRvbWljX3NldCgmYnNzLT51c2VycywgMik7Ci0JbWVtY3B5KGJzcy0+bWVzaF9jZmcsIG1lc2hfY2ZnLCBNRVNIX0NGR19DTVBfTEVOKTsKLQlic3MtPm1lc2hfaWRfbGVuID0gbWVzaF9pZF9sZW47Ci0JYnNzLT5mcmVxID0gZnJlcTsKLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+YnNzX2xpc3QpOwotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChsb2NhbCwgYnNzKTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCWtmcmVlKGJzcy0+aWVzKTsKIAlrZnJlZShic3NfbWVzaF9pZChic3MpKTsKIAlrZnJlZShic3NfbWVzaF9jZmcoYnNzKSk7Ci0Ja2ZyZWUoYnNzKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKIHsKLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZic3MtPnVzZXJzLCAmbG9jYWwtPmJzc19sb2NrKSkgewotCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJcmV0dXJuOwotCX0KLQotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2RlbChsb2NhbCwgYnNzKTsKLQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlpZWVlODAyMTFfcnhfYnNzX2ZyZWUoYnNzKTsKKwljZmc4MDIxMV9wdXRfYnNzKChzdHJ1Y3QgY2ZnODAyMTFfYnNzICopYnNzKTsKIH0KIAogc3RydWN0IGllZWU4MDIxMV9ic3MgKgpAQCAtMjI0LDM5ICs1OCwyNSBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgIHNpemVfdCBsZW4sCiAJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgaW50IGZyZXEsIGJvb2wgYmVhY29uKQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgIGJvb2wgYmVhY29uKQogewogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGNsZW47CisJczMyIHNpZ25hbCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCWlmIChlbGVtcy0+bWVzaF9jb25maWcpCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9tZXNoX2Jzc19nZXQobG9jYWwsIGVsZW1zLT5tZXNoX2lkLAotCQkJCWVsZW1zLT5tZXNoX2lkX2xlbiwgZWxlbXMtPm1lc2hfY29uZmlnLCBmcmVxKTsKLQllbHNlCi0jZW5kaWYKLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIG1nbXQtPmJzc2lkLCBmcmVxLAotCQkJCQkgICBlbGVtcy0+c3NpZCwgZWxlbXMtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi0JCWlmIChlbGVtcy0+bWVzaF9jb25maWcpCi0JCQlic3MgPSBpZWVlODAyMTFfcnhfbWVzaF9ic3NfYWRkKGxvY2FsLCBlbGVtcy0+bWVzaF9pZCwKLQkJCQllbGVtcy0+bWVzaF9pZF9sZW4sIGVsZW1zLT5tZXNoX2NvbmZpZywKLQkJCQllbGVtcy0+bWVzaF9jb25maWdfbGVuLCBmcmVxKTsKLQkJZWxzZQotI2VuZGlmCi0JCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChsb2NhbCwgbWdtdC0+YnNzaWQsIGZyZXEsCi0JCQkJCQkgIGVsZW1zLT5zc2lkLCBlbGVtcy0+c3NpZF9sZW4pOwotCQlpZiAoIWJzcykKLQkJCXJldHVybiBOVUxMOwotCX0gZWxzZSB7Ci0jaWYgMAotCQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+YnNzX2xpc3QpOwotCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLSNlbmRpZgotCX0KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCXNpZ25hbCA9IHJ4X3N0YXR1cy0+c2lnbmFsICogMTAwOworCWVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKQorCQlzaWduYWwgPSAocnhfc3RhdHVzLT5zaWduYWwgKiAxMDApIC8gbG9jYWwtPmh3Lm1heF9zaWduYWw7CisKKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUobG9jYWwtPmh3LndpcGh5LCBjaGFubmVsLAorCQkJCQkJbWdtdCwgbGVuLCBzaWduYWwsIEdGUF9BVE9NSUMpOworCisJaWYgKCFic3MpCisJCXJldHVybiBOVUxMOworCisJYnNzLT5jYnNzLmZyZWVfcHJpdiA9IGllZWU4MDIxMV9yeF9ic3NfZnJlZTsKIAogCS8qIHNhdmUgdGhlIEVSUCB2YWx1ZSBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBhdCBhc3NvY2lhdGlvbiB0aW1lICovCiAJaWYgKGVsZW1zLT5lcnBfaW5mbyAmJiBlbGVtcy0+ZXJwX2luZm9fbGVuID49IDEpIHsKQEAgLTI2NCw5ICs4NCw2IEBACiAJCWJzcy0+aGFzX2VycF92YWx1ZSA9IDE7CiAJfQogCi0JYnNzLT5iZWFjb25faW50ID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCk7Ci0JYnNzLT5jYXBhYmlsaXR5ID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyk7Ci0KIAlpZiAoZWxlbXMtPnRpbSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltX2llID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKWVsZW1zLT50aW07CkBAIC0yOTUsMzcgKzExMiwyNyBAQAogCQlic3MtPnN1cHBfcmF0ZXNfbGVuICs9IGNsZW47CiAJfQogCi0JYnNzLT5iYW5kID0gcnhfc3RhdHVzLT5iYW5kOwotCi0JYnNzLT50aW1lc3RhbXAgPSBsZTY0X3RvX2NwdShtZ210LT51LmJlYWNvbi50aW1lc3RhbXApOwotCWJzcy0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwotCWJzcy0+c2lnbmFsID0gcnhfc3RhdHVzLT5zaWduYWw7Ci0JYnNzLT5ub2lzZSA9IHJ4X3N0YXR1cy0+bm9pc2U7Ci0JYnNzLT5xdWFsID0gcnhfc3RhdHVzLT5xdWFsOwogCWJzcy0+d21tX3VzZWQgPSBlbGVtcy0+d21tX3BhcmFtIHx8IGVsZW1zLT53bW1faW5mbzsKIAogCWlmICghYmVhY29uKQogCQlic3MtPmxhc3RfcHJvYmVfcmVzcCA9IGppZmZpZXM7CiAKLQkvKgotCSAqIEZvciBwcm9iZSByZXNwb25zZXMsIG9yIGlmIHdlIGRvbid0IGhhdmUgYW55IGluZm9ybWF0aW9uIHlldCwKLQkgKiB1c2UgdGhlIElFcyBmcm9tIHRoZSBiZWFjb24uCi0JICovCi0JaWYgKCFic3MtPmllcyB8fCAhYmVhY29uKSB7Ci0JCWlmIChic3MtPmllcyA9PSBOVUxMIHx8IGJzcy0+aWVzX2xlbiA8IGVsZW1zLT50b3RhbF9sZW4pIHsKLQkJCWtmcmVlKGJzcy0+aWVzKTsKLQkJCWJzcy0+aWVzID0ga21hbGxvYyhlbGVtcy0+dG90YWxfbGVuLCBHRlBfQVRPTUlDKTsKLQkJfQotCQlpZiAoYnNzLT5pZXMpIHsKLQkJCW1lbWNweShic3MtPmllcywgZWxlbXMtPmllX3N0YXJ0LCBlbGVtcy0+dG90YWxfbGVuKTsKLQkJCWJzcy0+aWVzX2xlbiA9IGVsZW1zLT50b3RhbF9sZW47Ci0JCX0gZWxzZQotCQkJYnNzLT5pZXNfbGVuID0gMDsKLQl9Ci0KIAlyZXR1cm4gYnNzOwogfQogCit2b2lkIGllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQsCisJCQkgICAgIGludCBmcmVxLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBic3NpZCwgZnJlcSwgc3NpZCwgc3NpZF9sZW4pOworCWlmIChic3MpIHsKKwkJY2ZnODAyMTFfdW5saW5rX2Jzcyhsb2NhbC0+aHcud2lwaHksICh2b2lkICopYnNzKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJfQorfQorCiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQpAQCAtMzg3LDcgKzE5NCw3IEBACiAKIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHNkYXRhLT5sb2NhbCwgcnhfc3RhdHVzLAogCQkJCQltZ210LCBza2ItPmxlbiwgJmVsZW1zLAotCQkJCQlmcmVxLCBiZWFjb24pOworCQkJCQljaGFubmVsLCBiZWFjb24pOwogCWlmIChic3MpCiAJCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKIApAQCAtMzk1LDU2ICsyMDIsMzQgQEAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgIGludCBwb3dlcnNhdmUpCit2b2lkIGllZWU4MDIxMV9zY2FuX2ZhaWxlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKLQlfX2xlMTYgZmM7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDI0KTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGxmdW5jICIKLQkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJaWYgKFdBUk5fT04oIWxvY2FsLT5zY2FuX3JlcSkpCiAJCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKLQlmYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKLQkJCSBJRUVFODAyMTFfRkNUTF9UT0RTKTsKLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7Ci0JbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBmYzsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOworCS8qIG5vdGlmeSBjZmc4MDIxMSBhYm91dCB0aGUgZmFpbGVkIHNjYW4gKi8KKwlpZiAobG9jYWwtPnNjYW5fcmVxICE9ICZsb2NhbC0+aW50X3NjYW5fcmVxKQorCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCB0cnVlKTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJbG9jYWwtPnNjYW5fcmVxID0gTlVMTDsKIH0KIAotdm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCWlmIChXQVJOX09OKCFsb2NhbC0+aHdfc2Nhbm5pbmcgJiYgIWxvY2FsLT5zd19zY2FubmluZykpCiAJCXJldHVybjsKIAotCWxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkID0gamlmZmllczsKLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJaWYgKFdBUk5fT04oIWxvY2FsLT5zY2FuX3JlcSkpCisJCXJldHVybjsKIAotCS8qCi0JICogbG9jYWwtPnNjYW5fc2RhdGEgY291bGQgaGF2ZSBiZWVuIE5VTExlZCBieSB0aGUgaW50ZXJmYWNlCi0JICogZG93biBjb2RlIGluIGNhc2Ugd2Ugd2VyZSBzY2FubmluZyBvbiBhbiBpbnRlcmZhY2UgdGhhdCBpcwotCSAqIGJlaW5nIHRha2VuIGRvd24uCi0JICovCi0Jc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlpZiAoc2RhdGEpCi0JCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwlpZiAobG9jYWwtPnNjYW5fcmVxICE9ICZsb2NhbC0+aW50X3NjYW5fcmVxKQorCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCBhYm9ydGVkKTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOworCisJbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwogCiAJaWYgKGxvY2FsLT5od19zY2FubmluZykgewogCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSBmYWxzZTsKQEAgLTQ3MiwzNCArMjU3LDQ2IEBACiAJbmV0aWZfYWRkcl91bmxvY2sobG9jYWwtPm1kZXYpOwogCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCWlmIChsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKQorCQlsb2NhbC0+b3BzLT5zd19zY2FuX2NvbXBsZXRlKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWNvbnRpbnVlOworCiAJCS8qIFRlbGwgQVAgd2UncmUgYmFjayAqLwogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKIAkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOwogCQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAkJCX0KIAkJfSBlbHNlCiAJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisKKwkJLyogcmUtZW5hYmxlIGJlYWNvbmluZyAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQkJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwKKwkJCQkJICAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAKICBkb25lOgogCWllZWU4MDIxMV9tbG1lX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CisJaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKIAlpZWVlODAyMTFfbWVzaF9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQpOwogCi0KIHZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgc2Nhbl93b3JrLndvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCWludCBza2lwOworCWludCBza2lwLCBpOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9kZWxheSA9IDA7CiAKIAkvKgpAQCAtNTEwLDMzICszMDcsMTMgQEAKIAogCXN3aXRjaCAobG9jYWwtPnNjYW5fc3RhdGUpIHsKIAljYXNlIFNDQU5fU0VUX0NIQU5ORUw6Ci0JCS8qCi0JCSAqIEdldCBjdXJyZW50IHNjYW4gYmFuZC4gc2Nhbl9iYW5kIG1heSBiZSBJRUVFODAyMTFfTlVNX0JBTkRTCi0JCSAqIGFmdGVyIHdlIHN1Y2Nlc3NmdWxseSBzY2FubmVkIHRoZSBsYXN0IGNoYW5uZWwgb2YgdGhlIGxhc3QKLQkJICogYmFuZCAoYW5kIHRoZSBsYXN0IGJhbmQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBodykKLQkJICovCi0JCWlmIChsb2NhbC0+c2Nhbl9iYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUykKLQkJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+c2Nhbl9iYW5kXTsKLQkJZWxzZQotCQkJc2JhbmQgPSBOVUxMOwotCi0JCS8qCi0JCSAqIElmIHdlIGFyZSBhdCBhbiB1bnN1cHBvcnRlZCBiYW5kIGFuZCBoYXZlIG1vcmUgYmFuZHMKLQkJICogbGVmdCB0byBzY2FuLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN1cHBvcnRlZCBvbmUuCi0JCSAqLwotCQl3aGlsZSAoIXNiYW5kICYmIGxvY2FsLT5zY2FuX2JhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTIC0gMSkgewotCQkJbG9jYWwtPnNjYW5fYmFuZCsrOwotCQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5zY2FuX2JhbmRdOwotCQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCQl9Ci0KIAkJLyogaWYgbm8gbW9yZSBiYW5kcy9jaGFubmVscyBsZWZ0LCBjb21wbGV0ZSBzY2FuICovCi0JCWlmICghc2JhbmQgfHwgbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpIHsKLQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChsb2NhbF90b19odyhsb2NhbCkpOworCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPj0gbG9jYWwtPnNjYW5fcmVxLT5uX2NoYW5uZWxzKSB7CisJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQobG9jYWxfdG9faHcobG9jYWwpLCBmYWxzZSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJc2tpcCA9IDA7Ci0JCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKKwkJY2hhbiA9IGxvY2FsLT5zY2FuX3JlcS0+Y2hhbm5lbHNbbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHhdOwogCiAJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEIHx8CiAJCSAgICAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCkBAIC01NTIsMTUgKzMyOSw2IEBACiAKIAkJLyogYWR2YW5jZSBzdGF0ZSBtYWNoaW5lIHRvIG5leHQgY2hhbm5lbC9iYW5kICovCiAJCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4Kys7Ci0JCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscykgewotCQkJLyoKLQkJCSAqIHNjYW5fYmFuZCBtYXkgZW5kIHVwID09IElFRUU4MDIxMV9OVU1fQkFORFMsIGJ1dAotCQkJICogd2UnbGwgY2F0Y2ggdGhhdCBjYXNlIGFib3ZlIGFuZCBjb21wbGV0ZSB0aGUgc2NhbgotCQkJICogaWYgdGhhdCBpcyB0aGUgY2FzZS4KLQkJCSAqLwotCQkJbG9jYWwtPnNjYW5fYmFuZCsrOwotCQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCQl9CiAKIAkJaWYgKHNraXApCiAJCQlicmVhazsKQEAgLTU3MywxMCArMzQxLDE1IEBACiAJCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUU7CiAJCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRVRfQ0hBTk5FTDsKIAotCQlpZiAobG9jYWwtPnNjYW5fY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTiB8fAorCQkgICAgIWxvY2FsLT5zY2FuX3JlcS0+bl9zc2lkcykKIAkJCWJyZWFrOwotCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsIGxvY2FsLT5zY2FuX3NzaWQsCi0JCQkJCSBsb2NhbC0+c2Nhbl9zc2lkX2xlbik7CisJCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHM7IGkrKykKKwkJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcSgKKwkJCQlzZGF0YSwgTlVMTCwKKwkJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWQsCisJCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkX2xlbiwKKwkJCQlsb2NhbC0+c2Nhbl9yZXEtPmllLCBsb2NhbC0+c2Nhbl9yZXEtPmllX2xlbik7CiAJCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FOwogCQlicmVhazsKIAl9CkBAIC01ODcsMTQgKzM2MCwxOSBAQAogCiAKIGludCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhLAotCQkJIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCisJCQkgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2Nhbl9zZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKLQlpZiAoc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCWlmICghcmVxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgbG9jYWwtPnNjYW5fcmVxICE9IHJlcSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKKwogCS8qIE1MTUUtU0NBTi5yZXF1ZXN0IChwYWdlIDExOCkgIHBhZ2UgMTQ0ICgxMS4xLjMuMSkKIAkgKiBCU1NUeXBlOiBJTkZSQVNUUlVDVFVSRSwgSU5ERVBFTkRFTlQsIEFOWV9CU1MKIAkgKiBCU1NJRDogTUFDQWRkcmVzcwpAQCAtNjIyLDcgKzQwMCw3IEBACiAJCWludCByYzsKIAogCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSB0cnVlOwotCQlyYyA9IGxvY2FsLT5vcHMtPmh3X3NjYW4obG9jYWxfdG9faHcobG9jYWwpLCBzc2lkLCBzc2lkX2xlbik7CisJCXJjID0gbG9jYWwtPm9wcy0+aHdfc2Nhbihsb2NhbF90b19odyhsb2NhbCksIHJlcSk7CiAJCWlmIChyYykgewogCQkJbG9jYWwtPmh3X3NjYW5uaW5nID0gZmFsc2U7CiAJCQlyZXR1cm4gcmM7CkBAIC02MzIsMjggKzQxMCwzNSBAQAogCX0KIAogCWxvY2FsLT5zd19zY2FubmluZyA9IHRydWU7CisJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQpCisJCWxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQobG9jYWxfdG9faHcobG9jYWwpKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKworCQkvKiBkaXNhYmxlIGJlYWNvbmluZyAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQkJaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwKKwkJCQkJICAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKKwogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKIAkJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAkJCX0KIAkJfSBlbHNlCiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCi0JaWYgKHNzaWQpIHsKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQkJbWVtY3B5KGxvY2FsLT5zY2FuX3NzaWQsIHNzaWQsIHNzaWRfbGVuKTsKLQl9IGVsc2UKLQkJbG9jYWwtPnNjYW5fc3NpZF9sZW4gPSAwOwogCWxvY2FsLT5zY2FuX3N0YXRlID0gU0NBTl9TRVRfQ0hBTk5FTDsKIAlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JbG9jYWwtPnNjYW5fYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzY2FuX3NkYXRhOworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAogCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJbG9jYWwtPmZpbHRlcl9mbGFncyB8PSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKQEAgLTY3MywxMyArNDU4LDIxIEBACiAKIAogaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQorCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCisJaWYgKCFyZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAmJiBsb2NhbC0+c2Nhbl9yZXEgIT0gcmVxKQorCQlyZXR1cm4gLUVCVVNZOworCisJbG9jYWwtPnNjYW5fcmVxID0gcmVxOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIHNzaWQsIHNzaWRfbGVuKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCByZXEpOwogCiAJLyoKIAkgKiBTVEEgaGFzIGEgc3RhdGUgbWFjaGluZSB0aGF0IG1pZ2h0IG5lZWQgdG8gZGVmZXIgc2Nhbm5pbmcKQEAgLTY5MywyNDIgKzQ4Niw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCi0JaWZzdGEtPnNjYW5fc3NpZF9sZW4gPSBzc2lkX2xlbjsKLQlpZiAoc3NpZF9sZW4pCi0JCW1lbWNweShpZnN0YS0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZzdGEtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAogCXJldHVybiAwOwogfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX2FkZF9pZXMoc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAotCQkJCSAgIGNoYXIgKipjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQotewotCXU4ICpwb3MsICplbmQsICpuZXh0OwotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0KLQlpZiAoYnNzID09IE5VTEwgfHwgYnNzLT5pZXMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiBuZWVkZWQsIGZyYWdtZW50IHRoZSBJRXMgYnVmZmVyIChhdCBJRSBib3VuZGFyaWVzKSBpbnRvIHNob3J0Ci0JICogZW5vdWdoIGZyYWdtZW50cyB0byBmaXQgaW50byBJV19HRU5FUklDX0lFX01BWCBvY3RldCBtZXNzYWdlcy4KLQkgKi8KLQlwb3MgPSBic3MtPmllczsKLQllbmQgPSBwb3MgKyBic3MtPmllc19sZW47Ci0KLQl3aGlsZSAoZW5kIC0gcG9zID4gSVdfR0VORVJJQ19JRV9NQVgpIHsKLQkJbmV4dCA9IHBvcyArIDIgKyBwb3NbMV07Ci0JCXdoaWxlIChuZXh0ICsgMiArIG5leHRbMV0gLSBwb3MgPCBJV19HRU5FUklDX0lFX01BWCkKLQkJCW5leHQgPSBuZXh0ICsgMiArIG5leHRbMV07Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXh0IC0gcG9zOwotCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAotCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKLQotCQlwb3MgPSBuZXh0OwotCX0KLQotCWlmIChlbmQgPiBwb3MpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBlbmQgLSBwb3M7Ci0JCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCi0JCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOwotCX0KLX0KLQotCi1zdGF0aWMgY2hhciAqCi1pZWVlODAyMTFfc2Nhbl9yZXN1bHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MsCi0JCSAgICAgIGNoYXIgKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCi17Ci0Jc3RydWN0IGl3X2V2ZW50IGl3ZTsKLQljaGFyICpidWY7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkgICAgICAgYnNzLT5sYXN0X3VwZGF0ZSArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQotCQlyZXR1cm4gY3VycmVudF9ldjsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfQUREUl9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWlmIChic3NfbWVzaF9jZmcoYnNzKSkgewotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzc19tZXNoX2lkX2xlbihic3MpOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGJzc19tZXNoX2lkKGJzcykpOwotCX0gZWxzZSB7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gYnNzLT5zc2lkX2xlbjsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBic3MtPnNzaWQpOwotCX0KLQotCWlmIChic3MtPmNhcGFiaWxpdHkgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKQotCSAgICB8fCBic3NfbWVzaF9jZmcoYnNzKSkgewotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCWlmIChic3NfbWVzaF9jZmcoYnNzKSkKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01FU0g7Ci0JCWVsc2UgaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPmZyZXEpOwotCWl3ZS51LmZyZXEuZSA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JaXdlLnUuZnJlcS5tID0gYnNzLT5mcmVxOwotCWl3ZS51LmZyZXEuZSA9IDY7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfRlJFUV9MRU4pOwotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwucXVhbCA9IGJzcy0+cXVhbDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWw7Ci0JaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2U7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJICBJV19FVl9RVUFMX0xFTik7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgIiIpOwotCi0JaWVlZTgwMjExX3NjYW5fYWRkX2llcyhpbmZvLCBic3MsICZjdXJyZW50X2V2LCBlbmRfYnVmKTsKLQotCWlmIChic3MtPnN1cHBfcmF0ZXNfbGVuID4gMCkgewotCQkvKiBkaXNwbGF5IGFsbCBzdXBwb3J0ZWQgcmF0ZXMgaW4gcmVhZGFibGUgZm9ybWF0ICovCi0JCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwotCQlpbnQgaTsKLQotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGJzcy0+c3VwcF9yYXRlc19sZW47IGkrKykgewotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoYnNzLT5zdXBwX3JhdGVzW2ldICYKLQkJCQkJCQkweDdmKSAqIDUwMDAwMCk7Ci0JCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwKLQkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQkJfQotCQljdXJyZW50X2V2ID0gcDsKLQl9Ci0KLQlidWYgPSBrbWFsbG9jKDMwLCBHRlBfQVRPTUlDKTsKLQlpZiAoYnVmKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQlzcHJpbnRmKGJ1ZiwgInRzZj0lMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoYnNzLT50aW1lc3RhbXApKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQlzcHJpbnRmKGJ1ZiwgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gYnNzLT5sYXN0X3VwZGF0ZSkpOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCSAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKLQkJa2ZyZWUoYnVmKTsKLQl9Ci0KLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJdTggKmNmZyA9IGJzc19tZXNoX2NmZyhic3MpOwotCQlidWYgPSBrbWFsbG9jKDUwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJ1ZikgewotCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCQkJc3ByaW50ZihidWYsICJNZXNoIG5ldHdvcmsgKHZlcnNpb24gJWQpIiwgY2ZnWzBdKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOwotCQkJc3ByaW50ZihidWYsICJQYXRoIFNlbGVjdGlvbiBQcm90b2NvbCBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMV0sIGNmZ1syXSwgY2ZnWzNdLAotCQkJCQkJCWNmZ1s0XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gTWV0cmljIElEOiAiCi0JCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1s1XSwgY2ZnWzZdLCBjZmdbN10sCi0JCQkJCQkJY2ZnWzhdKTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgIGVuZF9idWYsCi0JCQkJCQkJICAmaXdlLCBidWYpOwotCQkJc3ByaW50ZihidWYsICJDb25nZXN0aW9uIENvbnRyb2wgTW9kZSBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbOV0sIGNmZ1sxMF0sCi0JCQkJCQkJY2ZnWzExXSwgY2ZnWzEyXSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiQ2hhbm5lbCBQcmVjZWRlbmNlOiAiCi0JCQkJIjB4JTAyWCUwMlglMDJYJTAyWCIsIGNmZ1sxM10sIGNmZ1sxNF0sCi0JCQkJCQkJY2ZnWzE1XSwgY2ZnWzE2XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCWtmcmVlKGJ1Zik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotCi1pbnQgaWVlZTgwMjExX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0JY2hhciAqY3VycmVudF9ldiA9IGJ1ZjsKLQljaGFyICplbmRfYnVmID0gYnVmICsgbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZsb2NhbC0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGJ1ZiArIGxlbiAtIGN1cnJlbnRfZXYgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQotCQljdXJyZW50X2V2ID0gaWVlZTgwMjExX3NjYW5fcmVzdWx0KGxvY2FsLCBpbmZvLCBic3MsCi0JCQkJCQkgICAgICAgY3VycmVudF9ldiwgZW5kX2J1Zik7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBjdXJyZW50X2V2IC0gYnVmOwotfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCmluZGV4IGY3MmJhZDYuLjVmN2EyNjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYworKysgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkJCUlFRUU4MDIxMV9TUENUX01TUl9SUFJUX01PREVfUkVGVVNFRDsKIAltc3JfcmVwb3J0LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50Lm1zcl9lbGVtLnR5cGUgPSByZXF1ZXN0X2llLT50eXBlOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogfQogCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTg0LDMgKzg0LDEwNCBAQAogCQkJbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAogCQkJbWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5kaWFsb2dfdG9rZW4pOwogfQorCit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC5jaHN3aXRjaF93b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm47CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChzZGF0YS0+bG9jYWwsIGlmbWdkLT5ic3NpZCwKKwkJCQkgICBzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJaWYgKCFic3MpCisJCWdvdG8gZXhpdDsKKworCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5jc2FfY2hhbm5lbDsKKwkvKiBYWFg6IHNob3VsZG4ndCByZWFsbHkgbW9kaWZ5IGNmZzgwMjExLW93bmVkIGRhdGEhICovCisJaWYgKCFpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKQorCQlic3MtPmNic3MuY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsOworCisJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOworZXhpdDoKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOworfQorCit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm5ld19jaDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlpbnQgbmV3X2ZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koc3dfZWxlbS0+bmV3X2NoX251bSk7CisKKwkvKiBGSVhNRTogSGFuZGxlIEFESE9DIGxhdGVyICovCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAoaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQorCQlyZXR1cm47CisKKwlpZiAoc2RhdGEtPmxvY2FsLT5zd19zY2FubmluZyB8fCBzZGF0YS0+bG9jYWwtPmh3X3NjYW5uaW5nKQorCQlyZXR1cm47CisKKwkvKiBEaXNyZWdhcmQgc3Vic2VxdWVudCBiZWFjb25zIGlmIHdlIGFyZSBhbHJlYWR5IHJ1bm5pbmcgYSB0aW1lcgorCSAgIHByb2Nlc3NpbmcgYSBDU0EgKi8KKworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRCkKKwkJcmV0dXJuOworCisJbmV3X2NoID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHNkYXRhLT5sb2NhbC0+aHcud2lwaHksIG5ld19mcmVxKTsKKwlpZiAoIW5ld19jaCB8fCBuZXdfY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworCXNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWwgPSBuZXdfY2g7CisKKwlpZiAoc3dfZWxlbS0+Y291bnQgPD0gMSkgeworCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOworCX0gZWxzZSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCisJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVEOworCQltb2RfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwKKwkJCSAgamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoc3dfZWxlbS0+Y291bnQgKgorCQkJCQkgICBic3MtPmNic3MuYmVhY29uX2ludGVydmFsKSk7CisJfQorfQorCit2b2lkIGllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgdTE2IGNhcGFiX2luZm8sIHU4ICpwd3JfY29uc3RyX2VsZW0sCisJCQkJIHU4IHB3cl9jb25zdHJfZWxlbV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnNkYXRhLT5sb2NhbC0+aHcuY29uZjsKKworCWlmICghKGNhcGFiX2luZm8gJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkpCisJCXJldHVybjsKKworCS8qIFBvd2VyIGNvbnN0cmFpbnQgSUUgbGVuZ3RoIHNob3VsZCBiZSAxIG9jdGV0ICovCisJaWYgKHB3cl9jb25zdHJfZWxlbV9sZW4gIT0gMSkKKwkJcmV0dXJuOworCisJaWYgKCgqcHdyX2NvbnN0cl9lbGVtIDw9IGNvbmYtPmNoYW5uZWwtPm1heF9wb3dlcikgJiYKKwkgICAgKCpwd3JfY29uc3RyX2VsZW0gIT0gc2RhdGEtPmxvY2FsLT5wb3dlcl9jb25zdHJfbGV2ZWwpKSB7CisJCXNkYXRhLT5sb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID0gKnB3cl9jb25zdHJfZWxlbTsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCAxMGM1NTM5Li40YmEzYzU0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTk0LDEyICsxOTQsNTMgQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCWZvciAoaSA9IDA7IGkgPCAgU1RBX1RJRF9OVU07IGkrKykgeworCQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcng7CisJCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKKwogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldKQotCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zZXNzaW9uX3RpbWVyKTsKLQkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0pCi0JCSAgZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPmFkZGJhX3Jlc3BfdGltZXIpOworCQl0aWRfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldOworCQkvKiBNYWtlIHN1cmUgdGltZXIgd29uJ3QgZnJlZSB0aGUgdGlkX3J4IHN0cnVjdCwgc2VlIGJlbG93ICovCisJCWlmICh0aWRfcngpCisJCQl0aWRfcngtPnNodXRkb3duID0gdHJ1ZTsKKworCQkvKgorCQkgKiBUaGUgc3RvcCBjYWxsYmFjayBjYW5ub3QgZmluZCB0aGlzIHN0YXRpb24gYW55IG1vcmUsIGJ1dAorCQkgKiBpdCBkaWRuJ3QgY29tcGxldGUgaXRzIHdvcmsgLS0gc3RhcnQgdGhlIHF1ZXVlIGlmIG5lY2Vzc2FyeQorCQkgKi8KKwkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0gJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSyAmJgorCQkgICAgc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgJiYKKwkJICAgIGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oJmxvY2FsLT5odywKKwkJCQlsb2NhbC0+aHcucXVldWVzICsgc3RhLT50aWRfdG9fdHhfcVtpXSwKKwkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCisJCS8qCisJCSAqIE91dHNpZGUgc3BpbmxvY2sgLSBzaHV0ZG93biBpcyB0cnVlIG5vdyBzbyB0aGF0IHRoZSB0aW1lcgorCQkgKiB3b24ndCBmcmVlIHRpZF9yeCwgd2UgaGF2ZSB0byBkbyB0aGF0IG5vdy4gQ2FuJ3QgbGV0IHRoZQorCQkgKiB0aW1lciBkbyBpdCBiZWNhdXNlIHdlIGhhdmUgdG8gc3luYyB0aGUgdGltZXIgb3V0c2lkZSB0aGUKKwkJICogbG9jayB0aGF0IGl0IHRha2VzIGl0c2VsZi4KKwkJICovCisJCWlmICh0aWRfcngpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZ0aWRfcngtPnNlc3Npb25fdGltZXIpOworCQkJa2ZyZWUodGlkX3J4KTsKKwkJfQorCisJCS8qCisJCSAqIE5vIG5lZWQgdG8gZG8gc3VjaCBjb21wbGljYXRpb25zIGZvciBUWCBhZ2cgc2Vzc2lvbnMsIHRoZQorCQkgKiBwYXRoIGxlYWRpbmcgdG8gZnJlZWluZyB0aGUgdGlkX3R4IHN0cnVjdCBnb2VzIHZpYSBhIGNhbGwKKwkJICogZnJvbSB0aGUgZHJpdmVyLCBhbmQgdGh1cyBuZWVkcyB0byBsb29rIHVwIHRoZSBzdGEgc3RydWN0CisJCSAqIGFnYWluLCB3aGljaCBjYW5ub3QgYmUgZm91bmQgd2hlbiB3ZSBnZXQgaGVyZS4gSGVuY2UsIHdlCisJCSAqIGp1c3QgbmVlZCB0byBkZWxldGUgdGhlIHRpbWVyIGFuZCBmcmVlIHRoZSBhZ2dyZWdhdGlvbgorCQkgKiBpbmZvOyB3ZSB3b24ndCBiZSB0ZWxsaW5nIHRoZSBwZWVyIGFib3V0IGl0IHRoZW4gYnV0IHRoYXQKKwkJICogZG9lc24ndCBtYXR0ZXIgaWYgd2UncmUgbm90IHRhbGtpbmcgdG8gaXQgYWdhaW4gYW55d2F5LgorCQkgKi8KKwkJdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXTsKKwkJaWYgKHRpZF90eCkgeworCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF90eC0+YWRkYmFfcmVzcF90aW1lcik7CisJCQlrZnJlZSh0aWRfdHgpOworCQl9CiAJfQogCiAJX19zdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpOwpAQCAtMjQ2LDggKzI4Nyw3IEBACiAJCSAqIGVuYWJsZSBzZXNzaW9uX3RpbWVyJ3MgZGF0YSBkaWZmZXJlbnRpYXRpb24uIHJlZmVyIHRvCiAJCSAqIHN0YV9yeF9hZ2dfc2Vzc2lvbl90aW1lcl9leHBpcmVkIGZvciB1c2VhZ2UgKi8KIAkJc3RhLT50aW1lcl90b190aWRbaV0gPSBpOwotCQkvKiB0aWQgdG8gdHggcXVldWU6IGluaXRpYWxpemUgYWNjb3JkaW5nIHRvIEhXICgwIGlzIHZhbGlkKSAqLwotCQlzdGEtPnRpZF90b190eF9xW2ldID0gaWVlZTgwMjExX251bV9xdWV1ZXMoJmxvY2FsLT5odyk7CisJCXN0YS0+dGlkX3RvX3R4X3FbaV0gPSAtMTsKIAkJLyogcnggKi8KIAkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFtpXSA9IEhUX0FHR19TVEFURV9JRExFOwogCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggZTQ5YTViOS4uMWY0NTU3MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTM0LDYgKzM0LDcgQEAKICAqIEBXTEFOX1NUQV9DTEVBUl9QU19GSUxUOiBDbGVhciBQUyBmaWx0ZXIgaW4gaGFyZHdhcmUgKHVzaW5nIHRoZQogICoJSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUIGNvbnRyb2wgZmxhZykgd2hlbiB0aGUgbmV4dAogICoJZnJhbWUgdG8gdGhpcyBzdGF0aW9uIGlzIHRyYW5zbWl0dGVkLgorICogQFdMQU5fU1RBX01GUDogTWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIGlzIHVzZWQgd2l0aCB0aGlzIFNUQS4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewogCVdMQU5fU1RBX0FVVEgJCT0gMTw8MCwKQEAgLTQ2LDYgKzQ3LDcgQEAKIAlXTEFOX1NUQV9XRFMJCT0gMTw8NywKIAlXTEFOX1NUQV9QU1BPTEwJCT0gMTw8OCwKIAlXTEFOX1NUQV9DTEVBUl9QU19GSUxUCT0gMTw8OSwKKwlXTEFOX1NUQV9NRlAJCT0gMTw8MTAsCiB9OwogCiAjZGVmaW5lIFNUQV9USURfTlVNIDE2CkBAIC02Myw3ICs2NSw2IEBACiAjZGVmaW5lIEhUX0FHR19TVEFURV9PUEVSQVRJT05BTAkoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8CVwKIAkJCQkJIEhUX0FEREJBX0RSVl9SRUFEWV9NU0sgfAlcCiAJCQkJCSBIVF9BRERCQV9SRUNFSVZFRF9NU0spCi0jZGVmaW5lIEhUX0FHR19TVEFURV9ERUJVR0ZTX0NUTAlCSVQoNykKIAogLyoqCiAgKiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IC0gVElEIGFnZ3JlZ2F0aW9uIGluZm9ybWF0aW9uIChUeCkuCkBAIC04Nyw4ICs4OCw5IEBACiAgKiBAc3RvcmVkX21wZHVfbnVtOiBudW1iZXIgb2YgTVBEVXMgaW4gcmVvcmRlcmluZyBidWZmZXIKICAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGJ1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgaW5jb21pbmcgQS1NUERVcwotICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlLgorICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlIChpbiBUVXMpLgogICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCisgKiBAc2h1dGRvd246IHRoaXMgc2Vzc2lvbiBpcyBiZWluZyBzaHV0IGRvd24gZHVlIHRvIFNUQSByZW1vdmFsCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfcnggewogCXN0cnVjdCBza19idWZmICoqcmVvcmRlcl9idWY7CkBAIC05OSw2ICsxMDEsNyBAQAogCXUxNiBidWZfc2l6ZTsKIAl1MTYgdGltZW91dDsKIAl1OCBkaWFsb2dfdG9rZW47CisJYm9vbCBzaHV0ZG93bjsKIH07CiAKIC8qKgpAQCAtMTk4LDcgKzIwMSw3IEBACiAgKiBAdGlkX3NlcTogcGVyLVRJRCBzZXF1ZW5jZSBudW1iZXJzIGZvciBzZW5kaW5nIHRvIHRoaXMgU1RBCiAgKiBAYW1wZHVfbWxtZTogQS1NUERVIHN0YXRlIG1hY2hpbmUgc3RhdGUKICAqIEB0aW1lcl90b190aWQ6IGlkZW50aXR5IG1hcHBpbmcgdG8gSUQgdGltZXJzCi0gKiBAdGlkX3RvX3R4X3E6IG1hcCB0aWQgdG8gdHggcXVldWUKKyAqIEB0aWRfdG9fdHhfcTogbWFwIHRpZCB0byB0eCBxdWV1ZSAoaW52YWxpZCA9PSBuZWdhdGl2ZSB2YWx1ZXMpCiAgKiBAbGxpZDogTG9jYWwgbGluayBJRAogICogQHBsaWQ6IFBlZXIgbGluayBJRAogICogQHJlYXNvbjogQ2FuY2VsIHJlYXNvbiBvbiBQTElOS19IT0xESU5HIHN0YXRlCkBAIC0yNzMsNyArMjc2LDcgQEAKIAkgKi8KIAlzdHJ1Y3Qgc3RhX2FtcGR1X21sbWUgYW1wZHVfbWxtZTsKIAl1OCB0aW1lcl90b190aWRbU1RBX1RJRF9OVU1dOwotCXU4IHRpZF90b190eF9xW1NUQV9USURfTlVNXTsKKwlzOCB0aWRfdG9fdHhfcVtTVEFfVElEX05VTV07CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCS8qCkBAIC0zODIsOCArMzg1LDYgQEAKIH0KIAogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50bHkgcmVnaXN0ZXJlZCBzdGF0aW9ucyAqLwotI2RlZmluZSBNQVhfU1RBX0NPVU5UIDIwMDcKIAogI2RlZmluZSBTVEFfSEFTSF9TSVpFIDI1NgogI2RlZmluZSBTVEFfSEFTSChzdGEpIChzdGFbNV0pCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDM3ZTNkNWVmLi40NTcyMzhhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBJRUVFODAyMTFfVFhfT0sJCTAKICNkZWZpbmUgSUVFRTgwMjExX1RYX0FHQUlOCTEKICNkZWZpbmUgSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU4JMgorI2RlZmluZSBJRUVFODAyMTFfVFhfUEVORElORwkzCiAKIC8qIG1pc2MgdXRpbHMgKi8KIApAQCAtMzMwLDYgKzMzMSwyMiBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfdXNlX21mcChfX2xlMTYgZmMsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGEgPT0gTlVMTCB8fCAhdGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9NRlApKQorCQlyZXR1cm4gMDsKKworCWlmICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKQorCQkJCQkgICAgc2tiLT5kYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQKIGllZWU4MDIxMV90eF9oX3VuaWNhc3RfcHNfYnVmKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CkBAIC00MDksMTEgKzQyNiwxNyBAQAogCQl0eC0+a2V5ID0gTlVMTDsKIAllbHNlIGlmICh0eC0+c3RhICYmIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnN0YS0+a2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQkgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpKSkKKwkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICgoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zZGF0YS0+ZGVmYXVsdF9rZXkpKSkKIAkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICh0eC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKIAkJICh0eC0+c2tiLT5wcm90b2NvbCAhPSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSAmJgotCQkgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CisJCSAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgJiYKKwkJICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcikgfHwKKwkJICAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAgIHR4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3ModHgtPnN0YSwgV0xBTl9TVEFfTUZQKSkpKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmVuY3J5cHRlZCk7CiAJCXJldHVybiBUWF9EUk9QOwogCX0gZWxzZQpAQCAtNDI4LDEwICs0NTEsMTkgQEAKIAkJCWlmIChpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJCWJyZWFrOwogCQljYXNlIEFMR19US0lQOgotCQljYXNlIEFMR19DQ01QOgogCQkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQkJdHgtPmtleSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBBTEdfQ0NNUDoKKwkJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCQkgICAgIWllZWU4MDIxMV91c2VfbWZwKGhkci0+ZnJhbWVfY29udHJvbCwgdHgtPnN0YSwKKwkJCQkJICAgICAgIHR4LT5za2IpKQorCQkJCXR4LT5rZXkgPSBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgQUxHX0FFU19DTUFDOgorCQkJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJCXR4LT5rZXkgPSBOVUxMOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTc4OSw2ICs4MjEsOCBAQAogCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQodHgpOwogCWNhc2UgQUxHX0NDTVA6CiAJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdCh0eCk7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQodHgpOwogCX0KIAogCS8qIG5vdCByZWFjaGVkICovCkBAIC04NDQsNyArODc4LDYgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLQogLyogYWN0dWFsIHRyYW5zbWl0IHBhdGggKi8KIAogLyoKQEAgLTk4NCwxMiArMTAxNywyMCBAQAogCXR4LT5zdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOwogCiAJaWYgKHR4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gKnFjICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnR4LT5zdGEtPmxvY2ssIGZsYWdzKTsKIAkJc3RhdGUgPSAmdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCisJCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0FNUERVOworCQkJaWYgKGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCisJCQkJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKAorCQkJCQlza2IsIHR4LT5sb2NhbC0+aHcucXVldWVzICsKKwkJCQkJICAgICB0eC0+c3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eC0+c3RhLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CkBAIC0xMDUzLDkgKzEwOTQsOSBAQAogCWludCByZXQsIGk7CiAKIAlpZiAoc2tiKSB7Ci0JCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBza2IpKQotCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKLQkJaW5mbyA9ICBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWlmIChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCgmbG9jYWwtPmh3LAorCQkJCQkgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpKQorCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9QRU5ESU5HOwogCiAJCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwgc2tiKTsKIAkJaWYgKHJldCkKQEAgLTEwNzAsOCArMTExMSw4IEBACiAJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC0+ZXh0cmFfZnJhZ1tpXSk7CiAJCQlpbmZvLT5mbGFncyAmPSB+KElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCB8CiAJCQkJCSBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKTsKLQkJCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LAotCQkJCQkJICAgdHgtPmV4dHJhX2ZyYWdbaV0pKQorCQkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKCZsb2NhbC0+aHcsCisJCQkJCXNrYl9nZXRfcXVldWVfbWFwcGluZyh0eC0+ZXh0cmFfZnJhZ1tpXSkpKQogCQkJCXJldHVybiBJRUVFODAyMTFfVFhfRlJBR19BR0FJTjsKIAogCQkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLApAQCAtMTE4MSw4ICsxMjIyLDkgQEAKIAkJICogcXVldWVzLCB0aGVyZSdzIG5vIHJlYXNvbiBmb3IgYSBkcml2ZXIgdG8gcmVqZWN0CiAJCSAqIGEgZnJhbWUgdGhlcmUsIHdhcm4gYW5kIGRyb3AgaXQuCiAJCSAqLwotCQlpZiAoV0FSTl9PTihpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKQotCQkJZ290byBkcm9wOworCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9QRU5ESU5HKQorCQkJaWYgKFdBUk5fT04oaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkKKwkJCQlnb3RvIGRyb3A7CiAKIAkJc3RvcmUgPSAmbG9jYWwtPnBlbmRpbmdfcGFja2V0W3F1ZXVlXTsKIApAQCAtMTI5OCw2ICsxMzQwLDE5IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmICgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSAmJgorCSAgICBsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QUyk7CisJCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsCisJCQkJCSZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOworCQl9CisKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCSAgICAgICAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwl9CisKIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CiAKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7CkBAIC0xMzkyLDEwICsxNDQ3LDMxIEBACiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpwcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKilza2ItPmRhdGE7CiAJdTE2IGxlbl9ydGhkcjsKIAorCS8qCisJICogRnJhbWUgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkIGlmIGJlYWNvbmluZyBpcyBub3QgYWxsb3dlZAorCSAqIG9yIGlmIHdlIG5lZWQgcmFkYXIgZGV0ZWN0aW9uLiBCZWFjb25pbmcgaXMgdXN1YWxseSBub3QgYWxsb3dlZCB3aGVuCisJICogdGhlIG1vZGUgb3Igb3BlcmF0aW9uIChBZGhvYywgQVAsIE1lc2gpIGRvZXMgbm90IHN1cHBvcnQgREZTLgorCSAqIFBhc3NpdmUgc2NhbiBpcyBhbHNvIHVzZWQgaW4gd29ybGQgcmVndWxhdG9yeSBkb21haW5zIHdoZXJlCisJICogeW91ciBjb3VudHJ5IGlzIG5vdCBrbm93biBhbmQgYXMgc3VjaCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcworCSAqIE5PIFRYIHVubGVzcyB0aGUgY2hhbm5lbCBpcyBleHBsaWNpdGx5IGFsbG93ZWQgaW4gd2hpY2ggY2FzZQorCSAqIHlvdXIgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiB3b3VsZCBub3QgaGF2ZSB0aGUgcGFzc2l2ZSBzY2FuCisJICogZmxhZy4KKwkgKgorCSAqIFNpbmNlIEFQIG1vZGUgdXNlcyBtb25pdG9yIGludGVyZmFjZXMgdG8gaW5qZWN0L1RYIG1hbmFnZW1lbnQKKwkgKiBmcmFtZXMgd2UgY2FuIG1ha2UgQVAgbW9kZSB0aGUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBvbmNlIGl0CisJICogc3VwcG9ydHMgcmFkYXIgZGV0ZWN0aW9uIGFzIGl0cyBpbXBsZW1lbnRhdGlvbiBjYW4gZGVhbCB3aXRoCisJICogcmFkYXIgZGV0ZWN0aW9uIGJ5IGl0c2VsZi4gV2UgY2FuIGRvIHRoYXQgbGF0ZXIgYnkgYWRkaW5nIGEKKwkgKiBtb25pdG9yIGZsYWcgaW50ZXJmYWNlcyB1c2VkIGZvciBBUCBzdXBwb3J0LgorCSAqLworCWlmICgoY2hhbi0+ZmxhZ3MgJiAoSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkgICAgIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpKQorCQlnb3RvIGZhaWw7CisKIAkvKiBjaGVjayBmb3Igbm90IGV2ZW4gaGF2aW5nIHRoZSBmaXhlZCByYWRpb3RhcCBoZWFkZXIgcGFydCAqLwogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlcikpKQogCQlnb3RvIGZhaWw7IC8qIHRvbyBzaG9ydCB0byBiZSBwb3NzaWJseSB2YWxpZCAqLwpAQCAtMTQ3OSwxOSArMTU1NSw2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUykgJiYKLQkgICAgbG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKLQkJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKLQkJCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMpOwotCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLAotCQkJCSAgICZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOwotCQl9Ci0KLQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmR5bmFtaWNfcHNfdGltZW91dCkpOwotCX0KLQogCW5oX3BvcyA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhOwogCWhfcG9zID0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YTsKIApAQCAtMTU3Miw3ICsxNjM1LDcgQEAKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkvKiBCU1NJRCBTQSBEQSAqLwotCQltZW1jcHkoaGRyLmFkZHIxLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKQEAgLTE1ODEsNyArMTY0NCw3IEBACiAJCS8qIERBIFNBIEJTU0lEICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwotCQltZW1jcHkoaGRyLmFkZHIzLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci5hZGRyMywgc2RhdGEtPnUuaWJzcy5ic3NpZCwgRVRIX0FMRU4pOwogCQloZHJsZW4gPSAyNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE4NjcsNyArMTkzMCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwICphcCA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gTlVMTDsKIAlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwpAQCAtMTkxOSwxMyArMTk4MSwxMyBAQAogCQl9IGVsc2UKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCQlpZiAoIWlmc3RhLT5wcm9iZV9yZXNwKQorCQlpZiAoIWlmaWJzcy0+cHJvYmVfcmVzcCkKIAkJCWdvdG8gb3V0OwogCi0JCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfQVRPTUlDKTsKKwkJc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcm9iZV9yZXNwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpCiAJCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZmI4OWUxZC4uZTA0MzFhMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC00MSw2ICs0MSwxNSBAQAogY29uc3QgdW5zaWduZWQgY2hhciBicmlkZ2VfdHVubmVsX2hlYWRlcltdIF9fYWxpZ25lZCgyKSA9CiAJeyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4IH07CiAKK3N0cnVjdCBpZWVlODAyMTFfaHcgKndpcGh5X3RvX2llZWU4MDIxMV9odyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCUJVR19PTighd2lwaHkpOworCisJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlyZXR1cm4gJmxvY2FsLT5odzsKK30KK0VYUE9SVF9TWU1CT0wod2lwaHlfdG9faWVlZTgwMjExX2h3KTsKIAogdTggKmllZWU4MDIxMV9nZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgc2l6ZV90IGxlbiwKIAkJCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKQEAgLTMzNSwxNSArMzQ0LDM2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIGFtcGR1IHF1ZXVlcyAqLwotCWlmIChxdWV1ZSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoaHcpKSB7Ci0JCV9fY2xlYXJfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKLQotCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gIT0gMCkKLQkJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCWlmIChxdWV1ZSA+PSBody0+cXVldWVzKSB7CisJCWlmIChsb2NhbC0+YW1wZHVfYWNfcXVldWVbcXVldWUgLSBody0+cXVldWVzXSA8IDApCiAJCQlyZXR1cm47CisKKwkJLyoKKwkJICogZm9yIHZpcnR1YWwgYWdncmVnYXRpb24gcXVldWVzLCB3ZSBuZWVkIHRvIHJlZmNvdW50IHRoZQorCQkgKiBpbnRlcm5hbCBtYWM4MDIxMSBkaXNhYmxlIChtdWx0aXBsZSB0aW1lcyEpLCBrZWVwIHRyYWNrIG9mCisJCSAqIGRyaXZlciBkaXNhYmxlIF9hbmRfIG1ha2Ugc3VyZSB0aGUgcmVndWxhciBxdWV1ZSBpcworCQkgKiBhY3R1YWxseSBlbmFibGVkLgorCQkgKi8KKwkJaWYgKHJlYXNvbiA9PSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pCisJCQlsb2NhbC0+YW1kcHVfYWNfc3RvcF9yZWZjbnRbcXVldWUgLSBody0+cXVldWVzXS0tOworCQllbHNlCisJCQlfX2NsZWFyX2JpdChyZWFzb24sICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisKKwkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdIHx8CisJCSAgICBsb2NhbC0+YW1kcHVfYWNfc3RvcF9yZWZjbnRbcXVldWUgLSBody0+cXVldWVzXSkKKwkJCXJldHVybjsKKworCQkvKiBub3cgZ28gb24gdG8gdHJlYXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVndWxhciBxdWV1ZSAqLworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlyZWFzb24gPSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT047CiAJfQogCisJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCisJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdICE9IDApCisJCS8qIHNvbWVvbmUgc3RpbGwgaGFzIHRoaXMgcXVldWUgc3RvcHBlZCAqLworCQlyZXR1cm47CisKIAlpZiAodGVzdF9iaXQocXVldWUsIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpIHsKIAkJc2V0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bik7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwpAQCAtMzc1LDkgKzQwNSwyNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JLyogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBhbXBkdSBxdWV1ZXMgKi8KLQlpZiAocXVldWUgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKGh3KSkKLQkJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKwlpZiAocXVldWUgPj0gaHctPnF1ZXVlcykgeworCQlpZiAobG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3F1ZXVlIC0gaHctPnF1ZXVlc10gPCAwKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIGZvciB2aXJ0dWFsIGFnZ3JlZ2F0aW9uIHF1ZXVlcywgd2UgbmVlZCB0byByZWZjb3VudCB0aGUKKwkJICogaW50ZXJuYWwgbWFjODAyMTEgZGlzYWJsZSAobXVsdGlwbGUgdGltZXMhKSwga2VlcCB0cmFjayBvZgorCQkgKiBkcml2ZXIgZGlzYWJsZSBfYW5kXyBtYWtlIHN1cmUgdGhlIHJlZ3VsYXIgcXVldWUgaXMKKwkJICogYWN0dWFsbHkgZW5hYmxlZC4KKwkJICovCisJCWlmIChyZWFzb24gPT0gSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKQorCQkJbG9jYWwtPmFtZHB1X2FjX3N0b3BfcmVmY250W3F1ZXVlIC0gaHctPnF1ZXVlc10rKzsKKwkJZWxzZQorCQkJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKworCQkvKiBub3cgZ28gb24gdG8gdHJlYXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVndWxhciBxdWV1ZSAqLworCQlxdWV1ZSA9IGxvY2FsLT5hbXBkdV9hY19xdWV1ZVtxdWV1ZSAtIGh3LT5xdWV1ZXNdOworCQlyZWFzb24gPSBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT047CisJfQorCisJX19zZXRfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKIAogCW5ldGlmX3N0b3Bfc3VicXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKIH0KQEAgLTQwOSw3ICs0NTcsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKIAkJX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaSwgcmVhc29uKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CkBAIC00MjUsNiArNDczLDE2IEBACiBpbnQgaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHF1ZXVlID49IGh3LT5xdWV1ZXMpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCXF1ZXVlID0gbG9jYWwtPmFtcGR1X2FjX3F1ZXVlW3F1ZXVlIC0gaHctPnF1ZXVlc107CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCWlmIChxdWV1ZSA8IDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlyZXR1cm4gX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKTsKQEAgLTQ1OSw3ICs1MTcsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCi0JcnRubF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CkBAIC00ODAsNyArNTM4LDcgQEAKIAkJCQkgJnNkYXRhLT52aWYpOwogCX0KIAotCXJ0bmxfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyk7CiAKQEAgLTY1Myw2ICs3MTEsMTAgQEAKIAkJCWVsZW1zLT5wd3JfY29uc3RyX2VsZW0gPSBwb3M7CiAJCQllbGVtcy0+cHdyX2NvbnN0cl9lbGVtX2xlbiA9IGVsZW47CiAJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMOgorCQkJZWxlbXMtPnRpbWVvdXRfaW50ID0gcG9zOworCQkJZWxlbXMtPnRpbWVvdXRfaW50X2xlbiA9IGVsZW47CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC02ODgsNiArNzUwLDI3IEBACiAJCWxvY2FsLT5vcHMtPmNvbmZfdHgobG9jYWxfdG9faHcobG9jYWwpLCBpLCAmcXBhcmFtKTsKIH0KIAordm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgY29uc3Qgc2l6ZV90IHN1cHBfcmF0ZXNfbGVuLAorCQkJCSAgY29uc3QgdTggKnN1cHBfcmF0ZXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJaW50IGksIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMDsKKworCS8qIGNmLiBJRUVFIDgwMi4xMSA5LjIuMTIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykKKwkJaWYgKChzdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQorCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOworCisJaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKKwkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisJZWxzZQorCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CisKKwlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKK30KKwogdm9pZCBpZWVlODAyMTFfdHhfc2tiKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICBpbnQgZW5jcnlwdCkKIHsKQEAgLTcyNywxMiArODEwLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdTY0IGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCit1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXU2NCBtYW5kYXRvcnlfcmF0ZXM7CisJdTMyIG1hbmRhdG9yeV9yYXRlczsKIAllbnVtIGllZWU4MDIxMV9yYXRlX2ZsYWdzIG1hbmRhdG9yeV9mbGFnOwogCWludCBpOwogCkBAIC03NTQsMyArODM3LDE2MSBAQAogCQkJbWFuZGF0b3J5X3JhdGVzIHw9IEJJVChpKTsKIAlyZXR1cm4gbWFuZGF0b3J5X3JhdGVzOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsCisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAorCQkJIGNvbnN0IHU4ICpic3NpZCwgaW50IGVuY3J5cHQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJY29uc3QgdTggKmllX2F1dGggPSBOVUxMOworCWludCBpZV9hdXRoX2xlbiA9IDA7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWVfYXV0aF9sZW4gPSBzZGF0YS0+dS5tZ2QuaWVfYXV0aF9sZW47CisJCWllX2F1dGggPSBzZGF0YS0+dS5tZ2QuaWVfYXV0aDsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCisJCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4gKyBpZV9hdXRoX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhdXRoICIKKwkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0ICsgNik7CisJbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7CisJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7CisJaWYgKGVuY3J5cHQpCisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihhdXRoX2FsZyk7CisJbWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7CisJbWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoMCk7CisJaWYgKGV4dHJhKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGV4dHJhX2xlbiksIGV4dHJhLCBleHRyYV9sZW4pOworCWlmIChpZV9hdXRoKQorCQltZW1jcHkoc2tiX3B1dChza2IsIGllX2F1dGhfbGVuKSwgaWVfYXV0aCwgaWVfYXV0aF9sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCBlbmNyeXB0KTsKK30KKwordm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCisJCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJICAgICAgdTggKmllLCBzaXplX3QgaWVfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3MsICpzdXBwX3JhdGVzLCAqZXN1cHBfcmF0ZXMgPSBOVUxMLCAqZXh0cmFfcHJlcV9pZSA9IE5VTEw7CisJaW50IGksIGV4dHJhX3ByZXFfaWVfbGVuID0gMDsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlleHRyYV9wcmVxX2llX2xlbiA9IHNkYXRhLT51Lm1nZC5pZV9wcm9iZXJlcV9sZW47CisJCWV4dHJhX3ByZXFfaWUgPSBzZGF0YS0+dS5tZ2QuaWVfcHJvYmVyZXE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCArCisJCQkgICAgaWVfbGVuICsgZXh0cmFfcHJlcV9pZV9sZW4pOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgorCQkgICAgICAgInJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAoZHN0KSB7CisJCW1lbWNweShtZ210LT5kYSwgZHN0LCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgZHN0LCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7CisJCW1lbXNldChtZ210LT5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCX0KKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNzaWRfbGVuKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOworCSpwb3MrKyA9IHNzaWRfbGVuOworCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKKworCXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMik7CisJc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJc3VwcF9yYXRlc1sxXSA9IDA7CisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwkJaWYgKGVzdXBwX3JhdGVzKSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7CisJCQllc3VwcF9yYXRlc1sxXSsrOworCQl9IGVsc2UgaWYgKHN1cHBfcmF0ZXNbMV0gPT0gOCkgeworCQkJZXN1cHBfcmF0ZXMgPSBza2JfcHV0KHNrYiwgMyk7CisJCQllc3VwcF9yYXRlc1swXSA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkJZXN1cHBfcmF0ZXNbMV0gPSAxOworCQkJcG9zID0gJmVzdXBwX3JhdGVzWzJdOworCQl9IGVsc2UgeworCQkJcG9zID0gc2tiX3B1dChza2IsIDEpOworCQkJc3VwcF9yYXRlc1sxXSsrOworCQl9CisJCSpwb3MgPSByYXRlLT5iaXRyYXRlIC8gNTsKKwl9CisKKwlpZiAoaWUpCisJCW1lbWNweShza2JfcHV0KHNrYiwgaWVfbGVuKSwgaWUsIGllX2xlbik7CisJaWYgKGV4dHJhX3ByZXFfaWUpCisJCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfcHJlcV9pZV9sZW4pLCBleHRyYV9wcmVxX2llLAorCQkgICAgICAgZXh0cmFfcHJlcV9pZV9sZW4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKK30KKwordTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKKwlzaXplX3QgbnVtX3JhdGVzOworCXUzMiBzdXBwX3JhdGVzOworCWludCBpLCBqOworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKKworCWlmICghc2JhbmQpIHsKKwkJV0FSTl9PTigxKTsKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCX0KKworCWJpdHJhdGVzID0gc2JhbmQtPmJpdHJhdGVzOworCW51bV9yYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOworCXN1cHBfcmF0ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4gKworCQkgICAgIGVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW47IGkrKykgeworCQl1OCByYXRlID0gMDsKKwkJaW50IG93bl9yYXRlOworCQlpZiAoaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbikKKwkJCXJhdGUgPSBlbGVtcy0+c3VwcF9yYXRlc1tpXTsKKwkJZWxzZSBpZiAoZWxlbXMtPmV4dF9zdXBwX3JhdGVzKQorCQkJcmF0ZSA9IGVsZW1zLT5leHRfc3VwcF9yYXRlcworCQkJCVtpIC0gZWxlbXMtPnN1cHBfcmF0ZXNfbGVuXTsKKwkJb3duX3JhdGUgPSA1ICogKHJhdGUgJiAweDdmKTsKKwkJZm9yIChqID0gMDsgaiA8IG51bV9yYXRlczsgaisrKQorCQkJaWYgKGJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gb3duX3JhdGUpCisJCQkJc3VwcF9yYXRlcyB8PSBCSVQoaik7CisJfQorCXJldHVybiBzdXBwX3JhdGVzOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dleHQuYyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKaW5kZXggNzE2MmQ1OC4uOTM1YzYzZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dleHQuYworKysgYi9uZXQvbWFjODAyMTEvd2V4dC5jCkBAIC0zNyw3ICszNywxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CiAJaW50IGVycjsKIAotCWlmIChpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKSB7CisJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMpIHsKKwkJaWYgKGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgfHwKKwkJICAgIGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWQgIgorCQkJICAgICAgICIoQklQKVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgaWR4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0X2VuY3J5cHQgLSBpbnZhbGlkIGlkeD0lZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAzLDYgKzExMCw5IEBACiAKIAkJaWYgKHNldF90eF9rZXkgfHwgKCFzdGEgJiYgIXNkYXRhLT5kZWZhdWx0X2tleSAmJiBrZXkpKQogCQkJaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgaWR4KTsKKwkJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMgJiYKKwkJICAgIChzZXRfdHhfa2V5IHx8ICghc3RhICYmICFzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSAmJiBrZXkpKSkKKwkJCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgaWR4KTsKIAl9CiAKICBvdXRfdW5sb2NrOgpAQCAtMTIyLDEyMiArMTMyLDM3IEBACiAJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBjID0gMDsKLQotCWRhdGEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjE7Ci0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9ERUZBVUxUX0tFWVM7Ci0KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMgfHwKLQkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQikKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gbG9jYWwtPmh3Lm1heF9zaWduYWw7Ci0JZWxzZSBpZiAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAtMTEwOwotCWVsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKLQotCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7Ci0JLyogbm90IGFsd2F5cyB0cnVlIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nICovCi0JcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKLQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOwotCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gbG9jYWwtPndzdGF0c19mbGFnczsKLQotCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAotCQkJICBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOwotCi0KLQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCArKykgewotCQlpbnQgaTsKLQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JCWlmICghc2JhbmQpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOwotCi0JCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgewotCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQotCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCi0JCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOwotCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OwotCQkJCWMrKzsKLQkJCX0KLQkJfQotCX0KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7Ci0KLQlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7Ci0KLQlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKLQotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCiAJLyogZnJlcS0+ZSA9PSAwOiBmcmVxLT5tID0gY2hhbm5lbDsgb3RoZXJ3aXNlIGZyZXEgPSBtICogMTBeZSAqLwogCWlmIChmcmVxLT5lID09IDApIHsKIAkJaWYgKGZyZXEtPm0gPCAwKSB7Ci0JCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwkJCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQogCQkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlCkBAIC0yNzQsMzIgKzE5OSwzNSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7CisJaW50IHJldDsKIAogCS8qIGl3Y29uZmlnIHVzZXMgbnVsIHRlcm1pbmF0aW9uIGluIFNTSUQuLiAqLwogCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKIAkJbGVuLS07CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpbnQgcmV0OworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7CiAJCQlpZiAobGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweShzZGF0YS0+dS5zdGEuc3NpZCwgc3NpZCwgbGVuKTsKLQkJCXNkYXRhLT51LnN0YS5zc2lkX2xlbiA9IGxlbjsKKwkJCW1lbWNweShzZGF0YS0+dS5tZ2Quc3NpZCwgc3NpZCwgbGVuKTsKKwkJCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IGxlbjsKIAkJCXJldHVybiAwOwogCQl9CisKIAkJaWYgKGRhdGEtPmZsYWdzKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKIAkJZWxzZQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisKIAkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgc3NpZCwgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEsICZzZGF0YS0+dS5zdGEpOworCisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKLQl9CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybiBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzZGF0YSwgc3NpZCwgbGVuKTsKIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTMxMyw4ICsyNDEsNyBAQAogCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc2RhdGEsIHNzaWQsICZsZW4pOwogCQlpZiAocmVzID09IDApIHsKIAkJCWRhdGEtPmxlbmd0aCA9IGxlbjsKQEAgLTMyMiw2ICsyNDksMTQgQEAKIAkJfSBlbHNlCiAJCQlkYXRhLT5mbGFncyA9IDA7CiAJCXJldHVybiByZXM7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaW50IHJlcyA9IGllZWU4MDIxMV9pYnNzX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQlkYXRhLT5sZW5ndGggPSBsZW47CisJCQlkYXRhLT5mbGFncyA9IDE7CisJCX0gZWxzZQorCQkJZGF0YS0+ZmxhZ3MgPSAwOworCQlyZXR1cm4gcmVzOwogCX0KIAogCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTMzNSwyNiArMjcwLDM1IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmV0OwogCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLmJzc2lkLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCisJCQltZW1jcHkoc2RhdGEtPnUubWdkLmJzc2lkLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCiAJCQkgICAgICAgRVRIX0FMRU4pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGlzX3plcm9fZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAorCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQkJCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKLQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CiAJCWVsc2UKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKIAkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwgfAorCQkJCQkgICAgICAgSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUw7CisJCWVsc2UKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMOworCisJCXJldHVybiBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfV0RTKSB7CiAJCS8qCiAJCSAqIElmIGl0IGlzIG5lY2Vzc2FyeSB0byB1cGRhdGUgdGhlIFdEUyBwZWVyIGFkZHJlc3MKQEAgLTM4MywxNyArMzI3LDIwIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpZiAoc2RhdGEtPnUuc3RhLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEIHx8Ci0JCSAgICBzZGF0YS0+dS5zdGEuc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKIAkJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKKwkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJCX0gZWxzZQogCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoc2RhdGEtPnUuaWJzcy5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTik7CisJCX0gZWxzZQorCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewogCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCBFVEhfQUxFTik7CkBAIC00MDQsNTggKzM1MSw2IEBACiB9CiAKIAotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gTlVMTDsKLQl1OCAqc3NpZCA9IE5VTEw7Ci0Jc2l6ZV90IHNzaWRfbGVuID0gMDsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogaWYgU1NJRCB3YXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgdGhlbiB1c2UgdGhhdCAqLwotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSAmJgotCSAgICB3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCXJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKLQkJc3NpZCA9IHJlcS0+ZXNzaWQ7Ci0JCXNzaWRfbGVuID0gcmVxLT5lc3NpZF9sZW47Ci0JfQotCi0JcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIHNzaWQsIHNzaWRfbGVuKTsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCWludCByZXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJlcyA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMobG9jYWwsIGluZm8sIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwotCWlmIChyZXMgPj0gMCkgewotCQlkYXRhLT5sZW5ndGggPSByZXM7Ci0JCXJldHVybiAwOwotCX0KLQlkYXRhLT5sZW5ndGggPSAwOwotCXJldHVybiByZXM7Ci19Ci0KLQogc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpCkBAIC01MTEsNyArNDA2LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUuc3RhLmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCk7CiAKIAlpZiAoc3RhICYmICEoc3RhLT5sYXN0X3R4X3JhdGUuZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkKIAkJcmF0ZS0+dmFsdWUgPSBzYmFuZC0+Yml0cmF0ZXNbc3RhLT5sYXN0X3R4X3JhdGUuaWR4XS5iaXRyYXRlOwpAQCAtNTQ5LDEwICs0NDQsOSBAQAogCWVsc2UgLyogQXV0b21hdGljIHBvd2VyIGxldmVsIHNldHRpbmcgKi8KIAkJbmV3X3Bvd2VyX2xldmVsID0gY2hhbi0+bWF4X3Bvd2VyOwogCi0JaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IG5ld19wb3dlcl9sZXZlbCkgewotCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IG5ld19wb3dlcl9sZXZlbDsKKwlsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCA9IG5ld19wb3dlcl9sZXZlbDsKKwlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gbmV3X3Bvd2VyX2xldmVsKQogCQlyZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSOwotCX0KIAogCWlmIChsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkICE9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCkpIHsKIAkJbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCk7CkBAIC03MTMsOCArNjA3LDcgQEAKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmICghKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKG1sbWUtPmNtZCkgewpAQCAtODEwLDggKzcwMyw3IEBACiAJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCQlzd2l0Y2ggKHNkYXRhLT51Lm1nZC5hdXRoX2FsZykgewogCQljYXNlIFdMQU5fQVVUSF9PUEVOOgogCQljYXNlIFdMQU5fQVVUSF9MRUFQOgogCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKQEAgLTgzNiw2ICs3MjgsOSBAQAogCWludCByZXQgPSAwLCB0aW1lb3V0ID0gMDsKIAlib29sIHBzOwogCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODUyLDMxICs3NDcsNDkgQEAKIAkJcHMgPSB0cnVlOwogCQlicmVhazsKIAlkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugd2UgaWdub3JlICovCi0JCWJyZWFrOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAod3JxLT5mbGFncyAmIH4oSVdfUE9XRVJfTU9ERSB8IElXX1BPV0VSX1RJTUVPVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkKIAkJdGltZW91dCA9IHdycS0+dmFsdWUgLyAxMDAwOwogCi1zZXQ6Ci0JaWYgKHBzID09IGxvY2FsLT5wb3dlcnNhdmUgJiYgdGltZW91dCA9PSBsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KQorIHNldDoKKwlpZiAocHMgPT0gbG9jYWwtPnBvd2Vyc2F2ZSAmJiB0aW1lb3V0ID09IGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkKIAkJcmV0dXJuIHJldDsKIAogCWxvY2FsLT5wb3dlcnNhdmUgPSBwczsKLQlsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKKwljb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPSB0aW1lb3V0OwogCi0JaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUykgJiYKLQkJICAgIGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKQotCQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQkJZWxzZSB7Ci0JCQlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkKLQkJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJCWVsc2UKLQkJCQljb25mLT5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKQorCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQkgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUKTsKKworCWlmICghKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID4gMCAmJgorCSAgICAhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSkgeworCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhjb25mLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwl9IGVsc2UgeworCQlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkgeworCQkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworCQkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQl9IGVsc2UgeworCQkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJCQljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiAJCX0KLQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTAzLDExICs4MTYsMjIgQEAKIAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CiAJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgogCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQ6CisJCWJyZWFrOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJaWYgKGRhdGEtPnZhbHVlICYgKElXX0FVVEhfQ0lQSEVSX1dFUDQwIHwKKwkJCSAgICBJV19BVVRIX0NJUEhFUl9XRVAxMDQgfCBJV19BVVRIX0NJUEhFUl9US0lQKSkKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQkJZWxzZQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPQorCQkJCQl+SUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgogCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9ICEhZGF0YS0+dmFsdWU7CkBAIC05MTYsMjQgKzg0MCw0NSBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlIHsKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwogCQkJLyoKIAkJCSAqIFByaXZhY3kgaW52b2tlZCBieSB3cGFfc3VwcGxpY2FudCwgc3RvcmUgdGhlCiAJCQkgKiB2YWx1ZSBhbmQgYWxsb3cgYXNzb2NpYXRpbmcgdG8gYSBwcm90ZWN0ZWQKIAkJCSAqIG5ldHdvcmsgd2l0aG91dCBoYXZpbmcgYSBrZXkgdXAgZnJvbnQuCiAJCQkgKi8KIAkJCWlmIChkYXRhLT52YWx1ZSkKLQkJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0KKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KIAkJCQkJSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXNkYXRhLT51LnN0YS5hdXRoX2FsZ3MgPSBkYXRhLT52YWx1ZTsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOwogCQllbHNlCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CisJY2FzZSBJV19BVVRIX01GUDoKKwkJaWYgKCEoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSkpIHsKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlzd2l0Y2ggKGRhdGEtPnZhbHVlKSB7CisJCQljYXNlIElXX0FVVEhfTUZQX0RJU0FCTEVEOgorCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEOworCQkJCWJyZWFrOworCQkJY2FzZSBJV19BVVRIX01GUF9PUFRJT05BTDoKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9PUFRJT05BTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSVdfQVVUSF9NRlBfUkVRVUlSRUQ6CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldCA9IC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTk1MSw5ICs4OTYsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5zdGEuYnNzaWQpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQpOworCiAJaWYgKCFzdGEpIHsKIAkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gMDsKIAkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOwpAQCAtOTYyLDEwICs5MDcsNDUgQEAKIAkJd3N0YXRzLT5xdWFsLm5vaXNlID0gMDsKIAkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOwogCX0gZWxzZSB7Ci0JCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHN0YS0+bGFzdF9zaWduYWw7Ci0JCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3F1YWw7Ci0JCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHN0YS0+bGFzdF9ub2lzZTsKLQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOworCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IDA7CisJCS8qCisJCSAqIG1pcnJvciB3aGF0IGNmZzgwMjExIGRvZXMgZm9yIGl3cmFuZ2Uvc2NhbiByZXN1bHRzLAorCQkgKiBvdGhlcndpc2UgdXNlcnNwYWNlIGdldHMgY29uZnVzZWQuCisJCSAqLworCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgKElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHwKKwkJCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pKSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJfSBlbHNlIHsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9JTlZBTElEOworCQl9CisKKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKSB7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQl9IGVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSB7CisJCQlpbnQgc2lnID0gc3RhLT5sYXN0X3NpZ25hbDsKKworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpZiAoc2lnIDwgLTExMCkKKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQorCQkJCXNpZyA9IC00MDsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc2lnICsgMTEwOworCQl9CisKKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pIHsKKwkJCS8qCisJCQkgKiBUaGlzIGFzc3VtZXMgdGhhdCBpZiBkcml2ZXIgcmVwb3J0cyBub2lzZSwgaXQgYWxzbworCQkJICogcmVwb3J0cyBzaWduYWwgaW4gZEJtLgorCQkJICovCisJCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX1VQREFURUQ7CisJCX0gZWxzZSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisJCX0KIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTk4Miw5ICs5NjIsOCBAQAogCiAJc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJZGF0YS0+dmFsdWUgPSBzZGF0YS0+dS5zdGEuYXV0aF9hbGdzOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51Lm1nZC5hdXRoX2FsZ3M7CiAJCWVsc2UKIAkJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTEwMTcsNiArOTk2LDkgQEAKIAljYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKIAkJYWxnID0gQUxHX0NDTVA7CiAJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19BRVNfQ01BQzoKKwkJYWxnID0gQUxHX0FFU19DTUFDOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTAyNSwyMCArMTAwNyw0MSBAQAogCQlyZW1vdmUgPSAxOwogCiAJaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KSB7Ci0JCWlkeCA9IC0xOwotCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKLQkJCWlkeCA9IDA7Ci0JCWVsc2UgZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykgewotCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgewotCQkJCWlkeCA9IGk7Ci0JCQkJYnJlYWs7CisJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMpIHsKKwkJaWYgKGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyAxIHx8CisJCSAgICBpZHggPiBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKSB7CisJCQlpZHggPSAtMTsKKwkJCWlmICghc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpCisJCQkJaWR4ID0gMDsKKwkJCWVsc2UgZm9yIChpID0gTlVNX0RFRkFVTFRfS0VZUzsKKwkJCQkgIGkgPCBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTOworCQkJCSAgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKQorCQkJCXsKKwkJCQkJaWR4ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQotCQl9Ci0JCWlmIChpZHggPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWlkeC0tOworCQkJaWYgKGlkeCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJaWR4LS07CisJfSBlbHNlIHsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgeworCQkJaWR4ID0gLTE7CisJCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKKwkJCQlpZHggPSAwOworCQkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgeworCQkJCQlpZHggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaWR4IDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlpZHgtLTsKKwl9CiAKIAlyZXR1cm4gaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHNkYXRhLCBleHQtPmFkZHIuc2FfZGF0YSwgaWR4LCBhbGcsCiAJCQkJCXJlbW92ZSwKQEAgLTEwNjMsNyArMTA2Niw3IEBACiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3JhbmdlLAkJLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCkBAIC0xMDc2LDggKzEwNzksOCBAQAogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3YXAsCQkvKiBTSU9DR0lXQVAgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd21sbWUsCQkvKiBTSU9DU0lXTUxNRSAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXQVBMSVNUICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLwogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3ZXNzaWQsCQkvKiBTSU9DU0lXRVNTSUQgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2Vzc2lkLAkJLyogU0lPQ0dJV0VTU0lEICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOSUNLTiAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5jIGIvbmV0L21hYzgwMjExL3dtZS5jCmluZGV4IGFjNzFiMzguLjBiOGFkMWY0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmMKKysrIGIvbmV0L21hYzgwMjExL3dtZS5jCkBAIC05OSwxMCArOTksMTMgQEAKIAkvKiBpbiBjYXNlIHdlIGFyZSBhIGNsaWVudCB2ZXJpZnkgYWNtIGlzIG5vdCBzZXQgZm9yIHRoaXMgYWMgKi8KIAl3aGlsZSAodW5saWtlbHkobG9jYWwtPndtbV9hY20gJiBCSVQoc2tiLT5wcmlvcml0eSkpKSB7CiAJCWlmICh3bWVfZG93bmdyYWRlX2FjKHNrYikpIHsKLQkJCS8qIFRoZSBvbGQgY29kZSB3b3VsZCBkcm9wIHRoZSBwYWNrZXQgaW4gdGhpcwotCQkJICogY2FzZS4KKwkJCS8qCisJCQkgKiBUaGlzIHNob3VsZCBub3QgcmVhbGx5IGhhcHBlbi4gVGhlIEFQIGhhcyBtYXJrZWQgYWxsCisJCQkgKiBsb3dlciBBQ3MgdG8gcmVxdWlyZSBhZG1pc3Npb24gY29udHJvbCB3aGljaCBpcyBub3QKKwkJCSAqIGEgcmVhc29uYWJsZSBjb25maWd1cmF0aW9uLiBBbGxvdyB0aGUgZnJhbWUgdG8gYmUKKwkJCSAqIHRyYW5zbWl0dGVkIHVzaW5nIEFDX0JLIGFzIGEgd29ya2Fyb3VuZC4KIAkJCSAqLwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTE0LDkgKzExNyw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gbXByaXYtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgcXVldWU7CiAJdTggdGlkOwogCkBAIC0xMjQsMjkgKzEyNSwxMSBAQAogCWlmICh1bmxpa2VseShxdWV1ZSA+PSBsb2NhbC0+aHcucXVldWVzKSkKIAkJcXVldWUgPSBsb2NhbC0+aHcucXVldWVzIC0gMTsKIAotCWlmIChza2ItPnJlcXVldWUpIHsKLQkJaWYgKCFody0+YW1wZHVfcXVldWVzKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKLQkJdGlkID0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0s7Ci0JCWlmIChzdGEpIHsKLQkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKLQkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKQotCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJcmV0dXJuIHF1ZXVlOwotCX0KLQotCS8qIE5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZgotCSAqIHRoZXJlIGlzIG9uZS4KKwkvKgorCSAqIE5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZgorCSAqIHRoZXJlIGlzIG9uZSAoYW5kIHdlIGhhdmVuJ3QgZG9uZSB0aGlzIGJlZm9yZSkuCiAJICovCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJaWYgKCFza2ItPnJlcXVldWUgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdTggKnAgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdTggYWNrX3BvbGljeSA9IDA7CiAJCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwpAQCAtMTU2LDE0MCArMTM5LDcgQEAKIAkJLyogcW9zIGhlYWRlciBpcyAyIGJ5dGVzLCBzZWNvbmQgcmVzZXJ2ZWQgKi8KIAkJKnArKyA9IGFja19wb2xpY3kgfCB0aWQ7CiAJCSpwID0gMDsKLQotCQlpZiAoIWh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlyZXR1cm4gcXVldWU7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCWlmIChzdGEpIHsKLQkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKLQkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKQotCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCX0KLQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlyZXR1cm4gcXVldWU7CiB9Ci0KLWludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKLXsKLQlpbnQgaTsKLQotCS8qIFhYWDogY3VycmVudGx5IGJyb2tlbiBkdWUgdG8gY2IvcmVxdWV1ZSB1c2UgKi8KLQlyZXR1cm4gLUVQRVJNOwotCi0JLyogcHJlcGFyZSB0aGUgZmlsdGVyIGFuZCBzYXZlIGl0IGZvciB0aGUgU1cgcXVldWUKLQkgKiBtYXRjaGluZyB0aGUgcmVjZWl2ZWQgSFcgcXVldWUgKi8KLQotCWlmICghbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKLQkJcmV0dXJuIC1FUEVSTTsKLQotCS8qIHRyeSB0byBnZXQgYSBRZGlzYyBmcm9tIHRoZSBwb29sICovCi0JZm9yIChpID0gbG9jYWwtPmh3LnF1ZXVlczsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOyBpKyspCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBsb2NhbC0+cXVldWVfcG9vbCkpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGxvY2FsX3RvX2h3KGxvY2FsKSwgaSk7Ci0JCQlzdGEtPnRpZF90b190eF9xW3RpZF0gPSBpOwotCi0JCQkvKiBJRiB0aGVyZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHBhY2tldHMKLQkJCSAqIG9uIHRoaXMgdGlkIGZpcnN0IHdlIG5lZWQgdG8gZHJhaW4gdGhlbQotCQkJICogb24gdGhlIHByZXZpb3VzIHF1ZXVlCi0JCQkgKiBzaW5jZSBIVCBpcyBzdHJpY3QgaW4gb3JkZXIgKi8KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jYXRlZCBhZ2dyZWdhdGlvbiBxdWV1ZSIKLQkJCQkJIiAlZCB0aWQgJWQgYWRkciAlcE0gcG9vbD0weCVsWFxuIiwKLQkJCQkJaSwgdGlkLCBzdGEtPnN0YS5hZGRyLAotCQkJCQlsb2NhbC0+cXVldWVfcG9vbFswXSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JcmV0dXJuIC1FQUdBSU47Ci19Ci0KLS8qKgotICogdGhlIGNhbGxlciBuZWVkcyB0byBob2xkIG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIFgpLT5sb2NrCi0gKi8KLXZvaWQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCi0JCQkJICAgdTggcmVxdWV1ZSkKLXsKLQlpbnQgYWdnX3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQotCS8qIHJldHVybiB0aGUgcWRpc2MgdG8gdGhlIHBvb2wgKi8KLQljbGVhcl9iaXQoYWdnX3F1ZXVlLCBsb2NhbC0+cXVldWVfcG9vbCk7Ci0Jc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOwotCi0JaWYgKHJlcXVldWUpIHsKLQkJaWVlZTgwMjExX3JlcXVldWUobG9jYWwsIGFnZ19xdWV1ZSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0JCXN0cnVjdCBRZGlzYyAqcTsKLQotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBhZ2dfcXVldWUpOwotCQlxID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOwotCQlyb290X2xvY2sgPSBxZGlzY19sb2NrKHEpOwotCi0JCXNwaW5fbG9ja19iaChyb290X2xvY2spOwotCQlxZGlzY19yZXNldChxKTsKLQkJc3Bpbl91bmxvY2tfYmgocm9vdF9sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSkKLXsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwotCXUzMiBsZW47Ci0KLQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0KLQlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQlpZiAoIXFkaXNjIHx8ICFxZGlzYy0+ZGVxdWV1ZSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7Ci0KLQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socWRpc2MpOwotCXNwaW5fbG9jayhyb290X2xvY2spOwotCWZvciAobGVuID0gcWRpc2MtPnEucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKLQotCQlpZiAoc2tiKQotCQkJX19za2JfcXVldWVfdGFpbCgmbGlzdCwgc2tiKTsKLQl9Ci0Jc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKLQotCWZvciAobGVuID0gbGlzdC5xbGVuOyBsZW4gPiAwOyBsZW4tLSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmbGlzdCk7Ci0JCXUxNiBuZXdfcXVldWU7Ci0KLQkJQlVHX09OKCFza2IpOwotCQluZXdfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLT5tZGV2LCBza2IpOwotCQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBuZXdfcXVldWUpOwotCi0JCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIG5ld19xdWV1ZSk7Ci0KLQotCQlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQkJcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKTsKLQotCQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQkJcWRpc2NfZW5xdWV1ZV9yb290KHNrYiwgcWRpc2MpOwotCQlzcGluX3VubG9jayhyb290X2xvY2spOwotCX0KLQotb3V0X3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuaCBiL25ldC9tYWM4MDIxMS93bWUuaAppbmRleCBiYzYyZjI4Li43NTIwZDJlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmgKKysrIGIvbmV0L21hYzgwMjExL3dtZS5oCkBAIC0yMSwxMSArMjEsNSBAQAogZXh0ZXJuIGNvbnN0IGludCBpZWVlODAyXzFkX3RvX2FjWzhdOwogCiB1MTYgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCk7Ci12b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAotCQkJCSAgIHU4IHJlcXVldWUpOwotdm9pZCBpZWVlODAyMTFfcmVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHF1ZXVlKTsKIAogI2VuZGlmIC8qIF9XTUVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5jIGIvbmV0L21hYzgwMjExL3dwYS5jCmluZGV4IDdhYTYzY2EuLjkxMDFiNDggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuYworKysgYi9uZXQvbWFjODAyMTEvd3BhLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDItMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xOSw2ICsyMCw3IEBACiAjaW5jbHVkZSAibWljaGFlbC5oIgogI2luY2x1ZGUgInRraXAuaCIKICNpbmNsdWRlICJhZXNfY2NtLmgiCisjaW5jbHVkZSAiYWVzX2NtYWMuaCIKICNpbmNsdWRlICJ3cGEuaCIKIAogaWVlZTgwMjExX3R4X3Jlc3VsdApAQCAtMjY2LDcgKzI2OCw3IEBACiAJCQkJaW50IGVuY3J5cHRlZCkKIHsKIAlfX2xlMTYgbWFza19mYzsKLQlpbnQgYTRfaW5jbHVkZWQ7CisJaW50IGE0X2luY2x1ZGVkLCBtZ210OwogCXU4IHFvc190aWQ7CiAJdTggKmJfMCwgKmFhZDsKIAl1MTYgZGF0YV9sZW4sIGxlbl9hOwpAQCAtMjc3LDEyICsyNzksMTUgQEAKIAlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47CiAKIAkvKgotCSAqIE1hc2sgRkM6IHplcm8gc3VidHlwZSBiNCBiNSBiNgorCSAqIE1hc2sgRkM6IHplcm8gc3VidHlwZSBiNCBiNSBiNiAoaWYgbm90IG1nbXQpCiAJICogUmV0cnksIFB3ck1ndCwgTW9yZURhdGE7IHNldCBQcm90ZWN0ZWQKIAkgKi8KKwltZ210ID0gaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKIAltYXNrX2ZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCW1hc2tfZmMgJj0gfmNwdV90b19sZTE2KDB4MDA3MCB8IElFRUU4MDIxMV9GQ1RMX1JFVFJZIHwKKwltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSB8CiAJCQkJSUVFRTgwMjExX0ZDVExfUE0gfCBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CisJaWYgKCFtZ210KQorCQltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNigweDAwNzApOwogCW1hc2tfZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKQEAgLTMwMCw4ICszMDUsMTAgQEAKIAogCS8qIEZpcnN0IGJsb2NrLCBiXzAgKi8KIAliXzBbMF0gPSAweDU5OyAvKiBmbGFnczogQWRhdGE6IDEsIE06IDAxMSwgTDogMDAxICovCi0JLyogTm9uY2U6IFFvUyBQcmlvcml0eSB8IEEyIHwgUE4gKi8KLQliXzBbMV0gPSBxb3NfdGlkOworCS8qIE5vbmNlOiBOb25jZSBGbGFncyB8IEEyIHwgUE4KKwkgKiBOb25jZSBGbGFnczogUHJpb3JpdHkgKGIwLi5iMykgfCBNYW5hZ2VtZW50IChiNCkgfCBSZXNlcnZlZCAoYjUuLmI3KQorCSAqLworCWJfMFsxXSA9IHFvc190aWQgfCAobWdtdCA8PCA0KTsKIAltZW1jcHkoJmJfMFsyXSwgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOwogCW1lbWNweSgmYl8wWzhdLCBwbiwgQ0NNUF9QTl9MRU4pOwogCS8qIGwobSkgKi8KQEAgLTM2MCw5ICszNjcsMTQgQEAKIAlpbnQgaGRybGVuLCBsZW4sIHRhaWw7CiAJdTggKnBvcywgKnBuOwogCWludCBpOworCWJvb2wgc2tpcF9odzsKKworCXNraXBfaHcgPSAodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UKSAmJgorCQlpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgotCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSB7CisJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikgJiYKKwkgICAgIXNraXBfaHcpIHsKIAkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAKIAkJICogaGVhZGVyIG9yIE1JQyBmaWVsZHMgKi8KIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKQEAgLTM5Nyw3ICs0MDksNyBAQAogCiAJY2NtcF9wbjJoZHIocG9zLCBwbiwga2V5LT5jb25mLmtleWlkeCk7CiAKLQlpZiAoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7CisJaWYgKChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmICFza2lwX2h3KSB7CiAJCS8qIGh3YWNjZWwgLSB3aXRoIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QIGhlYWRlciAqLwogCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOwogCQlyZXR1cm4gMDsKQEAgLTQ0Niw3ICs0NTgsOCBAQAogCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcikpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAogCWRhdGFfbGVuID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBDQ01QX0hEUl9MRU4gLSBDQ01QX01JQ19MRU47CkBAIC00ODUsMyArNDk4LDEyNiBAQAogCiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQorCisKK3N0YXRpYyB2b2lkIGJpcF9hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFhZCkKK3sKKwkvKiBCSVAgQUFEOiBGQyhtYXNrZWQpIHx8IEExIHx8IEEyIHx8IEEzICovCisKKwkvKiBGQyB0eXBlL3N1YnR5cGUgKi8KKwlhYWRbMF0gPSBza2ItPmRhdGFbMF07CisJLyogTWFzayBGQyBSZXRyeSwgUHdyTWd0LCBNb3JlRGF0YSBmbGFncyB0byB6ZXJvICovCisJYWFkWzFdID0gc2tiLT5kYXRhWzFdICYgfihCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikpOworCS8qIEExIHx8IEEyIHx8IEEzICovCisJbWVtY3B5KGFhZCArIDIsIHNrYi0+ZGF0YSArIDQsIDMgKiBFVEhfQUxFTik7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGJpcF9pcG5fc3dhcCh1OCAqZCwgY29uc3QgdTggKnMpCit7CisJKmQrKyA9IHNbNV07CisJKmQrKyA9IHNbNF07CisJKmQrKyA9IHNbM107CisJKmQrKyA9IHNbMl07CisJKmQrKyA9IHNbMV07CisJKmQgPSBzWzBdOworfQorCisKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gdHgtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisJdTggKnBuLCBhYWRbMjBdOworCWludCBpOworCisJaWYgKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKKwkJLyogaHdhY2NlbCAqLworCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHNpemVvZigqbW1pZSkpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKm1taWUpKTsKKwltbWllLT5lbGVtZW50X2lkID0gV0xBTl9FSURfTU1JRTsKKwltbWllLT5sZW5ndGggPSBzaXplb2YoKm1taWUpIC0gMjsKKwltbWllLT5rZXlfaWQgPSBjcHVfdG9fbGUxNihrZXktPmNvbmYua2V5aWR4KTsKKworCS8qIFBOID0gUE4gKyAxICovCisJcG4gPSBrZXktPnUuYWVzX2NtYWMudHhfcG47CisKKwlmb3IgKGkgPSBzaXplb2Yoa2V5LT51LmFlc19jbWFjLnR4X3BuKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXBuW2ldKys7CisJCWlmIChwbltpXSkKKwkJCWJyZWFrOworCX0KKwliaXBfaXBuX3N3YXAobW1pZS0+c2VxdWVuY2VfbnVtYmVyLCBwbik7CisKKwliaXBfYWFkKHNrYiwgYWFkKTsKKworCS8qCisJICogTUlDID0gQUVTLTEyOC1DTUFDKElHVEssIEFBRCB8fCBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgfHwgTU1JRSwgNjQpCisJICovCisJaWVlZTgwMjExX2Flc19jbWFjKGtleS0+dS5hZXNfY21hYy50Zm0sIGtleS0+dS5hZXNfY21hYy50eF9jcnlwdG9fYnVmLAorCQkJICAgYWFkLCBza2ItPmRhdGEgKyAyNCwgc2tiLT5sZW4gLSAyNCwgbW1pZS0+bWljKTsKKworCXJldHVybiBUWF9DT05USU5VRTsKK30KKworCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gcngtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWUgKm1taWU7CisJdTggYWFkWzIwXSwgbWljWzhdLCBpcG5bNl07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmICgocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCSAgICAocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoc2tiLT5sZW4gPCAyNCArIHNpemVvZigqbW1pZSkpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWUgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgIT0gV0xBTl9FSURfTU1JRSB8fAorCSAgICBtbWllLT5sZW5ndGggIT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOyAvKiBJbnZhbGlkIE1NSUUgKi8KKworCWJpcF9pcG5fc3dhcChpcG4sIG1taWUtPnNlcXVlbmNlX251bWJlcik7CisKKwlpZiAobWVtY21wKGlwbiwga2V5LT51LmFlc19jbWFjLnJ4X3BuLCA2KSA8PSAwKSB7CisJCWtleS0+dS5hZXNfY21hYy5yZXBsYXlzKys7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWlmICghKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKKwkJLyogaGFyZHdhcmUgZGlkbid0IGRlY3J5cHQvdmVyaWZ5IE1JQyAqLworCQliaXBfYWFkKHNrYiwgYWFkKTsKKwkJaWVlZTgwMjExX2Flc19jbWFjKGtleS0+dS5hZXNfY21hYy50Zm0sCisJCQkJICAga2V5LT51LmFlc19jbWFjLnJ4X2NyeXB0b19idWYsIGFhZCwKKwkJCQkgICBza2ItPmRhdGEgKyAyNCwgc2tiLT5sZW4gLSAyNCwgbWljKTsKKwkJaWYgKG1lbWNtcChtaWMsIG1taWUtPm1pYywgc2l6ZW9mKG1taWUtPm1pYykpICE9IDApIHsKKwkJCWtleS0+dS5hZXNfY21hYy5pY3ZlcnJvcnMrKzsKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCQl9CisJfQorCisJbWVtY3B5KGtleS0+dS5hZXNfY21hYy5yeF9wbiwgaXBuLCA2KTsKKworCS8qIFJlbW92ZSBNTUlFICovCisJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5oIGIvbmV0L21hYzgwMjExL3dwYS5oCmluZGV4IGQ0MmQyMjEuLmJhYmEwNjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuaAorKysgYi9uZXQvbWFjODAyMTEvd3BhLmgKQEAgLTI4LDQgKzI4LDkgQEAKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOwogCitpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CisKICNlbmRpZiAvKiBXUEFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGMyYmFjOWMuLjI1NjJkMDUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTM1Nyw2ICszNTcsNDUgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hMCisJdHJpc3RhdGUgJyJITCIgaG9wbGltaXQgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgSVA2X05GX01BTkdMRQorCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJLS0taGVscC0tLQorCVRoaXMgb3B0aW9uIGFkZHMgdGhlICJITCIgKGZvciBJUHY2KSBhbmQgIlRUTCIgKGZvciBJUHY0KQorCXRhcmdldHMsIHdoaWNoIGVuYWJsZSB0aGUgdXNlciB0byBjaGFuZ2UgdGhlCisJaG9wbGltaXQvdGltZS10by1saXZlIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIuCisKKwlXaGlsZSBpdCBpcyBzYWZlIHRvIGRlY3JlbWVudCB0aGUgaG9wbGltaXQvVFRMIHZhbHVlLCB0aGUKKwltb2R1bGVzIGFsc28gYWxsb3cgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mCisJdGhlIGhlYWRlciB0byBhcmJpdHJhcnkgdmFsdWVzLiBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMKKwlzaW5jZSB5b3UgY2FuIGVhc2lseSBjcmVhdGUgaW1tb3J0YWwgcGFja2V0cyB0aGF0IGxvb3AKKwlmb3JldmVyIG9uIHRoZSBuZXR3b3JrLgorCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRUQKKwl0cmlzdGF0ZSAnIkxFRCIgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEgYExFRCcgdGFyZ2V0LCB3aGljaCBhbGxvd3MgeW91IHRvIGJsaW5rIExFRHMgaW4KKwkgIHJlc3BvbnNlIHRvIHBhcnRpY3VsYXIgcGFja2V0cyBwYXNzaW5nIHRocm91Z2ggeW91ciBtYWNoaW5lLgorCisJICBUaGlzIGNhbiBiZSB1c2VkIHRvIHR1cm4gYSBzcGFyZSBMRUQgaW50byBhIG5ldHdvcmsgYWN0aXZpdHkgTEVELAorCSAgd2hpY2ggb25seSBmbGFzaGVzIGluIHJlc3BvbnNlIHRvIEZUUCB0cmFuc2ZlcnMsIGZvciBleGFtcGxlLiAgT3IKKwkgIHlvdSBjb3VsZCBoYXZlIGFuIExFRCB3aGljaCBsaWdodHMgdXAgZm9yIGEgbWludXRlIG9yIHR3byBldmVyeSB0aW1lCisJICBzb21lYm9keSBjb25uZWN0cyB0byB5b3VyIG1hY2hpbmUgdmlhIFNTSC4KKworCSAgWW91IHdpbGwgbmVlZCBzdXBwb3J0IGZvciB0aGUgImxlZCIgY2xhc3MgdG8gbWFrZSB0aGlzIHdvcmsuCisKKwkgIFRvIGNyZWF0ZSBhbiBMRUQgdHJpZ2dlciBmb3IgaW5jb21pbmcgU1NIIHRyYWZmaWM6CisJICAgIGlwdGFibGVzIC1BIElOUFVUIC1wIHRjcCAtLWRwb3J0IDIyIC1qIExFRCAtLWxlZC10cmlnZ2VyLWlkIHNzaCAtLWxlZC1kZWxheSAxMDAwCisKKwkgIFRoZW4gYXR0YWNoIHRoZSBuZXcgdHJpZ2dlciB0byBhbiBMRUQgb24geW91ciBzeXN0ZW06CisJICAgIGVjaG8gbmV0ZmlsdGVyLXNzaCA+IC9zeXMvY2xhc3MvbGVkcy88bGVkbmFtZT4vdHJpZ2dlcgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTEVEcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0sIHNlZQorCSAgRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dAorCiBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLCiAJdHJpc3RhdGUgJyJNQVJLIiB0YXJnZXQgc3VwcG9ydCcKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTQ4OCw2ICs1MjcsMjIgQEAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSAiVENQT1BUU1RSSVAiIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBzdHJpcAogCSAgVENQIG9wdGlvbnMgZnJvbSBUQ1AgcGFja2V0cy4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSCisJdHJpc3RhdGUgJyJjbHVzdGVyIiBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGJ1aWxkIHdvcmstbG9hZC1zaGFyaW5nIGNsdXN0ZXJzIG9mCisJICBuZXR3b3JrIHNlcnZlcnMvc3RhdGVmdWwgZmlyZXdhbGxzIHdpdGhvdXQgaGF2aW5nIGEgZGVkaWNhdGVkCisJICBsb2FkLWJhbGFuY2luZyByb3V0ZXIvc2VydmVyL3N3aXRjaC4gQmFzaWNhbGx5LCB0aGlzIG1hdGNoIHJldHVybnMKKwkgIHRydWUgd2hlbiB0aGUgcGFja2V0IG11c3QgYmUgaGFuZGxlZCBieSB0aGlzIGNsdXN0ZXIgbm9kZS4gVGh1cywKKwkgIGFsbCBub2RlcyBzZWUgYWxsIHBhY2tldHMgYW5kIHRoaXMgbWF0Y2ggZGVjaWRlcyB3aGljaCBub2RlIGhhbmRsZXMKKwkgIHdoYXQgcGFja2V0cy4gVGhlIHdvcmstbG9hZCBzaGFyaW5nIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBzb3VyY2UKKwkgIGFkZHJlc3MgaGFzaGluZy4KKworCSAgSWYgeW91IHNheSBZIG9yIE0gaGVyZSwgdHJ5IGBpcHRhYmxlcyAtbSBjbHVzdGVyIC0taGVscGAgZm9yCisJICBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQKIAl0cmlzdGF0ZSAgJyJjb21tZW50IiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC02MDUsNiArNjYwLDE0IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hMCisJdHJpc3RhdGUgJyJobCIgaG9wbGltaXQvVFRMIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJSEwgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3BsaW1pdAorCWluIHRoZSBJUHY2IGhlYWRlciwgb3IgdGhlIHRpbWUtdG8tbGl2ZSBmaWVsZCBpbiB0aGUgSVB2NAorCWhlYWRlciBvZiB0aGUgcGFja2V0LgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UKIAl0cmlzdGF0ZSAnImlwcmFuZ2UiIGFkZHJlc3MgcmFuZ2UgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggZGEzZDkwOS4uNjI4MjA2MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC00NSw2ICs0NSw4IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSykgKz0geHRfQ09OTk1BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1ApICs9IHh0X0RTQ1Aubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwpICs9IHh0X0hMLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRCkgKz0geHRfTEVELm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUkspICs9IHh0X01BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cpICs9IHh0X05GTE9HLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUpICs9IHh0X05GUVVFVUUubwpAQCAtNTcsNiArNTksNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpICs9IHh0X1RSQUNFLm8KIAogIyBtYXRjaGVzCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIpICs9IHh0X2NsdXN0ZXIubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UKSArPSB4dF9jb21tZW50Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTKSArPSB4dF9jb25uYnl0ZXMubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQpICs9IHh0X2Nvbm5saW1pdC5vCkBAIC02Nyw2ICs3MCw3IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCkgKz0geHRfZXNwLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUKSArPSB4dF9oYXNobGltaXQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIpICs9IHh0X2hlbHBlci5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMKSArPSB4dF9obC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UpICs9IHh0X2lwcmFuZ2Uubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEgpICs9IHh0X2xlbmd0aC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUKSArPSB4dF9saW1pdC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IGE5MGFjODMuLjViYjM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xNzQsNyArMTc0LDYgQEAKIAkJCSAgICAgb3V0ZGV2LCAmZWxlbSwgb2tmbiwgaG9va190aHJlc2gpOwogCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCB8fCB2ZXJkaWN0ID09IE5GX1NUT1ApIHsKIAkJcmV0ID0gMTsKLQkJZ290byB1bmxvY2s7CiAJfSBlbHNlIGlmICh2ZXJkaWN0ID09IE5GX0RST1ApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldCA9IC1FUEVSTTsKQEAgLTE4Myw3ICsxODIsNiBAQAogCQkJICAgICAgdmVyZGljdCA+PiBORl9WRVJESUNUX0JJVFMpKQogCQkJZ290byBuZXh0X2hvb2s7CiAJfQotdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCA2YmU1ZDRlLi41YzQ4Mzc4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTE0OSw4ICsxNDksOCBAQAogLyogbXVsdGljYXN0IGFkZHIgKi8KIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gbWNhc3RfYWRkciA9IHsKIAkuc2luX2ZhbWlseQkJPSBBRl9JTkVULAotCS5zaW5fcG9ydAkJPSBfX2NvbnN0YW50X2h0b25zKElQX1ZTX1NZTkNfUE9SVCksCi0JLnNpbl9hZGRyLnNfYWRkcgk9IF9fY29uc3RhbnRfaHRvbmwoSVBfVlNfU1lOQ19HUk9VUCksCisJLnNpbl9wb3J0CQk9IGNwdV90b19iZTE2KElQX1ZTX1NZTkNfUE9SVCksCisJLnNpbl9hZGRyLnNfYWRkcgk9IGNwdV90b19iZTMyKElQX1ZTX1NZTkNfR1JPVVApLAogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IDRmOGZjZjQuLjA3ZDlkODggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLmhlbHAJCQk9IGFtYW5kYV9oZWxwLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMDA4MCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkuaGVscAkJCT0gYW1hbmRhX2hlbHAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMDA4MCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBmNDkzNWUzLi5kZmI0NDdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC01NCw3ICs1NCw3IEBACiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOwogCi1pbnQgbmZfY29ubnRyYWNrX21heCBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19tYXggX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19tYXgpOwogCiBzdHJ1Y3QgbmZfY29ubiBuZl9jb25udHJhY2tfdW50cmFja2VkIF9fcmVhZF9tb3N0bHk7CkBAIC00NzIsNyArNDcyLDggQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAlpZiAodW5saWtlbHkoIW5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsCisJCQkJc2l6ZW9mKG5mX2Nvbm50cmFja19oYXNoX3JuZCkpOwogCQluZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZCA9IDE7CiAJfQogCkBAIC01MTYsMTYgKzUxNywxNyBAQAogc3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5mX2Nvbm4sIHJjdSk7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKIAogCW5mX2N0X2V4dF9mcmVlKGN0KTsKIAlrbWVtX2NhY2hlX2ZyZWUobmZfY29ubnRyYWNrX2NhY2hlcCwgY3QpOwotCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogfQogCiB2b2lkIG5mX2Nvbm50cmFja19mcmVlKHN0cnVjdCBuZl9jb25uICpjdCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCiAJbmZfY3RfZXh0X2Rlc3Ryb3koY3QpOworCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogCWNhbGxfcmN1KCZjdC0+cmN1LCBuZl9jb25udHJhY2tfZnJlZV9yY3UpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZyZWUpOwpAQCAtNzMzLDYgKzczNSw4IEBACiAJCW5mX2Nvbm50cmFja19wdXQoc2tiLT5uZmN0KTsKIAkJc2tiLT5uZmN0ID0gTlVMTDsKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7CisJCWlmIChyZXQgPT0gLU5GX0RST1ApCisJCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBkcm9wKTsKIAkJcmV0dXJuIC1yZXQ7CiAJfQogCkBAIC0xMTAzLDcgKzExMDcsNyBAQAogCiAJLyogV2UgaGF2ZSB0byByZWhhaHMgZm9yIHRoZSBuZXcgdGFibGUgYW55d2F5LCBzbyB3ZSBhbHNvIGNhbgogCSAqIHVzZSBhIG5ld3JhbmRvbSBzZWVkICovCi0JZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCA0KTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZybmQsIHNpemVvZihybmQpKTsKIAogCS8qIExvb2t1cHMgaW4gdGhlIG9sZCBoYXNoIG1pZ2h0IGhhcHBlbiBpbiBwYXJhbGxlbCwgd2hpY2ggbWVhbnMgd2UKIAkgKiBtaWdodCBnZXQgZmFsc2UgbmVnYXRpdmVzIGR1cmluZyBjb25uZWN0aW9uIGxvb2t1cC4gTmV3IGNvbm5lY3Rpb25zCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDNhOGEzNGEuLjM1N2JhMzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCkBAIC03Miw3ICs3Miw4IEBACiAJdW5zaWduZWQgaW50IGhhc2g7CiAKIAlpZiAodW5saWtlbHkoIW5mX2N0X2V4cGVjdF9oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsCisJCQkJIHNpemVvZihuZl9jdF9leHBlY3RfaGFzaF9ybmQpKTsKIAkJbmZfY3RfZXhwZWN0X2hhc2hfcm5kX2luaXR0ZWQgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCA2ODdiZDYzLi42NjM2OTQ5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIAkJLm5hbWUJCQk9ICJRLjkzMSIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCisJCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFE5MzFfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkJLmhlbHAJCQk9IHE5MzFfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnE5MzFfZXhwX3BvbGljeSwKQEAgLTExNzYsNyArMTE3Niw3IEBACiAJCS5uYW1lCQkJPSAiUS45MzEiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCi0JCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gY3B1X3RvX2JlMTYoUTkzMV9QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVENQLAogCQkuaGVscAkJCT0gcTkzMV9oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcTkzMV9leHBfcG9saWN5LApAQCAtMTc0MSw3ICsxNzQxLDcgQEAKIAkJLm5hbWUJCQk9ICJSQVMiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFJBU19QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuaGVscAkJCT0gcmFzX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZyYXNfZXhwX3BvbGljeSwKQEAgLTE3NTAsNyArMTc1MCw3IEBACiAJCS5uYW1lCQkJPSAiUkFTIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAotCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFJBU19QT1JUKSwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoUkFTX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCiAJCS5oZWxwCQkJPSByYXNfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnJhc19leHBfcG9saWN5LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCmluZGV4IDVhZjQyNzMuLjhhMzg3NWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGhlbHBlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQkJPSAibmV0Ymlvcy1ucyIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhOTUJEX1BPUlQpLAorCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KE5NQkRfUE9SVCksCiAJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJLmhlbHAJCQk9IGhlbHAsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggZWQ2ZDg3My4uN2ExNmJkNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtNTE4LDYgKzUxOCw3IEBACiBubGFfcHV0X2ZhaWx1cmU6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiBubG1zZ19mYWlsdXJlOgorCW5mbmV0bGlua19zZXRfZXJyKDAsIGdyb3VwLCAtRU5PQlVGUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtNTk5LDcgKzYwMCw4IEBACiAKIAlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfSVBfTUFYLCBhdHRyLCBOVUxMKTsKIAotCWwzcHJvdG8gPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSk7CiAKIAlpZiAobGlrZWx5KGwzcHJvdG8tPm5sYXR0cl90b190dXBsZSkpIHsKIAkJcmV0ID0gbmxhX3ZhbGlkYXRlX25lc3RlZChhdHRyLCBDVEFfSVBfTUFYLApAQCAtNjA4LDcgKzYxMCw3IEBACiAJCQlyZXQgPSBsM3Byb3RvLT5ubGF0dHJfdG9fdHVwbGUodGIsIHR1cGxlKTsKIAl9CiAKLQluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02MzMsNyArNjM1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdHVwbGUtPmRzdC5wcm90b251bSA9IG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPX05VTV0pOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CisJcmN1X3JlYWRfbG9jaygpOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAogCWlmIChsaWtlbHkobDRwcm90by0+bmxhdHRyX3RvX3R1cGxlKSkgewogCQlyZXQgPSBubGFfdmFsaWRhdGVfbmVzdGVkKGF0dHIsIENUQV9QUk9UT19NQVgsCkBAIC02NDIsNyArNjQ1LDcgQEAKIAkJCXJldCA9IGw0cHJvdG8tPm5sYXR0cl90b190dXBsZSh0YiwgdHVwbGUpOwogCX0KIAotCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk4OSwxMCArOTkyLDExIEBACiAKIAlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX01BWCwgYXR0ciwgTlVMTCk7CiAKLQlsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kX2dldChuZl9jdF9sM251bShjdCksIG5mX2N0X3Byb3RvbnVtKGN0KSk7CisJcmN1X3JlYWRfbG9jaygpOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChuZl9jdF9sM251bShjdCksIG5mX2N0X3Byb3RvbnVtKGN0KSk7CiAJaWYgKGw0cHJvdG8tPmZyb21fbmxhdHRyKQogCQllcnIgPSBsNHByb3RvLT5mcm9tX25sYXR0cih0YiwgY3QpOwotCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEwNjIsNiArMTA2NiwxMCBAQAogewogCWludCBlcnI7CiAKKwkvKiBvbmx5IGFsbG93IE5BVCBjaGFuZ2VzIGFuZCBtYXN0ZXIgYXNzaWduYXRpb24gZm9yIG5ldyBjb25udHJhY2tzICovCisJaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSB8fCBjZGFbQ1RBX1RVUExFX01BU1RFUl0pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmIChjZGFbQ1RBX0hFTFBdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKGN0LCBjZGEpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTExMjQsMTMgKzExMzIsMTEgQEAKIAkJCQkgIHJlcG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqCiBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhzdHJ1Y3QgbmxhdHRyICpjZGFbXSwKIAkJCSAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm90dXBsZSwKIAkJCSAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnJ0dXBsZSwKLQkJCSAgIHN0cnVjdCBuZl9jb25uICptYXN0ZXJfY3QsCi0JCQkgICB1MzIgcGlkLAotCQkJICAgaW50IHJlcG9ydCkKKwkJCSAgIHU4IHUzKQogewogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlpbnQgZXJyID0gLUVJTlZBTDsKQEAgLTExMzgsMTAgKzExNDQsMTAgQEAKIAogCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKCZpbml0X25ldCwgb3R1cGxlLCBydHVwbGUsIEdGUF9BVE9NSUMpOwogCWlmIChJU19FUlIoY3QpKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpZiAoIWNkYVtDVEFfVElNRU9VVF0pCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycjE7CiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1RJTUVPVVRdKSk7CiAKIAljdC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGN0LT50aW1lb3V0LmV4cGlyZXMgKiBIWjsKQEAgLTExNTIsMTAgKzExNTgsOCBAQAogIAkJY2hhciAqaGVscG5hbWU7CiAgCiAgCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfaGVscChjZGFbQ1RBX0hFTFBdLCAmaGVscG5hbWUpOwotIAkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKyAJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCiAJCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CiAJCWlmIChoZWxwZXIgPT0gTlVMTCkgewpAQCAtMTE2MywyOCArMTE2NywyNiBAQAogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlpZiAocmVxdWVzdF9tb2R1bGUoIm5mY3QtaGVscGVyLSVzIiwgaGVscG5hbWUpIDwgMCkgewogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyMTsKIAkJCX0KIAogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKIAkJCWlmIChoZWxwZXIpIHsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQllcnIgPSAtRUFHQUlOOwotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyMjsKIAkJCX0KIAkJCXJjdV9yZWFkX3VubG9jaygpOwogI2VuZGlmCiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnIxOwogCQl9IGVsc2UgewogCQkJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAogCQkJaGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKIAkJCWlmIChoZWxwID09IE5VTEwpIHsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyMjsKIAkJCX0KIAogCQkJLyogbm90IGluIGhhc2ggdGFibGUgeWV0IHNvIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgKi8KQEAgLTExOTMsNDQgKzExOTUsMzQgQEAKIAl9IGVsc2UgewogCQkvKiB0cnkgYW4gaW1wbGljaXQgaGVscGVyIGFzc2lnbmF0aW9uICovCiAJCWVyciA9IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIEdGUF9BVE9NSUMpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKIAlpZiAoY2RhW0NUQV9TVEFUVVNdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2Vfc3RhdHVzKGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKIAlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfbmF0KGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAKICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogCWlmIChjZGFbQ1RBX05BVF9TRVFfQURKX09SSUddIHx8IGNkYVtDVEFfTkFUX1NFUV9BREpfUkVQTFldKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfbmF0X3NlcV9hZGooY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KICNlbmRpZgogCiAJaWYgKGNkYVtDVEFfUFJPVE9JTkZPXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3Byb3RvaW5mbyhjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJbmZfY3RfYWNjdF9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKQEAgLTEyNDEsMjMgKzEyMzMsMzcgQEAKICNlbmRpZgogCiAJLyogc2V0dXAgbWFzdGVyIGNvbm50cmFjazogdGhpcyBpcyBhIGNvbmZpcm1lZCBleHBlY3RhdGlvbiAqLwotCWlmIChtYXN0ZXJfY3QpIHsKKwlpZiAoY2RhW0NUQV9UVVBMRV9NQVNURVJdKSB7CisJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyOworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKm1hc3Rlcl9oOworCQlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyX2N0OworCisJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZtYXN0ZXIsIENUQV9UVVBMRV9NQVNURVIsIHUzKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CisKKwkJbWFzdGVyX2ggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJm1hc3Rlcik7CisJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBlcnIyOworCQl9CisJCW1hc3Rlcl9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2sobWFzdGVyX2gpOworCQluZl9jb25udHJhY2tfZ2V0KCZtYXN0ZXJfY3QtPmN0X2dlbmVyYWwpOwogCQlfX3NldF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmN0LT5zdGF0dXMpOwogCQljdC0+bWFzdGVyID0gbWFzdGVyX2N0OwogCX0KIAotCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwogCXJjdV9yZWFkX3VubG9jaygpOwotCWN0bmV0bGlua19ldmVudF9yZXBvcnQoY3QsIHBpZCwgcmVwb3J0KTsKLQluZl9jdF9wdXQoY3QpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGN0OwogCi1lcnI6CitlcnIyOgorCXJjdV9yZWFkX3VubG9jaygpOworZXJyMToKIAluZl9jb25udHJhY2tfZnJlZShjdCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjg5LDM4ICsxMjk1LDI1IEBACiAJCWggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJnJ0dXBsZSk7CiAKIAlpZiAoaCA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyOwotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKm1hc3Rlcl9oID0gTlVMTDsKLQkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdCA9IE5VTEw7CisJCWVyciA9IC1FTk9FTlQ7CisJCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSB7CisJCQlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKLQkJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgewotCQkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwKLQkJCQkJCSAgICAmbWFzdGVyLAotCQkJCQkJICAgIENUQV9UVVBMRV9NQVNURVIsCi0JCQkJCQkgICAgdTMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCQltYXN0ZXJfaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmbWFzdGVyKTsKLQkJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7Ci0JCQkJZXJyID0gLUVOT0VOVDsKKwkJCWN0ID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soY2RhLCAmb3R1cGxlLAorCQkJCQkJCSZydHVwbGUsIHUzKTsKKwkJCWlmIChJU19FUlIoY3QpKSB7CisJCQkJZXJyID0gUFRSX0VSUihjdCk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQotCQkJbWFzdGVyX2N0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhtYXN0ZXJfaCk7Ci0JCQluZl9jb25udHJhY2tfZ2V0KCZtYXN0ZXJfY3QtPmN0X2dlbmVyYWwpOwotCQl9Ci0KLQkJZXJyID0gLUVOT0VOVDsKLQkJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9DUkVBVEUpCi0JCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjZGEsCi0JCQkJCQkJICZvdHVwbGUsCi0JCQkJCQkJICZydHVwbGUsCi0JCQkJCQkJIG1hc3Rlcl9jdCwKLQkJCQkJCQkgTkVUTElOS19DQihza2IpLnBpZCwKLQkJCQkJCQkgbmxtc2dfcmVwb3J0KG5saCkpOwotCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCQlpZiAoZXJyIDwgMCAmJiBtYXN0ZXJfY3QpCi0JCQluZl9jdF9wdXQobWFzdGVyX2N0KTsKKwkJCWVyciA9IDA7CisJCQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisJCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQkJY3RuZXRsaW5rX2V2ZW50X3JlcG9ydChjdCwKKwkJCQkJICAgICAgIE5FVExJTktfQ0Ioc2tiKS5waWQsCisJCQkJCSAgICAgICBubG1zZ19yZXBvcnQobmxoKSk7CisJCQluZl9jdF9wdXQoY3QpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMzMyLDE3ICsxMzI1LDYgQEAKIAlpZiAoIShubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRVhDTCkpIHsKIAkJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAotCQkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCi0JCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCS8qIGNhbid0IGxpbmsgYW4gZXhpc3RpbmcgY29ubnRyYWNrIHRvIGEgbWFzdGVyICovCi0JCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soY3QsIGNkYSk7CiAJCWlmIChlcnIgPT0gMCkgewogCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwpAQCAtMTUzMyw2ICsxNTE1LDcgQEAKIG5sYV9wdXRfZmFpbHVyZToKIAlyY3VfcmVhZF91bmxvY2soKTsKIG5sbXNnX2ZhaWx1cmU6CisJbmZuZXRsaW5rX3NldF9lcnIoMCwgMCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCA5ZTE2OWVmLi4zODA3YWM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC02Niw3ICs2Niw3IEBACiAJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKTsKIAotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCiAvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIG5hbWVzICovCiBjb25zdCBjaGFyICpjb25zdCBwcHRwX21zZ19uYW1lW10gPSB7CiAJIlVOS05PV05fTUVTU0FHRSIsCkBAIC01OTEsNyArNTkxLDcgQEAKIAkubmFtZQkJCT0gInBwdHAiLAogCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhQUFRQX0NPTlRST0xfUE9SVCksCisJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gY3B1X3RvX2JlMTYoUFBUUF9DT05UUk9MX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkuaGVscAkJCT0gY29ubnRyYWNrX3BwdHBfaGVscCwKIAkuZGVzdHJveQkJPSBwcHRwX2Rlc3Ryb3lfc2libGluZ3MsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYwppbmRleCA1OTJkNzMzLi45YTYyYjRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKQEAgLTc0LDI3ICs3NCw2IEBACiAKIC8qIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgcmV0dXJuIGEgdmFsaWQgcHJvdG9jb2wgaGVscGVyLCBzaW5jZQogICogaXQgZmFsbHMgYmFjayB0byBnZW5lcmljX3Byb3RvY29sICovCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgotbmZfY3RfbDRwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgbDRwcm90bykKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnA7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcCA9IF9fbmZfY3RfbDRwcm90b19maW5kKGwzcHJvdG8sIGw0cHJvdG8pOwotCWlmICghdHJ5X21vZHVsZV9nZXQocC0+bWUpKQotCQlwID0gJm5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWM7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fZmluZF9nZXQpOwotCi12b2lkIG5mX2N0X2w0cHJvdG9fcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcCkKLXsKLQltb2R1bGVfcHV0KHAtPm1lKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fcHV0KTsKLQogc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICoKIG5mX2N0X2wzcHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8pCiB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggOGZjZjE3Ni4uZDNkNWE3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RjY3AuaD4KIAorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKwogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CkBAIC0yMyw4ICsyNiw2IEBACiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKGRjY3BfbG9jayk7CiAKLXN0YXRpYyBpbnQgbmZfY3RfZGNjcF9sb29zZSBfX3JlYWRfbW9zdGx5ID0gMTsKLQogLyogVGltZW91dHMgYXJlIGJhc2VkIG9uIHZhbHVlcyBmcm9tIFJGQzQzNDA6CiAgKgogICogLSBSRVFVRVNUOgpAQCAtNzIsMTYgKzczLDYgQEAKIAogI2RlZmluZSBEQ0NQX01TTCAoMiAqIDYwICogSFopCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF90aW1lb3V0W0NUX0RDQ1BfTUFYICsgMV0gX19yZWFkX21vc3RseSA9IHsKLQlbQ1RfRENDUF9SRVFVRVNUXQk9IDIgKiBEQ0NQX01TTCwKLQlbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTCwKLQlbQ1RfRENDUF9QQVJUT1BFTl0JPSA0ICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfT1BFTl0JCT0gMTIgKiAzNjAwICogSFosCi0JW0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWiwKLQlbQ1RfRENDUF9DTE9TSU5HXQk9IDY0ICogSFosCi0JW0NUX0RDQ1BfVElNRVdBSVRdCT0gMiAqIERDQ1BfTVNMLAotfTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkY2NwX3N0YXRlX25hbWVzW10gPSB7CiAJW0NUX0RDQ1BfTk9ORV0JCT0gIk5PTkUiLAogCVtDVF9EQ0NQX1JFUVVFU1RdCT0gIlJFUVVFU1QiLApAQCAtMzkzLDYgKzM4NCwyMiBAQAogCX0sCiB9OwogCisvKiB0aGlzIG1vZHVsZSBwZXItbmV0IHNwZWNpZmljcyAqLworc3RhdGljIGludCBkY2NwX25ldF9pZDsKK3N0cnVjdCBkY2NwX25ldCB7CisJaW50IGRjY3BfbG9vc2U7CisJdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdOworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjsKKwlzdHJ1Y3QgY3RsX3RhYmxlICpzeXNjdGxfdGFibGU7CisjZW5kaWYKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfbmV0ICpkY2NwX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgZGNjcF9uZXRfaWQpOworfQorCiBzdGF0aWMgYm9vbCBkY2NwX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewpAQCAtNDE5LDYgKzQyNiw3IEBACiAJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOwogCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKIAljb25zdCBjaGFyICptc2c7CiAJdV9pbnQ4X3Qgc3RhdGU7CkBAIC00MjksNyArNDM3LDggQEAKIAlzdGF0ZSA9IGRjY3Bfc3RhdGVfdGFibGVbQ1RfRENDUF9ST0xFX0NMSUVOVF1bZGgtPmRjY3BoX3R5cGVdW0NUX0RDQ1BfTk9ORV07CiAJc3dpdGNoIChzdGF0ZSkgewogCWRlZmF1bHQ6Ci0JCWlmIChuZl9jdF9kY2NwX2xvb3NlID09IDApIHsKKwkJZG4gPSBkY2NwX3Blcm5ldChuZXQpOworCQlpZiAoZG4tPmRjY3BfbG9vc2UgPT0gMCkgewogCQkJbXNnID0gIm5mX2N0X2RjY3A6IG5vdCBwaWNraW5nIHVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gIjsKIAkJCWdvdG8gb3V0X2ludmFsaWQ7CiAJCX0KQEAgLTQ2NSw2ICs0NzQsNyBAQAogCQkgICAgICAgdV9pbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKIAl1X2ludDhfdCB0eXBlLCBvbGRfc3RhdGUsIG5ld19zdGF0ZTsKQEAgLTU0Miw3ICs1NTIsOSBAQAogCWN0LT5wcm90by5kY2NwLmxhc3RfcGt0ID0gdHlwZTsKIAljdC0+cHJvdG8uZGNjcC5zdGF0ZSA9IG5ld19zdGF0ZTsKIAl3cml0ZV91bmxvY2tfYmgoJmRjY3BfbG9jayk7Ci0JbmZfY3RfcmVmcmVzaF9hY2N0KGN0LCBjdGluZm8sIHNrYiwgZGNjcF90aW1lb3V0W25ld19zdGF0ZV0pOworCisJZG4gPSBkY2NwX3Blcm5ldChuZXQpOworCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRuLT5kY2NwX3RpbWVvdXRbbmV3X3N0YXRlXSk7CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQpAQCAtNjYwLDEzICs2NzIsMTEgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIHVuc2lnbmVkIGludCBkY2NwX3N5c2N0bF90YWJsZV91c2VyczsKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqZGNjcF9zeXNjdGxfaGVhZGVyOwotc3RhdGljIGN0bF90YWJsZSBkY2NwX3N5c2N0bF90YWJsZVtdID0geworLyogdGVtcGxhdGUsIGRhdGEgYXNzaWduZWQgbGF0ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3Bfc3lzY3RsX3RhYmxlW10gPSB7CiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcmVxdWVzdCIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVFVRVNUXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTY3NCw3ICs2ODQsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3Jlc3BvbmQiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02ODIsNyArNjkxLDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9wYXJ0b3BlbiIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02OTAsNyArNjk4LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9vcGVuIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX09QRU5dLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjk4LDcgKzcwNSw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfY2xvc2VyZXEiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNzA2LDcgKzcxMiw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfY2xvc2luZyIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9DTE9TSU5HXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcxNCw3ICs3MTksNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3RpbWV3YWl0IiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1RJTUVXQUlUXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcyMiw4ICs3MjYsNyBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF9sb29zZSIsCi0JCS5kYXRhCQk9ICZuZl9jdF9kY2NwX2xvb3NlLAotCQkubWF4bGVuCQk9IHNpemVvZihuZl9jdF9kY2NwX2xvb3NlKSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJfSwKQEAgLTc1MSwxMSArNzU0LDYgQEAKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzYgX19yZWFkX21vc3RseSA9IHsKQEAgLTc3NiwzNCArNzc0LDEwNyBAQAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKK307CisKK3N0YXRpYyBfX25ldF9pbml0IGludCBkY2NwX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOworCWludCBlcnI7CisKKwlkbiA9IGttYWxsb2Moc2l6ZW9mKCpkbiksIEdGUF9LRVJORUwpOworCWlmICghZG4pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwlkbi0+ZGNjcF9sb29zZSA9IDE7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdCT0gMiAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXQkJPSAxMiAqIDM2MDAgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0JPSAyICogRENDUF9NU0w7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgZG4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCisJZXJyID0gLUVOT01FTTsKKwlkbi0+c3lzY3RsX3RhYmxlID0ga21lbWR1cChkY2NwX3N5c2N0bF90YWJsZSwKKwkJCXNpemVvZihkY2NwX3N5c2N0bF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghZG4tPnN5c2N0bF90YWJsZSkKKwkJZ290byBvdXQ7CisKKwlkbi0+c3lzY3RsX3RhYmxlWzBdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdOworCWRuLT5zeXNjdGxfdGFibGVbMV0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF07CisJZG4tPnN5c2N0bF90YWJsZVsyXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl07CisJZG4tPnN5c2N0bF90YWJsZVszXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzRdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzVdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NJTkddOworCWRuLT5zeXNjdGxfdGFibGVbNl0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfVElNRVdBSVRdOworCWRuLT5zeXNjdGxfdGFibGVbN10uZGF0YSA9ICZkbi0+ZGNjcF9sb29zZTsKKworCWRuLT5zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCisJCQluZl9uZXRfbmV0ZmlsdGVyX3N5c2N0bF9wYXRoLCBkbi0+c3lzY3RsX3RhYmxlKTsKKwlpZiAoIWRuLT5zeXNjdGxfaGVhZGVyKSB7CisJCWtmcmVlKGRuLT5zeXNjdGxfdGFibGUpOworCQlnb3RvIG91dDsKKwl9CiAjZW5kaWYKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoZG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgZGNjcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGRjY3BfbmV0ICpkbiA9IGRjY3BfcGVybmV0KG5ldCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShkbi0+c3lzY3RsX2hlYWRlcik7CisJa2ZyZWUoZG4tPnN5c2N0bF90YWJsZSk7CisjZW5kaWYKKwlrZnJlZShkbik7CisKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZGNjcF9uZXRfb3BzID0geworCS5pbml0ID0gZGNjcF9uZXRfaW5pdCwKKwkuZXhpdCA9IGRjY3BfbmV0X2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoJmRjY3BfbmV0X2lkLCAmZGNjcF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIxOwogCi0JZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjI7CisKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjM7CiAJcmV0dXJuIDA7CiAKLWVycjI6CitlcnIzOgogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiBlcnIxOgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiAJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90bzYpOwogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA0YmU4MGQ3Li44MjkzNzRmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCkBAIC05Miw3ICs5Miw3IEBACiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fZ2VuZXJpYyBfX3JlYWRfbW9zdGx5ID0KIHsKIAkubDNwcm90bwkJPSBQRl9VTlNQRUMsCi0JLmw0cHJvdG8JCT0gMCwKKwkubDRwcm90bwkJPSAyNTUsCiAJLm5hbWUJCQk9ICJ1bmtub3duIiwKIAkucGt0X3RvX3R1cGxlCQk9IGdlbmVyaWNfcGt0X3RvX3R1cGxlLAogCS5pbnZlcnRfdHVwbGUJCT0gZ2VuZXJpY19pbnZlcnRfdHVwbGUsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGYzZmQxNTQuLjBhZWI4YjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKQEAgLTI1LDYgKzI2LDggQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2lwdjYuaD4KIAogLyogUHJvdGVjdHMgY3QtPnByb3RvLnRjcCAqLwogc3RhdGljIERFRklORV9SV0xPQ0sodGNwX2xvY2spOwpAQCAtNDY2LDcgKzQ2OSw3IEBACiAJCQkJZm9yIChpID0gMDsKIAkJCQkgICAgIGkgPCAob3BzaXplIC0gVENQT0xFTl9TQUNLX0JBU0UpOwogCQkJCSAgICAgaSArPSBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spIHsKLQkJCQkJdG1wID0gbnRvaGwoKigoX19iZTMyICopKHB0citpKSsxKSk7CisJCQkJCXRtcCA9IGdldF91bmFsaWduZWRfYmUzMigoX19iZTMyICopKHB0citpKSsxKTsKIAogCQkJCQlpZiAoYWZ0ZXIodG1wLCAqc2FjaykpCiAJCQkJCQkqc2FjayA9IHRtcDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKaW5kZXggMmI4YjFmNS4uZDQwMjExNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2lwdjYuaD4KIAogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF91ZHBfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAqSFo7CiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3VkcF90aW1lb3V0X3N0cmVhbSBfX3JlYWRfbW9zdGx5ID0gMTgwKkhaOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggZmE4YWU1ZC4uOGJiOTk4ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xNCw1OCArMTQsNjMgQEAKICAgIExPRyB0YXJnZXQgbW9kdWxlcyAqLwogCiAjZGVmaW5lIE5GX0xPR19QUkVGSVhMRU4JCTEyOAorI2RlZmluZSBORkxPR0dFUl9OQU1FX0xFTgkJNjQKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKm5mX2xvZ2dlcnNbTkZQUk9UT19OVU1QUk9UT10gX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2xvZ2dlcnNfbFtORlBST1RPX05VTVBST1RPXSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIERFRklORV9NVVRFWChuZl9sb2dfbXV0ZXgpOwogCi0vKiByZXR1cm4gRUJVU1kgaWYgc29tZWJvZHkgZWxzZSBpcyByZWdpc3RlcmVkLCBFRVhJU1QgaWYgdGhlIHNhbWUgbG9nZ2VyCi0gKiBpcyByZWdpc3RyZWQsIDAgb24gc3VjY2Vzcy4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyICpfX2ZpbmRfbG9nZ2VyKGludCBwZiwgY29uc3QgY2hhciAqc3RyX2xvZ2dlcikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBuZl9sb2dnZXIgKnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbcGZdLCBsaXN0W3BmXSkgeworCQlpZiAoIXN0cm5pY21wKHN0cl9sb2dnZXIsIHQtPm5hbWUsIHN0cmxlbih0LT5uYW1lKSkpCisJCQlyZXR1cm4gdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIEVFWElTVCBpZiB0aGUgc2FtZSBsb2dnZXIgaXMgcmVnaXN0cmVkLCAwIG9uIHN1Y2Nlc3MuICovCitpbnQgbmZfbG9nX3JlZ2lzdGVyKHVfaW50OF90IHBmLCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCit7CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbGxvZzsKIAogCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFueSBzZXR1cCBvZiBsb2dnaW5nIG1lbWJlcnMgbXVzdCBiZSBkb25lIGJlZm9yZQotCSAqIHN1YnN0aXR1dGluZyBwb2ludGVyLiAqLwotCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmZfbG9nX211dGV4KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCi0JaWYgKCFuZl9sb2dnZXJzW3BmXSkKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOwotCWVsc2UgaWYgKG5mX2xvZ2dlcnNbcGZdID09IGxvZ2dlcikKLQkJcmV0ID0gLUVFWElTVDsKLQllbHNlCi0JCXJldCA9IC1FQlVTWTsKKwlpZiAocGYgPT0gTkZQUk9UT19VTlNQRUMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKQorCQkJbGlzdF9hZGRfdGFpbCgmKGxvZ2dlci0+bGlzdFtpXSksICYobmZfbG9nZ2Vyc19sW2ldKSk7CisJfSBlbHNlIHsKKwkJLyogcmVnaXN0ZXIgYXQgZW5kIG9mIGxpc3QgdG8gaG9ub3IgZmlyc3QgcmVnaXN0ZXIgd2luICovCisJCWxpc3RfYWRkX3RhaWwoJmxvZ2dlci0+bGlzdFtwZl0sICZuZl9sb2dnZXJzX2xbcGZdKTsKKwkJbGxvZyA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW3BmXSk7CisJCWlmIChsbG9nID09IE5VTEwpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmZfbG9nX3JlZ2lzdGVyKTsKIAotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcl9wZih1X2ludDhfdCBwZikKK3ZvaWQgbmZfbG9nX3VucmVnaXN0ZXIoc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQogewotCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQotCQlyZXR1cm47Ci0JbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOwotCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKLQotCS8qIEdpdmUgdGltZSB0byBjb25jdXJyZW50IHJlYWRlcnMuICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG5mX2xvZ191bnJlZ2lzdGVyX3BmKTsKLQotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCi17CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqY19sb2dnZXI7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpOyBpKyspIHsKLQkJaWYgKG5mX2xvZ2dlcnNbaV0gPT0gbG9nZ2VyKQorCQljX2xvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW2ldKTsKKwkJaWYgKGNfbG9nZ2VyID09IGxvZ2dlcikKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW2ldLCBOVUxMKTsKKwkJbGlzdF9kZWwoJmxvZ2dlci0+bGlzdFtpXSk7CiAJfQogCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIApAQCAtNzMsNiArNzgsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfbG9nX3VucmVnaXN0ZXIpOwogCitpbnQgbmZfbG9nX2JpbmRfcGYodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3sKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCWlmIChfX2ZpbmRfbG9nZ2VyKHBmLCBsb2dnZXItPm5hbWUpID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmZfbG9nX2JpbmRfcGYpOworCit2b2lkIG5mX2xvZ191bmJpbmRfcGYodV9pbnQ4X3QgcGYpCit7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0wobmZfbG9nX3VuYmluZF9wZik7CisKIHZvaWQgbmZfbG9nX3BhY2tldCh1X2ludDhfdCBwZiwKIAkJICAgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMjksMTMgKzE1NSwzNyBAQAogewogCWxvZmZfdCAqcG9zID0gdjsKIAljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXI7CisJc3RydWN0IG5mX2xvZ2dlciAqdDsKKwlpbnQgcmV0OwogCiAJbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbKnBvc10pOwogCiAJaWYgKCFsb2dnZXIpCi0JCXJldHVybiBzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FXG4iLCAqcG9zKTsKKwkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORSAoIiwgKnBvcyk7CisJZWxzZQorCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlMmxsZCAlcyAoIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKIAotCXJldHVybiBzZXFfcHJpbnRmKHMsICIlMmxsZCAlc1xuIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbmZfbG9nZ2Vyc19sWypwb3NdLCBsaXN0Wypwb3NdKSB7CisJCXJldCA9IHNlcV9wcmludGYocywgIiVzIiwgdC0+bmFtZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmICgmdC0+bGlzdFsqcG9zXSAhPSBuZl9sb2dnZXJzX2xbKnBvc10ucHJldikgeworCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAiKVxuIik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZsb2dfc2VxX29wcyA9IHsKQEAgLTE1OCwxNSArMjA4LDEwMiBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9OwogCisKICNlbmRpZiAvKiBQUk9DX0ZTICovCiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdHJ1Y3QgY3RsX3BhdGggbmZfbG9nX3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJuZXRmaWx0ZXIiLCAuY3RsX25hbWUgPSBORVRfTkVURklMVEVSLCB9LAorCXsgLnByb2NuYW1lID0gIm5mX2xvZyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKworc3RhdGljIGNoYXIgbmZfbG9nX3N5c2N0bF9mbmFtZXNbTkZQUk9UT19OVU1QUk9UTy1ORlBST1RPX1VOU1BFQ11bM107CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sb2dfc3lzY3RsX3RhYmxlW05GUFJPVE9fTlVNUFJPVE8rMV07CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2xvZ19kaXJfaGVhZGVyOworCitzdGF0aWMgaW50IG5mX2xvZ19wcm9jX2Rvc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXI7CisJaW50IHIgPSAwOworCWludCB0aW5kZXggPSAodW5zaWduZWQgbG9uZyl0YWJsZS0+ZXh0cmExOworCisJaWYgKHdyaXRlKSB7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgIk5PTkUiKSkgeworCQkJbmZfbG9nX3VuYmluZF9wZih0aW5kZXgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwkJbG9nZ2VyID0gX19maW5kX2xvZ2dlcih0aW5kZXgsIGJ1ZmZlcik7CisJCWlmIChsb2dnZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbdGluZGV4XSwgbG9nZ2VyKTsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbdGluZGV4XSk7CisJCWlmICghbG9nZ2VyKQorCQkJdGFibGUtPmRhdGEgPSAiTk9ORSI7CisJCWVsc2UKKwkJCXRhYmxlLT5kYXRhID0gbG9nZ2VyLT5uYW1lOworCQlyID0gcHJvY19kb3N0cmluZyh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCXJldHVybiByOworfQorCitzdGF0aWMgX19pbml0IGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykgeworCQlzbnByaW50ZihuZl9sb2dfc3lzY3RsX2ZuYW1lc1tpLU5GUFJPVE9fVU5TUEVDXSwgMywgIiVkIiwgaSk7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5wcm9jbmFtZQk9CisJCQluZl9sb2dfc3lzY3RsX2ZuYW1lc1tpLU5GUFJPVE9fVU5TUEVDXTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5kYXRhID0gTlVMTDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tYXhsZW4gPQorCQkJTkZMT0dHRVJfTkFNRV9MRU4gKiBzaXplb2YoY2hhcik7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ubW9kZSA9IDA2NDQ7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ucHJvY19oYW5kbGVyID0gbmZfbG9nX3Byb2NfZG9zdHJpbmc7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uZXh0cmExID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgaTsKKwl9CisKKwluZl9sb2dfZGlyX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhuZl9sb2dfc3lzY3RsX3BhdGgsCisJCQkJICAgICAgIG5mX2xvZ19zeXNjdGxfdGFibGUpOworCWlmICghbmZfbG9nX2Rpcl9oZWFkZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIF9faW5pdCBpbnQgbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAogaW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCkKIHsKKwlpbnQgaSwgcjsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19jcmVhdGUoIm5mX2xvZyIsIFNfSVJVR08sCiAJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZsb2dfZmlsZV9vcHMpKQogCQlyZXR1cm4gLTE7CiAjZW5kaWYKKworCS8qIEVycm9ycyB3aWxsIHRyaWdnZXIgcGFuaWMsIHVucm9sbCBvbiBlcnJvciBpcyB1bm5lY2Vzc2FyeS4gKi8KKwlyID0gbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCgpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJihuZl9sb2dnZXJzX2xbaV0pKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IGNkYzk3ZjMuLjU0OTBmYzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTcxLDYgKzcxLDcgQEAKIG5mX3Rwcm94eV9hc3NpZ25fc29jayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkgeworCQlza2Jfb3JwaGFuKHNrYik7CiAJCXNrYi0+c2sgPSBzazsKIAkJc2tiLT5kZXN0cnVjdG9yID0gbmZfdHByb3h5X2Rlc3RydWN0b3I7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggOWMwYmExNy4uMjc4NWQ2NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC0xMTMsNiArMTEzLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfc2VuZCk7CiAKK3ZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpCit7CisJbmV0bGlua19zZXRfZXJyKG5mbmwsIHBpZCwgZ3JvdXAsIGVycm9yKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZXRfZXJyKTsKKwogaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncykKIHsKIAlyZXR1cm4gbmV0bGlua191bmljYXN0KG5mbmwsIHNrYiwgcGlkLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IGM3MTJlOWYuLmZkMzI2YWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC02OTMsNyArNjkzLDcgQEAKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBuZnVsbmxfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgbmZ1bG5sX2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCT0gIm5mbmV0bGlua19sb2ciLAogCS5sb2dmbgk9ICZuZnVsbmxfbG9nX3BhY2tldCwKIAkubWUJPSBUSElTX01PRFVMRSwKQEAgLTcyNSw5ICs3MjUsOSBAQAogCQkvKiBDb21tYW5kcyB3aXRob3V0IHF1ZXVlIGNvbnRleHQgKi8KIAkJc3dpdGNoIChjbWQtPmNvbW1hbmQpIHsKIAkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9QRl9CSU5EOgotCQkJcmV0dXJuIG5mX2xvZ19yZWdpc3RlcihwZiwgJm5mdWxubF9sb2dnZXIpOworCQkJcmV0dXJuIG5mX2xvZ19iaW5kX3BmKHBmLCAmbmZ1bG5sX2xvZ2dlcik7CiAJCWNhc2UgTkZVTE5MX0NGR19DTURfUEZfVU5CSU5EOgotCQkJbmZfbG9nX3VucmVnaXN0ZXJfcGYocGYpOworCQkJbmZfbG9nX3VuYmluZF9wZihwZik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTk1MiwxNyArOTUyLDI1IEBACiAJCWdvdG8gY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOwogCX0KIAorCXN0YXR1cyA9IG5mX2xvZ19yZWdpc3RlcihORlBST1RPX1VOU1BFQywgJm5mdWxubF9sb2dnZXIpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibG9nOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbG9nZ2VyXG4iKTsKKwkJZ290byBjbGVhbnVwX3N1YnN5czsKKwl9CisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19jcmVhdGUoIm5mbmV0bGlua19sb2ciLCAwNDQwLAogCQkJIHByb2NfbmV0X25ldGZpbHRlciwgJm5mdWxfZmlsZV9vcHMpKQotCQlnb3RvIGNsZWFudXBfc3Vic3lzOworCQlnb3RvIGNsZWFudXBfbG9nZ2VyOwogI2VuZGlmCiAJcmV0dXJuIHN0YXR1czsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCitjbGVhbnVwX2xvZ2dlcjoKKwluZl9sb2dfdW5yZWdpc3RlcigmbmZ1bG5sX2xvZ2dlcik7CisjZW5kaWYKIGNsZWFudXBfc3Vic3lzOgogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZ1bG5sX3N1YnN5cyk7Ci0jZW5kaWYKIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjoKIAluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IDViYWNjZmEuLjUwOWE5NTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTYyNSw2ICs2MjUsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woeHRfZnJlZV90YWJsZV9pbmZvKTsKIAordm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbywKKwkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJdm9pZCAqcCA9IG9sZGluZm8tPmVudHJpZXNbY3B1XTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG9sZGluZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+ZW50cmllc1tjcHVdKTsKKwkJbmV3aW5mby0+ZW50cmllc1tjcHVdID0gcDsKKwl9CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KTsKKwogLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCAmIHJlZi4gIFJldHVybnMgRVJSX1BUUigpIG9uIGVycm9yLiAqLwogc3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZiwKIAkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKQEAgLTY3MSwyMSArNjg1LDIyIEBACiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm8sICpwcml2YXRlOwogCiAJLyogRG8gdGhlIHN1YnN0aXR1dGlvbi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOwogCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAkvKiBDaGVjayBpbnNpZGUgbG9jazogaXMgdGhlIG9sZCBudW1iZXIgY29ycmVjdD8gKi8KIAlpZiAobnVtX2NvdW50ZXJzICE9IHByaXZhdGUtPm51bWJlcikgewogCQlkdXByaW50ZigibnVtX2NvdW50ZXJzICE9IHRhYmxlLT5wcml2YXRlLT5udW1iZXIgKCV1LyV1KVxuIiwKIAkJCSBudW1fY291bnRlcnMsIHByaXZhdGUtPm51bWJlcik7Ci0JCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCQltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKIAkJKmVycm9yID0gLUVBR0FJTjsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW9sZGluZm8gPSBwcml2YXRlOwotCXRhYmxlLT5wcml2YXRlID0gbmV3aW5mbzsKKwlyY3VfYXNzaWduX3BvaW50ZXIodGFibGUtPnByaXZhdGUsIG5ld2luZm8pOwogCW5ld2luZm8tPmluaXRpYWxfZW50cmllcyA9IG9sZGluZm8tPmluaXRpYWxfZW50cmllczsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKIAorCXN5bmNocm9uaXplX25ldCgpOwogCXJldHVybiBvbGRpbmZvOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfcmVwbGFjZV90YWJsZSk7CkBAIC03MTksNyArNzM0LDggQEAKIAogCS8qIFNpbXBsaWZpZXMgcmVwbGFjZV90YWJsZSBjb2RlLiAqLwogCXRhYmxlLT5wcml2YXRlID0gYm9vdHN0cmFwOwotCXJ3bG9ja19pbml0KCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfaW5pdCgmdGFibGUtPmxvY2spOworCiAJaWYgKCF4dF9yZXBsYWNlX3RhYmxlKHRhYmxlLCAwLCBuZXdpbmZvLCAmcmV0KSkKIAkJZ290byB1bmxvY2s7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSEwuYyBiL25ldC9uZXRmaWx0ZXIveHRfSEwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3ODllCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9ITC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogVFRMIG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIElQIHRhYmxlcworICogKEMpIDIwMDAsMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBIb3AgTGltaXQgbW9kaWZpY2F0aW9uIHRhcmdldCBmb3IgaXA2dGFibGVzCisgKiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaD4KKworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBIb3BsaW1pdC9UVEwgTGltaXQgZmllbGQgbW9kaWZpY2F0aW9uIHRhcmdldCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0dGxfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCWludCBuZXdfdHRsOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlpcGggPSBpcF9oZHIoc2tiKTsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQVF9UVExfU0VUOgorCQkJbmV3X3R0bCA9IGluZm8tPnR0bDsKKwkJCWJyZWFrOworCQljYXNlIElQVF9UVExfSU5DOgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsICsgaW5mby0+dHRsOworCQkJaWYgKG5ld190dGwgPiAyNTUpCisJCQkJbmV3X3R0bCA9IDI1NTsKKwkJCWJyZWFrOworCQljYXNlIElQVF9UVExfREVDOgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsIC0gaW5mby0+dHRsOworCQkJaWYgKG5ld190dGwgPCAwKQorCQkJCW5ld190dGwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXdfdHRsID0gaXBoLT50dGw7CisJCQlicmVhazsKKwl9CisKKwlpZiAobmV3X3R0bCAhPSBpcGgtPnR0bCkgeworCQljc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhpcGgtPnR0bCA8PCA4KSwKKwkJCQkJICAgaHRvbnMobmV3X3R0bCA8PCA4KSk7CisJCWlwaC0+dHRsID0gbmV3X3R0bDsKKwl9CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2hsX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmg7CisJY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJaW50IG5ld19obDsKKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCisJCXJldHVybiBORl9EUk9QOworCisJaXA2aCA9IGlwdjZfaGRyKHNrYik7CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwkJY2FzZSBJUDZUX0hMX1NFVDoKKwkJCW5ld19obCA9IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfSU5DOgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0ICsgaW5mby0+aG9wX2xpbWl0OworCQkJaWYgKG5ld19obCA+IDI1NSkKKwkJCQluZXdfaGwgPSAyNTU7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0RFQzoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdCAtIGluZm8tPmhvcF9saW1pdDsKKwkJCWlmIChuZXdfaGwgPCAwKQorCQkJCW5ld19obCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCX0KKworCWlwNmgtPmhvcF9saW1pdCA9IG5ld19obDsKKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIGJvb2wgdHRsX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCisJaWYgKGluZm8tPm1vZGUgPiBJUFRfVFRMX01BWE1PREUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCisJCQlpbmZvLT5tb2RlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoaW5mby0+bW9kZSAhPSBJUFRfVFRMX1NFVCAmJiBpbmZvLT50dGwgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKKwkJCWluZm8tPm1vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCisJCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90Z19yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUgICAgICAgPSAiVFRMIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNCwKKwkJLnRhcmdldCAgICAgPSB0dGxfdGcsCisJCS50YXJnZXRzaXplID0gc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pLAorCQkudGFibGUgICAgICA9ICJtYW5nbGUiLAorCQkuY2hlY2tlbnRyeSA9IHR0bF90Z19jaGVjaywKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiSEwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY2LAorCQkudGFyZ2V0ICAgICA9IGhsX3RnNiwKKwkJLnRhcmdldHNpemUgPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCisJCS50YWJsZSAgICAgID0gIm1hbmdsZSIsCisJCS5jaGVja2VudHJ5ID0gaGxfdGc2X2NoZWNrLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBobF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMoaGxfdGdfcmVnLCBBUlJBWV9TSVpFKGhsX3RnX3JlZykpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGxfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0cyhobF90Z19yZWcsIEFSUkFZX1NJWkUoaGxfdGdfcmVnKSk7Cit9CisKK21vZHVsZV9pbml0KGhsX3RnX2luaXQpOworbW9kdWxlX2V4aXQoaGxfdGdfZXhpdCk7CitNT0RVTEVfQUxJQVMoImlwdF9UVEwiKTsKK01PRFVMRV9BTElBUygiaXA2dF9ITCIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmNzg0MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiB4dF9MRUQuYyAtIG5ldGZpbHRlciB0YXJnZXQgdG8gbWFrZSBMRURzIGJsaW5rIHVwb24gcGFja2V0IG1hdGNoZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWRhbSBOaWVsc2VuIDxhLm5pZWxzZW5Ac2hpa2FkaS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfTEVELmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkYW0gTmllbHNlbiA8YS5uaWVsc2VuQHNoaWthZGkubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiB0cmlnZ2VyIExFRCBkZXZpY2VzIG9uIHBhY2tldCBtYXRjaCIpOworCisvKgorICogVGhpcyBpcyBkZWNsYXJlZCBpbiBoZXJlICh0aGUga2VybmVsIG1vZHVsZSkgb25seSwgdG8gYXZvaWQgaGF2aW5nIHRoZXNlCisgKiBkZXBlbmRlbmNpZXMgaW4gdXNlcnNwYWNlIGNvZGUuICBUaGlzIGlzIHdoYXQgeHRfbGVkX2luZm8uaW50ZXJuYWxfZGF0YQorICogcG9pbnRzIHRvLgorICovCitzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgeworCXN0cnVjdCBsZWRfdHJpZ2dlciBuZXRmaWx0ZXJfbGVkX3RyaWdnZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50CitsZWRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwkvKgorCSAqIElmICJhbHdheXMgYmxpbmsiIGlzIGVuYWJsZWQsIGFuZCB0aGVyZSdzIHN0aWxsIHNvbWUgdGltZSB1bnRpbCB0aGUKKwkgKiBMRUQgd2lsbCBzd2l0Y2ggb2ZmLCBicmllZmx5IHN3aXRjaCBpdCBvZmYgbm93LgorCSAqLworCWlmICgobGVkaW5mby0+ZGVsYXkgPiAwKSAmJiBsZWRpbmZvLT5hbHdheXNfYmxpbmsgJiYKKwkgICAgdGltZXJfcGVuZGluZygmbGVkaW50ZXJuYWwtPnRpbWVyKSkKKwkJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsTEVEX09GRik7CisKKwlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX0ZVTEwpOworCisJLyogSWYgdGhlcmUncyBhIHBvc2l0aXZlIGRlbGF5LCBzdGFydC91cGRhdGUgdGhlIHRpbWVyICovCisJaWYgKGxlZGluZm8tPmRlbGF5ID4gMCkgeworCQltb2RfdGltZXIoJmxlZGludGVybmFsLT50aW1lciwKKwkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobGVkaW5mby0+ZGVsYXkpKTsKKworCS8qIE90aGVyd2lzZSBpZiB0aGVyZSB3YXMgbm8gZGVsYXkgZ2l2ZW4sIGJsaW5rIGFzIGZhc3QgYXMgcG9zc2libGUgKi8KKwl9IGVsc2UgaWYgKGxlZGluZm8tPmRlbGF5ID09IDApIHsKKwkJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9PRkYpOworCX0KKworCS8qIGVsc2UgdGhlIGRlbGF5IGlzIG5lZ2F0aXZlLCB3aGljaCBtZWFucyBzd2l0Y2ggb24gYW5kIHN0YXkgb24gKi8KKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIHZvaWQgbGVkX3RpbWVvdXRfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IChzdHJ1Y3QgeHRfbGVkX2luZm8gKilkYXRhOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWwgPSBsZWRpbmZvLT5pbnRlcm5hbF9kYXRhOworCisJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9PRkYpOworfQorCitzdGF0aWMgYm9vbCBsZWRfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsOworCWludCBlcnI7CisKKwlpZiAobGVkaW5mby0+aWRbMF0gPT0gJ1wwJykgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogTm8gJ2lkJyBwYXJhbWV0ZXIgZ2l2ZW4uXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxlZGludGVybmFsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZWRpbnRlcm5hbCkgeworCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlci5uYW1lID0gbGVkaW5mby0+aWQ7CisKKwllcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcigmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FCisJCQkiOiBsZWRfdHJpZ2dlcl9yZWdpc3RlcigpIGZhaWxlZFxuIik7CisJCWlmIChlcnIgPT0gLUVFWElTVCkKKwkJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkJCSI6IFRyaWdnZXIgbmFtZSBpcyBhbHJlYWR5IGluIHVzZS5cbiIpOworCQlnb3RvIGV4aXRfYWxsb2M7CisJfQorCisJLyogU2VlIGlmIHdlIG5lZWQgdG8gc2V0IHVwIGEgdGltZXIgKi8KKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKQorCQlzZXR1cF90aW1lcigmbGVkaW50ZXJuYWwtPnRpbWVyLCBsZWRfdGltZW91dF9jYWxsYmFjaywKKwkJCSAgICAodW5zaWduZWQgbG9uZylsZWRpbmZvKTsKKworCWxlZGluZm8tPmludGVybmFsX2RhdGEgPSBsZWRpbnRlcm5hbDsKKworCXJldHVybiB0cnVlOworCitleGl0X2FsbG9jOgorCWtmcmVlKGxlZGludGVybmFsKTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbGVkX3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKQorCQlkZWxfdGltZXJfc3luYygmbGVkaW50ZXJuYWwtPnRpbWVyKTsKKworCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIpOworCWtmcmVlKGxlZGludGVybmFsKTsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgbGVkX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJMRUQiLAorCS5yZXZpc2lvbgk9IDAsCisJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKKwkudGFyZ2V0CQk9IGxlZF90ZywKKwkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfbGVkX2luZm8pKSwKKwkuY2hlY2tlbnRyeQk9IGxlZF90Z19jaGVjaywKKwkuZGVzdHJveQk9IGxlZF90Z19kZXN0cm95LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmbGVkX3RnX3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZWRfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZsZWRfdGdfcmVnKTsKK30KKworbW9kdWxlX2luaXQobGVkX3RnX2luaXQpOworbW9kdWxlX2V4aXQobGVkX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDViZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAoQykgMjAwOC0yMDA5IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaD4KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QgbmZfY3Rfb3JpZ19pcHY0X3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqbmZfY3Rfb3JpZ19pcHY2X3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXA2OworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAoreHRfY2x1c3Rlcl9oYXNoX2lwdjQodV9pbnQzMl90IGlwLCBjb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXJldHVybiBqaGFzaF8xd29yZChpcCwgaW5mby0+aGFzaF9zZWVkKTsKK30KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3h0X2NsdXN0ZXJfaGFzaF9pcHY2KGNvbnN0IHZvaWQgKmlwLCBjb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXJldHVybiBqaGFzaDIoaXAsIE5GX0NUX1RVUExFX0wzU0laRSAvIHNpemVvZihfX3UzMiksIGluZm8tPmhhc2hfc2VlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Cit4dF9jbHVzdGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQljb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXVfaW50MzJfdCBoYXNoID0gMDsKKworCXN3aXRjaChuZl9jdF9sM251bShjdCkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2hfaXB2NChuZl9jdF9vcmlnX2lwdjRfc3JjKGN0KSwgaW5mbyk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2hfaXB2NihuZl9jdF9vcmlnX2lwdjZfc3JjKGN0KSwgaW5mbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKCgodTY0KWhhc2ggKiBpbmZvLT50b3RhbF9ub2RlcykgPj4gMzIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3h0X2NsdXN0ZXJfaXNfbXVsdGljYXN0X2FkZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQ4X3QgZmFtaWx5KQoreworCWJvb2wgaXNfbXVsdGljYXN0ID0gZmFsc2U7CisKKwlzd2l0Y2goZmFtaWx5KSB7CisJY2FzZSBORlBST1RPX0lQVjQ6CisJCWlzX211bHRpY2FzdCA9IGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLT5kYWRkcik7CisJCWJyZWFrOworCWNhc2UgTkZQUk9UT19JUFY2OgorCQlpc19tdWx0aWNhc3QgPSBpcHY2X2FkZHJfdHlwZSgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpICYKKwkJCQkJCUlQVjZfQUREUl9NVUxUSUNBU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gaXNfbXVsdGljYXN0OworfQorCitzdGF0aWMgYm9vbAoreHRfY2x1c3Rlcl9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYjsKKwljb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXVuc2lnbmVkIGxvbmcgaGFzaDsKKworCS8qIFRoaXMgbWF0Y2ggYXNzdW1lcyB0aGF0IGFsbCBub2RlcyBzZWUgdGhlIHNhbWUgcGFja2V0cy4gVGhpcyBjYW4gYmUKKwkgKiBhY2hpZXZlZCBpZiB0aGUgc3dpdGNoIHRoYXQgY29ubmVjdHMgdGhlIGNsdXN0ZXIgbm9kZXMgc3VwcG9ydCBzb21lCisJICogc29ydCBvZiAncG9ydCBtaXJyb3JpbmcnLiBIb3dldmVyLCBpZiB5b3VyIHN3aXRjaCBkb2VzIG5vdCBzdXBwb3J0CisJICogdGhpcywgeW91ciBjbHVzdGVyIG5vZGVzIGNhbiByZXBseSBBUlAgcmVxdWVzdCB1c2luZyBhIG11bHRpY2FzdCBNQUMKKwkgKiBhZGRyZXNzLiBUaHVzLCB5b3VyIHN3aXRjaCB3aWxsIGZsb29kIHRoZSBzYW1lIHBhY2tldHMgdG8gdGhlCisJICogY2x1c3RlciBub2RlcyB3aXRoIHRoZSBzYW1lIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4gVXNpbmcgYSBtdWx0aWNhc3QKKwkgKiBsaW5rIGFkZHJlc3MgaXMgYSBSRkMgMTgxMiAoc2VjdGlvbiAzLjMuMikgdmlvbGF0aW9uLCBidXQgdGhpcyB3b3JrcworCSAqIGZpbmUgaW4gcHJhY3Rpc2UuCisJICoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBpZiB5b3UgdXNlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MsIHRoZSBsaW5rIGxheWVyCisJICogc2V0cyBza2J1ZmYncyBwa3RfdHlwZSB0byBQQUNLRVRfTVVMVElDQVNULCB3aGljaCBpcyBub3QgYWNjZXB0ZWQKKwkgKiBieSBUQ1AgYW5kIG90aGVycyBmb3IgcGFja2V0cyBjb21pbmcgdG8gdGhpcyBub2RlLiBGb3IgdGhhdCByZWFzb24sCisJICogdGhpcyBtYXRjaCBtYW5nbGVzIHNrYnVmZidzIHBrdF90eXBlIGlmIGl0IGRldGVjdHMgYSBwYWNrZXQKKwkgKiBhZGRyZXNzZWQgdG8gYSB1bmljYXN0IGFkZHJlc3MgYnV0IHVzaW5nIFBBQ0tFVF9NVUxUSUNBU1QuIFllcywgSQorCSAqIGtub3csIG1hdGNoZXMgc2hvdWxkIG5vdCBhbHRlciBwYWNrZXRzLCBidXQgd2UgYXJlIGRvaW5nIHRoaXMgaGVyZQorCSAqIGJlY2F1c2Ugd2Ugd291bGQgbmVlZCB0byBhZGQgYSBQS1RUWVBFIHRhcmdldCBmb3IgdGhpcyBzb2xlIHB1cnBvc2UuCisJICovCisJaWYgKCF4dF9jbHVzdGVyX2lzX211bHRpY2FzdF9hZGRyKHNrYiwgcGFyLT5mYW1pbHkpICYmCisJICAgIHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkgeworCSAgICAJcHNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwl9CisKKwljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCWlmIChjdCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY3QgPT0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjdC0+bWFzdGVyKQorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoKGN0LT5tYXN0ZXIsIGluZm8pOworCWVsc2UKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaChjdCwgaW5mbyk7CisKKwlyZXR1cm4gISEoKDEgPDwgaGFzaCkgJiBpbmZvLT5ub2RlX21hc2spIF4KKwkgICAgICAgISEoaW5mby0+ZmxhZ3MgJiBYVF9DTFVTVEVSX0ZfSU5WKTsKK30KKworc3RhdGljIGJvb2wgeHRfY2x1c3Rlcl9tdF9jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQoreworCXN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWlmIChpbmZvLT5ub2RlX21hc2sgPj0gKDEgPDwgaW5mby0+dG90YWxfbm9kZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAieHRfY2x1c3RlcjogdGhpcyBub2RlIG1hc2sgY2Fubm90IGJlICIKKwkJCQkiaGlnaGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBub2Rlc1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggeHRfY2x1c3Rlcl9tYXRjaCBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJjbHVzdGVyIiwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaAkJPSB4dF9jbHVzdGVyX210LAorCS5jaGVja2VudHJ5CT0geHRfY2x1c3Rlcl9tdF9jaGVja2VudHJ5LAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfY2x1c3Rlcl9tdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZ4dF9jbHVzdGVyX21hdGNoKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X2NsdXN0ZXJfbXRfZmluaSh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnh0X2NsdXN0ZXJfbWF0Y2gpOworfQorCitNT0RVTEVfQVVUSE9SKCJQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogaGFzaC1iYXNlZCBjbHVzdGVyIG1hdGNoIik7CitNT0RVTEVfQUxJQVMoImlwdF9jbHVzdGVyIik7CitNT0RVTEVfQUxJQVMoImlwNnRfY2x1c3RlciIpOworbW9kdWxlX2luaXQoeHRfY2x1c3Rlcl9tdF9pbml0KTsKK21vZHVsZV9leGl0KHh0X2NsdXN0ZXJfbXRfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCBmOTdmZGVkLi5hNWI1MzY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCS8qIGluaXRpYWxpemUgaGFzaCB3aXRoIHJhbmRvbSB2YWwgYXQgdGhlIHRpbWUgd2UgYWxsb2NhdGUKIAkgKiB0aGUgZmlyc3QgaGFzaHRhYmxlIGVudHJ5ICovCiAJaWYgKCFodC0+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+bWFzdGVyKTsKK30KKwogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8gewogCXVfaW50MzJfdCBhdmc7CkBAIC0xNjcsNiArMTg0LDcgQEAKIAkuZmFtaWx5ICAgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCS5tYXRjaCAgICAgICAgICAgID0gbGltaXRfbXQsCiAJLmNoZWNrZW50cnkgICAgICAgPSBsaW1pdF9tdF9jaGVjaywKKwkuZGVzdHJveSAgICAgICAgICA9IGxpbWl0X210X2Rlc3Ryb3ksCiAJLm1hdGNoc2l6ZSAgICAgICAgPSBzaXplb2Yoc3RydWN0IHh0X3JhdGVpbmZvKSwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdHNpemUgICAgICAgPSBzaXplb2Yoc3RydWN0IGNvbXBhdF94dF9yYXRlaW5mbyksCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYyBiL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jCmluZGV4IDFiY2RmYzEuLjQ0YTIzNGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jCkBAIC0yMCwxMyArMjAsMzAgQEAKIE1PRFVMRV9BTElBUygiaXB0X3BoeXNkZXYiKTsKIE1PRFVMRV9BTElBUygiaXA2dF9waHlzZGV2Iik7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKl9hLCBjb25zdCBjaGFyICpfYiwgY29uc3QgY2hhciAqX21hc2spCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYSA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2E7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYiA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX2I7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqbWFzayA9IChjb25zdCB1bnNpZ25lZCBsb25nICopX21hc2s7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSAoYVswXSBeIGJbMF0pICYgbWFza1swXTsKKwlpZiAoSUZOQU1TSVogPiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVsxXSBeIGJbMV0pICYgbWFza1sxXTsKKwlpZiAoSUZOQU1TSVogPiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMl0gXiBiWzJdKSAmIG1hc2tbMl07CisJaWYgKElGTkFNU0laID4gMyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzNdIF4gYlszXSkgJiBtYXNrWzNdOworCUJVSUxEX0JVR19PTihJRk5BTVNJWiA+IDQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBib29sCiBwaHlzZGV2X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCWludCBpOwotCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXTsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJY29uc3Qgc3RydWN0IHh0X3BoeXNkZXZfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWJvb2wgcmV0OworCXVuc2lnbmVkIGxvbmcgcmV0OwogCWNvbnN0IGNoYXIgKmluZGV2LCAqb3V0ZGV2OwogCWNvbnN0IHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlOwogCkBAIC02OCwxMSArODUsNyBAQAogCWlmICghKGluZm8tPmJpdG1hc2sgJiBYVF9QSFlTREVWX09QX0lOKSkKIAkJZ290byBtYXRjaF9vdXRkZXY7CiAJaW5kZXYgPSBuZl9icmlkZ2UtPnBoeXNpbmRldiA/IG5mX2JyaWRnZS0+cGh5c2luZGV2LT5uYW1lIDogbnVsbGRldm5hbWU7Ci0JZm9yIChpID0gMCwgcmV0ID0gZmFsc2U7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgaW50KTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5waHlzaW5kZXYpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPmluX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZShpbmRldiwgaW5mby0+cGh5c2luZGV2LCBpbmZvLT5pbl9tYXNrKTsKIAogCWlmICghcmV0IF4gIShpbmZvLT5pbnZlcnQgJiBYVF9QSFlTREVWX09QX0lOKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtODIsMTMgKzk1LDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJb3V0ZGV2ID0gbmZfYnJpZGdlLT5waHlzb3V0ZGV2ID8KIAkJIG5mX2JyaWRnZS0+cGh5c291dGRldi0+bmFtZSA6IG51bGxkZXZuYW1lOwotCWZvciAoaSA9IDAsIHJldCA9IGZhbHNlOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGludCk7IGkrKykgewotCQlyZXQgfD0gKCgoY29uc3QgdW5zaWduZWQgaW50ICopb3V0ZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPnBoeXNvdXRkZXYpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPm91dF9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUob3V0ZGV2LCBpbmZvLT5waHlzb3V0ZGV2LCBpbmZvLT5vdXRfbWFzayk7CiAKLQlyZXR1cm4gcmV0IF4gIShpbmZvLT5pbnZlcnQgJiBYVF9QSFlTREVWX09QX09VVCk7CisJcmV0dXJuICghIXJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9PVVQpKTsKIH0KIAogc3RhdGljIGJvb2wgcGh5c2Rldl9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwppbmRleCBjODRmY2U1Li4wMWRkMDdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCkBAIC05LDYgKzksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaD4KIAorc3RydWN0IHh0X3F1b3RhX3ByaXYgeworCXVpbnQ2NF90IHF1b3RhOworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiU2FtIEpvaG5zdG9uIDxzYW1qQHNhbWoubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBjb3VudGRvd24gcXVvdGEgbWF0Y2giKTsKQEAgLTIwLDE4ICsyNCwyMCBAQAogc3RhdGljIGJvb2wKIHF1b3RhX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCXN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqKXBhci0+bWF0Y2hpbmZvKS0+bWFzdGVyOworCXN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0gKHZvaWQgKilwYXItPm1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfcXVvdGFfcHJpdiAqcHJpdiA9IHEtPm1hc3RlcjsKIAlib29sIHJldCA9IHEtPmZsYWdzICYgWFRfUVVPVEFfSU5WRVJUOwogCiAJc3Bpbl9sb2NrX2JoKCZxdW90YV9sb2NrKTsKLQlpZiAocS0+cXVvdGEgPj0gc2tiLT5sZW4pIHsKLQkJcS0+cXVvdGEgLT0gc2tiLT5sZW47CisJaWYgKHByaXYtPnF1b3RhID49IHNrYi0+bGVuKSB7CisJCXByaXYtPnF1b3RhIC09IHNrYi0+bGVuOwogCQlyZXQgPSAhcmV0OwogCX0gZWxzZSB7CiAJCS8qIHdlIGRvIG5vdCBhbGxvdyBldmVuIHNtYWxsIHBhY2tldHMgZnJvbSBub3cgb24gKi8KLQkJcS0+cXVvdGEgPSAwOworCQlwcml2LT5xdW90YSA9IDA7CiAJfQorCS8qIENvcHkgcXVvdGEgYmFjayB0byBtYXRjaGluZm8gc28gdGhhdCBpcHRhYmxlcyBjYW4gZGlzcGxheSBpdCAqLworCXEtPnF1b3RhID0gcHJpdi0+cXVvdGE7CiAJc3Bpbl91bmxvY2tfYmgoJnF1b3RhX2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTQzLDE3ICs0OSwyOCBAQAogCiAJaWYgKHEtPmZsYWdzICYgflhUX1FVT1RBX01BU0spCiAJCXJldHVybiBmYWxzZTsKLQkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2YgY291bnRlcnMuICovCi0JcS0+bWFzdGVyID0gcTsKKworCXEtPm1hc3RlciA9IGttYWxsb2Moc2l6ZW9mKCpxLT5tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAocS0+bWFzdGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIHF1b3RhX210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0gcGFyLT5tYXRjaGluZm87CisKKwlrZnJlZShxLT5tYXN0ZXIpOworfQorCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHF1b3RhX210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lICAgICAgID0gInF1b3RhIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICA9IHF1b3RhX210LAogCS5jaGVja2VudHJ5ID0gcXVvdGFfbXRfY2hlY2ssCisJLmRlc3Ryb3kgICAgPSBxdW90YV9tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9xdW90YV9pbmZvKSwKIAkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCmluZGV4IDBkNzUxNDEuLmQ4YzBmOGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwpAQCAtMTYsNiArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAKK3N0cnVjdCB4dF9zdGF0aXN0aWNfcHJpdiB7CisJdWludDMyX3QgY291bnQ7Cit9OworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogc3RhdGlzdGljcy1iYXNlZCBtYXRjaGluZyAoXCJOdGhcIiwgcmFuZG9tKSIpOwpAQCAtMjcsNyArMzEsNyBAQAogc3RhdGljIGJvb2wKIHN0YXRpc3RpY19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSAodm9pZCAqKXBhci0+bWF0Y2hpbmZvOworCWNvbnN0IHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwogCWJvb2wgcmV0ID0gaW5mby0+ZmxhZ3MgJiBYVF9TVEFUSVNUSUNfSU5WRVJUOwogCiAJc3dpdGNoIChpbmZvLT5tb2RlKSB7CkBAIC0zNiwxMCArNDAsOSBAQAogCQkJcmV0ID0gIXJldDsKIAkJYnJlYWs7CiAJY2FzZSBYVF9TVEFUSVNUSUNfTU9ERV9OVEg6Ci0JCWluZm8gPSBpbmZvLT5tYXN0ZXI7CiAJCXNwaW5fbG9ja19iaCgmbnRoX2xvY2spOwotCQlpZiAoaW5mby0+dS5udGguY291bnQrKyA9PSBpbmZvLT51Lm50aC5ldmVyeSkgewotCQkJaW5mby0+dS5udGguY291bnQgPSAwOworCQlpZiAoaW5mby0+bWFzdGVyLT5jb3VudCsrID09IGluZm8tPnUubnRoLmV2ZXJ5KSB7CisJCQlpbmZvLT5tYXN0ZXItPmNvdW50ID0gMDsKIAkJCXJldCA9ICFyZXQ7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJm50aF9sb2NrKTsKQEAgLTU2LDE2ICs1OSwzMSBAQAogCWlmIChpbmZvLT5tb2RlID4gWFRfU1RBVElTVElDX01PREVfTUFYIHx8CiAJICAgIGluZm8tPmZsYWdzICYgflhUX1NUQVRJU1RJQ19NQVNLKQogCQlyZXR1cm4gZmFsc2U7Ci0JaW5mby0+bWFzdGVyID0gaW5mbzsKKworCWluZm8tPm1hc3RlciA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvLT5tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaW5mby0+bWFzdGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IE91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWluZm8tPm1hc3Rlci0+Y291bnQgPSBpbmZvLT51Lm50aC5jb3VudDsKKwogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBzdGF0aXN0aWNfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisKKwlrZnJlZShpbmZvLT5tYXN0ZXIpOworfQorCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X3N0YXRpc3RpY19tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAgICAgICA9ICJzdGF0aXN0aWMiLAogCS5yZXZpc2lvbiAgID0gMCwKIAkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCS5tYXRjaCAgICAgID0gc3RhdGlzdGljX210LAogCS5jaGVja2VudHJ5ID0gc3RhdGlzdGljX210X2NoZWNrLAorCS5kZXN0cm95ICAgID0gc3RhdGlzdGljX210X2Rlc3Ryb3ksCiAJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvKSwKIAkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL01ha2VmaWxlIGIvbmV0L25ldGxpbmsvTWFrZWZpbGUKaW5kZXggZTM1ODljMi4uYmRkNmRkZiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvTWFrZWZpbGUKKysrIGIvbmV0L25ldGxpbmsvTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbmV0bGluayBkcml2ZXIuCiAjCiAKLW9iai15ICAJCQkJOj0gYWZfbmV0bGluay5vIGF0dHIubyBnZW5ldGxpbmsubworb2JqLXkgIAkJCQk6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCAzYWUzY2I4Li44YjZiYmIzIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC04NSw2ICs4NSw4IEBACiAKICNkZWZpbmUgTkVUTElOS19LRVJORUxfU09DS0VUCTB4MQogI2RlZmluZSBORVRMSU5LX1JFQ1ZfUEtUSU5GTwkweDIKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUgkweDQKKyNkZWZpbmUgTkVUTElOS19SRUNWX05PX0VOT0JVRlMJMHg4CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxpbmtfc29jayAqbmxrX3NrKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTcxNiwxMCArNzE4LDE1IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfb3ZlcnJ1bihzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsICZubGtfc2soc2spLT5zdGF0ZSkpIHsKLQkJc2stPnNrX2VyciA9IEVOT0JVRlM7Ci0JCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzayk7CisKKwlpZiAoIShubGstPmZsYWdzICYgTkVUTElOS19SRUNWX05PX0VOT0JVRlMpKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbmxrX3NrKHNrKS0+c3RhdGUpKSB7CisJCQlzay0+c2tfZXJyID0gRU5PQlVGUzsKKwkJCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworCQl9CiAJfQorCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbmV0bGlua19nZXRzb2NrYnlwaWQoc3RydWN0IHNvY2sgKnNzaywgdTMyIHBpZCkKQEAgLTk1MCw2ICs5NTcsNyBAQAogCXUzMiBwaWQ7CiAJdTMyIGdyb3VwOwogCWludCBmYWlsdXJlOworCWludCBkZWxpdmVyeV9mYWlsdXJlOwogCWludCBjb25nZXN0ZWQ7CiAJaW50IGRlbGl2ZXJlZDsKIAlnZnBfdCBhbGxvY2F0aW9uOwpAQCAtOTk0LDExICsxMDAyLDE1IEBACiAJCW5ldGxpbmtfb3ZlcnJ1bihzayk7CiAJCS8qIENsb25lIGZhaWxlZC4gTm90aWZ5IEFMTCBsaXN0ZW5lcnMuICovCiAJCXAtPmZhaWx1cmUgPSAxOworCQlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IpCisJCQlwLT5kZWxpdmVyeV9mYWlsdXJlID0gMTsKIAl9IGVsc2UgaWYgKHNrX2ZpbHRlcihzaywgcC0+c2tiMikpIHsKIAkJa2ZyZWVfc2tiKHAtPnNrYjIpOwogCQlwLT5za2IyID0gTlVMTDsKIAl9IGVsc2UgaWYgKCh2YWwgPSBuZXRsaW5rX2Jyb2FkY2FzdF9kZWxpdmVyKHNrLCBwLT5za2IyKSkgPCAwKSB7CiAJCW5ldGxpbmtfb3ZlcnJ1bihzayk7CisJCWlmIChubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUikKKwkJCXAtPmRlbGl2ZXJ5X2ZhaWx1cmUgPSAxOwogCX0gZWxzZSB7CiAJCXAtPmNvbmdlc3RlZCB8PSB2YWw7CiAJCXAtPmRlbGl2ZXJlZCA9IDE7CkBAIC0xMDI1LDYgKzEwMzcsNyBAQAogCWluZm8ucGlkID0gcGlkOwogCWluZm8uZ3JvdXAgPSBncm91cDsKIAlpbmZvLmZhaWx1cmUgPSAwOworCWluZm8uZGVsaXZlcnlfZmFpbHVyZSA9IDA7CiAJaW5mby5jb25nZXN0ZWQgPSAwOwogCWluZm8uZGVsaXZlcmVkID0gMDsKIAlpbmZvLmFsbG9jYXRpb24gPSBhbGxvY2F0aW9uOwpAQCAtMTA0MiwxNiArMTA1NSwxNiBAQAogCiAJbmV0bGlua191bmxvY2tfdGFibGUoKTsKIAotCWlmIChpbmZvLnNrYjIpCi0JCWtmcmVlX3NrYihpbmZvLnNrYjIpOworCWtmcmVlX3NrYihpbmZvLnNrYjIpOworCisJaWYgKGluZm8uZGVsaXZlcnlfZmFpbHVyZSkKKwkJcmV0dXJuIC1FTk9CVUZTOwogCiAJaWYgKGluZm8uZGVsaXZlcmVkKSB7CiAJCWlmIChpbmZvLmNvbmdlc3RlZCAmJiAoYWxsb2NhdGlvbiAmIF9fR0ZQX1dBSVQpKQogCQkJeWllbGQoKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChpbmZvLmZhaWx1cmUpCi0JCXJldHVybiAtRU5PQlVGUzsKIAlyZXR1cm4gLUVTUkNIOwogfQogRVhQT1JUX1NZTUJPTChuZXRsaW5rX2Jyb2FkY2FzdCk7CkBAIC0xMTEwLDYgKzExMjMsNyBAQAogCiAJcmVhZF91bmxvY2soJm5sX3RhYmxlX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChuZXRsaW5rX3NldF9lcnIpOwogCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIG5ldGxpbmsgdGFibGUgZ3JhYmJlZCAqLwogc3RhdGljIHZvaWQgbmV0bGlua191cGRhdGVfc29ja2V0X21jKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywKQEAgLTExNjcsNiArMTE4MSwyMiBAQAogCQllcnIgPSAwOwogCQlicmVhazsKIAl9CisJY2FzZSBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUjoKKwkJaWYgKHZhbCkKKwkJCW5say0+ZmxhZ3MgfD0gTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUjsKKwkJZWxzZQorCQkJbmxrLT5mbGFncyAmPSB+TkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUjsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBORVRMSU5LX05PX0VOT0JVRlM6CisJCWlmICh2YWwpIHsKKwkJCW5say0+ZmxhZ3MgfD0gTkVUTElOS19SRUNWX05PX0VOT0JVRlM7CisJCQljbGVhcl9iaXQoMCwgJm5say0+c3RhdGUpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZubGstPndhaXQpOworCQl9IGVsc2UKKwkJCW5say0+ZmxhZ3MgJj0gfk5FVExJTktfUkVDVl9OT19FTk9CVUZTOworCQllcnIgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTE5OSw2ICsxMjI5LDI2IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJZXJyID0gMDsKIAkJYnJlYWs7CisJY2FzZSBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUjoKKwkJaWYgKGxlbiA8IHNpemVvZihpbnQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxlbiA9IHNpemVvZihpbnQpOworCQl2YWwgPSBubGstPmZsYWdzICYgTkVUTElOS19CUk9BRENBU1RfU0VORF9FUlJPUiA/IDEgOiAwOworCQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8CisJCSAgICBwdXRfdXNlcih2YWwsIG9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBORVRMSU5LX05PX0VOT0JVRlM6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJdmFsID0gbmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9OT19FTk9CVUZTID8gMSA6IDA7CisJCWlmIChwdXRfdXNlcihsZW4sIG9wdGxlbikgfHwKKwkJICAgIHB1dF91c2VyKHZhbCwgb3B0dmFsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllcnIgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJfQpAQCAtMTUyNSw4ICsxNTc1LDcgQEAKIAogc3RhdGljIHZvaWQgbmV0bGlua19kZXN0cm95X2NhbGxiYWNrKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlpZiAoY2ItPnNrYikKLQkJa2ZyZWVfc2tiKGNiLT5za2IpOworCWtmcmVlX3NrYihjYi0+c2tiKTsKIAlrZnJlZShjYik7CiB9CiAKQEAgLTE3NDMsMTIgKzE3OTIsMTggQEAKIAkJCWV4Y2x1ZGVfcGlkID0gcGlkOwogCQl9CiAKLQkJLyogZXJyb3JzIHJlcG9ydGVkIHZpYSBkZXN0aW5hdGlvbiBzay0+c2tfZXJyICovCi0JCW5sbXNnX211bHRpY2FzdChzaywgc2tiLCBleGNsdWRlX3BpZCwgZ3JvdXAsIGZsYWdzKTsKKwkJLyogZXJyb3JzIHJlcG9ydGVkIHZpYSBkZXN0aW5hdGlvbiBzay0+c2tfZXJyLCBidXQgcHJvcGFnYXRlCisJCSAqIGRlbGl2ZXJ5IGVycm9ycyBpZiBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUiBmbGFnIGlzIHNldCAqLworCQllcnIgPSBubG1zZ19tdWx0aWNhc3Qoc2ssIHNrYiwgZXhjbHVkZV9waWQsIGdyb3VwLCBmbGFncyk7CiAJfQogCi0JaWYgKHJlcG9ydCkKLQkJZXJyID0gbmxtc2dfdW5pY2FzdChzaywgc2tiLCBwaWQpOworCWlmIChyZXBvcnQpIHsKKwkJaW50IGVycjI7CisKKwkJZXJyMiA9IG5sbXNnX3VuaWNhc3Qoc2ssIHNrYiwgcGlkKTsKKwkJaWYgKCFlcnIgfHwgZXJyID09IC1FU1JDSCkKKwkJCWVyciA9IGVycjI7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE4NDksMTIgKzE5MDQsMTIgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAic2sgICAgICAgRXRoIFBpZCAgICBHcm91cHMgICAiCi0JCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzXG4iKTsKKwkJCSAiUm1lbSAgICAgV21lbSAgICAgRHVtcCAgICAgTG9ja3MgICAgIERyb3BzXG4iKTsKIAllbHNlIHsKIAkJc3RydWN0IHNvY2sgKnMgPSB2OwogCQlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2socyk7CiAKLQkJc2VxX3ByaW50ZihzZXEsICIlcCAlLTNkICUtNmQgJTA4eCAlLThkICUtOGQgJXAgJWRcbiIsCisJCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICUtOGQgJS04ZFxuIiwKIAkJCSAgIHMsCiAJCQkgICBzLT5za19wcm90b2NvbCwKIAkJCSAgIG5say0+cGlkLApAQCAtMTg2Miw3ICsxOTE3LDggQEAKIAkJCSAgIGF0b21pY19yZWFkKCZzLT5za19ybWVtX2FsbG9jKSwKIAkJCSAgIGF0b21pY19yZWFkKCZzLT5za193bWVtX2FsbG9jKSwKIAkJCSAgIG5say0+Y2IsCi0JCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcmVmY250KQorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JlZmNudCksCisJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfZHJvcHMpCiAJCQkpOwogCiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKaW5kZXggZTljMDViOC4uNmQ5YzU4ZSAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC0xMDM3LDYgKzEwMzcsMTAgQEAKIAl1bnNpZ25lZCBjaGFyICphc21wdHI7CiAJaW50IHNpemU7CiAKKwkvKiBOZXRyb20gZW1wdHkgZGF0YSBmcmFtZSBoYXMgbm8gbWVhbmluZyA6IGRvbid0IHNlbmQgKi8KKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVR8TVNHX0VPUnxNU0dfQ01TR19DT01QQVQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTE2Nyw2ICsxMTcxLDExIEBACiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAljb3BpZWQgICAgID0gc2tiLT5sZW47CiAKKwkvKiBOZXRSb20gZW1wdHkgZGF0YSBmcmFtZSBoYXMgbm8gbWVhbmluZyA6IGlnbm9yZSBpdCAqLworCWlmIChjb3BpZWQgPT0gMCkgeworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoY29waWVkID4gc2l6ZSkgewogCQljb3BpZWQgPSBzaXplOwogCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CkBAIC0xMTgyLDcgKzExOTEsNyBAQAogCiAJbXNnLT5tc2dfbmFtZWxlbiA9IHNpemVvZigqc2F4KTsKIAotCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOworb3V0Oglza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIAogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGNvcGllZDsKQEAgLTE0MzIsNyArMTQ0MSw3IEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAkJc3ByaW50ZihuYW1lLCAibnIlZCIsIGkpOwotCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBucl9wcml2YXRlKSwgbmFtZSwgbnJfc2V0dXApOworCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgbmFtZSwgbnJfc2V0dXApOwogCQlpZiAoIWRldikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJORVQvUk9NOiBucl9wcm90b19pbml0IC0gdW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3R1cmVcbiIpOwogCQkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9ucl9kZXYuYyBiL25ldC9uZXRyb20vbnJfZGV2LmMKaW5kZXggNmNhZjQ1OS4uMzUxMzcyNCAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9ucl9kZXYuYworKysgYi9uZXQvbmV0cm9tL25yX2Rldi5jCkBAIC00Miw3ICs0Miw3IEBACiAKIGludCBucl9yeF9pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlzdGF0cy0+cnhfZHJvcHBlZCsrOwpAQCAtMTcxLDggKzE3MSw3IEBACiAKIHN0YXRpYyBpbnQgbnJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBucl9wcml2YXRlICpuciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJm5yLT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CiAKIAlpZiAoIW5yX3JvdXRlX2ZyYW1lKHNrYiwgTlVMTCkpIHsKQEAgLTE4NywzNCArMTg2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5yX3ByaXZhdGUgKm5yID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmbnItPnN0YXRzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgbnJfaGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlCT0gbnJfaGVhZGVyLAogCS5yZWJ1aWxkPSBucl9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbnJfb3BlbiwKKwkubmRvX3N0b3AJCT0gbnJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5yX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBucl9zZXRfbWFjX2FkZHJlc3MsCit9OwogCiB2b2lkIG5yX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5tdHUJCT0gTlJfTUFYX1BBQ0tFVF9TSVpFOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gbnJfeG1pdDsKLQlkZXYtPm9wZW4JCT0gbnJfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbnJfY2xvc2U7Ci0KKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5yX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZucl9oZWFkZXJfb3BzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gTlJfTkVUV09SS19MRU4gKyBOUl9UUkFOU1BPUlRfTEVOOwogCWRldi0+YWRkcl9sZW4JCT0gQVgyNV9BRERSX0xFTjsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX05FVFJPTTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IG5yX3NldF9tYWNfYWRkcmVzczsKIAogCS8qIE5ldy1zdHlsZSBmbGFncy4gKi8KIAlkZXYtPmZsYWdzCQk9IElGRl9OT0FSUDsKLQotCWRldi0+Z2V0X3N0YXRzIAkJPSBucl9nZXRfc3RhdHM7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAxZmM0YTc4Li43NDc3NmRlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQlza2ItPmxlbiA9IHNrYl9sZW47CiAJfQogZHJvcDoKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC03NTYsOCArNzU2LDcgQEAKIAlzcGluX3VubG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAKIAlzay0+c2tfZGF0YV9yZWFkeShzaywgMCk7Ci0JaWYgKGNvcHlfc2tiKQotCQlrZnJlZV9za2IoY29weV9za2IpOworCWtmcmVlX3NrYihjb3B5X3NrYik7CiAJZ290byBkcm9wX25fcmVzdG9yZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKaW5kZXggMTNjYjMyMy4uYTY2MmU2MiAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYworKysgYi9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCkBAIC0yNzUsOCArMjc1LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAlwaCA9IHBuX2hkcihza2IpOwotCWlmIChwaG9uZXRfYWRkcmVzc19nZXQoc2tiLT5kZXYsIHBoLT5wbl9yZGV2KSAhPSBwaC0+cG5fcmRldikKLQkJcmV0dXJuIDA7IC8qIHdlIGFyZSBub3QgdGhlIGRlc3RpbmF0aW9uICovCiAJaWYgKHBoLT5wbl9yZXMgPT0gUE5fUFJFRklYICYmICFwc2tiX21heV9wdWxsKHNrYiwgNSkpCiAJCXJldHVybiAwOwogCWlmIChwaC0+cG5fcmVzID09IFBOX0NPTU1HUikgLyogaW5kaWNhdGlvbnMgKi8KQEAgLTM0NCw4ICszNDIsOCBAQAogCQkJc3RydWN0IHBhY2tldF90eXBlICpwa3R0eXBlLAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgcGhvbmV0aGRyICpwaDsKLQlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHNvY2thZGRyX3BuIHNhOwogCXUxNiBsZW47CiAKQEAgLTM2NCwyOSArMzYyLDI4IEBACiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAogCXBuX3NrYl9nZXRfZHN0X3NvY2thZGRyKHNrYiwgJnNhKTsKLQlpZiAocG5fc29ja2FkZHJfZ2V0X2FkZHIoJnNhKSA9PSAwKQotCQlnb3RvIG91dDsgLyogY3VycmVudGx5LCB3ZSBjYW5ub3QgYmUgZGV2aWNlIDAgKi8KIAotCXNrID0gcG5fZmluZF9zb2NrX2J5X3NhKGRldl9uZXQoZGV2KSwgJnNhKTsKLQlpZiAoc2sgPT0gTlVMTCkgeworCS8qIGNoZWNrIGlmIHdlIGFyZSB0aGUgZGVzdGluYXRpb24gKi8KKwlpZiAocGhvbmV0X2FkZHJlc3NfbG9va3VwKG5ldCwgcG5fc29ja2FkZHJfZ2V0X2FkZHIoJnNhKSkgPT0gMCkgeworCQkvKiBQaG9uZXQgcGFja2V0IGlucHV0ICovCisJCXN0cnVjdCBzb2NrICpzayA9IHBuX2ZpbmRfc29ja19ieV9zYShuZXQsICZzYSk7CisKKwkJaWYgKHNrKQorCQkJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IsIDApOworCiAJCWlmIChjYW5fcmVzcG9uZChza2IpKSB7CiAJCQlzZW5kX29ial91bnJlYWNoYWJsZShza2IpOwogCQkJc2VuZF9yZXNldF9pbmRpY2F0aW9ucyhza2IpOwogCQl9Ci0JCWdvdG8gb3V0OwogCX0KIAotCS8qIFB1c2ggZGF0YSB0byB0aGUgc29ja2V0IChvciBvdGhlciBzb2NrZXRzIGNvbm5lY3RlZCB0byBpdCkuICovCi0JcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IsIDApOwotCiBvdXQ6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBob25ldF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUEhPTkVUKSwKLQkuZGV2ID0gTlVMTCwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcGhvbmV0X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9QSE9ORVQpLAogCS5mdW5jID0gcGhvbmV0X3JjdiwKIH07CiAKQEAgLTQyOCwxNiArNDI1LDE4IEBACiB7CiAJaW50IGVycjsKIAorCWVyciA9IHBob25ldF9kZXZpY2VfaW5pdCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAllcnIgPSBzb2NrX3JlZ2lzdGVyKCZwaG9uZXRfcHJvdG9fZmFtaWx5KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUCiAJCQkicGhvbmV0IHByb3RvY29sIGZhbWlseSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9zb2NrOwogCX0KIAotCXBob25ldF9kZXZpY2VfaW5pdCgpOwogCWRldl9hZGRfcGFjaygmcGhvbmV0X3BhY2tldF90eXBlKTsKLQlwaG9uZXRfbmV0bGlua19yZWdpc3RlcigpOwogCXBob25ldF9zeXNjdGxfaW5pdCgpOwogCiAJZXJyID0gaXNpX3JlZ2lzdGVyKCk7CkBAIC00NDksNiArNDQ4LDcgQEAKIAlwaG9uZXRfc3lzY3RsX2V4aXQoKTsKIAlzb2NrX3VucmVnaXN0ZXIoUEZfUEhPTkVUKTsKIAlkZXZfcmVtb3ZlX3BhY2soJnBob25ldF9wYWNrZXRfdHlwZSk7CitlcnJfc29jazoKIAlwaG9uZXRfZGV2aWNlX2V4aXQoKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9kZXYuYyBiL25ldC9waG9uZXQvcG5fZGV2LmMKaW5kZXggNTQ5MWJmNS4uODBhMzIyZCAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wbl9kZXYuYworKysgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCkBAIC0yOCwzMiArMjgsNDEgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9waG9uZXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L3Bob25ldC9wbl9kZXYuaD4KIAotLyogd2hlbiBhY2Nlc3NpbmcsIHJlbWVtYmVyIHRvIGxvY2sgd2l0aCBzcGluX2xvY2soJnBuZGV2cy5sb2NrKTsgKi8KLXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgcG5kZXZzID0gewotCS5saXN0ID0gTElTVF9IRUFEX0lOSVQocG5kZXZzLmxpc3QpLAotCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQocG5kZXZzLmxvY2spLAorc3RydWN0IHBob25ldF9uZXQgeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgcG5kZXZzOwogfTsKIAoraW50IHBob25ldF9uZXRfaWQ7CisKK3N0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBob25ldF9kZXZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IG5ldF9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCk7CisJcmV0dXJuICZwbm4tPnBuZGV2czsKK30KKwogLyogQWxsb2NhdGUgbmV3IFBob25ldCBkZXZpY2UuICovCiBzdGF0aWMgc3RydWN0IHBob25ldF9kZXZpY2UgKl9fcGhvbmV0X2RldmljZV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQgPSBrbWFsbG9jKHNpemVvZigqcG5kKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBuZCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlwbmQtPm5ldGRldiA9IGRldjsKIAliaXRtYXBfemVybyhwbmQtPmFkZHJzLCA2NCk7CiAKLQlsaXN0X2FkZCgmcG5kLT5saXN0LCAmcG5kZXZzLmxpc3QpOworCWxpc3RfYWRkKCZwbmQtPmxpc3QsICZwbmRldnMtPmxpc3QpOwogCXJldHVybiBwbmQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGhvbmV0X2RldmljZSAqX19waG9uZXRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQlpZiAocG5kLT5uZXRkZXYgPT0gZGV2KQogCQkJcmV0dXJuIHBuZDsKIAl9CkBAIC02OCwzMiArNzcsMzMgQEAKIAogc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9kZXZpY2VfZ2V0KHN0cnVjdCBuZXQgKm5ldCkKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QobmV0KTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy5saXN0LCBsaXN0KSB7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCWRldiA9IHBuZC0+bmV0ZGV2OwogCQlCVUdfT04oIWRldik7CiAKLQkJaWYgKG5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkgJiYKLQkJCShkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkgJiYKKwkJaWYgKChkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkgJiYKIAkJCSgocG5kLT5uZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkgPT0gSUZGX1VQKQogCQkJYnJlYWs7CiAJCWRldiA9IE5VTEw7CiAJfQogCWlmIChkZXYpCiAJCWRldl9ob2xkKGRldik7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlyZXR1cm4gZGV2OwogfQogCiBpbnQgcGhvbmV0X2FkZHJlc3NfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAkvKiBGaW5kIG9yIGNyZWF0ZSBQaG9uZXQtc3BlY2lmaWMgZGV2aWNlIGRhdGEgKi8KIAlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAlpZiAocG5kID09IE5VTEwpCkBAIC0xMDIsMzEgKzExMiwzMyBAQAogCQllcnIgPSAtRU5PTUVNOwogCWVsc2UgaWYgKHRlc3RfYW5kX3NldF9iaXQoYWRkciA+PiAyLCBwbmQtPmFkZHJzKSkKIAkJZXJyID0gLUVFWElTVDsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKIGludCBwaG9uZXRfYWRkcmVzc19kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCWludCBlcnIgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXBuZCA9IF9fcGhvbmV0X2dldChkZXYpOwogCWlmICghcG5kIHx8ICF0ZXN0X2FuZF9jbGVhcl9iaXQoYWRkciA+PiAyLCBwbmQtPmFkZHJzKSkKIAkJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAJZWxzZSBpZiAoYml0bWFwX2VtcHR5KHBuZC0+YWRkcnMsIDY0KSkKIAkJX19waG9uZXRfZGV2aWNlX2ZyZWUocG5kKTsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKIC8qIEdldHMgYSBzb3VyY2UgYWRkcmVzcyB0b3dhcmQgYSBkZXN0aW5hdGlvbiwgdGhyb3VnaCBhIGludGVyZmFjZS4gKi8KIHU4IHBob25ldF9hZGRyZXNzX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJaWYgKHBuZCkgewogCQlCVUdfT04oYml0bWFwX2VtcHR5KHBuZC0+YWRkcnMsIDY0KSk7CkBAIC0xMzYsMzAgKzE0OCwzMSBAQAogCQkJYWRkciA9IGZpbmRfZmlyc3RfYml0KHBuZC0+YWRkcnMsIDY0KSA8PCAyOwogCX0gZWxzZQogCQlhZGRyID0gUE5fTk9fQUREUjsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBhZGRyOwogfQogCiBpbnQgcGhvbmV0X2FkZHJlc3NfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QobmV0KTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOworCWludCBlcnIgPSAtRUFERFJOT1RBVkFJTDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKLQkJaWYgKCFuZXRfZXEoZGV2X25ldChwbmQtPm5ldGRldiksIG5ldCkpCi0JCQljb250aW51ZTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJLyogRG9uJ3QgYWxsb3cgdW5yZWdpc3RlcmluZyBkZXZpY2VzISAqLwogCQlpZiAoKHBuZC0+bmV0ZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHx8CiAJCQkJKChwbmQtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSAhPSBJRkZfVVApCiAJCQljb250aW51ZTsKIAogCQlpZiAodGVzdF9iaXQoYWRkciA+PiAyLCBwbmQtPmFkZHJzKSkgewotCQkJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQkJCXJldHVybiAwOworCQkJZXJyID0gMDsKKwkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Citmb3VuZDoKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBub3RpZnkgUGhvbmV0IG9mIGRldmljZSBldmVudHMgKi8KQEAgLTE2OSwxNCArMTgyLDE2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKIAogCWlmICh3aGF0ID09IE5FVERFVl9VTlJFR0lTVEVSKSB7CisJCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2czsKIAkJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAogCQkvKiBEZXN0cm95IHBob25ldC1zcGVjaWZpYyBkZXZpY2UgZGF0YSAqLwotCQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwkJcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CisJCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAkJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJCWlmIChwbmQpCiAJCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOwotCQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCQlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTE4NywyNCArMjAyLDUyIEBACiAJLnByaW9yaXR5ID0gMCwKIH07CiAKLS8qIEluaXRpYWxpemUgUGhvbmV0IGRldmljZXMgbGlzdCAqLwotdm9pZCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCkKKy8qIFBlci1uYW1lc3BhY2UgUGhvbmV0IGRldmljZXMgaGFuZGxpbmcgKi8KK3N0YXRpYyBpbnQgcGhvbmV0X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKKwlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0ga21hbGxvYyhzaXplb2YoKnBubiksIEdGUF9LRVJORUwpOworCWlmICghcG5uKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZwbm4tPnBuZGV2cy5saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcG5uLT5wbmRldnMubG9jayk7CisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCwgcG5uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGhvbmV0X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0gbmV0X2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkKTsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwbmQsIG4sICZwbm4tPnBuZGV2cy5saXN0LCBsaXN0KQorCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOworCisJa2ZyZWUocG5uKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwaG9uZXRfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBob25ldF9pbml0X25ldCwKKwkuZXhpdCA9IHBob25ldF9leGl0X25ldCwKK307CisKKy8qIEluaXRpYWxpemUgUGhvbmV0IGRldmljZXMgbGlzdCAqLworaW50IF9faW5pdCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnBob25ldF9uZXRfaWQsICZwaG9uZXRfbmV0X29wcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcGhvbmV0X2RldmljZV9ub3RpZmllcik7CisJZXJyID0gcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIoKTsKKwlpZiAoZXJyKQorCQlwaG9uZXRfZGV2aWNlX2V4aXQoKTsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIHBob25ldF9kZXZpY2VfZXhpdCh2b2lkKQogewotCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQsICpuOwotCiAJcnRubF91bnJlZ2lzdGVyX2FsbChQRl9QSE9ORVQpOwotCXJ0bmxfbG9jaygpOwotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBuZCwgbiwgJnBuZGV2cy5saXN0LCBsaXN0KQotCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlydG5sX3VubG9jaygpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwaG9uZXRfZGV2aWNlX25vdGlmaWVyKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHBob25ldF9uZXRfaWQsICZwaG9uZXRfbmV0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCmluZGV4IDI0MmZlOGYuLmNlYzRlNTkgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fbmV0bGluay5jCisrKyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCkBAIC00Nyw4ICs0Nyw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBkZXZfbmV0KGRldiksIDAsCi0JCQkgIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBkZXZfbmV0KGRldiksIDAsCisJCSAgICBSVE5MR1JQX1BIT05FVF9JRkFERFIsIE5VTEwsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKGRldl9uZXQoZGV2KSwgUlROTEdSUF9QSE9ORVRfSUZBRERSLCBlcnIpOwpAQCAtMTIzLDE3ICsxMjQsMTYgQEAKIAogc3RhdGljIGludCBnZXRhZGRyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJaW50IGRldl9pZHggPSAwLCBkZXZfc3RhcnRfaWR4ID0gY2ItPmFyZ3NbMF07CiAJaW50IGFkZHJfaWR4ID0gMCwgYWRkcl9zdGFydF9pZHggPSBjYi0+YXJnc1sxXTsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKKwlwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3Qoc29ja19uZXQoc2tiLT5zaykpOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQl1OCBhZGRyOwogCi0JCWlmICghbmV0X2VxKGRldl9uZXQocG5kLT5uZXRkZXYpLCBuZXQpKQotCQkJY29udGludWU7CiAJCWlmIChkZXZfaWR4ID4gZGV2X3N0YXJ0X2lkeCkKIAkJCWFkZHJfc3RhcnRfaWR4ID0gMDsKIAkJaWYgKGRldl9pZHgrKyA8IGRldl9zdGFydF9pZHgpCkBAIC0xNTMsMTYgKzE1MywyMSBAQAogCX0KIAogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJY2ItPmFyZ3NbMF0gPSBkZXZfaWR4OwogCWNiLT5hcmdzWzFdID0gYWRkcl9pZHg7CiAKIAlyZXR1cm4gc2tiLT5sZW47CiB9CiAKLXZvaWQgX19pbml0IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpCitpbnQgX19pbml0IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ORVdBRERSLCBhZGRyX2RvaXQsIE5VTEwpOwotCXJ0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fREVMQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKLQlydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX0dFVEFERFIsIE5VTEwsIGdldGFkZHJfZHVtcGl0KTsKKwlpbnQgZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX05FV0FERFIsIGFkZHJfZG9pdCwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEZ1cnRoZXIgX19ydG5sX3JlZ2lzdGVyKCkgY2Fubm90IGZhaWwgKi8KKwlfX3J0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fREVMQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKKwlfX3J0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fR0VUQUREUiwgTlVMTCwgZ2V0YWRkcl9kdW1waXQpOworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9LY29uZmlnIGIvbmV0L3Jkcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Njc3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorCitjb25maWcgUkRTCisJdHJpc3RhdGUgIlJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBJTkVUICYmIElORklOSUJBTkRfSVBPSUIgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJTkZJTklCQU5EICYmIElORklOSUJBTkRfQUREUl9UUkFOUworCS0tLWhlbHAtLS0KKwkgIFJEUyBwcm92aWRlcyByZWxpYWJsZSwgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcworCSAgb3ZlciBJbmZpbmliYW5kLgorCitjb25maWcgUkRTX0RFQlVHCisgICAgICAgIGJvb2wgIkRlYnVnZ2luZyBtZXNzYWdlcyIKKwlkZXBlbmRzIG9uIFJEUworICAgICAgICBkZWZhdWx0IG4KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9NYWtlZmlsZSBiL25ldC9yZHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMjc1OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorb2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm8KK3Jkcy15IDo9CWFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcCisJCQlyZWN2Lm8gc2VuZC5vIHN0YXRzLm8gc3lzY3RsLm8gdGhyZWFkcy5vIHRyYW5zcG9ydC5vIFwKKwkJCWxvb3AubyBwYWdlLm8gcmRtYS5vIFwKKwkJCXJkbWFfdHJhbnNwb3J0Lm8gXAorCQkJaWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXAorCQkJaWJfc3lzY3RsLm8gaWJfcmRtYS5vIFwKKwkJCWl3Lm8gaXdfY20ubyBpd19yZWN2Lm8gaXdfcmluZy5vIGl3X3NlbmQubyBpd19zdGF0cy5vIFwKKwkJCWl3X3N5c2N0bC5vIGl3X3JkbWEubworCitpZmVxICgkKENPTkZJR19SRFNfREVCVUcpLCB5KQorRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKK2VuZGlmCisKZGlmZiAtLWdpdCBhL25ldC9yZHMvYWZfcmRzLmMgYi9uZXQvcmRzL2FmX3Jkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwY2YxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2FmX3Jkcy5jCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKKy8qIHRoaXMgaXMganVzdCB1c2VkIGZvciBzdGF0cyBnYXRoZXJpbmcgOi8gKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3NvY2tfbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfc29ja19jb3VudDsKK3N0YXRpYyBMSVNUX0hFQUQocmRzX3NvY2tfbGlzdCk7CitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfcG9sbF93YWl0cSk7CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBhcyB0aGUgZmluYWwgZGVzY3JpcHRvciByZWZlcmVuY2luZyB0aGlzIHNvY2tldCBpcyBjbG9zZWQuCisgKiBXZSBoYXZlIHRvIHVuYmluZCB0aGUgc29ja2V0IHNvIHRoYXQgYW5vdGhlciBzb2NrZXQgY2FuIGJlIGJvdW5kIHRvIHRoZQorICogYWRkcmVzcyBpdCB3YXMgdXNpbmcuCisgKgorICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGFib3V0IHJhY2luZyB3aXRoIHRoZSBpbmNvbWluZyBwYXRoLiAgc29ja19vcnBoYW4oKQorICogc2V0cyBTT0NLX0RFQUQgYW5kIHdlIHVzZSB0aGF0IGFzIGFuIGluZGljYXRvciB0byB0aGUgcnggcGF0aCB0aGF0IG5ldworICogbWVzc2FnZXMgc2hvdWxkbid0IGJlIHF1ZXVlZC4KKyAqLworc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChzayA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKworCXNvY2tfb3JwaGFuKHNrKTsKKwkvKiBOb3RlIC0gcmRzX2NsZWFyX3JlY3ZfcXVldWUgZ3JhYnMgcnNfcmVjdl9sb2NrLCBzbworCSAqIHRoYXQgZW5zdXJlcyB0aGUgcmVjdiBwYXRoIGhhcyBjb21wbGV0ZWQgbWVzc2luZworCSAqIHdpdGggdGhlIHNvY2tldC4gKi8KKwlyZHNfY2xlYXJfcmVjdl9xdWV1ZShycyk7CisJcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChycyk7CisJcmRzX3JlbW92ZV9ib3VuZChycyk7CisJcmRzX3NlbmRfZHJvcF90byhycywgTlVMTCk7CisJcmRzX3JkbWFfZHJvcF9rZXlzKHJzKTsKKwlyZHNfbm90aWZ5X3F1ZXVlX2dldChycywgTlVMTCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJnJzLT5yc19pdGVtKTsKKwlyZHNfc29ja19jb3VudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCXNvY2stPnNrID0gTlVMTDsKKwlzb2NrX3B1dChzayk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYXJlZnVsIG5vdCB0byByYWNlIHdpdGggcmRzX3JlbGVhc2UgLT4gc29ja19vcnBoYW4gd2hpY2ggY2xlYXJzIHNrX3NsZWVwLgorICogX2JoKCkgaXNuJ3QgT0sgaGVyZSwgd2UncmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGhhbmRsZXJzLiAgSXQncyBwcm9iYWJseSBPSworICogdG8gd2FrZSB0aGUgd2FpdHF1ZXVlIGFmdGVyIHNrX3NsZWVwIGlzIGNsZWFyIGFzIHdlIGhvbGQgYSBzb2NrIHJlZiwgYnV0CisgKiB0aGlzIHNlZW1zIG1vcmUgY29uc2VydmF0aXZlLgorICogTkIgLSBub3JtYWxseSwgb25lIHdvdWxkIHVzZSBza19jYWxsYmFja19sb2NrIGZvciB0aGlzLCBidXQgd2UgY2FuCisgKiBnZXQgaGVyZSBmcm9tIGludGVycnVwdHMsIHdoZXJlYXMgdGhlIG5ldHdvcmsgY29kZSBncmFicyBza19jYWxsYmFja19sb2NrCisgKiB3aXRoIF9sb2NrX2JoIG9ubHkgLSBzbyByZWx5aW5nIG9uIHNrX2NhbGxiYWNrX2xvY2sgaW50cm9kdWNlcyBsaXZlbG9ja3MuCisgKi8KK3ZvaWQgcmRzX3dha2Vfc2tfc2xlZXAoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlfX3Jkc193YWtlX3NrX3NsZWVwKHJkc19yc190b19zayhycykpOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCByZHNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkgICAgICAgaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc29jay0+c2spOworCisJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7CisKKwkvKiByYWNleSwgZG9uJ3QgY2FyZSAqLworCWlmIChwZWVyKSB7CisJCWlmICghcnMtPnJzX2Nvbm5fYWRkcikKKwkJCXJldHVybiAtRU5PVENPTk47CisKKwkJc2luLT5zaW5fcG9ydCA9IHJzLT5yc19jb25uX3BvcnQ7CisJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwl9IGVsc2UgeworCQlzaW4tPnNpbl9wb3J0ID0gcnMtPnJzX2JvdW5kX3BvcnQ7CisJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gcnMtPnJzX2JvdW5kX2FkZHI7CisJfQorCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworCSp1YWRkcl9sZW4gPSBzaXplb2YoKnNpbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSRFMnIHBvbGwgaXMgd2l0aG91dCBhIGRvdWJ0IHRoZSBsZWFzdCBpbnR1aXRpdmUgcGFydCBvZiB0aGUgaW50ZXJmYWNlLAorICogYXMgUE9MTElOIGFuZCBQT0xMT1VUIGRvIG5vdCBiZWhhdmUgZW50aXJlbHkgYXMgeW91IHdvdWxkIGV4cGVjdCBmcm9tCisgKiBhIG5ldHdvcmsgcHJvdG9jb2wuCisgKgorICogUE9MTElOIGlzIGFzc2VydGVkIGlmCisgKiAgLQl0aGVyZSBpcyBkYXRhIG9uIHRoZSByZWNlaXZlIHF1ZXVlLgorICogIC0JdG8gc2lnbmFsIHRoYXQgYSBwcmV2aW91c2x5IGNvbmdlc3RlZCBkZXN0aW5hdGlvbiBtYXkgaGF2ZSBiZWNvbWUKKyAqCXVuY29uZ2VzdGVkCisgKiAgLQlBIG5vdGlmaWNhdGlvbiBoYXMgYmVlbiBxdWV1ZWQgdG8gdGhlIHNvY2tldCAodGhpcyBjYW4gYmUgYSBjb25nZXN0aW9uCisgKgl1cGRhdGUsIG9yIGEgUkRNQSBjb21wbGV0aW9uKS4KKyAqCisgKiBQT0xMT1VUIGlzIGFzc2VydGVkIGlmIHRoZXJlIGlzIHJvb20gb24gdGhlIHNlbmQgcXVldWUuIFRoaXMgZG9lcyBub3QgbWVhbgorICogaG93ZXZlciwgdGhhdCB0aGUgbmV4dCBzZW5kbXNnKCkgY2FsbCB3aWxsIHN1Y2NlZWQuIElmIHRoZSBhcHBsaWNhdGlvbiB0cmllcworICogdG8gc2VuZCB0byBhIGNvbmdlc3RlZCBkZXN0aW5hdGlvbiwgdGhlIHN5c3RlbSBjYWxsIG1heSBzdGlsbCBmYWlsIChhbmQKKyAqIHJldHVybiBFTk9CVUZTKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgICAgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBvbGxfd2FpdChmaWxlLCBzay0+c2tfc2xlZXAsIHdhaXQpOworCisJcG9sbF93YWl0KGZpbGUsICZyZHNfcG9sbF93YWl0cSwgd2FpdCk7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWlmICghcnMtPnJzX2NvbmdfbW9uaXRvcikgeworCQkvKiBXaGVuIGEgY29uZ2VzdGlvbiBtYXAgd2FzIHVwZGF0ZWQsIHdlIHNpZ25hbCBQT0xMSU4gZm9yCisJCSAqICJoaXN0b3JpY2FsIiByZWFzb25zLiBBcHBsaWNhdGlvbnMgY2FuIGFsc28gcG9sbCBmb3IKKwkJICogV1JCQU5EIGluc3RlYWQuICovCisJCWlmIChyZHNfY29uZ191cGRhdGVkX3NpbmNlKCZycy0+cnNfY29uZ190cmFjaykpCisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFdSQkFORCk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCWlmIChycy0+cnNfY29uZ19ub3RpZnkpCisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwl9CisJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfcmVjdl9xdWV1ZSkKKwkgfHwgIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpKQorCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA8IHJkc19za19zbmRidWYocnMpKQorCQltYXNrIHw9IChQT0xMT1VUIHwgUE9MTFdSTk9STSk7CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NhbmNlbF9zZW50X3RvKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgICAgICBpbnQgbGVuKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHJldCA9IDA7CisKKwkvKiByYWNpbmcgd2l0aCBhbm90aGVyIHRocmVhZCBiaW5kaW5nIHNlZW1zIG9rIGhlcmUgKi8KKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKCZzaW4sIG9wdHZhbCwgc2l6ZW9mKHNpbikpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19zZW5kX2Ryb3BfdG8ocnMsICZzaW4pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3NldF9ib29sX29wdGlvbih1bnNpZ25lZCBjaGFyICpvcHR2YXIsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgICAgICAgaW50IG9wdGxlbikKK3sKKwlpbnQgdmFsdWU7CisKKwlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChnZXRfdXNlcih2YWx1ZSwgKGludCBfX3VzZXIgKikgb3B0dmFsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJKm9wdHZhciA9ICEhdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NvbmdfbW9uaXRvcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJICAgIGludCBvcHRsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IHJkc19zZXRfYm9vbF9vcHRpb24oJnJzLT5yc19jb25nX21vbml0b3IsIG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKHJzLT5yc19jb25nX21vbml0b3IpIHsKKwkJCXJkc19jb25nX2FkZF9zb2NrZXQocnMpOworCQl9IGVsc2UgeworCQkJcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChycyk7CisJCQlycy0+cnNfY29uZ19tYXNrID0gMDsKKwkJCXJzLT5yc19jb25nX25vdGlmeSA9IDA7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc29jay0+c2spOworCWludCByZXQ7CisKKwlpZiAobGV2ZWwgIT0gU09MX1JEUykgeworCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgUkRTX0NBTkNFTF9TRU5UX1RPOgorCQlyZXQgPSByZHNfY2FuY2VsX3NlbnRfdG8ocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfR0VUX01SOgorCQlyZXQgPSByZHNfZ2V0X21yKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX0ZSRUVfTVI6CisJCXJldCA9IHJkc19mcmVlX21yKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX1JFQ1ZFUlI6CisJCXJldCA9IHJkc19zZXRfYm9vbF9vcHRpb24oJnJzLT5yc19yZWN2ZXJyLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX0NPTkdfTU9OSVRPUjoKKwkJcmV0ID0gcmRzX2NvbmdfbW9uaXRvcihycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc29jay0+c2spOworCWludCByZXQgPSAtRU5PUFJPVE9PUFQsIGxlbjsKKworCWlmIChsZXZlbCAhPSBTT0xfUkRTKQorCQlnb3RvIG91dDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBSRFNfSU5GT19GSVJTVCAuLi4gUkRTX0lORk9fTEFTVDoKKwkJcmV0ID0gcmRzX2luZm9fZ2V0c29ja29wdChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsCisJCQkJCSAgb3B0bGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIFJEU19SRUNWRVJSOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlCisJCWlmIChwdXRfdXNlcihycy0+cnNfcmVjdmVyciwgKGludCBfX3VzZXIgKikgb3B0dmFsKQorCQkgfHwgcHV0X3VzZXIoc2l6ZW9mKGludCksIG9wdGxlbikpCisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbnQgcmRzX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJICAgICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCWludCByZXQgPSAwOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChhZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKwkJcmV0ID0gLUVBRk5PU1VQUE9SVDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpKSB7CisJCXJldCA9IC1FREVTVEFERFJSRVE7CisJCWdvdG8gb3V0OworCX0KKworCXJzLT5yc19jb25uX2FkZHIgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwlycy0+cnNfY29ubl9wb3J0ID0gc2luLT5zaW5fcG9ydDsKKworb3V0OgorCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwcm90byByZHNfcHJvdG8gPSB7CisJLm5hbWUJICA9ICJSRFMiLAorCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplID0gc2l6ZW9mKHN0cnVjdCByZHNfc29jayksCit9OworCitzdGF0aWMgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0geworCS5mYW1pbHkgPQlBRl9SRFMsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlbGVhc2UgPQlyZHNfcmVsZWFzZSwKKwkuYmluZCA9CQlyZHNfYmluZCwKKwkuY29ubmVjdCA9CXJkc19jb25uZWN0LAorCS5zb2NrZXRwYWlyID0Jc29ja19ub19zb2NrZXRwYWlyLAorCS5hY2NlcHQgPQlzb2NrX25vX2FjY2VwdCwKKwkuZ2V0bmFtZSA9CXJkc19nZXRuYW1lLAorCS5wb2xsID0JCXJkc19wb2xsLAorCS5pb2N0bCA9CXJkc19pb2N0bCwKKwkubGlzdGVuID0Jc29ja19ub19saXN0ZW4sCisJLnNodXRkb3duID0Jc29ja19ub19zaHV0ZG93biwKKwkuc2V0c29ja29wdCA9CXJkc19zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0ID0JcmRzX2dldHNvY2tvcHQsCisJLnNlbmRtc2cgPQlyZHNfc2VuZG1zZywKKwkucmVjdm1zZyA9CXJkc19yZWN2bXNnLAorCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKKwkuc2VuZHBhZ2UgPQlzb2NrX25vX3NlbmRwYWdlLAorfTsKKworc3RhdGljIGludCBfX3Jkc19jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJvdG9jb2wpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCisJc29ja19pbml0X2RhdGEoc29jaywgc2spOworCXNvY2stPm9wcwkJPSAmcmRzX3Byb3RvX29wczsKKwlzay0+c2tfcHJvdG9jb2wJCT0gcHJvdG9jb2w7CisKKwlycyA9IHJkc19za190b19ycyhzayk7CisJc3Bpbl9sb2NrX2luaXQoJnJzLT5yc19sb2NrKTsKKwlyd2xvY2tfaW5pdCgmcnMtPnJzX3JlY3ZfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19zZW5kX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX3JlY3ZfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX2NvbmdfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnJzLT5yc19yZG1hX2xvY2spOworCXJzLT5yc19yZG1hX2tleXMgPSBSQl9ST09UOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZycy0+cnNfaXRlbSwgJnJkc19zb2NrX2xpc3QpOworCXJkc19zb2NrX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCB8fCBwcm90b2NvbCkKKwkJcmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7CisKKwlzayA9IHNrX2FsbG9jKG5ldCwgQUZfUkRTLCBHRlBfQVRPTUlDLCAmcmRzX3Byb3RvKTsKKwlpZiAoIXNrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiBfX3Jkc19jcmVhdGUoc29jaywgc2ssIHByb3RvY29sKTsKK30KKwordm9pZCByZHNfc29ja19hZGRyZWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7Cit9CisKK3ZvaWQgcmRzX3NvY2tfcHV0KHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSByZHNfZmFtaWx5X29wcyA9IHsKKwkuZmFtaWx5ID0JQUZfUkRTLAorCS5jcmVhdGUgPQlyZHNfY3JlYXRlLAorCS5vd25lcgk9CVRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHZvaWQgcmRzX3NvY2tfaW5jX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXN0cnVjdCByZHNfc29jayAqcnM7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCByZHNfaW5jb21pbmcgKmluYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3RhbCA9IDA7CisKKwlsZW4gLz0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzLCAmcmRzX3NvY2tfbGlzdCwgcnNfaXRlbSkgeworCQlzayA9IHJkc19yc190b19zayhycyk7CisJCXJlYWRfbG9jaygmcnMtPnJzX3JlY3ZfbG9jayk7CisKKwkJLyogWFhYIHRvbyBsYXp5IHRvIG1haW50YWluIGNvdW50cy4uICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5jLCAmcnMtPnJzX3JlY3ZfcXVldWUsIGlfaXRlbSkgeworCQkJdG90YWwrKzsKKwkJCWlmICh0b3RhbCA8PSBsZW4pCisJCQkJcmRzX2luY19pbmZvX2NvcHkoaW5jLCBpdGVyLCBpbmMtPmlfc2FkZHIsCisJCQkJCQkgIHJzLT5yc19ib3VuZF9hZGRyLCAxKTsKKwkJfQorCisJCXJlYWRfdW5sb2NrKCZycy0+cnNfcmVjdl9sb2NrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlsZW5zLT5uciA9IHRvdGFsOworCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCByZHNfc29ja19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19pbmZvX3NvY2tldCBzaW5mbzsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsZW4gLz0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19zb2NrZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCWlmIChsZW4gPCByZHNfc29ja19jb3VudCkKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzLCAmcmRzX3NvY2tfbGlzdCwgcnNfaXRlbSkgeworCQlzaW5mby5zbmRidWYgPSByZHNfc2tfc25kYnVmKHJzKTsKKwkJc2luZm8ucmN2YnVmID0gcmRzX3NrX3JjdmJ1Zihycyk7CisJCXNpbmZvLmJvdW5kX2FkZHIgPSBycy0+cnNfYm91bmRfYWRkcjsKKwkJc2luZm8uY29ubmVjdGVkX2FkZHIgPSBycy0+cnNfY29ubl9hZGRyOworCQlzaW5mby5ib3VuZF9wb3J0ID0gcnMtPnJzX2JvdW5kX3BvcnQ7CisJCXNpbmZvLmNvbm5lY3RlZF9wb3J0ID0gcnMtPnJzX2Nvbm5fcG9ydDsKKwkJc2luZm8uaW51bSA9IHNvY2tfaV9pbm8ocmRzX3JzX3RvX3NrKHJzKSk7CisKKwkJcmRzX2luZm9fY29weShpdGVyLCAmc2luZm8sIHNpemVvZihzaW5mbykpOworCX0KKworb3V0OgorCWxlbnMtPm5yID0gcmRzX3NvY2tfY291bnQ7CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fc29ja2V0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJkc19leGl0KHZvaWQpCit7CisJcmRzX3JkbWFfZXhpdCgpOworCXNvY2tfdW5yZWdpc3RlcihyZHNfZmFtaWx5X29wcy5mYW1pbHkpOworCXByb3RvX3VucmVnaXN0ZXIoJnJkc19wcm90byk7CisJcmRzX2Nvbm5fZXhpdCgpOworCXJkc19jb25nX2V4aXQoKTsKKwlyZHNfc3lzY3RsX2V4aXQoKTsKKwlyZHNfdGhyZWFkc19leGl0KCk7CisJcmRzX3N0YXRzX2V4aXQoKTsKKwlyZHNfcGFnZV9leGl0KCk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NPQ0tFVFMsIHJkc19zb2NrX2luZm8pOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRUNWX01FU1NBR0VTLCByZHNfc29ja19pbmNfaW5mbyk7Cit9Cittb2R1bGVfZXhpdChyZHNfZXhpdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHJkc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJkc19jb25uX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSByZHNfdGhyZWFkc19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY29ubjsKKwlyZXQgPSByZHNfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF90aHJlYWRzOworCXJldCA9IHJkc19zdGF0c19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3lzY3RsOworCXJldCA9IHByb3RvX3JlZ2lzdGVyKCZyZHNfcHJvdG8sIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N0YXRzOworCXJldCA9IHNvY2tfcmVnaXN0ZXIoJnJkc19mYW1pbHlfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wcm90bzsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU09DS0VUUywgcmRzX3NvY2tfaW5mbyk7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRUNWX01FU1NBR0VTLCByZHNfc29ja19pbmNfaW5mbyk7CisKKwkvKiBpYi9pd2FycCB0cmFuc3BvcnRzIGN1cnJlbnRseSBjb21waWxlZC1pbiAqLworCXJldCA9IHJkc19yZG1hX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zb2NrOworCWdvdG8gb3V0OworCitvdXRfc29jazoKKwlzb2NrX3VucmVnaXN0ZXIocmRzX2ZhbWlseV9vcHMuZmFtaWx5KTsKK291dF9wcm90bzoKKwlwcm90b191bnJlZ2lzdGVyKCZyZHNfcHJvdG8pOworb3V0X3N0YXRzOgorCXJkc19zdGF0c19leGl0KCk7CitvdXRfc3lzY3RsOgorCXJkc19zeXNjdGxfZXhpdCgpOworb3V0X3RocmVhZHM6CisJcmRzX3RocmVhZHNfZXhpdCgpOworb3V0X2Nvbm46CisJcmRzX2Nvbm5fZXhpdCgpOworCXJkc19jb25nX2V4aXQoKTsKKwlyZHNfcGFnZV9leGl0KCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHJkc19pbml0KTsKKworI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgIjQuMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUgICAgICJGZWIgMTIsIDIwMDkiCisKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSBDb3Jwb3JhdGlvbiA8cmRzLWRldmVsQG9zcy5vcmFjbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSRFM6IFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMiCisJCSAgICIgdiIgRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKSIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX1JEUyk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2JpbmQuYyBiL25ldC9yZHMvYmluZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2NjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2JpbmQuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgInJkcy5oIgorCisvKgorICogWFhYIHRoaXMgcHJvYmFibHkgc3RpbGwgbmVlZHMgbW9yZSB3b3JrLi4gbm8gSU5BRERSX0FOWSwgYW5kIHJidHJlZXMgYXJlbid0CisgKiBwYXJ0aWN1bGFybHkgemlwcHkuCisgKgorICogVGhpcyBpcyBub3cgY2FsbGVkIGZvciBldmVyeSBpbmNvbWluZyBmcmFtZSBzbyB3ZSBhcmd1YWJseSBjYXJlIG11Y2ggbW9yZQorICogYWJvdXQgaXQgdGhhbiB3ZSB1c2VkIHRvLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19iaW5kX2xvY2spOworc3RhdGljIHN0cnVjdCByYl9yb290IHJkc19iaW5kX3RyZWUgPSBSQl9ST09UOworCitzdGF0aWMgc3RydWN0IHJkc19zb2NrICpyZHNfYmluZF90cmVlX3dhbGsoX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0LAorCQkJCQkgICBzdHJ1Y3QgcmRzX3NvY2sgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcmRzX2JpbmRfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdTY0IGNtcDsKKwl1NjQgbmVlZGxlID0gKCh1NjQpYmUzMl90b19jcHUoYWRkcikgPDwgMzIpIHwgYmUxNl90b19jcHUocG9ydCk7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCXJzID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcmRzX3NvY2ssIHJzX2JvdW5kX25vZGUpOworCisJCWNtcCA9ICgodTY0KWJlMzJfdG9fY3B1KHJzLT5yc19ib3VuZF9hZGRyKSA8PCAzMikgfAorCQkgICAgICBiZTE2X3RvX2NwdShycy0+cnNfYm91bmRfcG9ydCk7CisKKwkJaWYgKG5lZWRsZSA8IGNtcCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAobmVlZGxlID4gY21wKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHJzOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPnJzX2JvdW5kX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmaW5zZXJ0LT5yc19ib3VuZF9ub2RlLCAmcmRzX2JpbmRfdHJlZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogUmV0dXJuIHRoZSByZHNfc29jayBib3VuZCBhdCB0aGUgZ2l2ZW4gbG9jYWwgYWRkcmVzcy4KKyAqCisgKiBUaGUgcnggcGF0aCBjYW4gcmFjZSB3aXRoIHJkc19yZWxlYXNlLiAgV2Ugbm90aWNlIGlmIHJkc19yZWxlYXNlKCkgaGFzCisgKiBtYXJrZWQgdGhpcyBzb2NrZXQgYW5kIGRvbid0IHJldHVybiBhIHJzIHJlZiB0byB0aGUgcnggcGF0aC4KKyAqLworc3RydWN0IHJkc19zb2NrICpyZHNfZmluZF9ib3VuZChfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQpCit7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKwlycyA9IHJkc19iaW5kX3RyZWVfd2FsayhhZGRyLCBwb3J0LCBOVUxMKTsKKwlpZiAocnMgJiYgIXNvY2tfZmxhZyhyZHNfcnNfdG9fc2socnMpLCBTT0NLX0RFQUQpKQorCQlyZHNfc29ja19hZGRyZWYocnMpOworCWVsc2UKKwkJcnMgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCXJkc2RlYnVnKCJyZXR1cm5pbmcgcnMgJXAgZm9yICVwSTQ6JXVcbiIsIHJzLCAmYWRkciwKKwkJbnRvaHMocG9ydCkpOworCXJldHVybiByczsKK30KKworLyogcmV0dXJucyAtdmUgZXJybm8gb3IgK3ZlIHBvcnQgKi8KK3N0YXRpYyBpbnQgcmRzX2FkZF9ib3VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBfX2JlMzIgYWRkciwgX19iZTE2ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FQUREUklOVVNFOworCXUxNiByb3ZlciwgbGFzdDsKKworCWlmICgqcG9ydCAhPSAwKSB7CisJCXJvdmVyID0gYmUxNl90b19jcHUoKnBvcnQpOworCQlsYXN0ID0gcm92ZXI7CisJfSBlbHNlIHsKKwkJcm92ZXIgPSBtYXhfdCh1MTYsIG5ldF9yYW5kb20oKSwgMik7CisJCWxhc3QgPSByb3ZlciAtIDE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCWRvIHsKKwkJaWYgKHJvdmVyID09IDApCisJCQlyb3ZlcisrOworCQlpZiAocmRzX2JpbmRfdHJlZV93YWxrKGFkZHIsIGNwdV90b19iZTE2KHJvdmVyKSwgcnMpID09IE5VTEwpIHsKKwkJCSpwb3J0ID0gY3B1X3RvX2JlMTYocm92ZXIpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAocm92ZXIrKyAhPSBsYXN0KTsKKworCWlmIChyZXQgPT0gMCkgIHsKKwkJcnMtPnJzX2JvdW5kX2FkZHIgPSBhZGRyOworCQlycy0+cnNfYm91bmRfcG9ydCA9ICpwb3J0OworCQlyZHNfc29ja19hZGRyZWYocnMpOworCisJCXJkc2RlYnVnKCJycyAlcCBiaW5kaW5nIHRvICVwSTQ6JWRcbiIsCisJCSAgcnMsICZhZGRyLCAoaW50KW50b2hzKCpwb3J0KSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfcmVtb3ZlX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIpIHsKKwkJcmRzZGVidWcoInJzICVwIHVuYmluZGluZyBmcm9tICVwSTQ6JWRcbiIsCisJCSAgcnMsICZycy0+cnNfYm91bmRfYWRkciwKKwkJICBudG9ocyhycy0+cnNfYm91bmRfcG9ydCkpOworCisJCXJiX2VyYXNlKCZycy0+cnNfYm91bmRfbm9kZSwgJnJkc19iaW5kX3RyZWUpOworCQlyZHNfc29ja19wdXQocnMpOworCQlycy0+cnNfYm91bmRfYWRkciA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworfQorCitpbnQgcmRzX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwlpbnQgcmV0ID0gMDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgfHwKKwkgICAgc2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQgfHwKKwkgICAgcnMtPnJzX2JvdW5kX2FkZHIgfHwKKwkgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcmRzX2FkZF9ib3VuZChycywgc2luLT5zaW5fYWRkci5zX2FkZHIsICZzaW4tPnNpbl9wb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXRyYW5zID0gcmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoc2luLT5zaW5fYWRkci5zX2FkZHIpOworCWlmICh0cmFucyA9PSBOVUxMKSB7CisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCQlyZHNfcmVtb3ZlX2JvdW5kKHJzKTsKKwkJZ290byBvdXQ7CisJfQorCisJcnMtPnJzX3RyYW5zcG9ydCA9IHRyYW5zOworCXJldCA9IDA7CisKK291dDoKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2NvbmcuYyBiL25ldC9yZHMvY29uZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMGU0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2NvbmcuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSBzaWRlIG9mIHRoZSB1bmNvbnZlbnRpb25hbCBjb25nZXN0aW9uCisgKiBtYW5hZ2VtZW50IGluIFJEUy4KKyAqCisgKiBNZXNzYWdlcyB3YWl0aW5nIGluIHRoZSByZWNlaXZlIHF1ZXVlIG9uIHRoZSByZWNlaXZpbmcgc29ja2V0IGFyZSBhY2NvdW50ZWQKKyAqIGFnYWluc3QgdGhlIHNvY2tldHMgU09fUkNWQlVGIG9wdGlvbiB2YWx1ZS4gIE9ubHkgdGhlIHBheWxvYWQgYnl0ZXMgaW4gdGhlCisgKiBtZXNzYWdlIGFyZSBhY2NvdW50ZWQgZm9yLiAgSWYgdGhlIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgZXF1YWxzIG9yIGV4Y2VlZHMKKyAqIHJjdmJ1ZiB0aGVuIHRoZSBzb2NrZXQgaXMgY29uZ2VzdGVkLiAgQWxsIHNlbmRzIGF0dGVtcHRlZCB0byB0aGlzIHNvY2tldCdzCisgKiBhZGRyZXNzIHNob3VsZCByZXR1cm4gYmxvY2sgb3IgcmV0dXJuIC1FV09VTERCTE9DSy4KKyAqCisgKiBBcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlYXNvbmFibHkgdHVuZWQgc3VjaCB0aGF0IHRoaXMgc2l0dWF0aW9uCisgKiB2ZXJ5IHJhcmVseSBvY2N1cnMuICBBbiBhcHBsaWNhdGlvbiBlbmNvdW50ZXJpbmcgdGhpcyAiYmFjay1wcmVzc3VyZSIgaXMKKyAqIGNvbnNpZGVyZWQgYSBidWcuCisgKgorICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgZWFjaCBub2RlIG1haW50YWluIGJpdG1hcHMgd2hpY2ggaW5kaWNhdGUKKyAqIHdoaWNoIHBvcnRzIG9uIGJvdW5kIGFkZHJlc3NlcyBhcmUgY29uZ2VzdGVkLiAgQXMgdGhlIGJpdG1hcCBjaGFuZ2VzIGl0IGlzCisgKiBzZW50IHRocm91Z2ggYWxsIHRoZSBjb25uZWN0aW9ucyB3aGljaCB0ZXJtaW5hdGUgaW4gdGhlIGxvY2FsIGFkZHJlc3Mgb2YgdGhlCisgKiBiaXRtYXAgd2hpY2ggY2hhbmdlZC4KKyAqCisgKiBUaGUgYml0bWFwcyBhcmUgYWxsb2NhdGVkIGFzIGNvbm5lY3Rpb25zIGFyZSBicm91Z2h0IHVwLiAgVGhpcyBhdm9pZHMKKyAqIGFsbG9jYXRpb24gaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBwYXRoIHdoaWNoIHF1ZXVlcyBtZXNzYWdlcyBvbiBzb2NrZXRzLgorICogVGhlIGRlbnNlIGJpdG1hcHMgbGV0IHRyYW5zcG9ydHMgc2VuZCB0aGUgZW50aXJlIGJpdG1hcCBvbiBhbnkgYml0bWFwIGNoYW5nZQorICogcmVhc29uYWJseSBlZmZpY2llbnRseS4gIFRoaXMgaXMgbXVjaCBlYXNpZXIgdG8gaW1wbGVtZW50IHRoYW4gc29tZQorICogZmluZXItZ3JhaW5lZCBjb21tdW5pY2F0aW9uIG9mIHBlci1wb3J0IGNvbmdlc3Rpb24uICBUaGUgc2VuZGVyIGRvZXMgYSB2ZXJ5CisgKiBpbmV4cGVuc2l2ZSBiaXQgdGVzdCB0byB0ZXN0IGlmIHRoZSBwb3J0IGl0J3MgYWJvdXQgdG8gc2VuZCB0byBpcyBjb25nZXN0ZWQKKyAqIG9yIG5vdC4KKyAqLworCisvKgorICogSW50ZXJhY3Rpb24gd2l0aCBwb2xsIGlzIGEgdGFkIHRyaWNreS4gV2Ugd2FudCBhbGwgcHJvY2Vzc2VzIHN0dWNrIGluCisgKiBwb2xsIHRvIHdha2UgdXAgYW5kIGNoZWNrIHdoZXRoZXIgYSBjb25nZXN0ZWQgZGVzdGluYXRpb24gYmVjYW1lIHVuY29uZ2VzdGVkLgorICogVGhlIHJlYWxseSBzYWQgdGhpbmcgaXMgd2UgaGF2ZSBubyBpZGVhIHdoaWNoIGRlc3RpbmF0aW9ucyB0aGUgYXBwbGljYXRpb24KKyAqIHdhbnRzIHRvIHNlbmQgdG8gLSB3ZSBkb24ndCBldmVuIGtub3cgd2hpY2ggcmRzX2Nvbm5lY3Rpb25zIGFyZSBpbnZvbHZlZC4KKyAqIFNvIHVudGlsIHdlIGltcGxlbWVudCBhIG1vcmUgZmxleGlibGUgcmRzIHBvbGwgaW50ZXJmYWNlLCB3ZSBoYXZlIHRvIG1ha2UKKyAqIGRvIHdpdGggdGhpczoKKyAqIFdlIG1haW50YWluIGEgZ2xvYmFsIGNvdW50ZXIgdGhhdCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjb25nZXN0aW9uIG1hcAorICogdXBkYXRlIGlzIHJlY2VpdmVkLiBFYWNoIHJkcyBzb2NrZXQgdHJhY2tzIHRoaXMgdmFsdWUsIGFuZCBpZiByZHNfcG9sbAorICogZmluZHMgdGhhdCB0aGUgc2F2ZWQgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSBnbG9iYWwgZ2VuZXJhdGlvbgorICogbnVtYmVyLCBpdCB3YWtlcyB1cCB0aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIGF0b21pY190CQlyZHNfY29uZ19nZW5lcmF0aW9uID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qCisgKiBDb25nZXN0aW9uIG1vbml0b3JpbmcKKyAqLworc3RhdGljIExJU1RfSEVBRChyZHNfY29uZ19tb25pdG9yKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKHJkc19jb25nX21vbml0b3JfbG9jayk7CisKKy8qCisgKiBZZXMsIGEgZ2xvYmFsIGxvY2suICBJdCdzIHVzZWQgc28gaW5mcmVxdWVudGx5IHRoYXQgaXQncyB3b3J0aCBrZWVwaW5nIGl0CisgKiBnbG9iYWwgdG8gc2ltcGxpZnkgdGhlIGxvY2tpbmcuICBJdCdzIG9ubHkgdXNlZCBpbiB0aGUgZm9sbG93aW5nCisgKiBjaXJjdW1zdGFuY2VzOgorICoKKyAqICAtIG9uIGNvbm5lY3Rpb24gYnVpbGR1cCB0byBhc3NvY2lhdGUgYSBjb25uIHdpdGggaXRzIG1hcHMKKyAqICAtIG9uIG1hcCBjaGFuZ2VzIHRvIGluZm9ybSBjb25ucyBvZiBhIG5ldyBtYXAgdG8gc2VuZAorICoKKyAqICBJdCdzIHNhZGx5IG9yZGVyZWQgdW5kZXIgdGhlIHNvY2tldCBjYWxsYmFjayBsb2NrIGFuZCB0aGUgY29ubmVjdGlvbiBsb2NrLgorICogIFJlY2VpdmUgcGF0aHMgY2FuIG1hcmsgcG9ydHMgY29uZ2VzdGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgc28gdGhlCisgKiAgbG9jayBtYXNrcyBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25nX2xvY2spOworc3RhdGljIHN0cnVjdCByYl9yb290IHJkc19jb25nX3RyZWUgPSBSQl9ST09UOworCitzdGF0aWMgc3RydWN0IHJkc19jb25nX21hcCAqcmRzX2NvbmdfdHJlZV93YWxrKF9fYmUzMiBhZGRyLAorCQkJCQkgICAgICAgc3RydWN0IHJkc19jb25nX21hcCAqaW5zZXJ0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyZHNfY29uZ190cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQltYXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfY29uZ19tYXAsIG1fcmJfbm9kZSk7CisKKwkJaWYgKGFkZHIgPCBtYXAtPm1fYWRkcikKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoYWRkciA+IG1hcC0+bV9hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIG1hcDsKKwl9CisKKwlpZiAoaW5zZXJ0KSB7CisJCXJiX2xpbmtfbm9kZSgmaW5zZXJ0LT5tX3JiX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmaW5zZXJ0LT5tX3JiX25vZGUsICZyZHNfY29uZ190cmVlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGVyZSBpcyBvbmx5IGV2ZXIgb25lIGJpdG1hcCBmb3IgYW55IGFkZHJlc3MuICBDb25uZWN0aW9ucyB0cnkgYW5kIGFsbG9jYXRlCisgKiB0aGVzZSBiaXRtYXBzIGluIHRoZSBwcm9jZXNzIGdldHRpbmcgcG9pbnRlcnMgdG8gdGhlbS4gIFRoZSBiaXRtYXBzIGFyZSBvbmx5CisgKiBldmVyIGZyZWVkIGFzIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZCBhZnRlciBhbGwgY29ubmVjdGlvbnMgaGF2ZSBiZWVuIGZyZWVkLgorICovCitzdGF0aWMgc3RydWN0IHJkc19jb25nX21hcCAqcmRzX2NvbmdfZnJvbV9hZGRyKF9fYmUzMiBhZGRyKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgenA7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2NvbmdfbWFwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1hcC0+bV9hZGRyID0gYWRkcjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYXAtPm1fd2FpdHEpOworCUlOSVRfTElTVF9IRUFEKCZtYXAtPm1fY29ubl9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVM7IGkrKykgeworCQl6cCA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKHpwID09IDApCisJCQlnb3RvIG91dDsKKwkJbWFwLT5tX3BhZ2VfYWRkcnNbaV0gPSB6cDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCXJldCA9IHJkc19jb25nX3RyZWVfd2FsayhhZGRyLCBtYXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKworCWlmIChyZXQgPT0gTlVMTCkgeworCQlyZXQgPSBtYXA7CisJCW1hcCA9IE5VTEw7CisJfQorCitvdXQ6CisJaWYgKG1hcCkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTICYmIG1hcC0+bV9wYWdlX2FkZHJzW2ldOyBpKyspCisJCQlmcmVlX3BhZ2UobWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworCQlrZnJlZShtYXApOworCX0KKworCXJkc2RlYnVnKCJtYXAgJXAgZm9yIGFkZHIgJXhcbiIsIHJldCwgYmUzMl90b19jcHUoYWRkcikpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1dCB0aGUgY29ubiBvbiBpdHMgbG9jYWwgbWFwJ3MgbGlzdC4gIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm4gaXMKKyAqIHJlYWxseSBhZGRlZCB0byB0aGUgaGFzaC4gIEl0J3MgbmVzdGVkIHVuZGVyIHRoZSByZHNfY29ubl9sb2NrLCBzYWRseS4KKyAqLwordm9pZCByZHNfY29uZ19hZGRfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJjb25uICVwIG5vdyBvbiBtYXAgJXBcbiIsIGNvbm4sIGNvbm4tPmNfbGNvbmcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY29ubi0+Y19tYXBfaXRlbSwgJmNvbm4tPmNfbGNvbmctPm1fY29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygicmVtb3ZpbmcgY29ubiAlcCBmcm9tIG1hcCAlcFxuIiwgY29ubiwgY29ubi0+Y19sY29uZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZjb25uLT5jX21hcF9pdGVtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7Cit9CisKK2ludCByZHNfY29uZ19nZXRfbWFwcyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJY29ubi0+Y19sY29uZyA9IHJkc19jb25nX2Zyb21fYWRkcihjb25uLT5jX2xhZGRyKTsKKwljb25uLT5jX2Zjb25nID0gcmRzX2NvbmdfZnJvbV9hZGRyKGNvbm4tPmNfZmFkZHIpOworCisJaWYgKGNvbm4tPmNfbGNvbmcgPT0gTlVMTCB8fCBjb25uLT5jX2Zjb25nID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmbWFwLT5tX2Nvbm5fbGlzdCwgY19tYXBfaXRlbSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpIHsKKwkJCXJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9xdWV1ZWQpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCByZHNfY29uZ19tYXBfdXBkYXRlZChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVpbnQ2NF90IHBvcnRtYXNrKQoreworCXJkc2RlYnVnKCJ3YWtpbmcgbWFwICVwIGZvciAlcEk0XG4iLAorCSAgbWFwLCAmbWFwLT5tX2FkZHIpOworCXJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9yZWNlaXZlZCk7CisJYXRvbWljX2luYygmcmRzX2NvbmdfZ2VuZXJhdGlvbik7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm1hcC0+bV93YWl0cSkpCisJCXdha2VfdXAoJm1hcC0+bV93YWl0cSk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19wb2xsX3dhaXRxKSkKKwkJd2FrZV91cF9hbGwoJnJkc19wb2xsX3dhaXRxKTsKKworCWlmIChwb3J0bWFzayAmJiAhbGlzdF9lbXB0eSgmcmRzX2NvbmdfbW9uaXRvcikpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHJkc19zb2NrICpyczsKKworCQlyZWFkX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnMsICZyZHNfY29uZ19tb25pdG9yLCByc19jb25nX2xpc3QpIHsKKwkJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQkJcnMtPnJzX2Nvbmdfbm90aWZ5IHw9IChycy0+cnNfY29uZ19tYXNrICYgcG9ydG1hc2spOworCQkJcnMtPnJzX2NvbmdfbWFzayAmPSB+cG9ydG1hc2s7CisJCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQkJaWYgKHJzLT5yc19jb25nX25vdGlmeSkKKwkJCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCX0KKwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJfQorfQorCitpbnQgcmRzX2NvbmdfdXBkYXRlZF9zaW5jZSh1bnNpZ25lZCBsb25nICpyZWNlbnQpCit7CisJdW5zaWduZWQgbG9uZyBnZW4gPSBhdG9taWNfcmVhZCgmcmRzX2NvbmdfZ2VuZXJhdGlvbik7CisKKwlpZiAobGlrZWx5KCpyZWNlbnQgPT0gZ2VuKSkKKwkJcmV0dXJuIDA7CisJKnJlY2VudCA9IGdlbjsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFdlJ3JlIGNhbGxlZCB1bmRlciB0aGUgbG9ja2luZyB0aGF0IHByb3RlY3RzIHRoZSBzb2NrZXRzIHJlY2VpdmUgYnVmZmVyCisgKiBjb25zdW1wdGlvbi4gIFRoaXMgbWFrZXMgaXQgYSBsb3QgZWFzaWVyIGZvciB0aGUgY2FsbGVyIHRvIG9ubHkgY2FsbCB1cworICogd2hlbiBpdCBrbm93cyB0aGF0IGFuIGV4aXN0aW5nIHNldCBiaXQgbmVlZHMgdG8gYmUgY2xlYXJlZCwgYW5kIHZpY2UgdmVyc2EuCisgKiBXZSBjYW4ndCBibG9jayBhbmQgd2UgbmVlZCB0byBkZWFsIHdpdGggY29uY3VycmVudCBzb2NrZXRzIHdvcmtpbmcgYWdhaW5zdAorICogdGhlIHNhbWUgcGVyLWFkZHJlc3MgbWFwLgorICovCit2b2lkIHJkc19jb25nX3NldF9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwlyZHNkZWJ1Zygic2V0dGluZyBjb25nZXN0aW9uIGZvciAlcEk0OiV1IGluIG1hcCAlcFxuIiwKKwkgICZtYXAtPm1fYWRkciwgbnRvaHMocG9ydCksIG1hcCk7CisKKwlpID0gYmUxNl90b19jcHUocG9ydCkgLyBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCW9mZiA9IGJlMTZfdG9fY3B1KHBvcnQpICUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKworCWdlbmVyaWNfX19zZXRfbGVfYml0KG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfY2xlYXJfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJcmRzZGVidWcoImNsZWFyaW5nIGNvbmdlc3Rpb24gZm9yICVwSTQ6JXUgaW4gbWFwICVwXG4iLAorCSAgJm1hcC0+bV9hZGRyLCBudG9ocyhwb3J0KSwgbWFwKTsKKworCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCisJZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworfQorCitzdGF0aWMgaW50IHJkc19jb25nX3Rlc3RfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJaSA9IGJlMTZfdG9fY3B1KHBvcnQpIC8gUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKwlvZmYgPSBiZTE2X3RvX2NwdShwb3J0KSAlIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisKKwlyZXR1cm4gZ2VuZXJpY190ZXN0X2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworfQorCit2b2lkIHJkc19jb25nX2FkZF9zb2NrZXQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmcnMtPnJzX2NvbmdfbGlzdCkpCisJCWxpc3RfYWRkKCZycy0+cnNfY29uZ19saXN0LCAmcmRzX2NvbmdfbW9uaXRvcik7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJkc19jb25nX3JlbW92ZV9zb2NrZXQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmcnMtPnJzX2NvbmdfbGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCisJLyogdXBkYXRlIGNvbmdlc3Rpb24gbWFwIGZvciBub3ctY2xvc2VkIHBvcnQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCW1hcCA9IHJkc19jb25nX3RyZWVfd2Fsayhycy0+cnNfYm91bmRfYWRkciwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCisJaWYgKG1hcCAmJiByZHNfY29uZ190ZXN0X2JpdChtYXAsIHJzLT5yc19ib3VuZF9wb3J0KSkgeworCQlyZHNfY29uZ19jbGVhcl9iaXQobWFwLCBycy0+cnNfYm91bmRfcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9Cit9CisKK2ludCByZHNfY29uZ193YWl0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQsIGludCBub25ibG9jaywKKwkJICBzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCWlmICghcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBwb3J0KSkKKwkJcmV0dXJuIDA7CisJaWYgKG5vbmJsb2NrKSB7CisJCWlmIChycyAmJiBycy0+cnNfY29uZ19tb25pdG9yKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkvKiBJdCB3b3VsZCBoYXZlIGJlZW4gbmljZSB0byBoYXZlIGFuIGF0b21pYyBzZXRfYml0IG9uCisJCQkgKiBhIHVpbnQ2NF90LiAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJCQlycy0+cnNfY29uZ19tYXNrIHw9IFJEU19DT05HX01PTklUT1JfTUFTSyhudG9ocyhwb3J0KSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJCQkvKiBUZXN0IGFnYWluIC0gYSBjb25nZXN0aW9uIHVwZGF0ZSBtYXkgaGF2ZSBhcnJpdmVkIGluCisJCQkgKiB0aGUgbWVhbnRpbWUuICovCisJCQlpZiAoIXJkc19jb25nX3Rlc3RfYml0KG1hcCwgcG9ydCkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJcmRzX3N0YXRzX2luYyhzX2Nvbmdfc2VuZF9lcnJvcik7CisJCXJldHVybiAtRU5PQlVGUzsKKwl9CisKKwlyZHNfc3RhdHNfaW5jKHNfY29uZ19zZW5kX2Jsb2NrZWQpOworCXJkc2RlYnVnKCJ3YWl0aW5nIG9uIG1hcCAlcCBmb3IgcG9ydCAldVxuIiwgbWFwLCBiZTE2X3RvX2NwdShwb3J0KSk7CisKKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG1hcC0+bV93YWl0cSwKKwkJCQkJIXJkc19jb25nX3Rlc3RfYml0KG1hcCwgcG9ydCkpOworfQorCit2b2lkIHJkc19jb25nX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJdW5zaWduZWQgbG9uZyBpOworCisJd2hpbGUgKChub2RlID0gcmJfZmlyc3QoJnJkc19jb25nX3RyZWUpKSkgeworCQltYXAgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgcmRzX2NvbmdfbWFwLCBtX3JiX25vZGUpOworCQlyZHNkZWJ1ZygiZnJlZWluZyBtYXAgJXBcbiIsIG1hcCk7CisJCXJiX2VyYXNlKCZtYXAtPm1fcmJfbm9kZSwgJnJkc19jb25nX3RyZWUpOworCQlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTICYmIG1hcC0+bV9wYWdlX2FkZHJzW2ldOyBpKyspCisJCQlmcmVlX3BhZ2UobWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworCQlrZnJlZShtYXApOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgUkRTIG1lc3NhZ2UgY29udGFpbmluZyBhIGNvbmdlc3Rpb24gdXBkYXRlLgorICovCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19jb25nX3VwZGF0ZV9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwID0gY29ubi0+Y19sY29uZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJcm0gPSByZHNfbWVzc2FnZV9tYXBfcGFnZXMobWFwLT5tX3BhZ2VfYWRkcnMsIFJEU19DT05HX01BUF9CWVRFUyk7CisJaWYgKCFJU19FUlIocm0pKQorCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncyA9IFJEU19GTEFHX0NPTkdfQklUTUFQOworCisJcmV0dXJuIHJtOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzNmMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9oYXNodGFibGVzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCisjZGVmaW5lIFJEU19DT05ORUNUSU9OX0hBU0hfQklUUyAxMgorI2RlZmluZSBSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVMgKDEgPDwgUkRTX0NPTk5FQ1RJT05fSEFTSF9CSVRTKQorI2RlZmluZSBSRFNfQ09OTkVDVElPTl9IQVNIX01BU0sgKFJEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFUyAtIDEpCisKKy8qIGNvbnZlcnRpbmcgdGhpcyB0byBSQ1UgaXMgYSBjaG9yZSBmb3IgYW5vdGhlciBkYXkuLiAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfY29ubl9sb2NrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19jb25uX2NvdW50Oworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2Nvbm5fc2xhYjsKKworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpyZHNfY29ubl9idWNrZXQoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIpCit7CisJLyogUGFzcyBOVUxMLCBkb24ndCBuZWVkIHN0cnVjdCBuZXQgZm9yIGhhc2ggKi8KKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBpbmV0X2VoYXNoZm4oTlVMTCwKKwkJCQkJICBiZTMyX3RvX2NwdShsYWRkciksIDAsCisJCQkJCSAgYmUzMl90b19jcHUoZmFkZHIpLCAwKTsKKwlyZXR1cm4gJnJkc19jb25uX2hhc2hbaGFzaCAmIFJEU19DT05ORUNUSU9OX0hBU0hfTUFTS107Cit9CisKKyNkZWZpbmUgcmRzX2Nvbm5faW5mb19zZXQodmFyLCB0ZXN0LCBzdWZmaXgpIGRvIHsJCVwKKwlpZiAodGVzdCkJCQkJCQlcCisJCXZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7CVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19jb25uX2lzX3NlbmRpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFtdXRleF90cnlsb2NrKCZjb25uLT5jX3NlbmRfbG9jaykpCisJCXJldCA9IDE7CisJZWxzZQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgICAgX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJCSAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sICpyZXQgPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBwb3MsIGhlYWQsIGNfaGFzaF9ub2RlKSB7CisJCWlmIChjb25uLT5jX2ZhZGRyID09IGZhZGRyICYmIGNvbm4tPmNfbGFkZHIgPT0gbGFkZHIgJiYKKwkJCQljb25uLT5jX3RyYW5zID09IHRyYW5zKSB7CisJCQlyZXQgPSBjb25uOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmRzZGVidWcoInJldHVybmluZyBjb25uICVwIGZvciAlcEk0IC0+ICVwSTRcbiIsIHJldCwKKwkJICZsYWRkciwgJmZhZGRyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdHJhbnNwb3J0cyBhcyB0aGV5J3JlIGJyaW5naW5nIGRvd24gYSBjb25uZWN0aW9uLgorICogSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnQgY2FuIHN0YXJ0IHNlbmRpbmcKKyAqIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIGNvbm5lY3Rpb24gYWdhaW4gaW4gdGhlIGZ1dHVyZS4gIEl0IGlzIHVwIHRvCisgKiB0aGUgdHJhbnNwb3J0IHRvIGhhdmUgc2VyaWFsaXplZCB0aGlzIGNhbGwgd2l0aCBpdHMgc2VuZCBhbmQgcmVjdi4KKyAqLwordm9pZCByZHNfY29ubl9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmRzZGVidWcoImNvbm5lY3Rpb24gJXBJNCB0byAlcEk0IHJlc2V0XG4iLAorCSAgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKKworCXJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTsKKwlyZHNfc2VuZF9yZXNldChjb25uKTsKKwljb25uLT5jX2ZsYWdzID0gMDsKKworCS8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaAorCSAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbAorCSAqIG9mIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGF0IGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlCisJICogcmVsaWFiaWxpdHkgZ3VhcmFudGVlcyBvZiBSRFMuICovCit9CisKKy8qCisgKiBUaGVyZSBpcyBvbmx5IGV2ZXJ5IG9uZSAnY29ubicgZm9yIGEgZ2l2ZW4gcGFpciBvZiBhZGRyZXNzZXMgaW4gdGhlCisgKiBzeXN0ZW0gYXQgYSB0aW1lLiAgVGhleSBjb250YWluIG1lc3NhZ2VzIHRvIGJlIHJldHJhbnNtaXR0ZWQgYW5kIHNvCisgKiBzcGFuIHRoZSBsaWZldGltZSBvZiB0aGUgYWN0dWFsIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25zLgorICoKKyAqIEZvciBub3cgdGhleSBhcmUgbm90IGdhcmJhZ2UgY29sbGVjdGVkIG9uY2UgdGhleSdyZSBjcmVhdGVkLiAgVGhleQorICogYXJlIHRvcm4gZG93biBhcyB0aGUgbW9kdWxlIGlzIHJlbW92ZWQsIGlmIGV2ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCwKKwkJCQkgICAgICAgaW50IGlzX291dGdvaW5nKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgKnRtcCwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSByZHNfY29ubl9idWNrZXQobGFkZHIsIGZhZGRyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCWNvbm4gPSByZHNfY29ubl9sb29rdXAoaGVhZCwgbGFkZHIsIGZhZGRyLCB0cmFucyk7CisJaWYgKGNvbm4KKwkgJiYgY29ubi0+Y19sb29wYmFjaworCSAmJiBjb25uLT5jX3RyYW5zICE9ICZyZHNfbG9vcF90cmFuc3BvcnQKKwkgJiYgIWlzX291dGdvaW5nKSB7CisJCS8qIFRoaXMgaXMgYSBsb29wZWQgYmFjayBJQiBjb25uZWN0aW9uLCBhbmQgd2UncmUKKwkJICogY2FsbGVkIGJ5IHRoZSBjb2RlIGhhbmRsaW5nIHRoZSBpbmNvbWluZyBjb25uZWN0LgorCQkgKiBXZSBuZWVkIGEgc2Vjb25kIGNvbm5lY3Rpb24gb2JqZWN0IGludG8gd2hpY2ggd2UKKwkJICogY2FuIHN0aWNrIHRoZSBvdGhlciBRUC4gKi8KKwkJcGFyZW50ID0gY29ubjsKKwkJY29ubiA9IHBhcmVudC0+Y19wYXNzaXZlOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisJaWYgKGNvbm4pCisJCWdvdG8gb3V0OworCisJY29ubiA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2Nvbm5fc2xhYiwgZ2ZwKTsKKwlpZiAoY29ubiA9PSBOVUxMKSB7CisJCWNvbm4gPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoY29ubiwgMCwgc2l6ZW9mKCpjb25uKSk7CisKKwlJTklUX0hMSVNUX05PREUoJmNvbm4tPmNfaGFzaF9ub2RlKTsKKwljb25uLT5jX3ZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCWNvbm4tPmNfbGFkZHIgPSBsYWRkcjsKKwljb25uLT5jX2ZhZGRyID0gZmFkZHI7CisJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmNfbG9jayk7CisJY29ubi0+Y19uZXh0X3R4X3NlcSA9IDE7CisKKwltdXRleF9pbml0KCZjb25uLT5jX3NlbmRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmNvbm4tPmNfcmV0cmFucyk7CisKKwlyZXQgPSByZHNfY29uZ19nZXRfbWFwcyhjb25uKTsKKwlpZiAocmV0KSB7CisJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJY29ubiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIGEgY29ubmVjdGlvbiBiZWNvbWVzIGxvb3BiYWNrLiAgSWYgKmFueSogUkRTIHNvY2tldHMKKwkgKiBjYW4gYmluZCB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB0aGVuIHdlJ2QgcmF0aGVyIHRoZSBtZXNzYWdlcworCSAqIGZsb3cgdGhyb3VnaCBsb29wYmFjayByYXRoZXIgdGhhbiBlaXRoZXIgdHJhbnNwb3J0LgorCSAqLworCWlmIChyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChmYWRkcikpIHsKKwkJY29ubi0+Y19sb29wYmFjayA9IDE7CisJCWlmIChpc19vdXRnb2luZyAmJiB0cmFucy0+dF9wcmVmZXJfbG9vcGJhY2spIHsKKwkJCS8qICJvdXRnb2luZyIgY29ubmVjdGlvbiAtIGFuZCB0aGUgdHJhbnNwb3J0CisJCQkgKiBzYXlzIGl0IHdhbnRzIHRoZSBjb25uZWN0aW9uIGhhbmRsZWQgYnkgdGhlCisJCQkgKiBsb29wYmFjayB0cmFuc3BvcnQuIFRoaXMgaXMgd2hhdCBUQ1AgZG9lcy4KKwkJCSAqLworCQkJdHJhbnMgPSAmcmRzX2xvb3BfdHJhbnNwb3J0OworCQl9CisJfQorCisJY29ubi0+Y190cmFucyA9IHRyYW5zOworCisJcmV0ID0gdHJhbnMtPmNvbm5fYWxsb2MoY29ubiwgZ2ZwKTsKKwlpZiAocmV0KSB7CisJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJY29ubiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRE9XTik7CisJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IDA7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvbm4tPmNfc2VuZF93LCByZHNfc2VuZF93b3JrZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb25uLT5jX3JlY3ZfdywgcmRzX3JlY3Zfd29ya2VyKTsKKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+Y19jb25uX3csIHJkc19jb25uZWN0X3dvcmtlcik7CisJSU5JVF9XT1JLKCZjb25uLT5jX2Rvd25fdywgcmRzX3NodXRkb3duX3dvcmtlcik7CisJbXV0ZXhfaW5pdCgmY29ubi0+Y19jbV9sb2NrKTsKKwljb25uLT5jX2ZsYWdzID0gMDsKKworCXJkc2RlYnVnKCJhbGxvY2F0ZWQgY29ubiAlcCBmb3IgJXBJNCAtPiAlcEk0IG92ZXIgJXMgJXNcbiIsCisJICBjb25uLCAmbGFkZHIsICZmYWRkciwKKwkgIHRyYW5zLT50X25hbWUgPyB0cmFucy0+dF9uYW1lIDogIlt1bmtub3duXSIsCisJICBpc19vdXRnb2luZyA/ICIob3V0Z29pbmcpIiA6ICIiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisJaWYgKHBhcmVudCA9PSBOVUxMKSB7CisJCXRtcCA9IHJkc19jb25uX2xvb2t1cChoZWFkLCBsYWRkciwgZmFkZHIsIHRyYW5zKTsKKwkJaWYgKHRtcCA9PSBOVUxMKQorCQkJaGxpc3RfYWRkX2hlYWQoJmNvbm4tPmNfaGFzaF9ub2RlLCBoZWFkKTsKKwl9IGVsc2UgeworCQl0bXAgPSBwYXJlbnQtPmNfcGFzc2l2ZTsKKwkJaWYgKCF0bXApCisJCQlwYXJlbnQtPmNfcGFzc2l2ZSA9IGNvbm47CisJfQorCisJaWYgKHRtcCkgeworCQl0cmFucy0+Y29ubl9mcmVlKGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCWNvbm4gPSB0bXA7CisJfSBlbHNlIHsKKwkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7CisJCXJkc19jb25uX2NvdW50Kys7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCitvdXQ6CisJcmV0dXJuIGNvbm47Cit9CisKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gX19yZHNfY29ubl9jcmVhdGUobGFkZHIsIGZhZGRyLCB0cmFucywgZ2ZwLCAwKTsKK30KKworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBfX3Jkc19jb25uX2NyZWF0ZShsYWRkciwgZmFkZHIsIHRyYW5zLCBnZnAsIDEpOworfQorCit2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wOworCisJcmRzZGVidWcoImZyZWVpbmcgY29ubiAlcCBmb3IgJXBJNCAtPiAiCisJCSAiJXBJNFxuIiwgY29ubiwgJmNvbm4tPmNfbGFkZHIsCisJCSAmY29ubi0+Y19mYWRkcik7CisKKwlobGlzdF9kZWxfaW5pdCgmY29ubi0+Y19oYXNoX25vZGUpOworCisJLyogd2FpdCBmb3IgdGhlIHJkcyB0aHJlYWQgdG8gc2h1dCBpdCBkb3duICovCisJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRVJST1IpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvbm4tPmNfY29ubl93KTsKKwlxdWV1ZV93b3JrKHJkc193cSwgJmNvbm4tPmNfZG93bl93KTsKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKworCS8qIHRlYXIgZG93biBxdWV1ZWQgbWVzc2FnZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHJ0bXAsCisJCQkJICZjb25uLT5jX3NlbmRfcXVldWUsCisJCQkJIG1fY29ubl9pdGVtKSB7CisJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmcm0tPm1fc29ja19pdGVtKSk7CisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJfQorCWlmIChjb25uLT5jX3htaXRfcm0pCisJCXJkc19tZXNzYWdlX3B1dChjb25uLT5jX3htaXRfcm0pOworCisJY29ubi0+Y190cmFucy0+Y29ubl9mcmVlKGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCisJLyoKKwkgKiBUaGUgY29uZ2VzdGlvbiBtYXBzIGFyZW4ndCBmcmVlZCB1cCBoZXJlLiAgVGhleSdyZQorCSAqIGZyZWVkIGJ5IHJkc19jb25nX2V4aXQoKSBhZnRlciBhbGwgdGhlIGNvbm5lY3Rpb25zCisJICogaGF2ZSBiZWVuIGZyZWVkLgorCSAqLworCXJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pOworCisJQlVHX09OKCFsaXN0X2VtcHR5KCZjb25uLT5jX3JldHJhbnMpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisKKwlyZHNfY29ubl9jb3VudC0tOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9tZXNzYWdlX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJCSAgaW50IHdhbnRfc2VuZCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCXNpemVfdCBpOworCisJbGVuIC89IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMCwgaGVhZCA9IHJkc19jb25uX2hhc2g7IGkgPCBBUlJBWV9TSVpFKHJkc19jb25uX2hhc2gpOworCSAgICAgaSsrLCBoZWFkKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgcG9zLCBoZWFkLCBjX2hhc2hfbm9kZSkgeworCQkJaWYgKHdhbnRfc2VuZCkKKwkJCQlsaXN0ID0gJmNvbm4tPmNfc2VuZF9xdWV1ZTsKKwkJCWVsc2UKKwkJCQlsaXN0ID0gJmNvbm4tPmNfcmV0cmFuczsKKworCQkJc3Bpbl9sb2NrKCZjb25uLT5jX2xvY2spOworCisJCQkvKiBYWFggdG9vIGxhenkgdG8gbWFpbnRhaW4gY291bnRzLi4gKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocm0sIGxpc3QsIG1fY29ubl9pdGVtKSB7CisJCQkJdG90YWwrKzsKKwkJCQlpZiAodG90YWwgPD0gbGVuKQorCQkJCQlyZHNfaW5jX2luZm9fY29weSgmcm0tPm1faW5jLCBpdGVyLAorCQkJCQkJCSAgY29ubi0+Y19sYWRkciwKKwkJCQkJCQkgIGNvbm4tPmNfZmFkZHIsIDApOworCQkJfQorCisJCQlzcGluX3VubG9jaygmY29ubi0+Y19sb2NrKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworCWxlbnMtPm5yID0gdG90YWw7CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mb19zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mb19yZXRyYW5zKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJCSAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywgMCk7Cit9CisKK3ZvaWQgcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJICBpbnQgKCp2aXNpdG9yKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwgdm9pZCAqKSwKKwkJCSAgc2l6ZV90IGl0ZW1fbGVuKQoreworCXVpbnQ2NF90IGJ1ZmZlclsoaXRlbV9sZW4gKyA3KSAvIDhdOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzaXplX3QgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKKwlsZW5zLT5uciA9IDA7CisJbGVucy0+ZWFjaCA9IGl0ZW1fbGVuOworCisJZm9yIChpID0gMCwgaGVhZCA9IHJkc19jb25uX2hhc2g7IGkgPCBBUlJBWV9TSVpFKHJkc19jb25uX2hhc2gpOworCSAgICAgaSsrLCBoZWFkKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBwb3MsIHRtcCwgaGVhZCwgY19oYXNoX25vZGUpIHsKKworCQkJLyogWFhYIG5vIGNfbG9jayB1c2FnZS4uICovCisJCQlpZiAoIXZpc2l0b3IoY29ubiwgYnVmZmVyKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogV2UgY29weSBhcyBtdWNoIGFzIHdlIGNhbiBmaXQgaW4gdGhlIGJ1ZmZlciwKKwkJCSAqIGJ1dCB3ZSBjb3VudCBhbGwgaXRlbXMgc28gdGhhdCB0aGUgY2FsbGVyCisJCQkgKiBjYW4gcmVzaXplIHRoZSBidWZmZXIuICovCisJCQlpZiAobGVuID49IGl0ZW1fbGVuKSB7CisJCQkJcmRzX2luZm9fY29weShpdGVyLCBidWZmZXIsIGl0ZW1fbGVuKTsKKwkJCQlsZW4gLT0gaXRlbV9sZW47CisJCQl9CisJCQlsZW5zLT5ucisrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHJkc19jb25uX2luZm9fdmlzaXRvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX2Nvbm5lY3Rpb24gKmNpbmZvID0gYnVmZmVyOworCisJY2luZm8tPm5leHRfdHhfc2VxID0gY29ubi0+Y19uZXh0X3R4X3NlcTsKKwljaW5mby0+bmV4dF9yeF9zZXEgPSBjb25uLT5jX25leHRfcnhfc2VxOworCWNpbmZvLT5sYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJY2luZm8tPmZhZGRyID0gY29ubi0+Y19mYWRkcjsKKwlzdHJuY3B5KGNpbmZvLT50cmFuc3BvcnQsIGNvbm4tPmNfdHJhbnMtPnRfbmFtZSwKKwkJc2l6ZW9mKGNpbmZvLT50cmFuc3BvcnQpKTsKKwljaW5mby0+ZmxhZ3MgPSAwOworCisJcmRzX2Nvbm5faW5mb19zZXQoY2luZm8tPmZsYWdzLAorCQkJICByZHNfY29ubl9pc19zZW5kaW5nKGNvbm4pLCBTRU5ESU5HKTsKKwkvKiBYWFggRnV0dXJlOiByZXR1cm4gdGhlIHN0YXRlIHJhdGhlciB0aGFuIHRoZXNlIGZ1bmt5IGJpdHMgKi8KKwlyZHNfY29ubl9pbmZvX3NldChjaW5mby0+ZmxhZ3MsCisJCQkgIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HLAorCQkJICBDT05ORUNUSU5HKTsKKwlyZHNfY29ubl9pbmZvX3NldChjaW5mby0+ZmxhZ3MsCisJCQkgIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9VUCwKKwkJCSAgQ09OTkVDVEVEKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19mb3JfZWFjaF9jb25uX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLAorCQkJCXJkc19jb25uX2luZm9fdmlzaXRvciwKKwkJCQlzaXplb2Yoc3RydWN0IHJkc19pbmZvX2Nvbm5lY3Rpb24pKTsKK30KKworaW50IF9faW5pdCByZHNfY29ubl9pbml0KHZvaWQpCit7CisJcmRzX2Nvbm5fc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfY29ubmVjdGlvbiIsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCByZHNfY29ubmVjdGlvbiksCisJCQkJCSAgMCwgMCwgTlVMTCk7CisJaWYgKHJkc19jb25uX3NsYWIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPTk5FQ1RJT05TLCByZHNfY29ubl9pbmZvKTsKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NFTkRfTUVTU0FHRVMsCisJCQkgICAgICAgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3NlbmQpOworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVUUkFOU19NRVNTQUdFUywKKwkJCSAgICAgICByZHNfY29ubl9tZXNzYWdlX2luZm9fcmV0cmFucyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfY29ubl9leGl0KHZvaWQpCit7CisJcmRzX2xvb3BfZXhpdCgpOworCisJV0FSTl9PTighaGxpc3RfZW1wdHkocmRzX2Nvbm5faGFzaCkpOworCisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19jb25uX3NsYWIpOworCisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPTk5FQ1RJT05TLCByZHNfY29ubl9pbmZvKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU0VORF9NRVNTQUdFUywKKwkJCQkgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3NlbmQpOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTLAorCQkJCSByZHNfY29ubl9tZXNzYWdlX2luZm9fcmV0cmFucyk7Cit9CisKKy8qCisgKiBGb3JjZSBhIGRpc2Nvbm5lY3QKKyAqLwordm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CisJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7Cit9CisKKy8qCisgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgorICovCit2b2lkCitfX3Jkc19jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJkc19jb25uX2Ryb3AoY29ubik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhN2I3OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWIuYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKwordW5zaWduZWQgaW50IGZtcl9wb29sX3NpemUgPSBSRFNfRk1SX1BPT0xfU0laRTsKK3Vuc2lnbmVkIGludCBmbXJfbWVzc2FnZV9zaXplID0gUkRTX0ZNUl9TSVpFICsgMTsgLyogKzEgYWxsb3dzIGZvciB1bmFsaWduZWQgTVJzICovCisKK21vZHVsZV9wYXJhbShmbXJfcG9vbF9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXJfcG9vbF9zaXplLCAiIE1heCBudW1iZXIgb2YgZm1yIHBlciBIQ0EiKTsKK21vZHVsZV9wYXJhbShmbXJfbWVzc2FnZV9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXJfbWVzc2FnZV9zaXplLCAiIE1heCBzaXplIG9mIGEgUkRNQSB0cmFuc2ZlciIpOworCitzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOworCitERUZJTkVfU1BJTkxPQ0soaWJfbm9kZXZfY29ubnNfbG9jayk7CitMSVNUX0hFQUQoaWJfbm9kZXZfY29ubnMpOworCit2b2lkIHJkc19pYl9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2X2F0dHI7CisKKwkvKiBPbmx5IGhhbmRsZSBJQiAobm8gaVdBUlApIGRldmljZXMgKi8KKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX0lCX0NBKQorCQlyZXR1cm47CisKKwlkZXZfYXR0ciA9IGttYWxsb2Moc2l6ZW9mICpkZXZfYXR0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZfYXR0cikKKwkJcmV0dXJuOworCisJaWYgKGliX3F1ZXJ5X2RldmljZShkZXZpY2UsIGRldl9hdHRyKSkgeworCQlyZHNkZWJ1ZygiUXVlcnkgZGV2aWNlIGZhaWxlZCBmb3IgJXNcbiIsIGRldmljZS0+bmFtZSk7CisJCWdvdG8gZnJlZV9hdHRyOworCX0KKworCXJkc19pYmRldiA9IGttYWxsb2Moc2l6ZW9mICpyZHNfaWJkZXYsIEdGUF9LRVJORUwpOworCWlmICghcmRzX2liZGV2KQorCQlnb3RvIGZyZWVfYXR0cjsKKworCXNwaW5fbG9ja19pbml0KCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCXJkc19pYmRldi0+bWF4X3dycyA9IGRldl9hdHRyLT5tYXhfcXBfd3I7CisJcmRzX2liZGV2LT5tYXhfc2dlID0gbWluKGRldl9hdHRyLT5tYXhfc2dlLCBSRFNfSUJfTUFYX1NHRSk7CisKKwlyZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0ID0gbWF4KDksIGZmcyhkZXZfYXR0ci0+cGFnZV9zaXplX2NhcCkgLSAxKTsKKwlyZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUgID0gMSA8PCByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCXJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzayAgPSB+KCh1NjQpIHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSAtIDEpOworCXJkc19pYmRldi0+Zm1yX21heF9yZW1hcHMgPSBkZXZfYXR0ci0+bWF4X21hcF9wZXJfZm1yPzogMzI7CisJcmRzX2liZGV2LT5tYXhfZm1ycyA9IGRldl9hdHRyLT5tYXhfZm1yID8KKwkJCW1pbl90KHVuc2lnbmVkIGludCwgZGV2X2F0dHItPm1heF9mbXIsIGZtcl9wb29sX3NpemUpIDoKKwkJCWZtcl9wb29sX3NpemU7CisKKwlyZHNfaWJkZXYtPmRldiA9IGRldmljZTsKKwlyZHNfaWJkZXYtPnBkID0gaWJfYWxsb2NfcGQoZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJkc19pYmRldi0+cGQpKQorCQlnb3RvIGZyZWVfZGV2OworCisJcmRzX2liZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2liZGV2LT5wZCwKKwkJCQkgICAgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCWlmIChJU19FUlIocmRzX2liZGV2LT5tcikpCisJCWdvdG8gZXJyX3BkOworCisJcmRzX2liZGV2LT5tcl9wb29sID0gcmRzX2liX2NyZWF0ZV9tcl9wb29sKHJkc19pYmRldik7CisJaWYgKElTX0VSUihyZHNfaWJkZXYtPm1yX3Bvb2wpKSB7CisJCXJkc19pYmRldi0+bXJfcG9vbCA9IE5VTEw7CisJCWdvdG8gZXJyX21yOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmlwYWRkcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5jb25uX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnJkc19pYmRldi0+bGlzdCwgJnJkc19pYl9kZXZpY2VzKTsKKworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaWJfY2xpZW50LCByZHNfaWJkZXYpOworCisJZ290byBmcmVlX2F0dHI7CisKK2Vycl9tcjoKKwlpYl9kZXJlZ19tcihyZHNfaWJkZXYtPm1yKTsKK2Vycl9wZDoKKwlpYl9kZWFsbG9jX3BkKHJkc19pYmRldi0+cGQpOworZnJlZV9kZXY6CisJa2ZyZWUocmRzX2liZGV2KTsKK2ZyZWVfYXR0cjoKKwlrZnJlZShkZXZfYXR0cik7Cit9CisKK3ZvaWQgcmRzX2liX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyLCAqaV9uZXh0OworCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pYl9jbGllbnQpOworCWlmICghcmRzX2liZGV2KQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9pcGFkZHIsIGlfbmV4dCwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmlfaXBhZGRyLT5saXN0KTsKKwkJa2ZyZWUoaV9pcGFkZHIpOworCX0KKworCXJkc19pYl9yZW1vdmVfY29ubnMocmRzX2liZGV2KTsKKworCWlmIChyZHNfaWJkZXYtPm1yX3Bvb2wpCisJCXJkc19pYl9kZXN0cm95X21yX3Bvb2wocmRzX2liZGV2LT5tcl9wb29sKTsKKworCWliX2RlcmVnX21yKHJkc19pYmRldi0+bXIpOworCisJd2hpbGUgKGliX2RlYWxsb2NfcGQocmRzX2liZGV2LT5wZCkpIHsKKwkJcmRzZGVidWcoIkZhaWxlZCB0byBkZWFsbG9jIHBkICVwXG4iLCByZHNfaWJkZXYtPnBkKTsKKwkJbXNsZWVwKDEpOworCX0KKworCWxpc3RfZGVsKCZyZHNfaWJkZXYtPmxpc3QpOworCWtmcmVlKHJkc19pYmRldik7Cit9CisKK3N0cnVjdCBpYl9jbGllbnQgcmRzX2liX2NsaWVudCA9IHsKKwkubmFtZSAgID0gInJkc19pYiIsCisJLmFkZCAgICA9IHJkc19pYl9hZGRfb25lLAorCS5yZW1vdmUgPSByZHNfaWJfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIGludCByZHNfaWJfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8gPSBidWZmZXI7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYzsKKworCS8qIFdlIHdpbGwgb25seSBldmVyIGxvb2sgYXQgSUIgdHJhbnNwb3J0cyAqLworCWlmIChjb25uLT5jX3RyYW5zICE9ICZyZHNfaWJfdHJhbnNwb3J0KQorCQlyZXR1cm4gMDsKKworCWlpbmZvLT5zcmNfYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJaWluZm8tPmRzdF9hZGRyID0gY29ubi0+Y19mYWRkcjsKKworCW1lbXNldCgmaWluZm8tPnNyY19naWQsIDAsIHNpemVvZihpaW5mby0+c3JjX2dpZCkpOworCW1lbXNldCgmaWluZm8tPmRzdF9naWQsIDAsIHNpemVvZihpaW5mby0+ZHN0X2dpZCkpOworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCQlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwkJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCQlkZXZfYWRkciA9ICZpYy0+aV9jbV9pZC0+cm91dGUuYWRkci5kZXZfYWRkcjsKKworCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+c3JjX2dpZCk7CisJCWliX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5kc3RfZ2lkKTsKKworCQlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pYl9jbGllbnQpOworCQlpaW5mby0+bWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfc2VuZF9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCXJkc19pYl9nZXRfbXJfaW5mbyhyZHNfaWJkZXYsIGlpbmZvKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9pY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfaWJfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24pKTsKK30KKworCisvKgorICogRWFybHkgUkRTL0lCIHdhcyBidWlsdCB0byBvbmx5IGJpbmQgdG8gYW4gYWRkcmVzcyBpZiB0aGVyZSBpcyBhbiBJUG9JQgorICogZGV2aWNlIHdpdGggdGhhdCBhZGRyZXNzIHNldC4KKyAqCisgKiBJZiBpdCB3ZXJlIG1lLCBJJ2QgYWR2b2NhdGUgZm9yIHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiAgU2VuZGluZyBhbmQKKyAqIHJlY2VpdmluZyBzaG91bGQgYmUgZGV2aWNlLWFnbm9zdGljLiAgVHJhbnNwb3J0cyB3b3VsZCB0cnkgYW5kIG1haW50YWluCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHBlZXJzIHdobyBoYXZlIG1lc3NhZ2VzIHF1ZXVlZC4gIFVzZXJzcGFjZSB3b3VsZCBiZQorICogYWxsb3dlZCB0byBpbmZsdWVuY2Ugd2hpY2ggcGF0aHMgaGF2ZSBwcmlvcml0eS4gIFdlIGNvdWxkIGNhbGwgdXNlcnNwYWNlCisgKiBhc3NlcnRpbmcgdGhpcyBwb2xpY3kgInJvdXRpbmciLgorICovCitzdGF0aWMgaW50IHJkc19pYl9sYWRkcl9jaGVjayhfX2JlMzIgYWRkcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCisJLyogQ3JlYXRlIGEgQ01BIElEIGFuZCB0cnkgdG8gYmluZCBpdC4gVGhpcyBjYXRjaGVzIGJvdGgKKwkgKiBJQiBhbmQgaVdBUlAgY2FwYWJsZSBOSUNzLgorCSAqLworCWNtX2lkID0gcmRtYV9jcmVhdGVfaWQoTlVMTCwgTlVMTCwgUkRNQV9QU19UQ1ApOworCWlmICghY21faWQpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworCisJLyogcmRtYV9iaW5kX2FkZHIgd2lsbCBvbmx5IHN1Y2NlZWQgZm9yIElCICYgaVdBUlAgZGV2aWNlcyAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJLyogZHVlIHRvIHRoaXMsIHdlIHdpbGwgY2xhaW0gdG8gc3VwcG9ydCBpV0FSUCBkZXZpY2VzIHVubGVzcyB3ZQorCSAgIGNoZWNrIG5vZGVfdHlwZS4gKi8KKwlpZiAocmV0IHx8IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfSUJfQ0EpCisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCisJcmRzZGVidWcoImFkZHIgJXBJNCByZXQgJWQgbm9kZSB0eXBlICVkXG4iLAorCQkmYWRkciwgcmV0LAorCQljbV9pZC0+ZGV2aWNlID8gY21faWQtPmRldmljZS0+bm9kZV90eXBlIDogLTEpOworCisJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSUJfQ09OTkVDVElPTlMsIHJkc19pYl9pY19pbmZvKTsKKwlyZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKCk7CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOworCXJkc19pYl9zeXNjdGxfZXhpdCgpOworCXJkc19pYl9yZWN2X2V4aXQoKTsKKwlyZHNfdHJhbnNfdW5yZWdpc3RlcigmcmRzX2liX3RyYW5zcG9ydCk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7CisJLmxhZGRyX2NoZWNrCQk9IHJkc19pYl9sYWRkcl9jaGVjaywKKwkueG1pdF9jb21wbGV0ZQkJPSByZHNfaWJfeG1pdF9jb21wbGV0ZSwKKwkueG1pdAkJCT0gcmRzX2liX3htaXQsCisJLnhtaXRfY29uZ19tYXAJCT0gTlVMTCwKKwkueG1pdF9yZG1hCQk9IHJkc19pYl94bWl0X3JkbWEsCisJLnJlY3YJCQk9IHJkc19pYl9yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc19pYl9jb25uX2FsbG9jLAorCS5jb25uX2ZyZWUJCT0gcmRzX2liX2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19pYl9jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX2liX2Nvbm5fc2h1dGRvd24sCisJLmluY19jb3B5X3RvX3VzZXIJPSByZHNfaWJfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19pYl9pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc19pYl9pbmNfZnJlZSwKKwkuY21faW5pdGlhdGVfY29ubmVjdAk9IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0LAorCS5jbV9oYW5kbGVfY29ubmVjdAk9IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdCwKKwkuY21fY29ubmVjdF9jb21wbGV0ZQk9IHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlLAorCS5zdGF0c19pbmZvX2NvcHkJPSByZHNfaWJfc3RhdHNfaW5mb19jb3B5LAorCS5leGl0CQkJPSByZHNfaWJfZXhpdCwKKwkuZ2V0X21yCQkJPSByZHNfaWJfZ2V0X21yLAorCS5zeW5jX21yCQk9IHJkc19pYl9zeW5jX21yLAorCS5mcmVlX21yCQk9IHJkc19pYl9mcmVlX21yLAorCS5mbHVzaF9tcnMJCT0gcmRzX2liX2ZsdXNoX21ycywKKwkudF9vd25lcgkJPSBUSElTX01PRFVMRSwKKwkudF9uYW1lCQkJPSAiaW5maW5pYmFuZCIsCit9OworCitpbnQgX19pbml0IHJkc19pYl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJfZGV2aWNlcyk7CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcmRzX2liX3N5c2N0bF9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaWJyZWc7CisKKwlyZXQgPSByZHNfaWJfcmVjdl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3lzY3RsOworCisJcmV0ID0gcmRzX3RyYW5zX3JlZ2lzdGVyKCZyZHNfaWJfdHJhbnNwb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWN2OworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JQl9DT05ORUNUSU9OUywgcmRzX2liX2ljX2luZm8pOworCisJZ290byBvdXQ7CisKK291dF9yZWN2OgorCXJkc19pYl9yZWN2X2V4aXQoKTsKK291dF9zeXNjdGw6CisJcmRzX2liX3N5c2N0bF9leGl0KCk7CitvdXRfaWJyZWc6CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5oIGIvbmV0L3Jkcy9pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTU2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liLmgKQEAgLTAsMCArMSwzNjcgQEAKKyNpZm5kZWYgX1JEU19JQl9ICisjZGVmaW5lIF9SRFNfSUJfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKKyNkZWZpbmUgUkRTX0ZNUl9TSVpFCQkJMjU2CisjZGVmaW5lIFJEU19GTVJfUE9PTF9TSVpFCQk0MDk2CisKKyNkZWZpbmUgUkRTX0lCX01BWF9TR0UJCQk4CisjZGVmaW5lIFJEU19JQl9SRUNWX1NHRSAJCTIKKworI2RlZmluZSBSRFNfSUJfREVGQVVMVF9SRUNWX1dSCQkxMDI0CisjZGVmaW5lIFJEU19JQl9ERUZBVUxUX1NFTkRfV1IJCTI1NgorCisjZGVmaW5lIFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTCTB4MDAwMDAwMDMJLyogbWlub3IgdmVyc2lvbnMgc3VwcG9ydGVkICovCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOworCisvKgorICogSUIgcG9zdHMgUkRTX0ZSQUdfU0laRSBmcmFnbWVudHMgb2YgcGFnZXMgdG8gdGhlIHJlY2VpdmUgcXVldWVzIHRvCisgKiB0cnkgYW5kIG1pbmltaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRpZWQgdXAgYm90aCB0aGUgZGV2aWNlIGFuZAorICogc29ja2V0IHJlY2VpdmUgcXVldWVzLgorICovCisvKiBwYWdlIG9mZnNldCBvZiB0aGUgZmluYWwgZnVsbCBmcmFnIHRoYXQgZml0cyBpbiB0aGUgcGFnZSAqLworI2RlZmluZSBSRFNfUEFHRV9MQVNUX09GRiAoKChQQUdFX1NJWkUgIC8gUkRTX0ZSQUdfU0laRSkgLSAxKSAqIFJEU19GUkFHX1NJWkUpCitzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyB7CisJc3RydWN0IGxpc3RfaGVhZAlmX2l0ZW07CisJc3RydWN0IHBhZ2UJCSpmX3BhZ2U7CisJdW5zaWduZWQgbG9uZwkJZl9vZmZzZXQ7CisJZG1hX2FkZHJfdCAJCWZfbWFwcGVkOworfTsKKworc3RydWN0IHJkc19pYl9pbmNvbWluZyB7CisJc3RydWN0IGxpc3RfaGVhZAlpaV9mcmFnczsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCWlpX2luYzsKK307CisKK3N0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlIHsKKwkvKiBBZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLCBhbmQgZG9uJ3QgcGVybXV0ZSBleGlzdGluZyBmaWVsZHMuICovCisJX19iZTMyCQkJZHBfc2FkZHI7CisJX19iZTMyCQkJZHBfZGFkZHI7CisJdTgJCQlkcF9wcm90b2NvbF9tYWpvcjsKKwl1OAkJCWRwX3Byb3RvY29sX21pbm9yOworCV9fYmUxNgkJCWRwX3Byb3RvY29sX21pbm9yX21hc2s7IC8qIGJpdG1hc2sgKi8KKwlfX2JlMzIJCQlkcF9yZXNlcnZlZDE7CisJX19iZTY0CQkJZHBfYWNrX3NlcTsKKwlfX2JlMzIJCQlkcF9jcmVkaXQ7CQkvKiBub24temVybyBlbmFibGVzIGZsb3cgY3RsICovCit9OworCitzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayB7CisJc3RydWN0IHJkc19tZXNzYWdlCSpzX3JtOworCXN0cnVjdCByZHNfcmRtYV9vcAkqc19vcDsKKwlzdHJ1Y3QgaWJfc2VuZF93cglzX3dyOworCXN0cnVjdCBpYl9zZ2UJCXNfc2dlW1JEU19JQl9NQVhfU0dFXTsKKwl1bnNpZ25lZCBsb25nCQlzX3F1ZXVlZDsKK307CisKK3N0cnVjdCByZHNfaWJfcmVjdl93b3JrIHsKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nIAkqcl9pYmluYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwkqcl9mcmFnOworCXN0cnVjdCBpYl9yZWN2X3dyCXJfd3I7CisJc3RydWN0IGliX3NnZQkJcl9zZ2VbMl07Cit9OworCitzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyB7CisJdTMyCQl3X25yOworCXUzMgkJd19hbGxvY19wdHI7CisJdTMyCQl3X2FsbG9jX2N0cjsKKwl1MzIJCXdfZnJlZV9wdHI7CisJYXRvbWljX3QJd19mcmVlX2N0cjsKK307CisKK3N0cnVjdCByZHNfaWJfZGV2aWNlOworCitzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24geworCisJc3RydWN0IGxpc3RfaGVhZAlpYl9ub2RlOworCXN0cnVjdCByZHNfaWJfZGV2aWNlCSpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjb25uOworCisJLyogYWxwaGFiZXQgc291cCwgSUJUQSBzdHlsZSAqLworCXN0cnVjdCByZG1hX2NtX2lkCSppX2NtX2lkOworCXN0cnVjdCBpYl9wZAkJKmlfcGQ7CisJc3RydWN0IGliX21yCQkqaV9tcjsKKwlzdHJ1Y3QgaWJfY3EJCSppX3NlbmRfY3E7CisJc3RydWN0IGliX2NxCQkqaV9yZWN2X2NxOworCisJLyogdHggKi8KKwlzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZwlpX3NlbmRfcmluZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmlfcm07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfc2VuZF9oZHJzOworCXU2NAkJCWlfc2VuZF9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqaV9zZW5kczsKKworCS8qIHJ4ICovCisJc3RydWN0IG11dGV4CQlpX3JlY3ZfbXV0ZXg7CisJc3RydWN0IHJkc19pYl93b3JrX3JpbmcJaV9yZWN2X3Jpbmc7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZwkqaV9pYmluYzsKKwl1MzIJCQlpX3JlY3ZfZGF0YV9yZW07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfcmVjdl9oZHJzOworCXU2NAkJCWlfcmVjdl9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqaV9yZWN2czsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwlpX2ZyYWc7CisJdTY0CQkJaV9hY2tfcmVjdjsJLyogbGFzdCBBQ0sgcmVjZWl2ZWQgKi8KKworCS8qIHNlbmRpbmcgYWNrcyAqLworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CisJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOworCXU2NAkJCWlfYWNrX2RtYTsKKwl1bnNpZ25lZCBsb25nCQlpX2Fja19xdWV1ZWQ7CisKKwkvKiBGbG93IGNvbnRyb2wgcmVsYXRlZCBpbmZvcm1hdGlvbgorCSAqCisJICogT3VyIGFsZ29yaXRobSB1c2VzIGEgcGFpciB2YXJpYWJsZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY2VzcworCSAqIGF0b21pY2FsbHkgLSBvbmUgZm9yIHRoZSBzZW5kIGNyZWRpdHMsIGFuZCBvbmUgcG9zdGVkCisJICogcmVjdiBjcmVkaXRzIHdlIG5lZWQgdG8gdHJhbnNmZXIgdG8gcmVtb3RlLgorCSAqIFJhdGhlciB0aGFuIHByb3RlY3QgdGhlbSB1c2luZyBhIHNsb3cgc3BpbmxvY2ssIHdlIHB1dCBib3RoIGludG8KKwkgKiBhIHNpbmdsZSBhdG9taWNfdCBhbmQgdXBkYXRlIGl0IHVzaW5nIGNtcHhjaGcKKwkgKi8KKwlhdG9taWNfdAkJaV9jcmVkaXRzOworCisJLyogUHJvdG9jb2wgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGludAkJaV9mbG93Y3RsOjE7CS8qIGVuYWJsZS9kaXNhYmxlIGZsb3cgY3RsICovCisKKwkvKiBCYXRjaGVkIGNvbXBsZXRpb25zICovCisJdW5zaWduZWQgaW50CQlpX3Vuc2lnbmFsZWRfd3JzOworCWxvbmcJCQlpX3Vuc2lnbmFsZWRfYnl0ZXM7Cit9OworCisvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisjZGVmaW5lIElCX0dFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfR0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpID4+IDE2KQorI2RlZmluZSBJQl9TRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX1NFVF9QT1NUX0NSRURJVFModikJKCh2KSA8PCAxNikKKworc3RydWN0IHJkc19pYl9pcGFkZHIgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlfX2JlMzIJCQlpcGFkZHI7Cit9OworCitzdHJ1Y3QgcmRzX2liX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQJaXBhZGRyX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljb25uX2xpc3Q7CisJc3RydWN0IGliX2RldmljZQkqZGV2OworCXN0cnVjdCBpYl9wZAkJKnBkOworCXN0cnVjdCBpYl9tcgkJKm1yOworCXN0cnVjdCByZHNfaWJfbXJfcG9vbAkqbXJfcG9vbDsKKwlpbnQJCQlmbXJfcGFnZV9zaGlmdDsKKwlpbnQJCQlmbXJfcGFnZV9zaXplOworCXU2NAkJCWZtcl9wYWdlX21hc2s7CisJdW5zaWduZWQgaW50CQlmbXJfbWF4X3JlbWFwczsKKwl1bnNpZ25lZCBpbnQJCW1heF9mbXJzOworCWludAkJCW1heF9zZ2U7CisJdW5zaWduZWQgaW50CQltYXhfd3JzOworCXNwaW5sb2NrX3QJCXNwaW5sb2NrOwkvKiBwcm90ZWN0IHRoZSBhYm92ZSAqLworfTsKKworLyogYml0cyBmb3IgaV9hY2tfZmxhZ3MgKi8KKyNkZWZpbmUgSUJfQUNLX0lOX0ZMSUdIVAkwCisjZGVmaW5lIElCX0FDS19SRVFVRVNURUQJMQorCisvKiBNYWdpYyBXUl9JRCBmb3IgQUNLcyAqLworI2RlZmluZSBSRFNfSUJfQUNLX1dSX0lECSh+KHU2NCkgMCkKKworc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2liX2Nvbm5lY3RfcmFjZWQ7CisJdWludDY0X3QJc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlOworCXVpbnQ2NF90CXNfaWJfdHhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2liX3R4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaWJfdHhfcmluZ19mdWxsOworCXVpbnQ2NF90CXNfaWJfdHhfdGhyb3R0bGU7CisJdWludDY0X3QJc19pYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmU7CisJdWludDY0X3QJc19pYl90eF9zdGFsbGVkOworCXVpbnQ2NF90CXNfaWJfdHhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pYl9yeF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaWJfcnhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pYl9yeF9yaW5nX2VtcHR5OworCXVpbnQ2NF90CXNfaWJfcnhfcmVmaWxsX2Zyb21fY3E7CisJdWludDY0X3QJc19pYl9yeF9yZWZpbGxfZnJvbV90aHJlYWQ7CisJdWludDY0X3QJc19pYl9yeF9hbGxvY19saW1pdDsKKwl1aW50NjRfdAlzX2liX3J4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbnQ7CisJdWludDY0X3QJc19pYl9hY2tfc2VuZF9mYWlsdXJlOworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbmRfZGVsYXllZDsKKwl1aW50NjRfdAlzX2liX2Fja19zZW5kX3BpZ2d5YmFja2VkOworCXVpbnQ2NF90CXNfaWJfYWNrX3JlY2VpdmVkOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9hbGxvYzsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfZnJlZTsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfdXNlZDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfcG9vbF9mbHVzaDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfcG9vbF93YWl0OworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkOworfTsKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfaWJfd3E7CisKKy8qCisgKiBGYWtlIGliX2RtYV9zeW5jX3NnX2Zvcl97Y3B1LGRldmljZX0gYXMgbG9uZyBhcyBpYl92ZXJicy5oCisgKiBkb2Vzbid0IGRlZmluZSBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUJcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9jcHUKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKKworCisvKiBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydDsKK2V4dGVybiB2b2lkIHJkc19pYl9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gdm9pZCByZHNfaWJfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHN0cnVjdCBpYl9jbGllbnQgcmRzX2liX2NsaWVudDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBmbXJfcG9vbF9zaXplOworZXh0ZXJuIHVuc2lnbmVkIGludCBmbXJfbWVzc2FnZV9zaXplOworCitleHRlcm4gc3BpbmxvY2tfdCBpYl9ub2Rldl9jb25uc19sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaWJfbm9kZXZfY29ubnM7CisKKy8qIGliX2NtLmMgKi8KK2ludCByZHNfaWJfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCk7Cit2b2lkIHJkc19pYl9jb25uX2ZyZWUodm9pZCAqYXJnKTsKK2ludCByZHNfaWJfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKTsKK2ludCBfX2luaXQgcmRzX2liX2xpc3Rlbl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfbGlzdGVuX3N0b3Aodm9pZCk7Cit2b2lkIF9fcmRzX2liX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCSAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKK2ludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOwordm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworCisjZGVmaW5lIHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIGZtdC4uLikgXAorCV9fcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgS0VSTl9XQVJOSU5HICJSRFMvSUI6ICIgZm10KQorCisvKiBpYl9yZG1hLmMgKi8KK2ludCByZHNfaWJfdXBkYXRlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKTsKK2ludCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKK3ZvaWQgcmRzX2liX3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KTsKK3N0cnVjdCByZHNfaWJfbXJfcG9vbCAqcmRzX2liX2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaWJfZGV2aWNlICopOwordm9pZCByZHNfaWJfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwordm9pZCByZHNfaWJfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqKTsKK3ZvaWQgKnJkc19pYl9nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCk7Cit2b2lkIHJkc19pYl9zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXIpOwordm9pZCByZHNfaWJfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSk7Cit2b2lkIHJkc19pYl9mbHVzaF9tcnModm9pZCk7CisKKy8qIGliX3JlY3YuYyAqLworaW50IF9faW5pdCByZHNfaWJfcmVjdl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfcmVjdl9leGl0KHZvaWQpOworaW50IHJkc19pYl9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3Qga3B0cl9nZnAsCisJCSAgICAgICBnZnBfdCBwYWdlX2dmcCwgaW50IHByZWZpbGwpOwordm9pZCByZHNfaWJfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19pYl9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworaW50IHJkc19pYl9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaWJfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3U2NCByZHNfaWJfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKKworLyogaWJfcmluZy5jICovCit2b2lkIHJkc19pYl9yaW5nX2luaXQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit2b2lkIHJkc19pYl9yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3UzMiByZHNfaWJfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpOwordm9pZCByZHNfaWJfcmluZ19mcmVlKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK3ZvaWQgcmRzX2liX3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7CitpbnQgcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpOworaW50IHJkc19pYl9yaW5nX2xvdyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2liX3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaWJfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCk7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgcmRzX2liX3JpbmdfZW1wdHlfd2FpdDsKKworLyogaWJfc2VuZC5jICovCit2b2lkIHJkc19pYl94bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2liX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKK3ZvaWQgcmRzX2liX3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaWJfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7CitpbnQgcmRzX2liX3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApOwordm9pZCByZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBjcmVkaXRzKTsKK3ZvaWQgcmRzX2liX2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCk7CitpbnQgcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHUzMiB3YW50ZWQsCisJCQkgICAgIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCk7CisKKy8qIGliX3N0YXRzLmMgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3MsIHJkc19pYl9zdGF0cyk7CisjZGVmaW5lIHJkc19pYl9zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19pYl9zdGF0cywgbWVtYmVyKQordW5zaWduZWQgaW50IHJkc19pYl9zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXZhaWwpOworCisvKiBpYl9zeXNjdGwuYyAqLworaW50IF9faW5pdCByZHNfaWJfc3lzY3RsX2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9zeXNjdGxfZXhpdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb247CitleHRlcm4gdW5zaWduZWQgaW50IHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sOworZXh0ZXJuIGN0bF90YWJsZSByZHNfaWJfc3lzY3RsX3RhYmxlW107CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIGhlYWRlciBhbmQgZGF0YSBTR0VzIGluCisgKiBSRFMgcGFja2V0cyAobm90IFJETUEpCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaWJfaGVhZGVyX3NnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaWJfZGF0YV9zZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzFdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX3NldF82NGJpdCh1NjQgKnB0ciwgdTY0IHZhbCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJKnB0ciA9IHZhbDsKKyNlbHNlCisJc2V0XzY0Yml0KHB0ciwgdmFsKTsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTMyMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9jbS5jCkBAIC0wLDAgKzEsNzI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKKy8qCisgKiBTZXQgdGhlIHNlbGVjdGVkIHByb3RvY29sIHZlcnNpb24KKyAqLworc3RhdGljIHZvaWQgcmRzX2liX3NldF9wcm90b2NvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCB2ZXJzaW9uKQoreworCWNvbm4tPmNfdmVyc2lvbiA9IHZlcnNpb247Cit9CisKKy8qCisgKiBTZXQgdXAgZmxvdyBjb250cm9sCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfZmxvd19jb250cm9sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTMyIGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgJiYgY3JlZGl0cyAhPSAwKSB7CisJCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAqLworCQlpYy0+aV9mbG93Y3RsID0gMTsKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0cyk7CisJfSBlbHNlIHsKKwkJaWMtPmlfZmxvd2N0bCA9IDA7CisJfQorfQorCisvKgorICogVHVuZSBSTlIgYmVoYXZpb3IuIFdpdGhvdXQgZmxvdyBjb250cm9sLCB3ZSB1c2UgYSByYXRoZXIKKyAqIGxvdyB0aW1lb3V0LCBidXQgbm90IHRoZSBhYnNvbHV0ZSBtaW5pbXVtIC0gdGhpcyBzaG91bGQKKyAqIGJlIHR1bmFibGUuCisgKgorICogV2UgYWxyZWFkeSBzZXQgdGhlIFJOUiByZXRyeSBjb3VudCB0byA3ICh3aGljaCBpcyB0aGUKKyAqIHNtYWxsZXN0IGluZmluaXRlIG51bWJlciA6LSkgYWJvdmUuCisgKiBJZiBmbG93IGNvbnRyb2wgaXMgb2ZmLCB3ZSB3YW50IHRvIGNoYW5nZSB0aGlzIGJhY2sgdG8gMAorICogc28gdGhhdCB3ZSBsZWFybiBxdWlja2x5IHdoZW4gb3VyIGNyZWRpdCBhY2NvdW50aW5nIGlzCisgKiBidWdneS4KKyAqCisgKiBDYWxsZXIgcGFzc2VzIGluIGEgcXBfYXR0ciBwb2ludGVyIC0gZG9uJ3Qgd2FzdGUgc3RhY2sgc3BhY3YKKyAqIGJ5IGFsbG9jYXRpb24gdGhpcyB0d2ljZS4KKyAqLworc3RhdGljIHZvaWQKK3Jkc19pYl90dW5lX3JucihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0cikKK3sKKwlpbnQgcmV0OworCisJYXR0ci0+bWluX3Jucl90aW1lciA9IElCX1JOUl9USU1FUl8wMDBfMzI7CisJcmV0ID0gaWJfbW9kaWZ5X3FwKGljLT5pX2NtX2lkLT5xcCwgYXR0ciwgSUJfUVBfTUlOX1JOUl9USU1FUik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJpYl9tb2RpZnlfcXAoSUJfUVBfTUlOX1JOUl9USU1FUik6IGVycj0lZFxuIiwgLXJldCk7Cit9CisKKy8qCisgKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLgorICogV2UgZ2V0IGhlcmUgZm9yIGJvdGggb3V0Z29pbmcgYW5kIGluY29taW5nIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisJaW50IGVycjsKKworCWlmIChldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuKSB7CisJCWRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOworCisJCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwKKwkJCQlSRFNfUFJPVE9DT0woZHAtPmRwX3Byb3RvY29sX21ham9yLAorCQkJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpKTsKKwkJcmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoZHAtPmRwX2NyZWRpdCkpOworCX0KKworCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lCOiBjb25uZWN0ZWQgdG8gJXBJNCB2ZXJzaW9uICV1LiV1JXNcbiIsCisJCQkmY29ubi0+Y19sYWRkciwKKwkJCVJEU19QUk9UT0NPTF9NQUpPUihjb25uLT5jX3ZlcnNpb24pLAorCQkJUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlpYy0+aV9mbG93Y3RsID8gIiwgZmxvdyBjb250cm9sIiA6ICIiKTsKKworCS8qIFR1bmUgUk5SIGJlaGF2aW9yICovCisJcmRzX2liX3R1bmVfcm5yKGljLCAmcXBfYXR0cik7CisKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX1JUUzsKKwllcnIgPSBpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX05PVElDRSAiaWJfbW9kaWZ5X3FwKElCX1FQX1NUQVRFLCBSVFMpOiBlcnI9JWRcbiIsIGVycik7CisKKwkvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgJiBjb25uICovCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKwllcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihyZHNfaWJkZXYsIGNvbm4tPmNfbGFkZHIpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2liX3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7CisJZXJyID0gcmRzX2liX2FkZF9jb25uKHJkc19pYmRldiwgY29ubik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaWJfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcCAmJiBkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSwKKwkJCXN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCwKKwkJCXUzMiBwcm90b2NvbF92ZXJzaW9uKQoreworCW1lbXNldChjb25uX3BhcmFtLCAwLCBzaXplb2Yoc3RydWN0IHJkbWFfY29ubl9wYXJhbSkpOworCS8qIFhYWCB0dW5lIHRoZXNlPyAqLworCWNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAxOworCWNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aCA9IDE7CisJY29ubl9wYXJhbS0+cmV0cnlfY291bnQgPSA3OworCWNvbm5fcGFyYW0tPnJucl9yZXRyeV9jb3VudCA9IDc7CisKKwlpZiAoZHApIHsKKwkJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkJbWVtc2V0KGRwLCAwLCBzaXplb2YoKmRwKSk7CisJCWRwLT5kcF9zYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJCWRwLT5kcF9kYWRkciA9IGNvbm4tPmNfZmFkZHI7CisJCWRwLT5kcF9wcm90b2NvbF9tYWpvciA9IFJEU19QUk9UT0NPTF9NQUpPUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yID0gUkRTX1BST1RPQ09MX01JTk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzayA9IGNwdV90b19iZTE2KFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTKTsKKwkJZHAtPmRwX2Fja19zZXEgPSByZHNfaWJfcGlnZ3liX2FjayhpYyk7CisKKwkJLyogQWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCQlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQkJdW5zaWduZWQgaW50IGNyZWRpdHM7CisKKwkJCWNyZWRpdHMgPSBJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSk7CisJCQlkcC0+ZHBfY3JlZGl0ID0gY3B1X3RvX2JlMzIoY3JlZGl0cyk7CisJCQlhdG9taWNfc3ViKElCX1NFVF9QT1NUX0NSRURJVFMoY3JlZGl0cyksICZpYy0+aV9jcmVkaXRzKTsKKwkJfQorCisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YSA9IGRwOworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuID0gc2l6ZW9mKCpkcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQoreworCXJkc2RlYnVnKCJldmVudCAldSBkYXRhICVwXG4iLCBldmVudC0+ZXZlbnQsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBpYyAlcCBldmVudCAldVxuIiwgY29ubiwgaWMsIGV2ZW50LT5ldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50LT5ldmVudCkgeworCWNhc2UgSUJfRVZFTlRfQ09NTV9FU1Q6CisJCXJkbWFfbm90aWZ5KGljLT5pX2NtX2lkLCBJQl9FVkVOVF9DT01NX0VTVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9pYjogdW5oYW5kbGVkIFFQIGV2ZW50ICV1ICIKKwkJICAgICAgICJvbiBjb25uZWN0aW9uIHRvICVwSTRcbiIsIGV2ZW50LT5ldmVudCwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogVGhpcyBuZWVkcyB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gbm90IGxlYXZlIElTX0VSUiBwb2ludGVycyBhcm91bmQgZm9yCisgKiBjbGVhbnVwIHRvIHRyaXAgb3Zlci4KKyAqLworc3RhdGljIGludCByZHNfaWJfc2V0dXBfcXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisJc3RydWN0IGliX3FwX2luaXRfYXR0ciBhdHRyOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJaW50IHJldDsKKworCS8qIHJkc19pYl9hZGRfb25lIGNyZWF0ZXMgYSByZHNfaWJfZGV2aWNlIG9iamVjdCBwZXIgSUIgZGV2aWNlLAorCSAqIGFuZCBhbGxvY2F0ZXMgYSBwcm90ZWN0aW9uIGRvbWFpbiwgbWVtb3J5IHJhbmdlIGFuZCBGTVIgcG9vbAorCSAqIGZvciBlYWNoLiAgSWYgdGhhdCBmYWlscyBmb3IgYW55IHJlYXNvbiwgaXQgd2lsbCBub3QgcmVnaXN0ZXIKKwkgKiB0aGUgcmRzX2liZGV2IGF0IGFsbC4KKwkgKi8KKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2LCAmcmRzX2liX2NsaWVudCk7CisJaWYgKHJkc19pYmRldiA9PSBOVUxMKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JQjogTm8gY2xpZW50X2RhdGEgZm9yIGRldmljZSAlc1xuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmIChyZHNfaWJkZXYtPm1heF93cnMgPCBpYy0+aV9zZW5kX3Jpbmcud19uciArIDEpCisJCXJkc19pYl9yaW5nX3Jlc2l6ZSgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaWJkZXYtPm1heF93cnMgLSAxKTsKKwlpZiAocmRzX2liZGV2LT5tYXhfd3JzIDwgaWMtPmlfcmVjdl9yaW5nLndfbnIgKyAxKQorCQlyZHNfaWJfcmluZ19yZXNpemUoJmljLT5pX3JlY3ZfcmluZywgcmRzX2liZGV2LT5tYXhfd3JzIC0gMSk7CisKKwkvKiBQcm90ZWN0aW9uIGRvbWFpbiBhbmQgbWVtb3J5IHJhbmdlICovCisJaWMtPmlfcGQgPSByZHNfaWJkZXYtPnBkOworCWljLT5pX21yID0gcmRzX2liZGV2LT5tcjsKKworCWljLT5pX3NlbmRfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIsCisJCQkJICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIGljLT5pX3NlbmRfcmluZy53X25yICsgMSwgMCk7CisJaWYgKElTX0VSUihpYy0+aV9zZW5kX2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX3NlbmRfY3EpOworCQlpYy0+aV9zZW5kX2NxID0gTlVMTDsKKwkJcmRzZGVidWcoImliX2NyZWF0ZV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3JlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIsCisJCQkJICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIGljLT5pX3JlY3ZfcmluZy53X25yLCAwKTsKKwlpZiAoSVNfRVJSKGljLT5pX3JlY3ZfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfcmVjdl9jcSk7CisJCWljLT5pX3JlY3ZfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShpYy0+aV9zZW5kX2NxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGljLT5pX3JlY3ZfY3EsIElCX0NRX1NPTElDSVRFRCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSByZWN2IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFhYWCBuZWdvdGlhdGUgbWF4IHNlbmQvcmVjdiB3aXRoIHJlbW90ZT8gKi8KKwltZW1zZXQoJmF0dHIsIDAsIHNpemVvZihhdHRyKSk7CisJYXR0ci5ldmVudF9oYW5kbGVyID0gcmRzX2liX3FwX2V2ZW50X2hhbmRsZXI7CisJYXR0ci5xcF9jb250ZXh0ID0gY29ubjsKKwkvKiArIDEgdG8gYWxsb3cgZm9yIHRoZSBzaW5nbGUgYWNrIG1lc3NhZ2UgKi8KKwlhdHRyLmNhcC5tYXhfc2VuZF93ciA9IGljLT5pX3NlbmRfcmluZy53X25yICsgMTsKKwlhdHRyLmNhcC5tYXhfcmVjdl93ciA9IGljLT5pX3JlY3ZfcmluZy53X25yICsgMTsKKwlhdHRyLmNhcC5tYXhfc2VuZF9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJYXR0ci5jYXAubWF4X3JlY3Zfc2dlID0gUkRTX0lCX1JFQ1ZfU0dFOworCWF0dHIuc3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfUkVRX1dSOworCWF0dHIucXBfdHlwZSA9IElCX1FQVF9SQzsKKwlhdHRyLnNlbmRfY3EgPSBpYy0+aV9zZW5kX2NxOworCWF0dHIucmVjdl9jcSA9IGljLT5pX3JlY3ZfY3E7CisKKwkvKgorCSAqIFhYWCB0aGlzIGNhbiBmYWlsIGlmIG1heF8qX3dyIGlzIHRvbyBsYXJnZT8gIEFyZSB3ZSBzdXBwb3NlZAorCSAqIHRvIGJhY2sgb2ZmIHVudGlsIHdlIGdldCBhIHZhbHVlIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0PworCSAqLworCXJldCA9IHJkbWFfY3JlYXRlX3FwKGljLT5pX2NtX2lkLCBpYy0+aV9wZCwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX3FwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9zZW5kX2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfc2VuZF9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBzZW5kIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3JlY3ZfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9yZWN2X2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfcmVjdl9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCByZWN2IGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX2FjayA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJICAgICAgICZpYy0+aV9hY2tfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfYWNrID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBhY2sgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZHMgPSB2bWFsbG9jKGljLT5pX3NlbmRfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaWJfc2VuZF93b3JrKSk7CisJaWYgKGljLT5pX3NlbmRzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInNlbmQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJcmRzX2liX3NlbmRfaW5pdF9yaW5nKGljKTsKKworCWljLT5pX3JlY3ZzID0gdm1hbGxvYyhpYy0+aV9yZWN2X3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yaykpOworCWlmIChpYy0+aV9yZWN2cyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJyZWN2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2liX3JlY3ZfaW5pdF9yaW5nKGljKTsKKwlyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7CisKKwkvKiBQb3N0IHJlY2VpdmUgYnVmZmVycyAtIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgd2lsbCB1cGRhdGUKKwkgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi8KKwlyZHNfaWJfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAxKTsKKworCXJkc2RlYnVnKCJjb25uICVwIHBkICVwIG1yICVwIGNxICVwICVwXG4iLCBjb25uLCBpYy0+aV9wZCwgaWMtPmlfbXIsCisJCSBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwKQoreworCXUxNiBjb21tb247CisJdTMyIHZlcnNpb24gPSAwOworCisJLyogcmRtYV9jbSBwcml2YXRlIGRhdGEgaXMgb2RkIC0gd2hlbiB0aGVyZSBpcyBhbnkgcHJpdmF0ZSBkYXRhIGluIHRoZQorCSAqIHJlcXVlc3QsIHdlIHdpbGwgYmUgZ2l2ZW4gYSBwcmV0dHkgbGFyZ2UgYnVmZmVyIHdpdGhvdXQgdGVsbGluZyB1cyB0aGUKKwkgKiBvcmlnaW5hbCBzaXplLiBUaGUgb25seSB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBpcyBieSBsb29raW5nIGF0CisJICogdGhlIGNvbnRlbnRzLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KKwkgKiBJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBmaWVsZHMgYXJlbid0IHNldCwgdGhpcyBpcyBhIGNvbm5lY3Rpb24gYXR0ZW1wdAorCSAqIGZyb20gYW4gb2xkZXIgdmVyc2lvbi4gVGhpcyBjb3VsZCBjb3VsZCBiZSAzLjAgb3IgMi4wIC0gd2UgY2FuJ3QgdGVsbC4KKwkgKiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgY2hhbmdlZCB0aGlzIGZvciBPRkVEIDEuMyA6LSggKi8KKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDApCisJCXJldHVybiBSRFNfUFJPVE9DT0xfM18wOworCisJY29tbW9uID0gYmUxNl90b19jcHUoZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2spICYgUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFM7CisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAzICYmIGNvbW1vbikgeworCQl2ZXJzaW9uID0gUkRTX1BST1RPQ09MXzNfMDsKKwkJd2hpbGUgKChjb21tb24gPj49IDEpICE9IDApCisJCQl2ZXJzaW9uKys7CisJfSBlbHNlIGlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFM6IENvbm5lY3Rpb24gZnJvbSAlcEk0IHVzaW5nICIKKwkJCSJpbmNvbXBhdGlibGUgcHJvdG9jb2wgdmVyc2lvbiAldS4ldVxuIiwKKwkJCSZkcC0+ZHBfc2FkZHIsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpOworCX0KKwlyZXR1cm4gdmVyc2lvbjsKK30KKworaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwlfX2JlNjQgbGd1aWQgPSBjbV9pZC0+cm91dGUucGF0aF9yZWMtPnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZDsKKwlfX2JlNjQgZmd1aWQgPSBjbV9pZC0+cm91dGUucGF0aF9yZWMtPmRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZDsKKwljb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgZHBfcmVwOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IE5VTEw7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXUzMiB2ZXJzaW9uOworCWludCBlcnIsIGRlc3Ryb3kgPSAxOworCisJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqLworCXZlcnNpb24gPSByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShkcCk7CisJaWYgKCF2ZXJzaW9uKQorCQlnb3RvIG91dDsKKworCXJkc2RlYnVnKCJzYWRkciAlcEk0IGRhZGRyICVwSTQgUkRTdiV1LiV1IGxndWlkIDB4JWxseCBmZ3VpZCAiCisJCSAiMHglbGx4XG4iLCAmZHAtPmRwX3NhZGRyLCAmZHAtPmRwX2RhZGRyLAorCQkgUkRTX1BST1RPQ09MX01BSk9SKHZlcnNpb24pLCBSRFNfUFJPVE9DT0xfTUlOT1IodmVyc2lvbiksCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGxndWlkKSwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUoZmd1aWQpKTsKKworCWNvbm4gPSByZHNfY29ubl9jcmVhdGUoZHAtPmRwX2RhZGRyLCBkcC0+ZHBfc2FkZHIsICZyZHNfaWJfdHJhbnNwb3J0LAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChJU19FUlIoY29ubikpIHsKKwkJcmRzZGVidWcoInJkc19jb25uX2NyZWF0ZSBmYWlsZWQgKCVsZClcbiIsIFBUUl9FUlIoY29ubikpOworCQljb25uID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGUgY29ubmVjdGlvbiByZXF1ZXN0IG1heSBvY2N1ciB3aGlsZSB0aGUKKwkgKiBwcmV2aW91cyBjb25uZWN0aW9uIGV4aXN0LCBlLmcuIGluIGNhc2Ugb2YgZmFpbG92ZXIuCisJICogQnV0IGFzIGNvbm5lY3Rpb25zIG1heSBiZSBpbml0aWF0ZWQgc2ltdWx0YW5lb3VzbHkKKwkgKiBieSBib3RoIGhvc3RzLCB3ZSBoYXZlIGEgcmFuZG9tIGJhY2tvZmYgbWVjaGFuaXNtIC0KKwkgKiBzZWUgdGhlIGNvbW1lbnQgYWJvdmUgcmRzX3F1ZXVlX3JlY29ubmVjdCgpCisJICovCisJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fQ09OTkVDVElORykpIHsKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCQlyZHNkZWJ1ZygiaW5jb21pbmcgY29ubmVjdCB3aGlsZSBjb25uZWN0aW5nXG4iKTsKKwkJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfbGlzdGVuX2Nsb3NlZF9zdGFsZSk7CisJCX0gZWxzZQorCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fQ09OTkVDVElORykgeworCQkJLyogV2FpdCBhbmQgc2VlIC0gb3VyIGNvbm5lY3QgbWF5IHN0aWxsIGJlIHN1Y2NlZWRpbmcgKi8KKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9jb25uZWN0X3JhY2VkKTsKKwkJfQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgdmVyc2lvbik7CisJcmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoZHAtPmRwX2NyZWRpdCkpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCUJVR19PTihjbV9pZC0+Y29udGV4dCk7CisJQlVHX09OKGljLT5pX2NtX2lkKTsKKworCWljLT5pX2NtX2lkID0gY21faWQ7CisJY21faWQtPmNvbnRleHQgPSBjb25uOworCisJLyogV2UgZ290IGhhbGZ3YXkgdGhyb3VnaCBzZXR0aW5nIHVwIHRoZSBpYl9jb25uZWN0aW9uLCBpZiB3ZQorCSAqIGZhaWwgbm93LCB3ZSBoYXZlIHRvIHRha2UgdGhlIGxvbmcgcm91dGUgb3V0IG9mIHRoaXMgbWVzcy4gKi8KKwlkZXN0cm95ID0gMDsKKworCWVyciA9IHJkc19pYl9zZXR1cF9xcChjb25uKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZHNfaWJfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcF9yZXAsIHZlcnNpb24pOworCisJLyogcmRtYV9hY2NlcHQoKSBjYWxscyByZG1hX3JlamVjdCgpIGludGVybmFsbHkgaWYgaXQgZmFpbHMgKi8KKwllcnIgPSByZG1hX2FjY2VwdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZG1hX2FjY2VwdCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK291dDoKKwlyZG1hX3JlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJcmV0dXJuIGRlc3Ryb3k7Cit9CisKKworaW50IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgZHA7CisJaW50IHJldDsKKworCS8qIElmIHRoZSBwZWVyIGRvZXNuJ3QgZG8gcHJvdG9jb2wgbmVnb3RpYXRpb24sIHdlIG11c3QKKwkgKiBkZWZhdWx0IHRvIFJEU3YzLjAgKi8KKwlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTF8zXzApOworCWljLT5pX2Zsb3djdGwgPSByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDsJLyogYWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCisJcmV0ID0gcmRzX2liX3NldHVwX3FwKGNvbm4pOworCWlmIChyZXQpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwLCBSRFNfUFJPVE9DT0xfVkVSU0lPTik7CisKKwlyZXQgPSByZG1hX2Nvbm5lY3QoY21faWQsICZjb25uX3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRtYV9jb25uZWN0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCitvdXQ6CisJLyogQmV3YXJlIC0gcmV0dXJuaW5nIG5vbi16ZXJvIHRlbGxzIHRoZSByZG1hX2NtIHRvIGRlc3Ryb3kKKwkgKiB0aGUgY21faWQuIFdlIHNob3VsZCBjZXJ0YWlubHkgbm90IGRvIGl0IGFzIGxvbmcgYXMgd2Ugc3RpbGwKKwkgKiAib3duIiB0aGUgY21faWQuICovCisJaWYgKHJldCkgeworCQlpZiAoaWMtPmlfY21faWQgPT0gY21faWQpCisJCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2liX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZGVzdDsKKwlpbnQgcmV0OworCisJLyogWFhYIEkgd29uZGVyIHdoYXQgYWZmZWN0IHRoZSBwb3J0IHNwYWNlIGhhcyAqLworCS8qIGRlbGVnYXRlIGNtIGV2ZW50IGhhbmRsZXIgdG8gcmRtYV90cmFuc3BvcnQgKi8KKwlpYy0+aV9jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihpYy0+aV9jbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX2lkKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImNyZWF0ZWQgY20gaWQgJXAgZm9yIGNvbm4gJXBcbiIsIGljLT5pX2NtX2lkLCBjb25uKTsKKworCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzcmMuc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfbGFkZHI7CisJc3JjLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKDApOworCisJZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlkZXN0LnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2ZhZGRyOworCWRlc3Quc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1BPUlQpOworCisJcmV0ID0gcmRtYV9yZXNvbHZlX2FkZHIoaWMtPmlfY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwKKwkJCQlSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImFkZHIgcmVzb2x2ZSBmYWlsZWQgZm9yIGNtIGlkICVwOiAlZFxuIiwgaWMtPmlfY21faWQsCisJCQkgcmV0KTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIHNvIGNhcmVmdWwgYWJvdXQgb25seSBjbGVhbmluZyB1cCByZXNvdXJjZXMgdGhhdCB3ZXJlIGJ1aWx0IHVwCisgKiBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGR1cmluZyBzdGFydHVwLiAgSW4gZmFjdCBpdAorICogY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pYl9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCXJkc2RlYnVnKCJjbSAlcCBwZCAlcCBjcSAlcCAlcCBxcCAlcFxuIiwgaWMtPmlfY21faWQsCisJCSBpYy0+aV9wZCwgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSwKKwkJIGljLT5pX2NtX2lkID8gaWMtPmlfY21faWQtPnFwIDogTlVMTCk7CisKKwlpZiAoaWMtPmlfY21faWQpIHsKKwkJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKworCQlyZHNkZWJ1ZygiZGlzY29ubmVjdGluZyBjbSAlcFxuIiwgaWMtPmlfY21faWQpOworCQllcnIgPSByZG1hX2Rpc2Nvbm5lY3QoaWMtPmlfY21faWQpOworCQlpZiAoZXJyKSB7CisJCQkvKiBBY3R1YWxseSB0aGlzIG1heSBoYXBwZW4gcXVpdGUgZnJlcXVlbnRseSwgd2hlbgorCQkJICogYW4gb3V0Z29pbmcgY29ubmVjdCByYWNlZCB3aXRoIGFuIGluY29taW5nIGNvbm5lY3QuCisJCQkgKi8KKwkJCXJkc2RlYnVnKCJmYWlsZWQgdG8gZGlzY29ubmVjdCwgY206ICVwIGVyciAlZFxuIiwKKwkJCQlpYy0+aV9jbV9pZCwgZXJyKTsKKwkJfQorCisJCXdhaXRfZXZlbnQocmRzX2liX3JpbmdfZW1wdHlfd2FpdCwKKwkJCXJkc19pYl9yaW5nX2VtcHR5KCZpYy0+aV9zZW5kX3JpbmcpICYmCisJCQlyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSk7CisKKwkJaWYgKGljLT5pX3NlbmRfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfcmVjdl9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnMsCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9hY2spCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICAgaWMtPmlfYWNrLCBpYy0+aV9hY2tfZG1hKTsKKworCQlpZiAoaWMtPmlfc2VuZHMpCisJCQlyZHNfaWJfc2VuZF9jbGVhcl9yaW5nKGljKTsKKwkJaWYgKGljLT5pX3JlY3ZzKQorCQkJcmRzX2liX3JlY3ZfY2xlYXJfcmluZyhpYyk7CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYy0+aV9jbV9pZCk7CisJCWlmIChpYy0+aV9zZW5kX2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9zZW5kX2NxKTsKKwkJaWYgKGljLT5pX3JlY3ZfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3JlY3ZfY3EpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCisJCS8qCisJCSAqIE1vdmUgY29ubmVjdGlvbiBiYWNrIHRvIHRoZSBub2RldiBsaXN0LgorCQkgKi8KKwkJaWYgKGljLT5yZHNfaWJkZXYpIHsKKworCQkJc3Bpbl9sb2NrX2lycSgmaWMtPnJkc19pYmRldi0+c3BpbmxvY2spOworCQkJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7CisJCQlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpYy0+cmRzX2liZGV2LT5zcGlubG9jayk7CisKKwkJCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZpYl9ub2Rldl9jb25ucyk7CisJCQlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCQkJaWMtPnJkc19pYmRldiA9IE5VTEw7CisJCX0KKworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCWljLT5pX3BkID0gTlVMTDsKKwkJaWMtPmlfbXIgPSBOVUxMOworCQlpYy0+aV9zZW5kX2NxID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9jcSA9IE5VTEw7CisJCWljLT5pX3NlbmRfaGRycyA9IE5VTEw7CisJCWljLT5pX3JlY3ZfaGRycyA9IE5VTEw7CisJCWljLT5pX2FjayA9IE5VTEw7CisJfQorCUJVR19PTihpYy0+cmRzX2liZGV2KTsKKworCS8qIENsZWFyIHBlbmRpbmcgdHJhbnNtaXQgKi8KKwlpZiAoaWMtPmlfcm0pIHsKKwkJcmRzX21lc3NhZ2VfcHV0KGljLT5pX3JtKTsKKwkJaWMtPmlfcm0gPSBOVUxMOworCX0KKworCS8qIENsZWFyIHRoZSBBQ0sgc3RhdGUgKi8KKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2liX3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIDApOworCWljLT5pX2Fja19yZWN2ID0gMDsKKworCS8qIENsZWFyIGZsb3cgY29udHJvbCBzdGF0ZSAqLworCWljLT5pX2Zsb3djdGwgPSAwOworCWF0b21pY19zZXQoJmljLT5pX2NyZWRpdHMsIDApOworCisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWYgKGljLT5pX2liaW5jKSB7CisJCXJkc19pbmNfcHV0KCZpYy0+aV9pYmluYy0+aWlfaW5jKTsKKwkJaWMtPmlfaWJpbmMgPSBOVUxMOworCX0KKworCXZmcmVlKGljLT5pX3NlbmRzKTsKKwlpYy0+aV9zZW5kcyA9IE5VTEw7CisJdmZyZWUoaWMtPmlfcmVjdnMpOworCWljLT5pX3JlY3ZzID0gTlVMTDsKK30KKworaW50IHJkc19pYl9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFhYWCB0b28gbGF6eT8gKi8KKwlpYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChpYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZpYy0+aWJfbm9kZSk7CisJbXV0ZXhfaW5pdCgmaWMtPmlfcmVjdl9tdXRleCk7CisKKwkvKgorCSAqIHJkc19pYl9jb25uX3NodXRkb3duKCkgd2FpdHMgZm9yIHRoZXNlIHRvIGJlIGVtcHRpZWQgc28gdGhleQorCSAqIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGNhbiBiZSBjYWxsZWQuCisJICovCisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWMtPmNvbm4gPSBjb25uOworCWNvbm4tPmNfdHJhbnNwb3J0X2RhdGEgPSBpYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYl9ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZpYl9ub2Rldl9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWJfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjb25uIGljICVwXG4iLCBjb25uLCBjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaWJfY29ubl9mcmVlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gYXJnOworCXJkc2RlYnVnKCJpYyAlcFxuIiwgaWMpOworCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJa2ZyZWUoaWMpOworfQorCisKKy8qCisgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgorICovCit2b2lkCitfX3Jkc19pYl9jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXJkc19jb25uX2Ryb3AoY29ubik7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTYyODkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3JkbWEuYwpAQCAtMCwwICsxLDY0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaWIuaCIKKworCisvKgorICogVGhpcyBpcyBzdG9yZWQgYXMgbXItPnJfdHJhbnNfcHJpdmF0ZS4KKyAqLworc3RydWN0IHJkc19pYl9tciB7CisJc3RydWN0IHJkc19pYl9kZXZpY2UJKmRldmljZTsKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wJKnBvb2w7CisJc3RydWN0IGliX2ZtcgkJKmZtcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJdW5zaWduZWQgaW50CQlyZW1hcF9jb3VudDsKKworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CisJdW5zaWduZWQgaW50CQlzZ19sZW47CisJdTY0CQkJKmRtYTsKKwlpbnQJCQlzZ19kbWFfbGVuOworfTsKKworLyoKKyAqIE91ciBvd24gbGl0dGxlIEZNUiBwb29sCisgKi8KK3N0cnVjdCByZHNfaWJfbXJfcG9vbCB7CisJc3RydWN0IG11dGV4CQlmbHVzaF9sb2NrOwkJLyogc2VyaWFsaXplIGZtciBpbnZhbGlkYXRlICovCisJc3RydWN0IHdvcmtfc3RydWN0CWZsdXNoX3dvcmtlcjsJCS8qIGZsdXNoIHdvcmtlciAqLworCisJc3BpbmxvY2tfdAkJbGlzdF9sb2NrOwkJLyogcHJvdGVjdCB2YXJpYWJsZXMgYmVsb3cgKi8KKwlhdG9taWNfdAkJaXRlbV9jb3VudDsJCS8qIHRvdGFsICMgb2YgTVJzICovCisJYXRvbWljX3QJCWRpcnR5X2NvdW50OwkJLyogIyBkaXJ0eSBvZiBNUnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRyb3BfbGlzdDsJCS8qIE1ScyB0aGF0IGhhdmUgcmVhY2hlZCB0aGVpciBtYXhfbWFwcyBsaW1pdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9saXN0OwkJLyogdW51c2VkIE1ScyAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xlYW5fbGlzdDsJCS8qIHVudXNlZCAmIHVuYW1hcHBlZCBNUnMgKi8KKwlhdG9taWNfdAkJZnJlZV9waW5uZWQ7CQkvKiBtZW1vcnkgcGlubmVkIGJ5IGZyZWUgTVJzICovCisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zOworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtc19zb2Z0OworCXVuc2lnbmVkIGxvbmcJCW1heF9mcmVlX3Bpbm5lZDsKKwlzdHJ1Y3QgaWJfZm1yX2F0dHIJZm1yX2F0dHI7Cit9OworCitzdGF0aWMgaW50IHJkc19pYl9mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKTsKK3N0YXRpYyB2b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKTsKK3N0YXRpYyB2b2lkIHJkc19pYl9tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYl9nZXRfZGV2aWNlKF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pYmRldiwgJnJkc19pYl9kZXZpY2VzLCBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlfaXBhZGRyLCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCwgbGlzdCkgeworCQkJaWYgKGlfaXBhZGRyLT5pcGFkZHIgPT0gaXBhZGRyKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwkJCQlyZXR1cm4gcmRzX2liZGV2OworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX2FkZF9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHI7CisKKwlpX2lwYWRkciA9IGttYWxsb2Moc2l6ZW9mICppX2lwYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpX2lwYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpX2lwYWRkci0+aXBhZGRyID0gaXBhZGRyOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaV9pcGFkZHItPmxpc3QsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9yZW1vdmVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyLCAqbmV4dDsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpX2lwYWRkciwgbmV4dCwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlfaXBhZGRyLT5pcGFkZHIgPT0gaXBhZGRyKSB7CisJCQlsaXN0X2RlbCgmaV9pcGFkZHItPmxpc3QpOworCQkJa2ZyZWUoaV9pcGFkZHIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKK30KKworaW50IHJkc19pYl91cGRhdGVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldl9vbGQ7CisKKwlyZHNfaWJkZXZfb2xkID0gcmRzX2liX2dldF9kZXZpY2UoaXBhZGRyKTsKKwlpZiAocmRzX2liZGV2X29sZCkKKwkJcmRzX2liX3JlbW92ZV9pcGFkZHIocmRzX2liZGV2X29sZCwgaXBhZGRyKTsKKworCXJldHVybiByZHNfaWJfYWRkX2lwYWRkcihyZHNfaWJkZXYsIGlwYWRkcik7Cit9CisKK2ludCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogY29ubiB3YXMgcHJldmlvdXNseSBvbiB0aGUgbm9kZXZfY29ubnNfbGlzdCAqLworCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCUJVR19PTihsaXN0X2VtcHR5KCZpYl9ub2Rldl9jb25ucykpOworCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOworCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmcmRzX2liZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlpYy0+cmRzX2liZGV2ID0gcmRzX2liZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwlsaXN0X3NwbGljZSgmaWJfbm9kZXZfY29ubnMsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmliX25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaWJfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKwordm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3Rfc3BsaWNlKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpYl9ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCitzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnJkc19pYl9jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbDsKKworCXBvb2wgPSBremFsbG9jKHNpemVvZigqcG9vbCksIEdGUF9LRVJORUwpOworCWlmICghcG9vbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZnJlZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZHJvcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+Y2xlYW5fbGlzdCk7CisJbXV0ZXhfaW5pdCgmcG9vbC0+Zmx1c2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxpc3RfbG9jayk7CisJSU5JVF9XT1JLKCZwb29sLT5mbHVzaF93b3JrZXIsIHJkc19pYl9tcl9wb29sX2ZsdXNoX3dvcmtlcik7CisKKwlwb29sLT5mbXJfYXR0ci5tYXhfcGFnZXMgPSBmbXJfbWVzc2FnZV9zaXplOworCXBvb2wtPmZtcl9hdHRyLm1heF9tYXBzID0gcmRzX2liZGV2LT5mbXJfbWF4X3JlbWFwczsKKwlwb29sLT5mbXJfYXR0ci5wYWdlX3NoaWZ0ID0gcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlwb29sLT5tYXhfZnJlZV9waW5uZWQgPSByZHNfaWJkZXYtPm1heF9mbXJzICogZm1yX21lc3NhZ2Vfc2l6ZSAvIDQ7CisKKwkvKiBXZSBuZXZlciBhbGxvdyBtb3JlIHRoYW4gbWF4X2l0ZW1zIE1ScyB0byBiZSBhbGxvY2F0ZWQuCisJICogV2hlbiB3ZSBleGNlZWQgbW9yZSB0aGFuIG1heF9pdGVtc19zb2Z0LCB3ZSBzdGFydCBmcmVlaW5nCisJICogaXRlbXMgbW9yZSBhZ2dyZXNzaXZlbHkuCisJICogTWFrZSBzdXJlIHRoYXQgbWF4X2l0ZW1zID4gbWF4X2l0ZW1zX3NvZnQgPiBtYXhfaXRlbXMgLyAyCisJICovCisJcG9vbC0+bWF4X2l0ZW1zX3NvZnQgPSByZHNfaWJkZXYtPm1heF9mbXJzICogMyAvIDQ7CisJcG9vbC0+bWF4X2l0ZW1zID0gcmRzX2liZGV2LT5tYXhfZm1yczsKKworCXJldHVybiBwb29sOworfQorCit2b2lkIHJkc19pYl9nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbykKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisKKwlpaW5mby0+cmRtYV9tcl9tYXggPSBwb29sLT5tYXhfaXRlbXM7CisJaWluZm8tPnJkbWFfbXJfc2l6ZSA9IHBvb2wtPmZtcl9hdHRyLm1heF9wYWdlczsKK30KKwordm9pZCByZHNfaWJfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCkKK3sKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKwlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAxKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSk7CisJa2ZyZWUocG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJkc19pYl9tciAqcmRzX2liX3JldXNlX2ZtcihzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wpCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnBvb2wtPmNsZWFuX2xpc3QpKSB7CisJCWlibXIgPSBsaXN0X2VudHJ5KHBvb2wtPmNsZWFuX2xpc3QubmV4dCwgc3RydWN0IHJkc19pYl9tciwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmlibXItPmxpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBpYm1yOworfQorCitzdGF0aWMgc3RydWN0IHJkc19pYl9tciAqcmRzX2liX2FsbG9jX2ZtcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gTlVMTDsKKwlpbnQgZXJyID0gMCwgaXRlciA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlpYm1yID0gcmRzX2liX3JldXNlX2Ztcihwb29sKTsKKwkJaWYgKGlibXIpCisJCQlyZXR1cm4gaWJtcjsKKworCQkvKiBObyBjbGVhbiBNUnMgLSBub3cgd2UgaGF2ZSB0aGUgY2hvaWNlIG9mIGVpdGhlcgorCQkgKiBhbGxvY2F0aW5nIGEgZnJlc2ggTVIgdXAgdG8gdGhlIGxpbWl0IGltcG9zZWQgYnkgdGhlCisJCSAqIGRyaXZlciwgb3IgZmx1c2ggYW55IGRpcnR5IHVudXNlZCBNUnMuCisJCSAqIFdlIHRyeSB0byBhdm9pZCBzdGFsbGluZyBpbiB0aGUgc2VuZCBwYXRoIGlmIHBvc3NpYmxlLAorCQkgKiBzbyB3ZSBhbGxvY2F0ZSBhcyBsb25nIGFzIHdlJ3JlIGFsbG93ZWQgdG8uCisJCSAqCisJCSAqIFdlJ3JlIGZ1c3N5IHdpdGggZW5mb3JjaW5nIHRoZSBGTVIgbGltaXQsIHRob3VnaC4gSWYgdGhlIGRyaXZlcgorCQkgKiB0ZWxscyB1cyB3ZSBjYW4ndCB1c2UgbW9yZSB0aGFuIE4gZm1ycywgd2Ugc2hvdWxkbid0IHN0YXJ0CisJCSAqIGFyZ3Vpbmcgd2l0aCBpdCAqLworCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBvb2wtPml0ZW1fY291bnQpIDw9IHBvb2wtPm1heF9pdGVtcykKKwkJCWJyZWFrOworCisJCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCisJCWlmICgrK2l0ZXIgPiAyKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCQl9CisKKwkJLyogV2UgZG8gaGF2ZSBzb21lIGVtcHR5IE1Scy4gRmx1c2ggdGhlbSBvdXQuICovCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3Bvb2xfd2FpdCk7CisJCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KKworCWlibXIgPSBremFsbG9jKHNpemVvZigqaWJtciksIEdGUF9LRVJORUwpOworCWlmICghaWJtcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ub19jaWdhcjsKKwl9CisKKwlpYm1yLT5mbXIgPSBpYl9hbGxvY19mbXIocmRzX2liZGV2LT5wZCwKKwkJCShJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAorCQkJIElCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkgSUJfQUNDRVNTX1JFTU9URV9XUklURSksCisJCQkmcG9vbC0+Zm1yX2F0dHIpOworCWlmIChJU19FUlIoaWJtci0+Zm1yKSkgeworCQllcnIgPSBQVFJfRVJSKGlibXItPmZtcik7CisJCWlibXItPmZtciA9IE5VTEw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfYWxsb2NfZm1yIGZhaWxlZCAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfYWxsb2MpOworCXJldHVybiBpYm1yOworCitvdXRfbm9fY2lnYXI6CisJaWYgKGlibXIpIHsKKwkJaWYgKGlibXItPmZtcikKKwkJCWliX2RlYWxsb2NfZm1yKGlibXItPmZtcik7CisJCWtmcmVlKGlibXIpOworCX0KKwlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgaW50IHJkc19pYl9tYXBfZm1yKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaWJfbXIgKmlibXIsCisJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cykKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaWJkZXYtPmRldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQgPSBzZzsKKwl1NjQgaW9fYWRkciA9IDA7CisJdTY0ICpkbWFfcGFnZXM7CisJdTMyIGxlbjsKKwlpbnQgcGFnZV9jbnQsIHNnX2RtYV9sZW47CisJaW50IGksIGo7CisJaW50IHJldDsKKworCXNnX2RtYV9sZW4gPSBpYl9kbWFfbWFwX3NnKGRldiwgc2csIG5lbnRzLAorCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KCFzZ19kbWFfbGVuKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGRtYV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJbGVuID0gMDsKKwlwYWdlX2NudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzY2F0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2NhdFtpXSk7CisKKwkJaWYgKGRtYV9hZGRyICYgfnJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQkJaWYgKGkgPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCSsrcGFnZV9jbnQ7CisJCX0KKwkJaWYgKChkbWFfYWRkciArIGRtYV9sZW4pICYgfnJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQkJaWYgKGkgPCBzZ19kbWFfbGVuIC0gMSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQkrK3BhZ2VfY250OworCQl9CisKKwkJbGVuICs9IGRtYV9sZW47CisJfQorCisJcGFnZV9jbnQgKz0gbGVuID4+IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJaWYgKHBhZ2VfY250ID4gZm1yX21lc3NhZ2Vfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkbWFfcGFnZXMgPSBrbWFsbG9jKHNpemVvZih1NjQpICogcGFnZV9jbnQsIEdGUF9BVE9NSUMpOworCWlmICghZG1hX3BhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhZ2VfY250ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzY2F0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2NhdFtpXSk7CisKKwkJZm9yIChqID0gMDsgaiA8IGRtYV9sZW47IGogKz0gcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplKQorCQkJZG1hX3BhZ2VzW3BhZ2VfY250KytdID0KKwkJCQkoZG1hX2FkZHIgJiByZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spICsgajsKKwl9CisKKwlyZXQgPSBpYl9tYXBfcGh5c19mbXIoaWJtci0+Zm1yLAorCQkJCSAgIGRtYV9wYWdlcywgcGFnZV9jbnQsIGlvX2FkZHIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogU3VjY2VzcyAtIHdlIHN1Y2Nlc3NmdWxseSByZW1hcHBlZCB0aGUgTVIsIHNvIHdlIGNhbgorCSAqIHNhZmVseSB0ZWFyIGRvd24gdGhlIG9sZCBtYXBwaW5nLiAqLworCXJkc19pYl90ZWFyZG93bl9tcihpYm1yKTsKKworCWlibXItPnNnID0gc2NhdDsKKwlpYm1yLT5zZ19sZW4gPSBuZW50czsKKwlpYm1yLT5zZ19kbWFfbGVuID0gc2dfZG1hX2xlbjsKKwlpYm1yLT5yZW1hcF9jb3VudCsrOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfdXNlZCk7CisJcmV0ID0gMDsKKworb3V0OgorCWtmcmVlKGRtYV9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9jcHUocmRzX2liZGV2LT5kZXYsIGlibXItPnNnLAorCQkJaWJtci0+c2dfZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocmRzX2liZGV2LT5kZXYsIGlibXItPnNnLAorCQkJaWJtci0+c2dfZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKworCWlmIChpYm1yLT5zZ19kbWFfbGVuKSB7CisJCWliX2RtYV91bm1hcF9zZyhyZHNfaWJkZXYtPmRldiwKKwkJCQlpYm1yLT5zZywgaWJtci0+c2dfbGVuLAorCQkJCURNQV9CSURJUkVDVElPTkFMKTsKKwkJaWJtci0+c2dfZG1hX2xlbiA9IDA7CisJfQorCisJLyogUmVsZWFzZSB0aGUgcy9nIGxpc3QgKi8KKwlpZiAoaWJtci0+c2dfbGVuKSB7CisJCXVuc2lnbmVkIGludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBpYm1yLT5zZ19sZW47ICsraSkgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZpYm1yLT5zZ1tpXSk7CisKKwkJCS8qIEZJWE1FIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCBhIHIvdyBNUgorCQkJICogZnJvbSBhIHIvbyBNUiAqLworCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsKKwkJfQorCQlrZnJlZShpYm1yLT5zZyk7CisKKwkJaWJtci0+c2cgPSBOVUxMOworCQlpYm1yLT5zZ19sZW4gPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpCit7CisJdW5zaWduZWQgaW50IHBpbm5lZCA9IGlibXItPnNnX2xlbjsKKworCV9fcmRzX2liX3RlYXJkb3duX21yKGlibXIpOworCWlmIChwaW5uZWQpIHsKKwkJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKwkJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCisJCWF0b21pY19zdWIocGlubmVkLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmRzX2liX2ZsdXNoX2dvYWwoc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJdW5zaWduZWQgaW50IGl0ZW1fY291bnQ7CisKKwlpdGVtX2NvdW50ID0gYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpOworCWlmIChmcmVlX2FsbCkKKwkJcmV0dXJuIGl0ZW1fY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZsdXNoIG91ciBwb29sIG9mIE1Scy4KKyAqIEF0IGEgbWluaW11bSwgYWxsIGN1cnJlbnRseSB1bnVzZWQgTVJzIGFyZSB1bm1hcHBlZC4KKyAqIElmIHRoZSBudW1iZXIgb2YgTVJzIGFsbG9jYXRlZCBleGNlZWRzIHRoZSBsaW1pdCwgd2UgYWxzbyB0cnkKKyAqIHRvIGZyZWUgYXMgbWFueSBNUnMgYXMgbmVlZGVkIHRvIGdldCBiYWNrIHRvIHRoaXMgbGltaXQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2liX2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciwgKm5leHQ7CisJTElTVF9IRUFEKHVubWFwX2xpc3QpOworCUxJU1RfSEVBRChmbXJfbGlzdCk7CisJdW5zaWduZWQgbG9uZyB1bnBpbm5lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmZyZWVkID0gMCwgbmNsZWFuZWQgPSAwLCBmcmVlX2dvYWw7CisJaW50IHJldCA9IDA7CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9wb29sX2ZsdXNoKTsKKworCW11dGV4X2xvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCS8qIEdldCB0aGUgbGlzdCBvZiBhbGwgTVJzIHRvIGJlIGRyb3BwZWQuIE9yZGVyaW5nIG1hdHRlcnMgLQorCSAqIHdlIHdhbnQgdG8gcHV0IGRyb3BfbGlzdCBhaGVhZCBvZiBmcmVlX2xpc3QuICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZnJlZV9saXN0LCAmdW5tYXBfbGlzdCk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZHJvcF9saXN0LCAmdW5tYXBfbGlzdCk7CisJaWYgKGZyZWVfYWxsKQorCQlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5jbGVhbl9saXN0LCAmdW5tYXBfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlmcmVlX2dvYWwgPSByZHNfaWJfZmx1c2hfZ29hbChwb29sLCBmcmVlX2FsbCk7CisKKwlpZiAobGlzdF9lbXB0eSgmdW5tYXBfbGlzdCkpCisJCWdvdG8gb3V0OworCisJLyogU3RyaW5nIGFsbCBpYl9tcidzIG9udG8gb25lIGxpc3QgYW5kIGhhbmQgdGhlbSB0byBpYl91bm1hcF9mbXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlibXIsICZ1bm1hcF9saXN0LCBsaXN0KQorCQlsaXN0X2FkZCgmaWJtci0+Zm1yLT5saXN0LCAmZm1yX2xpc3QpOworCXJldCA9IGliX3VubWFwX2ZtcigmZm1yX2xpc3QpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfdW5tYXBfZm1yIGZhaWxlZCAoZXJyPSVkKVxuIiwgcmV0KTsKKworCS8qIE5vdyB3ZSBjYW4gZGVzdHJveSB0aGUgRE1BIG1hcHBpbmcgYW5kIHVucGluIGFueSBwYWdlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYm1yLCBuZXh0LCAmdW5tYXBfbGlzdCwgbGlzdCkgeworCQl1bnBpbm5lZCArPSBpYm1yLT5zZ19sZW47CisJCV9fcmRzX2liX3RlYXJkb3duX21yKGlibXIpOworCQlpZiAobmZyZWVkIDwgZnJlZV9nb2FsIHx8IGlibXItPnJlbWFwX2NvdW50ID49IHBvb2wtPmZtcl9hdHRyLm1heF9tYXBzKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9mcmVlKTsKKwkJCWxpc3RfZGVsKCZpYm1yLT5saXN0KTsKKwkJCWliX2RlYWxsb2NfZm1yKGlibXItPmZtcik7CisJCQlrZnJlZShpYm1yKTsKKwkJCW5mcmVlZCsrOworCQl9CisJCW5jbGVhbmVkKys7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlKCZ1bm1hcF9saXN0LCAmcG9vbC0+Y2xlYW5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlhdG9taWNfc3ViKHVucGlubmVkLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCWF0b21pY19zdWIobmNsZWFuZWQsICZwb29sLT5kaXJ0eV9jb3VudCk7CisJYXRvbWljX3N1YihuZnJlZWQsICZwb29sLT5pdGVtX2NvdW50KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19pYl9tcl9wb29sLCBmbHVzaF93b3JrZXIpOworCisJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7Cit9CisKK3ZvaWQgcmRzX2liX2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJSRFMvSUI6IGZyZWVfbXIgbmVudHMgJXVcbiIsIGlibXItPnNnX2xlbik7CisKKwkvKiBSZXR1cm4gaXQgdG8gdGhlIHBvb2wncyBmcmVlIGxpc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKGlibXItPnJlbWFwX2NvdW50ID49IHBvb2wtPmZtcl9hdHRyLm1heF9tYXBzKQorCQlsaXN0X2FkZCgmaWJtci0+bGlzdCwgJnBvb2wtPmRyb3BfbGlzdCk7CisJZWxzZQorCQlsaXN0X2FkZCgmaWJtci0+bGlzdCwgJnBvb2wtPmZyZWVfbGlzdCk7CisKKwlhdG9taWNfYWRkKGlibXItPnNnX2xlbiwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwlhdG9taWNfaW5jKCZwb29sLT5kaXJ0eV9jb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwkvKiBJZiB3ZSd2ZSBwaW5uZWQgdG9vIG1hbnkgcGFnZXMsIHJlcXVlc3QgYSBmbHVzaCAqLworCWlmIChhdG9taWNfcmVhZCgmcG9vbC0+ZnJlZV9waW5uZWQpID49IHBvb2wtPm1heF9mcmVlX3Bpbm5lZAorCSB8fCBhdG9taWNfcmVhZCgmcG9vbC0+ZGlydHlfY291bnQpID49IHBvb2wtPm1heF9pdGVtcyAvIDEwKQorCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisKKwlpZiAoaW52YWxpZGF0ZSkgeworCQlpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSkpIHsKKwkJCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCQl9IGVsc2UgeworCQkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIHVzZXIgY3JlYXRlZCBhIE1SIG1hcmtlZAorCQkJICogYXMgdXNlX29uY2UgYW5kIGludmFsaWRhdGUgYXQgdGhlIHNhbWUgdGltZS4gKi8KKwkJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKwkJfQorCX0KK30KKwordm9pZCByZHNfaWJfZmx1c2hfbXJzKHZvaWQpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRzX2liZGV2LCAmcmRzX2liX2RldmljZXMsIGxpc3QpIHsKKwkJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCisJCWlmIChwb29sKQorCQkJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorfQorCit2b2lkICpyZHNfaWJfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gTlVMTDsKKwlpbnQgcmV0OworCisJcmRzX2liZGV2ID0gcmRzX2liX2dldF9kZXZpY2UocnMtPnJzX2JvdW5kX2FkZHIpOworCWlmICghcmRzX2liZGV2KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmRzX2liZGV2LT5tcl9wb29sKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlibXIgPSByZHNfaWJfYWxsb2NfZm1yKHJkc19pYmRldik7CisJaWYgKElTX0VSUihpYm1yKSkKKwkJcmV0dXJuIGlibXI7CisKKwlyZXQgPSByZHNfaWJfbWFwX2ZtcihyZHNfaWJkZXYsIGlibXIsIHNnLCBuZW50cyk7CisJaWYgKHJldCA9PSAwKQorCQkqa2V5X3JldCA9IGlibXItPmZtci0+cmtleTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogbWFwX2ZtciBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmV0KTsKKworCWlibXItPmRldmljZSA9IHJkc19pYmRldjsKKworIG91dDoKKwlpZiAocmV0KSB7CisJCWlmIChpYm1yKQorCQkJcmRzX2liX2ZyZWVfbXIoaWJtciwgMCk7CisJCWlibXIgPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBpYm1yOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDYxYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yZWN2LmMKQEAgLTAsMCArMSw4NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pYl9pbmNvbWluZ19zbGFiOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaWJfZnJhZ19zbGFiOworc3RhdGljIGF0b21pY190CXJkc19pYl9hbGxvY2F0aW9uID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyB2b2lkIHJkc19pYl9mcmFnX2Ryb3BfcGFnZShzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZykKK3sKKwlyZHNkZWJ1ZygiZnJhZyAlcCBwYWdlICVwXG4iLCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCV9fZnJlZV9wYWdlKGZyYWctPmZfcGFnZSk7CisJZnJhZy0+Zl9wYWdlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX2ZyYWdfZnJlZShzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZykKK3sKKwlyZHNkZWJ1ZygiZnJhZyAlcCBwYWdlICVwXG4iLCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCUJVR19PTihmcmFnLT5mX3BhZ2UgIT0gTlVMTCk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pYl9mcmFnX3NsYWIsIGZyYWcpOworfQorCisvKgorICogV2UgbWFwIGEgcGFnZSBhdCBhIHRpbWUuICBJdHMgZnJhZ21lbnRzIGFyZSBwb3N0ZWQgaW4gb3JkZXIuICBUaGlzCisgKiBpcyBjYWxsZWQgaW4gZnJhZ21lbnQgb3JkZXIgYXMgdGhlIGZyYWdtZW50cyBnZXQgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KKyAqIE9ubHkgdGhlIGxhc3QgZnJhZyBpbiB0aGUgcGFnZSBwZXJmb3JtcyB0aGUgdW5tYXBwaW5nLgorICoKKyAqIEl0J3MgT0sgZm9yIHJpbmcgY2xlYW51cCB0byBjYWxsIHRoaXMgaW4gd2hhdGV2ZXIgb3JkZXIgaXQgbGlrZXMgYmVjYXVzZQorICogRE1BIGlzIG5vdCBpbiBmbGlnaHQgYW5kIHNvIHdlIGNhbiB1bm1hcCB3aGlsZSBvdGhlciByaW5nIGVudHJpZXMgc3RpbGwKKyAqIGhvbGQgcGFnZSByZWZlcmVuY2VzIGluIHRoZWlyIGZyYWdzLgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfcmVjdl91bm1hcF9wYWdlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YpCit7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcgPSByZWN2LT5yX2ZyYWc7CisKKwlyZHNkZWJ1ZygicmVjdiAlcCBmcmFnICVwIHBhZ2UgJXBcbiIsIHJlY3YsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJaWYgKGZyYWctPmZfbWFwcGVkKQorCQlpYl9kbWFfdW5tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJICAgICAgIGZyYWctPmZfbWFwcGVkLAorCQkJICAgICAgIFJEU19GUkFHX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJZnJhZy0+Zl9tYXBwZWQgPSAwOworfQorCit2b2lkIHJkc19pYl9yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCXUzMiBpOworCisJZm9yIChpID0gMCwgcmVjdiA9IGljLT5pX3JlY3ZzOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKywgcmVjdisrKSB7CisJCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCQlyZWN2LT5yX2liaW5jID0gTlVMTDsKKwkJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCQlyZWN2LT5yX3dyLm5leHQgPSBOVUxMOworCQlyZWN2LT5yX3dyLndyX2lkID0gaTsKKwkJcmVjdi0+cl93ci5zZ19saXN0ID0gcmVjdi0+cl9zZ2U7CisJCXJlY3YtPnJfd3IubnVtX3NnZSA9IFJEU19JQl9SRUNWX1NHRTsKKworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwkJc2dlLT5hZGRyID0gMDsKKwkJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQlzZ2UgPSByZHNfaWJfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9yZWN2X2NsZWFyX29uZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YpCit7CisJaWYgKHJlY3YtPnJfaWJpbmMpIHsKKwkJcmRzX2luY19wdXQoJnJlY3YtPnJfaWJpbmMtPmlpX2luYyk7CisJCXJlY3YtPnJfaWJpbmMgPSBOVUxMOworCX0KKwlpZiAocmVjdi0+cl9mcmFnKSB7CisJCXJkc19pYl9yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCQlpZiAocmVjdi0+cl9mcmFnLT5mX3BhZ2UpCisJCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmRzX2liX2ZyYWdfZnJlZShyZWN2LT5yX2ZyYWcpOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCX0KK30KKwordm9pZCByZHNfaWJfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKykKKwkJcmRzX2liX3JlY3ZfY2xlYXJfb25lKGljLCAmaWMtPmlfcmVjdnNbaV0pOworCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlKQorCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UoJmljLT5pX2ZyYWcpOworfQorCitzdGF0aWMgaW50IHJkc19pYl9yZWN2X3JlZmlsbF9vbmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YsCisJCQkJICBnZnBfdCBrcHRyX2dmcCwgZ2ZwX3QgcGFnZV9nZnApCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpZiAocmVjdi0+cl9pYmluYyA9PSBOVUxMKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcmRzX2liX2FsbG9jYXRpb24pID49IHJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbikgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2FsbG9jX2xpbWl0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlY3YtPnJfaWJpbmMgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pYl9pbmNvbWluZ19zbGFiLAorCQkJCQkJIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfaWJpbmMgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlhdG9taWNfaW5jKCZyZHNfaWJfYWxsb2NhdGlvbik7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2liaW5jLT5paV9mcmFncyk7CisJCXJkc19pbmNfaW5pdCgmcmVjdi0+cl9pYmluYy0+aWlfaW5jLCBjb25uLCBjb25uLT5jX2ZhZGRyKTsKKwl9CisKKwlpZiAocmVjdi0+cl9mcmFnID09IE5VTEwpIHsKKwkJcmVjdi0+cl9mcmFnID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfaWJfZnJhZ19zbGFiLCBrcHRyX2dmcCk7CisJCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlJTklUX0xJU1RfSEVBRCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0pOworCQlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IE5VTEw7CisJfQorCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpIHsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBhbGxvY19wYWdlKHBhZ2VfZ2ZwKTsKKwkJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJZG1hX2FkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkgIGljLT5pX2ZyYWcuZl9wYWdlLAorCQkJCSAgaWMtPmlfZnJhZy5mX29mZnNldCwKKwkJCQkgIFJEU19GUkFHX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBkbWFfYWRkcikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBPbmNlIHdlIGdldCB0aGUgUkRTX1BBR0VfTEFTVF9PRkYgZnJhZyB0aGVuIHJkc19pYl9mcmFnX3VubWFwKCkKKwkgKiBtdXN0IGJlIGNhbGxlZCBvbiB0aGlzIHJlY3YuICBUaGlzIGhhcHBlbnMgYXMgY29tcGxldGlvbnMgaGl0CisJICogaW4gb3JkZXIgb3Igb24gY29ubmVjdGlvbiBzaHV0ZG93bi4KKwkgKi8KKwlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IGljLT5pX2ZyYWcuZl9wYWdlOworCXJlY3YtPnJfZnJhZy0+Zl9vZmZzZXQgPSBpYy0+aV9mcmFnLmZfb2Zmc2V0OworCXJlY3YtPnJfZnJhZy0+Zl9tYXBwZWQgPSBkbWFfYWRkcjsKKworCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCXNnZS0+YWRkciA9IGRtYV9hZGRyOworCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKworCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChyZWN2IC0gaWMtPmlfcmVjdnMpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlnZXRfcGFnZShyZWN2LT5yX2ZyYWctPmZfcGFnZSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX29mZnNldCA8IFJEU19QQUdFX0xBU1RfT0ZGKSB7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgKz0gUkRTX0ZSQUdfU0laRTsKKwl9IGVsc2UgeworCQlwdXRfcGFnZShpYy0+aV9mcmFnLmZfcGFnZSk7CisJCWljLT5pX2ZyYWcuZl9wYWdlID0gTlVMTDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyB0cmllcyB0byBhbGxvY2F0ZSBhbmQgcG9zdCB1bnVzZWQgd29yayByZXF1ZXN0cyBhZnRlciBtYWtpbmcgc3VyZSB0aGF0CisgKiB0aGV5IGhhdmUgYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5IG5lZWQgdG8gcXVldWUgcmVjZWl2ZWQgZnJhZ21lbnRzIGludG8KKyAqIHNvY2tldHMuICBUaGUgaV9yZWN2X211dGV4IGlzIGhlbGQgaGVyZSBzbyB0aGF0IHJpbmdfYWxsb2MgYW5kIF91bmFsbG9jCisgKiBwYWlycyBkb24ndCBnbyB1bm1hdGNoZWQuCisgKgorICogLTEgaXMgcmV0dXJuZWQgaWYgcG9zdGluZyBmYWlscyBkdWUgdG8gdGVtcG9yYXJ5IHJlc291cmNlIGV4aGF1c3Rpb24uCisgKi8KK2ludCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdjsKKwlzdHJ1Y3QgaWJfcmVjdl93ciAqZmFpbGVkX3dyOworCXVuc2lnbmVkIGludCBwb3N0ZWQgPSAwOworCWludCByZXQgPSAwOworCXUzMiBwb3M7CisKKwl3aGlsZSAoKHByZWZpbGwgfHwgcmRzX2Nvbm5fdXAoY29ubikpCisJCQkmJiByZHNfaWJfcmluZ19hbGxvYygmaWMtPmlfcmVjdl9yaW5nLCAxLCAmcG9zKSkgeworCQlpZiAocG9zID49IGljLT5pX3JlY3ZfcmluZy53X25yKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZ2ggLSByaW5nIGFsbG9jIHJldHVybmVkIHBvcz0ldVxuIiwKKwkJCQkJcG9zKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcG9zXTsKKwkJcmV0ID0gcmRzX2liX3JlY3ZfcmVmaWxsX29uZShjb25uLCByZWN2LCBrcHRyX2dmcCwgcGFnZV9nZnApOworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogWFhYIHdoZW4gY2FuIHRoaXMgZmFpbD8gKi8KKwkJcmV0ID0gaWJfcG9zdF9yZWN2KGljLT5pX2NtX2lkLT5xcCwgJnJlY3YtPnJfd3IsICZmYWlsZWRfd3IpOworCQlyZHNkZWJ1ZygicmVjdiAlcCBpYmluYyAlcCBwYWdlICVwIGFkZHIgJWx1IHJldCAlZFxuIiwgcmVjdiwKKwkJCSByZWN2LT5yX2liaW5jLCByZWN2LT5yX2ZyYWctPmZfcGFnZSwKKwkJCSAobG9uZykgcmVjdi0+cl9mcmFnLT5mX21hcHBlZCwgcmV0KTsKKwkJaWYgKHJldCkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgcG9zdCBvbiAiCisJCQkgICAgICAgIiVwSTQgcmV0dXJuZWQgJWQsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCSAgICAgICByZXQpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXBvc3RlZCsrOworCX0KKworCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAtIHVwZGF0ZSB0aGUgd2luZG93LiAqLworCWlmIChpYy0+aV9mbG93Y3RsICYmIHBvc3RlZCkKKwkJcmRzX2liX2FkdmVydGlzZV9jcmVkaXRzKGNvbm4sIHBvc3RlZCk7CisKKwlpZiAocmV0KQorCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKnBvczsKKworCWliaW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pYl9pbmNvbWluZywgaWlfaW5jKTsKKwlyZHNkZWJ1ZygicHVyZ2luZyBpYmluYyAlcCBpbmMgJXBcbiIsIGliaW5jLCBpbmMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZyYWcsIHBvcywgJmliaW5jLT5paV9mcmFncywgZl9pdGVtKSB7CisJCWxpc3RfZGVsX2luaXQoJmZyYWctPmZfaXRlbSk7CisJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZShmcmFnKTsKKwkJcmRzX2liX2ZyYWdfZnJlZShmcmFnKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2liX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYzsKKworCWliaW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pYl9pbmNvbWluZywgaWlfaW5jKTsKKworCXJkc19pYl9pbmNfcHVyZ2UoaW5jKTsKKwlyZHNkZWJ1ZygiZnJlZWluZyBpYmluYyAlcCBpbmMgJXBcbiIsIGliaW5jLCBpbmMpOworCUJVR19PTighbGlzdF9lbXB0eSgmaWJpbmMtPmlpX2ZyYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pYl9pbmNvbWluZ19zbGFiLCBpYmluYyk7CisJYXRvbWljX2RlYygmcmRzX2liX2FsbG9jYXRpb24pOworCUJVR19PTihhdG9taWNfcmVhZCgmcmRzX2liX2FsbG9jYXRpb24pIDwgMCk7Cit9CisKK2ludCByZHNfaWJfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXN0cnVjdCBpb3ZlYyAqaW92ID0gZmlyc3RfaW92OworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmYgPSAwOworCWludCBjb3BpZWQgPSAwOworCWludCByZXQ7CisJdTMyIGxlbjsKKworCWliaW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pYl9pbmNvbWluZywgaWlfaW5jKTsKKwlmcmFnID0gbGlzdF9lbnRyeShpYmluYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJbGVuID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisKKwl3aGlsZSAoY29waWVkIDwgc2l6ZSAmJiBjb3BpZWQgPCBsZW4pIHsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJCXdoaWxlIChpb3Zfb2ZmID09IGlvdi0+aW92X2xlbikgeworCQkJaW92X29mZiA9IDA7CisJCQlpb3YrKzsKKwkJfQorCisJCXRvX2NvcHkgPSBtaW4oaW92LT5pb3ZfbGVuIC0gaW92X29mZiwgUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCIlbHUgYnl0ZXMgdG8gdXNlciBbJXAsICV6dV0gKyAlbHUgZnJvbSBmcmFnICIKKwkJCSAiWyVwLCAlbHVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSBmcmFnLT5mX3BhZ2UsIGZyYWctPmZfb2Zmc2V0LCBmcmFnX29mZik7CisKKwkJLyogWFhYIG5lZWRzICsgb2Zmc2V0IGZvciBtdWx0aXBsZSByZWN2cyBwZXIgcGFnZSAqLworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoZnJhZy0+Zl9wYWdlLAorCQkJCQkgICAgZnJhZy0+Zl9vZmZzZXQgKyBmcmFnX29mZiwKKwkJCQkJICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgdG9fY29weSk7CisJCWlmIChyZXQpIHsKKwkJCWNvcGllZCA9IHJldDsKKwkJCWJyZWFrOworCQl9CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQljb3BpZWQgKz0gdG9fY29weTsKKwl9CisKKwlyZXR1cm4gY29waWVkOworfQorCisvKiBpYyBzdGFydHMgb3V0IGt6YWxsb2MoKWVkICovCit2b2lkIHJkc19pYl9yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IGliX3NlbmRfd3IgKndyID0gJmljLT5pX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2UgPSAmaWMtPmlfYWNrX3NnZTsKKworCXNnZS0+YWRkciA9IGljLT5pX2Fja19kbWE7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJd3ItPnNnX2xpc3QgPSBzZ2U7CisJd3ItPm51bV9zZ2UgPSAxOworCXdyLT5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXdyLT53cl9pZCA9IFJEU19JQl9BQ0tfV1JfSUQ7CisJd3ItPnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7Cit9CisKKy8qCisgKiBZb3UnZCB0aGluayB0aGF0IHdpdGggcmVsaWFibGUgSUIgY29ubmVjdGlvbnMgeW91IHdvdWxkbid0IG5lZWQgdG8gYWNrCisgKiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgSUIgaGFyZHdhcmUgZ2VuZXJhdGVzCisgKiBhbiBhY2sgbWVzc2FnZSBiZWZvcmUgaXQgaGFzIERNQWVkIHRoZSBtZXNzYWdlIGludG8gbWVtb3J5LiAgVGhpcyBjcmVhdGVzIGEKKyAqIHBvdGVudGlhbCBtZXNzYWdlIGxvc3MgaWYgdGhlIEhDQSBpcyBkaXNhYmxlZCBmb3IgYW55IHJlYXNvbiBiZXR3ZWVuIHdoZW4gaXQKKyAqIHNlbmRzIHRoZSBhY2sgYW5kIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBETUFlZCBhbmQgcHJvY2Vzc2VkLiAgVGhpcyBpcyBvbmx5IGEKKyAqIHBvdGVudGlhbCBpc3N1ZSBpZiBhbm90aGVyIEhDQSBpcyBhdmFpbGFibGUgZm9yIGZhaWwtb3Zlci4KKyAqCisgKiBXaGVuIHRoZSByZW1vdGUgaG9zdCByZWNlaXZlcyBvdXIgYWNrIHRoZXknbGwgZnJlZSB0aGUgc2VudCBtZXNzYWdlIGZyb20KKyAqIHRoZWlyIHNlbmQgcXVldWUuICBUbyBkZWNyZWFzZSB0aGUgbGF0ZW5jeSBvZiB0aGlzIHdlIGFsd2F5cyBzZW5kIGFuIGFjaworICogaW1tZWRpYXRlbHkgYWZ0ZXIgd2UndmUgcmVjZWl2ZWQgbWVzc2FnZXMuCisgKgorICogRm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgaGF2ZSBvbmUgYWNrIGluIGZsaWdodCBhdCBhIHRpbWUuICBUaGlzIHB1dHMKKyAqIHByZXNzdXJlIG9uIHNlbmRlcnMgdG8gaGF2ZSBkZWVwIGVub3VnaCBzZW5kIHF1ZXVlcyB0byBhYnNvcmIgdGhlIGxhdGVuY3kgb2YKKyAqIGEgc2luZ2xlIGFjayBmcmFtZSBiZWluZyBpbiBmbGlnaHQuICBUaGlzIG1pZ2h0IG5vdCBiZSBnb29kIGVub3VnaC4KKyAqCisgKiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmUgYSBsb25nLWxpdmVkIHNlbmRfd3IgYW5kIHNnZSB3aGljaCBwb2ludCB0byBhCisgKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhY2sgZnJhbWUuICBUaGlzIGFjayB3ciBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByaW5nCisgKiBhY2NvdW50aW5nIHRoYXQgdGhlIHR4IGFuZCByeCB3cnMgZG8uICBUaGUgUVAgYXR0cmlidXRlIHNwZWNpZmljYWxseSBtYWtlcworICogcm9vbSBmb3IgaXQgYmV5b25kIHRoZSByaW5nIHNpemUuICBTZW5kIGNvbXBsZXRpb24gbm90aWNlcyBpdHMgc3BlY2lhbAorICogd3JfaWQgYW5kIGF2b2lkcyB3b3JraW5nIHdpdGggdGhlIHJpbmcgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAorCQkJCWludCBhY2tfcmVxdWlyZWQpCit7CisJcmRzX2liX3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CisJaWYgKGFja19yZXF1aXJlZCkgeworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB1NjQgcmRzX2liX2dldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworCXJldHVybiBpYy0+aV9hY2tfbmV4dDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHVuc2lnbmVkIGludCBhZHZfY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gaWMtPmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJdTY0IHNlcTsKKwlpbnQgcmV0OworCisJc2VxID0gcmRzX2liX2dldF9hY2soaWMpOworCisJcmRzZGVidWcoInNlbmRfYWNrOiBpYyAlcCBhY2sgJWxsdVxuIiwgaWMsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcSk7CisJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKGhkciwgMCwgMCwgMCk7CisJaGRyLT5oX2FjayA9IGNwdV90b19iZTY0KHNlcSk7CisJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwlpYy0+aV9hY2tfcXVldWVkID0gamlmZmllczsKKworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZpYy0+aV9hY2tfd3IsICZmYWlsZWRfd3IpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCS8qIEZhaWxlZCB0byBzZW5kLiBSZWxlYXNlIHRoZSBXUiwgYW5kCisJCSAqIGZvcmNlIGFub3RoZXIgQUNLLgorCQkgKi8KKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9mYWlsdXJlKTsKKwkJLyogTmVlZCB0byBmaW5lc3NlIHRoaXMgbGF0ZXIuICovCisJCUJVRygpOworCX0gZWxzZQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3NlbnQpOworfQorCisvKgorICogVGhlcmUgYXJlIDMgd2F5cyBvZiBnZXR0aW5nIGFja25vd2xlZGdlbWVudHMgdG8gdGhlIHBlZXI6CisgKiAgMS4JV2UgY2FsbCByZHNfaWJfYXR0ZW1wdF9hY2sgZnJvbSB0aGUgcmVjdiBjb21wbGV0aW9uIGhhbmRsZXIKKyAqCXRvIHNlbmQgYW4gQUNLLW9ubHkgZnJhbWUuCisgKglIb3dldmVyLCB0aGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaCBmcmFtZSBpbiB0aGUgc2VuZCBxdWV1ZQorICoJYXQgYW55IHRpbWUsIHNvIHdlIG1heSBoYXZlIHRvIHBvc3Rwb25lIGl0LgorICogIDIuCVdoZW4gYW5vdGhlciAoZGF0YSkgcGFja2V0IGlzIHRyYW5zbWl0dGVkIHdoaWxlIHRoZXJlJ3MKKyAqCWFuIEFDSyBpbiB0aGUgcXVldWUsIHdlIHBpZ2d5YmFjayB0aGUgQUNLIHNlcXVlbmNlIG51bWJlcgorICoJb24gdGhlIGRhdGEgcGFja2V0LgorICogIDMuCUlmIHRoZSBBQ0sgV1IgaXMgZG9uZSBzZW5kaW5nLCB3ZSBnZXQgY2FsbGVkIGZyb20gdGhlCisgKglzZW5kIHF1ZXVlIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNoZWNrIHdoZXRoZXIgdGhlcmUncworICoJYW5vdGhlciBBQ0sgcGVuZGluZyAocG9zdHBvbmVkIGJlY2F1c2UgdGhlIFdSIHdhcyBvbiB0aGUKKyAqCXF1ZXVlKS4gSWYgc28sIHdlIHRyYW5zbWl0IGl0LgorICoKKyAqIFdlIG1haW50YWluIDIgdmFyaWFibGVzOgorICogIC0JaV9hY2tfZmxhZ3MsIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIEFDSyBXUgorICoJaXMgY3VycmVudGx5IGluIHRoZSBzZW5kIHF1ZXVlIG9yIG5vdCAoSUJfQUNLX0lOX0ZMSUdIVCkKKyAqICAtCWlfYWNrX25leHQsIHdoaWNoIGlzIHRoZSBsYXN0IHNlcXVlbmNlIG51bWJlciB3ZSByZWNlaXZlZAorICoKKyAqIFBvdGVudGlhbGx5LCBzZW5kIHF1ZXVlIGFuZCByZWNlaXZlIHF1ZXVlIGhhbmRsZXJzIGNhbiBydW4gY29uY3VycmVudGx5LgorICoKKyAqIFJlY29ubmVjdGluZyBjb21wbGljYXRlcyB0aGlzIHBpY3R1cmUganVzdCBzbGlnaHRseS4gV2hlbiB3ZQorICogcmVjb25uZWN0LCB3ZSBtYXkgYmUgc2VlaW5nIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgcGVlcgorICogaXMgcmV0cmFuc21pdHRpbmcgdGhlbSwgYmVjYXVzZSBpdCBoYXNuJ3Qgc2VlbiBhbiBBQ0sgZm9yCisgKiB0aGVtLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBBQ0sgdGhlc2UuCisgKgorICogQUNLIG1pdGlnYXRpb24gYWRkcyBhIGhlYWRlciBmbGFnICJBQ0tfUkVRVUlSRUQiOyBhbnkgcGFja2V0IHdpdGgKKyAqIHRoaXMgZmxhZyBzZXQgKk1VU1QqIGJlIGFja25vd2xlZGdlZCBpbW1lZGlhdGVseS4KKyAqLworCisvKgorICogV2hlbiB3ZSBnZXQgaGVyZSwgd2UncmUgY2FsbGVkIGZyb20gdGhlIHJlY3YgcXVldWUgaGFuZGxlci4KKyAqIENoZWNrIHdoZXRoZXIgd2Ugb3VnaHQgdG8gdHJhbnNtaXQgYW4gQUNLLgorICovCit2b2lkIHJkc19pYl9hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXVuc2lnbmVkIGludCBhZHZfY3JlZGl0czsKKworCWlmICghdGVzdF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJldHVybjsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpKSB7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9kZWxheWVkKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENhbiB3ZSBnZXQgYSBzZW5kIGNyZWRpdD8gKi8KKwlpZiAoIXJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgMSwgJmFkdl9jcmVkaXRzLCAwKSkgeworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfdGhyb3R0bGUpOworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2liX3NlbmRfYWNrKGljLCBhZHZfY3JlZGl0cyk7Cit9CisKKy8qCisgKiBXZSBnZXQgaGVyZSBmcm9tIHRoZSBzZW5kIGNvbXBsZXRpb24gaGFuZGxlciwgd2hlbiB0aGUKKyAqIGFkYXB0ZXIgdGVsbHMgdXMgdGhlIEFDSyBmcmFtZSB3YXMgc2VudC4KKyAqLwordm9pZCByZHNfaWJfYWNrX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSByZWd1bGFyIHhtaXQgY29kZSB3aGVuIGl0IHdhbnRzIHRvIHBpZ2d5YmFjaworICogYW4gQUNLIG9uIGFuIG91dGdvaW5nIGZyYW1lLgorICovCit1NjQgcmRzX2liX3BpZ2d5Yl9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3NlbmRfcGlnZ3liYWNrZWQpOworCXJldHVybiByZHNfaWJfZ2V0X2FjayhpYyk7Cit9CisKKy8qCisgKiBJdCdzIGtpbmQgb2YgbGFtZSB0aGF0IHdlJ3JlIGNvcHlpbmcgZnJvbSB0aGUgcG9zdGVkIHJlY2VpdmUgcGFnZXMgaW50bworICogbG9uZy1saXZlZCBiaXRtYXBzLiAgV2UgY291bGQgaGF2ZSBwb3N0ZWQgdGhlIGJpdG1hcHMgYW5kIHJkbWEgd3JpdHRlbiBpbnRvCisgKiB0aGVtLiAgQnV0IHJlY2VpdmluZyBuZXcgY29uZ2VzdGlvbiBiaXRtYXBzIHNob3VsZCBiZSBhICpyYXJlKiBldmVudCwgc28KKyAqIGhvcGVmdWxseSB3ZSB3b24ndCBuZWVkIHRvIGludmVzdCB0aGF0IGNvbXBsZXhpdHkgaW4gbWFraW5nIGl0IG1vcmUKKyAqIGVmZmljaWVudC4gIEJ5IGNvcHlpbmcgd2UgY2FuIHNoYXJlIGEgc2ltcGxlciBjb3JlIHdpdGggVENQIHdoaWNoIGhhcyB0bworICogY29weS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2liX2NvbmdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYykKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJdW5zaWduZWQgaW50IG1hcF9vZmY7CisJdW5zaWduZWQgaW50IG1hcF9wYWdlOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmY7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgY29waWVkOworCXVpbnQ2NF90IHVuY29uZ2VzdGVkID0gMDsKKwl2b2lkICphZGRyOworCisJLyogY2F0Y2ggY29tcGxldGVseSBjb3JydXB0IHBhY2tldHMgKi8KKwlpZiAoYmUzMl90b19jcHUoaWJpbmMtPmlpX2luYy5pX2hkci5oX2xlbikgIT0gUkRTX0NPTkdfTUFQX0JZVEVTKQorCQlyZXR1cm47CisKKwltYXAgPSBjb25uLT5jX2Zjb25nOworCW1hcF9wYWdlID0gMDsKKwltYXBfb2ZmID0gMDsKKworCWZyYWcgPSBsaXN0X2VudHJ5KGliaW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlmcmFnX29mZiA9IDA7CisKKwljb3BpZWQgPSAwOworCisJd2hpbGUgKGNvcGllZCA8IFJEU19DT05HX01BUF9CWVRFUykgeworCQl1aW50NjRfdCAqc3JjLCAqZHN0OworCQl1bnNpZ25lZCBpbnQgazsKKworCQl0b19jb3B5ID0gbWluKFJEU19GUkFHX1NJWkUgLSBmcmFnX29mZiwgUEFHRV9TSVpFIC0gbWFwX29mZik7CisJCUJVR19PTih0b19jb3B5ICYgNyk7IC8qIE11c3QgYmUgNjRiaXQgYWxpZ25lZC4gKi8KKworCQlhZGRyID0ga21hcF9hdG9taWMoZnJhZy0+Zl9wYWdlLCBLTV9TT0ZUSVJRMCk7CisKKwkJc3JjID0gYWRkciArIGZyYWdfb2ZmOworCQlkc3QgPSAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW21hcF9wYWdlXSArIG1hcF9vZmY7CisJCWZvciAoayA9IDA7IGsgPCB0b19jb3B5OyBrICs9IDgpIHsKKwkJCS8qIFJlY29yZCBwb3J0cyB0aGF0IGJlY2FtZSB1bmNvbmdlc3RlZCwgaWUKKwkJCSAqIGJpdHMgdGhhdCBjaGFuZ2VkIGZyb20gMCB0byAxLiAqLworCQkJdW5jb25nZXN0ZWQgfD0gfigqc3JjKSAmICpkc3Q7CisJCQkqZHN0KysgPSAqc3JjKys7CisJCX0KKwkJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9TT0ZUSVJRMCk7CisKKwkJY29waWVkICs9IHRvX2NvcHk7CisKKwkJbWFwX29mZiArPSB0b19jb3B5OworCQlpZiAobWFwX29mZiA9PSBQQUdFX1NJWkUpIHsKKwkJCW1hcF9vZmYgPSAwOworCQkJbWFwX3BhZ2UrKzsKKwkJfQorCisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChmcmFnX29mZiA9PSBSRFNfRlJBR19TSVpFKSB7CisJCQlmcmFnID0gbGlzdF9lbnRyeShmcmFnLT5mX2l0ZW0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwkJCWZyYWdfb2ZmID0gMDsKKwkJfQorCX0KKworCS8qIHRoZSBjb25nZXN0aW9uIG1hcCBpcyBpbiBsaXR0bGUgZW5kaWFuIG9yZGVyICovCisJdW5jb25nZXN0ZWQgPSBsZTY0X3RvX2NwdSh1bmNvbmdlc3RlZCk7CisKKwlyZHNfY29uZ19tYXBfdXBkYXRlZChtYXAsIHVuY29uZ2VzdGVkKTsKK30KKworLyoKKyAqIFJpbmdzIGFyZSBwb3N0ZWQgd2l0aCBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXknbGwgbmVlZCB0byBxdWV1ZSB0aGUKKyAqIGluY29taW5nIG1lc3NhZ2UgdG8gdGhlIHJlY2VpdmluZyBzb2NrZXQgc28gdGhpcyBjYW4ndCBmYWlsLgorICogQWxsIGZyYWdtZW50cyBzdGFydCB3aXRoIGEgaGVhZGVyLCBzbyB3ZSBjYW4gbWFrZSBzdXJlIHdlJ3JlIG5vdCByZWNlaXZpbmcKKyAqIGdhcmJhZ2UsIGFuZCB3ZSBjYW4gdGVsbCBhIHNtYWxsIDggYnl0ZSBmcmFnbWVudCBmcm9tIGFuIEFDSyBmcmFtZS4KKyAqLworc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgeworCXU2NAkJYWNrX25leHQ7CisJdTY0CQlhY2tfcmVjdjsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlcXVpcmVkOjE7CisJdW5zaWduZWQgaW50CWFja19uZXh0X3ZhbGlkOjE7CisJdW5zaWduZWQgaW50CWFja19yZWN2X3ZhbGlkOjE7Cit9OworCitzdGF0aWMgdm9pZCByZHNfaWJfcHJvY2Vzc19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwgdTMyIGJ5dGVfbGVuLAorCQkJCXN0cnVjdCByZHNfaWJfYWNrX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYyA9IGljLT5pX2liaW5jOworCXN0cnVjdCByZHNfaGVhZGVyICppaGRyLCAqaGRyOworCisJLyogWFhYIHNodXQgZG93biB0aGUgY29ubmVjdGlvbiBpZiBwb3J0IDAsMCBhcmUgc2Vlbj8gKi8KKworCXJkc2RlYnVnKCJpYyAlcCBpYmluYyAlcCByZWN2ICVwIGJ5dGUgbGVuICV1XG4iLCBpYywgaWJpbmMsIHJlY3YsCisJCSBieXRlX2xlbik7CisKKwlpZiAoYnl0ZV9sZW4gPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgZGlkbid0IGluY2x1ZSBhICIKKwkJICAgICAgICJoZWFkZXIsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJldHVybjsKKwl9CisJYnl0ZV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWloZHIgPSAmaWMtPmlfcmVjdl9oZHJzW3JlY3YgLSBpYy0+aV9yZWN2c107CisKKwkvKiBWYWxpZGF0ZSB0aGUgY2hlY2tzdW0uICovCisJaWYgKCFyZHNfbWVzc2FnZV92ZXJpZnlfY2hlY2tzdW0oaWhkcikpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBoYXMgY29ycnVwdGVkIGhlYWRlciAtICIKKwkJICAgICAgICJmb3JjaW5nIGEgcmVjb25uZWN0XG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX2JhZF9jaGVja3N1bSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIHRoZSBBQ0sgc2VxdWVuY2Ugd2hpY2ggY29tZXMgd2l0aCBldmVyeSBwYWNrZXQgKi8KKwlzdGF0ZS0+YWNrX3JlY3YgPSBiZTY0X3RvX2NwdShpaGRyLT5oX2Fjayk7CisJc3RhdGUtPmFja19yZWN2X3ZhbGlkID0gMTsKKworCS8qIFByb2Nlc3MgdGhlIGNyZWRpdHMgdXBkYXRlIGlmIHRoZXJlIHdhcyBvbmUgKi8KKwlpZiAoaWhkci0+aF9jcmVkaXQpCisJCXJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGloZHItPmhfY3JlZGl0KTsKKworCWlmIChpaGRyLT5oX3Nwb3J0ID09IDAgJiYgaWhkci0+aF9kcG9ydCA9PSAwICYmIGJ5dGVfbGVuID09IDApIHsKKwkJLyogVGhpcyBpcyBhbiBBQ0stb25seSBwYWNrZXQuIFRoZSBmYWN0IHRoYXQgaXQgZ2V0cworCQkgKiBzcGVjaWFsIHRyZWF0bWVudCBoZXJlIGlzIHRoYXQgaGlzdG9yaWNhbGx5LCBBQ0tzCisJCSAqIHdlcmUgcmF0aGVyIHNwZWNpYWwgYmVhc3RzLgorCQkgKi8KKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19yZWNlaXZlZCk7CisKKwkJLyoKKwkJICogVXN1YWxseSB0aGUgZnJhZ3MgbWFrZSB0aGVpciB3YXkgb24gdG8gaW5jcyBhbmQgYXJlIHRoZW4gZnJlZWQgYXMKKwkJICogdGhlIGluYyBpcyBmcmVlZC4gIFdlIGRvbid0IGdvIHRoYXQgcm91dGUsIHNvIHdlIGhhdmUgdG8gZHJvcCB0aGUKKwkJICogcGFnZSByZWYgb3Vyc2VsdmVzLiAgV2UgY2FuJ3QganVzdCBsZWF2ZSB0aGUgcGFnZSBvbiB0aGUgcmVjdgorCQkgKiBiZWNhdXNlIHRoYXQgY29uZnVzZXMgdGhlIGRtYSBtYXBwaW5nIG9mIHBhZ2VzIGFuZCBlYWNoIHJlY3YncyB1c2UKKwkJICogb2YgYSBwYXJ0aWFsIHBhZ2UuICBXZSBjYW4gbGVhdmUgdGhlIGZyYWcsIHRob3VnaCwgaXQgd2lsbCBiZQorCQkgKiByZXVzZWQuCisJCSAqCisJCSAqIEZJWE1FOiBGb2xkIHRoaXMgaW50byB0aGUgY29kZSBwYXRoIGJlbG93LgorCQkgKi8KKwkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKHJlY3YtPnJfZnJhZyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBpbmMgb24gdGhlIGNvbm5lY3Rpb24gdGhlbiB0aGlzCisJICogZnJhZ21lbnQgaGFzIGEgaGVhZGVyIGFuZCBzdGFydHMgYSBtZXNzYWdlLi4gY29weSBpdHMgaGVhZGVyCisJICogaW50byB0aGUgaW5jIGFuZCBzYXZlIHRoZSBpbmMgc28gd2UgY2FuIGhhbmcgdXBjb21pbmcgZnJhZ21lbnRzCisJICogb2ZmIGl0cyBsaXN0LgorCSAqLworCWlmIChpYmluYyA9PSBOVUxMKSB7CisJCWliaW5jID0gcmVjdi0+cl9pYmluYzsKKwkJcmVjdi0+cl9pYmluYyA9IE5VTEw7CisJCWljLT5pX2liaW5jID0gaWJpbmM7CisKKwkJaGRyID0gJmliaW5jLT5paV9pbmMuaV9oZHI7CisJCW1lbWNweShoZHIsIGloZHIsIHNpemVvZigqaGRyKSk7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSBiZTMyX3RvX2NwdShoZHItPmhfbGVuKTsKKworCQlyZHNkZWJ1ZygiaWMgJXAgaWJpbmMgJXAgcmVtICV1IGZsYWcgMHgleFxuIiwgaWMsIGliaW5jLAorCQkJIGljLT5pX3JlY3ZfZGF0YV9yZW0sIGhkci0+aF9mbGFncyk7CisJfSBlbHNlIHsKKwkJaGRyID0gJmliaW5jLT5paV9pbmMuaV9oZHI7CisJCS8qIFdlIGNhbid0IGp1c3QgdXNlIG1lbWNtcCBoZXJlOyBmcmFnbWVudHMgb2YgYQorCQkgKiBzaW5nbGUgbWVzc2FnZSBtYXkgY2FycnkgZGlmZmVyZW50IEFDS3MgKi8KKwkJaWYgKGhkci0+aF9zZXF1ZW5jZSAhPSBpaGRyLT5oX3NlcXVlbmNlCisJCSB8fCBoZHItPmhfbGVuICE9IGloZHItPmhfbGVuCisJCSB8fCBoZHItPmhfc3BvcnQgIT0gaWhkci0+aF9zcG9ydAorCQkgfHwgaGRyLT5oX2Rwb3J0ICE9IGloZHItPmhfZHBvcnQpIHsKKwkJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sCisJCQkJImZyYWdtZW50IGhlYWRlciBtaXNtYXRjaDsgZm9yY2luZyByZWNvbm5lY3RcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbGlzdF9hZGRfdGFpbCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0sICZpYmluYy0+aWlfZnJhZ3MpOworCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwlpZiAoaWMtPmlfcmVjdl9kYXRhX3JlbSA+IFJEU19GUkFHX1NJWkUpCisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gLT0gUkRTX0ZSQUdfU0laRTsKKwllbHNlIHsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IDA7CisJCWljLT5pX2liaW5jID0gTlVMTDsKKworCQlpZiAoaWJpbmMtPmlpX2luYy5pX2hkci5oX2ZsYWdzID09IFJEU19GTEFHX0NPTkdfQklUTUFQKQorCQkJcmRzX2liX2NvbmdfcmVjdihjb25uLCBpYmluYyk7CisJCWVsc2UgeworCQkJcmRzX3JlY3ZfaW5jb21pbmcoY29ubiwgY29ubi0+Y19mYWRkciwgY29ubi0+Y19sYWRkciwKKwkJCQkJICAmaWJpbmMtPmlpX2luYywgR0ZQX0FUT01JQywKKwkJCQkJICBLTV9TT0ZUSVJRMCk7CisJCQlzdGF0ZS0+YWNrX25leHQgPSBiZTY0X3RvX2NwdShoZHItPmhfc2VxdWVuY2UpOworCQkJc3RhdGUtPmFja19uZXh0X3ZhbGlkID0gMTsKKwkJfQorCisJCS8qIEV2YWx1YXRlIHRoZSBBQ0tfUkVRVUlSRUQgZmxhZyAqYWZ0ZXIqIHdlIHJlY2VpdmVkCisJCSAqIHRoZSBjb21wbGV0ZSBmcmFtZSwgYW5kIGFmdGVyIGJ1bXBpbmcgdGhlIG5leHRfcngKKwkJICogc2VxdWVuY2UuICovCisJCWlmIChoZHItPmhfZmxhZ3MgJiBSRFNfRkxBR19BQ0tfUkVRVUlSRUQpIHsKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2Fja19yZXF1aXJlZCk7CisJCQlzdGF0ZS0+YWNrX3JlcXVpcmVkID0gMTsKKwkJfQorCisJCXJkc19pbmNfcHV0KCZpYmluYy0+aWlfaW5jKTsKKwl9Cit9CisKKy8qCisgKiBQbHVja2luZyB0aGUgb2xkZXN0IGVudHJ5IGZyb20gdGhlIHJpbmcgY2FuIGJlIGRvbmUgY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSB0aHJlYWQgcmVmaWxsaW5nIHRoZSByaW5nLiAgRWFjaCByaW5nIG9wZXJhdGlvbiBpcyBwcm90ZWN0ZWQgYnkKKyAqIHNwaW5sb2NrcyBhbmQgdGhlIHRyYW5zaWVudCBzdGF0ZSBvZiByZWZpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCisgKiByZWNvcmRpbmcgb2Ygd2hpY2ggZW50cnkgaXMgb2xkZXN0LgorICoKKyAqIFRoaXMgcmVsaWVzIG9uIElCIG9ubHkgY2FsbGluZyBvbmUgY3EgY29tcF9oYW5kbGVyIGZvciBlYWNoIGNxIHNvIHRoYXQKKyAqIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgY2FsbGVyIG9mIHJkc19yZWN2X2luY29taW5nKCkgcGVyIFJEUyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaWJfYWNrX3N0YXRlIHN0YXRlID0geyAwLCB9OworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCisJcmRzZGVidWcoImNvbm4gJXAgY3EgJXBcbiIsIGNvbm4sIGNxKTsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcV9jYWxsKTsKKworCWliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX1NPTElDSVRFRCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfY3FfZXZlbnQpOworCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcmRzX2liX3Jpbmdfb2xkZXN0KCZpYy0+aV9yZWN2X3JpbmcpXTsKKworCQlyZHNfaWJfcmVjdl91bm1hcF9wYWdlKGljLCByZWN2KTsKKworCQkvKgorCQkgKiBBbHNvIHByb2Nlc3MgcmVjdnMgaW4gY29ubmVjdGluZyBzdGF0ZSBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlCisJCSAqIHRvIGdldCBhIHJlY3YgY29tcGxldGlvbiBfYmVmb3JlXyB0aGUgcmRtYWNtIEVTVEFCTElTSEVECisJCSAqIGV2ZW50IGlzIHByb2Nlc3NlZC4KKwkJICovCisJCWlmIChyZHNfY29ubl91cChjb25uKSB8fCByZHNfY29ubl9jb25uZWN0aW5nKGNvbm4pKSB7CisJCQkvKiBXZSBleHBlY3QgZXJyb3JzIGFzIHRoZSBxcCBpcyBkcmFpbmVkIGR1cmluZyBzaHV0ZG93biAqLworCQkJaWYgKHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSB7CisJCQkJcmRzX2liX3Byb2Nlc3NfcmVjdihjb25uLCByZWN2LCB3Yy5ieXRlX2xlbiwgJnN0YXRlKTsKKwkJCX0gZWxzZSB7CisJCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgY29tcGxldGlvbiBvbiAiCisJCQkJICAgICAgICIlcEk0IGhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwgJmNvbm4tPmNfZmFkZHIsCisJCQkJICAgICAgIHdjLnN0YXR1cyk7CisJCQl9CisJCX0KKworCQlyZHNfaWJfcmluZ19mcmVlKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCX0KKworCWlmIChzdGF0ZS5hY2tfbmV4dF92YWxpZCkKKwkJcmRzX2liX3NldF9hY2soaWMsIHN0YXRlLmFja19uZXh0LCBzdGF0ZS5hY2tfcmVxdWlyZWQpOworCWlmIChzdGF0ZS5hY2tfcmVjdl92YWxpZCAmJiBzdGF0ZS5hY2tfcmVjdiA+IGljLT5pX2Fja19yZWN2KSB7CisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgc3RhdGUuYWNrX3JlY3YsIE5VTEwpOworCQlpYy0+aV9hY2tfcmVjdiA9IHN0YXRlLmFja19yZWN2OworCX0KKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pYl9hdHRlbXB0X2FjayhpYyk7CisKKwkvKiBJZiB3ZSBldmVyIGVuZCB1cCB3aXRoIGEgcmVhbGx5IGVtcHR5IHJlY2VpdmUgcmluZywgd2UncmUKKwkgKiBpbiBkZWVwIHRyb3VibGUsIGFzIHRoZSBzZW5kZXIgd2lsbCBkZWZpbml0ZWx5IHNlZSBSTlIKKwkgKiB0aW1lb3V0cy4gKi8KKwlpZiAocmRzX2liX3JpbmdfZW1wdHkoJmljLT5pX3JlY3ZfcmluZykpCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9yaW5nX2VtcHR5KTsKKworCS8qCisJICogSWYgdGhlIHJpbmcgaXMgcnVubmluZyBsb3csIHRoZW4gc2NoZWR1bGUgdGhlIHRocmVhZCB0byByZWZpbGwuCisJICovCisJaWYgKHJkc19pYl9yaW5nX2xvdygmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKK30KKworaW50IHJkc19pYl9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJkc2RlYnVnKCJjb25uICVwXG4iLCBjb25uKTsKKworCS8qCisJICogSWYgd2UgZ2V0IGEgdGVtcG9yYXJ5IHBvc3RpbmcgZmFpbHVyZSBpbiB0aGlzIGNvbnRleHQgdGhlbgorCSAqIHdlJ3JlIHJlYWxseSBsb3cgYW5kIHdlIHdhbnQgdGhlIGNhbGxlciB0byBiYWNrIG9mZiBmb3IgYSBiaXQuCisJICovCisJbXV0ZXhfbG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisJaWYgKHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDApKQorCQlyZXQgPSAtRU5PTUVNOworCWVsc2UKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X3JlZmlsbF9mcm9tX3RocmVhZCk7CisJbXV0ZXhfdW5sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKworCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgcmRzX2liX3JlY3ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzeXNpbmZvIHNpOworCWludCByZXQgPSAtRU5PTUVNOworCisJLyogRGVmYXVsdCB0byAzMCUgb2YgYWxsIGF2YWlsYWJsZSBSQU0gZm9yIHJlY3YgbWVtb3J5ICovCisJc2lfbWVtaW5mbygmc2kpOworCXJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9IHNpLnRvdGFscmFtIC8gMyAqIFBBR0VfU0laRSAvIFJEU19GUkFHX1NJWkU7CisKKwlyZHNfaWJfaW5jb21pbmdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaWJfaW5jb21pbmciLAorCQkJCQlzaXplb2Yoc3RydWN0IHJkc19pYl9pbmNvbWluZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaWJfaW5jb21pbmdfc2xhYiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJkc19pYl9mcmFnX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2liX2ZyYWciLAorCQkJCQlzaXplb2Yoc3RydWN0IHJkc19wYWdlX2ZyYWcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2liX2ZyYWdfc2xhYiA9PSBOVUxMKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2liX2luY29taW5nX3NsYWIpOworCWVsc2UKKwkJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9yZWN2X2V4aXQodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2liX2luY29taW5nX3NsYWIpOworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfZnJhZ19zbGFiKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmluZy5jIGIvbmV0L3Jkcy9pYl9yaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNmNjYQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfcmluZy5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKKy8qCisgKiBMb2NraW5nIGZvciBJQiByaW5ncy4KKyAqIFdlIGFzc3VtZSB0aGF0IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb3RlY3RlZCBieSBhIG11dGV4CisgKiBpbiB0aGUgY2FsbGVyICh0aGlzIGlzIGEgdmFsaWQgYXNzdW1wdGlvbiBmb3IgdGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9uKS4KKyAqCisgKiBGcmVlaW5nIGFsd2F5cyBoYXBwZW5zIGluIGFuIGludGVycnVwdCwgYW5kIGhlbmNlIG9ubHkKKyAqIHJhY2VzIHdpdGggYWxsb2NhdGlvbnMsIGJ1dCBub3Qgd2l0aCBvdGhlciBmcmVlKClzLgorICoKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgaXMgdGhhdAorICogdGhlIGFsbG9jIGNvZGUgaGFzIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGZyZWUgZW50cmllcy4KKyAqIFRvIHRoaXMgZW5kLCB3ZSBtYWludGFpbiB0d28gY291bnRlcnM7IGFuIGFsbG9jYXRpb24gY291bnRlcgorICogYW5kIGEgZnJlZSBjb3VudGVyLiBCb3RoIGFyZSBhbGxvd2VkIHRvIHJ1biBmcmVlbHksIGFuZCB3cmFwCisgKiBhcm91bmQuCisgKiBUaGUgbnVtYmVyIG9mIHVzZWQgZW50cmllcyBpcyBhbHdheXMgKGFsbG9jX2N0ciAtIGZyZWVfY3RyKSAlIE5SLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1ha2VzIGZyZWVfY3RyIGF0b21pYy4gV2hlbiB0aGUKKyAqIGNhbGxlciBmaW5kcyBhbiBhbGxvY2F0aW9uIGZhaWxzLCBpdCBzaG91bGQgc2V0IGFuICJhbGxvYyBmYWlsIgorICogYml0IGFuZCByZXRyeSB0aGUgYWxsb2NhdGlvbi4gVGhlICJhbGxvYyBmYWlsIiBiaXQgZXNzZW50aWFsbHkgdGVsbHMKKyAqIHRoZSBDUSBjb21wbGV0aW9uIGhhbmRsZXJzIHRvIHdha2UgaXQgdXAgYWZ0ZXIgZnJlZWluZyBzb21lCisgKiBtb3JlIGVudHJpZXMuCisgKi8KKworLyoKKyAqIFRoaXMgb25seSBoYXBwZW5zIG9uIHNodXRkb3duLgorICovCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfaWJfcmluZ19lbXB0eV93YWl0KTsKKwordm9pZCByZHNfaWJfcmluZ19pbml0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJbWVtc2V0KHJpbmcsIDAsIHNpemVvZigqcmluZykpOworCXJpbmctPndfbnIgPSBucjsKKwlyZHNkZWJ1ZygicmluZyAlcCBuciAldVxuIiwgcmluZywgcmluZy0+d19ucik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fcmRzX2liX3JpbmdfdXNlZChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwl1MzIgZGlmZjsKKworCS8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGhhcyBhdCBsZWFzdCBhcyBtYW55IGJpdHMgYXMgdTMyICovCisJZGlmZiA9IHJpbmctPndfYWxsb2NfY3RyIC0gKHUzMikgYXRvbWljX3JlYWQoJnJpbmctPndfZnJlZV9jdHIpOworCUJVR19PTihkaWZmID4gcmluZy0+d19ucik7CisKKwlyZXR1cm4gZGlmZjsKK30KKwordm9pZCByZHNfaWJfcmluZ19yZXNpemUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwkvKiBXZSBvbmx5IGV2ZXIgZ2V0IGNhbGxlZCBmcm9tIHRoZSBjb25uZWN0aW9uIHNldHVwIGNvZGUsCisJICogcHJpb3IgdG8gY3JlYXRpbmcgdGhlIFFQLiAqLworCUJVR19PTihfX3Jkc19pYl9yaW5nX3VzZWQocmluZykpOworCXJpbmctPndfbnIgPSBucjsKK30KKworc3RhdGljIGludCBfX3Jkc19pYl9yaW5nX2VtcHR5KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pYl9yaW5nX3VzZWQocmluZykgPT0gMDsKK30KKwordTMyIHJkc19pYl9yaW5nX2FsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcykKK3sKKwl1MzIgcmV0ID0gMCwgYXZhaWw7CisKKwlhdmFpbCA9IHJpbmctPndfbnIgLSBfX3Jkc19pYl9yaW5nX3VzZWQocmluZyk7CisKKwlyZHNkZWJ1ZygicmluZyAlcCB2YWwgJXUgbmV4dCAldSBmcmVlICV1XG4iLCByaW5nLCB2YWwsCisJCSByaW5nLT53X2FsbG9jX3B0ciwgYXZhaWwpOworCisJaWYgKHZhbCAmJiBhdmFpbCkgeworCQlyZXQgPSBtaW4odmFsLCBhdmFpbCk7CisJCSpwb3MgPSByaW5nLT53X2FsbG9jX3B0cjsKKworCQlyaW5nLT53X2FsbG9jX3B0ciA9IChyaW5nLT53X2FsbG9jX3B0ciArIHJldCkgJSByaW5nLT53X25yOworCQlyaW5nLT53X2FsbG9jX2N0ciArPSByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfcmluZ19mcmVlKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfZnJlZV9wdHIgPSAocmluZy0+d19mcmVlX3B0ciArIHZhbCkgJSByaW5nLT53X25yOworCWF0b21pY19hZGQodmFsLCAmcmluZy0+d19mcmVlX2N0cik7CisKKwlpZiAoX19yZHNfaWJfcmluZ19lbXB0eShyaW5nKSAmJgorCSAgICB3YWl0cXVldWVfYWN0aXZlKCZyZHNfaWJfcmluZ19lbXB0eV93YWl0KSkKKwkJd2FrZV91cCgmcmRzX2liX3JpbmdfZW1wdHlfd2FpdCk7Cit9CisKK3ZvaWQgcmRzX2liX3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2FsbG9jX3B0ciA9IChyaW5nLT53X2FsbG9jX3B0ciAtIHZhbCkgJSByaW5nLT53X25yOworCXJpbmctPndfYWxsb2NfY3RyIC09IHZhbDsKK30KKworaW50IHJkc19pYl9yaW5nX2VtcHR5KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pYl9yaW5nX2VtcHR5KHJpbmcpOworfQorCitpbnQgcmRzX2liX3JpbmdfbG93KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pYl9yaW5nX3VzZWQocmluZykgPD0gKHJpbmctPndfbnIgPj4gMik7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBvbGRlc3QgYWxsb2NlZCByaW5nIGVudHJ5LiAgVGhpcyB3aWxsIGJlIHRoZSBuZXh0IG9uZQorICogZnJlZWQuICBUaGlzIGNhbid0IGJlIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm9uZSBhbGxvY2F0ZWQuCisgKi8KK3UzMiByZHNfaWJfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIHJpbmctPndfZnJlZV9wdHI7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHdvcmsgcmVxdWVzdHMuCisgKi8KKwordTMyIHJkc19pYl9yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KQoreworCXUzMiByZXQ7CisKKwlpZiAob2xkZXN0IDw9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQpCisJCXJldCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgLSBvbGRlc3QgKyAxOworCWVsc2UKKwkJcmV0ID0gcmluZy0+d19uciAtIG9sZGVzdCArICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgKyAxOworCisJcmRzZGVidWcoInJpbmcgJXAgcmV0ICV1IHdyX2lkICV1IG9sZGVzdCAldVxuIiwgcmluZywgcmV0LAorCQkgd3JfaWQsIG9sZGVzdCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc2VuZC5jIGIvbmV0L3Jkcy9pYl9zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2YzUyYwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfc2VuZC5jCkBAIC0wLDAgKzEsODc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF9yZG1hX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkJICAgICAgaW50IHdjX3N0YXR1cykKK3sKKwlpbnQgbm90aWZ5X3N0YXR1czsKKworCXN3aXRjaCAod2Nfc3RhdHVzKSB7CisJY2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6CisJCXJldHVybjsKKworCWNhc2UgSUJfV0NfU1VDQ0VTUzoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJCWJyZWFrOworCisJY2FzZSBJQl9XQ19SRU1fQUNDRVNTX0VSUjoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1JFTU9URV9FUlJPUjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfT1RIRVJfRVJST1I7CisJCWJyZWFrOworCX0KKwlyZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHJtLCBub3RpZnlfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfdW5tYXBfcmRtYShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJaWYgKG9wLT5yX21hcHBlZCkgeworCQlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywKKwkJCW9wLT5yX3dyaXRlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCW9wLT5yX21hcHBlZCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF91bm1hcF9ybShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJICBzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCwKKwkJCSAgaW50IHdjX3N0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gc2VuZC0+c19ybTsKKworCXJkc2RlYnVnKCJpYyAlcCBzZW5kICVwIHJtICVwXG4iLCBpYywgc2VuZCwgcm0pOworCisJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCSAgICAgcm0tPm1fc2csIHJtLT5tX25lbnRzLAorCQkgICAgIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkgeworCQlyZHNfaWJfc2VuZF91bm1hcF9yZG1hKGljLCBybS0+bV9yZG1hX29wKTsKKworCQkvKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgYSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBvbiB0aGlzCisJCSAqIG1lc3NhZ2UsIHdlIGNhbiBpbXBsZW1lbnQgdGhyZWUgZGlmZmVyZW50IHNlbWFudGljczoKKwkJICogIDEuCU5vdGlmeSB3aGVuIHdlIHJlY2VpdmVkIHRoZSBBQ0sgb24gdGhlIFJEUyBtZXNzYWdlCisJCSAqCXRoYXQgd2FzIHF1ZXVlZCB3aXRoIHRoZSBSRE1BLiBUaGlzIHByb3ZpZGVzIHJlbGlhYmxlCisJCSAqCW5vdGlmaWNhdGlvbiBvZiBSRE1BIHN0YXR1cyBhdCB0aGUgZXhwZW5zZSBvZiBhIG9uZS13YXkKKwkJICoJcGFja2V0IGRlbGF5LgorCQkgKiAgMi4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgUkRNQSBvcGVyYXRpb24uCisJCSAqICAzLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBhY2NvbXBhbnlpbmcgUkRTIG1lc3NhZ2VzLgorCQkgKiBIZXJlLCB3ZSBpbXBsZW1lbnQgYXBwcm9hY2ggIzMuIFRvIGltcGxlbWVudCBhcHByb2FjaCAjMiwKKwkJICogY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGZyb20gdGhlIGNxX2hhbmRsZXIuIFRvIGltcGxlbWVudCAjMSwKKwkJICogZG9uJ3QgY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGF0IGFsbCwgYW5kIGZhbGwgYmFjayB0byB0aGUgbm90aWZ5CisJCSAqIGhhbmRsaW5nIGluIHRoZSBBQ0sgcHJvY2Vzc2luZyBjb2RlLgorCQkgKgorCQkgKiBOb3RlOiBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzeW5jIGFueSBSRE1BIGJ1ZmZlcnMgdXNpbmcKKwkJICogaWJfZG1hX3N5bmNfc2dfZm9yX2NwdSAtIHRoZSBjb21wbGV0aW9uIGZvciB0aGUgUkRNQQorCQkgKiBvcGVyYXRpb24gaXRzZWxmIHVubWFwcGVkIHRoZSBSRE1BIGJ1ZmZlcnMsIHdoaWNoIHRha2VzIGNhcmUKKwkJICogb2Ygc3luY2hpbmcuCisJCSAqLworCQlyZHNfaWJfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Y19zdGF0dXMpOworCisJCWlmIChybS0+bV9yZG1hX29wLT5yX3dyaXRlKQorCQkJcmRzX3N0YXRzX2FkZChzX3NlbmRfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJCWVsc2UKKwkJCXJkc19zdGF0c19hZGQoc19yZWN2X3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCX0KKworCS8qIElmIGFueW9uZSB3YWl0ZWQgZm9yIHRoaXMgbWVzc2FnZSB0byBnZXQgZmx1c2hlZCBvdXQsIHdha2UKKwkgKiB0aGVtIHVwIG5vdyAqLworCXJkc19tZXNzYWdlX3VubWFwcGVkKHJtKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJc2VuZC0+c19ybSA9IE5VTEw7Cit9CisKK3ZvaWQgcmRzX2liX3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXNlbmQtPnNfcm0gPSBOVUxMOworCQlzZW5kLT5zX29wID0gTlVMTDsKKworCQlzZW5kLT5zX3dyLndyX2lkID0gaTsKKwkJc2VuZC0+c193ci5zZ19saXN0ID0gc2VuZC0+c19zZ2U7CisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c193ci5leC5pbW1fZGF0YSA9IDA7CisKKwkJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCX0KK30KKwordm9pZCByZHNfaWJfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJaWYgKHNlbmQtPnNfd3Iub3Bjb2RlID09IDB4ZGVhZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2VuZC0+c19ybSkKKwkJCXJkc19pYl9zZW5kX3VubWFwX3JtKGljLCBzZW5kLCBJQl9XQ19XUl9GTFVTSF9FUlIpOworCQlpZiAoc2VuZC0+c19vcCkKKwkJCXJkc19pYl9zZW5kX3VubWFwX3JkbWEoaWMsIHNlbmQtPnNfb3ApOworCX0KK30KKworLyoKKyAqIFRoZSBfb2xkZXN0L19mcmVlIHJpbmcgb3BlcmF0aW9ucyBoZXJlIHJhY2UgY2xlYW5seSB3aXRoIHRoZSBhbGxvYy91bmFsbG9jCisgKiBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgc2VuZCBwYXRoLiAgQXMgdGhlIHNlbmRlciBhbGxvY3MgYW5kIHBvdGVudGlhbGx5CisgKiB1bmFsbG9jcyB0aGUgbmV4dCBmcmVlIGVudHJ5IGluIHRoZSByaW5nIGl0IGRvZXNuJ3QgYWx0ZXIgd2hpY2ggaXMKKyAqIHRoZSBuZXh0IHRvIGJlIGZyZWVkLCB3aGljaCBpcyB3aGF0IHRoaXMgaXMgY29uY2VybmVkIHdpdGguCisgKi8KK3ZvaWQgcmRzX2liX3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGNvbXBsZXRlZDsKKwl1MzIgb2xkZXN0OworCXUzMiBpID0gMDsKKwlpbnQgcmV0OworCisJcmRzZGVidWcoImNxICVwIGNvbm4gJXBcbiIsIGNxLCBjb25uKTsKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfY3FfY2FsbCk7CisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KQorCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfY3FfZXZlbnQpOworCisJCWlmICh3Yy53cl9pZCA9PSBSRFNfSUJfQUNLX1dSX0lEKSB7CisJCQlpZiAoaWMtPmlfYWNrX3F1ZXVlZCArIEhaLzIgPCBqaWZmaWVzKQorCQkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9zdGFsbGVkKTsKKwkJCXJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShpYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9sZGVzdCA9IHJkc19pYl9yaW5nX29sZGVzdCgmaWMtPmlfc2VuZF9yaW5nKTsKKworCQljb21wbGV0ZWQgPSByZHNfaWJfcmluZ19jb21wbGV0ZWQoJmljLT5pX3NlbmRfcmluZywgd2Mud3JfaWQsIG9sZGVzdCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGNvbXBsZXRlZDsgaSsrKSB7CisJCQlzZW5kID0gJmljLT5pX3NlbmRzW29sZGVzdF07CisKKwkJCS8qIEluIHRoZSBlcnJvciBjYXNlLCB3Yy5vcGNvZGUgc29tZXRpbWVzIGNvbnRhaW5zIGdhcmJhZ2UgKi8KKwkJCXN3aXRjaCAoc2VuZC0+c193ci5vcGNvZGUpIHsKKwkJCWNhc2UgSUJfV1JfU0VORDoKKwkJCQlpZiAoc2VuZC0+c19ybSkKKwkJCQkJcmRzX2liX3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIHdjLnN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgLSB0aGUgU0cgbGlzdCB3aWxsIGJlIHVubWFwcGVkCisJCQkJICogd2hlbiB0aGUgU0VORCBjb21wbGV0ZXMuICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCQkJIlJEUy9JQjogJXM6IHVuZXhwZWN0ZWQgb3Bjb2RlIDB4JXggaW4gV1IhXG4iLAorCQkJCQkJX19mdW5jX18sIHNlbmQtPnNfd3Iub3Bjb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2VuZC0+c193ci5vcGNvZGUgPSAweGRlYWQ7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJaWYgKHNlbmQtPnNfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3N0YWxsZWQpOworCisJCQkvKiBJZiBhIFJETUEgb3BlcmF0aW9uIHByb2R1Y2VkIGFuIGVycm9yLCBzaWduYWwgdGhpcyByaWdodAorCQkJICogYXdheS4gSWYgd2UgZG9uJ3QsIHRoZSBzdWJzZXF1ZW50IFNFTkQgdGhhdCBnb2VzIHdpdGggdGhpcworCQkJICogUkRNQSB3aWxsIGJlIGNhbmNlbGVkIHdpdGggRVJSX1dGTFVTSCwgYW5kIHRoZSBhcHBsaWNhdGlvbgorCQkJICogbmV2ZXIgbGVhcm4gdGhhdCB0aGUgUkRNQSBmYWlsZWQuICovCisJCQlpZiAodW5saWtlbHkod2Muc3RhdHVzID09IElCX1dDX1JFTV9BQ0NFU1NfRVJSICYmIHNlbmQtPnNfb3ApKSB7CisJCQkJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCQkJCXJtID0gcmRzX3NlbmRfZ2V0X21lc3NhZ2UoY29ubiwgc2VuZC0+c19vcCk7CisJCQkJaWYgKHJtKQorCQkJCQlyZHNfaWJfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Yy5zdGF0dXMpOworCQkJfQorCisJCQlvbGRlc3QgPSAob2xkZXN0ICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJfQorCisJCXJkc19pYl9yaW5nX2ZyZWUoJmljLT5pX3NlbmRfcmluZywgY29tcGxldGVkKTsKKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKQorCQkgfHwgdGVzdF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpCisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUyAmJiByZHNfY29ubl91cChjb25uKSkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkic2VuZCBjb21wbGV0aW9uIG9uICVwSTQgIgorCQkJCSJoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCByZWNvbm5lY3RpbmdcbiIsCisJCQkJJmNvbm4tPmNfZmFkZHIsIHdjLnN0YXR1cyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBhbGxvY2F0aW5nIGNyZWRpdHMgd2hlbiBzZW5kaW5nCisgKiBtZXNzYWdlcy4KKyAqCisgKiBDb25jZXB0dWFsbHksIHdlIGhhdmUgdHdvIGNvdW50ZXJzOgorICogIC0Jc2VuZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSdyZSBhbGxvd2VkCisgKgl0byBzdWJtaXQgd2l0aG91dCBvdmVycnVuaW5nIHRoZSByZWNpZXZlcidzIHF1ZXVlLiBGb3IKKyAqCWVhY2ggU0VORCBXUiB3ZSBwb3N0LCB3ZSBkZWNyZW1lbnQgdGhpcyBieSBvbmUuCisgKgorICogIC0JcG9zdGVkIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlIHJlY2VudGx5CisgKglwb3N0ZWQgdG8gdGhlIHJlY2VpdmUgcXVldWUuIFRoaXMgdmFsdWUgaXMgdHJhbnNmZXJyZWQKKyAqCXRvIHRoZSBwZWVyIGFzIGEgImNyZWRpdCB1cGRhdGUiIGluIGEgUkRTIGhlYWRlciBmaWVsZC4KKyAqCUV2ZXJ5IHRpbWUgd2UgdHJhbnNtaXQgY3JlZGl0cyB0byB0aGUgcGVlciwgd2Ugc3VidHJhY3QKKyAqCXRoZSBhbW91bnQgb2YgdHJhbnNmZXJyZWQgY3JlZGl0cyBmcm9tIHRoaXMgY291bnRlci4KKyAqCisgKiBJdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBhdm9pZCBzaXR1YXRpb25zIHdoZXJlIGJvdGggc2lkZXMgaGF2ZQorICogZXhoYXVzdGVkIHRoZWlyIHNlbmQgY3JlZGl0cywgYW5kIGFyZSB1bmFibGUgdG8gc2VuZCBuZXcgY3JlZGl0cworICogdG8gdGhlIHBlZXIuIFdlIGFjaGlldmUgdGhpcyBieSByZXF1aXJpbmcgdGhhdCB3ZSBzZW5kIGF0IGxlYXN0CisgKiBvbmUgY3JlZGl0IHVwZGF0ZSB0byB0aGUgcGVlciBiZWZvcmUgZXhoYXVzdGluZyBvdXIgY3JlZGl0cy4KKyAqIFdoZW4gbmV3IGNyZWRpdHMgYXJyaXZlLCB3ZSBzdWJ0cmFjdCBvbmUgY3JlZGl0IHRoYXQgaXMgd2l0aGhlbGQKKyAqIHVudGlsIHdlJ3ZlIHBvc3RlZCBuZXcgYnVmZmVycyBhbmQgYXJlIHJlYWR5IHRvIHRyYW5zbWl0IHRoZXNlCisgKiBjcmVkaXRzIChzZWUgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMgYmVsb3cpLgorICoKKyAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdAorICogZ3JhYnMgY19zZW5kX2xvY2sgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy4KKyAqIEhvd2V2ZXIsIHRoZSBBQ0sgc2VuZGluZyBjb2RlIGlzIGluZGVwZW5kZW50IGFuZCBjYW4gcmFjZSB3aXRoCisgKiBtZXNzYWdlIFNFTkRzLgorICoKKyAqIEluIHRoZSBzZW5kIHBhdGgsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb3VudGVycyBmb3Igc2VuZCBjcmVkaXRzCisgKiBhbmQgdGhlIGNvdW50ZXIgb2YgcG9zdGVkIGJ1ZmZlcnMgYXRvbWljYWxseSAtIHdoZW4gd2UgdXNlIHRoZQorICogbGFzdCBhdmFpbGFibGUgY3JlZGl0LCB3ZSBjYW5ub3QgYWxsb3cgYW5vdGhlciB0aHJlYWQgdG8gcmFjZSB1cworICogYW5kIGdyYWIgdGhlIHBvc3RlZCBjcmVkaXRzIGNvdW50ZXIuICBIZW5jZSwgd2UgaGF2ZSB0byB1c2UgYQorICogc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgY3JlZGl0IGNvdW50ZXIsIG9yIHVzZSBhdG9taWNzLgorICoKKyAqIFNwaW5sb2NrcyBzaGFyZWQgYmV0d2VlbiB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUgcGF0aCBhcmUgYmFkLAorICogYmVjYXVzZSB0aGV5IGNyZWF0ZSB1bm5lY2Vzc2FyeSBkZWxheXMuIEFuIGVhcmx5IGltcGxlbWVudGF0aW9uCisgKiB1c2luZyBhIHNwaW5sb2NrIHNob3dlZCBhIDUlIGRlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgYXQgc29tZQorICogbG9hZHMuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdm9pZHMgc3BpbmxvY2tzIGNvbXBsZXRlbHksIHB1dHRpbmcgYm90aAorICogY291bnRlcnMgaW50byBhIHNpbmdsZSBhdG9taWMsIGFuZCB1cGRhdGluZyB0aGF0IGF0b21pYyB1c2luZworICogYXRvbWljX2FkZCAoaW4gdGhlIHJlY2VpdmUgcGF0aCwgd2hlbiByZWNlaXZpbmcgZnJlc2ggY3JlZGl0cyksCisgKiBhbmQgdXNpbmcgYXRvbWljX2NtcHhjaGcgd2hlbiB1cGRhdGluZyB0aGUgdHdvIGNvdW50ZXJzLgorICovCitpbnQgcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkgICAgIHUzMiB3YW50ZWQsIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCkKK3sKKwl1bnNpZ25lZCBpbnQgYXZhaWwsIHBvc3RlZCwgZ290ID0gMCwgYWR2ZXJ0aXNlOworCWxvbmcgb2xkdmFsLCBuZXd2YWw7CisKKwkqYWR2X2NyZWRpdHMgPSAwOworCWlmICghaWMtPmlfZmxvd2N0bCkKKwkJcmV0dXJuIHdhbnRlZDsKKwordHJ5X2FnYWluOgorCWFkdmVydGlzZSA9IDA7CisJb2xkdmFsID0gbmV3dmFsID0gYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpOworCXBvc3RlZCA9IElCX0dFVF9QT1NUX0NSRURJVFMob2xkdmFsKTsKKwlhdmFpbCA9IElCX0dFVF9TRU5EX0NSRURJVFMob2xkdmFsKTsKKworCXJkc2RlYnVnKCJyZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoJXUpOiBjcmVkaXRzPSV1IHBvc3RlZD0ldVxuIiwKKwkJCXdhbnRlZCwgYXZhaWwsIHBvc3RlZCk7CisKKwkvKiBUaGUgbGFzdCBjcmVkaXQgbXVzdCBiZSB1c2VkIHRvIHNlbmQgYSBjcmVkaXQgdXBkYXRlLiAqLworCWlmIChhdmFpbCAmJiAhcG9zdGVkKQorCQlhdmFpbC0tOworCisJaWYgKGF2YWlsIDwgd2FudGVkKSB7CisJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGljLT5pX2NtX2lkLT5jb250ZXh0OworCisJCS8qIE9vcHMsIHRoZXJlIGFyZW4ndCB0aGF0IG1hbnkgY3JlZGl0cyBsZWZ0ISAqLworCQlzZXRfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKTsKKwkJZ290ID0gYXZhaWw7CisJfSBlbHNlIHsKKwkJLyogU29tZXRpbWVzIHlvdSBnZXQgd2hhdCB5b3Ugd2FudCwgbGFsYWxhLiAqLworCQlnb3QgPSB3YW50ZWQ7CisJfQorCW5ld3ZhbCAtPSBJQl9TRVRfU0VORF9DUkVESVRTKGdvdCk7CisKKwkvKgorCSAqIElmIG5lZWRfcG9zdGVkIGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBjYWxsZXIgd2FudHMKKwkgKiB0aGUgcG9zdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgc2VuZCBjcmVkaXRzIGFyZQorCSAqIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAocG9zdGVkICYmIChnb3QgfHwgbmVlZF9wb3N0ZWQpKSB7CisJCWFkdmVydGlzZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcG9zdGVkLCBSRFNfTUFYX0FEVl9DUkVESVQpOworCQluZXd2YWwgLT0gSUJfU0VUX1BPU1RfQ1JFRElUUyhhZHZlcnRpc2UpOworCX0KKworCS8qIEZpbmFsbHkgYmlsbCBldmVyeXRoaW5nICovCisJaWYgKGF0b21pY19jbXB4Y2hnKCZpYy0+aV9jcmVkaXRzLCBvbGR2YWwsIG5ld3ZhbCkgIT0gb2xkdmFsKQorCQlnb3RvIHRyeV9hZ2FpbjsKKworCSphZHZfY3JlZGl0cyA9IGFkdmVydGlzZTsKKwlyZXR1cm4gZ290OworfQorCit2b2lkIHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAoY3JlZGl0cyA9PSAwKQorCQlyZXR1cm47CisKKwlyZHNkZWJ1ZygicmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoJXUpOiBjdXJyZW50PSV1JXNcbiIsCisJCQljcmVkaXRzLAorCQkJSUJfR0VUX1NFTkRfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpLAorCQkJdGVzdF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpID8gIiwgbGxfc2VuZF9mdWxsIiA6ICIiKTsKKworCWF0b21pY19hZGQoSUJfU0VUX1NFTkRfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJV0FSTl9PTihJQl9HRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpID49IDE2Mzg0KTsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcmVkaXRfdXBkYXRlcyk7Cit9CisKK3ZvaWQgcmRzX2liX2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChwb3N0ZWQgPT0gMCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZChJQl9TRVRfUE9TVF9DUkVESVRTKHBvc3RlZCksICZpYy0+aV9jcmVkaXRzKTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHNlbmQgYW4gdXBkYXRlIHRvIHRoZSBwZWVyIG5vdy4KKwkgKiBJZiB3ZSB3b3VsZCBzZW5kIGEgY3JlZGl0IHVwZGF0ZSBmb3IgZXZlcnkgc2luZ2xlIGJ1ZmZlciB3ZQorCSAqIHBvc3QsIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGFuIEFDSyBzdG9ybSAoQUNLIGFycml2ZXMsCisJICogY29uc3VtZXMgYnVmZmVyLCB3ZSByZWZpbGwgdGhlIHJpbmcsIHNlbmQgQUNLIHRvIHJlbW90ZQorCSAqIGFkdmVydGlzaW5nIHRoZSBuZXdseSBwb3N0ZWQgYnVmZmVyLi4uIGFkIGluZikKKwkgKgorCSAqIFBlcmZvcm1hbmNlIHByZXR0eSBtdWNoIGRlcGVuZHMgb24gaG93IG9mdGVuIHdlIHNlbmQKKwkgKiBjcmVkaXQgdXBkYXRlcyAtIHRvbyBmcmVxdWVudCB1cGRhdGVzIG1lYW4gbG90cyBvZiBBQ0tzLgorCSAqIFRvbyBpbmZyZXF1ZW50IHVwZGF0ZXMsIGFuZCB0aGUgcGVlciB3aWxsIHJ1biBvdXQgb2YKKwkgKiBjcmVkaXRzIGFuZCBoYXMgdG8gdGhyb3R0bGUuCisJICogRm9yIHRoZSB0aW1lIGJlaW5nLCAxNiBzZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZS4KKwkgKi8KKwlpZiAoSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpID49IDE2KQorCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Jkc19pYl94bWl0X3BvcHVsYXRlX3dyKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kLCB1bnNpZ25lZCBpbnQgcG9zLAorCQl1bnNpZ25lZCBsb25nIGJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJaW50IHNlbmRfZmxhZ3MpCit7CisJc3RydWN0IGliX3NnZSAqc2dlOworCisJV0FSTl9PTihwb3MgIT0gc2VuZCAtIGljLT5pX3NlbmRzKTsKKworCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IHNlbmRfZmxhZ3M7CisJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXNlbmQtPnNfd3IubnVtX3NnZSA9IDI7CisJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKwlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisJc2VuZC0+c19vcCA9IE5VTEw7CisKKwlpZiAobGVuZ3RoICE9IDApIHsKKwkJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGJ1ZmZlcjsKKwkJc2dlLT5sZW5ndGggPSBsZW5ndGg7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJfSBlbHNlIHsKKwkJLyogV2UncmUgc2VuZGluZyBhIHBhY2tldCB3aXRoIG5vIHBheWxvYWQuIFRoZXJlIGlzIG9ubHkKKwkJICogb25lIFNHRSAqLworCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQlzZ2UgPSAmc2VuZC0+c19zZ2VbMF07CisJfQorCisJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChwb3MgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7Cit9CisKKy8qCisgKiBUaGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gbWVzc2FnZS4gIFRoZSBmaXJzdCB0aW1lCisgKiB3ZSBzZWUgYSBtZXNzYWdlIHdlIG1hcCBpdHMgc2NhdHRlcmxpc3QgaW50byB0aGUgSUIgZGV2aWNlIHNvIHRoYXQKKyAqIHdlIGNhbiBwcm92aWRlIHRoYXQgbWFwcGVkIGFkZHJlc3MgdG8gdGhlIElCIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMKKyAqIGluIHRoZSBJQiB3b3JrIHJlcXVlc3RzLiAgV2UgdHJhbnNsYXRlIHRoZSBzY2F0dGVybGlzdCBpbnRvIGEgc2VyaWVzCisgKiBvZiB3b3JrIHJlcXVlc3RzIHRoYXQgZnJhZ21lbnQgdGhlIG1lc3NhZ2UuICBUaGVzZSB3b3JrIHJlcXVlc3RzIGNvbXBsZXRlCisgKiBpbiBvcmRlciBzbyB3ZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyCisgKiBvbmNlIHdlIHNlbmQgdGhlIGZpbmFsIGZyYWdtZW50LgorICoKKyAqIFRoZSBSRFMgY29yZSB1c2VzIHRoZSBjX3NlbmRfbG9jayB0byBvbmx5IGVudGVyIHRoaXMgZnVuY3Rpb24gb25jZQorICogcGVyIGNvbm5lY3Rpb24uICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgdHggcmluZyBhbGxvYy91bmFsbG9jIHBhaXJzCisgKiBkb24ndCBnZXQgb3V0IG9mIHN5bmMgYW5kIGNvbmZ1c2UgdGhlIHJpbmcuCisgKi8KK2ludCByZHNfaWJfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXUzMiBwb3M7CisJdTMyIGk7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGNyZWRpdF9hbGxvYzsKKwl1MzIgcG9zdGVkOworCXUzMiBhZHZfY3JlZGl0cyA9IDA7CisJaW50IHNlbmRfZmxhZ3MgPSAwOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IGZsb3dfY29udHJvbGxlZCA9IDA7CisKKwlCVUdfT04ob2ZmICUgUkRTX0ZSQUdfU0laRSk7CisJQlVHX09OKGhkcl9vZmYgIT0gMCAmJiBoZHJfb2ZmICE9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJLyogRklYTUUgd2UgbWF5IG92ZXJhbGxvY2F0ZSBoZXJlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkKKwkJaSA9IDE7CisJZWxzZQorCQlpID0gY2VpbChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pLCBSRFNfRlJBR19TSVpFKTsKKworCXdvcmtfYWxsb2MgPSByZHNfaWJfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCBpLCAmcG9zKTsKKwlpZiAod29ya19hbGxvYyA9PSAwKSB7CisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlZGl0X2FsbG9jID0gd29ya19hbGxvYzsKKwlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQljcmVkaXRfYWxsb2MgPSByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIHdvcmtfYWxsb2MsICZwb3N0ZWQsIDApOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCWlmIChjcmVkaXRfYWxsb2MgPCB3b3JrX2FsbG9jKSB7CisJCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBjcmVkaXRfYWxsb2MpOworCQkJd29ya19hbGxvYyA9IGNyZWRpdF9hbGxvYzsKKwkJCWZsb3dfY29udHJvbGxlZCsrOworCQl9CisJCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfdGhyb3R0bGUpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmIChpYy0+aV9ybSA9PSBOVUxMKSB7CisJCS8qCisJCXByaW50ayhLRVJOX05PVElDRSAicmRzX2liX3htaXQgcHJlcCBtc2cgZHBvcnQ9JXUgZmxhZ3M9MHgleCBsZW49JWRcbiIsCisJCQkJYmUxNl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfZHBvcnQpLAorCQkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikpOworCQkgICAqLworCQlpZiAocm0tPm1fbmVudHMpIHsKKwkJCXJtLT5tX2NvdW50ID0gaWJfZG1hX21hcF9zZyhkZXYsCisJCQkJCSBybS0+bV9zZywgcm0tPm1fbmVudHMsIERNQV9UT19ERVZJQ0UpOworCQkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgcm0gJXA6ICVkXG4iLCBpYywgcm0sIHJtLT5tX2NvdW50KTsKKwkJCWlmIChybS0+bV9jb3VudCA9PSAwKSB7CisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJcm0tPm1fY291bnQgPSAwOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwkJaWMtPmlfcm0gPSBybTsKKworCQkvKiBGaW5hbGl6ZSB0aGUgaGVhZGVyICovCisJCWlmICh0ZXN0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX0FDS19SRVFVSVJFRDsKKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX1JFVFJBTlNNSVRURUQ7CisKKwkJLyogSWYgaXQgaGFzIGEgUkRNQSBvcCwgdGVsbCB0aGUgcGVlciB3ZSBkaWQgaXQuIFRoaXMgaXMKKwkJICogdXNlZCBieSB0aGUgcGVlciB0byByZWxlYXNlIHVzZS1vbmNlIFJETUEgTVJzLiAqLworCQlpZiAocm0tPm1fcmRtYV9vcCkgeworCQkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgZXh0X2hkcjsKKworCQkJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJtLT5tX3JkbWFfb3AtPnJfa2V5KTsKKwkJCXJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJUkRTX0VYVEhEUl9SRE1BLCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKKwkJfQorCQlpZiAocm0tPm1fcmRtYV9jb29raWUpIHsKKwkJCXJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKCZybS0+bV9pbmMuaV9oZHIsCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpLAorCQkJCQlyZHNfcmRtYV9jb29raWVfb2Zmc2V0KHJtLT5tX3JkbWFfY29va2llKSk7CisJCX0KKworCQkvKiBOb3RlIC0gcmRzX2liX3BpZ2d5Yl9hY2sgY2xlYXJzIHRoZSBBQ0tfUkVRVUlSRUQgYml0LCBzbworCQkgKiB3ZSBzaG91bGQgbm90IGRvIHRoaXMgdW5sZXNzIHdlIGhhdmUgYSBjaGFuY2Ugb2YgYXQgbGVhc3QKKwkJICogc3RpY2tpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSBzZW5kIHJpbmcuIFdoaWNoIGlzIHdoeSB3ZQorCQkgKiBzaG91bGQgY2FsbCByZHNfaWJfcmluZ19hbGxvYyBmaXJzdC4gKi8KKwkJcm0tPm1faW5jLmlfaGRyLmhfYWNrID0gY3B1X3RvX2JlNjQocmRzX2liX3BpZ2d5Yl9hY2soaWMpKTsKKwkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bSgmcm0tPm1faW5jLmlfaGRyKTsKKworCQkvKgorCQkgKiBVcGRhdGUgYWR2X2NyZWRpdHMgc2luY2Ugd2UgcmVzZXQgdGhlIEFDS19SRVFVSVJFRCBiaXQuCisJCSAqLworCQlyZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDAsICZwb3N0ZWQsIDEpOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCUJVR19PTihhZHZfY3JlZGl0cyA+IDI1NSk7CisJfSBlbHNlIGlmIChpYy0+aV9ybSAhPSBybSkKKwkJQlVHKCk7CisKKwlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisJZmlyc3QgPSBzZW5kOworCXByZXYgPSBOVUxMOworCXNjYXQgPSAmcm0tPm1fc2dbc2ddOworCXNlbnQgPSAwOworCWkgPSAwOworCisJLyogU29tZXRpbWVzIHlvdSB3YW50IHRvIHB1dCBhIGZlbmNlIGJldHdlZW4gYW4gUkRNQQorCSAqIFJFQUQgYW5kIHRoZSBmb2xsb3dpbmcgU0VORC4KKwkgKiBXZSBjb3VsZCBlaXRoZXIgZG8gdGhpcyBhbGwgdGhlIHRpbWUKKwkgKiBvciB3aGVuIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gUmlnaHQgbm93LCB3ZSBsZXQKKwkgKiB0aGUgYXBwbGljYXRpb24gY2hvb3NlLgorCSAqLworCWlmIChybS0+bV9yZG1hX29wICYmIHJtLT5tX3JkbWFfb3AtPnJfZmVuY2UpCisJCXNlbmRfZmxhZ3MgPSBJQl9TRU5EX0ZFTkNFOworCisJLyoKKwkgKiBXZSBjb3VsZCBiZSBjb3B5aW5nIHRoZSBoZWFkZXIgaW50byB0aGUgdW51c2VkIHRhaWwgb2YgdGhlIHBhZ2UuCisJICogVGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSB3aGVuIHRob3NlIHBhZ2VzIG1pZ2h0CisJICogYmUgbWFwcGVkIHVzZXJzcGFjZSBwYWdlcyBvciBwYWdlIGNhY2hlIHBhZ2VzLiAgU28gaW5zdGVhZCB3ZSBhbHdheXMKKwkgKiB1c2UgYSBzZWNvbmQgc2dlIGFuZCBvdXIgbG9uZy1saXZlZCByaW5nIG9mIG1hcHBlZCBoZWFkZXJzLiAgV2Ugc2VuZAorCSAqIHRoZSBoZWFkZXIgYWZ0ZXIgdGhlIGRhdGEgc28gdGhhdCB0aGUgZGF0YSBwYXlsb2FkIGNhbiBiZSBhbGlnbmVkIG9uCisJICogdGhlIHJlY2VpdmVyLgorCSAqLworCisJLyogaGFuZGxlIGEgMC1sZW4gbWVzc2FnZSAqLworCWlmIChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pID09IDApIHsKKwkJcmRzX2liX3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywgMCwgMCwgc2VuZF9mbGFncyk7CisJCWdvdG8gYWRkX2hlYWRlcjsKKwl9CisKKwkvKiBpZiB0aGVyZSdzIGRhdGEgcmVmZXJlbmNlIGl0IHdpdGggYSBjaGFpbiBvZiB3b3JrIHJlcXMgKi8KKwlmb3IgKDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmcm0tPm1fc2dbcm0tPm1fY291bnRdOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGxlbjsKKworCQlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisKKwkJbGVuID0gbWluKFJEU19GUkFHX1NJWkUsIGliX3NnX2RtYV9sZW4oZGV2LCBzY2F0KSAtIG9mZik7CisJCXJkc19pYl94bWl0X3BvcHVsYXRlX3dyKGljLCBzZW5kLCBwb3MsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCBzY2F0KSArIG9mZiwgbGVuLAorCQkJCXNlbmRfZmxhZ3MpOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZQorCQkgKiBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJfQorCisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgLT0gbGVuOworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA8PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJLyoKKwkJICogQWx3YXlzIHNpZ25hbCB0aGUgbGFzdCBvbmUgaWYgd2UncmUgc3RvcHBpbmcgZHVlIHRvIGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChmbG93X2NvbnRyb2xsZWQgJiYgaSA9PSAod29ya19hbGxvYy0xKSkKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJICZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJc2VudCArPSBsZW47CisJCW9mZiArPSBsZW47CisJCWlmIChvZmYgPT0gaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpKSB7CisJCQlzY2F0Kys7CisJCQlvZmYgPSAwOworCQl9CisKK2FkZF9oZWFkZXI6CisJCS8qIFRhY2sgb24gdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YS4gVGhlIGhlYWRlciBTR0Ugc2hvdWxkIGFscmVhZHkKKwkJICogaGF2ZSBiZWVuIHNldCB1cCB0byBwb2ludCB0byB0aGUgcmlnaHQgaGVhZGVyIGJ1ZmZlci4gKi8KKwkJbWVtY3B5KCZpYy0+aV9zZW5kX2hkcnNbcG9zXSwgJnJtLT5tX2luYy5pX2hkciwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkJaWYgKDApIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCXByaW50ayhLRVJOX05PVElDRSAic2VuZCBXUiBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShoZHItPmhfZHBvcnQpLAorCQkJCWhkci0+aF9mbGFncywKKwkJCQliZTMyX3RvX2NwdShoZHItPmhfbGVuKSk7CisJCX0KKwkJaWYgKGFkdl9jcmVkaXRzKSB7CisJCQlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmljLT5pX3NlbmRfaGRyc1twb3NdOworCisJCQkvKiBhZGQgY3JlZGl0IGFuZCByZWRvIHRoZSBoZWFkZXIgY2hlY2tzdW0gKi8KKwkJCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwkJCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwkJCWFkdl9jcmVkaXRzID0gMDsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcmVkaXRfdXBkYXRlcyk7CisJCX0KKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCQlwcmV2ID0gc2VuZDsKKworCQlwb3MgPSAocG9zICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwl9CisKKwkvKiBBY2NvdW50IHRoZSBSRFMgaGVhZGVyIGluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2Ugc2VudCwgYnV0IGp1c3Qgb25jZS4KKwkgKiBUaGUgY2FsbGVyIGhhcyBubyBjb25jZXB0IG9mIGZyYWdtZW50YXRpb24uICovCisJaWYgKGhkcl9vZmYgPT0gMCkKKwkJc2VudCArPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZybS0+bV9zZ1tybS0+bV9jb3VudF0pIHsKKwkJcHJldi0+c19ybSA9IGljLT5pX3JtOworCQlwcmV2LT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisJaWYgKGljLT5pX2Zsb3djdGwgJiYgaSA8IGNyZWRpdF9hbGxvYykKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0X2FsbG9jIC0gaSk7CisKKwkvKiBYWFggbmVlZCB0byB3b3JyeSBhYm91dCBmYWlsZWRfd3IgYW5kIHBhcnRpYWwgc2VuZHMuICovCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWlmIChwcmV2LT5zX3JtKSB7CisJCQlpYy0+aV9ybSA9IHByZXYtPnNfcm07CisJCQlwcmV2LT5zX3JtID0gTlVMTDsKKwkJfQorCQkvKiBGaW5lc3NlIHRoaXMgbGF0ZXIgKi8KKwkJQlVHKCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNlbnQ7CitvdXQ6CisJQlVHX09OKGFkdl9jcmVkaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2liX3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQgPSBOVUxMOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpmaXJzdDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqcHJldjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXVuc2lnbmVkIGxvbmcgbGVuOworCXU2NCByZW1vdGVfYWRkciA9IG9wLT5yX3JlbW90ZV9hZGRyOworCXUzMiBwb3M7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGk7CisJdTMyIGo7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgbnVtX3NnZTsKKworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKCFvcC0+cl9tYXBwZWQpIHsKKwkJb3AtPnJfY291bnQgPSBpYl9kbWFfbWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywgKG9wLT5yX3dyaXRlKSA/CisJCQkJCURNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBvcCAlcDogJWRcbiIsIGljLCBvcCwgb3AtPnJfY291bnQpOworCQlpZiAob3AtPnJfY291bnQgPT0gMCkgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJZ290byBvdXQ7CisJCX0KKworCQlvcC0+cl9tYXBwZWQgPSAxOworCX0KKworCS8qCisJICogSW5zdGVhZCBvZiBrbm93aW5nIGhvdyB0byByZXR1cm4gYSBwYXJ0aWFsIHJkbWEgcmVhZC93cml0ZSB3ZSBpbnNpc3QgdGhhdCB0aGVyZQorCSAqIGJlIGVub3VnaCB3b3JrIHJlcXVlc3RzIHRvIHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlLgorCSAqLworCWkgPSBjZWlsKG9wLT5yX2NvdW50LCByZHNfaWJkZXYtPm1heF9zZ2UpOworCisJd29ya19hbGxvYyA9IHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jICE9IGkpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3JpbmdfZnVsbCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZvcC0+cl9zZ1swXTsKKwlzZW50ID0gMDsKKwludW1fc2dlID0gb3AtPnJfY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGkrKykgeworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZSBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJfQorCisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gb3AtPnJfd3JpdGUgPyBJQl9XUl9SRE1BX1dSSVRFIDogSUJfV1JfUkRNQV9SRUFEOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmVtb3RlX2FkZHIgPSByZW1vdGVfYWRkcjsKKwkJc2VuZC0+c193ci53ci5yZG1hLnJrZXkgPSBvcC0+cl9rZXk7CisJCXNlbmQtPnNfb3AgPSBvcDsKKworCQlpZiAobnVtX3NnZSA+IHJkc19pYmRldi0+bWF4X3NnZSkgeworCQkJc2VuZC0+c193ci5udW1fc2dlID0gcmRzX2liZGV2LT5tYXhfc2dlOworCQkJbnVtX3NnZSAtPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCX0gZWxzZSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSBudW1fc2dlOworCQl9CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCisJCWZvciAoaiA9IDA7IGogPCBzZW5kLT5zX3dyLm51bV9zZ2UgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBqKyspIHsKKwkJCWxlbiA9IGliX3NnX2RtYV9sZW4oaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisJCQlzZW5kLT5zX3NnZVtqXS5hZGRyID0KKwkJCQkgaWJfc2dfZG1hX2FkZHJlc3MoaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisJCQlzZW5kLT5zX3NnZVtqXS5sZW5ndGggPSBsZW47CisJCQlzZW5kLT5zX3NnZVtqXS5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJCXNlbnQgKz0gbGVuOworCQkJcmRzZGVidWcoImljICVwIHNlbnQgJWQgcmVtb3RlX2FkZHIgJWxsdVxuIiwgaWMsIHNlbnQsIHJlbW90ZV9hZGRyKTsKKworCQkJcmVtb3RlX2FkZHIgKz0gbGVuOworCQkJc2NhdCsrOworCQl9CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlwcmV2ID0gc2VuZDsKKwkJaWYgKCsrc2VuZCA9PSAmaWMtPmlfc2VuZHNbaWMtPmlfc2VuZF9yaW5nLndfbnJdKQorCQkJc2VuZCA9IGljLT5pX3NlbmRzOworCX0KKworCS8qIGlmIHdlIGZpbmlzaGVkIHRoZSBtZXNzYWdlIHRoZW4gc2VuZCBjb21wbGV0aW9uIG93bnMgaXQgKi8KKwlpZiAoc2NhdCA9PSAmb3AtPnJfc2dbb3AtPnJfY291bnRdKQorCQlwcmV2LT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisKKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogcmRtYSBpYl9wb3N0X3NlbmQgdG8gJXBJNCAiCisJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodW5saWtlbHkoZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl9wb3N0X3NlbmQoKSByYz0lZCwgYnV0IGZhaWxlZF93cWUgdXBkYXRlZCFcbiIsIHJldCk7CisJCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwl9CisKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogV2UgbWF5IGhhdmUgYSBwZW5kaW5nIEFDSyBvciB3aW5kb3cgdXBkYXRlIHdlIHdlcmUgdW5hYmxlCisJICogdG8gc2VuZCBwcmV2aW91c2x5IChkdWUgdG8gZmxvdyBjb250cm9sKS4gVHJ5IGFnYWluLiAqLworCXJkc19pYl9hdHRlbXB0X2FjayhpYyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N0YXRzLmMgYi9uZXQvcmRzL2liX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlM2UzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfc3RhdHMuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaWJfc3RhdGlzdGljcywgcmRzX2liX3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBjaGFyICpyZHNfaWJfc3RhdF9uYW1lc1tdID0geworCSJpYl9jb25uZWN0X3JhY2VkIiwKKwkiaWJfbGlzdGVuX2Nsb3NlZF9zdGFsZSIsCisJImliX3R4X2NxX2NhbGwiLAorCSJpYl90eF9jcV9ldmVudCIsCisJImliX3R4X3JpbmdfZnVsbCIsCisJImliX3R4X3Rocm90dGxlIiwKKwkiaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlIiwKKwkiaWJfdHhfc3RhbGxlZCIsCisJImliX3R4X2NyZWRpdF91cGRhdGVzIiwKKwkiaWJfcnhfY3FfY2FsbCIsCisJImliX3J4X2NxX2V2ZW50IiwKKwkiaWJfcnhfcmluZ19lbXB0eSIsCisJImliX3J4X3JlZmlsbF9mcm9tX2NxIiwKKwkiaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkIiwKKwkiaWJfcnhfYWxsb2NfbGltaXQiLAorCSJpYl9yeF9jcmVkaXRfdXBkYXRlcyIsCisJImliX2Fja19zZW50IiwKKwkiaWJfYWNrX3NlbmRfZmFpbHVyZSIsCisJImliX2Fja19zZW5kX2RlbGF5ZWQiLAorCSJpYl9hY2tfc2VuZF9waWdneWJhY2tlZCIsCisJImliX2Fja19yZWNlaXZlZCIsCisJImliX3JkbWFfbXJfYWxsb2MiLAorCSJpYl9yZG1hX21yX2ZyZWUiLAorCSJpYl9yZG1hX21yX3VzZWQiLAorCSJpYl9yZG1hX21yX3Bvb2xfZmx1c2giLAorCSJpYl9yZG1hX21yX3Bvb2xfd2FpdCIsCisJImliX3JkbWFfbXJfcG9vbF9kZXBsZXRlZCIsCit9OworCit1bnNpZ25lZCBpbnQgcmRzX2liX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKworCWlmIChhdmFpbCA8IEFSUkFZX1NJWkUocmRzX2liX3N0YXRfbmFtZXMpKQorCQlnb3RvIG91dDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfaWJfc3RhdHMsIGNwdSkpOworCQlzdW0gPSAodWludDY0X3QgKikmc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaSsrKQorCQkJKihzdW0rKykgKz0gKihzcmMrKyk7CisJfQorCisJcmRzX3N0YXRzX2luZm9fY29weShpdGVyLCAodWludDY0X3QgKikmc3RhdHMsIHJkc19pYl9zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX2liX3N0YXRfbmFtZXMpKTsKK291dDoKKwlyZXR1cm4gQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N5c2N0bC5jIGIvbmV0L3Jkcy9pYl9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODc4MzBkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zeXNjdGwuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAiaWIuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfaWJfc3lzY3RsX2hkcjsKKwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyID0gUkRTX0lCX0RFRkFVTFRfU0VORF9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93ciA9IFJEU19JQl9ERUZBVUxUX1JFQ1ZfV1I7Cit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9ICgxMjggKiAxMDI0ICogMTAyNCkgLyBSRFNfRlJBR19TSVpFOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfd3JfbWluID0gMTsKKy8qIGhhcmR3YXJlIHdpbGwgZmFpbCBDUSBjcmVhdGlvbiBsb25nIGJlZm9yZSB0aGlzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF93cl9tYXggPSAodTMyKX4wOworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dycyA9IDE2Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyX21heCA9IDY0OworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzID0gKDE2IDw8IDIwKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlc19tYXggPSB+MFVMOworCit1bnNpZ25lZCBpbnQgcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgPSAxOworCitjdGxfdGFibGUgcmRzX2liX3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfc2VuZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl93ciIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfdW5zaWduYWxlZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlc19taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl9hbGxvY2F0aW9uIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJmbG93X2NvbnRyb2wiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfaWJfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgLnByb2NuYW1lID0gImliIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCit2b2lkIHJkc19pYl9zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfaWJfc3lzY3RsX2hkcikKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX2liX3N5c2N0bF9oZHIpOworfQorCitpbnQgX19pbml0IHJkc19pYl9zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19pYl9zeXNjdGxfaGRyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKHJkc19pYl9zeXNjdGxfcGF0aCwgcmRzX2liX3N5c2N0bF90YWJsZSk7CisJaWYgKHJkc19pYl9zeXNjdGxfaGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pbmZvLmMgYi9uZXQvcmRzL2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDg4NTUzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pbmZvLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIGdldHNvY2tvcHQoKSBjYWxsIHdoaWNoIGNvcGllcyBhIHNldCBvZiBmaXhlZAorICogc2l6ZWQgc3RydWN0cyBpbnRvIGEgdXNlci1zcGVjaWZpZWQgYnVmZmVyIGFzIGEgbWVhbnMgb2YgcHJvdmlkaW5nCisgKiByZWFkLW9ubHkgaW5mb3JtYXRpb24gYWJvdXQgUkRTLgorICoKKyAqIEZvciBhIGdpdmVuIGluZm9ybWF0aW9uIHNvdXJjZSB0aGVyZSBhcmUgYSBnaXZlbiBudW1iZXIgb2YgZml4ZWQgc2l6ZWQKKyAqIHN0cnVjdHMgYXQgYSBnaXZlbiB0aW1lLiAgVGhlIHN0cnVjdHMgYXJlIG9ubHkgY29waWVkIGlmIHRoZSB1c2VyLXNwZWNpZmllZAorICogYnVmZmVyIGlzIGJpZyBlbm91Z2guICBUaGUgZGVzdGluYXRpb24gcGFnZXMgdGhhdCBtYWtlIHVwIHRoZSBidWZmZXIKKyAqIGFyZSBwaW5uZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weS4KKyAqCisgKiBUaGlzIGdpdmVzIHVzIHRoZSBmb2xsb3dpbmcgYmVuZWZpdHM6CisgKgorICogLSBzaW1wbGUgaW1wbGVtZW50YXRpb24sIG5vIGNvcHkgInBvc2l0aW9uIiBhY3Jvc3MgbXVsdGlwbGUgY2FsbHMKKyAqIC0gY29uc2lzdGVudCBzbmFwc2hvdCBvZiBhbiBpbmZvIHNvdXJjZQorICogLSBhdG9taWMgY29weSB3b3JrcyB3ZWxsIHdpdGggd2hhdGV2ZXIgbG9ja2luZyBpbmZvIHNvdXJjZSBoYXMKKyAqIC0gb25lIHBvcnRhYmxlIHRvb2wgdG8gZ2V0IHJkcyBpbmZvIGFjcm9zcyBpbXBsZW1lbnRhdGlvbnMKKyAqIC0gbG9uZy1saXZlZCB0b29sIGNhbiBnZXQgaW5mbyB3aXRob3V0IGFsbG9jYXRpbmcKKyAqCisgKiBhdCB0aGUgZm9sbG93aW5nIGNvc3RzOgorICoKKyAqIC0gaW5mbyBzb3VyY2UgY29weSBtdXN0IGJlIHBpbm5lZCwgbWF5IGJlICJsYXJnZSIKKyAqLworCitzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgeworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJdm9pZCAqYWRkcjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2luZm9fbG9jayk7CitzdGF0aWMgcmRzX2luZm9fZnVuYyByZHNfaW5mb19mdW5jc1tSRFNfSU5GT19MQVNUIC0gUkRTX0lORk9fRklSU1QgKyAxXTsKKwordm9pZCByZHNfaW5mb19yZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpCit7CisJaW50IG9mZnNldCA9IG9wdG5hbWUgLSBSRFNfSU5GT19GSVJTVDsKKworCUJVR19PTihvcHRuYW1lIDwgUkRTX0lORk9fRklSU1QgfHwgb3B0bmFtZSA+IFJEU19JTkZPX0xBU1QpOworCisJc3Bpbl9sb2NrKCZyZHNfaW5mb19sb2NrKTsKKwlCVUdfT04ocmRzX2luZm9fZnVuY3Nbb2Zmc2V0XSAhPSBOVUxMKTsKKwlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gZnVuYzsKKwlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7Cit9CisKK3ZvaWQgcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpCit7CisJaW50IG9mZnNldCA9IG9wdG5hbWUgLSBSRFNfSU5GT19GSVJTVDsKKworCUJVR19PTihvcHRuYW1lIDwgUkRTX0lORk9fRklSU1QgfHwgb3B0bmFtZSA+IFJEU19JTkZPX0xBU1QpOworCisJc3Bpbl9sb2NrKCZyZHNfaW5mb19sb2NrKTsKKwlCVUdfT04ocmRzX2luZm9fZnVuY3Nbb2Zmc2V0XSAhPSBmdW5jKTsKKwlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gTlVMTDsKKwlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7Cit9CisKKy8qCisgKiBUeXBpY2FsbHkgd2UgaG9sZCBhbiBhdG9taWMga21hcCBhY3Jvc3MgbXVsdGlwbGUgcmRzX2luZm9fY29weSgpIGNhbGxzCisgKiBiZWNhdXNlIHRoZSBrbWFwIGlzIHNvIGV4cGVuc2l2ZS4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIGJsb2NraW5nCisgKiBvcGVyYXRpb25zIHdoaWxlIGhvbGRpbmcgdGhlIG1hcHBpbmcgYW5kIGFzIHRoZSBpdGVyYXRvciBpcyB0b3JuIGRvd24uCisgKi8KK3ZvaWQgcmRzX2luZm9faXRlcl91bm1hcChzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIpCit7CisJaWYgKGl0ZXItPmFkZHIgIT0gTlVMTCkgeworCQlrdW5tYXBfYXRvbWljKGl0ZXItPmFkZHIsIEtNX1VTRVIwKTsKKwkJaXRlci0+YWRkciA9IE5VTEw7CisJfQorfQorCisvKgorICogZ2V0X3VzZXJfcGFnZXMoKSBjYWxsZWQgZmx1c2hfZGNhY2hlX3BhZ2UoKSBvbiB0aGUgcGFnZXMgZm9yIHVzLgorICovCit2b2lkIHJkc19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLCB2b2lkICpkYXRhLAorCQkgICB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCXVuc2lnbmVkIGxvbmcgdGhpczsKKworCXdoaWxlIChieXRlcykgeworCQlpZiAoaXRlci0+YWRkciA9PSBOVUxMKQorCQkJaXRlci0+YWRkciA9IGttYXBfYXRvbWljKCppdGVyLT5wYWdlcywgS01fVVNFUjApOworCisJCXRoaXMgPSBtaW4oYnl0ZXMsIFBBR0VfU0laRSAtIGl0ZXItPm9mZnNldCk7CisKKwkJcmRzZGVidWcoInBhZ2UgJXAgYWRkciAlcCBvZmZzZXQgJWx1IHRoaXMgJWx1IGRhdGEgJXAgIgorCQkJICAiYnl0ZXMgJWx1XG4iLCAqaXRlci0+cGFnZXMsIGl0ZXItPmFkZHIsCisJCQkgIGl0ZXItPm9mZnNldCwgdGhpcywgZGF0YSwgYnl0ZXMpOworCisJCW1lbWNweShpdGVyLT5hZGRyICsgaXRlci0+b2Zmc2V0LCBkYXRhLCB0aGlzKTsKKworCQlkYXRhICs9IHRoaXM7CisJCWJ5dGVzIC09IHRoaXM7CisJCWl0ZXItPm9mZnNldCArPSB0aGlzOworCisJCWlmIChpdGVyLT5vZmZzZXQgPT0gUEFHRV9TSVpFKSB7CisJCQlrdW5tYXBfYXRvbWljKGl0ZXItPmFkZHIsIEtNX1VTRVIwKTsKKwkJCWl0ZXItPmFkZHIgPSBOVUxMOworCQkJaXRlci0+b2Zmc2V0ID0gMDsKKwkJCWl0ZXItPnBhZ2VzKys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBAb3B0dmFsIHBvaW50cyB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlciB0aGF0IHRoZSBpbmZvcm1hdGlvbiBzbmFwc2hvdAorICogd2lsbCBiZSBjb3BpZWQgaW50by4KKyAqCisgKiBAb3B0bGVuIG9uIGlucHV0IGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4gdXNlcnNwYWNlLiAgQG9wdGxlbgorICogb24gb3V0cHV0IGlzIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgc25hcHNob3QgaW4gYnl0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1lcnJubyBpZiB0aGVyZSBpcyBhIGZhaWx1cmUsIHBhcnRpY3VsYXJseSAtRU5PU1BDCisgKiBpZiB0aGUgZ2l2ZW4gdXNlcnNwYWNlIGJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaCB0byBmaXQgdGhlIHNuYXBzaG90LgorICogT24gc3VjY2VzcyBpdCByZXR1cm5zIHRoZSBwb3NpdGl2ZSBudW1iZXIgb2YgYnl0ZXMgb2YgZWFjaCBhcnJheSBlbGVtZW50CisgKiBpbiB0aGUgc25hcHNob3QuCisgKi8KK2ludCByZHNfaW5mb19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCByZHNfaW5mb19pdGVyYXRvciBpdGVyOworCXN0cnVjdCByZHNfaW5mb19sZW5ndGhzIGxlbnM7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGk7CisJcmRzX2luZm9fZnVuYyBmdW5jOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCWludCByZXQ7CisJaW50IGxlbjsKKwlpbnQgdG90YWw7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGZvciBhbGwga2luZHMgb2Ygd3JhcHBpbmcgYW5kIHRoZSBsaWtlICovCisJc3RhcnQgPSAodW5zaWduZWQgbG9uZylvcHR2YWw7CisJaWYgKGxlbiA8IDAgfHwgbGVuICsgUEFHRV9TSVpFIC0gMSA8IGxlbiB8fCBzdGFydCArIGxlbiA8IHN0YXJ0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGEgMCBsZW4gY2FsbCBpcyBqdXN0IHRyeWluZyB0byBwcm9iZSBpdHMgbGVuZ3RoICovCisJaWYgKGxlbiA9PSAwKQorCQlnb3RvIGNhbGxfZnVuYzsKKworCW5yX3BhZ2VzID0gKFBBR0VfQUxJR04oc3RhcnQgKyBsZW4pIC0gKHN0YXJ0ICYgUEFHRV9NQVNLKSkKKwkJCT4+IFBBR0VfU0hJRlQ7CisKKwlwYWdlcyA9IGttYWxsb2MobnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHN0YXJ0LCBucl9wYWdlcywgMSwgMCwKKwkJCSAgICAgcGFnZXMsIE5VTEwpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKHJldCAhPSBucl9wYWdlcykgeworCQlpZiAocmV0ID4gMCkKKwkJCW5yX3BhZ2VzID0gcmV0OworCQllbHNlCisJCQlucl9wYWdlcyA9IDA7CisJCXJldCA9IC1FQUdBSU47IC8qIFhYWCA/ICovCisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJsZW4gJWQgbnJfcGFnZXMgJWx1XG4iLCBsZW4sIG5yX3BhZ2VzKTsKKworY2FsbF9mdW5jOgorCWZ1bmMgPSByZHNfaW5mb19mdW5jc1tvcHRuYW1lIC0gUkRTX0lORk9fRklSU1RdOworCWlmIChmdW5jID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT1BST1RPT1BUOworCQlnb3RvIG91dDsKKwl9CisKKwlpdGVyLnBhZ2VzID0gcGFnZXM7CisJaXRlci5hZGRyID0gTlVMTDsKKwlpdGVyLm9mZnNldCA9IHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpOworCisJZnVuYyhzb2NrLCBsZW4sICZpdGVyLCAmbGVucyk7CisJQlVHX09OKGxlbnMuZWFjaCA9PSAwKTsKKworCXRvdGFsID0gbGVucy5uciAqIGxlbnMuZWFjaDsKKworCXJkc19pbmZvX2l0ZXJfdW5tYXAoJml0ZXIpOworCisJaWYgKHRvdGFsID4gbGVuKSB7CisJCWxlbiA9IHRvdGFsOworCQlyZXQgPSAtRU5PU1BDOworCX0gZWxzZSB7CisJCWxlbiA9IHRvdGFsOworCQlyZXQgPSBsZW5zLmVhY2g7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0ID0gLUVGQVVMVDsKKworb3V0OgorCWZvciAoaSA9IDA7IHBhZ2VzICE9IE5VTEwgJiYgaSA8IG5yX3BhZ2VzOyBpKyspCisJCXB1dF9wYWdlKHBhZ2VzW2ldKTsKKwlrZnJlZShwYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pbmZvLmggYi9uZXQvcmRzL2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMwNTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pbmZvLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfUkRTX0lORk9fSAorI2RlZmluZSBfUkRTX0lORk9fSAorCitzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyB7CisJdW5zaWduZWQgaW50CW5yOworCXVuc2lnbmVkIGludAllYWNoOworfTsKKworc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yOworCisvKgorICogVGhlc2UgZnVuY3Rpb25zIG11c3QgZmlsbCBpbiB0aGUgZmllbGRzIG9mIEBsZW5zIHRvIHJlZmxlY3QgdGhlIHNpemUKKyAqIG9mIHRoZSBhdmFpbGFibGUgaW5mbyBzb3VyY2UuICBJZiB0aGUgc25hcHNob3QgZml0cyBpbiBAbGVuIHRoZW4gaXQKKyAqIHNob3VsZCBiZSBjb3BpZWQgdXNpbmcgQGl0ZXIuICBUaGUgY2FsbGVyIHdpbGwgZGVkdWNlIGlmIGl0IHdhcyBjb3BpZWQKKyAqIG9yIG5vdCBieSBjb21wYXJpbmcgdGhlIGxlbmd0aHMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKnJkc19pbmZvX2Z1bmMpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucyk7CisKK3ZvaWQgcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhpbnQgb3B0bmFtZSwgcmRzX2luZm9fZnVuYyBmdW5jKTsKK3ZvaWQgcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpOworaW50IHJkc19pbmZvX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQlpbnQgX191c2VyICpvcHRsZW4pOwordm9pZCByZHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwgdm9pZCAqZGF0YSwKKwkJICAgdW5zaWduZWQgbG9uZyBieXRlcyk7Cit2b2lkIHJkc19pbmZvX2l0ZXJfdW5tYXAoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXcuYyBiL25ldC9yZHMvaXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU2OTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pdy5jCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCit1bnNpZ25lZCBpbnQgZmFzdHJlZ19wb29sX3NpemUgPSBSRFNfRkFTVFJFR19QT09MX1NJWkU7Cit1bnNpZ25lZCBpbnQgZmFzdHJlZ19tZXNzYWdlX3NpemUgPSBSRFNfRkFTVFJFR19TSVpFICsgMTsgLyogKzEgYWxsb3dzIGZvciB1bmFsaWduZWQgTVJzICovCisKK21vZHVsZV9wYXJhbShmYXN0cmVnX3Bvb2xfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdHJlZ19wb29sX3NpemUsICIgTWF4IG51bWJlciBvZiBmYXN0cmVnIE1ScyBwZXIgZGV2aWNlIik7Cittb2R1bGVfcGFyYW0oZmFzdHJlZ19tZXNzYWdlX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZhc3RyZWdfbWVzc2FnZV9zaXplLCAiIE1heCBzaXplIG9mIGEgUkRNQSB0cmFuc2ZlciAoZmFzdHJlZyBNUnMpIik7CisKK3N0cnVjdCBsaXN0X2hlYWQgcmRzX2l3X2RldmljZXM7CisKK0RFRklORV9TUElOTE9DSyhpd19ub2Rldl9jb25uc19sb2NrKTsKK0xJU1RfSEVBRChpd19ub2Rldl9jb25ucyk7CisKK3ZvaWQgcmRzX2l3X2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IGliX2RldmljZV9hdHRyICpkZXZfYXR0cjsKKworCS8qIE9ubHkgaGFuZGxlIGl3YXJwIGRldmljZXMgKi8KKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpCisJCXJldHVybjsKKworCWRldl9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldl9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9hdHRyKQorCQlyZXR1cm47CisKKwlpZiAoaWJfcXVlcnlfZGV2aWNlKGRldmljZSwgZGV2X2F0dHIpKSB7CisJCXJkc2RlYnVnKCJRdWVyeSBkZXZpY2UgZmFpbGVkIGZvciAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKKwkJZ290byBmcmVlX2F0dHI7CisJfQorCisJcmRzX2l3ZGV2ID0ga21hbGxvYyhzaXplb2YgKnJkc19pd2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZHNfaXdkZXYpCisJCWdvdG8gZnJlZV9hdHRyOworCisJc3Bpbl9sb2NrX2luaXQoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleSA9ICEhKGRldl9hdHRyLT5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKTsKKwlyZHNfaXdkZXYtPm1heF93cnMgPSBkZXZfYXR0ci0+bWF4X3FwX3dyOworCXJkc19pd2Rldi0+bWF4X3NnZSA9IG1pbihkZXZfYXR0ci0+bWF4X3NnZSwgUkRTX0lXX01BWF9TR0UpOworCisJcmRzX2l3ZGV2LT5wYWdlX3NoaWZ0ID0gbWF4KFBBR0VfU0hJRlQsIGZmcyhkZXZfYXR0ci0+cGFnZV9zaXplX2NhcCkgLSAxKTsKKworCXJkc19pd2Rldi0+ZGV2ID0gZGV2aWNlOworCXJkc19pd2Rldi0+cGQgPSBpYl9hbGxvY19wZChkZXZpY2UpOworCWlmIChJU19FUlIocmRzX2l3ZGV2LT5wZCkpCisJCWdvdG8gZnJlZV9kZXY7CisKKwlpZiAoIXJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXkpIHsKKwkJaWYgKGRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9STklDKSB7CisJCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAorCQkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKKwkJfSBlbHNlIHsKKwkJCXJkc19pd2Rldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pd2Rldi0+cGQsCisJCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8CisJCQkJCQlJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCQl9CisJCWlmIChJU19FUlIocmRzX2l3ZGV2LT5tcikpCisJCQlnb3RvIGVycl9wZDsKKwl9IGVsc2UKKwkJcmRzX2l3ZGV2LT5tciA9IE5VTEw7CisKKwlyZHNfaXdkZXYtPm1yX3Bvb2wgPSByZHNfaXdfY3JlYXRlX21yX3Bvb2wocmRzX2l3ZGV2KTsKKwlpZiAoSVNfRVJSKHJkc19pd2Rldi0+bXJfcG9vbCkpIHsKKwkJcmRzX2l3ZGV2LT5tcl9wb29sID0gTlVMTDsKKwkJZ290byBlcnJfbXI7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd2Rldi0+Y21faWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd2Rldi0+Y29ubl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZyZHNfaXdkZXYtPmxpc3QsICZyZHNfaXdfZGV2aWNlcyk7CisKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2l3X2NsaWVudCwgcmRzX2l3ZGV2KTsKKworCWdvdG8gZnJlZV9hdHRyOworCitlcnJfbXI6CisJaWYgKHJkc19pd2Rldi0+bXIpCisJCWliX2RlcmVnX21yKHJkc19pd2Rldi0+bXIpOworZXJyX3BkOgorCWliX2RlYWxsb2NfcGQocmRzX2l3ZGV2LT5wZCk7CitmcmVlX2RldjoKKwlrZnJlZShyZHNfaXdkZXYpOworZnJlZV9hdHRyOgorCWtmcmVlKGRldl9hdHRyKTsKK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3QgcmRzX2l3X2NtX2lkICppX2NtX2lkLCAqbmV4dDsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwlpZiAoIXJkc19pd2RldikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfY21faWQsIG5leHQsICZyZHNfaXdkZXYtPmNtX2lkX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmlfY21faWQtPmxpc3QpOworCQlrZnJlZShpX2NtX2lkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCXJkc19pd19yZW1vdmVfY29ubnMocmRzX2l3ZGV2KTsKKworCWlmIChyZHNfaXdkZXYtPm1yX3Bvb2wpCisJCXJkc19pd19kZXN0cm95X21yX3Bvb2wocmRzX2l3ZGV2LT5tcl9wb29sKTsKKworCWlmIChyZHNfaXdkZXYtPm1yKQorCQlpYl9kZXJlZ19tcihyZHNfaXdkZXYtPm1yKTsKKworCXdoaWxlIChpYl9kZWFsbG9jX3BkKHJkc19pd2Rldi0+cGQpKSB7CisJCXJkc2RlYnVnKCJGYWlsZWQgdG8gZGVhbGxvYyBwZCAlcFxuIiwgcmRzX2l3ZGV2LT5wZCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlsaXN0X2RlbCgmcmRzX2l3ZGV2LT5saXN0KTsKKwlrZnJlZShyZHNfaXdkZXYpOworfQorCitzdHJ1Y3QgaWJfY2xpZW50IHJkc19pd19jbGllbnQgPSB7CisJLm5hbWUgICA9ICJyZHNfaXciLAorCS5hZGQgICAgPSByZHNfaXdfYWRkX29uZSwKKwkucmVtb3ZlID0gcmRzX2l3X3JlbW92ZV9vbmUKK307CisKK3N0YXRpYyBpbnQgcmRzX2l3X2Nvbm5faW5mb192aXNpdG9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgICAgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvID0gYnVmZmVyOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWM7CisKKwkvKiBXZSB3aWxsIG9ubHkgZXZlciBsb29rIGF0IElCIHRyYW5zcG9ydHMgKi8KKwlpZiAoY29ubi0+Y190cmFucyAhPSAmcmRzX2l3X3RyYW5zcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpaW5mby0+c3JjX2FkZHIgPSBjb25uLT5jX2xhZGRyOworCWlpbmZvLT5kc3RfYWRkciA9IGNvbm4tPmNfZmFkZHI7CisKKwltZW1zZXQoJmlpbmZvLT5zcmNfZ2lkLCAwLCBzaXplb2YoaWluZm8tPnNyY19naWQpKTsKKwltZW1zZXQoJmlpbmZvLT5kc3RfZ2lkLCAwLCBzaXplb2YoaWluZm8tPmRzdF9naWQpKTsKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwkJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCisJCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwkJZGV2X2FkZHIgPSAmaWMtPmlfY21faWQtPnJvdXRlLmFkZHIuZGV2X2FkZHI7CisKKwkJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPnNyY19naWQpOworCQlpYl9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+ZHN0X2dpZCk7CisKKwkJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwkJaWluZm8tPm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfcmVjdl93ciA9IGljLT5pX3JlY3ZfcmluZy53X25yOworCQlpaW5mby0+bWF4X3NlbmRfc2dlID0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCQlyZHNfaXdfZ2V0X21yX2luZm8ocmRzX2l3ZGV2LCBpaW5mbyk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfaWNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsCisJCQkJcmRzX2l3X2Nvbm5faW5mb192aXNpdG9yLAorCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uKSk7Cit9CisKKworLyoKKyAqIEVhcmx5IFJEUy9JQiB3YXMgYnVpbHQgdG8gb25seSBiaW5kIHRvIGFuIGFkZHJlc3MgaWYgdGhlcmUgaXMgYW4gSVBvSUIKKyAqIGRldmljZSB3aXRoIHRoYXQgYWRkcmVzcyBzZXQuCisgKgorICogSWYgaXQgd2VyZSBtZSwgSSdkIGFkdm9jYXRlIGZvciBzb21ldGhpbmcgbW9yZSBmbGV4aWJsZS4gIFNlbmRpbmcgYW5kCisgKiByZWNlaXZpbmcgc2hvdWxkIGJlIGRldmljZS1hZ25vc3RpYy4gIFRyYW5zcG9ydHMgd291bGQgdHJ5IGFuZCBtYWludGFpbgorICogY29ubmVjdGlvbnMgYmV0d2VlbiBwZWVycyB3aG8gaGF2ZSBtZXNzYWdlcyBxdWV1ZWQuICBVc2Vyc3BhY2Ugd291bGQgYmUKKyAqIGFsbG93ZWQgdG8gaW5mbHVlbmNlIHdoaWNoIHBhdGhzIGhhdmUgcHJpb3JpdHkuICBXZSBjb3VsZCBjYWxsIHVzZXJzcGFjZQorICogYXNzZXJ0aW5nIHRoaXMgcG9saWN5ICJyb3V0aW5nIi4KKyAqLworc3RhdGljIGludCByZHNfaXdfbGFkZHJfY2hlY2soX19iZTMyIGFkZHIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKworCS8qIENyZWF0ZSBhIENNQSBJRCBhbmQgdHJ5IHRvIGJpbmQgaXQuIFRoaXMgY2F0Y2hlcyBib3RoCisJICogSUIgYW5kIGlXQVJQIGNhcGFibGUgTklDcy4KKwkgKi8KKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKE5VTEwsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoIWNtX2lkKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHNpbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gYWRkcjsKKworCS8qIHJkbWFfYmluZF9hZGRyIHdpbGwgb25seSBzdWNjZWVkIGZvciBJQiAmIGlXQVJQIGRldmljZXMgKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihjbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOworCS8qIGR1ZSB0byB0aGlzLCB3ZSB3aWxsIGNsYWltIHRvIHN1cHBvcnQgSUIgZGV2aWNlcyB1bmxlc3Mgd2UKKwkgICBjaGVjayBub2RlX3R5cGUuICovCisJaWYgKHJldCB8fCBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpCisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCisJcmRzZGVidWcoImFkZHIgJXBJNCByZXQgJWQgbm9kZSB0eXBlICVkXG4iLAorCQkmYWRkciwgcmV0LAorCQljbV9pZC0+ZGV2aWNlID8gY21faWQtPmRldmljZS0+bm9kZV90eXBlIDogLTEpOworCisJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSVdBUlBfQ09OTkVDVElPTlMsIHJkc19pd19pY19pbmZvKTsKKwlyZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKCk7CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOworCXJkc19pd19zeXNjdGxfZXhpdCgpOworCXJkc19pd19yZWN2X2V4aXQoKTsKKwlyZHNfdHJhbnNfdW5yZWdpc3RlcigmcmRzX2l3X3RyYW5zcG9ydCk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pd190cmFuc3BvcnQgPSB7CisJLmxhZGRyX2NoZWNrCQk9IHJkc19pd19sYWRkcl9jaGVjaywKKwkueG1pdF9jb21wbGV0ZQkJPSByZHNfaXdfeG1pdF9jb21wbGV0ZSwKKwkueG1pdAkJCT0gcmRzX2l3X3htaXQsCisJLnhtaXRfY29uZ19tYXAJCT0gTlVMTCwKKwkueG1pdF9yZG1hCQk9IHJkc19pd194bWl0X3JkbWEsCisJLnJlY3YJCQk9IHJkc19pd19yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc19pd19jb25uX2FsbG9jLAorCS5jb25uX2ZyZWUJCT0gcmRzX2l3X2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19pd19jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX2l3X2Nvbm5fc2h1dGRvd24sCisJLmluY19jb3B5X3RvX3VzZXIJPSByZHNfaXdfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19pd19pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc19pd19pbmNfZnJlZSwKKwkuY21faW5pdGlhdGVfY29ubmVjdAk9IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0LAorCS5jbV9oYW5kbGVfY29ubmVjdAk9IHJkc19pd19jbV9oYW5kbGVfY29ubmVjdCwKKwkuY21fY29ubmVjdF9jb21wbGV0ZQk9IHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlLAorCS5zdGF0c19pbmZvX2NvcHkJPSByZHNfaXdfc3RhdHNfaW5mb19jb3B5LAorCS5leGl0CQkJPSByZHNfaXdfZXhpdCwKKwkuZ2V0X21yCQkJPSByZHNfaXdfZ2V0X21yLAorCS5zeW5jX21yCQk9IHJkc19pd19zeW5jX21yLAorCS5mcmVlX21yCQk9IHJkc19pd19mcmVlX21yLAorCS5mbHVzaF9tcnMJCT0gcmRzX2l3X2ZsdXNoX21ycywKKwkudF9vd25lcgkJPSBUSElTX01PRFVMRSwKKwkudF9uYW1lCQkJPSAiaXdhcnAiLAorCS50X3ByZWZlcl9sb29wYmFjawk9IDEsCit9OworCitpbnQgX19pbml0IHJkc19pd19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdfZGV2aWNlcyk7CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcmRzX2l3X3N5c2N0bF9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaWJyZWc7CisKKwlyZXQgPSByZHNfaXdfcmVjdl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3lzY3RsOworCisJcmV0ID0gcmRzX3RyYW5zX3JlZ2lzdGVyKCZyZHNfaXdfdHJhbnNwb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWN2OworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUywgcmRzX2l3X2ljX2luZm8pOworCisJZ290byBvdXQ7CisKK291dF9yZWN2OgorCXJkc19pd19yZWN2X2V4aXQoKTsKK291dF9zeXNjdGw6CisJcmRzX2l3X3N5c2N0bF9leGl0KCk7CitvdXRfaWJyZWc6CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5oIGIvbmV0L3Jkcy9pdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZGRhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3LmgKQEAgLTAsMCArMSwzOTUgQEAKKyNpZm5kZWYgX1JEU19JV19ICisjZGVmaW5lIF9SRFNfSVdfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKKyNkZWZpbmUgUkRTX0ZBU1RSRUdfU0laRQkJMjAKKyNkZWZpbmUgUkRTX0ZBU1RSRUdfUE9PTF9TSVpFCQkyMDQ4CisKKyNkZWZpbmUgUkRTX0lXX01BWF9TR0UJCQk4CisjZGVmaW5lIFJEU19JV19SRUNWX1NHRSAJCTIKKworI2RlZmluZSBSRFNfSVdfREVGQVVMVF9SRUNWX1dSCQkxMDI0CisjZGVmaW5lIFJEU19JV19ERUZBVUxUX1NFTkRfV1IJCTI1NgorCisjZGVmaW5lIFJEU19JV19TVVBQT1JURURfUFJPVE9DT0xTCTB4MDAwMDAwMDMJLyogbWlub3IgdmVyc2lvbnMgc3VwcG9ydGVkICovCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pd19kZXZpY2VzOworCisvKgorICogSUIgcG9zdHMgUkRTX0ZSQUdfU0laRSBmcmFnbWVudHMgb2YgcGFnZXMgdG8gdGhlIHJlY2VpdmUgcXVldWVzIHRvCisgKiB0cnkgYW5kIG1pbmltaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRpZWQgdXAgYm90aCB0aGUgZGV2aWNlIGFuZAorICogc29ja2V0IHJlY2VpdmUgcXVldWVzLgorICovCisvKiBwYWdlIG9mZnNldCBvZiB0aGUgZmluYWwgZnVsbCBmcmFnIHRoYXQgZml0cyBpbiB0aGUgcGFnZSAqLworI2RlZmluZSBSRFNfUEFHRV9MQVNUX09GRiAoKChQQUdFX1NJWkUgIC8gUkRTX0ZSQUdfU0laRSkgLSAxKSAqIFJEU19GUkFHX1NJWkUpCitzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyB7CisJc3RydWN0IGxpc3RfaGVhZAlmX2l0ZW07CisJc3RydWN0IHBhZ2UJCSpmX3BhZ2U7CisJdW5zaWduZWQgbG9uZwkJZl9vZmZzZXQ7CisJZG1hX2FkZHJfdCAJCWZfbWFwcGVkOworfTsKKworc3RydWN0IHJkc19pd19pbmNvbWluZyB7CisJc3RydWN0IGxpc3RfaGVhZAlpaV9mcmFnczsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCWlpX2luYzsKK307CisKK3N0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlIHsKKwkvKiBBZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLCBhbmQgZG9uJ3QgcGVybXV0ZSBleGlzdGluZyBmaWVsZHMuICovCisJX19iZTMyCQkJZHBfc2FkZHI7CisJX19iZTMyCQkJZHBfZGFkZHI7CisJdTgJCQlkcF9wcm90b2NvbF9tYWpvcjsKKwl1OAkJCWRwX3Byb3RvY29sX21pbm9yOworCV9fYmUxNgkJCWRwX3Byb3RvY29sX21pbm9yX21hc2s7IC8qIGJpdG1hc2sgKi8KKwlfX2JlMzIJCQlkcF9yZXNlcnZlZDE7CisJX19iZTY0CQkJZHBfYWNrX3NlcTsKKwlfX2JlMzIJCQlkcF9jcmVkaXQ7CQkvKiBub24temVybyBlbmFibGVzIGZsb3cgY3RsICovCit9OworCitzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0IHsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKmxpc3Q7CisJdW5zaWduZWQgaW50CQlsZW47CisJaW50CQkJZG1hX2xlbjsKKwl1bnNpZ25lZCBpbnQJCWRtYV9ucGFnZXM7CisJdW5zaWduZWQgaW50CQlieXRlczsKK307CisKK3N0cnVjdCByZHNfaXdfbWFwcGluZyB7CisJc3BpbmxvY2tfdAkJbV9sb2NrOwkvKiBwcm90ZWN0IHRoZSBtYXBwaW5nIHN0cnVjdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbV9saXN0OworCXN0cnVjdCByZHNfaXdfbXIJKm1fbXI7CisJdWludDMyX3QJCW1fcmtleTsKKwlzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0IG1fc2c7Cit9OworCitzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayB7CisJc3RydWN0IHJkc19tZXNzYWdlCSpzX3JtOworCisJLyogV2Ugc2hvdWxkIHJlYWxseSBwdXQgdGhlc2UgaW50byBhIHVuaW9uOiAqLworCXN0cnVjdCByZHNfcmRtYV9vcAkqc19vcDsKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcJKnNfbWFwcGluZzsKKwlzdHJ1Y3QgaWJfbXIJCSpzX21yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnNfcGFnZV9saXN0OworCXVuc2lnbmVkIGNoYXIJCXNfcmVtYXBfY291bnQ7CisKKwlzdHJ1Y3QgaWJfc2VuZF93cglzX3dyOworCXN0cnVjdCBpYl9zZ2UJCXNfc2dlW1JEU19JV19NQVhfU0dFXTsKKwl1bnNpZ25lZCBsb25nCQlzX3F1ZXVlZDsKK307CisKK3N0cnVjdCByZHNfaXdfcmVjdl93b3JrIHsKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nIAkqcl9pd2luYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwkqcl9mcmFnOworCXN0cnVjdCBpYl9yZWN2X3dyCXJfd3I7CisJc3RydWN0IGliX3NnZQkJcl9zZ2VbMl07Cit9OworCitzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyB7CisJdTMyCQl3X25yOworCXUzMgkJd19hbGxvY19wdHI7CisJdTMyCQl3X2FsbG9jX2N0cjsKKwl1MzIJCXdfZnJlZV9wdHI7CisJYXRvbWljX3QJd19mcmVlX2N0cjsKK307CisKK3N0cnVjdCByZHNfaXdfZGV2aWNlOworCitzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24geworCisJc3RydWN0IGxpc3RfaGVhZAlpd19ub2RlOworCXN0cnVjdCByZHNfaXdfZGV2aWNlIAkqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqY29ubjsKKworCS8qIGFscGhhYmV0IHNvdXAsIElCVEEgc3R5bGUgKi8KKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqaV9jbV9pZDsKKwlzdHJ1Y3QgaWJfcGQJCSppX3BkOworCXN0cnVjdCBpYl9tcgkJKmlfbXI7CisJc3RydWN0IGliX2NxCQkqaV9zZW5kX2NxOworCXN0cnVjdCBpYl9jcQkJKmlfcmVjdl9jcTsKKworCS8qIHR4ICovCisJc3RydWN0IHJkc19pd193b3JrX3JpbmcJaV9zZW5kX3Jpbmc7CisJc3RydWN0IHJkc19tZXNzYWdlCSppX3JtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3NlbmRfaGRyczsKKwl1NjQJCQlpX3NlbmRfaGRyc19kbWE7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmlfc2VuZHM7CisKKwkvKiByeCAqLworCXN0cnVjdCBtdXRleAkJaV9yZWN2X211dGV4OworCXN0cnVjdCByZHNfaXdfd29ya19yaW5nCWlfcmVjdl9yaW5nOworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcJKmlfaXdpbmM7CisJdTMyCQkJaV9yZWN2X2RhdGFfcmVtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3JlY3ZfaGRyczsKKwl1NjQJCQlpX3JlY3ZfaGRyc19kbWE7CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKmlfcmVjdnM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJaV9mcmFnOworCXU2NAkJCWlfYWNrX3JlY3Y7CS8qIGxhc3QgQUNLIHJlY2VpdmVkICovCisKKwkvKiBzZW5kaW5nIGFja3MgKi8KKwl1bnNpZ25lZCBsb25nCQlpX2Fja19mbGFnczsKKwl1NjQJCQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisJc3RydWN0IHJkc19oZWFkZXIJKmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyCWlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UJCWlfYWNrX3NnZTsKKwl1NjQJCQlpX2Fja19kbWE7CisJdW5zaWduZWQgbG9uZwkJaV9hY2tfcXVldWVkOworCisJLyogRmxvdyBjb250cm9sIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkgKgorCSAqIE91ciBhbGdvcml0aG0gdXNlcyBhIHBhaXIgdmFyaWFibGVzIHRoYXQgd2UgbmVlZCB0byBhY2Nlc3MKKwkgKiBhdG9taWNhbGx5IC0gb25lIGZvciB0aGUgc2VuZCBjcmVkaXRzLCBhbmQgb25lIHBvc3RlZAorCSAqIHJlY3YgY3JlZGl0cyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRvIHJlbW90ZS4KKwkgKiBSYXRoZXIgdGhhbiBwcm90ZWN0IHRoZW0gdXNpbmcgYSBzbG93IHNwaW5sb2NrLCB3ZSBwdXQgYm90aCBpbnRvCisJICogYSBzaW5nbGUgYXRvbWljX3QgYW5kIHVwZGF0ZSBpdCB1c2luZyBjbXB4Y2hnCisJICovCisJYXRvbWljX3QJCWlfY3JlZGl0czsKKworCS8qIFByb3RvY29sIHZlcnNpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWlfZmxvd2N0bDoxOwkvKiBlbmFibGUvZGlzYWJsZSBmbG93IGN0bCAqLworCXVuc2lnbmVkIGludAkJaV9kbWFfbG9jYWxfbGtleToxOworCXVuc2lnbmVkIGludAkJaV9mYXN0cmVnX3Bvc3RlZDoxOyAvKiBmYXN0cmVnIHBvc3RlZCBvbiB0aGlzIGNvbm5lY3Rpb24gKi8KKwkvKiBCYXRjaGVkIGNvbXBsZXRpb25zICovCisJdW5zaWduZWQgaW50CQlpX3Vuc2lnbmFsZWRfd3JzOworCWxvbmcJCQlpX3Vuc2lnbmFsZWRfYnl0ZXM7Cit9OworCisvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisjZGVmaW5lIElCX0dFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfR0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpID4+IDE2KQorI2RlZmluZSBJQl9TRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX1NFVF9QT1NUX0NSRURJVFModikJKCh2KSA8PCAxNikKKworc3RydWN0IHJkc19pd19jbV9pZCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCByZG1hX2NtX2lkCSpjbV9pZDsKK307CisKK3N0cnVjdCByZHNfaXdfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljbV9pZF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJY29ubl9saXN0OworCXN0cnVjdCBpYl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgaWJfcGQJCSpwZDsKKwlzdHJ1Y3QgaWJfbXIJCSptcjsKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wJKm1yX3Bvb2w7CisJaW50CQkJcGFnZV9zaGlmdDsKKwlpbnQJCQltYXhfc2dlOworCXVuc2lnbmVkIGludAkJbWF4X3dyczsKKwl1bnNpZ25lZCBpbnQJCWRtYV9sb2NhbF9sa2V5OjE7CisJc3BpbmxvY2tfdAkJc3BpbmxvY2s7CS8qIHByb3RlY3QgdGhlIGFib3ZlICovCit9OworCisvKiBiaXRzIGZvciBpX2Fja19mbGFncyAqLworI2RlZmluZSBJQl9BQ0tfSU5fRkxJR0hUCTAKKyNkZWZpbmUgSUJfQUNLX1JFUVVFU1RFRAkxCisKKy8qIE1hZ2ljIFdSX0lEIGZvciBBQ0tzICovCisjZGVmaW5lIFJEU19JV19BQ0tfV1JfSUQJKCh1NjQpMHhmZmZmZmZmZmZmZmZmZmZmVUxMKQorI2RlZmluZSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQJKCh1NjQpMHhlZmVmZWZlZmVmZWZlZmVmVUxMKQorI2RlZmluZSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lECSgodTY0KTB4ZGZkZmRmZGZkZmRmZGZkZlVMTCkKKworc3RydWN0IHJkc19pd19zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2l3X2Nvbm5lY3RfcmFjZWQ7CisJdWludDY0X3QJc19pd19saXN0ZW5fY2xvc2VkX3N0YWxlOworCXVpbnQ2NF90CXNfaXdfdHhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2l3X3R4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaXdfdHhfcmluZ19mdWxsOworCXVpbnQ2NF90CXNfaXdfdHhfdGhyb3R0bGU7CisJdWludDY0X3QJc19pd190eF9zZ19tYXBwaW5nX2ZhaWx1cmU7CisJdWludDY0X3QJc19pd190eF9zdGFsbGVkOworCXVpbnQ2NF90CXNfaXdfdHhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pd19yeF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaXdfcnhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pd19yeF9yaW5nX2VtcHR5OworCXVpbnQ2NF90CXNfaXdfcnhfcmVmaWxsX2Zyb21fY3E7CisJdWludDY0X3QJc19pd19yeF9yZWZpbGxfZnJvbV90aHJlYWQ7CisJdWludDY0X3QJc19pd19yeF9hbGxvY19saW1pdDsKKwl1aW50NjRfdAlzX2l3X3J4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbnQ7CisJdWludDY0X3QJc19pd19hY2tfc2VuZF9mYWlsdXJlOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbmRfZGVsYXllZDsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW5kX3BpZ2d5YmFja2VkOworCXVpbnQ2NF90CXNfaXdfYWNrX3JlY2VpdmVkOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9hbGxvYzsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfZnJlZTsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfdXNlZDsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfcG9vbF9mbHVzaDsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfcG9vbF93YWl0OworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX2RlcGxldGVkOworfTsKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfaXdfd3E7CisKKy8qCisgKiBGYWtlIGliX2RtYV9zeW5jX3NnX2Zvcl97Y3B1LGRldmljZX0gYXMgbG9uZyBhcyBpYl92ZXJicy5oCisgKiBkb2Vzbid0IGRlZmluZSBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUJcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9jcHUKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKKworc3RhdGljIGlubGluZSB1MzIgcmRzX2l3X2xvY2FsX2RtYV9sa2V5KHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJcmV0dXJuIGljLT5pX2RtYV9sb2NhbF9sa2V5ID8gaWMtPmlfY21faWQtPmRldmljZS0+bG9jYWxfZG1hX2xrZXkgOiBpYy0+aV9tci0+bGtleTsKK30KKworLyogaWIuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pd190cmFuc3BvcnQ7CitleHRlcm4gdm9pZCByZHNfaXdfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgcmRzX2l3X3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiBzdHJ1Y3QgaWJfY2xpZW50IHJkc19pd19jbGllbnQ7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZmFzdHJlZ19wb29sX3NpemU7CitleHRlcm4gdW5zaWduZWQgaW50IGZhc3RyZWdfbWVzc2FnZV9zaXplOworCitleHRlcm4gc3BpbmxvY2tfdCBpd19ub2Rldl9jb25uc19sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaXdfbm9kZXZfY29ubnM7CisKKy8qIGliX2NtLmMgKi8KK2ludCByZHNfaXdfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCk7Cit2b2lkIHJkc19pd19jb25uX2ZyZWUodm9pZCAqYXJnKTsKK2ludCByZHNfaXdfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKTsKK2ludCBfX2luaXQgcmRzX2l3X2xpc3Rlbl9pbml0KHZvaWQpOwordm9pZCByZHNfaXdfbGlzdGVuX3N0b3Aodm9pZCk7Cit2b2lkIF9fcmRzX2l3X2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQgcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCSAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKK2ludCByZHNfaXdfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOwordm9pZCByZHNfaXdfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworCisjZGVmaW5lIHJkc19pd19jb25uX2Vycm9yKGNvbm4sIGZtdC4uLikgXAorCV9fcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgS0VSTl9XQVJOSU5HICJSRFMvSVc6ICIgZm10KQorCisvKiBpYl9yZG1hLmMgKi8KK2ludCByZHNfaXdfdXBkYXRlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7CitpbnQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19yZW1vdmVfbm9kZXZfY29ubnModm9pZCk7Cit2b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldik7CitzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnJkc19pd19jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqKTsKK3ZvaWQgcmRzX2l3X2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKTsKK3ZvaWQgcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKik7Cit2b2lkICpyZHNfaXdfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOwordm9pZCByZHNfaXdfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyKTsKK3ZvaWQgcmRzX2l3X2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOwordm9pZCByZHNfaXdfZmx1c2hfbXJzKHZvaWQpOwordm9pZCByZHNfaXdfcmVtb3ZlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7CisKKy8qIGliX3JlY3YuYyAqLworaW50IF9faW5pdCByZHNfaXdfcmVjdl9pbml0KHZvaWQpOwordm9pZCByZHNfaXdfcmVjdl9leGl0KHZvaWQpOworaW50IHJkc19pd19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2l3X3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3Qga3B0cl9nZnAsCisJCSAgICAgICBnZnBfdCBwYWdlX2dmcCwgaW50IHByZWZpbGwpOwordm9pZCByZHNfaXdfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19pd19pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworaW50IHJkc19pd19pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaXdfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaXdfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3U2NCByZHNfaXdfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKKworLyogaWJfcmluZy5jICovCit2b2lkIHJkc19pd19yaW5nX2luaXQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit2b2lkIHJkc19pd19yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3UzMiByZHNfaXdfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpOwordm9pZCByZHNfaXdfcmluZ19mcmVlKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK3ZvaWQgcmRzX2l3X3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7CitpbnQgcmRzX2l3X3JpbmdfZW1wdHkoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpOworaW50IHJkc19pd19yaW5nX2xvdyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2l3X3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaXdfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCk7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgcmRzX2l3X3JpbmdfZW1wdHlfd2FpdDsKKworLyogaWJfc2VuZC5jICovCit2b2lkIHJkc19pd194bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2l3X3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKK3ZvaWQgcmRzX2l3X3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaXdfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7CitpbnQgcmRzX2l3X3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApOwordm9pZCByZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBjcmVkaXRzKTsKK3ZvaWQgcmRzX2l3X2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCk7CitpbnQgcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHUzMiB3YW50ZWQsCisJCQkgICAgIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCk7CisKKy8qIGliX3N0YXRzLmMgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MsIHJkc19pd19zdGF0cyk7CisjZGVmaW5lIHJkc19pd19zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19pd19zdGF0cywgbWVtYmVyKQordW5zaWduZWQgaW50IHJkc19pd19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXZhaWwpOworCisvKiBpYl9zeXNjdGwuYyAqLworaW50IF9faW5pdCByZHNfaXdfc3lzY3RsX2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19zeXNjdGxfZXhpdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb247CitleHRlcm4gdW5zaWduZWQgaW50IHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sOworZXh0ZXJuIGN0bF90YWJsZSByZHNfaXdfc3lzY3RsX3RhYmxlW107CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIGhlYWRlciBhbmQgZGF0YSBTR0VzIGluCisgKiBSRFMgcGFja2V0cyAobm90IFJETUEpCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaXdfaGVhZGVyX3NnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaXdfZGF0YV9zZ2Uoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzFdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X3NldF82NGJpdCh1NjQgKnB0ciwgdTY0IHZhbCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJKnB0ciA9IHZhbDsKKyNlbHNlCisJc2V0XzY0Yml0KHB0ciwgdmFsKTsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfY20uYyBiL25ldC9yZHMvaXdfY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2VjYjNkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19jbS5jCkBAIC0wLDAgKzEsNzUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKKy8qCisgKiBTZXQgdGhlIHNlbGVjdGVkIHByb3RvY29sIHZlcnNpb24KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9wcm90b2NvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCB2ZXJzaW9uKQoreworCWNvbm4tPmNfdmVyc2lvbiA9IHZlcnNpb247Cit9CisKKy8qCisgKiBTZXQgdXAgZmxvdyBjb250cm9sCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfZmxvd19jb250cm9sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTMyIGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAocmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wgJiYgY3JlZGl0cyAhPSAwKSB7CisJCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAqLworCQlpYy0+aV9mbG93Y3RsID0gMTsKKwkJcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0cyk7CisJfSBlbHNlIHsKKwkJaWMtPmlfZmxvd2N0bCA9IDA7CisJfQorfQorCisvKgorICogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4KKyAqIFdlIGdldCBoZXJlIGZvciBib3RoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlpbnQgZXJyOworCisJaWYgKGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4pIHsKKwkJZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisKKwkJcmRzX2l3X3NldF9wcm90b2NvbChjb25uLAorCQkJCVJEU19QUk9UT0NPTChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQkJCWRwLT5kcF9wcm90b2NvbF9taW5vcikpOworCQlyZHNfaXdfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisJfQorCisJLyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICYgY29ubiAqLworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJZXJyID0gcmRzX2l3X3VwZGF0ZV9jbV9pZChyZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pd191cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCWVyciA9IHJkc19pd19hZGRfY29ubihyZHNfaXdkZXYsIGNvbm4pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X2FkZF9jb25uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAgJiYgZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lXOiBjb25uZWN0ZWQgdG8gJXBJNDwtPiVwSTQgdmVyc2lvbiAldS4ldSVzXG4iLAorCQkJJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyLAorCQkJUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCWljLT5pX2Zsb3djdGwgPyAiLCBmbG93IGNvbnRyb2wiIDogIiIpOworCisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSwKKwkJCXN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCwKKwkJCXUzMiBwcm90b2NvbF92ZXJzaW9uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJbWVtc2V0KGNvbm5fcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtKSk7CisJLyogWFhYIHR1bmUgdGhlc2U/ICovCisJY29ubl9wYXJhbS0+cmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJY29ubl9wYXJhbS0+aW5pdGlhdG9yX2RlcHRoID0gMTsKKworCWlmIChkcCkgeworCQltZW1zZXQoZHAsIDAsIHNpemVvZigqZHApKTsKKwkJZHAtPmRwX3NhZGRyID0gY29ubi0+Y19sYWRkcjsKKwkJZHAtPmRwX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKwkJZHAtPmRwX3Byb3RvY29sX21ham9yID0gUkRTX1BST1RPQ09MX01BSk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IgPSBSRFNfUFJPVE9DT0xfTUlOT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrID0gY3B1X3RvX2JlMTYoUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFMpOworCQlkcC0+ZHBfYWNrX3NlcSA9IHJkc19pd19waWdneWJfYWNrKGljKTsKKworCQkvKiBBZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisJCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCQl1bnNpZ25lZCBpbnQgY3JlZGl0czsKKworCQkJY3JlZGl0cyA9IElCX0dFVF9QT1NUX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKTsKKwkJCWRwLT5kcF9jcmVkaXQgPSBjcHVfdG9fYmUzMihjcmVkaXRzKTsKKwkJCWF0b21pY19zdWIoSUJfU0VUX1BPU1RfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCQl9CisKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhID0gZHA7CisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gPSBzaXplb2YoKmRwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19jcV9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJcmRzZGVidWcoImV2ZW50ICV1IGRhdGEgJXBcbiIsIGV2ZW50LT5ldmVudCwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19xcF9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc2RlYnVnKCJjb25uICVwIGljICVwIGV2ZW50ICV1XG4iLCBjb25uLCBpYywgZXZlbnQtPmV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBJQl9FVkVOVF9DT01NX0VTVDoKKwkJcmRtYV9ub3RpZnkoaWMtPmlfY21faWQsIElCX0VWRU5UX0NPTU1fRVNUKTsKKwkJYnJlYWs7CisJY2FzZSBJQl9FVkVOVF9RUF9SRVFfRVJSOgorCWNhc2UgSUJfRVZFTlRfUVBfRkFUQUw6CisJZGVmYXVsdDoKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgIlJEUy9JVzogRmF0YWwgUVAgRXZlbnQgJXUgLSBjb25uZWN0aW9uICVwSTQtPiVwSTQuLi5yZWNvbm5lY3RpbmdcbiIsCisJCQlldmVudC0+ZXZlbnQsICZjb25uLT5jX2xhZGRyLAorCQkJJmNvbm4tPmNfZmFkZHIpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYSBRUAorICovCitzdGF0aWMgaW50IHJkc19pd19pbml0X3FwX2F0dHJzKHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKmF0dHIsCisJCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsCisJCXN0cnVjdCByZHNfaXdfd29ya19yaW5nICpzZW5kX3JpbmcsCisJCXZvaWQgKCpzZW5kX2NxX2hhbmRsZXIpKHN0cnVjdCBpYl9jcSAqLCB2b2lkICopLAorCQlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmVjdl9yaW5nLAorCQl2b2lkICgqcmVjdl9jcV9oYW5kbGVyKShzdHJ1Y3QgaWJfY3EgKiwgdm9pZCAqKSwKKwkJdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaXdkZXYtPmRldjsKKwl1bnNpZ25lZCBpbnQgc2VuZF9zaXplLCByZWN2X3NpemU7CisJaW50IHJldDsKKworCS8qIFRoZSBvZmZzZXQgb2YgMSBpcyB0byBhY2NvbW9kYXRlIHRoZSBhZGRpdGlvbmFsIEFDSyBXUi4gKi8KKwlzZW5kX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJkc19pd2Rldi0+bWF4X3dycywgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93ciArIDEpOworCXJlY3Zfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2l3ZGV2LT5tYXhfd3JzLCByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyICsgMSk7CisJcmRzX2l3X3JpbmdfcmVzaXplKHNlbmRfcmluZywgc2VuZF9zaXplIC0gMSk7CisJcmRzX2l3X3JpbmdfcmVzaXplKHJlY3ZfcmluZywgcmVjdl9zaXplIC0gMSk7CisKKwltZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKCphdHRyKSk7CisJYXR0ci0+ZXZlbnRfaGFuZGxlciA9IHJkc19pd19xcF9ldmVudF9oYW5kbGVyOworCWF0dHItPnFwX2NvbnRleHQgPSBjb250ZXh0OworCWF0dHItPmNhcC5tYXhfc2VuZF93ciA9IHNlbmRfc2l6ZTsKKwlhdHRyLT5jYXAubWF4X3JlY3Zfd3IgPSByZWN2X3NpemU7CisJYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSA9IHJkc19pd2Rldi0+bWF4X3NnZTsKKwlhdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0gUkRTX0lXX1JFQ1ZfU0dFOworCWF0dHItPnNxX3NpZ190eXBlID0gSUJfU0lHTkFMX1JFUV9XUjsKKwlhdHRyLT5xcF90eXBlID0gSUJfUVBUX1JDOworCisJYXR0ci0+c2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHNlbmRfY3FfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pd19jcV9ldmVudF9oYW5kbGVyLAorCQkJCSAgICAgY29udGV4dCwgc2VuZF9zaXplLCAwKTsKKwlpZiAoSVNfRVJSKGF0dHItPnNlbmRfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoYXR0ci0+c2VuZF9jcSk7CisJCWF0dHItPnNlbmRfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYXR0ci0+cmVjdl9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJlY3ZfY3FfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pd19jcV9ldmVudF9oYW5kbGVyLAorCQkJCSAgICAgY29udGV4dCwgcmVjdl9zaXplLCAwKTsKKwlpZiAoSVNfRVJSKGF0dHItPnJlY3ZfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoYXR0ci0+cmVjdl9jcSk7CisJCWF0dHItPnJlY3ZfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShhdHRyLT5zZW5kX2NxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGF0dHItPnJlY3ZfY3EsIElCX0NRX1NPTElDSVRFRCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSByZWN2IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKGF0dHItPnNlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGF0dHItPnNlbmRfY3EpOworCQlpZiAoYXR0ci0+cmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoYXR0ci0+cmVjdl9jcSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBub3QgbGVhdmUgSVNfRVJSIHBvaW50ZXJzIGFyb3VuZCBmb3IKKyAqIGNsZWFudXAgdG8gdHJpcCBvdmVyLgorICovCitzdGF0aWMgaW50IHJkc19pd19zZXR1cF9xcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyIGF0dHI7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlpbnQgcmV0OworCisJLyogcmRzX2l3X2FkZF9vbmUgY3JlYXRlcyBhIHJkc19pd19kZXZpY2Ugb2JqZWN0IHBlciBJQiBkZXZpY2UsCisJICogYW5kIGFsbG9jYXRlcyBhIHByb3RlY3Rpb24gZG9tYWluLCBtZW1vcnkgcmFuZ2UgYW5kIE1SIHBvb2wKKwkgKiBmb3IgZWFjaC4gIElmIHRoYXQgZmFpbHMgZm9yIGFueSByZWFzb24sIGl0IHdpbGwgbm90IHJlZ2lzdGVyCisJICogdGhlIHJkc19pd2RldiBhdCBhbGwuCisJICovCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldiwgJnJkc19pd19jbGllbnQpOworCWlmIChyZHNfaXdkZXYgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSVc6IE5vIGNsaWVudF9kYXRhIGZvciBkZXZpY2UgJXNcbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBQcm90ZWN0aW9uIGRvbWFpbiBhbmQgbWVtb3J5IHJhbmdlICovCisJaWMtPmlfcGQgPSByZHNfaXdkZXYtPnBkOworCWljLT5pX21yID0gcmRzX2l3ZGV2LT5tcjsKKworCXJldCA9IHJkc19pd19pbml0X3FwX2F0dHJzKCZhdHRyLCByZHNfaXdkZXYsCisJCQkmaWMtPmlfc2VuZF9yaW5nLCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIsCisJCQkmaWMtPmlfcmVjdl9yaW5nLCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIsCisJCQljb25uKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpYy0+aV9zZW5kX2NxID0gYXR0ci5zZW5kX2NxOworCWljLT5pX3JlY3ZfY3EgPSBhdHRyLnJlY3ZfY3E7CisKKwkvKgorCSAqIFhYWCB0aGlzIGNhbiBmYWlsIGlmIG1heF8qX3dyIGlzIHRvbyBsYXJnZT8gIEFyZSB3ZSBzdXBwb3NlZAorCSAqIHRvIGJhY2sgb2ZmIHVudGlsIHdlIGdldCBhIHZhbHVlIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0PworCSAqLworCXJldCA9IHJkbWFfY3JlYXRlX3FwKGljLT5pX2NtX2lkLCBpYy0+aV9wZCwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX3FwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9zZW5kX2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfc2VuZF9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBzZW5kIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3JlY3ZfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9yZWN2X2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfcmVjdl9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCByZWN2IGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX2FjayA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJICAgICAgICZpYy0+aV9hY2tfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfYWNrID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBhY2sgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZHMgPSB2bWFsbG9jKGljLT5pX3NlbmRfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaXdfc2VuZF93b3JrKSk7CisJaWYgKGljLT5pX3NlbmRzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInNlbmQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJcmRzX2l3X3NlbmRfaW5pdF9yaW5nKGljKTsKKworCWljLT5pX3JlY3ZzID0gdm1hbGxvYyhpYy0+aV9yZWN2X3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yaykpOworCWlmIChpYy0+aV9yZWN2cyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJyZWN2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3X3JlY3ZfaW5pdF9yaW5nKGljKTsKKwlyZHNfaXdfcmVjdl9pbml0X2FjayhpYyk7CisKKwkvKiBQb3N0IHJlY2VpdmUgYnVmZmVycyAtIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgd2lsbCB1cGRhdGUKKwkgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi8KKwlyZHNfaXdfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAxKTsKKworCXJkc2RlYnVnKCJjb25uICVwIHBkICVwIG1yICVwIGNxICVwICVwXG4iLCBjb25uLCBpYy0+aV9wZCwgaWMtPmlfbXIsCisJCSBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgcmRzX2l3X3Byb3RvY29sX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwKQoreworCXUxNiBjb21tb247CisJdTMyIHZlcnNpb24gPSAwOworCisJLyogcmRtYV9jbSBwcml2YXRlIGRhdGEgaXMgb2RkIC0gd2hlbiB0aGVyZSBpcyBhbnkgcHJpdmF0ZSBkYXRhIGluIHRoZQorCSAqIHJlcXVlc3QsIHdlIHdpbGwgYmUgZ2l2ZW4gYSBwcmV0dHkgbGFyZ2UgYnVmZmVyIHdpdGhvdXQgdGVsbGluZyB1cyB0aGUKKwkgKiBvcmlnaW5hbCBzaXplLiBUaGUgb25seSB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBpcyBieSBsb29raW5nIGF0CisJICogdGhlIGNvbnRlbnRzLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KKwkgKiBJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBmaWVsZHMgYXJlbid0IHNldCwgdGhpcyBpcyBhIGNvbm5lY3Rpb24gYXR0ZW1wdAorCSAqIGZyb20gYW4gb2xkZXIgdmVyc2lvbi4gVGhpcyBjb3VsZCBjb3VsZCBiZSAzLjAgb3IgMi4wIC0gd2UgY2FuJ3QgdGVsbC4KKwkgKiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgY2hhbmdlZCB0aGlzIGZvciBPRkVEIDEuMyA6LSggKi8KKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDApCisJCXJldHVybiBSRFNfUFJPVE9DT0xfM18wOworCisJY29tbW9uID0gYmUxNl90b19jcHUoZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2spICYgUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFM7CisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAzICYmIGNvbW1vbikgeworCQl2ZXJzaW9uID0gUkRTX1BST1RPQ09MXzNfMDsKKwkJd2hpbGUgKChjb21tb24gPj49IDEpICE9IDApCisJCQl2ZXJzaW9uKys7CisJfSBlbHNlIGlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFM6IENvbm5lY3Rpb24gZnJvbSAlcEk0IHVzaW5nICIKKwkJCSJpbmNvbXBhdGlibGUgcHJvdG9jb2wgdmVyc2lvbiAldS4ldVxuIiwKKwkJCSZkcC0+ZHBfc2FkZHIsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpOworCX0KKwlyZXR1cm4gdmVyc2lvbjsKK30KKworaW50IHJkc19pd19jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwljb25zdCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgZHBfcmVwOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IE5VTEw7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJdTMyIHZlcnNpb247CisJaW50IGVyciwgZGVzdHJveSA9IDE7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgcHJvdG9jb2wgdmVyc2lvbiBtYXRjaGVzIG91cnMuICovCisJdmVyc2lvbiA9IHJkc19pd19wcm90b2NvbF9jb21wYXRpYmxlKGRwKTsKKwlpZiAoIXZlcnNpb24pCisJCWdvdG8gb3V0OworCisJcmRzZGVidWcoInNhZGRyICVwSTQgZGFkZHIgJXBJNCBSRFN2JXUuJXVcbiIsCisJCSAmZHAtPmRwX3NhZGRyLCAmZHAtPmRwX2RhZGRyLAorCQkgUkRTX1BST1RPQ09MX01BSk9SKHZlcnNpb24pLCBSRFNfUFJPVE9DT0xfTUlOT1IodmVyc2lvbikpOworCisJY29ubiA9IHJkc19jb25uX2NyZWF0ZShkcC0+ZHBfZGFkZHIsIGRwLT5kcF9zYWRkciwgJnJkc19pd190cmFuc3BvcnQsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjb25uKSkgeworCQlyZHNkZWJ1ZygicmRzX2Nvbm5fY3JlYXRlIGZhaWxlZCAoJWxkKVxuIiwgUFRSX0VSUihjb25uKSk7CisJCWNvbm4gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoZSBjb25uZWN0aW9uIHJlcXVlc3QgbWF5IG9jY3VyIHdoaWxlIHRoZQorCSAqIHByZXZpb3VzIGNvbm5lY3Rpb24gZXhpc3QsIGUuZy4gaW4gY2FzZSBvZiBmYWlsb3Zlci4KKwkgKiBCdXQgYXMgY29ubmVjdGlvbnMgbWF5IGJlIGluaXRpYXRlZCBzaW11bHRhbmVvdXNseQorCSAqIGJ5IGJvdGggaG9zdHMsIHdlIGhhdmUgYSByYW5kb20gYmFja29mZiBtZWNoYW5pc20gLQorCSAqIHNlZSB0aGUgY29tbWVudCBhYm92ZSByZHNfcXVldWVfcmVjb25uZWN0KCkKKwkgKi8KKwltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJCXJkc2RlYnVnKCJpbmNvbWluZyBjb25uZWN0IHdoaWxlIGNvbm5lY3RpbmdcbiIpOworCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd19saXN0ZW5fY2xvc2VkX3N0YWxlKTsKKwkJfSBlbHNlCisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HKSB7CisJCQkvKiBXYWl0IGFuZCBzZWUgLSBvdXIgY29ubmVjdCBtYXkgc3RpbGwgYmUgc3VjY2VlZGluZyAqLworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Nvbm5lY3RfcmFjZWQpOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzX2l3X3NldF9wcm90b2NvbChjb25uLCB2ZXJzaW9uKTsKKwlyZHNfaXdfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJQlVHX09OKGNtX2lkLT5jb250ZXh0KTsKKwlCVUdfT04oaWMtPmlfY21faWQpOworCisJaWMtPmlfY21faWQgPSBjbV9pZDsKKwljbV9pZC0+Y29udGV4dCA9IGNvbm47CisKKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCWljLT5pX2RtYV9sb2NhbF9sa2V5ID0gcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleTsKKworCS8qIFdlIGdvdCBoYWxmd2F5IHRocm91Z2ggc2V0dGluZyB1cCB0aGUgaWJfY29ubmVjdGlvbiwgaWYgd2UKKwkgKiBmYWlsIG5vdywgd2UgaGF2ZSB0byB0YWtlIHRoZSBsb25nIHJvdXRlIG91dCBvZiB0aGlzIG1lc3MuICovCisJZGVzdHJveSA9IDA7CisKKwllcnIgPSByZHNfaXdfc2V0dXBfcXAoY29ubik7CisJaWYgKGVycikgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRzX2l3X3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHBfcmVwLCB2ZXJzaW9uKTsKKworCS8qIHJkbWFfYWNjZXB0KCkgY2FsbHMgcmRtYV9yZWplY3QoKSBpbnRlcm5hbGx5IGlmIGl0IGZhaWxzICovCisJZXJyID0gcmRtYV9hY2NlcHQoY21faWQsICZjb25uX3BhcmFtKTsKKwltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKGVycikgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRtYV9hY2NlcHQgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiAwOworCitvdXQ6CisJcmRtYV9yZWplY3QoY21faWQsIE5VTEwsIDApOworCXJldHVybiBkZXN0cm95OworfQorCisKK2ludCByZHNfaXdfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlIGRwOworCWludCByZXQ7CisKKwkvKiBJZiB0aGUgcGVlciBkb2Vzbid0IGRvIHByb3RvY29sIG5lZ290aWF0aW9uLCB3ZSBtdXN0CisJICogZGVmYXVsdCB0byBSRFN2My4wICovCisJcmRzX2l3X3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfM18wKTsKKwlpYy0+aV9mbG93Y3RsID0gcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2w7CS8qIGFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKworCXJldCA9IHJkc19pd19zZXR1cF9xcChjb25uKTsKKwlpZiAocmV0KSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZHNfaXdfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcCwgUkRTX1BST1RPQ09MX1ZFUlNJT04pOworCisJcmV0ID0gcmRtYV9jb25uZWN0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfY29ubmVjdCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKworb3V0OgorCS8qIEJld2FyZSAtIHJldHVybmluZyBub24temVybyB0ZWxscyB0aGUgcmRtYV9jbSB0byBkZXN0cm95CisJICogdGhlIGNtX2lkLiBXZSBzaG91bGQgY2VydGFpbmx5IG5vdCBkbyBpdCBhcyBsb25nIGFzIHdlIHN0aWxsCisJICogIm93biIgdGhlIGNtX2lkLiAqLworCWlmIChyZXQpIHsKKwkJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkJaWYgKGljLT5pX2NtX2lkID09IGNtX2lkKQorCQkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19pd19jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZGVzdDsKKwlpbnQgcmV0OworCisJLyogWFhYIEkgd29uZGVyIHdoYXQgYWZmZWN0IHRoZSBwb3J0IHNwYWNlIGhhcyAqLworCS8qIGRlbGVnYXRlIGNtIGV2ZW50IGhhbmRsZXIgdG8gcmRtYV90cmFuc3BvcnQgKi8KKwlpYy0+aV9jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihpYy0+aV9jbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX2lkKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImNyZWF0ZWQgY20gaWQgJXAgZm9yIGNvbm4gJXBcbiIsIGljLT5pX2NtX2lkLCBjb25uKTsKKworCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzcmMuc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfbGFkZHI7CisJc3JjLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKDApOworCisJLyogRmlyc3QsIGJpbmQgdG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGRldmljZS4gKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc3JjKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJyZG1hX2JpbmRfYWRkciglcEk0KSBmYWlsZWQ6ICVkXG4iLAorCQkJCSZjb25uLT5jX2xhZGRyLCByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJaWMtPmlfZG1hX2xvY2FsX2xrZXkgPSByZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5OworCisJZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlkZXN0LnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2ZhZGRyOworCWRlc3Quc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1BPUlQpOworCisJcmV0ID0gcmRtYV9yZXNvbHZlX2FkZHIoaWMtPmlfY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwKKwkJCQlSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImFkZHIgcmVzb2x2ZSBmYWlsZWQgZm9yIGNtIGlkICVwOiAlZFxuIiwgaWMtPmlfY21faWQsCisJCQkgcmV0KTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIHNvIGNhcmVmdWwgYWJvdXQgb25seSBjbGVhbmluZyB1cCByZXNvdXJjZXMgdGhhdCB3ZXJlIGJ1aWx0IHVwCisgKiBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGR1cmluZyBzdGFydHVwLiAgSW4gZmFjdCBpdAorICogY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pd19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCisJcmRzZGVidWcoImNtICVwIHBkICVwIGNxICVwICVwIHFwICVwXG4iLCBpYy0+aV9jbV9pZCwKKwkJIGljLT5pX3BkLCBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxLAorCQkgaWMtPmlfY21faWQgPyBpYy0+aV9jbV9pZC0+cXAgOiBOVUxMKTsKKworCWlmIChpYy0+aV9jbV9pZCkgeworCQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCisJCXJkc2RlYnVnKCJkaXNjb25uZWN0aW5nIGNtICVwXG4iLCBpYy0+aV9jbV9pZCk7CisJCWVyciA9IHJkbWFfZGlzY29ubmVjdChpYy0+aV9jbV9pZCk7CisJCWlmIChlcnIpIHsKKwkJCS8qIEFjdHVhbGx5IHRoaXMgbWF5IGhhcHBlbiBxdWl0ZSBmcmVxdWVudGx5LCB3aGVuCisJCQkgKiBhbiBvdXRnb2luZyBjb25uZWN0IHJhY2VkIHdpdGggYW4gaW5jb21pbmcgY29ubmVjdC4KKwkJCSAqLworCQkJcmRzZGVidWcoInJkc19pd19jb25uX3NodXRkb3duOiBmYWlsZWQgdG8gZGlzY29ubmVjdCwiCisJCQkJICAgIiBjbTogJXAgZXJyICVkXG4iLCBpYy0+aV9jbV9pZCwgZXJyKTsKKwkJfQorCisJCWlmIChpYy0+aV9jbV9pZC0+cXApIHsKKwkJCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfRVJSOworCQkJaWJfbW9kaWZ5X3FwKGljLT5pX2NtX2lkLT5xcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKKwkJfQorCisJCXdhaXRfZXZlbnQocmRzX2l3X3JpbmdfZW1wdHlfd2FpdCwKKwkJCXJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9zZW5kX3JpbmcpICYmCisJCQlyZHNfaXdfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSk7CisKKwkJaWYgKGljLT5pX3NlbmRfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfcmVjdl9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnMsCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9hY2spCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICAgaWMtPmlfYWNrLCBpYy0+aV9hY2tfZG1hKTsKKworCQlpZiAoaWMtPmlfc2VuZHMpCisJCQlyZHNfaXdfc2VuZF9jbGVhcl9yaW5nKGljKTsKKwkJaWYgKGljLT5pX3JlY3ZzKQorCQkJcmRzX2l3X3JlY3ZfY2xlYXJfcmluZyhpYyk7CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYy0+aV9jbV9pZCk7CisJCWlmIChpYy0+aV9zZW5kX2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9zZW5kX2NxKTsKKwkJaWYgKGljLT5pX3JlY3ZfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3JlY3ZfY3EpOworCisJCS8qCisJCSAqIElmIGFzc29jaWF0ZWQgd2l0aCBhbiByZHNfaXdfZGV2aWNlOgorCQkgKiAJTW92ZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhlIG5vZGV2IGxpc3QuCisJCSAqIAlSZW1vdmUgY21faWQgZnJvbSB0aGUgZGV2aWNlIGNtX2lkIGxpc3QuCisJCSAqLworCQlpZiAoaWMtPnJkc19pd2RldikgeworCisJCQlzcGluX2xvY2tfaXJxKCZpYy0+cmRzX2l3ZGV2LT5zcGlubG9jayk7CisJCQlCVUdfT04obGlzdF9lbXB0eSgmaWMtPml3X25vZGUpKTsKKwkJCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJCQlzcGluX3VubG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCQkJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJml3X25vZGV2X2Nvbm5zKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJCQlyZHNfaXdfcmVtb3ZlX2NtX2lkKGljLT5yZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKKwkJCWljLT5yZHNfaXdkZXYgPSBOVUxMOworCQl9CisKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCWljLT5pX3BkID0gTlVMTDsKKwkJaWMtPmlfbXIgPSBOVUxMOworCQlpYy0+aV9zZW5kX2NxID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9jcSA9IE5VTEw7CisJCWljLT5pX3NlbmRfaGRycyA9IE5VTEw7CisJCWljLT5pX3JlY3ZfaGRycyA9IE5VTEw7CisJCWljLT5pX2FjayA9IE5VTEw7CisJfQorCUJVR19PTihpYy0+cmRzX2l3ZGV2KTsKKworCS8qIENsZWFyIHBlbmRpbmcgdHJhbnNtaXQgKi8KKwlpZiAoaWMtPmlfcm0pIHsKKwkJcmRzX21lc3NhZ2VfcHV0KGljLT5pX3JtKTsKKwkJaWMtPmlfcm0gPSBOVUxMOworCX0KKworCS8qIENsZWFyIHRoZSBBQ0sgc3RhdGUgKi8KKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2l3X3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIDApOworCWljLT5pX2Fja19yZWN2ID0gMDsKKworCS8qIENsZWFyIGZsb3cgY29udHJvbCBzdGF0ZSAqLworCWljLT5pX2Zsb3djdGwgPSAwOworCWF0b21pY19zZXQoJmljLT5pX2NyZWRpdHMsIDApOworCisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWYgKGljLT5pX2l3aW5jKSB7CisJCXJkc19pbmNfcHV0KCZpYy0+aV9pd2luYy0+aWlfaW5jKTsKKwkJaWMtPmlfaXdpbmMgPSBOVUxMOworCX0KKworCXZmcmVlKGljLT5pX3NlbmRzKTsKKwlpYy0+aV9zZW5kcyA9IE5VTEw7CisJdmZyZWUoaWMtPmlfcmVjdnMpOworCWljLT5pX3JlY3ZzID0gTlVMTDsKKwlyZHNkZWJ1Zygic2h1dGRvd24gY29tcGxldGVcbiIpOworfQorCitpbnQgcmRzX2l3X2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogWFhYIHRvbyBsYXp5PyAqLworCWljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19pd19jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmljLT5pd19ub2RlKTsKKwltdXRleF9pbml0KCZpYy0+aV9yZWN2X211dGV4KTsKKworCS8qCisJICogcmRzX2l3X2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5CisJICogbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXQgY2FuIGJlIGNhbGxlZC4KKwkgKi8KKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGljOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJml3X25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJml3X25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpd19ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisKKworCXJkc2RlYnVnKCJjb25uICVwIGNvbm4gaWMgJXBcbiIsIGNvbm4sIGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pd19jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBhcmc7CisJcmRzZGVidWcoImljICVwXG4iLCBpYyk7CisJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlrZnJlZShpYyk7Cit9CisKKy8qCisgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgorICovCit2b2lkCitfX3Jkc19pd19jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXJkc19jb25uX2Ryb3AoY29ubik7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JkbWEuYyBiL25ldC9yZHMvaXdfcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDJhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JkbWEuYwpAQCAtMCwwICsxLDg4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaXcuaCIKKworCisvKgorICogVGhpcyBpcyBzdG9yZWQgYXMgbXItPnJfdHJhbnNfcHJpdmF0ZS4KKyAqLworc3RydWN0IHJkc19pd19tciB7CisJc3RydWN0IHJkc19pd19kZXZpY2UJKmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wJKnBvb2w7CisJc3RydWN0IHJkbWFfY21faWQJKmNtX2lkOworCisJc3RydWN0IGliX21yCSptcjsKKwlzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpwYWdlX2xpc3Q7CisKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcJbWFwcGluZzsKKwl1bnNpZ25lZCBjaGFyCQlyZW1hcF9jb3VudDsKK307CisKKy8qCisgKiBPdXIgb3duIGxpdHRsZSBNUiBwb29sCisgKi8KK3N0cnVjdCByZHNfaXdfbXJfcG9vbCB7CisJc3RydWN0IHJkc19pd19kZXZpY2UJKmRldmljZTsJCS8qIGJhY2sgcHRyIHRvIHRoZSBkZXZpY2UgdGhhdCBvd25zIHVzICovCisKKwlzdHJ1Y3QgbXV0ZXgJCWZsdXNoX2xvY2s7CQkvKiBzZXJpYWxpemUgZm1yIGludmFsaWRhdGUgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZmx1c2hfd29ya2VyOwkJLyogZmx1c2ggd29ya2VyICovCisKKwlzcGlubG9ja190CQlsaXN0X2xvY2s7CQkvKiBwcm90ZWN0IHZhcmlhYmxlcyBiZWxvdyAqLworCWF0b21pY190CQlpdGVtX2NvdW50OwkJLyogdG90YWwgIyBvZiBNUnMgKi8KKwlhdG9taWNfdAkJZGlydHlfY291bnQ7CQkvKiAjIGRpcnR5IG9mIE1ScyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGlydHlfbGlzdDsJCS8qIGRpcnR5IG1hcHBpbmdzICovCisJc3RydWN0IGxpc3RfaGVhZAljbGVhbl9saXN0OwkJLyogdW51c2VkICYgdW5hbWFwcGVkIE1ScyAqLworCWF0b21pY190CQlmcmVlX3Bpbm5lZDsJCS8qIG1lbW9yeSBwaW5uZWQgYnkgZnJlZSBNUnMgKi8KKwl1bnNpZ25lZCBsb25nCQltYXhfbWVzc2FnZV9zaXplOwkvKiBpbiBwYWdlcyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtczsKKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXNfc29mdDsKKwl1bnNpZ25lZCBsb25nCQltYXhfZnJlZV9waW5uZWQ7CisJaW50CQkJbWF4X3BhZ2VzOworfTsKKworc3RhdGljIGludCByZHNfaXdfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCk7CitzdGF0aWMgdm9pZCByZHNfaXdfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIHN0cnVjdCByZHNfaXdfbXIgKmlibXIpOworc3RhdGljIGludCByZHNfaXdfbWFwX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJICBzdHJ1Y3QgcmRzX2l3X21yICppYm1yLAorCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMpOworc3RhdGljIHZvaWQgcmRzX2l3X2ZyZWVfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIHN0cnVjdCByZHNfaXdfbXIgKmlibXIpOworc3RhdGljIHVuc2lnbmVkIGludCByZHNfaXdfdW5tYXBfZmFzdHJlZ19saXN0KHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnVubWFwX2xpc3QsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpraWxsX2xpc3QpOworc3RhdGljIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIHN0cnVjdCByZHNfaXdfbXIgKmlibXIpOworCitzdGF0aWMgaW50IHJkc19pd19nZXRfZGV2aWNlKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfaXdfZGV2aWNlICoqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqKmNtX2lkKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICppd2RldjsKKwlzdHJ1Y3QgcmRzX2l3X2NtX2lkICppX2NtX2lkOworCisJKnJkc19pd2RldiA9IE5VTEw7CisJKmNtX2lkID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXdkZXYsICZyZHNfaXdfZGV2aWNlcywgbGlzdCkgeworCQlzcGluX2xvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlfY21faWQsICZpd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzcmNfYWRkciwgKmRzdF9hZGRyOworCisJCQlzcmNfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaV9jbV9pZC0+Y21faWQtPnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJCQlkc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaV9jbV9pZC0+Y21faWQtPnJvdXRlLmFkZHIuZHN0X2FkZHI7CisKKwkJCXJkc2RlYnVnKCJsb2NhbCBpcGFkZHIgPSAleCBwb3J0ICVkLCAiCisJCQkJICJyZW1vdGUgaXBhZGRyID0gJXggcG9ydCAlZCIKKwkJCQkgIi4ubG9va2luZyBmb3IgJXggcG9ydCAlZCwgIgorCQkJCSAicmVtb3RlIGlwYWRkciA9ICV4IHBvcnQgJWRcbiIsCisJCQkJc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciwKKwkJCQlzcmNfYWRkci0+c2luX3BvcnQsCisJCQkJZHN0X2FkZHItPnNpbl9hZGRyLnNfYWRkciwKKwkJCQlkc3RfYWRkci0+c2luX3BvcnQsCisJCQkJcnMtPnJzX2JvdW5kX2FkZHIsCisJCQkJcnMtPnJzX2JvdW5kX3BvcnQsCisJCQkJcnMtPnJzX2Nvbm5fYWRkciwKKwkJCQlycy0+cnNfY29ubl9wb3J0KTsKKyNpZmRlZiBXT1JLSU5HX1RVUExFX0RFVEVDVElPTgorCQkJaWYgKHNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2JvdW5kX2FkZHIgJiYKKwkJCSAgICBzcmNfYWRkci0+c2luX3BvcnQgPT0gcnMtPnJzX2JvdW5kX3BvcnQgJiYKKwkJCSAgICBkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyID09IHJzLT5yc19jb25uX2FkZHIgJiYKKwkJCSAgICBkc3RfYWRkci0+c2luX3BvcnQgPT0gcnMtPnJzX2Nvbm5fcG9ydCkgeworI2Vsc2UKKwkJCS8qIEZJWE1FIC0gbmVlZHMgdG8gY29tcGFyZSB0aGUgbG9jYWwgYW5kIHJlbW90ZQorCQkJICogaXBhZGRyL3BvcnQgdHVwbGUsIGJ1dCB0aGUgaXBhZGRyIGlzIHRoZSBvbmx5CisJCQkgKiBhdmFpbGFibGUgaW5mb21hdGlvbiBpbiB0aGUgcmRzX3NvY2sgKGFzIHRoZSByZXN0IGFyZQorCQkJICogemVybydlZC4gIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHByb3Blcmx5IHBvcHVsYXRlZAorCQkJICogZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuLi4KKwkJCSAqLworCQkJaWYgKHNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2JvdW5kX2FkZHIpIHsKKyNlbmRpZgorCQkJCXNwaW5fdW5sb2NrX2lycSgmaXdkZXYtPnNwaW5sb2NrKTsKKwkJCQkqcmRzX2l3ZGV2ID0gaXdkZXY7CisJCQkJKmNtX2lkID0gaV9jbV9pZC0+Y21faWQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJkc19pd19hZGRfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwlpX2NtX2lkID0ga21hbGxvYyhzaXplb2YgKmlfY21faWQsIEdGUF9LRVJORUwpOworCWlmICghaV9jbV9pZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpX2NtX2lkLT5jbV9pZCA9IGNtX2lkOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaV9jbV9pZC0+bGlzdCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pd19yZW1vdmVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlfY21faWQsICZyZHNfaXdkZXYtPmNtX2lkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlfY21faWQtPmNtX2lkID09IGNtX2lkKSB7CisJCQlsaXN0X2RlbCgmaV9jbV9pZC0+bGlzdCk7CisJCQlrZnJlZShpX2NtX2lkKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7Cit9CisKKworaW50IHJkc19pd191cGRhdGVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjX2FkZHIsICpkc3RfYWRkcjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2X29sZDsKKwlzdHJ1Y3QgcmRzX3NvY2sgcnM7CisJc3RydWN0IHJkbWFfY21faWQgKnBjbV9pZDsKKwlpbnQgcmM7CisKKwlzcmNfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY21faWQtPnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJZHN0X2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmNtX2lkLT5yb3V0ZS5hZGRyLmRzdF9hZGRyOworCisJcnMucnNfYm91bmRfYWRkciA9IHNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisJcnMucnNfYm91bmRfcG9ydCA9IHNyY19hZGRyLT5zaW5fcG9ydDsKKwlycy5yc19jb25uX2FkZHIgPSBkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyOworCXJzLnJzX2Nvbm5fcG9ydCA9IGRzdF9hZGRyLT5zaW5fcG9ydDsKKworCXJjID0gcmRzX2l3X2dldF9kZXZpY2UoJnJzLCAmcmRzX2l3ZGV2X29sZCwgJnBjbV9pZCk7CisJaWYgKHJjKQorCQlyZHNfaXdfcmVtb3ZlX2NtX2lkKHJkc19pd2RldiwgY21faWQpOworCisJcmV0dXJuIHJkc19pd19hZGRfY21faWQocmRzX2l3ZGV2LCBjbV9pZCk7Cit9CisKK2ludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogY29ubiB3YXMgcHJldmlvdXNseSBvbiB0aGUgbm9kZXZfY29ubnNfbGlzdCAqLworCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCUJVR19PTihsaXN0X2VtcHR5KCZpd19ub2Rldl9jb25ucykpOworCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOworCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlpYy0+cmRzX2l3ZGV2ID0gcmRzX2l3ZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwlsaXN0X3NwbGljZSgmaXdfbm9kZXZfY29ubnMsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJml3X25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaXdfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3Rfc3BsaWNlKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X3NjYXR0ZXJsaXN0KHN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgKnNnLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBzZ19sZW4pCit7CisJc2ctPmxpc3QgPSBsaXN0OworCXNnLT5sZW4gPSBzZ19sZW47CisJc2ctPmRtYV9sZW4gPSAwOworCXNnLT5kbWFfbnBhZ2VzID0gMDsKKwlzZy0+Ynl0ZXMgPSAwOworfQorCitzdGF0aWMgdTY0ICpyZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsCisJCQlzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0ICpzZywKKwkJCXVuc2lnbmVkIGludCBkbWFfcGFnZV9zaGlmdCkKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaXdkZXYtPmRldjsKKwl1NjQgKmRtYV9wYWdlcyA9IE5VTEw7CisJdTY0IGRtYV9tYXNrOworCXVuc2lnbmVkIGludCBkbWFfcGFnZV9zaXplOworCWludCBpLCBqLCByZXQ7CisKKwlkbWFfcGFnZV9zaXplID0gMSA8PCBkbWFfcGFnZV9zaGlmdDsKKwlkbWFfbWFzayA9IGRtYV9wYWdlX3NpemUgLSAxOworCisJV0FSTl9PTihzZy0+ZG1hX2xlbik7CisKKwlzZy0+ZG1hX2xlbiA9IGliX2RtYV9tYXBfc2coZGV2LCBzZy0+bGlzdCwgc2ctPmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICh1bmxpa2VseSghc2ctPmRtYV9sZW4pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogZG1hX21hcF9zZyBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwlzZy0+Ynl0ZXMgPSAwOworCXNnLT5kbWFfbnBhZ2VzID0gMDsKKworCXJldCA9IC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IHNnLT5kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZW5kX2FkZHI7CisKKwkJc2ctPmJ5dGVzICs9IGRtYV9sZW47CisKKwkJZW5kX2FkZHIgPSBkbWFfYWRkciArIGRtYV9sZW47CisJCWlmIChkbWFfYWRkciAmIGRtYV9tYXNrKSB7CisJCQlpZiAoaSA+IDApCisJCQkJZ290byBvdXRfdW5tYXA7CisJCQlkbWFfYWRkciAmPSB+ZG1hX21hc2s7CisJCX0KKwkJaWYgKGVuZF9hZGRyICYgZG1hX21hc2spIHsKKwkJCWlmIChpIDwgc2ctPmRtYV9sZW4gLSAxKQorCQkJCWdvdG8gb3V0X3VubWFwOworCQkJZW5kX2FkZHIgPSAoZW5kX2FkZHIgKyBkbWFfbWFzaykgJiB+ZG1hX21hc2s7CisJCX0KKworCQlzZy0+ZG1hX25wYWdlcyArPSAoZW5kX2FkZHIgLSBkbWFfYWRkcikgPj4gZG1hX3BhZ2Vfc2hpZnQ7CisJfQorCisJLyogTm93IGdhdGhlciB0aGUgZG1hIGFkZHJzIGludG8gb25lIGxpc3QgKi8KKwlpZiAoc2ctPmRtYV9ucGFnZXMgPiBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSkKKwkJZ290byBvdXRfdW5tYXA7CisKKwlkbWFfcGFnZXMgPSBrbWFsbG9jKHNpemVvZih1NjQpICogc2ctPmRtYV9ucGFnZXMsIEdGUF9BVE9NSUMpOworCWlmICghZG1hX3BhZ2VzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubWFwOworCX0KKworCWZvciAoaSA9IGogPSAwOyBpIDwgc2ctPmRtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBlbmRfYWRkcjsKKworCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKKwkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOworCQlmb3IgKDsgZG1hX2FkZHIgPCBlbmRfYWRkcjsgZG1hX2FkZHIgKz0gZG1hX3BhZ2Vfc2l6ZSkKKwkJCWRtYV9wYWdlc1tqKytdID0gZG1hX2FkZHI7CisJCUJVR19PTihqID4gc2ctPmRtYV9ucGFnZXMpOworCX0KKworCXJldHVybiBkbWFfcGFnZXM7CisKK291dF91bm1hcDoKKwlpYl9kbWFfdW5tYXBfc2cocmRzX2l3ZGV2LT5kZXYsIHNnLT5saXN0LCBzZy0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJc2ctPmRtYV9sZW4gPSAwOworCWtmcmVlKGRtYV9wYWdlcyk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworCitzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnJkc19pd19jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KQoreworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbDsKKworCXBvb2wgPSBremFsbG9jKHNpemVvZigqcG9vbCksIEdGUF9LRVJORUwpOworCWlmICghcG9vbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IHJkc19pd19jcmVhdGVfbXJfcG9vbCBhbGxvYyBlcnJvclxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXBvb2wtPmRldmljZSA9IHJkc19pd2RldjsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZGlydHlfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmNsZWFuX2xpc3QpOworCW11dGV4X2luaXQoJnBvb2wtPmZsdXNoX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwb29sLT5saXN0X2xvY2spOworCUlOSVRfV09SSygmcG9vbC0+Zmx1c2hfd29ya2VyLCByZHNfaXdfbXJfcG9vbF9mbHVzaF93b3JrZXIpOworCisJcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSA9IGZhc3RyZWdfbWVzc2FnZV9zaXplOworCXBvb2wtPm1heF9pdGVtcyA9IGZhc3RyZWdfcG9vbF9zaXplOworCXBvb2wtPm1heF9mcmVlX3Bpbm5lZCA9IHBvb2wtPm1heF9pdGVtcyAqIHBvb2wtPm1heF9tZXNzYWdlX3NpemUgLyA0OworCXBvb2wtPm1heF9wYWdlcyA9IGZhc3RyZWdfbWVzc2FnZV9zaXplOworCisJLyogV2UgbmV2ZXIgYWxsb3cgbW9yZSB0aGFuIG1heF9pdGVtcyBNUnMgdG8gYmUgYWxsb2NhdGVkLgorCSAqIFdoZW4gd2UgZXhjZWVkIG1vcmUgdGhhbiBtYXhfaXRlbXNfc29mdCwgd2Ugc3RhcnQgZnJlZWluZworCSAqIGl0ZW1zIG1vcmUgYWdncmVzc2l2ZWx5LgorCSAqIE1ha2Ugc3VyZSB0aGF0IG1heF9pdGVtcyA+IG1heF9pdGVtc19zb2Z0ID4gbWF4X2l0ZW1zIC8gMgorCSAqLworCXBvb2wtPm1heF9pdGVtc19zb2Z0ID0gcG9vbC0+bWF4X2l0ZW1zICogMyAvIDQ7CisKKwlyZXR1cm4gcG9vbDsKK30KKwordm9pZCByZHNfaXdfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gcmRzX2l3ZGV2LT5tcl9wb29sOworCisJaWluZm8tPnJkbWFfbXJfbWF4ID0gcG9vbC0+bWF4X2l0ZW1zOworCWlpbmZvLT5yZG1hX21yX3NpemUgPSBwb29sLT5tYXhfcGFnZXM7Cit9CisKK3ZvaWQgcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wpCit7CisJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CisJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkpOworCWtmcmVlKHBvb2wpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfaXdfbXIgKnJkc19pd19yZXVzZV9mbXIoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwb29sLT5jbGVhbl9saXN0KSkgeworCQlpYm1yID0gbGlzdF9lbnRyeShwb29sLT5jbGVhbl9saXN0Lm5leHQsIHN0cnVjdCByZHNfaXdfbXIsIG1hcHBpbmcubV9saXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBpYm1yOworfQorCitzdGF0aWMgc3RydWN0IHJkc19pd19tciAqcmRzX2l3X2FsbG9jX21yKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gcmRzX2l3ZGV2LT5tcl9wb29sOworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBOVUxMOworCWludCBlcnIgPSAwLCBpdGVyID0gMDsKKworCXdoaWxlICgxKSB7CisJCWlibXIgPSByZHNfaXdfcmV1c2VfZm1yKHBvb2wpOworCQlpZiAoaWJtcikKKwkJCXJldHVybiBpYm1yOworCisJCS8qIE5vIGNsZWFuIE1ScyAtIG5vdyB3ZSBoYXZlIHRoZSBjaG9pY2Ugb2YgZWl0aGVyCisJCSAqIGFsbG9jYXRpbmcgYSBmcmVzaCBNUiB1cCB0byB0aGUgbGltaXQgaW1wb3NlZCBieSB0aGUKKwkJICogZHJpdmVyLCBvciBmbHVzaCBhbnkgZGlydHkgdW51c2VkIE1Scy4KKwkJICogV2UgdHJ5IHRvIGF2b2lkIHN0YWxsaW5nIGluIHRoZSBzZW5kIHBhdGggaWYgcG9zc2libGUsCisJCSAqIHNvIHdlIGFsbG9jYXRlIGFzIGxvbmcgYXMgd2UncmUgYWxsb3dlZCB0by4KKwkJICoKKwkJICogV2UncmUgZnVzc3kgd2l0aCBlbmZvcmNpbmcgdGhlIEZNUiBsaW1pdCwgdGhvdWdoLiBJZiB0aGUgZHJpdmVyCisJCSAqIHRlbGxzIHVzIHdlIGNhbid0IHVzZSBtb3JlIHRoYW4gTiBmbXJzLCB3ZSBzaG91bGRuJ3Qgc3RhcnQKKwkJICogYXJndWluZyB3aXRoIGl0ICovCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmcG9vbC0+aXRlbV9jb3VudCkgPD0gcG9vbC0+bWF4X2l0ZW1zKQorCQkJYnJlYWs7CisKKwkJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisKKwkJaWYgKCsraXRlciA+IDIpIHsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX3Bvb2xfZGVwbGV0ZWQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJCX0KKworCQkvKiBXZSBkbyBoYXZlIHNvbWUgZW1wdHkgTVJzLiBGbHVzaCB0aGVtIG91dC4gKi8KKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF93YWl0KTsKKwkJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorCisJaWJtciA9IGt6YWxsb2Moc2l6ZW9mKCppYm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpYm1yKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX2NpZ2FyOworCX0KKworCXNwaW5fbG9ja19pbml0KCZpYm1yLT5tYXBwaW5nLm1fbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmlibXItPm1hcHBpbmcubV9saXN0KTsKKwlpYm1yLT5tYXBwaW5nLm1fbXIgPSBpYm1yOworCisJZXJyID0gcmRzX2l3X2luaXRfZmFzdHJlZyhwb29sLCBpYm1yKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ub19jaWdhcjsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX2FsbG9jKTsKKwlyZXR1cm4gaWJtcjsKKworb3V0X25vX2NpZ2FyOgorCWlmIChpYm1yKSB7CisJCXJkc19pd19kZXN0cm95X2Zhc3RyZWcocG9vbCwgaWJtcik7CisJCWtmcmVlKGlibXIpOworCX0KKwlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCit2b2lkIHJkc19pd19zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiA9IGlibXItPmRldmljZTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9jcHUocmRzX2l3ZGV2LT5kZXYsIGlibXItPm1hcHBpbmcubV9zZy5saXN0LAorCQkJaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHJkc19pd2Rldi0+ZGV2LCBpYm1yLT5tYXBwaW5nLm1fc2cubGlzdCwKKwkJCWlibXItPm1hcHBpbmcubV9zZy5kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmRzX2l3X2ZsdXNoX2dvYWwoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJdW5zaWduZWQgaW50IGl0ZW1fY291bnQ7CisKKwlpdGVtX2NvdW50ID0gYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpOworCWlmIChmcmVlX2FsbCkKKwkJcmV0dXJuIGl0ZW1fY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZsdXNoIG91ciBwb29sIG9mIE1Scy4KKyAqIEF0IGEgbWluaW11bSwgYWxsIGN1cnJlbnRseSB1bnVzZWQgTVJzIGFyZSB1bm1hcHBlZC4KKyAqIElmIHRoZSBudW1iZXIgb2YgTVJzIGFsbG9jYXRlZCBleGNlZWRzIHRoZSBsaW1pdCwgd2UgYWxzbyB0cnkKKyAqIHRvIGZyZWUgYXMgbWFueSBNUnMgYXMgbmVlZGVkIHRvIGdldCBiYWNrIHRvIHRoaXMgbGltaXQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciwgKm5leHQ7CisJTElTVF9IRUFEKHVubWFwX2xpc3QpOworCUxJU1RfSEVBRChraWxsX2xpc3QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5mcmVlZCA9IDAsIG5jbGVhbmVkID0gMCwgZnJlZV9nb2FsOworCWludCByZXQgPSAwOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF9mbHVzaCk7CisKKwltdXRleF9sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgYWxsIG1hcHBpbmdzIHRvIGJlIGRlc3Ryb3llZCAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmRpcnR5X2xpc3QsICZ1bm1hcF9saXN0KTsKKwlpZiAoZnJlZV9hbGwpCisJCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmNsZWFuX2xpc3QsICZraWxsX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJZnJlZV9nb2FsID0gcmRzX2l3X2ZsdXNoX2dvYWwocG9vbCwgZnJlZV9hbGwpOworCisJLyogQmF0Y2hlZCBpbnZhbGlkYXRlIG9mIGRpcnR5IE1Scy4KKwkgKiBGb3IgRk1SIGJhc2VkIE1ScywgdGhlIG1hcHBpbmdzIG9uIHRoZSB1bm1hcCBsaXN0IGFyZQorCSAqIGFjdHVhbGx5IG1lbWJlcnMgb2YgYW4gaWJtciAoaWJtci0+bWFwcGluZykuIFRoZXkgZWl0aGVyCisJICogbWlncmF0ZSB0byB0aGUga2lsbF9saXN0LCBvciBoYXZlIGJlZW4gY2xlYW5lZCBhbmQgc2hvdWxkIGJlCisJICogbW92ZWQgdG8gdGhlIGNsZWFuX2xpc3QuCisJICogRm9yIGZhc3RyZWdzLCB0aGV5IHdpbGwgYmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBhbmQKKwkgKiB3aWxsIGJlIGRlc3Ryb3llZCBieSB0aGUgdW5tYXAgZnVuY3Rpb24uCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkgeworCQluY2xlYW5lZCA9IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3QocG9vbCwgJnVubWFwX2xpc3QsICZraWxsX2xpc3QpOworCQkvKiBJZiB3ZSd2ZSBiZWVuIGFza2VkIHRvIGRlc3Ryb3kgYWxsIE1ScywgbW92ZSB0aG9zZQorCQkgKiB0aGF0IHdlcmUgc2ltcGx5IGNsZWFuZWQgdG8gdGhlIGtpbGwgbGlzdCAqLworCQlpZiAoZnJlZV9hbGwpCisJCQlsaXN0X3NwbGljZV9pbml0KCZ1bm1hcF9saXN0LCAma2lsbF9saXN0KTsKKwl9CisKKwkvKiBEZXN0cm95IGFueSBNUnMgdGhhdCBhcmUgcGFzdCB0aGVpciBiZXN0IGJlZm9yZSBkYXRlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlibXIsIG5leHQsICZraWxsX2xpc3QsIG1hcHBpbmcubV9saXN0KSB7CisJCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX2ZyZWUpOworCQlsaXN0X2RlbCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCQlyZHNfaXdfZGVzdHJveV9mYXN0cmVnKHBvb2wsIGlibXIpOworCQlrZnJlZShpYm1yKTsKKwkJbmZyZWVkKys7CisJfQorCisJLyogQW55dGhpbmcgdGhhdCByZW1haW5zIGFyZSBsYXVuZGVyZWQgaWJtcnMsIHdoaWNoIHdlIGNhbiBhZGQKKwkgKiBiYWNrIHRvIHRoZSBjbGVhbiBsaXN0LiAqLworCWlmICghbGlzdF9lbXB0eSgmdW5tYXBfbGlzdCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCQlsaXN0X3NwbGljZSgmdW5tYXBfbGlzdCwgJnBvb2wtPmNsZWFuX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlhdG9taWNfc3ViKG5jbGVhbmVkLCAmcG9vbC0+ZGlydHlfY291bnQpOworCWF0b21pY19zdWIobmZyZWVkLCAmcG9vbC0+aXRlbV9jb3VudCk7CisKKwltdXRleF91bmxvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfaXdfbXJfcG9vbCwgZmx1c2hfd29ya2VyKTsKKworCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworfQorCit2b2lkIHJkc19pd19mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IGlibXItPmRldmljZS0+bXJfcG9vbDsKKworCXJkc2RlYnVnKCJSRFMvSVc6IGZyZWVfbXIgbmVudHMgJXVcbiIsIGlibXItPm1hcHBpbmcubV9zZy5sZW4pOworCWlmICghcG9vbCkKKwkJcmV0dXJuOworCisJLyogUmV0dXJuIGl0IHRvIHRoZSBwb29sJ3MgZnJlZSBsaXN0ICovCisJcmRzX2l3X2ZyZWVfZmFzdHJlZyhwb29sLCBpYm1yKTsKKworCS8qIElmIHdlJ3ZlIHBpbm5lZCB0b28gbWFueSBwYWdlcywgcmVxdWVzdCBhIGZsdXNoICovCisJaWYgKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkgPj0gcG9vbC0+bWF4X2ZyZWVfcGlubmVkCisJIHx8IGF0b21pY19yZWFkKCZwb29sLT5kaXJ0eV9jb3VudCkgPj0gcG9vbC0+bWF4X2l0ZW1zIC8gMTApCisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKworCWlmIChpbnZhbGlkYXRlKSB7CisJCWlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpKSkgeworCQkJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgdXNlciBjcmVhdGVkIGEgTVIgbWFya2VkCisJCQkgKiBhcyB1c2Vfb25jZSBhbmQgaW52YWxpZGF0ZSBhdCB0aGUgc2FtZSB0aW1lLiAqLworCQkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19pd19mbHVzaF9tcnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZHNfaXdkZXYsICZyZHNfaXdfZGV2aWNlcywgbGlzdCkgeworCQlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisKKwkJaWYgKHBvb2wpCisJCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9Cit9CisKK3ZvaWQgKnJkc19pd19nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBOVUxMOworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX2l3X2dldF9kZXZpY2UocnMsICZyZHNfaXdkZXYsICZjbV9pZCk7CisJaWYgKHJldCB8fCAhY21faWQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZHNfaXdkZXYtPm1yX3Bvb2wpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWJtciA9IHJkc19pd19hbGxvY19tcihyZHNfaXdkZXYpOworCWlmIChJU19FUlIoaWJtcikpCisJCXJldHVybiBpYm1yOworCisJaWJtci0+Y21faWQgPSBjbV9pZDsKKwlpYm1yLT5kZXZpY2UgPSByZHNfaXdkZXY7CisKKwlyZXQgPSByZHNfaXdfbWFwX2Zhc3RyZWcocmRzX2l3ZGV2LT5tcl9wb29sLCBpYm1yLCBzZywgbmVudHMpOworCWlmIChyZXQgPT0gMCkKKwkJKmtleV9yZXQgPSBpYm1yLT5tci0+cmtleTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogZmFpbGVkIHRvIG1hcCBtciAoZXJybm89JWQpXG4iLCByZXQpOworCitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoaWJtcikKKwkJCXJkc19pd19mcmVlX21yKGlibXIsIDApOworCQlpYm1yID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gaWJtcjsKK30KKworLyoKKyAqIGlXQVJQIGZhc3RyZWcgaGFuZGxpbmcKKyAqCisgKiBUaGUgbGlmZSBjeWNsZSBvZiBhIGZhc3RyZWcgcmVnaXN0cmF0aW9uIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tCisgKiBGTVJzLgorICogVGhlIGlkZWEgYmVoaW5kIGZhc3RyZWcgaXMgdG8gaGF2ZSBvbmUgTVIsIHRvIHdoaWNoIHdlIGJpbmQgZGlmZmVyZW50CisgKiBtYXBwaW5ncyBvdmVyIHRpbWUuIFRvIGF2b2lkIHN0YWxsaW5nIG9uIHRoZSBleHBlbnNpdmUgbWFwIGFuZCBpbnZhbGlkYXRlCisgKiBvcGVyYXRpb25zLCB0aGVzZSBvcGVyYXRpb25zIGFyZSBwaXBlbGluZWQgb24gdGhlIHNhbWUgc2VuZCBxdWV1ZSBvbgorICogd2hpY2ggd2Ugd2FudCB0byBzZW5kIHRoZSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJfa2V5LgorICoKKyAqIFRoaXMgY3JlYXRlcyBhIGJpdCBvZiBhIHByb2JsZW0gZm9yIHVzLCBhcyB3ZSBkbyBub3QgaGF2ZSB0aGUgZGVzdGluYXRpb24KKyAqIElQIGluIEdFVF9NUiwgc28gdGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBzZXR1cCBwcmlvciB0byB0aGUgR0VUX01SIGNhbGwgZm9yCisgKiBSRE1BIHRvIGJlIGNvcnJlY3RseSBzZXR1cC4gIElmIGEgZmFzdHJlZyByZXF1ZXN0IGlzIHByZXNlbnQsIHJkc19pd194bWl0CisgKiB3aWxsIHRyeSB0byBxdWV1ZSBhIExPQ0FMX0lOViAoaWYgbmVlZGVkKSBhbmQgYSBGQVNUX1JFR19NUiB3b3JrIHJlcXVlc3QKKyAqIGJlZm9yZSBxdWV1aW5nIHRoZSBTRU5ELiBXaGVuIGNvbXBsZXRpb25zIGZvciB0aGVzZSBhcnJpdmUsIHRoZXkgYXJlCisgKiBkaXNwYXRjaGVkIHRvIHRoZSBNUiBoYXMgYSBiaXQgc2V0IHNob3dpbmcgdGhhdCBSRE1hIGNhbiBiZSBwZXJmb3JtZWQuCisgKgorICogVGhlcmUgaXMgYW5vdGhlciBpbnRlcmVzdGluZyBhc3BlY3QgdGhhdCdzIHJlbGF0ZWQgdG8gaW52YWxpZGF0aW9uLgorICogVGhlIGFwcGxpY2F0aW9uIGNhbiByZXF1ZXN0IHRoYXQgYSBtYXBwaW5nIGlzIGludmFsaWRhdGVkIGluIEZSRUVfTVIuCisgKiBUaGUgZXhwZWN0YXRpb24gdGhlcmUgaXMgdGhhdCB0aGlzIGludmFsaWRhdGlvbiBzdGVwIGluY2x1ZGVzIEFMTAorICogUFJFVklPVVNMWSBGUkVFRCBNUnMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkJc3RydWN0IHJkc19pd19tciAqaWJtcikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gcG9vbC0+ZGV2aWNlOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBhZ2VfbGlzdCA9IE5VTEw7CisJc3RydWN0IGliX21yICptcjsKKwlpbnQgZXJyOworCisJbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcihyZHNfaXdkZXYtPnBkLCBwb29sLT5tYXhfbWVzc2FnZV9zaXplKTsKKwlpZiAoSVNfRVJSKG1yKSkgeworCQllcnIgPSBQVFJfRVJSKG1yKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX21yIGZhaWxlZCAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBGSVhNRSAtIHRoaXMgaXMgb3ZlcmtpbGwsIGJ1dCBtYXBwaW5nLT5tX3NnLmRtYV9sZW4vbWFwcGluZy0+bV9zZy5kbWFfbnBhZ2VzCisJICogaXMgbm90IGZpbGxlZCBpbi4KKwkgKi8KKwlwYWdlX2xpc3QgPSBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QocmRzX2l3ZGV2LT5kZXYsIHBvb2wtPm1heF9tZXNzYWdlX3NpemUpOworCWlmIChJU19FUlIocGFnZV9saXN0KSkgeworCQllcnIgPSBQVFJfRVJSKHBhZ2VfbGlzdCk7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlpYl9kZXJlZ19tcihtcik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWJtci0+cGFnZV9saXN0ID0gcGFnZV9saXN0OworCWlibXItPm1yID0gbXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JkbWFfYnVpbGRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21hcHBpbmcgKm1hcHBpbmcpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IG1hcHBpbmctPm1fbXI7CisJc3RydWN0IGliX3NlbmRfd3IgZl93ciwgKmZhaWxlZF93cjsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBQZXJmb3JtIGEgV1IgZm9yIHRoZSBmYXN0X3JlZ19tci4gRWFjaCBpbmRpdmlkdWFsIHBhZ2UKKwkgKiBpbiB0aGUgc2cgbGlzdCBpcyBhZGRlZCB0byB0aGUgZmFzdCByZWcgcGFnZSBsaXN0IGFuZCBwbGFjZWQKKwkgKiBpbnNpZGUgdGhlIGZhc3RfcmVnX21yIFdSLiAgVGhlIGtleSB1c2VkIGlzIGEgcm9sbGluZyA4Yml0CisJICogY291bnRlciwgd2hpY2ggc2hvdWxkIGd1YXJhbnRlZSB1bmlxdWVuZXNzLgorCSAqLworCWliX3VwZGF0ZV9mYXN0X3JlZ19rZXkoaWJtci0+bXIsIGlibXItPnJlbWFwX2NvdW50KyspOworCW1hcHBpbmctPm1fcmtleSA9IGlibXItPm1yLT5ya2V5OworCisJbWVtc2V0KCZmX3dyLCAwLCBzaXplb2YoZl93cikpOworCWZfd3Iud3JfaWQgPSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQ7CisJZl93ci5vcGNvZGUgPSBJQl9XUl9GQVNUX1JFR19NUjsKKwlmX3dyLndyLmZhc3RfcmVnLmxlbmd0aCA9IG1hcHBpbmctPm1fc2cuYnl0ZXM7CisJZl93ci53ci5mYXN0X3JlZy5ya2V5ID0gbWFwcGluZy0+bV9ya2V5OworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gaWJtci0+cGFnZV9saXN0OworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0X2xlbiA9IG1hcHBpbmctPm1fc2cuZG1hX2xlbjsKKwlmX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBpYm1yLT5kZXZpY2UtPnBhZ2Vfc2hpZnQ7CisJZl93ci53ci5mYXN0X3JlZy5hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAorCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURTsKKwlmX3dyLndyLmZhc3RfcmVnLmlvdmFfc3RhcnQgPSAwOworCWZfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlmYWlsZWRfd3IgPSAmZl93cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWJtci0+Y21faWQtPnFwLCAmZl93ciwgJmZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZl93cik7CisJaWYgKHJldCAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogJXM6JWQgaWJfcG9zdF9zZW5kIHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JkbWFfZmFzdHJlZ19pbnYoc3RydWN0IHJkc19pd19tciAqaWJtcikKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciBzX3dyLCAqZmFpbGVkX3dyOworCWludCByZXQgPSAwOworCisJaWYgKCFpYm1yLT5jbV9pZC0+cXAgfHwgIWlibXItPm1yKQorCQlnb3RvIG91dDsKKworCW1lbXNldCgmc193ciwgMCwgc2l6ZW9mKHNfd3IpKTsKKwlzX3dyLndyX2lkID0gUkRTX0lXX0xPQ0FMX0lOVl9XUl9JRDsKKwlzX3dyLm9wY29kZSA9IElCX1dSX0xPQ0FMX0lOVjsKKwlzX3dyLmV4LmludmFsaWRhdGVfcmtleSA9IGlibXItPm1yLT5ya2V5OworCXNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlmYWlsZWRfd3IgPSAmc193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWJtci0+Y21faWQtPnFwLCAmc193ciwgJmZhaWxlZF93cik7CisJaWYgKHJldCAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiAlczolZCBpYl9wb3N0X3NlbmQgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19pd19tYXBfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yLAorCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCXVuc2lnbmVkIGludCBzZ19sZW4pCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiA9IHBvb2wtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcgKm1hcHBpbmcgPSAmaWJtci0+bWFwcGluZzsKKwl1NjQgKmRtYV9wYWdlczsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXJkc19pd19zZXRfc2NhdHRlcmxpc3QoJm1hcHBpbmctPm1fc2csIHNnLCBzZ19sZW4pOworCisJZG1hX3BhZ2VzID0gcmRzX2l3X21hcF9zY2F0dGVybGlzdChyZHNfaXdkZXYsCisJCQkJJm1hcHBpbmctPm1fc2csCisJCQkJcmRzX2l3ZGV2LT5wYWdlX3NoaWZ0KTsKKwlpZiAoSVNfRVJSKGRtYV9wYWdlcykpIHsKKwkJcmV0ID0gUFRSX0VSUihkbWFfcGFnZXMpOworCQlkbWFfcGFnZXMgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobWFwcGluZy0+bV9zZy5kbWFfbGVuID4gcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSkgeworCQlyZXQgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtYXBwaW5nLT5tX3NnLmRtYV9ucGFnZXM7ICsraSkKKwkJaWJtci0+cGFnZV9saXN0LT5wYWdlX2xpc3RbaV0gPSBkbWFfcGFnZXNbaV07CisKKwlyZXQgPSByZHNfaXdfcmRtYV9idWlsZF9mYXN0cmVnKG1hcHBpbmcpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfdXNlZCk7CisKK291dDoKKwlrZnJlZShkbWFfcGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICJGcmVlIiBhIGZhc3RyZWcgTVIuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19mcmVlX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWlmICghaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4pCisJCXJldHVybjsKKworCXJldCA9IHJkc19pd19yZG1hX2Zhc3RyZWdfaW52KGlibXIpOworCWlmIChyZXQpCisJCXJldHVybjsKKworCS8qIFRyeSB0byBwb3N0IHRoZSBMT0NBTF9JTlYgV1IgdG8gdGhlIHF1ZXVlLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoJmlibXItPm1hcHBpbmcubV9saXN0LCAmcG9vbC0+ZGlydHlfbGlzdCk7CisJYXRvbWljX2FkZChpYm1yLT5tYXBwaW5nLm1fc2cubGVuLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCWF0b21pY19pbmMoJnBvb2wtPmRpcnR5X2NvdW50KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3Qoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnVubWFwX2xpc3QsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqa2lsbF9saXN0KQoreworCXN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZywgKm5leHQ7CisJdW5zaWduZWQgaW50IG5jbGVhbmVkID0gMDsKKwlMSVNUX0hFQUQobGF1bmRlcmVkKTsKKworCS8qIEJhdGNoZWQgaW52YWxpZGF0aW9uIG9mIGZhc3RyZWcgTVJzLgorCSAqIFdoeSBkbyB3ZSBkbyBpdCB0aGlzIHdheSwgZXZlbiB0aG91Z2ggd2UgY291bGQgcGlwZWxpbmUgdW5tYXAKKwkgKiBhbmQgcmVtYXA/IFRoZSByZWFzb24gaXMgdGhlIGFwcGxpY2F0aW9uIHNlbWFudGljcyAtIHdoZW4gdGhlCisJICogYXBwbGljYXRpb24gcmVxdWVzdHMgYW4gaW52YWxpZGF0aW9uIG9mIE1ScywgaXQgZXhwZWN0cyBhbGwKKwkgKiBwcmV2aW91c2x5IHJlbGVhc2VkIFJfS2V5cyB0byBiZWNvbWUgaW52YWxpZC4KKwkgKgorCSAqIElmIHdlIGltcGxlbWVudCBNUiByZXVzZSBuYWl2ZWx5LCB3ZSByaXNrIG1lbW9yeSBjb3JydXB0aW9uCisJICogKHRoaXMgaGFzIGFjdHVhbGx5IGJlZW4gb2JzZXJ2ZWQpLiBTbyB0aGUgZGVmYXVsdCBiZWhhdmlvcgorCSAqIHJlcXVpcmVzIHRoYXQgYSBNUiBnb2VzIHRocm91Z2ggYW4gZXhwbGljaXQgdW5tYXAgb3BlcmF0aW9uIGJlZm9yZQorCSAqIHdlIGNhbiByZXVzZSBpdCBhZ2Fpbi4KKwkgKgorCSAqIFdlIGNvdWxkIHByb2JhYmx5IGltcHJvdmUgb24gdGhpcyBhIGxpdHRsZSwgYnkgYWxsb3dpbmcgaW1tZWRpYXRlCisJICogcmV1c2Ugb2YgYSBNUiBvbiB0aGUgc2FtZSBzb2NrZXQgKGVnIHlvdSBjb3VsZCBhZGQgc21hbGwKKwkgKiBjYWNoZSBvZiB1bnVzZWQgTVJzIHRvIHN0cmN0IHJkc19zb2NrZXQgLSBHRVRfTVIgY291bGQgZ3JhYiBvbmUKKwkgKiBvZiB0aGVzZSB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBpbnZhbGlkYXRlKS4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkodW5tYXBfbGlzdCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXBwaW5nLCBuZXh0LCB1bm1hcF9saXN0LCBtX2xpc3QpIHsKKwkJCWxpc3RfbW92ZSgmbWFwcGluZy0+bV9saXN0LCAmbGF1bmRlcmVkKTsKKwkJCW5jbGVhbmVkKys7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJfQorCisJLyogTW92ZSBhbGwgbGF1bmRlcmVkIG1hcHBpbmdzIGJhY2sgdG8gdGhlIHVubWFwIGxpc3QuCisJICogV2UgZG8gbm90IGtpbGwgYW55IFdScyByaWdodCBub3cgLSBpdCBkb2Vzbid0IHNlZW0gdGhlCisJICogZmFzdHJlZyBBUEkgaGFzIGEgbWF4X3JlbWFwIGxpbWl0LiAqLworCWxpc3Rfc3BsaWNlX2luaXQoJmxhdW5kZXJlZCwgdW5tYXBfbGlzdCk7CisKKwlyZXR1cm4gbmNsZWFuZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19kZXN0cm95X2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCWlmIChpYm1yLT5wYWdlX2xpc3QpCisJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KGlibXItPnBhZ2VfbGlzdCk7CisJaWYgKGlibXItPm1yKQorCQlpYl9kZXJlZ19tcihpYm1yLT5tcik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JlY3YuYyBiL25ldC9yZHMvaXdfcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTMxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JlY3YuYwpAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2l3X2luY29taW5nX3NsYWI7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pd19mcmFnX3NsYWI7CitzdGF0aWMgYXRvbWljX3QJcmRzX2l3X2FsbG9jYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIHZvaWQgcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJX19mcmVlX3BhZ2UoZnJhZy0+Zl9wYWdlKTsKKwlmcmFnLT5mX3BhZ2UgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfZnJhZ19mcmVlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJQlVHX09OKGZyYWctPmZfcGFnZSAhPSBOVUxMKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2l3X2ZyYWdfc2xhYiwgZnJhZyk7Cit9CisKKy8qCisgKiBXZSBtYXAgYSBwYWdlIGF0IGEgdGltZS4gIEl0cyBmcmFnbWVudHMgYXJlIHBvc3RlZCBpbiBvcmRlci4gIFRoaXMKKyAqIGlzIGNhbGxlZCBpbiBmcmFnbWVudCBvcmRlciBhcyB0aGUgZnJhZ21lbnRzIGdldCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgorICogT25seSB0aGUgbGFzdCBmcmFnIGluIHRoZSBwYWdlIHBlcmZvcm1zIHRoZSB1bm1hcHBpbmcuCisgKgorICogSXQncyBPSyBmb3IgcmluZyBjbGVhbnVwIHRvIGNhbGwgdGhpcyBpbiB3aGF0ZXZlciBvcmRlciBpdCBsaWtlcyBiZWNhdXNlCisgKiBETUEgaXMgbm90IGluIGZsaWdodCBhbmQgc28gd2UgY2FuIHVubWFwIHdoaWxlIG90aGVyIHJpbmcgZW50cmllcyBzdGlsbAorICogaG9sZCBwYWdlIHJlZmVyZW5jZXMgaW4gdGhlaXIgZnJhZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19yZWN2X3VubWFwX3BhZ2Uoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdikKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZyA9IHJlY3YtPnJfZnJhZzsKKworCXJkc2RlYnVnKCJyZWN2ICVwIGZyYWcgJXAgcGFnZSAlcFxuIiwgcmVjdiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlpZiAoZnJhZy0+Zl9tYXBwZWQpCisJCWliX2RtYV91bm1hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkgICAgICAgZnJhZy0+Zl9tYXBwZWQsCisJCQkgICAgICAgUkRTX0ZSQUdfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlmcmFnLT5mX21hcHBlZCA9IDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3Y7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCByZWN2ID0gaWMtPmlfcmVjdnM7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrLCByZWN2KyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJCXJlY3YtPnJfd3IubmV4dCA9IE5VTEw7CisJCXJlY3YtPnJfd3Iud3JfaWQgPSBpOworCQlyZWN2LT5yX3dyLnNnX2xpc3QgPSByZWN2LT5yX3NnZTsKKwkJcmVjdi0+cl93ci5udW1fc2dlID0gUkRTX0lXX1JFQ1ZfU0dFOworCisJCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSAwOworCQlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19yZWN2X2NsZWFyX29uZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YpCit7CisJaWYgKHJlY3YtPnJfaXdpbmMpIHsKKwkJcmRzX2luY19wdXQoJnJlY3YtPnJfaXdpbmMtPmlpX2luYyk7CisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCX0KKwlpZiAocmVjdi0+cl9mcmFnKSB7CisJCXJkc19pd19yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCQlpZiAocmVjdi0+cl9mcmFnLT5mX3BhZ2UpCisJCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmRzX2l3X2ZyYWdfZnJlZShyZWN2LT5yX2ZyYWcpOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCX0KK30KKwordm9pZCByZHNfaXdfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKykKKwkJcmRzX2l3X3JlY3ZfY2xlYXJfb25lKGljLCAmaWMtPmlfcmVjdnNbaV0pOworCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlKQorCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UoJmljLT5pX2ZyYWcpOworfQorCitzdGF0aWMgaW50IHJkc19pd19yZWN2X3JlZmlsbF9vbmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YsCisJCQkJICBnZnBfdCBrcHRyX2dmcCwgZ2ZwX3QgcGFnZV9nZnApCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpZiAocmVjdi0+cl9pd2luYyA9PSBOVUxMKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcmRzX2l3X2FsbG9jYXRpb24pID49IHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbikgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2FsbG9jX2xpbWl0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlY3YtPnJfaXdpbmMgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pd19pbmNvbWluZ19zbGFiLAorCQkJCQkJIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfaXdpbmMgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlhdG9taWNfaW5jKCZyZHNfaXdfYWxsb2NhdGlvbik7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2l3aW5jLT5paV9mcmFncyk7CisJCXJkc19pbmNfaW5pdCgmcmVjdi0+cl9pd2luYy0+aWlfaW5jLCBjb25uLCBjb25uLT5jX2ZhZGRyKTsKKwl9CisKKwlpZiAocmVjdi0+cl9mcmFnID09IE5VTEwpIHsKKwkJcmVjdi0+cl9mcmFnID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfaXdfZnJhZ19zbGFiLCBrcHRyX2dmcCk7CisJCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlJTklUX0xJU1RfSEVBRCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0pOworCQlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IE5VTEw7CisJfQorCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpIHsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBhbGxvY19wYWdlKHBhZ2VfZ2ZwKTsKKwkJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJZG1hX2FkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkgIGljLT5pX2ZyYWcuZl9wYWdlLAorCQkJCSAgaWMtPmlfZnJhZy5mX29mZnNldCwKKwkJCQkgIFJEU19GUkFHX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBkbWFfYWRkcikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBPbmNlIHdlIGdldCB0aGUgUkRTX1BBR0VfTEFTVF9PRkYgZnJhZyB0aGVuIHJkc19pd19mcmFnX3VubWFwKCkKKwkgKiBtdXN0IGJlIGNhbGxlZCBvbiB0aGlzIHJlY3YuICBUaGlzIGhhcHBlbnMgYXMgY29tcGxldGlvbnMgaGl0CisJICogaW4gb3JkZXIgb3Igb24gY29ubmVjdGlvbiBzaHV0ZG93bi4KKwkgKi8KKwlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IGljLT5pX2ZyYWcuZl9wYWdlOworCXJlY3YtPnJfZnJhZy0+Zl9vZmZzZXQgPSBpYy0+aV9mcmFnLmZfb2Zmc2V0OworCXJlY3YtPnJfZnJhZy0+Zl9tYXBwZWQgPSBkbWFfYWRkcjsKKworCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCXNnZS0+YWRkciA9IGRtYV9hZGRyOworCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKworCXNnZSA9IHJkc19pd19oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChyZWN2IC0gaWMtPmlfcmVjdnMpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlnZXRfcGFnZShyZWN2LT5yX2ZyYWctPmZfcGFnZSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX29mZnNldCA8IFJEU19QQUdFX0xBU1RfT0ZGKSB7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgKz0gUkRTX0ZSQUdfU0laRTsKKwl9IGVsc2UgeworCQlwdXRfcGFnZShpYy0+aV9mcmFnLmZfcGFnZSk7CisJCWljLT5pX2ZyYWcuZl9wYWdlID0gTlVMTDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyB0cmllcyB0byBhbGxvY2F0ZSBhbmQgcG9zdCB1bnVzZWQgd29yayByZXF1ZXN0cyBhZnRlciBtYWtpbmcgc3VyZSB0aGF0CisgKiB0aGV5IGhhdmUgYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5IG5lZWQgdG8gcXVldWUgcmVjZWl2ZWQgZnJhZ21lbnRzIGludG8KKyAqIHNvY2tldHMuICBUaGUgaV9yZWN2X211dGV4IGlzIGhlbGQgaGVyZSBzbyB0aGF0IHJpbmdfYWxsb2MgYW5kIF91bmFsbG9jCisgKiBwYWlycyBkb24ndCBnbyB1bm1hdGNoZWQuCisgKgorICogLTEgaXMgcmV0dXJuZWQgaWYgcG9zdGluZyBmYWlscyBkdWUgdG8gdGVtcG9yYXJ5IHJlc291cmNlIGV4aGF1c3Rpb24uCisgKi8KK2ludCByZHNfaXdfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKwlzdHJ1Y3QgaWJfcmVjdl93ciAqZmFpbGVkX3dyOworCXVuc2lnbmVkIGludCBwb3N0ZWQgPSAwOworCWludCByZXQgPSAwOworCXUzMiBwb3M7CisKKwl3aGlsZSAoKHByZWZpbGwgfHwgcmRzX2Nvbm5fdXAoY29ubikpCisJCQkmJiByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfcmVjdl9yaW5nLCAxLCAmcG9zKSkgeworCQlpZiAocG9zID49IGljLT5pX3JlY3ZfcmluZy53X25yKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZ2ggLSByaW5nIGFsbG9jIHJldHVybmVkIHBvcz0ldVxuIiwKKwkJCQkJcG9zKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcG9zXTsKKwkJcmV0ID0gcmRzX2l3X3JlY3ZfcmVmaWxsX29uZShjb25uLCByZWN2LCBrcHRyX2dmcCwgcGFnZV9nZnApOworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogWFhYIHdoZW4gY2FuIHRoaXMgZmFpbD8gKi8KKwkJcmV0ID0gaWJfcG9zdF9yZWN2KGljLT5pX2NtX2lkLT5xcCwgJnJlY3YtPnJfd3IsICZmYWlsZWRfd3IpOworCQlyZHNkZWJ1ZygicmVjdiAlcCBpd2luYyAlcCBwYWdlICVwIGFkZHIgJWx1IHJldCAlZFxuIiwgcmVjdiwKKwkJCSByZWN2LT5yX2l3aW5jLCByZWN2LT5yX2ZyYWctPmZfcGFnZSwKKwkJCSAobG9uZykgcmVjdi0+cl9mcmFnLT5mX21hcHBlZCwgcmV0KTsKKwkJaWYgKHJldCkgeworCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgcG9zdCBvbiAiCisJCQkgICAgICAgIiVwSTQgcmV0dXJuZWQgJWQsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCSAgICAgICByZXQpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXBvc3RlZCsrOworCX0KKworCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAtIHVwZGF0ZSB0aGUgd2luZG93LiAqLworCWlmIChpYy0+aV9mbG93Y3RsICYmIHBvc3RlZCkKKwkJcmRzX2l3X2FkdmVydGlzZV9jcmVkaXRzKGNvbm4sIHBvc3RlZCk7CisKKwlpZiAocmV0KQorCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKnBvczsKKworCWl3aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pd19pbmNvbWluZywgaWlfaW5jKTsKKwlyZHNkZWJ1ZygicHVyZ2luZyBpd2luYyAlcCBpbmMgJXBcbiIsIGl3aW5jLCBpbmMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZyYWcsIHBvcywgJml3aW5jLT5paV9mcmFncywgZl9pdGVtKSB7CisJCWxpc3RfZGVsX2luaXQoJmZyYWctPmZfaXRlbSk7CisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShmcmFnKTsKKwkJcmRzX2l3X2ZyYWdfZnJlZShmcmFnKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2l3X2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYzsKKworCWl3aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pd19pbmNvbWluZywgaWlfaW5jKTsKKworCXJkc19pd19pbmNfcHVyZ2UoaW5jKTsKKwlyZHNkZWJ1ZygiZnJlZWluZyBpd2luYyAlcCBpbmMgJXBcbiIsIGl3aW5jLCBpbmMpOworCUJVR19PTighbGlzdF9lbXB0eSgmaXdpbmMtPmlpX2ZyYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pd19pbmNvbWluZ19zbGFiLCBpd2luYyk7CisJYXRvbWljX2RlYygmcmRzX2l3X2FsbG9jYXRpb24pOworCUJVR19PTihhdG9taWNfcmVhZCgmcmRzX2l3X2FsbG9jYXRpb24pIDwgMCk7Cit9CisKK2ludCByZHNfaXdfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXN0cnVjdCBpb3ZlYyAqaW92ID0gZmlyc3RfaW92OworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmYgPSAwOworCWludCBjb3BpZWQgPSAwOworCWludCByZXQ7CisJdTMyIGxlbjsKKworCWl3aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pd19pbmNvbWluZywgaWlfaW5jKTsKKwlmcmFnID0gbGlzdF9lbnRyeShpd2luYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJbGVuID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisKKwl3aGlsZSAoY29waWVkIDwgc2l6ZSAmJiBjb3BpZWQgPCBsZW4pIHsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJCXdoaWxlIChpb3Zfb2ZmID09IGlvdi0+aW92X2xlbikgeworCQkJaW92X29mZiA9IDA7CisJCQlpb3YrKzsKKwkJfQorCisJCXRvX2NvcHkgPSBtaW4oaW92LT5pb3ZfbGVuIC0gaW92X29mZiwgUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCIlbHUgYnl0ZXMgdG8gdXNlciBbJXAsICV6dV0gKyAlbHUgZnJvbSBmcmFnICIKKwkJCSAiWyVwLCAlbHVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSBmcmFnLT5mX3BhZ2UsIGZyYWctPmZfb2Zmc2V0LCBmcmFnX29mZik7CisKKwkJLyogWFhYIG5lZWRzICsgb2Zmc2V0IGZvciBtdWx0aXBsZSByZWN2cyBwZXIgcGFnZSAqLworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoZnJhZy0+Zl9wYWdlLAorCQkJCQkgICAgZnJhZy0+Zl9vZmZzZXQgKyBmcmFnX29mZiwKKwkJCQkJICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgdG9fY29weSk7CisJCWlmIChyZXQpIHsKKwkJCWNvcGllZCA9IHJldDsKKwkJCWJyZWFrOworCQl9CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQljb3BpZWQgKz0gdG9fY29weTsKKwl9CisKKwlyZXR1cm4gY29waWVkOworfQorCisvKiBpYyBzdGFydHMgb3V0IGt6YWxsb2MoKWVkICovCit2b2lkIHJkc19pd19yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IGliX3NlbmRfd3IgKndyID0gJmljLT5pX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2UgPSAmaWMtPmlfYWNrX3NnZTsKKworCXNnZS0+YWRkciA9IGljLT5pX2Fja19kbWE7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7CisKKwl3ci0+c2dfbGlzdCA9IHNnZTsKKwl3ci0+bnVtX3NnZSA9IDE7CisJd3ItPm9wY29kZSA9IElCX1dSX1NFTkQ7CisJd3ItPndyX2lkID0gUkRTX0lXX0FDS19XUl9JRDsKKwl3ci0+c2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKK30KKworLyoKKyAqIFlvdSdkIHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZCB0byBhY2sKKyAqIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQiBoYXJkd2FyZSBnZW5lcmF0ZXMKKyAqIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYQorICogcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdAorICogc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYQorICogcG90ZW50aWFsIGlzc3VlIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorICoKKyAqIFdoZW4gdGhlIHJlbW90ZSBob3N0IHJlY2VpdmVzIG91ciBhY2sgdGhleSdsbCBmcmVlIHRoZSBzZW50IG1lc3NhZ2UgZnJvbQorICogdGhlaXIgc2VuZCBxdWV1ZS4gIFRvIGRlY3JlYXNlIHRoZSBsYXRlbmN5IG9mIHRoaXMgd2UgYWx3YXlzIHNlbmQgYW4gYWNrCisgKiBpbW1lZGlhdGVseSBhZnRlciB3ZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBoYXZlIG9uZSBhY2sgaW4gZmxpZ2h0IGF0IGEgdGltZS4gIFRoaXMgcHV0cworICogcHJlc3N1cmUgb24gc2VuZGVycyB0byBoYXZlIGRlZXAgZW5vdWdoIHNlbmQgcXVldWVzIHRvIGFic29yYiB0aGUgbGF0ZW5jeSBvZgorICogYSBzaW5nbGUgYWNrIGZyYW1lIGJlaW5nIGluIGZsaWdodC4gIFRoaXMgbWlnaHQgbm90IGJlIGdvb2QgZW5vdWdoLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2ZSBhIGxvbmctbGl2ZWQgc2VuZF93ciBhbmQgc2dlIHdoaWNoIHBvaW50IHRvIGEKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFjayBmcmFtZS4gIFRoaXMgYWNrIHdyIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJpbmcKKyAqIGFjY291bnRpbmcgdGhhdCB0aGUgdHggYW5kIHJ4IHdycyBkby4gIFRoZSBRUCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IG1ha2VzCisgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCisgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwlpZiAoYWNrX3JlcXVpcmVkKSB7CisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHU2NCByZHNfaXdfZ2V0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJcmV0dXJuIGljLT5pX2Fja19uZXh0OworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSBpYy0+aV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwl1NjQgc2VxOworCWludCByZXQ7CisKKwlzZXEgPSByZHNfaXdfZ2V0X2FjayhpYyk7CisKKwlyZHNkZWJ1Zygic2VuZF9hY2s6IGljICVwIGFjayAlbGx1XG4iLCBpYywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VxKTsKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoaGRyLCAwLCAwLCAwKTsKKwloZHItPmhfYWNrID0gY3B1X3RvX2JlNjQoc2VxKTsKKwloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCWljLT5pX2Fja19xdWV1ZWQgPSBqaWZmaWVzOworCisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmljLT5pX2Fja193ciwgJmZhaWxlZF93cik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJLyogRmFpbGVkIHRvIHNlbmQuIFJlbGVhc2UgdGhlIFdSLCBhbmQKKwkJICogZm9yY2UgYW5vdGhlciBBQ0suCisJCSAqLworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX2ZhaWx1cmUpOworCQkvKiBOZWVkIHRvIGZpbmVzc2UgdGhpcyBsYXRlci4gKi8KKwkJQlVHKCk7CisJfSBlbHNlCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfc2VudCk7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgMyB3YXlzIG9mIGdldHRpbmcgYWNrbm93bGVkZ2VtZW50cyB0byB0aGUgcGVlcjoKKyAqICAxLglXZSBjYWxsIHJkc19pd19hdHRlbXB0X2FjayBmcm9tIHRoZSByZWN2IGNvbXBsZXRpb24gaGFuZGxlcgorICoJdG8gc2VuZCBhbiBBQ0stb25seSBmcmFtZS4KKyAqCUhvd2V2ZXIsIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoIGZyYW1lIGluIHRoZSBzZW5kIHF1ZXVlCisgKglhdCBhbnkgdGltZSwgc28gd2UgbWF5IGhhdmUgdG8gcG9zdHBvbmUgaXQuCisgKiAgMi4JV2hlbiBhbm90aGVyIChkYXRhKSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQgd2hpbGUgdGhlcmUncworICoJYW4gQUNLIGluIHRoZSBxdWV1ZSwgd2UgcGlnZ3liYWNrIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyCisgKglvbiB0aGUgZGF0YSBwYWNrZXQuCisgKiAgMy4JSWYgdGhlIEFDSyBXUiBpcyBkb25lIHNlbmRpbmcsIHdlIGdldCBjYWxsZWQgZnJvbSB0aGUKKyAqCXNlbmQgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSdzCisgKglhbm90aGVyIEFDSyBwZW5kaW5nIChwb3N0cG9uZWQgYmVjYXVzZSB0aGUgV1Igd2FzIG9uIHRoZQorICoJcXVldWUpLiBJZiBzbywgd2UgdHJhbnNtaXQgaXQuCisgKgorICogV2UgbWFpbnRhaW4gMiB2YXJpYWJsZXM6CisgKiAgLQlpX2Fja19mbGFncywgd2hpY2gga2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgQUNLIFdSCisgKglpcyBjdXJyZW50bHkgaW4gdGhlIHNlbmQgcXVldWUgb3Igbm90IChJQl9BQ0tfSU5fRkxJR0hUKQorICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCisgKgorICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKgorICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCisgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCisgKiBpcyByZXRyYW5zbWl0dGluZyB0aGVtLCBiZWNhdXNlIGl0IGhhc24ndCBzZWVuIGFuIEFDSyBmb3IKKyAqIHRoZW0uIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIEFDSyB0aGVzZS4KKyAqCisgKiBBQ0sgbWl0aWdhdGlvbiBhZGRzIGEgaGVhZGVyIGZsYWcgIkFDS19SRVFVSVJFRCI7IGFueSBwYWNrZXQgd2l0aAorICogdGhpcyBmbGFnIHNldCAqTVVTVCogYmUgYWNrbm93bGVkZ2VkIGltbWVkaWF0ZWx5LgorICovCisKKy8qCisgKiBXaGVuIHdlIGdldCBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSB0aGUgcmVjdiBxdWV1ZSBoYW5kbGVyLgorICogQ2hlY2sgd2hldGhlciB3ZSBvdWdodCB0byB0cmFuc21pdCBhbiBBQ0suCisgKi8KK3ZvaWQgcmRzX2l3X2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzOworCisJaWYgKCF0ZXN0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncykpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX2RlbGF5ZWQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2FuIHdlIGdldCBhIHNlbmQgY3JlZGl0PyAqLworCWlmICghcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAxLCAmYWR2X2NyZWRpdHMsIDApKSB7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF90aHJvdHRsZSk7CisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfc2VuZF9hY2soaWMsIGFkdl9jcmVkaXRzKTsKK30KKworLyoKKyAqIFdlIGdldCBoZXJlIGZyb20gdGhlIHNlbmQgY29tcGxldGlvbiBoYW5kbGVyLCB3aGVuIHRoZQorICogYWRhcHRlciB0ZWxscyB1cyB0aGUgQUNLIGZyYW1lIHdhcyBzZW50LgorICovCit2b2lkIHJkc19pd19hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlZ3VsYXIgeG1pdCBjb2RlIHdoZW4gaXQgd2FudHMgdG8gcGlnZ3liYWNrCisgKiBhbiBBQ0sgb24gYW4gb3V0Z29pbmcgZnJhbWUuCisgKi8KK3U2NCByZHNfaXdfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfc2VuZF9waWdneWJhY2tlZCk7CisJcmV0dXJuIHJkc19pd19nZXRfYWNrKGljKTsKK30KKworLyoKKyAqIEl0J3Mga2luZCBvZiBsYW1lIHRoYXQgd2UncmUgY29weWluZyBmcm9tIHRoZSBwb3N0ZWQgcmVjZWl2ZSBwYWdlcyBpbnRvCisgKiBsb25nLWxpdmVkIGJpdG1hcHMuICBXZSBjb3VsZCBoYXZlIHBvc3RlZCB0aGUgYml0bWFwcyBhbmQgcmRtYSB3cml0dGVuIGludG8KKyAqIHRoZW0uICBCdXQgcmVjZWl2aW5nIG5ldyBjb25nZXN0aW9uIGJpdG1hcHMgc2hvdWxkIGJlIGEgKnJhcmUqIGV2ZW50LCBzbworICogaG9wZWZ1bGx5IHdlIHdvbid0IG5lZWQgdG8gaW52ZXN0IHRoYXQgY29tcGxleGl0eSBpbiBtYWtpbmcgaXQgbW9yZQorICogZWZmaWNpZW50LiAgQnkgY29weWluZyB3ZSBjYW4gc2hhcmUgYSBzaW1wbGVyIGNvcmUgd2l0aCBUQ1Agd2hpY2ggaGFzIHRvCisgKiBjb3B5LgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfY29uZ19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbWFwX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX3BhZ2U7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBjb3BpZWQ7CisJdWludDY0X3QgdW5jb25nZXN0ZWQgPSAwOworCXZvaWQgKmFkZHI7CisKKwkvKiBjYXRjaCBjb21wbGV0ZWx5IGNvcnJ1cHQgcGFja2V0cyAqLworCWlmIChiZTMyX3RvX2NwdShpd2luYy0+aWlfaW5jLmlfaGRyLmhfbGVuKSAhPSBSRFNfQ09OR19NQVBfQllURVMpCisJCXJldHVybjsKKworCW1hcCA9IGNvbm4tPmNfZmNvbmc7CisJbWFwX3BhZ2UgPSAwOworCW1hcF9vZmYgPSAwOworCisJZnJhZyA9IGxpc3RfZW50cnkoaXdpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWZyYWdfb2ZmID0gMDsKKworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgUkRTX0NPTkdfTUFQX0JZVEVTKSB7CisJCXVpbnQ2NF90ICpzcmMsICpkc3Q7CisJCXVuc2lnbmVkIGludCBrOworCisJCXRvX2NvcHkgPSBtaW4oUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmLCBQQUdFX1NJWkUgLSBtYXBfb2ZmKTsKKwkJQlVHX09OKHRvX2NvcHkgJiA3KTsgLyogTXVzdCBiZSA2NGJpdCBhbGlnbmVkLiAqLworCisJCWFkZHIgPSBrbWFwX2F0b21pYyhmcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKworCQlzcmMgPSBhZGRyICsgZnJhZ19vZmY7CisJCWRzdCA9ICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbbWFwX3BhZ2VdICsgbWFwX29mZjsKKwkJZm9yIChrID0gMDsgayA8IHRvX2NvcHk7IGsgKz0gOCkgeworCQkJLyogUmVjb3JkIHBvcnRzIHRoYXQgYmVjYW1lIHVuY29uZ2VzdGVkLCBpZQorCQkJICogYml0cyB0aGF0IGNoYW5nZWQgZnJvbSAwIHRvIDEuICovCisJCQl1bmNvbmdlc3RlZCB8PSB+KCpzcmMpICYgKmRzdDsKKwkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJfQorCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKworCQljb3BpZWQgKz0gdG9fY29weTsKKworCQltYXBfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChtYXBfb2ZmID09IFBBR0VfU0laRSkgeworCQkJbWFwX29mZiA9IDA7CisJCQltYXBfcGFnZSsrOworCQl9CisKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJfQorCisJLyogdGhlIGNvbmdlc3Rpb24gbWFwIGlzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIgKi8KKwl1bmNvbmdlc3RlZCA9IGxlNjRfdG9fY3B1KHVuY29uZ2VzdGVkKTsKKworCXJkc19jb25nX21hcF91cGRhdGVkKG1hcCwgdW5jb25nZXN0ZWQpOworfQorCisvKgorICogUmluZ3MgYXJlIHBvc3RlZCB3aXRoIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSdsbCBuZWVkIHRvIHF1ZXVlIHRoZQorICogaW5jb21pbmcgbWVzc2FnZSB0byB0aGUgcmVjZWl2aW5nIHNvY2tldCBzbyB0aGlzIGNhbid0IGZhaWwuCisgKiBBbGwgZnJhZ21lbnRzIHN0YXJ0IHdpdGggYSBoZWFkZXIsIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UncmUgbm90IHJlY2VpdmluZworICogZ2FyYmFnZSwgYW5kIHdlIGNhbiB0ZWxsIGEgc21hbGwgOCBieXRlIGZyYWdtZW50IGZyb20gYW4gQUNLIGZyYW1lLgorICovCitzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSB7CisJdTY0CQlhY2tfbmV4dDsKKwl1NjQJCWFja19yZWN2OworCXVuc2lnbmVkIGludAlhY2tfcmVxdWlyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX25leHRfdmFsaWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlY3ZfdmFsaWQ6MTsKK307CisKK3N0YXRpYyB2b2lkIHJkc19pd19wcm9jZXNzX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2LCB1MzIgYnl0ZV9sZW4sCisJCQkJc3RydWN0IHJkc19pd19hY2tfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jID0gaWMtPmlfaXdpbmM7CisJc3RydWN0IHJkc19oZWFkZXIgKmloZHIsICpoZHI7CisKKwkvKiBYWFggc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uIGlmIHBvcnQgMCwwIGFyZSBzZWVuPyAqLworCisJcmRzZGVidWcoImljICVwIGl3aW5jICVwIHJlY3YgJXAgYnl0ZSBsZW4gJXVcbiIsIGljLCBpd2luYywgcmVjdiwKKwkJIGJ5dGVfbGVuKTsKKworCWlmIChieXRlX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBkaWRuJ3QgaW5jbHVlIGEgIgorCQkgICAgICAgImhlYWRlciwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmV0dXJuOworCX0KKwlieXRlX2xlbiAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJaWhkciA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKworCS8qIFZhbGlkYXRlIHRoZSBjaGVja3N1bS4gKi8KKwlpZiAoIXJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShpaGRyKSkgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGhhcyBjb3JydXB0ZWQgaGVhZGVyIC0gIgorCQkgICAgICAgImZvcmNpbmcgYSByZWNvbm5lY3RcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgdGhlIEFDSyBzZXF1ZW5jZSB3aGljaCBjb21lcyB3aXRoIGV2ZXJ5IHBhY2tldCAqLworCXN0YXRlLT5hY2tfcmVjdiA9IGJlNjRfdG9fY3B1KGloZHItPmhfYWNrKTsKKwlzdGF0ZS0+YWNrX3JlY3ZfdmFsaWQgPSAxOworCisJLyogUHJvY2VzcyB0aGUgY3JlZGl0cyB1cGRhdGUgaWYgdGhlcmUgd2FzIG9uZSAqLworCWlmIChpaGRyLT5oX2NyZWRpdCkKKwkJcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgaWhkci0+aF9jcmVkaXQpOworCisJaWYgKGloZHItPmhfc3BvcnQgPT0gMCAmJiBpaGRyLT5oX2Rwb3J0ID09IDAgJiYgYnl0ZV9sZW4gPT0gMCkgeworCQkvKiBUaGlzIGlzIGFuIEFDSy1vbmx5IHBhY2tldC4gVGhlIGZhY3QgdGhhdCBpdCBnZXRzCisJCSAqIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUgaXMgdGhhdCBoaXN0b3JpY2FsbHksIEFDS3MKKwkJICogd2VyZSByYXRoZXIgc3BlY2lhbCBiZWFzdHMuCisJCSAqLworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3JlY2VpdmVkKTsKKworCQkvKgorCQkgKiBVc3VhbGx5IHRoZSBmcmFncyBtYWtlIHRoZWlyIHdheSBvbiB0byBpbmNzIGFuZCBhcmUgdGhlbiBmcmVlZCBhcworCQkgKiB0aGUgaW5jIGlzIGZyZWVkLiAgV2UgZG9uJ3QgZ28gdGhhdCByb3V0ZSwgc28gd2UgaGF2ZSB0byBkcm9wIHRoZQorCQkgKiBwYWdlIHJlZiBvdXJzZWx2ZXMuICBXZSBjYW4ndCBqdXN0IGxlYXZlIHRoZSBwYWdlIG9uIHRoZSByZWN2CisJCSAqIGJlY2F1c2UgdGhhdCBjb25mdXNlcyB0aGUgZG1hIG1hcHBpbmcgb2YgcGFnZXMgYW5kIGVhY2ggcmVjdidzIHVzZQorCQkgKiBvZiBhIHBhcnRpYWwgcGFnZS4gIFdlIGNhbiBsZWF2ZSB0aGUgZnJhZywgdGhvdWdoLCBpdCB3aWxsIGJlCisJCSAqIHJldXNlZC4KKwkJICoKKwkJICogRklYTUU6IEZvbGQgdGhpcyBpbnRvIHRoZSBjb2RlIHBhdGggYmVsb3cuCisJCSAqLworCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGluYyBvbiB0aGUgY29ubmVjdGlvbiB0aGVuIHRoaXMKKwkgKiBmcmFnbWVudCBoYXMgYSBoZWFkZXIgYW5kIHN0YXJ0cyBhIG1lc3NhZ2UuLiBjb3B5IGl0cyBoZWFkZXIKKwkgKiBpbnRvIHRoZSBpbmMgYW5kIHNhdmUgdGhlIGluYyBzbyB3ZSBjYW4gaGFuZyB1cGNvbWluZyBmcmFnbWVudHMKKwkgKiBvZmYgaXRzIGxpc3QuCisJICovCisJaWYgKGl3aW5jID09IE5VTEwpIHsKKwkJaXdpbmMgPSByZWN2LT5yX2l3aW5jOworCQlyZWN2LT5yX2l3aW5jID0gTlVMTDsKKwkJaWMtPmlfaXdpbmMgPSBpd2luYzsKKworCQloZHIgPSAmaXdpbmMtPmlpX2luYy5pX2hkcjsKKwkJbWVtY3B5KGhkciwgaWhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IGJlMzJfdG9fY3B1KGhkci0+aF9sZW4pOworCisJCXJkc2RlYnVnKCJpYyAlcCBpd2luYyAlcCByZW0gJXUgZmxhZyAweCV4XG4iLCBpYywgaXdpbmMsCisJCQkgaWMtPmlfcmVjdl9kYXRhX3JlbSwgaGRyLT5oX2ZsYWdzKTsKKwl9IGVsc2UgeworCQloZHIgPSAmaXdpbmMtPmlpX2luYy5pX2hkcjsKKwkJLyogV2UgY2FuJ3QganVzdCB1c2UgbWVtY21wIGhlcmU7IGZyYWdtZW50cyBvZiBhCisJCSAqIHNpbmdsZSBtZXNzYWdlIG1heSBjYXJyeSBkaWZmZXJlbnQgQUNLcyAqLworCQlpZiAoaGRyLT5oX3NlcXVlbmNlICE9IGloZHItPmhfc2VxdWVuY2UKKwkJIHx8IGhkci0+aF9sZW4gIT0gaWhkci0+aF9sZW4KKwkJIHx8IGhkci0+aF9zcG9ydCAhPSBpaGRyLT5oX3Nwb3J0CisJCSB8fCBoZHItPmhfZHBvcnQgIT0gaWhkci0+aF9kcG9ydCkgeworCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiZnJhZ21lbnQgaGVhZGVyIG1pc21hdGNoOyBmb3JjaW5nIHJlY29ubmVjdFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSwgJml3aW5jLT5paV9mcmFncyk7CisJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCWlmIChpYy0+aV9yZWN2X2RhdGFfcmVtID4gUkRTX0ZSQUdfU0laRSkKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSAtPSBSRFNfRlJBR19TSVpFOworCWVsc2UgeworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gMDsKKwkJaWMtPmlfaXdpbmMgPSBOVUxMOworCisJCWlmIChpd2luYy0+aWlfaW5jLmlfaGRyLmhfZmxhZ3MgPT0gUkRTX0ZMQUdfQ09OR19CSVRNQVApCisJCQlyZHNfaXdfY29uZ19yZWN2KGNvbm4sIGl3aW5jKTsKKwkJZWxzZSB7CisJCQlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2ZhZGRyLCBjb25uLT5jX2xhZGRyLAorCQkJCQkgICZpd2luYy0+aWlfaW5jLCBHRlBfQVRPTUlDLAorCQkJCQkgIEtNX1NPRlRJUlEwKTsKKwkJCXN0YXRlLT5hY2tfbmV4dCA9IGJlNjRfdG9fY3B1KGhkci0+aF9zZXF1ZW5jZSk7CisJCQlzdGF0ZS0+YWNrX25leHRfdmFsaWQgPSAxOworCQl9CisKKwkJLyogRXZhbHVhdGUgdGhlIEFDS19SRVFVSVJFRCBmbGFnICphZnRlciogd2UgcmVjZWl2ZWQKKwkJICogdGhlIGNvbXBsZXRlIGZyYW1lLCBhbmQgYWZ0ZXIgYnVtcGluZyB0aGUgbmV4dF9yeAorCQkgKiBzZXF1ZW5jZS4gKi8KKwkJaWYgKGhkci0+aF9mbGFncyAmIFJEU19GTEFHX0FDS19SRVFVSVJFRCkgeworCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfYWNrX3JlcXVpcmVkKTsKKwkJCXN0YXRlLT5hY2tfcmVxdWlyZWQgPSAxOworCQl9CisKKwkJcmRzX2luY19wdXQoJml3aW5jLT5paV9pbmMpOworCX0KK30KKworLyoKKyAqIFBsdWNraW5nIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgcmluZyBjYW4gYmUgZG9uZSBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIHRocmVhZCByZWZpbGxpbmcgdGhlIHJpbmcuICBFYWNoIHJpbmcgb3BlcmF0aW9uIGlzIHByb3RlY3RlZCBieQorICogc3BpbmxvY2tzIGFuZCB0aGUgdHJhbnNpZW50IHN0YXRlIG9mIHJlZmlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAqIHJlY29yZGluZyBvZiB3aGljaCBlbnRyeSBpcyBvbGRlc3QuCisgKgorICogVGhpcyByZWxpZXMgb24gSUIgb25seSBjYWxsaW5nIG9uZSBjcSBjb21wX2hhbmRsZXIgZm9yIGVhY2ggY3Egc28gdGhhdAorICogdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSBjYWxsZXIgb2YgcmRzX3JlY3ZfaW5jb21pbmcoKSBwZXIgUkRTIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pd19hY2tfc3RhdGUgc3RhdGUgPSB7IDAsIH07CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3Y7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjcSAlcFxuIiwgY29ubiwgY3EpOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NxX2NhbGwpOworCisJaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfU09MSUNJVEVEKTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9jcV9ldmVudCk7CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1tyZHNfaXdfcmluZ19vbGRlc3QoJmljLT5pX3JlY3ZfcmluZyldOworCisJCXJkc19pd19yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCisJCS8qCisJCSAqIEFsc28gcHJvY2VzcyByZWN2cyBpbiBjb25uZWN0aW5nIHN0YXRlIGJlY2F1c2UgaXQgaXMgcG9zc2libGUKKwkJICogdG8gZ2V0IGEgcmVjdiBjb21wbGV0aW9uIF9iZWZvcmVfIHRoZSByZG1hY20gRVNUQUJMSVNIRUQKKwkJICogZXZlbnQgaXMgcHJvY2Vzc2VkLgorCQkgKi8KKwkJaWYgKHJkc19jb25uX3VwKGNvbm4pIHx8IHJkc19jb25uX2Nvbm5lY3RpbmcoY29ubikpIHsKKwkJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKKwkJCQlyZHNfaXdfcHJvY2Vzc19yZWN2KGNvbm4sIHJlY3YsIHdjLmJ5dGVfbGVuLCAmc3RhdGUpOworCQkJfSBlbHNlIHsKKwkJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmVjdiBjb21wbGV0aW9uIG9uICIKKwkJCQkgICAgICAgIiVwSTQgaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCQkgICAgICAgd2Muc3RhdHVzKTsKKwkJCX0KKwkJfQorCisJCXJkc19pd19yaW5nX2ZyZWUoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJfQorCisJaWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKQorCQlyZHNfaXdfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7CisJaWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkICYmIHN0YXRlLmFja19yZWN2ID4gaWMtPmlfYWNrX3JlY3YpIHsKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBzdGF0ZS5hY2tfcmVjdiwgTlVMTCk7CisJCWljLT5pX2Fja19yZWN2ID0gc3RhdGUuYWNrX3JlY3Y7CisJfQorCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKKworCS8qIElmIHdlIGV2ZXIgZW5kIHVwIHdpdGggYSByZWFsbHkgZW1wdHkgcmVjZWl2ZSByaW5nLCB3ZSdyZQorCSAqIGluIGRlZXAgdHJvdWJsZSwgYXMgdGhlIHNlbmRlciB3aWxsIGRlZmluaXRlbHkgc2VlIFJOUgorCSAqIHRpbWVvdXRzLiAqLworCWlmIChyZHNfaXdfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X3JpbmdfZW1wdHkpOworCisJLyoKKwkgKiBJZiB0aGUgcmluZyBpcyBydW5uaW5nIGxvdywgdGhlbiBzY2hlZHVsZSB0aGUgdGhyZWFkIHRvIHJlZmlsbC4KKwkgKi8KKwlpZiAocmRzX2l3X3JpbmdfbG93KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCitpbnQgcmRzX2l3X3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXBcbiIsIGNvbm4pOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgYSB0ZW1wb3JhcnkgcG9zdGluZyBmYWlsdXJlIGluIHRoaXMgY29udGV4dCB0aGVuCisJICogd2UncmUgcmVhbGx5IGxvdyBhbmQgd2Ugd2FudCB0aGUgY2FsbGVyIHRvIGJhY2sgb2ZmIGZvciBhIGJpdC4KKwkgKi8KKwltdXRleF9sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKwlpZiAocmRzX2l3X3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMCkpCisJCXJldCA9IC1FTk9NRU07CisJZWxzZQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfcmVmaWxsX2Zyb21fdGhyZWFkKTsKKwltdXRleF91bmxvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCByZHNfaXdfcmVjdl9pbml0KHZvaWQpCit7CisJc3RydWN0IHN5c2luZm8gc2k7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwkvKiBEZWZhdWx0IHRvIDMwJSBvZiBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgcmVjdiBtZW1vcnkgKi8KKwlzaV9tZW1pbmZvKCZzaSk7CisJcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gc2kudG90YWxyYW0gLyAzICogUEFHRV9TSVpFIC8gUkRTX0ZSQUdfU0laRTsKKworCXJkc19pd19pbmNvbWluZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pd19pbmNvbWluZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2l3X2luY29taW5nKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pd19pbmNvbWluZ19zbGFiID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmRzX2l3X2ZyYWdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaXdfZnJhZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaXdfZnJhZ19zbGFiID09IE5VTEwpCisJCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaXdfaW5jb21pbmdfc2xhYik7CisJZWxzZQorCQlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3JlY3ZfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaXdfaW5jb21pbmdfc2xhYik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19mcmFnX3NsYWIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yaW5nLmMgYi9uZXQvcmRzL2l3X3JpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDIyZDRiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19yaW5nLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworLyoKKyAqIExvY2tpbmcgZm9yIElCIHJpbmdzLgorICogV2UgYXNzdW1lIHRoYXQgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvdGVjdGVkIGJ5IGEgbXV0ZXgKKyAqIGluIHRoZSBjYWxsZXIgKHRoaXMgaXMgYSB2YWxpZCBhc3N1bXB0aW9uIGZvciB0aGUgY3VycmVudAorICogaW1wbGVtZW50YXRpb24pLgorICoKKyAqIEZyZWVpbmcgYWx3YXlzIGhhcHBlbnMgaW4gYW4gaW50ZXJydXB0LCBhbmQgaGVuY2Ugb25seQorICogcmFjZXMgd2l0aCBhbGxvY2F0aW9ucywgYnV0IG5vdCB3aXRoIG90aGVyIGZyZWUoKXMuCisgKgorICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpcyB0aGF0CisgKiB0aGUgYWxsb2MgY29kZSBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZnJlZSBlbnRyaWVzLgorICogVG8gdGhpcyBlbmQsIHdlIG1haW50YWluIHR3byBjb3VudGVyczsgYW4gYWxsb2NhdGlvbiBjb3VudGVyCisgKiBhbmQgYSBmcmVlIGNvdW50ZXIuIEJvdGggYXJlIGFsbG93ZWQgdG8gcnVuIGZyZWVseSwgYW5kIHdyYXAKKyAqIGFyb3VuZC4KKyAqIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIGFsd2F5cyAoYWxsb2NfY3RyIC0gZnJlZV9jdHIpICUgTlIuCisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgZnJlZV9jdHIgYXRvbWljLiBXaGVuIHRoZQorICogY2FsbGVyIGZpbmRzIGFuIGFsbG9jYXRpb24gZmFpbHMsIGl0IHNob3VsZCBzZXQgYW4gImFsbG9jIGZhaWwiCisgKiBiaXQgYW5kIHJldHJ5IHRoZSBhbGxvY2F0aW9uLiBUaGUgImFsbG9jIGZhaWwiIGJpdCBlc3NlbnRpYWxseSB0ZWxscworICogdGhlIENRIGNvbXBsZXRpb24gaGFuZGxlcnMgdG8gd2FrZSBpdCB1cCBhZnRlciBmcmVlaW5nIHNvbWUKKyAqIG1vcmUgZW50cmllcy4KKyAqLworCisvKgorICogVGhpcyBvbmx5IGhhcHBlbnMgb24gc2h1dGRvd24uCisgKi8KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19pd19yaW5nX2VtcHR5X3dhaXQpOworCit2b2lkIHJkc19pd19yaW5nX2luaXQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwltZW1zZXQocmluZywgMCwgc2l6ZW9mKCpyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworCXJkc2RlYnVnKCJyaW5nICVwIG5yICV1XG4iLCByaW5nLCByaW5nLT53X25yKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yZHNfaXdfcmluZ191c2VkKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXUzMiBkaWZmOworCisJLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaGFzIGF0IGxlYXN0IGFzIG1hbnkgYml0cyBhcyB1MzIgKi8KKwlkaWZmID0gcmluZy0+d19hbGxvY19jdHIgLSAodTMyKSBhdG9taWNfcmVhZCgmcmluZy0+d19mcmVlX2N0cik7CisJQlVHX09OKGRpZmYgPiByaW5nLT53X25yKTsKKworCXJldHVybiBkaWZmOworfQorCit2b2lkIHJkc19pd19yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCS8qIFdlIG9ubHkgZXZlciBnZXQgY2FsbGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gc2V0dXAgY29kZSwKKwkgKiBwcmlvciB0byBjcmVhdGluZyB0aGUgUVAuICovCisJQlVHX09OKF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworfQorCitzdGF0aWMgaW50IF9fcmRzX2l3X3JpbmdfZW1wdHkoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKSA9PSAwOworfQorCit1MzIgcmRzX2l3X3JpbmdfYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKQoreworCXUzMiByZXQgPSAwLCBhdmFpbDsKKworCWF2YWlsID0gcmluZy0+d19uciAtIF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHZhbCAldSBuZXh0ICV1IGZyZWUgJXVcbiIsIHJpbmcsIHZhbCwKKwkJIHJpbmctPndfYWxsb2NfcHRyLCBhdmFpbCk7CisKKwlpZiAodmFsICYmIGF2YWlsKSB7CisJCXJldCA9IG1pbih2YWwsIGF2YWlsKTsKKwkJKnBvcyA9IHJpbmctPndfYWxsb2NfcHRyOworCisJCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyICsgcmV0KSAlIHJpbmctPndfbnI7CisJCXJpbmctPndfYWxsb2NfY3RyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pd19yaW5nX2ZyZWUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19mcmVlX3B0ciA9IChyaW5nLT53X2ZyZWVfcHRyICsgdmFsKSAlIHJpbmctPndfbnI7CisJYXRvbWljX2FkZCh2YWwsICZyaW5nLT53X2ZyZWVfY3RyKTsKKworCWlmIChfX3Jkc19pd19yaW5nX2VtcHR5KHJpbmcpICYmCisJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19pd19yaW5nX2VtcHR5X3dhaXQpKQorCQl3YWtlX3VwKCZyZHNfaXdfcmluZ19lbXB0eV93YWl0KTsKK30KKwordm9pZCByZHNfaXdfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyIC0gdmFsKSAlIHJpbmctPndfbnI7CisJcmluZy0+d19hbGxvY19jdHIgLT0gdmFsOworfQorCitpbnQgcmRzX2l3X3JpbmdfZW1wdHkoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2l3X3JpbmdfZW1wdHkocmluZyk7Cit9CisKK2ludCByZHNfaXdfcmluZ19sb3coc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKSA8PSAocmluZy0+d19uciA+PiAyKTsKK30KKworCisvKgorICogcmV0dXJucyB0aGUgb2xkZXN0IGFsbG9jZWQgcmluZyBlbnRyeS4gIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBvbmUKKyAqIGZyZWVkLiAgVGhpcyBjYW4ndCBiZSBjYWxsZWQgaWYgdGhlcmUgYXJlIG5vbmUgYWxsb2NhdGVkLgorICovCit1MzIgcmRzX2l3X3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiByaW5nLT53X2ZyZWVfcHRyOworfQorCisvKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB3b3JrIHJlcXVlc3RzLgorICovCisKK3UzMiByZHNfaXdfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCkKK3sKKwl1MzIgcmV0OworCisJaWYgKG9sZGVzdCA8PSAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkKQorCQlyZXQgPSAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkIC0gb2xkZXN0ICsgMTsKKwllbHNlCisJCXJldCA9IHJpbmctPndfbnIgLSBvbGRlc3QgKyAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkICsgMTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHJldCAldSB3cl9pZCAldSBvbGRlc3QgJXVcbiIsIHJpbmcsIHJldCwKKwkJIHdyX2lkLCBvbGRlc3QpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3NlbmQuYyBiL25ldC9yZHMvaXdfc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZGQzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3NlbmQuYwpAQCAtMCwwICsxLDk3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfcmRtYV9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJCSAgICAgIGludCB3Y19zdGF0dXMpCit7CisJaW50IG5vdGlmeV9zdGF0dXM7CisKKwlzd2l0Y2ggKHdjX3N0YXR1cykgeworCWNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOgorCQlyZXR1cm47CisKKwljYXNlIElCX1dDX1NVQ0NFU1M6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9TVUNDRVNTOworCQlicmVhazsKKworCWNhc2UgSUJfV0NfUkVNX0FDQ0VTU19FUlI6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9SRU1PVEVfRVJST1I7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX09USEVSX0VSUk9SOworCQlicmVhazsKKwl9CisJcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShybSwgbm90aWZ5X3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX3VubWFwX3JkbWEoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCWlmIChvcC0+cl9tYXBwZWQpIHsKKwkJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQlvcC0+cl9zZywgb3AtPnJfbmVudHMsCisJCQlvcC0+cl93cml0ZSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlvcC0+cl9tYXBwZWQgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfdW5tYXBfcm0oc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCSAgc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQsCisJCQkgIGludCB3Y19zdGF0dXMpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IHNlbmQtPnNfcm07CisKKwlyZHNkZWJ1ZygiaWMgJXAgc2VuZCAlcCBybSAlcFxuIiwgaWMsIHNlbmQsIHJtKTsKKworCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkgICAgIHJtLT5tX3NnLCBybS0+bV9uZW50cywKKwkJICAgICBETUFfVE9fREVWSUNFKTsKKworCWlmIChybS0+bV9yZG1hX29wICE9IE5VTEwpIHsKKwkJcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShpYywgcm0tPm1fcmRtYV9vcCk7CisKKwkJLyogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIGEgY29tcGxldGlvbiBub3RpZmljYXRpb24gb24gdGhpcworCQkgKiBtZXNzYWdlLCB3ZSBjYW4gaW1wbGVtZW50IHRocmVlIGRpZmZlcmVudCBzZW1hbnRpY3M6CisJCSAqICAxLglOb3RpZnkgd2hlbiB3ZSByZWNlaXZlZCB0aGUgQUNLIG9uIHRoZSBSRFMgbWVzc2FnZQorCQkgKgl0aGF0IHdhcyBxdWV1ZWQgd2l0aCB0aGUgUkRNQS4gVGhpcyBwcm92aWRlcyByZWxpYWJsZQorCQkgKglub3RpZmljYXRpb24gb2YgUkRNQSBzdGF0dXMgYXQgdGhlIGV4cGVuc2Ugb2YgYSBvbmUtd2F5CisJCSAqCXBhY2tldCBkZWxheS4KKwkJICogIDIuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIFJETUEgb3BlcmF0aW9uLgorCQkgKiAgMy4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgYWNjb21wYW55aW5nIFJEUyBtZXNzYWdlcy4KKwkJICogSGVyZSwgd2UgaW1wbGVtZW50IGFwcHJvYWNoICMzLiBUbyBpbXBsZW1lbnQgYXBwcm9hY2ggIzIsCisJCSAqIGNhbGwgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBmcm9tIHRoZSBjcV9oYW5kbGVyLiBUbyBpbXBsZW1lbnQgIzEsCisJCSAqIGRvbid0IGNhbGwgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBhdCBhbGwsIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG5vdGlmeQorCQkgKiBoYW5kbGluZyBpbiB0aGUgQUNLIHByb2Nlc3NpbmcgY29kZS4KKwkJICoKKwkJICogTm90ZTogVGhlcmUncyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgc3luYyBhbnkgUkRNQSBidWZmZXJzIHVzaW5nCisJCSAqIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUgLSB0aGUgY29tcGxldGlvbiBmb3IgdGhlIFJETUEKKwkJICogb3BlcmF0aW9uIGl0c2VsZiB1bm1hcHBlZCB0aGUgUkRNQSBidWZmZXJzLCB3aGljaCB0YWtlcyBjYXJlCisJCSAqIG9mIHN5bmNoaW5nLgorCQkgKi8KKwkJcmRzX2l3X3NlbmRfcmRtYV9jb21wbGV0ZShybSwgd2Nfc3RhdHVzKTsKKworCQlpZiAocm0tPm1fcmRtYV9vcC0+cl93cml0ZSkKKwkJCXJkc19zdGF0c19hZGQoc19zZW5kX3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCQllbHNlCisJCQlyZHNfc3RhdHNfYWRkKHNfcmVjdl9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwl9CisKKwkvKiBJZiBhbnlvbmUgd2FpdGVkIGZvciB0aGlzIG1lc3NhZ2UgdG8gZ2V0IGZsdXNoZWQgb3V0LCB3YWtlCisJICogdGhlbSB1cCBub3cgKi8KKwlyZHNfbWVzc2FnZV91bm1hcHBlZChybSk7CisKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworCXNlbmQtPnNfcm0gPSBOVUxMOworfQorCit2b2lkIHJkc19pd19zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBpOworCisJZm9yIChpID0gMCwgc2VuZCA9IGljLT5pX3NlbmRzOyBpIDwgaWMtPmlfc2VuZF9yaW5nLndfbnI7IGkrKywgc2VuZCsrKSB7CisJCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCQlzZW5kLT5zX3JtID0gTlVMTDsKKwkJc2VuZC0+c19vcCA9IE5VTEw7CisJCXNlbmQtPnNfbWFwcGluZyA9IE5VTEw7CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKwkJc2VuZC0+c193ci53cl9pZCA9IGk7CisJCXNlbmQtPnNfd3Iuc2dfbGlzdCA9IHNlbmQtPnNfc2dlOworCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfd3IuZXguaW1tX2RhdGEgPSAwOworCisJCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmxrZXkgPSAwOworCisJCXNnZSA9IHJkc19pd19oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2VuZC0+c19tciA9IGliX2FsbG9jX2Zhc3RfcmVnX21yKGljLT5pX3BkLCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSk7CisJCWlmIChJU19FUlIoc2VuZC0+c19tcikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfbXIgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VuZC0+c19wYWdlX2xpc3QgPSBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QoCisJCQlpYy0+aV9jbV9pZC0+ZGV2aWNlLCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSk7CisJCWlmIChJU19FUlIoc2VuZC0+c19wYWdlX2xpc3QpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBpOworCisJZm9yIChpID0gMCwgc2VuZCA9IGljLT5pX3NlbmRzOyBpIDwgaWMtPmlfc2VuZF9yaW5nLndfbnI7IGkrKywgc2VuZCsrKSB7CisJCUJVR19PTighc2VuZC0+c19tcik7CisJCWliX2RlcmVnX21yKHNlbmQtPnNfbXIpOworCQlCVUdfT04oIXNlbmQtPnNfcGFnZV9saXN0KTsKKwkJaWJfZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3Qoc2VuZC0+c19wYWdlX2xpc3QpOworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gMHhkZWFkKQorCQkJY29udGludWU7CisJCWlmIChzZW5kLT5zX3JtKQorCQkJcmRzX2l3X3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIElCX1dDX1dSX0ZMVVNIX0VSUik7CisJCWlmIChzZW5kLT5zX29wKQorCQkJcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShpYywgc2VuZC0+c19vcCk7CisJfQorfQorCisvKgorICogVGhlIF9vbGRlc3QvX2ZyZWUgcmluZyBvcGVyYXRpb25zIGhlcmUgcmFjZSBjbGVhbmx5IHdpdGggdGhlIGFsbG9jL3VuYWxsb2MKKyAqIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGluIHRoZSBzZW5kIHBhdGguICBBcyB0aGUgc2VuZGVyIGFsbG9jcyBhbmQgcG90ZW50aWFsbHkKKyAqIHVuYWxsb2NzIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIHJpbmcgaXQgZG9lc24ndCBhbHRlciB3aGljaCBpcworICogdGhlIG5leHQgdG8gYmUgZnJlZWQsIHdoaWNoIGlzIHdoYXQgdGhpcyBpcyBjb25jZXJuZWQgd2l0aC4KKyAqLwordm9pZCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBvbGRlc3Q7CisJdTMyIGk7CisJaW50IHJldDsKKworCXJkc2RlYnVnKCJjcSAlcCBjb25uICVwXG4iLCBjcSwgY29ubik7CisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NxX2NhbGwpOworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NxX2V2ZW50KTsKKworCQlpZiAod2Muc3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiV0MgRXJyb3I6ICBzdGF0dXMgPSAlZCBvcGNvZGUgPSAlZFxuIiwgd2Muc3RhdHVzLCB3Yy5vcGNvZGUpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAod2Mub3Bjb2RlID09IElCX1dDX0xPQ0FMX0lOViAmJiB3Yy53cl9pZCA9PSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lEKSB7CisJCQlpYy0+aV9mYXN0cmVnX3Bvc3RlZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh3Yy5vcGNvZGUgPT0gSUJfV0NfRkFTVF9SRUdfTVIgJiYgd2Mud3JfaWQgPT0gUkRTX0lXX0ZBU1RfUkVHX1dSX0lEKSB7CisJCQlpYy0+aV9mYXN0cmVnX3Bvc3RlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh3Yy53cl9pZCA9PSBSRFNfSVdfQUNLX1dSX0lEKSB7CisJCQlpZiAoaWMtPmlfYWNrX3F1ZXVlZCArIEhaLzIgPCBqaWZmaWVzKQorCQkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9zdGFsbGVkKTsKKwkJCXJkc19pd19hY2tfc2VuZF9jb21wbGV0ZShpYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9sZGVzdCA9IHJkc19pd19yaW5nX29sZGVzdCgmaWMtPmlfc2VuZF9yaW5nKTsKKworCQljb21wbGV0ZWQgPSByZHNfaXdfcmluZ19jb21wbGV0ZWQoJmljLT5pX3NlbmRfcmluZywgd2Mud3JfaWQsIG9sZGVzdCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGNvbXBsZXRlZDsgaSsrKSB7CisJCQlzZW5kID0gJmljLT5pX3NlbmRzW29sZGVzdF07CisKKwkJCS8qIEluIHRoZSBlcnJvciBjYXNlLCB3Yy5vcGNvZGUgc29tZXRpbWVzIGNvbnRhaW5zIGdhcmJhZ2UgKi8KKwkJCXN3aXRjaCAoc2VuZC0+c193ci5vcGNvZGUpIHsKKwkJCWNhc2UgSUJfV1JfU0VORDoKKwkJCQlpZiAoc2VuZC0+c19ybSkKKwkJCQkJcmRzX2l3X3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIHdjLnN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQljYXNlIElCX1dSX0ZBU1RfUkVHX01SOgorCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRF9XSVRIX0lOVjoKKwkJCQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgLSB0aGUgU0cgbGlzdCB3aWxsIGJlIHVubWFwcGVkCisJCQkJICogd2hlbiB0aGUgU0VORCBjb21wbGV0ZXMuICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCQkJIlJEUy9JVzogJXM6IHVuZXhwZWN0ZWQgb3Bjb2RlIDB4JXggaW4gV1IhXG4iLAorCQkJCQkJX19mdW5jX18sIHNlbmQtPnNfd3Iub3Bjb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2VuZC0+c193ci5vcGNvZGUgPSAweGRlYWQ7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJaWYgKHNlbmQtPnNfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3N0YWxsZWQpOworCisJCQkvKiBJZiBhIFJETUEgb3BlcmF0aW9uIHByb2R1Y2VkIGFuIGVycm9yLCBzaWduYWwgdGhpcyByaWdodAorCQkJICogYXdheS4gSWYgd2UgZG9uJ3QsIHRoZSBzdWJzZXF1ZW50IFNFTkQgdGhhdCBnb2VzIHdpdGggdGhpcworCQkJICogUkRNQSB3aWxsIGJlIGNhbmNlbGVkIHdpdGggRVJSX1dGTFVTSCwgYW5kIHRoZSBhcHBsaWNhdGlvbgorCQkJICogbmV2ZXIgbGVhcm4gdGhhdCB0aGUgUkRNQSBmYWlsZWQuICovCisJCQlpZiAodW5saWtlbHkod2Muc3RhdHVzID09IElCX1dDX1JFTV9BQ0NFU1NfRVJSICYmIHNlbmQtPnNfb3ApKSB7CisJCQkJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCQkJCXJtID0gcmRzX3NlbmRfZ2V0X21lc3NhZ2UoY29ubiwgc2VuZC0+c19vcCk7CisJCQkJaWYgKHJtKQorCQkJCQlyZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Yy5zdGF0dXMpOworCQkJfQorCisJCQlvbGRlc3QgPSAob2xkZXN0ICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJfQorCisJCXJkc19pd19yaW5nX2ZyZWUoJmljLT5pX3NlbmRfcmluZywgY29tcGxldGVkKTsKKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKQorCQkgfHwgdGVzdF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpCisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUyAmJiByZHNfY29ubl91cChjb25uKSkgeworCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkic2VuZCBjb21wbGV0aW9uIG9uICVwSTQgIgorCQkJCSJoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCByZWNvbm5lY3RpbmdcbiIsCisJCQkJJmNvbm4tPmNfZmFkZHIsIHdjLnN0YXR1cyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBhbGxvY2F0aW5nIGNyZWRpdHMgd2hlbiBzZW5kaW5nCisgKiBtZXNzYWdlcy4KKyAqCisgKiBDb25jZXB0dWFsbHksIHdlIGhhdmUgdHdvIGNvdW50ZXJzOgorICogIC0Jc2VuZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSdyZSBhbGxvd2VkCisgKgl0byBzdWJtaXQgd2l0aG91dCBvdmVycnVuaW5nIHRoZSByZWNpZXZlcidzIHF1ZXVlLiBGb3IKKyAqCWVhY2ggU0VORCBXUiB3ZSBwb3N0LCB3ZSBkZWNyZW1lbnQgdGhpcyBieSBvbmUuCisgKgorICogIC0JcG9zdGVkIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlIHJlY2VudGx5CisgKglwb3N0ZWQgdG8gdGhlIHJlY2VpdmUgcXVldWUuIFRoaXMgdmFsdWUgaXMgdHJhbnNmZXJyZWQKKyAqCXRvIHRoZSBwZWVyIGFzIGEgImNyZWRpdCB1cGRhdGUiIGluIGEgUkRTIGhlYWRlciBmaWVsZC4KKyAqCUV2ZXJ5IHRpbWUgd2UgdHJhbnNtaXQgY3JlZGl0cyB0byB0aGUgcGVlciwgd2Ugc3VidHJhY3QKKyAqCXRoZSBhbW91bnQgb2YgdHJhbnNmZXJyZWQgY3JlZGl0cyBmcm9tIHRoaXMgY291bnRlci4KKyAqCisgKiBJdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBhdm9pZCBzaXR1YXRpb25zIHdoZXJlIGJvdGggc2lkZXMgaGF2ZQorICogZXhoYXVzdGVkIHRoZWlyIHNlbmQgY3JlZGl0cywgYW5kIGFyZSB1bmFibGUgdG8gc2VuZCBuZXcgY3JlZGl0cworICogdG8gdGhlIHBlZXIuIFdlIGFjaGlldmUgdGhpcyBieSByZXF1aXJpbmcgdGhhdCB3ZSBzZW5kIGF0IGxlYXN0CisgKiBvbmUgY3JlZGl0IHVwZGF0ZSB0byB0aGUgcGVlciBiZWZvcmUgZXhoYXVzdGluZyBvdXIgY3JlZGl0cy4KKyAqIFdoZW4gbmV3IGNyZWRpdHMgYXJyaXZlLCB3ZSBzdWJ0cmFjdCBvbmUgY3JlZGl0IHRoYXQgaXMgd2l0aGhlbGQKKyAqIHVudGlsIHdlJ3ZlIHBvc3RlZCBuZXcgYnVmZmVycyBhbmQgYXJlIHJlYWR5IHRvIHRyYW5zbWl0IHRoZXNlCisgKiBjcmVkaXRzIChzZWUgcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMgYmVsb3cpLgorICoKKyAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdAorICogZ3JhYnMgY19zZW5kX2xvY2sgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy4KKyAqIEhvd2V2ZXIsIHRoZSBBQ0sgc2VuZGluZyBjb2RlIGlzIGluZGVwZW5kZW50IGFuZCBjYW4gcmFjZSB3aXRoCisgKiBtZXNzYWdlIFNFTkRzLgorICoKKyAqIEluIHRoZSBzZW5kIHBhdGgsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb3VudGVycyBmb3Igc2VuZCBjcmVkaXRzCisgKiBhbmQgdGhlIGNvdW50ZXIgb2YgcG9zdGVkIGJ1ZmZlcnMgYXRvbWljYWxseSAtIHdoZW4gd2UgdXNlIHRoZQorICogbGFzdCBhdmFpbGFibGUgY3JlZGl0LCB3ZSBjYW5ub3QgYWxsb3cgYW5vdGhlciB0aHJlYWQgdG8gcmFjZSB1cworICogYW5kIGdyYWIgdGhlIHBvc3RlZCBjcmVkaXRzIGNvdW50ZXIuICBIZW5jZSwgd2UgaGF2ZSB0byB1c2UgYQorICogc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgY3JlZGl0IGNvdW50ZXIsIG9yIHVzZSBhdG9taWNzLgorICoKKyAqIFNwaW5sb2NrcyBzaGFyZWQgYmV0d2VlbiB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUgcGF0aCBhcmUgYmFkLAorICogYmVjYXVzZSB0aGV5IGNyZWF0ZSB1bm5lY2Vzc2FyeSBkZWxheXMuIEFuIGVhcmx5IGltcGxlbWVudGF0aW9uCisgKiB1c2luZyBhIHNwaW5sb2NrIHNob3dlZCBhIDUlIGRlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgYXQgc29tZQorICogbG9hZHMuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdm9pZHMgc3BpbmxvY2tzIGNvbXBsZXRlbHksIHB1dHRpbmcgYm90aAorICogY291bnRlcnMgaW50byBhIHNpbmdsZSBhdG9taWMsIGFuZCB1cGRhdGluZyB0aGF0IGF0b21pYyB1c2luZworICogYXRvbWljX2FkZCAoaW4gdGhlIHJlY2VpdmUgcGF0aCwgd2hlbiByZWNlaXZpbmcgZnJlc2ggY3JlZGl0cyksCisgKiBhbmQgdXNpbmcgYXRvbWljX2NtcHhjaGcgd2hlbiB1cGRhdGluZyB0aGUgdHdvIGNvdW50ZXJzLgorICovCitpbnQgcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkgICAgIHUzMiB3YW50ZWQsIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCkKK3sKKwl1bnNpZ25lZCBpbnQgYXZhaWwsIHBvc3RlZCwgZ290ID0gMCwgYWR2ZXJ0aXNlOworCWxvbmcgb2xkdmFsLCBuZXd2YWw7CisKKwkqYWR2X2NyZWRpdHMgPSAwOworCWlmICghaWMtPmlfZmxvd2N0bCkKKwkJcmV0dXJuIHdhbnRlZDsKKwordHJ5X2FnYWluOgorCWFkdmVydGlzZSA9IDA7CisJb2xkdmFsID0gbmV3dmFsID0gYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpOworCXBvc3RlZCA9IElCX0dFVF9QT1NUX0NSRURJVFMob2xkdmFsKTsKKwlhdmFpbCA9IElCX0dFVF9TRU5EX0NSRURJVFMob2xkdmFsKTsKKworCXJkc2RlYnVnKCJyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoJXUpOiBjcmVkaXRzPSV1IHBvc3RlZD0ldVxuIiwKKwkJCXdhbnRlZCwgYXZhaWwsIHBvc3RlZCk7CisKKwkvKiBUaGUgbGFzdCBjcmVkaXQgbXVzdCBiZSB1c2VkIHRvIHNlbmQgYSBjcmVkaXQgdXBkYXRlLiAqLworCWlmIChhdmFpbCAmJiAhcG9zdGVkKQorCQlhdmFpbC0tOworCisJaWYgKGF2YWlsIDwgd2FudGVkKSB7CisJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGljLT5pX2NtX2lkLT5jb250ZXh0OworCisJCS8qIE9vcHMsIHRoZXJlIGFyZW4ndCB0aGF0IG1hbnkgY3JlZGl0cyBsZWZ0ISAqLworCQlzZXRfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKTsKKwkJZ290ID0gYXZhaWw7CisJfSBlbHNlIHsKKwkJLyogU29tZXRpbWVzIHlvdSBnZXQgd2hhdCB5b3Ugd2FudCwgbGFsYWxhLiAqLworCQlnb3QgPSB3YW50ZWQ7CisJfQorCW5ld3ZhbCAtPSBJQl9TRVRfU0VORF9DUkVESVRTKGdvdCk7CisKKwkvKgorCSAqIElmIG5lZWRfcG9zdGVkIGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBjYWxsZXIgd2FudHMKKwkgKiB0aGUgcG9zdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgc2VuZCBjcmVkaXRzIGFyZQorCSAqIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAocG9zdGVkICYmIChnb3QgfHwgbmVlZF9wb3N0ZWQpKSB7CisJCWFkdmVydGlzZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcG9zdGVkLCBSRFNfTUFYX0FEVl9DUkVESVQpOworCQluZXd2YWwgLT0gSUJfU0VUX1BPU1RfQ1JFRElUUyhhZHZlcnRpc2UpOworCX0KKworCS8qIEZpbmFsbHkgYmlsbCBldmVyeXRoaW5nICovCisJaWYgKGF0b21pY19jbXB4Y2hnKCZpYy0+aV9jcmVkaXRzLCBvbGR2YWwsIG5ld3ZhbCkgIT0gb2xkdmFsKQorCQlnb3RvIHRyeV9hZ2FpbjsKKworCSphZHZfY3JlZGl0cyA9IGFkdmVydGlzZTsKKwlyZXR1cm4gZ290OworfQorCit2b2lkIHJkc19pd19zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAoY3JlZGl0cyA9PSAwKQorCQlyZXR1cm47CisKKwlyZHNkZWJ1ZygicmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoJXUpOiBjdXJyZW50PSV1JXNcbiIsCisJCQljcmVkaXRzLAorCQkJSUJfR0VUX1NFTkRfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpLAorCQkJdGVzdF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpID8gIiwgbGxfc2VuZF9mdWxsIiA6ICIiKTsKKworCWF0b21pY19hZGQoSUJfU0VUX1NFTkRfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJV0FSTl9PTihJQl9HRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpID49IDE2Mzg0KTsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9jcmVkaXRfdXBkYXRlcyk7Cit9CisKK3ZvaWQgcmRzX2l3X2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChwb3N0ZWQgPT0gMCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZChJQl9TRVRfUE9TVF9DUkVESVRTKHBvc3RlZCksICZpYy0+aV9jcmVkaXRzKTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHNlbmQgYW4gdXBkYXRlIHRvIHRoZSBwZWVyIG5vdy4KKwkgKiBJZiB3ZSB3b3VsZCBzZW5kIGEgY3JlZGl0IHVwZGF0ZSBmb3IgZXZlcnkgc2luZ2xlIGJ1ZmZlciB3ZQorCSAqIHBvc3QsIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGFuIEFDSyBzdG9ybSAoQUNLIGFycml2ZXMsCisJICogY29uc3VtZXMgYnVmZmVyLCB3ZSByZWZpbGwgdGhlIHJpbmcsIHNlbmQgQUNLIHRvIHJlbW90ZQorCSAqIGFkdmVydGlzaW5nIHRoZSBuZXdseSBwb3N0ZWQgYnVmZmVyLi4uIGFkIGluZikKKwkgKgorCSAqIFBlcmZvcm1hbmNlIHByZXR0eSBtdWNoIGRlcGVuZHMgb24gaG93IG9mdGVuIHdlIHNlbmQKKwkgKiBjcmVkaXQgdXBkYXRlcyAtIHRvbyBmcmVxdWVudCB1cGRhdGVzIG1lYW4gbG90cyBvZiBBQ0tzLgorCSAqIFRvbyBpbmZyZXF1ZW50IHVwZGF0ZXMsIGFuZCB0aGUgcGVlciB3aWxsIHJ1biBvdXQgb2YKKwkgKiBjcmVkaXRzIGFuZCBoYXMgdG8gdGhyb3R0bGUuCisJICogRm9yIHRoZSB0aW1lIGJlaW5nLCAxNiBzZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZS4KKwkgKi8KKwlpZiAoSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpID49IDE2KQorCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Jkc19pd194bWl0X3BvcHVsYXRlX3dyKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kLCB1bnNpZ25lZCBpbnQgcG9zLAorCQl1bnNpZ25lZCBsb25nIGJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJaW50IHNlbmRfZmxhZ3MpCit7CisJc3RydWN0IGliX3NnZSAqc2dlOworCisJV0FSTl9PTihwb3MgIT0gc2VuZCAtIGljLT5pX3NlbmRzKTsKKworCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IHNlbmRfZmxhZ3M7CisJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXNlbmQtPnNfd3IubnVtX3NnZSA9IDI7CisJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKwlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisJc2VuZC0+c19vcCA9IE5VTEw7CisKKwlpZiAobGVuZ3RoICE9IDApIHsKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGJ1ZmZlcjsKKwkJc2dlLT5sZW5ndGggPSBsZW5ndGg7CisJCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwl9IGVsc2UgeworCQkvKiBXZSdyZSBzZW5kaW5nIGEgcGFja2V0IHdpdGggbm8gcGF5bG9hZC4gVGhlcmUgaXMgb25seQorCQkgKiBvbmUgU0dFICovCisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNnZSA9ICZzZW5kLT5zX3NnZVswXTsKKwl9CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKHBvcyAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSByZHNfaXdfbG9jYWxfZG1hX2xrZXkoaWMpOworfQorCisvKgorICogVGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIG1lc3NhZ2UuICBUaGUgZmlyc3QgdGltZQorICogd2Ugc2VlIGEgbWVzc2FnZSB3ZSBtYXAgaXRzIHNjYXR0ZXJsaXN0IGludG8gdGhlIElCIGRldmljZSBzbyB0aGF0CisgKiB3ZSBjYW4gcHJvdmlkZSB0aGF0IG1hcHBlZCBhZGRyZXNzIHRvIHRoZSBJQiBzY2F0dGVyIGdhdGhlciBlbnRyaWVzCisgKiBpbiB0aGUgSUIgd29yayByZXF1ZXN0cy4gIFdlIHRyYW5zbGF0ZSB0aGUgc2NhdHRlcmxpc3QgaW50byBhIHNlcmllcworICogb2Ygd29yayByZXF1ZXN0cyB0aGF0IGZyYWdtZW50IHRoZSBtZXNzYWdlLiAgVGhlc2Ugd29yayByZXF1ZXN0cyBjb21wbGV0ZQorICogaW4gb3JkZXIgc28gd2UgcGFzcyBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorICogb25jZSB3ZSBzZW5kIHRoZSBmaW5hbCBmcmFnbWVudC4KKyAqCisgKiBUaGUgUkRTIGNvcmUgdXNlcyB0aGUgY19zZW5kX2xvY2sgdG8gb25seSBlbnRlciB0aGlzIGZ1bmN0aW9uIG9uY2UKKyAqIHBlciBjb25uZWN0aW9uLiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHR4IHJpbmcgYWxsb2MvdW5hbGxvYyBwYWlycworICogZG9uJ3QgZ2V0IG91dCBvZiBzeW5jIGFuZCBjb25mdXNlIHRoZSByaW5nLgorICovCitpbnQgcmRzX2l3X3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQgPSBOVUxMOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpmaXJzdDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqcHJldjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1MzIgcG9zOworCXUzMiBpOworCXUzMiB3b3JrX2FsbG9jOworCXUzMiBjcmVkaXRfYWxsb2M7CisJdTMyIHBvc3RlZDsKKwl1MzIgYWR2X2NyZWRpdHMgPSAwOworCWludCBzZW5kX2ZsYWdzID0gMDsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBmbG93X2NvbnRyb2xsZWQgPSAwOworCisJQlVHX09OKG9mZiAlIFJEU19GUkFHX1NJWkUpOworCUJVR19PTihoZHJfb2ZmICE9IDAgJiYgaGRyX29mZiAhPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCS8qIEZhc3RyZWcgc3VwcG9ydCAqLworCWlmIChyZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKQorCSAmJiAhaWMtPmlfZmFzdHJlZ19wb3N0ZWQpIHsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRklYTUUgd2UgbWF5IG92ZXJhbGxvY2F0ZSBoZXJlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkKKwkJaSA9IDE7CisJZWxzZQorCQlpID0gY2VpbChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pLCBSRFNfRlJBR19TSVpFKTsKKworCXdvcmtfYWxsb2MgPSByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCBpLCAmcG9zKTsKKwlpZiAod29ya19hbGxvYyA9PSAwKSB7CisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlZGl0X2FsbG9jID0gd29ya19hbGxvYzsKKwlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQljcmVkaXRfYWxsb2MgPSByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIHdvcmtfYWxsb2MsICZwb3N0ZWQsIDApOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCWlmIChjcmVkaXRfYWxsb2MgPCB3b3JrX2FsbG9jKSB7CisJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBjcmVkaXRfYWxsb2MpOworCQkJd29ya19hbGxvYyA9IGNyZWRpdF9hbGxvYzsKKwkJCWZsb3dfY29udHJvbGxlZCsrOworCQl9CisJCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfdGhyb3R0bGUpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmIChpYy0+aV9ybSA9PSBOVUxMKSB7CisJCS8qCisJCXByaW50ayhLRVJOX05PVElDRSAicmRzX2l3X3htaXQgcHJlcCBtc2cgZHBvcnQ9JXUgZmxhZ3M9MHgleCBsZW49JWRcbiIsCisJCQkJYmUxNl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfZHBvcnQpLAorCQkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikpOworCQkgICAqLworCQlpZiAocm0tPm1fbmVudHMpIHsKKwkJCXJtLT5tX2NvdW50ID0gaWJfZG1hX21hcF9zZyhkZXYsCisJCQkJCSBybS0+bV9zZywgcm0tPm1fbmVudHMsIERNQV9UT19ERVZJQ0UpOworCQkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgcm0gJXA6ICVkXG4iLCBpYywgcm0sIHJtLT5tX2NvdW50KTsKKwkJCWlmIChybS0+bV9jb3VudCA9PSAwKSB7CisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJcm0tPm1fY291bnQgPSAwOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwkJaWMtPmlfcm0gPSBybTsKKworCQkvKiBGaW5hbGl6ZSB0aGUgaGVhZGVyICovCisJCWlmICh0ZXN0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX0FDS19SRVFVSVJFRDsKKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX1JFVFJBTlNNSVRURUQ7CisKKwkJLyogSWYgaXQgaGFzIGEgUkRNQSBvcCwgdGVsbCB0aGUgcGVlciB3ZSBkaWQgaXQuIFRoaXMgaXMKKwkJICogdXNlZCBieSB0aGUgcGVlciB0byByZWxlYXNlIHVzZS1vbmNlIFJETUEgTVJzLiAqLworCQlpZiAocm0tPm1fcmRtYV9vcCkgeworCQkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgZXh0X2hkcjsKKworCQkJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJtLT5tX3JkbWFfb3AtPnJfa2V5KTsKKwkJCXJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJUkRTX0VYVEhEUl9SRE1BLCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKKwkJfQorCQlpZiAocm0tPm1fcmRtYV9jb29raWUpIHsKKwkJCXJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKCZybS0+bV9pbmMuaV9oZHIsCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpLAorCQkJCQlyZHNfcmRtYV9jb29raWVfb2Zmc2V0KHJtLT5tX3JkbWFfY29va2llKSk7CisJCX0KKworCQkvKiBOb3RlIC0gcmRzX2l3X3BpZ2d5Yl9hY2sgY2xlYXJzIHRoZSBBQ0tfUkVRVUlSRUQgYml0LCBzbworCQkgKiB3ZSBzaG91bGQgbm90IGRvIHRoaXMgdW5sZXNzIHdlIGhhdmUgYSBjaGFuY2Ugb2YgYXQgbGVhc3QKKwkJICogc3RpY2tpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSBzZW5kIHJpbmcuIFdoaWNoIGlzIHdoeSB3ZQorCQkgKiBzaG91bGQgY2FsbCByZHNfaXdfcmluZ19hbGxvYyBmaXJzdC4gKi8KKwkJcm0tPm1faW5jLmlfaGRyLmhfYWNrID0gY3B1X3RvX2JlNjQocmRzX2l3X3BpZ2d5Yl9hY2soaWMpKTsKKwkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bSgmcm0tPm1faW5jLmlfaGRyKTsKKworCQkvKgorCQkgKiBVcGRhdGUgYWR2X2NyZWRpdHMgc2luY2Ugd2UgcmVzZXQgdGhlIEFDS19SRVFVSVJFRCBiaXQuCisJCSAqLworCQlyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDAsICZwb3N0ZWQsIDEpOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCUJVR19PTihhZHZfY3JlZGl0cyA+IDI1NSk7CisJfSBlbHNlIGlmIChpYy0+aV9ybSAhPSBybSkKKwkJQlVHKCk7CisKKwlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisJZmlyc3QgPSBzZW5kOworCXByZXYgPSBOVUxMOworCXNjYXQgPSAmcm0tPm1fc2dbc2ddOworCXNlbnQgPSAwOworCWkgPSAwOworCisJLyogU29tZXRpbWVzIHlvdSB3YW50IHRvIHB1dCBhIGZlbmNlIGJldHdlZW4gYW4gUkRNQQorCSAqIFJFQUQgYW5kIHRoZSBmb2xsb3dpbmcgU0VORC4KKwkgKiBXZSBjb3VsZCBlaXRoZXIgZG8gdGhpcyBhbGwgdGhlIHRpbWUKKwkgKiBvciB3aGVuIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gUmlnaHQgbm93LCB3ZSBsZXQKKwkgKiB0aGUgYXBwbGljYXRpb24gY2hvb3NlLgorCSAqLworCWlmIChybS0+bV9yZG1hX29wICYmIHJtLT5tX3JkbWFfb3AtPnJfZmVuY2UpCisJCXNlbmRfZmxhZ3MgPSBJQl9TRU5EX0ZFTkNFOworCisJLyoKKwkgKiBXZSBjb3VsZCBiZSBjb3B5aW5nIHRoZSBoZWFkZXIgaW50byB0aGUgdW51c2VkIHRhaWwgb2YgdGhlIHBhZ2UuCisJICogVGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSB3aGVuIHRob3NlIHBhZ2VzIG1pZ2h0CisJICogYmUgbWFwcGVkIHVzZXJzcGFjZSBwYWdlcyBvciBwYWdlIGNhY2hlIHBhZ2VzLiAgU28gaW5zdGVhZCB3ZSBhbHdheXMKKwkgKiB1c2UgYSBzZWNvbmQgc2dlIGFuZCBvdXIgbG9uZy1saXZlZCByaW5nIG9mIG1hcHBlZCBoZWFkZXJzLiAgV2Ugc2VuZAorCSAqIHRoZSBoZWFkZXIgYWZ0ZXIgdGhlIGRhdGEgc28gdGhhdCB0aGUgZGF0YSBwYXlsb2FkIGNhbiBiZSBhbGlnbmVkIG9uCisJICogdGhlIHJlY2VpdmVyLgorCSAqLworCisJLyogaGFuZGxlIGEgMC1sZW4gbWVzc2FnZSAqLworCWlmIChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pID09IDApIHsKKwkJcmRzX2l3X3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywgMCwgMCwgc2VuZF9mbGFncyk7CisJCWdvdG8gYWRkX2hlYWRlcjsKKwl9CisKKwkvKiBpZiB0aGVyZSdzIGRhdGEgcmVmZXJlbmNlIGl0IHdpdGggYSBjaGFpbiBvZiB3b3JrIHJlcXMgKi8KKwlmb3IgKDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmcm0tPm1fc2dbcm0tPm1fY291bnRdOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGxlbjsKKworCQlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisKKwkJbGVuID0gbWluKFJEU19GUkFHX1NJWkUsIGliX3NnX2RtYV9sZW4oZGV2LCBzY2F0KSAtIG9mZik7CisJCXJkc19pd194bWl0X3BvcHVsYXRlX3dyKGljLCBzZW5kLCBwb3MsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCBzY2F0KSArIG9mZiwgbGVuLAorCQkJCXNlbmRfZmxhZ3MpOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZQorCQkgKiBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJfQorCisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgLT0gbGVuOworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA8PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJLyoKKwkJICogQWx3YXlzIHNpZ25hbCB0aGUgbGFzdCBvbmUgaWYgd2UncmUgc3RvcHBpbmcgZHVlIHRvIGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChmbG93X2NvbnRyb2xsZWQgJiYgaSA9PSAod29ya19hbGxvYy0xKSkKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJICZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJc2VudCArPSBsZW47CisJCW9mZiArPSBsZW47CisJCWlmIChvZmYgPT0gaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpKSB7CisJCQlzY2F0Kys7CisJCQlvZmYgPSAwOworCQl9CisKK2FkZF9oZWFkZXI6CisJCS8qIFRhY2sgb24gdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YS4gVGhlIGhlYWRlciBTR0Ugc2hvdWxkIGFscmVhZHkKKwkJICogaGF2ZSBiZWVuIHNldCB1cCB0byBwb2ludCB0byB0aGUgcmlnaHQgaGVhZGVyIGJ1ZmZlci4gKi8KKwkJbWVtY3B5KCZpYy0+aV9zZW5kX2hkcnNbcG9zXSwgJnJtLT5tX2luYy5pX2hkciwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkJaWYgKDApIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCXByaW50ayhLRVJOX05PVElDRSAic2VuZCBXUiBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShoZHItPmhfZHBvcnQpLAorCQkJCWhkci0+aF9mbGFncywKKwkJCQliZTMyX3RvX2NwdShoZHItPmhfbGVuKSk7CisJCX0KKwkJaWYgKGFkdl9jcmVkaXRzKSB7CisJCQlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmljLT5pX3NlbmRfaGRyc1twb3NdOworCisJCQkvKiBhZGQgY3JlZGl0IGFuZCByZWRvIHRoZSBoZWFkZXIgY2hlY2tzdW0gKi8KKwkJCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwkJCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwkJCWFkdl9jcmVkaXRzID0gMDsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9jcmVkaXRfdXBkYXRlcyk7CisJCX0KKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCQlwcmV2ID0gc2VuZDsKKworCQlwb3MgPSAocG9zICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwl9CisKKwkvKiBBY2NvdW50IHRoZSBSRFMgaGVhZGVyIGluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2Ugc2VudCwgYnV0IGp1c3Qgb25jZS4KKwkgKiBUaGUgY2FsbGVyIGhhcyBubyBjb25jZXB0IG9mIGZyYWdtZW50YXRpb24uICovCisJaWYgKGhkcl9vZmYgPT0gMCkKKwkJc2VudCArPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZybS0+bV9zZ1tybS0+bV9jb3VudF0pIHsKKwkJcHJldi0+c19ybSA9IGljLT5pX3JtOworCQlwcmV2LT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisJaWYgKGljLT5pX2Zsb3djdGwgJiYgaSA8IGNyZWRpdF9hbGxvYykKKwkJcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0X2FsbG9jIC0gaSk7CisKKwkvKiBYWFggbmVlZCB0byB3b3JyeSBhYm91dCBmYWlsZWRfd3IgYW5kIHBhcnRpYWwgc2VuZHMuICovCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWlmIChwcmV2LT5zX3JtKSB7CisJCQlpYy0+aV9ybSA9IHByZXYtPnNfcm07CisJCQlwcmV2LT5zX3JtID0gTlVMTDsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzZW50Oworb3V0OgorCUJVR19PTihhZHZfY3JlZGl0cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2J1aWxkX3NlbmRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCwgaW50IG5lbnQsIGludCBsZW4sIHU2NCBzZ19hZGRyKQoreworCUJVR19PTihuZW50ID4gc2VuZC0+c19wYWdlX2xpc3QtPm1heF9wYWdlX2xpc3RfbGVuKTsKKwkvKgorCSAqIFBlcmZvcm0gYSBXUiBmb3IgdGhlIGZhc3RfcmVnX21yLiBFYWNoIGluZGl2aWR1YWwgcGFnZQorCSAqIGluIHRoZSBzZyBsaXN0IGlzIGFkZGVkIHRvIHRoZSBmYXN0IHJlZyBwYWdlIGxpc3QgYW5kIHBsYWNlZAorCSAqIGluc2lkZSB0aGUgZmFzdF9yZWdfbXIgV1IuCisJICovCisJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9GQVNUX1JFR19NUjsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmxlbmd0aCA9IGxlbjsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnJrZXkgPSBzZW5kLT5zX21yLT5ya2V5OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gc2VuZC0+c19wYWdlX2xpc3Q7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gbmVudDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSByZHNfaXdkZXYtPnBhZ2Vfc2hpZnQ7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9IHNnX2FkZHI7CisKKwlpYl91cGRhdGVfZmFzdF9yZWdfa2V5KHNlbmQtPnNfbXIsIHNlbmQtPnNfcmVtYXBfY291bnQrKyk7Cit9CisKK2ludCByZHNfaXdfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTY0IHJlbW90ZV9hZGRyID0gb3AtPnJfcmVtb3RlX2FkZHI7CisJdTMyIHBvcywgZnJfcG9zOworCXUzMiB3b3JrX2FsbG9jOworCXUzMiBpOworCXUzMiBqOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IG51bV9zZ2U7CisKKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmICghb3AtPnJfbWFwcGVkKSB7CisJCW9wLT5yX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCQlvcC0+cl9zZywgb3AtPnJfbmVudHMsIChvcC0+cl93cml0ZSkgPworCQkJCQlETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgb3AgJXA6ICVkXG4iLCBpYywgb3AsIG9wLT5yX2NvdW50KTsKKwkJaWYgKG9wLT5yX2NvdW50ID09IDApIHsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9zZ19tYXBwaW5nX2ZhaWx1cmUpOworCQkJcmV0ID0gLUVOT01FTTsgLyogWFhYID8gKi8KKwkJCWdvdG8gb3V0OworCQl9CisKKwkJb3AtPnJfbWFwcGVkID0gMTsKKwl9CisKKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCS8qIEFsbG9jIHNwYWNlIG9uIHRoZSBzZW5kIHF1ZXVlIGZvciB0aGUgZmFzdHJlZyAqLworCQl3b3JrX2FsbG9jID0gcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgMSwgJmZyX3Bvcyk7CisJCWlmICh3b3JrX2FsbG9jICE9IDEpIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogSW5zdGVhZCBvZiBrbm93aW5nIGhvdyB0byByZXR1cm4gYSBwYXJ0aWFsIHJkbWEgcmVhZC93cml0ZSB3ZSBpbnNpc3QgdGhhdCB0aGVyZQorCSAqIGJlIGVub3VnaCB3b3JrIHJlcXVlc3RzIHRvIHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlLgorCSAqLworCWkgPSBjZWlsKG9wLT5yX2NvdW50LCByZHNfaXdkZXYtPm1heF9zZ2UpOworCisJd29ya19hbGxvYyA9IHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jICE9IGkpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3JpbmdfZnVsbCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCWZpcnN0ID0gcHJldiA9ICZpYy0+aV9zZW5kc1tmcl9wb3NdOworCX0gZWxzZSB7CisJCWZpcnN0ID0gc2VuZDsKKwkJcHJldiA9IE5VTEw7CisJfQorCXNjYXQgPSAmb3AtPnJfc2dbMF07CisJc2VudCA9IDA7CisJbnVtX3NnZSA9IG9wLT5yX2NvdW50OworCisJZm9yIChpID0gMDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBpKyspIHsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c19xdWV1ZWQgPSBqaWZmaWVzOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZSBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJfQorCisJCS8qIFRvIGF2b2lkIHRoZSBuZWVkIHRvIGhhdmUgdGhlIHBsdW1iaW5nIHRvIGludmFsaWRhdGUgdGhlIGZhc3RyZWdfbXIgdXNlZAorCQkgKiBmb3IgbG9jYWwgYWNjZXNzIGFmdGVyIFJEUyBpcyBmaW5pc2hlZCB3aXRoIGl0LCB1c2luZworCQkgKiBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlYgd2lsbCBpbnZhbGlkYXRlIGl0IGFmdGVyIHRoZSByZWFkIGhhcyBjb21wbGV0ZWQuCisJCSAqLworCQlpZiAob3AtPnJfd3JpdGUpCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1JETUFfV1JJVEU7CisJCWVsc2UKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOworCisJCXNlbmQtPnNfd3Iud3IucmRtYS5yZW1vdGVfYWRkciA9IHJlbW90ZV9hZGRyOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmtleSA9IG9wLT5yX2tleTsKKwkJc2VuZC0+c19vcCA9IG9wOworCisJCWlmIChudW1fc2dlID4gcmRzX2l3ZGV2LT5tYXhfc2dlKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJCQludW1fc2dlIC09IHJkc19pd2Rldi0+bWF4X3NnZTsKKwkJfSBlbHNlCisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSBudW1fc2dlOworCisJCXNlbmQtPnNfd3IubmV4dCA9IE5VTEw7CisKKwkJaWYgKHByZXYpCisJCQlwcmV2LT5zX3dyLm5leHQgPSAmc2VuZC0+c193cjsKKworCQlmb3IgKGogPSAwOyBqIDwgc2VuZC0+c193ci5udW1fc2dlICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaisrKSB7CisJCQlsZW4gPSBpYl9zZ19kbWFfbGVuKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCisJCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WKQorCQkJCXNlbmQtPnNfcGFnZV9saXN0LT5wYWdlX2xpc3Rbal0gPSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCWVsc2UgeworCQkJCXNlbmQtPnNfc2dlW2pdLmFkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCQlzZW5kLT5zX3NnZVtqXS5sZW5ndGggPSBsZW47CisJCQkJc2VuZC0+c19zZ2Vbal0ubGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7CisJCQl9CisKKwkJCXNlbnQgKz0gbGVuOworCQkJcmRzZGVidWcoImljICVwIHNlbnQgJWQgcmVtb3RlX2FkZHIgJWxsdVxuIiwgaWMsIHNlbnQsIHJlbW90ZV9hZGRyKTsKKwkJCXJlbW90ZV9hZGRyICs9IGxlbjsKKworCQkJc2NhdCsrOworCQl9CisKKwkJaWYgKHNlbmQtPnNfd3Iub3Bjb2RlID09IElCX1dSX1JETUFfUkVBRF9XSVRIX0lOVikgeworCQkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJCXNlbmQtPnNfc2dlWzBdLmFkZHIgPSBjb25uLT5jX3htaXRfcm0tPm1fcnMtPnJzX3VzZXJfYWRkcjsKKwkJCXNlbmQtPnNfc2dlWzBdLmxlbmd0aCA9IGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9ieXRlczsKKwkJCXNlbmQtPnNfc2dlWzBdLmxrZXkgPSBpYy0+aV9zZW5kc1tmcl9wb3NdLnNfbXItPmxrZXk7CisJCX0KKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXByZXYgPSBzZW5kOworCQlpZiAoKytzZW5kID09ICZpYy0+aV9zZW5kc1tpYy0+aV9zZW5kX3Jpbmcud19ucl0pCisJCQlzZW5kID0gaWMtPmlfc2VuZHM7CisJfQorCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF0pCisJCWZpcnN0LT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisKKwkvKiBPbiBpV0FSUCwgbG9jYWwgbWVtb3J5IGFjY2VzcyBieSBhIHJlbW90ZSBzeXN0ZW0gKGllLCBSRE1BIFJlYWQpIGlzIG5vdAorCSAqIHJlY29tbWVuZGVkLiAgUHV0dGluZyB0aGUgbGtleSBvbiB0aGUgd2lyZSBpcyBhIHNlY3VyaXR5IGhvbGUsIGFzIGl0IGNhbgorCSAqIGFsbG93IGZvciBtZW1vcnkgYWNjZXNzIHRvIGFsbCBvZiBtZW1vcnkgb24gdGhlIHJlbW90ZSBzeXN0ZW0uICBTb21lCisJICogYWRhcHRlcnMgZG8gbm90IGFsbG93IHVzaW5nIHRoZSBsa2V5IGZvciB0aGlzIGF0IGFsbC4gIFRvIGJ5cGFzcyB0aGlzIHVzZSBhCisJICogZmFzdHJlZ19tciAob3IgcG9zc2libHkgYSBkbWFfbXIpCisJICovCisJaWYgKCFvcC0+cl93cml0ZSkgeworCQlyZHNfaXdfYnVpbGRfc2VuZF9mYXN0cmVnKHJkc19pd2RldiwgaWMsICZpYy0+aV9zZW5kc1tmcl9wb3NdLAorCQkJb3AtPnJfY291bnQsIHNlbnQsIGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9hZGRyKTsKKwkJd29ya19hbGxvYysrOworCX0KKworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiByZG1hIGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogV2UgbWF5IGhhdmUgYSBwZW5kaW5nIEFDSyBvciB3aW5kb3cgdXBkYXRlIHdlIHdlcmUgdW5hYmxlCisJICogdG8gc2VuZCBwcmV2aW91c2x5IChkdWUgdG8gZmxvdyBjb250cm9sKS4gVHJ5IGFnYWluLiAqLworCXJkc19pd19hdHRlbXB0X2FjayhpYyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3N0YXRzLmMgYi9uZXQvcmRzL2l3X3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjN2U4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfc3RhdHMuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaXdfc3RhdGlzdGljcywgcmRzX2l3X3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBjaGFyICpyZHNfaXdfc3RhdF9uYW1lc1tdID0geworCSJpd19jb25uZWN0X3JhY2VkIiwKKwkiaXdfbGlzdGVuX2Nsb3NlZF9zdGFsZSIsCisJIml3X3R4X2NxX2NhbGwiLAorCSJpd190eF9jcV9ldmVudCIsCisJIml3X3R4X3JpbmdfZnVsbCIsCisJIml3X3R4X3Rocm90dGxlIiwKKwkiaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlIiwKKwkiaXdfdHhfc3RhbGxlZCIsCisJIml3X3R4X2NyZWRpdF91cGRhdGVzIiwKKwkiaXdfcnhfY3FfY2FsbCIsCisJIml3X3J4X2NxX2V2ZW50IiwKKwkiaXdfcnhfcmluZ19lbXB0eSIsCisJIml3X3J4X3JlZmlsbF9mcm9tX2NxIiwKKwkiaXdfcnhfcmVmaWxsX2Zyb21fdGhyZWFkIiwKKwkiaXdfcnhfYWxsb2NfbGltaXQiLAorCSJpd19yeF9jcmVkaXRfdXBkYXRlcyIsCisJIml3X2Fja19zZW50IiwKKwkiaXdfYWNrX3NlbmRfZmFpbHVyZSIsCisJIml3X2Fja19zZW5kX2RlbGF5ZWQiLAorCSJpd19hY2tfc2VuZF9waWdneWJhY2tlZCIsCisJIml3X2Fja19yZWNlaXZlZCIsCisJIml3X3JkbWFfbXJfYWxsb2MiLAorCSJpd19yZG1hX21yX2ZyZWUiLAorCSJpd19yZG1hX21yX3VzZWQiLAorCSJpd19yZG1hX21yX3Bvb2xfZmx1c2giLAorCSJpd19yZG1hX21yX3Bvb2xfd2FpdCIsCisJIml3X3JkbWFfbXJfcG9vbF9kZXBsZXRlZCIsCit9OworCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKworCWlmIChhdmFpbCA8IEFSUkFZX1NJWkUocmRzX2l3X3N0YXRfbmFtZXMpKQorCQlnb3RvIG91dDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfaXdfc3RhdHMsIGNwdSkpOworCQlzdW0gPSAodWludDY0X3QgKikmc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaSsrKQorCQkJKihzdW0rKykgKz0gKihzcmMrKyk7CisJfQorCisJcmRzX3N0YXRzX2luZm9fY29weShpdGVyLCAodWludDY0X3QgKikmc3RhdHMsIHJkc19pd19zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX2l3X3N0YXRfbmFtZXMpKTsKK291dDoKKwlyZXR1cm4gQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3N5c2N0bC5jIGIvbmV0L3Jkcy9pd19zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTkwNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19zeXNjdGwuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfaXdfc3lzY3RsX2hkcjsKKwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyID0gUkRTX0lXX0RFRkFVTFRfU0VORF9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93ciA9IFJEU19JV19ERUZBVUxUX1JFQ1ZfV1I7Cit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9ICgxMjggKiAxMDI0ICogMTAyNCkgLyBSRFNfRlJBR19TSVpFOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWluID0gMTsKKy8qIGhhcmR3YXJlIHdpbGwgZmFpbCBDUSBjcmVhdGlvbiBsb25nIGJlZm9yZSB0aGlzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF93cl9tYXggPSAodTMyKX4wOworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dycyA9IDE2Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyX21heCA9IDY0OworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzID0gKDE2IDw8IDIwKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlc19tYXggPSB+MFVMOworCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wgPSAxOworCitjdGxfdGFibGUgcmRzX2l3X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfc2VuZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl93ciIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfdW5zaWduYWxlZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlc19taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl9hbGxvY2F0aW9uIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJmbG93X2NvbnRyb2wiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfaXdfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgLnByb2NuYW1lID0gIml3IiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCit2b2lkIHJkc19pd19zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfaXdfc3lzY3RsX2hkcikKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX2l3X3N5c2N0bF9oZHIpOworfQorCitpbnQgX19pbml0IHJkc19pd19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19pd19zeXNjdGxfaGRyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKHJkc19pd19zeXNjdGxfcGF0aCwgcmRzX2l3X3N5c2N0bF90YWJsZSk7CisJaWYgKHJkc19pd19zeXNjdGxfaGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9sb29wLmMgYi9uZXQvcmRzL2xvb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTYxOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9sb29wLmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9vcF9jb25uc19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQobG9vcF9jb25ucyk7CisKKy8qCisgKiBUaGlzICdsb29wYmFjaycgdHJhbnNwb3J0IGlzIGEgc3BlY2lhbCBjYXNlIGZvciBmbG93cyB0aGF0IG9yaWdpbmF0ZQorICogYW5kIHRlcm1pbmF0ZSBvbiB0aGUgc2FtZSBtYWNoaW5lLgorICoKKyAqIENvbm5lY3Rpb24gYnVpbGQtdXAgbm90aWNlcyBpZiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpcyB0aG91Z2h0IG9mCisgKiBhcyBhIGxvY2FsIGFkZHJlc3MgYnkgYSB0cmFuc3BvcnQuICBBdCB0aGF0IHRpbWUgaXQgZGVjaWRlcyB0byB1c2UgdGhlCisgKiBsb29wYmFjayB0cmFuc3BvcnQgaW5zdGVhZCBvZiB0aGUgYm91bmQgdHJhbnNwb3J0IG9mIHRoZSBzZW5kaW5nIHNvY2tldC4KKyAqCisgKiBUaGUgbG9vcGJhY2sgdHJhbnNwb3J0J3Mgc2VuZGluZyBwYXRoIGp1c3QgaGFuZHMgdGhlIHNlbnQgcmRzX21lc3NhZ2UKKyAqIHN0cmFpZ2h0IHRvIHRoZSByZWNlaXZpbmcgcGF0aCB2aWEgYW4gZW1iZWRkZWQgcmRzX2luY29taW5nLgorICovCisKKy8qCisgKiBVc3VhbGx5IGEgbWVzc2FnZSB0cmFuc2l0cyBib3RoIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyJ3MgY29ubnMgYXMgaXQKKyAqIGZsb3dzIHRvIHRoZSByZWNlaXZlci4gIEluIHRoZSBsb29wYmFjayBjYXNlLCB0aG91Z2gsIHRoZSByZWNlaXZlIHBhdGgKKyAqIGlzIGhhbmRlZCB0aGUgc2VuZGluZyBjb25uIHNvIHRoZSBzZW5zZSBvZiB0aGUgYWRkcmVzc2VzIGlzIHJldmVyc2VkLgorICovCitzdGF0aWMgaW50IHJkc19sb29wX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJIHVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csCisJCQkgdW5zaWduZWQgaW50IG9mZikKK3sKKwlCVUdfT04oaGRyX29mZiB8fCBzZyB8fCBvZmYpOworCisJcmRzX2luY19pbml0KCZybS0+bV9pbmMsIGNvbm4sIGNvbm4tPmNfbGFkZHIpOworCXJkc19tZXNzYWdlX2FkZHJlZihybSk7IC8qIGZvciB0aGUgaW5jICovCisKKwlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2xhZGRyLCBjb25uLT5jX2ZhZGRyLCAmcm0tPm1faW5jLAorCQkJICBHRlBfS0VSTkVMLCBLTV9VU0VSMCk7CisKKwlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSwKKwkJCSAgICBOVUxMKTsKKworCXJkc19pbmNfcHV0KCZybS0+bV9pbmMpOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKyBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworfQorCitzdGF0aWMgaW50IHJkc19sb29wX3htaXRfY29uZ19tYXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLAorCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJQlVHX09OKG9mZnNldCk7CisJQlVHX09OKG1hcCAhPSBjb25uLT5jX2xjb25nKTsKKworCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVM7IGkrKykgeworCQltZW1jcHkoKHZvaWQgKiljb25uLT5jX2Zjb25nLT5tX3BhZ2VfYWRkcnNbaV0sCisJCSAgICAgICAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldLCBQQUdFX1NJWkUpOworCX0KKworCXJkc19jb25nX21hcF91cGRhdGVkKGNvbm4tPmNfZmNvbmcsIH4odTY0KSAwKTsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICsgUkRTX0NPTkdfTUFQX0JZVEVTOworfQorCisvKiB3ZSBuZWVkIHRvIGF0IGxlYXN0IGdpdmUgdGhlIHRocmVhZCBzb21ldGhpbmcgdG8gc3VjY2VlZCAqLworc3RhdGljIGludCByZHNfbG9vcF9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24geworCXN0cnVjdCBsaXN0X2hlYWQgbG9vcF9ub2RlOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKK307CisKKy8qCisgKiBFdmVuIHRoZSBsb29wYmFjayB0cmFuc3BvcnQgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiBpdHMgY29ubmVjdGlvbnMsCisgKiBzbyBpdCBjYW4gY2FsbCByZHNfY29ubl9kZXN0cm95KCkgb24gdGhlbSBvbiBleGl0LiBOLkIuIHRoZXJlIGFyZQorICogMSsgbG9vcGJhY2sgYWRkcmVzc2VzICgxMjcuKi4qLiopIHNvIGl0J3Mgbm90IGEgYnVnIHRvIGhhdmUKKyAqIG11bHRpcGxlIGxvb3BiYWNrIGNvbm5zIGFsbG9jYXRlZCwgYWx0aG91Z2ggcmF0aGVyIHVzZWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2xvb3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAobGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmbGMtPmxvb3Bfbm9kZSk7CisJbGMtPmNvbm4gPSBjb25uOworCWNvbm4tPmNfdHJhbnNwb3J0X2RhdGEgPSBsYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb29wX2Nvbm5zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZsYy0+bG9vcF9ub2RlLCAmbG9vcF9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9vcF9jb25uc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmRzX2xvb3BfY29ubl9mcmVlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGMgPSBhcmc7CisJcmRzZGVidWcoImxjICVwXG4iLCBsYyk7CisJbGlzdF9kZWwoJmxjLT5sb29wX25vZGUpOworCWtmcmVlKGxjKTsKK30KKworc3RhdGljIGludCByZHNfbG9vcF9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfbG9vcF9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKK30KKwordm9pZCByZHNfbG9vcF9leGl0KHZvaWQpCit7CisJc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24gKmxjLCAqX2xjOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmbG9vcF9jb25uc19sb2NrKTsKKwlsaXN0X3NwbGljZSgmbG9vcF9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbG9vcF9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxKCZsb29wX2Nvbm5zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxjLCBfbGMsICZ0bXBfbGlzdCwgbG9vcF9ub2RlKSB7CisJCVdBUk5fT04obGMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3kobGMtPmNvbm4pOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgbWlzc2luZyAueG1pdF8qIGJlY2F1c2UgbG9vcCBkb2Vzbid0IGdvIHRocm91Z2ggZ2VuZXJpYworICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmQKKyAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJ3QgaXRlcmF0ZSBvdmVyCisgKiByZHNfbG9vcF90cmFuc3BvcnQuCisgKi8KK3N0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19sb29wX3RyYW5zcG9ydCA9IHsKKwkueG1pdAkJCT0gcmRzX2xvb3BfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSByZHNfbG9vcF94bWl0X2NvbmdfbWFwLAorCS5yZWN2CQkJPSByZHNfbG9vcF9yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc19sb29wX2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfbG9vcF9jb25uX2ZyZWUsCisJLmNvbm5fY29ubmVjdAkJPSByZHNfbG9vcF9jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX2xvb3BfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19tZXNzYWdlX2luY19jb3B5X3RvX3VzZXIsCisJLmluY19wdXJnZQkJPSByZHNfbWVzc2FnZV9pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc19tZXNzYWdlX2luY19mcmVlLAorCS50X25hbWUJCQk9ICJsb29wYmFjayIsCit9OwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9sb29wLmggYi9uZXQvcmRzL2xvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJiMDkzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9sb29wLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9SRFNfTE9PUF9ICisjZGVmaW5lIF9SRFNfTE9PUF9ICisKKy8qIGxvb3AuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19sb29wX3RyYW5zcG9ydDsKKwordm9pZCByZHNfbG9vcF9leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExNWRjOAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKTsKKworc3RhdGljIHVuc2lnbmVkIGludAlyZHNfZXh0aGRyX3NpemVbX19SRFNfRVhUSERSX01BWF0gPSB7CitbUkRTX0VYVEhEUl9OT05FXQk9IDAsCitbUkRTX0VYVEhEUl9WRVJTSU9OXQk9IHNpemVvZihzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiksCitbUkRTX0VYVEhEUl9SRE1BXQk9IHNpemVvZihzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSksCitbUkRTX0VYVEhEUl9SRE1BX0RFU1RdCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QpLAorfTsKKworCit2b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXJkc2RlYnVnKCJhZGRyZWYgcm0gJXAgcmVmICVkXG4iLCBybSwgYXRvbWljX3JlYWQoJnJtLT5tX3JlZmNvdW50KSk7CisJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOworfQorCisvKgorICogVGhpcyByZWxpZXMgb24gZG1hX21hcF9zZygpIG5vdCB0b3VjaGluZyBzZ1tdLnBhZ2UgZHVyaW5nIG1lcmdpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJaWYgKHVubGlrZWx5KHRlc3RfYml0KFJEU19NU0dfUEFHRVZFQywgJnJtLT5tX2ZsYWdzKSkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBybS0+bV9uZW50czsgaSsrKSB7CisJCXJkc2RlYnVnKCJwdXR0aW5nIGRhdGEgcGFnZSAlcFxuIiwgKHZvaWQgKilzZ19wYWdlKCZybS0+bV9zZ1tpXSkpOworCQkvKiBYWFggd2lsbCBoYXZlIHRvIHB1dF9wYWdlIGZvciBwYWdlIHJlZnMgKi8KKwkJX19mcmVlX3BhZ2Uoc2dfcGFnZSgmcm0tPm1fc2dbaV0pKTsKKwl9CisJcm0tPm1fbmVudHMgPSAwOworCisJaWYgKHJtLT5tX3JkbWFfb3ApCisJCXJkc19yZG1hX2ZyZWVfb3Aocm0tPm1fcmRtYV9vcCk7CisJaWYgKHJtLT5tX3JkbWFfbXIpCisJCXJkc19tcl9wdXQocm0tPm1fcmRtYV9tcik7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19tZXNzYWdlLCBtX2luYyk7CisJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOworfQorCit2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXJkc2RlYnVnKCJwdXQgcm0gJXAgcmVmICVkXG4iLCBybSwgYXRvbWljX3JlYWQoJnJtLT5tX3JlZmNvdW50KSk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcm0tPm1fcmVmY291bnQpKSB7CisJCUJVR19PTighbGlzdF9lbXB0eSgmcm0tPm1fc29ja19pdGVtKSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmcm0tPm1fY29ubl9pdGVtKSk7CisJCXJkc19tZXNzYWdlX3B1cmdlKHJtKTsKKworCQlrZnJlZShybSk7CisJfQorfQorCit2b2lkIHJkc19tZXNzYWdlX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19tZXNzYWdlLCBtX2luYyk7CisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoc3RydWN0IHJkc19oZWFkZXIgKmhkciwgX19iZTE2IHNwb3J0LAorCQkJCSBfX2JlMTYgZHBvcnQsIHU2NCBzZXEpCit7CisJaGRyLT5oX2ZsYWdzID0gMDsKKwloZHItPmhfc3BvcnQgPSBzcG9ydDsKKwloZHItPmhfZHBvcnQgPSBkcG9ydDsKKwloZHItPmhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChzZXEpOworCWhkci0+aF9leHRoZHJbMF0gPSBSRFNfRVhUSERSX05PTkU7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCXVuc2lnbmVkIGludCB0eXBlLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBleHRfbGVuID0gc2l6ZW9mKHU4KSArIGxlbjsKKwl1bnNpZ25lZCBjaGFyICpkc3Q7CisKKwkvKiBGb3Igbm93LCByZWZ1c2UgdG8gYWRkIG1vcmUgdGhhbiBvbmUgZXh0ZW5zaW9uIGhlYWRlciAqLworCWlmIChoZHItPmhfZXh0aGRyWzBdICE9IFJEU19FWFRIRFJfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodHlwZSA+PSBfX1JEU19FWFRIRFJfTUFYCisJIHx8IGxlbiAhPSByZHNfZXh0aGRyX3NpemVbdHlwZV0pCisJCXJldHVybiAwOworCisJaWYgKGV4dF9sZW4gPj0gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCXJldHVybiAwOworCWRzdCA9IGhkci0+aF9leHRoZHI7CisKKwkqZHN0KysgPSB0eXBlOworCW1lbWNweShkc3QsIGRhdGEsIGxlbik7CisKKwlkc3RbbGVuXSA9IFJEU19FWFRIRFJfTk9ORTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIElmIGEgbWVzc2FnZSBoYXMgZXh0ZW5zaW9uIGhlYWRlcnMsIHJldHJpZXZlIHRoZW0gaGVyZS4KKyAqIENhbGwgbGlrZSB0aGlzOgorICoKKyAqIHVuc2lnbmVkIGludCBwb3MgPSAwOworICoKKyAqIHdoaWxlICgxKSB7CisgKglidWZsZW4gPSBzaXplb2YoYnVmZmVyKTsKKyAqCXR5cGUgPSByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihoZHIsICZwb3MsIGJ1ZmZlciwgJmJ1Zmxlbik7CisgKglpZiAodHlwZSA9PSBSRFNfRVhUSERSX05PTkUpCisgKgkJYnJlYWs7CisgKgkuLi4KKyAqIH0KKyAqLworaW50IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCXVuc2lnbmVkIGludCAqcG9zLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCAqYnVmbGVuKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQsIGV4dF90eXBlLCBleHRfbGVuOworCXU4ICpzcmMgPSBoZHItPmhfZXh0aGRyOworCisJb2Zmc2V0ID0gKnBvczsKKwlpZiAob2Zmc2V0ID49IFJEU19IRUFERVJfRVhUX1NQQUNFKQorCQlnb3RvIG5vbmU7CisKKwkvKiBHZXQgdGhlIGV4dGVuc2lvbiB0eXBlIGFuZCBsZW5ndGguIEZvciBub3csIHRoZQorCSAqIGxlbmd0aCBpcyBpbXBsaWVkIGJ5IHRoZSBleHRlbnNpb24gdHlwZS4gKi8KKwlleHRfdHlwZSA9IHNyY1tvZmZzZXQrK107CisKKwlpZiAoZXh0X3R5cGUgPT0gUkRTX0VYVEhEUl9OT05FIHx8IGV4dF90eXBlID49IF9fUkRTX0VYVEhEUl9NQVgpCisJCWdvdG8gbm9uZTsKKwlleHRfbGVuID0gcmRzX2V4dGhkcl9zaXplW2V4dF90eXBlXTsKKwlpZiAob2Zmc2V0ICsgZXh0X2xlbiA+IFJEU19IRUFERVJfRVhUX1NQQUNFKQorCQlnb3RvIG5vbmU7CisKKwkqcG9zID0gb2Zmc2V0ICsgZXh0X2xlbjsKKwlpZiAoZXh0X2xlbiA8ICpidWZsZW4pCisJCSpidWZsZW4gPSBleHRfbGVuOworCW1lbWNweShidWYsIHNyYyArIG9mZnNldCwgKmJ1Zmxlbik7CisJcmV0dXJuIGV4dF90eXBlOworCitub25lOgorCSpwb3MgPSBSRFNfSEVBREVSX0VYVF9TUEFDRTsKKwkqYnVmbGVuID0gMDsKKwlyZXR1cm4gUkRTX0VYVEhEUl9OT05FOworfQorCitpbnQgcmRzX21lc3NhZ2VfYWRkX3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCB2ZXJzaW9uKQoreworCXN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uIGV4dF9oZHI7CisKKwlleHRfaGRyLmhfdmVyc2lvbiA9IGNwdV90b19iZTMyKHZlcnNpb24pOworCXJldHVybiByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKGhkciwgUkRTX0VYVEhEUl9WRVJTSU9OLCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKK30KKworaW50IHJkc19tZXNzYWdlX2dldF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgKnZlcnNpb24pCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gZXh0X2hkcjsKKwl1bnNpZ25lZCBpbnQgcG9zID0gMCwgbGVuID0gc2l6ZW9mKGV4dF9oZHIpOworCisJLyogV2UgYXNzdW1lIHRoZSB2ZXJzaW9uIGV4dGVuc2lvbiBpcyB0aGUgb25seSBvbmUgcHJlc2VudCAqLworCWlmIChyZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihoZHIsICZwb3MsICZleHRfaGRyLCAmbGVuKSAhPSBSRFNfRVhUSERSX1ZFUlNJT04pCisJCXJldHVybiAwOworCSp2ZXJzaW9uID0gYmUzMl90b19jcHUoZXh0X2hkci5oX3ZlcnNpb24pOworCXJldHVybiAxOworfQorCitpbnQgcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdTMyIHJfa2V5LCB1MzIgb2Zmc2V0KQoreworCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QgZXh0X2hkcjsKKworCWV4dF9oZHIuaF9yZG1hX3JrZXkgPSBjcHVfdG9fYmUzMihyX2tleSk7CisJZXh0X2hkci5oX3JkbWFfb2Zmc2V0ID0gY3B1X3RvX2JlMzIob2Zmc2V0KTsKKwlyZXR1cm4gcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihoZHIsIFJEU19FWFRIRFJfUkRNQV9ERVNULCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKK30KKworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9hbGxvYyh1bnNpZ25lZCBpbnQgbmVudHMsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJcm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX21lc3NhZ2UpICsKKwkJICAgICAobmVudHMgKiBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSksIGdmcCk7CisJaWYgKCFybSkKKwkJZ290byBvdXQ7CisKKwlpZiAobmVudHMpCisJCXNnX2luaXRfdGFibGUocm0tPm1fc2csIG5lbnRzKTsKKwlhdG9taWNfc2V0KCZybS0+bV9yZWZjb3VudCwgMSk7CisJSU5JVF9MSVNUX0hFQUQoJnJtLT5tX3NvY2tfaXRlbSk7CisJSU5JVF9MSVNUX0hFQUQoJnJtLT5tX2Nvbm5faXRlbSk7CisJc3Bpbl9sb2NrX2luaXQoJnJtLT5tX3JzX2xvY2spOworCitvdXQ6CisJcmV0dXJuIHJtOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX21hcF9wYWdlcyh1bnNpZ25lZCBsb25nICpwYWdlX2FkZHJzLCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgaW50IGk7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKGNlaWwodG90YWxfbGVuLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocm0gPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzZXRfYml0KFJEU19NU0dfUEFHRVZFQywgJnJtLT5tX2ZsYWdzKTsKKwlybS0+bV9pbmMuaV9oZHIuaF9sZW4gPSBjcHVfdG9fYmUzMih0b3RhbF9sZW4pOworCXJtLT5tX25lbnRzID0gY2VpbCh0b3RhbF9sZW4sIFBBR0VfU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm0tPm1fbmVudHM7ICsraSkgeworCQlzZ19zZXRfcGFnZSgmcm0tPm1fc2dbaV0sCisJCQkJdmlydF90b19wYWdlKHBhZ2VfYWRkcnNbaV0pLAorCQkJCVBBR0VfU0laRSwgMCk7CisJfQorCisJcmV0dXJuIHJtOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2NvcHlfZnJvbV91c2VyKHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJCQkgICAgICAgc2l6ZV90IHRvdGFsX2xlbikKK3sKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBpb3Zfb2ZmOworCXVuc2lnbmVkIGxvbmcgc2dfb2ZmOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJc3RydWN0IGlvdmVjICppb3Y7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgcmV0OworCisJcm0gPSByZHNfbWVzc2FnZV9hbGxvYyhjZWlsKHRvdGFsX2xlbiwgUEFHRV9TSVpFKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJtID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcm0tPm1faW5jLmlfaGRyLmhfbGVuID0gY3B1X3RvX2JlMzIodG90YWxfbGVuKTsKKworCS8qCisJICogbm93IGFsbG9jYXRlIGFuZCBjb3B5IGluIHRoZSBkYXRhIHBheWxvYWQuCisJICovCisJc2cgPSBybS0+bV9zZzsKKwlpb3YgPSBmaXJzdF9pb3Y7CisJaW92X29mZiA9IDA7CisJc2dfb2ZmID0gMDsgLyogRGVhciBnY2MsIHNnLT5wYWdlIHdpbGwgYmUgbnVsbCBmcm9tIGt6YWxsb2MuICovCisKKwl3aGlsZSAodG90YWxfbGVuKSB7CisJCWlmIChzZ19wYWdlKHNnKSA9PSBOVUxMKSB7CisJCQlyZXQgPSByZHNfcGFnZV9yZW1haW5kZXJfYWxsb2Moc2csIHRvdGFsX2xlbiwKKwkJCQkJCSAgICAgICBHRlBfSElHSFVTRVIpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJCXJtLT5tX25lbnRzKys7CisJCQlzZ19vZmYgPSAwOworCQl9CisKKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBzZy0+bGVuZ3RoIC0gc2dfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgdG90YWxfbGVuKTsKKworCQlyZHNkZWJ1ZygiY29weWluZyAlbHUgYnl0ZXMgZnJvbSB1c2VyIGlvdiBbJXAsICV6dV0gKyAlbHUgdG8gIgorCQkJICJzZyBbJXAsICV1LCAldV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJICh2b2lkICopc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIHNnX29mZik7CisKKwkJcmV0ID0gcmRzX3BhZ2VfY29weV9mcm9tX3VzZXIoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQgKyBzZ19vZmYsCisJCQkJCSAgICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCWlvdl9vZmYgKz0gdG9fY29weTsKKwkJdG90YWxfbGVuIC09IHRvX2NvcHk7CisJCXNnX29mZiArPSB0b19jb3B5OworCisJCWlmIChzZ19vZmYgPT0gc2ctPmxlbmd0aCkKKwkJCXNnKys7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlpZiAocmV0KSB7CisJCWlmIChybSkKKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCXJtID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gcm07Cit9CisKK2ludCByZHNfbWVzc2FnZV9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJCQkgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJc3RydWN0IGlvdmVjICppb3Y7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBpb3Zfb2ZmOworCXVuc2lnbmVkIGxvbmcgdmVjX29mZjsKKwlpbnQgY29waWVkOworCWludCByZXQ7CisJdTMyIGxlbjsKKworCXJtID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19tZXNzYWdlLCBtX2luYyk7CisJbGVuID0gYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKworCWlvdiA9IGZpcnN0X2lvdjsKKwlpb3Zfb2ZmID0gMDsKKwlzZyA9IHJtLT5tX3NnOworCXZlY19vZmYgPSAwOworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgc2l6ZSAmJiBjb3BpZWQgPCBsZW4pIHsKKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBzZy0+bGVuZ3RoIC0gdmVjX29mZik7CisJCXRvX2NvcHkgPSBtaW5fdChzaXplX3QsIHRvX2NvcHksIHNpemUgLSBjb3BpZWQpOworCQl0b19jb3B5ID0gbWluX3QodW5zaWduZWQgbG9uZywgdG9fY29weSwgbGVuIC0gY29waWVkKTsKKworCQlyZHNkZWJ1ZygiY29weWluZyAlbHUgYnl0ZXMgdG8gdXNlciBpb3YgWyVwLCAlenVdICsgJWx1IHRvICIKKwkJCSAic2cgWyVwLCAldSwgJXVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSBzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgdmVjX29mZik7CisKKwkJcmV0ID0gcmRzX3BhZ2VfY29weV90b191c2VyKHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0ICsgdmVjX29mZiwKKwkJCQkJICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgdG9fY29weSk7CisJCWlmIChyZXQpIHsKKwkJCWNvcGllZCA9IHJldDsKKwkJCWJyZWFrOworCQl9CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQl2ZWNfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCisJCWlmICh2ZWNfb2ZmID09IHNnLT5sZW5ndGgpIHsKKwkJCXZlY19vZmYgPSAwOworCQkJc2crKzsKKwkJfQorCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qCisgKiBJZiB0aGUgbWVzc2FnZSBpcyBzdGlsbCBvbiB0aGUgc2VuZCBxdWV1ZSwgd2FpdCB1bnRpbCB0aGUgdHJhbnNwb3J0CisgKiBpcyBkb25lIHdpdGggaXQuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgUkRNQSBvcGVyYXRpb25zLgorICovCit2b2lkIHJkc19tZXNzYWdlX3dhaXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl3YWl0X2V2ZW50KHJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxLAorCQkJIXRlc3RfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV91bm1hcHBlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCWNsZWFyX2JpdChSRFNfTVNHX01BUFBFRCwgJnJtLT5tX2ZsYWdzKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpKQorCQl3YWtlX3VwKCZyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSk7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvcGFnZS5jIGIvbmV0L3Jkcy9wYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2MDc0MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcGFnZS5jCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciB7CisJc3RydWN0IHBhZ2UJKnJfcGFnZTsKKwl1bnNpZ25lZCBsb25nCXJfb2Zmc2V0OworfTsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciwgcmRzX3BhZ2VfcmVtYWluZGVycykgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisvKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLWVycm5vIG9uIGZhaWx1cmUuCisgKgorICogV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmbHVzaF9kY2FjaGVfcGFnZSgpIGFzIHRoaXMgb25seSB3b3JrcworICogd2l0aCBwcml2YXRlIHBhZ2VzLiAgSWYsIHNheSwgd2Ugd2VyZSB0byBkbyBkaXJlY3RlZCByZWNlaXZlIHRvIHBpbm5lZAorICogdXNlciBwYWdlcyB3ZSdkIGhhdmUgdG8gd29ycnkgbW9yZSBhYm91dCBjYWNoZSBjb2hlcmVuY2UuICAoVGhvdWdoCisgKiB0aGUgZmx1c2hfZGNhY2hlX3BhZ2UoKSBpbiBnZXRfdXNlcl9wYWdlcygpIHdvdWxkIHByb2JhYmx5IGJlIGVub3VnaCkuCisgKi8KK2ludCByZHNfcGFnZV9jb3B5X3VzZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJICAgICAgIGludCB0b191c2VyKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCXZvaWQgKmFkZHI7CisKKwlpZiAodG9fdXNlcikKKwkJcmRzX3N0YXRzX2FkZChzX2NvcHlfdG9fdXNlciwgYnl0ZXMpOworCWVsc2UKKwkJcmRzX3N0YXRzX2FkZChzX2NvcHlfZnJvbV91c2VyLCBieXRlcyk7CisKKwlhZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWlmICh0b191c2VyKQorCQlyZXQgPSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyhwdHIsIGFkZHIgKyBvZmZzZXQsIGJ5dGVzKTsKKwllbHNlCisJCXJldCA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoYWRkciArIG9mZnNldCwgcHRyLCBieXRlcyk7CisJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9VU0VSMCk7CisKKwlpZiAocmV0KSB7CisJCWFkZHIgPSBrbWFwKHBhZ2UpOworCQlpZiAodG9fdXNlcikKKwkJCXJldCA9IGNvcHlfdG9fdXNlcihwdHIsIGFkZHIgKyBvZmZzZXQsIGJ5dGVzKTsKKwkJZWxzZQorCQkJcmV0ID0gY29weV9mcm9tX3VzZXIoYWRkciArIG9mZnNldCwgcHRyLCBieXRlcyk7CisJCWt1bm1hcChwYWdlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogTWVzc2FnZSBhbGxvY2F0aW9uIHVzZXMgdGhpcyB0byBidWlsZCB1cCByZWdpb25zIG9mIGEgbWVzc2FnZS4KKyAqCisgKiBAYnl0ZXMgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZC4KKyAqIEBnZnAgLSB0aGUgd2FpdGluZyBiZWhhdmlvdXIgb2YgdGhlIGFsbG9jYXRpb24KKyAqCisgKiBAZ2ZwIGlzIGFsd2F5cyBvcmVkIHdpdGggX19HRlBfSElHSE1FTS4gIENhbGxlcnMgbXVzdCBiZSBwcmVwYXJlZCB0bworICoga21hcCB0aGUgcGFnZXMsIGV0Yy4KKyAqCisgKiBJZiBAYnl0ZXMgaXMgYXQgbGVhc3QgYSBmdWxsIHBhZ2UgdGhlbiB0aGlzIGp1c3QgcmV0dXJucyBhIHBhZ2UgZnJvbQorICogYWxsb2NfcGFnZSgpLgorICoKKyAqIElmIEBieXRlcyBpcyBhIHBhcnRpYWwgcGFnZSB0aGVuIHRoaXMgc3RvcmVzIHRoZSB1bnVzZWQgcmVnaW9uIG9mIHRoZQorICogcGFnZSBpbiBhIHBlci1jcHUgc3RydWN0dXJlLiAgRnV0dXJlIHBhcnRpYWwtcGFnZSBhbGxvY2F0aW9ucyBtYXkgYmUKKyAqIHNhdGlzZmllZCBmcm9tIHRoYXQgY2FjaGVkIHJlZ2lvbi4gIFRoaXMgbGV0cyB1cyB3YXN0ZSBsZXNzIG1lbW9yeSBvbgorICogc21hbGwgYWxsb2NhdGlvbnMgd2l0aCBtaW5pbWFsIGNvbXBsZXhpdHkuICBJdCB3b3JrcyBiZWNhdXNlIHRoZSB0cmFuc21pdAorICogcGF0aCBwYXNzZXMgcmVhZC1vbmx5IHBhZ2UgcmVnaW9ucyBkb3duIHRvIGRldmljZXMuICBUaGV5IGhvbGQgYSBwYWdlCisgKiByZWZlcmVuY2UgdW50aWwgdGhleSBhcmUgZG9uZSB3aXRoIHRoZSByZWdpb24uCisgKi8KK2ludCByZHNfcGFnZV9yZW1haW5kZXJfYWxsb2Moc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0LCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkJICAgICBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciAqcmVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldDsKKworCWdmcCB8PSBfX0dGUF9ISUdITUVNOworCisJLyoganVtcCBzdHJhaWdodCB0byBhbGxvY2F0aW9uIGlmIHdlJ3JlIHRyeWluZyBmb3IgYSBodWdlIHBhZ2UgKi8KKwlpZiAoYnl0ZXMgPj0gUEFHRV9TSVpFKSB7CisJCXBhZ2UgPSBhbGxvY19wYWdlKGdmcCk7CisJCWlmIChwYWdlID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlzZ19zZXRfcGFnZShzY2F0LCBwYWdlLCBQQUdFX1NJWkUsIDApOworCQkJcmV0ID0gMDsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBnZXRfY3B1KCkpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXdoaWxlICgxKSB7CisJCS8qIGF2b2lkIGEgdGlueSByZWdpb24gZ2V0dGluZyBzdHVjayBieSB0b3NzaW5nIGl0ICovCisJCWlmIChyZW0tPnJfcGFnZSAmJiBieXRlcyA+IChQQUdFX1NJWkUgLSByZW0tPnJfb2Zmc2V0KSkgeworCQkJcmRzX3N0YXRzX2luYyhzX3BhZ2VfcmVtYWluZGVyX21pc3MpOworCQkJX19mcmVlX3BhZ2UocmVtLT5yX3BhZ2UpOworCQkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQl9CisKKwkJLyogaGFuZCBvdXQgYSBmcmFnbWVudCBmcm9tIHRoZSBjYWNoZWQgcGFnZSAqLworCQlpZiAocmVtLT5yX3BhZ2UgJiYgYnl0ZXMgPD0gKFBBR0VfU0laRSAtIHJlbS0+cl9vZmZzZXQpKSB7CisJCQlzZ19zZXRfcGFnZShzY2F0LCByZW0tPnJfcGFnZSwgYnl0ZXMsIHJlbS0+cl9vZmZzZXQpOworCQkJZ2V0X3BhZ2Uoc2dfcGFnZShzY2F0KSk7CisKKwkJCWlmIChyZW0tPnJfb2Zmc2V0ICE9IDApCisJCQkJcmRzX3N0YXRzX2luYyhzX3BhZ2VfcmVtYWluZGVyX2hpdCk7CisKKwkJCXJlbS0+cl9vZmZzZXQgKz0gYnl0ZXM7CisJCQlpZiAocmVtLT5yX29mZnNldCA9PSBQQUdFX1NJWkUpIHsKKwkJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCQkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQkJfQorCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogYWxsb2MgaWYgdGhlcmUgaXMgbm90aGluZyBmb3IgdXMgdG8gdXNlICovCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcHV0X2NwdSgpOworCisJCXBhZ2UgPSBhbGxvY19wYWdlKGdmcCk7CisKKwkJcmVtID0gJnBlcl9jcHUocmRzX3BhZ2VfcmVtYWluZGVycywgZ2V0X2NwdSgpKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCWlmIChwYWdlID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCisJCS8qIGRpZCBzb21lb25lIHJhY2UgdG8gZmlsbCB0aGUgcmVtYWluZGVyIGJlZm9yZSB1cz8gKi8KKwkJaWYgKHJlbS0+cl9wYWdlKSB7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogb3RoZXJ3aXNlIGluc3RhbGwgb3VyIHBhZ2UgYW5kIGxvb3AgYXJvdW5kIHRvIGFsbG9jICovCisJCXJlbS0+cl9wYWdlID0gcGFnZTsKKwkJcmVtLT5yX29mZnNldCA9IDA7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXB1dF9jcHUoKTsKK291dDoKKwlyZHNkZWJ1ZygiYnl0ZXMgJWx1IHJldCAlZCAlcCAldSAldVxuIiwgYnl0ZXMsIHJldCwKKwkJIHJldCA/IE5VTEwgOiBzZ19wYWdlKHNjYXQpLCByZXQgPyAwIDogc2NhdC0+b2Zmc2V0LAorCQkgcmV0ID8gMCA6IHNjYXQtPmxlbmd0aCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyICpyZW07CisJbG9uZyBjcHUgPSAobG9uZyloY3B1OworCisJcmVtID0gJnBlcl9jcHUocmRzX3BhZ2VfcmVtYWluZGVycywgY3B1KTsKKworCXJkc2RlYnVnKCJjcHUgJWxkIGFjdGlvbiAweCVseFxuIiwgY3B1LCBhY3Rpb24pOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9ERUFEOgorCQlpZiAocmVtLT5yX3BhZ2UpCisJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCXJlbS0+cl9wYWdlID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmRzX3BhZ2VfcmVtYWluZGVyX25iID0geworCS5ub3RpZmllcl9jYWxsID0gcmRzX3BhZ2VfcmVtYWluZGVyX2NwdV9ub3RpZnksCit9OworCit2b2lkIHJkc19wYWdlX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQlyZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeSgmcmRzX3BhZ2VfcmVtYWluZGVyX25iLAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZylDUFVfREVBRCwKKwkJCQkJICAgICAgKHZvaWQgKikobG9uZylpKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlZWI5MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRtYS5jCkBAIC0wLDAgKzEsNjc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4gLyogZm9yIERNQV8qX0RFVklDRSAqLworCisjaW5jbHVkZSAicmRtYS5oIgorCisvKgorICogWFhYCisgKiAgLSBidWlsZCB3aXRoIHNwYXJzZQorICogIC0gc2hvdWxkIHdlIGxpbWl0IHRoZSBzaXplIG9mIGEgbXIgcmVnaW9uPyAgbGV0IHRyYW5zcG9ydCByZXR1cm4gZmFpbHVyZT8KKyAqICAtIHNob3VsZCB3ZSBkZXRlY3QgZHVwbGljYXRlIGtleXMgb24gYSBzb2NrZXQ/ICBobW0uCisgKiAgLSBhbiByZG1hIGlzIGFuIG1sb2NrLCBhcHBseSBybGltaXQ/CisgKi8KKworLyoKKyAqIGdldCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IGxvb2tpbmcgYXQgdGhlIHBhZ2UgaW5kaWNlcyB0aGF0IHRoZSBzdGFydCBhbmQKKyAqIGVuZCBhZGRyZXNzZXMgZmFsbCBpbi4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHZlYyBpcyBpbnZhbGlkLiAgSXQgaXMgaW52YWxpZCBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiBjYXVzZXMgdGhlIGFkZHJlc3MgdG8gd3JhcCBvciBvdmVyZmxvd3MgYW4gdW5zaWduZWQgaW50LiAgVGhpcyBjb21lcworICogZnJvbSBiZWluZyBzdG9yZWQgaW4gdGhlICdsZW5ndGgnIG1lbWJlciBvZiAnc3RydWN0IHNjYXR0ZXJsaXN0Jy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZHNfcGFnZXNfaW5fdmVjKHN0cnVjdCByZHNfaW92ZWMgKnZlYykKK3sKKwlpZiAoKHZlYy0+YWRkciArIHZlYy0+Ynl0ZXMgPD0gdmVjLT5hZGRyKSB8fAorCSAgICAodmVjLT5ieXRlcyA+ICh1NjQpVUlOVF9NQVgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKHZlYy0+YWRkciArIHZlYy0+Ynl0ZXMgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUKSAtCisJCSh2ZWMtPmFkZHIgPj4gUEFHRV9TSElGVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX21yICpyZHNfbXJfdHJlZV93YWxrKHN0cnVjdCByYl9yb290ICpyb290LCB1NjQga2V5LAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX21yICppbnNlcnQpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19tciAqbXI7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCW1yID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcmRzX21yLCByX3JiX25vZGUpOworCisJCWlmIChrZXkgPCBtci0+cl9rZXkpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGtleSA+IG1yLT5yX2tleSkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBtcjsKKwl9CisKKwlpZiAoaW5zZXJ0KSB7CisJCXJiX2xpbmtfbm9kZSgmaW5zZXJ0LT5yX3JiX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmaW5zZXJ0LT5yX3JiX25vZGUsIHJvb3QpOworCQlhdG9taWNfaW5jKCZpbnNlcnQtPnJfcmVmY291bnQpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERlc3Ryb3kgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBwYXJ0IG9mIGEgTVIuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSBtci0+cl9zb2NrOworCXZvaWQgKnRyYW5zX3ByaXZhdGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygiUkRTOiBkZXN0cm95IG1yIGtleSBpcyAleCByZWZjbnQgJXVcbiIsCisJCQltci0+cl9rZXksIGF0b21pY19yZWFkKCZtci0+cl9yZWZjb3VudCkpOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoUkRTX01SX0RFQUQsICZtci0+cl9zdGF0ZSkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJaWYgKCFSQl9FTVBUWV9OT0RFKCZtci0+cl9yYl9ub2RlKSkKKwkJcmJfZXJhc2UoJm1yLT5yX3JiX25vZGUsICZycy0+cnNfcmRtYV9rZXlzKTsKKwl0cmFuc19wcml2YXRlID0gbXItPnJfdHJhbnNfcHJpdmF0ZTsKKwltci0+cl90cmFuc19wcml2YXRlID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAodHJhbnNfcHJpdmF0ZSkKKwkJbXItPnJfdHJhbnMtPmZyZWVfbXIodHJhbnNfcHJpdmF0ZSwgbXItPnJfaW52YWxpZGF0ZSk7Cit9CisKK3ZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCByZHNfbXIgKm1yKQoreworCXJkc19kZXN0cm95X21yKG1yKTsKKwlrZnJlZShtcik7Cit9CisKKy8qCisgKiBCeSB0aGUgdGltZSB0aGlzIGlzIGNhbGxlZCB3ZSBjYW4ndCBoYXZlIGFueSBtb3JlIGlvY3RscyBjYWxsZWQgb24KKyAqIHRoZSBzb2NrZXQgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCByYWNpbmcgd2l0aCBvdGhlcnMuCisgKi8KK3ZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc3RydWN0IHJkc19tciAqbXI7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwkvKiBSZWxlYXNlIGFueSBNUnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc29ja2V0ICovCisJd2hpbGUgKChub2RlID0gcmJfZmlyc3QoJnJzLT5yc19yZG1hX2tleXMpKSkgeworCQltciA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgcmRzX21yLCByX3JiX25vZGUpOworCQlpZiAobXItPnJfdHJhbnMgPT0gcnMtPnJzX3RyYW5zcG9ydCkKKwkJCW1yLT5yX2ludmFsaWRhdGUgPSAwOworCQlyZHNfbXJfcHV0KG1yKTsKKwl9CisKKwlpZiAocnMtPnJzX3RyYW5zcG9ydCAmJiBycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMpCisJCXJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycygpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIHBpbiB1c2VyIHBhZ2VzLgorICovCitzdGF0aWMgaW50IHJkc19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGludCBucl9wYWdlcywKKwkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIGludCB3cml0ZSkKK3sKKwlpbnQgcmV0OworCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCB1c2VyX2FkZHIsCisJCQkgICAgIG5yX3BhZ2VzLCB3cml0ZSwgMCwgcGFnZXMsIE5VTEwpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoMCA8PSByZXQgJiYgKHVuc2lnbmVkKSByZXQgPCBucl9wYWdlcykgeworCQl3aGlsZSAocmV0LS0pCisJCQlwdXRfcGFnZShwYWdlc1tyZXRdKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsCisJCQkJdTY0ICpjb29raWVfcmV0LCBzdHJ1Y3QgcmRzX21yICoqbXJfcmV0KQoreworCXN0cnVjdCByZHNfbXIgKm1yID0gTlVMTCwgKmZvdW5kOworCXVuc2lnbmVkIGludCBucl9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXZvaWQgKnRyYW5zX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJdW5zaWduZWQgaW50IG5lbnRzOworCWxvbmcgaTsKKwlpbnQgcmV0OworCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJzLT5yc190cmFuc3BvcnQtPmdldF9tciA9PSBOVUxMKSB7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlucl9wYWdlcyA9IHJkc19wYWdlc19pbl92ZWMoJmFyZ3MtPnZlYyk7CisJaWYgKG5yX3BhZ2VzID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIGFkZHIgJWxseCBsZW4gJWxsdSBucl9wYWdlcyAldVxuIiwKKwkJYXJncy0+dmVjLmFkZHIsIGFyZ3MtPnZlYy5ieXRlcywgbnJfcGFnZXMpOworCisJLyogWFhYIGNsYW1wIG5yX3BhZ2VzIHRvIGxpbWl0IHRoZSBzaXplIG9mIHRoaXMgYWxsb2M/ICovCisJcGFnZXMgPSBrY2FsbG9jKG5yX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19tciksIEdGUF9LRVJORUwpOworCWlmIChtciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWF0b21pY19zZXQoJm1yLT5yX3JlZmNvdW50LCAxKTsKKwlSQl9DTEVBUl9OT0RFKCZtci0+cl9yYl9ub2RlKTsKKwltci0+cl90cmFucyA9IHJzLT5yc190cmFuc3BvcnQ7CisJbXItPnJfc29jayA9IHJzOworCisJaWYgKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfVVNFX09OQ0UpCisJCW1yLT5yX3VzZV9vbmNlID0gMTsKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9JTlZBTElEQVRFKQorCQltci0+cl9pbnZhbGlkYXRlID0gMTsKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9SRUFEV1JJVEUpCisJCW1yLT5yX3dyaXRlID0gMTsKKworCS8qCisJICogUGluIHRoZSBwYWdlcyB0aGF0IG1ha2UgdXAgdGhlIHVzZXIgYnVmZmVyIGFuZCB0cmFuc2ZlciB0aGUgcGFnZQorCSAqIHBvaW50ZXJzIHRvIHRoZSBtcidzIHNnIGFycmF5LiAgV2UgY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIG1hcHBlZAorCSAqIHRoZSB3aG9sZSByZWdpb24gYWZ0ZXIgdHJhbnNmZXJyaW5nIHRoZSBwYXJ0aWFsIHBhZ2UgcmVmZXJlbmNlcworCSAqIHRvIHRoZSBzZyBhcnJheSBzbyB0aGF0IHdlIGNhbiBoYXZlIG9uZSBwYWdlIHJlZiBjbGVhbnVwIHBhdGguCisJICoKKwkgKiBGb3Igbm93IHdlIGhhdmUgbm8gZmxhZyB0aGF0IHRlbGxzIHVzIHdoZXRoZXIgdGhlIG1hcHBpbmcgaXMKKwkgKiByL28gb3Igci93LiBXZSBuZWVkIHRvIGFzc3VtZSByL3csIG9yIHdlJ2xsIGRvIGEgbG90IG9mIFJETUEgdG8KKwkgKiB0aGUgemVybyBwYWdlLgorCSAqLworCXJldCA9IHJkc19waW5fcGFnZXMoYXJncy0+dmVjLmFkZHIgJiBQQUdFX01BU0ssIG5yX3BhZ2VzLCBwYWdlcywgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJbmVudHMgPSByZXQ7CisJc2cgPSBrY2FsbG9jKG5lbnRzLCBzaXplb2YoKnNnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNnID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCVdBUk5fT04oIW5lbnRzKTsKKwlzZ19pbml0X3RhYmxlKHNnLCBuZW50cyk7CisKKwkvKiBTdGljayBhbGwgcGFnZXMgaW50byB0aGUgc2NhdHRlcmxpc3QgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IG5lbnRzOyBpKyspCisJCXNnX3NldF9wYWdlKCZzZ1tpXSwgcGFnZXNbaV0sIFBBR0VfU0laRSwgMCk7CisKKwlyZHNkZWJ1ZygiUkRTOiB0cmFuc19wcml2YXRlIG5lbnRzIGlzICV1XG4iLCBuZW50cyk7CisKKwkvKiBPYnRhaW4gYSB0cmFuc3BvcnQgc3BlY2lmaWMgTVIuIElmIHRoaXMgc3VjY2VlZHMsIHRoZQorCSAqIHMvZyBsaXN0IGlzIG5vdyBvd25lZCBieSB0aGUgTVIuCisJICogTm90ZSB0aGF0IGRtYV9tYXAoKSBpbXBsaWVzIHRoYXQgcGVuZGluZyB3cml0ZXMgYXJlCisJICogZmx1c2hlZCB0byBSQU0sIHNvIG5vIGRtYV9zeW5jIGlzIG5lZWRlZCBoZXJlLiAqLworCXRyYW5zX3ByaXZhdGUgPSBycy0+cnNfdHJhbnNwb3J0LT5nZXRfbXIoc2csIG5lbnRzLCBycywKKwkJCQkJCSAmbXItPnJfa2V5KTsKKworCWlmIChJU19FUlIodHJhbnNfcHJpdmF0ZSkpIHsKKwkJZm9yIChpID0gMCA7IGkgPCBuZW50czsgaSsrKQorCQkJcHV0X3BhZ2Uoc2dfcGFnZSgmc2dbaV0pKTsKKwkJa2ZyZWUoc2cpOworCQlyZXQgPSBQVFJfRVJSKHRyYW5zX3ByaXZhdGUpOworCQlnb3RvIG91dDsKKwl9CisKKwltci0+cl90cmFuc19wcml2YXRlID0gdHJhbnNfcHJpdmF0ZTsKKworCXJkc2RlYnVnKCJSRFM6IGdldF9tciBwdXRfdXNlciBrZXkgaXMgJXggY29va2llX2FkZHIgJXBcbiIsCisJICAgICAgIG1yLT5yX2tleSwgKHZvaWQgKikodW5zaWduZWQgbG9uZykgYXJncy0+Y29va2llX2FkZHIpOworCisJLyogVGhlIHVzZXIgbWF5IHBhc3MgdXMgYW4gdW5hbGlnbmVkIGFkZHJlc3MsIGJ1dCB3ZSBjYW4gb25seQorCSAqIG1hcCBwYWdlIGFsaWduZWQgcmVnaW9ucy4gU28gd2Uga2VlcCB0aGUgb2Zmc2V0LCBhbmQgYnVpbGQKKwkgKiBhIDY0Yml0IGNvb2tpZSBjb250YWluaW5nIDxSX0tleSwgb2Zmc2V0PiBhbmQgcGFzcyB0aGF0CisJICogYXJvdW5kLiAqLworCWNvb2tpZSA9IHJkc19yZG1hX21ha2VfY29va2llKG1yLT5yX2tleSwgYXJncy0+dmVjLmFkZHIgJiB+UEFHRV9NQVNLKTsKKwlpZiAoY29va2llX3JldCkKKwkJKmNvb2tpZV9yZXQgPSBjb29raWU7CisKKwlpZiAoYXJncy0+Y29va2llX2FkZHIgJiYgcHV0X3VzZXIoY29va2llLCAodTY0IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSBhcmdzLT5jb29raWVfYWRkcikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW5zZXJ0aW5nIHRoZSBuZXcgTVIgaW50byB0aGUgcmJ0cmVlIGJ1bXBzIGl0cworCSAqIHJlZmVyZW5jZSBjb3VudC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCWZvdW5kID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgbXItPnJfa2V5LCBtcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJQlVHX09OKGZvdW5kICYmIGZvdW5kICE9IG1yKTsKKworCXJkc2RlYnVnKCJSRFM6IGdldF9tciBrZXkgaXMgJXhcbiIsIG1yLT5yX2tleSk7CisJaWYgKG1yX3JldCkgeworCQlhdG9taWNfaW5jKCZtci0+cl9yZWZjb3VudCk7CisJCSptcl9yZXQgPSBtcjsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKHBhZ2VzKTsKKwlpZiAobXIpCisJCXJkc19tcl9wdXQobXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHJkc19nZXRfbXJfYXJncyBhcmdzOworCisJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCAoc3RydWN0IHJkc19nZXRfbXJfYXJncyBfX3VzZXIgKilvcHR2YWwsCisJCQkgICBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBfX3Jkc19yZG1hX21hcChycywgJmFyZ3MsIE5VTEwsIE5VTEwpOworfQorCisvKgorICogRnJlZSB0aGUgTVIgaW5kaWNhdGVkIGJ5IHRoZSBnaXZlbiBSX0tleQorICovCitpbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyBhcmdzOworCXN0cnVjdCByZHNfbXIgKm1yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCAoc3RydWN0IHJkc19mcmVlX21yX2FyZ3MgX191c2VyICopb3B0dmFsLAorCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfZnJlZV9tcl9hcmdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogU3BlY2lhbCBjYXNlIC0gYSBudWxsIGNvb2tpZSBtZWFucyBmbHVzaCBhbGwgdW51c2VkIE1ScyAqLworCWlmIChhcmdzLmNvb2tpZSA9PSAwKSB7CisJCWlmICghcnMtPnJzX3RyYW5zcG9ydCB8fCAhcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycygpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSBNUiBnaXZlbiBpdHMgUl9rZXkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSByYnRyZWUKKwkgKiBzbyBub2JvZHkgZWxzZSBmaW5kcyBpdC4KKwkgKiBUaGlzIHNob3VsZCBhbHNvIHByZXZlbnQgcmFjZXMgd2l0aCByZHNfcmRtYV91bnVzZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCW1yID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgcmRzX3JkbWFfY29va2llX2tleShhcmdzLmNvb2tpZSksIE5VTEwpOworCWlmIChtcikgeworCQlyYl9lcmFzZSgmbXItPnJfcmJfbm9kZSwgJnJzLT5yc19yZG1hX2tleXMpOworCQlSQl9DTEVBUl9OT0RFKCZtci0+cl9yYl9ub2RlKTsKKwkJaWYgKGFyZ3MuZmxhZ3MgJiBSRFNfUkRNQV9JTlZBTElEQVRFKQorCQkJbXItPnJfaW52YWxpZGF0ZSA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCWlmICghbXIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBjYWxsIHJkc19kZXN0cm95X21yKCkgb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgc3VyZSBpdCdzIGRvbmUgYnkgdGhlIHRpbWUKKwkgKiB3ZSByZXR1cm4uICBJZiB3ZSBsZXQgcmRzX21yX3B1dCgpIGRvIGl0IGl0IG1pZ2h0IG5vdCBoYXBwZW4gdW50aWwKKwkgKiBzb21lb25lIGVsc2UgZHJvcHMgdGhlaXIgcmVmLgorCSAqLworCXJkc19kZXN0cm95X21yKG1yKTsKKwlyZHNfbXJfcHV0KG1yKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgcmVjZWl2ZSBhbiBleHRlbnNpb24gaGVhZGVyIHRoYXQKKyAqIHRlbGxzIHVzIHRoaXMgTVIgd2FzIHVzZWQuIEl0IGFsbG93cyB1cyB0byBpbXBsZW1lbnQKKyAqIHVzZV9vbmNlIHNlbWFudGljcworICovCit2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKQoreworCXN0cnVjdCByZHNfbXIgKm1yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHpvdF9tZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCW1yID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgcl9rZXksIE5VTEwpOworCWlmIChtciAmJiAobXItPnJfdXNlX29uY2UgfHwgZm9yY2UpKSB7CisJCXJiX2VyYXNlKCZtci0+cl9yYl9ub2RlLCAmcnMtPnJzX3JkbWFfa2V5cyk7CisJCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCQl6b3RfbWUgPSAxOworCX0gZWxzZSBpZiAobXIpCisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwkvKiBNYXkgaGF2ZSB0byBpc3N1ZSBhIGRtYV9zeW5jIG9uIHRoaXMgbWVtb3J5IHJlZ2lvbi4KKwkgKiBOb3RlIHdlIGNvdWxkIGF2b2lkIHRoaXMgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBSRE1BIFJFQUQsCisJICogYnV0IGF0IHRoaXMgcG9pbnQgd2UgY2FuJ3QgdGVsbC4gKi8KKwlpZiAobXIgIT0gTlVMTCkgeworCQlpZiAobXItPnJfdHJhbnMtPnN5bmNfbXIpCisJCQltci0+cl90cmFucy0+c3luY19tcihtci0+cl90cmFuc19wcml2YXRlLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCS8qIElmIHRoZSBNUiB3YXMgbWFya2VkIGFzIGludmFsaWRhdGUsIHRoaXMgd2lsbAorCQkgKiB0cmlnZ2VyIGFuIGFzeW5jIGZsdXNoLiAqLworCQlpZiAoem90X21lKQorCQkJcmRzX2Rlc3Ryb3lfbXIobXIpOworCQlyZHNfbXJfcHV0KG1yKTsKKwl9Cit9CisKK3ZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJvLT5yX25lbnRzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZyby0+cl9zZ1tpXSk7CisKKwkJLyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2gKKwkJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQorCQkgKiB0byBsb2NhbCBtZW1vcnkgKi8KKwkJaWYgKCFyby0+cl93cml0ZSkKKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQlwdXRfcGFnZShwYWdlKTsKKwl9CisKKwlrZnJlZShyby0+cl9ub3RpZmllcik7CisJa2ZyZWUocm8pOworfQorCisvKgorICogYXJncyBpcyBhIHBvaW50ZXIgdG8gYW4gaW4ta2VybmVsIGNvcHkgaW4gdGhlIHNlbmRtc2cgY21zZy4KKyAqLworc3RhdGljIHN0cnVjdCByZHNfcmRtYV9vcCAqcmRzX3JkbWFfcHJlcGFyZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLAorCQkJCQkgICAgc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MpCit7CisJc3RydWN0IHJkc19pb3ZlYyB2ZWM7CisJc3RydWN0IHJkc19yZG1hX29wICpvcCA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOworCXVuc2lnbmVkIGludCBtYXhfcGFnZXM7CisJdW5zaWduZWQgaW50IG5yX2J5dGVzOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCXN0cnVjdCByZHNfaW92ZWMgX191c2VyICpsb2NhbF92ZWM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHJldDsKKworCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFyZ3MtPm5yX2xvY2FsID4gKHU2NClVSU5UX01BWCkgeworCQlyZXQgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKworCW5yX3BhZ2VzID0gMDsKKwltYXhfcGFnZXMgPSAwOworCisJbG9jYWxfdmVjID0gKHN0cnVjdCByZHNfaW92ZWMgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPmxvY2FsX3ZlY19hZGRyOworCisJLyogZmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB2ZWN0b3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bnJfbG9jYWw7IGkrKykgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZlYywgJmxvY2FsX3ZlY1tpXSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHJkc19pb3ZlYykpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQluciA9IHJkc19wYWdlc19pbl92ZWMoJnZlYyk7CisJCWlmIChuciA9PSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQltYXhfcGFnZXMgPSBtYXgobnIsIG1heF9wYWdlcyk7CisJCW5yX3BhZ2VzICs9IG5yOworCX0KKworCXBhZ2VzID0ga2NhbGxvYyhtYXhfcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJb3AgPSBremFsbG9jKG9mZnNldG9mKHN0cnVjdCByZHNfcmRtYV9vcCwgcl9zZ1tucl9wYWdlc10pLCBHRlBfS0VSTkVMKTsKKwlpZiAob3AgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlvcC0+cl93cml0ZSA9ICEhKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfUkVBRFdSSVRFKTsKKwlvcC0+cl9mZW5jZSA9ICEhKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfRkVOQ0UpOworCW9wLT5yX25vdGlmeSA9ICEhKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfTk9USUZZX01FKTsKKwlvcC0+cl9yZWN2ZXJyID0gcnMtPnJzX3JlY3ZlcnI7CisJV0FSTl9PTighbnJfcGFnZXMpOworCXNnX2luaXRfdGFibGUob3AtPnJfc2csIG5yX3BhZ2VzKTsKKworCWlmIChvcC0+cl9ub3RpZnkgfHwgb3AtPnJfcmVjdmVycikgeworCQkvKiBXZSBhbGxvY2F0ZSBhbiB1bmluaXRpYWxpemVkIG5vdGlmaWVyIGhlcmUsIGJlY2F1c2UKKwkJICogd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGF0IGluIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuIFdlCisJCSAqIHdvdWxkIGhhdmUgdG8gdXNlIEdGUF9BVE9NSUMgdGhlcmUsIGFuZCBkb24ndCB3YW50IHRvIGRlYWwKKwkJICogd2l0aCBmYWlsZWQgYWxsb2NhdGlvbnMuCisJCSAqLworCQlvcC0+cl9ub3RpZmllciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbm90aWZpZXIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvcC0+cl9ub3RpZmllcikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW9wLT5yX25vdGlmaWVyLT5uX3VzZXJfdG9rZW4gPSBhcmdzLT51c2VyX3Rva2VuOworCQlvcC0+cl9ub3RpZmllci0+bl9zdGF0dXMgPSBSRFNfUkRNQV9TVUNDRVNTOworCX0KKworCS8qIFRoZSBjb29raWUgY29udGFpbnMgdGhlIFJfS2V5IG9mIHRoZSByZW1vdGUgbWVtb3J5IHJlZ2lvbiwgYW5kCisJICogb3B0aW9uYWxseSBhbiBvZmZzZXQgaW50byBpdC4gVGhpcyBpcyBob3cgd2UgaW1wbGVtZW50IFJETUEgaW50bworCSAqIHVuYWxpZ25lZCBtZW1vcnkuCisJICogV2hlbiBzZXR0aW5nIHVwIHRoZSBSRE1BLCB3ZSBuZWVkIHRvIGFkZCB0aGF0IG9mZnNldCB0byB0aGUKKwkgKiBkZXN0aW5hdGlvbiBhZGRyZXNzICh3aGljaCBpcyByZWFsbHkgYW4gb2Zmc2V0IGludG8gdGhlIE1SKQorCSAqIEZJWE1FOiBXZSBtYXkgd2FudCB0byBtb3ZlIHRoaXMgaW50byBpYl9yZG1hLmMKKwkgKi8KKwlvcC0+cl9rZXkgPSByZHNfcmRtYV9jb29raWVfa2V5KGFyZ3MtPmNvb2tpZSk7CisJb3AtPnJfcmVtb3RlX2FkZHIgPSBhcmdzLT5yZW1vdGVfdmVjLmFkZHIgKyByZHNfcmRtYV9jb29raWVfb2Zmc2V0KGFyZ3MtPmNvb2tpZSk7CisKKwlucl9ieXRlcyA9IDA7CisKKwlyZHNkZWJ1ZygiUkRTOiByZG1hIHByZXBhcmUgbnJfbG9jYWwgJWxsdSBydmEgJWxseCBya2V5ICV4XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFyZ3MtPm5yX2xvY2FsLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFyZ3MtPnJlbW90ZV92ZWMuYWRkciwKKwkgICAgICAgb3AtPnJfa2V5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5ucl9sb2NhbDsgaSsrKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmVjLCAmbG9jYWxfdmVjW2ldLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2lvdmVjKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5yID0gcmRzX3BhZ2VzX2luX3ZlYygmdmVjKTsKKwkJaWYgKG5yID09IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJzLT5yc191c2VyX2FkZHIgPSB2ZWMuYWRkcjsKKwkJcnMtPnJzX3VzZXJfYnl0ZXMgPSB2ZWMuYnl0ZXM7CisKKwkJLyogZGlkIHRoZSB1c2VyIGNoYW5nZSB0aGUgdmVjIHVuZGVyIHVzPyAqLworCQlpZiAobnIgPiBtYXhfcGFnZXMgfHwgb3AtPnJfbmVudHMgKyBuciA+IG5yX3BhZ2VzKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyogSWYgaXQncyBhIFdSSVRFIG9wZXJhdGlvbiwgd2Ugd2FudCB0byBwaW4gdGhlIHBhZ2VzIGZvciByZWFkaW5nLgorCQkgKiBJZiBpdCdzIGEgUkVBRCBvcGVyYXRpb24sIHdlIG5lZWQgdG8gcGluIHRoZSBwYWdlcyBmb3Igd3JpdGluZy4KKwkJICovCisJCXJldCA9IHJkc19waW5fcGFnZXModmVjLmFkZHIgJiBQQUdFX01BU0ssIG5yLCBwYWdlcywgIW9wLT5yX3dyaXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlyZHNkZWJ1ZygiUkRTOiBucl9ieXRlcyAldSBuciAldSB2ZWMuYnl0ZXMgJWxsdSB2ZWMuYWRkciAlbGx4XG4iLAorCQkgICAgICAgbnJfYnl0ZXMsIG5yLCB2ZWMuYnl0ZXMsIHZlYy5hZGRyKTsKKworCQlucl9ieXRlcyArPSB2ZWMuYnl0ZXM7CisKKwkJZm9yIChqID0gMDsgaiA8IG5yOyBqKyspIHsKKwkJCXVuc2lnbmVkIGludCBvZmZzZXQgPSB2ZWMuYWRkciAmIH5QQUdFX01BU0s7CisKKwkJCXNnID0gJm9wLT5yX3NnW29wLT5yX25lbnRzICsgal07CisJCQlzZ19zZXRfcGFnZShzZywgcGFnZXNbal0sCisJCQkJCW1pbl90KHVuc2lnbmVkIGludCwgdmVjLmJ5dGVzLCBQQUdFX1NJWkUgLSBvZmZzZXQpLAorCQkJCQlvZmZzZXQpOworCisJCQlyZHNkZWJ1ZygiUkRTOiBzZy0+b2Zmc2V0ICV4IHNnLT5sZW4gJXggdmVjLmFkZHIgJWxseCB2ZWMuYnl0ZXMgJWxsdVxuIiwKKwkJCSAgICAgICBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCB2ZWMuYWRkciwgdmVjLmJ5dGVzKTsKKworCQkJdmVjLmFkZHIgKz0gc2ctPmxlbmd0aDsKKwkJCXZlYy5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQl9CisKKwkJb3AtPnJfbmVudHMgKz0gbnI7CisJfQorCisKKwlpZiAobnJfYnl0ZXMgPiBhcmdzLT5yZW1vdGVfdmVjLmJ5dGVzKSB7CisJCXJkc2RlYnVnKCJSRFMgbnJfYnl0ZXMgJXUgcmVtb3RlX2J5dGVzICV1IGRvIG5vdCBtYXRjaFxuIiwKKwkJCQlucl9ieXRlcywKKwkJCQkodW5zaWduZWQgaW50KSBhcmdzLT5yZW1vdGVfdmVjLmJ5dGVzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCW9wLT5yX2J5dGVzID0gbnJfYnl0ZXM7CisKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKHBhZ2VzKTsKKwlpZiAocmV0KSB7CisJCWlmIChvcCkKKwkJCXJkc19yZG1hX2ZyZWVfb3Aob3ApOworCQlvcCA9IEVSUl9QVFIocmV0KTsKKwl9CisJcmV0dXJuIG9wOworfQorCisvKgorICogVGhlIGFwcGxpY2F0aW9uIGFza3MgZm9yIGEgUkRNQSB0cmFuc2Zlci4KKyAqIEV4dHJhY3QgYWxsIGFyZ3VtZW50cyBhbmQgc2V0IHVwIHRoZSByZG1hX29wCisgKi8KK2ludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpCit7CisJc3RydWN0IHJkc19yZG1hX29wICpvcDsKKworCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX3JkbWFfYXJncykpCisJIHx8IHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvcCA9IHJkc19yZG1hX3ByZXBhcmUocnMsIENNU0dfREFUQShjbXNnKSk7CisJaWYgKElTX0VSUihvcCkpCisJCXJldHVybiBQVFJfRVJSKG9wKTsKKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9yZG1hKTsKKwlybS0+bV9yZG1hX29wID0gb3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcGFzcyBhbiBSRE1BIGRlc3RpbmF0aW9uIChha2EgTVIpCisgKiB0byB0aGUgcmVtb3RlCisgKi8KK2ludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwl1MzIgcl9rZXk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2YocmRzX3JkbWFfY29va2llX3QpKQorCSB8fCBybS0+bV9yZG1hX2Nvb2tpZSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweSgmcm0tPm1fcmRtYV9jb29raWUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHJtLT5tX3JkbWFfY29va2llKSk7CisKKwkvKiBXZSBhcmUgcmV1c2luZyBhIHByZXZpb3VzbHkgbWFwcGVkIE1SIGhlcmUuIE1vc3QgbGlrZWx5LCB0aGUKKwkgKiBhcHBsaWNhdGlvbiBoYXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyLCBzbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkKKwkgKiBmbHVzaCB0aG9zZSB3cml0ZXMgdG8gUkFNLiBPdGhlcndpc2UgdGhlIEhDQSBtYXkgbm90IHNlZSB0aGVtCisJICogd2hlbiBkb2luZyBhIERNQSBmcm9tIHRoYXQgYnVmZmVyLgorCSAqLworCXJfa2V5ID0gcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCW1yID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgcl9rZXksIE5VTEwpOworCWlmIChtciA9PSBOVUxMKQorCQllcnIgPSAtRUlOVkFMOwkvKiBpbnZhbGlkIHJfa2V5ICovCisJZWxzZQorCQlhdG9taWNfaW5jKCZtci0+cl9yZWZjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKG1yKSB7CisJCW1yLT5yX3RyYW5zLT5zeW5jX21yKG1yLT5yX3RyYW5zX3ByaXZhdGUsIERNQV9UT19ERVZJQ0UpOworCQlybS0+bV9yZG1hX21yID0gbXI7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gcGFzc2VzIHVzIGFuIGFkZHJlc3MgcmFuZ2UgaXQgd2FudHMgdG8gZW5hYmxlIFJETUEKKyAqIHRvL2Zyb20uIFdlIG1hcCB0aGUgYXJlYSwgYW5kIHNhdmUgdGhlIDxSX0tleSxvZmZzZXQ+IHBhaXIKKyAqIGluIHJtLT5tX3JkbWFfY29va2llLiBUaGlzIGNhdXNlcyBpdCB0byBiZSBzZW50IGFsb25nIHRvIHRoZSBwZWVyCisgKiBpbiBhbiBleHRlbnNpb24gaGVhZGVyLgorICovCitpbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpCit7CisJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MpKQorCSB8fCBybS0+bV9yZG1hX2Nvb2tpZSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBfX3Jkc19yZG1hX21hcChycywgQ01TR19EQVRBKGNtc2cpLCAmcm0tPm1fcmRtYV9jb29raWUsICZybS0+bV9yZG1hX21yKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5oIGIvbmV0L3Jkcy9yZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1NTEyMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRtYS5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX1JEU19SRE1BX0gKKyNkZWZpbmUgX1JEU19SRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitzdHJ1Y3QgcmRzX21yIHsKKwlzdHJ1Y3QgcmJfbm9kZQkJcl9yYl9ub2RlOworCWF0b21pY190CQlyX3JlZmNvdW50OworCXUzMgkJCXJfa2V5OworCisJLyogQSBjb3B5IG9mIHRoZSBjcmVhdGlvbiBmbGFncyAqLworCXVuc2lnbmVkIGludAkJcl91c2Vfb25jZToxOworCXVuc2lnbmVkIGludAkJcl9pbnZhbGlkYXRlOjE7CisJdW5zaWduZWQgaW50CQlyX3dyaXRlOjE7CisKKwkvKiBUaGlzIGlzIGZvciBSRFNfTVJfREVBRC4KKwkgKiBJdCB3b3VsZCBiZSBuaWNlICYgY29uc2lzdGVudCB0byBtYWtlIHRoaXMgcGFydCBvZiB0aGUgYWJvdmUKKwkgKiBiaXQgZmllbGQgaGVyZSwgYnV0IHdlIG5lZWQgdG8gdXNlIHRlc3RfYW5kX3NldF9iaXQuCisJICovCisJdW5zaWduZWQgbG9uZwkJcl9zdGF0ZTsKKwlzdHJ1Y3QgcmRzX3NvY2sJCSpyX3NvY2s7IC8qIGJhY2sgcG9pbnRlciB0byB0aGUgc29ja2V0IHRoYXQgb3ducyB1cyAqLworCXN0cnVjdCByZHNfdHJhbnNwb3J0CSpyX3RyYW5zOworCXZvaWQJCQkqcl90cmFuc19wcml2YXRlOworfTsKKworLyogRmxhZ3MgZm9yIG1yLT5yX3N0YXRlICovCisjZGVmaW5lIFJEU19NUl9ERUFECQkwCisKK3N0cnVjdCByZHNfcmRtYV9vcCB7CisJdTMyCQkJcl9rZXk7CisJdTY0CQkJcl9yZW1vdGVfYWRkcjsKKwl1bnNpZ25lZCBpbnQJCXJfd3JpdGU6MTsKKwl1bnNpZ25lZCBpbnQJCXJfZmVuY2U6MTsKKwl1bnNpZ25lZCBpbnQJCXJfbm90aWZ5OjE7CisJdW5zaWduZWQgaW50CQlyX3JlY3ZlcnI6MTsKKwl1bnNpZ25lZCBpbnQJCXJfbWFwcGVkOjE7CisJc3RydWN0IHJkc19ub3RpZmllcgkqcl9ub3RpZmllcjsKKwl1bnNpZ25lZCBpbnQJCXJfYnl0ZXM7CisJdW5zaWduZWQgaW50CQlyX25lbnRzOworCXVuc2lnbmVkIGludAkJcl9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJcl9zZ1swXTsKK307CisKK3N0YXRpYyBpbmxpbmUgcmRzX3JkbWFfY29va2llX3QgcmRzX3JkbWFfbWFrZV9jb29raWUodTMyIHJfa2V5LCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByX2tleSB8ICgoKHU2NCkgb2Zmc2V0KSA8PCAzMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJkc19yZG1hX2Nvb2tpZV9rZXkocmRzX3JkbWFfY29va2llX3QgY29va2llKQoreworCXJldHVybiBjb29raWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocmRzX3JkbWFfY29va2llX3QgY29va2llKQoreworCXJldHVybiBjb29raWUgPj4gMzI7Cit9CisKK2ludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworaW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOwordm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK2ludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOworaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOwordm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCByZHNfcmRtYV9vcCAqcm8pOwordm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCk7CisKK2V4dGVybiB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3QgcmRzX21yICptcik7CitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX21yX3B1dChzdHJ1Y3QgcmRzX21yICptcikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbXItPnJfcmVmY291bnQpKQorCQlfX3Jkc19wdXRfbXJfZmluYWwobXIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYyBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE5MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmRtYV9jbV9pZCAqcmRzX2l3X2xpc3Rlbl9pZDsKKworaW50IHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCS8qIHRoaXMgY2FuIGJlIG51bGwgaW4gdGhlIGxpc3RlbmluZyBwYXRoICovCisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXAgaWQgJXAgaGFuZGxpbmcgZXZlbnQgJXVcbiIsIGNvbm4sIGNtX2lkLAorCQkgZXZlbnQtPmV2ZW50KTsKKworCWlmIChjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgPT0gUkRNQV9OT0RFX1JOSUMpCisJCXRyYW5zID0gJnJkc19pd190cmFuc3BvcnQ7CisJZWxzZQorCQl0cmFucyA9ICZyZHNfaWJfdHJhbnNwb3J0OworCisJLyogUHJldmVudCBzaHV0ZG93biBmcm9tIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbgorCSAqIHdoaWxlIHdlJ3JlIGV4ZWN1dGluZy4gKi8KKwlpZiAoY29ubikgeworCQltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCisJCS8qIElmIHRoZSBjb25uZWN0aW9uIGlzIGJlaW5nIHNodXQgZG93biwgYmFpbCBvdXQKKwkJICogcmlnaHQgYXdheS4gV2UgcmV0dXJuIDAgc28gY21faWQgZG9lc24ndCBnZXQKKwkJICogZGVzdHJveWVkIHByZW1hdHVyZWx5ICovCisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKSB7CisJCQkvKiBSZWplY3QgaW5jb21pbmcgY29ubmVjdGlvbnMgd2hpbGUgd2UncmUgdGVhcmluZworCQkJICogZG93biBhbiBleGlzdGluZyBvbmUuICovCisJCQlpZiAoZXZlbnQtPmV2ZW50ID09IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUKQorCQkJCXJldCA9IDE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDoKKwkJcmV0ID0gdHJhbnMtPmNtX2hhbmRsZV9jb25uZWN0KGNtX2lkLCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfUkVTT0xWRUQ6CisJCS8qIFhYWCBkbyB3ZSBuZWVkIHRvIGNsZWFuIHVwIGlmIHRoaXMgZmFpbHM/ICovCisJCXJldCA9IHJkbWFfcmVzb2x2ZV9yb3V0ZShjbV9pZCwKKwkJCQkJIFJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX1JPVVRFX1JFU09MVkVEOgorCQkvKiBYWFggd29ycnkgYWJvdXQgcmFjaW5nIHdpdGggbGlzdGVuIGFjY2VwdGFuY2UgKi8KKwkJcmV0ID0gdHJhbnMtPmNtX2luaXRpYXRlX2Nvbm5lY3QoY21faWQpOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDoKKwkJdHJhbnMtPmNtX2Nvbm5lY3RfY29tcGxldGUoY29ubiwgZXZlbnQpOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9ST1VURV9FUlJPUjoKKwljYXNlIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9FUlJPUjoKKwljYXNlIFJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEU6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTDoKKwljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9DSEFOR0U6CisJCWlmIChjb25uKQorCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVEOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IERJU0NPTk5FQ1QgZXZlbnQgLSBkcm9wcGluZyBjb25uZWN0aW9uICIKKwkJCSIlcEk0LT4lcEk0XG4iLCAmY29ubi0+Y19sYWRkciwKKwkJCSAmY29ubi0+Y19mYWRkcik7CisJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogdGhpbmdzIGxpa2UgZGV2aWNlIGRpc2Nvbm5lY3Q/ICovCisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBldmVudCAldVxuIiwgZXZlbnQtPmV2ZW50KTsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKworb3V0OgorCWlmIChjb25uKQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwlyZHNkZWJ1ZygiaWQgJXAgZXZlbnQgJXUgaGFuZGxpbmcgcmV0ICVkXG4iLCBjbV9pZCwgZXZlbnQtPmV2ZW50LCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgcmRzX3JkbWFfbGlzdGVuX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlpbnQgcmV0OworCisJY21faWQgPSByZG1hX2NyZWF0ZV9pZChyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyLCBOVUxMLCBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihjbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihjbV9pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2NyZWF0ZV9pZCgpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzaW4uc2luX2ZhbWlseSA9IFBGX0lORVQsCisJc2luLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMilodG9ubChJTkFERFJfQU5ZKTsKKwlzaW4uc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1BPUlQpOworCisJLyoKKwkgKiBYWFggSSBiZXQgdGhpcyBiaW5kcyB0aGUgY21faWQgdG8gYSBkZXZpY2UuICBJZiB3ZSB3YW50IHRvIHN1cHBvcnQKKwkgKiBmYWlsLW92ZXIgd2UnbGwgaGF2ZSB0byB0YWtlIHRoaXMgaW50byBjb25zaWRlcmF0aW9uLgorCSAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlJEUy9JVzogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCisJCSAgICAgICAicmRtYV9iaW5kX2FkZHIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcmRtYV9saXN0ZW4oY21faWQsIDEyOCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlJEUy9JVzogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCisJCSAgICAgICAicmRtYV9saXN0ZW4oKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImNtICVwIGxpc3RlbmluZyBvbiBwb3J0ICV1XG4iLCBjbV9pZCwgUkRTX1BPUlQpOworCisJcmRzX2l3X2xpc3Rlbl9pZCA9IGNtX2lkOworCWNtX2lkID0gTlVMTDsKK291dDoKKwlpZiAoY21faWQpCisJCXJkbWFfZGVzdHJveV9pZChjbV9pZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX3JkbWFfbGlzdGVuX3N0b3Aodm9pZCkKK3sKKwlpZiAocmRzX2l3X2xpc3Rlbl9pZCkgeworCQlyZHNkZWJ1ZygiY20gJXBcbiIsIHJkc19pd19saXN0ZW5faWQpOworCQlyZG1hX2Rlc3Ryb3lfaWQocmRzX2l3X2xpc3Rlbl9pZCk7CisJCXJkc19pd19saXN0ZW5faWQgPSBOVUxMOworCX0KK30KKworaW50IF9faW5pdCByZHNfcmRtYV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJkc19yZG1hX2xpc3Rlbl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaXdfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2l3X2luaXQ7CisKKwlyZXQgPSByZHNfaWJfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2liX2luaXQ7CisKKwlnb3RvIG91dDsKKworZXJyX2liX2luaXQ6CisJcmRzX2l3X2V4aXQoKTsKK2Vycl9pd19pbml0OgorCXJkc19yZG1hX2xpc3Rlbl9zdG9wKCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfcmRtYV9leGl0KHZvaWQpCit7CisJLyogc3RvcCBsaXN0ZW5pbmcgZmlyc3QgdG8gZW5zdXJlIG5vIG5ldyBjb25uZWN0aW9ucyBhcmUgYXR0ZW1wdGVkICovCisJcmRzX3JkbWFfbGlzdGVuX3N0b3AoKTsKKwlyZHNfaWJfZXhpdCgpOworCXJkc19pd19leGl0KCk7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuaCBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjJjN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX1JETUFfVFJBTlNQT1JUX0gKKyNkZWZpbmUgX1JETUFfVFJBTlNQT1JUX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlICJyZHMuaCIKKworI2RlZmluZSBSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMgICAgIDUwMDAKKworaW50IHJkc19yZG1hX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworLyogZnJvbSByZG1hX3RyYW5zcG9ydC5jICovCitpbnQgcmRzX3JkbWFfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3JkbWFfZXhpdCh2b2lkKTsKKworLyogZnJvbSBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydDsKK2ludCByZHNfaWJfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX2V4aXQodm9pZCk7CisKKy8qIGZyb20gaXcuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pd190cmFuc3BvcnQ7CitpbnQgcmRzX2l3X2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDQwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3Jkcy5oCkBAIC0wLDAgKzEsNjg2IEBACisjaWZuZGVmIF9SRFNfUkRTX0gKKyNkZWZpbmUgX1JEU19SRFNfSAorCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jkcy5oPgorCisjaW5jbHVkZSAiaW5mby5oIgorCisvKgorICogUkRTIE5ldHdvcmsgcHJvdG9jb2wgdmVyc2lvbgorICovCisjZGVmaW5lIFJEU19QUk9UT0NPTF8zXzAJMHgwMzAwCisjZGVmaW5lIFJEU19QUk9UT0NPTF8zXzEJMHgwMzAxCisjZGVmaW5lIFJEU19QUk9UT0NPTF9WRVJTSU9OCVJEU19QUk9UT0NPTF8zXzEKKyNkZWZpbmUgUkRTX1BST1RPQ09MX01BSk9SKHYpCSgodikgPj4gOCkKKyNkZWZpbmUgUkRTX1BST1RPQ09MX01JTk9SKHYpCSgodikgJiAyNTUpCisjZGVmaW5lIFJEU19QUk9UT0NPTChtYWosIG1pbikJKCgobWFqKSA8PCA4KSB8IG1pbikKKworLyoKKyAqIFhYWCByYW5kb21seSBjaG9zZW4sIGJ1dCBhdCBsZWFzdCBzZWVtcyB0byBiZSB1bnVzZWQ6CisgKiAjICAgICAgICAgICAgICAgMTg0NjQtMTg3NjggVW5hc3NpZ25lZAorICogV2Ugc2hvdWxkIGRvIGJldHRlci4gIFdlIHdhbnQgYSByZXNlcnZlZCBwb3J0IHRvIGRpc2NvdXJhZ2UgdW5wcml2J2VkCisgKiB1c2Vyc3BhY2UgZnJvbSBsaXN0ZW5pbmcuCisgKi8KKyNkZWZpbmUgUkRTX1BPUlQJMTg2MzQKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIHJkc2RlYnVnKGZtdCwgYXJncy4uLikgcHJfZGVidWcoIiVzKCk6ICIgZm10LCBfX2Z1bmNfXyAsICMjYXJncykKKyNlbHNlCisvKiBzaWdoLCBwcl9kZWJ1ZygpIGNhdXNlcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3Jkc2RlYnVnKGNoYXIgKmZtdCwgLi4uKQoreworfQorI2VuZGlmCisKKy8qIFhYWCBpcyB0aGVyZSBvbmUgb2YgdGhlc2Ugc29tZXdoZXJlPyAqLworI2RlZmluZSBjZWlsKHgsIHkpIFwKKwkoeyB1bnNpZ25lZCBsb25nIF9feCA9ICh4KSwgX195ID0gKHkpOyAoX194ICsgX195IC0gMSkgLyBfX3k7IH0pCisKKyNkZWZpbmUgUkRTX0ZSQUdfU0hJRlQJMTIKKyNkZWZpbmUgUkRTX0ZSQUdfU0laRQkoKHVuc2lnbmVkIGludCkoMSA8PCBSRFNfRlJBR19TSElGVCkpCisKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX0JZVEVTCSg2NTUzNiAvIDgpCisjZGVmaW5lIFJEU19DT05HX01BUF9MT05HUwkoUkRTX0NPTkdfTUFQX0JZVEVTIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2RlZmluZSBSRFNfQ09OR19NQVBfUEFHRVMJKFBBR0VfQUxJR04oUkRTX0NPTkdfTUFQX0JZVEVTKSAvIFBBR0VfU0laRSkKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUwkoUEFHRV9TSVpFICogOCkKKworc3RydWN0IHJkc19jb25nX21hcCB7CisJc3RydWN0IHJiX25vZGUJCW1fcmJfbm9kZTsKKwlfX2JlMzIJCQltX2FkZHI7CisJd2FpdF9xdWV1ZV9oZWFkX3QJbV93YWl0cTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1fY29ubl9saXN0OworCXVuc2lnbmVkIGxvbmcJCW1fcGFnZV9hZGRyc1tSRFNfQ09OR19NQVBfUEFHRVNdOworfTsKKworCisvKgorICogVGhpcyBpcyBob3cgd2Ugd2lsbCB0cmFjayB0aGUgY29ubmVjdGlvbiBzdGF0ZToKKyAqIEEgY29ubmVjdGlvbiBpcyBhbHdheXMgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIHN0YXRlcy4gVXBkYXRlcyB0byB0aGUgc3RhdGUgYXJlIGF0b21pYyBhbmQgaW1wbHkKKyAqIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK2VudW0geworCVJEU19DT05OX0RPV04gPSAwLAorCVJEU19DT05OX0NPTk5FQ1RJTkcsCisJUkRTX0NPTk5fRElTQ09OTkVDVElORywKKwlSRFNfQ09OTl9VUCwKKwlSRFNfQ09OTl9FUlJPUiwKK307CisKKy8qIEJpdHMgZm9yIGNfZmxhZ3MgKi8KKyNkZWZpbmUgUkRTX0xMX1NFTkRfRlVMTAkwCisjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElORwkxCisKK3N0cnVjdCByZHNfY29ubmVjdGlvbiB7CisJc3RydWN0IGhsaXN0X25vZGUJY19oYXNoX25vZGU7CisJX19iZTMyCQkJY19sYWRkcjsKKwlfX2JlMzIJCQljX2ZhZGRyOworCXVuc2lnbmVkIGludAkJY19sb29wYmFjazoxOworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqY19wYXNzaXZlOworCisJc3RydWN0IHJkc19jb25nX21hcAkqY19sY29uZzsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwCSpjX2Zjb25nOworCisJc3RydWN0IG11dGV4CQljX3NlbmRfbG9jazsJLyogcHJvdGVjdCBzZW5kIHJpbmcgKi8KKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmNfeG1pdF9ybTsKKwl1bnNpZ25lZCBsb25nCQljX3htaXRfc2c7CisJdW5zaWduZWQgaW50CQljX3htaXRfaGRyX29mZjsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9kYXRhX29mZjsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9yZG1hX3NlbnQ7CisKKwlzcGlubG9ja190CQljX2xvY2s7CQkvKiBwcm90ZWN0IG1zZyBxdWV1ZXMgKi8KKwl1NjQJCQljX25leHRfdHhfc2VxOworCXN0cnVjdCBsaXN0X2hlYWQJY19zZW5kX3F1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQJY19yZXRyYW5zOworCisJdTY0CQkJY19uZXh0X3J4X3NlcTsKKworCXN0cnVjdCByZHNfdHJhbnNwb3J0CSpjX3RyYW5zOworCXZvaWQJCQkqY190cmFuc3BvcnRfZGF0YTsKKworCWF0b21pY190CQljX3N0YXRlOworCXVuc2lnbmVkIGxvbmcJCWNfZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJY19yZWNvbm5lY3RfamlmZmllczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWNfc2VuZF93OworCXN0cnVjdCBkZWxheWVkX3dvcmsJY19yZWN2X3c7CisJc3RydWN0IGRlbGF5ZWRfd29yawljX2Nvbm5fdzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY19kb3duX3c7CisJc3RydWN0IG11dGV4CQljX2NtX2xvY2s7CS8qIHByb3RlY3QgY29ubiBzdGF0ZSAmIGNtICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNfbWFwX2l0ZW07CisJdW5zaWduZWQgbG9uZwkJY19tYXBfcXVldWVkOworCXVuc2lnbmVkIGxvbmcJCWNfbWFwX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQljX21hcF9ieXRlczsKKworCXVuc2lnbmVkIGludAkJY191bmFja2VkX3BhY2tldHM7CisJdW5zaWduZWQgaW50CQljX3VuYWNrZWRfYnl0ZXM7CisKKwkvKiBQcm90b2NvbCB2ZXJzaW9uICovCisJdW5zaWduZWQgaW50CQljX3ZlcnNpb247Cit9OworCisjZGVmaW5lIFJEU19GTEFHX0NPTkdfQklUTUFQCTB4MDEKKyNkZWZpbmUgUkRTX0ZMQUdfQUNLX1JFUVVJUkVECTB4MDIKKyNkZWZpbmUgUkRTX0ZMQUdfUkVUUkFOU01JVFRFRAkweDA0CisjZGVmaW5lIFJEU19NQVhfQURWX0NSRURJVAkxMjcKKworLyoKKyAqIE1heGltdW0gc3BhY2UgYXZhaWxhYmxlIGZvciBleHRlbnNpb24gaGVhZGVycy4KKyAqLworI2RlZmluZSBSRFNfSEVBREVSX0VYVF9TUEFDRQkxNgorCitzdHJ1Y3QgcmRzX2hlYWRlciB7CisJX19iZTY0CWhfc2VxdWVuY2U7CisJX19iZTY0CWhfYWNrOworCV9fYmUzMgloX2xlbjsKKwlfX2JlMTYJaF9zcG9ydDsKKwlfX2JlMTYJaF9kcG9ydDsKKwl1OAloX2ZsYWdzOworCXU4CWhfY3JlZGl0OworCXU4CWhfcGFkZGluZ1s0XTsKKwlfX3N1bTE2CWhfY3N1bTsKKworCXU4CWhfZXh0aGRyW1JEU19IRUFERVJfRVhUX1NQQUNFXTsKK307CisKKy8qCisgKiBSZXNlcnZlZCAtIGluZGljYXRlcyBlbmQgb2YgZXh0ZW5zaW9ucworICovCisjZGVmaW5lIFJEU19FWFRIRFJfTk9ORQkJMAorCisvKgorICogVGhpcyBleHRlbnNpb24gaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSB2ZXJ5CisgKiBmaXJzdCBtZXNzYWdlIHRoYXQgaXMgc2VudCBvbiBhIG5ldyBjb25uZWN0aW9uLAorICogYW5kIGlkZW50aWZpZXMgdGhlIHByb3RvY29sIGxldmVsLiBUaGlzIHdpbGwgaGVscAorICogcm9sbGluZyB1cGRhdGVzIGlmIGEgZnV0dXJlIGNoYW5nZSByZXF1aXJlcyBicmVha2luZworICogdGhlIHByb3RvY29sLgorICogTkI6IFRoaXMgaXMgbm8gbG9uZ2VyIHRydWUgZm9yIElCLCB3aGVyZSB3ZSBkbyBhIHZlcnNpb24KKyAqIG5lZ290aWF0aW9uIGR1cmluZyB0aGUgY29ubmVjdGlvbiBzZXR1cCBwaGFzZSAocHJvdG9jb2wKKyAqIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIFJETUEgQ00gcHJpdmF0ZSBkYXRhKS4KKyAqLworI2RlZmluZSBSRFNfRVhUSERSX1ZFUlNJT04JMQorc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24geworCV9fYmUzMgkJCWhfdmVyc2lvbjsKK307CisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIFJEUyBtZXNzYWdlCisgKiBjaGFzaW5nIGFuIFJETUEgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfUkRNQQkJMgorc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgeworCV9fYmUzMgkJCWhfcmRtYV9ya2V5OworfTsKKworLyoKKyAqIFRoaXMgZXh0ZW5zaW9uIGhlYWRlciB0ZWxscyB0aGUgcGVlciBhYm91dCB0aGUKKyAqIGRlc3RpbmF0aW9uIDxSX0tleSxvZmZzZXQ+IG9mIHRoZSByZXF1ZXN0ZWQgUkRNQQorICogb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfUkRNQV9ERVNUCTMKK3N0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QgeworCV9fYmUzMgkJCWhfcmRtYV9ya2V5OworCV9fYmUzMgkJCWhfcmRtYV9vZmZzZXQ7Cit9OworCisjZGVmaW5lIF9fUkRTX0VYVEhEUl9NQVgJMTYgLyogZm9yIG5vdyAqLworCitzdHJ1Y3QgcmRzX2luY29taW5nIHsKKwlhdG9taWNfdAkJaV9yZWZjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlfaXRlbTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKmlfY29ubjsKKwlzdHJ1Y3QgcmRzX2hlYWRlcglpX2hkcjsKKwl1bnNpZ25lZCBsb25nCQlpX3J4X2ppZmZpZXM7CisJX19iZTMyCQkJaV9zYWRkcjsKKworCXJkc19yZG1hX2Nvb2tpZV90CWlfcmRtYV9jb29raWU7Cit9OworCisvKgorICogbV9zb2NrX2l0ZW0gYW5kIG1fY29ubl9pdGVtIGFyZSBvbiBsaXN0cyB0aGF0IGFyZSBzZXJpYWxpemVkIHVuZGVyCisgKiBjb25uLT5jX2xvY2suICBtX3NvY2tfaXRlbSBoYXMgYWRkaXRpb25hbCBtZWFuaW5nIGluIHRoYXQgb25jZSBpdCBpcyBlbXB0eQorICogdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcHV0IGJhY2sgb24gdGhlIHJldHJhbnNtaXQgbGlzdCBhZnRlciBiZWluZyBzZW50LgorICogbWVzc2FnZXMgdGhhdCBhcmUgY2FuY2VsZWQgd2hpbGUgYmVpbmcgc2VudCByZWx5IG9uIHRoaXMuCisgKgorICogbV9pbmMgaXMgdXNlZCBieSBsb29wYmFjayBzbyB0aGF0IGl0IGNhbiBwYXNzIGFuIGluY29taW5nIG1lc3NhZ2Ugc3RyYWlnaHQKKyAqIGJhY2sgdXAgaW50byB0aGUgcnggcGF0aC4gIEl0IGVtYmVkcyBhIHdpcmUgaGVhZGVyIHdoaWNoIGlzIGFsc28gdXNlZCBieQorICogdGhlIHNlbmQgcGF0aCwgd2hpY2ggaXMga2luZCBvZiBhd2t3YXJkLgorICoKKyAqIG1fc29ja19pdGVtIGluZGljYXRlcyB0aGUgbWVzc2FnZSdzIHByZXNlbmNlIG9uIGEgc29ja2V0J3Mgc2VuZCBvciByZWNlaXZlCisgKiBxdWV1ZS4gIG1fcnMgd2lsbCBwb2ludCB0byB0aGF0IHNvY2tldC4KKyAqCisgKiBtX2RhZGRyIGlzIHVzZWQgYnkgY2FuY2VsbGF0aW9uIHRvIHBydW5lIG1lc3NhZ2VzIHRvIGEgZ2l2ZW4gZGVzdGluYXRpb24uCisgKgorICogVGhlIFJEU19NU0dfT05fU09DSyBhbmQgUkRTX01TR19PTl9DT05OIGZsYWdzIGFyZSB1c2VkIHRvIGF2b2lkIGxvY2sKKyAqIG5lc3RpbmcuICBBcyBwYXRocyBpdGVyYXRlIG92ZXIgbWVzc2FnZXMgb24gYSBzb2NrLCBvciBjb25uLCB0aGV5IG11c3QKKyAqIGFsc28gbG9jayB0aGUgY29ubiwgb3Igc29jaywgdG8gcmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gdGhvc2UgbGlzdHMgdG9vLgorICogVGVzdGluZyB0aGUgZmxhZyB0byBkZXRlcm1pbmUgaWYgdGhlIG1lc3NhZ2UgaXMgc3RpbGwgb24gdGhlIGxpc3RzIGxldHMKKyAqIHVzIGF2b2lkIHRlc3RpbmcgdGhlIGxpc3RfaGVhZCBkaXJlY3RseS4gIFRoYXQgbWVhbnMgZWFjaCBwYXRoIGNhbiB1c2UKKyAqIHRoZSBtZXNzYWdlJ3MgbGlzdF9oZWFkIHRvIGtlZXAgaXQgb24gYSBsb2NhbCBsaXN0IHdoaWxlIGp1Z2dsaW5nIGxvY2tzCisgKiB3aXRob3V0IGNvbmZ1c2luZyB0aGUgb3RoZXIgcGF0aC4KKyAqCisgKiBtX2Fja19zZXEgaXMgYW4gb3B0aW9uYWwgZmllbGQgc2V0IGJ5IHRyYW5zcG9ydHMgd2hvIG5lZWQgYSBkaWZmZXJlbnQKKyAqIHNlcXVlbmNlIG51bWJlciByYW5nZSB0byBpbnZhbGlkYXRlLiAgVGhleSBjYW4gdXNlIHRoaXMgaW4gYSBjYWxsYmFjaworICogdGhhdCB0aGV5IHBhc3MgdG8gcmRzX3NlbmRfZHJvcF9hY2tlZCgpIHRvIHNlZSBpZiBlYWNoIG1lc3NhZ2UgaGFzIGJlZW4KKyAqIGFja2VkLiAgVGhlIEhBU19BQ0tfU0VRIGZsYWcgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IG1lc3NhZ2VzIHdoaWNoIGhhdmVuJ3QKKyAqIGhhZCBhY2tfc2VxIHNldCB5ZXQuCisgKi8KKyNkZWZpbmUgUkRTX01TR19PTl9TT0NLCQkxCisjZGVmaW5lIFJEU19NU0dfT05fQ09OTgkJMgorI2RlZmluZSBSRFNfTVNHX0hBU19BQ0tfU0VRCTMKKyNkZWZpbmUgUkRTX01TR19BQ0tfUkVRVUlSRUQJNAorI2RlZmluZSBSRFNfTVNHX1JFVFJBTlNNSVRURUQJNQorI2RlZmluZSBSRFNfTVNHX01BUFBFRAkJNgorI2RlZmluZSBSRFNfTVNHX1BBR0VWRUMJCTcKKworc3RydWN0IHJkc19tZXNzYWdlIHsKKwlhdG9taWNfdAkJbV9yZWZjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1fc29ja19pdGVtOworCXN0cnVjdCBsaXN0X2hlYWQJbV9jb25uX2l0ZW07CisJc3RydWN0IHJkc19pbmNvbWluZwltX2luYzsKKwl1NjQJCQltX2Fja19zZXE7CisJX19iZTMyCQkJbV9kYWRkcjsKKwl1bnNpZ25lZCBsb25nCQltX2ZsYWdzOworCisJLyogTmV2ZXIgYWNjZXNzIG1fcnMgd2l0aG91dCBob2xkaW5nIG1fcnNfbG9jay4KKwkgKiBMb2NrIG5lc3RpbmcgaXMKKwkgKiAgcm0tPm1fcnNfbG9jaworCSAqICAgLT4gcnMtPnJzX2xvY2sKKwkgKi8KKwlzcGlubG9ja190CQltX3JzX2xvY2s7CisJc3RydWN0IHJkc19zb2NrCQkqbV9yczsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AJKm1fcmRtYV9vcDsKKwlyZHNfcmRtYV9jb29raWVfdAltX3JkbWFfY29va2llOworCXN0cnVjdCByZHNfbXIJCSptX3JkbWFfbXI7CisJdW5zaWduZWQgaW50CQltX25lbnRzOworCXVuc2lnbmVkIGludAkJbV9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJbV9zZ1swXTsKK307CisKKy8qCisgKiBUaGUgUkRTIG5vdGlmaWVyIGlzIHVzZWQgKG9wdGlvbmFsbHkpIHRvIHRlbGwgdGhlIGFwcGxpY2F0aW9uIGFib3V0CisgKiBjb21wbGV0ZWQgUkRNQSBvcGVyYXRpb25zLiBSYXRoZXIgdGhhbiBrZWVwaW5nIHRoZSB3aG9sZSByZHMgbWVzc2FnZQorICogYXJvdW5kIG9uIHRoZSBxdWV1ZSwgd2UgYWxsb2NhdGUgYSBzbWFsbCBub3RpZmllciB0aGF0IGlzIHB1dCBvbiB0aGUKKyAqIHNvY2tldCdzIG5vdGlmaWVyX2xpc3QuIE5vdGlmaWNhdGlvbnMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIHRocm91Z2ggY29udHJvbCBtZXNzYWdlcy4KKyAqLworc3RydWN0IHJkc19ub3RpZmllciB7CisJc3RydWN0IGxpc3RfaGVhZAluX2xpc3Q7CisJdWludDY0X3QJCW5fdXNlcl90b2tlbjsKKwlpbnQJCQluX3N0YXR1czsKK307CisKKy8qKgorICogc3RydWN0IHJkc190cmFuc3BvcnQgLSAgdHJhbnNwb3J0IHNwZWNpZmljIGJlaGF2aW91cmFsIGhvb2tzCisgKgorICogQHhtaXQ6IC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmQKKyAqICAgICAgICBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpcworICogICAgICAgIGRvZXNuJ3QgbmVlZCB0byBiZSByZWVudHJhbnQgZm9yIGEgZ2l2ZW4gY29ubi4gIFRoZSBoZWFkZXIgbXVzdCBiZQorICogICAgICAgIHNlbnQgYmVmb3JlIHRoZSBkYXRhIHBheWxvYWQuICAueG1pdCBtdXN0IGJlIHByZXBhcmVkIHRvIHNlbmQgYQorICogICAgICAgIG1lc3NhZ2Ugd2l0aCBubyBkYXRhIHBheWxvYWQuICAueG1pdCBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAqICAgICAgICBieXRlcyB0aGF0IHdlcmUgc2VudCBkb3duIHRoZSBjb25uZWN0aW9uLCBpbmNsdWRpbmcgaGVhZGVyIGJ5dGVzLgorICogICAgICAgIFJldHVybmluZyAwIHRlbGxzIHRoZSBjYWxsZXIgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkKKyAqICAgICAgICBhZGRpdGlvbmFsIHdvcmsgbm93LiAgVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIHdoZW4gdGhlIHRyYW5zcG9ydCBoYXMKKyAqICAgICAgICBmaWxsZWQgdGhlIHNlbmRpbmcgcXVldWUgZm9yIGl0cyBjb25uZWN0aW9uIGFuZCB3aWxsIGhhbmRsZQorICogICAgICAgIHRyaWdnZXJpbmcgdGhlIHJkcyB0aHJlYWQgdG8gY29udGludWUgdGhlIHNlbmQgd2hlbiBzcGFjZSBiZWNvbWVzCisgKiAgICAgICAgYXZhaWxhYmxlLiAgUmV0dXJuaW5nIC1FQUdBSU4gdGVsbHMgdGhlIGNhbGxlciB0byByZXRyeSB0aGUgc2VuZAorICogICAgICAgIGltbWVkaWF0ZWx5LiAgUmV0dXJuaW5nIC1FTk9NRU0gdGVsbHMgdGhlIGNhbGxlciB0byByZXRyeSB0aGUgc2VuZCBhdAorICogICAgICAgIHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiBAY29ubl9zaHV0ZG93bjogY29ubl9zaHV0ZG93biBzdG9wcyB0cmFmZmljIG9uIHRoZSBnaXZlbiBjb25uZWN0aW9uLiAgT25jZQorICogICAgICAgICAgICAgICAgIGl0IHJldHVybnMgdGhlIGNvbm5lY3Rpb24gY2FuIG5vdCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuCisgKiAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UgYWZ0ZXIgY29ubl9jb25uZWN0IHJldHVybnMKKyAqICAgICAgICAgICAgICAgICBub24temVybyBzdWNjZXNzIGFuZCB3aWxsIFRoZSBjYWxsZXIgc2VyaWFsaXplcyB0aGlzIHdpdGgKKyAqICAgICAgICAgICAgICAgICB0aGUgc2VuZCBhbmQgY29ubmVjdGluZyBwYXRocyAoeG1pdF8qIGFuZCBjb25uXyopLiAgVGhlCisgKiAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IGlzIHJlc3BvbnNpYmxlIGZvciBvdGhlciBzZXJpYWxpemF0aW9uLCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgICAgICByZHNfcmVjdl9pbmNvbWluZygpLiAgVGhpcyBpcyBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IGJ1dAorICogICAgICAgICAgICAgICAgIHNob3VsZCB0cnkgaGFyZCBub3QgdG8gYmxvY2suCisgKgorICogQHhtaXRfY29uZ19tYXA6IFRoaXMgYXNrcyB0aGUgdHJhbnNwb3J0IHRvIHNlbmQgdGhlIGxvY2FsIGJpdG1hcCBkb3duIHRoZQorICogCQkgICBnaXZlbiBjb25uZWN0aW9uLiAgWFhYIGdldCBhIGJldHRlciBzdG9yeSBhYm91dCB0aGUgYml0bWFwCisgKiAJCSAgIGZsYWcgYW5kIGhlYWRlci4KKyAqLworCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7CisJY2hhcgkJCXRfbmFtZVtUUkFOU05BTVNJWl07CisJc3RydWN0IGxpc3RfaGVhZAl0X2l0ZW07CisJc3RydWN0IG1vZHVsZQkJKnRfb3duZXI7CisJdW5zaWduZWQgaW50CQl0X3ByZWZlcl9sb29wYmFjazoxOworCisJaW50ICgqbGFkZHJfY2hlY2spKF9fYmUzMiBhZGRyKTsKKwlpbnQgKCpjb25uX2FsbG9jKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCk7CisJdm9pZCAoKmNvbm5fZnJlZSkodm9pZCAqZGF0YSk7CisJaW50ICgqY29ubl9jb25uZWN0KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCXZvaWQgKCpjb25uX3NodXRkb3duKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCXZvaWQgKCp4bWl0X3ByZXBhcmUpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKnhtaXRfY29tcGxldGUpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJaW50ICgqeG1pdCkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkgICAgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZik7CisJaW50ICgqeG1pdF9jb25nX21hcCkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwlpbnQgKCp4bWl0X3JkbWEpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7CisJaW50ICgqcmVjdikoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwlpbnQgKCppbmNfY29weV90b191c2VyKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCXNpemVfdCBzaXplKTsKKwl2b2lkICgqaW5jX3B1cmdlKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworCXZvaWQgKCppbmNfZnJlZSkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKKworCWludCAoKmNtX2hhbmRsZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkJIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisJaW50ICgqY21faW5pdGlhdGVfY29ubmVjdCkoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKKwl2b2lkICgqY21fY29ubmVjdF9jb21wbGV0ZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisJdW5zaWduZWQgaW50ICgqc3RhdHNfaW5mb19jb3B5KShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJCXVuc2lnbmVkIGludCBhdmFpbCk7CisJdm9pZCAoKmV4aXQpKHZvaWQpOworCXZvaWQgKigqZ2V0X21yKShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5yX3NnLAorCQkJc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KTsKKwl2b2lkICgqc3luY19tcikodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAoKmZyZWVfbXIpKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKTsKKwl2b2lkICgqZmx1c2hfbXJzKSh2b2lkKTsKK307CisKK3N0cnVjdCByZHNfc29jayB7CisJc3RydWN0IHNvY2sJCXJzX3NrOworCisJdTY0CQkJcnNfdXNlcl9hZGRyOworCXU2NAkJCXJzX3VzZXJfYnl0ZXM7CisKKwkvKgorCSAqIGJvdW5kX2FkZHIgdXNlZCBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcsIG5vIElOQUREUl9BTlkKKwkgKiBzdXBwb3J0LgorCSAqLworCXN0cnVjdCByYl9ub2RlCQlyc19ib3VuZF9ub2RlOworCV9fYmUzMgkJCXJzX2JvdW5kX2FkZHI7CisJX19iZTMyCQkJcnNfY29ubl9hZGRyOworCV9fYmUxNgkJCXJzX2JvdW5kX3BvcnQ7CisJX19iZTE2CQkJcnNfY29ubl9wb3J0OworCisJLyoKKwkgKiBUaGlzIGlzIG9ubHkgdXNlZCB0byBjb21tdW5pY2F0ZSB0aGUgdHJhbnNwb3J0IGJldHdlZW4gYmluZCBhbmQKKwkgKiBpbml0aWF0aW5nIGNvbm5lY3Rpb25zLiAgQWxsIG90aGVyIHRyYW5zIHVzZSBpcyByZWZlcmVuY2VkIHRocm91Z2gKKwkgKiB0aGUgY29ubmVjdGlvbi4KKwkgKi8KKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAgICAqcnNfdHJhbnNwb3J0OworCisJLyoKKwkgKiByZHNfc2VuZG1zZyBjYWNoZXMgdGhlIGNvbm4gaXQgdXNlZCB0aGUgbGFzdCB0aW1lIGFyb3VuZC4KKwkgKiBUaGlzIGhlbHBzIGF2b2lkIGNvc3RseSBsb29rdXBzLgorCSAqLworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqcnNfY29ubjsKKworCS8qIGZsYWcgaW5kaWNhdGluZyB3ZSB3ZXJlIGNvbmdlc3RlZCBvciBub3QgKi8KKwlpbnQJCQlyc19jb25nZXN0ZWQ7CisKKwkvKiByc19sb2NrIHByb3RlY3RzIGFsbCB0aGVzZSBhZGphY2VudCBtZW1iZXJzIGJlZm9yZSB0aGUgbmV3bGluZSAqLworCXNwaW5sb2NrX3QJCXJzX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyc19zZW5kX3F1ZXVlOworCXUzMgkJCXJzX3NuZF9ieXRlczsKKwlpbnQJCQlyc19yY3ZfYnl0ZXM7CisJc3RydWN0IGxpc3RfaGVhZAlyc19ub3RpZnlfcXVldWU7CS8qIGN1cnJlbnRseSB1c2VkIGZvciBmYWlsZWQgUkRNQXMgKi8KKworCS8qIENvbmdlc3Rpb24gd2FrZV91cC4gSWYgcnNfY29uZ19tb25pdG9yIGlzIHNldCwgd2UgdXNlIGNvbmdfbWFzaworCSAqIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgd29rZW4gdXAuCisJICogSWYgbm90IHNldCwgd2UgdXNlIHJzX2NvbmdfdHJhY2sgdG8gZmluZCBvdXQgd2hldGhlciBhIGNvbmcgbWFwCisJICogdXBkYXRlIGFycml2ZWQuCisJICovCisJdWludDY0X3QJCXJzX2NvbmdfbWFzazsKKwl1aW50NjRfdAkJcnNfY29uZ19ub3RpZnk7CisJc3RydWN0IGxpc3RfaGVhZAlyc19jb25nX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJcnNfY29uZ190cmFjazsKKworCS8qCisJICogcnNfcmVjdl9sb2NrIHByb3RlY3RzIHRoZSByZWNlaXZlIHF1ZXVlLCBhbmQgaXMKKwkgKiB1c2VkIHRvIHNlcmlhbGl6ZSB3aXRoIHJkc19yZWxlYXNlLgorCSAqLworCXJ3bG9ja190CQlyc19yZWN2X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyc19yZWN2X3F1ZXVlOworCisJLyoganVzdCBmb3Igc3RhdHMgcmVwb3J0aW5nICovCisJc3RydWN0IGxpc3RfaGVhZAlyc19pdGVtOworCisJLyogdGhlc2UgaGF2ZSB0aGVpciBvd24gbG9jayAqLworCXNwaW5sb2NrX3QJCXJzX3JkbWFfbG9jazsKKwlzdHJ1Y3QgcmJfcm9vdAkJcnNfcmRtYV9rZXlzOworCisJLyogU29ja2V0IG9wdGlvbnMgLSBpbiBjYXNlIHRoZXJlIHdpbGwgYmUgbW9yZSAqLworCXVuc2lnbmVkIGNoYXIJCXJzX3JlY3ZlcnIsCisJCQkJcnNfY29uZ19tb25pdG9yOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmRzX3NvY2sgKnJkc19za190b19ycyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHJkc19zb2NrLCByc19zayk7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpyZHNfcnNfdG9fc2soc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gJnJzLT5yc19zazsKK30KKworLyoKKyAqIFRoZSBzdGFjayBhc3NpZ25zIHNrX3NuZGJ1ZiBhbmQgc2tfcmN2YnVmIHRvIHR3aWNlIHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAqIHRvIGFjY291bnQgZm9yIG92ZXJoZWFkLiAgV2UgZG9uJ3QgYWNjb3VudCBmb3Igb3ZlcmhlYWQsIHdlIGp1c3QgYXBwbHkKKyAqIHRoZSBudW1iZXIgb2YgcGF5bG9hZCBieXRlcyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCByZHNfc2tfc25kYnVmKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJcmV0dXJuIHJkc19yc190b19zayhycyktPnNrX3NuZGJ1ZiAvIDI7Cit9CitzdGF0aWMgaW5saW5lIGludCByZHNfc2tfcmN2YnVmKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJcmV0dXJuIHJkc19yc190b19zayhycyktPnNrX3JjdmJ1ZiAvIDI7Cit9CisKK3N0cnVjdCByZHNfc3RhdGlzdGljcyB7CisJdWludDY0X3QJc19jb25uX3Jlc2V0OworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX2JhZF9jaGVja3N1bTsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9vbGRfc2VxOworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX25vX3NvY2s7CisJdWludDY0X3QJc19yZWN2X2Ryb3BfZGVhZF9zb2NrOworCXVpbnQ2NF90CXNfcmVjdl9kZWxpdmVyX3JhY2VkOworCXVpbnQ2NF90CXNfcmVjdl9kZWxpdmVyZWQ7CisJdWludDY0X3QJc19yZWN2X3F1ZXVlZDsKKwl1aW50NjRfdAlzX3JlY3ZfaW1tZWRpYXRlX3JldHJ5OworCXVpbnQ2NF90CXNfcmVjdl9kZWxheWVkX3JldHJ5OworCXVpbnQ2NF90CXNfcmVjdl9hY2tfcmVxdWlyZWQ7CisJdWludDY0X3QJc19yZWN2X3JkbWFfYnl0ZXM7CisJdWludDY0X3QJc19yZWN2X3Bpbmc7CisJdWludDY0X3QJc19zZW5kX3F1ZXVlX2VtcHR5OworCXVpbnQ2NF90CXNfc2VuZF9xdWV1ZV9mdWxsOworCXVpbnQ2NF90CXNfc2VuZF9zZW1fY29udGVudGlvbjsKKwl1aW50NjRfdAlzX3NlbmRfc2VtX3F1ZXVlX3JhY2VkOworCXVpbnQ2NF90CXNfc2VuZF9pbW1lZGlhdGVfcmV0cnk7CisJdWludDY0X3QJc19zZW5kX2RlbGF5ZWRfcmV0cnk7CisJdWludDY0X3QJc19zZW5kX2Ryb3BfYWNrZWQ7CisJdWludDY0X3QJc19zZW5kX2Fja19yZXF1aXJlZDsKKwl1aW50NjRfdAlzX3NlbmRfcXVldWVkOworCXVpbnQ2NF90CXNfc2VuZF9yZG1hOworCXVpbnQ2NF90CXNfc2VuZF9yZG1hX2J5dGVzOworCXVpbnQ2NF90CXNfc2VuZF9wb25nOworCXVpbnQ2NF90CXNfcGFnZV9yZW1haW5kZXJfaGl0OworCXVpbnQ2NF90CXNfcGFnZV9yZW1haW5kZXJfbWlzczsKKwl1aW50NjRfdAlzX2NvcHlfdG9fdXNlcjsKKwl1aW50NjRfdAlzX2NvcHlfZnJvbV91c2VyOworCXVpbnQ2NF90CXNfY29uZ191cGRhdGVfcXVldWVkOworCXVpbnQ2NF90CXNfY29uZ191cGRhdGVfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19jb25nX3NlbmRfZXJyb3I7CisJdWludDY0X3QJc19jb25nX3NlbmRfYmxvY2tlZDsKK307CisKKy8qIGFmX3Jkcy5jICovCit2b2lkIHJkc19zb2NrX2FkZHJlZihzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3ZvaWQgcmRzX3NvY2tfcHV0KHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfd2FrZV9za19zbGVlcChzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jkc193YWtlX3NrX3NsZWVwKHN0cnVjdCBzb2NrICpzaykKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdHEgPSBzay0+c2tfc2xlZXA7CisKKwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSAmJiB3YWl0cSkKKwkJd2FrZV91cCh3YWl0cSk7Cit9CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgcmRzX3BvbGxfd2FpdHE7CisKKworLyogYmluZC5jICovCitpbnQgcmRzX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKTsKK3ZvaWQgcmRzX3JlbW92ZV9ib3VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3N0cnVjdCByZHNfc29jayAqcmRzX2ZpbmRfYm91bmQoX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KTsKKworLyogY29uZy5jICovCitpbnQgcmRzX2NvbmdfZ2V0X21hcHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2NvbmdfYWRkX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Nvbmdfc2V0X2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KTsKK3ZvaWQgcmRzX2NvbmdfY2xlYXJfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpOworaW50IHJkc19jb25nX3dhaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCwgaW50IG5vbmJsb2NrLCBzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3ZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApOwordm9pZCByZHNfY29uZ19tYXBfdXBkYXRlZChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVpbnQ2NF90KTsKK2ludCByZHNfY29uZ191cGRhdGVkX3NpbmNlKHVuc2lnbmVkIGxvbmcgKnJlY2VudCk7Cit2b2lkIHJkc19jb25nX2FkZF9zb2NrZXQoc3RydWN0IHJkc19zb2NrICopOwordm9pZCByZHNfY29uZ19yZW1vdmVfc29ja2V0KHN0cnVjdCByZHNfc29jayAqKTsKK3ZvaWQgcmRzX2NvbmdfZXhpdCh2b2lkKTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX2NvbmdfdXBkYXRlX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisKKy8qIGNvbm4uYyAqLworaW50IF9faW5pdCByZHNfY29ubl9pbml0KHZvaWQpOwordm9pZCByZHNfY29ubl9leGl0KHZvaWQpOworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGUoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKTsKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29ubl9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19mb3JfZWFjaF9jb25uX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucywKKwkJCSAgaW50ICgqdmlzaXRvcikoc3RydWN0IHJkc19jb25uZWN0aW9uICosIHZvaWQgKiksCisJCQkgIHNpemVfdCBpdGVtX2xlbik7Cit2b2lkIF9fcmRzX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICosIC4uLikKKwkJCQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisjZGVmaW5lIHJkc19jb25uX2Vycm9yKGNvbm4sIGZtdC4uLikgXAorCV9fcmRzX2Nvbm5fZXJyb3IoY29ubiwgS0VSTl9XQVJOSU5HICJSRFM6ICIgZm10KQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fdHJhbnNpdGlvbihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBvbGQsIGludCBuZXcpCit7CisJcmV0dXJuIGF0b21pY19jbXB4Y2hnKCZjb25uLT5jX3N0YXRlLCBvbGQsIG5ldykgPT0gb2xkOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fc3RhdGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl91cChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9VUDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX2Nvbm5lY3Rpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fQ09OTkVDVElORzsKK30KKworLyogbWVzc2FnZS5jICovCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2FsbG9jKHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwKTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIoc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcnMsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pOwordm9pZCByZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoc3RydWN0IHJkc19oZWFkZXIgKmhkciwgX19iZTE2IHNwb3J0LAorCQkJCSBfX2JlMTYgZHBvcnQsIHU2NCBzZXEpOworaW50IHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqcG9zLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCAqYnVmbGVuKTsKK2ludCByZHNfbWVzc2FnZV9hZGRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50IHZlcnNpb24pOworaW50IHJkc19tZXNzYWdlX2dldF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgKnZlcnNpb24pOworaW50IHJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHUzMiByX2tleSwgdTMyIG9mZnNldCk7CitpbnQgcmRzX21lc3NhZ2VfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCQkJIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJkc19tZXNzYWdlX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfbWVzc2FnZV9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfbWVzc2FnZV9hZGRyZWYoc3RydWN0IHJkc19tZXNzYWdlICpybSk7Cit2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2VfdW5tYXBwZWQoc3RydWN0IHJkc19tZXNzYWdlICpybSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKHN0cnVjdCByZHNfaGVhZGVyICpoZHIpCit7CisJaGRyLT5oX2NzdW0gPSAwOworCWhkci0+aF9jc3VtID0gaXBfZmFzdF9jc3VtKCh2b2lkICopIGhkciwgc2l6ZW9mKCpoZHIpID4+IDIpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZHNfbWVzc2FnZV92ZXJpZnlfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHJkc19oZWFkZXIgKmhkcikKK3sKKwlyZXR1cm4gIWhkci0+aF9jc3VtIHx8IGlwX2Zhc3RfY3N1bSgodm9pZCAqKSBoZHIsIHNpemVvZigqaGRyKSA+PiAyKSA9PSAwOworfQorCisKKy8qIHBhZ2UuYyAqLworaW50IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCQkgICAgIGdmcF90IGdmcCk7CitpbnQgcmRzX3BhZ2VfY29weV91c2VyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgX191c2VyICpwdHIsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCSAgICAgICBpbnQgdG9fdXNlcik7CisjZGVmaW5lIHJkc19wYWdlX2NvcHlfdG9fdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMpIFwKKwlyZHNfcGFnZV9jb3B5X3VzZXIocGFnZSwgb2Zmc2V0LCBwdHIsIGJ5dGVzLCAxKQorI2RlZmluZSByZHNfcGFnZV9jb3B5X2Zyb21fdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMpIFwKKwlyZHNfcGFnZV9jb3B5X3VzZXIocGFnZSwgb2Zmc2V0LCBwdHIsIGJ5dGVzLCAwKQordm9pZCByZHNfcGFnZV9leGl0KHZvaWQpOworCisvKiByZWN2LmMgKi8KK3ZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkgIF9fYmUzMiBzYWRkcik7Cit2b2lkIHJkc19pbmNfYWRkcmVmKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19pbmNfcHV0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19yZWN2X2luY29taW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIGdmcF90IGdmcCwgZW51bSBrbV90eXBlIGttKTsKK2ludCByZHNfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJc2l6ZV90IHNpemUsIGludCBtc2dfZmxhZ3MpOwordm9pZCByZHNfY2xlYXJfcmVjdl9xdWV1ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK2ludCByZHNfbm90aWZ5X3F1ZXVlX2dldChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgbXNnaGRyICptc2cpOwordm9pZCByZHNfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCSAgICAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgaW50IGZsaXApOworCisvKiBzZW5kLmMgKi8KK2ludCByZHNfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJc2l6ZV90IHBheWxvYWRfbGVuKTsKK3ZvaWQgcmRzX3NlbmRfcmVzZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitzdHJ1Y3Qgc29ja2FkZHJfaW47Cit2b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luICpkZXN0KTsKK3R5cGVkZWYgaW50ICgqaXNfYWNrZWRfZnVuYykoc3RydWN0IHJkc19tZXNzYWdlICpybSwgdWludDY0X3QgYWNrKTsKK3ZvaWQgcmRzX3NlbmRfZHJvcF9hY2tlZChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBhY2ssCisJCQkgaXNfYWNrZWRfZnVuYyBpc19hY2tlZCk7CitpbnQgcmRzX3NlbmRfYWNrZWRfYmVmb3JlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IHNlcSk7Cit2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpOworaW50IHJkc19zZW5kX3Bvbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMTYgZHBvcnQpOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfc2VuZF9nZXRfbWVzc2FnZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwKKwkJCQkJIHN0cnVjdCByZHNfcmRtYV9vcCAqKTsKKworLyogcmRtYS5jICovCit2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKTsKKworLyogc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfc3RhdGlzdGljcywgcmRzX3N0YXRzKTsKKyNkZWZpbmUgcmRzX3N0YXRzX2luY193aGljaCh3aGljaCwgbWVtYmVyKSBkbyB7CQlcCisJcGVyX2NwdSh3aGljaCwgZ2V0X2NwdSgpKS5tZW1iZXIrKzsJCVwKKwlwdXRfY3B1KCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByZHNfc3RhdHNfaW5jKG1lbWJlcikgcmRzX3N0YXRzX2luY193aGljaChyZHNfc3RhdHMsIG1lbWJlcikKKyNkZWZpbmUgcmRzX3N0YXRzX2FkZF93aGljaCh3aGljaCwgbWVtYmVyLCBjb3VudCkgZG8gewkJXAorCXBlcl9jcHUod2hpY2gsIGdldF9jcHUoKSkubWVtYmVyICs9IGNvdW50OwlcCisJcHV0X2NwdSgpOwkJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmRzX3N0YXRzX2FkZChtZW1iZXIsIGNvdW50KSByZHNfc3RhdHNfYWRkX3doaWNoKHJkc19zdGF0cywgbWVtYmVyLCBjb3VudCkKK2ludCBfX2luaXQgcmRzX3N0YXRzX2luaXQodm9pZCk7Cit2b2lkIHJkc19zdGF0c19leGl0KHZvaWQpOwordm9pZCByZHNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSB1aW50NjRfdCAqdmFsdWVzLCBjaGFyICoqbmFtZXMsIHNpemVfdCBucik7CisKKy8qIHN5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfbWluOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfZGVmYXVsdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfc25kYnVmX21heDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzOworZXh0ZXJuIHVuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9waW5nX2VuYWJsZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfdHJhY2VfZmxhZ3M7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX3RyYWNlX2xldmVsOworCisvKiB0aHJlYWRzLmMgKi8KK2ludCBfX2luaXQgcmRzX3RocmVhZHNfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3RocmVhZHNfZXhpdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX3dxOwordm9pZCByZHNfY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKworLyogdHJhbnNwb3J0LmMgKi8KK2ludCByZHNfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKTsKK3ZvaWQgcmRzX3RyYW5zX3VucmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKTsKK3N0cnVjdCByZHNfdHJhbnNwb3J0ICpyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChfX2JlMzIgYWRkcik7Cit1bnNpZ25lZCBpbnQgcmRzX3RyYW5zX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CitpbnQgX19pbml0IHJkc190cmFuc19pbml0KHZvaWQpOwordm9pZCByZHNfdHJhbnNfZXhpdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL3JlY3YuYyBiL25ldC9yZHMvcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTE4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JlY3YuYwpAQCAtMCwwICsxLDU0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCit2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJICBfX2JlMzIgc2FkZHIpCit7CisJYXRvbWljX3NldCgmaW5jLT5pX3JlZmNvdW50LCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5jLT5pX2l0ZW0pOworCWluYy0+aV9jb25uID0gY29ubjsKKwlpbmMtPmlfc2FkZHIgPSBzYWRkcjsKKwlpbmMtPmlfcmRtYV9jb29raWUgPSAwOworfQorCit2b2lkIHJkc19pbmNfYWRkcmVmKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlyZHNkZWJ1ZygiYWRkcmVmIGluYyAlcCByZWYgJWRcbiIsIGluYywgYXRvbWljX3JlYWQoJmluYy0+aV9yZWZjb3VudCkpOworCWF0b21pY19pbmMoJmluYy0+aV9yZWZjb3VudCk7Cit9CisKK3ZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXJkc2RlYnVnKCJwdXQgaW5jICVwIHJlZiAlZFxuIiwgaW5jLCBhdG9taWNfcmVhZCgmaW5jLT5pX3JlZmNvdW50KSk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmluYy0+aV9yZWZjb3VudCkpIHsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZpbmMtPmlfaXRlbSkpOworCisJCWluYy0+aV9jb25uLT5jX3RyYW5zLT5pbmNfZnJlZShpbmMpOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwKKwkJCQkgIGludCBkZWx0YSwgX19iZTE2IHBvcnQpCit7CisJaW50IG5vd19jb25nZXN0ZWQ7CisKKwlpZiAoZGVsdGEgPT0gMCkKKwkJcmV0dXJuOworCisJcnMtPnJzX3Jjdl9ieXRlcyArPSBkZWx0YTsKKwlub3dfY29uZ2VzdGVkID0gcnMtPnJzX3Jjdl9ieXRlcyA+IHJkc19za19yY3ZidWYocnMpOworCisJcmRzZGVidWcoInJzICVwICglcEk0OiV1KSByZWN2IGJ5dGVzICVkIGJ1ZiAlZCAiCisJICAibm93X2NvbmcgJWQgZGVsdGEgJWRcbiIsCisJICBycywgJnJzLT5yc19ib3VuZF9hZGRyLAorCSAgbnRvaHMocnMtPnJzX2JvdW5kX3BvcnQpLCBycy0+cnNfcmN2X2J5dGVzLAorCSAgcmRzX3NrX3JjdmJ1ZihycyksIG5vd19jb25nZXN0ZWQsIGRlbHRhKTsKKworCS8qIHdhc24ndCAtPiBhbSBjb25nZXN0ZWQgKi8KKwlpZiAoIXJzLT5yc19jb25nZXN0ZWQgJiYgbm93X2Nvbmdlc3RlZCkgeworCQlycy0+cnNfY29uZ2VzdGVkID0gMTsKKwkJcmRzX2Nvbmdfc2V0X2JpdChtYXAsIHBvcnQpOworCQlyZHNfY29uZ19xdWV1ZV91cGRhdGVzKG1hcCk7CisJfQorCS8qIHdhcyAtPiBhcmVuJ3QgY29uZ2VzdGVkICovCisJLyogUmVxdWlyZSBtb3JlIGZyZWUgc3BhY2UgYmVmb3JlIHJlcG9ydGluZyB1bmNvbmdlc3RlZCB0byBwcmV2ZW50CisJICAgYm91bmNpbmcgY29uZy91bmNvbmcgc3RhdGUgdG9vIG9mdGVuICovCisJZWxzZSBpZiAocnMtPnJzX2Nvbmdlc3RlZCAmJiAocnMtPnJzX3Jjdl9ieXRlcyA8IChyZHNfc2tfcmN2YnVmKHJzKS8yKSkpIHsKKwkJcnMtPnJzX2Nvbmdlc3RlZCA9IDA7CisJCXJkc19jb25nX2NsZWFyX2JpdChtYXAsIHBvcnQpOworCQlyZHNfY29uZ19xdWV1ZV91cGRhdGVzKG1hcCk7CisJfQorCisJLyogZG8gbm90aGluZyBpZiBubyBjaGFuZ2UgaW4gY29uZyBzdGF0ZSAqLworfQorCisvKgorICogUHJvY2VzcyBhbGwgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBjb21lIHdpdGggdGhpcyBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZCByZHNfcmVjdl9pbmNvbWluZ19leHRoZHJzKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmluYy0+aV9oZHI7CisJdW5zaWduZWQgaW50IHBvcyA9IDAsIHR5cGUsIGxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uIHZlcnNpb247CisJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hIHJkbWE7CisJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QgcmRtYV9kZXN0OworCX0gYnVmZmVyOworCisJd2hpbGUgKDEpIHsKKwkJbGVuID0gc2l6ZW9mKGJ1ZmZlcik7CisJCXR5cGUgPSByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihoZHIsICZwb3MsICZidWZmZXIsICZsZW4pOworCQlpZiAodHlwZSA9PSBSRFNfRVhUSERSX05PTkUpCisJCQlicmVhazsKKwkJLyogUHJvY2VzcyBleHRlbnNpb24gaGVhZGVyIGhlcmUgKi8KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgUkRTX0VYVEhEUl9SRE1BOgorCQkJcmRzX3JkbWFfdW51c2UocnMsIGJlMzJfdG9fY3B1KGJ1ZmZlci5yZG1hLmhfcmRtYV9ya2V5KSwgMCk7CisJCQlicmVhazsKKworCQljYXNlIFJEU19FWFRIRFJfUkRNQV9ERVNUOgorCQkJLyogV2UgaWdub3JlIHRoZSBzaXplIGZvciBub3cuIFdlIGNvdWxkIHN0YXNoIGl0CisJCQkgKiBzb21ld2hlcmUgYW5kIHVzZSBpdCBmb3IgZXJyb3IgY2hlY2tpbmcuICovCisJCQlpbmMtPmlfcmRtYV9jb29raWUgPSByZHNfcmRtYV9tYWtlX2Nvb2tpZSgKKwkJCQkJYmUzMl90b19jcHUoYnVmZmVyLnJkbWFfZGVzdC5oX3JkbWFfcmtleSksCisJCQkJCWJlMzJfdG9fY3B1KGJ1ZmZlci5yZG1hX2Rlc3QuaF9yZG1hX29mZnNldCkpOworCisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoZSB0cmFuc3BvcnQgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlcgorICogcnggYW5kIGNvbm4gcmVzZXQgb24gdGhpcyBzcGVjaWZpYyBjb25uLgorICoKKyAqIFdlIGN1cnJlbnRseSBhc3NlcnQgdGhhdCBvbmx5IG9uZSBmcmFnbWVudGVkIG1lc3NhZ2Ugd2lsbCBiZSBzZW50CisgKiBkb3duIGEgY29ubmVjdGlvbiBhdCBhIHRpbWUuICBUaGlzIGxldHMgdXMgcmVhc3NlbWJsZSBpbiB0aGUgY29ubgorICogaW5zdGVhZCBvZiBwZXItZmxvdyB3aGljaCBtZWFucyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoCisgKiBmbG93cyB0byB0ZWFyIGRvd24gcGFydGlhbCByZWFzc2VtYmx5IHByb2dyZXNzIG9uIGNvbm4gZmFpbHVyZSBhbmQKKyAqIHdlIHNhdmUgZmxvdyBsb29rdXAgYW5kIGxvY2tpbmcgZm9yIGVhY2ggZnJhZyBhcnJpdmFsLiAgSXQgZG9lcyBtZWFuCisgKiB0aGF0IHNtYWxsIG1lc3NhZ2VzIHdpbGwgd2FpdCBiZWhpbmQgbGFyZ2Ugb25lcy4gIEZyYWdtZW50aW5nIGF0IGFsbAorICogaXMgb25seSB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBwcmUtcG9zdGVkIGJ1ZmZlcnMuCisgKgorICogVGhlIGNhbGxlciBwYXNzZXMgaW4gc2FkZHIgYW5kIGRhZGRyIGluc3RlYWQgb2YgdXMgZ2V0dGluZyBpdCBmcm9tIHRoZQorICogY29ubi4gIFRoaXMgbGV0cyBsb29wYmFjaywgd2hvIG9ubHkgaGFzIG9uZSBjb25uIGZvciBib3RoIGRpcmVjdGlvbnMsCisgKiB0ZWxsIHVzIHdoaWNoIHJvbGVzIHRoZSBhZGRycyBpbiB0aGUgY29ubiBhcmUgcGxheWluZyBmb3IgdGhpcyBtZXNzYWdlLgorICovCit2b2lkIHJkc19yZWN2X2luY29taW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIGdmcF90IGdmcCwgZW51bSBrbV90eXBlIGttKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCBzb2NrICpzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5jLT5pX2Nvbm4gPSBjb25uOworCWluYy0+aV9yeF9qaWZmaWVzID0gamlmZmllczsKKworCXJkc2RlYnVnKCJjb25uICVwIG5leHQgJWxsdSBpbmMgJXAgc2VxICVsbHUgbGVuICV1IHNwb3J0ICV1IGRwb3J0ICV1ICIKKwkJICJmbGFncyAweCV4IHJ4X2ppZmZpZXMgJWx1XG4iLCBjb25uLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyljb25uLT5jX25leHRfcnhfc2VxLAorCQkgaW5jLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpLAorCQkgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCSBiZTE2X3RvX2NwdShpbmMtPmlfaGRyLmhfc3BvcnQpLAorCQkgYmUxNl90b19jcHUoaW5jLT5pX2hkci5oX2Rwb3J0KSwKKwkJIGluYy0+aV9oZHIuaF9mbGFncywKKwkJIGluYy0+aV9yeF9qaWZmaWVzKTsKKworCS8qCisJICogU2VxdWVuY2UgbnVtYmVycyBzaG91bGQgb25seSBpbmNyZWFzZS4gIE1lc3NhZ2VzIGdldCB0aGVpcgorCSAqIHNlcXVlbmNlIG51bWJlciBhcyB0aGV5J3JlIHF1ZXVlZCBpbiBhIHNlbmRpbmcgY29ubi4gIFRoZXkKKwkgKiBjYW4gYmUgZHJvcHBlZCwgdGhvdWdoLCBpZiB0aGUgc2VuZGluZyBzb2NrZXQgaXMgY2xvc2VkIGJlZm9yZQorCSAqIHRoZXkgaGl0IHRoZSB3aXJlLiAgU28gc2VxdWVuY2UgbnVtYmVycyBjYW4gc2tpcCBmb3J3YXJkCisJICogdW5kZXIgbm9ybWFsIG9wZXJhdGlvbi4gIFRoZXkgY2FuIGFsc28gZHJvcCBiYWNrIGluIHRoZSBjb25uCisJICogZmFpbG92ZXIgY2FzZSBhcyBwcmV2aW91c2x5IHNlbnQgbWVzc2FnZXMgYXJlIHJlc2VudCBkb3duIHRoZQorCSAqIG5ldyBpbnN0YW5jZSBvZiBhIGNvbm4uICBXZSBkcm9wIHRob3NlLCBvdGhlcndpc2Ugd2UgaGF2ZQorCSAqIHRvIGFzc3VtZSB0aGF0IHRoZSBuZXh0IHZhbGlkIHNlcSBkb2VzIG5vdCBjb21lIGFmdGVyIGEKKwkgKiBob2xlIGluIHRoZSBmcmFnbWVudCBzdHJlYW0uCisJICoKKwkgKiBUaGUgaGVhZGVycyBkb24ndCBnaXZlIHVzIGEgd2F5IHRvIHJlYWxpemUgaWYgZnJhZ21lbnRzIG9mCisJICogYSBtZXNzYWdlIGhhdmUgYmVlbiBkcm9wcGVkLiAgV2UgYXNzdW1lIHRoYXQgZnJhZ3MgdGhhdCBhcnJpdmUKKwkgKiB0byBhIGZsb3cgYXJlIHBhcnQgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZSBvbiB0aGUgZmxvdyB0aGF0IGlzCisJICogYmVpbmcgcmVhc3NlbWJsZWQuICBUaGlzIG1lYW5zIHRoYXQgc2VuZGVycyBjYW4ndCBkcm9wIG1lc3NhZ2VzCisJICogZnJvbSB0aGUgc2VuZGluZyBjb25uIHVudGlsIGFsbCB0aGVpciBmcmFncyBhcmUgc2VudC4KKwkgKgorCSAqIFhYWCB3ZSBjb3VsZCBzcGVuZCBtb3JlIG9uIHRoZSB3aXJlIHRvIGdldCBtb3JlIHJvYnVzdCBmYWlsdXJlCisJICogZGV0ZWN0aW9uLCBhcmd1YWJseSB3b3J0aCBpdCB0byBhdm9pZCBkYXRhIGNvcnJ1cHRpb24uCisJICovCisJaWYgKGJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSkgPCBjb25uLT5jX25leHRfcnhfc2VxCisJICYmIChpbmMtPmlfaGRyLmhfZmxhZ3MgJiBSRFNfRkxBR19SRVRSQU5TTUlUVEVEKSkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX29sZF9zZXEpOworCQlnb3RvIG91dDsKKwl9CisJY29ubi0+Y19uZXh0X3J4X3NlcSA9IGJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSkgKyAxOworCisJaWYgKHJkc19zeXNjdGxfcGluZ19lbmFibGUgJiYgaW5jLT5pX2hkci5oX2Rwb3J0ID09IDApIHsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfcGluZyk7CisJCXJkc19zZW5kX3BvbmcoY29ubiwgaW5jLT5pX2hkci5oX3Nwb3J0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcnMgPSByZHNfZmluZF9ib3VuZChkYWRkciwgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwlpZiAocnMgPT0gTlVMTCkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX25vX3NvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQcm9jZXNzIGV4dGVuc2lvbiBoZWFkZXJzICovCisJcmRzX3JlY3ZfaW5jb21pbmdfZXh0aGRycyhpbmMsIHJzKTsKKworCS8qIFdlIGNhbiBiZSByYWNpbmcgd2l0aCByZHNfcmVsZWFzZSgpIHdoaWNoIG1hcmtzIHRoZSBzb2NrZXQgZGVhZC4gKi8KKwlzayA9IHJkc19yc190b19zayhycyk7CisKKwkvKiBzZXJpYWxpemUgd2l0aCByZHNfcmVsZWFzZSAtPiBzb2NrX29ycGhhbiAqLworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CisJCXJkc2RlYnVnKCJhZGRpbmcgaW5jICVwIHRvIHJzICVwJ3MgcmVjdiBxdWV1ZVxuIiwgaW5jLCBycyk7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X3F1ZXVlZCk7CisJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCSAgICAgIGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCXJkc19pbmNfYWRkcmVmKGluYyk7CisJCWxpc3RfYWRkX3RhaWwoJmluYy0+aV9pdGVtLCAmcnMtPnJzX3JlY3ZfcXVldWUpOworCQlfX3Jkc193YWtlX3NrX3NsZWVwKHNrKTsKKwl9IGVsc2UgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX2RlYWRfc29jayk7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAocnMpCisJCXJkc19zb2NrX3B1dChycyk7Cit9CisKKy8qCisgKiBiZSB2ZXJ5IGNhcmVmdWwgaGVyZS4gIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBjb25kaXRpb24gaW4KKyAqIHdhaXRfZXZlbnRfKigpIG5lZWRzIHRvIGNvcGUgd2l0aCBiZWluZyBjYWxsZWQgbWFueSB0aW1lcy4KKyAqLworc3RhdGljIGludCByZHNfbmV4dF9pbmNvbWluZyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2luY29taW5nICoqaW5jKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKmluYyA9PSBOVUxMKSB7CisJCXJlYWRfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX3JlY3ZfcXVldWUpKSB7CisJCQkqaW5jID0gbGlzdF9lbnRyeShycy0+cnNfcmVjdl9xdWV1ZS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfaW5jb21pbmcsCisJCQkJCSAgaV9pdGVtKTsKKwkJCXJkc19pbmNfYWRkcmVmKCppbmMpOworCQl9CisJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gKmluYyAhPSBOVUxMOworfQorCitzdGF0aWMgaW50IHJkc19zdGlsbF9xdWV1ZWQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkJICAgIGludCBkcm9wKQoreworCXN0cnVjdCBzb2NrICpzayA9IHJkc19yc190b19zayhycyk7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmaW5jLT5pX2l0ZW0pKSB7CisJCXJldCA9IDE7CisJCWlmIChkcm9wKSB7CisJCQkvKiBYWFggbWFrZSBzdXJlIHRoaXMgaV9jb25uIGlzIHJlbGlhYmxlICovCisJCQlyZHNfcmVjdl9yY3ZidWZfZGVsdGEocnMsIHNrLCBpbmMtPmlfY29ubi0+Y19sY29uZywKKwkJCQkJICAgICAgLWJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCQkgICAgICBpbmMtPmlfaGRyLmhfZHBvcnQpOworCQkJbGlzdF9kZWxfaW5pdCgmaW5jLT5pX2l0ZW0pOworCQkJcmRzX2luY19wdXQoaW5jKTsKKwkJfQorCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCisJcmRzZGVidWcoImluYyAlcCBycyAlcCBzdGlsbCAlZCBkcm9wcGVkICVkXG4iLCBpbmMsIHJzLCByZXQsIGRyb3ApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdWxsIGVycm9ycyBvZmYgdGhlIGVycm9yIHF1ZXVlLgorICogSWYgbXNnaGRyIGlzIE5VTEwsIHdlIHdpbGwganVzdCBwdXJnZSB0aGUgZXJyb3IgcXVldWUuCisgKi8KK2ludCByZHNfbm90aWZ5X3F1ZXVlX2dldChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgbXNnaGRyICptc2doZHIpCit7CisJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisJc3RydWN0IHJkc19yZG1hX25vdGlmeSBjbXNnOworCXVuc2lnbmVkIGludCBjb3VudCA9IDAsIG1heF9tZXNzYWdlcyA9IH4wVTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChjb3B5KTsKKwlpbnQgZXJyID0gMDsKKworCisJLyogcHV0X2Ntc2cgY29waWVzIHRvIHVzZXIgc3BhY2UgYW5kIHRodXMgbWF5IHNsZWVwLiBXZSBjYW4ndCBkbyB0aGlzCisJICogd2l0aCByc19sb2NrIGhlbGQsIHNvIGZpcnN0IGdyYWIgYXMgbWFueSBub3RpZmljYXRpb25zIGFzIHdlIGNhbiBzdHVmZgorCSAqIGluIHRoZSB1c2VyIHByb3ZpZGVkIGNtc2cgYnVmZmVyLiBXZSBkb24ndCB0cnkgdG8gY29weSBtb3JlLCB0byBhdm9pZAorCSAqIGxvc2luZyBub3RpZmljYXRpb25zIC0gZXhjZXB0IHdoZW4gdGhlIGJ1ZmZlciBpcyBzbyBzbWFsbCB0aGF0IGl0IHdvdWxkbid0CisJICogZXZlbiBob2xkIGEgc2luZ2xlIG5vdGlmaWNhdGlvbi4gVGhlbiB3ZSBnaXZlIGhpbSBhcyBtdWNoIG9mIHRoaXMgc2luZ2xlCisJICogbXNnIGFzIHdlIGNhbiBzcXVlZXplIGluLCBhbmQgc2V0IE1TR19DVFJVTkMuCisJICovCisJaWYgKG1zZ2hkcikgeworCQltYXhfbWVzc2FnZXMgPSBtc2doZHItPm1zZ19jb250cm9sbGVuIC8gQ01TR19TUEFDRShzaXplb2YoY21zZykpOworCQlpZiAoIW1heF9tZXNzYWdlcykKKwkJCW1heF9tZXNzYWdlcyA9IDE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSAmJiBjb3VudCA8IG1heF9tZXNzYWdlcykgeworCQlub3RpZmllciA9IGxpc3RfZW50cnkocnMtPnJzX25vdGlmeV9xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCByZHNfbm90aWZpZXIsIG5fbGlzdCk7CisJCWxpc3RfbW92ZSgmbm90aWZpZXItPm5fbGlzdCwgJmNvcHkpOworCQljb3VudCsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvcHkpKSB7CisJCW5vdGlmaWVyID0gbGlzdF9lbnRyeShjb3B5Lm5leHQsIHN0cnVjdCByZHNfbm90aWZpZXIsIG5fbGlzdCk7CisKKwkJaWYgKG1zZ2hkcikgeworCQkJY21zZy51c2VyX3Rva2VuID0gbm90aWZpZXItPm5fdXNlcl90b2tlbjsKKwkJCWNtc2cuc3RhdHVzICA9IG5vdGlmaWVyLT5uX3N0YXR1czsKKworCQkJZXJyID0gcHV0X2Ntc2cobXNnaGRyLCBTT0xfUkRTLCBSRFNfQ01TR19SRE1BX1NUQVRVUywKKwkJCQkJc2l6ZW9mKGNtc2cpLCAmY21zZyk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9kZWxfaW5pdCgmbm90aWZpZXItPm5fbGlzdCk7CisJCWtmcmVlKG5vdGlmaWVyKTsKKwl9CisKKwkvKiBJZiB3ZSBiYWlsZWQgb3V0IGJlY2F1c2Ugb2YgYW4gZXJyb3IgaW4gcHV0X2Ntc2csCisJICogd2UgbWF5IGJlIGxlZnQgd2l0aCBvbmUgb3IgbW9yZSBub3RpZmljYXRpb25zIHRoYXQgd2UKKwkgKiBkaWRuJ3QgcHJvY2Vzcy4gUmV0dXJuIHRoZW0gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuICovCisJaWYgKCFsaXN0X2VtcHR5KCZjb3B5KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxpY2UoJmNvcHksICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUXVldWUgYSBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgaW50IHJkc19ub3RpZnlfY29uZyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgbXNnaGRyICptc2doZHIpCit7CisJdWludDY0X3Qgbm90aWZ5ID0gcnMtPnJzX2Nvbmdfbm90aWZ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IHB1dF9jbXNnKG1zZ2hkciwgU09MX1JEUywgUkRTX0NNU0dfQ09OR19VUERBVEUsCisJCQlzaXplb2Yobm90aWZ5KSwgJm5vdGlmeSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCXJzLT5yc19jb25nX25vdGlmeSAmPSB+bm90aWZ5OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlY2VpdmUgYW55IGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2Ntc2dfcmVjdihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBtc2doZHIgKm1zZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChpbmMtPmlfcmRtYV9jb29raWUpIHsKKwkJcmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUkRTLCBSRFNfQ01TR19SRE1BX0RFU1QsCisJCQkJc2l6ZW9mKGluYy0+aV9yZG1hX2Nvb2tpZSksICZpbmMtPmlfcmRtYV9jb29raWUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJkc19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3Qgc2l6ZSwgaW50IG1zZ19mbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlsb25nIHRpbWVvOworCWludCByZXQgPSAwLCBub25ibG9jayA9IG1zZ19mbGFncyAmIE1TR19ET05UV0FJVDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmMgPSBOVUxMOworCisJLyogdWRwX3JlY3Ztc2coKS0+c29ja19yZWN2dGltZW8oKSBnZXRzIGF3YXkgd2l0aG91dCBsb2NraW5nIHRvby4uICovCisJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CisKKwlyZHNkZWJ1Zygic2l6ZSAlenUgZmxhZ3MgMHgleCB0aW1lbyAlbGRcbiIsIHNpemUsIG1zZ19mbGFncywgdGltZW8pOworCisJaWYgKG1zZ19mbGFncyAmIE1TR19PT0IpCisJCWdvdG8gb3V0OworCisJLyogSWYgdGhlcmUgYXJlIHBlbmRpbmcgbm90aWZpY2F0aW9ucywgZG8gdGhvc2UgLSBhbmQgbm90aGluZyBlbHNlICovCisJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSkgeworCQlyZXQgPSByZHNfbm90aWZ5X3F1ZXVlX2dldChycywgbXNnKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJzLT5yc19jb25nX25vdGlmeSkgeworCQlyZXQgPSByZHNfbm90aWZ5X2NvbmcocnMsIG1zZyk7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlICgxKSB7CisJCWlmICghcmRzX25leHRfaW5jb21pbmcocnMsICZpbmMpKSB7CisJCQlpZiAobm9uYmxvY2spIHsKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJCWJyZWFrOworCQkJfQorCisJCQl0aW1lbyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpzay0+c2tfc2xlZXAsCisJCQkJCQlyZHNfbmV4dF9pbmNvbWluZyhycywgJmluYyksCisJCQkJCQl0aW1lbyk7CisJCQlyZHNkZWJ1ZygicmVjdm1zZyB3b2tlIGluYyAlcCB0aW1lbyAlbGRcbiIsIGluYywKKwkJCQkgdGltZW8pOworCQkJaWYgKHRpbWVvID4gMCB8fCB0aW1lbyA9PSBNQVhfU0NIRURVTEVfVElNRU9VVCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gdGltZW87CisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmRzZGVidWcoImNvcHlpbmcgaW5jICVwIGZyb20gJXBJNDoldSB0byB1c2VyXG4iLCBpbmMsCisJCQkgJmluYy0+aV9jb25uLT5jX2ZhZGRyLAorCQkJIG50b2hzKGluYy0+aV9oZHIuaF9zcG9ydCkpOworCQlyZXQgPSBpbmMtPmlfY29ubi0+Y190cmFucy0+aW5jX2NvcHlfdG9fdXNlcihpbmMsIG1zZy0+bXNnX2lvdiwKKwkJCQkJCQkgICAgIHNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIGlmIHRoZSBtZXNzYWdlIHdlIGp1c3QgY29waWVkIGlzbid0IGF0IHRoZSBoZWFkIG9mIHRoZQorCQkgKiByZWN2IHF1ZXVlIHRoZW4gc29tZW9uZSBlbHNlIHJhY2VkIHVzIHRvIHJldHVybiBpdCwgdHJ5CisJCSAqIHRvIGdldCB0aGUgbmV4dCBtZXNzYWdlLgorCQkgKi8KKwkJaWYgKCFyZHNfc3RpbGxfcXVldWVkKHJzLCBpbmMsICEobXNnX2ZsYWdzICYgTVNHX1BFRUspKSkgeworCQkJcmRzX2luY19wdXQoaW5jKTsKKwkJCWluYyA9IE5VTEw7CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxpdmVyX3JhY2VkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJldCA8IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pKSB7CisJCQlpZiAobXNnX2ZsYWdzICYgTVNHX1RSVU5DKQorCQkJCXJldCA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQl9CisKKwkJaWYgKHJkc19jbXNnX3JlY3YoaW5jLCBtc2cpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxpdmVyZWQpOworCisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCQlpZiAoc2luKSB7CisJCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQkJc2luLT5zaW5fcG9ydCA9IGluYy0+aV9oZHIuaF9zcG9ydDsKKwkJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gaW5jLT5pX3NhZGRyOworCQkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKGluYykKKwkJcmRzX2luY19wdXQoaW5jKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGUgc29ja2V0IGlzIGJlaW5nIHNodXQgZG93biBhbmQgd2UncmUgYXNrZWQgdG8gZHJvcCBtZXNzYWdlcyB0aGF0IHdlcmUKKyAqIHF1ZXVlZCBmb3IgcmVjdm1zZy4gIFRoZSBjYWxsZXIgaGFzIHVuYm91bmQgdGhlIHNvY2tldCBzbyB0aGUgcmVjZWl2ZSBwYXRoCisgKiB3b24ndCBxdWV1ZSBhbnkgbW9yZSBpbmNvbWluZyBmcmFnbWVudHMgb3IgbWVzc2FnZXMgb24gdGhlIHNvY2tldC4KKyAqLwordm9pZCByZHNfY2xlYXJfcmVjdl9xdWV1ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHJkc19yc190b19zayhycyk7CisJc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5jLCB0bXAsICZycy0+cnNfcmVjdl9xdWV1ZSwgaV9pdGVtKSB7CisJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCSAgICAgIC1iZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJCQkgICAgICBpbmMtPmlfaGRyLmhfZHBvcnQpOworCQlsaXN0X2RlbF9pbml0KCZpbmMtPmlfaXRlbSk7CisJCXJkc19pbmNfcHV0KGluYyk7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBpbmMtPmlfc2FkZHIgaXNuJ3QgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXMgb25seSBzZXQgaW4gdGhlIHJlY2VpdmUKKyAqIHBhdGguCisgKi8KK3ZvaWQgcmRzX2luY19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkgICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIGludCBmbGlwKQoreworCXN0cnVjdCByZHNfaW5mb19tZXNzYWdlIG1pbmZvOworCisJbWluZm8uc2VxID0gYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKTsKKwltaW5mby5sZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCWlmIChmbGlwKSB7CisJCW1pbmZvLmxhZGRyID0gZGFkZHI7CisJCW1pbmZvLmZhZGRyID0gc2FkZHI7CisJCW1pbmZvLmxwb3J0ID0gaW5jLT5pX2hkci5oX2Rwb3J0OworCQltaW5mby5mcG9ydCA9IGluYy0+aV9oZHIuaF9zcG9ydDsKKwl9IGVsc2UgeworCQltaW5mby5sYWRkciA9IHNhZGRyOworCQltaW5mby5mYWRkciA9IGRhZGRyOworCQltaW5mby5scG9ydCA9IGluYy0+aV9oZHIuaF9zcG9ydDsKKwkJbWluZm8uZnBvcnQgPSBpbmMtPmlfaGRyLmhfZHBvcnQ7CisJfQorCisJcmRzX2luZm9fY29weShpdGVyLCAmbWluZm8sIHNpemVvZihtaW5mbykpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM3MzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTAsMCArMSwxMDAzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCisvKiBXaGVuIHRyYW5zbWl0dGluZyBtZXNzYWdlcyBpbiByZHNfc2VuZF94bWl0LCB3ZSBuZWVkIHRvIGVtZXJnZSBmcm9tCisgKiB0aW1lIHRvIHRpbWUgYW5kIGJyaWVmbHkgcmVsZWFzZSB0aGUgQ1BVLiBPdGhlcndpc2UgdGhlIHNvZnRsb2NrIHdhdGNoZG9nCisgKiB3aWxsIGtpY2sgb3VyIHNoaW4uCisgKiBBbHNvLCBpdCBzZWVtcyBmYWlyZXIgdG8gbm90IGxldCBvbmUgYnVzeSBjb25uZWN0aW9uIHN0YWxsIGFsbCB0aGUKKyAqIG90aGVycy4KKyAqCisgKiBzZW5kX2JhdGNoX2NvdW50IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgd2UnbGwgbG9vcCBpbiBzZW5kX3htaXQuIFNldHRpbmcKKyAqIGl0IHRvIDAgd2lsbCByZXN0b3JlIHRoZSBvbGQgYmVoYXZpb3IgKHdoZXJlIHdlIGxvb3BlZCB1bnRpbCB3ZSBoYWQKKyAqIGRyYWluZWQgdGhlIHF1ZXVlKS4KKyAqLworc3RhdGljIGludCBzZW5kX2JhdGNoX2NvdW50ID0gNjQ7Cittb2R1bGVfcGFyYW0oc2VuZF9iYXRjaF9jb3VudCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZF9iYXRjaF9jb3VudCwgIiBiYXRjaCBmYWN0b3Igd2hlbiB3b3JraW5nIHRoZSBzZW5kIHF1ZXVlIik7CisKKy8qCisgKiBSZXNldCB0aGUgc2VuZCBzdGF0ZS4gQ2FsbGVyIG11c3QgaG9sZCBjX3NlbmRfbG9jayB3aGVuIGNhbGxpbmcgaGVyZS4KKyAqLwordm9pZCByZHNfc2VuZF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGNvbm4tPmNfeG1pdF9ybSkgeworCQkvKiBUZWxsIHRoZSB1c2VyIHRoZSBSRE1BIG9wIGlzIG5vIGxvbmdlciBtYXBwZWQgYnkgdGhlCisJCSAqIHRyYW5zcG9ydC4gVGhpcyBpc24ndCBlbnRpcmVseSB0cnVlIChpdCdzIGZsdXNoZWQgb3V0CisJCSAqIGluZGVwZW5kZW50bHkpIGJ1dCBhcyB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0aGVyZSdzCisJCSAqIG5vIG9uZ29pbmcgUkRNQSB0by9mcm9tIHRoYXQgbWVtb3J5ICovCisJCXJkc19tZXNzYWdlX3VubWFwcGVkKGNvbm4tPmNfeG1pdF9ybSk7CisJCXJkc19tZXNzYWdlX3B1dChjb25uLT5jX3htaXRfcm0pOworCQljb25uLT5jX3htaXRfcm0gPSBOVUxMOworCX0KKwljb25uLT5jX3htaXRfc2cgPSAwOworCWNvbm4tPmNfeG1pdF9oZHJfb2ZmID0gMDsKKwljb25uLT5jX3htaXRfZGF0YV9vZmYgPSAwOworCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAwOworCisJY29ubi0+Y19tYXBfcXVldWVkID0gMDsKKworCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzOworCWNvbm4tPmNfdW5hY2tlZF9ieXRlcyA9IHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CisKKwkvKiBNYXJrIG1lc3NhZ2VzIGFzIHJldHJhbnNtaXNzaW9ucywgYW5kIG1vdmUgdGhlbSB0byB0aGUgc2VuZCBxICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlzZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCQlzZXRfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKTsKKwl9CisJbGlzdF9zcGxpY2VfaW5pdCgmY29ubi0+Y19yZXRyYW5zLCAmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFdlJ3JlIG1ha2luZyB0aGUgY29uY2lvdXMgdHJhZGUtb2ZmIGhlcmUgdG8gb25seSBzZW5kIG9uZSBtZXNzYWdlCisgKiBkb3duIHRoZSBjb25uZWN0aW9uIGF0IGEgdGltZS4KKyAqICAgUHJvOgorICogICAgICAtIHR4IHF1ZXVlaW5nIGlzIGEgc2ltcGxlIGZpZm8gbGlzdAorICogICAJLSByZWFzc2VtYmx5IGlzIG9wdGlvbmFsIGFuZCBlYXNpbHkgZG9uZSBieSB0cmFuc3BvcnRzIHBlciBjb25uCisgKiAgICAgIC0gbm8gcGVyIGZsb3cgcnggbG9va3VwIGF0IGFsbCwgc3RyYWlnaHQgdG8gdGhlIHNvY2tldAorICogICAJLSBsZXNzIHBlci1mcmFnIG1lbW9yeSBhbmQgd2lyZSBvdmVyaGVhZAorICogICBDb246CisgKiAgICAgIC0gcXVldWVkIGFja3MgY2FuIGJlIGRlbGF5ZWQgYmVoaW5kIGxhcmdlIG1lc3NhZ2VzCisgKiAgIERlcGVuZHM6CisgKiAgICAgIC0gc21hbGwgbWVzc2FnZSBsYXRlbmN5IGlzIGhpZ2hlciBiZWhpbmQgcXVldWVkIGxhcmdlIG1lc3NhZ2VzCisgKiAgICAgIC0gbGFyZ2UgbWVzc2FnZSBsYXRlbmN5IGlzbid0IHN0YXJ2ZWQgYnkgaW50ZXJ2ZW5pbmcgc21hbGwgc2VuZHMKKyAqLworaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG1wOworCXVuc2lnbmVkIGludCBzZW5kX3F1b3RhID0gc2VuZF9iYXRjaF9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCByZXQgPSAwOworCWludCB3YXNfZW1wdHkgPSAwOworCUxJU1RfSEVBRCh0b19iZV9kcm9wcGVkKTsKKworCS8qCisJICogc2VuZG1zZyBjYWxscyBoZXJlIGFmdGVyIGhhdmluZyBxdWV1ZWQgaXRzIG1lc3NhZ2Ugb24gdGhlIHNlbmQKKwkgKiBxdWV1ZS4gIFdlIG9ubHkgaGF2ZSBvbmUgdGFzayBmZWVkaW5nIHRoZSBjb25uZWN0aW9uIGF0IGEgdGltZS4gIElmCisJICogYW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBmZWVkaW5nIHRoZSBxdWV1ZSB0aGVuIHdlIGJhY2sgb2ZmLiAgVGhpcworCSAqIGF2b2lkcyBibG9ja2luZyB0aGUgY2FsbGVyIGFuZCB0cmFkaW5nIHBlci1jb25uZWN0aW9uIGRhdGEgYmV0d2VlbgorCSAqIGNhY2hlcyBwZXIgbWVzc2FnZS4KKwkgKgorCSAqIFRoZSBzZW0gaG9sZGVyIHdpbGwgaXNzdWUgYSByZXRyeSBpZiB0aGV5IG5vdGljZSB0aGF0IHNvbWVvbmUgcXVldWVkCisJICogYSBtZXNzYWdlIGFmdGVyIHRoZXkgc3RvcHBlZCB3YWxraW5nIHRoZSBzZW5kIHF1ZXVlIGJ1dCBiZWZvcmUgdGhleQorCSAqIGRyb3BwZWQgdGhlIHNlbS4KKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKSkgeworCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9zZW1fY29udGVudGlvbik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb25uLT5jX3RyYW5zLT54bWl0X3ByZXBhcmUpCisJCWNvbm4tPmNfdHJhbnMtPnhtaXRfcHJlcGFyZShjb25uKTsKKworCS8qCisJICogc3BpbiB0cnlpbmcgdG8gcHVzaCBoZWFkZXJzIGFuZCBkYXRhIGRvd24gdGhlIGNvbm5lY3Rpb24gdW50aWwKKwkgKiB0aGUgY29ubmVjdGlvbiBkb2Vucyd0IG1ha2UgZm9yd2FyZCBwcm9ncmVzcy4KKwkgKi8KKwl3aGlsZSAoLS1zZW5kX3F1b3RhKSB7CisJCS8qCisJCSAqIFNlZSBpZiBuZWVkIHRvIHNlbmQgYSBjb25nZXN0aW9uIG1hcCB1cGRhdGUgaWYgd2UncmUKKwkJICogYmV0d2VlbiBzZW5kaW5nIG1lc3NhZ2VzLiAgVGhlIHNlbmRfc2VtIHByb3RlY3RzIG91ciBzb2xlCisJCSAqIHVzZSBvZiBjX21hcF9vZmZzZXQgYW5kIF9ieXRlcy4KKwkJICogTm90ZSB0aGlzIGlzIHVzZWQgb25seSBieSB0cmFuc3BvcnRzIHRoYXQgZGVmaW5lIGEgc3BlY2lhbAorCQkgKiB4bWl0X2NvbmdfbWFwIGZ1bmN0aW9uLiBGb3IgYWxsIG90aGVycywgd2UgY3JlYXRlIGFsbG9jYXRlCisJCSAqIGEgY29uZ19tYXAgbWVzc2FnZSBhbmQgdHJlYXQgaXQganVzdCBsaWtlIGFueSBvdGhlciBzZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmNfbWFwX2J5dGVzKSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0X2NvbmdfbWFwKGNvbm4sIGNvbm4tPmNfbGNvbmcsCisJCQkJCQljb25uLT5jX21hcF9vZmZzZXQpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCisJCQljb25uLT5jX21hcF9vZmZzZXQgKz0gcmV0OworCQkJY29ubi0+Y19tYXBfYnl0ZXMgLT0gcmV0OworCQkJaWYgKGNvbm4tPmNfbWFwX2J5dGVzKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgd2UncmUgZG9uZSBzZW5kaW5nIHRoZSBjdXJyZW50IG1lc3NhZ2UsIGNsZWFyIHRoZQorCQkgKiBvZmZzZXQgYW5kIFMvRyB0ZW1wb3Jhcmllcy4KKwkJICovCisJCXJtID0gY29ubi0+Y194bWl0X3JtOworCQlpZiAocm0gIT0gTlVMTCAmJgorCQkgICAgY29ubi0+Y194bWl0X2hkcl9vZmYgPT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSAmJgorCQkgICAgY29ubi0+Y194bWl0X3NnID09IHJtLT5tX25lbnRzKSB7CisJCQljb25uLT5jX3htaXRfcm0gPSBOVUxMOworCQkJY29ubi0+Y194bWl0X3NnID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9oZHJfb2ZmID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9kYXRhX29mZiA9IDA7CisJCQljb25uLT5jX3htaXRfcmRtYV9zZW50ID0gMDsKKworCQkJLyogUmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBtZXNzYWdlLiAqLworCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJCXJtID0gTlVMTDsKKwkJfQorCisJCS8qIElmIHdlJ3JlIGFza2VkIHRvIHNlbmQgYSBjb25nIG1hcCB1cGRhdGUsIGRvIHNvLgorCQkgKi8KKwkJaWYgKHJtID09IE5VTEwgJiYgdGVzdF9hbmRfY2xlYXJfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpKSB7CisJCQlpZiAoY29ubi0+Y190cmFucy0+eG1pdF9jb25nX21hcCAhPSBOVUxMKSB7CisJCQkJY29ubi0+Y19tYXBfb2Zmc2V0ID0gMDsKKwkJCQljb25uLT5jX21hcF9ieXRlcyA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKworCQkJCQlSRFNfQ09OR19NQVBfQllURVM7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJtID0gcmRzX2NvbmdfdXBkYXRlX2FsbG9jKGNvbm4pOworCQkJaWYgKElTX0VSUihybSkpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKHJtKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY29ubi0+Y194bWl0X3JtID0gcm07CisJCX0KKworCQkvKgorCQkgKiBHcmFiIHRoZSBuZXh0IG1lc3NhZ2UgZnJvbSB0aGUgc2VuZCBxdWV1ZSwgaWYgdGhlcmUgaXMgb25lLgorCQkgKgorCQkgKiBjX3htaXRfcm0gaG9sZHMgYSByZWYgd2hpbGUgd2UncmUgc2VuZGluZyB0aGlzIG1lc3NhZ2UgZG93bgorCQkgKiB0aGUgY29ubmN0aW9uLiAgV2UgY2FuIHVzZSB0aGlzIHJlZiB3aGlsZSBob2xkaW5nIHRoZQorCQkgKiBzZW5kX3NlbS4uIHJkc19zZW5kX3Jlc2V0KCkgaXMgc2VyaWFsaXplZCB3aXRoIGl0LgorCQkgKi8KKwkJaWYgKHJtID09IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGludCBsZW47CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKCFsaXN0X2VtcHR5KCZjb25uLT5jX3NlbmRfcXVldWUpKSB7CisJCQkJcm0gPSBsaXN0X2VudHJ5KGNvbm4tPmNfc2VuZF9xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IHJkc19tZXNzYWdlLAorCQkJCQkJbV9jb25uX2l0ZW0pOworCQkJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisKKwkJCQkvKgorCQkJCSAqIE1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgc2VuZCBxdWV1ZSB0byB0aGUgcmV0cmFuc21pdAorCQkJCSAqIGxpc3QgcmlnaHQgYXdheS4KKwkJCQkgKi8KKwkJCQlsaXN0X21vdmVfdGFpbCgmcm0tPm1fY29ubl9pdGVtLCAmY29ubi0+Y19yZXRyYW5zKTsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwkJCWlmIChybSA9PSBOVUxMKSB7CisJCQkJd2FzX2VtcHR5ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogVW5mb3J0dW5hdGVseSwgdGhlIHdheSBJbmZpbmliYW5kIGRlYWxzIHdpdGgKKwkJCSAqIFJETUEgdG8gYSBiYWQgTVIga2V5IGlzIGJ5IG1vdmluZyB0aGUgZW50aXJlCisJCQkgKiBxdWV1ZSBwYWlyIHRvIGVycm9yIHN0YXRlLiBXZSBjb2xkIHBvc3NpYmx5CisJCQkgKiByZWNvdmVyIGZyb20gdGhhdCwgYnV0IHJpZ2h0IG5vdyB3ZSBkcm9wIHRoZQorCQkJICogY29ubmVjdGlvbi4KKwkJCSAqIFRoZXJlZm9yZSwgd2UgbmV2ZXIgcmV0cmFuc21pdCBtZXNzYWdlcyB3aXRoIFJETUEgb3BzLgorCQkJICovCisJCQlpZiAocm0tPm1fcmRtYV9vcAorCQkJICYmIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKSkgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkKKwkJCQkJbGlzdF9tb3ZlKCZybS0+bV9jb25uX2l0ZW0sICZ0b19iZV9kcm9wcGVkKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBSZXF1aXJlIGFuIEFDSyBldmVyeSBvbmNlIGluIGEgd2hpbGUgKi8KKwkJCWxlbiA9IG50b2hsKHJtLT5tX2luYy5pX2hkci5oX2xlbik7CisJCQlpZiAoY29ubi0+Y191bmFja2VkX3BhY2tldHMgPT0gMAorCQkJIHx8IGNvbm4tPmNfdW5hY2tlZF9ieXRlcyA8IGxlbikgeworCQkJCV9fc2V0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKTsKKworCQkJCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzOworCQkJCWNvbm4tPmNfdW5hY2tlZF9ieXRlcyA9IHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CisJCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfYWNrX3JlcXVpcmVkKTsKKwkJCX0gZWxzZSB7CisJCQkJY29ubi0+Y191bmFja2VkX2J5dGVzIC09IGxlbjsKKwkJCQljb25uLT5jX3VuYWNrZWRfcGFja2V0cy0tOworCQkJfQorCisJCQljb25uLT5jX3htaXRfcm0gPSBybTsKKwkJfQorCisJCS8qCisJCSAqIFRyeSBhbmQgc2VuZCBhbiByZG1hIG1lc3NhZ2UuICBMZXQncyBzZWUgaWYgd2UgY2FuCisJCSAqIGtlZXAgdGhpcyBzaW1wbGUgYW5kIHJlcXVpcmUgdGhhdCB0aGUgdHJhbnNwb3J0IGVpdGhlcgorCQkgKiBzZW5kIHRoZSB3aG9sZSByZG1hIG9yIG5vbmUgb2YgaXQuCisJCSAqLworCQlpZiAocm0tPm1fcmRtYV9vcCAmJiAhY29ubi0+Y194bWl0X3JkbWFfc2VudCkgeworCQkJcmV0ID0gY29ubi0+Y190cmFucy0+eG1pdF9yZG1hKGNvbm4sIHJtLT5tX3JkbWFfb3ApOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAxOworCQkJLyogVGhlIHRyYW5zcG9ydCBvd25zIHRoZSBtYXBwZWQgbWVtb3J5IGZvciBub3cuCisJCQkgKiBZb3UgY2FuJ3QgdW5tYXAgaXQgd2hpbGUgaXQncyBvbiB0aGUgc2VuZCBxdWV1ZSAqLworCQkJc2V0X2JpdChSRFNfTVNHX01BUFBFRCwgJnJtLT5tX2ZsYWdzKTsKKwkJfQorCisJCWlmIChjb25uLT5jX3htaXRfaGRyX29mZiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgfHwKKwkJICAgIGNvbm4tPmNfeG1pdF9zZyA8IHJtLT5tX25lbnRzKSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0KGNvbm4sIHJtLAorCQkJCQkJICBjb25uLT5jX3htaXRfaGRyX29mZiwKKwkJCQkJCSAgY29ubi0+Y194bWl0X3NnLAorCQkJCQkJICBjb25uLT5jX3htaXRfZGF0YV9vZmYpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCisJCQlpZiAoY29ubi0+Y194bWl0X2hkcl9vZmYgPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSB7CisJCQkJdG1wID0gbWluX3QoaW50LCByZXQsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpIC0KKwkJCQkJICAgIGNvbm4tPmNfeG1pdF9oZHJfb2ZmKTsKKwkJCQljb25uLT5jX3htaXRfaGRyX29mZiArPSB0bXA7CisJCQkJcmV0IC09IHRtcDsKKwkJCX0KKworCQkJc2cgPSAmcm0tPm1fc2dbY29ubi0+Y194bWl0X3NnXTsKKwkJCXdoaWxlIChyZXQpIHsKKwkJCQl0bXAgPSBtaW5fdChpbnQsIHJldCwgc2ctPmxlbmd0aCAtCisJCQkJCQkgICAgICBjb25uLT5jX3htaXRfZGF0YV9vZmYpOworCQkJCWNvbm4tPmNfeG1pdF9kYXRhX29mZiArPSB0bXA7CisJCQkJcmV0IC09IHRtcDsKKwkJCQlpZiAoY29ubi0+Y194bWl0X2RhdGFfb2ZmID09IHNnLT5sZW5ndGgpIHsKKwkJCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmID0gMDsKKwkJCQkJc2crKzsKKwkJCQkJY29ubi0+Y194bWl0X3NnKys7CisJCQkJCUJVR19PTihyZXQgIT0gMCAmJgorCQkJCQkgICAgICAgY29ubi0+Y194bWl0X3NnID09IHJtLT5tX25lbnRzKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBOdWtlIGFueSBtZXNzYWdlcyB3ZSBkZWNpZGVkIG5vdCB0byByZXRyYW5zbWl0LiAqLworCWlmICghbGlzdF9lbXB0eSgmdG9fYmVfZHJvcHBlZCkpCisJCXJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soJnRvX2JlX2Ryb3BwZWQsIFJEU19SRE1BX0RST1BQRUQpOworCisJaWYgKGNvbm4tPmNfdHJhbnMtPnhtaXRfY29tcGxldGUpCisJCWNvbm4tPmNfdHJhbnMtPnhtaXRfY29tcGxldGUoY29ubik7CisKKwkvKgorCSAqIFdlIG1pZ2h0IGJlIHJhY2luZyB3aXRoIGFub3RoZXIgc2VuZGVyIHdobyBxdWV1ZWQgYSBtZXNzYWdlIGJ1dAorCSAqIGJhY2tlZCBvZmYgb24gbm90aWNpbmcgdGhhdCB3ZSBoZWxkIHRoZSBjX3NlbmRfbG9jay4gIElmIHdlIGNoZWNrCisJICogZm9yIHF1ZXVlZCBtZXNzYWdlcyBhZnRlciBkcm9wcGluZyB0aGUgc2VtIHRoZW4gZWl0aGVyIHdlJ2xsCisJICogc2VlIHRoZSBxdWV1ZWQgbWVzc2FnZSBvciB0aGUgcXVldWVyIHdpbGwgZ2V0IHRoZSBzZW0uICBJZiB3ZQorCSAqIG5vdGljZSB0aGUgcXVldWVkIG1lc3NhZ2UgdGhlbiB3ZSB0cmlnZ2VyIGFuIGltbWVkaWF0ZSByZXRyeS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBvbmx5IHRvIGRvIHRoaXMgd2hlbiB3ZSBzdG9wcGVkIHByb2Nlc3NpbmcKKwkgKiB0aGUgc2VuZCBxdWV1ZSBiZWNhdXNlIGl0IHdhcyBlbXB0eS4gIEl0J3MgdGhlIG9ubHkgd2F5IHdlCisJICogc3RvcCBwcm9jZXNzaW5nIHRoZSBsb29wIHdoZW4gdGhlIHRyYW5zcG9ydCBoYXNuJ3QgdGFrZW4KKwkgKiByZXNwb25zaWJpbGl0eSBmb3IgZm9yd2FyZCBwcm9ncmVzcy4KKwkgKi8KKwltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCWlmIChjb25uLT5jX21hcF9ieXRlcyB8fCAoc2VuZF9xdW90YSA9PSAwICYmICF3YXNfZW1wdHkpKSB7CisJCS8qIFdlIGV4aGF1c3RlZCB0aGUgc2VuZCBxdW90YSwgYnV0IHRoZXJlJ3Mgd29yayBsZWZ0IHRvCisJCSAqIGRvLiBSZXR1cm4gYW5kIChyZS0pc2NoZWR1bGUgdGhlIHNlbmQgd29ya2VyLgorCQkgKi8KKwkJcmV0ID0gLUVBR0FJTjsKKwl9CisKKwlpZiAocmV0ID09IDAgJiYgd2FzX2VtcHR5KSB7CisJCS8qIEEgc2ltcGxlIGJpdCB0ZXN0IHdvdWxkIGJlIHdheSBmYXN0ZXIgdGhhbiB0YWtpbmcgdGhlCisJCSAqIHNwaW4gbG9jayAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCWlmICghbGlzdF9lbXB0eSgmY29ubi0+Y19zZW5kX3F1ZXVlKSkgeworCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfc2VtX3F1ZXVlX3JhY2VkKTsKKwkJCXJldCA9IC1FQUdBSU47CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19zZW5kX3NuZGJ1Zl9yZW1vdmUoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl1MzIgbGVuID0gYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmcnMtPnJzX2xvY2spOworCisJQlVHX09OKHJzLT5yc19zbmRfYnl0ZXMgPCBsZW4pOworCXJzLT5yc19zbmRfYnl0ZXMgLT0gbGVuOworCisJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPT0gMCkKKwkJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVfZW1wdHkpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZHNfc2VuZF9pc19hY2tlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCB1NjQgYWNrLAorCQkJCSAgICBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKQoreworCWlmIChpc19hY2tlZCkKKwkJcmV0dXJuIGlzX2Fja2VkKHJtLCBhY2spOworCXJldHVybiBiZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkgPD0gYWNrOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBvbiB0aGUgc2VuZCBhbmQgcmV0cmFuc21pdCBxdWV1ZXMKKyAqIHdoaWNoIGhhdmUgYSBzZXF1ZW5jZSBudW1iZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBzZXF1ZW5jZQorICogbnVtYmVyLgorICovCitpbnQgcmRzX3NlbmRfYWNrZWRfYmVmb3JlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IHNlcSkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCWludCByZXQgPSAxOworCisJc3Bpbl9sb2NrKCZjb25uLT5jX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCWlmIChiZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkgPCBzZXEpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfc2VuZF9xdWV1ZSwgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8IHNlcSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrKCZjb25uLT5jX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgcHJldHR5IHNpbWlsYXIgdG8gd2hhdCBoYXBwZW5zIGJlbG93IGluIHRoZSBBQ0sKKyAqIGhhbmRsaW5nIGNvZGUgLSBleGNlcHQgdGhhdCB3ZSBjYWxsIGhlcmUgYXMgc29vbiBhcyB3ZSBnZXQKKyAqIHRoZSBJQiBzZW5kIGNvbXBsZXRpb24gb24gdGhlIFJETUEgb3AgYW5kIHRoZSBhY2NvbXBhbnlpbmcKKyAqIG1lc3NhZ2UuCisgKi8KK3ZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCByZHNfcmRtYV9vcCAqcm87CisJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisKKwlzcGluX2xvY2soJnJtLT5tX3JzX2xvY2spOworCisJcm8gPSBybS0+bV9yZG1hX29wOworCWlmICh0ZXN0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykKKwkgJiYgcm8gJiYgcm8tPnJfbm90aWZ5ICYmIHJvLT5yX25vdGlmaWVyKSB7CisJCW5vdGlmaWVyID0gcm8tPnJfbm90aWZpZXI7CisJCXJzID0gcm0tPm1fcnM7CisJCXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKKworCQlub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZub3RpZmllci0+bl9saXN0LCAmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisKKwkJcm8tPnJfbm90aWZpZXIgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrKCZybS0+bV9yc19sb2NrKTsKKworCWlmIChycykgeworCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBleGNlcHQgd2UKKyAqIGRvbid0IGRvIGFueSBsb2NraW5nIC0gd2UgaGF2ZSBhbGwgdGhlIGluZ3JlZGllbnRzIChtZXNzYWdlLAorICogc29ja2V0LCBzb2NrZXQgbG9jaykgYW5kIGNhbiBqdXN0IG1vdmUgdGhlIG5vdGlmaWVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCByZHNfcmRtYV9vcCAqcm87CisKKwlybyA9IHJtLT5tX3JkbWFfb3A7CisJaWYgKHJvICYmIHJvLT5yX25vdGlmeSAmJiByby0+cl9ub3RpZmllcikgeworCQlyby0+cl9ub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCWxpc3RfYWRkX3RhaWwoJnJvLT5yX25vdGlmaWVyLT5uX2xpc3QsICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJcm8tPnJfbm90aWZpZXIgPSBOVUxMOworCX0KKworCS8qIE5vIG5lZWQgdG8gd2FrZSB0aGUgYXBwIC0gY2FsbGVyIGRvZXMgdGhpcyAqLworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgSUIgc2VuZCBjb21wbGV0aW9uIHdoZW4gd2UgZGV0ZWN0CisgKiBhIFJETUEgb3BlcmF0aW9uIHRoYXQgZmFpbGVkIHdpdGggcmVtb3RlIGFjY2VzcyBlcnJvci4KKyAqIFNvIHNwZWVkIGlzIG5vdCBhbiBpc3N1ZSBoZXJlLgorICovCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19zZW5kX2dldF9tZXNzYWdlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkJIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcCwgKmZvdW5kID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCWlmIChybS0+bV9yZG1hX29wID09IG9wKSB7CisJCQlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7CisJCQlmb3VuZCA9IHJtOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfc2VuZF9xdWV1ZSwgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKHJtLT5tX3JkbWFfb3AgPT0gb3ApIHsKKwkJCWF0b21pY19pbmMoJnJtLT5tX3JlZmNvdW50KTsKKwkJCWZvdW5kID0gcm07CisJCQlicmVhazsKKwkJfQorCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogVGhpcyByZW1vdmVzIG1lc3NhZ2VzIGZyb20gdGhlIHNvY2tldCdzIGxpc3QgaWYgdGhleSdyZSBvbiBpdC4gIFRoZSBsaXN0CisgKiBhcmd1bWVudCBtdXN0IGJlIHByaXZhdGUgdG8gdGhlIGNhbGxlciwgd2UgbXVzdCBiZSBhYmxlIHRvIG1vZGlmeSBpdAorICogd2l0aG91dCBsb2Nrcy4gIFRoZSBtZXNzYWdlcyBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaGVsZCBmb3IgdGhlaXIKKyAqIHBvc2l0aW9uIG9uIHRoZSBsaXN0LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGRyb3AgdGhhdCByZWZlcmVuY2UgYWZ0ZXIKKyAqIHJlbW92aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSAnbWVzc2FnZXMnIGxpc3QgcmVnYXJkbGVzcyBvZiBpZiBpdCBmb3VuZAorICogdGhlIG1lc3NhZ2VzIG9uIHRoZSBzb2NrZXQgbGlzdCBvciBub3QuCisgKi8KK3ZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsgLyogc2lsZW5jZSBnY2MgOlAgKi8KKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eShtZXNzYWdlcykpIHsKKwkJcm0gPSBsaXN0X2VudHJ5KG1lc3NhZ2VzLT5uZXh0LCBzdHJ1Y3QgcmRzX21lc3NhZ2UsCisJCQkJbV9jb25uX2l0ZW0pOworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9jb25uX2l0ZW0pOworCisJCS8qCisJCSAqIElmIHdlIHNlZSB0aGlzIGZsYWcgY2xlYXJlZCB0aGVuIHdlJ3JlICpzdXJlKiB0aGF0IHNvbWVvbmUKKwkJICogZWxzZSBiZWF0IHVzIHRvIHJlbW92aW5nIGl0IGZyb20gdGhlIHNvY2suICBJZiB3ZSByYWNlCisJCSAqIHdpdGggdGhlaXIgZmxhZyB1cGRhdGUgd2UnbGwgZ2V0IHRoZSBsb2NrIGFuZCB0aGVuIHJlYWxseQorCQkgKiBzZWUgdGhhdCB0aGUgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLgorCQkgKgorCQkgKiBUaGUgbWVzc2FnZSBzcGlubG9jayBtYWtlcyBzdXJlIG5vYm9keSBjbGVhcnMgcm0tPm1fcnMKKwkJICogd2hpbGUgd2UncmUgbWVzc2luZyB3aXRoIGl0LiBJdCBkb2VzIG5vdCBwcmV2ZW50IHRoZQorCQkgKiBtZXNzYWdlIGZyb20gYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBzb2NrZXQsIHRob3VnaC4KKwkJICovCisJCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisJCWlmICghdGVzdF9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpKQorCQkJZ290byB1bmxvY2tfYW5kX2Ryb3A7CisKKwkJaWYgKHJzICE9IHJtLT5tX3JzKSB7CisJCQlpZiAocnMpIHsKKwkJCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQkJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJCQlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKKwkJCX0KKwkJCXJzID0gcm0tPm1fcnM7CisJCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJCXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKKwkJfQorCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpKSB7CisJCQlzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvID0gcm0tPm1fcmRtYV9vcDsKKwkJCXN0cnVjdCByZHNfbm90aWZpZXIgKm5vdGlmaWVyOworCisJCQlsaXN0X2RlbF9pbml0KCZybS0+bV9zb2NrX2l0ZW0pOworCQkJcmRzX3NlbmRfc25kYnVmX3JlbW92ZShycywgcm0pOworCisJCQlpZiAocm8gJiYgcm8tPnJfbm90aWZpZXIKKwkJCSAgICYmIChzdGF0dXMgfHwgcm8tPnJfbm90aWZ5KSkgeworCQkJCW5vdGlmaWVyID0gcm8tPnJfbm90aWZpZXI7CisJCQkJbGlzdF9hZGRfdGFpbCgmbm90aWZpZXItPm5fbGlzdCwKKwkJCQkJCSZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJCQlpZiAoIW5vdGlmaWVyLT5uX3N0YXR1cykKKwkJCQkJbm90aWZpZXItPm5fc3RhdHVzID0gc3RhdHVzOworCQkJCXJtLT5tX3JkbWFfb3AtPnJfbm90aWZpZXIgPSBOVUxMOworCQkJfQorCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJCXJtLT5tX3JzID0gTlVMTDsKKwkJfQorCit1bmxvY2tfYW5kX2Ryb3A6CisJCXNwaW5fdW5sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwl9CisKKwlpZiAocnMpIHsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVHJhbnNwb3J0cyBjYWxsIGhlcmUgd2hlbiB0aGV5J3ZlIGRldGVybWluZWQgdGhhdCB0aGUgcmVjZWl2ZXIgcXVldWVkCisgKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZQorICogbW92ZWQgdG8gdGhlIHJldHJhbnMgcXVldWUgd2hlbiByZHNfc2VuZF94bWl0IHBpY2tzIHRoZW0gb2ZmIHRoZSBzZW5kCisgKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW4KKyAqIGFzc2lnbmVkIHRoZSBtX2Fja19zZXEgeWV0IC0gYnV0IHRoYXQncyBmaW5lIGFzIGxvbmcgYXMgdGNwX2lzX2Fja2VkCisgKiBjaGVja3MgdGhlIFJEU19NU0dfSEFTX0FDS19TRVEgYml0LgorICoKKyAqIFhYWCBJdCdzIG5vdCBjbGVhciB0byBtZSBob3cgdGhpcyBpcyBzYWZlbHkgc2VyaWFsaXplZCB3aXRoIHNvY2tldAorICogZGVzdHJ1Y3Rpb24uICBNYXliZSBpdCBzaG91bGQgYmFpbCBpZiBpdCBzZWVzIFNPQ0tfREVBRC4KKyAqLwordm9pZCByZHNfc2VuZF9kcm9wX2Fja2VkKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IGFjaywKKwkJCSBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQobGlzdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKCFyZHNfc2VuZF9pc19hY2tlZChybSwgYWNrLCBpc19hY2tlZCkpCisJCQlicmVhazsKKworCQlsaXN0X21vdmUoJnJtLT5tX2Nvbm5faXRlbSwgJmxpc3QpOworCQljbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpOworCX0KKworCS8qIG9yZGVyIGZsYWcgdXBkYXRlcyB3aXRoIHNwaW4gbG9ja3MgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmxpc3QpKQorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwkvKiBub3cgcmVtb3ZlIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBzb2NrIGxpc3QgYXMgbmVlZGVkICovCisJcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jaygmbGlzdCwgUkRTX1JETUFfU1VDQ0VTUyk7Cit9CisKK3ZvaWQgcmRzX3NlbmRfZHJvcF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRlc3QpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQobGlzdCk7CisJaW50IHdha2UgPSAwOworCisJLyogZ2V0IGFsbCB0aGUgbWVzc2FnZXMgd2UncmUgZHJvcHBpbmcgdW5kZXIgdGhlIHJzIGxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmcnMtPnJzX3NlbmRfcXVldWUsIG1fc29ja19pdGVtKSB7CisJCWlmIChkZXN0ICYmIChkZXN0LT5zaW5fYWRkci5zX2FkZHIgIT0gcm0tPm1fZGFkZHIgfHwKKwkJCSAgICAgZGVzdC0+c2luX3BvcnQgIT0gcm0tPm1faW5jLmlfaGRyLmhfZHBvcnQpKQorCQkJY29udGludWU7CisKKwkJd2FrZSA9IDE7CisJCWxpc3RfbW92ZSgmcm0tPm1fc29ja19pdGVtLCAmbGlzdCk7CisJCXJkc19zZW5kX3NuZGJ1Zl9yZW1vdmUocnMsIHJtKTsKKwkJY2xlYXJfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKTsKKworCQkvKiBJZiB0aGlzIGlzIGEgUkRNQSBvcGVyYXRpb24sIG5vdGlmeSB0aGUgYXBwLiAqLworCQlfX3Jkc19yZG1hX3NlbmRfY29tcGxldGUocnMsIHJtLCBSRFNfUkRNQV9DQU5DRUxFRCk7CisJfQorCisJLyogb3JkZXIgZmxhZyB1cGRhdGVzIHdpdGggdGhlIHJzIGxvY2sgKi8KKwlpZiAod2FrZSkKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlpZiAod2FrZSkKKwkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCisJY29ubiA9IE5VTEw7CisKKwkvKiBub3cgcmVtb3ZlIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBjb25uIGxpc3QgYXMgbmVlZGVkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShybSwgJmxpc3QsIG1fc29ja19pdGVtKSB7CisJCS8qIFdlIGRvIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgbG9vcCBhYm92ZSwgc28gdGhhdAorCQkgKiB3ZSBkb24ndCBoYXZlIHRvIG5lc3QgbV9yc19sb2NrIHVuZGVyIHJzLT5yc19sb2NrICovCisJCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisJCXJtLT5tX3JzID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCisJCS8qCisJCSAqIElmIHdlIHNlZSB0aGlzIGZsYWcgY2xlYXJlZCB0aGVuIHdlJ3JlICpzdXJlKiB0aGF0IHNvbWVvbmUKKwkJICogZWxzZSBiZWF0IHVzIHRvIHJlbW92aW5nIGl0IGZyb20gdGhlIGNvbm4uICBJZiB3ZSByYWNlCisJCSAqIHdpdGggdGhlaXIgZmxhZyB1cGRhdGUgd2UnbGwgZ2V0IHRoZSBsb2NrIGFuZCB0aGVuIHJlYWxseQorCQkgKiBzZWUgdGhhdCB0aGUgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLgorCQkgKi8KKwkJaWYgKCF0ZXN0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncykpCisJCQljb250aW51ZTsKKworCQlpZiAoY29ubiAhPSBybS0+bV9pbmMuaV9jb25uKSB7CisJCQlpZiAoY29ubikKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJCWNvbm4gPSBybS0+bV9pbmMuaV9jb25uOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncykpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQl9CisJfQorCisJaWYgKGNvbm4pCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCQlybSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1fc29ja19pdGVtKTsKKwkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fc29ja19pdGVtKTsKKworCQlyZHNfbWVzc2FnZV93YWl0KHJtKTsKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwl9Cit9CisKKy8qCisgKiB3ZSBvbmx5IHdhbnQgdGhpcyB0byBmaXJlIG9uY2Ugc28gd2UgdXNlIHRoZSBjYWxsZXJzICdxdWV1ZWQnLiAgSXQncworICogcG9zc2libGUgdGhhdCBhbm90aGVyIHRocmVhZCBjYW4gcmFjZSB3aXRoIHVzIGFuZCByZW1vdmUgdGhlCisgKiBtZXNzYWdlIGZyb20gdGhlIGZsb3cgd2l0aCBSRFNfQ0FOQ0VMX1NFTlRfVE8uCisgKi8KK3N0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBfX2JlMTYgc3BvcnQsCisJCQkgICAgIF9fYmUxNiBkcG9ydCwgaW50ICpxdWV1ZWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGVuOworCisJaWYgKCpxdWV1ZWQpCisJCWdvdG8gb3V0OworCisJbGVuID0gYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKworCS8qIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hpY2ggaG9sZHMgYm90aCB0aGUgc29ja2V0J3MgcnNfbG9jaworCSAqIGFuZCB0aGUgY29ubmVjdGlvbidzIGNfbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGxpdHRsZSBzcGFjZSBpbiBzbmRidWYsIHdlIGRvbid0IHF1ZXVlIGFueXRoaW5nLAorCSAqIGFuZCB1c2Vyc3BhY2UgZ2V0cyAtRUFHQUlOLiBCdXQgcG9sbCgpIGluZGljYXRlcyB0aGVyZSdzIHNlbmQKKwkgKiByb29tLiBUaGlzIGNhbiBsZWFkIHRvIGJhZCBiZWhhdmlvciAoc3Bpbm5pbmcpIGlmIHNuZF9ieXRlcyBpc24ndAorCSAqIGZyZWVkIHVwIGJ5IGluY29taW5nIGFja3MuIFNvIHdlIGNoZWNrIHRoZSAqb2xkKiB2YWx1ZSBvZgorCSAqIHJzX3NuZF9ieXRlcyBoZXJlIHRvIGFsbG93IHRoZSBsYXN0IG1zZyB0byBleGNlZWQgdGhlIGJ1ZmZlciwKKwkgKiBhbmQgcG9sbCgpIG5vdyBrbm93cyBubyBtb3JlIGRhdGEgY2FuIGJlIHNlbnQuCisJICovCisJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPCByZHNfc2tfc25kYnVmKHJzKSkgeworCQlycy0+cnNfc25kX2J5dGVzICs9IGxlbjsKKworCQkvKiBsZXQgcmVjdiBzaWRlIGtub3cgd2UgYXJlIGNsb3NlIHRvIHNlbmQgc3BhY2UgZXhoYXVzdGlvbi4KKwkJICogVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIG9wdGltYWwgd2F5IHRvIGRvIGl0LCBhcyB0aGlzCisJCSAqIG1lYW5zIHdlIHNldCB0aGUgZmxhZyBvbiAqYWxsKiBtZXNzYWdlcyBhcyBzb29uIGFzIG91cgorCQkgKiB0aHJvdWdocHV0IGhpdHMgYSBjZXJ0YWluIHRocmVzaG9sZC4KKwkJICovCisJCWlmIChycy0+cnNfc25kX2J5dGVzID49IHJkc19za19zbmRidWYocnMpIC8gMikKKwkJCV9fc2V0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKTsKKworCQlsaXN0X2FkZF90YWlsKCZybS0+bV9zb2NrX2l0ZW0sICZycy0+cnNfc2VuZF9xdWV1ZSk7CisJCXNldF9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlybS0+bV9ycyA9IHJzOworCisJCS8qIFRoZSBjb2RlIG9yZGVyaW5nIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgd2UncmUKKwkJICAgdHJ5aW5nIHRvIG1pbmltaXplIHRoZSB0aW1lIHdlIGhvbGQgY19sb2NrICovCisJCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcigmcm0tPm1faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApOworCQlybS0+bV9pbmMuaV9jb25uID0gY29ubjsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKworCQlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisJCXJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlID0gY3B1X3RvX2JlNjQoY29ubi0+Y19uZXh0X3R4X3NlcSsrKTsKKwkJbGlzdF9hZGRfdGFpbCgmcm0tPm1fY29ubl9pdGVtLCAmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwkJc2V0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJCXNwaW5fdW5sb2NrKCZjb25uLT5jX2xvY2spOworCisJCXJkc2RlYnVnKCJxdWV1ZWQgbXNnICVwIGxlbiAlZCwgcnMgJXAgYnl0ZXMgJWQgc2VxICVsbHVcbiIsCisJCQkgcm0sIGxlbiwgcnMsIHJzLT5yc19zbmRfYnl0ZXMsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkpOworCisJCSpxdWV1ZWQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuICpxdWV1ZWQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2Ntc2dfc2VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICphbGxvY2F0ZWRfbXIpCit7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKG1zZyk7IGNtc2c7IGNtc2cgPSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7CisJCWlmICghQ01TR19PSyhtc2csIGNtc2cpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNtc2ctPmNtc2dfbGV2ZWwgIT0gU09MX1JEUykKKwkJCWNvbnRpbnVlOworCisJCS8qIEFzIGEgc2lkZSBlZmZlY3QsIFJETUFfREVTVCBhbmQgUkRNQV9NQVAgd2lsbCBzZXQKKwkJICogcm0tPm1fcmRtYV9jb29raWUgYW5kIHJtLT5tX3JkbWFfbXIuCisJCSAqLworCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCQljYXNlIFJEU19DTVNHX1JETUFfQVJHUzoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfYXJncyhycywgcm0sIGNtc2cpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRFNfQ01TR19SRE1BX0RFU1Q6CisJCQlyZXQgPSByZHNfY21zZ19yZG1hX2Rlc3QocnMsIHJtLCBjbXNnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkRTX0NNU0dfUkRNQV9NQVA6CisJCQlyZXQgPSByZHNfY21zZ19yZG1hX21hcChycywgcm0sIGNtc2cpOworCQkJaWYgKCFyZXQpCisJCQkJKmFsbG9jYXRlZF9tciA9IDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3QgcGF5bG9hZF9sZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJc3RydWN0IHNvY2thZGRyX2luICp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJX19iZTMyIGRhZGRyOworCV9fYmUxNiBkcG9ydDsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJaW50IHJldCA9IDA7CisJaW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7CisJaW50IG5vbmJsb2NrID0gbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQ7CisJbG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTsKKworCS8qIE1pcnJvciBMaW51eCBVRFAgbWlycm9yIG9mIEJTRCBlcnJvciBtZXNzYWdlIGNvbXBhdGliaWxpdHkgKi8KKwkvKiBYWFg6IFBlcmhhcHMgTVNHX01PUkUgc29tZWRheSAqLworCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUIHwgTVNHX0NNU0dfQ09NUEFUKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJtc2dfZmxhZ3MgMHglMDhYXG4iLCBtc2ctPm1zZ19mbGFncyk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobXNnLT5tc2dfbmFtZWxlbikgeworCQkvKiBYWFggZmFpbCBub24tdW5pY2FzdCBkZXN0aW5hdGlvbiBJUHM/ICovCisJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKCp1c2luKSB8fCB1c2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlkYWRkciA9IHVzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJZHBvcnQgPSB1c2luLT5zaW5fcG9ydDsKKwl9IGVsc2UgeworCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgY29uc2lzdGVuY3kgd2l0aCAtPmNvbm5lY3QoKSAqLworCQlsb2NrX3NvY2soc2spOworCQlkYWRkciA9IHJzLT5yc19jb25uX2FkZHI7CisJCWRwb3J0ID0gcnMtPnJzX2Nvbm5fcG9ydDsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwl9CisKKwkvKiByYWNpbmcgd2l0aCBhbm90aGVyIHRocmVhZCBiaW5kaW5nIHNlZW1zIG9rIGhlcmUgKi8KKwlpZiAoZGFkZHIgPT0gMCB8fCBycy0+cnNfYm91bmRfYWRkciA9PSAwKSB7CisJCXJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovCisJCWdvdG8gb3V0OworCX0KKworCXJtID0gcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIobXNnLT5tc2dfaW92LCBwYXlsb2FkX2xlbik7CisJaWYgKElTX0VSUihybSkpIHsKKwkJcmV0ID0gUFRSX0VSUihybSk7CisJCXJtID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcm0tPm1fZGFkZHIgPSBkYWRkcjsKKworCS8qIFBhcnNlIGFueSBjb250cm9sIG1lc3NhZ2VzIHRoZSB1c2VyIG1heSBoYXZlIGluY2x1ZGVkLiAqLworCXJldCA9IHJkc19jbXNnX3NlbmQocnMsIHJtLCBtc2csICZhbGxvY2F0ZWRfbXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogcmRzX2Nvbm5fY3JlYXRlIGhhcyBhIHNwaW5sb2NrIHRoYXQgcnVucyB3aXRoIElSUSBvZmYuCisJICogQ2FjaGluZyB0aGUgY29ubiBpbiB0aGUgc29ja2V0IGhlbHBzIGEgbG90LiAqLworCWlmIChycy0+cnNfY29ubiAmJiBycy0+cnNfY29ubi0+Y19mYWRkciA9PSBkYWRkcikKKwkJY29ubiA9IHJzLT5yc19jb25uOworCWVsc2UgeworCQljb25uID0gcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHJzLT5yc19ib3VuZF9hZGRyLCBkYWRkciwKKwkJCQkJcnMtPnJzX3RyYW5zcG9ydCwKKwkJCQkJc29jay0+c2stPnNrX2FsbG9jYXRpb24pOworCQlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNvbm4pOworCQkJZ290byBvdXQ7CisJCX0KKwkJcnMtPnJzX2Nvbm4gPSBjb25uOworCX0KKworCWlmICgocm0tPm1fcmRtYV9jb29raWUgfHwgcm0tPm1fcmRtYV9vcCkKKwkgJiYgY29ubi0+Y190cmFucy0+eG1pdF9yZG1hID09IE5VTEwpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAicmRtYV9vcCAlcCBjb25uIHhtaXRfcmRtYSAlcFxuIiwKKwkJCQlybS0+bV9yZG1hX29wLCBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEpOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSWYgdGhlIGNvbm5lY3Rpb24gaXMgZG93biwgdHJpZ2dlciBhIGNvbm5lY3QuIFdlIG1heQorCSAqIGhhdmUgc2NoZWR1bGVkIGEgZGVsYXllZCByZWNvbm5lY3QgaG93ZXZlciAtIGluIHRoaXMgY2FzZQorCSAqIHdlIHNob3VsZCBub3QgaW50ZXJmZXJlLgorCSAqLworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9ET1dOCisJICYmICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19jb25uX3csIDApOworCisJcmV0ID0gcmRzX2Nvbmdfd2FpdChjb25uLT5jX2Zjb25nLCBkcG9ydCwgbm9uYmxvY2ssIHJzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXdoaWxlICghcmRzX3NlbmRfcXVldWVfcm0ocnMsIGNvbm4sIHJtLCBycy0+cnNfYm91bmRfcG9ydCwKKwkJCQkgIGRwb3J0LCAmcXVldWVkKSkgeworCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZV9mdWxsKTsKKwkJLyogWFhYIG1ha2Ugc3VyZSB0aGlzIGlzIHJlYXNvbmFibGUgKi8KKwkJaWYgKHBheWxvYWRfbGVuID4gcmRzX3NrX3NuZGJ1ZihycykpIHsKKwkJCXJldCA9IC1FTVNHU0laRTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChub25ibG9jaykgeworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJdGltZW8gPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgqc2stPnNrX3NsZWVwLAorCQkJCQlyZHNfc2VuZF9xdWV1ZV9ybShycywgY29ubiwgcm0sCisJCQkJCQkJICBycy0+cnNfYm91bmRfcG9ydCwKKwkJCQkJCQkgIGRwb3J0LAorCQkJCQkJCSAgJnF1ZXVlZCksCisJCQkJCXRpbWVvKTsKKwkJcmRzZGVidWcoInNlbmRtc2cgd29rZSBxdWV1ZWQgJWQgdGltZW8gJWxkXG4iLCBxdWV1ZWQsIHRpbWVvKTsKKwkJaWYgKHRpbWVvID4gMCB8fCB0aW1lbyA9PSBNQVhfU0NIRURVTEVfVElNRU9VVCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHRpbWVvOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEJ5IG5vdyB3ZSd2ZSBjb21taXR0ZWQgdG8gdGhlIHNlbmQuICBXZSByZXVzZSByZHNfc2VuZF93b3JrZXIoKQorCSAqIHRvIHJldHJ5IHNlbmRzIGluIHRoZSByZHMgdGhyZWFkIGlmIHRoZSB0cmFuc3BvcnQgYXNrcyB1cyB0by4KKwkgKi8KKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZWQpOworCisJaWYgKCF0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXJkc19zZW5kX3dvcmtlcigmY29ubi0+Y19zZW5kX3cud29yayk7CisKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworCXJldHVybiBwYXlsb2FkX2xlbjsKKworb3V0OgorCS8qIElmIHRoZSB1c2VyIGluY2x1ZGVkIGEgUkRNQV9NQVAgY21zZywgd2UgYWxsb2NhdGVkIGEgTVIgb24gdGhlIGZseS4KKwkgKiBJZiB0aGUgc2VuZG1zZyBnb2VzIHRocm91Z2gsIHdlIGtlZXAgdGhlIE1SLiBJZiBpdCBmYWlscyB3aXRoIEVBR0FJTgorCSAqIG9yIGluIGFueSBvdGhlciB3YXksIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgTVIgYWdhaW4gKi8KKwlpZiAoYWxsb2NhdGVkX21yKQorCQlyZHNfcmRtYV91bnVzZShycywgcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksIDEpOworCisJaWYgKHJtKQorCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXBseSB0byBhIHBpbmcgcGFja2V0LgorICovCitpbnQKK3Jkc19zZW5kX3Bvbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMTYgZHBvcnQpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJcm0gPSByZHNfbWVzc2FnZV9hbGxvYygwLCBHRlBfQVRPTUlDKTsKKwlpZiAocm0gPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9kYWRkciA9IGNvbm4tPmNfZmFkZHI7CisKKwkvKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5CisJICogaGF2ZSBzY2hlZHVsZWQgYSBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlCisJICogd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuCisJICovCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RPV04KKwkgJiYgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisKKwlyZXQgPSByZHNfY29uZ193YWl0KGNvbm4tPmNfZmNvbmcsIGRwb3J0LCAxLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3NlbmRfcXVldWUpOworCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpOworCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJcm0tPm1faW5jLmlfY29ubiA9IGNvbm47CisKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoJnJtLT5tX2luYy5pX2hkciwgMCwgZHBvcnQsCisJCQkJICAgIGNvbm4tPmNfbmV4dF90eF9zZXEpOworCWNvbm4tPmNfbmV4dF90eF9zZXErKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlZCk7CisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcG9uZyk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAocm0pCisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvc3RhdHMuYyBiL25ldC9yZHMvc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzcxNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9zdGF0cy5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcmRzX3N0YXRpc3RpY3MsIHJkc19zdGF0cyk7CisKKy8qIDouLCRzL3Vuc2lnbmVkIGxvbmdcPi4qXDxzX1woLipcKTsvIlwxIiwvZyAqLworCitzdGF0aWMgY2hhciAqcmRzX3N0YXRfbmFtZXNbXSA9IHsKKwkiY29ubl9yZXNldCIsCisJInJlY3ZfZHJvcF9iYWRfY2hlY2tzdW0iLAorCSJyZWN2X2Ryb3Bfb2xkX3NlcSIsCisJInJlY3ZfZHJvcF9ub19zb2NrIiwKKwkicmVjdl9kcm9wX2RlYWRfc29jayIsCisJInJlY3ZfZGVsaXZlcl9yYWNlZCIsCisJInJlY3ZfZGVsaXZlcmVkIiwKKwkicmVjdl9xdWV1ZWQiLAorCSJyZWN2X2ltbWVkaWF0ZV9yZXRyeSIsCisJInJlY3ZfZGVsYXllZF9yZXRyeSIsCisJInJlY3ZfYWNrX3JlcXVpcmVkIiwKKwkicmVjdl9yZG1hX2J5dGVzIiwKKwkicmVjdl9waW5nIiwKKwkic2VuZF9xdWV1ZV9lbXB0eSIsCisJInNlbmRfcXVldWVfZnVsbCIsCisJInNlbmRfc2VtX2NvbnRlbnRpb24iLAorCSJzZW5kX3NlbV9xdWV1ZV9yYWNlZCIsCisJInNlbmRfaW1tZWRpYXRlX3JldHJ5IiwKKwkic2VuZF9kZWxheWVkX3JldHJ5IiwKKwkic2VuZF9kcm9wX2Fja2VkIiwKKwkic2VuZF9hY2tfcmVxdWlyZWQiLAorCSJzZW5kX3F1ZXVlZCIsCisJInNlbmRfcmRtYSIsCisJInNlbmRfcmRtYV9ieXRlcyIsCisJInNlbmRfcG9uZyIsCisJInBhZ2VfcmVtYWluZGVyX2hpdCIsCisJInBhZ2VfcmVtYWluZGVyX21pc3MiLAorCSJjb3B5X3RvX3VzZXIiLAorCSJjb3B5X2Zyb21fdXNlciIsCisJImNvbmdfdXBkYXRlX3F1ZXVlZCIsCisJImNvbmdfdXBkYXRlX3JlY2VpdmVkIiwKKwkiY29uZ19zZW5kX2Vycm9yIiwKKwkiY29uZ19zZW5kX2Jsb2NrZWQiLAorfTsKKwordm9pZCByZHNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSB1aW50NjRfdCAqdmFsdWVzLCBjaGFyICoqbmFtZXMsIHNpemVfdCBucikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fY291bnRlciBjdHI7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlCVUdfT04oc3RybGVuKG5hbWVzW2ldKSA+PSBzaXplb2YoY3RyLm5hbWUpKTsKKwkJc3RybmNweShjdHIubmFtZSwgbmFtZXNbaV0sIHNpemVvZihjdHIubmFtZSkgLSAxKTsKKwkJY3RyLnZhbHVlID0gdmFsdWVzW2ldOworCisJCXJkc19pbmZvX2NvcHkoaXRlciwgJmN0ciwgc2l6ZW9mKGN0cikpOworCX0KK30KKworLyoKKyAqIFRoaXMgZ2l2ZXMgZ2xvYmFsIGNvdW50ZXJzIGFjcm9zcyBhbGwgdGhlIHRyYW5zcG9ydHMuICBUaGUgc3RyaW5ncworICogYXJlIGNvcGllZCBpbiBzbyB0aGF0IHRoZSB0b29sIGRvZXNuJ3QgbmVlZCBrbm93bGVkZ2Ugb2YgdGhlIHNwZWNpZmljCisgKiBzdGF0cyB0aGF0IHdlJ3JlIGV4cG9ydGluZy4gIFNvbWUgYXJlIHByZXR0eSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQKKyAqIGFuZCBtYXkgY2hhbmdlIG92ZXIgdGltZS4gIFRoYXQgZG9lc24ndCBzdG9wIHRoZW0gZnJvbSBiZWluZyB1c2VmdWwuCisgKgorICogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBpbiB0aGUgY2hhaW4gdGhhdCBrbm93cyBhYm91dCB0aGUgYnl0ZSBncmFudWxhcgorICogbGVuZ3RoIGluIHVzZXJzcGFjZS4gIEl0IGNvbnZlcnRzIGl0IHRvIG51bWJlciBvZiBzdGF0IGVudHJpZXMgdGhhdCB0aGUKKyAqIHJlc3Qgb2YgdGhlIGZ1bmN0aW9ucyBvcGVyYXRlIGluLgorICovCitzdGF0aWMgdm9pZCByZHNfc3RhdHNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19zdGF0aXN0aWNzIHN0YXRzID0gezAsIH07CisJdWludDY0X3QgKnNyYzsKKwl1aW50NjRfdCAqc3VtOworCXNpemVfdCBpOworCWludCBjcHU7CisJdW5zaWduZWQgaW50IGF2YWlsOworCisJYXZhaWwgPSBsZW4gLyBzaXplb2Yoc3RydWN0IHJkc19pbmZvX2NvdW50ZXIpOworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcykpIHsKKwkJYXZhaWwgPSAwOworCQlnb3RvIHRyYW5zOworCX0KKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfc3RhdHMsIGNwdSkpOworCQlzdW0gPSAodWludDY0X3QgKikmc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaSsrKQorCQkJKihzdW0rKykgKz0gKihzcmMrKyk7CisJfQorCisJcmRzX3N0YXRzX2luZm9fY29weShpdGVyLCAodWludDY0X3QgKikmc3RhdHMsIHJkc19zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpKTsKKwlhdmFpbCAtPSBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKTsKKwordHJhbnM6CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY291bnRlcik7CisJbGVucy0+bnIgPSByZHNfdHJhbnNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsIGF2YWlsKSArCisJCSAgIEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpOworfQorCit2b2lkIHJkc19zdGF0c19leGl0KHZvaWQpCit7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPVU5URVJTLCByZHNfc3RhdHNfaW5mbyk7Cit9CisKK2ludCBfX2luaXQgcmRzX3N0YXRzX2luaXQodm9pZCkKK3sKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPVU5URVJTLCByZHNfc3RhdHNfaW5mbyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3N5c2N0bC5jIGIvbmV0L3Jkcy9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdkYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9zeXNjdGwuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmRzX3N5c2N0bF9yZWdfdGFibGU7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXggPSB+MFVMOworCit1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzOwordW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcyA9IEhaOworCit1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0cyA9IDg7Cit1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXMgPSAoMTYgPDwgMjApOworCit1bnNpZ25lZCBpbnQgcmRzX3N5c2N0bF9waW5nX2VuYWJsZSA9IDE7CisKK3N0YXRpYyBjdGxfdGFibGUgcmRzX3N5c2N0bF9yZHNfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAicmVjb25uZWN0X21pbl9kZWxheV9tcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW4sCisJCS5leHRyYTIJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gInJlY29ubmVjdF9tYXhfZGVsYXlfbXMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXMsCisJCS5leHRyYTIJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJtYXhfdW5hY2tlZF9wYWNrZXRzIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0cywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJtYXhfdW5hY2tlZF9ieXRlcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInBpbmdfZW5hYmxlIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfcGluZ19lbmFibGUsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsgLmN0bF9uYW1lID0gMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3BhdGggcmRzX3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJyZHMiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKKwordm9pZCByZHNfc3lzY3RsX2V4aXQodm9pZCkKK3sKKwlpZiAocmRzX3N5c2N0bF9yZWdfdGFibGUpCisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHJkc19zeXNjdGxfcmVnX3RhYmxlKTsKK30KKworaW50IF9faW5pdCByZHNfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlyZHNfc3lzY3RsX3JlY29ubmVjdF9taW4gPSBtc2Vjc190b19qaWZmaWVzKDEpOworCXJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzID0gcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluOworCisJcmRzX3N5c2N0bF9yZWdfdGFibGUgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX3N5c2N0bF9wYXRoLCByZHNfc3lzY3RsX3Jkc190YWJsZSk7CisJaWYgKHJkc19zeXNjdGxfcmVnX3RhYmxlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90aHJlYWRzLmMgYi9uZXQvcmRzL3RocmVhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhhMWJmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90aHJlYWRzLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBBbGwgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGlzIHNpbXBsaWZpZWQgYnkgc2VyaWFsaXppbmcgaXQgdGhyb3VnaAorICogd29yayBxdWV1ZXMgdGhhdCBleGVjdXRlIGluIGEgY29ubmVjdGlvbiBtYW5hZ2luZyB0aHJlYWQuCisgKgorICogVENQIHdhbnRzIHRvIHNlbmQgYWNrcyB0aHJvdWdoIHNlbmRwYWdlKCkgaW4gcmVzcG9uc2UgdG8gZGF0YV9yZWFkeSgpLAorICogYnV0IGl0IG5lZWRzIGEgcHJvY2VzcyBjb250ZXh0IHRvIGRvIHNvLgorICoKKyAqIFRoZSByZWNlaXZlIHBhdGhzIG5lZWQgdG8gYWxsb2NhdGUgYnV0IGNhbid0IGRyb3AgcGFja2V0cyAoISkgc28gd2UgaGF2ZQorICogYSB0aHJlYWQgYXJvdW5kIHRvIGJsb2NrIGFsbG9jYXRpbmcgaWYgdGhlIHJlY2VpdmUgZmFzdCBwYXRoIHNlZXMgYW4KKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworCisvKiBHcmFuZCBVbmlmaWVkIFRoZW9yeSBvZiBjb25uZWN0aW9uIGxpZmUgY3ljbGU6CisgKiBBdCBhbnkgcG9pbnQgaW4gdGltZSwgdGhlIGNvbm5lY3Rpb24gY2FuIGJlIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXM6CisgKiBET1dOLCBDT05ORUNUSU5HLCBVUCwgRElTQ09OTkVDVElORywgRVJST1IKKyAqCisgKiBUaGUgZm9sbG93aW5nIHRyYW5zaXRpb25zIGFyZSBwb3NzaWJsZToKKyAqICBBTlkJCSAgLT4gRVJST1IKKyAqICBVUAkJICAtPiBESVNDT05ORUNUSU5HCisgKiAgRVJST1IJICAtPiBESVNDT05ORUNUSU5HCisgKiAgRElTQ09OTkVDVElORyAtPiBET1dOCisgKiAgRE9XTgkgIC0+IENPTk5FQ1RJTkcKKyAqICBDT05ORUNUSU5HCSAgLT4gVVAKKyAqCisgKiBUcmFuc2l0aW9uIHRvIHN0YXRlIERJU0NPTk5FQ1RJTkcvRE9XTjoKKyAqICAtCUluc2lkZSB0aGUgc2h1dGRvd24gd29ya2VyOyBzeW5jaHJvbml6ZXMgd2l0aCB4bWl0IHBhdGgKKyAqCXRocm91Z2ggY19zZW5kX2xvY2ssIGFuZCB3aXRoIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjYWxsYmFja3MKKyAqCXZpYSBjX2NtX2xvY2suCisgKgorICoJRm9yIHJlY2VpdmUgY2FsbGJhY2tzLCB3ZSByZWx5IG9uIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydAorICoJKFRDUCwgSUIvUkRNQSkgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bmNocm9uaXNhdGlvbi4KKyAqLworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc193cTsKKwordm9pZCByZHNfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0NPTk5FQ1RJTkcsIFJEU19DT05OX1VQKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IHRyYW5zaXRpb24gdG8gc3RhdGUgVVAsICIKKwkJCQkiY3VycmVudCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQlfX2Z1bmNfXywKKwkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOworCQlyZXR1cm47CisJfQorCisJcmRzZGVidWcoImNvbm4gJXAgZm9yICVwSTQgdG8gJXBJNCBjb21wbGV0ZVxuIiwKKwkgIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisKKwljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gMDsKKwlzZXRfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKK30KKworLyoKKyAqIFRoaXMgcmFuZG9tIGV4cG9uZW50aWFsIGJhY2tvZmYgaXMgcmVsaWVkIG9uIHRvIGV2ZW50dWFsbHkgcmVzb2x2ZSByYWNpbmcKKyAqIGNvbm5lY3RzLgorICoKKyAqIElmIGNvbm5lY3QgYXR0ZW1wdHMgcmFjZSB0aGVuIGJvdGggcGFydGllcyBkcm9wIGJvdGggY29ubmVjdGlvbnMgYW5kIGNvbWUKKyAqIGhlcmUgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRyeWluZyBhZ2Fpbi4gIEV2ZW50dWFsbHkKKyAqIHRoZSBiYWNrb2ZmIHJhbmdlIHdpbGwgYmUgc28gbXVjaCBncmVhdGVyIHRoYW4gdGhlIHRpbWUgaXQgdGFrZXMgdG8KKyAqIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdGhhdCBvbmUgb2YgdGhlIHBhaXIgd2lsbCBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24KKyAqIGJlZm9yZSB0aGUgb3RoZXIncyByYW5kb20gZGVsYXkgZmlyZXMuCisgKgorICogQ29ubmVjdGlvbiBhdHRlbXB0cyB0aGF0IGFycml2ZSB3aGlsZSBhIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBlc3RhYmxpc2hlZAorICogYXJlIGFsc28gY29uc2lkZXJlZCB0byBiZSByYWNpbmcgY29ubmVjdHMuICBUaGlzIGxldHMgYSBjb25uZWN0aW9uIGZyb20KKyAqIGEgcmVib290ZWQgbWFjaGluZSByZXBsYWNlIGFuIGV4aXN0aW5nIHN0YWxlIGNvbm5lY3Rpb24gYmVmb3JlIHRoZSB0cmFuc3BvcnQKKyAqIG5vdGljZXMgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkLgorICoKKyAqIFdlIHNob3VsZCAqYWx3YXlzKiBzdGFydCB3aXRoIGEgcmFuZG9tIGJhY2tvZmY7IG90aGVyd2lzZSBhIGJyb2tlbiBjb25uZWN0aW9uCisgKiB3aWxsIGFsd2F5cyB0YWtlIHNldmVyYWwgaXRlcmF0aW9ucyB0byBiZSByZS1lc3RhYmxpc2hlZC4KKyAqLworc3RhdGljIHZvaWQgcmRzX3F1ZXVlX3JlY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJdW5zaWduZWQgbG9uZyByYW5kOworCisJcmRzZGVidWcoImNvbm4gJXAgZm9yICVwSTQgdG8gJXBJNCByZWNvbm5lY3QgamlmZmllcyAlbHVcbiIsCisJICBjb25uLCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIsCisJICBjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzKTsKKworCXNldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncyk7CisJaWYgKGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPT0gMCkgeworCQljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisJCXJldHVybjsKKwl9CisKKwlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kLCBzaXplb2YocmFuZCkpOworCXJkc2RlYnVnKCIlbHUgZGVsYXkgJWx1IGNlaWwgY29ubiAlcCBmb3IgJXBJNCAtPiAlcEk0XG4iLAorCQkgcmFuZCAlIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMsIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMsCisJCSBjb25uLCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywKKwkJCSAgIHJhbmQgJSBjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzKTsKKworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSBtaW4oY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyAqIDIsCisJCQkJCXJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzKTsKK30KKwordm9pZCByZHNfY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfY29ubl93LndvcmspOworCWludCByZXQ7CisKKwljbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncyk7CisJaWYgKHJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fQ09OTkVDVElORykpIHsKKwkJcmV0ID0gY29ubi0+Y190cmFucy0+Y29ubl9jb25uZWN0KGNvbm4pOworCQlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IGRpc3BhdGNoZWQsIHJldCAlZFxuIiwKKwkJCWNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKworCQlpZiAocmV0KSB7CisJCQlpZiAocmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9DT05ORUNUSU5HLCBSRFNfQ09OTl9ET1dOKSkKKwkJCQlyZHNfcXVldWVfcmVjb25uZWN0KGNvbm4pOworCQkJZWxzZQorCQkJCXJkc19jb25uX2Vycm9yKGNvbm4sICJSRFM6IGNvbm5lY3QgZmFpbGVkXG4iKTsKKwkJfQorCX0KK30KKwordm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX2Rvd25fdyk7CisKKwkvKiBzaHV0IGl0IGRvd24gdW5sZXNzIGl0J3MgZG93biBhbHJlYWR5ICovCisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0RPV04pKSB7CisJCS8qCisJCSAqIFF1aWVzY2UgdGhlIGNvbm5lY3Rpb24gbWdtdCBoYW5kbGVycyBiZWZvcmUgd2Ugc3RhcnQgdGVhcmluZworCQkgKiB0aGluZ3MgZG93bi4gV2UgZG9uJ3QgaG9sZCB0aGUgbXV0ZXggZm9yIHRoZSBlbnRpcmUKKwkJICogZHVyYXRpb24gb2YgdGhlIHNodXRkb3duIG9wZXJhdGlvbiwgZWxzZSB3ZSBtYXkgYmUKKwkJICogZGVhZGxvY2tpbmcgd2l0aCB0aGUgQ00gaGFuZGxlci4gSW5zdGVhZCwgdGhlIENNIGV2ZW50CisJCSAqIGhhbmRsZXIgaXMgc3VwcG9zZWQgdG8gY2hlY2sgZm9yIHN0YXRlIERJU0NPTk5FQ1RJTkcKKwkJICovCisJCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9VUCwgUkRTX0NPTk5fRElTQ09OTkVDVElORykKKwkJICYmICFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0VSUk9SLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKSkgeworCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwgInNodXRkb3duIGNhbGxlZCBpbiBzdGF0ZSAlZFxuIiwKKwkJCQkJYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpKTsKKwkJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwkJbXV0ZXhfbG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCQljb25uLT5jX3RyYW5zLT5jb25uX3NodXRkb3duKGNvbm4pOworCQlyZHNfY29ubl9yZXNldChjb25uKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisKKwkJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcsIFJEU19DT05OX0RPV04pKSB7CisJCQkvKiBUaGlzIGNhbiBoYXBwZW4gLSBlZyB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZworCQkJICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS4KKwkJCSAqIFF1aXRlIHJlcHJvZHVjZWFibGUgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucy4KKwkJCSAqIE1vc3RseSBoYXJtbGVzcy4KKwkJCSAqLworCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiJXM6IGZhaWxlZCB0byB0cmFuc2l0aW9uIHRvIHN0YXRlIERPV04sICIKKwkJCQkiY3VycmVudCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQlfX2Z1bmNfXywKKwkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogVGhlbiByZWNvbm5lY3QgaWYgaXQncyBzdGlsbCBsaXZlLgorCSAqIFRoZSBwYXNzaXZlIHNpZGUgb2YgYW4gSUIgbG9vcGJhY2sgY29ubmVjdGlvbiBpcyBuZXZlciBhZGRlZAorCSAqIHRvIHRoZSBjb25uIGhhc2gsIHNvIHdlIG5ldmVyIHRyaWdnZXIgYSByZWNvbm5lY3Qgb24gdGhpcworCSAqIGNvbm4gLSB0aGUgcmVjb25uZWN0IGlzIGFsd2F5cyB0cmlnZ2VyZWQgYnkgdGhlIGFjdGl2ZSBwZWVyLiAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvbm4tPmNfY29ubl93KTsKKwlpZiAoIWhsaXN0X3VuaGFzaGVkKCZjb25uLT5jX2hhc2hfbm9kZSkpCisJCXJkc19xdWV1ZV9yZWNvbm5lY3QoY29ubik7Cit9CisKK3ZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX3NlbmRfdy53b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXJldCA9IHJkc19zZW5kX3htaXQoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIHJldCAlZFxuIiwgY29ubiwgcmV0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfaW1tZWRpYXRlX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfZGVsYXllZF9yZXRyeSk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDIpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX3JlY3Zfdy53b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnJlY3YoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIHJldCAlZFxuIiwgY29ubiwgcmV0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfaW1tZWRpYXRlX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZGVsYXllZF9yZXRyeSk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDIpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX3RocmVhZHNfZXhpdCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKHJkc193cSk7Cit9CisKK2ludCBfX2luaXQgcmRzX3RocmVhZHNfaW5pdCh2b2lkKQoreworCXJkc193cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrcmRzZCIpOworCWlmIChyZHNfd3EgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdHJhbnNwb3J0LmMgYi9uZXQvcmRzL3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2N2RhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAibG9vcC5oIgorCitzdGF0aWMgTElTVF9IRUFEKHJkc190cmFuc3BvcnRzKTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHJkc190cmFuc19zZW0pOworCitpbnQgcmRzX3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKK3sKKwlCVUdfT04oc3RybGVuKHRyYW5zLT50X25hbWUpICsgMSA+IFRSQU5TTkFNU0laKTsKKworCWRvd25fd3JpdGUoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9hZGRfdGFpbCgmdHJhbnMtPnRfaXRlbSwgJnJkc190cmFuc3BvcnRzKTsKKwlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIFJEUy8lcyB0cmFuc3BvcnRcbiIsIHRyYW5zLT50X25hbWUpOworCisJdXBfd3JpdGUoJnJkc190cmFuc19zZW0pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX3RyYW5zX3VucmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCWRvd25fd3JpdGUoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9kZWxfaW5pdCgmdHJhbnMtPnRfaXRlbSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVW5yZWdpc3RlcmVkIFJEUy8lcyB0cmFuc3BvcnRcbiIsIHRyYW5zLT50X25hbWUpOworCisJdXBfd3JpdGUoJnJkc190cmFuc19zZW0pOworfQorCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqcmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoX19iZTMyIGFkZHIpCit7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICpyZXQgPSBOVUxMOworCisJaWYgKElOX0xPT1BCQUNLKG50b2hsKGFkZHIpKSkKKwkJcmV0dXJuICZyZHNfbG9vcF90cmFuc3BvcnQ7CisKKwlkb3duX3JlYWQoJnJkc190cmFuc19zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZyZHNfdHJhbnNwb3J0cywgdF9pdGVtKSB7CisJCWlmICh0cmFucy0+bGFkZHJfY2hlY2soYWRkcikgPT0gMCkgeworCQkJcmV0ID0gdHJhbnM7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiBzdGF0cyBlbnRyaWVzIGluIHRoZSBzbmFwc2hvdCBhbmQgb25seQorICogY29waWVzIHRoZW0gdXNpbmcgdGhlIGl0ZXIgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGVtLiAgVGhlCisgKiBjYWxsZXIgcGFzc2VzIGluIHRoZSBnbG9iYWwgc3RhdHMgc28gdGhhdCB3ZSBjYW4gc2l6ZSBhbmQgY29weSB3aGlsZQorICogaG9sZGluZyB0aGUgbG9jay4KKyAqLwordW5zaWduZWQgaW50IHJkc190cmFuc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYXZhaWwpCisKK3sKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKwl1bnNpZ25lZCBpbnQgcGFydDsKKworCXJkc19pbmZvX2l0ZXJfdW5tYXAoaXRlcik7CisJZG93bl9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZyZHNfdHJhbnNwb3J0cywgdF9pdGVtKSB7CisJCWlmICh0cmFucy0+c3RhdHNfaW5mb19jb3B5ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlwYXJ0ID0gdHJhbnMtPnN0YXRzX2luZm9fY29weShpdGVyLCBhdmFpbCk7CisJCWF2YWlsIC09IG1pbihhdmFpbCwgcGFydCk7CisJCXRvdGFsICs9IHBhcnQ7CisJfQorCisJdXBfcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisKKwlyZXR1cm4gdG90YWw7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9yb3NlL2FmX3Jvc2UuYyBiL25ldC9yb3NlL2FmX3Jvc2UuYwppbmRleCAwMTM5MjY0Li42NTAxMzk2IDEwMDY0NAotLS0gYS9uZXQvcm9zZS9hZl9yb3NlLmMKKysrIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCkBAIC0xNTg3LDggKzE1ODcsNyBAQAogCQljaGFyIG5hbWVbSUZOQU1TSVpdOwogCiAJCXNwcmludGYobmFtZSwgInJvc2UlZCIsIGkpOwotCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSwKLQkJCQkgICBuYW1lLCByb3NlX3NldHVwKTsKKwkJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsIG5hbWUsIHJvc2Vfc2V0dXApOwogCQlpZiAoIWRldikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJST1NFOiByb3NlX3Byb3RvX2luaXQgLSB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKIAkJCXJjID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2VfZGV2LmMgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCmluZGV4IDEyY2ZjZjAuLjdkY2YyNTYgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2VfZGV2LmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwpAQCAtNTcsNyArNTcsNyBAQAogewogI2lmZGVmIENPTkZJR19JTkVUCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+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+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCA3ZTE1MTg2Li45MTI3MzEyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCWludCBpOwogCiAJaWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKHFkaXNjX2RldihzY2gpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAobmxhX2xlbihvcHQpIDwgc2l6ZW9mKCpxb3B0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IGEyZjkzYzAuLmUyMmRmZTg1ZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YmYuYworKysgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCkBAIC0yMzYsNyArMjM2LDYgQEAKIAlzdHJ1Y3QgdGNfdGJmX3FvcHQgKnFvcHQ7CiAJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnJ0YWIgPSBOVUxMOwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpwdGFiID0gTlVMTDsKLQlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdG1wOwogCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBOVUxMOwogCWludCBtYXhfc2l6ZSxuOwogCkBAIC0yOTUsMTMgKzI5NCw5IEBACiAJcS0+dG9rZW5zID0gcS0+YnVmZmVyOwogCXEtPnB0b2tlbnMgPSBxLT5tdHU7CiAKLQl0bXAgPSBxLT5SX3RhYjsKLQlxLT5SX3RhYiA9IHJ0YWI7Ci0JcnRhYiA9IHRtcDsKKwlzd2FwKHEtPlJfdGFiLCBydGFiKTsKKwlzd2FwKHEtPlBfdGFiLCBwdGFiKTsKIAotCXRtcCA9IHEtPlBfdGFiOwotCXEtPlBfdGFiID0gcHRhYjsKLQlwdGFiID0gdG1wOwogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCWVyciA9IDA7CiBkb25lOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvZGVidWcuYyBiL25ldC9zY3RwL2RlYnVnLmMKaW5kZXggNjc3MTVmNC4uN2ZmNTQ4YSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZGVidWcuYworKysgYi9uZXQvc2N0cC9kZWJ1Zy5jCkBAIC04Niw2ICs4Niw5IEBACiAJY2FzZSBTQ1RQX0NJRF9GV0RfVFNOOgogCQlyZXR1cm4gIkZXRF9UU04iOwogCisJY2FzZSBTQ1RQX0NJRF9BVVRIOgorCQlyZXR1cm4gIkFVVEgiOworCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTM1LDYgKzEzOCw3IEBACiAJIlBSSU1JVElWRV9BQk9SVCIsCiAJIlBSSU1JVElWRV9TRU5EIiwKIAkiUFJJTUlUSVZFX1JFUVVFU1RIRUFSVEJFQVQiLAorCSJQUklNSVRJVkVfQVNDT05GIiwKIH07CiAKIC8qIExvb2t1cCBwcmltaXRpdmUgZGVidWcgbmFtZS4gKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDJlNGE4NjQuLmQyZTk4ODAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtODMsMTQgKzgzLDE1IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKmxpc3QgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2ggPSBzY3RwX2hkcihza2IpOwotCV9fYmUzMiBjbXAgPSBzaC0+Y2hlY2tzdW07Ci0JX19iZTMyIHZhbCA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgc2tiX2hlYWRsZW4oc2tiKSk7CisJX19sZTMyIGNtcCA9IHNoLT5jaGVja3N1bTsKKwlfX2xlMzIgdmFsOworCV9fdTMyIHRtcCA9IHNjdHBfc3RhcnRfY2tzdW0oKF9fdTggKilzaCwgc2tiX2hlYWRsZW4oc2tiKSk7CiAKIAlmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCi0JCXZhbCA9IHNjdHBfdXBkYXRlX2Nrc3VtKChfX3U4ICopbGlzdC0+ZGF0YSwgc2tiX2hlYWRsZW4obGlzdCksCi0JCQkJCXZhbCk7CisJCXRtcCA9IHNjdHBfdXBkYXRlX2Nrc3VtKChfX3U4ICopbGlzdC0+ZGF0YSwgc2tiX2hlYWRsZW4obGlzdCksCisJCQkJCXRtcCk7CiAKLQl2YWwgPSBzY3RwX2VuZF9ja3N1bSh2YWwpOworCXZhbCA9IHNjdHBfZW5kX2Nrc3VtKHRtcCk7CiAKIAlpZiAodmFsICE9IGNtcCkgewogCQkvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi8KQEAgLTE0Miw3ICsxNDMsOCBAQAogCV9fc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpKTsKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKQogCQlnb3RvIGRpc2NhcmRfaXQ7Ci0JaWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICYmIHNjdHBfcmN2X2NoZWNrc3VtKHNrYikgPCAwKQorCWlmICghc2N0cF9jaGVja3N1bV9kaXNhYmxlICYmICFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpICYmCisJCSAgc2N0cF9yY3ZfY2hlY2tzdW0oc2tiKSA8IDApCiAJCWdvdG8gZGlzY2FyZF9pdDsKIAogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggY2VhYTRhYS4uYTYzZGUzZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtOTcsOCArOTcsNyBAQAogCQlpZiAoYWRkcikgewogCQkJYWRkci0+YS52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwogCQkJYWRkci0+YS52Ni5zaW42X3BvcnQgPSAwOwotCQkJbWVtY3B5KCZhZGRyLT5hLnY2LnNpbjZfYWRkciwgJmlmYS0+YWRkciwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQkJaXB2Nl9hZGRyX2NvcHkoJmFkZHItPmEudjYuc2luNl9hZGRyLCAmaWZhLT5hZGRyKTsKIAkJCWFkZHItPmEudjYuc2luNl9zY29wZV9pZCA9IGlmYS0+aWRldi0+ZGV2LT5pZmluZGV4OwogCQkJYWRkci0+dmFsaWQgPSAxOwogCQkJc3Bpbl9sb2NrX2JoKCZzY3RwX2xvY2FsX2FkZHJfbG9jayk7CkBAIC02MjgsOSArNjI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF92Nl9jcmVhdGVfYWNjZXB0X3NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IHNvY2sgKm5ld3NrOwotCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5ld25wLCAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHNjdHA2X3NvY2sgKm5ld3NjdHA2c2s7CiAKQEAgLTY0MCwxNyArNjM3LDcgQEAKIAogCXNvY2tfaW5pdF9kYXRhKE5VTEwsIG5ld3NrKTsKIAotCW5ld3NrLT5za190eXBlID0gU09DS19TVFJFQU07Ci0KLQluZXdzay0+c2tfcHJvdCA9IHNrLT5za19wcm90OwotCW5ld3NrLT5za19ub19jaGVjayA9IHNrLT5za19ub19jaGVjazsKLQluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7Ci0KLQluZXdzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0JbmV3c2stPnNrX2ZhbWlseSA9IFBGX0lORVQ2OwotCW5ld3NrLT5za19wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKLQluZXdzay0+c2tfYmFja2xvZ19yY3YgPSBzay0+c2tfcHJvdC0+YmFja2xvZ19yY3Y7Ci0JbmV3c2stPnNrX3NodXRkb3duID0gc2stPnNrX3NodXRkb3duOworCXNjdHBfY29weV9zb2NrKG5ld3NrLCBzaywgYXNvYyk7CiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAKIAluZXdzY3RwNnNrID0gKHN0cnVjdCBzY3RwNl9zb2NrICopbmV3c2s7CkBAIC02NTgsNyArNjQ1LDYgQEAKIAogCXNjdHBfc2sobmV3c2spLT52NG1hcHBlZCA9IHNjdHBfc2soc2spLT52NG1hcHBlZDsKIAotCW5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKIAluZXducCA9IGluZXQ2X3NrKG5ld3NrKTsKIAogCW1lbWNweShuZXducCwgbnAsIHNpemVvZihzdHJ1Y3QgaXB2Nl9waW5mbykpOwpAQCAtNjY2LDI2ICs2NTIsOCBAQAogCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yIGdldHNvY2tuYW1lKCkKIAkgKiBhbmQgZ2V0cGVlcm5hbWUoKS4KIAkgKi8KLQluZXdpbmV0LT5zcG9ydCA9IGluZXQtPnNwb3J0OwotCW5ld25wLT5zYWRkciA9IG5wLT5zYWRkcjsKLQluZXducC0+cmN2X3NhZGRyID0gbnAtPnJjdl9zYWRkcjsKLQluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CiAJc2N0cF92Nl90b19za19kYWRkcigmYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIsIG5ld3NrKTsKIAotCS8qIEluaXQgdGhlIGlwdjQgcGFydCBvZiB0aGUgc29ja2V0IHNpbmNlIHdlIGNhbiBoYXZlIHNvY2tldHMKLQkgKiB1c2luZyB2NiBBUEkgZm9yIGlwdjQuCi0JICovCi0JbmV3aW5ldC0+dWNfdHRsID0gLTE7Ci0JbmV3aW5ldC0+bWNfbG9vcCA9IDE7Ci0JbmV3aW5ldC0+bWNfdHRsID0gMTsKLQluZXdpbmV0LT5tY19pbmRleCA9IDA7Ci0JbmV3aW5ldC0+bWNfbGlzdCA9IE5VTEw7Ci0KLQlpZiAoaXB2NF9jb25maWcubm9fcG10dV9kaXNjKQotCQluZXdpbmV0LT5wbXR1ZGlzYyA9IElQX1BNVFVESVNDX0RPTlQ7Ci0JZWxzZQotCQluZXdpbmV0LT5wbXR1ZGlzYyA9IElQX1BNVFVESVNDX1dBTlQ7Ci0KIAlza19yZWZjbnRfZGVidWdfaW5jKG5ld3NrKTsKIAogCWlmIChuZXdzay0+c2tfcHJvdC0+aW5pdChuZXdzaykpIHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggNzM2MzkzNS4uN2QwOGY1MiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTQ5LDEzICs0OSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCi0jaWZuZGVmIFRFU1RfRlJBTUUKLSNpbmNsdWRlIDxuZXQvdGNwLmg+Ci0jZW5kaWYgLyogVEVTVF9GUkFNRSAobm90IGRlZmluZWQpICovCi0KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gLyogZm9yIHNhX2ZhbWlseV90ICovCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIApAQCAtMzY3LDcgKzM2NCw2IEBACiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cCA9IHBhY2tldC0+dHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdHAtPmFzb2M7CiAJc3RydWN0IHNjdHBoZHIgKnNoOwotCV9fYmUzMiBjcmMzMiA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMCk7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCAqdG1wOwogCXN0cnVjdCBzb2NrICpzazsKQEAgLTUzMSwxNyArNTI3LDE2IEBACiAJICogTm90ZTogQWRsZXItMzIgaXMgbm8gbG9uZ2VyIGFwcGxpY2FibGUsIGFzIGhhcyBiZWVuIHJlcGxhY2VkCiAJICogYnkgQ1JDMzItQyBhcyBkZXNjcmliZWQgaW4gPGRyYWZ0LWlldGYtdHN2d2ctc2N0cGNzdW0tMDIudHh0Pi4KIAkgKi8KLQlpZiAoIShkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKSB7Ci0JCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBja3N1bV9idWZfbGVuKTsKLQkJY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CisJaWYgKCFzY3RwX2NoZWNrc3VtX2Rpc2FibGUgJiYgIShkc3QtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKSB7CisJCV9fdTMyIGNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBja3N1bV9idWZfbGVuKTsKKworCQkvKiAzKSBQdXQgdGhlIHJlc3VsdGFudCB2YWx1ZSBpbnRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUKKwkJICogICAgY29tbW9uIGhlYWRlciwgYW5kIGxlYXZlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVuY2hhbmdlZC4KKwkJICovCisJCXNoLT5jaGVja3N1bSA9IHNjdHBfZW5kX2Nrc3VtKGNyYzMyKTsKIAl9IGVsc2UKIAkJbnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQkvKiAzKSBQdXQgdGhlIHJlc3VsdGFudCB2YWx1ZSBpbnRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUKLQkgKiAgICBjb21tb24gaGVhZGVyLCBhbmQgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgdW5jaGFuZ2VkLgotCSAqLwotCXNoLT5jaGVja3N1bSA9IGNyYzMyOwotCiAJLyogSVAgbGF5ZXIgRUNOIHN1cHBvcnQKIAkgKiBGcm9tIFJGQyAyNDgxCiAJICogICJUaGUgRUNOLUNhcGFibGUgVHJhbnNwb3J0IChFQ1QpIGJpdCB3b3VsZCBiZSBzZXQgYnkgdGhlCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCBiYzQxMWM4Li5kNzY1ZmM1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTQyOCw3ICs0MjgsOCBAQAogCQkJICogcmV0cmFuc21pdHRpbmcgZHVlIHRvIFQzIHRpbWVvdXQuCiAJCQkgKi8KIAkJCWlmIChyZWFzb24gPT0gU0NUUF9SVFhSX1QzX1JUWCAmJgotCQkJICAgIChqaWZmaWVzIC0gY2h1bmstPnNlbnRfYXQpIDwgdHJhbnNwb3J0LT5sYXN0X3J0bykKKwkJCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBjaHVuay0+c2VudF9hdCArCisJCQkJCQkgdHJhbnNwb3J0LT5sYXN0X3J0bykpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIFJGQyAyOTYwIDYuMi4xIFByb2Nlc3NpbmcgYSBSZWNlaXZlZCBTQUNLCkBAIC0xNzU3LDYgKzE3NTgsOSBAQAogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsY2h1bmssICp0ZW1wOwogCisJaWYgKCFhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQorCQlyZXR1cm47CisKIAkvKiBQUi1TQ1RQIEMxKSBMZXQgU2Fja0N1bUFjayBiZSB0aGUgQ3VtdWxhdGl2ZSBUU04gQUNLIGNhcnJpZWQgaW4gdGhlCiAJICogcmVjZWl2ZWQgU0FDSy4KIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggYzQ5ODZkMC4uY2IxOThhZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC01ODksNDYgKzU4OSwyMSBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX3Y0X2NyZWF0ZV9hY2NlcHRfc2soc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2FsbG9jKHNvY2tfbmV0KHNrKSwgUEZfSU5FVCwgR0ZQX0tFUk5FTCwKIAkJCXNrLT5za19wcm90KTsKKwlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCiAJaWYgKCFuZXdzaykKIAkJZ290byBvdXQ7CiAKIAlzb2NrX2luaXRfZGF0YShOVUxMLCBuZXdzayk7CiAKLQluZXdzay0+c2tfdHlwZSA9IFNPQ0tfU1RSRUFNOwotCi0JbmV3c2stPnNrX25vX2NoZWNrID0gc2stPnNrX25vX2NoZWNrOwotCW5ld3NrLT5za19yZXVzZSA9IHNrLT5za19yZXVzZTsKLQluZXdzay0+c2tfc2h1dGRvd24gPSBzay0+c2tfc2h1dGRvd247Ci0KLQluZXdzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0JbmV3c2stPnNrX2ZhbWlseSA9IFBGX0lORVQ7Ci0JbmV3c2stPnNrX3Byb3RvY29sID0gSVBQUk9UT19TQ1RQOwotCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IHNrLT5za19wcm90LT5iYWNrbG9nX3JjdjsKKwlzY3RwX2NvcHlfc29jayhuZXdzaywgc2ssIGFzb2MpOwogCXNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpOwogCiAJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOwogCi0JLyogSW5pdGlhbGl6ZSBzaydzIHNwb3J0LCBkcG9ydCwgcmN2X3NhZGRyIGFuZCBkYWRkciBmb3IKLQkgKiBnZXRzb2NrbmFtZSgpIGFuZCBnZXRwZWVybmFtZSgpCi0JICovCi0JbmV3aW5ldC0+c3BvcnQgPSBpbmV0LT5zcG9ydDsKLQluZXdpbmV0LT5zYWRkciA9IGluZXQtPnNhZGRyOwotCW5ld2luZXQtPnJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKLQluZXdpbmV0LT5kcG9ydCA9IGh0b25zKGFzb2MtPnBlZXIucG9ydCk7CiAJbmV3aW5ldC0+ZGFkZHIgPSBhc29jLT5wZWVyLnByaW1hcnlfYWRkci52NC5zaW5fYWRkci5zX2FkZHI7Ci0JbmV3aW5ldC0+cG10dWRpc2MgPSBpbmV0LT5wbXR1ZGlzYzsKLQluZXdpbmV0LT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKLQotCW5ld2luZXQtPnVjX3R0bCA9IC0xOwotCW5ld2luZXQtPm1jX2xvb3AgPSAxOwotCW5ld2luZXQtPm1jX3R0bCA9IDE7Ci0JbmV3aW5ldC0+bWNfaW5kZXggPSAwOwotCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOwogCiAJc2tfcmVmY250X2RlYnVnX2luYyhuZXdzayk7CiAKQEAgLTE0MTMsNCArMTM4OCw2IEBACiBNT0RVTEVfQUxJQVMoIm5ldC1wZi0iIF9fc3RyaW5naWZ5KFBGX0lORVQ2KSAiLXByb3RvLTEzMiIpOwogTU9EVUxFX0FVVEhPUigiTGludXggS2VybmVsIFNDVFAgZGV2ZWxvcGVycyA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciB0aGUgU0NUUCBwcm90b2NvbCAoUkZDMjk2MCkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChub19jaGVja3N1bXMsIHNjdHBfY2hlY2tzdW1fZGlzYWJsZSwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vX2NoZWNrc3VtcywgIkRpc2FibGUgY2hlY2tzdW1zIGNvbXB1dGluZyBhbmQgdmVyaWZpY2F0aW9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggZmQ4YWNiNC4uNjg1MWVlOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTAwLDExICsxMDAsMTEgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzY3RwX3BhcmFtaGRyIGVjYXBfcGFyYW0gPSB7CiAJU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRSwKLQlfX2NvbnN0YW50X2h0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpLAorCWNwdV90b19iZTE2KHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwcnNjdHBfcGFyYW0gPSB7CiAJU0NUUF9QQVJBTV9GV0RfVFNOX1NVUFBPUlQsCi0JX19jb25zdGFudF9odG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKKwljcHVfdG9fYmUxNihzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwKIH07CiAKIC8qIEEgaGVscGVyIHRvIGluaXRpYWxpemUgdG8gaW5pdGlhbGl6ZSBhbiBvcCBlcnJvciBpbnNpZGUgYQpAQCAtMjI0LDcgKzIyNCw5IEBACiAJCW51bV9leHQgKz0gMjsKIAl9CiAKLQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCWlmIChzcC0+YWRhcHRhdGlvbl9pbmQpCisJCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisKIAljaHVua3NpemUgKz0gdnBhcmFtX2xlbjsKIAogCS8qIEFjY291bnQgZm9yIEFVVEggcmVsYXRlZCBwYXJhbWV0ZXJzICovCkBAIC0zMDQsMTAgKzMwNiwxMiBAQAogCWlmIChzY3RwX3Byc2N0cF9lbmFibGUpCiAJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YocHJzY3RwX3BhcmFtKSwgJnByc2N0cF9wYXJhbSk7CiAKLQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKLQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOwotCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzcC0+YWRhcHRhdGlvbl9pbmQpOwotCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKSB7CisJCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOworCQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOworCQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKKwkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCX0KIAogCS8qIEFkZCBTQ1RQLUFVVEggY2h1bmtzIHRvIHRoZSBwYXJhbWV0ZXIgbGlzdCAqLwogCWlmIChzY3RwX2F1dGhfZW5hYmxlKSB7CkBAIC0zMzIsNiArMzM2LDcgQEAKIAlzY3RwX2luaXRoZHJfdCBpbml0YWNrOwogCXN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWw7CiAJdW5pb24gc2N0cF9wYXJhbXMgYWRkcnM7CisJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJaW50IGFkZHJzX2xlbjsKIAlzY3RwX2Nvb2tpZV9wYXJhbV90ICpjb29raWU7CiAJaW50IGNvb2tpZV9sZW47CkBAIC0zNjYsMjIgKzM3MSwyNCBAQAogCS8qIENhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGxvY2F0aW9uLCBpbmNsdWRlIHRoZSByZXNlcnZlZAogCSAqIHNwYWNlIGZvciByZXBvcnRpbmcgdW5rbm93biBwYXJhbWV0ZXJzIGlmIGl0IGlzIHNwZWNpZmllZC4KIAkgKi8KKwlzcCA9IHNjdHBfc2soYXNvYy0+YmFzZS5zayk7CiAJY2h1bmtzaXplID0gc2l6ZW9mKGluaXRhY2spICsgYWRkcnNfbGVuICsgY29va2llX2xlbiArIHVua3BhcmFtX2xlbjsKIAogCS8qIFRlbGwgcGVlciB0aGF0IHdlJ2xsIGRvIEVDTiBvbmx5IGlmIHBlZXIgYWR2ZXJ0aXNlZCBzdWNoIGNhcC4gICovCiAJaWYgKGFzb2MtPnBlZXIuZWNuX2NhcGFibGUpCiAJCWNodW5rc2l6ZSArPSBzaXplb2YoZWNhcF9wYXJhbSk7CiAKLQlpZiAoc2N0cF9wcnNjdHBfZW5hYmxlKQorCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQljaHVua3NpemUgKz0gc2l6ZW9mKHByc2N0cF9wYXJhbSk7CiAKLQlpZiAoc2N0cF9hZGRpcF9lbmFibGUpIHsKKwlpZiAoYXNvYy0+cGVlci5hc2NvbmZfY2FwYWJsZSkgewogCQlleHRlbnNpb25zW251bV9leHRdID0gU0NUUF9DSURfQVNDT05GOwogCQlleHRlbnNpb25zW251bV9leHQrMV0gPSBTQ1RQX0NJRF9BU0NPTkZfQUNLOwogCQludW1fZXh0ICs9IDI7CiAJfQogCi0JY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKQorCQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOwogCiAJaWYgKGFzb2MtPnBlZXIuYXV0aF9jYXBhYmxlKSB7CiAJCWF1dGhfcmFuZG9tID0gKHNjdHBfcGFyYW1oZHJfdCAqKWFzb2MtPmMuYXV0aF9yYW5kb207CkBAIC00MzIsMTAgKzQzOSwxMiBAQAogCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7Ci0JYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc2N0cF9zayhhc29jLT5iYXNlLnNrKS0+YWRhcHRhdGlvbl9pbmQpOwotCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKKwlpZiAoc3AtPmFkYXB0YXRpb25faW5kKSB7CisJCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOworCQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOworCQlhaXBhcmFtLmFkYXB0YXRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0YXRpb25faW5kKTsKKwkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCX0KIAogCWlmIChhc29jLT5wZWVyLmF1dGhfY2FwYWJsZSkgewogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgbnRvaHMoYXV0aF9yYW5kb20tPmxlbmd0aCksCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggYjU0OTVhZS4uZTIwMjBlYiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNDM0LDcgKzQzNCw4IEBACiAgKgogICovCiBzdGF0aWMgdm9pZCBzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCisJCQkJCSBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkJIGludCBpc19oYikKIHsKIAkvKiBUaGUgY2hlY2sgZm9yIGFzc29jaWF0aW9uJ3Mgb3ZlcmFsbCBlcnJvciBjb3VudGVyIGV4Y2VlZGluZyB0aGUKIAkgKiB0aHJlc2hvbGQgaXMgZG9uZSBpbiB0aGUgc3RhdGUgZnVuY3Rpb24uCkBAIC00NjEsOSArNDYyLDE1IEBACiAJICogZXhwaXJlcywgc2V0IFJUTyA8LSBSVE8gKiAyICgiYmFjayBvZmYgdGhlIHRpbWVyIikuICBUaGUKIAkgKiBtYXhpbXVtIHZhbHVlIGRpc2N1c3NlZCBpbiBydWxlIEM3IGFib3ZlIChSVE8ubWF4KSBtYXkgYmUKIAkgKiB1c2VkIHRvIHByb3ZpZGUgYW4gdXBwZXIgYm91bmQgdG8gdGhpcyBkb3VibGluZyBvcGVyYXRpb24uCisJICoKKwkgKiBTcGVjaWFsIENhc2U6ICB0aGUgZmlyc3QgSEIgZG9lc24ndCB0cmlnZ2VyIGV4cG9uZW50aWFsIGJhY2tvZmYuCisJICogVGhlIGZpcnN0IHVuYWNrbm93bGVnZWQgSEIgdHJpZ2dlcnMgaXQuICBXZSBkbyB0aGlzIHdpdGggYSBmbGFnCisJICogdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGFuIG91dHN0YW5kaW5nIEhCLgogCSAqLwotCXRyYW5zcG9ydC0+bGFzdF9ydG8gPSB0cmFuc3BvcnQtPnJ0bzsKLQl0cmFuc3BvcnQtPnJ0byA9IG1pbigodHJhbnNwb3J0LT5ydG8gKiAyKSwgdHJhbnNwb3J0LT5hc29jLT5ydG9fbWF4KTsKKwlpZiAoIWlzX2hiIHx8IHRyYW5zcG9ydC0+aGJfc2VudCkgeworCQl0cmFuc3BvcnQtPmxhc3RfcnRvID0gdHJhbnNwb3J0LT5ydG87CisJCXRyYW5zcG9ydC0+cnRvID0gbWluKCh0cmFuc3BvcnQtPnJ0byAqIDIpLCB0cmFuc3BvcnQtPmFzb2MtPnJ0b19tYXgpOworCX0KIH0KIAogLyogV29ya2VyIHJvdXRpbmUgdG8gaGFuZGxlIElOSVQgY29tbWFuZCBmYWlsdXJlLiAgKi8KQEAgLTYyMSw2ICs2MjgsMTEgQEAKIAl0LT5lcnJvcl9jb3VudCA9IDA7CiAJdC0+YXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7CiAKKwkvKiBDbGVhciB0aGUgaGJfc2VudCBmbGFnIHRvIHNpZ25hbCB0aGF0IHdlIGhhZCBhIGdvb2QKKwkgKiBhY2tub3dsZWRnZW1lbnQuCisJICovCisJdC0+aGJfc2VudCA9IDA7CisKIAkvKiBNYXJrIHRoZSBkZXN0aW5hdGlvbiB0cmFuc3BvcnQgYWRkcmVzcyBhcyBhY3RpdmUgaWYgaXQgaXMgbm90IHNvCiAJICogbWFya2VkLgogCSAqLwpAQCAtNjQ2LDE4ICs2NTgsNiBAQAogCQlzY3RwX3RyYW5zcG9ydF9ob2xkKHQpOwogfQogCi0vKiBIZWxwZXIgZnVuY3Rpb24gdG8gZG8gYSB0cmFuc3BvcnQgcmVzZXQgYXQgdGhlIGV4cGlyeSBvZiB0aGUgaGVhcmJlYXQKLSAqIHRpbWVyLgotICovCi1zdGF0aWMgdm9pZCBzY3RwX2NtZF90cmFuc3BvcnRfcmVzZXQoc2N0cF9jbWRfc2VxX3QgKmNtZHMsCi0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkgICAgIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCkKLXsKLQlzY3RwX3RyYW5zcG9ydF9sb3dlcl9jd25kKHQsIFNDVFBfTE9XRVJfQ1dORF9JTkFDVElWRSk7Ci0KLQkvKiBNYXJrIG9uZSBzdHJpa2UgYWdhaW5zdCBhIHRyYW5zcG9ydC4gICovCi0Jc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCB0KTsKLX0KIAogLyogSGVscGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHByb2Nlc3MgU0FDSyBjb21tYW5kLiAgKi8KIHN0YXRpYyBpbnQgc2N0cF9jbWRfcHJvY2Vzc19zYWNrKHNjdHBfY21kX3NlcV90ICpjbWRzLApAQCAtMTQ1OCwxMiArMTQ1OCwxOSBAQAogCiAJCWNhc2UgU0NUUF9DTURfU1RSSUtFOgogCQkJLyogTWFyayBvbmUgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLwotCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCBjbWQtPm9iai50cmFuc3BvcnQpOworCQkJc2N0cF9kb184XzJfdHJhbnNwb3J0X3N0cmlrZShhc29jLCBjbWQtPm9iai50cmFuc3BvcnQsCisJCQkJCQkgICAgMCk7CiAJCQlicmVhazsKIAotCQljYXNlIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVDoKKwkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRToKIAkJCXQgPSBjbWQtPm9iai50cmFuc3BvcnQ7Ci0JCQlzY3RwX2NtZF90cmFuc3BvcnRfcmVzZXQoY29tbWFuZHMsIGFzb2MsIHQpOworCQkJc2N0cF90cmFuc3BvcnRfbG93ZXJfY3duZCh0LCBTQ1RQX0xPV0VSX0NXTkRfSU5BQ1RJVkUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVDoKKwkJCXQgPSBjbWQtPm9iai50cmFuc3BvcnQ7CisJCQlzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKGFzb2MsIHQsIDEpOworCQkJdC0+aGJfc2VudCA9IDE7CiAJCQlicmVhazsKIAogCQljYXNlIFNDVFBfQ01EX1RSQU5TUE9SVF9PTjoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggZjg4ZGZkZS4uNTVhNjFhYSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTk4OCw3ICs5ODgsOSBAQAogCQkvKiBTZXQgdHJhbnNwb3J0IGVycm9yIGNvdW50ZXIgYW5kIGFzc29jaWF0aW9uIGVycm9yIGNvdW50ZXIKIAkJICogd2hlbiBzZW5kaW5nIGhlYXJ0YmVhdC4KIAkJICovCi0JCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULAorCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9JRExFLAorCQkJCVNDVFBfVFJBTlNQT1JUKHRyYW5zcG9ydCkpOworCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5ULAogCQkJCVNDVFBfVFJBTlNQT1JUKHRyYW5zcG9ydCkpOwogCX0KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0hCX1RJTUVSX1VQREFURSwKQEAgLTQ5NTUsNyArNDk1Nyw3IEBACiAJICogICAgdG8gdGhhdCBhZGRyZXNzIGFuZCBub3QgYWNrbm93bGVkZ2VkIHdpdGhpbiBvbmUgUlRPLgogCSAqCiAJICovCi0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfSEJfU0VOVCwKIAkJCVNDVFBfVFJBTlNQT1JUKGFyZykpOwogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IGZmMGE4ZjguLjVmYjNhOGMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0zMDY5LDkgKzMwNjksNiBAQAogCWludCB2YWw7CiAJaW50IGFzc29jX2lkID0gMDsKIAotCWlmIChvcHRsZW4gPCBzaXplb2YoaW50KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAob3B0bGVuID09IHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBvZiBpbnQgaW4gbWF4X2J1cnN0IHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CkBAIC0zOTM5LDcgKzM5MzYsNiBAQAogewogCXN0cnVjdCBzb2NrICpzayA9IGFzb2MtPmJhc2Uuc2s7CiAJc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0c2s7CiAJc3RydWN0IHNjdHBfYWYgKmFmOwogCWludCBlcnIgPSAwOwogCkBAIC0zOTU0LDE4ICszOTUwLDE4IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUKLQkgKiBhc29jIHRvIHRoZSBuZXdzay4KLQkgKi8KLQlzY3RwX3NvY2tfbWlncmF0ZShzaywgc29jay0+c2ssIGFzb2MsIFNDVFBfU09DS0VUX1VEUF9ISUdIX0JBTkRXSURUSCk7CisJc2N0cF9jb3B5X3NvY2soc29jay0+c2ssIHNrLCBhc29jKTsKIAogCS8qIE1ha2UgcGVlbGVkLW9mZiBzb2NrZXRzIG1vcmUgbGlrZSAxLTEgYWNjZXB0ZWQgc29ja2V0cy4KIAkgKiBTZXQgdGhlIGRhZGRyIGFuZCBpbml0aWFsaXplIGlkIHRvIHNvbWV0aGluZyBtb3JlIHJhbmRvbQogCSAqLwogCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMoYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIuc2Euc2FfZmFtaWx5KTsKIAlhZi0+dG9fc2tfZGFkZHIoJmFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLCBzayk7Ci0JaW5ldHNrID0gaW5ldF9zayhzb2NrLT5zayk7Ci0JaW5ldHNrLT5pZCA9IGFzb2MtPm5leHRfdHNuIF4gamlmZmllczsKKworCS8qIFBvcHVsYXRlIHRoZSBmaWVsZHMgb2YgdGhlIG5ld3NrIGZyb20gdGhlIG9sZHNrIGFuZCBtaWdyYXRlIHRoZQorCSAqIGFzb2MgdG8gdGhlIG5ld3NrLgorCSAqLworCXNjdHBfc29ja19taWdyYXRlKHNrLCBzb2NrLT5zaywgYXNvYywgU0NUUF9TT0NLRVRfVURQX0hJR0hfQkFORFdJRFRIKTsKIAogCSpzb2NrcCA9IHNvY2s7CiAKQEAgLTUyODQsMTYgKzUyODAsMTQgQEAKIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcDsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAotCWlmIChsZW4gPCBzaXplb2YoaW50KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAobGVuID09IHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBvZiBpbnQgaW4gbWF4X2J1cnN0IHNvY2tldCBvcHRpb24gZGVwcmVjYXRlZFxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgIlNDVFA6IFVzZSBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBpbnN0ZWFkXG4iKTsKIAkJcGFyYW1zLmFzc29jX2lkID0gMDsKLQl9IGVsc2UgaWYgKGxlbiA9PSBzaXplb2YgKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgeworCX0gZWxzZSBpZiAobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIHsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0gZWxzZQpAQCAtNTg0OSwxMjcgKzU4NDMsMTMgQEAKIH0KIAogLyoKLSAqIDMuMS4zIGxpc3RlbigpIC0gVURQIFN0eWxlIFN5bnRheAotICoKLSAqICAgQnkgZGVmYXVsdCwgbmV3IGFzc29jaWF0aW9ucyBhcmUgbm90IGFjY2VwdGVkIGZvciBVRFAgc3R5bGUgc29ja2V0cy4KLSAqICAgQW4gYXBwbGljYXRpb24gdXNlcyBsaXN0ZW4oKSB0byBtYXJrIGEgc29ja2V0IGFzIGJlaW5nIGFibGUgdG8KLSAqICAgYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuCi0gKi8KLVNDVFBfU1RBVElDIGludCBzY3RwX3NlcXBhY2tldF9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgYmFja2xvZykKLXsKLQlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwotCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNwLT5lcDsKLQotCS8qIE9ubHkgVURQIHN0eWxlIHNvY2tldHMgdGhhdCBhcmUgbm90IHBlZWxlZCBvZmYgYXJlIGFsbG93ZWQgdG8KLQkgKiBsaXN0ZW4oKS4KLQkgKi8KLQlpZiAoIXNjdHBfc3R5bGUoc2ssIFVEUCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogSWYgYmFja2xvZyBpcyB6ZXJvLCBkaXNhYmxlIGxpc3RlbmluZy4gKi8KLQlpZiAoIWJhY2tsb2cpIHsKLQkJaWYgKHNjdHBfc3N0YXRlKHNrLCBDTE9TRUQpKQotCQkJcmV0dXJuIDA7Ci0KLQkJc2N0cF91bmhhc2hfZW5kcG9pbnQoZXApOwotCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogUmV0dXJuIGlmIHdlIGFyZSBhbHJlYWR5IGxpc3RlbmluZy4gKi8KLQlpZiAoc2N0cF9zc3RhdGUoc2ssIExJU1RFTklORykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiBhIGJpbmQoKSBvciBzY3RwX2JpbmR4KCkgaXMgbm90IGNhbGxlZCBwcmlvciB0byBhIGxpc3RlbigpCi0JICogY2FsbCB0aGF0IGFsbG93cyBuZXcgYXNzb2NpYXRpb25zIHRvIGJlIGFjY2VwdGVkLCB0aGUgc3lzdGVtCi0JICogcGlja3MgYW4gZXBoZW1lcmFsIHBvcnQgYW5kIHdpbGwgY2hvb3NlIGFuIGFkZHJlc3Mgc2V0IGVxdWl2YWxlbnQKLQkgKiB0byBiaW5kaW5nIHdpdGggYSB3aWxkY2FyZCBhZGRyZXNzLgotCSAqCi0JICogVGhpcyBpcyBub3QgY3VycmVudGx5IHNwZWxsZWQgb3V0IGluIHRoZSBTQ1RQIHNvY2tldHMKLQkgKiBleHRlbnNpb25zIGRyYWZ0LCBidXQgZm9sbG93cyB0aGUgcHJhY3RpY2UgYXMgc2VlbiBpbiBUQ1AKLQkgKiBzb2NrZXRzLgotCSAqCi0JICogQWRkaXRpb25hbGx5LCB0dXJuIG9mZiBmYXN0cmV1c2UgZmxhZyBzaW5jZSB3ZSBhcmUgbm90IGxpc3RlbmluZwotCSAqLwotCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOwotCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKLQkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JfSBlbHNlIHsKLQkJaWYgKHNjdHBfZ2V0X3BvcnQoc2ssIGluZXRfc2soc2spLT5udW0pKSB7Ci0JCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKLQkJCXJldHVybiAtRUFERFJJTlVTRTsKLQkJfQotCQlzY3RwX3NrKHNrKS0+YmluZF9oYXNoLT5mYXN0cmV1c2UgPSAwOwotCX0KLQotCXNjdHBfaGFzaF9lbmRwb2ludChlcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiA0LjEuMyBsaXN0ZW4oKSAtIFRDUCBTdHlsZSBTeW50YXgKLSAqCi0gKiAgIEFwcGxpY2F0aW9ucyB1c2VzIGxpc3RlbigpIHRvIHJlYWR5IHRoZSBTQ1RQIGVuZHBvaW50IGZvciBhY2NlcHRpbmcKLSAqICAgaW5ib3VuZCBhc3NvY2lhdGlvbnMuCi0gKi8KLVNDVFBfU1RBVElDIGludCBzY3RwX3N0cmVhbV9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgYmFja2xvZykKLXsKLQlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOwotCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNwLT5lcDsKLQotCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCi0JaWYgKCFiYWNrbG9nKSB7Ci0JCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKLQkJCXJldHVybiAwOwotCi0JCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKLQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzY3RwX3NzdGF0ZShzaywgTElTVEVOSU5HKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIGEgYmluZCgpIG9yIHNjdHBfYmluZHgoKSBpcyBub3QgY2FsbGVkIHByaW9yIHRvIGEgbGlzdGVuKCkKLQkgKiBjYWxsIHRoYXQgYWxsb3dzIG5ldyBhc3NvY2lhdGlvbnMgdG8gYmUgYWNjZXB0ZWQsIHRoZSBzeXN0ZW0KLQkgKiBwaWNrcyBhbiBlcGhlbWVyYWwgcG9ydCBhbmQgd2lsbCBjaG9vc2UgYW4gYWRkcmVzcyBzZXQgZXF1aXZhbGVudAotCSAqIHRvIGJpbmRpbmcgd2l0aCBhIHdpbGRjYXJkIGFkZHJlc3MuCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3BlbGxlZCBvdXQgaW4gdGhlIFNDVFAgc29ja2V0cwotCSAqIGV4dGVuc2lvbnMgZHJhZnQsIGJ1dCBmb2xsb3dzIHRoZSBwcmFjdGljZSBhcyBzZWVuIGluIFRDUAotCSAqIHNvY2tldHMuCi0JICovCi0Jc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7Ci0JaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgewotCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQl9IGVsc2UKLQkJc2N0cF9zayhzayktPmJpbmRfaGFzaC0+ZmFzdHJldXNlID0gMDsKLQotCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOwotCXNjdHBfaGFzaF9lbmRwb2ludChlcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiAgTW92ZSBhIHNvY2tldCB0byBMSVNURU5JTkcgc3RhdGUuCiAgKi8KLWludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKQorU0NUUF9TVEFUSUMgaW50IHNjdHBfbGlzdGVuX3N0YXJ0KHN0cnVjdCBzb2NrICpzaywgaW50IGJhY2tsb2cpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKKwlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzcC0+ZXA7CiAJc3RydWN0IGNyeXB0b19oYXNoICp0Zm0gPSBOVUxMOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KGJhY2tsb2cgPCAwKSkKLQkJZ290byBvdXQ7Ci0KLQlzY3RwX2xvY2tfc29jayhzayk7Ci0KLQlpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCi0JCWdvdG8gb3V0OwogCiAJLyogQWxsb2NhdGUgSE1BQyBmb3IgZ2VuZXJhdGluZyBjb29raWUuICovCiAJaWYgKCFzY3RwX3NrKHNrKS0+aG1hYyAmJiBzY3RwX2htYWNfYWxnKSB7CkBAIC01OTgwLDM0ICs1ODYwLDk2IEBACiAJCQkJICAgICAgICJTQ1RQOiBmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsCiAJCQkJCXNjdHBfaG1hY19hbGcsIFBUUl9FUlIodGZtKSk7CiAJCQl9Ci0JCQllcnIgPSAtRU5PU1lTOwotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCQlzY3RwX3NrKHNrKS0+aG1hYyA9IHRmbTsKKwl9CisKKwkvKgorCSAqIElmIGEgYmluZCgpIG9yIHNjdHBfYmluZHgoKSBpcyBub3QgY2FsbGVkIHByaW9yIHRvIGEgbGlzdGVuKCkKKwkgKiBjYWxsIHRoYXQgYWxsb3dzIG5ldyBhc3NvY2lhdGlvbnMgdG8gYmUgYWNjZXB0ZWQsIHRoZSBzeXN0ZW0KKwkgKiBwaWNrcyBhbiBlcGhlbWVyYWwgcG9ydCBhbmQgd2lsbCBjaG9vc2UgYW4gYWRkcmVzcyBzZXQgZXF1aXZhbGVudAorCSAqIHRvIGJpbmRpbmcgd2l0aCBhIHdpbGRjYXJkIGFkZHJlc3MuCisJICoKKwkgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3BlbGxlZCBvdXQgaW4gdGhlIFNDVFAgc29ja2V0cworCSAqIGV4dGVuc2lvbnMgZHJhZnQsIGJ1dCBmb2xsb3dzIHRoZSBwcmFjdGljZSBhcyBzZWVuIGluIFRDUAorCSAqIHNvY2tldHMuCisJICoKKwkgKi8KKwlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKKwlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7CisJCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKKwkJCXJldHVybiAtRUFHQUlOOworCX0gZWxzZSB7CisJCWlmIChzY3RwX2dldF9wb3J0KHNrLCBpbmV0X3NrKHNrKS0+bnVtKSkgeworCQkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7CisJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCX0KIAl9CiAKLQlzd2l0Y2ggKHNvY2stPnR5cGUpIHsKLQljYXNlIFNPQ0tfU0VRUEFDS0VUOgotCQllcnIgPSBzY3RwX3NlcXBhY2tldF9saXN0ZW4oc2ssIGJhY2tsb2cpOwotCQlicmVhazsKLQljYXNlIFNPQ0tfU1RSRUFNOgotCQllcnIgPSBzY3RwX3N0cmVhbV9saXN0ZW4oc2ssIGJhY2tsb2cpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKKwlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKKwlzY3RwX2hhc2hfZW5kcG9pbnQoZXApOworCXJldHVybiAwOworfQorCisvKgorICogNC4xLjMgLyA1LjEuMyBsaXN0ZW4oKQorICoKKyAqICAgQnkgZGVmYXVsdCwgbmV3IGFzc29jaWF0aW9ucyBhcmUgbm90IGFjY2VwdGVkIGZvciBVRFAgc3R5bGUgc29ja2V0cy4KKyAqICAgQW4gYXBwbGljYXRpb24gdXNlcyBsaXN0ZW4oKSB0byBtYXJrIGEgc29ja2V0IGFzIGJlaW5nIGFibGUgdG8KKyAqICAgYWNjZXB0IG5ldyBhc3NvY2lhdGlvbnMuCisgKgorICogICBPbiBUQ1Agc3R5bGUgc29ja2V0cywgYXBwbGljYXRpb25zIHVzZSBsaXN0ZW4oKSB0byByZWFkeSB0aGUgU0NUUAorICogICBlbmRwb2ludCBmb3IgYWNjZXB0aW5nIGluYm91bmQgYXNzb2NpYXRpb25zLgorICoKKyAqICAgT24gYm90aCB0eXBlcyBvZiBlbmRwb2ludHMgYSBiYWNrbG9nIG9mICcwJyBkaXNhYmxlcyBsaXN0ZW5pbmcuCisgKgorICogIE1vdmUgYSBzb2NrZXQgdG8gTElTVEVOSU5HIHN0YXRlLgorICovCitpbnQgc2N0cF9pbmV0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzY3RwX3NrKHNrKS0+ZXA7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoYmFja2xvZyA8IDApKQorCQlyZXR1cm4gZXJyOworCisJc2N0cF9sb2NrX3NvY2soc2spOworCisJLyogUGVlbGVkLW9mZiBzb2NrZXRzIGFyZSBub3QgYWxsb3dlZCB0byBsaXN0ZW4oKS4gICovCisJaWYgKHNjdHBfc3R5bGUoc2ssIFVEUF9ISUdIX0JBTkRXSURUSCkpCisJCWdvdG8gb3V0OworCisJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQorCQlnb3RvIG91dDsKKworCS8qIElmIGJhY2tsb2cgaXMgemVybywgZGlzYWJsZSBsaXN0ZW5pbmcuICovCisJaWYgKCFiYWNrbG9nKSB7CisJCWlmIChzY3RwX3NzdGF0ZShzaywgQ0xPU0VEKSkKKwkJCWdvdG8gb3V0OworCisJCWVyciA9IDA7CisJCXNjdHBfdW5oYXNoX2VuZHBvaW50KGVwKTsKKwkJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TRUQ7CisJCWlmIChzay0+c2tfcmV1c2UpCisJCQlzY3RwX3NrKHNrKS0+YmluZF9oYXNoLT5mYXN0cmV1c2UgPSAxOworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZXJyKQotCQlnb3RvIGNsZWFudXA7CisJLyogSWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nLCBqdXN0IHVwZGF0ZSB0aGUgYmFja2xvZyAqLworCWlmIChzY3RwX3NzdGF0ZShzaywgTElTVEVOSU5HKSkKKwkJc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7CisJZWxzZSB7CisJCWVyciA9IHNjdHBfbGlzdGVuX3N0YXJ0KHNrLCBiYWNrbG9nKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KIAotCS8qIFN0b3JlIGF3YXkgdGhlIHRyYW5zZm9ybSByZWZlcmVuY2UuICovCi0JaWYgKCFzY3RwX3NrKHNrKS0+aG1hYykKLQkJc2N0cF9zayhzayktPmhtYWMgPSB0Zm07CisJZXJyID0gMDsKIG91dDoKIAlzY3RwX3JlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKLWNsZWFudXA6Ci0JY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOwotCWdvdG8gb3V0OwogfQogCiAvKgpAQCAtNjcwMCw2ICs2NjQyLDQ4IEBACiAJc2N0cF9za2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7CiB9CiAKK3ZvaWQgc2N0cF9jb3B5X3NvY2soc3RydWN0IHNvY2sgKm5ld3NrLCBzdHJ1Y3Qgc29jayAqc2ssCisJCSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCisJbmV3c2stPnNrX3R5cGUgPSBzay0+c2tfdHlwZTsKKwluZXdzay0+c2tfYm91bmRfZGV2X2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKKwluZXdzay0+c2tfZmxhZ3MgPSBzay0+c2tfZmxhZ3M7CisJbmV3c2stPnNrX25vX2NoZWNrID0gc2stPnNrX25vX2NoZWNrOworCW5ld3NrLT5za19yZXVzZSA9IHNrLT5za19yZXVzZTsKKworCW5ld3NrLT5za19zaHV0ZG93biA9IHNrLT5za19zaHV0ZG93bjsKKwluZXdzay0+c2tfZGVzdHJ1Y3QgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7CisJbmV3c2stPnNrX2ZhbWlseSA9IHNrLT5za19mYW1pbHk7CisJbmV3c2stPnNrX3Byb3RvY29sID0gSVBQUk9UT19TQ1RQOworCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IHNrLT5za19wcm90LT5iYWNrbG9nX3JjdjsKKwluZXdzay0+c2tfc25kYnVmID0gc2stPnNrX3NuZGJ1ZjsKKwluZXdzay0+c2tfcmN2YnVmID0gc2stPnNrX3JjdmJ1ZjsKKwluZXdzay0+c2tfbGluZ2VydGltZSA9IHNrLT5za19saW5nZXJ0aW1lOworCW5ld3NrLT5za19yY3Z0aW1lbyA9IHNrLT5za19yY3Z0aW1lbzsKKwluZXdzay0+c2tfc25kdGltZW8gPSBzay0+c2tfc25kdGltZW87CisKKwluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CisKKwkvKiBJbml0aWFsaXplIHNrJ3Mgc3BvcnQsIGRwb3J0LCByY3Zfc2FkZHIgYW5kIGRhZGRyIGZvcgorCSAqIGdldHNvY2tuYW1lKCkgYW5kIGdldHBlZXJuYW1lKCkKKwkgKi8KKwluZXdpbmV0LT5zcG9ydCA9IGluZXQtPnNwb3J0OworCW5ld2luZXQtPnNhZGRyID0gaW5ldC0+c2FkZHI7CisJbmV3aW5ldC0+cmN2X3NhZGRyID0gaW5ldC0+cmN2X3NhZGRyOworCW5ld2luZXQtPmRwb3J0ID0gaHRvbnMoYXNvYy0+cGVlci5wb3J0KTsKKwluZXdpbmV0LT5wbXR1ZGlzYyA9IGluZXQtPnBtdHVkaXNjOworCW5ld2luZXQtPmlkID0gYXNvYy0+bmV4dF90c24gXiBqaWZmaWVzOworCisJbmV3aW5ldC0+dWNfdHRsID0gaW5ldC0+dWNfdHRsOworCW5ld2luZXQtPm1jX2xvb3AgPSAxOworCW5ld2luZXQtPm1jX3R0bCA9IDE7CisJbmV3aW5ldC0+bWNfaW5kZXggPSAwOworCW5ld2luZXQtPm1jX2xpc3QgPSBOVUxMOworfQorCiAvKiBQb3B1bGF0ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXdzayBmcm9tIHRoZSBvbGRzayBhbmQgbWlncmF0ZSB0aGUgYXNzb2MKICAqIGFuZCBpdHMgbWVzc2FnZXMgdG8gdGhlIG5ld3NrLgogICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC90cmFuc3BvcnQuYyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCmluZGV4IGU3NDVjMTEuLmU1ZGRlNDUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCkBAIC03OSw2ICs3OSw3IEBACiAJcGVlci0+cnR0dmFyID0gMDsKIAlwZWVyLT5zcnR0ID0gMDsKIAlwZWVyLT5ydG9fcGVuZGluZyA9IDA7CisJcGVlci0+aGJfc2VudCA9IDA7CiAJcGVlci0+ZmFzdF9yZWNvdmVyeSA9IDA7CiAKIAlwZWVyLT5sYXN0X3RpbWVfaGVhcmQgPSBqaWZmaWVzOwpAQCAtNTQyLDggKzU0Myw4IEBACiAJCSAqIGNvbmdlc3Rpb24gaW5kaWNhdGlvbnMgbW9yZSB0aGFuIG9uY2UgZXZlcnkgd2luZG93IG9mCiAJCSAqIGRhdGEgKG9yIG1vcmUgbG9vc2VseSBtb3JlIHRoYW4gb25jZSBldmVyeSByb3VuZC10cmlwIHRpbWUpLgogCQkgKi8KLQkJaWYgKChqaWZmaWVzIC0gdHJhbnNwb3J0LT5sYXN0X3RpbWVfZWNuZV9yZWR1Y2VkKSA+Ci0JCSAgICB0cmFuc3BvcnQtPnJ0dCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0cmFuc3BvcnQtPmxhc3RfdGltZV9lY25lX3JlZHVjZWQgKworCQkJCQl0cmFuc3BvcnQtPnJ0dCkpIHsKIAkJCXRyYW5zcG9ydC0+c3N0aHJlc2ggPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCQkgIDQqdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1KTsKIAkJCXRyYW5zcG9ydC0+Y3duZCA9IHRyYW5zcG9ydC0+c3N0aHJlc2g7CkBAIC01NjAsNyArNTYxLDggQEAKIAkJICogdG8gYmUgZG9uZSBldmVyeSBSVE8gaW50ZXJ2YWwsIHdlIGRvIGl0IGV2ZXJ5IGhlYXJiZWF0CiAJCSAqIGludGVydmFsLgogCQkgKi8KLQkJaWYgKChqaWZmaWVzIC0gdHJhbnNwb3J0LT5sYXN0X3RpbWVfdXNlZCkgPiB0cmFuc3BvcnQtPnJ0bykKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdHJhbnNwb3J0LT5sYXN0X3RpbWVfdXNlZCArCisJCQkJCXRyYW5zcG9ydC0+cnRvKSkKIAkJCXRyYW5zcG9ydC0+Y3duZCA9IG1heCh0cmFuc3BvcnQtPmN3bmQvMiwKIAkJCQkJCSA0KnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSk7CiAJCWJyZWFrOwpAQCAtNjA4LDYgKzYxMCw3IEBACiAJdC0+ZmxpZ2h0X3NpemUgPSAwOwogCXQtPmVycm9yX2NvdW50ID0gMDsKIAl0LT5ydG9fcGVuZGluZyA9IDA7CisJdC0+aGJfc2VudCA9IDA7CiAJdC0+ZmFzdF9yZWNvdmVyeSA9IDA7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgU0ZSLUNBQ0MgKi8KZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAzNWRkNzM3Li5hZjAyMDVmIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC01NDUsNiArNTQ1LDE4IEBACiAJc29jay0+ZmlsZSA9IE5VTEw7CiB9CiAKK2ludCBzb2NrX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKKwkJICAgICAgdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCkKK3sKKwlzaHR4LT5mbGFncyA9IDA7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpKQorCQlzaHR4LT5oYXJkd2FyZSA9IDE7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpKQorCQlzaHR4LT5zb2Z0d2FyZSA9IDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNvY2tfdHhfdGltZXN0YW1wKTsKKwogc3RhdGljIGlubGluZSBpbnQgX19zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCSBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogewpAQCAtNTk1LDMzICs2MDcsNjUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGt0aW1lMnRzKGt0aW1lX3Qga3QsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaWYgKGt0LnR2NjQpIHsKKwkJKnRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKIC8qCiAgKiBjYWxsZWQgZnJvbSBzb2NrX3JlY3ZfdGltZXN0YW1wKCkgaWYgc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkKICAqLwogdm9pZCBfX3NvY2tfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssCiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlrdGltZV90IGt0ID0gc2tiLT50c3RhbXA7CisJaW50IG5lZWRfc29mdHdhcmVfdHN0YW1wID0gc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7CisJc3RydWN0IHRpbWVzcGVjIHRzWzNdOworCWludCBlbXB0eSA9IDE7CisJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpzaGh3dHN0YW1wcyA9CisJCXNrYl9od3RzdGFtcHMoc2tiKTsKIAotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKSkgewotCQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkJLyogUmFjZSBvY2N1cnJlZCBiZXR3ZWVuIHRpbWVzdGFtcCBlbmFibGluZyBhbmQgcGFja2V0Ci0JCSAgIHJlY2VpdmluZy4gIEZpbGwgaW4gdGhlIGN1cnJlbnQgdGltZSBmb3Igbm93LiAqLwotCQlpZiAoa3QudHY2NCA9PSAwKQotCQkJa3QgPSBrdGltZV9nZXRfcmVhbCgpOwotCQlza2ItPnRzdGFtcCA9IGt0OwotCQl0diA9IGt0aW1lX3RvX3RpbWV2YWwoa3QpOwotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVAsIHNpemVvZih0diksICZ0dik7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHRpbWVzcGVjIHRzOwotCQkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKLQkJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCi0JCWlmIChrdC50djY0ID09IDApCi0JCQlrdCA9IGt0aW1lX2dldF9yZWFsKCk7Ci0JCXNrYi0+dHN0YW1wID0ga3Q7Ci0JCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOwotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVBOUywgc2l6ZW9mKHRzKSwgJnRzKTsKKwkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKKwkgICByZWNlaXZpbmcuICBGaWxsIGluIHRoZSBjdXJyZW50IHRpbWUgZm9yIG5vdy4gKi8KKwlpZiAobmVlZF9zb2Z0d2FyZV90c3RhbXAgJiYgc2tiLT50c3RhbXAudHY2NCA9PSAwKQorCQlfX25ldF90aW1lc3RhbXAoc2tiKTsKKworCWlmIChuZWVkX3NvZnR3YXJlX3RzdGFtcCkgeworCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUykpIHsKKwkJCXN0cnVjdCB0aW1ldmFsIHR2OworCQkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOworCQkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fVElNRVNUQU1QLAorCQkJCSBzaXplb2YodHYpLCAmdHYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHRpbWVzcGVjIHRzOworCQkJc2tiX2dldF90aW1lc3RhbXBucyhza2IsICZ0cyk7CisJCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVBOUywKKwkJCQkgc2l6ZW9mKHRzKSwgJnRzKTsKKwkJfQogCX0KKworCisJbWVtc2V0KHRzLCAwLCBzaXplb2YodHMpKTsKKwlpZiAoc2tiLT50c3RhbXAudHY2NCAmJgorCSAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkgeworCQlza2JfZ2V0X3RpbWVzdGFtcG5zKHNrYiwgdHMgKyAwKTsKKwkJZW1wdHkgPSAwOworCX0KKwlpZiAoc2hod3RzdGFtcHMpIHsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSAmJgorCQkgICAga3RpbWUydHMoc2hod3RzdGFtcHMtPnN5c3RzdGFtcCwgdHMgKyAxKSkKKwkJCWVtcHR5ID0gMDsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSAmJgorCQkgICAga3RpbWUydHMoc2hod3RzdGFtcHMtPmh3dHN0YW1wLCB0cyArIDIpKQorCQkJZW1wdHkgPSAwOworCX0KKwlpZiAoIWVtcHR5KQorCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsCisJCQkgU0NNX1RJTUVTVEFNUElORywgc2l6ZW9mKHRzKSwgJnRzKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoX19zb2NrX3JlY3ZfdGltZXN0YW1wKTsKQEAgLTEwMzAsNiArMTA3NCwxMyBAQAogCiAJbG9ja19zb2NrKHNrKTsKIAorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKKwlpZiAob24pCisJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOworCWVsc2UKKwkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOworCiAJcHJldiA9ICYoc29jay0+ZmFzeW5jX2xpc3QpOwogCiAJZm9yIChmYSA9ICpwcmV2OyBmYSAhPSBOVUxMOyBwcmV2ID0gJmZhLT5mYV9uZXh0LCBmYSA9ICpwcmV2KQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDI5YzcxZTYuLjU2ODMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTEyMjUsNiArMTIyNSwyMyBAQAogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIHhzX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKworCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCisJCXJldHVybjsKKwljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpKQorCQlyZXR1cm47CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKKwkJcmV0dXJuOworCisJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKK30KKwogLyoqCiAgKiB4c191ZHBfd3JpdGVfc3BhY2UgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gc29ja2V0IGJ1ZmZlciBzcGFjZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgYXZhaWxhYmxlCkBAIC0xMjQwLDIzICsxMjU3LDkgQEAKIAlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAogCS8qIGZyb20gbmV0L2NvcmUvc29jay5jOnNvY2tfZGVmX3dyaXRlX3NwYWNlICovCi0JaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkgewotCQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCQlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkKKwkJeHNfd3JpdGVfc3BhY2Uoc2spOwogCi0JCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCi0JCQlnb3RvIG91dDsKLQkJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCi0JCQlnb3RvIG91dDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKLQkJCWdvdG8gb3V0OwotCi0JCXhwcnRfd3JpdGVfc3BhY2UoeHBydCk7Ci0JfQotCi0gb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKQEAgLTEyNzUsMjMgKzEyNzgsOSBAQAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCiAJLyogZnJvbSBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UgKi8KLQlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKSB7Ci0JCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKwlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKQorCQl4c193cml0ZV9zcGFjZShzayk7CiAKLQkJaWYgKHVubGlrZWx5KCEoc29jayA9IHNrLT5za19zb2NrZXQpKSkKLQkJCWdvdG8gb3V0OwotCQljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwotCi0JCWlmICh1bmxpa2VseSghKHhwcnQgPSB4cHJ0X2Zyb21fc29jayhzaykpKSkKLQkJCWdvdG8gb3V0OwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQotCQkJZ290byBvdXQ7Ci0KLQkJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKLQl9Ci0KLSBvdXQ6CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmMKaW5kZXggOTcyMjAxYy4uMGIxNWQ3MiAxMDA2NDQKLS0tIGEvbmV0L3N5c2N0bF9uZXQuYworKysgYi9uZXQvc3lzY3RsX25ldC5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IG5ldF9jdGxfcm9faGVhZGVyX3Blcm1zKHN0cnVjdCBjdGxfdGFibGVfcm9vdCAqcm9vdCwKIAkJc3RydWN0IG5zcHJveHkgKm5hbWVzcGFjZXMsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQogewotCWlmIChuYW1lc3BhY2VzLT5uZXRfbnMgPT0gJmluaXRfbmV0KQorCWlmIChuZXRfZXEobmFtZXNwYWNlcy0+bmV0X25zLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gdGFibGUtPm1vZGU7CiAJZWxzZQogCQlyZXR1cm4gdGFibGUtPm1vZGUgJiB+MDIyMjsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IDNkZGFmZjQuLmEzYmZkNDAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmMKKysrIGIvbmV0L3RpcGMvYmNhc3QuYwpAQCAtMTE5LDcgKzExOSw3IEBACiBzdGF0aWMgc3RydWN0IGxpbmsgKmJjbCA9IE5VTEw7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJjX2xvY2spOwogCi1jaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7Citjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7CiAKIAogc3RhdGljIHUzMiBidWZfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKmJ1ZikKQEAgLTgwMCw3ICs4MDAsNyBAQAogCXRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGJjbCwgQkNMSU5LX1dJTl9ERUZBVUxUKTsKIAliY2wtPmJfcHRyID0gJmJjYmVhcmVyLT5iZWFyZXI7CiAJYmNsLT5zdGF0ZSA9IFdPUktJTkdfV09SS0lORzsKLQlzcHJpbnRmKGJjbC0+bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUsIFRJUENfTUFYX0xJTktfTkFNRSk7CiAKIAlpZiAoQkNMSU5LX0xPR19CVUZfU0laRSkgewogCQljaGFyICpwYiA9IGttYWxsb2MoQkNMSU5LX0xPR19CVUZfU0laRSwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5oIGIvbmV0L3RpcGMvYmNhc3QuaAppbmRleCAyZjJkNzMxLi40YzE3NzFlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5oCisrKyBiL25ldC90aXBjL2JjYXN0LmgKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RydWN0IHRpcGNfbm9kZTsKIAotZXh0ZXJuIGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGJnLmMgYi9uZXQvdGlwYy9kYmcuYwppbmRleCAyOWVjYWU4Li4xODg1YTdlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kYmcuYworKysgYi9uZXQvdGlwYy9kYmcuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJfQogCiAJaWYgKHBiLT5lY2hvKQotCQlwcmludGsocHJpbnRfc3RyaW5nKTsKKwkJcHJpbnRrKCIlcyIsIHByaW50X3N0cmluZyk7CiAKIAlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggMjBkOThjNS4uMmMyNGU3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCisrKyBiL25ldC90aXBjL25vZGUuYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAlsaW5rX2luZm8uZGVzdCA9IGh0b25sKHRpcGNfb3duX2FkZHIgJiAweGZmZmZmMDApOwogCWxpbmtfaW5mby51cCA9IGh0b25sKDEpOwotCXNwcmludGYobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShsaW5rX2luZm8uc3RyLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKIAogCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBkMWI4OTgyLi5iYWFjOTEwIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMTc4LDggKzExNzgsNyBAQAogCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIG91dDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobmV3c2spCiAJCXVuaXhfcmVsZWFzZV9zb2NrKG5ld3NrLCAwKTsKIAlpZiAob3RoZXIpCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCmluZGV4IDM5NzAxZGUuLjQ2NmUyZDIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCkBAIC04Niw4ICs4NiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHdhbl9kZXZpY2UgKndhbnJvdXRlcl9maW5kX2RldmljZShjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgd2Fucm91dGVyX2RlbGV0ZV9pbnRlcmZhY2Uoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fYWNxdWlyZXMobG9jayk7CitzdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fcmVsZWFzZXMobG9jayk7CiAKIAogCkBAIC03NjMsMTIgKzc2NSwxNCBAQAogfQogCiBzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spCiB7CiAJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgKnNtcF9mbGFncyk7CiB9CiAKIAogc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCAqc21wX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKaW5kZXggMjY3ZjdmZi4uYzQ0ZDk2YiAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqCUl0ZXJhdG9yCiAgKi8KIHN0YXRpYyB2b2lkICpyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2OwogCWxvZmZfdCBsID0gKnBvczsKQEAgLTEwMSw2ICsxMDIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLW1zZy5jIGIvbmV0L3dpbWF4L29wLW1zZy5jCmluZGV4IGNiM2I0YWQuLjVkMTQ5YzEgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9vcC1tc2cuYworKysgYi9uZXQvd2ltYXgvb3AtbXNnLmMKQEAgLTI1OCw3ICsyNTgsNiBAQAogICovCiBpbnQgd2ltYXhfbXNnX3NlbmQoc3RydWN0IHdpbWF4X2RldiAqd2ltYXhfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2ltYXhfZGV2LT5uZXRfZGV2LT5kZXYucGFyZW50OwogCXZvaWQgKm1zZyA9IHNrYi0+ZGF0YTsKIAlzaXplX3Qgc2l6ZSA9IHNrYi0+bGVuOwpAQCAtMjY2LDExICsyNjUsOSBAQAogCiAJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiB3aW1heCBtc2csICV6dSBieXRlc1xuIiwgc2l6ZSk7CiAJZF9kdW1wKDIsIGRldiwgbXNnLCBzaXplKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHdpbWF4X2dubF9tY2cuaWQsIEdGUF9LRVJORUwpOwotCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogZ2VubCBtdWx0aWNhc3QgcmVzdWx0ICVkXG4iLCByZXN1bHQpOwotCWlmIChyZXN1bHQgPT0gLUVTUkNIKQkvKiBOb2JvZHkgY29ubmVjdGVkLCBpZ25vcmUgaXQgKi8KLQkJcmVzdWx0ID0gMDsJLyogYnR3LCB0aGUgc2tiIGlzIGZyZWVkIGFscmVhZHkgKi8KLQlyZXR1cm4gcmVzdWx0OworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7CisJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiBnZW5sIG11bHRpY2FzdCBkb25lXG4iKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdpbWF4X21zZ19zZW5kKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L3N0YWNrLmMgYi9uZXQvd2ltYXgvc3RhY2suYwppbmRleCAzODY5YzAzLi5hMGVlNzZiIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvc3RhY2suYworKysgYi9uZXQvd2ltYXgvc3RhY2suYwpAQCAtMTYzLDE2ICsxNjMsMTIgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aW1heF9kZXZfdG9fZGV2KHdpbWF4X2Rldik7CiAJZF9mbnN0YXJ0KDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcClcbiIsCiAJCSAgd2ltYXhfZGV2LCByZXBvcnRfc2tiKTsKLQlpZiAocmVwb3J0X3NrYiA9PSBOVUxMKQorCWlmIChyZXBvcnRfc2tiID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7Ci0JZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzdWx0ID09IC1FU1JDSCkJLyogTm9ib2R5IGNvbm5lY3RlZCwgaWdub3JlIGl0ICovCi0JCXJlc3VsdCA9IDA7CS8qIGJ0dywgdGhlIHNrYiBpcyBmcmVlZCBhbHJlYWR5ICovCi0JaWYgKHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJSRV9TVENIOiBFcnJvciBzZW5kaW5nOiAlZFxuIiwgcmVzdWx0KTsKLQkJbmxtc2dfZnJlZShyZXBvcnRfc2tiKTsKIAl9CisJZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKKwlnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKIG91dDoKIAlkX2ZuZW5kKDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcCkgPSAlZFxuIiwKIAkJd2ltYXhfZGV2LCByZXBvcnRfc2tiLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IDkzOGEzMzQuLmRhZDQzYzIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiBvYmotJChDT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUCkgKz0gbGliODAyMTFfY3J5cHRfY2NtcC5vCiBvYmotJChDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUCkgKz0gbGliODAyMTFfY3J5cHRfdGtpcC5vCiAKLWNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8KK2NmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vCiBjZmc4MDIxMS0kKENPTkZJR19XSVJFTEVTU19FWFQpICs9IHdleHQtY29tcGF0Lm8KIGNmZzgwMjExLSQoQ09ORklHX05MODAyMTEpICs9IG5sODAyMTEubwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBiOTZmYzBjLi4xN2ZlMzkwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgpAQCAtMzEsMTggKzMwLDI5IEBACiAgKiBvbmx5IHJlYWQgdGhlIGxpc3QsIGFuZCB0aGF0IGNhbiBoYXBwZW4gcXVpdGUKICAqIG9mdGVuIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBpdCBmb3IgZWFjaCBjb21tYW5kICovCiBMSVNUX0hFQUQoY2ZnODAyMTFfZHJ2X2xpc3QpOwotREVGSU5FX01VVEVYKGNmZzgwMjExX2Rydl9tdXRleCk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgY2ZnODAyMTFfZHJ2X2xpc3QsIGNmZzgwMjExX3JlZ2RvbWFpbiwKKyAqIGNvdW50cnlfaWVfcmVnZG9tYWluLCB0aGUgcmVnX2JlYWNvbl9saXN0IGFuZCB0aGUgdGhlIGxhc3QgcmVndWxhdG9yeQorICogcmVxdWVzdCByZWNlaXB0IChsYXN0X3JlcXVlc3QpLgorICovCitERUZJTkVfTVVURVgoY2ZnODAyMTFfbXV0ZXgpOwogCiAvKiBmb3IgZGVidWdmcyAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmllZWU4MDIxMV9kZWJ1Z2ZzX2RpcjsKIAotLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCi1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHkoaW50IHdpcGh5KQorLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKmRydjsKIAorCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRydi0+aWR4ID09IHdpcGh5KSB7CisJCWlmIChkcnYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKIAkJCXJlc3VsdCA9IGRydjsKIAkJCWJyZWFrOwogCQl9CkBAIC01MSwxNyArNjEsNDQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWlmICghd2lwaHkpCisJCXJldHVybiBXSVBIWV9JRFhfU1RBTEU7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlyZXR1cm4gZHJ2LT53aXBoeV9pZHg7Cit9CisKIC8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLworc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKworCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWRydiA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KTsKKwlpZiAoIWRydikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZkcnYtPndpcGh5OworfQorCisvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkISAqLwogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlpbnQgaWZpbmRleDsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmJ5d2lwaHkgPSBOVUxMLCAqYnlpZmlkeCA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5aWR4ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pIHsKLQkJYnl3aXBoeSA9IGNmZzgwMjExX2Rydl9ieV93aXBoeSgKKwkJYnl3aXBoeWlkeCA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoCiAJCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkpOwogCQllcnIgPSAtRU5PREVWOwogCX0KQEAgLTc4LDE0ICsxMTUsMTQgQEAKIAkJZXJyID0gLUVOT0RFVjsKIAl9CiAKLQlpZiAoYnl3aXBoeSAmJiBieWlmaWR4KSB7Ci0JCWlmIChieXdpcGh5ICE9IGJ5aWZpZHgpCisJaWYgKGJ5d2lwaHlpZHggJiYgYnlpZmlkeCkgeworCQlpZiAoYnl3aXBoeWlkeCAhPSBieWlmaWR4KQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJCWVsc2UKLQkJCXJldHVybiBieXdpcGh5OyAvKiA9PSBieWlmaWR4ICovCisJCQlyZXR1cm4gYnl3aXBoeWlkeDsgLyogPT0gYnlpZmlkeCAqLwogCX0KLQlpZiAoYnl3aXBoeSkKLQkJcmV0dXJuIGJ5d2lwaHk7CisJaWYgKGJ5d2lwaHlpZHgpCisJCXJldHVybiBieXdpcGh5aWR4OwogCiAJaWYgKGJ5aWZpZHgpCiAJCXJldHVybiBieWlmaWR4OwpAQCAtOTgsNyArMTM1LDcgQEAKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWRydiA9IF9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhpbmZvKTsKIAogCS8qIGlmIGl0IGlzIG5vdCBhbiBlcnJvciB3ZSBncmFiIHRoZSBsb2NrIG9uCkBAIC0xMDcsNyArMTQ0LDcgQEAKIAlpZiAoIUlTX0VSUihkcnYpKQogCQltdXRleF9sb2NrKCZkcnYtPm10eCk7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlyZXR1cm4gZHJ2OwogfQpAQCAtMTE4LDcgKzE1NSw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0OwpAQCAtMTI5LDcgKzE2Niw3IEBACiAJCWRydiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJZGV2X3B1dChkZXYpOwogIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIGRydjsKIH0KIApAQCAtMTQzLDE2ICsxODAsMTYgQEAKIAkJCWNoYXIgKm5ld25hbWUpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGlkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CisJaW50IHdpcGh5X2lkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIHByb2hpYml0IGNhbGxpbmcgdGhlIHRoaW5nIHBoeSVkIHdoZW4gJWQgaXMgbm90IGl0cyBudW1iZXIgKi8KLQlzc2NhbmYobmV3bmFtZSwgUEhZX05BTUUgIiVkJW4iLCAmaWR4LCAmdGFrZW4pOwotCWlmICh0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgJiYgaWR4ICE9IHJkZXYtPmlkeCkgewotCQkvKiBjb3VudCBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZCB0byBwcmludCBpZHggKi8KKwlzc2NhbmYobmV3bmFtZSwgUEhZX05BTUUgIiVkJW4iLCAmd2lwaHlfaWR4LCAmdGFrZW4pOworCWlmICh0YWtlbiA9PSBzdHJsZW4obmV3bmFtZSkgJiYgd2lwaHlfaWR4ICE9IHJkZXYtPndpcGh5X2lkeCkgeworCQkvKiBjb3VudCBudW1iZXIgb2YgcGxhY2VzIG5lZWRlZCB0byBwcmludCB3aXBoeV9pZHggKi8KIAkJZGlnaXRzID0gMTsKLQkJd2hpbGUgKGlkeCAvPSAxMCkKKwkJd2hpbGUgKHdpcGh5X2lkeCAvPSAxMCkKIAkJCWRpZ2l0cysrOwogCQkvKgogCQkgKiBkZW55IHRoZSBuYW1lIGlmIGl0IGlzIHBoeTxpZHg+IHdoZXJlIDxpZHg+IGlzIHByaW50ZWQKQEAgLTE5Myw3ICsyMzAsNyBAQAogCiAJcmVzdWx0ID0gMDsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWlmIChyZXN1bHQgPT0gMCkKIAkJbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShyZGV2KTsKIApAQCAtMjIwLDI2ICsyNTcsMjggQEAKIAogCWRydi0+b3BzID0gb3BzOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlkcnYtPmlkeCA9IHdpcGh5X2NvdW50ZXIrKzsKKwlkcnYtPndpcGh5X2lkeCA9IHdpcGh5X2NvdW50ZXIrKzsKIAotCWlmICh1bmxpa2VseShkcnYtPmlkeCA8IDApKSB7CisJaWYgKHVubGlrZWx5KCF3aXBoeV9pZHhfdmFsaWQoZHJ2LT53aXBoeV9pZHgpKSkgewogCQl3aXBoeV9jb3VudGVyLS07Ci0JCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCS8qIHVnaCwgd3JhcHBlZCEgKi8KIAkJa2ZyZWUoZHJ2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogZ2l2ZSBpdCBhIHByb3BlciBuYW1lICovCi0JZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT5pZHgpOworCWRldl9zZXRfbmFtZSgmZHJ2LT53aXBoeS5kZXYsIFBIWV9OQU1FICIlZCIsIGRydi0+d2lwaHlfaWR4KTsKIAogCW11dGV4X2luaXQoJmRydi0+bXR4KTsKIAltdXRleF9pbml0KCZkcnYtPmRldmxpc3RfbXR4KTsKIAlJTklUX0xJU1RfSEVBRCgmZHJ2LT5uZXRkZXZfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmRydi0+YnNzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkcnYtPmJzc19saXN0KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZkcnYtPndpcGh5LmRldik7CiAJZHJ2LT53aXBoeS5kZXYuY2xhc3MgPSAmaWVlZTgwMjExX2NsYXNzOwpAQCAtMjU5LDYgKzI5OCw5IEBACiAJaW50IGk7CiAJdTE2IGlmbW9kZXMgPSB3aXBoeS0+aW50ZXJmYWNlX21vZGVzOwogCisJaWYgKFdBUk5fT04od2lwaHktPm1heF9zY2FuX3NzaWRzIDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogc2FuaXR5IGNoZWNrIGlmbW9kZXMgKi8KIAlXQVJOX09OKCFpZm1vZGVzKTsKIAlpZm1vZGVzICY9ICgoMSA8PCBfX05MODAyMTFfSUZUWVBFX0FGVEVSX0xBU1QpIC0gMSkgJiB+MTsKQEAgLTI3MywxMCArMzE1LDE2IEBACiAKIAkJc2JhbmQtPmJhbmQgPSBiYW5kOwogCi0JCWlmICghc2JhbmQtPm5fY2hhbm5lbHMgfHwgIXNiYW5kLT5uX2JpdHJhdGVzKSB7Ci0JCQlXQVJOX09OKDEpOworCQlpZiAoV0FSTl9PTighc2JhbmQtPm5fY2hhbm5lbHMgfHwgIXNiYW5kLT5uX2JpdHJhdGVzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CisKKwkJLyoKKwkJICogU2luY2Ugd2UgdXNlIGEgdTMyIGZvciByYXRlIGJpdG1hcHMgaW4KKwkJICogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlLCB3ZSBjYW5ub3QKKwkJICogaGF2ZSBtb3JlIHRoYW4gMzIgbGVnYWN5IHJhdGVzLgorCQkgKi8KKwkJaWYgKFdBUk5fT04oc2JhbmQtPm5fYml0cmF0ZXMgPiAzMikpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewogCQkJc2JhbmQtPmNoYW5uZWxzW2ldLm9yaWdfZmxhZ3MgPQpAQCAtMjk5LDEwICszNDcsMTAgQEAKIAkvKiBjaGVjayBhbmQgc2V0IHVwIGJpdHJhdGVzICovCiAJaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHdpcGh5KTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHJlZ3VsYXRvcnkgaW5mbyAqLwotCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBSRUdET01fU0VUX0JZX0NPUkUpOworCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSk7CiAKIAlyZXMgPSBkZXZpY2VfYWRkKCZkcnYtPndpcGh5LmRldik7CiAJaWYgKHJlcykKQEAgLTMxNyw5ICszNjUsMjAgQEAKIAlpZiAoSVNfRVJSKGRydi0+d2lwaHkuZGVidWdmc2RpcikpCiAJCWRydi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CiAKKwlpZiAod2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KSB7CisJCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgcmVxdWVzdDsKKworCQlyZXF1ZXN0LndpcGh5X2lkeCA9IGdldF93aXBoeV9pZHgod2lwaHkpOworCQlyZXF1ZXN0LmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisJCXJlcXVlc3QuYWxwaGEyWzBdID0gJzknOworCQlyZXF1ZXN0LmFscGhhMlsxXSA9ICc5JzsKKworCQlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudCgmcmVxdWVzdCk7CisJfQorCiAJcmVzID0gMDsKIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3JlZ2lzdGVyKTsKQEAgLTMyOSw3ICszODgsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAogCS8qIHByb3RlY3QgdGhlIGRldmljZSBsaXN0ICovCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRydi0+bmV0ZGV2X2xpc3QpKTsKIApAQCAtMzU1LDE0ICs0MTQsMTcgQEAKIAlkZXZpY2VfZGVsKCZkcnYtPndpcGh5LmRldik7CiAJZGVidWdmc19yZW1vdmUoZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyKTsKIAotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfdW5yZWdpc3Rlcik7CiAKIHZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCiB7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqc2NhbiwgKnRtcDsKIAltdXRleF9kZXN0cm95KCZkcnYtPm10eCk7CiAJbXV0ZXhfZGVzdHJveSgmZHJ2LT5kZXZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYW4sIHRtcCwgJmRydi0+YnNzX2xpc3QsIGxpc3QpCisJCWNmZzgwMjExX3B1dF9ic3MoJnNjYW4tPnB1Yik7CiAJa2ZyZWUoZHJ2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggZjdmYjlmNC4uNmFjZDQ4MyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC04LDYgKzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KQEAgLTM1LDEyICszOCwyMCBAQAogCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudjsKIAogCS8qIHdpcGh5IGluZGV4LCBpbnRlcm5hbCBvbmx5ICovCi0JaW50IGlkeDsKKwlpbnQgd2lwaHlfaWR4OwogCiAJLyogYXNzb2NpYXRlIG5ldGRldiBsaXN0ICovCiAJc3RydWN0IG11dGV4IGRldmxpc3RfbXR4OwogCXN0cnVjdCBsaXN0X2hlYWQgbmV0ZGV2X2xpc3Q7CiAKKwkvKiBCU1Nlcy9zY2FubmluZyAqLworCXNwaW5sb2NrX3QgYnNzX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKKwlzdHJ1Y3QgcmJfcm9vdCBic3NfdHJlZTsKKwl1MzIgYnNzX2dlbmVyYXRpb247CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7IC8qIHByb3RlY3RlZCBieSBSVE5MICovCisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OworCiAJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyB3aXBoeV9wcml2KCksCiAJICogYW5kIGl0IHNob3VsZCBhdCBsZWFzdCBiZSBhbGlnbmVkIHRvIE5FVERFVl9BTElHTiAqLwogCXN0cnVjdCB3aXBoeSB3aXBoeSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhORVRERVZfQUxJR04pKSk7CkBAIC01Myw5ICs2NCwzOSBAQAogCXJldHVybiBjb250YWluZXJfb2Yod2lwaHksIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwgd2lwaHkpOwogfQogCi1leHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX2Rydl9tdXRleDsKKy8qIE5vdGUgMCBpcyB2YWxpZCwgaGVuY2UgcGh5MCAqLworc3RhdGljIGlubGluZQorYm9vbCB3aXBoeV9pZHhfdmFsaWQoaW50IHdpcGh5X2lkeCkKK3sKKwlyZXR1cm4gKHdpcGh5X2lkeCA+PSAwKTsKK30KKworZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9tdXRleDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNmZzgwMjExX2Rydl9saXN0OwogCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2NmZzgwMjExX2xvY2sodm9pZCkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmNmZzgwMjExX211dGV4KSk7Cit9CisKKy8qCisgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIG1hcmsgYSB3aXBoeV9pZHggYXMgbm90IGhhdmluZyBhbiBhc3NvY2lhdGVkIHdpcGh5LgorICogSXQgZ3VhcmFudGVlcyBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCkgd2lsbCByZXR1cm4gTlVMTAorICovCisjZGVmaW5lIFdJUEhZX0lEWF9TVEFMRSAtMQorCitzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJiX25vZGUgcmJuOworCXVuc2lnbmVkIGxvbmcgdHM7CisJc3RydWN0IGtyZWYgcmVmOworCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHByaXYgbWVtYmVyICovCisJc3RydWN0IGNmZzgwMjExX2JzcyBwdWI7Cit9OworCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCk7CitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlcgogICogdGhhdCB0aGUgZ2VubF9pbmZvIGl0ZW0gdGhhdCBpcyBwYXNzZWQgcmVmZXJzIHRvLgpAQCAtNjMsMTMgKzEwNCwxMyBAQAogICogdGhlIGRyaXZlcidzIG11dGV4IQogICoKICAqIFRoaXMgbWVhbnMgdGhhdCB5b3UgbmVlZCB0byBjYWxsIGNmZzgwMjExX3B1dF9kZXYoKQotICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfZHJ2X211dGV4IQorICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfbXV0ZXghCiAgKgogICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRvIGxvY2sgdGhlIGdsb2JhbAogICogbXV0ZXggdG8gZ2V0IGFuIGl0ZW0gb2ZmIHRoZSBsaXN0IHNhZmVseSwgYW5kIHRoZW4KICAqIHdlIGxvY2sgdGhlIGRydiBtdXRleCBzbyBpdCBkb2Vzbid0IGdvIGF3YXkgdW5kZXIgdXMuCiAgKgotICogV2UgZG9uJ3Qgd2FudCB0byBrZWVwIGNmZzgwMjExX2Rydl9tdXRleCBsb2NrZWQKKyAqIFdlIGRvbid0IHdhbnQgdG8ga2VlcCBjZmc4MDIxMV9tdXRleCBsb2NrZWQKICAqIGZvciBhbGwgdGhlIHRpbWUgaW4gb3JkZXIgdG8gYWxsb3cgcmVxdWVzdHMgb24KICAqIG90aGVyIGludGVyZmFjZXMgdG8gZ28gdGhyb3VnaCBhdCB0aGUgc2FtZSB0aW1lLgogICoKQEAgLTc5LDYgKzEyMCw5IEBACiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCisvKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpOworCiAvKiBpZGVudGljYWwgdG8gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8gYnV0IG9ubHkgb3BlcmF0ZSBvbiBpZmluZGV4ICovCiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGludCBpZmluZGV4KTsKQEAgLTkyLDYgKzEzNiwxMSBAQAogCQkJICAgICAgIGNoYXIgKm5ld25hbWUpOwogCiB2b2lkIGllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKLXZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KTsKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3Igc2V0YnkpOworCit2b2lkIGNmZzgwMjExX2Jzc19leHBpcmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYpOwordm9pZCBjZmc4MDIxMV9ic3NfYWdlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfQ09SRV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCAzMWI4MDdhLi5hYjlkOGYxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTcsMTMgKzcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJjb3JlLmgiCkBAIC0xMDUsNiArMTA1LDEyIEBACiAKIAlbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJCSAubGVuID0gTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTiB9LAorCisJW05MODAyMTFfQVRUUl9NR01UX1NVQlRZUEVdID0geyAudHlwZSA9IE5MQV9VOCB9LAorCVtOTDgwMjExX0FUVFJfSUVdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkgICAgICAubGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogfTsKIAogLyogbWVzc2FnZSBidWlsZGluZyBoZWxwZXIgKi8KQEAgLTEzNSw4ICsxNDEsMTAgQEAKIAlpZiAoIWhkcikKIAkJcmV0dXJuIC0xOwogCi0JTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+aWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgZGV2LT53aXBoeV9pZHgpOwogCU5MQV9QVVRfU1RSSU5HKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUsIHdpcGh5X25hbWUoJmRldi0+d2lwaHkpKTsKKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKKwkJICAgZGV2LT53aXBoeS5tYXhfc2Nhbl9zc2lkcyk7CiAKIAlubF9tb2RlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKTsKIAlpZiAoIW5sX21vZGVzKQpAQCAtMjQ3LDcgKzI1NSw3IEBACiAJaW50IHN0YXJ0ID0gY2ItPmFyZ3NbMF07CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICgrK2lkeCA8PSBzdGFydCkKIAkJCWNvbnRpbnVlOwpAQCAtMjU4LDcgKzI2Niw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IGlkeDsKIApAQCAtNDYxLDcgKzQ2OSw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKIAkJaWYgKHdwX2lkeCA8IHdwX3N0YXJ0KSB7CiAJCQl3cF9pZHgrKzsKQEAgLTQ4OCw3ICs0OTYsNyBAQAogCQl3cF9pZHgrKzsKIAl9CiAgb3V0OgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAogCWNiLT5hcmdzWzBdID0gd3BfaWR4OwogCWNiLT5hcmdzWzFdID0gaWZfaWR4OwpAQCAtNzM4LDcgKzc0Niw3IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKIAkJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoa2V5X2lkeCA+IDUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQpAQCAtODA0LDMwICs4MTIsNDEgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgga2V5X2lkeDsKKwlpbnQgKCpmdW5jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgdTgga2V5X2luZGV4KTsKIAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkgeworCQlpZiAoa2V5X2lkeCA8IDQgfHwga2V5X2lkeCA+IDUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGtleV9pZHggPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgc2V0dGluZyBkZWZhdWx0IGtleSAqLwotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0gJiYKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIWRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkpIHsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKKwkJZnVuYyA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXk7CisJZWxzZQorCQlmdW5jID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5OworCisJaWYgKCFmdW5jKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKIAlydG5sX2xvY2soKTsKLQllcnIgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgpOworCWVyciA9IGZ1bmMoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCk7CiAJcnRubF91bmxvY2soKTsKIAogIG91dDoKQEAgLTg2Myw3ICs4ODIsNyBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC04OTQsNiArOTEzLDEwIEBACiAJCWlmIChwYXJhbXMua2V5X2xlbiAhPSAxMykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlpZiAocGFyYW1zLmtleV9sZW4gIT0gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtOTI4LDcgKzk1MSw3IEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKIAkJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoa2V5X2lkeCA+IDUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQpAQCAtMTE4Miw2ICsxMjA1LDEyIEBACiAKIAkJbmxhX25lc3RfZW5kKG1zZywgdHhyYXRlKTsKIAl9CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fUlhfUEFDS0VUUykKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFMsCisJCQkgICAgc2luZm8tPnJ4X3BhY2tldHMpOworCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTLAorCQkJICAgIHNpbmZvLT50eF9wYWNrZXRzKTsKIAlubGFfbmVzdF9lbmQobXNnLCBzaW5mb2F0dHIpOwogCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKQEAgLTE4NzYsNiArMTkwNSwxOSBAQAogCWludCByOwogCWNoYXIgKmRhdGEgPSBOVUxMOwogCisJLyoKKwkgKiBZb3Ugc2hvdWxkIG9ubHkgZ2V0IHRoaXMgd2hlbiBjZmc4MDIxMSBoYXNuJ3QgeWV0IGluaXRpYWxpemVkCisJICogY29tcGxldGVseSB3aGVuIGJ1aWx0LWluIHRvIHRoZSBrZXJuZWwgcmlnaHQgYmV0d2VlbiB0aGUgdGltZQorCSAqIHdpbmRvdyBiZXR3ZWVuIG5sODAyMTFfaW5pdCgpIGFuZCByZWd1bGF0b3J5X2luaXQoKSwgaWYgdGhhdCBpcworCSAqIGV2ZW4gcG9zc2libGUuCisJICovCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCWlmICh1bmxpa2VseSghY2ZnODAyMTFfcmVnZG9tYWluKSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKIAlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUdfQUxQSEEyXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE4ODYsOSArMTkyOCw5IEBACiAJaWYgKGlzX3dvcmxkX3JlZ2RvbShkYXRhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOwotCXIgPSBfX3JlZ3VsYXRvcnlfaGludChOVUxMLCBSRUdET01fU0VUX0JZX1VTRVIsIGRhdGEsIDAsIEVOVklST05fQU5ZKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisKKwlyID0gcmVndWxhdG9yeV9oaW50X3VzZXIoZGF0YSk7CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtMjA4MCw2ICsyMTIyLDgxIEBACiAKICN1bmRlZiBGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUCiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHIgPSBOVUxMOworCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQorCQlnb3RvIG91dDsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1JFRyk7CisJaWYgKCFoZHIpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwKKwkJY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOworCisJbmxfcmVnX3J1bGVzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVTKTsKKwlpZiAoIW5sX3JlZ19ydWxlcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnODAyMTFfcmVnZG9tYWluLT5uX3JlZ19ydWxlczsgaSsrKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sX3JlZ19ydWxlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpyZWdfcnVsZTsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmcmVxX3JhbmdlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGU7CisKKwkJcmVnX3J1bGUgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CisJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CisKKwkJbmxfcmVnX3J1bGUgPSBubGFfbmVzdF9zdGFydChtc2csIGkpOworCQlpZiAoIW5sX3JlZ19ydWxlKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1MsCisJCQlyZWdfcnVsZS0+ZmxhZ3MpOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJULAorCQkJZnJlcV9yYW5nZS0+c3RhcnRfZnJlcV9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORCwKKwkJCWZyZXFfcmFuZ2UtPmVuZF9mcmVxX2toeik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfTUFYX0JXLAorCQkJZnJlcV9yYW5nZS0+bWF4X2JhbmR3aWR0aF9raHopOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTiwKKwkJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9FSVJQLAorCQkJcG93ZXJfcnVsZS0+bWF4X2VpcnApOworCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX3JlZ19ydWxlKTsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBubF9yZWdfcnVsZXMpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWdvdG8gb3V0OworCitubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCWVyciA9IC1FTVNHU0laRTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggKyAxXTsKQEAgLTIxMzUsOSArMjI1Miw5IEBACiAKIAlCVUdfT04ocnVsZV9pZHggIT0gbnVtX3J1bGVzKTsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXIgPSBzZXRfcmVnZG9tKHJkKTsKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIHI7CiAKICBiYWRfcmVnOgpAQCAtMjE0NSw2ICsyMjYyLDMwMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfc2V0X21nbXRfZXh0cmFfaWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtZ210X2V4dHJhX2llX3BhcmFtcyBwYXJhbXM7CisKKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGFyYW1zLnN1YnR5cGUgPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NR01UX1NVQlRZUEVdKTsKKwlpZiAocGFyYW1zLnN1YnR5cGUgPiAxNSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIEZDIFN1YnR5cGUgZmllbGQgaXMgNCBiaXRzICgwLi4xNSkgKi8KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXBhcmFtcy5pZXMgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJcGFyYW1zLmllc19sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChkcnYtPm9wcy0+c2V0X21nbXRfZXh0cmFfaWUpIHsKKwkJcnRubF9sb2NrKCk7CisJCWVyciA9IGRydi0+b3BzLT5zZXRfbWdtdF9leHRyYV9pZSgmZHJ2LT53aXBoeSwgZGV2LCAmcGFyYW1zKTsKKwkJcnRubF91bmxvY2soKTsKKwl9IGVsc2UKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV90cmlnZ2VyX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBubGF0dHIgKmF0dHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyLCB0bXAsIG5fc3NpZHMgPSAwLCBuX2NoYW5uZWxzID0gMCwgaTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc2l6ZV90IGllX2xlbjsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisKKwlpZiAoIWRydi0+b3BzLT5zY2FuKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlydG5sX2xvY2soKTsKKworCWlmIChkcnYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pIHsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10sIHRtcCkKKwkJCW5fY2hhbm5lbHMrKzsKKwkJaWYgKCFuX2NoYW5uZWxzKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKKwkJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkKKwkJCW5fc3NpZHMrKzsKKworCWlmIChuX3NzaWRzID4gd2lwaHktPm1heF9zY2FuX3NzaWRzKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwllbHNlCisJCWllX2xlbiA9IDA7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpCisJCQkrIHNpemVvZigqc3NpZCkgKiBuX3NzaWRzCisJCQkrIHNpemVvZihjaGFubmVsKSAqIG5fY2hhbm5lbHMKKwkJCSsgaWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJlcXVlc3QtPmNoYW5uZWxzID0gKHZvaWQgKikoKGNoYXIgKilyZXF1ZXN0ICsgc2l6ZW9mKCpyZXF1ZXN0KSk7CisJcmVxdWVzdC0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJaWYgKG5fc3NpZHMpCisJCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKKwlyZXF1ZXN0LT5uX3NzaWRzID0gbl9zc2lkczsKKwlpZiAoaWVfbGVuKSB7CisJCWlmIChyZXF1ZXN0LT5zc2lkcykKKwkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+c3NpZHMgKyBuX3NzaWRzKTsKKwkJZWxzZQorCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5jaGFubmVscyArIG5fY2hhbm5lbHMpOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pIHsKKwkJLyogdXNlciBzcGVjaWZpZWQsIGJhaWwgb3V0IGlmIGNoYW5uZWwgbm90IGZvdW5kICovCisJCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOworCQlpID0gMDsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10sIHRtcCkgeworCQkJcmVxdWVzdC0+Y2hhbm5lbHNbaV0gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIG5sYV9nZXRfdTMyKGF0dHIpKTsKKwkJCWlmICghcmVxdWVzdC0+Y2hhbm5lbHNbaV0pIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCQlpKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBhbGwgY2hhbm5lbHMgKi8KKwkJaSA9IDA7CisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCWludCBqOworCQkJaWYgKCF3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJY29udGludWU7CisJCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9ICZ3aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJCWkrKzsKKwkJCX0KKwkJfQorCX0KKworCWkgPSAwOworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pIHsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkgeworCQkJaWYgKHJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSk7CisJCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7CisJCQlpKys7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlyZXF1ZXN0LT5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQltZW1jcHkocmVxdWVzdC0+aWUsIG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pLAorCQkgICAgICAgcmVxdWVzdC0+aWVfbGVuKTsKKwl9CisKKwlyZXF1ZXN0LT5pZmlkeCA9IGRldi0+aWZpbmRleDsKKwlyZXF1ZXN0LT53aXBoeSA9ICZkcnYtPndpcGh5OworCisJZHJ2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7CisJZXJyID0gZHJ2LT5vcHMtPnNjYW4oJmRydi0+d2lwaHksIGRldiwgcmVxdWVzdCk7CisKKyBvdXRfZnJlZToKKwlpZiAoZXJyKSB7CisJCWRydi0+c2Nhbl9yZXEgPSBOVUxMOworCQlrZnJlZShyZXF1ZXN0KTsKKwl9Cisgb3V0X3VubG9jazoKKwlydG5sX3VubG9jaygpOworIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqcmVzKQoreworCXZvaWQgKmhkcjsKKwlzdHJ1Y3QgbmxhdHRyICpic3M7CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywKKwkJCSAgICAgTkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUyk7CisJaWYgKCFoZHIpCisJCXJldHVybiAtMTsKKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTiwKKwkJICAgIHJkZXYtPmJzc19nZW5lcmF0aW9uKTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBkZXYtPmlmaW5kZXgpOworCisJYnNzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfQlNTKTsKKwlpZiAoIWJzcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5ic3NpZCkpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0JTU19CU1NJRCwgRVRIX0FMRU4sIHJlcy0+YnNzaWQpOworCWlmIChyZXMtPmluZm9ybWF0aW9uX2VsZW1lbnRzICYmIHJlcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFMsCisJCQlyZXMtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCXJlcy0+aW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChyZXMtPnRzZikKKwkJTkxBX1BVVF9VNjQobXNnLCBOTDgwMjExX0JTU19UU0YsIHJlcy0+dHNmKTsKKwlpZiAocmVzLT5iZWFjb25faW50ZXJ2YWwpCisJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMLCByZXMtPmJlYWNvbl9pbnRlcnZhbCk7CisJTkxBX1BVVF9VMTYobXNnLCBOTDgwMjExX0JTU19DQVBBQklMSVRZLCByZXMtPmNhcGFiaWxpdHkpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfRlJFUVVFTkNZLCByZXMtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCXN3aXRjaCAocmRldi0+d2lwaHkuc2lnbmFsX3R5cGUpIHsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19TSUdOQUxfTUJNLCByZXMtPnNpZ25hbCk7CisJCWJyZWFrOworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQywgcmVzLT5zaWduYWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBic3MpOworCisJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKworc3RhdGljIGludCBubDgwMjExX2R1bXBfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpzY2FuOworCWludCBpZmlkeCA9IGNiLT5hcmdzWzBdOworCWludCBzdGFydCA9IGNiLT5hcmdzWzFdLCBpZHggPSAwOworCWludCBlcnI7CisKKwlpZiAoIWlmaWR4KSB7CisJCWVyciA9IG5sbXNnX3BhcnNlKGNiLT5ubGgsIEdFTkxfSERSTEVOICsgbmw4MDIxMV9mYW0uaGRyc2l6ZSwKKwkJCQkgIG5sODAyMTFfZmFtLmF0dHJidWYsIG5sODAyMTFfZmFtLm1heGF0dHIsCisJCQkJICBubDgwMjExX3BvbGljeSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmICghbmw4MDIxMV9mYW0uYXR0cmJ1ZltOTDgwMjExX0FUVFJfSUZJTkRFWF0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZmlkeCA9IG5sYV9nZXRfdTMyKG5sODAyMTFfZmFtLmF0dHJidWZbTkw4MDIxMV9BVFRSX0lGSU5ERVhdKTsKKwkJaWYgKCFpZmlkeCkKKwkJCXJldHVybiAtRUlOVkFMOworCQljYi0+YXJnc1swXSA9IGlmaWR4OworCX0KKworCW5ldGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJaWYgKCFuZXRkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaWZpZHgpOworCWlmIChJU19FUlIoZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRldik7CisJCWdvdG8gb3V0X3B1dF9uZXRkZXY7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfZXhwaXJlKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYW4sICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmICgrK2lkeCA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQlpZiAobmw4MDIxMV9zZW5kX2Jzcyhza2IsCisJCQkJTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKKwkJCQlkZXYsIG5ldGRldiwgJnNjYW4tPnB1YikgPCAwKSB7CisJCQlpZHgtLTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisgb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWNiLT5hcmdzWzFdID0gaWR4OworCWVyciA9IHNrYi0+bGVuOworCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKyBvdXRfcHV0X25ldGRldjoKKwlkZXZfcHV0KG5ldGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtMjIzMSw3ICsyNjQ0LDYgQEAKIAkJLmRvaXQgPSBubDgwMjExX2dldF9zdGF0aW9uLAogCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX3N0YXRpb24sCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKLQkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1NUQVRJT04sCkBAIC0yMjgzLDYgKzI2OTUsMTIgQEAKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1JFRywKKwkJLmRvaXQgPSBubDgwMjExX2dldF9yZWcsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLyogY2FuIGJlIHJldHJpZXZlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMgKi8KKwl9LAorCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9SRUcsCiAJCS5kb2l0ID0gbmw4MDIxMV9zZXRfcmVnLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCkBAIC0yMzA2LDEyICsyNzI0LDM1IEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUsCisJCS5kb2l0ID0gbmw4MDIxMV9zZXRfbWdtdF9leHRyYV9pZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCisJCS5kb2l0ID0gbmw4MDIxMV90cmlnZ2VyX3NjYW4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1NDQU4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmR1bXBpdCA9IG5sODAyMTFfZHVtcF9zY2FuLAorCX0sCiB9OwogCiAvKiBtdWx0aWNhc3QgZ3JvdXBzICovCiBzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfY29uZmlnX21jZ3JwID0gewogCS5uYW1lID0gImNvbmZpZyIsCiB9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3NjYW5fbWNncnAgPSB7CisJLm5hbWUgPSAic2NhbiIsCit9Oworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAgPSB7CisJLm5hbWUgPSAicmVndWxhdG9yeSIsCit9OwogCiAvKiBub3RpZmljYXRpb24gZnVuY3Rpb25zICovCiAKQEAgLTIzMzEsNiArMjc3MiwxMjEgQEAKIAlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfY29uZmlnX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKHN0cnVjdCBza19idWZmICptc2csCisJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAorCQkJCSAgICB1MzIgY21kKQoreworCXZvaWQgKmhkcjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBjbWQpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCisJLyogWFhYOiB3ZSBzaG91bGQgcHJvYmFibHkgYm91bmNlIGJhY2sgdGhlIHJlcXVlc3Q/ICovCisKKwlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJICAgICAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworfQorCisvKgorICogVGhpcyBjYW4gaGFwcGVuIG9uIGdsb2JhbCByZWd1bGF0b3J5IGNoYW5nZXMgb3IgZGV2aWNlIHNwZWNpZmljIHNldHRpbmdzCisgKiBiYXNlZCBvbiBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW5zLgorICovCit2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX1JFR19DSEFOR0UpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFVzZXJzcGFjZSBjYW4gYWx3YXlzIGNvdW50IHRoaXMgb25lIGFsd2F5cyBiZWluZyBzZXQgKi8KKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsIHJlcXVlc3QtPmluaXRpYXRvcik7CisKKwlpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICcwJyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzAnKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCk7CisJZWxzZSBpZiAocmVxdWVzdC0+YWxwaGEyWzBdID09ICc5JyAmJiByZXF1ZXN0LT5hbHBoYTJbMV0gPT0gJzknKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAorCQkJICAgTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQpOworCWVsc2UgaWYgKChyZXF1ZXN0LT5hbHBoYTJbMF0gPT0gJzknICYmIHJlcXVlc3QtPmFscGhhMlsxXSA9PSAnOCcpIHx8CisJCSByZXF1ZXN0LT5pbnRlcnNlY3QpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0lOVEVSU0VDVElPTik7CisJZWxzZSB7CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlkpOworCQlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9SRUdfQUxQSEEyLCByZXF1ZXN0LT5hbHBoYTIpOworCX0KKworCWlmICh3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJlcXVlc3QtPndpcGh5X2lkeCk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm47CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCiAvKiBpbml0aWFsaXNhdGlvbi9leGl0IGZ1bmN0aW9ucyAqLwogCiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpCkBAIC0yMzUxLDYgKzI5MDcsMTQgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZubDgwMjExX2ZhbSwgJm5sODAyMTFfc2Nhbl9tY2dycCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3JlZ3VsYXRvcnlfbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKwogCXJldHVybiAwOwogIGVycl9vdXQ6CiAJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmw4MDIxMV9mYW0pOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggZjNlYTVjMC4uZTY1YTNjMyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC03LDYgKzcsMTEgQEAKIGV4dGVybiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmw4MDIxMV9leGl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5sODAyMTFfaW5pdCh2b2lkKQogewpAQCAtMTksNiArMjQsMTggQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiB7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQKK25sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCgKKwkJCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQore30KK3N0YXRpYyBpbmxpbmUgdm9pZAorbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKK30KICNlbmRpZiAvKiBDT05GSUdfTkw4MDIxMSAqLwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYmQwYTE2Yy4uZWI4YjhlZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtNDEsMzggKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAicmVnLmgiCi0KLS8qKgotICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHJlY2VpcHQgb2YgbGFzdCByZWd1bGF0b3J5IHJlcXVlc3QKLSAqCi0gKiBAd2lwaHk6IHRoaXMgaXMgc2V0IGlmIHRoaXMgcmVxdWVzdCdzIGluaXRpYXRvciBpcwotICogCSVSRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IgJVJFR0RPTV9TRVRfQllfRFJJVkVSLiBUaGlzCi0gKiAJY2FuIGJlIHVzZWQgYnkgdGhlIHdpcmVsZXNzIGNvcmUgdG8gZGVhbCB3aXRoIGNvbmZsaWN0cwotICogCWFuZCBwb3RlbnRpYWxseSBpbmZvcm0gdXNlcnMgb2Ygd2hpY2ggZGV2aWNlcyBzcGVjaWZpY2FsbHkKLSAqIAljYXNlZCB0aGUgY29uZmxpY3RzLgotICogQGluaXRpYXRvcjogaW5kaWNhdGVzIHdobyBzZW50IHRoaXMgcmVxdWVzdCwgY291bGQgYmUgYW55IG9mCi0gKiAJb2YgdGhvc2Ugc2V0IGluIHJlZ19zZXRfYnksICVSRUdET01fU0VUX0JZXyoKLSAqIEBhbHBoYTI6IHRoZSBJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIG9mIHRoZSByZXF1ZXN0ZWQKLSAqIAlyZWd1bGF0b3J5IGRvbWFpbi4gV2UgaGF2ZSBhIGZldyBzcGVjaWFsIGNvZGVzOgotICogCTAwIC0gV29ybGQgcmVndWxhdG9yeSBkb21haW4KLSAqIAk5OSAtIGJ1aWx0IGJ5IGRyaXZlciBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKLSAqIAk5OCAtIHJlc3VsdCBvZiBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVndWxhdG9yeSBkb21haW5zCi0gKiBAaW50ZXJzZWN0OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd2lyZWxlc3MgY29yZSBzaG91bGQgaW50ZXJzZWN0Ci0gKiAJdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiB3aXRoIHRoZSBwcmVzZW50bHkgc2V0IHJlZ3VsYXRvcnkKLSAqIAlkb21haW4uCi0gKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIGFuZCBhY2NlcHRlZAotICogCWNvdW50cnkgSUUKLSAqIEBjb3VudHJ5X2llX2VudjogbGV0cyB1cyBrbm93IGlmIHRoZSBBUCBpcyB0ZWxsaW5nIHVzIHdlIGFyZSBvdXRkb29yLAotICogCWluZG9vciwgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXIKLSAqLwotc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCB7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQllbnVtIHJlZ19zZXRfYnkgaW5pdGlhdG9yOwotCWNoYXIgYWxwaGEyWzJdOwotCWJvb2wgaW50ZXJzZWN0OwotCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtOwotCWVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52OwotfTsKKyNpbmNsdWRlICJubDgwMjExLmgiCiAKIC8qIFJlY2VpcHQgb2YgaW5mb3JtYXRpb24gZnJvbSBsYXN0IHJlZ3VsYXRvcnkgcmVxdWVzdCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxhc3RfcmVxdWVzdDsKQEAgLTg2LDIyICs1NSw2MyBAQAogCU1IWl9UT19LSFooMjApLAogfTsKIAotLyogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKKy8qCisgKiBDZW50cmFsIHdpcmVsZXNzIGNvcmUgcmVndWxhdG9yeSBkb21haW5zLCB3ZSBvbmx5IG5lZWQgdHdvLAogICogdGhlIGN1cnJlbnQgb25lIGFuZCBhIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugd2UgaGF2ZSBubwotICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY2ZnODAyMTFfcmVnZG9tYWluOworICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIKKyAqLworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3JlZ2RvbWFpbjsKIAotLyogV2UgdXNlIHRoaXMgYXMgYSBwbGFjZSBmb3IgdGhlIHJkIHN0cnVjdHVyZSBidWlsdCBmcm9tIHRoZQorLyoKKyAqIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKICAqIGxhc3QgcGFyc2VkIGNvdW50cnkgSUUgdG8gcmVzdCB1bnRpbCBDUkRBIGdldHMgYmFjayB0byB1cyB3aXRoCi0gKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkgKi8KKyAqIHdoYXQgaXQgdGhpbmtzIHNob3VsZCBhcHBseSBmb3IgdGhlIHNhbWUgY291bnRyeQorICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfcmVnZG9tYWluOwogCisvKiBVc2VkIHRvIHF1ZXVlIHVwIHJlZ3VsYXRvcnkgaGludHMgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmVnX3JlcXVlc3RzX2xpc3QpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3JlcXVlc3RzX2xvY2s7CisKKy8qIFVzZWQgdG8gcXVldWUgdXAgYmVhY29uIGhpbnRzIGZvciByZXZpZXcgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmVnX3BlbmRpbmdfYmVhY29ucyk7CitzdGF0aWMgc3BpbmxvY2tfdCByZWdfcGVuZGluZ19iZWFjb25zX2xvY2s7CisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwcm9jZXNzZWQgYmVhY29uIGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19iZWFjb25fbGlzdCk7CisKK3N0cnVjdCByZWdfYmVhY29uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW47Cit9OworCiAvKiBXZSBrZWVwIGEgc3RhdGljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugb2YgdGhlIGFic2VuY2Ugb2YgQ1JEQSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHdvcmxkX3JlZ2RvbSA9IHsKLQkubl9yZWdfcnVsZXMgPSAxLAorCS5uX3JlZ19ydWxlcyA9IDUsCiAJLmFscGhhMiA9ICAiMDAiLAogCS5yZWdfcnVsZXMgPSB7Ci0JCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyMCwKKwkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjExICovCisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyMCwgMCksCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxMi4uMTMuIE5vIEhUNDAKKwkJICogY2hhbm5lbCBmaXRzIGhlcmUuICovCisJCVJFR19SVUxFKDI0NjctMTAsIDI0NzIrMTAsIDIwLCA2LCAyMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisJCQlOTDgwMjExX1JSRl9OT19JQlNTKSwKKwkJLyogSUVFRSA4MDIuMTEgY2hhbm5lbCAxNCAtIE9ubHkgSlAgZW5hYmxlcworCQkgKiB0aGlzIGFuZCBmb3IgODAyLjExYiBvbmx5ICovCisJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDIwLCA2LCAyMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisJCQlOTDgwMjExX1JSRl9OT19JQlNTIHwKKwkJCU5MODAyMTFfUlJGX05PX09GRE0pLAorCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMzYuLjQ4ICovCisJCVJFR19SVUxFKDUxODAtMTAsIDUyNDArMTAsIDQwLCA2LCAyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9OT19JQlNTKSwKKworCQkvKiBOQjogNTI2MCBNSHogLSA1NzAwIE1IeiByZXF1aWVzIERGUyAqLworCisJCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbCAxNDkuLjE2NSAqLworCQlSRUdfUlVMRSg1NzQ1LTEwLCA1ODI1KzEwLCA0MCwgNiwgMjAsCiAJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAogCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCiAJfQpAQCAtMTE1LDkgKzEyNSwxMSBAQAogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKIAotLyogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgorLyoKKyAqIFdlIGFzc3VtZSA0MCBNSHogYmFuZHdpZHRoIGZvciB0aGUgb2xkIHJlZ3VsYXRvcnkgd29yay4KICAqIFdlIG1ha2UgZW1waGFzaXMgd2UgYXJlIHVzaW5nIHRoZSBleGFjdCBzYW1lIGZyZXF1ZW5jaWVzCi0gKiBhcyBiZWZvcmUgKi8KKyAqIGFzIGJlZm9yZQorICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNiwKQEAgLTE1Niw4ICsxNjgsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGV1X3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA2LAotCS8qIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAotCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwkvKgorCSAqIFRoaXMgYWxwaGEyIGlzIGJvZ3VzLCB3ZSBsZWF2ZSBpdCBoZXJlIGp1c3QgZm9yIHN0dXBpZAorCSAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkgKi8KIAkuYWxwaGEyID0gICJFVSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjEzICovCkBAIC0yMjYsOCArMjQwLDEwIEBACiAJY2ZnODAyMTFfcmVnZG9tYWluID0gTlVMTDsKIH0KIAotLyogRHluYW1pYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0ZWQgYnkgdGhlIHdpcmVsZXNzCi0gKiBjb3JlIHVwb24gaW5pdGlhbGl6YXRpb24gKi8KKy8qCisgKiBEeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3RlZCBieSB0aGUgd2lyZWxlc3MKKyAqIGNvcmUgdXBvbiBpbml0aWFsaXphdGlvbgorICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfd29ybGRfcmVnZG9tYWluKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlCVUdfT04oIWxhc3RfcmVxdWVzdCk7CkBAIC0yNjgsOCArMjg0LDEwIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gd2FzIGJ1aWx0IGJ5IGRyaXZlcgotCSAqIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAqLworCS8qCisJICogU3BlY2lhbCBjYXNlIHdoZXJlIHJlZ3VsYXRvcnkgZG9tYWluIHdhcyBidWlsdCBieSBkcml2ZXIKKwkgKiBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKKwkgKi8KIAlpZiAoYWxwaGEyWzBdID09ICc5JyAmJiBhbHBoYTJbMV0gPT0gJzknKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNzksOSArMjk3LDExIEBACiB7CiAJaWYgKCFhbHBoYTIpCiAJCXJldHVybiBmYWxzZTsKLQkvKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCisJLyoKKwkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gaXMgdGhlCiAJICogcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbgotCSAqIHN0cnVjdHVyZXMgKi8KKwkgKiBzdHJ1Y3R1cmVzCisJICovCiAJaWYgKGFscGhhMlswXSA9PSAnOScgJiYgYWxwaGEyWzFdID09ICc4JykKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMzA2LDggKzMyNiwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZWQoY29uc3QgY2hhciAqYWxwaGEyKQorc3RhdGljIGJvb2wgcmVnZG9tX2NoYW5nZXMoY29uc3QgY2hhciAqYWxwaGEyKQogeworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKIAkJcmV0dXJuIHRydWU7CiAJaWYgKGFscGhhMl9lcXVhbChjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMiwgYWxwaGEyKSkKQEAgLTMzNCw4ICszNTYsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQotICogYmFzaXMgaW4gdXNlcnNwYWNlLiAqLworLyoKKyAqIFRoaXMgbGV0cyB1cyBrZWVwIHJlZ3VsYXRvcnkgY29kZSB3aGljaCBpcyB1cGRhdGVkIG9uIGEgcmVndWxhdG9yeQorICogYmFzaXMgaW4gdXNlcnNwYWNlLgorICovCiBzdGF0aWMgaW50IGNhbGxfY3JkYShjb25zdCBjaGFyICphbHBoYTIpCiB7CiAJY2hhciBjb3VudHJ5X2Vudls5ICsgMl0gPSAiQ09VTlRSWT0iOwpAQCAtNDQ3LDEwICs0NzEsMTIgQEAKICN1bmRlZiBPTkVfR0haX0lOX0tIWgogfQogCi0vKiBDb252ZXJ0cyBhIGNvdW50cnkgSUUgdG8gYSByZWd1bGF0b3J5IGRvbWFpbi4gQSByZWd1bGF0b3J5IGRvbWFpbgorLyoKKyAqIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBzdHJ1Y3R1cmUgaGFzIGEgbG90IG9mIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBJRSBkb2Vzbid0IHlldCBoYXZlLAogICogc28gZm9yIHRoZSBvdGhlciB2YWx1ZXMgd2UgdXNlIHVwcGVyIG1heCB2YWx1ZXMgYXMgd2Ugd2lsbCBpbnRlcnNlY3QKLSAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuICovCisgKiB3aXRoIG91ciB1c2Vyc3BhY2UgcmVndWxhdG9yeSBhZ2VudCB0byBnZXQgbG93ZXIgYm91bmRzLgorICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfMl9yZCgKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbiwKQEAgLTQ5NSw5ICs1MjEsMTEgQEAKIAogCSpjaGVja3N1bSBePSAoKGZsYWdzIF4gYWxwaGEyWzBdIF4gYWxwaGEyWzFdKSA8PCA4KTsKIAotCS8qIFdlIG5lZWQgdG8gYnVpbGQgYSByZWcgcnVsZSBmb3IgZWFjaCB0cmlwbGV0LCBidXQgZmlyc3Qgd2UgbXVzdAorCS8qCisJICogV2UgbmVlZCB0byBidWlsZCBhIHJlZyBydWxlIGZvciBlYWNoIHRyaXBsZXQsIGJ1dCBmaXJzdCB3ZSBtdXN0CiAJICogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcmVnIHJ1bGVzIHdlIHdpbGwgbmVlZC4gV2Ugd2lsbCBuZWVkIG9uZQotCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZCAqLworCSAqIGZvciBlYWNoIGNoYW5uZWwgc3ViYmFuZAorCSAqLwogCXdoaWxlIChjb3VudHJ5X2llX2xlbiA+PSAzKSB7CiAJCWludCBlbmRfY2hhbm5lbCA9IDA7CiAJCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0cmlwbGV0ID0KQEAgLTUzNSw5ICs1NjMsMTEgQEAKIAkJaWYgKGN1cl9zdWJfbWF4X2NoYW5uZWwgPCBjdXJfY2hhbm5lbCkKIAkJCXJldHVybiBOVUxMOwogCi0JCS8qIERvIG5vdCBhbGxvdyBvdmVybGFwcGluZyBjaGFubmVscy4gQWxzbyBjaGFubmVscworCQkvKgorCQkgKiBEbyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgY2hhbm5lbHMuIEFsc28gY2hhbm5lbHMKIAkJICogcGFzc2VkIGluIGVhY2ggc3ViYmFuZCBtdXN0IGJlIG1vbm90b25pY2FsbHkKLQkJICogaW5jcmVhc2luZyAqLworCQkgKiBpbmNyZWFzaW5nCisJCSAqLwogCQlpZiAobGFzdF9zdWJfbWF4X2NoYW5uZWwpIHsKIAkJCWlmIChjdXJfY2hhbm5lbCA8PSBsYXN0X3N1Yl9tYXhfY2hhbm5lbCkKIAkJCQlyZXR1cm4gTlVMTDsKQEAgLTU0NSwxMCArNTc1LDEyIEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAotCQkvKiBXaGVuIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyBzdXBwb3J0ZWQKKwkJLyoKKwkJICogV2hlbiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgc3VwcG9ydGVkCiAJCSAqIHdlIGNhbiB0aHJvdyBleHQgdHJpcGxldHMgYXMgcGFydCBvZiB0aGlzIHNvdXAsCiAJCSAqIGZvciBub3cgd2UgZG9uJ3QgY2FyZSB3aGVuIHRob3NlIGNoYW5nZSBhcyB3ZQotCQkgKiBkb24ndCBzdXBwb3J0IHRoZW0gKi8KKwkJICogZG9uJ3Qgc3VwcG9ydCB0aGVtCisJCSAqLwogCQkqY2hlY2tzdW0gXj0gKChjdXJfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDgpIHwKIAkJICAoKGN1cl9zdWJfbWF4X2NoYW5uZWwgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAxNikgfAogCQkgICgodHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgMjQpOwpAQCAtNTU5LDggKzU5MSwxMCBAQAogCQljb3VudHJ5X2llX2xlbiAtPSAzOwogCQludW1fcnVsZXMrKzsKIAotCQkvKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0Ci0JCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudCAqLworCQkvKgorCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0CisJCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudAorCQkgKi8KIAkJaWYgKG51bV9ydWxlcyA+IE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTKQogCQkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTg4LDggKzYyMiwxMCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2UgPSBOVUxMOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwogCi0JCS8qIE11c3QgcGFyc2UgaWYgZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHRydWUsCi0JCSAqIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQgKi8KKwkJLyoKKwkJICogTXVzdCBwYXJzZSBpZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSwKKwkJICogd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldAorCQkgKi8KIAkJaWYgKHRyaXBsZXQtPmV4dC5yZWdfZXh0ZW5zaW9uX2lkID49CiAJCQkJSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEKSB7CiAJCQljb3VudHJ5X2llICs9IDM7CkBAIC02MTEsMTAgKzY0NywxMiBAQAogCQkJZW5kX2NoYW5uZWwgPSAgdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCiAJCQkJKDQgKiAodHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMSkpOwogCi0JCS8qIFRoZSArMTAgaXMgc2luY2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGV4cGVjdHMKKwkJLyoKKwkJICogVGhlICsxMCBpcyBzaW5jZSB0aGUgcmVndWxhdG9yeSBkb21haW4gZXhwZWN0cwogCQkgKiB0aGUgYWN0dWFsIGJhbmQgZWRnZSwgbm90IHRoZSBjZW50ZXIgb2YgZnJlcSBmb3IKIAkJICogaXRzIHN0YXJ0IGFuZCBlbmQgZnJlcXMsIGFzc3VtaW5nIDIwIE1IeiBiYW5kd2lkdGggb24KLQkJICogdGhlIGNoYW5uZWxzIHBhc3NlZCAqLworCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkCisJCSAqLwogCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeiA9CiAJCQlNSFpfVE9fS0haKGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgKIAkJCQl0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsKSAtIDEwKTsKQEAgLTYyMiw5ICs2NjAsMTEgQEAKIAkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAogCQkJCWVuZF9jaGFubmVsKSArIDEwKTsKIAotCQkvKiBMYXJnZSBhcmJpdHJhcnkgdmFsdWVzLCB3ZSBpbnRlcnNlY3QgbGF0ZXIgKi8KLQkJLyogSW5jcmVtZW50IHRoaXMgaWYgd2UgZXZlciBzdXBwb3J0ID49IDQwIE1IeiBjaGFubmVscwotCQkgKiBpbiBJRUVFIDgwMi4xMSAqLworCQkvKgorCQkgKiBUaGVzZSBhcmUgbGFyZ2UgYXJiaXRyYXJ5IHZhbHVlcyB3ZSB1c2UgdG8gaW50ZXJzZWN0IGxhdGVyLgorCQkgKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCisJCSAqIGluIElFRUUgODAyLjExCisJCSAqLwogCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiA9IE1IWl9UT19LSFooNDApOwogCQlwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluID0gREJJX1RPX01CSSgxMDApOwogCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0oMTAwKTsKQEAgLTY0MCw4ICs2ODAsMTAgQEAKIH0KIAogCi0vKiBIZWxwZXIgZm9yIHJlZ2RvbV9pbnRlcnNlY3QoKSwgdGhpcyBkb2VzIHRoZSByZWFsCi0gKiBtYXRoZW1hdGljYWwgaW50ZXJzZWN0aW9uIGZ1biAqLworLyoKKyAqIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKKyAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuCisgKi8KIHN0YXRpYyBpbnQgcmVnX3J1bGVzX2ludGVyc2VjdCgKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMSwKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlMiwKQEAgLTcxOSwxMSArNzYxLDEzIEBACiAJaWYgKCFyZDEgfHwgIXJkMikKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBGaXJzdCB3ZSBnZXQgYSBjb3VudCBvZiB0aGUgcnVsZXMgd2UnbGwgbmVlZCwgdGhlbiB3ZSBhY3R1YWxseQorCS8qCisJICogRmlyc3Qgd2UgZ2V0IGEgY291bnQgb2YgdGhlIHJ1bGVzIHdlJ2xsIG5lZWQsIHRoZW4gd2UgYWN0dWFsbHkKIAkgKiBidWlsZCB0aGVtLiBUaGlzIGlzIHRvIHNvIHdlIGNhbiBtYWxsb2MoKSBhbmQgZnJlZSgpIGEKIAkgKiByZWdkb21haW4gb25jZS4gVGhlIHJlYXNvbiB3ZSB1c2UgcmVnX3J1bGVzX2ludGVyc2VjdCgpIGhlcmUKIAkgKiBpcyBpdCB3aWxsIHJldHVybiAtRUlOVkFMIGlmIHRoZSBydWxlIGNvbXB1dGVkIG1ha2VzIG5vIHNlbnNlLgotCSAqIEFsbCBydWxlcyB0aGF0IGRvIGNoZWNrIG91dCBPSyBhcmUgdmFsaWQuICovCisJICogQWxsIHJ1bGVzIHRoYXQgZG8gY2hlY2sgb3V0IE9LIGFyZSB2YWxpZC4KKwkgKi8KIAogCWZvciAoeCA9IDA7IHggPCByZDEtPm5fcmVnX3J1bGVzOyB4KyspIHsKIAkJcnVsZTEgPSAmcmQxLT5yZWdfcnVsZXNbeF07CkBAIC03NTEsMTQgKzc5NSwxOCBAQAogCQlydWxlMSA9ICZyZDEtPnJlZ19ydWxlc1t4XTsKIAkJZm9yICh5ID0gMDsgeSA8IHJkMi0+bl9yZWdfcnVsZXM7IHkrKykgewogCQkJcnVsZTIgPSAmcmQyLT5yZWdfcnVsZXNbeV07Ci0JCQkvKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKKwkJCS8qCisJCQkgKiBUaGlzIHRpbWUgYXJvdW5kIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrIGxldHMKIAkJCSAqIHdyaXRlIHRvIHRoZSB0YXJnZXQgcnVsZSBkaXJlY3RseSBzYXZpbmcgb3Vyc2VsdmVzCi0JCQkgKiBhIG1lbWNweSgpICovCisJCQkgKiBhIG1lbWNweSgpCisJCQkgKi8KIAkJCWludGVyc2VjdGVkX3J1bGUgPSAmcmQtPnJlZ19ydWxlc1tydWxlX2lkeF07CiAJCQlyID0gcmVnX3J1bGVzX2ludGVyc2VjdChydWxlMSwgcnVsZTIsCiAJCQkJaW50ZXJzZWN0ZWRfcnVsZSk7Ci0JCQkvKiBObyBuZWVkIHRvIG1lbXNldCBoZXJlIHRoZSBpbnRlcnNlY3RlZCBydWxlIGhlcmUgYXMKLQkJCSAqIHdlJ3JlIG5vdCB1c2luZyB0aGUgc3RhY2sgYW55bW9yZSAqLworCQkJLyoKKwkJCSAqIE5vIG5lZWQgdG8gbWVtc2V0IGhlcmUgdGhlIGludGVyc2VjdGVkIHJ1bGUgaGVyZSBhcworCQkJICogd2UncmUgbm90IHVzaW5nIHRoZSBzdGFjayBhbnltb3JlCisJCQkgKi8KIAkJCWlmIChyKQogCQkJCWNvbnRpbnVlOwogCQkJcnVsZV9pZHgrKzsKQEAgLTc3Nyw4ICs4MjUsMTAgQEAKIAlyZXR1cm4gcmQ7CiB9CiAKLS8qIFhYWDogYWRkIHN1cHBvcnQgZm9yIHRoZSByZXN0IG9mIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncywgd2UgbWF5Ci0gKiB3YW50IHRvIGp1c3QgaGF2ZSB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUgdXNlIHRoZXNlICovCisvKgorICogWFhYOiBhZGQgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLCB3ZSBtYXkKKyAqIHdhbnQgdG8ganVzdCBoYXZlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSB1c2UgdGhlc2UKKyAqLwogc3RhdGljIHUzMiBtYXBfcmVnZG9tX2ZsYWdzKHUzMiByZF9mbGFncykKIHsKIAl1MzIgY2hhbm5lbF9mbGFncyA9IDA7CkBAIC03OTEsNDggKzg0MSw0NSBAQAogCXJldHVybiBjaGFubmVsX2ZsYWdzOwogfQogCi0vKioKLSAqIGZyZXFfcmVnX2luZm8gLSBnZXQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeQotICogQGNlbnRlcl9mcmVxOiBGcmVxdWVuY3kgaW4gS0h6IGZvciB3aGljaCB3ZSB3YW50IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yCi0gKiBAYmFuZHdpZHRoOiB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50IHlvdSBoYXZlIGluIEtIeiwgaWYgeW91IGRvIG5vdCBoYXZlIG9uZQotICogCXlvdSBjYW4gc2V0IHRoaXMgdG8gMC4gSWYgdGhpcyBmcmVxdWVuY3kgaXMgYWxsb3dlZCB3ZSB0aGVuIHNldAotICogCXRoaXMgdmFsdWUgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBiYW5kd2lkdGguCi0gKiBAcmVnX3J1bGU6IHRoZSByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggd2UgaGF2ZSBmb3IgdGhpcyBmcmVxdWVuY3kKLSAqCi0gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBzcGVjaWZpYyBmcmVxdWVuY3kgb24KLSAqIGEgZ2l2ZW4gd2lyZWxlc3MgZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBhIHNwZWNpZmljIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBpdCB3YW50cyB0byBmb2xsb3cgd2UgcmVzcGVjdCB0aGF0IHVubGVzcyBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQKLSAqIGFuZCBwcm9jZXNzZWQgYWxyZWFkeS4KLSAqCi0gKiBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBhIHZhbGlkIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCBkb2VzCi0gKiBhcHBseSB0byB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgb3RoZXJ3aXNlIGl0IHJldHVybnMgbm9uLXplcm8uIEl0IHdpbGwKLSAqIGFsc28gcmV0dXJuIC1FUkFOR0UgaWYgd2UgZGV0ZXJtaW5lIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBkb2VzIG5vdCBldmVuIGhhdmUKLSAqIGEgcmVndWxhdG9yeSBydWxlIGZvciBhIGZyZXF1ZW5jeSByYW5nZSBpbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLiBTZWUKLSAqIGZyZXFfaW5fcnVsZV9iYW5kKCkgZm9yIG91ciBjdXJyZW50IGRlZmluaXRpb24gb2YgYSBiYW5kIC0tIHRoaXMgaXMgcHVyZWx5Ci0gKiBzdWJqZWN0aXZlIGFuZCByaWdodCBub3cgaXRzIDgwMi4xMSBzcGVjaWZpYy4KLSAqLwotc3RhdGljIGludCBmcmVxX3JlZ19pbmZvKHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCi0JCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKQorc3RhdGljIGludCBmcmVxX3JlZ19pbmZvX3JlZ2Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHUzMiBjZW50ZXJfZnJlcSwKKwkJCSAgICAgIHUzMiAqYmFuZHdpZHRoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1c3RvbV9yZWdkKQogewogCWludCBpOwogCWJvb2wgYmFuZF9ydWxlX2ZvdW5kID0gZmFsc2U7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CiAJdTMyIG1heF9iYW5kd2lkdGggPSAwOwogCi0JaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCisJcmVnZCA9IGN1c3RvbV9yZWdkID8gY3VzdG9tX3JlZ2QgOiBjZmc4MDIxMV9yZWdkb21haW47CisKKwkvKgorCSAqIEZvbGxvdyB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIHByZXNlbnQsIHVubGVzcyBhIGNvdW50cnkKKwkgKiBJRSBoYXMgYmVlbiBwcm9jZXNzZWQgb3IgYSB1c2VyIHdhbnRzIHRvIGhlbHAgY29tcGxhaW5jZSBmdXJ0aGVyCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFICYmCisJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSICYmCisJICAgIHdpcGh5LT5yZWdkKQorCQlyZWdkID0gd2lwaHktPnJlZ2Q7CisKKwlpZiAoIXJlZ2QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZzgwMjExX3JlZ2RvbWFpbi0+bl9yZWdfcnVsZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZWdkLT5uX3JlZ19ydWxlczsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJyOwogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyID0gTlVMTDsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwciA9IE5VTEw7CiAKLQkJcnIgPSAmY2ZnODAyMTFfcmVnZG9tYWluLT5yZWdfcnVsZXNbaV07CisJCXJyID0gJnJlZ2QtPnJlZ19ydWxlc1tpXTsKIAkJZnIgPSAmcnItPmZyZXFfcmFuZ2U7CiAJCXByID0gJnJyLT5wb3dlcl9ydWxlOwogCi0JCS8qIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKKwkJLyoKKwkJICogV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgb25lIGZyZXF1ZW5jeSBydWxlIHdhcwogCQkgKiB3YXMgaW4gY2VudGVyX2ZyZXEncyBiYW5kLCB0aGF0J3MgZW5vdWdoLCBzbyBsZXRzCi0JCSAqIG5vdCBvdmVyd3JpdGUgaXQgb25jZSBmb3VuZCAqLworCQkgKiBub3Qgb3ZlcndyaXRlIGl0IG9uY2UgZm91bmQKKwkJICovCiAJCWlmICghYmFuZF9ydWxlX2ZvdW5kKQogCQkJYmFuZF9ydWxlX2ZvdW5kID0gZnJlcV9pbl9ydWxlX2JhbmQoZnIsIGNlbnRlcl9mcmVxKTsKIApAQCAtODUwLDYgKzg5NywxNCBAQAogCiAJcmV0dXJuICFtYXhfYmFuZHdpZHRoOwogfQorRVhQT1JUX1NZTUJPTChmcmVxX3JlZ19pbmZvKTsKKworaW50IGZyZXFfcmVnX2luZm8oc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpCit7CisJcmV0dXJuIGZyZXFfcmVnX2luZm9fcmVnZCh3aXBoeSwgY2VudGVyX2ZyZXEsCisJCWJhbmR3aWR0aCwgcmVnX3J1bGUsIE5VTEwpOworfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgpCkBAIC04NjEsNiArOTE2LDExIEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5ID0gTlVMTDsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAogCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOwogCUJVR19PTihjaGFuX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscyk7CkBAIC04NjgsMTEgKzkyOCwxMiBAQAogCiAJZmxhZ3MgPSBjaGFuLT5vcmlnX2ZsYWdzOwogCi0JciA9IGZyZXFfcmVnX2luZm8oTUhaX1RPX0tIWihjaGFuLT5jZW50ZXJfZnJlcSksCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIE1IWl9UT19LSFooY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQkmbWF4X2JhbmR3aWR0aCwgJnJlZ19ydWxlKTsKIAogCWlmIChyKSB7Ci0JCS8qIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQorCQkvKgorCQkgKiBUaGlzIG1lYW5zIG5vIHJlZ3VsYXRvcnkgcnVsZSB3YXMgZm91bmQgaW4gdGhlIGNvdW50cnkgSUUKIAkJICogd2l0aCBhIGZyZXF1ZW5jeSByYW5nZSBvbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLCBzaW5jZQogCQkgKiBJRUVFLTgwMi4xMSBhbGxvd3MgZm9yIGEgY291bnRyeSBJRSB0byBoYXZlIGEgc3Vic2V0IG9mIHRoZQogCQkgKiByZWd1bGF0b3J5IGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGEgY291bnRyeSB3ZSBpZ25vcmUKQEAgLTg4Myw3ICs5NDQsOCBAQAogCQkgKiBodHRwOi8vdGlueXVybC5jb20vMTFkLWNsYXJpZmljYXRpb24KIAkJICovCiAJCWlmIChyID09IC1FUkFOR0UgJiYKLQkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBMZWF2aW5nIGNoYW5uZWwgJWQgTUh6ICIKIAkJCQkiaW50YWN0IG9uICVzIC0gbm8gcnVsZSBmb3VuZCBpbiBiYW5kIG9uICIKQEAgLTg5MSwxMCArOTUzLDEzIEBACiAJCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKICNlbmRpZgogCQl9IGVsc2UgewotCQkvKiBJbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgY291bnRyeSBJRSBoYXMgYXQgbGVhc3Qgb25lIHJlZyBydWxlCi0JCSAqIGZvciB0aGUgYmFuZCBzbyB3ZSByZXNwZWN0IGl0cyBiYW5kIGRlZmluaXRpb25zICovCisJCS8qCisJCSAqIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKKwkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMKKwkJICovCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwotCQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKKwkJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRGlzYWJsaW5nICIKIAkJCQkJImNoYW5uZWwgJWQgTUh6IG9uICVzIGR1ZSB0byAiCiAJCQkJCSJDb3VudHJ5IElFXG4iLApAQCAtOTA4LDYgKzk3MywyNCBAQAogCiAJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSICYmCisJICAgIHJlcXVlc3Rfd2lwaHkgJiYgcmVxdWVzdF93aXBoeSA9PSB3aXBoeSAmJgorCSAgICByZXF1ZXN0X3dpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSkgeworCQkvKgorCQkgKiBUaGlzIGdhdXJhbnRlZXMgdGhlIGRyaXZlcidzIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbgorCQkgKiB3aWxsIGFsd2F5cyBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgZnVydGhlciByZWd1bGF0b3J5CisJCSAqIHNldHRpbmdzCisJCSAqLworCQljaGFuLT5mbGFncyA9IGNoYW4tPm9yaWdfZmxhZ3MgPQorCQkJbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOworCQljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gY2hhbi0+b3JpZ19tYWcgPQorCQkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwkJY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFoobWF4X2JhbmR3aWR0aCk7CisJCWNoYW4tPm1heF9wb3dlciA9IGNoYW4tPm9yaWdfbXB3ciA9CisJCQkoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKKwkJcmV0dXJuOworCX0KKwogCWNoYW4tPmZsYWdzID0gZmxhZ3MgfCBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CiAJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IG1pbihjaGFuLT5vcmlnX21hZywKIAkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKSk7CkBAIC05MzEsMTMyICsxMDE0LDQwNyBAQAogCQloYW5kbGVfY2hhbm5lbCh3aXBoeSwgYmFuZCwgaSk7CiB9CiAKLXN0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyBib29sIGlnbm9yZV9yZWdfdXBkYXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCiB7CiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiB0cnVlOwotCWlmIChzZXRieSA9PSBSRUdET01fU0VUX0JZX0NPUkUgJiYKLQkJICB3aXBoeS0+ZndfaGFuZGxlc19yZWd1bGF0b3J5KQorCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgJiYKKwkJICB3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpCisJCXJldHVybiB0cnVlOworCS8qCisJICogd2lwaHktPnJlZ2Qgd2lsbCBiZSBzZXQgb25jZSB0aGUgZGV2aWNlIGhhcyBpdHMgb3duCisJICogZGVzaXJlZCByZWd1bGF0b3J5IGRvbWFpbiBzZXQKKwkgKi8KKwlpZiAod2lwaHktPnN0cmljdF9yZWd1bGF0b3J5ICYmICF3aXBoeS0+cmVnZCAmJgorCSAgICAhaXNfd29ybGRfcmVnZG9tKGxhc3RfcmVxdWVzdC0+YWxwaGEyKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSByZWdfc2V0X2J5IHNldGJ5KQorc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCWlmICghaWdub3JlX3JlZ191cGRhdGUoJmRydi0+d2lwaHksIHNldGJ5KSkKLQkJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBzZXRieSk7CisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBpbml0aWF0b3IpOwogfQogCi12b2lkIHdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRieSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkgICAgICBzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbikKK3sKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCisjZGVmaW5lIFJFR19ERUJVR19CRUFDT05fRkxBRyhkZXNjKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBFbmFibGluZyAiIGRlc2MgIiBvbiAiIFwKKwkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsIFwKKwkJcmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSwgXAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwocmVnX2JlYWNvbi0+Y2hhbi5jZW50ZXJfZnJlcSksIFwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2Vsc2UKKyNkZWZpbmUgUkVHX0RFQlVHX0JFQUNPTl9GTEFHKGRlc2MpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbY2hhbl9pZHhdOworCisJaWYgKGxpa2VseShjaGFuLT5jZW50ZXJfZnJlcSAhPSByZWdfYmVhY29uLT5jaGFuLmNlbnRlcl9mcmVxKSkKKwkJcmV0dXJuOworCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSB7CisJCWNoYW4tPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCVJFR19ERUJVR19CRUFDT05fRkxBRygiYWN0aXZlIHNjYW5uaW5nIik7CisJfQorCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSUJTUykgeworCQljaGFuLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJUkVHX0RFQlVHX0JFQUNPTl9GTEFHKCJiZWFjb25pbmciKTsKKwl9CisKKwljaGFuLT5iZWFjb25fZm91bmQgPSB0cnVlOworI3VuZGVmIFJFR19ERUJVR19CRUFDT05fRkxBRworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYSBzY2FuIG9uIGEgd2lwaHkgZmluZHMgYSBiZWFjb24gb24KKyAqIG5ldyBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIHdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJaGFuZGxlX3JlZ19iZWFjb24od2lwaHksIGksIHJlZ19iZWFjb24pOworfQorCisvKgorICogQ2FsbGVkIHVwb24gcmVnIGNoYW5nZXMgb3IgYSBuZXcgd2lwaHkgaXMgYWRkZWQKKyAqLworc3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX2JlYWNvbl9yZWcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX2JlYWNvbl9saXN0KSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdfYmVhY29uLCAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCWlmICghd2lwaHktPmJhbmRzW3JlZ19iZWFjb24tPmNoYW4uYmFuZF0pCisJCQljb250aW51ZTsKKwkJc2JhbmQgPSB3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXTsKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCQloYW5kbGVfcmVnX2JlYWNvbih3aXBoeSwgaSwgcmVnX2JlYWNvbik7CisJfQorfQorCitzdGF0aWMgYm9vbCByZWdfaXNfd29ybGRfcm9hbWluZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCWlmIChpc193b3JsZF9yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpIHx8CisJICAgICh3aXBoeS0+cmVnZCAmJiBpc193b3JsZF9yZWdkb20od2lwaHktPnJlZ2QtPmFscGhhMikpKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgd2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJlYXAgdGhlIGFkdmFudGFnZXMgb2YgcHJldmlvdXNseSBmb3VuZCBiZWFjb25zICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19iZWFjb25zKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJaWYgKCFyZWdfaXNfd29ybGRfcm9hbWluZyh3aXBoeSkpCisJCXJldHVybjsKKwl3aXBoeV91cGRhdGVfYmVhY29uX3JlZyh3aXBoeSk7Cit9CisKK3ZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCWlmIChpZ25vcmVfcmVnX3VwZGF0ZSh3aXBoeSwgaW5pdGlhdG9yKSkKKwkJZ290byBvdXQ7CisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJaGFuZGxlX2JhbmQod2lwaHksIGJhbmQpOworCX0KK291dDoKKwlyZWdfcHJvY2Vzc19iZWFjb25zKHdpcGh5KTsKKwlpZiAod2lwaHktPnJlZ19ub3RpZmllcikKKwkJd2lwaHktPnJlZ19ub3RpZmllcih3aXBoeSwgbGFzdF9yZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWxfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkJICB1bnNpZ25lZCBpbnQgY2hhbl9pZHgsCisJCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwlpbnQgcjsKKwl1MzIgbWF4X2JhbmR3aWR0aCA9IDA7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGUgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisJQlVHX09OKGNoYW5faWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKTsKKwljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tjaGFuX2lkeF07CisKKwlyID0gZnJlcV9yZWdfaW5mb19yZWdkKHdpcGh5LCBNSFpfVE9fS0haKGNoYW4tPmNlbnRlcl9mcmVxKSwKKwkJJm1heF9iYW5kd2lkdGgsICZyZWdfcnVsZSwgcmVnZCk7CisKKwlpZiAocikgeworCQljaGFuLT5mbGFncyA9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCQlyZXR1cm47CisJfQorCisJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKKworCWNoYW4tPmZsYWdzIHw9IG1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKKwljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKwljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihtYXhfYmFuZHdpZHRoKTsKKwljaGFuLT5tYXhfcG93ZXIgPSAoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JhbmRfY3VzdG9tKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCUJVR19PTighd2lwaHktPmJhbmRzW2JhbmRdKTsKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQloYW5kbGVfY2hhbm5lbF9jdXN0b20od2lwaHksIGJhbmQsIGksIHJlZ2QpOworfQorCisvKiBVc2VkIGJ5IGRyaXZlcnMgcHJpb3IgdG8gd2lwaHkgcmVnaXN0cmF0aW9uICovCit2b2lkIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2QpCiB7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKIAkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKLQkJCWhhbmRsZV9iYW5kKHdpcGh5LCBiYW5kKTsKLQkJaWYgKHdpcGh5LT5yZWdfbm90aWZpZXIpCi0JCQl3aXBoeS0+cmVnX25vdGlmaWVyKHdpcGh5LCBzZXRieSk7CisJCQloYW5kbGVfYmFuZF9jdXN0b20od2lwaHksIGJhbmQsIHJlZ2QpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi0vKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQotICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMgKi8KK3N0YXRpYyBpbnQgcmVnX2NvcHlfcmVnZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqKmRzdF9yZWdkLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzcmNfcmVnZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKKwlpbnQgc2l6ZV9vZl9yZWdkID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNpemVfb2ZfcmVnZCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikgKworCSAgKChzcmNfcmVnZC0+bl9yZWdfcnVsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwlyZWdkID0ga3phbGxvYyhzaXplX29mX3JlZ2QsIEdGUF9LRVJORUwpOworCWlmICghcmVnZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocmVnZCwgc3JjX3JlZ2QsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbikpOworCisJZm9yIChpID0gMDsgaSA8IHNyY19yZWdkLT5uX3JlZ19ydWxlczsgaSsrKQorCQltZW1jcHkoJnJlZ2QtPnJlZ19ydWxlc1tpXSwgJnNyY19yZWdkLT5yZWdfcnVsZXNbaV0sCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOworCisJKmRzdF9yZWdkID0gcmVnZDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCBieSBpZ25vcmVfcmVxdWVzdCgpIHRvIGluZGljYXRlCisgKiBpdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHdlIHNob3VsZCBpbnRlcnNlY3QgdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICovCiAjZGVmaW5lIFJFR19JTlRFUlNFQ1QJMQogCiAvKiBUaGlzIGhhcyB0aGUgbG9naWMgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIGEgbmV3IHJlcXVlc3QKICAqIHNob3VsZCBiZSBpZ25vcmVkLiAqLwotc3RhdGljIGludCBpZ25vcmVfcmVxdWVzdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJICBjb25zdCBjaGFyICphbHBoYTIpCitzdGF0aWMgaW50IGlnbm9yZV9yZXF1ZXN0KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnBlbmRpbmdfcmVxdWVzdCkKIHsKKwlzdHJ1Y3Qgd2lwaHkgKmxhc3Rfd2lwaHkgPSBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCS8qIEFsbCBpbml0aWFsIHJlcXVlc3RzIGFyZSByZXNwZWN0ZWQgKi8KIAlpZiAoIWxhc3RfcmVxdWVzdCkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKHNldF9ieSkgewotCWNhc2UgUkVHRE9NX1NFVF9CWV9JTklUOgorCXN3aXRjaCAocGVuZGluZ19yZXF1ZXN0LT5pbml0aWF0b3IpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgogCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09SRToKLQkJLyoKLQkJICogQWx3YXlzIHJlc3BlY3QgbmV3IHdpcmVsZXNzIGNvcmUgaGludHMsIHNob3VsZCBvbmx5IGhhcHBlbgotCQkgKiB3aGVuIHVwZGF0aW5nIHRoZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBhdCBpbml0LgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6Ci0JCWlmICh1bmxpa2VseSghaXNfYW5fYWxwaGEyKGFscGhhMikpKQorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisKKwkJbGFzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKKwkJaWYgKHVubGlrZWx5KCFpc19hbl9hbHBoYTIocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCQlpZiAobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkgeworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCQlpZiAobGFzdF93aXBoeSAhPSB3aXBoeSkgewogCQkJCS8qCiAJCQkJICogVHdvIGNhcmRzIHdpdGggdHdvIEFQcyBjbGFpbWluZyBkaWZmZXJlbnQKIAkJCQkgKiBkaWZmZXJlbnQgQ291bnRyeSBJRSBhbHBoYTJzLiBXZSBjb3VsZAogCQkJCSAqIGludGVyc2VjdCB0aGVtLCBidXQgdGhhdCBzZWVtcyB1bmxpa2VseQogCQkJCSAqIHRvIGJlIGNvcnJlY3QuIFJlamVjdCBzZWNvbmQgb25lIGZvciBub3cuCiAJCQkJICovCi0JCQkJaWYgKCFhbHBoYTJfZXF1YWwoYWxwaGEyLAotCQkJCQkJICBjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMikpCisJCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJCXJldHVybiAtRUFMUkVBRFk7CiAJCQl9Ci0JCQkvKiBUd28gY29uc2VjdXRpdmUgQ291bnRyeSBJRSBoaW50cyBvbiB0aGUgc2FtZSB3aXBoeS4KLQkJCSAqIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBlYXJseSBieSB0aGUgZHJpdmVyL3N0YWNrICovCi0JCQlpZiAoV0FSTl9PTighYWxwaGEyX2VxdWFsKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyLAotCQkJCSAgYWxwaGEyKSkpCisJCQkvKgorCQkJICogVHdvIGNvbnNlY3V0aXZlIENvdW50cnkgSUUgaGludHMgb24gdGhlIHNhbWUgd2lwaHkuCisJCQkgKiBUaGlzIHNob3VsZCBiZSBwaWNrZWQgdXAgZWFybHkgYnkgdGhlIGRyaXZlci9zdGFjaworCQkJICovCisJCQlpZiAoV0FSTl9PTihyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpKQogCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJfQogCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKLQljYXNlIFJFR0RPTV9TRVRfQllfRFJJVkVSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9EUklWRVIpCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOgorCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpIHsKKwkJCWlmIChpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pKQorCQkJCXJldHVybiAwOworCQkJaWYgKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCQlyZXR1cm4gMDsKIAkJCXJldHVybiAtRUFMUkVBRFk7Ci0JCXJldHVybiAwOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9VU0VSOgotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCQl9CisKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBoYXBwZW4gaWYgeW91IHVucGx1ZyBhbmQgcGx1ZyB5b3VyIGNhcmQKKwkJICogYmFjayBpbiBvciBpZiB5b3UgYWRkIGEgbmV3IGRldmljZSBmb3Igd2hpY2ggdGhlIHByZXZpb3VzbHkKKwkJICogbG9hZGVkIGNhcmQgYWxzbyBhZ3JlZXMgb24gdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCisJCXJldHVybiBSRUdfSU5URVJTRUNUOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKIAkJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCQkvKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCi0JCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAgKi8KLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfVVNFUiAmJgorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBrbm93cyBiZXR0ZXIgdGhlIHVzZXIgc2hvdWxkIHNldCB0aGUgcmVnZG9tCisJCSAqIHRvIHRoZWlyIGNvdW50cnkgYmVmb3JlIHRoZSBJRSBpcyBwaWNrZWQgdXAKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiAmJgogCQkJICBsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJLyoKKwkJICogUHJvY2VzcyB1c2VyIHJlcXVlc3RzIG9ubHkgYWZ0ZXIgcHJldmlvdXMgdXNlci9kcml2ZXIvY29yZQorCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgfHwKKwkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKSB7CisJCQlpZiAocmVnZG9tX2NoYW5nZXMobGFzdF9yZXF1ZXN0LT5hbHBoYTIpKQorCQkJCXJldHVybiAtRUFHQUlOOworCQl9CisKKwkJaWYgKCFpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pICYmCisJCSAgICAhcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQorCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfZHJ2X211dGV4ICovCi1pbnQgX19yZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldF9ieSwKLQkJCWNvbnN0IGNoYXIgKmFscGhhMiwKLQkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtLAotCQkJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52KQorLyoqCisgKiBfX3JlZ3VsYXRvcnlfaGludCAtIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUgYSByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiBpZiB0aGUgaGludCBjb21lcyBmcm9tIGNvdW50cnkgaW5mb3JtYXRpb24gZnJvbSBhbiBBUCwgdGhpcworICoJaXMgcmVxdWlyZWQgdG8gYmUgc2V0IHRvIHRoZSB3aXBoeSB0aGF0IHJlY2VpdmVkIHRoZSBpbmZvcm1hdGlvbgorICogQHBlbmRpbmdfcmVxdWVzdDogdGhlIHJlZ3VsYXRvcnkgcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisgKgorICogVGhlIFdpcmVsZXNzIHN1YnN5c3RlbSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZQorICogd2hhdCBpdCBiZWxpZXZlcyBzaG91bGQgYmUgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisgKgorICogUmV0dXJucyB6ZXJvIGlmIGFsbCB3ZW50IGZpbmUsICUtRUFMUkVBRFkgaWYgYSByZWd1bGF0b3J5IGRvbWFpbiBoYWQKKyAqIGFscmVhZHkgYmVlbiBzZXQgb3Igb3RoZXIgc3RhbmRhcmQgZXJyb3IgY29kZXMuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfbXV0ZXgKKyAqLworc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAlib29sIGludGVyc2VjdCA9IGZhbHNlOwogCWludCByID0gMDsKIAotCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgc2V0X2J5LCBhbHBoYTIpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKLQlpZiAociA9PSBSRUdfSU5URVJTRUNUKQorCXIgPSBpZ25vcmVfcmVxdWVzdCh3aXBoeSwgcGVuZGluZ19yZXF1ZXN0KTsKKworCWlmIChyID09IFJFR19JTlRFUlNFQ1QpIHsKKwkJaWYgKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7CisJCQlpZiAocikgeworCQkJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KIAkJaW50ZXJzZWN0ID0gdHJ1ZTsKLQllbHNlIGlmIChyKQorCX0gZWxzZSBpZiAocikgeworCQkvKgorCQkgKiBJZiB0aGUgcmVndWxhdG9yeSBkb21haW4gYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZQorCQkgKiBkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBzZXQganVzdCBjb3B5IGl0IHRvIHRoZQorCQkgKiB3aXBoeQorCQkgKi8KKwkJaWYgKHIgPT0gLUVBTFJFQURZICYmCisJCSAgICBwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJciA9IHJlZ19jb3B5X3JlZ2QoJndpcGh5LT5yZWdkLCBjZmc4MDIxMV9yZWdkb21haW4pOworCQkJaWYgKHIpIHsKKwkJCQlrZnJlZShwZW5kaW5nX3JlcXVlc3QpOworCQkJCXJldHVybiByOworCQkJfQorCQkJciA9IC1FQUxSRUFEWTsKKwkJCWdvdG8gbmV3X3JlcXVlc3Q7CisJCX0KKwkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKIAkJcmV0dXJuIHI7CisJfQogCi0JcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAotCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcXVlc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOwotCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKLQlyZXF1ZXN0LT5pbml0aWF0b3IgPSBzZXRfYnk7Ci0JcmVxdWVzdC0+d2lwaHkgPSB3aXBoeTsKLQlyZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNvdW50cnlfaWVfY2hlY2tzdW07Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBlbnY7Ci0KK25ld19yZXF1ZXN0OgogCWtmcmVlKGxhc3RfcmVxdWVzdCk7Ci0JbGFzdF9yZXF1ZXN0ID0gcmVxdWVzdDsKKworCWxhc3RfcmVxdWVzdCA9IHBlbmRpbmdfcmVxdWVzdDsKKwlsYXN0X3JlcXVlc3QtPmludGVyc2VjdCA9IGludGVyc2VjdDsKKworCXBlbmRpbmdfcmVxdWVzdCA9IE5VTEw7CisKKwkvKiBXaGVuIHIgPT0gUkVHX0lOVEVSU0VDVCB3ZSBkbyBuZWVkIHRvIGNhbGwgQ1JEQSAqLworCWlmIChyIDwgMCkgeworCQkvKgorCQkgKiBTaW5jZSBDUkRBIHdpbGwgbm90IGJlIGNhbGxlZCBpbiB0aGlzIGNhc2UgYXMgd2UgYWxyZWFkeQorCQkgKiBoYXZlIGFwcGxpZWQgdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiBiZWZvcmUgd2UganVzdAorCQkgKiBpbmZvcm0gdXNlcnNwYWNlIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSByZXF1ZXN0CisJCSAqLworCQlpZiAociA9PSAtRUFMUkVBRFkpCisJCQlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChsYXN0X3JlcXVlc3QpOworCQlyZXR1cm4gcjsKKwl9CisKIAkvKgogCSAqIE5vdGU6IFdoZW4gQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIGVuYWJsZWQKIAkgKiBBTkQgaWYgQ1JEQSBpcyBOT1QgcHJlc2VudCBub3RoaW5nIHdpbGwgaGFwcGVuLCBpZiBzb21lb25lCkBAIC0xMDY3LDI5ICsxNDI1LDE5NCBAQAogCSAqCiAJICogdG8gaW50ZXJzZWN0IHdpdGggdGhlIHN0YXRpYyByZAogCSAqLwotCXJldHVybiBjYWxsX2NyZGEoYWxwaGEyKTsKKwlyZXR1cm4gY2FsbF9jcmRhKGxhc3RfcmVxdWVzdC0+YWxwaGEyKTsKIH0KIAotdm9pZCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQorLyogVGhpcyBjdXJyZW50bHkgb25seSBwcm9jZXNzZXMgdXNlciBhbmQgZHJpdmVyIHJlZ3VsYXRvcnkgaGludHMgKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX2hpbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVnX3JlcXVlc3QpCiB7CisJaW50IHIgPSAwOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBOVUxMOworCisJQlVHX09OKCFyZWdfcmVxdWVzdC0+YWxwaGEyKTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh3aXBoeV9pZHhfdmFsaWQocmVnX3JlcXVlc3QtPndpcGh5X2lkeCkpCisJCXdpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKHJlZ19yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiAmJgorCSAgICAhd2lwaHkpIHsKKwkJa2ZyZWUocmVnX3JlcXVlc3QpOworCQlnb3RvIG91dDsKKwl9CisKKwlyID0gX19yZWd1bGF0b3J5X2hpbnQod2lwaHksIHJlZ19yZXF1ZXN0KTsKKwkvKiBUaGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgdGhlIG9yaWdfKiBwYXJhbWV0ZXJzIGFyZSBzYXZlZCAqLworCWlmIChyID09IC1FQUxSRUFEWSAmJiB3aXBoeSAmJiB3aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkpCisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCByZWdfcmVxdWVzdC0+aW5pdGlhdG9yKTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKK30KKworLyogUHJvY2Vzc2VzIHJlZ3VsYXRvcnkgaGludHMsIHRoaXMgaXMgYWxsIHRoZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfKiAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfcGVuZGluZ19oaW50cyh2b2lkKQorCXsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdDsKKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7CisJCXJlZ19yZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmcmVnX3JlcXVlc3RzX2xpc3QsCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0LAorCQkJCQkgICAgICAgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKworCQlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCQlyZWdfcHJvY2Vzc19oaW50KHJlZ19yZXF1ZXN0KTsKKwkJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7Cit9CisKKy8qIFByb2Nlc3NlcyBiZWFjb24gaGludHMgLS0gdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNvdW50cnkgSUVzICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cyh2b2lkKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCByZWdfYmVhY29uICpwZW5kaW5nX2JlYWNvbiwgKnRtcDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCS8qIFRoaXMgZ29lcyB0aHJvdWdoIHRoZSBfcGVuZGluZ18gYmVhY29uIGxpc3QgKi8KKwlzcGluX2xvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX3BlbmRpbmdfYmVhY29ucykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZW5kaW5nX2JlYWNvbiwgdG1wLAorCQkJCSAmcmVnX3BlbmRpbmdfYmVhY29ucywgbGlzdCkgeworCisJCWxpc3RfZGVsX2luaXQoJnBlbmRpbmdfYmVhY29uLT5saXN0KTsKKworCQkvKiBBcHBsaWVzIHRoZSBiZWFjb24gaGludCB0byBjdXJyZW50IHdpcGh5cyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQorCQkJd2lwaHlfdXBkYXRlX25ld19iZWFjb24oJmRydi0+d2lwaHksIHBlbmRpbmdfYmVhY29uKTsKKworCQkvKiBSZW1lbWJlcnMgdGhlIGJlYWNvbiBoaW50IGZvciBuZXcgd2lwaHlzIG9yIHJlZyBjaGFuZ2VzICovCisJCWxpc3RfYWRkX3RhaWwoJnBlbmRpbmdfYmVhY29uLT5saXN0LCAmcmVnX2JlYWNvbl9saXN0KTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKK291dDoKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgcmVnX3RvZG8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHMoKTsKKwlyZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cygpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHJlZ193b3JrLCByZWdfdG9kbyk7CisKK3N0YXRpYyB2b2lkIHF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJlcXVlc3QtPmxpc3QsICZyZWdfcmVxdWVzdHNfbGlzdCk7CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKworCXNjaGVkdWxlX3dvcmsoJnJlZ193b3JrKTsKK30KKworLyogQ29yZSByZWd1bGF0b3J5IGhpbnQgLS0gaGFwcGVucyBvbmNlIGR1cmluZyBjZmc4MDIxMV9pbml0KCkgKi8KK3N0YXRpYyBpbnQgcmVndWxhdG9yeV9oaW50X2NvcmUoY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04obGFzdF9yZXF1ZXN0KTsKKworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwKKwkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKKwlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVXNlciBoaW50cyAqLworaW50IHJlZ3VsYXRvcnlfaGludF91c2VyKGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCiAJQlVHX09OKCFhbHBoYTIpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9EUklWRVIsIGFscGhhMiwgMCwgRU5WSVJPTl9BTlkpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CisJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgaGludHMgKi8KK2ludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlCVUdfT04oIWFscGhhMik7CisJQlVHX09OKCF3aXBoeSk7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKworCS8qIE11c3QgaGF2ZSByZWdpc3RlcmVkIHdpcGh5IGZpcnN0ICovCisJQlVHX09OKCF3aXBoeV9pZHhfdmFsaWQocmVxdWVzdC0+d2lwaHlfaWR4KSk7CisKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50KTsKIAogc3RhdGljIGJvb2wgcmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQl1MzIgY291bnRyeV9pZV9jaGVja3N1bSkKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJaWYgKCFyZXF1ZXN0X3dpcGh5KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KSkKKworCWlmIChsaWtlbHkocmVxdWVzdF93aXBoeSAhPSB3aXBoeSkpCiAJCXJldHVybiAhY291bnRyeV9pZV9pbnRlZ3JpdHlfY2hhbmdlcyhjb3VudHJ5X2llX2NoZWNrc3VtKTsKLQkvKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQorCS8qCisJICogV2Ugc2hvdWxkIG5vdCBoYXZlIGxldCB0aGVzZSB0aHJvdWdoIGF0IHRoaXMgcG9pbnQsIHRoZXkKIAkgKiBzaG91bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBlYXJsaWVyIGJ5IHRoZSBmaXJzdCBhbHBoYTIgY2hlY2sKLQkgKiBvbiB0aGUgZGV2aWNlICovCisJICogb24gdGhlIGRldmljZQorCSAqLwogCWlmIChXQVJOX09OKCFjb3VudHJ5X2llX2ludGVncml0eV9jaGFuZ2VzKGNvdW50cnlfaWVfY2hlY2tzdW0pKSkKIAkJcmV0dXJuIHRydWU7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTEwMywxMSArMTYyNiwxNCBAQAogCWNoYXIgYWxwaGEyWzJdOwogCXUzMiBjaGVja3N1bSA9IDA7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52ID0gRU5WSVJPTl9BTlk7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKIAotCWlmICghbGFzdF9yZXF1ZXN0KQorCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0KSkgeworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwl9CiAKIAkvKiBJRSBsZW4gbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5IDIgKi8KIAlpZiAoY291bnRyeV9pZV9sZW4gJiAweDAxKQpAQCAtMTExNiw5ICsxNjQyLDExIEBACiAJaWYgKGNvdW50cnlfaWVfbGVuIDwgSUVFRTgwMjExX0NPVU5UUllfSUVfTUlOX0xFTikKIAkJZ290byBvdXQ7CiAKLQkvKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCisJLyoKKwkgKiBQZW5kaW5nIGNvdW50cnkgSUUgcHJvY2Vzc2luZywgdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHdlCiAJICogY2FsbCBDUkRBIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlIGlmIGEgYmVhY29uIHdhcyByZWNlaXZlZCBiZWZvcmUKLQkgKiB3ZSB3ZXJlIGFibGUgdG8gcHJvY2VzcyB0aGUgbGFzdCByZWd1bGF0b3J5X2hpbnRfMTFkKCkgY2FsbCAqLworCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsCisJICovCiAJaWYgKGNvdW50cnlfaWVfcmVnZG9tYWluKQogCQlnb3RvIG91dDsKIApAQCAtMTEzMCwzMyArMTY1OCw0NCBAQAogCWVsc2UgaWYgKGNvdW50cnlfaWVbMl0gPT0gJ08nKQogCQllbnYgPSBFTlZJUk9OX09VVERPT1I7CiAKLQkvKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KKwkvKgorCSAqIFdlIHdpbGwgcnVuIHRoaXMgZm9yICpldmVyeSogYmVhY29uIHByb2Nlc3NlZCBmb3IgdGhlIEJTU0lELCBzbwogCSAqIHdlIG9wdGltaXplIGFuIGVhcmx5IGNoZWNrIHRvIGV4aXQgb3V0IGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBkbyBhbnl0aGluZyAqLwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSkpIHsKKwkgKiBkbyBhbnl0aGluZworCSAqLworCWlmIChsaWtlbHkod2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpIHsKIAkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnZfbGFzdF9pZTsKIAotCQlkcnZfbGFzdF9pZSA9IHdpcGh5X3RvX2RldihsYXN0X3JlcXVlc3QtPndpcGh5KTsKKwkJZHJ2X2xhc3RfaWUgPQorCQkJY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAKLQkJLyogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAotCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBICovCi0JCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSA9PSB3aXBoeSkpIHsKLQkJCS8qIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAgKi8KKwkJLyoKKwkJICogTGV0cyBrZWVwIHRoaXMgc2ltcGxlIC0tIHdlIHRydXN0IHRoZSBmaXJzdCBBUAorCQkgKiBhZnRlciB3ZSBpbnRlcnNlY3Qgd2l0aCBDUkRBCisJCSAqLworCQlpZiAobGlrZWx5KCZkcnZfbGFzdF9pZS0+d2lwaHkgPT0gd2lwaHkpKSB7CisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdGhpcyB3aXBoeSB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCS8qIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAorCQkJLyoKKwkJCSAqIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAogCQkJICogd2FzIHJlY29uZmlndXJlZC4gWFhYOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUKIAkJCSAqIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZHMgYW5kIGdvZXMgdG8gZ29lcwogCQkJICogdG8gYW5vdGhlciBjb3VudHJ5LCBhbmQgdGhlbiBnZXRzIElFcyBmcm9tIGFuCi0JCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyAqLworCQkJICogQVAgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MKKwkJCSAqLwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7Ci0JCQkvKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwICovCisJCQkvKgorCQkJICogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdHdvIHNlcGFyYXRlIHdpcGh5cyB3aXRoCisJCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcAorCQkJICovCiAJCQlpZiAobGlrZWx5KGFscGhhMl9lcXVhbChkcnZfbGFzdF9pZS0+Y291bnRyeV9pZV9hbHBoYTIsCiAJCQkJICBhbHBoYTIpICYmCiAJCQkJICBlbnYgPT0gZHJ2X2xhc3RfaWUtPmVudikpIHsKQEAgLTExNzEsMjggKzE3MTAsOTcgQEAKIAlpZiAoIXJkKQogCQlnb3RvIG91dDsKIAotCS8qIFRoaXMgd2lsbCBub3QgaGFwcGVuIHJpZ2h0IG5vdyBidXQgd2UgbGVhdmUgaXQgaGVyZSBmb3IgdGhlCisJLyoKKwkgKiBUaGlzIHdpbGwgbm90IGhhcHBlbiByaWdodCBub3cgYnV0IHdlIGxlYXZlIGl0IGhlcmUgZm9yIHRoZQogCSAqIHRoZSBmdXR1cmUgd2hlbiB3ZSB3YW50IHRvIGFkZCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0IGFuZCBoYXZpbmcKIAkgKiB0aGUgdXNlciBtb3ZlIHRvIGFub3RoZXIgY291bnRyeSBhZnRlciBkb2luZyBzbywgb3IgaGF2aW5nIHRoZSB1c2VyCi0JICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuIFRoaXMgaXMgd2h5Ci0JICogdGhpcyBpcyBtYXJrZWQgYXMgbGlrbGV5KCkuIElmIHdlIGhpdCB0aGlzIGJlZm9yZSB3ZSBhZGQgdGhpcyBzdXBwb3J0Ci0JICogd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZiBpdCBhcyBpdCB3b3VsZCBpbmRpY2F0ZSBhIG1pc3Rha2UgaW4gdGhlCi0JICogY3VycmVudCBkZXNpZ24gICovCi0JaWYgKGxpa2VseShXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkpCi0JCWdvdG8gb3V0OworCSAqIG1vdmUgdG8gYW5vdGhlciBBUC4gUmlnaHQgbm93IHdlIGp1c3QgdHJ1c3QgdGhlIGZpcnN0IEFQLgorCSAqCisJICogSWYgd2UgaGl0IHRoaXMgYmVmb3JlIHdlIGFkZCB0aGlzIHN1cHBvcnQgd2Ugd2FudCB0byBiZSBpbmZvcm1lZCBvZgorCSAqIGl0IGFzIGl0IHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBpbiB0aGUgY3VycmVudCBkZXNpZ24KKwkgKi8KKwlpZiAoV0FSTl9PTihyZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQod2lwaHksIGNoZWNrc3VtKSkpCisJCWdvdG8gZnJlZV9yZF9vdXQ7CiAKLQkvKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KLQkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdCAqLworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlnb3RvIGZyZWVfcmRfb3V0OworCisJLyoKKwkgKiBXZSBrZWVwIHRoaXMgYXJvdW5kIGZvciB3aGVuIENSREEgY29tZXMgYmFjayB3aXRoIGEgcmVzcG9uc2Ugc28KKwkgKiB3ZSBjYW4gaW50ZXJzZWN0IHdpdGggdGhhdAorCSAqLwogCWNvdW50cnlfaWVfcmVnZG9tYWluID0gcmQ7CiAKLQlfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAotCQljb3VudHJ5X2llX3JlZ2RvbWFpbi0+YWxwaGEyLCBjaGVja3N1bSwgZW52KTsKKwlyZXF1ZXN0LT53aXBoeV9pZHggPSBnZXRfd2lwaHlfaWR4KHdpcGh5KTsKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOworCXJlcXVlc3QtPmFscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU7CisJcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOworCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7CisKKwlyZXR1cm47CisKK2ZyZWVfcmRfb3V0OgorCWtmcmVlKHJkKTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludF8xMWQpOwogCitzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCit7CisJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fAorCSAgICBmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxMykgfHwKKwkgICAgZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTQpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbjsKKworCWlmIChsaWtlbHkoKGJlYWNvbl9jaGFuLT5iZWFjb25fZm91bmQgfHwKKwkgICAgKGJlYWNvbl9jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSB8fAorCSAgICAoYmVhY29uX2NoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICAgIWZyZXFfaXNfY2hhbl8xMl8xM18xNChiZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEpKSkpKQorCQlyZXR1cm4gMDsKKworCXJlZ19iZWFjb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnX2JlYWNvbiksIGdmcCk7CisJaWYgKCFyZWdfYmVhY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IEZvdW5kIG5ldyBiZWFjb24gb24gIgorCQkiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwKKwkJYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxLAorCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSwKKwkJd2lwaHlfbmFtZSh3aXBoeSkpOworI2VuZGlmCisJbWVtY3B5KCZyZWdfYmVhY29uLT5jaGFuLCBiZWFjb25fY2hhbiwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCisKKwkvKgorCSAqIFNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBCSCBvciBhbmQgbm9uLUJIIGNvbnRleHQKKwkgKiB3ZSBtdXN0IHVzZSBzcGluX2xvY2tfYmgoKQorCSAqLworCXNwaW5fbG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZWdfYmVhY29uLT5saXN0LCAmcmVnX3BlbmRpbmdfYmVhY29ucyk7CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcmRfcnVsZXMoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMTIwOCw4ICsxODE2LDEwIEBACiAJCWZyZXFfcmFuZ2UgPSAmcmVnX3J1bGUtPmZyZXFfcmFuZ2U7CiAJCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAKLQkJLyogVGhlcmUgbWF5IG5vdCBiZSBkb2N1bWVudGF0aW9uIGZvciBtYXggYW50ZW5uYSBnYWluCi0JCSAqIGluIGNlcnRhaW4gcmVnaW9ucyAqLworCQkvKgorCQkgKiBUaGVyZSBtYXkgbm90IGJlIGRvY3VtZW50YXRpb24gZm9yIG1heCBhbnRlbm5hIGdhaW4KKwkJICogaW4gY2VydGFpbiByZWdpb25zCisJCSAqLwogCQlpZiAocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0KCVkIEtIeiAtICVkIEtIeiBAICVkIEtIeiksICIKIAkJCQkiKCVkIG1CaSwgJWQgbUJtKVxuIiwKQEAgLTEyMzIsMTMgKzE4NDIsMTMgQEAKIHsKIAogCWlmIChpc19pbnRlcnNlY3RlZF9hbHBoYTIocmQtPmFscGhhMikpIHsKLQkJc3RydWN0IHdpcGh5ICp3aXBoeSA9IE5VTEw7Ci0JCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCi0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5KSB7Ci0JCQkJd2lwaHkgPSBsYXN0X3JlcXVlc3QtPndpcGh5OwotCQkJCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCQkJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKKwkJCQlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisJCQlpZiAoZHJ2KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCiAJCQkJCSJkb21haW4gdXBkYXRlZCBieSBBUCB0bzogJWMlY1xuIiwKIAkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKQEAgLTEyNDgsNyArMTg1OCw3IEBACiAJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgotCQkJCQkiaW50ZXJzZWN0ZWQ6IFxuIik7CisJCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6IFxuIik7CiAJfSBlbHNlIGlmIChpc193b3JsZF9yZWdkb20ocmQtPmFscGhhMikpCiAJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBXb3JsZCByZWd1bGF0b3J5ICIKIAkJCSJkb21haW4gdXBkYXRlZDpcbiIpOwpAQCAtMTMwNCw3ICsxOTE0LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQgPSBOVUxMOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gTlVMTDsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CiAJLyogU29tZSBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0ICovCiAKIAlpZiAoaXNfd29ybGRfcmVnZG9tKHJkLT5hbHBoYTIpKSB7CkBAIC0xMzIxLDIzICsxOTMxLDI3IEBACiAJaWYgKCFsYXN0X3JlcXVlc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAorCS8qCisJICogTGV0cyBvbmx5IGJvdGhlciBwcm9jZWVkaW5nIG9uIHRoZSBzYW1lIGFscGhhMiBpZiB0aGUgY3VycmVudAogCSAqIHJkIGlzIG5vbiBzdGF0aWMgKGl0IG1lYW5zIENSREEgd2FzIHByZXNlbnQgYW5kIHdhcyB1c2VkIGxhc3QpCi0JICogYW5kIHRoZSBwZW5kaW5nIHJlcXVlc3QgY2FtZSBpbiBmcm9tIGEgY291bnRyeSBJRSAqLwotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJLyogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgotCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQgKi8KKwkgKiBhbmQgdGhlIHBlbmRpbmcgcmVxdWVzdCBjYW1lIGluIGZyb20gYSBjb3VudHJ5IElFCisJICovCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCS8qCisJCSAqIElmIHNvbWVvbmUgZWxzZSBhc2tlZCB1cyB0byBjaGFuZ2UgdGhlIHJkIGxldHMgb25seSBib3RoZXIKKwkJICogY2hlY2tpbmcgaWYgdGhlIGFscGhhMiBjaGFuZ2VzIGlmIENSREEgd2FzIGFscmVhZHkgY2FsbGVkCisJCSAqLwogCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKLQkJICAgICFyZWdkb21fY2hhbmdlZChyZC0+YWxwaGEyKSkKKwkJICAgICFyZWdkb21fY2hhbmdlcyhyZC0+YWxwaGEyKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdpcGh5ID0gbGFzdF9yZXF1ZXN0LT53aXBoeTsKLQotCS8qIE5vdyBsZXRzIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4sIHVwZGF0ZSBhbGwgZHJpdmVyIGNoYW5uZWxzCisJLyoKKwkgKiBOb3cgbGV0cyBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLCB1cGRhdGUgYWxsIGRyaXZlciBjaGFubmVscwogCSAqIGFuZCBmaW5hbGx5IGluZm9ybSB0aGVtIG9mIHdoYXQgd2UgaGF2ZSBkb25lLCBpbiBjYXNlIHRoZXkgd2FudAogCSAqIHRvIHJldmlldyBvciBhZGp1c3QgdGhlaXIgb3duIHNldHRpbmdzIGJhc2VkIG9uIHRoZWlyIG93bgotCSAqIGludGVybmFsIEVFUFJPTSBkYXRhICovCisJICogaW50ZXJuYWwgRUVQUk9NIGRhdGEKKwkgKi8KIAogCWlmIChXQVJOX09OKCFyZWdfaXNfdmFsaWRfcmVxdWVzdChyZC0+YWxwaGEyKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM0OSw3ICsxOTYzLDI4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCiAJaWYgKCFsYXN0X3JlcXVlc3QtPmludGVyc2VjdCkgeworCQlpbnQgcjsKKworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikgeworCQkJcmVzZXRfcmVnZG9tYWlucygpOworCQkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIEZvciBhIGRyaXZlciBoaW50LCBsZXRzIGNvcHkgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHRoZQorCQkgKiBkcml2ZXIgd2FudGVkIHRvIHRoZSB3aXBoeSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisJCSAqLworCisJCUJVR19PTihyZXF1ZXN0X3dpcGh5LT5yZWdkKTsKKworCQlyID0gcmVnX2NvcHlfcmVnZCgmcmVxdWVzdF93aXBoeS0+cmVnZCwgcmQpOworCQlpZiAocikKKwkJCXJldHVybiByOworCiAJCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIAkJY2ZnODAyMTFfcmVnZG9tYWluID0gcmQ7CiAJCXJldHVybiAwOwpAQCAtMTM1NywxNCArMTk5MiwyMiBAQAogCiAJLyogSW50ZXJzZWN0aW9uIHJlcXVpcmVzIGEgYml0IG1vcmUgd29yayAqLwogCi0JaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewogCiAJCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKIAkJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIFdlIGNhbiB0cmFzaCB3aGF0IENSREEgcHJvdmlkZWQgbm93ICovCi0JCWtmcmVlKHJkKTsKKwkJLyoKKwkJICogV2UgY2FuIHRyYXNoIHdoYXQgQ1JEQSBwcm92aWRlZCBub3cuCisJCSAqIEhvd2V2ZXIgaWYgYSBkcml2ZXIgcmVxdWVzdGVkIHRoaXMgc3BlY2lmaWMgcmVndWxhdG9yeQorCQkgKiBkb21haW4gd2Uga2VlcCBpdCBmb3IgaXRzIHByaXZhdGUgdXNlCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUikKKwkJCXJlcXVlc3Rfd2lwaHktPnJlZ2QgPSByZDsKKwkJZWxzZQorCQkJa2ZyZWUocmQpOworCiAJCXJkID0gTlVMTDsKIAogCQlyZXNldF9yZWdkb21haW5zKCk7CkBAIC0xMzgxLDggKzIwMjQsMTAgQEAKIAlCVUdfT04oIWNvdW50cnlfaWVfcmVnZG9tYWluKTsKIAogCWlmIChyZCAhPSBjb3VudHJ5X2llX3JlZ2RvbWFpbikgewotCQkvKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQotCQkgKiBoYWQgYnVpbHQgZnJvbSB0aGUgQ291bnRyeSBJRSByZWNlaXZlZCAqLworCQkvKgorCQkgKiBJbnRlcnNlY3Qgd2hhdCBDUkRBIHJldHVybmVkIGFuZCBvdXIgd2hhdCB3ZQorCQkgKiBoYWQgYnVpbHQgZnJvbSB0aGUgQ291bnRyeSBJRSByZWNlaXZlZAorCQkgKi8KIAogCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNvdW50cnlfaWVfcmVnZG9tYWluKTsKIApAQCAtMTM5MiwxNiArMjAzNywxOCBAQAogCQlrZnJlZShjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAJCWNvdW50cnlfaWVfcmVnZG9tYWluID0gTlVMTDsKIAl9IGVsc2UgewotCQkvKiBUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIENSREEgd2FzIG5vdCBwcmVzZW50IGFuZAorCQkvKgorCQkgKiBUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIENSREEgd2FzIG5vdCBwcmVzZW50IGFuZAogCQkgKiBPTERfUkVHVUxBVE9SWSB3YXMgZW5hYmxlZC4gV2UgaW50ZXJzZWN0IG91ciBDb3VudHJ5Ci0JCSAqIElFIHJkIGFuZCB3aGF0IHdhcyBzZXQgb24gY2ZnODAyMTEgb3JpZ2luYWxseSAqLworCQkgKiBJRSByZCBhbmQgd2hhdCB3YXMgc2V0IG9uIGNmZzgwMjExIG9yaWdpbmFsbHkKKwkJICovCiAJCWludGVyc2VjdGVkX3JkID0gcmVnZG9tX2ludGVyc2VjdChyZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKIAl9CiAKIAlpZiAoIWludGVyc2VjdGVkX3JkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHJlcXVlc3Rfd2lwaHkpOwogCiAJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSA9IHJkLT5hbHBoYTJbMF07CiAJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CkBAIC0xNDE5LDEzICsyMDY2LDE3IEBACiB9CiAKIAotLyogVXNlIHRoaXMgY2FsbCB0byBzZXQgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENvbmZsaWN0cyB3aXRoCisvKgorICogVXNlIHRoaXMgY2FsbCB0byBzZXQgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENvbmZsaWN0cyB3aXRoCiAgKiBtdWx0aXBsZSBkcml2ZXJzIGNhbiBiZSBpcm9uZWQgb3V0IGxhdGVyLiBDYWxsZXIgbXVzdCd2ZSBhbHJlYWR5Ci0gKiBrbWFsbG9jJ2QgdGhlIHJkIHN0cnVjdHVyZS4gQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9kcnZfbXV0ZXggKi8KKyAqIGttYWxsb2MnZCB0aGUgcmQgc3RydWN0dXJlLiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX211dGV4CisgKi8KIGludCBzZXRfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAlpbnQgcjsKIAorCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKIAkvKiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHVwZGF0ZSB0aGUgd2lwaHlzLCB0aGlzIGlzIGRvbmUgYmVsb3cgKi8KIAlyID0gX19zZXRfcmVnZG9tKHJkKTsKIAlpZiAocikgewpAQCAtMTQ0Miw1NiArMjA5Myw4NyBAQAogCiAJcHJpbnRfcmVnZG9tYWluKGNmZzgwMjExX3JlZ2RvbWFpbik7CiAKKwlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChsYXN0X3JlcXVlc3QpOworCiAJcmV0dXJuIHI7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfZHJ2X211dGV4ICovCisvKiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX211dGV4ICovCiB2b2lkIHJlZ19kZXZpY2VfcmVtb3ZlKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0JaWYgKCFsYXN0X3JlcXVlc3QgfHwgIWxhc3RfcmVxdWVzdC0+d2lwaHkpCisJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOworCisJa2ZyZWUod2lwaHktPnJlZ2QpOworCWlmICghbGFzdF9yZXF1ZXN0IHx8ICFyZXF1ZXN0X3dpcGh5KQogCQlyZXR1cm47Ci0JaWYgKGxhc3RfcmVxdWVzdC0+d2lwaHkgIT0gd2lwaHkpCisJaWYgKHJlcXVlc3Rfd2lwaHkgIT0gd2lwaHkpCiAJCXJldHVybjsKLQlsYXN0X3JlcXVlc3QtPndpcGh5ID0gTlVMTDsKKwlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCA9IFdJUEhZX0lEWF9TVEFMRTsKIAlsYXN0X3JlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gRU5WSVJPTl9BTlk7CiB9CiAKIGludCByZWd1bGF0b3J5X2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJcmVnX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJyZWd1bGF0b3J5IiwgMCwgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihyZWdfcGRldikpCiAJCXJldHVybiBQVFJfRVJSKHJlZ19wZGV2KTsKIAorCXNwaW5fbG9ja19pbml0KCZyZWdfcmVxdWVzdHNfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKIAljZmc4MDIxMV9yZWdkb21haW4gPSBzdGF0aWNfcmVnZG9tKGllZWU4MDIxMV9yZWdkb20pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IFVzaW5nIHN0YXRpYyByZWd1bGF0b3J5IGRvbWFpbiBpbmZvXG4iKTsKIAlwcmludF9yZWdkb21haW5faW5mbyhjZmc4MDIxMV9yZWdkb21haW4pOwotCS8qIFRoZSBvbGQgY29kZSBzdGlsbCByZXF1ZXN0cyBmb3IgYSBuZXcgcmVnZG9tYWluIGFuZCBpZgorCS8qCisJICogVGhlIG9sZCBjb2RlIHN0aWxsIHJlcXVlc3RzIGZvciBhIG5ldyByZWdkb21haW4gYW5kIGlmCiAJICogeW91IGhhdmUgQ1JEQSB5b3UgZ2V0IGl0IHVwZGF0ZWQsIG90aGVyd2lzZSB5b3UgZ2V0CiAJICogc3R1Y2sgd2l0aCB0aGUgc3RhdGljIHZhbHVlcy4gV2UgaWdub3JlICJFVSIgY29kZSBhcwotCSAqIHRoYXQgaXMgbm90IGEgdmFsaWQgSVNPIC8gSUVDIDMxNjYgYWxwaGEyICovCisJICogdGhhdCBpcyBub3QgYSB2YWxpZCBJU08gLyBJRUMgMzE2NiBhbHBoYTIKKwkgKi8KIAlpZiAoaWVlZTgwMjExX3JlZ2RvbVswXSAhPSAnRScgfHwgaWVlZTgwMjExX3JlZ2RvbVsxXSAhPSAnVScpCi0JCWVyciA9IF9fcmVndWxhdG9yeV9oaW50KE5VTEwsIFJFR0RPTV9TRVRfQllfQ09SRSwKLQkJCQkJaWVlZTgwMjExX3JlZ2RvbSwgMCwgRU5WSVJPTl9BTlkpOworCQllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbHNlCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gY2ZnODAyMTFfd29ybGRfcmVnZG9tOwogCi0JZXJyID0gX19yZWd1bGF0b3J5X2hpbnQoTlVMTCwgUkVHRE9NX1NFVF9CWV9DT1JFLCAiMDAiLCAwLCBFTlZJUk9OX0FOWSk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJjZmc4MDIxMTogY2FsbGluZyBDUkRBIGZhaWxlZCAtICIKLQkJICAgICAgICJ1bmFibGUgdG8gdXBkYXRlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLCAiCi0JCSAgICAgICAidXNpbmcgc3RhdGljIGRlZmluaXRpb25cbiIpOworCWVyciA9IHJlZ3VsYXRvcnlfaGludF9jb3JlKCIwMCIpOwogI2VuZGlmCisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FTk9NRU0pCisJCQlyZXR1cm4gZXJyOworCQkvKgorCQkgKiBOLkIuIGtvYmplY3RfdWV2ZW50X2VudigpIGNhbiBmYWlsIG1haW5seSBmb3Igd2hlbiB3ZSdyZSBvdXQKKwkJICogbWVtb3J5IHdoaWNoIGlzIGhhbmRsZWQgYW5kIHByb3BhZ2F0ZWQgYXBwcm9wcmlhdGVseSBhYm92ZQorCQkgKiBidXQgaXQgY2FuIGFsc28gZmFpbCBkdXJpbmcgYSBuZXRsaW5rX2Jyb2FkY2FzdCgpIG9yIGR1cmluZworCQkgKiBlYXJseSBib290IGZvciBjYWxsX3VzZXJtb2RlaGVscGVyKCkuIEZvciBub3cgdHJlYXQgdGhlc2UKKwkJICogZXJyb3JzIGFzIG5vbi1mYXRhbC4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGtvYmplY3RfdWV2ZW50X2VudigpIHdhcyB1bmFibGUgIgorCQkJInRvIGNhbGwgQ1JEQSBkdXJpbmcgaW5pdCIpOworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwkJLyogV2Ugd2FudCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSB3aGVuIGRlYnVnZ2luZyAqLworCQlXQVJOX09OKGVycik7CisjZW5kaWYKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCByZWd1bGF0b3J5X2V4aXQodm9pZCkKIHsKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0LCAqdG1wOworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKKworCWNhbmNlbF93b3JrX3N5bmMoJnJlZ193b3JrKTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIApAQCAtMTUwMiw1ICsyMTg0LDMzIEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihyZWdfcGRldik7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3BlbmRpbmdfYmVhY29ucykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19iZWFjb24sIGJ0bXAsCisJCQkJCSAmcmVnX3BlbmRpbmdfYmVhY29ucywgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19iZWFjb25fbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19iZWFjb24sIGJ0bXAsCisJCQkJCSAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX2JlYWNvbi0+bGlzdCk7CisJCQlrZnJlZShyZWdfYmVhY29uKTsKKwkJfQorCX0KKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfcmVxdWVzdCwgdG1wLAorCQkJCQkgJnJlZ19yZXF1ZXN0c19saXN0LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCQkJa2ZyZWUocmVnX3JlcXVlc3QpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCBhNzZlYTNmLi5lMzc4MjlhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0xLDkgKzEsMTMgQEAKICNpZm5kZWYgX19ORVRfV0lSRUxFU1NfUkVHX0gKICNkZWZpbmUgX19ORVRfV0lSRUxFU1NfUkVHX0gKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CisKIGJvb2wgaXNfd29ybGRfcmVnZG9tKGNvbnN0IGNoYXIgKmFscGhhMik7CiBib29sIHJlZ19pc192YWxpZF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmFscGhhMik7CiAKK2ludCByZWd1bGF0b3J5X2hpbnRfdXNlcihjb25zdCBjaGFyICphbHBoYTIpOworCiB2b2lkIHJlZ19kZXZpY2VfcmVtb3ZlKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpOwpAQCAtMTEsMzQgKzE1LDI1IEBACiAKIGludCBzZXRfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCk7CiAKLWVudW0gZW52aXJvbm1lbnRfY2FwIHsKLQlFTlZJUk9OX0FOWSwKLQlFTlZJUk9OX0lORE9PUiwKLQlFTlZJUk9OX09VVERPT1IsCi19OwotCi0KIC8qKgotICogX19yZWd1bGF0b3J5X2hpbnQgLSBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlIGEgcmVndWxhdG9yeSBkb21haW4KLSAqIEB3aXBoeTogaWYgdGhlIGhpbnQgY29tZXMgZnJvbSBjb3VudHJ5IGluZm9ybWF0aW9uIGZyb20gYW4gQVAsIHRoaXMKLSAqCWlzIHJlcXVpcmVkIHRvIGJlIHNldCB0byB0aGUgd2lwaHkgdGhhdCByZWNlaXZlZCB0aGUgaW5mb3JtYXRpb24KLSAqIEBhbHBoYTI6IHRoZSBJU08vSUVDIDMxNjYgYWxwaGEyIGJlaW5nIGNsYWltZWQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKglzaG91bGQgYmUgaW4uCi0gKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgcHJvY2Vzc2VkIGNvdW50cnkgSUUsIHNldCB0aGlzIHRvIDAKLSAqIAlpZiB0aGUgaGludCBkaWQgbm90IGNvbWUgZnJvbSBhIGNvdW50cnkgSUUKLSAqIEBjb3VudHJ5X2llX2VudjogdGhlIGVudmlyb25tZW50IHRoZSBJRSB0b2xkIHVzIHdlIGFyZSBpbiwgJUVOVklST05fKgorICogcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbiAtIGhpbnRzIGEgYmVhY29uIHdhcyBmb3VuZCBvbiBhIGNoYW5uZWwKKyAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSB3aGVyZSB0aGUgYmVhY29uIHdhcyBmb3VuZCBvbgorICogQGJlYWNvbl9jaGFuOiB0aGUgY2hhbm5lbCBvbiB3aGljaCB0aGUgYmVhY29uIHdhcyBmb3VuZCBvbgorICogQGdmcDogY29udGV4dCBmbGFncwogICoKLSAqIFRoZSBXaXJlbGVzcyBzdWJzeXN0ZW0gY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKLSAqIHdoYXQgaXQgYmVsaWV2ZXMgc2hvdWxkIGJlIHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIGJ5IGdpdmluZyBpdCBhbgotICogSVNPL0lFQyAzMTY2IGFscGhhMiBjb3VudHJ5IGNvZGUgaXQga25vd3MgaXRzIHJlZ3VsYXRvcnkgZG9tYWluIHNob3VsZCBiZQotICogaW4uCisgKiBUaGlzIGluZm9ybXMgdGhlIHdpcmVsZXNzIGNvcmUgdGhhdCBhIGJlYWNvbiBmcm9tIGFuIEFQIHdhcyBmb3VuZCBvbgorICogdGhlIGNoYW5uZWwgcHJvdmlkZWQuIFRoaXMgYWxsb3dzIHRoZSB3aXJlbGVzcyBjb3JlIHRvIG1ha2UgZWR1Y2F0ZWQKKyAqIGd1ZXNzZXMgb24gcmVndWxhdG9yeSB0byBoZWxwIHdpdGggd29ybGQgcm9hbWluZy4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yCisgKiB3b3JsZCByb2FtaW5nIC0tIHdoZW4gd2UgZG8gbm90IGtub3cgb3VyIGN1cnJlbnQgbG9jYXRpb24uIFRoaXMgaXMKKyAqIG9ubHkgdXNlZnVsIG9uIGNoYW5uZWxzIDEyLCAxMyBhbmQgMTQgb24gdGhlIDIgR0h6IGJhbmQgYXMgY2hhbm5lbHMKKyAqIDEtMTEgYXJlIGFscmVhZHkgZW5hYmxlZCBieSB0aGUgd29ybGQgcmVndWxhdG9yeSBkb21haW47IGFuZCBvbgorICogbm9uLXJhZGFyIDUgR0h6IGNoYW5uZWxzLgogICoKLSAqIFJldHVybnMgemVybyBpZiBhbGwgd2VudCBmaW5lLCAlLUVBTFJFQURZIGlmIGEgcmVndWxhdG9yeSBkb21haW4gaGFkCi0gKiBhbHJlYWR5IGJlZW4gc2V0IG9yIG90aGVyIHN0YW5kYXJkIGVycm9yIGNvZGVzLgotICoKKyAqIERyaXZlcnMgZG8gbm90IG5lZWQgdG8gY2FsbCB0aGlzLCBjZmc4MDIxMSB3aWxsIGRvIGl0IGZvciBhZnRlciBhIHNjYW4KKyAqIG9uIGEgbmV3bHkgZm91bmQgQlNTLgogICovCi1leHRlcm4gaW50IF9fcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRfYnksCi0JCQkgICAgIGNvbnN0IGNoYXIgKmFscGhhMiwgdTMyIGNvdW50cnlfaWVfY2hlY2tzdW0sCi0JCQkgICAgIGVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52KTsKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJCWdmcF90IGdmcCk7CiAKICNlbmRpZiAgLyogX19ORVRfV0lSRUxFU1NfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MGRiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0wLDAgKzEsODY2IEBACisvKgorICogY2ZnODAyMTEgc2NhbiByZXN1bHQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAibmw4MDIxMS5oIgorCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUJKDEwICogSFopCisKK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisjZW5kaWYKKworCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCByZXF1ZXN0LT5pZmlkeCk7CisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJV0FSTl9PTihyZXF1ZXN0ICE9IHdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fcmVxKTsKKwl3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSA9IE5VTEw7CisKKwlpZiAoYWJvcnRlZCkKKwkJbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCWVsc2UKKwkJbmw4MDIxMV9zZW5kX3NjYW5fZG9uZSh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCWlmICghYWJvcnRlZCkgeworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJfQorI2VuZGlmCisKKwlkZXZfcHV0KGRldik7CisKKyBvdXQ6CisJa2ZyZWUocmVxdWVzdCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NjYW5fZG9uZSk7CisKK3N0YXRpYyB2b2lkIGJzc19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJYnNzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmVmKTsKKwlpZiAoYnNzLT5wdWIuZnJlZV9wcml2KQorCQlic3MtPnB1Yi5mcmVlX3ByaXYoJmJzcy0+cHViKTsKKwlrZnJlZShic3MpOworfQorCisvKiBtdXN0IGhvbGQgZGV2LT5ic3NfbG9jayEgKi8KK3ZvaWQgY2ZnODAyMTFfYnNzX2FnZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKwl1bnNpZ25lZCBsb25nIGFnZV9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcyhhZ2Vfc2VjcyAqIE1TRUNfUEVSX1NFQyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJYnNzLT50cyAtPSBhZ2VfamlmZmllczsKKwl9Cit9CisKKy8qIG11c3QgaG9sZCBkZXYtPmJzc19sb2NrISAqLwordm9pZCBjZmc4MDIxMV9ic3NfZXhwaXJlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnRtcDsKKwlib29sIGV4cGlyZWQgPSBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+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+cmVmLCBic3NfcmVsZWFzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3VubGlua19ic3MpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAoraW50IGNmZzgwMjExX3dleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXE7CisJaW50IGksIGVyciwgbl9jaGFubmVscyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKworCWlmIChJU19FUlIocmRldikpCisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCisJaWYgKHJkZXYtPnNjYW5fcmVxKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmcmRldi0+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+b3BzLT5yZXN1bWUoJnJkZXYtPndpcGh5KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdHJ1Y3QgY2xhc3MgaWVlZTgwMjExX2NsYXNzID0gewogCS5uYW1lID0gImllZWU4MDIxMSIsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC02Myw2ICs5OCw4IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAkuZGV2X3VldmVudCA9IHdpcGh5X3VldmVudCwKICNlbmRpZgorCS5zdXNwZW5kID0gd2lwaHlfc3VzcGVuZCwKKwkucmVzdW1lID0gd2lwaHlfcmVzdW1lLAogfTsKIAogaW50IHdpcGh5X3N5c2ZzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IGU3NmNjMjguLjQ4N2NkZDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtOSw3ICs5LDcgQEAKIAogc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCSAgICB1NjQgYmFzaWNfcmF0ZXMsIGludCBiaXRyYXRlKQorCQkJICAgIHUzMiBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyZXN1bHQgPSAmc2JhbmQtPmJpdHJhdGVzWzBdOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1OGU0ODlmLi5iODRhOWI0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtMTM3LDMgKzEzNywxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdtb2RlKTsKKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJaW50IGMgPSAwOworCisJaWYgKCF3ZGV2KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIxOworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OworCisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlzd2l0Y2ggKHdkZXYtPndpcGh5LT5zaWduYWxfdHlwZSkgeworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IC0xMTA7CisJCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gNzA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMzU7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQlicmVhazsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTAwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKKwkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJfQorCisJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQ7CisKKwlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKKwkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKKworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKKwkJaW50IGk7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJCXNiYW5kID0gd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdOworCisJCWlmICghc2JhbmQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCisJCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgeworCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQorCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7CisJCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOworCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OworCQkJCWMrKzsKKwkJCX0KKwkJfQorCX0KKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7CisKKwlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CisKKwlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKTsKZGlmZiAtLWdpdCBhL25ldC94MjUvYWZfeDI1LmMgYi9uZXQveDI1L2FmX3gyNS5jCmluZGV4IDlmYzViMDIuLjljYTE3YjEgMTAwNjQ0Ci0tLSBhL25ldC94MjUvYWZfeDI1LmMKKysrIGIvbmV0L3gyNS9hZl94MjUuYwpAQCAtOTUxLDEwICs5NTEsOCBAQAogCS8qCiAJICoJSW5jb21pbmcgQ2FsbCBVc2VyIERhdGEuCiAJICovCi0JaWYgKHNrYi0+bGVuID49IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7Ci0JCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKLQl9CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7CisJbWFrZXgyNS0+Y2FsbHVzZXJkYXRhLmN1ZGxlbmd0aCA9IHNrYi0+bGVuOwogCiAJc2stPnNrX2Fja19iYWNrbG9nKys7CiAKQEAgLTExMjIsOCArMTEyMCw5IEBACiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJc2tiX3F1ZXVlX3RhaWwoJngyNS0+aW50ZXJydXB0X291dF9xdWV1ZSwgc2tiKTsKIAllbHNlIHsKLQkJbGVuID0geDI1X291dHB1dChzaywgc2tiKTsKLQkJaWYgKGxlbiA8IDApCisJCXJjID0geDI1X291dHB1dChzaywgc2tiKTsKKwkJbGVuID0gcmM7CisJCWlmIChyYyA8IDApCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJZWxzZSBpZiAoeDI1LT5xYml0aW5jbCkKIAkJCWxlbisrOwpAQCAtMTYwOCw4ICsxNjA3LDggQEAKIAogU09DS09QU19XUkFQKHgyNV9wcm90bywgQUZfWDI1KTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX1gyNSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHgyNV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfWDI1KSwKIAkuZnVuYyA9CXgyNV9sYXBiX3JlY2VpdmVfZnJhbWUsCiB9OwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IGUwNjM2NTc3Li5jMThmYTE1IDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICAtRCJLQlVJTERfTU9ETkFNRT1LQlVJTERfU1RSKCQoY2FsbCBuYW1lLWZpeCwkKG1vZG5hbWUpKSkiKQogCiAjaGFzaCB2YWx1ZXMKLWlmZGVmIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRworaWZkZWYgQ09ORklHX0RZTkFNSUNfREVCVUcKIGRlYnVnX2ZsYWdzID0gLUQiREVCVUdfSEFTSD0kKHNoZWxsIC4vc2NyaXB0cy9iYXNpYy9oYXNoIGRqYjIgJChARCkkKG1vZG5hbWUpKSJcCiAgICAgICAgICAgICAgIC1EIkRFQlVHX0hBU0gyPSQoc2hlbGwgLi9zY3JpcHRzL2Jhc2ljL2hhc2ggcjUgJChARCkkKG1vZG5hbWUpKSIKIGVsc2UKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbCBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbAppbmRleCBkYjMwZmFjLi41NmY5MGE0IDEwMDY0NAotLS0gYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKKysrIGIvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCkBAIC0zOCw3ICszOCw3IEBACiAJCSZjaGVja19hc21fdHlwZXMoKTsKIAkJJmNoZWNrX3NpemV0eXBlcygpOwogCQkmY2hlY2tfcHJvdG90eXBlcygpOwotCQkmY2hlY2tfY29uZmlnKCk7CisJCSMgRHJvcHBlZCBmb3Igbm93LiBUb28gbXVjaCBub2lzZSAmY2hlY2tfY29uZmlnKCk7CiAJfQogCWNsb3NlIEZIOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IDRlZWE2MGIuLmEzMzQ0MjggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTcxMCw2ICs3MTAsMTQgQEAKIAlzdHJjYXQoYWxpYXMsICI6Iik7CiAJcmV0dXJuIDE7CiB9CisKK3N0YXRpYyBpbnQgZG9fcGxhdGZvcm1fZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKK3sKKwlzcHJpbnRmKGFsaWFzLCBQTEFURk9STV9NT0RVTEVfUFJFRklYICIlcyIsIGlkLT5uYW1lKTsKKwlyZXR1cm4gMTsKK30KKwogLyogSWdub3JlIGFueSBwcmVmaXgsIGVnLiBzb21lIGFyY2hpdGVjdHVyZXMgcHJlcGVuZCBfICovCiBzdGF0aWMgaW5saW5lIGludCBzeW1faXMoY29uc3QgY2hhciAqc3ltYm9sLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtODQ5LDYgKzg1NywxMCBAQAogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKIAkJCSBzaXplb2Yoc3RydWN0IGRtaV9zeXN0ZW1faWQpLCAiZG1pIiwKIAkJCSBkb19kbWlfZW50cnksIG1vZCk7CisJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9wbGF0Zm9ybV9kZXZpY2VfdGFibGUiKSkKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQpLCAicGxhdGZvcm0iLAorCQkJIGRvX3BsYXRmb3JtX2VudHJ5LCBtb2QpOwogCWZyZWUoemVyb3MpOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9LY29uZmlnIGIvc2VjdXJpdHkvS2NvbmZpZwppbmRleCA5NDM4NTM1Li5iYjI0NDc3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9LY29uZmlnCisrKyBiL3NlY3VyaXR5L0tjb25maWcKQEAgLTU1LDcgKzU1LDggQEAKIAlib29sICJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbSIKIAloZWxwCiAJICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5Ci0JICB0aGUgVFBNIGJpb3MgY2hhcmFjdGVyIGRyaXZlci4gIEl0IGlzIG5vdCB1c2VkIGJ5IFNFTGludXggb3IgU01BQ0suCisJICB0aGUgVFBNIGJpb3MgY2hhcmFjdGVyIGRyaXZlciBhbmQgSU1BLCBhbiBpbnRlZ3JpdHkgcHJvdmlkZXIuICBJdCBpcworCSAgbm90IHVzZWQgYnkgU0VMaW51eCBvciBTTUFDSy4KIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KIApAQCAtMTM0LDYgKzEzNSw5IEBACiAKIHNvdXJjZSBzZWN1cml0eS9zZWxpbnV4L0tjb25maWcKIHNvdXJjZSBzZWN1cml0eS9zbWFjay9LY29uZmlnCitzb3VyY2Ugc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKKworc291cmNlIHNlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L01ha2VmaWxlIGIvc2VjdXJpdHkvTWFrZWZpbGUKaW5kZXggYzA1YzEyNy4uZmE3NzAyMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmotJChDT05GSUdfS0VZUykJCQkrPSBrZXlzLwogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCSs9IHNlbGludXgKIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrCitzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKSAgICAgICAgKz0gdG9tb3lvCiAKICMgYWx3YXlzIGVuYWJsZSBkZWZhdWx0IGNhcGFiaWxpdGllcwogb2JqLXkJCSs9IGNvbW1vbmNhcC5vCkBAIC0xNSw1ICsxNiwxMCBAQAogIyBNdXN0IHByZWNlZGUgY2FwYWJpbGl0eS5vIGluIG9yZGVyIHRvIHN0YWNrIHByb3Blcmx5Lgogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpCQkrPSBzZWxpbnV4L2J1aWx0LWluLm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9TTUFDSykJCSs9IHNtYWNrL2J1aWx0LWluLm8KK29iai0kKENPTkZJR19TRUNVUklUWV9UT01PWU8pCQkrPSB0b21veW8vYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHKQkJKz0gcm9vdF9wbHVnLm8KIG9iai0kKENPTkZJR19DR1JPVVBfREVWSUNFKQkJKz0gZGV2aWNlX2Nncm91cC5vCisKKyMgT2JqZWN0IGludGVncml0eSBmaWxlIGxpc3RzCitzdWJkaXItJChDT05GSUdfSU1BKQkJCSs9IGludGVncml0eS9pbWEKK29iai0kKENPTkZJR19JTUEpCQkJKz0gaW50ZWdyaXR5L2ltYS9idWlsdC1pbi5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbm9kZS5jIGIvc2VjdXJpdHkvaW5vZGUuYwppbmRleCAwMDdlZjI1Li5mM2I5MWJmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbm9kZS5jCisrKyBiL3NlY3VyaXR5L2lub2RlLmMKQEAgLTIwMiwxMiArMjAyLDExIEBACiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpcwogICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgc2VjdXJpdHlmc19yZW1vdmUoKSBmdW5jdGlvbiB3aGVuIHRoZSBmaWxlIGlzCiAgKiB0byBiZSByZW1vdmVkIChubyBhdXRvbWF0aWMgY2xlYW51cCBoYXBwZW5zIGlmIHlvdXIgbW9kdWxlIGlzIHVubG9hZGVkLAotICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlKS4gIElmIGFuIGVycm9yIG9jY3VycywgJU5VTEwgaXMgcmV0dXJuZWQuCisgKiB5b3UgYXJlIHJlc3BvbnNpYmxlIGhlcmUpLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqIHRoZSBlcm9yciB2YWx1ZSAodmlhIEVSUl9QVFIpLgogICoKICAqIElmIHNlY3VyaXR5ZnMgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCwgdGhlIHZhbHVlICUtRU5PREVWIGlzCi0gKiByZXR1cm5lZC4gIEl0IGlzIG5vdCB3aXNlIHRvIGNoZWNrIGZvciB0aGlzIHZhbHVlLCBidXQgcmF0aGVyLCBjaGVjayBmb3IKLSAqICVOVUxMIG9yICElTlVMTCBpbnN0ZWFkIGFzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgI2lmZGVmIGluIHRoZSBjYWxsaW5nCi0gKiBjb2RlLgorICogcmV0dXJuZWQuCiAgKi8KIHN0cnVjdCBkZW50cnkgKnNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCiAJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDk3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKQEAgLTAsMCArMSw1NSBAQAorIyBJQk0gSW50ZWdyaXR5IE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZQorIworY29uZmlnIElNQQorCWJvb2wgIkludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKSIKKwlkZXBlbmRzIG9uIEFDUEkKKwlzZWxlY3QgU0VDVVJJVFlGUworCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0hNQUMKKwlzZWxlY3QgQ1JZUFRPX01ENQorCXNlbGVjdCBDUllQVE9fU0hBMQorCXNlbGVjdCBUQ0dfVFBNCisJc2VsZWN0IFRDR19USVMKKwloZWxwCisJICBUaGUgVHJ1c3RlZCBDb21wdXRpbmcgR3JvdXAoVENHKSBydW50aW1lIEludGVncml0eQorCSAgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJICB2YWx1ZXMgb2YgZXhlY3V0YWJsZXMgYW5kIG90aGVyIHNlbnNpdGl2ZSBzeXN0ZW0gZmlsZXMsCisJICBhcyB0aGV5IGFyZSByZWFkIG9yIGV4ZWN1dGVkLiBJZiBhbiBhdHRhY2tlciBtYW5hZ2VzCisJICB0byBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIGFuIGltcG9ydGFudCBzeXN0ZW0gZmlsZQorCSAgYmVpbmcgbWVhc3VyZWQsIHdlIGNhbiB0ZWxsLgorCisJICBJZiB5b3VyIHN5c3RlbSBoYXMgYSBUUE0gY2hpcCwgdGhlbiBJTUEgYWxzbyBtYWludGFpbnMKKwkgIGFuIGFnZ3JlZ2F0ZSBpbnRlZ3JpdHkgdmFsdWUgb3ZlciB0aGlzIGxpc3QgaW5zaWRlIHRoZQorCSAgVFBNIGhhcmR3YXJlLCBzbyB0aGF0IHRoZSBUUE0gY2FuIHByb3ZlIHRvIGEgdGhpcmQgcGFydHkKKwkgIHdoZXRoZXIgb3Igbm90IGNyaXRpY2FsIHN5c3RlbSBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQuCisJICBSZWFkIDxodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL3NlYzA0L3RlY2gvc2FpbGVyLmh0bWw+CisJICB0byBsZWFybiBtb3JlIGFib3V0IElNQS4KKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBJTUFfTUVBU1VSRV9QQ1JfSURYCisJaW50CisJZGVwZW5kcyBvbiBJTUEKKwlyYW5nZSA4IDE0CisJZGVmYXVsdCAxMAorCWhlbHAKKwkgIElNQV9NRUFTVVJFX1BDUl9JRFggZGV0ZXJtaW5lcyB0aGUgVFBNIFBDUiByZWdpc3RlciBpbmRleAorCSAgdGhhdCBJTUEgdXNlcyB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IGFnZ3JlZ2F0ZSBvZiB0aGUKKwkgIG1lYXN1cmVtZW50IGxpc3QuICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCAxMC4KKworY29uZmlnIElNQV9BVURJVAorCWJvb2wKKwlkZXBlbmRzIG9uIElNQQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICdpbWFfYXVkaXQnLCB3aGljaAorCSAgYWxsb3dzIGluZm9ybWF0aW9uYWwgYXVkaXRpbmcgbWVzc2FnZXMgdG8gYmUgZW5hYmxlZAorCSAgYXQgYm9vdC4gIElmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCBpbmZvcm1hdGlvbmFsIGludGVncml0eQorCSAgYXVkaXRpbmcgbWVzc2FnZXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAnaW1hX2F1ZGl0PTEnIG9uCisJICB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworY29uZmlnIElNQV9MU01fUlVMRVMKKwlib29sCisJZGVwZW5kcyBvbiBJTUEgJiYgQVVESVQgJiYgKFNFQ1VSSVRZX1NFTElOVVggfHwgU0VDVVJJVFlfU01BQ0spCisJZGVmYXVsdCB5CisJaGVscAorCSAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgZGlzcmVnYXJkIExTTSBiYXNlZCBwb2xpY3kgcnVsZXMuCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL01ha2VmaWxlIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODdjNGNiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIGJ1aWxkaW5nIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwJ3MoVENHKSBydW50aW1lIEludGVncml0eQorIyBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUoSU1BKS4KKyMKKworb2JqLSQoQ09ORklHX0lNQSkgKz0gaW1hLm8KKworaW1hLXkgOj0gaW1hX2ZzLm8gaW1hX3F1ZXVlLm8gaW1hX2luaXQubyBpbWFfbWFpbi5vIGltYV9jcnlwdG8ubyBpbWFfYXBpLm8gXAorCSBpbWFfcG9saWN5Lm8gaW1hX2lpbnQubyBpbWFfYXVkaXQubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWEuaCBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1ZWI1MwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYS5oCisgKglpbnRlcm5hbCBJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlIChJTUEpIGRlZmluaXRpb25zCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0lNQV9ICisjZGVmaW5lIF9fTElOVVhfSU1BX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvdHBtLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKworZW51bSBpbWFfc2hvd190eXBlIHsgSU1BX1NIT1dfQklOQVJZLCBJTUFfU0hPV19BU0NJSSB9OworZW51bSB0cG1fcGNycyB7IFRQTV9QQ1IwID0gMCwgVFBNX1BDUjggPSA4IH07CisKKy8qIGRpZ2VzdCBzaXplIGZvciBJTUEsIGZpdHMgU0hBMSBvciBNRDUgKi8KKyNkZWZpbmUgSU1BX0RJR0VTVF9TSVpFCQkyMAorI2RlZmluZSBJTUFfRVZFTlRfTkFNRV9MRU5fTUFYCTI1NQorCisjZGVmaW5lIElNQV9IQVNIX0JJVFMgOQorI2RlZmluZSBJTUFfTUVBU1VSRV9IVEFCTEVfU0laRSAoMSA8PCBJTUFfSEFTSF9CSVRTKQorCisvKiBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCitleHRlcm4gaW50IGltYV9pbml0aWFsaXplZDsKK2V4dGVybiBpbnQgaW1hX3VzZWRfY2hpcDsKK2V4dGVybiBjaGFyICppbWFfaGFzaDsKKworLyogSU1BIGlub2RlIHRlbXBsYXRlIGRlZmluaXRpb24gKi8KK3N0cnVjdCBpbWFfdGVtcGxhdGVfZGF0YSB7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CS8qIHNoYTEvbWQ1IG1lYXN1cmVtZW50IGhhc2ggKi8KKwljaGFyIGZpbGVfbmFtZVtJTUFfRVZFTlRfTkFNRV9MRU5fTUFYICsgMV07CS8qIG5hbWUgKyBcMCAqLworfTsKKworc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSB7CisJdTggZGlnZXN0W0lNQV9ESUdFU1RfU0laRV07CS8qIHNoYTEgb3IgbWQ1IG1lYXN1cmVtZW50IGhhc2ggKi8KKwljb25zdCBjaGFyICp0ZW1wbGF0ZV9uYW1lOworCWludCB0ZW1wbGF0ZV9sZW47CisJc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhIHRlbXBsYXRlOworfTsKKworc3RydWN0IGltYV9xdWV1ZV9lbnRyeSB7CisJc3RydWN0IGhsaXN0X25vZGUgaG5leHQ7CS8qIHBsYWNlIGluIGhhc2ggY29sbGlzaW9uIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxhdGVyOwkJLyogcGxhY2UgaW4gaW1hX21lYXN1cmVtZW50cyBsaXN0ICovCisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnk7Cit9OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaW1hX21lYXN1cmVtZW50czsJLyogbGlzdCBvZiBhbGwgbWVhc3VyZW1lbnRzICovCisKKy8qIGRlY2xhcmF0aW9ucyAqLwordm9pZCBpbnRlZ3JpdHlfYXVkaXRfbXNnKGludCBhdWRpdF9tc2dubywgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqb3AsCisJCQkgY29uc3QgY2hhciAqY2F1c2UsIGludCByZXN1bHQsIGludCBpbmZvKTsKKworLyogSW50ZXJuYWwgSU1BIGZ1bmN0aW9uIGRlZmluaXRpb25zICovCit2b2lkIGltYV9paW50Y2FjaGVfaW5pdCh2b2lkKTsKK2ludCBpbWFfaW5pdCh2b2lkKTsKK3ZvaWQgaW1hX2NsZWFudXAodm9pZCk7CitpbnQgaW1hX2ZzX2luaXQodm9pZCk7Cit2b2lkIGltYV9mc19jbGVhbnVwKHZvaWQpOworaW50IGltYV9hZGRfdGVtcGxhdGVfZW50cnkoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksIGludCB2aW9sYXRpb24sCisJCQkgICBjb25zdCBjaGFyICpvcCwgc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgaW1hX2NhbGNfaGFzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqZGlnZXN0KTsKK2ludCBpbWFfY2FsY190ZW1wbGF0ZV9oYXNoKGludCB0ZW1wbGF0ZV9sZW4sIHZvaWQgKnRlbXBsYXRlLCBjaGFyICpkaWdlc3QpOworaW50IGltYV9jYWxjX2Jvb3RfYWdncmVnYXRlKGNoYXIgKmRpZ2VzdCk7Cit2b2lkIGltYV9hZGRfdmlvbGF0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqb3AsIGNvbnN0IGNoYXIgKmNhdXNlKTsKKworLyoKKyAqIHVzZWQgdG8gcHJvdGVjdCBoX3RhYmxlIGFuZCBzaGFfdGFibGUKKyAqLworZXh0ZXJuIHNwaW5sb2NrX3QgaW1hX3F1ZXVlX2xvY2s7CisKK3N0cnVjdCBpbWFfaF90YWJsZSB7CisJYXRvbWljX2xvbmdfdCBsZW47CS8qIG51bWJlciBvZiBzdG9yZWQgbWVhc3VyZW1lbnRzIGluIHRoZSBsaXN0ICovCisJYXRvbWljX2xvbmdfdCB2aW9sYXRpb25zOworCXN0cnVjdCBobGlzdF9oZWFkIHF1ZXVlW0lNQV9NRUFTVVJFX0hUQUJMRV9TSVpFXTsKK307CitleHRlcm4gc3RydWN0IGltYV9oX3RhYmxlIGltYV9odGFibGU7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbWFfaGFzaF9rZXkodTggKmRpZ2VzdCkKK3sKKwlyZXR1cm4gaGFzaF9sb25nKCpkaWdlc3QsIElNQV9IQVNIX0JJVFMpOworfQorCisvKiBpaW50IGNhY2hlIGZsYWdzICovCisjZGVmaW5lIElNQV9NRUFTVVJFRAkJMQorI2RlZmluZSBJTUFfSUlOVF9EVU1QX1NUQUNLCTUxMgorCisvKiBpbnRlZ3JpdHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSB7CisJdTY0IHZlcnNpb247CQkvKiB0cmFjayBpbm9kZSBjaGFuZ2VzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIHByb3RlY3RzOiB2ZXJzaW9uLCBmbGFncywgZGlnZXN0ICovCisJbG9uZyByZWFkY291bnQ7CQkvKiBtZWFzdXJlZCBmaWxlcyByZWFkY291bnQgKi8KKwlsb25nIHdyaXRlY291bnQ7CS8qIG1lYXN1cmVkIGZpbGVzIHdyaXRlY291bnQgKi8KKwlsb25nIG9wZW5jb3VudDsJCS8qIG9wZW5zIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCBrcmVmIHJlZmNvdW50OwkvKiBpbWFfaWludF9jYWNoZSByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworfTsKKworLyogTElNIEFQSSBmdW5jdGlvbiBkZWZpbml0aW9ucyAqLworaW50IGltYV9tdXN0X21lYXN1cmUoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIGludCBtYXNrLCBpbnQgZnVuY3Rpb24pOworaW50IGltYV9jb2xsZWN0X21lYXN1cmVtZW50KHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGZpbGUgKmZpbGUpOwordm9pZCBpbWFfc3RvcmVfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lKTsKK2ludCBpbWFfc3RvcmVfdGVtcGxhdGUoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksIGludCB2aW9sYXRpb24sCisJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgaW1hX3RlbXBsYXRlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICplLAorCQkgICAgICAgZW51bSBpbWFfc2hvd190eXBlIHNob3cpOworCisvKiByYWRpeCB0cmVlIGNhbGxzIHRvIGxvb2t1cCwgaW5zZXJ0LCBkZWxldGUKKyAqIGludGVncml0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZS4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9pbnNlcnQoc3RydWN0IGlub2RlICppbm9kZSk7CitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2luc2VydF9nZXQoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGltYV9paW50X2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgaWludF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKK3ZvaWQgaWludF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7CisKKy8qIElNQSBwb2xpY3kgcmVsYXRlZCBmdW5jdGlvbnMgKi8KK2VudW0gaW1hX2hvb2tzIHsgUEFUSF9DSEVDSyA9IDEsIEZJTEVfTU1BUCwgQlBSTV9DSEVDSyB9OworCitpbnQgaW1hX21hdGNoX3BvbGljeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGltYV9ob29rcyBmdW5jLCBpbnQgbWFzayk7Cit2b2lkIGltYV9pbml0X3BvbGljeSh2b2lkKTsKK3ZvaWQgaW1hX3VwZGF0ZV9wb2xpY3kodm9pZCk7CitpbnQgaW1hX3BhcnNlX2FkZF9ydWxlKGNoYXIgKik7Cit2b2lkIGltYV9kZWxldGVfcnVsZXModm9pZCk7CisKKy8qIExTTSBiYXNlZCBwb2xpY3kgcnVsZXMgcmVxdWlyZSBhdWRpdCAqLworI2lmZGVmIENPTkZJR19JTUFfTFNNX1JVTEVTCisKKyNkZWZpbmUgc2VjdXJpdHlfZmlsdGVyX3J1bGVfaW5pdCBzZWN1cml0eV9hdWRpdF9ydWxlX2luaXQKKyNkZWZpbmUgc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2ggc2VjdXJpdHlfYXVkaXRfcnVsZV9tYXRjaAorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWx0ZXJfcnVsZV9pbml0KHUzMiBmaWVsZCwgdTMyIG9wLCBjaGFyICpydWxlc3RyLAorCQkJCQkgICAgdm9pZCAqKmxzbXJ1bGUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX21hdGNoKHUzMiBzZWNpZCwgdTMyIGZpZWxkLCB1MzIgb3AsCisJCQkJCSAgICAgdm9pZCAqbHNtcnVsZSwKKwkJCQkJICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYWN0eCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfSU1BX0xTTV9SVUxFUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDU4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9hcGkuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3I6IE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9hcGkuYworICoJSW1wbGVtZW50cyBtdXN0X21lYXN1cmUsIGNvbGxlY3RfbWVhc3VyZW1lbnQsIHN0b3JlX21lYXN1cmVtZW50LAorICoJYW5kIHN0b3JlX3RlbXBsYXRlLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJpbWEuaCIKK3N0YXRpYyBjb25zdCBjaGFyICpJTUFfVEVNUExBVEVfTkFNRSA9ICJpbWEiOworCisvKgorICogaW1hX3N0b3JlX3RlbXBsYXRlIC0gc3RvcmUgaW1hIHRlbXBsYXRlIG1lYXN1cmVtZW50cworICoKKyAqIENhbGN1bGF0ZSB0aGUgaGFzaCBvZiBhIHRlbXBsYXRlIGVudHJ5LCBhZGQgdGhlIHRlbXBsYXRlIGVudHJ5CisgKiB0byBhbiBvcmRlcmVkIGxpc3Qgb2YgbWVhc3VyZW1lbnQgZW50cmllcyBtYWludGFpbmVkIGluc2lkZSB0aGUga2VybmVsLAorICogYW5kIGFsc28gdXBkYXRlIHRoZSBhZ2dyZWdhdGUgaW50ZWdyaXR5IHZhbHVlIChtYWludGFpbmVkIGluc2lkZSB0aGUKKyAqIGNvbmZpZ3VyZWQgVFBNIFBDUikgb3ZlciB0aGUgaGFzaGVzIG9mIHRoZSBjdXJyZW50IGxpc3Qgb2YgbWVhc3VyZW1lbnQKKyAqIGVudHJpZXMuCisgKgorICogQXBwbGljYXRpb25zIHJldHJpZXZlIHRoZSBjdXJyZW50IGtlcm5lbC1oZWxkIG1lYXN1cmVtZW50IGxpc3QgdGhyb3VnaAorICogdGhlIHNlY3VyaXR5ZnMgZW50cmllcyBpbiAvc3lzL2tlcm5lbC9zZWN1cml0eS9pbWEuIFRoZSBzaWduZWQgYWdncmVnYXRlCisgKiBUUE0gUENSIChjYWxsZWQgcXVvdGUpIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgYSBUUE0gdXNlciBzcGFjZSBsaWJyYXJ5CisgKiBhbmQgaXMgdXNlZCB0byB2YWxpZGF0ZSB0aGUgbWVhc3VyZW1lbnQgbGlzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGltYV9zdG9yZV90ZW1wbGF0ZShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSwKKwkJICAgICAgIGludCB2aW9sYXRpb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJY29uc3QgY2hhciAqb3AgPSAiYWRkX3RlbXBsYXRlX21lYXN1cmUiOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gImhhc2hpbmdfZXJyb3IiOworCWludCByZXN1bHQ7CisKKwltZW1zZXQoZW50cnktPmRpZ2VzdCwgMCwgc2l6ZW9mKGVudHJ5LT5kaWdlc3QpKTsKKwllbnRyeS0+dGVtcGxhdGVfbmFtZSA9IElNQV9URU1QTEFURV9OQU1FOworCWVudHJ5LT50ZW1wbGF0ZV9sZW4gPSBzaXplb2YoZW50cnktPnRlbXBsYXRlKTsKKworCWlmICghdmlvbGF0aW9uKSB7CisJCXJlc3VsdCA9IGltYV9jYWxjX3RlbXBsYXRlX2hhc2goZW50cnktPnRlbXBsYXRlX2xlbiwKKwkJCQkJCSZlbnRyeS0+dGVtcGxhdGUsCisJCQkJCQllbnRyeS0+ZGlnZXN0KTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsCisJCQkJCSAgICBlbnRyeS0+dGVtcGxhdGVfbmFtZSwgb3AsCisJCQkJCSAgICBhdWRpdF9jYXVzZSwgcmVzdWx0LCAwKTsKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwl9CisJcmVzdWx0ID0gaW1hX2FkZF90ZW1wbGF0ZV9lbnRyeShlbnRyeSwgdmlvbGF0aW9uLCBvcCwgaW5vZGUpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpbWFfYWRkX3Zpb2xhdGlvbiAtIGFkZCB2aW9sYXRpb24gdG8gbWVhc3VyZW1lbnQgbGlzdC4KKyAqCisgKiBWaW9sYXRpb25zIGFyZSBmbGFnZ2VkIGluIHRoZSBtZWFzdXJlbWVudCBsaXN0IHdpdGggemVybyBoYXNoIHZhbHVlcy4KKyAqIEJ5IGV4dGVuZGluZyB0aGUgUENSIHdpdGggMHhGRidzIGluc3RlYWQgb2Ygd2l0aCB6ZXJvZXMsIHRoZSBQQ1IKKyAqIHZhbHVlIGlzIGludmFsaWRhdGVkLgorICovCit2b2lkIGltYV9hZGRfdmlvbGF0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpbGVuYW1lLAorCQkgICAgICAgY29uc3QgY2hhciAqb3AsIGNvbnN0IGNoYXIgKmNhdXNlKQoreworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworCWludCB2aW9sYXRpb24gPSAxOworCWludCByZXN1bHQ7CisKKwkvKiBjYW4gb3ZlcmZsb3csIG9ubHkgaW5kaWNhdG9yICovCisJYXRvbWljX2xvbmdfaW5jKCZpbWFfaHRhYmxlLnZpb2xhdGlvbnMpOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJbWVtc2V0KCZlbnRyeS0+dGVtcGxhdGUsIDAsIHNpemVvZihlbnRyeS0+dGVtcGxhdGUpKTsKKwlzdHJuY3B5KGVudHJ5LT50ZW1wbGF0ZS5maWxlX25hbWUsIGZpbGVuYW1lLCBJTUFfRVZFTlRfTkFNRV9MRU5fTUFYKTsKKwlyZXN1bHQgPSBpbWFfc3RvcmVfdGVtcGxhdGUoZW50cnksIHZpb2xhdGlvbiwgaW5vZGUpOworCWlmIChyZXN1bHQgPCAwKQorCQlrZnJlZShlbnRyeSk7CitlcnJfb3V0OgorCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsIGZpbGVuYW1lLAorCQkJICAgIG9wLCBjYXVzZSwgcmVzdWx0LCAwKTsKK30KKworLyoqCisgKiBpbWFfbXVzdF9tZWFzdXJlIC0gbWVhc3VyZSBkZWNpc2lvbiBiYXNlZCBvbiBwb2xpY3kuCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgdG8gbWVhc3VyZQorICogQG1hc2s6IGNvbnRhaW5zIHRoZSBwZXJtaXNzaW9uIG1hc2sgKE1BWV9SRUFELCBNQVlfV1JJVEUsIE1BWV9FWEVDVVRFKQorICogQGZ1bmN0aW9uOiBjYWxsaW5nIGZ1bmN0aW9uIChQQVRIX0NIRUNLLCBCUFJNX0NIRUNLLCBGSUxFX01NQVApCisgKgorICogVGhlIHBvbGljeSBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIGtleXBhaXJzOgorICogCQlzdWJqPSwgb2JqPSwgdHlwZT0sIGZ1bmM9LCBtYXNrPSwgZnNtYWdpYz0KKyAqCXN1Ymosb2JqLCBhbmQgdHlwZTogYXJlIExTTSBzcGVjaWZpYy4KKyAqIAlmdW5jOiBQQVRIX0NIRUNLIHwgQlBSTV9DSEVDSyB8IEZJTEVfTU1BUAorICogCW1hc2s6IGNvbnRhaW5zIHRoZSBwZXJtaXNzaW9uIG1hc2sKKyAqCWZzbWFnaWM6IGhleCB2YWx1ZQorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaWludC0+bXV0ZXggaGVsZC4KKyAqCisgKiBSZXR1cm4gMCB0byBtZWFzdXJlLiBSZXR1cm4gMSBpZiBhbHJlYWR5IG1lYXN1cmVkLgorICogRm9yIG1hdGNoaW5nIGEgRE9OVF9NRUFTVVJFIHBvbGljeSwgbm8gcG9saWN5LCBvciBvdGhlcgorICogZXJyb3IsIHJldHVybiBhbiBlcnJvciBjb2RlLgorKi8KK2ludCBpbWFfbXVzdF9tZWFzdXJlKHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKQoreworCWludCBtdXN0X21lYXN1cmU7CisKKwlpZiAoaWludC0+ZmxhZ3MgJiBJTUFfTUVBU1VSRUQpCisJCXJldHVybiAxOworCisJbXVzdF9tZWFzdXJlID0gaW1hX21hdGNoX3BvbGljeShpbm9kZSwgZnVuY3Rpb24sIG1hc2spOworCXJldHVybiBtdXN0X21lYXN1cmUgPyAwIDogLUVBQ0NFUzsKK30KKworLyoKKyAqIGltYV9jb2xsZWN0X21lYXN1cmVtZW50IC0gY29sbGVjdCBmaWxlIG1lYXN1cmVtZW50CisgKgorICogQ2FsY3VsYXRlIHRoZSBmaWxlIGhhc2gsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCwKKyAqIHN0b3JpbmcgdGhlIG1lYXN1cmVtZW50IGFuZCBpX3ZlcnNpb24gaW4gdGhlIGlpbnQuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpaW50LT5tdXRleCBoZWxkLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXN1bHQgPSAtRUVYSVNUOworCisJaWYgKCEoaWludC0+ZmxhZ3MgJiBJTUFfTUVBU1VSRUQpKSB7CisJCXU2NCBpX3ZlcnNpb24gPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV92ZXJzaW9uOworCisJCW1lbXNldChpaW50LT5kaWdlc3QsIDAsIElNQV9ESUdFU1RfU0laRSk7CisJCXJlc3VsdCA9IGltYV9jYWxjX2hhc2goZmlsZSwgaWludC0+ZGlnZXN0KTsKKwkJaWYgKCFyZXN1bHQpCisJCQlpaW50LT52ZXJzaW9uID0gaV92ZXJzaW9uOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogaW1hX3N0b3JlX21lYXN1cmVtZW50IC0gc3RvcmUgZmlsZSBtZWFzdXJlbWVudAorICoKKyAqIENyZWF0ZSBhbiAiaW1hIiB0ZW1wbGF0ZSBhbmQgdGhlbiBzdG9yZSB0aGUgdGVtcGxhdGUgYnkgY2FsbGluZworICogaW1hX3N0b3JlX3RlbXBsYXRlLgorICoKKyAqIFdlIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIGlub2RlIGhhcyBub3QgYWxyZWFkeSBiZWVuIG1lYXN1cmVkLAorICogYnV0IHRoZSBtZWFzdXJlbWVudCBjb3VsZCBhbHJlYWR5IGV4aXN0OgorICogCS0gbXVsdGlwbGUgY29waWVzIG9mIHRoZSBzYW1lIGZpbGUgb24gZWl0aGVyIHRoZSBzYW1lIG9yCisgKgkgIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKyAqCS0gdGhlIGlub2RlIHdhcyBwcmV2aW91c2x5IGZsdXNoZWQgYXMgd2VsbCBhcyB0aGUgaWludCBpbmZvLAorICoJICBjb250YWluaW5nIHRoZSBoYXNoaW5nIGluZm8uCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpaW50LT5tdXRleCBoZWxkLgorICovCit2b2lkIGltYV9zdG9yZV9tZWFzdXJlbWVudChzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqb3AgPSAiYWRkX3RlbXBsYXRlX21lYXN1cmUiOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gIkVOT01FTSI7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmVudHJ5OworCWludCB2aW9sYXRpb24gPSAwOworCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KSB7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1BDUiwgaW5vZGUsIGZpbGVuYW1lLAorCQkJCSAgICBvcCwgYXVkaXRfY2F1c2UsIHJlc3VsdCwgMCk7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KCZlbnRyeS0+dGVtcGxhdGUsIDAsIHNpemVvZihlbnRyeS0+dGVtcGxhdGUpKTsKKwltZW1jcHkoZW50cnktPnRlbXBsYXRlLmRpZ2VzdCwgaWludC0+ZGlnZXN0LCBJTUFfRElHRVNUX1NJWkUpOworCXN0cm5jcHkoZW50cnktPnRlbXBsYXRlLmZpbGVfbmFtZSwgZmlsZW5hbWUsIElNQV9FVkVOVF9OQU1FX0xFTl9NQVgpOworCisJcmVzdWx0ID0gaW1hX3N0b3JlX3RlbXBsYXRlKGVudHJ5LCB2aW9sYXRpb24sIGlub2RlKTsKKwlpZiAoIXJlc3VsdCkKKwkJaWludC0+ZmxhZ3MgfD0gSU1BX01FQVNVUkVEOworCWVsc2UKKwkJa2ZyZWUoZW50cnkpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfYXVkaXQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2F1ZGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwODJiYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2F1ZGl0LmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbnRlZ3JpdHlfYXVkaXQuYworICogCUF1ZGl0IGNhbGxzIGZvciB0aGUgaW50ZWdyaXR5IHN1YnN5c3RlbQorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSAiaW1hLmgiCisKK3N0YXRpYyBpbnQgaW1hX2F1ZGl0OworCisjaWZkZWYgQ09ORklHX0lNQV9BVURJVAorCisvKiBpbWFfYXVkaXRfc2V0dXAgLSBlbmFibGUgaW5mb3JtYXRpb25hbCBhdWRpdGluZyBtZXNzYWdlcyAqLworc3RhdGljIGludCBfX2luaXQgaW1hX2F1ZGl0X3NldHVwKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGF1ZGl0OworCWludCByYywgcmVzdWx0ID0gMDsKKwljaGFyICpvcCA9ICJpbWFfYXVkaXQiOworCWNoYXIgKmNhdXNlOworCisJcmMgPSBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZhdWRpdCk7CisJaWYgKHJjIHx8IGF1ZGl0ID4gMSkKKwkJcmVzdWx0ID0gMTsKKwllbHNlCisJCWltYV9hdWRpdCA9IGF1ZGl0OworCWNhdXNlID0gaW1hX2F1ZGl0ID8gImVuYWJsZWQiIDogIm5vdF9lbmFibGVkIjsKKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9TVEFUVVMsIE5VTEwsIE5VTEwsCisJCQkgICAgb3AsIGNhdXNlLCByZXN1bHQsIDApOworCXJldHVybiAxOworfQorX19zZXR1cCgiaW1hX2F1ZGl0PSIsIGltYV9hdWRpdF9zZXR1cCk7CisjZW5kaWYKKwordm9pZCBpbnRlZ3JpdHlfYXVkaXRfbXNnKGludCBhdWRpdF9tc2dubywgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqb3AsCisJCQkgY29uc3QgY2hhciAqY2F1c2UsIGludCByZXN1bHQsIGludCBhdWRpdF9pbmZvKQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCisJaWYgKCFpbWFfYXVkaXQgJiYgYXVkaXRfaW5mbyA9PSAxKSAvKiBTa2lwIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKwkJcmV0dXJuOworCisJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY3VycmVudC0+YXVkaXRfY29udGV4dCwgR0ZQX0tFUk5FTCwgYXVkaXRfbXNnbm8pOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJpbnRlZ3JpdHk6IHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSBzZXM9JXUiLAorCQkJIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y3JlZC0+dWlkLAorCQkJIGF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50KSwKKwkJCSBhdWRpdF9nZXRfc2Vzc2lvbmlkKGN1cnJlbnQpKTsKKwlhdWRpdF9sb2dfdGFza19jb250ZXh0KGFiKTsKKwlzd2l0Y2ggKGF1ZGl0X21zZ25vKSB7CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfREFUQToKKwljYXNlIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQToKKwljYXNlIEFVRElUX0lOVEVHUklUWV9QQ1I6CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfU1RBVFVTOgorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9wPSVzIGNhdXNlPSVzIiwgb3AsIGNhdXNlKTsKKwkJYnJlYWs7CisJY2FzZSBBVURJVF9JTlRFR1JJVFlfSEFTSDoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyBoYXNoPSVzIiwgb3AsIGNhdXNlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvcD0lcyIsIG9wKTsKKwl9CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBjb21tPSIpOworCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGN1cnJlbnQtPmNvbW0pOworCWlmIChmbmFtZSkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7CisJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGZuYW1lKTsKKwl9CisJaWYgKGlub2RlKQorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGRldj0lcyBpbm89JWx1IiwKKwkJCQkgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiByZXM9JWQiLCAhcmVzdWx0ID8gMCA6IDEpOworCWF1ZGl0X2xvZ19lbmQoYWIpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfY3J5cHRvLmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQ1NzJiCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfY3J5cHRvLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKiBLeWxlbmUgSGFsbCA8a2poYWxsQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2NyeXB0by5jCisgKiAJQ2FsY3VsYXRlcyBtZDUvc2hhMSBmaWxlIGhhc2gsIHRlbXBsYXRlIGhhc2gsIGJvb3QtYWdncmVhdGUgaGFzaAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworc3RhdGljIGludCBpbml0X2Rlc2Moc3RydWN0IGhhc2hfZGVzYyAqZGVzYykKK3sKKwlpbnQgcmM7CisKKwlkZXNjLT50Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaChpbWFfaGFzaCwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihkZXNjLT50Zm0pKSB7CisJCXByX2luZm8oImZhaWxlZCB0byBsb2FkICVzIHRyYW5zZm9ybTogJWxkXG4iLAorCQkJaW1hX2hhc2gsIFBUUl9FUlIoZGVzYy0+dGZtKSk7CisJCXJjID0gUFRSX0VSUihkZXNjLT50Zm0pOworCQlyZXR1cm4gcmM7CisJfQorCWRlc2MtPmZsYWdzID0gMDsKKwlyYyA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7CisJaWYgKHJjKQorCQljcnlwdG9fZnJlZV9oYXNoKGRlc2MtPnRmbSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBNRDUvU0hBMSBmaWxlIGRpZ2VzdAorICovCitpbnQgaW1hX2NhbGNfaGFzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqZGlnZXN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJbG9mZl90IGlfc2l6ZTsKKwljaGFyICpyYnVmOworCWludCByYywgb2Zmc2V0ID0gMDsKKworCXJjID0gaW5pdF9kZXNjKCZkZXNjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmJ1ZiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJidWYpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJaV9zaXplID0gaV9zaXplX3JlYWQoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXdoaWxlIChvZmZzZXQgPCBpX3NpemUpIHsKKwkJaW50IHJidWZfbGVuOworCisJCXJidWZfbGVuID0ga2VybmVsX3JlYWQoZmlsZSwgb2Zmc2V0LCByYnVmLCBQQUdFX1NJWkUpOworCQlpZiAocmJ1Zl9sZW4gPCAwKSB7CisJCQlyYyA9IHJidWZfbGVuOworCQkJYnJlYWs7CisJCX0KKwkJb2Zmc2V0ICs9IHJidWZfbGVuOworCQlzZ19pbml0X29uZShzZywgcmJ1ZiwgcmJ1Zl9sZW4pOworCisJCXJjID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCBzZywgcmJ1Zl9sZW4pOworCQlpZiAocmMpCisJCQlicmVhazsKKwl9CisJa2ZyZWUocmJ1Zik7CisJaWYgKCFyYykKKwkJcmMgPSBjcnlwdG9faGFzaF9maW5hbCgmZGVzYywgZGlnZXN0KTsKK291dDoKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGhhc2ggb2YgYSBnaXZlbiB0ZW1wbGF0ZQorICovCitpbnQgaW1hX2NhbGNfdGVtcGxhdGVfaGFzaChpbnQgdGVtcGxhdGVfbGVuLCB2b2lkICp0ZW1wbGF0ZSwgY2hhciAqZGlnZXN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJaW50IHJjOworCisJcmMgPSBpbml0X2Rlc2MoJmRlc2MpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlzZ19pbml0X29uZShzZywgdGVtcGxhdGUsIHRlbXBsYXRlX2xlbik7CisJcmMgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsIHNnLCB0ZW1wbGF0ZV9sZW4pOworCWlmICghcmMpCisJCXJjID0gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7CisJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBpbWFfcGNycmVhZChpbnQgaWR4LCB1OCAqcGNyKQoreworCWlmICghaW1hX3VzZWRfY2hpcCkKKwkJcmV0dXJuOworCisJaWYgKHRwbV9wY3JfcmVhZChUUE1fQU5ZX05VTSwgaWR4LCBwY3IpICE9IDApCisJCXByX2VycigiRXJyb3IgQ29tbXVuaWNhdGluZyB0byBUUE0gY2hpcFxuIik7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGJvb3QgYWdncmVnYXRlIGhhc2gKKyAqLworaW50IGltYV9jYWxjX2Jvb3RfYWdncmVnYXRlKGNoYXIgKmRpZ2VzdCkKK3sKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCXU4IHBjcl9pW0lNQV9ESUdFU1RfU0laRV07CisJaW50IHJjLCBpOworCisJcmMgPSBpbml0X2Rlc2MoJmRlc2MpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBjdW11bGF0aXZlIHNoYTEgb3ZlciB0cG0gcmVnaXN0ZXJzIDAtNyAqLworCWZvciAoaSA9IFRQTV9QQ1IwOyBpIDwgVFBNX1BDUjg7IGkrKykgeworCQlpbWFfcGNycmVhZChpLCBwY3JfaSk7CisJCS8qIG5vdyBhY2N1bXVsYXRlIHdpdGggY3VycmVudCBhZ2dyZWdhdGUgKi8KKwkJc2dfaW5pdF9vbmUoJnNnLCBwY3JfaSwgSU1BX0RJR0VTVF9TSVpFKTsKKwkJcmMgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsICZzZywgSU1BX0RJR0VTVF9TSVpFKTsKKwl9CisJaWYgKCFyYykKKwkJY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7CisJY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7CisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiZTI1OQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIEt5bGVuZSBIYWxsIDxramhhbGxAdXMuaWJtLmNvbT4KKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB1cy5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX2ZzLmMKKyAqCWltcGxlbWVuZW50cyBzZWN1cml0eSBmaWxlIHN5c3RlbSBmb3IgcmVwb3J0aW5nCisgKgljdXJyZW50IG1lYXN1cmVtZW50IGxpc3QgYW5kIElNQSBzdGF0aXN0aWNzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorCisjaW5jbHVkZSAiaW1hLmgiCisKK3N0YXRpYyBpbnQgdmFsaWRfcG9saWN5ID0gMTsKKyNkZWZpbmUgVE1QQlVGTEVOIDEyCitzdGF0aWMgc3NpemVfdCBpbWFfc2hvd19odGFibGVfdmFsdWUoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJCSAgICAgbG9mZl90ICpwcG9zLCBhdG9taWNfbG9uZ190ICp2YWwpCit7CisJY2hhciB0bXBidWZbVE1QQlVGTEVOXTsKKwlzc2l6ZV90IGxlbjsKKworCWxlbiA9IHNjbnByaW50Zih0bXBidWYsIFRNUEJVRkxFTiwgIiVsaVxuIiwgYXRvbWljX2xvbmdfcmVhZCh2YWwpKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucyhzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkJICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBpbWFfc2hvd19odGFibGVfdmFsdWUoYnVmLCBjb3VudCwgcHBvcywgJmltYV9odGFibGUudmlvbGF0aW9ucyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CisJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucworfTsKKworc3RhdGljIHNzaXplX3QgaW1hX3Nob3dfbWVhc3VyZW1lbnRzX2NvdW50KHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gaW1hX3Nob3dfaHRhYmxlX3ZhbHVlKGJ1ZiwgY291bnQsIHBwb3MsICZpbWFfaHRhYmxlLmxlbik7CisKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7CisJLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKK307CisKKy8qIHJldHVybnMgcG9pbnRlciB0byBobGlzdF9ub2RlICovCitzdGF0aWMgdm9pZCAqaW1hX21lYXN1cmVtZW50c19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCWxvZmZfdCBsID0gKnBvczsKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZTsKKworCS8qIHdlIG5lZWQgYSBsb2NrIHNpbmNlIHBvcyBjb3VsZCBwb2ludCBiZXlvbmQgbGFzdCBlbGVtZW50ICovCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHFlLCAmaW1hX21lYXN1cmVtZW50cywgbGF0ZXIpIHsKKwkJaWYgKCFsLS0pIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuIHFlOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqaW1hX21lYXN1cmVtZW50c19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUgPSB2OworCisJLyogbG9jayBwcm90ZWN0cyB3aGVuIHJlYWRpbmcgYmV5b25kIGxhc3QgZWxlbWVudAorCSAqIGFnYWluc3QgY29uY3VycmVudCBsaXN0LWV4dGVuc2lvbgorCSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlxZSA9IGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHFlLT5sYXRlci5uZXh0KSwKKwkJCXN0cnVjdCBpbWFfcXVldWVfZW50cnksIGxhdGVyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwkoKnBvcykrKzsKKworCXJldHVybiAoJnFlLT5sYXRlciA9PSAmaW1hX21lYXN1cmVtZW50cykgPyBOVUxMIDogcWU7Cit9CisKK3N0YXRpYyB2b2lkIGltYV9tZWFzdXJlbWVudHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGltYV9wdXRjKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSwgaW50IGRhdGFsZW4pCit7CisJd2hpbGUgKGRhdGFsZW4tLSkKKwkJc2VxX3B1dGMobSwgKihjaGFyICopZGF0YSsrKTsKK30KKworLyogcHJpbnQgZm9ybWF0OgorICogICAgICAgMzJiaXQtbGU9cGNyIworICogICAgICAgY2hhclsyMF09dGVtcGxhdGUgZGlnZXN0CisgKiAgICAgICAzMmJpdC1sZT10ZW1wbGF0ZSBuYW1lIHNpemUKKyAqICAgICAgIGNoYXJbbl09dGVtcGxhdGUgbmFtZQorICogICAgICAgZXZlbnRkYXRhW25dPXRlbXBsYXRlIHNwZWNpZmljIGRhdGEKKyAqLworc3RhdGljIGludCBpbWFfbWVhc3VyZW1lbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCS8qIHRoZSBsaXN0IG5ldmVyIHNocmlua3MsIHNvIHdlIGRvbid0IG5lZWQgYSBsb2NrIGhlcmUgKi8KKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZSA9IHY7CisJc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZTsKKwlpbnQgbmFtZWxlbjsKKwl1MzIgcGNyID0gQ09ORklHX0lNQV9NRUFTVVJFX1BDUl9JRFg7CisKKwkvKiBnZXQgZW50cnkgKi8KKwllID0gcWUtPmVudHJ5OworCWlmIChlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qCisJICogMXN0OiBQQ1JJbmRleAorCSAqIFBDUiB1c2VkIGlzIGFsd2F5cyB0aGUgc2FtZSAoY29uZmlnIG9wdGlvbikgaW4KKwkgKiBsaXR0bGUtZW5kaWFuIGZvcm1hdAorCSAqLworCWltYV9wdXRjKG0sICZwY3IsIHNpemVvZiBwY3IpOworCisJLyogMm5kOiB0ZW1wbGF0ZSBkaWdlc3QgKi8KKwlpbWFfcHV0YyhtLCBlLT5kaWdlc3QsIElNQV9ESUdFU1RfU0laRSk7CisKKwkvKiAzcmQ6IHRlbXBsYXRlIG5hbWUgc2l6ZSAqLworCW5hbWVsZW4gPSBzdHJsZW4oZS0+dGVtcGxhdGVfbmFtZSk7CisJaW1hX3B1dGMobSwgJm5hbWVsZW4sIHNpemVvZiBuYW1lbGVuKTsKKworCS8qIDR0aDogIHRlbXBsYXRlIG5hbWUgKi8KKwlpbWFfcHV0YyhtLCAodm9pZCAqKWUtPnRlbXBsYXRlX25hbWUsIG5hbWVsZW4pOworCisJLyogNXRoOiAgdGVtcGxhdGUgc3BlY2lmaWMgZGF0YSAqLworCWltYV90ZW1wbGF0ZV9zaG93KG0sIChzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgKikmZS0+dGVtcGxhdGUsCisJCQkgIElNQV9TSE9XX0JJTkFSWSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX21lYXN1cm1lbnRzX3NlcW9wcyA9IHsKKwkuc3RhcnQgPSBpbWFfbWVhc3VyZW1lbnRzX3N0YXJ0LAorCS5uZXh0ID0gaW1hX21lYXN1cmVtZW50c19uZXh0LAorCS5zdG9wID0gaW1hX21lYXN1cmVtZW50c19zdG9wLAorCS5zaG93ID0gaW1hX21lYXN1cmVtZW50c19zaG93Cit9OworCitzdGF0aWMgaW50IGltYV9tZWFzdXJlbWVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmltYV9tZWFzdXJtZW50c19zZXFvcHMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZW1lbnRzX29wcyA9IHsKKwkub3BlbiA9IGltYV9tZWFzdXJlbWVudHNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGltYV9wcmludF9kaWdlc3Qoc3RydWN0IHNlcV9maWxlICptLCB1OCAqZGlnZXN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IElNQV9ESUdFU1RfU0laRTsgaSsrKQorCQlzZXFfcHJpbnRmKG0sICIlMDJ4IiwgKihkaWdlc3QgKyBpKSk7Cit9CisKK3ZvaWQgaW1hX3RlbXBsYXRlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICplLCBlbnVtIGltYV9zaG93X3R5cGUgc2hvdykKK3sKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2RhdGEgKmVudHJ5ID0gZTsKKwlpbnQgbmFtZWxlbjsKKworCXN3aXRjaCAoc2hvdykgeworCWNhc2UgSU1BX1NIT1dfQVNDSUk6CisJCWltYV9wcmludF9kaWdlc3QobSwgZW50cnktPmRpZ2VzdCk7CisJCXNlcV9wcmludGYobSwgIiAlc1xuIiwgZW50cnktPmZpbGVfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgSU1BX1NIT1dfQklOQVJZOgorCQlpbWFfcHV0YyhtLCBlbnRyeS0+ZGlnZXN0LCBJTUFfRElHRVNUX1NJWkUpOworCisJCW5hbWVsZW4gPSBzdHJsZW4oZW50cnktPmZpbGVfbmFtZSk7CisJCWltYV9wdXRjKG0sICZuYW1lbGVuLCBzaXplb2YgbmFtZWxlbik7CisJCWltYV9wdXRjKG0sIGVudHJ5LT5maWxlX25hbWUsIG5hbWVsZW4pOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyogcHJpbnQgaW4gYXNjaWkgKi8KK3N0YXRpYyBpbnQgaW1hX2FzY2lpX21lYXN1cmVtZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwkvKiB0aGUgbGlzdCBuZXZlciBzaHJpbmtzLCBzbyB3ZSBkb24ndCBuZWVkIGEgbG9jayBoZXJlICovCisJc3RydWN0IGltYV9xdWV1ZV9lbnRyeSAqcWUgPSB2OworCXN0cnVjdCBpbWFfdGVtcGxhdGVfZW50cnkgKmU7CisKKwkvKiBnZXQgZW50cnkgKi8KKwllID0gcWUtPmVudHJ5OworCWlmIChlID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qIDFzdDogUENSIHVzZWQgKGNvbmZpZyBvcHRpb24pICovCisJc2VxX3ByaW50ZihtLCAiJTJkICIsIENPTkZJR19JTUFfTUVBU1VSRV9QQ1JfSURYKTsKKworCS8qIDJuZDogU0hBMSB0ZW1wbGF0ZSBoYXNoICovCisJaW1hX3ByaW50X2RpZ2VzdChtLCBlLT5kaWdlc3QpOworCisJLyogM3RoOiAgdGVtcGxhdGUgbmFtZSAqLworCXNlcV9wcmludGYobSwgIiAlcyAiLCBlLT50ZW1wbGF0ZV9uYW1lKTsKKworCS8qIDR0aDogIHRlbXBsYXRlIHNwZWNpZmljIGRhdGEgKi8KKwlpbWFfdGVtcGxhdGVfc2hvdyhtLCAoc3RydWN0IGltYV90ZW1wbGF0ZV9kYXRhICopJmUtPnRlbXBsYXRlLAorCQkJICBJTUFfU0hPV19BU0NJSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gaW1hX21lYXN1cmVtZW50c19zdGFydCwKKwkubmV4dCA9IGltYV9tZWFzdXJlbWVudHNfbmV4dCwKKwkuc3RvcCA9IGltYV9tZWFzdXJlbWVudHNfc3RvcCwKKwkuc2hvdyA9IGltYV9hc2NpaV9tZWFzdXJlbWVudHNfc2hvdworfTsKKworc3RhdGljIGludCBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0geworCS5vcGVuID0gaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIHNzaXplX3QgaW1hX3dyaXRlX3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgZGF0YWxlbiwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKmRhdGE7CisJaW50IHJjOworCisJaWYgKGRhdGFsZW4gPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoKnBwb3MgIT0gMCkgeworCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRhdGEgPSBrbWFsbG9jKGRhdGFsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGJ1ZiwgZGF0YWxlbikpIHsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkqKGRhdGEgKyBkYXRhbGVuKSA9ICdcMCc7CisJcmMgPSBpbWFfcGFyc2VfYWRkX3J1bGUoZGF0YSk7CisJaWYgKHJjIDwgMCkgeworCQlkYXRhbGVuID0gLUVJTlZBTDsKKwkJdmFsaWRfcG9saWN5ID0gMDsKKwl9CisKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZGF0YWxlbjsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmltYV9kaXI7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzOworc3RhdGljIHN0cnVjdCBkZW50cnkgKnJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKnZpb2xhdGlvbnM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaW1hX3BvbGljeTsKKworc3RhdGljIGF0b21pY190IHBvbGljeV9vcGVuY291bnQgPSBBVE9NSUNfSU5JVCgxKTsKKy8qCisgKiBpbWFfb3Blbl9wb2xpY3k6IHNlcXVlbnRpYWxpemUgYWNjZXNzIHRvIHRoZSBwb2xpY3kgZmlsZQorICovCitpbnQgaW1hX29wZW5fcG9saWN5KHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBvbGljeV9vcGVuY291bnQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVCVVNZOworfQorCisvKgorICogaW1hX3JlbGVhc2VfcG9saWN5IC0gc3RhcnQgdXNpbmcgdGhlIG5ldyBtZWFzdXJlIHBvbGljeSBydWxlcy4KKyAqCisgKiBJbml0aWFsbHksIGltYV9tZWFzdXJlIHBvaW50cyB0byB0aGUgZGVmYXVsdCBwb2xpY3kgcnVsZXMsIG5vdworICogcG9pbnQgdG8gdGhlIG5ldyBwb2xpY3kgcnVsZXMsIGFuZCByZW1vdmUgdGhlIHNlY3VyaXR5ZnMgcG9saWN5IGZpbGUsCisgKiBhc3N1bWluZyBhIHZhbGlkIHBvbGljeS4KKyAqLworc3RhdGljIGludCBpbWFfcmVsZWFzZV9wb2xpY3koc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKCF2YWxpZF9wb2xpY3kpIHsKKwkJaW1hX2RlbGV0ZV9ydWxlcygpOworCQl2YWxpZF9wb2xpY3kgPSAxOworCQlhdG9taWNfc2V0KCZwb2xpY3lfb3BlbmNvdW50LCAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWltYV91cGRhdGVfcG9saWN5KCk7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX3BvbGljeSk7CisJaW1hX3BvbGljeSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CisJLm9wZW4gPSBpbWFfb3Blbl9wb2xpY3ksCisJLndyaXRlID0gaW1hX3dyaXRlX3BvbGljeSwKKwkucmVsZWFzZSA9IGltYV9yZWxlYXNlX3BvbGljeQorfTsKKworaW50IGltYV9mc19pbml0KHZvaWQpCit7CisJaW1hX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigiaW1hIiwgTlVMTCk7CisJaWYgKElTX0VSUihpbWFfZGlyKSkKKwkJcmV0dXJuIC0xOworCisJYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgiYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzIiwKKwkJCQkgICBTX0lSVVNSIHwgU19JUkdSUCwgaW1hX2RpciwgTlVMTCwKKwkJCQkgICAmaW1hX21lYXN1cmVtZW50c19vcHMpOworCWlmIChJU19FUlIoYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzKSkKKwkJZ290byBvdXQ7CisKKwlhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoImFzY2lpX3J1bnRpbWVfbWVhc3VyZW1lbnRzIiwKKwkJCQkgICBTX0lSVVNSIHwgU19JUkdSUCwgaW1hX2RpciwgTlVMTCwKKwkJCQkgICAmaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMpOworCWlmIChJU19FUlIoYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMpKQorCQlnb3RvIG91dDsKKworCXJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50ID0KKwkgICAgc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicnVudGltZV9tZWFzdXJlbWVudHNfY291bnQiLAorCQkJCSAgIFNfSVJVU1IgfCBTX0lSR1JQLCBpbWFfZGlyLCBOVUxMLAorCQkJCSAgICZpbWFfbWVhc3VyZW1lbnRzX2NvdW50X29wcyk7CisJaWYgKElTX0VSUihydW50aW1lX21lYXN1cmVtZW50c19jb3VudCkpCisJCWdvdG8gb3V0OworCisJdmlvbGF0aW9ucyA9CisJICAgIHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInZpb2xhdGlvbnMiLCBTX0lSVVNSIHwgU19JUkdSUCwKKwkJCQkgICBpbWFfZGlyLCBOVUxMLCAmaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyk7CisJaWYgKElTX0VSUih2aW9sYXRpb25zKSkKKwkJZ290byBvdXQ7CisKKwlpbWFfcG9saWN5ID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicG9saWN5IiwKKwkJCQkJICAgIFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JV1VTUiwKKwkJCQkJICAgIGltYV9kaXIsIE5VTEwsCisJCQkJCSAgICAmaW1hX21lYXN1cmVfcG9saWN5X29wcyk7CisJaWYgKElTX0VSUihpbWFfcG9saWN5KSkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gMDsKK291dDoKKwlzZWN1cml0eWZzX3JlbW92ZShydW50aW1lX21lYXN1cmVtZW50c19jb3VudCk7CisJc2VjdXJpdHlmc19yZW1vdmUoYXNjaWlfcnVudGltZV9tZWFzdXJlbWVudHMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKGJpbmFyeV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX2Rpcik7CisJc2VjdXJpdHlmc19yZW1vdmUoaW1hX3BvbGljeSk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIF9fZXhpdCBpbWFfZnNfY2xlYW51cCh2b2lkKQoreworCXNlY3VyaXR5ZnNfcmVtb3ZlKHZpb2xhdGlvbnMpOworCXNlY3VyaXR5ZnNfcmVtb3ZlKHJ1bnRpbWVfbWVhc3VyZW1lbnRzX2NvdW50KTsKKwlzZWN1cml0eWZzX3JlbW92ZShhc2NpaV9ydW50aW1lX21lYXN1cmVtZW50cyk7CisJc2VjdXJpdHlmc19yZW1vdmUoYmluYXJ5X3J1bnRpbWVfbWVhc3VyZW1lbnRzKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfZGlyKTsKKwlzZWN1cml0eWZzX3JlbW92ZShpbWFfcG9saWN5KTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzc5ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBGaWxlOiBpbWFfaWludC5jCisgKiAJLSBpbXBsZW1lbnRzIHRoZSBJTUEgaG9va3M6IGltYV9pbm9kZV9hbGxvYywgaW1hX2lub2RlX2ZyZWUKKyAqCS0gY2FjaGUgaW50ZWdyaXR5IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICoJICB1c2luZyBhIHJhZGl4IHRyZWUuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworI2RlZmluZSBpbWFfaWludF9kZWxldGUgaW1hX2lub2RlX2ZyZWUKKworUkFESVhfVFJFRShpbWFfaWludF9zdG9yZSwgR0ZQX0FUT01JQyk7CitERUZJTkVfU1BJTkxPQ0soaW1hX2lpbnRfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaWludF9jYWNoZSBfX3JlYWRfbW9zdGx5OworCisvKiBpbWFfaWludF9maW5kX2dldCAtIHJldHVybiB0aGUgaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqCisgKiBpbWFfaWludF9maW5kX2dldCBnZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBpaW50LiBDYWxsZXIgbXVzdAorICogcmVtZW1iZXIgdG8gcHV0IHRoZSBpaW50IHJlZmVyZW5jZS4KKyAqLworc3RydWN0IGltYV9paW50X2NhY2hlICppbWFfaWludF9maW5kX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpaW50ID0gcmFkaXhfdHJlZV9sb29rdXAoJmltYV9paW50X3N0b3JlLCAodW5zaWduZWQgbG9uZylpbm9kZSk7CisJaWYgKCFpaW50KQorCQlnb3RvIG91dDsKKwlrcmVmX2dldCgmaWludC0+cmVmY291bnQpOworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBpaW50OworfQorCisvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUKKyAqIGZyb20gdGhlIGlpbnRfY2FjaGUgc2xhYiwgaW5pdGlhbGl6ZSB0aGUgaWludCwgYW5kCisgKiBpbnNlcnQgaXQgaW50byB0aGUgcmFkaXggdHJlZS4KKyAqCisgKiBPbiBzdWNjZXNzIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGlpbnQ7IG9uIGZhaWx1cmUgcmV0dXJuIE5VTEwuCisgKi8KK3N0cnVjdCBpbWFfaWludF9jYWNoZSAqaW1hX2lpbnRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50ID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBpaW50OworCWlpbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGlpbnRfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghaWludCkKKwkJcmV0dXJuIGlpbnQ7CisKKwlyYyA9IHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfS0VSTkVMKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9jaygmaW1hX2lpbnRfbG9jayk7CisJcmMgPSByYWRpeF90cmVlX2luc2VydCgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlLCBpaW50KTsKKwlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CitvdXQ6CisJaWYgKHJjIDwgMCkgeworCQlrbWVtX2NhY2hlX2ZyZWUoaWludF9jYWNoZSwgaWludCk7CisJCWlmIChyYyA9PSAtRUVYSVNUKSB7CisJCQlzcGluX2xvY2soJmltYV9paW50X2xvY2spOworCQkJaWludCA9IHJhZGl4X3RyZWVfbG9va3VwKCZpbWFfaWludF9zdG9yZSwKKwkJCQkJCSAodW5zaWduZWQgbG9uZylpbm9kZSk7CisJCQlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CisJCX0gZWxzZQorCQkJaWludCA9IE5VTEw7CisJfQorCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwlyZXR1cm4gaWludDsKK30KKworLyoqCisgKiBpbWFfaW5vZGVfYWxsb2MgLSBhbGxvY2F0ZSBhbiBpaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZQorICogQGlub2RlOiBwb2ludGVyIHRvIHRoZSBpbm9kZQorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworaW50IGltYV9pbm9kZV9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWlpbnQgPSBpbWFfaWludF9pbnNlcnQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldCAtIGdldCB0aGUgaWludCBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUKKyAqCisgKiBNb3N0IGluc2VydGlvbnMgYXJlIGRvbmUgYXQgaW5vZGVfYWxsb2MsIGV4Y2VwdCB0aG9zZSBhbGxvY2F0ZWQKKyAqIGJlZm9yZSBsYXRlX2luaXRjYWxsLiBXaGVuIHRoZSBpaW50IGRvZXMgbm90IGV4aXN0LCBhbGxvY2F0ZSBpdCwKKyAqIGluaXRpYWxpemUgYW5kIGluc2VydCBpdCwgYW5kIGluY3JlbWVudCB0aGUgaWludCByZWZjb3VudC4KKyAqCisgKiAoQ2FuJ3QgaW5pdGlhbGl6ZSBhdCBzZWN1cml0eV9pbml0Y2FsbCBiZWZvcmUgYW55IGlub2RlcyBhcmUKKyAqIGFsbG9jYXRlZCwgZ290IHRvIHdhaXQgYXQgbGVhc3QgdW50aWwgcHJvY19pbml0LikKKyAqCisgKiAgUmV0dXJuIHRoZSBpaW50LgorICovCitzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IE5VTEw7CisKKwlpaW50ID0gaW1hX2lpbnRfZmluZF9nZXQoaW5vZGUpOworCWlmIChpaW50KQorCQlyZXR1cm4gaWludDsKKworCWlpbnQgPSBpbWFfaWludF9pbnNlcnQoaW5vZGUpOworCWlmIChpaW50KQorCQlrcmVmX2dldCgmaWludC0+cmVmY291bnQpOworCisJcmV0dXJuIGlpbnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbWFfaWludF9maW5kX2luc2VydF9nZXQpOworCisvKiBpaW50X2ZyZWUgLSBjYWxsZWQgd2hlbiB0aGUgaWludCByZWZjb3VudCBnb2VzIHRvIHplcm8gKi8KK3ZvaWQgaWludF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUsCisJCQkJCQkgICByZWZjb3VudCk7CisJaWludC0+dmVyc2lvbiA9IDA7CisJaWludC0+ZmxhZ3MgPSAwVUw7CisJaWYgKGlpbnQtPnJlYWRjb3VudCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWFkY291bnQ6ICVsZFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgaWludC0+cmVhZGNvdW50KTsKKwkJaWludC0+cmVhZGNvdW50ID0gMDsKKwl9CisJaWYgKGlpbnQtPndyaXRlY291bnQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogd3JpdGVjb3VudDogJWxkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBpaW50LT53cml0ZWNvdW50KTsKKwkJaWludC0+d3JpdGVjb3VudCA9IDA7CisJfQorCWlmIChpaW50LT5vcGVuY291bnQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogb3BlbmNvdW50OiAlbGRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGlpbnQtPm9wZW5jb3VudCk7CisJCWlpbnQtPm9wZW5jb3VudCA9IDA7CisJfQorCWtyZWZfc2V0KCZpaW50LT5yZWZjb3VudCwgMSk7CisJa21lbV9jYWNoZV9mcmVlKGlpbnRfY2FjaGUsIGlpbnQpOworfQorCit2b2lkIGlpbnRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3sKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQgPSBjb250YWluZXJfb2YocmN1X2hlYWQsCisJCQkJCQkgICBzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUsIHJjdSk7CisJa3JlZl9wdXQoJmlpbnQtPnJlZmNvdW50LCBpaW50X2ZyZWUpOworfQorCisvKioKKyAqIGltYV9paW50X2RlbGV0ZSAtIGNhbGxlZCBvbiBpbnRlZ3JpdHlfaW5vZGVfZnJlZQorICogQGlub2RlOiBwb2ludGVyIHRvIHRoZSBpbm9kZQorICoKKyAqIEZyZWUgdGhlIGludGVncml0eSBpbmZvcm1hdGlvbihpaW50KSBhc3NvY2lhdGVkIHdpdGggYW4gaW5vZGUuCisgKi8KK3ZvaWQgaW1hX2lpbnRfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGltYV9paW50X2NhY2hlICppaW50OworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlzcGluX2xvY2soJmltYV9paW50X2xvY2spOworCWlpbnQgPSByYWRpeF90cmVlX2RlbGV0ZSgmaW1hX2lpbnRfc3RvcmUsICh1bnNpZ25lZCBsb25nKWlub2RlKTsKKwlzcGluX3VubG9jaygmaW1hX2lpbnRfbG9jayk7CisJaWYgKGlpbnQpCisJCWNhbGxfcmN1KCZpaW50LT5yY3UsIGlpbnRfcmN1X2ZyZWUpOworfQorCitzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQoreworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCA9IGZvbzsKKworCW1lbXNldChpaW50LCAwLCBzaXplb2YgKmlpbnQpOworCWlpbnQtPnZlcnNpb24gPSAwOworCWlpbnQtPmZsYWdzID0gMFVMOworCW11dGV4X2luaXQoJmlpbnQtPm11dGV4KTsKKwlpaW50LT5yZWFkY291bnQgPSAwOworCWlpbnQtPndyaXRlY291bnQgPSAwOworCWlpbnQtPm9wZW5jb3VudCA9IDA7CisJa3JlZl9zZXQoJmlpbnQtPnJlZmNvdW50LCAxKTsKK30KKwordm9pZCBpbWFfaWludGNhY2hlX2luaXQodm9pZCkKK3sKKwlpaW50X2NhY2hlID0KKwkgICAga21lbV9jYWNoZV9jcmVhdGUoImlpbnRfY2FjaGUiLCBzaXplb2Yoc3RydWN0IGltYV9paW50X2NhY2hlKSwgMCwKKwkJCSAgICAgIFNMQUJfUEFOSUMsIGluaXRfb25jZSk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9pbml0LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwYmI4YwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2luaXQuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyICAgICAgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIExlZW5kZXJ0IHZhbiBEb29ybiA8bGVlbmRlcnRAd2F0c29uLmlibS5jb20+CisgKiBNaW1pIFpvaGFyICAgICAgICAgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9pbml0LmMKKyAqICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlICJpbWEuaCIKKworLyogbmFtZSBmb3IgYm9vdCBhZ2dyZWdhdGUgZW50cnkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpib290X2FnZ3JlZ2F0ZV9uYW1lID0gImJvb3RfYWdncmVnYXRlIjsKK2ludCBpbWFfdXNlZF9jaGlwOworCisvKiBBZGQgdGhlIGJvb3QgYWdncmVnYXRlIHRvIHRoZSBJTUEgbWVhc3VyZW1lbnQgbGlzdCBhbmQgZXh0ZW5kCisgKiB0aGUgUENSIHJlZ2lzdGVyLgorICoKKyAqIENhbGN1bGF0ZSB0aGUgYm9vdCBhZ2dyZWdhdGUsIGEgU0hBMSBvdmVyIHRwbSByZWdpc3RlcnMgMC03LAorICogYXNzdW1pbmcgYSBUUE0gY2hpcCBleGlzdHMsIGFuZCB6ZXJvZXMgaWYgdGhlIFRQTSBjaGlwIGRvZXMgbm90CisgKiBleGlzdC4gIEFkZCB0aGUgYm9vdCBhZ2dyZWdhdGUgbWVhc3VyZW1lbnQgdG8gdGhlIG1lYXN1cmVtZW50CisgKiBsaXN0IGFuZCBleHRlbmQgdGhlIFBDUiByZWdpc3Rlci4KKyAqCisgKiBJZiBhIHRwbSBjaGlwIGRvZXMgbm90IGV4aXN0LCBpbmRpY2F0ZSB0aGUgY29yZSByb290IG9mIHRydXN0IGlzCisgKiBub3QgaGFyZHdhcmUgYmFzZWQgYnkgaW52YWxpZGF0aW5nIHRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlLgorICogKFRoZSBhZ2dyZWdhdGUgUENSIHZhbHVlIGlzIGludmFsaWRhdGVkIGJ5IGFkZGluZyBvbmUgdmFsdWUgdG8KKyAqIHRoZSBtZWFzdXJlbWVudCBsaXN0IGFuZCBleHRlbmRpbmcgdGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUgd2l0aAorICogYSBkaWZmZXJlbnQgdmFsdWUuKSBWaW9sYXRpb25zIGFkZCBhIHplcm8gZW50cnkgdG8gdGhlIG1lYXN1cmVtZW50CisgKiBsaXN0IGFuZCBleHRlbmQgdGhlIGFnZ3JlZ2F0ZSBQQ1IgdmFsdWUgd2l0aCBmZi4uLmZmJ3MuCisgKi8KK3N0YXRpYyB2b2lkIGltYV9hZGRfYm9vdF9hZ2dyZWdhdGUodm9pZCkKK3sKKwlzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeTsKKwljb25zdCBjaGFyICpvcCA9ICJhZGRfYm9vdF9hZ2dyZWdhdGUiOworCWNvbnN0IGNoYXIgKmF1ZGl0X2NhdXNlID0gIkVOT01FTSI7CisJaW50IHJlc3VsdCA9IC1FTk9NRU07CisJaW50IHZpb2xhdGlvbiA9IDE7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCWdvdG8gZXJyX291dDsKKworCW1lbXNldCgmZW50cnktPnRlbXBsYXRlLCAwLCBzaXplb2YoZW50cnktPnRlbXBsYXRlKSk7CisJc3RybmNweShlbnRyeS0+dGVtcGxhdGUuZmlsZV9uYW1lLCBib290X2FnZ3JlZ2F0ZV9uYW1lLAorCQlJTUFfRVZFTlRfTkFNRV9MRU5fTUFYKTsKKwlpZiAoaW1hX3VzZWRfY2hpcCkgeworCQl2aW9sYXRpb24gPSAwOworCQlyZXN1bHQgPSBpbWFfY2FsY19ib290X2FnZ3JlZ2F0ZShlbnRyeS0+dGVtcGxhdGUuZGlnZXN0KTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCWF1ZGl0X2NhdXNlID0gImhhc2hpbmdfZXJyb3IiOworCQkJa2ZyZWUoZW50cnkpOworCQkJZ290byBlcnJfb3V0OworCQl9CisJfQorCXJlc3VsdCA9IGltYV9zdG9yZV90ZW1wbGF0ZShlbnRyeSwgdmlvbGF0aW9uLCBOVUxMKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJa2ZyZWUoZW50cnkpOworCXJldHVybjsKK2Vycl9vdXQ6CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBOVUxMLCBib290X2FnZ3JlZ2F0ZV9uYW1lLCBvcCwKKwkJCSAgICBhdWRpdF9jYXVzZSwgcmVzdWx0LCAwKTsKK30KKworaW50IGltYV9pbml0KHZvaWQpCit7CisJdTggcGNyX2lbSU1BX0RJR0VTVF9TSVpFXTsKKwlpbnQgcmM7CisKKwlpbWFfdXNlZF9jaGlwID0gMDsKKwlyYyA9IHRwbV9wY3JfcmVhZChUUE1fQU5ZX05VTSwgMCwgcGNyX2kpOworCWlmIChyYyA9PSAwKQorCQlpbWFfdXNlZF9jaGlwID0gMTsKKworCWlmICghaW1hX3VzZWRfY2hpcCkKKwkJcHJfaW5mbygiTm8gVFBNIGNoaXAgZm91bmQsIGFjdGl2YXRpbmcgVFBNLWJ5cGFzcyFcbiIpOworCisJaW1hX2FkZF9ib290X2FnZ3JlZ2F0ZSgpOwkvKiBib290IGFnZ3JlZ2F0ZSBtdXN0IGJlIGZpcnN0IGVudHJ5ICovCisJaW1hX2luaXRfcG9saWN5KCk7CisKKwlyZXR1cm4gaW1hX2ZzX2luaXQoKTsKK30KKwordm9pZCBfX2V4aXQgaW1hX2NsZWFudXAodm9pZCkKK3sKKwlpbWFfZnNfY2xlYW51cCgpOworfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTcyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIFJlaW5lciBTYWlsZXIgPHNhaWxlckB3YXRzb24uaWJtLmNvbT4KKyAqIFNlcmdlIEhhbGx5biA8c2VydWVAdXMuaWJtLmNvbT4KKyAqIEt5bGVuZSBIYWxsIDxreWxlbmVAdXMuaWJtLmNvbT4KKyAqIE1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIEZpbGU6IGltYV9tYWluLmMKKyAqICAgICAgICAgICAgIGltcGxlbWVudHMgdGhlIElNQSBob29rczogaW1hX2Jwcm1fY2hlY2ssIGltYV9maWxlX21tYXAsCisgKiAgICAgICAgICAgICBhbmQgaW1hX3BhdGhfY2hlY2suCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorCisjaW5jbHVkZSAiaW1hLmgiCisKK2ludCBpbWFfaW5pdGlhbGl6ZWQ7CisKK2NoYXIgKmltYV9oYXNoID0gInNoYTEiOworc3RhdGljIGludCBfX2luaXQgaGFzaF9zZXR1cChjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqb3AgPSAiaGFzaF9zZXR1cCI7CisJY29uc3QgY2hhciAqaGFzaCA9ICJzaGExIjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgYXVkaXRfaW5mbyA9IDA7CisKKwlpZiAoc3RybmNtcChzdHIsICJtZDUiLCAzKSA9PSAwKSB7CisJCWhhc2ggPSAibWQ1IjsKKwkJaW1hX2hhc2ggPSBzdHI7CisJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgInNoYTEiLCA0KSAhPSAwKSB7CisJCWhhc2ggPSAiaW52YWxpZF9oYXNoX3R5cGUiOworCQlyZXN1bHQgPSAxOworCX0KKwlpbnRlZ3JpdHlfYXVkaXRfbXNnKEFVRElUX0lOVEVHUklUWV9IQVNILCBOVUxMLCBOVUxMLCBvcCwgaGFzaCwKKwkJCSAgICByZXN1bHQsIGF1ZGl0X2luZm8pOworCXJldHVybiAxOworfQorX19zZXR1cCgiaW1hX2hhc2g9IiwgaGFzaF9zZXR1cCk7CisKKy8qKgorICogaW1hX2ZpbGVfZnJlZSAtIGNhbGxlZCBvbiBfX2ZwdXQoKQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUgYmVpbmcgZnJlZWQKKyAqCisgKiBGbGFnIGZpbGVzIHRoYXQgY2hhbmdlZCwgYmFzZWQgb24gaV92ZXJzaW9uOworICogYW5kIGRlY3JlbWVudCB0aGUgaWludCByZWFkY291bnQvd3JpdGVjb3VudC4KKyAqLwordm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisKKwlpZiAoIWltYV9pbml0aWFsaXplZCB8fCAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuOworCWlpbnQgPSBpbWFfaWludF9maW5kX2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJaWYgKGlpbnQtPm9wZW5jb3VudCA8PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlczogJXMgb3Blbi9mcmVlIGltYmFsYW5jZSAocjolbGQgdzolbGQgbzolbGQgZjolbGQpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCSAgICAgICBpaW50LT5yZWFkY291bnQsIGlpbnQtPndyaXRlY291bnQsCisJCSAgICAgICBpaW50LT5vcGVuY291bnQsIGF0b21pY19sb25nX3JlYWQoJmZpbGUtPmZfY291bnQpKTsKKwkJaWYgKCEoaWludC0+ZmxhZ3MgJiBJTUFfSUlOVF9EVU1QX1NUQUNLKSkgeworCQkJZHVtcF9zdGFjaygpOworCQkJaWludC0+ZmxhZ3MgfD0gSU1BX0lJTlRfRFVNUF9TVEFDSzsKKwkJfQorCX0KKwlpaW50LT5vcGVuY291bnQtLTsKKworCWlmICgoZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpID09IEZNT0RFX1JFQUQpCisJCWlpbnQtPnJlYWRjb3VudC0tOworCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWlpbnQtPndyaXRlY291bnQtLTsKKwkJaWYgKGlpbnQtPndyaXRlY291bnQgPT0gMCkgeworCQkJaWYgKGlpbnQtPnZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbikKKwkJCQlpaW50LT5mbGFncyAmPSB+SU1BX01FQVNVUkVEOworCQl9CisJfQorCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKK30KKworLyogaW1hX3JlYWRfd3JpdGVfY2hlY2sgLSByZWZsZWN0IHBvc3NpYmxlIHJlYWRpbmcvd3JpdGluZyBlcnJvcnMgaW4gdGhlIFBDUi4KKyAqCisgKiBXaGVuIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkLCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHdyaXRlLAorICogdGhlIGZpbGUgY291bGQgY2hhbmdlLCByZXN1bHRpbmcgaW4gYSBmaWxlIG1lYXN1cmVtZW50IGVycm9yLgorICoKKyAqIE9wZW5pbmcgYSBmaWxlIGZvciB3cml0ZSwgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuIGZvciByZWFkLCByZXN1bHRzCisgKiBpbiBhIHRpbWUgb2YgbWVhc3VyZSwgdGltZSBvZiB1c2UgKFRvTVRvVSkgZXJyb3IuCisgKgorICogSW4gZWl0aGVyIGNhc2UgaW52YWxpZGF0ZSB0aGUgUENSLgorICovCitlbnVtIGlpbnRfcGNyX2Vycm9yIHsgVE9NVE9VLCBPUEVOX1dSSVRFUlMgfTsKK3N0YXRpYyB2b2lkIGltYV9yZWFkX3dyaXRlX2NoZWNrKGVudW0gaWludF9wY3JfZXJyb3IgZXJyb3IsCisJCQkJIHN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludCwKKwkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWUpCit7CisJc3dpdGNoIChlcnJvcikgeworCWNhc2UgVE9NVE9VOgorCQlpZiAoaWludC0+cmVhZGNvdW50ID4gMCkKKwkJCWltYV9hZGRfdmlvbGF0aW9uKGlub2RlLCBmaWxlbmFtZSwgImludmFsaWRfcGNyIiwKKwkJCQkJICAiVG9NVG9VIik7CisJCWJyZWFrOworCWNhc2UgT1BFTl9XUklURVJTOgorCQlpZiAoaWludC0+d3JpdGVjb3VudCA+IDApCisJCQlpbWFfYWRkX3Zpb2xhdGlvbihpbm9kZSwgZmlsZW5hbWUsICJpbnZhbGlkX3BjciIsCisJCQkJCSAgIm9wZW5fd3JpdGVycyIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhdGhfbWVhc3VyZW1lbnQoc3RydWN0IGltYV9paW50X2NhY2hlICppaW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKElTX0VSUihmaWxlKSkgeworCQlwcl9pbmZvKCIlcyBkZW50cnlfb3BlbiBmYWlsZWRcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIHJjOworCX0KKwlpaW50LT5vcGVuY291bnQrKzsKKwlpaW50LT5yZWFkY291bnQrKzsKKworCXJjID0gaW1hX2NvbGxlY3RfbWVhc3VyZW1lbnQoaWludCwgZmlsZSk7CisJaWYgKCFyYykKKwkJaW1hX3N0b3JlX21lYXN1cmVtZW50KGlpbnQsIGZpbGUsIGZpbGVuYW1lKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogaW1hX3BhdGhfY2hlY2sgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAcGF0aDogY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBwYXRoIHRvIGJlIG1lYXN1cmVkCisgKiBAbWFzazogY29udGFpbnMgTUFZX1JFQUQsIE1BWV9XUklURSBvciBNQVlfRVhFQ1VURQorICoKKyAqIE1lYXN1cmUgdGhlIGZpbGUgYmVpbmcgb3BlbiBmb3IgcmVhZG9ubHksIGJhc2VkIG9uIHRoZQorICogaW1hX211c3RfbWVhc3VyZSgpIHBvbGljeSBkZWNpc2lvbi4KKyAqCisgKiBLZWVwIHJlYWQvd3JpdGUgY291bnRlcnMgZm9yIGFsbCBmaWxlcywgYnV0IG9ubHkKKyAqIGludmFsaWRhdGUgdGhlIFBDUiBmb3IgbWVhc3VyZWQgZmlsZXM6CisgKiAJLSBPcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGUgd2hlbiBhbHJlYWR5IG9wZW4gZm9yIHJlYWQsCisgKgkgIHJlc3VsdHMgaW4gYSB0aW1lIG9mIG1lYXN1cmUsIHRpbWUgb2YgdXNlIChUb01Ub1UpIGVycm9yLgorICoJLSBPcGVuaW5nIGEgZmlsZSBmb3IgcmVhZCB3aGVuIGFscmVhZHkgb3BlbiBmb3Igd3JpdGUsCisgKiAJICBjb3VsZCByZXN1bHQgaW4gYSBmaWxlIG1lYXN1cmVtZW50IGVycm9yLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIChCYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiBhcHByYWlzZV9tZWFzdXJlbWVudCgpLikKKyAqLworaW50IGltYV9wYXRoX2NoZWNrKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7CisJaW50IHJjOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAwOworCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJaWludC0+b3BlbmNvdW50Kys7CisJaWYgKChtYXNrICYgTUFZX1dSSVRFKSB8fCAobWFzayA9PSAwKSkKKwkJaWludC0+d3JpdGVjb3VudCsrOworCWVsc2UgaWYgKG1hc2sgJiAoTUFZX1JFQUQgfCBNQVlfRVhFQykpCisJCWlpbnQtPnJlYWRjb3VudCsrOworCisJcmMgPSBpbWFfbXVzdF9tZWFzdXJlKGlpbnQsIGlub2RlLCBNQVlfUkVBRCwgUEFUSF9DSEVDSyk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpIHx8IChtYXNrID09IDApKQorCQlpbWFfcmVhZF93cml0ZV9jaGVjayhUT01UT1UsIGlpbnQsIGlub2RlLAorCQkJCSAgICAgcGF0aC0+ZGVudHJ5LT5kX25hbWUubmFtZSk7CisKKwlpZiAoKG1hc2sgJiAoTUFZX1dSSVRFIHwgTUFZX1JFQUQgfCBNQVlfRVhFQykpICE9IE1BWV9SRUFEKQorCQlnb3RvIG91dDsKKworCWltYV9yZWFkX3dyaXRlX2NoZWNrKE9QRU5fV1JJVEVSUywgaWludCwgaW5vZGUsCisJCQkgICAgIHBhdGgtPmRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWlmICghKGlpbnQtPmZsYWdzICYgSU1BX01FQVNVUkVEKSkgeworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBkZ2V0KHBhdGgtPmRlbnRyeSk7CisJCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gbW50Z2V0KHBhdGgtPm1udCk7CisKKwkJZmlsZSA9IGRlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBPX1JET05MWSwgY3VycmVudC0+Y3JlZCk7CisJCXJjID0gZ2V0X3BhdGhfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCWlmIChmaWxlKQorCQlmcHV0KGZpbGUpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX21lYXN1cmVtZW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlbmFtZSwKKwkJCSAgICAgICBpbnQgbWFzaywgaW50IGZ1bmN0aW9uKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW1hX2lpbnRfY2FjaGUgKmlpbnQ7CisJaW50IHJjOworCisJaWYgKCFpbWFfaW5pdGlhbGl6ZWQgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAwOworCWlpbnQgPSBpbWFfaWludF9maW5kX2luc2VydF9nZXQoaW5vZGUpOworCWlmICghaWludCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZpaW50LT5tdXRleCk7CisJcmMgPSBpbWFfbXVzdF9tZWFzdXJlKGlpbnQsIGlub2RlLCBtYXNrLCBmdW5jdGlvbik7CisJaWYgKHJjICE9IDApCisJCWdvdG8gb3V0OworCisJcmMgPSBpbWFfY29sbGVjdF9tZWFzdXJlbWVudChpaW50LCBmaWxlKTsKKwlpZiAoIXJjKQorCQlpbWFfc3RvcmVfbWVhc3VyZW1lbnQoaWludCwgZmlsZSwgZmlsZW5hbWUpOworb3V0OgorCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworCWtyZWZfcHV0KCZpaW50LT5yZWZjb3VudCwgaWludF9mcmVlKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG9wZW5jb3VudF9nZXQoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbWFfaWludF9jYWNoZSAqaWludDsKKworCWlmICghaW1hX2luaXRpYWxpemVkIHx8ICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm47CisJaWludCA9IGltYV9paW50X2ZpbmRfaW5zZXJ0X2dldChpbm9kZSk7CisJaWYgKCFpaW50KQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmaWludC0+bXV0ZXgpOworCWlpbnQtPm9wZW5jb3VudCsrOworCW11dGV4X3VubG9jaygmaWludC0+bXV0ZXgpOworfQorCisvKioKKyAqIGltYV9maWxlX21tYXAgLSBiYXNlZCBvbiBwb2xpY3ksIGNvbGxlY3Qvc3RvcmUgbWVhc3VyZW1lbnQuCisgKiBAZmlsZTogcG9pbnRlciB0byB0aGUgZmlsZSB0byBiZSBtZWFzdXJlZCAoTWF5IGJlIE5VTEwpCisgKiBAcHJvdDogY29udGFpbnMgdGhlIHByb3RlY3Rpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgYnkgdGhlIGtlcm5lbC4KKyAqCisgKiBNZWFzdXJlIGZpbGVzIGJlaW5nIG1tYXBwZWQgZXhlY3V0YWJsZSBiYXNlZCBvbiB0aGUgaW1hX211c3RfbWVhc3VyZSgpCisgKiBwb2xpY3kgZGVjaXNpb24uCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogKEJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIGFwcHJhaXNlX21lYXN1cmVtZW50KCkuKQorICovCitpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KQoreworCWludCByYzsKKworCWlmICghZmlsZSkKKwkJcmV0dXJuIDA7CisJaWYgKHByb3QgJiBQUk9UX0VYRUMpCisJCXJjID0gcHJvY2Vzc19tZWFzdXJlbWVudChmaWxlLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJCSBNQVlfRVhFQywgRklMRV9NTUFQKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGltYV9zaG1fY2hlY2sgLSBJUEMgc2htIGFuZCBzaG1hdCBjcmVhdGUvZnB1dCBhIGZpbGUKKyAqCisgKiBNYWludGFpbiB0aGUgb3BlbmNvdW50IGZvciB0aGVzZSBmaWxlcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5CisgKiBpbWJhbGFuY2UgbWVzc2FnZXMuCisgKi8KK3ZvaWQgaW1hX3NobV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlvcGVuY291bnRfZ2V0KGZpbGUpOworCXJldHVybjsKK30KKworLyoqCisgKiBpbWFfYnBybV9jaGVjayAtIGJhc2VkIG9uIHBvbGljeSwgY29sbGVjdC9zdG9yZSBtZWFzdXJlbWVudC4KKyAqIEBicHJtOiBjb250YWlucyB0aGUgbGludXhfYmlucHJtIHN0cnVjdHVyZQorICoKKyAqIFRoZSBPUyBwcm90ZWN0cyBhZ2FpbnN0IGFuIGV4ZWN1dGFibGUgZmlsZSwgYWxyZWFkeSBvcGVuIGZvciB3cml0ZSwKKyAqIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW4gZGVueV93cml0ZV9hY2Nlc3MoKSBhbmQgYW4gZXhlY3V0YWJsZSBmaWxlLAorICogYWxyZWFkeSBvcGVuIGZvciBleGVjdXRlLCBmcm9tIGJlaW5nIG1vZGlmaWVkIGluIGdldF93cml0ZV9hY2Nlc3MoKS4KKyAqIFNvIHdlIGNhbiBiZSBjZXJ0YWluIHRoYXQgd2hhdCB3ZSB2ZXJpZnkgYW5kIG1lYXN1cmUgaGVyZSBpcyBhY3R1YWxseQorICogd2hhdCBpcyBiZWluZyBleGVjdXRlZC4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiAoQmFzZWQgb24gdGhlIHJlc3VsdHMgb2YgYXBwcmFpc2VfbWVhc3VyZW1lbnQoKS4pCisgKi8KK2ludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCWludCByYzsKKworCXJjID0gcHJvY2Vzc19tZWFzdXJlbWVudChicHJtLT5maWxlLCBicHJtLT5maWxlbmFtZSwKKwkJCQkgTUFZX0VYRUMsIEJQUk1fQ0hFQ0spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2ltYSh2b2lkKQoreworCWludCBlcnJvcjsKKworCWltYV9paW50Y2FjaGVfaW5pdCgpOworCWVycm9yID0gaW1hX2luaXQoKTsKKwlpbWFfaW5pdGlhbGl6ZWQgPSAxOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfaW1hKHZvaWQpCit7CisJaW1hX2NsZWFudXAoKTsKK30KKworbGF0ZV9pbml0Y2FsbChpbml0X2ltYSk7CS8qIFN0YXJ0IElNQSBhZnRlciB0aGUgVFBNIGlzIGF2YWlsYWJsZSAqLworCitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcG9saWN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyOTFhZAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX3BvbGljeS5jCkBAIC0wLDAgKzEsNDE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIGltYV9wb2xpY3kuYworICogCS0gaW5pdGlhbGl6ZSBkZWZhdWx0IG1lYXN1cmUgcG9saWN5IHJ1bGVzCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKworI2luY2x1ZGUgImltYS5oIgorCisvKiBmbGFncyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJTUFfRlVOQyAJMHgwMDAxCisjZGVmaW5lIElNQV9NQVNLIAkweDAwMDIKKyNkZWZpbmUgSU1BX0ZTTUFHSUMJMHgwMDA0CisjZGVmaW5lIElNQV9VSUQJCTB4MDAwOAorCitlbnVtIGltYV9hY3Rpb24geyBVTktOT1dOID0gLTEsIERPTlRfTUVBU1VSRSA9IDAsIE1FQVNVUkUgfTsKKworI2RlZmluZSBNQVhfTFNNX1JVTEVTIDYKK2VudW0gbHNtX3J1bGVfdHlwZXMgeyBMU01fT0JKX1VTRVIsIExTTV9PQkpfUk9MRSwgTFNNX09CSl9UWVBFLAorCUxTTV9TVUJKX1VTRVIsIExTTV9TVUJKX1JPTEUsIExTTV9TVUJKX1RZUEUKK307CisKK3N0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJZW51bSBpbWFfYWN0aW9uIGFjdGlvbjsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJZW51bSBpbWFfaG9va3MgZnVuYzsKKwlpbnQgbWFzazsKKwl1bnNpZ25lZCBsb25nIGZzbWFnaWM7CisJdWlkX3QgdWlkOworCXN0cnVjdCB7CisJCXZvaWQgKnJ1bGU7CS8qIExTTSBmaWxlIG1ldGFkYXRhIHNwZWNpZmljICovCisJCWludCB0eXBlOwkvKiBhdWRpdCB0eXBlICovCisJfSBsc21bTUFYX0xTTV9SVUxFU107Cit9OworCisvKiBXaXRob3V0IExTTSBzcGVjaWZpYyBrbm93bGVkZ2UsIHRoZSBkZWZhdWx0IHBvbGljeSBjYW4gb25seSBiZQorICogd3JpdHRlbiBpbiB0ZXJtcyBvZiAuYWN0aW9uLCAuZnVuYywgLm1hc2ssIC5mc21hZ2ljLCBhbmQgLnVpZAorICovCitzdGF0aWMgc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgZGVmYXVsdF9ydWxlc1tdID0geworCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gUFJPQ19TVVBFUl9NQUdJQywKKwkgLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gU1lTRlNfTUFHSUMsLmZsYWdzID0gSU1BX0ZTTUFHSUN9LAorCXsuYWN0aW9uID0gRE9OVF9NRUFTVVJFLC5mc21hZ2ljID0gREVCVUdGU19NQUdJQywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBUTVBGU19NQUdJQywuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSBTRUNVUklUWUZTX01BR0lDLAorCSAuZmxhZ3MgPSBJTUFfRlNNQUdJQ30sCisJey5hY3Rpb24gPSBET05UX01FQVNVUkUsLmZzbWFnaWMgPSAweEY5N0NGRjhDLC5mbGFncyA9IElNQV9GU01BR0lDfSwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBGSUxFX01NQVAsLm1hc2sgPSBNQVlfRVhFQywKKwkgLmZsYWdzID0gSU1BX0ZVTkMgfCBJTUFfTUFTS30sCisJey5hY3Rpb24gPSBNRUFTVVJFLC5mdW5jID0gQlBSTV9DSEVDSywubWFzayA9IE1BWV9FWEVDLAorCSAuZmxhZ3MgPSBJTUFfRlVOQyB8IElNQV9NQVNLfSwKKwl7LmFjdGlvbiA9IE1FQVNVUkUsLmZ1bmMgPSBQQVRIX0NIRUNLLC5tYXNrID0gTUFZX1JFQUQsLnVpZCA9IDAsCisJIC5mbGFncyA9IElNQV9GVU5DIHwgSU1BX01BU0sgfCBJTUFfVUlEfQorfTsKKworc3RhdGljIExJU1RfSEVBRChtZWFzdXJlX2RlZmF1bHRfcnVsZXMpOworc3RhdGljIExJU1RfSEVBRChtZWFzdXJlX3BvbGljeV9ydWxlcyk7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqaW1hX21lYXN1cmU7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoaW1hX21lYXN1cmVfbXV0ZXgpOworCisvKioKKyAqIGltYV9tYXRjaF9ydWxlcyAtIGRldGVybWluZSB3aGV0aGVyIGFuIGlub2RlIG1hdGNoZXMgdGhlIG1lYXN1cmUgcnVsZS4KKyAqIEBydWxlOiBhIHBvaW50ZXIgdG8gYSBydWxlCisgKiBAaW5vZGU6IGEgcG9pbnRlciB0byBhbiBpbm9kZQorICogQGZ1bmM6IExJTSBob29rIGlkZW50aWZpZXIKKyAqIEBtYXNrOiByZXF1ZXN0ZWQgYWN0aW9uIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9BUFBFTkQgfCBNQVlfRVhFQykKKyAqCisgKiBSZXR1cm5zIHRydWUgb24gcnVsZSBtYXRjaCwgZmFsc2Ugb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGJvb2wgaW1hX21hdGNoX3J1bGVzKHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICpydWxlLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gaW1hX2hvb2tzIGZ1bmMsIGludCBtYXNrKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlpbnQgaTsKKworCWlmICgocnVsZS0+ZmxhZ3MgJiBJTUFfRlVOQykgJiYgcnVsZS0+ZnVuYyAhPSBmdW5jKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKChydWxlLT5mbGFncyAmIElNQV9NQVNLKSAmJiBydWxlLT5tYXNrICE9IG1hc2spCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX0ZTTUFHSUMpCisJICAgICYmIHJ1bGUtPmZzbWFnaWMgIT0gaW5vZGUtPmlfc2ItPnNfbWFnaWMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHJ1bGUtPmZsYWdzICYgSU1BX1VJRCkgJiYgcnVsZS0+dWlkICE9IHRzay0+Y3JlZC0+dWlkKQorCQlyZXR1cm4gZmFsc2U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MU01fUlVMRVM7IGkrKykgeworCQlpbnQgcmM7CisJCXUzMiBvc2lkLCBzaWQ7CisKKwkJaWYgKCFydWxlLT5sc21baV0ucnVsZSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoaSkgeworCQljYXNlIExTTV9PQkpfVVNFUjoKKwkJY2FzZSBMU01fT0JKX1JPTEU6CisJCWNhc2UgTFNNX09CSl9UWVBFOgorCQkJc2VjdXJpdHlfaW5vZGVfZ2V0c2VjaWQoaW5vZGUsICZvc2lkKTsKKwkJCXJjID0gc2VjdXJpdHlfZmlsdGVyX3J1bGVfbWF0Y2gob3NpZCwKKwkJCQkJCQlydWxlLT5sc21baV0udHlwZSwKKwkJCQkJCQlBVURJVF9FUVVBTCwKKwkJCQkJCQlydWxlLT5sc21baV0ucnVsZSwKKwkJCQkJCQlOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIExTTV9TVUJKX1VTRVI6CisJCWNhc2UgTFNNX1NVQkpfUk9MRToKKwkJY2FzZSBMU01fU1VCSl9UWVBFOgorCQkJc2VjdXJpdHlfdGFza19nZXRzZWNpZCh0c2ssICZzaWQpOworCQkJcmMgPSBzZWN1cml0eV9maWx0ZXJfcnVsZV9tYXRjaChzaWQsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnR5cGUsCisJCQkJCQkJQVVESVRfRVFVQUwsCisJCQkJCQkJcnVsZS0+bHNtW2ldLnJ1bGUsCisJCQkJCQkJTlVMTCk7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXJjKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBpbWFfbWF0Y2hfcG9saWN5IC0gZGVjaXNpb24gYmFzZWQgb24gTFNNIGFuZCBvdGhlciBjb25kaXRpb25zCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gYW4gaW5vZGUgZm9yIHdoaWNoIHRoZSBwb2xpY3kgZGVjaXNpb24gaXMgYmVpbmcgbWFkZQorICogQGZ1bmM6IElNQSBob29rIGlkZW50aWZpZXIKKyAqIEBtYXNrOiByZXF1ZXN0ZWQgYWN0aW9uIChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9BUFBFTkQgfCBNQVlfRVhFQykKKyAqCisgKiBNZWFzdXJlIGRlY2lzaW9uIGJhc2VkIG9uIGZ1bmMvbWFzay9mc21hZ2ljIGFuZCBMU00oc3Viai9vYmovdHlwZSkKKyAqIGNvbmRpdGlvbnMuCisgKgorICogKFRoZXJlIGlzIG5vIG5lZWQgZm9yIGxvY2tpbmcgd2hlbiB3YWxraW5nIHRoZSBwb2xpY3kgbGlzdCwKKyAqIGFzIGVsZW1lbnRzIGluIHRoZSBsaXN0IGFyZSBuZXZlciBkZWxldGVkLCBub3IgZG9lcyB0aGUgbGlzdAorICogY2hhbmdlLikKKyAqLworaW50IGltYV9tYXRjaF9wb2xpY3koc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBpbWFfaG9va3MgZnVuYywgaW50IG1hc2spCit7CisJc3RydWN0IGltYV9tZWFzdXJlX3J1bGVfZW50cnkgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgaW1hX21lYXN1cmUsIGxpc3QpIHsKKwkJYm9vbCByYzsKKworCQlyYyA9IGltYV9tYXRjaF9ydWxlcyhlbnRyeSwgaW5vZGUsIGZ1bmMsIG1hc2spOworCQlpZiAocmMpCisJCQlyZXR1cm4gZW50cnktPmFjdGlvbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaW1hX2luaXRfcG9saWN5IC0gaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBtZWFzdXJlIHJ1bGVzLgorICoKKyAqIGltYV9tZWFzdXJlIHBvaW50cyB0byBlaXRoZXIgdGhlIG1lYXN1cmVfZGVmYXVsdF9ydWxlcyBvciB0aGUKKyAqIHRoZSBuZXcgbWVhc3VyZV9wb2xpY3lfcnVsZXMuCisgKi8KK3ZvaWQgaW1hX2luaXRfcG9saWN5KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZWZhdWx0X3J1bGVzKTsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZkZWZhdWx0X3J1bGVzW2ldLmxpc3QsICZtZWFzdXJlX2RlZmF1bHRfcnVsZXMpOworCWltYV9tZWFzdXJlID0gJm1lYXN1cmVfZGVmYXVsdF9ydWxlczsKK30KKworLyoqCisgKiBpbWFfdXBkYXRlX3BvbGljeSAtIHVwZGF0ZSBkZWZhdWx0X3J1bGVzIHdpdGggbmV3IG1lYXN1cmUgcnVsZXMKKyAqCisgKiBDYWxsZWQgb24gZmlsZSAucmVsZWFzZSB0byB1cGRhdGUgdGhlIGRlZmF1bHQgcnVsZXMgd2l0aCBhIGNvbXBsZXRlIG5ldworICogcG9saWN5LiAgT25jZSB1cGRhdGVkLCB0aGUgcG9saWN5IGlzIGxvY2tlZCwgbm8gYWRkaXRpb25hbCBydWxlcyBjYW4gYmUKKyAqIGFkZGVkIHRvIHRoZSBwb2xpY3kuCisgKi8KK3ZvaWQgaW1hX3VwZGF0ZV9wb2xpY3kodm9pZCkKK3sKKwljb25zdCBjaGFyICpvcCA9ICJwb2xpY3lfdXBkYXRlIjsKKwljb25zdCBjaGFyICpjYXVzZSA9ICJhbHJlYWR5IGV4aXN0cyI7CisJaW50IHJlc3VsdCA9IDE7CisJaW50IGF1ZGl0X2luZm8gPSAwOworCisJaWYgKGltYV9tZWFzdXJlID09ICZtZWFzdXJlX2RlZmF1bHRfcnVsZXMpIHsKKwkJaW1hX21lYXN1cmUgPSAmbWVhc3VyZV9wb2xpY3lfcnVsZXM7CisJCWNhdXNlID0gImNvbXBsZXRlIjsKKwkJcmVzdWx0ID0gMDsKKwl9CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJICAgIE5VTEwsIG9wLCBjYXVzZSwgcmVzdWx0LCBhdWRpdF9pbmZvKTsKK30KKworZW51bSB7CisJT3B0X2VyciA9IC0xLAorCU9wdF9tZWFzdXJlID0gMSwgT3B0X2RvbnRfbWVhc3VyZSwKKwlPcHRfb2JqX3VzZXIsIE9wdF9vYmpfcm9sZSwgT3B0X29ial90eXBlLAorCU9wdF9zdWJqX3VzZXIsIE9wdF9zdWJqX3JvbGUsIE9wdF9zdWJqX3R5cGUsCisJT3B0X2Z1bmMsIE9wdF9tYXNrLCBPcHRfZnNtYWdpYywgT3B0X3VpZAorfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgcG9saWN5X3Rva2VucyA9IHsKKwl7T3B0X21lYXN1cmUsICJtZWFzdXJlIn0sCisJe09wdF9kb250X21lYXN1cmUsICJkb250X21lYXN1cmUifSwKKwl7T3B0X29ial91c2VyLCAib2JqX3VzZXI9JXMifSwKKwl7T3B0X29ial9yb2xlLCAib2JqX3JvbGU9JXMifSwKKwl7T3B0X29ial90eXBlLCAib2JqX3R5cGU9JXMifSwKKwl7T3B0X3N1YmpfdXNlciwgInN1YmpfdXNlcj0lcyJ9LAorCXtPcHRfc3Vial9yb2xlLCAic3Vial9yb2xlPSVzIn0sCisJe09wdF9zdWJqX3R5cGUsICJzdWJqX3R5cGU9JXMifSwKKwl7T3B0X2Z1bmMsICJmdW5jPSVzIn0sCisJe09wdF9tYXNrLCAibWFzaz0lcyJ9LAorCXtPcHRfZnNtYWdpYywgImZzbWFnaWM9JXMifSwKKwl7T3B0X3VpZCwgInVpZD0lcyJ9LAorCXtPcHRfZXJyLCBOVUxMfQorfTsKKworc3RhdGljIGludCBpbWFfbHNtX3J1bGVfaW5pdChzdHJ1Y3QgaW1hX21lYXN1cmVfcnVsZV9lbnRyeSAqZW50cnksCisJCQkgICAgIGNoYXIgKmFyZ3MsIGludCBsc21fcnVsZSwgaW50IGF1ZGl0X3R5cGUpCit7CisJaW50IHJlc3VsdDsKKworCWVudHJ5LT5sc21bbHNtX3J1bGVdLnR5cGUgPSBhdWRpdF90eXBlOworCXJlc3VsdCA9IHNlY3VyaXR5X2ZpbHRlcl9ydWxlX2luaXQoZW50cnktPmxzbVtsc21fcnVsZV0udHlwZSwKKwkJCQkJICAgQVVESVRfRVFVQUwsIGFyZ3MsCisJCQkJCSAgICZlbnRyeS0+bHNtW2xzbV9ydWxlXS5ydWxlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGltYV9wYXJzZV9ydWxlKGNoYXIgKnJ1bGUsIHN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKKwljaGFyICpwOworCWludCByZXN1bHQgPSAwOworCisJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfSU5URUdSSVRZX1JVTEUpOworCisJZW50cnktPmFjdGlvbiA9IC0xOworCXdoaWxlICgocCA9IHN0cnNlcCgmcnVsZSwgIiBcbiIpKSAhPSBOVUxMKSB7CisJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwkJaW50IHRva2VuOworCQl1bnNpZ25lZCBsb25nIGxudW07CisKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlicmVhazsKKwkJaWYgKCEqcCkKKwkJCWNvbnRpbnVlOworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHBvbGljeV90b2tlbnMsIGFyZ3MpOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X21lYXN1cmU6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiJXMgIiwgIm1lYXN1cmUiKTsKKwkJCWVudHJ5LT5hY3Rpb24gPSBNRUFTVVJFOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RvbnRfbWVhc3VyZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIlcyAiLCAiZG9udF9tZWFzdXJlIik7CisJCQllbnRyeS0+YWN0aW9uID0gRE9OVF9NRUFTVVJFOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Z1bmM6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiZnVuYz0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJQQVRIX0NIRUNLIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IFBBVEhfQ0hFQ0s7CisJCQllbHNlIGlmIChzdHJjbXAoYXJnc1swXS5mcm9tLCAiRklMRV9NTUFQIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IEZJTEVfTU1BUDsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJCUFJNX0NIRUNLIikgPT0gMCkKKwkJCQllbnRyeS0+ZnVuYyA9IEJQUk1fQ0hFQ0s7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCWlmICghcmVzdWx0KQorCQkJCWVudHJ5LT5mbGFncyB8PSBJTUFfRlVOQzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9tYXNrOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm1hc2s9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCWlmICgoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9FWEVDIikpID09IDApCisJCQkJZW50cnktPm1hc2sgPSBNQVlfRVhFQzsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLmZyb20sICJNQVlfV1JJVEUiKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX1dSSVRFOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9SRUFEIikgPT0gMCkKKwkJCQllbnRyeS0+bWFzayA9IE1BWV9SRUFEOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0uZnJvbSwgIk1BWV9BUFBFTkQiKSA9PSAwKQorCQkJCWVudHJ5LT5tYXNrID0gTUFZX0FQUEVORDsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJaWYgKCFyZXN1bHQpCisJCQkJZW50cnktPmZsYWdzIHw9IElNQV9NQVNLOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZzbWFnaWM6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiZnNtYWdpYz0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gc3RyaWN0X3N0cnRvdWwoYXJnc1swXS5mcm9tLCAxNiwKKwkJCQkJCSZlbnRyeS0+ZnNtYWdpYyk7CisJCQlpZiAoIXJlc3VsdCkKKwkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX0ZTTUFHSUM7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfdWlkOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInVpZD0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gc3RyaWN0X3N0cnRvdWwoYXJnc1swXS5mcm9tLCAxMCwgJmxudW0pOworCQkJaWYgKCFyZXN1bHQpIHsKKwkJCQllbnRyeS0+dWlkID0gKHVpZF90KSBsbnVtOworCQkJCWlmIChlbnRyeS0+dWlkICE9IGxudW0pCisJCQkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQkJZWxzZQorCQkJCQllbnRyeS0+ZmxhZ3MgfD0gSU1BX1VJRDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE9wdF9vYmpfdXNlcjoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvYmpfdXNlcj0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9PQkpfVVNFUiwKKwkJCQkJCSAgIEFVRElUX09CSl9VU0VSKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9vYmpfcm9sZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvYmpfcm9sZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9PQkpfUk9MRSwKKwkJCQkJCSAgIEFVRElUX09CSl9ST0xFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9vYmpfdHlwZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJvYmpfdHlwZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9PQkpfVFlQRSwKKwkJCQkJCSAgIEFVRElUX09CSl9UWVBFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJqX3VzZXI6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAic3Vial91c2VyPSVzICIsIGFyZ3NbMF0uZnJvbSk7CisJCQlyZXN1bHQgPSBpbWFfbHNtX3J1bGVfaW5pdChlbnRyeSwgYXJnc1swXS5mcm9tLAorCQkJCQkJICAgTFNNX1NVQkpfVVNFUiwKKwkJCQkJCSAgIEFVRElUX1NVQkpfVVNFUik7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vial9yb2xlOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgInN1Ympfcm9sZT0lcyAiLCBhcmdzWzBdLmZyb20pOworCQkJcmVzdWx0ID0gaW1hX2xzbV9ydWxlX2luaXQoZW50cnksIGFyZ3NbMF0uZnJvbSwKKwkJCQkJCSAgIExTTV9TVUJKX1JPTEUsCisJCQkJCQkgICBBVURJVF9TVUJKX1JPTEUpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3N1YmpfdHlwZToKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJzdWJqX3R5cGU9JXMgIiwgYXJnc1swXS5mcm9tKTsKKwkJCXJlc3VsdCA9IGltYV9sc21fcnVsZV9pbml0KGVudHJ5LCBhcmdzWzBdLmZyb20sCisJCQkJCQkgICBMU01fU1VCSl9UWVBFLAorCQkJCQkJICAgQVVESVRfU1VCSl9UWVBFKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9lcnI6CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiVU5LTk9XTj0lcyAiLCBwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChlbnRyeS0+YWN0aW9uID09IFVOS05PV04pCisJCXJlc3VsdCA9IC1FSU5WQUw7CisKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAicmVzPSVkIiwgIXJlc3VsdCA/IDAgOiAxKTsKKwlhdWRpdF9sb2dfZW5kKGFiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGltYV9wYXJzZV9hZGRfcnVsZSAtIGFkZCBhIHJ1bGUgdG8gbWVhc3VyZV9wb2xpY3lfcnVsZXMKKyAqIEBydWxlIC0gaW1hIG1lYXN1cmVtZW50IHBvbGljeSBydWxlCisgKgorICogVXNlcyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIHBvbGljeSBsaXN0IGZyb20gbXVsdGlwbGUgY29uY3VycmVudCB3cml0ZXJzLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGltYV9wYXJzZV9hZGRfcnVsZShjaGFyICpydWxlKQoreworCWNvbnN0IGNoYXIgKm9wID0gInVwZGF0ZV9wb2xpY3kiOworCXN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeTsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgYXVkaXRfaW5mbyA9IDA7CisKKwkvKiBQcmV2ZW50IGluc3RhbGxlZCBwb2xpY3kgZnJvbSBjaGFuZ2luZyAqLworCWlmIChpbWFfbWVhc3VyZSAhPSAmbWVhc3VyZV9kZWZhdWx0X3J1bGVzKSB7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCQkgICAgTlVMTCwgb3AsICJhbHJlYWR5IGV4aXN0cyIsCisJCQkJICAgIC1FQUNDRVMsIGF1ZGl0X2luZm8pOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfU1RBVFVTLCBOVUxMLAorCQkJCSAgICBOVUxMLCBvcCwgIi1FTk9NRU0iLCAtRU5PTUVNLCBhdWRpdF9pbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5saXN0KTsKKworCXJlc3VsdCA9IGltYV9wYXJzZV9ydWxlKHJ1bGUsIGVudHJ5KTsKKwlpZiAoIXJlc3VsdCkgeworCQltdXRleF9sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7CisJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmbWVhc3VyZV9wb2xpY3lfcnVsZXMpOworCQltdXRleF91bmxvY2soJmltYV9tZWFzdXJlX211dGV4KTsKKwl9IGVsc2UgeworCQlrZnJlZShlbnRyeSk7CisJCWludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX1NUQVRVUywgTlVMTCwKKwkJCQkgICAgTlVMTCwgb3AsICJpbnZhbGlkIHBvbGljeSIsIHJlc3VsdCwKKwkJCQkgICAgYXVkaXRfaW5mbyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIGltYV9kZWxldGVfcnVsZXMgY2FsbGVkIHRvIGNsZWFudXAgaW52YWxpZCBwb2xpY3kgKi8KK3ZvaWQgaW1hX2RlbGV0ZV9ydWxlcyh2b2lkKQoreworCXN0cnVjdCBpbWFfbWVhc3VyZV9ydWxlX2VudHJ5ICplbnRyeSwgKnRtcDsKKworCW11dGV4X2xvY2soJmltYV9tZWFzdXJlX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJm1lYXN1cmVfcG9saWN5X3J1bGVzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWtmcmVlKGVudHJ5KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbWFfbWVhc3VyZV9tdXRleCk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9xdWV1ZS5jIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5NDMxCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfcXVldWUuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogU2VyZ2UgSGFsbHluIDxzZXJ1ZUB1cy5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogRmlsZTogaW1hX3F1ZXVlLmMKKyAqICAgICAgIEltcGxlbWVudHMgcXVldWVzIHRoYXQgc3RvcmUgdGVtcGxhdGUgbWVhc3VyZW1lbnRzIGFuZAorICogICAgICAgbWFpbnRhaW5zIGFnZ3JlZ2F0ZSBvdmVyIHRoZSBzdG9yZWQgbWVhc3VyZW1lbnRzCisgKiAgICAgICBpbiB0aGUgcHJlLWNvbmZpZ3VyZWQgVFBNIFBDUiAoaWYgYXZhaWxhYmxlKS4KKyAqICAgICAgIFRoZSBtZWFzdXJlbWVudCBsaXN0IGlzIGFwcGVuZC1vbmx5LiBObyBlbnRyeSBpcworICogICAgICAgZXZlciByZW1vdmVkIG9yIGNoYW5nZWQgZHVyaW5nIHRoZSBib290LWN5Y2xlLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgImltYS5oIgorCitMSVNUX0hFQUQoaW1hX21lYXN1cmVtZW50cyk7CS8qIGxpc3Qgb2YgYWxsIG1lYXN1cmVtZW50cyAqLworCisvKiBrZXk6IGlub2RlIChiZWZvcmUgc2VjdXJlLWhhc2hpbmcgYSBmaWxlKSAqLworc3RydWN0IGltYV9oX3RhYmxlIGltYV9odGFibGUgPSB7CisJLmxlbiA9IEFUT01JQ19MT05HX0lOSVQoMCksCisJLnZpb2xhdGlvbnMgPSBBVE9NSUNfTE9OR19JTklUKDApLAorCS5xdWV1ZVswIC4uLiBJTUFfTUVBU1VSRV9IVEFCTEVfU0laRSAtIDFdID0gSExJU1RfSEVBRF9JTklUCit9OworCisvKiBtdXRleCBwcm90ZWN0cyBhdG9taWNpdHkgb2YgZXh0ZW5kaW5nIG1lYXN1cmVtZW50IGxpc3QKKyAqIGFuZCBleHRlbmRpbmcgdGhlIFRQTSBQQ1IgYWdncmVnYXRlLiBTaW5jZSB0cG1fZXh0ZW5kIGNhbiB0YWtlCisgKiBsb25nIChhbmQgdGhlIHRwbSBkcml2ZXIgdXNlcyBhIG11dGV4KSwgd2UgY2FuJ3QgdXNlIHRoZSBzcGlubG9jay4KKyAqLworc3RhdGljIERFRklORV9NVVRFWChpbWFfZXh0ZW5kX2xpc3RfbXV0ZXgpOworCisvKiBsb29rdXAgdXAgdGhlIGRpZ2VzdCB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZSwgYW5kIHJldHVybiB0aGUgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICppbWFfbG9va3VwX2RpZ2VzdF9lbnRyeSh1OCAqZGlnZXN0X3ZhbHVlKQoreworCXN0cnVjdCBpbWFfcXVldWVfZW50cnkgKnFlLCAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQga2V5OworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJaW50IHJjOworCisJa2V5ID0gaW1hX2hhc2hfa2V5KGRpZ2VzdF92YWx1ZSk7CisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShxZSwgcG9zLCAmaW1hX2h0YWJsZS5xdWV1ZVtrZXldLCBobmV4dCkgeworCQlyYyA9IG1lbWNtcChxZS0+ZW50cnktPmRpZ2VzdCwgZGlnZXN0X3ZhbHVlLCBJTUFfRElHRVNUX1NJWkUpOworCQlpZiAocmMgPT0gMCkgeworCQkJcmV0ID0gcWU7CisJCQlicmVhazsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBpbWFfYWRkX3RlbXBsYXRlX2VudHJ5IGhlbHBlciBmdW5jdGlvbjoKKyAqIC0gQWRkIHRlbXBsYXRlIGVudHJ5IHRvIG1lYXN1cmVtZW50IGxpc3QgYW5kIGhhc2ggdGFibGUuCisgKgorICogKENhbGxlZCB3aXRoIGltYV9leHRlbmRfbGlzdF9tdXRleCBoZWxkLikKKyAqLworc3RhdGljIGludCBpbWFfYWRkX2RpZ2VzdF9lbnRyeShzdHJ1Y3QgaW1hX3RlbXBsYXRlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgaW1hX3F1ZXVlX2VudHJ5ICpxZTsKKwl1bnNpZ25lZCBpbnQga2V5OworCisJcWUgPSBrbWFsbG9jKHNpemVvZigqcWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocWUgPT0gTlVMTCkgeworCQlwcl9lcnIoIk9VVCBPRiBNRU1PUlkgRVJST1IgY3JlYXRpbmcgcXVldWUgZW50cnkuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXFlLT5lbnRyeSA9IGVudHJ5OworCisJSU5JVF9MSVNUX0hFQUQoJnFlLT5sYXRlcik7CisJbGlzdF9hZGRfdGFpbF9yY3UoJnFlLT5sYXRlciwgJmltYV9tZWFzdXJlbWVudHMpOworCisJYXRvbWljX2xvbmdfaW5jKCZpbWFfaHRhYmxlLmxlbik7CisJa2V5ID0gaW1hX2hhc2hfa2V5KGVudHJ5LT5kaWdlc3QpOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmcWUtPmhuZXh0LCAmaW1hX2h0YWJsZS5xdWV1ZVtrZXldKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWFfcGNyX2V4dGVuZChjb25zdCB1OCAqaGFzaCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmICghaW1hX3VzZWRfY2hpcCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IHRwbV9wY3JfZXh0ZW5kKFRQTV9BTllfTlVNLCBDT05GSUdfSU1BX01FQVNVUkVfUENSX0lEWCwgaGFzaCk7CisJaWYgKHJlc3VsdCAhPSAwKQorCQlwcl9lcnIoIkVycm9yIENvbW11bmljYXRpbmcgdG8gVFBNIGNoaXBcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIEFkZCB0ZW1wbGF0ZSBlbnRyeSB0byB0aGUgbWVhc3VyZW1lbnQgbGlzdCBhbmQgaGFzaCB0YWJsZSwKKyAqIGFuZCBleHRlbmQgdGhlIHBjci4KKyAqLworaW50IGltYV9hZGRfdGVtcGxhdGVfZW50cnkoc3RydWN0IGltYV90ZW1wbGF0ZV9lbnRyeSAqZW50cnksIGludCB2aW9sYXRpb24sCisJCQkgICBjb25zdCBjaGFyICpvcCwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl1OCBkaWdlc3RbSU1BX0RJR0VTVF9TSVpFXTsKKwljb25zdCBjaGFyICphdWRpdF9jYXVzZSA9ICJoYXNoX2FkZGVkIjsKKwlpbnQgYXVkaXRfaW5mbyA9IDE7CisJaW50IHJlc3VsdCA9IDA7CisKKwltdXRleF9sb2NrKCZpbWFfZXh0ZW5kX2xpc3RfbXV0ZXgpOworCWlmICghdmlvbGF0aW9uKSB7CisJCW1lbWNweShkaWdlc3QsIGVudHJ5LT5kaWdlc3QsIHNpemVvZiBkaWdlc3QpOworCQlpZiAoaW1hX2xvb2t1cF9kaWdlc3RfZW50cnkoZGlnZXN0KSkgeworCQkJYXVkaXRfY2F1c2UgPSAiaGFzaF9leGlzdHMiOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXN1bHQgPSBpbWFfYWRkX2RpZ2VzdF9lbnRyeShlbnRyeSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJYXVkaXRfY2F1c2UgPSAiRU5PTUVNIjsKKwkJYXVkaXRfaW5mbyA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh2aW9sYXRpb24pCQkvKiBpbnZhbGlkYXRlIHBjciAqLworCQltZW1zZXQoZGlnZXN0LCAweGZmLCBzaXplb2YgZGlnZXN0KTsKKworCXJlc3VsdCA9IGltYV9wY3JfZXh0ZW5kKGRpZ2VzdCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWF1ZGl0X2NhdXNlID0gIlRQTSBlcnJvciI7CisJCWF1ZGl0X2luZm8gPSAwOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmltYV9leHRlbmRfbGlzdF9tdXRleCk7CisJaW50ZWdyaXR5X2F1ZGl0X21zZyhBVURJVF9JTlRFR1JJVFlfUENSLCBpbm9kZSwgZW50cnktPnRlbXBsYXRlX25hbWUsCisJCQkgICAgb3AsIGF1ZGl0X2NhdXNlLCByZXN1bHQsIGF1ZGl0X2luZm8pOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggODE5MzJhYi4uOWZiNjc5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtNTMsNiArNTMsNyBAQAogCWF0b21pY190CQlua2V5czsJCS8qIG51bWJlciBvZiBrZXlzICovCiAJYXRvbWljX3QJCW5pa2V5czsJCS8qIG51bWJlciBvZiBpbnN0YW50aWF0ZWQga2V5cyAqLwogCXVpZF90CQkJdWlkOworCXN0cnVjdCB1c2VyX25hbWVzcGFjZQkqdXNlcl9uczsKIAlpbnQJCQlxbmtleXM7CQkvKiBudW1iZXIgb2Yga2V5cyBhbGxvY2F0ZWQgdG8gdGhpcyB1c2VyICovCiAJaW50CQkJcW5ieXRlczsJLyogbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCB0byB0aGlzIHVzZXIgKi8KIH07CkBAIC02MSw3ICs2Miw4IEBACiBleHRlcm4gc3BpbmxvY2tfdAlrZXlfdXNlcl9sb2NrOwogZXh0ZXJuIHN0cnVjdCBrZXlfdXNlcglyb290X2tleV91c2VyOwogCi1leHRlcm4gc3RydWN0IGtleV91c2VyICprZXlfdXNlcl9sb29rdXAodWlkX3QgdWlkKTsKK2V4dGVybiBzdHJ1Y3Qga2V5X3VzZXIgKmtleV91c2VyX2xvb2t1cCh1aWRfdCB1aWQsCisJCQkJCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyk7CiBleHRlcm4gdm9pZCBrZXlfdXNlcl9wdXQoc3RydWN0IGtleV91c2VyICp1c2VyKTsKIAogLyoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGY3NmM4YTUuLjRhMTI5N2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlCSprZXlfamFyOwpAQCAtNjAsNyArNjEsNyBAQAogICogZ2V0IHRoZSBrZXkgcXVvdGEgcmVjb3JkIGZvciBhIHVzZXIsIGFsbG9jYXRpbmcgYSBuZXcgcmVjb3JkIGlmIG9uZSBkb2Vzbid0CiAgKiBhbHJlYWR5IGV4aXN0CiAgKi8KLXN0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCkKK3N0cnVjdCBrZXlfdXNlciAqa2V5X3VzZXJfbG9va3VwKHVpZF90IHVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKQogewogCXN0cnVjdCBrZXlfdXNlciAqY2FuZGlkYXRlID0gTlVMTCwgKnVzZXI7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CkBAIC03OSw2ICs4MCwxMCBAQAogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlIGlmICh1aWQgPiB1c2VyLT51aWQpCiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OworCQllbHNlIGlmICh1c2VyX25zIDwgdXNlci0+dXNlcl9ucykKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAodXNlcl9ucyA+IHVzZXItPnVzZXJfbnMpCisJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCQllbHNlCiAJCQlnb3RvIGZvdW5kOwogCX0KQEAgLTEwNiw2ICsxMTEsNyBAQAogCWF0b21pY19zZXQoJmNhbmRpZGF0ZS0+bmtleXMsIDApOwogCWF0b21pY19zZXQoJmNhbmRpZGF0ZS0+bmlrZXlzLCAwKTsKIAljYW5kaWRhdGUtPnVpZCA9IHVpZDsKKwljYW5kaWRhdGUtPnVzZXJfbnMgPSBnZXRfdXNlcl9ucyh1c2VyX25zKTsKIAljYW5kaWRhdGUtPnFua2V5cyA9IDA7CiAJY2FuZGlkYXRlLT5xbmJ5dGVzID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmY2FuZGlkYXRlLT5sb2NrKTsKQEAgLTEzNiw2ICsxNDIsNyBAQAogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZ1c2VyLT51c2FnZSwgJmtleV91c2VyX2xvY2spKSB7CiAJCXJiX2VyYXNlKCZ1c2VyLT5ub2RlLCAma2V5X3VzZXJfdHJlZSk7CiAJCXNwaW5fdW5sb2NrKCZrZXlfdXNlcl9sb2NrKTsKKwkJcHV0X3VzZXJfbnModXNlci0+dXNlcl9ucyk7CiAKIAkJa2ZyZWUodXNlcik7CiAJfQpAQCAtMjM0LDcgKzI0MSw3IEBACiAJcXVvdGFsZW4gPSBkZXNjbGVuICsgdHlwZS0+ZGVmX2RhdGFsZW47CiAKIAkvKiBnZXQgaG9sZCBvZiB0aGUga2V5IHRyYWNraW5nIGZvciB0aGlzIHVzZXIgKi8KLQl1c2VyID0ga2V5X3VzZXJfbG9va3VwKHVpZCk7CisJdXNlciA9IGtleV91c2VyX2xvb2t1cCh1aWQsIGNyZWQtPnVzZXItPnVzZXJfbnMpOwogCWlmICghdXNlcikKIAkJZ290byBub19tZW1vcnlfMTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggYjFlYzNiNC4uN2YwOWZiOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC03MjYsNyArNzI2LDcgQEAKIAkvKiBjaGFuZ2UgdGhlIFVJRCAqLwogCWlmICh1aWQgIT0gKHVpZF90KSAtMSAmJiB1aWQgIT0ga2V5LT51aWQpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJbmV3b3duZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkKTsKKwkJbmV3b3duZXIgPSBrZXlfdXNlcl9sb29rdXAodWlkLCBjdXJyZW50X3VzZXJfbnMoKSk7CiAJCWlmICghbmV3b3duZXIpCiAJCQlnb3RvIGVycm9yX3B1dDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCBlZDg1MTU3Li4zZGJhODFjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtNTM5LDYgKzUzOSw5IEBACiAJCQkJICAgICZrZXlyaW5nX25hbWVfaGFzaFtidWNrZXRdLAogCQkJCSAgICB0eXBlX2RhdGEubGluawogCQkJCSAgICApIHsKKwkJCWlmIChrZXlyaW5nLT51c2VyLT51c2VyX25zICE9IGN1cnJlbnRfdXNlcl9ucygpKQorCQkJCWNvbnRpbnVlOworCiAJCQlpZiAodGVzdF9iaXQoS0VZX0ZMQUdfUkVWT0tFRCwgJmtleXJpbmctPmZsYWdzKSkKIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wZXJtaXNzaW9uLmMgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwppbmRleCA1ZDlmYzdiLi4wZWQ4MDJjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYworKysgYi9zZWN1cml0eS9rZXlzL3Blcm1pc3Npb24uYwpAQCAtMzUsNiArMzUsOSBAQAogCiAJa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5X3JlZik7CiAKKwlpZiAoa2V5LT51c2VyLT51c2VyX25zICE9IGNyZWQtPnVzZXItPnVzZXJfbnMpCisJCWdvdG8gdXNlX290aGVyX3Blcm1zOworCiAJLyogdXNlIHRoZSBzZWNvbmQgOC1iaXRzIG9mIHBlcm1pc3Npb25zIGZvciBrZXlzIHRoZSBjYWxsZXIgb3ducyAqLwogCWlmIChrZXktPnVpZCA9PSBjcmVkLT5mc3VpZCkgewogCQlrcGVybSA9IGtleS0+cGVybSA+PiAxNjsKQEAgLTU2LDYgKzU5LDggQEAKIAkJfQogCX0KIAordXNlX290aGVyX3Blcm1zOgorCiAJLyogb3RoZXJ3aXNlIHVzZSB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgOC1iaXRzICovCiAJa3Blcm0gPSBrZXktPnBlcm07CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvYy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKaW5kZXggN2Y1MDhkZS4uNzY5ZjliZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKQEAgLTkxLDYgKzkxLDI4IEBACiAgKi8KICNpZmRlZiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMKIAorc3RhdGljIHN0cnVjdCByYl9ub2RlICpfX2tleV9zZXJpYWxfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShuLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CisJCWlmIChrZXktPnVzZXItPnVzZXJfbnMgPT0gY3VycmVudF91c2VyX25zKCkpCisJCQlicmVhazsKKwkJbiA9IHJiX25leHQobik7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV9zZXJpYWxfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKK3sKKwlyZXR1cm4gX19rZXlfc2VyaWFsX25leHQocmJfbmV4dChuKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3NlcmlhbF9maXJzdChzdHJ1Y3QgcmJfcm9vdCAqcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX2ZpcnN0KHIpOworCXJldHVybiBfX2tleV9zZXJpYWxfbmV4dChuKTsKK30KKwogc3RhdGljIGludCBwcm9jX2tleXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnByb2Nfa2V5c19vcHMpOwpAQCAtMTA0LDEwICsxMjYsMTAgQEAKIAogCXNwaW5fbG9jaygma2V5X3NlcmlhbF9sb2NrKTsKIAotCV9wID0gcmJfZmlyc3QoJmtleV9zZXJpYWxfdHJlZSk7CisJX3AgPSBrZXlfc2VyaWFsX2ZpcnN0KCZrZXlfc2VyaWFsX3RyZWUpOwogCXdoaWxlIChwb3MgPiAwICYmIF9wKSB7CiAJCXBvcy0tOwotCQlfcCA9IHJiX25leHQoX3ApOworCQlfcCA9IGtleV9zZXJpYWxfbmV4dChfcCk7CiAJfQogCiAJcmV0dXJuIF9wOwpAQCAtMTE3LDcgKzEzOSw3IEBACiBzdGF0aWMgdm9pZCAqcHJvY19rZXlzX25leHQoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCiB7CiAJKCpfcG9zKSsrOwotCXJldHVybiByYl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKKwlyZXR1cm4ga2V5X3NlcmlhbF9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKIAogfQogCkBAIC0yMDMsNiArMjI1LDI3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgKi8KIAorc3RhdGljIHN0cnVjdCByYl9ub2RlICpfX2tleV91c2VyX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJd2hpbGUgKG4pIHsKKwkJc3RydWN0IGtleV91c2VyICp1c2VyID0gcmJfZW50cnkobiwgc3RydWN0IGtleV91c2VyLCBub2RlKTsKKwkJaWYgKHVzZXItPnVzZXJfbnMgPT0gY3VycmVudF91c2VyX25zKCkpCisJCQlicmVhazsKKwkJbiA9IHJiX25leHQobik7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV91c2VyX25leHQoc3RydWN0IHJiX25vZGUgKm4pCit7CisJcmV0dXJuIF9fa2V5X3VzZXJfbmV4dChyYl9uZXh0KG4pKTsKK30KKworc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfdXNlcl9maXJzdChzdHJ1Y3QgcmJfcm9vdCAqcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX2ZpcnN0KHIpOworCXJldHVybiBfX2tleV91c2VyX25leHQobik7Cit9CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogaW1wbGVtZW50ICIvcHJvYy9rZXktdXNlcnMiIHRvIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGUga2V5IHVzZXJzCkBAIC0yMjAsMTAgKzI2MywxMCBAQAogCiAJc3Bpbl9sb2NrKCZrZXlfdXNlcl9sb2NrKTsKIAotCV9wID0gcmJfZmlyc3QoJmtleV91c2VyX3RyZWUpOworCV9wID0ga2V5X3VzZXJfZmlyc3QoJmtleV91c2VyX3RyZWUpOwogCXdoaWxlIChwb3MgPiAwICYmIF9wKSB7CiAJCXBvcy0tOwotCQlfcCA9IHJiX25leHQoX3ApOworCQlfcCA9IGtleV91c2VyX25leHQoX3ApOwogCX0KIAogCXJldHVybiBfcDsKQEAgLTIzMyw3ICsyNzYsNyBAQAogc3RhdGljIHZvaWQgKnByb2Nfa2V5X3VzZXJzX25leHQoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCiB7CiAJKCpfcG9zKSsrOwotCXJldHVybiByYl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKKwlyZXR1cm4ga2V5X3VzZXJfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggMmY1ZDg5ZS4uMjc2ZDI3OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0zNCw2ICszNSw3IEBACiAJLm5rZXlzCQk9IEFUT01JQ19JTklUKDIpLAogCS5uaWtleXMJCT0gQVRPTUlDX0lOSVQoMiksCiAJLnVpZAkJPSAwLAorCS51c2VyX25zCT0gJmluaXRfdXNlcl9ucywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwppbmRleCAwZTA0ZjcyLi4yMmEzMTU4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCWtlbnRlcigiIik7CiAKLQl1c2VyID0ga2V5X3VzZXJfbG9va3VwKGN1cnJlbnRfZnN1aWQoKSk7CisJdXNlciA9IGtleV91c2VyX2xvb2t1cChjdXJyZW50X2ZzdWlkKCksIGN1cnJlbnRfdXNlcl9ucygpKTsKIAlpZiAoIXVzZXIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCBlYjQxZjQzLi43ZjliNWZhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTg4LDE3ICs4OCwxNiBAQAogCXUzMgkJCXRzaWQ7CiAJdTE2CQkJdGNsYXNzOwogCXN0cnVjdCBhdl9kZWNpc2lvbglhdmQ7Ci0JYXRvbWljX3QJCXVzZWQ7CS8qIHVzZWQgcmVjZW50bHkgKi8KIH07CiAKIHN0cnVjdCBhdmNfbm9kZSB7CiAJc3RydWN0IGF2Y19lbnRyeQlhZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUJbGlzdDsgLyogYW5jaG9yZWQgaW4gYXZjX2NhY2hlLT5zbG90c1tpXSAqLwogCXN0cnVjdCByY3VfaGVhZAkJcmhlYWQ7CiB9OwogCiBzdHJ1Y3QgYXZjX2NhY2hlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3RzW0FWQ19DQUNIRV9TTE9UU107CisJc3RydWN0IGhsaXN0X2hlYWQJc2xvdHNbQVZDX0NBQ0hFX1NMT1RTXTsgLyogaGVhZCBmb3IgYXZjX25vZGUtPmxpc3QgKi8KIAlzcGlubG9ja190CQlzbG90c19sb2NrW0FWQ19DQUNIRV9TTE9UU107IC8qIGxvY2sgZm9yIHdyaXRlcyAqLwogCWF0b21pY190CQlscnVfaGludDsJLyogTFJVIGhpbnQgZm9yIHJlY2xhaW0gc2NhbiAqLwogCWF0b21pY190CQlhY3RpdmVfbm9kZXM7CkBAIC0yMzQsNyArMjMzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVkNfQ0FDSEVfU0xPVFM7IGkrKykgewotCQlJTklUX0xJU1RfSEVBRCgmYXZjX2NhY2hlLnNsb3RzW2ldKTsKKwkJSU5JVF9ITElTVF9IRUFEKCZhdmNfY2FjaGUuc2xvdHNbaV0pOwogCQlzcGluX2xvY2tfaW5pdCgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaV0pOwogCX0KIAlhdG9taWNfc2V0KCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzLCAwKTsKQEAgLTI1MCwxNiArMjQ5LDIwIEBACiB7CiAJaW50IGksIGNoYWluX2xlbiwgbWF4X2NoYWluX2xlbiwgc2xvdHNfdXNlZDsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlzbG90c191c2VkID0gMDsKIAltYXhfY2hhaW5fbGVuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVZDX0NBQ0hFX1NMT1RTOyBpKyspIHsKLQkJaWYgKCFsaXN0X2VtcHR5KCZhdmNfY2FjaGUuc2xvdHNbaV0pKSB7CisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2ldOworCQlpZiAoIWhsaXN0X2VtcHR5KGhlYWQpKSB7CisJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwogCQkJc2xvdHNfdXNlZCsrOwogCQkJY2hhaW5fbGVuID0gMDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaV0sIGxpc3QpCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkKIAkJCQljaGFpbl9sZW4rKzsKIAkJCWlmIChjaGFpbl9sZW4gPiBtYXhfY2hhaW5fbGVuKQogCQkJCW1heF9jaGFpbl9sZW4gPSBjaGFpbl9sZW47CkBAIC0yODMsNyArMjg2LDcgQEAKIAogc3RhdGljIHZvaWQgYXZjX25vZGVfZGVsZXRlKHN0cnVjdCBhdmNfbm9kZSAqbm9kZSkKIHsKLQlsaXN0X2RlbF9yY3UoJm5vZGUtPmxpc3QpOworCWhsaXN0X2RlbF9yY3UoJm5vZGUtPmxpc3QpOwogCWNhbGxfcmN1KCZub2RlLT5yaGVhZCwgYXZjX25vZGVfZnJlZSk7CiAJYXRvbWljX2RlYygmYXZjX2NhY2hlLmFjdGl2ZV9ub2Rlcyk7CiB9CkBAIC0yOTcsNyArMzAwLDcgQEAKIAogc3RhdGljIHZvaWQgYXZjX25vZGVfcmVwbGFjZShzdHJ1Y3QgYXZjX25vZGUgKm5ldywgc3RydWN0IGF2Y19ub2RlICpvbGQpCiB7Ci0JbGlzdF9yZXBsYWNlX3JjdSgmb2xkLT5saXN0LCAmbmV3LT5saXN0KTsKKwlobGlzdF9yZXBsYWNlX3JjdSgmb2xkLT5saXN0LCAmbmV3LT5saXN0KTsKIAljYWxsX3JjdSgmb2xkLT5yaGVhZCwgYXZjX25vZGVfZnJlZSk7CiAJYXRvbWljX2RlYygmYXZjX2NhY2hlLmFjdGl2ZV9ub2Rlcyk7CiB9CkBAIC0zMDcsMjkgKzMxMCwzMSBAQAogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKIAlpbnQgaHZhbHVlLCB0cnksIGVjeDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCXNwaW5sb2NrX3QgKmxvY2s7CiAKIAlmb3IgKHRyeSA9IDAsIGVjeCA9IDA7IHRyeSA8IEFWQ19DQUNIRV9TTE9UUzsgdHJ5KyspIHsKIAkJaHZhbHVlID0gYXRvbWljX2luY19yZXR1cm4oJmF2Y19jYWNoZS5scnVfaGludCkgJiAoQVZDX0NBQ0hFX1NMT1RTIC0gMSk7CisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXTsKIAotCQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFncykpCisJCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpKQogCQkJY29udGludWU7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgewotCQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5vZGUtPmFlLnVzZWQpKSB7Ci0JCQkJLyogUmVjZW50bHkgVW51c2VkICovCi0JCQkJYXZjX25vZGVfZGVsZXRlKG5vZGUpOwotCQkJCWF2Y19jYWNoZV9zdGF0c19pbmNyKHJlY2xhaW1zKTsKLQkJCQllY3grKzsKLQkJCQlpZiAoZWN4ID49IEFWQ19DQUNIRV9SRUNMQUlNKSB7Ci0JCQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFncyk7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkgeworCQkJYXZjX25vZGVfZGVsZXRlKG5vZGUpOworCQkJYXZjX2NhY2hlX3N0YXRzX2luY3IocmVjbGFpbXMpOworCQkJZWN4Kys7CisJCQlpZiAoZWN4ID49IEFWQ19DQUNIRV9SRUNMQUlNKSB7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CisJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CiAJfQogb3V0OgogCXJldHVybiBlY3g7CkBAIC0zNDQsOCArMzQ5LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlJTklUX1JDVV9IRUFEKCZub2RlLT5yaGVhZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5vZGUtPmxpc3QpOwotCWF0b21pY19zZXQoJm5vZGUtPmFlLnVzZWQsIDEpOworCUlOSVRfSExJU1RfTk9ERSgmbm9kZS0+bGlzdCk7CiAJYXZjX2NhY2hlX3N0YXRzX2luY3IoYWxsb2NhdGlvbnMpOwogCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZhdmNfY2FjaGUuYWN0aXZlX25vZGVzKSA+IGF2Y19jYWNoZV90aHJlc2hvbGQpCkBAIC0zNTUsMjEgKzM1OSwyNCBAQAogCXJldHVybiBub2RlOwogfQogCi1zdGF0aWMgdm9pZCBhdmNfbm9kZV9wb3B1bGF0ZShzdHJ1Y3QgYXZjX25vZGUgKm5vZGUsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2Y19lbnRyeSAqYWUpCitzdGF0aWMgdm9pZCBhdmNfbm9kZV9wb3B1bGF0ZShzdHJ1Y3QgYXZjX25vZGUgKm5vZGUsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7CiAJbm9kZS0+YWUuc3NpZCA9IHNzaWQ7CiAJbm9kZS0+YWUudHNpZCA9IHRzaWQ7CiAJbm9kZS0+YWUudGNsYXNzID0gdGNsYXNzOwotCW1lbWNweSgmbm9kZS0+YWUuYXZkLCAmYWUtPmF2ZCwgc2l6ZW9mKG5vZGUtPmFlLmF2ZCkpOworCW1lbWNweSgmbm9kZS0+YWUuYXZkLCBhdmQsIHNpemVvZihub2RlLT5hZS5hdmQpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19zZWFyY2hfbm9kZSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlLCAqcmV0ID0gTlVMTDsKIAlpbnQgaHZhbHVlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OwogCiAJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKKwloZWFkID0gJmF2Y19jYWNoZS5zbG90c1todmFsdWVdOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCWlmIChzc2lkID09IG5vZGUtPmFlLnNzaWQgJiYKIAkJICAgIHRjbGFzcyA9PSBub2RlLT5hZS50Y2xhc3MgJiYKIAkJICAgIHRzaWQgPT0gbm9kZS0+YWUudHNpZCkgewpAQCAtMzc4LDE1ICszODUsNiBAQAogCQl9CiAJfQogCi0JaWYgKHJldCA9PSBOVUxMKSB7Ci0JCS8qIGNhY2hlIG1pc3MgKi8KLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogY2FjaGUgaGl0ICovCi0JaWYgKGF0b21pY19yZWFkKCZyZXQtPmFlLnVzZWQpICE9IDEpCi0JCWF0b21pY19zZXQoJnJldC0+YWUudXNlZCwgMSk7Ci1vdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzk1LDMwICszOTMsMjUgQEAKICAqIEBzc2lkOiBzb3VyY2Ugc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKLSAqIEByZXF1ZXN0ZWQ6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucywgaW50ZXJwcmV0ZWQgYmFzZWQgb24gQHRjbGFzcwogICoKICAqIExvb2sgdXAgYW4gQVZDIGVudHJ5IHRoYXQgaXMgdmFsaWQgZm9yIHRoZQotICogQHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBiZXR3ZWVuIHRoZSBTSUQgcGFpcgogICogKEBzc2lkLCBAdHNpZCksIGludGVycHJldGluZyB0aGUgcGVybWlzc2lvbnMKICAqIGJhc2VkIG9uIEB0Y2xhc3MuICBJZiBhIHZhbGlkIEFWQyBlbnRyeSBleGlzdHMsCiAgKiB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBhdmNfbm9kZS4KICAqIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19sb29rdXAodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkKQorc3RhdGljIHN0cnVjdCBhdmNfbm9kZSAqYXZjX2xvb2t1cCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpub2RlOwogCiAJYXZjX2NhY2hlX3N0YXRzX2luY3IobG9va3Vwcyk7CiAJbm9kZSA9IGF2Y19zZWFyY2hfbm9kZShzc2lkLCB0c2lkLCB0Y2xhc3MpOwogCi0JaWYgKG5vZGUgJiYgKChub2RlLT5hZS5hdmQuZGVjaWRlZCAmIHJlcXVlc3RlZCkgPT0gcmVxdWVzdGVkKSkgeworCWlmIChub2RlKQogCQlhdmNfY2FjaGVfc3RhdHNfaW5jcihoaXRzKTsKLQkJZ290byBvdXQ7Ci0JfQorCWVsc2UKKwkJYXZjX2NhY2hlX3N0YXRzX2luY3IobWlzc2VzKTsKIAotCW5vZGUgPSBOVUxMOwotCWF2Y19jYWNoZV9zdGF0c19pbmNyKG1pc3Nlcyk7Ci1vdXQ6CiAJcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTQ0OSwzNCArNDQyLDQxIEBACiAgKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXIKICAqIEB0c2lkOiB0YXJnZXQgc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzCi0gKiBAYWU6IEFWQyBlbnRyeQorICogQGF2ZDogcmVzdWx0aW5nIGF2IGRlY2lzaW9uCiAgKgogICogSW5zZXJ0IGFuIEFWQyBlbnRyeSBmb3IgdGhlIFNJRCBwYWlyCiAgKiAoQHNzaWQsIEB0c2lkKSBhbmQgY2xhc3MgQHRjbGFzcy4KICAqIFRoZSBhY2Nlc3MgdmVjdG9ycyBhbmQgdGhlIHNlcXVlbmNlIG51bWJlciBhcmUKICAqIG5vcm1hbGx5IHByb3ZpZGVkIGJ5IHRoZSBzZWN1cml0eSBzZXJ2ZXIgaW4KICAqIHJlc3BvbnNlIHRvIGEgc2VjdXJpdHlfY29tcHV0ZV9hdigpIGNhbGwuICBJZiB0aGUKLSAqIHNlcXVlbmNlIG51bWJlciBAYWUtPmF2ZC5zZXFubyBpcyBub3QgbGVzcyB0aGFuIHRoZSBsYXRlc3QKKyAqIHNlcXVlbmNlIG51bWJlciBAYXZkLT5zZXFubyBpcyBub3QgbGVzcyB0aGFuIHRoZSBsYXRlc3QKICAqIHJldm9jYXRpb24gbm90aWZpY2F0aW9uLCB0aGVuIHRoZSBmdW5jdGlvbiBjb3BpZXMKICAqIHRoZSBhY2Nlc3MgdmVjdG9ycyBpbnRvIGEgY2FjaGUgZW50cnksIHJldHVybnMKICAqIGF2Y19ub2RlIGluc2VydGVkLiBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMLgogICovCi1zdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfaW5zZXJ0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2Y19lbnRyeSAqYWUpCitzdGF0aWMgc3RydWN0IGF2Y19ub2RlICphdmNfaW5zZXJ0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCiB7CiAJc3RydWN0IGF2Y19ub2RlICpwb3MsICpub2RlID0gTlVMTDsKIAlpbnQgaHZhbHVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmIChhdmNfbGF0ZXN0X25vdGlmX3VwZGF0ZShhZS0+YXZkLnNlcW5vLCAxKSkKKwlpZiAoYXZjX2xhdGVzdF9ub3RpZl91cGRhdGUoYXZkLT5zZXFubywgMSkpCiAJCWdvdG8gb3V0OwogCiAJbm9kZSA9IGF2Y19hbGxvY19ub2RlKCk7CiAJaWYgKG5vZGUpIHsKLQkJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKLQkJYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCBhZSk7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwkJc3BpbmxvY2tfdCAqbG9jazsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV0sIGxpc3QpIHsKKwkJaHZhbHVlID0gYXZjX2hhc2goc3NpZCwgdHNpZCwgdGNsYXNzKTsKKwkJYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCBhdmQpOworCisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJCWxvY2sgPSAmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFnKTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCQlpZiAocG9zLT5hZS5zc2lkID09IHNzaWQgJiYKIAkJCSAgICBwb3MtPmFlLnRzaWQgPT0gdHNpZCAmJgogCQkJICAgIHBvcy0+YWUudGNsYXNzID09IHRjbGFzcykgewpAQCAtNDg0LDkgKzQ4NCw5IEBACiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQotCQlsaXN0X2FkZF9yY3UoJm5vZGUtPmxpc3QsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSk7CisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmbm9kZS0+bGlzdCwgaGVhZCk7CiBmb3VuZDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZjX2NhY2hlLnNsb3RzX2xvY2tbaHZhbHVlXSwgZmxhZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZyk7CiAJfQogb3V0OgogCXJldHVybiBub2RlOwpAQCAtNzQyLDE3ICs3NDIsMjIgQEAKICAqIEBldmVudCA6IFVwZGF0aW5nIGV2ZW50CiAgKiBAcGVybXMgOiBQZXJtaXNzaW9uIG1hc2sgYml0cwogICogQHNzaWQsQHRzaWQsQHRjbGFzcyA6IGlkZW50aWZpZXIgb2YgYW4gQVZDIGVudHJ5CisgKiBAc2Vxbm8gOiBzZXF1ZW5jZSBudW1iZXIgd2hlbiBkZWNpc2lvbiB3YXMgbWFkZQogICoKICAqIGlmIGEgdmFsaWQgQVZDIGVudHJ5IGRvZXNuJ3QgZXhpc3QsdGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9FTlQuCiAgKiBpZiBrbWFsbG9jKCkgY2FsbGVkIGludGVybmFsIHJldHVybnMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9NRU0uCiAgKiBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdXBkYXRlIHRoZSBBVkMgZW50cnkuIFRoZSBvcmlnaW5hbCBBVkMtZW50cnkgb2JqZWN0CiAgKiB3aWxsIHJlbGVhc2UgbGF0ZXIgYnkgUkNVLgogICovCi1zdGF0aWMgaW50IGF2Y191cGRhdGVfbm9kZSh1MzIgZXZlbnQsIHUzMiBwZXJtcywgdTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQorc3RhdGljIGludCBhdmNfdXBkYXRlX25vZGUodTMyIGV2ZW50LCB1MzIgcGVybXMsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKKwkJCSAgIHUzMiBzZXFubykKIHsKIAlpbnQgaHZhbHVlLCByYyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCXN0cnVjdCBhdmNfbm9kZSAqcG9zLCAqbm9kZSwgKm9yaWcgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OworCXNwaW5sb2NrX3QgKmxvY2s7CiAKIAlub2RlID0gYXZjX2FsbG9jX25vZGUoKTsKIAlpZiAoIW5vZGUpIHsKQEAgLTc2MiwxMiArNzY3LDE3IEBACiAKIAkvKiBMb2NrIHRoZSB0YXJnZXQgc2xvdCAqLwogCWh2YWx1ZSA9IGF2Y19oYXNoKHNzaWQsIHRzaWQsIHRjbGFzcyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2h2YWx1ZV0sIGZsYWcpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZhdmNfY2FjaGUuc2xvdHNbaHZhbHVlXSwgbGlzdCkgeworCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2h2YWx1ZV07CisJbG9jayA9ICZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdOworCisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZyk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKHNzaWQgPT0gcG9zLT5hZS5zc2lkICYmCiAJCSAgICB0c2lkID09IHBvcy0+YWUudHNpZCAmJgotCQkgICAgdGNsYXNzID09IHBvcy0+YWUudGNsYXNzKXsKKwkJICAgIHRjbGFzcyA9PSBwb3MtPmFlLnRjbGFzcyAmJgorCQkgICAgc2Vxbm8gPT0gcG9zLT5hZS5hdmQuc2Vxbm8pewogCQkJb3JpZyA9IHBvczsKIAkJCWJyZWFrOwogCQl9CkBAIC03ODMsNyArNzkzLDcgQEAKIAkgKiBDb3B5IGFuZCByZXBsYWNlIG9yaWdpbmFsIG5vZGUuCiAJICovCiAKLQlhdmNfbm9kZV9wb3B1bGF0ZShub2RlLCBzc2lkLCB0c2lkLCB0Y2xhc3MsICZvcmlnLT5hZSk7CisJYXZjX25vZGVfcG9wdWxhdGUobm9kZSwgc3NpZCwgdHNpZCwgdGNsYXNzLCAmb3JpZy0+YWUuYXZkKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEFWQ19DQUxMQkFDS19HUkFOVDoKQEAgLTgwOCw3ICs4MTgsNyBAQAogCX0KIAlhdmNfbm9kZV9yZXBsYWNlKG5vZGUsIG9yaWcpOwogb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1todmFsdWVdLCBmbGFnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWcpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTgyMywxOCArODMzLDI0IEBACiAJaW50IGksIHJjID0gMCwgdG1wcmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwogCXN0cnVjdCBhdmNfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDsKKwlzcGlubG9ja190ICpsb2NrOwogCiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhdmNfY2FjaGUuc2xvdHNfbG9ja1tpXSwgZmxhZyk7CisJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2ldOworCQlsb2NrID0gJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldOworCisJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWcpOwogCQkvKgogCQkgKiBXaXRoIHByZWVtcHRhYmxlIFJDVSwgdGhlIG91dGVyIHNwaW5sb2NrIGRvZXMgbm90CiAJCSAqIHByZXZlbnQgUkNVIGdyYWNlIHBlcmlvZHMgZnJvbSBlbmRpbmcuCiAJCSAqLwogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmF2Y19jYWNoZS5zbG90c1tpXSwgbGlzdCkKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgbmV4dCwgaGVhZCwgbGlzdCkKIAkJCWF2Y19ub2RlX2RlbGV0ZShub2RlKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF2Y19jYWNoZS5zbG90c19sb2NrW2ldLCBmbGFnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIAl9CiAKIAlmb3IgKGMgPSBhdmNfY2FsbGJhY2tzOyBjOyBjID0gYy0+bmV4dCkgewpAQCAtODc1LDEwICs4OTEsMTAgQEAKIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCiAJCQkgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKIAkJCSB1bnNpZ25lZCBmbGFncywKLQkJCSBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKKwkJCSBzdHJ1Y3QgYXZfZGVjaXNpb24gKmluX2F2ZCkKIHsKIAlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGF2Y19lbnRyeSBlbnRyeSwgKnBfYWU7CisJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZF9lbnRyeSwgKmF2ZDsKIAlpbnQgcmMgPSAwOwogCXUzMiBkZW5pZWQ7CiAKQEAgLTg4NiwyOSArOTAyLDM0IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCk7CisJbm9kZSA9IGF2Y19sb29rdXAoc3NpZCwgdHNpZCwgdGNsYXNzKTsKIAlpZiAoIW5vZGUpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgJmVudHJ5LmF2ZCk7CisKKwkJaWYgKGluX2F2ZCkKKwkJCWF2ZCA9IGluX2F2ZDsKKwkJZWxzZQorCQkJYXZkID0gJmF2ZF9lbnRyeTsKKworCQlyYyA9IHNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIGF2ZCk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCW5vZGUgPSBhdmNfaW5zZXJ0KHNzaWQsIHRzaWQsIHRjbGFzcywgJmVudHJ5KTsKKwkJbm9kZSA9IGF2Y19pbnNlcnQoc3NpZCwgdHNpZCwgdGNsYXNzLCBhdmQpOworCX0gZWxzZSB7CisJCWlmIChpbl9hdmQpCisJCQltZW1jcHkoaW5fYXZkLCAmbm9kZS0+YWUuYXZkLCBzaXplb2YoKmluX2F2ZCkpOworCQlhdmQgPSAmbm9kZS0+YWUuYXZkOwogCX0KIAotCXBfYWUgPSBub2RlID8gJm5vZGUtPmFlIDogJmVudHJ5OwotCi0JaWYgKGF2ZCkKLQkJbWVtY3B5KGF2ZCwgJnBfYWUtPmF2ZCwgc2l6ZW9mKCphdmQpKTsKLQotCWRlbmllZCA9IHJlcXVlc3RlZCAmIH4ocF9hZS0+YXZkLmFsbG93ZWQpOworCWRlbmllZCA9IHJlcXVlc3RlZCAmIH4oYXZkLT5hbGxvd2VkKTsKIAogCWlmIChkZW5pZWQpIHsKIAkJaWYgKGZsYWdzICYgQVZDX1NUUklDVCkKIAkJCXJjID0gLUVBQ0NFUzsKIAkJZWxzZSBpZiAoIXNlbGludXhfZW5mb3JjaW5nIHx8IHNlY3VyaXR5X3Blcm1pc3NpdmVfc2lkKHNzaWQpKQogCQkJYXZjX3VwZGF0ZV9ub2RlKEFWQ19DQUxMQkFDS19HUkFOVCwgcmVxdWVzdGVkLCBzc2lkLAotCQkJCQl0c2lkLCB0Y2xhc3MpOworCQkJCQl0c2lkLCB0Y2xhc3MsIGF2ZC0+c2Vxbm8pOwogCQllbHNlCiAJCQlyYyA9IC1FQUNDRVM7CiAJfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDAwODE1OTcuLjdjNTJiYTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgWEFUVFJfU0VMSU5VWF9TVUZGSVggInNlbGludXgiCiAjZGVmaW5lIFhBVFRSX05BTUVfU0VMSU5VWCBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU0VMSU5VWF9TVUZGSVgKIAotI2RlZmluZSBOVU1fU0VMX01OVF9PUFRTIDQKKyNkZWZpbmUgTlVNX1NFTF9NTlRfT1BUUyA1CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcG9saWN5ZGJfbG9hZGVkX3ZlcnNpb247CiBleHRlcm4gaW50IHNlbGludXhfbmxtc2dfbG9va3VwKHUxNiBzY2xhc3MsIHUxNiBubG1zZ190eXBlLCB1MzIgKnBlcm0pOwpAQCAtMzUzLDYgKzM1Myw3IEBACiAJT3B0X2ZzY29udGV4dCA9IDIsCiAJT3B0X2RlZmNvbnRleHQgPSAzLAogCU9wdF9yb290Y29udGV4dCA9IDQsCisJT3B0X2xhYmVsc3VwcG9ydCA9IDUsCiB9OwogCiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0zNjAsNiArMzYxLDcgQEAKIAl7T3B0X2ZzY29udGV4dCwgRlNDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2RlZmNvbnRleHQsIERFRkNPTlRFWFRfU1RSICIlcyJ9LAogCXtPcHRfcm9vdGNvbnRleHQsIFJPT1RDT05URVhUX1NUUiAiJXMifSwKKwl7T3B0X2xhYmVsc3VwcG9ydCwgTEFCRUxTVVBQX1NUUn0sCiAJe09wdF9lcnJvciwgTlVMTH0sCiB9OwogCkBAIC00MzEsNyArNDMzLDcgQEAKIAkJfQogCX0KIAotCXNic2VjLT5pbml0aWFsaXplZCA9IDE7CisJc2JzZWMtPmZsYWdzIHw9IChTRV9TQklOSVRJQUxJWkVEIHwgU0VfU0JMQUJFTFNVUFApOwogCiAJaWYgKHNic2VjLT5iZWhhdmlvciA+IEFSUkFZX1NJWkUobGFiZWxpbmdfYmVoYXZpb3JzKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiBpbml0aWFsaXplZCAoZGV2ICVzLCB0eXBlICVzKSwgdW5rbm93biBiZWhhdmlvclxuIiwKQEAgLTQ0MSw2ICs0NDMsMTIgQEAKIAkJICAgICAgIHNiLT5zX2lkLCBzYi0+c190eXBlLT5uYW1lLAogCQkgICAgICAgbGFiZWxpbmdfYmVoYXZpb3JzW3Nic2VjLT5iZWhhdmlvci0xXSk7CiAKKwlpZiAoc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9HRU5GUyB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIHx8CisJICAgIHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTk9ORSB8fAorCSAgICBzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCisJCXNic2VjLT5mbGFncyAmPSB+U0VfU0JMQUJFTFNVUFA7CisKIAkvKiBJbml0aWFsaXplIHRoZSByb290IGlub2RlLiAqLwogCXJjID0gaW5vZGVfZG9pbml0X3dpdGhfZGVudHJ5KHJvb3RfaW5vZGUsIHJvb3QpOwogCkBAIC00ODcsMjMgKzQ5NSwyMiBAQAogCiAJc2VjdXJpdHlfaW5pdF9tbnRfb3B0cyhvcHRzKTsKIAotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKQorCWlmICghKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBpZiB3ZSBldmVyIHVzZSBzYnNlYyBmbGFncyBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiB0cmFja2luZyBtb3VudAotCSAqIHNldHRpbmdzIHRoaXMgaXMgZ29pbmcgdG8gbmVlZCBhIG1hc2sKLQkgKi8KLQl0bXAgPSBzYnNlYy0+ZmxhZ3M7CisJdG1wID0gc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSzsKIAkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgc2IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmICh0bXAgJiAweDAxKQogCQkJb3B0cy0+bnVtX21udF9vcHRzKys7CiAJCXRtcCA+Pj0gMTsKIAl9CisJLyogQ2hlY2sgaWYgdGhlIExhYmVsIHN1cHBvcnQgZmxhZyBpcyBzZXQgKi8KKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApCisJCW9wdHMtPm51bV9tbnRfb3B0cysrOwogCiAJb3B0cy0+bW50X29wdHMgPSBrY2FsbG9jKG9wdHMtPm51bV9tbnRfb3B0cywgc2l6ZW9mKGNoYXIgKiksIEdGUF9BVE9NSUMpOwogCWlmICghb3B0cy0+bW50X29wdHMpIHsKQEAgLTU0OSw2ICs1NTYsMTAgQEAKIAkJb3B0cy0+bW50X29wdHNbaV0gPSBjb250ZXh0OwogCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tpKytdID0gUk9PVENPTlRFWFRfTU5UOwogCX0KKwlpZiAoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApIHsKKwkJb3B0cy0+bW50X29wdHNbaV0gPSBOVUxMOworCQlvcHRzLT5tbnRfb3B0c19mbGFnc1tpKytdID0gU0VfU0JMQUJFTFNVUFA7CisJfQogCiAJQlVHX09OKGkgIT0gb3B0cy0+bnVtX21udF9vcHRzKTsKIApAQCAtNTYyLDggKzU3MywxMCBAQAogc3RhdGljIGludCBiYWRfb3B0aW9uKHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWMsIGNoYXIgZmxhZywKIAkJICAgICAgdTMyIG9sZF9zaWQsIHUzMiBuZXdfc2lkKQogeworCWNoYXIgbW50X2ZsYWdzID0gc2JzZWMtPmZsYWdzICYgU0VfTU5UTUFTSzsKKwogCS8qIGNoZWNrIGlmIHRoZSBvbGQgbW91bnQgY29tbWFuZCBoYWQgdGhlIHNhbWUgb3B0aW9ucyAqLwotCWlmIChzYnNlYy0+aW5pdGlhbGl6ZWQpCisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpCiAJCWlmICghKHNic2VjLT5mbGFncyAmIGZsYWcpIHx8CiAJCSAgICAob2xkX3NpZCAhPSBuZXdfc2lkKSkKIAkJCXJldHVybiAxOwpAQCAtNTcxLDggKzU4NCw4IEBACiAJLyogY2hlY2sgaWYgd2Ugd2VyZSBwYXNzZWQgdGhlIHNhbWUgb3B0aW9ucyB0d2ljZSwKIAkgKiBha2Egc29tZW9uZSBwYXNzZWQgY29udGV4dD1hLGNvbnRleHQ9YgogCSAqLwotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKQotCQlpZiAoc2JzZWMtPmZsYWdzICYgZmxhZykKKwlpZiAoIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSkKKwkJaWYgKG1udF9mbGFncyAmIGZsYWcpCiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYyNiw3ICs2MzksNyBAQAogCSAqIHRoaXMgc2IgZG9lcyBub3Qgc2V0IGFueSBzZWN1cml0eSBvcHRpb25zLiAgKFRoZSBmaXJzdCBvcHRpb25zCiAJICogd2lsbCBiZSB1c2VkIGZvciBib3RoIG1vdW50cykKIAkgKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkICYmIChzYi0+c190eXBlLT5mc19mbGFncyAmIEZTX0JJTkFSWV9NT1VOVERBVEEpCisJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSAmJiAoc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19CSU5BUllfTU9VTlREQVRBKQogCSAgICAmJiAobnVtX29wdHMgPT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC02MzcsNiArNjUwLDkgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29wdHM7IGkrKykgewogCQl1MzIgc2lkOworCisJCWlmIChmbGFnc1tpXSA9PSBTRV9TQkxBQkVMU1VQUCkKKwkJCWNvbnRpbnVlOwogCQlyYyA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKG1vdW50X29wdGlvbnNbaV0sCiAJCQkJCSAgICAgc3RybGVuKG1vdW50X29wdGlvbnNbaV0pLCAmc2lkKTsKIAkJaWYgKHJjKSB7CkBAIC02OTAsMTkgKzcwNiwxOSBAQAogCQl9CiAJfQogCi0JaWYgKHNic2VjLT5pbml0aWFsaXplZCkgeworCWlmIChzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSB7CiAJCS8qIHByZXZpb3VzbHkgbW91bnRlZCB3aXRoIG9wdGlvbnMsIGJ1dCBub3Qgb24gdGhpcyBhdHRlbXB0PyAqLwotCQlpZiAoc2JzZWMtPmZsYWdzICYmICFudW1fb3B0cykKKwkJaWYgKChzYnNlYy0+ZmxhZ3MgJiBTRV9NTlRNQVNLKSAmJiAhbnVtX29wdHMpCiAJCQlnb3RvIG91dF9kb3VibGVfbW91bnQ7CiAJCXJjID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHN0cmNtcChzYi0+c190eXBlLT5uYW1lLCAicHJvYyIpID09IDApCi0JCXNic2VjLT5wcm9jID0gMTsKKwkJc2JzZWMtPmZsYWdzIHw9IFNFX1NCUFJPQzsKIAogCS8qIERldGVybWluZSB0aGUgbGFiZWxpbmcgYmVoYXZpb3IgdG8gdXNlIGZvciB0aGlzIGZpbGVzeXN0ZW0gdHlwZS4gKi8KLQlyYyA9IHNlY3VyaXR5X2ZzX3VzZShzYnNlYy0+cHJvYyA/ICJwcm9jIiA6IHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKKwlyYyA9IHNlY3VyaXR5X2ZzX3VzZSgoc2JzZWMtPmZsYWdzICYgU0VfU0JQUk9DKSA/ICJwcm9jIiA6IHNiLT5zX3R5cGUtPm5hbWUsICZzYnNlYy0+YmVoYXZpb3IsICZzYnNlYy0+c2lkKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNlY3VyaXR5X2ZzX3VzZSglcykgcmV0dXJuZWQgJWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgc2ItPnNfdHlwZS0+bmFtZSwgcmMpOwpAQCAtODA2LDEwICs4MjIsMTAgQEAKIAl9CiAKIAkvKiBob3cgY2FuIHdlIGNsb25lIGlmIHRoZSBvbGQgb25lIHdhc24ndCBzZXQgdXA/PyAqLwotCUJVR19PTighb2xkc2JzZWMtPmluaXRpYWxpemVkKTsKKwlCVUdfT04oIShvbGRzYnNlYy0+ZmxhZ3MgJiBTRV9TQklOSVRJQUxJWkVEKSk7CiAKIAkvKiBpZiBmcyBpcyByZXVzaW5nIGEgc2IsIGp1c3QgbGV0IGl0cyBvcHRpb25zIHN0YW5kLi4uICovCi0JaWYgKG5ld3Nic2VjLT5pbml0aWFsaXplZCkKKwlpZiAobmV3c2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbmV3c2JzZWMtPmxvY2spOwpAQCAtOTE3LDcgKzkzMyw4IEBACiAJCQkJZ290byBvdXRfZXJyOwogCQkJfQogCQkJYnJlYWs7Ci0KKwkJY2FzZSBPcHRfbGFiZWxzdXBwb3J0OgorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgdW5rbm93biBtb3VudCBvcHRpb25cbiIpOwpAQCAtOTk5LDcgKzEwMTYsMTIgQEAKIAljaGFyICpwcmVmaXg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb3B0cy0+bnVtX21udF9vcHRzOyBpKyspIHsKLQkJY2hhciAqaGFzX2NvbW1hID0gc3RyY2hyKG9wdHMtPm1udF9vcHRzW2ldLCAnLCcpOworCQljaGFyICpoYXNfY29tbWE7CisKKwkJaWYgKG9wdHMtPm1udF9vcHRzW2ldKQorCQkJaGFzX2NvbW1hID0gc3RyY2hyKG9wdHMtPm1udF9vcHRzW2ldLCAnLCcpOworCQllbHNlCisJCQloYXNfY29tbWEgPSBOVUxMOwogCiAJCXN3aXRjaCAob3B0cy0+bW50X29wdHNfZmxhZ3NbaV0pIHsKIAkJY2FzZSBDT05URVhUX01OVDoKQEAgLTEwMTQsNiArMTAzNiwxMCBAQAogCQljYXNlIERFRkNPTlRFWFRfTU5UOgogCQkJcHJlZml4ID0gREVGQ09OVEVYVF9TVFI7CiAJCQlicmVhazsKKwkJY2FzZSBTRV9TQkxBQkVMU1VQUDoKKwkJCXNlcV9wdXRjKG0sICcsJyk7CisJCQlzZXFfcHV0cyhtLCBMQUJFTFNVUFBfU1RSKTsKKwkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgogCQkJQlVHKCk7CiAJCX07CkBAIC0xMjA5LDcgKzEyMzUsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlzYnNlYyA9IGlub2RlLT5pX3NiLT5zX3NlY3VyaXR5OwotCWlmICghc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JJTklUSUFMSVpFRCkpIHsKIAkJLyogRGVmZXIgaW5pdGlhbGl6YXRpb24gdW50aWwgc2VsaW51eF9jb21wbGV0ZV9pbml0LAogCQkgICBhZnRlciB0aGUgaW5pdGlhbCBwb2xpY3kgaXMgbG9hZGVkIGFuZCB0aGUgc2VjdXJpdHkKIAkJICAgc2VydmVyIGlzIHJlYWR5IHRvIGhhbmRsZSBjYWxscy4gKi8KQEAgLTEyMzcsMTkgKzEyNjMsMjYgQEAKIAkJCWRlbnRyeSA9IGRfZmluZF9hbGlhcyhpbm9kZSk7CiAJCX0KIAkJaWYgKCFkZW50cnkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgbm8gZGVudHJ5IGZvciBkZXY9JXMgIgotCQkJICAgICAgICJpbm89JWxkXG4iLCBfX2Z1bmNfXywgaW5vZGUtPmlfc2ItPnNfaWQsCi0JCQkgICAgICAgaW5vZGUtPmlfaW5vKTsKKwkJCS8qCisJCQkgKiB0aGlzIGlzIGNhbiBiZSBoaXQgb24gYm9vdCB3aGVuIGEgZmlsZSBpcyBhY2Nlc3NlZAorCQkJICogYmVmb3JlIHRoZSBwb2xpY3kgaXMgbG9hZGVkLiAgV2hlbiB3ZSBsb2FkIHBvbGljeSB3ZQorCQkJICogbWF5IGZpbmQgaW5vZGVzIHRoYXQgaGF2ZSBubyBkZW50cnkgb24gdGhlCisJCQkgKiBzYnNlYy0+aXNlY19oZWFkIGxpc3QuICBObyByZWFzb24gdG8gY29tcGxhaW4gYXMgdGhlc2UKKwkJCSAqIHdpbGwgZ2V0IGZpeGVkIHVwIHRoZSBuZXh0IHRpbWUgd2UgZ28gdGhyb3VnaAorCQkJICogaW5vZGVfZG9pbml0IHdpdGggYSBkZW50cnksIGJlZm9yZSB0aGVzZSBpbm9kZXMgY291bGQKKwkJCSAqIGJlIHVzZWQgYWdhaW4gYnkgdXNlcnNwYWNlLgorCQkJICovCiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsZW4gPSBJTklUQ09OVEVYVExFTjsKLQkJY29udGV4dCA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CisJCWNvbnRleHQgPSBrbWFsbG9jKGxlbisxLCBHRlBfTk9GUyk7CiAJCWlmICghY29udGV4dCkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZHB1dChkZW50cnkpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisJCWNvbnRleHRbbGVuXSA9ICdcMCc7CiAJCXJjID0gaW5vZGUtPmlfb3AtPmdldHhhdHRyKGRlbnRyeSwgWEFUVFJfTkFNRV9TRUxJTlVYLAogCQkJCQkgICBjb250ZXh0LCBsZW4pOwogCQlpZiAocmMgPT0gLUVSQU5HRSkgewpAQCAtMTI2MiwxMiArMTI5NSwxMyBAQAogCQkJfQogCQkJa2ZyZWUoY29udGV4dCk7CiAJCQlsZW4gPSByYzsKLQkJCWNvbnRleHQgPSBrbWFsbG9jKGxlbiwgR0ZQX05PRlMpOworCQkJY29udGV4dCA9IGttYWxsb2MobGVuKzEsIEdGUF9OT0ZTKTsKIAkJCWlmICghY29udGV4dCkgewogCQkJCXJjID0gLUVOT01FTTsKIAkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQorCQkJY29udGV4dFtsZW5dID0gJ1wwJzsKIAkJCXJjID0gaW5vZGUtPmlfb3AtPmdldHhhdHRyKGRlbnRyeSwKIAkJCQkJCSAgIFhBVFRSX05BTUVfU0VMSU5VWCwKIAkJCQkJCSAgIGNvbnRleHQsIGxlbik7CkBAIC0xMjg5LDEwICsxMzIzLDE5IEBACiAJCQkJCQkJICAgICBzYnNlYy0+ZGVmX3NpZCwKIAkJCQkJCQkgICAgIEdGUF9OT0ZTKTsKIAkJCWlmIChyYykgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICVzOiAgY29udGV4dF90b19zaWQoJXMpICIKLQkJCQkgICAgICAgInJldHVybmVkICVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwKLQkJCQkgICAgICAgX19mdW5jX18sIGNvbnRleHQsIC1yYywKLQkJCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CisJCQkJY2hhciAqZGV2ID0gaW5vZGUtPmlfc2ItPnNfaWQ7CisJCQkJdW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS0+aV9pbm87CisKKwkJCQlpZiAocmMgPT0gLUVJTlZBTCkgeworCQkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTRUxpbnV4OiBpbm9kZT0lbHUgb24gZGV2PSVzIHdhcyBmb3VuZCB0byBoYXZlIGFuIGludmFsaWQgIgorCQkJCQkJCSJjb250ZXh0PSVzLiAgVGhpcyBpbmRpY2F0ZXMgeW91IG1heSBuZWVkIHRvIHJlbGFiZWwgdGhlIGlub2RlIG9yIHRoZSAiCisJCQkJCQkJImZpbGVzeXN0ZW0gaW4gcXVlc3Rpb24uXG4iLCBpbm8sIGRldiwgY29udGV4dCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogJXM6ICBjb250ZXh0X3RvX3NpZCglcykgIgorCQkJCQkgICAgICAgInJldHVybmVkICVkIGZvciBkZXY9JXMgaW5vPSVsZFxuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fLCBjb250ZXh0LCAtcmMsIGRldiwgaW5vKTsKKwkJCQl9CiAJCQkJa2ZyZWUoY29udGV4dCk7CiAJCQkJLyogTGVhdmUgd2l0aCB0aGUgdW5sYWJlbGVkIFNJRCAqLwogCQkJCXJjID0gMDsKQEAgLTEzMjYsNyArMTM2OSw3IEBACiAJCS8qIERlZmF1bHQgdG8gdGhlIGZzIHN1cGVyYmxvY2sgU0lELiAqLwogCQlpc2VjLT5zaWQgPSBzYnNlYy0+c2lkOwogCi0JCWlmIChzYnNlYy0+cHJvYyAmJiAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoKHNic2VjLT5mbGFncyAmIFNFX1NCUFJPQykgJiYgIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCXN0cnVjdCBwcm9jX2lub2RlICpwcm9jaSA9IFBST0NfSShpbm9kZSk7CiAJCQlpZiAocHJvY2ktPnBkZSkgewogCQkJCWlzZWMtPnNjbGFzcyA9IGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MoaW5vZGUtPmlfbW9kZSk7CkBAIC0xNTg3LDcgKzE2MzAsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKCFuZXdzaWQgfHwgc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkgeworCWlmICghbmV3c2lkIHx8ICEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKSB7CiAJCXJjID0gc2VjdXJpdHlfdHJhbnNpdGlvbl9zaWQoc2lkLCBkc2VjLT5zaWQsIHRjbGFzcywgJm5ld3NpZCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKQEAgLTE4MDEsNiArMTg0NCw4IEBACiAJCQlhdiB8PSBGSUZPX0ZJTEVfX09QRU47CiAJCWVsc2UgaWYgKFNfSVNESVIobW9kZSkpCiAJCQlhdiB8PSBESVJfX09QRU47CisJCWVsc2UgaWYgKFNfSVNTT0NLKG1vZGUpKQorCQkJYXYgfD0gU09DS19GSUxFX19PUEVOOwogCQllbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IFdBUk5JTkc6IGluc2lkZSAlcyB3aXRoICIKIAkJCQkidW5rbm93biBtb2RlOiVvXG4iLCBfX2Z1bmNfXywgbW9kZSk7CkBAIC0xODE1LDcgKzE4NjAsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+cHRyYWNlX21heV9hY2Nlc3MoY2hpbGQsIG1vZGUpOworCXJjID0gY2FwX3B0cmFjZV9tYXlfYWNjZXNzKGNoaWxkLCBtb2RlKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTgzMiw3ICsxODc3LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnB0cmFjZV90cmFjZW1lKHBhcmVudCk7CisJcmMgPSBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTg0OCw3ICsxODkzLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5jYXBnZXQodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOworCXJldHVybiBjYXBfY2FwZ2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2NhcHNldChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLApAQCAtMTg1OCw3ICsxOTAzLDcgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHNlY29uZGFyeV9vcHMtPmNhcHNldChuZXcsIG9sZCwKKwllcnJvciA9IGNhcF9jYXBzZXQobmV3LCBvbGQsCiAJCQkJICAgICAgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE4NjYsMTIgKzE5MTEsMjIgQEAKIAlyZXR1cm4gY3JlZF9oYXNfcGVybShvbGQsIG5ldywgUFJPQ0VTU19fU0VUQ0FQKTsKIH0KIAorLyoKKyAqIChUaGlzIGNvbW1lbnQgdXNlZCB0byBsaXZlIHdpdGggdGhlIHNlbGludXhfdGFza19zZXR1aWQgaG9vaywKKyAqIHdoaWNoIHdhcyByZW1vdmVkKS4KKyAqCisgKiBTaW5jZSBzZXR1aWQgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZCBzaW5jZSB0aGUgU0VMaW51eAorICogY29udHJvbHMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgTGludXggaWRlbnRpdHkgYXR0cmlidXRlcywgU0VMaW51eCBkb2VzIG5vdAorICogbmVlZCB0byBjb250cm9sIHRoaXMgb3BlcmF0aW9uLiAgSG93ZXZlciwgU0VMaW51eCBkb2VzIGNvbnRyb2wgdGhlIHVzZSBvZgorICogdGhlIENBUF9TRVRVSUQgYW5kIENBUF9TRVRHSUQgY2FwYWJpbGl0aWVzIHVzaW5nIHRoZSBjYXBhYmxlIGhvb2suCisgKi8KKwogc3RhdGljIGludCBzZWxpbnV4X2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAogCQkJICAgaW50IGNhcCwgaW50IGF1ZGl0KQogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+Y2FwYWJsZSh0c2ssIGNyZWQsIGNhcCwgYXVkaXQpOworCXJjID0gY2FwX2NhcGFibGUodHNrLCBjcmVkLCBjYXAsIGF1ZGl0KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTk5Nyw3ICsyMDUyLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnN5c2xvZyh0eXBlKTsKKwlyYyA9IGNhcF9zeXNsb2codHlwZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIwMjgsMTAgKzIwODMsNiBAQAogICogbWFwcGluZy4gMCBtZWFucyB0aGVyZSBpcyBlbm91Z2ggbWVtb3J5IGZvciB0aGUgYWxsb2NhdGlvbiB0bwogICogc3VjY2VlZCBhbmQgLUVOT01FTSBpbXBsaWVzIHRoZXJlIGlzIG5vdC4KICAqCi0gKiBOb3RlIHRoYXQgc2Vjb25kYXJ5X29wcy0+Y2FwYWJsZSBhbmQgdGFza19oYXNfcGVybV9ub2F1ZGl0IHJldHVybiAwCi0gKiBpZiB0aGUgY2FwYWJpbGl0eSBpcyBncmFudGVkLCBidXQgX192bV9lbm91Z2hfbWVtb3J5IHJlcXVpcmVzIDEgaWYKLSAqIHRoZSBjYXBhYmlsaXR5IGlzIGdyYW50ZWQuCi0gKgogICogRG8gbm90IGF1ZGl0IHRoZSBzZWxpbnV4IHBlcm1pc3Npb24gY2hlY2ssIGFzIHRoaXMgaXMgYXBwbGllZCB0byBhbGwKICAqIHByb2Nlc3NlcyB0aGF0IGFsbG9jYXRlIG1hcHBpbmdzLgogICovCkBAIC0yMDU4LDcgKzIxMDksNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBicHJtLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+YnBybV9zZXRfY3JlZHMoYnBybSk7CisJcmMgPSBjYXBfYnBybV9zZXRfY3JlZHMoYnBybSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIxNTYsMTEgKzIyMDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfYnBybV9jaGVja19zZWN1cml0eShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT5icHJtX2NoZWNrX3NlY3VyaXR5KGJwcm0pOwotfQotCiBzdGF0aWMgaW50IHNlbGludXhfYnBybV9zZWN1cmVleGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKQEAgLTIxODAsNyArMjIyNiw3IEBACiAJCQkJCVBST0NFU1NfX05PQVRTRUNVUkUsIE5VTEwpOwogCX0KIAotCXJldHVybiAoYXRzZWN1cmUgfHwgc2Vjb25kYXJ5X29wcy0+YnBybV9zZWN1cmVleGVjKGJwcm0pKTsKKwlyZXR1cm4gKGF0c2VjdXJlIHx8IGNhcF9icHJtX3NlY3VyZWV4ZWMoYnBybSkpOwogfQogCiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpzZWxpbnV4ZnNfbW91bnQ7CkBAIC0yMjkwLDggKzIzMzYsNiBAQAogCXN0cnVjdCBybGltaXQgKnJsaW0sICppbml0cmxpbTsKIAlpbnQgcmMsIGk7CiAKLQlzZWNvbmRhcnlfb3BzLT5icHJtX2NvbW1pdHRpbmdfY3JlZHMoYnBybSk7Ci0KIAluZXdfdHNlYyA9IGJwcm0tPmNyZWQtPnNlY3VyaXR5OwogCWlmIChuZXdfdHNlYy0+c2lkID09IG5ld190c2VjLT5vc2lkKQogCQlyZXR1cm47CkBAIC0yMzM3LDggKzIzODEsNiBAQAogCWludCByYywgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2Vjb25kYXJ5X29wcy0+YnBybV9jb21taXR0ZWRfY3JlZHMoYnBybSk7Ci0KIAlvc2lkID0gdHNlYy0+b3NpZDsKIAlzaWQgPSB0c2VjLT5zaWQ7CiAKQEAgLTI0MDAsNyArMjQ0Miw4IEBACiAJcmV0dXJuIChtYXRjaF9wcmVmaXgoQ09OVEVYVF9TVFIsIHNpemVvZihDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CiAJCW1hdGNoX3ByZWZpeChGU0NPTlRFWFRfU1RSLCBzaXplb2YoRlNDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CiAJCW1hdGNoX3ByZWZpeChERUZDT05URVhUX1NUUiwgc2l6ZW9mKERFRkNPTlRFWFRfU1RSKS0xLCBvcHRpb24sIGxlbikgfHwKLQkJbWF0Y2hfcHJlZml4KFJPT1RDT05URVhUX1NUUiwgc2l6ZW9mKFJPT1RDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pKTsKKwkJbWF0Y2hfcHJlZml4KFJPT1RDT05URVhUX1NUUiwgc2l6ZW9mKFJPT1RDT05URVhUX1NUUiktMSwgb3B0aW9uLCBsZW4pIHx8CisJCW1hdGNoX3ByZWZpeChMQUJFTFNVUFBfU1RSLCBzaXplb2YoTEFCRUxTVVBQX1NUUiktMSwgb3B0aW9uLCBsZW4pKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRha2Vfb3B0aW9uKGNoYXIgKip0bywgY2hhciAqZnJvbSwgaW50ICpmaXJzdCwgaW50IGxlbikKQEAgLTI1MTMsMTEgKzI1NTYsNiBAQAogCQkJIHZvaWQgKmRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNiX21vdW50KGRldl9uYW1lLCBwYXRoLCB0eXBlLCBmbGFncywgZGF0YSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoZmxhZ3MgJiBNU19SRU1PVU5UKQogCQlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBwYXRoLT5tbnQtPm1udF9zYiwKQEAgLTI1MzAsMTEgKzI1NjgsNiBAQAogc3RhdGljIGludCBzZWxpbnV4X3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGZsYWdzKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5zYl91bW91bnQobW50LCBmbGFncyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBtbnQtPm1udF9zYiwKIAkJCQkgICBGSUxFU1lTVEVNX19VTk1PVU5ULCBOVUxMKTsKQEAgLTI1NzAsNyArMjYwMyw3IEBACiAJc2lkID0gdHNlYy0+c2lkOwogCW5ld3NpZCA9IHRzZWMtPmNyZWF0ZV9zaWQ7CiAKLQlpZiAoIW5ld3NpZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKSB7CisJaWYgKCFuZXdzaWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpIHsKIAkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwKIAkJCQkJICAgICBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpLAogCQkJCQkgICAgICZuZXdzaWQpOwpAQCAtMjU4NSwxNCArMjYxOCwxNCBAQAogCX0KIAogCS8qIFBvc3NpYmx5IGRlZmVyIGluaXRpYWxpemF0aW9uIHRvIHNlbGludXhfY29tcGxldGVfaW5pdC4gKi8KLQlpZiAoc2JzZWMtPmluaXRpYWxpemVkKSB7CisJaWYgKHNic2VjLT5mbGFncyAmIFNFX1NCSU5JVElBTElaRUQpIHsKIAkJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwogCQlpc2VjLT5zY2xhc3MgPSBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKGlub2RlLT5pX21vZGUpOwogCQlpc2VjLT5zaWQgPSBuZXdzaWQ7CiAJCWlzZWMtPmluaXRpYWxpemVkID0gMTsKIAl9CiAKLQlpZiAoIXNzX2luaXRpYWxpemVkIHx8IHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCFzc19pbml0aWFsaXplZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKG5hbWUpIHsKQEAgLTI2MjIsMjEgKzI2NTUsMTEgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAJcmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV91bmxpbmsoZGlyLCBkZW50cnkpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7CiB9CiAKQEAgLTI2NTcsMTIgKzI2ODAsNiBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsIGRldl90IGRldikKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQogCkBAIC0yNjgyLDIyICsyNjk5LDEzIEBACiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuYW1laWRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPmlub2RlX2ZvbGxvd19saW5rKGRlbnRyeSwgbmFtZWlkYXRhKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fUkVBRCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmICghbWFzaykgewogCQkvKiBObyBwZXJtaXNzaW9uIHRvIGNoZWNrLiAgRXhpc3RlbmNlIHRlc3QuICovCkBAIC0yNzExLDExICsyNzE5LDYgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+aW5vZGVfc2V0YXR0cihkZW50cnksIGlhdHRyKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0ZPUkNFKQogCQlyZXR1cm4gMDsKQEAgLTI3NjksNyArMjc3Miw3IEBACiAJCXJldHVybiBzZWxpbnV4X2lub2RlX3NldG90aGVyeGF0dHIoZGVudHJ5LCBuYW1lKTsKIAogCXNic2VjID0gaW5vZGUtPmlfc2ItPnNfc2VjdXJpdHk7Ci0JaWYgKHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCEoc2JzZWMtPmZsYWdzICYgU0VfU0JMQUJFTFNVUFApKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCkBAIC0yOTMxLDE2ICsyOTM0LDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JcmV0dXJuIHNlY29uZGFyeV9vcHMtPmlub2RlX25lZWRfa2lsbHByaXYoZGVudHJ5KTsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2tpbGxwcml2KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gc2Vjb25kYXJ5X29wcy0+aW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKLX0KLQogc3RhdGljIHZvaWQgc2VsaW51eF9pbm9kZV9nZXRzZWNpZChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKnNlY2lkKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKQEAgLTMwNzgsMTggKzMwNzEsMTMgQEAKIAkJCQkgdW5zaWduZWQgbG9uZyBwcm90KQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0JaW50IHJjOwotCi0JcmMgPSBzZWNvbmRhcnlfb3BzLT5maWxlX21wcm90ZWN0KHZtYSwgcmVxcHJvdCwgcHJvdCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoc2VsaW51eF9jaGVja3JlcXByb3QpCiAJCXByb3QgPSByZXFwcm90OwogCiAjaWZuZGVmIENPTkZJR19QUEMzMgogCWlmICgocHJvdCAmIFBST1RfRVhFQykgJiYgISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpIHsKLQkJcmMgPSAwOworCQlpbnQgcmMgPSAwOwogCQlpZiAodm1hLT52bV9zdGFydCA+PSB2bWEtPnZtX21tLT5zdGFydF9icmsgJiYKIAkJICAgIHZtYS0+dm1fZW5kIDw9IHZtYS0+dm1fbW0tPmJyaykgewogCQkJcmMgPSBjcmVkX2hhc19wZXJtKGNyZWQsIGNyZWQsIFBST0NFU1NfX0VYRUNIRUFQKTsKQEAgLTMyMzksMTIgKzMyMjcsNiBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19jcmVhdGUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfY3JlYXRlKGNsb25lX2ZsYWdzKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCXJldHVybiBjdXJyZW50X2hhc19wZXJtKGN1cnJlbnQsIFBST0NFU1NfX0ZPUkspOwogfQogCkBAIC0zMjc4LDE0ICszMjYwLDYgQEAKIH0KIAogLyoKLSAqIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKLSAqLwotc3RhdGljIHZvaWQgc2VsaW51eF9jcmVkX2NvbW1pdChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkKQotewotCXNlY29uZGFyeV9vcHMtPmNyZWRfY29tbWl0KG5ldywgb2xkKTsKLX0KLQotLyoKICAqIHNldCB0aGUgc2VjdXJpdHkgZGF0YSBmb3IgYSBrZXJuZWwgc2VydmljZQogICogLSBhbGwgdGhlIGNyZWF0aW9uIGNvbnRleHRzIGFyZSBzZXQgdG8gdW5sYWJlbGxlZAogICovCkBAIC0zMzI5LDI5ICszMzAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0dWlkKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsIGludCBmbGFncykKLXsKLQkvKiBTaW5jZSBzZXR1aWQgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZAotCSAgIHNpbmNlIHRoZSBTRUxpbnV4IGNvbnRyb2xzIGFyZSBub3QgYmFzZWQgb24gdGhlIExpbnV4Ci0JICAgaWRlbnRpdHkgYXR0cmlidXRlcywgU0VMaW51eCBkb2VzIG5vdCBuZWVkIHRvIGNvbnRyb2wKLQkgICB0aGlzIG9wZXJhdGlvbi4gIEhvd2V2ZXIsIFNFTGludXggZG9lcyBjb250cm9sIHRoZSB1c2UKLQkgICBvZiB0aGUgQ0FQX1NFVFVJRCBhbmQgQ0FQX1NFVEdJRCBjYXBhYmlsaXRpZXMgdXNpbmcgdGhlCi0JICAgY2FwYWJsZSBob29rLiAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNlbGludXhfdGFza19maXhfc2V0dWlkKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCi0JCQkJICAgaW50IGZsYWdzKQotewotCXJldHVybiBzZWNvbmRhcnlfb3BzLT50YXNrX2ZpeF9zZXR1aWQobmV3LCBvbGQsIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0Z2lkKGdpZF90IGlkMCwgZ2lkX3QgaWQxLCBnaWRfdCBpZDIsIGludCBmbGFncykKLXsKLQkvKiBTZWUgdGhlIGNvbW1lbnQgZm9yIHNldHVpZCBhYm92ZS4gKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cGdpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHBpZF90IHBnaWQpCiB7CiAJcmV0dXJuIGN1cnJlbnRfaGFzX3Blcm0ocCwgUFJPQ0VTU19fU0VUUEdJRCk7CkBAIC0zMzcyLDE3ICszMzIzLDExIEBACiAJKnNlY2lkID0gdGFza19zaWQocCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3NldGdyb3VwcyhzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbykKLXsKLQkvKiBTZWUgdGhlIGNvbW1lbnQgZm9yIHNldHVpZCBhYm92ZS4gKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0bmljZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWNlKQogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRuaWNlKHAsIG5pY2UpOworCXJjID0gY2FwX3Rhc2tfc2V0bmljZShwLCBuaWNlKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzM5Myw3ICszMzM4LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHNlY29uZGFyeV9vcHMtPnRhc2tfc2V0aW9wcmlvKHAsIGlvcHJpbyk7CisJcmMgPSBjYXBfdGFza19zZXRpb3ByaW8ocCwgaW9wcmlvKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzQwOCwxMSArMzM1Myw2IEBACiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKIHsKIAlzdHJ1Y3QgcmxpbWl0ICpvbGRfcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbSArIHJlc291cmNlOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRybGltaXQocmVzb3VyY2UsIG5ld19ybGltKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCS8qIENvbnRyb2wgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBoYXJkIGxpbWl0ICh3aGV0aGVyCiAJICAgbG93ZXJpbmcgb3IgcmFpc2luZyBpdCksIHNvIHRoYXQgdGhlIGhhcmQgbGltaXQgY2FuCkBAIC0zNDI4LDcgKzMzNjgsNyBAQAogewogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19zZXRzY2hlZHVsZXIocCwgcG9saWN5LCBscCk7CisJcmMgPSBjYXBfdGFza19zZXRzY2hlZHVsZXIocCwgcG9saWN5LCBscCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM0NTEsMTAgKzMzOTEsNiBAQAogCXUzMiBwZXJtOwogCWludCByYzsKIAotCXJjID0gc2Vjb25kYXJ5X29wcy0+dGFza19raWxsKHAsIGluZm8sIHNpZywgc2VjaWQpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJaWYgKCFzaWcpCiAJCXBlcm0gPSBQUk9DRVNTX19TSUdOVUxMOyAvKiBudWxsIHNpZ25hbDsgZXhpc3RlbmNlIHRlc3QgKi8KIAllbHNlCkBAIC0zNDY3LDE4ICszNDAzLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3ByY3RsKGludCBvcHRpb24sCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzMsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzUpCi17Ci0JLyogVGhlIGN1cnJlbnQgcHJjdGwgb3BlcmF0aW9ucyBkbyBub3QgYXBwZWFyIHRvIHJlcXVpcmUKLQkgICBhbnkgU0VMaW51eCBjb250cm9scyBzaW5jZSB0aGV5IG1lcmVseSBvYnNlcnZlIG9yIG1vZGlmeQotCSAgIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLiAqLwotCXJldHVybiBzZWNvbmRhcnlfb3BzLT50YXNrX3ByY3RsKG9wdGlvbiwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF90YXNrX3dhaXQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiB0YXNrX2hhc19wZXJtKHAsIGN1cnJlbnQsIFBST0NFU1NfX1NJR0NITEQpOwpAQCAtNDA0NywxMCArMzk3MSw2IEBACiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCWludCBlcnI7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT51bml4X3N0cmVhbV9jb25uZWN0KHNvY2ssIG90aGVyLCBuZXdzayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQogCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwogCW90aGVyX2lzZWMgPSBTT0NLX0lOT0RFKG90aGVyKS0+aV9zZWN1cml0eTsKIApAQCAtNDg0NCw3ICs0NzY0LDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gc2Vjb25kYXJ5X29wcy0+bmV0bGlua19zZW5kKHNrLCBza2IpOworCWVyciA9IGNhcF9uZXRsaW5rX3NlbmQoc2ssIHNrYik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNDg1OSw3ICs0Nzc5LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfcmVjdihza2IsIGNhcGFiaWxpdHkpOworCWVyciA9IGNhcF9uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01MTY3LDExICs1MDg3LDYgQEAKIAkJCSAgICAgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCiB7CiAJdTMyIHBlcm1zOwotCWludCByYzsKLQotCXJjID0gc2Vjb25kYXJ5X29wcy0+c2htX3NobWF0KHNocCwgc2htYWRkciwgc2htZmxnKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCWlmIChzaG1mbGcgJiBTSE1fUkRPTkxZKQogCQlwZXJtcyA9IFNITV9fUkVBRDsKQEAgLTU1ODEsNyArNTQ5Niw2IEBACiAJLm5ldGxpbmtfcmVjdiA9CQkJc2VsaW51eF9uZXRsaW5rX3JlY3YsCiAKIAkuYnBybV9zZXRfY3JlZHMgPQkJc2VsaW51eF9icHJtX3NldF9jcmVkcywKLQkuYnBybV9jaGVja19zZWN1cml0eSA9CQlzZWxpbnV4X2Jwcm1fY2hlY2tfc2VjdXJpdHksCiAJLmJwcm1fY29tbWl0dGluZ19jcmVkcyA9CXNlbGludXhfYnBybV9jb21taXR0aW5nX2NyZWRzLAogCS5icHJtX2NvbW1pdHRlZF9jcmVkcyA9CQlzZWxpbnV4X2Jwcm1fY29tbWl0dGVkX2NyZWRzLAogCS5icHJtX3NlY3VyZWV4ZWMgPQkJc2VsaW51eF9icHJtX3NlY3VyZWV4ZWMsCkBAIC01NjIzLDggKzU1MzcsNiBAQAogCS5pbm9kZV9nZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX2dldHNlY3VyaXR5LAogCS5pbm9kZV9zZXRzZWN1cml0eSA9CQlzZWxpbnV4X2lub2RlX3NldHNlY3VyaXR5LAogCS5pbm9kZV9saXN0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9saXN0c2VjdXJpdHksCi0JLmlub2RlX25lZWRfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9uZWVkX2tpbGxwcml2LAotCS5pbm9kZV9raWxscHJpdiA9CQlzZWxpbnV4X2lub2RlX2tpbGxwcml2LAogCS5pbm9kZV9nZXRzZWNpZCA9CQlzZWxpbnV4X2lub2RlX2dldHNlY2lkLAogCiAJLmZpbGVfcGVybWlzc2lvbiA9CQlzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbiwKQEAgLTU2NDQsMTcgKzU1NTYsMTIgQEAKIAkudGFza19jcmVhdGUgPQkJCXNlbGludXhfdGFza19jcmVhdGUsCiAJLmNyZWRfZnJlZSA9CQkJc2VsaW51eF9jcmVkX2ZyZWUsCiAJLmNyZWRfcHJlcGFyZSA9CQkJc2VsaW51eF9jcmVkX3ByZXBhcmUsCi0JLmNyZWRfY29tbWl0ID0JCQlzZWxpbnV4X2NyZWRfY29tbWl0LAogCS5rZXJuZWxfYWN0X2FzID0JCXNlbGludXhfa2VybmVsX2FjdF9hcywKIAkua2VybmVsX2NyZWF0ZV9maWxlc19hcyA9CXNlbGludXhfa2VybmVsX2NyZWF0ZV9maWxlc19hcywKLQkudGFza19zZXR1aWQgPQkJCXNlbGludXhfdGFza19zZXR1aWQsCi0JLnRhc2tfZml4X3NldHVpZCA9CQlzZWxpbnV4X3Rhc2tfZml4X3NldHVpZCwKLQkudGFza19zZXRnaWQgPQkJCXNlbGludXhfdGFza19zZXRnaWQsCiAJLnRhc2tfc2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX3NldHBnaWQsCiAJLnRhc2tfZ2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX2dldHBnaWQsCiAJLnRhc2tfZ2V0c2lkID0JCQlzZWxpbnV4X3Rhc2tfZ2V0c2lkLAogCS50YXNrX2dldHNlY2lkID0JCXNlbGludXhfdGFza19nZXRzZWNpZCwKLQkudGFza19zZXRncm91cHMgPQkJc2VsaW51eF90YXNrX3NldGdyb3VwcywKIAkudGFza19zZXRuaWNlID0JCQlzZWxpbnV4X3Rhc2tfc2V0bmljZSwKIAkudGFza19zZXRpb3ByaW8gPQkJc2VsaW51eF90YXNrX3NldGlvcHJpbywKIAkudGFza19nZXRpb3ByaW8gPQkJc2VsaW51eF90YXNrX2dldGlvcHJpbywKQEAgLTU2NjQsNyArNTU3MSw2IEBACiAJLnRhc2tfbW92ZW1lbW9yeSA9CQlzZWxpbnV4X3Rhc2tfbW92ZW1lbW9yeSwKIAkudGFza19raWxsID0JCQlzZWxpbnV4X3Rhc2tfa2lsbCwKIAkudGFza193YWl0ID0JCQlzZWxpbnV4X3Rhc2tfd2FpdCwKLQkudGFza19wcmN0bCA9CQkJc2VsaW51eF90YXNrX3ByY3RsLAogCS50YXNrX3RvX2lub2RlID0JCXNlbGludXhfdGFza190b19pbm9kZSwKIAogCS5pcGNfcGVybWlzc2lvbiA9CQlzZWxpbnV4X2lwY19wZXJtaXNzaW9uLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAppbmRleCBjMGM4ODU0Li4zMWRmMWQ3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaApAQCAtMjQsNiArMjQsNyBAQAogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19FWEVDTU9ELCAiZXhlY21vZCIpCiAgICBTXyhTRUNDTEFTU19DSFJfRklMRSwgQ0hSX0ZJTEVfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0JMS19GSUxFLCBCTEtfRklMRV9fT1BFTiwgIm9wZW4iKQorICAgU18oU0VDQ0xBU1NfU09DS19GSUxFLCBTT0NLX0ZJTEVfX09QRU4sICJvcGVuIikKICAgIFNfKFNFQ0NMQVNTX0ZJRk9fRklMRSwgRklGT19GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19GRCwgRkRfX1VTRSwgInVzZSIpCiAgICBTXyhTRUNDTEFTU19UQ1BfU09DS0VULCBUQ1BfU09DS0VUX19DT05ORUNUVE8sICJjb25uZWN0dG8iKQpAQCAtMTUyLDYgKzE1Myw3IEBACiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSwgIm5sbXNnX3JlbGF5IikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYsICJubG1zZ19yZWFkcHJpdiIpCisgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVCwgIm5sbXNnX3R0eV9hdWRpdCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1JFQUQsICJubG1zZ19yZWFkIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfSVA2RldfU09DS0VULCBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fTkxNU0dfV1JJVEUsICJubG1zZ193cml0ZSIpCiAgICBTXyhTRUNDTEFTU19BU1NPQ0lBVElPTiwgQVNTT0NJQVRJT05fX1NFTkRUTywgInNlbmR0byIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCmluZGV4IDBiYTc5ZmUuLmQ2NDUxOTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oCkBAIC0xNzQsNiArMTc0LDcgQEAKICNkZWZpbmUgU09DS19GSUxFX19TV0FQT04gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCiAjZGVmaW5lIFNPQ0tfRklMRV9fUVVPVEFPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAogI2RlZmluZSBTT0NLX0ZJTEVfX01PVU5UT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKKyNkZWZpbmUgU09DS19GSUxFX19PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCiAjZGVmaW5lIEZJRk9fRklMRV9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBGSUZPX0ZJTEVfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgRklGT19GSUxFX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCkBAIC03MDcsNiArNzA4LDcgQEAKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgICAgICAgMHgwMDgwMDAwMFVMCiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICAgICAgIDB4MDEwMDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRFBSSVYgICAgICAweDAyMDAwMDAwVUwKKyNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1RUWV9BVURJVCAgICAgMHgwNDAwMDAwMFVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1dSSVRFICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKaW5kZXggM2NjNDUxNi4uYzRlMDYyMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaApAQCAtNjAsOSArNjAsNyBAQAogCXUzMiBkZWZfc2lkOwkJCS8qIGRlZmF1bHQgU0lEIGZvciBsYWJlbGluZyAqLwogCXUzMiBtbnRwb2ludF9zaWQ7CQkvKiBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQgY29udGV4dCBmb3IgZmlsZXMgKi8KIAl1bnNpZ25lZCBpbnQgYmVoYXZpb3I7CQkvKiBsYWJlbGluZyBiZWhhdmlvciAqLwotCXVuc2lnbmVkIGNoYXIgaW5pdGlhbGl6ZWQ7CS8qIGluaXRpYWxpemF0aW9uIGZsYWcgKi8KIAl1bnNpZ25lZCBjaGFyIGZsYWdzOwkJLyogd2hpY2ggbW91bnQgb3B0aW9ucyB3ZXJlIHNwZWNpZmllZCAqLwotCXVuc2lnbmVkIGNoYXIgcHJvYzsJCS8qIHByb2MgZnMgKi8KIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlzZWNfaGVhZDsKIAlzcGlubG9ja190IGlzZWNfbG9jazsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKaW5kZXggNzI0NDczNy4uNWMzNDM0ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKQEAgLTM3LDE1ICszNywyMyBAQAogI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01BWAlQT0xJQ1lEQl9WRVJTSU9OX0JPVU5EQVJZCiAjZW5kaWYKIAorLyogTWFzayBmb3IganVzdCB0aGUgbW91bnQgcmVsYXRlZCBmbGFncyAqLworI2RlZmluZSBTRV9NTlRNQVNLCTB4MGYKKy8qIFN1cGVyIGJsb2NrIHNlY3VyaXR5IHN0cnVjdCBmbGFncyBmb3IgbW91bnQgb3B0aW9ucyAqLwogI2RlZmluZSBDT05URVhUX01OVAkweDAxCiAjZGVmaW5lIEZTQ09OVEVYVF9NTlQJMHgwMgogI2RlZmluZSBST09UQ09OVEVYVF9NTlQJMHgwNAogI2RlZmluZSBERUZDT05URVhUX01OVAkweDA4CisvKiBOb24tbW91bnQgcmVsYXRlZCBmbGFncyAqLworI2RlZmluZSBTRV9TQklOSVRJQUxJWkVECTB4MTAKKyNkZWZpbmUgU0VfU0JQUk9DCQkweDIwCisjZGVmaW5lIFNFX1NCTEFCRUxTVVBQCTB4NDAKIAogI2RlZmluZSBDT05URVhUX1NUUgkiY29udGV4dD0iCiAjZGVmaW5lIEZTQ09OVEVYVF9TVFIJImZzY29udGV4dD0iCiAjZGVmaW5lIFJPT1RDT05URVhUX1NUUgkicm9vdGNvbnRleHQ9IgogI2RlZmluZSBERUZDT05URVhUX1NUUgkiZGVmY29udGV4dD0iCisjZGVmaW5lIExBQkVMU1VQUF9TVFIgInNlY2xhYmVsIgogCiBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyOwogCkBAIC04MCw3ICs4OCw2IEBACiAjZGVmaW5lIFNFTF9WRUNfTUFYIDMyCiBzdHJ1Y3QgYXZfZGVjaXNpb24gewogCXUzMiBhbGxvd2VkOwotCXUzMiBkZWNpZGVkOwogCXUzMiBhdWRpdGFsbG93OwogCXUzMiBhdWRpdGRlbnk7CiAJdTMyIHNlcW5vOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCmluZGV4IDRlZDdiYWIuLmM2ODc1ZmQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXsgQVVESVRfVVNFUiwJCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUxBWSAgICB9LAogCXsgQVVESVRfU0lHTkFMX0lORk8sCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAogCXsgQVVESVRfVFRZX0dFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQUQgICAgIH0sCi0JeyBBVURJVF9UVFlfU0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfV1JJVEUgICAgfSwKKwl7IEFVRElUX1RUWV9TRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggMDFlYzZkMi4uZDNjOGI5OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC01OTUsNyArNTk1LDcgQEAKIAogCWxlbmd0aCA9IHNjbnByaW50ZihidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwKIAkJCSAgIiV4ICV4ICV4ICV4ICV1IiwKLQkJCSAgYXZkLmFsbG93ZWQsIGF2ZC5kZWNpZGVkLAorCQkJICBhdmQuYWxsb3dlZCwgMHhmZmZmZmZmZiwKIAkJCSAgYXZkLmF1ZGl0YWxsb3csIGF2ZC5hdWRpdGRlbnksCiAJCQkgIGF2ZC5zZXFubyk7CiBvdXQyOgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGM2NWU0ZmUuLmRlZWVjNmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTQwNyw3ICs0MDcsNiBAQAogCSAqIEluaXRpYWxpemUgdGhlIGFjY2VzcyB2ZWN0b3JzIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4KIAkgKi8KIAlhdmQtPmFsbG93ZWQgPSAwOwotCWF2ZC0+ZGVjaWRlZCA9IDB4ZmZmZmZmZmY7CiAJYXZkLT5hdWRpdGFsbG93ID0gMDsKIAlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CiAJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKQEAgLTc0Myw3ICs3NDIsNiBAQAogCiAJaWYgKCFzc19pbml0aWFsaXplZCkgewogCQlhdmQtPmFsbG93ZWQgPSAweGZmZmZmZmZmOwotCQlhdmQtPmRlY2lkZWQgPSAweGZmZmZmZmZmOwogCQlhdmQtPmF1ZGl0YWxsb3cgPSAwOwogCQlhdmQtPmF1ZGl0ZGVueSA9IDB4ZmZmZmZmZmY7CiAJCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCmluZGV4IDJlMGI4M2UuLmNmYTE5Y2EgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCkBAIC0xNjIsOCArMTYyLDggQEAKIAogLyoqCiAgKiBzbWtfY3VyYWNjIC0gZGV0ZXJtaW5lIGlmIGN1cnJlbnQgaGFzIGEgc3BlY2lmaWMgYWNjZXNzIHRvIGFuIG9iamVjdAotICogQG9iamVjdF9sYWJlbDogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QncyBTbWFjayBsYWJlbAotICogQHJlcXVlc3Q6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkLCBpbiAiTUFZIiBmb3JtYXQKKyAqIEBvYmpfbGFiZWw6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0J3MgU21hY2sgbGFiZWwKKyAqIEBtb2RlOiB0aGUgYWNjZXNzIHJlcXVlc3RlZCwgaW4gIk1BWSIgZm9ybWF0CiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGN1cnJlbnQgc3ViamVjdCBsYWJlbC9vYmplY3QgbGFiZWwgcGFpcgogICogaW4gdGhlIGFjY2VzcyBydWxlIGxpc3QgYW5kIHJldHVybnMgMCBpZiB0aGUgYWNjZXNzIGlzIHBlcm1pdHRlZCwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggZTdkZWQxMy4uODRiNjJiNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTkxLDYgKzkxLDcgQEAKIC8qKgogICogc21hY2tfcHRyYWNlX21heV9hY2Nlc3MgLSBTbWFjayBhcHByb3ZhbCBvbiBQVFJBQ0VfQVRUQUNICiAgKiBAY3RwOiBjaGlsZCB0YXNrIHBvaW50ZXIKKyAqIEBtb2RlOiBwdHJhY2UgYXR0YWNobWVudCBtb2RlCiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBPSywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqCkBAIC0yMDMsOSArMjA0LDggQEAKIAogLyoqCiAgKiBzbWFja19zYl9jb3B5X2RhdGEgLSBjb3B5IG1vdW50IG9wdGlvbnMgZGF0YSBmb3IgcHJvY2Vzc2luZwotICogQHR5cGU6IGZpbGUgc3lzdGVtIHR5cGUKICAqIEBvcmlnOiB3aGVyZSB0byBzdGFydAotICogQHNtYWNrb3B0cworICogQHNtYWNrb3B0czogbW91bnQgb3B0aW9ucyBzdHJpbmcKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGVycm9yLgogICoKQEAgLTMzMSw3ICszMzEsNyBAQAogLyoqCiAgKiBzbWFja19zYl9tb3VudCAtIFNtYWNrIGNoZWNrIGZvciBtb3VudGluZwogICogQGRldl9uYW1lOiB1bnVzZWQKLSAqIEBuZDogbW91bnQgcG9pbnQKKyAqIEBwYXRoOiBtb3VudCBwb2ludAogICogQHR5cGU6IHVudXNlZAogICogQGZsYWdzOiB1bnVzZWQKICAqIEBkYXRhOiB1bnVzZWQKQEAgLTM3MCw3ICszNzAsNyBAQAogCiAvKioKICAqIHNtYWNrX2lub2RlX2FsbG9jX3NlY3VyaXR5IC0gYWxsb2NhdGUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIGluIG5lZWQgb2YgYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBuZWVkIG9mIGEgYmxvYgogICoKICAqIFJldHVybnMgMCBpZiBpdCBnZXRzIGEgYmxvYiwgLUVOT01FTSBvdGhlcndpc2UKICAqLwpAQCAtMzg0LDcgKzM4NCw3IEBACiAKIC8qKgogICogc21hY2tfaW5vZGVfZnJlZV9zZWN1cml0eSAtIGZyZWUgYW4gaW5vZGUgYmxvYgotICogQGlub2RlIC0gdGhlIGlub2RlIHdpdGggYSBibG9iCisgKiBAaW5vZGU6IHRoZSBpbm9kZSB3aXRoIGEgYmxvYgogICoKICAqIENsZWFycyB0aGUgYmxvYiBwb2ludGVyIGluIGlub2RlCiAgKi8KQEAgLTUzOCw3ICs1MzgsNiBAQAogICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCi0gKiBAbmQ6IHVudXNlZAogICoKICAqIFRoaXMgaXMgdGhlIGltcG9ydGFudCBTbWFjayBob29rLgogICoKQEAgLTcwMSw4ICs3MDAsNyBAQAogICogQGlub2RlOiB0aGUgb2JqZWN0CiAgKiBAbmFtZTogYXR0cmlidXRlIG5hbWUKICAqIEBidWZmZXI6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0Ci0gKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyCi0gKiBAZXJyOiB1bnVzZWQKKyAqIEBhbGxvYzogdW51c2VkCiAgKgogICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYXR0cmlidXRlIG9yIGFuIGVycm9yIGNvZGUKICAqLwpAQCAtODY0LDcgKzg2Miw3IEBACiAvKioKICAqIHNtYWNrX2ZpbGVfbG9jayAtIFNtYWNrIGNoZWNrIG9uIGZpbGUgbG9ja2luZwogICogQGZpbGU6IHRoZSBvYmplY3QKLSAqIEBjbWQgdW51c2VkCisgKiBAY21kOiB1bnVzZWQKICAqCiAgKiBSZXR1cm5zIDAgaWYgY3VycmVudCBoYXMgd3JpdGUgYWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCkBAIC0xMDAzLDggKzEwMDEsOCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogY29tbWl0IG5ldyBjcmVkZW50aWFscworLyoqCisgKiBzbWFja19jcmVkX2NvbW1pdCAtIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKICAqIEBuZXc6IHRoZSBuZXcgY3JlZGVudGlhbHMKICAqIEBvbGQ6IHRoZSBvcmlnaW5hbCBjcmVkZW50aWFscwogICovCkBAIC0xMDE0LDggKzEwMTIsOCBAQAogCiAvKioKICAqIHNtYWNrX2tlcm5lbF9hY3RfYXMgLSBTZXQgdGhlIHN1YmplY3RpdmUgY29udGV4dCBpbiBhIHNldCBvZiBjcmVkZW50aWFscwotICogQG5ldyBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZC4KLSAqIEBzZWNpZCBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5IElEIHRvIGJlIHNldAorICogQG5ldzogcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQuCisgKiBAc2VjaWQ6IHNwZWNpZmllcyB0aGUgc2VjdXJpdHkgSUQgdG8gYmUgc2V0CiAgKgogICogU2V0IHRoZSBzZWN1cml0eSBkYXRhIGZvciBhIGtlcm5lbCBzZXJ2aWNlLgogICovCkBAIC0xMDMyLDggKzEwMzAsOCBAQAogCiAvKioKICAqIHNtYWNrX2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMgLSBTZXQgdGhlIGZpbGUgY3JlYXRpb24gbGFiZWwgaW4gYSBzZXQgb2YgY3JlZHMKLSAqIEBuZXcgcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQKLSAqIEBpbm9kZSBwb2ludHMgdG8gdGhlIGlub2RlIHRvIHVzZSBhcyBhIHJlZmVyZW5jZQorICogQG5ldzogcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQKKyAqIEBpbm9kZTogcG9pbnRzIHRvIHRoZSBpbm9kZSB0byB1c2UgYXMgYSByZWZlcmVuY2UKICAqCiAgKiBTZXQgdGhlIGZpbGUgY3JlYXRpb24gY29udGV4dCBpbiBhIHNldCBvZiBjcmVkZW50aWFscyB0byB0aGUgc2FtZQogICogYXMgdGhlIG9iamVjdGl2ZSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpZWQgaW5vZGUKQEAgLTEyNDIsNyArMTI0MCw3IEBACiAvKioKICAqIHNtYWNrX3Rhc2tfdG9faW5vZGUgLSBjb3B5IHRhc2sgc21hY2sgaW50byB0aGUgaW5vZGUgYmxvYgogICogQHA6IHRhc2sgdG8gY29weSBmcm9tCi0gKiBpbm9kZTogaW5vZGUgdG8gY29weSB0bworICogQGlub2RlOiBpbm9kZSB0byBjb3B5IHRvCiAgKgogICogU2V0cyB0aGUgc21hY2sgcG9pbnRlciBpbiB0aGUgaW5vZGUgc2VjdXJpdHkgYmxvYgogICovCkBAIC0xMjYwLDcgKzEyNTgsNyBAQAogICogc21hY2tfc2tfYWxsb2Nfc2VjdXJpdHkgLSBBbGxvY2F0ZSBhIHNvY2tldCBibG9iCiAgKiBAc2s6IHRoZSBzb2NrZXQKICAqIEBmYW1pbHk6IHVudXNlZAotICogQHByaW9yaXR5OiBtZW1vcnkgYWxsb2NhdGlvbiBwcmlvcml0eQorICogQGdmcF9mbGFnczogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBBc3NpZ24gU21hY2sgcG9pbnRlcnMgdG8gY3VycmVudAogICoKQEAgLTE5NzQsNyArMTk3Miw3IEBACiAKIC8qKgogICogc21hY2tfaXBjX2dldHNlY2lkIC0gRXh0cmFjdCBzbWFjayBzZWN1cml0eSBpZAotICogQGlwY3A6IHRoZSBvYmplY3QgcGVybWlzc2lvbnMKKyAqIEBpcHA6IHRoZSBvYmplY3QgcGVybWlzc2lvbnMKICAqIEBzZWNpZDogd2hlcmUgcmVzdWx0IHdpbGwgYmUgc2F2ZWQKICAqLwogc3RhdGljIHZvaWQgc21hY2tfaXBjX2dldHNlY2lkKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcHAsIHUzMiAqc2VjaWQpCkBAIC0yMjUxLDcgKzIyNDksNyBAQAogLyoqCiAgKiBzbWFja19zb2NrZXRfc2VuZG1zZyAtIFNtYWNrIGNoZWNrIGJhc2VkIG9uIGRlc3RpbmF0aW9uIGhvc3QKICAqIEBzb2NrOiB0aGUgc29ja2V0Ci0gKiBAbXNnaGRyOiB0aGUgbWVzc2FnZQorICogQG1zZzogdGhlIG1lc3NhZ2UKICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZQogICoKICAqIFJldHVybiAwIGlmIHRoZSBjdXJyZW50IHN1YmplY3QgY2FuIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbgpAQCAtMjI5Miw4ICsyMjkwLDcgQEAKIAogCiAvKioKLSAqIHNtYWNrX2Zyb21fc2VjYXR0ciAtIENvbnZlcnQgYSBuZXRsYWJlbCBhdHRyLm1scy5sdmwvYXR0ci5tbHMuY2F0Ci0gKiAJcGFpciB0byBzbWFjaworICogc21hY2tfZnJvbV9zZWNhdHRyIC0gQ29udmVydCBhIG5ldGxhYmVsIGF0dHIubWxzLmx2bC9hdHRyLm1scy5jYXQgcGFpciB0byBzbWFjawogICogQHNhcDogbmV0bGFiZWwgc2VjYXR0cgogICogQHNpcDogd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQKICAqCkBAIC0yNDE0LDcgKzI0MTEsNyBAQAogICogQHNvY2s6IHRoZSBzb2NrZXQKICAqIEBvcHR2YWw6IHVzZXIncyBkZXN0aW5hdGlvbgogICogQG9wdGxlbjogc2l6ZSB0aGVyZW9mCi0gKiBAbGVuOiBtYXggdGhlcmVvZQorICogQGxlbjogbWF4IHRoZXJlb2YKICAqCiAgKiByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwpAQCAtMjc0OSw3ICsyNzQ2LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19BVURJVCAqLwogCi0vKgorLyoqCiAgKiBzbWFja19zZWNpZF90b19zZWNjdHggLSByZXR1cm4gdGhlIHNtYWNrIGxhYmVsIGZvciBhIHNlY2lkCiAgKiBAc2VjaWQ6IGluY29taW5nIGludGVnZXIKICAqIEBzZWNkYXRhOiBkZXN0aW5hdGlvbgpAQCAtMjc2Niw3ICsyNzYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKKy8qKgogICogc21hY2tfc2VjY3R4X3RvX3NlY2lkIC0gcmV0dXJuIHRoZSBzZWNpZCBmb3IgYSBzbWFjayBsYWJlbAogICogQHNlY2RhdGE6IHNtYWNrIGxhYmVsCiAgKiBAc2VjbGVuOiBob3cgbG9uZyByZXN1bHQgaXMKQEAgLTI3ODAsMTEgKzI3NzcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKKy8qKgogICogc21hY2tfcmVsZWFzZV9zZWNjdHggLSBkb24ndCBkbyBhbnl0aGluZy4KLSAqIEBrZXlfcmVmOiB1bnVzZWQKLSAqIEBjb250ZXh0OiB1bnVzZWQKLSAqIEBwZXJtOiB1bnVzZWQKKyAqIEBzZWNkYXRhOiB1bnVzZWQKKyAqIEBzZWNsZW46IHVudXNlZAogICoKICAqIEV4aXN0cyB0byBtYWtlIHN1cmUgbm90aGluZyBnZXRzIGRvbmUsIGFuZCBwcm9wZXJseQogICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKaW5kZXggNTFmMGVmYy4uYTFiNTdlNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2xvYWQgLSB3cml0ZSgpIGZvciAvc21hY2svbG9hZAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQgLSBtdXN0IGJlIDAKQEAgLTQwMiw2ICs0MDIsNyBAQAogCiAvKioKICAqIHNta191bmxibF9hbWJpZW50IC0gaW5pdGlhbGl6ZSB0aGUgdW5sYWJlbGVkIGRvbWFpbgorICogQG9sZGFtYmllbnQ6IHByZXZpb3VzIGRvbWFpbiBzdHJpbmcKICAqLwogc3RhdGljIHZvaWQgc21rX3VubGJsX2FtYmllbnQoY2hhciAqb2xkYW1iaWVudCkKIHsKQEAgLTUxMyw3ICs1MTQsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9jaXBzbyAtIHdyaXRlKCkgZm9yIC9zbWFjay9jaXBzbwotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTczMyw3ICs3MzQsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9uZXRsYmxhZGRyIC0gd3JpdGUoKSBmb3IgL3NtYWNrL25ldGxhYmVsCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtODg0LDcgKzg4NSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2RvaSAtIHdyaXRlKCkgZm9yIC9zbWFjay9kb2kKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC05NDksNyArOTUwLDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfZGlyZWN0IC0gd3JpdGUoKSBmb3IgL3NtYWNrL2RpcmVjdAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwMjQsNyArMTAyNSw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2FtYmllbnQgLSB3cml0ZSgpIGZvciAvc21hY2svYW1iaWVudAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTEwOTksNyArMTEwMCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX29ubHljYXAgLSB3cml0ZSgpIGZvciAvc21hY2svb25seWNhcAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9LY29uZmlnIGIvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMzg1NwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTRUNVUklUWV9UT01PWU8KKwlib29sICJUT01PWU8gTGludXggU3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFQ1VSSVRZCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgU0VDVVJJVFlfUEFUSAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBUT01PWU8gTGludXgsIHBhdGhuYW1lLWJhc2VkIGFjY2VzcyBjb250cm9sLgorCSAgUmVxdWlyZWQgdXNlcnNwYWNlIHRvb2xzIGFuZCBmdXJ0aGVyIGluZm9ybWF0aW9uIG1heSBiZQorCSAgZm91bmQgYXQgPGh0dHA6Ly90b21veW8uc291cmNlZm9yZ2UuanAvPi4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vTWFrZWZpbGUgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjY2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSA9IGNvbW1vbi5vIHJlYWxwYXRoLm8gdG9tb3lvLm8gZG9tYWluLm8gZmlsZS5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZWE2NQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMCwwICsxLDIyMDYgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmMKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+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+d3JpdGVfYnVmKTsKKwloZWFkLT53cml0ZV9idWYgPSBOVUxMOworCXRvbW95b19mcmVlKGhlYWQpOworCWhlYWQgPSBOVUxMOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3IgQUNMIGVudHJ5LgorICoKKyAqIEBhY2xfdHlwZTogIFR5cGUgb2YgQUNMIGVudHJ5LgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgQUNMIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCit2b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlzd2l0Y2ggKGFjbF90eXBlKSB7CisJY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQpOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKwlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChsZW4pOworCWlmICghcHRyKQorCQlyZXR1cm4gTlVMTDsKKwlwdHItPnR5cGUgPSBhY2xfdHlwZTsKKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIHRvbW95b19vcGVuIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNvbnN0IGludCBrZXkgPSAoKHU4ICopIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSkKKwkJLSAoKHU4ICopIE5VTEwpOworCXJldHVybiB0b21veW9fb3Blbl9jb250cm9sKGtleSwgZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlbGVhc2UgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0b21veW9fY2xvc2VfY29udHJvbChmaWxlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZCAtIHJlYWQoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKiBAYnVmOiAgIFBvaW50ZXIgdG8gYnVmZmVyLgorICogQGNvdW50OiBTaXplIG9mIEBidWYuCisgKiBAcHBvczogIFVudXNlZC4KKyAqCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgbG9mZl90ICpwcG9zKQoreworCXJldHVybiB0b21veW9fcmVhZF9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKioKKyAqIHRvbW95b193cml0ZSAtIHdyaXRlKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgorICogQHBwb3M6ICBVbnVzZWQuCisgKgorICogUmV0dXJucyBAY291bnQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3NpemVfdCB0b21veW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHRvbW95b193cml0ZV9jb250cm9sKGZpbGUsIGJ1ZiwgY291bnQpOworfQorCisvKiBPcGVyYXRpb25zIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvbW95b19vcGVyYXRpb25zID0geworCS5vcGVuICAgID0gdG9tb3lvX29wZW4sCisJLnJlbGVhc2UgPSB0b21veW9fcmVsZWFzZSwKKwkucmVhZCAgICA9IHRvbW95b19yZWFkLAorCS53cml0ZSAgID0gdG9tb3lvX3dyaXRlLAorfTsKKworLyoqCisgKiB0b21veW9fY3JlYXRlX2VudHJ5IC0gQ3JlYXRlIGludGVyZmFjZSBmaWxlcyB1bmRlciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGRpcmVjdG9yeS4KKyAqCisgKiBAbmFtZTogICBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAbW9kZTogICBUaGUgcGVybWlzc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGZpbGUuCisgKiBAcGFyZW50OiBUaGUgcGFyZW50IGRpcmVjdG9yeS4KKyAqIEBrZXk6ICAgIFR5cGUgb2YgaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHRvbW95b19jcmVhdGVfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgbW9kZV90IG1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgdTgga2V5KQoreworCXNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCAoKHU4ICopIE5VTEwpICsga2V5LAorCQkJICAgICAgICZ0b21veW9fb3BlcmF0aW9ucyk7Cit9CisKKy8qKgorICogdG9tb3lvX2luaXRlcmZhY2VfaW5pdCAtIEluaXRpYWxpemUgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0b21veW9faW5pdGVyZmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqdG9tb3lvX2RpcjsKKworCS8qIERvbid0IGNyZWF0ZSBzZWN1cml0eWZzIGVudHJpZXMgdW5sZXNzIHJlZ2lzdGVyZWQuICovCisJaWYgKGN1cnJlbnRfY3JlZCgpLT5zZWN1cml0eSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXJldHVybiAwOworCisJdG9tb3lvX2RpciA9IHNlY3VyaXR5ZnNfY3JlYXRlX2RpcigidG9tb3lvIiwgTlVMTCk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZG9tYWluX3BvbGljeSIsICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0RPTUFJTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiZXhjZXB0aW9uX3BvbGljeSIsIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX0VYQ0VQVElPTlBPTElDWSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgic2VsZl9kb21haW4iLCAgICAgIDA0MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1NFTEZET01BSU4pOworCXRvbW95b19jcmVhdGVfZW50cnkoIi5kb21haW5fc3RhdHVzIiwgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19ET01BSU5fU1RBVFVTKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCIucHJvY2Vzc19zdGF0dXMiLCAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPQ0VTU19TVEFUVVMpOworCXRvbW95b19jcmVhdGVfZW50cnkoIm1lbWluZm8iLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19NRU1JTkZPKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJwcm9maWxlIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fUFJPRklMRSk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgibWFuYWdlciIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX01BTkFHRVIpOworCXRvbW95b19jcmVhdGVfZW50cnkoInZlcnNpb24iLCAgICAgICAgICAwNDAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGwodG9tb3lvX2luaXRlcmZhY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmggYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjYjdjYwotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtMCwwICsxLDM1OSBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9jb21tb24uaAorICoKKyAqIENvbW1vbiBmdW5jdGlvbnMgZm9yIFRPTU9ZTy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKiBWZXJzaW9uOiAyLjIuMC1wcmUgICAyMDA5LzAyLzAxCisgKgorICovCisKKyNpZm5kZWYgX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX0NPTU1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IGRlbnRyeTsKK3N0cnVjdCB2ZnNtb3VudDsKKworLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgaG9sZGluZyBwYXRobmFtZXMuICovCitzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyIHsKKwljaGFyIGJ1ZmZlcls0MDk2XTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBhIHRva2VuLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGhhc2g7ICAgICAgICAgIC8qID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgc3RybGVuKG5hbWUpKSAqLworCXUxNiB0b3RhbF9sZW47ICAgICAvKiA9IHN0cmxlbihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1MTYgY29uc3RfbGVuOyAgICAgLyogPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSkgICAgICovCisJYm9vbCBpc19kaXI7ICAgICAgIC8qID0gdG9tb3lvX3N0cmVuZHN3aXRoKG5hbWUsICIvIikgICAgICAqLworCWJvb2wgaXNfcGF0dGVybmVkOyAvKiA9IHRvbW95b19wYXRoX2NvbnRhaW5zX3BhdHRlcm4obmFtZSkgKi8KKwl1MTYgZGVwdGg7ICAgICAgICAgLyogPSB0b21veW9fcGF0aF9kZXB0aChuYW1lKSAgICAgICAgICAgICovCit9OworCisvKgorICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgorICoKKyAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KKyAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKKyAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgcmVxdWVzdGVkIHBhdGhuYW1lLiAqLworc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIHsKKwkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gdG9tb3lvX2ZyZWUoKS4gKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBoZWFkOworCWNoYXIgYmFyaWllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCisJY2hhciBib2R5W1RPTU9ZT19NQVhfUEFUSE5BTUVfTEVOXTsKKwljaGFyIGJhcnJpZXIyWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworfTsKKworLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIGhvbGRpbmcgQUNMIGVudHJpZXMuCisgKgorICogUGFja2luZyAic3RydWN0IHRvbW95b19hY2xfaW5mbyIgYWxsb3dzCisgKiAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTE2IiBhbmQKKyAqICJzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1OCIKKyAqIHdpdGhvdXQgZW5sYXJnaW5nIHRoZWlyIHN0cnVjdHVyZSBzaXplLgorICovCitzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyoKKwkgKiBUeXBlIG9mIHRoaXMgQUNMIGVudHJ5LgorCSAqCisJICogTVNCIGlzIGlzX2RlbGV0ZWQgZmxhZy4KKwkgKi8KKwl1OCB0eXBlOworfSBfX3BhY2tlZDsKKworLyogVGhpcyBBQ0wgZW50cnkgaXMgZGVsZXRlZC4gICAgICAgICAgICovCisjZGVmaW5lIFRPTU9ZT19BQ0xfREVMRVRFRCAgICAgICAgMHg4MAorCisvKiBTdHJ1Y3R1cmUgZm9yIGRvbWFpbiBpbmZvcm1hdGlvbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjbF9pbmZvX2xpc3Q7CisJLyogTmFtZSBvZiB0aGlzIGRvbWFpbi4gTmV2ZXIgTlVMTC4gICAgICAgICAgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsKKwl1OCBwcm9maWxlOyAgICAgICAgLyogUHJvZmlsZSBudW1iZXIgdG8gdXNlLiAqLworCXU4IGlzX2RlbGV0ZWQ7ICAgICAvKiBEZWxldGUgZmxhZy4KKwkJCSAgICAgIDAgPSBhY3RpdmUuCisJCQkgICAgICAxID0gZGVsZXRlZCBidXQgdW5kZWxldGFibGUuCisJCQkgICAgICAyNTUgPSBkZWxldGVkIGFuZCBubyBsb25nZXIgdW5kZWxldGFibGUuICovCisJYm9vbCBxdW90YV93YXJuZWQ7IC8qIFF1b3RhIHdhcm5uaW5nIGZsYWcuICAgKi8KKwkvKiBET01BSU5fRkxBR1NfKi4gVXNlIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoKSB0byBtb2RpZnkuICovCisJdTggZmxhZ3M7Cit9OworCisvKiBQcm9maWxlIG51bWJlciBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1LiAqLworI2RlZmluZSBUT01PWU9fTUFYX1BST0ZJTEVTIDI1NgorCisvKiBJZ25vcmUgImFsbG93X3JlYWQiIGRpcmVjdGl2ZSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAxCisvKgorICogVGhpcyBkb21haW4gd2FzIHVuYWJsZSB0byBjcmVhdGUgYSBuZXcgZG9tYWluIGF0IHRvbW95b19maW5kX25leHRfZG9tYWluKCkKKyAqIGJlY2F1c2UgdGhlIG5hbWUgb2YgdGhlIGRvbWFpbiB0byBiZSBjcmVhdGVkIHdhcyB0b28gbG9uZyBvcgorICogaXQgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4KKyAqIE1vcmUgdGhhbiBvbmUgcHJvY2VzcyBjb250aW51ZWQgZXhlY3ZlKCkgd2l0aG91dCBkb21haW4gdHJhbnNpdGlvbi4KKyAqLworI2RlZmluZSBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEICAgICAgICAyCisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yICJhbGxvd19yZWFkL3dyaXRlIiwgImFsbG93X2V4ZWN1dGUiLCAiYWxsb3dfcmVhZCIsCisgKiAiYWxsb3dfd3JpdGUiLCAiYWxsb3dfY3JlYXRlIiwgImFsbG93X3VubGluayIsICJhbGxvd19ta2RpciIsICJhbGxvd19ybWRpciIsCisgKiAiYWxsb3dfbWtmaWZvIiwgImFsbG93X21rc29jayIsICJhbGxvd19ta2Jsb2NrIiwgImFsbG93X21rY2hhciIsCisgKiAiYWxsb3dfdHJ1bmNhdGUiLCAiYWxsb3dfc3ltbGluayIgYW5kICJhbGxvd19yZXdyaXRlIiBkaXJlY3RpdmUuCisgKi8KK3N0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICovCisJdTE2IHBlcm07CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lOworfTsKKworLyogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVuYW1lIiBhbmQgImFsbG93X2xpbmsiIGRpcmVjdGl2ZS4gKi8KK3N0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICovCisJdTggcGVybTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTI7Cit9OworCisvKiBLZXl3b3JkcyBmb3IgQUNMcy4gKi8KKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxJQVMgICAgICAgICAgICAgICAgICAgICAiYWxpYXMgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICAgICAgICAgICAgICAgICJhbGxvd19yZWFkICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVMRVRFICAgICAgICAgICAgICAgICAgICAiZGVsZXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICAgICAgICAgICAgICAiZGVueV9yZXdyaXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICAgICAgICAgICAgICAiZmlsZV9wYXR0ZXJuICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4gICAgICAgICAiaW5pdGlhbGl6ZV9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTiAgICAgICAgICAgICAgICJrZWVwX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VTkRFTEVURSAgICAgICAgICAgICAgICAgICJ1bmRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICAgICAgICAgICAgICAgInVzZV9wcm9maWxlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEICAiaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkIgorLyogQSBkb21haW4gZGVmaW5pdGlvbiBzdGFydHMgd2l0aCA8a2VybmVsPi4gKi8KKyNkZWZpbmUgVE9NT1lPX1JPT1RfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAiPGtlcm5lbD4iCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUVfTEVOICAgICAgICAgICAgICAgICAgICAgKHNpemVvZihUT01PWU9fUk9PVF9OQU1FKSAtIDEpCisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KKyNkZWZpbmUgVE9NT1lPX01BQ19GT1JfRklMRSAgICAgICAgICAgICAgICAgIDAgIC8qIGRvbWFpbl9wb2xpY3kuY29uZiAqLworI2RlZmluZSBUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSAgICAgICAgICAgICAgMQorI2RlZmluZSBUT01PWU9fVkVSQk9TRSAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVggICAgICAgICAgICAgMworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlYWRpbmcvd3JpdGluZyBwb2xpY3kgdmlhIHNlY3VyaXR5ZnMgaW50ZXJmYWNlcy4gKi8KK3N0cnVjdCB0b21veW9faW9fYnVmZmVyIHsKKwlpbnQgKCpyZWFkKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJaW50ICgqd3JpdGUpIChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqKTsKKwkvKiBFeGNsdXNpdmUgbG9jayBmb3IgdGhpcyBzdHJ1Y3R1cmUuICAgKi8KKwlzdHJ1Y3QgbXV0ZXggaW9fc2VtOworCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgcmVhZGluZyBmcm9tLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgKnJlYWRfdmFyMTsKKwkvKiBFeHRyYSB2YXJpYWJsZXMgZm9yIHJlYWRpbmcuICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFkX3ZhcjI7CisJLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSB3cml0aW5nIHRvLiAgICovCisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqd3JpdGVfdmFyMTsKKwkvKiBUaGUgc3RlcCBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgKi8KKwlpbnQgcmVhZF9zdGVwOworCS8qIEJ1ZmZlciBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgICAqLworCWNoYXIgKnJlYWRfYnVmOworCS8qIEVPRiBmbGFnIGZvciByZWFkaW5nLiAgICAgICAgICAgICAgICAqLworCWJvb2wgcmVhZF9lb2Y7CisJLyogUmVhZCBkb21haW4gQUNMIG9mIHNwZWNpZmllZCBQSUQ/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+bGF5b3V0ID0gbGF5b3V0OwogCWxkZXYtPmdwaW8ubm9kZSA9IHNvdW5kLT5wYXJlbnQ7CiAJc3dpdGNoIChsYXlvdXQtPmxheW91dF9pZCkgeworCWNhc2UgMDogIC8qIGFueXRoaW5nIHdpdGggZGV2aWNlX2lkLCBub3QgbGF5b3V0X2lkICovCiAJY2FzZSA0MTogLyogdGhhdCB1bmtub3duIG1hY2hpbmUgbm8gb25lIHNlZW1zIHRvIGhhdmUgKi8KIAljYXNlIDUxOiAvKiBQb3dlckJvb2s1LDQgKi8KIAljYXNlIDU4OiAvKiBNYWMgTWluaSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYwppbmRleCBiZTQ2OGVkLi40MThjODRjIDEwMDY0NAotLS0gYS9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYworKysgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpMnNidXMgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqCiAgKiBHUEwgdjIsIGNhbiBiZSBmb3VuZCBpbiBDT1BZSU5HLgogICovCkBAIC0xODYsMTMgKzE4NiwyNSBAQAogCQl9CiAJfQogCWlmIChpID09IDEpIHsKLQkJY29uc3QgdTMyICpsYXlvdXRfaWQgPQotCQkJb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAibGF5b3V0LWlkIiwgTlVMTCk7Ci0JCWlmIChsYXlvdXRfaWQpIHsKLQkJCWxheW91dCA9ICpsYXlvdXRfaWQ7CisJCWNvbnN0IHUzMiAqaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKKworCQlpZiAoaWQpIHsKKwkJCWxheW91dCA9ICppZDsKIAkJCXNucHJpbnRmKGRldi0+c291bmQubW9kYWxpYXMsIDMyLAogCQkJCSAic291bmQtbGF5b3V0LSVkIiwgbGF5b3V0KTsKIAkJCW9rID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHNvdW5kLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQkvKgorCQkJICogV2UgcHJvYmFibHkgY2Fubm90IGhhbmRsZSBhbGwgZGV2aWNlLWlkIG1hY2hpbmVzLAorCQkJICogc28gcmVzdHJpY3QgdG8gdGhvc2Ugd2UgZG8gaGFuZGxlIGZvciBub3cuCisJCQkgKi8KKwkJCWlmIChpZCAmJiAoKmlkID09IDIyIHx8ICppZCA9PSAxNCB8fCAqaWQgPT0gMzUpKSB7CisJCQkJc25wcmludGYoZGV2LT5zb3VuZC5tb2RhbGlhcywgMzIsCisJCQkJCSAiYW9hLWRldmljZS1pZC0lZCIsICppZCk7CisJCQkJb2sgPSAxOworCQkJCWxheW91dCA9IC0xOworCQkJfQogCQl9CiAJfQogCS8qIGZvciB0aGUgdGltZSBiZWluZywgdW50aWwgd2UgY2FuIGhhbmRsZSBub24tbGF5b3V0LWlkCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vS2NvbmZpZyBiL3NvdW5kL2FybS9LY29uZmlnCmluZGV4IGY4ZTZkZTQuLjg4NTY4M2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9LY29uZmlnCisrKyBiL3NvdW5kL2FybS9LY29uZmlnCkBAIC0xMSwxNyArMTEsNiBAQAogCiBpZiBTTkRfQVJNCiAKLWNvbmZpZyBTTkRfU0ExMVhYX1VEQTEzNDEKLQl0cmlzdGF0ZSAiU0ExMXh4IFVEQTEzNDFUUyBkcml2ZXIgKGlQYXEgSDM2MDApIgotCWRlcGVuZHMgb24gQVJDSF9TQTExMDAgJiYgTDMKLQlzZWxlY3QgU05EX1BDTQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBDb21wYXEgaVBhcSBIM3gwMCBoYW5kaGVsZCBjb21wdXRlcgotCSAgYW5kIHdhbnQgdG8gdXNlIGl0cyBQaGlsaXBzIFVEQSAxMzQxIGF1ZGlvIGNoaXAuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zYTExeHgtdWRhMTM0MS4KLQogY29uZmlnIFNORF9BUk1BQUNJCiAJdHJpc3RhdGUgIkFSTSBQcmltZUNlbGwgUEwwNDEgQUMgTGluayBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNX0FNQkEKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9NYWtlZmlsZSBiL3NvdW5kL2FybS9NYWtlZmlsZQppbmRleCAyMDU0ZGUxLi41YTU0OWVkIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vTWFrZWZpbGUKKysrIGIvc291bmQvYXJtL01ha2VmaWxlCkBAIC0yLDkgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgQUxTQQogIwogCi1vYmotJChDT05GSUdfU05EX1NBMTFYWF9VREExMzQxKSArPSBzbmQtc2ExMXh4LXVkYTEzNDEubyAKLXNuZC1zYTExeHgtdWRhMTM0MS1vYmpzCQk6PSBzYTExeHgtdWRhMTM0MS5vCi0KIG9iai0kKENPTkZJR19TTkRfQVJNQUFDSSkJKz0gc25kLWFhY2kubwogc25kLWFhY2ktb2JqcwkJCTo9IGFhY2kubyBkZXZkbWEubwogCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCA3NzI5MDFlLi43ZmJkNjhmIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTk5NSwxMCArOTk1LDExIEBACiB7CiAJc3RydWN0IGFhY2kgKmFhY2k7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAotCQkJICAgIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGFhY2kpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQorCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKKwkJCSAgICAgIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGFhY2kpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBOVUxMOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gYWFjaV9mcmVlX2NhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKaW5kZXggMzVhZmQwYy4uMmU2MzU1ZiAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYwpAQCAtMzEsNiArMzEsNyBAQAogc3RhdGljIHZvbGF0aWxlIGxvbmcgZ3NyX2JpdHM7CiBzdGF0aWMgc3RydWN0IGNsayAqYWM5N19jbGs7CiBzdGF0aWMgc3RydWN0IGNsayAqYWM5N2NvbmZfY2xrOworc3RhdGljIGludCByZXNldF9ncGlvOwogCiAvKgogICogQmV3YXJlIFBYQTI3eCBidWdzOgpAQCAtNDIsNiArNDMsNDUgQEAKICAqIDEgamlmZnkgdGltZW91dCBpZiBpbnRlcnJ1cHQgbmV2ZXIgY29tZXMpLgogICovCiAKK2VudW0geworCVJFU0VUR1BJT19GT1JDRV9ISUdILAorCVJFU0VUR1BJT19GT1JDRV9MT1csCisJUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DCit9OworCisvKioKKyAqIHNldF9yZXNldGdwaW9fbW9kZSAtIGNvbXB1dGVzIGFuZCBzZXRzIHRoZSBBQzk3X1JFU0VUIGdwaW8gbW9kZSBvbiBQWEEKKyAqIEBtb2RlOiBjaG9zZW4gYWN0aW9uCisgKgorICogQXMgdGhlIFBYQTI3eCBDUFVzIHN1ZmZlciBmcm9tIGEgQUM5NyBidWcsIGEgbWFudWFsIGNvbnRyb2wgb2YgdGhlIHJlc2V0IGxpbmUKKyAqIG11c3QgYmUgZG9uZSB0byBpbnN1cmUgcHJvcGVyIHdvcmsgb2YgQUM5NyByZXNldCBsaW5lLiAgVGhpcyBmdW5jdGlvbgorICogY29tcHV0ZXMgdGhlIGNvcnJlY3QgZ3Bpb19tb2RlIGZvciBmdXJ0aGVyIHVzZSBieSByZXNldCBmdW5jdGlvbnMsIGFuZAorICogYXBwbGllZCB0aGUgY2hhbmdlIHRocm91Z2ggcHhhX2dwaW9fbW9kZS4KKyAqLworc3RhdGljIHZvaWQgc2V0X3Jlc2V0Z3Bpb19tb2RlKGludCByZXNldGdwaW9fYWN0aW9uKQoreworCWludCBtb2RlID0gMDsKKworCWlmIChyZXNldF9ncGlvKQorCQlzd2l0Y2ggKHJlc2V0Z3Bpb19hY3Rpb24pIHsKKwkJY2FzZSBSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkM6CisJCQlpZiAocmVzZXRfZ3BpbyA9PSAxMTMpCisJCQkJbW9kZSA9IDExMyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0xPVzsKKwkJCWlmIChyZXNldF9ncGlvID09IDk1KQorCQkJCW1vZGUgPSA5NSB8IEdQSU9fQUxUX0ZOXzFfT1VUOworCQkJYnJlYWs7CisJCWNhc2UgUkVTRVRHUElPX0ZPUkNFX0xPVzoKKwkJCW1vZGUgPSByZXNldF9ncGlvIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfTE9XOworCQkJYnJlYWs7CisJCWNhc2UgUkVTRVRHUElPX0ZPUkNFX0hJR0g6CisJCQltb2RlID0gcmVzZXRfZ3BpbyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0g7CisJCQlicmVhazsKKwkJfTsKKworCWlmIChtb2RlKQorCQlweGFfZ3Bpb19tb2RlKG1vZGUpOworfQorCiB1bnNpZ25lZCBzaG9ydCBweGEyeHhfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXVuc2lnbmVkIHNob3J0IHZhbCA9IC0xOwpAQCAtMTM3LDEwICsxNzcsMTAgQEAKIAogCS8qIHdhcm0gcmVzZXQgYnJva2VuIG9uIEJ1bHZlcmRlLAogCSAgIHNvIG1hbnVhbGx5IGtlZXAgQUM5NyByZXNldCBoaWdoICovCi0JcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKKwlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX0ZPUkNFX0hJR0gpOwogCXVkZWxheSgxMCk7CiAJR0NSIHw9IEdDUl9XQVJNX1JTVDsKLQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKIAl1ZGVsYXkoNTAwKTsKIH0KIApAQCAtMzA4LDggKzM0OCw4IEBACiAJCXB4YV9ncGlvX21vZGUoR1BJTzI5X1NEQVRBX0lOX0FDOTdfTUQpOwogCX0KIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7Ci0JCS8qIFVzZSBHUElPIDExMyBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCi0JCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCQkvKiBVc2UgR1BJTyAxMTMgb3IgOTUgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLworCQlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKIAl9CiAJY2xrX2VuYWJsZShhYzk3X2Nsayk7CiAJcmV0dXJuIDA7CkBAIC0zMjAsNiArMzYwLDI3IEBACiBpbnQgX19kZXZpbml0IHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBweGEyeHhfYWM5N19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEpIHsKKwkJc3dpdGNoIChwZGF0YS0+cmVzZXRfZ3BpbykgeworCQljYXNlIDk1OgorCQljYXNlIDExMzoKKwkJCXJlc2V0X2dwaW8gPSBwZGF0YS0+cmVzZXRfZ3BpbzsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlyZXNldF9ncGlvID0gMTEzOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiSW52YWxpZCByZXNldCBHUElPICVkXG4iLAorCQkJCXBkYXRhLT5yZXNldF9ncGlvKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjcHVfaXNfcHhhMjd4KCkpCisJCQlyZXNldF9ncGlvID0gMTEzOworCX0KIAogCWlmIChjcHVfaXNfcHhhMjV4KCkgfHwgY3B1X2lzX3B4YTI3eCgpKSB7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMxX1NZTkNfQUM5N19NRCk7CkBAIC0zMzAsNyArMzkxLDcgQEAKIAogCWlmIChjcHVfaXNfcHhhMjd4KCkpIHsKIAkJLyogVXNlIEdQSU8gMTEzIGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KLQkJcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMpOwogCQlhYzk3Y29uZl9jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgIkFDOTdDT05GQ0xLIik7CiAJCWlmIChJU19FUlIoYWM5N2NvbmZfY2xrKSkgewogCQkJcmV0ID0gUFRSX0VSUihhYzk3Y29uZl9jbGspOwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwppbmRleCA4NWNmNTkxLi43ZWQxMDBjIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwpAQCAtMTczLDEwICsxNzMsOSBAQAogCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3X3RlbXBsYXRlOwogCWludCByZXQ7CiAKLQlyZXQgPSAtRU5PTUVNOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCi0JCQkgICAgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQkgICAgICBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAogCWNhcmQtPmRldiA9ICZkZXYtPmRldjsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jIGIvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkY2Q1MWQuLjAwMDAwMDAKLS0tIGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ODMgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIFBoaWxpcHMgVURBMTM0MVRTIG9uIENvbXBhcSBpUEFRIEgzNjAwIHNvdW5kY2FyZAotICogIENvcHlyaWdodCAoQykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqIAotICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTAzLTEzICAgVG9tYXMgS2FzcGFyZWsgIGluaXRpYWwgcmVsZWFzZSAtIGJhc2VkIG9uIGgzNjAwLXVkYTEzNDEuYyBmcm9tIE9TUwotICogMjAwMi0wMy0yMCAgIFRvbWFzIEthc3BhcmVrICBwbGF5YmFjayBvdmVyIEFMU0EgaXMgd29ya2luZwotICogMjAwMi0wMy0yOCAgIFRvbWFzIEthc3BhcmVrICBwbGF5YmFjayBvdmVyIE9TUyBlbXVsYXRpb24gaXMgd29ya2luZwotICogMjAwMi0wMy0yOSAgIFRvbWFzIEthc3BhcmVrICBiYXNpYyBjYXB0dXJlIGlzIHdvcmtpbmcgKG5hdGl2ZSBBTFNBKQotICogMjAwMi0wMy0yOSAgIFRvbWFzIEthc3BhcmVrICBjYXB0dXJlIGlzIHdvcmtpbmcgKE9TUyBlbXVsYXRpb24pCi0gKiAyMDAyLTA0LTA0ICAgVG9tYXMgS2FzcGFyZWsgIGJldHRlciByYXRlcyBoYW5kbGluZyAoYWxsb3cgbm9uLXN0YW5kYXJkIHJhdGVzKQotICogMjAwMy0wMi0xNCAgIEJyaWFuIEF2ZXJ5ICAgICBmaXhlZCBmdWxsIGR1cGxleCBtb2RlLCBvdGhlciB1cGRhdGVzCi0gKiAyMDAzLTAyLTIwICAgVG9tYXMgS2FzcGFyZWsgIG1lcmdlZCB1cGRhdGVzIGJ5IEJyaWFuIChleGNlcHQgSEFMKQotICogMjAwMy0wNC0xOSAgIEphcm9zbGF2IEt5c2VsYSByZWNvZGVkIERNQSBzdHVmZiB0byBmb2xsb3cgMi40LjE4cm1rMy1oaDI0IGtlcm5lbAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIHN1c3BlbmQgYW5kIHJlc3VtZQotICogMjAwMy0wNC0yOCAgIFRvbWFzIEthc3BhcmVrICB1cGRhdGVkIHdvcmsgYnkgSmFyb3NsYXYgdG8gY29tcGlsZSBpdCB1bmRlciAyLjUueCBhZ2FpbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgSEFMIGxheWVyIChwYXRjaGVzIGZyb20gQnJpYW4pCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBUbyB1bmRlcnN0YW5kIHdoYXQgQWxzYSBEcml2ZXJzIHNob3VsZCBiZSBkb2luZyBsb29rIGF0ICJXcml0aW5nIGFuIEFsc2EgRHJpdmVyIiBieSBUYWthc2hpIEl3YWkKLSogYXZhaWxhYmxlIGluIHRoZSBBbHNhIGRvYyBzZWN0aW9uIG9uIHRoZSB3ZWJzaXRlCQkKLSogCi0qIEEgZmV3IG5vdGVzIHRvIG1ha2UgdGhpbmdzIGNsZWFyZXIuIFRoZSBVREExMzQxIGlzIGhvb2tlZCB1cCB0byBTZXJpYWwgcG9ydCA0IG9uIHRoZSBTQTExMDAuCi0qIFdlIGFyZSB1c2luZyAgU1NQIG1vZGUgdG8gdGFsayB0byB0aGUgVURBMTM0MS4gVGhlIFVEQTEzNDEgYml0ICYgd29yZHNlbGVjdCBjbG9ja3MgYXJlIGdlbmVyYXRlZAotKiBieSB0aGlzIFVBUlQuIFVuZm9ydHVuYXRlbHksIHRoZSBjbG9jayBvbmx5IHJ1bnMgaWYgdGhlIHRyYW5zbWl0IGJ1ZmZlciBoYXMgc29tZXRoaW5nIGluIGl0LgotKiBTbywgaWYgd2UgYXJlIGp1c3QgcmVjb3JkaW5nLCB3ZSBmZWVkIHRoZSB0cmFuc21pdCBETUEgc3RyZWFtIGEgYnVuY2ggb2YgMHgwMDAwIHNvIHRoYXQgdGhlCi0qIHRyYW5zbWl0IGJ1ZmZlciBpcyBmdWxsIGFuZCB0aGUgY2xvY2sga2VlcHMgZ29pbmcuIFRoZSB6ZXJvZXMgY29tZSBmcm9tIEZMVVNIX0JBU0VfUEhZUyB3aGljaAotKiBpcyBhIG1lbSBsb2MgdGhhdCBhbHdheXMgZGVjb2RlcyB0byAwJ3Mgdy8gbm8gb2ZmIGNoaXAgYWNjZXNzLgotKgotKiBTb21lIGFsc2EgdGVybWlub2xvZ3k6Ci0qCWZyYW1lID0+IG51bV9jaGFubmVscyAqIHNhbXBsZV9zaXplICBlLmcgc3RlcmVvIDE2IGJpdCBpcyAyICogMTYgPSAzMiBieXRlcwotKglwZXJpb2QgPT4gdGhlIGxlYXN0IG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGUuZy4gd2UgaGF2ZSBhIDEwMjQgYnl0ZQotKiAgICAgICAgICAgICBidWZmZXIgYW5kIDQgcGVyaW9kcyBpbiB0aGUgcnVudGltZSBzdHJ1Y3R1cmUgdGhpcyBtZWFucyB3ZSdsbCBnZXQgYW4gaW50IGV2ZXJ5IDI1NgotKiAgICAgICAgICAgICBieXRlcyBvciA0IHRpbWVzIHBlciBidWZmZXIuCi0qICAgICAgICAgICAgIEEgbnVtYmVyIG9mIHRoZSBzaXplcyBhcmUgaW4gZnJhbWVzIHJhdGhlciB0aGFuIGJ5dGVzLCB1c2UgZnJhbWVzX3RvX2J5dGVzIGFuZAotKiAgICAgICAgICAgICBieXRlc190b19mcmFtZXMgdG8gY29udmVydC4gIFRoZSBlYXNpZXN0IHdheSB0byB0ZWxsIHRoZSB1bml0cyBpcyB0byBsb29rIGF0IHRoZQotKiAgICAgICAgICAgICB0eXBlIGkuZS4gcnVudGltZS0+IGJ1ZmZlcl9zaXplIGlzIGluIGZyYW1lcyBhbmQgaXRzIHR5cGUgaXMgc25kX3BjbV91ZnJhbWVzX3QKLSogICAgICAgICAgICAgCi0qCU5vdGVzIGFib3V0IHRoZSBwb2ludGVyIGZ4bjoKLSoJVGhlIHBvaW50ZXIgZnhuIG5lZWRzIHRvIHJldHVybiB0aGUgb2Zmc2V0IGludG8gdGhlIGRtYSBidWZmZXIgaW4gZnJhbWVzLgotKglJbnRlcnJ1cHRzIG11c3QgYmUgYmxvY2tlZCBiZWZvcmUgY2FsbGluZyB0aGUgZG1hX2dldF9wb3MgZnhuIHRvIGF2b2lkIHJhY2Ugd2l0aCBpbnRlcnJ1cHRzLgotKgotKglOb3RlcyBhYm91dCBwYXVzZS9yZXN1bWUKLSoJSW1wbGVtZW50aW5nIHRoaXMgd291bGQgYmUgY29tcGxpY2F0ZWQgc28gaXQncyBza2lwcGVkLiAgVGhlIHByb2JsZW0gY2FzZSBpczoKLSoJQSBmdWxsIGR1cGxleCBjb25uZWN0aW9uIGlzIGdvaW5nLCB0aGVuIHBsYXkgaXMgcGF1c2VkLiBBdCB0aGlzIHBvaW50IHlvdSBuZWVkIHRvIHN0YXJ0IHhtaXR0aW5nCi0qCTAncyB0byBrZWVwIHRoZSByZWNvcmQgYWN0aXZlIHdoaWNoIG1lYW5zIHlvdSBjYW50IGp1c3QgZnJlZXplIHRoZSBkbWEgYW5kIHJlc3VtZSBpdCBsYXRlciB5b3UnZAotKgluZWVkIHRvCXNhdmUgb2ZmIHRoZSBkbWEgaW5mbywgYW5kIHJlc3RvcmUgaXQgcHJvcGVybHkgb24gYSByZXN1bWUuICBZZWFjaCEKLSoKLSoJTm90ZXMgYWJvdXQgdHJhbnNmZXIgbWV0aG9kczoKLSoJVGhlIGFzeW5jIHdyaXRlIGNhbGxzIGZhaWwuICBJIHByb2JhYmx5IG5lZWQgdG8gaW1wbGVtZW50IHNvbWV0aGluZyBlbHNlIHRvIHN1cHBvcnQgdGhlbT8KLSogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpZmRlZiBDT05GSUdfUE0KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9oMzYwMC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2wzL2wzLmg+Ci0KLSN1bmRlZiBERUJVR19NT0RFCi0jdW5kZWYgREVCVUdfRlVOQ1RJT05fTkFNRVMKLSNpbmNsdWRlIDxzb3VuZC91ZGExMzQxLmg+Ci0KLS8qCi0gKiBGSVhNRTogSXMgdGhpcyBlbm91Z2ggYXMgYXV0b2RldGVjdGlvbiBvZiAyLjQuWC1ybWtZLWhoWiBrZXJuZWxzPwotICogV2UgdXNlIERNQSBzdHVmZiBmcm9tIDIuNC4xOC1ybWszLWhoMjQgaGVyZSB0byBiZSBhYmxlIHRvIGNvbXBpbGUgdGhpcwotICogbW9kdWxlIGZvciBGYW1pbGlhciAwLjYuMQotICovCi0KLS8qIHt7eyBUeXBlIGRlZmluaXRpb25zICovCi0KLU1PRFVMRV9BVVRIT1IoIlRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNBMTEwMC9TQTExMTEgKyBVREExMzQxVFMgZHJpdmVyIGZvciBBTFNBIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tVREExMzQxLGlQQVEgSDM2MDAgVURBMTM0MVRTfX0iKTsKLQotc3RhdGljIGNoYXIgKmlkOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCi0KLW1vZHVsZV9wYXJhbShpZCwgY2hhcnAsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgU0ExMTAwL1NBMTExMSArIFVEQTEzNDFUUyBzb3VuZGNhcmQuIik7Ci0KLXN0cnVjdCBhdWRpb19zdHJlYW0gewotCWNoYXIgKmlkOwkJLyogaWRlbnRpZmljYXRpb24gc3RyaW5nICovCi0JaW50IHN0cmVhbV9pZDsJCS8qIG51bWVyaWMgaWRlbnRpZmljYXRpb24gKi8JCi0JZG1hX2RldmljZV90IGRtYV9kZXY7CS8qIGRldmljZSBpZGVudGlmaWVyIGZvciBETUEgKi8KLSNpZmRlZiBISF9WRVJTSU9OCi0JZG1hY2hfdCBkbWFjaDsJCS8qIGRtYSBjaGFubmVsIGlkZW50aWZpY2F0aW9uICovCi0jZWxzZQotCWRtYV9yZWdzX3QgKmRtYV9yZWdzOwkvKiBwb2ludHMgdG8gb3VyIERNQSByZWdpc3RlcnMgKi8KLSNlbmRpZgotCXVuc2lnbmVkIGludCBhY3RpdmU6MTsJLyogd2UgYXJlIHVzaW5nIHRoaXMgc3RyZWFtIGZvciB0cmFuc2ZlciBub3cgKi8KLQlpbnQgcGVyaW9kOwkJLyogY3VycmVudCB0cmFuc2ZlciBwZXJpb2QgKi8KLQlpbnQgcGVyaW9kczsJCS8qIGN1cnJlbnQgY291bnQgb2YgcGVyaW9kcyByZWdpc3RlcmQgaW4gdGhlIERNQSBlbmdpbmUgKi8KLQlpbnQgdHhfc3BpbjsJCS8qIGFyZSB3ZSByZWNvZGluZyAtIGZsYWcgdXNlZCB0byBkbyBETUEgdHJhbnMuIGZvciBzeW5jICovCi0JdW5zaWduZWQgaW50IG9sZF9vZmZzZXQ7Ci0Jc3BpbmxvY2tfdCBkbWFfbG9jazsJLyogZm9yIGxvY2tpbmcgaW4gRE1BIG9wZXJhdGlvbnMgKHNlZSBkbWEtc2ExMTAwLmMgaW4gdGhlIGtlcm5lbCkgKi8KLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN0cmVhbTsKLX07Ci0KLXN0cnVjdCBzYTExeHhfdWRhMTM0MSB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBsM19jbGllbnQgKnVkYTEzNDE7Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQlsb25nIHNhbXBsZXJhdGU7Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSBzWzJdOwkvKiBwbGF5YmFjayAmIGNhcHR1cmUgKi8KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHsKLQk4MDAwLCAgMTA2NjYsIDEwOTg1LCAxNDY0NywKLQkxNjAwMCwgMjE5NzAsIDIyMDUwLCAyNDAwMCwKLQkyOTQwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgaHdfY29uc3RyYWludHNfcmF0ZXMgPSB7Ci0JLmNvdW50CT0gQVJSQVlfU0laRShyYXRlcyksCi0JLmxpc3QJPSByYXRlcywKLQkubWFzawk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCi0vKiB9fX0gKi8KLQotLyoge3t7IENsb2NrIGFuZCBzYW1wbGUgcmF0ZSBzdHVmZiAqLwotCi0vKgotICogU3RvcC1nYXAgc29sdXRpb24gdW50aWwgcmVzdCBvZiBoaC5vcmcgSEFMIHN0dWZmIGlzIG1lcmdlZC4KLSAqLwotI2RlZmluZSBHUElPX0gzNjAwX0NMS19TRVQwCQlHUElPX0dQSU8gKDEyKQotI2RlZmluZSBHUElPX0gzNjAwX0NMS19TRVQxCQlHUElPX0dQSU8gKDEzKQotCi0jaWZkZWYgQ09ORklHX1NBMTEwMF9IM1hYWAotI2RlZmluZQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oeCkJY2xyX2gzNjAwX2VncGlvKHgpCi0jZGVmaW5lIHNldF9zYTExeHhfdWRhMTM0MV9lZ3Bpbyh4KQlzZXRfaDM2MDBfZWdwaW8oeCkKLSNlbHNlCi0jZXJyb3IgVGhpcyBkcml2ZXIgY291bGQgc2VydmUgSDN4MDAgaGFuZGhlbGRzIG9ubHkhCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfc2V0X2F1ZGlvX2Nsb2NrKGxvbmcgdmFsKQotewotCXN3aXRjaCAodmFsKSB7Ci0JY2FzZSAyNDAwMDogY2FzZSAzMjAwMDogY2FzZSA0ODAwMDoJLyogMDA6IDEyLjI4OCBNSHogKi8KLQkJR1BDUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDAgfCBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgMjIwNTA6IGNhc2UgMjk0MDA6IGNhc2UgNDQxMDA6CS8qIDAxOiAxMS4yODk2IE1IeiAqLwotCQlHUFNSID0gR1BJT19IMzYwMF9DTEtfU0VUMDsKLQkJR1BDUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSA4MDAwOiBjYXNlIDEwNjY2OiBjYXNlIDE2MDAwOgkvKiAxMDogNC4wOTYgTUh6ICovCi0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQwOwotCQlHUFNSID0gR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDEwOTg1OiBjYXNlIDE0NjQ3OiBjYXNlIDIxOTcwOgkvKiAxMTogNS42MjQ1IE1IeiAqLwotCQlHUFNSID0gR1BJT19IMzYwMF9DTEtfU0VUMCB8IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSwgbG9uZyByYXRlKQotewotCWludCBjbGtfZGl2ID0gMDsKLQlpbnQgY2xrPTA7Ci0KLQkvKiBXZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aCBjbG9ja3Mgd2hlbiBmcmFtZXMgYXJlIGluIGZsaWdodCAqLwotCVNlcjRTU0NSMCAmPSB+U1NDUjBfU1NFOwotCS8qIHdhaXQgZm9yIGFueSBmcmFtZSB0byBjb21wbGV0ZSAqLwotCXVkZWxheSgxMjUpOwotCi0JLyoKLQkgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgY2xvY2sgc291cmNlczoKLQkgKiA0LjA5NiBNSHosIDUuNjI0NSBNSHosIDExLjI4OTYgTUh6LCAxMi4yODggTUh6Ci0JICogVGhvc2UgY2FuIGJlIGRpdmlkZWQgZWl0aGVyIGJ5IDI1NiwgMzg0IG9yIDUxMi4KLQkgKiBUaGlzIG1ha2VzIHVwIDEyIGNvbWJpbmF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBzYW1wbGVyYXRlcy4uLgotCSAqLwotCWlmIChyYXRlID49IDQ4MDAwKQotCQlyYXRlID0gNDgwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSA0NDEwMCkKLQkJcmF0ZSA9IDQ0MTAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMzIwMDApCi0JCXJhdGUgPSAzMjAwMDsKLQllbHNlIGlmIChyYXRlID49IDI5NDAwKQotCQlyYXRlID0gMjk0MDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyNDAwMCkKLQkJcmF0ZSA9IDI0MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjIwNTApCi0JCXJhdGUgPSAyMjA1MDsKLQllbHNlIGlmIChyYXRlID49IDIxOTcwKQotCQlyYXRlID0gMjE5NzA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxNjAwMCkKLQkJcmF0ZSA9IDE2MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMTQ2NDcpCi0JCXJhdGUgPSAxNDY0NzsKLQllbHNlIGlmIChyYXRlID49IDEwOTg1KQotCQlyYXRlID0gMTA5ODU7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxMDY2NikKLQkJcmF0ZSA9IDEwNjY2OwotCWVsc2UKLQkJcmF0ZSA9IDgwMDA7Ci0KLQkvKiBTZXQgdGhlIGV4dGVybmFsIGNsb2NrIGdlbmVyYXRvciAqLwotCQotCXNhMTF4eF91ZGExMzQxX3NldF9hdWRpb19jbG9jayhyYXRlKTsKLQotCS8qIFNlbGVjdCB0aGUgY2xvY2sgZGl2aXNvciAqLwotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgODAwMDoKLQljYXNlIDEwOTg1OgotCWNhc2UgMjIwNTA6Ci0JY2FzZSAyNDAwMDoKLQkJY2xrID0gRjUxMjsKLQkJY2xrX2RpdiA9IFNTQ1IwX1NlckNsa0RpdigxNik7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDA6Ci0JY2FzZSAyMTk3MDoKLQljYXNlIDQ0MTAwOgotCWNhc2UgNDgwMDA6Ci0JCWNsayA9IEYyNTY7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoOCk7Ci0JCWJyZWFrOwotCWNhc2UgMTA2NjY6Ci0JY2FzZSAxNDY0NzoKLQljYXNlIDI5NDAwOgotCWNhc2UgMzIwMDA6Ci0JCWNsayA9IEYzODQ7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoMTIpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBGTVQgc2V0dGluZyBzaG91bGQgYmUgbW92ZWQgYXdheSB3aGVuIG90aGVyIEZNVHMgYXJlIGFkZGVkIChGSVhNRSkgKi8KLQlsM19jb21tYW5kKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxLCBDTURfRk9STUFULCAodm9pZCAqKUxTQjE2KTsKLQkKLQlsM19jb21tYW5kKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxLCBDTURfRlMsICh2b2lkICopY2xrKTsgICAgICAgIAotCVNlcjRTU0NSMCA9IChTZXI0U1NDUjAgJiB+MHhmZjAwKSArIGNsa19kaXYgKyBTU0NSMF9TU0U7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNhbXBsZXJhdGUgPSByYXRlOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IEhXIGluaXQgYW5kIHNodXRkb3duICovCi0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogU2V0dXAgRE1BIHN0dWZmICovCi0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uaWQgPSAiVURBMTM0MSBvdXQiOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN0cmVhbV9pZCA9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hX2RldiA9IERNQV9TZXI0U1NQV3I7Ci0KLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmlkID0gIlVEQTEzNDEgaW4iOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3RyZWFtX2lkID0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hX2RldiA9IERNQV9TZXI0U1NQUmQ7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBVREExMzQxIGludGVybmFsIHN0YXRlICovCi0gICAgICAgCi0JLyogU2V0dXAgdGhlIHVhcnRzICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCUdBRlIgfD0gKEdQSU9fU1NQX0NMSyk7Ci0JR1BEUiAmPSB+KEdQSU9fU1NQX0NMSyk7Ci0JU2VyNFNTQ1IwID0gMDsKLQlTZXI0U1NDUjAgPSBTU0NSMF9EYXRhU2l6ZSgxNikgKyBTU0NSMF9USSArIFNTQ1IwX1NlckNsa0Rpdig4KTsKLQlTZXI0U1NDUjEgPSBTU0NSMV9TQ2xrSWFjdEwgKyBTU0NSMV9TQ2xrMVAgKyBTU0NSMV9FeHRDbGs7Ci0JU2VyNFNTQ1IwIHw9IFNTQ1IwX1NTRTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKiBFbmFibGUgdGhlIGF1ZGlvIHBvd2VyICovCi0KLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0FVRElPX09OKTsKLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci0gCi0JLyogV2FpdCBmb3IgdGhlIFVEQTEzNDEgdG8gd2FrZSB1cCAqLwotCW1kZWxheSgxKTsgLy9GSVhNRSAtIHdhcyByZW1vdmVkIGJ5IFBlcmV4IC0gV2h5PwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVURBMTM0MSBpbnRlcm5hbCBzdGF0ZSAqLwotCWwzX29wZW4oc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEpOwotCQotCS8qIGV4dGVybmFsIGNsb2NrIGNvbmZpZ3VyYXRpb24gKGFmdGVyIGwzX29wZW4gLSByZWdzIG11c3QgYmUgaW5pdGlhbGl6ZWQgKi8KLQlzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShzYTExeHhfdWRhMTM0MSwgc2ExMXh4X3VkYTEzNDEtPnNhbXBsZXJhdGUpOwotCi0JLyogV2FpdCBmb3IgdGhlIFVEQTEzNDEgdG8gd2FrZSB1cCAqLwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0NPREVDX05SRVNFVCk7Ci0JbWRlbGF5KDEpOwkKLQotCS8qIG1ha2UgdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIHVuc3dhcHBlZCAoZmxpcCB0aGUgV1MgbGF0Y2gpICovCi0JU2VyNFNTRFIgPSAwOwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotfQotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9hdWRpb19zaHV0ZG93bihzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxKQotewotCS8qIG11dGUgb24gKi8KLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci0JCi0JLyogZGlzYWJsZSB0aGUgYXVkaW8gcG93ZXIgYW5kIGFsbCBzaWduYWxzIGxlYWRpbmcgdG8gdGhlIGF1ZGlvIGNoaXAgKi8KLQlsM19jbG9zZShzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSk7Ci0JU2VyNFNTQ1IwID0gMDsKLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCi0JLyogcG93ZXIgb2ZmIGFuZCBtdXRlIG9mZiAqLwotCS8qIEZJWE1FIC0gaXMgbXV0aW5nIG9mZiBuZWNlc2FyeT8/PyAqLwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQVVESU9fT04pOwotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBETUEgc3RhZmYgKi8KLQotLyoKLSAqIHRoZXNlIGFyZSB0aGUgYWRkcmVzcyBhbmQgc2l6ZXMgdXNlZCB0byBmaWxsIHRoZSB4bWl0IGJ1ZmZlcgotICogc28gd2UgY2FuIGdldCBhIGNsb2NrIGluIHJlY29yZCBvbmx5IG1vZGUKLSAqLwotI2RlZmluZSBGT1JDRV9DTE9DS19BRERSCQkoZG1hX2FkZHJfdClGTFVTSF9CQVNFX1BIWVMKLSNkZWZpbmUgRk9SQ0VfQ0xPQ0tfU0laRQkJNDA5NiAvLyB3YXMgMjA0OAotCi0vLyBGSVhNRSBXaHkgdGhpcyB2YWx1ZSBleGFjdGx5IC0gd3JvdGUgY29tbWVudAotI2RlZmluZSBETUFfQlVGX1NJWkUJODE3NgkvKiA8PSBNQVhfRE1BX1NJWkUgZnJvbSBhc20vYXJjaC1zYTExMDAvZG1hLmggKi8KLQotI2lmZGVmIEhIX1ZFUlNJT04KLQotc3RhdGljIGludCBhdWRpb19kbWFfcmVxdWVzdChzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKiwgaW50KSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2ExMTAwX3JlcXVlc3RfZG1hKCZzLT5kbWFjaCwgcy0+aWQsIHMtPmRtYV9kZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgYXVkaW8gZG1hIDB4JXhcbiIsIHMtPmRtYV9kZXYpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlzYTExMDBfZG1hX3NldF9jYWxsYmFjayhzLT5kbWFjaCwgY2FsbGJhY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXVkaW9fZG1hX2ZyZWUoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzYTExMDBfZnJlZV9kbWEocy0+ZG1hY2gpOwotCXMtPmRtYWNoID0gLTE7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbnQgYXVkaW9fZG1hX3JlcXVlc3Qoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBzYTExMDBfcmVxdWVzdF9kbWEocy0+ZG1hX2Rldiwgcy0+aWQsIGNhbGxiYWNrLCBzLCAmcy0+ZG1hX3JlZ3MpOwotCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIGF1ZGlvIGRtYSAweCV4XG4iLCBzLT5kbWFfZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfZnJlZShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXNhMTEwMF9mcmVlX2RtYShzLT5kbWFfcmVncyk7Ci0Jcy0+ZG1hX3JlZ3MgPSAwOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHVfaW50IGF1ZGlvX2dldF9kbWFfcG9zKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzLT5zdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JZG1hX2FkZHJfdCBhZGRyOwotCQotCS8vIHRoaXMgbXVzdCBiZSBjYWxsZWQgdy8gaW50ZXJydXB0cyBsb2NrZWQgb3V0IHNlZSBkbWEtc2ExMTAwLmMgaW4gdGhlIGtlcm5lbAotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotI2lmZGVmIEhIX1ZFUlNJT04JCi0Jc2ExMTAwX2RtYV9nZXRfY3VycmVudChzLT5kbWFjaCwgTlVMTCwgJmFkZHIpOwotI2Vsc2UKLQlhZGRyID0gc2ExMTAwX2dldF9kbWFfcG9zKChzKS0+ZG1hX3JlZ3MpOwotI2VuZGlmCi0Jb2Zmc2V0ID0gYWRkciAtIHJ1bnRpbWUtPmRtYV9hZGRyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci0JCi0Jb2Zmc2V0ID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsb2Zmc2V0KTsKLQlpZiAob2Zmc2V0ID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQlvZmZzZXQgPSAwOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotLyoKLSAqIHRoaXMgc3RvcHMgdGhlIGRtYSBhbmQgY2xlYXJzIHRoZSBkbWEgcHRycwotICovCi1zdGF0aWMgdm9pZCBhdWRpb19zdG9wX2RtYShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsJCi0Jcy0+YWN0aXZlID0gMDsKLQlzLT5wZXJpb2QgPSAwOwotCS8qIHRoaXMgc3RvcHMgdGhlIGRtYSBjaGFubmVsIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlciBwdHJzICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0Jc2ExMTAwX2NsZWFyX2RtYShzLT5kbWFfcmVncyk7CQotI2VuZGlmCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgYXVkaW9fcHJvY2Vzc19kbWEoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHMtPnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsJCQotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JaW50IHJldDsKLSAgICAgICAgICAgICAgICAKLQkvKiB3ZSBhcmUgcmVxdWVzdGVkIHRvIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uIERNQSB0cmFuc2ZlciAqLwotCWlmIChzLT50eF9zcGluKSB7Ci0JCWlmIChzbmRfQlVHX09OKHMtPnN0cmVhbV9pZCAhPSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSkKLQkJCXJldHVybjsKLQkJLyogZmlsbCB0aGUgeG1pdCBkbWEgYnVmZmVycyBhbmQgcmV0dXJuICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCQlzYTExMDBfZG1hX3NldF9zcGluKHMtPmRtYWNoLCBGT1JDRV9DTE9DS19BRERSLCBGT1JDRV9DTE9DS19TSVpFKTsKLSNlbHNlCi0JCXdoaWxlICgxKSB7Ci0JCQlyZXQgPSBzYTExMDBfc3RhcnRfZG1hKHMtPmRtYV9yZWdzLCBGT1JDRV9DTE9DS19BRERSLCBGT1JDRV9DTE9DS19TSVpFKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuOyAgIAotCQl9Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCS8qIG11c3QgYmUgc2V0IGhlcmUgLSBvbmx5IHZhbGlkIGZvciBydW5uaW5nIHN0cmVhbXMsIG5vdCBmb3IgZm9yY2VkX2Nsb2NrIGRtYSBmaWxscyAgKi8KLQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXdoaWxlIChzLT5hY3RpdmUgJiYgcy0+cGVyaW9kcyA8IHJ1bnRpbWUtPnBlcmlvZHMpIHsKLQkJZG1hX3NpemUgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOwotCQlpZiAocy0+b2xkX29mZnNldCkgewotCQkJLyogYSBsaXR0bGUgdHJpY2ssIHdlIG5lZWQgcmVzdW1lIGZyb20gb2xkIHBvc2l0aW9uICovCi0JCQlvZmZzZXQgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcy0+b2xkX29mZnNldCAtIDEpOwotCQkJcy0+b2xkX29mZnNldCA9IDA7Ci0JCQlzLT5wZXJpb2RzID0gMDsKLQkJCXMtPnBlcmlvZCA9IG9mZnNldCAvIGRtYV9zaXplOwotCQkJb2Zmc2V0ICU9IGRtYV9zaXplOwotCQkJZG1hX3NpemUgPSBkbWFfc2l6ZSAtIG9mZnNldDsKLQkJCWlmICghZG1hX3NpemUpCi0JCQkJY29udGludWU7CQkvKiBzcGVjaWFsIGNhc2UgKi8KLQkJfSBlbHNlIHsKLQkJCW9mZnNldCA9IGRtYV9zaXplICogcy0+cGVyaW9kOwotCQkJc25kX0JVR19PTihkbWFfc2l6ZSA+IERNQV9CVUZfU0laRSk7Ci0JCX0KLSNpZmRlZiBISF9WRVJTSU9OCi0JCXJldCA9IHNhMTEwMF9kbWFfcXVldWVfYnVmZmVyKHMtPmRtYWNoLCBzLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgZG1hX3NpemUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuOyAvL0ZJWE1FCi0jZWxzZQotCQlyZXQgPSBzYTExMDBfc3RhcnRfZG1hKChzKS0+ZG1hX3JlZ3MsIHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0LCBkbWFfc2l6ZSk7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYXVkaW9fcHJvY2Vzc19kbWE6IGNhbm5vdCBxdWV1ZSBETUEgYnVmZmVyICglaSlcbiIsIHJldCk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCi0JCXMtPnBlcmlvZCsrOwotCQlzLT5wZXJpb2QgJT0gcnVudGltZS0+cGVyaW9kczsKLQkJcy0+cGVyaW9kcysrOwotCX0KLX0KLQotI2lmZGVmIEhIX1ZFUlNJT04KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9jYWxsYmFjayh2b2lkICpkYXRhLCBpbnQgc2l6ZSkKLSNlbHNlCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfY2FsbGJhY2sodm9pZCAqZGF0YSkKLSNlbmRpZgotewotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMgPSBkYXRhOwotICAgICAgICAKLQkvKiAKLQkgKiBJZiB3ZSBhcmUgZ2V0dGluZyBhIGNhbGxiYWNrIGZvciBhbiBhY3RpdmUgc3RyZWFtIHRoZW4gd2UgaW5mb3JtCi0JICogdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2UndmUgZmluaXNoZWQgYSBwZXJpb2QKLQkgKi8KLSAJaWYgKHMtPmFjdGl2ZSkKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzLT5zdHJlYW0pOwotCi0Jc3Bpbl9sb2NrKCZzLT5kbWFfbG9jayk7Ci0JaWYgKCFzLT50eF9zcGluICYmIHMtPnBlcmlvZHMgPiAwKQotCQlzLT5wZXJpb2RzLS07Ci0JYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0Jc3Bpbl91bmxvY2soJnMtPmRtYV9sb2NrKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBQQ00gc2V0dGluZyAqLwotCi0vKiB7e3sgdHJpZ2dlciAmIHRpbWVyICovCi0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCWludCBzdHJlYW1faWQgPSBzdWJzdHJlYW0tPnBzdHItPnN0cmVhbTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gJmNoaXAtPnNbc3RyZWFtX2lkXTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzMSA9ICZjaGlwLT5zW3N0cmVhbV9pZCBeIDFdOwotCWludCBlcnIgPSAwOwotCi0JLyogbm90ZSBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGRpc2FibGVkIGluIHRoZSBtaWRsZXZlbCBjb2RlICovCi0Jc3Bpbl9sb2NrKCZzLT5kbWFfbG9jayk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQkvKiBub3cgd2UgbmVlZCB0byBtYWtlIHN1cmUgYSByZWNvcmQgb25seSBzdHJlYW0gaGFzIGEgY2xvY2sgKi8KLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgIXMxLT5hY3RpdmUpIHsKLQkJCS8qIHdlIG5lZWQgdG8gZm9yY2UgZmlsbCB0aGUgeG1pdCBETUEgd2l0aCB6ZXJvcyAqLwotCQkJczEtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEoczEpOwotCQl9Ci0JCS8qIHRoaXMgY2FzZSBpcyB3aGVuIHlvdSB3ZXJlIHJlY29yZGluZyB0aGVuIHlvdSB0dXJuIG9uIGEKLQkJICogcGxheWJhY2sgc3RyZWFtIHNvIHdlIHN0b3AgKGFsc28gY2xlYXJzIGl0KSB0aGUgZG1hIGZpcnN0LAotCQkgKiBjbGVhciB0aGUgc3luYyBmbGFnIGFuZCB0aGVuIHdlIGxldCBpdCB0dXJuZWQgb24KLQkJICovCQkKLQkJZWxzZSB7Ci0gCQkJcy0+dHhfc3BpbiA9IDA7Ci0gCQl9Ci0KLQkJLyogcmVxdWVzdGVkIHN0cmVhbSBzdGFydHVwICovCi0JCXMtPmFjdGl2ZSA9IDE7Ci0JCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc2h1dGRvd24gKi8KLQkJYXVkaW9fc3RvcF9kbWEocyk7Ci0JCQotCQkvKgotCQkgKiBub3cgd2UgbmVlZCB0byBtYWtlIHN1cmUgYSByZWNvcmQgb25seSBzdHJlYW0gaGFzIGEgY2xvY2sKLQkJICogc28gaWYgd2UncmUgc3RvcHBpbmcgYSBwbGF5YmFjayB3aXRoIGFuIGFjdGl2ZSBjYXB0dXJlCi0JCSAqIHdlIG5lZWQgdG8gdHVybiB0aGUgMCBmaWxsIGRtYSBvbiBmb3IgdGhlIHhtaXQgc2lkZQotCQkgKi8KLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmIHMxLT5hY3RpdmUpIHsKLQkJCS8qIHdlIG5lZWQgdG8gZm9yY2UgZmlsbCB0aGUgeG1pdCBETUEgd2l0aCB6ZXJvcyAqLwotCQkJcy0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJfQotCQkvKgotCQkgKiB3ZSBraWxsZWQgYSBjYXB0dXJlIG9ubHkgc3RyZWFtLCBzbyB3ZSBzaG91bGQgYWxzbyBraWxsCi0JCSAqIHRoZSB6ZXJvIGZpbGwgdHJhbnNtaXQKLQkJICovCi0JCWVsc2UgewotCQkJaWYgKHMxLT50eF9zcGluKSB7Ci0JCQkJczEtPnR4X3NwaW4gPSAwOwotCQkJCWF1ZGlvX3N0b3BfZG1hKHMxKTsKLQkJCX0KLQkJfQotCQkKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCQlzLT5hY3RpdmUgPSAwOwotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3N0b3Aocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCi0JCXMtPm9sZF9vZmZzZXQgPSBhdWRpb19nZXRfZG1hX3BvcyhzKSArIDE7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQotCQlzLT5wZXJpb2RzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JCXMtPmFjdGl2ZSA9IDE7Ci0JCXMtPnR4X3NwaW4gPSAwOwotCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgIXMxLT5hY3RpdmUpIHsKLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfc3RvcChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCi0JCXMtPmFjdGl2ZSA9IDA7Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJaWYgKHMxLT5hY3RpdmUpIHsKLQkJCQlzLT50eF9zcGluID0gMTsKLQkJCQlzLT5vbGRfb2Zmc2V0ID0gYXVkaW9fZ2V0X2RtYV9wb3MocykgKyAxOwotI2lmZGVmIEhIX1ZFUlNJT04JCQkJCi0JCQkJc2ExMTAwX2RtYV9mbHVzaF9hbGwocy0+ZG1hY2gpOwotI2Vsc2UKLQkJCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkJCQotCQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHMxLT50eF9zcGluKSB7Ci0JCQkJczEtPnR4X3NwaW4gPSAwOwotI2lmZGVmIEhIX1ZFUlNJT04JCQkJCi0JCQkJc2ExMTAwX2RtYV9mbHVzaF9hbGwoczEtPmRtYWNoKTsKLSNlbHNlCi0JCQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCQkKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCXMtPmFjdGl2ZSA9IDE7Ci0JCWlmIChzLT5vbGRfb2Zmc2V0KSB7Ci0JCQlzLT50eF9zcGluID0gMDsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgIXMxLT5hY3RpdmUpIHsKLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3Jlc3VtZShzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmcy0+ZG1hX2xvY2spOwkKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMgPSAmY2hpcC0+c1tzdWJzdHJlYW0tPnBzdHItPnN0cmVhbV07Ci0gICAgICAgIAotCS8qIHNldCByZXF1ZXN0ZWQgc2FtcGxlcmF0ZSAqLwotCXNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOwotCi0JLyogc2V0IHJlcXVlc3RkIGZvcm1hdCB3aGVuIGF2YWlsYWJsZSAqLwotCS8qIHNldCBGTVQgaGVyZSAhISEgRklYTUUgKi8KLQotCXMtPnBlcmlvZCA9IDA7Ci0Jcy0+cGVyaW9kcyA9IDA7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXJldHVybiBhdWRpb19nZXRfZG1hX3BvcygmY2hpcC0+c1tzdWJzdHJlYW0tPnBzdHItPnN0cmVhbV0pOwotfQotCi0vKiB9fX0gKi8KLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlID0KLXsKLQkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1FKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFX0tOT1QpLAotCS5yYXRlX21pbgkJPSA4MDAwLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkuY2hhbm5lbHNfbWluCQk9IDIsCi0JLmNoYW5uZWxzX21heAkJPSAyLAotCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQqMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gRE1BX0JVRl9TSVpFLAotCS5wZXJpb2RzX21pbgkJPSAyLAotCS5wZXJpb2RzX21heAkJPSAyNTUsCi0JLmZpZm9fc2l6ZQkJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFjayA9Ci17Ci0JLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSksCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfS05PVCksCi0JLnJhdGVfbWluCQk9IDgwMDAsCi0JLnJhdGVfbWF4CQk9IDQ4MDAwLAotCS5jaGFubmVsc19taW4JCT0gMiwKLQkuY2hhbm5lbHNfbWF4CQk9IDIsCi0JLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCoxMDI0LAotCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCi0JLnBlcmlvZF9ieXRlc19tYXgJPSBETUFfQlVGX1NJWkUsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdGF0aWMgaW50IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JaW50IHN0cmVhbV9pZCA9IHN1YnN0cmVhbS0+cHN0ci0+c3RyZWFtOwotCWludCBlcnI7Ci0KLQljaGlwLT5zW3N0cmVhbV9pZF0uc3RyZWFtID0gc3Vic3RyZWFtOwotCi0JaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlydW50aW1lLT5odyA9IHNuZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFjazsKLQllbHNlCi0JCXJ1bnRpbWUtPmh3ID0gc25kX3NhMTF4eF91ZGExMzQxX2NhcHR1cmU7Ci0JaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmaHdfY29uc3RyYWludHNfcmF0ZXMpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQotCWNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dLnN0cmVhbSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHt7eyBIVyBwYXJhbXMgJiBmcmVlICovCi0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0gICAgICAgIAotCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwotfQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Ci19Ci0KLS8qIH19fSAqLwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrX29wcyA9IHsKLQkub3BlbgkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbiwKLQkuY2xvc2UJCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlLAotCS5pb2N0bAkJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcywKLQkuaHdfZnJlZQkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUsCi0JLnByZXBhcmUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUsCi0JLnRyaWdnZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIsCi0JLnBvaW50ZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2NhcHR1cmVfb3BzID0gewotCS5vcGVuCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuLAotCS5jbG9zZQkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2xvc2UsCi0JLmlvY3RsCQkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfcGFyYW1zLAotCS5od19mcmVlCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZSwKLQkucHJlcGFyZQkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZSwKLQkudHJpZ2dlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfdHJpZ2dlciwKLQkucG9pbnRlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcG9pbnRlciwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BjbShzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxLCBpbnQgZGV2aWNlKQotewotCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JaW50IGVycjsKLQotCWlmICgoZXJyID0gc25kX3BjbV9uZXcoc2ExMXh4X3VkYTEzNDEtPmNhcmQsICJVREExMzQxIFBDTSIsIGRldmljZSwgMSwgMSwgJnBjbSkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qCi0JICogdGhpcyBzZXRzIHVwIG91ciBpbml0aWFsIGJ1ZmZlcnMgYW5kIHNldHMgdGhlIGRtYV90eXBlIHRvIGlzYS4KLQkgKiBpc2Egd29ya3MgYnV0IEknbSBub3Qgc3VyZSB3aHkgKG9yIGlmKSBpdCdzIHRoZSByaWdodCBjaG9pY2UKLQkgKiB0aGlzIG1heSBiZSB0b28gbGFyZ2UsIHRyeWluZyBpdCBmb3Igbm93Ci0JICovCi0Jc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwgCi0JCQkJCSAgICAgIHNuZF9kbWFfaXNhX2RhdGEoKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7Ci0KLQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2tfb3BzKTsKLQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlX29wcyk7Ci0JcGNtLT5wcml2YXRlX2RhdGEgPSBzYTExeHhfdWRhMTM0MTsKLQlwY20tPmluZm9fZmxhZ3MgPSAwOwotCXN0cmNweShwY20tPm5hbWUsICJVREExMzQxIFBDTSIpOwotCi0Jc2ExMXh4X3VkYTEzNDFfYXVkaW9faW5pdChzYTExeHhfdWRhMTM0MSk7Ci0KLQkvKiBzZXR1cCBETUEgY29udHJvbGxlciAqLwotCWF1ZGlvX2RtYV9yZXF1ZXN0KCZzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSwgYXVkaW9fZG1hX2NhbGxiYWNrKTsKLQlhdWRpb19kbWFfcmVxdWVzdCgmc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSwgYXVkaW9fZG1hX2NhbGxiYWNrKTsKLQotCXNhMTF4eF91ZGExMzQxLT5wY20gPSBwY207Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBtb2R1bGUgaW5pdCAmIGV4aXQgKi8KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0ciwKLQkJCQkgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKTsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0Jc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwotI2lmZGVmIEhIX1ZFUlNJT04KLQlzYTExMDBfZG1hX3NsZWVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hY2gpOwotCXNhMTEwMF9kbWFfc2xlZXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYWNoKTsKLSNlbHNlCi0JLy9GSVhNRQotI2VuZGlmCi0JbDNfY29tbWFuZChjaGlwLT51ZGExMzQxLCBDTURfU1VTUEVORCwgTlVMTCk7Ci0Jc2ExMXh4X3VkYTEzNDFfYXVkaW9fc2h1dGRvd24oY2hpcCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoY2hpcCk7Ci0JbDNfY29tbWFuZChjaGlwLT51ZGExMzQxLCBDTURfUkVTVU1FLCBOVUxMKTsKLSNpZmRlZiBISF9WRVJTSU9OCQotCXNhMTEwMF9kbWFfd2FrZXVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hY2gpOwotCXNhMTEwMF9kbWFfd2FrZXVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFjaCk7Ci0jZWxzZQotCS8vRklYTUUKLSNlbmRpZgotCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT01GSUdfUE0gKi8KLQotdm9pZCBzbmRfc2ExMXh4X3VkYTEzNDFfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0JYXVkaW9fZG1hX2ZyZWUoJmNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10pOwotCWF1ZGlvX2RtYV9mcmVlKCZjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0pOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzYTExeHhfdWRhMTM0MV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwOwotCi0JLyogcmVnaXN0ZXIgdGhlIHNvdW5kY2FyZCAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoLTEsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzYTExeHhfdWRhMTM0MSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+c1swXS5kbWFfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnNbMV0uZG1hX2xvY2spOwotCi0JY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NhMTF4eF91ZGExMzQxX2ZyZWU7Ci0JY2hpcC0+Y2FyZCA9IGNhcmQ7Ci0JY2hpcC0+c2FtcGxlcmF0ZSA9IEFVRElPX1JBVEVfREVGQVVMVDsKLQotCS8vIG1peGVyCi0JaWYgKChlcnIgPSBzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyhjYXJkLCAmY2hpcC0+dWRhMTM0MSkpKQotCQlnb3RvIG5vZGV2OwotCi0JLy8gUENNCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wY20oY2hpcCwgMCkpIDwgMCkKLQkJZ290byBub2RldjsKLSAgICAgICAgCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIlVEQTEzNDEiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSDM2MDAgVURBMTM0MVRTIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkNvbXBhcSBpUEFRIEgzNjAwIHdpdGggUGhpbGlwcyBVREExMzQxVFMiKTsKLSAgICAgICAgCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOwotCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPT0gMCkgewotCQlwcmludGsoIEtFUk5fSU5GTyAiaVBBUSBhdWRpbyBzdXBwb3J0IGluaXRpYWxpemVkXG4iICk7Ci0JCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7Ci0JCXJldHVybiAwOwotCX0KLSAgICAgICAgCi0gbm9kZXY6Ci0Jc25kX2NhcmRfZnJlZShjYXJkKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzYTExeHhfdWRhMTM0MV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBTQTExWFhfVURBMTM0MV9EUklWRVIJInNhMTF4eF91ZGExMzQxIgotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExeHhfdWRhMTM0MV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHNhMTF4eF91ZGExMzQxX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2ExMXh4X3VkYTEzNDFfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9zYTExeHhfdWRhMTM0MV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3Jlc3VtZSwKLSNlbmRpZgotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IFNBMTFYWF9VREExMzQxX0RSSVZFUiwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2ExMXh4X3VkYTEzNDFfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQlpZiAoIW1hY2hpbmVfaXNfaDN4eHgoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcikpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNBMTFYWF9VREExMzQxX0RSSVZFUiwgLTEsIE5VTEwsIDApOwotCWlmICghSVNfRVJSKGRldmljZSkpIHsKLQkJaWYgKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpCi0JCQlyZXR1cm4gMDsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJZXJyID0gLUVOT0RFVjsKLQl9IGVsc2UKLQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeHhfdWRhMTM0MV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoc2ExMXh4X3VkYTEzNDFfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYTExeHhfdWRhMTM0MV9leGl0KTsKLQotLyogfX19ICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL0tjb25maWcgYi9zb3VuZC9hdG1lbC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjI4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKK21lbnUgIkF0bWVsIGRldmljZXMgKEFWUjMyIGFuZCBBVDkxKSIKKwlkZXBlbmRzIG9uIEFWUjMyIHx8IEFSQ0hfQVQ5MQorCitjb25maWcgU05EX0FUTUVMX0FCREFDCisJdHJpc3RhdGUgIkF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKSBkcml2ZXIiCisJc2VsZWN0IFNORF9QQ00KKwlkZXBlbmRzIG9uIERXX0RNQUMgJiYgQVZSMzIKKwloZWxwCisJICBBTFNBIHNvdW5kIGRyaXZlciBmb3IgdGhlIEF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKS4KKworY29uZmlnIFNORF9BVE1FTF9BQzk3QworCXRyaXN0YXRlICJBdG1lbCBBQzk3IENvbnRyb2xsZXIgKEFDOTdDKSBkcml2ZXIiCisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0FDOTdfQ09ERUMKKwlkZXBlbmRzIG9uIERXX0RNQUMgJiYgQVZSMzIKKwloZWxwCisJICBBTFNBIHNvdW5kIGRyaXZlciBmb3IgdGhlIEF0bWVsIEFDOTcgY29udHJvbGxlci4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvTWFrZWZpbGUgYi9zb3VuZC9hdG1lbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTlkY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitzbmQtYXRtZWwtYWJkYWMtb2JqcwkJOj0gYWJkYWMubworc25kLWF0bWVsLWFjOTdjLW9ianMJCTo9IGFjOTdjLm8KKworb2JqLSQoQ09ORklHX1NORF9BVE1FTF9BQkRBQykJKz0gc25kLWF0bWVsLWFiZGFjLm8KK29iai0kKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpCSs9IHNuZC1hdG1lbC1hYzk3Yy5vCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYmRhYy5jIGIvc291bmQvYXRtZWwvYWJkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGIzYzdmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvYWJkYWMuYwpAQCAtMCwwICsxLDYwMiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIG9uLWNoaXAgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYmRhYy5oPgorCisvKiBEQUMgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBEQUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgREFDX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBEQUNfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIERBQ19JTlRfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgREFDX0lOVF9DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBEQUNfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFjCisKKy8qIEJpdGZpZWxkcyBpbiBDVFJMICovCisjZGVmaW5lIERBQ19TV0FQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBEQUNfU1dBUF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBEQUNfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgREFDX0VOX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogQml0ZmllbGRzIGluIElOVF9NQVNLL0lOVF9FTi9JTlRfRElTL0lOVF9TVEFUVVMvSU5UX0NMUiAqLworI2RlZmluZSBEQUNfVU5ERVJSVU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgREFDX1VOREVSUlVOX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREFDX1RYX1JFQURZX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIERBQ19UWF9SRUFEWV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJpdCBtYW5pcHVsYXRpb24gbWFjcm9zICovCisjZGVmaW5lIERBQ19CSVQobmFtZSkJCQkJCVwKKwkoMSA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKQorI2RlZmluZSBEQUNfQkYobmFtZSwgdmFsdWUpCQkJCVwKKwkoKCh2YWx1ZSkgJiAoKDEgPDwgREFDXyMjbmFtZSMjX1NJWkUpIC0gMSkpCVwKKwkgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkKKyNkZWZpbmUgREFDX0JGRVhUKG5hbWUsIHZhbHVlKQkJCQlcCisJKCgodmFsdWUpID4+IERBQ18jI25hbWUjI19PRkZTRVQpCQlcCisJICYgKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpKQorI2RlZmluZSBEQUNfQkZJTlMobmFtZSwgdmFsdWUsIG9sZCkJCQlcCisJKCgob2xkKSAmIH4oKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpCVwKKwkJICAgIDw8IERBQ18jI25hbWUjI19PRkZTRVQpKQkJXAorCSB8IERBQ19CRihuYW1lLCB2YWx1ZSkpCisKKy8qIFJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KKyNkZWZpbmUgZGFjX3JlYWRsKHBvcnQsIHJlZykJCQkJXAorCV9fcmF3X3JlYWRsKChwb3J0KS0+cmVncyArIERBQ18jI3JlZykKKyNkZWZpbmUgZGFjX3dyaXRlbChwb3J0LCByZWcsIHZhbHVlKQkJCVwKKwlfX3Jhd193cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgREFDXyMjcmVnKQorCisvKgorICogQUJEQUMgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDYgZGlmZmVyZW50IHJhdGVzIGZyb20gYSBnZW5lcmljIGNsb2NrLiBUaGUKKyAqIGdlbmVyaWMgY2xvY2sgaGFzIGEgcG93ZXIgb2YgdHdvIGRpdmlkZXIsIHdoaWNoIGdpdmVzIDYgc3RlcHMgZnJvbSAxOTIga0h6CisgKiB0byA1MTEyIEh6LgorICovCisjZGVmaW5lIE1BWF9OVU1fUkFURVMJNgorLyogQUxTQSBzZWVtcyB0byB1c2UgcmF0ZXMgYmV0d2VlbiAxOTIwMDAgSHogYW5kIDUxMTIgSHouICovCisjZGVmaW5lIFJBVEVfTUFYCTE5MjAwMAorI2RlZmluZSBSQVRFX01JTgk1MTEyCisKK2VudW0geworCURNQV9SRUFEWSA9IDAsCit9OworCitzdHJ1Y3QgYXRtZWxfYWJkYWNfZG1hIHsKKwlzdHJ1Y3QgZG1hX2NoYW4JCSpjaGFuOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkqY2Rlc2M7Cit9OworCitzdHJ1Y3QgYXRtZWxfYWJkYWMgeworCXN0cnVjdCBjbGsJCQkJKnBjbGs7CisJc3RydWN0IGNsawkJCQkqc2FtcGxlX2NsazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkJKnBkZXY7CisJc3RydWN0IGF0bWVsX2FiZGFjX2RtYQkJCWRtYTsKKworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdAljb25zdHJhaW50c19yYXRlczsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JCSpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9jYXJkCQkJCSpjYXJkOworCXN0cnVjdCBzbmRfcGNtCQkJCSpwY207CisKKwl2b2lkIF9faW9tZW0JCQkJKnJlZ3M7CisJdW5zaWduZWQgbG9uZwkJCQlmbGFnczsKKwl1bnNpZ25lZCBpbnQJCQkJcmF0ZXNbTUFYX05VTV9SQVRFU107CisJdW5zaWduZWQgaW50CQkJCXJhdGVzX251bTsKKwlpbnQJCQkJCWlycTsKK307CisKKyNkZWZpbmUgZ2V0X2RhYyhjYXJkKSAoKHN0cnVjdCBhdG1lbF9hYmRhYyAqKShjYXJkKS0+cHJpdmF0ZV9kYXRhKQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgRE1BIGRyaXZlci4gKi8KK3N0YXRpYyB2b2lkIGF0bWVsX2FiZGFjX2RtYV9wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChkYWMtPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcHJlcGFyZV9kbWEoc3RydWN0IGF0bWVsX2FiZGFjICpkYWMsCisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW4gPSBkYWMtPmRtYS5jaGFuOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkJKmNkZXNjOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcJCQlidWZmZXJfbGVuLCBwZXJpb2RfbGVuOworCisJLyoKKwkgKiBXZSBkb24ndCBkbyBETUEgb24gImNvbXBsZXgiIHRyYW5zZmVycywgaS5lLiB3aXRoCisJICogbm9uLWhhbGZ3b3JkLWFsaWduZWQgYnVmZmVycyBvciBsZW5ndGhzLgorCSAqLworCWlmIChydW50aW1lLT5kbWFfYWRkciAmIDEgfHwgcnVudGltZS0+YnVmZmVyX3NpemUgJiAxKSB7CisJCWRldl9kYmcoJmRhYy0+cGRldi0+ZGV2LCAidG9vIGNvbXBsZXggdHJhbnNmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidWZmZXJfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKKwlwZXJpb2RfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKworCWNkZXNjID0gZHdfZG1hX2N5Y2xpY19wcmVwKGNoYW4sIHJ1bnRpbWUtPmRtYV9hZGRyLCBidWZmZXJfbGVuLAorCQkJcGVyaW9kX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKElTX0VSUihjZGVzYykpIHsKKwkJZGV2X2RiZygmZGFjLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgcHJlcGFyZSBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2Rlc2MpOworCX0KKworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2sgPSBhdG1lbF9hYmRhY19kbWFfcGVyaW9kX2RvbmU7CisJY2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbSA9IGRhYzsKKworCWRhYy0+ZG1hLmNkZXNjID0gY2Rlc2M7CisKKwlzZXRfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhdG1lbF9hYmRhY19odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUgorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUEFVU0UpLAorCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9CRSksCisJLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfS05PVCksCisJLnJhdGVfbWluCQk9IFJBVEVfTUlOLAorCS5yYXRlX21heAkJPSBSQVRFX01BWCwKKwkuY2hhbm5lbHNfbWluCQk9IDIsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heAk9IDQwOTYsCisJLnBlcmlvZHNfbWluCQk9IDQsCisJLnBlcmlvZHNfbWF4CQk9IDY0LAorfTsKKworc3RhdGljIGludCBhdG1lbF9hYmRhY19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZGFjLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJYXRtZWxfYWJkYWNfaHcucmF0ZV9tYXggPSBkYWMtPnJhdGVzW2RhYy0+cmF0ZXNfbnVtIC0gMV07CisJYXRtZWxfYWJkYWNfaHcucmF0ZV9taW4gPSBkYWMtPnJhdGVzWzBdOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcgPSBhdG1lbF9hYmRhY19odzsKKworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmRhYy0+Y29uc3RyYWludHNfcmF0ZXMpOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWRhYy0+c3Vic3RyZWFtID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShkYWMtPmRtYS5jaGFuKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoZGFjLT5kbWEuY2hhbik7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjbGtfc2V0X3JhdGUoZGFjLT5zYW1wbGVfY2xrLCAyNTYgKiBzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoIXRlc3RfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYmRhY19wcmVwYXJlX2RtYShkYWMsIHN1YnN0cmVhbSwgRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWNsa19lbmFibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChkYWMtPmRtYS5jaGFuKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCQlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgREFDX0JJVChFTikpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlkd19kbWFfY3ljbGljX3N0b3AoZGFjLT5kbWEuY2hhbik7CisJCWRhY193cml0ZWwoZGFjLCBEQVRBLCAwKTsKKwkJZGFjX3dyaXRlbChkYWMsIENUUkwsIDApOworCQljbGtfZGlzYWJsZShkYWMtPnNhbXBsZV9jbGspOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CithdG1lbF9hYmRhY19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYwkqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X3NyY19hZGRyKGRhYy0+ZG1hLmNoYW4pOworCWJ5dGVzIC09IHJ1bnRpbWUtPmRtYV9hZGRyOworCisJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKKwlpZiAoZnJhbWVzID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlmcmFtZXMgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYWJkYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGRldl9pZDsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gZGFjX3JlYWRsKGRhYywgSU5UX1NUQVRVUyk7CisJaWYgKHN0YXR1cyAmIERBQ19CSVQoVU5ERVJSVU4pKSB7CisJCWRldl9lcnIoJmRhYy0+cGRldi0+ZGV2LCAidW5kZXJydW4gZGV0ZWN0ZWRcbiIpOworCQlkYWNfd3JpdGVsKGRhYywgSU5UX0NMUiwgREFDX0JJVChVTkRFUlJVTikpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmRhYy0+cGRldi0+ZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0IChzdGF0dXM9MHgleClcbiIsCisJCQlzdGF0dXMpOworCQlkYWNfd3JpdGVsKGRhYywgSU5UX0NMUiwgc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWJkYWNfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FiZGFjX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FiZGFjX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWJkYWNfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWJkYWNfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FiZGFjX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYmRhY190cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWJkYWNfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FiZGFjX3BjbV9uZXcoc3RydWN0IGF0bWVsX2FiZGFjICpkYWMpCit7CisJc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaHcgPSBhdG1lbF9hYmRhY19odzsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX25ldyhkYWMtPmNhcmQsIGRhYy0+Y2FyZC0+c2hvcnRuYW1lLAorCQkJZGFjLT5wZGV2LT5pZCwgMSwgMCwgJnBjbSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXN0cmNweShwY20tPm5hbWUsIGRhYy0+Y2FyZC0+c2hvcnRuYW1lKTsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGRhYzsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCWRhYy0+cGNtID0gcGNtOworCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJmF0bWVsX2FiZGFjX29wcyk7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorCQkJJmRhYy0+cGRldi0+ZGV2LCBody5wZXJpb2RzX21pbiAqIGh3LnBlcmlvZF9ieXRlc19taW4sCisJCQlody5idWZmZXJfYnl0ZXNfbWF4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnNsYXZlKQoreworCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9IHNsYXZlOworCisJaWYgKGR3cy0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldikgeworCQljaGFuLT5wcml2YXRlID0gZHdzOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZXMoc3RydWN0IGF0bWVsX2FiZGFjICpkYWMpCit7CisJbG9uZyBuZXdfcmF0ZSA9IFJBVEVfTUFYOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCWludCBpbmRleCA9IDA7CisKKwkvKiB3ZSBzdGFydCBhdCAxOTIga0h6IGFuZCB3b3JrIG91ciB3YXkgZG93biB0byA1MTEyIEh6ICovCisJd2hpbGUgKG5ld19yYXRlID49IFJBVEVfTUlOICYmIGluZGV4IDwgKE1BWF9OVU1fUkFURVMgKyAxKSkgeworCQluZXdfcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGRhYy0+c2FtcGxlX2NsaywgMjU2ICogbmV3X3JhdGUpOworCQlpZiAobmV3X3JhdGUgPCAwKQorCQkJYnJlYWs7CisJCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgYmVsb3cgdGhlIEFCREFDIGNsb2NrICovCisJCWlmIChuZXdfcmF0ZSA8PSBjbGtfZ2V0X3JhdGUoZGFjLT5wY2xrKSkgeworCQkJZGFjLT5yYXRlc1tpbmRleF0gPSBuZXdfcmF0ZSAvIDI1NjsKKwkJCWluZGV4Kys7CisJCX0KKwkJLyogZGl2aWRlIGJ5IDI1NiBhbmQgdGhlbiBieSB0d28gdG8gZ2V0IG5leHQgcmF0ZSAqLworCQluZXdfcmF0ZSAvPSAyNTYgKiAyOworCX0KKworCWlmIChpbmRleCkgeworCQlpbnQgaTsKKworCQkvKiByZXZlcnNlIGFycmF5LCBzbWFsbGVzdCBnbyBmaXJzdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgKGluZGV4IC8gMik7IGkrKykgeworCQkJdW5zaWduZWQgaW50IHRtcCA9IGRhYy0+cmF0ZXNbaW5kZXggLSAxIC0gaV07CisJCQlkYWMtPnJhdGVzW2luZGV4IC0gMSAtIGldID0gZGFjLT5yYXRlc1tpXTsKKwkJCWRhYy0+cmF0ZXNbaV0gPSB0bXA7CisJCX0KKworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLmNvdW50ID0gaW5kZXg7CisJCWRhYy0+Y29uc3RyYWludHNfcmF0ZXMubGlzdCA9IGRhYy0+cmF0ZXM7CisJCWRhYy0+Y29uc3RyYWludHNfcmF0ZXMubWFzayA9IDA7CisJCWRhYy0+cmF0ZXNfbnVtID0gaW5kZXg7CisKKwkJcmV0dmFsID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYmRhY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZAkJKmNhcmQ7CisJc3RydWN0IGF0bWVsX2FiZGFjCSpkYWM7CisJc3RydWN0IHJlc291cmNlCQkqcmVnczsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEJKnBkYXRhOworCXN0cnVjdCBjbGsJCSpwY2xrOworCXN0cnVjdCBjbGsJCSpzYW1wbGVfY2xrOworCWludAkJCXJldHZhbDsKKwlpbnQJCQlpcnE7CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgSVJRIG51bWJlclxuIik7CisJCXJldHVybiBpcnE7CisJfQorCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwZXJpcGhlcmFsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGNsayk7CisJfQorCXNhbXBsZV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzYW1wbGVfY2xrIik7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBzYW1wbGUgY2xvY2tcbiIpOworCQlyZXR2YWwgPSBQVFJfRVJSKHBjbGspOworCQlnb3RvIG91dF9wdXRfcGNsazsKKwl9CisJY2xrX2VuYWJsZShwY2xrKTsKKworCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKKwkJCVRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGF0bWVsX2FiZGFjKSwgJmNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSBzb3VuZCBjYXJkIGRldmljZVxuIik7CisJCWdvdG8gb3V0X3B1dF9zYW1wbGVfY2xrOworCX0KKworCWRhYyA9IGdldF9kYWMoY2FyZCk7CisKKwlkYWMtPmlycSA9IGlycTsKKwlkYWMtPmNhcmQgPSBjYXJkOworCWRhYy0+cGNsayA9IHBjbGs7CisJZGFjLT5zYW1wbGVfY2xrID0gc2FtcGxlX2NsazsKKwlkYWMtPnBkZXYgPSBwZGV2OworCisJcmV0dmFsID0gc2V0X3NhbXBsZV9yYXRlcyhkYWMpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgc3VwcG9ydGVkIHJhdGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9jYXJkOworCX0KKworCWRhYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJaWYgKCFkYWMtPnJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlbWFwIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCWdvdG8gb3V0X2ZyZWVfY2FyZDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgdGhlIERBQyBpcyBzaWxlbnQgYW5kIGRpc2FibGVkICovCisJZGFjX3dyaXRlbChkYWMsIERBVEEsIDApOworCWRhY193cml0ZWwoZGFjLCBDVFJMLCAwKTsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgYWJkYWNfaW50ZXJydXB0LCAwLCAiYWJkYWMiLCBkYWMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlcXVlc3QgaXJxXG4iKTsKKwkJZ290byBvdXRfdW5tYXBfcmVnczsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCisJaWYgKHBkYXRhLT5kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPmR3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnR4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgREFDX0RBVEE7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWRhYy0+ZG1hLmNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgZHdzKTsKKwl9CisJaWYgKCFwZGF0YS0+ZHdzLmRtYV9kZXYgfHwgIWRhYy0+ZG1hLmNoYW4pIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF91bnNldF9jYXJkX2RldjsKKwl9CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQXRtZWwgQUJEQUMiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXRtZWwgQUJEQUMiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyIpOworCisJcmV0dmFsID0gYXRtZWxfYWJkYWNfcGNtX25ldyhkYWMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIEFCREFDIHBjbSBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9yZWxlYXNlX2RtYTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBzb3VuZCBjYXJkXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9kbWE7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQXRtZWwgQUJEQUMgYXQgMHglcCB1c2luZyAlc1xuIiwKKwkJCWRhYy0+cmVncywgZGFjLT5kbWEuY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKworCXJldHVybiByZXR2YWw7CisKK291dF9yZWxlYXNlX2RtYToKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGRhYy0+ZG1hLmNoYW4pOworCWRhYy0+ZG1hLmNoYW4gPSBOVUxMOworb3V0X3Vuc2V0X2NhcmRfZGV2OgorCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJZnJlZV9pcnEoaXJxLCBkYWMpOworb3V0X3VubWFwX3JlZ3M6CisJaW91bm1hcChkYWMtPnJlZ3MpOworb3V0X2ZyZWVfY2FyZDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworb3V0X3B1dF9zYW1wbGVfY2xrOgorCWNsa19wdXQoc2FtcGxlX2Nsayk7CisJY2xrX2Rpc2FibGUocGNsayk7CitvdXRfcHV0X3BjbGs6CisJY2xrX3B1dChwY2xrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWR3X2RtYV9jeWNsaWNfc3RvcChkYWMtPmRtYS5jaGFuKTsKKwljbGtfZGlzYWJsZShkYWMtPnNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKGRhYy0+cGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWNsa19lbmFibGUoZGFjLT5wY2xrKTsKKwljbGtfZW5hYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJaWYgKHRlc3RfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGRhYy0+ZG1hLmNoYW4pOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhdG1lbF9hYmRhY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYXRtZWxfYWJkYWNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdG1lbF9hYmRhY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGdldF9kYWMoY2FyZCk7CisKKwljbGtfcHV0KGRhYy0+c2FtcGxlX2Nsayk7CisJY2xrX2Rpc2FibGUoZGFjLT5wY2xrKTsKKwljbGtfcHV0KGRhYy0+cGNsayk7CisKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGRhYy0+ZG1hLmNoYW4pOworCWRhYy0+ZG1hLmNoYW4gPSBOVUxMOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJaW91bm1hcChkYWMtPnJlZ3MpOworCWZyZWVfaXJxKGRhYy0+aXJxLCBkYWMpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9hYmRhY19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhdG1lbF9hYmRhY19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdG1lbF9hYmRhYyIsCisJfSwKKwkuc3VzcGVuZAk9IGF0bWVsX2FiZGFjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdG1lbF9hYmRhY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9hYmRhY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXRtZWxfYWJkYWNfZHJpdmVyLAorCQkJYXRtZWxfYWJkYWNfcHJvYmUpOworfQorbW9kdWxlX2luaXQoYXRtZWxfYWJkYWNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdG1lbF9hYmRhY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWVsX2FiZGFjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhdG1lbF9hYmRhY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKSIpOworTU9EVUxFX0FVVEhPUigiSGFucy1DaHJpc3RpYW4gRWd0dmVkdCA8aGFucy1jaHJpc3RpYW4uZWd0dmVkdEBhdG1lbC5jb20+Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYzk3Yy5jIGIvc291bmQvYXRtZWwvYWM5N2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDcyZTAwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuYwpAQCAtMCwwICsxLDkzMiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWM5N2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9tZW1hbGxvYy5oPgorCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisjaW5jbHVkZSAiYWM5N2MuaCIKKworZW51bSB7CisJRE1BX1RYX1JFQURZID0gMCwKKwlETUFfUlhfUkVBRFksCisJRE1BX1RYX0NIQU5fUFJFU0VOVCwKKwlETUFfUlhfQ0hBTl9QUkVTRU5ULAorfTsKKworLyogU2VyaWFsaXplIGFjY2VzcyB0byBvcGVuZWQgdmFyaWFibGUgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgob3BlbmVkX211dGV4KTsKKworc3RydWN0IGF0bWVsX2FjOTdjX2RtYSB7CisJc3RydWN0IGRtYV9jaGFuCQkJKnJ4X2NoYW47CisJc3RydWN0IGRtYV9jaGFuCQkJKnR4X2NoYW47Cit9OworCitzdHJ1Y3QgYXRtZWxfYWM5N2MgeworCXN0cnVjdCBjbGsJCQkqcGNsazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2NfZG1hCQlkbWE7CisKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JKmNhcHR1cmVfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfY2FyZAkJCSpjYXJkOworCXN0cnVjdCBzbmRfcGNtCQkJKnBjbTsKKwlzdHJ1Y3Qgc25kX2FjOTcJCQkqYWM5NzsKKwlzdHJ1Y3Qgc25kX2FjOTdfYnVzCQkqYWM5N19idXM7CisKKwl1NjQJCQkJY3VyX2Zvcm1hdDsKKwl1bnNpZ25lZCBpbnQJCQljdXJfcmF0ZTsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisJLyogU2VyaWFsaXplIGFjY2VzcyB0byBvcGVuZWQgdmFyaWFibGUgKi8KKwlzcGlubG9ja190CQkJbG9jazsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKKwlpbnQJCQkJb3BlbmVkOworCWludAkJCQlyZXNldF9waW47Cit9OworCisjZGVmaW5lIGdldF9jaGlwKGNhcmQpICgoc3RydWN0IGF0bWVsX2FjOTdjICopKGNhcmQpLT5wcml2YXRlX2RhdGEpCisKKyNkZWZpbmUgYWM5N2Nfd3JpdGVsKGNoaXAsIHJlZywgdmFsKQkJCVwKKwlfX3Jhd193cml0ZWwoKHZhbCksIChjaGlwKS0+cmVncyArIEFDOTdDXyMjcmVnKQorI2RlZmluZSBhYzk3Y19yZWFkbChjaGlwLCByZWcpCQkJCVwKKwlfX3Jhd19yZWFkbCgoY2hpcCktPnJlZ3MgKyBBQzk3Q18jI3JlZykKKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIERNQSBkcml2ZXIuICovCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19kbWFfcGxheWJhY2tfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGFyZzsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX2RtYV9jYXB0dXJlX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcHJlcGFyZV9kbWEoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwLAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkJKmNkZXNjOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcJCQlidWZmZXJfbGVuLCBwZXJpb2RfbGVuOworCisJLyoKKwkgKiBXZSBkb24ndCBkbyBETUEgb24gImNvbXBsZXgiIHRyYW5zZmVycywgaS5lLiB3aXRoCisJICogbm9uLWhhbGZ3b3JkLWFsaWduZWQgYnVmZmVycyBvciBsZW5ndGhzLgorCSAqLworCWlmIChydW50aW1lLT5kbWFfYWRkciAmIDEgfHwgcnVudGltZS0+YnVmZmVyX3NpemUgJiAxKSB7CisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgInRvbyBjb21wbGV4IHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQljaGFuID0gY2hpcC0+ZG1hLnR4X2NoYW47CisJZWxzZQorCQljaGFuID0gY2hpcC0+ZG1hLnJ4X2NoYW47CisKKwlidWZmZXJfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKKwlwZXJpb2RfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKworCWNkZXNjID0gZHdfZG1hX2N5Y2xpY19wcmVwKGNoYW4sIHJ1bnRpbWUtPmRtYV9hZGRyLCBidWZmZXJfbGVuLAorCQkJcGVyaW9kX2xlbiwgZGlyZWN0aW9uKTsKKwlpZiAoSVNfRVJSKGNkZXNjKSkgeworCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgcHJlcGFyZSBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2Rlc2MpOworCX0KKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgeworCQljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWM5N2NfZG1hX3BsYXliYWNrX3BlcmlvZF9kb25lOworCQlzZXRfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKTsKKwl9IGVsc2UgeworCQljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWM5N2NfZG1hX2NhcHR1cmVfcGVyaW9kX2RvbmU7CisJCXNldF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2tfcGFyYW0gPSBjaGlwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhdG1lbF9hYzk3Y19odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUgorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVgKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUkVTVU1FCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1BBVVNFKSwKKwkuZm9ybWF0cwkJPSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUKKwkJCQkgIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpLAorCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMpLAorCS5yYXRlX21pbgkJPSA0MDAwLAorCS5yYXRlX21heAkJPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluCQk9IDEsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heAk9IDQwOTYsCisJLnBlcmlvZHNfbWluCQk9IDQsCisJLnBlcmlvZHNfbWF4CQk9IDY0LAorfTsKKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQrKzsKKwlydW50aW1lLT5odyA9IGF0bWVsX2FjOTdjX2h3OworCWlmIChjaGlwLT5jdXJfcmF0ZSkgeworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IGNoaXAtPmN1cl9yYXRlOworCQlydW50aW1lLT5ody5yYXRlX21heCA9IGNoaXAtPmN1cl9yYXRlOworCX0KKwlpZiAoY2hpcC0+Y3VyX2Zvcm1hdCkKKwkJcnVudGltZS0+aHcuZm9ybWF0cyA9ICgxVUxMIDw8IGNoaXAtPmN1cl9mb3JtYXQpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQrKzsKKwlydW50aW1lLT5odyA9IGF0bWVsX2FjOTdjX2h3OworCWlmIChjaGlwLT5jdXJfcmF0ZSkgeworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IGNoaXAtPmN1cl9yYXRlOworCQlydW50aW1lLT5ody5yYXRlX21heCA9IGNoaXAtPmN1cl9yYXRlOworCX0KKwlpZiAoY2hpcC0+Y3VyX2Zvcm1hdCkKKwkJcnVudGltZS0+aHcuZm9ybWF0cyA9ICgxVUxMIDw8IGNoaXAtPmN1cl9mb3JtYXQpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZC0tOworCWlmICghY2hpcC0+b3BlbmVkKSB7CisJCWNoaXAtPmN1cl9yYXRlID0gMDsKKwkJY2hpcC0+Y3VyX2Zvcm1hdCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkLS07CisJaWYgKCFjaGlwLT5vcGVuZWQpIHsKKwkJY2hpcC0+Y3VyX3JhdGUgPSAwOworCQljaGlwLT5jdXJfZm9ybWF0ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS50eF9jaGFuKTsKKworCS8qIFNldCByZXN0cmljdGlvbnMgdG8gcGFyYW1zLiAqLworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y3VyX3JhdGUgPSBwYXJhbXNfcmF0ZShod19wYXJhbXMpOworCWNoaXAtPmN1cl9mb3JtYXQgPSBwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcyk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEucnhfY2hhbik7CisKKwkvKiBTZXQgcmVzdHJpY3Rpb25zIHRvIHBhcmFtcy4gKi8KKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmN1cl9yYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsKKwljaGlwLT5jdXJfZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEudHhfY2hhbik7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nIHdvcmQgPSAwOworCWludCByZXR2YWw7CisKKwkvKiBhc3NpZ24gY2hhbm5lbHMgdG8gQUM5N0MgY2hhbm5lbCBBICovCisJc3dpdGNoIChydW50aW1lLT5jaGFubmVscykgeworCWNhc2UgMToKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKQorCQkJfCBBQzk3Q19DSF9BU1NJR04oUENNX1JJR0hULCBBKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETzogc3VwcG9ydCBtb3JlIHRoYW4gdHdvIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE9DQSwgd29yZCk7CisKKwkvKiBjb25maWd1cmUgc2FtcGxlIGZvcm1hdCBhbmQgc2l6ZSAqLworCXdvcmQgPSBBQzk3Q19DTVJfRE1BRU4gfCBBQzk3Q19DTVJfU0laRV8xNjsKKworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJd29yZCB8PSBBQzk3Q19DTVJfQ0VNX0xJVFRMRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRTogLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJd29yZCAmPSB+KEFDOTdDX0NNUl9DRU1fTElUVExFKTsKKwkJYnJlYWs7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIHdvcmQpOworCisJLyogc2V0IHZhcmlhYmxlIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHJ1bnRpbWUtPnJhdGUgIT0gNDgwMDApIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCB8PSBBQzk3Q19NUl9WUkE7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfSBlbHNlIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCAmPSB+KEFDOTdDX01SX1ZSQSk7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfQorCisJcmV0dmFsID0gc25kX2FjOTdfc2V0X3JhdGUoY2hpcC0+YWM5NywgQUM5N19QQ01fRlJPTlRfREFDX1JBVEUsCisJCQlydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHJhdGUgJWQgSHpcbiIsCisJCQkJcnVudGltZS0+cmF0ZSk7CisKKwlpZiAoIXRlc3RfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWM5N2NfcHJlcGFyZV9kbWEoY2hpcCwgc3Vic3RyZWFtLAorCQkJCURNQV9UT19ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZyB3b3JkID0gMDsKKwlpbnQgcmV0dmFsOworCisJLyogYXNzaWduIGNoYW5uZWxzIHRvIEFDOTdDIGNoYW5uZWwgQSAqLworCXN3aXRjaCAocnVudGltZS0+Y2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSkKKwkJCXwgQUM5N0NfQ0hfQVNTSUdOKFBDTV9SSUdIVCwgQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE86IHN1cHBvcnQgbW9yZSB0aGFuIHR3byBjaGFubmVscyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWFjOTdjX3dyaXRlbChjaGlwLCBJQ0EsIHdvcmQpOworCisJLyogY29uZmlndXJlIHNhbXBsZSBmb3JtYXQgYW5kIHNpemUgKi8KKwl3b3JkID0gQUM5N0NfQ01SX0RNQUVOIHwgQUM5N0NfQ01SX1NJWkVfMTY7CisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdvcmQgfD0gQUM5N0NfQ01SX0NFTV9MSVRUTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXdvcmQgJj0gfihBQzk3Q19DTVJfQ0VNX0xJVFRMRSk7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCB3b3JkKTsKKworCS8qIHNldCB2YXJpYWJsZSByYXRlIGlmIG5lZWRlZCAqLworCWlmIChydW50aW1lLT5yYXRlICE9IDQ4MDAwKSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgfD0gQUM5N0NfTVJfVlJBOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0gZWxzZSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgJj0gfihBQzk3Q19NUl9WUkEpOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0KKworCXJldHZhbCA9IHNuZF9hYzk3X3NldF9yYXRlKGNoaXAtPmFjOTcsIEFDOTdfUENNX0xSX0FEQ19SQVRFLAorCQkJcnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHNldCByYXRlICVkIEh6XG4iLAorCQkJCXJ1bnRpbWUtPnJhdGUpOworCisJaWYgKCF0ZXN0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKGNoaXAsIHN1YnN0cmVhbSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorYXRtZWxfYWM5N2NfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgbG9uZyBjYW1yOworCWludCByZXR2YWwgPSAwOworCisJY2FtciA9IGFjOTdjX3JlYWRsKGNoaXAsIENBTVIpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlyZXR2YWwgPSBkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS50eF9jaGFuKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCQljYW1yIHw9IEFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnR4X2NoYW4pOworCQlpZiAoY2hpcC0+b3BlbmVkIDw9IDEpCisJCQljYW1yICY9IH5BQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIGNhbXIpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2F0bWVsX2FjOTdjX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgbG9uZyBjYW1yOworCWludCByZXR2YWwgPSAwOworCisJY2FtciA9IGFjOTdjX3JlYWRsKGNoaXAsIENBTVIpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlyZXR2YWwgPSBkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS5yeF9jaGFuKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCQljYW1yIHw9IEFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCQlpZiAoY2hpcC0+b3BlbmVkIDw9IDEpCisJCQljYW1yICY9IH5BQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIGNhbXIpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWM5N2NfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MJKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdAlmcmFtZXM7CisJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisKKwlieXRlcyA9IGR3X2RtYV9nZXRfc3JjX2FkZHIoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWJ5dGVzIC09IHJ1bnRpbWUtPmRtYV9hZGRyOworCisJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKKwlpZiAoZnJhbWVzID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlmcmFtZXMgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CithdG1lbF9hYzk3Y19jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjCSpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X2RzdF9hZGRyKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWM5N19wbGF5YmFja19vcHMgPSB7CisJLm9wZW4JCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UJCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19od19mcmVlLAorCS5wcmVwYXJlCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19wb2ludGVyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9hYzk3X2NhcHR1cmVfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UJCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9od19mcmVlLAorCS5wcmVwYXJlCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9wb2ludGVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWM5N2NfcGNtX25ldyhzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJc3RydWN0IHNuZF9wY20JCSpwY207CisJc3RydWN0IHNuZF9wY21faGFyZHdhcmUJaHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpbnQJCQljYXB0dXJlLCBwbGF5YmFjaywgcmV0dmFsOworCisJY2FwdHVyZSA9IHRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJcGxheWJhY2sgPSB0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCisJcmV0dmFsID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgY2hpcC0+Y2FyZC0+c2hvcnRuYW1lLAorCQkJY2hpcC0+cGRldi0+aWQsIHBsYXliYWNrLCBjYXB0dXJlLCAmcGNtKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGNhcHR1cmUpCisJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCQkmYXRtZWxfYWM5N19jYXB0dXJlX29wcyk7CisJaWYgKHBsYXliYWNrKQorCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJCSZhdG1lbF9hYzk3X3BsYXliYWNrX29wcyk7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorCQkJJmNoaXAtPnBkZXYtPmRldiwgaHcucGVyaW9kc19taW4gKiBody5wZXJpb2RfYnl0ZXNfbWluLAorCQkJaHcuYnVmZmVyX2J5dGVzX21heCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CisJY2hpcC0+cGNtID0gcGNtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfbWl4ZXJfbmV3KHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgdGVtcGxhdGU7CisJbWVtc2V0KCZ0ZW1wbGF0ZSwgMCwgc2l6ZW9mKHRlbXBsYXRlKSk7CisJdGVtcGxhdGUucHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlyZXR1cm4gc25kX2FjOTdfbWl4ZXIoY2hpcC0+YWM5N19idXMsICZ0ZW1wbGF0ZSwgJmNoaXAtPmFjOTcpOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGdldF9jaGlwKGFjOTcpOworCXVuc2lnbmVkIGxvbmcgd29yZDsKKwlpbnQgdGltZW91dCA9IDQwOworCisJd29yZCA9IChyZWcgJiAweDdmKSA8PCAxNiB8IHZhbDsKKworCWRvIHsKKwkJaWYgKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1RYUkRZKSB7CisJCQlhYzk3Y193cml0ZWwoY2hpcCwgQ09USFIsIHdvcmQpOworCQkJcmV0dXJuOworCQl9CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY29kZWMgd3JpdGUgdGltZW91dFxuIik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBhdG1lbF9hYzk3Y19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGdldF9jaGlwKGFjOTcpOworCXVuc2lnbmVkIGxvbmcgd29yZDsKKwlpbnQgdGltZW91dCA9IDQwOworCWludCB3cml0ZSA9IDEwOworCisJd29yZCA9ICgweDgwIHwgKHJlZyAmIDB4N2YpKSA8PCAxNjsKKworCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfUlhSRFkpICE9IDApCisJCWFjOTdjX3JlYWRsKGNoaXAsIENPUkhSKTsKKworcmV0cnlfd3JpdGU6CisJdGltZW91dCA9IDQwOworCisJZG8geworCQlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1RYUkRZKSAhPSAwKSB7CisJCQlhYzk3Y193cml0ZWwoY2hpcCwgQ09USFIsIHdvcmQpOworCQkJZ290byByZWFkX3JlZzsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAoIS0td3JpdGUpCisJCWdvdG8gdGltZWRfb3V0OworCWdvdG8gcmV0cnlfd3JpdGU7CisKK3JlYWRfcmVnOgorCWRvIHsKKwkJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9SWFJEWSkgIT0gMCkgeworCQkJdW5zaWduZWQgc2hvcnQgdmFsID0gYWM5N2NfcmVhZGwoY2hpcCwgQ09SSFIpOworCQkJcmV0dXJuIHZhbDsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAoIS0td3JpdGUpCisJCWdvdG8gdGltZWRfb3V0OworCWdvdG8gcmV0cnlfd3JpdGU7CisKK3RpbWVkX291dDoKKwlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb2RlYyByZWFkIHRpbWVvdXRcbiIpOworCXJldHVybiAweGZmZmY7Cit9CisKK3N0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnNsYXZlKQoreworCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9IHNsYXZlOworCisJaWYgKGR3cy0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldikgeworCQljaGFuLT5wcml2YXRlID0gZHdzOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19yZXNldChzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCBBQzk3Q19NUl9XUlNUKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpIHsKKwkJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+cmVzZXRfcGluLCAwKTsKKwkJLyogQUM5NyB2Mi4yIHNwZWNpZmljYXRpb25zIHNheXMgbWluaW11bSAxIHVzLiAqLworCQl1ZGVsYXkoMTApOworCQlncGlvX3NldF92YWx1ZShjaGlwLT5yZXNldF9waW4sIDEpOworCX0KKworCXVkZWxheSgxKTsKKwlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIEFDOTdDX01SX0VOQSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FjOTdjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkCQkJKmNhcmQ7CisJc3RydWN0IGF0bWVsX2FjOTdjCQkqY2hpcDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqcmVnczsKKwlzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CisJc3RydWN0IGNsawkJCSpwY2xrOworCXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcwlvcHMgPSB7CisJCS53cml0ZQk9IGF0bWVsX2FjOTdjX3dyaXRlLAorCQkucmVhZAk9IGF0bWVsX2FjOTdjX3JlYWQsCisJfTsKKwlpbnQJCQkJcmV0dmFsOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwZXJpcGhlcmFsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGNsayk7CisJfQorCWNsa19lbmFibGUocGNsayk7CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQlUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYzk3YyksICZjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc291bmQgY2FyZCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9zbmRfY2FyZF9uZXc7CisJfQorCisJY2hpcCA9IGdldF9jaGlwKGNhcmQpOworCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkF0bWVsIEFDOTdDIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF0bWVsIEFDOTdDIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkF0bWVsIEFDOTcgY29udHJvbGxlciIpOworCisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJY2hpcC0+cGNsayA9IHBjbGs7CisJY2hpcC0+cGRldiA9IHBkZXY7CisJY2hpcC0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisKKwlpZiAoIWNoaXAtPnJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlbWFwIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnJlc2V0X3BpbikpIHsKKwkJaWYgKGdwaW9fcmVxdWVzdChwZGF0YS0+cmVzZXRfcGluLCAicmVzZXRfcGluIikpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlc2V0IHBpbiBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCWNoaXAtPnJlc2V0X3BpbiA9IC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPnJlc2V0X3BpbiwgMSk7CisJCQljaGlwLT5yZXNldF9waW4gPSBwZGF0YS0+cmVzZXRfcGluOworCQl9CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKworCXJldHZhbCA9IHNuZF9hYzk3X2J1cyhjYXJkLCAwLCAmb3BzLCBjaGlwLCAmY2hpcC0+YWM5N19idXMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIG9uIGFjOTcgYnVzXG4iKTsKKwkJZ290byBlcnJfYWM5N19idXM7CisJfQorCisJYXRtZWxfYWM5N2NfcmVzZXQoY2hpcCk7CisKKwlyZXR2YWwgPSBhdG1lbF9hYzk3Y19taXhlcl9uZXcoY2hpcCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgYWM5NyBtaXhlclxuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCWlmIChwZGF0YS0+cnhfZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT5yeF9kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT5yeF9yZWcgPSByZWdzLT5zdGFydCArIEFDOTdDX0NBUkhSICsgMjsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgZHdzKTsKKworCQlkZXZfaW5mbygmY2hpcC0+cGRldi0+ZGV2LCAidXNpbmcgJXMgZm9yIERNQSBSWFxuIiwKKwkJCQkJY2hpcC0+ZG1hLnJ4X2NoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisJCXNldF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwlpZiAocGRhdGEtPnR4X2R3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+dHhfZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+dHhfcmVnID0gcmVncy0+c3RhcnQgKyBBQzk3Q19DQVRIUiArIDI7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWNoaXAtPmRtYS50eF9jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisKKwkJZGV2X2luZm8oJmNoaXAtPnBkZXYtPmRldiwgInVzaW5nICVzIGZvciBETUEgVFhcbiIsCisJCQkJCWNoaXAtPmRtYS50eF9jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCQlzZXRfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpICYmCisJCQkhdGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJETUEgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RtYTsKKwl9CisKKwlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wY21fbmV3KGNoaXApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGFjOTcgcGNtIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2RtYTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBzb3VuZCBjYXJkXG4iKTsKKwkJZ290byBlcnJfYWM5N19idXM7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQXRtZWwgQUM5NyBjb250cm9sbGVyIGF0IDB4JXBcbiIsCisJCQljaGlwLT5yZWdzKTsKKworCXJldHVybiAwOworCitlcnJfZG1hOgorCWlmICh0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xlYXJfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBOVUxMOworCWNoaXAtPmRtYS50eF9jaGFuID0gTlVMTDsKK2Vycl9hYzk3X2J1czoKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCisJaWYgKGdwaW9faXNfdmFsaWQoY2hpcC0+cmVzZXRfcGluKSkKKwkJZ3Bpb19mcmVlKGNoaXAtPnJlc2V0X3Bpbik7CisKKwlpb3VubWFwKGNoaXAtPnJlZ3MpOworZXJyX2lvcmVtYXA6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK2Vycl9zbmRfY2FyZF9uZXc6CisJY2xrX2Rpc2FibGUocGNsayk7CisJY2xrX3B1dChwY2xrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xrX2Rpc2FibGUoY2hpcC0+cGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljbGtfZW5hYmxlKGNoaXAtPnBjbGspOworCWlmICh0ZXN0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnR4X2NoYW4pOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhdG1lbF9hYzk3Y19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYXRtZWxfYWM5N2NfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdG1lbF9hYzk3Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChjYXJkKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpCisJCWdwaW9fZnJlZShjaGlwLT5yZXNldF9waW4pOworCisJY2xrX2Rpc2FibGUoY2hpcC0+cGNsayk7CisJY2xrX3B1dChjaGlwLT5wY2xrKTsKKwlpb3VubWFwKGNoaXAtPnJlZ3MpOworCisJaWYgKHRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS50eF9jaGFuKTsKKwljbGVhcl9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljaGlwLT5kbWEucnhfY2hhbiA9IE5VTEw7CisJY2hpcC0+ZG1hLnR4X2NoYW4gPSBOVUxMOworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfYWM5N2NfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXRtZWxfYWM5N2NfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXRtZWxfYWM5N2MiLAorCX0sCisJLnN1c3BlbmQJPSBhdG1lbF9hYzk3Y19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRtZWxfYWM5N2NfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfYWM5N2NfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2FjOTdjX2RyaXZlciwKKwkJCWF0bWVsX2FjOTdjX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGF0bWVsX2FjOTdjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfYWM5N2NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1lbF9hYzk3Y19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYXRtZWxfYWM5N2NfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBdG1lbCBBQzk3IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMtQ2hyaXN0aWFuIEVndHZlZHQgPGhhbnMtY2hyaXN0aWFuLmVndHZlZHRAYXRtZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWM5N2MuaCBiL3NvdW5kL2F0bWVsL2FjOTdjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3YmQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgQXRtZWwgQUM5N0MgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX1NPVU5EX0FUTUVMX0FDOTdDX0gKKyNkZWZpbmUgX19TT1VORF9BVE1FTF9BQzk3Q19ICisKKyNkZWZpbmUgQUM5N0NfTVIJCTB4MDgKKyNkZWZpbmUgQUM5N0NfSUNBCQkweDEwCisjZGVmaW5lIEFDOTdDX09DQQkJMHgxNAorI2RlZmluZSBBQzk3Q19DQVJIUgkJMHgyMAorI2RlZmluZSBBQzk3Q19DQVRIUgkJMHgyNAorI2RlZmluZSBBQzk3Q19DQVNSCQkweDI4CisjZGVmaW5lIEFDOTdDX0NBTVIJCTB4MmMKKyNkZWZpbmUgQUM5N0NfQ0JSSFIJCTB4MzAKKyNkZWZpbmUgQUM5N0NfQ0JUSFIJCTB4MzQKKyNkZWZpbmUgQUM5N0NfQ0JTUgkJMHgzOAorI2RlZmluZSBBQzk3Q19DQk1SCQkweDNjCisjZGVmaW5lIEFDOTdDX0NPUkhSCQkweDQwCisjZGVmaW5lIEFDOTdDX0NPVEhSCQkweDQ0CisjZGVmaW5lIEFDOTdDX0NPU1IJCTB4NDgKKyNkZWZpbmUgQUM5N0NfQ09NUgkJMHg0YworI2RlZmluZSBBQzk3Q19TUgkJMHg1MAorI2RlZmluZSBBQzk3Q19JRVIJCTB4NTQKKyNkZWZpbmUgQUM5N0NfSURSCQkweDU4CisjZGVmaW5lIEFDOTdDX0lNUgkJMHg1YworI2RlZmluZSBBQzk3Q19WRVJTSU9OCQkweGZjCisKKyNkZWZpbmUgQUM5N0NfQ0FUUFIJCVBEQ19UUFIKKyNkZWZpbmUgQUM5N0NfQ0FUQ1IJCVBEQ19UQ1IKKyNkZWZpbmUgQUM5N0NfQ0FUTlBSCQlQRENfVE5QUgorI2RlZmluZSBBQzk3Q19DQVROQ1IJCVBEQ19UTkNSCisjZGVmaW5lIEFDOTdDX0NBUlBSCQlQRENfUlBSCisjZGVmaW5lIEFDOTdDX0NBUkNSCQlQRENfUkNSCisjZGVmaW5lIEFDOTdDX0NBUk5QUgkJUERDX1JOUFIKKyNkZWZpbmUgQUM5N0NfQ0FSTkNSCQlQRENfUk5DUgorI2RlZmluZSBBQzk3Q19QVENSCQlQRENfUFRDUgorCisjZGVmaW5lIEFDOTdDX01SX0VOQQkJKDEgPDwgMCkKKyNkZWZpbmUgQUM5N0NfTVJfV1JTVAkJKDEgPDwgMSkKKyNkZWZpbmUgQUM5N0NfTVJfVlJBCQkoMSA8PCAyKQorCisjZGVmaW5lIEFDOTdDX0NTUl9UWFJEWQkJKDEgPDwgMCkKKyNkZWZpbmUgQUM5N0NfQ1NSX1VOUlVOCQkoMSA8PCAyKQorI2RlZmluZSBBQzk3Q19DU1JfUlhSRFkJCSgxIDw8IDQpCisjZGVmaW5lIEFDOTdDX0NTUl9FTkRUWAkJKDEgPDwgMTApCisjZGVmaW5lIEFDOTdDX0NTUl9FTkRSWAkJKDEgPDwgMTQpCisKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMjAJKDAgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzE4CSgxIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xNgkoMiA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTAJKDMgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU1fTElUVExFCSgxIDw8IDE4KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VNX0JJRwkoMCA8PCAxOCkKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTkEJCSgxIDw8IDIxKQorI2RlZmluZSBBQzk3Q19DTVJfRE1BRU4JCSgxIDw8IDIyKQorCisjZGVmaW5lIEFDOTdDX1NSX0NBRVZUCQkoMSA8PCAzKQorCisjZGVmaW5lIEFDOTdDX0NIX0FTU0lHTihzbG90LCBjaGFubmVsKQkJCQkJXAorCShBQzk3Q19DSEFOTkVMXyMjY2hhbm5lbCA8PCAoMyAqIChBQzk3X1NMT1RfIyNzbG90IC0gMykpKQorI2RlZmluZSBBQzk3Q19DSEFOTkVMX05PTkUJMHgwCisjZGVmaW5lIEFDOTdDX0NIQU5ORUxfQQkJMHgxCisjZGVmaW5lIEFDOTdDX0NIQU5ORUxfQgkJMHgyCisKKyNlbmRpZiAvKiBfX1NPVU5EX0FUTUVMX0FDOTdDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvY29udHJvbC5jIGIvc291bmQvY29yZS9jb250cm9sLmMKaW5kZXggNjM2YjNiNS4uNGIyMGZhMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sLmMKKysrIGIvc291bmQvY29yZS9jb250cm9sLmMKQEAgLTEzNzMsMTIgKzEzNzMsOSBAQAogc3RhdGljIGludCBzbmRfY3RsX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzbmRfY3RsX2ZpbGUgKmN0bDsKLQlpbnQgZXJyOworCiAJY3RsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY3RsLT5mYXN5bmMpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmN0bC0+ZmFzeW5jKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHdkZXAuYyBiL3NvdW5kL2NvcmUvaHdkZXAuYwppbmRleCAxOTVjYWZjLi5hNzBlZTdmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2h3ZGVwLmMKKysrIGIvc291bmQvY29yZS9od2RlcC5jCkBAIC05OSw5ICs5OSw2IEBACiAJaWYgKGh3ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFody0+b3BzLm9wZW4pCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGh3LT5jYXJkLT5tb2R1bGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTEzLDYgKzExMCwxMCBAQAogCQkJZXJyID0gLUVCVVNZOwogCQkJYnJlYWs7CiAJCX0KKwkJaWYgKCFody0+b3BzLm9wZW4pIHsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQogCQllcnIgPSBody0+b3BzLm9wZW4oaHcsIGZpbGUpOwogCQlpZiAoZXJyID49IDApCiAJCQlicmVhazsKQEAgLTE1MSw3ICsxNTIsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9od2RlcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKLQlpbnQgZXJyID0gLUVOWElPOworCWludCBlcnIgPSAwOwogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGh3LT5jYXJkLT5tb2R1bGU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggMGQ1NTIwYy4uZmQ1NmFmZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTEyMSwzMSArMTIxLDQ0IEBACiAjZW5kaWYKIAogLyoqCi0gKiAgc25kX2NhcmRfbmV3IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgc291bmRjYXJkIHN0cnVjdHVyZQorICogIHNuZF9jYXJkX2NyZWF0ZSAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKICAqICBAaWR4OiBjYXJkIGluZGV4IChhZGRyZXNzKSBbMCAuLi4gKFNORFJWX0NBUkRTLTEpXQogICogIEB4aWQ6IGNhcmQgaWRlbnRpZmljYXRpb24gKEFTQ0lJIHN0cmluZykKICAqICBAbW9kdWxlOiB0b3AgbGV2ZWwgbW9kdWxlIGZvciBsb2NraW5nCiAgKiAgQGV4dHJhX3NpemU6IGFsbG9jYXRlIHRoaXMgZXh0cmEgc2l6ZSBhZnRlciB0aGUgbWFpbiBzb3VuZGNhcmQgc3RydWN0dXJlCisgKiAgQGNhcmRfcmV0OiB0aGUgcG9pbnRlciB0byBzdG9yZSB0aGUgY3JlYXRlZCBjYXJkIGluc3RhbmNlCiAgKgogICogIENyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgc291bmRjYXJkIHN0cnVjdHVyZS4KICAqCi0gKiAgUmV0dXJucyBrbWFsbG9jYXRlZCBzbmRfY2FyZCBzdHJ1Y3R1cmUuIENyZWF0ZXMgdGhlIEFMU0EgY29udHJvbCBpbnRlcmZhY2UKLSAqICAod2hpY2ggaXMgYmxvY2tlZCB1bnRpbCBzbmRfY2FyZF9yZWdpc3RlciBmdW5jdGlvbiBpcyBjYWxsZWQpLgorICogIFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgc25kX2NhcmQgaW5zdGFuY2UgdmlhIGt6YWxsb2Mgd2l0aCB0aGUgZ2l2ZW4KKyAqICBzcGFjZSBmb3IgdGhlIGRyaXZlciB0byB1c2UgZnJlZWx5LiAgVGhlIGFsbG9jYXRlZCBzdHJ1Y3QgaXMgc3RvcmVkCisgKiAgaW4gdGhlIGdpdmVuIGNhcmRfcmV0IHBvaW50ZXIuCisgKgorICogIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotc3RydWN0IHNuZF9jYXJkICpzbmRfY2FyZF9uZXcoaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLAotCQkJIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUpCitpbnQgc25kX2NhcmRfY3JlYXRlKGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCwKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUsCisJCSAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVyciwgaWR4MjsKIAorCWlmIChzbmRfQlVHX09OKCFjYXJkX3JldCkpCisJCXJldHVybiAtRUlOVkFMOworCSpjYXJkX3JldCA9IE5VTEw7CisKIAlpZiAoZXh0cmFfc2l6ZSA8IDApCiAJCWV4dHJhX3NpemUgPSAwOwogCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCkgKyBleHRyYV9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRU5PTUVNOwogCWlmICh4aWQpIHsKLQkJaWYgKCFzbmRfaW5mb19jaGVja19yZXNlcnZlZF93b3Jkcyh4aWQpKQorCQlpZiAoIXNuZF9pbmZvX2NoZWNrX3Jlc2VydmVkX3dvcmRzKHhpZCkpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAiZ2l2ZW4gaWQgc3RyaW5nICclcycgaXMgcmVzZXJ2ZWQuXG4iLCB4aWQpOworCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBfX2Vycm9yOworCQl9CiAJCXN0cmxjcHkoY2FyZC0+aWQsIHhpZCwgc2l6ZW9mKGNhcmQtPmlkKSk7CiAJfQogCWVyciA9IDA7CkBAIC0xOTUsNiArMjA4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y29udHJvbHMpOwogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jdGxfZmlsZXMpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5maWxlc19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZmlsZXNfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+c2h1dGRvd25fc2xlZXApOwogI2lmZGVmIENPTkZJR19QTQogCW11dGV4X2luaXQoJmNhcmQtPnBvd2VyX2xvY2spOwpAQCAtMjAyLDI2ICsyMTYsMjggQEAKICNlbmRpZgogCS8qIHRoZSBjb250cm9sIGludGVyZmFjZSBjYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSB0aGUgdXNlciBzcGFjZSB1bnRpbCAqLwogCS8qIHNuZF9jYXJkc19iaXRtYXNrIGFuZCBzbmRfY2FyZHMgYXJlIHNldCB3aXRoIHNuZF9jYXJkX3JlZ2lzdGVyICovCi0JaWYgKChlcnIgPSBzbmRfY3RsX2NyZWF0ZShjYXJkKSkgPCAwKSB7Ci0JCXNuZF9wcmludGQoInVuYWJsZSB0byByZWdpc3RlciBjb250cm9sIG1pbm9yc1xuIik7CisJZXJyID0gc25kX2N0bF9jcmVhdGUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIGNvbnRyb2wgbWlub3JzXG4iKTsKIAkJZ290byBfX2Vycm9yOwogCX0KLQlpZiAoKGVyciA9IHNuZF9pbmZvX2NhcmRfY3JlYXRlKGNhcmQpKSA8IDApIHsKLQkJc25kX3ByaW50ZCgidW5hYmxlIHRvIGNyZWF0ZSBjYXJkIGluZm9cbiIpOworCWVyciA9IHNuZF9pbmZvX2NhcmRfY3JlYXRlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBjcmVhdGUgY2FyZCBpbmZvXG4iKTsKIAkJZ290byBfX2Vycm9yX2N0bDsKIAl9CiAJaWYgKGV4dHJhX3NpemUgPiAwKQogCQljYXJkLT5wcml2YXRlX2RhdGEgPSAoY2hhciAqKWNhcmQgKyBzaXplb2Yoc3RydWN0IHNuZF9jYXJkKTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZF9yZXQgPSBjYXJkOworCXJldHVybiAwOwogCiAgICAgICBfX2Vycm9yX2N0bDoKIAlzbmRfZGV2aWNlX2ZyZWVfYWxsKGNhcmQsIFNORFJWX0RFVl9DTURfUFJFKTsKICAgICAgIF9fZXJyb3I6CiAJa2ZyZWUoY2FyZCk7Ci0gICAgICAJcmV0dXJuIE5VTEw7CisgIAlyZXR1cm4gZXJyOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9jYXJkX25ldyk7CitFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2NyZWF0ZSk7CiAKIC8qIHJldHVybiBub24temVybyBpZiBhIGNhcmQgaXMgYWxyZWFkeSBsb2NrZWQgKi8KIGludCBzbmRfY2FyZF9sb2NrZWQoaW50IGNhcmQpCkBAIC0yNTksNiArMjc1LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9kZiwgJnNodXRkb3duX2ZpbGVzLCBzaHV0ZG93bl9saXN0KSB7CiAJCWlmIChfZGYtPmZpbGUgPT0gZmlsZSkgewogCQkJZGYgPSBfZGY7CisJCQlsaXN0X2RlbF9pbml0KCZkZi0+c2h1dGRvd25fbGlzdCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM0Nyw4ICszNjQsNyBAQAogCS8qIHBoYXNlIDI6IHJlcGxhY2UgZmlsZS0+Zl9vcCB3aXRoIHNwZWNpYWwgZHVtbXkgb3BlcmF0aW9ucyAqLwogCQogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JbWZpbGUgPSBjYXJkLT5maWxlczsKLQl3aGlsZSAobWZpbGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1maWxlLCAmY2FyZC0+ZmlsZXNfbGlzdCwgbGlzdCkgewogCQlmaWxlID0gbWZpbGUtPmZpbGU7CiAKIAkJLyogaXQncyBjcml0aWNhbCBwYXJ0LCB1c2UgZW5kbGVzcyBsb29wICovCkBAIC0zNjEsOCArMzc3LDYgQEAKIAogCQltZmlsZS0+ZmlsZS0+Zl9vcCA9ICZzbmRfc2h1dGRvd25fZl9vcHM7CiAJCWZvcHNfZ2V0KG1maWxlLT5maWxlLT5mX29wKTsKLQkJCi0JCW1maWxlID0gbWZpbGUtPm5leHQ7CiAJfQogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsJCiAKQEAgLTQ0Miw3ICs0NTYsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQlpZiAoY2FyZC0+ZmlsZXMgPT0gTlVMTCkKKwlpZiAobGlzdF9lbXB0eSgmY2FyZC0+ZmlsZXNfbGlzdCkpCiAJCWZyZWVfbm93ID0gMTsKIAllbHNlCiAJCWNhcmQtPmZyZWVfb25fbGFzdF9jbG9zZSA9IDE7CkBAIC00NjIsNyArNDc2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIHdhaXQsIHVudGlsIGFsbCBkZXZpY2VzIGFyZSByZWFkeSBmb3IgdGhlIGZyZWUgb3BlcmF0aW9uICovCi0Jd2FpdF9ldmVudChjYXJkLT5zaHV0ZG93bl9zbGVlcCwgY2FyZC0+ZmlsZXMgPT0gTlVMTCk7CisJd2FpdF9ldmVudChjYXJkLT5zaHV0ZG93bl9zbGVlcCwgbGlzdF9lbXB0eSgmY2FyZC0+ZmlsZXNfbGlzdCkpOwogCXNuZF9jYXJkX2RvX2ZyZWUoY2FyZCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MDksMTUgKzgyMywxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAltZmlsZS0+ZmlsZSA9IGZpbGU7CiAJbWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wID0gTlVMTDsKLQltZmlsZS0+bmV4dCA9IE5VTEw7CiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlpZiAoY2FyZC0+c2h1dGRvd24pIHsKIAkJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCQlrZnJlZShtZmlsZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQltZmlsZS0+bmV4dCA9IGNhcmQtPmZpbGVzOwotCWNhcmQtPmZpbGVzID0gbWZpbGU7CisJbGlzdF9hZGQoJm1maWxlLT5saXN0LCAmY2FyZC0+ZmlsZXNfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtODM5LDI5ICs4NTEsMjAgQEAKICAqLwogaW50IHNuZF9jYXJkX2ZpbGVfcmVtb3ZlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm1maWxlLCAqcGZpbGUgPSBOVUxMOworCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICptZmlsZSwgKmZvdW5kID0gTlVMTDsKIAlpbnQgbGFzdF9jbG9zZSA9IDA7CiAKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCW1maWxlID0gY2FyZC0+ZmlsZXM7Ci0Jd2hpbGUgKG1maWxlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtZmlsZSwgJmNhcmQtPmZpbGVzX2xpc3QsIGxpc3QpIHsKIAkJaWYgKG1maWxlLT5maWxlID09IGZpbGUpIHsKLQkJCWlmIChwZmlsZSkKLQkJCQlwZmlsZS0+bmV4dCA9IG1maWxlLT5uZXh0OwotCQkJZWxzZQotCQkJCWNhcmQtPmZpbGVzID0gbWZpbGUtPm5leHQ7CisJCQlsaXN0X2RlbCgmbWZpbGUtPmxpc3QpOworCQkJaWYgKG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCkKKwkJCQlmb3BzX3B1dChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApOworCQkJZm91bmQgPSBtZmlsZTsKIAkJCWJyZWFrOwogCQl9Ci0JCXBmaWxlID0gbWZpbGU7Ci0JCW1maWxlID0gbWZpbGUtPm5leHQ7CiAJfQotCWlmIChtZmlsZSAmJiBtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApIHsKLQkJZm9wc19wdXQobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKTsKLQkJc3Bpbl9sb2NrKCZzaHV0ZG93bl9sb2NrKTsKLQkJbGlzdF9kZWwoJm1maWxlLT5zaHV0ZG93bl9saXN0KTsKLQkJc3Bpbl91bmxvY2soJnNodXRkb3duX2xvY2spOwotCX0KLQlpZiAoY2FyZC0+ZmlsZXMgPT0gTlVMTCkKKwlpZiAobGlzdF9lbXB0eSgmY2FyZC0+ZmlsZXNfbGlzdCkpCiAJCWxhc3RfY2xvc2UgPSAxOwogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlpZiAobGFzdF9jbG9zZSkgewpAQCAtODY5LDExICs4NzIsMTEgQEAKIAkJaWYgKGNhcmQtPmZyZWVfb25fbGFzdF9jbG9zZSkKIAkJCXNuZF9jYXJkX2RvX2ZyZWUoY2FyZCk7CiAJfQotCWlmICghbWZpbGUpIHsKKwlpZiAoIWZvdW5kKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkFMU0EgY2FyZCBmaWxlIHJlbW92ZSBwcm9ibGVtICglcClcbiIsIGZpbGUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0Ja2ZyZWUobWZpbGUpOworCWtmcmVlKGZvdW5kKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9qYWNrLmMgYi9zb3VuZC9jb3JlL2phY2suYwppbmRleCAwNzdhODUyLi5jODI1NGM2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2phY2suYworKysgYi9zb3VuZC9jb3JlL2phY2suYwpAQCAtMjMsNiArMjMsMTQgQEAKICNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogCitzdGF0aWMgaW50IGphY2tfdHlwZXNbXSA9IHsKKwlTV19IRUFEUEhPTkVfSU5TRVJULAorCVNXX01JQ1JPUEhPTkVfSU5TRVJULAorCVNXX0xJTkVPVVRfSU5TRVJULAorCVNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJULAorCVNXX1ZJREVPT1VUX0lOU0VSVCwKK307CisKIHN0YXRpYyBpbnQgc25kX2phY2tfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX2phY2sgKmphY2sgPSBkZXZpY2UtPmRldmljZV9kYXRhOwpAQCAtNzksNiArODcsNyBAQAogewogCXN0cnVjdCBzbmRfamFjayAqamFjazsKIAlpbnQgZXJyOworCWludCBpOwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewogCQkuZGV2X2ZyZWUgPSBzbmRfamFja19kZXZfZnJlZSwKIAkJLmRldl9yZWdpc3RlciA9IHNuZF9qYWNrX2Rldl9yZWdpc3RlciwKQEAgLTEwMCwxOCArMTA5LDEwIEBACiAKIAlqYWNrLT50eXBlID0gdHlwZTsKIAotCWlmICh0eXBlICYgU05EX0pBQ0tfSEVBRFBIT05FKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfSEVBRFBIT05FX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19MSU5FT1VUKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfTElORU9VVF9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTUlDUk9QSE9ORSkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX01JQ1JPUEhPTkVfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX01FQ0hBTklDQUwpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoamFja190eXBlcyk7IGkrKykKKwkJaWYgKHR5cGUgJiAoMSA8PCBpKSkKKwkJCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCisJCQkJCSAgICAgamFja190eXBlc1tpXSk7CiAKIAllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfSkFDSywgamFjaywgJm9wcyk7CiAJaWYgKGVyciA8IDApCkBAIC0xNTQsMjEgKzE1NSwxNyBAQAogICovCiB2b2lkIHNuZF9qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX2phY2sgKmphY2ssIGludCBzdGF0dXMpCiB7CisJaW50IGk7CisKIAlpZiAoIWphY2spCiAJCXJldHVybjsKIAotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfSEVBRFBIT05FKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfSEVBRFBIT05FX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfSEVBRFBIT05FKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX0xJTkVPVVQpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19MSU5FT1VUX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTElORU9VVCk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19NSUNST1BIT05FKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfTUlDUk9QSE9ORV9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX01JQ1JPUEhPTkUpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTUVDSEFOSUNBTCkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqYWNrX3R5cGVzKTsgaSsrKSB7CisJCWludCB0ZXN0Yml0ID0gMSA8PCBpOworCQlpZiAoamFjay0+dHlwZSAmIHRlc3RiaXQpCisJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgamFja190eXBlc1tpXSwKKwkJCQkJICAgIHN0YXR1cyAmIHRlc3RiaXQpOworCX0KIAogCWlucHV0X3N5bmMoamFjay0+aW5wdXRfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMzg1MjRmNi4uYTk3MTBlMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTk1LDEyICs5NSwxNCBAQAogewogCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOwogCi0JZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspCi0JCWlmIChxLT5zdWJ2ZW5kb3IgPT0gcGNpLT5zdWJzeXN0ZW1fdmVuZG9yICYmCi0JCSAgICAoIXEtPnN1YmRldmljZSB8fCBxLT5zdWJkZXZpY2UgPT0gcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSkKKwlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykgeworCQlpZiAocS0+c3VidmVuZG9yICE9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcikKKwkJCWNvbnRpbnVlOworCQlpZiAoIXEtPnN1YmRldmljZSB8fAorCQkgICAgKHBjaS0+c3Vic3lzdGVtX2RldmljZSAmIHEtPnN1YmRldmljZV9tYXNrKSA9PSBxLT5zdWJkZXZpY2UpCiAJCQlyZXR1cm4gcTsKKwl9CiAJcmV0dXJuIE5VTEw7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX3BjaV9xdWlya19sb29rdXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggNjk5ZDI4OS4uZGRhMDAwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtMTE2MCw5ICsxMTYwLDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogd3JpdGU6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGU6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRlOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTE5Niw5ICsxMTk4LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZDogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQ6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMjQyLDkgKzEyNDYsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTI3OCw5ICsxMjg0LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZHY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZHY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWR2OiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWR2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RSQUlOLCBOVUxMKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTUzMyw3ICsxNTQxLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJzeW5jMTogc2l6ZSA9ICVsaVxuIiwgc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInN5bmMxOiBzaXplID0gJWxpXG4iLCBzaXplKTsKICNlbmRpZgogCXdoaWxlICgxKSB7CiAJCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIsIHNpemUsIDEpOwpAQCAtMTU5MCw3ICsxNTk4LDcgQEAKIAkJbXV0ZXhfbG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKIAkJaWYgKHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKLQkJCXByaW50aygic3luYzogYnVmZmVyX3VzZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IGJ1ZmZlcl91c2VkXG4iKTsKICNlbmRpZgogCQkJc2l6ZSA9ICg4ICogKHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMgLSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpICsgNykgLyB3aWR0aDsKIAkJCXNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKGZvcm1hdCwKQEAgLTE2MDMsNyArMTYxMSw3IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAocnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPiAwKSB7CiAjaWZkZWYgT1NTX0RFQlVHCi0JCQlwcmludGsoInN5bmM6IHBlcmlvZF9wdHJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IHBlcmlvZF9wdHJcbiIpOwogI2VuZGlmCiAJCQlzaXplID0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyAtIHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyOwogCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UoZm9ybWF0LApAQCAtMTg5NSw3ICsxOTAzLDkgQEAKIAogc3RhdGljIGludCBzbmRfcGNtX29zc19ub25ibG9jayhzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk1Miw3ICsxOTYyLDcgQEAKIAlpbnQgZXJyLCBjbWQ7CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHRyaWdnZXIgPSAweCV4XG4iLCB0cmlnZ2VyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogdHJpZ2dlciA9IDB4JXhcbiIsIHRyaWdnZXIpOwogI2VuZGlmCiAJCiAJcHN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKQEAgLTIxNzAsNyArMjE4MCw5IEBACiAJfQogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBzcGFjZTogYnl0ZXMgPSAlaSwgZnJhZ21lbnRzID0gJWksIGZyYWdzdG90YWwgPSAlaSwgZnJhZ3NpemUgPSAlaVxuIiwgaW5mby5ieXRlcywgaW5mby5mcmFnbWVudHMsIGluZm8uZnJhZ3N0b3RhbCwgaW5mby5mcmFnc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHNwYWNlOiBieXRlcyA9ICVpLCBmcmFnbWVudHMgPSAlaSwgIgorCSAgICAgICAiZnJhZ3N0b3RhbCA9ICVpLCBmcmFnc2l6ZSA9ICVpXG4iLAorCSAgICAgICBpbmZvLmJ5dGVzLCBpbmZvLmZyYWdtZW50cywgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKICNlbmRpZgogCWlmIChjb3B5X3RvX3VzZXIoX2luZm8sICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0NzMsNyArMjQ4NSw3IEBACiAJaWYgKCgoY21kID4+IDgpICYgMHhmZikgIT0gJ1AnKQogCQlyZXR1cm4gLUVJTlZBTDsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IGlvY3RsID0gMHgleFxuIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogaW9jdGwgPSAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CkBAIC0yNjI3LDcgKzI2MzksOCBAQAogI2Vsc2UKIAl7CiAJCXNzaXplX3QgcmVzID0gc25kX3BjbV9vc3NfcmVhZDEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKLQkJcHJpbnRrKCJwY21fb3NzOiByZWFkICVsaSBieXRlcyAocmV0dXJuZWQgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkICVsaSBieXRlcyAiCisJCSAgICAgICAiKHJldHVybmVkICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMjY0Niw3ICsyNjU5LDggQEAKIAlzdWJzdHJlYW0tPmZfZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlyZXN1bHQgPSBzbmRfcGNtX29zc193cml0ZTEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwKKwkgICAgICAgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjcyMCw3ICsyNzM0LDcgQEAKIAlpbnQgZXJyOwogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIGJlZ2luXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBiZWdpblxuIik7CiAjZW5kaWYKIAlwY21fb3NzX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3dpdGNoICgoYXJlYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpIHsKQEAgLTI3NzAsNyArMjc4NCw4IEBACiAJcnVudGltZS0+c2lsZW5jZV90aHJlc2hvbGQgPSAwOwogCXJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA9IDA7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIG9rLCBieXRlcyA9IDB4JXhcbiIsIHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBvaywgYnl0ZXMgPSAweCV4XG4iLAorCSAgICAgICBydW50aW1lLT5vc3MubW1hcF9ieXRlcyk7CiAjZW5kaWYKIAkvKiBJbiBtbWFwIG1vZGUgd2UgbmV2ZXIgc3RvcCAqLwogCXJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkID0gcnVudGltZS0+Ym91bmRhcnk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmggYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKaW5kZXggY2EyZjRjMy4uYjlhZmFiNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaApAQCAtMTc2LDkgKzE3Niw5IEBACiAjZW5kaWYKIAogI2lmZGVmIFBMVUdJTl9ERUJVRwotI2RlZmluZSBwZHByaW50ZiggZm10LCBhcmdzLi4uICkgcHJpbnRrKCAicGx1Z2luOiAiIGZtdCwgIyNhcmdzKQorI2RlZmluZSBwZHByaW50ZihmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICJwbHVnaW46ICIgZm10LCAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSBwZHByaW50ZiggZm10LCBhcmdzLi4uICkgCisjZGVmaW5lIHBkcHJpbnRmKGZtdCwgYXJncy4uLikKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX19QQ01fUExVR0lOX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDE5MmE0MzMuLjE0NTkzMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtNjY3LDcgKzY2Nyw2IEBACiAJCXNwaW5fbG9ja19pbml0KCZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAubG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAuc3Vic3RyZWFtcyk7CiAJCWxpc3RfYWRkX3RhaWwoJnN1YnN0cmVhbS0+bGlua19saXN0LCAmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLnN1YnN0cmVhbXMpOwotCQlzcGluX2xvY2tfaW5pdCgmc3Vic3RyZWFtLT50aW1lcl9sb2NrKTsKIAkJYXRvbWljX3NldCgmc3Vic3RyZWFtLT5tbWFwX2NvdW50LCAwKTsKIAkJcHJldiA9IHN1YnN0cmVhbTsKIAl9CkBAIC02OTIsNyArNjkxLDcgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KLWludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNoYXIgKmlkLCBpbnQgZGV2aWNlLAoraW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCBkZXZpY2UsCiAJCWludCBwbGF5YmFja19jb3VudCwgaW50IGNhcHR1cmVfY291bnQsCiAJICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqKiBycGNtKQogewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCA5MjE2OTEwLi5mYmIyZTM5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtMTI1LDIzICsxMjUsMzIgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtKQkoKHN1YnN0cmVhbSktPnBzdHItPnhydW5fZGVidWcpCisjZWxzZQorI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSkJMAorI2VuZGlmCisKKyNkZWZpbmUgZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSkgZG8gewlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkgPiAxKQlcCisJCQlkdW1wX3N0YWNrKCk7CQlcCisJfSB3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgeHJ1bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzbmRfcGNtX3N0b3Aoc3Vic3RyZWFtLCBTTkRSVl9QQ01fU1RBVEVfWFJVTik7Ci0jaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwotCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pKSB7CiAJCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiWFJVTjogcGNtQyVkRCVkJWNcbiIsCiAJCQkgICBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+bnVtYmVyLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmRldmljZSwKIAkJCSAgIHN1YnN0cmVhbS0+c3RyZWFtID8gJ2MnIDogJ3AnKTsKLQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCi0JCQlkdW1wX3N0YWNrKCk7CisJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwogCX0KLSNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHNuZF9wY21fdWZyYW1lc190IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCQkJICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQogewogCXNuZF9wY21fdWZyYW1lc190IHBvczsKIApAQCAtMTUwLDE3ICsxNTksMjEgQEAKIAlwb3MgPSBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pOwogCWlmIChwb3MgPT0gU05EUlZfUENNX1BPU19YUlVOKQogCQlyZXR1cm4gcG9zOyAvKiBYUlVOICovCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmIChwb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAgIkJVRzogc3RyZWFtID0gJWksIHBvcyA9IDB4JWx4LCBidWZmZXIgc2l6ZSA9IDB4JWx4LCBwZXJpb2Qgc2l6ZSA9IDB4JWx4XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICAiQlVHOiBzdHJlYW0gPSAlaSwgcG9zID0gMHglbHgsICIKKwkJCQkgICAiYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwKKwkJCQkgICBzdWJzdHJlYW0tPnN0cmVhbSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCX0KKwkJcG9zID0gMDsKIAl9Ci0jZW5kaWYKIAlwb3MgLT0gcG9zICUgcnVudGltZS0+bWluX2FsaWduOwogCXJldHVybiBwb3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCitzdGF0aWMgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CiAKQEAgLTE4MiwxMSArMTk1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9pbnRlcnJ1cHQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSkgewkJCQlcCisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CQkJXAorCQkJCXNuZF9wcmludGQoIlBDTTogIiBmbXQsICMjYXJncyk7CVwKKwkJCX0JCQkJCQlcCisJCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX2ludGVycnVwdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0OworCXNuZF9wY21fdWZyYW1lc190IG5ld19od19wdHIsIGh3X3B0cl9pbnRlcnJ1cHQsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7CiAKIAlwb3MgPSBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN1YnN0cmVhbSwgcnVudGltZSk7CkBAIC0xOTQsMzYgKzIxNyw1MyBAQAogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCWlmIChydW50aW1lLT5wZXJpb2Rfc2l6ZSA9PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJZ290byBfX25leHRfYnVmOwotCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CiAJaHdfcHRyX2ludGVycnVwdCA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgKyBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKLQotCWRlbHRhID0gaHdfcHRyX2ludGVycnVwdCAtIG5ld19od19wdHI7Ci0JaWYgKGRlbHRhID4gMCkgewotCQlpZiAoKHNuZF9wY21fdWZyYW1lc190KWRlbHRhIDwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKSB7Ci0jaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwotCQkJaWYgKHJ1bnRpbWUtPnBlcmlvZHMgPiAxICYmIHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewotCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMV0gKHN0cmVhbSA9ICVpLCBkZWx0YTogLSVsZCwgbWF4IGppdHRlciA9ICVsZCk6IHdyb25nIGludGVycnVwdCBhY2tub3dsZWRnZT9cbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZykgZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMik7Ci0JCQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCi0JCQkJCWR1bXBfc3RhY2soKTsKLQkJCX0KLSNlbmRpZgotCQkJcmV0dXJuIDA7Ci0JCX0KLQkgICAgICBfX25leHRfYnVmOgotCQlydW50aW1lLT5od19wdHJfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKHJ1bnRpbWUtPmh3X3B0cl9iYXNlID09IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSAwOwotCQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJZGVsdGEgPSBuZXdfaHdfcHRyIC0gaHdfcHRyX2ludGVycnVwdDsKKwlpZiAoaHdfcHRyX2ludGVycnVwdCA+PSBydW50aW1lLT5ib3VuZGFyeSkgeworCQlod19wdHJfaW50ZXJydXB0IC09IHJ1bnRpbWUtPmJvdW5kYXJ5OworCQlpZiAoaHdfYmFzZSA8IHJ1bnRpbWUtPmJvdW5kYXJ5IC8gMikKKwkJCS8qIGh3X2Jhc2Ugd2FzIGFscmVhZHkgbGFwcGVkOyByZWNhbGMgZGVsdGEgKi8KKwkJCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7CiAJfQotCisJaWYgKGRlbHRhIDwgMCkgeworCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGRlbHRhIDwgMCkgeworCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCisJCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlICIKKwkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAorCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKKwkJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOworCQkJLyogcmViYXNlIHRvIGludGVycnVwdCBwb3NpdGlvbiAqLworCQkJaHdfYmFzZSA9IG5ld19od19wdHIgPSBod19wdHJfaW50ZXJydXB0OworCQkJLyogYWxpZ24gaHdfYmFzZSB0byBidWZmZXJfc2l6ZSAqLworCQkJaHdfYmFzZSAtPSBod19iYXNlICUgcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQlkZWx0YSA9IDA7CisJCX0gZWxzZSB7CisJCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJaWYgKGh3X2Jhc2UgPj0gcnVudGltZS0+Ym91bmRhcnkpCisJCQkJaHdfYmFzZSA9IDA7CisJCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwkJfQorCX0KKwlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAorCQkJICAgICAiTG9zdCBpbnRlcnJ1cHRzPyAiCisJCQkgICAgICIoc3RyZWFtPSVpLCBkZWx0YT0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylkZWx0YSwKKwkJCSAgICAgKGxvbmcpaHdfcHRyX2ludGVycnVwdCk7CisJCS8qIHJlYmFzZSBod19wdHJfaW50ZXJydXB0ICovCisJCWh3X3B0cl9pbnRlcnJ1cHQgPQorCQkJbmV3X2h3X3B0ciAtIG5ld19od19wdHIgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwl9CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7CiAKKwlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwotCXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgPSBuZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgPSBod19wdHJfaW50ZXJydXB0OwogCiAJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CiB9CkBAIC0yMzMsNyArMjczLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyOworCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7CiAKIAlvbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CkBAIC0yNDIsMjkgKzI4MiwzOCBAQAogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CiAKLQlkZWx0YSA9IG9sZF9od19wdHIgLSBuZXdfaHdfcHRyOwotCWlmIChkZWx0YSA+IDApIHsKLQkJaWYgKChzbmRfcGNtX3VmcmFtZXNfdClkZWx0YSA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMikgewotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMiAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKLQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwotCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJCQlkdW1wX3N0YWNrKCk7Ci0JCQl9Ci0jZW5kaWYKKwlkZWx0YSA9IG5ld19od19wdHIgLSBvbGRfaHdfcHRyOworCWlmIChkZWx0YSA8IDApIHsKKwkJZGVsdGEgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChkZWx0YSA8IDApIHsKKwkJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIAorCQkJCSAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMl0gIgorCQkJCSAgICAgIihzdHJlYW09JWksIHBvcz0lbGQsIG9sZF9wdHI9JWxkKVxuIiwKKwkJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylwb3MsCisJCQkJICAgICAobG9uZylvbGRfaHdfcHRyKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXJ1bnRpbWUtPmh3X3B0cl9iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAocnVudGltZS0+aHdfcHRyX2Jhc2UgPT0gcnVudGltZS0+Ym91bmRhcnkpCi0JCQlydW50aW1lLT5od19wdHJfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGh3X2Jhc2UgPj0gcnVudGltZS0+Ym91bmRhcnkpCisJCQlod19iYXNlID0gMDsKKwkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJfQorCWlmIChkZWx0YSA+IHJ1bnRpbWUtPnBlcmlvZF9zaXplICYmIHJ1bnRpbWUtPnBlcmlvZHMgPiAxKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICJod19wdHIgc2tpcHBpbmchICIKKwkJCSAgICAgIihwb3M9JWxkLCBkZWx0YT0lbGQsIHBlcmlvZD0lbGQpXG4iLAorCQkJICAgICAobG9uZylwb3MsIChsb25nKWRlbHRhLAorCQkJICAgICAobG9uZylydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCXJldHVybiAwOwogCX0KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAorCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKIAlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7CiAKIAlyZXR1cm4gc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3Vic3RyZWFtLCBydW50aW1lKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggYTc4OWVmYy4uYTE1MWZiMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCQlpZiAoIShwYXJhbXMtPnJtYXNrICYgKDEgPDwgaykpKQogCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKIAkJcHJpbnRrKCIlMDR4JTA0eCUwNHglMDR4IC0+ICIsIG0tPmJpdHNbM10sIG0tPmJpdHNbMl0sIG0tPmJpdHNbMV0sIG0tPmJpdHNbMF0pOwogI2VuZGlmCiAJCWNoYW5nZWQgPSBzbmRfbWFza19yZWZpbmUobSwgY29uc3Ryc19tYXNrKGNvbnN0cnMsIGspKTsKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQlpZiAoIShwYXJhbXMtPnJtYXNrICYgKDEgPDwgaykpKQogCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKIAkJaWYgKGktPmVtcHR5KQogCQkJcHJpbnRrKCJlbXB0eSIpOwogCQllbHNlCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCWlmICghZG9pdCkKIAkJCQljb250aW51ZTsKICNpZmRlZiBSVUxFU19ERUJVRwotCQkJcHJpbnRrKCJSdWxlICVkIFslcF06ICIsIGssIHItPmZ1bmMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJ1bGUgJWQgWyVwXTogIiwgaywgci0+ZnVuYyk7CiAJCQlpZiAoci0+dmFyID49IDApIHsKIAkJCQlwcmludGsoIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1tyLT52YXJdKTsKIAkJCQlpZiAoaHdfaXNfbWFzayhyLT52YXIpKSB7CkBAIC0zMjQ2LDkgKzMyNDYsNyBAQAogCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmcnVudGltZS0+ZmFzeW5jKTsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCmluZGV4IDJjODljMDQuLmNhODA2OGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKKysrIGIvc291bmQvY29yZS9wY21fdGltZXIuYwpAQCAtODUsMjUgKzg1LDE5IEBACiAKIHN0YXRpYyBpbnQgc25kX3BjbV90aW1lcl9zdGFydChzdHJ1Y3Qgc25kX3RpbWVyICogdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkKIAlzdWJzdHJlYW0gPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXN1YnN0cmVhbS0+dGltZXJfcnVubmluZyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV90aW1lcl9zdG9wKHN0cnVjdCBzbmRfdGltZXIgKiB0aW1lcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCQogCXN1YnN0cmVhbSA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9yYXdtaWRpLmMgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwppbmRleCAwMDI3NzdiLi40NzMyNDdjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMjI0LDE1NiArMjI0LDE0MyBAQAogCXJldHVybiAwOwogfQogCisvKiBsb29rIGZvciBhbiBhdmFpbGFibGUgc3Vic3RyZWFtIGZvciB0aGUgZ2l2ZW4gc3RyZWFtIGRpcmVjdGlvbjsKKyAqIGlmIGEgc3BlY2lmaWMgc3ViZGV2aWNlIGlzIGdpdmVuLCB0cnkgdG8gYXNzaWduIGl0CisgKi8KK3N0YXRpYyBpbnQgYXNzaWduX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLCBpbnQgc3ViZGV2aWNlLAorCQkJICAgIGludCBzdHJlYW0sIGludCBtb2RlLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKipzdWJfcmV0KQoreworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RyICpzID0gJnJtaWRpLT5zdHJlYW1zW3N0cmVhbV07CisJc3RhdGljIHVuc2lnbmVkIGludCBpbmZvX2ZsYWdzWzJdID0geworCQlbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXSA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQsCisJCVtTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0gPSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQsCisJfTsKKworCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgaW5mb19mbGFnc1tzdHJlYW1dKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwlpZiAoc3ViZGV2aWNlID49IDAgJiYgc3ViZGV2aWNlID49IHMtPnN1YnN0cmVhbV9jb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHMtPnN1YnN0cmVhbV9vcGVuZWQgPj0gcy0+c3Vic3RyZWFtX2NvdW50KQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Vic3RyZWFtLCAmcy0+c3Vic3RyZWFtcywgbGlzdCkgeworCQlpZiAoc3Vic3RyZWFtLT5vcGVuZWQpIHsKKwkJCWlmIChzdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgfHwKKwkJCSAgICAhKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCBzdWJkZXZpY2UgPT0gc3Vic3RyZWFtLT5udW1iZXIpIHsKKwkJCSpzdWJfcmV0ID0gc3Vic3RyZWFtOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qIG9wZW4gYW5kIGRvIHJlZi1jb3VudGluZyBmb3IgdGhlIGdpdmVuIHN1YnN0cmVhbSAqLworc3RhdGljIGludCBvcGVuX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIGludCBtb2RlKQoreworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5vcGVuZWQgPSAxOworCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCsrID09IDApCisJCXN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcgPSAxOworCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKKwkJc3Vic3RyZWFtLT5hcHBlbmQgPSAxOworCXJtaWRpLT5zdHJlYW1zW3N1YnN0cmVhbS0+c3RyZWFtXS5zdWJzdHJlYW1fb3BlbmVkKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBpbnQgY2xlYW51cCk7CisKK3N0YXRpYyBpbnQgcmF3bWlkaV9vcGVuX3ByaXYoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwgaW50IHN1YmRldmljZSwgaW50IG1vZGUsCisJCQkgICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzaW5wdXQgPSBOVUxMLCAqc291dHB1dCA9IE5VTEw7CisJaW50IGVycjsKKworCXJmaWxlLT5pbnB1dCA9IHJmaWxlLT5vdXRwdXQgPSBOVUxMOworCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7CisJCWVyciA9IGFzc2lnbl9zdWJzdHJlYW0ocm1pZGksIHN1YmRldmljZSwKKwkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkJICAgICAgIG1vZGUsICZzaW5wdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7CisJCWVyciA9IGFzc2lnbl9zdWJzdHJlYW0ocm1pZGksIHN1YmRldmljZSwKKwkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULAorCQkJCSAgICAgICBtb2RlLCAmc291dHB1dCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfX2Vycm9yOworCX0KKworCWlmIChzaW5wdXQpIHsKKwkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgbW9kZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfX2Vycm9yOworCX0KKwlpZiAoc291dHB1dCkgeworCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc291dHB1dCwgbW9kZSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlpZiAoc2lucHV0KQorCQkJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCAwKTsKKwkJCWdvdG8gX19lcnJvcjsKKwkJfQorCX0KKworCXJmaWxlLT5ybWlkaSA9IHJtaWRpOworCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKKwlyZmlsZS0+b3V0cHV0ID0gc291dHB1dDsKKwlyZXR1cm4gMDsKKworICAgICAgX19lcnJvcjoKKwlpZiAoc2lucHV0ICYmIHNpbnB1dC0+cnVudGltZSkKKwkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7CisJaWYgKHNvdXRwdXQgJiYgc291dHB1dC0+cnVudGltZSkKKwkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNvdXRwdXQpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGNhbGxlZCBmcm9tIHNvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgKi8KIGludCBzbmRfcmF3bWlkaV9rZXJuZWxfb3BlbihzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsIGludCBzdWJkZXZpY2UsCiAJCQkgICAgaW50IG1vZGUsIHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICogcmZpbGUpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0MSwgKmxpc3QyOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnNpbnB1dCA9IE5VTEwsICpzb3V0cHV0ID0gTlVMTDsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfcnVudGltZSAqaW5wdXQgPSBOVUxMLCAqb3V0cHV0ID0gTlVMTDsKIAlpbnQgZXJyOwogCi0JaWYgKHJmaWxlKQotCQlyZmlsZS0+aW5wdXQgPSByZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwlpZiAoc25kX0JVR19PTighcmZpbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlybWlkaSA9IHNuZF9yYXdtaWRpX3NlYXJjaChjYXJkLCBkZXZpY2UpOwotCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmIChybWlkaSA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gX19lcnJvcjE7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCF0cnlfbW9kdWxlX2dldChybWlkaS0+Y2FyZC0+bW9kdWxlKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIF9fZXJyb3IxOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUKSkgewotCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPj0gMCAmJiAodW5zaWduZWQgaW50KXN1YmRldmljZSA+PSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX29wZW5lZCA+PQotCQkgICAgcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVBR0FJTjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJaWYgKCEocm1pZGktPmluZm9fZmxhZ3MgJiBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUKSkgewotCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPj0gMCAmJiAodW5zaWduZWQgaW50KXN1YmRldmljZSA+PSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAocm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fb3BlbmVkID49Ci0JCSAgICBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVBR0FJTjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCX0KLQlsaXN0MSA9IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1zLm5leHQ7Ci0Jd2hpbGUgKDEpIHsKLQkJaWYgKGxpc3QxID09ICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtcykgewotCQkJc2lucHV0ID0gTlVMTDsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIF9fZXJyb3I7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlzaW5wdXQgPSBsaXN0X2VudHJ5KGxpc3QxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtLCBsaXN0KTsKLQkJaWYgKChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSAmJiBzaW5wdXQtPm9wZW5lZCkKLQkJCWdvdG8gX19uZXh0aTsKLQkJaWYgKHN1YmRldmljZSA8IDAgfHwgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA9PSBzaW5wdXQtPm51bWJlcikpCi0JCQlicmVhazsKLQkgICAgICBfX25leHRpOgotCQlsaXN0MSA9IGxpc3QxLT5uZXh0OwotCX0KLQlsaXN0MiA9IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcy5uZXh0OwotCXdoaWxlICgxKSB7Ci0JCWlmIChsaXN0MiA9PSAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zKSB7Ci0JCQlzb3V0cHV0ID0gTlVMTDsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQkJCWVyciA9IC1FQUdBSU47Ci0JCQkJZ290byBfX2Vycm9yOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJc291dHB1dCA9IGxpc3RfZW50cnkobGlzdDIsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0sIGxpc3QpOwotCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkgewotCQkJCWlmIChzb3V0cHV0LT5vcGVuZWQgJiYgIXNvdXRwdXQtPmFwcGVuZCkKLQkJCQkJZ290byBfX25leHRvOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc291dHB1dC0+b3BlbmVkKQotCQkJCQlnb3RvIF9fbmV4dG87Ci0JCQl9Ci0JCX0KLQkJaWYgKHN1YmRldmljZSA8IDAgfHwgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA9PSBzb3V0cHV0LT5udW1iZXIpKQotCQkJYnJlYWs7Ci0JICAgICAgX19uZXh0bzoKLQkJbGlzdDIgPSBsaXN0Mi0+bmV4dDsKLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKLQkJaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzaW5wdXQpKSA8IDApCi0JCQlnb3RvIF9fZXJyb3I7Ci0JCWlucHV0ID0gc2lucHV0LT5ydW50aW1lOwotCQlpZiAoKGVyciA9IHNpbnB1dC0+b3BzLT5vcGVuKHNpbnB1dCkpIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKLQkJc2lucHV0LT5vcGVuZWQgPSAxOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX29wZW5lZCsrOwotCX0gZWxzZSB7Ci0JCXNpbnB1dCA9IE5VTEw7Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQlpZiAoc291dHB1dC0+b3BlbmVkKQotCQkJZ290byBfX3NraXBfb3V0cHV0OwotCQlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHNvdXRwdXQpKSA8IDApIHsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKQotCQkJCXNpbnB1dC0+b3BzLT5jbG9zZShzaW5wdXQpOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCW91dHB1dCA9IHNvdXRwdXQtPnJ1bnRpbWU7Ci0JCWlmICgoZXJyID0gc291dHB1dC0+b3BzLT5vcGVuKHNvdXRwdXQpKSA8IDApIHsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKQotCQkJCXNpbnB1dC0+b3BzLT5jbG9zZShzaW5wdXQpOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JICAgICAgX19za2lwX291dHB1dDoKLQkJc291dHB1dC0+b3BlbmVkID0gMTsKLQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQotCQkJc291dHB1dC0+YXBwZW5kID0gMTsKLQkgICAgICAJaWYgKHNvdXRwdXQtPnVzZV9jb3VudCsrID09IDApCi0JCQlzb3V0cHV0LT5hY3RpdmVfc2Vuc2luZyA9IDE7Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZCsrOwotCX0gZWxzZSB7Ci0JCXNvdXRwdXQgPSBOVUxMOwotCX0KLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAocmZpbGUpIHsKLQkJcmZpbGUtPnJtaWRpID0gcm1pZGk7Ci0JCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKLQkJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7Ci0JfQotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCi0gICAgICBfX2Vycm9yOgotCWlmIChpbnB1dCAhPSBOVUxMKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc2lucHV0KTsKLQlpZiAob3V0cHV0ICE9IE5VTEwpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKLQltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotICAgICAgX19lcnJvcjE6CisJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCWVyciA9IHJhd21pZGlfb3Blbl9wcml2KHJtaWRpLCBzdWJkZXZpY2UsIG1vZGUsIHJmaWxlKTsKKwltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwlpZiAoZXJyIDwgMCkKKwkJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zODUsMTAgKzM3MiwxMyBAQAogCXVuc2lnbmVkIHNob3J0IGZmbGFnczsKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJhd21pZGlfZmlsZTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmF3bWlkaV9maWxlID0gTlVMTDsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICprY3RsOwogCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSAKKwkJcmV0dXJuIC1FSU5WQUw7CQkvKiBpbnZhbGlkIGNvbWJpbmF0aW9uICovCisKIAlpZiAobWFqID09IHNuZF9tYWpvcikgewogCQlybWlkaSA9IHNuZF9sb29rdXBfbWlub3JfZGF0YShpbWlub3IoaW5vZGUpLAogCQkJCQkgICAgICBTTkRSVl9ERVZJQ0VfVFlQRV9SQVdNSURJKTsKQEAgLTQwMiwyNCArMzkyLDI1IEBACiAKIAlpZiAocm1pZGkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSAKLQkJcmV0dXJuIC1FSU5WQUw7CQkvKiBpbnZhbGlkIGNvbWJpbmF0aW9uICovCisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJtaWRpLT5jYXJkLT5tb2R1bGUpKQorCQlyZXR1cm4gLUVOWElPOworCisJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCWNhcmQgPSBybWlkaS0+Y2FyZDsKIAllcnIgPSBzbmRfY2FyZF9maWxlX2FkZChjYXJkLCBmaWxlKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gX19lcnJvcl9jYXJkOwogCWZmbGFncyA9IHNuZF9yYXdtaWRpX2ZpbGVfZmxhZ3MoZmlsZSk7CiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpIHx8IG1haiA9PSBTT1VORF9NQUpPUikgLyogT1NTIGVtdWw/ICovCiAJCWZmbGFncyB8PSBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EOwotCWZmbGFncyB8PSBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSzsKIAlyYXdtaWRpX2ZpbGUgPSBrbWFsbG9jKHNpemVvZigqcmF3bWlkaV9maWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJhd21pZGlfZmlsZSA9PSBOVUxMKSB7Ci0JCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBfX2Vycm9yOwogCX0KIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKDEpIHsKIAkJc3ViZGV2aWNlID0gLTE7CiAJCXJlYWRfbG9jaygmY2FyZC0+Y3RsX2ZpbGVzX3J3bG9jayk7CkBAIC00MzEsOCArNDIyLDcgQEAKIAkJCX0KIAkJfQogCQlyZWFkX3VubG9jaygmY2FyZC0+Y3RsX2ZpbGVzX3J3bG9jayk7Ci0JCWVyciA9IHNuZF9yYXdtaWRpX2tlcm5lbF9vcGVuKHJtaWRpLT5jYXJkLCBybWlkaS0+ZGV2aWNlLAotCQkJCQkgICAgICBzdWJkZXZpY2UsIGZmbGFncywgcmF3bWlkaV9maWxlKTsKKwkJZXJyID0gcmF3bWlkaV9vcGVuX3ByaXYocm1pZGksIHN1YmRldmljZSwgZmZsYWdzLCByYXdtaWRpX2ZpbGUpOwogCQlpZiAoZXJyID49IDApCiAJCQlicmVhazsKIAkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CkBAIC00NTEsNjcgKzQ0MSw4OSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZShyYXdtaWRpX2ZpbGUpOworCQlnb3RvIF9fZXJyb3I7CisJfQogI2lmZGVmIENPTkZJR19TTkRfT1NTRU1VTAogCWlmIChyYXdtaWRpX2ZpbGUtPmlucHV0ICYmIHJhd21pZGlfZmlsZS0+aW5wdXQtPnJ1bnRpbWUpCiAJCXJhd21pZGlfZmlsZS0+aW5wdXQtPnJ1bnRpbWUtPm9zcyA9IChtYWogPT0gU09VTkRfTUFKT1IpOwogCWlmIChyYXdtaWRpX2ZpbGUtPm91dHB1dCAmJiByYXdtaWRpX2ZpbGUtPm91dHB1dC0+cnVudGltZSkKIAkJcmF3bWlkaV9maWxlLT5vdXRwdXQtPnJ1bnRpbWUtPm9zcyA9IChtYWogPT0gU09VTkRfTUFKT1IpOwogI2VuZGlmCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQlpZiAoZXJyID49IDApIHsKLQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmF3bWlkaV9maWxlOwotCX0gZWxzZSB7Ci0JCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOwotCQlrZnJlZShyYXdtaWRpX2ZpbGUpOwotCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSByYXdtaWRpX2ZpbGU7CiAJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJcmV0dXJuIDA7CisKKyBfX2Vycm9yOgorCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOworIF9fZXJyb3JfY2FyZDoKKwltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiBlcnI7CiB9CiAKLWludCBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqIHJmaWxlKQorc3RhdGljIHZvaWQgY2xvc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksCisJCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIGludCBjbGVhbnVwKQogewotCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9ydW50aW1lICpydW50aW1lOworCXJtaWRpLT5zdHJlYW1zW3N1YnN0cmVhbS0+c3RyZWFtXS5zdWJzdHJlYW1fb3BlbmVkLS07CisJaWYgKC0tc3Vic3RyZWFtLT51c2VfY291bnQpCisJCXJldHVybjsKIAotCWlmIChzbmRfQlVHX09OKCFyZmlsZSkpCi0JCXJldHVybiAtRU5YSU87Ci0Jcm1pZGkgPSByZmlsZS0+cm1pZGk7Ci0JbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotCWlmIChyZmlsZS0+aW5wdXQgIT0gTlVMTCkgewotCQlzdWJzdHJlYW0gPSByZmlsZS0+aW5wdXQ7Ci0JCXJmaWxlLT5pbnB1dCA9IE5VTEw7Ci0JCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JCXNuZF9yYXdtaWRpX2lucHV0X3RyaWdnZXIoc3Vic3RyZWFtLCAwKTsKLQkJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7Ci0JCWlmIChydW50aW1lLT5wcml2YXRlX2ZyZWUgIT0gTlVMTCkKLQkJCXJ1bnRpbWUtPnByaXZhdGVfZnJlZShzdWJzdHJlYW0pOwotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKLQkJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX29wZW5lZC0tOwotCX0KLQlpZiAocmZpbGUtPm91dHB1dCAhPSBOVUxMKSB7Ci0JCXN1YnN0cmVhbSA9IHJmaWxlLT5vdXRwdXQ7Ci0JCXJmaWxlLT5vdXRwdXQgPSBOVUxMOwotCQlpZiAoLS1zdWJzdHJlYW0tPnVzZV9jb3VudCA9PSAwKSB7Ci0JCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChjbGVhbnVwKSB7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCkKKwkJCXNuZF9yYXdtaWRpX2lucHV0X3RyaWdnZXIoc3Vic3RyZWFtLCAwKTsKKwkJZWxzZSB7CiAJCQlpZiAoc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZykgewogCQkJCXVuc2lnbmVkIGNoYXIgYnVmID0gMHhmZTsKLQkJCQkvKiBzZW5kaW5nIHNpbmdsZSBhY3RpdmUgc2Vuc2luZyBtZXNzYWdlIHRvIHNodXQgdGhlIGRldmljZSB1cCAqLworCQkJCS8qIHNlbmRpbmcgc2luZ2xlIGFjdGl2ZSBzZW5zaW5nIG1lc3NhZ2UKKwkJCQkgKiB0byBzaHV0IHRoZSBkZXZpY2UgdXAKKwkJCQkgKi8KIAkJCQlzbmRfcmF3bWlkaV9rZXJuZWxfd3JpdGUoc3Vic3RyZWFtLCAmYnVmLCAxKTsKIAkJCX0KIAkJCWlmIChzbmRfcmF3bWlkaV9kcmFpbl9vdXRwdXQoc3Vic3RyZWFtKSA9PSAtRVJFU1RBUlRTWVMpCiAJCQkJc25kX3Jhd21pZGlfb3V0cHV0X3RyaWdnZXIoc3Vic3RyZWFtLCAwKTsKLQkJCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQkJaWYgKHJ1bnRpbWUtPnByaXZhdGVfZnJlZSAhPSBOVUxMKQotCQkJCXJ1bnRpbWUtPnByaXZhdGVfZnJlZShzdWJzdHJlYW0pOwotCQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCQlzdWJzdHJlYW0tPm9wZW5lZCA9IDA7Ci0JCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDA7CiAJCX0KLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fb3BlbmVkLS07CiAJfQorCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZnJlZSkKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKKwlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKKwlzdWJzdHJlYW0tPm9wZW5lZCA9IDA7CisJc3Vic3RyZWFtLT5hcHBlbmQgPSAwOworfQorCitzdGF0aWMgdm9pZCByYXdtaWRpX3JlbGVhc2VfcHJpdihzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKworCXJtaWRpID0gcmZpbGUtPnJtaWRpOworCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwlpZiAocmZpbGUtPmlucHV0KSB7CisJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgcmZpbGUtPmlucHV0LCAxKTsKKwkJcmZpbGUtPmlucHV0ID0gTlVMTDsKKwl9CisJaWYgKHJmaWxlLT5vdXRwdXQpIHsKKwkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCByZmlsZS0+b3V0cHV0LCAxKTsKKwkJcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJfQorCXJmaWxlLT5ybWlkaSA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJd2FrZV91cCgmcm1pZGktPm9wZW5fd2FpdCk7Cit9CisKKy8qIGNhbGxlZCBmcm9tIHNvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgKi8KK2ludCBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKworCWlmIChzbmRfQlVHX09OKCFyZmlsZSkpCisJCXJldHVybiAtRU5YSU87CisJCisJcm1pZGkgPSByZmlsZS0+cm1pZGk7CisJcmF3bWlkaV9yZWxlYXNlX3ByaXYocmZpbGUpOwogCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsMTUgKzUzMiwxNCBAQAogewogCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCWludCBlcnI7CiAKIAlyZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShyZmlsZSk7CiAJcm1pZGkgPSByZmlsZS0+cm1pZGk7Ci0Jd2FrZV91cCgmcm1pZGktPm9wZW5fd2FpdCk7CisJcmF3bWlkaV9yZWxlYXNlX3ByaXYocmZpbGUpOwogCWtmcmVlKHJmaWxlKTsKIAlzbmRfY2FyZF9maWxlX3JlbW92ZShybWlkaS0+Y2FyZCwgZmlsZSk7Ci0JcmV0dXJuIGVycjsKKwltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9yYXdtaWRpX2luZm8oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmggYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaAppbmRleCBiZjhkMmI0Li5jMDE1NGE5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaAorKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaApAQCAtMTgxLDcgKzE4MSw3IEBACiAvKiBmb3IgZGVidWcgKi8KICNpZmRlZiBTTkRSVl9TRVFfT1NTX0RFQlVHCiBleHRlcm4gaW50IHNlcV9vc3NfZGVidWc7Ci0jZGVmaW5lIGRlYnVnX3ByaW50ayh4KQlkbyB7IGlmIChzZXFfb3NzX2RlYnVnID4gMCkgc25kX3ByaW50ayB4OyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJZG8geyBpZiAoc2VxX29zc19kZWJ1ZyA+IDApIHNuZF9wcmludGQgeDsgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGRlYnVnX3ByaW50ayh4KQkvKiovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jIGIvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMKaW5kZXggMDEwMWE4Yi4uMjk4OTZhYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMKQEAgLTMyMSw3ICszMjEsOCBAQAogCQkJZnJlZXByZXYgPSBjZWxsOwogCQl9IGVsc2UgewogI2lmIDAKLQkJCXByaW50aygidHlwZSA9ICVpLCBzb3VyY2UgPSAlaSwgZGVzdCA9ICVpLCBjbGllbnQgPSAlaVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ0eXBlID0gJWksIHNvdXJjZSA9ICVpLCBkZXN0ID0gJWksICIKKwkJCSAgICAgICAiY2xpZW50ID0gJWlcbiIsCiAJCQkJY2VsbC0+ZXZlbnQudHlwZSwKIAkJCQljZWxsLT5ldmVudC5zb3VyY2UuY2xpZW50LAogCQkJCWNlbGwtPmV2ZW50LmRlc3QuY2xpZW50LApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS90aW1lci5jIGIvc291bmQvY29yZS90aW1lci5jCmluZGV4IDc5NjUzMjAuLjNmMDA1MGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3RpbWVyLmMKQEAgLTE4MjUsMTMgKzE4MjUsOSBAQAogc3RhdGljIGludCBzbmRfdGltZXJfdXNlcl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc25kX3RpbWVyX3VzZXIgKnR1OwotCWludCBlcnI7CiAKIAl0dSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnR1LT5mYXN5bmMpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZ0dS0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc25kX3RpbWVyX3VzZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdm1hc3Rlci5jIGIvc291bmQvY29yZS92bWFzdGVyLmMKaW5kZXggNGNjNTdmOS4uMjU3NjI0YiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS92bWFzdGVyLmMKKysrIGIvc291bmQvY29yZS92bWFzdGVyLmMKQEAgLTUwLDE4ICs1MCwzOCBAQAogCXN0cnVjdCBsaW5rX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBsaW5rX2N0bF9pbmZvIGluZm87CiAJaW50IHZhbHNbMl07CQkvKiBjdXJyZW50IHZhbHVlcyAqLworCXVuc2lnbmVkIGludCBmbGFnczsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sIHNsYXZlOyAvKiB0aGUgY29weSBvZiBvcmlnaW5hbCBjb250cm9sIGVudHJ5ICovCiB9OwogCitzdGF0aWMgaW50IHNsYXZlX3VwZGF0ZShzdHJ1Y3QgbGlua19zbGF2ZSAqc2xhdmUpCit7CisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bDsKKwlpbnQgZXJyLCBjaDsKKworCXVjdGwgPSBrbWFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOworCWlmICghdWN0bCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdWN0bC0+aWQgPSBzbGF2ZS0+c2xhdmUuaWQ7CisJZXJyID0gc2xhdmUtPnNsYXZlLmdldCgmc2xhdmUtPnNsYXZlLCB1Y3RsKTsKKwlmb3IgKGNoID0gMDsgY2ggPCBzbGF2ZS0+aW5mby5jb3VudDsgY2grKykKKwkJc2xhdmUtPnZhbHNbY2hdID0gdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjaF07CisJa2ZyZWUodWN0bCk7CisJcmV0dXJuIDA7Cit9CisKIC8qIGdldCB0aGUgc2xhdmUgY3RsIGluZm8gYW5kIHNhdmUgdGhlIGluaXRpYWwgdmFsdWVzICovCiBzdGF0aWMgaW50IHNsYXZlX2luaXQoc3RydWN0IGxpbmtfc2xhdmUgKnNsYXZlKQogewogCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm87Ci0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bDsKLQlpbnQgZXJyLCBjaDsKKwlpbnQgZXJyOwogCi0JaWYgKHNsYXZlLT5pbmZvLmNvdW50KQotCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBpbml0aWFsaXplZCAqLworCWlmIChzbGF2ZS0+aW5mby5jb3VudCkgeworCQkvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJCWlmIChzbGF2ZS0+ZmxhZ3MgJiBTTkRfQ1RMX1NMQVZFX05FRURfVVBEQVRFKQorCQkJcmV0dXJuIHNsYXZlX3VwZGF0ZShzbGF2ZSk7CisJCXJldHVybiAwOworCX0KIAogCXVpbmZvID0ga21hbGxvYyhzaXplb2YoKnVpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1aW5mbykKQEAgLTg1LDE1ICsxMDUsNyBAQAogCXNsYXZlLT5pbmZvLm1heF92YWwgPSB1aW5mby0+dmFsdWUuaW50ZWdlci5tYXg7CiAJa2ZyZWUodWluZm8pOwogCi0JdWN0bCA9IGttYWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1Y3RsKQotCQlyZXR1cm4gLUVOT01FTTsKLQl1Y3RsLT5pZCA9IHNsYXZlLT5zbGF2ZS5pZDsKLQllcnIgPSBzbGF2ZS0+c2xhdmUuZ2V0KCZzbGF2ZS0+c2xhdmUsIHVjdGwpOwotCWZvciAoY2ggPSAwOyBjaCA8IHNsYXZlLT5pbmZvLmNvdW50OyBjaCsrKQotCQlzbGF2ZS0+dmFsc1tjaF0gPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKLQlrZnJlZSh1Y3RsKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2xhdmVfdXBkYXRlKHNsYXZlKTsKIH0KIAogLyogaW5pdGlhbGl6ZSBtYXN0ZXIgdm9sdW1lICovCkBAIC0yMjksNyArMjQxLDggQEAKICAqIC0gbG9nYXJpdGhtaWMgdm9sdW1lIGNvbnRyb2wgKGRCIGxldmVsKSwgbm8gbGluZWFyIHZvbHVtZQogICogLSBtYXN0ZXIgY2FuIG9ubHkgYXR0ZW51YXRlIHRoZSB2b2x1bWUsIG5vIGdhaW4KICAqLwotaW50IHNuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpCitpbnQgX3NuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGxpbmtfbWFzdGVyICptYXN0ZXJfbGluayA9IHNuZF9rY29udHJvbF9jaGlwKG1hc3Rlcik7CiAJc3RydWN0IGxpbmtfc2xhdmUgKnNyZWM7CkBAIC0yNDEsNiArMjU0LDcgQEAKIAlzcmVjLT5zbGF2ZSA9ICpzbGF2ZTsKIAltZW1jcHkoc3JlYy0+c2xhdmUudmQsIHNsYXZlLT52ZCwgc2xhdmUtPmNvdW50ICogc2l6ZW9mKCpzbGF2ZS0+dmQpKTsKIAlzcmVjLT5tYXN0ZXIgPSBtYXN0ZXJfbGluazsKKwlzcmVjLT5mbGFncyA9IGZsYWdzOwogCiAJLyogb3ZlcnJpZGUgY2FsbGJhY2tzICovCiAJc2xhdmUtPmluZm8gPSBzbGF2ZV9pbmZvOwpAQCAtMjU0LDggKzI2OCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmc3JlYy0+bGlzdCwgJm1hc3Rlcl9saW5rLT5zbGF2ZXMpOwogCXJldHVybiAwOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9jdGxfYWRkX3NsYXZlKTsKK0VYUE9SVF9TWU1CT0woX3NuZF9jdGxfYWRkX3NsYXZlKTsKIAogLyoKICAqIGN0bCBjYWxsYmFja3MgZm9yIG1hc3RlciBjb250cm9scwpAQCAtMzI3LDggKzM0MCwyMCBAQAogfQogCiAKLS8qCi0gKiBDcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUKKy8qKgorICogc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyIC0gQ3JlYXRlIGEgdmlydHVhbCBtYXN0ZXIgY29udHJvbAorICogQG5hbWU6IG5hbWUgc3RyaW5nIG9mIHRoZSBjb250cm9sIGVsZW1lbnQgdG8gY3JlYXRlCisgKiBAdGx2OiBvcHRpb25hbCBUTFYgaW50IGFycmF5IGZvciBkQiBpbmZvcm1hdGlvbgorICoKKyAqIENyZWF0ZXMgYSB2aXJ0dWFsIG1hdHN0ZXIgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lIHN0cmluZy4KKyAqIFJldHVybnMgdGhlIGNyZWF0ZWQgY29udHJvbCBlbGVtZW50LCBvciBOVUxMIGZvciBlcnJvcnMgKEVOT01FTSkuCisgKgorICogQWZ0ZXIgY3JlYXRpbmcgYSB2bWFzdGVyIGVsZW1lbnQsIHlvdSBjYW4gYWRkIHRoZSBzbGF2ZSBjb250cm9scworICogdmlhIHNuZF9jdGxfYWRkX3NsYXZlKCkgb3Igc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQoKS4KKyAqCisgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgQHRsdiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBUTFYgaW5mb3JtYXRpb24KKyAqIGZvciBkQiBzY2FsZSBvZiB0aGUgbWFzdGVyIGNvbnRyb2wuICBJdCBzaG91bGQgYmUgYSBzaW5nbGUgZWxlbWVudAorICogd2l0aCAjU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUgdHlwZSwgYW5kIHNob3VsZCBiZSB0aGUgbWF4IDBkQi4KICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKGNoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgdW5zaWduZWQgaW50ICp0bHYpCkBAIC0zNjcsNSArMzkyLDQgQEAKIAogCXJldHVybiBrY3RsOwogfQotCiBFWFBPUlRfU1lNQk9MKHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggNzNiZTdlMS4uNTQyMzlkMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNTg4LDEwICs1ODgsMTAgQEAKIAlpbnQgaWR4LCBlcnI7CiAJaW50IGRldiA9IGRldnB0ci0+aWQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2R1bW15KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZHVtbXkgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJZHVtbXktPmNhcmQgPSBjYXJkOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1BDTV9ERVZJQ0VTICYmIGlkeCA8IHBjbV9kZXZzW2Rldl07IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwppbmRleCA3NzgzODQzLi4xOTUwZmZjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKQEAgLTEyNzksOSArMTI3OSw5IEBACiAJaWYgKCFlbmFibGVbZGV2XSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAllcnIgPSBzbmRfbWw0MDNfYWM5N2NyX2NyZWF0ZShjYXJkLCBwZmRldiwgJm1sNDAzX2FjOTdjcik7CiAJaWYgKGVyciA8IDApIHsKIAkJUERFQlVHKElOSVRfRkFJTFVSRSwgInByb2JlKCk6IGNyZWF0ZSBmYWlsZWQhXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKaW5kZXggNWI5OTZmMy4uMTQ5ZDA1YSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKQEAgLTczLDkgKzczLDkgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidGhlIHVhcnRfZW50ZXIgb3B0aW9uIGlzIG9ic29sZXRlOyByZW1vdmUgaXRcbiIpOwogCiAJKnJjYXJkID0gTlVMTDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiTVBVLTQwMSBVQVJUIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgY2FyZC0+ZHJpdmVyKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgJSNseCwgIiwgY2FyZC0+c2hvcnRuYW1lLCBwb3J0W2Rldl0pOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHBhdi5jIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCmluZGV4IDQ4YjY0ZTYuLjJmOGYyOTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYworKysgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKQEAgLTMwMyw4ICszMDMsMTAgQEAKIAogCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCAweGY1KTsKIAkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgcG9ydHAtPmh3cG9ydCk7Ci0JCS8vc25kX3ByaW50aygibmV3IG91dHBvcnQ6IDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpIHBvcnRwLT5od3BvcnQpOwotCisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibmV3IG91dHBvcnQ6IDB4JXhcbiIsCisJCQkgICAodW5zaWduZWQgaW50KSBwb3J0cC0+aHdwb3J0KTsKKwkJKi8KIAkJaWYgKCEob3V0Ynl0ZSAmIDB4ODApICYmIHBvcnRwLT5ydW5uaW5nX3N0YXR1cykKIAkJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIHBvcnRwLT5ydW5uaW5nX3N0YXR1cyk7CiAJfQpAQCAtNTQwLDcgKzU0Miw3IEBACiAKIAl1OCBzYnl0ID0gc25kX210cGF2X2dldHJlZyhtY3JkLCBTUkVHKTsKIAotCS8vcHJpbnRrKCJzbmRfbXRwYXZfcmVhZF9ieXRlcygpIHNieXQ6IDB4JXhcbiIsIHNieXQpOworCS8qIHByaW50ayhLRVJOX0RFQlVHICJzbmRfbXRwYXZfcmVhZF9ieXRlcygpIHNieXQ6IDB4JXhcbiIsIHNieXQpOyAqLwogCiAJaWYgKCEoc2J5dCAmIFNJR1NfQllURSkpCiAJCXJldHVybjsKQEAgLTU4NSwxMiArNTg3LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXRwYXZfZ2V0X0lTQShzdHJ1Y3QgbXRwYXYgKiBtY2FyZCkKIHsKIAlpZiAoKG1jYXJkLT5yZXNfcG9ydCA9IHJlcXVlc3RfcmVnaW9uKHBvcnQsIDMsICJNb3R1TVRQQVYgTUlESSIpKSA9PSBOVUxMKSB7Ci0JCXNuZF9wcmludGsoIk1UVkFQIHBvcnQgMHglbHggaXMgYnVzeVxuIiwgcG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1UVkFQIHBvcnQgMHglbHggaXMgYnVzeVxuIiwgcG9ydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW1jYXJkLT5wb3J0ID0gcG9ydDsKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfbXRwYXZfaXJxaCwgSVJRRl9ESVNBQkxFRCwgIk1PVFUgTVRQQVYiLCBtY2FyZCkpIHsKLQkJc25kX3ByaW50aygiTVRWQVAgSVJRICVkIGJ1c3lcbiIsIGlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1UVkFQIElSUSAlZCBidXN5XG4iLCBpcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAltY2FyZC0+aXJxID0gaXJxOwpAQCAtNjk2LDkgKzY5OCw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbXRwYXYgKm10cF9jYXJkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKm10cF9jYXJkKSk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqbXRwX2NhcmQpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAltdHBfY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmbXRwX2NhcmQtPnNwaW5sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYyBiL3NvdW5kL2RyaXZlcnMvbXRzNjQuYwppbmRleCA4N2JhMWRkLi45Mjg0ODI5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210czY0LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCkBAIC05NTcsMTAgKzk1NywxMCBAQAogCWlmICgoZXJyID0gc25kX210czY0X3Byb2JlX3BvcnQocCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRkKCJDYW5ub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJFU0kgIiBDQVJEX05BTUUpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAKIAkJZ290byBfX2VycjsKIAl9CiAKLQlzbmRfcHJpbnRrKCJFU0kgTWlkaXRlcm1pbmFsIDQxNDAgb24gMHglbHhcbiIsIHAtPmJhc2UpOworCXNuZF9wcmludGsoS0VSTl9JTkZPICJFU0kgTWlkaXRlcm1pbmFsIDQxNDAgb24gMHglbHhcbiIsIHAtPmJhc2UpOwogCXJldHVybiAwOwogCiBfX2VycjoKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKaW5kZXggNzgwNTgyMy4uNmUzMWU0NiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCW9wbDMgPSBody0+cHJpdmF0ZV9kYXRhOwogCXN0YXR1cyA9IGluYihvcGwzLT5sX3BvcnQpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJBZExpYiBJUlEgc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkFkTGliIElSUSBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOwogI2VuZGlmCiAJaWYgKCEoc3RhdHVzICYgMHg4MCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwppbmRleCAxNmZlYWZhLi42ZTdkMDlhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlpbnQgaTsKIAljaGFyICpzdHIgPSAieC4yNCI7CiAKLQlwcmludGsoInRpbWUgJS41aTogJXMgWyUuMmldOiAiLCBvcGwzLT51c2VfdGltZSwgcywgdm9pY2UpOworCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lICUuNWk6ICVzIFslLjJpXTogIiwgb3BsMy0+dXNlX3RpbWUsIHMsIHZvaWNlKTsKIAlmb3IgKGkgPSAwOyBpIDwgb3BsMy0+bWF4X3ZvaWNlczsgaSsrKQogCQlwcmludGsoIiVjIiwgKihzdHIgKyBvcGwzLT52b2ljZXNbaV0uc3RhdGUgKyAxKSk7CiAJcHJpbnRrKCJcbiIpOwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IEVORDsgaSsrKSB7CiAJCWlmIChiZXN0W2ldLnZvaWNlID49IDApIHsKICNpZmRlZiBERUJVR19BTExPQwotCQkJcHJpbnRrKCIlcyAlaW9wIGFsbG9jYXRpb24gb24gdm9pY2UgJWlcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgJWlvcCBhbGxvY2F0aW9uIG9uIHZvaWNlICVpXG4iLAogCQkJICAgICAgIGFsbG9jX3R5cGVbaV0sIGluc3RyXzRvcCA/IDQgOiAyLAogCQkJICAgICAgIGJlc3RbaV0udm9pY2UpOwogI2VuZGlmCkBAIC0zMTcsNyArMzE3LDcgQEAKIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOb3RlIG9uLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaSwgdmVsICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiTm90ZSBvbiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWksIHZlbCAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0sIG5vdGUsIHZlbCk7CiAjZW5kaWYKIApAQCAtMzcyLDcgKzM3Miw3IEBACiAJCXJldHVybjsKIAl9CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IE9QTCVpIGluc3RydW1lbnQ6ICVzXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gT1BMJWkgaW5zdHJ1bWVudDogJXNcbiIsCiAJCSAgIGluc3RyXzRvcCA/IDMgOiAyLCBwYXRjaC0+bmFtZSk7CiAjZW5kaWYKIAkvKiBpbiBTWU5USCBtb2RlLCBhcHBsaWNhdGlvbiB0YWtlcyBjYXJlIG9mIHZvaWNlcyAqLwpAQCAtNDMxLDcgKzQzMSw3IEBACiAJfQogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IHNldHRpbmcgT1BMMyBjb25uZWN0aW9uOiAweCV4XG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gc2V0dGluZyBPUEwzIGNvbm5lY3Rpb246IDB4JXhcbiIsCiAJCSAgIG9wbDMtPmNvbm5lY3Rpb25fcmVnKTsKICNlbmRpZgogCS8qCkBAIC00NjYsNyArNDY2LDcgQEAKIAkvKiBQcm9ncmFtIHRoZSBGTSB2b2ljZSBjaGFyYWN0ZXJpc3RpY3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKGluc3RyXzRvcCA/IDQgOiAyKTsgaSsrKSB7CiAjaWZkZWYgREVCVUdfTUlESQotCQlzbmRfcHJpbnRrKCIgIC0tPiBwcm9ncmFtbWluZyBvcGVyYXRvciAlaVxuIiwgaSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gcHJvZ3JhbW1pbmcgb3BlcmF0b3IgJWlcbiIsIGkpOwogI2VuZGlmCiAJCW9wX29mZnNldCA9IHNuZF9vcGwzX3JlZ21hcFt2b2ljZV9vZmZzZXRdW2ldOwogCkBAIC01NDYsNyArNTQ2LDcgQEAKIAlibG9ja251bSB8PSBPUEwzX0tFWU9OX0JJVDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiB0cmlnZ2VyIHZvaWNlICVpXG4iLCB2b2ljZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiB0cmlnZ2VyIHZvaWNlICVpXG4iLCB2b2ljZSk7CiAjZW5kaWYKIAkvKiBTZXQgT1BMMyBLRVlPTl9CTE9DSyByZWdpc3RlciBvZiByZXF1ZXN0ZWQgdm9pY2UgKi8gCiAJb3BsM19yZWcgPSByZWdfc2lkZSB8IChPUEwzX1JFR19LRVlPTl9CTE9DSyArIHZvaWNlX29mZnNldCk7CkBAIC02MDIsNyArNjAyLDcgQEAKIAkJCXByZyA9IGV4dHJhX3ByZyAtIDE7CiAJCX0KICNpZmRlZiBERUJVR19NSURJCi0JCXNuZF9wcmludGsoIiAqKiogYWxsb2NhdGluZyBleHRyYSBwcm9ncmFtXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgKioqIGFsbG9jYXRpbmcgZXh0cmEgcHJvZ3JhbVxuIik7CiAjZW5kaWYKIAkJZ290byBfX2V4dHJhX3ByZzsKIAl9CkBAIC02MzMsNyArNjMzLDcgQEAKIAogCS8qIGtpbGwgdm9pY2UgKi8KICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4ga2lsbCB2b2ljZSAlaVxuIiwgdm9pY2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4ga2lsbCB2b2ljZSAlaVxuIiwgdm9pY2UpOwogI2VuZGlmCiAJb3BsM19yZWcgPSByZWdfc2lkZSB8IChPUEwzX1JFR19LRVlPTl9CTE9DSyArIHZvaWNlX29mZnNldCk7CiAJLyogY2xlYXIgS2V5IE9OIGJpdCAqLwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJb3BsMyA9IHA7CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiTm90ZSBvZmYsIGNoICVpLCBpbnN0ICVpLCBub3RlICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiTm90ZSBvZmYsIGNoICVpLCBpbnN0ICVpLCBub3RlICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSk7CiAjZW5kaWYKIApAQCAtNzA5LDcgKzcwOSw3IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiS2V5IHByZXNzdXJlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJLZXkgcHJlc3N1cmUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0pOwogI2VuZGlmCiB9CkBAIC03MjMsNyArNzIzLDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJUZXJtaW5hdGUgbm90ZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiVGVybWluYXRlIG5vdGUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0pOwogI2VuZGlmCiB9CkBAIC04MTIsNyArODEyLDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJDb250cm9sbGVyLCBUWVBFID0gJWksIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkNvbnRyb2xsZXIsIFRZUEUgPSAlaSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICB0eXBlLCBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIApAQCAtODQ5LDcgKzg0OSw3IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiTlJQTiwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiTlJQTiwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTg2NCw2ICs4NjQsNiBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIlNZU0VYXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIlNZU0VYXG4iKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYwppbmRleCA5YTIyNzFkLi5hNTRiMWRjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYwpAQCAtMjIwLDE0ICsyMjAsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY291bnQgPCAoaW50KXNpemVvZihzYmkpKSB7Ci0JCXNuZF9wcmludGsoIkZNIEVycm9yOiBQYXRjaCByZWNvcmQgdG9vIHNob3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiRk0gRXJyb3I6IFBhdGNoIHJlY29yZCB0b28gc2hvcnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzYmksIGJ1Ziwgc2l6ZW9mKHNiaSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChzYmkuY2hhbm5lbCA8IDAgfHwgc2JpLmNoYW5uZWwgPj0gU0JGTV9NQVhJTlNUUikgewotCQlzbmRfcHJpbnRrKCJGTSBFcnJvcjogSW52YWxpZCBpbnN0cnVtZW50IG51bWJlciAlZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiRk0gRXJyb3I6IEludmFsaWQgaW5zdHJ1bWVudCBudW1iZXIgJWRcbiIsCiAJCQkgICBzYmkuY2hhbm5lbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1NCw3ICsyNTQsOSBAQAogCW9wbDMgPSBhcmctPnByaXZhdGVfZGF0YTsKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIFNORENUTF9GTV9MT0FEX0lOU1RSOgotCQkJc25kX3ByaW50aygiT1BMMzogT2Jzb2xldGUgaW9jdGwoU05EQ1RMX0ZNX0xPQURfSU5TVFIpIHVzZWQuIEZpeCB0aGUgcHJvZ3JhbS5cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiT1BMMzogIgorCQkJCSAgICJPYnNvbGV0ZSBpb2N0bChTTkRDVExfRk1fTE9BRF9JTlNUUikgdXNlZC4gIgorCQkJCSAgICJGaXggdGhlIHByb2dyYW0uXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNhc2UgU05EQ1RMX1NZTlRIX01FTUFWTDoKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCmluZGV4IDk2MmJiOWMuLjZkNTdiNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygidW5rbm93biBJT0NUTDogMHgleFxuIiwgY21kKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInVua25vd24gSU9DVEw6IDB4JXhcbiIsIGNtZCk7CiAjZW5kaWYKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYwppbmRleCBhNDA0OWViLi5iNjBjZWYyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAllbHNlCiAJCW1pbl9kaXYgPSBNQVhfRElWOwogI2lmIFBDU1BfREVCVUcKLQlwcmludGsoIlBDU1A6IGxwaj0lbGksIG1pbl9kaXY9JWksIHJlcz0lbGlcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDU1A6IGxwaj0lbGksIG1pbl9kaXY9JWksIHJlcz0lbGlcbiIsCiAJICAgICAgIGxvb3BzX3Blcl9qaWZmeSwgbWluX2RpdiwgdHAudHZfbnNlYyk7CiAjZW5kaWYKIApAQCAtOTgsOSArOTgsOSBAQAogCWhydGltZXJfaW5pdCgmcGNzcF9jaGlwLnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCXBjc3BfY2hpcC50aW1lci5mdW5jdGlvbiA9IHBjc3BfZG9fdGltZXI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9wY3NwX2NyZWF0ZShjYXJkKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wb3J0bWFuMng0LmMgYi9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYwppbmRleCBiMWMwNDdlLi42MDE1OGUyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYworKysgYi9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYwpAQCAtNzQ2LDEwICs3NDYsMTAgQEAKIAlpZiAoKGVyciA9IHNuZF9wb3J0bWFuX3Byb2JlX3BvcnQocCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRkKCJDYW5ub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIENBUkRfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCmluZGV4IGQ4YWFiOWQuLmIyYjZkNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jCkBAIC0yNDEsNyArMjQxLDggQEAKIAkJCXNuZF9yYXdtaWRpX3JlY2VpdmUodWFydC0+bWlkaV9pbnB1dFtzdWJzdHJlYW1dLCAmYywgMSk7CiAKIAkJaWYgKHN0YXR1cyAmIFVBUlRfTFNSX09FKQotCQkJc25kX3ByaW50aygiJXM6IE92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiJXM6IE92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAogCQkJICAgICAgIHVhcnQtPnJtaWRpLT5uYW1lLCB1YXJ0LT5iYXNlKTsKIAl9CiAKQEAgLTYzNiw3ICs2MzcsOCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCFzbmRfdWFydDE2NTUwX3dyaXRlX2J1ZmZlcih1YXJ0LCBtaWRpX2J5dGUpKSB7Ci0JCQlzbmRfcHJpbnRrKCIlczogQnVmZmVyIG92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiJXM6IEJ1ZmZlciBvdmVycnVuIG9uIGRldmljZSBhdCAweCVseFxuIiwKIAkJCQkgICB1YXJ0LT5ybWlkaS0+bmFtZSwgdWFydC0+YmFzZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtODE1LDcgKzgxNyw4IEBACiAJaWYgKGlycSA+PSAwICYmIGlycSAhPSBTTkRSVl9BVVRPX0lSUSkgewogCQlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfdWFydDE2NTUwX2ludGVycnVwdCwKIAkJCQlJUlFGX0RJU0FCTEVELCAiU2VyaWFsIE1JREkiLCB1YXJ0KSkgewotCQkJc25kX3ByaW50aygiaXJxICVkIGJ1c3kuIFVzaW5nIFBvbGxpbmcuXG4iLCBpcnEpOworCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiaXJxICVkIGJ1c3kuIFVzaW5nIFBvbGxpbmcuXG4iLCBpcnEpOwogCQl9IGVsc2UgewogCQkJdWFydC0+aXJxID0gaXJxOwogCQl9CkBAIC05MTksMjYgKzkyMiwyOSBAQAogCWNhc2UgU05EUlZfU0VSSUFMX0dFTkVSSUM6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIkFkYXB0b3IgdHlwZSBpcyBvdXQgb2YgcmFuZ2UgMC0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQWRhcHRvciB0eXBlIGlzIG91dCBvZiByYW5nZSAwLSVkICglZClcbiIsCiAJCQkgICBTTkRSVl9TRVJJQUxfTUFYX0FEQVBUT1IsIGFkYXB0b3JbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChvdXRzW2Rldl0gPCAxIHx8IG91dHNbZGV2XSA+IFNORFJWX1NFUklBTF9NQVhfT1VUUykgewotCQlzbmRfcHJpbnRrKCJDb3VudCBvZiBvdXRwdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDb3VudCBvZiBvdXRwdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCiAJCQkgICBTTkRSVl9TRVJJQUxfTUFYX09VVFMsIG91dHNbZGV2XSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChpbnNbZGV2XSA8IDEgfHwgaW5zW2Rldl0gPiBTTkRSVl9TRVJJQUxfTUFYX0lOUykgewotCQlzbmRfcHJpbnRrKCJDb3VudCBvZiBpbnB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkNvdW50IG9mIGlucHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAogCQkJICAgU05EUlZfU0VSSUFMX01BWF9JTlMsIGluc1tkZXZdKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2FyZCAgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciAgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTZXJpYWwiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU2VyaWFsIE1JREkgKFVBUlQxNjU1MEEpIik7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYyBiL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCmluZGV4IGY3OWUzNjEuLjBlNjMxYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCkBAIC05MCwxNSArOTAsMTcgQEAKIAlpbnQgaWR4LCBlcnI7CiAJaW50IGRldiA9IGRldnB0ci0+aWQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAl2bWlkaSA9IChzdHJ1Y3Qgc25kX2NhcmRfdmlybWlkaSAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAl2bWlkaS0+Y2FyZCA9IGNhcmQ7CiAKIAlpZiAobWlkaV9kZXZzW2Rldl0gPiBNQVhfTUlESV9ERVZJQ0VTKSB7Ci0JCXNuZF9wcmludGsoInRvbyBtdWNoIG1pZGkgZGV2aWNlcyBmb3IgdmlybWlkaSAlZDogZm9yY2UgdG8gdXNlICVkXG4iLCBkZXYsIE1BWF9NSURJX0RFVklDRVMpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgInRvbyBtdWNoIG1pZGkgZGV2aWNlcyBmb3IgdmlybWlkaSAlZDogIgorCQkJICAgImZvcmNlIHRvIHVzZSAlZFxuIiwgZGV2LCBNQVhfTUlESV9ERVZJQ0VTKTsKIAkJbWlkaV9kZXZzW2Rldl0gPSBNQVhfTUlESV9ERVZJQ0VTOwogCX0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IG1pZGlfZGV2c1tkZXZdOyBpZHgrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYwppbmRleCAxNGUzMzU0Li4xOWM2ZTM3IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYwpAQCAtNjg4LDcgKzY4OCw4IEBACiAJCWltYWdlID0gZHNwLT5kYXRhICsgaTsKIAkJLyogV2FpdCBEU1AgcmVhZHkgZm9yIGEgbmV3IHJlYWQgKi8KIAkJaWYgKChlcnIgPSB2eF93YWl0X2lzcl9iaXQoY2hpcCwgSVNSX1RYX0VNUFRZKSkgPCAwKSB7Ci0JCQlwcmludGsoImRzcCBsb2FkaW5nIGVycm9yIGF0IHBvc2l0aW9uICVkXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJkc3AgbG9hZGluZyBlcnJvciBhdCBwb3NpdGlvbiAlZFxuIiwgaSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWNwdHIgPSBpbWFnZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwppbmRleCA4ZDYzNjJlLi40NmRmODgxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCkBAIC0xMTksMTYgKzExOSw2IEBACiAKICNlbHNlIC8qIG9sZCBzdHlsZSBmaXJtd2FyZSBsb2FkaW5nICovCiAKLXN0YXRpYyBpbnQgdnhfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnhfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdnhfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC0yNDMsOCArMjMzLDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1ZYOwogCWh3LT5wcml2YXRlX2RhdGEgPSBjaGlwOwotCWh3LT5vcHMub3BlbiA9IHZ4X2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gdnhfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSB2eF9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSB2eF9od2RlcF9kc3BfbG9hZDsKIAlody0+ZXhjbHVzaXZlID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCmluZGV4IDBlMWJhOWIuLmIwNTYwZmVjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3Vlci5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogICogcmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIFVFUiwgb3IgMCBpZiBub3Qgc3luYywKICAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotc3RhdGljIGludCB2eF9yZWFkX3Vlcl9zdGF0dXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCAqbW9kZSkKK3N0YXRpYyBpbnQgdnhfcmVhZF91ZXJfc3RhdHVzKHN0cnVjdCB2eF9jb3JlICpjaGlwLCB1bnNpZ25lZCBpbnQgKm1vZGUpCiB7CiAJaW50IHZhbCwgZnJlcTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaTJjL01ha2VmaWxlIGIvc291bmQvaTJjL01ha2VmaWxlCmluZGV4IDM3OTcwNjY2Li4zNjg3OWJmIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvTWFrZWZpbGUKKysrIGIvc291bmQvaTJjL01ha2VmaWxlCkBAIC03LDggKzcsNiBAQAogc25kLWNzODQyNy1vYmpzIDo9IGNzODQyNy5vCiBzbmQtdGVhNjMzMHQtb2JqcyA6PSB0ZWE2MzMwdC5vCiAKLW9iai0kKENPTkZJR19MMykgKz0gbDMvCi0KIG9iai0kKENPTkZJR19TTkQpICs9IG90aGVyLwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvbDMvTWFrZWZpbGUgYi9zb3VuZC9pMmMvbDMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDU1YjguLjAwMDAwMDAKLS0tIGEvc291bmQvaTJjL2wzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciBBTFNBCi0jCi0KLXNuZC11ZGExMzQxLW9ianMgOj0gdWRhMTM0MS5vCi0KLSMgTW9kdWxlIERlcGVuZGVuY3kKLW9iai0kKENPTkZJR19TTkRfU0ExMVhYX1VEQTEzNDEpICs9IHNuZC11ZGExMzQxLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMgYi9zb3VuZC9pMmMvbDMvdWRhMTM0MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQwZWI0Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzUgKzAsMCBAQAotLyoKLSAqIFBoaWxpcHMgVURBMTM0MSBtaXhlciBkZXZpY2UgZHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgVG9tYXMgS2FzcGFyZWsgPHRvbWFzLmthc3BhcmVrQHNlem5hbS5jej4KLSAqCi0gKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAyMDAwIExlcm5vdXQgJiBIYXVzcGllIFNwZWVjaCBQcm9kdWN0cywgTi5WLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIEhpc3Rvcnk6Ci0gKgotICogMjAwMi0wMy0xMyAgIFRvbWFzIEthc3BhcmVrICBpbml0aWFsIHJlbGVhc2UgLSBiYXNlZCBvbiB1ZGExMzQxLmMgZnJvbSBPU1MKLSAqIDIwMDItMDMtMjggICBUb21hcyBLYXNwYXJlayAgYmFzaWMgbWl4ZXIgaXMgd29ya2luZyAodm9sdW1lLCBiYXNzLCB0cmVibGUpCi0gKiAyMDAyLTAzLTMwICAgVG9tYXMgS2FzcGFyZWsgIHByb2MgZmlsZXN5c3RlbSBzdXBwb3J0LCBjb21wbGV0ZSBtaXhlciBhbmQgRFNQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHN1cHBvcnQKLSAqIDIwMDItMDQtMTIJVG9tYXMgS2FzcGFyZWsJcHJvYyBpbnRlcmZhY2UgdXBkYXRlLCBjb2RlIGNsZWFudXAKLSAqIDIwMDItMDUtMTIgICBUb21hcyBLYXNwYXJlayAgYW5vdGhlciBjb2RlIGNsZWFudXAKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9sMy9sMy5oPgotCi0jaW5jbHVkZSA8c291bmQvdWRhMTM0MS5oPgotCi0vKiB7e3sgSFcgcmVncyBkZWZpbml0aW9uICovCi0KLSNkZWZpbmUgU1RBVDAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBTVEFUMQkJCTB4ODAKLSNkZWZpbmUgU1RBVF9NQVNLICAgICAgICAgICAgICAgMHg4MAotCi0jZGVmaW5lIERBVEEwXzAJCQkweDAwCi0jZGVmaW5lIERBVEEwXzEJCQkweDQwCi0jZGVmaW5lIERBVEEwXzIJCQkweDgwCi0jZGVmaW5lIERBVEFfTUFTSyAgICAgICAgICAgICAgIDB4YzAKLQotI2RlZmluZSBJU19EQVRBMCh4KSAgICAgKCh4KSA+PSBkYXRhMF8wICYmICh4KSA8PSBkYXRhMF8yKQotI2RlZmluZSBJU19EQVRBMSh4KSAgICAgKCh4KSA9PSBkYXRhMSkKLSNkZWZpbmUgSVNfU1RBVFVTKHgpICAgICgoeCkgPT0gc3RhdDAgfHwgKHgpID09IHN0YXQxKQotI2RlZmluZSBJU19FWFRFTkQoeCkgICAoKHgpID49IGV4dDAgJiYgKHgpIDw9IGV4dDYpCi0KLS8qIH19fSAqLwotCi0KLXN0YXRpYyBjb25zdCBjaGFyICpwZWFrX25hbWVzW10gPSB7Ci0JImJlZm9yZSIsCi0JImFmdGVyIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpmaWx0ZXJfbmFtZXNbXSA9IHsKLQkiZmxhdCIsCi0JIm1pbiIsCi0JIm1pbiIsCi0JIm1heCIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqbWl4ZXJfbmFtZXNbXSA9IHsKLQkiZG91YmxlIGRpZmZlcmVudGlhbCIsCi0JImlucHV0IGNoYW5uZWwgMSAobGluZSBpbikiLAotCSJpbnB1dCBjaGFubmVsIDIgKG1pY3JvcGhvbmUpIiwKLQkiZGlnaXRhbCBtaXhlciIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZGVlbXBfbmFtZXNbXSA9IHsKLQkibm9uZSIsCi0JIjMyIGtIeiIsCi0JIjQ0LjEga0h6IiwKLQkiNDgga0h6IiwgICAgICAgIAotfTsKLQotZW51bSB1ZGExMzQxX3JlZ3NfbmFtZXMgewotCXN0YXQwLAotCXN0YXQxLAotCWRhdGEwXzAsCi0JZGF0YTBfMSwKLQlkYXRhMF8yLAotCWRhdGExLAotCWV4dDAsCi0JZXh0MSwKLQlleHQyLAotCWVtcHR5LAotCWV4dDQsCi0JZXh0NSwKLQlleHQ2LAotCXVkYTEzNDFfcmVnX2xhc3QsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqdWRhMTM0MV9yZWdfbmFtZXNbXSA9IHsKLQkic3RhdCAwICIsCi0JInN0YXQgMSAiLAotCSJkYXRhIDAwIiwKLQkiZGF0YSAwMSIsCi0JImRhdGEgMDIiLAotCSJkYXRhIDEgIiwKLQkiZXh0IDAiLAotCSJleHQgMSIsCi0JImV4dCAyIiwKLQkiZW1wdHkiLAotCSJleHQgNCIsCi0JImV4dCA1IiwKLQkiZXh0IDYiLAotfTsKLQotc3RhdGljIGNvbnN0IGludCB1ZGExMzQxX2VudW1faXRlbXNbXSA9IHsKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCTIsIC8vcGVhayAtIGJlZm9yZS9hZnRlcgotCTQsIC8vZGVlbXAgLSBub25lLzMyLzQ0LjEvNDgKLQkwLAotCTQsIC8vZmlsdGVyIC0gZmxhdC9taW4vbWluL21heAotCTAsIDAsIDAsCi0JNCwgLy9taXhlciAtIGRpZmZlci9saW5lL21pYy9taXhlcgotCTAsIDAsIDAsIDAsIDAsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqKiB1ZGExMzQxX2VudW1fbmFtZXNbXSA9IHsKLQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotCXBlYWtfbmFtZXMsIC8vcGVhayAtIGJlZm9yZS9hZnRlcgotCWRlZW1wX25hbWVzLCAvL2RlZW1wIC0gbm9uZS8zMi80NC4xLzQ4Ci0JTlVMTCwKLQlmaWx0ZXJfbmFtZXMsIC8vZmlsdGVyIC0gZmxhdC9taW4vbWluL21heAotCU5VTEwsIE5VTEwsIE5VTEwsCi0JbWl4ZXJfbmFtZXMsIC8vbWl4ZXIgLSBkaWZmZXIvbGluZS9taWMvbWl4ZXIKLQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotfTsKLQotdHlwZWRlZiBpbnQgdWRhMTM0MV9jZmdbQ01EX0xBU1RdOwotCi1zdHJ1Y3QgdWRhMTM0MSB7Ci0JaW50ICgqd3JpdGUpIChzdHJ1Y3QgbDNfY2xpZW50ICp1ZGExMzQxLCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCk7Ci0JaW50ICgqcmVhZCkgKHN0cnVjdCBsM19jbGllbnQgKnVkYTEzNDEsIHVuc2lnbmVkIHNob3J0IHJlZyk7ICAgICAgICAKLQl1bnNpZ25lZCBjaGFyIHJlZ3NbdWRhMTM0MV9yZWdfbGFzdF07Ci0JaW50IGFjdGl2ZTsKLQlzcGlubG9ja190IHJlZ19sb2NrOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQl1ZGExMzQxX2NmZyBjZmc7Ci0jaWZkZWYgQ09ORklHX1BNCi0JdW5zaWduZWQgY2hhciBzdXNwZW5kX3JlZ3NbdWRhMTM0MV9yZWdfbGFzdF07Ci0JdWRhMTM0MV9jZmcgc3VzcGVuZF9jZmc7Ci0jZW5kaWYKLX07Ci0KLS8qIHRyYW5zZmVyIDhiaXQgaW50ZWdlciBpbnRvIHN0cmluZyB3aXRoIGJpbmFyeSByZXByZXNlbnRhdGlvbiAqLwotc3RhdGljIHZvaWQgaW50MnN0cl9iaW44KHVpbnQ4X3QgdmFsLCBjaGFyICpidWYpCi17Ci0JY29uc3QgaW50IHNpemUgPSBzaXplb2YodmFsKSAqIDg7Ci0JaW50IGk7Ci0KLQlmb3IgKGk9IDA7IGkgPCBzaXplOyBpKyspewotCQkqKGJ1ZisrKSA9ICh2YWwgPj4gKHNpemUgLSAxKSkgPyAnMScgOiAnMCc7Ci0JCXZhbCA8PD0gMTsKLQl9Ci0JKmJ1ZiA9ICdcMCc7IC8vZW5kIHRoZSBzdHJpbmcgd2l0aCB6ZXJvCi19Ci0KLS8qIHt7eyBIVyBtYW5pcHVsYXRpb24gcm91dGluZXMgKi8KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jb2RlY193cml0ZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgY2hhciBidWZbMl0gPSB7IDB4YzAsIDB4ZTAgfTsgLy8gZm9yIEVYVCBhZGRyZXNzaW5nCi0JaW50IGVyciA9IDA7Ci0KLQl1ZGEtPnJlZ3NbcmVnXSA9IHZhbDsKLQotCWlmICh1ZGEtPmFjdGl2ZSkgewotCQlpZiAoSVNfREFUQTAocmVnKSkgewotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19EQVRBMShyZWcpKSB7Ci0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEExLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOwotCQl9IGVsc2UgaWYgKElTX1NUQVRVUyhyZWcpKSB7Ci0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX1NUQVRVUywgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKLQkJfSBlbHNlIGlmIChJU19FWFRFTkQocmVnKSkgewotCQkJYnVmWzBdIHw9IChyZWcgLSBleHQwKSAmIDB4NzsgICAvL0VYVCBhZGRyZXNzCi0JCQlidWZbMV0gfD0gdmFsOyAgICAgICAgICAgICAgICAgIC8vRVhUIGRhdGEKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTAsIChjb25zdCB1bnNpZ25lZCBjaGFyICopYnVmLCAyKTsKLQkJfQotCX0gZWxzZQotCQlwcmludGsoS0VSTl9FUlIgIlVEQTEzNDEgY29kZWMgbm90IGFjdGl2ZSFcbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY29kZWNfcmVhZChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JdW5zaWduZWQgY2hhciB2YWw7Ci0JaW50IGVycjsKLQotCWVyciA9IGwzX3JlYWQoY2xudCwgcmVnLCAmdmFsLCAxKTsKLQlpZiAoZXJyID09IDEpCi0JCS8vIHVzZSBqdXN0IDZiaXRzIC0gdGhlIHJlc3QgaXMgYWRkcmVzcyBvZiB0aGUgcmVnCi0JCXJldHVybiB2YWwgJiA2MzsKLQlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IC1FSU87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNuZF91ZGExMzQxX3ZhbGlkX3JlZyhzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JcmV0dXJuIHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgdW5zaWduZWQgc2hvcnQgcmVnLAotCQkJCSAgIHVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHNoaWZ0LAotCQkJCSAgIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBpbnQgZmx1c2gpCi17Ci0JaW50IGNoYW5nZTsKLQl1bnNpZ25lZCBzaG9ydCBvbGQsIG5ldzsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgInVwZGF0ZV9iaXRzOiByZWc6ICVzIG1hc2s6ICVkIHNoaWZ0OiAlZCB2YWw6ICVkXG4iLAotCSAgICAgICB1ZGExMzQxX3JlZ19uYW1lc1tyZWddLCBtYXNrLCBzaGlmdCwgdmFsdWUpOwotI2VuZGlmCi0gICAgICAgIAotCWlmICghc25kX3VkYTEzNDFfdmFsaWRfcmVnKGNsbnQsIHJlZykpCi0JCXJldHVybiAtRUlOVkFMOwotCXNwaW5fbG9jaygmdWRhLT5yZWdfbG9jayk7Ci0Jb2xkID0gdWRhLT5yZWdzW3JlZ107Ci0JbmV3ID0gKG9sZCAmIH4obWFzayA8PCBzaGlmdCkpIHwgKHZhbHVlIDw8IHNoaWZ0KTsKLQljaGFuZ2UgPSBvbGQgIT0gbmV3OwotCWlmIChjaGFuZ2UpIHsKLQkJaWYgKGZsdXNoKSB1ZGEtPndyaXRlKGNsbnQsIHJlZywgbmV3KTsKLQkJdWRhLT5yZWdzW3JlZ10gPSBuZXc7Ci0JfQotCXNwaW5fdW5sb2NrKCZ1ZGEtPnJlZ19sb2NrKTsKLQlyZXR1cm4gY2hhbmdlOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NmZ193cml0ZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCB3aGF0LAotCQkJCSB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgaW50IGZsdXNoKQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgcmV0ID0gMDsKLSNpZmRlZiBDT05GSUdfUE0KLQlpbnQgcmVnOwotI2VuZGlmCi0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgImNmZ193cml0ZSB3aGF0OiAlZCB2YWx1ZTogJWRcbiIsIHdoYXQsIHZhbHVlKTsKLSNlbmRpZgotCi0JdWRhLT5jZmdbd2hhdF0gPSB2YWx1ZTsKLSAgICAgICAgCi0Jc3dpdGNoKHdoYXQpIHsKLQljYXNlIENNRF9SRVNFVDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMSwgMiwgMSwgZmx1c2gpOwkvLyBNVVRFCi0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAxLCA2LCAxLCBmbHVzaCk7CS8vIFJFU0VUCi0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQwLCAxLCA2LCAwLCBmbHVzaCk7CS8vIFJFU1RPUkUKLQkJdWRhLT5jZmdbQ01EX1JFU0VUXT0wOwotCQlicmVhazsKLQljYXNlIENNRF9GUzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDMsIDQsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0ZPUk1BVDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDcsIDEsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX09HQUlOOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MSwgMSwgNiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfSUdBSU46Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCA1LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9EQUM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BREM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCAxLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9WT0xVTUU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzAsIDYzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9CQVNTOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8xLCAxNSwgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfVFJFQkJMRToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMSwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfUEVBSzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMSwgNSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfREVFTVA6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDMsIDMsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01VVEU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzIsIDEsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0ZJTFRFUjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQ0gxOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQwLCAzMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQ0gyOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQxLCAzMSwgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTUlDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQyLCA3LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NSVhFUjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0MiwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQUdDOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ0LCAxLCA0LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9JRzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NCwgMywgMCwgdmFsdWUgJiAweDMsIGZsdXNoKTsKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NSwgMzEsIDAsIHZhbHVlID4+IDIsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQUdDX1RJTUU6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDYsIDcsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FHQ19MRVZFTDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NiwgMywgMCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1BNCQkKLQljYXNlIENNRF9TVVNQRU5EOgotCQlmb3IgKHJlZyA9IHN0YXQwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcrKykKLQkJCXVkYS0+c3VzcGVuZF9yZWdzW3JlZ10gPSB1ZGEtPnJlZ3NbcmVnXTsKLQkJZm9yIChyZWcgPSAwOyByZWcgPCBDTURfTEFTVDsgcmVnKyspCi0JCQl1ZGEtPnN1c3BlbmRfY2ZnW3JlZ10gPSB1ZGEtPmNmZ1tyZWddOwotCQlicmVhazsKLQljYXNlIENNRF9SRVNVTUU6Ci0JCWZvciAocmVnID0gc3RhdDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZysrKQotCQkJc25kX3VkYTEzNDFfY29kZWNfd3JpdGUoY2xudCwgcmVnLCB1ZGEtPnN1c3BlbmRfcmVnc1tyZWddKTsKLQkJZm9yIChyZWcgPSAwOyByZWcgPCBDTURfTEFTVDsgcmVnKyspCi0JCQl1ZGEtPmNmZ1tyZWddID0gdWRhLT5zdXNwZW5kX2NmZ1tyZWddOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLSAgICAgICAgICAgICAgICAKLQlpZiAoIXVkYS0+YWN0aXZlKQotCQlwcmludGsoS0VSTl9FUlIgIlVEQTEzNDEgY29kZWMgbm90IGFjdGl2ZSFcbiIpOyAgICAgICAgICAgICAgICAKLQlyZXR1cm4gcmV0OwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFByb2MgaW50ZXJmYWNlICovCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9uYW1lc1tdID0gewotCSJJMlMtYnVzIiwKLQkiTFNCIDE2Yml0cyIsCi0JIkxTQiAxOGJpdHMiLAotCSJMU0IgMjBiaXRzIiwKLQkiTVNCIiwKLQkiaW4gTFNCIDE2Yml0cy9vdXQgTVNCIiwKLQkiaW4gTFNCIDE4Yml0cy9vdXQgTVNCIiwKLQkiaW4gTFNCIDIwYml0cy9vdXQgTVNCIiwgICAgICAgIAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZzX25hbWVzW10gPSB7Ci0JIjUxMipmcyIsCi0JIjM4NCpmcyIsCi0JIjI1NipmcyIsCi0JIlVudXNlZCAtIGJhZCB2YWx1ZSEiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGJhc3NfdmFsdWVzW11bMTZdID0gewotCXsiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwKLQkgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAidW5kZWZpbmVkIiwgfSwgLy9mbGF0Ci0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMTggZEIiLAotCSAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAiMTggZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtaW4KLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIxOCBkQiIsCi0JICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1pbgotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjIwIGRCIiwKLQkgIjIyIGRCIiwgIjI0IGRCIiwgIjI0IGRCIiwgIjI0IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWF4Ci19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqbWljX3NlbnNfdmFsdWVbXSA9IHsKLQkiLTMgZEIiLCAiMCBkQiIsICIzIGRCIiwgIjkgZEIiLCAiMTUgZEIiLCAiMjEgZEIiLCAiMjcgZEIiLCAibm90IHVzZWQiLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFHQ19hdGltZVtdID0gewotCTExLCAxNiwgMTEsIDE2LCAyMSwgMTEsIDE2LCAyMSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBBR0NfZHRpbWVbXSA9IHsKLQkxMDAsIDEwMCwgMjAwLCAyMDAsIDIwMCwgNDAwLCA0MDAsIDQwMCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpBR0NfbGV2ZWxbXSA9IHsKLQkiLTkuMCIsICItMTEuNSIsICItMTUuMCIsICItMTcuNSIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqaWdfc21hbGxfdmFsdWVbXSA9IHsKLQkiLTMuMCIsICItMi41IiwgIi0yLjAiLCAiLTEuNSIsICItMS4wIiwgIi0wLjUiLAotfTsKLQotLyoKLSAqIHRoaXMgd2FzIGNvbXB1dGVkIGFzIHBlYWtfdmFsdWVbaV0gPSBwb3coKDYzLWkpKjEuNDIsMS4wMTMpCi0gKgotICogVURBMTM0MSBkYXRhc2hlZXQgb24gcGFnZSAyMTogUGVhayB2YWx1ZSAoZEIpID0gKFBlYWsgbGV2ZWwgLSA2My41KSo1KmxvZzIKLSAqIFRoZXJlIGlzIGFuIHRhYmxlIHdpdGggdGhlc2UgdmFsdWVzIFtsZXZlbF09dmFsdWU6IFszXT0tOTAuMzEsIFs3XT0tODQuMjkKLSAqIFs2MV09LTIuNzgsIFs2Ml0gPSAtMS40OCwgWzYzXSA9IDAuMAotICogSSB0cmllZCB0byBjb21wdXRlIGl0LCBidXQgdXNpbmcgYnV0IGV2ZW4gdXNpbmcgbG9nYXJpdGhtIHdpdGggYmFzZSBlaXRoZXIgMTAgb3IgMgotICogaSB3YXMnbiBhYmxlIHRvIGdldCB2YWx1ZXMgaW4gdGhlIHRhYmxlIGZyb20gdGhlIGZvcm11bGEuIFNvIEkgY29uc3RydWN0ZWQgYW5vdGhlcgotICogZm9ybXVsYSAoc2VlIGFib3ZlKSB0byBpbnRlcnBvbGF0ZSB0aGUgdmFsdWVzIGFzIGdvb2QgYXMgcG9zc2libGUuIElmIHRoZXJlIGlzIHNvbWUKLSAqIG1pc3Rha2UsIHBsZWFzZSBjb250YWN0IG1lIG9uIHRvbWFzLmthc3BhcmVrQHNlem5hbS5jei4gVGhhbmtzLgotICogVURBMTM0MVRTIGRhdGFzaGVldCBpcyBhdmFpbGFibGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3ctdXM5LnNlbWljb25kdWN0b3JzLmNvbS9hY3JvYmF0L2RhdGFzaGVldHMvVURBMTM0MVRTXzMucGRmIAotICovCi1zdGF0aWMgY29uc3QgY2hhciAqcGVha192YWx1ZVtdID0gewotCSItSU5GIGRCIiwgIk4uQS4iLCAiTi5BIiwgIjkwLjMxIGRCIiwgIk4uQS4iLCAiTi5BLiIsICJOLkEuIiwgIi04NC4yOSBkQiIsCi0JIi04Mi42NSBkQiIsICItODEuMTMgZEIiLCAiLTc5LjYxIGRCIiwgIi03OC4wOSBkQiIsICItNzYuNTcgZEIiLCAiLTc1LjA1IGRCIiwgIi03My41MyBkQiIsCi0JIi03Mi4wMSBkQiIsICItNzAuNDkgZEIiLCAiLTY4Ljk3IGRCIiwgIi02Ny40NSBkQiIsICItNjUuOTMgZEIiLCAiLTY0LjQxIGRCIiwgIi02Mi45MCBkQiIsCi0JIi02MS4zOCBkQiIsICItNTkuODYgZEIiLCAiLTU4LjM1IGRCIiwgIi01Ni44MyBkQiIsICItNTUuMzIgZEIiLCAiLTUzLjgwIGRCIiwgIi01Mi4yOSBkQiIsCi0JIi01MC43OCBkQiIsICItNDkuMjYgZEIiLCAiLTQ3Ljc1IGRCIiwgIi00Ni4yNCBkQiIsICItNDQuNzMgZEIiLCAiLTQzLjIyIGRCIiwgIi00MS43MSBkQiIsCi0JIi00MC4yMCBkQiIsICItMzguNjkgZEIiLCAiLTM3LjE5IGRCIiwgIi0zNS42OCBkQiIsICItMzQuMTcgZEIiLCAiLTMyLjY3IGRCIiwgIi0zMS4xNyBkQiIsCi0JIi0yOS42NiBkQiIsICItMjguMTYgZEIiLCAiLTI2LjY2IGRCIiwgIi0yNS4xNiBkQiIsICItMjMuNjYgZEIiLCAiLTIyLjE2IGRCIiwgIi0yMC42NyBkQiIsCi0JIi0xOS4xNyBkQiIsICItMTcuNjggZEIiLCAiLTE2LjE5IGRCIiwgIi0xNC43MCBkQiIsICItMTMuMjEgZEIiLCAiLTExLjcyIGRCIiwgIi0xMC4yNCBkQiIsCi0JIi04Ljc2IGRCIiwgIi03LjI4IGRCIiwgIi01LjgxIGRCIiwgIi00LjM0IGRCIiwgIi0yLjg4IGRCIiwgIi0xLjQzIGRCIiwgIjAuMDAgZEIiLAotfTsKLQotc3RhdGljIHZvaWQgc25kX3VkYTEzNDFfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIAotCQkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgcGVhazsKLQotCXBlYWsgPSBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIFVEQTEzNDFfREFUQTEpOwotCWlmIChwZWFrIDwgMCkKLQkJcGVhayA9IDA7Ci0JCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiJXNcblxuIiwgdWRhLT5jYXJkLT5sb25nbmFtZSk7Ci0KLQkvLyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgY29tcHV0ZWQgdmFsdWVzIHNlZSBVREExMzQxVFMgZGF0YXNoZWV0IHBhZ2VzIDE1IC0gMjEKLQlzbmRfaXByaW50ZihidWZmZXIsICJEQUMgcG93ZXIgICAgICAgICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9EQUNdID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBREMgcG93ZXIgICAgICAgICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9BRENdID8gIm9uIiA6ICJvZmYiKTsKLSAJc25kX2lwcmludGYoYnVmZmVyLCAiQ2xvY2sgZnJlcXVlbmN5ICAgICA6ICVzXG4iLCBmc19uYW1lc1t1ZGEtPmNmZ1tDTURfRlNdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiRGF0YSBmb3JtYXQgICAgICAgICA6ICVzXG5cbiIsIGZvcm1hdF9uYW1lc1t1ZGEtPmNmZ1tDTURfRk9STUFUXV0pOwotCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiRmlsdGVyIG1vZGUgICAgICAgICA6ICVzXG4iLCBmaWx0ZXJfbmFtZXNbdWRhLT5jZmdbQ01EX0ZJTFRFUl1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBtb2RlICAgICAgICAgIDogJXNcbiIsIG1peGVyX25hbWVzW3VkYS0+Y2ZnW0NNRF9NSVhFUl1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEZS1lbXBoYXNpcyAgICAgICAgIDogJXNcbiIsIGRlZW1wX25hbWVzW3VkYS0+Y2ZnW0NNRF9ERUVNUF1dKTsJCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiUGVhayBkZXRlY3Rpb24gcG9zLiA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfUEVBS10gPyAiYWZ0ZXIiIDogImJlZm9yZSIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBlYWsgdmFsdWUgICAgICAgICAgOiAlc1xuXG4iLCBwZWFrX3ZhbHVlW3BlYWtdKTsJCQotCQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkF1dG9tYXRpYyBHYWluIEN0cmwgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0FHQ10gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBhdHRhY2sgdGltZSAgICAgOiAlZCBtc1xuIiwgQUdDX2F0aW1lW3VkYS0+Y2ZnW0NNRF9BR0NfVElNRV1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0MgZGVjYXkgdGltZSAgICAgIDogJWQgbXNcbiIsIEFHQ19kdGltZVt1ZGEtPmNmZ1tDTURfQUdDX1RJTUVdXSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIG91dHB1dCBsZXZlbCAgICA6ICVzIGRCXG5cbiIsIEFHQ19sZXZlbFt1ZGEtPmNmZ1tDTURfQUdDX0xFVkVMXV0pOwotCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiTXV0ZSAgICAgICAgICAgICAgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfTVVURV0gPyAib24iIDogIm9mZiIpOwotCi0JaWYgKHVkYS0+Y2ZnW0NNRF9WT0xVTUVdID09IDApCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZvbHVtZSAgICAgICAgICAgICAgOiAwIGRCXG4iKTsKLQllbHNlIGlmICh1ZGEtPmNmZ1tDTURfVk9MVU1FXSA8IDYyKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJWb2x1bWUgICAgICAgICAgICAgIDogJWQgZEJcbiIsIC0xKnVkYS0+Y2ZnW0NNRF9WT0xVTUVdICsxKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZvbHVtZSAgICAgICAgICAgICAgOiAtSU5GIGRCXG4iKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJCYXNzICAgICAgICAgICAgICAgIDogJXNcbiIsIGJhc3NfdmFsdWVzW3VkYS0+Y2ZnW0NNRF9GSUxURVJdXVt1ZGEtPmNmZ1tDTURfQkFTU11dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJUcmViYmxlICAgICAgICAgICAgIDogJWQgZEJcbiIsIHVkYS0+Y2ZnW0NNRF9GSUxURVJdID8gMip1ZGEtPmNmZ1tDTURfVFJFQkJMRV0gOiAwKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBHYWluICg2ZEIpICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9JR0FJTl0gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk91dHB1dCBHYWluICg2ZEIpICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX09HQUlOXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiTWljIHNlbnNpdGl2aXR5ICAgICA6ICVzXG4iLCBtaWNfc2Vuc192YWx1ZVt1ZGEtPmNmZ1tDTURfTUlDXV0pOwotCi0JCi0JaWYodWRhLT5jZmdbQ01EX0NIMV0gPCAzMSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDE6IC0lZC4lYyBkQlxuIiwKLQkJCSAgICAoKHVkYS0+Y2ZnW0NNRF9DSDFdID4+IDEpICogMykgKyAodWRhLT5jZmdbQ01EX0NIMV0gJiAxKSwKLQkJCSAgICB1ZGEtPmNmZ1tDTURfQ0gxXSAmIDEgPyAnNScgOiAnMCcpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDE6IC1JTkYgZEJcbiIpOwotCWlmKHVkYS0+Y2ZnW0NNRF9DSDJdIDwgMzEpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAyOiAtJWQuJWMgZEJcbiIsCi0JCQkgICAgKCh1ZGEtPmNmZ1tDTURfQ0gyXSA+PiAxKSAqIDMpICsgKHVkYS0+Y2ZnW0NNRF9DSDJdICYgMSksCi0JCQkgICAgdWRhLT5jZmdbQ01EX0NIMl0gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIGdhaW4gY2hhbm5lbCAyOiAtSU5GIGRCXG4iKTsKLQotCWlmKHVkYS0+Y2ZnW0NNRF9JR10gPiA1KQotCQlzbmRfaXByaW50ZihidWZmZXIsICJJbnB1dCBBbXAuIEdhaW4gY2ggMjogJWQuJWMgZEJcbiIsCi0JCQkgICAgKHVkYS0+Y2ZnW0NNRF9JR10gPj4gMSkgLTMsIHVkYS0+Y2ZnW0NNRF9JR10gJiAxID8gJzUnIDogJzAnKTsKLQllbHNlCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IEFtcC4gR2FpbiBjaCAyOiAlcyBkQlxuIiwgIGlnX3NtYWxsX3ZhbHVlW3VkYS0+Y2ZnW0NNRF9JR11dKTsKLX0KLQotc3RhdGljIHZvaWQgc25kX3VkYTEzNDFfcHJvY19yZWdzX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwgCi0JCQkJICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7CQkKLQlpbnQgcmVnOwotCWNoYXIgYnVmWzEyXTsKLQotCWZvciAocmVnID0gMDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnICsrKSB7Ci0JCWlmIChyZWcgPT0gZW1wdHkpCi0JCQljb250aW51ZTsKLQkJaW50MnN0cl9iaW44KHVkYS0+cmVnc1tyZWddLCBidWYpOwotCQlzbmRfaXByaW50ZihidWZmZXIsICIlcyA9ICVzXG4iLCB1ZGExMzQxX3JlZ19uYW1lc1tyZWddLCBidWYpOwotCX0KLQotCWludDJzdHJfYmluOChzbmRfdWRhMTM0MV9jb2RlY19yZWFkKGNsbnQsIFVEQTEzNDFfREFUQTEpLCBidWYpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRBVEExID0gJXNcbiIsIGJ1Zik7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF91ZGExMzQxX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKLQotCWlmICghIHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJ1ZGExMzQxIiwgJmVudHJ5KSkKLQkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjbG50LCBzbmRfdWRhMTM0MV9wcm9jX3JlYWQpOwotCWlmICghIHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJ1ZGExMzQxLXJlZ3MiLCAmZW50cnkpKQotCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNsbnQsIHNuZF91ZGExMzQxX3Byb2NfcmVnc19yZWFkKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBNaXhlciBjb250cm9scyBzZXR0aW5nICovCi0KLS8qIHt7eyBVREExMzQxIHNpbmdsZSBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBVREExMzQxX1NJTkdMRSh4bmFtZSwgd2hlcmUsIHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZm8gPSBzbmRfdWRhMTM0MV9pbmZvX3NpbmdsZSwgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0X3NpbmdsZSwgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF9zaW5nbGUsIFwKLSAgLnByaXZhdGVfdmFsdWUgPSB3aGVyZSB8IChyZWcgPDwgNSkgfCAoc2hpZnQgPDwgOSkgfCAobWFzayA8PCAxMikgfCAoaW52ZXJ0IDw8IDE4KSBcCi19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfaW5mb19zaW5nbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQotCXVpbmZvLT50eXBlID0gbWFzayA9PSAxID8gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOIDogU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBtYXNrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF9zaW5nbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAxOwotICAgICAgICAKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHVkYS0+Y2ZnW3doZXJlXTsKLQlpZiAoaW52ZXJ0KQotCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG1hc2sgLSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX3B1dF9zaW5nbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZyA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA1KSAmIDE1OwotCWludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA5KSAmIDc7Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOCkgJiAxOwotCXVuc2lnbmVkIHNob3J0IHZhbDsKLQotCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwotCWlmIChpbnZlcnQpCi0JCXZhbCA9IG1hc2sgLSB2YWw7Ci0KLQl1ZGEtPmNmZ1t3aGVyZV0gPSB2YWw7Ci0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZywgbWFzaywgc2hpZnQsIHZhbCwgRkxVU0gpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IFVEQTEzNDEgZW51bSBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBVREExMzQxX0VOVU0oeG5hbWUsIHdoZXJlLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb19lbnVtLCBcCi0gIC5nZXQgPSBzbmRfdWRhMTM0MV9nZXRfZW51bSwgLnB1dCA9IHNuZF91ZGExMzQxX3B1dF9lbnVtLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnIDw8IDUpIHwgKHNoaWZ0IDw8IDkpIHwgKG1hc2sgPDwgMTIpIHwgKGludmVydCA8PCAxOCkgXAotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOwotCWNvbnN0IGNoYXIgKip0ZXh0czsKLQkKLQkvLyB0aGlzIHJlZ2lzdGVyIHdlIGRvbid0IGhhbmRsZSB0aGlzIHdheQotCWlmICghdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXTsKLQotCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0pCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdIC0gMTsKLQotCXRleHRzID0gdWRhMTM0MV9lbnVtX25hbWVzW3doZXJlXTsKLQlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2dldF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLSAgICAgICAgCi0JdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHVkYS0+Y2ZnW3doZXJlXTsJCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfcHV0X2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWcgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiA3OwotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCi0JdWRhLT5jZmdbd2hlcmVdID0gKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJiBtYXNrKTsKLQkKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnLCBtYXNrLCBzaGlmdCwgdWRhLT5jZmdbd2hlcmVdLCBGTFVTSCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgVURBMTM0MSAycmVncyBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBVREExMzQxXzJSRUdTKHhuYW1lLCB3aGVyZSwgcmVnXzEsIHJlZ18yLCBzaGlmdF8xLCBzaGlmdF8yLCBtYXNrXzEsIG1hc2tfMiwgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIC5pbmZvID0gc25kX3VkYTEzNDFfaW5mb18ycmVncywgXAotICAuZ2V0ID0gc25kX3VkYTEzNDFfZ2V0XzJyZWdzLCAucHV0ID0gc25kX3VkYTEzNDFfcHV0XzJyZWdzLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gd2hlcmUgfCAocmVnXzEgPDwgNSkgfCAocmVnXzIgPDwgOSkgfCAoc2hpZnRfMSA8PCAxMykgfCAoc2hpZnRfMiA8PCAxNikgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG1hc2tfMSA8PCAxOSkgfCAobWFza18yIDw8IDI1KSB8IChpbnZlcnQgPDwgMzEpIFwKLX0KLQotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2luZm9fMnJlZ3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCWludCBtYXNrXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgNjM7Ci0JaW50IG1hc2tfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNSkgJiA2MzsKLQlpbnQgbWFzazsKLSAgICAgICAgCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0JdWluZm8tPnR5cGUgPSBtYXNrID09IDEgPyBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gOiBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfZ2V0XzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOwotCWludCBtYXNrXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgNjM7Ci0JaW50IG1hc2tfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNSkgJiA2MzsgICAgICAgIAotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMzEpICYgMTsKLQlpbnQgbWFzazsKLQotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB1ZGEtPmNmZ1t3aGVyZV07Ci0JaWYgKGludmVydCkKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtYXNrIC0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfcHV0XzJyZWdzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsgICAgICAgIAotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gNSkgJiAxNTsKLQlpbnQgcmVnXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOSkgJiAxNTsgICAgICAgIAotCWludCBzaGlmdF8xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEzKSAmIDc7Ci0JaW50IHNoaWZ0XzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgNzsKLQlpbnQgbWFza18xID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDYzOwotCWludCBtYXNrXzIgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjUpICYgNjM7ICAgICAgICAKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDMxKSAmIDE7Ci0JaW50IG1hc2s7Ci0JdW5zaWduZWQgc2hvcnQgdmFsMSwgdmFsMiwgdmFsOwotCi0JdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0gICAgICAgICAKLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQotCXZhbDEgPSB2YWwgJiBtYXNrXzE7Ci0JdmFsMiA9ICh2YWwgLyAobWFza18xICsgMSkpICYgbWFza18yOyAgICAgICAgCi0KLQlpZiAoaW52ZXJ0KSB7Ci0JCXZhbDEgPSBtYXNrXzEgLSB2YWwxOwotCQl2YWwyID0gbWFza18yIC0gdmFsMjsKLQl9Ci0KLQl1ZGEtPmNmZ1t3aGVyZV0gPSBpbnZlcnQgPyBtYXNrIC0gdmFsIDogdmFsOwotICAgICAgICAKLQkvL0ZJWE1FIC0gcmV0dXJuIHZhbHVlCi0Jc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnXzEsIG1hc2tfMSwgc2hpZnRfMSwgdmFsMSwgRkxVU0gpOwotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWdfMiwgbWFza18yLCBzaGlmdF8yLCB2YWwyLCBGTFVTSCk7Ci19Ci0KLS8qIH19fSAqLwotICAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdWRhMTM0MV9jb250cm9sc1tdID0gewotCVVEQTEzNDFfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgQ01EX01VVEUsIGRhdGEwXzIsIDIsIDEsIDEpLAotCVVEQTEzNDFfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgQ01EX1ZPTFVNRSwgZGF0YTBfMCwgMCwgNjMsIDEpLAotCi0JVURBMTM0MV9TSU5HTEUoIkJhc3MgUGxheWJhY2sgVm9sdW1lIiwgQ01EX0JBU1MsIGRhdGEwXzEsIDIsIDE1LCAwKSwKLQlVREExMzQxX1NJTkdMRSgiVHJlYmxlIFBsYXliYWNrIFZvbHVtZSIsIENNRF9UUkVCQkxFLCBkYXRhMF8xLCAwLCAzLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJJbnB1dCBHYWluIFN3aXRjaCIsIENNRF9JR0FJTiwgc3RhdDEsIDUsIDEsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJPdXRwdXQgR2FpbiBTd2l0Y2giLCBDTURfT0dBSU4sIHN0YXQxLCA2LCAxLCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJNaXhlciBHYWluIENoYW5uZWwgMSBWb2x1bWUiLCBDTURfQ0gxLCBleHQwLCAwLCAzMSwgMSksCi0JVURBMTM0MV9TSU5HTEUoIk1peGVyIEdhaW4gQ2hhbm5lbCAyIFZvbHVtZSIsIENNRF9DSDIsIGV4dDEsIDAsIDMxLCAxKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJNaWMgU2Vuc2l0aXZpdHkgVm9sdW1lIiwgQ01EX01JQywgZXh0MiwgMiwgNywgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiQUdDIE91dHB1dCBMZXZlbCIsIENNRF9BR0NfTEVWRUwsIGV4dDYsIDAsIDMsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBR0MgVGltZSBDb25zdGFudCIsIENNRF9BR0NfVElNRSwgZXh0NiwgMiwgNywgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBUaW1lIENvbnN0YW50IFN3aXRjaCIsIENNRF9BR0MsIGV4dDQsIDQsIDEsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIkRBQyBQb3dlciIsIENNRF9EQUMsIHN0YXQxLCAwLCAxLCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQURDIFBvd2VyIiwgQ01EX0FEQywgc3RhdDEsIDEsIDEsIDApLAotCi0JVURBMTM0MV9FTlVNKCJQZWFrIGRldGVjdGlvbiIsIENNRF9QRUFLLCBkYXRhMF8yLCA1LCAxLCAwKSwKLQlVREExMzQxX0VOVU0oIkRlLWVtcGhhc2lzIiwgQ01EX0RFRU1QLCBkYXRhMF8yLCAzLCAzLCAwKSwKLQlVREExMzQxX0VOVU0oIk1peGVyIG1vZGUiLCBDTURfTUlYRVIsIGV4dDIsIDAsIDMsIDApLAotCVVEQTEzNDFfRU5VTSgiRmlsdGVyIG1vZGUiLCBDTURfRklMVEVSLCBkYXRhMF8yLCAwLCAzLCAwKSwKLQotCVVEQTEzNDFfMlJFR1MoIkdhaW4gSW5wdXQgQW1wbGlmaWVyIEdhaW4gKGNoYW5uZWwgMikiLCBDTURfSUcsIGV4dDQsIGV4dDUsIDAsIDAsIDMsIDMxLCAwKSwKLX07Ci0KLXN0YXRpYyB2b2lkIHVkYTEzNDFfZnJlZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCWwzX2RldGFjaF9jbGllbnQoY2xudCk7IC8vIGNhbGxzIGtmcmVlIGZvciBkcml2ZXJfZGF0YSAoc3RydWN0IHVkYTEzNDEpCi0Ja2ZyZWUoY2xudCk7Ci19Ci0KLXN0YXRpYyBpbnQgdWRhMTM0MV9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBkZXZpY2UtPmRldmljZV9kYXRhOwotCXVkYTEzNDFfZnJlZShjbG50KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IF9faW5pdCBzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBsM19jbGllbnQgKipjbG50cCkKLXsKLQlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKLQkJLmRldl9mcmVlID0gICAgIHVkYTEzNDFfZGV2X2ZyZWUsCi0JfTsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50OwotCWludCBpZHgsIGVycjsKLQotCWlmIChzbmRfQlVHX09OKCFjYXJkKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljbG50ID0ga3phbGxvYyhzaXplb2YoKmNsbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLSAgICAgICAgIAotCWlmICgoZXJyID0gbDNfYXR0YWNoX2NsaWVudChjbG50LCAibDMtYml0LXNhMTEwMC1ncGlvIiwgVURBMTM0MV9BTFNBX05BTUUpKSkgewotCQlrZnJlZShjbG50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX3VkYTEzNDFfY29udHJvbHMpOyBpZHgrKykgewotCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX3VkYTEzNDFfY29udHJvbHNbaWR4XSwgY2xudCkpKSA8IDApIHsKLQkJCXVkYTEzNDFfZnJlZShjbG50KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9DT0RFQywgY2xudCwgJm9wcykpIDwgMCkgewotCQl1ZGExMzQxX2ZyZWUoY2xudCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JKmNsbnRwID0gY2xudDsKLQlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiVURBMTM0MVRTIE1peGVyIik7Ci0JKChzdHJ1Y3QgdWRhMTM0MSAqKWNsbnQtPmRyaXZlcl9kYXRhKS0+Y2FyZCA9IGNhcmQ7Ci0gICAgICAgIAotCXNuZF91ZGExMzQxX3Byb2NfaW5pdChjYXJkLCBjbG50KTsKLSAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTDMgb3BlcmF0aW9ucyAqLwotCi1zdGF0aWMgaW50IHVkYTEzNDFfYXR0YWNoKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYTsKLQotCXVkYSA9IGt6YWxsb2Moc2l6ZW9mKCp1ZGEpLCAwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVkYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBpbml0IGZpeGVkIHBhcnRzIG9mIG15IGNvcHkgb2YgcmVnaXN0ZXJzICovCi0JdWRhLT5yZWdzW3N0YXQwXSAgID0gU1RBVDA7Ci0JdWRhLT5yZWdzW3N0YXQxXSAgID0gU1RBVDE7Ci0KLQl1ZGEtPnJlZ3NbZGF0YTBfMF0gPSBEQVRBMF8wOwotCXVkYS0+cmVnc1tkYXRhMF8xXSA9IERBVEEwXzE7Ci0JdWRhLT5yZWdzW2RhdGEwXzJdID0gREFUQTBfMjsKLQotCXVkYS0+d3JpdGUgPSBzbmRfdWRhMTM0MV9jb2RlY193cml0ZTsKLQl1ZGEtPnJlYWQgPSBzbmRfdWRhMTM0MV9jb2RlY19yZWFkOwotICAKLQlzcGluX2xvY2tfaW5pdCgmdWRhLT5yZWdfbG9jayk7Ci0gICAgICAgIAotCWNsbnQtPmRyaXZlcl9kYXRhID0gdWRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1ZGExMzQxX2RldGFjaChzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCWtmcmVlKGNsbnQtPmRyaXZlcl9kYXRhKTsKLX0KLQotc3RhdGljIGludAotdWRhMTM0MV9jb21tYW5kKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoY21kICE9IENNRF9SRUFEX1JFRykKLQkJcmV0dXJuIHNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBjbWQsIChpbnQpIGFyZywgRkxVU0gpOwotCi0JcmV0dXJuIHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoY2xudCwgKGludCkgYXJnKTsKLX0KLQotc3RhdGljIGludCB1ZGExMzQxX29wZW4oc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0KLQl1ZGEtPmFjdGl2ZSA9IDE7Ci0KLQkvKiBpbml0IGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfUkVTRVQsIDAsIFJFR1NfT05MWSk7Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GUywgRjI1NiwgRkxVU0gpOyAgICAgICAvLyB1bmtub3duIHN0YXRlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9GT1JNQVQsIExTQjE2LCBGTFVTSCk7ICAvLyB1bmtub3duIHN0YXRlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9PR0FJTiwgT04sIEZMVVNIKTsgICAgICAvLyBkZWZhdWx0IG9mZiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfSUdBSU4sIE9OLCBGTFVTSCk7ICAgICAgLy8gZGVmYXVsdCBvZmYgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0RBQywgT04sIEZMVVNIKTsJLy8gPz8/IGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0FEQywgT04sIEZMVVNIKTsJLy8gPz8/IGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1ZPTFVNRSwgMjAsIEZMVVNIKTsgICAgIC8vIGRlZmF1bHQgMGRCIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9CQVNTLCAwLCBSRUdTX09OTFkpOyAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9UUkVCQkxFLCAwLCBSRUdTX09OTFkpOyAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9QRUFLLCBBRlRFUiwgUkVHU19PTkxZKTsvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9ERUVNUCwgTk9ORSwgUkVHU19PTkxZKTsvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0JLy9hdCB0aGlzIG1vbWVudCBzaG91bGQgYmUgUU1VVEVEIGJ5IGgzNjAwX2F1ZGlvX2luaXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01VVEUsIE9GRiwgUkVHU19PTkxZKTsgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0ZJTFRFUiwgTUFYLCBGTFVTSCk7ICAgIC8vIGRlZmF1bCBmbGF0IGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9DSDEsIDMxLCBGTFVTSCk7ICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9DSDIsIDQsIEZMVVNIKTsgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NSUMsIDQsIEZMVVNIKTsgICAgICAgICAvLyBkZWZhdWx0IDBkQiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTUlYRVIsIE1JWEVSLCBGTFVTSCk7ICAgLy8gZGVmYXVsdCBkb3ViLmRpZi5tb2RlICAgICAgICAgIAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQUdDLCBPRkYsIEZMVVNIKTsgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfSUcsIDAsIEZMVVNIKTsgICAgICAgICAgLy8gdW5rbm93biBzdGF0ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQUdDX1RJTUUsIDAsIEZMVVNIKTsgICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQUdDX0xFVkVMLCAwLCBGTFVTSCk7ICAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVkYTEzNDFfY2xvc2Uoc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0KLQl1ZGEtPmFjdGl2ZSA9IDA7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgTW9kdWxlIGFuZCBMMyBpbml0aWFsaXphdGlvbiAqLwotCi1zdGF0aWMgc3RydWN0IGwzX29wcyB1ZGExMzQxX29wcyA9IHsKLQkub3BlbiA9CQl1ZGExMzQxX29wZW4sCi0JLmNvbW1hbmQgPQl1ZGExMzQxX2NvbW1hbmQsCi0JLmNsb3NlID0JdWRhMTM0MV9jbG9zZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbDNfZHJpdmVyIHVkYTEzNDFfZHJpdmVyID0gewotCS5uYW1lID0JCVVEQTEzNDFfQUxTQV9OQU1FLAotCS5hdHRhY2hfY2xpZW50ID0gdWRhMTM0MV9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQgPSB1ZGExMzQxX2RldGFjaCwKLQkub3BzID0JCSZ1ZGExMzQxX29wcywKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHVkYTEzNDFfaW5pdCh2b2lkKQotewotCXJldHVybiBsM19hZGRfZHJpdmVyKCZ1ZGExMzQxX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB1ZGExMzQxX2V4aXQodm9pZCkKLXsKLQlsM19kZWxfZHJpdmVyKCZ1ZGExMzQxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHVkYTEzNDFfaW5pdCk7Ci1tb2R1bGVfZXhpdCh1ZGExMzQxX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFVEQTEzNDEgQ09ERUMgZHJpdmVyIGZvciBBTFNBIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tVREExMzQxLFVEQTEzNDFUU319Iik7Ci0KLUVYUE9SVF9TWU1CT0woc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcpOwotCi0vKiB9fX0gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL0tjb25maWcgYi9zb3VuZC9pc2EvS2NvbmZpZwppbmRleCBjZTBhYTA0Li5jNWM5YTkyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvS2NvbmZpZworKysgYi9zb3VuZC9pc2EvS2NvbmZpZwpAQCAtNTYsOCArNTYsOCBAQAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEFEMTg0OCAoQW5hbG9nIERldmljZXMpIG9yCiAJICBDUzQyNDggKENpcnJ1cyBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMpIGNoaXBzLgogCSAgCi0JICBGb3IgbmV3ZXIgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMsIHVzZSB0aGUgQ1M0MjMxLCBDUzQyMzIgb3IKLQkgIENTNDIzNisgZHJpdmVycy4KKwkgIEZvciBuZXdlciBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYywgdXNlIHRoZSBDUzQyMzEgb3IgQ1M0MjMyKworCSAgZHJpdmVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWFkMTg0OC4KQEAgLTk0LDYgKzk0LDggQEAKIAl0cmlzdGF0ZSAiQy1NZWRpYSBDTUk4MzMwIgogCXNlbGVjdCBTTkRfV1NTX0xJQgogCXNlbGVjdCBTTkRfU0IxNl9EU1AKKwlzZWxlY3QgU05EX09QTDNfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQy1NZWRpYSBDTUk4MzMwIGNoaXAuCkBAIC0xMTIsMjYgKzExNCwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzMS4KIAotY29uZmlnIFNORF9DUzQyMzIKLQl0cmlzdGF0ZSAiR2VuZXJpYyBDaXJydXMgTG9naWMgQ1M0MjMyIGRyaXZlciIKLQlzZWxlY3QgU05EX09QTDNfTElCCi0Jc2VsZWN0IFNORF9NUFU0MDFfVUFSVAotCXNlbGVjdCBTTkRfV1NTX0xJQgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDUzQyMzIgY2hpcHMgZnJvbSBDaXJydXMKLQkgIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzMi4KLQogY29uZmlnIFNORF9DUzQyMzYKLQl0cmlzdGF0ZSAiR2VuZXJpYyBDaXJydXMgTG9naWMgQ1M0MjM2KyBkcml2ZXIiCisJdHJpc3RhdGUgIkdlbmVyaWMgQ2lycnVzIExvZ2ljIENTNDIzMi9DUzQyMzYrIGRyaXZlciIKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfV1NTX0xJQgogCWhlbHAKLQkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQ1M0MjM1LENTNDIzNixDUzQyMzdCLENTNDIzOEIsCi0JICBDUzQyMzkgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzLgorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDUzQyMzIsQ1M0MjM1LENTNDIzNixDUzQyMzdCLAorCSAgQ1M0MjM4QixDUzQyMzkgY2hpcHMgZnJvbSBDaXJydXMgTG9naWMgLSBDcnlzdGFsCisJICBTZW1pY29uZHVjdG9ycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWNzNDIzNi4KQEAgLTM3NywxNCArMzY4LDE3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtc2dhbGF4eS4KIAogY29uZmlnIFNORF9TU0NBUEUKLQl0cmlzdGF0ZSAiRW5zb25pcSBTb3VuZFNjYXBlIFBuUCBkcml2ZXIiCisJdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBkcml2ZXIiCiAJc2VsZWN0IFNORF9IV0RFUAogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1dTU19MSUIKIAloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRW5zb25pcSBTb3VuZFNjYXBlIFBuUAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVuc29uaXEgU291bmRTY2FwZSAKIAkgIHNvdW5kY2FyZHMuCiAKKwkgIFRoZSBQQ00gYXVkaW8gaXMgc3VwcG9ydGVkIG9uIFNvdW5kU2NhcGUgQ2xhc3NpYywgRWxpdGUsIFBuUAorCSAgYW5kIFZJVk8gY2FyZHMuIFRoZSBNSURJIHN1cHBvcnQgaXMgdmVyeSBleHBlcmltZW50YWwuCisKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zc2NhcGUuCiAKQEAgLTQxMSw1ICs0MDUsMzYgQEAKIAkgIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIGZpcm13YXJlIGZpbGVzIGZyb20gdGhlCiAJICBhbHNhLWZpcm13YXJlIHBhY2thZ2UuCiAKK2NvbmZpZyBTTkRfTVNORF9QSU5OQUNMRQorCXRyaXN0YXRlICJUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS9GaWppIGRyaXZlciIKKwlkZXBlbmRzIG9uIFg4NiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS8KKwkgIEZpamkgc291bmRjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLW1zbmQtcGlubmFjbGUuCisKK2NvbmZpZyBTTkRfTVNORF9DTEFTU0lDCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSwgTW9udGVyZXkiCisJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSBNIGhlcmUgaWYgeW91IGhhdmUgYSBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBDbGFzc2ljLCBUYWhpdGkgb3IKKwkgIE1vbnRlcmV5IChub3QgZm9yIHRoZSBQaW5uYWNsZSBvciBGaWppKS4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQ+IGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24KKwkgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZQorCSAgVm95ZXRyYSBUdXJ0bGUgQmVhY2gga25vd2xlZGdlIGJhc2UgZW50cnkgZm9yIGl0IGlzIHN0aWxsIGF2YWlsYWJsZQorCSAgYXQgPGh0dHA6Ly93d3cudHVydGxlYmVhY2guY29tL3NpdGUva2JfZnRwLzc5MC5hc3A+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbXNuZC1jbGFzc2ljLgorCiBlbmRpZgkjIFNORF9JU0EKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL01ha2VmaWxlIGIvc291bmQvaXNhL01ha2VmaWxlCmluZGV4IDYzYWYxM2QuLmI5MDZiOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvTWFrZWZpbGUKQEAgLTI2LDUgKzI2LDUgQEAKIG9iai0kKENPTkZJR19TTkRfU0dBTEFYWSkgKz0gc25kLXNnYWxheHkubwogb2JqLSQoQ09ORklHX1NORF9TU0NBUEUpICs9IHNuZC1zc2NhcGUubwogCi1vYmotJChDT05GSUdfU05EKSArPSBhZDE4MTZhLyBhZDE4NDgvIGNzNDIzeC8gZXMxNjg4LyBndXMvIG9wdGk5eHgvIFwKK29iai0kKENPTkZJR19TTkQpICs9IGFkMTgxNmEvIGFkMTg0OC8gY3M0MjN4LyBlczE2ODgvIGd1cy8gbXNuZC8gb3B0aTl4eC8gXAogCQkgICAgIHNiLyB3YXZlZnJvbnQvIHdzcy8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwppbmRleCA3NzUyNDI0Li5iYmNiZjkyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCkBAIC0xNTYsMTAgKzE1NiwxMiBAQAogCXN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhICphY2FyZDsKIAlzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXA7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOworCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IChzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9hZDE4MTZhX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKQEAgLTE5NCw2ICsxOTYsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAorCWVycm9yID0gc25kX2FkMTgxNmFfdGltZXIoY2hpcCwgMCwgJnRpbWVyKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDApIHsKIAkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKIAkJCQkJbXB1X3BvcnRbZGV2XSwgMCwgbXB1X2lycVtkZXZdLCBJUlFGX0RJU0FCTEVELApAQCAtMjA3LDExICsyMTUsOCBAQAogCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE9QTCBkZXZpY2UgYXQgMHglbHgtMHglbHguXG4iLCBmbV9wb3J0W2Rldl0sIGZtX3BvcnRbZGV2XSArIDIpOwogCQl9IGVsc2UgewotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCAxLCAyKSkgPCAwKSB7Ci0JCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpKSA8IDApIHsKKwkJCWVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVycm9yIDwgMCkgewogCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKaW5kZXggM2JmY2E3Yy4uMDVhZWY4YiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCkBAIC0zNyw3ICszNyw3IEBACiAJCWlmIChpbmIoQUQxODE2QV9SRUcoQUQxODE2QV9DSElQX1NUQVRVUykpICYgQUQxODE2QV9SRUFEWSkKIAkJCXJldHVybiAwOwogCi0Jc25kX3ByaW50aygiY2hpcCBidXN5LlxuIik7CisJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImNoaXAgYnVzeS5cbiIpOwogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQlzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImludmFsaWQgdHJpZ2dlciBtb2RlIDB4JXguXG4iLCB3aGF0KTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgdHJpZ2dlciBtb2RlIDB4JXguXG4iLCB3aGF0KTsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KIApAQCAtMzc3LDcgKzM3Nyw2IEBACiAJLmZpZm9fc2l6ZSA9CQkwLAogfTsKIAotI2lmIDAgLyogbm90IHVzZWQgbm93ICovCiBzdGF0aWMgaW50IHNuZF9hZDE4MTZhX3RpbWVyX2Nsb3NlKHN0cnVjdCBzbmRfdGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKQEAgLTQ0Miw4ICs0NDEsNiBAQAogCS5zdGFydCA9CXNuZF9hZDE4MTZhX3RpbWVyX3N0YXJ0LAogCS5zdG9wID0JCXNuZF9hZDE4MTZhX3RpbWVyX3N0b3AsCiB9OwotI2VuZGlmIC8qIG5vdCB1c2VkIG5vdyAqLwotCiAKIHN0YXRpYyBpbnQgc25kX2FkMTgxNmFfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTU2OCw3ICs1NjUsNyBAQAogCWNhc2UgQUQxODE2QV9IV19BRDE4MTU6CXJldHVybiAiQUQxODE1IjsKIAljYXNlIEFEMTgxNkFfSFdfQUQxOE1BWDEwOiByZXR1cm4gIkFEMThtYXgxMCI7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiVW5rbm93biBjaGlwIHZlcnNpb24gJWQ6JWQuXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBjaGlwIHZlcnNpb24gJWQ6JWQuXG4iLAogCQkJY2hpcC0+dmVyc2lvbiwgY2hpcC0+aGFyZHdhcmUpOwogCQlyZXR1cm4gIkFEMTgxNkEgLSB1bmtub3duIjsKIAl9CkBAIC02ODcsNyArNjg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAgLyogbm90IHVzZWQgbm93ICovCiBpbnQgX19kZXZpbml0IHNuZF9hZDE4MTZhX3RpbWVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcikKIHsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKQEAgLTcwOSw3ICs3MDUsNiBAQAogCQkqcnRpbWVyID0gdGltZXI7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogbm90IHVzZWQgbm93ICovCiAKIC8qCiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKaW5kZXggMjIzYTZjMC4uNGJlZWI2ZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYworKysgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCkBAIC05MSw5ICs5MSw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtuXSwgLTEsIGlycVtuXSwgZG1hMVtuXSwgLTEsCiAJCQl0aGlua3BhZFtuXSA/IFdTU19IV19USElOS1BBRCA6IFdTU19IV19ERVRFQ1QsCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWRsaWIuYyBiL3NvdW5kL2lzYS9hZGxpYi5jCmluZGV4IDM3NGI3MTcuLjc0NjVhZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZGxpYi5jCisrKyBiL3NvdW5kL2lzYS9hZGxpYi5jCkBAIC01MywxMCArNTMsMTAgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpIHsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkgewogCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gcmVxdWVzdF9yZWdpb24ocG9ydFtuXSwgNCwgQ1JEX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FsczEwMC5jIGIvc291bmQvaXNhL2FsczEwMC5jCmluZGV4IGYxY2UzMGYuLjVmZDUyZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hbHMxMDAuYworKysgYi9zb3VuZC9pc2EvYWxzMTAwLmMKQEAgLTE2Myw5ICsxNjMsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwICphY2FyZDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwKSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9hbHMxMDBfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2F6dDIzMjAuYyBiL3NvdW5kL2lzYS9henQyMzIwLmMKaW5kZXggM2U3NGQxYS4uZjdhYTYzNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2F6dDIzMjAuYworKysgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCkBAIC0xODQsOSArMTg0LDEwIEBACiAJc3RydWN0IHNuZF93c3MgKmNoaXA7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjApKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwKSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IChzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCAqKWNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9henQyMzIwX3BucChkZXYsIGFjYXJkLCBwY2FyZCwgcGlkKSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzMwLmMgYi9zb3VuZC9pc2EvY21pODMzMC5jCmluZGV4IGU0OWFlYzcuLmRlODM2MDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jbWk4MzMwLmMKKysrIGIvc291bmQvaXNhL2NtaTgzMzAuYwpAQCAtMzEsMTEgKzMxLDExIEBACiAgKiAgVG8gcXVpY2tseSBsb2FkIHRoZSBtb2R1bGUsCiAgKgogICogIG1vZHByb2JlIC1hIHNuZC1jbWk4MzMwIHNicG9ydD0weDIyMCBzYmlycT01IHNiZG1hOD0xCi0gKiAgICBzYmRtYTE2PTUgd3NzcG9ydD0weDUzMCB3c3NpcnE9MTEgd3NzZG1hPTAKKyAqICAgIHNiZG1hMTY9NSB3c3Nwb3J0PTB4NTMwIHdzc2lycT0xMSB3c3NkbWE9MCBmbXBvcnQ9MHgzODgKICAqCiAgKiAgVGhpcyBjYXJkIGhhcyB0d28gbWl4ZXJzIGFuZCB0d28gUENNIGRldmljZXMuICBJJ3ZlIGNoZWVzZWQgaXQgc3VjaAogICogIHRoYXQgcmVjb3JkaW5nIGFuZCBwbGF5YmFjayBjYW4gYmUgZG9uZSB0aHJvdWdoIHRoZSBzYW1lIGRldmljZS4KLSAqICBUaGUgZHJpdmVyICJtYWdpY2FsbHkiIHJvdXRlcyB0aGUgY2FwdHVyaW5nIHRvIHRoZSBBRDE4NDggY29kZWMsCisgKiAgVGhlIGRyaXZlciAibWFnaWNhbGx5IiByb3V0ZXMgdGhlIGNhcHR1cmluZyB0byB0aGUgQ01JODMzMCBjb2RlYywKICAqICBhbmQgcGxheWJhY2sgdG8gdGhlIFNCMTYgY29kZWMuICBUaGlzIGFsbG93cyBmb3IgZnVsbC1kdXBsZXggbW9kZQogICogIHRvIHNvbWUgZXh0ZW50LgogICogIFRoZSB1dGlsaXRpZXMgaW4gYWxzYS11dGlscyBhcmUgYXdhcmUgb2YgYm90aCBkZXZpY2VzLCBzbyBwYXNzaW5nCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvd3NzLmg+CisjaW5jbHVkZSA8c291bmQvb3BsMy5oPgorI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgogI2luY2x1ZGUgPHNvdW5kL3NiLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCkBAIC03OSw2ICs4MSw5IEBACiBzdGF0aWMgbG9uZyB3c3Nwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKIHN0YXRpYyBpbnQgd3NzaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwogc3RhdGljIGludCB3c3NkbWFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9ETUE7CitzdGF0aWMgbG9uZyBmbXBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGxvbmcgbXB1cG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IG1wdWlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBDTUk4MzMwIHNvdW5kY2FyZC4iKTsKQEAgLTEwNyw2ICsxMTIsMTIgQEAKIG1vZHVsZV9wYXJhbV9hcnJheSh3c3NkbWEsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdzc2RtYSwgIkRNQSBmb3IgQ01JODMzMCBXU1MgZHJpdmVyLiIpOwogCittb2R1bGVfcGFyYW1fYXJyYXkoZm1wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1wb3J0LCAiRk0gcG9ydCAjIGZvciBDTUk4MzMwIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1cG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciBDTUk4MzMwIGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVpcnEsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1wdWlycSwgIklSUSAjIGZvciBDTUk4MzMwIE1QVS00MDEgcG9ydC4iKTsKICNpZmRlZiBDT05GSUdfUE5QCiBzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKQEAgLTE0OSw2ICsxNjAsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlzdHJ1Y3QgcG5wX2RldiAqY2FwOwogCXN0cnVjdCBwbnBfZGV2ICpwbGF5OworCXN0cnVjdCBwbnBfZGV2ICptcHU7CiAjZW5kaWYKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF93c3MgKndzczsKQEAgLTE2NSw3ICsxNzcsNyBAQAogI2lmZGVmIENPTkZJR19QTlAKIAogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NtaTgzMzBfcG5waWRzW10gPSB7Ci0JeyAuaWQgPSAiQ01JMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJDTUkwMDAxIiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0gfSB9LAogCXsgLmlkID0gIiIgfQogfTsKIApAQCAtMjE5LDggKzIzMSwxMCBAQAogCQlDTUk4MzMwX1JNVVgzRCwgNSwgMSwgMSksCiBXU1NfU0lOR0xFKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDAsCiAJCUNNSTgzMzBfT1VUUFVUVk9MLCAzLCAzLCAwKSwKLVdTU19TSU5HTEUoIkZNIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNNSTgzMzBfUkVDTVVYLCAzLCAxLCAxKSwKK1dTU19ET1VCTEUoIkZNIFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEUoIkZNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCAwLCAwLCAzMSwgMSksCiBXU1NfU0lOR0xFKFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiSW5wdXQgIiwgQ0FQVFVSRSwgU1dJVENIKSwgMCwKIAkJQ01JODMzMF9STVVYM0QsIDcsIDEsIDEpLAogV1NTX1NJTkdMRShTTkRSVl9DVExfTkFNRV9JRUM5NTgoIklucHV0ICIsIFBMQVlCQUNLLCBTV0lUQ0gpLCAwLApAQCAtMzIzLDE2ICszMzcsMjEgQEAKIAlpZiAoYWNhcmQtPnBsYXkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWFjYXJkLT5tcHUgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBpZC0+ZGV2c1syXS5pZCwgTlVMTCk7CisJaWYgKGFjYXJkLT5wbGF5ID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKIAlwZGV2ID0gYWNhcmQtPmNhcDsKIAogCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7CiAJaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ01JODMzMC9DM0QgKEFEMTg0OCkgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ01JODMzMC9DM0QgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJd3NzcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7CiAJd3NzZG1hW2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOwogCXdzc2lycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKKwlmbXBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDEpOwogCiAJLyogYWxsb2NhdGUgU0IxNiByZXNvdXJjZXMgKi8KIAlwZGV2ID0gYWNhcmQtPnBsYXk7CkBAIC0zNDcsNiArMzY2LDE3IEBACiAJc2JkbWExNltkZXZdID0gcG5wX2RtYShwZGV2LCAxKTsKIAlzYmlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAorCS8qIGFsbG9jYXRlIE1QVS00MDEgcmVzb3VyY2VzICovCisJcGRldiA9IGFjYXJkLT5tcHU7CisKKwllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJDTUk4MzMwL0MzRCAoTVBVLTQwMSkgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbXB1cG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7CisJbXB1aXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00NjcsMjYgKzQ5NywyOSBAQAogCiAjZGVmaW5lIFBGWAkiY21pODMzMDogIgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY21pODMzMF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfY21pODMzMF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jbWk4MzMwICphY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jbWk4MzMwKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NtaTgzMzApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImNvdWxkIG5vdCBnZXQgYSBuZXcgY2FyZFxuIik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlhY2FyZC0+Y2FyZCA9IGNhcmQ7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NtaTgzMzBfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQogewogCXN0cnVjdCBzbmRfY21pODMzMCAqYWNhcmQ7CiAJaW50IGksIGVycjsKKwlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAllcnIgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCB3c3Nwb3J0W2Rldl0gKyA0LCAtMSwKQEAgLTQ5NCwxMSArNTI3LDExIEBACiAJCQkgICAgIHdzc2RtYVtkZXZdLCAtMSwKIAkJCSAgICAgV1NTX0hXX0RFVEVDVCwgMCwgJmFjYXJkLT53c3MpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQUQxODQ4KSBkZXZpY2UgYnVzeT8/XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihDTUk4MzMwKSBkZXZpY2UgYnVzeT8/XG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGFjYXJkLT53c3MtPmhhcmR3YXJlICE9IFdTU19IV19DTUk4MzMwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQUQxODQ4KSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihDTUk4MzMwKSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01MzAsNiArNTYzLDI3IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KKwlpZiAoZm1wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwKKwkJCQkgICAgZm1wb3J0W2Rldl0sIGZtcG9ydFtkZXZdICsgMiwKKwkJCQkgICAgT1BMM19IV19BVVRPLCAwLCAmb3BsMykgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSAgICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4ID9cbiIsCisJCQkJICAgZm1wb3J0W2Rldl0sIGZtcG9ydFtkZXZdICsgMik7CisJCX0gZWxzZSB7CisJCQllcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKG1wdXBvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJbXB1cG9ydFtkZXZdLCAwLCBtcHVpcnFbZGV2XSwKKwkJCQkJSVJRRl9ESVNBQkxFRCwgTlVMTCkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gTVBVLTQwMSBkZXZpY2UgYXQgMHglbHguXG4iLAorCQkJCW1wdXBvcnRbZGV2XSk7CisJfQogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkNNSTgzMzAvQzNEIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkMtTWVkaWEgQ01JODMzMC9DM0QiKTsKQEAgLTU2NCw5ICs2MTgsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF9jbWk4MzMwX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtNjI4LDkgKzY4Miw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCQkgICAgICAgCi0JY2FyZCA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAJaWYgKChyZXMgPSBzbmRfY21pODMzMF9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIlBuUCBkZXRlY3Rpb24gZmFpbGVkXG4iKTsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUgYi9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCmluZGV4IDU4NzBjYTIuLjZkMzk3ZTggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQpAQCAtMywxMyArMywxMSBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4KICMKIAotc25kLWNzNDIzNi1saWItb2JqcyA6PSBjczQyMzZfbGliLm8KIHNuZC1jczQyMzEtb2JqcyA6PSBjczQyMzEubwotc25kLWNzNDIzMi1vYmpzIDo9IGNzNDIzMi5vCi1zbmQtY3M0MjM2LW9ianMgOj0gY3M0MjM2Lm8KK3NuZC1jczQyMzYtb2JqcyA6PSBjczQyMzYubyBjczQyMzZfbGliLm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9DUzQyMzEpICs9IHNuZC1jczQyMzEubwotb2JqLSQoQ09ORklHX1NORF9DUzQyMzIpICs9IHNuZC1jczQyMzIubwotb2JqLSQoQ09ORklHX1NORF9DUzQyMzYpICs9IHNuZC1jczQyMzYubyBzbmQtY3M0MjM2LWxpYi5vCitvYmotJChDT05GSUdfU05EX0NTNDIzNikgKz0gc25kLWNzNDIzNi5vCisKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKaW5kZXggZjAxOWQ0NC4uY2I5MTUzZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCkBAIC05NSw5ICs5NSw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydFtuXSwgLTEsIGlycVtuXSwgZG1hMVtuXSwgZG1hMltuXSwKIAkJCVdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMyLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmFkMmU2Li4wMDAwMDAwCi0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSNkZWZpbmUgQ1M0MjMyCi0jaW5jbHVkZSAiY3M0MjM2LmMiCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwppbmRleCAwMTljOTQwLi5hMDc2YTZjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKQEAgLTMzLDE3ICszMywxNCBAQAogCiBNT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI2lmZGVmIENTNDIzMgotTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0MjMyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyMzItOSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VHVydGxlIEJlYWNoLFRCUy0yMDAwfSwiCiAJCSJ7VHVydGxlIEJlYWNoLFRyb3BleiBQbHVzfSwiCiAJCSJ7U0lDIENyeXN0YWxXYXZlIDMyfSwiCiAJCSJ7SGV3bGV0dCBQYWNrYXJkLE9tbmlib29rIDU1MDB9LCIKIAkJIntUZXJyYVRlYyxNYWVzdHJvIDMyLzk2fSwiCi0JCSJ7UGhpbGlwcyxQQ0E3MFBTfX0iKTsKLSNlbHNlCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyMzUtOSIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzV9LCIKKwkJIntQaGlsaXBzLFBDQTcwUFN9fSwiCisJCSJ7e0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM1fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzZ9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzN30sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM4fSwiCkBAIC03MCwxNSArNjcsMTEgQEAKIAkJIntUeXBob29uIFNvdW5kc3lzdGVtLENTNDIzNkJ9LCIKIAkJIntUdXJ0bGUgQmVhY2gsTWFsaWJ1fSwiCiAJCSJ7VW5rbm93bixEaWdpdGFsIFBDIDUwMDAgT25ib2FyZH19Iik7Ci0jZW5kaWYKIAotI2lmZGVmIENTNDIzMgotI2RlZmluZSBJREVOVCAiQ1M0MjMyIgotI2RlZmluZSBERVZfTkFNRSAiY3M0MjMyIgotI2Vsc2UKLSNkZWZpbmUgSURFTlQgIkNTNDIzNisiCi0jZGVmaW5lIERFVl9OQU1FICJjczQyMzYiCi0jZW5kaWYKK01PRFVMRV9BTElBUygic25kX2NzNDIzMiIpOworCisjZGVmaW5lIElERU5UICJDUzQyMzIrIgorI2RlZmluZSBERVZfTkFNRSAiY3M0MjMyKyIKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMTI4LDkgKzEyMSw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wY19yZWdpc3RlcmVkOwotI2lmZGVmIENTNDIzMgogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKLSNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAogc3RydWN0IHNuZF9jYXJkX2NzNDIzNiB7CkBAIC0xNDUsMTEgKzEzNiwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1BOUAogCi0jaWZkZWYgQ1M0MjMyCiAvKgogICogUE5QIEJJT1MKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNuZF9jczQyMzJfcG5wYmlvc2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5wYmlvc2lkc1tdID0gewogCXsgLmlkID0gIkNTQzAxMDAiIH0sCiAJeyAuaWQgPSAiQ1NDMDAwMCIgfSwKIAkvKiBHdWlsbGVtb3QgVHVydGxlYmVhY2ggc29tZXRoaW5nIGFwcGVhcnMgdG8gYmUgY3M0MjMyIGNvbXBhdGlibGUKQEAgLTE1NywxMCArMTQ3LDggQEAKIAl7IC5pZCA9ICJHSU0wMTAwIiB9LAogCXsgLmlkID0gIiIgfQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBzbmRfY3M0MjMyX3BucGJpb3NpZHMpOwotI2VuZGlmIC8qIENTNDIzMiAqLworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHNuZF9jczQyM3hfcG5wYmlvc2lkcyk7CiAKLSNpZmRlZiBDUzQyMzIKICNkZWZpbmUgQ1M0MjNYX0lTQVBOUF9EUklWRVIJImNzNDIzMl9pc2FwbnAiCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGlkc1tdID0gewogCS8qIFBoaWxpcHMgUENBNzBQUyAqLwpAQCAtMTc5LDEyICsxNjcsNiBAQAogCXsgLmlkID0gIkNTQ2YwMzIiLCAuZGV2cyA9IHsgeyAiQ1NDMDAwMCIgfSwgeyAiQ1NDMDAxMCIgfSwgeyAiQ1NDMDAwMyIgfSB9IH0sCiAJLyogTmV0ZmluaXR5IDMwMDAgb24tYm9hcmQgc291bmRjYXJkICovCiAJeyAuaWQgPSAiQ1NDZTgyNSIsIC5kZXZzID0geyB7ICJDU0MwMTAwIiB9LCB7ICJDU0MwMTEwIiB9LCB7ICJDU0MwMTBmIiB9IH0gfSwKLQkvKiAtLS0gKi8KLQl7IC5pZCA9ICIiIH0JLyogZW5kICovCi19OwotI2Vsc2UgLyogQ1M0MjM2ICovCi0jZGVmaW5lIENTNDIzWF9JU0FQTlBfRFJJVkVSCSJjczQyMzZfaXNhcG5wIgotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBpZHNbXSA9IHsKIAkvKiBJbnRlbCBNYXJsaW4gU3Bpa2UgTW90aGVyYm9hcmQgLSBDUzQyMzUgKi8KIAl7IC5pZCA9ICJDU0MwMjI1IiwgLmRldnMgPSB7IHsgIkNTQzAwMDAiIH0sIHsgIkNTQzAwMTAiIH0sIHsgIkNTQzAwMDMiIH0gfSB9LAogCS8qIEludGVsIE1hcmxpbiBTcGlrZSBNb3RoZXJib2FyZCAoIzIpIC0gQ1M0MjM1ICovCkBAIC0yNjYsNyArMjQ4LDYgQEAKIAkvKiAtLS0gKi8KIAl7IC5pZCA9ICIiIH0JLyogZW5kICovCiB9OwotI2VuZGlmCiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wX2NhcmQsIHNuZF9jczQyM3hfcG5waWRzKTsKIApAQCAtMzIzLDE3ICszMDQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENTNDIzMgotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfY3M0MjMyX3BucChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKLQkJCQkJIHN0cnVjdCBwbnBfZGV2ICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfY3M0MjN4X3BucChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2ICphY2FyZCwKKwkJCQkJIHN0cnVjdCBwbnBfZGV2ICpwZGV2LAorCQkJCQkgc3RydWN0IHBucF9kZXYgKmNkZXYpCiB7CiAJYWNhcmQtPndzcyA9IHBkZXY7CiAJaWYgKHNuZF9jczQyM3hfcG5wX2luaXRfd3NzKGRldiwgYWNhcmQtPndzcykgPCAwKQogCQlyZXR1cm4gLUVCVVNZOwotCWNwb3J0W2Rldl0gPSAtMTsKKwlpZiAoY2RldikKKwkJY3BvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KGNkZXYsIDApOworCWVsc2UKKwkJY3BvcnRbZGV2XSA9IC0xOwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2NzNDIzeF9wbnBjKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkLAogCQkJCQkgIHN0cnVjdCBwbnBfY2FyZF9saW5rICpjYXJkLApAQCAtMzgyLDE2ICszNjUsMTggQEAKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGFjYXJkLT5yZXNfc2JfcG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jczQyM3hfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2NzNDIzeF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9jczQyMzYpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9jczQyMzZfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjN4X3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTQwOSw0MCArMzk0LDM5IEBACiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLSNpZmRlZiBDUzQyMzIKIAllcnIgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sIGNwb3J0W2Rldl0sCiAJCQkgICAgIGlycVtkZXZdLAogCQkJICAgICBkbWExW2Rldl0sIGRtYTJbZGV2XSwKLQkJCSAgICAgV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOworCQkJICAgICBXU1NfSFdfREVURUNUMywgMCwgJmNoaXApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWFjYXJkLT5jaGlwID0gY2hpcDsKKwlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjM2Ql9NQVNLKSB7CisJCXNuZF93c3NfZnJlZShjaGlwKTsKKwkJZXJyID0gc25kX2NzNDIzNl9jcmVhdGUoY2FyZCwKKwkJCQkJcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAorCQkJCQlpcnFbZGV2XSwgZG1hMVtkZXZdLCBkbWEyW2Rldl0sCisJCQkJCVdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlhY2FyZC0+Y2hpcCA9IGNoaXA7CiAKLQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2NzNDIzNl9wY20oY2hpcCwgMCwgJnBjbSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAotCWVyciA9IHNuZF93c3NfbWl4ZXIoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jczQyMzZfbWl4ZXIoY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQlhY2FyZC0+Y2hpcCA9IGNoaXA7CisJCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsICZwY20pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKLSNlbHNlIC8qIENTNDIzNiAqLwotCWVyciA9IHNuZF9jczQyMzZfY3JlYXRlKGNhcmQsCi0JCQkJcG9ydFtkZXZdLCBjcG9ydFtkZXZdLAotCQkJCWlycVtkZXZdLCBkbWExW2Rldl0sIGRtYTJbZGV2XSwKLQkJCQlXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOwotCi0JZXJyID0gc25kX2NzNDIzNl9wY20oY2hpcCwgMCwgJnBjbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzbmRfY3M0MjM2X21peGVyKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotI2VuZGlmCisJCWVyciA9IHNuZF93c3NfbWl4ZXIoY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgcGNtLT5uYW1lKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpLCBkbWEgJWkiLApAQCAtNTEyLDkgKzQ5Niw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF9jczQyM3hfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC01NzcsMTMgKzU2MSwxNCBAQAogCiAKICNpZmRlZiBDT05GSUdfUE5QCi0jaWZkZWYgQ1M0MjMyCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjMyX3BucGJpb3NfZGV0ZWN0KHN0cnVjdCBwbnBfZGV2ICpwZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9wbnBiaW9zX2RldGVjdChzdHJ1Y3QgcG5wX2RldiAqcGRldiwKIAkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgaW50IGRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcG5wX2RldiAqY2RldjsKKwljaGFyIGNpZFtQTlBfSURfTEVOXTsKIAogCWlmIChwbnBfZGV2aWNlX2lzX2lzYXBucChwZGV2KSkKIAkJcmV0dXJuIC1FTk9FTlQ7CS8qIHdlIGhhdmUgYW5vdGhlciBwcm9jZWR1cmUgLSBjYXJkICovCkBAIC01OTQsMTAgKzU3OSwxOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoKGVyciA9IHNuZF9jYXJkX2NzNDIzMl9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYpKSA8IDApIHsKKwkvKiBwcmVwYXJlIHNlY29uZCBpZCAqLworCXN0cmNweShjaWQsIHBkZXYtPmlkWzBdLmlkKTsKKwljaWRbNV0gPSAnMSc7CisJY2RldiA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGV2LCAmKHBkZXYtPnByb3RvY29sLT5kZXZpY2VzKSwgcHJvdG9jb2xfbGlzdCkgeworCQlpZiAoIXN0cmNtcChjZGV2LT5pZFswXS5pZCwgY2lkKSkKKwkJCWJyZWFrOworCX0KKwllcnIgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9jYXJkX2NzNDIzeF9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYsIGNkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUG5QIEJJT1MgZGV0ZWN0aW9uIGZhaWxlZCBmb3IgIiBJREVOVCAiXG4iKTsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTYxMiwzNSArNjA2LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfY3M0MjMyX3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKiBwZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9jczQyM3hfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqcGRldikKIHsKIAlzbmRfY2FyZF9mcmVlKHBucF9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJcG5wX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNuZF9jczQyMzJfcG5wX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX2NzNDIzeF9wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXJldHVybiBzbmRfY3M0MjN4X3N1c3BlbmQocG5wX2dldF9kcnZkYXRhKHBkZXYpKTsKIH0KIAotc3RhdGljIGludCBzbmRfY3M0MjMyX3BucF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfcG5wX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqcGRldikKIHsKIAlyZXR1cm4gc25kX2NzNDIzeF9yZXN1bWUocG5wX2dldF9kcnZkYXRhKHBkZXYpKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgY3M0MjMyX3BucF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY3M0MjMyLXBucGJpb3MiLAotCS5pZF90YWJsZSA9IHNuZF9jczQyMzJfcG5wYmlvc2lkcywKLQkucHJvYmUgPSBzbmRfY3M0MjMyX3BucGJpb3NfZGV0ZWN0LAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjMyX3BucF9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNzNDIzeF9wbnBfZHJpdmVyID0geworCS5uYW1lID0gImNzNDIzeC1wbnBiaW9zIiwKKwkuaWRfdGFibGUgPSBzbmRfY3M0MjN4X3BucGJpb3NpZHMsCisJLnByb2JlID0gc25kX2NzNDIzeF9wbnBiaW9zX2RldGVjdCwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NzNDIzeF9wbnBfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9jczQyMzJfcG5wX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfY3M0MjMyX3BucF9yZXN1bWUsCisJLnN1c3BlbmQJPSBzbmRfY3M0MjN4X3BucF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2NzNDIzeF9wbnBfcmVzdW1lLAogI2VuZGlmCiB9OwotI2VuZGlmIC8qIENTNDIzMiAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjN4X3BucGNfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKQEAgLTY1Niw5ICs2NDksOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCWlmICgocmVzID0gc25kX2NhcmRfY3M0MjN4X3BucGMoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpc2FwbnAgZGV0ZWN0aW9uIGZhaWxlZCBhbmQgcHJvYmluZyBmb3IgIiBJREVOVAogCQkgICAgICAgIiBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKQEAgLTcxNCwxOCArNzA3LDE0IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCWlmICghZXJyKQogCQlpc2FfcmVnaXN0ZXJlZCA9IDE7Ci0jaWZkZWYgQ1M0MjMyCi0JZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmY3M0MjMyX3BucF9kcml2ZXIpOworCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9wbnBfZHJpdmVyKTsKIAlpZiAoIWVycikKIAkJcG5wX3JlZ2lzdGVyZWQgPSAxOwotI2VuZGlmCiAJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjczQyM3hfcG5wY19kcml2ZXIpOwogCWlmICghZXJyKQogCQlwbnBjX3JlZ2lzdGVyZWQgPSAxOwotI2lmZGVmIENTNDIzMgogCWlmIChwbnBfcmVnaXN0ZXJlZCkKIAkJZXJyID0gMDsKLSNlbmRpZgogCWlmIChpc2FfcmVnaXN0ZXJlZCkKIAkJZXJyID0gMDsKICNlbmRpZgpAQCAtNzM3LDEwICs3MjYsOCBAQAogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAocG5wY19yZWdpc3RlcmVkKQogCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY3M0MjN4X3BucGNfZHJpdmVyKTsKLSNpZmRlZiBDUzQyMzIKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCi0JCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY3M0MjMyX3BucF9kcml2ZXIpOwotI2VuZGlmCisJCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X3BucF9kcml2ZXIpOwogCWlmIChpc2FfcmVnaXN0ZXJlZCkKICNlbmRpZgogCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9pc2FfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMKaW5kZXggNmE4NWZkYy4uMzg4MzVmMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMKQEAgLTg4LDEwICs4OCw2IEBACiAjaW5jbHVkZSA8c291bmQvd3NzLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KIAotTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUm91dGluZXMgZm9yIGNvbnRyb2wgb2YgQ1M0MjM1LzQyMzZCLzQyMzdCLzQyMzhCLzQyMzkgY2hpcHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogLyoKICAqCiAgKi8KQEAgLTI4Niw3ICsyODIsOCBAQAogCWlmIChoYXJkd2FyZSA9PSBXU1NfSFdfREVURUNUKQogCQloYXJkd2FyZSA9IFdTU19IV19ERVRFQ1QzOwogCWlmIChjcG9ydCA8IDB4MTAwKSB7Ci0JCXNuZF9wcmludGsoInBsZWFzZSwgc3BlY2lmeSBjb250cm9sIHBvcnQgZm9yIENTNDIzNisgY2hpcHNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwbGVhc2UsIHNwZWNpZnkgY29udHJvbCBwb3J0ICIKKwkJCSAgICJmb3IgQ1M0MjM2KyBjaGlwc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAllcnIgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0LCBjcG9ydCwKQEAgLTI5NSw3ICsyOTIsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKCEoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjM2Ql9NQVNLKSkgewotCSAgICAgICAgc25kX3ByaW50aygiQ1M0MjM2KzogTU9ERTMgYW5kIGV4dGVuZGVkIHJlZ2lzdGVycyBub3QgYXZhaWxhYmxlLCBoYXJkd2FyZT0weCV4XG4iLGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ1M0MjM2KzogTU9ERTMgYW5kIGV4dGVuZGVkIHJlZ2lzdGVycyAiCisJCQkgICAibm90IGF2YWlsYWJsZSwgaGFyZHdhcmU9MHgleFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgY2hpcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTMwMywxNiArMzAxLDE5IEBACiAJewogCQlpbnQgaWR4OwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDg7IGlkeCsrKQotCQkJc25kX3ByaW50aygiQ0QlaSA9IDB4JXhcbiIsIGlkeCwgaW5iKGNoaXAtPmNwb3J0ICsgaWR4KSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkNEJWkgPSAweCV4XG4iLAorCQkJCSAgIGlkeCwgaW5iKGNoaXAtPmNwb3J0ICsgaWR4KSk7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgOTsgaWR4KyspCi0JCQlzbmRfcHJpbnRrKCJDJWkgPSAweCV4XG4iLCBpZHgsIHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCBpZHgpKTsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQyVpID0gMHgleFxuIiwKKwkJCQkgICBpZHgsIHNuZF9jczQyMzZfY3RybF9pbihjaGlwLCBpZHgpKTsKIAl9CiAjZW5kaWYKIAl2ZXIxID0gc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDEpOwogCXZlcjIgPSBzbmRfY3M0MjM2X2V4dF9pbihjaGlwLCBDUzQyMzZfVkVSU0lPTik7CiAJc25kX3ByaW50ZGQoIkNTNDIzNjogWzB4JWx4XSBDMSAodmVyc2lvbikgPSAweCV4LCBleHQgPSAweCV4XG4iLCBjcG9ydCwgdmVyMSwgdmVyMik7CiAJaWYgKHZlcjEgIT0gdmVyMikgewotCQlzbmRfcHJpbnRrKCJDUzQyMzYrIGNoaXAgZGV0ZWN0ZWQsIGJ1dCBjb250cm9sIHBvcnQgMHglbHggaXMgbm90IHZhbGlkXG4iLCBjcG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNTNDIzNisgY2hpcCBkZXRlY3RlZCwgYnV0ICIKKwkJCSAgICJjb250cm9sIHBvcnQgMHglbHggaXMgbm90IHZhbGlkXG4iLCBjcG9ydCk7CiAJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjaGlwKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtODgzLDcgKzg4NCw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0gJiAweDAyID8gMSA6IDA7CiAjaWYgMAotCXByaW50aygiZ2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiZ2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgIgorCSAgICAgICAiQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKIAkJCXNuZF93c3NfaW4oY2hpcCwgQ1M0MjMxX0FMVF9GRUFUVVJFXzEpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDMpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDQpLApAQCAtOTIwLDcgKzkyMiw4IEBACiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogCiAjaWYgMAotCXByaW50aygic2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAic2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgIgorCSAgICAgICAiQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKIAkJCXNuZF93c3NfaW4oY2hpcCwgQ1M0MjMxX0FMVF9GRUFUVVJFXzEpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDMpLAogCQkJc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIDQpLApAQCAtMTAxNSwyMyArMTAxOCwzIEBACiAJfQogCXJldHVybiAwOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfY3JlYXRlKTsKLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9wY20pOwotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X21peGVyKTsKLQotLyoKLSAqICBJTklUIHBhcnQKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBhbHNhX2NzNDIzNl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NzNDIzNl9leGl0KHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGFsc2FfY3M0MjM2X2luaXQpCi1tb2R1bGVfZXhpdChhbHNhX2NzNDIzNl9leGl0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2R0MDE5eC5jIGIvc291bmQvaXNhL2R0MDE5eC5jCmluZGV4IGEwMjQyYzMuLjgwZjViMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9kdDAxOXguYworKysgYi9zb3VuZC9pc2EvZHQwMTl4LmMKQEAgLTE1MCw5ICsxNTAsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKaW5kZXggYjQ2Mzc3MS4uNDQyYjA4MSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYworKysgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCkBAIC00OSw2ICs0OSw3IEBACiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCiBzdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogMHgyMjAsMHgyNDAsMHgyNjAgKi8KK3N0YXRpYyBsb25nIGZtX3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBVc3VhbGx5IDB4Mzg4ICovCiBzdGF0aWMgbG9uZyBtcHVfcG9ydFtTTkRSVl9DQVJEU10gPSB7WzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IC0xfTsKIHN0YXRpYyBpbnQgaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwkvKiA1LDcsOSwxMCAqLwogc3RhdGljIGludCBtcHVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwkvKiA1LDcsOSwxMCAqLwpAQCAtNjUsNiArNjYsOCBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZm1fcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZtX3BvcnQsICJGTSBwb3J0ICMgZm9yIEVTMTY4OCBkcml2ZXIuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pcnEsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1wdV9pcnEsICJNUFUtNDAxIElSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwpAQCAtMTIyLDkgKzEyNSw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc25kX2VzMTY4OF9sZWdhY3lfY3JlYXRlKGNhcmQsIGRldiwgbiwgJmNoaXApOwogCWlmIChlcnJvciA8IDApCkBAIC0xNDMsMTMgKzE0NiwxOSBAQAogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpLCBkbWEgJWkiLCBwY20tPm5hbWUsCiAJCWNoaXAtPnBvcnQsIGNoaXAtPmlycSwgY2hpcC0+ZG1hOCk7CiAKLQlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyLAotCQkJT1BMM19IV19PUEwzLCAwLCAmb3BsMykgPCAwKQotCQlkZXZfd2FybihkZXYsICJvcGwzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgY2hpcC0+cG9ydCk7Ci0JZWxzZSB7Ci0JCWVycm9yID0Jc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJZ290byBvdXQ7CisJaWYgKGZtX3BvcnRbbl0gPT0gU05EUlZfQVVUT19QT1JUKQorCQlmbV9wb3J0W25dID0gcG9ydFtuXTsJLyogc2hhcmUgdGhlIHNhbWUgcG9ydCAqLworCisJaWYgKGZtX3BvcnRbbl0gPiAwKSB7CisJCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwgZm1fcG9ydFtuXSwgZm1fcG9ydFtuXSArIDIsCisJCQkJT1BMM19IV19PUEwzLCAwLCAmb3BsMykgPCAwKQorCQkJZGV2X3dhcm4oZGV2LAorCQkJCSAib3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGZtX3BvcnRbbl0pOworCQllbHNlIHsKKwkJCWVycm9yID0Jc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQkJaWYgKGVycm9yIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQogCX0KIAogCWlmIChtcHVfaXJxW25dID49IDAgJiYgbXB1X2lycVtuXSAhPSBTTkRSVl9BVVRPX0lSUSAmJgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYwppbmRleCA0ZmJiNTA4Li40YzZlMTRmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYworKysgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYwpAQCAtNDUsNyArNDUsNyBAQAogCQkJcmV0dXJuIDE7CiAJCX0KICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0JcHJpbnRrKCJzbmRfZXMxNjg4X2RzcF9jb21tYW5kOiB0aW1lb3V0ICgweCV4KVxuIiwgdmFsKTsKKwlwcmludGsoS0VSTl9ERUJVRyAic25kX2VzMTY4OF9kc3BfY29tbWFuZDogdGltZW91dCAoMHgleClcbiIsIHZhbCk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NywxMyArMTY3LDE2IEBACiAJaHcgPSBFUzE2ODhfSFdfQVVUTzsKIAlzd2l0Y2ggKGNoaXAtPnZlcnNpb24gJiAweGZmZjApIHsKIAljYXNlIDB4NDg4MDoKLQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IEF1ZGlvRHJpdmUgRVM0ODggZGV0ZWN0ZWQsIGJ1dCBkcml2ZXIgaXMgaW4gYW5vdGhlciBwbGFjZVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiBBdWRpb0RyaXZlIEVTNDg4IGRldGVjdGVkLCAiCisJCQkgICAiYnV0IGRyaXZlciBpcyBpbiBhbm90aGVyIHBsYWNlXG4iLCBjaGlwLT5wb3J0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FzZSAweDY4ODA6CiAJCWh3ID0gKGNoaXAtPnZlcnNpb24gJiAweDBmKSA+PSA4ID8gRVMxNjg4X0hXXzE2ODggOiBFUzE2ODhfSFdfNjg4OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogdW5rbm93biBBdWRpb0RyaXZlIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXggKEphenoxNiBzb3VuZGNhcmQ/KVxuIiwgY2hpcC0+cG9ydCwgY2hpcC0+dmVyc2lvbik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gRVNTOiB1bmtub3duIEF1ZGlvRHJpdmUgY2hpcCAiCisJCQkgICAid2l0aCB2ZXJzaW9uIDB4JXggKEphenoxNiBzb3VuZGNhcmQ/KVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnZlcnNpb24pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTIyMyw3ICsyMjYsNyBAQAogCQl9CiAJfQogI2lmIDAKLQlzbmRfcHJpbnRrKCJtcHUgY2ZnID0gMHgleFxuIiwgY2ZnKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1wdSBjZmcgPSAweCV4XG4iLCBjZmcpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX2VzMTY4OF9taXhlcl93cml0ZShjaGlwLCAweDQwLCBjZmcpOwpAQCAtMjM3LDcgKzI0MCw5IEBACiAJCWNmZyA9IDB4ZjA7CS8qIGVuYWJsZSBvbmx5IERNQSBjb3VudGVyIGludGVycnVwdCAqLwogCQlpcnFfYml0cyA9IGlycXNbY2hpcC0+aXJxICYgMHgwZl07CiAJCWlmIChpcnFfYml0cyA8IDApIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBiYWQgSVJRICVkIGZvciBFUzE2ODggY2hpcCEhXG4iLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IGJhZCBJUlEgJWQgIgorCQkJCSAgICJmb3IgRVMxNjg4IGNoaXAhIVxuIiwKKwkJCQkgICBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOwogI2lmIDAKIAkJCWlycV9iaXRzID0gMDsKIAkJCWNmZyA9IDB4MTA7CkBAIC0yNTAsNyArMjU1LDggQEAKIAkJY2ZnID0gMHhmMDsJLyogZXh0ZW5kZWQgbW9kZSBETUEgZW5hYmxlICovCiAJCWRtYSA9IGNoaXAtPmRtYTg7CiAJCWlmIChkbWEgPiAzIHx8IGRtYSA9PSAyKSB7Ci0JCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogYmFkIERNQSBjaGFubmVsICVkIGZvciBFUzE2ODggY2hpcCEhXG4iLCBjaGlwLT5wb3J0LCBkbWEpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IGJhZCBETUEgY2hhbm5lbCAlZCAiCisJCQkJICAgImZvciBFUzE2ODggY2hpcCEhXG4iLCBjaGlwLT5wb3J0LCBkbWEpOwogI2lmIDAKIAkJCWRtYV9iaXRzID0gMDsKIAkJCWNmZyA9IDB4MDA7CS8qIGRpc2FibGUgYWxsIERNQSAqLwpAQCAtMzQxLDggKzM0Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwkvKiBzb21ldGhpbmcgaXMgd3JvbmcgKi8KIAl9CiAjaWYgMAotCXByaW50aygidHJpZ2dlcjogdmFsID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCB2YWwsIHZhbHVlKTsKLQlwcmludGsoInRyaWdnZXI6IHBvaW50ZXIgPSAweCV4XG4iLCBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+ZG1hX3NpemUpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidHJpZ2dlcjogdmFsID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCB2YWwsIHZhbHVlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidHJpZ2dlcjogcG9pbnRlciA9IDB4JXhcbiIsCisJICAgICAgIHNuZF9kbWFfcG9pbnRlcihjaGlwLT5kbWE4LCBjaGlwLT5kbWFfc2l6ZSkpOwogI2VuZGlmCiAJc25kX2VzMTY4OF93cml0ZShjaGlwLCAweGI4LCAodmFsICYgMHhmMCkgfCB2YWx1ZSk7CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE4eHguYyBiL3NvdW5kL2lzYS9lczE4eHguYwppbmRleCA5MDQ5OGU0Li44Y2ZiZmY3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxOHh4LmMKKysrIGIvc291bmQvaXNhL2VzMTh4eC5jCkBAIC0yMTI1LDEwICsyMTI1LDEwIEBACiAjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQkwCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2VzMTh4eF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfZXMxOHh4X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewotCXJldHVybiBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfYXVkaW9kcml2ZSkpOworCXJldHVybiBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfYXVkaW9kcml2ZSksIGNhcmRwKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2F1ZGlvZHJpdmVfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtMjE5Nyw5ICsyMTk3LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldnB0cik7CiAJaWYgKChlcnIgPSBzbmRfYXVkaW9kcml2ZV9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTIzMDMsOSArMjMwMyw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfYXVkaW9kcml2ZV9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTIzNjIsOSArMjM2Miw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoKHJlcyA9IHNuZF9hdWRpb2RyaXZlX3BucGMoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jIGIvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKaW5kZXggZjQ1ZjYxMS4uMzZjMjdjOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKQEAgLTQ1LDcgKzQ1LDggQEAKIAl1bnNpZ25lZCBjaGFyIGRtYV9jbWQ7CiAJdW5zaWduZWQgaW50IGFkZHJlc3NfaGlnaDsKIAotCS8vIHNuZF9wcmludGsoImRtYV90cmFuc2ZlcjogYWRkcj0weCV4LCBidWY9MHglbHgsIGNvdW50PTB4JXhcbiIsIGFkZHIsIChsb25nKSBidWYsIGNvdW50KTsKKwlzbmRfcHJpbnRkZCgiZG1hX3RyYW5zZmVyOiBhZGRyPTB4JXgsIGJ1Zj0weCVseCwgY291bnQ9MHgleFxuIiwKKwkJICAgIGFkZHIsIGJ1Zl9hZGRyLCBjb3VudCk7CiAKIAlpZiAoZ3VzLT5nZjEuZG1hMSA+IDMpIHsKIAkJaWYgKGd1cy0+Z2YxLmVuaF9tb2RlKSB7CkBAIC03Nyw3ICs3OCw4IEBACiAJc25kX2dmMV9kbWFfYWNrKGd1cyk7CiAJc25kX2RtYV9wcm9ncmFtKGd1cy0+Z2YxLmRtYTEsIGJ1Zl9hZGRyLCBjb3VudCwgZG1hX2NtZCAmIFNORFJWX0dGMV9ETUFfUkVBRCA/IERNQV9NT0RFX1JFQUQgOiBETUFfTU9ERV9XUklURSk7CiAjaWYgMAotCXNuZF9wcmludGsoImFkZHJlc3MgPSAweCV4LCBjb3VudCA9IDB4JXgsIGRtYV9jbWQgPSAweCV4XG4iLCBhZGRyZXNzIDw8IDEsIGNvdW50LCBkbWFfY21kKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImFkZHJlc3MgPSAweCV4LCBjb3VudCA9IDB4JXgsIGRtYV9jbWQgPSAweCV4XG4iLAorCQkgICBhZGRyZXNzIDw8IDEsIGNvdW50LCBkbWFfY21kKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKGd1cy0+Z2YxLmVuaF9tb2RlKSB7CkBAIC0xNDIsNyArMTQ0LDkgQEAKIAlzbmRfZ2YxX2RtYV9wcm9ncmFtKGd1cywgYmxvY2stPmFkZHIsIGJsb2NrLT5idWZfYWRkciwgYmxvY2stPmNvdW50LCAodW5zaWduZWQgc2hvcnQpIGJsb2NrLT5jbWQpOwogCWtmcmVlKGJsb2NrKTsKICNpZiAwCi0JcHJpbnRrKCJwcm9ncmFtIGRtYSAoSVJRKSAtIGFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLCBhZGRyLCAobG9uZykgYnVmZmVyLCBjb3VudCwgY21kKTsKKwlzbmRfcHJpbnRkKEtFUk5fREVCVUcgInByb2dyYW0gZG1hIChJUlEpIC0gIgorCQkgICAiYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsCisJCSAgIGJsb2NrLT5hZGRyLCBibG9jay0+YnVmX2FkZHIsIGJsb2NrLT5jb3VudCwgYmxvY2stPmNtZCk7CiAjZW5kaWYKIH0KIApAQCAtMjAzLDEzICsyMDcsMTYgQEAKIAl9CiAJKmJsb2NrID0gKl9fYmxvY2s7CiAJYmxvY2stPm5leHQgPSBOVUxMOwotI2lmIDAKLQlwcmludGsoImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLCBibG9jay0+YWRkciwgKGxvbmcpIGJsb2NrLT5idWZmZXIsIGJsb2NrLT5jb3VudCwgYmxvY2stPmNtZCk7Ci0jZW5kaWYKLSNpZiAwCi0JcHJpbnRrKCJndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCA9IDB4JWx4XG4iLCAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCk7Ci0JcHJpbnRrKCJndXMtPmdmMS5kbWFfZGF0YV9wY20gPSAweCVseFxuIiwgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtKTsKLSNlbmRpZgorCisJc25kX3ByaW50ZGQoImFkZHIgPSAweCV4LCBidWZmZXIgPSAweCVseCwgY291bnQgPSAweCV4LCBjbWQgPSAweCV4XG4iLAorCQkgICAgYmxvY2stPmFkZHIsIChsb25nKSBibG9jay0+YnVmZmVyLCBibG9jay0+Y291bnQsCisJCSAgICBibG9jay0+Y21kKTsKKworCXNuZF9wcmludGRkKCJndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCA9IDB4JWx4XG4iLAorCQkgICAgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QpOworCXNuZF9wcmludGRkKCJndXMtPmdmMS5kbWFfZGF0YV9wY20gPSAweCVseFxuIiwKKwkJICAgIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbSk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5kbWFfbG9jaywgZmxhZ3MpOwogCWlmIChzeW50aCkgewogCQlpZiAoZ3VzLT5nZjEuZG1hX2RhdGFfc3ludGhfbGFzdCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfaXJxLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYwppbmRleCAwNDE4OTRkLi4yMDU1YWZmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYwpAQCAtNDEsNyArNDEsNyBAQAogCWlmIChzdGF0dXMgPT0gMCkKIAkJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiAJaGFuZGxlZCA9IDE7Ci0JLy8gc25kX3ByaW50aygiSVJROiBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiSVJROiBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOyAqLwogCWlmIChzdGF0dXMgJiAweDAyKSB7CiAJCVNUQVRfQUREKGd1cy0+Z2YxLmludGVycnVwdF9zdGF0X21pZGlfaW4pOwogCQlpZiAoZ3VzLT5nZjEuaW50ZXJydXB0X2hhbmRsZXJfbWlkaV9pbikKQEAgLTY1LDcgKzY1LDkgQEAKIAkJCQljb250aW51ZTsJLyogbXVsdGkgcmVxdWVzdCAqLwogCQkJYWxyZWFkeSB8PSBfY3VycmVudF87CS8qIG1hcmsgcmVxdWVzdCAqLwogI2lmIDAKLQkJCXByaW50aygidm9pY2UgPSAlaSwgdm9pY2Vfc3RhdHVzID0gMHgleCwgdm9pY2VfdmVyaWZ5ID0gJWlcbiIsIHZvaWNlLCB2b2ljZV9zdGF0dXMsIGluYihHVVNQKGd1cywgR0YxUEFHRSkpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2b2ljZSA9ICVpLCB2b2ljZV9zdGF0dXMgPSAweCV4LCAiCisJCQkgICAgICAgInZvaWNlX3ZlcmlmeSA9ICVpXG4iLAorCQkJICAgICAgIHZvaWNlLCB2b2ljZV9zdGF0dXMsIGluYihHVVNQKGd1cywgR0YxUEFHRSkpKTsKICNlbmRpZgogCQkJcHZvaWNlID0gJmd1cy0+Z2YxLnZvaWNlc1t2b2ljZV07IAogCQkJaWYgKHB2b2ljZS0+dXNlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jCmluZGV4IDM4NTEwYWUuLmVkYjExZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jCkBAIC04Miw3ICs4MiwxMCBAQAogCiAJY291bnQgKz0gb2Zmc2V0ICYgMzE7CiAJb2Zmc2V0ICY9IH4zMTsKLQkvLyBzbmRfcHJpbnRrKCJibG9jayBjaGFuZ2UgLSBvZmZzZXQgPSAweCV4LCBjb3VudCA9IDB4JXhcbiIsIG9mZnNldCwgY291bnQpOworCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJibG9jayBjaGFuZ2UgLSBvZmZzZXQgPSAweCV4LCBjb3VudCA9IDB4JXhcbiIsCisJCSAgIG9mZnNldCwgY291bnQpOworCSovCiAJbWVtc2V0KCZibG9jaywgMCwgc2l6ZW9mKGJsb2NrKSk7CiAJYmxvY2suY21kID0gU05EUlZfR0YxX0RNQV9JUlE7CiAJaWYgKHNuZF9wY21fZm9ybWF0X3Vuc2lnbmVkKHJ1bnRpbWUtPmZvcm1hdCkpCkBAIC0xMzUsNyArMTM4LDExIEBACiAJCWN1cnIgPSBiZWdpbiArIChwY21wLT5icG9zICogcGNtcC0+YmxvY2tfc2l6ZSkgLyBydW50aW1lLT5jaGFubmVsczsKIAkJZW5kID0gY3VyciArIChwY21wLT5ibG9ja19zaXplIC8gcnVudGltZS0+Y2hhbm5lbHMpOwogCQllbmQgLT0gc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSA9PSAxNiA/IDIgOiAxOwotCQkvLyBzbmRfcHJpbnRrKCJpbml0OiBjdXJyPTB4JXgsIGJlZ2luPTB4JXgsIGVuZD0weCV4LCBjdHJsPTB4JXgsIHJhbXA9MHgleCwgcmF0ZT0weCV4XG4iLCBjdXJyLCBiZWdpbiwgZW5kLCB2b2ljZV9jdHJsLCByYW1wX2N0cmwsIHJhdGUpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6IGN1cnI9MHgleCwgYmVnaW49MHgleCwgZW5kPTB4JXgsICIKKwkJCSAgICJjdHJsPTB4JXgsIHJhbXA9MHgleCwgcmF0ZT0weCV4XG4iLAorCQkJICAgY3VyciwgYmVnaW4sIGVuZCwgdm9pY2VfY3RybCwgcmFtcF9jdHJsLCByYXRlKTsKKwkJKi8KIAkJcGFuID0gcnVudGltZS0+Y2hhbm5lbHMgPT0gMiA/ICghdm9pY2UgPyAxIDogMTQpIDogODsKIAkJdm9sID0gIXZvaWNlID8gZ3VzLT5nZjEucGNtX3ZvbHVtZV9sZXZlbF9sZWZ0IDogZ3VzLT5nZjEucGNtX3ZvbHVtZV9sZXZlbF9yaWdodDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTIwNSw5ICsyMTIsMTEgQEAKIAlyYW1wX2N0cmwgPSAoc25kX2dmMV9yZWFkOChndXMsIFNORFJWX0dGMV9WQl9WT0xVTUVfQ09OVFJPTCkgJiB+MHhhNCkgfCAweDAzOwogI2lmIDAKIAlzbmRfZ2YxX3NlbGVjdF92b2ljZShndXMsIHB2b2ljZS0+bnVtYmVyKTsKLQlwcmludGsoInBvc2l0aW9uID0gMHgleFxuIiwgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBvc2l0aW9uID0gMHgleFxuIiwKKwkgICAgICAgKHNuZF9nZjFfcmVhZF9hZGRyKGd1cywgU05EUlZfR0YxX1ZBX0NVUlJFTlQsIHZvaWNlX2N0cmwgJiA0KSA+PiA0KSk7CiAJc25kX2dmMV9zZWxlY3Rfdm9pY2UoZ3VzLCBwY21wLT5wdm9pY2VzWzFdLT5udW1iZXIpOwotCXByaW50aygicG9zaXRpb24gPSAweCV4XG4iLCAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicG9zaXRpb24gPSAweCV4XG4iLAorCSAgICAgICAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKIAlzbmRfZ2YxX3NlbGVjdF92b2ljZShndXMsIHB2b2ljZS0+bnVtYmVyKTsKICNlbmRpZgogCXBjbXAtPmJwb3MrKzsKQEAgLTI5OSw3ICszMDgsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvLyBwcmludGsoInBva2UgYmxvY2s7IGJ1ZiA9IDB4JXgsIHBvcyA9ICVpLCBjb3VudCA9ICVpLCBwb3J0ID0gMHgleFxuIiwgKGludClidWYsIHBvcywgY291bnQsIGd1cy0+Z2YxLnBvcnQpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInBva2UgYmxvY2s7IGJ1ZiA9IDB4JXgsIHBvcyA9ICVpLCBjb3VudCA9ICVpLCBwb3J0ID0gMHgleFxuIiwKKwkgICAgICAgKGludClidWYsIHBvcywgY291bnQsIGd1cy0+Z2YxLnBvcnQpOworCSovCiAJd2hpbGUgKGNvdW50ID4gMCkgewogCQlsZW4gPSBjb3VudDsKIAkJaWYgKGxlbiA+IDUxMikJCS8qIGxpbWl0LCB0byBhbGxvdyBJUlEgKi8KQEAgLTY4MCw3ICs2OTMsOCBAQAogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9nZjFfcGNtX3BsYXliYWNrX2ZyZWU7CiAKICNpZiAwCi0JcHJpbnRrKCJwbGF5YmFjay5idWZmZXIgPSAweCVseCwgZ2YxLnBjbV9idWZmZXIgPSAweCVseFxuIiwgKGxvbmcpIHBjbS0+cGxheWJhY2suYnVmZmVyLCAobG9uZykgZ3VzLT5nZjEucGNtX2J1ZmZlcik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBsYXliYWNrLmJ1ZmZlciA9IDB4JWx4LCBnZjEucGNtX2J1ZmZlciA9IDB4JWx4XG4iLAorCSAgICAgICAobG9uZykgcGNtLT5wbGF5YmFjay5idWZmZXIsIChsb25nKSBndXMtPmdmMS5wY21fYnVmZmVyKTsKICNlbmRpZgogCWlmICgoZXJyID0gc25kX2dmMV9kbWFfaW5pdChndXMpKSA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKaW5kZXggZjBhZjNmNy4uMjFjYzQyZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYwpAQCAtMTI5LDggKzEyOSwxNCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndXMtPnVhcnRfY21kX2xvY2ssIGZsYWdzKTsKICNpZiAwCi0Jc25kX3ByaW50aygicmVhZCBpbml0IC0gZW5hYmxlID0gJWksIGNtZCA9IDB4JXgsIHN0YXQgPSAweCV4XG4iLCBndXMtPnVhcnRfZW5hYmxlLCBndXMtPmdmMS51YXJ0X2NtZCwgc25kX2dmMV91YXJ0X3N0YXQoZ3VzKSk7Ci0Jc25kX3ByaW50aygiWzB4JXhdIHJlZyAoY3RybC9zdGF0dXMpID0gMHgleCwgcmVnIChkYXRhKSA9IDB4JXggKHBhZ2UgPSAweCV4KVxuIiwgZ3VzLT5nZjEucG9ydCArIDB4MTAwLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAwKSwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMSksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDIpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInJlYWQgaW5pdCAtIGVuYWJsZSA9ICVpLCBjbWQgPSAweCV4LCBzdGF0ID0gMHgleFxuIiwKKwkJICAgZ3VzLT51YXJ0X2VuYWJsZSwgZ3VzLT5nZjEudWFydF9jbWQsIHNuZF9nZjFfdWFydF9zdGF0KGd1cykpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAiWzB4JXhdIHJlZyAoY3RybC9zdGF0dXMpID0gMHgleCwgcmVnIChkYXRhKSA9IDB4JXggIgorCQkgICAiKHBhZ2UgPSAweCV4KVxuIiwKKwkJICAgZ3VzLT5nZjEucG9ydCArIDB4MTAwLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAwKSwKKwkJICAgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMSksIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDIpKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYwppbmRleCA0MjY1MzJhLi4wODZiOGYwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYwpAQCAtMTQ4LDkgKzE0OCw5IEBACiAJc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHBjbV9jaGFubmVsc1tuXSA8IDIpCiAJCXBjbV9jaGFubmVsc1tuXSA9IDI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCmluZGV4IDdhZDRjM2IuLjE4MGE4ZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jCkBAIC0yNDEsOSArMjQxLDkgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAobXB1X3BvcnRbbl0gPT0gU05EUlZfQVVUT19QT1JUKQogCQltcHVfcG9ydFtuXSA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwppbmRleCBmOTRjMTk3Li5mMjZlYWM4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKQEAgLTIxNCwxMCArMjE0LDEwIEBACiAJc3RydWN0IHNuZF93c3MgKndzczsKIAlzdHJ1Y3Qgc25kX2d1c21heCAqbWF4Y2FyZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZ3VzbWF4KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZ3VzbWF4KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ndXNtYXhfZnJlZTsKIAltYXhjYXJkID0gKHN0cnVjdCBzbmRfZ3VzbWF4ICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCW1heGNhcmQtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKaW5kZXggNWZhZWNmYi4uNTM0YTZlYyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBidXMtPnByaXZhdGVfdmFsdWU7CiAKICNpZiAwCi0JcHJpbnRrKCJpMmNfc2V0bGluZXMgLSAweCVseCA8LSAlaSwlaVxuIiwgcG9ydCwgY3RybCwgZGF0YSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19zZXRsaW5lcyAtIDB4JWx4IDwtICVpLCVpXG4iLCBwb3J0LCBjdHJsLCBkYXRhKTsKICNlbmRpZgogCW91dGIoKGRhdGEgPDwgMSkgfCBjdHJsLCBwb3J0KTsKIAl1ZGVsYXkoMTApOwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIAlyZXMgPSBpbmIocG9ydCkgJiAxOwogI2lmIDAKLQlwcmludGsoImkyY19nZXRjbG9ja2xpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX2dldGNsb2NrbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOwogI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQl1ZGVsYXkoMTApOwogCXJlcyA9IChpbmIocG9ydCkgJiAyKSA+PiAxOwogI2lmIDAKLQlwcmludGsoImkyY19nZXRkYXRhbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfZ2V0ZGF0YWxpbmUgLSAweCVseCAtPiAlaVxuIiwgcG9ydCwgcmVzKTsKICNlbmRpZgogCXJldHVybiByZXM7CiB9CkBAIC0zNDIsNyArMzQyLDggQEAKIAkJCXNuZF9nZjFfcG9rZShndXMsIGxvY2FsLCBkKTsKIAkJCXNuZF9nZjFfcG9rZShndXMsIGxvY2FsICsgMSwgZCArIDEpOwogI2lmIDAKLQkJCXByaW50aygiZCA9IDB4JXgsIGxvY2FsID0gMHgleCwgbG9jYWwgKyAxID0gMHgleCwgaWR4IDw8IDIyID0gMHgleFxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJkID0gMHgleCwgbG9jYWwgPSAweCV4LCAiCisJCQkgICAgICAgImxvY2FsICsgMSA9IDB4JXgsIGlkeCA8PCAyMiA9IDB4JXhcbiIsCiAJCQkgICAgICAgZCwKIAkJCSAgICAgICBzbmRfZ2YxX3BlZWsoZ3VzLCBsb2NhbCksCiAJCQkgICAgICAgc25kX2dmMV9wZWVrKGd1cywgbG9jYWwgKyAxKSwKQEAgLTM1Niw3ICszNTcsOCBAQAogCQl9CiAJfQogI2lmIDAKLQlwcmludGsoInNpemVzOiAlaSAlaSAlaSAlaVxuIiwgc2l6ZXNbMF0sIHNpemVzWzFdLCBzaXplc1syXSwgc2l6ZXNbM10pOworCXByaW50ayhLRVJOX0RFQlVHICJzaXplczogJWkgJWkgJWkgJWlcbiIsCisJICAgICAgIHNpemVzWzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0sIHNpemVzWzNdKTsKICNlbmRpZgogfQogCkBAIC00MTAsMTIgKzQxMiwxMiBAQAogCQlsbWN0ID0gKHBzaXplc1szXSA8PCAyNCkgfCAocHNpemVzWzJdIDw8IDE2KSB8CiAJCSAgICAocHNpemVzWzFdIDw8IDgpIHwgcHNpemVzWzBdOwogI2lmIDAKLQkJcHJpbnRrKCJsbWN0ID0gMHglMDh4XG4iLCBsbWN0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImxtY3QgPSAweCUwOHhcbiIsIGxtY3QpOwogI2VuZGlmCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxtYyk7IGkrKykKIAkJCWlmIChsbWN0ID09IGxtY1tpXSkgewogI2lmIDAKLQkJCQlwcmludGsoImZvdW5kICEhISAlaVxuIiwgaSk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImZvdW5kICEhISAlaVxuIiwgaSk7CiAjZW5kaWYKIAkJCQlzbmRfZ2YxX3dyaXRlMTYoZ3VzLCBTTkRSVl9HRjFfR1dfTUVNT1JZX0NPTkZJRywgKHNuZF9nZjFfbG9vazE2KGd1cywgU05EUlZfR0YxX0dXX01FTU9SWV9DT05GSUcpICYgMHhmZmYwKSB8IGkpOwogCQkJCXNuZF9pbnRlcndhdmVfYmFua19zaXplcyhndXMsIHBzaXplcyk7CkBAIC02MjYsMjAgKzYyOCwyMiBAQAogCQlmcmVlX2lycShpd2NhcmQtPmlycSwgKHZvaWQgKilpd2NhcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfaW50ZXJ3YXZlICppd2NhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfaW50ZXJ3YXZlKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfaW50ZXJ3YXZlKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWl3Y2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpd2NhcmQtPmNhcmQgPSBjYXJkOwogCWl3Y2FyZC0+aXJxID0gLTE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2ludGVyd2F2ZV9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlcndhdmVfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNzc4LDkgKzc4Miw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldnB0cik7CiAJaWYgKChlcnIgPSBzbmRfaW50ZXJ3YXZlX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewpAQCAtODc2LDkgKzg4MCw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCQkJCi0JY2FyZCA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCiAJaWYgKChyZXMgPSBzbmRfaW50ZXJ3YXZlX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvTWFrZWZpbGUgYi9zb3VuZC9pc2EvbXNuZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTcxYzBhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisKK3NuZC1tc25kLWxpYi1vYmpzIDo9IG1zbmQubyBtc25kX21pZGkubyBtc25kX3Bpbm5hY2xlX21peGVyLm8KK3NuZC1tc25kLXBpbm5hY2xlLW9ianMgOj0gbXNuZF9waW5uYWNsZS5vCitzbmQtbXNuZC1jbGFzc2ljLW9ianMgOj0gbXNuZF9jbGFzc2ljLm8KKworIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQorb2JqLSQoQ09ORklHX1NORF9NU05EX1BJTk5BQ0xFKSArPSBzbmQtbXNuZC1waW5uYWNsZS5vIHNuZC1tc25kLWxpYi5vCitvYmotJChDT05GSUdfU05EX01TTkRfQ0xBU1NJQykgKz0gc25kLW1zbmQtY2xhc3NpYy5vIHNuZC1tc25kLWxpYi5vCisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmQuYyBiL3NvdW5kL2lzYS9tc25kL21zbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY0NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZC5jCkBAIC0wLDAgKzEsNzA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogMjAwMi8wNi8zMCBLYXJzdGVuIFdpZXNlOgorICoJcmVtb3ZlZCBrZXJuZWwtdmVyc2lvbiBkZXBlbmRlbmNpZXMuCisgKglyaXBwZWQgZnJvbSBsaW51eCBrZXJuZWwgMi40LjE4IChPU1MgSW1wbGVtZW50YXRpb24pIGJ5IG1lLgorICoJSW4gdGhlIE9TUyBWZXJzaW9uLCB0aGlzIGZpbGUgaXMgY29tcGlsZWQgdG8gYSBzZXBhcmF0ZSBNT0RVTEUsCisgKgl0aGF0IGlzIHVzZWQgYnkgdGhlIHBpbm5hY2xlIGFuZCB0aGUgY2xhc3NpYyBkcml2ZXIuCisgKglzaW5jZSB0aGVyZSBpcyBubyBjbGFzc2ljIGRyaXZlciBmb3IgYWxzYSB5ZXQgKGkgZG9udCBoYXZlIGEgY2xhc3NpYworICoJJiB3cml0aW5nIG9uZSBibGluZGZvbGQgaXMgZGlmZmljdWx0KSB0aGlzIGZpbGUncyBvYmplY3QgaXMgc3RhdGljYWxseQorICoJbGlua2VkIGludG8gdGhlIHBpbm5hY2xlLWRyaXZlci1tb2R1bGUgZm9yIG5vdy4JbG9vayBmb3IgdGhlIHN0cmluZworICoJCSJ1bmNvbW1lbnQgdGhpcyB0byBtYWtlIHRoaXMgYSBtb2R1bGUgYWdhaW4iCisgKgl0byBkbyBndWVzcyB3aGF0LgorICoKKyAqIHRoZSBmb2xsb3dpbmcgaXMgYSBjb3B5IG9mIHRoZSAyLjQuMTggT1NTIEZSRUUgZmlsZS1oZWFkaW5nIGNvbW1lbnQ6CisgKgorICogbXNuZC5jIC0gRHJpdmVyIEJhc2UKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlICJtc25kLmgiCisKKyNkZWZpbmUgTE9HTkFNRQkJCSJtc25kIgorCisKK3ZvaWQgc25kX21zbmRfaW5pdF9xdWV1ZSh2b2lkICpiYXNlLCBpbnQgc3RhcnQsIGludCBzaXplKQoreworCXdyaXRldyhQQ1RPRFNQX0JBU0VEKHN0YXJ0KSwgYmFzZSArIEpRU193U3RhcnQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVChzaXplKSAtIDEsIGJhc2UgKyBKUVNfd1NpemUpOworCXdyaXRldygwLCBiYXNlICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoMCwgYmFzZSArIEpRU193VGFpbCk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2luaXRfcXVldWUpOworCitzdGF0aWMgaW50IHNuZF9tc25kX3dhaXRfVFhERShzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaW8gPSBkZXYtPmlvOworCWludCB0aW1lb3V0ID0gMTAwMDsKKworCXdoaWxlICh0aW1lb3V0LS0gPiAwKQorCQlpZiAoaW5iKGlvICsgSFBfSVNSKSAmIEhQSVNSX1RYREUpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3dhaXRfSEMwKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGludCBpbyA9IGRldi0+aW87CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApCisJCWlmICghKGluYihpbyArIEhQX0NWUikgJiBIUENWUl9IQykpCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlPOworfQorCitpbnQgc25kX21zbmRfc2VuZF9kc3BfY21kKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCB1OCBjbWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9IQzAoZGV2KSA9PSAwKSB7CisJCW91dGIoY21kLCBkZXYtPmlvICsgSFBfQ1ZSKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBTZW5kIERTUCBjb21tYW5kIHRpbWVvdXRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3NlbmRfZHNwX2NtZCk7CisKK2ludCBzbmRfbXNuZF9zZW5kX3dvcmQoc3RydWN0IHNuZF9tc25kICpkZXYsIHVuc2lnbmVkIGNoYXIgaGlnaCwKKwkJICAgdW5zaWduZWQgY2hhciBtaWQsIHVuc2lnbmVkIGNoYXIgbG93KQoreworCXVuc2lnbmVkIGludCBpbyA9IGRldi0+aW87CisKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGhpZ2gsIGlvICsgSFBfVFhIKTsKKwkJb3V0YihtaWQsIGlvICsgSFBfVFhNKTsKKwkJb3V0Yihsb3csIGlvICsgSFBfVFhMKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IFNlbmQgaG9zdCB3b3JkIHRpbWVvdXRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX3NlbmRfd29yZCk7CisKK2ludCBzbmRfbXNuZF91cGxvYWRfaG9zdChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgY29uc3QgdTggKmJpbiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWlmIChsZW4gJSAzICE9IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkgICAiOiBVcGxvYWQgaG9zdCBkYXRhIG5vdCBtdWx0aXBsZSBvZiAzIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIGJpbltpXSwgYmluW2kgKyAxXSwgYmluW2kgKyAyXSkpCisJCQlyZXR1cm4gLUVJTzsKKworCWluYihkZXYtPmlvICsgSFBfUlhMKTsKKwlpbmIoZGV2LT5pbyArIEhQX0NWUik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfdXBsb2FkX2hvc3QpOworCitpbnQgc25kX21zbmRfZW5hYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRldi0+aXJxX3JlZisrKQorCQlyZXR1cm4gMDsKKworCXNuZF9wcmludGRkKExPR05BTUUgIjogRW5hYmxpbmcgSVJRXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc25kX21zbmRfd2FpdF9UWERFKGRldikgPT0gMCkgeworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSB8IEhQSUNSX1RSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRDbGFzc2ljKQorCQkJb3V0YihkZXYtPmlycWlkLCBkZXYtPmlvICsgSFBfSVJRTSk7CisKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgJiB+SFBJQ1JfVFJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpIHwgSFBJQ1JfUlJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCQlzbmRfbXNuZF9pbml0X3F1ZXVlKGRldi0+RFNQUSwgZGV2LT5kc3BxX2RhdGFfYnVmZiwKKwkJCQkgICAgZGV2LT5kc3BxX2J1ZmZfc2l6ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogRW5hYmxlIElSUSBmYWlsZWRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2VuYWJsZV9pcnEpOworCitpbnQgc25kX21zbmRfZGlzYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgtLWRldi0+aXJxX3JlZiA+IDApCisJCXJldHVybiAwOworCisJaWYgKGRldi0+aXJxX3JlZiA8IDApCisJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogSVJRIHJlZiBjb3VudCBpcyAlZFxuIiwKKwkJCSAgIGRldi0+aXJxX3JlZik7CisKKwlzbmRfcHJpbnRkZChMT0dOQU1FICI6IERpc2FibGluZyBJUlFcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChzbmRfbXNuZF93YWl0X1RYREUoZGV2KSA9PSAwKSB7CisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpICYgfkhQSUNSX1JSRVEsIGRldi0+aW8gKyBIUF9JQ1IpOworCQlpZiAoZGV2LT50eXBlID09IG1zbmRDbGFzc2ljKQorCQkJb3V0YihIUElSUV9OT05FLCBkZXYtPmlvICsgSFBfSVJRTSk7CisJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBEaXNhYmxlIElSUSBmYWlsZWRcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2Rpc2FibGVfaXJxKTsKKworc3RhdGljIGlubGluZSBsb25nIGdldF9wbGF5X2RlbGF5X2ppZmZpZXMoc3RydWN0IHNuZF9tc25kICpjaGlwLCBsb25nIHNpemUpCit7CisJbG9uZyB0bXAgPSAoc2l6ZSAqIEhaICogY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSkgLyA4OworCXJldHVybiB0bXAgLyAoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSAqIGNoaXAtPnBsYXlfY2hhbm5lbHMpOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9kc3Bfd3JpdGVfZmx1c2goc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCWlmICghKGNoaXAtPm1vZGUgJiBGTU9ERV9XUklURSkgfHwgIXRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkKKwkJcmV0dXJuOworCXNldF9iaXQoRl9XUklURUZMVVNILCAmY2hpcC0+ZmxhZ3MpOworLyoJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KAorCQkmY2hpcC0+d3JpdGVmbHVzaCwKKwkJZ2V0X3BsYXlfZGVsYXlfamlmZmllcygmY2hpcCwgY2hpcC0+REFQRi5sZW4pKTsqLworCWNsZWFyX2JpdChGX1dSSVRFRkxVU0gsICZjaGlwLT5mbGFncyk7CisJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKAorCQkJZ2V0X3BsYXlfZGVsYXlfamlmZmllcyhjaGlwLCBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlcykpOworCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7Cit9CisKK3ZvaWQgc25kX21zbmRfZHNwX2hhbHQoc3RydWN0IHNuZF9tc25kICpjaGlwLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoKGZpbGUgPyBmaWxlLT5mX21vZGUgOiBjaGlwLT5tb2RlKSAmIEZNT0RFX1JFQUQpIHsKKwkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUkVDT1JEX1NUT1ApOworCQlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwkJaWYgKGZpbGUpIHsKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPIExPR05BTUUKKwkJCQkgICAiOiBTdG9wcGluZyByZWFkIGZvciAlcFxuIiwgZmlsZSk7CisJCQljaGlwLT5tb2RlICY9IH5GTU9ERV9SRUFEOworCQl9CisJCWNsZWFyX2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJfQorCWlmICgoZmlsZSA/IGZpbGUtPmZfbW9kZSA6IGNoaXAtPm1vZGUpICYgRk1PREVfV1JJVEUpIHsKKwkJaWYgKHRlc3RfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKSkgeworCQkJc25kX21zbmRfZHNwX3dyaXRlX2ZsdXNoKGNoaXApOworCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUExBWV9TVE9QKTsKKwkJfQorCQlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwkJaWYgKGZpbGUpIHsKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPCisJCQkJICAgTE9HTkFNRSAiOiBTdG9wcGluZyB3cml0ZSBmb3IgJXBcbiIsIGZpbGUpOworCQkJY2hpcC0+bW9kZSAmPSB+Rk1PREVfV1JJVEU7CisJCX0KKwkJY2xlYXJfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9kc3BfaGFsdCk7CisKKworaW50IHNuZF9tc25kX0RBUlEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgYmFuaykKK3sKKwlpbnQgLypzaXplLCBuLCovIHRpbWVvdXQgPSAzOworCXUxNiB3VG1wOworCS8qIHZvaWQgKkRBUUQ7ICovCisKKwkvKiBJbmNyZW1lbnQgdGhlIHRhaWwgYW5kIGNoZWNrIGZvciBxdWV1ZSB3cmFwICovCisJd1RtcCA9IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpICsgUENUT0RTUF9PRkZTRVQoREFRRFNfX3NpemUpOworCWlmICh3VG1wID4gcmVhZHcoY2hpcC0+REFSUSArIEpRU193U2l6ZSkpCisJCXdUbXAgPSAwOworCXdoaWxlICh3VG1wID09IHJlYWR3KGNoaXAtPkRBUlEgKyBKUVNfd0hlYWQpICYmIHRpbWVvdXQtLSkKKwkJdWRlbGF5KDEpOworCisJaWYgKGNoaXAtPmNhcHR1cmVQZXJpb2RzID09IDIpIHsKKwkJdm9pZCAqcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRiArCisJCQkgICAgIGJhbmsgKiBEQVFEU19fc2l6ZSArIERBUURTX3dTdGFydDsKKwkJdW5zaWduZWQgc2hvcnQgb2Zmc2V0ID0gMHgzMDAwICsgY2hpcC0+Y2FwdHVyZVBlcmlvZEJ5dGVzOworCisJCWlmIChyZWFkdyhwREFRKSAhPSBQQ1RPRFNQX0JBU0VEKDB4MzAwMCkpCisJCQlvZmZzZXQgPSAweDMwMDA7CisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKG9mZnNldCksIHBEQVEpOworCX0KKworCXdyaXRldyh3VG1wLCBjaGlwLT5EQVJRICsgSlFTX3dUYWlsKTsKKworI2lmIDAKKwkvKiBHZXQgb3VyIGRpZ2l0YWwgYXVkaW8gcXVldWUgc3RydWN0ICovCisJREFRRCA9IGJhbmsgKiBEQVFEU19fc2l6ZSArIGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCS8qIEdldCBsZW5ndGggb2YgZGF0YSAqLworCXNpemUgPSByZWFkdyhEQVFEICsgREFRRFNfd1NpemUpOworCisJLyogUmVhZCBkYXRhIGZyb20gdGhlIGhlYWQgKHVucHJvdGVjdGVkIGJhbmsgMSBhY2Nlc3Mgb2theQorCSAgIHNpbmNlIHRoaXMgaXMgb25seSBjYWxsZWQgaW5zaWRlIGFuIGludGVycnVwdCkgKi8KKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbiA9IG1zbmRfZmlmb193cml0ZSgmY2hpcC0+REFSRiwKKwkJCSAgICAoY2hhciAqKShjaGlwLT5iYXNlICsgYmFuayAqIERBUl9CVUZGX1NJWkUpLAorCQkJICAgIHNpemUsIDApOworCWlmIChuIDw9IDApIHsKKwkJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCQlyZXR1cm4gbjsKKwl9CisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfREFSUSk7CisKK2ludCBzbmRfbXNuZF9EQVBRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KQoreworCXUxNglEQVBRX3RhaWw7CisJaW50CXByb3RlY3QgPSBzdGFydCwgbmJhbmtzID0gMDsKKwl2b2lkCSpEQVFEOworCXN0YXRpYyBpbnQgcGxheV9iYW5rc19zdWJtaXR0ZWQ7CisJLyogdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOyBub3QgbmVjZXNzYXJ5ICovCisKKwlEQVBRX3RhaWwgPSByZWFkdyhjaGlwLT5EQVBRICsgSlFTX3dUYWlsKTsKKwl3aGlsZSAoREFQUV90YWlsICE9IHJlYWR3KGNoaXAtPkRBUFEgKyBKUVNfd0hlYWQpIHx8IHN0YXJ0KSB7CisJCWludCBiYW5rX251bSA9IERBUFFfdGFpbCAvIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKworCQlpZiAoc3RhcnQpIHsKKwkJCXN0YXJ0ID0gMDsKKwkJCXBsYXlfYmFua3Nfc3VibWl0dGVkID0gMDsKKwkJfQorCisJCS8qIEdldCBvdXIgZGlnaXRhbCBhdWRpbyBxdWV1ZSBzdHJ1Y3QgKi8KKwkJREFRRCA9IGJhbmtfbnVtICogREFRRFNfX3NpemUgKyBjaGlwLT5tYXBwZWRiYXNlICsKKwkJCURBUFFfREFUQV9CVUZGOworCisJCS8qIFdyaXRlIHNpemUgb2YgdGhpcyBiYW5rICovCisJCXdyaXRldyhjaGlwLT5wbGF5X3BlcmlvZF9ieXRlcywgREFRRCArIERBUURTX3dTaXplKTsKKwkJaWYgKHBsYXlfYmFua3Nfc3VibWl0dGVkIDwgMykKKwkJCSsrcGxheV9iYW5rc19zdWJtaXR0ZWQ7CisJCWVsc2UgaWYgKGNoaXAtPnBsYXlQZXJpb2RzID09IDIpIHsKKwkJCXVuc2lnbmVkIHNob3J0IG9mZnNldCA9IGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzOworCisJCQlpZiAocmVhZHcoREFRRCArIERBUURTX3dTdGFydCkgIT0gUENUT0RTUF9CQVNFRCgweDApKQorCQkJCW9mZnNldCA9IDA7CisKKwkJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKG9mZnNldCksIERBUUQgKyBEQVFEU193U3RhcnQpOworCQl9CisJCSsrbmJhbmtzOworCisJCS8qIFRoZW4gYWR2YW5jZSB0aGUgdGFpbCAqLworCQkvKgorCQlpZiAocHJvdGVjdCkKKwkJCXNuZF9wcmludGQoS0VSTl9JTkZPICJCICVYICVsWFxuIiwKKwkJCQkgICBiYW5rX251bSwgeHRpbWUudHZfdXNlYyk7CisJCSovCisKKwkJREFQUV90YWlsID0gKCsrYmFua19udW0gJSAzKSAqIFBDVE9EU1BfT0ZGU0VUKERBUURTX19zaXplKTsKKwkJd3JpdGV3KERBUFFfdGFpbCwgY2hpcC0+REFQUSArIEpRU193VGFpbCk7CisJCS8qIFRlbGwgdGhlIERTUCB0byBwbGF5IHRoZSBiYW5rICovCisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RBUlQpOworCQlpZiAocHJvdGVjdCkKKwkJCWlmICgyID09IGJhbmtfbnVtKQorCQkJCWJyZWFrOworCX0KKwkvKgorCWlmIChwcm90ZWN0KQorCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWxYXG4iLCB4dGltZS50dl91c2VjKTsKKwkqLworCS8qIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsgbm90IG5lY2Vzc2FyeSAqLworCXJldHVybiBuYmFua3M7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX0RBUFEpOworCitzdGF0aWMgdm9pZCBzbmRfbXNuZF9wbGF5X3Jlc2V0X3F1ZXVlKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHBjbV9jb3VudCkKK3sKKwlpbnQJbjsKKwl2b2lkCSpwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUFFfREFUQV9CVUZGOworCisJY2hpcC0+bGFzdF9wbGF5YmFuayA9IC0xOworCWNoaXAtPnBsYXlMaW1pdCA9IHBjbV9jb3VudCAqIChwY21fcGVyaW9kcyAtIDEpOworCWNoaXAtPnBsYXlQZXJpb2RzID0gcGNtX3BlcmlvZHM7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUFEgKyBKUVNfd0hlYWQpOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVBRICsgSlFTX3dUYWlsKTsKKworCWNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzID0gcGNtX2NvdW50OworCisJZm9yIChuID0gMDsgbiA8IHBjbV9wZXJpb2RzOyArK24sIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KFBDVE9EU1BfQkFTRUQoKHUzMikocGNtX2NvdW50ICogbikpLAorCQkJcERBUSArIERBUURTX3dTdGFydCk7CisJCXdyaXRldygwLCBwREFRICsgREFRRFNfd1NpemUpOworCQl3cml0ZXcoMSwgcERBUSArIERBUURTX3dGb3JtYXQpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwkJd3JpdGV3KEhJTVRfUExBWV9ET05FICogMHgxMDAgKyBuLCBwREFRICsgREFRRFNfd0ludE1zZyk7CisJCXdyaXRldyhuLCBwREFRICsgREFRRFNfd0ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJCQkgdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzLAorCQkJCQkgdW5zaWduZWQgaW50IHBjbV9jb3VudCkKK3sKKwlpbnQJCW47CisJdm9pZAkJKnBEQVE7CisJLyogdW5zaWduZWQgbG9uZwlmbGFnczsgKi8KKworCS8qIHNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFSUSwgREFSUV9EQVRBX0JVRkYsIERBUlFfQlVGRl9TSVpFKTsgKi8KKworCWNoaXAtPmxhc3RfcmVjYmFuayA9IDI7CisJY2hpcC0+Y2FwdHVyZUxpbWl0ID0gcGNtX2NvdW50ICogKHBjbV9wZXJpb2RzIC0gMSk7CisJY2hpcC0+Y2FwdHVyZVBlcmlvZHMgPSBwY21fcGVyaW9kczsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFSUSArIEpRU193SGVhZCk7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKGNoaXAtPmxhc3RfcmVjYmFuayAqIERBUURTX19zaXplKSwKKwkJY2hpcC0+REFSUSArIEpRU193VGFpbCk7CisKKyNpZiAwIC8qIENyaXRpY2FsIHNlY3Rpb246IGJhbmsgMSBhY2Nlc3MuIHRoaXMgaXMgaG93IHRoZSBPU1MgZHJpdmVyIGRvZXMgaXQ6Ki8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoSFBCTEtTRUxfMSwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwltZW1zZXRfaW8oY2hpcC0+bWFwcGVkYmFzZSwgMCwgREFSX0JVRkZfU0laRSAqIDMpOworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisjZW5kaWYKKworCWNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlcyA9IHBjbV9jb3VudDsKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfY2FwdHVyZV9yZXNldF9xdWV1ZSgpICVpXG4iLCBwY21fY291bnQpOworCisJcERBUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVJRX0RBVEFfQlVGRjsKKworCWZvciAobiA9IDA7IG4gPCBwY21fcGVyaW9kczsgKytuLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXUzMiB0bXAgPSBwY21fY291bnQgKiBuOworCisJCXdyaXRldyhQQ1RPRFNQX0JBU0VEKHRtcCArIDB4MzAwMCksIHBEQVEgKyBEQVFEU193U3RhcnQpOworCQl3cml0ZXcocGNtX2NvdW50LCBwREFRICsgREFRRFNfd1NpemUpOworCQl3cml0ZXcoMSwgcERBUSArIERBUURTX3dGb3JtYXQpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwkJd3JpdGV3KEhJTVRfUkVDT1JEX0RPTkUgKiAweDEwMCArIG4sIHBEQVEgKyBEQVFEU193SW50TXNnKTsKKwkJd3JpdGV3KG4sIHBEQVEgKyBEQVFEU193RmxhZ3MpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9tc25kX3BsYXliYWNrID0geworCS5pbmZvID0JCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1U4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0JCVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLnJhdGVfbWluID0JCTgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMSwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQkweDMwMDAsCisJLnBlcmlvZF9ieXRlc19taW4gPQkweDQwLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0JMHgxODAwLAorCS5wZXJpb2RzX21pbiA9CQkyLAorCS5wZXJpb2RzX21heCA9CQkzLAorCS5maWZvX3NpemUgPQkJMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXNuZF9jYXB0dXJlID0geworCS5pbmZvID0JCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9CQlTTkRSVl9QQ01fRk1UQklUX1U4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0JCVNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLnJhdGVfbWluID0JCTgwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMSwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQkweDMwMDAsCisJLnBlcmlvZF9ieXRlc19taW4gPQkweDQwLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0JMHgxODAwLAorCS5wZXJpb2RzX21pbiA9CQkyLAorCS5wZXJpb2RzX21heCA9CQkzLAorCS5maWZvX3NpemUgPQkJMCwKK307CisKKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc2V0X2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJc25kX21zbmRfZW5hYmxlX2lycShjaGlwKTsKKworCXJ1bnRpbWUtPmRtYV9hcmVhID0gY2hpcC0+bWFwcGVkYmFzZTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSAweDMwMDA7CisKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfbXNuZF9wbGF5YmFjazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwljbGVhcl9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJaW50CWk7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXZvaWQJKnBEQVEgPQljaGlwLT5tYXBwZWRiYXNlICsgREFQUV9EQVRBX0JVRkY7CisKKwljaGlwLT5wbGF5X3NhbXBsZV9zaXplID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwljaGlwLT5wbGF5X2NoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+cGxheV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCX0KKwkvKiBkb250IGRvIHRoaXMgaGVyZToKKwkgKiBzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUpOworCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9jb3VudCA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fcGVyaW9kcyA9IHBjbV9zaXplIC8gcGNtX2NvdW50OworCisJc25kX21zbmRfcGxheV9yZXNldF9xdWV1ZShjaGlwLCBwY21fcGVyaW9kcywgcGNtX2NvdW50KTsKKwljaGlwLT5wbGF5RE1BUG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50CXJlc3VsdCA9IDA7CisKKwlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7CisJCXNuZF9wcmludGRkKCJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKFNUQVJUKVxuIik7CisJCWNoaXAtPmJhbmtzUGxheWVkID0gMDsKKwkJc2V0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX0RBUFEoY2hpcCwgMSk7CisJfSBlbHNlIGlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RPUCkgeworCQlzbmRfcHJpbnRkZCgic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcihTVG9wKVxuIik7CisJCS8qIGludGVycnVwdCBkaWFnbm9zdGljLCBjb21tZW50IHRoaXMgb3V0IGxhdGVyICovCisJCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1BMQVlfU1RPUCk7CisJfSBlbHNlIHsKKwkJc25kX3ByaW50ZChLRVJOX0VSUiAic25kX21zbmRfcGxheWJhY2tfdHJpZ2dlcig/Pz8/PylcbiIpOworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0KKworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKCkgRU5ERVxuIik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfbXNuZF9wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBjaGlwLT5wbGF5RE1BUG9zKTsKK30KKworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9tc25kX3BsYXliYWNrX29wcyA9IHsKKwkub3BlbiA9CQlzbmRfbXNuZF9wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9CXNuZF9tc25kX3BsYXliYWNrX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlzbmRfbXNuZF9wbGF5YmFja19od19wYXJhbXMsCisJLnByZXBhcmUgPQlzbmRfbXNuZF9wbGF5YmFja19wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX21zbmRfcGxheWJhY2tfdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9tc25kX3BsYXliYWNrX3BvaW50ZXIsCit9OworCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNldF9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCXNuZF9tc25kX2VuYWJsZV9pcnEoY2hpcCk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5tYXBwZWRiYXNlICsgMHgzMDAwOworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IDB4MzAwMDsKKwltZW1zZXQocnVudGltZS0+ZG1hX2FyZWEsIDAsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcnVudGltZS0+aHcgPSBzbmRfbXNuZF9jYXB0dXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc25kX21zbmRfZGlzYWJsZV9pcnEoY2hpcCk7CisJY2xlYXJfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMgPSBwY21fc2l6ZSAvIHBjbV9jb3VudDsKKworCXNuZF9tc25kX2NhcHR1cmVfcmVzZXRfcXVldWUoY2hpcCwgcGNtX3BlcmlvZHMsIHBjbV9jb3VudCk7CisJY2hpcC0+Y2FwdHVyZURNQVBvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpIHsKKwkJY2hpcC0+bGFzdF9yZWNiYW5rID0gLTE7CisJCXNldF9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlpZiAoc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUkVDT1JEX1NUQVJUKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwl9IGVsc2UgaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QKSB7CisJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX1JFQ09SRF9TVE9QKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX21zbmRfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBjaGlwLT5jYXB0dXJlRE1BUG9zKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQJCWk7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXZvaWQJCSpwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGOworCisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJY2hpcC0+Y2FwdHVyZV9jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJZm9yIChpID0gMDsgaSA8IDM7ICsraSwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfc2l6ZSwgcERBUSArIERBUURTX3dTYW1wbGVTaXplKTsKKwkJd3JpdGV3KGNoaXAtPmNhcHR1cmVfY2hhbm5lbHMsIHBEQVEgKyBEQVFEU193Q2hhbm5lbHMpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSwgcERBUSArIERBUURTX3dTYW1wbGVSYXRlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXNuZF9jYXB0dXJlX29wcyA9IHsKKwkub3BlbiA9CQlzbmRfbXNuZF9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0Jc25kX21zbmRfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX21zbmRfY2FwdHVyZV9od19wYXJhbXMsCisJLnByZXBhcmUgPQlzbmRfbXNuZF9jYXB0dXJlX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfbXNuZF9jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfbXNuZF9jYXB0dXJlX3BvaW50ZXIsCit9OworCisKK2ludCBzbmRfbXNuZF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLAorCQkJc3RydWN0IHNuZF9wY20gKipycGNtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbQkqcGNtOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiTVNORFBJTk5BQ0xFIiwgZGV2aWNlLCAxLCAxLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZzbmRfbXNuZF9wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9tc25kX2NhcHR1cmVfb3BzKTsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlzdHJjcHkocGNtLT5uYW1lLCAiSHVycmljYW5lIik7CisKKworCWlmIChycGNtKQorCQkqcnBjbSA9IHBjbTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfcGNtKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21tb24gcm91dGluZXMgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIGRyaXZlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZC5oIGIvc291bmQvaXNhL21zbmQvbXNuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmgKQEAgLTAsMCArMSwzMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfSAorI2RlZmluZSBfX01TTkRfSAorCisjZGVmaW5lIERFRlNBTVBMRVJBVEUJCTQ0MTAwCisjZGVmaW5lIERFRlNBTVBMRVNJWkUJCVNORFJWX1BDTV9GT1JNQVRfUzE2CisjZGVmaW5lIERFRkNIQU5ORUxTCQkxCisKKyNkZWZpbmUgU1JBTV9CQU5LX1NJWkUJCTB4ODAwMAorI2RlZmluZSBTUkFNX0NOVExfU1RBUlQJCTB4N0YwMAorI2RlZmluZSBTTUFfU1RSVUNUX1NUQVJUCTB4N0Y0MAorCisjZGVmaW5lIERTUF9CQVNFX0FERFIJCTB4NDAwMAorI2RlZmluZSBEU1BfQkFOS19CQVNFCQkweDQwMDAKKworI2RlZmluZSBBR05ECQkJMHgwMQorI2RlZmluZSBTSUdOQUwJCQkweDAyCisKKyNkZWZpbmUgRVhUX0RTUF9CSVRfRENBTAkweDAwMDEKKyNkZWZpbmUgRVhUX0RTUF9CSVRfTUlESV9DT04JMHgwMDAyCisKKyNkZWZpbmUgQlVGRlNJWkUJCTB4ODAwMAorI2RlZmluZSBIT1NUUV9TSVpFCQkweDQwCisKKyNkZWZpbmUgREFQX0JVRkZfU0laRQkJMHgyNDAwCisKKyNkZWZpbmUgREFQUV9TVFJVQ1RfU0laRQkweDEwCisjZGVmaW5lIERBUlFfU1RSVUNUX1NJWkUJMHgxMAorI2RlZmluZSBEQVBRX0JVRkZfU0laRQkJKDMgKiAweDEwKQorI2RlZmluZSBEQVJRX0JVRkZfU0laRQkJKDMgKiAweDEwKQorI2RlZmluZSBNT0RRX0JVRkZfU0laRQkJMHg0MDAKKworI2RlZmluZSBEQVBRX0RBVEFfQlVGRgkJMHg2QzAwCisjZGVmaW5lIERBUlFfREFUQV9CVUZGCQkweDZDMzAKKyNkZWZpbmUgTU9EUV9EQVRBX0JVRkYJCTB4NkM2MAorI2RlZmluZSBNSURRX0RBVEFfQlVGRgkJMHg3MDYwCisKKyNkZWZpbmUgREFQUV9PRkZTRVQJCVNSQU1fQ05UTF9TVEFSVAorI2RlZmluZSBEQVJRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MDgpCisjZGVmaW5lIE1PRFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgxMCkKKyNkZWZpbmUgTUlEUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDE4KQorI2RlZmluZSBEU1BRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MjApCisKKyNkZWZpbmUJSFBfSUNSCQkJMHgwMAorI2RlZmluZQlIUF9DVlIJCQkweDAxCisjZGVmaW5lCUhQX0lTUgkJCTB4MDIKKyNkZWZpbmUJSFBfSVZSCQkJMHgwMworI2RlZmluZSBIUF9OVQkJCTB4MDQKKyNkZWZpbmUgSFBfSU5GTwkJCTB4MDQKKyNkZWZpbmUJSFBfVFhICQkJMHgwNQorI2RlZmluZQlIUF9SWEgJCQkweDA1CisjZGVmaW5lCUhQX1RYTQkJCTB4MDYKKyNkZWZpbmUJSFBfUlhNCQkJMHgwNgorI2RlZmluZQlIUF9UWEwJCQkweDA3CisjZGVmaW5lCUhQX1JYTAkJCTB4MDcKKworI2RlZmluZSBIUF9JQ1JfREVGCQkweDAwCisjZGVmaW5lIEhQX0NWUl9ERUYJCTB4MTIKKyNkZWZpbmUgSFBfSVNSX0RFRgkJMHgwNgorI2RlZmluZSBIUF9JVlJfREVGCQkweDBmCisjZGVmaW5lIEhQX05VX0RFRgkJMHgwMAorCisjZGVmaW5lCUhQX0lSUU0JCQkweDA5CisKKyNkZWZpbmUJSFBSX0JMUkMJCTB4MDgKKyNkZWZpbmUJSFBSX1NQUjEJCTB4MDkKKyNkZWZpbmUJSFBSX1NQUjIJCTB4MEEKKyNkZWZpbmUJSFBSX1RDTDAJCTB4MEIKKyNkZWZpbmUJSFBSX1RDTDEJCTB4MEMKKyNkZWZpbmUJSFBSX1RDTDIJCTB4MEQKKyNkZWZpbmUJSFBSX1RDTDMJCTB4MEUKKyNkZWZpbmUJSFBSX1RDTDQJCTB4MEYKKworI2RlZmluZQlIUElDUl9JTklUCQkweDgwCisjZGVmaW5lIEhQSUNSX0hNMQkJMHg0MAorI2RlZmluZSBIUElDUl9ITTAJCTB4MjAKKyNkZWZpbmUgSFBJQ1JfSEYxCQkweDEwCisjZGVmaW5lIEhQSUNSX0hGMAkJMHgwOAorI2RlZmluZQlIUElDUl9UUkVRCQkweDAyCisjZGVmaW5lCUhQSUNSX1JSRVEJCTB4MDEKKworI2RlZmluZSBIUENWUl9IQwkJMHg4MAorCisjZGVmaW5lCUhQSVNSX0hSRVEJCTB4ODAKKyNkZWZpbmUgSFBJU1JfRE1BCQkweDQwCisjZGVmaW5lIEhQSVNSX0hGMwkJMHgxMAorI2RlZmluZSBIUElTUl9IRjIJCTB4MDgKKyNkZWZpbmUJSFBJU1JfVFJEWQkJMHgwNAorI2RlZmluZQlIUElTUl9UWERFCQkweDAyCisjZGVmaW5lCUhQSVNSX1JYREYJCTB4MDEKKworI2RlZmluZQlIUElPXzI5MAkJMAorI2RlZmluZQlIUElPXzI2MAkJMQorI2RlZmluZQlIUElPXzI1MAkJMgorI2RlZmluZQlIUElPXzI0MAkJMworI2RlZmluZQlIUElPXzIzMAkJNAorI2RlZmluZQlIUElPXzIyMAkJNQorI2RlZmluZQlIUElPXzIxMAkJNgorI2RlZmluZQlIUElPXzNFMAkJNworCisjZGVmaW5lCUhQTUVNX05PTkUJCTAKKyNkZWZpbmUJSFBNRU1fQjAwMAkJMQorI2RlZmluZQlIUE1FTV9DODAwCQkyCisjZGVmaW5lCUhQTUVNX0QwMDAJCTMKKyNkZWZpbmUJSFBNRU1fRDQwMAkJNAorI2RlZmluZQlIUE1FTV9EODAwCQk1CisjZGVmaW5lCUhQTUVNX0UwMDAJCTYKKyNkZWZpbmUJSFBNRU1fRTgwMAkJNworCisjZGVmaW5lCUhQSVJRX05PTkUJCTAKKyNkZWZpbmUgSFBJUlFfNQkJCTEKKyNkZWZpbmUgSFBJUlFfNwkJCTIKKyNkZWZpbmUgSFBJUlFfOQkJCTMKKyNkZWZpbmUgSFBJUlFfMTAJCTQKKyNkZWZpbmUgSFBJUlFfMTEJCTUKKyNkZWZpbmUgSFBJUlFfMTIJCTYKKyNkZWZpbmUgSFBJUlFfMTUJCTcKKworI2RlZmluZQlISU1UX1BMQVlfRE9ORQkJMHgwMAorI2RlZmluZQlISU1UX1JFQ09SRF9ET05FCTB4MDEKKyNkZWZpbmUJSElNVF9NSURJX0VPUwkJMHgwMgorI2RlZmluZQlISU1UX01JRElfT1VUCQkweDAzCisKKyNkZWZpbmUJSElNVF9NSURJX0lOX1VDSEFSCTB4MEUKKyNkZWZpbmUJSElNVF9EU1AJCTB4MEYKKworI2RlZmluZQlIREVYX0JBU0UJICAgICAgIAkweDkyCisjZGVmaW5lCUhERVhfUExBWV9TVEFSVAkJKDAgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUExBWV9TVE9QCQkoMSArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9QTEFZX1BBVVNFCQkoMiArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9QTEFZX1JFU1VNRQkoMyArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9SRUNPUkRfU1RBUlQJKDQgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfUkVDT1JEX1NUT1AJKDUgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9JTl9TVEFSVCAJKDYgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9JTl9TVE9QCSg3ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfT1VUX1NUQVJUCSg4ICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX01JRElfT1VUX1NUT1AJKDkgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfQVVYX1JFUQkJKDEwICsgSERFWF9CQVNFKQorCisjZGVmaW5lCUhERVhBUl9DTEVBUl9QRUFLUwkxCisjZGVmaW5lCUhERVhBUl9JTl9TRVRfUE9UUwkyCisjZGVmaW5lCUhERVhBUl9BVVhfU0VUX1BPVFMJMworI2RlZmluZQlIREVYQVJfQ0FMX0FfVE9fRAk0CisjZGVmaW5lCUhERVhBUl9SRF9FWFRfRFNQX0JJVFMJNQorCisvKiBQaW5uYWNsZSBvbmx5IEhERVhBUiBkZWZzICovCisjZGVmaW5lCUhERVhBUl9TRVRfQU5BX0lOCTAKKyNkZWZpbmUJSERFWEFSX1NFVF9TWU5USF9JTgk0CisjZGVmaW5lCUhERVhBUl9SRUFEX0RBVF9JTgk1CisjZGVmaW5lCUhERVhBUl9NSUNfU0VUX1BPVFMJNgorI2RlZmluZQlIREVYQVJfU0VUX0RBVF9JTgk3CisKKyNkZWZpbmUgSERFWEFSX1NFVF9TWU5USF80OAk4CisjZGVmaW5lIEhERVhBUl9TRVRfU1lOVEhfNDQJOQorCisjZGVmaW5lIEhJV09SRChsKQkJKCh1MTYpKCgoKHUzMikobCkpID4+IDE2KSAmIDB4RkZGRikpCisjZGVmaW5lIExPV09SRChsKQkJKCh1MTYpKHUzMikobCkpCisjZGVmaW5lIEhJQllURSh3KQkJKCh1OCkoKCh1MTYpKHcpID4+IDgpICYgMHhGRikpCisjZGVmaW5lIExPQllURSh3KQkJKCh1OCkodykpCisjZGVmaW5lIE1BS0VMT05HKGxvdywgaGkpCSgobG9uZykoKCh1MTYpKGxvdykpfCgoKHUzMikoKHUxNikoaGkpKSk8PDE2KSkpCisjZGVmaW5lIE1BS0VXT1JEKGxvdywgaGkpCSgodTE2KSgoKHU4KShsb3cpKXwoKCh1MTYpKCh1OCkoaGkpKSk8PDgpKSkKKworI2RlZmluZSBQQ1RPRFNQX09GRlNFVCh3KQkodTE2KSgodykvMikKKyNkZWZpbmUgUENUT0RTUF9CQVNFRCh3KQkodTE2KSgoKHcpLzIpICsgRFNQX0JBU0VfQUREUikKKyNkZWZpbmUgRFNQVE9QQ19CQVNFRCh3KQkoKCh3KSAtIERTUF9CQVNFX0FERFIpICogMikKKworI2lmZGVmIFNMT1dJTworIyAgdW5kZWYgb3V0YgorIyAgdW5kZWYgaW5iCisjICBkZWZpbmUgb3V0YgkJCW91dGJfcAorIyAgZGVmaW5lIGluYgkJCWluYl9wCisjZW5kaWYKKworLyogSm9iUXVldWVTdHJ1Y3QgKi8KKyNkZWZpbmUgSlFTX3dTdGFydAkJMHgwMAorI2RlZmluZSBKUVNfd1NpemUJCTB4MDIKKyNkZWZpbmUgSlFTX3dIZWFkCQkweDA0CisjZGVmaW5lIEpRU193VGFpbAkJMHgwNgorI2RlZmluZSBKUVNfX3NpemUJCTB4MDgKKworLyogREFRdWV1ZURhdGFTdHJ1Y3QgKi8KKyNkZWZpbmUgREFRRFNfd1N0YXJ0CQkweDAwCisjZGVmaW5lIERBUURTX3dTaXplCQkweDAyCisjZGVmaW5lIERBUURTX3dGb3JtYXQJCTB4MDQKKyNkZWZpbmUgREFRRFNfd1NhbXBsZVNpemUJMHgwNgorI2RlZmluZSBEQVFEU193Q2hhbm5lbHMJCTB4MDgKKyNkZWZpbmUgREFRRFNfd1NhbXBsZVJhdGUJMHgwQQorI2RlZmluZSBEQVFEU193SW50TXNnCQkweDBDCisjZGVmaW5lIERBUURTX3dGbGFncwkJMHgwRQorI2RlZmluZSBEQVFEU19fc2l6ZQkJMHgxMAorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKK3N0cnVjdCBzbmRfbXNuZCB7CisJdm9pZCBfX2lvbWVtCQkqbWFwcGVkYmFzZTsKKwlpbnQJCQlwbGF5X3BlcmlvZF9ieXRlczsKKwlpbnQJCQlwbGF5TGltaXQ7CisJaW50CQkJcGxheVBlcmlvZHM7CisJaW50IAkJCXBsYXlETUFQb3M7CisJaW50CQkJYmFua3NQbGF5ZWQ7CisJaW50IAkJCWNhcHR1cmVETUFQb3M7CisJaW50CQkJY2FwdHVyZVBlcmlvZEJ5dGVzOworCWludAkJCWNhcHR1cmVMaW1pdDsKKwlpbnQJCQljYXB0dXJlUGVyaW9kczsKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOworCXZvaWQJCQkqbXNuZG1pZGlfbXB1OworCXN0cnVjdCBzbmRfcmF3bWlkaQkqcm1pZGk7CisKKwkvKiBIYXJkd2FyZSByZXNvdXJjZXMgKi8KKwlsb25nIGlvOworCWludCBtZW1pZCwgaXJxaWQ7CisJaW50IGlycSwgaXJxX3JlZjsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwkvKiBNb3Rvcm9sYSA1NmsgRFNQIFNNQSAqLworCXZvaWQgX19pb21lbQkqU01BOworCXZvaWQgX19pb21lbQkqREFQUTsKKwl2b2lkIF9faW9tZW0JKkRBUlE7CisJdm9pZCBfX2lvbWVtCSpNT0RROworCXZvaWQgX19pb21lbQkqTUlEUTsKKwl2b2lkIF9faW9tZW0JKkRTUFE7CisJaW50IGRzcHFfZGF0YV9idWZmLCBkc3BxX2J1ZmZfc2l6ZTsKKworCS8qIFN0YXRlIHZhcmlhYmxlcyAqLworCWVudW0geyBtc25kQ2xhc3NpYywgbXNuZFBpbm5hY2xlIH0gdHlwZTsKKwltb2RlX3QgbW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2RlZmluZSBGX1JFU0VUVElORwkJCTAKKyNkZWZpbmUgRl9IQVZFRElHSVRBTAkJCTEKKyNkZWZpbmUgRl9BVURJT19XUklURV9JTlVTRQkJMgorI2RlZmluZSBGX1dSSVRJTkcJCQkzCisjZGVmaW5lIEZfV1JJVEVCTE9DSwkJCTQKKyNkZWZpbmUgRl9XUklURUZMVVNICQkJNQorI2RlZmluZSBGX0FVRElPX1JFQURfSU5VU0UJCTYKKyNkZWZpbmUgRl9SRUFESU5HCQkJNworI2RlZmluZSBGX1JFQURCTE9DSwkJCTgKKyNkZWZpbmUgRl9FWFRfTUlESV9JTlVTRQkJOQorI2RlZmluZSBGX0hEUl9NSURJX0lOVVNFCQkxMAorI2RlZmluZSBGX0RJU0FCTEVfV1JJVEVfTkRFTEFZCQkxMQorCXNwaW5sb2NrX3QgbG9jazsKKwlzcGlubG9ja190IG1peGVyX2xvY2s7CisJaW50IG5yZXNldHM7CisJdW5zaWduZWQgcmVjc3JjOworI2RlZmluZSBMRVZFTF9FTlRSSUVTIDMyCisJaW50IGxlZnRfbGV2ZWxzW0xFVkVMX0VOVFJJRVNdOworCWludCByaWdodF9sZXZlbHNbTEVWRUxfRU5UUklFU107CisJaW50IGNhbGlicmF0ZV9zaWduYWw7CisJaW50IHBsYXlfc2FtcGxlX3NpemUsIHBsYXlfc2FtcGxlX3JhdGUsIHBsYXlfY2hhbm5lbHM7CisJaW50IHBsYXlfbmRlbGF5OworCWludCBjYXB0dXJlX3NhbXBsZV9zaXplLCBjYXB0dXJlX3NhbXBsZV9yYXRlLCBjYXB0dXJlX2NoYW5uZWxzOworCWludCBjYXB0dXJlX25kZWxheTsKKwl1OCBiQ3VycmVudE1pZGlQYXRjaDsKKworCWludCBsYXN0X3BsYXliYW5rLCBsYXN0X3JlY2Jhbms7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwbGF5YmFja19zdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3N1YnN0cmVhbTsKKworfTsKKwordm9pZCBzbmRfbXNuZF9pbml0X3F1ZXVlKHZvaWQgKmJhc2UsIGludCBzdGFydCwgaW50IHNpemUpOworCitpbnQgc25kX21zbmRfc2VuZF9kc3BfY21kKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTggY21kKTsKK2ludCBzbmRfbXNuZF9zZW5kX3dvcmQoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJICAgdW5zaWduZWQgY2hhciBoaWdoLAorCQkJICAgdW5zaWduZWQgY2hhciBtaWQsCisJCQkgICB1bnNpZ25lZCBjaGFyIGxvdyk7CitpbnQgc25kX21zbmRfdXBsb2FkX2hvc3Qoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJICAgICBjb25zdCB1OCAqYmluLCBpbnQgbGVuKTsKK2ludCBzbmRfbXNuZF9lbmFibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7CitpbnQgc25kX21zbmRfZGlzYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK3ZvaWQgc25kX21zbmRfZHNwX2hhbHQoc3RydWN0IHNuZF9tc25kICpjaGlwLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitpbnQgc25kX21zbmRfREFQUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCk7CitpbnQgc25kX21zbmRfREFSUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBzdGFydCk7CitpbnQgc25kX21zbmRfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKKworaW50IHNuZF9tc25kbWlkaV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlKTsKK3ZvaWQgc25kX21zbmRtaWRpX2lucHV0X3JlYWQodm9pZCAqbXB1KTsKKwordm9pZCBzbmRfbXNuZG1peF9zZXR1cChzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOworaW50IF9fZGV2aW5pdCBzbmRfbXNuZG1peF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKK2ludCBzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgcmVjc3JjKTsKKyNlbmRpZiAvKiBfX01TTkRfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjIzYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmMKQEAgLTAsMCArMSwzIEBACisvKiBUaGUgd29yayBpcyBpbiBtc25kX3Bpbm5hY2xlLmMsIGp1c3QgZGVmaW5lIE1TTkRfQ0xBU1NJQyBiZWZvcmUgaXQuICovCisjZGVmaW5lIE1TTkRfQ0xBU1NJQworI2luY2x1ZGUgIm1zbmRfcGlubmFjbGUuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4ZDVmYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5oCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZF9jbGFzc2ljLmgKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqCisgKiBTb21lIHBhcnRzIG9mIHRoaXMgaGVhZGVyIGZpbGUgd2VyZSBkZXJpdmVkIGZyb20gdGhlIFR1cnRsZSBCZWFjaAorICogTXVsdGlTb3VuZCBEcml2ZXIgRGV2ZWxvcG1lbnQgS2l0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICogQ29weXJpZ2h0IChDKSAxOTkzIFR1cnRsZSBCZWFjaCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTkRfQ0xBU1NJQ19ICisjZGVmaW5lIF9fTVNORF9DTEFTU0lDX0gKKworI2RlZmluZSBEU1BfTlVNSU8JCQkJMHgxMAorCisjZGVmaW5lCUhQX01FTU0JCQkJCTB4MDgKKworI2RlZmluZQlIUF9CSVRNCQkJCQkweDBFCisjZGVmaW5lCUhQX1dBSVQJCQkJCTB4MEQKKyNkZWZpbmUJSFBfRFNQUgkJCQkJMHgwQQorI2RlZmluZQlIUF9QUk9SCQkJCQkweDBCCisjZGVmaW5lCUhQX0JMS1MJCQkJCTB4MEMKKworI2RlZmluZQlIUFBST1JFU0VUX09GRgkJCQkwCisjZGVmaW5lIEhQUFJPUkVTRVRfT04JCQkJMQorCisjZGVmaW5lIEhQRFNQUkVTRVRfT0ZGCQkJCTAKKyNkZWZpbmUgSFBEU1BSRVNFVF9PTgkJCQkxCisKKyNkZWZpbmUgSFBCTEtTRUxfMAkJCQkwCisjZGVmaW5lIEhQQkxLU0VMXzEJCQkJMQorCisjZGVmaW5lIEhQV0FJVFNUQVRFXzAJCQkJMAorI2RlZmluZSBIUFdBSVRTVEFURV8xCQkJCTEKKworI2RlZmluZSBIUEJJVE1PREVfMTYJCQkJMAorI2RlZmluZSBIUEJJVE1PREVfOAkJCQkxCisKKyNkZWZpbmUJSElEU1BfSU5UX1BMQVlfVU5ERVIJCQkweDAwCisjZGVmaW5lCUhJRFNQX0lOVF9SRUNPUkRfT1ZFUgkJCTB4MDEKKyNkZWZpbmUJSElEU1BfSU5QVVRfQ0xJUFBJTkcJCQkweDAyCisjZGVmaW5lCUhJRFNQX01JRElfSU5fT1ZFUgkJCTB4MTAKKyNkZWZpbmUJSElEU1BfTUlESV9PVkVSUlVOX0VSUiAgMHgxMworCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUX0RPTkUJCQkweDAyOEEKKyNkZWZpbmUgVElNRV9QUk9fU1lTRVgJCQkJMHgwMDQwCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUCQkJCTB4MDAzMgorCisjZGVmaW5lIERBUl9CVUZGX1NJWkUJCQkJMHgyMDAwCisKKyNkZWZpbmUgTUlEUV9CVUZGX1NJWkUJCQkJMHgyMDAKKyNkZWZpbmUgRFNQUV9CVUZGX1NJWkUJCQkJMHg0MAorCisjZGVmaW5lIERTUFFfREFUQV9CVUZGCQkJCTB4NzI2MAorCisjZGVmaW5lIE1PUF9TWU5USAkJCQkweDEwCisjZGVmaW5lIE1PUF9FWFRPVVQJCQkJMHgzMgorI2RlZmluZSBNT1BfRVhUVEhSVQkJCQkweDAyCisjZGVmaW5lIE1PUF9PVVRNQVNLCQkJCTB4MDEKKworI2RlZmluZSBNSVBfRVhUSU4JCQkJMHgwMQorI2RlZmluZSBNSVBfU1lOVEgJCQkJMHgwMAorI2RlZmluZSBNSVBfSU5NQVNLCQkJCTB4MzIKKworLyogQ2xhc3NpYyBTTUEgQ29tbW9uIERhdGEgKi8KKyNkZWZpbmUgU01BX3dDdXJyUGxheUJ5dGVzCQkJMHgwMDAwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEJ5dGVzCQkJMHgwMDAyCisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xMZWZ0CQkJMHgwMDA0CisjZGVmaW5lIFNNQV93Q3VyclBsYXlWb2xSaWdodAkJCTB4MDAwNgorI2RlZmluZSBTTUFfd0N1cnJJblZvbExlZnQJCQkweDAwMDgKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xSaWdodAkJCTB4MDAwYQorI2RlZmluZSBTTUFfd1VzZXJfMwkJCQkweDAwMGMKKyNkZWZpbmUgU01BX3dVc2VyXzQJCQkJMHgwMDBlCisjZGVmaW5lIFNNQV9kd1VzZXJfNQkJCQkweDAwMTAKKyNkZWZpbmUgU01BX2R3VXNlcl82CQkJCTB4MDAxNAorI2RlZmluZSBTTUFfd1VzZXJfNwkJCQkweDAwMTgKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9BCQkJCTB4MDAxYQorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0IJCQkJMHgwMDFjCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQwkJCQkweDAwMWUKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9ECQkJCTB4MDAyMAorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0UJCQkJMHgwMDIyCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRgkJCQkweDAwMjQKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9HCQkJCTB4MDAyNgorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0gJCQkJMHgwMDI4CisjZGVmaW5lIFNNQV93Q3VyckRTUFN0YXR1c0ZsYWdzCQkJMHgwMDJhCisjZGVmaW5lIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncwkJMHgwMDJjCisjZGVmaW5lIFNNQV93Q3VycklucHV0VGFnQml0cwkJCTB4MDAyZQorI2RlZmluZSBTTUFfd0N1cnJMZWZ0UGVhawkJCTB4MDAzMAorI2RlZmluZSBTTUFfd0N1cnJSaWdodFBlYWsJCQkweDAwMzIKKyNkZWZpbmUgU01BX3dFeHREU1BiaXRzCQkJCTB4MDAzNAorI2RlZmluZSBTTUFfYkV4dEhvc3RiaXRzCQkJMHgwMDM2CisjZGVmaW5lIFNNQV9iQm9hcmRMZXZlbAkJCQkweDAwMzcKKyNkZWZpbmUgU01BX2JJblBvdFBvc1JpZ2h0CQkJMHgwMDM4CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NMZWZ0CQkJMHgwMDM5CisjZGVmaW5lIFNNQV9iQXV4UG90UG9zUmlnaHQJCQkweDAwM2EKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NMZWZ0CQkJMHgwMDNiCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xMZWZ0CQkJMHgwMDNjCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xSaWdodAkJCTB4MDAzZQorI2RlZmluZSBTTUFfYlVzZXJfMTIJCQkJMHgwMDQwCisjZGVmaW5lIFNNQV9iVXNlcl8xMwkJCQkweDAwNDEKKyNkZWZpbmUgU01BX3dVc2VyXzE0CQkJCTB4MDA0MgorI2RlZmluZSBTTUFfd1VzZXJfMTUJCQkJMHgwMDQ0CisjZGVmaW5lIFNNQV93Q2FsRnJlcUF0b0QJCQkweDAwNDYKKyNkZWZpbmUgU01BX3dVc2VyXzE2CQkJCTB4MDA0OAorI2RlZmluZSBTTUFfd1VzZXJfMTcJCQkJMHgwMDRhCisjZGVmaW5lIFNNQV9fc2l6ZQkJCQkweDAwNGMKKworI2RlZmluZSBJTklUQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9tc25kaW5pdC5iaW4iCisjZGVmaW5lIFBFUk1DT0RFRklMRQkJInR1cnRsZWJlYWNoL21zbmRwZXJtLmJpbiIKKyNkZWZpbmUgTE9OR05BTUUJCSJNdWx0aVNvdW5kIChDbGFzc2ljL01vbnRlcmV5L1RhaGl0aSkiCisKKyNlbmRpZiAvKiBfX01TTkRfQ0xBU1NJQ19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWFhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IGJ5IEtyenlzenRvZiBIZWx0CisgKiAgUm91dGluZXMgZm9yIGNvbnRyb2wgb2YgTVBVLTQwMSBpbiBVQVJUIG1vZGUKKyAqCisgKiAgTVBVLTQwMSBzdXBwb3J0cyBVQVJUIG1vZGUgd2hpY2ggaXMgbm90IGNhcGFibGUgZ2VuZXJhdGUgdHJhbnNtaXQKKyAqICBpbnRlcnJ1cHRzIHRodXMgb3V0cHV0IGlzIGRvbmUgdmlhIHBvbGxpbmcuIEFsc28sIGlmIGlycSA8IDAsIHRoZW4KKyAqICBpbnB1dCBpcyBkb25lIGFsc28gdmlhIHBvbGxpbmcuIERvIG5vdCBleHBlY3QgZ29vZCBwZXJmb3JtYW5jZS4KKyAqCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKworI2luY2x1ZGUgIm1zbmQuaCIKKworI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9JTlBVVAkJMAorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9PVVRQVVQJCTEKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUgkyCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX09VVFBVVF9UUklHR0VSCTMKKworc3RydWN0IHNuZF9tc25kbWlkaSB7CisJc3RydWN0IHNuZF9tc25kICpkZXY7CisKKwl1bnNpZ25lZCBsb25nIG1vZGU7CQkvKiBNU05ETUlESV9NT0RFX1hYWFggKi8KKworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbV9pbnB1dDsKKworCXNwaW5sb2NrX3QgaW5wdXRfbG9jazsKK307CisKKy8qCisgKiBpbnB1dC9vdXRwdXQgb3Blbi9jbG9zZSAtIHByb3RlY3RlZCBieSBvcGVuX211dGV4IGluIHJhd21pZGkuYworICovCitzdGF0aWMgaW50IHNuZF9tc25kbWlkaV9pbnB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwlzbmRfcHJpbnRkZCgic25kX21zbmRtaWRpX2lucHV0X29wZW4oKVxuIik7CisKKwltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IHN1YnN0cmVhbTsKKworCXNuZF9tc25kX2VuYWJsZV9pcnEobXB1LT5kZXYpOworCisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+ZGV2LCBIREVYX01JRElfSU5fU1RBUlQpOworCXNldF9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVQsICZtcHUtPm1vZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWlkaV9pbnB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPmRldiwgSERFWF9NSURJX0lOX1NUT1ApOworCWNsZWFyX2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSk7CisJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBOVUxMOworCXNuZF9tc25kX2Rpc2FibGVfaXJxKG1wdS0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRtaWRpX2lucHV0X2Ryb3Aoc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1KQoreworCXUxNiB0YWlsOworCisJdGFpbCA9IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dUYWlsKTsKKwl3cml0ZXcodGFpbCwgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworfQorCisvKgorICogdHJpZ2dlciBpbnB1dAorICovCitzdGF0aWMgdm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCWludCB1cCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCXNuZF9wcmludGRkKCJzbmRfbXNuZG1pZGlfaW5wdXRfdHJpZ2dlcigsICVpKVxuIiwgdXApOworCisJbXB1ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCXNwaW5fbG9ja19pcnFzYXZlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwlpZiAodXApIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIsCisJCQkJICAgICAgJm1wdS0+bW9kZSkpCisJCQlzbmRfbXNuZG1pZGlfaW5wdXRfZHJvcChtcHUpOworCX0gZWxzZSB7CisJCWNsZWFyX2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSLCAmbXB1LT5tb2RlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJaWYgKHVwKQorCQlzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZChtcHUpOworfQorCit2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKHZvaWQgKm1wdXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUgPSBtcHV2OworCXZvaWQgKnB3TUlEUURhdGEgPSBtcHUtPmRldi0+bWFwcGVkYmFzZSArIE1JRFFfREFUQV9CVUZGOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCXdoaWxlIChyZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193VGFpbCkgIT0KKwkgICAgICAgcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpKSB7CisJCXUxNiB3VG1wLCB2YWw7CisJCXZhbCA9IHJlYWR3KHB3TUlEUURhdGEgKyAyICogcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpKTsKKworCQkJaWYgKHRlc3RfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIsCisJCQkJICAgICAmbXB1LT5tb2RlKSkKKwkJCQlzbmRfcmF3bWlkaV9yZWNlaXZlKG1wdS0+c3Vic3RyZWFtX2lucHV0LAorCQkJCQkJICAgICh1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7CisKKwkJd1RtcCA9IHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKSArIDE7CisJCWlmICh3VG1wID4gcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1NpemUpKQorCQkJd3JpdGV3KDAsICBtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCk7CisJCWVsc2UKKwkJCXdyaXRldyh3VG1wLCAgbXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaWRpX2lucHV0X3JlYWQpOworCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfbXNuZG1pZGlfaW5wdXQgPSB7CisJLm9wZW4gPQkJc25kX21zbmRtaWRpX2lucHV0X29wZW4sCisJLmNsb3NlID0Jc25kX21zbmRtaWRpX2lucHV0X2Nsb3NlLAorCS50cmlnZ2VyID0Jc25kX21zbmRtaWRpX2lucHV0X3RyaWdnZXIsCit9OworCitzdGF0aWMgdm9pZCBzbmRfbXNuZG1pZGlfZnJlZShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSA9IHJtaWRpLT5wcml2YXRlX2RhdGE7CisJa2ZyZWUobXB1KTsKK30KKworaW50IHNuZF9tc25kbWlkaV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3Jhd21pZGlfbmV3KGNhcmQsICJNU05ELU1JREkiLCBkZXZpY2UsIDEsIDEsICZybWlkaSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJbXB1ID0ga2NhbGxvYygxLCBzaXplb2YoKm1wdSksIEdGUF9LRVJORUwpOworCWlmIChtcHUgPT0gTlVMTCkgeworCQlzbmRfZGV2aWNlX2ZyZWUoY2FyZCwgcm1pZGkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbXB1LT5kZXYgPSBjaGlwOworCWNoaXAtPm1zbmRtaWRpX21wdSA9IG1wdTsKKwlybWlkaS0+cHJpdmF0ZV9kYXRhID0gbXB1OworCXJtaWRpLT5wcml2YXRlX2ZyZWUgPSBzbmRfbXNuZG1pZGlfZnJlZTsKKwlzcGluX2xvY2tfaW5pdCgmbXB1LT5pbnB1dF9sb2NrKTsKKwlzdHJjcHkocm1pZGktPm5hbWUsICJNU05EIE1JREkiKTsKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKKwkJCSAgICAmc25kX21zbmRtaWRpX2lucHV0KTsKKwlybWlkaS0+aW5mb19mbGFncyB8PSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQ7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiNmFiZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYwpAQCAtMCwwICsxLDEyMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMaW51eCBtdWx0aXNvdW5kIHBpbm5hY2xlL2ZpamkgZHJpdmVyIGZvciBBTFNBLgorICoKKyAqIDIwMDIvMDYvMzAgS2Fyc3RlbiBXaWVzZToKKyAqCWZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgdG8gYnVpbGQgYSBwaW5uYWNsZSAvIGZpamkgZHJpdmVyLgorICoJdGhlIE9TUyBwYXJlbnQgb2YgdGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIGFsc28gc3VwcG9ydAorICoJdGhlIG11bHRpc291bmQgY2xhc3NpYyB2aWEgdGhlIGZpbGUgbXNuZF9jbGFzc2ljLmMuCisgKgl0byBtYWtlIGl0IGVhc2llciBmb3Igc29tZSBicmF2ZSBoZWFydCB0byBpbXBsZW10IGNsYXNzaWMKKyAqCXN1cHBvcnQgaW4gYWxzYSwgaSBsZWZ0IGFsbCB0aGUgTVNORF9DTEFTU0lDIHRva2VucyBpbiB0aGlzIGZpbGUuCisgKglidXQgZm9yIG5vdyB0aGlzIHVudGVzdGVkICYgdW5kb25lLgorICoKKyAqCisgKiByaXBwZWQgZnJvbSBsaW51eCBrZXJuZWwgMi40LjE4IGJ5IEthcnN0ZW4gV2llc2UuCisgKgorICogdGhlIGZvbGxvd2luZyBpcyBhIGNvcHkgb2YgdGhlIDIuNC4xOCBPU1MgRlJFRSBmaWxlLWhlYWRpbmcgY29tbWVudDoKKyAqCisgKiBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBTb3VuZCBDYXJkIERyaXZlciBmb3IgTGludXgKKyAqIG1zbmRfcGlubmFjbGUuYyAvIG1zbmRfY2xhc3NpYy5jCisgKgorICogLS0gSWYgTVNORF9DTEFTU0lDIGlzIGRlZmluZWQ6CisgKgorICogICAgIC0+IGRyaXZlciBmb3IgVHVydGxlIEJlYWNoIENsYXNzaWMvTW9udGVyZXkvVGFoaXRpCisgKgorICogLS0gRWxzZQorICoKKyAqICAgICAtPiBkcml2ZXIgZm9yIFR1cnRsZSBCZWFjaCBQaW5uYWNsZS9GaWppCisgKgorICogMTItMy0yMDAwICBNb2RpZmllZCBJTyBwb3J0IHZhbGlkYXRpb24gIFN0ZXZlIFN5Y2Ftb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CisjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKyMgaWZuZGVmIF9fYWxwaGFfXworIyAgZGVmaW5lIFNMT1dJTworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSAibXNuZC5oIgorI2lmZGVmIE1TTkRfQ0xBU1NJQworIyAgaW5jbHVkZSAibXNuZF9jbGFzc2ljLmgiCisjICBkZWZpbmUgTE9HTkFNRQkJCSJtc25kX2NsYXNzaWMiCisjZWxzZQorIyAgaW5jbHVkZSAibXNuZF9waW5uYWNsZS5oIgorIyAgZGVmaW5lIExPR05BTUUJCQkic25kX21zbmRfcGlubmFjbGUiCisjZW5kaWYKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoc3RydWN0IHNuZF9tc25kICpjaGlwKQoreworCWNoaXAtPnBsYXlfc2FtcGxlX3NpemUgPSBERUZTQU1QTEVTSVpFOworCWNoaXAtPnBsYXlfc2FtcGxlX3JhdGUgPSBERUZTQU1QTEVSQVRFOworCWNoaXAtPnBsYXlfY2hhbm5lbHMgPSBERUZDSEFOTkVMUzsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplID0gREVGU0FNUExFU0laRTsKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlID0gREVGU0FNUExFUkFURTsKKwljaGlwLT5jYXB0dXJlX2NoYW5uZWxzID0gREVGQ0hBTk5FTFM7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX2V2YWxfZHNwX21zZyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHUxNiB3TWVzc2FnZSkKK3sKKwlzd2l0Y2ggKEhJQllURSh3TWVzc2FnZSkpIHsKKwljYXNlIEhJTVRfUExBWV9ET05FOiB7CisJCWlmIChjaGlwLT5iYW5rc1BsYXllZCA8IDMpCisJCQlzbmRfcHJpbnRkZCgiJTA4WDogSElNVF9QTEFZX0RPTkU6ICVpXG4iLAorCQkJCSh1bnNpZ25lZClqaWZmaWVzLCBMT0JZVEUod01lc3NhZ2UpKTsKKworCQlpZiAoY2hpcC0+bGFzdF9wbGF5YmFuayA9PSBMT0JZVEUod01lc3NhZ2UpKSB7CisJCQlzbmRfcHJpbnRkZCgiY2hpcC5sYXN0X3BsYXliYW5rID09IExPQllURSh3TWVzc2FnZSlcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJY2hpcC0+YmFua3NQbGF5ZWQrKzsKKworCQlpZiAodGVzdF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQkJc25kX21zbmRfREFQUShjaGlwLCAwKTsKKworCQljaGlwLT5sYXN0X3BsYXliYW5rID0gTE9CWVRFKHdNZXNzYWdlKTsKKwkJY2hpcC0+cGxheURNQVBvcyArPSBjaGlwLT5wbGF5X3BlcmlvZF9ieXRlczsKKwkJaWYgKGNoaXAtPnBsYXlETUFQb3MgPiBjaGlwLT5wbGF5TGltaXQpCisJCQljaGlwLT5wbGF5RE1BUG9zID0gMDsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pOworCisJCWJyZWFrOworCX0KKwljYXNlIEhJTVRfUkVDT1JEX0RPTkU6CisJCWlmIChjaGlwLT5sYXN0X3JlY2JhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKSkKKwkJCWJyZWFrOworCQljaGlwLT5sYXN0X3JlY2JhbmsgPSBMT0JZVEUod01lc3NhZ2UpOworCQljaGlwLT5jYXB0dXJlRE1BUG9zICs9IGNoaXAtPmNhcHR1cmVQZXJpb2RCeXRlczsKKwkJaWYgKGNoaXAtPmNhcHR1cmVETUFQb3MgPiAoY2hpcC0+Y2FwdHVyZUxpbWl0KSkKKwkJCWNoaXAtPmNhcHR1cmVETUFQb3MgPSAwOworCisJCWlmICh0ZXN0X2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncykpCisJCQlzbmRfbXNuZF9EQVJRKGNoaXAsIGNoaXAtPmxhc3RfcmVjYmFuayk7CisKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSk7CisJCWJyZWFrOworCisJY2FzZSBISU1UX0RTUDoKKwkJc3dpdGNoIChMT0JZVEUod01lc3NhZ2UpKSB7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCQljYXNlIEhJRFNQX1BMQVlfVU5ERVI6CisjZW5kaWYKKwkJY2FzZSBISURTUF9JTlRfUExBWV9VTkRFUjoKKwkJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogUGxheSB1bmRlcmZsb3cgJWlcbiIsCisJCQkJY2hpcC0+YmFua3NQbGF5ZWQpOworCQkJaWYgKGNoaXAtPmJhbmtzUGxheWVkID4gMikKKwkJCQljbGVhcl9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURTUF9JTlRfUkVDT1JEX09WRVI6CisJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IFJlY29yZCBvdmVyZmxvd1xuIik7CisJCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUKKwkJCQkgICAiOiBEU1AgbWVzc2FnZSAlZCAweCUwMnhcbiIsCisJCQkJICAgTE9CWVRFKHdNZXNzYWdlKSwgTE9CWVRFKHdNZXNzYWdlKSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSElNVF9NSURJX0lOX1VDSEFSOgorCQlpZiAoY2hpcC0+bXNuZG1pZGlfbXB1KQorCQkJc25kX21zbmRtaWRpX2lucHV0X3JlYWQoY2hpcC0+bXNuZG1pZGlfbXB1KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IEhJTVQgbWVzc2FnZSAlZCAweCUwMnhcbiIsCisJCQkgICBISUJZVEUod01lc3NhZ2UpLCBISUJZVEUod01lc3NhZ2UpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX21zbmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBkZXZfaWQ7CisJdm9pZCAqcHdEU1BRRGF0YSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEU1BRX0RBVEFfQlVGRjsKKworCS8qIFNlbmQgYWNrIHRvIERTUCAqLworCS8qIGluYihjaGlwLT5pbyArIEhQX1JYTCk7ICovCisKKwkvKiBFdmFsdWF0ZSBxdWV1ZWQgRFNQIG1lc3NhZ2VzICovCisJd2hpbGUgKHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd1RhaWwpICE9IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpKSB7CisJCXUxNiB3VG1wOworCisJCXNuZF9tc25kX2V2YWxfZHNwX21zZyhjaGlwLAorCQkJcmVhZHcocHdEU1BRRGF0YSArIDIgKiByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSkpOworCisJCXdUbXAgPSByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dIZWFkKSArIDE7CisJCWlmICh3VG1wID4gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193U2l6ZSkpCisJCQl3cml0ZXcoMCwgY2hpcC0+RFNQUSArIEpRU193SGVhZCk7CisJCWVsc2UKKwkJCXdyaXRldyh3VG1wLCBjaGlwLT5EU1BRICsgSlFTX3dIZWFkKTsKKwl9CisJLyogU2VuZCBhY2sgdG8gRFNQICovCisJaW5iKGNoaXAtPmlvICsgSFBfUlhMKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZF9yZXNldF9kc3AobG9uZyBpbywgdW5zaWduZWQgY2hhciAqaW5mbykKK3sKKwlpbnQgdGltZW91dCA9IDEwMDsKKworCW91dGIoSFBEU1BSRVNFVF9PTiwgaW8gKyBIUF9EU1BSKTsKKwltc2xlZXAoMSk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChpbmZvKQorCQkqaW5mbyA9IGluYihpbyArIEhQX0lORk8pOworI2VuZGlmCisJb3V0YihIUERTUFJFU0VUX09GRiwgaW8gKyBIUF9EU1BSKTsKKwltc2xlZXAoMSk7CisJd2hpbGUgKHRpbWVvdXQtLSA+IDApIHsKKwkJaWYgKGluYihpbyArIEhQX0NWUikgPT0gSFBfQ1ZSX0RFRikKKwkJCXJldHVybiAwOworCQltc2xlZXAoMSk7CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDYW5ub3QgcmVzZXQgRFNQXG4iKTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgaW5mbzsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJY2hhciAqeHYsICpyZXYgPSBOVUxMOworCWNoYXIgKnBpbiA9ICJUQiBQaW5uYWNsZSIsICpmaWppID0gIlRCIEZpamkiOworCWNoYXIgKnBpbmZpamkgPSAiVEIgUGlubmFjbGUvRmlqaSI7CisjZW5kaWYKKworCWlmICghcmVxdWVzdF9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTywgInByb2JpbmciKSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoc25kX21zbmRfcmVzZXRfZHNwKGNoaXAtPmlvLCAmaW5mbykgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQ2xhc3NpYy9UYWhpdGkvTW9udGVyZXkiKTsKKwlzdHJjcHkoY2FyZC0+bG9uZ25hbWUsICJUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCIpOworCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiAlcywgIgorCSAgICAgICAiSS9PIDB4JWx4LTB4JWx4LCBJUlEgJWQsIG1lbW9yeSBtYXBwZWQgdG8gMHglbFgtMHglbFhcbiIsCisJICAgICAgIGNhcmQtPnNob3J0bmFtZSwKKwkgICAgICAgY2hpcC0+aW8sIGNoaXAtPmlvICsgRFNQX05VTUlPIC0gMSwKKwkgICAgICAgY2hpcC0+aXJxLAorCSAgICAgICBjaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgMHg3ZmZmKTsKKyNlbHNlCisJc3dpdGNoIChpbmZvID4+IDQpIHsKKwljYXNlIDB4ZjoKKwkJeHYgPSAiPD0gMS4xNSI7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQl4diA9ICIxLjE4LzEuMiI7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQl4diA9ICIxLjMiOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJeHYgPSAiMS40IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeHYgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5mbyAmIDB4NykgeworCWNhc2UgMHgwOgorCQlyZXYgPSAiSSI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQlyZXYgPSAiRiI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQlyZXYgPSAiRyI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlyZXYgPSAiSCI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbik7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQlyZXYgPSAiRSI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NToKKwkJcmV2ID0gIkMiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCXJldiA9ICJEIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlyZXYgPSAiQS1CIChGaWppKSBvciBBLUUgKFBpbm5hY2xlKSI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBpbmZpamkpOworCQlicmVhazsKKwl9CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAiVHVydGxlIEJlYWNoIE11bHRpc291bmQgUGlubmFjbGUiKTsKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogJXMgcmV2aXNpb24gJXMsIFhpbGlueCB2ZXJzaW9uICVzLCAiCisJICAgICAgICJJL08gMHglbHgtMHglbHgsIElSUSAlZCwgbWVtb3J5IG1hcHBlZCB0byAweCVsWC0weCVsWFxuIiwKKwkgICAgICAgY2FyZC0+c2hvcnRuYW1lLAorCSAgICAgICByZXYsIHh2LAorCSAgICAgICBjaGlwLT5pbywgY2hpcC0+aW8gKyBEU1BfTlVNSU8gLSAxLAorCSAgICAgICBjaGlwLT5pcnEsCisJICAgICAgIGNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyAweDdmZmYpOworI2VuZGlmCisKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9pbml0X3NtYShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJc3RhdGljIGludCBpbml0dGVkOworCXUxNiBtYXN0Vm9sTGVmdCwgbWFzdFZvbFJpZ2h0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlvdXRiKGNoaXAtPm1lbWlkLCBjaGlwLT5pbyArIEhQX01FTU0pOworI2VuZGlmCisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCS8qIE1vdG9yb2xhIDU2ayBzaGFyZWQgbWVtb3J5IGJhc2UgKi8KKwljaGlwLT5TTUEgPSBjaGlwLT5tYXBwZWRiYXNlICsgU01BX1NUUlVDVF9TVEFSVDsKKworCWlmIChpbml0dGVkKSB7CisJCW1hc3RWb2xMZWZ0ID0gcmVhZHcoY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpOworCQltYXN0Vm9sUmlnaHQgPSByZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworCX0gZWxzZQorCQltYXN0Vm9sTGVmdCA9IG1hc3RWb2xSaWdodCA9IDA7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIDB4ODAwMCk7CisKKwkvKiBDcml0aWNhbCBzZWN0aW9uOiBiYW5rIDEgYWNjZXNzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKwlvdXRiKEhQQkxLU0VMXzEsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJbWVtc2V0X2lvKGNoaXAtPm1hcHBlZGJhc2UsIDAsIDB4ODAwMCk7CisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIERpZ2l0YWwgYXVkaW8gcGxheSBxdWV1ZSAqLworCWNoaXAtPkRBUFEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFQUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EQVBRLCBEQVBRX0RBVEFfQlVGRiwgREFQUV9CVUZGX1NJWkUpOworCisJLyogRGlnaXRhbCBhdWRpbyByZWNvcmQgcXVldWUgKi8KKwljaGlwLT5EQVJRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+REFSUSwgREFSUV9EQVRBX0JVRkYsIERBUlFfQlVGRl9TSVpFKTsKKworCS8qIE1JREkgb3V0IHF1ZXVlICovCisJY2hpcC0+TU9EUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBNT0RRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPk1PRFEsIE1PRFFfREFUQV9CVUZGLCBNT0RRX0JVRkZfU0laRSk7CisKKwkvKiBNSURJIGluIHF1ZXVlICovCisJY2hpcC0+TUlEUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBNSURRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPk1JRFEsIE1JRFFfREFUQV9CVUZGLCBNSURRX0JVRkZfU0laRSk7CisKKwkvKiBEU1AgLT4gaG9zdCBtZXNzYWdlIHF1ZXVlICovCisJY2hpcC0+RFNQUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEU1BRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRTUFEsIERTUFFfREFUQV9CVUZGLCBEU1BRX0JVRkZfU0laRSk7CisKKwkvKiBTZXR1cCBzb21lIERTUCB2YWx1ZXMgKi8KKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJd3JpdGV3KDEsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlGb3JtYXQpOworCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9zaXplLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJQbGF5U2FtcGxlU2l6ZSk7CisJd3JpdGV3KGNoaXAtPnBsYXlfY2hhbm5lbHMsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlDaGFubmVscyk7CisJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlTYW1wbGVSYXRlKTsKKyNlbmRpZgorCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBjaGlwLT5TTUEgKyBTTUFfd0NhbEZyZXFBdG9EKTsKKwl3cml0ZXcobWFzdFZvbExlZnQsIGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KTsKKwl3cml0ZXcobWFzdFZvbFJpZ2h0LCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwl3cml0ZWwoMHgwMDAxMDAwMCwgY2hpcC0+U01BICsgU01BX2R3Q3VyclBsYXlQaXRjaCk7CisJd3JpdGVsKDB4MDAwMDAwMDEsIGNoaXAtPlNNQSArIFNNQV9kd0N1cnJQbGF5UmF0ZSk7CisjZW5kaWYKKwl3cml0ZXcoMHgzMDMsIGNoaXAtPlNNQSArIFNNQV93Q3VycklucHV0VGFnQml0cyk7CisKKwlpbml0dGVkID0gMTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdXBsb2FkX2RzcF9jb2RlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICppbml0X2Z3ID0gTlVMTCwgKnBlcm1fZncgPSBOVUxMOworCWludCBlcnI7CisKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZpbml0X2Z3LCBJTklUQ09ERUZJTEUsIGNhcmQtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogRXJyb3IgbG9hZGluZyAiIElOSVRDT0RFRklMRSk7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnBlcm1fZncsIFBFUk1DT0RFRklMRSwgY2FyZC0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBFcnJvciBsb2FkaW5nICIgUEVSTUNPREVGSUxFKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCW1lbWNweV90b2lvKGNoaXAtPm1hcHBlZGJhc2UsIHBlcm1fZnctPmRhdGEsIHBlcm1fZnctPnNpemUpOworCWlmIChzbmRfbXNuZF91cGxvYWRfaG9zdChjaGlwLCBpbml0X2Z3LT5kYXRhLCBpbml0X2Z3LT5zaXplKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IEVycm9yIHVwbG9hZGluZyB0byBEU1BcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGNsZWFudXA7CisJfQorCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBEU1AgZmlybXdhcmUgdXBsb2FkZWRcbiIpOworCWVyciA9IDA7CisKK2NsZWFudXA6CisJcmVsZWFzZV9maXJtd2FyZShwZXJtX2Z3KTsKK2NsZWFudXAxOgorCXJlbGVhc2VfZmlybXdhcmUoaW5pdF9mdyk7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworc3RhdGljIHZvaWQgcmVzZXRfcHJvdGV1cyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJb3V0YihIUFBST1JFU0VUX09OLCBjaGlwLT5pbyArIEhQX1BST1IpOworCW1zbGVlcChUSU1FX1BST19SRVNFVCk7CisJb3V0YihIUFBST1JFU0VUX09GRiwgY2hpcC0+aW8gKyBIUF9QUk9SKTsKKwltc2xlZXAoVElNRV9QUk9fUkVTRVRfRE9ORSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzbmRfbXNuZF9pbml0aWFsaXplKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaW50IGVyciwgdGltZW91dDsKKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCW91dGIoSFBXQUlUU1RBVEVfMCwgY2hpcC0+aW8gKyBIUF9XQUlUKTsKKwlvdXRiKEhQQklUTU9ERV8xNiwgY2hpcC0+aW8gKyBIUF9CSVRNKTsKKworCXJlc2V0X3Byb3RldXMoY2hpcCk7CisjZW5kaWYKKwllcnIgPSBzbmRfbXNuZF9pbml0X3NtYShjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogQ2Fubm90IGluaXRpYWxpemUgU01BXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZF9yZXNldF9kc3AoY2hpcC0+aW8sIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gdXBsb2FkX2RzcF9jb2RlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBDYW5ub3QgdXBsb2FkIERTUCBjb2RlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl0aW1lb3V0ID0gMjAwOworCisJd2hpbGUgKHJlYWR3KGNoaXAtPm1hcHBlZGJhc2UpKSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCF0aW1lb3V0LS0pIHsKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBEU1AgcmVzZXQgdGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCXNuZF9tc25kbWl4X3NldHVwKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2RzcF9mdWxsX3Jlc2V0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaW50IHJ2OworCisJaWYgKHRlc3RfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpIHx8ICsrY2hpcC0+bnJlc2V0cyA+IDEwKQorCQlyZXR1cm4gMDsKKworCXNldF9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncyk7CisJc25kX21zbmRfZHNwX2hhbHQoY2hpcCwgTlVMTCk7CS8qIFVuY29uZGl0aW9uYWxseSBoYWx0ICovCisKKwlydiA9IHNuZF9tc25kX2luaXRpYWxpemUoY2FyZCk7CisJaWYgKHJ2KQorCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogRFNQIHJlc2V0IGZhaWxlZFxuIik7CisJc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKGNoaXAsIDApOworCWNsZWFyX2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfY2hpcF9mcmVlKClcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3NlbmRfZHNwX2NtZF9jaGsoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1OCBjbWQpCit7CisJaWYgKHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBjbWQpID09IDApCisJCXJldHVybiAwOworCXNuZF9tc25kX2RzcF9mdWxsX3Jlc2V0KGNoaXAtPmNhcmQpOworCXJldHVybiBzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgY21kKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfY2FsaWJyYXRlX2FkYyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHUxNiBzcmF0ZSkKK3sKKwlzbmRfcHJpbnRkZCgic25kX21zbmRfY2FsaWJyYXRlX2FkYyglaSlcbiIsIHNyYXRlKTsKKwl3cml0ZXcoc3JhdGUsIGNoaXAtPlNNQSArIFNNQV93Q2FsRnJlcUF0b0QpOworCWlmIChjaGlwLT5jYWxpYnJhdGVfc2lnbmFsID09IDApCisJCXdyaXRldyhyZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpCisJCSAgICAgICB8IDB4MDAwMSwgY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKTsKKwllbHNlCisJCXdyaXRldyhyZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpCisJCSAgICAgICAmIH4weDAwMDEsIGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncyk7CisJaWYgKHNuZF9tc25kX3NlbmRfd29yZChjaGlwLCAwLCAwLCBIREVYQVJfQ0FMX0FfVE9fRCkgPT0gMCAmJgorCSAgICBzbmRfbXNuZF9zZW5kX2RzcF9jbWRfY2hrKGNoaXAsIEhERVhfQVVYX1JFUSkgPT0gMCkgeworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygzMzMpKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBBREMgY2FsaWJyYXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIEFMU0EgY2FsbGJhY2sgZnVuY3Rpb24sIGNhbGxlZCB3aGVuIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgTUlESSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgc25kX21zbmRfbXB1NDAxX29wZW4oc3RydWN0IHNuZF9tcHU0MDEgKm1wdSkKK3sKKwlzbmRfbXNuZF9lbmFibGVfaXJxKG1wdS0+cHJpdmF0ZV9kYXRhKTsKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5wcml2YXRlX2RhdGEsIEhERVhfTUlESV9JTl9TVEFSVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX21wdTQwMV9jbG9zZShzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1KQoreworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPnByaXZhdGVfZGF0YSwgSERFWF9NSURJX0lOX1NUT1ApOworCXNuZF9tc25kX2Rpc2FibGVfaXJxKG1wdS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGxvbmcgbXB1X2lvW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgbXB1X2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfYXR0YWNoKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKwlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKKwkJLmRldl9mcmVlID0gICAgICBzbmRfbXNuZF9kZXZfZnJlZSwKKwkJfTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGNoaXAtPmlycSwgc25kX21zbmRfaW50ZXJydXB0LCAwLCBjYXJkLT5zaG9ydG5hbWUsCisJCQkgIGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENvdWxkbid0IGdyYWIgSVJRICVkXG4iLCBjaGlwLT5pcnEpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXF1ZXN0X3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPLCBjYXJkLT5zaG9ydG5hbWUpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUsIGNhcmQtPnNob3J0bmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IHVuYWJsZSB0byBncmFiIG1lbW9yeSByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQljaGlwLT5iYXNlLCBjaGlwLT5iYXNlICsgQlVGRlNJWkUgLSAxKTsKKwkJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPm1hcHBlZGJhc2UgPSBpb3JlbWFwX25vY2FjaGUoY2hpcC0+YmFzZSwgMHg4MDAwKTsKKwlpZiAoIWNoaXAtPm1hcHBlZGJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IHVuYWJsZSB0byBtYXAgbWVtb3J5IHJlZ2lvbiAweCVseC0weCVseFxuIiwKKwkJCWNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyBCVUZGU0laRSAtIDEpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZF9kc3BfZnVsbF9yZXNldChjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisKKwkvKiBSZWdpc3RlciBkZXZpY2UgKi8KKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKworCWVyciA9IHNuZF9tc25kX3BjbShjYXJkLCAwLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBlcnJvciBjcmVhdGluZyBuZXcgUENNIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWVyciA9IHNuZF9tc25kbWl4X25ldyhjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBlcnJvciBjcmVhdGluZyBuZXcgTWl4ZXIgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisKKwlpZiAobXB1X2lvWzBdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1OworCisJCWVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJICBtcHVfaW9bMF0sCisJCQkJCSAgTVBVNDAxX01PREVfSU5QVVQgfAorCQkJCQkgIE1QVTQwMV9NT0RFX09VVFBVVCwKKwkJCQkJICBtcHVfaXJxWzBdLCBJUlFGX0RJU0FCTEVELAorCQkJCQkgICZjaGlwLT5ybWlkaSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJCSI6IGVycm9yIGNyZWF0aW5nIG5ldyBNaWRpIGRldmljZVxuIik7CisJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwkJfQorCQltcHUgPSBjaGlwLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJCW1wdS0+b3Blbl9pbnB1dCA9IHNuZF9tc25kX21wdTQwMV9vcGVuOworCQltcHUtPmNsb3NlX2lucHV0ID0gc25kX21zbmRfbXB1NDAxX2Nsb3NlOworCQltcHUtPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJfQorCisJZGlzYWJsZV9pcnEoY2hpcC0+aXJxKTsKKwlzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKGNoaXAsIGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUpOworCXNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhjaGlwLCAwKTsKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKworCXJldHVybiAwOworCitlcnJfcmVsZWFzZV9yZWdpb246CisJaWYgKGNoaXAtPm1hcHBlZGJhc2UpCisJCWlvdW5tYXAoY2hpcC0+bWFwcGVkYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGNoaXAtPmJhc2UsIEJVRkZTSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9tc25kX3VubG9hZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJaW91bm1hcChjaGlwLT5tYXBwZWRiYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUpOworCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK30KKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKworLyogUGlubmFjbGUvRmlqaSBMb2dpY2FsIERldmljZSBDb25maWd1cmF0aW9uICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZyhpbnQgY2ZnLCBpbnQgcmVnLCBpbnQgdmFsdWUpCit7CisJb3V0YihyZWcsIGNmZyk7CisJb3V0Yih2YWx1ZSwgY2ZnICsgMSk7CisJaWYgKHZhbHVlICE9IGluYihjZmcgKyAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBzbmRfbXNuZF93cml0ZV9jZmc6IEkvTyBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lvMChpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzBfQkFTRUhJLCBISUJZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8wX0JBU0VMTywgTE9CWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaW8xKGludCBjZmcsIGludCBudW0sIHUxNiBpbykKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMV9CQVNFSEksIEhJQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzFfQkFTRUxPLCBMT0JZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pcnEoaW50IGNmZywgaW50IG51bSwgdTE2IGlycSkKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9OVU1CRVIsIExPQllURShpcnEpKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSVJRX1RZUEUsIElSUVRZUEVfRURHRSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfbWVtKGludCBjZmcsIGludCBudW0sIGludCBtZW0pCit7CisJdTE2IHdtZW07CisKKwltZW0gPj49IDg7CisJd21lbSA9ICh1MTYpKG1lbSAmIDB4ZmZmKTsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUJBU0VISSwgSElCWVRFKHdtZW0pKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQkFTRUxPLCBMT0JZVEUod21lbSkpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAod21lbSAmJiBzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUNPTlRST0wsCisJCQkJICAgICAgIE1FTVRZUEVfSElBRERSIHwgTUVNVFlQRV8xNkJJVCkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGludCBjZmcsIGludCBudW0pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19BQ1RJVkFURSwgTERfQUNUSVZBVEUpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSwgdTE2IGlvMCwKKwkJCQkJCXUxNiBpbzEsIHUxNiBpcnEsIGludCBtZW0pCit7CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lvMChjZmcsIG51bSwgaW8wKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pbzEoY2ZnLCBudW0sIGlvMSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaXJxKGNmZywgbnVtLCBpcnEpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX21lbShjZmcsIG51bSwgbWVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX2FjdGl2YXRlX2xvZ2ljYWwoY2ZnLCBudW0pKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcGlubmFjbGVfY2ZnX3Jlc2V0KGludCBjZmcpCit7CisJaW50IGk7CisKKwkvKiBSZXNldCBkZXZpY2VzIGlmIHRvbGQgdG8gKi8KKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogUmVzZXR0aW5nIGFsbCBkZXZpY2VzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCQlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnLCBpLCAwLCAwLCAwLCAwKSkKKwkJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIG1zbmRfcGlubmFjbGUgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBtc25kX3Bpbm5hY2xlIHNvdW5kY2FyZC4iKTsKKworc3RhdGljIGxvbmcgaW9bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgbG9uZyBtZW1bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworCitzdGF0aWMgbG9uZyBjZmdbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworLyogRXh0cmEgUGVyaXBoZXJhbCBDb25maWd1cmF0aW9uIChEZWZhdWx0OiBEaXNhYmxlKSAqLworc3RhdGljIGxvbmcgaWRlX2lvMFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgbG9uZyBpZGVfaW8xW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgaWRlX2lycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKKworc3RhdGljIGxvbmcgam95c3RpY2tfaW9bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworLyogSWYgd2UgaGF2ZSB0aGUgZGlnaXRhbCBkYXVnaGVyYm9hcmQuLi4gKi8KK3N0YXRpYyBpbnQgZGlnaXRhbFtTTkRSVl9DQVJEU107CisKKy8qIEV4dHJhIFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiAqLworc3RhdGljIGludCByZXNldFtTTkRSVl9DQVJEU107CisjZW5kaWYKKworc3RhdGljIGludCB3cml0ZV9uZGVsYXlbU05EUlZfQ0FSRFNdID0geyBbMCAuLi4gKFNORFJWX0NBUkRTLTEpXSA9IDEgfTsKKworc3RhdGljIGludCBjYWxpYnJhdGVfc2lnbmFsOworCisjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBpc2FwbnBbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworbW9kdWxlX3BhcmFtX2FycmF5KGlzYXBucCwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzYXBucCwgIklTQSBQblAgZGV0ZWN0aW9uIGZvciBzcGVjaWZpZWQgc291bmRjYXJkLiIpOworI2RlZmluZSBoYXNfaXNhcG5wKHgpIGlzYXBucFt4XQorI2Vsc2UKKyNkZWZpbmUgaGFzX2lzYXBucCh4KSAwCisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBXaWVzZSA8YW5uYWJlbGxlc2dhcmRlbkB5YWhvby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVHVydGxlIEJlYWNoICIgTE9OR05BTUUgIiBMaW51eCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRShJTklUQ09ERUZJTEUpOworTU9EVUxFX0ZJUk1XQVJFKFBFUk1DT0RFRklMRSk7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbywgbG9uZywgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSU8gcG9ydCAjIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KG1lbSwgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkod3JpdGVfbmRlbGF5LCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNhbGlicmF0ZV9zaWduYWwsIGludCwgU19JUlVHTyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworbW9kdWxlX3BhcmFtX2FycmF5KGRpZ2l0YWwsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoY2ZnLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShyZXNldCwgaW50LCAwLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShtcHVfaW8sIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWRlX2lvMCwgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWRlX2lvMSwgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWRlX2lycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShqb3lzdGlja19pbywgbG9uZywgTlVMTCwgU19JUlVHTyk7CisjZW5kaWYKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGkpCit7CisJaWYgKGlvW2ldID09IFNORFJWX0FVVE9fUE9SVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXJxW2ldID09IFNORFJWX0FVVE9fUE9SVCB8fCBtZW1baV0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBpbywgaXJxIGFuZCBtZW0gbXVzdCBiZSBzZXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoIShpb1tpXSA9PSAweDI5MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjYwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNTAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI0MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjMwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMjAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIxMCB8fAorCSAgICAgIGlvW2ldID09IDB4M2UwKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBcImlvXCIgLSBEU1AgSS9PIGJhc2UgbXVzdCBiZSBzZXQgIgorCQkJIiB0byAweDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MCwgMHgyNTAsIDB4MjYwLCAweDI5MCwgIgorCQkJIm9yIDB4M0UwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2Vsc2UKKwlpZiAoaW9baV0gPCAweDEwMCB8fCBpb1tpXSA+IDB4M2UwIHx8IChpb1tpXSAlIDB4MTApICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IFwiaW9cIiAtIERTUCBJL08gYmFzZSBtdXN0IHdpdGhpbiB0aGUgcmFuZ2UgMHgxMDAgIgorCQkJInRvIDB4M0UwIGFuZCBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgMHgxMFxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCWlmICghKGlycVtpXSA9PSA1IHx8CisJICAgICAgaXJxW2ldID09IDcgfHwKKwkgICAgICBpcnFbaV0gPT0gOSB8fAorCSAgICAgIGlycVtpXSA9PSAxMCB8fAorCSAgICAgIGlycVtpXSA9PSAxMSB8fAorCSAgICAgIGlycVtpXSA9PSAxMikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSI6IFwiaXJxXCIgLSBtdXN0IGJlIHNldCB0byA1LCA3LCA5LCAxMCwgMTEgb3IgMTJcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIShtZW1baV0gPT0gMHhiMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGM4MDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZDAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhkODAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGUwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZTgwMDApKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFwibWVtXCIgLSBtdXN0IGJlIHNldCB0byAiCisJCSAgICAgICAiMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwgMHhlMDAwMCBvciAiCisJCSAgICAgICAiMHhlODAwMFxuIik7CisJCXJldHVybiAwOworCX0KKworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoY2ZnW2ldID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogQXNzdW1pbmcgUG5QIG1vZGVcbiIpOworCX0gZWxzZSBpZiAoY2ZnW2ldICE9IDB4MjUwICYmIGNmZ1tpXSAhPSAweDI2MCAmJiBjZmdbaV0gIT0gMHgyNzApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCQkiOiBDb25maWcgcG9ydCBtdXN0IGJlIDB4MjUwLCAweDI2MCBvciAweDI3MCAiCisJCQkiKG9yIHVuc3BlY2lmaWVkIGZvciBQblAgbW9kZSlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpZHgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9tc25kICpjaGlwOworCisJaWYgKGhhc19pc2FwbnAoaWR4KSB8fCBjZmdbaWR4XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IEFzc3VtaW5nIFBuUCBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfbXNuZCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwljaGlwLT5jYXJkID0gY2FyZDsKKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCXN3aXRjaCAoaXJxW2lkeF0pIHsKKwljYXNlIDU6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfNTsgYnJlYWs7CisJY2FzZSA3OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzc7IGJyZWFrOworCWNhc2UgOToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV85OyBicmVhazsKKwljYXNlIDEwOgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzEwOyBicmVhazsKKwljYXNlIDExOgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzExOyBicmVhazsKKwljYXNlIDEyOgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzEyOyBicmVhazsKKwl9CisKKwlzd2l0Y2ggKG1lbVtpZHhdKSB7CisJY2FzZSAweGIwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0IwMDA7IGJyZWFrOworCWNhc2UgMHhjODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9DODAwOyBicmVhazsKKwljYXNlIDB4ZDAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRDAwMDsgYnJlYWs7CisJY2FzZSAweGQ4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0Q4MDA7IGJyZWFrOworCWNhc2UgMHhlMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9FMDAwOyBicmVhazsKKwljYXNlIDB4ZTgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRTgwMDsgYnJlYWs7CisJfQorI2Vsc2UKKwlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogTm9uLVBuUCBtb2RlOiBjb25maWd1cmluZyBhdCBwb3J0IDB4JWx4XG4iLAorCQkJY2ZnW2lkeF0pOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjZmdbaWR4XSwgMiwgIlBpbm5hY2xlL0ZpamkgQ29uZmlnIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ29uZmlnIHBvcnQgMHglbHggY29uZmxpY3RcbiIsCisJCQkgICBjZmdbaWR4XSk7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocmVzZXRbaWR4XSkKKwkJaWYgKHNuZF9tc25kX3Bpbm5hY2xlX2NmZ19yZXNldChjZmdbaWR4XSkpIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGNmZ19lcnJvcjsKKwkJfQorCisJLyogRFNQICovCisJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDAsCisJCQkJCSBpb1tpZHhdLCAwLAorCQkJCQkgaXJxW2lkeF0sIG1lbVtpZHhdKTsKKworCWlmIChlcnIpCisJCWdvdG8gY2ZnX2Vycm9yOworCisJLyogVGhlIGZvbGxvd2luZyBhcmUgUGlubmFjbGUgc3BlY2lmaWMgKi8KKworCS8qIE1QVSAqLworCWlmIChtcHVfaW9baWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgbXB1X2lycVtpZHhdICE9IFNORFJWX0FVVE9fSVJRKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRQorCQkgICAgICAgIjogQ29uZmlndXJpbmcgTVBVIHRvIEkvTyAweCVseCBJUlEgJWRcbiIsCisJCSAgICAgICBtcHVfaW9baWR4XSwgbXB1X2lycVtpZHhdKTsKKwkJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDEsCisJCQkJCQkgbXB1X2lvW2lkeF0sIDAsCisJCQkJCQkgbXB1X2lycVtpZHhdLCAwKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBjZmdfZXJyb3I7CisJfQorCisJLyogSURFICovCisJaWYgKGlkZV9pbzBbaWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQKKwkgICAgJiYgaWRlX2lvMVtpZHhdICE9IFNORFJWX0FVVE9fUE9SVAorCSAgICAmJiBpZGVfaXJxW2lkeF0gIT0gU05EUlZfQVVUT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCSAgICAgICAiOiBDb25maWd1cmluZyBJREUgdG8gSS9PIDB4JWx4LCAweCVseCBJUlEgJWRcbiIsCisJCSAgICAgICBpZGVfaW8wW2lkeF0sIGlkZV9pbzFbaWR4XSwgaWRlX2lycVtpZHhdKTsKKwkJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDIsCisJCQkJCQkgaWRlX2lvMFtpZHhdLCBpZGVfaW8xW2lkeF0sCisJCQkJCQkgaWRlX2lycVtpZHhdLCAwKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBjZmdfZXJyb3I7CisJfQorCisJLyogSm95c3RpY2sgKi8KKwlpZiAoam95c3RpY2tfaW9baWR4XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCSAgICAgICAiOiBDb25maWd1cmluZyBqb3lzdGljayB0byBJL08gMHglbHhcbiIsCisJCSAgICAgICBqb3lzdGlja19pb1tpZHhdKTsKKwkJZXJyID0gc25kX21zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY2ZnW2lkeF0sIDMsCisJCQkJCQkgam95c3RpY2tfaW9baWR4XSwgMCwKKwkJCQkJCSAwLCAwKTsKKworCQlpZiAoZXJyKQorCQkJZ290byBjZmdfZXJyb3I7CisJfQorCXJlbGVhc2VfcmVnaW9uKGNmZ1tpZHhdLCAyKTsKKworI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJc2V0X2RlZmF1bHRfYXVkaW9fcGFyYW1ldGVycyhjaGlwKTsKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwljaGlwLT50eXBlID0gbXNuZENsYXNzaWM7CisjZWxzZQorCWNoaXAtPnR5cGUgPSBtc25kUGlubmFjbGU7CisjZW5kaWYKKwljaGlwLT5pbyA9IGlvW2lkeF07CisJY2hpcC0+aXJxID0gaXJxW2lkeF07CisJY2hpcC0+YmFzZSA9IG1lbVtpZHhdOworCisJY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9IGNhbGlicmF0ZV9zaWduYWwgPyAxIDogMDsKKwljaGlwLT5yZWNzcmMgPSAwOworCWNoaXAtPmRzcHFfZGF0YV9idWZmID0gRFNQUV9EQVRBX0JVRkY7CisJY2hpcC0+ZHNwcV9idWZmX3NpemUgPSBEU1BRX0JVRkZfU0laRTsKKwlpZiAod3JpdGVfbmRlbGF5W2lkeF0pCisJCWNsZWFyX2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworCWVsc2UKKwkJc2V0X2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoZGlnaXRhbFtpZHhdKQorCQlzZXRfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncyk7CisjZW5kaWYKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisJZXJyID0gc25kX21zbmRfcHJvYmUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogUHJvYmUgZmFpbGVkXG4iKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfbXNuZF9hdHRhY2goY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQXR0YWNoIGZhaWxlZFxuIik7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKworCXJldHVybiAwOworCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworY2ZnX2Vycm9yOgorCXJlbGVhc2VfcmVnaW9uKGNmZ1tpZHhdLCAyKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CisjZW5kaWYKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc25kX21zbmRfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KQoreworCXNuZF9tc25kX3VubG9hZChkZXZfZ2V0X2RydmRhdGEocGRldikpOworCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBERVZfTkFNRSAibXNuZC1waW5uYWNsZSIKKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9tc25kX2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gc25kX21zbmRfaXNhX21hdGNoLAorCS5wcm9iZQkJPSBzbmRfbXNuZF9pc2FfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfbXNuZF9pc2FfcmVtb3ZlKSwKKwkvKiBGSVhNRTogc3VzcGVuZCwgcmVzdW1lICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gREVWX05BTUUKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3BucF9kZXRlY3Qoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAorCQkJCQkgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQoreworCXN0YXRpYyBpbnQgaWR4OworCXN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2OworCXN0cnVjdCBwbnBfZGV2ICptcHVfZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXA7CisJaW50IHJldDsKKworCWZvciAoIDsgaWR4IDwgU05EUlZfQ0FSRFM7IGlkeCsrKSB7CisJCWlmIChoYXNfaXNhcG5wKGlkeCkpCisJCQlicmVhazsKKwl9CisJaWYgKGlkeCA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSByb29tIGZvciBhbm90aGVyIHNvdW5kIGNhcmQgLi4uCisJICovCisJcG5wX2RldiA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKHBjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOworCWlmICghcG5wX2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltcHVfZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UocGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7CisJaWYgKCFtcHVfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcG5wX2lzX2FjdGl2ZShwbnBfZGV2KSAmJiBwbnBfYWN0aXZhdGVfZGV2KHBucF9kZXYpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtc25kX3Bpbm5hY2xlOiBkZXZpY2UgaXMgaW5hY3RpdmVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICghcG5wX2lzX2FjdGl2ZShtcHVfZGV2KSAmJiBwbnBfYWN0aXZhdGVfZGV2KG1wdV9kZXYpIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJtc25kX3Bpbm5hY2xlOiBNUFUgZGV2aWNlIGlzIGluYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhIG5ldyBBTFNBIHNvdW5kIGNhcmQgZW50cnksIGluIGFudGljaXBhdGlvbgorCSAqIG9mIGRldGVjdGluZyBvdXIgaGFyZHdhcmUgLi4uCisJICovCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfbXNuZCksICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNhcmQtPmNhcmQtPmRldik7CisKKwkvKgorCSAqIFJlYWQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBvZmYgdGhlIElTQSBQblAgYnVzIC4uLgorCSAqLworCWlvW2lkeF0gPSBwbnBfcG9ydF9zdGFydChwbnBfZGV2LCAwKTsKKwlpcnFbaWR4XSA9IHBucF9pcnEocG5wX2RldiwgMCk7CisJbWVtW2lkeF0gPSBwbnBfbWVtX3N0YXJ0KHBucF9kZXYsIDApOworCW1wdV9pb1tpZHhdID0gcG5wX3BvcnRfc3RhcnQobXB1X2RldiwgMCk7CisJbXB1X2lycVtpZHhdID0gcG5wX2lycShtcHVfZGV2LCAwKTsKKworCXNldF9kZWZhdWx0X2F1ZGlvX3BhcmFtZXRlcnMoY2hpcCk7CisjaWZkZWYgTVNORF9DTEFTU0lDCisJY2hpcC0+dHlwZSA9IG1zbmRDbGFzc2ljOworI2Vsc2UKKwljaGlwLT50eXBlID0gbXNuZFBpbm5hY2xlOworI2VuZGlmCisJY2hpcC0+aW8gPSBpb1tpZHhdOworCWNoaXAtPmlycSA9IGlycVtpZHhdOworCWNoaXAtPmJhc2UgPSBtZW1baWR4XTsKKworCWNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPSBjYWxpYnJhdGVfc2lnbmFsID8gMSA6IDA7CisJY2hpcC0+cmVjc3JjID0gMDsKKwljaGlwLT5kc3BxX2RhdGFfYnVmZiA9IERTUFFfREFUQV9CVUZGOworCWNoaXAtPmRzcHFfYnVmZl9zaXplID0gRFNQUV9CVUZGX1NJWkU7CisJaWYgKHdyaXRlX25kZWxheVtpZHhdKQorCQljbGVhcl9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKwllbHNlCisJCXNldF9iaXQoRl9ESVNBQkxFX1dSSVRFX05ERUxBWSwgJmNoaXAtPmZsYWdzKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGRpZ2l0YWxbaWR4XSkKKwkJc2V0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCXJldCA9IHNuZF9tc25kX3Byb2JlKGNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFByb2JlIGZhaWxlZFxuIik7CisJCWdvdG8gX3JlbGVhc2VfY2FyZDsKKwl9CisKKwlyZXQgPSBzbmRfbXNuZF9hdHRhY2goY2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQXR0YWNoIGZhaWxlZFxuIik7CisJCWdvdG8gX3JlbGVhc2VfY2FyZDsKKwl9CisKKwlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CisJKytpZHg7CisJcmV0dXJuIDA7CisKK19yZWxlYXNlX2NhcmQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX21zbmRfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQpCit7CisJc25kX21zbmRfdW5sb2FkKHBucF9nZXRfY2FyZF9kcnZkYXRhKHBjYXJkKSk7CisJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOworc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKKworc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgbXNuZF9wbnBpZHNbXSA9IHsKKwkvKiBQaW5uYWNsZSBQblAgKi8KKwl7IC5pZCA9ICJCVkowNDQwIiwgLmRldnMgPSB7IHsgIlRCUzAwMDAiIH0sIHsgIlRCUzAwMDEiIH0gfSB9LAorCXsgLmlkID0gIiIgfQkvKiBlbmQgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wX2NhcmQsIG1zbmRfcG5waWRzKTsKKworc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgbXNuZF9wbnBjX2RyaXZlciA9IHsKKwkuZmxhZ3MgPSBQTlBfRFJJVkVSX1JFU19ET19OT1RfQ0hBTkdFLAorCS5uYW1lID0gIm1zbmRfcGlubmFjbGUiLAorCS5pZF90YWJsZSA9IG1zbmRfcG5waWRzLAorCS5wcm9iZSA9IHNuZF9tc25kX3BucF9kZXRlY3QsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9tc25kX3BucF9yZW1vdmUpLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfUE5QICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9tc25kX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX21zbmRfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmICghZXJyKQorCQlpc2FfcmVnaXN0ZXJlZCA9IDE7CisKKwllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm1zbmRfcG5wY19kcml2ZXIpOworCWlmICghZXJyKQorCQlwbnBfcmVnaXN0ZXJlZCA9IDE7CisKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisJCWVyciA9IDA7CisjZW5kaWYKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX21zbmRfZXhpdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAocG5wX3JlZ2lzdGVyZWQpCisJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZtc25kX3BucGNfZHJpdmVyKTsKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisjZW5kaWYKKwkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfbXNuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzbmRfbXNuZF9pbml0KTsKK21vZHVsZV9leGl0KHNuZF9tc25kX2V4aXQpOworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmggYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzMThkMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuaApAQCAtMCwwICsxLDE4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmRfcGlubmFjbGUuaAorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIFNvbWUgcGFydHMgb2YgdGhpcyBoZWFkZXIgZmlsZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgVHVydGxlIEJlYWNoCisgKiBNdWx0aVNvdW5kIERyaXZlciBEZXZlbG9wbWVudCBLaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVHVydGxlIEJlYWNoIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNORF9QSU5OQUNMRV9ICisjZGVmaW5lIF9fTVNORF9QSU5OQUNMRV9ICisKKyNkZWZpbmUgRFNQX05VTUlPCQkJCTB4MDgKKworI2RlZmluZSBJUkVHX0xPR0RFVklDRQkJCQkweDA3CisjZGVmaW5lIElSRUdfQUNUSVZBVEUJCQkJMHgzMAorI2RlZmluZSBMRF9BQ1RJVkFURQkJCQkweDAxCisjZGVmaW5lIExEX0RJU0FDVElWQVRFCQkJCTB4MDAKKyNkZWZpbmUgSVJFR19FRUNPTlRST0wJCQkJMHgzRgorI2RlZmluZSBJUkVHX01FTUJBU0VISQkJCQkweDQwCisjZGVmaW5lIElSRUdfTUVNQkFTRUxPCQkJCTB4NDEKKyNkZWZpbmUgSVJFR19NRU1DT05UUk9MCQkJCTB4NDIKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUhJCQkJCTB4NDMKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUxPCQkJCTB4NDQKKyNkZWZpbmUgTUVNVFlQRV84QklUCQkJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV8xNkJJVAkJCQkweDAyCisjZGVmaW5lIE1FTVRZUEVfUkFOR0UJCQkJMHgwMAorI2RlZmluZSBNRU1UWVBFX0hJQUREUgkJCQkweDAxCisjZGVmaW5lIElSRUdfSU8wX0JBU0VISQkJCQkweDYwCisjZGVmaW5lIElSRUdfSU8wX0JBU0VMTwkJCQkweDYxCisjZGVmaW5lIElSRUdfSU8xX0JBU0VISQkJCQkweDYyCisjZGVmaW5lIElSRUdfSU8xX0JBU0VMTwkJCQkweDYzCisjZGVmaW5lIElSRUdfSVJRX05VTUJFUgkJCQkweDcwCisjZGVmaW5lIElSRUdfSVJRX1RZUEUJCQkJMHg3MQorI2RlZmluZSBJUlFUWVBFX0hJR0gJCQkJMHgwMgorI2RlZmluZSBJUlFUWVBFX0xPVwkJCQkweDAwCisjZGVmaW5lIElSUVRZUEVfTEVWRUwJCQkJMHgwMQorI2RlZmluZSBJUlFUWVBFX0VER0UJCQkJMHgwMAorCisjZGVmaW5lCUhQX0RTUFIJCQkJCTB4MDQKKyNkZWZpbmUJSFBfQkxLUwkJCQkJMHgwNAorCisjZGVmaW5lIEhQRFNQUkVTRVRfT0ZGCQkJCTIKKyNkZWZpbmUgSFBEU1BSRVNFVF9PTgkJCQkwCisKKyNkZWZpbmUgSFBCTEtTRUxfMAkJCQkyCisjZGVmaW5lIEhQQkxLU0VMXzEJCQkJMworCisjZGVmaW5lCUhJTVRfREFUX09GRgkJCQkweDAzCisKKyNkZWZpbmUJSElEU1BfUExBWV9VTkRFUgkJCTB4MDAKKyNkZWZpbmUJSElEU1BfSU5UX1BMQVlfVU5ERVIJCQkweDAxCisjZGVmaW5lCUhJRFNQX1NTSV9UWF9VTkRFUiAgCQkJMHgwMgorI2RlZmluZSBISURTUF9SRUNRX09WRVJGTE9XCQkJMHgwOAorI2RlZmluZSBISURTUF9JTlRfUkVDT1JEX09WRVIJCQkweDA5CisjZGVmaW5lIEhJRFNQX1NTSV9SWF9PVkVSRkxPVwkJCTB4MGEKKworI2RlZmluZQlISURTUF9NSURJX0lOX09WRVIJCQkweDEwCisKKyNkZWZpbmUJSElEU1BfTUlESV9GUkFNRV9FUlIJCQkweDExCisjZGVmaW5lCUhJRFNQX01JRElfUEFSSVRZX0VSUgkJCTB4MTIKKyNkZWZpbmUJSElEU1BfTUlESV9PVkVSUlVOX0VSUgkJCTB4MTMKKworI2RlZmluZSBISURTUF9JTlBVVF9DTElQUElORwkJCTB4MjAKKyNkZWZpbmUJSElEU1BfTUlYX0NMSVBQSU5HCQkJMHgzMAorI2RlZmluZSBISURTUF9EQVRfSU5fT0ZGCQkJMHgyMQorCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUX0RPTkUJCQkweDAyOEEKKyNkZWZpbmUgVElNRV9QUk9fU1lTRVgJCQkJMHgwMDFFCisjZGVmaW5lIFRJTUVfUFJPX1JFU0VUCQkJCTB4MDAzMgorCisjZGVmaW5lIERBUl9CVUZGX1NJWkUJCQkJMHgxMDAwCisKKyNkZWZpbmUgTUlEUV9CVUZGX1NJWkUJCQkJMHg4MDAKKyNkZWZpbmUgRFNQUV9CVUZGX1NJWkUJCQkJMHg1QTAKKworI2RlZmluZSBEU1BRX0RBVEFfQlVGRgkJCQkweDc4NjAKKworI2RlZmluZSBNT1BfV0FWRUhEUgkJCQkwCisjZGVmaW5lIE1PUF9FWFRPVVQJCQkJMQorI2RlZmluZSBNT1BfSFdJTklUCQkJCTB4ZmUKKyNkZWZpbmUgTU9QX05PTkUJCQkJMHhmZgorI2RlZmluZSBNT1BfTUFYCQkJCQkxCisKKyNkZWZpbmUgTUlQX0VYVElOCQkJCTAKKyNkZWZpbmUgTUlQX1dBVkVIRFIJCQkJMQorI2RlZmluZSBNSVBfSFdJTklUCQkJCTB4ZmUKKyNkZWZpbmUgTUlQX01BWAkJCQkJMQorCisvKiBQaW5uYWNsZS9GaWppIFNNQSBDb21tb24gRGF0YSAqLworI2RlZmluZSBTTUFfd0N1cnJQbGF5Qnl0ZXMJCQkweDAwMDAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkQnl0ZXMJCQkweDAwMDIKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbExlZnQJCQkweDAwMDQKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbFJpZ2h0CQkJMHgwMDA2CisjZGVmaW5lIFNNQV93Q3VyckluVm9sTGVmdAkJCTB4MDAwOAorI2RlZmluZSBTTUFfd0N1cnJJblZvbFJpZ2h0CQkJMHgwMDBhCisjZGVmaW5lIFNNQV93Q3Vyck1IZHJWb2xMZWZ0CQkJMHgwMDBjCisjZGVmaW5lIFNNQV93Q3Vyck1IZHJWb2xSaWdodAkJCTB4MDAwZQorI2RlZmluZSBTTUFfZHdDdXJyUGxheVBpdGNoCQkJMHgwMDEwCisjZGVmaW5lIFNNQV9kd0N1cnJQbGF5UmF0ZQkJCTB4MDAxNAorI2RlZmluZSBTTUFfd0N1cnJNSURJSU9QYXRjaAkJCTB4MDAxOAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Rm9ybWF0CQkJMHgwMDFhCisjZGVmaW5lIFNNQV93Q3VyclBsYXlTYW1wbGVTaXplCQkJMHgwMDFjCisjZGVmaW5lIFNNQV93Q3VyclBsYXlDaGFubmVscwkJCTB4MDAxZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5U2FtcGxlUmF0ZQkJCTB4MDAyMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRGb3JtYXQJCQkweDAwMjIKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkU2FtcGxlU2l6ZQkJMHgwMDI0CisjZGVmaW5lIFNNQV93Q3VyclJlY29yZENoYW5uZWxzCQkJMHgwMDI2CisjZGVmaW5lIFNNQV93Q3VyclJlY29yZFNhbXBsZVJhdGUJCTB4MDAyOAorI2RlZmluZSBTTUFfd0N1cnJEU1BTdGF0dXNGbGFncwkJCTB4MDAyYQorI2RlZmluZSBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MJCTB4MDAyYworI2RlZmluZSBTTUFfd0N1cnJJbnB1dFRhZ0JpdHMJCQkweDAwMmUKKyNkZWZpbmUgU01BX3dDdXJyTGVmdFBlYWsJCQkweDAwMzAKKyNkZWZpbmUgU01BX3dDdXJyUmlnaHRQZWFrCQkJMHgwMDMyCisjZGVmaW5lIFNNQV9iTWljUG90UG9zTGVmdAkJCTB4MDAzNAorI2RlZmluZSBTTUFfYk1pY1BvdFBvc1JpZ2h0CQkJMHgwMDM1CisjZGVmaW5lIFNNQV9iTWljUG90TWF4TGVmdAkJCTB4MDAzNgorI2RlZmluZSBTTUFfYk1pY1BvdE1heFJpZ2h0CQkJMHgwMDM3CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NMZWZ0CQkJMHgwMDM4CisjZGVmaW5lIFNNQV9iSW5Qb3RQb3NSaWdodAkJCTB4MDAzOQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc0xlZnQJCQkweDAwM2EKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NSaWdodAkJCTB4MDAzYgorI2RlZmluZSBTTUFfYkluUG90TWF4TGVmdAkJCTB4MDAzYworI2RlZmluZSBTTUFfYkluUG90TWF4UmlnaHQJCQkweDAwM2QKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhMZWZ0CQkJMHgwMDNlCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4UmlnaHQJCQkweDAwM2YKKyNkZWZpbmUgU01BX2JJblBvdE1heE1ldGhvZAkJCTB4MDA0MAorI2RlZmluZSBTTUFfYkF1eFBvdE1heE1ldGhvZAkJCTB4MDA0MQorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sTGVmdAkJCTB4MDA0MgorI2RlZmluZSBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQJCQkweDAwNDQKKyNkZWZpbmUgU01BX3dDYWxGcmVxQXRvRAkJCTB4MDA0NgorI2RlZmluZSBTTUFfd0N1cnJBdXhWb2xMZWZ0CQkJMHgwMDQ4CisjZGVmaW5lIFNNQV93Q3VyckF1eFZvbFJpZ2h0CQkJMHgwMDRhCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxVm9sTGVmdAkJCTB4MDA0YworI2RlZmluZSBTTUFfd0N1cnJQbGF5MVZvbFJpZ2h0CQkJMHgwMDRlCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyVm9sTGVmdAkJCTB4MDA1MAorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlZvbFJpZ2h0CQkJMHgwMDUyCisjZGVmaW5lIFNNQV93Q3VyclBsYXkzVm9sTGVmdAkJCTB4MDA1NAorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1ZvbFJpZ2h0CQkJMHgwMDU2CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0Vm9sTGVmdAkJCTB4MDA1OAorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFZvbFJpZ2h0CQkJMHgwMDVhCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxUGVha0xlZnQJCQkweDAwNWMKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFQZWFrUmlnaHQJCQkweDAwNWUKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJQZWFrTGVmdAkJCTB4MDA2MAorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlBlYWtSaWdodAkJCTB4MDA2MgorI2RlZmluZSBTTUFfd0N1cnJQbGF5M1BlYWtMZWZ0CQkJMHgwMDY0CisjZGVmaW5lIFNNQV93Q3VyclBsYXkzUGVha1JpZ2h0CQkJMHgwMDY2CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0UGVha0xlZnQJCQkweDAwNjgKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRQZWFrUmlnaHQJCQkweDAwNmEKKyNkZWZpbmUgU01BX3dDdXJyUGxheVBlYWtMZWZ0CQkJMHgwMDZjCisjZGVmaW5lIFNNQV93Q3VyclBsYXlQZWFrUmlnaHQJCQkweDAwNmUKKyNkZWZpbmUgU01BX3dDdXJyREFUU1IJCQkJMHgwMDcwCisjZGVmaW5lIFNNQV93Q3VyckRBVFJYQ0hOTAkJCTB4MDA3MgorI2RlZmluZSBTTUFfd0N1cnJEQVRUWENITkwJCQkweDAwNzQKKyNkZWZpbmUgU01BX3dDdXJyREFUUlhSYXRlCQkJMHgwMDc2CisjZGVmaW5lIFNNQV9kd0RTUFBsYXlDb3VudAkJCTB4MDA3OAorI2RlZmluZSBTTUFfX3NpemUJCQkJMHgwMDdjCisKKyNkZWZpbmUgSU5JVENPREVGSUxFCQkidHVydGxlYmVhY2gvcG5kc3BpbmkuYmluIgorI2RlZmluZSBQRVJNQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9wbmRzcGVybS5iaW4iCisjZGVmaW5lIExPTkdOQU1FCQkiTXVsdGlTb3VuZCAoUGlubmFjbGUvRmlqaSkiCisKKyNlbmRpZiAvKiBfX01TTkRfUElOTkFDTEVfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZV9taXhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDA1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlX21peGVyLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCSAgbXNuZF9waW5uYWNsZV9taXhlci5jICAtICBkZXNjcmlwdGlvbgorCQkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYmVnaW4JCTogRnJlIEp1biA3IDIwMDIKKyAgICBjb3B5cmlnaHQgCQk6IChDKSAyMDAyIGJ5IGthcnN0ZW4gd2llc2UKKyAgICBlbWFpbAkJOiBhbm5hYmVsbGVzZ2FyZGVuQHlhaG9vLmRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkgICAgICAJCSAgICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4JCQkJICAgKgorICoJCQkJCQkJCQkgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSAibXNuZC5oIgorI2luY2x1ZGUgIm1zbmRfcGlubmFjbGUuaCIKKworCisjZGVmaW5lIE1TTkRfTUlYRVJfVk9MVU1FCTAKKyNkZWZpbmUgTVNORF9NSVhFUl9QQ00JCTEKKyNkZWZpbmUgTVNORF9NSVhFUl9BVVgJCTIJLyogSW5wdXQgc291cmNlIDEgIChhdXgxKSAqLworI2RlZmluZSBNU05EX01JWEVSX0lNSVgJCTMJLyogIFJlY29yZGluZyBtb25pdG9yICAqLworI2RlZmluZSBNU05EX01JWEVSX1NZTlRICTQKKyNkZWZpbmUgTVNORF9NSVhFUl9TUEVBS0VSCTUKKyNkZWZpbmUgTVNORF9NSVhFUl9MSU5FCQk2CisjZGVmaW5lIE1TTkRfTUlYRVJfTUlDCQk3CisjZGVmaW5lIE1TTkRfTUlYRVJfUkVDTEVWCTExCS8qIFJlY29yZGluZyBsZXZlbCAqLworI2RlZmluZSBNU05EX01JWEVSX0lHQUlOCTEyCS8qIElucHV0IGdhaW4gKi8KKyNkZWZpbmUgTVNORF9NSVhFUl9PR0FJTgkxMwkvKiBPdXRwdXQgZ2FpbiAqLworI2RlZmluZSBNU05EX01JWEVSX0RJR0lUQUwJMTcJLyogRGlnaXRhbCAoaW5wdXQpIDEgKi8KKworLyoJRGV2aWNlIG1hc2sgYml0cwkqLworCisjZGVmaW5lIE1TTkRfTUFTS19WT0xVTUUJKDEgPDwgTVNORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIE1TTkRfTUFTS19TWU5USAkJKDEgPDwgTVNORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgTVNORF9NQVNLX1BDTQkJKDEgPDwgTVNORF9NSVhFUl9QQ00pCisjZGVmaW5lIE1TTkRfTUFTS19TUEVBS0VSCSgxIDw8IE1TTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgTVNORF9NQVNLX0xJTkUJCSgxIDw8IE1TTkRfTUlYRVJfTElORSkKKyNkZWZpbmUgTVNORF9NQVNLX01JQwkJKDEgPDwgTVNORF9NSVhFUl9NSUMpCisjZGVmaW5lIE1TTkRfTUFTS19JTUlYCQkoMSA8PCBNU05EX01JWEVSX0lNSVgpCisjZGVmaW5lIE1TTkRfTUFTS19SRUNMRVYJKDEgPDwgTVNORF9NSVhFUl9SRUNMRVYpCisjZGVmaW5lIE1TTkRfTUFTS19JR0FJTgkJKDEgPDwgTVNORF9NSVhFUl9JR0FJTikKKyNkZWZpbmUgTVNORF9NQVNLX09HQUlOCQkoMSA8PCBNU05EX01JWEVSX09HQUlOKQorI2RlZmluZSBNU05EX01BU0tfQVVYCQkoMSA8PCBNU05EX01JWEVSX0FVWCkKKyNkZWZpbmUgTVNORF9NQVNLX0RJR0lUQUwJKDEgPDwgTVNORF9NSVhFUl9ESUdJVEFMKQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X2luZm9fbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNoYXIgKnRleHRzWzNdID0geworCQkiQW5hbG9nIiwgIk1BU1MiLCAiU1BESUYiLAorCX07CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGl0ZW1zID0gdGVzdF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKSA/IDMgOiAyOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IGl0ZW1zOworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IGl0ZW1zKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gaXRlbXMgLSAxOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorCQl0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfZ2V0X211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJLyogTVNORF9NQVNLX0lNSVggaXMgdGhlIGRlZmF1bHQgKi8KKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMDsKKworCWlmIChjaGlwLT5yZWNzcmMgJiBNU05EX01BU0tfU1lOVEgpIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7CisJfSBlbHNlIGlmICgoY2hpcC0+cmVjc3JjICYgTVNORF9NQVNLX0RJR0lUQUwpICYmCisJCSB0ZXN0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpKSB7CisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCX0KKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfc2V0X211eChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCB2YWwpCit7CisJdW5zaWduZWQgbmV3cmVjc3JjOworCWludCBjaGFuZ2U7CisJdW5zaWduZWQgY2hhciBtc25kYnl0ZTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQluZXdyZWNzcmMgPSBNU05EX01BU0tfSU1JWDsKKwkJbXNuZGJ5dGUgPSBIREVYQVJfU0VUX0FOQV9JTjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQluZXdyZWNzcmMgPSBNU05EX01BU0tfU1lOVEg7CisJCW1zbmRieXRlID0gSERFWEFSX1NFVF9TWU5USF9JTjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQluZXdyZWNzcmMgPSBNU05EX01BU0tfRElHSVRBTDsKKwkJbXNuZGJ5dGUgPSBIREVYQVJfU0VUX0RBVF9JTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNoYW5nZSAgPSBuZXdyZWNzcmMgIT0gY2hpcC0+cmVjc3JjOworCWlmIChjaGFuZ2UpIHsKKwkJY2hhbmdlID0gMDsKKwkJaWYgKCFzbmRfbXNuZF9zZW5kX3dvcmQoY2hpcCwgMCwgMCwgbXNuZGJ5dGUpKQorCQkJaWYgKCFzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9BVVhfUkVRKSkgeworCQkJCWNoaXAtPnJlY3NyYyA9IG5ld3JlY3NyYzsKKwkJCQljaGFuZ2UgPSAxOworCQkJfQorCX0KKwlyZXR1cm4gY2hhbmdlOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3B1dF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9tc25kICptc25kID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXJldHVybiBzbmRfbXNuZG1peF9zZXRfbXV4KG1zbmQsIHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAyOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKm1zbmQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG1zbmQtPmxlZnRfbGV2ZWxzW2FkZHJdICogMTAwOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIC89IDB4RkZGRjsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IG1zbmQtPnJpZ2h0X2xldmVsc1thZGRyXSAqIDEwMDsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAvPSAweEZGRkY7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIHVwZGF0ZV92b2xtKGEsIGIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGV3KChkZXYtPmxlZnRfbGV2ZWxzW2FdID4+IDEpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xMZWZ0KSAvIDB4ZmZmZiwJXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNiIyNMZWZ0KTsJCQlcCisJCXdyaXRldygoZGV2LT5yaWdodF9sZXZlbHNbYV0gPj4gMSkgICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCkgLyAweGZmZmYsIFwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjYiMjUmlnaHQpOwkJCVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSB1cGRhdGVfcG90bShkLCBzLCBhcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZWIoKGRldi0+bGVmdF9sZXZlbHNbZF0gPj4gOCkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI0xlZnQpOwkJCVwKKwkJd3JpdGViKChkZXYtPnJpZ2h0X2xldmVsc1tkXSA+PiA4KSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sUmlnaHQpIC8gMHhmZmZmLCBcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI1JpZ2h0KTsJCQlcCisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBhcikgPT0gMCkJCVwKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSB1cGRhdGVfcG90KGQsIHMsIGFyKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRlYihkZXYtPmxlZnRfbGV2ZWxzW2RdID4+IDgsCQkJXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNMZWZ0KTsJCQlcCisJCXdyaXRlYihkZXYtPnJpZ2h0X2xldmVsc1tkXSA+PiA4LAkJCVwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjUmlnaHQpOwkJCVwKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIGFyKSA9PSAwKQkJXAorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsJXAorCX0gd2hpbGUgKDApOworCisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfc2V0KHN0cnVjdCBzbmRfbXNuZCAqZGV2LCBpbnQgZCwgaW50IGxlZnQsIGludCByaWdodCkKK3sKKwlpbnQgYkxlZnQsIGJSaWdodDsKKwlpbnQgd0xlZnQsIHdSaWdodDsKKwlpbnQgdXBkYXRlbWFzdGVyID0gMDsKKworCWlmIChkID49IExFVkVMX0VOVFJJRVMpCisJCXJldHVybiAtRUlOVkFMOworCisJYkxlZnQgPSBsZWZ0ICogMHhmZiAvIDEwMDsKKwl3TGVmdCA9IGxlZnQgKiAweGZmZmYgLyAxMDA7CisKKwliUmlnaHQgPSByaWdodCAqIDB4ZmYgLyAxMDA7CisJd1JpZ2h0ID0gcmlnaHQgKiAweGZmZmYgLyAxMDA7CisKKwlkZXYtPmxlZnRfbGV2ZWxzW2RdID0gd0xlZnQ7CisJZGV2LT5yaWdodF9sZXZlbHNbZF0gPSB3UmlnaHQ7CisKKwlzd2l0Y2ggKGQpIHsKKwkJLyogbWFzdGVyIHZvbHVtZSB1bnNjYWxlZCBjb250cm9scyAqLworCWNhc2UgTVNORF9NSVhFUl9MSU5FOgkJCS8qIGxpbmUgcG90IGNvbnRyb2wgKi8KKwkJLyogc2NhbGVkIGJ5IElNSVggaW4gZGlnaXRhbCBtaXggKi8KKwkJd3JpdGViKGJMZWZ0LCBkZXYtPlNNQSArIFNNQV9iSW5Qb3RQb3NMZWZ0KTsKKwkJd3JpdGViKGJSaWdodCwgZGV2LT5TTUEgKyBTTUFfYkluUG90UG9zUmlnaHQpOworCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgSERFWEFSX0lOX1NFVF9QT1RTKSA9PSAwKQorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsKKwkJYnJlYWs7CisJY2FzZSBNU05EX01JWEVSX01JQzoJCQkvKiBtaWMgcG90IGNvbnRyb2wgKi8KKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kQ2xhc3NpYykKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiBzY2FsZWQgYnkgSU1JWCBpbiBkaWdpdGFsIG1peCAqLworCQl3cml0ZWIoYkxlZnQsIGRldi0+U01BICsgU01BX2JNaWNQb3RQb3NMZWZ0KTsKKwkJd3JpdGViKGJSaWdodCwgZGV2LT5TTUEgKyBTTUFfYk1pY1BvdFBvc1JpZ2h0KTsKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIEhERVhBUl9NSUNfU0VUX1BPVFMpID09IDApCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOworCQlicmVhazsKKwljYXNlIE1TTkRfTUlYRVJfVk9MVU1FOgkJLyogbWFzdGVyIHZvbHVtZSAqLworCQl3cml0ZXcod0xlZnQsIGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpOworCQl3cml0ZXcod1JpZ2h0LCBkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBNU05EX01JWEVSX0FVWDoJCQkvKiBhdXggcG90IGNvbnRyb2wgKi8KKwkJLyogc2NhbGVkIGJ5IG1hc3RlciB2b2x1bWUgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwkJLyogZGlnaXRhbCBjb250cm9scyAqLworCWNhc2UgTVNORF9NSVhFUl9TWU5USDoJCQkvKiBzeW50aCB2b2wgKGRzcCBtaXgpICovCisJY2FzZSBNU05EX01JWEVSX1BDTToJCQkvKiBwY20gdm9sIChkc3AgbWl4KSAqLworCWNhc2UgTVNORF9NSVhFUl9JTUlYOgkJCS8qIGlucHV0IG1vbml0b3IgKGRzcCBtaXgpICovCisJCS8qIHNjYWxlZCBieSBtYXN0ZXIgdm9sdW1lICovCisJCXVwZGF0ZW1hc3RlciA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVwZGF0ZW1hc3RlcikgeworCQkvKiB1cGRhdGUgbWFzdGVyIHZvbHVtZSBzY2FsZWQgY29udHJvbHMgKi8KKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9QQ00sIHdDdXJyUGxheVZvbCk7CisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfSU1JWCwgd0N1cnJJblZvbCk7CisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZFBpbm5hY2xlKQorCQkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9TWU5USCwgd0N1cnJNSGRyVm9sKTsKKwkJdXBkYXRlX3BvdG0oTVNORF9NSVhFUl9BVVgsIGJBdXhQb3RQb3MsIEhERVhBUl9BVVhfU0VUX1BPVFMpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kbWl4X3ZvbHVtZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKm1zbmQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGNoYW5nZSwgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCBsZWZ0LCByaWdodDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbGVmdCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICUgMTAxOworCXJpZ2h0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJSAxMDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwljaGFuZ2UgPSBtc25kLT5sZWZ0X2xldmVsc1thZGRyXSAhPSBsZWZ0CisJCXx8IG1zbmQtPnJpZ2h0X2xldmVsc1thZGRyXSAhPSByaWdodDsKKwlzbmRfbXNuZG1peF9zZXQobXNuZCwgYWRkciwgbGVmdCwgcmlnaHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbmQtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY2hhbmdlOworfQorCisKKyNkZWZpbmUgRFVNTVlfVk9MVU1FKHhuYW1lLCB4aW5kZXgsIGFkZHIpIFwKK3sgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhpbmRleCwgXAorICAuaW5mbyA9IHNuZF9tc25kbWl4X3ZvbHVtZV9pbmZvLCBcCisgIC5nZXQgPSBzbmRfbXNuZG1peF92b2x1bWVfZ2V0LCAucHV0ID0gc25kX21zbmRtaXhfdm9sdW1lX3B1dCwgXAorICAucHJpdmF0ZV92YWx1ZSA9IGFkZHIgfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbXNuZF9jb250cm9sc1tdID0geworRFVNTVlfVk9MVU1FKCJNYXN0ZXIgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9WT0xVTUUpLAorRFVNTVlfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9QQ00pLAorRFVNTVlfVk9MVU1FKCJBdXggVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9BVVgpLAorRFVNTVlfVk9MVU1FKCJMaW5lIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfTElORSksCitEVU1NWV9WT0xVTUUoIk1pYyBWb2x1bWUiLCAwLCBNU05EX01JWEVSX01JQyksCitEVU1NWV9WT0xVTUUoIk1vbml0b3IiLAkwLCBNU05EX01JWEVSX0lNSVgpLAoreworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkuaW5mbyA9IHNuZF9tc25kbWl4X2luZm9fbXV4LAorCS5nZXQgPSBzbmRfbXNuZG1peF9nZXRfbXV4LAorCS5wdXQgPSBzbmRfbXNuZG1peF9wdXRfbXV4LAorfQorfTsKKworCitpbnQgX19kZXZpbml0IHNuZF9tc25kbWl4X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGVycjsKKworCWlmIChzbmRfQlVHX09OKCFjaGlwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPm1peGVyX2xvY2spOworCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJNU05EIFBpbm5hY2xlIE1peGVyIik7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX21zbmRfY29udHJvbHMpOyBpZHgrKykKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3MShzbmRfbXNuZF9jb250cm9scyArIGlkeCwgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfbmV3KTsKKwordm9pZCBzbmRfbXNuZG1peF9zZXR1cChzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1cGRhdGVfcG90KE1TTkRfTUlYRVJfTElORSwgYkluUG90UG9zLCBIREVYQVJfSU5fU0VUX1BPVFMpOworCXVwZGF0ZV9wb3RtKE1TTkRfTUlYRVJfQVVYLCBiQXV4UG90UG9zLCBIREVYQVJfQVVYX1NFVF9QT1RTKTsKKwl1cGRhdGVfdm9sbShNU05EX01JWEVSX1BDTSwgd0N1cnJQbGF5Vm9sKTsKKwl1cGRhdGVfdm9sbShNU05EX01JWEVSX0lNSVgsIHdDdXJySW5Wb2wpOworCWlmIChkZXYtPnR5cGUgPT0gbXNuZFBpbm5hY2xlKSB7CisJCXVwZGF0ZV9wb3QoTVNORF9NSVhFUl9NSUMsIGJNaWNQb3RQb3MsIEhERVhBUl9NSUNfU0VUX1BPVFMpOworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX1NZTlRILCB3Q3Vyck1IZHJWb2wpOworCX0KK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRtaXhfc2V0dXApOworCitpbnQgc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKHN0cnVjdCBzbmRfbXNuZCAqZGV2LCBpbnQgcmVjc3JjKQoreworCWRldi0+cmVjc3JjID0gLTE7CisJcmV0dXJuIHNuZF9tc25kbWl4X3NldF9tdXgoZGV2LCByZWNzcmMpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wbDNzYTIuYyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKaW5kZXggYjg0OGQxMC4uZWY5NTI3OWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcGwzc2EyLmMKKysrIGIvc291bmQvaXNhL29wbDNzYTIuYwpAQCAtMTc5LDEyICsxNzksMTMgQEAKIAl1bnNpZ25lZCBjaGFyIHJlc3VsdDsKICNpZiAwCiAJb3V0YigweDFkLCBwb3J0KTsJLyogcGFzc3dvcmQgKi8KLQlwcmludGsoInJlYWQgWzB4JWx4XSA9IDB4JXhcbiIsIHBvcnQsIGluYihwb3J0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInJlYWQgWzB4JWx4XSA9IDB4JXhcbiIsIHBvcnQsIGluYihwb3J0KSk7CiAjZW5kaWYKIAlvdXRiKHJlZywgY2hpcC0+cG9ydCk7CS8qIHJlZ2lzdGVyICovCiAJcmVzdWx0ID0gaW5iKGNoaXAtPnBvcnQgKyAxKTsKICNpZiAwCi0JcHJpbnRrKCJyZWFkIFsweCVseF0gPSAweCV4IFsweCV4XVxuIiwgcG9ydCwgcmVzdWx0LCBpbmIocG9ydCkpOworCXByaW50ayhLRVJOX0RFQlVHICJyZWFkIFsweCVseF0gPSAweCV4IFsweCV4XVxuIiwKKwkgICAgICAgcG9ydCwgcmVzdWx0LCBpbmIocG9ydCkpOwogI2VuZGlmCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIzMyw3ICsyMzQsMTAgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IGdyYWIgcG9ydCAweCVseFxuIiwgcG9ydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCS8vIHNuZF9wcmludGsoIlJFRyAwQSA9IDB4JXhcbiIsIHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgMHgwYSkpOworCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJSRUcgMEEgPSAweCV4XG4iLAorCQkgICBzbmRfb3BsM3NhMl9yZWFkKGNoaXAsIDB4MGEpKTsKKwkqLwogCWNoaXAtPnZlcnNpb24gPSAwOwogCXRtcCA9IHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgT1BMM1NBMl9NSVNDKTsKIAlpZiAodG1wID09IDB4ZmYpIHsKQEAgLTYxOSwyNSArNjIzLDI4IEBACiB7CiAJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWlmIChjaGlwLT5pcnEgPj0gMCkKLQkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNhcmQpOwogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX3BvcnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfb3BsM3NhMl9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfb3BsM3NhMl9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9vcGwzc2EyICpjaGlwOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9vcGwzc2EyKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfb3BsM3NhMiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiT1BMM1NBMiIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJZYW1haGEgT1BMMy1TQTIiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiWWFtYWhhIE9QTDMtU0EiKTsKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAJY2hpcC0+aXJxID0gLTE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX29wbDNzYTJfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3BsM3NhMl9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC03MjksOSArNzM2LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC03OTUsOSArODAyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gc25kX29wbDNzYTJfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CkBAIC04NzYsOSArODgzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwppbmRleCA0NDA3NTVjLi4wMmUzMGQ3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCkBAIC0xMjI4LDkgKzEyMjgsMTAgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CiAKLQlpZiAoIShjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCi0JCQkJICBzaXplb2Yoc3RydWN0IHNuZF9taXJvKSkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX21pcm8pLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfbWlyb19mcmVlOwogCW1pcm8gPSBjYXJkLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCAxOTcwNmIwLi41Y2Q1NTUzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgaGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhhcmR3YXJlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKQEAgLTMzNiw3ICszMzYsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CkBAIC00MTIsNyArNDEyLDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDMwLDcgKzQzMCw4IEBACiAJCXdzc19iYXNlX2JpdHMgPSAweDAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsIGNoaXAtPndzc19iYXNlKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPndzc19iYXNlKTsKIAkJZ290byBfX3NraXBfYmFzZTsKIAl9CiAJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygxKSwgd3NzX2Jhc2VfYml0cyA8PCA0LCAweDMwKTsKQEAgLTQ1NSw3ICs0NTYsNyBAQAogCQlpcnFfYml0cyA9IDB4MDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBpcnEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmlycSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgaXJxICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5pcnEpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCkBAIC00NzAsMTMgKzQ3MSwxNCBAQAogCQlkbWFfYml0cyA9IDB4MDM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBkbWExICMgJWQgbm90IHZhbGlkXG4iLCBjaGlwLT5kbWExKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBkbWExICMgJWQgbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+ZG1hMSk7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAKICNpZiBkZWZpbmVkKENTNDIzMSkgfHwgZGVmaW5lZChPUFRpOTNYKQogCWlmIChjaGlwLT5kbWExID09IGNoaXAtPmRtYTIpIHsKLQkJc25kX3ByaW50aygiZG9uJ3Qgd2FudCB0byBzaGFyZSBkbWFzXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZG9uJ3Qgd2FudCB0byBzaGFyZSBkbWFzXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTQ4NSw3ICs0ODcsOCBAQAogCWNhc2UgMToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmRtYTIpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGRtYTIgIyAlZCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT5kbWEyKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIAlkbWFfYml0cyB8PSAweDA0OwpAQCAtNTE2LDcgKzUxOSw4IEBACiAJCQltcHVfcG9ydF9iaXRzID0gMHgwMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc25kX3ByaW50aygiTVBVLTQwMSBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgIk1QVS00MDEgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsCiAJCQkJY2hpcC0+bXB1X3BvcnQpOwogCQkJZ290byBfX3NraXBfbXB1OwogCQl9CkBAIC01MzUsNyArNTM5LDcgQEAKIAkJCW1wdV9pcnFfYml0cyA9IDB4MDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXNuZF9wcmludGsoIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIk1QVS00MDEgaXJxICMgJWQgbm90IHZhbGlkXG4iLAogCQkJCWNoaXAtPm1wdV9pcnEpOwogCQkJZ290byBfX3NraXBfbXB1OwogCQl9CkBAIC03MjYsNyArNzMwLDcgQEAKIAlpZiAoY2hpcC0+d3NzX2Jhc2UgPT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCWNoaXAtPndzc19iYXNlID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaW9wb3J0KHBvc3NpYmxlX3BvcnRzLCA0KTsKIAkJaWYgKGNoaXAtPndzc19iYXNlIDwgMCkgewotCQkJc25kX3ByaW50aygidW5hYmxlIHRvIGZpbmQgYSBmcmVlIFdTUyBwb3J0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBXU1MgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQpAQCAtODE1LDE0ICs4MTksOCBAQAogCQkJCSAgIGNoaXAtPmZtX3BvcnQsIGNoaXAtPmZtX3BvcnQgKyA0IC0gMSk7CiAJCX0KIAkJaWYgKG9wbDMpIHsKLSNpZmRlZiBDUzQyMzEKLQkJCWNvbnN0IGludCB0MWRldiA9IDE7Ci0jZWxzZQotCQkJY29uc3QgaW50IHQxZGV2ID0gMDsKLSNlbmRpZgotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX3RpbWVyX25ldyhvcGwzLCB0MWRldiwgdDFkZXYrMSkpIDwgMCkKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsICZzeW50aCkpIDwgMCkKKwkJCWVycm9yID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsICZzeW50aCk7CisJCQlpZiAoZXJyb3IgPCAwKQogCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KQEAgLTgzMCwxNSArODI4LDE4IEBACiAJcmV0dXJuIHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfb3B0aTl4eF9jYXJkX25ldyh2b2lkKQorc3RhdGljIGludCBzbmRfb3B0aTl4eF9jYXJkX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzbmRfb3B0aTl4eCkpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfb3B0aTl4eCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9vcHRpOXh4X2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKQEAgLTg5NywxNSArODk4LDE1IEBACiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlpZiAoZG1hMiA9PSBTTkRSVl9BVVRPX0RNQSkgewogCQlpZiAoKGRtYTIgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hMnNbZG1hMSAlIDRdKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMlxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogI2VuZGlmCiAKLQljYXJkID0gc25kX29wdGk5eHhfY2FyZF9uZXcoKTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfb3B0aTl4eF9kZXRlY3QoY2FyZCwgY2FyZC0+cHJpdmF0ZV9kYXRhKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC05NTAsOSArOTUxLDkgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoISBpc2FwbnApCiAJCXJldHVybiAtRU5PREVWOwotCWNhcmQgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX29wdGk5eHhfY2FyZF9uZXcoJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaHcgPSBzbmRfY2FyZF9vcHRpOXh4X3BucChjaGlwLCBwY2FyZCwgcGlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lczk2OC5jIGIvc291bmQvaXNhL3NiL2VzOTY4LmMKaW5kZXggYzhjOGUyMS4uY2FmYzNhNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VzOTY4LmMKKysrIGIvc291bmQvaXNhL3NiL2VzOTY4LmMKQEAgLTEwOCw5ICsxMDgsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9jYXJkX2VzOTY4ICphY2FyZDsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9lczk2OCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2VzOTY4KSwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGVycm9yID0gc25kX2NhcmRfZXM5NjhfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTYuYyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKaW5kZXggMmMyMDFmNy4uNTE5YzM2MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTYuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCkBAIC0zMjQsMTQgKzMyNCwxOCBAQAogI2RlZmluZSBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KQkJMAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9zYjE2X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9zYjE2X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9zYjE2KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3NiMTYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NiMTZfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2IxNl9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC00ODksOSArNDkzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJLyogbm9uLVBuUCBGTSBwb3J0IGFkZHJlc3MgaXMgaGFyZHdpcmVkIHdpdGggYmFzZSBwb3J0IGFkZHJlc3MgKi8KQEAgLTYxMCw5ICs2MTQsOSBAQAogCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7CiAJCWlmICghZW5hYmxlW2Rldl0gfHwgIWlzYXBucFtkZXZdKQogCQkJY29udGludWU7Ci0JCWNhcmQgPSBzbmRfc2IxNl9jYXJkX25ldyhkZXYpOwotCQlpZiAoISBjYXJkKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXJlcyA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CiAJCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwogCQlpZiAoKHJlcyA9IHNuZF9jYXJkX3NiMTZfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwIHx8CiAJCSAgICAocmVzID0gc25kX3NiMTZfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2I4LmMgYi9zb3VuZC9pc2Evc2Ivc2I4LmMKaW5kZXggZWEwNjg3Ny4uM2NkNTdlZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiOC5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjguYwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfc2I4KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfc2I4KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9zYjhfZnJlZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwppbmRleCA0MDZhNDMxLi40NzUyMjBiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2R0MDE5eF9pbnB1dF9zd19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1s1XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGV4dHNbNV0gPSB7CiAJCSJDRCIsICJNaWMiLCAiTGluZSIsICJTeW50aCIsICJNYXN0ZXIiCiAJfTsKIApAQCAtMjY5LDEyICsyNjksNzMgQEAKIH0KIAogLyoKKyAqIEFMUzQwMDAgbW9ubyByZWNvcmRpbmcgY29udHJvbCBzd2l0Y2gKKyAqLworCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1szXSA9IHsKKwkJIkwgY2hhbiBvbmx5IiwgIlIgY2hhbiBvbmx5IiwgIkwgY2gvMiArIFIgY2gvMiIKKwl9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAyKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMjsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc2IgKnNiID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBvdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJb3ZhbCA9IHNuZF9zYm1peGVyX3JlYWQoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPj49IDY7CisJaWYgKG92YWwgPiAyKQorCQlvdmFsID0gMjsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBvdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc2IgKnNiID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoYW5nZTsKKwl1bnNpZ25lZCBjaGFyIG52YWwsIG92YWw7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pcnFzYXZlKCZzYi0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCW92YWwgPSBzbmRfc2JtaXhlcl9yZWFkKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCk7CisKKwludmFsID0gKG92YWwgJiB+KDMgPDwgNikpCisJICAgICB8ICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdIDw8IDYpOworCWNoYW5nZSA9IG52YWwgIT0gb3ZhbDsKKwlpZiAoY2hhbmdlKQorCQlzbmRfc2JtaXhlcl93cml0ZShzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIG52YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworLyoKICAqIFNCUFJPIGlucHV0IG11bHRpcGxleGVyCiAgKi8KIAogc3RhdGljIGludCBzbmRfc2I4bWl4ZXJfaW5mb19tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzWzNdID0geworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1szXSA9IHsKIAkJIk1pYyIsICJDRCIsICJMaW5lIgogCX07CiAKQEAgLTQ0Miw2ICs1MDMsMTIgQEAKIAkJCS5nZXQgPSBzbmRfZHQwMTl4X2lucHV0X3N3X2dldCwKIAkJCS5wdXQgPSBzbmRfZHQwMTl4X2lucHV0X3N3X3B1dCwKIAkJfSwKKwkJW1NCX01JWF9NT05PX0NBUFRVUkVfQUxTNEtdID0geworCQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCQkuaW5mbyA9IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfaW5mbywKKwkJCS5nZXQgPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX2dldCwKKwkJCS5wdXQgPSBzbmRfYWxzNGtfbW9ub19jYXB0dXJlX3JvdXRlX3B1dCwKKwkJfSwKIAl9OwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKIAlpbnQgZXJyOwpAQCAtNjM2LDYgKzcwMyw4IEBACiAJfTsKIAogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfZHQwMTl4X2NvbnRyb2xzW10gPSB7CisJLyogQUxTNDAwMCBiZWxvdyBoYXMgc29tZSBwYXJ0cyB3aGljaCB3ZSBtaWdodCBiZSBsYWNraW5nLAorCSAqIGUuZy4gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoIC0gY2hlY2sgaXQhICovCiAJJnNuZF9kdDAxOXhfY3RsX21hc3Rlcl9wbGF5X3ZvbCwKIAkmc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfdm9sLAogCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3ZvbCwKQEAgLTY2NiwxOCArNzM1LDIxIEBACiAvKgogICogQUxTNDAwMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi0vKiBGSVhNRTogU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwgbmVlZHMgb3V0cHV0IHNlbGVjdCBjdHJsISAqLwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19wbGF5YmFja19zd2l0Y2ggPQogCVNCX1NJTkdMRSgiTWFzdGVyIE1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwsIDUsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0KLQlTQl9TSU5HTEUoIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNiwgMHgwMyk7Ci0vKiBGSVhNRTogbW9ubyBwbGF5YmFjayBzd2l0Y2ggYWxzbyBhdmFpbGFibGUgb24gRFQwMTlYPyAqLworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSA9IHsKKwkJLm5hbWUgPSAiTWFzdGVyIE1vbm8gQ2FwdHVyZSBSb3V0ZSIsCisJCS50eXBlID0gU0JfTUlYX01PTk9fQ0FQVFVSRV9BTFM0SworCX07CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoID0KIAlTQl9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDAsIDEpOwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCA9CiAJU0JfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDAsIDB4MDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taXhlcl9sb29wYmFjayA9Ci0JU0JfU0lOR0xFKCJBbmFsb2cgTG9vcGJhY2siLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrID0KKwlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjayA9CisJU0JfU0lOR0xFKCJEaWdpdGFsIExvb3BiYWNrIFN3aXRjaCIsCisJCSAgU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTiwgNywgMHgwMSk7CiAvKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCiAgKiBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBpZGVudGlmeSB3aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHdoYXQgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCA9CkBAIC02OTQsNiArNzY2LDkgQEAKIAlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBXaWRlIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCAwLCAweDBmKTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCIzRCBQb3dlck9mZiBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDQsIDB4MDEpOworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF8zZGJfZnJlcV9jb250cm9sX3N3aXRjaCA9CisJU0JfU0lOR0xFKCJNYXN0ZXIgUGxheWJhY2sgOGtIeiAvIDIwa0h6IExQRiBTd2l0Y2giLAorCQkgIFNCX0FMUzQwMDBfRk1EQUMsIDUsIDB4MDEpOwogI2lmZGVmIE5PVF9BVkFJTEFCTEUKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfZm1kYWMgPQogCVNCX1NJTkdMRSgiRk1EQUMgU3dpdGNoIChPcHRpb24gPykiLCBTQl9BTFM0MDAwX0ZNREFDLCAwLCAweDAxKTsKQEAgLTcwMiwzNSArNzc3LDM3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfYWxzNDAwMF9jb250cm9sc1tdID0gewotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlLAotCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX21pY19jYXB0dXJlX3JvdXRlLAotCSZzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QsCi0JJnNuZF9zYjE2X2N0bF9hdXRvX21pY19nYWluLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfcGNfc3BlYWtlcl92b2wsCi0JJnNuZF9zYjE2X2N0bF9jYXB0dXJlX3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BsYXlfdm9sLAotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwKLQkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfbG9vcGJhY2ssCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3JhdGlvLAotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2ZyZXEsCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXksCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcG93ZXJvZmZfc3dpdGNoLAorCQkJCQkJLyogQUxTNDAwMGEuUERGIHJlZ3MgcGFnZSAqLworCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAkJLyogTVgzMC8zMSAxMiAqLworCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwJCS8qIE1YMzIvMzMgMTIgKi8KKwkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAkJLyogTVgzNC8zNSAxMi8xMyAqLworCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwJCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCQkvKiBNWDM2LzM3IDEzICovCisJJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAkJLyogTVgzOC8zOSAxMyAqLworCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KKwkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAkvKiBNWDREICAgIDE2ICovCisJJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCQkvKiBNWDNBICAgIDEzICovCisJJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwJCS8qIE1YM0IgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAkJLyogTVgzRi80MCAxNSAqLworCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCQkJLyogTVg0MS80MiAxNSAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLCAvKiBNWDRDIDE2ICovCisJJnNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwgLyogTVg0QiAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCisJJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2ssIC8qIE1YNEQgICAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2ssIC8qIENSMyAgICAyMSAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywJCSAvKiBNWDUwICAgMTcgKi8KKwkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAkJIC8qIE1YNTAgICAxNyAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAkJIC8qIE1YNTEgICAxOCAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwJLyogTVg1MSAgICAxOCAqLworCSZzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2gsCS8qIE1YNEYgICAgMTcgKi8KICNpZmRlZiBOT1RfQVZBSUxBQkxFCiAJJnNuZF9hbHM0MDAwX2N0bF9mbWRhYywKIAkmc25kX2FsczQwMDBfY3RsX3Fzb3VuZCwKQEAgLTkwNSwxMyArOTgyLDE0IEBACiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBhbHM0MDAwX3NhdmVkX3JlZ3NbXSA9IHsKKwkvKiBwbGVhc2UgdmVyaWZ5IGluIGRzaGVldCB3aGV0aGVyIHJlZ3MgdG8gYmUgYWRkZWQKKwkgICBhcmUgYWN0dWFsbHkgcmVhbCBIL1cgb3IganVzdCBkdW1teSAqLwogCVNCX0RTUDRfTUFTVEVSX0RFViwgU0JfRFNQNF9NQVNURVJfREVWICsgMSwKIAlTQl9EU1A0X09VVFBVVF9TVywKIAlTQl9EU1A0X1BDTV9ERVYsIFNCX0RTUDRfUENNX0RFViArIDEsCiAJU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULAogCVNCX0RTUDRfU1lOVEhfREVWLCBTQl9EU1A0X1NZTlRIX0RFViArIDEsCiAJU0JfRFNQNF9DRF9ERVYsIFNCX0RTUDRfQ0RfREVWICsgMSwKLQlTQl9EU1A0X01JQ19BR0MsCiAJU0JfRFNQNF9NSUNfREVWLAogCVNCX0RTUDRfU1BFQUtFUl9ERVYsCiAJU0JfRFNQNF9JR0FJTl9ERVYsIFNCX0RTUDRfSUdBSU5fREVWICsgMSwKQEAgLTkxOSw4ICs5OTcsMTAgQEAKIAlTQl9EVDAxOVhfT1VUUFVUX1NXMiwKIAlTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwKIAlTQl9BTFM0MDAwX01JQ19JTl9HQUlOLAorCVNCX0FMUzQwMDBfRk1EQUMsCiAJU0JfQUxTNDAwMF8zRF9TTkRfRlgsCiAJU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLAorCVNCX0FMUzQwMDBfQ1IzX0NPTkZJR1VSQVRJT04sCiB9OwogCiBzdGF0aWMgdm9pZCBzYXZlX21peGVyKHN0cnVjdCBzbmRfc2IgKmNoaXAsIHVuc2lnbmVkIGNoYXIgKnJlZ3MsIGludCBudW1fcmVncykKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYzYwMDAuYyBiL3NvdW5kL2lzYS9zYzYwMDAuYwppbmRleCBjYTM1OTI0Li43ODIwMTA2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2M2MDAwLmMKKysrIGIvc291bmQvaXNhL3NjNjAwMC5jCkBAIC00ODksOSArNDg5LDkgQEAKIAljaGFyIF9faW9tZW0gKnZtc3NfcG9ydDsKIAogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CiAJCXhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CkBAIC01NzYsMTAgKzU3Niw2IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JXgtMHgleCA/XG4iLAogCQkJICAgMHgzODgsIDB4Mzg4ICsgMik7CiAJfSBlbHNlIHsKLQkJZXJyID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIDAsIDEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX3VubWFwMjsKLQogCQllcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnJfdW5tYXAyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NnYWxheHkuYyBiL3NvdW5kL2lzYS9zZ2FsYXh5LmMKaW5kZXggMmM3NTAzYi4uNmZlMjdiOSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NnYWxheHkuYworKysgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCkBAIC0yNDMsOSArMjQzLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF93c3MgKmNoaXA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXhpcnEgPSBpcnFbZGV2XTsKIAlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NzY2FwZS5jIGIvc291bmQvaXNhL3NzY2FwZS5jCmluZGV4IDQ4YTE2ZDguLjY2MTg3MTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zc2NhcGUuYworKysgYi9zb3VuZC9pc2Evc3NjYXBlLmMKQEAgLTg5LDkgKzg5LDYgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgTVBVNDAxX0lPKGkpICAgICAoKGkpICsgMCkKLSNkZWZpbmUgTUlESV9EQVRBX0lPKGkpICAoKGkpICsgMCkKLSNkZWZpbmUgTUlESV9DVFJMX0lPKGkpICAoKGkpICsgMSkKICNkZWZpbmUgSE9TVF9DVFJMX0lPKGkpICAoKGkpICsgMikKICNkZWZpbmUgSE9TVF9EQVRBX0lPKGkpICAoKGkpICsgMykKICNkZWZpbmUgT0RJRV9BRERSX0lPKGkpICAoKGkpICsgNCkKQEAgLTEyOSw5ICsxMjYsNiBAQAogI2RlZmluZSBETUFfOEJJVCAgMHg4MAogCiAKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX01TQiAgICAweDE2Ci0jZGVmaW5lIEFEMTg0NV9GUkVRX1NFTF9MU0IgICAgMHgxNwotCiBlbnVtIGNhcmRfdHlwZSB7CiAJU1NDQVBFLAogCVNTQ0FQRV9QTlAsCkBAIC0xNDEsOCArMTM1LDYgQEAKIHN0cnVjdCBzb3VuZHNjYXBlIHsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW9fYmFzZTsKLQl1bnNpZ25lZCB3c3NfYmFzZTsKLQlpbnQgY29kZWNfdHlwZTsKIAlpbnQgaWNfdHlwZTsKIAllbnVtIGNhcmRfdHlwZSB0eXBlOwogCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOwpAQCAtMzMwLDcgKzMyMiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeV9tcHU0MDEoY29uc3Qgc3RydWN0IHNuZF9tcHU0MDEgKiBtcHUpCiB7Ci0JcmV0dXJuICgoaW5iKE1JRElfQ1RSTF9JTyhtcHUtPnBvcnQpKSAmIDB4YzApID09IDB4ODApOworCXJldHVybiAoKGluYihNUFU0MDFDKG1wdSkpICYgMHhjMCkgPT0gMHg4MCk7CiB9CiAKIC8qCkBAIC0zMzgsNyArMzMwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGluaXRpYWxpc2VfbXB1NDAxKGNvbnN0IHN0cnVjdCBzbmRfbXB1NDAxICogbXB1KQogewotCW91dGIoMCwgTUlESV9EQVRBX0lPKG1wdS0+cG9ydCkpOworCW91dGIoMCwgTVBVNDAxRChtcHUpKTsKIH0KIAogLyoKQEAgLTM5NiwyMCArMzg4LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgb2JwX3N0YXJ0dXBfYWNrKHN0cnVjdCBzb3VuZHNjYXBlICpzLCB1bnNpZ25lZCB0aW1lb3V0KQogewotCXdoaWxlICh0aW1lb3V0ICE9IDApIHsKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisKKwlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgeDsKIAotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQl4ID0gaW5iKEhPU1RfREFUQV9JTyhzLT5pb19iYXNlKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKCh4ICYgMHhmZSkgPT0gMHhmZSkKIAkJCXJldHVybiAxOwogCi0JCS0tdGltZW91dDsKLQl9IC8qIHdoaWxlICovCisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIzLDIwICs0MTUsMjAgQEAKICAqLwogc3RhdGljIGludCBob3N0X3N0YXJ0dXBfYWNrKHN0cnVjdCBzb3VuZHNjYXBlICpzLCB1bnNpZ25lZCB0aW1lb3V0KQogewotCXdoaWxlICh0aW1lb3V0ICE9IDApIHsKKwl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisKKwlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgeDsKIAotCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCQl4ID0gaW5iKEhPU1RfREFUQV9JTyhzLT5pb19iYXNlKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHggPT0gMHhmZSkKIAkJCXJldHVybiAxOwogCi0JCS0tdGltZW91dDsKLQl9IC8qIHdoaWxlICovCisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTMyLDEwICs1MjQsMTAgQEAKIAkgKiBnaXZlIGl0IDUgc2Vjb25kcyAobWF4KSAuLi4KIAkgKi8KIAlyZXQgPSAwOwotCWlmICghb2JwX3N0YXJ0dXBfYWNrKHMsIDUpKSB7CisJaWYgKCFvYnBfc3RhcnR1cF9hY2socywgNTAwMCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyByZXNwb25zZSBmcm9tIG9uLWJvYXJkIHByb2Nlc3NvciBhZnRlciB1cGxvYWRcbiIpOwogCQlyZXQgPSAtRUFHQUlOOwotCX0gZWxzZSBpZiAoIWhvc3Rfc3RhcnR1cF9hY2socywgNSkpIHsKKwl9IGVsc2UgaWYgKCFob3N0X3N0YXJ0dXBfYWNrKHMsIDUwMDApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogU291bmRTY2FwZSBmYWlsZWQgdG8gaW5pdGlhbGlzZVxuIik7CiAJCXJldCA9IC1FQUdBSU47CiAJfQpAQCAtNzMyLDEzICs3MjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXNldF9ob3N0X21vZGVfdW5zYWZlKHMtPmlvX2Jhc2UpOwotCi0JaWYgKGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgQ01EX0dFVF9NSURJX1ZPTCwgMTAwKSkgewotCQl1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaG9zdF9yZWFkX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIDEwMCk7Ci0JfQotCi0Jc2V0X21pZGlfbW9kZV91bnNhZmUocy0+aW9fYmFzZSk7CisJdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHMtPm1pZGlfdm9sOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc3Myw2ICs3NTksNyBAQAogCWNoYW5nZSA9IChob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9TRVRfTUlESV9WT0wsIDEwMCkKIAkgICAgICAgICAgJiYgaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCAoKHVuc2lnbmVkIGNoYXIpIHVjdGwtPnZhbHVlLmludGVnZXIuIHZhbHVlWzBdKSAmIDEyNywgMTAwKQogCSAgICAgICAgICAmJiBob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsIENNRF9YWFhfTUlESV9WT0wsIDEwMCkpOworCXMtPm1pZGlfdm9sID0gKHVuc2lnbmVkIGNoYXIpIHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxMjc7CiAgICAgICBfX3NraXBfY2hhbmdlOgogCiAJLyoKQEAgLTgxNSwxMiArODAyLDExIEBACiAgKiBQZXJmb3JtIGNlcnRhaW4gYXJjYW5lIHBvcnQtY2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZXJlCiAgKiBpcyBhIFNvdW5kU2NhcGUgYm9hcmQgbHVya2luZyBiZWhpbmQgdGhlIGdpdmVuIHBvcnRzLgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkZXRlY3Rfc3NjYXBlKHN0cnVjdCBzb3VuZHNjYXBlICpzKQorc3RhdGljIGludCBfX2RldmluaXQgZGV0ZWN0X3NzY2FwZShzdHJ1Y3Qgc291bmRzY2FwZSAqcywgbG9uZyB3c3NfaW8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBkOwogCWludCByZXR2YWwgPSAwOwotCWludCBjb2RlYyA9IHMtPndzc19iYXNlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIApAQCAtODM2LDEzICs4MjIsMTEgQEAKIAlpZiAoKGQgJiAweDgwKSAhPSAwKQogCQlnb3RvIF9kb25lOwogCi0JaWYgKGQgPT0gMCkgewotCQlzLT5jb2RlY190eXBlID0gMTsKKwlpZiAoZCA9PSAwKQogCQlzLT5pY190eXBlID0gSUNfT0RJRTsKLQl9IGVsc2UgaWYgKChkICYgMHg2MCkgIT0gMCkgewotCQlzLT5jb2RlY190eXBlID0gMjsKKwllbHNlIGlmICgoZCAmIDB4NjApICE9IDApCiAJCXMtPmljX3R5cGUgPSBJQ19PUFVTOwotCX0gZWxzZQorCWVsc2UKIAkJZ290byBfZG9uZTsKIAogCW91dGIoMHhmYSwgT0RJRV9BRERSX0lPKHMtPmlvX2Jhc2UpKTsKQEAgLTg2MiwxMCArODQ2LDEwIEBACiAJc3NjYXBlX3dyaXRlX3Vuc2FmZShzLT5pb19iYXNlLCBHQV9ITUNUTF9SRUcsIGQgfCAweGMwKTsKIAogCWlmIChzLT50eXBlID09IFNTQ0FQRV9WSVZPKQotCQljb2RlYyArPSA0OworCQl3c3NfaW8gKz0gNDsKIAkvKiB3YWl0IGZvciBXU1MgY29kZWMgKi8KIAlmb3IgKGQgPSAwOyBkIDwgNTAwOyBkKyspIHsKLQkJaWYgKChpbmIoY29kZWMpICYgMHg4MCkgPT0gMCkKKwkJaWYgKChpbmIod3NzX2lvKSAmIDB4ODApID09IDApCiAJCQlicmVhazsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQltc2xlZXAoMSk7CkBAIC05NTUsODIgKzkzOSw2IEBACiAKIAogLyoKLSAqIE92ZXJyaWRlIGZvciB0aGUgQ1M0MjMxIHBsYXliYWNrIGZvcm1hdCBmdW5jdGlvbi4KLSAqIFRoZSBBRDE4NDUgaGFzIG11Y2ggc2ltcGxlciBmb3JtYXQgYW5kIHJhdGUgc2VsZWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBhZDE4NDVfcGxheWJhY2tfZm9ybWF0KHN0cnVjdCBzbmRfd3NzICpjaGlwLAotCQkJCSAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgZm9ybWF0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0KLQkvKgotCSAqIFRoZSBBRDE4NDUgY2FuJ3QgaGFuZGxlIHNhbXBsZSBmcmVxdWVuY2llcwotCSAqIG91dHNpZGUgb2YgNCBrSFogdG8gNTAga0haCi0JICovCi0JaWYgKHJhdGUgPiA1MDAwMCkKLQkJcmF0ZSA9IDUwMDAwOwotCWVsc2UgaWYgKHJhdGUgPCA0MDAwKQotCQlyYXRlID0gNDAwMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgcGxheWJhY2sgc3RyZWFtLgotCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQotCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgotCSAqIHJlZ2lzdGVyIGlzIHNldC4KLQkgKiAKLQkgKiBOT1RFOiBXZSBzZWVtIHRvIG5lZWQgdG8gd3JpdGUgdG8gdGhlIE1TQiBiZWZvcmUgdGhlIExTQgotCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgotCSAqLwotCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAoZm9ybWF0ICYgMHhmMCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9NU0IsICh1bnNpZ25lZCBjaGFyKSAocmF0ZSA+PiA4KSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX0xTQiwgKHVuc2lnbmVkIGNoYXIpIHJhdGUpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIE92ZXJyaWRlIGZvciB0aGUgQ1M0MjMxIGNhcHR1cmUgZm9ybWF0IGZ1bmN0aW9uLiAKLSAqIFRoZSBBRDE4NDUgaGFzIG11Y2ggc2ltcGxlciBmb3JtYXQgYW5kIHJhdGUgc2VsZWN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBhZDE4NDVfY2FwdHVyZV9mb3JtYXQoc3RydWN0IHNuZF93c3MgKmNoaXAsCi0JCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHVuc2lnbmVkIGNoYXIgZm9ybWF0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0KLQkvKgotCSAqIFRoZSBBRDE4NDUgY2FuJ3QgaGFuZGxlIHNhbXBsZSBmcmVxdWVuY2llcyAKLQkgKiBvdXRzaWRlIG9mIDQga0haIHRvIDUwIGtIWgotCSAqLwotCWlmIChyYXRlID4gNTAwMDApCi0JCXJhdGUgPSA1MDAwMDsKLQllbHNlIGlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KLQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKLQkgKiB0aGUgQ0FQVFVSRV9FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgotCSAqIHJlZ2lzdGVyIGlzIHNldC4KLQkgKgotCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCi0JICogICAgICAgdG8gZ2V0IHRoZSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuCi0JICovCi0Jc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX1JFQ19GT1JNQVQsIChmb3JtYXQgJiAweGYwKSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX01TQiwgKHVuc2lnbmVkIGNoYXIpIChyYXRlID4+IDgpKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTFNCLCAodW5zaWduZWQgY2hhcikgcmF0ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotfQotCi0vKgogICogQ3JlYXRlIGFuIEFEMTg0NSBQQ00gc3ViZGV2aWNlIG9uIHRoZSBTb3VuZFNjYXBlLiBUaGUgQUQxODQ1CiAgKiBpcyB2ZXJ5IG11Y2ggbGlrZSBhIENTNDIzMSwgd2l0aCBhIGZldyBleHRyYSBiaXRzLiBXZSB3aWxsCiAgKiB0cnkgdG8gc3VwcG9ydCBhdCBsZWFzdCBzb21lIG9mIHRoZSBleHRyYSBiaXRzIGJ5IG92ZXJyaWRpbmcKQEAgLTEwNTUsMTEgKzk2Myw2IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXN0cnVjdCBzbmRfcGNtICpwY207CiAKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX0VOQUJMRSAgMHgwOAotCi0jZGVmaW5lIEFEMTg0NV9QV1JfRE9XTl9DVFJMICAgMHgxYgotI2RlZmluZSBBRDE4NDVfQ1JZU19DTE9DS19TRUwgIDB4MWQKLQogLyoKICAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IGlzIHNldAogICogYnkgdGhlIGxvd2xldmVsIGRyaXZlciAuLi4KQEAgLTEwNzQsNyArOTc3LDYgQEAKICAqLwogCiAJCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKLQkJCWludCB2YWw7CiAJCQkvKgogCQkJICogVGhlIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBvbiB0aGUgU291bmRTY2FwZSBtdXN0CiAJCQkgKiBiZSAxNC4zMTgxOCBNSHosIGJlY2F1c2Ugd2UgbXVzdCBzZXQgdGhpcyByZWdpc3RlcgpAQCAtMTA4MiwyMiArOTg0LDEwIEBACiAJCQkgKi8KIAkJCXNuZF93c3NfbWNlX3VwKGNoaXApOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfQ1JZU19DTE9DS19TRUwsIDB4MjApOworCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0NMT0NLLCAweDIwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCQlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCi0JCQkvKgotCQkJICogTW9yZSBjdXN0b20gY29uZmlndXJhdGlvbjoKLQkJCSAqIGEpIHNlbGVjdCAibW9kZSAyIiBhbmQgcHJvdmlkZSBhIGN1cnJlbnQgZHJpdmUgb2YgOG1BCi0JCQkgKiBiKSBlbmFibGUgZnJlcXVlbmN5IHNlbGVjdGlvbiAoZm9yIGNhcHR1cmUvcGxheWJhY2spCi0JCQkgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX01JU0NfSU5GTywKLQkJCQkgICAgQ1M0MjMxX01PREUyIHwgMHgxMCk7Ci0JCQl2YWwgPSBzbmRfd3NzX2luKGNoaXAsIEFEMTg0NV9QV1JfRE9XTl9DVFJMKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9QV1JfRE9XTl9DVFJMLAotCQkJCSAgICB2YWwgfCBBRDE4NDVfRlJFUV9TRUxfRU5BQkxFKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCX0KIAogCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKQEAgLTExMTMsMTEgKzEwMDMsMTMgQEAKIAkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwogCQkJZ290byBfZXJyb3I7CiAJCX0KLQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gdGltZXIgZGV2aWNlICIKLQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwotCQkJZ290byBfZXJyb3I7CisJCWlmIChjaGlwLT5oYXJkd2FyZSAhPSBXU1NfSFdfQUQxODQ4KSB7CisJCQllcnIgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDAsIE5VTEwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHRpbWVyIGRldmljZSAiCisJCQkJCQkgICAgImZvciBBRDE4NDUgY2hpcFxuIik7CisJCQkJZ290byBfZXJyb3I7CisJCQl9CiAJCX0KIAogCQlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7CkBAIC0xMTI4LDggKzEwMjAsNiBAQAogCQkJCQkJICAgICJNSURJIG1peGVyIGNvbnRyb2xcbiIpOwogCQkJCWdvdG8gX2Vycm9yOwogCQkJfQotCQkJY2hpcC0+c2V0X3BsYXliYWNrX2Zvcm1hdCA9IGFkMTg0NV9wbGF5YmFja19mb3JtYXQ7Ci0JCQljaGlwLT5zZXRfY2FwdHVyZV9mb3JtYXQgPSBhZDE4NDVfY2FwdHVyZV9mb3JtYXQ7CiAJCX0KIAogCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU291bmRTY2FwZSIpOwpAQCAtMTE1Nyw3ICsxMDQ3LDYgQEAKIAl1bnNpZ25lZCBkbWFfY2ZnOwogCXVuc2lnbmVkIGlycV9jZmc7CiAJdW5zaWduZWQgbXB1X2lycV9jZmc7Ci0JdW5zaWduZWQgeHBvcnQ7CiAJc3RydWN0IHJlc291cmNlICppb19yZXM7CiAJc3RydWN0IHJlc291cmNlICp3c3NfcmVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTc3LDE1ICsxMDY2LDE1IEBACiAJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBJbnZhbGlkIElSUSAlZFxuIiwgbXB1X2lycVtkZXZdKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JeHBvcnQgPSBwb3J0W2Rldl07CiAKIAkvKgogCSAqIEdyYWIgSU8gcG9ydHMgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcHJvYmUgc28gdGhhdCB3ZQogCSAqIGNhbiBkZXRlY3QgYW5kIGNvbnRyb2wgdGhpcyBoYXJkd2FyZSAuLi4KIAkgKi8KLQlpb19yZXMgPSByZXF1ZXN0X3JlZ2lvbih4cG9ydCwgOCwgIlNvdW5kU2NhcGUiKTsKKwlpb19yZXMgPSByZXF1ZXN0X3JlZ2lvbihwb3J0W2Rldl0sIDgsICJTb3VuZFNjYXBlIik7CiAJaWYgKCFpb19yZXMpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBjYW4ndCBncmFiIHBvcnQgMHgleFxuIiwgeHBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAic3NjYXBlOiBjYW4ndCBncmFiIHBvcnQgMHglbHhcbiIsIHBvcnRbZGV2XSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXdzc19yZXMgPSBOVUxMOwpAQCAtMTIxMiwxMCArMTEwMSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNzY2FwZS0+Zndsb2NrKTsKIAlzc2NhcGUtPmlvX3JlcyA9IGlvX3JlczsKIAlzc2NhcGUtPndzc19yZXMgPSB3c3NfcmVzOwotCXNzY2FwZS0+aW9fYmFzZSA9IHhwb3J0OwotCXNzY2FwZS0+d3NzX2Jhc2UgPSB3c3NfcG9ydFtkZXZdOworCXNzY2FwZS0+aW9fYmFzZSA9IHBvcnRbZGV2XTsKIAotCWlmICghZGV0ZWN0X3NzY2FwZShzc2NhcGUpKSB7CisJaWYgKCFkZXRlY3Rfc3NjYXBlKHNzY2FwZSwgd3NzX3BvcnRbZGV2XSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IGhhcmR3YXJlIG5vdCBkZXRlY3RlZCBhdCAweCV4XG4iLCBzc2NhcGUtPmlvX2Jhc2UpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIF9yZWxlYXNlX2RtYTsKQEAgLTEyODgsMTIgKzExNzYsMTEgQEAKIAl9CiAjZGVmaW5lIE1JRElfREVWTlVNICAwCiAJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewotCQllcnIgPSBjcmVhdGVfbXB1NDAxKGNhcmQsIE1JRElfREVWTlVNLAotCQkJCSAgICBNUFU0MDFfSU8oeHBvcnQpLCBtcHVfaXJxW2Rldl0pOworCQllcnIgPSBjcmVhdGVfbXB1NDAxKGNhcmQsIE1JRElfREVWTlVNLCBwb3J0W2Rldl0sIG1wdV9pcnFbZGV2XSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogRmFpbGVkIHRvIGNyZWF0ZSAiCi0JCQkJCSJNUFUtNDAxIGRldmljZSBhdCAweCV4XG4iLAotCQkJCQlNUFU0MDFfSU8oeHBvcnQpKTsKKwkJCQkJIk1QVS00MDEgZGV2aWNlIGF0IDB4JWx4XG4iLAorCQkJCQlwb3J0W2Rldl0pOwogCQkJZ290byBfcmVsZWFzZV9kbWE7CiAJCX0KIApAQCAtMTM1NywxMCArMTI0NCwxMCBAQAogCXN0cnVjdCBzb3VuZHNjYXBlICpzc2NhcGU7CiAJaW50IHJldDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlzc2NhcGUgPSBnZXRfY2FyZF9zb3VuZHNjYXBlKGNhcmQpOwogCXNzY2FwZS0+dHlwZSA9IFNTQ0FQRTsKQEAgLTE0NjIsMTAgKzEzNDksMTAgQEAKIAkgKiBDcmVhdGUgYSBuZXcgQUxTQSBzb3VuZCBjYXJkIGVudHJ5LCBpbiBhbnRpY2lwYXRpb24KIAkgKiBvZiBkZXRlY3Rpbmcgb3VyIGhhcmR3YXJlIC4uLgogCSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzb3VuZHNjYXBlKSk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpLCAmY2FyZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlzc2NhcGUgPSBnZXRfY2FyZF9zb3VuZHNjYXBlKGNhcmQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwppbmRleCA0YzA5NWJjLi5hMzRhZTdiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKQEAgLTMzOCwxNSArMzM4LDE2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXNuZF93YXZlZnJvbnRfY2FyZF90ICphY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyAoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgIHNpemVvZihzbmRfd2F2ZWZyb250X2NhcmRfdCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfd2F2ZWZyb250X2NhcmRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFjYXJkLT53YXZlZnJvbnQuaXJxID0gLTE7CkBAIC0zNTcsNyArMzU4LDggQEAKIAlhY2FyZC0+d2F2ZWZyb250LmNhcmQgPSBjYXJkOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF93YXZlZnJvbnRfZnJlZTsKIAotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC01NTEsMTEgKzU1MywxMSBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgogCWlmIChjczQyMzJfcGNtX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50aygic3BlY2lmeSBDUzQyMzIgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGljczIxMTVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IElDUzIxMTUgcG9ydFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNwZWNpZnkgSUNTMjExNSBwb3J0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtNTY3LDkgKzU2OSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF93YXZlZnJvbnRfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC02MTYsOSArNjE4LDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmIChzbmRfd2F2ZWZyb250X3BucCAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpIDwgMCkgewogCQlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYwppbmRleCA0YzQxMDgyLi5iZWIzMTJjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKQEAgLTYzMyw3ICs2MzMsNyBAQAogCQl3YnVmWzFdID0gaSA+PiA3OwogCiAJCWlmIChzbmRfd2F2ZWZyb250X2NtZCAoZGV2LCBXRkNfSURFTlRJRllfU0FNUExFX1RZUEUsIHJidWYsIHdidWYpKSB7Ci0JCQlzbmRfcHJpbnRrKCJjYW5ub3QgaWRlbnRpZnkgc2FtcGxlICIKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJjYW5ub3QgaWRlbnRpZnkgc2FtcGxlICIKIAkJCQkgICAidHlwZSBvZiBzbG90ICVkXG4iLCBpKTsKIAkJCWRldi0+c2FtcGxlX3N0YXR1c1tpXSA9IFdGX1NUX0VNUFRZOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDNkNmM1ZjIuLjVkMmJhMWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0xODEsMjUgKzE4MSw2IEBACiAJCXVkZWxheSgxMDApOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfd3NzX291dG0oc3RydWN0IHNuZF93c3MgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBjaGFyIHRtcCA9IChjaGlwLT5pbWFnZVtyZWddICYgbWFzaykgfCB2YWx1ZTsKLQotCXNuZF93c3Nfd2FpdChjaGlwKTsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHCi0JaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJvdXRtOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKLSNlbmRpZgotCWNoaXAtPmltYWdlW3JlZ10gPSB0bXA7Ci0JaWYgKCFjaGlwLT5jYWxpYnJhdGVfbXV0ZSkgewotCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwotCQl3bWIoKTsKLQkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB0bXApOwotCQltYigpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgc25kX3dzc19kb3V0KHN0cnVjdCBzbmRfd3NzICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewpAQCAtMjE5LDcgKzIwMCw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dDogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAtIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAib3V0OiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICIKKwkJCSAgICItIHJlZyA9IDB4JXgsIHZhbHVlID0gMHgleFxuIiwgcmVnLCB2YWx1ZSk7CiAjZW5kaWYKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHKSwgdmFsdWUpOwpAQCAtMjM1LDcgKzIxNyw4IEBACiAJc25kX3dzc193YWl0KGNoaXApOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleFxuIiwgcmVnKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbjogYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAiCisJCQkgICAiLSByZWcgPSAweCV4XG4iLCByZWcpOwogI2VuZGlmCiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgcmVnKTsKIAltYigpOwpAQCAtMjUyLDcgKzIzNSw3IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB2YWwpOwogCWNoaXAtPmVpbWFnZVtDUzQyMzZfUkVHKHJlZyldID0gdmFsOwogI2lmIDAKLQlwcmludGsoImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImV4dCBvdXQgOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHZhbCk7CiAjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9leHRfb3V0KTsKQEAgLTI2OCw3ICsyNTEsOCBAQAogCXsKIAkJdW5zaWduZWQgY2hhciByZXM7CiAJCXJlcyA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUcpKTsKLQkJcHJpbnRrKCJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLCByZWcsIHJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJleHQgaW4gOiByZWcgPSAweCV4LCB2YWwgPSAweCV4XG4iLAorCQkgICAgICAgcmVnLCByZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMzk0LDEzICszNzgsMTYgQEAKIAlzbmRfd3NzX3dhaXQoY2hpcCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX3VwIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAljaGlwLT5tY2VfYml0IHw9IENTNDIzMV9NQ0U7CiAJdGltZW91dCA9IHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJtY2VfdXAgWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfdXAgWzB4JWx4XTogIgorCQkJICAgInNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwKKwkJCSAgIGNoaXAtPnBvcnQpOwogCWlmICghKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSkKIAkJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLAogCQkJIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKQEAgLTQxOSw3ICs0MDYsOSBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XSAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iLCAobG9uZylDUzQyMzFQKFJFR1NFTCkpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1jZV9kb3duIFsweCVseF0gLSAiCisJCQkgICAiYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsCisJCQkgICAobG9uZylDUzQyMzFQKFJFR1NFTCkpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJY2hpcC0+bWNlX2JpdCAmPSB+Q1M0MjMxX01DRTsKQEAgLTQyNyw3ICs0MTYsOSBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVvdXQgPT0gMHg4MCkKLQkJc25kX3ByaW50aygibWNlX2Rvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJtY2VfZG93biBbMHglbHhdOiAiCisJCQkgICAic2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLAorCQkJICAgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fCAhKGNoaXAtPmhhcmR3YXJlICYgaHdfbWFzaykpCiAJCXJldHVybjsKIApAQCAtNTY1LDcgKzU1Niw3IEBACiAJaWYgKGNoYW5uZWxzID4gMSkKIAkJcmZvcm1hdCB8PSBDUzQyMzFfU1RFUkVPOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJnZXRfZm9ybWF0OiAweCV4IChtb2RlPTB4JXgpXG4iLCBmb3JtYXQsIG1vZGUpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZ2V0X2Zvcm1hdDogMHgleCAobW9kZT0weCV4KVxuIiwgZm9ybWF0LCBtb2RlKTsKICNlbmRpZgogCXJldHVybiByZm9ybWF0OwogfQpAQCAtNTg3LDcgKzU3OCwxNSBAQAogCQkJICAgICBjaGlwLT5pbWFnZVtDUzQyMzFfUklHSFRfSU5QVVRdKTsKIAkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MT09QQkFDSywKIAkJCSAgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX0xPT1BCQUNLXSk7CisJfSBlbHNlIHsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MRUZUX0lOUFVULAorCQkJICAgICAwKTsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9SSUdIVF9JTlBVVCwKKwkJCSAgICAgMCk7CisJCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfTE9PUEJBQ0ssCisJCQkgICAgIDB4ZmQpOwogCX0KKwogCXNuZF93c3NfZG91dChjaGlwLCBDUzQyMzFfQVVYMV9MRUZUX0lOUFVULAogCQkgICAgIG11dGUgfCBjaGlwLT5pbWFnZVtDUzQyMzFfQVVYMV9MRUZUX0lOUFVUXSk7CiAJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULApAQCAtNjMwLDcgKzYyOSw2IEBACiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bWNlX211dGV4KTsKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQ1M0MjMxQSB8fAogCSAgICAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNjQ2LDYgKzY0NCwyNCBAQAogCQkJZnVsbF9jYWxpYiA9IDA7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpIHsKKwkJdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwkJLyoKKwkJICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIHBsYXliYWNrIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9QTEFZQktfRk9STUFULCAocGRmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC02NjMsNyArNjc5LDYgQEAKIAkJCXVkZWxheSgxMDApOwkvKiB0aGlzIHNlZW1zIHRvIGhlbHAgKi8KIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTY3NSw3ICs2OTAsNiBAQAogCWludCBmdWxsX2NhbGliID0gMTsKIAogCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0NTNDIzMUEgfHwKIAkgICAgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTY5MCw2ICs3MDQsMjQgQEAKIAkJCWZ1bGxfY2FsaWIgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KSB7CisJCXVuc2lnbmVkIHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJCS8qCisJCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBjYXB0dXJlIHN0cmVhbS4KKwkJICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCisJCSAqIHRoZSBQTEFZQkFDS19FTkFCTEUgYml0IG9mIHRoZSBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbgorCQkgKiByZWdpc3RlciBpcyBzZXQuCisJCSAqCisJCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCisJCSAqICAgICAgIHRvIGdldCB0aGUgY29ycmVjdCBzYW1wbGUgZnJlcXVlbmN5LgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9SRUNfRk9STUFULCAoY2RmciAmIDB4ZjApKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1VQUl9GUkVRX1NFTCwgKHJhdGUgPj4gOCkgJiAweGZmKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0xXUl9GUkVRX1NFTCwgcmF0ZSAmIDB4ZmYpOworCQlmdWxsX2NhbGliID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGZ1bGxfY2FsaWIpIHsKIAkJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC03MTQsNyArNzQ2LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiB9CiAKQEAgLTc3MSwxMCArODAyLDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICgxKVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMSlcbiIpOwogI2VuZGlmCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC03ODksMTggKzgyMSwyMCBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMilcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDIpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CisJY2hpcC0+aW1hZ2VbQ1M0MjMxX0lGQUNFX0NUUkxdICY9IH5DUzQyMzFfQVVUT0NBTElCOworCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9JRkFDRV9DVFJMLCBjaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0pOwogCXNuZF93c3Nfb3V0KGNoaXAsCiAJCSAgICBDUzQyMzFfQUxUX0ZFQVRVUkVfMSwgY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoMykgLSBhZmVpID0gMHgleFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgzKSAtIGFmZWkgPSAweCV4XG4iLAogCQkgICBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0pOwogI2VuZGlmCiAKQEAgLTgxNyw3ICs4NTEsNyBAQAogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKICNpZmRlZiBTTkRSVl9ERUJVR19NQ0UKLQlzbmRfcHJpbnRrKCJpbml0OiAoNClcbiIpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDQpXG4iKTsKICNlbmRpZgogCiAJc25kX3dzc19tY2VfdXAoY2hpcCk7CkBAIC04MjcsOSArODYxLDEwIEBACiAJCQkgICAgY2hpcC0+aW1hZ2VbQ1M0MjMxX1JFQ19GT1JNQVRdKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CisJc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg1KVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoNSlcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTg4NSw4ICs5MjAsNiBAQAogCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm47CiAJfQotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7Ci0KIAkvKiBkaXNhYmxlIElSUSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICghKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSkKQEAgLTkxOSw4ICs5NTIsNiBAQAogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoU1RBVFVTKSwgMCk7CS8qIGNsZWFyIElSUSAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwotCiAJY2hpcC0+bW9kZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIH0KQEAgLTExMTMsNyArMTE0NCw3IEBACiAJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKQogCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFNUQVRVUyksIDApOwogCWVsc2UKLQkJc25kX3dzc19vdXRtKGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCBzdGF0dXMsIDApOworCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgc3RhdHVzKTsKIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEyNzgsNyArMTMwOSw4IEBACiAJCX0gZWxzZSBpZiAocmV2ID09IDB4MDMpIHsKIAkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzNkI7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTIGNoaXAgd2l0aCB2ZXJzaW9uIDB4JXhcbiIsIHJldik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgInVua25vd24gQ1MgY2hpcCB3aXRoIHZlcnNpb24gMHgleFxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwkJLyogdW5rbm93biBDUzQyMzEgY2hpcD8gKi8KIAkJfQogCX0KQEAgLTEzMTQsNiArMTM0NiwxMCBAQAogCQljaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMl0gPQogCQkJY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0lOVEVSV0FWRSA/IDB4YzIgOiAweDAxOwogCX0KKwkvKiBlbmFibGUgZmluZSBncmFpbmVkIGZyZXF1ZW5jeSBzZWxlY3Rpb24gKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkKKwkJY2hpcC0+aW1hZ2VbQUQxODQ1X1BXUl9ET1dOXSA9IDg7CisKIAlwdHIgPSAodW5zaWduZWQgY2hhciAqKSAmY2hpcC0+aW1hZ2U7CiAJcmVnbnVtID0gKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0FEMTg0OF9NQVNLKSA/IDE2IDogMzI7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKQEAgLTEzNDIsNyArMTM3OCwxMCBAQAogCQkJCWNhc2UgNjoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzUgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzUgY2hpcCAiCisJCQkJCQkiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwKKwkJCQkJCWlkKTsKIAkJCQl9CiAJCQl9IGVsc2UgaWYgKChpZCAmIDB4MWYpID09IDB4MGIpIHsJLyogQ1M0MjM2L0IgKi8KIAkJCQlzd2l0Y2ggKGlkID4+IDUpIHsKQEAgLTEzNTMsNyArMTM5MiwxMCBAQAogCQkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzZCOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzNiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzNiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOCkgewkvKiBDUzQyMzdCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM3QjsKQEAgLTEzNjQsNyArMTQwNiwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzdCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM3QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwOSkgewkvKiBDUzQyMzhCICovCiAJCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM4QjsKQEAgLTEzNzQsNyArMTQxOSwxMCBAQAogCQkJCWNhc2UgNzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzhCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM4QiBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgxZSkgewkvKiBDUzQyMzkgKi8KIAkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzk7CkBAIC0xMzg0LDEwICsxNDMyLDE1IEBACiAJCQkJY2FzZSA2OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzOSBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzOSBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJc25kX3ByaW50aygidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAidW5rbm93biBDUzQyMzYvQ1M0MjN4QiBjaGlwICIKKwkJCQkJICAgIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE2MTgsNyArMTY3MSw4IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJkb3duIFsweCVseF06IHNlcmlvdXMgaW5pdCBwcm9ibGVtIC0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gIgorCQkJICAgIi0gY29kZWMgc3RpbGwgYnVzeVxuIiwgY2hpcC0+cG9ydCk7CiAJaWYgKCh0aW1lb3V0ICYgQ1M0MjMxX01DRSkgPT0gMCB8fAogCSAgICAhKGNoaXAtPmhhcmR3YXJlICYgKFdTU19IV19DUzQyMzFfTUFTSyB8IFdTU19IV19DUzQyMzJfTUFTSykpKSB7CiAJCXJldHVybjsKQEAgLTE2MjgsNyArMTY4Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKQoraW50IHNuZF93c3NfZnJlZShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCkKIHsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19jcG9ydCk7CkBAIC0xNjUxLDYgKzE3MDUsNyBAQAogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChzbmRfd3NzX2ZyZWUpOwogCiBzdGF0aWMgaW50IHNuZF93c3NfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTE4MjAsNyArMTg3NSw4IEBACiAjaWYgMAogCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykgewogCQlpZiAoY2hpcC0+cmVzX2Nwb3J0ID09IE5VTEwpCi0JCQlzbmRfcHJpbnRrKCJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSBub3QgYWNjZXNzaWJsZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzIgY29udHJvbCBwb3J0IGZlYXR1cmVzIGFyZSAiCisJCQkJICAgIm5vdCBhY2Nlc3NpYmxlXG4iKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggMTg4MWNlYy4uM2U3NjNkNiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9hdTF4MDAuYworKysgYi9zb3VuZC9taXBzL2F1MXgwMC5jCkBAIC02MzYsOSArNjM2LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYXUxMDAwICphdTEwMDA7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCAiQUM5NyIsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoLTEsICJBQzk3IiwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9hdTEwMDApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYXUxMDAwX2ZyZWU7CiAJYXUxMDAwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpAQCAtNjc4LDcgKzY3OSw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpbnRrKCBLRVJOX0lORk8gIkFMU0EgQUM5NzogRHJpdmVyIEluaXRpYWxpemVkXG4iICk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQUxTQSBBQzk3OiBEcml2ZXIgSW5pdGlhbGl6ZWRcbiIpOwogCWF1MTAwMF9jYXJkID0gY2FyZDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggZGI0OTViZS4uYzUyNjkxYyAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTg3OCw5ICs4NzgsOSBAQAogCXN0cnVjdCBzbmRfaGFsMiAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaGFsMl9jcmVhdGUoY2FyZCwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IDRjNjM1MDQuLjY2ZjNiNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC05MzYsOSArOTM2LDkgQEAKIAlzdHJ1Y3Qgc25kX3NnaW8yYXVkaW8gKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9zZ2lvMmF1ZGlvX2NyZWF0ZShjYXJkLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hZDE4NDguYyBiL3NvdW5kL29zcy9hZDE4NDguYwppbmRleCA3Y2Y5OTEzLi5kMTJiZDk4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYWQxODQ4LmMKKysrIGIvc291bmQvb3NzL2FkMTg0OC5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAl3aGlsZSAodGltZW91dCA+IDAgJiYgKGFkX3JlYWQoZGV2YywgMTEpICYgMHgyMCkpCiAJCXRpbWVvdXQtLTsKIAlpZiAoYWRfcmVhZChkZXZjLCAxMSkgJiAweDIwKQotCQlpZiAoIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1KSB8fCAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpKQorCQlpZiAoKGRldmMtPm1vZGVsICE9IE1EXzE4NDUpICYmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhZDE4NDg6IEF1dG8gY2FsaWJyYXRpb24gdGltZWQgb3V0KDMpLlxuIik7CiB9CiAKQEAgLTIxMDcsNyArMjEwNyw3IEBACiAJc3dpdGNoIChjbWQpCiAJewogCQljYXNlIEFEMTg0OF9TRVRfWFRBTDoJLyogQ2hhbmdlIGNsb2NrIGZyZXF1ZW5jeSBvZiBBRDE4NDUgKG9ubHkgKSAqLwotCQkJaWYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDUgfHwgZGV2Yy0+bW9kZWwgIT0gTURfMTg0NV9TU0NBUEUpCisJCQlpZiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSAmJiBkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZjLT5sb2NrLGZsYWdzKTsKIAkJCWFkX2VudGVyX01DRShkZXZjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKaW5kZXggODFlMWY0NC4uNDE5MWFjYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKQEAgLTE2MjcsNyArMTYyNyw5IEBACiAJCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdWRpby5jIGIvc291bmQvb3NzL2F1ZGlvLmMKaW5kZXggODliZDI3YS4uYjY5YzA1YiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL2F1ZGlvLmMKQEAgLTQzMyw3ICs0MzMsOSBAQAogCQkJcmV0dXJuIGRtYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKIAkJCiAJCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQkJcmV0dXJuIDA7CiAKIAkJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hYnVmLmMgYi9zb3VuZC9vc3MvZG1hYnVmLmMKaW5kZXggMWU5MGQ3Ni4uMWJmY2Y3ZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYWJ1Zi5jCisrKyBiL3NvdW5kL29zcy9kbWFidWYuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQlETUFidWZfbGF1bmNoX291dHB1dChkZXYsIGRtYXApOwogCQlhZGV2LT5kbWFwX291dC0+ZmxhZ3MgfD0gRE1BX1NZTkNJTkc7CiAJCWFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9IDA7Ci0JCXdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgbisrIDw9IGFkZXYtPmRtYXBfb3V0LT5uYnVmcyAmJiAKKwkJd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiBuKysgPCBhZGV2LT5kbWFwX291dC0+bmJ1ZnMgJiYKIAkJICAgICAgIGFkZXYtPmRtYXBfb3V0LT5xbGVuICYmIGFkZXYtPmRtYXBfb3V0LT51bmRlcnJ1bl9jb3VudCA9PSAwKSB7CiAJCQlsb25nIHQgPSBkbWFidWZfdGltZW91dChkbWFwKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXAtPmxvY2ssZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwppbmRleCAzODkzMWYyLi4xZjQ3NzQxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYwpAQCAtMTUyNCw3ICsxNTI0LDcgQEAKIAkuc3BlZWQJPSA4MDAwCiB9IDsKIAotc3RhdGljIE1BQ0hJTkUgbWFjaFRUID0geworc3RhdGljIF9faW5pdGRhdGEgTUFDSElORSBtYWNoVFQgPSB7CiAJLm5hbWUJCT0gIkF0YXJpIiwKIAkubmFtZTIJCT0gIlRUIiwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCS5jYXBhYmlsaXRpZXMJPSAgRFNQX0NBUF9CQVRDSAkvKiBBcyBwZXIgU05EQ1RMX0RTUF9HRVRDQVBTICovCiB9OwogCi1zdGF0aWMgTUFDSElORSBtYWNoRmFsY29uID0geworc3RhdGljIF9faW5pdGRhdGEgTUFDSElORSBtYWNoRmFsY29uID0gewogCS5uYW1lCQk9ICJBdGFyaSIsCiAJLm5hbWUyCQk9ICJGQUxDT04iLAogCS5kbWFfYWxsb2MJPSBBdGFBbGxvYywKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wYXMyX2NhcmQuYyBiL3NvdW5kL29zcy9wYXMyX2NhcmQuYwppbmRleCAyNWYzYTIyLi43ZjM3N2VjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKKysrIGIvc291bmQvb3NzL3BhczJfY2FyZC5jCkBAIC0xNTYsOSArMTU2LDcgQEAKIAkJCQkJCSAqIDB4ODAKIAkJCQkJCSAqLyAsIDB4Qjg4KTsKIAotCXBhc193cml0ZSgweDgwCi0JCSAgfCBqb3lzdGljaz8weDQwOjAKLQkJICAsMHhGMzg4KTsKKwlwYXNfd3JpdGUoMHg4MCB8IChqb3lzdGljayA/IDB4NDAgOiAwKSwgMHhGMzg4KTsKIAogCWlmIChwYXNfaXJxIDwgMCB8fCBwYXNfaXJxID4gMTUpCiAJewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IDE2ZWQwNjkuLjE2NTE3YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTQ1NywxMCArNDU3LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3ZvbHVtZV9tb25vKHVuc2lnbmVkIF9fdXNlciAqcCwgaW50ICphbGVmdCkKK3N0YXRpYyBpbnQgc2V0X3ZvbHVtZV9tb25vKHVuc2lnbmVkIF9fdXNlciAqcCwgdW5zaWduZWQgaW50ICphbGVmdCkKIHsKLQlpbnQgbGVmdDsKLQl1bnNpZ25lZCB2b2x1bWU7CisJdW5zaWduZWQgaW50IGxlZnQsIHZvbHVtZTsKIAlpZiAoZ2V0X3VzZXIodm9sdW1lLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJCkBAIC00NzEsMTAgKzQ3MCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF92b2x1bWVfc3RlcmVvKHVuc2lnbmVkIF9fdXNlciAqcCwgaW50ICphbGVmdCwgaW50ICphcmlnaHQpCitzdGF0aWMgaW50IHNldF92b2x1bWVfc3RlcmVvKHVuc2lnbmVkIF9fdXNlciAqcCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICphbGVmdCwKKwkJCSAgICAgdW5zaWduZWQgaW50ICphcmlnaHQpCiB7Ci0JaW50IGxlZnQsIHJpZ2h0OwotCXVuc2lnbmVkIHZvbHVtZTsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgcmlnaHQsIHZvbHVtZTsKIAlpZiAoZ2V0X3VzZXIodm9sdW1lLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zZXF1ZW5jZXIuYyBiL3NvdW5kL29zcy9zZXF1ZW5jZXIuYwppbmRleCA1YzIxNWY3Li5jNzk4NzQ2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKKysrIGIvc291bmQvb3NzL3NlcXVlbmNlci5jCkBAIC0yMTIsNyArMjEyLDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGV2ZW50X3JlY1tFVl9TWl0sIGV2X2NvZGU7CiAJaW50IHAgPSAwLCBjLCBldl9zaXplOwotCWludCBlcnI7CiAJaW50IG1vZGUgPSB0cmFuc2xhdGVfbW9kZShmaWxlKTsKIAogCWRldiA9IGRldiA+PiA0OwpAQCAtMjg1LDcgKzI4NCw3IEBACiAJCXsKIAkJCWlmICghbWlkaV9vcGVuZWRbZXZlbnRfcmVjWzJdXSkKIAkJCXsKLQkJCQlpbnQgbW9kZTsKKwkJCQlpbnQgZXJyLCBtb2RlOwogCQkJCWludCBkZXYgPSBldmVudF9yZWNbMl07CiAKIAkJCQlpZiAoZGV2ID49IG1heF9taWRpZGV2IHx8IG1pZGlfZGV2c1tkZXZdPT1OVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IGU1ZDQyMzkuLjc4Y2ZiNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTEzNSw3ICsxMzUsOSBAQAogCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9VOCwgKGludCAqKWFyZyk7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IDQxNTYyZWMuLjFlZGFiN2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtMjIwMCw3ICsyMjAwLDkgQEAKIAkJCQkgICAgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Z3c25kLmMgYi9zb3VuZC9vc3MvdndzbmQuYwppbmRleCA3OGI4YWNjLi4xODdmNzI3IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdndzbmQuYworKysgYi9zb3VuZC9vc3MvdndzbmQuYwpAQCAtMjY3Myw3ICsyNjczLDkgQEAKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoJLyogX1NJTyAgKCdQJywxNCkgKi8KIAkJREJHWCgiU05EQ1RMX0RTUF9OT05CTE9DS1xuIik7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CQkvKiBfU0lPICAoJ1AnLCAwKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggNDFmODcwZi4uNjA1NWZkNiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC05NzUsOSArOTc1LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9oYXJtb255ICpoOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2hhcm1vbnlfY3JlYXRlKGNhcmQsIHBhZGV2LCAmaCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDgyYjliZGQuLmNhMjVlNjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC00MDAsNiArNDAwLDI2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvZGoKIAorY29uZmlnIFNORF9JTkRJR09JT1gKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgSW5kaWdvIElPeCIKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBJbmRpZ28gSU94LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvaW94CisKK2NvbmZpZyBTTkRfSU5ESUdPREpYCisJdHJpc3RhdGUgIihFY2hvYXVkaW8pIEluZGlnbyBESngiCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFY2hvYXVkaW8gSW5kaWdvIERKeC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWluZGlnb2RqeAorCiBjb25maWcgU05EX0VNVTEwSzEKIAl0cmlzdGF0ZSAiRW11MTBrMSAoU0IgTGl2ZSEsIEF1ZGlneSwgRS1tdSBBUFMpIgogCXNlbGVjdCBGV19MT0FERVIKQEAgLTc0NCw3ICs3NjQsOCBAQAogCXNlbGVjdCBTTkRfT1hZR0VOX0xJQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIgYW5kIEQyWC4KKwkgIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgYW5kCisJICBFc3NlbmNlIFNUWC4KIAkgIFN1cHBvcnQgZm9yIHRoZSBIREFWMS4zIChEZWx1eGUpIGlzIHZlcnkgZXhwZXJpbWVudGFsLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggZTJiODQzYi4uOTdlZTEyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiB7IDB4NDM1MjU5NzAsIDB4ZmZmZmZmZjgsICJDUzQyMDIiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg0MzU4NTQyMSwgMHhmZmZmZmZmZiwgIkhTRDExMjQ2IiwJCU5VTEwsCQlOVUxMIH0sCS8vIFNtYXJ0TUMgSUkKIHsgMHg0MzU4NTQyOCwgMHhmZmZmZmZmOCwgIkN4MjA0NjgiLAkJcGF0Y2hfY29uZXhhbnQsCU5VTEwgfSwgLy8gU21hcnRBTUMgZml4bWU6IHRoZSBtYXNrIG1pZ2h0IGJlIGRpZmZlcmVudAoreyAweDQzNTg1NDMwLCAweGZmZmZmZmZmLCAiQ3gyMDQ2OC0zMSIsCQlwYXRjaF9jb25leGFudCwgTlVMTCB9LAogeyAweDQzNTg1NDMxLCAweGZmZmZmZmZmLCAiQ3gyMDU1MSIsICAgICAgICAgICBwYXRjaF9jeDIwNTUxLCAgTlVMTCB9LAogeyAweDQ0NTQzMDMxLCAweGZmZmZmZmYwLCAiRFQwMzk4IiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDU0ZDQzMjgsIDB4ZmZmZmZmZmYsICJFTTI4MDI4IiwJCU5VTEwsCQlOVUxMIH0sICAvLyBzYW1lIGFzIFRSMjgwMjg/CkBAIC0zODMsNyArMzg0LDcgQEAKIAogRVhQT1JUX1NZTUJPTChzbmRfYWM5N191cGRhdGVfYml0cyk7CiAKLS8qIG5vIGxvY2sgdmVyc2lvbiAtIHNlZSBzbmRfYWM5N191cGRhdF9iaXRzKCkgKi8KKy8qIG5vIGxvY2sgdmVyc2lvbiAtIHNlZSBzbmRfYWM5N191cGRhdGVfYml0cygpICovCiBpbnQgc25kX2FjOTdfdXBkYXRlX2JpdHNfbm9sb2NrKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbHVlKQogewpAQCAtMTY0Myw3ICsxNjQ0LDEwIEBACiB7CiAJaW50IGVyciwgaWR4OwogCi0JLy9wcmludGsoIkFDOTdfR1BJT19DRkcgPSAleFxuIixzbmRfYWM5N19yZWFkKGFjOTcsQUM5N19HUElPX0NGRykpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIkFDOTdfR1BJT19DRkcgPSAleFxuIiwKKwkgICAgICAgc25kX2FjOTdfcmVhZChhYzk3LEFDOTdfR1BJT19DRkcpKTsKKwkqLwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19DRkcsIDB4ZmZmZiAmIH4oQUM5N19HUElPX0xJTkUxX09IKSk7CiAJc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19HUElPX1BPTEFSSVRZLCAweGZmZmYgJiB+KEFDOTdfR1BJT19MSU5FMV9PSCkpOwogCXNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfR1BJT19TVElDS1ksIDB4ZmZmZik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCmluZGV4IDA2MGVhNTkuLjczYjE3ZDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCkBAIC0xMjUsNiArMTI1LDggQEAKICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiUENJIFN1YnN5cyBEZXZpY2U6IDB4JTA0eFxuXG4iLAogICAgICAgICAgICAgICAgICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAorCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZsYWdzOiAleFxuIiwgYWM5Ny0+ZmxhZ3MpOworCiAJaWYgKChhYzk3LT5leHRfaWQgJiBBQzk3X0VJX1JFVl9NQVNLKSA+PSBBQzk3X0VJX1JFVl8yMykgewogCQl2YWwgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfSU5UX1BBR0lORyk7CiAJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfSU5UX1BBR0lORywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBhN2YzOGU2Li5kMWYyNDJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC05OTUsMTAgKzk5NSwxMCBAQAogCX0KIAogCS8qICgyKSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bm9dLCBpZFtkZXZub10sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAJLyogWFhYIFJFVklTSVQ6IHdlIGNhbiBwcm9iYWJseSBhbGxvY2F0ZSBjaGlwIGluIHRoaXMgY2FsbCAqLwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFEMTg4OSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBbmFsb2cgRGV2aWNlcyBBRDE4ODkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYyBiL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYwppbmRleCAwZjgxOWRkLi5mZDEzNWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCkBAIC01MSw3ICs1MSw4IEBACiAJaW50IGlkeDsKIAkKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDB4MTk7IGlkeCsrKQotCQlwcmludGsoImFrNDUzMSAweCV4OiAweCV4XG4iLCBpZHgsIGFrNDUzMS0+cmVnc1tpZHhdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFrNDUzMSAweCV4OiAweCV4XG4iLAorCQkgICAgICAgaWR4LCBhazQ1MzEtPnJlZ3NbaWR4XSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDFhMGZkNjUuLjRlZGYyNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTIxNDIsNyArMjE0Miw3IEBACiB7CiAJaW50IGVycjsKIAotCXNuZF9hbGlfcHJpbnRrKCJyZXNvdWNlcyBhbGxvY2F0aW9uIC4uLlxuIik7CisJc25kX2FsaV9wcmludGsoInJlc291cmNlcyBhbGxvY2F0aW9uIC4uLlxuIik7CiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhjb2RlYy0+cGNpLCAiQUxJIDU0NTEiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWNvZGVjLT5pcnEgPSBjb2RlYy0+cGNpLT5pcnE7Ci0Jc25kX2FsaV9wcmludGsoInJlc291Y2VzIGFsbG9jYXRlZC5cbiIpOworCXNuZF9hbGlfcHJpbnRrKCJyZXNvdXJjZXMgYWxsb2NhdGVkLlxuIik7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW50IHNuZF9hbGlfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKQEAgLTIzMDcsOSArMjMwNyw5IEBACiAKIAlzbmRfYWxpX3ByaW50aygicHJvYmUgLi4uXG4iKTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2FsaV9jcmVhdGUoY2FyZCwgcGNpLCBwY21fY2hhbm5lbHMsIHNwZGlmLCAmY29kZWMpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczMwMC5jIGIvc291bmQvcGNpL2FsczMwMC5jCmluZGV4IDhkZjY4MjQuLjAwOWI0YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHMzMDAuYworKysgYi9zb3VuZC9wY2kvYWxzMzAwLmMKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgREVCVUdfUExBWV9SRUMJMAogCiAjaWYgREVCVUdfQ0FMTFMKLSNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxlbnRlcigpIHByaW50ayhLRVJOX0VSUiAiLS0+ICVzXG4iLCBfX2Z1bmNfXykKICNkZWZpbmUgc25kX2FsczMwMF9kYmdjYWxsbGVhdmUoKSBwcmludGsoS0VSTl9FUlIgIjwtLSAlc1xuIiwgX19mdW5jX18pCiAjZWxzZQpAQCAtODEyLDEwICs4MTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNoaXBfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IGJhNTcwMDUuLjU0MmEwYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtODg5LDEyICs4ODksMTMgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpLCBQQ0lfQ09NTUFORCwgd29yZCB8IFBDSV9DT01NQU5EX0lPKTsKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIAotCQkJICAgIHNpemVvZigqYWNhcmQpIC8qIHByaXZhdGVfZGF0YTogYWNhcmQgKi8pOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIAorCQkJICAgICAgc2l6ZW9mKCphY2FyZCkgLyogcHJpdmF0ZV9kYXRhOiBhY2FyZCAqLywKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaSk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCAyMjZmZTgyLi45Y2U4NTQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xNjQ1LDkgKzE2NDUsOSBAQAogCXN0cnVjdCBhdGlpeHAgKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsIHNwZGlmX2FjbGluayA/ICJBVElJWFAiIDogIkFUSUlYUC1TUERNQSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBVEkgSVhQIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggMGU2ZTVjYy4uYzMxMzZjYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMTI4OCw5ICsxMjg4LDkgQEAKIAlzdHJ1Y3QgYXRpaXhwX21vZGVtICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQVRJSVhQLU1PREVNIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkFUSSBJWFAgTW9kZW0iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCmluZGV4IGEzNmQ0ZDEuLjllYzEyMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwpAQCAtMjUwLDkgKzI1MCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAkvLyAoMikKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8vICgzKQogCWlmICgoZXJyID0gc25kX3ZvcnRleF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwppbmRleCA2NDk4NDllLi5mNGFhOGZmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYwpAQCAtNDYyLDkgKzQ2MiwxMCBAQAogLyogUmVzZXQgU2luZ2xlIEEzRCBzb3VyY2UuICovCiBzdGF0aWMgdm9pZCBhM2RzcmNfWmVyb1N0YXRlKGEzZHNyY190ICogYSkKIHsKLQotCS8vcHJpbnRrKCJ2b3J0ZXg6IFplcm9TdGF0ZSBzbGljZTogJWQsIHNvdXJjZSAlZFxuIiwgYS0+c2xpY2UsIGEtPnNvdXJjZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFplcm9TdGF0ZSBzbGljZTogJWQsIHNvdXJjZSAlZFxuIiwKKwkgICAgICAgYS0+c2xpY2UsIGEtPnNvdXJjZSk7CisJKi8KIAlhM2RzcmNfU2V0QXRtb3NTdGF0ZShhLCAwLCAwLCAwLCAwKTsKIAlhM2RzcmNfU2V0SHJ0ZlN0YXRlKGEsIEEzZEhyaXJaZXJvcywgQTNkSHJpclplcm9zKTsKIAlhM2RzcmNfU2V0SXRkRGxpbmUoYSwgQTNkSXRkRGxpbmVaZXJvcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKaW5kZXggYjA3MGU1Ny4uMzkwNmY1YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwpAQCAtMTEzNSw3ICsxMTM1LDEwIEBACiAJCQlzbmRfcGNtX3NnYnVmX2dldF9hZGRyKGRtYS0+c3Vic3RyZWFtLCAwKSk7CiAJCWJyZWFrOwogCX0KLQkvL3ByaW50aygidm9ydGV4OiBjZmcwID0gMHgleFxudm9ydGV4OiBjZmcxPTB4JXhcbiIsIGRtYS0+Y2ZnMCwgZG1hLT5jZmcxKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IGNmZzAgPSAweCV4XG52b3J0ZXg6IGNmZzE9MHgleFxuIiwKKwkgICAgICAgZG1hLT5jZmcwLCBkbWEtPmNmZzEpOworCSovCiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFZPUlRFWF9BREJETUFfQlVGQ0ZHMCArIChhZGJkbWEgPDwgMyksIGRtYS0+Y2ZnMCk7CiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFZPUlRFWF9BREJETUFfQlVGQ0ZHMSArIChhZGJkbWEgPDwgMyksIGRtYS0+Y2ZnMSk7CiAKQEAgLTE5NTksNyArMTk2Miw3IEBACiAJCQkJCSAgQURCX0NPREVDT1VUKDAgKyA0KSk7CiAJCXZvcnRleF9jb25uZWN0aW9uX21peF9hZGIodm9ydGV4LCBlbiwgMHgxMSwgbWl4ZXJzWzNdLAogCQkJCQkgIEFEQl9DT0RFQ09VVCgxICsgNCkpOwotCQkvL3ByaW50aygiU0RBQyBkZXRlY3RlZCAiKTsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIlNEQUMgZGV0ZWN0ZWQgIik7ICovCiAJfQogI2Vsc2UKIAkvLyBVc2UgcGxhaW4gZGlyZWN0IG91dHB1dCB0byBjb2RlYy4KQEAgLTIwMTMsNyArMjAxNiwxMSBAQAogCQkJCQlyZXNtYXBbcmVzdHlwZV0gfD0gKDEgPDwgaSk7CiAJCQkJZWxzZQogCQkJCQl2b3J0ZXgtPmRtYV9hZGJbaV0ucmVzb3VyY2VzW3Jlc3R5cGVdIHw9ICgxIDw8IGkpOwotCQkJCS8vcHJpbnRrKCJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgb3V0ICVkXG4iLCByZXN0eXBlLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgb3V0ICVkXG4iLAorCQkJCSAgICAgICByZXN0eXBlLCBpKTsKKwkJCQkqLwogCQkJCXJldHVybiBpOwogCQkJfQogCQl9CkBAIC0yMDI0LDcgKzIwMzEsMTEgQEAKIAkJZm9yIChpID0gMDsgaSA8IHF0eTsgaSsrKSB7CiAJCQlpZiAocmVzbWFwW3Jlc3R5cGVdICYgKDEgPDwgaSkpIHsKIAkJCQlyZXNtYXBbcmVzdHlwZV0gJj0gfigxIDw8IGkpOwotCQkJCS8vcHJpbnRrKCJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgaW4gJWRcbiIscmVzdHlwZSwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidm9ydGV4OiBSZXNNYW5hZ2VyOiB0eXBlICVkIGluICVkXG4iLAorCQkJCSAgICAgICByZXN0eXBlLCBpKTsKKwkJCQkqLwogCQkJCXJldHVybiBpOwogCQkJfQogCQl9CkBAIC0yNzg5LDcgKzI4MDAsNyBAQAogewogCWludCBhLCB0aGlzXzE5NDsKIAotCWlmICgoYml0cyAhPSA4KSB8fCAoYml0cyAhPSAxNikpCisJaWYgKChiaXRzICE9IDgpICYmIChiaXRzICE9IDE2KSkKIAkJcmV0dXJuIC0xOwogCiAJc3dpdGNoIChlbmNvZCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKaW5kZXggOTc4Yjg1Ni4uMjgwNWUzNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCkBAIC0yMTMsMzggKzIxMyw1OSBAQAogCXN3aXRjaCAocmVnKSB7CiAJCS8qIFZvaWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KIAljYXNlIDA6CQkvKiBydW5uaW5nICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUlVOKHd0KSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9SVU4od3QpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9SVU4od3QpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDE6CQkvKiBwYXJhbSAwICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwwKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDApLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAwKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAyOgkJLyogcGFyYW0gMSAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMSksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwxKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMSksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMzoJCS8qIHBhcmFtIDIgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDIpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMiksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDIpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDQ6CQkvKiBwYXJhbSAzICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwzKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDMpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAzKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSA2OgkJLyogbXV0ZSAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX01VVEUod3QpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX01VVEUod3QpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9NVVRFKHd0KSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAweGI6CiAJCXsJCS8qIGRlbGF5ICovCi0JCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX0RFTEFZKHd0LDApLCAoaW50KXZhbCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkJICAgICAgIFdUX0RFTEFZKHd0LDApLCAoaW50KXZhbCk7CisJCQkqLwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAzKSwgdmFsKTsKIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMiksIHZhbCk7CiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDEpLCB2YWwpOwpAQCAtMjcyLDcgKzI5Myw5IEBACiAJCXJldHVybiAwOwogCQlicmVhazsKIAl9Ci0JLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBlY3gsIChpbnQpdmFsKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgZWN4LCAoaW50KXZhbCk7CisJKi8KIAlod3dyaXRlKHZvcnRleC0+bW1pbywgZWN4LCB2YWwpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCmluZGV4IGM3YzU0ZTcuLjhlZWEyOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYworKysgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKQEAgLTM2OCw5ICszNjgsOSBAQAogCX0KIAogCS8qICgyKSBDcmVhdGUgY2FyZCBpbnN0YW5jZSAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogKDMpIENyZWF0ZSBtYWluIGNvbXBvbmVudCAqLwogCWVyciA9IHNuZF9hdzJfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggMzMzMDA3Yy4uZTllOWI1OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0yMTEsMjUgKzIxMSwyNSBAQAogI2VuZGlmCiAKICNpZiBERUJVR19NSVhFUgotI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjaWYgREVCVUdfUExBWV9SRUMKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX01JU0MKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAogI2lmIERFQlVHX0dBTUUKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnZ2FtZShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnZ2FtZShmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnZ2FtZShmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTIyMTYsOSArMjIxNiw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFaRjMzMjgiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXp0ZWNoIEFaRjMzMjggKFBDSTE2OCkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMWFhMWMwNC4uYTI5OTM0MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTg4OCw5ICs4ODgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2J0ODd4X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwppbmRleCAwZTYyMjA1Li5kZjc1NzU3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCkBAIC0yNTUsNiArMjU1LDE0IEBACiAJICAgLmdwaW9fdHlwZSA9IDIsCiAJICAgLmkyY19hZGMgPSAxLAogCSAgIC5zcGlfZGFjID0gMSB9ICwKKwkvKiBHaWdhLWJ5dGUgR0EtRzE5NzVYIG1vYm8KKwkgKiBOb3ZlbGwgYm5jIzM5NTgwNworCSAqLworCS8qIEZJWE1FOiB0aGUgR1BJTyBhbmQgSTJDIHNldHRpbmcgYXJlbid0IHRlc3RlZCB3ZWxsICovCisJeyAuc2VyaWFsID0gMHgxNDU4YTAwNiwKKwkgIC5uYW1lID0gIkdpZ2EtYnl0ZSBHQS1HMTk3NVgiLAorCSAgLmdwaW9fdHlwZSA9IDEsCisJICAuaTJjX2FkYyA9IDEgfSwKIAkgLyogU2h1dHRsZSBYUEMgU0QzMVAgd2hpY2ggaGFzIGFuIG9uYm9hcmQgQ3JlYXRpdmUgTGFicwogCSAgKiBTb3VuZCBCbGFzdGVyIExpdmUhIDI0LWJpdCBFQVgKIAkgICogaGlnaC1kZWZpbml0aW9uIDcuMSBhdWRpbyBwcm9jZXNzb3IiLgpAQCAtNDA0LDcgKzQxMiw5IEBACiAJfQogCiAJdG1wID0gcmVnIDw8IDI1IHwgdmFsdWUgPDwgMTY7Ci0JLy8gc25kX3ByaW50aygiSTJDLXdyaXRlOnJlZz0weCV4LCB2YWx1ZT0weCV4XG4iLCByZWcsIHZhbHVlKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiSTJDLXdyaXRlOnJlZz0weCV4LCB2YWx1ZT0weCV4XG4iLCByZWcsIHZhbHVlKTsKKwkqLwogCS8qIE5vdCBzdXJlIHdoYXQgdGhpcyBJMkMgY2hhbm5lbCBjb250cm9scy4gKi8KIAkvKiBzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIEkyQ19EMCwgMCwgdG1wKTsgKi8KIApAQCAtNDIyLDcgKzQzMiw3IEBACiAJCS8qIFdhaXQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gZW5kcyAqLwogCQl3aGlsZSAoMSkgewogCQkJc3RhdHVzID0gc25kX2NhMDEwNl9wdHJfcmVhZChlbXUsIEkyQ19BLCAwKTsKLSAgICAgICAgICAgICAgICAJLy9zbmRfcHJpbnRrKCJJMkM6c3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7CisJCQkvKnNuZF9wcmludGsoS0VSTl9ERUJVRyAiSTJDOnN0YXR1cz0weCV4XG4iLCBzdGF0dXMpOyovCiAJCQl0aW1lb3V0Kys7CiAJCQlpZiAoKHN0YXR1cyAmIEkyQ19BX0FEQ19TVEFSVCkgPT0gMCkKIAkJCQlicmVhazsKQEAgLTUyMSw3ICs1MzEsMTAgQEAKICAgICAgICAgY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogCWNoYW5uZWwtPnVzZSA9IDE7Ci0gICAgICAgIC8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLAorCSAgICAgICBjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkqLwogICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9jYTAxMDZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwogCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCkBAIC02MTQsNyArNjI3LDEwIEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKIAljaGFubmVsLT51c2UgPSAxOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCS8qCisgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCSovCiAgICAgICAgIC8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX2NhMDEwNl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7CiAgICAgICAgIGNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCkBAIC03MDUsOSArNzIxLDIwIEBACiAJdTMyIHJlZzcxOwogCWludCBpOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsICIKKwkJICAgImNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCQkgICAicGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsCisJCSAgIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJICAgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsCisJCSAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIsCisJCSAgIHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIiwKKwkJICAgZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2VuZGlmIC8qIGRlYnVnICovCiAJLyogUmF0ZSBjYW4gYmUgc2V0IHBlciBjaGFubmVsLiAqLwogCS8qIHJlZzQwIGNvbnRyb2wgaG9zdCB0byBmaWZvICovCiAJLyogcmVnNzEgY29udHJvbHMgREFDIHJhdGUuICovCkBAIC03OTksOSArODI2LDIwIEBACiAJdTMyIHJlZzcxX3NldCA9IDA7CiAJdTMyIHJlZzcxOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsICIKKwkJICAgImNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCQkgICAicGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsCisJCSAgIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJICAgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsCisJCSAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisgICAgICAgIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLAorCQkgICBydW50aW1lLT5kbWFfYWRkciwgcnVudGltZS0+ZG1hX2FyZWEsIHRhYmxlX2Jhc2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCBkbWFfYnl0ZXMoc2l6ZSk9JXhcbiIsCisJCSAgIGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNlbmRpZiAvKiBkZWJ1ZyAqLwogCS8qIHJlZzcxIGNvbnRyb2xzIEFEQyByYXRlLiAqLwogCXN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC04NDYsNyArODg0LDE0IEBACiAJfQogCiAKLSAgICAgICAgLy9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgIgorCSAgICAgICAiYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIGZyYW1lc190b19ieXRlcz0lZFxuIiwKKwkgICAgICAgY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCSAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgMSkpOworCSovCiAJc25kX2NhMDEwNl9wdHJfd3JpdGUoZW11LCAweDEzLCBjaGFubmVsLCAwKTsKIAlzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIENBUFRVUkVfRE1BX0FERFIsIGNoYW5uZWwsIHJ1bnRpbWUtPmRtYV9hZGRyKTsKIAlzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIENBUFRVUkVfQlVGRkVSX1NJWkUsIGNoYW5uZWwsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSk8PDE2KTsgLy8gYnVmZmVyIHNpemUgaW4gYnl0ZXMKQEAgLTg4OCwxMyArOTMzLDEzIEBACiAJCXJ1bnRpbWUgPSBzLT5ydW50aW1lOwogCQllcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCQljaGFubmVsID0gZXBjbS0+Y2hhbm5lbF9pZDsKLQkJLyogc25kX3ByaW50aygiY2hhbm5lbD0lZFxuIixjaGFubmVsKTsgKi8KKwkJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJjaGFubmVsPSVkXG4iLCBjaGFubmVsKTsgKi8KIAkJZXBjbS0+cnVubmluZyA9IHJ1bm5pbmc7CiAJCWJhc2ljIHw9ICgweDEgPDwgY2hhbm5lbCk7CiAJCWV4dGVuZGVkIHw9ICgweDEwIDw8IGNoYW5uZWwpOwogICAgICAgICAgICAgICAgIHNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CiAgICAgICAgIH0KLQkvKiBzbmRfcHJpbnRrKCJiYXNpYz0weCV4LCBleHRlbmRlZD0weCV4XG4iLGJhc2ljLCBleHRlbmRlZCk7ICovCisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJiYXNpYz0weCV4LCBleHRlbmRlZD0weCV4XG4iLGJhc2ljLCBleHRlbmRlZCk7ICovCiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC05NzIsOCArMTAxNywxMyBAQAogCXB0cj1wdHIyOwogICAgICAgICBpZiAocHRyID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQogCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JLy9wcmludGsoInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsIChpbnQpcnVudGltZS0+cmF0ZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsCisJICAgICAgIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkgICAgICAgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnJhdGUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtOTk1LDggKzEwNDUsMTMgQEAKIAlwdHI9cHRyMjsKICAgICAgICAgaWYgKHB0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJcHRyIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCS8vcHJpbnRrKCJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLCAoaW50KXJ1bnRpbWUtPnJhdGUpOwotCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLAorCSAgICAgICBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywKKwkgICAgICAgKGludClydW50aW1lLT5yYXRlKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTExODEsOCArMTIzNiwxMiBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKICAgICAgICAgc3RhdDc2ID0gc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBFWFRFTkRFRF9JTlQsIDApOwotCS8vc25kX3ByaW50aygiaW50ZXJydXB0IHN0YXR1cyA9IDB4JTA4eCwgc3RhdDc2PTB4JTA4eFxuIiwgc3RhdHVzLCBzdGF0NzYpOwotCS8vc25kX3ByaW50aygicHRyPTB4JTA4eFxuIixzbmRfY2EwMTA2X3B0cl9yZWFkKGNoaXAsIFBMQVlCQUNLX1BPSU5URVIsIDApKTsKKwkvKgorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW50ZXJydXB0IHN0YXR1cyA9IDB4JTA4eCwgc3RhdDc2PTB4JTA4eFxuIiwKKwkJICAgc3RhdHVzLCBzdGF0NzYpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicHRyPTB4JTA4eFxuIiwKKwkJICAgc25kX2NhMDEwNl9wdHJfcmVhZChjaGlwLCBQTEFZQkFDS19QT0lOVEVSLCAwKSk7CisJKi8KICAgICAgICAgbWFzayA9IDB4MTE7IC8qIDB4MSBmb3Igb25lIGhhbGYsIDB4MTAgZm9yIHRoZSBvdGhlciBoYWxmIHBlcmlvZC4gKi8KIAlmb3IoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJcGNoYW5uZWwgPSAmKGNoaXAtPnBsYXliYWNrX2NoYW5uZWxzW2ldKTsKQEAgLTE0NzAsNyArMTUyOSw3IEBACiAJCWludCBzaXplLCBuOwogCiAJCXNpemUgPSBBUlJBWV9TSVpFKGkyY19hZGNfaW5pdCk7Ci0JCS8qIHNuZF9wcmludGsoIkkyQzphcnJheSBzaXplPTB4JXhcbiIsIHNpemUpOyAqLworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkkyQzphcnJheSBzaXplPTB4JXhcbiIsIHNpemUpOyAqLwogCQlmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgbisrKQogCQkJc25kX2NhMDEwNl9pMmNfd3JpdGUoY2hpcCwgaTJjX2FkY19pbml0W25dWzBdLAogCQkJCQkgICAgIGkyY19hZGNfaW5pdFtuXVsxXSk7CkBAIC0xNzA3LDkgKzE3NjYsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9jYTAxMDZfY3JlYXRlKGRldiwgY2FyZCwgcGNpLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggMWE3NGNhNi4uYzc4OTljMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMzI3Miw5ICszMjcyLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4OgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IDE5MmU3ODQuLmY2Mjg2ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTgzNCw3ICs4MzQsMTEgQEAKIAlzdHJ1Y3QgY3M0MjgxX2RtYSAqZG1hID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjczQyODEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAKLQkvLyBwcmludGsoIkRDQyA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgamlmZmllcyA9ICVsaVxuIiwgc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIGRtYS0+cmVnRENDKSwgcnVudGltZS0+YnVmZmVyX3NpemUsIGppZmZpZXMpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIkRDQyA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgamlmZmllcyA9ICVsaVxuIiwKKwkgICAgICAgc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIGRtYS0+cmVnRENDKSwgcnVudGltZS0+YnVmZmVyX3NpemUsCisJICAgICAgIGppZmZpZXMpOworCSovCiAJcmV0dXJuIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0KIAkgICAgICAgc25kX2NzNDI4MV9wZWVrQkEwKGNoaXAsIGRtYS0+cmVnRENDKSAtIDE7CiB9CkBAIC0xOTI1LDkgKzE5MjksOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2NzNDI4MV9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCwgZHVhbF9jb2RlY1tkZXZdKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCBlODc2YjMyLi5jOWIzZTNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTg4LDkgKzg4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfY3M0Nnh4X2NyZWF0ZShjYXJkLCBwY2ksCiAJCQkJICAgICBleHRlcm5hbF9hbXBbZGV2XSwgdGhpbmtwYWRbZGV2XSwKIAkJCQkgICAgICZjaGlwKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCmluZGV4IDhhYjA3YWEuLjFiZTk2ZWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkgKiAgQUNTREEgPSBTdGF0dXMgRGF0YSBSZWdpc3RlciA9IDQ3NGgKIAkgKi8KICNpZiAwCi0JcHJpbnRrKCJlKSByZWcgPSAweCV4LCB2YWwgPSAweCV4LCBCQTBfQUNDQUQgPSAweCV4XG4iLCByZWcsCisJcHJpbnRrKEtFUk5fREVCVUcgImUpIHJlZyA9IDB4JXgsIHZhbCA9IDB4JXgsIEJBMF9BQ0NBRCA9IDB4JXhcbiIsIHJlZywKIAkJCXNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfQUNTREEpLAogCQkJc25kX2NzNDZ4eF9wZWVrQkEwKGNoaXAsIEJBMF9BQ0NBRCkpOwogI2VuZGlmCkBAIC00MjgsOCArNDI4LDggQEAKIAl9CiAgIAogCWlmKHN0YXR1cyAmIFNFUkJTVF9XQlNZKSB7Ci0JCXNuZF9wcmludGsoIEtFUk5fRVJSICJjczQ2eHg6IGZhaWx1cmUgd2FpdGluZyBmb3IgRklGTyBjb21tYW5kIHRvIGNvbXBsZXRlXG4iKTsKLQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjczQ2eHg6IGZhaWx1cmUgd2FpdGluZyBmb3IgIgorCQkJICAgIkZJRk8gY29tbWFuZCB0byBjb21wbGV0ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmggYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaAppbmRleCAwMThhN2RlLi40ZWI1NWFhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaAorKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaApAQCAtNjIsNyArNjIsMTEgQEAKIAl1bnNpZ25lZCBpbnQgYmFuayA9IHJlZyA+PiAxNjsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcmVnICYgMHhmZmZmOwogCi0JLyppZiAoYmFuayA9PSAwKSBwcmludGsoInNuZF9jczQ2eHhfcG9rZTogJTA0WCAtICUwOFhcbiIscmVnID4+IDIsdmFsKTsgKi8KKwkvKgorCWlmIChiYW5rID09IDApCisJCXByaW50ayhLRVJOX0RFQlVHICJzbmRfY3M0Nnh4X3Bva2U6ICUwNFggLSAlMDhYXG4iLAorCQkgICAgICAgcmVnID4+IDIsdmFsKTsKKwkqLwogCXdyaXRlbCh2YWwsIGNoaXAtPnJlZ2lvbi5pZHhbYmFuaysxXS5yZW1hcF9hZGRyICsgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzMC5jIGIvc291bmQvcGNpL2NzNTUzMC5jCmluZGV4IDZkZWE1YjUuLmRjNDY0MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzAuYworKysgYi9zb3VuZC9wY2kvY3M1NTMwLmMKQEAgLTI1OCwxMCArMjU4LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfY3M1NTMwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwppbmRleCA4MjZlNmRlLi5jODllZDFmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYworKysgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jczU1MzVhdWRpb19pbnRlcnJ1cHQsCiAJCQlJUlFGX1NIQVJFRCwgIkNTNTUzNSBBdWRpbyIsIGNzNTUzNWF1KSkgewotCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBzbmRmYWlsOwogCX0KQEAgLTM1Myw5ICszNTMsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2NzNTUzNWF1ZGlvX2NyZWF0ZShjYXJkLCBwY2ksICZjczU1MzVhdSkpIDwgMCkKIAkJZ290byBwcm9iZWZhaWxfb3V0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZSBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKaW5kZXggN2I1NzZhZS4uMTM2MWRlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw4IEBACiBzbmQtaW5kaWdvLW9ianMgOj0gaW5kaWdvLm8KIHNuZC1pbmRpZ29pby1vYmpzIDo9IGluZGlnb2lvLm8KIHNuZC1pbmRpZ29kai1vYmpzIDo9IGluZGlnb2RqLm8KK3NuZC1pbmRpZ29pb3gtb2JqcyA6PSBpbmRpZ29pb3gubworc25kLWluZGlnb2RqeC1vYmpzIDo9IGluZGlnb2RqeC5vCiAKIG9iai0kKENPTkZJR19TTkRfREFSTEEyMCkgKz0gc25kLWRhcmxhMjAubwogb2JqLSQoQ09ORklHX1NORF9HSU5BMjApICs9IHNuZC1naW5hMjAubwpAQCAtMjgsMyArMzAsNSBAQAogb2JqLSQoQ09ORklHX1NORF9JTkRJR08pICs9IHNuZC1pbmRpZ28ubwogb2JqLSQoQ09ORklHX1NORF9JTkRJR09JTykgKz0gc25kLWluZGlnb2lvLm8KIG9iai0kKENPTkZJR19TTkRfSU5ESUdPREopICs9IHNuZC1pbmRpZ29kai5vCitvYmotJChDT05GSUdfU05EX0lORElHT0lPWCkgKz0gc25kLWluZGlnb2lveC5vCitvYmotJChDT05GSUdfU05EX0lORElHT0RKWCkgKz0gc25kLWluZGlnb2RqeC5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCmluZGV4IDQxN2UyNWEuLjU3OTY3ZTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC01Niw3ICs1Niw3IEBACiAJfQogCiAJY2hpcC0+Y29tbV9wYWdlLT5lM2dfZnJxX3JlZ2lzdGVyID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigoRTNHX01BR0lDX05VTUJFUiAvIDQ4MDAwKSAtIDIpOworCQljcHVfdG9fbGUzMigoRTNHX01BR0lDX05VTUJFUiAvIDQ4MDAwKSAtIDIpOwogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IDhkYmM1YzQuLmRhMjA2NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtOTUwLDYgKzk1MCw4IEBACiAJQ29udHJvbCBpbnRlcmZhY2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCisKIC8qKioqKioqKioqKioqKioqKioqIFBDTSBvdXRwdXQgdm9sdW1lICoqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNuZF9lY2hvX291dHB1dF9nYWluX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQpAQCAtMTAwMSwxOCArMTAwMyw2IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLSNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCi0vKiBPbiBWbWl4ZXIgY2FyZHMgdGhpcyBvbmUgY29udHJvbHMgdGhlIGxpbmUtb3V0IHZvbHVtZSAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4gX19kZXZpbml0ZGF0YSA9IHsKLQkubmFtZSA9ICJMaW5lIFBsYXliYWNrIFZvbHVtZSIsCi0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCi0JLmluZm8gPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvLAotCS5nZXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9nZXQsCi0JLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKLQkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAotfTsKLSNlbHNlCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fcGNtX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xMDIyLDYgKzEwMTIsNyBAQAogCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCiAJLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKIH07CisKICNlbmRpZgogCiAKQEAgLTE5OTcsOSArMTk4OCw5IEBACiAKIAlERV9JTklUKCgiRWNob2F1ZGlvIGRyaXZlciBzdGFydGluZy4uLlxuIikpOwogCWkgPSAwOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOwogCkBAIC0yMDM3LDggKzIwMjgsNiBAQAogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgogCXNuZF9lY2hvX3ZtaXhlci5jb3VudCA9IG51bV9waXBlc19vdXQoY2hpcCkgKiBudW1fYnVzc2VzX291dChjaGlwKTsKLQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiwgY2hpcCkpKSA8IDApCi0JCWdvdG8gY3RsX2Vycm9yOwogCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob192bWl4ZXIsIGNoaXApKSkgPCAwKQogCQlnb3RvIGN0bF9lcnJvcjsKICNlbHNlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAppbmRleCAxYzg4ZTA1Li5mOTQ5MGFlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTE4OSw2ICsxODksOSBAQAogI2RlZmluZSBJTkRJR08JCQkweDAwOTAKICNkZWZpbmUgSU5ESUdPX0lPCQkweDAwYTAKICNkZWZpbmUgSU5ESUdPX0RKCQkweDAwYjAKKyNkZWZpbmUgREM4CQkJMHgwMGMwCisjZGVmaW5lIElORElHT19JT1gJCTB4MDBkMAorI2RlZmluZSBJTkRJR09fREpYCQkweDAwZTAKICNkZWZpbmUgRUNITzNHCQkJMHgwMTAwCiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggYzM3MzZiYi4uZTMyYTc0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCkBAIC00MCw4ICs0MCw3IEBACiAJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQogCQlyZXR1cm4gLUVJTzsKIAotCWNoaXAtPmNvbW1fcGFnZS0+ZXh0X2JveF9zdGF0dXMgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEUzR19BU0lDX05PVF9MT0FERUQpOworCWNoaXAtPmNvbW1fcGFnZS0+ZXh0X2JveF9zdGF0dXMgPSBjcHVfdG9fbGUzMihFM0dfQVNJQ19OT1RfTE9BREVEKTsKIAljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOwogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKIAlzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVEVTVF9BU0lDKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKaW5kZXggYmUwZTE4MS4uNGRmNTFlZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMKQEAgLTkyNiwxMSArOTI2LDExIEBACiAKIAkvKiBJbml0IHRoZSBjb21tIHBhZ2UgKi8KIAljaGlwLT5jb21tX3BhZ2UtPmNvbW1fc2l6ZSA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKwkJY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKIAljaGlwLT5jb21tX3BhZ2UtPmhhbmRzaGFrZSA9IDB4ZmZmZmZmZmY7CiAJY2hpcC0+Y29tbV9wYWdlLT5taWRpX291dF9mcmVlX2NvdW50ID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfTUlESV9PVVRfRklGT19TSVpFKTsKLQljaGlwLT5jb21tX3BhZ2UtPnNhbXBsZV9yYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMig0NDEwMCk7CisJCWNwdV90b19sZTMyKERTUF9NSURJX09VVF9GSUZPX1NJWkUpOworCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMig0NDEwMCk7CiAJY2hpcC0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKIAogCS8qIFNldCBsaW5lIGxldmVscyBzbyB3ZSBkb24ndCBibGFzdCBhbnkgaW5wdXRzIG9uIHN0YXJ0dXAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvX2RzcC5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmgKaW5kZXggZTM1MmYzYS4uY2I3ZDc1YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmgKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmgKQEAgLTU3Niw4ICs1NzYsMTMgQEAKICNkZWZpbmUgRTNHX0FTSUNfTk9UX0xPQURFRAkJMHhmZmZmCiAjZGVmaW5lIEUzR19CT1hfVFlQRV9NQVNLCQkweGYwCiAKLSNkZWZpbmUgRVhUXzNHQk9YX05DCQkJMHgwMQotI2RlZmluZSBFWFRfM0dCT1hfTk9UX1NFVAkJMHgwMgorLyogSW5kaWdvIGV4cHJlc3MgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgKi8KKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfMzIwMDAJCTB4MDIKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfNDQxMDAJCTB4MDEKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfNDgwMDAJCTB4MDAKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVECTB4MTAKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfUVVBRF9TUEVFRAkweDA0CisjZGVmaW5lIElORElHT19FWFBSRVNTX0NMT0NLX01BU0sJMHgxNwogCiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCmluZGV4IGRiNmM5NTIuLjNmMWU3NDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCkBAIC0yMDgsMTAgKzIwOCwxMCBAQAogCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgJWRcbiIsIHByb2YpKTsKIAlpZiAocHJvZikKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAllbHNlCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KLQkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOwogCXJldHVybiB1cGRhdGVfZmxhZ3MoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCmluZGV4IGYwNWUzOWYuLjBiMmNkOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jCkBAIC02MywxOCArNjMsNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JLyogRGVmYXVsdCByb3V0aW5nIG9mIHRoZSB2aXJ0dWFsIGNoYW5uZWxzOiBhbGwgdmNoYW5uZWxzIGFyZSByb3V0ZWQKLQl0byB0aGUgc3RlcmVvIG91dHB1dCAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiNjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgcmF0ZSkKK3sKKwl1MzIgY2xvY2ssIGNvbnRyb2xfcmVnLCBvbGRfY29udHJvbF9yZWc7CisKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCisJb2xkX2NvbnRyb2xfcmVnID0gbGUzMl90b19jcHUoY2hpcC0+Y29tbV9wYWdlLT5jb250cm9sX3JlZ2lzdGVyKTsKKwljb250cm9sX3JlZyA9IG9sZF9jb250cm9sX3JlZyAmIH5JTkRJR09fRVhQUkVTU19DTE9DS19NQVNLOworCisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAzMjAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU18zMjAwMDsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180NDEwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180ODAwMDsKKwkJYnJlYWs7CisJY2FzZSA2NDAwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU18zMjAwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDQxMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwljYXNlIDk2MDAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ4MDAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29udHJvbF9yZWcgfD0gY2xvY2s7CisJaWYgKGNvbnRyb2xfcmVnICE9IG9sZF9jb250cm9sX3JlZykgeworCQljaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIgPSBjcHVfdG9fbGUzMihjb250cm9sX3JlZyk7CisJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKKwkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOworCQlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9DTE9DS1MpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRoaXMgZnVuY3Rpb24gcm91dGVzIHRoZSBzb3VuZCBmcm9tIGEgdmlydHVhbCBjaGFubmVsIHRvIGEgcmVhbCBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsIHUxNiBwaXBlLAorCQkJICAgaW50IGdhaW4pCit7CisJaW50IGluZGV4OworCisJaWYgKHNuZF9CVUdfT04ocGlwZSA+PSBudW1fcGlwZXNfb3V0KGNoaXApIHx8CisJCSAgICAgICBvdXRwdXQgPj0gbnVtX2J1c3Nlc19vdXQoY2hpcCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlwLT52bWl4ZXJfZ2FpbltvdXRwdXRdW3BpcGVdID0gZ2FpbjsKKwlpbmRleCA9IG91dHB1dCAqIG51bV9waXBlc19vdXQoY2hpcCkgKyBwaXBlOworCWNoaXAtPmNvbW1fcGFnZS0+dm1peGVyW2luZGV4XSA9IGdhaW47CisKKwlERV9BQ1QoKCJzZXRfdm1peGVyX2dhaW46IHBpcGUgJWQsIG91dCAlZCA9ICVkXG4iLCBwaXBlLCBvdXRwdXQsIGdhaW4pKTsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIFRlbGwgdGhlIERTUCB0byByZWFkIGFuZCB1cGRhdGUgdmlydHVhbCBtaXhlciBsZXZlbHMgaW4gY29tbSBwYWdlLiAqLworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19TRVRfVk1JWEVSX0dBSU4pOworfQorCisKKworc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworfQorCisKKworLyogVGhlIEluZGlnb0lPIGhhcyBubyBBU0lDLiBKdXN0IGRvIG5vdGhpbmcgKi8KK3N0YXRpYyBpbnQgbG9hZF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwppbmRleCA5MDczMGE1Li4wODM5MjkxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKQEAgLTYzLDE4ICs2Myw2IEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IHZjaGFubmVscyAwLTMgYW5kCi0JdmNoYW5uZWxzIDQtNyBhcmUgcm91dGVkIHRvIHJlYWwgY2hhbm5lbHMgMC00ICovCi0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgMiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDMsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA0LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDYsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA3LCAwKTsKLQllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDgyZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNkZWZpbmUgSU5ESUdPX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9JTkRJR09fREpYCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkluZGlnbyBESngiCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVVBFUl9JTlRFUkxFQVZFCisjZGVmaW5lIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAwICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JOAkvKiAwICovCisjZGVmaW5lIFBYX05VTQkJOAorCisvKiBCdXMgaW5kZXhlcyAqLworI2RlZmluZSBCWF9BTkFMT0dfT1VUCTAJLyogNCAqLworI2RlZmluZSBCWF9ESUdJVEFMX09VVAk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9ESUdJVEFMX0lOCTQJLyogMCAqLworI2RlZmluZSBCWF9OVU0JCTQKKworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9pbmRpZ29fZGp4X2RzcC5mdyIpOworCisjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKKyNkZWZpbmUgRldfSU5ESUdPX0RKWF9EU1AJMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKKwl7MCwgImxvYWRlcl9kc3AuZncifSwKKwl7MCwgImluZGlnb19kanhfZHNwLmZ3In0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKKwl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEUwLCAwLCAwLCAwfSwJLyogSW5kaWdvIERKeCovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzk2MDAwLAorCS5yYXRlX21pbiA9IDMyMDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA0LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCit9OworCisjaW5jbHVkZSAiaW5kaWdvZGp4X2RzcC5jIgorI2luY2x1ZGUgImluZGlnb19leHByZXNzX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5MWZjMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgRWNobyBEaWdpdGFsIEF1ZGlvJ3MgZ2VuZXJpYyBkcml2ZXIgbGlicmFyeS4KK0NvcHlyaWdodCBFY2hvIERpZ2l0YWwgQXVkaW8gQ29ycG9yYXRpb24gKGMpIDE5OTggLSAyMDA1CitBbGwgcmlnaHRzIHJlc2VydmVkCit3d3cuZWNob2F1ZGlvLmNvbQorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgVHJhbnNsYXRpb24gZnJvbSBDKysgYW5kIGFkYXB0YXRpb24gZm9yIHVzZSBpbiBBTFNBLURyaXZlcgorIHdlcmUgbWFkZSBieSBHaXVsaWFubyBQb2NoaW5pIDxwb2NoaW5pQHNoaW55Lml0PgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CitzdGF0aWMgaW50IHNldF92bWl4ZXJfZ2FpbihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgb3V0cHV0LAorCQkJICAgdTE2IHBpcGUsIGludCBnYWluKTsKKworCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGRldmljZV9pZCwgdTE2IHN1YmRldmljZV9pZCkKK3sKKwlpbnQgZXJyOworCisJREVfSU5JVCgoImluaXRfaHcoKSAtIEluZGlnbyBESnhcbiIpKTsKKwlpZiAoc25kX0JVR19PTigoc3ViZGV2aWNlX2lkICYgMHhmZmYwKSAhPSBJTkRJR09fREpYKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBpbml0X2RzcF9jb21tX3BhZ2UoY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJREVfSU5JVCgoImluaXRfaHcgLSBjb3VsZCBub3QgaW5pdGlhbGl6ZSBEU1AgY29tbSBwYWdlXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOworCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKKwljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fREpYX0RTUF07CisJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCisJICAgd29ya3MgT0sgKi8KKwljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CisJY2hpcC0+aW5wdXRfY2xvY2tfdHlwZXMgPSBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKKworCWVyciA9IGxvYWRfZmlybXdhcmUoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisKKwllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYwppbmRleCBhN2UwOWVjLi4wNjA0YzhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKQEAgLTYzLDE4ICs2Myw2IEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IGFsbCB2Y2hhbm5lbHMgYXJlIHJvdXRlZAotCXRvIHRoZSBzdGVyZW8gb3V0cHV0ICovCi0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDMsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA0LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDYsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA3LCAwKTsKLQllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJlZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqICBBTFNBIGRyaXZlciBmb3IgRWNob2F1ZGlvIHNvdW5kY2FyZHMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNkZWZpbmUgSU5ESUdPX0ZBTUlMWQorI2RlZmluZSBFQ0hPQ0FSRF9JTkRJR09fSU9YCisjZGVmaW5lIEVDSE9DQVJEX05BTUUgIkluZGlnbyBJT3giCisjZGVmaW5lIEVDSE9DQVJEX0hBU19NT05JVE9SCisjZGVmaW5lIEVDSE9DQVJEX0hBU19TVVBFUl9JTlRFUkxFQVZFCisjZGVmaW5lIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKKworLyogUGlwZSBpbmRleGVzICovCisjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCisjZGVmaW5lIFBYX0RJR0lUQUxfT1VUCTgJLyogMCAqLworI2RlZmluZSBQWF9BTkFMT0dfSU4JOAkvKiAyICovCisjZGVmaW5lIFBYX0RJR0lUQUxfSU4JMTAJLyogMCAqLworI2RlZmluZSBQWF9OVU0JCTEwCisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTIJLyogMCAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JMgkvKiAyICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JNAkvKiAwICovCisjZGVmaW5lIEJYX05VTQkJNAorCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJlY2hvYXVkaW8uaCIKKworTU9EVUxFX0ZJUk1XQVJFKCJlYS9sb2FkZXJfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2luZGlnb19pb3hfZHNwLmZ3Iik7CisKKyNkZWZpbmUgRldfMzYxX0xPQURFUgkJMAorI2RlZmluZSBGV19JTkRJR09fSU9YX0RTUAkxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAibG9hZGVyX2RzcC5mdyJ9LAorCXswLCAiaW5kaWdvX2lveF9kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwRDAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU94ICovCisJezAsfQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9za2VsID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJULAorCS5mb3JtYXRzID0JU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfQkUsCisJLnJhdGVzID0gCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCVNORFJWX1BDTV9SQVRFXzk2MDAwLAorCS5yYXRlX21pbiA9IDMyMDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5jaGFubmVsc19taW4gPSAxLAorCS5jaGFubmVsc19tYXggPSA4LAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gMjYyMTQ0LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMzIsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMzEwNzIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyMjAsCit9OworCisjaW5jbHVkZSAiaW5kaWdvaW94X2RzcC5jIgorI2luY2x1ZGUgImluZGlnb19leHByZXNzX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpb19kc3AuYyIKKyNpbmNsdWRlICJlY2hvYXVkaW8uYyIKKwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveF9kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzU3NTIxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDUKK0FsbCByaWdodHMgcmVzZXJ2ZWQKK3d3dy5lY2hvYXVkaW8uY29tCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsCisJCQkgICB1MTYgcGlwZSwgaW50IGdhaW4pOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gSW5kaWdvIElPeFxuIikpOworCWlmIChzbmRfQlVHX09OKChzdWJkZXZpY2VfaWQgJiAweGZmZjApICE9IElORElHT19JT1gpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IGluaXRfZHNwX2NvbW1fcGFnZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlERV9JTklUKCgiaW5pdF9odyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIERTUCBjb21tIHBhZ2VcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19JT1hfRFNQXTsKKwkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKKwkgICB3b3JrcyBPSyAqLworCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9IEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworCisJZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKKworCWVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwppbmRleCBlZGU3NWM2Li44Mzc1MGU5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCkBAIC0yODQsMTAgKzI4NCwxMCBAQAogCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgJWRcbiIsIHByb2YpKTsKIAlpZiAocHJvZikKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAllbHNlCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KLQkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOwogCXJldHVybiB1cGRhdGVfZmxhZ3MoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYV9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCmluZGV4IDIyNzM4NjYuLjU1MTQwNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jCkBAIC02OSwxOCArNjksNiBAQAogCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkpCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IHZjaGFubmVscyAwLTMgZ28gdG8gYW5hbG9nCi0Jb3V0cHV0cyBhbmQgdmNoYW5uZWxzIDQtNyBnbyB0byBTL1BESUYgb3V0cHV0cyAqLwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAwLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDIsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAzLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDUsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA2LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNywgMCk7Ci0JZXJyID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjIyLDEwICsyMTAsMTAgQEAKIAlERV9BQ1QoKCJzZXRfcHJvZmVzc2lvbmFsX3NwZGlmICVkXG4iLCBwcm9mKSk7CiAJaWYgKHByb2YpCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgfD0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CiAJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gcHJvZjsKIAlyZXR1cm4gdXBkYXRlX2ZsYWdzKGNoaXApOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYwppbmRleCA3N2JmMmE4Li5hOTUzZDE0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAJaWYgKGVuYWJsZSkgewogCQljaGlwLT5tdGNfc3RhdGUgPSBNSURJX0lOX1NUQVRFX05PUk1BTDsKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKKwkJCWNwdV90b19sZTMyKERTUF9GTEFHX01JRElfSU5QVVQpOwogCX0gZWxzZQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzICY9Ci0JCQl+X19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19NSURJX0lOUFVUKTsKIAogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKIAlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9GTEFHUyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggODM1NGMxYS4uYzdmM2I5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtMTE0LDkgKzExNCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmIChtYXhfYnVmZmVyX3NpemVbZGV2XSA8IDMyKQogCQltYXhfYnVmZmVyX3NpemVbZGV2XSA9IDMyOwogCWVsc2UgaWYgKG1heF9idWZmZXJfc2l6ZVtkZXZdID4gMTAyNCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfY2FsbGJhY2suYwppbmRleCAwZTY0OWRjLi43ZWY5NDlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9jYWxsYmFjay5jCkBAIC0xMDMsNyArMTAzLDEwIEBACiAJCQlpbnQgY2g7CiAJCQl2cCA9ICZlbXUtPnZvaWNlc1tiZXN0W2ldLnZvaWNlXTsKIAkJCWlmICgoY2ggPSB2cC0+Y2gpIDwgMCkgewotCQkJCS8vcHJpbnRrKCJzeW50aF9nZXRfdm9pY2U6IGNoIDwgMCAoJWQpID8/IiwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJzeW50aF9nZXRfdm9pY2U6IGNoIDwgMCAoJWQpID8/IiwgaSk7CisJCQkJKi8KIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXZwLT5lbXUtPm51bV92b2ljZXMtLTsKQEAgLTMzNSw3ICszMzgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAllbWVtLT5tYXBfbG9ja2VkKys7CiAJaWYgKHNuZF9lbXUxMGsxX21lbWJsa19tYXAoaHcsIGVtZW0pIDwgMCkgewotCQkvLyBwcmludGsoImVtdTogY2Fubm90IG1hcCFcbiIpOworCQkvKiBwcmludGsoS0VSTl9FUlIgImVtdTogY2Fubm90IG1hcCFcbiIpOyAqLwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWFwcGVkX29mZnNldCA9IHNuZF9lbXUxMGsxX21lbWJsa19vZmZzZXQoZW1lbSkgPj4gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggMTAxYTFjMS4uZjE4YmQ2MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTcxMSw4ICs3MTEsNyBAQAogc3RhdGljIGludCBlbXUxMDEwX2Zpcm13YXJlX3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBzbmRfZW11MTBrMSAqZW11ID0gZGF0YTsKLQlpbnQgdG1wLCB0bXAyOwotCWludCByZWc7CisJdTMyIHRtcCwgdG1wMiwgcmVnOwogCWludCBlcnI7CiAKIAlmb3IgKDs7KSB7CkBAIC03NTgsNyArNzU3LDggQEAKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBBdWRpbyBEb2NrIEZpcm13YXJlIGxvYWRlZFxuIik7CiAJCQlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfRE9DS19NQUpPUl9SRVYsICZ0bXApOwogCQkJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0RPQ0tfTUlOT1JfUkVWLCAmdG1wMik7Ci0JCQlzbmRfcHJpbnRrKCJBdWRpbyBEb2NrIHZlcjolZC4lZFxuIiwgdG1wLCB0bXAyKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJBdWRpbyBEb2NrIHZlcjogJXUuJXVcbiIsCisJCQkJICAgdG1wLCB0bXAyKTsKIAkJCS8qIFN5bmMgY2xvY2tpbmcgYmV0d2VlbiAxMDEwIGFuZCBEb2NrICovCiAJCQkvKiBBbGxvdyBETEwgdG8gc2V0dGxlICovCiAJCQltc2xlZXAoMTApOwpAQCAtODA0LDggKzgwNCw3IEBACiBzdGF0aWMgaW50IHNuZF9lbXUxMGsxX2VtdTEwMTBfaW5pdChzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgdG1wLCB0bXAyOwotCWludCByZWc7CisJdTMyIHRtcCwgdG1wMiwgcmVnOwogCWludCBlcnI7CiAJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogCkBAIC04ODcsNyArODg2LDcgQEAKIAlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZW11MTAxMDogSGFuYSBGaXJtd2FyZSBsb2FkZWRcbiIpOwogCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9IQU5BX01BSk9SX1JFViwgJnRtcCk7CiAJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0hBTkFfTUlOT1JfUkVWLCAmdG1wMik7Ci0Jc25kX3ByaW50aygiZW11MTAxMDogSGFuYSB2ZXJzaW9uOiAlZC4lZFxuIiwgdG1wLCB0bXAyKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZW11MTAxMDogSGFuYSB2ZXJzaW9uOiAldS4ldVxuIiwgdG1wLCB0bXAyKTsKIAkvKiBFbmFibGUgNDhWb2x0IHBvd2VyIHRvIEF1ZGlvIERvY2sgKi8KIAlzbmRfZW11MTAxMF9mcGdhX3dyaXRlKGVtdSwgRU1VX0hBTkFfRE9DS19QV1IsIEVNVV9IQU5BX0RPQ0tfUFdSX09OKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggNWZmNGRiYi4uMzE1NDJhZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0xNTQ0LDkgKzE1NDQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2VtdTEwazF4X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwppbmRleCA3ZGJhMDhmLi4xOTFlMWNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKQEAgLTE1MTksNyArMTUxOSw3IEBACiAJLyogQV9QVVRfU1RFUkVPX09VVFBVVChBX0VYVE9VVF9GUk9OVF9MLCBBX0VYVE9VVF9GUk9OVF9SLCBwbGF5YmFjayArIFNORF9FTVUxMEsxX1BMQVlCQUNLX0NIQU5ORUxTKTsgKi8KIAlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+ZW11X21vZGVsKSB7CiAJCS8qIEVNVTEwMTAgT3V0cHV0cyBmcm9tIFBDTSBGcm9udCwgUmVhciwgQ2VudGVyLCBMRkUsIFNpZGUgKi8KLQkJc25kX3ByaW50aygiRU1VIG91dHB1dHMgb25cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRU1VIG91dHB1dHMgb25cbiIpOwogCQlmb3IgKHogPSAwOyB6IDwgODsgeisrKSB7CiAJCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+Y2EwMTA4X2NoaXApIHsKIAkJCQlBX09QKGljb2RlLCAmcHRyLCBpQUNDMywgQTNfRU1VMzJPVVQoeiksIEFfR1BSKHBsYXliYWNrICsgU05EX0VNVTEwSzFfUExBWUJBQ0tfQ0hBTk5FTFMgKyB6KSwgQV9DXzAwMDAwMDAwLCBBX0NfMDAwMDAwMDApOwpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAKIAogCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5lbXVfbW9kZWwpIHsKIAkJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmNhMDEwOF9jaGlwKSB7Ci0JCQlzbmRfcHJpbnRrKCJFTVUyIGlucHV0cyBvblxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRU1VMiBpbnB1dHMgb25cbiIpOwogCQkJZm9yICh6ID0gMDsgeiA8IDB4MTA7IHorKykgewogCQkJCXNuZF9lbXUxMGsxX2F1ZGlneV9kc3BfY29udmVydF8zMl90b18yeDE2KCBpY29kZSwgJnB0ciwgdG1wLCAKIAkJCQkJCQkJCWJpdF9zaGlmdGVyMTYsCkBAIC0xNTc1LDEwICsxNTc1LDEzIEBACiAJCQkJCQkJCQlBX0ZYQlVTMih6KjIpICk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKCJFTVUgaW5wdXRzIG9uXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUgaW5wdXRzIG9uXG4iKTsKIAkJCS8qIENhcHR1cmUgMTYgKG9yaWdpbmFsbHkgOCkgY2hhbm5lbHMgb2YgUzMyX0xFIHNvdW5kICovCiAKLQkJCS8qIHByaW50aygiZW11ZnguYzogZ3ByPTB4JXgsIHRtcD0weCV4XG4iLGdwciwgdG1wKTsgKi8KKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZW11ZnguYzogZ3ByPTB4JXgsIHRtcD0weCV4XG4iLAorCQkJICAgICAgIGdwciwgdG1wKTsKKwkJCSovCiAJCQkvKiBGb3IgdGhlIEVNVTEwMTA6IEhvdyB0byBnZXQgMzJiaXQgdmFsdWVzIGZyb20gdGhlIERTUC4gSGlnaCAxNmJpdHMgaW50byBMLCBsb3cgMTZiaXRzIGludG8gUi4gKi8KIAkJCS8qIEFfUDE2VklOKDApIGlzIGRlbGF5ZWQgYnkgb25lIHNhbXBsZSwKIAkJCSAqIHNvIGFsbCBvdGhlciBBX1AxNlZJTiBjaGFubmVscyB3aWxsIG5lZWQgdG8gYWxzbyBiZSBkZWxheWVkCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCmluZGV4IGNmOTI3NmQuLjc4ZjYyZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCkBAIC00NCw3ICs0NCw3IEBACiAJaWYgKGVwY20tPnN1YnN0cmVhbSA9PSBOVUxMKQogCQlyZXR1cm47CiAjaWYgMAotCXByaW50aygiSVJROiBwb3NpdGlvbiA9IDB4JXgsIHBlcmlvZCA9IDB4JXgsIHNpemUgPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJJUlE6IHBvc2l0aW9uID0gMHgleCwgcGVyaW9kID0gMHgleCwgc2l6ZSA9IDB4JXhcbiIsCiAJCQllcGNtLT5zdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LT5wb2ludGVyKGVtdSwgZXBjbS0+c3Vic3RyZWFtKSwKIAkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhlcGNtLT5zdWJzdHJlYW0pLAogCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKGVwY20tPnN1YnN0cmVhbSkpOwpAQCAtMTQ2LDcgKzE0NiwxMSBAQAogCQkJCQkgICAgICAxLAogCQkJCQkgICAgICAmZXBjbS0+ZXh0cmEpOwogCQlpZiAoZXJyIDwgMCkgewotCQkJLyogcHJpbnRrKCJwY21fY2hhbm5lbF9hbGxvYzogZmFpbGVkIGV4dHJhOiB2b2ljZXM9JWQsIGZyYW1lPSVkXG4iLCB2b2ljZXMsIGZyYW1lKTsgKi8KKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX2NoYW5uZWxfYWxsb2M6ICIKKwkJCSAgICAgICAiZmFpbGVkIGV4dHJhOiB2b2ljZXM9JWQsIGZyYW1lPSVkXG4iLAorCQkJICAgICAgIHZvaWNlcywgZnJhbWUpOworCQkJKi8KIAkJCWZvciAoaSA9IDA7IGkgPCB2b2ljZXM7IGkrKykgewogCQkJCXNuZF9lbXUxMGsxX3ZvaWNlX2ZyZWUoZXBjbS0+ZW11LCBlcGNtLT52b2ljZXNbaV0pOwogCQkJCWVwY20tPnZvaWNlc1tpXSA9IE5VTEw7CkBAIC03MzcsNyArNzQxLDEwIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX3BjbV9taXhlciAqbWl4OwogCWludCByZXN1bHQgPSAwOwogCi0JLyogcHJpbnRrKCJ0cmlnZ2VyIC0gZW11MTBrMSA9IDB4JXgsIGNtZCA9ICVpLCBwb2ludGVyID0gJWlcbiIsIChpbnQpZW11LCBjbWQsIHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSkpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXIgLSBlbXUxMGsxID0gMHgleCwgY21kID0gJWksIHBvaW50ZXIgPSAlaVxuIiwKKwkgICAgICAgKGludCllbXUsIGNtZCwgc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKSkKKwkqLwogCXNwaW5fbG9jaygmZW11LT5yZWdfbG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtNzg2LDcgKzc5MywxMCBAQAogCQkvKiBobW0gdGhpcyBzaG91bGQgY2F1c2UgZnVsbCBhbmQgaGFsZiBmdWxsIGludGVycnVwdCB0byBiZSByYWlzZWQ/ICovCiAJCW91dGwoZXBjbS0+Y2FwdHVyZV9pcHIsIGVtdS0+cG9ydCArIElQUik7CiAJCXNuZF9lbXUxMGsxX2ludHJfZW5hYmxlKGVtdSwgZXBjbS0+Y2FwdHVyZV9pbnRlKTsKLQkJLyogcHJpbnRrKCJhZGNjciA9IDB4JXgsIGFkY2JzID0gMHgleFxuIiwgZXBjbS0+YWRjY3IsIGVwY20tPmFkY2JzKTsgKi8KKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFkY2NyID0gMHgleCwgYWRjYnMgPSAweCV4XG4iLAorCQkgICAgICAgZXBjbS0+YWRjY3IsIGVwY20tPmFkY2JzKTsKKwkJKi8KIAkJc3dpdGNoIChlcGNtLT50eXBlKSB7CiAJCWNhc2UgQ0FQVFVSRV9BQzk3QURDOgogCQkJc25kX2VtdTEwazFfcHRyX3dyaXRlKGVtdSwgQURDQ1IsIDAsIGVwY20tPmNhcHR1cmVfY3JfdmFsKTsKQEAgLTg1Nyw3ICs4NjcsMTEgQEAKIAkJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAl9CiAjZW5kaWYKLQkvKiBwcmludGsoInB0ciA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4XG4iLCBwdHIsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAicHRyID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXhcbiIsCisJICAgICAgIHB0ciwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTE1NDYsNyArMTU2MCwxMSBAQAogCQkJCQkJICAgdW5zaWduZWQgaW50IGNvdW50LAogCQkJCQkJICAgdW5zaWduZWQgaW50IHRyYW1fc2hpZnQpCiB7Ci0JLyogcHJpbnRrKCJ0cmFtX3Bva2UxOiBkc3RfbGVmdCA9IDB4JXAsIGRzdF9yaWdodCA9IDB4JXAsIHNyYyA9IDB4JXAsIGNvdW50ID0gMHgleFxuIiwgZHN0X2xlZnQsIGRzdF9yaWdodCwgc3JjLCBjb3VudCk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidHJhbV9wb2tlMTogZHN0X2xlZnQgPSAweCVwLCBkc3RfcmlnaHQgPSAweCVwLCAiCisJICAgICAgICJzcmMgPSAweCVwLCBjb3VudCA9IDB4JXhcbiIsCisJICAgICAgIGRzdF9sZWZ0LCBkc3RfcmlnaHQsIHNyYywgY291bnQpOworCSovCiAJaWYgKCh0cmFtX3NoaWZ0ICYgMSkgPT0gMCkgewogCQl3aGlsZSAoY291bnQtLSkgewogCQkJKmRzdF9sZWZ0LS0gPSAqc3JjKys7CkBAIC0xNjIzLDcgKzE2NDEsMTIgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3BjbSAqcGNtID0gJmVtdS0+Zng4MDEwLnBjbVtzdWJzdHJlYW0tPm51bWJlcl07CiAJdW5zaWduZWQgaW50IGk7CiAJCi0JLyogcHJpbnRrKCJwcmVwYXJlOiBldHJhbV9wYWdlcyA9IDB4JXAsIGRtYV9hcmVhID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4ICgweCV4KVxuIiwgZW11LT5meDgwMTAuZXRyYW1fcGFnZXMsIHJ1bnRpbWUtPmRtYV9hcmVhLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+YnVmZmVyX3NpemUgPDwgMik7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZTogZXRyYW1fcGFnZXMgPSAweCVwLCBkbWFfYXJlYSA9IDB4JXgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCAoMHgleClcbiIsCisJICAgICAgIGVtdS0+Zng4MDEwLmV0cmFtX3BhZ2VzLCBydW50aW1lLT5kbWFfYXJlYSwKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIDw8IDIpOworCSovCiAJbWVtc2V0KCZwY20tPnBjbV9yZWMsIDAsIHNpemVvZihwY20tPnBjbV9yZWMpKTsKIAlwY20tPnBjbV9yZWMuaHdfYnVmZmVyX3NpemUgPSBwY20tPmJ1ZmZlcl9zaXplICogMjsgLyogYnl0ZSBzaXplICovCiAJcGNtLT5wY21fcmVjLnN3X2J1ZmZlcl9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9pby5jIGIvc291bmQvcGNpL2VtdTEwazEvaW8uYwppbmRleCBiNWE4MDJiLi40YmZjMzFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9pby5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKQEAgLTIyNiw3ICsyMjYsOSBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAodGltZW91dCA+IDEwMDApIHsKLSAgICAgICAgICAgICAgICAJCXNuZF9wcmludGsoImVtdTEwazE6STJDOnRpbWVvdXQgc3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiZW11MTBrMTpJMkM6dGltZW91dCBzdGF0dXM9MHgleFxuIiwKKwkJCQkJICAgc3RhdHVzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCmluZGV4IDc0OWEyMWIuLmU2MTdhY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9wY20gKmVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAgIAogCWlmIChlcGNtKSB7Ci0gICAgICAgIAkvL3NuZF9wcmludGsoImVwY20gZnJlZTogJXBcbiIsIGVwY20pOworICAgICAgICAJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGZyZWU6ICVwXG4iLCBlcGNtKTsgKi8KIAkJa2ZyZWUoZXBjbSk7CiAJfQogfQpAQCAtMTgzLDE0ICsxODMsMTYgQEAKIAlpbnQgZXJyOwogCiAJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CisgICAgICAgIC8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7ICovCiAKIAlpZiAoZXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcGNtLT5lbXUgPSBlbXU7CiAJZXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotICAgICAgICAvL3NuZF9wcmludGsoImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLCBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKLSAgCisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLAorCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKKwkqLwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGVwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtOwogICAKQEAgLTIwMCwxMCArMjAyLDE1IEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKICAgICAgICAgY2hhbm5lbC0+dXNlPTE7Ci0JLy9zbmRfcHJpbnRrKCJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLCBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOwotICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKLSAgICAgICAgY2hhbm5lbC0+ZXBjbT1lcGNtOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsCisJCSAgIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisjZW5kaWYgLyogZGVidWcgKi8KKwkvKiBjaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7ICovCisJY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCkBAIC0yMjQsMTQgKzIzMSwxNiBAQAogCWludCBlcnI7CiAKIAllcGNtID0ga3phbGxvYyhzaXplb2YoKmVwY20pLCBHRlBfS0VSTkVMKTsKLQkvL3NuZF9wcmludGsoImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7ICovCiAKIAlpZiAoZXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcGNtLT5lbXUgPSBlbXU7CiAJZXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCS8vc25kX3ByaW50aygiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOwotCisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLAorCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKKwkqLwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGVwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtOwogICAKQEAgLTI0MSwxMCArMjUwLDE1IEBACiAJY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogCWNoYW5uZWwtPnVzZT0xOwotCS8vc25kX3ByaW50aygicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKLQkvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOwotCS8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwotCWNoYW5uZWwtPmVwY209ZXBjbTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLAorCQkgICBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOworCXByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworI2VuZGlmIC8qIGRlYnVnICovCisJLyogY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OyAqLworCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTMzNCw5ICszNDgsMTkgQEAKIAlpbnQgaTsKIAl1MzIgdG1wOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPnAxNnZfYnVmZmVyLmFkZHIsIGVtdS0+cDE2dl9idWZmZXIuYXJlYSwgZW11LT5wMTZ2X2J1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgIgorCQkgICAiZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCQkgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIsCisJCSAgIHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIiwKKwkJICAgZW11LT5wMTZ2X2J1ZmZlci5hZGRyLCBlbXUtPnAxNnZfYnVmZmVyLmFyZWEsCisJCSAgIGVtdS0+cDE2dl9idWZmZXIuYnl0ZXMpOworI2VuZGlmIC8qIGRlYnVnICovCiAJdG1wID0gc25kX2VtdTEwazFfcHRyX3JlYWQoZW11LCBBX1NQRElGX1NBTVBMRVJBVEUsIGNoYW5uZWwpOwogICAgICAgICBzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtMzc5LDcgKzQwMywxNSBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGNoYW5uZWwgPSBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlIC0gZW11LT5wMTZ2X2RldmljZV9vZmZzZXQ7CiAJdTMyIHRtcDsKLQkvL3ByaW50aygicHJlcGFyZSBjYXB0dXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmUgY2FwdHVyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgIgorCSAgICAgICAiZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCSAgICAgICAiZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCSAgICAgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCSAgICAgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJKi8KIAl0bXAgPSBzbmRfZW11MTBrMV9wdHJfcmVhZChlbXUsIEFfU1BESUZfU0FNUExFUkFURSwgY2hhbm5lbCk7CiAgICAgICAgIHN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC00NTksMTMgKzQ5MSwxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UtZW11LT5wMTZ2X2RldmljZV9vZmZzZXQ7Ci0JCS8vc25kX3ByaW50aygicDE2diBjaGFubmVsPSVkXG4iLGNoYW5uZWwpOworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgInAxNnYgY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxPDxjaGFubmVsKTsKIAkJaW50ZSB8PSAoSU5URTJfUExBWUJBQ0tfQ0hfMF9MT09QPDxjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLy9zbmRfcHJpbnRrKCJiYXNpYz0weCV4LCBpbnRlPTB4JXhcbiIsYmFzaWMsIGludGUpOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgaW50ZT0weCV4XG4iLCBiYXNpYywgaW50ZSk7ICovCiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC01NTgsOCArNTkwLDEzIEBACiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnVmZmVyIGNhcHR1cmUgbGltaXRlZCFcbiIpOwogCX0KLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC01OTIsNyArNjI5LDEwIEBACiAJLy8gcmVsZWFzZSB0aGUgZGF0YQogCWlmIChjaGlwLT5wMTZ2X2J1ZmZlci5hcmVhKSB7CiAJCXNuZF9kbWFfZnJlZV9wYWdlcygmY2hpcC0+cDE2dl9idWZmZXIpOwotCQkvL3NuZF9wcmludGsoInBlcmlvZCBsYWJsZXMgZnJlZTogJXBcbiIsICZjaGlwLT5wMTZ2X2J1ZmZlcik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicGVyaW9kIGxhYmxlcyBmcmVlOiAlcFxuIiwKKwkJCSAgICZjaGlwLT5wMTZ2X2J1ZmZlcik7CisJCSovCiAJfQogCXJldHVybiAwOwogfQpAQCAtNjA0LDcgKzY0NCw3IEBACiAJaW50IGVycjsKICAgICAgICAgaW50IGNhcHR1cmU9MTsKICAgCi0JLy9zbmRfcHJpbnRrKCJzbmRfcDE2dl9wY20gY2FsbGVkLiBkZXZpY2U9JWRcbiIsIGRldmljZSk7CisJLyogc25kX3ByaW50aygiS0VSTl9ERUJVRyBzbmRfcDE2dl9wY20gY2FsbGVkLiBkZXZpY2U9JWRcbiIsIGRldmljZSk7ICovCiAJZW11LT5wMTZ2X2RldmljZV9vZmZzZXQgPSBkZXZpY2U7CiAJaWYgKHJwY20pCiAJCSpycGNtID0gTlVMTDsKQEAgLTYzMSw3ICs2NzEsMTAgQEAKIAkJCQkJCQkgc25kX2RtYV9wY2lfZGF0YShlbXUtPnBjaSksIAogCQkJCQkJCSAoKDY1NTM2IC0gNjQpICogOCksICgoNjU1MzYgLSA2NCkgKiA4KSkpIDwgMCkgCiAJCQlyZXR1cm4gZXJyOwotCQkvL3NuZF9wcmludGsoInByZWFsbG9jYXRlIHBsYXliYWNrIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJwcmVhbGxvY2F0ZSBwbGF5YmFjayBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJKi8KIAl9CiAKIAlmb3IgKHN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbTsgCkBAIC02NDIsNyArNjg1LDEwIEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzYgLSA2NCwgNjU1MzYgLSA2NCkpIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCS8vc25kX3ByaW50aygicHJlYWxsb2NhdGUgY2FwdHVyZSBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAicHJlYWxsb2NhdGUgY2FwdHVyZSBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJKi8KIAl9CiAgIAogCWlmIChycGNtKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKaW5kZXggZDczMDBhMS4uMjBiOGRhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCkBAIC01Myw3ICs1MywxMCBAQAogCSpydm9pY2UgPSBOVUxMOwogCWZpcnN0X3ZvaWNlID0gbGFzdF92b2ljZSA9IDA7CiAJZm9yIChpID0gZW11LT5uZXh0X2ZyZWVfdm9pY2UsIGogPSAwOyBqIDwgTlVNX0cgOyBpICs9IG51bWJlciwgaiArPSBudW1iZXIpIHsKLQkJLy8gcHJpbnRrKCJpICVkIGogJWQgbmV4dCBmcmVlICVkIVxuIiwgaSwgaiwgZW11LT5uZXh0X2ZyZWVfdm9pY2UpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiaSAlZCBqICVkIG5leHQgZnJlZSAlZCFcbiIsCisJCSAgICAgICBpLCBqLCBlbXUtPm5leHRfZnJlZV92b2ljZSk7CisJCSovCiAJCWkgJT0gTlVNX0c7CiAKIAkJLyogc3RlcmVvIHZvaWNlcyBtdXN0IGJlIGV2ZW4vb2RkICovCkBAIC03MSw3ICs3NCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKCFza2lwKSB7Ci0JCQkvLyBwcmludGsoImFsbG9jYXRlZCB2b2ljZSAlZFxuIiwgaSk7CisJCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiYWxsb2NhdGVkIHZvaWNlICVkXG4iLCBpKTsgKi8KIAkJCWZpcnN0X3ZvaWNlID0gaTsKIAkJCWxhc3Rfdm9pY2UgPSAoaSArIG51bWJlcikgJSBOVU1fRzsKIAkJCWVtdS0+bmV4dF9mcmVlX3ZvaWNlID0gbGFzdF92b2ljZTsKQEAgLTg0LDcgKzg3LDEwIEBACiAJCiAJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCXZvaWNlID0gJmVtdS0+dm9pY2VzWyhmaXJzdF92b2ljZSArIGkpICUgTlVNX0ddOwotCQkvLyBwcmludGsoInZvaWNlIGFsbG9jIC0gJWksICVpIG9mICVpXG4iLCB2b2ljZS0+bnVtYmVyLCBpZHgtZmlyc3Rfdm9pY2UrMSwgbnVtYmVyKTsKKwkJLyoKKwkJcHJpbnRrKGtFUk5fREVCVUcgInZvaWNlIGFsbG9jIC0gJWksICVpIG9mICVpXG4iLAorCQkgICAgICAgdm9pY2UtPm51bWJlciwgaWR4LWZpcnN0X3ZvaWNlKzEsIG51bWJlcik7CisJCSovCiAJCXZvaWNlLT51c2UgPSAxOwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBFTVUxMEsxX1BDTToKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IDliZjk1MzYuLjE4ZjRkMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtNTg0LDcgKzU4NCw4IEBACiAJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBIWiAvIDEwOwogCiAjaWYgMAotCXByaW50aygiQ09ERUMgV1JJVEU6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXggKDB4JXgpLCBjcmVnID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiQ09ERUMgV1JJVEU6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXggKDB4JXgpLCBjcmVnID0gMHgleFxuIiwKIAkgICAgICAgcmVnLCB2YWwsIEVTXzEzNzBfQ09ERUNfV1JJVEUocmVnLCB2YWwpLCBFU19SRUcoZW5zb25pcSwgMTM3MF9DT0RFQykpOwogI2VuZGlmCiAJZG8gewpAQCAtMjQwOSw5ICsyNDEwLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9lbnNvbmlxX2NyZWF0ZShjYXJkLCBwY2ksICZlbnNvbmlxKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggNGNkOWExZmEuLmRkNjNiMTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTE2NzMsMTggKzE2NzMsMjIgQEAKIAogCXN0YXR1cyA9IGluYihTTElPX1JFRyhjaGlwLCBJUlFDT05UUk9MKSk7CiAjaWYgMAotCXByaW50aygiRXMxOTM4ZGVidWcgLSBpbnRlcnJ1cHQgc3RhdHVzOiA9MHgleFxuIiwgc3RhdHVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiRXMxOTM4ZGVidWcgLSBpbnRlcnJ1cHQgc3RhdHVzOiA9MHgleFxuIiwgc3RhdHVzKTsKICNlbmRpZgogCQogCS8qIEFVRElPIDEgKi8KIAlpZiAoc3RhdHVzICYgMHgxMCkgewogI2lmIDAKLSAgICAgICAgICAgICAgICBwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIGludGVycnVwdFxuIik7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgY291bnQ6ICV1XG4iLAorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgaW50ZXJydXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBjb3VudDogJXVcbiIsCiAJCSAgICAgICBpbncoU0xETV9SRUcoY2hpcCwgRE1BQ09VTlQpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgYmFzZTogJXVcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgYmFzZTogJXVcbiIsCiAJCSAgICAgICBpbmwoU0xETV9SRUcoY2hpcCwgRE1BQUREUikpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBzdGF0dXM6IDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgc3RhdHVzOiAweCV4XG4iLAogCQkgICAgICAgaW5sKFNMRE1fUkVHKGNoaXAsIERNQVNUQVRVUykpKTsKICNlbmRpZgogCQkvKiBjbGVhciBpcnEgKi8KQEAgLTE2OTksMTAgKzE3MDMsMTMgQEAKIAkvKiBBVURJTyAyICovCiAJaWYgKHN0YXR1cyAmIDB4MjApIHsKICNpZiAwCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBpbnRlcnJ1cHRcbiIpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGNvdW50OiAldVxuIiwKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIGludGVycnVwdFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgY291bnQ6ICV1XG4iLAogCQkgICAgICAgaW53KFNMSU9fUkVHKGNoaXAsIEFVRElPMkRNQUNPVU5UKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGJhc2U6ICV1XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGJhc2U6ICV1XG4iLAogCQkgICAgICAgaW5sKFNMSU9fUkVHKGNoaXAsIEFVRElPMkRNQUFERFIpKSk7CiAKICNlbmRpZgpAQCAtMTc5OSw5ICsxODA2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZm9yIChpZHggPSAwOyBpZHggPCA1OyBpZHgrKykgewogCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgaWR4KSA9PSAwIHx8CiAJCSAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwY2ksIGlkeCkgJiBJT1JFU09VUkNFX0lPKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IGU5YzM3OTQuLmRjOTdlODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTI2NDUsOSArMjY0NSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAgICAgICAgICAgICAgICAgCiAJaWYgKHRvdGFsX2J1ZnNpemVbZGV2XSA8IDEyOCkKIAkJdG90YWxfYnVmc2l6ZVtkZXZdID0gMTI4OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCBjMTI5ZjllLi42MGNkYjllIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTQ2OCw5ICsxNDY4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfZm04MDFfY3JlYXRlKGNhcmQsIHBjaSwgdGVhNTc1eF90dW5lcltkZXZdLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCmluZGV4IDk2MGZkNzkuLjRkZTViYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKQEAgLTEzOCw2ICsxMzgsNyBAQAogCiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJlZXAtPmRldik7CiAJCWtmcmVlKGJlZXApOworCQljb2RlYy0+YmVlcCA9IE5VTEw7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCmluZGV4IGI5Njc5ZjAuLjUxYmY2YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKQEAgLTM5LDcgKzM5LDcgQEAKIGludCBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG5pZCk7CiB2b2lkIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKICNlbHNlCi0jZGVmaW5lIHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKC4uLikKKyNkZWZpbmUgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoLi4uKQkJMAogI2RlZmluZSBzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZSguLi4pCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggZDAzZjk5Mi4uYTRlNWU1OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC02NDcsOSArNjQ3LDkgQEAKIAogCXRvdGFsX25vZGVzID0gc25kX2hkYV9nZXRfc3ViX25vZGVzKGNvZGVjLCBBQ19OT0RFX1JPT1QsICZuaWQpOwogCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9ub2RlczsgaSsrLCBuaWQrKykgewotCQl1bnNpZ25lZCBpbnQgZnVuYzsKLQkJZnVuYyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfRlVOQ1RJT05fVFlQRSk7Ci0JCXN3aXRjaCAoZnVuYyAmIDB4ZmYpIHsKKwkJY29kZWMtPmZ1bmN0aW9uX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCisJCQkJCQlBQ19QQVJfRlVOQ1RJT05fVFlQRSkgJiAweGZmOworCQlzd2l0Y2ggKGNvZGVjLT5mdW5jdGlvbl9pZCkgewogCQljYXNlIEFDX0dSUF9BVURJT19GVU5DVElPTjoKIAkJCWNvZGVjLT5hZmcgPSBuaWQ7CiAJCQlicmVhazsKQEAgLTY4MiwxMSArNjgyLDE0MCBAQAogCXJldHVybiAwOwogfQogCisvKiByZWFkIGFsbCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgc2F2ZSBjb2RlYy0+aW5pdF9waW5zICovCitzdGF0aWMgaW50IHJlYWRfcGluX2RlZmF1bHRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWhkYV9uaWRfdCBuaWQgPSBjb2RlYy0+c3RhcnRfbmlkOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKwkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOworCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSAod2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+CisJCQkJQUNfV0NBUF9UWVBFX1NISUZUOworCQlpZiAod2lkX3R5cGUgIT0gQUNfV0lEX1BJTikKKwkJCWNvbnRpbnVlOworCQlwaW4gPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aW5pdF9waW5zKTsKKwkJaWYgKCFwaW4pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcGluLT5uaWQgPSBuaWQ7CisJCXBpbi0+Y2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGxvb2sgdXAgdGhlIGdpdmVuIHBpbiBjb25maWcgbGlzdCBhbmQgcmV0dXJuIHRoZSBpdGVtIG1hdGNoaW5nIHdpdGggTklEICovCitzdGF0aWMgc3RydWN0IGhkYV9waW5jZmcgKmxvb2tfdXBfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgc3RydWN0IHNuZF9hcnJheSAqYXJyYXksCisJCQkJCSBoZGFfbmlkX3QgbmlkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+dXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbShhcnJheSwgaSk7CisJCWlmIChwaW4tPm5pZCA9PSBuaWQpCisJCQlyZXR1cm4gcGluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogd3JpdGUgYSBjb25maWcgdmFsdWUgZm9yIHRoZSBnaXZlbiBOSUQgKi8KK3N0YXRpYyB2b2lkIHNldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY2ZnKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wICsgaSwKKwkJCQkgICAgY2ZnICYgMHhmZik7CisJCWNmZyA+Pj0gODsKKwl9Cit9CisKKy8qIHNldCB0aGUgY3VycmVudCBwaW4gY29uZmlnIHZhbHVlIGZvciB0aGUgZ2l2ZW4gTklELgorICogdGhlIHZhbHVlIGlzIGNhY2hlZCwgYW5kIHJlYWQgdmlhIHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZygpCisgKi8KK2ludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisJdW5zaWduZWQgaW50IG9sZGNmZzsKKworCW9sZGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgbGlzdCwgbmlkKTsKKwlpZiAoIXBpbikgeworCQlwaW4gPSBzbmRfYXJyYXlfbmV3KGxpc3QpOworCQlpZiAoIXBpbikKKwkJCXJldHVybiAtRU5PTUVNOworCQlwaW4tPm5pZCA9IG5pZDsKKwl9CisJcGluLT5jZmcgPSBjZmc7CisKKwkvKiBjaGFuZ2Ugb25seSB3aGVuIG5lZWRlZDsgZS5nLiBpZiB0aGUgcGluY2ZnIGlzIGFscmVhZHkgcHJlc2VudAorCSAqIGluIHVzZXJfcGluc1tdLCBkb24ndCB3cml0ZSBpdAorCSAqLworCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlpZiAob2xkY2ZnICE9IGNmZykKKwkJc2V0X3BpbmNmZyhjb2RlYywgbmlkLCBjZmcpOworCXJldHVybiAwOworfQorCitpbnQgc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXJldHVybiBzbmRfaGRhX2FkZF9waW5jZmcoY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIG5pZCwgY2ZnKTsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyk7CisKKy8qIGdldCB0aGUgY3VycmVudCBwaW4gY29uZmlnIHZhbHVlIG9mIHRoZSBnaXZlbiBwaW4gTklEICovCit1bnNpZ25lZCBpbnQgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAorCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisjZW5kaWYKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+aW5pdF9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyk7CisKKy8qIHJlc3RvcmUgYWxsIGN1cnJlbnQgcGluIGNvbmZpZ3MgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfcGluY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfcGlucy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF9waW5zLCBpKTsKKwkJc2V0X3BpbmNmZyhjb2RlYywgcGluLT5uaWQsCisJCQkgICBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbi0+bmlkKSk7CisJfQorfQogCiBzdGF0aWMgdm9pZCBpbml0X2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUpOwogc3RhdGljIHZvaWQgZnJlZV9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlKTsKIAorLyogcmVzdG9yZSB0aGUgaW5pdGlhbCBwaW4gY2ZncyBhbmQgcmVsZWFzZSBhbGwgcGluY2ZnIGxpc3RzICovCitzdGF0aWMgdm9pZCByZXN0b3JlX2luaXRfcGluY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwkvKiBmaXJzdCBmcmVlIGRyaXZlcl9waW5zIGFuZCB1c2VyX3BpbnMsIHRoZW4gY2FsbCByZXN0b3JlX3BpbmNmZworCSAqIHNvIHRoYXQgb25seSB0aGUgdmFsdWVzIGluIGluaXRfcGlucyBhcmUgcmVzdG9yZWQKKwkgKi8KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmRyaXZlcl9waW5zKTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAorCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+dXNlcl9waW5zKTsKKyNlbmRpZgorCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5pbml0X3BpbnMpOworfQorCiAvKgogICogY29kZWMgZGVzdHJ1Y3RvcgogICovCkBAIC02OTQsNiArODIzLDcgQEAKIHsKIAlpZiAoIWNvZGVjKQogCQlyZXR1cm47CisJcmVzdG9yZV9pbml0X3BpbmNmZ3MoY29kZWMpOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAljYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+cG93ZXJfd29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKGNvZGVjLT5idXMtPndvcmtxKTsKQEAgLTcxMiw2ICs4NDIsOSBAQAogCWtmcmVlKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgaGRhX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGZnLAorCQkJCXVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSk7CisKIC8qKgogICogc25kX2hkYV9jb2RlY19uZXcgLSBjcmVhdGUgYSBIREEgY29kZWMKICAqIEBidXM6IHRoZSBidXMgdG8gYXNzaWduCkBAIC03NTEsNiArODg0LDggQEAKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmFtcF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfY2FjaGVfaGVhZCkpOwogCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bWl4ZXJzLCBzaXplb2Yoc3RydWN0IHNuZF9rY29udHJvbCAqKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aW5pdF9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5kcml2ZXJfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOwogCWlmIChjb2RlYy0+YnVzLT5tb2RlbG5hbWUpIHsKIAkJY29kZWMtPm1vZGVsbmFtZSA9IGtzdHJkdXAoY29kZWMtPmJ1cy0+bW9kZWxuYW1lLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjb2RlYy0+bW9kZWxuYW1lKSB7CkBAIC03ODcsMTUgKzkyMiwxOCBAQAogCXNldHVwX2ZnX25vZGVzKGNvZGVjKTsKIAlpZiAoIWNvZGVjLT5hZmcgJiYgIWNvZGVjLT5tZmcpIHsKIAkJc25kX3ByaW50ZGQoImhkYV9jb2RlYzogbm8gQUZHIG9yIE1GRyBub2RlIGZvdW5kXG4iKTsKLQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JaWYgKHJlYWRfd2lkZ2V0X2NhcHMoY29kZWMsIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZykgPCAwKSB7CisJZXJyID0gcmVhZF93aWRnZXRfY2Fwcyhjb2RlYywgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBtYWxsb2NcbiIpOwotCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKIAl9CisJZXJyID0gcmVhZF9waW5fZGVmYXVsdHMoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOwogCiAJaWYgKCFjb2RlYy0+c3Vic3lzdGVtX2lkKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmc7CkBAIC04MDYsMTIgKzk0NCwxNSBAQAogCWlmIChidXMtPm1vZGVsbmFtZSkKIAkJY29kZWMtPm1vZGVsbmFtZSA9IGtzdHJkdXAoYnVzLT5tb2RlbG5hbWUsIEdGUF9LRVJORUwpOwogCisJLyogcG93ZXItdXAgYWxsIGJlZm9yZSBpbml0aWFsaXphdGlvbiAqLworCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCisJCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAorCQkJICAgIEFDX1BXUlNUX0QwKTsKKwogCWlmIChkb19pbml0KSB7CiAJCWVyciA9IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvcjsKIAl9CiAJc25kX2hkYV9jb2RlY19wcm9jX25ldyhjb2RlYyk7CiAKQEAgLTgyNCw2ICs5NjUsMTAgQEAKIAlpZiAoY29kZWNwKQogCQkqY29kZWNwID0gY29kZWM7CiAJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX25ldyk7CiAKQEAgLTkwNyw2ICsxMDUyLDcgQEAKIAogLyogRklYTUU6IG1vcmUgYmV0dGVyIGhhc2gga2V5PyAqLwogI2RlZmluZSBIREFfSEFTSF9LRVkobmlkLGRpcixpZHgpICh1MzIpKChuaWQpICsgKChpZHgpIDw8IDE2KSArICgoZGlyKSA8PCAyNCkpCisjZGVmaW5lIEhEQV9IQVNIX1BJTkNBUF9LRVkobmlkKSAodTMyKSgobmlkKSArICgweDAyIDw8IDI0KSkKICNkZWZpbmUgSU5GT19BTVBfQ0FQUwkoMTw8MCkKICNkZWZpbmUgSU5GT19BTVBfVk9MKGNoKQkoMSA8PCAoMSArIChjaCkpKQogCkBAIC05OTcsNiArMTE0MywyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyk7CiAKK3UzMiBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfYW1wX2luZm8gKmluZm87CisKKwlpbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9QSU5DQVBfS0VZKG5pZCkpOworCWlmICghaW5mbykKKwkJcmV0dXJuIDA7CisJaWYgKCFpbmZvLT5oZWFkLnZhbCkgeworCQlpbmZvLT5hbXBfY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCWluZm8tPmhlYWQudmFsIHw9IElORk9fQU1QX0NBUFM7CisJfQorCXJldHVybiBpbmZvLT5hbXBfY2FwczsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMpOworCiAvKgogICogcmVhZCB0aGUgY3VycmVudCB2b2x1bWUgdG8gaW5mbwogICogaWYgdGhlIGNhY2hlIGV4aXN0cywgcmVhZCB0aGUgY2FjaGUgdmFsdWUuCkBAIC0xMTIwLDYgKzEyODEsNyBAQAogCXUxNiBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CiAJdTggY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCXUzMiBjYXBzOwogCiAJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIGRpcik7CkBAIC0xMTMxLDYgKzEyOTMsOCBAQAogCQkgICAgICAga2NvbnRyb2wtPmlkLm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKG9mcyA8IGNhcHMpCisJCWNhcHMgLT0gb2ZzOwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwogCXVpbmZvLT5jb3VudCA9IGNocyA9PSAzID8gMiA6IDE7CiAJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKQEAgLTExMzksNiArMTMwMywzMiBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8pOwogCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFkX2FtcF92YWx1ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkgICAgICAgaW50IGNoLCBpbnQgZGlyLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgb2ZzKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdmFsID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCBjaCwgZGlyLCBpZHgpOworCXZhbCAmPSBIREFfQU1QX1ZPTE1BU0s7CisJaWYgKHZhbCA+PSBvZnMpCisJCXZhbCAtPSBvZnM7CisJZWxzZQorCQl2YWwgPSAwOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1cGRhdGVfYW1wX3ZhbHVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkgaW50IGNoLCBpbnQgZGlyLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgb2ZzLAorCQkgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpZiAodmFsID4gMCkKKwkJdmFsICs9IG9mczsKKwlyZXR1cm4gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIGNoLCBkaXIsIGlkeCwKKwkJCQkJSERBX0FNUF9WT0xNQVNLLCB2YWwpOworfQorCiBpbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0xMTQ3LDE0ICsxMzM3LDEzIEBACiAJaW50IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CiAJaW50IGlkeCA9IGdldF9hbXBfaW5kZXgoa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwogCiAJaWYgKGNocyAmIDEpCi0JCSp2YWxwKysgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4KQotCQkJJiBIREFfQU1QX1ZPTE1BU0s7CisJCSp2YWxwKysgPSByZWFkX2FtcF92YWx1ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwgb2ZzKTsKIAlpZiAoY2hzICYgMikKLQkJKnZhbHAgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4KQotCQkJJiBIREFfQU1QX1ZPTE1BU0s7CisJCSp2YWxwID0gcmVhZF9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsIG9mcyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0KTsKQEAgLTExNjcsMTggKzEzNTYsMTcgQEAKIAlpbnQgY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKIAlpbnQgaWR4ID0gZ2V0X2FtcF9pbmRleChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CiAJaW50IGNoYW5nZSA9IDA7CiAKIAlzbmRfaGRhX3Bvd2VyX3VwKGNvZGVjKTsKIAlpZiAoY2hzICYgMSkgewotCQljaGFuZ2UgPSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsCi0JCQkJCQkgIDB4N2YsICp2YWxwKTsKKwkJY2hhbmdlID0gdXBkYXRlX2FtcF92YWx1ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwgb2ZzLCAqdmFscCk7CiAJCXZhbHArKzsKIAl9CiAJaWYgKGNocyAmIDIpCi0JCWNoYW5nZSB8PSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsCi0JCQkJCQkgICAweDdmLCAqdmFscCk7CisJCWNoYW5nZSB8PSB1cGRhdGVfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LCBvZnMsICp2YWxwKTsKIAlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOwogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0xMTkwLDYgKzEzNzgsNyBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWhkYV9uaWRfdCBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCXUzMiBjYXBzLCB2YWwxLCB2YWwyOwogCiAJaWYgKHNpemUgPCA0ICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCkBAIC0xMTk4LDYgKzEzODcsNyBAQAogCXZhbDIgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQ7CiAJdmFsMiA9ICh2YWwyICsgMSkgKiAyNTsKIAl2YWwxID0gLSgoY2FwcyAmIEFDX0FNUENBUF9PRkZTRVQpID4+IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpOworCXZhbDEgKz0gb2ZzOwogCXZhbDEgPSAoKGludCl2YWwxKSAqICgoaW50KXZhbDIpOwogCWlmIChwdXRfdXNlcihTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSwgX3RsdikpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTI2OCw3ICsxNDU4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY3RsX2FkZCk7CiAKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRwogLyogQ2xlYXIgYWxsIGNvbnRyb2xzIGFzc2lnbmVkIHRvIHRoZSBnaXZlbiBjb2RlYyAqLwogdm9pZCBzbmRfaGRhX2N0bHNfY2xlYXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMjc5LDkgKzE0NjgsNTIgQEAKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm1peGVycyk7CiB9CiAKLXZvaWQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKKy8qIHBzZXVkbyBkZXZpY2UgbG9ja2luZworICogdG9nZ2xlIGNhcmQtPnNodXRkb3duIHRvIGFsbG93L2Rpc2FsbG93IHRoZSBkZXZpY2UgYWNjZXNzIChhcyBhIGhhY2spCisgKi8KK3N0YXRpYyBpbnQgaGRhX2xvY2tfZGV2aWNlcyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7Ci0JaW50IGk7CisJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwlpZiAoY2FyZC0+c2h1dGRvd24pIHsKKwkJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2FyZC0+c2h1dGRvd24gPSAxOworCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRhX3VubG9ja19kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCWNhcmQtPnNodXRkb3duID0gMDsKKwlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Cit9CisKK2ludCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNvZGVjLT5idXMtPmNhcmQ7CisJaW50IGksIHBjbTsKKworCWlmIChoZGFfbG9ja19kZXZpY2VzKGNhcmQpIDwgMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKiBjaGVjayB3aGV0aGVyIHRoZSBjb2RlYyBpc24ndCB1c2VkIGJ5IGFueSBtaXhlciBvciBQQ00gc3RyZWFtcyAqLworCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+Y3RsX2ZpbGVzKSkgeworCQloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWZvciAocGNtID0gMDsgcGNtIDwgY29kZWMtPm51bV9wY21zOyBwY20rKykgeworCQlzdHJ1Y3QgaGRhX3BjbSAqY3BjbSA9ICZjb2RlYy0+cGNtX2luZm9bcGNtXTsKKwkJaWYgKCFjcGNtLT5wY20pCisJCQljb250aW51ZTsKKwkJaWYgKGNwY20tPnBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW1fb3BlbmVkIHx8CisJCSAgICBjcGNtLT5wY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtX29wZW5lZCkgeworCQkJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCS8qIE9LLCBsZXQgaXQgZnJlZSAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvZGVjLT5wb3dlcl93b3JrKTsKQEAgLTEyOTEsOCArMTUyMyw3IEBACiAJLyogcmVsYXNlIFBDTXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9wY21zOyBpKyspIHsKIAkJaWYgKGNvZGVjLT5wY21faW5mb1tpXS5wY20pIHsKLQkJCXNuZF9kZXZpY2VfZnJlZShjb2RlYy0+YnVzLT5jYXJkLAotCQkJCQljb2RlYy0+cGNtX2luZm9baV0ucGNtKTsKKwkJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjb2RlYy0+cGNtX2luZm9baV0ucGNtKTsKIAkJCWNsZWFyX2JpdChjb2RlYy0+cGNtX2luZm9baV0uZGV2aWNlLAogCQkJCSAgY29kZWMtPmJ1cy0+cGNtX2Rldl9iaXRzKTsKIAkJfQpAQCAtMTMwNSwxMyArMTUzNiwyMiBAQAogCWZyZWVfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmFtcF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfY2FjaGVfaGVhZCkpOworCS8qIGZyZWUgb25seSBkcml2ZXJfcGlucyBzbyB0aGF0IGluaXRfcGlucyArIHVzZXJfcGlucyBhcmUgcmVzdG9yZWQgKi8KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmRyaXZlcl9waW5zKTsKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOwogCWNvZGVjLT5udW1fcGNtcyA9IDA7CiAJY29kZWMtPnBjbV9pbmZvID0gTlVMTDsKIAljb2RlYy0+cHJlc2V0ID0gTlVMTDsKKwltZW1zZXQoJmNvZGVjLT5wYXRjaF9vcHMsIDAsIHNpemVvZihjb2RlYy0+cGF0Y2hfb3BzKSk7CisJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gTlVMTDsKKwljb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ID0gMDsKIAltb2R1bGVfcHV0KGNvZGVjLT5vd25lcik7CiAJY29kZWMtPm93bmVyID0gTlVMTDsKKworCS8qIGFsbG93IGRldmljZSBhY2Nlc3MgYWdhaW4gKi8KKwloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NORF9IREFfUkVDT05GSUcgKi8KIAogLyogY3JlYXRlIGEgdmlydHVhbCBtYXN0ZXIgY29udHJvbCBhbmQgYWRkIHNsYXZlcyAqLwogaW50IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNoYXIgKm5hbWUsCkBAIC0xMzM2LDE1ICsxNTc2LDIwIEBACiAJCiAJZm9yIChzID0gc2xhdmVzOyAqczsgcysrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNjdGw7Ci0KLQkJc2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICpzKTsKLQkJaWYgKCFzY3RsKSB7Ci0JCQlzbmRfcHJpbnRkZCgiQ2Fubm90IGZpbmQgc2xhdmUgJXMsIHNraXBwZWRcbiIsICpzKTsKLQkJCWNvbnRpbnVlOworCQlpbnQgaSA9IDA7CisJCWZvciAoOzspIHsKKwkJCXNjdGwgPSBfc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgKnMsIGkpOworCQkJaWYgKCFzY3RsKSB7CisJCQkJaWYgKCFpKQorCQkJCQlzbmRfcHJpbnRkZCgiQ2Fubm90IGZpbmQgc2xhdmUgJXMsICIKKwkJCQkJCSAgICAic2tpcHBlZFxuIiwgKnMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUoa2N0bCwgc2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJaSsrOwogCQl9Ci0JCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKGtjdGwsIHNjdGwpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTk1NSw2ICsyMjAwLDggQEAKIAl9CiAJZm9yIChkaWdfbWl4ID0gZGlnX2luX2N0bHM7IGRpZ19taXgtPm5hbWU7IGRpZ19taXgrKykgewogCQlrY3RsID0gc25kX2N0bF9uZXcxKGRpZ19taXgsIGNvZGVjKTsKKwkJaWYgKCFrY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBuaWQ7CiAJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMjA3NCw4ICsyMzIxLDcgQEAKIAkJCQkgKiBkb24ndCBwb3dlciBkb3duIHRoZSB3aWRnZXQgaWYgaXQgY29udHJvbHMKIAkJCQkgKiBlYXBkIGFuZCBFQVBEX0JUTEVOQUJMRSBpcyBzZXQuCiAJCQkJICovCi0JCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkJICAgIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQkJCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfRUFQRCkgewogCQkJCQlpbnQgZWFwZCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywKIAkJCQkJCW5pZCwgMCwKQEAgLTIxNDQsNiArMjM5MCw3IEBACiAJaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKIAkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCiAJCQkgICAgQUNfUFdSU1RfRDApOworCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7IC8qIHJlc3RvcmUgYWxsIGN1cnJlbnQgcGluIGNvbmZpZ3MgKi8KIAloZGFfZXhlY19pbml0X3ZlcmJzKGNvZGVjKTsKIAlpZiAoY29kZWMtPnBhdGNoX29wcy5yZXN1bWUpCiAJCWNvZGVjLT5wYXRjaF9vcHMucmVzdW1lKGNvZGVjKTsKQEAgLTIxNzEsOCArMjQxOCwxNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgewogCQlpbnQgZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYnVpbGQgY29udHJvbHMiCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGRhX2NvZGVjOiBjYW5ub3QgcmV2ZXJ0IGNvZGVjXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE4MSwxOSArMjQzNiwxMiBAQAogaW50IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJaW50IGVyciA9IDA7Ci0JLyogZmFrZSBhcyBpZiBhbHJlYWR5IHBvd2VyZWQtb24gKi8KLQloZGFfa2VlcF9wb3dlcl9vbihjb2RlYyk7Ci0JLyogdGhlbiBmaXJlIHVwICovCi0JaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKLQkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCi0JCQkgICAgQUNfUFdSU1RfRDApOwogCWhkYV9leGVjX2luaXRfdmVyYnMoY29kZWMpOwogCS8qIGNvbnRpbnVlIHRvIGluaXRpYWxpemUuLi4gKi8KIAlpZiAoY29kZWMtPnBhdGNoX29wcy5pbml0KQogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCWlmICghZXJyICYmIGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMpCiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMoY29kZWMpOwotCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CkBAIC0yMzA2LDEyICsyNTU0LDExIEBACiBzdGF0aWMgaW50IHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQl1MzIgKnJhdGVzcCwgdTY0ICpmb3JtYXRzcCwgdW5zaWduZWQgaW50ICpicHNwKQogewotCWludCBpOwotCXVuc2lnbmVkIGludCB2YWwsIHN0cmVhbXM7CisJdW5zaWduZWQgaW50IGksIHZhbCwgd2NhcHM7CiAKIAl2YWwgPSAwOwotCWlmIChuaWQgIT0gY29kZWMtPmFmZyAmJgotCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkpIHsKKwl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKKwlpZiAobmlkICE9IGNvZGVjLT5hZmcgJiYgKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkpIHsKIAkJdmFsID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QQ00pOwogCQlpZiAodmFsID09IC0xKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yMzI1LDE1ICsyNTcyLDIwIEBACiAJCQlpZiAodmFsICYgKDEgPDwgaSkpCiAJCQkJcmF0ZXMgfD0gcmF0ZV9iaXRzW2ldLmFsc2FfYml0czsKIAkJfQorCQlpZiAocmF0ZXMgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiByYXRlcyA9PSAwICIKKwkJCQkgICAiKG5pZD0weCV4LCB2YWw9MHgleCwgb3ZyZD0laSlcbiIsCisJCQkJCW5pZCwgdmFsLAorCQkJCQkod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSA/IDEgOiAwKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJCSpyYXRlc3AgPSByYXRlczsKIAl9CiAKIAlpZiAoZm9ybWF0c3AgfHwgYnBzcCkgewogCQl1NjQgZm9ybWF0cyA9IDA7Ci0JCXVuc2lnbmVkIGludCBicHM7Ci0JCXVuc2lnbmVkIGludCB3Y2FwczsKKwkJdW5zaWduZWQgaW50IHN0cmVhbXMsIGJwczsKIAotCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKIAkJc3RyZWFtcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfU1RSRUFNKTsKIAkJaWYgKHN0cmVhbXMgPT0gLTEpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTIzODYsNiArMjYzOCwxNSBAQAogCQkJZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX1U4OwogCQkJYnBzID0gODsKIAkJfQorCQlpZiAoZm9ybWF0cyA9PSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGZvcm1hdHMgPT0gMCAiCisJCQkJICAgIihuaWQ9MHgleCwgdmFsPTB4JXgsIG92cmQ9JWksICIKKwkJCQkgICAic3RyZWFtcz0weCV4KVxuIiwKKwkJCQkJbmlkLCB2YWwsCisJCQkJCSh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpID8gMSA6IDAsCisJCQkJCXN0cmVhbXMpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAkJaWYgKGZvcm1hdHNwKQogCQkJKmZvcm1hdHNwID0gZm9ybWF0czsKIAkJaWYgKGJwc3ApCkBAIC0yNTAxLDEyICsyNzYyLDE2IEBACiBzdGF0aWMgaW50IHNldF9wY21fZGVmYXVsdF92YWx1ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8pCiB7CisJaW50IGVycjsKKwogCS8qIHF1ZXJ5IHN1cHBvcnQgUENNIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIE5JRCAqLwogCWlmIChpbmZvLT5uaWQgJiYgKCFpbmZvLT5yYXRlcyB8fCAhaW5mby0+Zm9ybWF0cykpIHsKLQkJc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCisJCWVyciA9IHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShjb2RlYywgaW5mby0+bmlkLAogCQkJCWluZm8tPnJhdGVzID8gTlVMTCA6ICZpbmZvLT5yYXRlcywKIAkJCQlpbmZvLT5mb3JtYXRzID8gTlVMTCA6ICZpbmZvLT5mb3JtYXRzLAogCQkJCWluZm8tPm1heGJwcyA/IE5VTEwgOiAmaW5mby0+bWF4YnBzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoaW5mby0+b3BzLm9wZW4gPT0gTlVMTCkKIAkJaW5mby0+b3BzLm9wZW4gPSBoZGFfcGNtX2RlZmF1bHRfb3Blbl9jbG9zZTsKQEAgLTI1NDksMTMgKzI4MTQsMTAgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXVkaW9faWR4KTsgaSsrKSB7CiAJCQlkZXYgPSBhdWRpb19pZHhbaV07CiAJCQlpZiAoIXRlc3RfYml0KGRldiwgYnVzLT5wY21fZGV2X2JpdHMpKQotCQkJCWJyZWFrOworCQkJCWdvdG8gb2s7CiAJCX0KLQkJaWYgKGkgPj0gQVJSQVlfU0laRShhdWRpb19pZHgpKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgYXVkaW8gZGV2aWNlc1xuIik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQlicmVhazsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55IGF1ZGlvIGRldmljZXNcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKIAljYXNlIEhEQV9QQ01fVFlQRV9TUERJRjoKIAljYXNlIEhEQV9QQ01fVFlQRV9IRE1JOgogCWNhc2UgSERBX1BDTV9UWVBFX01PREVNOgpAQCAtMjU3MCw2ICsyODMyLDcgQEAKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgUENNIHR5cGUgJWRcbiIsIHR5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Cisgb2s6CiAJc2V0X2JpdChkZXYsIGJ1cy0+cGNtX2Rldl9iaXRzKTsKIAlyZXR1cm4gZGV2OwogfQpAQCAtMjYwNiwyNCArMjg2OSwzNiBAQAogCQlpZiAoIWNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcykKIAkJCXJldHVybiAwOwogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX3BjbXMoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIFBDTXMiCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGRhX2NvZGVjOiBjYW5ub3QgcmV2ZXJ0IGNvZGVjXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CiAJfQogCWZvciAocGNtID0gMDsgcGNtIDwgY29kZWMtPm51bV9wY21zOyBwY20rKykgewogCQlzdHJ1Y3QgaGRhX3BjbSAqY3BjbSA9ICZjb2RlYy0+cGNtX2luZm9bcGNtXTsKIAkJaW50IGRldjsKIAogCQlpZiAoIWNwY20tPnN0cmVhbVswXS5zdWJzdHJlYW1zICYmICFjcGNtLT5zdHJlYW1bMV0uc3Vic3RyZWFtcykKLQkJCXJldHVybiAwOyAvKiBubyBzdWJzdHJlYW1zIGFzc2lnbmVkICovCisJCQljb250aW51ZTsgLyogbm8gc3Vic3RyZWFtcyBhc3NpZ25lZCAqLwogCiAJCWlmICghY3BjbS0+cGNtKSB7CiAJCQlkZXYgPSBnZXRfZW1wdHlfcGNtX2RldmljZShjb2RlYy0+YnVzLCBjcGNtLT5wY21fdHlwZSk7CiAJCQlpZiAoZGV2IDwgMCkKLQkJCQlyZXR1cm4gMDsKKwkJCQljb250aW51ZTsgLyogbm8gZmF0YWwgZXJyb3IgKi8KIAkJCWNwY20tPmRldmljZSA9IGRldjsKIAkJCWVyciA9IHNuZF9oZGFfYXR0YWNoX3BjbShjb2RlYywgY3BjbSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGF0dGFjaCAiCisJCQkJICAgICAgICJQQ00gc3RyZWFtICVkIGZvciBjb2RlYyAjJWRcbiIsCisJCQkJICAgICAgIGRldiwgY29kZWMtPmFkZHIpOworCQkJCWNvbnRpbnVlOyAvKiBubyBmYXRhbCBlcnJvciAqLworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMzMyNCw4ICszNTk5LDcgQEAKIAkJaWYgKGlnbm9yZV9uaWRzICYmIGlzX2luX25pZF9saXN0KG5pZCwgaWdub3JlX25pZHMpKQogCQkJY29udGludWU7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIAkJbG9jID0gZ2V0X2RlZmNmZ19sb2NhdGlvbihkZWZfY29uZik7CkBAIC0zNDAxLDEwICszNjc1LDIyIEBACiAJCQljZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQVVYXSA9IG5pZDsKIAkJCWJyZWFrOwogCQljYXNlIEFDX0pBQ0tfU1BESUZfT1VUOgotCQkJY2ZnLT5kaWdfb3V0X3BpbiA9IG5pZDsKKwkJY2FzZSBBQ19KQUNLX0RJR19PVEhFUl9PVVQ6CisJCQlpZiAoY2ZnLT5kaWdfb3V0cyA+PSBBUlJBWV9TSVpFKGNmZy0+ZGlnX291dF9waW5zKSkKKwkJCQljb250aW51ZTsKKwkJCWNmZy0+ZGlnX291dF9waW5zW2NmZy0+ZGlnX291dHNdID0gbmlkOworCQkJY2ZnLT5kaWdfb3V0X3R5cGVbY2ZnLT5kaWdfb3V0c10gPQorCQkJCShsb2MgPT0gQUNfSkFDS19MT0NfSERNSSkgPworCQkJCUhEQV9QQ01fVFlQRV9IRE1JIDogSERBX1BDTV9UWVBFX1NQRElGOworCQkJY2ZnLT5kaWdfb3V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfSkFDS19TUERJRl9JTjoKKwkJY2FzZSBBQ19KQUNLX0RJR19PVEhFUl9JTjoKIAkJCWNmZy0+ZGlnX2luX3BpbiA9IG5pZDsKKwkJCWlmIChsb2MgPT0gQUNfSkFDS19MT0NfSERNSSkKKwkJCQljZmctPmRpZ19pbl90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CisJCQllbHNlCisJCQkJY2ZnLT5kaWdfaW5fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzUxMCw2ICszNzk2LDkgQEAKIAkJICAgY2ZnLT5ocF9waW5zWzFdLCBjZmctPmhwX3BpbnNbMl0sCiAJCSAgIGNmZy0+aHBfcGluc1szXSwgY2ZnLT5ocF9waW5zWzRdKTsKIAlzbmRfcHJpbnRkKCIgICBtb25vOiBtb25vX291dD0weCV4XG4iLCBjZmctPm1vbm9fb3V0X3Bpbik7CisJaWYgKGNmZy0+ZGlnX291dHMpCisJCXNuZF9wcmludGQoIiAgIGRpZy1vdXQ9MHgleC8weCV4XG4iLAorCQkJICAgY2ZnLT5kaWdfb3V0X3BpbnNbMF0sIGNmZy0+ZGlnX291dF9waW5zWzFdKTsKIAlzbmRfcHJpbnRkKCIgICBpbnB1dHM6IG1pYz0weCV4LCBmbWljPTB4JXgsIGxpbmU9MHgleCwgZmxpbmU9MHgleCwiCiAJCSAgICIgY2Q9MHgleCwgYXV4PTB4JXhcbiIsCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdLApAQCAtMzUxOCw2ICszODA3LDggQEAKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX0xJTkVdLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQ0RdLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQVVYXSk7CisJaWYgKGNmZy0+ZGlnX2luX3BpbikKKwkJc25kX3ByaW50ZCgiICAgZGlnLWluPTB4JXhcbiIsIGNmZy0+ZGlnX2luX3Bpbik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDA5YTMzMmEuLjJmZGVjZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtNzM5LDYgKzczOSw3IEBACiAJaGRhX25pZF90IG1mZzsJLyogTUZHIG5vZGUgaWQgKi8KIAogCS8qIGlkcyAqLworCXUzMiBmdW5jdGlvbl9pZDsKIAl1MzIgdmVuZG9yX2lkOwogCXUzMiBzdWJzeXN0ZW1faWQ7CiAJdTMyIHJldmlzaW9uX2lkOwpAQCAtNzc4LDExICs3NzksMTQgQEAKIAl1bnNpZ25lZCBzaG9ydCBzcGRpZl9jdGxzOwkvKiBTUERJRiBjb250cm9sIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3BkaWZfaW5fZW5hYmxlOwkvKiBTUERJRiBpbnB1dCBlbmFibGU/ICovCiAJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsgLyogb3B0aW9uYWwgZGlnaXRhbCBvdXQgc2xhdmUgd2lkZ2V0cyAqLworCXN0cnVjdCBzbmRfYXJyYXkgaW5pdF9waW5zOwkvKiBpbml0aWFsIChCSU9TKSBwaW4gY29uZmlndXJhdGlvbnMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IGRyaXZlcl9waW5zOwkvKiBwaW4gY29uZmlncyBzZXQgYnkgY29kZWMgcGFyc2VyICovCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwOwkvKiBhc3NpZ25lZCBod2RlcCBkZXZpY2UgKi8KIAlzdHJ1Y3Qgc25kX2FycmF5IGluaXRfdmVyYnM7CS8qIGFkZGl0aW9uYWwgaW5pdCB2ZXJicyAqLwogCXN0cnVjdCBzbmRfYXJyYXkgaGludHM7CQkvKiBhZGRpdGlvbmFsIGhpbnRzICovCisJc3RydWN0IHNuZF9hcnJheSB1c2VyX3BpbnM7CS8qIGRlZmF1bHQgcGluIGNvbmZpZ3MgdG8gb3ZlcnJpZGUgKi8KICNlbmRpZgogCiAJLyogbWlzYyBmbGFncyAqLwpAQCAtNzkwLDYgKzc5NCw5IEBACiAJCQkJCSAgICAgKiBzdGF0dXMgY2hhbmdlCiAJCQkJCSAgICAgKiAoZS5nLiBSZWFsdGVrIGNvZGVjcykKIAkJCQkJICAgICAqLworCXVuc2lnbmVkIGludCBwaW5fYW1wX3dvcmthcm91bmQ6MTsgLyogcGluIG91dC1hbXAgdGFrZXMgaW5kZXgKKwkJCQkJICAgICogKGUuZy4gQ29uZXhhbnQgY29kZWNzKQorCQkJCQkgICAgKi8KICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJdW5zaWduZWQgaW50IHBvd2VyX29uIDoxOwkvKiBjdXJyZW50IChnbG9iYWwpIHBvd2VyLXN0YXRlICovCiAJdW5zaWduZWQgaW50IHBvd2VyX3RyYW5zaXRpb24gOjE7IC8qIHBvd2VyLXN0YXRlIGluIHRyYW5zaXRpb24gKi8KQEAgLTg1NSw2ICs4NjIsMTggQEAKICNkZWZpbmUgc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlCiAjZW5kaWYKIAorLyogdGhlIHN0cnVjdCBmb3IgY29kZWMtPnBpbl9jb25maWdzICovCitzdHJ1Y3QgaGRhX3BpbmNmZyB7CisJaGRhX25pZF90IG5pZDsKKwl1bnNpZ25lZCBpbnQgY2ZnOworfTsKKwordW5zaWduZWQgaW50IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CitpbnQgc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY2ZnKTsKK2ludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKTsgLyogZm9yIGh3ZGVwICovCisKIC8qCiAgKiBNaXhlcgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKaW5kZXggNjU3NDVlOS4uMWQ1Nzk3YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwpAQCAtMTQ0LDkgKzE0NCw5IEBACiAJbm9kZS0+dHlwZSA9IChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCiAJaWYgKG5vZGUtPnR5cGUgPT0gQUNfV0lEX1BJTikgewotCQlub2RlLT5waW5fY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbm9kZS0+bmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCW5vZGUtPnBpbl9jYXBzID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbm9kZS0+bmlkKTsKIAkJbm9kZS0+cGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbm9kZS0+bmlkLCAwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOwotCQlub2RlLT5kZWZfY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBub2RlLT5uaWQsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJbm9kZS0+ZGVmX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbm9kZS0+bmlkKTsKIAl9CiAKIAlpZiAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX09VVF9BTVApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCmluZGV4IDRhZTUxZGMuLjFjNTc1MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwpAQCAtMzAsNiArMzAsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9oZGFfaHdkZXAuaD4KICNpbmNsdWRlIDxzb3VuZC9taW5vcnMuaD4KIAorLyogaGludCBzdHJpbmcgcGFpciAqLworc3RydWN0IGhkYV9oaW50IHsKKwljb25zdCBjaGFyICprZXk7CisJY29uc3QgY2hhciAqdmFsOwkvKiBjb250YWluZWQgaW4gdGhlIHNhbWUgYWxsb2MgYXMga2V5ICovCit9OworCiAvKgogICogd3JpdGUvcmVhZCBhbiBvdXQtb2YtYm91bmQgdmVyYgogICovCkBAIC05OSwxNiArMTA1LDE3IEBACiAKIHN0YXRpYyB2b2lkIGNsZWFyX2h3ZGVwX2VsZW1lbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWNoYXIgKipoZWFkOwogCWludCBpOwogCiAJLyogY2xlYXIgaW5pdCB2ZXJicyAqLwogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aW5pdF92ZXJicyk7CiAJLyogY2xlYXIgaGludHMgKi8KLQloZWFkID0gY29kZWMtPmhpbnRzLmxpc3Q7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyssIGhlYWQrKykKLQkJa2ZyZWUoKmhlYWQpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfaGludCAqaGludCA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aGludHMsIGkpOworCQlrZnJlZShoaW50LT5rZXkpOyAvKiB3ZSBkb24ndCBuZWVkIHRvIGZyZWUgaGludC0+dmFsICovCisJfQogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aGludHMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+dXNlcl9waW5zKTsKIH0KIAogc3RhdGljIHZvaWQgaHdkZXBfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCkKQEAgLTE0MCw3ICsxNDcsOCBAQAogI2VuZGlmCiAKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmluaXRfdmVyYnMsIHNpemVvZihzdHJ1Y3QgaGRhX3ZlcmIpLCAzMik7Ci0Jc25kX2FycmF5X2luaXQoJmNvZGVjLT5oaW50cywgc2l6ZW9mKGNoYXIgKiksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmhpbnRzLCBzaXplb2Yoc3RydWN0IGhkYV9oaW50KSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+dXNlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1Myw3ICsxNjEsMTMgQEAKIAogc3RhdGljIGludCBjbGVhcl9jb2RlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiVGhlIGNvZGVjIGlzIGJlaW5nIHVzZWQsIGNhbid0IGZyZWUuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJY2xlYXJfaHdkZXBfZWxlbWVudHMoY29kZWMpOwogCXJldHVybiAwOwogfQpAQCAtMTYyLDIwICsxNzYsMjkgQEAKIHsKIAlpbnQgZXJyOwogCisJc25kX2hkYV9wb3dlcl91cChjb2RlYyk7CiAJc25kX3ByaW50ayhLRVJOX0lORk8gImhkYS1jb2RlYzogcmVjb25maWd1cmluZ1xuIik7Ci0Jc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIlRoZSBjb2RlYyBpcyBiZWluZyB1c2VkLCBjYW4ndCByZWNvbmZpZ3VyZS5cbiIpOworCQlnb3RvIGVycm9yOworCX0KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyb3I7CiAJLyogcmVidWlsZCBQQ01zICovCiAJZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9wY21zKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJvcjsKIAkvKiByZWJ1aWxkIG1peGVycyAqLwogCWVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiBzbmRfY2FyZF9yZWdpc3Rlcihjb2RlYy0+YnVzLT5jYXJkKTsKKwkJZ290byBlcnJvcjsKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3Rlcihjb2RlYy0+YnVzLT5jYXJkKTsKKyBlcnJvcjoKKwlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0yNzEsNiArMjk0LDIyIEBACiBDT0RFQ19BQ1RJT05fU1RPUkUocmVjb25maWcpOwogQ09ERUNfQUNUSU9OX1NUT1JFKGNsZWFyKTsKIAorc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5pbml0X3ZlcmJzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3ZlcmIgKnYgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmluaXRfdmVyYnMsIGkpOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkJIjB4JTAyeCAweCUwM3ggMHglMDR4XG4iLAorCQkJCXYtPm5pZCwgdi0+dmVyYiwgdi0+cGFyYW0pOworCX0KKwlyZXR1cm4gbGVuOworfQorCiBzdGF0aWMgc3NpemVfdCBpbml0X3ZlcmJzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTI5MywyNiArMzMyLDE1NyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaGludHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiJXMgPSAlc1xuIiwgaGludC0+a2V5LCBoaW50LT52YWwpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IGhkYV9oaW50ICpnZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWlmICghc3RyY21wKGhpbnQtPmtleSwga2V5KSkKKwkJCXJldHVybiBoaW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsX3NwYWNlcyhjaGFyICpzdHIpCit7CisJY2hhciAqcDsKKwlpZiAoISpzdHIpCisJCXJldHVybjsKKwlwID0gc3RyICsgc3RybGVuKHN0cikgLSAxOworCWZvciAoOyBpc3NwYWNlKCpwKTsgcC0tKSB7CisJCSpwID0gMDsKKwkJaWYgKHAgPT0gc3RyKQorCQkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBNQVhfSElOVFMJMTAyNAorCiBzdGF0aWMgc3NpemVfdCBoaW50c19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKnA7Ci0JY2hhciAqKmhpbnQ7CisJY2hhciAqa2V5LCAqdmFsOworCXN0cnVjdCBoZGFfaGludCAqaGludDsKIAotCWlmICghKmJ1ZiB8fCBpc3NwYWNlKCpidWYpIHx8ICpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1xuJykKKwl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKKwkJYnVmKys7CisJaWYgKCEqYnVmIHx8ICpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1xuJykKIAkJcmV0dXJuIGNvdW50OwotCXAgPSBrc3RybmR1cF9ub2VvbChidWYsIDEwMjQpOwotCWlmICghcCkKKwlpZiAoKmJ1ZiA9PSAnPScpCisJCXJldHVybiAtRUlOVkFMOworCWtleSA9IGtzdHJuZHVwX25vZW9sKGJ1ZiwgMTAyNCk7CisJaWYgKCFrZXkpCiAJCXJldHVybiAtRU5PTUVNOwotCWhpbnQgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aGludHMpOworCS8qIGV4dHJhY3Qga2V5IGFuZCB2YWwgKi8KKwl2YWwgPSBzdHJjaHIoa2V5LCAnPScpOworCWlmICghdmFsKSB7CisJCWtmcmVlKGtleSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkqdmFsKysgPSAwOworCXdoaWxlIChpc3NwYWNlKCp2YWwpKQorCQl2YWwrKzsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKGtleSk7CisJcmVtb3ZlX3RyYWlsX3NwYWNlcyh2YWwpOworCWhpbnQgPSBnZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAoaGludCkgeworCQkvKiByZXBsYWNlICovCisJCWtmcmVlKGhpbnQtPmtleSk7CisJCWhpbnQtPmtleSA9IGtleTsKKwkJaGludC0+dmFsID0gdmFsOworCQlyZXR1cm4gY291bnQ7CisJfQorCS8qIGFsbG9jYXRlIGEgbmV3IGhpbnQgZW50cnkgKi8KKwlpZiAoY29kZWMtPmhpbnRzLnVzZWQgPj0gTUFYX0hJTlRTKQorCQloaW50ID0gTlVMTDsKKwllbHNlCisJCWhpbnQgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aGludHMpOwogCWlmICghaGludCkgewotCQlrZnJlZShwKTsKKwkJa2ZyZWUoa2V5KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCSpoaW50ID0gcDsKKwloaW50LT5rZXkgPSBrZXk7CisJaGludC0+dmFsID0gdmFsOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+dXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbShsaXN0LCBpKTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHglMDJ4IDB4JTA4eFxuIiwKKwkJCSAgICAgICBwaW4tPm5pZCwgcGluLT5jZmcpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBpbml0X3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+aW5pdF9waW5zLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCB1c2VyX3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBkcml2ZXJfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIGJ1Zik7Cit9CisKKyNkZWZpbmUgTUFYX1BJTl9DT05GSUdTCQkzMgorCitzdGF0aWMgc3NpemVfdCB1c2VyX3Bpbl9jb25maWdzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgbmlkLCBjZmc7CisJaW50IGVycjsKKworCWlmIChzc2NhbmYoYnVmLCAiJWkgJWkiLCAmbmlkLCAmY2ZnKSAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXJyID0gc25kX2hkYV9hZGRfcGluY2ZnKGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgbmlkLCBjZmcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzMxLDggKzUwMSwxMSBAQAogCUNPREVDX0FUVFJfUk8obWZnKSwKIAlDT0RFQ19BVFRSX1JXKG5hbWUpLAogCUNPREVDX0FUVFJfUlcobW9kZWxuYW1lKSwKLQlDT0RFQ19BVFRSX1dPKGluaXRfdmVyYnMpLAotCUNPREVDX0FUVFJfV08oaGludHMpLAorCUNPREVDX0FUVFJfUlcoaW5pdF92ZXJicyksCisJQ09ERUNfQVRUUl9SVyhoaW50cyksCisJQ09ERUNfQVRUUl9STyhpbml0X3Bpbl9jb25maWdzKSwKKwlDT0RFQ19BVFRSX1JXKHVzZXJfcGluX2NvbmZpZ3MpLAorCUNPREVDX0FUVFJfUk8oZHJpdmVyX3Bpbl9jb25maWdzKSwKIAlDT0RFQ19BVFRSX1dPKHJlY29uZmlnKSwKIAlDT0RFQ19BVFRSX1dPKGNsZWFyKSwKIH07CkBAIC0zNTEsNCArNTI0LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBMb29rIGZvciBoaW50IHN0cmluZworICovCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gZ2V0X2hpbnQoY29kZWMsIGtleSk7CisJcmV0dXJuIGhpbnQgPyBoaW50LT52YWwgOiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfaGludCk7CisKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAoIXAgfHwgISpwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlzd2l0Y2ggKHRvdXBwZXIoKnApKSB7CisJY2FzZSAnVCc6IC8qIHRydWUgKi8KKwljYXNlICdZJzogLyogeWVzICovCisJY2FzZSAnMSc6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZ2V0X2Jvb2xfaGludCk7CisKICNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggZjNiNTcyMy4uMzA4MjllZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0zODEsNiArMzgxLDcgQEAKIAogCS8qIEhEIGNvZGVjICovCiAJdW5zaWduZWQgc2hvcnQgY29kZWNfbWFzazsKKwlpbnQgIGNvZGVjX3Byb2JlX21hc2s7IC8qIGNvcGllZCBmcm9tIHByb2JlX21hc2sgb3B0aW9uICovCiAJc3RydWN0IGhkYV9idXMgKmJ1czsKIAogCS8qIENPUkIvUklSQiAqLwpAQCAtODU4LDEzICs4NTksMTggQEAKIAkJICAgICAgU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKTsKIH0KIAotLyogc3RvcCBhIHN0cmVhbSAqLwotc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9zdG9wKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQorLyogc3RvcCBETUEgKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fY2xlYXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCiB7Ci0JLyogc3RvcCBETUEgKi8KIAlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgJgogCQkgICAgICB+KFNEX0NUTF9ETUFfU1RBUlQgfCBTRF9JTlRfTUFTSykpOwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfU1RTLCBTRF9JTlRfTUFTSyk7IC8qIHRvIGJlIHN1cmUgKi8KK30KKworLyogc3RvcCBhIHN0cmVhbSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9zdG9wKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQoreworCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CiAJLyogZGlzYWJsZSBTSUUgKi8KIAlhenhfd3JpdGViKGNoaXAsIElOVENUTCwKIAkJICAgYXp4X3JlYWRiKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKQEAgLTEwNzUsOCArMTA4MSw3IEBACiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7CiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAKLQlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKLQlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSBwZXJpb2RfYnl0ZXM7CisJcGVyaW9kX2J5dGVzID0gYXp4X2Rldi0+cGVyaW9kX2J5dGVzOwogCXBlcmlvZHMgPSBhenhfZGV2LT5idWZzaXplIC8gcGVyaW9kX2J5dGVzOwogCiAJLyogcHJvZ3JhbSB0aGUgaW5pdGlhbCBCREwgZW50cmllcyAqLwpAQCAtMTEyMywyNCArMTEyOCwxNyBAQAogIGVycm9yOgogCXNuZF9wcmludGsoS0VSTl9FUlIgIlRvbyBtYW55IEJETCBlbnRyaWVzOiBidWZmZXI9JWQsIHBlcmlvZD0lZFxuIiwKIAkJICAgYXp4X2Rldi0+YnVmc2l6ZSwgcGVyaW9kX2J5dGVzKTsKLQkvKiByZXNldCAqLwotCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwotCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKgotICogc2V0IHVwIHRoZSBTRCBmb3Igc3RyZWFtaW5nCi0gKi8KLXN0YXRpYyBpbnQgYXp4X3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCisvKiByZXNldCBzdHJlYW0gKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fcmVzZXQoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCiB7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAJaW50IHRpbWVvdXQ7CiAKLQkvKiBtYWtlIHN1cmUgdGhlIHJ1biBiaXQgaXMgemVybyBmb3IgU0QgKi8KLQlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgJgotCQkgICAgICB+U0RfQ1RMX0RNQV9TVEFSVCk7Ci0JLyogcmVzZXQgc3RyZWFtICovCisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKKwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSB8CiAJCSAgICAgIFNEX0NUTF9TVFJFQU1fUkVTRVQpOwogCXVkZWxheSgzKTsKQEAgLTExNTcsNyArMTE1NSwxNSBAQAogCXdoaWxlICgoKHZhbCA9IGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpKSAmIFNEX0NUTF9TVFJFQU1fUkVTRVQpICYmCiAJICAgICAgIC0tdGltZW91dCkKIAkJOworfQogCisvKgorICogc2V0IHVwIHRoZSBTRCBmb3Igc3RyZWFtaW5nCisgKi8KK3N0YXRpYyBpbnQgYXp4X3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCit7CisJLyogbWFrZSBzdXJlIHRoZSBydW4gYml0IGlzIHplcm8gZm9yIFNEICovCisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBwcm9ncmFtIHRoZSBzdHJlYW1fdGFnICovCiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9DVEwsCiAJCSAgICAgIChhenhfc2RfcmVhZGwoYXp4X2RldiwgU0RfQ1RMKSAmIH5TRF9DVExfU1RSRUFNX1RBR19NQVNLKXwKQEAgLTEyMjgsNyArMTIzNCw2IEBACiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhenhfY29kZWNfY3JlYXRlKHN0cnVjdCBhenggKmNoaXAsIGNvbnN0IGNoYXIgKm1vZGVsLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjb2RlY19wcm9iZV9tYXNrLAogCQkJCSAgICAgIGludCBub19pbml0KQogewogCXN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIGJ1c190ZW1wOwpAQCAtMTI2MSw3ICsxMjY2LDcgQEAKIAogCS8qIEZpcnN0IHRyeSB0byBwcm9iZSBhbGwgZ2l2ZW4gY29kZWMgc2xvdHMgKi8KIAlmb3IgKGMgPSAwOyBjIDwgbWF4X3Nsb3RzOyBjKyspIHsKLQkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY29kZWNfcHJvYmVfbWFzaykgeworCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjaGlwLT5jb2RlY19wcm9iZV9tYXNrKSB7CiAJCQlpZiAocHJvYmVfY29kZWMoY2hpcCwgYykgPCAwKSB7CiAJCQkJLyogU29tZSBCSU9TZW4gZ2l2ZSB5b3Ugd3JvbmcgY29kZWMgYWRkcmVzc2VzCiAJCQkJICogdGhhdCBkb24ndCBleGlzdApAQCAtMTI4NSw3ICsxMjkwLDcgQEAKIAogCS8qIFRoZW4gY3JlYXRlIGNvZGVjIGluc3RhbmNlcyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewotCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjb2RlY19wcm9iZV9tYXNrKSB7CisJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwogCQkJZXJyID0gc25kX2hkYV9jb2RlY19uZXcoY2hpcC0+YnVzLCBjLCAhbm9faW5pdCwgJmNvZGVjKTsKIAkJCWlmIChlcnIgPCAwKQpAQCAtMTQwMyw2ICsxNDA4LDggQEAKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhenhfZGV2OwogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOworCisJYXp4X3N0cmVhbV9yZXNldChjaGlwLCBhenhfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQyOSw2ICsxNDM2LDExIEBACiBzdGF0aWMgaW50IGF6eF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKKwlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CisKKwlhenhfZGV2LT5idWZzaXplID0gMDsKKwlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSAwOworCWF6eF9kZXYtPmZvcm1hdF92YWwgPSAwOwogCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAogCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQpAQCAtMTQ0Myw2ICsxNDU1LDkgQEAKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0NUTCwgMCk7CisJYXp4X2Rldi0+YnVmc2l6ZSA9IDA7CisJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gMDsKKwlhenhfZGV2LT5mb3JtYXRfdmFsID0gMDsKIAogCWhpbmZvLT5vcHMuY2xlYW51cChoaW5mbywgYXBjbS0+Y29kZWMsIHN1YnN0cmVhbSk7CiAKQEAgLTE0NTYsMjMgKzE0NzEsMzcgQEAKIAlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CiAJc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbyA9IGFwY20tPmhpbmZvW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBidWZzaXplLCBwZXJpb2RfYnl0ZXMsIGZvcm1hdF92YWw7CisJaW50IGVycjsKIAotCWF6eF9kZXYtPmJ1ZnNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKLQlhenhfZGV2LT5mb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKLQkJCQkJCQkgcnVudGltZS0+Y2hhbm5lbHMsCi0JCQkJCQkJIHJ1bnRpbWUtPmZvcm1hdCwKLQkJCQkJCQkgaGluZm8tPm1heGJwcyk7Ci0JaWYgKCFhenhfZGV2LT5mb3JtYXRfdmFsKSB7CisJZm9ybWF0X3ZhbCA9IHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KHJ1bnRpbWUtPnJhdGUsCisJCQkJCQlydW50aW1lLT5jaGFubmVscywKKwkJCQkJCXJ1bnRpbWUtPmZvcm1hdCwKKwkJCQkJCWhpbmZvLT5tYXhicHMpOworCWlmICghZm9ybWF0X3ZhbCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWAogCQkJICAgImludmFsaWQgZm9ybWF0X3ZhbCwgcmF0ZT0lZCwgY2g9JWQsIGZvcm1hdD0lZFxuIiwKIAkJCSAgIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5mb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlidWZzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisKIAlzbmRfcHJpbnRkZCgiYXp4X3BjbV9wcmVwYXJlOiBidWZzaXplPTB4JXgsIGZvcm1hdD0weCV4XG4iLAotCQkgICAgYXp4X2Rldi0+YnVmc2l6ZSwgYXp4X2Rldi0+Zm9ybWF0X3ZhbCk7Ci0JaWYgKGF6eF9zZXR1cF9wZXJpb2RzKGNoaXAsIHN1YnN0cmVhbSwgYXp4X2RldikgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJICAgIGJ1ZnNpemUsIGZvcm1hdF92YWwpOworCisJaWYgKGJ1ZnNpemUgIT0gYXp4X2Rldi0+YnVmc2l6ZSB8fAorCSAgICBwZXJpb2RfYnl0ZXMgIT0gYXp4X2Rldi0+cGVyaW9kX2J5dGVzIHx8CisJICAgIGZvcm1hdF92YWwgIT0gYXp4X2Rldi0+Zm9ybWF0X3ZhbCkgeworCQlhenhfZGV2LT5idWZzaXplID0gYnVmc2l6ZTsKKwkJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gcGVyaW9kX2J5dGVzOworCQlhenhfZGV2LT5mb3JtYXRfdmFsID0gZm9ybWF0X3ZhbDsKKwkJZXJyID0gYXp4X3NldHVwX3BlcmlvZHMoY2hpcCwgc3Vic3RyZWFtLCBhenhfZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWF6eF9zZXR1cF9jb250cm9sbGVyKGNoaXAsIGF6eF9kZXYpOwogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlhenhfZGV2LT5maWZvX3NpemUgPSBhenhfc2RfcmVhZHcoYXp4X2RldiwgU0RfRklGT1NJWkUpICsgMTsKQEAgLTIxMDAsMjUgKzIxMjksMzYgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgyMGFjLCAiRGVsbCBTdHVkaW8gRGVza3RvcCIsIDB4MDEpLAogCS8qIGluY2x1ZGluZyBib2d1cyBBTEMyNjggaW4gc2xvdCMyIHRoYXQgY29uZmxpY3RzIHdpdGggQUxDODg4ICovCiAJU05EX1BDSV9RVUlSSygweDE3YzAsIDB4NDA4NSwgIk1lZGlvbiBNRDk2NjMwIiwgMHgwMSksCi0JLyogY29uZmxpY3Qgb2YgQUxDMjY4IGluIHNsb3QjMyAoZGlnaXRhbCBJL08pOyBhIHRlbXBvcmFyeSBmaXggKi8KLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjAwLCAiVG9zaGliYSBsYXB0b3AiLCAweDAzKSwKKwkvKiBmb3JjZWQgY29kZWMgc2xvdHMgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0NiwgMHgxMjYyLCAiQVNVUyBXNUYiLCAweDEwMyksCiAJe30KIH07CiAKKyNkZWZpbmUgQVpYX0ZPUkNFX0NPREVDX01BU0sJMHgxMDAKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGNoZWNrX3Byb2JlX21hc2soc3RydWN0IGF6eCAqY2hpcCwgaW50IGRldikKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCWlmIChwcm9iZV9tYXNrW2Rldl0gPT0gLTEpIHsKKwljaGlwLT5jb2RlY19wcm9iZV9tYXNrID0gcHJvYmVfbWFza1tkZXZdOworCWlmIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrID09IC0xKSB7CiAJCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHByb2JlX21hc2tfbGlzdCk7CiAJCWlmIChxKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImhkYV9pbnRlbDogcHJvYmVfbWFzayBzZXQgdG8gMHgleCAiCiAJCQkgICAgICAgImZvciBkZXZpY2UgJTA0eDolMDR4XG4iLAogCQkJICAgICAgIHEtPnZhbHVlLCBxLT5zdWJ2ZW5kb3IsIHEtPnN1YmRldmljZSk7Ci0JCQlwcm9iZV9tYXNrW2Rldl0gPSBxLT52YWx1ZTsKKwkJCWNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPSBxLT52YWx1ZTsKIAkJfQogCX0KKworCS8qIGNoZWNrIGZvcmNlZCBvcHRpb24gKi8KKwlpZiAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAhPSAtMSAmJgorCSAgICAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAmIEFaWF9GT1JDRV9DT0RFQ19NQVNLKSkgeworCQljaGlwLT5jb2RlY19tYXNrID0gY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAmIDB4ZmY7CisJCXByaW50ayhLRVJOX0lORk8gImhkYV9pbnRlbDogY29kZWNfbWFzayBmb3JjZWQgdG8gMHgleFxuIiwKKwkJICAgICAgIGNoaXAtPmNvZGVjX21hc2spOworCX0KIH0KIAogCkBAIC0yMzQ3LDEwICsyMzg3LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJFcnJvciBjcmVhdGluZyBjYXJkIVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWVyciA9IGF6eF9jcmVhdGUoY2FyZCwgcGNpLCBkZXYsIHBjaV9pZC0+ZHJpdmVyX2RhdGEsICZjaGlwKTsKQEAgLTIzNTksOCArMjM5OSw3IEBACiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAogCS8qIGNyZWF0ZSBjb2RlYyBpbnN0YW5jZXMgKi8KLQllcnIgPSBhenhfY29kZWNfY3JlYXRlKGNoaXAsIG1vZGVsW2Rldl0sIHByb2JlX21hc2tbZGV2XSwKLQkJCSAgICAgICBwcm9iZV9vbmx5W2Rldl0pOworCWVyciA9IGF6eF9jb2RlY19jcmVhdGUoY2hpcCwgbW9kZWxbZGV2XSwgcHJvYmVfb25seVtkZXZdKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMjQ1NywxMCArMjQ5NiwxMCBAQAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMyKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAkvKiBUZXJhZGljaSAqLwogCXsgUENJX0RFVklDRSgweDY1NDksIDB4MTIwMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfVEVSQSB9LAogCS8qIEFNRCBHZW5lcmljLCBQQ0kgY2xhc3MgY29kZSBhbmQgVmVuZG9yIElEIGZvciBIRCBBdWRpbyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKaW5kZXggNDRmMTg5Yy4uODMzNDkwMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCkBAIC0yNiw4ICsyNiwxMCBAQAogLyoKICAqIGZvciBtaXhlciBjb250cm9scwogICovCisjZGVmaW5lIEhEQV9DT01QT1NFX0FNUF9WQUxfT0ZTKG5pZCxjaHMsaWR4LGRpcixvZnMpCQlcCisJKChuaWQpIHwgKChjaHMpPDwxNikgfCAoKGRpcik8PDE4KSB8ICgoaWR4KTw8MTkpIHwgKChvZnMpPDwyMykpCiAjZGVmaW5lIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLGNocyxpZHgsZGlyKSBcCi0JKChuaWQpIHwgKChjaHMpPDwxNikgfCAoKGRpcik8PDE4KSB8ICgoaWR4KTw8MTkpKQorCUhEQV9DT01QT1NFX0FNUF9WQUxfT0ZTKG5pZCwgY2hzLCBpZHgsIGRpciwgMCkKIC8qIG1vbm8gdm9sdW1lIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX1ZPTFVNRV9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgIFwKQEAgLTk2LDcgKzk4LDcgQEAKIAkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNoYXIgKm5hbWUsCiAJCQl1bnNpZ25lZCBpbnQgKnRsdiwgY29uc3QgY2hhciAqKnNsYXZlcyk7Ci12b2lkIHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworaW50IHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogaW50IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogLyogYW1wIHZhbHVlIGJpdHMgKi8KQEAgLTEzNCw3ICsxMzYsNyBAQAogCiBzdHJ1Y3QgaGRhX2JpbmRfY3RscyB7CiAJc3RydWN0IGhkYV9jdGxfb3BzICpvcHM7Ci0JbG9uZyB2YWx1ZXNbXTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlc1tdOwogfTsKIAogaW50IHNuZF9oZGFfbWl4ZXJfYmluZF9jdGxzX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0yMjcsNiArMjI5LDcgQEAKIAloZGFfbmlkX3QgaHBfbmlkOwkvKiBvcHRpb25hbCBEQUMgZm9yIEhQLCAwIHdoZW4gbm90IGV4aXN0cyAqLwogCWhkYV9uaWRfdCBleHRyYV9vdXRfbmlkWzNdOwkvKiBvcHRpb25hbCBEQUNzLCAwIHdoZW4gbm90IGV4aXN0cyAqLwogCWhkYV9uaWRfdCBkaWdfb3V0X25pZDsJLyogZGlnaXRhbCBvdXQgYXVkaW8gd2lkZ2V0ICovCisJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAlpbnQgbWF4X2NoYW5uZWxzOwkvKiBjdXJyZW50bHkgc3VwcG9ydGVkIGFuYWxvZyBjaGFubmVscyAqLwogCWludCBkaWdfb3V0X3VzZWQ7CS8qIGN1cnJlbnQgdXNhZ2Ugb2YgZGlnaXRhbCBvdXQgKEhEQV9ESUdfWFhYKSAqLwogCWludCBub19zaGFyZV9zdHJlYW07CS8qIGRvbid0IHNoYXJlIGEgc3RyZWFtIHdpdGggbXVsdGlwbGUgcGlucyAqLwpAQCAtMzU0LDkgKzM1NywxMiBAQAogCWludCBsaW5lX291dF90eXBlOwkvKiBBVVRPX1BJTl9YWFhfT1VUICovCiAJaGRhX25pZF90IGhwX3BpbnNbQVVUT19DRkdfTUFYX09VVFNdOwogCWhkYV9uaWRfdCBpbnB1dF9waW5zW0FVVE9fUElOX0xBU1RdOwotCWhkYV9uaWRfdCBkaWdfb3V0X3BpbjsKKwlpbnQgZGlnX291dHM7CisJaGRhX25pZF90IGRpZ19vdXRfcGluc1syXTsKIAloZGFfbmlkX3QgZGlnX2luX3BpbjsKIAloZGFfbmlkX3QgbW9ub19vdXRfcGluOworCWludCBkaWdfb3V0X3R5cGVbMl07IC8qIEhEQV9QQ01fVFlQRV9YWFggKi8KKwlpbnQgZGlnX2luX3R5cGU7IC8qIEhEQV9QQ01fVFlQRV9YWFggKi8KIH07CiAKICNkZWZpbmUgZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgXApAQCAtNDA1LDYgKzQxMSw3IEBACiB1MzIgcXVlcnlfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXJlY3Rpb24pOwogaW50IHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXIsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY2Fwcyk7Cit1MzIgc25kX2hkYV9xdWVyeV9waW5fY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CiAKIGludCBzbmRfaGRhX2N0bF9hZGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwpOwogdm9pZCBzbmRfaGRhX2N0bHNfY2xlYXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwpAQCAtNDI3LDYgKzQzNCwyMyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRworY29uc3QgY2hhciAqc25kX2hkYV9nZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KTsKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSk7CisjZWxzZQorc3RhdGljIGlubGluZQorY29uc3QgY2hhciAqc25kX2hkYV9nZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgc25kX2hkYV9nZXRfYm9vbF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisjZW5kaWYKKwogLyoKICAqIHBvd2VyLW1hbmFnZW1lbnQKICAqLwpAQCAtNDU4LDYgKzQ4Miw3IEBACiAjZGVmaW5lIGdldF9hbXBfY2hhbm5lbHMoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweDMpCiAjZGVmaW5lIGdldF9hbXBfZGlyZWN0aW9uKGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMHgxKQogI2RlZmluZSBnZXRfYW1wX2luZGV4KGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgMHhmKQorI2RlZmluZSBnZXRfYW1wX29mZnNldChrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDIzKSAmIDB4M2YpCiAKIC8qCiAgKiBDRUEgU2hvcnQgQXVkaW8gRGVzY3JpcHRvciBkYXRhCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggMTQ0Yjg1Mi4uOTNkNzQ5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtMzk5LDggKzM5OSwxMCBAQAogewogCWludCBjLCBjdXJyID0gLTE7CiAKLQlpZiAoY29ubl9sZW4gPiAxICYmIHdpZF90eXBlICE9IEFDX1dJRF9BVURfTUlYICYmCi0JICAgIHdpZF90eXBlICE9IEFDX1dJRF9WT0xfS05CKQorCWlmIChjb25uX2xlbiA+IDEgJiYKKwkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX0FVRF9NSVggJiYKKwkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1ZPTF9LTkIgJiYKKwkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1BPV0VSKQogCQljdXJyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDApOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQ29ubmVjdGlvbjogJWRcbiIsIGNvbm5fbGVuKTsKQEAgLTQ2Nyw4ICs0NjksOSBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNvZGVjOiAlc1xuIiwKIAkJICAgIGNvZGVjLT5uYW1lID8gY29kZWMtPm5hbWUgOiAiTm90IFNldCIpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFkZHJlc3M6ICVkXG4iLCBjb2RlYy0+YWRkcik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiVmVuZG9yIElkOiAweCV4XG4iLCBjb2RlYy0+dmVuZG9yX2lkKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJTdWJzeXN0ZW0gSWQ6IDB4JXhcbiIsIGNvZGVjLT5zdWJzeXN0ZW1faWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZ1bmN0aW9uIElkOiAweCV4XG4iLCBjb2RlYy0+ZnVuY3Rpb25faWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZlbmRvciBJZDogMHglMDh4XG4iLCBjb2RlYy0+dmVuZG9yX2lkKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJTdWJzeXN0ZW0gSWQ6IDB4JTA4eFxuIiwgY29kZWMtPnN1YnN5c3RlbV9pZCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiUmV2aXNpb24gSWQ6IDB4JXhcbiIsIGNvZGVjLT5yZXZpc2lvbl9pZCk7CiAKIAlpZiAoY29kZWMtPm1mZykKQEAgLTU1NCw4ICs1NTcsMTQgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQW1wLU91dCBjYXBzOiAiKTsKIAkJCXByaW50X2FtcF9jYXBzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEFtcC1PdXQgdmFsczogIik7Ci0JCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCi0JCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sIDEpOworCQkJaWYgKHdpZF90eXBlID09IEFDX1dJRF9QSU4gJiYKKwkJCSAgICBjb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kKQorCQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKKwkJCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sCisJCQkJCSAgICAgICBjb25uX2xlbik7CisJCQllbHNlCisJCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAorCQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywgMSk7CiAJCX0KIAogCQlzd2l0Y2ggKHdpZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCBlNDg2MTIzLi41YmI0OGVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTI3LDExICsyNywxMiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKKyNpbmNsdWRlICJoZGFfYmVlcC5oIgogCiBzdHJ1Y3QgYWQxOTh4X3NwZWMgewogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CiAJaW50IG51bV9taXhlcnM7Ci0KKwl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwgdGVybWluYXRpb24hCiAJCQkJCQkgKi8KQEAgLTE1NCw2ICsxNTUsMTYgQEAKIAogc3RhdGljIHZvaWQgYWQxOTh4X2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCisvKiBhZGRpdGlvbmFsIGJlZXAgbWl4ZXJzOyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXJlIG92ZXJ3cml0dGVuIGF0IGJ1aWxkICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWRfYmVlcF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMCwgMCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX09VVFBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworI2RlZmluZSBzZXRfYmVlcF9hbXAoc3BlYywgbmlkLCBpZHgsIGRpcikgXAorCSgoc3BlYyktPmJlZXBfYW1wID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIGlkeCwgZGlyKSkgLyogbW9ubyAqLworCiBzdGF0aWMgaW50IGFkMTk4eF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTE4MSw2ICsxOTIsMjEgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogY3JlYXRlIGJlZXAgY29udHJvbHMgaWYgbmVlZGVkICovCisJaWYgKHNwZWMtPmJlZXBfYW1wKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCQlmb3IgKGtuZXcgPSBhZF9iZWVwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJCQlrY3RsID0gc25kX2N0bF9uZXcxKGtuZXcsIGNvZGVjKTsKKwkJCWlmICgha2N0bCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBzcGVjLT5iZWVwX2FtcDsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJLyogaWYgd2UgaGF2ZSBubyBtYXN0ZXIgY29udHJvbCwgbGV0J3MgY3JlYXRlIGl0ICovCiAJaWYgKCFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKQEAgLTQwNiw3ICs0MzIsOCBAQAogCQlyZXR1cm47CiAKIAlhZDE5OHhfZnJlZV9rY3Rscyhjb2RlYyk7Ci0Ja2ZyZWUoY29kZWMtPnNwZWMpOworCWtmcmVlKHNwZWMpOworCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIGFkMTk4eF9wYXRjaF9vcHMgPSB7CkBAIC01NDUsOCArNTcyLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCkBAIC02MTAsOCArNjM1LDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKKwkvKiAKIAkgICBIREFfQ09ERUNfVk9MVU1FKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJICAgSERBX0NPREVDX01VVEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCkBAIC04MDksOCArODMzLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CkBAIC0xMDAyLDEwICsxMDI0LDggQEAKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjQwLCAiVG9zaGliYSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGIwM2MsICJTYW1zdW5nIFI1NSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDFlLCAiRlNDIFYyMDYwIiwgQUQxOTg2QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjMsICJTYW1zdW5nIFg2MCIsIEFEMTk4NkFfU0FNU1VORyksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNCwgIlNhbXN1bmcgUjY1IiwgQUQxOTg2QV9TQU1TVU5HKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI2LCAiU2Ftc3VuZyBYMTEiLCBBRDE5ODZBX1NBTVNVTkcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjcsICJTYW1zdW5nIFExIiwgQUQxOTg2QV9VTFRSQSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTQ0ZCwgMHhmZjAwLCAweGMwMDAsICJTYW1zdW5nIiwgQUQxOTg2QV9TQU1TVU5HKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjNTA0LCAiU2Ftc3VuZyBRMzUiLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxMSwgIkxlbm92byBNNTUiLCBBRDE5ODZBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxNywgIkxlbm92byBBNjAiLCBBRDE5ODZBXzNTVEFDSyksCkBAIC0xMDI3LDE1ICsxMDQ3LDE0IEBACiAKIHN0YXRpYyBpbnQgaXNfamFja19hdmFpbGFibGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwl1bnNpZ25lZCBpbnQgY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlyZXR1cm4gZ2V0X2RlZmNmZ19jb25uZWN0KGNvbmYpICE9IEFDX0pBQ0tfUE9SVF9OT05FOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4NmEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTEwNDMsNiArMTA2MiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTkpOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTgsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gNjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTg2YV9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODZhX2RhY19uaWRzOwpAQCAtMTIyMiw4ICsxMjQ4LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMjk0LDYgKzEzMTgsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOworCWludCBlcnI7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTMwMSw2ICsxMzI2LDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODNfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxOTgzX2RhY19uaWRzOwpAQCAtMTM3MCw4ICsxNDAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNDE2LDggKzE0NDYsOCBAQAogCXsweDFlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAogCXsweDFmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAogCS8qIE1pYyBib29zdDogMGRCICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBSZWNvcmQgc2VsZWN0b3I6IEZyb250IG1pYyAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwfSwKQEAgLTE2ODIsMTAgKzE3MTIsMTAgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNTk3LCAiTGVub3ZvIFo2MCIsIEFEMTk4MV9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDEwMTQsIDB4MDViNywgIkxlbm92byBaNjBtIiwgQUQxOTgxX1RISU5LUEFEKSwKIAkvKiBBbGwgSFAgbW9kZWxzICovCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDAsICJIUCBueCIsIEFEMTk4MV9IUCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDNjLCAiSFAgbngiLCBBRDE5ODFfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIFUyMDUiLCBBRDE5ODFfVE9TSElCQSksCiAJLyogTGVub3ZvIFRoaW5rcGFkIFQ2MC9YNjAvWjZ4eCAqLwotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAwLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTgxX1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODFfVEhJTktQQUQpLAogCS8qIEhQIG54NjMyMCAocmV2ZXJzZWQgU1NJRCwgSC9XIGJ1ZykgKi8KIAlTTkRfUENJX1FVSVJLKDB4MzBiMCwgMHgxMDNjLCAiSFAgbng2MzIwIiwgQUQxOTgxX0hQKSwKIAl7fQpAQCAtMTY5NCw3ICsxNzI0LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTgxKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xNzAyLDYgKzE3MzIsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDBkLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4MV9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODFfZGFjX25pZHM7CkBAIC0xOTg4LDkgKzIwMjUsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQogCUhEQV9DT0RFQ19WT0xVTUUoIkFuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW5hbG9nIE1peCBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0yMDM0LDkgKzIwNjgsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQogCUhEQV9DT0RFQ19WT0xVTUUoIkFuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW5hbG9nIE1peCBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0yMDY2LDkgKzIwOTcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MSwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIyOTcsMTAgKzIzMjUsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAl7IH0KIH07CkBAIC0yNDA4LDEwICsyNDMyLDYgQEAKIAl7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKLQkvKiBBRENzOyBtdXRlZCAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLwogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4MWZ9LCAvKiAwZEIgKi8KIAl7IH0KQEAgLTI0ODMsMTAgKzI1MDMsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogQW5hbG9nIE1peCBvdXRwdXQgYW1wICovCiAJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIHwgMHgxZn0sIC8qIDBkQiAqLwogCXsgfQpAQCAtMjg5MCw3ICsyOTA2LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFEMTk4OF9TUERJRl9PVVQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IEFEMTk4OF9TUERJRl9JTjsKQEAgLTI5NDAsNyArMjk1Niw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4OChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMjk2MCw3ICsyOTc2LDcgQEAKIAogCWlmIChib2FyZF9jb25maWcgPT0gQUQxOTg4X0FVVE8pIHsKIAkJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCi0JCWludCBlcnIgPSBhZDE5ODhfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOworCQllcnIgPSBhZDE5ODhfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJYWQxOTh4X2ZyZWUoY29kZWMpOwogCQkJcmV0dXJuIGVycjsKQEAgLTI5NzAsNiArMjk4NiwxMyBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIEFEMTk4OF82U1RBQ0s6CiAJY2FzZSBBRDE5ODhfNlNUQUNLX0RJRzoKQEAgLTMxMjYsMTIgKzMxNDksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAotCS8qCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRGlnaXRhbCBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkRpZ2l0YWwgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCSovCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zMjA0LDEwICszMjIxLDEwIEBACiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCS8qIFBvcnQtQiAoZnJvbnQgbWljKSBwaW4gKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUG9ydC1DIChyZWFyIG1pYykgcGluICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIEFuYWxvZyBtaXhlcjsgbXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LApAQCAtMzI0MCw3ICszMjU3LDcgQEAKIAkiQ0QgUGxheWJhY2sgVm9sdW1lIiwKIAkiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsCiAJIkRvY2tpbmcgTWljIFBsYXliYWNrIFZvbHVtZSIKLQkiQmVlcCBQbGF5YmFjayBWb2x1bWUiLAorCS8qICJCZWVwIFBsYXliYWNrIFZvbHVtZSIsICovCiAJIklFQzk1OCBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwKIH07CkBAIC0zMjQ4LDYgKzMyNjUsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOworCWludCBlcnI7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMzI1NSw2ICszMjczLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE4ODRfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODg0X2RhY19uaWRzOwpAQCAtMzMyMSw4ICszMzQ2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2tpbmcgTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzM1OCw3ICszMzgxLDcgQEAKIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBkb2NraW5nIG1pYyBib29zdCAqLwotCXsweDI1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDI1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCS8qIEFuYWxvZyBtaXhlciAtIGRvY2tpbmcgbWljOyBtdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIGVuYWJsZSBFQVBEIGJpdCAqLwpAQCAtMzM3OSwxMCArMzQwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtSW4gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZS1JbiBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAotCS8qCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNDY4LDcgKzM0ODcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWQxOTg0X2NmZ190YmxbXSA9IHsKIAkvKiBMZW5vdm8gVGhpbmtwYWQgVDYxL1g2MSAqLwotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAwLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTg0X1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODRfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyMTQsICJEZWxsIFQzNDAwIiwgQUQxOTg0X0RFTExfREVTS1RPUCksCiAJe30KIH07CkBAIC0zNTYxLDggKzM1ODAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNjIyLDEwICszNjM5LDEwIEBACiAJezB4MTMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogUG9ydC1CIChmcm9udCBtaWMpIHBpbiAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUMgKHJlYXIgbGluZS1pbikgcGluICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUG9ydC1FIChyZWFyIG1pYykgcGluICovCiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCiAJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCkBAIC0zNjk1LDggKzM3MTIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEb2NrIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzcyNCw4ICszNzM5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM4MzYsOCArMzg0OSw2IEBACiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzkxMSw5ICszOTIyLDkgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDMwLCAiSFAiLCBBRDE4ODRBX01PQklMRSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAzNywgIkhQIDIyMzBzIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwNTYsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGU2LCAiSFAgNjczMGIiLCBBRDE4ODRBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBlNywgIkhQIEVsaXRlQm9vayA4NTMwcCIsIEFEMTg4NEFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjE0LCAiSFAgNjczMHMiLCBBRDE4ODRBX0xBUFRPUCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZmYwLCAweDMwNzAsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzBlMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzYwMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGFjLCAiVGhpbmtwYWQgWDMwMCIsIEFEMTg4NEFfVEhJTktQQUQpLAogCXt9CiB9OwpAQCAtMzkyMSw3ICszOTMyLDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxODg0YShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMzkyOSw2ICszOTQwLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE4ODRhX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4NGFfZGFjX25pZHM7CkBAIC0zOTY2LDYgKzM5ODQsMTQgQEAKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxODg0YV9ocF91bnNvbF9ldmVudDsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxODg0YV9ocF9pbml0OworCQkvKiBzZXQgdGhlIHVwcGVyLWxpbWl0IGZvciBtaXhlciBhbXAgdG8gMGRCIGZvciBhdm9pZGluZyB0aGUKKwkJICogcG9zc2libGUgZGFtYWdlIGJ5IG92ZXJsb2FkaW5nCisJCSAqLworCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDIwLCBIREFfSU5QVVQsCisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX09GRlNFVF9TSElGVCkgfAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQpIHwKKwkJCQkJICAoMHgwNSA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CisJCQkJCSAgKDEgPDwgQUNfQU1QQ0FQX01VVEVfU0hJRlQpKTsKIAkJYnJlYWs7CiAJY2FzZSBBRDE4ODRBX1RISU5LUEFEOgogCQlzcGVjLT5taXhlcnNbMF0gPSBhZDE5ODRhX3RoaW5rcGFkX21peGVyczsKQEAgLTQwODMsOCArNDEwOSw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTQwOTcsOCArNDEyMSw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRpZ2l0YWwgTWljIEJvb3N0IiwgMHgxZiwgMHgwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC00MjU3LDcgKzQyNzksNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQyNjUsNiArNDI4NywxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gNjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDM7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODJfZGFjX25pZHM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCBmM2ViZTgzLi5jOTIxMjY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTY4MCwxMyArNjgwLDEzIEBACiAJCXN0cnVjdCBhdXRvX3Bpbl9jZmcgY2ZnOwogCiAJCS8qIGNvbGxlY3QgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCQlwb3J0X2UgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MGYsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJcG9ydF9mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEwLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCXBvcnRfZSA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgwZik7CisJCXBvcnRfZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMCk7CiAJCXNwZWMtPmZyb250X3BhbmVsID0gMTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2UpID09IEFDX0pBQ0tfUE9SVF9OT05FIHx8CiAJCSAgICBnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkgewotCQkJcG9ydF9nID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFmLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCQlwb3J0X2ggPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJCXBvcnRfZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxZik7CisJCQlwb3J0X2ggPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MjApOwogCQkJc3BlYy0+Y2hhbm5lbF9tb2RlcyA9IGNtaTk4ODBfY2hhbm5lbF9tb2RlczsKIAkJCS8qIG5vIGZyb250IHBhbmVsICovCiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZykgPT0gQUNfSkFDS19QT1JUX05PTkUgfHwKQEAgLTcwMyw4ICs3MDMsOCBAQAogCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gY21pOTg4MF9jaGFubmVsX21vZGVzWzBdLmNoYW5uZWxzOwogCQl9IGVsc2UgewogCQkJc3BlYy0+aW5wdXRfbXV4ID0gJmNtaTk4ODBfYmFzaWNfbXV4OwotCQkJcG9ydF9zcGRpZmkgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTMsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJCXBvcnRfc3BkaWZvID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEyLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQlwb3J0X3NwZGlmaSA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMyk7CisJCQlwb3J0X3NwZGlmbyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMik7CiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfc3BkaWZvKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKIAkJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IENNSV9ESUdfT1VUX05JRDsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9zcGRpZmkpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDAxNzdlZjguLjFmMmFkNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTU4LDYgKzU4LDcgQEAKIAogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CiAJaW50IG51bV9taXhlcnM7CisJaGRhX25pZF90IHZtYXN0ZXJfbmlkOwogCiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKQEAgLTcyLDYgKzczLDcgQEAKIAkJCQkJICovCiAJdW5zaWduZWQgaW50IGN1cl9lYXBkOwogCXVuc2lnbmVkIGludCBocF9wcmVzZW50OworCXVuc2lnbmVkIGludCBub19hdXRvX21pYzsKIAl1bnNpZ25lZCBpbnQgbmVlZF9kYWNfZml4OwogCiAJLyogY2FwdHVyZSAqLwpAQCAtNDYxLDYgKzQ2MywyOSBAQAogCWtmcmVlKGNvZGVjLT5zcGVjKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dF9jYXB0dXJlX21peGVyc1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0CisJfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNsYXZlX3ZvbHNbXSA9IHsKKwkiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCisJIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2xhdmVfc3dzW10gPSB7CisJIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCSJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCisJTlVMTAorfTsKKwogc3RhdGljIGludCBjb25leGFudF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDg4LDYgKzUxMywzMiBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorCisJLyogaWYgd2UgaGF2ZSBubyBtYXN0ZXIgY29udHJvbCwgbGV0J3MgY3JlYXRlIGl0ICovCisJaWYgKHNwZWMtPnZtYXN0ZXJfbmlkICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CisJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKKwkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPnZtYXN0ZXJfbmlkLAorCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CisJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJICB2bWFzdGVyX3Rsdiwgc2xhdmVfdm9scyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaWYgKHNwZWMtPnZtYXN0ZXJfbmlkICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkJICBOVUxMLCBzbGF2ZV9zd3MpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHNwZWMtPmlucHV0X211eCkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgY3h0X2NhcHR1cmVfbWl4ZXJzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC03MTksMTMgKzc3MCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03NTksMTMgKzgwMyw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9taXhlcnNfaHA1MzBbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTAwMiwxNSArMTAzOSw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA0NV9jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhNSwgIkhQIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiMiwgIkhQIERWIFNlcmllcyIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjUsICJIUCBEVjIxMjAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI3LCAiSFAgRFY2MDAwWiIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYmIsICJIUCBEVjgwMDAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNkLCAiSFAgRFYgU2VyaWVzIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWOTUzM0VHIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBkNSwgIkhQIDUzMCIsIENYVDUwNDVfTEFQVE9QX0hQNTMwKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGQ5LCAiSFAgU3BhcnRhbiIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzMDAwLCAiSFAgRFYgU2VyaWVzIiwKKwkJCSAgIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIFAxMDUiLCBDWFQ1MDQ1X0xBUFRPUF9NSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDc1MywgIkJlbnEgUjU1RSIsIENYVDUwNDVfQkVOUSksCiAJU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTBhZCwgIkZ1aml0c3UgU2kxNTIwIiwgQ1hUNTA0NV9MQVBUT1BfTUlDU0VOU0UpLApAQCAtMTAyMCw4ICsxMDUxLDggQEAKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgxZTQwLCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MmYwNSwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDJmMDYsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTA2LCAiUGFja2FyZCBCZWxsIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDE2MzEsIDB4YzEwNywgIlBhY2thcmQgQmVsbCIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE2MzEsIDB4ZmYwMCwgMHhjMTAwLCAiUGFja2FyZCBCZWxsIiwKKwkJCSAgIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweDIxMTEsICJDb25leGFudCBSZWZlcmVuY2UgYm9hcmQiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAl7fQogfTsKQEAgLTEwMzUsNiArMTA2Niw3IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCA9IDE7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShjeHQ1MDQ1X2RhY19uaWRzKTsKQEAgLTExMzQsNyArMTE2Niw3IEBACiAvKiBDb25leGFudCA1MDQ3IHNwZWNpZmljICovCiAjZGVmaW5lIENYVDUwNDdfU1BESUZfT1VUCTB4MTEKIAotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2RhY19uaWRzWzJdID0geyAweDEwLCAweDFjIH07CitzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMV0gPSB7IDB4MTAgfTsgLyogMHgxYyAqLwogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2FkY19uaWRzWzFdID0geyAweDEyIH07CiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MWEgfTsKIApAQCAtMTE0MiwyMCArMTE3NCw2IEBACiAJeyAyLCBOVUxMIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N19jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMSwKLQkuaXRlbXMgPSB7Ci0JCXsgIk1pYyIsIDB4MiB9LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X2hwX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAxLAotCS5pdGVtcyA9IHsKLQkJeyAiRXh0TWljIiwgMHgyIH0sCi0JfQotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfdG9zaGliYV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CkBAIC0xMTc5LDcgKzExOTcsMTEgQEAKIAkgKiB0aGUgaGVhZHBob25lIGphY2sKIAkgKi8KIAliaXRzID0gKCFzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IDAgOiBIREFfQU1QX01VVEU7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAorCS8qIE5PVEU6IENvbmV4YXQgY29kZWMgbmVlZHMgdGhlIGluZGV4IGZvciAqT1VUUFVUKiBhbXAgb2YKKwkgKiBwaW4gd2lkZ2V0cyB1bmxpa2Ugb3RoZXIgY29kZWNzLiAgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvCisJICogc2V0IGluZGV4IDB4MDEgZm9yIHRoZSB2b2x1bWUgZnJvbSB0aGUgbWl4ZXIgYW1wIDB4MTkuCisJICovCisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAweDAxLAogCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwogCWJpdHMgPSBzcGVjLT5jdXJfZWFwZCA/IDAgOiBIREFfQU1QX01VVEU7CiAJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDEzLCBIREFfT1VUUFVULCAwLApAQCAtMTE4NywxNiArMTIwOSw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIGJpbmQgdm9sdW1lcyBvZiBib3RoIE5JRCAweDEzIChIZWFkcGhvbmVzKSBhbmQgMHgxZCAoU3BlYWtlcnMpICovCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgY3h0NTA0N19iaW5kX21hc3Rlcl92b2wgPSB7Ci0JLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAotCS52YWx1ZXMgPSB7Ci0JCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxMywgMywgMCwgSERBX09VVFBVVCksCi0JCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxZCwgMywgMCwgSERBX09VVFBVVCksCi0JCTAKLQl9LAotfTsKLQogLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNDdfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMjA3LDI3ICsxMjE5LDggQEAKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwogCiAJYml0cyA9IChzcGVjLT5ocF9wcmVzZW50IHx8ICFzcGVjLT5jdXJfZWFwZCkgPyBIREFfQU1QX01VVEUgOiAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQkvKiBNdXRlL1VubXV0ZSBQQ00gMiBmb3IgZ29vZCBtZWFzdXJlIC0gc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYywgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNDdfaHAyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JdW5zaWduZWQgaW50IGJpdHM7Ci0KLQlzcGVjLT5ocF9wcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLAotCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0KLQliaXRzID0gc3BlYy0+aHBfcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCS8qIE11dGUvVW5tdXRlIFBDTSAyIGZvciBnb29kIG1lYXN1cmUgLSBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFjLCBIREFfT1VUUFVULCAwLAorCS8qIFNlZSB0aGUgbm90ZSBpbiBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQgKi8KKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDB4MDEsCiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CiB9CiAKQEAgLTEyNjgsOTAgKzEyNjEsMzUgQEAKIAl9CiB9CiAKLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgLSBub24tRUFQRCBzeXN0ZW1zICovCi1zdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwMl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JcmVzID4+PSAyNjsKLQlzd2l0Y2ggKHJlcykgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNDdfaHAyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNDdfaHBfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfbWl4ZXJzW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJ5cGFzcyBDYXB0dXJlIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBHYWluIFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBHYWluIFN3aXRjaCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19iYXNlX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDFhLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTS0yIFZvbHVtZSIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQ00tMiBTd2l0Y2giLCAweDFjLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MWQsIDB4MDAsIEhEQV9PVVRQVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCisJCS5nZXQgPSBjeHRfZWFwZF9nZXQsCisJCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKKwl9LAorCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX3Nwa19taXhlcnNbXSA9IHsKKwkvKiBTZWUgdGhlIG5vdGUgaW4gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0ICovCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAxLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N190b3NoaWJhX21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmN4dDUwNDdfYmluZF9tYXN0ZXJfdm9sKSwKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAotCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAotCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCi0JfSwKLQotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9taXhlcnNbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJ5cGFzcyBDYXB0dXJlIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBTd2l0Y2giLCAweDE5LDB4MDIsSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX29ubHlfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKLQl9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTEzNjIsOCArMTMwMCw4IEBACiAJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzUwIH0sCiAJLyogSFAsIFNwZWFrZXIgICovCiAJezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCi0JezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCi0JezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MH0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LCAvKiBtaXhlcigweDE5KSAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwgLyogbWl4ZXIoMHgxOSkgKi8KIAkvKiBSZWNvcmQgc2VsZWN0b3I6IE1pYyAqLwogCXsweDEyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAzfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTEzODMsMzAgKzEzMjEsNyBAQAogCiAvKiBjb25maWd1cmF0aW9uIGZvciBUb3NoaWJhIExhcHRvcHMgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N190b3NoaWJhX2luaXRfdmVyYnNbXSA9IHsKLQl7MHgxMywgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MCB9LCAvKiBkZWZhdWx0IG9uICovCi0JLyogcGluIHNlbnNpbmcgb24gSFAgYW5kIE1pYyBqYWNrcyAqLwotCXsweDEzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfTUlDX0VWRU5UfSwKLQkvKiBTcGVha2VyIHJvdXRpbmcgKi8KLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKLQl7fQotfTsKLQotLyogY29uZmlndXJhdGlvbiBmb3IgSFAgTGFwdG9wcyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X2hwX2luaXRfdmVyYnNbXSA9IHsKLQkvKiBwaW4gc2Vuc2luZyBvbiBIUCBqYWNrICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCi0JLyogMHgxMyBpcyBhY3R1YWxseSBzaGFyZWQgYnkgYm90aCBIUCBhbmQgc3BlYWtlcjsKLQkgKiBzZXR0aW5nIHRoZSBjb25uZWN0aW9uIHRvIDAgKD0weDE5KSBtYWtlcyB0aGUgbWFzdGVyIHZvbHVtZSBjb250cm9sCi0JICogd29ya2luZyBteXN0ZXJpb3VzbGx5Li4uCi0JICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAotCS8qIFJlY29yZCBzZWxlY3RvcjogRXh0IE1pYyAqLwotCXsweDEyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAzfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKLQkvKiBTcGVha2VyIHJvdXRpbmcgKi8KLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MH0sIC8qIGRlZmF1bHQgb2ZmICovCiAJe30KIH07CiAKQEAgLTE1NzEsMTEgKzE0ODYsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNDdfY2ZnX3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTAsICJIUCBEVjEwMDAiLCBDWFQ1MDQ3X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhNSwgIkhQIERWNTIwMFQvRFY4MDAwVCIsIENYVDUwNDdfTEFQVE9QX0hQKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGIyLCAiSFAgRFYyMDAwVC9EVjMwMDBUIiwgQ1hUNTA0N19MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjUsICJIUCBEVjIwMDBaIiwgQ1hUNTA0N19MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2YsICJIUCBEVjY3MDAiLCBDWFQ1MDQ3X0xBUFRPUCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDMwMDAsICJIUCBEViBTZXJpZXMiLAorCQkJICAgQ1hUNTA0N19MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIFAxMDAiLCBDWFQ1MDQ3X0xBUFRPUF9FQVBEKSwKIAl7fQogfTsKQEAgLTE1ODksNiArMTUwMiw3IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCA9IDE7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShjeHQ1MDQ3X2RhY19uaWRzKTsKQEAgLTE1OTcsOSArMTUxMSw4IEBACiAJc3BlYy0+bnVtX2FkY19uaWRzID0gMTsKIAlzcGVjLT5hZGNfbmlkcyA9IGN4dDUwNDdfYWRjX25pZHM7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBjeHQ1MDQ3X2NhcHNyY19uaWRzOwotCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X2NhcHR1cmVfc291cmNlOwogCXNwZWMtPm51bV9taXhlcnMgPSAxOwotCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfbWl4ZXJzOworCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfYmFzZV9taXhlcnM7CiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDQ3X2luaXRfdmVyYnM7CiAJc3BlYy0+c3BkaWZfcm91dGUgPSAwOwpAQCAtMTYxMywyMSArMTUyNiwyMiBAQAogCQkJCQkJICBjeHQ1MDQ3X2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHAyX3Vuc29sX2V2ZW50OworCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwkJc3BlYy0+bWl4ZXJzWzFdID0gY3h0NTA0N19ocF9zcGtfbWl4ZXJzOworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUF9IUDoKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfaHBfY2FwdHVyZV9zb3VyY2U7Ci0JCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKLQkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDdfaHBfaW5pdF92ZXJiczsKLQkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19ocF9taXhlcnM7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX29ubHlfbWl4ZXJzOwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA0N19ocF9pbml0OwogCQlicmVhazsKIAljYXNlIENYVDUwNDdfTEFQVE9QX0VBUEQ6CiAJCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X3Rvc2hpYmFfY2FwdHVyZV9zb3VyY2U7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX3Nwa19taXhlcnM7CiAJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKIAkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDdfdG9zaGliYV9pbml0X3ZlcmJzOwotCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzOwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwpAQCAtMTYzOCw2ICsxNTUyLDcgQEAKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAjZW5kaWYJCiAJfQorCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgxMzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY3Myw4ICsxNTg4LDExIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNTFfcG9ydGJfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCisJaWYgKHNwZWMtPm5vX2F1dG9fbWljKQorCQlyZXR1cm47CiAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNywgMCwKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJgogCQlBQ19QSU5TRU5TRV9QUkVTRU5DRTsKQEAgLTE2OTAsNiArMTYwOCw4IEBACiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAJaGRhX25pZF90IG5ld19hZGM7CiAKKwlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE4LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCiAJCUFDX1BJTlNFTlNFX1BSRVNFTkNFOwpAQCAtMTc3Niw2ICsxNjk2LDIyIEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnNbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCisJCS5nZXQgPSBjeHRfZWFwZF9nZXQsCisJCS5wdXQgPSBjeHQ1MDUxX2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxYSwKKwl9LAorCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9pbml0X3ZlcmJzW10gPSB7CiAJLyogTGluZSBpbiwgTWljICovCiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKQEAgLTE4MDYsNiArMTc0Miw2NiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9ocF9kdjY3MzZfaW5pdF92ZXJic1tdID0geworCS8qIExpbmUgaW4sIE1pYyAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDB9LAorCS8qIFNQSyAgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQLCBBbXAgICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFJlY29yZCBzZWxlY3RvcjogSW50IG1pYyAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpIHwgMHg0NH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJLyogRUFQRCAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfbGVub3ZvX3gyMDBfaW5pdF92ZXJic1tdID0geworCS8qIExpbmUgaW4sIE1pYyAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJLyogU1BLICAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogSFAsIEFtcCAgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogRG9ja2luZyBIUCAqLworCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpIHwgMHg0NH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDQ0fSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQ19FVkVOVH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKIC8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KIHN0YXRpYyBpbnQgY3h0NTA1MV9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTgyMywxOCArMTgxOSwyNCBAQAogZW51bSB7CiAJQ1hUNTA1MV9MQVBUT1AsCSAvKiBMYXB0b3BzIHcvIEVBUEQgc3VwcG9ydCAqLwogCUNYVDUwNTFfSFAsCS8qIG5vIGRvY2tpbmcgKi8KKwlDWFQ1MDUxX0hQX0RWNjczNiwJLyogSFAgd2l0aG91dCBtaWMgc3dpdGNoICovCisJQ1hUNTA1MV9MRU5PVk9fWDIwMCwJLyogTGVub3ZvIFgyMDAgbGFwdG9wICovCiAJQ1hUNTA1MV9NT0RFTFMKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpjeHQ1MDUxX21vZGVsc1tDWFQ1MDUxX01PREVMU10gPSB7CiAJW0NYVDUwNTFfTEFQVE9QXQk9ICJsYXB0b3AiLAogCVtDWFQ1MDUxX0hQXQkJPSAiaHAiLAorCVtDWFQ1MDUxX0hQX0RWNjczNl0JPSAiaHAtZHY2NzM2IiwKKwlbQ1hUNTA1MV9MRU5PVk9fWDIwMF0JPSAibGVub3ZvLXgyMDAiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNTFfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2YsICJIUCBEVjY3MzYiLCBDWFQ1MDUxX0hQX0RWNjczNiksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4MDEwMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsCiAJCSAgICAgIENYVDUwNTFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHg1MDUxLCAiSFAgU3BhcnRhbiAxLjEiLCBDWFQ1MDUxX0hQKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiTGVub3ZvIFgyMDAiLCBDWFQ1MDUxX0xFTk9WT19YMjAwKSwKIAl7fQogfTsKIApAQCAtMTg0Nyw2ICsxODQ5LDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBjb25leGFudF9wYXRjaF9vcHM7CiAJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA1MV9pbml0OwpAQCAtMTg2NywxNyArMTg3MCwyMiBAQAogCXNwZWMtPmN1cl9hZGMgPSAwOwogCXNwZWMtPmN1cl9hZGNfaWR4ID0gMDsKIAorCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OworCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLAogCQkJCQkJICBjeHQ1MDUxX21vZGVscywKIAkJCQkJCSAgY3h0NTA1MV9jZmdfdGJsKTsKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQ1hUNTA1MV9IUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfbWl4ZXJzOwogCQlicmVhazsKLQlkZWZhdWx0OgotCWNhc2UgQ1hUNTA1MV9MQVBUT1A6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OworCWNhc2UgQ1hUNTA1MV9IUF9EVjY3MzY6CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzOworCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnM7CisJCXNwZWMtPm5vX2F1dG9fbWljID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDUxX0xFTk9WT19YMjAwOgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9sZW5vdm9feDIwMF9pbml0X3ZlcmJzOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggNmMyNmFmYy4uODIwOTc3OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCisjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogI2RlZmluZSBBTEM4ODBfRlJPTlRfRVZFTlQJCTB4MDEKICNkZWZpbmUgQUxDODgwX0RDVk9MX0VWRU5UCQkweDAyCkBAIC03Nyw2ICs3OCw3IEBACiAJQUxDMjYwX0FDRVIsCiAJQUxDMjYwX1dJTEwsCiAJQUxDMjYwX1JFUExBQ0VSXzY3MlYsCisJQUxDMjYwX0ZBVk9SSVQxMDAsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCUFMQzI2MF9URVNULAogI2VuZGlmCkBAIC0xMDMsNiArMTA1LDcgQEAKIAlBTEMyNjJfTkVDLAogCUFMQzI2Ml9UT1NISUJBX1MwNiwKIAlBTEMyNjJfVE9TSElCQV9SWDEsCisJQUxDMjYyX1RZQU4sCiAJQUxDMjYyX0FVVE8sCiAJQUxDMjYyX01PREVMX0xBU1QgLyogbGFzdCB0YWcgKi8KIH07CkBAIC0yMzgsNiArMjQxLDEzIEBACiAJQUxDODgzX01PREVMX0xBU1QsCiB9OwogCisvKiBzdHlsZXMgb2YgY2FwdHVyZSBzZWxlY3Rpb24gKi8KK2VudW0geworCUNBUFRfTVVYID0gMCwJLyogb25seSBtdXggYmFzZWQgKi8KKwlDQVBUX01JWCwJLyogb25seSBtaXhlciBiYXNlZCAqLworCUNBUFRfMU1VWF9NSVgsCS8qIGZpcnN0IG11eCBhbmQgb3RoZXIgbWl4ZXJzICovCit9OworCiAvKiBmb3IgR1BJTyBQb2xsICovCiAjZGVmaW5lIEdQSU9fTUFTSwkweDAzCiAKQEAgLTI0Niw2ICsyNTYsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CS8qIG1peGVyIGFycmF5cyAqLwogCXVuc2lnbmVkIGludCBudW1fbWl4ZXJzOwogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBfbWl4ZXI7CS8qIGNhcHR1cmUgbWl4ZXIgKi8KKwl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTApAQCAtMjY5LDEzICsyODAsMTUgQEAKIAkJCQkJICogZGlnX291dF9uaWQgYW5kIGhwX25pZCBhcmUgb3B0aW9uYWwKIAkJCQkJICovCiAJaGRhX25pZF90IGFsdF9kYWNfbmlkOworCWhkYV9uaWRfdCBzbGF2ZV9kaWdfb3V0c1szXTsJLyogb3B0aW9uYWwgLSBmb3IgYXV0by1wYXJzaW5nICovCisJaW50IGRpZ19vdXRfdHlwZTsKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJaGRhX25pZF90ICpjYXBzcmNfbmlkczsKIAloZGFfbmlkX3QgZGlnX2luX25pZDsJCS8qIGRpZ2l0YWwtaW4gTklEOyBvcHRpb25hbCAqLwotCXVuc2lnbmVkIGNoYXIgaXNfbWl4X2NhcHR1cmU7CS8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlIChub24tbXV4KSAqLworCWludCBjYXB0dXJlX3N0eWxlOwkJLyogY2FwdHVyZSBzdHlsZSAoQ0FQVF8qKSAqLwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX211eF9kZWZzOwpAQCAtMjkzLDcgKzMwNiw3IEBACiAJLyogZHluYW1pYyBjb250cm9scywgaW5pdF92ZXJicyBhbmQgaW5wdXRfbXV4ICovCiAJc3RydWN0IGF1dG9fcGluX2NmZyBhdXRvY2ZnOwogCXN0cnVjdCBzbmRfYXJyYXkga2N0bHM7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfaW11eFszXTsKIAloZGFfbmlkX3QgcHJpdmF0ZV9kYWNfbmlkc1tBVVRPX0NGR19NQVhfT1VUU107CiAKIAkvKiBob29rcyAqLwpAQCAtMzA1LDYgKzMxOCw5IEBACiAJdW5zaWduZWQgaW50IGphY2tfcHJlc2VudDogMTsKIAl1bnNpZ25lZCBpbnQgbWFzdGVyX3N3OiAxOwogCisJLyogb3RoZXIgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgbm9fYW5hbG9nIDoxOyAvKiBkaWdpdGFsIEkvTyBvbmx5ICovCisKIAkvKiBmb3IgdmlydHVhbCBtYXN0ZXIgKi8KIAloZGFfbmlkX3Qgdm1hc3Rlcl9uaWQ7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQpAQCAtMzE0LDEzICszMzAsNiBAQAogCS8qIGZvciBQTEwgZml4ICovCiAJaGRhX25pZF90IHBsbF9uaWQ7CiAJdW5zaWduZWQgaW50IHBsbF9jb2VmX2lkeCwgcGxsX2NvZWZfYml0OwotCi0jaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKLSNkZWZpbmUgQUxDX01BWF9QSU5TCTE2Ci0JdW5zaWduZWQgaW50IG51bV9waW5zOwotCWhkYV9uaWRfdCBwaW5fbmlkc1tBTENfTUFYX1BJTlNdOwotCXVuc2lnbmVkIGludCBwaW5fY2Znc1tBTENfTUFYX1BJTlNdOwotI2VuZGlmCiB9OwogCiAvKgpAQCAtMzM2LDYgKzM0NSw3IEBACiAJaGRhX25pZF90ICpkYWNfbmlkczsKIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CQkvKiBvcHRpb25hbCAqLwogCWhkYV9uaWRfdCBocF9uaWQ7CQkvKiBvcHRpb25hbCAqLworCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7CiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKIAloZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CkBAIC0zOTIsNyArNDAyLDggQEAKIAltdXhfaWR4ID0gYWRjX2lkeCA+PSBzcGVjLT5udW1fbXV4X2RlZnMgPyAwIDogYWRjX2lkeDsKIAlpbXV4ID0gJnNwZWMtPmlucHV0X211eFttdXhfaWR4XTsKIAotCWlmIChzcGVjLT5pc19taXhfY2FwdHVyZSkgeworCWlmIChzcGVjLT5jYXB0dXJlX3N0eWxlICYmCisJICAgICEoc3BlYy0+Y2FwdHVyZV9zdHlsZSA9PSBDQVBUXzFNVVhfTUlYICYmICFhZGNfaWR4KSkgewogCQkvKiBNYXRyaXgtbWl4ZXIgc3R5bGUgKGUuZy4gQUxDODgyKSAqLwogCQl1bnNpZ25lZCBpbnQgKmN1cl92YWwgPSAmc3BlYy0+Y3VyX211eFthZGNfaWR4XTsKIAkJdW5zaWduZWQgaW50IGksIGlkeDsKQEAgLTc1MCw2ICs3NjEsMjQgQEAKICNlbmRpZiAgIC8qIENPTkZJR19TTkRfREVCVUcgKi8KIAogLyoKKyAqIHNldCB1cCB0aGUgaW5wdXQgcGluIGNvbmZpZyAoZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiBhdXRvLXBpbiB0eXBlKQorICovCitzdGF0aWMgdm9pZCBhbGNfc2V0X2lucHV0X3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICAgIGludCBhdXRvX3Bpbl90eXBlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSBQSU5fSU47CisKKwlpZiAoYXV0b19waW5fdHlwZSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMpIHsKKwkJdW5zaWduZWQgaW50IHBpbmNhcDsKKwkJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKKwkJcGluY2FwID0gKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGKSA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVDsKKwkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGXzgwKQorCQkJdmFsID0gUElOX1ZSRUY4MDsKKwl9CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHZhbCk7Cit9CisKKy8qCiAgKi8KIHN0YXRpYyB2b2lkIGFkZF9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXgpCiB7CkBAIC04MTAsNiArODM5LDcgQEAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IHByZXNldC0+bnVtX2RhY3M7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBwcmVzZXQtPmRhY19uaWRzOwogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gcHJlc2V0LT5kaWdfb3V0X25pZDsKKwlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHByZXNldC0+c2xhdmVfZGlnX291dHM7CiAJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gcHJlc2V0LT5ocF9uaWQ7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSBwcmVzZXQtPm51bV9tdXhfZGVmczsKQEAgLTkyMSw3ICs5NTEsNyBAQAogCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwogfQogI2Vsc2UKLSNkZWZpbmUgYWxjX21pY19hdXRvbXV0ZShjb2RlYykgLyogTk9QICovCisjZGVmaW5lIGFsY19taWNfYXV0b211dGUoY29kZWMpIGRvIHt9IHdoaWxlKDApIC8qIE5PUCAqLwogI2VuZGlmIC8qIGRpc2FibGVkICovCiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KQEAgLTk1Miw3ICs5ODIsNyBAQAogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDApOwogCXRtcCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9HRVRfUFJPQ19DT0VGLCAwKTsKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCA3KTsKLQlpZiAoKHRtcCAmIDB4ZjApID09IDIpCisJaWYgKCh0bXAgJiAweGYwKSA9PSAweDIwKQogCQkvKiBhbGM4ODhTLVZDICovCiAJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwKIAkJCQkgICBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4ODMwKTsKQEAgLTk5MSw4ICsxMDIxLDcgQEAKIAluaWQgPSAweDFkOwogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNjApCiAJCW5pZCA9IDB4MTc7Ci0JYXNzID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwlhc3MgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJaWYgKCEoYXNzICYgMSkgJiYgIShhc3MgJiAweDEwMDAwMCkpCiAJCXJldHVybjsKIAlpZiAoKGFzcyA+PiAzMCkgIT0gMSkJLyogbm8gcGh5c2ljYWwgY29ubmVjdGlvbiAqLwpAQCAtMTE2NiwxNiArMTE5NSw4IEBACiAJCXJldHVybjsKIAogCWNmZyA9IHBpbmZpeFtxdWlyay0+dmFsdWVdOwotCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspIHsKLQkJaW50IGk7Ci0JCXUzMiB2YWwgPSBjZmctPnZhbDsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgY2ZnLT5uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAgKyBpLAotCQkJCSAgICB2YWwgJiAweGZmKTsKLQkJCXZhbCA+Pj0gODsKLQkJfQotCX0KKwlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQorCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIGNmZy0+bmlkLCBjZmctPnZhbCk7CiB9CiAKIC8qCkBAIC0xMzc1LDggKzEzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDgzLDggKzE1MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAsIEhEQV9PVVRQVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xNTc4LDggKzE1OTUsNyBAQAogCQkJCSAgICAgc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX3B1dCk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0NBUE1JWChudW0pIFwKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfY2FwdHVyZV9taXhlciAjIyBudW1bXSA9IHsgXAorI2RlZmluZSBfREVGSU5FX0NBUE1JWChudW0pIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkJLm5hbWUgPSAiQ2FwdHVyZSBTd2l0Y2giLCBcCkBAIC0xNjAwLDcgKzE2MTYsOSBAQAogCQkuZ2V0ID0gYWxjX2NhcF92b2xfZ2V0LCBcCiAJCS5wdXQgPSBhbGNfY2FwX3ZvbF9wdXQsIFwKIAkJLnRsdiA9IHsgLmMgPSBhbGNfY2FwX3ZvbF90bHYgfSwgXAotCX0sIFwKKwl9CisKKyNkZWZpbmUgX0RFRklORV9DQVBTUkMobnVtKSBcCiAJeyBcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8gXApAQCAtMTYwOSwxNSArMTYyNywyOCBAQAogCQkuaW5mbyA9IGFsY19tdXhfZW51bV9pbmZvLCBcCiAJCS5nZXQgPSBhbGNfbXV4X2VudW1fZ2V0LCBcCiAJCS5wdXQgPSBhbGNfbXV4X2VudW1fcHV0LCBcCi0JfSwgXAotCXsgfSAvKiBlbmQgKi8gXAorCX0KKworI2RlZmluZSBERUZJTkVfQ0FQTUlYKG51bSkgXAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyICMjIG51bVtdID0geyBcCisJX0RFRklORV9DQVBNSVgobnVtKSwJCQkJICAgICAgXAorCV9ERUZJTkVfQ0FQU1JDKG51bSksCQkJCSAgICAgIFwKKwl7IH0gLyogZW5kICovCQkJCQkgICAgICBcCit9CisKKyNkZWZpbmUgREVGSU5FX0NBUE1JWF9OT1NSQyhudW0pIFwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYyAjIyBudW1bXSA9IHsgXAorCV9ERUZJTkVfQ0FQTUlYKG51bSksCQkJCQkgICAgXAorCXsgfSAvKiBlbmQgKi8JCQkJCQkgICAgXAogfQogCiAvKiB1cCB0byB0aHJlZSBBRENzICovCiBERUZJTkVfQ0FQTUlYKDEpOwogREVGSU5FX0NBUE1JWCgyKTsKIERFRklORV9DQVBNSVgoMyk7Ci0KK0RFRklORV9DQVBNSVhfTk9TUkMoMSk7CitERUZJTkVfQ0FQTUlYX05PU1JDKDIpOworREVGSU5FX0NBUE1JWF9OT1NSQygzKTsKIAogLyoKICAqIEFMQzg4MCA1LXN0YWNrIG1vZGVsCkBAIC0xNzA2LDggKzE3MzcsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTE4ODQsMTMgKzE5MTMsNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLS8qIGFkZGl0aW9uYWwgbWl4ZXJzIHRvIGFsYzg4MF9hc3VzX21peGVyICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3BjYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIC8qIFRDTCBTNzAwICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3RjbF9zNzAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE5MjMsOCArMTk0NSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMTk5OSw2ICsyMDE5LDEzIEBACiAKIHN0YXRpYyB2b2lkIGFsY19mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAorLyogYWRkaXRpb25hbCBiZWVwIG1peGVyczsgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbiBhdCBidWlsZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19iZWVwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAwLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDAsIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogc3RhdGljIGludCBhbGNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0yMDIwLDExICsyMDQ3LDEzIEBACiAJCQkJCQkgICAgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX3NoYXJlX3N3KGNvZGVjLAotCQkJCQkJICAgICZzcGVjLT5tdWx0aW91dCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJc3BlYy0+bXVsdGlvdXQuc2hhcmVfc3BkaWYgPSAxOworCQlpZiAoIXNwZWMtPm5vX2FuYWxvZykgeworCQkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfc2hhcmVfc3coY29kZWMsCisJCQkJCQkJICAgICZzcGVjLT5tdWx0aW91dCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJc3BlYy0+bXVsdGlvdXQuc2hhcmVfc3BkaWYgPSAxOworCQl9CiAJfQogCWlmIChzcGVjLT5kaWdfaW5fbmlkKSB7CiAJCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX2luX2N0bHMoY29kZWMsIHNwZWMtPmRpZ19pbl9uaWQpOwpAQCAtMjAzMiw4ICsyMDYxLDI0IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLworCWlmIChzcGVjLT5iZWVwX2FtcCkgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwkJZm9yIChrbmV3ID0gYWxjX2JlZXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOworCQkJaWYgKCFrY3RsKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KLQlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgewogCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CiAJCXNuZF9oZGFfc2V0X3ZtYXN0ZXJfdGx2KGNvZGVjLCBzcGVjLT52bWFzdGVyX25pZCwKIAkJCQkJSERBX09VVFBVVCwgdm1hc3Rlcl90bHYpOwpAQCAtMjA0Miw3ICsyMDg3LDggQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgewogCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCiAJCQkJCSAgTlVMTCwgYWxjX3NsYXZlX3N3cyk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMjk1MSw2ICsyOTk3LDE0IEBACiAJCQkJCSAgICAgc3RyZWFtX3RhZywgZm9ybWF0LCBzdWJzdHJlYW0pOwogfQogCitzdGF0aWMgaW50IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2NsZWFudXAoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkJICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfY2xlYW51cChjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKK30KKwogc3RhdGljIGludCBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAogCQkJCQkgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTMwMzQsNyArMzA4OCw4IEBACiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZSwKLQkJLnByZXBhcmUgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlCisJCS5wcmVwYXJlID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbGVhbnVwCiAJfSwKIH07CiAKQEAgLTMwNjEsNiArMzExNiw5IEBACiAJY29kZWMtPm51bV9wY21zID0gMTsKIAljb2RlYy0+cGNtX2luZm8gPSBpbmZvOwogCisJaWYgKHNwZWMtPm5vX2FuYWxvZykKKwkJZ290byBza2lwX2FuYWxvZzsKKwogCWluZm8tPm5hbWUgPSBzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2c7CiAJaWYgKHNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2spIHsKIAkJaWYgKHNuZF9CVUdfT04oIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzKSkKQEAgLTMwODQsMTIgKzMxNDIsMTcgQEAKIAkJfQogCX0KIAorIHNraXBfYW5hbG9nOgogCS8qIFNQRElGIGZvciBzdHJlYW0gaW5kZXggIzEgKi8KIAlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgfHwgc3BlYy0+ZGlnX2luX25pZCkgewogCQljb2RlYy0+bnVtX3BjbXMgPSAyOworCSAgICAgICAgY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHM7CiAJCWluZm8gPSBzcGVjLT5wY21fcmVjICsgMTsKIAkJaW5mby0+bmFtZSA9IHNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWw7Ci0JCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOworCQlpZiAoc3BlYy0+ZGlnX291dF90eXBlKQorCQkJaW5mby0+cGNtX3R5cGUgPSBzcGVjLT5kaWdfb3V0X3R5cGU7CisJCWVsc2UKKwkJCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOwogCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgJiYKIAkJICAgIHNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrKSB7CiAJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSAqKHNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrKTsKQEAgLTMxMDQsNiArMzE2Nyw5IEBACiAJCWNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgPSAxOwogCX0KIAorCWlmIChzcGVjLT5ub19hbmFsb2cpCisJCXJldHVybiAwOworCiAJLyogSWYgdGhlIHVzZSBvZiBtb3JlIHRoYW4gb25lIEFEQyBpcyByZXF1ZXN0ZWQgZm9yIHRoZSBjdXJyZW50CiAJICogbW9kZWwsIGNvbmZpZ3VyZSBhIHNlY29uZCBhbmFsb2cgY2FwdHVyZS1vbmx5IFBDTS4KIAkgKi8KQEAgLTMxNjIsNjUgKzMyMjgsMTcgQEAKIAogCWFsY19mcmVlX2tjdGxzKGNvZGVjKTsKIAlrZnJlZShzcGVjKTsKLQljb2RlYy0+c3BlYyA9IE5VTEw7IC8qIHRvIGJlIHN1cmUgKi8KKwlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKICNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotc3RhdGljIHZvaWQgc3RvcmVfcGluX2NvbmZpZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZCwgZW5kX25pZDsKLQotCWVuZF9uaWQgPSBjb2RlYy0+c3RhcnRfbmlkICsgY29kZWMtPm51bV9ub2RlczsKLQlmb3IgKG5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7IG5pZCA8IGVuZF9uaWQ7IG5pZCsrKSB7Ci0JCXVuc2lnbmVkIGludCB3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKLQkJdW5zaWduZWQgaW50IHdpZF90eXBlID0KLQkJCSh3aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwotCQlpZiAod2lkX3R5cGUgIT0gQUNfV0lEX1BJTikKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3BlYy0+bnVtX3BpbnMgPj0gQVJSQVlfU0laRShzcGVjLT5waW5fbmlkcykpCi0JCQlicmVhazsKLQkJc3BlYy0+cGluX25pZHNbc3BlYy0+bnVtX3BpbnNdID0gbmlkOwotCQlzcGVjLT5waW5fY2Znc1tzcGVjLT5udW1fcGluc10gPQotCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJc3BlYy0+bnVtX3BpbnMrKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3VtZV9waW5fY29uZmlncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBwaW5fbmlkID0gc3BlYy0+cGluX25pZHNbaV07Ci0JCXVuc2lnbmVkIGludCBwaW5fY29uZmlnID0gc3BlYy0+cGluX2NmZ3NbaV07Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAsCi0JCQkJICAgIHBpbl9jb25maWcgJiAweDAwMDAwMGZmKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMSwKLQkJCQkgICAgKHBpbl9jb25maWcgJiAweDAwMDBmZjAwKSA+PiA4KTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwKLQkJCQkgICAgKHBpbl9jb25maWcgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsCi0JCQkJICAgIHBpbl9jb25maWcgPj4gMjQpOwotCX0KLX0KLQogc3RhdGljIGludCBhbGNfcmVzdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXJlc3VtZV9waW5fY29uZmlncyhjb2RlYyk7CiAJY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKQogI2VuZGlmCiAKIC8qCkBAIC0zNTU5LDcgKzM1NzcsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxODEsICJBU1VTIFA0R1BMIiwgQUxDODgwX0FTVVNfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTk2LCAiQVNVUyBQNUdEMSIsIEFMQzg4MF82U1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxYjQsICJBU1VTIiwgQUxDODgwXzZTVCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDAsICJBU1VTIiwgQUxDODgwX0FTVVMpLCAvKiBkZWZhdWx0IEFTVVMgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNDMsICJBU1VTIiwgQUxDODgwX0FTVVMpLCAvKiBkZWZhdWx0IEFTVVMgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWEwLCAiU29ueSIsIEFMQzg4MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZDYsICJTb255IiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MzAzMiwgIkdhdGV3YXkiLCBBTEM4ODBfNVNUKSwKQEAgLTM2MDIsNyArMzYyMCw4IEBACiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZTQwMCwgIkludGVsIG1vYm8iLCBBTEM4ODBfNVNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZTQwMSwgIkludGVsIG1vYm8iLCBBTEM4ODBfNVNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZTQwMiwgIkludGVsIG1vYm8iLCBBTEM4ODBfNVNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDgwODYsIDAsICJJbnRlbCBtb2JvIiwgQUxDODgwXzNTVCksIC8qIGRlZmF1bHQgSW50ZWwgKi8KKwkvKiBkZWZhdWx0IEludGVsICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHg4MDg2LCAiSW50ZWwgbW9ibyIsIEFMQzg4MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHhhMGEwLCAweDA1NjAsICJBT3BlbiBpOTE1R01tLUhGUyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ZTgwMywgMHgxMDE5LCBOVUxMLCBBTEM4ODBfNlNUX0RJRyksCiAJe30KQEAgLTM3ODIsNyArMzgwMSw3IEBACiAJCS5pbnB1dF9tdXggPSAmYWxjODgwX2NhcHR1cmVfc291cmNlLAogCX0sCiAJW0FMQzg4MF9VTklXSUxMX0RJR10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyLCBhbGM4ODBfcGNiZWVwX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCiAJCQkJYWxjODgwX3Bpbl9hc3VzX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODBfYXN1c19kYWNfbmlkcyksCkBAIC0zODIwLDggKzM4MzksNyBAQAogCQkuaW5pdF9ob29rID0gYWxjODgwX3VuaXdpbGxfcDUzX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4MF9GVUpJVFNVXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIsCi0JCQkgICAgYWxjODgwX3BjYmVlcF9taXhlciwgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF92ZXJicywKIAkgICAgICAgCQkJYWxjODgwX2JlZXBfaW5pdF92ZXJicyB9LApAQCAtNDExNCw3ICs0MTMyLDcgQEAKIHN0YXRpYyBpbnQgYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTQyMDIsMTEgKzQyMjAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzg4MF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg4MF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTQyMjEsNyArNDIzNyw3IEBACiBzdGF0aWMgaW50IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGM4ODBfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLApAQCAtNDI1Miw4ICs0MjY4LDIzIEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKLQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4ODBfRElHT1VUX05JRDsKKwkvKiBjaGVjayBtdWx0aXBsZSBTUERJRi1vdXQgKGZvciByZWNlbnQgY29kZWNzKSAqLworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzOyBpKyspIHsKKwkJaGRhX25pZF90IGRpZ19uaWQ7CisJCWVyciA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLAorCQkJCQkgICAgICBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluc1tpXSwKKwkJCQkJICAgICAgJmRpZ19uaWQsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWkpCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CisJCWVsc2UgeworCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKKwkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IEFMQzg4MF9ESUdJTl9OSUQ7CiAKQEAgLTQyNjMsOSArNDI5NCw4IEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC00MjgwLDIxICs0MzEwLDMzIEBACiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9jYXB0dXJlX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYykKK3sKKwlzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcHNbMl1bM10gPSB7CisJCXsgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMxLAorCQkgIGFsY19jYXB0dXJlX21peGVyX25vc3JjMiwKKwkJICBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzMgfSwKKwkJeyBhbGNfY2FwdHVyZV9taXhlcjEsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXIyLAorCQkgIGFsY19jYXB0dXJlX21peGVyMyB9LAorCX07CisJaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDAgJiYgc3BlYy0+bnVtX2FkY19uaWRzIDw9IDMpIHsKKwkJaW50IG11eDsKKwkJaWYgKHNwZWMtPmlucHV0X211eCAmJiBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA+IDEpCisJCQltdXggPSAxOworCQllbHNlCisJCQltdXggPSAwOworCQlzcGVjLT5jYXBfbWl4ZXIgPSBjYXBzW211eF1bc3BlYy0+bnVtX2FkY19uaWRzIC0gMV07CisJfQorfQorCisjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSBcCisJKChzcGVjKS0+YmVlcF9hbXAgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgaWR4LCBkaXIpKQorCiAvKgogICogT0ssIGhlcmUgd2UgaGF2ZSBmaW5hbGx5IHRoZSBwYXRjaCBmb3IgQUxDODgwCiAgKi8KIAotc3RhdGljIHZvaWQgc2V0X2NhcHR1cmVfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjKQotewotCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1szXSA9IHsKLQkJYWxjX2NhcHR1cmVfbWl4ZXIxLAotCQlhbGNfY2FwdHVyZV9taXhlcjIsCi0JCWFsY19jYXB0dXJlX21peGVyMywKLQl9OwotCWlmIChzcGVjLT5udW1fYWRjX25pZHMgPiAwICYmIHNwZWMtPm51bV9hZGNfbmlkcyA8PSAzKQotCQlzcGVjLT5jYXBfbWl4ZXIgPSBjYXBzW3NwZWMtPm51bV9hZGNfbmlkcyAtIDFdOwotfQotCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg4MChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CkBAIC00MzMwLDYgKzQzNzIsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4MF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC00MzU2LDYgKzQ0MDQsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC00NDYzLDYgKzQ1MTIsMjYgQEAKIAkJfSwKIAl9LAogfTsKKworLyogTWF4ZGF0YSBGYXZvcml0IDEwMFhTICovCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzWzJdID0geworCXsKKwkJLm51bV9pdGVtcyA9IDIsCisJCS5pdGVtcyA9IHsKKwkJCXsgIkxpbmUvTWljIiwgMHgwIH0sCisJCQl7ICJDRCIsIDB4NCB9LAorCQl9LAorCX0sCisJeworCQkubnVtX2l0ZW1zID0gMywKKwkJLml0ZW1zID0geworCQkJeyAiTGluZS9NaWMiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCQl7ICJNaXhlciIsIDB4NSB9LAorCQl9LAorCX0sCit9OworCiAvKgogICogVGhpcyBpcyBqdXN0IHBsYWNlLWhvbGRlciwgc28gdGhlcmUncyBzb21ldGhpbmcgZm9yIGFsY19idWlsZF9wY21zIHRvIGxvb2sKICAqIGF0IHdoZW4gaXQgY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMuIEFMQzI2MCBoYXMgbm8gbWl4ZXIKQEAgLTQ1MDUsMTIgKzQ1NzQsNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfcGNfYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIC8qIHVwZGF0ZSBIUCwgbGluZSBhbmQgbW9ubyBvdXQgcGlucyBhY2NvcmRpbmcgdG8gdGhlIG1hc3RlciBzd2l0Y2ggKi8KIHN0YXRpYyB2b2lkIGFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICBoZGFfbmlkX3QgaHAsIGhkYV9uaWRfdCBsaW5lLApAQCAtNDcwMiw4ICs0NzY1LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMvTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYy9MaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKIAlBTENfUElOX01PREUoIk1pYy9MaW5lIEphY2sgTW9kZSIsIDB4MTIsIEFMQ19QSU5fRElSX0lOKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA5LCAyLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTQ3NDgsOCArNDgwOSwxOCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiTGluZSBKYWNrIE1vZGUiLCAweDE0LCBBTENfUElOX0RJUl9JTk9VVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogTWF4ZGF0YSBGYXZvcml0IDEwMFhTOiBvbmUgb3V0cHV0IGFuZCBvbmUgaW5wdXQgKDB4MTIpIGphY2sKKyAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9mYXZvcml0MTAwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJPdXRwdXQgSmFjayBNb2RlIiwgMHgwZiwgQUxDX1BJTl9ESVJfSU5PVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUvTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZS9NaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAorCUFMQ19QSU5fTU9ERSgiTGluZS9NaWMgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTQ3NjcsOCArNDgzOCw2IEBACiAJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTUxMjYsNiArNTE5NSw4OSBAQAogCXsgfQogfTsKIAorLyogSW5pdGlhbGlzYXRpb24gc2VxdWVuY2UgZm9yIE1heGRhdGEgRmF2b3JpdCAxMDBYUworICogKGFkYXB0ZWQgZnJvbSBBY2VyIGluaXQgdmVyYnMpLgorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9mYXZvcml0MTAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBHUElPIDAgZW5hYmxlcyB0aGUgb3V0cHV0IGphY2suCisJICogVHVybiB0aGlzIG9uIGFuZCByZWx5IG9uIHRoZSBzdGFuZGFyZCBtdXRlCisJICogbWV0aG9kcyB3aGVuZXZlciB0aGUgdXNlciB3YW50cyB0byB0dXJuIHRoZXNlIG91dHB1dHMgb2ZmLgorCSAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCisJLyogTGluZS9NaWMgaW5wdXQgamFjayBpcyBjb25uZWN0ZWQgdG8gTWljMSBwaW4gKi8KKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjUwfSwKKwkvKiBFbnN1cmUgYWxsIG90aGVyIHVudXNlZCBwaW5zIGFyZSBkaXNhYmxlZCBhbmQgbXV0ZWQuICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCS8qIERpc2FibGUgZGlnaXRhbCAoU1BESUYpIHBpbnMgKi8KKwl7MHgwMywgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCXsweDA2LCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisKKwkvKiBFbnN1cmUgTWljMSBhbmQgTGluZTEgcGluIHdpZGdldHMgdGFrZSBpbnB1dCBmcm9tIHRoZSBPVVQxIHN1bQorCSAqIGJ1cyB3aGVuIGFjdGluZyBhcyBvdXRwdXRzLgorCSAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKworCS8qIFN0YXJ0IHdpdGggb3V0cHV0IHN1bSB3aWRnZXRzIG11dGVkIGFuZCB0aGVpciBvdXRwdXQgZ2FpbnMgYXQgbWluICovCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisKKwkvKiBVbm11dGUgTGluZS1vdXQgcGluIHdpZGdldCBhbXAgbGVmdCBhbmQgcmlnaHQKKwkgKiAobm8gZXF1aXYgbWl4ZXIgY3RybCkKKwkgKi8KKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFVubXV0ZSBNaWMxIGFuZCBMaW5lMSBwaW4gd2lkZ2V0IGlucHV0IGJ1ZmZlcnMgc2luY2UgdGhleSBzdGFydCBhcworCSAqIGlucHV0cy4gSWYgdGhlIHBpbiBtb2RlIGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIgdGhlIHBpbiBtb2RlIGNvbnRyb2wKKwkgKiB3aWxsIHRha2UgY2FyZSBvZiBlbmFibGluZyB0aGUgcGluJ3MgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgYXMgbmVlZGVkLgorCSAqIFRoZXJlZm9yZSB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBpbnB1dCBidWZmZXIgYXQgdGhpcworCSAqIHN0YWdlLgorCSAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKworCS8qIE11dGUgY2FwdHVyZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCS8qIFNldCBBREMgY29ubmVjdGlvbiBzZWxlY3QgdG8gbWF0Y2ggZGVmYXVsdCBtaXhlciBzZXR0aW5nIC0gbWljCisJICogKG9uIG1pYzEgcGluKQorCSAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBEbyBzaW1pbGFyIHdpdGggdGhlIHNlY29uZCBBREM6IG11dGUgY2FwdHVyZSBpbnB1dCBhbXAgYW5kCisJICogc2V0IEFEQyBjb25uZWN0aW9uIHRvIG1pYyB0byBtYXRjaCBBTFNBJ3MgZGVmYXVsdCBzdGF0ZS4KKwkgKi8KKwl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBNdXRlIGFsbCBpbnB1dHMgdG8gbWl4ZXIgd2lkZ2V0IChldmVuIHVuY29ubmVjdGVkIG9uZXMpICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogbWljMSBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LCAvKiBtaWMyIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sIC8qIGxpbmUxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sIC8qIGxpbmUyIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sIC8qIENEIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg1KX0sIC8qIEJlZXAtZ2VuIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg2KX0sIC8qIExpbmUtb3V0IHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg3KX0sIC8qIEhQLXBpbiBwaW4gKi8KKworCXsgfQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfd2lsbF92ZXJic1tdID0gewogCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKQEAgLTUyNzIsOCArNTQyNCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxJTkUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMSU5FLU9VVCBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMSU5FLU9VVCBsb29wYmFjayBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhQLU9VVCBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDcsIEhEQV9JTlBVVCksCkBAIC01NDcxLDcgKzU2MjEsNyBAQAogc3RhdGljIGludCBhbGMyNjBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtNTU0NiwxMSArNTY5Niw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAobmlkID49IDB4MTIpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEMyNjBfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEMyNjBfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC01NjIzLDcgKzU3NzEsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2MF9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC01NjMxLDkgKzU3NzksOCBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzI2MF92b2x1bWVfaW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNTY3MCw2ICs1ODE3LDcgQEAKIAlbQUxDMjYwX0FDRVJdCQk9ICJhY2VyIiwKIAlbQUxDMjYwX1dJTExdCQk9ICJ3aWxsIiwKIAlbQUxDMjYwX1JFUExBQ0VSXzY3MlZdCT0gInJlcGxhY2VyIiwKKwlbQUxDMjYwX0ZBVk9SSVQxMDBdCT0gImZhdm9yaXQxMDAiLAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlbQUxDMjYwX1RFU1RdCQk9ICJ0ZXN0IiwKICNlbmRpZgpAQCAtNTY3OSw2ICs1ODI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjBfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwN2IsICJBY2VyIEMyMHgiLCBBTEMyNjBfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA4ZiwgIkFjZXIiLCBBTEMyNjBfQUNFUiksCisJU05EX1BDSV9RVUlSSygweDE1MDksIDB4NDU0MCwgIkZhdm9yaXQgMTAwWFMiLCBBTEMyNjBfRkFWT1JJVDEwMCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwOCwgIkhQIGQ1NzAwIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEwLCAiSFAiLCBBTEMyNjBfSFBfMzAxMyksCkBAIC01NzAxLDggKzU4NTAsNyBAQAogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjBfcHJlc2V0c1tdID0gewogCVtBTEMyNjBfQkFTSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjBfYmFzZV9vdXRwdXRfbWl4ZXIsCi0JCQkgICAgYWxjMjYwX2lucHV0X21peGVyLAotCQkJICAgIGFsYzI2MF9wY19iZWVwX21peGVyIH0sCisJCQkgICAgYWxjMjYwX2lucHV0X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2MF9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2MF9kYWNfbmlkcywKQEAgLTU3ODEsNiArNTkyOSwxOCBAQAogCQkubnVtX211eF9kZWZzID0gQVJSQVlfU0laRShhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMpLAogCQkuaW5wdXRfbXV4ID0gYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2VzLAogCX0sCisJW0FMQzI2MF9GQVZPUklUMTAwXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjYwX2Zhdm9yaXQxMDBfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9mYXZvcml0MTAwX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2MF9kdWFsX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjMjYwX2R1YWxfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAorCQkubnVtX211eF9kZWZzID0gQVJSQVlfU0laRShhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXMpLAorCQkuaW5wdXRfbXV4ID0gYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzLAorCX0sCiAJW0FMQzI2MF9XSUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX3dpbGxfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9pbml0X3ZlcmJzLCBhbGMyNjBfd2lsbF92ZXJicyB9LApAQCAtNTg1Nyw2ICs2MDE3LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjBfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjBfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtNTg4Miw2ICs2MDQ4LDcgQEAKIAkJfQogCX0KIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwNywgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwODsKIApAQCAtNjA1Myw4ICs2MjIwLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjA4MSw4ICs2MjQ2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjEzNCw4ICs2Mjk3LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjI0NCw4ICs2NDA1LDEwIEBACiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCS8qIEZJWE1FOiB0aGlzIGxvb2tzIHN1c3BpY2lvdXMuLi4KIAlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwkqLwogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTY4NzcsMTkgKzcwNDAsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQl1bnNpZ25lZCBpbnQgdnJlZjsKIAkJaWYgKCFuaWQpCiAJCQljb250aW51ZTsKLQkJdnJlZiA9IFBJTl9JTjsKLQkJaWYgKDEgLyppIDw9IEFVVE9fUElOX0ZST05UX01JQyovKSB7Ci0JCQl1bnNpZ25lZCBpbnQgcGluY2FwOwotCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKLQkJCWlmICgocGluY2FwID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUKSAmCi0JCQkgICAgQUNfUElOQ0FQX1ZSRUZfODApCi0JCQkJdnJlZiA9IFBJTl9WUkVGODA7Ci0JCX0KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHZyZWYpOworCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBBVVRPX1BJTl9GUk9OVF9NSUMgLyppKi8pOwogCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKQogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTY5MDAsMTggKzcwNTMsMjEgQEAKIHN0YXRpYyB2b2lkIGFsYzg4Ml9hdXRvX2luaXRfaW5wdXRfc3JjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gc3BlYy0+aW5wdXRfbXV4OwogCWludCBjOwogCiAJZm9yIChjID0gMDsgYyA8IHNwZWMtPm51bV9hZGNfbmlkczsgYysrKSB7CiAJCWhkYV9uaWRfdCBjb25uX2xpc3RbSERBX01BWF9OVU1fSU5QVVRTXTsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmNhcHNyY19uaWRzW2NdOworCQl1bnNpZ25lZCBpbnQgbXV4X2lkeDsKKwkJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXg7CiAJCWludCBjb25ucywgbXV0ZSwgaWR4LCBpdGVtOwogCiAJCWNvbm5zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubl9saXN0LAogCQkJCQkJQVJSQVlfU0laRShjb25uX2xpc3QpKTsKIAkJaWYgKGNvbm5zIDwgMCkKIAkJCWNvbnRpbnVlOworCQltdXhfaWR4ID0gYyA+PSBzcGVjLT5udW1fbXV4X2RlZnMgPyAwIDogYzsKKwkJaW11eCA9ICZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF07CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgY29ubnM7IGlkeCsrKSB7CiAJCQkvKiBpZiB0aGUgY3VycmVudCBjb25uZWN0aW9uIGlzIHRoZSBzZWxlY3RlZCBvbmUsCiAJCQkgKiB1bm11dGUgaXQgYXMgZGVmYXVsdCAtIG90aGVyd2lzZSBtdXRlIGl0CkBAIC02OTI0LDggKzcwODAsMjAgQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgbXV0ZSk7CisJCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGEgc2VsZWN0b3Igb3IgbWl4ZXIKKwkJCSAqIHdlIGNvdWxkIGNoZWNrIGZvciB0aGUgd2lkZ2V0IHR5cGUgaW5zdGVhZCwgYnV0CisJCQkgKiBqdXN0IGNoZWNrIGZvciBBbXAtSW4gcHJlc2VuY2UgKGluIGNhc2Ugb2YgbWl4ZXIKKwkJCSAqIHdpdGhvdXQgYW1wLWluIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZywgdGhpcworCQkJICogZnVuY3Rpb24gc2hvdWxkbid0IGJlIHVzZWQgb3IgY2Fwc3JjIG5pZCBpcyB3cm9uZykKKwkJCSAqLworCQkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfSU5fQU1QKQorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCQkJICAgIG11dGUpOworCQkJZWxzZSBpZiAobXV0ZSAhPSBBTVBfSU5fTVVURShpZHgpKQorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKKwkJCQkJCSAgICBpZHgpOwogCQl9CiAJfQogfQpAQCAtNzA1NCw2ICs3MjIyLDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODJfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtNzA3NCw3ICs3MjQ4LDcgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4ODJfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4ODJfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CkBAIC03MDkxLDYgKzcyNjUsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC03MTQyLDEwICs3MzE3LDE0IEBACiAJMHgwOSwgMHgwOAogfTsKIAorI2RlZmluZSBhbGM4ODlfYWRjX25pZHMJCWFsYzg4MF9hZGNfbmlkcworCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4M19jYXBzcmNfbmlkc1syXSA9IHsgMHgyMywgMHgyMiB9OwogCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4M19jYXBzcmNfbmlkc19yZXZbMl0gPSB7IDB4MjIsIDB4MjMgfTsKIAorI2RlZmluZSBhbGM4ODlfY2Fwc3JjX25pZHMJYWxjODgyX2NhcHNyY19uaWRzCisKIC8qIGlucHV0IE1VWCAqLwogLyogRklYTUU6IHNob3VsZCBiZSBhIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KIApAQCAtNzM2Myw4ICs3NTQyLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzQyNyw4ICs3NjA0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzQ1Miw4ICs3NjI3LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzQ3OCw4ICs3NjUxLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzUwMyw4ICs3Njc0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzkxMiwzNiArODA4MSw4MyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF92ZXJic1tdID0gewotCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCS8qIEZyb250OiBvdXRwdXQgMCAoMHgwYykgKi8KLQl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBSZWFyIDogb3V0cHV0IDEgKDB4MGQpICovCi0JezB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwJLyogQ0xGRSA6IG91dHB1dCAyICgweDBlKSAqLwotCXsgfQotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfNnN0X2RlbGxfdmVyYnNbXSA9IHsKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCiAJeyB9CiB9OwogCitzdGF0aWMgdm9pZCBhbGM4ODhfM3N0X2hwX2Zyb250X2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50LCBiaXRzOworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTQsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE2LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxOCwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgYWxjODg4XzNzdF9ocF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6CisJCWFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF92ZXJic1tdID0geworCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCS8qIEZyb250OiBvdXRwdXQgMCAoMHgwYykgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBSZWFyIDogb3V0cHV0IDEgKDB4MGQpICovCisJezB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwJLyogQ0xGRSA6IG91dHB1dCAyICgweDBlKSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogMmNoIG1vZGUKKyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzJjaF9pbml0W10gPSB7CiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgfQorCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qCisgKiA0Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfNGNoX2luaXRbXSA9IHsKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiA2Y2ggbW9kZQorICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfNmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyB9CisJeyAweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAorCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODhfM3N0X2hwX21vZGVzWzJdID0geworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbM10gPSB7CiAJeyAyLCBhbGM4ODhfM3N0X2hwXzJjaF9pbml0IH0sCisJeyA0LCBhbGM4ODhfM3N0X2hwXzRjaF9pbml0IH0sCiAJeyA2LCBhbGM4ODhfM3N0X2hwXzZjaF9pbml0IH0sCiB9OwogCkBAIC04MjAyLDcgKzg0MTgsNyBAQAogewogCXN3aXRjaCAocmVzID4+IDI2KSB7CiAJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCXByaW50aygiaHBfZXZlbnRcbiIpOworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiaHBfZXZlbnRcbiIpOyAqLwogCQlhbGM4ODhfNnN0X2RlbGxfZnJvbnRfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CkBAIC04NDYxLDYgKzg2NzcsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDY2NjgsICJFQ1MiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwNmMsICJBY2VyIEFzcGlyZSA5ODEwIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDkwLCAiQWNlciBBc3BpcmUiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMGEsICJBY2VyIEZlcnJhcmkgNTAwMCIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDExMCwgIkFjZXIgQXNwaXJlIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTEyLCAiQWNlciBBc3BpcmUgOTMwMyIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEyMSwgIkFjZXIgQXNwaXJlIDU5MjBHIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKQEAgLTg0NjgsMTcgKzg2ODUsMjEgQEAKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTNmLCAiQWNlciBBc3BpcmUgNTkzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNTcsICJBY2VyIFgzMjAwIiwgQUxDODgzX0FVVE8pLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNTgsICJBY2VyIEFYMTcwMC1VMzcwMEEiLCBBTEM4ODNfQVVUTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1ZSwgIkFjZXIgQXNwaXJlIDY5MzBHIiwKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTY2LCAiQWNlciBBc3BpcmUgNjUzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAwLCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksIC8qIGRlZmF1bHQgQWNlciAqLworCS8qIGRlZmF1bHQgQWNlciAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTAyNSwgIkFjZXIgbGFwdG9wIiwgQUxDODgzX0FDRVIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyMGQsICJEZWxsIEluc3Bpcm9uIDUzMCIsIEFMQzg4OF82U1RfREVMTCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmEzZCwgIkhQIFBhdmlsbGlvbiIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTRmLCAiSFAgU2FtYmEiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTYwLCAiSFAgTHVja25vdyIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjEsICJIUCBOZXR0bGUiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2NiwgIkhQIEFjYWNpYSIsIEFMQzg4OF8zU1RfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNzIsICJIUCBFZHVjLmFyIiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3MywgIkFzdXMgTTkwViIsIEFMQzg4OF9BU1VTX005MFYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyNDksICJBc3VzIE0yQS1WTSBIRE1JIiwgQUxDODgzXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4Mjg0LCAiQXN1cyBaMzdFIiwgQUxDODgzXzZTVF9ESUcpLApAQCAtODUxOCw3ICs4NzM5LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDgzLCAiQWJpdCBJUDM1LVBSTyIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU1OCwgMHgwNzIxLCAiQ2xldm8gbGFwdG9wIE03MjBSIiwgQUxDODgzX0NMRVZPX003MjApLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjIsICJDbGV2byBsYXB0b3AgTTcyMFNSIiwgQUxDODgzX0NMRVZPX003MjApLAotCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAwLCAiQ2xldm8gbGFwdG9wIiwgQUxDODgzX0xBUFRPUF9FQVBEKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE1NTgsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxNWQ5LCAweDg3ODAsICJTdXBlcm1pY3JvIFBEU0JBIiwgQUxDODgzXzNTVF82Y2gpLAogCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwNTQsICJNZWRpb24gbGFwdG9wIiwgQUxDODgzX01FRElPTiksCiAJU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTEwNywgIkZTQyBBTUlMTyBYaTI1NTAiLApAQCAtODU0Myw2ICs4NzY0LDEwIEBACiAJe30KIH07CiAKK3N0YXRpYyBoZGFfbmlkX3QgYWxjMTIwMF9zbGF2ZV9kaWdfb3V0c1tdID0geworCUFMQzg4M19ESUdPVVRfTklELCAwLAorfTsKKwogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM4ODNfcHJlc2V0c1tdID0gewogCVtBTEM4ODNfM1NUXzJjaF9ESUddID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzJjaF9taXhlciB9LApAQCAtODc3OCw2ICs5MDAzLDggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4OF8zc3RfaHBfbW9kZXMsCiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjODg4XzNzdF9ocF91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUsCiAJfSwKIAlbQUxDODg4XzZTVF9ERUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKQEAgLTg4ODMsNiArOTExMCw3IEBACiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDMTIwMF9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4M19ESUdJTl9OSUQsCisJCS5zbGF2ZV9kaWdfb3V0cyA9IGFsYzEyMDBfc2xhdmVfZGlnX291dHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfc2l4c3RhY2tfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzX3NpeHN0YWNrX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKQEAgLTg5NTAsMTEgKzkxNzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg4M19pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgICBQSU5fVlJFRjgwIDogUElOX0lOKSk7Ci0JCQlpZiAobmlkICE9IEFMQzg4M19QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg4M19QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTg5NjksNiArOTE5NSw4IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVyciA9IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IGk7CiAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTg5ODIsNiArOTIxMCwyNiBAQAogCS8qIGhhY2sgLSBvdmVycmlkZSB0aGUgaW5pdCB2ZXJicyAqLwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhbGM4ODNfYXV0b19pbml0X3ZlcmJzOwogCisJLyogc2V0dXAgaW5wdXRfbXV4IGZvciBBTEM4ODkgKi8KKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwODg5KSB7CisJCS8qIGRpZ2l0YWwtbWljIGlucHV0IHBpbiBpcyBleGNsdWRlZCBpbiBhbGM4ODBfYXV0b19jcmVhdGUuLigpCisJCSAqIGJlY2F1c2UgaXQncyB1bmRlciAweDE4CisJCSAqLworCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10gPT0gMHgxMiB8fAorCQkgICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10gPT0gMHgxMikgeworCQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOworCQkJZm9yIChpID0gMTsgaSA8IDM7IGkrKykKKwkJCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfaW11eFtpXSwKKwkJCQkgICAgICAgJnNwZWMtPnByaXZhdGVfaW11eFswXSwKKwkJCQkgICAgICAgc2l6ZW9mKHNwZWMtPnByaXZhdGVfaW11eFswXSkpOworCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9ICJJbnQgRE1pYyI7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gMHgwYjsKKwkJCWltdXgtPm51bV9pdGVtcysrOworCQkJc3BlYy0+bnVtX211eF9kZWZzID0gMzsKKwkJCXNwZWMtPmlucHV0X211eCA9IHNwZWMtPnByaXZhdGVfaW11eDsKKwkJfQorCX0KKwogCXJldHVybiAxOyAvKiBjb25maWcgZm91bmQgKi8KIH0KIApAQCAtOTAzMyw2ICs5MjgxLDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODNfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODNfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtOTA0NSwxNCArOTI5OSwzNiBAQAogCQkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OCBBbmFsb2ciOwogCQkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODggRGlnaXRhbCI7CiAJCX0KKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCQlicmVhazsKIAljYXNlIDB4MTBlYzA4ODk6CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODkgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODkgRGlnaXRhbCI7CisJCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7CisJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyk7CisJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4OV9hZGNfbmlkczsKKwkJfQorCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQorCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODlfY2Fwc3JjX25pZHM7CisJCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUXzFNVVhfTUlYOyAvKiAxbXV4L05taXgtc3R5bGUKKwkJCQkJCQljYXB0dXJlICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODMgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODMgRGlnaXRhbCI7CisJCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7CisJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7CisJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKKwkJfQorCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQorCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7CisJCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJfQogCkBAIC05MDYzLDE1ICs5MzM5LDkgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4ODNfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4ODNfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7Ci0JCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKLQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7Ci0JfQotCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCi0JCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOwotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTkxMjQsOCArOTM5NCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksICovCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MEQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtOTE0Niw4ICs5NDE0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KIAkvKkhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDBELCAweDAsIEhEQV9PVVRQVVQpLCovCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkyNTYsOCArOTUyMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkFVWCBJTiBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBVVggSU4gUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC05Mjg2LDggKzk1NTAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC05NDM1LDYgKzk2OTcsNjcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX3R5YW5fbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3R5YW5fdmVyYnNbXSA9IHsKKwkvKiBIZWFkcGhvbmUgYXV0b211dGUgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogUDExIEFVWF9JTiwgd2hpdGUgNC1waW4gY29ubmVjdG9yICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMSwgMHhlMX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsIDB4OTN9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLCAweDE5fSwKKworCXt9Cit9OworCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBhbGMyNjJfdHlhbl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgbXV0ZTsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKKwlwcmVzZW50ID0gKHByZXNlbnQgJiAweDgwMDAwMDAwKSAhPSAwOworCWlmIChwcmVzZW50KSB7CisJCS8qIG11dGUgbGluZSBvdXRwdXQgb24gQVRYIHBhbmVsICovCisJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNSwgSERBX09VVFBVVCwgMCwKKwkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKKwl9IGVsc2UgeworCQkvKiB1bm11dGUgbGluZSBvdXRwdXQgaWYgbmVjZXNzYXJ5ICovCisJCW11dGUgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCAweDFiLCAwLCBIREFfT1VUUFVULCAwKTsKKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAorCQkJCQkgSERBX0FNUF9NVVRFLCBtdXRlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCWlmICgocmVzID4+IDI2KSAhPSBBTEM4ODBfSFBfRVZFTlQpCisJCXJldHVybjsKKwlhbGMyNjJfdHlhbl9hdXRvbXV0ZShjb2RlYyk7Cit9CisKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfbWl4ZXIJCWFsYzg4Ml9jYXB0dXJlX21peGVyCiAjZGVmaW5lIGFsYzI2Ml9jYXB0dXJlX2FsdF9taXhlcglhbGM4ODJfY2FwdHVyZV9hbHRfbWl4ZXIKIApAQCAtOTkwMSw4ICsxMDIyNCw2IEBACiAJfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTEwNDc0LDggKzEwNzk1LDE0IEBACiAJCQkJCSAgIGFsYzI2Ml9pZ25vcmUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykgeworCQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cyB8fCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisJCQlzcGVjLT5ub19hbmFsb2cgPSAxOworCQkJZ290byBkaWdfb25seTsKKwkJfQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KKwl9CiAJZXJyID0gYWxjMjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTEwNDg1LDggKzEwODEyLDExIEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKyBkaWdfb25seToKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykgewogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2Ml9ESUdPVVRfTklEOworCQlzcGVjLT5kaWdfb3V0X3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IEFMQzI2Ml9ESUdJTl9OSUQ7CiAKQEAgLTEwNDk1LDEzICsxMDgyNSwxMiBAQAogCiAJYWRkX3ZlcmIoc3BlYywgYWxjMjYyX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDU0MywyMSArMTA4NzIsMTkgQEAKIAlbQUxDMjYyX1VMVFJBXQkJPSAidWx0cmEiLAogCVtBTEMyNjJfTEVOT1ZPXzMwMDBdCT0gImxlbm92by0zMDAwIiwKIAlbQUxDMjYyX05FQ10JCT0gIm5lYyIsCisJW0FMQzI2Ml9UWUFOXQkJPSAidHlhbiIsCiAJW0FMQzI2Ml9BVVRPXQkJPSAiYXV0byIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYyX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAwMiwgMHg0MzdiLCAiSGlwcG8iLCBBTEMyNjJfSElQUE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDMzLCAweDg4OTUsICJORUMgVmVyc2EgUzkxMDAiLCBBTEMyNjJfTkVDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMmZlLCAiSFAgeHc5NDAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTJmZiwgIkhQIHh3NDU1MCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDYsICJIUCB4dzg2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA3LCAiSFAgeHc2NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwOCwgIkhQIHh3NDYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDksICJIUCB4dzQqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzBhLCAiSFAgeHc2KjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwYiwgIkhQIHh3OCowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDE3MGIsICJIUCB4dyoiLCBBTEMyNjJfSFBfQlBDKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MTIwMCwgIkhQIHh3IHNlcmllcyIsCisJCQkgICBBTEMyNjJfSFBfQlBDKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MTMwMCwgIkhQIHh3IHNlcmllcyIsCisJCQkgICBBTEMyNjJfSFBfQlBDKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MTcwMCwgIkhQIHh3IHNlcmllcyIsCisJCQkgICBBTEMyNjJfSFBfQlBDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODAwLCAiSFAgRDcwMDAiLCBBTEMyNjJfSFBfQlBDX0Q3MDAwX1dMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODAxLCAiSFAgRDcwMDAiLCBBTEMyNjJfSFBfQlBDX0Q3MDAwX1dGKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODAyLCAiSFAgRDcwMDAiLCBBTEMyNjJfSFBfQlBDX0Q3MDAwX1dMKSwKQEAgLTEwNTc1LDE3ICsxMDkwMiwxNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDFmMDAsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwMywgIlNvbnkgVVgtOTAiLCBBTEMyNjJfSElQUE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMGYsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAwZSwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE1LCAiU29ueSAweDkwMTUiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMzMsICJTb255IFZBSU8gVkdOLVNSMTlYTiIsCi0JCSAgICAgIEFMQzI2Ml9TT05ZX0FTU0FNRCksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNiwgIlNvbnkgVkFJTyIsIEFMQzI2Ml9BVVRPKSwgLyogZGlnLW9ubHkgKi8KKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDRkLCAweGZmMDAsIDB4OTAwMCwgIlNvbnkgVkFJTyIsCisJCQkgICBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIGR5bmFib29rIFNTIFJYMSIsCiAJCSAgICAgIEFMQzI2Ml9UT1NISUJBX1JYMSksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY3YiwgIlRvc2hpYmEgUzA2IiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxMzk3LCAiRnVqaXRzdSIsIEFMQzI2Ml9GVUpJVFNVKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDJkLCAiRnVqaXRzdSBMaWZlYm9vayBFODQxMCIsIEFMQzI2Ml9GVUpJVFNVKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDMyLCAiU2Ftc3VuZyBRMSBVbHRyYSIsIEFMQzI2Ml9VTFRSQSksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAzOSwgIlNhbXN1bmcgUTFVIEVMIiwgQUxDMjYyX1VMVFJBKSwKKwlTTkRfUENJX1FVSVJLKDB4MTBmMSwgMHgyOTE1LCAiVHlhbiBUaHVuZGVyIG42NjUwVyIsIEFMQzI2Ml9UWUFOKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNDRkLCAweGZmMDAsIDB4YzAzMiwgIlNhbXN1bmcgUTEiLAorCQkJICAgQUxDMjYyX1VMVFJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjNTEwLCAiU2Ftc3VuZyBRNDUiLCBBTEMyNjJfSElQUE8pLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4NGUsICJMZW5vdm8gMzAwMCB5NDEwIiwgQUxDMjYyX0xFTk9WT18zMDAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNTYwLCAiQmVucSBFRDgiLCBBTEMyNjJfQkVOUV9FRDgpLApAQCAtMTA4MDIsNiArMTExMjksMTkgQEAKIAkJLnVuc29sX2V2ZW50ID0gYWxjMjYyX2hpcHBvX3Vuc29sX2V2ZW50LAogCQkuaW5pdF9ob29rID0gYWxjMjYyX2hpcHBvX2F1dG9tdXRlLAogCX0sCisJW0FMQzI2Ml9UWUFOXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjYyX3R5YW5fbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9pbml0X3ZlcmJzLCBhbGMyNjJfdHlhbl92ZXJic30sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjYyX2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMiwKKwkJLmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjJfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjYyX3R5YW5fdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGMyNjJfdHlhbl9hdXRvbXV0ZSwKKwl9LAogfTsKIAogc3RhdGljIGludCBwYXRjaF9hbGMyNjIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xMDg1NCw2ICsxMTE5NCwxNCBAQAogCQl9CiAJfQogCisJaWYgKCFzcGVjLT5ub19hbmFsb2cpIHsKKwkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlhbGNfZnJlZShjb2RlYyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjJfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTA4NjUsNyArMTEyMTMsNyBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKQEAgLTEwODgyLDggKzExMjMwLDEwIEBACiAJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2Ml9jYXBzcmNfbmlkczsKIAkJfQogCX0KLQlpZiAoIXNwZWMtPmNhcF9taXhlcikKKwlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZykKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTExMjYzLDE5ICsxMTYxMywxMyBAQAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIERBQzAtMSBhbmQgc2V0IHZvbCA9IDAgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAKIAkvKgogCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZSkKIAkgKi8KIAkvKiBzZXQgdm9sPTAgdG8gb3V0cHV0IG1peGVycyAqLwogCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAgICAgICAgIHsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTI5NCw5ICsxMTYzOCw3IEBACiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAkvKiBzZXQgUENCRUVQIHZvbCA9IDAsIG11dGUgY29ubmVjdGlvbnMgKi8KIAl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTMxOCwxMCArMTE2NjAsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF92b2x1bWVfaW5pdF92ZXJic1tdID0gewogCS8qIHNldCBvdXRwdXQgREFDICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCiAJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNH0sCkBAIC0xMTMyOSwxNiArMTE2NjksMTIgQEAKIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwfSwKIAl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwfSwKIAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAogCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCiAJLyogc2V0IFBDQkVFUCB2b2wgPSAwLCBtdXRlIGNvbm5lY3Rpb25zICovCiAJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTE1MzcsNyArMTE4NzMsNyBAQAogc3RhdGljIGludCBhbGMyNjhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGlkeDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC0xMTYzMSw5ICsxMTk2NywxNCBAQAogCQkJCQkgICBhbGMyNjhfaWdub3JlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQorCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpIHsKKwkJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMgfHwgc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKSB7CisJCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOworCQkJc3BlYy0+bm9fYW5hbG9nID0gMTsKKwkJCWdvdG8gZGlnX29ubHk7CisJCX0KIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCi0KKwl9CiAJZXJyID0gYWxjMjY4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTExNjQzLDI1ICsxMTk4NCwyNiBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAorIGRpZ19vbmx5OgogCS8qIGRpZ2l0YWwgb25seSBzdXBwb3J0IG91dHB1dCAqLwotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjY4X0RJR09VVF9OSUQ7Ci0KKwkJc3BlYy0+ZGlnX291dF90eXBlID0gc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3R5cGVbMF07CisJfQogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gIT0gMHgxZCkKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSAhPSAweDFkKQogCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2JlZXBfbWl4ZXIpOwogCiAJYWRkX3ZlcmIoc3BlYywgYWxjMjY4X3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMTcyMyw3ICsxMjA2NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjMjY4X3ByZXNldHNbXSA9IHsKIAlbQUxDMjY3X1FVQU5UQV9JTDFdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2N19xdWFudGFfaWwxX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTExODA1LDcgKzEyMTQ3LDggQEAKIAl9LAogCVtBTEMyNjhfQUNFUl9BU1BJUkVfT05FXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfYXNwaXJlX29uZV9taXhlciwKLQkJCQlhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIgfSwKKwkJCSAgICBhbGMyNjhfYmVlcF9taXhlciwKKwkJCSAgICBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtMTE4NzQsNyArMTIyMTcsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKIAlpbnQgYm9hcmRfY29uZmlnOwotCWludCBlcnI7CisJaW50IGksIGhhc19iZWVwLCBlcnI7CiAKIAlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTE5MjMsMTUgKzEyMjY2LDMwIEBACiAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjhfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAKLQlpZiAoIXF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQpKQotCQkvKiBvdmVycmlkZSB0aGUgYW1wIGNhcHMgZm9yIGJlZXAgZ2VuZXJhdG9yICovCi0JCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCwKKwloYXNfYmVlcCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgeworCQlpZiAoc3BlYy0+bWl4ZXJzW2ldID09IGFsYzI2OF9iZWVwX21peGVyKSB7CisJCQloYXNfYmVlcCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChoYXNfYmVlcCkgeworCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKCFxdWVyeV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVUKSkKKwkJCS8qIG92ZXJyaWRlIHRoZSBhbXAgY2FwcyBmb3IgYmVlcCBnZW5lcmF0b3IgKi8KKwkJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCwKIAkJCQkJICAoMHgwYyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CiAJCQkJCSAgKDB4MGMgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAogCQkJCQkgICgweDA3IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKIAkJCQkJICAoMCA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOworCX0KIAotCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYgIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKIAkJaW50IGk7CkBAIC0xMjAxMiw4ICsxMjM3MCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKQEAgLTEyMDQwLDggKzEyMzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEyMDY1LDggKzEyNDE5LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEb2NrIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIEJvb3N0IiwgMHgxYiwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEyMTAzLDEzICsxMjQ1NSw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotLyogYmVlcCBjb250cm9sICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2JlZXBfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKQEAgLTEyNTA5LDcgKzEyODU0LDcgQEAKIAkgKi8KIAlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10gPT0gMHgxMiB8fAogCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSA9PSAweDEyKSB7Ci0JCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBNaWMiOwogCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gMHgwNTsKIAkJaW11eC0+bnVtX2l0ZW1zKys7CkBAIC0xMjUyNywxMyArMTI4NzIsMzQgQEAKICNkZWZpbmUgYWxjMjY5X3BjbV9kaWdpdGFsX3BsYXliYWNrCWFsYzg4MF9wY21fZGlnaXRhbF9wbGF5YmFjawogI2RlZmluZSBhbGMyNjlfcGNtX2RpZ2l0YWxfY2FwdHVyZQlhbGM4ODBfcGNtX2RpZ2l0YWxfY2FwdHVyZQogCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzI2OV80NGtfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKKwkuc3Vic3RyZWFtcyA9IDEsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAsIC8qIGZpeGVkIHJhdGUgKi8KKwkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCisJLm9wcyA9IHsKKwkJLm9wZW4gPSBhbGM4ODBfcGxheWJhY2tfcGNtX29wZW4sCisJCS5wcmVwYXJlID0gYWxjODgwX3BsYXliYWNrX3BjbV9wcmVwYXJlLAorCQkuY2xlYW51cCA9IGFsYzg4MF9wbGF5YmFja19wY21fY2xlYW51cAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCwgLyogZml4ZWQgcmF0ZSAqLworCS8qIE5JRCBpcyBzZXQgaW4gYWxjX2J1aWxkX3BjbXMgKi8KK307CisKIC8qCiAgKiBCSU9TIGF1dG8gY29uZmlndXJhdGlvbgogICovCiBzdGF0aWMgaW50IGFsYzI2OV9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGMyNjlfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLApAQCAtMTI1NTAsMjIgKzEyOTE2LDE1IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjlfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQkvKiBjcmVhdGUgYSBiZWVwIG1peGVyIGNvbnRyb2wgaWYgdGhlIHBpbiAweDFkIGlzbid0IGFzc2lnbmVkICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zKTsgaSsrKQotCQlpZiAoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldID09IDB4MWQpCi0JCQlicmVhazsKLQlpZiAoaSA+PSBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaW5wdXRfcGlucykpCi0JCWFkZF9taXhlcihzcGVjLCBhbGMyNjlfYmVlcF9taXhlcik7Ci0KIAlhZGRfdmVyYihzcGVjLCBhbGMyNjlfaW5pdF92ZXJicyk7CiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJLyogc2V0IGRlZmF1bHQgaW5wdXQgc291cmNlICovCiAJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgYWxjMjY5X2NhcHNyY19uaWRzWzBdLAogCQkJCSAgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCkBAIC0xMjU3NSwxMCArMTI5MzQsOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCisJaWYgKCFzcGVjLT5jYXBfbWl4ZXIgJiYgIXNwZWMtPm5vX2FuYWxvZykKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEyNjc1LDcgKzEzMDMzLDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19kbWljX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9GVUpJVFNVXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY5X2Z1aml0c3VfbWl4ZXIsIGFsYzI2OV9iZWVwX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKIAkJCQlhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzIH0sCkBAIC0xMjc0MCwxMyArMTMwOTgsMjYgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2OV9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2OV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzI2OSBBbmFsb2ciOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9hbmFsb2dfcGxheWJhY2s7Ci0Jc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV9wY21fYW5hbG9nX2NhcHR1cmU7Ci0KKwlpZiAoY29kZWMtPnN1YnN5c3RlbV9pZCA9PSAweDE3YWEzYmY4KSB7CisJCS8qIER1ZSB0byBhIGhhcmR3YXJlIHByb2JsZW0gb24gTGVub3ZvIElkZWFkcGFkLCB3ZSBuZWVkIHRvCisJCSAqIGZpeCB0aGUgc2FtcGxlIHJhdGUgb2YgYW5hbG9nIEkvTyB0byA0NC4xa0h6CisJCSAqLworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlOworCX0gZWxzZSB7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9hbmFsb2dfcGxheWJhY2s7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2FuYWxvZ19jYXB0dXJlOworCX0KIAlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzI2OSBEaWdpdGFsIjsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKQEAgLTEyNzU2LDYgKzEzMTI3LDcgQEAKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OV9jYXBzcmNfbmlkczsKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2OV9BVVRPKQpAQCAtMTMwMDYsOCArMTMzNzgsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MV9hc3VzX2xhcHRvcF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAogCXsgfQogfTsKIApAQCAtMTM0ODEsNyArMTM4NTEsNyBAQAogc3RhdGljIGludCBhbGM4NjFfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4LCBpZHgxOwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtMTM1NjgsMTIgKzEzOTM4LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKG5pZCA+PSAweDBjICYmIG5pZCA8PSAweDExKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJfQorCQlpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MTEpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKIAl9CiB9CiAKQEAgLTEzNjA5LDcgKzEzOTc1LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg2MV9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCkBAIC0xMzYxOCwxMyArMTM5ODQsMTIgQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4NjFfYXV0b19pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJc3BlYy0+YWRjX25pZHMgPSBhbGM4NjFfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjFfYWRjX25pZHMpOwogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMzgzMyw2ICsxNDE5OCwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MjMpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg2MV9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg2MV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xMzg0NCw2ICsxNDIxNSw4IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODYxX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODYxX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgyMywgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDM7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKQEAgLTE0MDAwLDkgKzE0MzczLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDAyNiw5ICsxNDM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQwNjcsOCArMTQ0MzQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDM3OSw5ICsxNDc0NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYwMywgIlRvc2hpYmEgUDIwNSIsIEFMQzg2MVZEX0xFTk9WTyksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgTDMwLTE0OSIsIEFMQzg2MVZEX0RBTExBUyksCiAJU05EX1BDSV9RVUlSSygweDE1NjUsIDB4ODIwZCwgIkJpb3N0YXIgTkY2MVMgU0UiLCBBTEM4NjFWRF82U1RfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMDY2LCAiTGVub3ZvIiwgQUxDODYxVkRfTEVOT1ZPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODAyLCAiTGVub3ZvIDMwMDAgQzIwMCIsIEFMQzg2MVZEX0xFTk9WTyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzg0ZSwgIkxlbm92byAzMDAwIE4yMDAiLCBBTEM4NjFWRF9MRU5PVk8pLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byIsIEFMQzg2MVZEX0xFTk9WTyksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MDg2MiwgIkFTUm9jayBLOE5GNkctVlNUQSIsIEFMQzg2MVZEXzZTVF9ESUcpLAogCXt9CiB9OwpAQCAtMTQ1NDMsMTEgKzE0OTA2LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChhbGM4NjF2ZF9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCWkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJCQlQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDODYxVkRfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM4NjFWRF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCUFNUF9PVVRfTVVURSk7CkBAIC0xNDcxMyw3ICsxNTA3NCw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4NjFWRF9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCkBAIC0xNDcyMiwxMyArMTUwODMsMTIgQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4NjF2ZF92b2x1bWVfaW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xNDc3OSw2ICsxNTEzOSwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MjMpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg2MVZEX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxdmRfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTQ4MDEsOSArMTUxNjcsMTAgQEAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzg2MXZkX2FkY19uaWRzOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODYxdmRfYWRjX25pZHMpOwogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODYxdmRfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAyOwogCkBAIC0xNDk5Miw4ICsxNTM1OSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNTAxNSw4ICsxNTM4MCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNTk5Miw1NiArMTYzNTUsNTUgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM2NjJfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDkwODcsICJFQ1MiLCBBTEM2NjJfRUNTKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDAwLCAiQVNVUyBONTBWbSIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDkyLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWMzLCAiQVNVUyBNNzBWIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YzMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjUsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3ODMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MzMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NDMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NjQsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzYsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MVZBIiwgQUxDNjYzX0FTVVNfTTUxVkEpLAorCS8qU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUwVnIiLCBBTEM2NjNfQVNVU19NT0RFMSksKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkwMywgIkFTVVMgRjVHTCIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTMzLCAiQVNVUyBGODBRIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NjMsICJBU1VTIFg3MUMiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk5MywgIkFTVVMgTjIwIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIEc1MFYiLCBBTEM2NjNfQVNVU19HNTBWKSwKKwkvKlNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLCovCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTliMywgIkFTVVMgRjdaIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YzMsICJBU1VTIEY1Wi9GNngiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTllMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlmMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI5MCwgIkFTVVMgUDVHQy1NWCIsIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODJhMSwgIkFTVVMgRWVlcGMiLCBBTEM2NjJfQVNVU19FRUVQQ19QNzAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmQxLCAiQVNVUyBFZWVwYyBFUDIwIiwgQUxDNjYyX0FTVVNfRUVFUENfRVAyMCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkwMywgIkFTVVMgRjVHTCIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTBWciIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDAwLCAiQVNVUyBONTBWbSIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWIzLCAiQVNVUyBGN1oiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk1MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTllMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk5MywgIkFTVVMgTjIwIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YzMsICJBU1VTIEY1Wi9GNngiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg0MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3NiwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg2NCwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkzMywgIkFTVVMgRjgwUSIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWMzLCAiQVNVUyBNNzBWIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NjMsICJBU1VTIFg3MUMiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5NCwgIkFTVVMgWDU1IiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwOTIsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MzMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjUsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjZDYsICJGb3hjb25uIiwgQUxDNjYyX0VDUyksCiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGQ0NywgIkZveGNvbm4gNDVDTVgvNDVHTVgvNDVDTVgtSyIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxZSwgIkxlbm92byIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4OTA4NywgIkVDUyIsIEFMQzY2Ml9FQ1MpLAotCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjZDYsICJGb3hjb25uIiwgQUxDNjYyX0VDUyksCiAJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIDk0NUdDTS1TMkwiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLAogCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAweDM2NjIsICJBU1JPQ0sgSzEwTjc4RnVsbEhELWhTTEkgUjMuMCIsCiAJCQkJCUFMQzY2Ml8zU1RfNmNoX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMDAiLCBBTEM2NjNfQVNVU19IMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDEsICJBU1VTIEgxMy0yMDAxIiwgQUxDNjYzX0FTVVNfSDEzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAyLCAiQVNVUyBIMTMtMjAwMiIsIEFMQzY2M19BU1VTX0gxMyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTg1NCwgMHhmMDAwLCAweDIwMDAsICJBU1VTIEgxMy0yMDB4IiwKKwkJCSAgIEFMQzY2M19BU1VTX0gxMyksCiAJe30KIH07CiAKQEAgLTE2MzYxLDcgKzE2NzIzLDcgQEAKIAogCWlmIChhbGM4ODBfaXNfZml4ZWRfcGluKHBpbikpIHsKIAkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7Ci0gICAgICAgICAgICAgICAgLyogcHJpbnRrKCJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCiAJCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCiAJCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQogCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gbmlkOwpAQCAtMTYzOTEsMjYgKzE2NzUzLDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNyYyB3aWRnZXQgZnJvbSB0aGUgY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBuaWQuCisgKiByZXR1cm4gLTEgaWYgbm90IGZvdW5kCisgKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2lucHV0X3Bpbl9pZHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJaGRhX25pZF90IHNyYykKK3sKKwloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfQ09OTkVDVElPTlNdOworCWludCBpLCBjb25uczsKKworCWNvbm5zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubl9saXN0LAorCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOworCWlmIChjb25ucyA8IDApCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgY29ubnM7IGkrKykKKwkJaWYgKGNvbm5fbGlzdFtpXSA9PSBzcmMpCisJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgYWxjNjYyX2lzX2lucHV0X3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKKwlyZXR1cm4gKHBpbmNhcCAmIEFDX1BJTkNBUF9JTikgIT0gMDsKK30KKwogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewotCQlpZiAoYWxjODgwX2lzX2lucHV0X3BpbihjZmctPmlucHV0X3BpbnNbaV0pKSB7Ci0JCQlpZHggPSBhbGM4ODBfaW5wdXRfcGluX2lkeChjZmctPmlucHV0X3BpbnNbaV0pOwotCQkJZXJyID0gbmV3X2FuYWxvZ19pbnB1dChzcGVjLCBjZmctPmlucHV0X3BpbnNbaV0sCi0JCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAotCQkJCQkgICAgICAgaWR4LCAweDBiKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KLQkJCQlhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9Ci0JCQkJYWxjODgwX2lucHV0X3Bpbl9pZHgoY2ZnLT5pbnB1dF9waW5zW2ldKTsKLQkJCWltdXgtPm51bV9pdGVtcysrOworCQlpZiAoYWxjNjYyX2lzX2lucHV0X3Bpbihjb2RlYywgY2ZnLT5pbnB1dF9waW5zW2ldKSkgeworCQkJaWR4ID0gYWxjNjYyX2lucHV0X3Bpbl9pZHgoY29kZWMsIDB4MGIsCisJCQkJCQkgICBjZmctPmlucHV0X3BpbnNbaV0pOworCQkJaWYgKGlkeCA+PSAwKSB7CisJCQkJZXJyID0gbmV3X2FuYWxvZ19pbnB1dChzcGVjLCBjZmctPmlucHV0X3BpbnNbaV0sCisJCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwKKwkJCQkJCSAgICAgICBpZHgsIDB4MGIpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQkJaWR4ID0gYWxjNjYyX2lucHV0X3Bpbl9pZHgoY29kZWMsIDB4MjIsCisJCQkJCQkgICBjZmctPmlucHV0X3BpbnNbaV0pOworCQkJaWYgKGlkeCA+PSAwKSB7CisJCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9CisJCQkJCWF1dG9fcGluX2NmZ19sYWJlbHNbaV07CisJCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGlkeDsKKwkJCQlpbXV4LT5udW1faXRlbXMrKzsKKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE2NDYwLDcgKzE2ODU0LDYgQEAKIAkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsIDApOwogfQogCi0jZGVmaW5lIGFsYzY2Ml9pc19pbnB1dF9waW4obmlkKQlhbGM4ODBfaXNfaW5wdXRfcGluKG5pZCkKICNkZWZpbmUgQUxDNjYyX1BJTl9DRF9OSUQJCUFMQzg4MF9QSU5fQ0RfTklECiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTY0NzAsMTIgKzE2ODYzLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIChpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICAgUElOX1ZSRUY4MCA6IFBJTl9JTikpOwotCQkJaWYgKG5pZCAhPSBBTEM2NjJfUElOX0NEX05JRCkKKwkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4oY29kZWMsIG5pZCkpIHsKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM2NjJfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC0xNjUxMywyMCArMTY5MDQsMjAgQEAKIAkJCQkJICAgIkhlYWRwaG9uZSIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4ODBfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWFkZF92ZXJiKHNwZWMsIGFsYzY2Ml9hdXRvX2luaXRfdmVyYnMpOwogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMpCkBAIC0xNjUzNiw3ICsxNjkyNyw2IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE2NTg4LDYgKzE2OTc4LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM2NjJfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM2NjJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTY2MTEsMTAgKzE3MDA3LDE0IEBACiAJc3BlYy0+YWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpOwogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjNjYyX2NhcHNyY19uaWRzOwotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsKKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7CiAKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MikKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CisJZWxzZQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDYwOTQzNDQuLmI1ZTEwOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTQzLDYgKzQzLDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfQVVUTywKIAlTVEFDX1JFRiwKIAlTVEFDXzkyMDBfT1FPLAogCVNUQUNfOTIwMF9ERUxMX0QyMSwKQEAgLTYyLDE0ICs2MywxNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjA1X0FVVE8sCiAJU1RBQ185MjA1X1JFRiwKIAlTVEFDXzkyMDVfREVMTF9NNDIsCiAJU1RBQ185MjA1X0RFTExfTTQzLAogCVNUQUNfOTIwNV9ERUxMX000NCwKKwlTVEFDXzkyMDVfRUFQRCwKIAlTVEFDXzkyMDVfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ3M1hYX0FVVE8sCiAJU1RBQ185MkhENzNYWF9OT19KRCwgLyogbm8gamFjay1kZXRlY3Rpb24gKi8KIAlTVEFDXzkySEQ3M1hYX1JFRiwKIAlTVEFDX0RFTExfTTZfQU1JQywKQEAgLTgwLDIyICs4NCwyNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MkhEODNYWFhfQVVUTywKIAlTVEFDXzkySEQ4M1hYWF9SRUYsCiAJU1RBQ185MkhEODNYWFhfUFdSX1JFRiwKKwlTVEFDX0RFTExfUzE0LAogCVNUQUNfOTJIRDgzWFhYX01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MkhENzFCWFhfQVVUTywKIAlTVEFDXzkySEQ3MUJYWF9SRUYsCiAJU1RBQ19ERUxMX000XzEsCiAJU1RBQ19ERUxMX000XzIsCiAJU1RBQ19ERUxMX000XzMsCiAJU1RBQ19IUF9NNCwKIAlTVEFDX0hQX0RWNSwKKwlTVEFDX0hQX0hEWCwKIAlTVEFDXzkySEQ3MUJYWF9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTI1eF9BVVRPLAogCVNUQUNfOTI1eF9SRUYsCiAJU1RBQ19NMSwKIAlTVEFDX00xXzIsCkBAIC0xMDgsNiArMTE3LDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTIyWF9BVVRPLAogCVNUQUNfRDk0NV9SRUYsCiAJU1RBQ19EOTQ1R1RQMywKIAlTVEFDX0Q5NDVHVFA1LApAQCAtMTM1LDYgKzE0NSw3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyN1hfQVVUTywKIAlTVEFDX0Q5NjVfUkVGX05PX0pELCAvKiBubyBqYWNrLWRldGVjdGlvbiAqLwogCVNUQUNfRDk2NV9SRUYsCiAJU1RBQ19EOTY1XzNTVCwKQEAgLTE0NCw2ICsxNTUsMTIgQEAKIAlTVEFDXzkyN1hfTU9ERUxTCiB9OwogCitlbnVtIHsKKwlTVEFDXzk4NzJfQVVUTywKKwlTVEFDXzk4NzJfVkFJTywKKwlTVEFDXzk4NzJfTU9ERUxTCit9OworCiBzdHJ1Y3Qgc2lnbWF0ZWxfZXZlbnQgewogCWhkYV9uaWRfdCBuaWQ7CiAJdW5zaWduZWQgY2hhciB0eXBlOwpAQCAtMTY3LDYgKzE4NCw3IEBACiAJdW5zaWduZWQgaW50IGFsdF9zd2l0Y2g6IDE7CiAJdW5zaWduZWQgaW50IGhwX2RldGVjdDogMTsKIAl1bnNpZ25lZCBpbnQgc3BkaWZfbXV0ZTogMTsKKwl1bnNpZ25lZCBpbnQgY2hlY2tfdm9sdW1lX29mZnNldDoxOwogCiAJLyogZ3BpbyBsaW5lcyAqLwogCXVuc2lnbmVkIGludCBlYXBkX21hc2s7CkBAIC0xNzksNiArMTk3LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3RyZWFtX2RlbGF5OwogCiAJLyogYW5hbG9nIGxvb3BiYWNrICovCisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmFsb29wYmFja19jdGw7CiAJdW5zaWduZWQgY2hhciBhbG9vcGJhY2tfbWFzazsKIAl1bnNpZ25lZCBjaGFyIGFsb29wYmFja19zaGlmdDsKIApAQCAtMjAzLDYgKzIyMiw4IEBACiAJaGRhX25pZF90IGhwX2RhY3NbNV07CiAJaGRhX25pZF90IHNwZWFrZXJfZGFjc1s1XTsKIAorCWludCB2b2x1bWVfb2Zmc2V0OworCiAJLyogY2FwdHVyZSAqLwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJdW5zaWduZWQgaW50IG51bV9hZGNzOwpAQCAtMjI0LDcgKzI0NSw2IEBACiAJLyogcGluIHdpZGdldHMgKi8KIAloZGFfbmlkX3QgKnBpbl9uaWRzOwogCXVuc2lnbmVkIGludCBudW1fcGluczsKLQl1bnNpZ25lZCBpbnQgKnBpbl9jb25maWdzOwogCiAJLyogY29kZWMgc3BlY2lmaWMgc3R1ZmYgKi8KIAlzdHJ1Y3QgaGRhX3ZlcmIgKmluaXQ7CkBAIC00MDAsNiArNDIwLDEwIEBACiAgICAgICAgIDB4MTIsIDB4MTMsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzWzJdID0geworCTB4MWYsIDAsCit9OworCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X2FkY19uaWRzWzNdID0gewogICAgICAgICAweDA3LCAweDA4LCAweDA5CiB9OwpAQCAtNDcyLDE1ICs0OTYsMjEgQEAKIAkweDE0LCAweDIyLCAweDIzCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfcGluX25pZHNbMTRdID0geworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzWzEwXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAotCTB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0JMHgxZCwgMHgxZSwgMHgxZiwgMHgyMAorCTB4MGYsIDB4MTAsIDB4MTEsIDB4MWYsIDB4MjAsCiB9Owotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzWzExXSA9IHsKKworI2RlZmluZSBTVEFDOTJIRDcxQlhYX05VTV9QSU5TIDEzCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNHBvcnRbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CisJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwMCwKKwkweDAwLCAweDE0LCAweDE4LCAweDE5LCAweDFlLAorCTB4MWYsIDB4MjAsIDB4MjcKK307CitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNnBvcnRbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKIAkweDBmLCAweDE0LCAweDE4LCAweDE5LCAweDFlLAotCTB4MWYsCisJMHgxZiwgMHgyMCwgMHgyNwogfTsKIAogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9waW5fbmlkc1sxNF0gPSB7CkBAIC04NDIsOSArODcyLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ4M3h4eF9jb3JlX2luaXRbXSA9IHsKLQl7IDB4YSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JeyAweGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAotCXsgMHhkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4YSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKIAogCS8qIHBvd2VyIHN0YXRlIGNvbnRyb2xzIGFtcHMgKi8KIAl7IDB4MDEsIEFDX1ZFUkJfU0VUX0VBUEQsIDEgPDwgMn0sCkBAIC04NTQsMjYgKzg4NCwyNSBAQAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBhLCAweGQsIDB4MGYgKi8KLQl7IDB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsgMHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7fQogfTsKIAotI2RlZmluZSBIRF9ESVNBQkxFX1BPUlRGIDIKKyNkZWZpbmUgSERfRElTQUJMRV9QT1JURiAxCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtdID0gewogCS8qIHN0YXJ0IG9mIGNvbmZpZyAjMSAqLwogCiAJLyogY29ubmVjdCBwb3J0IDBmIHRvIGF1ZGlvIG1peGVyICovCiAJeyAweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgyfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGUgMHgwZiAqLwotCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogc3RhcnQgb2YgY29uZmlnICMyICovCiAKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8KIAl7IDB4MjgsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwYSwgMHhkICovCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0W10gPSB7CisJLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBmLCAweGEsIDB4MGQgKi8KKwl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7fQpAQCAtOTU0LDE2ICs5ODMsNiBAQAogCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIGlkeCwgZGlyKSBcCiAJfQogCi0jZGVmaW5lIFNUQUNfSU5QVVRfU09VUkNFKGNudCkgXAotCXsgXAotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAotCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLCBcCi0JCS5jb3VudCA9IGNudCwgXAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sIFwKLQkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwgXAotCQkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LCBcCi0JfQotCiAjZGVmaW5lIFNUQUNfQU5BTE9HX0xPT1BCQUNLKHZlcmJfcmVhZCwgdmVyYl93cml0ZSwgY250KSBcCiAJeyBcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCkBAIC05NzgsNyArOTk3LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwMF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweGIsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHhiLCAwLCBIREFfT1VUUFVUKSwKLQlTVEFDX0lOUFVUX1NPVVJDRSgxKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGEsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MGEsIDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTEwMDMsOCArMTAyMSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiREFDIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEQUMgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCiAKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDMpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwMTQsOSArMTAzMCwyMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX21peGVyW10gPSB7Ci0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA0KSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCAzKSwKKwl7fQorfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDQpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzEwY2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDUpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMDQxLDggKzEwNzAsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF8xMGNoX21peGVyW10gPSB7Ci0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA1KSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMDk0LDkgKzExMjEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTIyLDEwICsxMTQ2LDExIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpCit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTM3LDE2ICsxMTYyLDEyIEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyNXhfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKLQlTVEFDX0lOUFVUX1NPVVJDRSgxKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwNV9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkUwLCAweDdFMCwgMSksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTU1LDkgKzExNzYsMTMgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDVfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFMCwgMHg3RTAsIDEpLAorCXt9Cit9OworCiAvKiBUaGlzIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBiYXNlZCBvbiBzZXF1ZW5jZSAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjJ4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAogCkBAIC0xMTY4LDkgKzExOTMsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDMpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkVCLCAweDdFQiwgMSksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTgyLDYgKzEyMDQsMTEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyN3hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFQiwgMHg3RUIsIDEpLAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19kbXV4X21peGVyID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIkRpZ2l0YWwgSW5wdXQgU291cmNlIiwKQEAgLTEyMDcsMTAgKzEyMzQsNyBAQAogCSJMRkUgUGxheWJhY2sgVm9sdW1lIiwKIAkiU2lkZSBQbGF5YmFjayBWb2x1bWUiLAogCSJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKLQkiSGVhZHBob25lMiBQbGF5YmFjayBWb2x1bWUiLAogCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgVm9sdW1lIiwKIAlOVUxMCiB9OwogCkBAIC0xMjIxLDEwICsxMjQ1LDcgQEAKIAkiTEZFIFBsYXliYWNrIFN3aXRjaCIsCiAJIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwKIAkiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCi0JIkhlYWRwaG9uZTIgUGxheWJhY2sgU3dpdGNoIiwKIAkiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAotCSJFeHRlcm5hbCBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JIlNwZWFrZXIyIFBsYXliYWNrIFN3aXRjaCIsCiAJIklFQzk1OCBQbGF5YmFjayBTd2l0Y2giLAogCU5VTEwKIH07CkBAIC0xMjk0LDYgKzEzMTUsOCBAQAogCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CiAJCXNuZF9oZGFfc2V0X3ZtYXN0ZXJfdGx2KGNvZGVjLCBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSwKIAkJCQkJSERBX09VVFBVVCwgdm1hc3Rlcl90bHYpOworCQkvKiBjb3JyZWN0IHZvbHVtZSBvZmZzZXQgKi8KKwkJdm1hc3Rlcl90bHZbMl0gKz0gdm1hc3Rlcl90bHZbM10gKiBzcGVjLT52b2x1bWVfb2Zmc2V0OwogCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCiAJCQkJCSAgdm1hc3Rlcl90bHYsIHNsYXZlX3ZvbHMpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTEzMDYsNiArMTMyOSwxMyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAoc3BlYy0+YWxvb3BiYWNrX2N0bCAmJgorCSAgICBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJsb29wYmFjayIpID09IDEpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPmFsb29wYmFja19jdGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJc3RhYzkyeHhfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KIAogCS8qIGNyZWF0ZSBqYWNrIGlucHV0IGVsZW1lbnRzICovCkBAIC0xNDkwLDYgKzE1MjAsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjAwX21vZGVsc1tTVEFDXzkyMDBfTU9ERUxTXSA9IHsKKwlbU1RBQ19BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ19SRUZdID0gInJlZiIsCiAJW1NUQUNfOTIwMF9PUU9dID0gIm9xbyIsCiAJW1NUQUNfOTIwMF9ERUxMX0QyMV0gPSAiZGVsbC1kMjEiLApAQCAtMTUxMSw2ICsxNTQyLDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJLyogRGVsbCBsYXB0b3BzIGhhdmUgQklPUyBwcm9ibGVtICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFhOCwKIAkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfOTIwMF9ERUxMX0QyMSksCkBAIC0xNjMzLDYgKzE2NjYsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjV4X21vZGVsc1tTVEFDXzkyNXhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjV4X0FVVE9dID0gImF1dG8iLAogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ19NMV0gPSAibTEiLAogCVtTVEFDX00xXzJdID0gIm0xLTIiLApAQCAtMTY2MCw2ICsxNjk0LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI1eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLCAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAogCVNORF9QQ0lfUVVJUksoMHg4Mzg0LCAweDc2MzIsICJTdGFjOTIwMiBSZWZlcmVuY2UgQm9hcmQiLCBTVEFDX1JFRiksCiAKIAkvKiBEZWZhdWx0IHRhYmxlIGZvciB1bmtub3duIElEICovCkBAIC0xNjkxLDYgKzE3MjYsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkNzN4eF9tb2RlbHNbU1RBQ185MkhENzNYWF9NT0RFTFNdID0geworCVtTVEFDXzkySEQ3M1hYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ3M1hYX05PX0pEXSA9ICJuby1qZCIsCiAJW1NUQUNfOTJIRDczWFhfUkVGXSA9ICJyZWYiLAogCVtTVEFDX0RFTExfTTZfQU1JQ10gPSAiZGVsbC1tNi1hbWljIiwKQEAgLTE3MDMsNiArMTczOSw4IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCQkJIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDczWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCQkJIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDczWFhfUkVGKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjU0LAogCQkJCSJEZWxsIFN0dWRpbyAxNTM1IiwgU1RBQ19ERUxMX002X0RNSUMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyNTUsCkBAIC0xNzI2LDUyICsxNzY0LDY4IEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3NbMTRdID0geworc3RhdGljIHVuc2lnbmVkIGludCByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3NbMTBdID0gewogCTB4MDIyMTQwMzAsIDB4MDIyMTEwMTAsIDB4MDJhMTkwMjAsIDB4MDIxNzAxMzAsCiAJMHgwMTAxNDA1MCwgMHgwMTgxOTA0MCwgMHgwMTAxNDAyMCwgMHg5MGEzMDE0ZSwKLQkweDQwZjAwMGYwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLAogCTB4MDE0NTExNjAsIDB4OTg1NjAxNzAsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfczE0X3Bpbl9jb25maWdzWzEwXSA9IHsKKwkweDAyMjE0MDMwLCAweDAyMjExMDEwLCAweDAyYTE5MDIwLCAweDAxMDE0MDUwLAorCTB4NDBmMDAwZjAsIDB4MDE4MTkwNDAsIDB4NDBmMDAwZjAsIDB4OTBhNjAxNjAsCisJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwKK307CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MmhkODN4eHhfYnJkX3RibFtTVEFDXzkySEQ4M1hYWF9NT0RFTFNdID0gewogCVtTVEFDXzkySEQ4M1hYWF9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAogCVtTVEFDXzkySEQ4M1hYWF9QV1JfUkVGXSA9IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlncywKKwlbU1RBQ19ERUxMX1MxNF0gPSBkZWxsX3MxNF9waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDgzeHh4X21vZGVsc1tTVEFDXzkySEQ4M1hYWF9NT0RFTFNdID0geworCVtTVEFDXzkySEQ4M1hYWF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MkhEODNYWFhfUkVGXSA9ICJyZWYiLAogCVtTVEFDXzkySEQ4M1hYWF9QV1JfUkVGXSA9ICJtaWMtcmVmIiwKKwlbU1RBQ19ERUxMX1MxNF0gPSAiZGVsbC1zMTQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkODN4eHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhEODNYWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ4M1hYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmEsCisJCSAgICAgICJ1bmtub3duIERlbGwiLCBTVEFDX0RFTExfUzE0KSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ3MWJ4eF9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ3MWJ4eF9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDAyMjE0MDMwLCAweDAyYTE5MDQwLCAweDAxYTE5MDIwLCAweDAxMDE0MDEwLAogCTB4MDE4MTMwMmUsIDB4MDEwMTQwMTAsIDB4MDEwMTkwMjAsIDB4OTBhMDAwZjAsCi0JMHg5MGEwMDBmMCwgMHgwMTQ1MjA1MCwgMHgwMTQ1MjA1MCwKKwkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8xX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8xX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4NDBmMDAwZjAsIDB4OTAxNzAxMTAsCiAJMHgyM2ExOTAyZSwgMHgyMzAxNDI1MCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKLQkweDQwZjAwMGYwLCAweDRmMDAwMGYwLCAweDRmMDAwMGYwLAorCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzJfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzJfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg5MGE3MDMzMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLAotCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsCisJMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfM19waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfM19waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4OTBhMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwKKwkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MmhkNzFieHhfYnJkX3RibFtTVEFDXzkySEQ3MUJYWF9NT0RFTFNdID0gewpAQCAtMTc4MSwzNSArMTgzNSwzOCBAQAogCVtTVEFDX0RFTExfTTRfM10JPSBkZWxsX200XzNfcGluX2NvbmZpZ3MsCiAJW1NUQUNfSFBfTTRdCQk9IE5VTEwsCiAJW1NUQUNfSFBfRFY1XQkJPSBOVUxMLAorCVtTVEFDX0hQX0hEWF0gICAgICAgICAgID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDcxYnh4X21vZGVsc1tTVEFDXzkySEQ3MUJYWF9NT0RFTFNdID0geworCVtTVEFDXzkySEQ3MUJYWF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MkhENzFCWFhfUkVGXSA9ICJyZWYiLAogCVtTVEFDX0RFTExfTTRfMV0gPSAiZGVsbC1tNC0xIiwKIAlbU1RBQ19ERUxMX000XzJdID0gImRlbGwtbTQtMiIsCiAJW1NUQUNfREVMTF9NNF8zXSA9ICJkZWxsLW00LTMiLAogCVtTVEFDX0hQX000XSA9ICJocC1tNCIsCiAJW1NUQUNfSFBfRFY1XSA9ICJocC1kdjUiLAorCVtTVEFDX0hQX0hEWF0gPSAiaHAtaGR4IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDcxYnh4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZjIsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX000KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmNCwKLQkJICAgICAgIkhQIGR2NyIsIFNUQUNfSFBfRFY1KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmNywKLQkJICAgICAgIkhQIGR2NCIsIFNUQUNfSFBfRFY1KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmYywKLQkJICAgICAgIkhQIGR2NyIsIFNUQUNfSFBfTTQpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjAwLAotCQkgICAgICAiSFAgZHY1IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjAzLAotCQkgICAgICAiSFAgZHY1IiwgU1RBQ19IUF9EVjUpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzMDgwLAorCQkgICAgICAiSFAiLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzMGYwLAorCQkgICAgICAiSFAgZHY0LTciLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzNjAwLAorCQkgICAgICAiSFAgZHY0LTciLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MTAsCisJCSAgICAgICJIUCBIRFgiLCBTVEFDX0hQX0hEWCksICAvKiBIRFgxOCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjFhLAotCQkJCSJ1bmtub3duIEhQIiwgU1RBQ19IUF9NNCksCisJCSAgICAgICJIUCBtaW5pIDEwMDAiLCBTVEFDX0hQX000KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxYiwKKwkJICAgICAgIkhQIEhEWCIsIFNUQUNfSFBfSERYKSwgIC8qIEhEWDE2ICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIzMywKIAkJCQkidW5rbm93biBEZWxsIiwgU1RBQ19ERUxMX000XzEpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMzQsCkBAIC0xOTYxLDYgKzIwMTgsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjJ4X21vZGVsc1tTVEFDXzkyMlhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjJYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDX0Q5NDVfUkVGXQk9ICJyZWYiLAogCVtTVEFDX0Q5NDVHVFA1XQk9ICI1c3RhY2siLAogCVtTVEFDX0Q5NDVHVFAzXQk9ICIzc3RhY2siLApAQCAtMTk4OCw2ICsyMDQ2LDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfRDk0NV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfRDk0NV9SRUYpLAogCS8qIEludGVsIDk0NUcgYmFzZWQgc3lzdGVtcyAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwMTAxLAogCQkgICAgICAiSW50ZWwgRDk0NUciLCBTVEFDX0Q5NDVHVFAzKSwKQEAgLTIwNDEsNiArMjEwMSw5IEBACiAJCSAgICAgICJJbnRlbCBEOTQ1UCIsIFNUQUNfRDk0NUdUUDMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwNzA3LAogCQkgICAgICAiSW50ZWwgRDk0NVAiLCBTVEFDX0Q5NDVHVFA1KSwKKwkvKiBvdGhlciBpbnRlbCAqLworCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwMjA0LAorCQkgICAgICAiSW50ZWwgRDk0NSIsIFNUQUNfRDk0NV9SRUYpLAogCS8qIG90aGVyIHN5c3RlbXMgICovCiAJLyogQXBwbGUgSW50ZWwgTWFjIChNYWMgTWluaSwgTWFjQm9vaywgTWFjQm9vayBQcm8uLi4pICovCiAJU05EX1BDSV9RVUlSSygweDgzODQsIDB4NzY4MCwKQEAgLTIwNjUsMzEgKzIxMjgsNyBAQAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxZDcsCiAJCSAgICAgICJEZWxsIFhQUyBNMTIxMCIsIFNUQUNfOTIyWF9ERUxMX004MiksCiAJLyogRUNTL1BDIENoaXBzIGJvYXJkcyAqLwotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDIxNDQsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI2MDgsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI2MzMsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMgUDE3Ry8xMzMzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODExLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODEyLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODEzLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE0LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE1LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE2LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE3LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE4LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE5LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODIwLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMTksIDB4ZjAwMCwgMHgyMDAwLAogCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpAQCAtMjEzMiw2ICsyMTcxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTI3eF9tb2RlbHNbU1RBQ185MjdYX01PREVMU10gPSB7CisJW1NUQUNfOTI3WF9BVVRPXQk9ICJhdXRvIiwKIAlbU1RBQ19EOTY1X1JFRl9OT19KRF0JPSAicmVmLW5vLWpkIiwKIAlbU1RBQ19EOTY1X1JFRl0JCT0gInJlZiIsCiAJW1NUQUNfRDk2NV8zU1RdCQk9ICIzc3RhY2siLApAQCAtMjE0NCwyNiArMjE4NCwxNiBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTY1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTY1X1JFRiksCiAJIC8qIEludGVsIDk0NiBiYXNlZCBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDNkMDEsICJJbnRlbCBEOTQ2IiwgU1RBQ19EOTY1XzNTVCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGEzMDEsICJJbnRlbCBEOTQ2IiwgU1RBQ19EOTY1XzNTVCksCiAJLyogOTY1IGJhc2VkIDMgc3RhY2sgc3lzdGVtcyAqLwotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTE2LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTE1LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTE0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTEzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTEyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTExLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTEwLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA5LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA4LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA3LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA2LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA1LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDAzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDAyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDAxLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjEwMCwKKwkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMDAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKIAkvKiBEZWxsIDMgc3RhY2sgc3lzdGVtcyAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMWY3LCAiRGVsbCBYUFMgTTE3MzAiLCBTVEFDX0RFTExfM1NUKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDFkZCwgIkRlbGwgRGltZW5zaW9uIEU1MjAiLCBTVEFDX0RFTExfM1NUKSwKQEAgLTIxNzksMTUgKzIyMDksMTAgQEAKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDJmZiwgIkRlbGwgICAgICIsIFNUQUNfREVMTF9CSU9TKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDIwOSwgIkRlbGwgWFBTIDEzMzAiLCBTVEFDX0RFTExfQklPUyksCiAJLyogOTY1IGJhc2VkIDUgc3RhY2sgc3lzdGVtcyAqLwotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzAxLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzAyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzAzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzA0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzA1LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTAxLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTAyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTAzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTA0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjMwMCwKKwkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyNTAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC0yMjQwLDE5ICsyMjY1LDI1IEBACiAJW1NUQUNfOTIwNV9ERUxMX000Ml0gPSBkZWxsXzkyMDVfbTQyX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDNdID0gZGVsbF85MjA1X200M19waW5fY29uZmlncywKIAlbU1RBQ185MjA1X0RFTExfTTQ0XSA9IGRlbGxfOTIwNV9tNDRfcGluX2NvbmZpZ3MsCisJW1NUQUNfOTIwNV9FQVBEXSA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMDVfbW9kZWxzW1NUQUNfOTIwNV9NT0RFTFNdID0geworCVtTVEFDXzkyMDVfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTIwNV9SRUZdID0gInJlZiIsCiAJW1NUQUNfOTIwNV9ERUxMX000Ml0gPSAiZGVsbC1tNDIiLAogCVtTVEFDXzkyMDVfREVMTF9NNDNdID0gImRlbGwtbTQzIiwKIAlbU1RBQ185MjA1X0RFTExfTTQ0XSA9ICJkZWxsLW00NCIsCisJW1NUQUNfOTIwNV9FQVBEXSA9ICJlYXBkIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTIwNV9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkyMDVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkyMDVfUkVGKSwKKwkvKiBEZWxsICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFmMSwKIAkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfOTIwNV9ERUxMX000MiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFmMiwKQEAgLTIyODMsMTAxICsyMzE0LDI0IEBACiAJCSAgICAgICJEZWxsIEluc3Bpcm9uIiwgU1RBQ185MjA1X0RFTExfTTQ0KSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjI4LAogCQkgICAgICAiRGVsbCBWb3N0cm8gMTUwMCIsIFNUQUNfOTIwNV9ERUxMX000MiksCisJLyogR2F0ZXdheSAqLworCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDA1NjUsICJHYXRld2F5IFQxNjE2IiwgU1RBQ185MjA1X0VBUEQpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBpbnQgc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWludCBpOwotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JCi0Ja2ZyZWUoc3BlYy0+cGluX2NvbmZpZ3MpOwotCXNwZWMtPnBpbl9jb25maWdzID0ga2NhbGxvYyhzcGVjLT5udW1fcGlucywgc2l6ZW9mKCpzcGVjLT5waW5fY29uZmlncyksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghc3BlYy0+cGluX2NvbmZpZ3MpCi0JCXJldHVybiAtRU5PTUVNOwotCQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5waW5fbmlkc1tpXTsKLQkJdW5zaWduZWQgaW50IHBpbl9jZmc7Ci0JCQotCQlwaW5fY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIAotCQkJQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDB4MDApOwkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IHBpbiBuaWQgJTIuMnggYmlvcyBwaW4gY29uZmlnICU4Ljh4XG4iLAotCQkJCQluaWQsIHBpbl9jZmcpOwotCQlzcGVjLT5waW5fY29uZmlnc1tpXSA9IHBpbl9jZmc7Ci0JfQotCQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgaGRhX25pZF90IHBpbl9uaWQsIHVuc2lnbmVkIGludCBwaW5fY29uZmlnKQotewotCWludCBpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCwKLQkJCSAgICBwaW5fY29uZmlnICYgMHgwMDAwMDBmZik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLAotCQkJICAgIChwaW5fY29uZmlnICYgMHgwMDAwZmYwMCkgPj4gOCk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18yLAotCQkJICAgIChwaW5fY29uZmlnICYgMHgwMGZmMDAwMCkgPj4gMTYpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywKLQkJCSAgICBwaW5fY29uZmlnID4+IDI0KTsKLQlpID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJICAgICAgIDB4MDApOwkKLQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogcGluIG5pZCAlMi4yeCBwaW4gY29uZmlnICU4Ljh4XG4iLAotCQkgICAgcGluX25pZCwgaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqcGluY2ZncykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0gCWlmICghc3BlYy0+cGluX2NvbmZpZ3MpCi0gCQlyZXR1cm47CisJaWYgKCFwaW5jZmdzKQorCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykKLQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIHNwZWMtPnBpbl9uaWRzW2ldLAotCQkJCQlzcGVjLT5waW5fY29uZmlnc1tpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RhY19zYXZlX3Bpbl9jZmdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgKnBpbnMpCi17Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCWlmICghcGlucykKLQkJcmV0dXJuIHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0KLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7Ci0Jc3BlYy0+cGluX2NvbmZpZ3MgPSBrbWVtZHVwKHBpbnMsCi0JCQkJICAgIHNwZWMtPm51bV9waW5zICogc2l6ZW9mKCpwaW5zKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGVjLT5waW5fY29uZmlncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjX2NoYW5nZV9waW5fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJCSAgIHVuc2lnbmVkIGludCBjZmcpCi17Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWlmIChzcGVjLT5waW5fbmlkc1tpXSA9PSBuaWQpIHsKLQkJCXNwZWMtPnBpbl9jb25maWdzW2ldID0gY2ZnOwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIG5pZCwgY2ZnKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCQlpZiAoc3BlYy0+cGluX25pZHNbaV0gJiYgcGluY2Znc1tpXSkKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaV0sCisJCQkJCQkgcGluY2Znc1tpXSk7CiB9CiAKIC8qCkBAIC0yNTY3LDcgKzI1MjEsNyBAQAogCQljb2RlYy0+bnVtX3BjbXMrKzsKIAkJaW5mbysrOwogCQlpbmZvLT5uYW1lID0gIlNUQUM5Mnh4IERpZ2l0YWwiOwotCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKKwkJaW5mby0+cGNtX3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKIAkJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKSB7CiAJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBzdGFjOTJ4eF9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5uaWQgPSBzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZDsKQEAgLTI1ODMsOCArMjUzNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhYzkyeHhfZ2V0X3ZyZWYoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7Ci0JdW5zaWduZWQgaW50IHBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAotCQkJCQkJIEFDX1BBUl9QSU5fQ0FQKTsKKwl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAlwaW5jYXAgPSAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUYpID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl8xMDApCiAJCXJldHVybiBBQ19QSU5DVExfVlJFRl8xMDA7CkBAIC0yNzU5LDIyICsyNzEyLDM3IEBACiB9OwogCiAvKiBhZGQgZHluYW1pYyBjb250cm9scyAqLwotc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY29udHJvbF90ZW1wKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAotCQkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAotCQkJCSAgICAgaW50IGlkeCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICoKK3N0YWNfY29udHJvbF9uZXcoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCisJCSBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCisJCSBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OwogCiAJc25kX2FycmF5X2luaXQoJnNwZWMtPmtjdGxzLCBzaXplb2YoKmtuZXcpLCAzMik7CiAJa25ldyA9IHNuZF9hcnJheV9uZXcoJnNwZWMtPmtjdGxzKTsKIAlpZiAoIWtuZXcpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAkqa25ldyA9ICprdGVtcDsKLQlrbmV3LT5pbmRleCA9IGlkeDsKIAlrbmV3LT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtuZXctPm5hbWUpCisJaWYgKCFrbmV3LT5uYW1lKSB7CisJCS8qIHJvb2xiYWNrICovCisJCW1lbXNldChrbmV3LCAwLCBzaXplb2YoKmtuZXcpKTsKKwkJc3BlYy0+a2N0bHMuYWxsb2NlZC0tOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGtuZXc7Cit9CisKK3N0YXRpYyBpbnQgc3RhYzkyeHhfYWRkX2NvbnRyb2xfdGVtcChzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKKwkJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJCQkgICAgIGludCBpZHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywga3RlbXAsIG5hbWUpOworCWlmICgha25ldykKIAkJcmV0dXJuIC1FTk9NRU07CisJa25ldy0+aW5kZXggPSBpZHg7CiAJa25ldy0+cHJpdmF0ZV92YWx1ZSA9IHZhbDsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3OTYsNiArMjc2NCwyOSBAQAogCXJldHVybiBzdGFjOTJ4eF9hZGRfY29udHJvbF9pZHgoc3BlYywgdHlwZSwgMCwgbmFtZSwgdmFsKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWNfaW5wdXRfc3JjX3RlbXAgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCisJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKKwkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LAorfTsKKworc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfaW5wdXRfc291cmNlKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKworCWlmICghc3BlYy0+bnVtX2FkY3MgfHwgaW11eC0+bnVtX2l0ZW1zIDw9IDEpCisJCXJldHVybiAwOyAvKiBubyBuZWVkIGZvciBpbnB1dCBzb3VyY2UgY29udHJvbCAqLworCWtuZXcgPSBzdGFjX2NvbnRyb2xfbmV3KHNwZWMsICZzdGFjX2lucHV0X3NyY190ZW1wLAorCQkJCXN0YWNfaW5wdXRfc3JjX3RlbXAubmFtZSk7CisJaWYgKCFrbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKwlrbmV3LT5jb3VudCA9IHNwZWMtPm51bV9hZGNzOworCXJldHVybiAwOworfQorCiAvKiBjaGVjayB3aGV0aGVyIHRoZSBsaW5lLWlucHV0IGNhbiBiZSB1c2VkIGFzIGxpbmUtb3V0ICovCiBzdGF0aWMgaGRhX25pZF90IGNoZWNrX2xpbmVfb3V0X3N3aXRjaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTI4MDcsNyArMjc5OCw3IEBACiAJaWYgKGNmZy0+bGluZV9vdXRfdHlwZSAhPSBBVVRPX1BJTl9MSU5FX09VVCkKIAkJcmV0dXJuIDA7CiAJbmlkID0gY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdOwotCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAlpZiAocGluY2FwICYgQUNfUElOQ0FQX09VVCkKIAkJcmV0dXJuIG5pZDsKIAlyZXR1cm4gMDsKQEAgLTI4MjYsMTIgKzI4MTcsMTEgQEAKIAltaWNfcGluID0gQVVUT19QSU5fTUlDOwogCWZvciAoOzspIHsKIAkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRfcGluc1ttaWNfcGluXTsKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJLyogc29tZSBsYXB0b3BzIGhhdmUgYW4gaW50ZXJuYWwgYW5hbG9nIG1pY3JvcGhvbmUKIAkJICogd2hpY2ggY2FuJ3QgYmUgdXNlZCBhcyBhIG91dHB1dCAqLwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSAhPSBBQ19KQUNLX1BPUlRfRklYRUQpIHsKLQkJCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9PVVQpCiAJCQkJcmV0dXJuIG5pZDsKIAkJfQpAQCAtMjg3OSw4ICsyODY5LDcgQEAKIAljb25uX2xlbiA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm4sCiAJCQkJCSAgIEhEQV9NQVhfQ09OTkVDVElPTlMpOwogCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7Ci0JCXdjYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBjb25uW2pdLAotCQkJCQkgICBBQ19QQVJfQVVESU9fV0lER0VUX0NBUCk7CisJCXdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBjb25uW2pdKTsKIAkJd3R5cGUgPSAod2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKIAkJLyogd2UgY2hlY2sgb25seSBhbmFsb2cgb3V0cHV0cyAqLwogCQlpZiAod3R5cGUgIT0gQUNfV0lEX0FVRF9PVVQgfHwgKHdjYXBzICYgQUNfV0NBUF9ESUdJVEFMKSkKQEAgLTI4OTUsNiArMjg4NCwxNiBAQAogCQkJcmV0dXJuIGNvbm5bal07CiAJCX0KIAl9CisJLyogaWYgYWxsIERBQ3MgYXJlIGFscmVhZHkgYXNzaWduZWQsIGNvbm5lY3QgdG8gdGhlIHByaW1hcnkgREFDICovCisJaWYgKGNvbm5fbGVuID4gMSkgeworCQlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgeworCQkJaWYgKGNvbm5bal0gPT0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0pIHsKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBqKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkzNSw2ICsyOTM0LDI2IEBACiAJCWFkZF9zcGVjX2RhY3Moc3BlYywgZGFjKTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKKwkJbmlkID0gY2ZnLT5ocF9waW5zW2ldOworCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7CisJCWlmIChkYWMpIHsKKwkJCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQorCQkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IGRhYzsKKwkJCWVsc2UKKwkJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7CisJCX0KKwkJc3BlYy0+aHBfZGFjc1tpXSA9IGRhYzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPnNwZWFrZXJfcGluc1tpXTsKKwkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOworCQlpZiAoZGFjKQorCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOworCQlzcGVjLT5zcGVha2VyX2RhY3NbaV0gPSBkYWM7CisJfQorCiAJLyogYWRkIGxpbmUtaW4gYXMgb3V0cHV0ICovCiAJbmlkID0gY2hlY2tfbGluZV9vdXRfc3dpdGNoKGNvZGVjKTsKIAlpZiAobmlkKSB7CkBAIC0yOTYyLDI2ICsyOTgxLDYgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQluaWQgPSBjZmctPmhwX3BpbnNbaV07Ci0JCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKLQkJaWYgKGRhYykgewotCQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCi0JCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOwotCQkJZWxzZQotCQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKLQkJfQotCQlzcGVjLT5ocF9kYWNzW2ldID0gZGFjOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7Ci0JCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zW2ldOwotCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7Ci0JCWlmIChkYWMpCi0JCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7Ci0JCXNwZWMtPnNwZWFrZXJfZGFjc1tpXSA9IGRhYzsKLQl9Ci0KIAlzbmRfcHJpbnRkKCJzdGFjOTJ4eDogZGFjX25pZHM9JWQgKDB4JXgvMHgleC8weCV4LzB4JXgvMHgleClcbiIsCiAJCSAgIHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzLAogCQkgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSwKQEAgLTI5OTQsMjQgKzI5OTMsNDcgQEAKIH0KIAogLyogY3JlYXRlIHZvbHVtZSBjb250cm9sL3N3aXRjaCBmb3IgdGhlIGdpdmVuIHByZWZ4IHR5cGUgKi8KLXN0YXRpYyBpbnQgY3JlYXRlX2NvbnRyb2xzKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCitzdGF0aWMgaW50IGNyZWF0ZV9jb250cm9sc19pZHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBmeCwKKwkJCSAgICAgICBpbnQgaWR4LCBoZGFfbmlkX3QgbmlkLCBpbnQgY2hzKQogeworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY2hhciBuYW1lWzMyXTsKIAlpbnQgZXJyOwogCisJaWYgKCFzcGVjLT5jaGVja192b2x1bWVfb2Zmc2V0KSB7CisJCXVuc2lnbmVkIGludCBjYXBzLCBzdGVwLCBudW1zLCBkYl9zY2FsZTsKKwkJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOworCQlzdGVwID0gKGNhcHMgJiBBQ19BTVBDQVBfU1RFUF9TSVpFKSA+PgorCQkJQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVDsKKwkJc3RlcCA9IChzdGVwICsgMSkgKiAyNTsgLyogaW4gLjAxZEIgdW5pdCAqLworCQludW1zID0gKGNhcHMgJiBBQ19BTVBDQVBfTlVNX1NURVBTKSA+PgorCQkJQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVDsKKwkJZGJfc2NhbGUgPSBudW1zICogc3RlcDsKKwkJLyogaWYgZEIgc2NhbGUgaXMgb3ZlciAtNjRkQiwgYW5kIGZpbmVyIGVub3VnaCwKKwkJICogbGV0J3MgcmVkdWNlIGl0IHRvIGhhbGYKKwkJICovCisJCWlmIChkYl9zY2FsZSA+IDY0MDAgJiYgbnVtcyA+PSAweDFmKQorCQkJc3BlYy0+dm9sdW1lX29mZnNldCA9IG51bXMgLyAyOworCQlzcGVjLT5jaGVja192b2x1bWVfb2Zmc2V0ID0gMTsKKwl9CisKIAlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOwotCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX09VVFBVVCkpOworCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCBTVEFDX0NUTF9XSURHRVRfVk9MLCBpZHgsIG5hbWUsCisJCUhEQV9DT01QT1NFX0FNUF9WQUxfT0ZTKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVULAorCQkJCQlzcGVjLT52b2x1bWVfb2Zmc2V0KSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKKwllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbF9pZHgoc3BlYywgU1RBQ19DVExfV0lER0VUX01VVEUsIGlkeCwgbmFtZSwKIAkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCBwZngsIG5pZCwgY2hzKSBcCisJY3JlYXRlX2NvbnRyb2xzX2lkeChjb2RlYywgcGZ4LCAwLCBuaWQsIGNocykKKwogc3RhdGljIGludCBhZGRfc3BlY19kYWNzKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBoZGFfbmlkX3QgbmlkKQogewogCWlmIChzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA+IDQpIHsKQEAgLTMwMzcsNDAgKzMwNTksMzIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpc191bmlxdWVfZGFjKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBoZGFfbmlkX3QgbmlkKQotewotCWludCBpOwotCi0JaWYgKHNwZWMtPmF1dG9jZmcubGluZV9vdXRzICE9IDEpCi0JCXJldHVybiAwOwotCWlmIChzcGVjLT5tdWx0aW91dC5ocF9uaWQgPT0gbmlkKQotCQlyZXR1cm4gMDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkKTsgaSsrKQotCQlpZiAoc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFtpXSA9PSBuaWQpCi0JCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KLXN0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCisvKiBDcmVhdGUgb3V0cHV0IGNvbnRyb2xzCisgKiBUaGUgbWl4ZXIgZWxlbWVudHMgYXJlIG5hbWVkIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gdHlwZSAoQVVUT19QSU5fWFhYX09VVCkKKyAqLworc3RhdGljIGludCBjcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBudW1fb3V0cywKKwkJCQkgY29uc3QgaGRhX25pZF90ICpwaW5zLAorCQkJCSBjb25zdCBoZGFfbmlkX3QgKmRhY19uaWRzLAorCQkJCSBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07Ci0JaGRhX25pZF90IG5pZCA9IDA7CisJaGRhX25pZF90IG5pZDsKIAlpbnQgaSwgZXJyOwogCXVuc2lnbmVkIGludCB3aWRfY2FwczsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0cyAmJiBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsgaSsrKSB7Ci0JCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOwotCQlpZiAoaSA9PSAyKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9vdXRzICYmIGkgPCBBUlJBWV9TSVpFKGNobmFtZSk7IGkrKykgeworCQluaWQgPSBkYWNfbmlkc1tpXTsKKwkJaWYgKCFuaWQpCisJCQljb250aW51ZTsKKwkJaWYgKHR5cGUgIT0gQVVUT19QSU5fSFBfT1VUICYmIGkgPT0gMikgewogCQkJLyogQ2VudGVyL0xGRSAqLwotCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsICJDZW50ZXIiLCBuaWQsIDEpOworCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCAiQ2VudGVyIiwgbmlkLCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkxGRSIsIG5pZCwgMik7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJMRkUiLCBuaWQsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIApAQCAtMzA4NiwyMyArMzEwMCw0NyBAQAogCQkJfQogCiAJCX0gZWxzZSB7Ci0JCQljb25zdCBjaGFyICpuYW1lID0gY2huYW1lW2ldOwotCQkJLyogaWYgaXQncyBhIHNpbmdsZSBEQUMsIGFzc2lnbiBhIGJldHRlciBuYW1lICovCi0JCQlpZiAoIWkgJiYgaXNfdW5pcXVlX2RhYyhzcGVjLCBuaWQpKSB7Ci0JCQkJc3dpdGNoIChjZmctPmxpbmVfb3V0X3R5cGUpIHsKLQkJCQljYXNlIEFVVE9fUElOX0hQX09VVDoKLQkJCQkJbmFtZSA9ICJIZWFkcGhvbmUiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgotCQkJCQluYW1lID0gIlNwZWFrZXIiOwotCQkJCQlicmVhazsKLQkJCQl9CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJaW50IGlkeDsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBBVVRPX1BJTl9IUF9PVVQ6CisJCQkJbmFtZSA9ICJIZWFkcGhvbmUiOworCQkJCWlkeCA9IGk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgorCQkJCW5hbWUgPSAiU3BlYWtlciI7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbmFtZSA9IGNobmFtZVtpXTsKKwkJCQlpZHggPSAwOworCQkJCWJyZWFrOwogCQkJfQotCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsIG5hbWUsIG5pZCwgMyk7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHNfaWR4KGNvZGVjLCBuYW1lLCBpZHgsIG5pZCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOworCQkJaWYgKHR5cGUgPT0gQVVUT19QSU5fSFBfT1VUICYmICFzcGVjLT5ocF9kZXRlY3QpIHsKKwkJCQl3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgcGluc1tpXSk7CisJCQkJaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApCisJCQkJCXNwZWMtPmhwX2RldGVjdCA9IDE7CisJCQl9CiAJCX0KIAl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCitzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGVycjsKKworCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5saW5lX291dHMsIGNmZy0+bGluZV9vdXRfcGlucywKKwkJCQkgICAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMsCisJCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoY2ZnLT5ocF9vdXRzID4gMSAmJiBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fTElORV9PVVQpIHsKIAkJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywKQEAgLTMxMzcsNDAgKzMxNzUsMTggQEAKIAkJCQkJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZDsKLQlpbnQgaSwgZXJyLCBudW1zOworCWludCBlcnI7CiAKLQludW1zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKLQkJc3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsKLQkJCSJIZWFkcGhvbmUiLCAiSGVhZHBob25lMiIsICJIZWFkcGhvbmUzIiwKLQkJfTsKLQkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBjZmctPmhwX3BpbnNbaV0pOwotCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKLQkJCXNwZWMtPmhwX2RldGVjdCA9IDE7Ci0JCWlmIChudW1zID49IEFSUkFZX1NJWkUocGZ4cykpCi0JCQljb250aW51ZTsKLQkJbmlkID0gc3BlYy0+aHBfZGFjc1tpXTsKLQkJaWYgKCFuaWQpCi0JCQljb250aW51ZTsKLQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsIHBmeHNbbnVtcysrXSwgbmlkLCAzKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQludW1zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgewotCQlzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0gewotCQkJIlNwZWFrZXIiLCAiRXh0ZXJuYWwgU3BlYWtlciIsICJTcGVha2VyMiIsCi0JCX07Ci0JCWlmIChudW1zID49IEFSUkFZX1NJWkUocGZ4cykpCi0JCQljb250aW51ZTsKLQkJbmlkID0gc3BlYy0+c3BlYWtlcl9kYWNzW2ldOwotCQlpZiAoIW5pZCkKLQkJCWNvbnRpbnVlOwotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgcGZ4c1tudW1zKytdLCBuaWQsIDMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5ocF9vdXRzLCBjZmctPmhwX3BpbnMsCisJCQkJICAgIHNwZWMtPmhwX2RhY3MsIEFVVE9fUElOX0hQX09VVCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsIGNmZy0+c3BlYWtlcl9vdXRzLCBjZmctPnNwZWFrZXJfcGlucywKKwkJCQkgICAgc3BlYy0+c3BlYWtlcl9kYWNzLCBBVVRPX1BJTl9TUEVBS0VSX09VVCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM3OSwxMSArMzM5NSw3IEBACiAJCXVuc2lnbmVkIGludCB3Y2FwczsKIAkJdW5zaWduZWQgaW50IGRlZl9jb25mOwogCi0JCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLAotCQkJCQkgICAgICBzcGVjLT5kbWljX25pZHNbaV0sCi0JCQkJCSAgICAgIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJCQkgICAgICAwKTsKKwkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHNwZWMtPmRtaWNfbmlkc1tpXSk7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJY29udGludWU7CiAKQEAgLTM1MDcsNiArMzUxOSw3IEBACiBzdGF0aWMgaW50IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZGlnX291dCwgaGRhX25pZF90IGRpZ19pbikKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBocF9zd2FwID0gMDsKIAlpbnQgZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLApAQCAtMzUxNiw3ICszNTI5LDYgQEAKIAlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgcGluIGNvbmZpZyAqLwogCi0jaWYgMCAvKiBGSVhNRTogdGVtcG9yYXJpbHkgZGlzYWJsZWQgKi8KIAkvKiBJZiB3ZSBoYXZlIG5vIHJlYWwgbGluZS1vdXQgcGluIGFuZCBtdWx0aXBsZSBocC1vdXRzLCBIUHMgc2hvdWxkCiAJICogYmUgc2V0IHVwIGFzIG11bHRpLWNoYW5uZWwgb3V0cHV0cy4KIAkgKi8KQEAgLTM1MzUsOCArMzU0Nyw4IEBACiAJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRzID0gc3BlYy0+YXV0b2NmZy5ocF9vdXRzOwogCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUgPSBBVVRPX1BJTl9IUF9PVVQ7CiAJCXNwZWMtPmF1dG9jZmcuaHBfb3V0cyA9IDA7CisJCWhwX3N3YXAgPSAxOwogCX0KLSNlbmRpZiAvKiBGSVhNRTogdGVtcG9yYXJpbHkgZGlzYWJsZWQgKi8KIAlpZiAoc3BlYy0+YXV0b2NmZy5tb25vX291dF9waW4pIHsKIAkJaW50IGRpciA9IGdldF93Y2Fwcyhjb2RlYywgc3BlYy0+YXV0b2NmZy5tb25vX291dF9waW4pICYKIAkJCShBQ19XQ0FQX09VVF9BTVAgfCBBQ19XQ0FQX0lOX0FNUCk7CkBAIC0zNjI5LDEyICszNjQxLDE5IEBACiAjZW5kaWYKIAogCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2hwX2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKLQogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwkvKiBBbGwgb3V0cHV0IHBhcnNpbmcgZG9uZSwgbm93IHJlc3RvcmUgdGhlIHN3YXBwZWQgaHAgcGlucyAqLworCWlmIChocF9zd2FwKSB7CisJCW1lbWNweShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGlucywKKwkJICAgICAgIHNpemVvZihzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpKTsKKwkJc3BlYy0+YXV0b2NmZy5ocF9vdXRzID0gc3BlYy0+YXV0b2NmZy5saW5lX291dHM7CisJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKKwkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSAwOworCX0KIAorCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTM2NjMsMTEgKzM2ODIsMTUgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJZXJyID0gc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzcGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAlpZiAoc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID4gMikKIAkJc3BlYy0+c3Vycl9zd2l0Y2ggPSAxOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX291dDsKIAlpZiAoZGlnX2luICYmIHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IGRpZ19pbjsKQEAgLTM3MzAsOSArMzc1Myw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiBsZmVfcGluID09IDB4MDsgaSsrKSB7CiAJCQloZGFfbmlkX3QgcGluID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldOwogCQkJdW5zaWduZWQgaW50IGRlZmNmZzsKLQkJCWRlZmNmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLCAwLAotCQkJCQkJIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJCQkJIDB4MDApOworCQkJZGVmY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOwogCQkJaWYgKGdldF9kZWZjZmdfZGV2aWNlKGRlZmNmZykgPT0gQUNfSkFDS19TUEVBS0VSKSB7CiAJCQkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW4pOwogCQkJCXdjYXBzICY9IChBQ19XQ0FQX1NURVJFTyB8IEFDX1dDQVBfT1VUX0FNUCk7CkBAIC0zNzQ1LDcgKzM3NjYsNyBAQAogCX0KIAogCWlmIChsZmVfcGluKSB7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbGZlX3BpbiwgMSk7CisJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIGxmZV9waW4sIDEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzc3Niw3ICszNzk3LDExIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWVyciA9IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3BlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAweDA1OwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSAweDA0OwpAQCAtMzgzMiw4ICszODU3LDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0pBQ0sKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBzaWdtYXRlbF9qYWNrICpqYWNrOwotCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAotCQkJMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpbnQgY29ubmVjdGl2aXR5ID0gZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKTsKIAljaGFyIG5hbWVbMzJdOwogCkBAIC0zOTQ4LDYgKzM5NzIsMzYgQEAKIHN0YXRpYyB2b2lkIHN0YWNfdG9nZ2xlX3Bvd2VyX21hcChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQkgIGludCBlbmFibGUpOwogCisvKiBvdmVycmlkZSBzb21lIGhpbnRzIGZyb20gdGhlIGh3ZGVwIGVudHJ5ICovCitzdGF0aWMgdm9pZCBzdGFjX3N0b3JlX2hpbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgdmFsOworCisJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiaHBfZGV0ZWN0Iik7CisJaWYgKHZhbCA+PSAwKQorCQlzcGVjLT5ocF9kZXRlY3QgPSB2YWw7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX21hc2siKTsKKwlpZiAocCkgeworCQlzcGVjLT5ncGlvX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKwkJc3BlYy0+ZWFwZF9tYXNrID0gc3BlYy0+Z3Bpb19kaXIgPSBzcGVjLT5ncGlvX2RhdGEgPQorCQkJc3BlYy0+Z3Bpb19tYXNrOworCX0KKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGlyIik7CisJaWYgKHApCisJCXNwZWMtPmdwaW9fZGlyID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RhdGEiKTsKKwlpZiAocCkKKwkJc3BlYy0+Z3Bpb19kYXRhID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJlYXBkX21hc2siKTsKKwlpZiAocCkKKwkJc3BlYy0+ZWFwZF9tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiZWFwZF9zd2l0Y2giKTsKKwlpZiAodmFsID49IDApCisJCXNwZWMtPmVhcGRfc3dpdGNoID0gdmFsOworfQorCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM5NjQsNiArNDAxOCw5IEBACiAJCQkJc3BlYy0+YWRjX25pZHNbaV0sIDAsCiAJCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKIAorCS8qIG92ZXJyaWRlIHNvbWUgaGludHMgKi8KKwlzdGFjX3N0b3JlX2hpbnRzKGNvZGVjKTsKKwogCS8qIHNldCB1cCBHUElPICovCiAJZ3BpbyA9IHNwZWMtPmdwaW9fZGF0YTsKIAkvKiB0dXJuIG9uIEVBUEQgc3RhdGljYWxseSB3aGVuIHNwZWMtPmVhcGRfc3dpdGNoIGlzbid0IHNldC4KQEAgLTQwMTMsOCArNDA3MCw3IEBACiAJCQkJCQkJCSBwaW5jdGwpOwogCQkJCX0KIAkJCX0KLQkJCWNvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZikgIT0gQUNfSkFDS19QT1JUX0ZJWEVEKSB7CiAJCQkJZW5hYmxlX3Bpbl9kZXRlY3QoY29kZWMsIG5pZCwKIAkJCQkJCSAgU1RBQ19JTlNFUlRfRVZFTlQpOwpAQCAtNDAyNiw4ICs0MDgyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2RtaWNzOyBpKyspCiAJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldLAogCQkJCQlBQ19QSU5DVExfSU5fRU4pOwotCWlmIChjZmctPmRpZ19vdXRfcGluKQotCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW4sCisJaWYgKGNmZy0+ZGlnX291dF9waW5zWzBdKQorCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW5zWzBdLAogCQkJCQkgQUNfUElOQ1RMX09VVF9FTik7CiAJaWYgKGNmZy0+ZGlnX2luX3BpbikKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBjZmctPmRpZ19pbl9waW4sCkBAIC00MDU1LDggKzQxMTEsNyBAQAogCQkJc3RhY190b2dnbGVfcG93ZXJfbWFwKGNvZGVjLCBuaWQsIDEpOwogCQkJY29udGludWU7CiAJCX0KLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJZGVmX2NvbmYgPSBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpOwogCQkvKiBza2lwIGFueSBwb3J0cyB0aGF0IGRvbid0IGhhdmUgamFja3Mgc2luY2UgcHJlc2VuY2UKICAJCSAqIGRldGVjdGlvbiBpcyB1c2VsZXNzICovCkBAIC00MTEwLDcgKzQxNjUsNiBAQAogCWlmICghIHNwZWMpCiAJCXJldHVybjsKIAotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKIAlzdGFjOTJ4eF9mcmVlX2phY2tzKGNvZGVjKTsKIAlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+ZXZlbnRzKTsKIApAQCAtNDEyMSw3ICs0MTc1LDkgQEAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9waW5jdGwoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdW5zaWduZWQgaW50IGZsYWcpCiB7Ci0JdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKKwl1bnNpZ25lZCBpbnQgb2xkX2N0bCwgcGluX2N0bDsKKworCXBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7CiAKIAlpZiAocGluX2N0bCAmIEFDX1BJTkNUTF9JTl9FTikgewpAQCAtNDEzNSwxNCArNDE5MSwxNyBAQAogCQkJcmV0dXJuOwogCX0KIAorCW9sZF9jdGwgPSBwaW5fY3RsOwogCS8qIGlmIHNldHRpbmcgcGluIGRpcmVjdGlvbiBiaXRzLCBjbGVhciB0aGUgY3VycmVudAogCSAgIGRpcmVjdGlvbiBiaXRzIGZpcnN0ICovCiAJaWYgKGZsYWcgJiAoQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX09VVF9FTikpCiAJCXBpbl9jdGwgJj0gfihBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKTsKIAkKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQlwaW5fY3RsIHwgZmxhZyk7CisJcGluX2N0bCB8PSBmbGFnOworCWlmIChvbGRfY3RsICE9IHBpbl9jdGwpCisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgcGluX2N0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKQEAgLTQxNTAsOSArNDIwOSwxMCBAQAogewogCXVuc2lnbmVkIGludCBwaW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCiAJCQkwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCXBpbl9jdGwgJiB+ZmxhZyk7CisJaWYgKHBpbl9jdGwgJiBmbGFnKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgIHBpbl9jdGwgJiB+ZmxhZyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3Bpbl9wcmVzZW5jZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKQEAgLTQ0MTUsNyArNDQ3NSw2IEBACiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7CiAJc3RhYzkyeHhfaW5pdChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfYW1wKGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9jYWNoZShjb2RlYyk7CkBAIC00NDI2LDYgKzQ0ODUsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorCisvKgorICogdXNpbmcgcG93ZXIgY2hlY2sgZm9yIGNvbnRyb2xsaW5nIG11dGUgbGVkIG9mIEhQIEhEWCBub3RlYm9va3MKKyAqIGNoZWNrIGZvciBtdXRlIHN0YXRlIG9ubHkgb24gU3BlYWtlcnMgKG5pZCA9IDB4MTApCisgKgorICogRm9yIHRoaXMgZmVhdHVyZSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFIGlzIG5lZWRlZCwgb3RoZXJ3aXNlCisgKiB0aGUgTEVEIGlzIE5PVCB3b3JraW5nIHByb3Blcmx5ICEKKyAqLworCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorc3RhdGljIGludCBzdGFjOTJ4eF9ocF9oZHhfY2hlY2tfcG93ZXJfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAobmlkID09IDB4MTApIHsKKwkJaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJgorCQkgICAgSERBX0FNUF9NVVRFKQorCQkJc3BlYy0+Z3Bpb19kYXRhICY9IH4weDA4OyAgLyogb3JhbmdlICovCisJCWVsc2UKKwkJCXNwZWMtPmdwaW9fZGF0YSB8PSAweDA4OyAgIC8qIHdoaXRlICovCisKKwkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAorCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCisJCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc3RhYzkyeHhfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00NDY0LDE2ICs0NTU0LDExIEBACiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTIwMF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyMDBfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjAwX2NmZ190YmwpOwotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwMCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjAwX2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CkBAIC00NTQxLDE3ICs0NjI2LDEyIEBACiAJCQkJCQkJc3RhYzkyNXhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjV4X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTI1eCwiCiAJCQkJICAgICAgInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTI1eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwpAQCAtNDYyOSwxNyArNDcwOSwxMiBAQAogCQkJCQkJCXN0YWM5MmhkNzN4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ3M3h4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDczWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3M3h4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgMHgwYSwKIAkJCWNvbm4sIFNUQUM5MkhENzNfREFDX0NPVU5UICsgMikgLSAxOwpAQCAtNDY1MywxNCArNDcyOCwxOCBAQAogCWNhc2UgMHgzOiAvKiA2IENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfNmNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzZjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NDogLyogOCBDaGFubmVsICovCiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3M3h4XzhjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF84Y2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFjazsKIAkJYnJlYWs7CiAJY2FzZSAweDU6IC8qIDEwIENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfMTBjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF8xMGNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrOworCQlicmVhazsKIAl9CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIApAQCAtNDY5OSwxOCArNDc3OCwxOCBAQAogCQkJc3BlYy0+aW5pdCA9IGRlbGxfbTZfY29yZV9pbml0OwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfREVMTF9NNl9BTUlDOiAvKiBBbmFsb2cgTWljcyAqLwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDA7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBTVEFDX0RFTExfTTZfRE1JQzogLyogRGlnaXRhbCBNaWNzICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMTsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMjsKIAkJCWJyZWFrOwogCQljYXNlIFNUQUNfREVMTF9NNl9CT1RIOiAvKiBCb3RoICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDI7CiAJCQlicmVhazsKQEAgLTQ3NzMsNiArNDg1Miw3IEBACiAJaGRhX25pZF90IGNvbm5bU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxXTsKIAlpbnQgZXJyOwogCWludCBudW1fZGFjczsKKwloZGFfbmlkX3QgbmlkOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00NzkxLDE1ICs0ODcxLDYgQEAKIAlzcGVjLT5udW1fcHdycyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9wd3Jfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAotCi0JLyogc2V0IHBvcnQgMHhlIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKLQkgKi8KLQludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweDBlLAotCQljb25uLCBTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDEpIC0gMTsKLQotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4ZSwgMCwKLQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKLQogCXNwZWMtPmluaXQgPSBzdGFjOTJoZDgzeHh4X2NvcmVfaW5pdDsKIAlzcGVjLT5taXhlciA9IHN0YWM5MmhkODN4eHhfbWl4ZXI7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODN4eHhfcGluX25pZHMpOwpAQCAtNDgxNCwxNyArNDg4NSwxMiBAQAogCQkJCQkJCXN0YWM5MmhkODN4eHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkODN4eHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhEODNYWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ4M3h4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCWNhc2UgMHgxMTFkNzYwNDoKQEAgLTQ4NTEsNiArNDkxNywyMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CisJY2FzZSBTVEFDX0RFTExfUzE0OgorCQluaWQgPSAweGY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5pZCA9IDB4ZTsKKwkJYnJlYWs7CisJfQorCisJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLAorCQkJCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOworCisJLyogc2V0IHBvcnQgWCB0byBzZWxlY3QgdGhlIGxhc3QgREFDCisJICovCisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwogCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTJ4eF9wYXRjaF9vcHM7CiAKIAljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHN0YWM5MmhkX3Byb2NfaG9vazsKQEAgLTQ4NTgsNyArNDk0MSwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4ID0geworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyID0geworCS5udW1faXRlbXMgPSAzLAorCS5pdGVtcyA9IHsKKwkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKKwkJeyAiRGlnaXRhbCBNaWMgMSIsIDB4MDIgfSwKKwkJeyAiRGlnaXRhbCBNaWMgMiIsIDB4MDMgfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAwIH0sCkBAIC00ODY4LDEwICs0OTYwLDY3IEBACiAJfQogfTsKIAorLyogZ2V0IHRoZSBwaW4gY29ubmVjdGlvbiAoZml4ZWQsIG5vbmUsIGV0YykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBpZHgpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpZHhdKTsKKwlyZXR1cm4gZ2V0X2RlZmNmZ19jb25uZWN0KGNmZyk7Cit9CisKK3N0YXRpYyBpbnQgc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSBoZGFfbmlkX3QgKm5pZHMsIGludCBudW1fbmlkcykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpZHgsIG51bTsKKwl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IG51bV9uaWRzOyBudW0rKykgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNwZWMtPm51bV9waW5zOyBpZHgrKykKKwkJCWlmIChzcGVjLT5waW5fbmlkc1tpZHhdID09IG5pZHNbbnVtXSkKKwkJCQlicmVhazsKKwkJaWYgKGlkeCA+PSBzcGVjLT5udW1fcGlucykKKwkJCWJyZWFrOworCQlkZWZfY29uZiA9IHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHgpOworCQlpZiAoZGVmX2NvbmYgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIGludCBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgaGRhX25pZF90IGRpZzBwaW4pCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBzcGVjLT5udW1fcGluczsgaWR4KyspCisJCWlmIChzcGVjLT5waW5fbmlkc1tpZHhdID09IGRpZzBwaW4pCisJCQlicmVhazsKKwlpZiAoKGlkeCArIDIpID49IHNwZWMtPm51bV9waW5zKQorCQlyZXR1cm4gMDsKKworCS8qIGRpZzFwaW4gY2FzZSAqLworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4ICsgMSkgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAyOworCisJLyogZGlnMHBpbiArIGRpZzJwaW4gY2FzZSAqLworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4ICsgMikgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAyOworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4KSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOworCXN0cnVjdCBoZGFfdmVyYiAqdW5tdXRlX2luaXQgPSBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXQ7CiAJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IG5kbWljX25pZHMgPSAwOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00ODc5LDI3ICs1MDI4LDMyIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKLQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9waW5fbmlkcyk7CisJc3BlYy0+bnVtX3BpbnMgPSBTVEFDOTJIRDcxQlhYX05VTV9QSU5TOworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMTFkNzZiNjoKKwljYXNlIDB4MTExZDc2Yjc6CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydDsKKwkJYnJlYWs7CisJY2FzZSAweDExMWQ3NjAzOgorCWNhc2UgMHgxMTFkNzYwODoKKwkJLyogT24gOTJIRDc1QnggMHgyNyBpc24ndCBhIHBpbiBuaWQgKi8KKwkJc3BlYy0+bnVtX3BpbnMtLTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNnBvcnQ7CisJfQogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3B3cl9uaWRzKTsKLQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHM7Ci0JbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4LAotCQkJc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eCkpOwogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLAogCQkJCQkJCVNUQUNfOTJIRDcxQlhYX01PREVMUywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDcxQlhYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MmhkNzFieHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID4gU1RBQ185MkhENzFCWFhfUkVGKSB7CiAJCS8qIEdQSU8wID0gRUFQRCAqLwpAQCAtNDkwOCwxNiArNTA2MiwzNCBAQAogCQlzcGVjLT5ncGlvX2RhdGEgPSAweDAxOwogCX0KIAorCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOworCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOworCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDExMWQ3NmI2OiAvKiA0IFBvcnQgd2l0aG91dCBBbmFsb2cgTWl4ZXIgKi8KIAljYXNlIDB4MTExZDc2Yjc6CisJCXVubXV0ZV9pbml0Kys7CisJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSAweDExMWQ3NmI0OiAvKiA2IFBvcnQgd2l0aG91dCBBbmFsb2cgTWl4ZXIgKi8KIAljYXNlIDB4MTExZDc2YjU6CisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyKSk7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKKwkJaWYgKHNwZWMtPm51bV9kbWljcykgeworCQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OworCQkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMTsKKwkJfQogCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDg6IC8qIDUgUG9ydCB3aXRoIEFuYWxvZyBNaXhlciAqLworCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIpKTsKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMtLTsKIAkJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAkJY2FzZSBTVEFDX0hQX000OgogCQkJLyogRW5hYmxlIFZSRUYgcG93ZXIgc2F2aW5nIG9uIEdQSU8xIGRldGVjdCAqLwpAQCAtNDk0NCw3ICs1MTE2LDE1IEBACiAKIAkJLyogZGlzYWJsZSBWU1cgKi8KIAkJc3BlYy0+aW5pdCA9ICZzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbSERfRElTQUJMRV9QT1JURl07Ci0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4ZiwgMHg0MGYwMDBmMCk7CisJCXVubXV0ZV9pbml0Kys7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgMHg0MGYwMDBmMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxOSwgMHg0MGYwMDBmMyk7CisJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzW1NUQUM5MkhENzFCWFhfTlVNX0RNSUNTIC0gMV0gPSAwOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTIC0gMSk7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMjsKIAkJYnJlYWs7CiAJY2FzZSAweDExMWQ3NjAzOiAvKiA2IFBvcnQgd2l0aCBBbmFsb2cgTWl4ZXIgKi8KIAkJaWYgKChjb2RlYy0+cmV2aXNpb25faWQgJiAweGYpID09IDEpCkBAIC00OTU0LDEyICs1MTM0LDIzIEBACiAJCXNwZWMtPm51bV9wd3JzID0gMDsKIAkJLyogZmFsbHRocnUgKi8KIAlkZWZhdWx0OgorCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIpKTsKIAkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOwogCX0KIAorCWlmIChnZXRfd2NhcHMoY29kZWMsIDB4YSkgJiBBQ19XQ0FQX0lOX0FNUCkKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZShjb2RlYywgdW5tdXRlX2luaXQpOworCisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzFieHhfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDUwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAKQEAgLTQ5NjcsMTggKzUxNTgsMTcgQEAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjY7CiAJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X211eF9uaWRzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9hZGNfbmlkczsKLQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtaWNfbmlkczsKLQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkczsKIAlzcGVjLT5zbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X3NtdXhfbmlkczsKIAlzcGVjLT5wd3JfbmlkcyA9IHN0YWM5MmhkNzFieHhfcHdyX25pZHM7CiAKIAlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfbXV4X25pZHMpOwogCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2FkY19uaWRzKTsKKwlzcGVjLT5udW1fc211eGVzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfc211eGVzKGNvZGVjLCAweDFlKTsKIAogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJY2FzZSBTVEFDX0hQX000OgogCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljcm9waG9uZSAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBlLCAweDAxODEzMDQwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBlLCAweDAxODEzMDQwKTsKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCAweDBlLAogCQkJQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX1ZSRUZfODApOwogCQkvKiBmYWxsdGhydSAqLwpAQCAtNDk5MywxOSArNTE4MywzNiBAQAogCQlzcGVjLT5udW1fc211eGVzID0gMDsKIAkJc3BlYy0+bnVtX2RtdXhlcyA9IDE7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNwZWMtPm51bV9kbWljcyA9IFNUQUM5MkhENzFCWFhfTlVNX0RNSUNTOwotCQlzcGVjLT5udW1fc211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3NtdXhfbmlkcyk7Ci0JCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwljYXNlIFNUQUNfSFBfRFY1OgorCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGQsIDB4OTAxNzAwMTApOworCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIDB4MGQsIEFDX1BJTkNUTF9PVVRfRU4pOworCQlicmVhazsKKwljYXNlIFNUQUNfSFBfSERYOgorCQlzcGVjLT5udW1fZG1pY3MgPSAxOworCQlzcGVjLT5udW1fZG11eGVzID0gMTsKKwkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7CisJCS8qCisJCSAqIEZvciBjb250cm9sbGluZyBNVVRFIExFRCBvbiBIUCBIRFgxNi9IRFgxOCBub3RlYm9va3MsCisJCSAqIHRoZSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFIGlzIG5lZWRlZCB0byBiZSBzZXQuCisJCSAqLworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkJLyogb3JhbmdlL3doaXRlIG11dGUgbGVkIG9uIEdQSU8zLCBvcmFuZ2U9MCwgd2hpdGU9MSAqLworCQlzcGVjLT5ncGlvX21hc2sgfD0gMHgwODsKKwkJc3BlYy0+Z3Bpb19kaXIgIHw9IDB4MDg7CisJCXNwZWMtPmdwaW9fZGF0YSB8PSAweDA4OyAgLyogc2V0IHRvIHdoaXRlICovCisKKwkJLyogcmVnaXN0ZXIgY2hlY2tfcG93ZXJfc3RhdHVzIGNhbGxiYWNrLiAqLworCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyA9CisJCSAgICBzdGFjOTJ4eF9ocF9oZHhfY2hlY2tfcG93ZXJfc3RhdHVzOworI2VuZGlmCQorCQlicmVhazsKIAl9OwogCiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAlpZiAoc3BlYy0+ZGlucHV0X211eCkKLQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0KLQkJCXNwZWMtPm51bV9kbWljcyAtCi0JCQkJKEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMSk7CisJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zICs9IHNwZWMtPm51bV9kbWljcyAtIG5kbWljX25pZHM7CiAKLQllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMHgyMyk7CisJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MjEsIDApOwogCWlmICghZXJyKSB7CiAJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6IE5vIGF1dG8tY29uZmlnIGlzICIKQEAgLTUwODAsMTcgKzUyODcsMTIgQEAKIAl9CiAKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMngsICIKIAkJCSJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MjJ4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTIyeF9hZGNfbmlkczsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MjJ4X211eF9uaWRzOwpAQCAtNTE0MSwyNCArNTM0MywxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTI3eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyN3hfcGluX25pZHM7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTI3WF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyN3hfbW9kZWxzLAogCQkJCQkJCXN0YWM5Mjd4X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwIHx8ICFzdGFjOTI3eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pIHsKLQkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCi0JCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgorCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyN3hfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTI3eF9hZGNfbmlkczsKQEAgLTUxODcsMTUgKzUzODQsMTUgQEAKIAkJY2FzZSAweDEwMjgwMjA5OgogCQljYXNlIDB4MTAyODAyMmU6CiAJCQkvKiBjb3JyZWN0IHRoZSBkZXZpY2UgZmllbGQgdG8gU1BESUYgb3V0ICovCi0JCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDIxLCAweDAxNDQyMDcwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgyMSwgMHgwMTQ0MjA3MCk7CiAJCQlicmVhazsKIAkJfTsKIAkJLyogY29uZmlndXJlIHRoZSBhbmFsb2cgbWljcm9waG9uZSBvbiBzb21lIGxhcHRvcHMgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwYywgMHg5MGE3OTEzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYywgMHg5MGE3OTEzMCk7CiAJCS8qIGNvcnJlY3QgdGhlIGZyb250IG91dHB1dCBqYWNrIGFzIGEgaHAgb3V0ICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGYsIDB4MDIyNzAxMWYpOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIDB4MDIyNzAxMWYpOwogCQkvKiBjb3JyZWN0IHRoZSBmcm9udCBpbnB1dCBqYWNrIGFzIGEgbWljICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGUsIDB4MDJhNzkxMzApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGUsIDB4MDJhNzkxMzApOwogCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU1RBQ19ERUxMXzNTVDoKIAkJLyogR1BJTzIgSGlnaCA9IEVuYWJsZSBFQVBEICovCkBAIC01MjIyLDYgKzU0MTksNyBAQAogCX0KIAogCXNwZWMtPm51bV9wd3JzID0gMDsKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyN3hfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOwpAQCAtNTI4MCwxNiArNTQ3OCwxMSBAQAogCQkJCQkJCXN0YWM5MjA1X21vZGVscywKIAkJCQkJCQlzdGFjOTIwNV9jZmdfdGJsKTsKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMDUsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTIwNV9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMzsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjA1X2FkY19uaWRzOwpAQCAtNTMwNiwxNyArNTQ5OSwyMCBAQAogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjA1X2NvcmVfaW5pdDsKIAlzcGVjLT5taXhlciA9IHN0YWM5MjA1X21peGVyOworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTIwNV9sb29wYmFjazsKIAogCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHg0MDsKIAlzcGVjLT5hbG9vcGJhY2tfc2hpZnQgPSAwOwotCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKKwkvKiBUdXJuIG9uL29mZiBFQVBEIHBlciBIUCBwbHVnZ2luZyAqLworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgIT0gU1RBQ185MjA1X0VBUEQpCisJCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCQogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKXsKIAljYXNlIFNUQUNfOTIwNV9ERUxMX000MzoKIAkJLyogRW5hYmxlIFNQRElGIGluL291dCAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDFmLCAweDAxNDQxMDMwKTsKLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgyMCwgMHgxYzQxMDAzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxZiwgMHgwMTQ0MTAzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgyMCwgMHgxYzQxMDAzMCk7CiAKIAkJLyogRW5hYmxlIHVuc29sIHJlc3BvbnNlIGZvciBHUElPNC9Eb2NrIEhQIGNvbm5lY3Rpb24gKi8KIAkJZXJyID0gc3RhY19hZGRfZXZlbnQoc3BlYywgY29kZWMtPmFmZywgU1RBQ19WUkVGX0VWRU5ULCAweDAxKTsKQEAgLTUzNzMsMjIzICs1NTY5LDg3IEBACiAgKiBTVEFDOTg3MiBoYWNrCiAgKi8KIAotLyogc3RhdGljIGNvbmZpZyBmb3IgU29ueSBWQUlPIEZFNTUwRyBhbmQgU29ueSBWQUlPIEFSICovCi1zdGF0aWMgaGRhX25pZF90IHZhaW9fZGFjc1tdID0geyAweDIgfTsKLSNkZWZpbmUgVkFJT19IUF9EQUMJMHg1Ci1zdGF0aWMgaGRhX25pZF90IHZhaW9fYWRjc1tdID0geyAweDggLyosMHg2Ki8gfTsKLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19tdXhfbmlkc1tdID0geyAweDE1IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCB2YWlvX211eCA9IHsKLQkubnVtX2l0ZW1zID0gMywKLQkuaXRlbXMgPSB7Ci0JCS8qIHsgIkhQIiwgMHgwIH0sICovCi0JCXsgIk1pYyBKYWNrIiwgMHgxIH0sCi0JCXsgIkludGVybmFsIE1pYyIsIDB4MiB9LAotCQl7ICJQQ00iLCAweDMgfSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZhaW9faW5pdFtdID0gewotCXsweDBhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LCAvKiBIUCA8LSAweDIgKi8KLQl7MHgwYSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFNUQUNfSFBfRVZFTlR9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KLQl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KLQl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzk4NzJfY29yZV9pbml0W10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaWMtc2VsOiAwYSwwZCwxNCwwMiAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBIUCAqLwotCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBTcGVha2VyICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogY2FwdHVyZSBzdy92b2wgLT4gMHg4ICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LCAvKiBDRC1pbiAtPiAweDYgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LCAvKiBNaWMtaW4gLT4gMHg5ICovCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19hcl9pbml0W10gPSB7Ci0JezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KLQl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KLS8qCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwqLyAvKiBPcHRpY2FsIE91dCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAqLwotCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwgLyogbWljLXNlbDogMGEsMGQsMTQsMDIgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogSFAgKi8KLQl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogU3BlYWtlciAqLwotLyoJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sKi8gLyogT3B0aWNhbCBPdXQgKi8KLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+IDB4NiAqLwotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIE1pYy1pbiAtPiAweDkgKi8KLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZhaW9fbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDUsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDUsIDAsIEhEQV9PVVRQVVQpLAotCS8qIEhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgwNywgMCwgSERBX0lOUFVUKSwgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTg3Ml9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmNvdW50ID0gMSwKLQkJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gc3RhYzkyeHhfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LAotCX0sCi0Je30KKwl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmFpb19hcl9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNSwgMCwgSERBX09VVFBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAweDA3LCAwLCBIREFfSU5QVVQpLCAqLwotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAwLCBIREFfSU5QVVQpLAotCS8qSERBX0NPREVDX01VVEUoIk9wdGljYWwgT3V0IFN3aXRjaCIsIDB4MTAsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk9wdGljYWwgT3V0IFZvbHVtZSIsIDB4MTAsIDAsIEhEQV9PVVRQVVQpLCovCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuY291bnQgPSAxLAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCi0JCS5nZXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBzdGFjOTJ4eF9tdXhfZW51bV9wdXQsCi0JfSwKLQl7fQorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTg3Ml9waW5fbmlkc1tdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisJMHgxMSwgMHgxMywgMHgxNCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBzdGFjOTg3Ml9wYXRjaF9vcHMgPSB7Ci0JLmJ1aWxkX2NvbnRyb2xzID0gc3RhYzkyeHhfYnVpbGRfY29udHJvbHMsCi0JLmJ1aWxkX3BjbXMgPSBzdGFjOTJ4eF9idWlsZF9wY21zLAotCS5pbml0ID0gc3RhYzkyeHhfaW5pdCwKLQkuZnJlZSA9IHN0YWM5Mnh4X2ZyZWUsCi0jaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKLQkucmVzdW1lID0gc3RhYzkyeHhfcmVzdW1lLAotI2VuZGlmCitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX2FkY19uaWRzW10gPSB7CisJMHg4IC8qLDB4NiovCiB9OwogCi1zdGF0aWMgaW50IHN0YWM5ODcyX3ZhaW9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gc3RhYzkyeHhfaW5pdChjb2RlYyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JaWYgKGNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQpCi0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQoY29kZWMsIFNUQUNfSFBfRVZFTlQgPDwgMjYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjOTg3Ml92YWlvX2hwX2RldGVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoZ2V0X3Bpbl9wcmVzZW5jZShjb2RlYywgMHgwYSkpIHsKLQkJc3RhYzkyeHhfcmVzZXRfcGluY3RsKGNvZGVjLCAweDBmLCBBQ19QSU5DVExfT1VUX0VOKTsKLQkJc3RhYzkyeHhfc2V0X3BpbmN0bChjb2RlYywgMHgwYSwgQUNfUElOQ1RMX09VVF9FTik7Ci0JfSBlbHNlIHsKLQkJc3RhYzkyeHhfcmVzZXRfcGluY3RsKGNvZGVjLCAweDBhLCBBQ19QSU5DVExfT1VUX0VOKTsKLQkJc3RhYzkyeHhfc2V0X3BpbmN0bChjb2RlYywgMHgwZiwgQUNfUElOQ1RMX09VVF9FTik7Ci0JfQotfSAKLQotc3RhdGljIHZvaWQgc3RhYzk4NzJfdmFpb191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgU1RBQ19IUF9FVkVOVDoKLQkJc3RhYzk4NzJfdmFpb19ocF9kZXRlY3QoY29kZWMsIHJlcyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIHN0YWM5ODcyX3ZhaW9fcGF0Y2hfb3BzID0gewotCS5idWlsZF9jb250cm9scyA9IHN0YWM5Mnh4X2J1aWxkX2NvbnRyb2xzLAotCS5idWlsZF9wY21zID0gc3RhYzkyeHhfYnVpbGRfcGNtcywKLQkuaW5pdCA9IHN0YWM5ODcyX3ZhaW9faW5pdCwKLQkuZnJlZSA9IHN0YWM5Mnh4X2ZyZWUsCi0JLnVuc29sX2V2ZW50ID0gc3RhYzk4NzJfdmFpb191bnNvbF9ldmVudCwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lID0gc3RhYzkyeHhfcmVzdW1lLAotI2VuZGlmCitzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX211eF9uaWRzW10gPSB7CisJMHgxNQogfTsKIAotZW51bSB7IC8qIEZFIGFuZCBTWiBzZXJpZXMuIGlkPTB4ODM4NDc2NjEgYW5kIHN1YnN5cz0weDEwNEQwNzAwIG9yIDEwNEQxMDAwLiAqLwotICAgICAgIENYRDk4NzJSRF9WQUlPLAotICAgICAgIC8qIFVua25vd24uIGlkPTB4ODM4NDc2NjIgYW5kIHN1YnN5cz0weDEwNEQxMjAwIG9yIDEwNEQxMDAwLiAqLwotICAgICAgIFNUQUM5ODcyQUtfVkFJTywgCi0gICAgICAgLyogVW5rbm93bi4gaWQ9MHg4Mzg0NzY2MSBhbmQgc3Vic3lzPTB4MTA0RDEyMDAuICovCi0gICAgICAgU1RBQzk4NzJLX1ZBSU8sCi0gICAgICAgLyogQVIgU2VyaWVzLiBpZD0weDgzODQ3NjY0IGFuZCBzdWJzeXM9MTA0RDEzMDAgKi8KLSAgICAgICBDWEQ5ODcyQUtEX1ZBSU8sCi0gICAgICAgU1RBQ185ODcyX01PREVMUywKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhYzk4NzJfdmFpb19waW5fY29uZmlnc1s5XSA9IHsKKwkweDAzMjExMDIwLCAweDQxMTExMWYwLCAweDQxMTExMWYwLCAweDAzYTE1MDMwLAorCTB4NDExMTExZjAsIDB4OTAxNzAxMTAsIDB4NDExMTExZjAsIDB4NDExMTExZjAsCisJMHg5MGE3MDEzZQogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5ODcyX21vZGVsc1tTVEFDXzk4NzJfTU9ERUxTXSA9IHsKLQlbQ1hEOTg3MlJEX1ZBSU9dCT0gInZhaW8iLAotCVtDWEQ5ODcyQUtEX1ZBSU9dCT0gInZhaW8tYXIiLAorCVtTVEFDXzk4NzJfQVVUT10gPSAiYXV0byIsCisJW1NUQUNfOTg3Ml9WQUlPXSA9ICJ2YWlvIiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5ODcyX2JyZF90YmxbU1RBQ185ODcyX01PREVMU10gPSB7CisJW1NUQUNfOTg3Ml9WQUlPXSA9IHN0YWM5ODcyX3ZhaW9fcGluX2NvbmZpZ3MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzk4NzJfY2ZnX3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZTYsICJTb255IFZBSU8gRi9TIiwgQ1hEOTg3MlJEX1ZBSU8pLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZWYsICJTb255IFZBSU8gRi9TIiwgQ1hEOTg3MlJEX1ZBSU8pLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZmQsICJTb255IFZBSU8gQVIiLCBDWEQ5ODcyQUtEX1ZBSU8pLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMDUsICJTb255IFZBSU8gQVIiLCBDWEQ5ODcyQUtEX1ZBSU8pLAotCXt9CisJe30gLyogdGVybWluYXRvciAqLwogfTsKIAogc3RhdGljIGludCBwYXRjaF9zdGFjOTg3MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnI7CiAKLQlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185ODcyX01PREVMUywKLQkJCQkJCSAgc3RhYzk4NzJfbW9kZWxzLAotCQkJCQkJICBzdGFjOTg3Ml9jZmdfdGJsKTsKLQlpZiAoYm9hcmRfY29uZmlnIDwgMCkKLQkJLyogdW5rbm93biBjb25maWcsIGxldCBnZW5lcmljLXBhcnNlciBkbyBpdHMgam9iLi4uICovCi0JCXJldHVybiBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOwotCQogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQogCWNvZGVjLT5zcGVjID0gc3BlYzsKLQlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewotCWNhc2UgQ1hEOTg3MlJEX1ZBSU86Ci0JY2FzZSBTVEFDOTg3MkFLX1ZBSU86Ci0JY2FzZSBTVEFDOTg3MktfVkFJTzoKLQkJc3BlYy0+bWl4ZXIgPSB2YWlvX21peGVyOwotCQlzcGVjLT5pbml0ID0gdmFpb19pbml0OwotCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwotCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUodmFpb19kYWNzKTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSB2YWlvX2RhY3M7Ci0JCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IFZBSU9fSFBfREFDOwotCQlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUodmFpb19hZGNzKTsKLQkJc3BlYy0+YWRjX25pZHMgPSB2YWlvX2FkY3M7Ci0JCXNwZWMtPm51bV9wd3JzID0gMDsKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJnZhaW9fbXV4OwotCQlzcGVjLT5tdXhfbmlkcyA9IHZhaW9fbXV4X25pZHM7Ci0JCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTg3Ml92YWlvX3BhdGNoX29wczsKLQkJYnJlYWs7Ci0JCi0JY2FzZSBDWEQ5ODcyQUtEX1ZBSU86Ci0JCXNwZWMtPm1peGVyID0gdmFpb19hcl9taXhlcjsKLQkJc3BlYy0+aW5pdCA9IHZhaW9fYXJfaW5pdDsKLQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKLQkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKHZhaW9fZGFjcyk7Ci0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gdmFpb19kYWNzOwotCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBWQUlPX0hQX0RBQzsKLQkJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHZhaW9fYWRjcyk7Ci0JCXNwZWMtPm51bV9wd3JzID0gMDsKLQkJc3BlYy0+YWRjX25pZHMgPSB2YWlvX2FkY3M7Ci0JCXNwZWMtPmlucHV0X211eCA9ICZ2YWlvX211eDsKLQkJc3BlYy0+bXV4X25pZHMgPSB2YWlvX211eF9uaWRzOwotCQljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzk4NzJfcGF0Y2hfb3BzOwotCQlicmVhazsKLQl9CiAKKwlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185ODcyX01PREVMUywKKwkJCQkJCQlzdGFjOTg3Ml9tb2RlbHMsCisJCQkJCQkJc3RhYzk4NzJfY2ZnX3RibCk7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTg3MiwgIgorCQkJICAgICJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKKwkJCQkJIHN0YWM5ODcyX2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7CisKKwlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzk4NzJfcGluX25pZHMpOworCXNwZWMtPnBpbl9uaWRzID0gc3RhYzk4NzJfcGluX25pZHM7CisJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKKwlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUoc3RhYzk4NzJfYWRjX25pZHMpOworCXNwZWMtPmFkY19uaWRzID0gc3RhYzk4NzJfYWRjX25pZHM7CisJc3BlYy0+bnVtX211eGVzID0gQVJSQVlfU0laRShzdGFjOTg3Ml9tdXhfbmlkcyk7CisJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTg3Ml9tdXhfbmlkczsKKwlzcGVjLT5taXhlciA9IHN0YWM5ODcyX21peGVyOworCXNwZWMtPmluaXQgPSBzdGFjOTg3Ml9jb3JlX2luaXQ7CisKKwllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgxMCwgMHgxMik7CisJaWYgKGVyciA8IDApIHsKKwkJc3RhYzkyeHhfZnJlZShjb2RlYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTJ4eF9wYXRjaF9vcHM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IGM3NjEzOTQuLmIyNWE1Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtMTMwOCwxNiArMTMwOCwxMyBAQAogCXVuc2lnbmVkIGludCBkZWZfY29uZjsKIAl1bnNpZ25lZCBjaGFyIHNlcWFzc29jOwogCi0JZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJc2VxYXNzb2MgPSAodW5zaWduZWQgY2hhcikgZ2V0X2RlZmNmZ19hc3NvY2lhdGlvbihkZWZfY29uZik7CiAJc2VxYXNzb2MgPSAoc2VxYXNzb2MgPDwgNCkgfCBnZXRfZGVmY2ZnX3NlcXVlbmNlKGRlZl9jb25mKTsKIAlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkgewogCQlpZiAoc2VxYXNzb2MgPT0gMHhmZikgewogCQkJZGVmX2NvbmYgPSBkZWZfY29uZiAmICh+KEFDX0pBQ0tfUE9SVF9CT1RIIDw8IDMwKSk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLAotCQkJCQkgICAgZGVmX2NvbmYgPj4gMjQpOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBuaWQsIGRlZl9jb25mKTsKIAkJfQogCX0KIApAQCAtMTM1NCw3ICsxMzUxLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOF9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDhfRElHSU5fTklEOwpAQCAtMTgyNyw3ICsxODI0LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOV9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSBWVDE3MDlfRElHSU5fTklEOwpAQCAtMjM3MSw3ICsyMzY4LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwOEJfRElHT1VUX05JRDsKIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gVlQxNzA4Ql9ESUdJTl9OSUQ7CkBAIC0yODM2LDcgKzI4MzMsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gVlQxNzA4U19ESUdPVVRfTklEOwogCiAJc3BlYy0+ZXh0cmFfZGlnX291dF9uaWQgPSAweDE1OwpAQCAtMzE1NSw3ICszMTUyLDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IFZUMTcwMl9ESUdPVVRfTklEOwogCiAJc3BlYy0+ZXh0cmFfZGlnX291dF9uaWQgPSAweDFCOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IDU4ZDdjZGEuLjNkZDYzZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQkJdTE2IHBia3N0YXR1czsKIAkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCQkJcGJrc3RhdHVzID0gaW53KElDRURTKGljZSwgSU5UU1RBVCkpOwotCQkJLyogcHJpbnRrKCJwYmtzdGF0dXMgPSAweCV4XG4iLCBwYmtzdGF0dXMpOyAqLworCQkJLyogcHJpbnRrKEtFUk5fREVCVUcgInBia3N0YXR1cyA9IDB4JXhcbiIsIHBia3N0YXR1cyk7ICovCiAJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDY7IGlkeCsrKSB7CiAJCQkJaWYgKChwYmtzdGF0dXMgJiAoMyA8PCAoaWR4ICogMikpKSA9PSAwKQogCQkJCQljb250aW51ZTsKQEAgLTI2NDgsOSArMjY0OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIklDRTE3MTIiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSUNFbnNlbWJsZSBJQ0UxNzEyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggYmI4ZDhjNy4uMTI4NTEwZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTI0MSw2ICsyNDEsOCBAQAogCQkJCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0sIGxpc3QpOwogfQogCitzdGF0aWMgdm9pZCBlbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHU4IGZsYWcsIGludCBlbmFibGUpOworCiBzdGF0aWMgdm9pZCB2dDE3MjRfbWlkaV93cml0ZShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzOwpAQCAtMjU0LDYgKzI1NiwxMSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKIAkJCW91dGIoYnVmZmVyW2ldLCBJQ0VSRUcxNzI0KGljZSwgTVBVX0RBVEEpKTsKIAl9CisJLyogbWFzayBpcnEgd2hlbiBhbGwgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLgorCSAqIGVuYWJsZWQgYWdhaW4gaW4gb3V0cHV0X3RyaWdnZXIgd2hlbiB0aGUgbmV3IGRhdGEgY29tZXMgaW4uCisJICovCisJZW5hYmxlX21pZGlfaXJxKGljZSwgVlQxNzI0X0lSUV9NUFVfVFgsCisJCQkhc25kX3Jhd21pZGlfdHJhbnNtaXRfZW1wdHkocykpOwogfQogCiBzdGF0aWMgdm9pZCB2dDE3MjRfbWlkaV9yZWFkKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQpAQCAtMjcyLDMxICsyNzksMzQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHZ0MTcyNF9lbmFibGVfbWlkaV9pcnEoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgIHU4IGZsYWcsIGludCBlbmFibGUpCisvKiBjYWxsIHdpdGggaWNlLT5yZWdfbG9jayAqLworc3RhdGljIHZvaWQgZW5hYmxlX21pZGlfaXJxKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1OCBmbGFnLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOwotCXU4IG1hc2s7Ci0KLQlzcGluX2xvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKLQltYXNrID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CisJdTggbWFzayA9IGluYihJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOwogCWlmIChlbmFibGUpCiAJCW1hc2sgJj0gfmZsYWc7CiAJZWxzZQogCQltYXNrIHw9IGZsYWc7CiAJb3V0YihtYXNrLCBJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpOworfQorCitzdGF0aWMgdm9pZCB2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICB1OCBmbGFnLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJc3Bpbl9sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CisJZW5hYmxlX21pZGlfaXJxKGljZSwgZmxhZywgZW5hYmxlKTsKIAlzcGluX3VubG9ja19pcnEoJmljZS0+cmVnX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHZ0MTcyNF9taWRpX291dHB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnMpCiB7Ci0JdnQxNzI0X2VuYWJsZV9taWRpX2lycShzLCBWVDE3MjRfSVJRX01QVV9UWCwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnQxNzI0X21pZGlfb3V0cHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnMpCiB7Ci0JdnQxNzI0X2VuYWJsZV9taWRpX2lycShzLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMSw2ICszMjEsNyBAQAogCQl2dDE3MjRfbWlkaV93cml0ZShpY2UpOwogCX0gZWxzZSB7CiAJCWljZS0+bWlkaV9vdXRwdXQgPSAwOworCQllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljZS0+cmVnX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTMyMCw2ICszMzEsNyBAQAogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gcy0+cm1pZGktPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKKwl2dDE3MjRfZW5hYmxlX21pZGlfaXJxKHMsIFZUMTcyNF9JUlFfTVBVX1RYLCAwKTsKIAkvKiAzMiBieXRlcyBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgaW4gbGVzcyB0aGFuIGFib3V0IDEyIG1zICovCiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDE1KTsKIAlkbyB7CkBAIC0zODksMjQgKzQwMSwyNCBAQAogCQlzdGF0dXMgJj0gc3RhdHVzX21hc2s7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCWJyZWFrOworCQlzcGluX2xvY2soJmljZS0+cmVnX2xvY2spOwogCQlpZiAoKyt0aW1lb3V0ID4gMTApIHsKIAkJCXN0YXR1cyA9IGluYihJQ0VSRUcxNzI0KGljZSwgSVJRU1RBVCkpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJpY2UxNzI0OiBUb28gbG9uZyBpcnEgbG9vcCwgIgogCQkJICAgICAgICJzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOwogCQkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVBVX1RYKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJpY2UxNzI0OiBEaXNhYmxpbmcgTVBVX1RYXG4iKTsKLQkJCQlvdXRiKGluYihJQ0VSRUcxNzI0KGljZSwgSVJRTUFTSykpIHwKLQkJCQkgICAgIFZUMTcyNF9JUlFfTVBVX1RYLAotCQkJCSAgICAgSUNFUkVHMTcyNChpY2UsIElSUU1BU0spKTsKKwkJCQllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJCQl9CisJCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCQlicmVhazsKIAkJfQogCQloYW5kbGVkID0gMTsKIAkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVBVX1RYKSB7Ci0JCQlzcGluX2xvY2soJmljZS0+cmVnX2xvY2spOwogCQkJaWYgKGljZS0+bWlkaV9vdXRwdXQpCiAJCQkJdnQxNzI0X21pZGlfd3JpdGUoaWNlKTsKLQkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKKwkJCWVsc2UKKwkJCQllbmFibGVfbWlkaV9pcnEoaWNlLCBWVDE3MjRfSVJRX01QVV9UWCwgMCk7CiAJCQkvKiBEdWUgdG8gbXlzdGVyaWNhbCByZWFzb25zLCBNUFVfVFggaXMgYWx3YXlzCiAJCQkgKiBnZW5lcmF0ZWQgKGFuZCBjYW4ndCBiZSBjbGVhcmVkKSB3aGVuIGEgUENNCiAJCQkgKiBwbGF5YmFjayBpcyBnb2luZy4gIFNvIGxldCdzIGlnbm9yZSBhdCB0aGUKQEAgLTQxNSwxNSArNDI3LDE0IEBACiAJCQlzdGF0dXNfbWFzayAmPSB+VlQxNzI0X0lSUV9NUFVfVFg7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIFZUMTcyNF9JUlFfTVBVX1JYKSB7Ci0JCQlzcGluX2xvY2soJmljZS0+cmVnX2xvY2spOwogCQkJaWYgKGljZS0+bWlkaV9pbnB1dCkKIAkJCQl2dDE3MjRfbWlkaV9yZWFkKGljZSk7CiAJCQllbHNlCiAJCQkJdnQxNzI0X21pZGlfY2xlYXJfcngoaWNlKTsKLQkJCXNwaW5fdW5sb2NrKCZpY2UtPnJlZ19sb2NrKTsKIAkJfQogCQkvKiBhY2sgTVBVIGlycSAqLwogCQlvdXRiKHN0YXR1cywgSUNFUkVHMTcyNChpY2UsIElSUVNUQVQpKTsKKwkJc3Bpbl91bmxvY2soJmljZS0+cmVnX2xvY2spOwogCQlpZiAoc3RhdHVzICYgVlQxNzI0X0lSUV9NVFBDTSkgewogCQkJLyoKIAkJCSAqIE11bHRpLXRyYWNrIFBDTQpAQCAtNzQ1LDcgKzc1NiwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKIAotCS8qIHByaW50aygicHJvIHByZXBhcmU6IGNoID0gJWQsIGFkZHIgPSAweCV4LCBidWZmZXIgPSAweCV4LCBwZXJpb2QgPSAweCV4XG4iLCBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzLCAodW5zaWduZWQgaW50KXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FkZHIsIHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLCBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJvIHByZXBhcmU6IGNoID0gJWQsIGFkZHIgPSAweCV4LCAiCisJICAgICAgICJidWZmZXIgPSAweCV4LCBwZXJpb2QgPSAweCV4XG4iLAorCSAgICAgICBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzLAorCSAgICAgICAodW5zaWduZWQgaW50KXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FkZHIsCisJICAgICAgIHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLAorCSAgICAgICBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSk7CisJKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjEyMiw3ICsyMTQwLDkgQEAKIAl3YWl0X2kyY19idXN5KGljZSk7CiAJdmFsID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJMkNfREFUQSkpOwogCW11dGV4X3VubG9jaygmaWNlLT5pMmNfbXV0ZXgpOwotCS8qIHByaW50aygiaTJjX3JlYWQ6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCB2YWwpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19yZWFkOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgdmFsKTsKKwkqLwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTIxMzEsNyArMjE1MSw5IEBACiB7CiAJbXV0ZXhfbG9jaygmaWNlLT5pMmNfbXV0ZXgpOwogCXdhaXRfaTJjX2J1c3koaWNlKTsKLQkvKiBwcmludGsoImkyY193cml0ZTogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIGRhdGEpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgImkyY193cml0ZTogWzB4JXgsMHgleF0gPSAweCV4XG4iLCBkZXYsIGFkZHIsIGRhdGEpOworCSovCiAJb3V0YihhZGRyLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0JZVEVfQUREUikpOwogCW91dGIoZGF0YSwgSUNFUkVHMTcyNChpY2UsIEkyQ19EQVRBKSk7CiAJb3V0YihkZXYgfCBWVDE3MjRfSTJDX1dSSVRFLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0RFVl9BRERSKSk7CkBAIC0yNDU2LDkgKzI0NzgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJJQ0UxNzI0Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIklDRW5zZW1ibGUgSUNFMTcyNCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jIGIvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCmluZGV4IGM1MTY1OWIuLmZkOTQ4YmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKQEAgLTM0NSw4ICszNDUsOSBAQAogCQkJbmV3X2dwaW8gPSAgb2xkX2dwaW8gJgogCQkJCX4oKHVuc2lnbmVkIGludCkga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOwogCX0KLQkvKiBwcmludGsoIkpVTEkgLSBtdXRlL3VubXV0ZTogY29udHJvbF92YWx1ZTogMHgleCwgb2xkX2dwaW86IDB4JXgsIFwKLQkJbmV3X2dwaW8gMHgleFxuIiwKKwkvKiBwcmludGsoS0VSTl9ERUJVRworCQkiSlVMSSAtIG11dGUvdW5tdXRlOiBjb250cm9sX3ZhbHVlOiAweCV4LCBvbGRfZ3BpbzogMHgleCwgIgorCQkibmV3X2dwaW8gMHgleFxuIiwKIAkJKHVuc2lnbmVkIGludCl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSwgb2xkX2dwaW8sCiAJCW5ld19ncGlvKTsgKi8KIAlpZiAob2xkX2dwaW8gIT0gbmV3X2dwaW8pIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYwppbmRleCA0OGQzNjc5Li4yYThlNWNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCkBAIC0xMzMsOCArMTMzLDEwIEBACiAJCWlkeCAgPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKSArIFNUQUM5NDZYX0xGX1ZPTFVNRTsKIAkvKiBkdWUgdG8gcG9zc2libGUgY29uZmxpY3RzIHdpdGggc3RhYzk0NjBfc2V0X3JhdGVfdmFsLCBtdXRleGluZyAqLwogCW11dGV4X2xvY2soJnNwZWMtPm11dGVfbXV0ZXgpOwotCS8qcHJpbnRrKCJNdXRlIHB1dDogcmVnIDB4JTAyeCwgY3RybCB2YWx1ZTogMHglMDJ4XG4iLCBpZHgsCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgIk11dGUgcHV0OiByZWcgMHglMDJ4LCBjdHJsIHZhbHVlOiAweCUwMnhcbiIsIGlkeCwKKwkgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCSovCiAJY2hhbmdlID0gc3RhYzk0NjBfZGFjX211dGUoaWNlLCBpZHgsIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIAltdXRleF91bmxvY2soJnNwZWMtPm11dGVfbXV0ZXgpOwogCXJldHVybiBjaGFuZ2U7CkBAIC0xODUsNyArMTg3LDEwIEBACiAJY2hhbmdlID0gKG92b2wgIT0gbnZvbCk7CiAJaWYgKGNoYW5nZSkgewogCQlvdm9sID0gICgweDdmIC0gbnZvbCkgfCAodG1wICYgMHg4MCk7Ci0JCS8qcHJpbnRrKCJEQUMgVm9sdW1lOiByZWcgMHglMDJ4OiAweCUwMnhcbiIsIGlkeCwgb3ZvbCk7Ki8KKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRBQyBWb2x1bWU6IHJlZyAweCUwMng6IDB4JTAyeFxuIiwKKwkJICAgICAgIGlkeCwgb3ZvbCk7CisJCSovCiAJCXN0YWM5NDYwX3B1dChpY2UsIGlkeCwgKDB4N2YgLSBudm9sKSB8ICh0bXAgJiAweDgwKSk7CiAJfQogCXJldHVybiBjaGFuZ2U7CkBAIC0zNDQsNyArMzQ5LDcgQEAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDcgOyArK2lkeCkKIAkJY2hhbmdlZFtpZHhdID0gc3RhYzk0NjBfZGFjX211dGUoaWNlLAogCQkJCVNUQUM5NDZYX01BU1RFUl9WT0xVTUUgKyBpZHgsIDApOwotCS8qcHJpbnRrKCJSYXRlIGNoYW5nZTogJWQsIG5ldyBNQzogMHglMDJ4XG4iLCByYXRlLCBuZXcpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAiUmF0ZSBjaGFuZ2U6ICVkLCBuZXcgTUM6IDB4JTAyeFxuIiwgcmF0ZSwgbmV3KTsqLwogCXN0YWM5NDYwX3B1dChpY2UsIFNUQUM5NDZYX01BU1RFUl9DTE9DS0lORywgbmV3KTsKIAl1ZGVsYXkoMTApOwogCS8qIHVubXV0aW5nIC0gb25seSBvcmlnaW5hbGx5IHVubXV0ZWQgZGFjcyAtCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IGU5MDBjZGMuLjU3NjQ4ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC02ODksNyArNjg5LDcgQEAKIAkJCWJkYmFyW2lkeCArIDFdID0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCB8IC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCiAJCQkJCQkgICAgIGljaGRldi0+ZnJhZ3NpemUgPj4gaWNoZGV2LT5wb3Nfc2hpZnQpOwogI2lmIDAKLQkJCXByaW50aygiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiYmRiYXJbJWldID0gMHgleCBbMHgleF1cbiIsCiAJCQkgICAgICAgaWR4ICsgMCwgYmRiYXJbaWR4ICsgMF0sIGJkYmFyW2lkeCArIDFdKTsKICNlbmRpZgogCQl9CkBAIC03MDEsOCArNzAxLDEwIEBACiAJaWNoZGV2LT5sdmlfZnJhZyA9IElDSF9SRUdfTFZJX01BU0sgJSBpY2hkZXYtPmZyYWdzOwogCWljaGRldi0+cG9zaXRpb24gPSAwOwogI2lmIDAKLQlwcmludGsoImx2aV9mcmFnID0gJWksIGZyYWdzID0gJWksIHBlcmlvZF9zaXplID0gMHgleCwgcGVyaW9kX3NpemUxID0gMHgleFxuIiwKLQkJCWljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsIGljaGRldi0+ZnJhZ3NpemUxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCAiCisJICAgICAgICJwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAorCSAgICAgICBpY2hkZXYtPmx2aV9mcmFnLCBpY2hkZXYtPmZyYWdzLCBpY2hkZXYtPmZyYWdzaXplLAorCSAgICAgICBpY2hkZXYtPmZyYWdzaXplMSk7CiAjZW5kaWYKIAkvKiBjbGVhciBpbnRlcnJ1cHRzICovCiAJaXB1dGJ5dGUoY2hpcCwgcG9ydCArIGljaGRldi0+cm9mZl9zciwgSUNIX0ZJRk9FIHwgSUNIX0JDSVMgfCBJQ0hfTFZCQ0kpOwpAQCAtNzY4LDcgKzc3MCw4IEBACiAJCWljaGRldi0+bHZpX2ZyYWcgJT0gaWNoZGV2LT5mcmFnczsKIAkJaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDJdID0gY3B1X3RvX2xlMzIoaWNoZGV2LT5waHlzYnVmICsgaWNoZGV2LT5sdmlfZnJhZyAqIGljaGRldi0+ZnJhZ3NpemUxKTsKICNpZiAwCi0JcHJpbnRrKCJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJuZXc6IGJkYmFyWyVpXSA9IDB4JXggWzB4JXhdLCBwcmVmZXRjaCA9ICVpLCAiCisJICAgICAgICJhbGwgPSAweCV4LCAweCV4XG4iLAogCSAgICAgICBpY2hkZXYtPmx2aSAqIDIsIGljaGRldi0+YmRiYXJbaWNoZGV2LT5sdmkgKiAyXSwKIAkgICAgICAgaWNoZGV2LT5iZGJhcltpY2hkZXYtPmx2aSAqIDIgKyAxXSwgaW5iKElDSF9SRUdfT0ZGX1BJViArIHBvcnQpLAogCSAgICAgICBpbmwocG9ydCArIDQpLCBpbmIocG9ydCArIElDSF9SRUdfT0ZGX0NSKSk7CkBAIC0yMjg3LDIzICsyMjkwLDIzIEBACiAJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhBTElfSU5URVJSVVBUU1IpLCAweDAwMDAwMDAwKTsKIH0KIAotc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfaW5pdChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAsIGludCBwcm9iaW5nKQotewotCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7Ci0JdW5zaWduZWQgaW50IGNudCwgc3RhdHVzLCBuc3RhdHVzOwotCQotCS8qIHB1dCBsb2dpYyB0byByaWdodCBzdGF0ZSAqLwotCS8qIGZpcnN0IGNsZWFyIHN0YXR1cyBiaXRzICovCi0Jc3RhdHVzID0gSUNIX1JDUyB8IElDSF9NQ0lOVCB8IElDSF9QT0lOVCB8IElDSF9QSUlOVDsKLQlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX05GT1JDRSkKLQkJc3RhdHVzIHw9IElDSF9OVlNQSU5UOwotCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKTsKLQlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSwgY250ICYgc3RhdHVzKTsKKyNpZmRlZiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRQorc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGljaF9jaGlwX3Jlc2V0X21vZGVbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNTFmLCAiVGhpbmtwYWQgUjMyIiwgMSksCisJeyB9IC8qIGVuZCAqLworfTsKIAorc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY29sZF9yZXNldChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXApCit7CisJdW5zaWduZWQgaW50IGNudDsKIAkvKiBBQ0xpbmsgb24sIDIgY2hhbm5lbHMgKi8KKworCWlmIChzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIGljaF9jaGlwX3Jlc2V0X21vZGUpKQorCQlyZXR1cm4gLUVJTzsKKwogCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKTsKIAljbnQgJj0gfihJQ0hfQUNMSU5LIHwgSUNIX1BDTV8yNDZfTUFTSyk7Ci0jaWZkZWYgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUKKwogCS8qIGRvIGNvbGQgcmVzZXQgLSB0aGUgZnVsbCBhYzk3IHBvd2VyZG93biBtYXkgbGVhdmUgdGhlIGNvbnRyb2xsZXIKIAkgKiBpbiBhIHdhcm0gc3RhdGUgYnV0IGFjdHVhbGx5IGl0IGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjb2RlYy4KIAkgKi8KQEAgLTIzMTIsMjIgKzIzMTUsNTggQEAKIAl1ZGVsYXkoMTApOwogCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpLCBjbnQgfCBJQ0hfQUM5N0NPTEQpOwogCW1zbGVlcCgxKTsKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApIFwKKwkoIXNuZF9wY2lfcXVpcmtfbG9va3VwKGNoaXAtPnBjaSwgaWNoX2NoaXBfcmVzZXRfbW9kZSkpCiAjZWxzZQorI2RlZmluZSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY29sZF9yZXNldChjaGlwKQkwCisjZGVmaW5lIHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9jYW5fY29sZF9yZXNldChjaGlwKSAoMCkKKyNlbmRpZgorCitzdGF0aWMgaW50IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9yZXNldChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXApCit7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKwl1bnNpZ25lZCBpbnQgY250OworCS8qIEFDTGluayBvbiwgMiBjaGFubmVscyAqLworCWNudCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpKTsKKwljbnQgJj0gfihJQ0hfQUNMSU5LIHwgSUNIX1BDTV8yNDZfTUFTSyk7CiAJLyogZmluaXNoIGNvbGQgb3IgZG8gd2FybSByZXNldCAqLwogCWNudCB8PSAoY250ICYgSUNIX0FDOTdDT0xEKSA9PSAwID8gSUNIX0FDOTdDT0xEIDogSUNIX0FDOTdXQVJNOwogCWlwdXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9DTlQpLCBjbnQpOwogCWVuZF90aW1lID0gKGppZmZpZXMgKyAoSFogLyA0KSkgKyAxOwogCWRvIHsKIAkJaWYgKChpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfQ05UKSkgJiBJQ0hfQUM5N1dBUk0pID09IDApCi0JCQlnb3RvIF9fb2s7CisJCQlyZXR1cm4gMDsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJfSB3aGlsZSAodGltZV9hZnRlcl9lcShlbmRfdGltZSwgamlmZmllcykpOwogCXNuZF9wcmludGsoS0VSTl9FUlIgIkFDJzk3IHdhcm0gcmVzZXQgc3RpbGwgaW4gcHJvZ3Jlc3M/IFsweCV4XVxuIiwKIAkJICAgaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX0NOVCkpKTsKIAlyZXR1cm4gLUVJTzsKK30KIAotICAgICAgX19vazoKLSNlbmRpZgorc3RhdGljIGludCBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfaW5pdChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAsIGludCBwcm9iaW5nKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CisJdW5zaWduZWQgaW50IHN0YXR1cywgbnN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY250OworCWludCBlcnI7CisKKwkvKiBwdXQgbG9naWMgdG8gcmlnaHQgc3RhdGUgKi8KKwkvKiBmaXJzdCBjbGVhciBzdGF0dXMgYml0cyAqLworCXN0YXR1cyA9IElDSF9SQ1MgfCBJQ0hfTUNJTlQgfCBJQ0hfUE9JTlQgfCBJQ0hfUElJTlQ7CisJaWYgKGNoaXAtPmRldmljZV90eXBlID09IERFVklDRV9ORk9SQ0UpCisJCXN0YXR1cyB8PSBJQ0hfTlZTUElOVDsKKwljbnQgPSBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSk7CisJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSksIGNudCAmIHN0YXR1cyk7CisKKwlpZiAoc25kX2ludGVsOHgwX2ljaF9jaGlwX2Nhbl9jb2xkX3Jlc2V0KGNoaXApKQorCQllcnIgPSBzbmRfaW50ZWw4eDBfaWNoX2NoaXBfY29sZF9yZXNldChjaGlwKTsKKwllbHNlCisJCWVyciA9IHNuZF9pbnRlbDh4MF9pY2hfY2hpcF9yZXNldChjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCWlmIChwcm9iaW5nKSB7CiAJCS8qIHdhaXQgZm9yIGFueSBjb2RlYyByZWFkeSBzdGF0dXMuCiAJCSAqIE9uY2UgaXQgYmVjb21lcyByZWFkeSBpdCBzaG91bGQgcmVtYWluIHJlYWR5CkBAIC0zMDU4LDkgKzMwOTcsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IHNob3J0bmFtZV90YWJsZSAqbmFtZTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChzcGRpZl9hY2xpbmsgPCAwKQogCQlzcGRpZl9hY2xpbmsgPSBjaGVja19kZWZhdWx0X3NwZGlmX2FjbGluayhwY2kpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDkzNDQ5ZTQuLjZlYzBmYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTQxMSw3ICs0MTEsMTAgQEAKIAkJCWJkYmFyW2lkeCArIDBdID0gY3B1X3RvX2xlMzIoaWNoZGV2LT5waHlzYnVmICsgKCgoaWR4ID4+IDEpICogaWNoZGV2LT5mcmFnc2l6ZSkgJSBpY2hkZXYtPnNpemUpKTsKIAkJCWJkYmFyW2lkeCArIDFdID0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCB8IC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCiAJCQkJCQkgICAgIGljaGRldi0+ZnJhZ3NpemUgPj4gY2hpcC0+cGNtX3Bvc19zaGlmdCk7Ci0JCQkvLyBwcmludGsoImJkYmFyWyVpXSA9IDB4JXggWzB4JXhdXG4iLCBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJiZGJhclslaV0gPSAweCV4IFsweCV4XVxuIiwKKwkJCSAgICAgICBpZHggKyAwLCBiZGJhcltpZHggKyAwXSwgYmRiYXJbaWR4ICsgMV0pOworCQkJKi8KIAkJfQogCQlpY2hkZXYtPmZyYWdzID0gaWNoZGV2LT5zaXplIC8gaWNoZGV2LT5mcmFnc2l6ZTsKIAl9CkBAIC00MjEsOCArNDI0LDEwIEBACiAJaWNoZGV2LT5sdmlfZnJhZyA9IElDSF9SRUdfTFZJX01BU0sgJSBpY2hkZXYtPmZyYWdzOwogCWljaGRldi0+cG9zaXRpb24gPSAwOwogI2lmIDAKLQlwcmludGsoImx2aV9mcmFnID0gJWksIGZyYWdzID0gJWksIHBlcmlvZF9zaXplID0gMHgleCwgcGVyaW9kX3NpemUxID0gMHgleFxuIiwKLQkJCWljaGRldi0+bHZpX2ZyYWcsIGljaGRldi0+ZnJhZ3MsIGljaGRldi0+ZnJhZ3NpemUsIGljaGRldi0+ZnJhZ3NpemUxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibHZpX2ZyYWcgPSAlaSwgZnJhZ3MgPSAlaSwgcGVyaW9kX3NpemUgPSAweCV4LCAiCisJICAgICAgICJwZXJpb2Rfc2l6ZTEgPSAweCV4XG4iLAorCSAgICAgICBpY2hkZXYtPmx2aV9mcmFnLCBpY2hkZXYtPmZyYWdzLCBpY2hkZXYtPmZyYWdzaXplLAorCSAgICAgICBpY2hkZXYtPmZyYWdzaXplMSk7CiAjZW5kaWYKIAkvKiBjbGVhciBpbnRlcnJ1cHRzICovCiAJaXB1dGJ5dGUoY2hpcCwgcG9ydCArIGljaGRldi0+cm9mZl9zciwgSUNIX0ZJRk9FIHwgSUNIX0JDSVMgfCBJQ0hfTFZCQ0kpOwpAQCAtNDY1LDcgKzQ3MCw4IEBACiAJCQkJCQkJICAgICBpY2hkZXYtPmx2aV9mcmFnICoKIAkJCQkJCQkgICAgIGljaGRldi0+ZnJhZ3NpemUxKTsKICNpZiAwCi0JCXByaW50aygibmV3OiBiZGJhclslaV0gPSAweCV4IFsweCV4XSwgcHJlZmV0Y2ggPSAlaSwgYWxsID0gMHgleCwgMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm5ldzogYmRiYXJbJWldID0gMHgleCBbMHgleF0sICIKKwkJICAgICAgICJwcmVmZXRjaCA9ICVpLCBhbGwgPSAweCV4LCAweCV4XG4iLAogCQkgICAgICAgaWNoZGV2LT5sdmkgKiAyLCBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMl0sCiAJCSAgICAgICBpY2hkZXYtPmJkYmFyW2ljaGRldi0+bHZpICogMiArIDFdLCBpbmIoSUNIX1JFR19PRkZfUElWICsgcG9ydCksCiAJCSAgICAgICBpbmwocG9ydCArIDQpLCBpbmIocG9ydCArIElDSF9SRUdfT0ZGX0NSKSk7CkBAIC0xMjY5LDkgKzEyNzUsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IHNob3J0bmFtZV90YWJsZSAqbmFtZTsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJJQ0gtTU9ERU0iKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSW50ZWwgSUNIIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDVmODAwNmIuLjhiNzk5NjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNDQzLDkgKzI0NDMsOSBAQAogCQlkZXYrKzsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogICAgICAgICBpZiAoKGVyciA9IHNuZF9rb3JnMTIxMl9jcmVhdGUoY2FyZCwgcGNpLCAma29yZzEyMTIpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNTliYmFmOC4uNzAxNDE1NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTI2OTEsOSArMjY5MSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdSTzoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IGJiMTYyNTAuLmMxZWI4NGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtMTM2NiwxMiArMTM2NiwxMiBAQAogCQllbHNlCiAJCQlpZHggPSBpbmRleFtkZXZdICsgaTsKIAkJc25wcmludGYodG1waWQsIHNpemVvZih0bXBpZCksICIlcy0lZCIsIGlkW2Rldl0gPyBpZFtkZXZdIDogIk1JWEFSVCIsIGkpOwotCQljYXJkID0gc25kX2NhcmRfbmV3KGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwKTsKKwkJZXJyID0gc25kX2NhcmRfY3JlYXRlKGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQkJaWYgKCEgY2FyZCkgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHRoZSBjYXJkICVkXG4iLCBpKTsKIAkJCXNuZF9taXhhcnRfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgQ0FSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCmluZGV4IDM3ODJiNTIuLjRjZjRjZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYwpAQCAtMzQ1LDggKzM0NSw4IEBACiAJc3RhdHVzX2RhdWdodCA9IHJlYWRsX2JlKCBNSVhBUlRfTUVNKCBtZ3IsTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQgKSk7CiAKIAkvKiBtb3RoZXJib2FyZCB4aWxpbnggc3RhdHVzIDUgd2lsbCBzYXkgdGhhdCB0aGUgYm9hcmQgaXMgcGVyZm9ybWluZyBhIHJlc2V0ICovCi0JaWYoIHN0YXR1c194aWxpbnggPT0gNSApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgIm1pWGFydCBpcyByZXNldHRpbmcgIVxuIik7CisJaWYgKHN0YXR1c194aWxpbnggPT0gNSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtaVhhcnQgaXMgcmVzZXR0aW5nICFcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluIGxhdGVyICovCiAJfQogCkBAIC0zNTQsMTMgKzM1NCwxNCBAQAogCWNhc2UgTUlYQVJUX01PVEhFUkJPQVJEX1hMWF9JTkRFWDoKIAogCQkvKiB4aWxpbnggYWxyZWFkeSBsb2FkZWQgPyAqLyAKLQkJaWYoIHN0YXR1c194aWxpbnggPT0gNCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fREVCVUcgInhpbGlueCBpcyBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKKwkJaWYgKHN0YXR1c194aWxpbnggPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJ4aWxpbnggaXMgYWxyZWFkeSBsb2FkZWQgIVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKiB0aGUgc3RhdHVzIHNob3VsZCBiZSAwID09ICJpZGxlIiAqLwotCQlpZiggc3RhdHVzX3hpbGlueCAhPSAwICkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgInhpbGlueCBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c194aWxpbngpOworCQlpZiAoc3RhdHVzX3hpbGlueCAhPSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgIHN0YXR1c194aWxpbngpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKQEAgLTM4OSwyMSArMzkwLDIzIEBACiAKIAljYXNlIE1JWEFSVF9NT1RIRVJCT0FSRF9FTEZfSU5ERVg6CiAKLQkJaWYoIHN0YXR1c19lbGYgPT0gNCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fREVCVUcgImVsZiBmaWxlIGFscmVhZHkgbG9hZGVkICFcbiIpOworCQlpZiAoc3RhdHVzX2VsZiA9PSA0KSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVsZiBmaWxlIGFscmVhZHkgbG9hZGVkICFcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQkvKiB0aGUgc3RhdHVzIHNob3VsZCBiZSAwID09ICJpZGxlIiAqLwotCQlpZiggc3RhdHVzX2VsZiAhPSAwICkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVsZiBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c19lbGYpOworCQlpZiAoc3RhdHVzX2VsZiAhPSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlbGYgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgIHN0YXR1c19lbGYpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKIAkJLyogd2FpdCBmb3IgeGlsaW54IHN0YXR1cyA9PSA0ICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfTVhMWF9TVEFUVVNfT0ZGU0VULCAxLCA0LCA1MDApOyAvKiA1c2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IHdhcyBub3QgbG9hZGVkIG9yIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInhpbGlueCB3YXMgbm90IGxvYWRlZCBvciAiCisJCQkJICAgImNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDI0LDcgKzQyNyw3IEBACiAJCS8qIHdhaXQgZm9yIGVsZiBzdGF0dXMgPT0gNCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0VMRl9TVEFUVVNfT0ZGU0VULCAxLCA0LCAzMDApOyAvKiAzc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZWxmIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVsZiBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQzNywxNSArNDQwLDE2IEBACiAJZGVmYXVsdDoKIAogCQkvKiBlbGYgYW5kIHhpbGlueCBzaG91bGQgYmUgbG9hZGVkICovCi0JCWlmKCAoc3RhdHVzX2VsZiAhPSA0KSB8fCAoc3RhdHVzX3hpbGlueCAhPSA0KSApIHsKLQkJCXByaW50ayggS0VSTl9FUlIgInhpbGlueCBvciBlbGYgbm90IHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOworCQlpZiAoc3RhdHVzX2VsZiAhPSA0IHx8IHN0YXR1c194aWxpbnggIT0gNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggb3IgZWxmIG5vdCAiCisJCQkgICAgICAgInN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKIAkJLyogd2FpdCBmb3IgZGF1Z2h0ZXIgZGV0ZWN0aW9uICE9IDAgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EQlJEX1BSRVNFTkNFX09GRlNFVCwgMCwgMCwgMzApOyAvKiAzMDBtc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZXJyb3Igc3RhcnRpbmcgZWxmIGZpbGVcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3Igc3RhcnRpbmcgZWxmIGZpbGVcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00NjAsOCArNDY0LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCS8qIGRhdWdodGVyIHNob3VsZCBiZSBpZGxlICovCi0JCWlmKCBzdGF0dXNfZGF1Z2h0ICE9IDAgKSB7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c19kYXVnaHQpOworCQlpZiAoc3RhdHVzX2RhdWdodCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImRhdWdodGVyIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCSAgICAgICBzdGF0dXNfZGF1Z2h0KTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogIApAQCAtNDgwLDcgKzQ4NSw3IEBACiAJCS8qIHdhaXQgZm9yIHN0YXR1cyA9PSAyICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VULCAxLCAyLCAzMCk7IC8qIDMwMG1zZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBsb2FkIGVycm9yXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGxvYWQgZXJyb3JcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC01MDIsNyArNTA3LDggQEAKICAgICAgICAgLyogd2FpdCBmb3IgZGF1Z2h0ZXIgc3RhdHVzID09IDMgKi8KICAgICAgICAgZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQsIDEsIDMsIDMwMCk7IC8qIDNzZWMgKi8KICAgICAgICAgaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGNvdWxkIG5vdCBiZSBpbml0aWFsaXNlZFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJkYXVnaHRlciBib2FyZCBjb3VsZCBub3QgYmUgaW5pdGlhbGlzZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTEyLDcgKzUxOCw3IEBACiAJLyogZmlyc3QgY29tbXVuaWNhdGlvbiB3aXRoIGVtYmVkZGVkICovCiAJZXJyID0gbWl4YXJ0X2ZpcnN0X2luaXQobWdyKTsKICAgICAgICAgaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgIm1pWGFydCBjb3VsZCBub3QgYmUgc2V0IHVwXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibWlYYXJ0IGNvdWxkIG5vdCBiZSBzZXQgdXBcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTgxLDE2ICs1ODcsNiBAQAogLyogbWlYYXJ0IGh3ZGVwIGludGVyZmFjZSBpZCBzdHJpbmcgKi8KICNkZWZpbmUgU05EX01JWEFSVF9IV0RFUF9JRCAgICAgICAibWlYYXJ0IExvYWRlciIKIAotc3RhdGljIGludCBtaXhhcnRfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1peGFydF9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJCSAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTY0Myw4ICs2MzksNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfTUlYQVJUOwogCWh3LT5wcml2YXRlX2RhdGEgPSBtZ3I7Ci0JaHctPm9wcy5vcGVuID0gbWl4YXJ0X2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gbWl4YXJ0X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gbWl4YXJ0X2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IG1peGFydF9od2RlcF9kc3BfbG9hZDsKIAlody0+ZXhjbHVzaXZlID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggNTBjOWY4YS4uNTIyYTA0MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTE2NjgsOSArMTY2OCw5IEBACiAJCX0KIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU86CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwppbmRleCAxYWI4MzNmLi44NGVmMTMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoaWZpZXJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTApIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzExKSB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhpZmllcl9pZHMpOwpAQCAtMTUxLDcgKzE1Miw2IEBACiAJLnNob3J0bmFtZSA9ICJDLU1lZGlhIENNSTg3ODciLAogCS5sb25nbmFtZSA9ICJDLU1lZGlhIE94eWdlbiBIRCBBdWRpbyIsCiAJLmNoaXAgPSAiQ01JODc4OCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmluaXQgPSBoaWZpZXJfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSBoaWZpZXJfY29udHJvbF9maWx0ZXIsCiAJLmNsZWFudXAgPSBoaWZpZXJfY2xlYW51cCwKQEAgLTE3Myw2ICsxNzMsMTMgQEAKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF9oaWZpZXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJY2hpcC0+bW9kZWwgPSBtb2RlbF9oaWZpZXI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhpZmllcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKQEAgLTE4NSw3ICsxOTIsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCAmbW9kZWxfaGlmaWVyLCAwKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgaGlmaWVyX2lkcywgZ2V0X2hpZmllcl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKaW5kZXggZGU5OTljNi4uNzJkYjRjMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEMtTWVkaWEgQ01JODc4OCBkcml2ZXIgZm9yIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduIGFuZCBmb3IgdGhlIFgtTWVyaWRpYW4KKyAqIEMtTWVkaWEgQ01JODc4OCBkcml2ZXIgZm9yIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduIGFuZCBzaW1pbGFyIG1vZGVscwogICoKICAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiAgKgpAQCAtMjYsNiArMjYsNyBAQAogICoKICAqIEdQSU8gMCAtPiBERlMwIG9mIEFLNTM4NQogICogR1BJTyAxIC0+IERGUzEgb2YgQUs1Mzg1CisgKiBHUElPIDggLT4gZW5hYmxlIGhlYWRwaG9uZSBhbXBsaWZpZXIgb24gSFQtT21lZ2EgbW9kZWxzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02MSw3ICs2Miw4IEBACiBlbnVtIHsKIAlNT0RFTF9DTUVESUFfUkVGLAkvKiBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiAqLwogCU1PREVMX01FUklESUFOLAkJLyogQXV6ZW5UZWNoIFgtTWVyaWRpYW4gKi8KLQlNT0RFTF9IQUxPLAkJLyogSFQtT21lZ2EgQ2xhcm8gaGFsbyAqLworCU1PREVMX0NMQVJPLAkJLyogSFQtT21lZ2EgQ2xhcm8gKi8KKwlNT0RFTF9DTEFST19IQUxPLAkvKiBIVC1PbWVnYSBDbGFybyBoYWxvICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3h5Z2VuX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC03NCw4ICs3Niw4IEBACiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTQ3YSwgMHhhMDE3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDFhNTgsIDB4MDkxMCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg0MTVhLCAweDU0MzEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9NRVJJRElBTiB9LAotCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc2MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKLQl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9IQUxPIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzYxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ0xBUk8gfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFST19IQUxPIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG94eWdlbl9pZHMpOwpAQCAtODYsNiArODgsOCBAQAogI2RlZmluZSBHUElPX0FLNTM4NV9ERlNfRE9VQkxFCTB4MDAwMQogI2RlZmluZSBHUElPX0FLNTM4NV9ERlNfUVVBRAkweDAwMDIKIAorI2RlZmluZSBHUElPX0NMQVJPX0hQCQkweDAxMDAKKwogc3RydWN0IGdlbmVyaWNfZGF0YSB7CiAJdTggYWs0Mzk2X2N0bDI7CiAJdTE2IHNhdmVkX3dtODc4NV9yZWdpc3RlcnNbMl07CkBAIC0xOTYsMTAgKzIwMCw0NiBAQAogCWFrNTM4NV9pbml0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCBjbGFyb19lbmFibGVfaHAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwltc2xlZXAoMzAwKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLCBHUElPX0NMQVJPX0hQKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0NMQVJPX0hQKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9pbml0KGNoaXApOworCXdtODc4NV9pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9faGFsb19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X2luaXQoY2hpcCk7CisJYWs1Mzg1X2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fZGlzYWJsZV9ocChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19DTEFST19IUCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwljbGFyb19kaXNhYmxlX2hwKGNoaXApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJY2xhcm9fZGlzYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgZ2VuZXJpY19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CkBAIC0yMTEsNiArMjUxLDEyIEBACiAJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCBjbGFyb19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBzZXRfYWs0Mzk2X3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC0yOTMsMzAgKzMzOSwxMCBAQAogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGFrNDM5Nl9kYl9zY2FsZSwgVExWX0RCX0dBSU5fTVVURSwgMCk7CiAKLXN0YXRpYyBpbnQgZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQotewotCWlmIChkcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTikgewotCQljaGlwLT5tb2RlbC5pbml0ID0gbWVyaWRpYW5faW5pdDsKLQkJY2hpcC0+bW9kZWwucmVzdW1lID0gbWVyaWRpYW5fcmVzdW1lOwotCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOwotCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAotCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRiB8Ci0JCQkJCSAgICBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8Ci0JCQkJCSAgICBDQVBUVVJFXzFfRlJPTV9TUERJRjsKLQl9Ci0JaWYgKGRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOIHx8IGRyaXZlcl9kYXRhID09IE1PREVMX0hBTE8pIHsKLQkJY2hpcC0+bW9kZWwubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREk7Ci0JCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gTUlESV9PVVRQVVQgfCBNSURJX0lOUFVUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfZ2VuZXJpYyA9IHsKIAkuc2hvcnRuYW1lID0gIkMtTWVkaWEgQ01JODc4OCIsCiAJLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlvIiwKIAkuY2hpcCA9ICJDTUk4Nzg4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSBnZW5lcmljX3Byb2JlLAogCS5pbml0ID0gZ2VuZXJpY19pbml0LAogCS5jbGVhbnVwID0gZ2VuZXJpY19jbGVhbnVwLAogCS5yZXN1bWUgPSBnZW5lcmljX3Jlc3VtZSwKQEAgLTM0MSw2ICszNjcsNDIgQEAKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF9veHlnZW5fbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJY2hpcC0+bW9kZWwgPSBtb2RlbF9nZW5lcmljOworCXN3aXRjaCAoaWQtPmRyaXZlcl9kYXRhKSB7CisJY2FzZSBNT0RFTF9NRVJJRElBTjoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IG1lcmlkaWFuX2luaXQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IG1lcmlkaWFuX3Jlc3VtZTsKKwkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCQkJICAgIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJCQkgICAgQ0FQVFVSRV8wX0ZST01fSTJTXzIgfAorCQkJCQkgICAgQ0FQVFVSRV8xX0ZST01fU1BESUY7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfQ0xBUk86CisJCWNoaXAtPm1vZGVsLmluaXQgPSBjbGFyb19pbml0OworCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKKwkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9DTEFST19IQUxPOgorCQljaGlwLT5tb2RlbC5pbml0ID0gY2xhcm9faGFsb19pbml0OworCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKKwkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKKwkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJYnJlYWs7CisJfQorCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4gfHwKKwkgICAgaWQtPmRyaXZlcl9kYXRhID09IE1PREVMX0NMQVJPX0hBTE8pIHsKKwkJY2hpcC0+bW9kZWwubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREk7CisJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gTUlESV9PVVRQVVQgfCBNSURJX0lOUFVUOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19veHlnZW5fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewpAQCAtMzUzLDggKzQxNSw4IEBACiAJCSsrZGV2OwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sCi0JCQkgICAgICAgJm1vZGVsX2dlbmVyaWMsIHBjaV9pZC0+ZHJpdmVyX2RhdGEpOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBveHlnZW5faWRzLCBnZXRfb3h5Z2VuX21vZGVsKTsKIAlpZiAoZXJyID49IDApCiAJCSsrZGV2OwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAppbmRleCAxOTEwN2M2Li5iZDYxNWRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKQEAgLTE4LDYgKzE4LDggQEAKIAogI2RlZmluZSBPWFlHRU5fSU9fU0laRQkweDEwMAogCisjZGVmaW5lIE9YWUdFTl9FRVBST01fSUQJMHg0MzRkCS8qICJDTSIgKi8KKwogLyogbW9kZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiBvdXRwdXRzL2lucHV0cyAqLwogI2RlZmluZSBQTEFZQkFDS18wX1RPX0kyUwkweDAwMDEKICAgICAgLyogUExBWUJBQ0tfMF9UT19BQzk3XzAJCW5vdCBpbXBsZW1lbnRlZCAqLwpAQCAtNDksNyArNTEsMTMgQEAKIAkuc3VidmVuZG9yID0gc3YsIFwKIAkuc3ViZGV2aWNlID0gc2QKIAorI2RlZmluZSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBICgodW5zaWduZWQgbG9uZyktMSkKKyNkZWZpbmUgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIFwKKwlPWFlHRU5fUENJX1NVQklEKFBDSV9WRU5ET1JfSURfQ01FRElBLCAweDg3ODgpLCBcCisJLmRyaXZlcl9kYXRhID0gQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQQorCiBzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBwY2lfZGV2aWNlX2lkOwogc3RydWN0IHNuZF9jYXJkOwogc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtOwogc3RydWN0IHNuZF9wY21faGFyZHdhcmU7CkBAIC02Miw4ICs3MCw2IEBACiAJY29uc3QgY2hhciAqc2hvcnRuYW1lOwogCWNvbnN0IGNoYXIgKmxvbmduYW1lOwogCWNvbnN0IGNoYXIgKmNoaXA7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JaW50ICgqcHJvYmUpKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpOwogCXZvaWQgKCppbml0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAlpbnQgKCpjb250cm9sX2ZpbHRlcikoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKTsKIAlpbnQgKCptaXhlcl9pbml0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKQEAgLTgzLDYgKzg5LDcgQEAKIAl2b2lkICgqYWM5N19zd2l0Y2gpKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IG11dGUpOwogCWNvbnN0IHVuc2lnbmVkIGludCAqZGFjX3RsdjsKKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfZGF0YTsKIAlzaXplX3QgbW9kZWxfZGF0YV9zaXplOwogCXVuc2lnbmVkIGludCBkZXZpY2VfY29uZmlnOwogCXU4IGRhY19jaGFubmVsczsKQEAgLTEzNCw4ICsxNDEsMTIgQEAKIC8qIG94eWdlbl9saWIuYyAqLwogCiBpbnQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkgICAgIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpOworCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCisJCSAgICAgaW50ICgqZ2V0X21vZGVsKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZAorCQkJCSAgICAgKQorCQkgICAgKTsKIHZvaWQgb3h5Z2VuX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSk7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgb3h5Z2VuX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CkBAIC0xODAsNiArMTkxLDkgQEAKIHZvaWQgb3h5Z2VuX3Jlc2V0X3VhcnQoc3RydWN0IG94eWdlbiAqY2hpcCk7CiB2b2lkIG94eWdlbl93cml0ZV91YXJ0KHN0cnVjdCBveHlnZW4gKmNoaXAsIHU4IGRhdGEpOwogCit1MTYgb3h5Z2VuX3JlYWRfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCk7Cit2b2lkIG94eWdlbl93cml0ZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdmFsdWUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgb3h5Z2VuX3NldF9iaXRzOChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCmluZGV4IDMxMjZjNGIuLmMxZWI5MjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwpAQCAtMjU0LDMgKzI1NCwzNCBAQAogCV93cml0ZV91YXJ0KGNoaXAsIDAsIGRhdGEpOwogfQogRVhQT1JUX1NZTUJPTChveHlnZW5fd3JpdGVfdWFydCk7CisKK3UxNiBveHlnZW5fcmVhZF9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJb3h5Z2VuX3dyaXRlOChjaGlwLCBPWFlHRU5fRUVQUk9NX0NPTlRST0wsCisJCSAgICAgIGluZGV4IHwgT1hZR0VOX0VFUFJPTV9ESVJfUkVBRCk7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMDsgKyt0aW1lb3V0KSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKCEob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9FRVBST01fU1RBVFVTKQorCQkgICAgICAmIE9YWUdFTl9FRVBST01fQlVTWSkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0VFUFJPTV9EQVRBKTsKK30KKwordm9pZCBveHlnZW5fd3JpdGVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHZhbHVlKQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0VFUFJPTV9EQVRBLCB2YWx1ZSk7CisJb3h5Z2VuX3dyaXRlOChjaGlwLCBPWFlHRU5fRUVQUk9NX0NPTlRST0wsCisJCSAgICAgIGluZGV4IHwgT1hZR0VOX0VFUFJPTV9ESVJfV1JJVEUpOworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDsgKyt0aW1lb3V0KSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCEob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9FRVBST01fU1RBVFVTKQorCQkgICAgICAmIE9YWUdFTl9FRVBST01fQlVTWSkpCisJCQlyZXR1cm47CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgIkVFUFJPTSB3cml0ZSB0aW1lb3V0XG4iKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKaW5kZXggODRmNDgxZC4uMzEyMjUxZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKQEAgLTM0LDYgKzM0LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQy1NZWRpYSBDTUk4Nzg4IGhlbHBlciBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiAKKyNkZWZpbmUgRFJJVkVSICJveHlnZW4iCiAKIHN0YXRpYyBpbmxpbmUgaW50IG94eWdlbl91YXJ0X2lucHV0X3JlYWR5KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CkBAIC0yNDMsNiArMjQ0LDYyIEBACiAjZGVmaW5lIG94eWdlbl9wcm9jX2luaXQoY2hpcCkKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKgorb3h5Z2VuX3NlYXJjaF9wY2lfaWQoc3RydWN0IG94eWdlbiAqY2hpcCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWRzW10pCit7CisJdTE2IHN1YmRldmljZTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBFRVBST00gcGlucyBhcmUgYXZhaWxhYmxlLCBpLmUuLCBub3QgdXNlZCBmb3IgU1BJLgorCSAqIChUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgd2UgaW5pdGlhbGl6ZSBvciB1c2UgU1BJLikKKwkgKi8KKwlveHlnZW5fY2xlYXJfYml0czgoY2hpcCwgT1hZR0VOX0ZVTkNUSU9OLAorCQkJICAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81KTsKKwkvKgorCSAqIFJlYWQgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQgZGlyZWN0bHkgZnJvbSB0aGUgRUVQUk9NLCBiZWNhdXNlIHRoZQorCSAqIGNoaXAgZGlkbid0IGlmIHRoZSBmaXJzdCBFRVBST00gd29yZCB3YXMgb3ZlcndyaXR0ZW4uCisJICovCisJc3ViZGV2aWNlID0gb3h5Z2VuX3JlYWRfZWVwcm9tKGNoaXAsIDIpOworCS8qCisJICogV2UgdXNlIG9ubHkgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQgZm9yIHNlYXJjaGluZyBiZWNhdXNlIGl0IGlzCisJICogdW5pcXVlIGV2ZW4gd2l0aG91dCB0aGUgc3Vic3lzdGVtIHZlbmRvciBJRCwgd2hpY2ggbWF5IGhhdmUgYmVlbgorCSAqIG92ZXJ3cml0dGVuIGluIHRoZSBFRVBST00uCisJICovCisJZm9yICg7IGlkcy0+dmVuZG9yOyArK2lkcykKKwkJaWYgKGlkcy0+c3ViZGV2aWNlID09IHN1YmRldmljZSAmJgorCQkgICAgaWRzLT5kcml2ZXJfZGF0YSAhPSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBKQorCQkJcmV0dXJuIGlkczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgb3h5Z2VuX3Jlc3RvcmVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaWYgKG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAwKSAhPSBPWFlHRU5fRUVQUk9NX0lEKSB7CisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgb25seSB3aGVuIGEga25vd24gY2FyZCBtb2RlbCBoYXMKKwkJICogYmVlbiBkZXRlY3RlZCwgaS5lLiwgd2Uga25vdyB0aGVyZSBpcyBhIHZhbGlkIHN1YnN5c3RlbQorCQkgKiBwcm9kdWN0IElEIGF0IGluZGV4IDIgaW4gdGhlIEVFUFJPTS4gIFRoZXJlZm9yZSwgd2UgaGF2ZQorCQkgKiBiZWVuIGFibGUgdG8gZGVkdWNlIHRoZSBjb3JyZWN0IHN1YnN5c3RlbSB2ZW5kb3IgSUQsIGFuZAorCQkgKiB0aGlzIGlzIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBFRVBST00KKwkJICogY29udGVudHMuCisJCSAqLworCQlveHlnZW5fd3JpdGVfZWVwcm9tKGNoaXAsIDEsIGlkLT5zdWJ2ZW5kb3IpOworCQlveHlnZW5fd3JpdGVfZWVwcm9tKGNoaXAsIDAsIE9YWUdFTl9FRVBST01fSUQpOworCisJCW94eWdlbl9zZXRfYml0czgoY2hpcCwgT1hZR0VOX01JU0MsCisJCQkJIE9YWUdFTl9NSVNDX1dSSVRFX1BDSV9TVUJJRCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAorCQkJCSAgICAgIGlkLT5zdWJ2ZW5kb3IpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfU1VCU1lTVEVNX0lELAorCQkJCSAgICAgIGlkLT5zdWJkZXZpY2UpOworCQlveHlnZW5fY2xlYXJfYml0czgoY2hpcCwgT1hZR0VOX01JU0MsCisJCQkJICAgT1hZR0VOX01JU0NfV1JJVEVfUENJX1NVQklEKTsKKworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRUVQUk9NIElEIHJlc3RvcmVkXG4iKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG94eWdlbl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00NDYsMzAgKzUwMywzMyBAQAogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJY2hpcC0+bW9kZWwuY2xlYW51cChjaGlwKTsKKwlrZnJlZShjaGlwLT5tb2RlbF9kYXRhKTsKIAltdXRleF9kZXN0cm95KCZjaGlwLT5tdXRleCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwogfQogCiBpbnQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkgICAgIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCisJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywKKwkJICAgICBpbnQgKCpnZXRfbW9kZWwpKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkCisJCQkJICAgICApCisJCSAgICApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBveHlnZW4gKmNoaXA7CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIG1vZGVsLT5vd25lciwKLQkJCSAgICBzaXplb2YgKmNoaXAgKyBtb2RlbC0+bW9kZWxfZGF0YV9zaXplKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIG93bmVyLCBzaXplb2YoKmNoaXApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5pcnEgPSAtMTsKLQljaGlwLT5tb2RlbCA9ICptb2RlbDsKLQljaGlwLT5tb2RlbF9kYXRhID0gY2hpcCArIDE7CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKIAltdXRleF9pbml0KCZjaGlwLT5tdXRleCk7CiAJSU5JVF9XT1JLKCZjaGlwLT5zcGRpZl9pbnB1dF9iaXRzX3dvcmssCkBAIC00ODEsNyArNTQxLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfY2FyZDsKIAotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCBtb2RlbC0+Y2hpcCk7CisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIERSSVZFUik7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHJlc2VydmUgUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX3BjaV9lbmFibGU7CkBAIC00OTUsMjAgKzU1NSwzNCBAQAogCX0KIAljaGlwLT5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKKwlwY2lfaWQgPSBveHlnZW5fc2VhcmNoX3BjaV9pZChjaGlwLCBpZHMpOworCWlmICghcGNpX2lkKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCX0KKwlveHlnZW5fcmVzdG9yZV9lZXByb20oY2hpcCwgcGNpX2lkKTsKKwllcnIgPSBnZXRfbW9kZWwoY2hpcCwgcGNpX2lkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisKKwlpZiAoY2hpcC0+bW9kZWwubW9kZWxfZGF0YV9zaXplKSB7CisJCWNoaXAtPm1vZGVsX2RhdGEgPSBremFsbG9jKGNoaXAtPm1vZGVsLm1vZGVsX2RhdGFfc2l6ZSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpcC0+bW9kZWxfZGF0YSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCQl9CisJfQorCiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gb3h5Z2VuX2NhcmRfZnJlZTsKIAotCWlmIChjaGlwLT5tb2RlbC5wcm9iZSkgewotCQllcnIgPSBjaGlwLT5tb2RlbC5wcm9iZShjaGlwLCBkcml2ZXJfZGF0YSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJfY2FyZDsKLQl9CiAJb3h5Z2VuX2luaXQoY2hpcCk7CiAJY2hpcC0+bW9kZWwuaW5pdChjaGlwKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBveHlnZW5faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgY2hpcC0+bW9kZWwuY2hpcCwgY2hpcCk7CisJCQkgIERSSVZFUiwgY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaW50ZXJydXB0ICVkXG4iLCBwY2ktPmlycSk7CiAJCWdvdG8gZXJyX2NhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKaW5kZXggNmM4NzBjMS4uYmM1Y2UxMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwpAQCAtMTEyLDYgKzExMiwzNCBAQAogICogQ1M0MzYyQTogQUQwIDwtIDAKICAqLwogCisvKgorICogWG9uYXIgRXNzZW5jZSBTVFgKKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ01JODc4ODoKKyAqCisgKiBJwrJDIDwtPiBQQ00xNzkyQQorICoKKyAqIEdQSSAwIDwtIGV4dGVybmFsIHBvd2VyIHByZXNlbnQKKyAqCisgKiBHUElPIDAgLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICogR1BJTyAxIC0+IHJvdXRlIEhQIHRvIGZyb250IHBhbmVsICgwKSBvciByZWFyIGphY2sgKDEpCisgKiBHUElPIDIgLT4gTTAgb2YgQ1M1MzgxCisgKiBHUElPIDMgLT4gTTEgb2YgQ1M1MzgxCisgKiBHUElPIDcgLT4gcm91dGUgb3V0cHV0IHRvIHNwZWFrZXIgamFja3MgKDApIG9yIEhQICgxKQorICogR1BJTyA4IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbGluZS1pbiAoMCkgb3IgbWljLWluICgxKQorICoKKyAqIFBDTTE3OTJBOgorICoKKyAqIEFEMCA8LSAwCisgKgorICogSDYgZGF1Z2h0ZXJib2FyZAorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEdQSU8gNCA8LSAwCisgKiBHUElPIDUgPC0gMAorICovCisKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0xNTIsNiArMTgwLDcgQEAKIAlNT0RFTF9EWCwKIAlNT0RFTF9IREFWLAkvKiB3aXRob3V0IGRhdWdodGVyYm9hcmQgKi8KIAlNT0RFTF9IREFWX0g2LAkvKiB3aXRoIEg2IGRhdWdodGVyYm9hcmQgKi8KKwlNT0RFTF9TVFgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeG9uYXJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKQEAgLTE2MCw2ICsxODksOCBAQAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0QyWCB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODMxNCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0hEQVYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9EMSB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1YyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX1NUWCB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHhvbmFyX2lkcyk7CkBAIC0xODMsMTIgKzIxNCwxNCBAQAogI2RlZmluZSBHUElPX0hEQVZfREJfSDYJCTB4MDAwMAogI2RlZmluZSBHUElPX0hEQVZfREJfWFgJCTB4MDAyMAogCisjZGVmaW5lIEdQSU9fU1RfSFBfUkVBUgkJMHgwMDAyCisjZGVmaW5lIEdQSU9fU1RfSFAJCTB4MDA4MAorCiAjZGVmaW5lIEkyQ19ERVZJQ0VfUENNMTc5NihpKQkoMHg5OCArICgoaSkgPDwgMSkpCS8qIDEwMDExLCBBRHg9aSwgL1c9MCAqLwogI2RlZmluZSBJMkNfREVWSUNFX0NTNDM5OAkweDllCS8qIDEwMDExLCBBRDE9MSwgQUQwPTEsIC9XPTAgKi8KICNkZWZpbmUgSTJDX0RFVklDRV9DUzQzNjJBCTB4MzAJLyogMDAxMTAwLCBBRDA9MCwgL1c9MCAqLwogCiBzdHJ1Y3QgeG9uYXJfZGF0YSB7Ci0JdW5zaWduZWQgaW50IG1vZGVsOwogCXVuc2lnbmVkIGludCBhbnRpX3BvcF9kZWxheTsKIAl1bnNpZ25lZCBpbnQgZGFjczsKIAl1MTYgb3V0cHV0X2VuYWJsZV9iaXQ7CkBAIC0zMzQsMTUgKzM2Nyw5IEBACiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwogCiAJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAzMDA7CisJZGF0YS0+ZGFjcyA9IDQ7CiAJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0QyX09VVFBVVF9FTkFCTEU7CiAJZGF0YS0+cGNtMTc5Nl9vdmVyc2FtcGxpbmcgPSBQQ00xNzk2X09TXzY0OwotCWlmIChkYXRhLT5tb2RlbCA9PSBNT0RFTF9EMlgpIHsKLQkJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElPX0RBVEE7Ci0JCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0s7Ci0JCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElPX0QyWF9FWFRfUE9XRVI7Ci0JCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKLQkJCQkgICAgR1BJT19EMlhfRVhUX1BPV0VSKTsKLQl9CiAKIAlwY20xNzk2X2luaXQoY2hpcCk7CiAKQEAgLTM1NSw2ICszODIsMTggQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX2QyeF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElPX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJT19JTlRFUlJVUFRfTUFTSzsKKwlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJT19EMlhfRVhUX1BPV0VSOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EMlhfRVhUX1BPV0VSKTsKKworCXhvbmFyX2QyX2luaXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jczQzNjJhX3ZvbHVtZXMoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl1OCBtdXRlOwpAQCAtNDIyLDExICs0NjEsNiBAQAogCWRhdGEtPmNzNDM5OF9mbSA9IENTNDM5OF9GTV9TSU5HTEUgfCBDUzQzOThfREVNX05PTkUgfCBDUzQzOThfRElGX0xKVVNUOwogCWRhdGEtPmNzNDM2MmFfZm0gPSBDUzQzNjJBX0ZNX1NJTkdMRSB8CiAJCUNTNDM2MkFfQVRBUElfQl9SIHwgQ1M0MzYyQV9BVEFQSV9BX0w7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0RYKSB7Ci0JCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7Ci0JCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7Ci0JfQogCiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCiAJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfApAQCAtNDQ3LDYgKzQ4MSwxNyBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzNjEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfZHhfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOworCisJeG9uYXJfZDFfaW5pdChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwpAQCAtNDU4LDYgKzUwMyw3IEBACiAJCSAgICAgICBPWFlHRU5fMldJUkVfU1BFRURfRkFTVCk7CiAKIAlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDEwMDsKKwlkYXRhLT5kYWNzID0gY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID09IE1PREVMX0hEQVZfSDYgPyA0IDogMTsKIAlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRFhfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSV9EQVRBOwogCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKQEAgLTQ4NCw2ICs1MzAsMzYgQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0eF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCisJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfAorCQkgICAgICAgT1hZR0VOXzJXSVJFX0lOVEVSUlVQVF9NQVNLIHwKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKKworCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMTAwOworCWRhdGEtPmRhY3MgPSAxOworCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EWF9PVVRQVVRfRU5BQkxFOworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOworCWRhdGEtPnBjbTE3OTZfb3ZlcnNhbXBsaW5nID0gUENNMTc5Nl9PU182NDsKKworCXBjbTE3OTZfaW5pdChjaGlwKTsKKworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCisJCQkgIEdQSU9fRFhfSU5QVVRfUk9VVEUgfCBHUElPX1NUX0hQX1JFQVIgfCBHUElPX1NUX0hQKTsKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkgICAgR1BJT19EWF9JTlBVVF9ST1VURSB8IEdQSU9fU1RfSFBfUkVBUiB8IEdQSU9fU1RfSFApOworCisJeG9uYXJfY29tbW9uX2luaXQoY2hpcCk7CisKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiUENNMTc5MkEiKTsKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2Rpc2FibGVfb3V0cHV0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwpAQCAtNTExLDYgKzU4NywxMSBAQAogCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZGlzYWJsZV9vdXRwdXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2QyX3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl4b25hcl9kMl9jbGVhbnVwKGNoaXApOwpAQCAtNTI3LDYgKzYwOCwxMSBAQAogCW1zbGVlcCgyKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3Rfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX3N0X2NsZWFudXAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2QyX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXBjbTE3OTZfaW5pdChjaGlwKTsKQEAgLTU1NCw2ICs2NDAsMTIgQEAKIAl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlwY20xNzk2X2luaXQoY2hpcCk7CisJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9wY21faGFyZHdhcmVfZmlsdGVyKHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqaGFyZHdhcmUpCiB7CkBAIC03MzMsNiArODI1LDcyIEBACiAJLnByaXZhdGVfdmFsdWUgPSBHUElPX0RYX0ZST05UX1BBTkVMLAogfTsKIAorc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiU3BlYWtlcnMiLCAiSGVhZHBob25lcyIsICJGUCBIZWFkcGhvbmVzIgorCX07CisKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwl1MTYgZ3BpbzsKKworCWdwaW8gPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCWlmICghKGdwaW8gJiBHUElPX1NUX0hQKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoZ3BpbyAmIEdQSU9fU1RfSFBfUkVBUikKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7CisJZWxzZQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTE2IGdwaW9fb2xkLCBncGlvOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWdwaW9fb2xkID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlncGlvID0gZ3Bpb19vbGQ7CisJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJY2FzZSAwOgorCQlncGlvICY9IH4oR1BJT19TVF9IUCB8IEdQSU9fU1RfSFBfUkVBUik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZ3BpbyB8PSBHUElPX1NUX0hQIHwgR1BJT19TVF9IUF9SRUFSOworCQlicmVhazsKKwljYXNlIDI6CisJCWdwaW8gPSAoZ3BpbyB8IEdQSU9fU1RfSFApICYgfkdQSU9fU1RfSFBfUkVBUjsKKwkJYnJlYWs7CisJfQorCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIGdwaW8pOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBncGlvICE9IGdwaW9fb2xkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3Rfb3V0cHV0X3N3aXRjaCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJBbmFsb2cgT3V0cHV0IiwKKwkuaW5mbyA9IHN0X291dHB1dF9zd2l0Y2hfaW5mbywKKwkuZ2V0ID0gc3Rfb3V0cHV0X3N3aXRjaF9nZXQsCisJLnB1dCA9IHN0X291dHB1dF9zd2l0Y2hfcHV0LAorfTsKKwogc3RhdGljIHZvaWQgeG9uYXJfbGluZV9taWNfYWM5N19zd2l0Y2goc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IG11dGUpCiB7CkBAIC03NDUsOCArOTAzLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20xNzk2X2RiX3NjYWxlLCAtMTIwMDAsIDUwLCAwKTsKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQzNjJhX2RiX3NjYWxlLCAtMTI3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGNtMTc5Nl9kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQzNjJhX2RiX3NjYWxlLCAtNjAwMCwgMTAwLCAwKTsKIAogc3RhdGljIGludCB4b25hcl9kMl9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCiB7CkBAIC03NjMsNiArOTIxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgeG9uYXJfc3RfY29udHJvbF9maWx0ZXIoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKQoreworCWlmICghc3RybmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIkNEIENhcHR1cmUgIiwgMTEpKQorCQlyZXR1cm4gMTsgLyogbm8gQ0QgaW5wdXQgKi8KKwlpZiAoIXN0cmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIlN0ZXJlbyBVcG1peGluZyIpKQorCQlyZXR1cm4gMTsgLyogc3RlcmVvIG9ubHkgLSB3ZSBkb24ndCBuZWVkIHVwbWl4aW5nICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgeG9uYXJfZDJfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJmFsdF9zd2l0Y2gsIGNoaXApKTsKQEAgLTc3Myw1MSArOTQwLDE0IEBACiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmZnJvbnRfcGFuZWxfc3dpdGNoLCBjaGlwKSk7CiB9CiAKLXN0YXRpYyBpbnQgeG9uYXJfbW9kZWxfcHJvYmUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKK3N0YXRpYyBpbnQgeG9uYXJfc3RfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0gewotCQlbTU9ERUxfRDFdCT0gIlhvbmFyIEQxIiwKLQkJW01PREVMX0RYXQk9ICJYb25hciBEWCIsCi0JCVtNT0RFTF9EMl0JPSAiWG9uYXIgRDIiLAotCQlbTU9ERUxfRDJYXQk9ICJYb25hciBEMlgiLAotCQlbTU9ERUxfSERBVl0JPSAiWG9uYXIgSERBVjEuMyIsCi0JCVtNT0RFTF9IREFWX0g2XQk9ICJYb25hciBIREFWMS4zK0g2IiwKLQl9OwotCXN0YXRpYyBjb25zdCB1OCBkYWNzW10gPSB7Ci0JCVtNT0RFTF9EMV0JPSAyLAotCQlbTU9ERUxfRFhdCT0gMiwKLQkJW01PREVMX0QyXQk9IDQsCi0JCVtNT0RFTF9EMlhdCT0gNCwKLQkJW01PREVMX0hEQVZdCT0gMSwKLQkJW01PREVMX0hEQVZfSDZdCT0gNCwKLQl9OwotCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCWRhdGEtPm1vZGVsID0gZHJpdmVyX2RhdGE7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0hEQVYpIHsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7Ci0JCXN3aXRjaCAob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmCi0JCQlHUElPX0hEQVZfREJfTUFTSykgewotCQljYXNlIEdQSU9fSERBVl9EQl9INjoKLQkJCWRhdGEtPm1vZGVsID0gTU9ERUxfSERBVl9INjsKLQkJCWJyZWFrOwotCQljYXNlIEdQSU9fSERBVl9EQl9YWDoKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gZGF1Z2h0ZXJib2FyZFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQotCWRhdGEtPmRhY3MgPSBkYWNzW2RhdGEtPm1vZGVsXTsKLQljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1tkYXRhLT5tb2RlbF07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc3Rfb3V0cHV0X3N3aXRjaCwgY2hpcCkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QyX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDJfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMl9taXhlcl9pbml0LApAQCAtODM3LDggKzk2Nyw4IEBACiAJCQkgTUlESV9PVVRQVVQgfAogCQkJIE1JRElfSU5QVVQsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMHgwZiwKLQkuZGFjX3ZvbHVtZV9tYXggPSAweGZmLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAogCS5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fU1BJIHwKIAkJCSAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81LApAQCAtODQ5LDggKzk3OSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMSA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAxMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QxX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDFfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMV9taXhlcl9pbml0LApAQCAtODY4LDcgKzk5Niw3IEBACiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMCwKKwkuZGFjX3ZvbHVtZV9taW4gPSAxMjcgLSA2MCwKIAkuZGFjX3ZvbHVtZV9tYXggPSAxMjcsCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULApAQCAtODc4LDggKzEwMDYsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfaGRhdiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2hkYXZfaW5pdCwKIAkuY2xlYW51cCA9IHhvbmFyX2hkYXZfY2xlYW51cCwKIAkuc3VzcGVuZCA9IHhvbmFyX2hkYXZfc3VzcGVuZCwKQEAgLTg5NywxNiArMTAyMyw0MyBAQAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAogCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAogCS5kYWNfY2hhbm5lbHMgPSA4LAotCS5kYWNfdm9sdW1lX21pbiA9IDB4MGYsCi0JLmRhY192b2x1bWVfbWF4ID0gMHhmZiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREksCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgeG9uYXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKLQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX3N0ID0geworCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfc3R4X2luaXQsCisJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfc3RfY29udHJvbF9maWx0ZXIsCisJLm1peGVyX2luaXQgPSB4b25hcl9zdF9taXhlcl9pbml0LAorCS5jbGVhbnVwID0geG9uYXJfc3RfY2xlYW51cCwKKwkuc3VzcGVuZCA9IHhvbmFyX3N0X3N1c3BlbmQsCisJLnJlc3VtZSA9IHhvbmFyX3N0X3Jlc3VtZSwKKwkuc2V0X2RhY19wYXJhbXMgPSBzZXRfcGNtMTc5Nl9wYXJhbXMsCisJLnNldF9hZGNfcGFyYW1zID0gc2V0X2NzNTN4MV9wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3BjbTE3OTZfdm9sdW1lLAorCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfcGNtMTc5Nl9tdXRlLAorCS5hYzk3X3N3aXRjaCA9IHhvbmFyX2xpbmVfbWljX2FjOTdfc3dpdGNoLAorCS5kYWNfdGx2ID0gcGNtMTc5Nl9kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl9kYXRhKSwKKwkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKKwkuZGFjX2NoYW5uZWxzID0gMiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKKwkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfeG9uYXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqY29uc3QgbW9kZWxzW10gPSB7CiAJCVtNT0RFTF9EMV0JPSAmbW9kZWxfeG9uYXJfZDEsCkBAIC05MTQsNyArMTA2Nyw1NyBAQAogCQlbTU9ERUxfRDJdCT0gJm1vZGVsX3hvbmFyX2QyLAogCQlbTU9ERUxfRDJYXQk9ICZtb2RlbF94b25hcl9kMiwKIAkJW01PREVMX0hEQVZdCT0gJm1vZGVsX3hvbmFyX2hkYXYsCisJCVtNT0RFTF9TVFhdCT0gJm1vZGVsX3hvbmFyX3N0LAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7CisJCVtNT0RFTF9EMV0JPSAiWG9uYXIgRDEiLAorCQlbTU9ERUxfRFhdCT0gIlhvbmFyIERYIiwKKwkJW01PREVMX0QyXQk9ICJYb25hciBEMiIsCisJCVtNT0RFTF9EMlhdCT0gIlhvbmFyIEQyWCIsCisJCVtNT0RFTF9IREFWXQk9ICJYb25hciBIREFWMS4zIiwKKwkJW01PREVMX0hEQVZfSDZdCT0gIlhvbmFyIEhEQVYxLjMrSDYiLAorCQlbTU9ERUxfU1RYXQk9ICJYb25hciBFc3NlbmNlIFNUWCIsCisJfTsKKwl1bnNpZ25lZCBpbnQgbW9kZWwgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAobW9kZWwgPj0gQVJSQVlfU0laRShtb2RlbHMpIHx8ICFtb2RlbHNbbW9kZWxdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljaGlwLT5tb2RlbCA9ICptb2RlbHNbbW9kZWxdOworCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgTU9ERUxfRDJYOgorCQljaGlwLT5tb2RlbC5pbml0ID0geG9uYXJfZDJ4X2luaXQ7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfRFg6CisJCWNoaXAtPm1vZGVsLmluaXQgPSB4b25hcl9keF9pbml0OworCQlicmVhazsKKwljYXNlIE1PREVMX0hEQVY6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlzd2l0Y2ggKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJgorCQkJR1BJT19IREFWX0RCX01BU0spIHsKKwkJY2FzZSBHUElPX0hEQVZfREJfSDY6CisJCQltb2RlbCA9IE1PREVMX0hEQVZfSDY7CisJCQlicmVhazsKKwkJY2FzZSBHUElPX0hEQVZfREJfWFg6CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGRhdWdodGVyYm9hcmRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9TVFg6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlicmVhazsKKwl9CisKKwljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1ttb2RlbF07CisJY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID0gbW9kZWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHhvbmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIApAQCAtOTI0LDEwICsxMTI3LDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlCVUdfT04ocGNpX2lkLT5kcml2ZXJfZGF0YSA+PSBBUlJBWV9TSVpFKG1vZGVscykpOwotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgIG1vZGVsc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwKLQkJCSAgICAgICBwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgeG9uYXJfaWRzLCBnZXRfeG9uYXJfbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggMjdjZjJjMi4uODBlMDY0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTEzMzQsNiArMTMzNCw0MCBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHBjeGhyX3Byb2NfZ3Bpb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGN4aHJfbWdyICptZ3IgPSBjaGlwLT5tZ3I7CisJLyogY29tbWFuZHMgYXZhaWxhYmxlIHdoZW4gZW1iZWRkZWQgRFNQIGlzIHJ1bm5pbmcgKi8KKwlpZiAobWdyLT5kc3BfbG9hZGVkICYgKDEgPDwgUENYSFJfRklSTVdBUkVfRFNQX01BSU5fSU5ERVgpKSB7CisJCS8qIGdwaW8gcG9ydHMgb24gc3RlcmVvIGJvYXJkcyBvbmx5IGF2YWlsYWJsZSAqLworCQlpbnQgdmFsdWUgPSAwOworCQlocjIyMl9yZWFkX2dwaW8obWdyLCAxLCAmdmFsdWUpOwkvKiBHUEkgKi8KKwkJc25kX2lwcmludGYoYnVmZmVyLCAiR1BJOiAweCV4XG4iLCB2YWx1ZSk7CisJCWhyMjIyX3JlYWRfZ3BpbyhtZ3IsIDAsICZ2YWx1ZSk7CS8qIEdQMCAqLworCQlzbmRfaXByaW50ZihidWZmZXIsICJHUE86IDB4JXhcbiIsIHZhbHVlKTsKKwl9IGVsc2UKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibm8gZmlybXdhcmUgbG9hZGVkXG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorc3RhdGljIHZvaWQgcGN4aHJfcHJvY19ncG9fd3JpdGUoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IGNoaXAtPm1ncjsKKwljaGFyIGxpbmVbNjRdOworCWludCB2YWx1ZTsKKwkvKiBjb21tYW5kcyBhdmFpbGFibGUgd2hlbiBlbWJlZGRlZCBEU1AgaXMgcnVubmluZyAqLworCWlmICghKG1nci0+ZHNwX2xvYWRlZCAmICgxIDw8IFBDWEhSX0ZJUk1XQVJFX0RTUF9NQUlOX0lOREVYKSkpCisJCXJldHVybjsKKwl3aGlsZSAoIXNuZF9pbmZvX2dldF9saW5lKGJ1ZmZlciwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgeworCQlpZiAoc3NjYW5mKGxpbmUsICJHUE86IDB4JXgiLCAmdmFsdWUpICE9IDEpCisJCQljb250aW51ZTsKKwkJaHIyMjJfd3JpdGVfZ3BvKG1nciwgdmFsdWUpOwkvKiBHUDAgKi8KKwl9Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY3hocl9wcm9jX2luaXQoc3RydWN0IHNuZF9wY3hociAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwpAQCAtMTM0Miw2ICsxMzc2LDEzIEBACiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19pbmZvKTsKIAlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAic3luYyIsICZlbnRyeSkpCiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19zeW5jKTsKKwkvKiBncGlvIGF2YWlsYWJsZSBvbiBzdGVyZW8gc291bmQgY2FyZHMgb25seSAqLworCWlmIChjaGlwLT5tZ3ItPmlzX2hyX3N0ZXJlbyAmJgorCSAgICAhc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImdwaW8iLCAmZW50cnkpKSB7CisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19ncGlvX3JlYWQpOworCQllbnRyeS0+Yy50ZXh0LndyaXRlID0gcGN4aHJfcHJvY19ncG9fd3JpdGU7CisJCWVudHJ5LT5tb2RlIHw9IFNfSVdVU1I7CisJfQogfQogLyogZW5kIG9mIHByb2MgaW50ZXJmYWNlICovCiAKQEAgLTE1MTAsMTIgKzE1NTEsMTIgQEAKIAogCQlzbnByaW50Zih0bXBpZCwgc2l6ZW9mKHRtcGlkKSwgIiVzLSVkIiwKIAkJCSBpZFtkZXZdID8gaWRbZGV2XSA6IGNhcmRfbmFtZSwgaSk7Ci0JCWNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDApOworCQllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCQlpZiAoISBjYXJkKSB7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgYWxsb2NhdGUgdGhlIGNhcmQgJWRcbiIsIGkpOwogCQkJcGN4aHJfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmggYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAppbmRleCA2OWQ4N2RlLi5iZGE3NzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAKLSNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT04JCTB4MDAwOTA1CS8qIDAuOS41ICovCi0jZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OX1NUUklORwkiMC45LjUiCQkvKiAwLjkuNSAqLworI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTgkJMHgwMDA5MDYJLyogMC45LjYgKi8KKyNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIwLjkuNiIJCS8qIDAuOS42ICovCiAKIAogI2RlZmluZSBQQ1hIUl9NQVhfQ0FSRFMJCTYKQEAgLTEyNCw2ICsxMjQsNyBAQAogCiAJdW5zaWduZWQgY2hhciB4bHhfY2ZnOwkJLyogY29weSBvZiBQQ1hIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAJdW5zaWduZWQgY2hhciB4bHhfc2VsbWljOwkvKiBjb3B5IG9mIFBDWEhSX1hMWF9TRUxNSUMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGRzcF9yZXNldDsJLyogY29weSBvZiBQQ1hIUl9EU1BfUkVTRVQgcmVnaXN0ZXIgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKaW5kZXggYmJiZDY2ZC4uYmUwMTczNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgRGlnaWdyYW0gcGN4aHIgY29tcGF0aWJsZSBzb3VuZGNhcmRzCiAgKgotICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbnMgbWVzc2FnZSBoYW5kbGluZworICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbmQgbWVzc2FnZSBoYW5kbGluZwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBieSBEaWdpZ3JhbSA8YWxzYUBkaWdpZ3JhbS5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwppbmRleCA1OTI3NDNhLi4xN2NiMTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwpAQCAtNDcxLDE2ICs0NzEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBjeGhyX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjeGhyX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBpbnQgcGN4aHJfc2V0dXBfZmlybXdhcmUoc3RydWN0IHBjeGhyX21nciAqbWdyKQogewogCWludCBlcnI7CkBAIC00OTUsOCArNDg1LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1BDWEhSOwogCWh3LT5wcml2YXRlX2RhdGEgPSBtZ3I7Ci0JaHctPm9wcy5vcGVuID0gcGN4aHJfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBwY3hocl9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHBjeGhyX2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHBjeGhyX2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX21peDIyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYwppbmRleCBmZjAxOTEyLi4xY2I4MmMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuYwpAQCAtNTMsNiArNTMsOCBAQAogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfRFNQCTB4MDEKICNkZWZpbmUgUENYSFJfRFNQX1JFU0VUX01VVEUJMHgwMgogI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfQ09ERUMJMHgwOAorI2RlZmluZSBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVAk1CisjZGVmaW5lIFBDWEhSX0RTUF9SRVNFVF9HUE9fTUFTSwkweDYwCiAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBDWEhSX0NGR19TWU5DRFNQX01BU0sJCTB4ODAKQEAgLTgxLDYgKzgzLDggQEAKIC8qIHZhbHVlcyBmb3IgUENIUl9YTFhfU1RBVFVTIHJlZ2lzdGVyIC0gUkVBRCAqLwogI2RlZmluZSBQQ1hIUl9TVEFUX1NSQ19MT0NLCQkweDAxCiAjZGVmaW5lIFBDWEhSX1NUQVRfTEVWRUxfSU4JCTB4MDIKKyNkZWZpbmUgUENYSFJfU1RBVF9HUElfT0ZGU0VUCQkyCisjZGVmaW5lIFBDWEhSX1NUQVRfR1BJX01BU0sJCTB4MEMKICNkZWZpbmUgUENYSFJfU1RBVF9NSUNfQ0FQUwkJMHgxMAogLyogdmFsdWVzIGZvciBQQ0hSX1hMWF9TVEFUVVMgcmVnaXN0ZXIgLSBXUklURSAqLwogI2RlZmluZSBQQ1hIUl9TVEFUX0ZSRVFfU1lOQ19NQVNLCTB4MDEKQEAgLTI5MSwxMCArMjk1LDExIEBACiAJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsCiAJCSAgICBQQ1hIUl9EU1BfUkVTRVRfRFNQKTsKIAltc2xlZXAoNSk7Ci0JUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsCi0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfRFNQICB8Ci0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfTVVURSB8Ci0JCSAgICBQQ1hIUl9EU1BfUkVTRVRfQ09ERUMpOworCW1nci0+ZHNwX3Jlc2V0ID0gUENYSFJfRFNQX1JFU0VUX0RTUCAgfAorCQkJIFBDWEhSX0RTUF9SRVNFVF9NVVRFIHwKKwkJCSBQQ1hIUl9EU1BfUkVTRVRfQ09ERUM7CisJUENYSFJfT1VUUEIobWdyLCBQQ1hIUl9EU1BfUkVTRVQsIG1nci0+ZHNwX3Jlc2V0KTsKKwkvKiBocjIyMl93cml0ZV9ncG8obWdyLCAwKTsgZG9lcyB0aGUgc2FtZSAqLwogCW1zbGVlcCg1KTsKIAogCS8qIGNvbmZpZyBBS00gKi8KQEAgLTQ5Niw2ICs1MDEsMzMgQEAKIH0KIAogCitpbnQgaHIyMjJfcmVhZF9ncGlvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IGlzX2dwaSwgaW50ICp2YWx1ZSkKK3sKKwlpZiAoaXNfZ3BpKSB7CisJCXVuc2lnbmVkIGNoYXIgcmVnID0gUENYSFJfSU5QQihtZ3IsIFBDWEhSX1hMWF9TVEFUVVMpOworCQkqdmFsdWUgPSAoaW50KShyZWcgJiBQQ1hIUl9TVEFUX0dQSV9NQVNLKSA+PgorCQkJICAgICAgUENYSFJfU1RBVF9HUElfT0ZGU0VUOworCX0gZWxzZSB7CisJCSp2YWx1ZSA9IChpbnQpKG1nci0+ZHNwX3Jlc2V0ICYgUENYSFJfRFNQX1JFU0VUX0dQT19NQVNLKSA+PgorCQkJIFBDWEhSX0RTUF9SRVNFVF9HUE9fT0ZGU0VUOworCX0KKwlyZXR1cm4gMDsKK30KKworCitpbnQgaHIyMjJfd3JpdGVfZ3BvKHN0cnVjdCBwY3hocl9tZ3IgKm1nciwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgcmVnID0gbWdyLT5kc3BfcmVzZXQgJiB+UENYSFJfRFNQX1JFU0VUX0dQT19NQVNLOworCisJcmVnIHw9ICh1bnNpZ25lZCBjaGFyKSh2YWx1ZSA8PCBQQ1hIUl9EU1BfUkVTRVRfR1BPX09GRlNFVCkgJgorCSAgICAgICBQQ1hIUl9EU1BfUkVTRVRfR1BPX01BU0s7CisKKwlQQ1hIUl9PVVRQQihtZ3IsIFBDWEhSX0RTUF9SRVNFVCwgcmVnKTsKKwltZ3ItPmRzcF9yZXNldCA9IHJlZzsKKwlyZXR1cm4gMDsKK30KKworCiBpbnQgaHIyMjJfdXBkYXRlX2FuYWxvZ19hdWRpb19sZXZlbChzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwLAogCQkJCSAgICBpbnQgaXNfY2FwdHVyZSwgaW50IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4MjIuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCmluZGV4IDZiMzE4YjIuLjVhMzdhMDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXgyMi5oCkBAIC0zMiw2ICszMiw5IEBACiAJCQkgICAgIGVudW0gcGN4aHJfY2xvY2tfdHlwZSBjbG9ja190eXBlLAogCQkJICAgICBpbnQgKnNhbXBsZV9yYXRlKTsKIAoraW50IGhyMjIyX3JlYWRfZ3BpbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCBpc19ncGksIGludCAqdmFsdWUpOworaW50IGhyMjIyX3dyaXRlX2dwbyhzdHJ1Y3QgcGN4aHJfbWdyICptZ3IsIGludCB2YWx1ZSk7CisKICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19MRVZFTF9NSU4JCTAJLyogLTI1LjUgZEIgKi8KICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19aRVJPX0xFVkVMCQk1MQkvKiAwLjAgZEIgKi8KICNkZWZpbmUgSFIyMjJfTElORV9QTEFZQkFDS19MRVZFTF9NQVgJCTk5CS8qICsyNC4wIGRCICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCmluZGV4IDI0MzZlMzcuLmZlYzA0OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCkBAIC03ODksMTEgKzc4OSwxNSBAQAogCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKIAkJbXV0ZXhfbG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAJCW1nci0+dXNlX2Nsb2NrX3R5cGUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwotCQlpZiAobWdyLT51c2VfY2xvY2tfdHlwZSkKKwkJcmF0ZSA9IDA7CisJCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IFBDWEhSX0NMT0NLX1RZUEVfSU5URVJOQUwpIHsKIAkJCXBjeGhyX2dldF9leHRlcm5hbF9jbG9jayhtZ3IsIG1nci0+dXNlX2Nsb2NrX3R5cGUsCiAJCQkJCQkgJnJhdGUpOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyYXRlID0gbWdyLT5zYW1wbGVfcmF0ZTsKKwkJCWlmICghcmF0ZSkKKwkJCQlyYXRlID0gNDgwMDA7CisJCX0KIAkJaWYgKHJhdGUpIHsKIAkJCXBjeGhyX3NldF9jbG9jayhtZ3IsIHJhdGUpOwogCQkJaWYgKG1nci0+c2FtcGxlX3JhdGUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggM2NhYWNmYi4uNmYxMDM0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtMjEwMiw5ICsyMTAyLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfcmlwdGlkZV9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTMyLmMgYi9zb3VuZC9wY2kvcm1lMzIuYwppbmRleCBlN2VmM2ExLi5kN2I5NjZlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lMzIuYworKysgYi9zb3VuZC9wY2kvcm1lMzIuYwpAQCAtMTk0MSw5ICsxOTQxLDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBybWUzMikpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtZTMyKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9ybWUzMl9jYXJkX2ZyZWU7CiAJcm1lMzIgPSAoc3RydWN0IHJtZTMyICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAlybWUzMi0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDNmZGQ0ODguLjU1ZmIxYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yMzQ4LDkgKzIzNDgsMTAgQEAKIAkJZGV2Kys7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgcm1lOTYpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBybWU5NiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lOTZfY2FyZF9mcmVlOwogCXJtZTk2ID0gKHN0cnVjdCBybWU5NiAqKWNhcmQtPnByaXZhdGVfZGF0YTsJCiAJcm1lOTYtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IDQ0ZDBjMTUuLjMxNGU3MzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAvKiB0aGUgbWV0ZXJzIGFyZSByZWd1bGFyIGkvby1tYXBwZWQgcmVnaXN0ZXJzLCBidXQgb2Zmc2V0CiAgICBjb25zaWRlcmFibHkgZnJvbSB0aGUgcmVzdC4gdGhlIHBlYWsgcmVnaXN0ZXJzIGFyZSByZXNldAotICAgd2hlbiByZWFkOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgNCBiaXRzIGFyZSBmdWxsLXNjYWxlIGNvdW50ZXJzOyAKKyAgIHdoZW4gcmVhZDsgdGhlIGxlYXN0LXNpZ25pZmljYW50IDQgYml0cyBhcmUgZnVsbC1zY2FsZSBjb3VudGVyczsKICAgIHRoZSBhY3R1YWwgcGVhayB2YWx1ZSBpcyBpbiB0aGUgbW9zdC1zaWduaWZpY2FudCAyNCBiaXRzLgogKi8KIApAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAyNiozIHZhbHVlcyBhcmUgcmVhZCBpbiBzcyBtb2RlCiAgICAxNCozIGluIGRzIG1vZGUsIHdpdGggbm8gZ2FwIGJldHdlZW4gdmFsdWVzCiAqLwotI2RlZmluZSBIRFNQXzk2NTJfcGVha0Jhc2UJNzE2NAkKKyNkZWZpbmUgSERTUF85NjUyX3BlYWtCYXNlCTcxNjQKICNkZWZpbmUgSERTUF85NjUyX3Jtc0Jhc2UJNDA5NgogCiAvKiBjLmYuIHRoZSBoZHNwXzk2MzJfbWV0ZXJzX3Qgc3RydWN0ICovCkBAIC0xNzMsMTIgKzE3MywxMiBAQAogI2RlZmluZSBIRFNQX1NQRElGRW1waGFzaXMgICAgICAgICgxPDwxMCkgLyogMD1ub25lLCAxPW9uICovCiAjZGVmaW5lIEhEU1BfU1BESUZOb25BdWRpbyAgICAgICAgKDE8PDExKSAvKiAwPW9mZiwgMT1vbiAqLwogI2RlZmluZSBIRFNQX1NQRElGT3B0aWNhbE91dCAgICAgICgxPDwxMikgLyogMT11c2UgMXN0IEFEQVQgY29ubmVjdG9yIGZvciBTUERJRiwgMD1kbyBub3QgKi8KLSNkZWZpbmUgSERTUF9TeW5jUmVmMiAgICAgICAgICAgICAoMTw8MTMpIAotI2RlZmluZSBIRFNQX1NQRElGSW5wdXRTZWxlY3QwICAgICgxPDwxNCkgCi0jZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDEgICAgKDE8PDE1KSAKLSNkZWZpbmUgSERTUF9TeW5jUmVmMCAgICAgICAgICAgICAoMTw8MTYpIAorI2RlZmluZSBIRFNQX1N5bmNSZWYyICAgICAgICAgICAgICgxPDwxMykKKyNkZWZpbmUgSERTUF9TUERJRklucHV0U2VsZWN0MCAgICAoMTw8MTQpCisjZGVmaW5lIEhEU1BfU1BESUZJbnB1dFNlbGVjdDEgICAgKDE8PDE1KQorI2RlZmluZSBIRFNQX1N5bmNSZWYwICAgICAgICAgICAgICgxPDwxNikKICNkZWZpbmUgSERTUF9TeW5jUmVmMSAgICAgICAgICAgICAoMTw8MTcpCi0jZGVmaW5lIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQgKDE8PDE4KSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8gCisjZGVmaW5lIEhEU1BfQW5hbG9nRXh0ZW5zaW9uQm9hcmQgKDE8PDE4KSAvKiBGb3IgSDk2MzIgY2FyZHMgKi8KICNkZWZpbmUgSERTUF9YTFJCcmVha291dENhYmxlICAgICAoMTw8MjApIC8qIEZvciBIOTYzMiBjYXJkcyAqLwogI2RlZmluZSBIRFNQX01pZGkwSW50ZXJydXB0RW5hYmxlICgxPDwyMikKICNkZWZpbmUgSERTUF9NaWRpMUludGVycnVwdEVuYWJsZSAoMTw8MjMpCkBAIC0zMTQsNyArMzE0LDcgQEAKICNkZWZpbmUgSERTUF9UaW1lY29kZVN5bmMgICAgICAgKDE8PDI3KQogI2RlZmluZSBIRFNQX0FFQk8gICAgICAgICAgCSgxPDwyOCkgLyogSDk2MzIgc3BlY2lmaWMgQW5hbG9nIEV4dGVuc2lvbiBCb2FyZHMgKi8KICNkZWZpbmUgSERTUF9BRUJJCQkoMTw8MjkpIC8qIDAgPSBwcmVzZW50LCAxID0gYWJzZW50ICovCi0jZGVmaW5lIEhEU1BfbWlkaTBJUlFQZW5kaW5nICAgICgxPDwzMCkgCisjZGVmaW5lIEhEU1BfbWlkaTBJUlFQZW5kaW5nICAgICgxPDwzMCkKICNkZWZpbmUgSERTUF9taWRpMUlSUVBlbmRpbmcgICAgKDE8PDMxKQogCiAjZGVmaW5lIEhEU1Bfc3BkaWZGcmVxdWVuY3lNYXNrICAgIChIRFNQX3NwZGlmRnJlcXVlbmN5MHxIRFNQX3NwZGlmRnJlcXVlbmN5MXxIRFNQX3NwZGlmRnJlcXVlbmN5MikKQEAgLTM5MSw3ICszOTEsNyBAQAogI2RlZmluZSBIRFNQX0NIQU5ORUxfQlVGRkVSX0JZVEVTICAgICg0KkhEU1BfQ0hBTk5FTF9CVUZGRVJfU0FNUExFUykKIAogLyogdGhlIHNpemUgb2YgdGhlIGFyZWEgd2UgbmVlZCB0byBhbGxvY2F0ZSBmb3IgRE1BIHRyYW5zZmVycy4gdGhlCi0gICBzaXplIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBjaGFubmVscyAtIHRoZSAKKyAgIHNpemUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIC0gdGhlCiAgICBNdWx0aWZhY2Ugc3RpbGwgdXNlcyB0aGUgc2FtZSBtZW1vcnkgYXJlYS4KIAogICAgTm90ZSB0aGF0IHdlIGFsbG9jYXRlIDEgbW9yZSBjaGFubmVsIHRoYW4gaXMgYXBwYXJlbnRseSBuZWVkZWQKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfaW5fY2hhbm5lbHM7CSAgICAgLyogcXVhZCBzcGVlZCBtb2RlIGZvciBIOTYzMiAqLwogCXVuc2lnbmVkIGNoYXIgICAgICAgICBkc19pbl9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgc3NfaW5fY2hhbm5lbHM7CSAgICAvKiBkaWZmZXJlbnQgZm9yIG11bHRpZmFjZS9kaWdpZmFjZSAqLwotCXVuc2lnbmVkIGNoYXIJICAgICAgcXNfb3V0X2NoYW5uZWxzOwkgICAgCisJdW5zaWduZWQgY2hhcgkgICAgICBxc19vdXRfY2hhbm5lbHM7CiAJdW5zaWduZWQgY2hhciAgICAgICAgIGRzX291dF9jaGFubmVsczsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgc3Nfb3V0X2NoYW5uZWxzOwogCkBAIC01MDIsOSArNTAyLDkgQEAKIAogc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfbWZfc3NbSERTUF9NQVhfQ0hBTk5FTFNdID0geyAvKiBNdWx0aWZhY2UgKi8KIAkvKiBBbmFsb2cgKi8KLQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAogCS8qIEFEQVQgMiAqLwotCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgCisJMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLAogCS8qIFNQRElGICovCiAJMjQsIDI1LAogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQpAQCAtNTI1LDExICs1MjUsMTEgQEAKIAkvKiBTUERJRiAqLwogCTgsIDksCiAJLyogQW5hbG9nICovCi0JMTAsIDExLCAKKwkxMCwgMTEsCiAJLyogQU80Uy0xOTIgYW5kIEFJNFMtMTkyIGV4dGVuc2lvbiBib2FyZHMgKi8KIAkxMiwgMTMsIDE0LCAxNSwKIAkvKiBvdGhlcnMgZG9uJ3QgZXhpc3QgKi8KLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAktMSwgLTEKIH07CiAKQEAgLTUzOSw3ICs1MzksNyBAQAogCS8qIFNQRElGICovCiAJOCwgOSwKIAkvKiBBbmFsb2cgKi8KLQkxMCwgMTEsIAorCTEwLCAxMSwKIAkvKiBBTzRTLTE5MiBhbmQgQUk0Uy0xOTIgZXh0ZW5zaW9uIGJvYXJkcyAqLwogCTEyLCAxMywgMTQsIDE1LAogCS8qIG90aGVycyBkb24ndCBleGlzdCAqLwpAQCAtNTg3LDcgKzU4Nyw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BfaWRzW10gPSB7CiAJewogCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9YSUxJTlgsCi0JCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwgCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUCwKIAkJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAogCX0sIC8qIFJNRSBIYW1tZXJmYWxsLURTUCAqLwpAQCAtNjUzLDcgKzY1Myw2IEBACiAKIHN0YXRpYyBpbnQgaGRzcF9jaGVja19mb3JfaW9ib3ggKHN0cnVjdCBoZHNwICpoZHNwKQogewotCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIDA7CiAJaWYgKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0NvbmZpZ0Vycm9yKSB7CiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogbm8gRGlnaWZhY2Ugb3IgTXVsdGlmYWNlIGNvbm5lY3RlZCFcbiIpOwpAQCAtNjYxLDcgKzY2MCwyOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgaGRzcF93YWl0X2Zvcl9pb2JveChzdHJ1Y3QgaGRzcCAqaGRzcCwgdW5zaWduZWQgaW50IGxvb3BzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSAhPSBsb29wczsgKytpKSB7CisJCWlmIChoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3RlcikgJiBIRFNQX0NvbmZpZ0Vycm9yKQorCQkJbXNsZWVwKGRlbGF5KTsKKwkJZWxzZSB7CisJCQlzbmRfcHJpbnRkKCJIYW1tZXJmYWxsLURTUDogaW9ib3ggZm91bmQgYWZ0ZXIgJXVtcyFcbiIsCisJCQkJICAgaSAqIGRlbGF5KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc25kX3ByaW50aygiSGFtbWVyZmFsbC1EU1A6IG5vIERpZ2lmYWNlIG9yIE11bHRpZmFjZSBjb25uZWN0ZWQhXG4iKTsKKwloZHNwLT5zdGF0ZSAmPSB+SERTUF9GaXJtd2FyZUxvYWRlZDsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoc3RydWN0IGhkc3AgKmhkc3ApIHsKQEAgLTY3MCwxOSArNjkxLDE5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgoaGRzcF9yZWFkIChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKSAmIEhEU1BfRGxsRXJyb3IpICE9IDApIHsKLQkJCisKIAkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiBsb2FkaW5nIGZpcm13YXJlXG4iKTsKIAogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBIRFNQX1NfUFJPR1JBTSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfZmlmb0RhdGEsIDApOwotCQkKKwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfTE9OR19XQUlUKSkgewogCQkJc25kX3ByaW50ayAoIkhhbW1lcmZhbGwtRFNQOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRvd25sb2FkIHByZXBhcmF0aW9uXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCQorCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfU19MT0FEKTsKLQkJCisKIAkJZm9yIChpID0gMDsgaSA8IDI0NDEzOyArK2kpIHsKIAkJCWhkc3Bfd3JpdGUoaGRzcCwgSERTUF9maWZvRGF0YSwgaGRzcC0+ZmlybXdhcmVfY2FjaGVbaV0pOwogCQkJaWYgKGhkc3BfZmlmb193YWl0IChoZHNwLCAxMjcsIEhEU1BfTE9OR19XQUlUKSkgewpAQCAtNjkyLDcgKzcxMyw3IEBACiAJCX0KIAogCQlzc2xlZXAoMyk7Ci0JCQorCiAJCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9MT05HX1dBSVQpKSB7CiAJCQlzbmRfcHJpbnRrICgiSGFtbWVyZmFsbC1EU1A6IHRpbWVvdXQgYXQgZW5kIG9mIGZpcm13YXJlIGxvYWRpbmdcbiIpOwogCQkgICAgCXJldHVybiAtRUlPOwpAQCAtNzA1LDE1ICs3MjYsMTUgQEAKICNlbmRpZgogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX2NvbnRyb2wyUmVnLCBoZHNwLT5jb250cm9sMl9yZWdpc3Rlcik7CiAJCXNuZF9wcmludGsgKCJIYW1tZXJmYWxsLURTUDogZmluaXNoZWQgZmlybXdhcmUgbG9hZGluZ1xuIik7Ci0JCQorCiAJfQogCWlmIChoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkgewogCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IGZpcm13YXJlIGxvYWRlZCBmcm9tIGNhY2hlLCByZXN0b3JpbmcgZGVmYXVsdHNcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGRzcC0+bG9jaywgZmxhZ3MpOwogCQlzbmRfaGRzcF9zZXRfZGVmYXVsdHMoaGRzcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsgCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkc3AtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JCisKIAloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlTG9hZGVkOwogCiAJcmV0dXJuIDA7CkBAIC03MjIsNyArNzQzLDcgQEAKIHN0YXRpYyBpbnQgaGRzcF9nZXRfaW9ib3hfdmVyc2lvbiAoc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaWYgKChoZHNwX3JlYWQgKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpICYgSERTUF9EbGxFcnJvcikgIT0gMCkgewotCQorCiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfY29udHJvbDJSZWcsIEhEU1BfUFJPR1JBTSk7CiAJCWhkc3Bfd3JpdGUgKGhkc3AsIEhEU1BfZmlmb0RhdGEsIDApOwogCQlpZiAoaGRzcF9maWZvX3dhaXQgKGhkc3AsIDAsIEhEU1BfU0hPUlRfV0FJVCkgPCAwKQpAQCAtNzM4LDcgKzc1OSw3IEBACiAJCQloZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgSERTUF9TSE9SVF9XQUlUKTsKIAkJfSBlbHNlIHsKIAkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKLQkJfSAKKwkJfQogCX0gZWxzZSB7CiAJCS8qIGZpcm13YXJlIHdhcyBhbHJlYWR5IGxvYWRlZCwgZ2V0IGlvYm94IHR5cGUgKi8KIAkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQpAQCAtNzg2LDEzICs4MDcsMTMgQEAKIAogCiBzdGF0aWMgaW50IGhkc3BfZmlmb193YWl0KHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgY291bnQsIGludCB0aW1lb3V0KQoteyAgICAKK3sKIAlpbnQgaTsKIAogCS8qIHRoZSBmaWZvU3RhdHVzIHJlZ2lzdGVycyByZXBvcnRzIG9uIGhvdyBtYW55IHdvcmRzCiAJICAgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY29tbWFuZCBGSUZPLgogCSovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CiAKIAkJaWYgKChpbnQpKGhkc3BfcmVhZCAoaGRzcCwgSERTUF9maWZvU3RhdHVzKSAmIDB4ZmYpIDw9IGNvdW50KQpAQCAtODI0LDExICs4NDUsMTEgQEAKIAogCWlmIChhZGRyID49IEhEU1BfTUFUUklYX01JWEVSX1NJWkUpCiAJCXJldHVybiAtMTsKLQkKKwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAogCQkvKiBmcm9tIG1hcnRpbiBiam9ybnNlbjoKLQkJICAgCisKIAkJICAgIllvdSBjYW4gb25seSB3cml0ZSBkd29yZHMgdG8gdGhlCiAJCSAgIG1peGVyIG1lbW9yeSB3aGljaCBjb250YWluIHR3bwogCQkgICBtaXhlciB2YWx1ZXMgaW4gdGhlIGxvdyBhbmQgaGlnaApAQCAtODQ3LDcgKzg2OCw3IEBACiAKIAkJaGRzcC0+bWl4ZXJfbWF0cml4W2FkZHJdID0gZGF0YTsKIAotCQkKKwogCQkvKiBgYWRkcicgYWRkcmVzc2VzIGEgMTYtYml0IHdpZGUgYWRkcmVzcywgYnV0CiAJCSAgIHRoZSBhZGRyZXNzIHNwYWNlIGFjY2Vzc2VkIHZpYSBoZHNwX3dyaXRlCiAJCSAgIHVzZXMgYnl0ZSBvZmZzZXRzLiBwdXQgYW5vdGhlciB3YXksIGFkZHIKQEAgLTg1NiwxNyArODc3LDE3IEBACiAJCSAgIHRvIGFjY2VzcyAwIHRvIDI3MDMgLi4uCiAJCSovCiAJCWFkID0gYWRkci8yOwotCQotCQloZHNwX3dyaXRlIChoZHNwLCA0MDk2ICsgKGFkKjQpLCAKLQkJCSAgICAoaGRzcC0+bWl4ZXJfbWF0cml4WyhhZGRyJjB4N2ZlKSsxXSA8PCAxNikgKyAKKworCQloZHNwX3dyaXRlIChoZHNwLCA0MDk2ICsgKGFkKjQpLAorCQkJICAgIChoZHNwLT5taXhlcl9tYXRyaXhbKGFkZHImMHg3ZmUpKzFdIDw8IDE2KSArCiAJCQkgICAgaGRzcC0+bWl4ZXJfbWF0cml4W2FkZHImMHg3ZmVdKTsKLQkJCisKIAkJcmV0dXJuIDA7CiAKIAl9IGVsc2UgewogCiAJCWFkID0gKGFkZHIgPDwgMTYpICsgZGF0YTsKLQkJCisKIAkJaWYgKGhkc3BfZmlmb193YWl0KGhkc3AsIDEyNywgSERTUF9MT05HX1dBSVQpKQogCQkJcmV0dXJuIC0xOwogCkBAIC05MDIsNyArOTIzLDcgQEAKIAogCWlmIChzdGF0dXMgJiBIRFNQX1NQRElGRXJyb3JGbGFnKQogCQlyZXR1cm4gMDsKLQkKKwogCXN3aXRjaCAocmF0ZV9iaXRzKSB7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MzJLSHo6IHJldHVybiAzMjAwMDsKIAljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3k0NF8xS0h6OiByZXR1cm4gNDQxMDA7CkBAIC05MTAsMTMgKzkzMSwxMyBAQAogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTY0S0h6OiByZXR1cm4gNjQwMDA7CiAJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5ODhfMktIejogcmV0dXJuIDg4MjAwOwogCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTk2S0h6OiByZXR1cm4gOTYwMDA7Ci0JY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTI4S0h6OiAKKwljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxMjhLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTI4MDAwOwogCQlicmVhazsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxNzZfNEtIejogCisJY2FzZSBIRFNQX3NwZGlmRnJlcXVlbmN5MTc2XzRLSHo6CiAJCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gMTc2NDAwOwogCQlicmVhazsKLQljYXNlIEhEU1Bfc3BkaWZGcmVxdWVuY3kxOTJLSHo6IAorCWNhc2UgSERTUF9zcGRpZkZyZXF1ZW5jeTE5MktIejoKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHJldHVybiAxOTIwMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDI3LDcgKzEwNDgsNyBAQAogewogCXU2NCBuOwogCXUzMiByOwotCQorCiAJaWYgKHJhdGUgPj0gMTEyMDAwKQogCQlyYXRlIC89IDQ7CiAJZWxzZSBpZiAocmF0ZSA+PSA1NjAwMCkKQEAgLTEwNTMsMzUgKzEwNzQsMzUgQEAKIAkgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCAoZS5nLiBkdXJpbmcgbW9kdWxlCiAJICAgaW5pdGlhbGl6YXRpb24pLgogCSovCi0JCi0JaWYgKCEoaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BfQ2xvY2tNb2RlTWFzdGVyKSkgewkKKworCWlmICghKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0Nsb2NrTW9kZU1hc3RlcikpIHsKIAkJaWYgKGNhbGxlZF9pbnRlcm5hbGx5KSB7CiAJCQkvKiByZXF1ZXN0IGZyb20gY3RsIG9yIGNhcmQgaW5pdGlhbGl6YXRpb24gKi8KIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBkZXZpY2UgaXMgbm90IHJ1bm5pbmcgYXMgYSBjbG9jayBtYXN0ZXI6IGNhbm5vdCBzZXQgc2FtcGxlIHJhdGUuXG4iKTsKIAkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsJCQorCQl9IGVsc2UgewogCQkJLyogaHdfcGFyYW0gcmVxdWVzdCB3aGlsZSBpbiBBdXRvU3luYyBtb2RlICovCiAJCQlpbnQgZXh0ZXJuYWxfZnJlcSA9IGhkc3BfZXh0ZXJuYWxfc2FtcGxlX3JhdGUoaGRzcCk7CiAJCQlpbnQgc3BkaWZfZnJlcSA9IGhkc3Bfc3BkaWZfc2FtcGxlX3JhdGUoaGRzcCk7Ci0JCQorCiAJCQlpZiAoKHNwZGlmX2ZyZXEgPT0gZXh0ZXJuYWxfZnJlcSoyKSAmJiAoaGRzcF9hdXRvc3luY19yZWYoaGRzcCkgPj0gSERTUF9BVVRPU1lOQ19GUk9NX0FEQVQxKSkKIAkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSGFtbWVyZmFsbC1EU1A6IERldGVjdGVkIEFEQVQgaW4gZG91YmxlIHNwZWVkIG1vZGVcbiIpOwogCQkJZWxzZSBpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMiAmJiAoc3BkaWZfZnJlcSA9PSBleHRlcm5hbF9mcmVxKjQpICYmIChoZHNwX2F1dG9zeW5jX3JlZihoZHNwKSA+PSBIRFNQX0FVVE9TWU5DX0ZST01fQURBVDEpKQotCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBxdWFkIHNwZWVkIG1vZGVcbiIpOwkJCQorCQkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRGV0ZWN0ZWQgQURBVCBpbiBxdWFkIHNwZWVkIG1vZGVcbiIpOwogCQkJZWxzZSBpZiAocmF0ZSAhPSBleHRlcm5hbF9mcmVxKSB7CiAJCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBObyBBdXRvU3luYyBzb3VyY2UgZm9yIHJlcXVlc3RlZCByYXRlXG4iKTsKIAkJCQlyZXR1cm4gLTE7Ci0JCQl9CQkKLQkJfQkKKwkJCX0KKwkJfQogCX0KIAogCWN1cnJlbnRfcmF0ZSA9IGhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZTsKIAogCS8qIENoYW5naW5nIGZyb20gYSAic2luZ2xlIHNwZWVkIiB0byBhICJkb3VibGUgc3BlZWQiIHJhdGUgaXMKIAkgICBub3QgYWxsb3dlZCBpZiBhbnkgc3Vic3RyZWFtcyBhcmUgb3Blbi4gVGhpcyBpcyBiZWNhdXNlCi0JICAgc3VjaCBhIGNoYW5nZSBjYXVzZXMgYSBzaGlmdCBpbiB0aGUgbG9jYXRpb24gb2YgCisJICAgc3VjaCBhIGNoYW5nZSBjYXVzZXMgYSBzaGlmdCBpbiB0aGUgbG9jYXRpb24gb2YKIAkgICB0aGUgRE1BIGJ1ZmZlcnMgYW5kIGEgcmVkdWN0aW9uIGluIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlCi0JICAgYnVmZmVycy4gCisJICAgYnVmZmVycy4KIAogCSAgIE5vdGUgdGhhdCBhIHNpbWlsYXIgYnV0IGVzc2VudGlhbGx5IGluc29sdWJsZSBwcm9ibGVtCiAJICAgZXhpc3RzIGZvciBleHRlcm5hbGx5LWRyaXZlbiByYXRlIGNoYW5nZXMuIEFsbCB3ZSBjYW4gZG8KQEAgLTEwODksNyArMTExMCw3IEBACiAKIAlpZiAocmF0ZSA+IDk2MDAwICYmIGhkc3AtPmlvX3R5cGUgIT0gSDk2MzIpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCiAJc3dpdGNoIChyYXRlKSB7CiAJY2FzZSAzMjAwMDoKIAkJaWYgKGN1cnJlbnRfcmF0ZSA+IDQ4MDAwKQpAQCAtMTE3OSw3ICsxMjAwLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCQorCiAJaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlID0gcmF0ZTsKIAogCXJldHVybiAwOwpAQCAtMTI0NSwxNiArMTI2NiwxNiBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzEyOF07CiAKIAkvKiBPdXRwdXQgaXMgbm90IGludGVycnVwdCBkcml2ZW4gKi8KLQkJCisKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhtaWRpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGhtaWRpLT5vdXRwdXQpIHsKIAkJaWYgKCFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eSAoaG1pZGktPm91dHB1dCkpIHsKIAkJCWlmICgobl9wZW5kaW5nID0gc25kX2hkc3BfbWlkaV9vdXRwdXRfcG9zc2libGUgKGhtaWRpLT5oZHNwLCBobWlkaS0+aWQpKSA+IDApIHsKIAkJCQlpZiAobl9wZW5kaW5nID4gKGludClzaXplb2YgKGJ1ZikpCiAJCQkJCW5fcGVuZGluZyA9IHNpemVvZiAoYnVmKTsKLQkJCQkKKwogCQkJCWlmICgodG9fd3JpdGUgPSBzbmRfcmF3bWlkaV90cmFuc21pdCAoaG1pZGktPm91dHB1dCwgYnVmLCBuX3BlbmRpbmcpKSA+IDApIHsKLQkJCQkJZm9yIChpID0gMDsgaSA8IHRvX3dyaXRlOyArK2kpIAorCQkJCQlmb3IgKGkgPSAwOyBpIDwgdG9fd3JpdGU7ICsraSkKIAkJCQkJCXNuZF9oZHNwX21pZGlfd3JpdGVfYnl0ZSAoaG1pZGktPmhkc3AsIGhtaWRpLT5pZCwgYnVmW2ldKTsKIAkJCQl9CiAJCQl9CkBAIC0xMzI1LDE0ICsxMzQ2LDE0IEBACiB7CiAJc3RydWN0IGhkc3BfbWlkaSAqaG1pZGkgPSAoc3RydWN0IGhkc3BfbWlkaSAqKSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlzbmRfaGRzcF9taWRpX291dHB1dF93cml0ZShobWlkaSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogCiAJLyogdGhpcyBkb2VzIG5vdCBidW1wIGhtaWRpLT5pc3RpbWVyLCBiZWNhdXNlIHRoZQogCSAgIGtlcm5lbCBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdGhlIHRpbWVyIHdoZW4gaXQKIAkgICBleHBpcmVkLCBhbmQgd2UgYXJlIG5vdyBhZGRpbmcgaXQgYmFjaywgdGh1cwotCSAgIGxlYXZpbmcgaXN0aW1lciB3aGVyZXZlciBpdCB3YXMgc2V0IGJlZm9yZS4gIAorCSAgIGxlYXZpbmcgaXN0aW1lciB3aGVyZXZlciBpdCB3YXMgc2V0IGJlZm9yZS4KIAkqLwogCiAJaWYgKGhtaWRpLT5pc3RpbWVyKSB7CkBAIC0xNTAxLDcgKzE1MjIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jb250cm9sX3NwZGlmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAlzbmRfaGRzcF9jb252ZXJ0X3RvX2FlcygmdWNvbnRyb2wtPnZhbHVlLmllYzk1OCwgaGRzcC0+Y3JlZ19zcGRpZik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTExLDcgKzE1MzIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdTMyIHZhbDsKLQkKKwogCXZhbCA9IHNuZF9oZHNwX2NvbnZlcnRfZnJvbV9hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgpOwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCWNoYW5nZSA9IHZhbCAhPSBoZHNwLT5jcmVnX3NwZGlmOwpAQCAtMTUzMCw3ICsxNTUxLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfY29udHJvbF9zcGRpZl9zdHJlYW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNuZF9oZHNwX2NvbnZlcnRfdG9fYWVzKCZ1Y29udHJvbC0+dmFsdWUuaWVjOTU4LCBoZHNwLT5jcmVnX3NwZGlmX3N0cmVhbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTQwLDcgKzE1NjEsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdTMyIHZhbDsKLQkKKwogCXZhbCA9IHNuZF9oZHNwX2NvbnZlcnRfZnJvbV9hZXMoJnVjb250cm9sLT52YWx1ZS5pZWM5NTgpOwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCWNoYW5nZSA9IHZhbCAhPSBoZHNwLT5jcmVnX3NwZGlmX3N0cmVhbTsKQEAgLTE2MDIsNyArMTYyMyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9pbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9zcGRpZl9pbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MTIsNyArMTYzMyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJSAoKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpID8gNCA6IDMpOwpAQCAtMTY0OSw3ICsxNjcwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX291dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfb3V0KGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTY1OSw3ICsxNjgwLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTY5Myw3ICsxNzE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX3Byb2Zlc3Npb25hbChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfcHJvZmVzc2lvbmFsKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMTcwMyw3ICsxNzI0LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMTczNyw3ICsxNzU4LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3NwZGlmX2VtcGhhc2lzKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcF9zcGRpZl9lbXBoYXNpcyhoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NDcsNyArMTc2OCw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTE3ODEsNyArMTgwMiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9zcGRpZl9ub25hdWRpbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGhkc3Bfc3BkaWZfbm9uYXVkaW8oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzkxLDcgKzE4MTIsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0xODI4LDcgKzE4NDksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfc3BkaWZfc2FtcGxlX3JhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3dpdGNoIChoZHNwX3NwZGlmX3NhbXBsZV9yYXRlKGhkc3ApKSB7CiAJY2FzZSAzMjAwMDoKIAkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CkBAIC0xODU4LDcgKzE4NzksNyBAQAogCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gOTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CQkKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDY7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTg4Miw3ICsxOTAzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3N5c3RlbV9zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlOwogCXJldHVybiAwOwogfQpAQCAtMTg5OSw3ICsxOTIwLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfaW5mb19hdXRvc3luY19zYW1wbGVfcmF0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLCAiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLCAiTm9uZSIsICIxMjgwMDAiLCAiMTc2NDAwIiwgIjE5MjAwMCJ9OwkKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiMzIwMDAiLCAiNDQxMDAiLCAiNDgwMDAiLCAiNjQwMDAiLCAiODgyMDAiLCAiOTYwMDAiLCAiTm9uZSIsICIxMjgwMDAiLCAiMTc2NDAwIiwgIjE5MjAwMCJ9OwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgPyAxMCA6IDcgOwpAQCAtMTkxMiw3ICsxOTMzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2F1dG9zeW5jX3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXN3aXRjaCAoaGRzcF9leHRlcm5hbF9zYW1wbGVfcmF0ZShoZHNwKSkgewogCWNhc2UgMzIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOwpAQCAtMTk0MCw5ICsxOTYxLDkgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOTIwMDA6CiAJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA5OwotCQlicmVhazsJCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwkJCisJCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSA2OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE5NjgsNyArMTk4OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fc3lzdGVtX2Nsb2NrX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik1hc3RlciIsICJTbGF2ZSIgfTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOwpAQCAtMTk4MSw3ICsyMDAyLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3N5c3RlbV9jbG9ja19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3N5c3RlbV9jbG9ja19tb2RlKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjAxOCw3ICsyMDM5LDcgQEAKIAkJY2FzZSAxOTIwMDA6CiAJCQlyZXR1cm4gOTsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAzOwkKKwkJCXJldHVybiAzOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIDA7CkBAIC0yMDMyLDcgKzIwNTMsNyBAQAogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfQVVUT1NZTkM6CiAJCWlmIChoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApICE9IDApIHsKIAkJICAgIGlmICghaGRzcF9zZXRfcmF0ZShoZHNwLCBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApLCAxKSkgewotCQkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciAmPSB+SERTUF9DbG9ja01vZGVNYXN0ZXI7CQkKKwkJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfkhEU1BfQ2xvY2tNb2RlTWFzdGVyOwogCQkJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CiAJCQlyZXR1cm4gMDsKIAkJICAgIH0KQEAgLTIwNDMsNyArMjA2NCw3IEBACiAJCWJyZWFrOwogCWNhc2UgSERTUF9DTE9DS19TT1VSQ0VfSU5URVJOQUxfNDRfMUtIWjoKIAkJcmF0ZSA9IDQ0MTAwOwotCQlicmVhazsJICAgIAorCQlicmVhazsKIAljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzQ4S0haOgogCQlyYXRlID0gNDgwMDA7CiAJCWJyZWFrOwpAQCAtMjA3OCwxMyArMjA5OSwxMyBAQAogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJBdXRvU3luYyIsICJJbnRlcm5hbCAzMi4wIGtIeiIsICJJbnRlcm5hbCA0NC4xIGtIeiIsICJJbnRlcm5hbCA0OC4wIGtIeiIsICJJbnRlcm5hbCA2NC4wIGtIeiIsICJJbnRlcm5hbCA4OC4yIGtIeiIsICJJbnRlcm5hbCA5Ni4wIGtIeiIsICJJbnRlcm5hbCAxMjgga0h6IiwgIkludGVybmFsIDE3Ni40IGtIeiIsICJJbnRlcm5hbCAxOTIuMCBLSHoiIH07CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKQogCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDEwOwogCWVsc2UKLQkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwkKKwkgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CkBAIC0yMDk0LDcgKzIxMTUsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfY2xvY2tfc291cmNlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2Nsb2NrX3NvdXJjZShoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMDQsNyArMjEyNSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMTMwLDcgKzIxNTEsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfY2xvY2tfc291cmNlX2xvY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwLT5jbG9ja19zb3VyY2VfbG9ja2VkOwogCXJldHVybiAwOwogfQpAQCAtMjE2NSw3ICsyMTg2LDcgQEAKIAljYXNlIEhEU1BfREFHYWluTWludXMxMGRCVjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDE7CQorCQlyZXR1cm4gMTsKIAl9CiB9CiAKQEAgLTIxODAsOCArMjIwMSw4IEBACiAJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9EQUdhaW5QbHVzNGRCdTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluTWludXMxMGRCVjsJCQotCQlicmVhazsJICAgIAorCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfREFHYWluTWludXMxMGRCVjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMTkzLDcgKzIyMTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2RhX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IkhpIEdhaW4iLCAiKzQgZEJ1IiwgIi0xMCBkYlYifTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOwpAQCAtMjIwNiw3ICsyMjI3LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2RhX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGhkc3BfZGFfZ2FpbihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTYsNyArMjIzNyw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CkBAIC0yMjUwLDcgKzIyNzEsNyBAQAogCWNhc2UgSERTUF9BREdhaW5Mb3dHYWluOgogCQlyZXR1cm4gMjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMTsJCisJCXJldHVybiAxOwogCX0KIH0KIApAQCAtMjI2MiwxMSArMjI4MywxMSBAQAogCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluTWludXMxMGRCVjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfQURHYWluUGx1czRkQnU7CQkKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX0FER2FpblBsdXM0ZEJ1OwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5Mb3dHYWluOwkJCi0JCWJyZWFrOwkgICAgCisJCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9BREdhaW5Mb3dHYWluOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CiAKQEAgLTIyNzgsNyArMjI5OSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYWRfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiLTEwIGRCViIsICIrNCBkQnUiLCAiTG8gR2FpbiJ9OwotCQorCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yMjkxLDcgKzIzMTIsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWRfZ2FpbihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hZF9nYWluKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjMwMSw3ICsyMzIyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCWludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKQEAgLTIzMzUsNyArMjM1Niw3IEBACiAJY2FzZSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjoKIAkJcmV0dXJuIDI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CQorCQlyZXR1cm4gMDsKIAl9CiB9CiAKQEAgLTIzNDcsMTEgKzIzNjgsMTEgQEAKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2FpbjBkQjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQloZHNwLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BfUGhvbmVHYWluTWludXM2ZEI7CQkKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzNmRCOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgfD0gSERTUF9QaG9uZUdhaW5NaW51czEyZEI7CQkKLQkJYnJlYWs7CSAgICAKKwkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSBIRFNQX1Bob25lR2Fpbk1pbnVzMTJkQjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC0xOwogCkBAIC0yMzYzLDcgKzIzODQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3Bob25lX2dhaW4oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IjAgZEIiLCAiLTYgZEIiLCAiLTEyIGRCIn07Ci0JCisKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwogCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKQEAgLTIzNzYsNyArMjM5Nyw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9waG9uZV9nYWluKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX3Bob25lX2dhaW4oaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzg2LDcgKzI0MDcsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMjQzMiw3ICsyNDUzLDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X3hscl9icmVha291dF9jYWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQyLDcgKzI0NjMsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNDg4LDcgKzI1MDksNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfYWViKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2FlYihoZHNwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OTgsNyArMjUxOSw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAlpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI1NzYsNyArMjU5Nyw3IEBACiB7CiAJc3RhdGljIGNoYXIgKnRleHRzW10gPSB7IldvcmQiLCAiSUVDOTU4IiwgIkFEQVQxIiwgIkFEQVQgU3luYyIsICJBREFUMiIsICJBREFUMyIgfTsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAKQEAgLTI1OTUsNyArMjYxNiw3IEBACiAJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMDsKIAkJYnJlYWs7CiAJfQotCQkKKwogCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgLSAxOwogCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CkBAIC0yNjA1LDcgKzI2MjYsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcHJlZl9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9wcmVmX3N5bmNfcmVmKGhkc3ApOwogCXJldHVybiAwOwogfQpAQCAtMjYxNSw3ICsyNjM2LDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlLCBtYXg7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMjY2NCw3ICsyNjg1LDcgQEAKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9TUERJRjoKIAkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9TUERJRjsKIAljYXNlIEhEU1BfU2VsU3luY1JlZk1hc2s6Ci0JCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORTsJCisJCXJldHVybiBIRFNQX0FVVE9TWU5DX0ZST01fTk9ORTsKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9BREFUMToKIAkJcmV0dXJuIEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMTsKIAljYXNlIEhEU1BfU2VsU3luY1JlZl9BREFUMjoKQEAgLTI2ODAsNyArMjcwMSw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2luZm9fYXV0b3N5bmNfcmVmKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyJXb3JkIiwgIkFEQVQgU3luYyIsICJJRUM5NTgiLCAiTm9uZSIsICJBREFUMSIsICJBREFUMiIsICJBREFUMyIgfTsKLQkKKwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwogCXVpbmZvLT5jb3VudCA9IDE7CiAJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA3OwpAQCAtMjY5Myw3ICsyNzE0LDcgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2F1dG9zeW5jX3JlZihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JCisKIAl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9hdXRvc3luY19yZWYoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzI3LDcgKzI3NDgsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfbGluZV9vdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCQorCiAJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBoZHNwX2xpbmVfb3V0KGhkc3ApOwogCXNwaW5fdW5sb2NrX2lycSgmaGRzcC0+bG9jayk7CkBAIC0yNzM5LDcgKzI3NjAsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDE7CkBAIC0yNzczLDcgKzI3OTQsNyBAQAogc3RhdGljIGludCBzbmRfaGRzcF9nZXRfcHJlY2lzZV9wb2ludGVyKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+cHJlY2lzZV9wdHI7CiAJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKQEAgLTI3ODUsNyArMjgwNiw3IEBACiAJc3RydWN0IGhkc3AgKmhkc3AgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCQorCiAJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQogCQlyZXR1cm4gLUVCVVNZOwogCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKQEAgLTI4MTksNyArMjg0MCw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF91c2VfbWlkaV90YXNrbGV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmhkc3AtPmxvY2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gaGRzcC0+dXNlX21pZGlfdGFza2xldDsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjgzMSw3ICsyODUyLDcgQEAKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgY2hhbmdlOwogCXVuc2lnbmVkIGludCB2YWw7Ci0JCisKIAlpZiAoIXNuZF9oZHNwX3VzZV9pc19leGNsdXNpdmUoaGRzcCkpCiAJCXJldHVybiAtRUJVU1k7CiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwpAQCAtMjg3MywxMiArMjg5NCwxMiBAQAogCiAJc291cmNlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJZGVzdGluYXRpb24gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKLQkKKwogCWlmIChzb3VyY2UgPj0gaGRzcC0+bWF4X2NoYW5uZWxzKQogCQlhZGRyID0gaGRzcF9wbGF5YmFja190b19vdXRwdXRfa2V5KGhkc3Asc291cmNlLWhkc3AtPm1heF9jaGFubmVscyxkZXN0aW5hdGlvbik7CiAJZWxzZQogCQlhZGRyID0gaGRzcF9pbnB1dF90b19vdXRwdXRfa2V5KGhkc3Asc291cmNlLCBkZXN0aW5hdGlvbik7Ci0JCisKIAlzcGluX2xvY2tfaXJxKCZoZHNwLT5sb2NrKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9IGhkc3BfcmVhZF9nYWluIChoZHNwLCBhZGRyKTsKIAlzcGluX3VubG9ja19pcnEoJmhkc3AtPmxvY2spOwpAQCAtMjkyNiw3ICsyOTQ3LDcgQEAKIAogc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX3N5bmNfY2hlY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzW10gPSB7Ik5vIExvY2siLCAiTG9jayIsICJTeW5jIiB9OwkKKwlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsiTm8gTG9jayIsICJMb2NrIiwgIlN5bmMiIH07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CkBAIC0yOTcxLDcgKzI5OTIsNyBAQAogCWludCBzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZFcnJvckZsYWcpCiAJCXJldHVybiAwOwotCWVsc2UgewkKKwllbHNlIHsKIAkJaWYgKHN0YXR1cyAmIEhEU1BfU1BESUZTeW5jKQogCQkJcmV0dXJuIDI7CiAJCWVsc2UKQEAgLTMwMDcsNyArMzAyOCw3IEBACiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7Ci19CQorfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9hZGF0c3luY19zeW5jX2NoZWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTMwMjUsMTcgKzMwNDYsMTcgQEAKIH0KIAogc3RhdGljIGludCBoZHNwX2FkYXRfc3luY19jaGVjayhzdHJ1Y3QgaGRzcCAqaGRzcCwgaW50IGlkeCkKLXsJCit7CiAJaW50IHN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKLQkKKwogCWlmIChzdGF0dXMgJiAoSERTUF9Mb2NrMD4+aWR4KSkgewogCQlpZiAoc3RhdHVzICYgKEhEU1BfU3luYzA+PmlkeCkpCiAJCQlyZXR1cm4gMjsKIAkJZWxzZQotCQkJcmV0dXJuIDE7CQkKKwkJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKLX0gCit9CiAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZ2V0X2FkYXRfc3luY19jaGVjayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0zMDUzLDcgKzMwNzQsNyBAQAogCQlicmVhazsKIAljYXNlIE11bHRpZmFjZToKIAljYXNlIEg5NjMyOgotCQlpZiAob2Zmc2V0ID49IDEpIAorCQlpZiAob2Zmc2V0ID49IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxMTUsNyArMzEzNiw3IEBACiBzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9kZHNfb2Zmc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQkKKwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBoZHNwX2Rkc19vZmZzZXQoaGRzcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTI1LDcgKzMxNDYsNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2U7CiAJaW50IHZhbDsKLQkKKwogCWlmICghc25kX2hkc3BfdXNlX2lzX2V4Y2x1c2l2ZShoZHNwKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwpAQCAtMzE3MCw3ICszMTkxLDcgQEAKIAkuZ2V0ID0JCXNuZF9oZHNwX2NvbnRyb2xfc3BkaWZfbWFza19nZXQsCiAJLnByaXZhdGVfdmFsdWUgPSBJRUM5NThfQUVTMF9OT05BVURJTyB8CiAgIAkJCSBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUwgfAotCQkJIElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJUywJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVMsCiB9LAogewogCS5hY2Nlc3MgPQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKQEAgLTMxODgsNyArMzIwOSw3IEBACiBIRFNQX1NQRElGX1BST0ZFU1NJT05BTCgiSUVDOTU4IFByb2Zlc3Npb25hbCBCaXQiLCAwKSwKIEhEU1BfU1BESUZfRU1QSEFTSVMoIklFQzk1OCBFbXBoYXNpcyBCaXQiLCAwKSwKIEhEU1BfU1BESUZfTk9OX0FVRElPKCJJRUM5NTggTm9uLWF1ZGlvIEJpdCIsIDApLAotLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovIAorLyogJ1NhbXBsZSBDbG9jayBTb3VyY2UnIGNvbXBsaWVzIHdpdGggdGhlIGFsc2EgY29udHJvbCBuYW1pbmcgc2NoZW1lICovCiBIRFNQX0NMT0NLX1NPVVJDRSgiU2FtcGxlIENsb2NrIFNvdXJjZSIsIDApLAogewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMzI0MCw3ICszMjYxLDcgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCQorCiAJLyogREEsIEFEIGFuZCBQaG9uZSBnYWluIGFuZCBYTFIgYnJlYWtvdXQgY2FibGUgY29udHJvbHMgZm9yIEg5NjMyIGNhcmRzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9oZHNwXzk2MzJfY29udHJvbHMpOyBpZHgrKykgewpAQCAtMzI1OSw3ICszMjgwLDcgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIC9wcm9jIGludGVyZmFjZSAKKyAgIC9wcm9jIGludGVyZmFjZQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCkBAIC0zMjk4LDcgKzMzMTksNyBAQAogCQkJfQogCQl9CiAJfQotCQorCiAJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOwogCXN0YXR1czIgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpOwogCkBAIC0zMzYyLDE3ICszMzgzLDE3IEBACiAJCWJyZWFrOwogCQljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0lOVEVSTkFMXzE5MktIWjoKIAkJY2xvY2tfc291cmNlID0gIkludGVybmFsIDE5MiBrSHoiOwotCQlicmVhazsJCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWNsb2NrX3NvdXJjZSA9ICJFcnJvciI7CQkKKwkJY2xvY2tfc291cmNlID0gIkVycm9yIjsKIAl9CiAJc25kX2lwcmludGYgKGJ1ZmZlciwgIlNhbXBsZSBDbG9jayBTb3VyY2U6ICVzXG4iLCBjbG9ja19zb3VyY2UpOwotCQkJCisKIAlpZiAoaGRzcF9zeXN0ZW1fY2xvY2tfbW9kZShoZHNwKSkKIAkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiU2xhdmUiOwogCWVsc2UKIAkJc3lzdGVtX2Nsb2NrX21vZGUgPSAiTWFzdGVyIjsKLQkKKwogCXN3aXRjaCAoaGRzcF9wcmVmX3N5bmNfcmVmIChoZHNwKSkgewogCWNhc2UgSERTUF9TWU5DX0ZST01fV09SRDoKIAkJcHJlZl9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKQEAgLTMzOTcsNyArMzQxOCw3IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiUHJlZmVycmVkIFN5bmMgUmVmZXJlbmNlOiAlc1xuIiwgcHJlZl9zeW5jX3JlZik7Ci0JCisKIAlzd2l0Y2ggKGhkc3BfYXV0b3N5bmNfcmVmIChoZHNwKSkgewogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX1dPUkQ6CiAJCWF1dG9zeW5jX3JlZiA9ICJXb3JkIENsb2NrIjsKQEAgLTM0MTAsNyArMzQzMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgSERTUF9BVVRPU1lOQ19GUk9NX05PTkU6CiAJCWF1dG9zeW5jX3JlZiA9ICJOb25lIjsKLQkJYnJlYWs7CQorCQlicmVhazsKIAljYXNlIEhEU1BfQVVUT1NZTkNfRlJPTV9BREFUMToKIAkJYXV0b3N5bmNfcmVmID0gIkFEQVQxIjsKIAkJYnJlYWs7CkBAIC0zNDI1LDE0ICszNDQ2LDE0IEBACiAJCWJyZWFrOwogCX0KIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiQXV0b1N5bmMgUmVmZXJlbmNlOiAlc1xuIiwgYXV0b3N5bmNfcmVmKTsKLQkKKwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJBdXRvU3luYyBGcmVxdWVuY3k6ICVkXG4iLCBoZHNwX2V4dGVybmFsX3NhbXBsZV9yYXRlKGhkc3ApKTsKLQkKKwogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgTW9kZTogJXNcbiIsIHN5c3RlbV9jbG9ja19tb2RlKTsKIAogCXNuZF9pcHJpbnRmIChidWZmZXIsICJTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5OiAlZFxuIiwgaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlKTsKIAlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU3lzdGVtIENsb2NrIExvY2tlZDogJXNcbiIsIGhkc3AtPmNsb2NrX3NvdXJjZV9sb2NrZWQgPyAiWWVzIiA6ICJObyIpOwotCQkKKwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAKIAlzd2l0Y2ggKGhkc3Bfc3BkaWZfaW4oaGRzcCkpIHsKQEAgLTM0NTIsNyArMzQ3Myw3IEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklFQzk1OCBpbnB1dDogPz8/XG4iKTsKIAkJYnJlYWs7CiAJfQotCQorCiAJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX1NQRElGT3B0aWNhbE91dCkKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiSUVDOTU4IG91dHB1dDogQ29heGlhbCAmIEFEQVQxXG4iKTsKIAllbHNlCkBAIC0zNTEwLDEzICszNTMxLDEzIEBACiAJCXNuZF9pcHJpbnRmIChidWZmZXIsICJTUERJRjogTm8gTG9ja1xuIik7CiAJZWxzZQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiU1BESUY6ICVzXG4iLCB4ID8gIlN5bmMiIDogIkxvY2siKTsKLQkKKwogCXggPSBzdGF0dXMyICYgSERTUF93Y19zeW5jOwogCWlmIChzdGF0dXMyICYgSERTUF93Y19sb2NrKQogCQlzbmRfaXByaW50ZiAoYnVmZmVyLCAiV29yZCBDbG9jazogJXNcbiIsIHggPyAiU3luYyIgOiAiTG9jayIpOwogCWVsc2UKIAkJc25kX2lwcmludGYgKGJ1ZmZlciwgIldvcmQgQ2xvY2s6IE5vIExvY2tcbiIpOwotCQorCiAJeCA9IHN0YXR1cyAmIEhEU1BfVGltZWNvZGVTeW5jOwogCWlmIChzdGF0dXMgJiBIRFNQX1RpbWVjb2RlTG9jaykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQURBVCBTeW5jOiAlc1xuIiwgeCA/ICJTeW5jIiA6ICJMb2NrIik7CkBAIC0zNTI0LDExICszNTQ1LDExIEBACiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQVQgU3luYzogTm8gTG9ja1xuIik7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwotCQorCiAJLyogSW5mb3JtYXRpb25zIGFib3V0IEg5NjMyIHNwZWNpZmljIGNvbnRyb2xzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJY2hhciAqdG1wOwotCQorCiAJCXN3aXRjaCAoaGRzcF9hZF9nYWluKGhkc3ApKSB7CiAJCWNhc2UgMDoKIAkJCXRtcCA9ICItMTAgZEJWIjsKQEAgLTM1NTQsNyArMzU3NSw3IEBACiAJCQlicmVhazsKIAkJfQogCQlzbmRfaXByaW50ZihidWZmZXIsICJEQSBHYWluIDogJXNcbiIsIHRtcCk7Ci0JCQorCiAJCXN3aXRjaCAoaGRzcF9waG9uZV9nYWluKGhkc3ApKSB7CiAJCWNhc2UgMDoKIAkJCXRtcCA9ICIwIGRCIjsKQEAgLTM1NjgsOCArMzU4OSw4IEBACiAJCX0KIAkJc25kX2lwcmludGYoYnVmZmVyLCAiUGhvbmVzIEdhaW4gOiAlc1xuIiwgdG1wKTsKIAotCQlzbmRfaXByaW50ZihidWZmZXIsICJYTFIgQnJlYWtvdXQgQ2FibGUgOiAlc1xuIiwgaGRzcF94bHJfYnJlYWtvdXRfY2FibGUoaGRzcCkgPyAieWVzIiA6ICJubyIpOwkKLQkJCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlhMUiBCcmVha291dCBDYWJsZSA6ICVzXG4iLCBoZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKSA/ICJ5ZXMiIDogIm5vIik7CisKIAkJaWYgKGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQX0FuYWxvZ0V4dGVuc2lvbkJvYXJkKQogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiQUVCIDogb24gKEFEQVQxIGludGVybmFsKVxuIik7CiAJCWVsc2UKQEAgLTM2MzIsMTggKzM2NTMsMTggQEAKIAogCS8qIHNldCBkZWZhdWx0czoKIAotCSAgIFNQRElGIElucHV0IHZpYSBDb2F4IAorCSAgIFNQRElGIElucHV0IHZpYSBDb2F4CiAJICAgTWFzdGVyIGNsb2NrIG1vZGUKIAkgICBtYXhpbXVtIGxhdGVuY3kgKDcgPT4gMl43ID0gODE5MiBzYW1wbGVzLCA2NEtieXRlIGJ1ZmZlciwKIAkgICAgICAgICAgICAgICAgICAgIHdoaWNoIGltcGxpZXMgMiA0MDk2IHNhbXBsZSwgMzJLYnl0ZSBwZXJpb2RzKS4KLSAgICAgICAgICAgRW5hYmxlIGxpbmUgb3V0LgkJCSAgICAKKyAgICAgICAgICAgRW5hYmxlIGxpbmUgb3V0LgogCSAqLwogCi0JaGRzcC0+Y29udHJvbF9yZWdpc3RlciA9IEhEU1BfQ2xvY2tNb2RlTWFzdGVyIHwgCi0JCSAgICAgICAgICAgICAgICAgSERTUF9TUERJRklucHV0Q29heGlhbCB8IAotCQkgICAgICAgICAgICAgICAgIGhkc3BfZW5jb2RlX2xhdGVuY3koNykgfCAKKwloZHNwLT5jb250cm9sX3JlZ2lzdGVyID0gSERTUF9DbG9ja01vZGVNYXN0ZXIgfAorCQkgICAgICAgICAgICAgICAgIEhEU1BfU1BESUZJbnB1dENvYXhpYWwgfAorCQkgICAgICAgICAgICAgICAgIGhkc3BfZW5jb2RlX2xhdGVuY3koNykgfAogCQkgICAgICAgICAgICAgICAgIEhEU1BfTGluZU91dDsKLQkKKwogCiAJaGRzcF93cml0ZShoZHNwLCBIRFNQX2NvbnRyb2xSZWdpc3RlciwgaGRzcC0+Y29udHJvbF9yZWdpc3Rlcik7CiAKQEAgLTM2NjEsNyArMzY4Miw3IEBACiAJaGRzcF9jb21wdXRlX3BlcmlvZF9zaXplKGhkc3ApOwogCiAJLyogc2lsZW5jZSBldmVyeXRoaW5nICovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgSERTUF9NQVRSSVhfTUlYRVJfU0laRTsgKytpKQogCQloZHNwLT5taXhlcl9tYXRyaXhbaV0gPSBNSU5VU19JTkZJTklUWV9HQUlOOwogCkBAIC0zNjY5LDcgKzM2OTAsNyBAQAogCQlpZiAoaGRzcF93cml0ZV9nYWluIChoZHNwLCBpLCBNSU5VU19JTkZJTklUWV9HQUlOKSkKIAkJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCS8qIEg5NjMyIHNwZWNpZmljIGRlZmF1bHRzICovCiAJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpIHsKIAkJaGRzcC0+Y29udHJvbF9yZWdpc3RlciB8PSAoSERTUF9EQUdhaW5QbHVzNGRCdSB8IEhEU1BfQURHYWluUGx1czRkQnUgfCBIRFNQX1Bob25lR2FpbjBkQik7CkBAIC0zNjg3LDEyICszNzA4LDEyIEBACiBzdGF0aWMgdm9pZCBoZHNwX21pZGlfdGFza2xldCh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWFyZzsKLQkKKwogCWlmIChoZHNwLT5taWRpWzBdLnBlbmRpbmcpCiAJCXNuZF9oZHNwX21pZGlfaW5wdXRfcmVhZCAoJmhkc3AtPm1pZGlbMF0pOwogCWlmIChoZHNwLT5taWRpWzFdLnBlbmRpbmcpCiAJCXNuZF9oZHNwX21pZGlfaW5wdXRfcmVhZCAoJmhkc3AtPm1pZGlbMV0pOwotfSAKK30KIAogc3RhdGljIGlycXJldHVybl90IHNuZF9oZHNwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0zNzA0LDcgKzM3MjUsNyBAQAogCXVuc2lnbmVkIGludCBtaWRpMHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgbWlkaTFzdGF0dXM7CiAJaW50IHNjaGVkdWxlID0gMDsKLQkKKwogCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKIAogCWF1ZGlvID0gc3RhdHVzICYgSERTUF9hdWRpb0lSUVBlbmRpbmc7CkBAIC0zNzE4LDE1ICszNzM5LDE4IEBACiAKIAltaWRpMHN0YXR1cyA9IGhkc3BfcmVhZCAoaGRzcCwgSERTUF9taWRpU3RhdHVzSW4wKSAmIDB4ZmY7CiAJbWlkaTFzdGF0dXMgPSBoZHNwX3JlYWQgKGhkc3AsIEhEU1BfbWlkaVN0YXR1c0luMSkgJiAweGZmOwotCQorCisJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKIAlpZiAoYXVkaW8pIHsKIAkJaWYgKGhkc3AtPmNhcHR1cmVfc3Vic3RyZWFtKQogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChoZHNwLT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0pOwotCQkKKwogCQlpZiAoaGRzcC0+cGxheWJhY2tfc3Vic3RyZWFtKQogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChoZHNwLT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtKTsKIAl9Ci0JCisKIAlpZiAobWlkaTAgJiYgbWlkaTBzdGF0dXMpIHsKIAkJaWYgKGhkc3AtPnVzZV9taWRpX3Rhc2tsZXQpIHsKIAkJCS8qIHdlIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnB1dCB1bnRpbCBwcm9jZXNzaW5nIGlzIGRvbmUgKi8KQEAgLTM3NjksMTAgKzM3OTMsMTAgQEAKIAogICAgICAgICBpZiAoc25kX0JVR19PTihjaGFubmVsIDwgMCB8fCBjaGFubmVsID49IGhkc3AtPm1heF9jaGFubmVscykpCiAJCXJldHVybiBOVUxMOwotICAgICAgICAKKwogCWlmICgobWFwcGVkX2NoYW5uZWwgPSBoZHNwLT5jaGFubmVsX21hcFtjaGFubmVsXSkgPCAwKQogCQlyZXR1cm4gTlVMTDsKLQkKKwogCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQogCQlyZXR1cm4gaGRzcC0+Y2FwdHVyZV9idWZmZXIgKyAobWFwcGVkX2NoYW5uZWwgKiBIRFNQX0NIQU5ORUxfQlVGRkVSX0JZVEVTKTsKIAllbHNlCkBAIC0zOTY1LDcgKzM5ODksNyBAQAogCXN0cnVjdCBoZHNwICpoZHNwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqb3RoZXI7CiAJaW50IHJ1bm5pbmc7Ci0JCisKIAlpZiAoaGRzcF9jaGVja19mb3JfaW9ib3ggKGhkc3ApKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNDA1OSwxMCArNDA4MywxMCBAQAogCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogI2VuZGlmCiAJLnJhdGVzID0JCShTTkRSVl9QQ01fUkFURV8zMjAwMCB8Ci0JCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwgCi0JCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgCisJCQkJIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV82NDAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKIAkJCQkgU05EUlZfUENNX1JBVEVfOTYwMDApLAogCS5yYXRlX21pbiA9CQkzMjAwMCwKIAkucmF0ZV9tYXggPQkJOTYwMDAsCkBAIC00MDg4LDEwICs0MTEyLDEwIEBACiAJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAjZW5kaWYKIAkucmF0ZXMgPQkJKFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKLQkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfNjQwMDAgfCAKLQkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfCAKKwkJCQkgU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkJIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgU05EUlZfUENNX1JBVEVfODgyMDAgfAogCQkJCSBTTkRSVl9QQ01fUkFURV85NjAwMCksCiAJLnJhdGVfbWluID0JCTMyMDAwLAogCS5yYXRlX21heCA9CQk5NjAwMCwKQEAgLTQxNzAsNyArNDE5NCw3IEBACiAJCQkubWF4ID0gaGRzcC0+cXNfaW5fY2hhbm5lbHMsCiAJCQkuaW50ZWdlciA9IDEsCiAJCX07Ci0JCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsJCisJCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZ0KTsKIAl9IGVsc2UgaWYgKHItPm1pbiA+IDQ4MDAwICYmIHItPm1heCA8PSA5NjAwMCkgewogCQlzdHJ1Y3Qgc25kX2ludGVydmFsIHQgPSB7CiAJCQkubWluID0gaGRzcC0+ZHNfaW5fY2hhbm5lbHMsCkBAIC00MjAxLDcgKzQyMjUsNyBAQAogCQkJLm1heCA9IGhkc3AtPnFzX291dF9jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKLQkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwkKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwogCX0gZWxzZSBpZiAoci0+bWluID4gNDgwMDAgJiYgci0+bWF4IDw9IDk2MDAwKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMsCkBAIC00MzE4LDggKzQzNDIsOCBAQAogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjMyKSB7CiAJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiA9IGhkc3AtPnFzX291dF9jaGFubmVsczsKIAkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzOwotCX0JCi0JCisJfQorCiAJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCiAJCQkgICAgIHNuZF9oZHNwX2h3X3J1bGVfb3V0X2NoYW5uZWxzLCBoZHNwLAogCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKQEAgLTQ0MTMsMTMgKzQ0MzcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZHNwX2h3ZGVwX2R1bW15X29wKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiB3ZSBoYXZlIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBidXQgdGhlIGNhbGwgaXMgcmVxdWlyZWQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCiAvKiBoZWxwZXIgZnVuY3Rpb25zIGZvciBjb3B5aW5nIG1ldGVyIHZhbHVlcyAqLwogc3RhdGljIGlubGluZSBpbnQgY29weV91MzJfbGUodm9pZCBfX3VzZXIgKmRlc3QsIHZvaWQgX19pb21lbSAqc3JjKQogewpAQCAtNDUzNiw3ICs0NTUzLDcgQEAKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX3BsYXliYWNrUm1zTGV2ZWwgKyBpICogOCArIDQsCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9wbGF5YmFja1Jtc0xldmVsICsgaSAqIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3U2NF9sZSgmcGVha19ybXMtPmlucHV0X3Jtc1tpXSwgCisJCWlmIChjb3B5X3U2NF9sZSgmcGVha19ybXMtPmlucHV0X3Jtc1tpXSwKIAkJCQloZHNwLT5pb2Jhc2UgKyBIRFNQX2lucHV0Um1zTGV2ZWwgKyBpICogOCArIDQsCiAJCQkJaGRzcC0+aW9iYXNlICsgSERTUF9pbnB1dFJtc0xldmVsICsgaSAqIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NTQ2LDcgKzQ1NjMsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2h3ZGVwX2lvY3RsKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGhkc3AgKmhkc3AgPSAoc3RydWN0IGhkc3AgKilody0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IChzdHJ1Y3QgaGRzcCAqKWh3LT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVycjsKIApAQCAtNDU4MCw3ICs0NTk3LDcgQEAKIAkJc3RydWN0IGhkc3BfY29uZmlnX2luZm8gaW5mbzsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJaW50IGk7Ci0JCQorCiAJCWVyciA9IGhkc3BfY2hlY2tfZm9yX2lvYm94KGhkc3ApOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC00NjE0LDcgKzQ2MzEsNyBAQAogCQkJaW5mby5hZF9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9hZF9nYWluKGhkc3ApOwogCQkJaW5mby5waG9uZV9nYWluID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9waG9uZV9nYWluKGhkc3ApOwogCQkJaW5mby54bHJfYnJlYWtvdXRfY2FibGUgPSAodW5zaWduZWQgY2hhciloZHNwX3hscl9icmVha291dF9jYWJsZShoZHNwKTsKLQkJCisKIAkJfQogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTYzMiB8fCBoZHNwLT5pb190eXBlID09IEg5NjUyKQogCQkJaW5mby5hbmFsb2dfZXh0ZW5zaW9uX2JvYXJkID0gKHVuc2lnbmVkIGNoYXIpaGRzcF9hZWIoaGRzcCk7CkBAIC00NjI1LDcgKzQ2NDIsNyBAQAogCX0KIAljYXNlIFNORFJWX0hEU1BfSU9DVExfR0VUXzk2MzJfQUVCOiB7CiAJCXN0cnVjdCBoZHNwXzk2MzJfYWViIGg5NjMyX2FlYjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgIT0gSDk2MzIpIHJldHVybiAtRUlOVkFMOwogCQloOTYzMl9hZWIuYWViaSA9IGhkc3AtPnNzX2luX2NoYW5uZWxzIC0gSDk2MzJfU1NfQ0hBTk5FTFM7CiAJCWg5NjMyX2FlYi5hZWJvID0gaGRzcC0+c3Nfb3V0X2NoYW5uZWxzIC0gSDk2MzJfU1NfQ0hBTk5FTFM7CkBAIC00NjM2LDcgKzQ2NTMsNyBAQAogCWNhc2UgU05EUlZfSERTUF9JT0NUTF9HRVRfVkVSU0lPTjogewogCQlzdHJ1Y3QgaGRzcF92ZXJzaW9uIGhkc3BfdmVyc2lvbjsKIAkJaW50IGVycjsKLQkJCisKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikgcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgewogCQkJaWYgKChlcnIgPSBoZHNwX2dldF9pb2JveF92ZXJzaW9uKGhkc3ApKSA8IDApCkBAIC00NjUyLDcgKzQ2NjksNyBAQAogCQlzdHJ1Y3QgaGRzcF9maXJtd2FyZSBfX3VzZXIgKmZpcm13YXJlOwogCQl1MzIgX191c2VyICpmaXJtd2FyZV9kYXRhOwogCQlpbnQgZXJyOwotCQkKKwogCQlpZiAoaGRzcC0+aW9fdHlwZSA9PSBIOTY1MiB8fCBoZHNwLT5pb190eXBlID09IEg5NjMyKSByZXR1cm4gLUVJTlZBTDsKIAkJLyogU05EUlZfSERTUF9JT0NUTF9HRVRfVkVSU0lPTiBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgKi8KIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gVW5kZWZpbmVkKSByZXR1cm4gLUVJTlZBTDsKQEAgLTQ2NjUsMjUgKzQ2ODIsMjUgQEAKIAogCQlpZiAoZ2V0X3VzZXIoZmlybXdhcmVfZGF0YSwgJmZpcm13YXJlLT5maXJtd2FyZV9kYXRhKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQkKKwogCQlpZiAoaGRzcF9jaGVja19mb3JfaW9ib3ggKGhkc3ApKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGhkc3AtPmZpcm13YXJlX2NhY2hlLCBmaXJtd2FyZV9kYXRhLCBzaXplb2YoaGRzcC0+ZmlybXdhcmVfY2FjaGUpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQorCiAJCWhkc3AtPnN0YXRlIHw9IEhEU1BfRmlybXdhcmVDYWNoZWQ7CiAKIAkJaWYgKChlcnIgPSBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkpIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCQorCiAJCWlmICghKGhkc3AtPnN0YXRlICYgSERTUF9Jbml0aWFsaXphdGlvbkNvbXBsZXRlKSkgewogCQkJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJCi0JCQlzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKGhkc3ApOwkJCisKKwkJCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CiAJCQlzbmRfaGRzcF9pbml0aWFsaXplX21pZGlfZmx1c2goaGRzcCk7Ci0JICAgIAorCiAJCQlpZiAoKGVyciA9IHNuZF9oZHNwX2NyZWF0ZV9hbHNhX2RldmljZXMoaGRzcC0+Y2FyZCwgaGRzcCkpIDwgMCkgewogCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBlcnJvciBjcmVhdGluZyBhbHNhIGRldmljZXNcbiIpOwogCQkJCXJldHVybiBlcnI7CkBAIC00NzMwLDE4ICs0NzQ3LDE2IEBACiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHc7CiAJaW50IGVycjsKLQkKKwogCWlmICgoZXJyID0gc25kX2h3ZGVwX25ldyhjYXJkLCAiSERTUCBod2RlcCIsIDAsICZodykpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkJCisKIAloZHNwLT5od2RlcCA9IGh3OwogCWh3LT5wcml2YXRlX2RhdGEgPSBoZHNwOwogCXN0cmNweShody0+bmFtZSwgIkhEU1AgaHdkZXAgaW50ZXJmYWNlIik7CiAKLQlody0+b3BzLm9wZW4gPSBzbmRfaGRzcF9od2RlcF9kdW1teV9vcDsKIAlody0+b3BzLmlvY3RsID0gc25kX2hkc3BfaHdkZXBfaW9jdGw7Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2hkc3BfaHdkZXBfZHVtbXlfb3A7Ci0JCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NzQsMjQgKzQ3ODksMjQgQEAKIHN0YXRpYyBpbnQgc25kX2hkc3BfZW5hYmxlX2lvIChzdHJ1Y3QgaGRzcCAqaGRzcCkKIHsKIAlpbnQgaTsKLQkKKwogCWlmIChoZHNwX2ZpZm9fd2FpdCAoaGRzcCwgMCwgMTAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZW5hYmxlX2lvIGZpZm9fd2FpdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgaGRzcC0+bWF4X2NoYW5uZWxzOyArK2kpIHsKIAkJaGRzcF93cml0ZSAoaGRzcCwgSERTUF9pbnB1dEVuYWJsZSArICg0ICogaSksIDEpOwogCQloZHNwX3dyaXRlIChoZHNwLCBIRFNQX291dHB1dEVuYWJsZSArICg0ICogaSksIDEpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfaGRzcF9pbml0aWFsaXplX2NoYW5uZWxzKHN0cnVjdCBoZHNwICpoZHNwKQogewogCWludCBzdGF0dXMsIGFlYmlfY2hhbm5lbHMsIGFlYm9fY2hhbm5lbHM7Ci0JCisKIAlzd2l0Y2ggKGhkc3AtPmlvX3R5cGUpIHsKIAljYXNlIERpZ2lmYWNlOgogCQloZHNwLT5jYXJkX25hbWUgPSAiUk1FIEhhbW1lcmZhbGwgRFNQICsgRGlnaWZhY2UiOwpAQCAtNDgwNCw3ICs0ODE5LDcgQEAKIAkJaGRzcC0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgPSBIOTY1Ml9TU19DSEFOTkVMUzsKIAkJaGRzcC0+ZHNfaW5fY2hhbm5lbHMgPSBoZHNwLT5kc19vdXRfY2hhbm5lbHMgPSBIOTY1Ml9EU19DSEFOTkVMUzsKIAkJYnJlYWs7Ci0JCisKIAljYXNlIEg5NjMyOgogCQlzdGF0dXMgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXNSZWdpc3Rlcik7CiAJCS8qIEhEU1BfQUVCeCBiaXRzIGFyZSBsb3cgd2hlbiBBRUIgYXJlIGNvbm5lY3RlZCAqLwpAQCAtNDgyNCw3ICs0ODM5LDcgQEAKIAkJaGRzcC0+c3NfaW5fY2hhbm5lbHMgPSBoZHNwLT5zc19vdXRfY2hhbm5lbHMgPSBNVUxUSUZBQ0VfU1NfQ0hBTk5FTFM7CiAJCWhkc3AtPmRzX2luX2NoYW5uZWxzID0gaGRzcC0+ZHNfb3V0X2NoYW5uZWxzID0gTVVMVElGQUNFX0RTX0NIQU5ORUxTOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogIAkJLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCiAJCWJyZWFrOwpAQCAtNDg0MCwxMiArNDg1NSwxMiBAQAogc3RhdGljIGludCBzbmRfaGRzcF9jcmVhdGVfYWxzYV9kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGhkc3AgKmhkc3ApCiB7CiAJaW50IGVycjsKLQkKKwogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX3BjbShjYXJkLCBoZHNwKSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiBFcnJvciBjcmVhdGluZyBwY20gaW50ZXJmYWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JCisKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX21pZGkoY2FyZCwgaGRzcCwgMCkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3IgY3JlYXRpbmcgZmlyc3QgbWlkaSBpbnRlcmZhY2VcbiIpOwpAQCAtNDg3NiwxOSArNDg5MSwxOSBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogRXJyb3Igc2V0dGluZyBkZWZhdWx0IHZhbHVlc1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQotCQorCiAJaWYgKCEoaGRzcC0+c3RhdGUgJiBIRFNQX0luaXRpYWxpemF0aW9uQ29tcGxldGUpKSB7CiAJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIYW1tZXJmYWxsIERTUCIpOwotCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwgCisJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLAogCQkJaGRzcC0+cG9ydCwgaGRzcC0+aXJxKTsKLQkgICAgCisKIAkJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJIYW1tZXJmYWxsLURTUDogZXJyb3IgcmVnaXN0ZXJpbmcgY2FyZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWhkc3AtPnN0YXRlIHw9IEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZTsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg5OSw3ICs0OTE0LDcgQEAKIAljb25zdCBjaGFyICpmd2ZpbGU7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgZXJyOwotCQkKKwogCWlmIChoZHNwLT5pb190eXBlID09IEg5NjUyIHx8IGhkc3AtPmlvX3R5cGUgPT0gSDk2MzIpCiAJCXJldHVybiAwOwogCWlmIChoZHNwLT5pb190eXBlID09IFVuZGVmaW5lZCkgewpAQCAtNDkwOCw3ICs0OTIzLDcgQEAKIAkJaWYgKGhkc3AtPmlvX3R5cGUgPT0gSDk2NTIgfHwgaGRzcC0+aW9fdHlwZSA9PSBIOTYzMikKIAkJCXJldHVybiAwOwogCX0KLQkKKwogCS8qIGNhdXRpb246IG1heCBsZW5ndGggb2YgZmlybXdhcmUgZmlsZW5hbWUgaXMgMzAhICovCiAJc3dpdGNoIChoZHNwLT5pb190eXBlKSB7CiAJY2FzZSBNdWx0aWZhY2U6CkBAIC00OTQyLDEyICs0OTU3LDEyIEBACiAJbWVtY3B5KGhkc3AtPmZpcm13YXJlX2NhY2hlLCBmdy0+ZGF0YSwgc2l6ZW9mKGhkc3AtPmZpcm13YXJlX2NhY2hlKSk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQkJCisKIAloZHNwLT5zdGF0ZSB8PSBIRFNQX0Zpcm13YXJlQ2FjaGVkOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkJCisKIAlpZiAoIShoZHNwLT5zdGF0ZSAmIEhEU1BfSW5pdGlhbGl6YXRpb25Db21wbGV0ZSkpIHsKIAkJaWYgKChlcnIgPSBzbmRfaGRzcF9lbmFibGVfaW8oaGRzcCkpIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC00OTk0LDE0ICs1MDA5LDE0IEBACiAJaGRzcC0+bWF4X2NoYW5uZWxzID0gMjY7CiAKIAloZHNwLT5jYXJkID0gY2FyZDsKLQkKKwogCXNwaW5fbG9ja19pbml0KCZoZHNwLT5sb2NrKTsKIAogCXRhc2tsZXRfaW5pdCgmaGRzcC0+bWlkaV90YXNrbGV0LCBoZHNwX21pZGlfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpaGRzcCk7Ci0JCisKIAlwY2lfcmVhZF9jb25maWdfd29yZChoZHNwLT5wY2ksIFBDSV9DTEFTU19SRVZJU0lPTiwgJmhkc3AtPmZpcm13YXJlX3Jldik7CiAJaGRzcC0+ZmlybXdhcmVfcmV2ICY9IDB4ZmY7Ci0JCisKIAkvKiBGcm9tIE1hcnRpbiBCam9lcm5zZW4gOgogCSAgICAiSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGNhcmQncyBsYXRlbmN5IHRpbWVyIHJlZ2lzdGVyIGluCiAJICAgIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBzZXQgdG8gYSB2YWx1ZSBtdWNoIGxhcmdlcgpAQCAtNTAxMCw3ICs1MDI1LDcgQEAKIAkgICAgdG8gaXRzIG1heGltdW0gMjU1IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc29tZSBjb21wdXRlcnMuIgogCSovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGhkc3AtPnBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIDB4RkYpOwotCQorCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkgtRFNQIik7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIlhpbGlueCBGUEdBIik7CiAKQEAgLTUwMjQsNyArNTAzOSw3IEBACiAJfSBlbHNlIHsKIAkJaGRzcC0+Y2FyZF9uYW1lID0gIlJNRSBIRFNQIDk2MzIiOwogCQloZHNwLT5tYXhfY2hhbm5lbHMgPSAxNjsKLQkJaXNfOTYzMiA9IDE7CQorCQlpc185NjMyID0gMTsKIAl9CiAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKQEAgLTUwNTMsMTIgKzUwNjgsMTIgQEAKIAogCWlmICgoZXJyID0gc25kX2hkc3BfaW5pdGlhbGl6ZV9tZW1vcnkoaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKLQlpZiAoIWlzXzk2NTIgJiYgIWlzXzk2MzIpIHsKLQkJLyogd2Ugd2FpdCAyIHNlY29uZHMgdG8gbGV0IGZyZXNobHkgaW5zZXJ0ZWQgY2FyZGJ1cyBjYXJkcyBkbyB0aGVpciBoYXJkd2FyZSBpbml0ICovCi0JCXNzbGVlcCgyKTsKIAotCQllcnIgPSBoZHNwX2NoZWNrX2Zvcl9pb2JveChoZHNwKTsKKwlpZiAoIWlzXzk2NTIgJiYgIWlzXzk2MzIpIHsKKwkJLyogd2Ugd2FpdCBhIG1heGltdW0gb2YgMTAgc2Vjb25kcyB0byBsZXQgZnJlc2hseQorCQkgKiBpbnNlcnRlZCBjYXJkYnVzIGNhcmRzIGRvIHRoZWlyIGhhcmR3YXJlIGluaXQgKi8KKwkJZXJyID0gaGRzcF93YWl0X2Zvcl9pb2JveChoZHNwLCAxMDAwLCAxMCk7CisKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC01MDgwLDM1ICs1MDk1LDM1IEBACiAJCQkJcmV0dXJuIGVycjsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgewotCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIkhhbW1lcmZhbGwtRFNQOiBGaXJtd2FyZSBhbHJlYWR5IHByZXNlbnQsIGluaXRpYWxpemluZyBjYXJkLlxuIik7CSAgICAKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJIYW1tZXJmYWxsLURTUDogRmlybXdhcmUgYWxyZWFkeSBwcmVzZW50LCBpbml0aWFsaXppbmcgY2FyZC5cbiIpOwogCQkJaWYgKGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1czJSZWdpc3RlcikgJiBIRFNQX3ZlcnNpb24xKQogCQkJCWhkc3AtPmlvX3R5cGUgPSBNdWx0aWZhY2U7Ci0JCQllbHNlIAorCQkJZWxzZQogCQkJCWhkc3AtPmlvX3R5cGUgPSBEaWdpZmFjZTsKIAkJfQogCX0KLQkKKwogCWlmICgoZXJyID0gc25kX2hkc3BfZW5hYmxlX2lvKGhkc3ApKSAhPSAwKQogCQlyZXR1cm4gZXJyOwotCQorCiAJaWYgKGlzXzk2NTIpCiAJICAgICAgICBoZHNwLT5pb190eXBlID0gSDk2NTI7Ci0JCisKIAlpZiAoaXNfOTYzMikKIAkJaGRzcC0+aW9fdHlwZSA9IEg5NjMyOwogCiAJaWYgKChlcnIgPSBzbmRfaGRzcF9jcmVhdGVfaHdkZXAoY2FyZCwgaGRzcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKKwogCXNuZF9oZHNwX2luaXRpYWxpemVfY2hhbm5lbHMoaGRzcCk7CiAJc25kX2hkc3BfaW5pdGlhbGl6ZV9taWRpX2ZsdXNoKGhkc3ApOwogCi0JaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsJCisJaGRzcC0+c3RhdGUgfD0gSERTUF9GaXJtd2FyZUxvYWRlZDsKIAogCWlmICgoZXJyID0gc25kX2hkc3BfY3JlYXRlX2Fsc2FfZGV2aWNlcyhjYXJkLCBoZHNwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7CQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9oZHNwX2ZyZWUoc3RydWN0IGhkc3AgKmhkc3ApCkBAIC01MTI0LDEzICs1MTM5LDEzIEBACiAJCWZyZWVfaXJxKGhkc3AtPmlycSwgKHZvaWQgKiloZHNwKTsKIAogCXNuZF9oZHNwX2ZyZWVfYnVmZmVycyhoZHNwKTsKLQkKKwogCWlmIChoZHNwLT5pb2Jhc2UpCiAJCWlvdW5tYXAoaGRzcC0+aW9iYXNlKTsKIAogCWlmIChoZHNwLT5wb3J0KQogCQlwY2lfcmVsZWFzZV9yZWdpb25zKGhkc3AtPnBjaSk7Ci0JCQorCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGhkc3AtPnBjaSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTU4LDggKzUxNzMsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JaWYgKCEoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwKSkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGhkc3ApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAloZHNwID0gKHN0cnVjdCBoZHNwICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfaGRzcF9jYXJkX2ZyZWU7CkBAIC01MTczLDcgKzUxOTAsNyBAQAogCX0KIAogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJIYW1tZXJmYWxsIERTUCIpOwotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkIiwgaGRzcC0+Y2FyZF9uYW1lLCAKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCIsIGhkc3AtPmNhcmRfbmFtZSwKIAkJaGRzcC0+cG9ydCwgaGRzcC0+aXJxKTsKIAogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggNzEyMzFjZi4uYmFjMmRjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC00MTAwLDEzICs0MTAwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRzcG1faHdkZXBfZHVtbXlfb3Aoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiB3ZSBoYXZlIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBidXQgdGhlIGNhbGwgaXMgcmVxdWlyZWQgKi8KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9od2RlcF9pb2N0bChzdHJ1Y3Qgc25kX2h3ZGVwICogaHcsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTQyMTMsOSArNDIwNiw3IEBACiAJaHctPnByaXZhdGVfZGF0YSA9IGhkc3BtOwogCXN0cmNweShody0+bmFtZSwgIkhEU1BNIGh3ZGVwIGludGVyZmFjZSIpOwogCi0JaHctPm9wcy5vcGVuID0gc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfaGRzcG1faHdkZXBfaW9jdGw7Ci0JaHctPm9wcy5yZWxlYXNlID0gc25kX2hkc3BtX2h3ZGVwX2R1bW15X29wOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTAzLDEwICs0NDk0LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwKLQkJCSAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sCisJCQkgICAgICBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBoZHNwbSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWhkc3BtID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9oZHNwbV9jYXJkX2ZyZWU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKaW5kZXggMjU3MDkwNy4uYmM1MzlhYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwpAQCAtMjU5NCwxMSArMjU5NCwxMSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3JtZTk2NTIpKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9ybWU5NjUyKSwgJmNhcmQpOwogCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXJtZTk2NTIgPSAoc3RydWN0IHNuZF9ybWU5NjUyICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfcm1lOTY1Ml9jYXJkX2ZyZWU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCBkZjIwMDdlLi5iYWY2ZDhlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTEzODcsOSArMTM4Nyw4IEBACiAJaWYgKCFlbmFibGUpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCi0JcmMgPSAtRU5PTUVNOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCpzaXMpKTsKLQlpZiAoIWNhcmQpCisJcmMgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKCpzaXMpLCAmY2FyZCk7CisJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiU2lTNzAxOSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3NvbmljdmliZXMuYyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKaW5kZXggY2Q0MDhiOC4uZDk4OTIxNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3NvbmljdmliZXMuYworKysgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCkBAIC0yNzMsNyArMjczLDggQEAKIAlvdXRsKGNvdW50LCBzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX0NPVU5UMCk7CiAJb3V0YigweDE4LCBzb25pYy0+ZG1hYV9wb3J0ICsgU1ZfRE1BX01PREUpOwogI2lmIDAKLQlwcmludGsoInByb2dyYW0gZG1hYTogYWRkciA9IDB4JXgsIHBhZGRyID0gMHgleFxuIiwgYWRkciwgaW5sKHNvbmljLT5kbWFhX3BvcnQgKyBTVl9ETUFfQUREUjApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicHJvZ3JhbSBkbWFhOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLAorCSAgICAgICBhZGRyLCBpbmwoc29uaWMtPmRtYWFfcG9ydCArIFNWX0RNQV9BRERSMCkpOwogI2VuZGlmCiB9CiAKQEAgLTI4OCw3ICsyODksOCBAQAogCW91dGwoY291bnQsIHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfQ09VTlQwKTsKIAlvdXRiKDB4MTQsIHNvbmljLT5kbWFjX3BvcnQgKyBTVl9ETUFfTU9ERSk7CiAjaWYgMAotCXByaW50aygicHJvZ3JhbSBkbWFjOiBhZGRyID0gMHgleCwgcGFkZHIgPSAweCV4XG4iLCBhZGRyLCBpbmwoc29uaWMtPmRtYWNfcG9ydCArIFNWX0RNQV9BRERSMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwcm9ncmFtIGRtYWM6IGFkZHIgPSAweCV4LCBwYWRkciA9IDB4JXhcbiIsCisJICAgICAgIGFkZHIsIGlubChzb25pYy0+ZG1hY19wb3J0ICsgU1ZfRE1BX0FERFIwKSk7CiAjZW5kaWYKIH0KIApAQCAtMzU1LDcxICszNTcsMTA0IEBACiAjaWYgMAogc3RhdGljIHZvaWQgc25kX3NvbmljdmliZXNfZGVidWcoc3RydWN0IHNvbmljdmliZXMgKiBzb25pYykKIHsKLQlwcmludGsoIlNWIFJFR1M6ICAgICAgICAgIElOREVYID0gMHglMDJ4ICAiLCBpbmIoU1ZfUkVHKHNvbmljLCBJTkRFWCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiU1YgUkVHUzogICAgICAgICAgSU5ERVggPSAweCUwMnggICIsIGluYihTVl9SRUcoc29uaWMsIElOREVYKSkpOwogCXByaW50aygiICAgICAgICAgICAgICAgICBTVEFUVVMgPSAweCUwMnhcbiIsIGluYihTVl9SRUcoc29uaWMsIFNUQVRVUykpKTsKLQlwcmludGsoIiAgMHgwMDogbGVmdCBpbnB1dCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDA6IGxlZnQgaW5wdXQgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDApKTsKIAlwcmludGsoIiAgMHgyMDogc3ludGggcmF0ZSBsb3cgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMCkpOwotCXByaW50aygiICAweDAxOiByaWdodCBpbnB1dCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAxKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwMTogcmlnaHQgaW5wdXQgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMSkpOwogCXByaW50aygiICAweDIxOiBzeW50aCByYXRlIGhpZ2ggPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDIxKSk7Ci0JcHJpbnRrKCIgIDB4MDI6IGxlZnQgQVVYMSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDAyOiBsZWZ0IEFVWDEgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDAyKSk7CiAJcHJpbnRrKCIgIDB4MjI6IEFEQyBjbG9jayAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjIpKTsKLQlwcmludGsoIiAgMHgwMzogcmlnaHQgQVVYMSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwMykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDM6IHJpZ2h0IEFVWDEgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDMpKTsKIAlwcmludGsoIiAgMHgyMzogQURDIGFsdCByYXRlICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyMykpOwotCXByaW50aygiICAweDA0OiBsZWZ0IENEICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNDogbGVmdCBDRCAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNCkpOwogCXByaW50aygiICAweDI0OiBBREMgcGxsIE0gICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI0KSk7Ci0JcHJpbnRrKCIgIDB4MDU6IHJpZ2h0IENEICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA1OiByaWdodCBDRCAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA1KSk7CiAJcHJpbnRrKCIgIDB4MjU6IEFEQyBwbGwgTiAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjUpKTsKLQlwcmludGsoIiAgMHgwNjogbGVmdCBsaW5lICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDY6IGxlZnQgbGluZSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDYpKTsKIAlwcmludGsoIiAgMHgyNjogU3ludGggcGxsIE0gICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyNikpOwotCXByaW50aygiICAweDA3OiByaWdodCBsaW5lICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA3KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwNzogcmlnaHQgbGluZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwNykpOwogCXByaW50aygiICAweDI3OiBTeW50aCBwbGwgTiAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDI3KSk7Ci0JcHJpbnRrKCIgIDB4MDg6IE1JQyAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDgpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDA4OiBNSUMgICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDA4KSk7CiAJcHJpbnRrKCIgIDB4Mjg6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MjgpKTsKLQlwcmludGsoIiAgMHgwOTogR2FtZSBwb3J0ICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwOSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MDk6IEdhbWUgcG9ydCAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MDkpKTsKIAlwcmludGsoIiAgMHgyOTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyOSkpOwotCXByaW50aygiICAweDBhOiBsZWZ0IHN5bnRoICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBhKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwYTogbGVmdCBzeW50aCAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYSkpOwogCXByaW50aygiICAweDJhOiBNUFU0MDEgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJhKSk7Ci0JcHJpbnRrKCIgIDB4MGI6IHJpZ2h0IHN5bnRoICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGIpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBiOiByaWdodCBzeW50aCAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBiKSk7CiAJcHJpbnRrKCIgIDB4MmI6IGRyaXZlIGN0cmwgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmIpKTsKLQlwcmludGsoIiAgMHgwYzogbGVmdCBBVVgyICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwYykpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGM6IGxlZnQgQVVYMiAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGMpKTsKIAlwcmludGsoIiAgMHgyYzogU1JTIHNwYWNlICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyYykpOwotCXByaW50aygiICAweDBkOiByaWdodCBBVVgyICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBkKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgwZDogcmlnaHQgQVVYMiAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZCkpOwogCXByaW50aygiICAweDJkOiBTUlMgY2VudGVyICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDJkKSk7Ci0JcHJpbnRrKCIgIDB4MGU6IGxlZnQgYW5hbG9nICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGUpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDBlOiBsZWZ0IGFuYWxvZyAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDBlKSk7CiAJcHJpbnRrKCIgIDB4MmU6IHdhdmUgc291cmNlICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MmUpKTsKLQlwcmludGsoIiAgMHgwZjogcmlnaHQgYW5hbG9nICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgwZikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MGY6IHJpZ2h0IGFuYWxvZyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MGYpKTsKIAlwcmludGsoIiAgMHgyZjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgyZikpOwotCXByaW50aygiICAweDEwOiBsZWZ0IFBDTSAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEwKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMDogbGVmdCBQQ00gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMCkpOwogCXByaW50aygiICAweDMwOiBhbmFsb2cgcG93ZXIgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMwKSk7Ci0JcHJpbnRrKCIgIDB4MTE6IHJpZ2h0IFBDTSAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDExOiByaWdodCBQQ00gICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDExKSk7CiAJcHJpbnRrKCIgIDB4MzE6IGFuYWxvZyBwb3dlciAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzEpKTsKLQlwcmludGsoIiAgMHgxMjogRE1BIGRhdGEgZm9ybWF0ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTI6IERNQSBkYXRhIGZvcm1hdCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTIpKTsKIAlwcmludGsoIiAgMHgzMjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzMikpOwotCXByaW50aygiICAweDEzOiBQL0MgZW5hYmxlICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDEzKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxMzogUC9DIGVuYWJsZSAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxMykpOwogCXByaW50aygiICAweDMzOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDMzKSk7Ci0JcHJpbnRrKCIgIDB4MTQ6IFUvRCBidXR0b24gICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE0OiBVL0QgYnV0dG9uICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE0KSk7CiAJcHJpbnRrKCIgIDB4MzQ6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzQpKTsKLQlwcmludGsoIiAgMHgxNTogcmV2aXNpb24gICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTU6IHJldmlzaW9uICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTUpKTsKIAlwcmludGsoIiAgMHgzNTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzNSkpOwotCXByaW50aygiICAweDE2OiBBREMgb3V0cHV0IGN0cmwgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxNjogQURDIG91dHB1dCBjdHJsID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxNikpOwogCXByaW50aygiICAweDM2OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM2KSk7Ci0JcHJpbnRrKCIgIDB4MTc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTcpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDE3OiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE3KSk7CiAJcHJpbnRrKCIgIDB4Mzc6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MzcpKTsKLQlwcmludGsoIiAgMHgxODogRE1BIEEgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOCkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MTg6IERNQSBBIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MTgpKTsKIAlwcmludGsoIiAgMHgzODogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzOCkpOwotCXByaW50aygiICAweDE5OiBETUEgQSBsb3dlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDE5KSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxOTogRE1BIEEgbG93ZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxOSkpOwogCXByaW50aygiICAweDM5OiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDM5KSk7Ci0JcHJpbnRrKCIgIDB4MWE6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWEpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFhOiAtLS0gICAgICAgICAgICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFhKSk7CiAJcHJpbnRrKCIgIDB4M2E6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2EpKTsKLQlwcmludGsoIiAgMHgxYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYikpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWI6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWIpKTsKIAlwcmludGsoIiAgMHgzYjogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzYikpOwotCXByaW50aygiICAweDFjOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFjKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxYzogRE1BIEMgdXBwZXIgY250ID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxYykpOwogCXByaW50aygiICAweDNjOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNjKSk7Ci0JcHJpbnRrKCIgIDB4MWQ6IERNQSBDIHVwcGVyIGNudCA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWQpKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICAweDFkOiBETUEgQyB1cHBlciBjbnQgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFkKSk7CiAJcHJpbnRrKCIgIDB4M2Q6IC0tLSAgICAgICAgICAgICA9IDB4JTAyeFxuIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4M2QpKTsKLQlwcmludGsoIiAgMHgxZTogUENNIHJhdGUgbG93ICAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZSkpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIgIDB4MWU6IFBDTSByYXRlIGxvdyAgICA9IDB4JTAyeCAgIiwgc25kX3NvbmljdmliZXNfaW4oc29uaWMsIDB4MWUpKTsKIAlwcmludGsoIiAgMHgzZTogLS0tICAgICAgICAgICAgID0gMHglMDJ4XG4iLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgzZSkpOwotCXByaW50aygiICAweDFmOiBQQ00gcmF0ZSBoaWdoICAgPSAweCUwMnggICIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDFmKSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgMHgxZjogUENNIHJhdGUgaGlnaCAgID0gMHglMDJ4ICAiLCBzbmRfc29uaWN2aWJlc19pbihzb25pYywgMHgxZikpOwogCXByaW50aygiICAweDNmOiAtLS0gICAgICAgICAgICAgPSAweCUwMnhcbiIsIHNuZF9zb25pY3ZpYmVzX2luKHNvbmljLCAweDNmKSk7CiB9CiAKQEAgLTQ3Niw4ICs1MTEsOCBAQAogCSpyZXNfbSA9IG07CiAJKnJlc19uID0gbjsKICNpZiAwCi0JcHJpbnRrKCJtZXRyaWMgPSAlaSwgeG0gPSAlaSwgeG4gPSAlaVxuIiwgbWV0cmljLCB4bSwgeG4pOwotCXByaW50aygicGxsOiBtID0gMHgleCwgciA9IDB4JXgsIG4gPSAweCV4XG4iLCByZWcsIG0sIHIsIG4pOworCXByaW50ayhLRVJOX0RFQlVHICJtZXRyaWMgPSAlaSwgeG0gPSAlaSwgeG4gPSAlaVxuIiwgbWV0cmljLCB4bSwgeG4pOworCXByaW50ayhLRVJOX0RFQlVHICJwbGw6IG0gPSAweCV4LCByID0gMHgleCwgbiA9IDB4JXhcbiIsIHJlZywgbSwgciwgbik7CiAjZW5kaWYKIH0KIApAQCAtMTQyMyw5ICsxNDU4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgNTsgaWR4KyspIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIGlkeCkgPT0gMCB8fAogCQkgICAgIShwY2lfcmVzb3VyY2VfZmxhZ3MocGNpLCBpZHgpICYgSU9SRVNPVVJDRV9JTykpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCBkOTRiMTZmLi4yMWNlZjk3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC04OSw5ICs4OSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfdHJpZGVudF9jcmVhdGUoY2FyZCwgcGNpLAogCQkJCSAgICAgIHBjbV9jaGFubmVsc1tkZXZdLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwppbmRleCBjNjEyYjQzLi5hOWRhOWMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwpAQCAtNjgsNDAgKzY4LDQwIEBACiB7CiAJdW5zaWduZWQgaW50IHZhbCwgdG1wOwogCi0JcHJpbnRrKCJUcmlkZW50IHZvaWNlICVpOlxuIiwgdm9pY2UpOworCXByaW50ayhLRVJOX0RFQlVHICJUcmlkZW50IHZvaWNlICVpOlxuIiwgdm9pY2UpOwogCW91dGIodm9pY2UsIFRSSURfUkVHKHRyaWRlbnQsIFQ0RF9MRk9fR0NfQ0lSKSk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0xCQSkpOwotCXByaW50aygiTEJBOiAweCV4XG4iLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJMQkE6IDB4JXhcbiIsIHZhbCk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0dWU0VMX1BBTl9WT0xfQ1RSTF9FQykpOwotCXByaW50aygiR1ZTZWw6ICVpXG4iLCB2YWwgPj4gMzEpOwotCXByaW50aygiUGFuOiAweCV4XG4iLCAodmFsID4+IDI0KSAmIDB4N2YpOwotCXByaW50aygiVm9sOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4ZmYpOwotCXByaW50aygiQ1RSTDogMHgleFxuIiwgKHZhbCA+PiAxMikgJiAweDBmKTsKLQlwcmludGsoIkVDOiAweCV4XG4iLCB2YWwgJiAweDBmZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJHVlNlbDogJWlcbiIsIHZhbCA+PiAzMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBhbjogMHgleFxuIiwgKHZhbCA+PiAyNCkgJiAweDdmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVm9sOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4ZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJDVFJMOiAweCV4XG4iLCAodmFsID4+IDEyKSAmIDB4MGYpOworCXByaW50ayhLRVJOX0RFQlVHICJFQzogMHgleFxuIiwgdmFsICYgMHgwZmZmKTsKIAlpZiAodHJpZGVudC0+ZGV2aWNlICE9IFRSSURFTlRfREVWSUNFX0lEX05YKSB7CiAJCXZhbCA9IGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9EWF9DU09fQUxQSEFfRk1TKSk7Ci0JCXByaW50aygiQ1NPOiAweCV4XG4iLCB2YWwgPj4gMTYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ1NPOiAweCV4XG4iLCB2YWwgPj4gMTYpOwogCQlwcmludGsoIkFscGhhOiAweCV4XG4iLCAodmFsID4+IDQpICYgMHgwZmZmKTsKLQkJcHJpbnRrKCJGTVM6IDB4JXhcbiIsIHZhbCAmIDB4MGYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRk1TOiAweCV4XG4iLCB2YWwgJiAweDBmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX0RYX0VTT19ERUxUQSkpOwotCQlwcmludGsoIkVTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKLQkJcHJpbnRrKCJEZWx0YTogMHgleFxuIiwgdmFsICYgMHhmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkVTTzogMHgleFxuIiwgdmFsID4+IDE2KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRlbHRhOiAweCV4XG4iLCB2YWwgJiAweGZmZmYpOwogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfRFhfRk1DX1JWT0xfQ1ZPTCkpOwogCX0gZWxzZSB7CQkvLyBUUklERU5UX0RFVklDRV9JRF9OWAogCQl2YWwgPSBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfTlhfREVMVEFfQ1NPKSk7CiAJCXRtcCA9ICh2YWwgPj4gMjQpICYgMHhmZjsKLQkJcHJpbnRrKCJDU086IDB4JXhcbiIsIHZhbCAmIDB4MDBmZmZmZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ1NPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0RFTFRBX0VTTykpOwogCQl0bXAgfD0gKHZhbCA+PiAxNikgJiAweGZmMDA7Ci0JCXByaW50aygiRGVsdGE6IDB4JXhcbiIsIHRtcCk7Ci0JCXByaW50aygiRVNPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkRlbHRhOiAweCV4XG4iLCB0bXApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRVNPOiAweCV4XG4iLCB2YWwgJiAweDAwZmZmZmZmKTsKIAkJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX05YX0FMUEhBX0ZNU19GTUNfUlZPTF9DVk9MKSk7Ci0JCXByaW50aygiQWxwaGE6IDB4JXhcbiIsIHZhbCA+PiAyMCk7Ci0JCXByaW50aygiRk1TOiAweCV4XG4iLCAodmFsID4+IDE2KSAmIDB4MGYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQWxwaGE6IDB4JXhcbiIsIHZhbCA+PiAyMCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJGTVM6IDB4JXhcbiIsICh2YWwgPj4gMTYpICYgMHgwZik7CiAJfQotCXByaW50aygiRk1DOiAweCV4XG4iLCAodmFsID4+IDE0KSAmIDMpOwotCXByaW50aygiUlZvbDogMHgleFxuIiwgKHZhbCA+PiA3KSAmIDB4N2YpOwotCXByaW50aygiQ1ZvbDogMHgleFxuIiwgdmFsICYgMHg3Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIkZNQzogMHgleFxuIiwgKHZhbCA+PiAxNCkgJiAzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUlZvbDogMHgleFxuIiwgKHZhbCA+PiA3KSAmIDB4N2YpOworCXByaW50ayhLRVJOX0RFQlVHICJDVm9sOiAweCV4XG4iLCB2YWwgJiAweDdmKTsKIH0KICNlbmRpZgogCkBAIC00OTYsMTIgKzQ5NiwxNyBAQAogCW91dGwocmVnc1s0XSwgVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpOwogCiAjaWYgMAotCXByaW50aygid3JpdHRlbiAlaSBjaGFubmVsOlxuIiwgdm9pY2UtPm51bWJlcik7Ci0JcHJpbnRrKCIgIHJlZ3NbMF0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMF0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDApKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbMV0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMV0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDQpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbMl0gPSAweCV4LzB4JXhcbiIsIHJlZ3NbMl0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDgpKSk7Ci0JcHJpbnRrKCIgIHJlZ3NbM10gPSAweCV4LzB4JXhcbiIsIHJlZ3NbM10sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDEyKSkpOwotCXByaW50aygiICByZWdzWzRdID0gMHgleC8weCV4XG4iLCByZWdzWzRdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyAxNikpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAid3JpdHRlbiAlaSBjaGFubmVsOlxuIiwgdm9pY2UtPm51bWJlcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1swXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1swXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMCkpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiICByZWdzWzFdID0gMHgleC8weCV4XG4iLAorCSAgICAgICByZWdzWzFdLCBpbmwoVFJJRF9SRUcodHJpZGVudCwgQ0hfU1RBUlQgKyA0KSkpOworCXByaW50ayhLRVJOX0RFQlVHICIgIHJlZ3NbMl0gPSAweCV4LzB4JXhcbiIsCisJICAgICAgIHJlZ3NbMl0sIGlubChUUklEX1JFRyh0cmlkZW50LCBDSF9TVEFSVCArIDgpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1szXSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1szXSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTIpKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgcmVnc1s0XSA9IDB4JXgvMHgleFxuIiwKKwkgICAgICAgcmVnc1s0XSwgaW5sKFRSSURfUkVHKHRyaWRlbnQsIENIX1NUQVJUICsgMTYpKSk7CiAjZW5kaWYKIH0KIApAQCAtNTgzLDcgKzU4OCw3IEBACiAJCW91dGIodm9pY2UtPlZvbCA+PiAyLCBUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMgKyAyKSk7CiAJCWJyZWFrOwogCWNhc2UgVFJJREVOVF9ERVZJQ0VfSURfU0k3MDE4OgotCQkvLyBwcmludGsoInZvaWNlLT5Wb2wgPSAweCV4XG4iLCB2b2ljZS0+Vm9sKTsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgInZvaWNlLT5Wb2wgPSAweCV4XG4iLCB2b2ljZS0+Vm9sKTsgKi8KIAkJb3V0dygodm9pY2UtPkNUUkwgPDwgMTIpIHwgdm9pY2UtPlZvbCwKIAkJICAgICBUUklEX1JFRyh0cmlkZW50LCBDSF9HVlNFTF9QQU5fVk9MX0NUUkxfRUMpKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCAxYWFmZTk1Li44MDliMjMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTQ2Niw3ICs0NjYsMTAgQEAKIAkJCQkJZmxhZyA9IFZJQV9UQkxfQklUX0ZMQUc7IC8qIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJfSBlbHNlCiAJCQkJZmxhZyA9IDA7IC8qIHBlcmlvZCBjb250aW51ZXMgdG8gdGhlIG5leHQgKi8KLQkJCS8vIHByaW50aygidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkIChyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgIgorCQkJICAgICAgICIocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCSovCiAJCQkoKHUzMiAqKWRldi0+dGFibGUuYXJlYSlbKGlkeDw8MSkgKyAxXSA9IGNwdV90b19sZTMyKHIgfCBmbGFnKTsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0ub2Zmc2V0ID0gb2ZzOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5zaXplID0gcjsKQEAgLTIzNjAsMTQgKzIzNjMsMTQgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwOTk2LCAiRVNDIE1vYm8iLCBWSUFfRFhTXzQ4SyksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4MGE4MSwgIkVDUyBLN1ZUQTMgdjguMCIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwYTg1LCAiRUNTIEw3Vk1NMiIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMCwgIkVTQyBLOCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMTksICJFU0MgSzgiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4YWEwMSwgIkVTQyBLOFQ4OTAtQSIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDMzLCAiQWNlciBJbnNwaXJlIDEzNTNMTSIsIFZJQV9EWFNfTk9fVlJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDQ2LCAiQWNlciBBc3BpcmUgMTUyNCBXTE1pIiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAwLCAiQVNVUyBBNy9BOCIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA3MSwgMCwgIkRpdmVyc2UgTm90ZWJvb2siLCBWSUFfRFhTX05PX1ZSQSksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDQzLCAiQVNVUyBBNy9BOCIsIFZJQV9EWFNfTk9fVlJBKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNzEsICJEaXZlcnNlIE5vdGVib29rIiwgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDExOGUsICJGU0MgTGFwdG9wIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxMTA2LCAwLCAiQVNSb2NrIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTEwNiwgIkFTUm9jayIsIFZJQV9EWFNfU1JDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTI5NywgMHhhMjMxLCAiU2h1dHRsZSBBSzMxdjIiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YTIzMiwgIlNodXR0bGUiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDEyOTcsIDB4YzE2MCwgIlNodXR0bGUgU2s0MUciLCBWSUFfRFhTX1NSQyksCkBAIC0yMzc1LDcgKzIzNzgsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDM4MDAsICJNU0kgS1QyNjYiLCBWSUFfRFhTX0VOQUJMRSksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzEyMCwgIk1TSSBLVDRWIiwgVklBX0RYU19FTkFCTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDcxNDIsICJNU0kgSzhNTS1WIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAwLCAiTVNJIE1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNDYyLCAiTVNJIE1vYm8iLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTQwMSwgIkFCSVQgS0Q3KC1SQUlEKSIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDExLCAiQUJJVCBWQS0yMCIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxNDEzLCAiQUJJVCBLVjggUHJvIiwgVklBX0RYU19FTkFCTEUpLApAQCAtMjM4OSwxMSArMjM5MiwxMSBAQAogCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwMzIsICJtNjgweCBtYWNoaW5lcyIsIFZJQV9EWFNfNDhLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhlMDA0LCAiUEIgRWFzeU5vdGUgMzE3NCIsIFZJQV9EWFNfRU5BQkxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTY5NSwgMHgzMDA1LCAiRVBvWCBFUC04SzlBIiwgVklBX0RYU19FTkFCTEUpLAotCVNORF9QQ0lfUVVJUksoMHgxNjk1LCAwLCAiRVBvWCBtb2JvIiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxNmYzLCAwLCAiSmV0d2F5IEs4IiwgVklBX0RYU19TUkMpLAotCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAwLCAiRlNDIExhcHRvcCIsIFZJQV9EWFNfU1JDKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE2OTUsICJFUG9YIG1vYm8iLCBWSUFfRFhTX1NSQyksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNmYzLCAiSmV0d2F5IEs4IiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTczNCwgIkZTQyBMYXB0b3AiLCBWSUFfRFhTX1NSQyksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MzA1OSwgIkFTUm9jayBLN1ZNMiIsIFZJQV9EWFNfTk9fVlJBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMCwgIkFTUm9jayBtb2JvIiwgVklBX0RYU19TUkMpLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTg0OSwgIkFTUm9jayBtb2JvIiwgVklBX0RYU19TUkMpLAogCVNORF9QQ0lfUVVJUksoMHgxOTE5LCAweDIwMGEsICJTb2x0ZWsgU0wtSzgiLCAgVklBX0RYU19OT19WUkEpLAogCVNORF9QQ0lfUVVJUksoMHg0MDA1LCAweDQ3MTAsICJNU0kgSzdUMjY2IiwgVklBX0RYU19TUkMpLAogCXsgfSAvKiB0ZXJtaW5hdG9yICovCkBAIC0yNDMzLDkgKzI0MzYsOSBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkX3R5cGUgPSBwY2lfaWQtPmRyaXZlcl9kYXRhOwogCXN3aXRjaCAoY2FyZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA1YmQ3OWQyLi4wZDU0ZTM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTMyOCw3ICszMjgsMTAgQEAKIAkJCQkJZmxhZyA9IFZJQV9UQkxfQklUX0ZMQUc7IC8qIHBlcmlvZCBib3VuZGFyeSAqLwogCQkJfSBlbHNlCiAJCQkJZmxhZyA9IDA7IC8qIHBlcmlvZCBjb250aW51ZXMgdG8gdGhlIG5leHQgKi8KLQkJCS8vIHByaW50aygidmlhOiB0YmwgJWQ6IGF0ICVkICBzaXplICVkIChyZXN0ICVkKVxuIiwgaWR4LCBvZnMsIHIsIHJlc3QpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWE6IHRibCAlZDogYXQgJWQgIHNpemUgJWQgIgorCQkJICAgICAgICIocmVzdCAlZClcbiIsIGlkeCwgb2ZzLCByLCByZXN0KTsKKwkJCSovCiAJCQkoKHUzMiAqKWRldi0+dGFibGUuYXJlYSlbKGlkeDw8MSkgKyAxXSA9IGNwdV90b19sZTMyKHIgfCBmbGFnKTsKIAkJCWRldi0+aWR4X3RhYmxlW2lkeF0ub2Zmc2V0ID0gb2ZzOwogCQkJZGV2LT5pZHhfdGFibGVbaWR4XS5zaXplID0gcjsKQEAgLTExNjcsOSArMTE3MCw5IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmRfdHlwZSA9IHBjaV9pZC0+ZHJpdmVyX2RhdGE7CiAJc3dpdGNoIChjYXJkX3R5cGUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggYWNjMzUyZi4uZmM5MTM2YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTIwNCw5ICsyMDQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAoKGludClwY2lfaWQtPmRyaXZlcl9kYXRhKSB7CiAJY2FzZSBWWF9QQ0lfVlgyMjJfT0xEOgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCmluZGV4IDdlODdmMzkuLmMwZWZlNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKQEAgLTEwNyw3ICsxMDcsOSBAQAogc3RhdGljIHZvaWQgdngyX291dGIoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCW91dGIodmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7Ci0JLy9wcmludGsoIm91dGI6ICV4IC0+ICV4XG4iLCB2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJvdXRiOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJKi8KIH0KIAogLyoqCkBAIC0xMjYsNyArMTI4LDkgQEAKICAqLwogc3RhdGljIHZvaWQgdngyX291dGwoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCB2YWwpCiB7Ci0JLy8gcHJpbnRrKCJvdXRsOiAleCAtPiAleFxuIiwgdmFsLCB2eDJfcmVnX2FkZHIoY2hpcCwgb2Zmc2V0KSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAib3V0bDogJXggLT4gJXhcbiIsIHZhbCwgdngyX3JlZ19hZGRyKGNoaXAsIG9mZnNldCkpOworCSovCiAJb3V0bCh2YWwsIHZ4Ml9yZWdfYWRkcihjaGlwLCBvZmZzZXQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKaW5kZXggMjYzMWE1NS4uNGFmNjY2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCkBAIC0xODcsOSArMTg3LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaV9pZC0+ZGV2aWNlKSB7CiAJY2FzZSAweDAwMDQ6IHN0ciA9ICJZTUY3MjQiOyAgbW9kZWwgPSAiRFMtMSI7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IDkwZDBkNjIuLjJmMDkyNTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTMxOCw3ICszMTgsMTIgQEAKIAkJeXBjbS0+cGVyaW9kX3BvcyArPSBkZWx0YTsKIAkJeXBjbS0+bGFzdF9wb3MgPSBwb3M7CiAJCWlmICh5cGNtLT5wZXJpb2RfcG9zID49IHlwY20tPnBlcmlvZF9zaXplKSB7Ci0JCQkvLyBwcmludGsoImRvbmUgLSBhY3RpdmVfYmFuayA9IDB4JXgsIHN0YXJ0ID0gMHgleFxuIiwgY2hpcC0+YWN0aXZlX2JhbmssIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLAorCQkJICAgICAgIGNoaXAtPmFjdGl2ZV9iYW5rLAorCQkJICAgICAgIHZvaWNlLT5iYW5rW2NoaXAtPmFjdGl2ZV9iYW5rXS5zdGFydCk7CisJCQkqLwogCQkJeXBjbS0+cGVyaW9kX3BvcyAlPSB5cGNtLT5wZXJpb2Rfc2l6ZTsKIAkJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHlwY20tPnN1YnN0cmVhbSk7CkBAIC0zNjYsNyArMzcxLDEyIEBACiAJCXlwY20tPmxhc3RfcG9zID0gcG9zOwogCQlpZiAoeXBjbS0+cGVyaW9kX3BvcyA+PSB5cGNtLT5wZXJpb2Rfc2l6ZSkgewogCQkJeXBjbS0+cGVyaW9kX3BvcyAlPSB5cGNtLT5wZXJpb2Rfc2l6ZTsKLQkJCS8vIHByaW50aygiZG9uZSAtIGFjdGl2ZV9iYW5rID0gMHgleCwgc3RhcnQgPSAweCV4XG4iLCBjaGlwLT5hY3RpdmVfYmFuaywgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJkb25lIC0gYWN0aXZlX2JhbmsgPSAweCV4LCBzdGFydCA9IDB4JXhcbiIsCisJCQkgICAgICAgY2hpcC0+YWN0aXZlX2JhbmssCisJCQkgICAgICAgdm9pY2UtPmJhbmtbY2hpcC0+YWN0aXZlX2JhbmtdLnN0YXJ0KTsKKwkJCSovCiAJCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCQkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwppbmRleCA4MTlhYWFhLi43ZGVhNzRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKQEAgLTkxLDcgKzkxLDcgQEAKICAqLwogc3RhdGljIGludCBzbmRfcGRhY2ZfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAlzdHJ1Y3Qgc25kX3BkYWNmICpwZGFjZjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CkBAIC0xMTIsMjAgKzExMiwyMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsgLyogZGlzYWJsZWQgZXhwbGljaXRseSAqLwogCiAJLyogb2ssIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInBkYWNmOiBjYW5ub3QgY3JlYXRlIGEgY2FyZCBpbnN0YW5jZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXBkYWNmID0gc25kX3BkYWNmX2NyZWF0ZShjYXJkKTsKLQlpZiAoISBwZGFjZikKLQkJcmV0dXJuIC1FSU87CisJaWYgKCFwZGFjZikgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQlpZiAoc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBwZGFjZiwgJm9wcykgPCAwKSB7CisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBwZGFjZiwgJm9wcyk7CisJaWYgKGVyciA8IDApIHsKIAkJa2ZyZWUocGRhY2YpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2NvcmUuYwppbmRleCBkZmE0MGIwLi41ZDJhZmEwIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9jb3JlLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfY29yZS5jCkBAIC04MiwxNCArODIsMjEgQEAKICNpZiAwCiB2b2lkIHBkYWNmX2R1bXAoc3RydWN0IHNuZF9wZGFjZiAqY2hpcCkKIHsKLQlwcmludGsoIlBEQVVESU9DRiBEVU1QICgweCVseCk6XG4iLCBjaGlwLT5wb3J0KTsKLQlwcmludGsoIldQRCAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCkpOwotCXByaW50aygiUkRQICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfUkRQKSk7Ci0JcHJpbnRrKCJUQ1IgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19UQ1IpKTsKLQlwcmludGsoIlNDUiAgICAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1NDUikpOwotCXByaW50aygiSVNSICAgICAgICAgOiAweCV4XG4iLCBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSVNSKSk7Ci0JcHJpbnRrKCJJRVIgICAgICAgICA6IDB4JXhcbiIsIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JRVIpKTsKLQlwcmludGsoIkFLX0lGUiAgICAgIDogMHgleFxuIiwgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0FLX0lGUikpOworCXByaW50ayhLRVJOX0RFQlVHICJQREFVRElPQ0YgRFVNUCAoMHglbHgpOlxuIiwgY2hpcC0+cG9ydCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIldQRCAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCkpOworCXByaW50ayhLRVJOX0RFQlVHICJSRFAgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19SRFApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVENSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfVENSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlNDUiAgICAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1NDUikpOworCXByaW50ayhLRVJOX0RFQlVHICJJU1IgICAgICAgICA6IDB4JXhcbiIsCisJICAgICAgIGludyhjaGlwLT5wb3J0ICsgUERBVURJT0NGX1JFR19JU1IpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSUVSICAgICAgICAgOiAweCV4XG4iLAorCSAgICAgICBpbncoY2hpcC0+cG9ydCArIFBEQVVESU9DRl9SRUdfSUVSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkFLX0lGUiAgICAgIDogMHgleFxuIiwKKwkgICAgICAgaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX0FLX0lGUikpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX2lycS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKaW5kZXggZWE5MDNjOC4uZGNkMzIyMCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfaXJxLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCiAJcmRwID0gaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1JEUCk7CiAJd2RwID0gaW53KGNoaXAtPnBvcnQgKyBQREFVRElPQ0ZfUkVHX1dEUCk7Ci0JLy8gcHJpbnRrKCJUQVNLTEVUOiByZHAgPSAleCwgd2RwID0gJXhcbiIsIHJkcCwgd2RwKTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiVEFTS0xFVDogcmRwID0gJXgsIHdkcCA9ICV4XG4iLCByZHAsIHdkcCk7ICovCiAJc2l6ZSA9IHdkcCAtIHJkcDsKIAlpZiAoc2l6ZSA8IDApCiAJCXNpemUgKz0gMHgxMDAwMDsKQEAgLTMyMSw1ICszMjEsNSBAQAogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkvLyBwcmludGsoIlRBU0tMRVQ6IGVuZFxuIik7CisJLyogcHJpbnRrKEtFUk5fREVCVUcgIlRBU0tMRVQ6IGVuZFxuIik7ICovCiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDcwNjYwMmEuLjc0NDVjYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC0xMzAsMjMgKzEzMCwyNiBAQAogLyoKICAqIGNyZWF0ZSB2eHBvY2tldCBpbnN0YW5jZQogICovCi1zdGF0aWMgc3RydWN0IHNuZF92eHBvY2tldCAqc25kX3Z4cG9ja2V0X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBpYmwsCi0JCQkJCSAgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCitzdGF0aWMgaW50IHNuZF92eHBvY2tldF9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgaWJsLAorCQkJICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLAorCQkJICAgIHN0cnVjdCBzbmRfdnhwb2NrZXQgKipjaGlwX3JldCkKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcDsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHA7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CiAJCS5kZXZfZnJlZSA9CXNuZF92eHBvY2tldF9kZXZfZnJlZSwKIAl9OworCWludCBlcnI7CiAKIAljaGlwID0gc25kX3Z4X2NyZWF0ZShjYXJkLCAmdnhwb2NrZXRfaHcsICZzbmRfdnhwb2NrZXRfb3BzLAogCQkJICAgICBzaXplb2Yoc3RydWN0IHNuZF92eHBvY2tldCkgLSBzaXplb2Yoc3RydWN0IHZ4X2NvcmUpKTsKLQlpZiAoISBjaGlwKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcykgPCAwKSB7CisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkgewogCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQogCWNoaXAtPmlibC5zaXplID0gaWJsOwogCkBAIC0xNjksNyArMTcyLDggQEAKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAotCXJldHVybiB2eHA7CisJKmNoaXBfcmV0ID0gdnhwOworCXJldHVybiAwOwogfQogCiAKQEAgLTI5Miw3ICsyOTYsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHA7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAogCS8qIGZpbmQgYW4gZW1wdHkgc2xvdCBmcm9tIHRoZSBjYXJkIGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewpAQCAtMzA3LDE2ICszMTEsMTYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7IC8qIGRpc2FibGVkIGV4cGxpY2l0bHkgKi8KIAogCS8qIG9rLCBjcmVhdGUgYSBjYXJkIGluc3RhbmNlICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpXSwgaWRbaV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2ldLCBpZFtpXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ2eHBvY2tldDogY2Fubm90IGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQl2eHAgPSBzbmRfdnhwb2NrZXRfbmV3KGNhcmQsIGlibFtpXSwgcF9kZXYpOwotCWlmICghIHZ4cCkgeworCWVyciA9IHNuZF92eHBvY2tldF9uZXcoY2FyZCwgaWJsW2ldLCBwX2RldiwgJnZ4cCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCWNhcmQtPnByaXZhdGVfZGF0YSA9IHZ4cDsKIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL0tjb25maWcgYi9zb3VuZC9wcGMvS2NvbmZpZwppbmRleCA3NzdkZTJiLi5iZDIzMzhhIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMTMsNiArMTMsNyBAQAogCXRyaXN0YXRlICJQb3dlck1hYyAoQVdBQ1MsIERBQ0EsIEJ1cmd1bmR5LCBUdW1ibGVyLCBLZXl3ZXN0KSIKIAlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVCAmJiBQUENfUE1BQwogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9WTUFTVEVSCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIHNvdW5kIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2F3YWNzLmMgYi9zb3VuZC9wcGMvYXdhY3MuYwppbmRleCA3YmQzM2U2Li44MGRmOWIxIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvYXdhY3MuYworKysgYi9zb3VuZC9wcGMvYXdhY3MuYwpAQCAtNjA4LDkgKzYwOCwxMiBAQAogCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfTElORSwgMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19sb1tdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfVk9MVU1FKCJMaW5lIG91dCBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKLQlBV0FDU19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCA1LCA2LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfaW1hY1tdIF9faW5pdGRhdGEgPSB7CisJQVdBQ1NfVk9MVU1FKCJQbGF5LXRocm91Z2ggUGxheWJhY2sgVm9sdW1lIiwgNSwgNiwgMSksCiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCiB9OwogCkBAIC02MjcsNiArNjMwLDEwIEBACiAJQVdBQ1NfU1dJVENIKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX01JQywgMCksCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM1NTAwW10gX19pbml0ZGF0YSA9IHsKKwlBV0FDU19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAyLCA2LCAxKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hY1tdIF9faW5pdGRhdGEgPSB7CiAJQVdBQ1NfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMiwgNiwgMSksCiAJQVdBQ1NfU1dJVENIKCJDRCBDYXB0dXJlIFN3aXRjaCIsIDAsIFNISUZUX01VWF9DRCwgMCksCkBAIC02NDUsMTIgKzY1MiwxOSBAQAogCUFXQUNTX1NXSVRDSCgiTWljIENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfTVVYX0xJTkUsIDApLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDBbXSBfX2luaXRkYXRhID0geworCUFXQUNTX1NXSVRDSCgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAwLCBTSElGVF9NVVhfQ0QsIDApLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zdyBfX2luaXRkYXRhID0KIEFXQUNTX1NXSVRDSCgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfaW1hYyBfX2luaXRkYXRhID0KIEFXQUNTX1NXSVRDSCgiTGluZSBvdXQgUGxheWJhY2sgU3dpdGNoIiwgMSwgU0hJRlRfSERNVVRFLCAxKTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19wbWFjNTUwMCBfX2luaXRkYXRhID0KK0FXQUNTX1NXSVRDSCgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDEsIFNISUZUX0hETVVURSwgMSk7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfcG1hY19hd2Fjc19taWNfYm9vc3RbXSBfX2luaXRkYXRhID0gewogCUFXQUNTX1NXSVRDSCgiTWljIEJvb3N0IENhcHR1cmUgU3dpdGNoIiwgMCwgU0hJRlRfR0FJTkxJTkUsIDApLAogfTsKQEAgLTc2NiwxMiArNzgwLDE2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLSNkZWZpbmUgSVNfUE03NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsNzUwMCIpKQorI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAorCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKKwkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKKyNkZWZpbmUgSVNfUE01NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQogI2RlZmluZSBJU19CRUlHRSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCiAjZGVmaW5lIElTX0lNQUMxIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCiAjZGVmaW5lIElTX0lNQUMyIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAogCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCiAjZGVmaW5lIElTX0c0QUdQIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCisjZGVmaW5lIElTX0xPTUJBUkQgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAKIHN0YXRpYyBpbnQgaW1hYzEsIGltYWMyOwogCkBAIC04NTgsMTAgKzg3NiwxNCBAQAogc25kX3BtYWNfYXdhY3NfaW5pdChzdHJ1Y3Qgc25kX3BtYWMgKmNoaXApCiB7CiAJaW50IHBtNzUwMCA9IElTX1BNNzUwMDsKKwlpbnQgcG01NTAwID0gSVNfUE01NTAwOwogCWludCBiZWlnZSA9IElTX0JFSUdFOwogCWludCBnNGFncCA9IElTX0c0QUdQOworCWludCBsb21iYXJkID0gSVNfTE9NQkFSRDsKIAlpbnQgaW1hYzsKIAlpbnQgZXJyLCB2b2w7CisJc3RydWN0IHNuZF9rY29udHJvbCAqdm1hc3Rlcl9zdywgKnZtYXN0ZXJfdm9sOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlcl92b2wsICpzcGVha2VyX3ZvbDsKIAogCWltYWMxID0gSVNfSU1BQzE7CiAJaW1hYzIgPSBJU19JTUFDMjsKQEAgLTkxNSw3ICs5MzcsNyBAQAogCQkvKiBzZXQgaGVhZHBob25lLWphY2sgZGV0ZWN0aW9uIGJpdCAqLwogCQlzd2l0Y2ggKGNoaXAtPm1vZGVsKSB7CiAJCWNhc2UgUE1BQ19BV0FDUzoKLQkJCWNoaXAtPmhwX3N0YXRfbWFzayA9IHBtNzUwMCA/IE1BU0tfSERQQ09OTgorCQkJY2hpcC0+aHBfc3RhdF9tYXNrID0gcG03NTAwIHx8IHBtNTUwMCA/IE1BU0tfSERQQ09OTgogCQkJCTogTUFTS19MT0NPTk47CiAJCQlicmVhazsKIAkJY2FzZSBQTUFDX1NDUkVBTUVSOgpAQCAtOTU0LDcgKzk3Niw3IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKGJlaWdlIHx8IGc0YWdwKQogCQk7Ci0JZWxzZSBpZiAoY2hpcC0+bW9kZWwgPT0gUE1BQ19TQ1JFQU1FUikKKwllbHNlIGlmIChjaGlwLT5tb2RlbCA9PSBQTUFDX1NDUkVBTUVSIHx8IHBtNTUwMCkKIAkJZXJyID0gYnVpbGRfbWl4ZXJzKGNoaXAsIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzMiksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzMik7CiAJZWxzZSBpZiAoIXBtNzUwMCkKQEAgLTk2MiwxOSArOTg0LDM1IEBACiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzMik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJaWYgKHBtNTUwMCkgeworCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKKwkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDApLAorCQkJCSAgIHNuZF9wbWFjX2F3YWNzX21peGVyczJfcG1hYzU1MDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCWlmIChwbTc1MDApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWM3NTAwKSwKIAkJCQkgICBzbmRfcG1hY19hd2Fjc19taXhlcnNfcG1hYzc1MDApOworCWVsc2UgaWYgKHBtNTUwMCkKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJICAgIChtYXN0ZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX2F3YWNzX21peGVyc19wbWFjNTUwMCwKKwkJCQkJCWNoaXApKSk7CiAJZWxzZSBpZiAoYmVpZ2UpCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2JlaWdlKSwKIAkJCQkgICBzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfYmVpZ2UpOwotCWVsc2UgaWYgKGltYWMpCisJZWxzZSBpZiAoaW1hYyB8fCBsb21iYXJkKSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCSAgICAobWFzdGVyX3ZvbCA9IHNuZF9jdGxfbmV3MShzbmRfcG1hY19zY3JlYW1lcl9taXhlcnNfbG8sCisJCQkJCQljaGlwKSkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCSAgIEFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2ltYWMpLAogCQkJCSAgIHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19pbWFjKTsKLQllbHNlIGlmIChnNGFncCkKKwl9IGVsc2UgaWYgKGc0YWdwKQogCQllcnIgPSBidWlsZF9taXhlcnMoY2hpcCwKIAkJCQkgICBBUlJBWV9TSVpFKHNuZF9wbWFjX3NjcmVhbWVyX21peGVyc19nNGFncCksCiAJCQkJICAgc25kX3BtYWNfc2NyZWFtZXJfbWl4ZXJzX2c0YWdwKTsKQEAgLTk4NCw4ICsxMDIyLDEwIEBACiAJCQkJICAgc25kX3BtYWNfYXdhY3NfbWl4ZXJzX3BtYWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoKHBtNzUwMCB8fCBpbWFjIHx8IGc0YWdwKQorCWNoaXAtPm1hc3Rlcl9zd19jdGwgPSBzbmRfY3RsX25ldzEoKHBtNzUwMCB8fCBpbWFjIHx8IGc0YWdwIHx8IGxvbWJhcmQpCiAJCQk/ICZzbmRfcG1hY19hd2Fjc19tYXN0ZXJfc3dfaW1hYworCQkJOiBwbTU1MDAKKwkJCT8gJnNuZF9wbWFjX2F3YWNzX21hc3Rlcl9zd19wbWFjNTUwMAogCQkJOiAmc25kX3BtYWNfYXdhY3NfbWFzdGVyX3N3LCBjaGlwKTsKIAllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBjaGlwLT5tYXN0ZXJfc3dfY3RsKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMTcsOCArMTA1Nyw5IEBACiAjZW5kaWYgLyogUE1BQ19BTVBfQVZBSUwgKi8KIAl7CiAJCS8qIHJvdXRlIEEgPSBoZWFkcGhvbmUsIHJvdXRlIEMgPSBzcGVha2VyICovCi0JCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLCBBUlJBWV9TSVpFKHNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sKSwKLQkJCQkJc25kX3BtYWNfYXdhY3Nfc3BlYWtlcl92b2wpOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkgICAgKHNwZWFrZXJfdm9sID0gc25kX2N0bF9uZXcxKHNuZF9wbWFjX2F3YWNzX3NwZWFrZXJfdm9sLAorCQkJCQkJY2hpcCkpKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQljaGlwLT5zcGVha2VyX3N3X2N0bCA9IHNuZF9jdGxfbmV3MShpbWFjMQpAQCAtMTAzMSw2ICsxMDcyLDMzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChwbTU1MDAgfHwgaW1hYyB8fCBsb21iYXJkKSB7CisJCXZtYXN0ZXJfc3cgPSBzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoCisJCQkiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICh1bnNpZ25lZCBpbnQgKikgTlVMTCk7CisJCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKHZtYXN0ZXJfc3csCisJCQkJCQkgY2hpcC0+bWFzdGVyX3N3X2N0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQodm1hc3Rlcl9zdywKKwkJCQkJCSAgY2hpcC0+c3BlYWtlcl9zd19jdGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHZtYXN0ZXJfc3cpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCXZtYXN0ZXJfdm9sID0gc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKAorCQkJIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAodW5zaWduZWQgaW50ICopIE5VTEwpOworCQllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZSh2bWFzdGVyX3ZvbCwgbWFzdGVyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUodm1hc3Rlcl92b2wsIHNwZWFrZXJfdm9sKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCB2bWFzdGVyX3ZvbCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYmVpZ2UgfHwgZzRhZ3ApCiAJCWVyciA9IGJ1aWxkX21peGVycyhjaGlwLAogCQkJCUFSUkFZX1NJWkUoc25kX3BtYWNfc2NyZWFtZXJfbWljX2Jvb3N0X2JlaWdlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggZjg2MGQzOS4uNDVhNzYyOSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlpbnQgdGltZW91dCA9IDUwOwogCXdoaWxlICgoaW5fbGUzMigmY2hpcC0+YXdhY3MtPmNvZGVjX2N0cmwpICYgTUFTS19ORVdFQ01EKSAmJiB0aW1lb3V0LS0pCiAJCXVkZWxheSgxKTsKLQlpZiAoISB0aW1lb3V0KQorCWlmICh0aW1lb3V0IDwgMCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgImJ1cmd1bmR5X2J1c3lfd2FpdDogdGltZW91dFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9kYWNhLmMgYi9zb3VuZC9wcGMvZGFjYS5jCmluZGV4IDhhNWIyOTAuLmY4ZDQ3OGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9kYWNhLmMKKysrIGIvc291bmQvcHBjL2RhY2EuYwpAQCAtODIsNyArODIsNyBAQAogCWRhdGFbMV0gfD0gbWl4LT5kZWVtcGhhc2lzID8gMHg0MCA6IDA7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgREFDQV9SRUdfQVZPTCwKIAkJCQkgICAgICAgMiwgZGF0YSkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBzZXQgdm9sdW1lIFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmMgYi9zb3VuZC9wcGMvcG1hYy5jCmluZGV4IGFmNzZlZTguLjliNGU5YzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmMKKysrIGIvc291bmQvcHBjL3BtYWMuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJcmVjLT5ydW5uaW5nID0gMDsKLQkJLypwcmludGsoInN0b3BwZWQhIVxuIik7Ki8KKwkJLypwcmludGsoS0VSTl9ERUJVRyAic3RvcHBlZCEhXG4iKTsqLwogCQlzbmRfcG1hY19kbWFfc3RvcChyZWMpOwogCQlmb3IgKGkgPSAwLCBjcCA9IHJlYy0+Y21kLmNtZHM7IGkgPCByZWMtPm5wZXJpb2RzOyBpKyssIGNwKyspCiAJCQlvdXRfbGUxNigmY3AtPmNvbW1hbmQsIERCRE1BX1NUT1ApOwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJfQogI2VuZGlmCiAJY291bnQgKz0gcmVjLT5jdXJfcGVyaW9kICogcmVjLT5wZXJpb2Rfc2l6ZTsKLQkvKnByaW50aygicG9pbnRlcj0lZFxuIiwgY291bnQpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAicG9pbnRlcj0lZFxuIiwgY291bnQpOyovCiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzLT5ydW50aW1lLCBjb3VudCk7CiB9CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQAogCQkJaWYgKCEgKHN0YXQgJiBBQ1RJVkUpKQogCQkJCWJyZWFrOwogCi0JCQkvKnByaW50aygidXBkYXRlIGZyYWcgJWRcbiIsIHJlYy0+Y3VyX3BlcmlvZCk7Ki8KKwkJCS8qcHJpbnRrKEtFUk5fREVCVUcgInVwZGF0ZSBmcmFnICVkXG4iLCByZWMtPmN1cl9wZXJpb2QpOyovCiAJCQlzdF9sZTE2KCZjcC0+eGZlcl9zdGF0dXMsIDApOwogCQkJc3RfbGUxNigmY3AtPnJlcV9jb3VudCwgcmVjLT5wZXJpb2Rfc2l6ZSk7CiAJCQkvKnN0X2xlMTYoJmNwLT5yZXNfY291bnQsIDApOyovCkBAIC04MDYsNyArODA2LDcgQEAKIAlzdHJ1Y3Qgc25kX3BtYWMgKmNoaXAgPSBkZXZpZDsKIAlpbnQgY3RybCA9IGluX2xlMzIoJmNoaXAtPmF3YWNzLT5jb250cm9sKTsKIAotCS8qcHJpbnRrKCJwbWFjOiBjb250cm9sIGludGVycnVwdC4uIDB4JXhcbiIsIGN0cmwpOyovCisJLypwcmludGsoS0VSTl9ERUJVRyAicG1hYzogY29udHJvbCBpbnRlcnJ1cHQuLiAweCV4XG4iLCBjdHJsKTsqLwogCWlmIChjdHJsICYgTUFTS19QT1JUQ0hHKSB7CiAJCS8qIGRvIHNvbWV0aGluZyB3aGVuIGhlYWRwaG9uZSBpcyBwbHVnZ2VkL3VucGx1Z2dlZD8gKi8KIAkJaWYgKGNoaXAtPnVwZGF0ZV9hdXRvbXV0ZSkKQEAgLTEwMzMsNyArMTAzMyw4IEBACiAJfQogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgInR1bWJsZXIiKSkgewogCQljaGlwLT5tb2RlbCA9IFBNQUNfVFVNQkxFUjsKLQkJY2hpcC0+Y2FuX2NhcHR1cmUgPSBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwyIik7CisJCWNoaXAtPmNhbl9jYXB0dXJlID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpCisJCQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKTsKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3Bvd2VybWFjLmMgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwppbmRleCBjOTM2MjI1Li41YTkyOTA2IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG93ZXJtYWMuYworKysgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwpAQCAtNTgsOSArNTgsOSBAQAogCWNoYXIgKm5hbWVfZXh0OwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9wbWFjX25ldyhjYXJkLCAmY2hpcCkpIDwgMCkKIAkJZ290byBfX2Vycm9yOwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCQlnb3RvIF9fZXJyb3I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoInVuc3VwcG9ydGVkIGhhcmR3YXJlICVkXG4iLCBjaGlwLT5tb2RlbCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuc3VwcG9ydGVkIGhhcmR3YXJlICVkXG4iLCBjaGlwLT5tb2RlbCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gX19lcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCBmZjMyMTExLi5mMzYxYzI2IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTk2OSwxMSArOTY5LDkgQEAKIAl9CiAKIAkvKiBjcmVhdGUgY2FyZCBpbnN0YW5jZSAqLwotCXRoZV9jYXJkLmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCF0aGVfY2FyZC5jYXJkKSB7Ci0JCXJldCA9IC1FTlhJTzsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJnRoZV9jYXJkLmNhcmQpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGNsZWFuX2lycTsKLQl9CiAKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+ZHJpdmVyLCAiUFMzIik7CiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPnNob3J0bmFtZSwgIlBTMyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggM2ViMjIzMy4uNDAyMjJmYyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC00MSw3ICs0MSw3IEBACiAjdW5kZWYgREVCVUcKIAogI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCisjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKICNlbHNlCiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19WT0wsIDYsCiAJCQkJCSAgIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCB2b2x1bWUgXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKG1peC0+aTJjLmNsaWVudCwgVEFTX1JFR19EUkMsCiAJCQkJCSAgIDIsIHZhbCkgPCAwKSB7Ci0JCXNuZF9wcmludGsoImZhaWxlZCB0byBzZXQgRFJDXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHNldCBEUkNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zODYsNyArMzg2LDcgQEAKIAogCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEobWl4LT5pMmMuY2xpZW50LCBUQVNfUkVHX0RSQywKIAkJCQkJICAgNiwgdmFsKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBEUkNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IERSQ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTUwNiw3ICs1MDYsOCBAQAogCQlibG9ja1tpXSA9ICh2b2wgPj4gKChpbmZvLT5ieXRlcyAtIGkgLSAxKSAqIDgpKSAmIDB4ZmY7CiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIGluZm8tPnJlZywKIAkJCQkJICAgaW5mby0+Ynl0ZXMsIGJsb2NrKSA8IDApIHsKLQkJc25kX3ByaW50aygiZmFpbGVkIHRvIHNldCBtb25vIHZvbHVtZSAlZFxuIiwgaW5mby0+aW5kZXgpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLAorCQkJICAgaW5mby0+aW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CkBAIC02NDMsNyArNjQ0LDcgQEAKIAl9CiAJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShtaXgtPmkyYy5jbGllbnQsIHJlZywKIAkJCQkJICAgOSwgYmxvY2spIDwgMCkgewotCQlzbmRfcHJpbnRrKCJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCByZWcpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc2V0IG1vbm8gdm9sdW1lICVkXG4iLCByZWcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zaC9LY29uZmlnIGIvc291bmQvc2gvS2NvbmZpZwppbmRleCBjZmMxNDM5Li5hZWQwZjkwIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9LY29uZmlnCisrKyBiL3NvdW5kL3NoL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAl0cmlzdGF0ZSAiRHJlYW1jYXN0IFlhbWFoYSBBSUNBIHNvdW5kIgogCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUCiAJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgRzJfRE1BCiAJaGVscAogCSAgQUxTQSBTb3VuZCBkcml2ZXIgZm9yIHRoZSBTRUdBIERyZWFtY2FzdCBjb25zb2xlLgogCmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggN2M5MjBmMy4uZjU1MTIzMyAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtNjA5LDExICs2MDksMTEgQEAKIAlkcmVhbWNhc3RjYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FpY2EpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWRyZWFtY2FzdGNhcmQpKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkcmVhbWNhc3RjYXJkLT5jYXJkID0KLQkgICAgc25kX2NhcmRfbmV3KGluZGV4LCBTTkRfQUlDQV9EUklWRVIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAodW5saWtlbHkoIWRyZWFtY2FzdGNhcmQtPmNhcmQpKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBTTkRfQUlDQV9EUklWRVIsIFRISVNfTU9EVUxFLCAwLAorCQkJICAgICAgJmRyZWFtY2FzdGNhcmQtPmNhcmQpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogCQlrZnJlZShkcmVhbWNhc3RjYXJkKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiBlcnI7CiAJfQogCXN0cmNweShkcmVhbWNhc3RjYXJkLT5jYXJkLT5kcml2ZXIsICJzbmRfYWljYSIpOwogCXN0cmNweShkcmVhbWNhc3RjYXJkLT5jYXJkLT5zaG9ydG5hbWUsIFNORF9BSUNBX0RSSVZFUik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvS2NvbmZpZyBiL3NvdW5kL3NvYy9LY29uZmlnCmluZGV4IGVmMDI1YzYuLjNkMmJiNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXRyaXN0YXRlICJBTFNBIGZvciBTb0MgYXVkaW8gc3VwcG9ydCIKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBBQzk3X0JVUyBpZiBTTkRfU09DX0FDOTdfQlVTCisJc2VsZWN0IFNORF9KQUNLIGlmIElOUFVUPXkgfHwgSU5QVVQ9U05ECiAJLS0taGVscC0tLQogCiAJICBJZiB5b3Ugd2FudCBBU29DIHN1cHBvcnQsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSBhbmQgYWxzbyB0byB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9NYWtlZmlsZQppbmRleCA4NmE5YjFmLi4wMjM3ODc5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotc25kLXNvYy1jb3JlLW9ianMgOj0gc29jLWNvcmUubyBzb2MtZGFwbS5vCitzbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8gc29jLWphY2subwogCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gc25kLXNvYy1jb3JlLm8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBjb2RlY3MvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKaW5kZXggM2RjZGM0ZS4uOWVmNmI5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KTsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGF0bWVsX3BjbV9vcHMgPSB7CiAJLm9wZW4JCT0gYXRtZWxfcGNtX29wZW4sCiAJLmNsb3NlCQk9IGF0bWVsX3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCBmZjAwNTRiLi5lNTg4ZTYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKQEAgLTY5Nyw2ICs2OTcsMTUgQEAKICNkZWZpbmUgQVRNRUxfU1NDX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzggICAgIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfFwKIAkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYXRtZWxfc3NjX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBhdG1lbF9zc2Nfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBhdG1lbF9zc2Nfc2h1dGRvd24sCisJLnByZXBhcmUJPSBhdG1lbF9zc2NfcHJlcGFyZSwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfc3NjX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2RpdiwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdG1lbF9zc2NfZGFpW05VTV9TU0NfREVWSUNFU10gPSB7CiAJewkubmFtZSA9ICJhdG1lbC1zc2MwIiwKIAkJLmlkID0gMCwKQEAgLTcxMiwxMyArNzIxLDcgQEAKIAkJCS5jaGFubmVsc19tYXggPSAyLAogCQkJLnJhdGVzID0gQVRNRUxfU1NDX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBBVE1FTF9TU0NfRk9STUFUUyx9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdG1lbF9zc2Nfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IGF0bWVsX3NzY19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXRtZWxfc3NjX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXRtZWxfc3NjX2h3X3BhcmFtcywKLQkJCS5zZXRfZm10ID0gYXRtZWxfc3NjX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdG1lbF9zc2Nfc2V0X2RhaV9jbGtkaXYsfSwKKwkJLm9wcyA9ICZhdG1lbF9zc2NfZGFpX29wcywKIAkJLnByaXZhdGVfZGF0YSA9ICZzc2NfaW5mb1swXSwKIAl9LAogI2lmIE5VTV9TU0NfREVWSUNFUyA9PSAzCkBAIC03MzYsMTMgKzczOSw3IEBACiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJCS5yYXRlcyA9IEFUTUVMX1NTQ19SQVRFUywKIAkJCS5mb3JtYXRzID0gQVRNRUxfU1NDX0ZPUk1BVFMsfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gYXRtZWxfc3NjX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdG1lbF9zc2Nfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0bWVsX3NzY19wcmVwYXJlLAotCQkJLmh3X3BhcmFtcyA9IGF0bWVsX3NzY19od19wYXJhbXMsCi0JCQkuc2V0X2ZtdCA9IGF0bWVsX3NzY19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXRtZWxfc3NjX3NldF9kYWlfY2xrZGl2LH0sCisJCS5vcHMgPSAmYXRtZWxfc3NjX2RhaV9vcHMsCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMV0sCiAJfSwKIAl7CS5uYW1lID0gImF0bWVsLXNzYzIiLApAQCAtNzU5LDEzICs3NTYsNyBAQAogCQkJLmNoYW5uZWxzX21heCA9IDIsCiAJCQkucmF0ZXMgPSBBVE1FTF9TU0NfUkFURVMsCiAJCQkuZm9ybWF0cyA9IEFUTUVMX1NTQ19GT1JNQVRTLH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0bWVsX3NzY19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXRtZWxfc3NjX3NodXRkb3duLAotCQkJLnByZXBhcmUgPSBhdG1lbF9zc2NfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdG1lbF9zc2NfaHdfcGFyYW1zLAotCQkJLnNldF9mbXQgPSBhdG1lbF9zc2Nfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X2Nsa2RpdiA9IGF0bWVsX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAorCQkub3BzID0gJmF0bWVsX3NzY19kYWlfb3BzLAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzJdLAogCX0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9wbGF5cGFxX3dtODUxMC5jIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKaW5kZXggNDNkZDhjZS4uNzA2NTc1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3BsYXlwYXFfd204NTEwLmMKQEAgLTE2NCw0MSArMTY0LDQxIEBACiAJICovCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CiAJY2FzZSA0ODAwMDoKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzE7Ci0JCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OwotCQlicmVhazsKLQotCWNhc2UgNDQxMDA6Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKLQkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8xOwotCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKLQkJYnJlYWs7Ci0KLQljYXNlIDIyMDUwOgotCQlwbGxfb3V0ID0gMTEyODk2MDA7CisJCXBsbF9vdXQgPSAyNDU3NjAwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl8yOwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDE2MDAwOgotCQlwbGxfb3V0ID0gMTIyODgwMDA7Ci0JCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMzsKKwljYXNlIDQ0MTAwOgorCQlwbGxfb3V0ID0gMjI1NzkyMDA7CisJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfMjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCi0JY2FzZSAxMTAyNToKLQkJcGxsX291dCA9IDExMjg5NjAwOworCWNhc2UgMjIwNTA6CisJCXBsbF9vdXQgPSAyMjU3OTIwMDsKIAkJbWNsa19kaXYgPSBXTTg1MTBfTUNMS0RJVl80OwogCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKIAkJYnJlYWs7CiAKLQljYXNlIDgwMDA6Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKKwljYXNlIDE2MDAwOgorCQlwbGxfb3V0ID0gMjQ1NzYwMDA7CiAJCW1jbGtfZGl2ID0gV004NTEwX01DTEtESVZfNjsKIAkJYmNsayA9IFdNODUxMF9CQ0xLRElWXzg7CiAJCWJyZWFrOwogCisJY2FzZSAxMTAyNToKKwkJcGxsX291dCA9IDIyNTc5MjAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzg7CisJCWJjbGsgPSBXTTg1MTBfQkNMS0RJVl84OworCQlicmVhazsKKworCWNhc2UgODAwMDoKKwkJcGxsX291dCA9IDI0NTc2MDAwOworCQltY2xrX2RpdiA9IFdNODUxMF9NQ0xLRElWXzEyOworCQliY2xrID0gV004NTEwX0JDTEtESVZfODsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcl93YXJuaW5nKCJwbGF5cGFxX3dtODUxMDogVW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGUgJWRcbiIsCiAJCQkgICBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKaW5kZXggNmVhMDRiZS4uMTczYTIzOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSA8bGludXgvYXRtZWwtc3NjLmg+CiAKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKQEAgLTUyLDYgKzU0LDkgQEAKICNpbmNsdWRlICJhdG1lbC1wY20uaCIKICNpbmNsdWRlICJhdG1lbF9zc2NfZGFpLmgiCiAKKyNkZWZpbmUgTUNMS19SQVRFIDEyMDAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICptY2xrOwogCiBzdGF0aWMgaW50IGF0OTFzYW05ZzIwZWtfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTU5LDExICs2NCwxMiBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JLyogY29kZWMgc3lzdGVtIGNsb2NrIGlzIHN1cHBsaWVkIGJ5IFBDSzAsIHNldCB0byAxMk1IeiAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3MzFfU1lTQ0xLLAotCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCisJCU1DTEtfUkFURSwgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApIHsKKwkJY2xrX2Rpc2FibGUobWNsayk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODksNiArMTk1LDMxIEBACiAJLnNodXRkb3duID0gYXQ5MXNhbTlnMjBla19zaHV0ZG93biwKIH07CiAKK3N0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdGF0aWMgaW50IG1jbGtfb247CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJaWYgKCFtY2xrX29uKQorCQkJcmV0ID0gY2xrX2VuYWJsZShtY2xrKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJbWNsa19vbiA9IDE7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChtY2xrX29uKQorCQkJY2xrX2Rpc2FibGUobWNsayk7CisJCW1jbGtfb24gPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYXQ5MXNhbTlnMjBla19kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fTUlDKCJJbnQgTWljIiwgTlVMTCksCkBAIC0yNDMsMjEgKzI3NCw0OCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19hdDkxc2FtOWcyMGVrID0gewotCS5uYW1lID0gIldNODczMSIsCisJLm5hbWUgPSAiQVQ5MVNBTUcyMC1FSyIsCiAJLnBsYXRmb3JtID0gJmF0bWVsX3NvY19wbGF0Zm9ybSwKIAkuZGFpX2xpbmsgPSAmYXQ5MXNhbTlnMjBla19kYWksCiAJLm51bV9saW5rcyA9IDEsCisJLnNldF9iaWFzX2xldmVsID0gYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgYXQ5MXNhbTlnMjBla193bTg3MzFfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MWIsCi19OworLyoKKyAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgorICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQorICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KKyAqLworc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSAweDFiOworCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF0OTFzYW05ZzIwZWtfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19hdDkxc2FtOWcyMGVrLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCi0JLmNvZGVjX2RhdGEgPSAmYXQ5MXNhbTlnMjBla193bTg3MzFfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlOwpAQCAtMjY2LDIzICszMjQsNTYgQEAKIHsKIAlzdHJ1Y3QgYXRtZWxfc3NjX2luZm8gKnNzY19wID0gYXQ5MXNhbTlnMjBla19kYWkuY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzc2NfZGV2aWNlICpzc2MgPSBOVUxMOworCXN0cnVjdCBjbGsgKnBsbGI7CiAJaW50IHJldDsKIAorCWlmICghbWFjaGluZV9pc19hdDkxc2FtOWcyMGVrKCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBDb2RlYyBNQ0xLIGlzIHN1cHBsaWVkIGJ5IFBDSzAgLSBzZXQgaXQgdXAuCisJICovCisJbWNsayA9IGNsa19nZXQoTlVMTCwgInBjazAiKTsKKwlpZiAoSVNfRVJSKG1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIGdldCBNQ0xLXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtY2xrKTsKKwkJZ290byBlcnI7CisJfQorCisJcGxsYiA9IGNsa19nZXQoTlVMTCwgInBsbGIiKTsKKwlpZiAoSVNfRVJSKG1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIGdldCBQTExCXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtY2xrKTsKKwkJZ290byBlcnJfbWNsazsKKwl9CisJcmV0ID0gY2xrX3NldF9wYXJlbnQobWNsaywgcGxsYik7CisJY2xrX3B1dChwbGxiKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBGYWlsZWQgdG8gc2V0IE1DTEsgcGFyZW50XG4iKTsKKwkJZ290byBlcnJfbWNsazsKKwl9CisKKwljbGtfc2V0X3JhdGUobWNsaywgTUNMS19SQVRFKTsKKwogCS8qCiAJICogUmVxdWVzdCBTU0MgZGV2aWNlCiAJICovCiAJc3NjID0gc3NjX3JlcXVlc3QoMCk7CiAJaWYgKElTX0VSUihzc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogRmFpbGVkIHRvIHJlcXVlc3QgU1NDIDBcbiIpOwogCQlyZXQgPSBQVFJfRVJSKHNzYyk7CiAJCXNzYyA9IE5VTEw7CiAJCWdvdG8gZXJyX3NzYzsKIAl9CiAJc3NjX3AtPnNzYyA9IHNzYzsKIAorCXJldCA9IHdtODczMV9pMmNfcmVnaXN0ZXIoKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyX3NzYzsKKwogCWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJInBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAl9CiAKQEAgLTI5MiwxNCArMzgzLDE5IEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGF0OTFzYW05ZzIwZWtfc25kX2RldmljZSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSJwbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogCiBlcnJfc3NjOgorCXNzY19mcmVlKHNzYyk7CisJc3NjX3AtPnNzYyA9IE5VTEw7CitlcnJfbWNsazoKKwljbGtfcHV0KG1jbGspOworCW1jbGsgPSBOVUxMOworZXJyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNyw2ICs0MTMsOCBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlKTsKIAlhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UgPSBOVUxMOworCWNsa19wdXQobWNsayk7CisJbWNsayA9IE5VTEw7CiB9CiAKIG1vZHVsZV9pbml0KGF0OTFzYW05ZzIwZWtfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYyBiL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCmluZGV4IGJjOGQ2NTQuLjMwNDkwYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiZG1hMi5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNuZF9wY21fb3BzIGF1MXhwc2NfcGNtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXUxeHBzY19wY21fb3BzID0gewogCS5vcGVuCQk9IGF1MXhwc2NfcGNtX29wZW4sCiAJLmNsb3NlCQk9IGF1MXhwc2NfcGNtX2Nsb3NlLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCmluZGV4IGYwZTMwYWUuLjQ3OWQ3YmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYwpAQCAtMzQyLDYgKzM0MiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdTF4cHNjX2FjOTdfZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IGF1MXhwc2NfYWM5N190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBhdTF4cHNjX2FjOTdfaHdfcGFyYW1zLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGF1MXhwc2NfYWM5N19kYWkgPSB7CiAJLm5hbWUJCQk9ICJhdTF4cHNjX2FjOTciLAogCS5hYzk3X2NvbnRyb2wJCT0gMSwKQEAgLTM2MSwxMCArMzY2LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBhdTF4cHNjX2FjOTdfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcwk9IGF1MXhwc2NfYWM5N19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmF1MXhwc2NfYWM5N19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF1MXhwc2NfYWM5N19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKaW5kZXggZjkxNmRlNC4uYmI1ODkzMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwpAQCAtMzY3LDYgKzM2NywxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdTF4cHNjX2kyc19kYWlfb3BzID0geworCS50cmlnZ2VyCT0gYXUxeHBzY19pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gYXUxeHBzY19pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYXUxeHBzY19pMnNfc2V0X2ZtdCwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBhdTF4cHNjX2kyc19kYWkgPSB7CiAJLm5hbWUJCQk9ICJhdTF4cHNjX2kycyIsCiAJLnByb2JlCQkJPSBhdTF4cHNjX2kyc19wcm9iZSwKQEAgLTM4NSwxMSArMzkxLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAkvKiAyIHdpdGhvdXQgZXh0ZXJuYWwgaGVscCAqLwogCX0sCi0JLm9wcyA9IHsKLQkJLnRyaWdnZXIJPSBhdTF4cHNjX2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gYXUxeHBzY19pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdAk9IGF1MXhwc2NfaTJzX3NldF9mbXQsCi0JfSwKKwkub3BzID0gJmF1MXhwc2NfaTJzX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTChhdTF4cHNjX2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCmluZGV4IDgwNjdjZmEuLjhjZmVkMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2FjOTdfb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fYWM5N19vcHMgPSB7CiAJLm9wZW4JCT0gYmY1eHhfcGNtX29wZW4sCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBiZjV4eF9wY21faHdfcGFyYW1zLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKaW5kZXggM2JlMmJlNi4uOGE5MzVmMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCkBAIC0zMSw3MiArMzEsNDYgQEAKICNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgogI2luY2x1ZGUgImJmNXh4LWFjOTcuaCIKIAotI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzAge1BfU1BPUlQwX1RGUywgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBcCi0JCVBfU1BPUlQwX1JGUywgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMSB7UF9TUE9SVDFfVEZTLCBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFwKLQkJUF9TUE9SVDFfUkZTLCBQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDB9Ci0KLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8yIHtQX1NQT1JUMl9URlMsIFBfU1BPUlQyX0RUUFJJLCBQX1NQT1JUMl9UU0NMSywgXAotCQlQX1NQT1JUMl9SRlMsIFBfU1BPUlQyX0RSUFJJLCBQX1NQT1JUMl9SU0NMSywgMH0KLQotI2RlZmluZSBQSU5fUkVRX1NQT1JUXzMge1BfU1BPUlQzX1RGUywgUF9TUE9SVDNfRFRQUkksIFBfU1BPUlQzX1RTQ0xLLCBcCi0JCVBfU1BPUlQzX1JGUywgUF9TUE9SVDNfRFJQUkksIFBfU1BPUlQzX1JTQ0xLLCAwfQotI2Vsc2UKLSNkZWZpbmUgUElOX1JFUV9TUE9SVF8wIHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywgXAotCQkgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfQotCi0jZGVmaW5lIFBJTl9SRVFfU1BPUlRfMSB7UF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsIFwKLQkJIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0KLSNlbmRpZgotCiBzdGF0aWMgaW50ICpjbWRfY291bnQ7CiBzdGF0aWMgaW50IHNwb3J0X251bSA9IENPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNOwogCisjZGVmaW5lIFNQT1JUX1JFUSh4KSBcCisJW3hdID0ge1BfU1BPUlQjI3gjI19URlMsIFBfU1BPUlQjI3gjI19EVFBSSSwgUF9TUE9SVCMjeCMjX1RTQ0xLLCBcCisJICAgICAgIFBfU1BPUlQjI3gjI19SRlMsIFBfU1BPUlQjI3gjI19EUlBSSSwgUF9TUE9SVCMjeCMjX1JTQ0xLLCAwfQogc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsKLQkJUElOX1JFUV9TUE9SVF8wLAotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMQotCQlQSU5fUkVRX1NQT1JUXzEsCisjaWZkZWYgU1BPUlQwX1RDUjEKKwlTUE9SVF9SRVEoMCksCiAjZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzIKLQkJUElOX1JFUV9TUE9SVF8yLAorI2lmZGVmIFNQT1JUMV9UQ1IxCisJU1BPUlRfUkVRKDEpLAogI2VuZGlmCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8zCi0JCVBJTl9SRVFfU1BPUlRfMywKKyNpZmRlZiBTUE9SVDJfVENSMQorCVNQT1JUX1JFUSgyKSwKICNlbmRpZgotCX07CisjaWZkZWYgU1BPUlQzX1RDUjEKKwlTUE9SVF9SRVEoMyksCisjZW5kaWYKK307CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BvcnRfcGFyYW0gc3BvcnRfcGFyYW1zWzRdID0gewotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQwX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDBfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMF9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMF9UQ1IxLAotCX0sCi0jaWZkZWYgUElOX1JFUV9TUE9SVF8xCi0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDFfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMV9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQxX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQxX1RDUjEsCi0JfSwKLSNlbmRpZgotI2lmZGVmIFBJTl9SRVFfU1BPUlRfMgotCXsKLQkJLmRtYV9yeF9jaGFuCT0gQ0hfU1BPUlQyX1JYLAotCQkuZG1hX3R4X2NoYW4JPSBDSF9TUE9SVDJfVFgsCi0JCS5lcnJfaXJxCT0gSVJRX1NQT1JUMl9FUlJPUiwKLQkJLnJlZ3MJCT0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMl9UQ1IxLAotCX0sCi0jZW5kaWYKLSNpZmRlZiBQSU5fUkVRX1NQT1JUXzMKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUM19SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQzX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDNfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDNfVENSMSwKKyNkZWZpbmUgU1BPUlRfUEFSQU1TKHgpIFwKKwlbeF0gPSB7IFwKKwkJLmRtYV9yeF9jaGFuID0gQ0hfU1BPUlQjI3gjI19SWCwgXAorCQkuZG1hX3R4X2NoYW4gPSBDSF9TUE9SVCMjeCMjX1RYLCBcCisJCS5lcnJfaXJxICAgICA9IElSUV9TUE9SVCMjeCMjX0VSUk9SLCBcCisJCS5yZWdzICAgICAgICA9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVCMjeCMjX1RDUjEsIFwKIAl9CitzdGF0aWMgc3RydWN0IHNwb3J0X3BhcmFtIHNwb3J0X3BhcmFtc1s0XSA9IHsKKyNpZmRlZiBTUE9SVDBfVENSMQorCVNQT1JUX1BBUkFNUygwKSwKKyNlbmRpZgorI2lmZGVmIFNQT1JUMV9UQ1IxCisJU1BPUlRfUEFSQU1TKDEpLAorI2VuZGlmCisjaWZkZWYgU1BPUlQyX1RDUjEKKwlTUE9SVF9QQVJBTVMoMiksCisjZW5kaWYKKyNpZmRlZiBTUE9SVDNfVENSMQorCVNQT1JUX1BBUkFNUygzKSwKICNlbmRpZgogfTsKIApAQCAtMzMyLDExICszMDYsMTEgQEAKIAlpZiAoY21kX2NvdW50ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSwgInNvYy1hdWRpbyIpKSB7CisJaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHNwb3J0X3JlcVtzcG9ydF9udW1dLCAic29jLWF1ZGlvIikpIHsKIAkJcHJfZXJyKCJSZXF1ZXN0aW5nIFBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CiAJCXJldCA9ICAtRUZBVUxUOwogCQlnb3RvIHBlcmlwaGVyYWxfZXJyOwotCQl9CisJfQogCiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAkvKiBSZXF1ZXN0IFBCMyBhcyByZXNldCBwaW4gKi8KQEAgLTM4Myw5ICszNTcsOSBAQAogc3BvcnRfZXJyOgogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJZ3Bpb19mcmVlKENPTkZJR19TTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0pOwotI2VuZGlmCiBncGlvX2VycjoKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworI2VuZGlmCisJcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0pOwogcGVyaXBoZXJhbF9lcnI6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNtZF9jb3VudCk7CiAJY21kX2NvdW50ID0gTlVMTDsKQEAgLTM5OCw3ICszNzIsNyBAQAogewogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbWRfY291bnQpOwogCWNtZF9jb3VudCA9IE5VTEw7Ci0JcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSk7CiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAlncGlvX2ZyZWUoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCmluZGV4IDdmMmE1ZTEuLmVkZmJkYzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJU1NZTkMoKTsKIAogCS8qIFdoZW4gVFVWRiBpcyBzZXQsIHRoZSBkYXRhIGlzIGFscmVhZHkgc2VuZCBvdXQgKi8KLQl3aGlsZSAoIShzdGF0dXMgJiBUVVZGKSAmJiBjb3VudCsrIDwgMTAwMDApIHsKKwl3aGlsZSAoIShzdGF0dXMgJiBUVVZGKSAmJiArK2NvdW50IDwgMTAwMDApIHsKIAkJdWRlbGF5KDEpOwogCQlzdGF0dXMgPSBiZmluX3JlYWRfU1BPUlRfU1RBVCgpOwogCQlTU1lOQygpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJU1NZTkMoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlpZiAoY291bnQgPT0gMTAwMDApIHsKKwlpZiAoY291bnQgPj0gMTAwMDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhZDczMzExOiBmYWlsZWQgdG8gY29uZmlndXJlIGNvZGVjXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDUzZDI5MGIuLjEzMThjNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJcmV0dXJuIDAgOwogfQogCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2kyc19vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGJmNXh4X3BjbV9pMnNfb3BzID0gewogCS5vcGVuCQk9IGJmNXh4X3BjbV9vcGVuLAogCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zCT0gYmY1eHhfcGNtX2h3X3BhcmFtcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwppbmRleCBkMWQ5NWQyLi45NjQ4MjQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCkBAIC0yODcsNiArMjg3LDEzIEBACiAjZGVmaW5lIEJGNVhYX0kyU19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHxcCiAJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGJmNXh4X2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0gYmY1eHhfaTJzX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gYmY1eHhfaTJzX3NodXRkb3duLAorCS5od19wYXJhbXMJPSBiZjV4eF9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gYmY1eHhfaTJzX3NldF9kYWlfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGJmNXh4X2kyc19kYWkgPSB7CiAJLm5hbWUgPSAiYmY1eHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtMzA0LDEyICszMTEsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQkY1WFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IEJGNVhYX0kyU19GT1JNQVRTLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgICA9IGJmNXh4X2kyc19zdGFydHVwLAotCQkuc2h1dGRvd24gID0gYmY1eHhfaTJzX3NodXRkb3duLAotCQkuaHdfcGFyYW1zID0gYmY1eHhfaTJzX2h3X3BhcmFtcywKLQkJLnNldF9mbXQgPSBiZjV4eF9pMnNfc2V0X2RhaV9mbXQsCi0JfSwKKwkub3BzID0gJmJmNXh4X2kyc19kYWlfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGJmNXh4X2kyc19kYWkpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCmluZGV4IDNiOTllNDguLmI3OTUzYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBmcmFnY291bnQ7ICsraSkgewotCQlkZXNjW2ldLm5leHRfZGVzY19hZGRyICA9ICh1bnNpZ25lZCBsb25nKSYoZGVzY1tpICsgMV0pOworCQlkZXNjW2ldLm5leHRfZGVzY19hZGRyICA9ICYoZGVzY1tpICsgMV0pOwogCQlkZXNjW2ldLnN0YXJ0X2FkZHIgPSAodW5zaWduZWQgbG9uZylidWYgKyBpKmZyYWdzaXplOwogCQlkZXNjW2ldLmNmZyA9IGNmZzsKIAkJZGVzY1tpXS54X2NvdW50ID0geF9jb3VudDsKQEAgLTE0MywxMiArMTQzLDEyIEBACiAJfQogCiAJLyogbWFrZSBjaXJjdWxhciAqLwotCWRlc2NbZnJhZ2NvdW50LTFdLm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYzsKKwlkZXNjW2ZyYWdjb3VudC0xXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAKLQlwcl9kZWJ1Zygic2V0dXAgZGVzYzogZGVzYzA9JXAsIG5leHQwPSVseCwgZGVzYzE9JXAsIgotCQkibmV4dDE9JWx4XG54X2NvdW50PSV4LHlfY291bnQ9JXgsYWRkcj0weCVseCxjZnM9MHgleFxuIiwKLQkJJihkZXNjWzBdKSwgZGVzY1swXS5uZXh0X2Rlc2NfYWRkciwKLQkJJihkZXNjWzFdKSwgZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciwKKwlwcl9kZWJ1Zygic2V0dXAgZGVzYzogZGVzYzA9JXAsIG5leHQwPSVwLCBkZXNjMT0lcCwiCisJCSJuZXh0MT0lcFxueF9jb3VudD0leCx5X2NvdW50PSV4LGFkZHI9MHglbHgsY2ZzPTB4JXhcbiIsCisJCWRlc2MsIGRlc2NbMF0ubmV4dF9kZXNjX2FkZHIsCisJCWRlc2MrMSwgZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciwKIAkJZGVzY1swXS54X2NvdW50LCBkZXNjWzBdLnlfY291bnQsCiAJCWRlc2NbMF0uc3RhcnRfYWRkciwgZGVzY1swXS5jZmcpOwogfQpAQCAtMTg0LDIyICsxODQsMjAgQEAKIAlCVUdfT04oc3BvcnQtPmN1cnJfcnhfZGVzYyA9PSBzcG9ydC0+ZHVtbXlfcnhfZGVzYyk7CiAKIAkvKiBNYXliZSB0aGUgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgcmluZyBpcyBkYW1hZ2VkICovCi0Jc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV9yeF9kZXNjKzEpOworCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjICsgMTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKWdldF9kbWFfbmV4dF9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pOworCWRlc2MgPSBnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKTsKIAkvKiBDb3B5IHRoZSBkZXNjcmlwdG9yIHdoaWNoIHdpbGwgYmUgZGFtYWdlZCB0byBiYWNrdXAgKi8KIAl0ZW1wX2Rlc2MgPSAqZGVzYzsKIAlkZXNjLT54X2NvdW50ID0gMHhhOwogCWRlc2MtPnlfY291bnQgPSAwOwotCWRlc2MtPm5leHRfZGVzY19hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKKwlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9IHNwb3J0LT5kdW1teV9yeF9kZXNjOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkvKiBXYWl0aW5nIGZvciBkdW1teSBidWZmZXIgZGVzY3JpcHRvciBpcyBhbHJlYWR5IGhvb2tlZCovCiAJd2hpbGUgKChnZXRfZG1hX2N1cnJfZGVzY19wdHIoc3BvcnQtPmRtYV9yeF9jaGFuKSAtCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0KLQkJCSh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9yeF9kZXNjKQotCQk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpCisJCWNvbnRpbnVlOwogCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAkvKiBSZXN0b3JlIHRoZSBkYW1hZ2VkIGRlc2NyaXB0b3IgKi8KIAkqZGVzYyA9IHRlbXBfZGVzYzsKQEAgLTIxMCwxNCArMjA4LDEyIEBACiBzdGF0aWMgaW5saW5lIGludCBzcG9ydF9yeF9kbWFfc3RhcnQoc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQsIGludCBkdW1teSkKIHsKIAlpZiAoZHVtbXkpIHsKLQkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gXAotCQkJCSh1bnNpZ25lZCBsb25nKSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKKwkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmR1bW15X3J4X2Rlc2M7CiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZHVtbXlfcnhfZGVzYzsKIAl9IGVsc2UKIAkJc3BvcnQtPmN1cnJfcnhfZGVzYyA9IHNwb3J0LT5kbWFfcnhfZGVzYzsKIAotCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV9yeF9jaGFuLCBcCi0JCQkodW5zaWduZWQgbG9uZykoc3BvcnQtPmN1cnJfcnhfZGVzYykpOworCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoc3BvcnQtPmRtYV9yeF9jaGFuLCBzcG9ydC0+Y3Vycl9yeF9kZXNjKTsKIAlzZXRfZG1hX3hfY291bnQoc3BvcnQtPmRtYV9yeF9jaGFuLCAwKTsKIAlzZXRfZG1hX3hfbW9kaWZ5KHNwb3J0LT5kbWFfcnhfY2hhbiwgMCk7CiAJc2V0X2RtYV9jb25maWcoc3BvcnQtPmRtYV9yeF9jaGFuLCAoRE1BRkxPV19MQVJHRSB8IE5EU0laRV85IHwgXApAQCAtMjMxLDE0ICsyMjcsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNwb3J0X3R4X2RtYV9zdGFydChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCwgaW50IGR1bW15KQogewogCWlmIChkdW1teSkgewotCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBcCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNwb3J0LT5kdW1teV90eF9kZXNjOworCQlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAkJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCX0gZWxzZQogCQlzcG9ydC0+Y3Vycl90eF9kZXNjID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCi0Jc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3R4X2NoYW4sIFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+Y3Vycl90eF9kZXNjKSk7CisJc2V0X2RtYV9uZXh0X2Rlc2NfYWRkcihzcG9ydC0+ZG1hX3R4X2NoYW4sIHNwb3J0LT5jdXJyX3R4X2Rlc2MpOwogCXNldF9kbWFfeF9jb3VudChzcG9ydC0+ZG1hX3R4X2NoYW4sIDApOwogCXNldF9kbWFfeF9tb2RpZnkoc3BvcnQtPmRtYV90eF9jaGFuLCAwKTsKIAlzZXRfZG1hX2NvbmZpZyhzcG9ydC0+ZG1hX3R4X2NoYW4sCkBAIC0yNjEsMTEgKzI1NSw5IEBACiAJCUJVR19PTihzcG9ydC0+Y3Vycl9yeF9kZXNjICE9IHNwb3J0LT5kdW1teV9yeF9kZXNjKTsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3J4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3J4X2Rlc2MpCi0JCQk7Ci0JCXNwb3J0LT5kdW1teV9yeF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kbWFfcnhfZGVzYyk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3J4X2Rlc2MpCisJCQljb250aW51ZTsKKwkJc3BvcnQtPmR1bW15X3J4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmRtYV9yeF9kZXNjOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXNwb3J0LT5jdXJyX3J4X2Rlc2MgPSBzcG9ydC0+ZG1hX3J4X2Rlc2M7CiAJfSBlbHNlIHsKQEAgLTMxMCwyMyArMzAyLDIxIEBACiAJQlVHX09OKHNwb3J0LT5kdW1teV90eF9kZXNjID09IE5VTEwpOwogCUJVR19PTihzcG9ydC0+Y3Vycl90eF9kZXNjID09IHNwb3J0LT5kdW1teV90eF9kZXNjKTsKIAotCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9IFwKLQkJCSh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfdHhfZGVzYysxKTsKKwlzcG9ydC0+ZHVtbXlfdHhfZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYyArIDE7CiAKIAkvKiBTaG9ydGVuIHRoZSB0aW1lIG9uIGxhc3Qgbm9ybWFsIGRlc2NyaXB0b3IgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKilnZXRfZG1hX25leHRfZGVzY19wdHIoc3BvcnQtPmRtYV90eF9jaGFuKTsKKwlkZXNjID0gZ2V0X2RtYV9uZXh0X2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbik7CiAJLyogU3RvcmUgdGhlIGRlc2NyaXB0b3Igd2hpY2ggd2lsbCBiZSBkYW1hZ2VkICovCiAJdGVtcF9kZXNjID0gKmRlc2M7CiAJZGVzYy0+eF9jb3VudCA9IDB4YTsKIAlkZXNjLT55X2NvdW50ID0gMDsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShzcG9ydC0+ZHVtbXlfdHhfZGVzYyk7CisJZGVzYy0+bmV4dF9kZXNjX2FkZHIgPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYzsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJLyogV2FpdGluZyBmb3IgZHVtbXkgYnVmZmVyIGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBob29rZWQqLwogCXdoaWxlICgoZ2V0X2RtYV9jdXJyX2Rlc2NfcHRyKHNwb3J0LT5kbWFfdHhfY2hhbikgLSBcCi0JCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gXAotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3R4X2Rlc2MpCi0JCTsKKwkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPSBzcG9ydC0+ZHVtbXlfdHhfZGVzYykKKwkJY29udGludWU7CiAJc3BvcnQtPmN1cnJfdHhfZGVzYyA9IHNwb3J0LT5kdW1teV90eF9kZXNjOwogCS8qIFJlc3RvcmUgdGhlIGRhbWFnZWQgZGVzY3JpcHRvciAqLwogCSpkZXNjID0gdGVtcF9kZXNjOwpAQCAtMzQ3LDExICszMzcsOSBAQAogCQkvKiBIb29rIHRoZSBub3JtYWwgYnVmZmVyIGRlc2NyaXB0b3IgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl3aGlsZSAoKGdldF9kbWFfY3Vycl9kZXNjX3B0cihzcG9ydC0+ZG1hX3R4X2NoYW4pIC0KLQkJCXNpemVvZihzdHJ1Y3QgZG1hc2cpKSAhPQotCQkJKHVuc2lnbmVkIGxvbmcpc3BvcnQtPmR1bW15X3R4X2Rlc2MpCi0JCQk7Ci0JCXNwb3J0LT5kdW1teV90eF9kZXNjLT5uZXh0X2Rlc2NfYWRkciA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpKHNwb3J0LT5kbWFfdHhfZGVzYyk7CisJCQlzaXplb2Yoc3RydWN0IGRtYXNnKSkgIT0gc3BvcnQtPmR1bW15X3R4X2Rlc2MpCisJCQljb250aW51ZTsKKwkJc3BvcnQtPmR1bW15X3R4X2Rlc2MtPm5leHRfZGVzY19hZGRyID0gc3BvcnQtPmRtYV90eF9kZXNjOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXNwb3J0LT5jdXJyX3R4X2Rlc2MgPSBzcG9ydC0+ZG1hX3R4X2Rlc2M7CiAJfSBlbHNlIHsKQEAgLTUzNiwxOSArNTI0LDE3IEBACiAJdW5zaWduZWQgY29uZmlnOwogCiAJcHJfZGVidWcoIiVzIGVudGVyZWRcbiIsIF9fZnVuY19fKTsKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlkZXNjID0gKHN0cnVjdCBkbWFzZyAqKSBsMV9kYXRhX3NyYW1fYWxsb2MoMiAqIHNpemVvZigqZGVzYykpOwotI2Vsc2UKLQl7CisJaWYgKEwxX0RBVEFfQV9MRU5HVEgpCisJCWRlc2MgPSBsMV9kYXRhX3NyYW1femFsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKKwllbHNlIHsKIAkJZG1hX2FkZHJfdCBhZGRyOwogCQlkZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIDIgKiBzaXplb2YoKmRlc2MpLCAmYWRkciwgMCk7CisJCW1lbXNldChkZXNjLCAwLCAyICogc2l6ZW9mKCpkZXNjKSk7CiAJfQotI2VuZGlmCiAJaWYgKGRlc2MgPT0gTlVMTCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGR1bW15IHJ4IGRlc2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAlzcG9ydC0+ZHVtbXlfcnhfZGVzYyA9IGRlc2M7CiAJZGVzYy0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9idWY7CiAJY29uZmlnID0gRE1BRkxPV19MQVJHRSB8IE5EU0laRV85IHwgY29tcHV0ZV93ZHNpemUoc3BvcnQtPndkc2l6ZSkKQEAgLTU1OSw4ICs1NDUsOCBAQAogCWRlc2MtPnlfY291bnQgPSAwOwogCWRlc2MtPnlfbW9kaWZ5ID0gMDsKIAltZW1jcHkoZGVzYysxLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShkZXNjKzEpOwotCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gZGVzYyArIDE7CisJZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3MSwxOSArNTU3LDE3IEBACiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJlZFxuIiwgX19mdW5jX18pOwogCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JZGVzYyA9IChzdHJ1Y3QgZG1hc2cgKikgbDFfZGF0YV9zcmFtX2FsbG9jKDIgKiBzaXplb2YoKmRlc2MpKTsKLSNlbHNlCi0JeworCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlkZXNjID0gbDFfZGF0YV9zcmFtX3phbGxvYygyICogc2l6ZW9mKCpkZXNjKSk7CisJZWxzZSB7CiAJCWRtYV9hZGRyX3QgYWRkcjsKIAkJZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCAyICogc2l6ZW9mKCpkZXNjKSwgJmFkZHIsIDApOworCQltZW1zZXQoZGVzYywgMCwgMiAqIHNpemVvZigqZGVzYykpOwogCX0KLSNlbmRpZgogCWlmICghZGVzYykgewogCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGR1bW15IHR4IGRlc2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRlc2MsIDAsIDIgKiBzaXplb2YoKmRlc2MpKTsKIAlzcG9ydC0+ZHVtbXlfdHhfZGVzYyA9IGRlc2M7CiAJZGVzYy0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXNwb3J0LT5kdW1teV9idWYgKyBcCiAJCXNwb3J0LT5kdW1teV9jb3VudDsKQEAgLTU5NSw4ICs1NzksOCBAQAogCWRlc2MtPnlfY291bnQgPSAwOwogCWRlc2MtPnlfbW9kaWZ5ID0gMDsKIAltZW1jcHkoZGVzYysxLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKLQlkZXNjLT5uZXh0X2Rlc2NfYWRkciA9ICh1bnNpZ25lZCBsb25nKShkZXNjKzEpOwotCWRlc2NbMV0ubmV4dF9kZXNjX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjOworCWRlc2MtPm5leHRfZGVzY19hZGRyID0gZGVzYyArIDE7CisJZGVzY1sxXS5uZXh0X2Rlc2NfYWRkciA9IGRlc2M7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3MiwxNyArODU2LDE1IEBACiAJc3BvcnQtPndkc2l6ZSA9IHdkc2l6ZTsKIAlzcG9ydC0+ZHVtbXlfY291bnQgPSBkdW1teV9jb3VudDsKIAotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCXNwb3J0LT5kdW1teV9idWYgPSBsMV9kYXRhX3NyYW1fYWxsb2MoZHVtbXlfY291bnQgKiAyKTsKLSNlbHNlCi0Jc3BvcnQtPmR1bW15X2J1ZiA9IGttYWxsb2MoZHVtbXlfY291bnQgKiAyLCBHRlBfS0VSTkVMKTsKLSNlbmRpZgorCWlmIChMMV9EQVRBX0FfTEVOR1RIKQorCQlzcG9ydC0+ZHVtbXlfYnVmID0gbDFfZGF0YV9zcmFtX3phbGxvYyhkdW1teV9jb3VudCAqIDIpOworCWVsc2UKKwkJc3BvcnQtPmR1bW15X2J1ZiA9IGt6YWxsb2MoZHVtbXlfY291bnQgKiAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BvcnQtPmR1bW15X2J1ZiA9PSBOVUxMKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGR1bW15IGJ1ZmZlclxuIik7CiAJCWdvdG8gX19lcnJvcjsKIAl9CiAKLQltZW1zZXQoc3BvcnQtPmR1bW15X2J1ZiwgMCwgZHVtbXlfY291bnQgKiAyKTsKIAlyZXQgPSBzcG9ydF9jb25maWdfcnhfZHVtbXkoc3BvcnQpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJGYWlsZWQgdG8gY29uZmlnIHJ4IGR1bW15IHJpbmdcbiIpOwpAQCAtOTM5LDYgKzkyMSw3IEBACiAJCXNwb3J0ID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woc3BvcnRfZG9uZSk7CisKIC8qCiAqIEl0IGlzIG9ubHkgdXNlZCB0byBzZW5kIHNldmVyYWwgYnl0ZXMgd2hlbiBkbWEgaXMgbm90IGVuYWJsZWQKICAqIHNwb3J0IGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCBidXQgbm90IGVuYWJsZWQuCkBAIC0xMDI5LDQgKzEwMTIsMyBAQAogTU9EVUxFX0FVVEhPUigiUm95IEh1YW5nIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNQT1JUIGRyaXZlciBmb3IgQURJIEJsYWNrZmluIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCBkMGUwZDY5Li5iNmM3ZjdhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0xMCw5ICsxMCwxMSBAQAogCiBjb25maWcgU05EX1NPQ19BTExfQ09ERUNTCiAJdHJpc3RhdGUgIkJ1aWxkIGFsbCBBU29DIENPREVDIGRyaXZlcnMiCisJc2VsZWN0IFNORF9TT0NfTDMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDIGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BRDE5ODAgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FENzMzMTEgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfQUs0MTA0IGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19BSzQ1MzUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1BDTTMwMDgKQEAgLTI0LDYgKzI2LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCiAJc2VsZWN0IFNORF9TT0NfVURBMTM4MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTgzNTAgaWYgTUZEX1dNODM1MAorCXNlbGVjdCBTTkRfU09DX1dNODQwMCBpZiBNRkRfV004NDAwCiAJc2VsZWN0IFNORF9TT0NfV004NTEwIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg1ODAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004NzI4IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKQEAgLTM0LDYgKzM3LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTcxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTk3MDUgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX1dNOTcxMiBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEzIGlmIFNORF9TT0NfQUM5N19CVVMKICAgICAgICAgaGVscApAQCAtNTgsNiArNjIsOSBAQAogY29uZmlnIFNORF9TT0NfQUQ3MzMxMQogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0FLNDEwNAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0FLNDUzNQogCXRyaXN0YXRlCiAKQEAgLTY1LDEyICs3Miw2IEBACiBjb25maWcgU05EX1NPQ19DUzQyNzAKIAl0cmlzdGF0ZQogCi0jIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMgSGFyZHdhcmUgTXV0ZSBTdXBwb3J0Ci0jIFNlbGVjdCBpZiB5b3UgaGF2ZSBleHRlcm5hbCBtdXRpbmcgY2lyY3VpdHJ5IGF0dGFjaGVkIHRvIHlvdXIgQ1M0MjcwLgotY29uZmlnIFNORF9TT0NfQ1M0MjcwX0hXTVVURQotCWJvb2wKLQlkZXBlbmRzIG9uIFNORF9TT0NfQ1M0MjcwCi0KICMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYyBWRCA9IDMuM1YgRXJyYXRhCiAjIFNlbGVjdCBpZiB5b3UgYXJlIGFmZmVjdGVkIGJ5IHRoZSBlcnJhdGEgd2hlcmUgdGhlIHBhcnQgd2lsbCBub3QgZnVuY3Rpb24KICMgaWYgTUNMSyBkaXZpZGUtYnktMS41IGlzIHNlbGVjdGVkIGFuZCBWRCBpcyBzZXQgdG8gMy4zVi4gIFRoZSBkcml2ZXIgd2lsbApAQCAtOTAsNyArOTEsNiBAQAogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMyMwogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjYKIAl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIgaWYgU05EX1NPQ19PRl9TSU1QTEUKQEAgLTk4LDE1ICs5OCwxMiBAQAogCiBjb25maWcgU05EX1NPQ19UTFYzMjBBSUMzWAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFNORF9TT0NfVFdMNDAzMAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKIAogY29uZmlnIFNORF9TT0NfVURBMTM0WAogICAgICAgIHRyaXN0YXRlCi0gICAgICAgc2VsZWN0IFNORF9TT0NfTDMKIAogY29uZmlnIFNORF9TT0NfVURBMTM4MAogICAgICAgICB0cmlzdGF0ZQpAQCAtMTE0LDYgKzExMSw5IEBACiBjb25maWcgU05EX1NPQ19XTTgzNTAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg0MDAKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg1MTAKIAl0cmlzdGF0ZQogCkBAIC0xNDQsNiArMTQ0LDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk5MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNOTcwNQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNOTcxMgogCXRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IGM0ZGRjOWEuLjAzMGQyNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIHNuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubwogc25kLXNvYy1hZDE5ODAtb2JqcyA6PSBhZDE5ODAubwogc25kLXNvYy1hZDczMzExLW9ianMgOj0gYWQ3MzMxMS5vCitzbmQtc29jLWFrNDEwNC1vYmpzIDo9IGFrNDEwNC5vCiBzbmQtc29jLWFrNDUzNS1vYmpzIDo9IGFrNDUzNS5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwpAQCAtMTMsNiArMTQsNyBAQAogc25kLXNvYy11ZGExMzR4LW9ianMgOj0gdWRhMTM0eC5vCiBzbmQtc29jLXVkYTEzODAtb2JqcyA6PSB1ZGExMzgwLm8KIHNuZC1zb2Mtd204MzUwLW9ianMgOj0gd204MzUwLm8KK3NuZC1zb2Mtd204NDAwLW9ianMgOj0gd204NDAwLm8KIHNuZC1zb2Mtd204NTEwLW9ianMgOj0gd204NTEwLm8KIHNuZC1zb2Mtd204NTgwLW9ianMgOj0gd204NTgwLm8KIHNuZC1zb2Mtd204NzI4LW9ianMgOj0gd204NzI4Lm8KQEAgLTIzLDEyICsyNSwxNCBAQAogc25kLXNvYy13bTg5MDMtb2JqcyA6PSB3bTg5MDMubwogc25kLXNvYy13bTg5NzEtb2JqcyA6PSB3bTg5NzEubwogc25kLXNvYy13bTg5OTAtb2JqcyA6PSB3bTg5OTAubworc25kLXNvYy13bTk3MDUtb2JqcyA6PSB3bTk3MDUubwogc25kLXNvYy13bTk3MTItb2JqcyA6PSB3bTk3MTIubwogc25kLXNvYy13bTk3MTMtb2JqcyA6PSB3bTk3MTMubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDKQkrPSBzbmQtc29jLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUQxOTgwKQkrPSBzbmQtc29jLWFkMTk4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDczMzExKSArPSBzbmQtc29jLWFkNzMzMTEubworb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0MTA0KQkrPSBzbmQtc29jLWFrNDEwNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ1MzUpCSs9IHNuZC1zb2MtYWs0NTM1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MCkJKz0gc25kLXNvYy1jczQyNzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTDMpCSs9IHNuZC1zb2MtbDMubwpAQCAtNDEsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM0WCkJKz0gc25kLXNvYy11ZGExMzR4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1VEQTEzODApCSs9IHNuZC1zb2MtdWRhMTM4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTgzNTApCSs9IHNuZC1zb2Mtd204MzUwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODQwMCkJKz0gc25kLXNvYy13bTg0MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NTEwKQkrPSBzbmQtc29jLXdtODUxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg1ODApCSs9IHNuZC1zb2Mtd204NTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODcyOCkJKz0gc25kLXNvYy13bTg3MjgubwpAQCAtNTEsNSArNTYsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAzKQkrPSBzbmQtc29jLXdtODkwMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzEpCSs9IHNuZC1zb2Mtd204OTcxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5MCkJKz0gc25kLXNvYy13bTg5OTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkxKQkrPSBzbmQtc29jLXdtODk5MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MDUpCSs9IHNuZC1zb2Mtd205NzA1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcxMikJKz0gc25kLXNvYy13bTk3MTIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEzKQkrPSBzbmQtc29jLXdtOTcxMy5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCmluZGV4IGZiNTNlNjUuLmIwZDRhZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCkBAIC0zMCw3ICszMCw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpbnQgcmVnID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spID8KIAkJICBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSA6IEFDOTdfUENNX0xSX0FEQ19SQVRFOwpAQCAtNDEsNiArNDEsMTAgQEAKIAkJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8XAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWM5N19kYWlfb3BzID0geworCS5wcmVwYXJlCT0gYWM5N19wcmVwYXJlLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFjOTdfZGFpID0gewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCiAJLmFjOTdfY29udHJvbCA9IDEsCkBAIC01Niw4ICs2MCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBTVERfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5wcmVwYXJlID0gYWM5N19wcmVwYXJlLH0sCisJLm9wcyA9ICZhYzk3X2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYWM5N19kYWkpOwogCkBAIC04NCwxMCArODcsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkFDOTcgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBBQzk3X1ZFUlNJT04pOwogCi0Jc29jZGV2LT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzb2NkZXYtPmNvZGVjKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmICghc29jZGV2LT5jYXJkLT5jb2RlYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCiAJY29kZWMtPm5hbWUgPSAiQUM5NyI7CkBAIC0xMjMsMjMgKzEyNiwyMSBAQAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKIGVycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjLT5yZWdfY2FjaGUpOwotCWtmcmVlKHNvY2Rldi0+Y29kZWMpOwotCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCWtmcmVlKHNvY2Rldi0+Y2FyZC0+Y29kZWMpOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWM5N19zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoIWNvZGVjKQogCQlyZXR1cm4gMDsKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYy0+cmVnX2NhY2hlKTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ5LDcgKzE1MCw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXNuZF9hYzk3X3N1c3BlbmQoc29jZGV2LT5jb2RlYy0+YWM5Nyk7CisJc25kX2FjOTdfc3VzcGVuZChzb2NkZXYtPmNhcmQtPmNvZGVjLT5hYzk3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4LDcgKzE1OSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXNuZF9hYzk3X3Jlc3VtZShzb2NkZXYtPmNvZGVjLT5hYzk3KTsKKwlzbmRfYWM5N19yZXN1bWUoc29jZGV2LT5jYXJkLT5jb2RlYy0+YWM5Nyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCmluZGV4IDczZmRiYjQuLmRkYjNiMDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYwpAQCAtOTMsMjAgKzkzLDYgQEAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCBTd2l0Y2giLCBBQzk3X01JQywgNiwgMSwgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWQxOTgwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkMTk4MF9zbmRfYWM5N19jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwgc25kX3NvY19jbmV3KAotCQkJCSZhZDE5ODBfc25kX2FjOTdfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAl1bnNpZ25lZCBpbnQgcmVnKQogewpAQCAtMTIzLDcgKzEwOSw3IEBACiAJZGVmYXVsdDoKIAkJcmVnID0gcmVnID4+IDE7CiAKLQkJaWYgKHJlZyA+PSAoQVJSQVlfU0laRShhZDE5ODBfcmVnKSkpCisJCWlmIChyZWcgPj0gQVJSQVlfU0laRShhZDE5ODBfcmVnKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXJldHVybiBjYWNoZVtyZWddOwpAQCAtMTM3LDcgKzEyMyw3IEBACiAKIAlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKIAlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDwgKEFSUkFZX1NJWkUoYWQxOTgwX3JlZykpKQorCWlmIChyZWcgPCBBUlJBWV9TSVpFKGFkMTk4MF9yZWcpKQogCQljYWNoZVtyZWddID0gdmFsOwogCiAJcmV0dXJuIDA7CkBAIC0yMDAsMTAgKzE4NiwxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQUQxOTgwIFNvQyBBdWRpbyBDb2RlY1xuIik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc29jZGV2LT5jb2RlYyA9PSBOVUxMKQorCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5yZWdfY2FjaGUgPQpAQCAtMjY5LDcgKzI1NSw4IEBACiAJZXh0X3N0YXR1cyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCBleHRfc3RhdHVzJn4weDM4MDApOwogCi0JYWQxOTgwX2FkZF9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFkMTk4MF9zbmRfYWM5N19jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFkMTk4MF9zbmRfYWM5N19jb250cm9scykpOwogCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhZDE5ODA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKQEAgLTI4OCwxNSArMjc1LDE1IEBACiAJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CiAKIGNhY2hlX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkMTk4MF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlpZiAoY29kZWMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCmluZGV4IGIwOTI4OWEuLmU2MWRhYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCkBAIC01Myw3ICs1Myw3IEBACiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29kZWMtPmRhaSA9ICZhZDczMzExX2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIApAQCAtNzUsMTUgKzc1LDE1IEBACiByZWdpc3Rlcl9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIHBjbV9lcnI6Ci0Ja2ZyZWUoc29jZGV2LT5jb2RlYyk7Ci0Jc29jZGV2LT5jb2RlYyA9IE5VTEw7CisJa2ZyZWUoc29jZGV2LT5jYXJkLT5jb2RlYyk7CisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhZDczMzExX3NvY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKaW5kZXggNTA3Y2UwYy4uNTY5NTczZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKQEAgLTcwLDcgKzcwLDcgQEAKICNkZWZpbmUgUkVHRF9JR1MoeCkJCSh4ICYgMHg3KQogI2RlZmluZSBSRUdEX1JNT0QJCSgxIDw8IDMpCiAjZGVmaW5lIFJFR0RfT0dTKHgpCQkoKHggJiAweDcpIDw8IDQpCi0jZGVmaW5lIFJFR0RfTVVURQkJKHggPDwgNykKKyNkZWZpbmUgUkVHRF9NVVRFCQkoMSA8PCA3KQogCiAvKiBDb250cm9sIHJlZ2lzdGVyIEUgKi8KICNkZWZpbmUgQ1RSTF9SRUdfRQkoNCA8PCA4KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0N2JjNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBBSzQxMDQgQUxTQSBTb0MgKEFTb0MpIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisKKyNpbmNsdWRlICJhazQxMDQuaCIKKworLyogQUs0MTA0IHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQUs0MTA0X1JFR19DT05UUk9MMQkJMHgwMAorI2RlZmluZSBBSzQxMDRfUkVHX1JFU0VSVkVECQkweDAxCisjZGVmaW5lIEFLNDEwNF9SRUdfQ09OVFJPTDIJCTB4MDIKKyNkZWZpbmUgQUs0MTA0X1JFR19UWAkJCTB4MDMKKyNkZWZpbmUgQUs0MTA0X1JFR19DSE5fU1RBVFVTKHgpCSgoeCkgKyAweDA0KQorI2RlZmluZSBBSzQxMDRfTlVNX1JFR1MJCQkxMAorCisjZGVmaW5lIEFLNDEwNF9SRUdfTUFTSwkJCTB4MWYKKyNkZWZpbmUgQUs0MTA0X1JFQUQJCQkweGMwCisjZGVmaW5lIEFLNDEwNF9XUklURQkJCTB4ZTAKKyNkZWZpbmUgQUs0MTA0X1JFU0VSVkVEX1ZBTAkJMHg1YgorCisvKiBCaXQgbWFza3MgZm9yIEFLNDEwNCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX1JTVE4JCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9QVwkJKDEgPDwgMSkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wxX0RJRjAJCSgxIDw8IDIpCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMV9ESUYxCQkoMSA8PCAzKQorCisjZGVmaW5lIEFLNDEwNF9DT05UUk9MMl9TRUwwCQkoMSA8PCAwKQorI2RlZmluZSBBSzQxMDRfQ09OVFJPTDJfU0VMMQkJKDEgPDwgMSkKKyNkZWZpbmUgQUs0MTA0X0NPTlRST0wyX01PREUJCSgxIDw8IDIpCisKKyNkZWZpbmUgQUs0MTA0X1RYX1RYRQkJCSgxIDw8IDApCisjZGVmaW5lIEFLNDEwNF9UWF9WCQkJKDEgPDwgMSkKKworI2RlZmluZSBEUlZfTkFNRSAiYWs0MTA0IgorCitzdHJ1Y3QgYWs0MTA0X3ByaXZhdGUgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXU4IHJlZ19jYWNoZVtBSzQxMDRfTlVNX1JFR1NdOworfTsKKworc3RhdGljIGludCBhazQxMDRfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CisJdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplOyBpKyspIHsKKwkJaW50IHJldCA9IHNwaV93OHI4KHNwaSwgaSB8IEFLNDEwNF9SRUFEKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGZhaWx1cmVcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJlZ19jYWNoZVtpXSA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhazQxMDRfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmVnX2NhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgYWs0MTA0X3NwaV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgJj0gQUs0MTA0X1JFR19NQVNLOworCXJlZyB8PSBBSzQxMDRfV1JJVEU7CisKKwkvKiBvbmx5IHdyaXRlIHRvIHRoZSBoYXJkd2FyZSBpZiB2YWx1ZSBoYXMgY2hhbmdlZCAqLworCWlmIChjYWNoZVtyZWddICE9IHZhbHVlKSB7CisJCXU4IHRtcFsyXSA9IHsgcmVnLCB2YWx1ZSB9OworCQlpZiAoc3BpX3dyaXRlKHNwaSwgdG1wLCBzaXplb2YodG1wKSkpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IHZhbCA9IDA7CisKKwl2YWwgPSBhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfQ09OVFJPTDEpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsICY9IH4oQUs0MTA0X0NPTlRST0wxX0RJRjAgfCBBSzQxMDRfQ09OVFJPTDFfRElGMSk7CisKKwkvKiBzZXQgREFJIGZvcm1hdCAqLworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX0RJRjA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX0RJRjAgfCBBSzQxMDRfQ09OVFJPTDFfRElGMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaW52YWxpZCBkYWkgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhpcyBkZXZpY2UgY2FuIG9ubHkgYmUgc2xhdmUgKi8KKwlpZiAoKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxLCB2YWwpOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgdmFsID0gMDsKKworCS8qIHNldCB0aGUgSUVDOTU4IGJpdHM6IGNvbnN1bWVyIG1vZGUsIG5vIGNvcHlyaWdodCBiaXQgKi8KKwl2YWwgfD0gSUVDOTU4X0FFUzBfQ09OX05PVF9DT1BZUklHSFQ7CisJYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DSE5fU1RBVFVTKDApLCB2YWwpOworCisJdmFsID0gMDsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgNDQxMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfNDQxMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfNDgwMDA7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJCXZhbCB8PSBJRUM5NThfQUVTM19DT05fRlNfMzIwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVuc3VwcG9ydGVkIHNhbXBsaW5nIHJhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DSE5fU1RBVFVTKDMpLCB2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhazQxMDFfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gYWs0MTA0X2h3X3BhcmFtcywKKwkuc2V0X2ZtdCA9IGFrNDEwNF9zZXRfZGFpX2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBhazQxMDRfZGFpID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkgU05EUlZfUENNX1JBVEVfMzIwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgIHwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQorCX0sCisJLm9wcyA9ICZhazQxMDFfZGFpX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqYWs0MTA0X2NvZGVjOworCitzdGF0aWMgaW50IGFrNDEwNF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IGFrNDEwNF9wcml2YXRlICphazQxMDQ7CisJaW50IHJldCwgdmFsOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKwlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWs0MTA0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFrNDEwNF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhazQxMDQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgY29kZWNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYyA9ICZhazQxMDQtPmNvZGVjOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OworCWNvZGVjLT5uYW1lID0gRFJWX05BTUU7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZhazQxMDRfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWs0MTA0OworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisJY29kZWMtPnJlZ19jYWNoZSA9IGFrNDEwNC0+cmVnX2NhY2hlOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFLNDEwNF9OVU1fUkVHUzsKKworCS8qIHJlYWQgYWxsIHJlZ3MgYW5kIGZpbGwgdGhlIGNhY2hlICovCisJcmV0ID0gYWs0MTA0X2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHJlYWQgdGhlICdyZXNlcnZlZCcgcmVnaXN0ZXIgLSBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldCwgaXQKKwkgKiBzaG91bGQgY29udGFpbiAweDViLiBOb3QgYSBnb29kIHdheSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mCisJICogdGhlIGRldmljZSwgYnV0IHRoZXJlIGlzIG5vIGhhcmR3YXJlIElEIHJlZ2lzdGVyLiAqLworCWlmIChhazQxMDRfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFLNDEwNF9SRUdfUkVTRVJWRUQpICE9CisJCQkJCSBBSzQxMDRfUkVTRVJWRURfVkFMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwkvKiBzZXQgcG93ZXItdXAgYW5kIG5vbi1yZXNldCBiaXRzICovCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX0NPTlRST0wxKTsKKwl2YWwgfD0gQUs0MTA0X0NPTlRST0wxX1BXIHwgQUs0MTA0X0NPTlRST0wxX1JTVE47CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZShjb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCisJLyogZW5hYmxlIHRyYW5zbWl0dGVyICovCisJdmFsID0gYWs0MTA0X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSzQxMDRfUkVHX1RYKTsKKwl2YWwgfD0gQUs0MTA0X1RYX1RYRTsKKwlyZXQgPSBhazQxMDRfc3BpX3dyaXRlKGNvZGVjLCBBSzQxMDRfUkVHX1RYLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisKKwlhazQxMDRfY29kZWMgPSBjb2RlYzsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmYWs0MTA0X2RhaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgREFJXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGFrNDEwNCk7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiU1BJIGRldmljZSBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX2ZyZWVfY29kZWM6CisJa2ZyZWUoYWs0MTA0KTsKKwlhazQxMDRfZGFpLmRldiA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWs0MTA0X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0LCB2YWw7CisJc3RydWN0IGFrNDEwNF9wcml2YXRlICphazQxMDQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCXZhbCA9IGFrNDEwNF9yZWFkX3JlZ19jYWNoZSgmYWs0MTA0LT5jb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwkvKiBjbGVhciBwb3dlci11cCBhbmQgbm9uLXJlc2V0IGJpdHMgKi8KKwl2YWwgJj0gfihBSzQxMDRfQ09OVFJPTDFfUFcgfCBBSzQxMDRfQ09OVFJPTDFfUlNUTik7CisJcmV0ID0gYWs0MTA0X3NwaV93cml0ZSgmYWs0MTA0LT5jb2RlYywgQUs0MTA0X1JFR19DT05UUk9MMSwgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWFrNDEwNF9jb2RlYyA9IE5VTEw7CisJa2ZyZWUoYWs0MTA0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMDRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGFrNDEwNF9jb2RlYzsKKwlpbnQgcmV0OworCisJLyogQ29ubmVjdCB0aGUgY29kZWMgdG8gdGhlIHNvY2Rldi4gIHNuZF9zb2NfbmV3X3BjbXMoKSBuZWVkcyB0aGlzLiAqLworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKKworCS8qIFJlZ2lzdGVyIFBDTXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHNvY2RldiAqLworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDEwNF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJcmV0dXJuIDA7Cit9OworCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9hazQxMDQgPSB7CisJLnByb2JlID0gCWFrNDEwNF9wcm9iZSwKKwkucmVtb3ZlID0gCWFrNDEwNF9yZW1vdmUKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2aWNlX2FrNDEwNCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhazQxMDRfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgICA9IERSVl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgID0gYWs0MTA0X3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWs0MTA0X3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWs0MTA0X2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCJBc2FoaSBLYXNlaSBBSzQxMDQgQUxTQSBTb0MgQ29kZWMgRHJpdmVyXG4iKTsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWs0MTA0X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWs0MTA0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWs0MTA0X2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFrNDEwNF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFrNDEwNF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXNhaGkgS2FzZWkgQUs0MTA0IEFMU0EgU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5oIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg4ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX0FLNDEwNF9ICisjZGVmaW5lIF9BSzQxMDRfSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGFrNDEwNF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZpY2VfYWs0MTA0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCmluZGV4IDgxMzAwZDhkLi4xZjYzZDM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKQEAgLTE1NSwyMSArMTU1LDYgQEAKIAlTT0NfU0lOR0xFKCJNaWMgU2lkZXRvbmUgVm9sdW1lIiwgQUs0NTM1X1ZPTCwgNCwgNywgMCksCiB9OwogCi0vKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KLXN0YXRpYyBpbnQgYWs0NTM1X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFrNDUzNV9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQlzbmRfc29jX2NuZXcoJmFrNDUzNV9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogTW9ubyAxIE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0NTM1X21vbm8xX21peGVyX2NvbnRyb2xzW10gPSB7CiAJU09DX0RBUE1fU0lOR0xFKCJNaWMgU2lkZXRvbmUgU3dpdGNoIiwgQUs0NTM1X1NJRzEsIDQsIDEsIDApLApAQCAtMzQ0LDcgKzMyOSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhazQ1MzVfcHJpdiAqYWs0NTM1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBtb2RlMiA9IGFrNDUzNV9yZWFkX3JlZ19jYWNoZShjb2RlYywgQUs0NTM1X01PREUyKSAmIH4oMHgzIDw8IDUpOwogCWludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKSwgZnMgPSAyNTY7CkBAIC00MzYsNiArNDIxLDEzIEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfFwKIAkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWs0NTM1X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGFrNDUzNV9od19wYXJhbXMsCisJLnNldF9mbXQJPSBhazQ1MzVfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZQk9IGFrNDUzNV9tdXRlLAorCS5zZXRfc3lzY2xrCT0gYWs0NTM1X3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIGFrNDUzNV9kYWkgPSB7CiAJLm5hbWUgPSAiQUs0NTM1IiwKIAkucGxheWJhY2sgPSB7CkBAIC00NTAsMTkgKzQ0MiwxNCBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQUs0NTM1X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IGFrNDUzNV9od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gYWs0NTM1X3NldF9kYWlfZm10LAotCQkuZGlnaXRhbF9tdXRlID0gYWs0NTM1X211dGUsCi0JCS5zZXRfc3lzY2xrID0gYWs0NTM1X3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZhazQ1MzVfZGFpX29wcywKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhazQ1MzVfZGFpKTsKIAogc3RhdGljIGludCBhazQ1MzVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwpAQCAtNDcxLDcgKzQ1OCw3IEBACiBzdGF0aWMgaW50IGFrNDUzNV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlhazQ1MzVfc3luYyhjb2RlYyk7CiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJYWs0NTM1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKQEAgLTQ4NCw3ICs0NzEsNyBAQAogICovCiBzdGF0aWMgaW50IGFrNDUzNV9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIkFLNDUzNSI7CkBAIC01MTAsNyArNDk3LDggQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCWFrNDUzNV9hZGRfY29udHJvbHMoY29kZWMpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhazQ1MzVfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWs0NTM1X3NuZF9jb250cm9scykpOwogCWFrNDUzNV9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNTM3LDcgKzUyNSw3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gYWs0NTM1X3NvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKQEAgLTYzNiw3ICs2MjQsNyBAQAogCX0KIAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBhazQ1MzU7Ci0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwpAQCAtNjYzLDcgKzY1MSw3IEBACiBzdGF0aWMgaW50IGFrNDUzNV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQogCQlhazQ1MzVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKaW5kZXggZjFhYTBjMy4uN2ZhMDlhMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCkBAIC0zLDI3ICszLDIyIEBACiAgKgogICogQXV0aG9yOiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcworICogcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyCisgKiBleHByZXNzIG9yIGltcGxpZWQuCiAgKgogICogVGhpcyBpcyBhbiBBU29DIGRldmljZSBkcml2ZXIgZm9yIHRoZSBDaXJydXMgTG9naWMgQ1M0MjcwIGNvZGVjLgogICoKICAqIEN1cnJlbnQgZmVhdHVyZXMvbGltaXRhdGlvbnM6CiAgKgotICogMSkgU29mdHdhcmUgbW9kZSBpcyBzdXBwb3J0ZWQuICBTdGFuZC1hbG9uZSBtb2RlIGlzIGF1dG9tYXRpY2FsbHkKLSAqICAgIHNlbGVjdGVkIGlmIEkyQyBpcyBkaXNhYmxlZCBvciBpZiBhIENTNDI3MCBpcyBub3QgZm91bmQgb24gdGhlIEkyQwotICogICAgYnVzLiAgSG93ZXZlciwgc3RhbmQtYWxvbmUgbW9kZSBpcyBvbmx5IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBiZWNhdXNlCi0gKiAgICB0aGVyZSBpcyBubyBtZWNoYW5pc20geWV0IGZvciB0aGlzIGRyaXZlciBhbmQgdGhlIG1hY2hpbmUgZHJpdmVyIHRvCi0gKiAgICBjb21tdW5pY2F0ZSB0aGUgdmFsdWVzIG9mIHRoZSBNMCwgTTEsIE1DTEsxLCBhbmQgTUNMSzIgcGlucy4KLSAqIDIpIE9ubHkgSTJDIGlzIHN1cHBvcnRlZCwgbm90IFNQSQotICogMykgT25seSBNYXN0ZXIgbW9kZSBpcyBzdXBwb3J0ZWQsIG5vdCBTbGF2ZS4KLSAqIDQpIFRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiBtdXN0IGNhbGwKLSAqICAgIGNzNDI3MF9zZXRfZGFpX3N5c2NsaygpIHdpdGggdGhlIHZhbHVlIG9mIE1DTEsuCi0gKiA1KSBPbmx5IEkyUyBhbmQgbGVmdC1qdXN0aWZpZWQgbW9kZXMgYXJlIHN1cHBvcnRlZAotICogNikgUG93ZXIgbWFuYWdlbWVudCBpcyBub3Qgc3VwcG9ydGVkCi0gKiA3KSBUaGUgb25seSBzdXBwb3J0ZWQgY29udHJvbCBpcyB2b2x1bWUgYW5kIGhhcmR3YXJlIG11dGUgKGlmIGVuYWJsZWQpCisgKiAtIFNvZnR3YXJlIG1vZGUgaXMgc3VwcG9ydGVkLiAgU3RhbmQtYWxvbmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLgorICogLSBPbmx5IEkyQyBpcyBzdXBwb3J0ZWQsIG5vdCBTUEkKKyAqIC0gU3VwcG9ydCBmb3IgbWFzdGVyIGFuZCBzbGF2ZSBtb2RlCisgKiAtIFRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiBtdXN0IGNhbGwKKyAqICAgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgd2l0aCB0aGUgdmFsdWUgb2YgTUNMSy4KKyAqIC0gT25seSBJMlMgYW5kIGxlZnQtanVzdGlmaWVkIG1vZGVzIGFyZSBzdXBwb3J0ZWQKKyAqIC0gUG93ZXIgbWFuYWdlbWVudCBpcyBub3Qgc3VwcG9ydGVkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzUsMTggKzMwLDYgQEAKIAogI2luY2x1ZGUgImNzNDI3MC5oIgogCi0vKiBJZiBJMkMgaXMgZGVmaW5lZCwgdGhlbiB3ZSBzdXBwb3J0IHNvZnR3YXJlIG1vZGUuICBIb3dldmVyLCBpZiB3ZSdyZQotICAgbm90IGNvbXBpbGVkIGFzIG1vZHVsZSBidXQgSTJDIGlzLCB0aGVuIHdlIGNhbid0IHVzZSBJMkMgY2FsbHMuICovCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotI2RlZmluZSBVU0VfSTJDCi0jZW5kaWYKLQotLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgQ1M0MjcwICovCi1zdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgewotCXVuc2lnbmVkIGludCBtY2xrOyAvKiBJbnB1dCBmcmVxdWVuY3kgb2YgdGhlIE1DTEsgcGluICovCi0JdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCi19OwotCiAvKgogICogVGhlIGNvZGVjIGlzbid0IHJlYWxseSBiaWctZW5kaWFuIG9yIGxpdHRsZS1lbmRpYW4sIHNpbmNlIHRoZSBJMlMKICAqIGludGVyZmFjZSByZXF1aXJlcyBkYXRhIHRvIGJlIHNlbnQgc2VyaWFsbHkgd2l0aCB0aGUgTVNiaXQgZmlyc3QuCkBAIC02MCw4ICs0Myw2IEBACiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF8zQkUgfCBcCiAJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSAgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9CRSkKIAotI2lmZGVmIFVTRV9JMkMKLQogLyogQ1M0MjcwIHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8KICNkZWZpbmUgQ1M0MjcwX0NISVBJRAkweDAxCS8qIENoaXAgSUQgKi8KICNkZWZpbmUgQ1M0MjcwX1BXUkNUTAkweDAyCS8qIFBvd2VyIENvbnRyb2wgKi8KQEAgLTEyMSw4ICsxMDIsMjIgQEAKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0EJMHgwMQogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQgkweDAyCiAKLS8qCi0gKiBDbG9jayBSYXRpbyBTZWxlY3Rpb24gZm9yIE1hc3RlciBNb2RlIHdpdGggSTJDIGVuYWJsZWQKKy8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIENTNDI3MCAqLworc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1OCByZWdfY2FjaGVbQ1M0MjcwX05VTVJFR1NdOworCXVuc2lnbmVkIGludCBtY2xrOyAvKiBJbnB1dCBmcmVxdWVuY3kgb2YgdGhlIE1DTEsgcGluICovCisJdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCisJdW5zaWduZWQgaW50IHNsYXZlX21vZGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBjczQyNzBfbW9kZV9yYXRpb3MgLSBjbG9jayByYXRpbyB0YWJsZXMKKyAqIEByYXRpbzogdGhlIHJhdGlvIG9mIE1DTEsgdG8gdGhlIHNhbXBsZSByYXRlCisgKiBAc3BlZWRfbW9kZTogdGhlIFNwZWVkIE1vZGUgYml0cyB0byBzZXQgaW4gdGhlIE1vZGUgQ29udHJvbCByZWdpc3RlciBmb3IKKyAqICAgICAgICAgICAgICB0aGlzIHJhdGlvCisgKiBAbWNsazogdGhlIFJhdGlvIFNlbGVjdCBiaXRzIHRvIHNldCBpbiB0aGUgTW9kZSBDb250cm9sIHJlZ2lzdGVyIGZvciB0aGlzCisgKiAgICAgICAgcmF0aW8KICAqCiAgKiBUaGUgZGF0YSBmb3IgdGhpcyBjaGFydCBpcyB0YWtlbiBmcm9tIFRhYmxlIDUgb2YgdGhlIENTNDI3MCByZWZlcmVuY2UKICAqIG1hbnVhbC4KQEAgLTEzMSwzMSArMTI2LDMwIEBACiAgKiBJdCBpcyBhbHNvIHVzZWQgYnkgY3M0MjcwX3NldF9kYWlfc3lzY2xrKCkgdG8gdGVsbCBBTFNBIHdoaWNoIHNhbXBsaW5nCiAgKiByYXRlcyB0aGUgQ1M0MjcwIGN1cnJlbnRseSBzdXBwb3J0cy4KICAqCi0gKiBFYWNoIGVsZW1lbnQgaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byB0aGUgcmF0aW9zIGluIG1jbGtfcmF0aW9zW10uCi0gKiBUaGVzZSB0d28gYXJyYXlzIG5lZWQgdG8gYmUgaW4gc3luYy4KLSAqCi0gKiAnc3BlZWRfbW9kZScgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd3JpdHRlbiB0byB0aGUKKyAqIEBzcGVlZF9tb2RlIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBwYXR0ZXJuIHRvIGJlIHdyaXR0ZW4gdG8gdGhlCiAgKiBNT0RFIGJpdHMgb2YgdGhlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgogICoKLSAqICdtY2xrJyBpcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgcGF0dGVybiB0byBiZSB3aXJ0ZW4gdG8gdGhlIE1DTEsgYml0cyBvZgorICogQG1jbGsgaXMgdGhlIGNvcnJlc3BvbmRpbmcgYml0IHBhdHRlcm4gdG8gYmUgd2lydGVuIHRvIHRoZSBNQ0xLIGJpdHMgb2YKICAqIHRoZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIuCiAgKgogICogSW4gc2l0dWF0aW9ucyB3aGVyZSBhIHNpbmdsZSByYXRpbyBpcyByZXByZXNlbnRlZCBieSBtdWx0aXBsZSBzcGVlZAogICogbW9kZXMsIHdlIGZhdm9yIHRoZSBzbG93ZXN0IHNwZWVkLiAgRS5nLCBmb3IgYSByYXRpbyBvZiAxMjgsIHdlIHBpY2sKICAqIGRvdWJsZS1zcGVlZCBpbnN0ZWFkIG9mIHF1YWQtc3BlZWQuICBIb3dldmVyLCB0aGUgQ1M0MjcwIGVycmF0YSBzdGF0ZXMKLSAqIHRoYXQgRGl2aWRlLUJ5LTEuNSBjYW4gY2F1c2UgZmFpbHVyZXMsIHNvIHdlIGF2b2lkIHRoYXQgbW9kZSB3aGVyZQorICogdGhhdCBkaXZpZGUtQnktMS41IGNhbiBjYXVzZSBmYWlsdXJlcywgc28gd2UgYXZvaWQgdGhhdCBtb2RlIHdoZXJlCiAgKiBwb3NzaWJsZS4KICAqCi0gKiBFUlJBVEE6IFRoZXJlIGlzIGFuIGVycmF0YSBmb3IgdGhlIENTNDI3MCB3aGVyZSBkaXZpZGUtYnktMS41IGRvZXMgbm90Ci0gKiB3b3JrIGlmIFZEID0gMy4zVi4gIElmIHRoaXMgZWZmZWN0cyB5b3UsIHNlbGVjdCB0aGUKKyAqIEVycmF0YTogVGhlcmUgaXMgYW4gZXJyYXRhIGZvciB0aGUgQ1M0MjcwIHdoZXJlIGRpdmlkZS1ieS0xLjUgZG9lcyBub3QKKyAqIHdvcmsgaWYgVmQgaXMgMy4zVi4gIElmIHRoaXMgZWZmZWN0cyB5b3UsIHNlbGVjdCB0aGUKICAqIENPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQSBLY29uZmlnIG9wdGlvbiwgYW5kIHRoZSBkcml2ZXIgd2lsbAogICogbmV2ZXIgc2VsZWN0IGFueSBzYW1wbGUgcmF0ZXMgdGhhdCByZXF1aXJlIGRpdmlkZS1ieS0xLjUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyB7CiAJdW5zaWduZWQgaW50IHJhdGlvOwogCXU4IHNwZWVkX21vZGU7CiAJdTggbWNsazsKLX0gY3M0MjcwX21vZGVfcmF0aW9zW10gPSB7Cit9OworCitzdGF0aWMgc3RydWN0IGNzNDI3MF9tb2RlX3JhdGlvcyBjczQyNzBfbW9kZV9yYXRpb3NbXSA9IHsKIAl7NjQsIENTNDI3MF9NT0RFXzRYLCBDUzQyNzBfTU9ERV9ESVYxfSwKICNpZm5kZWYgQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBCiAJezk2LCBDUzQyNzBfTU9ERV80WCwgQ1M0MjcwX01PREVfRElWMTV9LApAQCAtMTcyLDM0ICsxNjYsMjcgQEAKIC8qIFRoZSBudW1iZXIgb2YgTUNMSy9MUkNLIHJhdGlvcyBzdXBwb3J0ZWQgYnkgdGhlIENTNDI3MCAqLwogI2RlZmluZSBOVU1fTUNMS19SQVRJT1MJCUFSUkFZX1NJWkUoY3M0MjcwX21vZGVfcmF0aW9zKQogCi0vKgotICogRGV0ZXJtaW5lIHRoZSBDUzQyNzAgc2FtcGxlcyByYXRlcy4KKy8qKgorICogY3M0MjcwX3NldF9kYWlfc3lzY2xrIC0gZGV0ZXJtaW5lIHRoZSBDUzQyNzAgc2FtcGxlcyByYXRlcy4KKyAqIEBjb2RlY19kYWk6IHRoZSBjb2RlYyBEQUkKKyAqIEBjbGtfaWQ6IHRoZSBjbG9jayBJRCAoaWdub3JlZCkKKyAqIEBmcmVxOiB0aGUgTUNMSyBpbnB1dCBmcmVxdWVuY3kKKyAqIEBkaXI6IHRoZSBjbG9jayBkaXJlY3Rpb24gKGlnbm9yZWQpCiAgKgotICogJ2ZyZXEnIGlzIHRoZSBpbnB1dCBmcmVxdWVuY3kgdG8gTUNMSy4gIFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlbGwgdGhlIGNvZGVjIGRyaXZlciB3aGF0IHRoZSBpbnB1dCBNQ0xLCisgKiBmcmVxdWVuY3kgaXMuCiAgKgogICogVGhlIHZhbHVlIG9mIE1DTEsgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIHJhdGVzIGFyZSBzdXBwb3J0ZWQKICAqIGJ5IHRoZSBDUzQyNzAuICBUaGUgcmF0aW8gb2YgTUNMSyAvIEZzIG11c3QgYmUgZXF1YWwgdG8gb25lIG9mIG5pbmUKLSAqIHN1cHBvcnQgdmFsdWVzOiA2NCwgOTYsIDEyOCwgMTkyLCAyNTYsIDM4NCwgNTEyLCA3NjgsIGFuZCAxMDI0LgorICogc3VwcG9ydGVkIHZhbHVlcyAtIDY0LCA5NiwgMTI4LCAxOTIsIDI1NiwgMzg0LCA1MTIsIDc2OCwgYW5kIDEwMjQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBuaW5lIHJhdGlvcyBhbmQgZGV0ZXJtaW5lcyB3aGljaCBvbmVzIG1hdGNoCiAgKiBhIHN0YW5kYXJkIHNhbXBsZSByYXRlLiAgSWYgdGhlcmUncyBhIG1hdGNoLCB0aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBsaXN0Ci0gKiBvZiBzdXBwb3J0IHNhbXBsZSByYXRlcy4KKyAqIG9mIHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMuCiAgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24sCiAgKiBvdGhlcndpc2UgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaW4KICAqIHRpbWUgZm9yIEFMU0EuCi0gKgotICogTm90ZSB0aGF0IGluIHN0YW5kLWFsb25lIG1vZGUsIHRoZSBzYW1wbGUgcmF0ZSBpcyBkZXRlcm1pbmVkIGJ5IGlucHV0Ci0gKiBwaW5zIE0wLCBNMSwgTURJVjEsIGFuZCBNRElWMi4gIEFsc28gaW4gc3RhbmQtYWxvbmUgbW9kZSwgZGl2aWRlLWJ5LTMKLSAqIGlzIG5vdCBhIHByb2dyYW1tYWJsZSBvcHRpb24uICBIb3dldmVyLCBkaXZpZGUtYnktMyBpcyBub3QgYW4gYXZhaWxhYmxlCi0gKiBvcHRpb24gaW4gc3RhbmQtYWxvbmUgbW9kZS4gIFRoaXMgY2FzZXMgdHdvIHByb2JsZW1zOiBhIHJhdGlvIG9mIDc2OCBpcwotICogbm90IGF2YWlsYWJsZSAoaXQgcmVxdWlyZXMgZGl2aWRlLWJ5LTMpIGFuZCBCKSByYXRpb3MgMTkyIGFuZCAzODQgY2FuCi0gKiBvbmx5IGJlIHNlbGVjdGVkIHdpdGggZGl2aWRlLWJ5LTEuNSwgYnV0IHRoZXJlIGlzIGFuIGVycmF0ZSB0aGF0IG1ha2UKLSAqIHRoaXMgc2VsZWN0aW9uIGRpZmZpY3VsdC4KLSAqCi0gKiBJbiBhZGRpdGlvbiwgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG1hY2hpbmUKLSAqIGRyaXZlciB3aGF0IHRoZSBpbnB1dCBzZXR0aW5ncyBjYW4gYmUuICBUaGlzIHdvdWxkIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQKLSAqIGZvciBzdGFuZC1hbG9uZSBtb2RlIHRvIHdvcmsuCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKQEAgLTIyNSw3ICsyMTIsNyBAQAogCXJhdGVzICY9IH5TTkRSVl9QQ01fUkFURV9LTk9UOwogCiAJaWYgKCFyYXRlcykgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc2FtcGxlIHJhdGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MCw4ICsyMjcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENvbmZpZ3VyZSB0aGUgY29kZWMgZm9yIHRoZSBzZWxlY3RlZCBhdWRpbyBmb3JtYXQKKy8qKgorICogY3M0MjcwX3NldF9kYWlfZm10IC0gY29uZmlndXJlIHRoZSBjb2RlYyBmb3IgdGhlIHNlbGVjdGVkIGF1ZGlvIGZvcm1hdAorICogQGNvZGVjX2RhaTogdGhlIGNvZGVjIERBSQorICogQGZvcm1hdDogYSBTTkRfU09DX0RBSUZNVF94IHZhbHVlIGluZGljYXRpbmcgdGhlIGRhdGEgZm9ybWF0CiAgKgogICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGJpdG1hc2sgb2YgU05EX1NPQ19EQUlGTVRfeCBiaXRzIGFuZCBwcm9ncmFtcyB0aGUKICAqIGNvZGVjIGFjY29yZGluZ2x5LgpAQCAtMjU4LDMyICsyNDcsNDMgQEAKIAlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKKwkvKiBzZXQgREFJIGZvcm1hdCAqLwogCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKIAljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKIAkJY3M0MjcwLT5tb2RlID0gZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0s7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBpbnZhbGlkIERBSSBmb3JtYXRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpbnZhbGlkIGRhaSBmb3JtYXRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY3M0MjcwLT5zbGF2ZV9tb2RlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQljczQyNzAtPnNsYXZlX21vZGUgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBhbGwgb3RoZXIgbW9kZXMgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqLwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBBIGxpc3Qgb2YgYWRkcmVzc2VzIG9uIHdoaWNoIHRoaXMgQ1M0MjcwIGNvdWxkIHVzZS4gIEkyQyBhZGRyZXNzZXMgYXJlCi0gKiA3IGJpdHMuICBGb3IgdGhlIENTNDI3MCwgdGhlIHVwcGVyIGZvdXIgYml0cyBhcmUgYWx3YXlzIDEwMDEsIGFuZCB0aGUKLSAqIGxvd2VyIHRocmVlIGJpdHMgYXJlIGRldGVybWluZWQgdmlhIHRoZSBBRDIsIEFEMSwgYW5kIEFEMCBwaW5zCi0gKiAocmVzcGVjdGl2ZWx5KS4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweDQ4LCAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCBJMkNfQ0xJRU5UX0VORAotfTsKLUkyQ19DTElFTlRfSU5TTU9EOwotCi0vKgotICogUHJlLWZpbGwgdGhlIENTNDI3MCByZWdpc3RlciBjYWNoZS4KKy8qKgorICogY3M0MjcwX2ZpbGxfY2FjaGUgLSBwcmUtZmlsbCB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKgorICogVGhpcyBmdW5jdGlvbiBmaWxscyBpbiB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlIGJ5IHJlYWRpbmcgdGhlIHJlZ2lzdGVyCisgKiB2YWx1ZXMgZnJvbSB0aGUgaGFyZHdhcmUuCisgKgorICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KKyAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKKyAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbS4KICAqCiAgKiBXZSB1c2UgdGhlIGF1dG8taW5jcmVtZW50IGZlYXR1cmUgb2YgdGhlIENTNDI3MCB0byByZWFkIGFsbCByZWdpc3RlcnMgaW4KICAqIG9uZSBzaG90LgpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCUNTNDI3MF9GSVJTVFJFRyB8IDB4ODAsIENTNDI3MF9OVU1SRUdTLCBjYWNoZSk7CiAKIAlpZiAobGVuZ3RoICE9IENTNDI3MF9OVU1SRUdTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgcmVhZCBmYWlsdXJlLCBhZGRyPTB4JXhcbiIsCisJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyByZWFkIGZhaWx1cmUsIGFkZHI9MHgleFxuIiwKIAkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zMDYsMTIgKzMwNiwxNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUmVhZCBmcm9tIHRoZSBDUzQyNzAgcmVnaXN0ZXIgY2FjaGUuCisvKioKKyAqIGNzNDI3MF9yZWFkX3JlZ19jYWNoZSAtIHJlYWQgZnJvbSB0aGUgQ1M0MjcwIHJlZ2lzdGVyIGNhY2hlLgorICogQGNvZGVjOiB0aGUgY29kZWMgZm9yIHRoaXMgQ1M0MjcwCisgKiBAcmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVnaXN0ZXIuICBJdCByZWFkcyBvbmx5IGZyb20KKyAqIHRoZSByZWdpc3RlciBjYWNoZSwgbm90IHRoZSBoYXJkd2FyZSBpdHNlbGYuCiAgKgogICogVGhpcyBDUzQyNzAgcmVnaXN0ZXJzIGFyZSBjYWNoZWQgdG8gYXZvaWQgZXhjZXNzaXZlIEkyQyBJL08gb3BlcmF0aW9ucy4KICAqIEFmdGVyIHRoZSBpbml0aWFsIHJlYWQgdG8gcHJlLWZpbGwgdGhlIGNhY2hlLCB0aGUgQ1M0MjcwIG5ldmVyIHVwZGF0ZXMKLSAqIHRoZSByZWdpc3RlciB2YWx1ZXMsIHNvIHdlIHdvbid0IGhhdmUgYSBjYWNoZSBjb2hlcm5jeSBwcm9ibGVtLgorICogdGhlIHJlZ2lzdGVyIHZhbHVlcywgc28gd2Ugd29uJ3QgaGF2ZSBhIGNhY2hlIGNvaGVyZW5jeSBwcm9ibGVtLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJdW5zaWduZWQgaW50IHJlZykKQEAgLTMyNCw4ICszMjksMTEgQEAKIAlyZXR1cm4gY2FjaGVbcmVnIC0gQ1M0MjcwX0ZJUlNUUkVHXTsKIH0KIAotLyoKLSAqIFdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KKy8qKgorICogY3M0MjcwX2kyY193cml0ZSAtIHdyaXRlIHRvIGEgQ1M0MjcwIHJlZ2lzdGVyIHZpYSB0aGUgSTJDIGJ1cy4KKyAqIEBjb2RlYzogdGhlIGNvZGVjIGZvciB0aGlzIENTNDI3MAorICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHdyaXRlCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGdpdmVuIENTNDI3MCByZWdpc3RlciwgYW5kCiAgKiBhbHNvIHVwZGF0ZXMgdGhlIHJlZ2lzdGVyIGNhY2hlLgpAQCAtMzQ2LDcgKzM1NCw3IEBACiAJaWYgKGNhY2hlW3JlZyAtIENTNDI3MF9GSVJTVFJFR10gIT0gdmFsdWUpIHsKIAkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMzU3LDExICszNjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFByb2dyYW0gdGhlIENTNDI3MCB3aXRoIHRoZSBnaXZlbiBoYXJkd2FyZSBwYXJhbWV0ZXJzLgorLyoqCisgKiBjczQyNzBfaHdfcGFyYW1zIC0gcHJvZ3JhbSB0aGUgQ1M0MjcwIHdpdGggdGhlIGdpdmVuIGhhcmR3YXJlIHBhcmFtZXRlcnMuCisgKiBAc3Vic3RyZWFtOiB0aGUgYXVkaW8gc3RyZWFtCisgKiBAcGFyYW1zOiB0aGUgaGFyZHdhcmUgcGFyYW1ldGVycyB0byBzZXQKKyAqIEBkYWk6IHRoZSBTT0MgREFJIChpZ25vcmVkKQogICoKLSAqIFRoZSAub3BzIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBwcm92aWRlIGJvYXJkLXNwZWNpZmljIGRhdGEsIGxpa2UKLSAqIGlucHV0IGZyZXF1ZW5jaWVzLCB0byB0aGlzIGRyaXZlci4gIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhhdCBpbmZvcm1hdGlvbiwKKyAqIFRoaXMgZnVuY3Rpb24gcHJvZ3JhbXMgdGhlIGhhcmR3YXJlIHdpdGggdGhlIHZhbHVlcyBwcm92aWRlZC4KKyAqIFNwZWNpZmljYWxseSwgdGhlIHNhbXBsZSByYXRlIGFuZCB0aGUgZGF0YSBmb3JtYXQuCisgKgorICogVGhlIC5vcHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHByb3ZpZGUgYm9hcmQtc3BlY2lmaWMgZGF0YSwgbGlrZSBpbnB1dAorICogZnJlcXVlbmNpZXMsIHRvIHRoaXMgZHJpdmVyLiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGF0IGluZm9ybWF0aW9uLAogICogY29tYmluZXMgaXQgd2l0aCB0aGUgaGFyZHdhcmUgcGFyYW1ldGVycyBwcm92aWRlZCwgYW5kIHByb2dyYW1zIHRoZQogICogaGFyZHdhcmUgYWNjb3JkaW5nbHkuCiAgKi8KQEAgLTM3MSw3ICszODUsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTM5MSwzMyArNDA1LDI4IEBACiAKIAlpZiAoaSA9PSBOVU1fTUNMS19SQVRJT1MpIHsKIAkJLyogV2UgZGlkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgcmF0aW8gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIHJhdGlvXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgbWF0Y2hpbmcgcmF0aW9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBGcmVlemUgYW5kIHBvd2VyLWRvd24gdGhlIGNvZGVjICovCi0KLQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCBDUzQyNzBfUFdSQ1RMX0ZSRUVaRSB8Ci0JCQkgICAgQ1M0MjcwX1BXUkNUTF9QRE5fQURDIHwgQ1M0MjcwX1BXUkNUTF9QRE5fREFDIHwKLQkJCSAgICBDUzQyNzBfUFdSQ1RMX1BETik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFByb2dyYW0gdGhlIG1vZGUgY29udHJvbCByZWdpc3RlciAqLworCS8qIFNldCB0aGUgc2FtcGxlIHJhdGUgKi8KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX01PREUpOwogCXJlZyAmPSB+KENTNDI3MF9NT0RFX1NQRUVEX01BU0sgfCBDUzQyNzBfTU9ERV9ESVZfTUFTSyk7Ci0JcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5zcGVlZF9tb2RlIHwgY3M0MjcwX21vZGVfcmF0aW9zW2ldLm1jbGs7CisJcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5tY2xrOworCisJaWYgKGNzNDI3MC0+c2xhdmVfbW9kZSkKKwkJcmVnIHw9IENTNDI3MF9NT0RFX1NMQVZFOworCWVsc2UKKwkJcmVnIHw9IGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5zcGVlZF9tb2RlOwogCiAJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX01PREUsIHJlZyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBQcm9ncmFtIHRoZSBmb3JtYXQgcmVnaXN0ZXIgKi8KKwkvKiBTZXQgdGhlIERBSSBmb3JtYXQgKi8KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX0ZPUk1BVCk7CiAJcmVnICY9IH4oQ1M0MjcwX0ZPUk1BVF9EQUNfTUFTSyB8IENTNDI3MF9GT1JNQVRfQURDX01BU0spOwpAQCAtNDMwLDU1ICs0MzksMjMgQEAKIAkJcmVnIHw9IENTNDI3MF9GT1JNQVRfREFDX0xKIHwgQ1M0MjcwX0ZPUk1BVF9BRENfTEo7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiB1bmtub3duIGZvcm1hdFxuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVua25vd24gZGFpIGZvcm1hdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9GT1JNQVQsIHJlZyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IEkyQyB3cml0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIERpc2FibGUgYXV0by1tdXRlLiAgVGhpcyBmZWF0dXJlIGFwcGVhcnMgdG8gYmUgYnVnZ3ksIGJlY2F1c2UgaW4KLQkgICBzb21lIHNpdHVhdGlvbnMsIGF1dG8tbXV0ZSB3aWxsIG5vdCBkZWFjdGl2YXRlIHdoZW4gaXQgc2hvdWxkLiAqLwotCi0JcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTVVURSk7Ci0JcmVnICY9IH5DUzQyNzBfTVVURV9BVVRPOwotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWcpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBEaXNhYmxlIGF1dG9tYXRpYyB2b2x1bWUgY29udHJvbC4gIEl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQKLQkgKiBpdCBjYXVzZXMgdm9sdW1lIGNoYW5nZSBjb21tYW5kcyB0byBiZSBkZWxheWVkLCBzb21ldGltZXMgdW50aWwKLQkgKiBhZnRlciBwbGF5YmFjayBoYXMgc3RhcnRlZC4KLQkgKi8KLQotCXJlZyA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgQ1M0MjcwX1RSQU5TKTsKLQlyZWcgJj0gfihDUzQyNzBfVFJBTlNfU09GVCB8IENTNDI3MF9UUkFOU19aRVJPKTsKLQlyZXQgPSBjczQyNzBfaTJjX3dyaXRlKGNvZGVjLCBDUzQyNzBfVFJBTlMsIHJlZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJMkMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBUaGF3IGFuZCBwb3dlci11cCB0aGUgY29kZWMgKi8KLQotCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9IV01VVEUKLQotLyoKLSAqIFNldCB0aGUgQ1M0MjcwIGV4dGVybmFsIG11dGUKKy8qKgorICogY3M0MjcwX211dGUgLSBlbmFibGUvZGlzYWJsZSB0aGUgQ1M0MjcwIGV4dGVybmFsIG11dGUKKyAqIEBkYWk6IHRoZSBTT0MgREFJCisgKiBAbXV0ZTogMCA9IGRpc2FibGUgbXV0ZSwgMSA9IGVuYWJsZSBtdXRlCiAgKgogICogVGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSBtdXRlIGJpdHMgaW4gdGhlIE1VVEUgcmVnaXN0ZXIuICBUaGUgQ1M0MjcwJ3MKICAqIG11dGUgY2FwYWJpbGl0eSBpcyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbXV0aW5nIGNpcmN1aXRyeSwgc28gaWYgdGhlCkBAIC00OTMsMTUwICs0NzAsNDcgQEAKIAlyZWc2ID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfTVVURSk7CiAKIAlpZiAobXV0ZSkKLQkJcmVnNiB8PSBDUzQyNzBfTVVURV9BRENfQSB8IENTNDI3MF9NVVRFX0FEQ19CIHwKLQkJCUNTNDI3MF9NVVRFX0RBQ19BIHwgQ1M0MjcwX01VVEVfREFDX0I7CisJCXJlZzYgfD0gQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQjsKIAllbHNlCi0JCXJlZzYgJj0gfihDUzQyNzBfTVVURV9BRENfQSB8IENTNDI3MF9NVVRFX0FEQ19CIHwKLQkJCSAgQ1M0MjcwX01VVEVfREFDX0EgfCBDUzQyNzBfTVVURV9EQUNfQik7CisJCXJlZzYgJj0gfihDUzQyNzBfTVVURV9EQUNfQSB8IENTNDI3MF9NVVRFX0RBQ19CKTsKIAogCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfTVVURSwgcmVnNik7CiB9CiAKLSNlbmRpZgotCi1zdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKiwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKik7Ci0KIC8qIEEgbGlzdCBvZiBub24tREFQTSBjb250cm9scyB0aGF0IHRoZSBDUzQyNzAgc3VwcG9ydHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQyNzBfc25kX2NvbnRyb2xzW10gPSB7CiAJU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkJQ1M0MjcwX1ZPTEEsIENTNDI3MF9WT0xCLCAwLCAweEZGLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0gewotCXsiY3M0MjcwIiwgMH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3M0MjcwX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzNDI3MF9pMmNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIkNTNDI3MCBJMkMiLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5pZF90YWJsZSA9IGNzNDI3MF9pZCwKLQkucHJvYmUgPSBjczQyNzBfaTJjX3Byb2JlLAorCQlDUzQyNzBfVk9MQSwgQ1M0MjcwX1ZPTEIsIDAsIDB4RkYsIDEpLAorCVNPQ19TSU5HTEUoIkRpZ2l0YWwgU2lkZXRvbmUgU3dpdGNoIiwgQ1M0MjcwX0ZPUk1BVCwgNSwgMSwgMCksCisJU09DX1NJTkdMRSgiU29mdCBSYW1wIFN3aXRjaCIsIENTNDI3MF9UUkFOUywgNiwgMSwgMCksCisJU09DX1NJTkdMRSgiWmVybyBDcm9zcyBTd2l0Y2giLCBDUzQyNzBfVFJBTlMsIDUsIDEsIDApLAorCVNPQ19TSU5HTEUoIlBvcGd1YXJkIFN3aXRjaCIsIENTNDI3MF9NT0RFLCAwLCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJBdXRvLU11dGUgU3dpdGNoIiwgQ1M0MjcwX01VVEUsIDUsIDEsIDApLAorCVNPQ19ET1VCTEUoIk1hc3RlciBDYXB0dXJlIFN3aXRjaCIsIENTNDI3MF9NVVRFLCAzLCA0LCAxLCAwKQogfTsKIAogLyoKLSAqIEdsb2JhbCB2YXJpYWJsZSB0byBzdG9yZSBzb2NkZXYgZm9yIGkyYyBwcm9iZSBmdW5jdGlvbi4KKyAqIGNzNDI3MF9jb2RlYyAtIGdsb2JhbCB2YXJpYWJsZSB0byBzdG9yZSBjb2RlYyBmb3IgdGhlIEFTb0MgcHJvYmUgZnVuY3Rpb24KICAqCiAgKiBJZiBzdHJ1Y3QgaTJjX2RyaXZlciBoYWQgYSBwcml2YXRlX2RhdGEgZmllbGQsIHdlIHdvdWxkbid0IG5lZWQgdG8gdXNlCi0gKiBjczQyNzBfc29jZGVjLiAgVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gcGFzcyB0aGUgc29jZGV2IHN0cnVjdHVyZSB0bwotICogY3M0MjcwX2kyY19wcm9iZSgpLgotICoKLSAqIFRoZSByZWFsIHNvbHV0aW9uIHRvIGNzNDI3MF9zb2NkZXYgaXMgdG8gY3JlYXRlIGEgbWVjaGFuaXNtCi0gKiB0aGF0IG1hcHMgSTJDIGFkZHJlc3NlcyB0byBzbmRfc29jX2RldmljZSBzdHJ1Y3R1cmVzLiAgUGVyaGFwcyB0aGUKLSAqIGNyZWF0aW9uIG9mIHRoZSBzbmRfc29jX2RldmljZSBvYmplY3Qgc2hvdWxkIGJlIG1vdmVkIG91dCBvZgotICogY3M0MjcwX3Byb2JlKCkgYW5kIGludG8gY3M0MjcwX2kyY19wcm9iZSgpLCBidXQgdGhhdCB3b3VsZCBtYWtlIHRoaXMKLSAqIGRyaXZlciBkZXBlbmRlbnQgb24gSTJDLiAgVGhlIENTNDI3MCBzdXBwb3J0cyAic3RhbmQtYWxvbmUiIG1vZGUsIHdoZXJlYnkKLSAqIHRoZSBjaGlwIGlzICpub3QqIGNvbm5lY3RlZCB0byB0aGUgSTJDIGJ1cywgYnV0IGlzIGluc3RlYWQgY29uZmlndXJlZCB2aWEKLSAqIGlucHV0IHBpbnMuCisgKiBjczQyNzBfY29kZWMuICBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBwYXNzIHRoZSBjb2RlYyBzdHJ1Y3R1cmUgZnJvbQorICogY3M0MjcwX2kyY19wcm9iZSgpIHRvIGNzNDI3MF9wcm9iZSgpLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gZ29vZAorICogd2F5IHRvIHN5bmNocm9uaXplIHRoZXNlIHR3byBmdW5jdGlvbnMuICBjczQyNzBfaTJjX3Byb2JlKCkgY2FuIGJlIGNhbGxlZAorICogbXVsdGlwbGUgdGltZXMgYmVmb3JlIGNzNDI3MF9wcm9iZSgpIGlzIGNhbGxlZCBldmVuIG9uY2UuICBTbyBmb3Igbm93LCB3ZQorICogYWxzbyBvbmx5IGFsbG93IGNzNDI3MF9pMmNfcHJvYmUoKSB0byBiZSBydW4gb25jZS4gIFRoYXQgbWVhbnMgdGhhdCB3ZSBkbworICogbm90IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjczQyNzAgZGV2aWNlIGluIHRoZSBzeXN0ZW0sIGF0IGxlYXN0IGZvciBub3cuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmNzNDI3MF9zb2NkZXY7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNzNDI3MF9jb2RlYzsKIAotLyoKLSAqIEluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2Ugb2YgdGhlIENTNDI3MAotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB3aGVuZXZlciB0aGUgSTJDIHN1YnN5c3RlbSBmaW5kcyBhIGRldmljZQotICogYXQgYSBwYXJ0aWN1bGFyIGFkZHJlc3MuCi0gKgotICogTm90ZTogc25kX3NvY19uZXdfcGNtcygpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQsCi0gKiBiZWNhdXNlIG9mIHNuZF9jdGxfYWRkKCkuCi0gKi8KLXN0YXRpYyBpbnQgY3M0MjcwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCwKLQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjczQyNzBfc29jZGV2OwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBQcm9iaW5nIGFsbCBwb3NzaWJsZSBhZGRyZXNzZXMgaGFzIG9uZSBkcmF3YmFjazogaWYgdGhlcmUgYXJlCi0JICAgbXVsdGlwbGUgQ1M0MjcwcyBvbiB0aGUgYnVzLCB0aGVuIHlvdSBjYW5ub3Qgc3BlY2lmeSB3aGljaAotCSAgIHNvY2RldiBpcyBtYXRjaGVkIHdpdGggd2hpY2ggQ1M0MjcwLiAgRm9yIG5vdywgd2UganVzdCByZWplY3QKLQkgICB0aGlzIEkyQyBkZXZpY2UgaWYgdGhlIHNvY2RldiBhbHJlYWR5IGhhcyBvbmUgYXR0YWNoZWQuICovCi0JaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogTm90ZTogY29kZWNfZGFpLT5jb2RlYyBpcyBOVUxMIGhlcmUgKi8KLQotCWNvZGVjLT5yZWdfY2FjaGUgPSBremFsbG9jKENTNDI3MF9OVU1SRUdTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGNvdWxkIG5vdCBhbGxvY2F0ZSByZWdpc3RlciBjYWNoZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIENTNDI3MCAqLwotCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyY19jbGllbnQsIENTNDI3MF9DSElQSUQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gcmVhZCBJMkNcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQkvKiBUaGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgY2hpcCBJRCBzaG91bGQgYmUgMTEwMC4gKi8KLQlpZiAoKHJldCAmIDB4RjApICE9IDB4QzApIHsKLQkJLyogVGhlIGRldmljZSBhdCB0aGlzIGFkZHJlc3MgaXMgbm90IGEgQ1M0MjcwIGNvZGVjICovCi0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBmb3VuZCBkZXZpY2UgYXQgSTJDIGFkZHJlc3MgJVhcbiIsCi0JCWkyY19jbGllbnQtPmFkZHIpOwotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogaGFyZHdhcmUgcmV2aXNpb24gJVhcbiIsIHJldCAmIDB4Rik7Ci0KLQljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjX2NsaWVudDsKLQljb2RlYy0+cmVhZCA9IGNzNDI3MF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSBjczQyNzBfaTJjX3dyaXRlOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IENTNDI3MF9OVU1SRUdTOwotCi0JLyogVGhlIEkyQyBpbnRlcmZhY2UgaXMgc2V0IHVwLCBzbyBwcmUtZmlsbCBvdXIgcmVnaXN0ZXIgY2FjaGUgKi8KLQotCXJldCA9IGNzNDI3MF9maWxsX2NhY2hlKGNvZGVjKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNzNDI3MDogZmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGVcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIEFkZCB0aGUgbm9uLURBUE0gY29udHJvbHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNzNDI3MF9zbmRfY29udHJvbHMpOyBpKyspIHsKLQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwgPQotCQlzbmRfc29jX2NuZXcoJmNzNDI3MF9zbmRfY29udHJvbHNbaV0sIGNvZGVjLCBOVUxMKTsKLQotCQlyZXQgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwga2N0cmwpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JfQotCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyY19jbGllbnQsIGNvZGVjKTsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQljb2RlYy0+Y29udHJvbF9kYXRhID0gTlVMTDsKLQotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOwotCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IDA7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogVVNFX0kyQyovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBjczQyNzBfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gY3M0MjcwX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IGNzNDI3MF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IGNzNDI3MF9zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlCT0gY3M0MjcwX211dGUsCit9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgY3M0MjcwX2RhaSA9IHsKLQkubmFtZSA9ICJDUzQyNzAiLAorCS5uYW1lID0gImNzNDI3MCIsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMSwKQEAgLTY1MSwxMTggKzUyNSwyNTEgQEAKIAkJLnJhdGVzID0gMCwKIAkJLmZvcm1hdHMgPSBDUzQyNzBfRk9STUFUUywKIAl9LAorCS5vcHMgPSAmY3M0MjcwX2RhaV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoY3M0MjcwX2RhaSk7CiAKLS8qCi0gKiBBU29DIHByb2JlIGZ1bmN0aW9uCisvKioKKyAqIGNzNDI3MF9wcm9iZSAtIEFTb0MgcHJvYmUgZnVuY3Rpb24KKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBtYWNoaW5lIGRyaXZlciBjYWxscwotICogcGxhdGZvcm1fZGV2aWNlX2FkZCgpLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBBU29DIGhhcyBhbGwgdGhlIHBpZWNlcyBpdCBuZWVkcyB0bworICogaW5zdGFudGlhdGUgYSBzb3VuZCBkcml2ZXIuCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOworCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJDUzQyNzAgQUxTQSBTb0MgQ29kZWNcbiIpOwotCi0JLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgc25kX3NvY19jb2RlYyBzdHJ1Y3R1cmUKLQkgICBhbmQgb3VyIHByaXZhdGUgZGF0YSB0b2dldGhlci4gKi8KLQljb2RlYyA9IGt6YWxsb2MoQUxJR04oc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgNCkgKwotCQkJc2l6ZW9mKHN0cnVjdCBjczQyNzBfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghY29kZWMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IENvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlYyBzdHJ1Y3R1cmVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwotCi0JY29kZWMtPm5hbWUgPSAiQ1M0MjcwIjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+ZGFpID0gJmNzNDI3MF9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBjb2RlYyArCi0JCUFMSUdOKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIDQpOwotCi0Jc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCS8qIENvbm5lY3QgdGhlIGNvZGVjIHRvIHRoZSBzb2NkZXYuICBzbmRfc29jX25ld19wY21zKCkgbmVlZHMgdGhpcy4gKi8KKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CiAKIAkvKiBSZWdpc3RlciBQQ01zICovCi0KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gY3JlYXRlIFBDTXNcbiIpOwotCQlnb3RvIGVycm9yX2ZyZWVfY29kZWM7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCXJldHVybiByZXQ7CiAJfQogCi0jaWZkZWYgVVNFX0kyQwotCWNzNDI3MF9zb2NkZXYgPSBzb2NkZXY7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmY3M0MjcwX2kyY19kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjczQyNzA6IGZhaWxlZCB0byBhdHRhY2ggZHJpdmVyIik7CisJLyogQWRkIHRoZSBub24tREFQTSBjb250cm9scyAqLworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBjczQyNzBfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoY3M0MjcwX3NuZF9jb250cm9scykpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBhZGQgY29udHJvbHNcbiIpOwogCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKLQkvKiBEaWQgd2UgZmluZCBhIENTNDI3MCBvbiB0aGUgSTJDIGJ1cz8gKi8KLQlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkgewotCQkvKiBJbml0aWFsaXplIGNvZGVjIG9wcyAqLwotCQljczQyNzBfZGFpLm9wcy5od19wYXJhbXMgPSBjczQyNzBfaHdfcGFyYW1zOwotCQljczQyNzBfZGFpLm9wcy5zZXRfc3lzY2xrID0gY3M0MjcwX3NldF9kYWlfc3lzY2xrOwotCQljczQyNzBfZGFpLm9wcy5zZXRfZm10ID0gY3M0MjcwX3NldF9kYWlfZm10OwotI2lmZGVmIENPTkZJR19TTkRfU09DX0NTNDI3MF9IV01VVEUKLQkJY3M0MjcwX2RhaS5vcHMuZGlnaXRhbF9tdXRlID0gY3M0MjcwX211dGU7Ci0jZW5kaWYKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3M0MjcwOiBubyBJMkMgZGV2aWNlIGZvdW5kLCAiCi0JCQkidXNpbmcgc3RhbmQtYWxvbmUgbW9kZVxuIik7Ci0jZWxzZQotCXByaW50ayhLRVJOX0lORk8gImNzNDI3MDogSTJDIGRpc2FibGVkLCB1c2luZyBzdGFuZC1hbG9uZSBtb2RlXG4iKTsKLSNlbmRpZgotCisJLyogQW5kIGZpbmFsbHksIHJlZ2lzdGVyIHRoZSBzb2NkZXYgKi8KIAlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3M0MjcwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7Ci0JCWdvdG8gZXJyb3JfZGVsX2RyaXZlcjsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZGVsX2RyaXZlcjoKLSNpZmRlZiBVU0VfSTJDCi0JaTJjX2RlbF9kcml2ZXIoJmNzNDI3MF9pMmNfZHJpdmVyKTsKLQogZXJyb3JfZnJlZV9wY21zOgotI2VuZGlmCiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAotZXJyb3JfZnJlZV9jb2RlYzoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKLQogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogY3M0MjcwX3JlbW92ZSAtIEFTb0MgcmVtb3ZlIGZ1bmN0aW9uCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY291bnRlcnBhcnQgdG8gY3M0MjcwX3Byb2JlKCkuCisgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCi0jaWZkZWYgVVNFX0kyQwotCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7Ci0jZW5kaWYKKwlyZXR1cm4gMDsKK307CiAKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKLQlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKy8qKgorICogY3M0MjcwX2kyY19wcm9iZSAtIGluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2Ugb2YgdGhlIENTNDI3MAorICogQGkyY19jbGllbnQ6IHRoZSBJMkMgY2xpZW50IG9iamVjdAorICogQGlkOiB0aGUgSTJDIGRldmljZSBJRCAoaWdub3JlZCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgSTJDIHN1YnN5c3RlbSBmaW5kcyBhIGRldmljZSB0aGF0CisgKiBtYXRjaGVzIHRoZSBkZXZpY2UgSUQgZ2l2ZW4gdmlhIGEgcHJpb3IgY2FsbCB0byBpMmNfYWRkX2RyaXZlcigpLgorICovCitzdGF0aWMgaW50IGNzNDI3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQsCisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCByZXQ7CisKKwkvKiBGb3Igbm93LCB3ZSBvbmx5IHN1cHBvcnQgb25lIGNzNDI3MCBkZXZpY2UgaW4gdGhlIHN5c3RlbS4gIFNlZSB0aGUKKwkgKiBjb21tZW50IGZvciBjczQyNzBfY29kZWMuCisJICovCisJaWYgKGNzNDI3MF9jb2RlYykgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJpZ25vcmluZyBDUzQyNzAgYXQgYWRkciAlWFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJvbmx5IG9uZSBwZXIgYm9hcmQgYWxsb3dlZFxuIik7CisJCS8qIFNob3VsZCB3ZSByZXR1cm4gc29tZXRoaW5nIG90aGVyIHRoYW4gRU5PREVWIGhlcmU/ICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBDUzQyNzAgKi8KKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShpMmNfY2xpZW50LCBDUzQyNzBfQ0hJUElEKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBpMmMgYXQgYWRkciAlWFxuIiwKKwkJICAgICAgIGkyY19jbGllbnQtPmFkZHIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBUaGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgY2hpcCBJRCBzaG91bGQgYmUgMTEwMC4gKi8KKwlpZiAoKHJldCAmIDB4RjApICE9IDB4QzApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZGV2aWNlIGF0IGFkZHIgJVggaXMgbm90IGEgQ1M0MjcwXG4iLAorCQkgICAgICAgaTJjX2NsaWVudC0+YWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9pbmZvKCZpMmNfY2xpZW50LT5kZXYsICJmb3VuZCBkZXZpY2UgYXQgaTJjIGFkZHJlc3MgJVhcbiIsCisJCWkyY19jbGllbnQtPmFkZHIpOworCWRldl9pbmZvKCZpMmNfY2xpZW50LT5kZXYsICJoYXJkd2FyZSByZXZpc2lvbiAlWFxuIiwgcmV0ICYgMHhGKTsKKworCS8qIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHNuZF9zb2NfY29kZWMgc3RydWN0dXJlCisJICAgYW5kIG91ciBwcml2YXRlIGRhdGEgdG9nZXRoZXIuICovCisJY3M0MjcwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNzNDI3MF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjczQyNzApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGNvZGVjXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNvZGVjID0gJmNzNDI3MC0+Y29kZWM7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPmRldiA9ICZpMmNfY2xpZW50LT5kZXY7CisJY29kZWMtPm5hbWUgPSAiQ1M0MjcwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmNzNDI3MF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSBjczQyNzA7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyY19jbGllbnQ7CisJY29kZWMtPnJlYWQgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gY3M0MjcwX2kyY193cml0ZTsKKwljb2RlYy0+cmVnX2NhY2hlID0gY3M0MjcwLT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQ1M0MjcwX05VTVJFR1M7CisKKwkvKiBUaGUgSTJDIGludGVyZmFjZSBpcyBzZXQgdXAsIHNvIHByZS1maWxsIG91ciByZWdpc3RlciBjYWNoZSAqLworCisJcmV0ID0gY3M0MjcwX2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJZ290byBlcnJvcl9mcmVlX2NvZGVjOworCX0KKworCS8qIERpc2FibGUgYXV0by1tdXRlLiAgVGhpcyBmZWF0dXJlIGFwcGVhcnMgdG8gYmUgYnVnZ3kuICBJbiBzb21lCisJICogc2l0dWF0aW9ucywgYXV0by1tdXRlIHdpbGwgbm90IGRlYWN0aXZhdGUgd2hlbiBpdCBzaG91bGQsIHNvIHdlIHdhbnQKKwkgKiB0aGlzIGZlYXR1cmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEFuIGFwcGxpY2F0aW9uIChlLmcuIGFsc2FjdGwpIGNhbgorCSAqIHJlLWVuYWJsZWQgaXQgYnkgdXNpbmcgdGhlIGNvbnRyb2xzLgorCSAqLworCisJcmVnID0gY3M0MjcwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBDUzQyNzBfTVVURSk7CisJcmVnICY9IH5DUzQyNzBfTVVURV9BVVRPOworCXJldCA9IGNzNDI3MF9pMmNfd3JpdGUoY29kZWMsIENTNDI3MF9NVVRFLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERpc2FibGUgYXV0b21hdGljIHZvbHVtZSBjb250cm9sLiAgVGhlIGhhcmR3YXJlIGVuYWJsZXMsIGFuZCBpdAorCSAqIGNhdXNlcyB2b2x1bWUgY2hhbmdlIGNvbW1hbmRzIHRvIGJlIGRlbGF5ZWQsIHNvbWV0aW1lcyB1bnRpbCBhZnRlcgorCSAqIHBsYXliYWNrIGhhcyBzdGFydGVkLiAgQW4gYXBwbGljYXRpb24gKGUuZy4gYWxzYWN0bCkgY2FuCisJICogcmUtZW5hYmxlZCBpdCBieSB1c2luZyB0aGUgY29udHJvbHMuCisJICovCisKKwlyZWcgPSBjczQyNzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIENTNDI3MF9UUkFOUyk7CisJcmVnICY9IH4oQ1M0MjcwX1RSQU5TX1NPRlQgfCBDUzQyNzBfVFJBTlNfWkVSTyk7CisJcmV0ID0gY3M0MjcwX2kyY193cml0ZShjb2RlYywgQ1M0MjcwX1RSQU5TLCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIERBSS4gTm9ybWFsbHksIHdlJ2QgcHJlZmVyIHRvIGhhdmUgYSBrbWFsbG9jJ2QgREFJCisJICogc3RydWN0dXJlIGZvciBlYWNoIENTNDI3MCBkZXZpY2UsIGJ1dCB0aGUgbWFjaGluZSBkcml2ZXIgbmVlZHMgdG8KKwkgKiBoYXZlIGEgcG9pbnRlciB0byB0aGUgREFJIHN0cnVjdHVyZSwgc28gZm9yIG5vdyBpdCBtdXN0IGJlIGEgZ2xvYmFsCisJICogdmFyaWFibGUuCisJICovCisJY3M0MjcwX2RhaS5kZXYgPSAmaTJjX2NsaWVudC0+ZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIERBSS4gIElmIGFsbCB0aGUgb3RoZXIgQVNvQyBkcml2ZXIgaGF2ZSBhbHJlYWR5CisJICogcmVnaXN0ZXJlZCwgdGhlbiB0aGlzIHdpbGwgY2FsbCBvdXIgcHJvYmUgZnVuY3Rpb24sIHNvCisJICogY3M0MjcwX2NvZGVjIG5lZWRzIHRvIGJlIHJlYWR5LgorCSAqLworCWNzNDI3MF9jb2RlYyA9IGNvZGVjOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZjczQyNzBfZGFpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmNfY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgREFJZVxuIik7CisJCWdvdG8gZXJyb3JfZnJlZV9jb2RlYzsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCwgY3M0MjcwKTsKKworCXJldHVybiAwOworCitlcnJvcl9mcmVlX2NvZGVjOgorCWtmcmVlKGNzNDI3MCk7CisJY3M0MjcwX2NvZGVjID0gTlVMTDsKKwljczQyNzBfZGFpLmRldiA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNzNDI3MF9pMmNfcmVtb3ZlIC0gcmVtb3ZlIGFuIEkyQyBkZXZpY2UKKyAqIEBpMmNfY2xpZW50OiB0aGUgSTJDIGNsaWVudCBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byBjczQyNzBfaTJjX3Byb2JlKCkuCisgKi8KK3N0YXRpYyBpbnQgY3M0MjcwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQpCit7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjX2NsaWVudCk7CisKKwlrZnJlZShjczQyNzApOworCWNzNDI3MF9jb2RlYyA9IE5VTEw7CisJY3M0MjcwX2RhaS5kZXYgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBjczQyNzBfaWQgLSBJMkMgZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKyAqLworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDI3MF9pZFtdID0geworCXsiY3M0MjcwIiwgMH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3M0MjcwX2lkKTsKKworLyoKKyAqIGNzNDI3MF9pMmNfZHJpdmVyIC0gSTJDIGRldmljZSBpZGVudGlmaWNhdGlvbgorICoKKyAqIFRoaXMgc3RydWN0dXJlIHRlbGxzIHRoZSBJMkMgc3Vic3lzdGVtIGhvdyB0byBpZGVudGlmeSBhbmQgc3VwcG9ydCBhCisgKiBnaXZlbiBJMkMgZGV2aWNlIHR5cGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjczQyNzBfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJjczQyNzAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZSA9IGNzNDI3MF9pZCwKKwkucHJvYmUgPSBjczQyNzBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBjczQyNzBfaTJjX3JlbW92ZSwKK307CisKKy8qCiAgKiBBU29DIGNvZGVjIGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiBBc3NpZ24gdGhpcyB2YXJpYWJsZSB0byB0aGUgY29kZWNfZGV2IGZpZWxkIG9mIHRoZSBtYWNoaW5lIGRyaXZlcidzCkBAIC03NzYsMTMgKzc4MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjczQyNzBfaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmY3M0MjcwX2RhaSk7CisJcHJfaW5mbygiQ2lycnVzIExvZ2ljIENTNDI3MCBBTFNBIFNvQyBDb2RlYyBEcml2ZXJcbiIpOworCisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChjczQyNzBfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjczQyNzBfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmNzNDI3MF9kYWkpOworCWkyY19kZWxfZHJpdmVyKCZjczQyNzBfaTJjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChjczQyNzBfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKaW5kZXggOWEzZTY3ZS4uNWNkYTllNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKQEAgLTY3LDExICs2NywxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENNMzAwOCBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFBDTTMwMDhfVkVSU0lPTik7CiAKLQlzb2NkZXYtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNvY2Rldi0+Y29kZWMpCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NkZXYtPmNhcmQtPmNvZGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKIAogCWNvZGVjLT5uYW1lID0gIlBDTTMwMDgiOwpAQCAtMTM5LDcgKzEzOSw3IEBACiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHN0YXRpYyBpbnQgcGNtMzAwOF9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHBjbTMwMDhfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAKIAlpZiAoIWNvZGVjKQpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIAlwY20zMDA4X2dwaW9fZnJlZShzZXR1cCk7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKLQlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlrZnJlZShzb2NkZXYtPmNhcmQtPmNvZGVjKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCBjYWMzNzM2Li44N2Y2MDZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtMTUxLDIxICsxNTEsNiBAQAogU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgc3NtMjYwMl9lbnVtWzFdKSwKIH07CiAKLS8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLwotc3RhdGljIGludCBzc20yNjAyX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGVyciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzbTI2MDJfc25kX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJc25kX3NvY19jbmV3KCZzc20yNjAyX3NuZF9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBPdXRwdXQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzc20yNjAyX291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBTU00yNjAyX0FQQU5BLCAzLCAxLCAwKSwKQEAgLTI5MSw3ICsyNzYsNyBAQAogCXUxNiBzcmF0ZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+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+CkBAIC0zOCw2ICszOSw4IEBACiAjaW5jbHVkZSAib21hcC1wY20uaCIKICNpbmNsdWRlICIuLi9jb2RlY3MvdHdsNDAzMC5oIgogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX3NkcDM0MzA7CisKIHN0YXRpYyBpbnQgc2RwMzQzMF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC04MSwxMiArODQsMTIxIEBACiAJLmh3X3BhcmFtcyA9IHNkcDM0MzBfaHdfcGFyYW1zLAogfTsKIAorLyogSGVhZHNldCBqYWNrICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoc19qYWNrOworCisvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uIERBUE0gcGlucyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGhzX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbiA9ICJIZWFkc2V0IE1pYyIsCisJCS5tYXNrID0gU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwl9LAorCXsKKwkJLnBpbiA9ICJIZWFkc2V0IFN0ZXJlb3Bob25lIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJfSwKK307CisKKy8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gZ3Bpb3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gaHNfamFja19ncGlvc1tdID0geworCXsKKwkJLmdwaW8gPSAoT01BUF9NQVhfR1BJT19MSU5FUyArIDIpLAorCQkubmFtZSA9ICJoc2RldC1ncGlvIiwKKwkJLnJlcG9ydCA9IFNORF9KQUNLX0hFQURTRVQsCisJCS5kZWJvdW5jZV90aW1lID0gMjAwLAorCX0sCit9OworCisvKiBTRFAzNDMwIG1hY2hpbmUgREFQTSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fTUlDKCJFeHQgTWljIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiRXh0IFNwayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQgTWljIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0hQKCJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBFeHRlcm5hbCBNaWNzOiBNQUlOTUlDLCBTVUJNSUMgd2l0aCBiaWFzKi8KKwl7Ik1BSU5NSUMiLCBOVUxMLCAiTWljIEJpYXMgMSJ9LAorCXsiU1VCTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDIifSwKKwl7Ik1pYyBCaWFzIDEiLCBOVUxMLCAiRXh0IE1pYyJ9LAorCXsiTWljIEJpYXMgMiIsIE5VTEwsICJFeHQgTWljIn0sCisKKwkvKiBFeHRlcm5hbCBTcGVha2VyczogSEZMLCBIRlIgKi8KKwl7IkV4dCBTcGsiLCBOVUxMLCAiSEZMIn0sCisJeyJFeHQgU3BrIiwgTlVMTCwgIkhGUiJ9LAorCisJLyogSGVhZHNldCBNaWM6IEhTTUlDIHdpdGggYmlhcyAqLworCXsiSFNNSUMiLCBOVUxMLCAiSGVhZHNldCBNaWMgQmlhcyJ9LAorCXsiSGVhZHNldCBNaWMgQmlhcyIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCisJLyogSGVhZHNldCBTdGVyZW9waG9uZSAoSGVhZHBob25lKTogSFNPTCwgSFNPUiAqLworCXsiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwsICJIU09MIn0sCisJeyJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCwgIkhTT1IifSwKK307CisKK3N0YXRpYyBpbnQgc2RwMzQzMF90d2w0MDMwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisKKwkvKiBBZGQgU0RQMzQzMCBzcGVjaWZpYyB3aWRnZXRzICovCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgc2RwMzQzMF90d2w0MDMwX2RhcG1fd2lkZ2V0cywKKwkJCQlBUlJBWV9TSVpFKHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IHVwIFNEUDM0MzAgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJLyogU0RQMzQzMCBjb25uZWN0ZWQgcGlucyAqLworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgTWljIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOworCisJLyogVFdMNDAzMCBub3QgY29ubmVjdGVkIHBpbnMgKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQVVYTCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJBVVhSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVE1JQyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJESUdJTUlDMSIpOworCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJFQVJQSUVDRSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQUkVEUklWRUwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVSIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0FSS0lUUiIpOworCisJcmV0ID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uICovCisJcmV0ID0gc25kX3NvY19qYWNrX25ldygmc25kX3NvY19zZHAzNDMwLCAiSGVhZHNldCBKYWNrIiwKKwkJCQlTTkRfSkFDS19IRUFEU0VULCAmaHNfamFjayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfamFja19hZGRfcGlucygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX3BpbnMpLAorCQkJCWhzX2phY2tfcGlucyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfamFja19hZGRfZ3Bpb3MoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19ncGlvcyksCisJCQkJaHNfamFja19ncGlvcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBEaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzZHAzNDMwX2RhaSA9IHsKIAkubmFtZSA9ICJUV0w0MDMwIiwKIAkuc3RyZWFtX25hbWUgPSAiVFdMNDAzMCIsCiAJLmNwdV9kYWkgPSAmb21hcF9tY2JzcF9kYWlbMF0sCiAJLmNvZGVjX2RhaSA9ICZ0d2w0MDMwX2RhaSwKKwkuaW5pdCA9IHNkcDM0MzBfdHdsNDAzMF9pbml0LAogCS5vcHMgPSAmc2RwMzQzMF9vcHMsCiB9OwogCkBAIC0xNDIsNiArMjU0LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHNkcDM0MzBfc29jX2V4aXQodm9pZCkKIHsKKwlzbmRfc29jX2phY2tfZnJlZV9ncGlvcygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX2dwaW9zKSwKKwkJCQloc19qYWNrX2dwaW9zKTsKKwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNkcDM0MzBfc25kX2RldmljZSk7CiB9CiBtb2R1bGVfZXhpdChzZHAzNDMwX3NvY19leGl0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCBmODJlMTA2Li41OTk4YWIzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL0tjb25maWcKKysrIGIvc291bmQvc29jL3B4YS9LY29uZmlnCkBAIC02MSw2ICs2MSwyNCBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBTaGFycAogCSAgWmF1cnVzIFNMLUM2MDAweCBtb2RlbHMgKFRvc2EpLgogCitjb25maWcgU05EX1BYQTJYWF9TT0NfRTc0MAorCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBlNzQwIgorCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9FNzQwCisJc2VsZWN0IFNORF9TT0NfV005NzA1CisJc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorCSAgdG9zaGliYSBlNzQwIFBEQQorCitjb25maWcgU05EX1BYQTJYWF9TT0NfRTc1MAorCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBlNzUwIgorCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9FNzUwCisJc2VsZWN0IFNORF9TT0NfV005NzA1CisJc2VsZWN0IFNORF9QWEEyWFhfU09DX0FDOTcKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorCSAgdG9zaGliYSBlNzUwIFBEQQorCiBjb25maWcgU05EX1BYQTJYWF9TT0NfRTgwMAogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBlODAwIgogCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9FODAwCkBAIC05NywzICsxMTUsMTIgQEAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQogCSAgTWFydmVsbCBaeWxvbml0ZSByZWZlcmVuY2UgcGxhdGZvcm0uCisKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19NSU9BNzAxCisgICAgICAgIHRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTUlPIEE3MDEiCisgICAgICAgIGRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9NSU9BNzAxCisgICAgICAgIHNlbGVjdCBTTkRfUFhBMlhYX1NPQ19BQzk3CisgICAgICAgIHNlbGVjdCBTTkRfU09DX1dNOTcxMworICAgICAgICBoZWxwCisgICAgICAgICAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKyAgICAgICAgICBNSU8gQTcwMS4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUgYi9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCmluZGV4IDA4YTlmMjcuLjhlZDg4MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL3B4YS9NYWtlZmlsZQpAQCAtMTMsMTcgKzEzLDIzIEBACiBzbmQtc29jLWNvcmdpLW9ianMgOj0gY29yZ2kubwogc25kLXNvYy1wb29kbGUtb2JqcyA6PSBwb29kbGUubwogc25kLXNvYy10b3NhLW9ianMgOj0gdG9zYS5vCitzbmQtc29jLWU3NDAtb2JqcyA6PSBlNzQwX3dtOTcwNS5vCitzbmQtc29jLWU3NTAtb2JqcyA6PSBlNzUwX3dtOTcwNS5vCiBzbmQtc29jLWU4MDAtb2JqcyA6PSBlODAwX3dtOTcxMi5vCiBzbmQtc29jLXNwaXR6LW9ianMgOj0gc3BpdHoubwogc25kLXNvYy1lbS14MjcwLW9ianMgOj0gZW0teDI3MC5vCiBzbmQtc29jLXBhbG0yN3gtb2JqcyA6PSBwYWxtMjd4Lm8KIHNuZC1zb2Mtenlsb25pdGUtb2JqcyA6PSB6eWxvbml0ZS5vCitzbmQtc29jLW1pb2E3MDEtb2JqcyA6PSBtaW9hNzAxX3dtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19DT1JHSSkgKz0gc25kLXNvYy1jb3JnaS5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfUE9PRExFKSArPSBzbmQtc29jLXBvb2RsZS5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfVE9TQSkgKz0gc25kLXNvYy10b3NhLm8KK29iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FNzQwKSArPSBzbmQtc29jLWU3NDAubworb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0U3NTApICs9IHNuZC1zb2MtZTc1MC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRTgwMCkgKz0gc25kLXNvYy1lODAwLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19TUElUWikgKz0gc25kLXNvYy1zcGl0ei5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRU1fWDI3MCkgKz0gc25kLXNvYy1lbS14MjcwLm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19QQUxNMjdYKSArPSBzbmQtc29jLXBhbG0yN3gubworb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX01JT0E3MDEpICs9IHNuZC1zb2MtbWlvYTcwMS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19aWUxPTklURSkgKz0gc25kLXNvYy16eWxvbml0ZS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKaW5kZXggMWJhMjVhNS4uMDIyNjNlNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9jb3JnaS5jCisrKyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CkBAIC0xMDAsNyArMTAxLDcgQEAKIHN0YXRpYyBpbnQgY29yZ2lfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCWNvcmdpX2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTI3NSwxOCArMjc2LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgY29yZ2lfd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKIAogCS8qIEFkZCBjb3JnaSBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczMV9jb3JnaV9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmd204NzMxX2NvcmdpX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfY29yZ2lfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3MzFfY29yZ2lfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBjb3JnaSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzMxX2RhcG1fd2lkZ2V0cywKQEAgLTMxNywxOSArMzE2LDQ0IEBACiAJLm51bV9saW5rcyA9IDEsCiB9OwogCi0vKiBjb3JnaSBhdWRpbyBwcml2YXRlIGRhdGEgKi8KLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgY29yZ2lfd204NzMxX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFiLAotfTsKLQogLyogY29yZ2kgYXVkaW8gc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGNvcmdpX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJnNuZF9zb2NfY29yZ2ksCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZjb3JnaV93bTg3MzFfc2V0dXAsCiB9OwogCisvKgorICogRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgYm9kZ2UgdG8gYXZvaWQgY3Jvc3MtdHJlZSBtZXJnZSBpc3N1ZXMuCisgKiBOZXcgZHJpdmVycyBzaG91bGQgcmVnaXN0ZXIgdGhlIHdtODczMSBJMkMgZGV2aWNlIGluIHRoZSBtYWNoaW5lCisgKiBzZXR1cCBjb2RlICh1bmRlciBhcmNoL2FybSBmb3IgQVJNIHN5c3RlbXMpLgorICovCitzdGF0aWMgaW50IHdtODczMV9pMmNfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IDB4MWI7CisJc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoMCk7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyIDBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOworCWlmICghY2xpZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb3JnaV9zbmRfZGV2aWNlOwogCiBzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9pbml0KHZvaWQpCkBAIC0zNDAsNiArMzY0LDEwIEBACiAJICAgICAgbWFjaGluZV9pc19odXNreSgpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyZXQgPSB3bTg3MzFfaTJjX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJY29yZ2lfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghY29yZ2lfc25kX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkMmY4OQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIGU3NDAtd205NzA1LmMgIC0tICBTb0MgYXVkaW8gZm9yIGU3NDAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgT05MWS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzA1LmgiCisjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgorI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCisKKworI2RlZmluZSBFNzQwX0FVRElPX09VVCAxCisjZGVmaW5lIEU3NDBfQVVESU9fSU4gIDIKKworc3RhdGljIGludCBlNzQwX2F1ZGlvX3Bvd2VyOworCitzdGF0aWMgdm9pZCBlNzQwX3N5bmNfYXVkaW9fcG93ZXIoaW50IHN0YXR1cykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfV005NzA1X25BVkREMiwgIXN0YXR1cyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX0FNUF9PTiwgKHN0YXR1cyAmIEU3NDBfQVVESU9fT1VUKSA/IDEgOiAwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfTUlDX09OLCAoc3RhdHVzICYgRTc0MF9BVURJT19JTikgPyAxIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgZTc0MF9taWNfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWU3NDBfYXVkaW9fcG93ZXIgfD0gRTc0MF9BVURJT19JTjsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZTc0MF9hdWRpb19wb3dlciAmPSB+RTc0MF9BVURJT19JTjsKKworCWU3NDBfc3luY19hdWRpb19wb3dlcihlNzQwX2F1ZGlvX3Bvd2VyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU3NDBfb3V0cHV0X2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQllNzQwX2F1ZGlvX3Bvd2VyIHw9IEU3NDBfQVVESU9fT1VUOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQllNzQwX2F1ZGlvX3Bvd2VyICY9IH5FNzQwX0FVRElPX09VVDsKKworCWU3NDBfc3luY19hdWRpb19wb3dlcihlNzQwX2F1ZGlvX3Bvd2VyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZTc0MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJPdXRwdXQgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc0MF9vdXRwdXRfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiTWljIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU3NDBfbWljX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiT3V0cHV0IEFtcCIsIE5VTEwsICJMT1VUIn0sCisJeyJPdXRwdXQgQW1wIiwgTlVMTCwgIlJPVVQifSwKKwl7Ik91dHB1dCBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCisJeyJTcGVha2VyIiwgTlVMTCwgIk91dHB1dCBBbXAifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIk91dHB1dCBBbXAifSwKKworCXsiTUlDMSIsIE5VTEwsICJNaWMgQW1wIn0sCisJeyJNaWMgQW1wIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwpIn0sCit9OworCitzdGF0aWMgaW50IGU3NDBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQT1VUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQSE9ORSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUENCRUVQIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzIiKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU3NDBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU3NDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBlNzQwX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IGU3NDBfYWM5N19pbml0LAorCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19BVVhdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlNzQwID0geworCS5uYW1lID0gIlRvc2hpYmEgZTc0MCIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gZTc0MF9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZTc0MF9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBlNzQwX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmU3NDAsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcwNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzQwX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGU3NDBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfZTc0MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NDBfTUlDX09OLCAgIk1pYyBhbXAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9BTVBfT04sICJPdXRwdXQgYW1wIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX21pY19hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NDBfV005NzA1X25BVkREMiwgIkF1ZGlvIHBvd2VyIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX29wX2FtcF9ncGlvOworCisJLyogRGlzYWJsZSBhdWRpbyAqLworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NDBfTUlDX09OLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NDBfQU1QX09OLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NDBfV005NzA1X25BVkREMiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKworCWU3NDBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZTc0MF9zbmRfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZTc0MF9zbmRfZGV2aWNlLCAmZTc0MF9zbmRfZGV2ZGF0YSk7CisJZTc0MF9zbmRfZGV2ZGF0YS5kZXYgPSAmZTc0MF9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlNzQwX3NuZF9kZXZpY2UpOworCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisvKiBGYWlsIGdyYWNlZnVsbHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU3NDBfc25kX2RldmljZSk7CitmcmVlX2Fwd3JfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzQwX1dNOTcwNV9uQVZERDIpOworZnJlZV9vcF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzQwX0FNUF9PTik7CitmcmVlX21pY19hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzQwX01JQ19PTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZTc0MF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTc0MF9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZTc0MF9pbml0KTsKK21vZHVsZV9leGl0KGU3NDBfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgZHJpdmVyIGZvciBlNzQwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjZWNjYwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGU3NTAtd205NzA1LmMgIC0tICBTb0MgYXVkaW8gZm9yIGU3NTAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgT05MWS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzA1LmgiCisjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgorI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCisKK3N0YXRpYyBpbnQgZTc1MF9zcGtfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRiwgMCk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlNzUwX2hwX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U3NTBfSFBfQU1QX09GRiwgMCk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZTc1MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc1MF9ocF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJTcGVha2VyIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU3NTBfc3BrX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEFtcCIsIE5VTEwsICJIUE9VVEwifSwKKwl7IkhlYWRwaG9uZSBBbXAiLCBOVUxMLCAiSFBPVVRSIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIZWFkcGhvbmUgQW1wIn0sCisKKwl7IlNwZWFrZXIgQW1wIiwgTlVMTCwgIk1PTk9PVVQifSwKKwl7IlNwZWFrZXIiLCBOVUxMLCAiU3BlYWtlciBBbXAifSwKKworCXsiTUlDMSIsIE5VTEwsICJNaWMgKEludGVybmFsKSJ9LAorfTsKKworc3RhdGljIGludCBlNzUwX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxPVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUk9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQSE9ORSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUENCRUVQIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzIiKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU3NTBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU3NTBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBlNzUwX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IGU3NTBfYWM5N19pbml0LAorCQkvKiB1c2Ugb3BzIHRvIGNoZWNrIHN0YXJ0dXAgc3RhdGUgKi8KKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfQVVYXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTc1MCA9IHsKKwkubmFtZSA9ICJUb3NoaWJhIGU3NTAiLAorCS5wbGF0Zm9ybSA9ICZweGEyeHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9IGU3NTBfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKGU3NTBfZGFpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZTc1MF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZlNzUwLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTk3MDUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZTc1MF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBlNzUwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX2U3NTAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzUwX0hQX0FNUF9PRkYsICAiSGVhZHBob25lIGFtcCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAiU3BlYWtlciBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaHBfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzUwX0hQX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCisJZTc1MF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFlNzUwX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShlNzUwX3NuZF9kZXZpY2UsICZlNzUwX3NuZF9kZXZkYXRhKTsKKwllNzUwX3NuZF9kZXZkYXRhLmRldiA9ICZlNzUwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU3NTBfc25kX2RldmljZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKy8qIEZhaWwgZ3JhY2VmdWxseSAqLworCXBsYXRmb3JtX2RldmljZV9wdXQoZTc1MF9zbmRfZGV2aWNlKTsKK2ZyZWVfc3BrX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NTBfU1BLX0FNUF9PRkYpOworZnJlZV9ocF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzUwX0hQX0FNUF9PRkYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGU3NTBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGU3NTBfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRik7CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGKTsKK30KKworbW9kdWxlX2luaXQoZTc1MF9pbml0KTsKK21vZHVsZV9leGl0KGU3NTBfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgZHJpdmVyIGZvciBlNzUwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMgYi9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKaW5kZXggMmUzMzg2ZC4uYmMwMTljZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBlODAwLXdtOTcxMi5jICAtLSAgU29DIGF1ZGlvIGZvciBlODAwCiAgKgotICogQmFzZWQgb24gdG9zYS5jCi0gKgogICogQ29weXJpZ2h0IDIwMDcgKGMpIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTMsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yMSwyMyArMTksODUgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMi5oIgogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlODAwOworc3RhdGljIGludCBlODAwX3Nwa19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX1NQS19BTVBfT04sIDEpOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfU1BLX0FNUF9PTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlODAwX2hwX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfSFBfQU1QX09GRiwgMCk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZTgwMF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbDEpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbDIpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU4MDBfaHBfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiU3BlYWtlciBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllODAwX3Nwa19hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRSIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIZWFkcGhvbmUgQW1wIn0sCisKKwl7IlNwZWFrZXIgQW1wIiwgTlVMTCwgIk1PTk9PVVQifSwKKwl7IlNwZWFrZXIiLCBOVUxMLCAiU3BlYWtlciBBbXAifSwKKworCXsiTUlDMSIsIE5VTEwsICJNaWMgKEludGVybmFsMSkifSwKKwl7Ik1JQzIiLCBOVUxMLCAiTWljIChJbnRlcm5hbDIpIn0sCit9OworCitzdGF0aWMgaW50IGU4MDBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBlODAwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRShlODAwX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU4MDBfZGFpW10gPSB7Ci17Ci0JLm5hbWUgPSAiQUM5NyBBdXgiLAotCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCi0JLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAotCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfQVVYXSwKLX0sCisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTgwMF9hYzk3X2luaXQsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0FVWF0sCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU4MDAgPSB7CkBAIC02MSw2ICsxMjEsMjIgQEAKIAlpZiAoIW1hY2hpbmVfaXNfZTgwMCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U4MDBfSFBfQU1QX09GRiwgICJIZWFkcGhvbmUgYW1wIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U4MDBfU1BLX0FNUF9PTiwgIlNwZWFrZXIgYW1wIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2hwX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTgwMF9TUEtfQU1QX09OLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCiAJZTgwMF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFlODAwX3NuZF9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjksOCArMTQ1LDE1IEBACiAJZTgwMF9zbmRfZGV2ZGF0YS5kZXYgPSAmZTgwMF9zbmRfZGV2aWNlLT5kZXY7CiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlODAwX3NuZF9kZXZpY2UpOwogCi0JaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChlODAwX3NuZF9kZXZpY2UpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworLyogRmFpbCBncmFjZWZ1bGx5ICovCisJcGxhdGZvcm1fZGV2aWNlX3B1dChlODAwX3NuZF9kZXZpY2UpOworZnJlZV9zcGtfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9TUEtfQU1QX09OKTsKK2ZyZWVfaHBfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03OCw2ICsxNjEsOCBAQAogc3RhdGljIHZvaWQgX19leGl0IGU4MDBfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGU4MDBfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9TUEtfQU1QX09OKTsKKwlncGlvX2ZyZWUoR1BJT19FODAwX0hQX0FNUF9PRkYpOwogfQogCiBtb2R1bGVfaW5pdChlODAwX2luaXQpOwpAQCAtODYsNCArMTcxLDQgQEAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwogTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgZHJpdmVyIGZvciBlODAwIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllZGE4YgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIEhhbmRsZXMgdGhlIE1pdGFjIG1pb2E3MDEgU29DIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSb2JlcnQgSmFyem1paworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBUaGlzIGlzIGEgbGl0dGxlIHNjaGVtYSBvZiB0aGUgc291bmQgaW50ZXJjb25uZWN0aW9ucyA6CisgKgorICogICAgU2FnZW0gWDIwMCAgICAgICAgICAgICAgICAgV29sZnNvbiBXTTk3MTMKKyAqICAgICstLS0tLS0tLSsgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgUmVhciBTcGVha2VyCisgKiAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgLy0rCisgKiAgICB8ICAgICAgICArLS0tPi0tLS0tPi0tLStNT05PSU4gICAgICAgICBTUEtMKy0tLT4tLS0tKy0rICB8CisgKiAgICB8ICBHU00gICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICB8CisgKiAgICB8ICAgICAgICArLS0tPi0tLS0tPi0tLStQQ0JFRVAgICAgICAgICBTUEtSKy0tLT4tLS0tKy0rICB8CisgKiAgICB8ICBDSElQICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgXC0rCisgKiAgICB8ICAgICAgICArLS0tPC0tLS0tPC0tLStNT05PICAgICAgICAgICAgICAgfAorICogICAgfCAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICBGcm9udCBTcGVha2VyCisgKiAgICArLS0tLS0tLS0rICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgLy0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgSFBMKy0tLT4tLS0tKy0rICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBPVVQzKy0tLT4tLS0tKy0rICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgXC0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIEZyb250IE1pY3JvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIE1JQzErLS0tLS08LS0rbysKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgIC0tLQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorCisjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgorI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMy5oIgorCisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQorCisjZGVmaW5lIEFDOTdfR1BJT19QVUxMCQkweDU4CisKKy8qIFVzZSBHUElPOCBmb3IgcmVhciBzcGVha2VyIGFtcGxpZmllciAqLworc3RhdGljIGludCByZWFyX2FtcF9wb3dlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwb3dlcikKK3sKKwl1bnNpZ25lZCBzaG9ydCByZWc7CisKKwlpZiAocG93ZXIpIHsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX0NGRywgcmVnIHwgMHgwMTAwKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fUFVMTCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19QVUxMLCByZWcgfCAoMTw8MTUpKTsKKwl9IGVsc2UgeworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgJiB+MHgwMTAwKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fUFVMTCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19QVUxMLCByZWcgJiB+KDE8PDE1KSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhcl9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCwKKwkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdpZGdldC0+Y29kZWM7CisKKwlyZXR1cm4gcmVhcl9hbXBfcG93ZXIoY29kZWMsIFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpOworfQorCisvKiBtaW9hNzAxIG1hY2hpbmUgZGFwbSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgbWlvYTcwMV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJGcm9udCBTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiUmVhciBTcGVha2VyIiwgcmVhcl9hbXBfZXZlbnQpLAorCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiR1NNIExpbmUgT3V0IiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBMaW5lIEluIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJGcm9udCBNaWMiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIENhbGwgTWljICovCisJeyJNaWMgQmlhcyIsIE5VTEwsICJGcm9udCBNaWMifSwKKwl7Ik1JQzEiLCBOVUxMLCAiTWljIEJpYXMifSwKKworCS8qIEhlYWRzZXQgTWljICovCisJeyJMSU5FTCIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiTElORVIiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKKworCS8qIEdTTSBNb2R1bGUgKi8KKwl7Ik1PTk9JTiIsIE5VTEwsICJHU00gTGluZSBPdXQifSwKKwl7IlBDQkVFUCIsIE5VTEwsICJHU00gTGluZSBPdXQifSwKKwl7IkdTTSBMaW5lIEluIiwgTlVMTCwgIk1PTk8ifSwKKworCS8qIGhlYWRwaG9uZSBjb25uZWN0ZWQgdG8gSFBMLCBIUFIgKi8KKwl7IkhlYWRzZXQiLCBOVUxMLCAiSFBMIn0sCisJeyJIZWFkc2V0IiwgTlVMTCwgIkhQUiJ9LAorCisJLyogZnJvbnQgc3BlYWtlciBjb25uZWN0ZWQgdG8gSFBMLCBPVVQzICovCisJeyJGcm9udCBTcGVha2VyIiwgTlVMTCwgIkhQTCJ9LAorCXsiRnJvbnQgU3BlYWtlciIsIE5VTEwsICJPVVQzIn0sCisKKwkvKiByZWFyIHNwZWFrZXIgY29ubmVjdGVkIHRvIFNQS0wsIFNQS1IgKi8KKwl7IlJlYXIgU3BlYWtlciIsIE5VTEwsICJTUEtMIn0sCisJeyJSZWFyIFNwZWFrZXIiLCBOVUxMLCAiU1BLUiJ9LAorfTsKKworc3RhdGljIGludCBtaW9hNzAxX3dtOTcxM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBzaG9ydCByZWc7CisKKwkvKiBBZGQgbWlvYTcwMSBzcGVjaWZpYyB3aWRnZXRzICovCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgQVJSQVlfQU5EX1NJWkUobWlvYTcwMV9kYXBtX3dpZGdldHMpKTsKKworCS8qIFNldCB1cCBtaW9hNzAxIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwbmVjdHMgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgQVJSQVlfQU5EX1NJWkUoYXVkaW9fbWFwKSk7CisKKwkvKiBQcmVwYXJlIEdQSU84IGZvciByZWFyIHNwZWFrZXIgYW1wbGlmaWVyICovCisJcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCWNvZGVjLT53cml0ZShjb2RlYywgQUM5N19HUElPX0NGRywgcmVnIHwgMHgwMTAwKTsKKworCS8qIFByZXBhcmUgTUlDIGlucHV0ICovCisJcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFDOTdfM0RfQ09OVFJPTCk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBQzk3XzNEX0NPTlRST0wsIHJlZyB8IDB4YzAwMCk7CisKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkZyb250IFNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIlJlYXIgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRnJvbnQgTWljIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBJbiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbWlvYTcwMV9vcHM7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBtaW9hNzAxX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcxM19kYWlbV005NzEzX0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IG1pb2E3MDFfd205NzEzX2luaXQsCisJCS5vcHMgPSAmbWlvYTcwMV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcxM19kYWlbV005NzEzX0RBSV9BQzk3X0FVWF0sCisJCS5vcHMgPSAmbWlvYTcwMV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG1pb2E3MDEgPSB7CisJLm5hbWUgPSAiTWlvQTcwMSIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gbWlvYTcwMV9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobWlvYTcwMV9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBtaW9hNzAxX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJm1pb2E3MDEsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcxMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptaW9hNzAxX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgbWlvYTcwMV93bTk3MTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX21pb2E3MDEoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfd2FybigmcGRldi0+ZGV2LCAiQmUgd2FybmVkIHRoYXQgaW5jb3JyZWN0IG1peGVycy9tdXhlcyBzZXR1cCB3aWxsIgorCQkgImxlYWQgdG8gb3ZlcmhlYXRpbmcgYW5kIHBvc3NpYmxlIGRlc3RydWN0aW9uIG9mIHlvdXIgZGV2aWNlLiIKKwkJICJEbyBub3QgdXNlIHdpdGhvdXQgYSBnb29kIGtub3dsZWRnZSBvZiBtaW8ncyBib2FyZCBkZXNpZ24hXG4iKTsKKworCW1pb2E3MDFfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghbWlvYTcwMV9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKG1pb2E3MDFfc25kX2RldmljZSwgJm1pb2E3MDFfc25kX2RldmRhdGEpOworCW1pb2E3MDFfc25kX2RldmRhdGEuZGV2ID0gJm1pb2E3MDFfc25kX2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChtaW9hNzAxX3NuZF9kZXZpY2UpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXBsYXRmb3JtX2RldmljZV9wdXQobWlvYTcwMV9zbmRfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtaW9hNzAxX3dtOTcxM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtaW9hNzAxX3NuZF9kZXZpY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtaW9hNzAxX3dtOTcxM19kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1pb2E3MDFfd205NzEzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWlvYTcwMV93bTk3MTNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gIm1pb2E3MDEtd205NzEzIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtaW9hNzAxX2Fzb2NfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1pb2E3MDFfd205NzEzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtaW9hNzAxX2Fzb2NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtaW9hNzAxX3dtOTcxM19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtaW9hNzAxX2Fzb2NfaW5pdCk7Cittb2R1bGVfZXhpdChtaW9hNzAxX2Fzb2NfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IEphcnptaWsgKHJqYXJ6bWlrQGZyZWUuZnIpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFdNOTcxMyBNSU8gQTcwMSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMgYi9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYwppbmRleCA0YTljZjMwLi40OGE3M2Y2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYworKysgYi9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYwpAQCAtNTUsNyArNTUsNyBAQAogc3RhdGljIGludCBwYWxtMjd4X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlwYWxtMjd4X2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTE0NiwxOSArMTQ2LDE2IEBACiAKIHN0YXRpYyBpbnQgcGFsbTI3eF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKIAogCS8qIGFkZCBwYWxtMjd4IHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFsbTI3eF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJnBhbG0yN3hfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUocGFsbTI3eF9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogYWRkIHBhbG0yN3ggc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHBhbG0yN3hfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wb29kbGUuYyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKaW5kZXggNmU5ODI3MS4uZWY3YzZjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wb29kbGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTc3LDcgKzc4LDcgQEAKIHN0YXRpYyBpbnQgcG9vZGxlX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlwb29kbGVfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjQwLDE5ICsyNDEsMTcgQEAKICAqLwogc3RhdGljIGludCBwb29kbGVfd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1JQ0lOIik7CiAKIAkvKiBBZGQgcG9vZGxlIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX3Bvb2RsZV9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmd204NzMxX3Bvb2RsZV9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX3Bvb2RsZV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODczMV9wb29kbGVfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODczMV9kYXBtX3dpZGdldHMsCkBAIC0yODMsMTcgKzI4Miw0MiBAQAogCS5udW1fbGlua3MgPSAxLAogfTsKIAotLyogcG9vZGxlIGF1ZGlvIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBwb29kbGVfd204NzMxX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFiLAotfTsKKy8qCisgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KKyAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKKyAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCisgKi8KK3N0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJaW5mby5hZGRyID0gMHgxYjsKKwlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCisJYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKCFjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KIAogLyogcG9vZGxlIGF1ZGlvIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBwb29kbGVfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19wb29kbGUsCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZwb29kbGVfd204NzMxX3NldHVwLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvb2RsZV9zbmRfZGV2aWNlOwpAQCAtMzA1LDYgKzMyOSwxMCBAQAogCWlmICghbWFjaGluZV9pc19wb29kbGUoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyZXQgPSB3bTg3MzFfaTJjX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJbG9jb21vX2dwaW9fc2V0X2RpcigmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2LAogCQlQT09ETEVfTE9DT01PX0dQSU9fQU1QX09OLCAwKTsKIAkvKiBzaG91bGQgd2UgbXV0ZSBIUCBhdCBzdGFydHVwIC0gYnVybmluZyBwb3dlciA/Ki8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggNzNjYjZiNC4uYjBiZjQwOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTEsNCArMSwzIEBACi0jZGVmaW5lIERFQlVHCiAvKgogICogcHhhLXNzcC5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKICAqCkBAIC0yMSw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC0yMjEsOSArMjIyLDkgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghY3B1X2RhaS0+YWN0aXZlKSB7Ci0JCXJldCA9IHNzcF9pbml0KCZwcml2LT5kZXYsIGNwdV9kYWktPmlkICsgMSwgU1NQX05PX0lSUSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJcHJpdi0+ZGV2LnBvcnQgPSBjcHVfZGFpLT5pZCArIDE7CisJCXByaXYtPmRldi5pcnEgPSBOT19JUlE7CisJCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAkJc3NwX2Rpc2FibGUoJnByaXYtPmRldik7CiAJfQogCXJldHVybiByZXQ7CkBAIC0yMzgsNyArMjM5LDcgQEAKIAogCWlmICghY3B1X2RhaS0+YWN0aXZlKSB7CiAJCXNzcF9kaXNhYmxlKCZwcml2LT5kZXYpOwotCQlzc3BfZXhpdCgmcHJpdi0+ZGV2KTsKKwkJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAl9CiB9CiAKQEAgLTI5OCw3ICsyOTksNyBAQAogCWludCB2YWw7CiAKIAl1MzIgc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJgotCQl+KFNTQ1IwX0VDUyB8ICBTU0NSMF9OQ1MgfCBTU0NSMF9NT0QgfCBTU0NSMF9BREMpOworCQl+KFNTQ1IwX0VDUyB8ICBTU0NSMF9OQ1MgfCBTU0NSMF9NT0QgfCBTU0NSMF9BQ1MpOwogCiAJZGV2X2RiZygmc3NwLT5wZGV2LT5kZXYsCiAJCSJweGFfc3NwX3NldF9kYWlfc3lzY2xrIGlkOiAlZCwgY2xrX2lkICVkLCBmcmVxICVkXG4iLApAQCAtMzI2LDcgKzMyNyw3IEBACiAJY2FzZSBQWEFfU1NQX0NMS19BVURJTzoKIAkJcHJpdi0+c3lzY2xrID0gMDsKIAkJc3NwX3NldF9zY3IoJnByaXYtPmRldiwgMSk7Ci0JCXNzY3IwIHw9IFNTQ1IwX0FEQzsKKwkJc3NjcjAgfD0gU1NDUjBfQUNTOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTUyMCw5ICs1MjEsMjAgQEAKIAl1MzIgc3NjcjE7CiAJdTMyIHNzcHNwOwogCisJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgYXQgYWxsICovCisJaWYgKHByaXYtPmRhaV9mbXQgPT0gZm10KQorCQlyZXR1cm4gMDsKKworCS8qIHdlIGNhbiBvbmx5IGNoYW5nZSB0aGUgc2V0dGluZ3MgaWYgdGhlIHBvcnQgaXMgbm90IGluIHVzZSAqLworCWlmIChzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJiBTU0NSMF9TU0UpIHsKKwkJZGV2X2Vycigmc3NwLT5wZGV2LT5kZXYsCisJCQkiY2FuJ3QgY2hhbmdlIGhhcmR3YXJlIGRhaSBmb3JtYXQ6IHN0cmVhbSBpcyBpbiB1c2UiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJLyogcmVzZXQgcG9ydCBzZXR0aW5ncyAqLwogCXNzY3IwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NDUjApICYKLQkJKFNTQ1IwX0VDUyB8ICBTU0NSMF9OQ1MgfCBTU0NSMF9NT0QgfCBTU0NSMF9BREMpOworCQkoU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FDUyk7CiAJc3NjcjEgPSBTU0NSMV9SeFRyZXNoKDgpIHwgU1NDUjFfVHhUcmVzaCg3KTsKIAlzc3BzcCA9IDA7CiAKQEAgLTU0NSwxOCArNTU3LDE4IEBACiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCXNzY3IwIHw9IFNTQ1IwX01PRCB8IFNTQ1IwX1BTUDsKKwkJc3NjcjAgfD0gU1NDUjBfUFNQOwogCQlzc2NyMSB8PSBTU0NSMV9SV09UIHwgU1NDUjFfVFJBSUw7CiAKKwkJLyogU2VlIGh3X3BhcmFtcygpICovCiAJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKIAkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKLQkJCXNzcHNwIHw9IFNTUFNQX0ZTUlQ7CisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNUDsKIAkJCWJyZWFrOwogCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgotCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVAgfCBTU1BTUF9GU1JUOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TRlJNUDsKKwkJCXNzcHNwIHw9IFNTUFNQX1NDTU9ERSgzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NDIsMzQgKzY1NCw2NSBAQAogCQkJc3NjcjAgfD0gU1NDUjBfRlBDS0U7CiAjZW5kaWYKIAkJc3NjcjAgfD0gU1NDUjBfRGF0YVNpemUoMTYpOwotCQlpZiAocGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgPiAxKQotCQkJc3NjcjAgfD0gU1NDUjBfRURTUzsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKIAkJc3NjcjAgfD0gKFNTQ1IwX0VEU1MgfCBTU0NSMF9EYXRhU2l6ZSg4KSk7Ci0JCS8qIHdlIG11c3QgYmUgaW4gbmV0d29yayBtb2RlICgyIHNsb3RzKSBmb3IgMjQgYml0IHN0ZXJlbyAqLwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgogCQlzc2NyMCB8PSAoU1NDUjBfRURTUyB8IFNTQ1IwX0RhdGFTaXplKDE2KSk7Ci0JCS8qIHdlIG11c3QgYmUgaW4gbmV0d29yayBtb2RlICgyIHNsb3RzKSBmb3IgMzIgYml0IHN0ZXJlbyAqLwogCQlicmVhazsKIAl9CiAJc3NwX3dyaXRlX3JlZyhzc3AsIFNTQ1IwLCBzc2NyMCk7CiAKIAlzd2l0Y2ggKHByaXYtPmRhaV9mbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQkvKiBDbGVhcmVkIHdoZW4gdGhlIERBSSBmb3JtYXQgaXMgc2V0ICovCi0JCXNzcHNwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NQU1ApIHwgU1NQU1BfU0ZSTVdEVEgod2lkdGgpOworCSAgICAgICBzc3BzcCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTUFNQKTsKKworCQlpZiAoKChzc2NyMCAmIFNTQ1IwX1NDUikgPT0gU1NDUjBfU2VyQ2xrRGl2KDQpKSAmJgorCQkgICAgICh3aWR0aCA9PSAxNikpIHsKKwkJCS8qIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGJpdGNsayBpcyA2NGZzCisJCQkqIGFuZCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIDIqMzIgYml0cyBvZiBhdWRpbworCQkJKiBzYW1wbGVzLgorCQkJKgorCQkJKiBUaGUgU1NQIHZhbHVlcyB1c2VkIGZvciB0aGF0IGFyZSBhbGwgZm91bmQgb3V0IGJ5CisJCQkqIHRyeWluZyBhbmQgZmFpbGluZyBhIGxvdDsgc29tZSBvZiB0aGUgcmVnaXN0ZXJzCisJCQkqIG5lZWRlZCBmb3IgdGhhdCBtb2RlIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBQWEEzeHguCisJCQkqLworCisjaWZkZWYgQ09ORklHX1BYQTN4eAorCQkJaWYgKCFjcHVfaXNfcHhhM3h4KCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1XRFRIKHdpZHRoICogMik7CisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNRExZKHdpZHRoICogNCk7CisJCQlzc3BzcCB8PSBTU1BTUF9FRE1ZU1RPUCgzKTsKKwkJCXNzcHNwIHw9IFNTUFNQX0RNWVNUT1AoMyk7CisJCQlzc3BzcCB8PSBTU1BTUF9ETVlTVFJUKDEpOworI2Vsc2UKKwkJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgZnJhbWUgd2lkdGggaXMgdGhlIHdpZHRoIHRoZSBMUkNMSyBpcworCQkJICogYXNzZXJ0ZWQgZm9yOyB0aGUgZGVsYXkgaXMgZXhwcmVzc2VkIGluCisJCQkgKiBoYWxmIGN5Y2xlIHVuaXRzLiAgV2UgbmVlZCB0aGUgZXh0cmEgY3ljbGUKKwkJCSAqIGJlY2F1c2UgdGhlIGRhdGEgc3RhcnRzIGNsb2NraW5nIG91dCBvbmUgQkNMSworCQkJICogYWZ0ZXIgTFJDTEsgY2hhbmdlcyBwb2xhcml0eS4KKwkJCSAqLworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVdEVEgod2lkdGggKyAxKTsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1ETFkoKHdpZHRoICsgMSkgKiAyKTsKKwkJCXNzcHNwIHw9IFNTUFNQX0RNWVNUUlQoMSk7CisJCX0KKwogCQlzc3Bfd3JpdGVfcmVnKHNzcCwgU1NQU1AsIHNzcHNwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCi0JLyogV2UgYWx3YXlzIHVzZSBhIG5ldHdvcmsgbW9kZSBzbyB3ZSBhbHdheXMgcmVxdWlyZSBURE0gc2xvdHMKKwkvKiBXaGVuIHdlIHVzZSBhIG5ldHdvcmsgbW9kZSwgd2UgYWx3YXlzIHJlcXVpcmUgVERNIHNsb3RzCiAJICogLSBjb21wbGFpbiBsb3VkbHkgYW5kIGZhaWwgaWYgdGhleSd2ZSBub3QgYmVlbiBzZXQgdXAgeWV0LgogCSAqLwotCWlmICghKHNzcF9yZWFkX3JlZyhzc3AsIFNTVFNBKSAmIDB4ZikpIHsKKwlpZiAoKHNzY3IwICYgU1NDUjBfTU9EKSAmJiAhKHNzcF9yZWFkX3JlZyhzc3AsIFNTVFNBKSAmIDB4ZikpIHsKIAkJZGV2X2Vycigmc3NwLT5wZGV2LT5kZXYsICJObyBURE0gdGltZXNsb3QgY29uZmlndXJlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTc1MSw3ICs3OTQsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5kZXYuc3NwID0gc3NwX3JlcXVlc3QoZGFpLT5pZCwgIlNvQyBhdWRpbyIpOworCXByaXYtPmRldi5zc3AgPSBzc3BfcmVxdWVzdChkYWktPmlkICsgMSwgIlNvQyBhdWRpbyIpOwogCWlmIChwcml2LT5kZXYuc3NwID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfcHJpdjsKQEAgLTc4Miw2ICs4MjUsMTkgQEAKIAkJCSAgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8CVwKIAkJCSAgICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX3NzcF9kYWlfb3BzID0geworCS5zdGFydHVwCT0gcHhhX3NzcF9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHB4YV9zc3Bfc2h1dGRvd24sCisJLnRyaWdnZXIJPSBweGFfc3NwX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IHB4YV9zc3BfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2Nsa2Rpdgk9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwJPSBweGFfc3NwX3NldF9kYWlfcGxsLAorCS5zZXRfZm10CT0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKKwkuc2V0X3RkbV9zbG90CT0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAorCS5zZXRfdHJpc3RhdGUJPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCit9OworCiBzdHJ1Y3Qgc25kX3NvY19kYWkgcHhhX3NzcF9kYWlbXSA9IHsKIAl7CiAJCS5uYW1lID0gInB4YTJ4eC1zc3AxIiwKQEAgLTgwMiwxOCArODU4LDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogCXsJLm5hbWUgPSAicHhhMnh4LXNzcDIiLAogCQkuaWQgPSAxLApAQCAtODMzLDE4ICs4NzgsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiAJewogCQkubmFtZSA9ICJweGEyeHgtc3NwMyIsCkBAIC04NjUsMTggKzg5OSw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIAl7CiAJCS5uYW1lID0gInB4YTJ4eC1zc3A0IiwKQEAgLTg5NywxOCArOTIwLDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHB4YV9zc3BfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYwppbmRleCA4MTJjMmI0Li4wMWMyMWM2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCkBAIC0xMDYsMTMgKzEwNiwxMyBAQAogc3RhdGljIGludCBweGEyeHhfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlyZXR1cm4gcHhhMnh4X2FjOTdfaHdfcHJvYmUocGRldik7CisJcmV0dXJuIHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHRvX3BsYXRmb3JtX2RldmljZShkYWktPmRldikpOwogfQogCiBzdGF0aWMgdm9pZCBweGEyeHhfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlweGEyeHhfYWM5N19od19yZW1vdmUocGRldik7CisJcHhhMnh4X2FjOTdfaHdfcmVtb3ZlKHRvX3BsYXRmb3JtX2RldmljZShkYWktPmRldikpOwogfQogCiBzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTE2NCw2ICsxNjQsMTggQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCkKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2FjOTdfaGlmaV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBweGEyeHhfYWM5N19od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfYWM5N19hdXhfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2FjOTdfaHdfYXV4X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9hYzk3X21pY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBweGEyeHhfYWM5N19od19taWNfcGFyYW1zLAorfTsKKwogLyoKICAqIFRoZXJlIGlzIG9ubHkgMSBwaHlzaWNhbCBBQzk3IGludGVyZmFjZSBmb3IgcHhhMnh4LCBidXQgaXQKICAqIGhhcyBleHRyYSBmaWZvJ3MgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYXV4IERBQ3MgYW5kIEFEQ3MuCkBAIC0xODksOCArMjAxLDcgQEAKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IFBYQTJYWF9BQzk3X1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9hYzk3X2h3X3BhcmFtcyx9LAorCS5vcHMgPSAmcHhhX2FjOTdfaGlmaV9kYWlfb3BzLAogfSwKIHsKIAkubmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLApAQCAtMjA4LDggKzIxOSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBQWEEyWFhfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBweGEyeHhfYWM5N19od19hdXhfcGFyYW1zLH0sCisJLm9wcyA9ICZweGFfYWM5N19hdXhfZGFpX29wcywKIH0sCiB7CiAJLm5hbWUgPSAicHhhMnh4LWFjOTctbWljIiwKQEAgLTIyMSwyMyArMjMxLDUyIEBACiAJCS5jaGFubmVsc19tYXggPSAxLAogCQkucmF0ZXMgPSBQWEEyWFhfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBweGEyeHhfYWM5N19od19taWNfcGFyYW1zLH0sCisJLm9wcyA9ICZweGFfYWM5N19taWNfZGFpX29wcywKIH0sCiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfYWM5N19kYWkpOwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKIAorc3RhdGljIGludCBfX2RldmluaXQgcHhhMnh4X2FjOTdfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpOyBpKyspCisJCXB4YV9hYzk3X2RhaVtpXS5kZXYgPSAmcGRldi0+ZGV2OworCisJLyogUHVudCBtb3N0IG9mIHRoZSBpbml0IHRvIHRoZSBTb0MgcHJvYmU7IHdlIG1heSBuZWVkIHRoZSBtYWNoaW5lCisJICogZHJpdmVyIHRvIGRvIGludGVyZXN0aW5nIHRoaW5ncyB3aXRoIHRoZSBjbG9ja2luZyB0byBnZXQgdXMgdXAKKwkgKiBhbmQgcnVubmluZy4KKwkgKi8KKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcHhhMnh4X2FjOTdfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHB4YTJ4eF9hYzk3X2Rldl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTJ4eF9hYzk3X2Rldl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtYWM5NyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBweGFfYWM5N19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHB4YV9hYzk3X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHhhX2FjOTdfZXhpdCh2b2lkKQogewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHB4YV9hYzk3X2RhaSwgQVJSQVlfU0laRShweGFfYWM5N19kYWkpKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHB4YV9hYzk3X2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCmluZGV4IDUxNzk5MWYuLmU2YzI0NDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCkBAIC0yNSwyMCArMjUsMTEgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtaTJzLmgiCiAKLXN0cnVjdCBweGEyeHhfZ3BpbyB7Ci0JdTMyIHN5czsKLQl1MzIJcng7Ci0JdTMyIHR4OwotCXUzMiBjbGs7Ci0JdTMyIGZybTsKLX07Ci0KIC8qCiAgKiBJMlMgQ29udHJvbGxlciBSZWdpc3RlciBhbmQgQml0IERlZmluaXRpb25zCiAgKi8KQEAgLTEwNiwyMSArOTcsNiBAQAogCQkJCSAgRENNRF9CVVJTVDMyIHwgRENNRF9XSURUSDQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF9ncGlvIGdwaW9fYnVzW10gPSB7Ci0JeyAvKiBJMlMgU29DIFNsYXZlICovCi0JCS5yeCA9IEdQSU8yOV9TREFUQV9JTl9JMlNfTUQsCi0JCS50eCA9IEdQSU8zMF9TREFUQV9PVVRfSTJTX01ELAotCQkuY2xrID0gR1BJTzI4X0JJVENMS19JTl9JMlNfTUQsCi0JCS5mcm0gPSBHUElPMzFfU1lOQ19JMlNfTUQsCi0JfSwKLQl7IC8qIEkyUyBTb0MgTWFzdGVyICovCi0JCS5yeCA9IEdQSU8yOV9TREFUQV9JTl9JMlNfTUQsCi0JCS50eCA9IEdQSU8zMF9TREFUQV9PVVRfSTJTX01ELAotCQkuY2xrID0gR1BJTzI4X0JJVENMS19PVVRfSTJTX01ELAotCQkuZnJtID0gR1BJTzMxX1NZTkNfSTJTX01ELAotCX0sCi19OwotCiBzdGF0aWMgaW50IHB4YTJ4eF9pMnNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewpAQCAtMTgxLDkgKzE1Nyw2IEBACiAJaWYgKGNsa19pZCAhPSBQWEEyWFhfSTJTX1NZU0NMSykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocHhhX2kycy5tYXN0ZXIgJiYgZGlyID09IFNORF9TT0NfQ0xPQ0tfT1VUKQotCQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5zeXMpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NCwxMCArMTY3LDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5yeCk7Ci0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0udHgpOwotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLmZybSk7Ci0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0uY2xrKTsKIAlCVUdfT04oSVNfRVJSKGNsa19pMnMpKTsKIAljbGtfZW5hYmxlKGNsa19pMnMpOwogCXB4YV9pMnNfd2FpdCgpOwpAQCAtMzM1LDYgKzMwNCwxNSBAQAogCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCiAJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHB4YTJ4eF9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBweGEyeHhfaTJzX3NodXRkb3duLAorCS50cmlnZ2VyCT0gcHhhMnh4X2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBweGEyeHhfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IHB4YTJ4eF9pMnNfc2V0X2RhaV9mbXQsCisJLnNldF9zeXNjbGsJPSBweGEyeHhfaTJzX3NldF9kYWlfc3lzY2xrLAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHB4YV9pMnNfZGFpID0gewogCS5uYW1lID0gInB4YTJ4eC1pMnMiLAogCS5pZCA9IDAsCkBAIC0zNTAsMTQgKzMyOCw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBQWEEyWFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBweGEyeHhfaTJzX3N0YXJ0dXAsCi0JCS5zaHV0ZG93biA9IHB4YTJ4eF9pMnNfc2h1dGRvd24sCi0JCS50cmlnZ2VyID0gcHhhMnh4X2kyc190cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2kyc19od19wYXJhbXMsCi0JCS5zZXRfZm10ID0gcHhhMnh4X2kyc19zZXRfZGFpX2ZtdCwKLQkJLnNldF9zeXNjbGsgPSBweGEyeHhfaTJzX3NldF9kYWlfc3lzY2xrLAotCX0sCisJLm9wcyA9ICZweGFfaTJzX2RhaV9vcHMsCiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfaTJzX2RhaSk7CkBAIC0zOTgsMTEgKzM2OSw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9pMnNfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfcHhhMjd4KCkpCi0JCWdwaW9fYnVzWzFdLnN5cyA9IEdQSU8xMTNfSTJTX1NZU0NMS19NRDsKLQllbHNlCi0JCWdwaW9fYnVzWzFdLnN5cyA9IEdQSU8zMl9TWVNDTEtfSTJTX01EOwotCiAJY2xrX2kycyA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2kyc19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9zcGl0ei5jIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCmluZGV4IGEzYjllNmIuLjZjYTlmNTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvc3BpdHouYworKysgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogc3RhdGljIGludCBzcGl0el9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJc3BpdHpfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc3BpdHpfd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCS8qIE5DIGNvZGVjIHBpbnMgKi8KIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMSIpOwpAQCAtMjkwLDEyICsyOTAsMTAgQEAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OTzEiKTsKIAogCS8qIEFkZCBzcGl0eiBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1MF9zcGl0el9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmd204NzUwX3NwaXR6X2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfc3BpdHpfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3NTBfc3BpdHpfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBzcGl0eiBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzUwX2RhcG1fd2lkZ2V0cywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvdG9zYS5jIGIvc291bmQvc29jL3B4YS90b3NhLmMKaW5kZXggYzc3MTk0Zi4uZmM3ODEzNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS90b3NhLmMKKysrIGIvc291bmQvc29jL3B4YS90b3NhLmMKQEAgLTgyLDcgKzgyLDcgQEAKIHN0YXRpYyBpbnQgdG9zYV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJdG9zYV9leHRfY29udHJvbChjb2RlYyk7CkBAIC0xODgsMTggKzE4OCwxNiBAQAogCiBzdGF0aWMgaW50IHRvc2FfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PT1VUIik7CiAKIAkvKiBhZGQgdG9zYSBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvc2FfY29udHJvbHMpOyBpKyspIHsKLQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCi0JCQkJc25kX3NvY19jbmV3KCZ0b3NhX2NvbnRyb2xzW2ldLGNvZGVjLCBOVUxMKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHRvc2FfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh0b3NhX2NvbnRyb2xzKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiBhZGQgdG9zYSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgdG9zYV9kYXBtX3dpZGdldHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKaW5kZXggZjhlOWVjZC4uOWEzODZiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+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+ZGV2LnR5cGUgPSBTTkRSVl9ETUFfVFlQRV9ERVY7CiAJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CkBAIC00MDksNyArNDAyLDcgQEAKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKIAlpbnQgc3RyZWFtOwogCi0JREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKIAkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwpAQCAtNDMzLDcgKzQyNiw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFjYXJkLT5kZXYtPmRtYV9tYXNrKQogCQljYXJkLT5kZXYtPmRtYV9tYXNrID0gJnMzYzI0eHhfcGNtX2RtYW1hc2s7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3VkYTEzNHguYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCmluZGV4IGEwYTRkMTguLjhlNzlhNDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfdWRhMTM0eC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8c291bmQvczNjMjR4eF91ZGExMzR4Lmg+CiAjaW5jbHVkZSA8c291bmQvdWRhMTM0eC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1paXMuaD4KIAogI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYzVkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0wLDAgKzEsMjIyIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZC5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1iYW5rLWUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKKyNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfaW4gPSB7CisJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9fb3V0WzJdID0geworCVswXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMwX09VVCwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X291dCwKKwkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNUWEQsCisJCS5kbWFfc2l6ZQk9IDQsCisJfSwKKwlbMV0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9PVVQsCisJCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTVFhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pblsyXSA9IHsKKwlbMF0gPSB7CisJCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9JTiwKKwkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAorCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1JYRCwKKwkJLmRtYV9zaXplCT0gNCwKKwl9LAorCVsxXSA9IHsKKwkJLmNoYW5uZWwJPSBETUFDSF9JMlMxX0lOLAorCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW4sCisJCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhELAorCQkuZG1hX3NpemUJPSA0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzY0eHhfaTJzWzJdOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqdG9faW5mbyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJcmV0dXJuIGNwdV9kYWktPnByaXZhdGVfZGF0YTsKK30KKworc3RhdGljIGludCBzM2M2NHh4X2kyc19zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhjcHVfZGFpKTsKKwl1MzIgaWlzbW9kID0gcmVhZGwoaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFMzQzY0WFhfQ0xLU1JDX1BDTEs6CisJCWlpc21vZCAmPSB+UzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzY0WFhfQ0xLU1JDX01VWDoKKwkJaWlzbW9kIHw9IFMzQzY0WFhfSUlTTU9EX0lNU19TWVNNVVg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKGlpc21vZCwgaTJzLT5yZWdzICsgUzNDMjQxMl9JSVNNT0QpOworCisJcmV0dXJuIDA7Cit9CisKKwordW5zaWduZWQgbG9uZyBzM2M2NHh4X2kyc19nZXRfY2xvY2tyYXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzID0gdG9faW5mbyhkYWkpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShpMnMtPmlpc19jY2xrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2dldF9jbG9ja3JhdGUpOworCitzdGF0aWMgaW50IHMzYzY0eHhfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnM7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHByb2JpbmcgZGFpICVkXG4iLCBfX2Z1bmNfXywgcGRldi0+aWQpOworCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+IEFSUkFZX1NJWkUoczNjNjR4eF9pMnMpKSB7CisJCWRldl9lcnIoZGV2LCAiaWQgJWQgb3V0IG9mIHJhbmdlXG4iLCBwZGV2LT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkycyA9ICZzM2M2NHh4X2kyc1twZGV2LT5pZF07CisKKwlyZXQgPSBzM2NfaTJzdjJfcHJvYmUocGRldiwgZGFpLCBpMnMsCisJCQkgICAgICBwZGV2LT5pZCA/IFMzQzY0WFhfUEFfSUlTMSA6IFMzQzY0WFhfUEFfSUlTMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWkycy0+ZG1hX2NhcHR1cmUgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF07CisJaTJzLT5kbWFfcGxheWJhY2sgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOworCisJaTJzLT5paXNfY2NsayA9IGNsa19nZXQoZGV2LCAiYXVkaW8tYnVzIik7CisJaWYgKElTX0VSUihpMnMtPmlpc19jY2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzIik7CisJCWlvdW5tYXAoaTJzLT5yZWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogY29uZmlndXJlIEdQSU8gZm9yIGkycyBwb3J0ICovCisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDApLCBTM0M2NFhYX0dQRDBfSTJTMF9DTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMSksIFMzQzY0WFhfR1BEMV9JMlMwX0NEQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDIpLCBTM0M2NFhYX0dQRDJfSTJTMF9MUkNMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgzKSwgUzNDNjRYWF9HUEQzX0kyUzBfREkpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoNCksIFMzQzY0WFhfR1BENF9JMlMwX0QwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMCksIFMzQzY0WFhfR1BFMF9JMlMxX0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgxKSwgUzNDNjRYWF9HUEUxX0kyUzFfQ0RDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMiksIFMzQzY0WFhfR1BFMl9JMlMxX0xSQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDMpLCBTM0M2NFhYX0dQRTNfSTJTMV9ESSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSg0KSwgUzNDNjRYWF9HUEU0X0kyUzFfRDApOworCX0KKworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgUzNDNjRYWF9JMlNfUkFURVMgXAorCShTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFwKKwlTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQorCisjZGVmaW5lIFMzQzY0WFhfSTJTX0ZNVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzY0eHhfaTJzX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSBzM2M2NHh4X2kyc19zZXRfc3lzY2xrLAkKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWkgPSB7CisJLm5hbWUJCT0gInMzYzY0eHgtaTJzIiwKKwkuaWQJCT0gMCwKKwkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKKwkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4JPSAyLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCisJfSwKKwkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZGFpKTsKKworc3RhdGljIGludCBfX2luaXQgczNjNjR4eF9pMnNfaW5pdCh2b2lkKQoreworCXJldHVybiAgczNjX2kyc3YyX3JlZ2lzdGVyX2RhaSgmczNjNjR4eF9pMnNfZGFpKTsKK30KK21vZHVsZV9pbml0KHMzYzY0eHhfaTJzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjNjR4eF9pMnNfZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJnMzYzY0eHhfaTJzX2RhaSk7Cit9Cittb2R1bGVfZXhpdChzM2M2NHh4X2kyc19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0M2NFhYIEkyUyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZmZTNjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuaApAQCAtMCwwICsxLDMxIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5oCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0M2NFhYIEkyUyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSAorI2RlZmluZSBfX1NORF9TT0NfUzNDMjRYWF9TM0M2NFhYX0kyU19IIF9fRklMRV9fCisKKyNpbmNsdWRlICJzM2MtaTJzLXYyLmgiCisKKyNkZWZpbmUgUzNDNjRYWF9ESVZfQkNMSwlTM0NfSTJTVjJfRElWX0JDTEsKKyNkZWZpbmUgUzNDNjRYWF9ESVZfUkNMSwlTM0NfSTJTVjJfRElWX1JDTEsKKyNkZWZpbmUgUzNDNjRYWF9ESVZfUFJFU0NBTEVSCVMzQ19JMlNWMl9ESVZfUFJFU0NBTEVSCisKKyNkZWZpbmUgUzNDNjRYWF9DTEtTUkNfUENMSwkoMCkKKyNkZWZpbmUgUzNDNjRYWF9DTEtTUkNfTVVYCSgxKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpOworCisjZW5kaWYgLyogX19TTkRfU09DX1MzQzI0WFhfUzNDNjRYWF9JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2hhYy5jIGIvc291bmQvc29jL3NoL2hhYy5jCmluZGV4IGVhYjMxODMuLjQxZGI3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9oYWMuYworKysgYi9zb3VuZC9zb2Mvc2gvaGFjLmMKQEAgLTI2Nyw2ICsyNjcsMTAgQEAKICNkZWZpbmUgQUM5N19GTVRTCVwKIAlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBoYWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gaGFjX2h3X3BhcmFtcywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBzaDRfaGFjX2RhaVtdID0gewogewogCS5uYW1lCQkJPSAiSEFDMCIsCkBAIC0yODQsOSArMjg4LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmhhY19kYWlfb3BzLAogfSwKICNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwCiB7CkBAIC0zMDUsOSArMzA3LDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCX0sCi0JLm9wcyA9IHsKLQkJLmh3X3BhcmFtcwk9IGhhY19od19wYXJhbXMsCi0JfSwKKwkub3BzID0gJmhhY19kYWlfb3BzLAogCiB9LAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc3NpLmMgYi9zb3VuZC9zb2Mvc2gvc3NpLmMKaW5kZXggZDFlNTM5MC4uNTZmYTA4NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9zc2kuYwpAQCAtMzM2LDYgKzMzNiwxNiBAQAogCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1UyNF8zTEUgfAlcCiAJIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFICB8IFNORFJWX1BDTV9GTVRCSVRfVTMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzc2lfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IHNzaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IHNzaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAorCS5od19wYXJhbXMJPSBzc2lfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gc3NpX3NldF9zeXNjbGssCisJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKKwkuc2V0X2ZtdAk9IHNzaV9zZXRfZm10LAorfTsKKwogc3RydWN0IHNuZF9zb2NfZGFpIHNoNF9zc2lfZGFpW10gPSB7CiB7CiAJLm5hbWUJCQk9ICJTU0kwIiwKQEAgLTM1MiwxNSArMzYyLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKLQkJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAotCQkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKLQkJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKLQkJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmc3NpX2RhaV9vcHMsCiB9LAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAKIHsKQEAgLTM3OCwxNSArMzgwLDcgQEAKIAkJLmNoYW5uZWxzX21pbgk9IDIsCiAJCS5jaGFubmVsc19tYXgJPSA4LAogCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAJPSBzc2lfc3RhcnR1cCwKLQkJLnNodXRkb3duCT0gc3NpX3NodXRkb3duLAotCQkudHJpZ2dlcgk9IHNzaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zCT0gc3NpX2h3X3BhcmFtcywKLQkJLnNldF9zeXNjbGsJPSBzc2lfc2V0X3N5c2NsaywKLQkJLnNldF9jbGtkaXYJPSBzc2lfc2V0X2Nsa2RpdiwKLQkJLnNldF9mbXQJPSBzc2lfc2V0X2ZtdCwKLQl9LAorCS5vcHMgPSAmc3NpX2RhaV9vcHMsCiB9LAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCBlYzNmOGJiLi42ZTcxMGY3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTMzLDggKzEzMyw4IEBACiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIAogCS8qIHN0YXJ0dXAgdGhlIGF1ZGlvIHN1YnN5c3RlbSAqLwotCWlmIChjcHVfZGFpLT5vcHMuc3RhcnR1cCkgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMuc3RhcnR1cChzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnN0YXJ0dXApIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5zdGFydHVwKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNhbid0IG9wZW4gaW50ZXJmYWNlICVzXG4iLAogCQkJCWNwdV9kYWktPm5hbWUpOwpAQCAtMTUwLDggKzE1MCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMuc3RhcnR1cCkgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5zdGFydHVwKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnN0YXJ0dXApIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnN0YXJ0dXAoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBvcGVuIGNvZGVjICVzXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSk7CkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJY3B1X2RhaS0+Y2FwdHVyZS5hY3RpdmUgPSBjb2RlY19kYWktPmNhcHR1cmUuYWN0aXZlID0gMTsKIAljcHVfZGFpLT5hY3RpdmUgPSBjb2RlY19kYWktPmFjdGl2ZSA9IDE7CiAJY3B1X2RhaS0+cnVudGltZSA9IHJ1bnRpbWU7Ci0Jc29jZGV2LT5jb2RlYy0+YWN0aXZlKys7CisJY2FyZC0+Y29kZWMtPmFjdGl2ZSsrOwogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtMjQ3LDggKzI0Nyw4IEBACiAJCXBsYXRmb3JtLT5wY21fb3BzLT5jbG9zZShzdWJzdHJlYW0pOwogCiBwbGF0Zm9ybV9lcnI6Ci0JaWYgKGNwdV9kYWktPm9wcy5zaHV0ZG93bikKLQkJY3B1X2RhaS0+b3BzLnNodXRkb3duKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+c2h1dGRvd24pCisJCWNwdV9kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKIG91dDoKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNuZF9zb2NfY2FyZCwKIAkJCQkJCSBkZWxheWVkX3dvcmsud29yayk7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjYXJkLT5zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgaTsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKIApAQCAtMzQwLDExICszNDAsMTEgQEAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJc25kX3NvY19kYWlfZGlnaXRhbF9tdXRlKGNvZGVjX2RhaSwgMSk7CiAKLQlpZiAoY3B1X2RhaS0+b3BzLnNodXRkb3duKQotCQljcHVfZGFpLT5vcHMuc2h1dGRvd24oc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY3B1X2RhaS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0sIGNwdV9kYWkpOwogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnNodXRkb3duKQotCQljb2RlY19kYWktPm9wcy5zaHV0ZG93bihzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5zaHV0ZG93bikKKwkJY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKIAogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5zaHV0ZG93bikKIAkJbWFjaGluZS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0pOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gbWFjaGluZS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcGNtX211dGV4KTsKQEAgLTQwOCwxNiArNDA4LDE2IEBACiAJCX0KIAl9CiAKLQlpZiAoY29kZWNfZGFpLT5vcHMucHJlcGFyZSkgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5wcmVwYXJlKHN1YnN0cmVhbSwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnByZXBhcmUpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnByZXBhcmUoc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjb2RlYyBEQUkgcHJlcGFyZSBlcnJvclxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWlmIChjcHVfZGFpLT5vcHMucHJlcGFyZSkgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMucHJlcGFyZShzdWJzdHJlYW0sIGNwdV9kYWkpOworCWlmIChjcHVfZGFpLT5vcHMtPnByZXBhcmUpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5wcmVwYXJlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IGNwdSBEQUkgcHJlcGFyZSBlcnJvclxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTQ5NCw4ICs0OTQsOCBAQAogCQl9CiAJfQogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLmh3X3BhcmFtcykgewotCQlyZXQgPSBjb2RlY19kYWktPm9wcy5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19wYXJhbXMpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPmh3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywgY29kZWNfZGFpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3Qgc2V0IGNvZGVjICVzIGh3IHBhcmFtc1xuIiwKIAkJCQljb2RlY19kYWktPm5hbWUpOwpAQCAtNTAzLDggKzUwMyw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X3BhcmFtcykgewotCQlyZXQgPSBjcHVfZGFpLT5vcHMuaHdfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19wYXJhbXMpIHsKKwkJcmV0ID0gY3B1X2RhaS0+b3BzLT5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMsIGNwdV9kYWkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBpbnRlcmZhY2UgJXMgaHcgcGFyYW1zIGZhaWxlZFxuIiwKIAkJCQljcHVfZGFpLT5uYW1lKTsKQEAgLTUyNiwxMiArNTI2LDEyIEBACiAJcmV0dXJuIHJldDsKIAogcGxhdGZvcm1fZXJyOgotCWlmIChjcHVfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY3B1X2RhaS0+b3BzLmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT5od19mcmVlKQorCQljcHVfZGFpLT5vcHMtPmh3X2ZyZWUoc3Vic3RyZWFtLCBjcHVfZGFpKTsKIAogaW50ZXJmYWNlX2VycjoKLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY29kZWNfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19mcmVlKQorCQljb2RlY19kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKIGNvZGVjX2VycjoKIAlpZiAobWFjaGluZS0+b3BzICYmIG1hY2hpbmUtPm9wcy0+aHdfZnJlZSkKQEAgLTU1Myw3ICs1NTMsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IG1hY2hpbmUtPmNwdV9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBtYWNoaW5lLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCW11dGV4X2xvY2soJnBjbV9tdXRleCk7CiAKQEAgLTU3MCwxMSArNTcwLDExIEBACiAJCXBsYXRmb3JtLT5wY21fb3BzLT5od19mcmVlKHN1YnN0cmVhbSk7CiAKIAkvKiBub3cgZnJlZSBodyBwYXJhbXMgZm9yIHRoZSBEQUkncyAgKi8KLQlpZiAoY29kZWNfZGFpLT5vcHMuaHdfZnJlZSkKLQkJY29kZWNfZGFpLT5vcHMuaHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CisJaWYgKGNvZGVjX2RhaS0+b3BzLT5od19mcmVlKQorCQljb2RlY19kYWktPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0sIGNvZGVjX2RhaSk7CiAKLQlpZiAoY3B1X2RhaS0+b3BzLmh3X2ZyZWUpCi0JCWNwdV9kYWktPm9wcy5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CisJaWYgKGNwdV9kYWktPm9wcy0+aHdfZnJlZSkKKwkJY3B1X2RhaS0+b3BzLT5od19mcmVlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAKIAltdXRleF91bmxvY2soJnBjbV9tdXRleCk7CiAJcmV0dXJuIDA7CkBAIC01OTEsOCArNTkxLDggQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IG1hY2hpbmUtPmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCi0JaWYgKGNvZGVjX2RhaS0+b3BzLnRyaWdnZXIpIHsKLQkJcmV0ID0gY29kZWNfZGFpLT5vcHMudHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY29kZWNfZGFpKTsKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnRyaWdnZXIpIHsKKwkJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnRyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGNvZGVjX2RhaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC02MDMsOCArNjAzLDggQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGNwdV9kYWktPm9wcy50cmlnZ2VyKSB7Ci0JCXJldCA9IGNwdV9kYWktPm9wcy50cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBjcHVfZGFpKTsKKwlpZiAoY3B1X2RhaS0+b3BzLT50cmlnZ2VyKSB7CisJCXJldCA9IGNwdV9kYWktPm9wcy0+dHJpZ2dlcihzdWJzdHJlYW0sIGNtZCwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC02MjksNyArNjI5LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IGNhcmQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSAqY29kZWNfZGV2ID0gc29jZGV2LT5jb2RlY19kZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKIAlpbnQgaTsKIAogCS8qIER1ZSB0byB0aGUgcmVzdW1lIGJlaW5nIHNjaGVkdWxlZCBpbnRvIGEgd29ya3F1ZXVlIHdlIGNvdWxkCkBAIC02NDUsOCArNjQ1LDggQEAKIAkvKiBtdXRlIGFueSBhY3RpdmUgREFDJ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWk7Ci0JCWlmIChkYWktPm9wcy5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCQlkYWktPm9wcy5kaWdpdGFsX211dGUoZGFpLCAxKTsKKwkJaWYgKGRhaS0+b3BzLT5kaWdpdGFsX211dGUgJiYgZGFpLT5wbGF5YmFjay5hY3RpdmUpCisJCQlkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKGRhaSwgMSk7CiAJfQogCiAJLyogc3VzcGVuZCBhbGwgcGNtcyAqLwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjYXJkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlICpjb2RlY19kZXYgPSBzb2NkZXYtPmNvZGVjX2RldjsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2Uoc29jZGV2LT5kZXYpOwogCWludCBpOwogCkBAIC03NDEsOCArNzQxLDggQEAKIAkvKiB1bm11dGUgYW55IGFjdGl2ZSBEQUNzICovCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpOwotCQlpZiAoZGFpLT5vcHMuZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQotCQkJZGFpLT5vcHMuZGlnaXRhbF9tdXRlKGRhaSwgMCk7CisJCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlICYmIGRhaS0+cGxheWJhY2suYWN0aXZlKQorCQkJZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIDApOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewpAQCAtOTgyLDggKzk4Miw4IEBACiBzdGF0aWMgaW50IHNvY19uZXdfcGNtKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LAogCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluaywgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gY2FyZC0+cGxhdGZvcm07CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBkYWlfbGluay0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGRhaV9saW5rLT5jcHVfZGFpOwpAQCAtOTk4LDcgKzk5OCw3IEBACiAKIAlydGQtPmRhaSA9IGRhaV9saW5rOwogCXJ0ZC0+c29jZGV2ID0gc29jZGV2OwotCWNvZGVjX2RhaS0+Y29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWNvZGVjX2RhaS0+Y29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIGNsaWVudCBhbmQgaW50ZXJmYWNlIGh3IGNhcGFiaWxpdGllcyAqLwogCXNwcmludGYobmV3X25hbWUsICIlcyAlcy0lZCIsIGRhaV9saW5rLT5zdHJlYW1fbmFtZSwgY29kZWNfZGFpLT5uYW1lLApAQCAtMTA0OCw5ICsxMDQ4LDggQEAKIH0KIAogLyogY29kZWMgcmVnaXN0ZXIgZHVtcCAqLwotc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqYnVmKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRldmRhdGEtPmNvZGVjOwogCWludCBpLCBzdGVwID0gMSwgY291bnQgPSAwOwogCiAJaWYgKCFjb2RlYy0+cmVnX2NhY2hlX3NpemUpCkBAIC0xMDkwLDcgKzEwODksNyBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLCBidWYpOworCXJldHVybiBzb2NfY29kZWNfcmVnX3Nob3coZGV2ZGF0YS0+Y2FyZC0+Y29kZWMsIGJ1Zik7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb2RlY19yZWcsIDA0NDQsIGNvZGVjX3JlZ19zaG93LCBOVUxMKTsKQEAgLTExMDcsMTIgKzExMDYsMTAgQEAKIHsKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRldmljZSAqY2FyZF9kZXYgPSBjb2RlYy0+Y2FyZC0+ZGV2OwotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqZGV2ZGF0YSA9IGNhcmRfZGV2LT5kcml2ZXJfZGF0YTsKIAljaGFyICpidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhkZXZkYXRhLCBidWYpOworCXJldCA9IHNvY19jb2RlY19yZWdfc2hvdyhjb2RlYywgYnVmKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOwogCWtmcmVlKGJ1Zik7CkBAIC0xMzA5LDE5ICsxMzA2LDE5IEBACiAgKi8KIGludCBzbmRfc29jX25ld19wY21zKHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LCBpbnQgaWR4LCBjb25zdCBjaGFyICp4aWQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwotCWludCByZXQgPSAwLCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPmNvZGVjOworCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiAJLyogcmVnaXN0ZXIgYSBzb3VuZCBjYXJkICovCi0JY29kZWMtPmNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB4aWQsIGNvZGVjLT5vd25lciwgMCk7Ci0JaWYgKCFjb2RlYy0+Y2FyZCkgeworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpZHgsIHhpZCwgY29kZWMtPm93bmVyLCAwLCAmY29kZWMtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogY2FuJ3QgY3JlYXRlIHNvdW5kIGNhcmQgZm9yIGNvZGVjICVzXG4iLAogCQkJY29kZWMtPm5hbWUpOwogCQltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWNvZGVjLT5jYXJkLT5kZXYgPSBzb2NkZXYtPmRldjsKQEAgLTEzNTUsOCArMTM1Miw4IEBACiAgKi8KIGludCBzbmRfc29jX2luaXRfY2FyZChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBzb2NkZXYtPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDAsIGksIGFjOTcgPSAwLCBlcnIgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CkBAIC0xNDA3LDcgKzE0MDQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGNvZGVjIHN5c2ZzIGZpbGVzXG4iKTsKIAotCXNvY19pbml0X2NvZGVjX2RlYnVnZnMoc29jZGV2LT5jb2RlYyk7CisJc29jX2luaXRfY29kZWNfZGVidWdmcyhjb2RlYyk7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCiBvdXQ6CkBAIC0xNDI0LDE4ICsxNDIxLDE5IEBACiAgKi8KIHZvaWQgc25kX3NvY19mcmVlX3BjbXMoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJaW50IGk7CiAjZW5kaWYKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7Ci0Jc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhzb2NkZXYtPmNvZGVjKTsKKwlzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKICNpZmRlZiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX2RhaTsgaSsrKSB7CiAJCWNvZGVjX2RhaSA9ICZjb2RlYy0+ZGFpW2ldOwotCQlpZiAoY29kZWNfZGFpLT5hYzk3X2NvbnRyb2wgJiYgY29kZWMtPmFjOTcpIHsKKwkJaWYgKGNvZGVjX2RhaS0+YWM5N19jb250cm9sICYmIGNvZGVjLT5hYzk3ICYmCisJCSAgICBzdHJjbXAoY29kZWMtPm5hbWUsICJBQzk3IikgIT0gMCkgewogCQkJc29jX2FjOTdfZGV2X3VucmVnaXN0ZXIoY29kZWMpOwogCQkJZ290byBmcmVlX2NhcmQ7CiAJCX0KQEAgLTE0OTgsNiArMTQ5NiwzNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jbmV3KTsKIAogLyoqCisgKiBzbmRfc29jX2FkZF9jb250cm9scyAtIGFkZCBhbiBhcnJheSBvZiBjb250cm9scyB0byBhIGNvZGVjLgorICogQ29udmllbmllbmNlIGZ1bmN0aW9uIHRvIGFkZCBhIGxpc3Qgb2YgY29udHJvbHMuIE1hbnkgY29kZWNzIHdlcmUKKyAqIGR1cGxpY2F0aW5nIHRoaXMgY29kZS4KKyAqCisgKiBAY29kZWM6IGNvZGVjIHRvIGFkZCBjb250cm9scyB0bworICogQGNvbnRyb2xzOiBhcnJheSBvZiBjb250cm9scyB0byBhZGQKKyAqIEBudW1fY29udHJvbHM6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKKyAqCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgZWxzZSBlcnJvci4KKyAqLworaW50IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbHMsIGludCBudW1fY29udHJvbHMpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7CisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY29udHJvbHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbCA9ICZjb250cm9sc1tpXTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX3NvY19jbmV3KGNvbnRyb2wsIGNvZGVjLCBOVUxMKSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlczogRmFpbGVkIHRvIGFkZCAlc1xuIiwKKwkJCQljb2RlYy0+bmFtZSwgY29udHJvbC0+bmFtZSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2FkZF9jb250cm9scyk7CisKKy8qKgogICogc25kX3NvY19pbmZvX2VudW1fZG91YmxlIC0gZW51bWVyYXRlZCBkb3VibGUgbWl4ZXIgaW5mbyBjYWxsYmFjawogICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCiAgKiBAdWluZm86IGNvbnRyb2wgZWxlbWVudCBpbmZvcm1hdGlvbgpAQCAtMjAyMyw4ICsyMDUyLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAogCXVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQogewotCWlmIChkYWktPm9wcy5zZXRfc3lzY2xrKQotCQlyZXR1cm4gZGFpLT5vcHMuc2V0X3N5c2NsayhkYWksIGNsa19pZCwgZnJlcSwgZGlyKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3N5c2NsayhkYWksIGNsa19pZCwgZnJlcSwgZGlyKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA0Myw4ICsyMDcyLDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCWludCBkaXZfaWQsIGludCBkaXYpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9jbGtkaXYpCi0JCXJldHVybiBkYWktPm9wcy5zZXRfY2xrZGl2KGRhaSwgZGl2X2lkLCBkaXYpOworCWlmIChkYWktPm9wcy0+c2V0X2Nsa2RpdikKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfY2xrZGl2KGRhaSwgZGl2X2lkLCBkaXYpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDYyLDggKzIwOTEsOCBAQAogaW50IHNuZF9zb2NfZGFpX3NldF9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJaW50IHBsbF9pZCwgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3BsbCkKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9wbGwoZGFpLCBwbGxfaWQsIGZyZXFfaW4sIGZyZXFfb3V0KTsKKwlpZiAoZGFpLT5vcHMtPnNldF9wbGwpCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3BsbChkYWksIHBsbF9pZCwgZnJlcV9pbiwgZnJlcV9vdXQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDc4LDggKzIxMDcsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X2ZtdCkKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF9mbXQoZGFpLCBmbXQpOworCWlmIChkYWktPm9wcy0+c2V0X2ZtdCkKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfZm10KGRhaSwgZm10KTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA5Nyw4ICsyMTI2LDggQEAKIGludCBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cykKIHsKLQlpZiAoZGFpLT5vcHMuc2V0X3N5c2NsaykKLQkJcmV0dXJuIGRhaS0+b3BzLnNldF90ZG1fc2xvdChkYWksIG1hc2ssIHNsb3RzKTsKKwlpZiAoZGFpLT5vcHMtPnNldF9zeXNjbGspCisJCXJldHVybiBkYWktPm9wcy0+c2V0X3RkbV9zbG90KGRhaSwgbWFzaywgc2xvdHMpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTEzLDggKzIxNDIsOCBAQAogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X3RyaXN0YXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgdHJpc3RhdGUpCiB7Ci0JaWYgKGRhaS0+b3BzLnNldF9zeXNjbGspCi0JCXJldHVybiBkYWktPm9wcy5zZXRfdHJpc3RhdGUoZGFpLCB0cmlzdGF0ZSk7CisJaWYgKGRhaS0+b3BzLT5zZXRfc3lzY2xrKQorCQlyZXR1cm4gZGFpLT5vcHMtPnNldF90cmlzdGF0ZShkYWksIHRyaXN0YXRlKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjEyOSw4ICsyMTU4LDggQEAKICAqLwogaW50IHNuZF9zb2NfZGFpX2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCiB7Ci0JaWYgKGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZSkKLQkJcmV0dXJuIGRhaS0+b3BzLmRpZ2l0YWxfbXV0ZShkYWksIG11dGUpOworCWlmIChkYWktPm9wcy0+ZGlnaXRhbF9tdXRlKQorCQlyZXR1cm4gZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZShkYWksIG11dGUpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTgzLDYgKzIyMTIsOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Cit9OworCiAvKioKICAqIHNuZF9zb2NfcmVnaXN0ZXJfZGFpIC0gUmVnaXN0ZXIgYSBEQUkgd2l0aCB0aGUgQVNvQyBjb3JlCiAgKgpAQCAtMjE5Nyw2ICsyMjI5LDkgQEAKIAlpZiAoIWRhaS0+ZGV2KQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBkZXZpY2UgZm9yIERBSSAlc1xuIiwgZGFpLT5uYW1lKTsKIAorCWlmICghZGFpLT5vcHMpCisJCWRhaS0+b3BzID0gJm51bGxfZGFpX29wczsKKwogCUlOSVRfTElTVF9IRUFEKCZkYWktPmxpc3QpOwogCiAJbXV0ZXhfbG9jaygmY2xpZW50X211dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggYTJmMWRhOC4uNzM1OTAzYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTU0LDE0ICs1NCwxNSBAQAogc3RhdGljIGludCBkYXBtX3VwX3NlcVtdID0gewogCXNuZF9zb2NfZGFwbV9wcmUsIHNuZF9zb2NfZGFwbV9taWNiaWFzLCBzbmRfc29jX2RhcG1fbWljLAogCXNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsIHNuZF9zb2NfZGFwbV9kYWMsCi0Jc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fcGdhLCBzbmRfc29jX2RhcG1fYWRjLCBzbmRfc29jX2RhcG1faHAsCi0Jc25kX3NvY19kYXBtX3Nwaywgc25kX3NvY19kYXBtX3Bvc3QKKwlzbmRfc29jX2RhcG1fbWl4ZXIsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9wZ2EsCisJc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLCBzbmRfc29jX2RhcG1fcG9zdAogfTsKKwogc3RhdGljIGludCBkYXBtX2Rvd25fc2VxW10gPSB7CiAJc25kX3NvY19kYXBtX3ByZSwgc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLAotCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlciwgc25kX3NvY19kYXBtX2RhYywgc25kX3NvY19kYXBtX21pYywKLQlzbmRfc29jX2RhcG1fbWljYmlhcywgc25kX3NvY19kYXBtX211eCwgc25kX3NvY19kYXBtX3ZhbHVlX211eCwKLQlzbmRfc29jX2RhcG1fcG9zdAorCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9taXhlciwKKwlzbmRfc29jX2RhcG1fZGFjLCBzbmRfc29jX2RhcG1fbWljLCBzbmRfc29jX2RhcG1fbWljYmlhcywKKwlzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LCBzbmRfc29jX2RhcG1fcG9zdAogfTsKIAogc3RhdGljIGludCBkYXBtX3N0YXR1cyA9IDE7CkBAIC0xMDEsNyArMTAyLDggQEAKIHsKIAlzd2l0Y2ggKHctPmlkKSB7CiAJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgotCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOiB7CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOiB7CiAJCWludCB2YWw7CiAJCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPSAoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopCiAJCQl3LT5rY29udHJvbHNbaV0ucHJpdmF0ZV92YWx1ZTsKQEAgLTMyMywxNSArMzI1LDMyIEBACiAJCQlpZiAocGF0aC0+bmFtZSAhPSAoY2hhciopdy0+a2NvbnRyb2xzW2ldLm5hbWUpCiAJCQkJY29udGludWU7CiAKLQkJCS8qIGFkZCBkYXBtIGNvbnRyb2wgd2l0aCBsb25nIG5hbWUgKi8KLQkJCW5hbWVfbGVuID0gMiArIHN0cmxlbih3LT5uYW1lKQotCQkJCSsgc3RybGVuKHctPmtjb250cm9sc1tpXS5uYW1lKTsKKwkJCS8qIGFkZCBkYXBtIGNvbnRyb2wgd2l0aCBsb25nIG5hbWUuCisJCQkgKiBmb3IgZGFwbV9taXhlciB0aGlzIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQorCQkJICogbWl4ZXIgYW5kIGtjb250cm9sIG5hbWUuCisJCQkgKiBmb3IgZGFwbV9taXhlcl9uYW1lZF9jdGwgdGhpcyBpcyBzaW1wbHkgdGhlCisJCQkgKiBrY29udHJvbCBuYW1lLgorCQkJICovCisJCQluYW1lX2xlbiA9IHN0cmxlbih3LT5rY29udHJvbHNbaV0ubmFtZSkgKyAxOworCQkJaWYgKHctPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwpCisJCQkJbmFtZV9sZW4gKz0gMSArIHN0cmxlbih3LT5uYW1lKTsKKwogCQkJcGF0aC0+bG9uZ19uYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0tFUk5FTCk7CisKIAkJCWlmIChwYXRoLT5sb25nX25hbWUgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAotCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzICVzIiwKLQkJCQkgdy0+bmFtZSwgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJc3dpdGNoICh3LT5pZCkgeworCQkJZGVmYXVsdDoKKwkJCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMgJXMiLAorCQkJCQkgdy0+bmFtZSwgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJCWJyZWFrOworCQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgorCQkJCXNucHJpbnRmKHBhdGgtPmxvbmdfbmFtZSwgbmFtZV9sZW4sICIlcyIsCisJCQkJCSB3LT5rY29udHJvbHNbaV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCXBhdGgtPmxvbmdfbmFtZVtuYW1lX2xlbiAtIDFdID0gJ1wwJzsKIAogCQkJcGF0aC0+a2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJnctPmtjb250cm9sc1tpXSwgdywKQEAgLTUwMyw2ICs1MjIsMTM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkYXBtX3JlZ19ldmVudCk7CiAKIC8qCisgKiBTY2FuIGEgc2luZ2xlIERBUE0gd2lkZ2V0IGZvciBhIGNvbXBsZXRlIGF1ZGlvIHBhdGggYW5kIHVwZGF0ZSB0aGUKKyAqIHBvd2VyIHN0YXR1cyBhcHByb3ByaWF0ZWx5LgorICovCitzdGF0aWMgaW50IGRhcG1fcG93ZXJfd2lkZ2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGV2ZW50LAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3sKKwlpbnQgaW4sIG91dCwgcG93ZXJfY2hhbmdlLCBwb3dlciwgcmV0OworCisJLyogdm1pZCAtIG5vIGFjdGlvbiAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fdm1pZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBhY3RpdmUgQURDICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9hZGMgJiYgdy0+YWN0aXZlKSB7CisJCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOworCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCQl3LT5wb3dlciA9IChpbiAhPSAwKSA/IDEgOiAwOworCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBhY3RpdmUgREFDICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgdy0+YWN0aXZlKSB7CisJCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CisJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJCXctPnBvd2VyID0gKG91dCAhPSAwKSA/IDEgOiAwOworCQlkYXBtX3VwZGF0ZV9iaXRzKHcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBwcmUgYW5kIHBvc3QgZXZlbnQgd2lkZ2V0cyAqLworCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcHJlKSB7CisJCWlmICghdy0+ZXZlbnQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcG9zdCkgeworCQlpZiAoIXctPmV2ZW50KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKKwkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgeworCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWxsIG90aGVyIHdpZGdldHMgKi8KKwlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKKwlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCW91dCA9IGlzX2Nvbm5lY3RlZF9vdXRwdXRfZXAodyk7CisJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKKwlwb3dlciA9IChvdXQgIT0gMCAmJiBpbiAhPSAwKSA/IDEgOiAwOworCXBvd2VyX2NoYW5nZSA9ICh3LT5wb3dlciA9PSBwb3dlcikgPyAwIDogMTsKKwl3LT5wb3dlciA9IHBvd2VyOworCisJaWYgKCFwb3dlcl9jaGFuZ2UpCisJCXJldHVybiAwOworCisJLyogY2FsbCBhbnkgcG93ZXIgY2hhbmdlIGV2ZW50IGhhbmRsZXJzICovCisJaWYgKHctPmV2ZW50KQorCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAorCQkJIHctPnBvd2VyID8gIm9uIiA6ICJvZmYiLAorCQkJIHctPm5hbWUsIHctPmV2ZW50X2ZsYWdzKTsKKworCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLworCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgorCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcG93ZXIgZG93biBwcmUgZXZlbnQgKi8KKwlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBMb3dlciBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCisJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgIXBvd2VyKQorCQlkYXBtX3NldF9wZ2EodywgcG93ZXIpOworCisJZGFwbV91cGRhdGVfYml0cyh3KTsKKworCS8qIFJhaXNlIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KKwlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiBwb3dlcikKKwkJZGFwbV9zZXRfcGdhKHcsIHBvd2VyKTsKKworCS8qIHBvd2VyIHVwIHBvc3QgZXZlbnQgKi8KKwlpZiAocG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSkgeworCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwb3dlciBkb3duIHBvc3QgZXZlbnQgKi8KKwlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCisJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkpIHsKKwkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgogICogU2NhbiBlYWNoIGRhcG0gd2lkZ2V0IGZvciBjb21wbGV0ZSBhdWRpbyBwYXRoLgogICogQSBjb21wbGV0ZSBwYXRoIGlzIGEgcm91dGUgdGhhdCBoYXMgdmFsaWQgZW5kcG9pbnRzIGkuZS46LQogICoKQEAgLTUxNCw3ICs2NjQsNyBAQAogc3RhdGljIGludCBkYXBtX3Bvd2VyX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7Ci0JaW50IGluLCBvdXQsIGksIGMgPSAxLCAqc2VxID0gTlVMTCwgcmV0ID0gMCwgcG93ZXJfY2hhbmdlLCBwb3dlcjsKKwlpbnQgaSwgYyA9IDEsICpzZXEgPSBOVUxMLCByZXQgPSAwOwogCiAJLyogZG8gd2UgaGF2ZSBhIHNlcXVlbmNlZCBzdHJlYW0gZXZlbnQgKi8KIAlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkgewpAQCAtNTI1LDEzNSArNjc1LDIwIEBACiAJCXNlcSA9IGRhcG1fZG93bl9zZXE7CiAJfQogCi0JZm9yKGkgPSAwOyBpIDwgYzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CiAKIAkJCS8qIGlzIHdpZGdldCBpbiBzdHJlYW0gb3JkZXIgKi8KIAkJCWlmIChzZXEgJiYgc2VxW2ldICYmIHctPmlkICE9IHNlcVtpXSkKIAkJCQljb250aW51ZTsKIAotCQkJLyogdm1pZCAtIG5vIGFjdGlvbiAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV92bWlkKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBhY3RpdmUgQURDICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX2FkYyAmJiB3LT5hY3RpdmUpIHsKLQkJCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXctPnBvd2VyID0gKGluICE9IDApID8gMSA6IDA7Ci0JCQkJZGFwbV91cGRhdGVfYml0cyh3KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogYWN0aXZlIERBQyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgdy0+YWN0aXZlKSB7Ci0JCQkJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKLQkJCQlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwotCQkJCXctPnBvd2VyID0gKG91dCAhPSAwKSA/IDEgOiAwOwotCQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIHByZSBhbmQgcG9zdCBldmVudCB3aWRnZXRzICovCi0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3ByZSkgewotCQkJCWlmICghdy0+ZXZlbnQpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1VKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3Bvc3QpIHsKLQkJCQlpZiAoIXctPmV2ZW50KQotCQkJCQljb250aW51ZTsKLQotCQkJCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7Ci0JCQkJCXJldCA9IHctPmV2ZW50KHcsCi0JCQkJCQlOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7Ci0JCQkJfSBlbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApIHsKLQkJCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkJCU5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIGFsbCBvdGhlciB3aWRnZXRzICovCi0JCQlpbiA9IGlzX2Nvbm5lY3RlZF9pbnB1dF9lcCh3KTsKLQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCXBvd2VyID0gKG91dCAhPSAwICYmIGluICE9IDApID8gMSA6IDA7Ci0JCQlwb3dlcl9jaGFuZ2UgPSAody0+cG93ZXIgPT0gcG93ZXIpID8gMDogMTsKLQkJCXctPnBvd2VyID0gcG93ZXI7Ci0KLQkJCWlmICghcG93ZXJfY2hhbmdlKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBjYWxsIGFueSBwb3dlciBjaGFuZ2UgZXZlbnQgaGFuZGxlcnMgKi8KLQkJCWlmICh3LT5ldmVudCkKLQkJCQlwcl9kZWJ1ZygicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAotCQkJCQkgdy0+cG93ZXIgPyAib24iIDogIm9mZiIsCi0JCQkJCSB3LT5uYW1lLCB3LT5ldmVudF9mbGFncyk7Ci0KLQkJCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLwotCQkJaWYgKHBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpKSB7Ci0JCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQkvKiBwb3dlciBkb3duIHByZSBldmVudCAqLwotCQkJaWYgKCFwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QUkVfUE1EKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogTG93ZXIgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLwotCQkJaWYgKHctPmlkID09IHNuZF9zb2NfZGFwbV9wZ2EgJiYgIXBvd2VyKQotCQkJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7Ci0KLQkJCWRhcG1fdXBkYXRlX2JpdHModyk7Ci0KLQkJCS8qIFJhaXNlIFBHQSB2b2x1bWUgdG8gcmVkdWNlIHBvcHMgKi8KLQkJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmIHBvd2VyKQotCQkJCWRhcG1fc2V0X3BnYSh3LCBwb3dlcik7Ci0KLQkJCS8qIHBvd2VyIHVwIHBvc3QgZXZlbnQgKi8KLQkJCWlmIChwb3dlciAmJiB3LT5ldmVudCAmJgotCQkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkpIHsKLQkJCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJLyogcG93ZXIgZG93biBwb3N0IGV2ZW50ICovCi0JCQlpZiAoIXBvd2VyICYmIHctPmV2ZW50ICYmCi0JCQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgewotCQkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9CisJCQlyZXQgPSBkYXBtX3Bvd2VyX3dpZGdldChjb2RlYywgZXZlbnQsIHcpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAjaWZkZWYgREVCVUcKQEAgLTY4Nyw2ICs3MjIsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWlmICh3LT5uYW1lKSB7CiAJCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CiAJCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKQEAgLTc2MCw2ICs3OTYsNyBAQAogCWludCBmb3VuZCA9IDA7CiAKIAlpZiAod2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXIgJiYKKwkgICAgd2lkZ2V0LT5pZCAhPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsICYmCiAJICAgIHdpZGdldC0+aWQgIT0gc25kX3NvY19kYXBtX3N3aXRjaCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTc5NSw3ICs4MzIsNyBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpkZXZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGV2ZGF0YS0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CiAJaW50IGNvdW50ID0gMDsKIAljaGFyICpzdGF0ZSA9ICJub3Qgc2V0IjsKQEAgLTgxMyw2ICs4NTAsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCWlmICh3LT5uYW1lKQogCQkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlczogJXNcbiIsCiAJCQkJCXctPm5hbWUsIHctPnBvd2VyID8gIk9uIjoiT2ZmIik7CkBAIC04NzYsNyArOTE0LDcgQEAKIH0KIAogc3RhdGljIGludCBzbmRfc29jX2RhcG1fc2V0X3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JY2hhciAqcGluLCBpbnQgc3RhdHVzKQorCQkJCWNvbnN0IGNoYXIgKnBpbiwgaW50IHN0YXR1cykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIApAQCAtOTkxLDYgKzEwMjksNyBAQAogCQlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CisJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQlyZXQgPSBkYXBtX2Nvbm5lY3RfbWl4ZXIoY29kZWMsIHdzb3VyY2UsIHdzaW5rLCBwYXRoLCBjb250cm9sKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZ290byBlcnI7CkBAIC0xMDY4LDYgKzExMDcsNyBAQAogCQlzd2l0Y2gody0+aWQpIHsKIAkJY2FzZSBzbmRfc29jX2RhcG1fc3dpdGNoOgogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQkJZGFwbV9uZXdfbWl4ZXIoY29kZWMsIHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX211eDoKQEAgLTEzOTYsNiArMTQzNiw3NiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZSk7CiAKIC8qKgorICogc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCAtIEluZm8gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVpbmZvOiBjb250cm9sIGVsZW1lbnQgaW5mb3JtYXRpb24KKyAqCisgKiBDYWxsYmFjayB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGEgcGluIHN3aXRjaCBjb250cm9sLgorICovCitpbnQgc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2luZm9fcGluX3N3aXRjaCk7CisKKy8qKgorICogc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoIC0gR2V0IGluZm9ybWF0aW9uIGZvciBhIHBpbiBzd2l0Y2gKKyAqCisgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKKyAqIEB1Y29udHJvbDogVmFsdWUKKyAqLworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJY29uc3QgY2hhciAqcGluID0gKGNvbnN0IGNoYXIgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCXNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgcGluKTsKKworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2dldF9waW5fc3dpdGNoKTsKKworLyoqCisgKiBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2ggLSBTZXQgaW5mb3JtYXRpb24gZm9yIGEgcGluIHN3aXRjaAorICoKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVjb250cm9sOiBWYWx1ZQorICovCitpbnQgc25kX3NvY19kYXBtX3B1dF9waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb25zdCBjaGFyICpwaW4gPSAoY29uc3QgY2hhciAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsIHBpbik7CisJZWxzZQorCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsIHBpbik7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaCk7CisKKy8qKgogICogc25kX3NvY19kYXBtX25ld19jb250cm9sIC0gY3JlYXRlIG5ldyBkYXBtIGNvbnRyb2wKICAqIEBjb2RlYzogYXVkaW8gY29kZWMKICAqIEB3aWRnZXQ6IHdpZGdldCB0ZW1wbGF0ZQpAQCAtMTUyNyw4ICsxNjM3LDggQEAKIGludCBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsCiAJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZC0+c2V0X2JpYXNfbGV2ZWwpCkBAIC0xNTQ5LDcgKzE2NTksNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK2ludCBzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMSk7CiB9CkBAIC0xNTY0LDcgKzE2NzQsNyBAQAogICogTk9URTogc25kX3NvY19kYXBtX3N5bmMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBmb3IgREFQTSB0bwogICogZG8gYW55IHdpZGdldCBwb3dlciBzd2l0Y2hpbmcuCiAgKi8KLWludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKQogewogCXJldHVybiBzbmRfc29jX2RhcG1fc2V0X3Bpbihjb2RlYywgcGluLCAwKTsKIH0KQEAgLTE1ODQsNyArMTY5NCw3IEBACiAgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCiAgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KICAqLwotaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMCk7CiB9CkBAIC0xNTk5LDcgKzE3MDksNyBAQAogICoKICAqIFJldHVybnMgMSBmb3IgY29ubmVjdGVkIG90aGVyd2lzZSAwLgogICovCi1pbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKQoraW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKIApAQCAtMTYyMCw3ICsxNzMwLDcgQEAKICAqLwogdm9pZCBzbmRfc29jX2RhcG1fZnJlZShzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAlzbmRfc29jX2RhcG1fc3lzX3JlbW92ZShzb2NkZXYtPmRldik7CiAJZGFwbV9mcmVlX3dpZGdldHMoY29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1qYWNrLmMgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODM0NmZiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NvYy1qYWNrLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBzb2MtamFjay5jICAtLSAgQUxTQSBTb0MgamFjayBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8qKgorICogc25kX3NvY19qYWNrX25ldyAtIENyZWF0ZSBhIG5ldyBqYWNrCisgKiBAY2FyZDogIEFTb0MgY2FyZAorICogQGlkOiAgICBhbiBpZGVudGlmeWluZyBzdHJpbmcgZm9yIHRoaXMgamFjaworICogQHR5cGU6ICBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGNhbiBiZSBkZXRlY3RlZCBieQorICogICAgICAgICB0aGlzIGphY2sKKyAqIEBqYWNrOiAgc3RydWN0dXJlIHRvIHVzZSBmb3IgdGhlIGphY2sKKyAqCisgKiBDcmVhdGVzIGEgbmV3IGphY2sgb2JqZWN0LgorICoKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqIE9uIHN1Y2Nlc3MgamFjayB3aWxsIGJlIGluaXRpYWxpc2VkLgorICovCitpbnQgc25kX3NvY19qYWNrX25ldyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBjb25zdCBjaGFyICppZCwgaW50IHR5cGUsCisJCSAgICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaykKK3sKKwlqYWNrLT5jYXJkID0gY2FyZDsKKwlJTklUX0xJU1RfSEVBRCgmamFjay0+cGlucyk7CisKKwlyZXR1cm4gc25kX2phY2tfbmV3KGNhcmQtPmNvZGVjLT5jYXJkLCBpZCwgdHlwZSwgJmphY2stPmphY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX25ldyk7CisKKy8qKgorICogc25kX3NvY19qYWNrX3JlcG9ydCAtIFJlcG9ydCB0aGUgY3VycmVudCBzdGF0dXMgZm9yIGEgamFjaworICoKKyAqIEBqYWNrOiAgIHRoZSBqYWNrCisgKiBAc3RhdHVzOiBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGFyZSBjdXJyZW50bHkgZGV0ZWN0ZWQuCisgKiBAbWFzazogICBhIGJpdG1hc2sgb2YgZW51bSBzbmRfamFja190eXBlIHZhbHVlcyB0aGF0IGJlaW5nIHJlcG9ydGVkLgorICoKKyAqIElmIGNvbmZpZ3VyZWQgdXNpbmcgc25kX3NvY19qYWNrX2FkZF9waW5zKCkgdGhlbiB0aGUgYXNzb2NpYXRlZAorICogREFQTSBwaW5zIHdpbGwgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhcHByb3ByaWF0ZSBhbmQgREFQTQorICogc3luY2hyb25pc2VkLgorICoKKyAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gdXNlcyBtdXRleGVzIGFuZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gYQorICogY29udGV4dCB3aGljaCBjYW4gc2xlZXAgKHN1Y2ggYXMgYSB3b3JrcXVldWUpLgorICovCit2b2lkIHNuZF9zb2NfamFja19yZXBvcnQoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IHN0YXR1cywgaW50IG1hc2spCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gamFjay0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfamFja19waW4gKnBpbjsKKwlpbnQgZW5hYmxlOworCWludCBvbGRzdGF0dXM7CisKKwlpZiAoIWphY2spIHsKKwkJV0FSTl9PTl9PTkNFKCFqYWNrKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisKKwlvbGRzdGF0dXMgPSBqYWNrLT5zdGF0dXM7CisKKwlqYWNrLT5zdGF0dXMgJj0gfm1hc2s7CisJamFjay0+c3RhdHVzIHw9IHN0YXR1czsKKworCS8qIFRoZSBEQVBNIHN5bmMgaXMgZXhwZW5zaXZlIGVub3VnaCB0byBiZSB3b3J0aCBza2lwcGluZyAqLworCWlmIChqYWNrLT5zdGF0dXMgPT0gb2xkc3RhdHVzKQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmamFjay0+cGlucywgbGlzdCkgeworCQllbmFibGUgPSBwaW4tPm1hc2sgJiBzdGF0dXM7CisKKwkJaWYgKHBpbi0+aW52ZXJ0KQorCQkJZW5hYmxlID0gIWVuYWJsZTsKKworCQlpZiAoZW5hYmxlKQorCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsIHBpbi0+cGluKTsKKwkJZWxzZQorCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCBwaW4tPnBpbik7CisJfQorCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJc25kX2phY2tfcmVwb3J0KGphY2stPmphY2ssIHN0YXR1cyk7CisKK291dDoKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfcmVwb3J0KTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfYWRkX3BpbnMgLSBBc3NvY2lhdGUgREFQTSBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogTnVtYmVyIG9mIHBpbnMKKyAqIEBwaW5zOiAgQXJyYXkgb2YgcGlucworICoKKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHRoZSBEQVBNIHBpbnMgc3BlY2lmaWVkIGluIHRoZQorICogcGlucyBhcnJheSB3aWxsIGhhdmUgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY3VycmVudAorICogc3RhdGUgb2YgdGhlIGphY2sgd2hlbmV2ZXIgdGhlIGphY2sgc3RhdHVzIGlzIHVwZGF0ZWQuCisgKi8KK2ludCBzbmRfc29jX2phY2tfYWRkX3BpbnMoc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJICBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAqcGlucykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghcGluc1tpXS5waW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTm8gbmFtZSBmb3IgcGluICVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICghcGluc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vIG1hc2sgZm9yIHBpbiAlZCAoJXMpXG4iLCBpLAorCQkJICAgICAgIHBpbnNbaV0ucGluKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBpbnNbaV0ubGlzdCk7CisJCWxpc3RfYWRkKCYocGluc1tpXS5saXN0KSwgJmphY2stPnBpbnMpOworCX0KKworCS8qIFVwZGF0ZSB0byByZWZsZWN0IHRoZSBsYXN0IHJlcG9ydGVkIHN0YXR1czsgY2FubmVkIGphY2sKKwkgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpa2VseSB0byBzZXQgdGhlaXIgc3RhdGUgYmVmb3JlIHRoZQorCSAqIGNhcmQgaGFzIGFuIG9wcG9ydHVuaXR5IHRvIGFzc29jaWF0ZSBwaW5zLgorCSAqLworCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfamFja19hZGRfcGlucyk7CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorLyogZ3BpbyBkZXRlY3QgKi8KK3N0YXRpYyB2b2lkIHNuZF9zb2NfamFja19ncGlvX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW8pCit7CisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjayA9IGdwaW8tPmphY2s7CisJaW50IGVuYWJsZTsKKwlpbnQgcmVwb3J0OworCisJaWYgKGdwaW8tPmRlYm91bmNlX3RpbWUgPiAwKQorCQltZGVsYXkoZ3Bpby0+ZGVib3VuY2VfdGltZSk7CisKKwllbmFibGUgPSBncGlvX2dldF92YWx1ZShncGlvLT5ncGlvKTsKKwlpZiAoZ3Bpby0+aW52ZXJ0KQorCQllbmFibGUgPSAhZW5hYmxlOworCisJaWYgKGVuYWJsZSkKKwkJcmVwb3J0ID0gZ3Bpby0+cmVwb3J0OworCWVsc2UKKwkJcmVwb3J0ID0gMDsKKworCXNuZF9zb2NfamFja19yZXBvcnQoamFjaywgcmVwb3J0LCBncGlvLT5yZXBvcnQpOworfQorCisvKiBpcnEgaGFuZGxlciBmb3IgZ3BpbyBwaW4gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW8gPSBkYXRhOworCisJc2NoZWR1bGVfd29yaygmZ3Bpby0+d29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIGdwaW8gd29yayAqLworc3RhdGljIHZvaWQgZ3Bpb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW87CisKKwlncGlvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2phY2tfZ3Bpbywgd29yayk7CisJc25kX3NvY19qYWNrX2dwaW9fZGV0ZWN0KGdwaW8pOworfQorCisvKioKKyAqIHNuZF9zb2NfamFja19hZGRfZ3Bpb3MgLSBBc3NvY2lhdGUgR1BJTyBwaW5zIHdpdGggYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBpbnMKKyAqIEBncGlvczogYXJyYXkgb2YgZ3BpbyBwaW5zCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlcXVlc3QgZ3Bpbywgc2V0IGRhdGEgZGlyZWN0aW9uIGFuZCByZXF1ZXN0IGlycQorICogZm9yIGVhY2ggZ3BpbyBpbiB0aGUgYXJyYXkuCisgKi8KK2ludCBzbmRfc29jX2phY2tfYWRkX2dwaW9zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCXN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyAqZ3Bpb3MpCit7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghZ3Bpb19pc192YWxpZChncGlvc1tpXS5ncGlvKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGdwaW8gJWRcbiIsCisJCQkJZ3Bpb3NbaV0uZ3Bpbyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bmRvOworCQl9CisJCWlmICghZ3Bpb3NbaV0ubmFtZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJObyBuYW1lIGZvciBncGlvICVkXG4iLAorCQkJCWdwaW9zW2ldLmdwaW8pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gdW5kbzsKKwkJfQorCisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvc1tpXS5ncGlvLCBncGlvc1tpXS5uYW1lKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5kbzsKKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvc1tpXS5ncGlvKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9zW2ldLmdwaW8pLAorCQkJCWdwaW9faGFuZGxlciwKKwkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJamFjay0+Y2FyZC0+ZGV2LT5kcml2ZXItPm5hbWUsCisJCQkJJmdwaW9zW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCUlOSVRfV09SSygmZ3Bpb3NbaV0ud29yaywgZ3Bpb193b3JrKTsKKwkJZ3Bpb3NbaV0uamFjayA9IGphY2s7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlncGlvX2ZyZWUoZ3Bpb3NbaV0uZ3Bpbyk7Cit1bmRvOgorCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKGphY2ssIGksIGdwaW9zKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2phY2tfYWRkX2dwaW9zKTsKKworLyoqCisgKiBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyAtIFJlbGVhc2UgR1BJTyBwaW5zJyByZXNvdXJjZXMgb2YgYW4gQVNvQyBqYWNrCisgKgorICogQGphY2s6ICBBU29DIGphY2sKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBpbnMKKyAqIEBncGlvczogYXJyYXkgb2YgZ3BpbyBwaW5zCisgKgorICogUmVsZWFzZSBncGlvIGFuZCBpcnEgcmVzb3VyY2VzIGZvciBncGlvIHBpbnMgYXNzb2NpYXRlZCB3aXRoIGFuIEFTb0MgamFjay4KKyAqLwordm9pZCBzbmRfc29jX2phY2tfZnJlZV9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3Bpb3NbaV0uZ3BpbyksICZncGlvc1tpXSk7CisJCWdwaW9fZnJlZShncGlvc1tpXS5ncGlvKTsKKwkJZ3Bpb3NbaV0uamFjayA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MpOworI2VuZGlmCS8qIENPTkZJR19HUElPTElCICovCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKaW5kZXggZjg3OTMzZS4uNTc0YWY1NiAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvYW1kNzkzMC5jCisrKyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwpAQCAtOTU0LDcgKzk1NCw4IEBACiAJYW1kLT5yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzBdLCAwLAogCQkJICAgICAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVswXSksICJhbWQ3OTMwIik7CiAJaWYgKCFhbWQtPnJlZ3MpIHsKLQkJc25kX3ByaW50aygiYW1kNzkzMC0lZDogVW5hYmxlIHRvIG1hcCBjaGlwIHJlZ2lzdGVycy5cbiIsIGRldik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJhbWQ3OTMwLSVkOiBVbmFibGUgdG8gbWFwIGNoaXAgcmVnaXN0ZXJzLlxuIiwgZGV2KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC05NjIsNyArOTYzLDcgQEAKIAogCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF9hbWQ3OTMwX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgImFtZDc5MzAiLCBhbWQpKSB7Ci0JCXNuZF9wcmludGsoImFtZDc5MzAtJWQ6IFVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYW1kNzkzMC0lZDogVW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLAogCQkJICAgZGV2LCBpcnEpOwogCQlzbmRfYW1kNzkzMF9mcmVlKGFtZCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xMDE4LDkgKzEwMTksMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZfbnVtXSwgaWRbZGV2X251bV0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2X251bV0sIGlkW2Rldl9udW1dLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBTUQ3OTMwIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBBTUQ3OTMwIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IDQxYzM4NzUuLjdkOTNmYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC0xNTYzLDYgKzE1NjMsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcDsKKwlpbnQgZXJyOwogCiAJKnJjYXJkID0gTlVMTDsKIApAQCAtMTU3NCwxMCArMTU3NSwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NzNDIzMSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NzNDIzMSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDUzQyMzEiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiU3VuIENTNDIzMSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvZGJyaS5jIGIvc291bmQvc3BhcmMvZGJyaS5jCmluZGV4IDIzZWQ2ZjAuLmFmOTVmZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2RicmkuYworKysgYi9zb3VuZC9zcGFyYy9kYnJpLmMKQEAgLTI2MTIsMTAgKzI2MTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9kYnJpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZGJyaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJEQlJJIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIlN1biBEQlJJIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGkvYXQ3M2MyMTMuYyBiL3NvdW5kL3NwaS9hdDczYzIxMy5jCmluZGV4IDA5ODAyZTguLjRjN2IwNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwaS9hdDczYzIxMy5jCisrKyBiL3NvdW5kL3NwaS9hdDczYzIxMy5jCkBAIC05NjUsMTIgKzk2NSwxMSBAQAogCQlyZXR1cm4gUFRSX0VSUihib2FyZC0+ZGFjX2Nsayk7CiAJfQogCi0JcmV0dmFsID0gLUVOT01FTTsKLQogCS8qIEFsbG9jYXRlICJjYXJkIiB1c2luZyBzb21lIHVudXNlZCBpZGVudGlmaWVycy4gKi8KIAlzbnByaW50ZihpZCwgc2l6ZW9mIGlkLCAiYXQ3M2MyMTNfJWQiLCBib2FyZC0+c3NjX2lkKTsKLQljYXJkID0gc25kX2NhcmRfbmV3KC0xLCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX2F0NzNjMjEzKSk7Ci0JaWYgKCFjYXJkKQorCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgaWQsIFRISVNfTU9EVUxFLAorCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9hdDczYzIxMyksICZjYXJkKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CiAKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwppbmRleCAwYTUzOTE0Li5mZjBiMmE4IDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwpAQCAtMjQsMjUgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImVtdXhfdm9pY2UuaCIKIAotLyoKLSAqIG9wZW4gdGhlIGh3ZGVwIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1zbmRfZW11eF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogY2xvc2UgdGhlIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1zbmRfZW11eF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogCiAjZGVmaW5lIFRNUF9DTElFTlRfSUQJMHgxMDAxCiAKQEAgLTE0Niw4ICsxMjcsNiBAQAogCWVtdS0+aHdkZXAgPSBodzsKIAlzdHJjcHkoaHctPm5hbWUsIFNORFJWX0VNVVhfSFdERVBfTkFNRSk7CiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfRU1VWF9XQVZFVEFCTEU7Ci0JaHctPm9wcy5vcGVuID0gc25kX2VtdXhfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfZW11eF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuaW9jdGwgPSBzbmRfZW11eF9od2RlcF9pb2N0bDsKIAlody0+ZXhjbHVzaXZlID0gMTsKIAlody0+cHJpdmF0ZV9kYXRhID0gZW11OwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCmluZGV4IDVjNDdiNmMuLjg3ZTQyMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXAgPSBzbmRfZW11eF9jcmVhdGVfcG9ydChlbXUsIHRtcG5hbWUsIDMyLAogCQkJCSAxLCAmY2FsbGJhY2spOwogCWlmIChwID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygiY2FuJ3QgY3JlYXRlIHBvcnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CiAJCXNuZF9lbXV4X2RlY19jb3VudChlbXUpOwogCQltdXRleF91bmxvY2soJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYwppbmRleCAzMzVhYTJjLi5jYTVmN2VmIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCkBAIC03NCwxNSArNzQsMTUgQEAKIAllbXUtPmNsaWVudCA9IHNuZF9zZXFfY3JlYXRlX2tlcm5lbF9jbGllbnQoY2FyZCwgaW5kZXgsCiAJCQkJCQkgICAiJXMgV2F2ZVRhYmxlIiwgZW11LT5uYW1lKTsKIAlpZiAoZW11LT5jbGllbnQgPCAwKSB7Ci0JCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBjbGllbnRcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgY2xpZW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGVtdS0+bnVtX3BvcnRzIDwgMCkgewotCQlzbmRfcHJpbnRrKCJzZXFwb3J0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInNlcXBvcnRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cbiIpOwogCQllbXUtPm51bV9wb3J0cyA9IDE7CiAJfSBlbHNlIGlmIChlbXUtPm51bV9wb3J0cyA+PSBTTkRSVl9FTVVYX01BWF9QT1JUUykgewotCQlzbmRfcHJpbnRrKCJ0b28gbWFueSBwb3J0cy4iCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJ0b28gbWFueSBwb3J0cy4iCiAJCQkgICAibGltaXRlZCBtYXguIHBvcnRzICVkXG4iLCBTTkRSVl9FTVVYX01BWF9QT1JUUyk7CiAJCWVtdS0+bnVtX3BvcnRzID0gU05EUlZfRU1VWF9NQVhfUE9SVFM7CiAJfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCXAgPSBzbmRfZW11eF9jcmVhdGVfcG9ydChlbXUsIHRtcG5hbWUsIE1JRElfQ0hBTk5FTFMsCiAJCQkJCSAwLCAmcGluZm8pOwogCQlpZiAocCA9PSBOVUxMKSB7Ci0JCQlzbmRfcHJpbnRrKCJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBjcmVhdGUgcG9ydFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCkBAIC0xNDcsMTIgKzE0NywxMiBAQAogCiAJLyogQWxsb2NhdGUgc3RydWN0dXJlcyBmb3IgdGhpcyBjaGFubmVsICovCiAJaWYgKChwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlzbmRfcHJpbnRrKCJubyBtZW1vcnlcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcC0+Y2hzZXQuY2hhbm5lbHMgPSBrY2FsbG9jKG1heF9jaGFubmVscywgc2l6ZW9mKHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHAtPmNoc2V0LmNoYW5uZWxzID09IE5VTEwpIHsKLQkJc25kX3ByaW50aygibm8gbWVtb3J5XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5XG4iKTsKIAkJa2ZyZWUocCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTM3NiwxMiArMzc2LDEyIEBACiAJCQlnb3RvIF9fZXJyb3I7CiAJCX0KIAkJZW11LT52bWlkaVtpXSA9IHJtaWRpOwotCQkvL3NuZF9wcmludGsoInZpcm1pZGkgJWQgb2tcbiIsIGkpOworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgInZpcm1pZGkgJWQgb2tcbiIsIGkpOyAqLwogCX0KIAlyZXR1cm4gMDsKIAogX19lcnJvcjoKLQkvL3NuZF9wcmludGsoImVycm9yIGluaXQuLlxuIik7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcnJvciBpbml0Li5cbiIpOyAqLwogCXNuZF9lbXV4X2RlbGV0ZV92aXJtaWRpKGVtdSk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCmluZGV4IDJjYzZmNmYuLjNlOTIxYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCkBAIC05NTYsNyArOTU2LDggQEAKIAlpZiAoZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID09IFNORFJWX0VNVVhfU1RfT0ZGKQogCQllbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPSBTTkRSVl9FTVVYX1NUX0xPQ0tFRDsKIAllbHNlCi0JCXNuZF9wcmludGsoImludmFsaWQgdm9pY2UgZm9yIGxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgImludmFsaWQgdm9pY2UgZm9yIGxvY2sgJWQgKHN0YXRlID0gJXgpXG4iLAogCQkJICAgdm9pY2UsIGVtdS0+dm9pY2VzW3ZvaWNlXS5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW11LT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CkBAIC05NzMsNyArOTc0LDggQEAKIAlpZiAoZW11LT52b2ljZXNbdm9pY2VdLnN0YXRlID09IFNORFJWX0VNVVhfU1RfTE9DS0VEKQogCQllbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUgPSBTTkRSVl9FTVVYX1NUX09GRjsKIAllbHNlCi0JCXNuZF9wcmludGsoImludmFsaWQgdm9pY2UgZm9yIHVubG9jayAlZCAoc3RhdGUgPSAleClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiaW52YWxpZCB2b2ljZSBmb3IgdW5sb2NrICVkIChzdGF0ZSA9ICV4KVxuIiwKIAkJCSAgIHZvaWNlLCBlbXUtPnZvaWNlc1t2b2ljZV0uc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVtdS0+dm9pY2VfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYyBiL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKaW5kZXggMzZkNTNiZC4uNjNjOGY0NSAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlpbnQgIHJjOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHBhdGNoKSkgewotCQlzbmRfcHJpbnRrKCJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwYXRjaCByZWNvcmQgdG9vIHNtYWxsICVsZFxuIiwgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXRjaCwgZGF0YSwgc2l6ZW9mKHBhdGNoKSkpCkBAIC0xNDMsMTUgKzE0MywxNiBAQAogCWRhdGEgKz0gc2l6ZW9mKHBhdGNoKTsKIAogCWlmIChwYXRjaC5rZXkgIT0gU05EUlZfT1NTX1NPVU5ERk9OVF9QQVRDSCkgewotCQlzbmRfcHJpbnRrKCInVGhlIHdyb25nIGtpbmQgb2YgcGF0Y2gnICV4XG4iLCBwYXRjaC5rZXkpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJUaGUgd3Jvbmcga2luZCBvZiBwYXRjaCAleFxuIiwgcGF0Y2gua2V5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3VudCA8IHBhdGNoLmxlbikgewotCQlzbmRfcHJpbnRrKCJQYXRjaCB0b28gc2hvcnQgJWxkLCBuZWVkICVkXG4iLCBjb3VudCwgcGF0Y2gubGVuKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiUGF0Y2ggdG9vIHNob3J0ICVsZCwgbmVlZCAlZFxuIiwKKwkJCSAgIGNvdW50LCBwYXRjaC5sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHBhdGNoLmxlbiA8IDApIHsKLQkJc25kX3ByaW50aygicG9vciBsZW5ndGggJWRcbiIsIHBhdGNoLmxlbik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBvb3IgbGVuZ3RoICVkXG4iLCBwYXRjaC5sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5NSw3ICsxOTYsOCBAQAogCWNhc2UgU05EUlZfU0ZOVF9SRU1PVkVfSU5GTzoKIAkJLyogcGF0Y2ggbXVzdCBiZSBvcGVuZWQgKi8KIAkJaWYgKCFzZmxpc3QtPmN1cnJzZikgewotCQkJc25kX3ByaW50aygic291bmRmb250OiByZW1vdmVfaW5mbzogcGF0Y2ggbm90IG9wZW5lZFxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzb3VuZGZvbnQ6IHJlbW92ZV9pbmZvOiAiCisJCQkJICAgInBhdGNoIG5vdCBvcGVuZWRcbiIpOwogCQkJcmMgPSAtRUlOVkFMOwogCQl9IGVsc2UgewogCQkJaW50IGJhbmssIGluc3RyOwpAQCAtNTMxLDcgKzUzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKGhkcikpIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgZXJyb3I6IGludmFsaWQgcGF0Y2ggem9uZSBsZW5ndGhcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBlcnJvcjogaW52YWxpZCBwYXRjaCB6b25lIGxlbmd0aFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIqKSZoZHIsIGRhdGEsIHNpemVvZihoZHIpKSkKQEAgLTU0MSwxMiArNTQzLDE0IEBACiAJY291bnQgLT0gc2l6ZW9mKGhkcik7CiAKIAlpZiAoaGRyLm52b2ljZXMgPD0gMCB8fCBoZHIubnZvaWNlcyA+PSAxMDApIHsKLQkJcHJpbnRrKCJTb3VuZGZvbnQgZXJyb3I6IElsbGVnYWwgdm9pY2UgbnVtYmVyICVkXG4iLCBoZHIubnZvaWNlcyk7CisJCXByaW50ayhLRVJOX0VSUiAiU291bmRmb250IGVycm9yOiBJbGxlZ2FsIHZvaWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIGhkci5udm9pY2VzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNvdW50IDwgKGxvbmcpc2l6ZW9mKHN0cnVjdCBzb3VuZGZvbnRfdm9pY2VfaW5mbykgKiBoZHIubnZvaWNlcykgewotCQlwcmludGsoIlNvdW5kZm9udCBFcnJvcjogcGF0Y2ggbGVuZ3RoKCVsZCkgaXMgc21hbGxlciB0aGFuIG52b2ljZXMoJWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIlNvdW5kZm9udCBFcnJvcjogIgorCQkgICAgICAgInBhdGNoIGxlbmd0aCglbGQpIGlzIHNtYWxsZXIgdGhhbiBudm9pY2VzKCVkKVxuIiwKIAkJICAgICAgIGNvdW50LCBoZHIubnZvaWNlcyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTk1Miw3ICs5NTYsNyBAQAogCWludCByYzsKIAogCWlmIChjb3VudCA8IChsb25nKXNpemVvZihwYXRjaCkpIHsKLQkJc25kX3ByaW50aygicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGF0Y2ggcmVjb3JkIHRvbyBzbWFsbCAlbGRcbiIsIGNvdW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjb3B5X2Zyb21fdXNlcigmcGF0Y2gsIGRhdGEsIHNpemVvZihwYXRjaCkpKQpAQCAtMTAzNCw3ICsxMDM4LDggQEAKIAkvKiBwYW5uaW5nIHBvc2l0aW9uOyAtMTI4IC0gMTI3ID0+IDAtMTI3ICovCiAJem9uZS0+di5wYW4gPSAocGF0Y2gucGFubmluZyArIDEyOCkgLyAyOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJndXM6IGJhc2VmcnE9JWQgKG9mcz0lZCkgcm9vdD0lZCx0dW5lPSVkLCByYW5nZTolZC0lZFxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgImd1czogYmFzZWZycT0lZCAob2ZzPSVkKSByb290PSVkLHR1bmU9JWQsIHJhbmdlOiVkLSVkXG4iLAogCQkgICAoaW50KXBhdGNoLmJhc2VfZnJlcSwgem9uZS0+di5yYXRlX29mZnNldCwKIAkJICAgem9uZS0+di5yb290LCB6b25lLT52LnR1bmUsIHpvbmUtPnYubG93LCB6b25lLT52LmhpZ2gpOwogI2VuZGlmCkBAIC0xMDY4LDcgKzEwNzMsOCBAQAogCQl6b25lLT52LnBhcm0udm9scmVsZWFzZSA9IDB4ODAwMCB8IHNuZF9zZl9jYWxjX3Bhcm1fZGVjYXkocmVsZWFzZSk7CiAJCXpvbmUtPnYuYXR0ZW51YXRpb24gPSBjYWxjX2d1c19hdHRlbnVhdGlvbihwYXRjaC5lbnZfb2Zmc2V0WzBdKTsKICNpZiAwCi0JCXNuZF9wcmludGsoImd1czogYXRraGxkPSV4LCBkY3lzdXM9JXgsIHZvbHJlbD0leCwgYXR0PSVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJndXM6IGF0a2hsZD0leCwgZGN5c3VzPSV4LCB2b2xyZWw9JXgsIGF0dD0lZFxuIiwKIAkJCSAgIHpvbmUtPnYucGFybS52b2xhdGtobGQsCiAJCQkgICB6b25lLT52LnBhcm0udm9sZGN5c3VzLAogCQkJICAgem9uZS0+di5wYXJtLnZvbHJlbGVhc2UsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvS2NvbmZpZyBiL3NvdW5kL3VzYi9LY29uZmlnCmluZGV4IDRmMGVhYzkuLjUyM2FlYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9LY29uZmlnCisrKyBiL3NvdW5kL3VzYi9LY29uZmlnCkBAIC00OCw3ICs0OCwxMCBAQAogCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBLb3JlIENvbnRyb2xsZXIKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgS29yZSBDb250cm9sbGVyIDIKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gS29udHJvbCAxCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIDQgREoKIAkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gOCBESgorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBHdWl0YXIgUmlnIFNlc3Npb24gSS9PCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEd1aXRhciBSaWcgbW9iaWxlCiAKIAkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICAgd2lsbCBiZSBjYWxsZWQgc25kLXVzYi1jYWlhcS4KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKaW5kZXggYjNhNjAzMy4uMDhkNTFlMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogCWRldi0+b3V0cHV0X3BhbmljID0gMDsKIAlkZXYtPmZpcnN0X3BhY2tldCA9IDE7CiAJZGV2LT5zdHJlYW1pbmcgPSAxOworCWRldi0+d2FybmVkID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBOX1VSQlM7IGkrKykgewogCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmRhdGFfdXJic19pbltpXSwgR0ZQX0FUT01JQyk7CkBAIC0zNzYsNiArMzc3LDkgQEAKIAogCQlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IGRldi0+bl9zdHJlYW1zOyBzdHJlYW0rKywgaSsrKSB7CiAJCQlzdWIgPSBkZXYtPnN1Yl9jYXB0dXJlW3N0cmVhbV07CisJCQlpZiAoZGV2LT5pbnB1dF9wYW5pYykKKwkJCQl1c2JfYnVmW2ldID0gMDsKKwogCQkJaWYgKHN1YikgewogCQkJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3ViLT5ydW50aW1lOwogCQkJCWNoYXIgKmF1ZGlvX2J1ZiA9IHJ0LT5kbWFfYXJlYTsKQEAgLTM5Nyw2ICs0MDEsOSBAQAogCWlmICghZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybjsKIAorCWlmIChpc28tPmFjdHVhbF9sZW5ndGggPCBkZXYtPmJwcCkKKwkJcmV0dXJuOworCiAJc3dpdGNoIChkZXYtPnNwZWMuZGF0YV9hbGlnbm1lbnQpIHsKIAljYXNlIDA6CiAJCXJlYWRfaW5fdXJiX21vZGUwKGRldiwgdXJiLCBpc28pOwpAQCAtNDA2LDEwICs0MTMsMTEgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpIHsKKwlpZiAoKGRldi0+aW5wdXRfcGFuaWMgfHwgZGV2LT5vdXRwdXRfcGFuaWMpICYmICFkZXYtPndhcm5lZCkgewogCQlkZWJ1Zygic3RyZWFtaW5nIGVycm9yIGRldGVjdGVkICVzICVzXG4iLCAKIAkJCQlkZXYtPmlucHV0X3BhbmljID8gIihpbnB1dCkiIDogIiIsCiAJCQkJZGV2LT5vdXRwdXRfcGFuaWMgPyAiKG91dHB1dCkiIDogIiIpOworCQlkZXYtPndhcm5lZCA9IDE7CiAJfQogfQogCkBAIC02MzgsOSArNjQ2LDEwIEBACiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BSzEpOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfUklHS09OVFJPTDMpOgogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfU0VTU0lPTklPKToKLQkJZGV2LT5zYW1wbGVyYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84ODIwMDsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0dVSVRBUlJJR01PQklMRSk6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfMTkyMDAwOwotCQlicmVhazsKKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CiAJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESik6CiAJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODgyMDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1jb250cm9sLmMKaW5kZXggY2NkNzYzZC4uZTkyYzJiYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWNvbnRyb2wuYworKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtY29udHJvbC5jCkBAIC0zOSwxMiArMzksMTIgQEAKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gY2FpYXFkZXYoY2hpcC0+Y2FyZCk7CiAJaW50IHBvcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCWludCBpc19pbnR2YWwgPSBwb3MgJiBDTlRfSU5UVkFMOworCXVuc2lnbmVkIGludCBpZCA9IGRldi0+Y2hpcC51c2JfaWQ7CiAKIAl1aW5mby0+Y291bnQgPSAxOwogCXBvcyAmPSB+Q05UX0lOVFZBTDsKIAotCWlmIChkZXYtPmNoaXAudXNiX2lkID09Ci0JCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPOERKKQorCWlmIChpZCA9PSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESikKIAkJJiYgKHBvcyA9PSAwKSkgewogCQkvKiBjdXJyZW50IGlucHV0IG1vZGUgb2YgQThESiAqLwogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKQEAgLTUzLDYgKzUzLDE1IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmIChpZCA9PSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESikKKwkJJiYgKHBvcyA9PSAwKSkgeworCQkvKiBjdXJyZW50IGlucHV0IG1vZGUgb2YgQTRESiAqLworCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwkJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGlzX2ludHZhbCkgewogCQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAkJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKQEAgLTczLDYgKzgyLDE0IEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAorCWlmIChkZXYtPmNoaXAudXNiX2lkID09CisJCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKSkgeworCQkvKiBBNERKIGhhcyBvbmx5IG9uZSBjb250cm9sICovCisJCS8qIGRvIG5vdCBleHBvc2UgaGFyZHdhcmUgaW5wdXQgbW9kZSAwICovCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGV2LT5jb250cm9sX3N0YXRlWzBdIC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHBvcyAmIENOVF9JTlRWQUwpCiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdCiAJCQk9IGRldi0+Y29udHJvbF9zdGF0ZVtwb3MgJiB+Q05UX0lOVFZBTF07CkBAIC05MCwxMCArMTA3LDIwIEBACiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IGNhaWFxZGV2KGNoaXAtPmNhcmQpOwogCWludCBwb3MgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAorCWlmIChkZXYtPmNoaXAudXNiX2lkID09CisJCVVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX0FVRElPNERKKSkgeworCQkvKiBBNERKIGhhcyBvbmx5IG9uZSBjb250cm9sICovCisJCS8qIGRvIG5vdCBleHBvc2UgaGFyZHdhcmUgaW5wdXQgbW9kZSAwICovCisJCWRldi0+Y29udHJvbF9zdGF0ZVswXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICsgMTsKKwkJc25kX3VzYl9jYWlhcV9zZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLAorCQkJCWRldi0+Y29udHJvbF9zdGF0ZSwgc2l6ZW9mKGRldi0+Y29udHJvbF9zdGF0ZSkpOworCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAocG9zICYgQ05UX0lOVFZBTCkgewogCQlkZXYtPmNvbnRyb2xfc3RhdGVbcG9zICYgfkNOVF9JTlRWQUxdCiAJCQk9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfRElNTV9MRURTLAorCQlzbmRfdXNiX2NhaWFxX3NlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfV1JJVEVfSU8sCiAJCQkJZGV2LT5jb250cm9sX3N0YXRlLCBzaXplb2YoZGV2LT5jb250cm9sX3N0YXRlKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQpAQCAtMjQzLDEwICsyNzAsMTMgQEAKIAl7ICJHTkQgbGlmdCBmb3IgVEMgVmlueWwgbW9kZSIsIAkyNCArIDAgCQl9LAogCXsgIkdORCBsaWZ0IGZvciBUQyBDRC9MaW5lIG1vZGUiLCAJMjQgKyAxIAkJfSwKIAl7ICJHTkQgbGlmdCBmb3IgcGhvbm8gbW9kZSIsIAkJMjQgKyAyIAkJfSwKLQl7ICJHTkQgbGlmdCBmb3IgVEMgVmlueWwgbW9kZSIsIAkyNCArIDMgCQl9LAogCXsgIlNvZnR3YXJlIGxvY2siLCAJCQk0MCAJCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2FpYXFfY29udHJvbGxlciBhNGRqX2NvbnRyb2xsZXJbXSA9IHsKKwl7ICJDdXJyZW50IGlucHV0IG1vZGUiLAkwIHwgQ05UX0lOVFZBTCAJfQorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRkX2NvbnRyb2xzKHN0cnVjdCBjYWlhcV9jb250cm9sbGVyICpjLCBpbnQgbnVtLAogCQkJCSAgc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKIHsKQEAgLTI5NSw2ICszMjUsMTAgQEAKIAkJcmV0ID0gYWRkX2NvbnRyb2xzKGE4ZGpfY29udHJvbGxlciwKIAkJCUFSUkFZX1NJWkUoYThkal9jb250cm9sbGVyKSwgZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzRESik6CisJCXJldCA9IGFkZF9jb250cm9scyhhNGRqX2NvbnRyb2xsZXIsCisJCQlBUlJBWV9TSVpFKGE0ZGpfY29udHJvbGxlciksIGRldik7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmMKaW5kZXggNDFjMzZiMC4uY2Y1NzNhOSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYwpAQCAtNDIsMTUgKzQyLDE3IEBACiAjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4xMCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjYWlhcSBVU0IgYXVkaW8sIHZlcnNpb24gMS4zLjEzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wyfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wzfSwiCiAJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEtvcmUgQ29udHJvbGxlcn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBLb3JlIENvbnRyb2xsZXIgMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyBLb250cm9sIDF9LCIKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgQXVkaW8gNCBESn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA4IERKfSwiCi0JCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIFNlc3Npb24gSS9PfX0iKTsKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgU2Vzc2lvbiBJL099LCIKKwkJCSAie05hdGl2ZSBJbnN0cnVtZW50cywgR3VpdGFyUmlnIG1vYmlsZX0iKTsKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsgLyogSW5kZXggMC1tYXggKi8KIHN0YXRpYyBjaGFyKiBpZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsgLyogSWQgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMTE2LDYgKzExOCwxNiBAQAogCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKIAkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfU0VTU0lPTklPCiAJfSwKKwl7CisJCS5tYXRjaF9mbGFncyA9ICBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX0dVSVRBUlJJR01PQklMRQorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MgPSAgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJCS5pZFZlbmRvciA9ICAgICBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLAorCQkuaWRQcm9kdWN0ID0gICAgVVNCX1BJRF9BVURJTzRESgorCX0sCiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKQEAgLTIzOSw2ICsyNTEsOCBAQAogCQkKIAlpZiAoZGV2LT5hdWRpb19wYXJtX2Fuc3dlciAhPSAxKSAKIAkJZGVidWcoInVuYWJsZSB0byBzZXQgdGhlIGRldmljZSdzIGF1ZGlvIHBhcmFtc1xuIik7CisJZWxzZQorCQlkZXYtPmJwcCA9IGJwcDsKIAogCXJldHVybiBkZXYtPmF1ZGlvX3Bhcm1fYW5zd2VyID09IDEgPyAwIDogLUVJTlZBTDsKIH0KQEAgLTMwMCw2ICszMTQsMTIgQEAKIAkJfQogCiAJCWJyZWFrOworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQVVESU80REopOgorCQkvKiBBdWRpbyA0IERKIC0gZGVmYXVsdCBpbnB1dCBtb2RlIHRvIHBob25vICovCisJCWRldi0+Y29udHJvbF9zdGF0ZVswXSA9IDI7CisJCXNuZF91c2JfY2FpYXFfc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywKKwkJCWRldi0+Y29udHJvbF9zdGF0ZSwgMSk7CisJCWJyZWFrOwogCX0KIAkKIAlpZiAoZGV2LT5zcGVjLm51bV9hbmFsb2dfYXVkaW9fb3V0ICsKQEAgLTMzNiw5ICszNTYsMTAgQEAKIAkJbG9nKCJVbmFibGUgdG8gc2V0IHVwIGNvbnRyb2wgc3lzdGVtIChyZXQ9JWQpXG4iLCByZXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkKiBjcmVhdGVfY2FyZChzdHJ1Y3QgdXNiX2RldmljZSogdXNiX2RldikKK3N0YXRpYyBpbnQgY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UqIHVzYl9kZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludCBkZXZudW07CisJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldjsKIApAQCAtMzQ3LDEyICszNjgsMTIgQEAKIAkJCWJyZWFrOwogCiAJaWYgKGRldm51bSA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldikpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCAKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWRldiA9IGNhaWFxZGV2KGNhcmQpOwogCWRldi0+Y2hpcC5kZXYgPSB1c2JfZGV2OwpAQCAtMzYyLDcgKzM4Myw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c3BpbmxvY2spOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnVzYl9kZXYtPmRldik7CiAKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X2NhcmQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKQEAgLTQ0MSwxMCArNDYzLDEwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCQotCWNhcmQgPSBjcmVhdGVfY2FyZChkZXZpY2UpOworCXJldCA9IGNyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOwogCQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJCQkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOwogCXJldCA9IGluaXRfY2FyZChjYWlhcWRldihjYXJkKSk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmggYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKaW5kZXggYWI1NmU3My4uNGNjZTFhZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaApAQCAtMTAsOCArMTAsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9LT1JFQ09OVFJPTExFUgkweDQ3MTEKICNkZWZpbmUgVVNCX1BJRF9LT1JFQ09OVFJPTExFUjIJMHg0NzEyCiAjZGVmaW5lIFVTQl9QSURfQUsxCQkweDA4MTUKKyNkZWZpbmUgVVNCX1BJRF9BVURJTzRESgkweDA4MzkKICNkZWZpbmUgVVNCX1BJRF9BVURJTzhESgkweDE5NzgKICNkZWZpbmUgVVNCX1BJRF9TRVNTSU9OSU8JMHgxOTE1CisjZGVmaW5lIFVTQl9QSURfR1VJVEFSUklHTU9CSUxFCTB4MGQ4ZAogCiAjZGVmaW5lIEVQMV9CVUZTSVpFIDY0CiAjZGVmaW5lIENBSUFRX1VTQl9TVFJfTEVOIDB4ZmYKQEAgLTg3LDkgKzg5LDkgQEAKIAlpbnQgYXVkaW9fb3V0X2J1Zl9wb3NbTUFYX1NUUkVBTVNdOwogCWludCBwZXJpb2RfaW5fY291bnRbTUFYX1NUUkVBTVNdOwogCWludCBwZXJpb2Rfb3V0X2NvdW50W01BWF9TVFJFQU1TXTsKLQlpbnQgaW5wdXRfcGFuaWMsIG91dHB1dF9wYW5pYzsKKwlpbnQgaW5wdXRfcGFuaWMsIG91dHB1dF9wYW5pYywgd2FybmVkOwogCWNoYXIgKmF1ZGlvX2luX2J1ZiwgKmF1ZGlvX291dF9idWY7Ci0JdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzOworCXVuc2lnbmVkIGludCBzYW1wbGVyYXRlcywgYnBwOwogCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfcGxheWJhY2tbTUFYX1NUUkVBTVNdOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViX2NhcHR1cmVbTUFYX1NUUkVBTVNdOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCAxOWUzNzQ1Li5jMmRiMGY5IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lIE1BWF9QQUNLU19IUwkoTUFYX1BBQ0tTICogOCkJLyogaW4gaGlnaCBzcGVlZCBtb2RlICovCiAjZGVmaW5lIE1BWF9VUkJTCTgKICNkZWZpbmUgU1lOQ19VUkJTCTQJLyogYWx3YXlzIGZvdXIgdXJicyBmb3Igc3luYyAqLwotI2RlZmluZSBNSU5fUEFDS1NfVVJCCTEJLyogbWluaW11bSAxIHBhY2tldCBwZXIgdXJiICovCisjZGVmaW5lIE1BWF9RVUVVRQkyNAkvKiB0cnkgbm90IHRvIGV4Y2VlZCB0aGlzIHF1ZXVlIGxlbmd0aCwgaW4gbXMgKi8KIAogc3RydWN0IGF1ZGlvZm9ybWF0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC01MjUsNyArNTI1LDcgQEAKIC8qCiAgKiBQcmVwYXJlIHVyYiBmb3Igc3RyZWFtaW5nIGJlZm9yZSBwbGF5YmFjayBzdGFydHMgb3Igd2hlbiBwYXVzZWQuCiAgKgotICogV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSwgc28gd2Ugc2VuZCBhIGZyYW1lIG9mIHNpbGVuY2UuCisgKiBXZSBkb24ndCBoYXZlIGFueSBkYXRhLCBzbyB3ZSBzZW5kIHNpbGVuY2UuCiAgKi8KIHN0YXRpYyBpbnQgcHJlcGFyZV9ub2RhdGFfcGxheWJhY2tfdXJiKHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3VicywKIAkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSwKQEAgLTUzNywxMyArNTM3LDEzIEBACiAKIAlvZmZzID0gMDsKIAl1cmItPmRldiA9IGN0eC0+c3Vicy0+ZGV2OwotCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBzdWJzLT5wYWNrc19wZXJfbXM7Ci0JZm9yIChpID0gMDsgaSA8IHN1YnMtPnBhY2tzX3Blcl9tczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+cGFja2V0czsgKytpKSB7CiAJCWNvdW50cyA9IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdWJzKTsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzICogc3RyaWRlOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IGNvdW50cyAqIHN0cmlkZTsKIAkJb2ZmcyArPSBjb3VudHM7CiAJfQorCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBjdHgtPnBhY2tldHM7CiAJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gb2ZmcyAqIHN0cmlkZTsKIAltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJICAgICAgIHN1YnMtPmN1cl9hdWRpb2ZtdC0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfVTggPyAweDgwIDogMCwKQEAgLTEwMzQsOSArMTAzNCw5IEBACiBzdGF0aWMgaW50IGluaXRfc3Vic3RyZWFtX3VyYnMoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLCB1bnNpZ25lZCBpbnQgcGVyaW9kX2J5dGVzLAogCQkJICAgICAgIHVuc2lnbmVkIGludCByYXRlLCB1bnNpZ25lZCBpbnQgZnJhbWVfYml0cykKIHsKLQl1bnNpZ25lZCBpbnQgbWF4c2l6ZSwgbiwgaTsKKwl1bnNpZ25lZCBpbnQgbWF4c2l6ZSwgaTsKIAlpbnQgaXNfcGxheWJhY2sgPSBzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQl1bnNpZ25lZCBpbnQgbnBhY2tzW01BWF9VUkJTXSwgdXJiX3BhY2tzLCB0b3RhbF9wYWNrcywgcGFja3NfcGVyX21zOworCXVuc2lnbmVkIGludCB1cmJfcGFja3MsIHRvdGFsX3BhY2tzLCBwYWNrc19wZXJfbXM7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSBpbiAxNi4xNiBmb3JtYXQgKi8KIAlpZiAoc25kX3VzYl9nZXRfc3BlZWQoc3Vicy0+ZGV2KSA9PSBVU0JfU1BFRURfRlVMTCkKQEAgLTEwNzAsOCArMTA3MCw3IEBACiAJc3Vicy0+cGFja3NfcGVyX21zID0gcGFja3NfcGVyX21zOwogCiAJaWYgKGlzX3BsYXliYWNrKSB7Ci0JCXVyYl9wYWNrcyA9IG5ycGFja3M7Ci0JCXVyYl9wYWNrcyA9IG1heCh1cmJfcGFja3MsICh1bnNpZ25lZCBpbnQpTUlOX1BBQ0tTX1VSQik7CisJCXVyYl9wYWNrcyA9IG1heChucnBhY2tzLCAxKTsKIAkJdXJiX3BhY2tzID0gbWluKHVyYl9wYWNrcywgKHVuc2lnbmVkIGludClNQVhfUEFDS1MpOwogCX0gZWxzZQogCQl1cmJfcGFja3MgPSAxOwpAQCAtMTA3OSw3ICsxMDc4LDcgQEAKIAogCS8qIGRlY2lkZSBob3cgbWFueSBwYWNrZXRzIHRvIGJlIHVzZWQgKi8KIAlpZiAoaXNfcGxheWJhY2spIHsKLQkJdW5zaWduZWQgaW50IG1pbnNpemU7CisJCXVuc2lnbmVkIGludCBtaW5zaXplLCBtYXhwYWNrczsKIAkJLyogZGV0ZXJtaW5lIGhvdyBzbWFsbCBhIHBhY2tldCBjYW4gYmUgKi8KIAkJbWluc2l6ZSA9IChzdWJzLT5mcmVxbiA+PiAoMTYgLSBzdWJzLT5kYXRhaW50ZXJ2YWwpKQogCQkJICAqIChmcmFtZV9iaXRzID4+IDMpOwpAQCAtMTA5Miw4ICsxMDkxLDEzIEBACiAJCXRvdGFsX3BhY2tzID0gKHRvdGFsX3BhY2tzICsgcGFja3NfcGVyX21zIC0gMSkKIAkJCQkmIH4ocGFja3NfcGVyX21zIC0gMSk7CiAJCS8qIHdlIG5lZWQgYXQgbGVhc3QgdHdvIFVSQnMgZm9yIHF1ZXVlaW5nICovCi0JCWlmICh0b3RhbF9wYWNrcyA8IDIgKiBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zKQotCQkJdG90YWxfcGFja3MgPSAyICogTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tczsKKwkJaWYgKHRvdGFsX3BhY2tzIDwgMiAqIHBhY2tzX3Blcl9tcykgeworCQkJdG90YWxfcGFja3MgPSAyICogcGFja3NfcGVyX21zOworCQl9IGVsc2UgeworCQkJLyogYW5kIHdlIGRvbid0IHdhbnQgdG9vIGxvbmcgYSBxdWV1ZSBlaXRoZXIgKi8KKwkJCW1heHBhY2tzID0gbWF4KE1BWF9RVUVVRSAqIHBhY2tzX3Blcl9tcywgdXJiX3BhY2tzICogMik7CisJCQl0b3RhbF9wYWNrcyA9IG1pbih0b3RhbF9wYWNrcywgbWF4cGFja3MpOworCQl9CiAJfSBlbHNlIHsKIAkJdG90YWxfcGFja3MgPSBNQVhfVVJCUyAqIHVyYl9wYWNrczsKIAl9CkBAIC0xMTAyLDMxICsxMTA2LDExIEBACiAJCS8qIHRvbyBtdWNoLi4uICovCiAJCXN1YnMtPm51cmJzID0gTUFYX1VSQlM7CiAJCXRvdGFsX3BhY2tzID0gTUFYX1VSQlMgKiB1cmJfcGFja3M7Ci0JfQotCW4gPSB0b3RhbF9wYWNrczsKLQlmb3IgKGkgPSAwOyBpIDwgc3Vicy0+bnVyYnM7IGkrKykgewotCQlucGFja3NbaV0gPSBuID4gdXJiX3BhY2tzID8gdXJiX3BhY2tzIDogbjsKLQkJbiAtPSB1cmJfcGFja3M7Ci0JfQotCWlmIChzdWJzLT5udXJicyA8PSAxKSB7CisJfSBlbHNlIGlmIChzdWJzLT5udXJicyA8IDIpIHsKIAkJLyogdG9vIGxpdHRsZSAtIHdlIG5lZWQgYXQgbGVhc3QgdHdvIHBhY2tldHMKIAkJICogdG8gZW5zdXJlIGNvbnRpZ3VvdXMgcGxheWJhY2svY2FwdHVyZQogCQkgKi8KIAkJc3Vicy0+bnVyYnMgPSAyOwotCQlucGFja3NbMF0gPSAodG90YWxfcGFja3MgKyAxKSAvIDI7Ci0JCW5wYWNrc1sxXSA9IHRvdGFsX3BhY2tzIC0gbnBhY2tzWzBdOwotCX0gZWxzZSBpZiAobnBhY2tzW3N1YnMtPm51cmJzLTFdIDwgTUlOX1BBQ0tTX1VSQiAqIHBhY2tzX3Blcl9tcykgewotCQkvKiB0aGUgbGFzdCBwYWNrZXQgaXMgdG9vIHNtYWxsLi4gKi8KLQkJaWYgKHN1YnMtPm51cmJzID4gMikgewotCQkJLyogbWVyZ2UgdG8gdGhlIGZpcnN0IG9uZSAqLwotCQkJbnBhY2tzWzBdICs9IG5wYWNrc1tzdWJzLT5udXJicyAtIDFdOwotCQkJc3Vicy0+bnVyYnMtLTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRpdmlkZSB0byB0d28gKi8KLQkJCXN1YnMtPm51cmJzID0gMjsKLQkJCW5wYWNrc1swXSA9ICh0b3RhbF9wYWNrcyArIDEpIC8gMjsKLQkJCW5wYWNrc1sxXSA9IHRvdGFsX3BhY2tzIC0gbnBhY2tzWzBdOwotCQl9CiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGF0YSB1cmJzICovCkBAIC0xMTM0LDcgKzExMTgsOCBAQAogCQlzdHJ1Y3Qgc25kX3VyYl9jdHggKnUgPSAmc3Vicy0+ZGF0YXVyYltpXTsKIAkJdS0+aW5kZXggPSBpOwogCQl1LT5zdWJzID0gc3ViczsKLQkJdS0+cGFja2V0cyA9IG5wYWNrc1tpXTsKKwkJdS0+cGFja2V0cyA9IChpICsgMSkgKiB0b3RhbF9wYWNrcyAvIHN1YnMtPm51cmJzCisJCQktIGkgKiB0b3RhbF9wYWNrcyAvIHN1YnMtPm51cmJzOwogCQl1LT5idWZmZXJfc2l6ZSA9IG1heHNpemUgKiB1LT5wYWNrZXRzOwogCQlpZiAoc3Vicy0+Zm10X3R5cGUgPT0gVVNCX0ZPUk1BVF9UWVBFX0lJKQogCQkJdS0+cGFja2V0cysrOyAvKiBmb3IgdHJhbnNmZXIgZGVsaW1pdGVyICovCkBAIC0xMjkyLDE0ICsxMjc3LDE0IEBACiAJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKIAkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwIDB4JXhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgcmF0ZSwgZXApOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLAogCQkJCQkgICBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKIAkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JWQ6JWQ6IGNhbm5vdCBnZXQgZnJlcSBhdCBlcCAweCV4XG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBjYW5ub3QgZ2V0IGZyZXEgYXQgZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBlcCk7CiAJCQlyZXR1cm4gMDsgLyogc29tZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQgcmVhZGluZyAqLwogCQl9CkBAIC0xNDMxLDkgKzE0MTYsMTEgQEAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBmbXQ7CiAKICNpZiAwCi0JcHJpbnRrKCJzZXR0aW5nIGRvbmU6IGZvcm1hdCA9ICVkLCByYXRlID0gJWQuLiVkLCBjaGFubmVscyA9ICVkXG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJzZXR0aW5nIGRvbmU6IGZvcm1hdCA9ICVkLCByYXRlID0gJWQuLiVkLCBjaGFubmVscyA9ICVkXG4iLAogCSAgICAgICBmbXQtPmZvcm1hdCwgZm10LT5yYXRlX21pbiwgZm10LT5yYXRlX21heCwgZm10LT5jaGFubmVscyk7Ci0JcHJpbnRrKCIgIGRhdGFwaXBlID0gMHglMHgsIHN5bmNwaXBlID0gMHglMHhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgIiAgZGF0YXBpcGUgPSAweCUweCwgc3luY3BpcGUgPSAweCUweFxuIiwKIAkgICAgICAgc3Vicy0+ZGF0YXBpcGUsIHN1YnMtPnN5bmNwaXBlKTsKICNlbmRpZgogCkBAIC0xNDY4LDcgKzE0NTUsNyBAQAogCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcyk7CiAJZm10ID0gZmluZF9mb3JtYXQoc3VicywgZm9ybWF0LCByYXRlLCBjaGFubmVscyk7CiAJaWYgKCFmbXQpIHsKLQkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJjYW5ub3Qgc2V0IGZvcm1hdDogZm9ybWF0ID0gMHgleCwgcmF0ZSA9ICVkLCBjaGFubmVscyA9ICVkXG4iLAorCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAlI3gsIHJhdGUgPSAlZCwgY2hhbm5lbHMgPSAlZFxuIiwKIAkJCSAgIGZvcm1hdCwgcmF0ZSwgY2hhbm5lbHMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNzk1LDcgKzE3ODIsNyBAQAogCQkJaWYgKHJhdGVzW2YtPmZvcm1hdF0gJiYgcmF0ZXNbZi0+Zm9ybWF0XSAhPSBmLT5yYXRlcykKIAkJCQlnb3RvIF9fb3V0OwogCQl9Ci0JCWNoYW5uZWxzW2YtPmZvcm1hdF0gfD0gKDEgPDwgZi0+Y2hhbm5lbHMpOworCQljaGFubmVsc1tmLT5mb3JtYXRdIHw9IDEgPDwgKGYtPmNoYW5uZWxzIC0gMSk7CiAJCXJhdGVzW2YtPmZvcm1hdF0gfD0gZi0+cmF0ZXM7CiAJCS8qIG5lZWRzIGtub3Q/ICovCiAJCWlmIChmLT5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCkBAIC0xODIyLDcgKzE4MDksNyBAQAogCQkJY29udGludWU7CiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCQlpZiAoZi0+cmF0ZXMgJiAoMSA8PCBpKSkKLQkJCQljaGFubmVsc1tpXSB8PSAoMSA8PCBmLT5jaGFubmVscyk7CisJCQkJY2hhbm5lbHNbaV0gfD0gMSA8PCAoZi0+Y2hhbm5lbHMgLSAxKTsKIAkJfQogCX0KIAljbWFzdGVyID0gMDsKQEAgLTE5MTksNyArMTkwNiw3IEBACiAJICogaW4gdGhlIGN1cnJlbnQgY29kZSBhc3N1bWUgdGhlIDFtcyBwZXJpb2QuCiAJICovCiAJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUsCi0JCQkJICAgICAxMDAwICogTUlOX1BBQ0tTX1VSQiwKKwkJCQkgICAgIDEwMDAsCiAJCQkJICAgICAvKihucnBhY2tzICogTUFYX1VSQlMpICogMTAwMCovIFVJTlRfTUFYKTsKIAogCWVyciA9IGNoZWNrX2h3X3BhcmFtc19jb252ZW50aW9uKHN1YnMpOwpAQCAtMjE2MCw3ICsyMTQ3LDcgQEAKIAkJZnAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBhdWRpb2Zvcm1hdCwgbGlzdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgSW50ZXJmYWNlICVkXG4iLCBmcC0+aWZhY2UpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQWx0c2V0ICVkXG4iLCBmcC0+YWx0c2V0dGluZyk7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6IDB4JXhcbiIsIGZwLT5mb3JtYXQpOworCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRm9ybWF0OiAlI3hcbiIsIGZwLT5mb3JtYXQpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQ2hhbm5lbHM6ICVkXG4iLCBmcC0+Y2hhbm5lbHMpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLApAQCAtMjE4MCw3ICsyMTY3LDcgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJCX0KIAkJLy8gc25kX2lwcmludGYoYnVmZmVyLCAiICAgIE1heCBQYWNrZXQgU2l6ZSA9ICVkXG4iLCBmcC0+bWF4cGFja3NpemUpOwotCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgRVAgQXR0cmlidXRlID0gMHgleFxuIiwgZnAtPmF0dHJpYnV0ZXMpOworCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgRVAgQXR0cmlidXRlID0gJSN4XG4iLCBmcC0+YXR0cmlidXRlcyk7CiAJfQogfQogCkBAIC0yNjIxLDcgKzI2MDgsNyBAQAogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bmtub3duIGZvcm1hdCB0YWcgMHgleCBpcyBkZXRlY3RlZC4gIHByb2Nlc3NlZCBhcyBNUEVHLlxuIiwKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIiVkOiV1OiVkIDogdW5rbm93biBmb3JtYXQgdGFnICUjeCBpcyBkZXRlY3RlZC4gIHByb2Nlc3NlZCBhcyBNUEVHLlxuIiwKIAkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLCBmb3JtYXQpOwogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKQEAgLTI4MTksNyArMjgwNiw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQ6IGFkZCBhdWRpbyBlbmRwb2ludCAweCV4XG4iLCBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vLCBmcC0+ZW5kcG9pbnQpOworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiV1OiVkOiBhZGQgYXVkaW8gZW5kcG9pbnQgJSN4XG4iLCBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vLCBmcC0+ZW5kcG9pbnQpOwogCQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZShmcC0+cmF0ZV90YWJsZSk7CkBAIC0zNDY2LDEwICszNDUzLDEwIEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBjcmVhdGUgY2FyZCBpbnN0YW5jZSAlZFxuIiwgaWR4KTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBlcnI7CiAJfQogCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNzY2LDcgKzM3NTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfdXNiX2F1ZGlvX2luaXQodm9pZCkKIHsKLQlpZiAobnJwYWNrcyA8IE1JTl9QQUNLU19VUkIgfHwgbnJwYWNrcyA+IE1BWF9QQUNLUykgeworCWlmIChucnBhY2tzIDwgMSB8fCBucnBhY2tzID4gTUFYX1BBQ0tTKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgbnJwYWNrcyB2YWx1ZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IDAwMzk3YzguLmVjYjU4ZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC02Niw2ICs2Niw3IEBACiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwMDApLCAwLCAxLCAyLCAxLCAgMTgsIDB4MDAxMyB9LCAvKiBFeHRpZ3kgICAgICAgKi8KIAl7IFVTQl9JRCgweDA0MWUsIDB4MzAyMCksIDIsIDEsIDYsIDYsICAxOCwgMHgwMDEzIH0sIC8qIEF1ZGlneSAyIE5YICAqLwogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogTGl2ZSEgMjQtYml0ICovCisJeyBVU0JfSUQoMHgwNDFlLCAweDMwNDgpLCAyLCAyLCA2LCA2LCAgMiwgIDB4NmU5MSB9LCAvKiBUb3NoaWJhIFNCMDUwMCAqLwogfTsKIAogc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgewpAQCAtNzgsNyArNzksNiBAQAogCiAJLyogU291bmQgQmxhc3RlciByZW1vdGUgY29udHJvbCBzdHVmZiAqLwogCWNvbnN0IHN0cnVjdCByY19jb25maWcgKnJjX2NmZzsKLQl1bnNpZ25lZCBsb25nIHJjX2h3ZGVwX29wZW47CiAJdTMyIHJjX2NvZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmNfd2FpdHE7CiAJc3RydWN0IHVyYiAqcmNfdXJiOwpAQCAtMTEwLDYgKzExMCw4IEBACiAJY29uc3Qgc3RydWN0IHVzYm1peF9zZWxlY3Rvcl9tYXAgKnNlbGVjdG9yX21hcDsKIH07CiAKKyNkZWZpbmUgTUFYX0NIQU5ORUxTCTEwCS8qIG1heCBsb2dpY2FsIGNoYW5uZWxzICovCisKIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvIHsKIAlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKm5leHRfaWRfZWxlbTsgLyogbGlzdCBvZiBjb250cm9scyB3aXRoIHNhbWUgaWQgKi8KQEAgLTEyMCw2ICsxMjIsOCBAQAogCWludCBjaGFubmVsczsKIAlpbnQgdmFsX3R5cGU7CiAJaW50IG1pbiwgbWF4LCByZXM7CisJaW50IGNhY2hlZDsKKwlpbnQgY2FjaGVfdmFsW01BWF9DSEFOTkVMU107CiAJdTggaW5pdGlhbGl6ZWQ7CiB9OwogCkBAIC0xODEsOCArMTg1LDYgQEAKIAlVU0JfUFJPQ19EQ1JfUkVMRUFTRSA9IDYsCiB9OwogCi0jZGVmaW5lIE1BWF9DSEFOTkVMUwkxMAkvKiBtYXggbG9naWNhbCBjaGFubmVscyAqLwotCiAKIC8qCiAgKiBtYW51YWwgbWFwcGluZyBvZiBtaXhlciBuYW1lcwpAQCAtMjE5LDcgKzIyMSwxMCBAQAogCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKIAkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiAhIHAtPm5hbWUgJiYKIAkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCS8vIHByaW50aygiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLCB1bml0aWQsIGNvbnRyb2wpOworCQkJLyoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJpZ25vcmVkIGNvbnRyb2wgJWQ6JWRcbiIsCisJCQkgICAgICAgdW5pdGlkLCBjb250cm9sKTsKKwkJCSovCiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTM3NiwxMSArMzgxLDM1IEBACiB9CiAKIC8qIGNoYW5uZWwgPSAwOiBtYXN0ZXIsIDEgPSBmaXJzdCBjaGFubmVsICovCi1zdGF0aWMgaW5saW5lIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBnZXRfY3VyX21peF9yYXcoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsCisJCQkJICBpbnQgY2hhbm5lbCwgaW50ICp2YWx1ZSkKIHsKIAlyZXR1cm4gZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsIHZhbHVlKTsKIH0KIAorc3RhdGljIGludCBnZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKKwkJCSAgICAgaW50IGNoYW5uZWwsIGludCBpbmRleCwgaW50ICp2YWx1ZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKGN2YWwtPmNhY2hlZCAmICgxIDw8IGNoYW5uZWwpKSB7CisJCSp2YWx1ZSA9IGN2YWwtPmNhY2hlX3ZhbFtpbmRleF07CisJCXJldHVybiAwOworCX0KKwllcnIgPSBnZXRfY3VyX21peF9yYXcoY3ZhbCwgY2hhbm5lbCwgdmFsdWUpOworCWlmIChlcnIgPCAwKSB7CisJCWlmICghY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yICIKKwkJCQkgICAiY29udHJvbCAlZCBjaCAlZDogZXJyID0gJWRcbiIsCisJCQkJICAgY3ZhbC0+Y29udHJvbCwgY2hhbm5lbCwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY3ZhbC0+Y2FjaGVkIHw9IDEgPDwgY2hhbm5lbDsKKwljdmFsLT5jYWNoZV92YWxbaW5kZXhdID0gKnZhbHVlOworCXJldHVybiAwOworfQorCisKIC8qCiAgKiBzZXQgYSBtaXhlciB2YWx1ZQogICovCkBAIC00MTIsOSArNDQxLDE3IEBACiAJcmV0dXJuIHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwgaW50IHZhbHVlKQorc3RhdGljIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsCisJCQkgICAgIGludCBpbmRleCwgaW50IHZhbHVlKQogewotCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOworCWludCBlcnI7CisJZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsCisJCQkgICAgdmFsdWUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWN2YWwtPmNhY2hlZCB8PSAxIDw8IGNoYW5uZWw7CisJY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XSA9IHZhbHVlOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNzE4LDcgKzc1NSw3IEBACiAJCWlmIChjdmFsLT5taW4gKyBjdmFsLT5yZXMgPCBjdmFsLT5tYXgpIHsKIAkJCWludCBsYXN0X3ZhbGlkX3JlcyA9IGN2YWwtPnJlczsKIAkJCWludCBzYXZlZCwgdGVzdCwgY2hlY2s7Ci0JCQlnZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sICZzYXZlZCk7CisJCQlnZXRfY3VyX21peF9yYXcoY3ZhbCwgbWluY2huLCAmc2F2ZWQpOwogCQkJZm9yICg7OykgewogCQkJCXRlc3QgPSBzYXZlZDsKIAkJCQlpZiAodGVzdCA8IGN2YWwtPm1heCkKQEAgLTcyNiw4ICs3NjMsOCBAQAogCQkJCWVsc2UKIAkJCQkJdGVzdCAtPSBjdmFsLT5yZXM7CiAJCQkJaWYgKHRlc3QgPCBjdmFsLT5taW4gfHwgdGVzdCA+IGN2YWwtPm1heCB8fAotCQkJCSAgICBzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIHRlc3QpIHx8Ci0JCQkJICAgIGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgJmNoZWNrKSkgeworCQkJCSAgICBzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIDAsIHRlc3QpIHx8CisJCQkJICAgIGdldF9jdXJfbWl4X3JhdyhjdmFsLCBtaW5jaG4sICZjaGVjaykpIHsKIAkJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTczNSw3ICs3NzIsNyBAQAogCQkJCQlicmVhazsKIAkJCQljdmFsLT5yZXMgKj0gMjsKIAkJCX0KLQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgc2F2ZWQpOworCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAwLCBzYXZlZCk7CiAJCX0KIAogCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CkBAIC03NzUsMzUgKzgxMiwyNSBAQAogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKIAlpbnQgYywgY250LCB2YWwsIGVycjsKIAorCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwogCWlmIChjdmFsLT5jbWFzaykgewogCQljbnQgPSAwOwogCQlmb3IgKGMgPSAwOyBjIDwgTUFYX0NIQU5ORUxTOyBjKyspIHsKLQkJCWlmIChjdmFsLT5jbWFzayAmICgxIDw8IGMpKSB7Ci0JCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZ2YWwpOwotCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikgewotCQkJCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47Ci0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJfQotCQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN1cnJlbnQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgY2ggJWQ6IGVyciA9ICVkXG4iLCBjdmFsLT5jb250cm9sLCBjICsgMSwgZXJyKTsKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0JCQkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7Ci0JCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XSA9IHZhbDsKLQkJCQljbnQrKzsKLQkJCX0KKwkJCWlmICghKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgJnZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOworCQkJdmFsID0gZ2V0X3JlbGF0aXZlX3ZhbHVlKGN2YWwsIHZhbCk7CisJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdID0gdmFsOworCQkJY250Kys7CiAJCX0KKwkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJLyogbWFzdGVyIGNoYW5uZWwgKi8KLQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgJnZhbCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpIHsKLQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgY29udHJvbCAlZCBtYXN0ZXIgY2g6IGVyciA9ICVkXG4iLCBjdmFsLT5jb250cm9sLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCAmdmFsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOwogCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWw7CiAJfQpAQCAtODIwLDM0ICs4NDcsMjggQEAKIAlpZiAoY3ZhbC0+Y21hc2spIHsKIAkJY250ID0gMDsKIAkJZm9yIChjID0gMDsgYyA8IE1BWF9DSEFOTkVMUzsgYysrKSB7Ci0JCQlpZiAoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkgewotCQkJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmb3ZhbCk7Ci0JCQkJaWYgKGVyciA8IDApIHsKLQkJCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCQkJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF07Ci0JCQkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOwotCQkJCWlmIChvdmFsICE9IHZhbCkgewotCQkJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgdmFsKTsKLQkJCQkJY2hhbmdlZCA9IDE7Ci0JCQkJfQotCQkJCWdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCAmdmFsKTsKLQkJCQljbnQrKzsKKwkJCWlmICghKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsIGNudCwgJm92YWwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKKwkJCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF07CisJCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7CisJCQlpZiAob3ZhbCAhPSB2YWwpIHsKKwkJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCB2YWwpOworCQkJCWNoYW5nZWQgPSAxOwogCQkJfQorCQkJY250Kys7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBtYXN0ZXIgY2hhbm5lbCAqLwotCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAmb3ZhbCk7Ci0JCWlmIChlcnIgPCAwICYmIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKQotCQkJcmV0dXJuIDA7CisJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsICZvdmFsKTsKIAkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQkJcmV0dXJuIGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yID8gMCA6IGVycjsKIAkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKIAkJaWYgKHZhbCAhPSBvdmFsKSB7Ci0JCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCB2YWwpOworCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgdmFsKTsKIAkJCWNoYW5nZWQgPSAxOwogCQl9CiAJfQpAQCAtMTcwNiw3ICsxNzI3LDggQEAKIAkJYnJlYWs7CiAJLyogbGl2ZTI0ZXh0OiA0ID0gbGluZS1pbiBqYWNrICovCiAJY2FzZSAzOgkvKiBocC1vdXQgamFjayAobWF5IGFjdHVhdGUgTXV0ZSkgKi8KLQkJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwkJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKQogCQkJc25kX3VzYl9taXhlcl9ub3RpZnlfaWQobWl4ZXIsIG1peGVyLT5yY19jZmctPm11dGVfbWl4ZXJfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTc5NywyNCArMTgxOSw2IEBACiAJd2FrZV91cCgmbWl4ZXItPnJjX3dhaXRxKTsKIH0KIAotc3RhdGljIGludCBzbmRfdXNiX3NicmNfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gaHctPnByaXZhdGVfZGF0YTsKLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZtaXhlci0+cmNfaHdkZXBfb3BlbikpCi0JCXJldHVybiAtRUJVU1k7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VzYl9zYnJjX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IGh3LT5wcml2YXRlX2RhdGE7Ci0KLQljbGVhcl9iaXQoMCwgJm1peGVyLT5yY19od2RlcF9vcGVuKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgbG9uZyBzbmRfdXNiX3NicmNfaHdkZXBfcmVhZChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewpAQCAtMTg2Nyw5ICsxODcxLDggQEAKIAlod2RlcC0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9TQl9SQzsKIAlod2RlcC0+cHJpdmF0ZV9kYXRhID0gbWl4ZXI7CiAJaHdkZXAtPm9wcy5yZWFkID0gc25kX3VzYl9zYnJjX2h3ZGVwX3JlYWQ7Ci0JaHdkZXAtPm9wcy5vcGVuID0gc25kX3VzYl9zYnJjX2h3ZGVwX29wZW47Ci0JaHdkZXAtPm9wcy5yZWxlYXNlID0gc25kX3VzYl9zYnJjX2h3ZGVwX3JlbGVhc2U7CiAJaHdkZXAtPm9wcy5wb2xsID0gc25kX3VzYl9zYnJjX2h3ZGVwX3BvbGw7CisJaHdkZXAtPmV4Y2x1c2l2ZSA9IDE7CiAKIAltaXhlci0+cmNfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1peGVyLT5yY191cmIpCkBAIC0xOTU2LDggKzE5NTksOSBAQAogCWludCBpLCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzbmRfYXVkaWd5Mm54X2NvbnRyb2xzKTsgKytpKSB7Ci0JCWlmIChpID4gMSAmJiAgLyogTGl2ZTI0ZXh0IGhhcyAyIExFRHMgb25seSAqLwotCQkJbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCQlpZiAoaSA+IDEgJiYgLyogTGl2ZTI0ZXh0IGhhcyAyIExFRHMgb25seSAqLworCQkJKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCQkJIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkpCiAJCQlicmVhazsgCiAJCWVyciA9IHNuZF9jdGxfYWRkKG1peGVyLT5jaGlwLT5jYXJkLAogCQkJCSAgc25kX2N0bF9uZXcxKCZzbmRfYXVkaWd5Mm54X2NvbnRyb2xzW2ldLCBtaXhlcikpOwpAQCAtMTk5NCw3ICsxOTk4LDggQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICIlcyBqYWNrc1xuXG4iLCBtaXhlci0+Y2hpcC0+Y2FyZC0+c2hvcnRuYW1lKTsKIAlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApKQogCQlqYWNrcyA9IGphY2tzX2F1ZGlneTJueDsKLQllbHNlIGlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJZWxzZSBpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpCiAJCWphY2tzID0gamFja3NfbGl2ZTI0ZXh0OwogCWVsc2UKIAkJcmV0dXJuOwpAQCAtMjA0NCw3ICsyMDQ5LDggQEAKIAkJZ290byBfZXJyb3I7CiAKIAlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApIHx8Ci0JICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkgeworCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSB7CiAJCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CiAKIAkJaWYgKChlcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcikpIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCmluZGV4IGQ3NTViZTAuLjNlNWQ2NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYwpAQCAtMjYxLDYgKzI2MSwyMiBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwIHNjcmF0Y2hfbGl2ZV9tYXBbXSA9IHsKKwkvKiAxOiBJVCBMaW5lIDEgKFVTQiBzdHJlYW1pbmcpICovCisJLyogMjogT1QgTGluZSAxIChTcGVha2VyKSAqLworCS8qIDM6IElUIExpbmUgMSAoTGluZSBjb25uZWN0b3IpICovCisJeyA0LCAiTGluZSAxIEluIiB9LCAvKiBGVSAqLworCS8qIDU6IE9UIExpbmUgMSAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiA2OiBJVCBMaW5lIDIgKFVTQiBzdHJlYW1pbmcpICovCisJLyogNzogT1QgTGluZSAyIChTcGVha2VyKSAqLworCS8qIDg6IElUIExpbmUgMiAoTGluZSBjb25uZWN0b3IpICovCisJeyA5LCAiTGluZSAyIEluIiB9LCAvKiBGVSAqLworCS8qIDEwOiBPVCBMaW5lIDIgKFVTQiBzdHJlYW1pbmcpICovCisJLyogMTE6IElUIE1pYyAoTGluZSBjb25uZWN0b3IpICovCisJLyogMTI6IE9UIE1pYyAoVVNCIHN0cmVhbWluZykgKi8KKwl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCit9OworCiAvKgogICogQ29udHJvbCBtYXAgZW50cmllcwogICovCkBAIC0yODUsNiArMzAxLDExIEBACiAJCS5tYXAgPSBsaXZlMjRleHRfbWFwLAogCX0sCiAJeworCQkuaWQgPSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpLAorCQkubWFwID0gYXVkaWd5Mm54X21hcCwKKwkJLnNlbGVjdG9yX21hcCA9IGF1ZGlneTJueF9zZWxlY3RvcnMsCisJfSwKKwl7CiAJCS8qIEhlcmN1bGVzIERKIENvbnNvbGUgKFdpbmRvd3MgRWRpdGlvbikgKi8KIAkJLmlkID0gVVNCX0lEKDB4MDZmOCwgMHhiMDAwKSwKIAkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLApAQCAtMzExLDYgKzMzMiwxMSBAQAogCQkuaWQgPSBVU0JfSUQoMHgwY2NkLCAweDAwMjgpLAogCQkubWFwID0gYXVyZW9uXzUxXzJfbWFwLAogCX0sCisJeworCQkuaWQgPSBVU0JfSUQoMHgxM2U1LCAweDAwMDEpLAorCQkubWFwID0gc2NyYXRjaF9saXZlX21hcCwKKwkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLAorCX0sCiAJeyAwIH0gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IDVkOGVmMDkuLjY0N2VmNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JxdWlya3MuaAorKysgYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKQEAgLTM5LDYgKzM5LDE2IEBACiAJLmlkUHJvZHVjdCA9IHByb2QsIFwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDCiAKKy8qIENyZWF0aXZlL1Rvc2hpYmEgTXVsdGltZWRpYSBDZW50ZXIgU0ItMDUwMCAqLworeworCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwNDgpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiVG9zaGliYSIsCisJCS5wcm9kdWN0X25hbWUgPSAiU0ItMDUwMCIsCisJCS5pZm51bSA9IFFVSVJLX05PX0lOVEVSRkFDRQorCX0KK30sCisKIC8qIENyZWF0aXZlL0UtTXUgZGV2aWNlcyAqLwogewogCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDMwMTApLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCmluZGV4IDczZTU5ZjQuLjk4Mjc2YWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKQEAgLTQ3OCwxOSArNDc4LDIxIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnVzeDJ5X2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVzeDJ5X2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCiAJZm9yIChkZXYgPSAwOyBkZXYgPCBTTkRSVl9DQVJEUzsgKytkZXYpCiAJCWlmIChlbmFibGVbZGV2XSAmJiAhc25kX3VzMTIybF9jYXJkX3VzZWRbZGV2XSkKIAkJCWJyZWFrOwogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCB1czEyMmwpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzMTIybCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfdXMxMjJsX2NhcmRfdXNlZFtVUzEyMkwoY2FyZCktPmNoaXAuaW5kZXggPSBkZXZdID0gMTsKIAogCVVTMTIyTChjYXJkKS0+Y2hpcC5kZXYgPSBkZXZpY2U7CkBAIC01MDksNDYgKzUxMSw1NyBAQAogCQlVUzEyMkwoY2FyZCktPmNoaXAuZGV2LT5kZXZudW0KIAkJKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKnVzMTIybF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkKQorc3RhdGljIGludCB1czEyMmxfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQsCisJCQkgICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gdXN4MnlfY3JlYXRlX2NhcmQoZGV2aWNlKTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gdXN4MnlfY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKLQlpZiAoIXVzMTIybF9jcmVhdGVfY2FyZChjYXJkKSB8fAotCSAgICBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSA8IDApIHsKKwlpZiAoIXVzMTIybF9jcmVhdGVfY2FyZChjYXJkKSkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAl1c2JfZ2V0X2RldihkZXZpY2UpOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3VzMTIybF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHIiVwOiVpXG4iLAogCQkgICAgaW50ZiwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMSkKIAkJcmV0dXJuIDA7CiAKLQljYXJkID0gdXMxMjJsX3VzYl9wcm9iZSh1c2JfZ2V0X2ludGYoaW50ZiksIGlkKTsKLQotCWlmIChjYXJkKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7Ci0JCXJldHVybiAwOworCWVyciA9IHVzMTIybF91c2JfcHJvYmUodXNiX2dldF9pbnRmKGludGYpLCBpZCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXVzYl9wdXRfaW50ZihpbnRmKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQl1c2JfcHV0X2ludGYoaW50Zik7Ci0JcmV0dXJuIC1FSU87CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3VzMTIybF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKaW5kZXggMTU1OGE1Yy4uNGFmODc0MCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCkBAIC0zMCw5ICszMCw2IEBACiAjaW5jbHVkZSAidXNidXN4MnkuaCIKICNpbmNsdWRlICJ1c1gyWWh3ZGVwLmgiCiAKLWludCB1c1gyWV9od2RlcF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7Ci0KLQogc3RhdGljIGludCBzbmRfdXM0MjhjdGxzX3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSwKIAkJCQkgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewpAQCAtMTA2LDE2ICsxMDMsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX29wZW4oc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfZHNwX3N0YXR1cyhzdHJ1Y3Qgc25kX2h3ZGVwICpodywKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgKmluZm8pCiB7CkBAIC0yNjcsOCArMjU0LDYgQEAKIAogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1VTWDJZOwogCWh3LT5wcml2YXRlX2RhdGEgPSB1c1gyWShjYXJkKTsKLQlody0+b3BzLm9wZW4gPSBzbmRfdXNYMllfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSBzbmRfdXNYMllfaHdkZXBfcmVsZWFzZTsKIAlody0+b3BzLmRzcF9zdGF0dXMgPSBzbmRfdXNYMllfaHdkZXBfZHNwX3N0YXR1czsKIAlody0+b3BzLmRzcF9sb2FkID0gc25kX3VzWDJZX2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5vcHMubW1hcCA9IHNuZF91czQyOGN0bHNfbW1hcDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCmluZGV4IDcwYjk2MzUuLjI0MzkzZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJCXMtPmlkbGVfaW5zaXplIC09IG1heF9kaWZmIC0gbWF4X2RpZmZfMDsKIAkJcy0+aWRsZV9pbnNpemUgKz0gdXJiX3NpemUgLSBzLT5wZXJpb2Rfc2l6ZTsKIAkJaWYgKHMtPmlkbGVfaW5zaXplIDwgMCkgewotCQkJc25kX3ByaW50aygiJWkgJWkgJWlcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWkgJWkgJWlcbiIsCiAJCQkJICAgcy0+aWRsZV9pbnNpemUsIHVyYl9zaXplLCBzLT5wZXJpb2Rfc2l6ZSk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSBpZiAocy0+aWRsZV9pbnNpemUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwppbmRleCAxMTYzOWJkLi41Y2UwZGEyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYwpAQCAtMjI3LDkgKzIyNyw5IEBACiAJCiAJaWYgKHVzWDJZLT5VUzA0KSB7CiAJCWlmICgwID09IHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQpCi0JCQlkbworCQkJZG8gewogCQkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVzWDJZLT5VUzA0LT51cmJbdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCsrXSwgR0ZQX0FUT01JQyk7Ci0JCQl3aGlsZSAoIWVyciAmJiB1c1gyWS0+VVMwNC0+c3VibWl0dGVkIDwgdXNYMlktPlVTMDQtPmxlbik7CisJCQl9IHdoaWxlICghZXJyICYmIHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQgPCB1c1gyWS0+VVMwNC0+bGVuKTsKIAl9IGVsc2UKIAkJaWYgKHVzNDI4Y3RscyAmJiB1czQyOGN0bHMtPnA0b3V0TGFzdCA+PSAwICYmIHVzNDI4Y3Rscy0+cDRvdXRMYXN0IDwgTl91czQyOF9wNG91dF9CVUZTKSB7CiAJCQlpZiAodXM0MjhjdGxzLT5wNG91dExhc3QgIT0gdXM0MjhjdGxzLT5wNG91dFNlbnQpIHsKQEAgLTMzMywxOCArMzMzLDIxIEBACiAJeyAvKiB0ZXJtaW5hdG9yICovIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnVzWDJZX2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHVzWDJZX2NyZWF0ZV9jYXJkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZGV2OwogCXN0cnVjdCBzbmRfY2FyZCAqCWNhcmQ7CisJaW50IGVycjsKKwogCWZvciAoZGV2ID0gMDsgZGV2IDwgU05EUlZfQ0FSRFM7ICsrZGV2KQogCQlpZiAoZW5hYmxlW2Rldl0gJiYgIXNuZF91c1gyWV9jYXJkX3VzZWRbZGV2XSkKIAkJCWJyZWFrOwogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiBOVUxMOwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgdXNYMllkZXYpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHVzWDJZZGV2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF91c1gyWV9jYXJkX3VzZWRbdXNYMlkoY2FyZCktPmNoaXAuaW5kZXggPSBkZXZdID0gMTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfdXNYMllfY2FyZF9wcml2YXRlX2ZyZWU7CiAJdXNYMlkoY2FyZCktPmNoaXAuZGV2ID0gZGV2aWNlOwpAQCAtMzYyLDI2ICszNjUsMzYgQEAKIAkJdXNYMlkoY2FyZCktPmNoaXAuZGV2LT5idXMtPmJ1c251bSwgdXNYMlkoY2FyZCktPmNoaXAuZGV2LT5kZXZudW0KIAkJKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgdm9pZCAqdXNYMllfdXNiX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkKQorc3RhdGljIGludCB1c1gyWV91c2JfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCwKKwkJCSAgIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCWludAkJZXJyOwogCXN0cnVjdCBzbmRfY2FyZCAqCWNhcmQ7CisKKwkqY2FyZHAgPSBOVUxMOwogCWlmIChsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IDB4MTYwNCB8fAogCSAgICAobGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTMTIyICYmCiAJICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVMyMjQgJiYKLQkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzQyOCkgfHwKLQkgICAgIShjYXJkID0gdXNYMllfY3JlYXRlX2NhcmQoZGV2aWNlKSkpCi0JCXJldHVybiBOVUxMOworCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTNDI4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSB1c1gyWV9jcmVhdGVfY2FyZChkZXZpY2UsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHVzWDJZX2h3ZGVwX25ldyhjYXJkLCBkZXZpY2UpKSA8IDAgIHx8CiAJICAgIChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzg5LDEzICs0MDIsMTQgQEAKICAqLwogc3RhdGljIGludCBzbmRfdXNYMllfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQl2b2lkICpjaGlwOwotCWNoaXAgPSB1c1gyWV91c2JfcHJvYmUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgaW50ZiwgaWQpOwotCWlmIChjaGlwKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2hpcCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gLUVJTzsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKworCWVyciA9IHVzWDJZX3VzYl9wcm9iZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmLCBpZCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWRldl9zZXRfZHJ2ZGF0YSgmaW50Zi0+ZGV2LCBjYXJkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3VzWDJZX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaAppbmRleCBjMzM4MmZkLi45YzRmYjg0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKQEAgLTE4LDMgKzE4LDUgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBjYXB0dXJlZF9pc29fZnJhbWVzOwogCWludCBjYXB0dXJlX2lzb19zdGFydDsKIH07CisKK2ludCB1c1gyWV9od2RlcF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuYyBiL3ZpcnQva3ZtL2lvYXBpYy5jCmluZGV4IDIzYjgxY2YuLmMzYjk5ZGUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5jCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5jCkBAIC04MywyNCArODMsMjggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaWR4KQorc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaWR4KQogewogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSAqcGVudDsKKwlpbnQgaW5qZWN0ZWQgPSAtMTsKIAogCXBlbnQgPSAmaW9hcGljLT5yZWRpcnRibFtpZHhdOwogCiAJaWYgKCFwZW50LT5maWVsZHMubWFzaykgewotCQlpbnQgaW5qZWN0ZWQgPSBpb2FwaWNfZGVsaXZlcihpb2FwaWMsIGlkeCk7CisJCWluamVjdGVkID0gaW9hcGljX2RlbGl2ZXIoaW9hcGljLCBpZHgpOwogCQlpZiAoaW5qZWN0ZWQgJiYgcGVudC0+ZmllbGRzLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKIAkJCXBlbnQtPmZpZWxkcy5yZW1vdGVfaXJyID0gMTsKIAl9CiAJaWYgKCFwZW50LT5maWVsZHMudHJpZ19tb2RlKQogCQlpb2FwaWMtPmlyciAmPSB+KDEgPDwgaWR4KTsKKworCXJldHVybiBpbmplY3RlZDsKIH0KIAogc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpCiB7CiAJdW5zaWduZWQgaW5kZXg7CisJYm9vbCBtYXNrX2JlZm9yZSwgbWFza19hZnRlcjsKIAogCXN3aXRjaCAoaW9hcGljLT5pb3JlZ3NlbCkgewogCWNhc2UgSU9BUElDX1JFR19WRVJTSU9OOgpAQCAtMTIwLDYgKzEyNCw3IEBACiAJCWlvYXBpY19kZWJ1ZygiY2hhbmdlIHJlZGlyIGluZGV4ICV4IHZhbCAleFxuIiwgaW5kZXgsIHZhbCk7CiAJCWlmIChpbmRleCA+PSBJT0FQSUNfTlVNX1BJTlMpCiAJCQlyZXR1cm47CisJCW1hc2tfYmVmb3JlID0gaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLm1hc2s7CiAJCWlmIChpb2FwaWMtPmlvcmVnc2VsICYgMSkgewogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyAmPSAweGZmZmZmZmZmOwogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyB8PSAodTY0KSB2YWwgPDwgMzI7CkBAIC0xMjgsNiArMTMzLDkgQEAKIAkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgfD0gKHUzMikgdmFsOwogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLnJlbW90ZV9pcnIgPSAwOwogCQl9CisJCW1hc2tfYWZ0ZXIgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKKwkJaWYgKG1hc2tfYmVmb3JlICE9IG1hc2tfYWZ0ZXIpCisJCQlrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhpb2FwaWMtPmt2bSwgaW5kZXgsIG1hc2tfYWZ0ZXIpOwogCQlpZiAoaW9hcGljLT5pcnIgJiAoMSA8PCBpbmRleCkpCiAJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGluZGV4KTsKIAkJYnJlYWs7CkBAIC0yMDIsNyArMjEwLDcgQEAKIAl1OCB0cmlnX21vZGUgPSBpb2FwaWMtPnJlZGlydGJsW2lycV0uZmllbGRzLnRyaWdfbW9kZTsKIAl1MzIgZGVsaXZlcl9iaXRtYXNrOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlpbnQgdmNwdV9pZCwgciA9IDA7CisJaW50IHZjcHVfaWQsIHIgPSAtMTsKIAogCWlvYXBpY19kZWJ1ZygiZGVzdD0leCBkZXN0X21vZGU9JXggZGVsaXZlcnlfbW9kZT0leCAiCiAJCSAgICAgInZlY3Rvcj0leCB0cmlnX21vZGU9JXhcbiIsCkBAIC0yNDIsNyArMjUwLDkgQEAKIAkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CiAJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOwogCQkJaWYgKHZjcHUpIHsKLQkJCQlyID0gaW9hcGljX2lual9pcnEoaW9hcGljLCB2Y3B1LCB2ZWN0b3IsCisJCQkJaWYgKHIgPCAwKQorCQkJCQlyID0gMDsKKwkJCQlyICs9IGlvYXBpY19pbmpfaXJxKGlvYXBpYywgdmNwdSwgdmVjdG9yLAogCQkJCQkgICAgICAgdHJpZ19tb2RlLCBkZWxpdmVyeV9tb2RlKTsKIAkJCX0KIAkJfQpAQCAtMjUzLDggKzI2MywxMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKIAkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07Ci0JCQlpZiAodmNwdSkKKwkJCWlmICh2Y3B1KSB7CiAJCQkJaW9hcGljX2lual9ubWkodmNwdSk7CisJCQkJciA9IDE7CisJCQl9CiAJCQllbHNlCiAJCQkJaW9hcGljX2RlYnVnKCJOTUkgdG8gdmNwdSAlZCBmYWlsZWRcbiIsCiAJCQkJCQl2Y3B1LT52Y3B1X2lkKTsKQEAgLTI2OCwxMSArMjgwLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLXZvaWQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCkKK2ludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKQogewogCXUzMiBvbGRfaXJyID0gaW9hcGljLT5pcnI7CiAJdTMyIG1hc2sgPSAxIDw8IGlycTsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgZW50cnk7CisJaW50IHJldCA9IDE7CiAKIAlpZiAoaXJxID49IDAgJiYgaXJxIDwgSU9BUElDX05VTV9QSU5TKSB7CiAJCWVudHJ5ID0gaW9hcGljLT5yZWRpcnRibFtpcnFdOwpAQCAtMjgzLDI1ICsyOTYsMjYgQEAKIAkJCWlvYXBpYy0+aXJyIHw9IG1hc2s7CiAJCQlpZiAoKCFlbnRyeS5maWVsZHMudHJpZ19tb2RlICYmIG9sZF9pcnIgIT0gaW9hcGljLT5pcnIpCiAJCQkgICAgfHwgIWVudHJ5LmZpZWxkcy5yZW1vdGVfaXJyKQotCQkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxKTsKKwkJCQlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSk7CiAJCX0KIAl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19rdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGdzaSwKK3N0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBwaW4sCiAJCQkJICAgIGludCB0cmlnZ2VyX21vZGUpCiB7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5ICplbnQ7CiAKLQllbnQgPSAmaW9hcGljLT5yZWRpcnRibFtnc2ldOworCWVudCA9ICZpb2FwaWMtPnJlZGlydGJsW3Bpbl07CiAKLQlrdm1fbm90aWZ5X2Fja2VkX2lycShpb2FwaWMtPmt2bSwgZ3NpKTsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShpb2FwaWMtPmt2bSwgS1ZNX0lSUUNISVBfSU9BUElDLCBwaW4pOwogCiAJaWYgKHRyaWdnZXJfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykgewogCQlBU1NFUlQoZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKTsKIAkJZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDA7Ci0JCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBnc2kpKSkKLQkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgZ3NpKTsKKwkJaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IHBpbikpKQorCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBwaW4pOwogCX0KIH0KIApAQCAtNDI2LDMgKzQ0MCw0IEBACiAJa3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoJmt2bS0+bW1pb19idXMsICZpb2FwaWMtPmRldik7CiAJcmV0dXJuIDA7CiB9CisKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5oIGIvdmlydC9rdm0vaW9hcGljLmgKaW5kZXggNDljOTU4MS4uYTM0YmQ1ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmgKKysrIGIvdmlydC9rdm0vaW9hcGljLmgKQEAgLTgzLDcgKzgzLDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXRtYXApOwogdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKTsKIGludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKLXZvaWQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCk7CitpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCk7CiB2b2lkIGt2bV9pb2FwaWNfcmVzZXQoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyk7CiB1MzIga3ZtX2lvYXBpY19nZXRfZGVsaXZlcnlfYml0bWFzayhzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1OCBkZXN0LAogCQkJCXU4IGRlc3RfbW9kZSk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwppbmRleCBhYTVkMWU1Li44NjRhYzU0IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pcnFfY29tbS5jCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTIwLDM1ICsyMCwxMzIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKworI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KKwogI2luY2x1ZGUgImlycS5oIgogCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAKLS8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrdm0tPmxvY2sgbXV0ZXggaGVsZCAqLwotdm9pZCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW50IGt2bV9zZXRfcGljX2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQogewotCXVuc2lnbmVkIGxvbmcgKmlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CisjaWZkZWYgQ09ORklHX1g4NgorCXJldHVybiBrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgZS0+aXJxY2hpcC5waW4sIGxldmVsKTsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CiAKLQkvKiBMb2dpY2FsIE9SIGZvciBsZXZlbCB0cmlnIGludGVycnVwdCAqLwotCWlmIChsZXZlbCkKLQkJc2V0X2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOwotCWVsc2UKLQkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CitzdGF0aWMgaW50IGt2bV9zZXRfaW9hcGljX2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQoreworCXJldHVybiBrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIGUtPmlycWNoaXAucGluLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3NldF9tc2koc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCisJCSAgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBsZXZlbCkKK3sKKwlpbnQgdmNwdV9pZCwgciA9IC0xOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gaW9hcGljX2lycWNoaXAoa3ZtKTsKKwlpbnQgZGVzdF9pZCA9IChlLT5tc2kuYWRkcmVzc19sbyAmIE1TSV9BRERSX0RFU1RfSURfTUFTSykKKwkJCT4+IE1TSV9BRERSX0RFU1RfSURfU0hJRlQ7CisJaW50IHZlY3RvciA9IChlLT5tc2kuZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKQorCQkJPj4gTVNJX0RBVEFfVkVDVE9SX1NISUZUOworCWludCBkZXN0X21vZGUgPSB0ZXN0X2JpdChNU0lfQUREUl9ERVNUX01PREVfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmFkZHJlc3NfbG8pOworCWludCB0cmlnX21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9UUklHR0VSX1NISUZULAorCQkJCSh1bnNpZ25lZCBsb25nICopJmUtPm1zaS5kYXRhKTsKKwlpbnQgZGVsaXZlcnlfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmRhdGEpOworCXUzMiBkZWxpdmVyX2JpdG1hc2s7CisKKwlCVUdfT04oIWlvYXBpYyk7CisKKwlkZWxpdmVyX2JpdG1hc2sgPSBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKGlvYXBpYywKKwkJCQlkZXN0X2lkLCBkZXN0X21vZGUpOworCS8qIElPQVBJQyBkZWxpdmVyeSBtb2RlIHZhbHVlIGlzIHRoZSBzYW1lIGFzIE1TSSBoZXJlICovCisJc3dpdGNoIChkZWxpdmVyeV9tb2RlKSB7CisJY2FzZSBJT0FQSUNfTE9XRVNUX1BSSU9SSVRZOgorCQl2Y3B1ID0ga3ZtX2dldF9sb3dlc3RfcHJpb192Y3B1KGlvYXBpYy0+a3ZtLCB2ZWN0b3IsCisJCQkJZGVsaXZlcl9iaXRtYXNrKTsKKwkJaWYgKHZjcHUgIT0gTlVMTCkKKwkJCXIgPSBrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBudWxsIGxvd2VzdCBwcmlvcml0eSB2Y3B1IVxuIik7CisJCWJyZWFrOworCWNhc2UgSU9BUElDX0ZJWEVEOgorCQlmb3IgKHZjcHVfaWQgPSAwOyBkZWxpdmVyX2JpdG1hc2sgIT0gMDsgdmNwdV9pZCsrKSB7CisJCQlpZiAoIShkZWxpdmVyX2JpdG1hc2sgJiAoMSA8PCB2Y3B1X2lkKSkpCisJCQkJY29udGludWU7CisJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOworCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKKwkJCWlmICh2Y3B1KSB7CisJCQkJaWYgKHIgPCAwKQorCQkJCQlyID0gMDsKKwkJCQlyICs9IGt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKworLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgPCAwICAgSW50ZXJydXB0IHdhcyBpZ25vcmVkIChtYXNrZWQgb3Igbm90IGRlbGl2ZXJlZCBmb3Igb3RoZXIgcmVhc29ucykKKyAqICA9IDAgICBJbnRlcnJ1cHQgd2FzIGNvYWxlc2NlZCAocHJldmlvdXMgaXJxIGlzIHN0aWxsIHBlbmRpbmcpCisgKiAgPiAwICAgTnVtYmVyIG9mIENQVXMgaW50ZXJydXB0IHdhcyBkZWxpdmVyZWQgdG8KKyAqLworaW50IGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBsb25nICppcnFfc3RhdGUsIHNpZ19sZXZlbDsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAoaXJxIDwgS1ZNX0lPQVBJQ19OVU1fUElOUykgeworCQlpcnFfc3RhdGUgPSAodW5zaWduZWQgbG9uZyAqKSZrdm0tPmFyY2guaXJxX3N0YXRlc1tpcnFdOworCisJCS8qIExvZ2ljYWwgT1IgZm9yIGxldmVsIHRyaWcgaW50ZXJydXB0ICovCisJCWlmIChsZXZlbCkKKwkJCXNldF9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7CisJCXNpZ19sZXZlbCA9ICEhKCppcnFfc3RhdGUpOworCX0gZWxzZSAvKiBEZWFsIHdpdGggTVNJL01TSS1YICovCisJCXNpZ19sZXZlbCA9IDE7CiAKIAkvKiBOb3QgcG9zc2libGUgdG8gZGV0ZWN0IGlmIHRoZSBndWVzdCB1c2VzIHRoZSBQSUMgb3IgdGhlCiAJICogSU9BUElDLiAgU28gc2V0IHRoZSBiaXQgaW4gYm90aC4gVGhlIGd1ZXN0IHdpbGwgaWdub3JlCiAJICogd3JpdGVzIHRvIHRoZSB1bnVzZWQgb25lLgogCSAqLwotCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgaXJxLCAhISgqaXJxX3N0YXRlKSk7Ci0jaWZkZWYgQ09ORklHX1g4NgotCWt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBpcnEsICEhKCppcnFfc3RhdGUpKTsKLSNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmt2bS0+aXJxX3JvdXRpbmcsIGxpbmspCisJCWlmIChlLT5nc2kgPT0gaXJxKSB7CisJCQlpbnQgciA9IGUtPnNldChlLCBrdm0sIHNpZ19sZXZlbCk7CisJCQlpZiAociA8IDApCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IHIgKyAoKHJldCA8IDApID8gMCA6IHJldCk7CisJCX0KKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKQordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbikKIHsKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZTsKIAlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW47CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgZ3NpID0gcGluOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAma3ZtLT5pcnFfcm91dGluZywgbGluaykKKwkJaWYgKGUtPmlycWNoaXAuaXJxY2hpcCA9PSBpcnFjaGlwICYmCisJCSAgICBlLT5pcnFjaGlwLnBpbiA9PSBwaW4pIHsKKwkJCWdzaSA9IGUtPmdzaTsKKwkJCWJyZWFrOworCQl9CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShraWFuLCBuLCAma3ZtLT5hcmNoLmlycV9hY2tfbm90aWZpZXJfbGlzdCwgbGluaykKIAkJaWYgKGtpYW4tPmdzaSA9PSBnc2kpCkBAIC05OSwzICsxOTYsMTc3IEBACiAJCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaV0pOwogCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7CiB9CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKK3sKKwlraW1uLT5pcnEgPSBpcnE7CisJaGxpc3RfYWRkX2hlYWQoJmtpbW4tPmxpbmssICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7Cit9CisKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICAgIHN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW4pCit7CisJaGxpc3RfZGVsKCZraW1uLT5saW5rKTsKK30KKwordm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGJvb2wgbWFzaykKK3sKKwlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoa2ltbiwgbiwgJmt2bS0+bWFza19ub3RpZmllcl9saXN0LCBsaW5rKQorCQlpZiAoa2ltbi0+aXJxID09IGlycSkKKwkJCWtpbW4tPmZ1bmMoa2ltbiwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGxpc3RfaGVhZCAqaXJxX3JvdXRpbmcpCit7CisJc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG4sIGlycV9yb3V0aW5nLCBsaW5rKQorCQlrZnJlZShlKTsKK30KKwordm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJX19rdm1fZnJlZV9pcnFfcm91dGluZygma3ZtLT5pcnFfcm91dGluZyk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICp1ZSkKK3sKKwlpbnQgciA9IC1FSU5WQUw7CisJaW50IGRlbHRhOworCisJZS0+Z3NpID0gdWUtPmdzaTsKKwlzd2l0Y2ggKHVlLT50eXBlKSB7CisJY2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDoKKwkJZGVsdGEgPSAwOworCQlzd2l0Y2ggKHVlLT51LmlycWNoaXAuaXJxY2hpcCkgeworCQljYXNlIEtWTV9JUlFDSElQX1BJQ19NQVNURVI6CisJCQllLT5zZXQgPSBrdm1fc2V0X3BpY19pcnE7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9QSUNfU0xBVkU6CisJCQllLT5zZXQgPSBrdm1fc2V0X3BpY19pcnE7CisJCQlkZWx0YSA9IDg7CisJCQlicmVhazsKKwkJY2FzZSBLVk1fSVJRQ0hJUF9JT0FQSUM6CisJCQkJZS0+c2V0ID0ga3ZtX3NldF9pb2FwaWNfaXJxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCQllLT5pcnFjaGlwLmlycWNoaXAgPSB1ZS0+dS5pcnFjaGlwLmlycWNoaXA7CisJCWUtPmlycWNoaXAucGluID0gdWUtPnUuaXJxY2hpcC5waW4gKyBkZWx0YTsKKwkJYnJlYWs7CisJY2FzZSBLVk1fSVJRX1JPVVRJTkdfTVNJOgorCQllLT5zZXQgPSBrdm1fc2V0X21zaTsKKwkJZS0+bXNpLmFkZHJlc3NfbG8gPSB1ZS0+dS5tc2kuYWRkcmVzc19sbzsKKwkJZS0+bXNpLmFkZHJlc3NfaGkgPSB1ZS0+dS5tc2kuYWRkcmVzc19oaTsKKwkJZS0+bXNpLmRhdGEgPSB1ZS0+dS5tc2kuZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCXIgPSAwOworb3V0OgorCXJldHVybiByOworfQorCisKK2ludCBrdm1fc2V0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlLAorCQkJdW5zaWduZWQgbnIsCisJCQl1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlycV9saXN0ID0gTElTVF9IRUFEX0lOSVQoaXJxX2xpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgdG1wID0gTElTVF9IRUFEX0lOSVQodG1wKTsKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSA9IE5VTEw7CisJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgKytpKSB7CisJCXIgPSAtRUlOVkFMOworCQlpZiAodWUtPmdzaSA+PSBLVk1fTUFYX0lSUV9ST1VURVMpCisJCQlnb3RvIG91dDsKKwkJaWYgKHVlLT5mbGFncykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOT01FTTsKKwkJZSA9IGt6YWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZSkKKwkJCWdvdG8gb3V0OworCQlyID0gc2V0dXBfcm91dGluZ19lbnRyeShlLCB1ZSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCSsrdWU7CisJCWxpc3RfYWRkKCZlLT5saW5rLCAmaXJxX2xpc3QpOworCQllID0gTlVMTDsKKwl9CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWxpc3Rfc3BsaWNlKCZrdm0tPmlycV9yb3V0aW5nLCAmdG1wKTsKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CisJbGlzdF9zcGxpY2UoJmlycV9saXN0LCAma3ZtLT5pcnFfcm91dGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmlycV9saXN0KTsKKwlsaXN0X3NwbGljZSgmdG1wLCAmaXJxX2xpc3QpOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKworCXIgPSAwOworCitvdXQ6CisJa2ZyZWUoZSk7CisJX19rdm1fZnJlZV9pcnFfcm91dGluZygmaXJxX2xpc3QpOworCXJldHVybiByOworfQorCisjZGVmaW5lIElPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkgXAorCXsgLmdzaSA9IGlycSwgLnR5cGUgPSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCwJXAorCSAgLnUuaXJxY2hpcC5pcnFjaGlwID0gS1ZNX0lSUUNISVBfSU9BUElDLCAudS5pcnFjaGlwLnBpbiA9IChpcnEpIH0KKyNkZWZpbmUgUk9VVElOR19FTlRSWTEoaXJxKSBJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpCisKKyNpZmRlZiBDT05GSUdfWDg2CisjICBkZWZpbmUgUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcCisJeyAuZ3NpID0gaXJxLCAudHlwZSA9IEtWTV9JUlFfUk9VVElOR19JUlFDSElQLAlcCisJICAudS5pcnFjaGlwLmlycWNoaXAgPSBTRUxFQ1RfUElDKGlycSksIC51LmlycWNoaXAucGluID0gKGlycSkgJSA4IH0KKyMgIGRlZmluZSBST1VUSU5HX0VOVFJZMihpcnEpIFwKKwlJT0FQSUNfUk9VVElOR19FTlRSWShpcnEpLCBQSUNfUk9VVElOR19FTlRSWShpcnEpCisjZWxzZQorIyAgZGVmaW5lIFJPVVRJTkdfRU5UUlkyKGlycSkgXAorCUlPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBkZWZhdWx0X3JvdXRpbmdbXSA9IHsKKwlST1VUSU5HX0VOVFJZMigwKSwgUk9VVElOR19FTlRSWTIoMSksCisJUk9VVElOR19FTlRSWTIoMiksIFJPVVRJTkdfRU5UUlkyKDMpLAorCVJPVVRJTkdfRU5UUlkyKDQpLCBST1VUSU5HX0VOVFJZMig1KSwKKwlST1VUSU5HX0VOVFJZMig2KSwgUk9VVElOR19FTlRSWTIoNyksCisJUk9VVElOR19FTlRSWTIoOCksIFJPVVRJTkdfRU5UUlkyKDkpLAorCVJPVVRJTkdfRU5UUlkyKDEwKSwgUk9VVElOR19FTlRSWTIoMTEpLAorCVJPVVRJTkdfRU5UUlkyKDEyKSwgUk9VVElOR19FTlRSWTIoMTMpLAorCVJPVVRJTkdfRU5UUlkyKDE0KSwgUk9VVElOR19FTlRSWTIoMTUpLAorCVJPVVRJTkdfRU5UUlkxKDE2KSwgUk9VVElOR19FTlRSWTEoMTcpLAorCVJPVVRJTkdfRU5UUlkxKDE4KSwgUk9VVElOR19FTlRSWTEoMTkpLAorCVJPVVRJTkdfRU5UUlkxKDIwKSwgUk9VVElOR19FTlRSWTEoMjEpLAorCVJPVVRJTkdfRU5UUlkxKDIyKSwgUk9VVElOR19FTlRSWTEoMjMpLAorI2lmZGVmIENPTkZJR19JQTY0CisJUk9VVElOR19FTlRSWTEoMjQpLCBST1VUSU5HX0VOVFJZMSgyNSksCisJUk9VVElOR19FTlRSWTEoMjYpLCBST1VUSU5HX0VOVFJZMSgyNyksCisJUk9VVElOR19FTlRSWTEoMjgpLCBST1VUSU5HX0VOVFJZMSgyOSksCisJUk9VVElOR19FTlRSWTEoMzApLCBST1VUSU5HX0VOVFJZMSgzMSksCisJUk9VVElOR19FTlRSWTEoMzIpLCBST1VUSU5HX0VOVFJZMSgzMyksCisJUk9VVElOR19FTlRSWTEoMzQpLCBST1VUSU5HX0VOVFJZMSgzNSksCisJUk9VVElOR19FTlRSWTEoMzYpLCBST1VUSU5HX0VOVFJZMSgzNyksCisJUk9VVElOR19FTlRSWTEoMzgpLCBST1VUSU5HX0VOVFJZMSgzOSksCisJUk9VVElOR19FTlRSWTEoNDApLCBST1VUSU5HX0VOVFJZMSg0MSksCisJUk9VVElOR19FTlRSWTEoNDIpLCBST1VUSU5HX0VOVFJZMSg0MyksCisJUk9VVElOR19FTlRSWTEoNDQpLCBST1VUSU5HX0VOVFJZMSg0NSksCisJUk9VVElOR19FTlRSWTEoNDYpLCBST1VUSU5HX0VOVFJZMSg0NyksCisjZW5kaWYKK307CisKK2ludCBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJcmV0dXJuIGt2bV9zZXRfaXJxX3JvdXRpbmcoa3ZtLCBkZWZhdWx0X3JvdXRpbmcsCisJCQkJICAgQVJSQVlfU0laRShkZWZhdWx0X3JvdXRpbmcpLCAwKTsKK30KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDI5YTY2N2MuLjYwNTY5N2UgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNDcsMTAgKzQ3LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2Ci0jaW5jbHVkZSA8YXNtL21zaWRlZi5oPgotI2VuZGlmCi0KICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKICNpbmNsdWRlICJjb2FsZXNjZWRfbW1pby5oIgogI2VuZGlmCkBAIC04NSw1NyArODEsNiBAQAogc3RhdGljIGJvb2wga3ZtX3JlYm9vdGluZzsKIAogI2lmZGVmIEtWTV9DQVBfREVWSUNFX0FTU0lHTk1FTlQKLQotI2lmZGVmIENPTkZJR19YODYKLXN0YXRpYyB2b2lkIGFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICpkZXYpCi17Ci0JaW50IHZjcHVfaWQ7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChkZXYtPmt2bSk7Ci0JaW50IGRlc3RfaWQgPSAoZGV2LT5ndWVzdF9tc2kuYWRkcmVzc19sbyAmIE1TSV9BRERSX0RFU1RfSURfTUFTSykKLQkJCT4+IE1TSV9BRERSX0RFU1RfSURfU0hJRlQ7Ci0JaW50IHZlY3RvciA9IChkZXYtPmd1ZXN0X21zaS5kYXRhICYgTVNJX0RBVEFfVkVDVE9SX01BU0spCi0JCQk+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQ7Ci0JaW50IGRlc3RfbW9kZSA9IHRlc3RfYml0KE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvKTsKLQlpbnQgdHJpZ19tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfVFJJR0dFUl9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5kYXRhKTsKLQlpbnQgZGVsaXZlcnlfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGV2LT5ndWVzdF9tc2kuZGF0YSk7Ci0JdTMyIGRlbGl2ZXJfYml0bWFzazsKLQotCUJVR19PTighaW9hcGljKTsKLQotCWRlbGl2ZXJfYml0bWFzayA9IGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soaW9hcGljLAotCQkJCWRlc3RfaWQsIGRlc3RfbW9kZSk7Ci0JLyogSU9BUElDIGRlbGl2ZXJ5IG1vZGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgTVNJIGhlcmUgKi8KLQlzd2l0Y2ggKGRlbGl2ZXJ5X21vZGUpIHsKLQljYXNlIElPQVBJQ19MT1dFU1RfUFJJT1JJVFk6Ci0JCXZjcHUgPSBrdm1fZ2V0X2xvd2VzdF9wcmlvX3ZjcHUoaW9hcGljLT5rdm0sIHZlY3RvciwKLQkJCQlkZWxpdmVyX2JpdG1hc2spOwotCQlpZiAodmNwdSAhPSBOVUxMKQotCQkJa3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gImt2bTogbnVsbCBsb3dlc3QgcHJpb3JpdHkgdmNwdSFcbiIpOwotCQlicmVhazsKLQljYXNlIElPQVBJQ19GSVhFRDoKLQkJZm9yICh2Y3B1X2lkID0gMDsgZGVsaXZlcl9iaXRtYXNrICE9IDA7IHZjcHVfaWQrKykgewotCQkJaWYgKCEoZGVsaXZlcl9iaXRtYXNrICYgKDEgPDwgdmNwdV9pZCkpKQotCQkJCWNvbnRpbnVlOwotCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKLQkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07Ci0JCQlpZiAodmNwdSkKLQkJCQlrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJrdm06IHVuc3VwcG9ydGVkIE1TSSBkZWxpdmVyeSBtb2RlXG4iKTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldikge30KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICprdm1fZmluZF9hc3NpZ25lZF9kZXYoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJCSAgICAgIGludCBhc3NpZ25lZF9kZXZfaWQpCiB7CkBAIC0xNjIsMTMgKzEwNywxMCBAQAogCSAqIGZpbmVyLWdyYWluZWQgbG9jaywgdXBkYXRlIHRoaXMKIAkgKi8KIAltdXRleF9sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7Ci0JaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYKQotCQlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwKLQkJCSAgICBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCi0JCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOwotCWVsc2UgaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYKLQkJCQlLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkgewotCQlhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKGFzc2lnbmVkX2Rldik7CisJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKKwkJICAgIGFzc2lnbmVkX2Rldi0+Z3Vlc3RfaXJxLCAxKTsKKworCWlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSB7CiAJCWVuYWJsZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSk7CiAJCWFzc2lnbmVkX2Rldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKIAl9CkBAIC0zMzEsMTggKzI3MywyNCBAQAogewogCWludCByOwogCisJYWRldi0+Z3Vlc3RfaXJxID0gYWlycS0+Z3Vlc3RfaXJxOwogCWlmIChhaXJxLT5mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJKSB7CiAJCS8qIHg4NiBkb24ndCBjYXJlIHVwcGVyIGFkZHJlc3Mgb2YgZ3Vlc3QgbXNpIG1lc3NhZ2UgYWRkciAqLwogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgfD0gS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0k7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmPSB+S1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYOwotCQlhZGV2LT5ndWVzdF9tc2kuYWRkcmVzc19sbyA9IGFpcnEtPmd1ZXN0X21zaS5hZGRyX2xvOwotCQlhZGV2LT5ndWVzdF9tc2kuZGF0YSA9IGFpcnEtPmd1ZXN0X21zaS5kYXRhOwogCQlhZGV2LT5hY2tfbm90aWZpZXIuZ3NpID0gLTE7CiAJfSBlbHNlIGlmIChtc2kyaW50eCkgewogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgfD0gS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9JTlRYOwogCQlhZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJj0gfktWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJOwotCQlhZGV2LT5ndWVzdF9pcnEgPSBhaXJxLT5ndWVzdF9pcnE7CiAJCWFkZXYtPmFja19ub3RpZmllci5nc2kgPSBhaXJxLT5ndWVzdF9pcnE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogR3Vlc3QgcmVxdWlyZSB0byBkaXNhYmxlIGRldmljZSBNU0ksIHdlIGRpc2FibGUgTVNJIGFuZAorCQkgKiByZS1lbmFibGUgSU5UeCBieSBkZWZhdWx0IGFnYWluLiBOb3RpY2UgaXQncyBvbmx5IGZvcgorCQkgKiBub24tbXNpMmludHguCisJCSAqLworCQlhc3NpZ25lZF9kZXZpY2VfdXBkYXRlX2ludHgoa3ZtLCBhZGV2LCBhaXJxKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9BU1NJR05FRF9ERVZfSE9TVF9NU0kpCkBAIC0zNzksNiArMzI3LDcgQEAKIHsKIAlpbnQgciA9IDA7CiAJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICptYXRjaDsKKwl1MzIgY3VycmVudF9mbGFncyA9IDAsIGNoYW5nZWRfZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCkBAIC00MTYsOCArMzY1LDEzIEBACiAJCX0KIAl9CiAKLQlpZiAoKCFtc2kyaW50eCAmJgotCSAgICAgKGFzc2lnbmVkX2lycS0+ZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fRU5BQkxFX01TSSkpIHx8CisJaWYgKChtYXRjaC0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX01TSSkgJiYKKwkJIChtYXRjaC0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kpKQorCQljdXJyZW50X2ZsYWdzIHw9IEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJOworCisJY2hhbmdlZF9mbGFncyA9IGFzc2lnbmVkX2lycS0+ZmxhZ3MgXiBjdXJyZW50X2ZsYWdzOworCisJaWYgKChjaGFuZ2VkX2ZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX01TSV9BQ1RJT04pIHx8CiAJICAgIChtc2kyaW50eCAmJiBtYXRjaC0+ZGV2LT5tc2lfZW5hYmxlZCkpIHsKICNpZmRlZiBDT05GSUdfWDg2CiAJCXIgPSBhc3NpZ25lZF9kZXZpY2VfdXBkYXRlX21zaShrdm0sIG1hdGNoLCBhc3NpZ25lZF9pcnEpOwpAQCAtNTYzLDcgKzUxNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhc3NpZ25lZF9kZXYtPmZsYWdzICYgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VKQorCWlmIChtYXRjaC0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpCiAJCWt2bV9kZWFzc2lnbl9kZXZpY2Uoa3ZtLCBtYXRjaCk7CiAKIAlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBtYXRjaCk7CkBAIC01ODEsOCArNTM1LDEwIEBACiAKIGlubGluZSBpbnQga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCi0JCXJldHVybiBQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gY29tcG91bmRfaGVhZChwZm5fdG9fcGFnZShwZm4pKTsKKwkJcmV0dXJuIFBhZ2VSZXNlcnZlZChwYWdlKTsKKwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTgyOCw2ICs3ODQsMTAgQEAKIAogCWlmIChJU19FUlIoa3ZtKSkKIAkJZ290byBvdXQ7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CisJSU5JVF9ITElTVF9IRUFEKCZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7CisjZW5kaWYKIAogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKQEAgLTkwOSw2ICs4NjksNyBAQAogCXNwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfZGVsKCZrdm0tPnZtX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CisJa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoa3ZtKTsKIAlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+cGlvX2J1cyk7CiAJa3ZtX2lvX2J1c19kZXN0cm95KCZrdm0tPm1taW9fYnVzKTsKICNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKQEAgLTE3NTUsMTMgKzE3MTYsMTMgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KLQljYXNlIEtWTV9ERUJVR19HVUVTVDogewotCQlzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0IGRiZzsKKwljYXNlIEtWTV9TRVRfR1VFU1RfREVCVUc6IHsKKwkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyBkYmc7CiAKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZGJnLCBhcmdwLCBzaXplb2YgZGJnKSkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdCh2Y3B1LCAmZGJnKTsKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHZjcHUsICZkYmcpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTE5MjksNiArMTg5MCwzNiBAQAogCQlicmVhazsKIAl9CiAjZW5kaWYKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisJY2FzZSBLVk1fU0VUX0dTSV9ST1VUSU5HOiB7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmcgcm91dGluZzsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZyBfX3VzZXIgKnVyb3V0aW5nOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5ICplbnRyaWVzOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJvdXRpbmcsIGFyZ3AsIHNpemVvZihyb3V0aW5nKSkpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FSU5WQUw7CisJCWlmIChyb3V0aW5nLm5yID49IEtWTV9NQVhfSVJRX1JPVVRFUykKKwkJCWdvdG8gb3V0OworCQlpZiAocm91dGluZy5mbGFncykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOT01FTTsKKwkJZW50cmllcyA9IHZtYWxsb2Mocm91dGluZy5uciAqIHNpemVvZigqZW50cmllcykpOworCQlpZiAoIWVudHJpZXMpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCXVyb3V0aW5nID0gYXJncDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGVudHJpZXMsIHVyb3V0aW5nLT5lbnRyaWVzLAorCQkJCSAgIHJvdXRpbmcubnIgKiBzaXplb2YoKmVudHJpZXMpKSkKKwkJCWdvdG8gb3V0X2ZyZWVfaXJxX3JvdXRpbmc7CisJCXIgPSBrdm1fc2V0X2lycV9yb3V0aW5nKGt2bSwgZW50cmllcywgcm91dGluZy5uciwKKwkJCQkJcm91dGluZy5mbGFncyk7CisJb3V0X2ZyZWVfaXJxX3JvdXRpbmc6CisJCXZmcmVlKGVudHJpZXMpOworCQlicmVhazsKKwl9CisjZW5kaWYKIAlkZWZhdWx0OgogCQlyID0ga3ZtX2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CiAJfQpAQCAtMTk5NSw2ICsxOTg2LDEwIEBACiAJY2FzZSBLVk1fQ0FQX1VTRVJfTUVNT1JZOgogCWNhc2UgS1ZNX0NBUF9ERVNUUk9ZX01FTU9SWV9SRUdJT05fV09SS1M6CiAJCXJldHVybiAxOworI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCisJY2FzZSBLVk1fQ0FQX0lSUV9ST1VUSU5HOgorCQlyZXR1cm4gS1ZNX01BWF9JUlFfUk9VVEVTOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQo=